Prevent IC9700 from using 0x25 0x26 commands when in satmode

https://github.com/Hamlib/Hamlib/issues/1059
This commit is contained in:
Mike Black W9MDB 2022-06-29 15:40:41 -05:00
parent f4d0e3e402
commit cd2b734150
2 changed files with 11 additions and 4 deletions

View File

@ -1233,6 +1233,7 @@ int icom_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
int freq_len, ack_len = sizeof(ackbuf), retval; int freq_len, ack_len = sizeof(ackbuf), retval;
int cmd, subcmd; int cmd, subcmd;
freq_t curr_freq; freq_t curr_freq;
int is_9700_exception = (rig->caps->rig_model == RIG_MODEL_IC9700) && rig->state.cache.satmode != 0;
rig_debug(RIG_DEBUG_VERBOSE, "%s called %s=%" PRIfreq "\n", __func__, rig_debug(RIG_DEBUG_VERBOSE, "%s called %s=%" PRIfreq "\n", __func__,
rig_strvfo(vfo), freq); rig_strvfo(vfo), freq);
@ -1260,7 +1261,8 @@ int icom_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
#endif #endif
if (!(rig->caps->targetable_vfo & RIG_TARGETABLE_FREQ))
if (!(rig->caps->targetable_vfo & RIG_TARGETABLE_FREQ) || is_9700_exception)
{ {
TRACE; TRACE;
rig_debug(RIG_DEBUG_TRACE, "%s: set_vfo_curr=%s\n", __func__, rig_debug(RIG_DEBUG_TRACE, "%s: set_vfo_curr=%s\n", __func__,
@ -1287,7 +1289,7 @@ int icom_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
to_bcd(freqbuf, freq, freq_len * 2); to_bcd(freqbuf, freq, freq_len * 2);
// mike // mike
if (rig->caps->targetable_vfo & RIG_TARGETABLE_FREQ) if (rig->caps->targetable_vfo & RIG_TARGETABLE_FREQ && !is_9700_exception)
{ {
vfo_t vfo_unselected = RIG_VFO_B | RIG_VFO_SUB | RIG_VFO_SUB_B | RIG_VFO_MAIN_B vfo_t vfo_unselected = RIG_VFO_B | RIG_VFO_SUB | RIG_VFO_SUB_B | RIG_VFO_MAIN_B
| RIG_VFO_OTHER; | RIG_VFO_OTHER;
@ -2031,11 +2033,15 @@ static int icom_set_mode_x26(RIG *rig, vfo_t vfo, rmode_t mode, int datamode,
unsigned char buf[3]; unsigned char buf[3];
unsigned char ackbuf[MAXFRAMELEN]; unsigned char ackbuf[MAXFRAMELEN];
int ack_len = sizeof(ackbuf); int ack_len = sizeof(ackbuf);
int is_9700_exception = (rig->caps->rig_model == RIG_MODEL_IC9700) && rig->state.cache.satmode != 0;
ENTERFUNC; ENTERFUNC;
if (is_9700_exception) { RETURNFUNC(icom_set_mode(rig,vfo,mode, RIG_PASSBAND_NOCHANGE)); }
if (priv->x26cmdfails) { RETURNFUNC(-RIG_ENAVAIL); } if (priv->x26cmdfails) { RETURNFUNC(-RIG_ENAVAIL); }
int cmd2 = 0x26; int cmd2 = 0x26;
int subcmd2 = 0x00; int subcmd2 = 0x00;
vfo_t vfo_unselected = RIG_VFO_B | RIG_VFO_SUB | RIG_VFO_SUB_B | RIG_VFO_MAIN_B vfo_t vfo_unselected = RIG_VFO_B | RIG_VFO_SUB | RIG_VFO_SUB_B | RIG_VFO_MAIN_B
@ -2661,7 +2667,6 @@ int icom_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
} }
} }
RETURNFUNC2(RIG_OK); RETURNFUNC2(RIG_OK);
} }
@ -9582,6 +9587,7 @@ DECLARE_INITRIG_BACKEND(icom)
rig_register(&ic271_caps); rig_register(&ic271_caps);
rig_register(&ic275_caps); rig_register(&ic275_caps);
rig_register(&ic375_caps);
rig_register(&ic471_caps); rig_register(&ic471_caps);
rig_register(&ic475_caps); rig_register(&ic475_caps);
rig_register(&ic575_caps); rig_register(&ic575_caps);

View File

@ -30,7 +30,7 @@
#include <sys/time.h> #include <sys/time.h>
#endif #endif
#define BACKEND_VER "20220601" #define BACKEND_VER "20220629"
#define ICOM_IS_SECONDARY_VFO(vfo) ((vfo) & (RIG_VFO_B | RIG_VFO_SUB | RIG_VFO_SUB_B | RIG_VFO_MAIN_B)) #define ICOM_IS_SECONDARY_VFO(vfo) ((vfo) & (RIG_VFO_B | RIG_VFO_SUB | RIG_VFO_SUB_B | RIG_VFO_MAIN_B))
#define ICOM_GET_VFO_NUMBER(vfo) (ICOM_IS_SECONDARY_VFO(vfo) ? 0x01 : 0x00) #define ICOM_GET_VFO_NUMBER(vfo) (ICOM_IS_SECONDARY_VFO(vfo) ? 0x01 : 0x00)
@ -465,6 +465,7 @@ extern const struct rig_caps icr9000_caps;
extern const struct rig_caps icr9500_caps; extern const struct rig_caps icr9500_caps;
extern const struct rig_caps ic271_caps; extern const struct rig_caps ic271_caps;
extern const struct rig_caps ic275_caps; extern const struct rig_caps ic275_caps;
extern const struct rig_caps ic375_caps;
extern const struct rig_caps ic471_caps; extern const struct rig_caps ic471_caps;
extern const struct rig_caps ic475_caps; extern const struct rig_caps ic475_caps;
extern const struct rig_caps ic575_caps; extern const struct rig_caps ic575_caps;