kopia lustrzana https://github.com/Hamlib/Hamlib
1. Added VFO as target for some set/get cmds.
2. ./testrig still runs ok using RIG_VFO_CURR. git-svn-id: https://hamlib.svn.sourceforge.net/svnroot/hamlib/trunk@287 7ae35d74-ebe9-4afe-98af-79ac388436b8Hamlib-1.1.0
rodzic
748d949556
commit
6507078a5b
|
@ -7,7 +7,7 @@
|
|||
* box (FIF-232C) or similar
|
||||
*
|
||||
*
|
||||
* $Id: ft747.c,v 1.21 2000-11-25 21:49:34 javabear Exp $
|
||||
* $Id: ft747.c,v 1.22 2000-12-07 02:34:56 javabear Exp $
|
||||
*
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
|
@ -188,7 +188,7 @@ int ft747_init(RIG *rig) {
|
|||
|
||||
p->pacing = FT747_PACING_DEFAULT_VALUE; /* set pacing to minimum for now */
|
||||
p->read_update_delay = FT747_DEFAULT_READ_TIMEOUT; /* set update timeout to safe value */
|
||||
|
||||
p->current_vfo = RIG_VFO_A; /* default to VFO_A ? */
|
||||
rig->state.priv = (void*)p;
|
||||
|
||||
return RIG_OK;
|
||||
|
@ -260,7 +260,7 @@ int ft747_close(RIG *rig) {
|
|||
*/
|
||||
|
||||
|
||||
int ft747_set_freq(RIG *rig, freq_t freq) {
|
||||
int ft747_set_freq(RIG *rig, vfo_t vfo, freq_t freq) {
|
||||
struct rig_state *rig_s;
|
||||
struct ft747_priv_data *p;
|
||||
|
||||
|
@ -277,6 +277,8 @@ int ft747_set_freq(RIG *rig, freq_t freq) {
|
|||
|
||||
rig_debug(RIG_DEBUG_VERBOSE,"ft747: requested freq = %Li Hz \n", freq);
|
||||
|
||||
ft747_set_vfo(rig, vfo); /* select VFO first , new API */
|
||||
|
||||
to_bcd(bcd,freq,8);
|
||||
|
||||
dump_hex(bcd,4); /* just checking */
|
||||
|
@ -292,10 +294,15 @@ int ft747_set_freq(RIG *rig, freq_t freq) {
|
|||
write_block(rig_s->fd, cmd, FT747_CMD_LENGTH, rig_s->write_delay, rig_s->post_write_delay);
|
||||
|
||||
|
||||
return -RIG_ENIMPL;
|
||||
return RIG_OK;
|
||||
}
|
||||
|
||||
int ft747_get_freq(RIG *rig, freq_t *freq) {
|
||||
|
||||
/*
|
||||
* Return Freq for a given VFO
|
||||
*/
|
||||
|
||||
int ft747_get_freq(RIG *rig, vfo_t vfo, freq_t *freq) {
|
||||
struct ft747_priv_data *p;
|
||||
freq_t f;
|
||||
|
||||
|
@ -305,10 +312,22 @@ int ft747_get_freq(RIG *rig, freq_t *freq) {
|
|||
p = (struct ft747_priv_data*)rig->state.priv;
|
||||
|
||||
ft747_get_update_data(rig); /* get whole shebang from rig */
|
||||
|
||||
f = from_bcd_be(&(p->update_data[FT747_SUMO_DISPLAYED_FREQ+1]),8); /* grab freq and convert */
|
||||
|
||||
rig_debug(RIG_DEBUG_VERBOSE,"ft747: displayed freq = %Li Hz \n", f);
|
||||
if (vfo == RIG_VFO_CURR )
|
||||
vfo = p->current_vfo; /* from previous vfo cmd */
|
||||
|
||||
switch(vfo) {
|
||||
case RIG_VFO_A:
|
||||
f = from_bcd_be(&(p->update_data[FT747_SUMO_VFO_A_FREQ]),8); /* grab freq and convert */
|
||||
break;
|
||||
case RIG_VFO_B:
|
||||
f = from_bcd_be(&(p->update_data[FT747_SUMO_VFO_B_FREQ]),8); /* grab freq and convert */
|
||||
break;
|
||||
default:
|
||||
return -RIG_EINVAL; /* sorry, wrong VFO */
|
||||
}
|
||||
|
||||
rig_debug(RIG_DEBUG_VERBOSE,"ft747: freq = %Li Hz for VFO = %u \n", f, vfo);
|
||||
|
||||
(*freq) = f; /* return diplayed frequency */
|
||||
|
||||
|
@ -317,11 +336,11 @@ int ft747_get_freq(RIG *rig, freq_t *freq) {
|
|||
|
||||
|
||||
/*
|
||||
* set mode : eg AM. AMN , CW, NCW etc..
|
||||
* set mode : eg AM, CW etc for a given VFO
|
||||
*
|
||||
*/
|
||||
|
||||
int ft747_set_mode(RIG *rig, rmode_t mode) {
|
||||
int ft747_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width ) {
|
||||
struct rig_state *rig_s;
|
||||
struct ft747_priv_data *p;
|
||||
|
||||
|
@ -335,6 +354,7 @@ int ft747_set_mode(RIG *rig, rmode_t mode) {
|
|||
p = (struct ft747_priv_data*)rig->state.priv;
|
||||
rig_s = &rig->state;
|
||||
|
||||
ft747_set_vfo(rig, vfo); /* select VFO first , new API */
|
||||
|
||||
/*
|
||||
* translate mode from generic to ft747 specific
|
||||
|
@ -363,6 +383,22 @@ int ft747_set_mode(RIG *rig, rmode_t mode) {
|
|||
return -RIG_EINVAL; /* sorry, wrong MODE */
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Now set width
|
||||
*/
|
||||
|
||||
switch(width) {
|
||||
case RIG_PASSBAND_NORMAL: /* easy case */
|
||||
break;
|
||||
case RIG_PASSBAND_NARROW: /* must set narrow */
|
||||
mymode |= MODE_NAR;
|
||||
break;
|
||||
case RIG_PASSBAND_WIDE:
|
||||
return -RIG_EINVAL; /* sorry, wrong WIDTH */
|
||||
|
||||
}
|
||||
|
||||
cmd[3] = mymode;
|
||||
write_block(rig_s->fd, cmd, FT747_CMD_LENGTH, rig_s->write_delay, rig_s->post_write_delay);
|
||||
rig_debug(RIG_DEBUG_VERBOSE,"ft747: rig specific mode = %x \n", mymode);
|
||||
|
@ -371,7 +407,8 @@ int ft747_set_mode(RIG *rig, rmode_t mode) {
|
|||
|
||||
}
|
||||
|
||||
int ft747_get_mode(RIG *rig, rmode_t *mode) {
|
||||
|
||||
int ft747_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width) {
|
||||
struct ft747_priv_data *p;
|
||||
unsigned char mymode; /* ft747 mode */
|
||||
|
||||
|
@ -424,13 +461,16 @@ int ft747_get_mode(RIG *rig, rmode_t *mode) {
|
|||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* set vfo and store requested vfo for later RIG_VFO_CURR
|
||||
* requests.
|
||||
*
|
||||
*/
|
||||
int ft747_set_vfo(RIG *rig, vfo_t vfo) {
|
||||
struct rig_state *rig_s;
|
||||
struct ft747_priv_data *p;
|
||||
|
||||
static unsigned char cmd_A[] = { 0x00, 0x00, 0x00, 0x00, 0x05 }; /* select vfo A */
|
||||
static unsigned char cmd_B[] = { 0x00, 0x00, 0x00, 0x01, 0x05 }; /* select vfo B */
|
||||
static unsigned char cmd[] = { 0x00, 0x00, 0x00, 0x00, 0x05 }; /* select vfo A/B/Current */
|
||||
|
||||
if (!rig)
|
||||
return -RIG_EINVAL;
|
||||
|
@ -445,15 +485,25 @@ int ft747_set_vfo(RIG *rig, vfo_t vfo) {
|
|||
|
||||
switch(vfo) {
|
||||
case RIG_VFO_A:
|
||||
write_block(rig_s->fd, cmd_A, FT747_CMD_LENGTH, rig_s->write_delay, rig_s->post_write_delay);
|
||||
cmd[3] = 0x00;
|
||||
write_block(rig_s->fd, cmd, FT747_CMD_LENGTH, rig_s->write_delay, rig_s->post_write_delay);
|
||||
p->current_vfo = vfo; /* update active VFO */
|
||||
return RIG_OK;
|
||||
case RIG_VFO_B:
|
||||
write_block(rig_s->fd, cmd_B, FT747_CMD_LENGTH, rig_s->write_delay, rig_s->post_write_delay);
|
||||
cmd[3] = 0x01;
|
||||
write_block(rig_s->fd, cmd, FT747_CMD_LENGTH, rig_s->write_delay, rig_s->post_write_delay);
|
||||
p->current_vfo = vfo; /* update active VFO */
|
||||
return RIG_OK;
|
||||
case RIG_VFO_CURR:
|
||||
cmd[3] = p->current_vfo; /* use active VFO */
|
||||
write_block(rig_s->fd, cmd, FT747_CMD_LENGTH, rig_s->write_delay, rig_s->post_write_delay);
|
||||
return RIG_OK;
|
||||
|
||||
default:
|
||||
return -RIG_EINVAL; /* sorry, wrong VFO */
|
||||
}
|
||||
|
||||
|
||||
return RIG_OK; /* good */
|
||||
}
|
||||
|
||||
|
@ -490,7 +540,7 @@ int ft747_get_vfo(RIG *rig, vfo_t *vfo) {
|
|||
|
||||
}
|
||||
|
||||
int ft747_set_ptt(RIG *rig, ptt_t ptt) {
|
||||
int ft747_set_ptt(RIG *rig,vfo_t vfo, ptt_t ptt) {
|
||||
struct rig_state *rig_s;
|
||||
struct ft747_priv_data *p;
|
||||
|
||||
|
@ -503,6 +553,8 @@ int ft747_set_ptt(RIG *rig, ptt_t ptt) {
|
|||
p = (struct ft747_priv_data*)rig->state.priv;
|
||||
rig_s = &rig->state;
|
||||
|
||||
ft747_set_vfo(rig,vfo); /* select VFO first */
|
||||
|
||||
switch(ptt) {
|
||||
case RIG_PTT_OFF:
|
||||
write_block(rig_s->fd, cmd_ptt_off, FT747_CMD_LENGTH, rig_s->write_delay, rig_s->post_write_delay);
|
||||
|
@ -516,7 +568,7 @@ int ft747_set_ptt(RIG *rig, ptt_t ptt) {
|
|||
return RIG_OK; /* good */
|
||||
}
|
||||
|
||||
int ft747_get_ptt(RIG *rig, ptt_t *ptt) {
|
||||
int ft747_get_ptt(RIG *rig, vfo_t vfo, ptt_t *ptt) {
|
||||
struct ft747_priv_data *p;
|
||||
unsigned char status; /* ft747 mode */
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
* box (FIF-232C) or similar (max232 + some capacitors :-)
|
||||
*
|
||||
*
|
||||
* $Id: ft747.h,v 1.15 2000-11-25 21:49:34 javabear Exp $
|
||||
* $Id: ft747.h,v 1.16 2000-12-07 02:34:56 javabear Exp $
|
||||
*
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
|
@ -115,11 +115,17 @@
|
|||
/*
|
||||
* Some useful offsets in the status update map (offset)
|
||||
*
|
||||
* Manual appears to be full of mistakes regarding offsets etc.. -- FS
|
||||
*
|
||||
*/
|
||||
|
||||
#define FT747_SUMO_DISPLAYED_MODE 0x18
|
||||
#define FT747_SUMO_DISPLAYED_STATUS 0x00
|
||||
#define FT747_SUMO_DISPLAYED_FREQ 0x01
|
||||
#define FT747_SUMO_VFO_A_FREQ 0x09
|
||||
#define FT747_SUMO_VFO_B_FREQ 0x11
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
|
@ -130,6 +136,7 @@
|
|||
struct ft747_priv_data {
|
||||
unsigned char pacing; /* pacing value */
|
||||
unsigned int read_update_delay; /* depends on pacing value */
|
||||
unsigned char current_vfo; /* active VFO from last cmd */
|
||||
unsigned char p_cmd[FT747_CMD_LENGTH]; /* private copy of constructed CAT cmd */
|
||||
unsigned char update_data[FT747_STATUS_UPDATE_DATA_LENGTH]; /* returned data */
|
||||
};
|
||||
|
@ -143,17 +150,17 @@ int ft747_cleanup(RIG *rig);
|
|||
int ft747_open(RIG *rig);
|
||||
int ft747_close(RIG *rig);
|
||||
|
||||
int ft747_set_freq(RIG *rig, freq_t freq);
|
||||
int ft747_get_freq(RIG *rig, freq_t *freq);
|
||||
int ft747_set_freq(RIG *rig, vfo_t vfo, freq_t freq);
|
||||
int ft747_get_freq(RIG *rig, vfo_t vfo, freq_t *freq);
|
||||
|
||||
int ft747_set_mode(RIG *rig, rmode_t mode); /* select mode */
|
||||
int ft747_get_mode(RIG *rig, rmode_t *mode); /* get mode */
|
||||
int ft747_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width); /* select mode */
|
||||
int ft747_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width); /* get mode */
|
||||
|
||||
int ft747_set_vfo(RIG *rig, vfo_t vfo); /* select vfo */
|
||||
int ft747_get_vfo(RIG *rig, vfo_t *vfo); /* get vfo */
|
||||
|
||||
int ft747_set_ptt(RIG *rig, ptt_t ptt);
|
||||
int ft747_get_ptt(RIG *rig, ptt_t *ptt);
|
||||
int ft747_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt);
|
||||
int ft747_get_ptt(RIG *rig, vfo_t vfo, ptt_t *ptt);
|
||||
|
||||
|
||||
|
||||
|
|
Ładowanie…
Reference in New Issue