add g/set_ext_func to API

pull/196/head
Malcolm Herring 2020-02-11 09:48:13 +00:00
rodzic 373d063d98
commit e3cef196f7
12 zmienionych plików z 265 dodań i 84 usunięć

Wyświetl plik

@ -1424,6 +1424,7 @@ struct rig_caps {
const struct confparams *extparms; /*!< Extension parm list, \sa ext.c */
const struct confparams *extlevels; /*!< Extension level list, \sa ext.c */
const struct confparams *extfuncs; /*!< Extension func list, \sa ext.c */
int *ext_tokens; /*!< Extension token list */
const tone_t *ctcss_list; /*!< CTCSS tones list, zero ended */
@ -1585,6 +1586,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);
@ -2099,6 +2103,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,

Wyświetl plik

@ -101,29 +101,17 @@
#define IC7100_PARM_ALL (RIG_PARM_ANN|RIG_PARM_BACKLIGHT|RIG_PARM_KEYLIGHT|RIG_PARM_BEEP|RIG_PARM_TIME)
struct cmdparams ic7100_rigparms[] = {
{ {.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} }
};
struct cmdparams ic7100_riglevels[] = {
{ {.s=RIG_LEVEL_VOXDELAY}, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x65}, CMD_DAT_INT, 1 },
{ {.s=RIG_LEVEL_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[] = {
{ 0 }
};
struct cmdparams ic7100_extcmds[] = {
{ {0} }
{ {.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_LEVEL_VOXDELAY}, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x65}, CMD_DAT_INT, 1 },
{ {.s=RIG_PARM_NONE} }
};
// IC-7100 S-meter calibration data based on manual
@ -196,8 +184,6 @@ static const struct icom_priv_caps ic7100_priv_caps =
{ .level = RIG_AGC_SLOW, .icom_level = 3 },
{ .level = -1, .icom_level = 0 },
},
.rigparms = ic7100_rigparms,
.riglevels = ic7100_riglevels,
.extcmds = ic7100_extcmds,
.antack_len = 2,
.ant_count = 2
@ -238,7 +224,8 @@ const struct rig_caps ic7100_caps =
[LVL_CWPITCH] = { .min = { .i = 300 }, .max = { .i = 900 }, .step = { .i = 1 } },
},
.ext_tokens = ic7100_tokens,
.extlevels = ic7100_ext,
.extlevels = icom_ext_levels,
.extfuncs = icom_ext_funcs,
.extparms = icom_ext_parms,
.parm_gran = {},
.ctcss_list = common_ctcss_list,
@ -388,6 +375,8 @@ const struct rig_caps ic7100_caps =
.get_parm = icom_get_parm,
.set_ext_parm = icom_set_ext_parm,
.get_ext_parm = icom_get_ext_parm,
.set_ext_func = icom_set_ext_func,
.get_ext_func = icom_get_ext_func,
.set_mem = icom_set_mem,
.vfo_op = icom_vfo_op,
.scan = icom_scan,

Wyświetl plik

