diff --git a/rigs/kenwood/ts890s.c b/rigs/kenwood/ts890s.c index 475c73bc0..ebdb3429f 100644 --- a/rigs/kenwood/ts890s.c +++ b/rigs/kenwood/ts890s.c @@ -68,32 +68,20 @@ int kenwood_ts890_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) /* possible values for TS890 0(=off), 1(=slow), 2(=mid), 3(=fast), 4(=off/Last) */ rig_debug(RIG_DEBUG_VERBOSE, "%s TS890S RIG_LEVEL_AGC\n", __func__); - switch (val.i) - { - case RIG_AGC_OFF: - kenwood_val = 0; - break; - - case RIG_AGC_SLOW: - kenwood_val = 1; - break; - - case RIG_AGC_MEDIUM: - kenwood_val = 2; - break; - - case RIG_AGC_FAST: - kenwood_val = 3; - break; - - case RIG_AGC_AUTO: - kenwood_val = 4; - break; - - default: - rig_debug(RIG_DEBUG_ERR, "%s: unsupported agc value", __func__); + kenwood_val = -1; /* Flag invalid value */ + for (int j = 0; j < rig->caps->agc_level_count; j++) + { + if (val.i == rig->caps->agc_levels[j]) + { + kenwood_val = j; + break; + } + } + if ( kenwood_val < 0) + { + rig_debug(RIG_DEBUG_ERR, "%s: unsupported agc value:%d\n", __func__, val.i); return -RIG_EINVAL; - } + } SNPRINTF(levelbuf, sizeof(levelbuf), "GC%d", kenwood_val); break; @@ -228,47 +216,23 @@ int kenwood_ts890_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) return RIG_OK; case RIG_LEVEL_AGC: - retval = kenwood_transaction(rig, "GC", ackbuf, sizeof(ackbuf)); - ack_len_expected = 3; + retval = kenwood_safe_transaction(rig, "GC", ackbuf, sizeof(ackbuf), 3); if (RIG_OK != retval) { return retval; } - ack_len = strlen(ackbuf); - - if (ack_len != ack_len_expected) - { + levelint = ackbuf[2] - '0'; /* atoi */ + if (levelint >= 0 && levelint < rig->caps->agc_level_count) + { + val->i = rig->caps->agc_levels[levelint]; + } + else + { + rig_debug(RIG_DEBUG_ERR, "%s: unknown agc value: %s\n", __func__, ackbuf); return -RIG_EPROTO; - } - - switch (ackbuf[ack_len_expected - 1]) - { - case '0': - val->i = RIG_AGC_OFF; - break; - - case '1': - val->i = RIG_AGC_SLOW; - - break; - - case '2': - val->i = RIG_AGC_MEDIUM; - break; - - case '3': - val->i = RIG_AGC_FAST; - break; - - case '4': - val->i = RIG_AGC_AUTO; - break; - - default: - return -RIG_EPROTO; - } + } return RIG_OK;