more extended operations

This commit is contained in:
Malcolm Herring 2020-01-04 05:59:44 +00:00
parent 9aa96d6dd0
commit fcde35815b
8 changed files with 174 additions and 69 deletions

View File

@ -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);
}
}

View File

@ -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 */
};

View File

@ -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 */

View File

@ -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,

View File

@ -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,

View File

@ -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,

View File

@ -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;
}

View File

@ -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";