kopia lustrzana https://github.com/Hamlib/Hamlib
Removed static stuff from functions.
Also, begin to implement table driven command translation from API to rig native. priv now contains a cmd table that is used for backend commands towards rig. git-svn-id: https://hamlib.svn.sourceforge.net/svnroot/hamlib/trunk@293 7ae35d74-ebe9-4afe-98af-79ac388436b8Hamlib-1.1.0
rodzic
a172a41fdb
commit
c989a709dc
153
ft747/ft747.c
153
ft747/ft747.c
|
@ -7,7 +7,7 @@
|
|||
* box (FIF-232C) or similar
|
||||
*
|
||||
*
|
||||
* $Id: ft747.c,v 1.25 2000-12-11 04:19:10 javabear Exp $
|
||||
* $Id: ft747.c,v 1.26 2000-12-13 01:26:08 javabear Exp $
|
||||
*
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
|
@ -27,7 +27,6 @@
|
|||
*/
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* TODO - FS
|
||||
*
|
||||
|
@ -62,10 +61,10 @@ static int ft747_get_update_data(RIG *rig);
|
|||
/* Native ft747 cmd set prototypes. These are READ ONLY as each */
|
||||
/* rig instance will copy from these and modify if required . */
|
||||
/* Complete sequences (1) can be read and used directly as a cmd sequence . */
|
||||
/* Incomplete sequences (0) must be copied to priv data and completed */
|
||||
/* there. */
|
||||
/* Incomplete sequences (0) must be completed with extra parameters */
|
||||
/* eg: mem number, or freq etc.. */
|
||||
|
||||
static const struct ft747_cmd_set ncmd[] = {
|
||||
static const ft747_cmd_set_t ncmd[] = {
|
||||
{ 1, { 0x00, 0x00, 0x00, 0x00, 0x01 } }, /* split = off */
|
||||
{ 1, { 0x00, 0x00, 0x00, 0x01, 0x01 } }, /* split = on */
|
||||
{ 0, { 0x00, 0x00, 0x00, 0x00, 0x02 } }, /* recall memory*/
|
||||
|
@ -218,10 +217,11 @@ int ft747_init(RIG *rig) {
|
|||
|
||||
rig_debug(RIG_DEBUG_VERBOSE,"ft747:ft747_init called \n");
|
||||
|
||||
/* init the priv_data from static struct
|
||||
* + override with rig-specific preferences
|
||||
/*
|
||||
* Copy native cmd set to private cmd storage area
|
||||
*/
|
||||
|
||||
|
||||
memcpy(p->pcs,ncmd,sizeof(ncmd));
|
||||
|
||||
/* TODO: read pacing from preferences */
|
||||
|
||||
|
@ -302,37 +302,35 @@ int ft747_close(RIG *rig) {
|
|||
int ft747_set_freq(RIG *rig, vfo_t vfo, freq_t freq) {
|
||||
struct rig_state *rig_s;
|
||||
struct ft747_priv_data *p;
|
||||
|
||||
static unsigned char cmd[] = { 0x00, 0x00, 0x00, 0x00, 0x0a }; /* set freq */
|
||||
static unsigned char bcd[] = { 0,0,0,0 }; /* set freq */
|
||||
|
||||
int i;
|
||||
unsigned char *cmd; /* points to sequence to send */
|
||||
|
||||
if (!rig)
|
||||
return -RIG_EINVAL;
|
||||
|
||||
|
||||
|
||||
p = (struct ft747_priv_data*)rig->state.priv;
|
||||
|
||||
rig_s = &rig->state;
|
||||
|
||||
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 */
|
||||
/*
|
||||
* Copy native cmd freq_set to private cmd storage area
|
||||
*/
|
||||
|
||||
rig_debug(RIG_DEBUG_VERBOSE,"ft747: requested freq after conversion = %Li Hz \n", from_bcd(bcd,8));
|
||||
memcpy(&p->p_cmd,&ncmd[FT_747_NATIVE_FREQ_SET].nseq,FT747_CMD_LENGTH);
|
||||
|
||||
to_bcd(bcd,freq/10,8); /* must pass as multiple of 10 Hz to ft747 yuk , see TODO -- FS*/
|
||||
to_bcd(p->p_cmd,freq/10,8); /* store bcd format in in p_cmd */
|
||||
/* TODO -- fix 10Hz resolution -- FS */
|
||||
|
||||
for(i=0; i<4; i++) {
|
||||
cmd[i] = bcd[i]; /* add bcd coded freq to cmd */
|
||||
}
|
||||
rig_debug(RIG_DEBUG_VERBOSE,"ft747: requested freq after conversion = %Li Hz \n", from_bcd(p->p_cmd,8)* 10 );
|
||||
|
||||
cmd = p->p_cmd; /* get native sequence */
|
||||
write_block(rig_s->fd, cmd, FT747_CMD_LENGTH, rig_s->write_delay, rig_s->post_write_delay);
|
||||
|
||||
|
||||
return RIG_OK;
|
||||
}
|
||||
|
||||
|
@ -382,10 +380,8 @@ int ft747_get_freq(RIG *rig, vfo_t vfo, freq_t *freq) {
|
|||
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;
|
||||
|
||||
unsigned char mymode; /* ft747 mode value */
|
||||
|
||||
static unsigned char cmd[] = { 0x00, 0x00, 0x00, 0x00, 0x0c }; /* mode set */
|
||||
unsigned char *cmd; /* points to sequence to send */
|
||||
unsigned char cmd_index; /* index of sequence to send */
|
||||
|
||||
if (!rig)
|
||||
return -RIG_EINVAL;
|
||||
|
@ -403,21 +399,20 @@ int ft747_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width ) {
|
|||
|
||||
switch(mode) {
|
||||
case RIG_MODE_AM:
|
||||
mymode = MODE_SET_AMW;
|
||||
cmd_index = FT_747_NATIVE_MODE_SET_AMW;
|
||||
break;
|
||||
case RIG_MODE_CW:
|
||||
mymode = MODE_SET_CWW;
|
||||
cmd_index = FT_747_NATIVE_MODE_SET_CWW;
|
||||
break;
|
||||
case RIG_MODE_USB:
|
||||
mymode = MODE_SET_USB;
|
||||
cmd_index = FT_747_NATIVE_MODE_SET_USB;
|
||||
break;
|
||||
case RIG_MODE_LSB:
|
||||
mymode = MODE_SET_LSB;
|
||||
cmd_index = FT_747_NATIVE_MODE_SET_LSB;
|
||||
break;
|
||||
case RIG_MODE_FM:
|
||||
mymode = MODE_SET_FMW;
|
||||
cmd_index = FT_747_NATIVE_MODE_SET_FMW;
|
||||
break;
|
||||
|
||||
default:
|
||||
return -RIG_EINVAL; /* sorry, wrong MODE */
|
||||
}
|
||||
|
@ -428,19 +423,40 @@ int ft747_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width ) {
|
|||
*/
|
||||
|
||||
switch(width) {
|
||||
case RIG_PASSBAND_NORMAL: /* easy case */
|
||||
break;
|
||||
case RIG_PASSBAND_NARROW: /* must set narrow */
|
||||
mymode |= MODE_NAR;
|
||||
case RIG_PASSBAND_NORMAL: /* easy case , no change to native sequence */
|
||||
break;
|
||||
|
||||
case RIG_PASSBAND_WIDE:
|
||||
return -RIG_EINVAL; /* sorry, wrong WIDTH */
|
||||
return -RIG_EINVAL; /* sorry, WIDE WIDTH is not supported */
|
||||
|
||||
case RIG_PASSBAND_NARROW: /* must set narrow */
|
||||
switch(mode) {
|
||||
case RIG_MODE_AM:
|
||||
cmd_index = FT_747_NATIVE_MODE_SET_AMN;
|
||||
break;
|
||||
case RIG_MODE_FM:
|
||||
cmd_index = FT_747_NATIVE_MODE_SET_FMN;
|
||||
break;
|
||||
case RIG_MODE_CW:
|
||||
cmd_index = FT_747_NATIVE_MODE_SET_CWN;
|
||||
break;
|
||||
default:
|
||||
return -RIG_EINVAL; /* sorry, wrong MODE/WIDTH combo */
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
return -RIG_EINVAL; /* sorry, wrong WIDTH requested */
|
||||
}
|
||||
|
||||
/*
|
||||
* phew! now send cmd to rig
|
||||
*/
|
||||
|
||||
cmd[3] = mymode;
|
||||
cmd = (unsigned char *) p->pcs[cmd_index].nseq; /* get native sequence */
|
||||
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);
|
||||
|
||||
rig_debug(RIG_DEBUG_VERBOSE,"ft747: cmd_index = %i \n", cmd_index);
|
||||
|
||||
return RIG_OK; /* good */
|
||||
|
||||
|
@ -459,7 +475,7 @@ int ft747_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width) {
|
|||
ft747_get_update_data(rig); /* get whole shebang from rig */
|
||||
|
||||
mymode = p->update_data[FT747_SUMO_DISPLAYED_MODE];
|
||||
mymode = mymode & MODE_MASK; /* mask out bits 5 and 6 */
|
||||
mymode &= MODE_MASK; /* mask out bits 5 and 6 */
|
||||
|
||||
rig_debug(RIG_DEBUG_VERBOSE,"ft747: mymode = %x \n", mymode);
|
||||
|
||||
|
@ -508,7 +524,10 @@ int ft747_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width) {
|
|||
int ft747_set_vfo(RIG *rig, vfo_t vfo) {
|
||||
struct rig_state *rig_s;
|
||||
struct ft747_priv_data *p;
|
||||
static unsigned char cmd[] = { 0x00, 0x00, 0x00, 0x00, 0x05 }; /* select vfo A/B/Current */
|
||||
|
||||
unsigned char *cmd; /* points to sequence to send */
|
||||
unsigned char cmd_index; /* index of sequence to send */
|
||||
|
||||
|
||||
if (!rig)
|
||||
return -RIG_EINVAL;
|
||||
|
@ -524,33 +543,40 @@ int ft747_set_vfo(RIG *rig, vfo_t vfo) {
|
|||
|
||||
switch(vfo) {
|
||||
case RIG_VFO_A:
|
||||
cmd[3] = FT747_VFO_A;
|
||||
write_block(rig_s->fd, cmd, FT747_CMD_LENGTH, rig_s->write_delay, rig_s->post_write_delay);
|
||||
cmd_index = FT_747_NATIVE_VFO_A;
|
||||
p->current_vfo = vfo; /* update active VFO */
|
||||
return RIG_OK;
|
||||
break;
|
||||
case RIG_VFO_B:
|
||||
cmd[3] = FT747_VFO_B;
|
||||
write_block(rig_s->fd, cmd, FT747_CMD_LENGTH, rig_s->write_delay, rig_s->post_write_delay);
|
||||
cmd_index = FT_747_NATIVE_VFO_B;
|
||||
p->current_vfo = vfo; /* update active VFO */
|
||||
return RIG_OK;
|
||||
break;
|
||||
case RIG_VFO_CURR:
|
||||
switch(p->current_vfo) { /* what is my active VFO ? */
|
||||
case RIG_VFO_A:
|
||||
cmd[3] = FT747_VFO_A;
|
||||
write_block(rig_s->fd, cmd, FT747_CMD_LENGTH, rig_s->write_delay, rig_s->post_write_delay);
|
||||
return RIG_OK;
|
||||
cmd_index = FT_747_NATIVE_VFO_A;
|
||||
break;
|
||||
case RIG_VFO_B:
|
||||
cmd[3] = FT747_VFO_B;
|
||||
write_block(rig_s->fd, cmd, FT747_CMD_LENGTH, rig_s->write_delay, rig_s->post_write_delay);
|
||||
return RIG_OK;
|
||||
cmd_index = FT_747_NATIVE_VFO_B;
|
||||
break;
|
||||
default:
|
||||
rig_debug(RIG_DEBUG_VERBOSE,"ft747: Unknown default VFO \n");
|
||||
return -RIG_EINVAL; /* sorry, wrong VFO */
|
||||
return -RIG_EINVAL; /* sorry, wrong current VFO */
|
||||
}
|
||||
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
return -RIG_EINVAL; /* sorry, wrong VFO */
|
||||
}
|
||||
|
||||
/*
|
||||
* phew! now send cmd to rig
|
||||
*/
|
||||
|
||||
cmd = (unsigned char *) p->pcs[cmd_index].nseq; /* get native sequence */
|
||||
write_block(rig_s->fd, cmd, FT747_CMD_LENGTH, rig_s->write_delay, rig_s->post_write_delay);
|
||||
|
||||
return RIG_OK;
|
||||
|
||||
}
|
||||
|
||||
|
@ -591,6 +617,8 @@ int ft747_set_ptt(RIG *rig,vfo_t vfo, ptt_t ptt) {
|
|||
struct rig_state *rig_s;
|
||||
struct ft747_priv_data *p;
|
||||
unsigned char *cmd; /* points to sequence to send */
|
||||
unsigned char cmd_index; /* index of sequence to send */
|
||||
|
||||
|
||||
if (!rig)
|
||||
return -RIG_EINVAL;
|
||||
|
@ -603,16 +631,22 @@ int ft747_set_ptt(RIG *rig,vfo_t vfo, ptt_t ptt) {
|
|||
|
||||
switch(ptt) {
|
||||
case RIG_PTT_OFF:
|
||||
cmd = (unsigned char *)&ncmd[FT_747_NATIVE_MODE_PTT_OFF].nseq; /* get native sequence */
|
||||
cmd_index = FT_747_NATIVE_PTT_OFF;
|
||||
break;
|
||||
case RIG_PTT_ON:
|
||||
cmd = (unsigned char *)&ncmd[FT_747_NATIVE_MODE_PTT_ON].nseq;
|
||||
cmd_index = FT_747_NATIVE_PTT_ON;
|
||||
break;
|
||||
default:
|
||||
return -RIG_EINVAL; /* sorry, wrong VFO */
|
||||
}
|
||||
|
||||
/*
|
||||
* phew! now send cmd to rig
|
||||
*/
|
||||
|
||||
cmd = (unsigned char *) p->pcs[cmd_index].nseq; /* get native sequence */
|
||||
write_block(rig_s->fd, cmd, FT747_CMD_LENGTH, rig_s->write_delay, rig_s->post_write_delay);
|
||||
|
||||
return RIG_OK; /* good */
|
||||
}
|
||||
|
||||
|
@ -853,8 +887,6 @@ void ft747_cmd_get_update_store(int fd, unsigned char *buffer) {
|
|||
}
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
* Private helper cmd to copy a native cmd sequence to priv
|
||||
|
@ -867,6 +899,9 @@ static void build_cmd(unsigned char *dst, int command){
|
|||
}
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
* box (FIF-232C) or similar (max232 + some capacitors :-)
|
||||
*
|
||||
*
|
||||
* $Id: ft747.h,v 1.18 2000-12-11 04:19:10 javabear Exp $
|
||||
* $Id: ft747.h,v 1.19 2000-12-13 01:26:08 javabear Exp $
|
||||
*
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
|
@ -94,10 +94,12 @@ enum ft747_native_cmd_e {
|
|||
FT_747_NATIVE_MODE_SET_AMN,
|
||||
FT_747_NATIVE_MODE_SET_FMW,
|
||||
FT_747_NATIVE_MODE_SET_FMN,
|
||||
FT_747_NATIVE_MODE_PACING,
|
||||
FT_747_NATIVE_MODE_PTT_OFF,
|
||||
FT_747_NATIVE_MODE_PTT_ON,
|
||||
FT_747_NATIVE_MODE_UPDATE
|
||||
FT_747_NATIVE_PACING,
|
||||
FT_747_NATIVE_PTT_OFF,
|
||||
FT_747_NATIVE_PTT_ON,
|
||||
FT_747_NATIVE_UPDATE,
|
||||
FT_747_NATIVE_SIZE /* end marker, value indicates number of */
|
||||
/* native cmd entries */
|
||||
|
||||
};
|
||||
|
||||
|
@ -105,7 +107,7 @@ typedef enum ft747_native_cmd_e ft747_native_cmd_t;
|
|||
|
||||
|
||||
/*
|
||||
* Data structure for FT747 native cmd set
|
||||
* Basic Data structure for FT747 native cmd set
|
||||
*/
|
||||
|
||||
struct ft747_cmd_set {
|
||||
|
@ -113,60 +115,8 @@ struct ft747_cmd_set {
|
|||
unsigned char nseq[5]; /* native cmd sequence */
|
||||
};
|
||||
|
||||
/* typedef struct ft747_cmd_set ft747_cmd_set_t; */
|
||||
typedef struct ft747_cmd_set ft747_cmd_set_t;
|
||||
|
||||
#if 0
|
||||
#define FT_747_NATIVE_SPLIT_OFF 0
|
||||
#define FT_747_NATIVE_SPLIT_ON 1
|
||||
#define FT_747_NATIVE_RECALL_MEM 2
|
||||
#define FT_747_NATIVE_VFO_TO_MEM 3
|
||||
#define FT_747_NATIVE_DLOCK_OFF 4
|
||||
#define FT_747_NATIVE_DLOCK_ON 5
|
||||
#define FT_747_NATIVE_VFO_A 6
|
||||
#define FT_747_NATIVE_VFO_B 7
|
||||
|
||||
#define FT_747_NATIVE_M_TO_VFO 9
|
||||
#define FT_747_NATIVE_UP_500K 9
|
||||
#define FT_747_NATIVE_DOWN_500K 10
|
||||
#define FT_747_NATIVE_CLARIFY_OFF 12
|
||||
#define FT_747_NATIVE_CLARIFY_ON 12
|
||||
#define FT_747_NATIVE_FREQ_SET 13
|
||||
|
||||
#define FT_747_NATIVE_MODE_SET_LSB 14
|
||||
#define FT_747_NATIVE_MODE_SET_USB 15
|
||||
#define FT_747_NATIVE_MODE_SET_CWW 16
|
||||
#define FT_747_NATIVE_MODE_SET_CWN 17
|
||||
#define FT_747_NATIVE_MODE_SET_AMW 18
|
||||
#define FT_747_NATIVE_MODE_SET_AMN 19
|
||||
#define FT_747_NATIVE_MODE_SET_FMW 20
|
||||
#define FT_747_NATIVE_MODE_SET_FMN 20
|
||||
|
||||
#define FT_747_NATIVE_MODE_PACING 21
|
||||
#define FT_747_NATIVE_MODE_PTT_OFF 22
|
||||
#define FT_747_NATIVE_MODE_PTT_ON 23
|
||||
#define FT_747_NATIVE_MODE_UPDATE 24
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* Internal MODES - when setting modes via cmd_mode_set() */
|
||||
|
@ -247,7 +197,8 @@ 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 , can be either RIG_VFO_A or RIG_VFO_B only */
|
||||
unsigned char p_cmd[FT747_CMD_LENGTH]; /* private copy of constructed CAT cmd */
|
||||
unsigned char p_cmd[FT747_CMD_LENGTH]; /* private copy of 1 constructed CAT cmd */
|
||||
ft747_cmd_set_t pcs[FT_747_NATIVE_SIZE]; /* private cmd set */
|
||||
unsigned char update_data[FT747_STATUS_UPDATE_DATA_LENGTH]; /* returned data */
|
||||
};
|
||||
|
||||
|
|
Ładowanie…
Reference in New Issue