[Hamlib-commits] Hamlib -- Ham radio control libraries branch master updated. f58314852047b10a210f7
Library to control radio transceivers and receivers
Brought to you by:
n0nb
From: Michael B. <mdb...@us...> - 2020-09-17 17:07:56
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Hamlib -- Ham radio control libraries". The branch, master has been updated via f58314852047b10a210f7b841598f52ff10e07bf (commit) via 548dcad2eec9ff60d33036b79c72f09a319ebec7 (commit) via 6d815cad13e6492a59026683c8e560f712d8e6e3 (commit) via c500b342a5633b9a2578656f878a8a5e6f59ef82 (commit) via f107faf71ef70b6ebf89b0109a88dec6f43f1d00 (commit) via 4e22e0d6e40787e3248cec8754398e5dfa1b1e6c (commit) via 499d17cd2019b656c496496f3f1be3a1fc6c3a56 (commit) via 7c4f0d025dfd95c6f24c44bbee320d751e618450 (commit) via 24b596c52b8b644ecbaf64ec25fd103c86d8a8b6 (commit) via 37311b50353f513598283da3c725332060fcabaa (commit) via 3c4bc6dbb19b11f5e2418ccb7c80fd60756a6e8d (commit) via 85981ed689b3b4d5068e8f142bd0dafc6d298373 (commit) via 52ec755f198f42f8dcfea4fe90e11d27a4f9f4af (commit) via 2f143aa8991f42f6b265d34217642bc8350ef09d (commit) via 23971f8e75907b13d67b4911448ca26fe5e1847c (commit) from d817aefa3602f78ea2fa5d77bb69650107177ad1 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit f58314852047b10a210f7b841598f52ff10e07bf Author: Michael Black W9MDB <mdb...@ya...> Date: Thu Sep 17 12:07:19 2020 -0500 astyle kenwood.c diff --git a/rigs/kenwood/kenwood.c b/rigs/kenwood/kenwood.c index 52955bec..bcf160ad 100644 --- a/rigs/kenwood/kenwood.c +++ b/rigs/kenwood/kenwood.c @@ -2240,8 +2240,10 @@ int kenwood_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) break; case RIG_LEVEL_MICGAIN: + /* XXX check level range */ if (RIG_LEVEL_IS_FLOAT(level)) { kenwood_val = val.f * 100; } + snprintf(levelbuf, sizeof(levelbuf), "MG%03d", kenwood_val); break; @@ -2649,10 +2651,13 @@ int kenwood_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) case RIG_LEVEL_MICGAIN: ret = get_kenwood_level(rig, "MG", &val->f); - if (ret != RIG_OK) { + + if (ret != RIG_OK) + { rig_debug(RIG_DEBUG_ERR, "%s: Error getting MICGAIN\n", __func__); return ret; } + val->f = val->f * (255.0 / 100.0); return RIG_OK; commit 548dcad2eec9ff60d33036b79c72f09a319ebec7 Author: Michael Black W9MDB <mdb...@ya...> Date: Thu Sep 17 12:06:48 2020 -0500 Fix MICGAIN to 0-100 range in kenwood.c diff --git a/rigs/kenwood/kenwood.c b/rigs/kenwood/kenwood.c index 8961bb7b..52955bec 100644 --- a/rigs/kenwood/kenwood.c +++ b/rigs/kenwood/kenwood.c @@ -2241,6 +2241,7 @@ int kenwood_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) case RIG_LEVEL_MICGAIN: /* XXX check level range */ + if (RIG_LEVEL_IS_FLOAT(level)) { kenwood_val = val.f * 100; } snprintf(levelbuf, sizeof(levelbuf), "MG%03d", kenwood_val); break; @@ -2576,25 +2577,25 @@ int kenwood_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) // 2 == AG0 (fixed VFO) // 3 == AG0/1 (with VFO arg) char buffer[KENWOOD_MAX_BUF_LEN]; - int err = kenwood_transaction(rig, "AG", buffer, sizeof(buffer)); + ret = kenwood_transaction(rig, "AG", buffer, sizeof(buffer)); - if (err == RIG_OK) + if (ret == RIG_OK) { priv->ag_format = 1; } else { - err = kenwood_transaction(rig, "AG1", buffer, sizeof(buffer)); + ret = kenwood_transaction(rig, "AG1", buffer, sizeof(buffer)); - if (err == RIG_OK) + if (ret == RIG_OK) { priv->ag_format = 3; } else { - err = kenwood_transaction(rig, "AG0", buffer, sizeof(buffer)); + ret = kenwood_transaction(rig, "AG0", buffer, sizeof(buffer)); - if (err == RIG_OK) + if (ret == RIG_OK) { priv->ag_format = 2; } @@ -2647,7 +2648,13 @@ int kenwood_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) return get_kenwood_level(rig, "SQ", &val->f); case RIG_LEVEL_MICGAIN: - return get_kenwood_level(rig, "MG", &val->f); + ret = get_kenwood_level(rig, "MG", &val->f); + if (ret != RIG_OK) { + rig_debug(RIG_DEBUG_ERR, "%s: Error getting MICGAIN\n", __func__); + return ret; + } + val->f = val->f * (255.0 / 100.0); + return RIG_OK; case RIG_LEVEL_AGC: ret = get_kenwood_level(rig, "GT", &val->f); commit 6d815cad13e6492a59026683c8e560f712d8e6e3 Author: Michael Black W9MDB <mdb...@ya...> Date: Thu Sep 17 11:50:23 2020 -0500 Add set_level MICGAIN to kenwood.c diff --git a/rigs/kenwood/kenwood.c b/rigs/kenwood/kenwood.c index a53eb569..8961bb7b 100644 --- a/rigs/kenwood/kenwood.c +++ b/rigs/kenwood/kenwood.c @@ -2239,6 +2239,11 @@ int kenwood_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) } break; + case RIG_LEVEL_MICGAIN: + /* XXX check level range */ + snprintf(levelbuf, sizeof(levelbuf), "MG%03d", kenwood_val); + break; + case RIG_LEVEL_RF: /* XXX check level range */ snprintf(levelbuf, sizeof(levelbuf), "RG%03d", kenwood_val); diff --git a/rigs/kenwood/kenwood.h b/rigs/kenwood/kenwood.h index 9949279c..4dab795b 100644 --- a/rigs/kenwood/kenwood.h +++ b/rigs/kenwood/kenwood.h @@ -27,7 +27,7 @@ #include <string.h> #include "token.h" -#define BACKEND_VER "20200916" +#define BACKEND_VER "20200917" #define EOM_KEN ';' #define EOM_TH '\r' commit c500b342a5633b9a2578656f878a8a5e6f59ef82 Author: Michael Black W9MDB <mdb...@ya...> Date: Thu Sep 17 10:37:22 2020 -0500 Update man pages for get_chan https://github.com/Hamlib/Hamlib/issues/370 diff --git a/doc/man1/rigctl.1 b/doc/man1/rigctl.1 index 6546a9d3..d9f4494e 100644 --- a/doc/man1/rigctl.1 +++ b/doc/man1/rigctl.1 @@ -959,12 +959,11 @@ data. Sets memory channel information . .TP -.BR h ", " get_channel -Get memory -.RI \(aq Channel \(aq -data. +.BR h ", " get_channel " \(aq" \fIreadonly\fP \(aq +Get channel memory. .IP -Returns programmed channel information for specified channel +If readonly!=0 then only channel data is returned and rig remains on the current channel. If readonly=0 then rig will be set to the channel requested. +data. . .TP .BR A ", " set_trn " \(aq" \fITransceive\fP \(aq diff --git a/doc/man1/rigctld.1 b/doc/man1/rigctld.1 index b5d51578..6b02055a 100644 --- a/doc/man1/rigctld.1 +++ b/doc/man1/rigctld.1 @@ -935,12 +935,11 @@ data. Not implemented yet. . .TP -.BR h ", " get_channel -Get memory -.RI \(aq Channel \(aq -data. +.BR h ", " get_channel " \(aq" \fIreadonly\fP \(aq +Get channel memory. .IP -Not implemented yet. +If readonly!=0 then only channel data is returned and rig remains on the current channel. If readonly=0 then rig will be set to the channel requested. +data. . .TP .BR A ", " set_trn " \(aq" \fITransceive\fP \(aq commit f107faf71ef70b6ebf89b0109a88dec6f43f1d00 Author: Michael Black W9MDB <mdb...@ya...> Date: Thu Sep 17 08:20:51 2020 -0500 Update man pages for set_ant diff --git a/doc/man1/rigctl.1 b/doc/man1/rigctl.1 index 7814e960..6546a9d3 100644 --- a/doc/man1/rigctl.1 +++ b/doc/man1/rigctl.1 @@ -667,7 +667,20 @@ and .IP Number is 1-based antenna# (\(oq1\(cq, \(oq2\(cq, \(oq3\(cq, ...). .IP -Option depends on rig..for Icom it probably sets the RX only flag as in the IC-7851. See your manual for specific option values. Most rigs don't care about the option. +Option depends on rig..for Icom it probably sets the Tx & Rx antennas as in the IC-7851. See your manual for rig specific option values. Most rigs don't care about the option. +.IP +For the IC-7851 (and perhaps others) it means this: +.IP +.in +4n +.EX +1 = TX/RX = ANT1 +2 = TX/RX = ANT2 +3 = TX/RX = ANT3 +4 = TX/RX = ANT1/ANT4 +5 = TX/RX = ANT2/ANT4 +6 = TX/RX = ANT3/ANT4 +.EE +.in . .TP .BR y ", " get_ant " \(aq" \fIAntenna\fP \(aq diff --git a/doc/man1/rigctld.1 b/doc/man1/rigctld.1 index 959b2425..b5d51578 100644 --- a/doc/man1/rigctld.1 +++ b/doc/man1/rigctld.1 @@ -648,6 +648,22 @@ above. Set .RI \(aq Antenna \(aq number (\(oq0\(cq, \(oq1\(cq, \(oq2\(cq, ...). +.IP +.IP +Option depends on rig..for Icom it probably sets the Tx & Rx antennas as in the IC-7851. See your manual for rig specific option values. Most rigs don't care about the option. +.IP +For the IC-7851 (and perhaps others) it means this: +.IP +.in +4n +.EX +1 = TX/RX = ANT1 +2 = TX/RX = ANT2 +3 = TX/RX = ANT3 +4 = TX/RX = ANT1/ANT4 +5 = TX/RX = ANT2/ANT4 +6 = TX/RX = ANT3/ANT4 +.EE +.in . .TP .BR y ", " get_ant commit 4e22e0d6e40787e3248cec8754398e5dfa1b1e6c Merge: 24b596c5 499d17cd Author: Michael Black <mdb...@ya...> Date: Wed Sep 16 15:18:38 2020 -0500 Merge pull request #381 from mikaelnousiainen/icom-extcmds-fixes-1 Icom extcmds fixes commit 499d17cd2019b656c496496f3f1be3a1fc6c3a56 Author: Mikael Nousiainen <mik...@ik...> Date: Wed Sep 16 22:33:39 2020 +0300 Fix errors in Icom extcmd definitions and handling. Migrate more commands on Icom rigs to use extcmds. Add extfuncs to dummy rig for testing. diff --git a/dummy/dummy.c b/dummy/dummy.c index 85682c63..5bfad894 100644 --- a/dummy/dummy.c +++ b/dummy/dummy.c @@ -73,6 +73,7 @@ struct dummy_priv_data channel_t vfo_b; channel_t mem[NB_CHAN]; + struct ext_list *ext_funcs; struct ext_list *ext_parms; char *magic_conf; @@ -104,6 +105,15 @@ static const struct confparams dummy_ext_levels[] = { RIG_CONF_END, NULL, } }; +static const struct confparams dummy_ext_funcs[] = +{ + { + TOK_EL_MAGICEXTFUNC, "MGEF", "Magic ext func", "Magic ext function, as an example", + NULL, RIG_CONF_CHECKBUTTON + }, + { RIG_CONF_END, NULL, } +}; + /* parms pertain to the whole rig */ static const struct confparams dummy_ext_parms[] = { @@ -270,6 +280,13 @@ static int dummy_init(RIG *rig) return -RIG_ENOMEM; } + priv->ext_funcs = alloc_init_ext(dummy_ext_funcs); + + if (!priv->ext_funcs) + { + return -RIG_ENOMEM; + } + priv->ext_parms = alloc_init_ext(dummy_ext_parms); if (!priv->ext_parms) @@ -309,6 +326,7 @@ static int dummy_cleanup(RIG *rig) free(priv->vfo_a.ext_levels); free(priv->vfo_b.ext_levels); + free(priv->ext_funcs); free(priv->ext_parms); free(priv->magic_conf); @@ -1240,6 +1258,93 @@ static int dummy_get_ext_level(RIG *rig, vfo_t vfo, token_t token, value_t *val) } +static int dummy_set_ext_func(RIG *rig, vfo_t vfo, token_t token, int status) +{ + struct dummy_priv_data *priv = (struct dummy_priv_data *)rig->state.priv; + const struct confparams *cfp; + struct ext_list *elp; + + cfp = rig_ext_lookup_tok(rig, token); + + if (!cfp) + { + return -RIG_EINVAL; + } + + switch (token) + { + case TOK_EL_MAGICEXTFUNC: + break; + + default: + return -RIG_EINVAL; + } + + switch (cfp->type) + { + case RIG_CONF_CHECKBUTTON: + break; + case RIG_CONF_BUTTON: + break; + default: + return -RIG_EINTERNAL; + } + + elp = find_ext(priv->ext_funcs, token); + + if (!elp) + { + return -RIG_EINTERNAL; + } + + /* store value */ + elp->val.i = status; + + rig_debug(RIG_DEBUG_VERBOSE, "%s called: %s %d\n", __func__, + cfp->name, status); + + return RIG_OK; +} + + +static int dummy_get_ext_func(RIG *rig, vfo_t vfo, token_t token, int *status) +{ + struct dummy_priv_data *priv = (struct dummy_priv_data *)rig->state.priv; + const struct confparams *cfp; + struct ext_list *elp; + + cfp = rig_ext_lookup_tok(rig, token); + + if (!cfp) + { + return -RIG_EINVAL; + } + + switch (token) + { + case TOK_EL_MAGICEXTFUNC: + break; + default: + return -RIG_EINVAL; + } + + elp = find_ext(priv->ext_funcs, token); + + if (!elp) + { + return -RIG_EINTERNAL; + } + + /* load value */ + *status = elp->val.i; + + rig_debug(RIG_DEBUG_VERBOSE, "%s called: %s\n", __func__, + cfp->name); + + return RIG_OK; +} + + static int dummy_set_powerstat(RIG *rig, powerstat_t status) { struct dummy_priv_data *priv = (struct dummy_priv_data *)rig->state.priv; @@ -2034,6 +2139,7 @@ struct rig_caps dummy_caps = .priv = NULL, /* priv */ .extlevels = dummy_ext_levels, + .extfuncs = dummy_ext_funcs, .extparms = dummy_ext_parms, .cfgparams = dummy_cfg_params, @@ -2062,6 +2168,8 @@ struct rig_caps dummy_caps = .get_parm = dummy_get_parm, .set_ext_level = dummy_set_ext_level, .get_ext_level = dummy_get_ext_level, + .set_ext_func = dummy_set_ext_func, + .get_ext_func = dummy_get_ext_func, .set_ext_parm = dummy_set_ext_parm, .get_ext_parm = dummy_get_ext_parm, @@ -2196,6 +2304,7 @@ struct rig_caps dummy_no_vfo_caps = .priv = NULL, /* priv */ .extlevels = dummy_ext_levels, + .extfuncs = dummy_ext_funcs, .extparms = dummy_ext_parms, .cfgparams = dummy_cfg_params, @@ -2224,6 +2333,8 @@ struct rig_caps dummy_no_vfo_caps = .get_parm = dummy_get_parm, .set_ext_level = dummy_set_ext_level, .get_ext_level = dummy_get_ext_level, + .set_ext_func = dummy_set_ext_func, + .get_ext_func = dummy_get_ext_func, .set_ext_parm = dummy_set_ext_parm, .get_ext_parm = dummy_get_ext_parm, diff --git a/dummy/dummy.h b/dummy/dummy.h index 5d93d5aa..61642549 100644 --- a/dummy/dummy.h +++ b/dummy/dummy.h @@ -31,11 +31,12 @@ /* ext_level's and ext_parm's tokens */ -#define TOK_EL_MAGICLEVEL TOKEN_BACKEND(1) -#define TOK_EL_MAGICFUNC TOKEN_BACKEND(2) -#define TOK_EL_MAGICOP TOKEN_BACKEND(3) -#define TOK_EP_MAGICPARM TOKEN_BACKEND(4) -#define TOK_EL_MAGICCOMBO TOKEN_BACKEND(5) +#define TOK_EL_MAGICLEVEL TOKEN_BACKEND(1) +#define TOK_EL_MAGICFUNC TOKEN_BACKEND(2) +#define TOK_EL_MAGICOP TOKEN_BACKEND(3) +#define TOK_EP_MAGICPARM TOKEN_BACKEND(4) +#define TOK_EL_MAGICCOMBO TOKEN_BACKEND(5) +#define TOK_EL_MAGICEXTFUNC TOKEN_BACKEND(6) extern struct rig_caps dummy_caps; diff --git a/rigs/icom/ic7000.c b/rigs/icom/ic7000.c index 5c9551af..874213c7 100644 --- a/rigs/icom/ic7000.c +++ b/rigs/icom/ic7000.c @@ -129,8 +129,11 @@ .levels = RIG_LEVEL_SET(IC7000_LEVELS), \ } -int ic7000_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val); -int ic7000_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val); +struct cmdparams ic7000_extcmds[] = +{ + { {.s = RIG_LEVEL_VOXDELAY}, CMD_PARAM_TYPE_LEVEL, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x17}, CMD_DAT_INT, 1 }, + { {.s = RIG_PARM_NONE} } +}; /* * IC-7000 rig capabilities. @@ -148,6 +151,7 @@ static const struct icom_priv_caps IC7000_priv_caps = { .level = RIG_AGC_SLOW, .icom_level = 3 }, { .level = -1, .icom_level = 0 }, }, + .extcmds = ic7000_extcmds, }; const struct rig_caps ic7000_caps = @@ -296,8 +300,8 @@ const struct rig_caps ic7000_caps = .get_ant = NULL, .decode_event = icom_decode_event, - .set_level = ic7000_set_level, - .get_level = ic7000_get_level, + .set_level = icom_set_level, + .get_level = icom_get_level, .set_func = icom_set_func, .get_func = icom_get_func, .set_parm = NULL, @@ -329,39 +333,3 @@ const struct rig_caps ic7000_caps = .get_split_vfo = NULL, }; - -int ic7000_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) -{ - unsigned char cmdbuf[MAXFRAMELEN]; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (level) - { - case RIG_LEVEL_VOXDELAY: - cmdbuf[0] = 0x01; - cmdbuf[1] = 0x17; - return icom_set_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, 1, val); - - default: - return icom_set_level(rig, vfo, level, val); - } -} - -int ic7000_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) -{ - unsigned char cmdbuf[MAXFRAMELEN]; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (level) - { - case RIG_LEVEL_VOXDELAY: - cmdbuf[0] = 0x01; - cmdbuf[1] = 0x17; - return icom_get_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, val); - - default: - return icom_get_level(rig, vfo, level, val); - } -} diff --git a/rigs/icom/ic7300.c b/rigs/icom/ic7300.c index 90917f4b..3602969f 100644 --- a/rigs/icom/ic7300.c +++ b/rigs/icom/ic7300.c @@ -897,7 +897,6 @@ const struct rig_caps ic705_caps = int ic7300_set_parm(RIG *rig, setting_t parm, value_t val) { unsigned char prmbuf[MAXFRAMELEN]; - int min, hr; rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); @@ -971,8 +970,7 @@ int ic7300_set_parm(RIG *rig, setting_t parm, value_t val) } default: - rig_debug(RIG_DEBUG_ERR, "Unsupported set_parm %s\n", rig_strparm(parm)); - return -RIG_EINVAL; + return icom_set_parm(rig, parm, val); } } diff --git a/rigs/icom/ic7610.c b/rigs/icom/ic7610.c index 013cc935..8b0dcb1e 100644 --- a/rigs/icom/ic7610.c +++ b/rigs/icom/ic7610.c @@ -121,13 +121,18 @@ { 241, 30.0f } \ } } -int ic7610_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val); -int ic7610_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val); +struct cmdparams ic7610_extcmds[] = +{ + { {.s = RIG_LEVEL_VOXDELAY}, CMD_PARAM_TYPE_LEVEL, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x02, 0x92}, CMD_DAT_INT, 1 }, + { { 0 } } +}; + +int ic7610_ext_tokens[] = { + TOK_DRIVE_GAIN, TOK_DIGI_SEL_FUNC, TOK_DIGI_SEL_LEVEL, TOK_BACKEND_NONE +}; /* * IC-7610 rig capabilities. - * - * TODO: complete command set (esp. the $1A bunch!) and testing.. */ static const struct icom_priv_caps ic7610_priv_caps = { @@ -144,23 +149,7 @@ static const struct icom_priv_caps ic7610_priv_caps = { .level = RIG_AGC_SLOW, .icom_level = 3 }, { .level = -1, .icom_level = 0 }, }, -}; - -const struct confparams ic7610_ext_levels[] = -{ - { - TOK_DRIVE_GAIN, "drive_gain", "Drive gain", "Drive gain", - NULL, RIG_CONF_NUMERIC, { .n = { 0, 255, 1 } }, - }, - { - TOK_DIGI_SEL_FUNC, "digi_sel", "DIGI-SEL enable", "DIGI-SEL enable", - NULL, RIG_CONF_CHECKBUTTON, { }, - }, - { - TOK_DIGI_SEL_LEVEL, "digi_sel_level", "DIGI-SEL level", "DIGI-SEL level", - NULL, RIG_CONF_NUMERIC, { .n = { 0, 255, 1 } }, - }, - { RIG_CONF_END, NULL, } + .extcmds = ic7610_extcmds, }; const struct rig_caps ic7610_caps = @@ -198,7 +187,7 @@ const struct rig_caps ic7610_caps = [LVL_CWPITCH] = { .min = { .i = 300 }, .max = { .i = 900 }, .step = { .i = 1 } }, }, .parm_gran = {}, - .extlevels = ic7610_ext_levels, + .ext_tokens = ic7610_ext_tokens, .ctcss_list = common_ctcss_list, .dcs_list = NULL, .preamp = { 10, 20, RIG_DBLST_END, }, /* FIXME: TBC */ @@ -308,8 +297,8 @@ const struct rig_caps ic7610_caps = .set_xit = icom_set_xit_new, .decode_event = icom_decode_event, - .set_level = ic7610_set_level, - .get_level = ic7610_get_level, + .set_level = icom_set_level, + .get_level = icom_get_level, .set_ext_level = icom_set_ext_level, .get_ext_level = icom_get_ext_level, .set_func = icom_set_func, @@ -338,39 +327,3 @@ const struct rig_caps ic7610_caps = .get_powerstat = icom_get_powerstat, .send_morse = icom_send_morse }; - -int ic7610_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) -{ - unsigned char cmdbuf[MAXFRAMELEN]; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (level) - { - case RIG_LEVEL_VOXDELAY: - cmdbuf[0] = 0x02; - cmdbuf[1] = 0x92; - return icom_set_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, 1, val); - - default: - return icom_set_level(rig, vfo, level, val); - } -} - -int ic7610_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) -{ - unsigned char cmdbuf[MAXFRAMELEN]; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (level) - { - case RIG_LEVEL_VOXDELAY: - cmdbuf[0] = 0x02; - cmdbuf[1] = 0x92; - return icom_get_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, val); - - default: - return icom_get_level(rig, vfo, level, val); - } -} diff --git a/rigs/icom/ic9100.c b/rigs/icom/ic9100.c index 61f36039..3ab05461 100644 --- a/rigs/icom/ic9100.c +++ b/rigs/icom/ic9100.c @@ -92,8 +92,12 @@ #define IC9100_HF_ANTS (RIG_ANT_1|RIG_ANT_2) -/* - */ +struct cmdparams ic9100_extcmds[] = +{ + { {.s = RIG_LEVEL_VOXDELAY}, CMD_PARAM_TYPE_LEVEL, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x27}, CMD_DAT_INT, 1 }, + { {.s = RIG_PARM_NONE} } +}; + static const struct icom_priv_caps ic9100_priv_caps = { 0x7c, /* default address */ @@ -102,6 +106,7 @@ static const struct icom_priv_caps ic9100_priv_caps = ic910_ts_sc_list, /* FIXME */ .antack_len = 2, .ant_count = 2, + .extcmds = ic9100_extcmds, }; const struct rig_caps ic9100_caps = @@ -279,45 +284,3 @@ const struct rig_caps ic9100_caps = .get_split_mode = icom_get_split_mode, }; - -#ifdef XXREMOVEDXX -// Not referenced anywhere -int ic9100_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) -{ - unsigned char cmdbuf[MAXFRAMELEN]; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (level) - { - case RIG_LEVEL_VOXDELAY: - cmdbuf[0] = 0x01; - cmdbuf[1] = 0x27; - return icom_set_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, 1, val); - - default: - return icom_set_level(rig, vfo, level, val); - } -} -#endif - -#ifdef XXREMOVEDXX -// Not referenced anywhere -int ic9100_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) -{ - unsigned char cmdbuf[MAXFRAMELEN]; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (level) - { - case RIG_LEVEL_VOXDELAY: - cmdbuf[0] = 0x01; - cmdbuf[1] = 0x27; - return icom_get_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, val); - - default: - return icom_get_level(rig, vfo, level, val); - } -} -#endif diff --git a/rigs/icom/icom.c b/rigs/icom/icom.c index d4783dd7..df5b4a59 100644 --- a/rigs/icom/icom.c +++ b/rigs/icom/icom.c @@ -486,9 +486,9 @@ const struct cmdparams icom_ext_cmd[] = { {.t = TOK_DSTAR_MY_CS}, CMD_PARAM_TYPE_TOKEN, C_CTL_DVT, S_DVT_DSMYCS, SC_MOD_RW, 1, {0}, CMD_DAT_STR, 12 }, { {.t = TOK_DSTAR_TX_CS}, CMD_PARAM_TYPE_TOKEN, C_CTL_DVT, S_DVT_DSTXCS, SC_MOD_RW, 1, {0}, CMD_DAT_STR, 24 }, { {.t = TOK_DSTAR_TX_MESS}, CMD_PARAM_TYPE_TOKEN, C_CTL_DVT, S_DVT_DSTXMS, SC_MOD_RW, 1, {0}, CMD_DAT_STR, 20 }, - { {.t = TOK_DRIVE_GAIN}, CMD_PARAM_TYPE_TOKEN, C_CTL_LVL, S_LVL_DRIVE, SC_MOD_RW, 1, {0}, CMD_DAT_FLT, 2 }, - { {.t = TOK_DIGI_SEL_FUNC}, CMD_PARAM_TYPE_TOKEN, C_CTL_FUNC, S_FUNC_DIGISEL, SC_MOD_RW, 1, {0}, CMD_DAT_BOL, 1 }, - { {.t = TOK_DIGI_SEL_LEVEL}, CMD_PARAM_TYPE_TOKEN, C_CTL_LVL, S_LVL_DIGI, SC_MOD_RW, 1, {0}, CMD_DAT_FLT, 2 }, + { {.t = TOK_DRIVE_GAIN}, CMD_PARAM_TYPE_TOKEN, C_CTL_LVL, S_LVL_DRIVE, SC_MOD_RW, 0, {0}, CMD_DAT_FLT, 2 }, + { {.t = TOK_DIGI_SEL_FUNC}, CMD_PARAM_TYPE_TOKEN, C_CTL_FUNC, S_FUNC_DIGISEL, SC_MOD_RW, 0, {0}, CMD_DAT_BOL, 1 }, + { {.t = TOK_DIGI_SEL_LEVEL}, CMD_PARAM_TYPE_TOKEN, C_CTL_LVL, S_LVL_DIGI, SC_MOD_RW, 0, {0}, CMD_DAT_FLT, 2 }, { {.t = TOK_SCOPE_DAT}, CMD_PARAM_TYPE_TOKEN, C_CTL_SCP, S_SCP_DAT, SC_MOD_RD, 0, {0}, CMD_DAT_BUF, 481 }, { {.t = TOK_SCOPE_STS}, CMD_PARAM_TYPE_TOKEN, C_CTL_SCP, S_SCP_STS, SC_MOD_RW, 0, {0}, CMD_DAT_BOL, 1 }, { {.t = TOK_SCOPE_DOP}, CMD_PARAM_TYPE_TOKEN, C_CTL_SCP, S_SCP_DOP, SC_MOD_RW, 0, {0}, CMD_DAT_BOL, 1 }, @@ -2209,11 +2209,11 @@ int icom_set_cmd(RIG *rig, vfo_t vfo, struct cmdparams *par, value_t val) break; case CMD_DAT_FLT: - to_bcd_be(&cmdbuf[cmdlen], (int) val.f, (cmdlen * 2)); + to_bcd_be(&cmdbuf[cmdlen], (int) val.f, (par->datlen * 2)); break; case CMD_DAT_LVL: - to_bcd_be(&cmdbuf[cmdlen], (int)(val.f * 255.0), (cmdlen * 2)); + to_bcd_be(&cmdbuf[cmdlen], (int)(val.f * 255.0), (par->datlen * 2)); break; case CMD_DAT_TIM: // returned as seconds since midnight @@ -5598,13 +5598,13 @@ 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->extcmds; + const struct cmdparams *extcmds = priv->extcmds; - for (i = 0; cmd && cmd[i].id.s != 0; i++) + for (i = 0; extcmds && extcmds[i].id.s != 0; i++) { - if (cmd[i].cmdparamtype == CMD_PARAM_TYPE_PARM && cmd[i].id.s == parm) + if (extcmds[i].cmdparamtype == CMD_PARAM_TYPE_PARM && extcmds[i].id.s == parm) { - return icom_set_cmd(rig, RIG_VFO_NONE, (struct cmdparams *)&cmd[i], val); + return icom_set_cmd(rig, RIG_VFO_NONE, (struct cmdparams *)&extcmds[i], val); } } diff --git a/src/settings.c b/src/settings.c index c0861f91..77aa4c18 100644 --- a/src/settings.c +++ b/src/settings.c @@ -787,7 +787,7 @@ int HAMLIB_API rig_set_ext_func(RIG *rig, caps = rig->caps; - if (caps->set_ext_level == NULL) + if (caps->set_ext_func == NULL) { return -RIG_ENAVAIL; } commit 7c4f0d025dfd95c6f24c44bbee320d751e618450 Merge: 23971f8e 24b596c5 Author: Mikael Nousiainen <mik...@ik...> Date: Wed Sep 16 22:31:30 2020 +0300 Merge branch 'master' into icom-extcmds-fixes-1 commit 24b596c52b8b644ecbaf64ec25fd103c86d8a8b6 Author: Michael Black W9MDB <mdb...@ya...> Date: Wed Sep 16 14:24:52 2020 -0500 Add MICGAIN to ts590 LEVEL set diff --git a/rigs/kenwood/ts590.c b/rigs/kenwood/ts590.c index 0149a190..e037c426 100644 --- a/rigs/kenwood/ts590.c +++ b/rigs/kenwood/ts590.c @@ -43,7 +43,8 @@ int ts590_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val); #define TS590_LEVEL_ALL (RIG_LEVEL_RFPOWER|RIG_LEVEL_AF|RIG_LEVEL_RF|\ RIG_LEVEL_CWPITCH|RIG_LEVEL_METER|RIG_LEVEL_SWR|RIG_LEVEL_ALC|\ - RIG_LEVEL_SQL|RIG_LEVEL_AGC|RIG_LEVEL_RAWSTR|RIG_LEVEL_STRENGTH|RIG_LEVEL_KEYSPD) + RIG_LEVEL_SQL|RIG_LEVEL_AGC|RIG_LEVEL_RAWSTR|RIG_LEVEL_STRENGTH|\ + RIG_LEVEL_MICGAIN|RIG_LEVEL_KEYSPD) #define TS590_FUNC_ALL (RIG_FUNC_LOCK|RIG_FUNC_AIP|RIG_FUNC_TONE|\ RIG_FUNC_NB|RIG_FUNC_COMP|RIG_FUNC_VOX|RIG_FUNC_NR|RIG_FUNC_NR|RIG_FUNC_BC) commit 37311b50353f513598283da3c725332060fcabaa Author: Michael Black W9MDB <mdb...@ya...> Date: Wed Sep 16 13:03:05 2020 -0500 Add MICGAIN to ts590.c diff --git a/rigs/kenwood/ts590.c b/rigs/kenwood/ts590.c index ee29280f..0149a190 100644 --- a/rigs/kenwood/ts590.c +++ b/rigs/kenwood/ts590.c @@ -479,6 +479,7 @@ int ts590_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) case RIG_LEVEL_RFPOWER: case RIG_LEVEL_RF: case RIG_LEVEL_AF: + case RIG_LEVEL_MICGAIN: return kenwood_get_level(rig, vfo, level, val); commit 3c4bc6dbb19b11f5e2418ccb7c80fd60756a6e8d Author: Michael Black W9MDB <mdb...@ya...> Date: Wed Sep 16 12:42:14 2020 -0500 Fix ts590 LEVEL_AF diff --git a/rigs/kenwood/ts590.c b/rigs/kenwood/ts590.c index 64f2b088..ee29280f 100644 --- a/rigs/kenwood/ts590.c +++ b/rigs/kenwood/ts590.c @@ -478,10 +478,9 @@ int ts590_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) case RIG_LEVEL_CWPITCH: case RIG_LEVEL_RFPOWER: case RIG_LEVEL_RF: + case RIG_LEVEL_AF: return kenwood_get_level(rig, vfo, level, val); - case RIG_LEVEL_AF: - return get_kenwood_level(rig, "AG0", &val->f); case RIG_LEVEL_METER: retval = kenwood_transaction(rig, "RM0", lvlbuf, sizeof(lvlbuf)); commit 85981ed689b3b4d5068e8f142bd0dafc6d298373 Author: Michael Black W9MDB <mdb...@ya...> Date: Wed Sep 16 11:22:06 2020 -0500 Fix kenwood.c LEVEL_AF format 2 command diff --git a/rigs/kenwood/kenwood.c b/rigs/kenwood/kenwood.c index 0e3b47df..a53eb569 100644 --- a/rigs/kenwood/kenwood.c +++ b/rigs/kenwood/kenwood.c @@ -2587,7 +2587,7 @@ int kenwood_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) } else { - err = kenwood_transaction(rig, "AG1", buffer, sizeof(buffer)); + err = kenwood_transaction(rig, "AG0", buffer, sizeof(buffer)); if (err == RIG_OK) { commit 52ec755f198f42f8dcfea4fe90e11d27a4f9f4af Merge: 2f143aa8 d817aefa Author: Michael Black W9MDB <mdb...@ya...> Date: Wed Sep 16 10:44:08 2020 -0500 Merge branch 'master' of https://github.com/Hamlib/Hamlib commit 2f143aa8991f42f6b265d34217642bc8350ef09d Author: Michael Black W9MDB <mdb...@ya...> Date: Wed Sep 16 10:41:24 2020 -0500 Make kenwood AG format determination automatically on first get_level call There are 3 formats supported, "AG" "AG0" and "AG0"/"AG1" This should work until Kenwood comes up with "AG2" or such https://github.com/Hamlib/Hamlib/issues/380 diff --git a/rigs/kenwood/kenwood.c b/rigs/kenwood/kenwood.c index 09f4788d..0e3b47df 100644 --- a/rigs/kenwood/kenwood.c +++ b/rigs/kenwood/kenwood.c @@ -703,6 +703,8 @@ int kenwood_init(RIG *rig) caps->if_len = 37; } + priv->ag_format = -1; // force determination of AG format + rig_debug(RIG_DEBUG_TRACE, "%s: if_len = %d\n", __func__, caps->if_len); return RIG_OK; @@ -811,9 +813,9 @@ int kenwood_open(RIG *rig) if (!RIG_IS_XG3 && -RIG_ETIMEOUT == err) { + char buffer[KENWOOD_MAX_BUF_LEN]; /* Some Kenwood emulations have no ID command response :( * Try an FA command to see if anyone is listening */ - char buffer[KENWOOD_MAX_BUF_LEN]; err = kenwood_transaction(rig, "FA", buffer, sizeof(buffer)); if (RIG_OK != err) @@ -2181,6 +2183,7 @@ int kenwood_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) { char levelbuf[16]; int i, kenwood_val; + struct kenwood_priv_data *priv = rig->state.priv; rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); @@ -2208,11 +2211,31 @@ int kenwood_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) case RIG_LEVEL_AF: { + int vfo_set = vfo == RIG_VFO_A || vfo == RIG_VFO_MAIN ? 0 : 1; + // some rigs only recognize 0 for vfo_set - // hopefully they are asking for VFOA or Main otherwise this might not work // https://github.com/Hamlib/Hamlib/issues/304 - int vfo_set = vfo == RIG_VFO_A || vfo == RIG_VFO_MAIN ? 0 : 1; - snprintf(levelbuf, sizeof(levelbuf), "AG%1d%03d", vfo_set, kenwood_val); + // This is now fixed for all rigs + // https://github.com/Hamlib/Hamlib/issues/380 + // ag_format is determined in kenwood_get_level + switch (priv->ag_format) + { + case 1: + snprintf(levelbuf, sizeof(levelbuf), "AG%03d", kenwood_val); + break; + + case 2: + snprintf(levelbuf, sizeof(levelbuf), "AG0%03d", kenwood_val); + break; + + case 3: + snprintf(levelbuf, sizeof(levelbuf), "AG%d%03d", vfo_set, kenwood_val); + break; + + default: + rig_debug(RIG_DEBUG_ERR, "%s: Unknown ag_format=%d\n", __func__, + priv->ag_format); + } } break; @@ -2376,6 +2399,7 @@ int kenwood_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) int retval; int lvl; int i, ret, agclevel, len; + struct kenwood_priv_data *priv = rig->state.priv; rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); @@ -2533,7 +2557,83 @@ int kenwood_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) return ret; case RIG_LEVEL_AF: - return get_kenwood_level(rig, "AG", &val->f); + + // first time through we'll determine the AG format + // Can be "AG" "AG0" or "AG0/1" + // This could be done by rig but easy enough to make it automagic + if (priv->ag_format < 0) + { + rig_debug(RIG_DEBUG_TRACE, "%s: AF format check determination...\n", __func__); + // Determine AG format + // =-1 == Undetermine + // 0 == Unknown + // 1 == AG + // 2 == AG0 (fixed VFO) + // 3 == AG0/1 (with VFO arg) + char buffer[KENWOOD_MAX_BUF_LEN]; + int err = kenwood_transaction(rig, "AG", buffer, sizeof(buffer)); + + if (err == RIG_OK) + { + priv->ag_format = 1; + } + else + { + err = kenwood_transaction(rig, "AG1", buffer, sizeof(buffer)); + + if (err == RIG_OK) + { + priv->ag_format = 3; + } + else + { + err = kenwood_transaction(rig, "AG1", buffer, sizeof(buffer)); + + if (err == RIG_OK) + { + priv->ag_format = 2; + } + else + { + priv->ag_format = 0; // rats....can't figure it out + } + } + } + } + + rig_debug(RIG_DEBUG_TRACE, "%s: ag_format=%d\n", __func__, priv->ag_format); + + if (priv->ag_format == 0) + { + priv->ag_format = -1; // we'll keep trying next time + rig_debug(RIG_DEBUG_WARN, "%s: Unable to set AG format?\n", __func__); + return RIG_OK; // this is non-fatal for now + } + + switch (priv->ag_format) + { + case 0: + priv->ag_format = -1; // reset to try again + return RIG_OK; + break; + + case 1: + return get_kenwood_level(rig, "AG", &val->f); + break; + + case 2: + return get_kenwood_level(rig, "AG0", &val->f); + break; + + case 3: + return get_kenwood_level(rig, vfo == RIG_VFO_MAIN ? "AG0" : "AG1", &val->f); + break; + + default: + rig_debug(RIG_DEBUG_WARN, "%s: Invalid ag_format=%d?\n", __func__, + priv->ag_format); + return -RIG_EPROTO; + } case RIG_LEVEL_RF: return get_kenwood_level(rig, "RG", &val->f); diff --git a/rigs/kenwood/kenwood.h b/rigs/kenwood/kenwood.h index e6497802..9949279c 100644 --- a/rigs/kenwood/kenwood.h +++ b/rigs/kenwood/kenwood.h @@ -27,7 +27,7 @@ #include <string.h> #include "token.h" -#define BACKEND_VER "20200901" +#define BACKEND_VER "20200916" #define EOM_KEN ';' #define EOM_TH '\r' @@ -125,6 +125,7 @@ struct kenwood_priv_data char last_if_response[KENWOOD_MAX_BUF_LEN]; int poweron; /* to avoid powering on more than once */ int has_rit2; /* rig has set 2 rit command */ + int ag_format; /* which AG command is being used...see LEVEL_AF in kenwood.c*/ }; diff --git a/rigs/kenwood/pihpsdr.c b/rigs/kenwood/pihpsdr.c index 5c1b3838..3b69a69b 100644 --- a/rigs/kenwood/pihpsdr.c +++ b/rigs/kenwood/pihpsdr.c @@ -1033,25 +1033,7 @@ int pihpsdr_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) break; case RIG_LEVEL_AF: - retval = kenwood_transaction(rig, "AG0", lvlbuf, sizeof(lvlbuf)); - - if (retval != RIG_OK) - { - return retval; - } - - lvl_len = strlen(lvlbuf); - - if (lvl_len != 6) - { - rig_debug(RIG_DEBUG_ERR, "%s: unexpected answer len=%d\n", __func__, - (int)lvl_len); - return -RIG_ERJCTED; - } - - sscanf(lvlbuf + 2, "%d", &lvl); - val->f = lvl / 255.0; - break; + return kenwood_get_level(rig, vfo, level, val); case RIG_LEVEL_RF: retval = kenwood_transaction(rig, "RG", lvlbuf, sizeof(lvlbuf)); diff --git a/rigs/kenwood/ts2000.c b/rigs/kenwood/ts2000.c index 2cef024c..f36b012b 100644 --- a/rigs/kenwood/ts2000.c +++ b/rigs/kenwood/ts2000.c @@ -910,25 +910,7 @@ int ts2000_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) break; case RIG_LEVEL_AF: - retval = kenwood_transaction(rig, "AG0", lvlbuf, sizeof(lvlbuf)); - - if (retval != RIG_OK) - { - return retval; - } - - lvl_len = strlen(lvlbuf); - - if (lvl_len != 6) - { - rig_debug(RIG_DEBUG_ERR, "%s: unexpected answer len=%d\n", __func__, - (int)lvl_len); - return -RIG_ERJCTED; - } - - sscanf(lvlbuf + 2, "%d", &lvl); - val->f = lvl / 255.0; - break; + return kenwood_get_level(rig, vfo, level, val); case RIG_LEVEL_RF: retval = kenwood_transaction(rig, "RG", lvlbuf, sizeof(lvlbuf)); diff --git a/rigs/kenwood/ts480.c b/rigs/kenwood/ts480.c index c3b9cf36..be13fc6d 100644 --- a/rigs/kenwood/ts480.c +++ b/rigs/kenwood/ts480.c @@ -116,18 +116,7 @@ kenwood_ts480_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) break; case RIG_LEVEL_AF: - kenwood_val = val.f * 255; /* possible values for TS480 are 000.. 255 */ - - if (rig->caps->rig_model == RIG_MODEL_TS890S) - { - sprintf(levelbuf, "AG%03d", kenwood_val); - } - else - { - sprintf(levelbuf, "AG0%03d", kenwood_val); - } - - break; + return kenwood_set_level(rig, vfo, level, val); case RIG_LEVEL_RF: if (rig->caps->rig_model == RIG_MODEL_TS890S) commit 23971f8e75907b13d67b4911448ca26fe5e1847c Author: Mikael Nousiainen <mik...@ik...> Date: Wed Sep 16 18:10:35 2020 +0300 Fix issues with Icom extcmds definitions, some ext_tokens missing. Refactor custom level implementations to use extcmds definitions. Print out extfuncs in caps dump. diff --git a/include/hamlib/rig.h b/include/hamlib/rig.h index b382f9d1..19b95b5a 100644 --- a/include/hamlib/rig.h +++ b/include/hamlib/rig.h @@ -2383,6 +2383,12 @@ rig_get_ext_parm HAMLIB_PARAMS((RIG *rig, value_t *val)); extern HAMLIB_EXPORT(int) +rig_ext_func_foreach HAMLIB_PARAMS((RIG *rig, + int (*cfunc)(RIG *, + const struct confparams *, + rig_ptr_t), + rig_ptr_t data)); +extern HAMLIB_EXPORT(int) rig_ext_level_foreach HAMLIB_PARAMS((RIG *rig, int (*cfunc)(RIG *, const struct confparams *, diff --git a/rigs/icom/ic7300.c b/rigs/icom/ic7300.c index a2c40c04..90917f4b 100644 --- a/rigs/icom/ic7300.c +++ b/rigs/icom/ic7300.c @@ -61,19 +61,6 @@ static int ic7300_get_parm(RIG *rig, setting_t parm, value_t *val); #define IC7300_ANTS (RIG_ANT_1) /* ant-1 is Hf-6m */ -struct cmdparams ic7300_extcmds[] = -{ - { {.s = RIG_PARM_BEEP}, CMD_PARAM_TYPE_PARM, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x00, 0x23}, CMD_DAT_BOL, 1 }, - { {.s = RIG_PARM_BACKLIGHT}, CMD_PARAM_TYPE_PARM, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x00, 0x81}, CMD_DAT_LVL, 2 }, - { {.s = RIG_PARM_TIME}, CMD_PARAM_TYPE_PARM, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x00, 0x95}, CMD_DAT_TIM, 2 }, - { {.s = RIG_LEVEL_VOXDELAY}, CMD_PARAM_TYPE_LEVEL, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x59}, CMD_DAT_INT, 1 }, - { {.s = RIG_PARM_NONE} } -}; - -struct cmdparams ic7300_extlevels[] = -{ -}; - /* * IC-7300 S-meter levels measured from live signals on multiple bands. Provides a good approximation. */ @@ -153,15 +140,6 @@ struct cmdparams ic7300_extlevels[] = #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_extcmds[] = -{ - { {.s = RIG_PARM_BEEP}, CMD_PARAM_TYPE_PARM, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x00, 0x29}, CMD_DAT_BOL, 1 }, - { {.s = RIG_PARM_BACKLIGHT}, CMD_PARAM_TYPE_PARM, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x52}, CMD_DAT_LVL, 2 }, - { {.s = RIG_PARM_SCREENSAVER}, CMD_PARAM_TYPE_PARM, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x67}, CMD_DAT_INT, 1 }, - { {.s = RIG_LEVEL_VOXDELAY}, CMD_PARAM_TYPE_LEVEL, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x03, 0x30}, CMD_DAT_INT, 1 }, - { {0} } -}; - #define IC9700_STR_CAL { 7, \ { \ { 0, -54 }, \ @@ -216,6 +194,35 @@ struct cmdparams ic9700_extcmds[] = { 241, 20.0f } \ } } +struct cmdparams ic7300_extcmds[] = +{ + { {.s = RIG_PARM_BEEP}, CMD_PARAM_TYPE_PARM, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x00, 0x23}, CMD_DAT_BOL, 1 }, + { {.s = RIG_PARM_BACKLIGHT}, CMD_PARAM_TYPE_PARM, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x00, 0x81}, CMD_DAT_LVL, 2 }, + { {.s = RIG_PARM_TIME}, CMD_PARAM_TYPE_PARM, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x00, 0x95}, CMD_DAT_TIM, 2 }, + { {.s = RIG_LEVEL_VOXDELAY}, CMD_PARAM_TYPE_LEVEL, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x59}, CMD_DAT_INT, 1 }, + { {.s = RIG_PARM_NONE} } +}; + +struct cmdparams ic9700_extcmds[] = +{ + { {.s = RIG_PARM_BEEP}, CMD_PARAM_TYPE_PARM, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x00, 0x29}, CMD_DAT_BOL, 1 }, + { {.s = RIG_PARM_BACKLIGHT}, CMD_PARAM_TYPE_PARM, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x52}, CMD_DAT_LVL, 2 }, + { {.s = RIG_PARM_SCREENSAVER}, CMD_PARAM_TYPE_PARM, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x67}, CMD_DAT_INT, 1 }, + { {.s = RIG_PARM_TIME}, CMD_PARAM_TYPE_PARM, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x80}, CMD_DAT_TIM, 2 }, + { {.s = RIG_LEVEL_VOXDELAY}, CMD_PARAM_TYPE_LEVEL, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x03, 0x30}, CMD_DAT_INT, 1 }, + { {0} } +}; + +struct cmdparams ic705_extcmds[] = +{ + { {.s = RIG_PARM_BEEP}, CMD_PARAM_TYPE_PARM, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x00, 0x31}, CMD_DAT_BOL, 1 }, + { {.s = RIG_PARM_BACKLIGHT}, CMD_PARAM_TYPE_PARM, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x36}, CMD_DAT_LVL, 2 }, + { {.s = RIG_PARM_SCREENSAVER}, CMD_PARAM_TYPE_PARM, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x38}, CMD_DAT_INT, 1 }, + { {.s = RIG_PARM_TIME}, CMD_PARAM_TYPE_PARM, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x66}, CMD_DAT_TIM, 2 }, + { {.s = RIG_LEVEL_VOXDELAY}, CMD_PARAM_TYPE_LEVEL, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x03, 0x59}, CMD_DAT_INT, 1 }, + { {0} } +}; + /* * IC-7300 rig capabilities. */ @@ -266,7 +273,7 @@ static const struct icom_priv_caps IC705_priv_caps = { .level = RIG_AGC_SLOW, .icom_level = 3 }, { .level = -1, .icom_level = 0 }, }, - .extcmds = ic7300_extcmds, /* Custom parameters */ + .extcmds = ic705_extcmds, /* Custom parameters */ }; const struct rig_caps ic7300_caps = @@ -391,7 +398,6 @@ const struct rig_caps ic7300_caps = .get_freq = icom_get_freq, .set_mode = icom_set_mode_with_data, .get_mode = icom_get_mode_with_data, -//.get_vfo = icom_get_vfo, .set_vfo = icom_set_vfo, .set_ant = NULL, .get_ant = NULL, @@ -640,7 +646,6 @@ const struct rig_caps ic9700_caps = .get_freq = icom_get_freq, .set_mode = icom_set_mode_with_data, .get_mode = icom_get_mode_with_data, -//.get_vfo = icom_get_vfo, .set_vfo = icom_set_vfo, .set_ant = NULL, .get_ant = NULL, @@ -841,7 +846,6 @@ const struct rig_caps ic705_caps = .get_freq = icom_get_freq, .set_mode = icom_set_mode_with_data, .get_mode = icom_get_mode_with_data, -//.get_vfo = icom_get_vfo, .set_vfo = icom_set_vfo, .set_ant = NULL, .get_ant = NULL, @@ -966,35 +970,6 @@ int ic7300_set_parm(RIG *rig, setting_t parm, value_t val) return -RIG_EINVAL; } - case RIG_PARM_TIME: - hr = (int)((float) val.i / 3600.0); - min = (int)((float)(val.i - (hr * 3600)) / 60.0); - - switch (rig->caps->rig_model) - { - case RIG_MODEL_IC7300: - prmbuf[0] = 0x00; - prmbuf[1] = 0x95; - break; - - case RIG_MODEL_IC9700: - prmbuf[0] = 0x01; - prmbuf[1] = 0x80; - break; - - case RIG_MODEL_IC705: - prmbuf[0] = 0x01; - prmbuf[1] = 0x66; - break; - - default: - return -RIG_ENIMPL; - } - - to_bcd_be(prmbuf + 2, (long long) hr, 2); - to_bcd_be(prmbuf + 3, (long long) min, 2); - return icom_set_raw(rig, C_CTL_MEM, S_MEM_PARM, 4, prmbuf, 0, 0); - default: rig_debug(RIG_DEBUG_ERR, "Unsupported set_parm %s\n", rig_strparm(parm)); return -RIG_EINVAL; @@ -1058,4 +1033,3 @@ int ic7300_get_parm(RIG *rig, setting_t parm, value_t *val) return RIG_OK; } - diff --git a/rigs/icom/ic7410.c b/rigs/icom/ic7410.c index 443fbf5c..e922ee08 100644 --- a/rigs/icom/ic7410.c +++ b/rigs/icom/ic7410.c @@ -85,8 +85,11 @@ { 213, 1.0f } \ } } -int ic7410_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val); -int ic7410_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val); +struct cmdparams ic7410_extcmds[] = +{ + { {.s = RIG_LEVEL_VOXDELAY}, CMD_PARAM_TYPE_LEVEL, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 1, {0x75 }, CMD_DAT_INT, 1 }, + { {0} } +}; /* * IC-7410 rig capabilities. @@ -240,8 +243,8 @@ const struct rig_caps ic7410_caps = .get_ant = icom_get_ant, .decode_event = icom_decode_event, - .set_level = ic7410_set_level, - .get_level = ic7410_get_level, + .set_level = icom_set_level, + .get_level = icom_get_level, .set_func = icom_set_func, .get_func = icom_get_func, .set_parm = icom_set_parm, @@ -271,37 +274,3 @@ const struct rig_caps ic7410_caps = .send_morse = icom_send_morse, }; - -int ic7410_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) -{ - unsigned char cmdbuf[MAXFRAMELEN]; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (level) - { - case RIG_LEVEL_VOXDELAY: - cmdbuf[0] = 0x75; - return icom_set_level_raw(rig, level, C_CTL_MEM, 0x05, 1, cmdbuf, 1, val); - - default: - return icom_set_level(rig, vfo, level, val); - } -} - -int ic7410_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) -{ - unsigned char cmdbuf[MAXFRAMELEN]; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (level) - { - case RIG_LEVEL_VOXDELAY: - cmdbuf[0] = 0x75; - return icom_get_level_raw(rig, level, C_CTL_MEM, 0x05, 1, cmdbuf, val); - - default: - return icom_get_level(rig, vfo, level, val); - } -} diff --git a/rigs/icom/ic7600.c b/rigs/icom/ic7600.c index 1b7add09..28ddd476 100644 --- a/rigs/icom/ic7600.c +++ b/rigs/icom/ic7600.c @@ -53,15 +53,6 @@ #define IC7600_ANTS (RIG_ANT_1|RIG_ANT_2) -struct cmdparams ic7600_extcmds[] = -{ - { {.s = RIG_PARM_BEEP}, CMD_PARAM_TYPE_PARM, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x00, 0x59}, CMD_DAT_BOL, 1 }, - { {.s = RIG_PARM_BACKLIGHT}, CMD_PARAM_TYPE_PARM, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x00, 0x38}, CMD_DAT_LVL, 2 }, - { {.s = RIG_PARM_TIME}, CMD_PARAM_TYPE_PARM, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x00, 0x54}, CMD_DAT_TIM, 2 }, - { {.s = RIG_LEVEL_VOXDELAY}, CMD_PARAM_TYPE_LEVEL, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x67}, CMD_DAT_INT, 1 }, - { {.s = RIG_PARM_NONE} } -}; - /* * Measurement by Roeland, PA3MET */ @@ -129,10 +120,21 @@ struct cmdparams ic7600_extcmds[] = { 241, 25.0f } \ } } +struct cmdparams ic7600_extcmds[] = +{ + { {.s = RIG_PARM_BEEP}, CMD_PARAM_TYPE_PARM, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x00, 0x59}, CMD_DAT_BOL, 1 }, + { {.s = RIG_PARM_BACKLIGHT}, CMD_PARAM_TYPE_PARM, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x00, 0x38}, CMD_DAT_LVL, 2 }, + { {.s = RIG_PARM_TIME}, CMD_PARAM_TYPE_PARM, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x00, 0x54}, CMD_DAT_TIM, 2 }, + { {.s = RIG_LEVEL_VOXDELAY}, CMD_PARAM_TYPE_LEVEL, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x67}, CMD_DAT_INT, 1 }, + { { 0 } } +}; + +int ic7600_ext_tokens[] = { + TOK_DRIVE_GAIN, TOK_BACKEND_NONE +}; + /* * IC-7600 rig capabilities. - * - * TODO: complete command set (esp. the $1A bunch!) and testing.. */ static const struct icom_priv_caps ic7600_priv_caps = { @@ -152,15 +154,6 @@ static const struct icom_priv_caps ic7600_priv_caps = .extcmds = ic7600_extcmds, /* Custom op parameters */ }; -const struct confparams ic7600_ext_levels[] = -{ - { - TOK_DRIVE_GAIN, "drive_gain", "Drive gain", "Drive gain", - NULL, RIG_CONF_NUMERIC, { .n = { 0, 255, 1 } }, - }, - { RIG_CONF_END, NULL, } -}; - const struct rig_caps ic7600_caps = { RIG_MODEL(RIG_MODEL_IC7600), @@ -196,7 +189,10 @@ const struct rig_caps ic7600_caps = [LVL_CWPITCH] = { .min = { .i = 300 }, .max = { .i = 900 }, .step = { .i = 1 } }, }, .parm_gran = {}, - .extlevels = ic7600_ext_levels, + .ext_tokens = ic7600_ext_tokens, + .extfuncs = icom_ext_funcs, + .extlevels = icom_ext_levels, + .extparms = icom_ext_parms, .ctcss_list = common_ctcss_list, .dcs_list = NULL, .preamp = { 10, 20, RIG_DBLST_END, }, /* FIXME: TBC */ diff --git a/rigs/icom/ic7700.c b/rigs/icom/ic7700.c index cd574d5d..f8c9fa9d 100644 --- a/rigs/icom/ic7700.c +++ b/rigs/icom/ic7700.c @@ -105,13 +105,18 @@ { 241, 15.0f } \ } } -int ic7700_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val); -int ic7700_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val); +struct cmdparams ic7700_extcmds[] = +{ + { {.s = RIG_LEVEL_VOXDELAY}, CMD_PARAM_TYPE_LEVEL, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x82}, CMD_DAT_INT, 1 }, + { { 0 } } +}; + +int ic7700_ext_tokens[] = { + TOK_DRIVE_GAIN, TOK_DIGI_SEL_FUNC, TOK_DIGI_SEL_LEVEL, TOK_BACKEND_NONE +}; /* * IC-7700 rig capabilities. - * - * TODO: complete command set (esp. the $1A bunch!) and testing.. */ static const struct icom_priv_caps ic7700_priv_caps = { @@ -129,23 +134,7 @@ static const struct icom_priv_caps ic7700_priv_caps = { .level = RIG_AGC_SLOW, .icom_level = 3 }, { .level = -1, .icom_level = 0 }, }, -}; - -const struct confparams ic7700_ext_levels[] = -{ - { - TOK_DRIVE_GAIN, "drive_gain", "Drive gain", "Drive gain", - NULL, RIG_CONF_NUMERIC, { .n = { 0, 255, 1 } }, - }, - { - TOK_DIGI_SEL_FUNC, "digi_sel", "DIGI-SEL enable", "DIGI-SEL enable", - NULL, RIG_CONF_CHECKBUTTON, { }, - }, - { - TOK_DIGI_SEL_LEVEL, "digi_sel_level", "DIGI-SEL level", "DIGI-SEL level", - NULL, RIG_CONF_NUMERIC, { .n = { 0, 255, 1 } }, - }, - { RIG_CONF_END, NULL, } + .extcmds = ic7700_extcmds, }; const struct rig_caps ic7700_caps = @@ -183,7 +172,7 @@ const struct rig_caps ic7700_caps = [LVL_CWPITCH] = { .min = { .i = 300 }, .max = { .i = 900 }, .step = { .i = 1 } }, }, .parm_gran = {}, - .extlevels = ic7700_ext_levels, + .ext_tokens = ic7700_ext_tokens, .ctcss_list = common_ctcss_list, .dcs_list = NULL, .preamp = { 10, 20, RIG_DBLST_END, }, /* FIXME: TBC */ @@ -293,8 +282,8 @@ const struct rig_caps ic7700_caps = .set_xit = icom_set_xit_new, .decode_event = icom_decode_event, - .set_level = ic7700_set_level, - .get_level = ic7700_get_level, + .set_level = icom_set_level, + .get_level = icom_get_level, .set_ext_level = icom_set_ext_level, .get_ext_level = icom_get_ext_level, .set_func = icom_set_func, @@ -323,39 +312,3 @@ const struct rig_caps ic7700_caps = .get_powerstat = icom_get_powerstat, .send_morse = icom_send_morse }; - -int ic7700_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) -{ - unsigned char cmdbuf[MAXFRAMELEN]; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (level) - { - case RIG_LEVEL_VOXDELAY: - cmdbuf[0] = 0x01; - cmdbuf[1] = 0x82; - return icom_set_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, 1, val); - - default: - return icom_set_level(rig, vfo, level, val); - } -} - -int ic7700_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) -{ - unsigned char cmdbuf[MAXFRAMELEN]; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (level) - { - case RIG_LEVEL_VOXDELAY: - cmdbuf[0] = 0x01; - cmdbuf[1] = 0x82; - return icom_get_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, val); - - default: - return icom_get_level(rig, vfo, level, val); - } -} diff --git a/rigs/icom/ic7800.c b/rigs/icom/ic7800.c index 046d87f2..be9d82e3 100644 --- a/rigs/icom/ic7800.c +++ b/rigs/icom/ic7800.c @@ -108,10 +108,18 @@ int ic7800_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val); int ic7800_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val); +struct cmdparams ic7800_extcmds[] = +{ + { {.s = RIG_LEVEL_VOXDELAY}, CMD_PARAM_TYPE_LEVEL, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x83}, CMD_DAT_INT, 1 }, + { { 0 } } +}; + +int ic7800_ext_tokens[] = { + TOK_DRIVE_GAIN, TOK_DIGI_SEL_FUNC, TOK_DIGI_SEL_LEVEL, TOK_BACKEND_NONE +}; + /* * IC-7800 rig capabilities. - * - * TODO: complete command set (esp. the $1A bunch!) and testing.. */ static const struct icom_priv_caps ic7800_priv_caps = { @@ -129,23 +137,7 @@ static const struct icom_priv_caps ic7800_priv_caps = { .level = RIG_AGC_SLOW, .icom_level = 3 }, { .level = -1, .icom_level = 0 }, }, -}; - -const struct confparams ic7800_ext_levels[] = -{ - { - TOK_DRIVE_GAIN, "drive_gain", "Drive gain", "Drive gain", - NULL, RIG_CONF_NUMERIC, { .n = { 0, 255, 1 } }, - }, - { - TOK_DIGI_SEL_FUNC, "digi_sel", "DIGI-SEL enable", "DIGI-SEL enable", - NULL, RIG_CONF_CHECKBUTTON, { }, - }, - { - TOK_DIGI_SEL_LEVEL, "digi_sel_level", "DIGI-SEL level", "DIGI-SEL level", - NULL, RIG_CONF_NUMERIC, { .n = { 0, 255, 1 } }, - }, - { RIG_CONF_END, NULL, } + .extcmds = ic7800_extcmds, }; const struct rig_caps ic7800_caps = @@ -183,7 +175,7 @@ const struct rig_caps ic7800_caps = [LVL_CWPITCH] = { .min = { .i = 300 }, .max = { .i = 900 }, .step = { .i = 1 } }, }, .parm_gran = {}, - .extlevels = ic7800_ext_levels, + .ext_tokens = ic7800_ext_tokens, .ctcss_list = common_ctcss_list, .dcs_list = NULL, .preamp = { 10, 20, RIG_DBLST_END, }, /* FIXME: TBC */ @@ -331,8 +323,6 @@ const struct rig_caps ic7800_caps = */ int ic7800_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) { - unsigned char cmdbuf[MAXFRAMELEN]; - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); switch (level) @@ -356,12 +346,6 @@ int ic7800_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) } return icom_set_level(rig, vfo, level, val); - - case RIG_LEVEL_VOXDELAY: - cmdbuf[0] = 0x01; - cmdbuf[1] = 0x83; - return icom_set_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, 1, val); - default: return icom_set_level(rig, vfo, level, val); } @@ -372,7 +356,6 @@ int ic7800_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) */ int ic7800_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) { - unsigned char cmdbuf[MAXFRAMELEN]; int retval; rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); @@ -394,14 +377,7 @@ int ic7800_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) { val->i = rig->state.attenuator[val->i - 1]; } - break; - - case RIG_LEVEL_VOXDELAY: - cmdbuf[0] = 0x01; - cmdbuf[1] = 0x83; - return icom_get_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, val); - default: return icom_get_level(rig, vfo, level, val); } diff --git a/rigs/icom/ic785x.c b/rigs/icom/ic785x.c index bf7988ab..70bf71c7 100644 --- a/rigs/icom/ic785x.c +++ b/rigs/icom/ic785x.c @@ -113,10 +113,19 @@ extern int ic7800_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val); int ic785x_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val); int ic785x_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val); +struct cmdparams ic785x_extcmds[] = +{ + { {.s = RIG_LEVEL_VOXDELAY}, CMD_PARAM_TYPE_LEVEL, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x03, 0x09}, CMD_DAT_INT, 1 }, + { { 0 } } +}; + + +int ic785x_ext_tokens[] = { + TOK_DRIVE_GAIN, TOK_DIGI_SEL_FUNC, TOK_DIGI_SEL_LEVEL, TOK_BACKEND_NONE +}; + /* * IC-785x rig capabilities. - * - * TODO: complete command set (esp. the $1A bunch!) and testing.. */ static struct icom_priv_caps ic785x_priv_caps = { @@ -134,23 +143,7 @@ static struct icom_priv_caps ic785x_priv_caps = { .level = RIG_AGC_SLOW, .icom_level = 3 }, { .level = -1, .icom_level = 0 }, }, -}; - -const struct confparams ic785x_ext_levels[] = -{ - { - TOK_DRIVE_GAIN, "drive_gain", "Drive gain", "Drive gain", - NULL, RIG_CONF_NUMERIC, { .n = { 0, 255, 1 } }, - }, - { - TOK_DIGI_SEL_FUNC, "digi_sel", "DIGI-SEL enable", "DIGI-SEL enable", - NULL, RIG_CONF_CHECKBUTTON, { }, - }, - { - TOK_DIGI_SEL_LEVEL, "digi_sel_level", "DIGI-SEL level", "DIGI-SEL level", - NULL, RIG_CONF_NUMERIC, { .n = { 0, 255, 1 } }, - }, - { RIG_CONF_END, NULL, } + .extcmds = ic785x_extcmds, }; const struct rig_caps ic785x_caps = @@ -188,7 +181,7 @@ const struct rig_caps ic785x_caps = [LVL_CWPITCH] = { .min = { .i = 300 }, .max = { .i = 900 }, .step = { .i = 1 } }, }, .parm_gran = {}, - .extlevels = ic785x_ext_levels, + .ext_tokens = ic785x_ext_tokens, .ctcss_list = common_ctcss_list, .dcs_list = NULL, .preamp = { 10, 20, RIG_DBLST_END, }, /* FIXME: TBC */ @@ -332,36 +325,10 @@ const struct rig_caps ic785x_caps = int ic785x_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) { - unsigned char cmdbuf[MAXFRAMELEN]; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (level) - { - case RIG_LEVEL_VOXDELAY: - cmdbuf[0] = 0x03; - cmdbuf[1] = 0x09; - return icom_set_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, 1, val); - - default: - return ic7800_set_level(rig, vfo, level, val); - } + return ic7800_set_level(rig, vfo, level, val); } int ic785x_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) { - unsigned char cmdbuf[MAXFRAMELEN]; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (level) - { - case RIG_LEVEL_VOXDELAY: - cmdbuf[0] = 0x03; - cmdbuf[1] = 0x09; - return icom_get_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, val); - - default: - return ic7800_get_level(rig, vfo, level, val); - } + return ic7800_get_level(rig, vfo, level, val); } diff --git a/rigs/icom/icom.c b/rigs/icom/icom.c index 0cad1438..d4783dd7 100644 --- a/rigs/icom/icom.c +++ b/rigs/icom/icom.c @@ -422,7 +422,8 @@ const struct confparams icom_cfg_params[] = */ const struct confparams icom_ext_funcs[] = { - {} + { TOK_DIGI_SEL_FUNC, "digi_sel", "DIGI-SEL enable", "", "", RIG_CONF_CHECKBUTTON, {} }, + { RIG_CONF_END, NULL, } }; ... [truncated message content] |