From 92c6f3924e7a46341aa05eb60b1934e732952f78 Mon Sep 17 00:00:00 2001 From: Michael Black Date: Sat, 14 Mar 2020 15:07:49 -0500 Subject: [PATCH 1/2] Only do x25 command if not in satellite mode for icom rigs --- rigs/icom/icom.c | 57 ++++++++++++++++++++++++++++++------------------ 1 file changed, 36 insertions(+), 21 deletions(-) diff --git a/rigs/icom/icom.c b/rigs/icom/icom.c index e0a03252d..a55185ba7 100644 --- a/rigs/icom/icom.c +++ b/rigs/icom/icom.c @@ -3636,23 +3636,30 @@ int icom_set_split_freq(RIG *rig, vfo_t vfo, freq_t tx_freq) save_vfo = priv->curr_vfo; // If the rigs supports the 0x25 command we'll use it - // This eliminates VFO swapping and improves satmode operations + // This eliminates VFO swapping and improves split operations if (priv->x25cmdfails == 0) { - freq_len = priv->civ_731_mode ? 4 : 5; - /* - * to_bcd requires nibble len - */ - to_bcd(freqbuf, tx_freq, freq_len * 2); + int satmode = 0; + rc = rig_get_func(rig, RIG_VFO_CURR, RIG_FUNC_SATMODE, &satmode); + rig_debug(RIG_DEBUG_VERBOSE, "%s: satmode=%d\n", __func__, satmode); - cmd = C_SEND_SEL_FREQ; - subcmd = 0x01; // set the unselected vfo - rc = icom_transaction(rig, cmd, subcmd, freqbuf, freq_len, ackbuf, - &ack_len); - - if (rc == RIG_OK) // then we're done!! + if (satmode == 0) // only worth trying if not in satmode { - return rc; + freq_len = priv->civ_731_mode ? 4 : 5; + /* + * to_bcd requires nibble len + */ + to_bcd(freqbuf, tx_freq, freq_len * 2); + + cmd = C_SEND_SEL_FREQ; + subcmd = 0x01; // set the unselected vfo + rc = icom_transaction(rig, cmd, subcmd, freqbuf, freq_len, ackbuf, + &ack_len); + + if (rc == RIG_OK) // then we're done!! + { + return rc; + } } priv->x25cmdfails = 1; @@ -3798,18 +3805,26 @@ int icom_get_split_freq(RIG *rig, vfo_t vfo, freq_t *tx_freq) } // If the rigs supports the 0x25 command we'll use it - // This eliminates VFO swapping and improves satmode operations + // This eliminates VFO swapping and improves split operations + // This does not work in satellite mode for the 9700 if (priv->x25cmdfails == 0) { - cmd = C_SEND_SEL_FREQ; - subcmd = 0x01; // get the unselected vfo - rc = icom_transaction(rig, cmd, subcmd, NULL, 0, ackbuf, - &ack_len); + int satmode = 0; + rc = rig_get_func(rig, RIG_VFO_CURR, RIG_FUNC_SATMODE, &satmode); + rig_debug(RIG_DEBUG_VERBOSE, "%s: satmode=%d\n", __func__, satmode); - if (rc == RIG_OK) // then we're done!! + if (satmode == 0) // only worth trying if not in satmode { - *tx_freq = from_bcd(ackbuf + 2, (priv->civ_731_mode ? 4 : 5) * 2); - return rc; + cmd = C_SEND_SEL_FREQ; + subcmd = 0x01; // get the unselected vfo + rc = icom_transaction(rig, cmd, subcmd, NULL, 0, ackbuf, + &ack_len); + + if (rc == RIG_OK) // then we're done!! + { + *tx_freq = from_bcd(ackbuf + 2, (priv->civ_731_mode ? 4 : 5) * 2); + return rc; + } } priv->x25cmdfails = 1; From 1e658578ec1debeedc228206faa71e9965766fcc Mon Sep 17 00:00:00 2001 From: Michael Black Date: Sat, 14 Mar 2020 15:21:56 -0500 Subject: [PATCH 2/2] Reset x25cmdfails when SATMODE is called --- rigs/icom/icom.c | 3 +++ rigs/icom/icom.h | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/rigs/icom/icom.c b/rigs/icom/icom.c index a55185ba7..0ce7afe2d 100644 --- a/rigs/icom/icom.c +++ b/rigs/icom/icom.c @@ -4765,6 +4765,8 @@ int icom_set_func(RIG *rig, vfo_t vfo, setting_t func, int status) unsigned char fctbuf[MAXFRAMELEN], ackbuf[MAXFRAMELEN]; int fct_len, acklen, retval; int fct_cn, fct_sc; /* Command Number, Subcommand */ + struct rig_state *rs = &rig->state; + struct icom_priv_data *priv = (struct icom_priv_data *) rs->priv; rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); @@ -4950,6 +4952,7 @@ int icom_set_func(RIG *rig, vfo_t vfo, setting_t func, int status) fct_cn = C_CTL_FUNC; fct_sc = S_MEM_SATMODE; } + priv->x25cmdfails = 0; // we reset this to try it again break; diff --git a/rigs/icom/icom.h b/rigs/icom/icom.h index 3aa03146a..2248c4e1f 100644 --- a/rigs/icom/icom.h +++ b/rigs/icom/icom.h @@ -30,7 +30,7 @@ #include #endif -#define BACKEND_VER "0.37" +#define BACKEND_VER "0.38" /* * defines used by comp_cal_str in rig.c