mirror of
https://github.com/Hamlib/Hamlib.git
synced 2024-09-21 10:27:18 +00:00
more extended operations
This commit is contained in:
parent
9aa96d6dd0
commit
fcde35815b
122
icom/icom.c
122
icom/icom.c
@ -50,8 +50,6 @@
|
||||
|
||||
static int set_vfo_curr(RIG *rig, vfo_t vfo, vfo_t curr_vfo);
|
||||
|
||||
static char databuf[MAXFRAMELEN];
|
||||
|
||||
const cal_table_float_t icom_default_swr_cal =
|
||||
{
|
||||
5,
|
||||
@ -408,19 +406,20 @@ const struct confparams icom_cfg_params[] =
|
||||
|
||||
const struct confparams icom_ext_parms[] =
|
||||
{
|
||||
{ TOK_DSTAR_CALL_SIGN, "dscals", "D-STAR Call sign" },
|
||||
{ TOK_DSTAR_MESSAGE, "dsrmes", "D-STAR Rx Message" },
|
||||
{ TOK_DSTAR_STATUS, "dsstat", "D-STAR Rx Status" },
|
||||
{ TOK_DSTAR_GPS_DATA, "dsgpsd", "D-STAR GPS Data" },
|
||||
{ TOK_DSTAR_GPS_MESS, "dsgpsm", "D-STAR GPS Message" },
|
||||
{ TOK_DSTAR_DSQL, "dsdsql", "D-STAR CSQL Code" },
|
||||
{ TOK_DSTAR_MY_CS, "dsmycs", "D-STAR MY Call Sign" },
|
||||
{ TOK_DSTAR_TX_CS, "dstxcs", "D-STAR Tx Call Sign" },
|
||||
{ TOK_DSTAR_TX_MESS, "dstmes", "D-STAR Tx Message" },
|
||||
{ TOK_DSTAR_TX_DATA, "dstdat", "D-STAR Tx Data" },
|
||||
{ TOK_DRIVE_GAIN, "drive_gain", "Drive gain" },
|
||||
{ TOK_DIGI_SEL_FUNC, "digi_sel", "DIGI-SEL enable" },
|
||||
{ TOK_DIGI_SEL_LEVEL, "digi_sel_level", "DIGI-SEL level" },
|
||||
{ TOK_DSTAR_DSQL, "dsdsql", "D-STAR CSQL Status", "", "", RIG_CONF_CHECKBUTTON, {} },
|
||||
{ TOK_DSTAR_CALL_SIGN, "dscals", "D-STAR Call sign", "", "", RIG_CONF_BINARY, {} },
|
||||
{ TOK_DSTAR_MESSAGE, "dsrmes", "D-STAR Rx Message", "", "", RIG_CONF_STRING, {} },
|
||||
{ TOK_DSTAR_STATUS, "dsstat", "D-STAR Rx Status", "", "", RIG_CONF_NUMERIC, {} },
|
||||
{ TOK_DSTAR_GPS_DATA, "dsgpsd", "D-STAR GPS Data", "", "", RIG_CONF_BINARY, {} },
|
||||
{ TOK_DSTAR_GPS_MESS, "dsgpsm", "D-STAR GPS Message", "", "", RIG_CONF_STRING, {} },
|
||||
{ TOK_DSTAR_CODE, "dscode", "D-STAR CSQL Code", "", "", RIG_CONF_NUMERIC, {} },
|
||||
{ TOK_DSTAR_TX_DATA, "dstdat", "D-STAR Tx Data", "", "", RIG_CONF_BINARY, {} },
|
||||
{ TOK_DSTAR_MY_CS, "dsmycs", "D-STAR MY Call Sign", "", "", RIG_CONF_STRING, {} },
|
||||
{ TOK_DSTAR_TX_CS, "dstxcs", "D-STAR Tx Call Sign", "", "", RIG_CONF_BINARY, {} },
|
||||
{ TOK_DSTAR_TX_MESS, "dstmes", "D-STAR Tx Message", "", "", RIG_CONF_STRING, {} },
|
||||
{ TOK_DRIVE_GAIN, "drive_gain", "Drive gain", "", "", RIG_CONF_NUMERIC, { .n = { 0, 255, 1 } } },
|
||||
{ TOK_DIGI_SEL_FUNC, "digi_sel", "DIGI-SEL enable", "", "", RIG_CONF_CHECKBUTTON, {} },
|
||||
{ TOK_DIGI_SEL_LEVEL, "digi_sel_level", "DIGI-SEL level", "", "", RIG_CONF_NUMERIC, { .n = { 0, 255, 1 } } },
|
||||
{ RIG_CONF_END, NULL, }
|
||||
};
|
||||
|
||||
@ -431,15 +430,16 @@ 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_BUF, 32 },
|
||||
{ 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_WRD, 1 },
|
||||
{ TOK_DSTAR_GPS_DATA, C_CTL_DIG, S_DIG_DSGPSD, SC_MOD_RW12, 2, {0}, 0, 0 },
|
||||
{ TOK_DSTAR_GPS_MESS, C_CTL_DIG, S_DIG_DSGPSM, SC_MOD_RW12, 2, {0}, CMD_DAT_BUF, 52 },
|
||||
{ TOK_DSTAR_DSQL, C_CTL_DIG, S_DIG_DSCSQL, SC_MOD_RW12, 2, {0}, 0, 0 },
|
||||
{ TOK_DSTAR_MY_CS, C_CTL_DVT, S_DVT_DSMYCS, SC_MOD_RW, 1, {0}, 0, 0 },
|
||||
{ TOK_DSTAR_TX_CS, C_CTL_DVT, S_DVT_DSTXCS, SC_MOD_RW, 1, {0}, 0, 0 },
|
||||
{ TOK_DSTAR_TX_MESS, C_CTL_DVT, S_DVT_DSTXMS, SC_MOD_RW, 1, {0}, 0, 0 },
|
||||
{ TOK_DSTAR_TX_DATA, C_CTL_DSD, S_DSD_DSTXDT, SC_MOD_RW, 1, {0}, 0, 0 },
|
||||
{ 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, 2, {0}, CMD_DAT_INT, 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 },
|
||||
@ -1537,6 +1537,7 @@ int icom_set_vfo(RIG *rig, vfo_t vfo)
|
||||
return -RIG_ERJCTED;
|
||||
}
|
||||
|
||||
priv->curr_vfo = vfo;
|
||||
return RIG_OK;
|
||||
|
||||
case RIG_VFO_MEM:
|
||||
@ -1555,6 +1556,7 @@ int icom_set_vfo(RIG *rig, vfo_t vfo)
|
||||
return -RIG_ERJCTED;
|
||||
}
|
||||
|
||||
priv->curr_vfo = vfo;
|
||||
return RIG_OK;
|
||||
|
||||
case RIG_VFO_MAIN_A: // we need to select Main before setting VFO
|
||||
@ -1574,6 +1576,7 @@ int icom_set_vfo(RIG *rig, vfo_t vfo)
|
||||
return -RIG_ERJCTED;
|
||||
}
|
||||
|
||||
priv->curr_vfo = vfo;
|
||||
return RIG_OK;
|
||||
|
||||
break;
|
||||
@ -1595,6 +1598,7 @@ int icom_set_vfo(RIG *rig, vfo_t vfo)
|
||||
return -RIG_ERJCTED;
|
||||
}
|
||||
|
||||
priv->curr_vfo = vfo;
|
||||
return RIG_OK;
|
||||
|
||||
break;
|
||||
@ -2461,32 +2465,49 @@ int icom_get_ext_cmd(RIG *rig, vfo_t vfo, token_t token, value_t *val)
|
||||
|
||||
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
|
||||
|
||||
for (i = 0; icom_ext_cmd[i].token != 0; i++) {
|
||||
if (icom_ext_cmd[i].token == token) {
|
||||
if (!(icom_ext_cmd[i].submod & SC_MOD_WR)) break;
|
||||
if ((icom_ext_cmd[i].submod & SC_MOD_RW12) == SC_MOD_RW12) {
|
||||
retval = icom_get_raw_buf(rig, icom_ext_cmd[i].command, icom_ext_cmd[i].subcmd,
|
||||
const struct icom_priv_caps *priv = rig->caps->priv;
|
||||
const struct cmdparams *cmd = priv->cmdparams;
|
||||
for (i = 0; cmd[i].token != 0; i++) {
|
||||
if (cmd[i].token == 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) {
|
||||
retval = icom_get_raw_buf(rig, cmd[i].command, cmd[i].subcmd,
|
||||
1, &ssc, &reslen, resbuf);
|
||||
} else {
|
||||
retval = icom_get_raw_buf(rig, icom_ext_cmd[i].command, icom_ext_cmd[i].subcmd,
|
||||
icom_ext_cmd[i].sublen, (unsigned char *)icom_ext_cmd[i].subext, &reslen, resbuf);
|
||||
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 (icom_ext_cmd[i].dattyp) {
|
||||
switch (cmd[i].dattyp) {
|
||||
case CMD_DAT_WRD: {
|
||||
int wrd = 0;
|
||||
int j;
|
||||
for (j = 0; j < icom_ext_cmd[i].datlen; 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:
|
||||
memcpy(databuf, resbuf, icom_ext_cmd[i].datlen);
|
||||
val->s = databuf;
|
||||
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));
|
||||
@ -2521,31 +2542,38 @@ int icom_set_ext_cmd(RIG *rig, vfo_t vfo, token_t token, value_t val)
|
||||
|
||||
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
|
||||
|
||||
for (i = 0; icom_ext_cmd[i].token != 0; i++) {
|
||||
if (icom_ext_cmd[i].token == token) {
|
||||
if (!(icom_ext_cmd[i].submod & SC_MOD_RD)) break;
|
||||
if ((icom_ext_cmd[i].submod & SC_MOD_RW12) == SC_MOD_RW12) {
|
||||
const struct icom_priv_caps *priv = rig->caps->priv;
|
||||
const struct cmdparams *cmd = priv->cmdparams;
|
||||
for (i = 0; cmd[i].token != 0; i++) {
|
||||
if (cmd[i].token == 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) {
|
||||
cmdbuf[0] = 0x01;
|
||||
cmdlen = 1;
|
||||
} else {
|
||||
cmdlen = icom_ext_cmd[i].sublen - 1;
|
||||
memcpy(cmdbuf, icom_ext_cmd[i].subext, cmdlen);
|
||||
cmdlen = cmd[i].sublen;
|
||||
memcpy(cmdbuf, cmd[i].subext, cmdlen);
|
||||
}
|
||||
int wrd = val.i;
|
||||
int j;
|
||||
switch (icom_ext_cmd[i].dattyp) {
|
||||
switch (cmd[i].dattyp) {
|
||||
case CMD_DAT_WRD:
|
||||
for (j = 1; j <= icom_ext_cmd[i].datlen; j++) {
|
||||
cmdbuf[cmdlen + icom_ext_cmd[i].datlen - j] = wrd & 0xff;
|
||||
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.s, icom_ext_cmd[i].datlen);
|
||||
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, (icom_ext_cmd[i].datlen * 2));
|
||||
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));
|
||||
@ -2553,8 +2581,8 @@ int icom_set_ext_cmd(RIG *rig, vfo_t vfo, token_t token, value_t val)
|
||||
default:
|
||||
break;
|
||||
}
|
||||
cmdlen += icom_ext_cmd[i].datlen;
|
||||
return icom_transaction(rig, icom_ext_cmd[i].command, icom_ext_cmd[i].subcmd,
|
||||
cmdlen += cmd[i].datlen;
|
||||
return icom_transaction(rig, cmd[i].command, cmd[i].subcmd,
|
||||
cmdbuf, cmdlen, ackbuf, &acklen);
|
||||
}
|
||||
}
|
||||
|
@ -136,8 +136,8 @@ struct icom_priv_caps
|
||||
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 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 */
|
||||
};
|
||||
|
||||
|
||||
|
@ -507,16 +507,18 @@
|
||||
#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_DSTAR_CALL_SIGN TOKEN_BACKEND(106)
|
||||
#define TOK_DSTAR_MESSAGE TOKEN_BACKEND(107)
|
||||
#define TOK_DSTAR_STATUS TOKEN_BACKEND(108)
|
||||
#define TOK_DSTAR_GPS_DATA TOKEN_BACKEND(109)
|
||||
#define TOK_DSTAR_GPS_MESS TOKEN_BACKEND(110)
|
||||
#define TOK_DSTAR_DSQL TOKEN_BACKEND(111)
|
||||
#define TOK_DSTAR_MY_CS TOKEN_BACKEND(112)
|
||||
#define TOK_DSTAR_TX_CS TOKEN_BACKEND(113)
|
||||
#define TOK_KEY_BEEP TOKEN_BACKEND(106)
|
||||
#define TOK_DSTAR_CALL_SIGN TOKEN_BACKEND(120)
|
||||
#define TOK_DSTAR_MESSAGE TOKEN_BACKEND(121)
|
||||
#define TOK_DSTAR_STATUS TOKEN_BACKEND(122)
|
||||
#define TOK_DSTAR_GPS_DATA TOKEN_BACKEND(123)
|
||||
#define TOK_DSTAR_GPS_MESS TOKEN_BACKEND(124)
|
||||
#define TOK_DSTAR_DSQL TOKEN_BACKEND(125)
|
||||
#define TOK_DSTAR_MY_CS TOKEN_BACKEND(126)
|
||||
#define TOK_DSTAR_TX_CS TOKEN_BACKEND(127)
|
||||
#define TOK_DSTAR_TX_MESS TOKEN_BACKEND(114)
|
||||
#define TOK_DSTAR_TX_DATA TOKEN_BACKEND(115)
|
||||
#define TOK_DSTAR_CODE TOKEN_BACKEND(116)
|
||||
|
||||
/*
|
||||
* icom_ext_parm table subcommand modifiers
|
||||
@ -532,9 +534,10 @@
|
||||
*/
|
||||
|
||||
#define CMD_DAT_WRD 0x00 /* literal single word type */
|
||||
#define CMD_DAT_BUF 0x01 /* literal byte buffer type */
|
||||
#define CMD_DAT_INT 0x02 /* bcd int type */
|
||||
#define CMD_DAT_FLT 0x03 /* bcd float type */
|
||||
#define CMD_DAT_BOL 0x04 /* bcd boolean type */
|
||||
#define CMD_DAT_INT 0x01 /* bcd int type */
|
||||
#define CMD_DAT_FLT 0x02 /* bcd float type */
|
||||
#define CMD_DAT_BOL 0x03 /* bcd boolean type */
|
||||
#define CMD_DAT_STR 0x04 /* string type */
|
||||
#define CMD_DAT_BUF 0x05 /* literal byte buffer type */
|
||||
|
||||
#endif /* _ICOM_DEFS_H */
|
||||
|
12
icom/icr30.c
12
icom/icr30.c
@ -53,6 +53,14 @@
|
||||
{ 255, 60 } /* +60 */ \
|
||||
} }
|
||||
|
||||
struct confparams icr30_ext[] = {
|
||||
{ 0 }
|
||||
};
|
||||
|
||||
struct cmdparams icr30_cmd[] = {
|
||||
{ TOK_LINK }
|
||||
};
|
||||
|
||||
/*
|
||||
* This function does the special bandwidth coding for IC-R30
|
||||
* (1 - normal, 2 - narrow)
|
||||
@ -96,7 +104,8 @@ static const struct icom_priv_caps icr30_priv_caps =
|
||||
0, /* no XCHG */
|
||||
r8500_ts_sc_list, /* wrong, but don't have set_ts anyway */
|
||||
.r2i_mode = icr30_r2i_mode,
|
||||
.offs_len = 4
|
||||
.offs_len = 4,
|
||||
.cmdparams = icr30_cmd
|
||||
};
|
||||
|
||||
const struct rig_caps icr30_caps =
|
||||
@ -131,6 +140,7 @@ const struct rig_caps icr30_caps =
|
||||
[LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } },
|
||||
},
|
||||
.parm_gran = {},
|
||||
.extlevels = icr30_ext,
|
||||
.extparms = icom_ext_parms,
|
||||
.ctcss_list = common_ctcss_list,
|
||||
.dcs_list = common_dcs_list,
|
||||
|
@ -55,6 +55,7 @@
|
||||
#define ICR8600_VFO_ALL (RIG_VFO_VFO|RIG_VFO_MEM)
|
||||
|
||||
#define ICR8600_VFO_OPS (RIG_OP_FROM_VFO|RIG_OP_TO_VFO|RIG_OP_MCL)
|
||||
|
||||
#define ICR8600_SCAN_OPS (RIG_SCAN_MEM|RIG_SCAN_VFO|RIG_SCAN_SLCT|\
|
||||
RIG_SCAN_PRIO|RIG_SCAN_PRIO|RIG_SCAN_DELTA|RIG_SCAN_STOP)
|
||||
|
||||
@ -66,6 +67,17 @@
|
||||
{ 255, 60 }, \
|
||||
} }
|
||||
|
||||
struct confparams icr8600_ext[] = {
|
||||
{ TOK_KEY_BEEP, "beep", "Key beep enable", "", "", RIG_CONF_CHECKBUTTON, {} },
|
||||
{ 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_LINK }
|
||||
{ 0 }
|
||||
};
|
||||
|
||||
/*
|
||||
* channel caps.
|
||||
*/
|
||||
@ -89,7 +101,8 @@ static const struct icom_priv_caps icr8600_priv_caps =
|
||||
0, /* no XCHG */
|
||||
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 */
|
||||
.serial_USB_echo_check = 1, /* USB CI-V may not echo */
|
||||
.cmdparams = icr8600_cmd
|
||||
};
|
||||
|
||||
const struct rig_caps icr8600_caps =
|
||||
@ -122,6 +135,7 @@ const struct rig_caps icr8600_caps =
|
||||
.has_set_parm = RIG_PARM_SET(ICR8600_PARM_ALL),
|
||||
.level_gran = { [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } } },
|
||||
.parm_gran = { [PARM_TIME] = { .min = { .i = 0 }, .max = { .i = 86399} } },
|
||||
.extlevels = icr8600_ext,
|
||||
.extparms = icom_ext_parms,
|
||||
.ctcss_list = common_ctcss_list,
|
||||
.dcs_list = common_dcs_list,
|
||||
|
@ -600,6 +600,7 @@ typedef long token_t;
|
||||
* COMBO: val.i, starting from 0. Points to a table of strings or asci stored values.
|
||||
* STRING: val.s or val.cs
|
||||
* CHECKBUTTON: val.i 0/1
|
||||
* BINARY: val.b
|
||||
*/
|
||||
|
||||
/* strongly inspired from soundmodem. Thanks Thomas! */
|
||||
@ -608,11 +609,13 @@ enum rig_conf_e {
|
||||
RIG_CONF_COMBO, /*!< Combo type */
|
||||
RIG_CONF_NUMERIC, /*!< Numeric type integer or real */
|
||||
RIG_CONF_CHECKBUTTON, /*!< on/off type */
|
||||
RIG_CONF_BUTTON /*!< Button type */
|
||||
RIG_CONF_BUTTON, /*!< Button type */
|
||||
RIG_CONF_BINARY /*!< Binary buffer type */
|
||||
};
|
||||
|
||||
|
||||
#define TOK_LINK -1
|
||||
#define RIG_COMBO_MAX 16
|
||||
#define RIG_BIN_MAX 80
|
||||
|
||||
/**
|
||||
* \brief Configuration parameter structure.
|
||||
@ -706,10 +709,14 @@ enum meter_level_e {
|
||||
* \sa rig_set_level(), rig_get_level(), rig_set_parm(), rig_get_parm()
|
||||
*/
|
||||
typedef union {
|
||||
signed int i; /*!< Signed integer */
|
||||
float f; /*!< Single precision float */
|
||||
char *s; /*!< Pointer to char string */
|
||||
const char *cs; /*!< Pointer to constant char string */
|
||||
signed int i; /*!< Signed integer */
|
||||
float f; /*!< Single precision float */
|
||||
char *s; /*!< Pointer to char string */
|
||||
const char *cs; /*!< Pointer to constant char string */
|
||||
struct {
|
||||
int l; /*!< Length of data */
|
||||
unsigned char *d; /* Pointer to data buffer */
|
||||
} b;
|
||||
} value_t;
|
||||
|
||||
|
||||
@ -1574,6 +1581,9 @@ struct rig_caps {
|
||||
int (*set_ext_level)(RIG *rig, vfo_t vfo, token_t token, value_t val);
|
||||
int (*get_ext_level)(RIG *rig, vfo_t vfo, token_t token, value_t *val);
|
||||
|
||||
int (*set_ext_func)(RIG *rig, vfo_t vfo, token_t token, int status);
|
||||
int (*get_ext_func)(RIG *rig, vfo_t vfo, token_t token, int *status);
|
||||
|
||||
int (*set_ext_parm)(RIG *rig, token_t token, value_t val);
|
||||
int (*get_ext_parm)(RIG *rig, token_t token, value_t *val);
|
||||
|
||||
@ -2086,6 +2096,17 @@ rig_get_ext_level HAMLIB_PARAMS((RIG *rig,
|
||||
token_t token,
|
||||
value_t *val));
|
||||
|
||||
extern HAMLIB_EXPORT(int)
|
||||
rig_set_ext_func HAMLIB_PARAMS((RIG *rig,
|
||||
vfo_t vfo,
|
||||
token_t token,
|
||||
int status));
|
||||
extern HAMLIB_EXPORT(int)
|
||||
rig_get_ext_func HAMLIB_PARAMS((RIG *rig,
|
||||
vfo_t vfo,
|
||||
token_t token,
|
||||
int *status));
|
||||
|
||||
extern HAMLIB_EXPORT(int)
|
||||
rig_set_ext_parm HAMLIB_PARAMS((RIG *rig,
|
||||
token_t token,
|
||||
|
@ -2930,6 +2930,10 @@ declare_proto_rig(set_parm)
|
||||
val.cs = arg2;
|
||||
break;
|
||||
|
||||
case RIG_CONF_BINARY:
|
||||
val.b.d = arg2;
|
||||
break;
|
||||
|
||||
default:
|
||||
return -RIG_ECONF;
|
||||
}
|
||||
@ -2956,6 +2960,7 @@ declare_proto_rig(get_parm)
|
||||
int status;
|
||||
setting_t parm;
|
||||
value_t val;
|
||||
char buffer[RIG_BIN_MAX];
|
||||
|
||||
if (!strcmp(arg1, "?"))
|
||||
{
|
||||
@ -2978,6 +2983,22 @@ declare_proto_rig(get_parm)
|
||||
return -RIG_EINVAL; /* no such parameter */
|
||||
}
|
||||
|
||||
switch (cfp->type)
|
||||
{
|
||||
case RIG_CONF_STRING:
|
||||
memset(buffer, '0', sizeof(buffer));
|
||||
buffer[sizeof(buffer)-1] = 0;
|
||||
val.s = buffer;
|
||||
break;
|
||||
case RIG_CONF_BINARY:
|
||||
memset(buffer, 0, sizeof(buffer));
|
||||
val.b.d = (unsigned char *)buffer;
|
||||
val.b.l = RIG_BIN_MAX;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
status = rig_get_ext_parm(rig, cfp->token, &val);
|
||||
|
||||
if (status != RIG_OK)
|
||||
@ -3009,6 +3030,10 @@ declare_proto_rig(get_parm)
|
||||
fprintf(fout, "%s\n", val.s);
|
||||
break;
|
||||
|
||||
case RIG_CONF_BINARY:
|
||||
dump_hex((unsigned char *)buffer, val.b.l);
|
||||
break;
|
||||
|
||||
default:
|
||||
return -RIG_ECONF;
|
||||
}
|
||||
|
@ -229,6 +229,7 @@ int sprintf_level_ext(char *str, const struct confparams *extlevels)
|
||||
case RIG_CONF_COMBO:
|
||||
case RIG_CONF_NUMERIC:
|
||||
case RIG_CONF_STRING:
|
||||
case RIG_CONF_BINARY:
|
||||
strcat(str, extlevels->name);
|
||||
strcat(str, " ");
|
||||
len += strlen(extlevels->name) + 1;
|
||||
@ -460,6 +461,9 @@ char *get_rig_conf_type(enum rig_conf_e type)
|
||||
|
||||
case RIG_CONF_BUTTON:
|
||||
return "BUTTON";
|
||||
|
||||
case RIG_CONF_BINARY:
|
||||
return "BINARY";
|
||||
}
|
||||
|
||||
return "UNKNOWN";
|
||||
|
Loading…
Reference in New Issue
Block a user