@ -57,16 +57,12 @@
#define IC7300_ANTS (RIG_ANT_1) /* ant-1 is Hf-6m */
struct cmdparams ic7300_rigparms[] = {
struct cmdparams ic7300_extcmds[] = {
{ {.s=RIG_PARM_BEEP}, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x00, 0x23}, CMD_DAT_BOL, 1 },
{ {.s=RIG_PARM_BACKLIGHT}, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x00, 0x81}, CMD_DAT_LVL, 2 },
{ {.s=RIG_PARM_TIME}, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x00, 0x95}, CMD_DAT_TIM, 2 },
{ {.s=RIG_PARM_NONE} }
};
struct cmdparams ic7300_riglevels[] = {
{ {.s=RIG_LEVEL_VOXDELAY}, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x91}, CMD_DAT_INT, 1 },
{ {.s=RIG_LEVEL_NONE} }
{ {.s=RIG_PARM_NONE} }
};
/*
@ -138,15 +134,11 @@ struct cmdparams ic7300_riglevels[] = {
#define IC9700_ALL_TX_MODES (RIG_MODE_FM|RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_DSTAR|RIG_MODE_DD)
#define IC9700_ALL_RX_MODES (RIG_MODE_FM|RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_DSTAR|RIG_MODE_DD)
struct cmdparams ic9700_rigparms[] = {
struct cmdparams ic9700_extcmds[] = {
{ {.s=RIG_PARM_BEEP}, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x00, 0x29}, CMD_DAT_BOL, 1 },
{ {.s=RIG_PARM_BACKLIGHT}, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x52}, CMD_DAT_LVL, 2 },
{ {.s=RIG_PARM_NONE} }
};
struct cmdparams ic9700_riglevels[] = {
{ {.s=RIG_LEVEL_VOXDELAY}, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x03, 0x30}, CMD_DAT_INT, 1 },
{ {.s=RIG_LEVEL_NONE} }
{ {.s=RIG_PARM_NONE} }
};
#define IC9700_STR_CAL { 7, \
@ -219,8 +211,7 @@ static const struct icom_priv_caps IC7300_priv_caps =
{ .level = RIG_AGC_SLOW, .icom_level = 3 },
{ .level = -1, .icom_level = 0 },
},
.rigparms = ic7300_rigparms, /* Custom parm parameters */
.riglevels = ic7300_riglevels, /* Custom level parameters */
.extcmds = ic7300_extcmds, /* Custom op parameters */
};
static const struct icom_priv_caps IC9700_priv_caps =
@ -237,8 +228,7 @@ static const struct icom_priv_caps IC9700_priv_caps =
{ .level = RIG_AGC_SLOW, .icom_level = 3 },
{ .level = -1, .icom_level = 0 },
},
.rigparms = ic9700_rigparms, /* Custom parm parameters */
.riglevels = ic9700_riglevels, /* Custom level parameters */
.extcmds = ic9700_extcmds, /* Custom op parameters */
};
const struct rig_caps ic7300_caps =

Wyświetl plik

@ -62,16 +62,12 @@
#define IC756_ANTS (RIG_ANT_1|RIG_ANT_2)
struct cmdparams ic756pro_rigparms[] = {
struct cmdparams ic756pro_cmdparms[] = {
{ {.s=RIG_PARM_BEEP}, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x00, 0x20}, CMD_DAT_BOL, 1 },
{ {.s=RIG_PARM_BACKLIGHT}, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x00, 0x09}, CMD_DAT_LVL, 2 },
{ {.s=RIG_PARM_TIME}, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x00, 0x16}, CMD_DAT_TIM, 2 },
{ {.s=RIG_PARM_NONE} }
};
struct cmdparams ic756pro_riglevels[] = {
{ {.s=RIG_LEVEL_VOXDELAY}, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x00, 0x60}, CMD_DAT_INT, 1 },
{ {.s=RIG_LEVEL_NONE} }
{ {.s=RIG_PARM_NONE} }
};
#define IC756PRO_STR_CAL { 16, \
@ -468,8 +464,7 @@ static const struct icom_priv_caps ic756pro2_priv_caps =
{ .level = RIG_AGC_SLOW, .icom_level = 3 },
{ .level = -1, .icom_level = 0 },
},
.rigparms = ic756pro_rigparms, /* Custom parm parameters */
.riglevels = ic756pro_riglevels, /* Custom level parameters */
.extcmds = ic756pro_cmdparms, /* Custom op parameters */
};
/*
@ -896,8 +891,7 @@ static const struct icom_priv_caps ic756pro3_priv_caps =
{ .level = RIG_AGC_SLOW, .icom_level = 3 },
{ .level = -1, .icom_level = 0 },
},
.rigparms = ic756pro_rigparms, /* Custom parm parameters */
.riglevels = ic756pro_riglevels, /* Custom level parameters */
.extcmds = ic756pro_cmdparms, /* Custom op parameters */
};

Wyświetl plik

