Initial implementation of icom extended operations

func, level & parm extended functions are all mapped to a single icom_[gs]et_ext_cmd() function. These are table driven, so as to not endlessly repeat the same code for each extended operation.
pull/179/head
Malcolm Herring 2019-12-17 16:25:55 +00:00
rodzic f1d0340b8d
commit 9aa96d6dd0
11 zmienionych plików z 269 dodań i 72 usunięć

Wyświetl plik

@ -22,7 +22,7 @@
#ifndef _FRAME_H
#define _FRAME_H 1
#define MAXFRAMELEN 56
#define MAXFRAMELEN 80
/*
* helper functions

Wyświetl plik

@ -209,6 +209,7 @@ const struct rig_caps ic7100_caps =
[LVL_KEYSPD] = { .min = { .i = 6 }, .max = { .i = 48 }, .step = { .i = 1 } },
[LVL_CWPITCH] = { .min = { .i = 300 }, .max = { .i = 900 }, .step = { .i = 1 } },
},
.extparms = icom_ext_parms,
.parm_gran = {},
.ctcss_list = common_ctcss_list,
.dcs_list = common_dcs_list,
@ -355,7 +356,8 @@ const struct rig_caps ic7100_caps =
.set_parm = icom_set_parm,
.get_parm = icom_get_parm,
.set_ext_parm = icom_set_ext_parm,
.get_ext_parm = icom_get_ext_parm,
.set_mem = icom_set_mem,
.vfo_op = icom_vfo_op,
.scan = icom_scan,

Wyświetl plik

@ -50,6 +50,8 @@
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,
@ -400,6 +402,50 @@ const struct confparams icom_cfg_params[] =
{ RIG_CONF_END, NULL, }
};
/*
* Lookup table for icom_get_ext_parm
*/
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" },
{ RIG_CONF_END, NULL, }
};
/*
* Lookup table for icom_get_ext_* & icom_set_ext_* functions
*/
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_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_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 }
};
/*
* Please, if the default CI-V address of your rig is listed as UNKNOWN_ADDR,
* send the value to <fillods@users.sourceforge.net> for inclusion. Thanks --SF
@ -2369,81 +2415,150 @@ int icom_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
return RIG_OK;
}
/*
* icom_set_ext_level
* Assumes rig!=NULL, rig->state.priv!=NULL
*/
int icom_set_ext_func(RIG *rig, vfo_t vfo, token_t token, int status)
{
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
return icom_set_ext_cmd(rig, vfo, token, (value_t)status);
}
int icom_get_ext_func(RIG *rig, vfo_t vfo, token_t token, int *status)
{
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
return icom_get_ext_cmd(rig, vfo, token, (value_t *)status);
}
int icom_set_ext_level(RIG *rig, vfo_t vfo, token_t token, value_t val)
{
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
switch (token)
{
case TOK_DRIVE_GAIN:
return icom_set_raw(rig, C_CTL_LVL, S_LVL_DRIVE, 0, NULL, 2, (int) val.f);
case TOK_DIGI_SEL_FUNC:
return icom_set_raw(rig, C_CTL_FUNC, S_FUNC_DIGISEL, 0, NULL, 1, val.i ? 1 : 0);
case TOK_DIGI_SEL_LEVEL:
return icom_set_raw(rig, C_CTL_LVL, S_LVL_DIGI, 0, NULL, 2, (int) val.f);
default:
return -RIG_EINVAL;
}
return icom_set_ext_cmd(rig, vfo, token, val);
}
/*
* icom_get_ext_level
* Assumes rig!=NULL, rig->state.priv!=NULL, val!=NULL
*/
int icom_get_ext_level(RIG *rig, vfo_t vfo, token_t token, value_t *val)
{
int icom_val;
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
return icom_get_ext_cmd(rig, vfo, token, val);
}
int icom_set_ext_parm(RIG *rig, token_t token, value_t val)
{
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
return icom_set_ext_cmd(rig, RIG_VFO_NONE, token, val);
}
int icom_get_ext_parm(RIG *rig, token_t token, value_t *val)
{
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
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 i;
unsigned char ssc = 0x02;
unsigned char resbuf[MAXFRAMELEN];
int reslen = sizeof(resbuf);
int retval;
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
switch (token)
{
case TOK_DRIVE_GAIN:
retval = icom_get_raw(rig, C_CTL_LVL, S_LVL_DRIVE, 0, NULL, &icom_val);
if (retval != RIG_OK)
{
return retval;
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,
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);
}
if (retval != RIG_OK) {
return retval;
}
switch (icom_ext_cmd[i].dattyp) {
case CMD_DAT_WRD: {
int wrd = 0;
int j;
for (j = 0; j < icom_ext_cmd[i].datlen; j++) {
wrd = (wrd << 8) + resbuf[j];
}
val->i = wrd;
}
break;
case CMD_DAT_BUF:
memcpy(databuf, resbuf, icom_ext_cmd[i].datlen);
val->s = databuf;
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_BOL:
val->i = (from_bcd_be(resbuf, (reslen * 2)) == 0) ? 0 : 1;
break;
default:
val->i = 0;
break;
}
return RIG_OK;
}
val->f = (float) icom_val;
break;
case TOK_DIGI_SEL_FUNC:
retval = icom_get_raw(rig, C_CTL_FUNC, S_FUNC_DIGISEL, 0, NULL, &icom_val);
if (retval != RIG_OK)
{
return retval;
}
val->i = icom_val ? 1 : 0;
break;
case TOK_DIGI_SEL_LEVEL:
retval = icom_get_raw(rig, C_CTL_LVL, S_LVL_DIGI, 0, NULL, &icom_val);
if (retval != RIG_OK)
{
return retval;
}
val->f = (float) icom_val;
break;
default:
return -RIG_EINVAL;
}
return -RIG_EINVAL;
}
return RIG_OK;
/*
* 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 i;
unsigned char cmdbuf[MAXFRAMELEN];
int cmdlen = 0;
unsigned char ackbuf[MAXFRAMELEN];
int acklen = 0;
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) {
cmdbuf[0] = 0x01;
cmdlen = 1;
} else {
cmdlen = icom_ext_cmd[i].sublen - 1;
memcpy(cmdbuf, icom_ext_cmd[i].subext, cmdlen);
}
int wrd = val.i;
int j;
switch (icom_ext_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;
wrd >>= 8;
}
break;
case CMD_DAT_BUF:
memcpy(&cmdbuf[cmdlen], val.s, icom_ext_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));
break;
case CMD_DAT_FLT:
to_bcd_be(&cmdbuf[cmdlen], (int) val.f, (cmdlen * 2));
break;
default:
break;
}
cmdlen += icom_ext_cmd[i].datlen;
return icom_transaction(rig, icom_ext_cmd[i].command, icom_ext_cmd[i].subcmd,
cmdbuf, cmdlen, ackbuf, &acklen);
}
}
return -RIG_EINVAL;
}
/*

Wyświetl plik

@ -105,6 +105,17 @@ 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 icom_priv_caps
{
unsigned char re_civ_addr; /* the remote dlft equipment's CI-V address*/
@ -225,8 +236,14 @@ int icom_set_ext_level(RIG *rig, vfo_t vfo, token_t token, value_t val);
int icom_get_ext_level(RIG *rig, vfo_t vfo, token_t token, value_t *val);
int icom_set_func(RIG *rig, vfo_t vfo, setting_t func, int status);
int icom_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status);
int icom_set_ext_func(RIG *rig, vfo_t vfo, token_t token, int status);
int icom_get_ext_func(RIG *rig, vfo_t vfo, token_t token, int *status);
int icom_set_parm(RIG *rig, setting_t parm, value_t val);
int icom_get_parm(RIG *rig, setting_t parm, value_t *val);
int icom_set_ext_parm(RIG *rig, token_t token, value_t val);
int icom_get_ext_parm(RIG *rig, token_t token, value_t *val);
int icom_set_ext_cmd(RIG *rig, vfo_t vfo, token_t token, value_t val);
int icom_get_ext_cmd(RIG *rig, vfo_t vfo, token_t token, value_t *val);
int icom_set_conf(RIG *rig, token_t token, const char *val);
int icom_get_conf(RIG *rig, token_t token, char *val);
int icom_set_powerstat(RIG *rig, powerstat_t status);
@ -261,6 +278,8 @@ int icom_get_custom_parm_time(RIG *rig, int parmbuflen, unsigned char *parmbuf,
int *seconds);
extern const struct confparams icom_cfg_params[];
extern const struct confparams icom_ext_parms[];
extern const struct cmdparams icom_ext_cmds[];
extern const struct rig_caps ic703_caps;
extern const struct rig_caps ic706_caps;

