From fde9ad706c5aa3b95cb4a2e3fbcc7201f331cc78 Mon Sep 17 00:00:00 2001 From: Mike Black W9MDB Date: Tue, 8 Nov 2022 10:47:57 -0600 Subject: [PATCH] Fix IC-7300 rig power on hopefully https://github.com/Hamlib/Hamlib/issues/1142 --- rigs/icom/icom.c | 6 ++++++ simulators/simicom9700.c | 9 ++++++++- src/rig.c | 2 ++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/rigs/icom/icom.c b/rigs/icom/icom.c index 2dd50a071..82a785f59 100644 --- a/rigs/icom/icom.c +++ b/rigs/icom/icom.c @@ -8047,6 +8047,8 @@ int icom_get_powerstat(RIG *rig, powerstat_t *status) ENTERFUNC; + *status = RIG_POWER_OFF; // default return until proven otherwise + /* r75 has no way to get power status, so fake it */ if (rig->caps->rig_model == RIG_MODEL_ICR75) { @@ -8070,7 +8072,11 @@ int icom_get_powerstat(RIG *rig, powerstat_t *status) if (rig->caps->rig_model == RIG_MODEL_IC7300) { freq_t freq; + int retrysave = rig->caps->retry; + rig->caps->retry = 0; int retval = rig_get_freq(rig, RIG_VFO_A, &freq); + rig->caps->retry = retrysave; + *status = retval==RIG_OK ? RIG_POWER_ON : RIG_POWER_OFF; return retval; } else diff --git a/simulators/simicom9700.c b/simulators/simicom9700.c index f19be87c9..8a080eb06 100644 --- a/simulators/simicom9700.c +++ b/simulators/simicom9700.c @@ -36,6 +36,7 @@ int ptt = 0; int satmode = 0; int agc_time = 1; int ovf_status = 0; +int powerstat = 0; void dumphex(unsigned char *buf, int n) { @@ -99,7 +100,8 @@ void frameParse(int fd, unsigned char *frame, int len) } frame[10] = 0xfd; - n = write(fd, frame, 11); + if (powerstat) + n = write(fd, frame, 11); break; case 0x04: @@ -524,7 +526,12 @@ int main(int argc, char **argv) fd = openPort(argv[1]); } + if (powerstat) frameParse(fd, buf, len); + else + { + usleep(1000*1000); + } rigStatus(); } diff --git a/src/rig.c b/src/rig.c index 7e07af18d..ee997c1ff 100644 --- a/src/rig.c +++ b/src/rig.c @@ -5860,9 +5860,11 @@ int HAMLIB_API rig_get_powerstat(RIG *rig, powerstat_t *status) if (rig->caps->get_powerstat == NULL) { + *status = RIG_POWER_ON; // default to power if not available RETURNFUNC(-RIG_ENAVAIL); } + *status = RIG_POWER_OFF; // default now to power off until proven otherwise in get_powerstat HAMLIB_TRACE; retcode = rig->caps->get_powerstat(rig, status); RETURNFUNC(retcode);