From c989a709dcd0215edf3a9a60bf038a6fcccbca3e Mon Sep 17 00:00:00 2001 From: "Frank Singleton, VK3FCS" Date: Wed, 13 Dec 2000 01:26:08 +0000 Subject: [PATCH] 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-79ac388436b8 --- ft747/ft747.c | 153 +++++++++++++++++++++++++++++++------------------- ft747/ft747.h | 71 ++++------------------- 2 files changed, 105 insertions(+), 119 deletions(-) diff --git a/ft747/ft747.c b/ft747/ft747.c index cfe6acb6a..0654176f1 100644 --- a/ft747/ft747.c +++ b/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 + + /* diff --git a/ft747/ft747.h b/ft747/ft747.h index 3273d87f6..dc5fd1b0e 100644 --- a/ft747/ft747.h +++ b/ft747/ft747.h @@ -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 */ };