diff --git a/include/hamlib/rig.h b/include/hamlib/rig.h index 9e68bf9df..6fcf89f61 100644 --- a/include/hamlib/rig.h +++ b/include/hamlib/rig.h @@ -1076,6 +1076,7 @@ typedef uint64_t rig_level_e; #define RIG_LEVEL_TEMP_METER CONSTANT_64BIT_FLAG(48) /*!< \c TEMP_METER -- arg float (C, centigrade) */ #define RIG_LEVEL_BAND_SELECT CONSTANT_64BIT_FLAG(49) /*!< \c BAND_SELECT -- arg enum BAND_ENUM */ #define RIG_LEVEL_USB_AF CONSTANT_64BIT_FLAG(50) /*!< \c ACC/USB AF output level */ +#define RIG_LEVEL_USB_AF_INPUT CONSTANT_64BIT_FLAG(51) /*!< \c ACC/USB AF output level */ #define RIG_LEVEL_AGC_TIME CONSTANT_64BIT_FLAG(51) /*!< \c AGC_TIME -- in seconds, rig dependent */ #define RIG_LEVEL_52 CONSTANT_64BIT_FLAG(52) /*!< \c Future use */ #define RIG_LEVEL_53 CONSTANT_64BIT_FLAG(53) /*!< \c Future use */ diff --git a/rigs/kenwood/level_gran_kenwood.h b/rigs/kenwood/level_gran_kenwood.h index ac28684bc..c922e7d37 100644 --- a/rigs/kenwood/level_gran_kenwood.h +++ b/rigs/kenwood/level_gran_kenwood.h @@ -40,4 +40,6 @@ [LVL_VOXGAIN] = { .min = { .f = .0 }, .max = { .f = 1 }, .step = { .f = 1.0f/100.0f } }, [LVL_ANTIVOX] = { .min = { .f = .0 }, .max = { .f = 1 }, .step = { .f = 1.0f/100.0f } }, [LVL_ALC] = { .min = { .f = .0 }, .max = { .f = 1 }, .step = { .f = 1.0f/100.0f } }, + [LVL_USB_AF] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/9.0f } }, + [LVL_USB_AF_INPUT] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/9.0f } }, diff --git a/rigs/kenwood/ts590.c b/rigs/kenwood/ts590.c index 97159f230..20dea7d0b 100644 --- a/rigs/kenwood/ts590.c +++ b/rigs/kenwood/ts590.c @@ -40,11 +40,11 @@ #define TS590_LEVEL_GET (RIG_LEVEL_RFPOWER|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_SQL|RIG_LEVEL_AGC|RIG_LEVEL_MICGAIN|RIG_LEVEL_STRENGTH|RIG_LEVEL_KEYSPD|RIG_LEVEL_CWPITCH| \ RIG_LEVEL_MONITOR_GAIN|RIG_LEVEL_NB|RIG_LEVEL_NR|RIG_LEVEL_PREAMP|RIG_LEVEL_COMP|RIG_LEVEL_ATT|RIG_LEVEL_VOXDELAY|RIG_LEVEL_VOXGAIN|RIG_LEVEL_BKIN_DLYMS| \ - RIG_LEVEL_SWR|RIG_LEVEL_COMP_METER|RIG_LEVEL_ALC|RIG_LEVEL_RFPOWER_METER|RIG_LEVEL_SLOPE_HIGH|RIG_LEVEL_SLOPE_LOW) + RIG_LEVEL_SWR|RIG_LEVEL_COMP_METER|RIG_LEVEL_ALC|RIG_LEVEL_RFPOWER_METER|RIG_LEVEL_SLOPE_HIGH|RIG_LEVEL_SLOPE_LOW|RIG_LEVEL_USB_AF|RIG_LEVEL_USB_AF_INPUT) #define TS590_LEVEL_SET (RIG_LEVEL_RFPOWER|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_SQL|RIG_LEVEL_AGC|RIG_LEVEL_MICGAIN|RIG_LEVEL_KEYSPD|RIG_LEVEL_CWPITCH| \ RIG_LEVEL_MONITOR_GAIN|RIG_LEVEL_NB|RIG_LEVEL_NR|RIG_LEVEL_PREAMP|RIG_LEVEL_COMP|RIG_LEVEL_ATT|RIG_LEVEL_VOXDELAY|RIG_LEVEL_VOXGAIN|RIG_LEVEL_BKIN_DLYMS| \ - RIG_LEVEL_METER|RIG_LEVEL_SLOPE_HIGH|RIG_LEVEL_SLOPE_LOW) + RIG_LEVEL_METER|RIG_LEVEL_SLOPE_HIGH|RIG_LEVEL_SLOPE_LOW|RIG_LEVEL_USB_AF|RIG_LEVEL_USB_AF_INPUT) #define TS590_FUNC_ALL (RIG_FUNC_NB|RIG_FUNC_COMP|RIG_FUNC_VOX|RIG_FUNC_NR|RIG_FUNC_NR|RIG_FUNC_BC|RIG_FUNC_BC2|RIG_FUNC_RIT|RIG_FUNC_XIT| \ RIG_FUNC_TUNER|RIG_FUNC_MON|RIG_FUNC_FBKIN|RIG_FUNC_LOCK) @@ -94,6 +94,8 @@ #define TOK_LEVEL_TX_SIDETONE_VOLUME TOKEN_BACKEND(108) #define TOK_LEVEL_ACC2_AUDIO_INPUT_LEVEL TOKEN_BACKEND(109) #define TOK_LEVEL_ACC2_AUDIO_OUTPUT_LEVEL TOKEN_BACKEND(110) +// these two USB_AUDIO items are being kept for backwards compatibility +// replaced by RIG_LEVEL_USB_AF and RIG_LEVEL_USB_AF_INPUT #define TOK_LEVEL_USB_AUDIO_INPUT_LEVEL TOKEN_BACKEND(113) #define TOK_LEVEL_USB_AUDIO_OUTPUT_LEVEL TOKEN_BACKEND(114) #define TOK_LEVEL_DSP_TX_SSB_AM_LOW_CUT_FILTER TOKEN_BACKEND(115) @@ -644,13 +646,23 @@ static int ts590_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) struct kenwood_priv_data *priv = rig->state.priv; char ackbuf[50]; size_t ack_len, ack_len_expected; - int levelint; + int levelint = 0; int retval; ENTERFUNC; switch (level) { + case RIG_LEVEL_USB_AF: + retval = ts590_get_ex_menu(rig, 65, 1, &levelint); + val->f = levelint / 9.0; + return retval; + + case RIG_LEVEL_USB_AF_INPUT: + retval = ts590_get_ex_menu(rig, 64, 1, &levelint); + val->f = levelint / 9.0; + return retval; + case RIG_LEVEL_AF: return kenwood_get_level(rig, vfo, level, val); @@ -1263,7 +1275,17 @@ static int ts590_set_ext_level(RIG *rig, vfo_t vfo, token_t token, value_t val) break; - case TOK_LEVEL_USB_AUDIO_INPUT_LEVEL: + case RIG_LEVEL_USB_AF_INPUT: // this one expect 0-1.0 levels + if (val.f > 1.0) + { + rig_debug(RIG_DEBUG_WARN, "%s: Clipping USB AF input level to 1.0\n", __func__); + val.f = 9; + } + else + { + val.f = val.f * 9; + } + case TOK_LEVEL_USB_AUDIO_INPUT_LEVEL: // keep for backwards compatibility if (val.f < 0 || val.f > 9) { RETURNFUNC(-RIG_EINVAL); @@ -1280,7 +1302,17 @@ static int ts590_set_ext_level(RIG *rig, vfo_t vfo, token_t token, value_t val) break; - case TOK_LEVEL_USB_AUDIO_OUTPUT_LEVEL: + case RIG_LEVEL_USB_AF: + if (val.f > 1.0) + { + rig_debug(RIG_DEBUG_WARN, "%s: Clipping USB AF output level to 1.0\n", __func__); + val.f = 9; + } + else + { + val.f = val.f * 9; + } + case TOK_LEVEL_USB_AUDIO_OUTPUT_LEVEL: // keep for backwards compatibility if (val.f < 0 || val.f > 9) { RETURNFUNC(-RIG_EINVAL); @@ -1562,7 +1594,7 @@ const struct rig_caps ts590_caps = RIG_MODEL(RIG_MODEL_TS590S), .model_name = "TS-590S", .mfg_name = "Kenwood", - .version = BACKEND_VER ".7", + .version = BACKEND_VER ".8", .copyright = "LGPL", .status = RIG_STATUS_STABLE, .rig_type = RIG_TYPE_TRANSCEIVER, diff --git a/src/idx_builtin.h b/src/idx_builtin.h index 4a607189c..fdea23017 100644 --- a/src/idx_builtin.h +++ b/src/idx_builtin.h @@ -139,6 +139,8 @@ #define LVL_SWR setting2idx_builtin(RIG_LEVEL_SWR) #define LVL_ALC setting2idx_builtin(RIG_LEVEL_ALC) #define LVL_STRENGTH setting2idx_builtin(RIG_LEVEL_STRENGTH) +#define LVL_USB_AF setting2idx_builtin(RIG_LEVEL_USB_AF) +#define LVL_USB_AF_INPUT setting2idx_builtin(RIG_LEVEL_USB_AF_INPUT) /*#define LVL_BWC setting2idx_builtin(RIG_LEVEL_BWC)*/ #define LVL_RFPOWER_METER setting2idx_builtin(RIG_LEVEL_RFPOWER_METER) diff --git a/src/misc.c b/src/misc.c index e62f4ee5c..2a13709dd 100644 --- a/src/misc.c +++ b/src/misc.c @@ -991,6 +991,7 @@ static const struct { RIG_LEVEL_TEMP_METER, "TEMP_METER" }, { RIG_LEVEL_BAND_SELECT, "BAND_SELECT" }, { RIG_LEVEL_USB_AF, "USB_AF" }, + { RIG_LEVEL_USB_AF_INPUT, "USB_AF_INPUT" }, { RIG_LEVEL_AGC_TIME, "AGC_TIME" }, { RIG_LEVEL_NONE, "" }, };