Wyświetl plik

@ -92,8 +92,10 @@
#define C_CTL_MEM 0x1a /* Misc memory/bank/rig control functions, Sc */
#define C_SET_TONE 0x1b /* Set tone frequency */
#define C_CTL_PTT 0x1c /* Control Transmit On/Off, Sc */
#define C_CTL_DVT 0x1f /* Digital modes calsigns & messages */
#define C_CTL_DIG 0x20 /* Digital modes settings & status */
#define C_CTL_RIT 0x21 /* RIT/XIT control */
#define C_CTL_DSD 0x22 /* D-STAR Data */
#define C_SEND_SEL_FREQ 0x25 /* Send/Recv sel/unsel VFO frequency */
#define C_CTL_MTEXT 0x70 /* Microtelecom Extension */
#define C_CTL_MISC 0x7f /* Miscellaneous control, Sc */
@ -442,14 +444,17 @@
#define S_DIG_DSGPSD 0x03 /* D-STAR GPS data */
#define S_DIG_DSGPSM 0x04 /* D-STAR GPS message */
#define S_DIG_DSCSQL 0x05 /* D-STAR CSQL */
#define S_DIG_P25ID 0x06 /* P25 ID */
#define S_DIG_P25ID 0x06 /* P25 ID */
#define S_DIG_P25STS 0x07 /* P25 Rx status */
#define S_DIG_DPRXID 0x08 /* dPMR Rx ID */
#define S_DIG_DPRSTS 0x09 /* dPMR Rx status */
#define S_DIG_NXRXID 0x0A /* NXDN Rx ID */
#define S_DIG_NXRSTS 0x0B /* NXDN Rx status */
#define S_DIG_DCRXID 0x0C /* DCR Rx ID */
#define S_DIG_DCRSTS 0x0D /* DCR Rx status */
#define S_DVT_DSMYCS 0x00 /* D-STAR My CS */
#define S_DVT_DSTXCS 0x01 /* D-STAR Tx CS */
#define S_DVT_DSTXMS 0x02 /* D-STAR Tx Mess */
#define S_DSD_DSTXDT 0x00 /* D-STAR Tx Data */
/*
* C_CTL_MISC OptoScan extension
@ -502,5 +507,34 @@
#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_DSTAR_TX_MESS TOKEN_BACKEND(114)
#define TOK_DSTAR_TX_DATA TOKEN_BACKEND(115)
/*
* icom_ext_parm table subcommand modifiers
*/
#define SC_MOD_RD 0x01 /* Readable */
#define SC_MOD_WR 0x02 /* Writeable */
#define SC_MOD_RW 0x03 /* Read-write */
#define SC_MOD_RW12 0x07 /* Write +0x01, Read +0x02 */
/*
* icom_ext_parm table data types
*/
#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 */
#endif /* _ICOM_DEFS_H */