@ -53,16 +53,12 @@
#define IC7600_ANTS (RIG_ANT_1|RIG_ANT_2)
struct cmdparams ic7600_rigparms[] = {
struct cmdparams ic7600_extcmds[] = {
{ {.s=RIG_PARM_BEEP}, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x00, 0x59}, CMD_DAT_BOL, 1 },
{ {.s=RIG_PARM_BACKLIGHT}, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x00, 0x38}, CMD_DAT_LVL, 2 },
{ {.s=RIG_PARM_TIME}, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x00, 0x54}, CMD_DAT_TIM, 2 },
{ {.s=RIG_PARM_NONE} }
};
struct cmdparams ic7600_riglevels[] = {
{ {.s=RIG_LEVEL_VOXDELAY}, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x67}, CMD_DAT_INT, 1 },
{ {.s=RIG_LEVEL_NONE} }
{ {.s=RIG_PARM_NONE} }
};
/*
@ -152,8 +148,7 @@ static const struct icom_priv_caps ic7600_priv_caps =
{ .level = RIG_AGC_SLOW, .icom_level = 3 },
{ .level = -1, .icom_level = 0 },
},
.rigparms = ic7600_rigparms, /* Custom parm parameters */
.riglevels = ic7600_riglevels, /* Custom level parameters */
.extcmds = ic7600_extcmds, /* Custom op parameters */
};
const struct confparams ic7600_ext_levels[] =

Wyświetl plik

