Force final VFO selection in icom_set_split

pull/224/head
Michael Black 2020-03-09 09:16:30 -05:00
rodzic 7a174df5b7
commit aaf8a074d9
1 zmienionych plików z 20 dodań i 6 usunięć

Wyświetl plik

@ -4218,6 +4218,7 @@ int icom_set_split_vfo(RIG *rig, vfo_t vfo, split_t split, vfo_t tx_vfo)
unsigned char ackbuf[MAXFRAMELEN]; unsigned char ackbuf[MAXFRAMELEN];
int ack_len = sizeof(ackbuf), rc; int ack_len = sizeof(ackbuf), rc;
int split_sc; int split_sc;
vfo_t vfo_final = RIG_VFO_NONE; // where does the VFO end up?
rig_debug(RIG_DEBUG_VERBOSE, rig_debug(RIG_DEBUG_VERBOSE,
"%s called vfo='%s', split=%d, tx_vfo=%s, curr_vfo=%s\n", __func__, "%s called vfo='%s', split=%d, tx_vfo=%s, curr_vfo=%s\n", __func__,
@ -4237,9 +4238,7 @@ int icom_set_split_vfo(RIG *rig, vfo_t vfo, split_t split, vfo_t tx_vfo)
{ {
rig_debug(RIG_DEBUG_TRACE, "%s: set_vfo to VFO_A because tx_vfo=%s\n", __func__, rig_debug(RIG_DEBUG_TRACE, "%s: set_vfo to VFO_A because tx_vfo=%s\n", __func__,
rig_strvfo(tx_vfo)); rig_strvfo(tx_vfo));
rig_set_vfo(rig, RIG_VFO_A); vfo_final = RIG_VFO_A;
priv->tx_vfo = RIG_VFO_A;
priv->rx_vfo = RIG_VFO_A;
} }
// otherwise if Main or Sub we set Main or VFOA as the current vfo // otherwise if Main or Sub we set Main or VFOA as the current vfo
else if (tx_vfo == RIG_VFO_MAIN || tx_vfo == RIG_VFO_SUB) else if (tx_vfo == RIG_VFO_MAIN || tx_vfo == RIG_VFO_SUB)
@ -4247,6 +4246,7 @@ int icom_set_split_vfo(RIG *rig, vfo_t vfo, split_t split, vfo_t tx_vfo)
rig_debug(RIG_DEBUG_TRACE, "%s: set_vfo to VFO_MAIN because tx_vfo=%s\n", rig_debug(RIG_DEBUG_TRACE, "%s: set_vfo to VFO_MAIN because tx_vfo=%s\n",
__func__, rig_strvfo(tx_vfo)); __func__, rig_strvfo(tx_vfo));
rig_set_vfo(rig, RIG_VFO_MAIN); rig_set_vfo(rig, RIG_VFO_MAIN);
vfo_final = RIG_VFO_MAIN;
if (VFO_HAS_A_B_ONLY) if (VFO_HAS_A_B_ONLY)
{ {
@ -4270,16 +4270,19 @@ int icom_set_split_vfo(RIG *rig, vfo_t vfo, split_t split, vfo_t tx_vfo)
if (VFO_HAS_A_B_ONLY && ((tx_vfo == RIG_VFO_MAIN || tx_vfo == RIG_VFO_SUB) if (VFO_HAS_A_B_ONLY && ((tx_vfo == RIG_VFO_MAIN || tx_vfo == RIG_VFO_SUB)
|| vfo == RIG_VFO_MAIN || vfo == RIG_VFO_SUB)) || vfo == RIG_VFO_MAIN || vfo == RIG_VFO_SUB))
{ {
rig_debug(RIG_DEBUG_TRACE,"%s: vfo clause 1\n", __func__);
if (tx_vfo == RIG_VFO_MAIN) { tx_vfo = RIG_VFO_A; } if (tx_vfo == RIG_VFO_MAIN) { tx_vfo = RIG_VFO_A; }
else if (tx_vfo == RIG_VFO_SUB) { tx_vfo = RIG_VFO_B; } else if (tx_vfo == RIG_VFO_SUB) { tx_vfo = RIG_VFO_B; }
if (vfo == RIG_VFO_MAIN) { vfo = RIG_VFO_A; } if (vfo == RIG_VFO_MAIN) { vfo = RIG_VFO_A; }
else if (vfo == RIG_VFO_SUB) { vfo = RIG_VFO_B; } else if (vfo == RIG_VFO_SUB) { vfo = RIG_VFO_B; }
vfo_final = RIG_VFO_A;
} }
/* ensure VFO A is Rx and VFO B is Tx as we assume that elsewhere */ /* ensure VFO A is Rx and VFO B is Tx as we assume that elsewhere */
if (VFO_HAS_A_B && (tx_vfo == RIG_VFO_A || tx_vfo == RIG_VFO_B)) if (VFO_HAS_A_B && (tx_vfo == RIG_VFO_A || tx_vfo == RIG_VFO_B))
{ {
rig_debug(RIG_DEBUG_TRACE,"%s: vfo clause 2\n", __func__);
rig_debug(RIG_DEBUG_TRACE, "%s: set_vfo to VFO_A because tx_vfo=%s\n", __func__, rig_debug(RIG_DEBUG_TRACE, "%s: set_vfo to VFO_A because tx_vfo=%s\n", __func__,
rig_strvfo(tx_vfo)); rig_strvfo(tx_vfo));
@ -4290,10 +4293,12 @@ int icom_set_split_vfo(RIG *rig, vfo_t vfo, split_t split, vfo_t tx_vfo)
priv->tx_vfo = RIG_VFO_B; priv->tx_vfo = RIG_VFO_B;
priv->rx_vfo = RIG_VFO_A; priv->rx_vfo = RIG_VFO_A;
vfo_final = RIG_VFO_A;
} }
else if (VFO_HAS_MAIN_SUB_A_B_ONLY && (tx_vfo == RIG_VFO_MAIN else if (VFO_HAS_MAIN_SUB_A_B_ONLY && (tx_vfo == RIG_VFO_MAIN
|| tx_vfo == RIG_VFO_SUB)) || tx_vfo == RIG_VFO_SUB))
{ {
rig_debug(RIG_DEBUG_TRACE,"%s: vfo clause 3\n", __func__);
// if we're asking for split in this case we split Main on A/B // if we're asking for split in this case we split Main on A/B
priv->tx_vfo = RIG_VFO_B; priv->tx_vfo = RIG_VFO_B;
priv->rx_vfo = RIG_VFO_A; priv->rx_vfo = RIG_VFO_A;
@ -4315,6 +4320,7 @@ int icom_set_split_vfo(RIG *rig, vfo_t vfo, split_t split, vfo_t tx_vfo)
} }
else if (VFO_HAS_MAIN_SUB && (tx_vfo == RIG_VFO_MAIN || tx_vfo == RIG_VFO_SUB)) else if (VFO_HAS_MAIN_SUB && (tx_vfo == RIG_VFO_MAIN || tx_vfo == RIG_VFO_SUB))
{ {
rig_debug(RIG_DEBUG_TRACE,"%s: vfo clause 4\n", __func__);
rig_debug(RIG_DEBUG_TRACE, "%s: set_vfo because tx_vfo=%s\n", __func__, rig_debug(RIG_DEBUG_TRACE, "%s: set_vfo because tx_vfo=%s\n", __func__,
rig_strvfo(tx_vfo)); rig_strvfo(tx_vfo));
@ -4325,6 +4331,7 @@ int icom_set_split_vfo(RIG *rig, vfo_t vfo, split_t split, vfo_t tx_vfo)
priv->rx_vfo = vfo; priv->rx_vfo = vfo;
priv->tx_vfo = tx_vfo; priv->tx_vfo = tx_vfo;
vfo_final = RIG_VFO_MAIN;
split_sc = S_SPLT_ON; split_sc = S_SPLT_ON;
} }
@ -4356,8 +4363,16 @@ int icom_set_split_vfo(RIG *rig, vfo_t vfo, split_t split, vfo_t tx_vfo)
} }
priv->split_on = RIG_SPLIT_ON == split; priv->split_on = RIG_SPLIT_ON == split;
rig_debug(RIG_DEBUG_VERBOSE, "%s: vfo=%s rx_vfo=%s tx_vfo=%s split=%d\n",
__func__, rig_strvfo(vfo), rig_strvfo(priv->rx_vfo), if (vfo_final != RIG_VFO_NONE && vfo_final != priv->curr_vfo) {
rig_debug(RIG_DEBUG_TRACE,"%s: vfo_final set %s\n", __func__, rig_strvfo(vfo_final));
rc = rig_set_vfo(rig, vfo_final);
if (rc != RIG_OK) {
rig_debug(RIG_DEBUG_TRACE,"%s: vfo_final set failed? err=%s\n", __func__, rigerror(rc));
}
}
rig_debug(RIG_DEBUG_VERBOSE, "%s: vfo=%s curr_vfo=%s rx_vfo=%s tx_vfo=%s split=%d\n",
__func__, rig_strvfo(vfo), rig_strvfo(priv->curr_vfo), rig_strvfo(priv->rx_vfo),
rig_strvfo(priv->tx_vfo), split); rig_strvfo(priv->tx_vfo), split);
return RIG_OK; return RIG_OK;
} }
@ -6535,7 +6550,6 @@ int icom_get_freq_range(RIG *rig)
int i; int i;
int cmd, subcmd; int cmd, subcmd;
int retval; int retval;
unsigned char lenbuf[1];
unsigned char cmdbuf[MAXFRAMELEN]; unsigned char cmdbuf[MAXFRAMELEN];
unsigned char ackbuf[MAXFRAMELEN]; unsigned char ackbuf[MAXFRAMELEN];
struct icom_priv_data *priv = (struct icom_priv_data *) rig->state.priv; struct icom_priv_data *priv = (struct icom_priv_data *) rig->state.priv;