Wyświetl plik

@ -42,9 +42,9 @@
#define ICR30_LEVEL_ALL (RIG_LEVEL_ATT|RIG_LEVEL_AF|RIG_LEVEL_RF|\
RIG_LEVEL_SQL|RIG_LEVEL_RAWSTR|RIG_LEVEL_STRENGTH)
#define ICR30_VFO_ALL (RIG_VFO_A)
#define ICR30_VFO_ALL (RIG_VFO_MAIN|RIG_VFO_SUB)
#define ICR30_VFO_OPS (RIG_VFO_MAIN|RIG_VFO_SUB)
#define ICR30_VFO_OPS (RIG_OP_FROM_VFO|RIG_OP_TO_VFO|RIG_OP_MCL)
#define ICR30_SCAN_OPS (RIG_SCAN_NONE)
#define ICR30_STR_CAL { 2, \
@ -126,11 +126,12 @@ const struct rig_caps icr30_caps =
.has_get_level = ICR30_LEVEL_ALL,
.has_set_level = RIG_LEVEL_SET(ICR30_LEVEL_ALL),
.has_get_parm = RIG_PARM_NONE,
.has_set_parm = RIG_PARM_NONE, /* FIXME: parms */
.has_set_parm = RIG_PARM_NONE,
.level_gran = {
[LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } },
},
.parm_gran = {},
.extparms = icom_ext_parms,
.ctcss_list = common_ctcss_list,
.dcs_list = common_dcs_list,
.preamp = { RIG_DBLST_END, },
@ -228,6 +229,10 @@ const struct rig_caps icr30_caps =
.get_level = icom_get_level,
.set_func = icom_set_func,
.get_func = icom_get_func,
.set_parm = icom_set_parm,
.get_parm = icom_get_parm,
.set_ext_parm = icom_set_ext_parm,
.get_ext_parm = icom_get_ext_parm,
.get_dcd = icom_get_dcd,
.set_ctcss_sql = icom_set_ctcss_sql,
.get_ctcss_sql = icom_get_ctcss_sql,

Wyświetl plik

