diff --git a/icom/ic7100.c b/icom/ic7100.c index 028c36829..063bd0d00 100644 --- a/icom/ic7100.c +++ b/icom/ic7100.c @@ -99,21 +99,26 @@ RIG_LEVEL_MONITOR_GAIN| \ RIG_LEVEL_NB) -#define IC7100_PARM_ALL (RIG_PARM_ANN|RIG_PARM_BACKLIGHT) +#define IC7100_PARM_ALL (RIG_PARM_ANN|RIG_PARM_BACKLIGHT|RIG_PARM_KEYLIGHT|RIG_PARM_BEEP|RIG_PARM_TIME) -int ic7100_tokens[] = { TOK_KEY_BEEP, TOK_BACKLIGHT, TOK_KEYLIGHT, TOK_TIME, - TOK_DSTAR_CODE, TOK_DSTAR_DSQL, TOK_DSTAR_CALL_SIGN, TOK_DSTAR_MESSAGE, TOK_DSTAR_STATUS, - TOK_DSTAR_MY_CS, TOK_DSTAR_TX_CS, TOK_DSTAR_TX_MESS, +struct cmdparams ic7100_rigcmds[] = { + { {.s=RIG_PARM_BEEP}, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x00, 0x03}, CMD_DAT_BOL, 1 }, + { {.s=RIG_PARM_BACKLIGHT}, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x04}, CMD_DAT_LVL, 2 }, + { {.s=RIG_PARM_KEYLIGHT}, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x05}, CMD_DAT_LVL, 2 }, + { {.s=RIG_PARM_TIME}, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x21}, CMD_DAT_TIM, 2 }, + { {.s=RIG_PARM_NONE} } +}; + +int ic7100_tokens[] = { TOK_DSTAR_CODE, TOK_DSTAR_DSQL, TOK_DSTAR_CALL_SIGN, TOK_DSTAR_MESSAGE, + TOK_DSTAR_STATUS, TOK_DSTAR_MY_CS, TOK_DSTAR_TX_CS, TOK_DSTAR_TX_MESS, TOK_BACKEND_NONE }; struct confparams ic7100_ext[] = { - { TOK_TIME, "time", "Time (seconds)", "", "", RIG_CONF_NUMERIC, { .n = { 0, 2359, 1 } } }, { 0 } }; -struct cmdparams ic7100_cmd[] = { - { TOK_TIME, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x21}, CMD_DAT_TIM, 2 }, - { TOK_LINK } +struct cmdparams ic7100_extcmds[] = { + { {.t=TOK_LINK} } }; // IC-7100 S-meter calibration data based on manual @@ -189,7 +194,8 @@ static const struct icom_priv_caps ic7100_priv_caps = { .level = RIG_AGC_SLOW, .icom_level = 3 }, { .level = -1, .icom_level = 0 }, }, - .cmdparams = ic7100_cmd + .rigcmds = ic7100_rigcmds, + .extcmds = ic7100_extcmds }; const struct rig_caps ic7100_caps = diff --git a/icom/icom.c b/icom/icom.c index e14526401..67242e21e 100644 --- a/icom/icom.c +++ b/icom/icom.c @@ -430,21 +430,21 @@ const struct confparams icom_ext_parms[] = const struct cmdparams icom_ext_cmd[] = { - { TOK_DSTAR_CALL_SIGN, C_CTL_DIG, S_DIG_DSCALS, SC_MOD_RW12, 2, {0}, CMD_DAT_BUF, 38 }, - { TOK_DSTAR_MESSAGE, C_CTL_DIG, S_DIG_DSMESS, SC_MOD_RW12, 2, {0}, CMD_DAT_STR, 32 }, - { TOK_DSTAR_STATUS, C_CTL_DIG, S_DIG_DSRSTS, SC_MOD_RW12, 2, {0}, CMD_DAT_BUF, 1 }, - { TOK_DSTAR_GPS_DATA, C_CTL_DIG, S_DIG_DSGPSD, SC_MOD_RW12, 2, {0}, CMD_DAT_BUF, 52 }, - { TOK_DSTAR_GPS_MESS, C_CTL_DIG, S_DIG_DSGPSM, SC_MOD_RW12, 2, {0}, CMD_DAT_STR, 52 }, - { TOK_DSTAR_DSQL, C_CTL_DIG, S_DIG_DSCSQL, SC_MOD_RW, 1, {0}, CMD_DAT_BOL, 1 }, - { TOK_DSTAR_CODE, C_CTL_DIG, S_DIG_DSCSQL, SC_MOD_RW12, 2, {0}, CMD_DAT_FLT, 1 }, - { TOK_DSTAR_TX_DATA, C_CTL_DSD, S_DSD_DSTXDT, SC_MOD_RW, 1, {0}, CMD_DAT_BUF, 30 }, - { TOK_DSTAR_MY_CS, C_CTL_DVT, S_DVT_DSMYCS, SC_MOD_RW, 1, {0}, CMD_DAT_STR, 12 }, - { TOK_DSTAR_TX_CS, C_CTL_DVT, S_DVT_DSTXCS, SC_MOD_RW, 1, {0}, CMD_DAT_STR, 24 }, - { TOK_DSTAR_TX_MESS, C_CTL_DVT, S_DVT_DSTXMS, SC_MOD_RW, 1, {0}, CMD_DAT_STR, 20 }, - { TOK_DRIVE_GAIN, C_CTL_LVL, S_LVL_DRIVE, SC_MOD_RW, 1, {0}, CMD_DAT_FLT, 2 }, - { TOK_DIGI_SEL_FUNC, C_CTL_FUNC, S_FUNC_DIGISEL, SC_MOD_RW, 1, {0}, CMD_DAT_BOL, 1 }, - { TOK_DIGI_SEL_LEVEL, C_CTL_LVL, S_LVL_DIGI, SC_MOD_RW, 1, {0}, CMD_DAT_FLT, 2 }, - { 0 } + { {.t=TOK_DSTAR_CALL_SIGN}, C_CTL_DIG, S_DIG_DSCALS, SC_MOD_RW12, 2, {0}, CMD_DAT_BUF, 38 }, + { {.t=TOK_DSTAR_MESSAGE}, C_CTL_DIG, S_DIG_DSMESS, SC_MOD_RW12, 2, {0}, CMD_DAT_STR, 32 }, + { {.t=TOK_DSTAR_STATUS}, C_CTL_DIG, S_DIG_DSRSTS, SC_MOD_RW12, 2, {0}, CMD_DAT_BUF, 1 }, + { {.t=TOK_DSTAR_GPS_DATA}, C_CTL_DIG, S_DIG_DSGPSD, SC_MOD_RW12, 2, {0}, CMD_DAT_BUF, 52 }, + { {.t=TOK_DSTAR_GPS_MESS}, C_CTL_DIG, S_DIG_DSGPSM, SC_MOD_RW12, 2, {0}, CMD_DAT_STR, 52 }, + { {.t=TOK_DSTAR_DSQL}, C_CTL_DIG, S_DIG_DSCSQL, SC_MOD_RW, 1, {0}, CMD_DAT_BOL, 1 }, + { {.t=TOK_DSTAR_CODE}, C_CTL_DIG, S_DIG_DSCSQL, SC_MOD_RW12, 2, {0}, CMD_DAT_FLT, 1 }, + { {.t=TOK_DSTAR_TX_DATA}, C_CTL_DSD, S_DSD_DSTXDT, SC_MOD_RW, 1, {0}, CMD_DAT_BUF, 30 }, + { {.t=TOK_DSTAR_MY_CS}, C_CTL_DVT, S_DVT_DSMYCS, SC_MOD_RW, 1, {0}, CMD_DAT_STR, 12 }, + { {.t=TOK_DSTAR_TX_CS}, C_CTL_DVT, S_DVT_DSTXCS, SC_MOD_RW, 1, {0}, CMD_DAT_STR, 24 }, + { {.t=TOK_DSTAR_TX_MESS}, C_CTL_DVT, S_DVT_DSTXMS, SC_MOD_RW, 1, {0}, CMD_DAT_STR, 20 }, + { {.t=TOK_DRIVE_GAIN}, C_CTL_LVL, S_LVL_DRIVE, SC_MOD_RW, 1, {0}, CMD_DAT_FLT, 2 }, + { {.t=TOK_DIGI_SEL_FUNC}, C_CTL_FUNC, S_FUNC_DIGISEL, SC_MOD_RW, 1, {0}, CMD_DAT_BOL, 1 }, + { {.t=TOK_DIGI_SEL_LEVEL}, C_CTL_LVL, S_LVL_DIGI, SC_MOD_RW, 1, {0}, CMD_DAT_FLT, 2 }, + { {0} } }; /* @@ -2542,83 +2542,91 @@ int icom_get_ext_parm(RIG *rig, token_t token, value_t *val) return icom_get_ext_cmd(rig, RIG_VFO_NONE, token, val); } -int icom_get_ext_cmd(RIG *rig, vfo_t vfo, token_t token, value_t *val) +int icom_get_cmd(RIG *rig, vfo_t vfo, struct cmdparams *par, value_t *val) { - int i; + + rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); + unsigned char ssc = 0x02; unsigned char resbuf[MAXFRAMELEN]; int reslen = sizeof(resbuf); int retval; + if (!(par->submod & SC_MOD_RD)) return -RIG_EINVAL; + if ((par->submod & SC_MOD_RW12) == SC_MOD_RW12) { + retval = icom_get_raw_buf(rig, par->command, par->subcmd, 1, &ssc, &reslen, resbuf); + } else { + retval = icom_get_raw_buf(rig, par->command, par->subcmd, + par->sublen, (unsigned char *)par->subext, &reslen, resbuf); + } + if (retval != RIG_OK) { + return retval; + } + switch (par->dattyp) { + case CMD_DAT_WRD: { + int wrd = 0; + int i; + for (i = 0; i < par->datlen; i++) { + wrd = (wrd << 8) + resbuf[i]; + } + val->i = wrd; + } + break; + case CMD_DAT_STR: + if (strlen(val->s) < reslen) { + return -RIG_EINTERNAL; + } + memcpy(val->s, resbuf, reslen); + val->s[reslen] = 0; + break; + case CMD_DAT_BUF: + if (reslen > val->b.l) { + return -RIG_EINTERNAL; + } + memcpy(val->b.d, resbuf, reslen); + val->b.l = reslen; + break; + case CMD_DAT_INT: + val->i = from_bcd_be(resbuf, (reslen * 2)); + break; + case CMD_DAT_FLT: + val->f = (float) from_bcd_be(resbuf, (reslen * 2)); + break; + case CMD_DAT_LVL: + val->f = (float) from_bcd_be(resbuf, (reslen * 2)) / 255.0; + break; + case CMD_DAT_BOL: + val->i = (from_bcd_be(resbuf, (reslen * 2)) == 0) ? 0 : 1; + break; + case CMD_DAT_TIM: + val->i = (from_bcd_be(resbuf, 2) * 3600) + (from_bcd_be(&resbuf[1], 2) * 60); + break; + default: + val->i = 0; + break; + } + return RIG_OK; +} + +int icom_get_ext_cmd(RIG *rig, vfo_t vfo, token_t token, value_t *val) +{ + int i; + rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); for (i = 0; rig->caps->ext_tokens && rig->caps->ext_tokens[i] != TOK_BACKEND_NONE; i++) { if (rig->caps->ext_tokens[i] == token) { const struct icom_priv_caps *priv = rig->caps->priv; - const struct cmdparams *cmd = priv->cmdparams ? priv->cmdparams : icom_ext_cmd; - for (i = 0; cmd && cmd[i].token != 0; i++) { - if (cmd[i].token == TOK_LINK) { + const struct cmdparams *cmd = priv->extcmds ? priv->extcmds : icom_ext_cmd; + for (i = 0; cmd && cmd[i].id.t != 0; i++) { + if (cmd[i].id.t == TOK_LINK) { cmd = icom_ext_cmd; i = -1; continue; } - if (cmd[i].token == token) { - if (!(cmd[i].submod & SC_MOD_RD)) break; - if ((cmd[i].submod & SC_MOD_RW12) == SC_MOD_RW12) { - retval = icom_get_raw_buf(rig, cmd[i].command, cmd[i].subcmd, - 1, &ssc, &reslen, resbuf); - } else { - retval = icom_get_raw_buf(rig, cmd[i].command, cmd[i].subcmd, - cmd[i].sublen, (unsigned char *)cmd[i].subext, &reslen, resbuf); - } - if (retval != RIG_OK) { - return retval; - } - switch (cmd[i].dattyp) { - case CMD_DAT_WRD: { - int wrd = 0; - int j; - for (j = 0; j < cmd[i].datlen; j++) { - wrd = (wrd << 8) + resbuf[j]; - } - val->i = wrd; - } - break; - case CMD_DAT_STR: - if (strlen(val->s) < reslen) { - return -RIG_EINTERNAL; - } - memcpy(val->s, resbuf, reslen); - val->s[reslen] = 0; - break; - case CMD_DAT_BUF: - if (reslen > val->b.l) { - return -RIG_EINTERNAL; - } - memcpy(val->b.d, resbuf, reslen); - val->b.l = reslen; - break; - case CMD_DAT_INT: - val->i = from_bcd_be(resbuf, (reslen * 2)); - break; - case CMD_DAT_FLT: - val->f = (float) from_bcd_be(resbuf, (reslen * 2)); - break; - case CMD_DAT_LVL: - val->f = (float) from_bcd_be(resbuf, (reslen * 2)) / 255.0; - break; - case CMD_DAT_BOL: - val->i = (from_bcd_be(resbuf, (reslen * 2)) == 0) ? 0 : 1; - break; - case CMD_DAT_TIM: - val->f = (float)((from_bcd_be(resbuf, 2) * 3600) + (from_bcd_be(&resbuf[1], 2) * 60)); - break; - default: - val->i = 0; - break; - } - return RIG_OK; + if (cmd[i].id.t == token) { + return icom_get_cmd(rig, vfo, (struct cmdparams *)&cmd[i], val); } } return -RIG_EINVAL; @@ -2627,71 +2635,74 @@ int icom_get_ext_cmd(RIG *rig, vfo_t vfo, token_t token, value_t *val) return -RIG_EINVAL; } -/* - * icom_set_ext_cmd - * Assumes rig!=NULL, rig->state.priv!=NULL - */ -int icom_set_ext_cmd(RIG *rig, vfo_t vfo, token_t token, value_t val) +int icom_set_cmd(RIG *rig, vfo_t vfo, struct cmdparams *par, value_t val) { - int i; + rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); + unsigned char cmdbuf[MAXFRAMELEN]; int cmdlen = 0; unsigned char ackbuf[MAXFRAMELEN]; int acklen = 0; + if (!(par->submod & SC_MOD_WR)) return -RIG_EINVAL; + if ((par->submod & SC_MOD_RW12) == SC_MOD_RW12) { + cmdbuf[0] = 0x01; + cmdlen = 1; + } else { + cmdlen = par->sublen; + memcpy(cmdbuf, par->subext, cmdlen); + } + int wrd = val.i; + int i; + switch (par->dattyp) { + case CMD_DAT_WRD: + for (i = 1; i <= par->datlen; i++) { + cmdbuf[cmdlen + par->datlen - i] = wrd & 0xff; + wrd >>= 8; + } + break; + case CMD_DAT_BUF: + memcpy(&cmdbuf[cmdlen], val.b.d, par->datlen); + break; + case CMD_DAT_INT: + case CMD_DAT_BOL: + to_bcd_be(&cmdbuf[cmdlen], val.i, (par->datlen * 2)); + break; + case CMD_DAT_FLT: + to_bcd_be(&cmdbuf[cmdlen], (int) val.f, (cmdlen * 2)); + break; + case CMD_DAT_LVL: + to_bcd_be(&cmdbuf[cmdlen], (int)(val.f * 255.0), (cmdlen * 2)); + break; + case CMD_DAT_TIM: + to_bcd_be(&cmdbuf[cmdlen], ((((int)val.f / 3600) * 100) + (((int)val.f / 60) % 60)), (par->datlen * 2)); + break; + default: + break; + } + cmdlen += par->datlen; + return icom_transaction(rig, par->command, par->subcmd, cmdbuf, cmdlen, ackbuf, &acklen); +} + +int icom_set_ext_cmd(RIG *rig, vfo_t vfo, token_t token, value_t val) +{ + int i; + rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); for (i = 0; rig->caps->ext_tokens && rig->caps->ext_tokens[i] != TOK_BACKEND_NONE; i++) { if (rig->caps->ext_tokens[i] == token) { const struct icom_priv_caps *priv = rig->caps->priv; - const struct cmdparams *cmd = priv->cmdparams ? priv->cmdparams : icom_ext_cmd; - for (i = 0; cmd && cmd[i].token != 0; i++) { - if (cmd[i].token == TOK_LINK) { + const struct cmdparams *cmd = priv->extcmds ? priv->extcmds : icom_ext_cmd; + for (i = 0; cmd && cmd[i].id.t != 0; i++) { + if (cmd[i].id.t == TOK_LINK) { cmd = icom_ext_cmd; i = -1; continue; } - if (cmd[i].token == token) { - if (!(cmd[i].submod & SC_MOD_WR)) break; - if ((cmd[i].submod & SC_MOD_RW12) == SC_MOD_RW12) { - cmdbuf[0] = 0x01; - cmdlen = 1; - } else { - cmdlen = cmd[i].sublen; - memcpy(cmdbuf, cmd[i].subext, cmdlen); - } - int wrd = val.i; - int j; - switch (cmd[i].dattyp) { - case CMD_DAT_WRD: - for (j = 1; j <= cmd[i].datlen; j++) { - cmdbuf[cmdlen + cmd[i].datlen - j] = wrd & 0xff; - wrd >>= 8; - } - break; - case CMD_DAT_BUF: - memcpy(&cmdbuf[cmdlen], val.b.d, cmd[i].datlen); - break; - case CMD_DAT_INT: - case CMD_DAT_BOL: - to_bcd_be(&cmdbuf[cmdlen], val.i, (cmd[i].datlen * 2)); - break; - case CMD_DAT_FLT: - to_bcd_be(&cmdbuf[cmdlen], (int) val.f, (cmdlen * 2)); - break; - case CMD_DAT_LVL: - to_bcd_be(&cmdbuf[cmdlen], (int)(val.f * 255.0), (cmdlen * 2)); - break; - case CMD_DAT_TIM: - to_bcd_be(&cmdbuf[cmdlen], ((((int)val.f / 3600) * 100) + (((int)val.f / 60) % 60)), (cmd[i].datlen * 2)); - break; - default: - break; - } - cmdlen += cmd[i].datlen; - return icom_transaction(rig, cmd[i].command, cmd[i].subcmd, - cmdbuf, cmdlen, ackbuf, &acklen); + if (cmd[i].id.t == token) { + return icom_set_cmd(rig, vfo, (struct cmdparams *)&cmd[i], val); } } return -RIG_EINVAL; @@ -4448,10 +4459,19 @@ int icom_set_parm(RIG *rig, setting_t parm, value_t val) return icom_set_raw(rig, C_CTL_ANN, ann_mode, 0, NULL, 0, 0); } - default: + default:{ + int i; + const struct icom_priv_caps *priv = rig->caps->priv; + const struct cmdparams *cmd = priv->rigcmds; + for (i = 0; cmd && cmd[i].id.s != 0; i++) { + if (cmd[i].id.s == parm) { + return icom_set_cmd(rig, RIG_VFO_NONE, (struct cmdparams *)&cmd[i], val); + } + } rig_debug(RIG_DEBUG_ERR, "%s: unsupported set_parm %s\n", __func__, rig_strparm(parm)); return -RIG_EINVAL; + } } } @@ -4472,10 +4492,19 @@ int icom_get_parm(RIG *rig, setting_t parm, value_t *val) switch (parm) { - default: + default: { + const struct icom_priv_caps *priv = rig->caps->priv; + const struct cmdparams *cmd = priv->rigcmds; + int i; + for (i = 0; cmd && cmd[i].id.s != 0; i++) { + if (cmd[i].id.s == parm) { + return icom_get_cmd(rig, RIG_VFO_NONE, (struct cmdparams *)&cmd[i], val); + } + } rig_debug(RIG_DEBUG_ERR, "%s: unsupported get_parm %s", __func__, rig_strparm(parm)); return -RIG_EINVAL; + } } return RIG_OK; diff --git a/icom/icom.h b/icom/icom.h index 934f678e5..df0de9552 100644 --- a/icom/icom.h +++ b/icom/icom.h @@ -105,15 +105,18 @@ struct icom_agc_level icom_level; /* Icom AGC level for C_CTL_FUNC (0x16), S_FUNC_AGC (0x12) command */ }; -struct cmdparams { /* Lookup table items for icom_ext_parm */ - token_t token; /* TOKEN_BACKEND */ - int command; /* CI-V command */ - int subcmd; /* CI-V Subcommand */ - int submod; /* Subcommand modifier */ - int sublen; /* Number of bytes for subcommand extension */ - unsigned char subext[4]; /* Subcommand extension bytes */ - int dattyp; /* Data type conversion */ - int datlen; /* Number of data bytes in frame */ +struct cmdparams { /* Lookup table item for levels & parms */ + union { + setting_t s; /* Level or parm */ + token_t t; /* TOKEN_BACKEND */ + } id; + int command; /* CI-V command */ + int subcmd; /* CI-V Subcommand */ + int submod; /* Subcommand modifier */ + int sublen; /* Number of bytes for subcommand extension */ + unsigned char subext[4]; /* Subcommand extension bytes */ + int dattyp; /* Data type conversion */ + int datlen; /* Number of data bytes in frame */ }; struct icom_priv_caps @@ -132,12 +135,13 @@ struct icom_priv_caps to convert response tokens to bandwidth and mode */ - int serial_full_duplex; /*!< Whether RXD&TXD are not tied together */ - int offs_len; /* Number of bytes in offset frequency field. 0 defaults to 3 */ - int serial_USB_echo_check; /* Flag to test USB echo state */ - int agc_levels_present; /* Flag to indicate that agc_levels array is populated */ + int serial_full_duplex; /*!< Whether RXD&TXD are not tied together */ + int offs_len; /* Number of bytes in offset frequency field. 0 defaults to 3 */ + int serial_USB_echo_check; /* Flag to test USB echo state */ + int agc_levels_present; /* Flag to indicate that agc_levels array is populated */ struct icom_agc_level agc_levels[RIG_AGC_LAST + 1]; /* Icom rig-specific AGC levels, the last entry should have level -1 */ - struct cmdparams *cmdparams; /* Pointer to ext_cmd paramater array */ + struct cmdparams *rigcmds; /* Pointer to rig paramater array */ + struct cmdparams *extcmds; /* Pointer to ext_cmd paramater array */ }; @@ -277,6 +281,7 @@ int icom_get_custom_parm_time(RIG *rig, int parmbuflen, unsigned char *parmbuf, extern const struct confparams icom_cfg_params[]; extern const struct confparams icom_ext_parms[]; +extern const struct cmdparams icom_rig_cmds[]; extern const struct cmdparams icom_ext_cmds[]; extern const struct rig_caps ic703_caps; diff --git a/icom/icom_defs.h b/icom/icom_defs.h index 0e9c7b8ac..f6bebfb7a 100644 --- a/icom/icom_defs.h +++ b/icom/icom_defs.h @@ -509,10 +509,6 @@ #define TOK_DRIVE_GAIN TOKEN_BACKEND(103) #define TOK_DIGI_SEL_FUNC TOKEN_BACKEND(104) #define TOK_DIGI_SEL_LEVEL TOKEN_BACKEND(105) -#define TOK_KEY_BEEP TOKEN_BACKEND(106) -#define TOK_BACKLIGHT TOKEN_BACKEND(107) -#define TOK_KEYLIGHT TOKEN_BACKEND(108) -#define TOK_TIME TOKEN_BACKEND(109) #define TOK_DSTAR_CALL_SIGN TOKEN_BACKEND(120) #define TOK_DSTAR_MESSAGE TOKEN_BACKEND(121) #define TOK_DSTAR_STATUS TOKEN_BACKEND(122) diff --git a/icom/icr30.c b/icom/icr30.c index f3b6086b9..6df0f9b56 100644 --- a/icom/icr30.c +++ b/icom/icr30.c @@ -65,10 +65,10 @@ struct confparams icr30_ext[] = { }; struct cmdparams icr30_cmd[] = { - { TOK_ANL, C_CTL_MEM, S_MEM_ANL, SC_MOD_RW, 0, {}, CMD_DAT_BOL, 1 }, - { TOK_EAR, C_CTL_MEM, S_MEM_EAR, SC_MOD_RW, 0, {}, CMD_DAT_BOL, 1 }, - { TOK_REC, C_CTL_MEM, S_MEM_REC, SC_MOD_WR, 0, {}, CMD_DAT_BOL, 1 }, - { TOK_LINK } + { {.t=TOK_ANL}, C_CTL_MEM, S_MEM_ANL, SC_MOD_RW, 0, {}, CMD_DAT_BOL, 1 }, + { {.t=TOK_EAR}, C_CTL_MEM, S_MEM_EAR, SC_MOD_RW, 0, {}, CMD_DAT_BOL, 1 }, + { {.t=TOK_REC}, C_CTL_MEM, S_MEM_REC, SC_MOD_WR, 0, {}, CMD_DAT_BOL, 1 }, + { {.t=TOK_LINK} } }; #define ICR30_STR_CAL { 2, \ @@ -121,7 +121,7 @@ static const struct icom_priv_caps icr30_priv_caps = r8500_ts_sc_list, /* wrong, but don't have set_ts anyway */ .r2i_mode = icr30_r2i_mode, .offs_len = 4, - .cmdparams = icr30_cmd + .extcmds = icr30_cmd }; const struct rig_caps icr30_caps = diff --git a/icom/icr8600.c b/icom/icr8600.c index 225629333..ce4d7fa4d 100644 --- a/icom/icr8600.c +++ b/icom/icr8600.c @@ -50,7 +50,7 @@ RIG_LEVEL_NR|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT|RIG_LEVEL_CWPITCH|RIG_LEVEL_PREAMP|\ RIG_LEVEL_AGC|RIG_LEVEL_RAWSTR|RIG_LEVEL_STRENGTH) -#define ICR8600_PARM_ALL (RIG_PARM_NONE) +#define ICR8600_PARM_ALL (RIG_PARM_BACKLIGHT|RIG_PARM_BEEP|RIG_PARM_TIME|RIG_PARM_KEYLIGHT) #define ICR8600_VFO_ALL (RIG_VFO_VFO|RIG_VFO_MEM) @@ -67,25 +67,24 @@ { 255, 60 }, \ } } -int icr8600_tokens[] = { TOK_KEY_BEEP, TOK_BACKLIGHT, TOK_KEYLIGHT, TOK_TIME, - TOK_DSTAR_DSQL, TOK_DSTAR_CALL_SIGN, TOK_DSTAR_MESSAGE, TOK_DSTAR_STATUS, TOK_DSTAR_GPS_DATA, - TOK_DSTAR_GPS_MESS, TOK_DSTAR_CODE, TOK_DSTAR_TX_DATA, +struct cmdparams icr8600_rigcmds[] = { + { {.s=RIG_PARM_BEEP}, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x00, 0x38}, CMD_DAT_BOL, 1 }, + { {.s=RIG_PARM_BACKLIGHT}, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x15}, CMD_DAT_LVL, 2 }, + { {.s=RIG_PARM_KEYLIGHT}, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x16}, CMD_DAT_LVL, 2 }, + { {.s=RIG_PARM_TIME}, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x32}, CMD_DAT_TIM, 2 }, + { {.s=RIG_PARM_NONE} } +}; + +int icr8600_tokens[] = { TOK_DSTAR_DSQL, TOK_DSTAR_CALL_SIGN, TOK_DSTAR_MESSAGE, TOK_DSTAR_STATUS, + TOK_DSTAR_GPS_DATA, TOK_DSTAR_GPS_MESS, TOK_DSTAR_CODE, TOK_DSTAR_TX_DATA, TOK_BACKEND_NONE }; struct confparams icr8600_ext[] = { - { TOK_KEY_BEEP, "beep", "Key beep enable", "", "", RIG_CONF_CHECKBUTTON, {} }, - { TOK_BACKLIGHT, "backlight", "Display brightness", "", "", RIG_CONF_NUMERIC, {} }, - { TOK_KEYLIGHT, "keylight", "LED brightness", "", "", RIG_CONF_NUMERIC, {} }, - { TOK_TIME, "time", "Time (seconds)", "", "", RIG_CONF_NUMERIC, {} }, { 0 } }; -struct cmdparams icr8600_cmd[] = { - { TOK_KEY_BEEP, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x00, 0x38}, CMD_DAT_BOL, 1 }, - { TOK_BACKLIGHT, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x15}, CMD_DAT_LVL, 2 }, - { TOK_KEYLIGHT, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x16}, CMD_DAT_LVL, 2 }, - { TOK_TIME, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x32}, CMD_DAT_TIM, 2 }, - { TOK_LINK } +struct cmdparams icr8600_extcmds[] = { + { {.t=TOK_LINK} } }; /* @@ -109,7 +108,8 @@ static const struct icom_priv_caps icr8600_priv_caps = r8600_ts_sc_list, /* list of tuning steps */ .offs_len = 4, /* Repeater offset is 4 bytes */ .serial_USB_echo_check = 1, /* USB CI-V may not echo */ - .cmdparams = icr8600_cmd + .rigcmds = icr8600_rigcmds, + .extcmds = icr8600_extcmds }; const struct rig_caps icr8600_caps =