@ -401,6 +401,22 @@ const struct confparams icom_cfg_params[] =
{RIG_CONF_END, NULL,}
};
/*
* Lookup table for icom_get_ext_func
*/
const struct confparams icom_ext_funcs[] =
{
{}
};
/*
* Lookup table for icom_get_ext_level
*/
const struct confparams icom_ext_levels[] =
{
{}
};
/*
* Lookup table for icom_get_ext_parm
*/
@ -444,12 +460,12 @@ const struct confparams icom_ext_parms[] =
const struct cmdparams icom_ext_cmd[] =
{
{ {.t = TOK_DSTAR_DSQL}, C_CTL_DIG, S_DIG_DSCSQL, SC_MOD_RW, 1, {0}, CMD_DAT_BOL, 1 },
{ {.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 },
@ -1962,7 +1978,7 @@ int icom_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
const struct cmdparams *cmd = priv_caps->riglevels;
const struct cmdparams *cmd = priv_caps->extcmds;
for (i = 0; cmd && cmd[i].id.s != 0; i++)
{
@ -2319,7 +2335,7 @@ int icom_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
const struct icom_priv_caps *priv = rig->caps->priv;
const struct cmdparams *cmd = priv->riglevels;
const struct cmdparams *cmd = priv->extcmds;
int i;
for (i = 0; cmd && cmd[i].id.s != 0; i++)
@ -2778,6 +2794,18 @@ int icom_get_ext_level(RIG *rig, vfo_t vfo, token_t token, value_t *val)
return icom_get_ext_cmd(rig, vfo, token, val);
}
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_parm(RIG *rig, token_t token, value_t val)
{
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
@ -4584,7 +4612,7 @@ int icom_set_parm(RIG *rig, setting_t parm, value_t val)
int i;
const struct icom_priv_caps *priv = rig->caps->priv;
const struct cmdparams *cmd = priv->rigparms;
const struct cmdparams *cmd = priv->extcmds;
for (i = 0; cmd && cmd[i].id.s != 0; i++)
{
@ -4645,7 +4673,7 @@ int icom_get_parm(RIG *rig, setting_t parm, value_t *val)
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
const struct icom_priv_caps *priv = rig->caps->priv;
const struct cmdparams *cmd = priv->rigparms;
const struct cmdparams *cmd = priv->extcmds;
int i;
for (i = 0; cmd && cmd[i].id.s != 0; i++)

Wyświetl plik

@ -144,8 +144,6 @@ struct icom_priv_caps
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 *rigparms; /* Pointer to rig custom parameters array */
struct cmdparams *riglevels;/* Pointer to rig custom levels array */
struct cmdparams *extcmds; /* Pointer to extended operations array */
};
@ -246,6 +244,8 @@ 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);
@ -287,8 +287,9 @@ 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_levels[];
extern const struct confparams icom_ext_funcs[];
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;

Wyświetl plik

@ -159,7 +159,7 @@ const struct rig_caps icr30_caps =
},
.parm_gran = {},
.ext_tokens = icr30_tokens,
.extlevels = icr30_ext,
.extfuncs = icr30_ext,
.extparms = icom_ext_parms,
.ctcss_list = common_ctcss_list,
.dcs_list = common_dcs_list,
@ -266,6 +266,8 @@ const struct rig_caps icr30_caps =
.get_ext_parm = icom_get_ext_parm,
.set_ext_level = icom_set_ext_level,
.get_ext_level = icom_get_ext_level,
.set_ext_func = icom_set_ext_func,
.get_ext_func = icom_get_ext_func,
.get_dcd = icom_get_dcd,
.set_ctcss_sql = icom_set_ctcss_sql,
.get_ctcss_sql = icom_get_ctcss_sql,

Wyświetl plik

@ -67,7 +67,7 @@
{ 255, 60 }, \
} }
struct cmdparams icr8600_rigparms[] = {
struct cmdparams icr8600_extcmds[] = {
{ {.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 },
@ -81,14 +81,6 @@ int icr8600_tokens[] = { TOK_DSTAR_DSQL, TOK_DSTAR_CALL_SIGN, TOK_DSTAR_MESSAGE,
TOK_SCOPE_HLD, TOK_SCOPE_REF, TOK_SCOPE_SWP, TOK_SCOPE_TYP, TOK_SCOPE_VBW, TOK_SCOPE_FEF,
TOK_BACKEND_NONE };
struct confparams icr8600_ext[] = {
{ 0 }
};
struct cmdparams icr8600_extcmds[] = {
{ {0} }
};
/*
* channel caps.
*/
@ -112,8 +104,7 @@ static struct icom_priv_caps icr8600_priv_caps =
.ant_count = 3,
.offs_len = 4, /* Repeater offset is 4 bytes */
.serial_USB_echo_check = 1, /* USB CI-V may not echo */
.rigparms = icr8600_rigparms, /* Custom parm parameters */
.extcmds = icr8600_extcmds /* Custom ext_parm parameters */
.extcmds = icr8600_extcmds /* Custom ext_cmd parameters */
};
const struct rig_caps icr8600_caps =
@ -147,7 +138,8 @@ const struct rig_caps icr8600_caps =
.level_gran = { [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } } },
.parm_gran = { [PARM_TIME] = { .min = { .i = 0 }, .max = { .i = 86399} } },
.ext_tokens = icr8600_tokens,
.extlevels = icr8600_ext,
.extlevels = icom_ext_levels,
.extfuncs = icom_ext_funcs,
.extparms = icom_ext_parms,
.ctcss_list = common_ctcss_list,
.dcs_list = common_dcs_list,
@ -253,6 +245,8 @@ const struct rig_caps icr8600_caps =
.get_parm = icom_get_parm,
.set_ext_parm = icom_set_ext_parm,
.get_ext_parm = icom_get_ext_parm,
.set_ext_func = icom_set_ext_func,
.get_ext_func = icom_get_ext_func,
.get_dcd = icom_get_dcd,
.set_mem = icom_set_mem,
.vfo_op = icom_vfo_op,

Wyświetl plik

@ -28,9 +28,9 @@
* \file ext.c
* \brief Extension request parameter interface
*
* An open-ended set of extension parameters and levels are available for each
* rig, as provided in the rigcaps extparms and extlevels lists. These
* provide a way to work with rig-specific functions that don't fit into the
* An open-ended set of extension parameters, functions and levels are available
* for each rig, as provided in the rigcaps extparms, extfuncs and extlevels lists.
* These provide a way to work with rig-specific functions that don't fit into the
* basic "virtual rig" of Hamlib. See icom/ic746.c for an example.
*/
@ -144,7 +144,7 @@ int HAMLIB_API rig_ext_parm_foreach(RIG *rig,
* \param name
* \brief lookup ext token by its name, return pointer to confparams struct.
*
* Lookup extlevels table first, then fall back to extparms.
* Lookup extlevels table, then extfuncs, then extparms.
*
* Returns NULL if nothing found
*
@ -169,6 +169,14 @@ const struct confparams *HAMLIB_API rig_ext_lookup(RIG *rig, const char *name)
}
}
for (cfp = rig->caps->extfuncs; cfp && cfp->name; cfp++)
{
if (!strcmp(cfp->name, name))
{
return cfp;
}
}
for (cfp = rig->caps->extparms; cfp && cfp->name; cfp++)
{
if (!strcmp(cfp->name, name))

Wyświetl plik

@ -749,6 +749,137 @@ int HAMLIB_API rig_get_ext_level(RIG *rig,
return retcode;
}
/**
* \brief set a radio function extra parameter
* \param rig The rig handle
* \param vfo The target VFO
* \param token The parameter
* \param status The value to set the parameter to
*
* Sets a function extra parameter.
*
* \return RIG_OK if the operation has been sucessful, otherwise
* a negative value if an error occured (in which case, cause is
* set appropriately).
*
* \sa rig_get_ext_func()
*/
int HAMLIB_API rig_set_ext_func(RIG *rig,
vfo_t vfo,
token_t token,
int status)
{
const struct rig_caps *caps;
int retcode;
vfo_t curr_vfo;
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
if (CHECK_RIG_ARG(rig))
{
return -RIG_EINVAL;
}
caps = rig->caps;
if (caps->set_ext_level == NULL)
{
return -RIG_ENAVAIL;
}
if ((caps->targetable_vfo & RIG_TARGETABLE_PURE)
|| vfo == RIG_VFO_CURR
|| vfo == rig->state.current_vfo)
{
return caps->set_ext_func(rig, vfo, token, status);
}
if (!caps->set_vfo)
{
return -RIG_ENTARGET;
}
curr_vfo = rig->state.current_vfo;
retcode = caps->set_vfo(rig, vfo);
if (retcode != RIG_OK)
{
return retcode;
}
retcode = caps->set_ext_func(rig, vfo, token, status);
caps->set_vfo(rig, curr_vfo);
return retcode;
}
/**
* \brief get the value of a function extra parameter
* \param rig The rig handle
* \param vfo The target VFO
* \param token The parameter
* \param status The location where to store the value of \a token
*
* Retrieves the value of a function extra parameter associated with \a token.
*
* \return RIG_OK if the operation has been sucessful, otherwise
* a negative value if an error occured (in which case, cause is
* set appropriately).
*
* \sa rig_set_ext_func()
*/
int HAMLIB_API rig_get_ext_func(RIG *rig,
vfo_t vfo,
token_t token,
int *status)
{
const struct rig_caps *caps;
int retcode;
vfo_t curr_vfo;
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
if (CHECK_RIG_ARG(rig) || !status)
{
return -RIG_EINVAL;
}
caps = rig->caps;
if (caps->get_ext_func == NULL)
{
return -RIG_ENAVAIL;
}
if ((caps->targetable_vfo & RIG_TARGETABLE_PURE)
|| vfo == RIG_VFO_CURR
|| vfo == rig->state.current_vfo)
{
return caps->get_ext_func(rig, vfo, token, status);
}
if (!caps->set_vfo)
{
return -RIG_ENTARGET;
}
curr_vfo = rig->state.current_vfo;
retcode = caps->set_vfo(rig, vfo);
if (retcode != RIG_OK)
{
return retcode;
}
retcode = caps->get_ext_func(rig, vfo, token, status);
caps->set_vfo(rig, curr_vfo);
return retcode;
}
/**
* \brief set a radio parm extra parameter

Wyświetl plik

@ -2850,9 +2850,20 @@ declare_proto_rig(set_func)
func = rig_parse_func(arg1);
if (RIG_FUNC_NONE == func)
if (!rig_has_set_func(rig, func))
{
return -RIG_EINVAL;
const struct confparams *cfp;
cfp = rig_ext_lookup(rig, arg1);
if (!cfp)
{
return -RIG_ENAVAIL; /* no such parameter */
}
CHKSCN1ARG(sscanf(arg2, "%d", &func_stat));
return rig_set_ext_func(rig, vfo, cfp->token, func_stat);
}
CHKSCN1ARG(sscanf(arg2, "%d", &func_stat));
@ -2877,9 +2888,32 @@ declare_proto_rig(get_func)
func = rig_parse_func(arg1);
if (RIG_FUNC_NONE == func)
if (!rig_has_get_func(rig, func))
{
return -RIG_EINVAL;
const struct confparams *cfp;
cfp = rig_ext_lookup(rig, arg1);
if (!cfp)
{
return -RIG_EINVAL; /* no such parameter */
}
status = rig_get_ext_func(rig, vfo, cfp->token, &func_stat);
if (status != RIG_OK)
{
return status;
}
if (interactive && prompt)
{
fprintf(fout, "%s: ", cmd->arg2);
}
fprintf(fout, "%d\n", func_stat);
return status;
}
status = rig_get_func(rig, vfo, func, &func_stat);