@ -122,6 +122,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} } },
.extparms = icom_ext_parms,
.ctcss_list = common_ctcss_list,
.dcs_list = common_dcs_list,
.preamp = { 20, RIG_DBLST_END, }, /* 20 on HF, 14 on VHF, UHF, same setting */
@ -222,6 +223,8 @@ const struct rig_caps icr8600_caps =
.get_level = icom_get_level,
.set_parm = icr8600_set_parm,
.get_parm = icr8600_get_parm,
.set_ext_parm = icom_set_ext_parm,
.get_ext_parm = icom_get_ext_parm,
.get_dcd = icom_get_dcd,
.set_mem = icom_set_mem,
.vfo_op = icom_vfo_op,

Wyświetl plik

@ -88,7 +88,7 @@ const struct rig_caps id31_caps =
.version = BACKEND_VER ".0",
.copyright = "LGPL",
.status = RIG_STATUS_UNTESTED,
.rig_type = RIG_TYPE_MOBILE,
.rig_type = RIG_TYPE_HANDHELD,
.ptt_type = RIG_PTT_RIG,
.dcd_type = RIG_DCD_RIG,
.port_type = RIG_PORT_SERIAL,
@ -111,6 +111,7 @@ const struct rig_caps id31_caps =
.level_gran = {
[LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } },
},
.extparms = icom_ext_parms,
.parm_gran = {},
.ctcss_list = common_ctcss_list,
.dcs_list = full_dcs_list,
@ -185,7 +186,10 @@ const struct rig_caps id31_caps =
.get_func = icom_get_func,
.set_level = icom_set_level,
.get_level = icom_get_level,
.set_parm = icom_set_parm,
.get_parm = icom_get_parm,
.set_ext_parm = icom_set_ext_parm,
.get_ext_parm = icom_get_ext_parm,
.set_ptt = icom_set_ptt,
.get_ptt = icom_get_ptt,
.get_dcd = icom_get_dcd,

Wyświetl plik

@ -115,6 +115,7 @@ const struct rig_caps id4100_caps =
.level_gran = {
[LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } },
},
.extparms = icom_ext_parms,
.parm_gran = {},
.ctcss_list = common_ctcss_list,
.dcs_list = full_dcs_list,
@ -194,6 +195,10 @@ const struct rig_caps id4100_caps =
.get_func = icom_get_func,
.set_level = icom_set_level,
.get_level = icom_get_level,
.set_parm = icom_set_parm,
.get_parm = icom_get_parm,
.set_ext_parm = icom_set_ext_parm,
.get_ext_parm = icom_get_ext_parm,
.set_ptt = icom_set_ptt,
.get_ptt = icom_get_ptt,

Wyświetl plik

@ -88,7 +88,7 @@ const struct rig_caps id51_caps =
.version = BACKEND_VER ".0",
.copyright = "LGPL",
.status = RIG_STATUS_UNTESTED,
.rig_type = RIG_TYPE_MOBILE,
.rig_type = RIG_TYPE_HANDHELD,
.ptt_type = RIG_PTT_RIG,
.dcd_type = RIG_DCD_RIG,
.port_type = RIG_PORT_SERIAL,
@ -111,6 +111,7 @@ const struct rig_caps id51_caps =
.level_gran = {
[LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } },
},
.extparms = icom_ext_parms,
.parm_gran = {},
.ctcss_list = common_ctcss_list,
.dcs_list = full_dcs_list,
@ -190,6 +191,10 @@ const struct rig_caps id51_caps =
.get_func = icom_get_func,
.set_level = icom_set_level,
.get_level = icom_get_level,
.set_parm = icom_set_parm,
.get_parm = icom_get_parm,
.set_ext_parm = icom_set_ext_parm,
.get_ext_parm = icom_get_ext_parm,
.set_ptt = icom_set_ptt,
.get_ptt = icom_get_ptt,

Wyświetl plik

@ -115,6 +115,7 @@ const struct rig_caps id5100_caps =
.level_gran = {
[LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } },
},
.extparms = icom_ext_parms,
.parm_gran = {},
.ctcss_list = common_ctcss_list,
.dcs_list = full_dcs_list,
@ -194,7 +195,11 @@ const struct rig_caps id5100_caps =
.get_func = icom_get_func,
.set_level = icom_set_level,
.get_level = icom_get_level,
.set_parm = icom_set_parm,
.get_parm = icom_get_parm,
.set_ext_parm = icom_set_ext_parm,
.get_ext_parm = icom_get_ext_parm,
.set_ptt = icom_set_ptt,
.get_ptt = icom_get_ptt,
.get_dcd = icom_get_dcd,