When get_split_freq_mode is called with RIG_VFO_CURR and split is not enabled

we will assume the TX vfo is VFOB or Sub as appropriate
This hopefully makes WSJT-X happy with Icom rigs now.
https://github.com/Hamlib/Hamlib/issues/288
pull/296/head
Michael Black W9MDB 2020-06-11 08:15:52 -05:00
rodzic 9e18b234c2
commit b910fa0c58
2 zmienionych plików z 24 dodań i 6 usunięć

Wyświetl plik

@ -3839,7 +3839,8 @@ int icom_set_split_freq(RIG *rig, vfo_t vfo, freq_t tx_freq)
rig_debug(RIG_DEBUG_VERBOSE, "%s called for %s\n", __func__, rig_strvfo(vfo)); rig_debug(RIG_DEBUG_VERBOSE, "%s called for %s\n", __func__, rig_strvfo(vfo));
rs = &rig->state; rs = &rig->state;
priv = (struct icom_priv_data *) rs->priv; priv = (struct icom_priv_data *) rs->priv;
rig_debug(RIG_DEBUG_VERBOSE, "%s: curr_vfo=%s\n", __func__, rig_strvfo(priv->curr_vfo)); rig_debug(RIG_DEBUG_VERBOSE, "%s: curr_vfo=%s\n", __func__,
rig_strvfo(priv->curr_vfo));
rig_debug(RIG_DEBUG_VERBOSE, "%s: satmode=%d, subvfo=%s\n", __func__, rig_debug(RIG_DEBUG_VERBOSE, "%s: satmode=%d, subvfo=%s\n", __func__,
rig->state.cache.satmode, rig_strvfo(priv->tx_vfo)); rig->state.cache.satmode, rig_strvfo(priv->tx_vfo));
@ -4043,7 +4044,8 @@ int icom_get_split_freq(RIG *rig, vfo_t vfo, freq_t *tx_freq)
rs = &rig->state; rs = &rig->state;
priv = (struct icom_priv_data *) rs->priv; priv = (struct icom_priv_data *) rs->priv;
rig_debug(RIG_DEBUG_VERBOSE, "%s: curr_vfo=%s\n", __func__, rig_strvfo(priv->curr_vfo)); rig_debug(RIG_DEBUG_VERBOSE, "%s: curr_vfo=%s\n", __func__,
rig_strvfo(priv->curr_vfo));
if (rig->caps->rig_model == RIG_MODEL_IC910) if (rig->caps->rig_model == RIG_MODEL_IC910)
@ -4443,10 +4445,16 @@ int icom_set_split_freq_mode(RIG *rig, vfo_t vfo, freq_t tx_freq,
unsigned char ackbuf[MAXFRAMELEN]; unsigned char ackbuf[MAXFRAMELEN];
int ack_len = sizeof(ackbuf); int ack_len = sizeof(ackbuf);
vfo_t rx_vfo, tx_vfo; vfo_t rx_vfo, tx_vfo;
int split_assumed = 0;
rig_debug(RIG_DEBUG_VERBOSE, "%s called vfo=%s\n", __func__, rig_debug(RIG_DEBUG_VERBOSE, "%s called vfo=%s\n", __func__,
rig_strvfo(vfo)); rig_strvfo(vfo));
rig_debug(RIG_DEBUG_VERBOSE, "%s: curr_vfo=%s\n", __func__, rig_strvfo(priv->curr_vfo)); rig_debug(RIG_DEBUG_VERBOSE, "%s: curr_vfo=%s\n", __func__,
rig_strvfo(priv->curr_vfo));
// If the user is asking to set split on VFO_CURR we'll assume split mode
// WSJT-X calls this function before turning on split mode
if (vfo == RIG_VFO_CURR) { split_assumed = 1; }
if (priv->curr_vfo == RIG_VFO_NONE) if (priv->curr_vfo == RIG_VFO_NONE)
{ {
@ -4484,8 +4492,8 @@ int icom_set_split_freq_mode(RIG *rig, vfo_t vfo, freq_t tx_freq,
current VFO is VFO A and the split Tx VFO is always VFO B. These current VFO is VFO A and the split Tx VFO is always VFO B. These
assumptions allow us to deal with the lack of VFO and split assumptions allow us to deal with the lack of VFO and split
queries */ queries */
if (VFO_HAS_A_B /* broken if user changes split on rig :( */
&& priv->split_on) /* broken if user changes split on rig :( */ if (VFO_HAS_A_B && (split_assumed || priv->split_on))
{ {
/* VFO A/B style rigs swap VFO on split Tx so we need to disable /* VFO A/B style rigs swap VFO on split Tx so we need to disable
split for certainty */ split for certainty */
@ -4514,6 +4522,16 @@ int icom_set_split_freq_mode(RIG *rig, vfo_t vfo, freq_t tx_freq,
return retval; return retval;
} }
// WSJT-X calls this function before setting split
// So in this case we have to force the tx_vfo
if (split_assumed && vfo == RIG_VFO_CURR)
{
rig_debug(RIG_DEBUG_TRACE, "%s: split_assumed so tx_vfo=%s\n", __func__,
rig_strvfo(vfo));
tx_vfo = VFO_HAS_A_B_ONLY ? RIG_VFO_B : RIG_VFO_SUB;
}
rig_debug(RIG_DEBUG_VERBOSE, rig_debug(RIG_DEBUG_VERBOSE,
"%s: after get_split_vfos rx_vfo=%s tx_vfo=%s\n", __func__, "%s: after get_split_vfos rx_vfo=%s tx_vfo=%s\n", __func__,
rig_strvfo(priv->rx_vfo), rig_strvfo(priv->tx_vfo)); rig_strvfo(priv->rx_vfo), rig_strvfo(priv->tx_vfo));

Wyświetl plik

@ -31,7 +31,7 @@
#include <sys/time.h> #include <sys/time.h>
#endif #endif
#define BACKEND_VER "20200610" #define BACKEND_VER "20200611"
/* /*
* defines used by comp_cal_str in rig.c * defines used by comp_cal_str in rig.c