IC-9700 VFO selection now works for VFOA, VFOB, MainA, MainB, SubA, and SubB

WSJT-X does not set VFOB mode when VFOA mode is already selected...must change VFOA mode and back again to set VFOB
pull/1347/head
Mike Black W9MDB 2023-07-18 10:20:53 -05:00
rodzic 56ad3ac1ef
commit b58c0a0fa4
4 zmienionych plików z 43 dodań i 6 usunięć

Wyświetl plik

@ -1584,7 +1584,7 @@ const struct rig_caps ic905_caps =
{ MHz(2300), MHz(2309.999999), IC705_ALL_TX_MODES, W(0.1), W(2), IC7300_VFOS, RIG_ANT_1, "EUR" },
{ MHz(2390), MHz(2450), IC705_ALL_TX_MODES, W(0.1), W(2), IC7300_VFOS, RIG_ANT_1, "EUR" },
{ MHz(5650), MHz(5925), IC705_ALL_TX_MODES, W(0.1), W(2), IC7300_VFOS, RIG_ANT_1, "EUR" },
{ MHz(10000), MHz(10500), IC705_ALL_TX_MODES, W(0.1), W(2), IC7300_VFOS, RIG_ANT_1, "USA" },
{ MHz(10000), MHz(10500), IC705_ALL_TX_MODES, W(0.1), W(2), IC7300_VFOS, RIG_ANT_1, "EUR" },
RIG_FRNG_END,
},
@ -2093,11 +2093,30 @@ int ic9700_set_vfo(RIG *rig, vfo_t vfo)
unsigned char ackbuf[MAXFRAMELEN];
int ack_len = sizeof(ackbuf), retval;
if (vfo == RIG_VFO_A || vfo == RIG_VFO_MAIN)
rig_debug(RIG_DEBUG_VERBOSE, "%s: vfo=%s\n", __func__, rig_strvfo(vfo));
if (vfo == RIG_VFO_A)
{
retval = icom_transaction(rig, 0x07, 0x00, NULL, 0, ackbuf, &ack_len);
}
else if (vfo == RIG_VFO_B)
{
retval = icom_transaction(rig, 0x07, 0x01, NULL, 0, ackbuf, &ack_len);
}
else if (vfo == RIG_VFO_MAIN || vfo == RIG_VFO_MAIN_A || vfo == RIG_VFO_MAIN_B)
{
retval = icom_transaction(rig, 0x07, 0xd0, NULL, 0, ackbuf, &ack_len);
if (retval != RIG_OK)
{
rig_debug(RIG_DEBUG_ERR, "%s: %s\n", __func__, rigerror(retval));
return -retval;
}
if (vfo == RIG_VFO_MAIN_A || vfo == RIG_VFO_MAIN_B)
{
int subcmd = vfo == RIG_VFO_MAIN_A ? 0x00: 0x01;
retval = icom_transaction(rig, 0x07, subcmd, NULL, 0, ackbuf, &ack_len);
}
}
else
else if (vfo == RIG_VFO_SUB || vfo == RIG_VFO_SUB_A || vfo == RIG_VFO_SUB_B)
{
if (rig->state.cache.satmode)
{
@ -2105,7 +2124,19 @@ int ic9700_set_vfo(RIG *rig, vfo_t vfo)
// we return RIG_OK anyways as this should just be a bad request
return RIG_OK;
}
// first switch to sub
retval = icom_transaction(rig, 0x07, 0xd1, NULL, 0, ackbuf, &ack_len);
if (retval != RIG_OK)
{
rig_debug(RIG_DEBUG_ERR, "%s: %s\n", __func__, rigerror(retval));
return -retval;
}
if (vfo == RIG_VFO_SUB_A || vfo == RIG_VFO_SUB_B)
{
HAMLIB_TRACE;
int subcmd = vfo == RIG_VFO_SUB_A ? 0x00: 0x01;
retval = icom_transaction(rig, 0x07, subcmd, NULL, 0, ackbuf, &ack_len);
}
}
if (retval != RIG_OK)

Wyświetl plik

@ -1373,7 +1373,7 @@ int icom_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
HAMLIB_TRACE;
subcmd = 0x01; // get unselected VFO
}
if (RIG_IS_IC7600)
if (RIG_IS_IC7600 || RIG_IS_IC9700)
{ // the 7600/7610 do it different 0=Main, 1=Sub -- maybe other Icoms will start doing this too
subcmd = 0;
if (vfo & RIG_VFO_B || vfo & RIG_VFO_SUB) subcmd = 1;
@ -1677,6 +1677,11 @@ int icom_get_freq(RIG *rig, vfo_t vfo, freq_t *freq)
rig->caps->targetable_vfo = rig->state.targetable_vfo |= RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE;
}
}
if (RIG_IS_IC9700)
{
subcmd2 = 0;
if (vfo & RIG_VFO_B || vfo & RIG_VFO_SUB) subcmd2 = 1;
}
retval = icom_transaction(rig, cmd2, subcmd2, NULL, 0, freqbuf, &freq_len);

Wyświetl plik

@ -35,7 +35,7 @@
#include <sys/time.h>
#endif
#define BACKEND_VER "20230716"
#define BACKEND_VER "20230718"
#define ICOM_IS_ID31 rig_is_model(rig, RIG_MODEL_ID31)
#define ICOM_IS_ID51 rig_is_model(rig, RIG_MODEL_ID51)

Wyświetl plik

@ -1940,7 +1940,8 @@ vfo_t HAMLIB_API vfo_fixup(RIG *rig, vfo_t vfo, split_t split)
__func__, funcname, linenum,
rig_strvfo(vfo), rig_strvfo(rig->state.current_vfo), split);
if (rig->caps->rig_model == RIG_MODEL_ID5100)
if (rig->caps->rig_model == RIG_MODEL_ID5100
|| rig->caps->rig_model == RIG_MODEL_IC9700)
{
return vfo; // no change to requested vfo
}