diff --git a/rigs/icom/ic7300.c b/rigs/icom/ic7300.c index e47c3c848..39c9313ec 100644 --- a/rigs/icom/ic7300.c +++ b/rigs/icom/ic7300.c @@ -1832,8 +1832,8 @@ int ic7300_set_parm(RIG *rig, setting_t parm, value_t val) int ic7300_get_parm(RIG *rig, setting_t parm, value_t *val) { unsigned char prmbuf[MAXFRAMELEN], resbuf[MAXFRAMELEN]; - int prm_len, res_len; - int prm_cn, prm_sc; + int prm_len = 0, res_len; + int prm_cn = 0, prm_sc = 0; int icom_val = 0; int cmdhead; int retval; diff --git a/rigs/icom/ic765.c b/rigs/icom/ic765.c index 9ce3d6586..eca4708c6 100644 --- a/rigs/icom/ic765.c +++ b/rigs/icom/ic765.c @@ -82,12 +82,9 @@ const struct rig_caps ic765_caps = .has_set_level = RIG_LEVEL_NONE, .has_get_parm = RIG_PARM_NONE, .has_set_parm = RIG_PARM_NONE, -#if 0 .level_gran = { -#include "level_gran_icom.h" }, -#endif .parm_gran = {}, .ctcss_list = NULL, .dcs_list = NULL, diff --git a/rigs/icom/ic821h.c b/rigs/icom/ic821h.c index db5ac2c55..d6b9f5fdc 100644 --- a/rigs/icom/ic821h.c +++ b/rigs/icom/ic821h.c @@ -57,7 +57,7 @@ static const struct icom_priv_caps ic821h_priv_caps = int ic821h_set_split_vfo(RIG *rig, vfo_t vfo, split_t split, vfo_t tx_vfo) { struct icom_priv_data *priv = (struct icom_priv_data *) rig->state.priv; - int retval; + int retval = -RIG_EINTERNAL; ENTERFUNC; rig_debug(RIG_DEBUG_TRACE, "%s: vfo=%s, split=%d, tx_vfo=%s\n", __func__, diff --git a/rigs/icom/icom.c b/rigs/icom/icom.c index 78932cb60..8f2bc165a 100644 --- a/rigs/icom/icom.c +++ b/rigs/icom/icom.c @@ -8286,6 +8286,7 @@ int icom_get_powerstat(RIG *rig, powerstat_t *status) RIG_POWER_ON : RIG_POWER_OFF; } + HAMLIB_TRACE; if (RIG_IS_IC2730 || RIG_IS_IC705 || RIG_IS_IC7100 @@ -8301,16 +8302,27 @@ int icom_get_powerstat(RIG *rig, powerstat_t *status) freq_t freq; short retry_save = rig->state.rigport.retry; short timeout_retry_save = rig->state.rigport.timeout_retry; + HAMLIB_TRACE; rig->state.rigport.retry = 0; rig->state.rigport.timeout_retry = 0; retval = rig_get_freq(rig, RIG_VFO_A, &freq); + if (retval == -RIG_ETIMEOUT) + { // then rig must be turned off + HAMLIB_TRACE; + rig_debug(RIG_DEBUG_WARN, "%s: get freq failed...assuming power is off\n", __func__); + rig->state.powerstat = RIG_POWER_OFF; + return RIG_OK; // returning RIG_OK here makes the rig->state reflect POWER_OFF + } + HAMLIB_TRACE; + rig->state.rigport.retry = retry_save; rig->state.rigport.timeout_retry = timeout_retry_save; *status = retval == RIG_OK ? RIG_POWER_ON : RIG_POWER_OFF; + rig->state.powerstat = *status; return retval; } else @@ -8318,6 +8330,12 @@ int icom_get_powerstat(RIG *rig, powerstat_t *status) retval = icom_transaction(rig, C_SET_PWR, -1, NULL, 0, ackbuf, &ack_len); + if (retval == -RIG_ETIMEOUT) + { // then rig must be turned off + rig_debug(RIG_DEBUG_WARN, "%s: get powerstat failed...assuming power is off\n", __func__); + rig->state.powerstat = RIG_POWER_OFF; + return RIG_OK; // returning RIG_OK here makes the rig->state reflect POWER_OFF + } if (retval != RIG_OK) { RETURNFUNC(retval); @@ -8551,7 +8569,7 @@ int icom_get_ant(RIG *rig, vfo_t vfo, ant_t ant, value_t *option, ant_t *ant_curr, ant_t *ant_tx, ant_t *ant_rx) { unsigned char ackbuf[MAXFRAMELEN]; - int ack_len = sizeof(ackbuf), retval; + int ack_len = sizeof(ackbuf), retval = -RIG_EINTERNAL; struct icom_priv_caps *priv_caps = (struct icom_priv_caps *) rig->caps->priv;