[Hamlib-commits] Hamlib -- Ham radio control libraries branch master updated. bbc8e00074fbcb43b77ba
Library to control radio transceivers and receivers
Brought to you by:
n0nb
From: Michael B. <mdb...@us...> - 2021-04-04 17:50:47
|
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 bbc8e00074fbcb43b77badeba8028e1800e58bdb (commit) via d312945729bda1a01f910559276555bef9918397 (commit) via bdb4ff5b45f71c6910420cd7b15f779db363cdcb (commit) via 93f0cc78e99eb1ba6b72b013b9fb89f9fb587a16 (commit) via e06cce4f0d132f656f23189e2274d3f5bca44279 (commit) via b9faf48a176f4badcb253f9186e06006c21c598e (commit) via a42142312f9f0e344b4b14722edb662507199e98 (commit) via fb9c1eac3882f6af916e38616d8342f783222daf (commit) via 92e40eca30b99e2dff25b957c6a582908b948f95 (commit) from 35d945e002f475edb72421aef6c85afb100fbb7e (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 bbc8e00074fbcb43b77badeba8028e1800e58bdb Author: Mike Black W9MDB <mdb...@ya...> Date: Sun Apr 4 12:50:07 2021 -0500 astyle files diff --git a/rigs/dummy/flrig.c b/rigs/dummy/flrig.c index 340b7cf1..a63c94c9 100644 --- a/rigs/dummy/flrig.c +++ b/rigs/dummy/flrig.c @@ -588,8 +588,8 @@ static int flrig_transaction(RIG *rig, char *cmd, char *cmd_arg, char *value, read_transaction(rig, xml, sizeof(xml)); // this might time out -- that's OK - // we get an uknown response if function does not exist - if (strstr(xml,"unknown")) RETURNFUNC(RIG_ENAVAIL); + // we get an uknown response if function does not exist + if (strstr(xml, "unknown")) { RETURNFUNC(RIG_ENAVAIL); } if (value) { @@ -834,37 +834,39 @@ static int flrig_open(RIG *rig) } else { - priv->has_get_modeA = 1; + priv->has_get_modeA = 1; rig_debug(RIG_DEBUG_VERBOSE, "%s: getmodeA is available\n", __func__); } /* see if set_vfoA_fast is available */ freq_t freq; retval = flrig_get_freq(rig, RIG_VFO_CURR, &freq); + if (retval != RIG_OK) { rig_debug(RIG_DEBUG_ERR, "%s: flrig_get_freq not working!!\n", __func__); - RETURNFUNC(RIG_EPROTO); + RETURNFUNC(RIG_EPROTO); } - + value_t val; val.i = 1; // we'll try fast and if it fails turn it off priv->has_set_freq_fast = 1; priv->has_set_ptt_fast = 1; // they both will be there - rig_set_ext_parm(rig, TOK_FLRIG_FAST_SET_FREQ, val); - rig_set_ext_parm(rig, TOK_FLRIG_FAST_SET_PTT, val); + rig_set_ext_parm(rig, TOK_FLRIG_FAST_SET_FREQ, val); + rig_set_ext_parm(rig, TOK_FLRIG_FAST_SET_PTT, val); retval = flrig_set_freq(rig, RIG_VFO_CURR, freq); if (retval == RIG_ENAVAIL) // must not have it { - val.i = 0; - rig_set_ext_parm(rig, TOK_FLRIG_FAST_SET_FREQ, val); - rig_set_ext_parm(rig, TOK_FLRIG_FAST_SET_PTT, val); + val.i = 0; + rig_set_ext_parm(rig, TOK_FLRIG_FAST_SET_FREQ, val); + rig_set_ext_parm(rig, TOK_FLRIG_FAST_SET_PTT, val); priv->has_set_freq_fast = 0; priv->has_set_ptt_fast = 0; // they both will not be there - rig_debug(RIG_DEBUG_VERBOSE, "%s: set_vfoA_fast/ptt is not available\n", __func__); + rig_debug(RIG_DEBUG_VERBOSE, "%s: set_vfoA_fast/ptt is not available\n", + __func__); } else { @@ -874,7 +876,7 @@ static int flrig_open(RIG *rig) /* see if get_bwA is available */ retval = flrig_transaction(rig, "rig.get_bwA", NULL, value, sizeof(value)); - if (retval == RIG_ENAVAIL) // must not have it + if (retval == RIG_ENAVAIL) // must not have it { priv->has_get_bwA = 0; rig_debug(RIG_DEBUG_VERBOSE, "%s: get_bwA is available=%s\n", __func__, @@ -1036,7 +1038,7 @@ static int flrig_open(RIG *rig) rig_debug(RIG_DEBUG_VERBOSE, "%s: hamlib modes=%s\n", __func__, value); - + RETURNFUNC(retval); } @@ -1197,17 +1199,22 @@ static int flrig_set_freq(RIG *rig, vfo_t vfo, freq_t freq) value_t val; rig_get_ext_parm(rig, TOK_FLRIG_FAST_SET_FREQ, &val); rig_debug(RIG_DEBUG_VERBOSE, "%s: fast_set_freq=%d\n", __func__, val.i); + if (vfo == RIG_VFO_A) { cmd = "rig.set_vfoA"; - if (val.i) cmd = "rig.set_vfoA_fast"; + + if (val.i) { cmd = "rig.set_vfoA_fast"; } + rig_debug(RIG_DEBUG_TRACE, "%s %.0f\n", cmd, freq); priv->curr_freqA = freq; } else { cmd = "rig.set_vfoB"; - if (val.i) cmd = "rig.set_vfoB_fast"; + + if (val.i) { cmd = "rig.set_vfoB_fast"; } + rig_debug(RIG_DEBUG_TRACE, "%s %.0f\n", cmd, freq); priv->curr_freqB = freq; } @@ -2200,10 +2207,14 @@ static int flrig_set_ext_parm(RIG *rig, token_t token, value_t val) { case TOK_FLRIG_FAST_SET_FREQ: case TOK_FLRIG_FAST_SET_PTT: - if (val.i && !priv->has_set_freq_fast) { - rig_debug(RIG_DEBUG_ERR, "%s: FLRig version 1.3.54.14 or higher needed to support fast functions\n",__func__); - RETURNFUNC(-RIG_EINVAL); - } + if (val.i && !priv->has_set_freq_fast) + { + rig_debug(RIG_DEBUG_ERR, + "%s: FLRig version 1.3.54.14 or higher needed to support fast functions\n", + __func__); + RETURNFUNC(-RIG_EINVAL); + } + break; default: diff --git a/rigs/dummy/netrigctl.c b/rigs/dummy/netrigctl.c index 575fa567..08758db6 100644 --- a/rigs/dummy/netrigctl.c +++ b/rigs/dummy/netrigctl.c @@ -585,7 +585,8 @@ static int netrigctl_open(RIG *rig) else if (strcmp(setting, "targetable_vfo") == 0) { rig->caps->targetable_vfo = strtol(value, NULL, 0); - rig_debug(RIG_DEBUG_ERR, "%s: targetable_vfo=0x%2x\n", __func__, rig->caps->targetable_vfo); + rig_debug(RIG_DEBUG_ERR, "%s: targetable_vfo=0x%2x\n", __func__, + rig->caps->targetable_vfo); } else if (strcmp(setting, "has_set_vfo") == 0) { diff --git a/rigs/kenwood/kenwood.c b/rigs/kenwood/kenwood.c index 6655f965..4e219be6 100644 --- a/rigs/kenwood/kenwood.c +++ b/rigs/kenwood/kenwood.c @@ -333,8 +333,8 @@ transaction_write: // We may eventually want to verify PTT with rig_get_ptt instead if (retval == RIG_OK && strncmp(cmdstr, "RX", 2) == 0) { goto transaction_quit; } - // Malachite SDR cannot send ID after FA - if (priv->no_id) RETURNFUNC(RIG_OK); + // Malachite SDR cannot send ID after FA + if (priv->no_id) { RETURNFUNC(RIG_OK); } if (!datasize) { @@ -2810,6 +2810,7 @@ int kenwood_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) retval = kenwood_get_power_minmax(rig, &power_now, &power_min, &power_max, 1); if (retval != RIG_OK) { RETURNFUNC(retval); } + power_min = 0; // our return scale is 0-max to match the input scale val->f = (power_now - power_min) / (float)(power_max - power_min); RETURNFUNC(RIG_OK); @@ -3764,7 +3765,7 @@ int kenwood_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt) int retval = kenwood_transaction(rig, ptt_cmd, NULL, 0); - if (ptt == RIG_PTT_OFF) hl_usleep(100*1000); // a little time for PTT to turn off + if (ptt == RIG_PTT_OFF) { hl_usleep(100 * 1000); } // a little time for PTT to turn off RETURNFUNC(retval); } diff --git a/rigs/kenwood/ts480.c b/rigs/kenwood/ts480.c index 220e734f..bacb8fdf 100644 --- a/rigs/kenwood/ts480.c +++ b/rigs/kenwood/ts480.c @@ -918,7 +918,8 @@ const struct rig_caps ts890s_caps = const struct confparams malachite_cfg_parms[] = { - { // the Malachite SDR cannot handle sending ID; after FA; commands + { + // the Malachite SDR cannot handle sending ID; after FA; commands TOK_NO_ID, "no_id", "No ID", "If true do not send ID; with set commands", NULL, RIG_CONF_CHECKBUTTON, { } }, @@ -927,12 +928,13 @@ const struct confparams malachite_cfg_parms[] = int malachite_init(RIG *rig) { - + struct kenwood_priv_data *priv = rig->state.priv; int retval; retval = kenwood_init(rig); - if (retval != RIG_OK) RETURNFUNC(retval); + + if (retval != RIG_OK) { RETURNFUNC(retval); } priv->no_id = 1; // the Malchite doesn't like the ID; verify cmd diff --git a/rigs/yaesu/ft857.c b/rigs/yaesu/ft857.c index 3b0768ef..12df2a91 100644 --- a/rigs/yaesu/ft857.c +++ b/rigs/yaesu/ft857.c @@ -1016,7 +1016,8 @@ int ft857_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt) } n = ft857_send_cmd(rig, index); - if (ptt == RIG_PTT_OFF) hl_usleep(200*1000); // FT857 takes a bit to come out of PTT + + if (ptt == RIG_PTT_OFF) { hl_usleep(200 * 1000); } // FT857 takes a bit to come out of PTT rig_force_cache_timeout(&((struct ft857_priv_data *) rig->state.priv)->tx_status_tv); diff --git a/src/iofunc.c b/src/iofunc.c index c7008f5e..b83cabbd 100644 --- a/src/iofunc.c +++ b/src/iofunc.c @@ -64,7 +64,7 @@ int HAMLIB_API port_open(hamlib_port_t *p) { int status; int want_state_delay = 0; - + ENTERFUNC; p->fd = -1; @@ -275,7 +275,7 @@ static ssize_t port_read(hamlib_port_t *p, void *buf, size_t count) } //RETURNFUNC(ret); // too verbose - return ret; + return ret; } else if (p->type.rig == RIG_PORT_NETWORK || p->type.rig == RIG_PORT_UDP_NETWORK) diff --git a/src/rig.c b/src/rig.c index da09e9b0..40174d54 100644 --- a/src/rig.c +++ b/src/rig.c @@ -3605,11 +3605,11 @@ int HAMLIB_API rig_set_split_freq(RIG *rig, vfo_t vfo, freq_t tx_freq) do { - // doing get_freq seems to break on some rigs that can't read freq immediately after set + // doing get_freq seems to break on some rigs that can't read freq immediately after set if (caps->set_split_freq) { retcode = caps->set_split_freq(rig, vfo, tx_freq); - //rig_get_freq(rig, vfo, &tfreq); + //rig_get_freq(rig, vfo, &tfreq); } else { @@ -4039,7 +4039,9 @@ int HAMLIB_API rig_set_split_freq_mode(RIG *rig, // in split mode we alwasy use VFOB // in the future we may start using RIG_VFO_TX and let the backend figure out what VFO to use vfo = RIG_VFO_B; // in split mode we always use VFOB - rig_debug(RIG_DEBUG_VERBOSE, "%s: vfo=%s, tx_freq=%.0f, tx_mode=%s, tx_width=%d\n", __func__, rig_strvfo(vfo), tx_freq, rig_strrmode(tx_mode), (int)tx_width); + rig_debug(RIG_DEBUG_VERBOSE, + "%s: vfo=%s, tx_freq=%.0f, tx_mode=%s, tx_width=%d\n", __func__, + rig_strvfo(vfo), tx_freq, rig_strrmode(tx_mode), (int)tx_width); if (caps->set_split_freq_mode) { @@ -6000,7 +6002,8 @@ int HAMLIB_API rig_get_vfo_info(RIG *rig, vfo_t vfo, freq_t *freq, if (retval != RIG_OK) { RETURNFUNC(retval); } - if ((vfo == RIG_VFO_B || vfo == RIG_VFO_SUB) && (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE)) + if ((vfo == RIG_VFO_B || vfo == RIG_VFO_SUB) + && (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE)) { retval = rig_get_mode(rig, vfo, mode, width); commit d312945729bda1a01f910559276555bef9918397 Author: Mike Black W9MDB <mdb...@ya...> Date: Sun Apr 4 11:54:35 2021 -0500 Added Malachite DSP -- emulates TS480 but needed to avoid sending ID; command https://github.com/Hamlib/Hamlib/issues/645 diff --git a/NEWS b/NEWS index b0d16aa5..ca7ea694 100644 --- a/NEWS +++ b/NEWS @@ -7,7 +7,8 @@ Copyright (C) 2000-2021 Michael Black W9MDB, and others Please send Hamlib bug reports to ham...@li... Version 4.2 - * 2021-03-?? -- anticipated release date + * 2021-04-?? -- anticipated release date + * Added Malachite SDR * Frequency and PTT are now validated -- may solve some random problems ** where freq and ptt get stuck or not changed * Major rework for PRM80 diff --git a/include/hamlib/riglist.h b/include/hamlib/riglist.h index 6161bc05..a044d8c4 100644 --- a/include/hamlib/riglist.h +++ b/include/hamlib/riglist.h @@ -176,7 +176,7 @@ #define RIG_MODEL_PT8000A RIG_MAKE_MODEL(RIG_KENWOOD, 46) #define RIG_MODEL_K4 RIG_MAKE_MODEL(RIG_KENWOOD, 47) #define RIG_MODEL_POWERSDR RIG_MAKE_MODEL(RIG_KENWOOD, 48) - +#define RIG_MODEL_MALACHITE RIG_MAKE_MODEL(RIG_KENWOOD, 49) /* * Icom diff --git a/rigs/kenwood/kenwood.c b/rigs/kenwood/kenwood.c index b98b6e48..6655f965 100644 --- a/rigs/kenwood/kenwood.c +++ b/rigs/kenwood/kenwood.c @@ -202,6 +202,10 @@ const struct confparams kenwood_cfg_params[] = TOK_RIT, "rit", "RIT", "RIT", NULL, RIG_CONF_CHECKBUTTON, { } }, + { + TOK_NO_ID, "no_id", "No ID", "If true do not send ID; with set commands", + NULL, RIG_CONF_CHECKBUTTON, { } + }, { RIG_CONF_END, NULL, } }; @@ -329,6 +333,9 @@ transaction_write: // We may eventually want to verify PTT with rig_get_ptt instead if (retval == RIG_OK && strncmp(cmdstr, "RX", 2) == 0) { goto transaction_quit; } + // Malachite SDR cannot send ID after FA + if (priv->no_id) RETURNFUNC(RIG_OK); + if (!datasize) { rig->state.hold_decode = 0; @@ -4497,6 +4504,7 @@ int kenwood_set_channel(RIG *rig, vfo_t vfo, const channel_t *chan) int kenwood_set_ext_parm(RIG *rig, token_t token, value_t val) { + struct kenwood_priv_data *priv = rig->state.priv; char buf[4]; rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); @@ -4517,6 +4525,10 @@ int kenwood_set_ext_parm(RIG *rig, token_t token, value_t val) case TOK_RIT: snprintf(buf, sizeof(buf), "RT%c", (val.i == 0) ? '0' : '1'); RETURNFUNC(kenwood_transaction(rig, buf, NULL, 0)); + + case TOK_NO_ID: + priv->no_id = val.i; + RETURNFUNC(RIG_OK); } RETURNFUNC(-RIG_EINVAL); @@ -4833,6 +4845,7 @@ DECLARE_INITRIG_BACKEND(kenwood) rig_register(&pihpsdr_caps); rig_register(&ts890s_caps); rig_register(&pt8000a_caps); + rig_register(&malachite_caps); RETURNFUNC(RIG_OK); } diff --git a/rigs/kenwood/kenwood.h b/rigs/kenwood/kenwood.h index 9c30d27b..1aa8f855 100644 --- a/rigs/kenwood/kenwood.h +++ b/rigs/kenwood/kenwood.h @@ -28,7 +28,7 @@ #include "token.h" #include "misc.h" -#define BACKEND_VER "20210402" +#define BACKEND_VER "20210404" #define EOM_KEN ';' #define EOM_TH '\r' @@ -45,6 +45,7 @@ #define TOK_FINE TOKEN_BACKEND(2) #define TOK_XIT TOKEN_BACKEND(3) #define TOK_RIT TOKEN_BACKEND(4) +#define TOK_NO_ID TOKEN_BACKEND(5) /* Token structure assigned to .cfgparams in rig_caps */ extern const struct confparams kenwood_cfg_params[]; @@ -142,6 +143,7 @@ struct kenwood_priv_data int is_k4; int is_k4d; int is_k4hd; + int no_id; // if true will not send ID; with every set command }; @@ -274,6 +276,7 @@ extern const struct rig_caps powersdr_caps; extern const struct rig_caps pihpsdr_caps; extern const struct rig_caps ts890s_caps; extern const struct rig_caps pt8000a_caps; +extern const struct rig_caps malachite_caps; /* use when not interested in the answer, but want to check its len */ static int inline kenwood_simple_transaction(RIG *rig, const char *cmd, diff --git a/rigs/kenwood/ts480.c b/rigs/kenwood/ts480.c index ab33c845..220e734f 100644 --- a/rigs/kenwood/ts480.c +++ b/rigs/kenwood/ts480.c @@ -48,7 +48,7 @@ * kenwood_ts480_get_info * Assumes rig!=NULL */ -static const char * +const char * kenwood_ts480_get_info(RIG *rig) { char firmbuf[50]; @@ -916,3 +916,180 @@ const struct rig_caps ts890s_caps = .get_func = kenwood_get_func, }; +const struct confparams malachite_cfg_parms[] = +{ + { // the Malachite SDR cannot handle sending ID; after FA; commands + TOK_NO_ID, "no_id", "No ID", "If true do not send ID; with set commands", + NULL, RIG_CONF_CHECKBUTTON, { } + }, + { RIG_CONF_END, NULL, } +}; + +int malachite_init(RIG *rig) +{ + + struct kenwood_priv_data *priv = rig->state.priv; + int retval; + + retval = kenwood_init(rig); + if (retval != RIG_OK) RETURNFUNC(retval); + + priv->no_id = 1; // the Malchite doesn't like the ID; verify cmd + + return RIG_OK; +} + +/* + * Malachite SDR rig capabilities. + * Notice that some rigs share the same functions. + * Also this struct is READONLY! + */ +const struct rig_caps malachite_caps = +{ + RIG_MODEL(RIG_MODEL_MALACHITE), + .model_name = "DSP", + .mfg_name = "Malachite", + .version = BACKEND_VER ".0", + .mfg_name = "Malachite", + .version = BACKEND_VER ".0", + .copyright = "LGPL", + .status = RIG_STATUS_STABLE, + .rig_type = RIG_TYPE_TRANSCEIVER, + .ptt_type = RIG_PTT_RIG_MICDATA, + .dcd_type = RIG_DCD_RIG, + .port_type = RIG_PORT_SERIAL, + .serial_rate_min = 4800, + .serial_rate_max = 115200, + .serial_data_bits = 8, + .serial_stop_bits = 1, + .serial_parity = RIG_PARITY_NONE, + .serial_handshake = RIG_HANDSHAKE_NONE, + .write_delay = 0, + .post_write_delay = 0, + .timeout = 200, + .retry = 10, + .preamp = {12, RIG_DBLST_END,}, + .attenuator = {12, RIG_DBLST_END,}, + .max_rit = kHz(9.99), + .max_xit = kHz(9.99), + .max_ifshift = Hz(0), + .targetable_vfo = RIG_TARGETABLE_FREQ, + .transceive = RIG_TRN_RIG, + + + .rx_range_list1 = { + {kHz(100), Hz(59999999), TS480_ALL_MODES, -1, -1, TS480_VFO}, + RIG_FRNG_END, + }, /*!< Receive frequency range list for ITU region 1 */ + .tx_range_list1 = { + {kHz(1810), kHz(1850), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO}, /* 100W class */ + {kHz(1810), kHz(1850), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO}, /* 25W class */ + {kHz(3500), kHz(3800), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO}, + {kHz(3500), kHz(3800), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO}, + {MHz(7), kHz(7200), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO}, + {MHz(7), kHz(7200), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO}, + {kHz(10100), kHz(10150), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO}, + {kHz(10100), kHz(10150), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO}, + {MHz(14), kHz(14350), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO}, + {MHz(14), kHz(14350), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO}, + {kHz(18068), kHz(18168), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO}, + {kHz(18068), kHz(18168), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO}, + {MHz(21), kHz(21450), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO}, + {MHz(21), kHz(21450), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO}, + {kHz(24890), kHz(24990), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO}, + {kHz(24890), kHz(24990), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO}, + {MHz(28), kHz(29700), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO}, + {MHz(28), kHz(29700), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO}, + {MHz(50), kHz(52000), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO}, + {MHz(50), kHz(52000), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO}, + RIG_FRNG_END, + }, /*!< Transmit frequency range list for ITU region 1 */ + .rx_range_list2 = { + {kHz(100), Hz(59999999), TS480_ALL_MODES, -1, -1, TS480_VFO}, + RIG_FRNG_END, + }, /*!< Receive frequency range list for ITU region 2 */ + .tx_range_list2 = { + {kHz(1800), MHz(2) - 1, TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO}, /* 100W class */ + {kHz(1800), MHz(2) - 1, TS480_AM_TX_MODES, 5000, 25000, TS480_VFO}, /* 25W class */ + {kHz(3500), MHz(4) - 1, TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO}, + {kHz(3500), MHz(4) - 1, TS480_AM_TX_MODES, 5000, 25000, TS480_VFO}, + {kHz(5250), kHz(5450), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO}, + {kHz(5250), kHz(5450), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO}, + {MHz(7), kHz(7300), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO}, + {MHz(7), kHz(7300), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO}, + {kHz(10100), kHz(10150), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO}, + {MHz(14), kHz(14350), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO}, + {kHz(18068), kHz(18168), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO}, + {kHz(18068), kHz(18168), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO}, + {MHz(21), kHz(21450), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO}, + {MHz(21), kHz(21450), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO}, + {kHz(24890), kHz(24990), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO}, + {kHz(24890), kHz(24990), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO}, + {MHz(28), kHz(29700), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO}, + {MHz(28), kHz(29700), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO}, + {MHz(50), kHz(52000), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO}, + {MHz(50), kHz(52000), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO}, + RIG_FRNG_END, + }, /*!< Transmit frequency range list for ITU region 2 */ + .tuning_steps = { + {TS480_ALL_MODES, kHz(1)}, + {TS480_ALL_MODES, Hz(2500)}, + {TS480_ALL_MODES, kHz(5)}, + {TS480_ALL_MODES, Hz(6250)}, + {TS480_ALL_MODES, kHz(10)}, + {TS480_ALL_MODES, Hz(12500)}, + {TS480_ALL_MODES, kHz(15)}, + {TS480_ALL_MODES, kHz(20)}, + {TS480_ALL_MODES, kHz(25)}, + {TS480_ALL_MODES, kHz(30)}, + {TS480_ALL_MODES, kHz(100)}, + {TS480_ALL_MODES, kHz(500)}, + {TS480_ALL_MODES, MHz(1)}, + {TS480_ALL_MODES, 0}, /* any tuning step */ + RIG_TS_END, + }, + /* mode/filter list, remember: order matters! */ + .filters = { + {RIG_MODE_SSB, kHz(2.4)}, + {RIG_MODE_CW, Hz(200)}, + {RIG_MODE_RTTY, Hz(500)}, + {RIG_MODE_AM, kHz(9)}, + {RIG_MODE_FM, kHz(14)}, + RIG_FLT_END, + }, + .priv = (void *)& ts480_priv_caps, + .rig_init = malachite_init, + .rig_open = kenwood_open, + .rig_cleanup = kenwood_cleanup, + .set_freq = kenwood_set_freq, + .get_freq = kenwood_get_freq, + .set_rit = kenwood_set_rit, /* FIXME should this switch to rit mode or just set the frequency? */ + .get_rit = kenwood_get_rit, + .set_xit = kenwood_set_xit, /* FIXME should this switch to xit mode or just set the frequency? */ + .get_xit = kenwood_get_xit, + .set_mode = kenwood_set_mode, + .get_mode = kenwood_get_mode, + .set_vfo = kenwood_set_vfo, + .get_vfo = kenwood_get_vfo_if, + .set_split_vfo = kenwood_set_split_vfo, + .get_split_vfo = kenwood_get_split_vfo_if, + .get_ptt = kenwood_get_ptt, + .set_ptt = kenwood_set_ptt, + .get_dcd = kenwood_get_dcd, + .set_powerstat = kenwood_set_powerstat, + .get_powerstat = kenwood_get_powerstat, + .get_info = kenwood_ts480_get_info, + .reset = kenwood_reset, + .set_ant = kenwood_set_ant, + .get_ant = kenwood_get_ant, + .scan = kenwood_scan, /* not working, invalid arguments using rigctl; kenwood_scan does only support on/off and not tone and CTCSS scan */ + .has_set_level = TS480_LEVEL_ALL, + .has_get_level = TS480_LEVEL_ALL, + .set_level = kenwood_ts480_set_level, + .get_level = kenwood_ts480_get_level, + .has_get_func = TS480_FUNC_ALL, + .has_set_func = TS480_FUNC_ALL, + .set_func = kenwood_set_func, + .get_func = kenwood_get_func, +}; + commit bdb4ff5b45f71c6910420cd7b15f779db363cdcb Author: Mike Black W9MDB <mdb...@ya...> Date: Sun Apr 4 08:07:55 2021 -0500 Update VFOs.txt diff --git a/VFOs.txt b/VFOs.txt index 0e55edfe..014bdc22 100644 --- a/VFOs.txt +++ b/VFOs.txt @@ -1,7 +1,10 @@ VFO Abstraction -2021-03-30 +2021-04-04 Mike Black W9MDB +RX -- The default receive -- we always use RX=VFOA -- we do not support reverse split as of 2021-04-04 +TX -- The default transmit -- based on mode could be VFOA, or if in split/satellite VFOB or Sub + Main_A RIG_VFO_A RIG_VFO_MAIN @@ -16,6 +19,7 @@ Sub_A Sub_B RIG_VFO_SUB_B -- unknown use for this so far but has set/get functions +# Note the IC-910 introduced a 3rd VFO Main_C RIG_VFO_C -- - unknown use for this so far but has set/get functions RIG_VFO_MAIN_C -- - unknown use for this so far but has set/get functions commit 93f0cc78e99eb1ba6b72b013b9fb89f9fb587a16 Author: Mike Black W9MDB <mdb...@ya...> Date: Sat Apr 3 23:45:49 2021 -0500 Fix flrig.c ordering of statement to prevent warning message diff --git a/rigs/dummy/flrig.c b/rigs/dummy/flrig.c index 79a803c1..340b7cf1 100644 --- a/rigs/dummy/flrig.c +++ b/rigs/dummy/flrig.c @@ -850,10 +850,10 @@ static int flrig_open(RIG *rig) value_t val; val.i = 1; // we'll try fast and if it fails turn it off - rig_set_ext_parm(rig, TOK_FLRIG_FAST_SET_FREQ, val); - rig_set_ext_parm(rig, TOK_FLRIG_FAST_SET_PTT, val); priv->has_set_freq_fast = 1; priv->has_set_ptt_fast = 1; // they both will be there + rig_set_ext_parm(rig, TOK_FLRIG_FAST_SET_FREQ, val); + rig_set_ext_parm(rig, TOK_FLRIG_FAST_SET_PTT, val); retval = flrig_set_freq(rig, RIG_VFO_CURR, freq); commit e06cce4f0d132f656f23189e2274d3f5bca44279 Author: Mike Black W9MDB <mdb...@ya...> Date: Sat Apr 3 23:41:22 2021 -0500 Fix FLRig initial check of fast modes to avoid setting freq to zero diff --git a/rigs/dummy/flrig.c b/rigs/dummy/flrig.c index bb2a469a..79a803c1 100644 --- a/rigs/dummy/flrig.c +++ b/rigs/dummy/flrig.c @@ -839,11 +839,26 @@ static int flrig_open(RIG *rig) } /* see if set_vfoA_fast is available */ - retval = flrig_transaction(rig, "rig.set_vfoA_fast", NULL, NULL, 0); + freq_t freq; + retval = flrig_get_freq(rig, RIG_VFO_CURR, &freq); + if (retval != RIG_OK) + { + rig_debug(RIG_DEBUG_ERR, "%s: flrig_get_freq not working!!\n", __func__); + RETURNFUNC(RIG_EPROTO); + } + + + value_t val; + val.i = 1; // we'll try fast and if it fails turn it off + rig_set_ext_parm(rig, TOK_FLRIG_FAST_SET_FREQ, val); + rig_set_ext_parm(rig, TOK_FLRIG_FAST_SET_PTT, val); + priv->has_set_freq_fast = 1; + priv->has_set_ptt_fast = 1; // they both will be there + + retval = flrig_set_freq(rig, RIG_VFO_CURR, freq); if (retval == RIG_ENAVAIL) // must not have it { - value_t val; val.i = 0; rig_set_ext_parm(rig, TOK_FLRIG_FAST_SET_FREQ, val); rig_set_ext_parm(rig, TOK_FLRIG_FAST_SET_PTT, val); @@ -853,12 +868,6 @@ static int flrig_open(RIG *rig) } else { - value_t val; - val.i = 1; - rig_set_ext_parm(rig, TOK_FLRIG_FAST_SET_FREQ, val); - rig_set_ext_parm(rig, TOK_FLRIG_FAST_SET_PTT, val); - priv->has_set_freq_fast = 1; - priv->has_set_ptt_fast = 1; // they both will be there rig_debug(RIG_DEBUG_VERBOSE, "%s: set_vfoA_fast/ptt is available\n", __func__); } commit b9faf48a176f4badcb253f9186e06006c21c598e Author: Mike Black W9MDB <mdb...@ya...> Date: Sat Apr 3 23:16:57 2021 -0500 Fix FLRig detection of fast modes Timing on ANAN 100 at 115200 is 136ms with freq confirm and 4ms in fast mode diff --git a/rigs/dummy/flrig.c b/rigs/dummy/flrig.c index 2b6a663c..bb2a469a 100644 --- a/rigs/dummy/flrig.c +++ b/rigs/dummy/flrig.c @@ -161,8 +161,6 @@ const struct rig_caps flrig_caps = .has_set_func = RIG_FUNC_NONE, .has_get_level = FLRIG_LEVELS, .has_set_level = RIG_LEVEL_SET(FLRIG_LEVELS), - .has_get_parm = RIG_PARM_NONE, - .has_set_parm = RIG_PARM_NONE, .has_get_parm = FLRIG_PARM, .has_set_parm = RIG_PARM_SET(FLRIG_PARM), @@ -841,7 +839,7 @@ static int flrig_open(RIG *rig) } /* see if set_vfoA_fast is available */ - retval = flrig_transaction(rig, "rig.set_vfoA_fast", NULL, value, sizeof(value)); + retval = flrig_transaction(rig, "rig.set_vfoA_fast", NULL, NULL, 0); if (retval == RIG_ENAVAIL) // must not have it { @@ -857,8 +855,8 @@ static int flrig_open(RIG *rig) { value_t val; val.i = 1; - rig_set_parm(rig, TOK_FLRIG_FAST_SET_FREQ, val); - rig_set_parm(rig, TOK_FLRIG_FAST_SET_PTT, val); + rig_set_ext_parm(rig, TOK_FLRIG_FAST_SET_FREQ, val); + rig_set_ext_parm(rig, TOK_FLRIG_FAST_SET_PTT, val); priv->has_set_freq_fast = 1; priv->has_set_ptt_fast = 1; // they both will be there rig_debug(RIG_DEBUG_VERBOSE, "%s: set_vfoA_fast/ptt is available\n", __func__); @@ -2194,7 +2192,7 @@ static int flrig_set_ext_parm(RIG *rig, token_t token, value_t val) case TOK_FLRIG_FAST_SET_FREQ: case TOK_FLRIG_FAST_SET_PTT: if (val.i && !priv->has_set_freq_fast) { - rig_debug(RIG_DEBUG_ERR, "%s: FLRig version 1.3.54.11 or higher needed to support fast functions\n",__func__); + rig_debug(RIG_DEBUG_ERR, "%s: FLRig version 1.3.54.14 or higher needed to support fast functions\n",__func__); RETURNFUNC(-RIG_EINVAL); } break; commit a42142312f9f0e344b4b14722edb662507199e98 Author: Mike Black W9MDB <mdb...@ya...> Date: Sat Apr 3 16:52:35 2021 -0500 Fix FLRig use of fast functions. Defaults to fast functions if they are available. param FAST_SET_FREQ 0 to turn on confirmation calls for set_freq param FAST_SET_PTT 0 to turn on confirmation calls for set_ptt diff --git a/rigs/dummy/flrig.c b/rigs/dummy/flrig.c index 863f77a1..2b6a663c 100644 --- a/rigs/dummy/flrig.c +++ b/rigs/dummy/flrig.c @@ -37,6 +37,7 @@ #include <register.h> #include <network.h> +#include "dummy_common.h" #include "flrig.h" #define DEBUG 1 @@ -60,6 +61,8 @@ #define FLRIG_LEVELS (RIG_LEVEL_AF | RIG_LEVEL_RF | RIG_LEVEL_MICGAIN | RIG_LEVEL_STRENGTH | RIG_LEVEL_RFPOWER_METER | RIG_LEVEL_RFPOWER_METER_WATTS | RIG_LEVEL_RFPOWER) +#define FLRIG_PARM (TOK_FLRIG_FAST_SET_FREQ|TOK_FLRIG_FAST_SET_PTT) + #define streq(s1,s2) (strcmp(s1,s2)==0) static int flrig_init(RIG *rig); @@ -115,15 +118,14 @@ struct flrig_priv_data pbwidth_t curr_widthB; int has_get_modeA; /* True if this function is available */ int has_get_bwA; /* True if this function is available */ - int has_set_vfo_fast; - int use_set_vfo_fast; + int has_set_freq_fast; int has_set_ptt_fast; - int use_set_ptt_fast; float powermeter_scale; /* So we can scale power meter to 0-1 */ + value_t parms[RIG_SETTING_MAX]; struct ext_list *ext_parms; }; -/* ext_level's and ext_parm's tokens */ +/* level's and parm's tokens */ #define TOK_FLRIG_FAST_SET_FREQ TOKEN_BACKEND(1) #define TOK_FLRIG_FAST_SET_PTT TOKEN_BACKEND(2) @@ -161,6 +163,9 @@ const struct rig_caps flrig_caps = .has_set_level = RIG_LEVEL_SET(FLRIG_LEVELS), .has_get_parm = RIG_PARM_NONE, .has_set_parm = RIG_PARM_NONE, + .has_get_parm = FLRIG_PARM, + .has_set_parm = RIG_PARM_SET(FLRIG_PARM), + .filters = { RIG_FLT_END }, @@ -182,7 +187,8 @@ const struct rig_caps flrig_caps = .tuning_steps = { {FLRIG_MODES, 1}, {FLRIG_MODES, RIG_TS_ANY}, RIG_TS_END, }, .priv = NULL, /* priv */ - .extparms = flrig_ext_parms, + .extparms = flrig_ext_parms, + .rig_init = flrig_init, .rig_open = flrig_open, .rig_close = flrig_close, @@ -622,6 +628,7 @@ static int flrig_init(RIG *rig) priv = rig->state.priv; memset(priv, 0, sizeof(struct flrig_priv_data)); + memset(priv->parms, 0, RIG_SETTING_MAX * sizeof(value_t)); /* * set arbitrary initial status @@ -633,8 +640,6 @@ static int flrig_init(RIG *rig) priv->curr_modeB = -1; priv->curr_widthA = -1; priv->curr_widthB = -1; - priv->use_set_vfo_fast = 1; // default to fast VFO - priv->use_set_ptt_fast = 1; // deafult to fast PTT if (!rig->caps) { @@ -644,6 +649,14 @@ static int flrig_init(RIG *rig) strncpy(rig->state.rigport.pathname, DEFAULTPATH, sizeof(rig->state.rigport.pathname)); + priv->ext_parms = alloc_init_ext(flrig_ext_parms); + + if (!priv->ext_parms) + { + RETURNFUNC(-RIG_ENOMEM); + } + + RETURNFUNC(RIG_OK); } @@ -832,14 +845,21 @@ static int flrig_open(RIG *rig) if (retval == RIG_ENAVAIL) // must not have it { - priv->has_set_vfo_fast = 0; + value_t val; + val.i = 0; + rig_set_ext_parm(rig, TOK_FLRIG_FAST_SET_FREQ, val); + rig_set_ext_parm(rig, TOK_FLRIG_FAST_SET_PTT, val); + priv->has_set_freq_fast = 0; priv->has_set_ptt_fast = 0; // they both will not be there - rig_debug(RIG_DEBUG_VERBOSE, "%s: set_vfoA_fast/ptt is not available=%s\n", __func__, - value); + rig_debug(RIG_DEBUG_VERBOSE, "%s: set_vfoA_fast/ptt is not available\n", __func__); } else { - priv->has_set_vfo_fast = 1; + value_t val; + val.i = 1; + rig_set_parm(rig, TOK_FLRIG_FAST_SET_FREQ, val); + rig_set_parm(rig, TOK_FLRIG_FAST_SET_PTT, val); + priv->has_set_freq_fast = 1; priv->has_set_ptt_fast = 1; // they both will be there rig_debug(RIG_DEBUG_VERBOSE, "%s: set_vfoA_fast/ptt is available\n", __func__); } @@ -1031,6 +1051,8 @@ static int flrig_close(RIG *rig) */ static int flrig_cleanup(RIG *rig) { + struct flrig_priv_data *priv = (struct flrig_priv_data *)rig->state.priv; + rig_debug(RIG_DEBUG_TRACE, "%s\n", __func__); if (!rig) @@ -1038,7 +1060,9 @@ static int flrig_cleanup(RIG *rig) RETURNFUNC(-RIG_EINVAL); } + free(priv->ext_parms); free(rig->state.priv); + rig->state.priv = NULL; // we really don't need to free this up as it's only done once @@ -1163,24 +1187,27 @@ static int flrig_set_freq(RIG *rig, vfo_t vfo, freq_t freq) sprintf(cmd_arg, "<params><param><value><double>%.0f</double></value></param></params>", freq); + value_t val; + rig_get_ext_parm(rig, TOK_FLRIG_FAST_SET_FREQ, &val); + rig_debug(RIG_DEBUG_VERBOSE, "%s: fast_set_freq=%d\n", __func__, val.i); if (vfo == RIG_VFO_A) { cmd = "rig.set_vfoA"; - if (priv->has_set_vfo_fast) cmd = "rig.set_vfoA_fast"; + if (val.i) cmd = "rig.set_vfoA_fast"; rig_debug(RIG_DEBUG_TRACE, "%s %.0f\n", cmd, freq); priv->curr_freqA = freq; } else { cmd = "rig.set_vfoB"; - if (priv->has_set_vfo_fast) cmd = "rig.set_vfoB_fast"; + if (val.i) cmd = "rig.set_vfoB_fast"; rig_debug(RIG_DEBUG_TRACE, "%s %.0f\n", cmd, freq); priv->curr_freqB = freq; } retval = flrig_transaction(rig, cmd, cmd_arg, NULL, 0); - if (retval < 0) + if (retval != RIG_OK) { RETURNFUNC(retval); } @@ -2147,37 +2174,91 @@ static int flrig_mW2power(RIG *rig, float *power, unsigned int mwpower, } -int flrig_set_ext_parm(RIG *rig, token_t token, value_t val) +static int flrig_set_ext_parm(RIG *rig, token_t token, value_t val) { - struct flrig_priv_data *priv = rig->state.priv; + struct flrig_priv_data *priv = (struct flrig_priv_data *)rig->state.priv; + char lstr[64]; + const struct confparams *cfp; + struct ext_list *epp; - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); + ENTERFUNC; + cfp = rig_ext_lookup_tok(rig, token); + + if (!cfp) + { + RETURNFUNC(-RIG_EINVAL); + } switch (token) { case TOK_FLRIG_FAST_SET_FREQ: - priv->use_set_vfo_fast = val.i; - break; - - case TOK_FLRIG_FAST_SET_PTT: - priv->use_set_ptt_fast = val.i; - break; + if (val.i && !priv->has_set_freq_fast) { + rig_debug(RIG_DEBUG_ERR, "%s: FLRig version 1.3.54.11 or higher needed to support fast functions\n",__func__); + RETURNFUNC(-RIG_EINVAL); + } + break; default: RETURNFUNC(-RIG_EINVAL); } - RETURNFUNC(RIG_OK); + switch (cfp->type) + { + case RIG_CONF_STRING: + strcpy(lstr, val.s); + break; + + + case RIG_CONF_COMBO: + sprintf(lstr, "%d", val.i); + break; + + case RIG_CONF_NUMERIC: + sprintf(lstr, "%f", val.f); + break; + + case RIG_CONF_CHECKBUTTON: + sprintf(lstr, "%s", val.i ? "ON" : "OFF"); + break; + + case RIG_CONF_BUTTON: + lstr[0] = '\0'; + break; + + default: + RETURNFUNC(-RIG_EINTERNAL); + } + + epp = find_ext(priv->ext_parms, token); + + if (!epp) + { + RETURNFUNC(-RIG_EINTERNAL); + } + + /* store value */ + epp->val = val; + + + rig_debug(RIG_DEBUG_VERBOSE, "%s called: %s %s\n", __func__, + cfp->name, lstr); + + RETURNFUNC(RIG_OK); } -int flrig_get_ext_parm(RIG *rig, token_t token, value_t *val) +static int flrig_get_ext_parm(RIG *rig, token_t token, value_t *val) { - struct flrig_priv_data *priv = rig->state.priv; + struct flrig_priv_data *priv = (struct flrig_priv_data *)rig->state.priv; + const struct confparams *cfp; + struct ext_list *epp; + + ENTERFUNC; + /* TODO: load value from priv->ext_parms */ - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); + cfp = rig_ext_lookup_tok(rig, token); - if (!val) + if (!cfp) { RETURNFUNC(-RIG_EINVAL); } @@ -2185,17 +2266,78 @@ int flrig_get_ext_parm(RIG *rig, token_t token, value_t *val) switch (token) { case TOK_FLRIG_FAST_SET_FREQ: - val->i = priv->use_set_vfo_fast; - break; - case TOK_FLRIG_FAST_SET_PTT: - val->i = priv->use_set_ptt_fast; - break; + break; default: - RETURNFUNC(-RIG_ENIMPL); + RETURNFUNC(-RIG_EINVAL); } + epp = find_ext(priv->ext_parms, token); + + if (!epp) + { + RETURNFUNC(-RIG_EINTERNAL); + } + + /* load value */ + *val = epp->val; + + rig_debug(RIG_DEBUG_VERBOSE, "%s called: %s\n", __func__, + cfp->name); + RETURNFUNC(RIG_OK); } + +#if 0 +static int flrig_set_ext_parm(RIG *rig, setting_t parm, value_t val) +{ + struct flrig_priv_data *priv = (struct flrig_priv_data *)rig->state.priv; + int idx; + char pstr[32]; + + ENTERFUNC; + idx = rig_setting2idx(parm); + + if (idx >= RIG_SETTING_MAX) + { + RETURNFUNC(-RIG_EINVAL); + } + + if (RIG_PARM_IS_FLOAT(parm)) + { + sprintf(pstr, "%f", val.f); + } + else + { + sprintf(pstr, "%d", val.i); + } + + rig_debug(RIG_DEBUG_VERBOSE, "%s called: %s %s\n", __func__, + rig_strparm(parm), pstr); + priv->parms[idx] = val; + + RETURNFUNC(RIG_OK); +} + +static int flrig_get_ext_parm(RIG *rig, setting_t parm, value_t *val) +{ + struct flrig_priv_data *priv = (struct flrig_priv_data *)rig->state.priv; + int idx; + + ENTERFUNC; + idx = rig_setting2idx(parm); + + if (idx >= RIG_SETTING_MAX) + { + RETURNFUNC(-RIG_EINVAL); + } + + *val = priv->parms[idx]; + rig_debug(RIG_DEBUG_VERBOSE, "%s called %s\n", __func__, + rig_strparm(parm)); + + RETURNFUNC(RIG_OK); +} +#endif commit fb9c1eac3882f6af916e38616d8342f783222daf Author: Mike Black W9MDB <mdb...@ya...> Date: Sat Apr 3 14:28:15 2021 -0500 Fix FLRig set_VFOA to be default Add FAST_SET_FREQ and FAST_SET_PTT params to enable new function calls in FLRig for fast VFO/PTT setting This should better support Doppler speed in SATPC32 and gpredict diff --git a/rigs/dummy/flrig.c b/rigs/dummy/flrig.c index 5fec5f0b..863f77a1 100644 --- a/rigs/dummy/flrig.c +++ b/rigs/dummy/flrig.c @@ -90,6 +90,9 @@ static int flrig_get_split_freq_mode(RIG *rig, vfo_t vfo, freq_t *freq, static int flrig_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val); static int flrig_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val); +static int flrig_set_ext_parm(RIG *rig, token_t token, value_t val); +static int flrig_get_ext_parm(RIG *rig, token_t token, value_t *val); + static const char *flrig_get_info(RIG *rig); static int flrig_power2mW(RIG *rig, unsigned int *mwpower, float power, freq_t freq, rmode_t mode); @@ -112,8 +115,27 @@ struct flrig_priv_data pbwidth_t curr_widthB; int has_get_modeA; /* True if this function is available */ int has_get_bwA; /* True if this function is available */ - int has_set_vfoA_fast; + int has_set_vfo_fast; + int use_set_vfo_fast; + int has_set_ptt_fast; + int use_set_ptt_fast; float powermeter_scale; /* So we can scale power meter to 0-1 */ + struct ext_list *ext_parms; +}; + +/* ext_level's and ext_parm's tokens */ +#define TOK_FLRIG_FAST_SET_FREQ TOKEN_BACKEND(1) +#define TOK_FLRIG_FAST_SET_PTT TOKEN_BACKEND(2) + +static const struct confparams flrig_ext_parms[] = +{ + { + TOK_FLRIG_FAST_SET_FREQ, "FAST_SET_FREQ", "Use fast set_freq", "If true uses fast set_freq otherwise set_freq is confirmed", "1", RIG_CONF_CHECKBUTTON, {} + }, + { + TOK_FLRIG_FAST_SET_PTT, "FAST_SET_PTT", "Use fast set_ott", "If true uses fast set_ptt otherwise set_ptt is confirmed", "1", RIG_CONF_CHECKBUTTON, {} + }, + { RIG_CONF_END, NULL, } }; const struct rig_caps flrig_caps = @@ -121,7 +143,7 @@ const struct rig_caps flrig_caps = RIG_MODEL(RIG_MODEL_FLRIG), .model_name = "FLRig", .mfg_name = "FLRig", - .version = "20210402", + .version = "20210403", .copyright = "LGPL", .status = RIG_STATUS_STABLE, .rig_type = RIG_TYPE_TRANSCEIVER, @@ -160,6 +182,7 @@ const struct rig_caps flrig_caps = .tuning_steps = { {FLRIG_MODES, 1}, {FLRIG_MODES, RIG_TS_ANY}, RIG_TS_END, }, .priv = NULL, /* priv */ + .extparms = flrig_ext_parms, .rig_init = flrig_init, .rig_open = flrig_open, .rig_close = flrig_close, @@ -183,6 +206,8 @@ const struct rig_caps flrig_caps = .get_split_freq_mode = flrig_get_split_freq_mode, .set_level = flrig_set_level, .get_level = flrig_get_level, + .set_ext_parm = flrig_set_ext_parm, + .get_ext_parm = flrig_get_ext_parm, .power2mW = flrig_power2mW, .mW2power = flrig_mW2power }; @@ -559,6 +584,9 @@ static int flrig_transaction(RIG *rig, char *cmd, char *cmd_arg, char *value, read_transaction(rig, xml, sizeof(xml)); // this might time out -- that's OK + // we get an uknown response if function does not exist + if (strstr(xml,"unknown")) RETURNFUNC(RIG_ENAVAIL); + if (value) { xml_parse(xml, value, value_len); @@ -605,6 +633,8 @@ static int flrig_init(RIG *rig) priv->curr_modeB = -1; priv->curr_widthA = -1; priv->curr_widthB = -1; + priv->use_set_vfo_fast = 1; // default to fast VFO + priv->use_set_ptt_fast = 1; // deafult to fast PTT if (!rig->caps) { @@ -775,11 +805,9 @@ static int flrig_open(RIG *rig) retval = flrig_transaction(rig, "rig.get_pwrmeter_scale", NULL, value, sizeof(value)); - if (retval != RIG_OK) { RETURNFUNC(retval); } - priv->powermeter_scale = 1; // default - if (strlen(value) > 0) + if (retval == RIG_OK) { priv->powermeter_scale = atof(value); } @@ -787,48 +815,47 @@ static int flrig_open(RIG *rig) /* see if get_modeA is available */ retval = flrig_transaction(rig, "rig.get_modeA", NULL, value, sizeof(value)); - if (retval != RIG_OK) { RETURNFUNC(retval); } - - if (strlen(value) > 0) /* must have it since we got an answer */ + if (retval == RIG_ENAVAIL) // must not have it { - priv->has_get_modeA = 1; - rig_debug(RIG_DEBUG_VERBOSE, "%s: getmodeA is available=%s\n", __func__, + priv->has_get_modeA = 0; + rig_debug(RIG_DEBUG_VERBOSE, "%s: getmodeA is not available=%s\n", __func__, value); } else { - rig_debug(RIG_DEBUG_VERBOSE, "%s: getmodeA is not available\n", __func__); + priv->has_get_modeA = 1; + rig_debug(RIG_DEBUG_VERBOSE, "%s: getmodeA is available\n", __func__); } /* see if set_vfoA_fast is available */ retval = flrig_transaction(rig, "rig.set_vfoA_fast", NULL, value, sizeof(value)); - if (retval != RIG_OK) { RETURNFUNC(retval); } - - if (strlen(value) > 0) /* must have it since we got an answer */ + if (retval == RIG_ENAVAIL) // must not have it { - priv->has_set_vfoA_fast = 1; - rig_debug(RIG_DEBUG_VERBOSE, "%s: set_vfoA_fast is available=%s\n", __func__, + priv->has_set_vfo_fast = 0; + priv->has_set_ptt_fast = 0; // they both will not be there + rig_debug(RIG_DEBUG_VERBOSE, "%s: set_vfoA_fast/ptt is not available=%s\n", __func__, value); } else { - rig_debug(RIG_DEBUG_VERBOSE, "%s: set_vfoA_fast is not available\n", __func__); + priv->has_set_vfo_fast = 1; + priv->has_set_ptt_fast = 1; // they both will be there + rig_debug(RIG_DEBUG_VERBOSE, "%s: set_vfoA_fast/ptt is available\n", __func__); } /* see if get_bwA is available */ retval = flrig_transaction(rig, "rig.get_bwA", NULL, value, sizeof(value)); - if (retval != RIG_OK) { RETURNFUNC(retval); } - - if (strlen(value) > 0) /* must have it since we got an answer */ + if (retval == RIG_ENAVAIL) // must not have it { - priv->has_get_bwA = 1; + priv->has_get_bwA = 0; rig_debug(RIG_DEBUG_VERBOSE, "%s: get_bwA is available=%s\n", __func__, value); } else { + priv->has_get_bwA = 1; rig_debug(RIG_DEBUG_VERBOSE, "%s: get_bwA is not available\n", __func__); } @@ -982,6 +1009,8 @@ static int flrig_open(RIG *rig) rig_debug(RIG_DEBUG_VERBOSE, "%s: hamlib modes=%s\n", __func__, value); + + RETURNFUNC(retval); } @@ -1137,14 +1166,14 @@ static int flrig_set_freq(RIG *rig, vfo_t vfo, freq_t freq) if (vfo == RIG_VFO_A) { cmd = "rig.set_vfoA"; - if (priv->has_set_vfoA_fast) cmd = "rig.set_vfoA_fast"; + if (priv->has_set_vfo_fast) cmd = "rig.set_vfoA_fast"; rig_debug(RIG_DEBUG_TRACE, "%s %.0f\n", cmd, freq); priv->curr_freqA = freq; } else { cmd = "rig.set_vfoB"; - if (priv->has_set_vfoA_fast) cmd = "rig.set_vfoB_fast"; + if (priv->has_set_vfo_fast) cmd = "rig.set_vfoB_fast"; rig_debug(RIG_DEBUG_TRACE, "%s %.0f\n", cmd, freq); priv->curr_freqB = freq; } @@ -2114,6 +2143,59 @@ static int flrig_mW2power(RIG *rig, float *power, unsigned int mwpower, *power = ((float)mwpower / 100000); + RETURNFUNC(RIG_OK); + +} + +int flrig_set_ext_parm(RIG *rig, token_t token, value_t val) +{ + struct flrig_priv_data *priv = rig->state.priv; + + rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); + + switch (token) + { + case TOK_FLRIG_FAST_SET_FREQ: + priv->use_set_vfo_fast = val.i; + break; + + + case TOK_FLRIG_FAST_SET_PTT: + priv->use_set_ptt_fast = val.i; + break; + + default: + RETURNFUNC(-RIG_EINVAL); + } + RETURNFUNC(RIG_OK); + +} + +int flrig_get_ext_parm(RIG *rig, token_t token, value_t *val) +{ + struct flrig_priv_data *priv = rig->state.priv; + + rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); + + if (!val) + { + RETURNFUNC(-RIG_EINVAL); + } + + switch (token) + { + case TOK_FLRIG_FAST_SET_FREQ: + val->i = priv->use_set_vfo_fast; + break; + + case TOK_FLRIG_FAST_SET_PTT: + val->i = priv->use_set_ptt_fast; + break; + + default: + RETURNFUNC(-RIG_ENIMPL); + } + RETURNFUNC(RIG_OK); } commit 92e40eca30b99e2dff25b957c6a582908b948f95 Author: Mike Black W9MDB <mdb...@ya...> Date: Sat Apr 3 10:32:43 2021 -0500 In rig.c reduce tx_range from ERR to VERBOSE -- it's not fatal at all Was causing problems with powershell execution detecting the error condition diff --git a/src/rig.c b/src/rig.c index 60e6edf9..da09e9b0 100644 --- a/src/rig.c +++ b/src/rig.c @@ -498,7 +498,7 @@ RIG *HAMLIB_API rig_init(rig_model_t rig_model) if (rs->tx_range_list[0].startf == 0) { - rig_debug(RIG_DEBUG_ERR, "%s: rig does not have tx_range!!\n", __func__); + rig_debug(RIG_DEBUG_VERBOSE, "%s: rig does not have tx_range!!\n", __func__); //return(NULL); // this is not fatal } ----------------------------------------------------------------------- Summary of changes: NEWS | 3 +- VFOs.txt | 6 +- include/hamlib/riglist.h | 2 +- rigs/dummy/flrig.c | 296 ++++++++++++++++++++++++++++++++++++++++++----- rigs/dummy/netrigctl.c | 3 +- rigs/kenwood/kenwood.c | 16 ++- rigs/kenwood/kenwood.h | 5 +- rigs/kenwood/ts480.c | 181 ++++++++++++++++++++++++++++- rigs/yaesu/ft857.c | 3 +- src/iofunc.c | 4 +- src/rig.c | 13 ++- 11 files changed, 490 insertions(+), 42 deletions(-) hooks/post-receive -- Hamlib -- Ham radio control libraries |