diff --git a/include/hamlib/rig.h b/include/hamlib/rig.h index 7e6c97db8..badebe03f 100644 --- a/include/hamlib/rig.h +++ b/include/hamlib/rig.h @@ -941,7 +941,7 @@ typedef uint64_t rig_level_e; #define RIG_LEVEL_SPECTRUM_SPEED CONSTANT_64BIT_FLAG(44) /*!< \c SPECTRUM_SPEED -- Spectrum scope update speed, arg int (highest is fastest, define rig-specific granularity) */ #define RIG_LEVEL_SPECTRUM_REF CONSTANT_64BIT_FLAG(45) /*!< \c SPECTRUM_REF -- Spectrum scope reference display level, arg float (dB, define rig-specific granularity) */ #define RIG_LEVEL_SPECTRUM_AVG CONSTANT_64BIT_FLAG(46) /*!< \c SPECTRUM_AVG -- Spectrum scope averaging mode, arg int (see struct rig_spectrum_avg_mode). Supported averaging modes defined in rig caps. */ -#define RIG_LEVEL_47 CONSTANT_64BIT_FLAG(47) /*!< \c Future use */ +#define RIG_LEVEL_SPECTRUM_ATT CONSTANT_64BIT_FLAG(47) /*!< \c SPECTRUM_ATT -- Spectrum scope attenuator, arg int (dB). Supported attenuator values defined in rig caps. */ #define RIG_LEVEL_48 CONSTANT_64BIT_FLAG(48) /*!< \c Future use */ #define RIG_LEVEL_49 CONSTANT_64BIT_FLAG(49) /*!< \c Future use */ #define RIG_LEVEL_50 CONSTANT_64BIT_FLAG(50) /*!< \c Future use */ @@ -1744,7 +1744,7 @@ struct rig_caps { tone_t *dcs_list; /*!< DCS code list, zero ended */ int preamp[HAMLIB_MAXDBLSTSIZ]; /*!< Preamp list in dB, 0 terminated */ - int attenuator[HAMLIB_MAXDBLSTSIZ]; /*!< Preamp list in dB, 0 terminated */ + int attenuator[HAMLIB_MAXDBLSTSIZ]; /*!< Attenuator list in dB, 0 terminated */ shortfreq_t max_rit; /*!< max absolute RIT */ shortfreq_t max_xit; /*!< max absolute XIT */ shortfreq_t max_ifshift; /*!< max absolute IF-SHIFT */ @@ -1794,6 +1794,7 @@ struct rig_caps { enum rig_spectrum_mode_e spectrum_modes[HAMLIB_MAX_SPECTRUM_MODES]; /*!< Supported spectrum scope modes. Last entry must be RIG_SPECTRUM_MODE_NONE. */ freq_t spectrum_spans[HAMLIB_MAX_SPECTRUM_SPANS]; /*!< Supported spectrum scope frequency spans in Hz in center mode. Last entry must be 0. */ struct rig_spectrum_avg_mode spectrum_avg_modes[HAMLIB_MAX_SPECTRUM_AVG_MODES]; /*!< Supported spectrum scope averaging modes. Last entry must have NULL name. */ + int spectrum_attenuator[HAMLIB_MAXDBLSTSIZ]; /*!< Spectrum attenuator list in dB, 0 terminated */ const struct confparams *cfgparams; /*!< Configuration parameters. */ const rig_ptr_t priv; /*!< Private data. */ diff --git a/rigs/icom/ic7000.c b/rigs/icom/ic7000.c index a14eaf74d..25b8cbfa4 100644 --- a/rigs/icom/ic7000.c +++ b/rigs/icom/ic7000.c @@ -24,17 +24,14 @@ #include "config.h" #endif -#include #include /* String function definitions */ #include -#include "token.h" #include "idx_builtin.h" #include "icom.h" #include "icom_defs.h" #include "frame.h" -#include "misc.h" #include "bandplan.h" #define IC7000_ALL_RX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_FM|RIG_MODE_WFM) @@ -233,11 +230,13 @@ const struct rig_caps ic7000_caps = .parm_gran = {}, .ctcss_list = common_ctcss_list, .dcs_list = common_dcs_list, - .preamp = { 10, RIG_DBLST_END, }, /* FIXME: TBC it's a guess*/ + .preamp = { 10, RIG_DBLST_END, }, /* FIXME: TBC it's a guess */ .attenuator = { 12, RIG_DBLST_END, }, .max_rit = Hz(9999), .max_xit = Hz(9999), .max_ifshift = Hz(0), /* TODO */ + .agc_level_count = 3, + .agc_levels = { RIG_AGC_FAST, RIG_AGC_MEDIUM, RIG_AGC_SLOW }, .targetable_vfo = 0, .vfo_ops = IC7000_VFO_OPS, .scan_ops = IC7000_SCAN_OPS, diff --git a/rigs/icom/ic7100.c b/rigs/icom/ic7100.c index c4f09c1b3..d29550ce3 100644 --- a/rigs/icom/ic7100.c +++ b/rigs/icom/ic7100.c @@ -244,11 +244,13 @@ const struct rig_caps ic7100_caps = .parm_gran = {}, .ctcss_list = common_ctcss_list, .dcs_list = common_dcs_list, - .preamp = {20, RIG_DBLST_END, }, + .preamp = { 1, 2, RIG_DBLST_END, }, .attenuator = {20, RIG_DBLST_END, }, .max_rit = kHz(9.999), .max_xit = kHz(9.999), .max_ifshift = Hz(0), + .agc_level_count = 3, + .agc_levels = { RIG_AGC_FAST, RIG_AGC_MEDIUM, RIG_AGC_SLOW }, .targetable_vfo = 0, .vfo_ops = IC7100_VFO_OPS, .scan_ops = IC7100_SCAN_OPS, diff --git a/rigs/icom/ic7200.c b/rigs/icom/ic7200.c index f54430a64..ee48205e8 100644 --- a/rigs/icom/ic7200.c +++ b/rigs/icom/ic7200.c @@ -163,11 +163,13 @@ const struct rig_caps ic7200_caps = .parm_gran = {}, .ctcss_list = NULL, .dcs_list = NULL, - .preamp = { 10, RIG_DBLST_END, }, /* FIXME: TBC it's a guess*/ + .preamp = { 10, RIG_DBLST_END, }, /* FIXME: TBC it's a guess */ .attenuator = { 20, RIG_DBLST_END, }, /* value taken from p.45 of manual*/ .max_rit = Hz(9999), .max_xit = Hz(9999), .max_ifshift = Hz(0), + .agc_level_count = 3, + .agc_levels = { RIG_AGC_OFF, RIG_AGC_FAST, RIG_AGC_SLOW }, .targetable_vfo = 0, .vfo_ops = IC7200_VFO_OPS, .scan_ops = IC7200_SCAN_OPS, diff --git a/rigs/icom/ic7300.c b/rigs/icom/ic7300.c index 2c5413bda..6ef28f27c 100644 --- a/rigs/icom/ic7300.c +++ b/rigs/icom/ic7300.c @@ -798,7 +798,7 @@ const struct rig_caps ic9700_caps = .extlevels = icom_ext_levels, .ctcss_list = full_ctcss_list, .dcs_list = NULL, - .preamp = { 1, 2, 3, RIG_DBLST_END, }, + .preamp = { 1, 2, RIG_DBLST_END, }, .attenuator = { 10, RIG_DBLST_END, }, .max_rit = Hz(9999), .max_xit = Hz(9999), diff --git a/rigs/icom/ic7410.c b/rigs/icom/ic7410.c index d4ffdfd24..fa94fdb6d 100644 --- a/rigs/icom/ic7410.c +++ b/rigs/icom/ic7410.c @@ -167,6 +167,8 @@ const struct rig_caps ic7410_caps = .max_rit = Hz(9999), .max_xit = Hz(9999), .max_ifshift = Hz(0), + .agc_level_count = 4, + .agc_levels = { RIG_AGC_OFF, RIG_AGC_FAST, RIG_AGC_MEDIUM, RIG_AGC_SLOW }, .targetable_vfo = 0, .vfo_ops = IC7410_VFO_OPS, .scan_ops = IC7410_SCAN_OPS, diff --git a/rigs/icom/ic756.c b/rigs/icom/ic756.c index a434f1448..bcdb0baaf 100644 --- a/rigs/icom/ic756.c +++ b/rigs/icom/ic756.c @@ -23,11 +23,9 @@ #include "config.h" #endif -#include #include /* String function definitions */ #include -#include "token.h" #include "idx_builtin.h" #include "icom.h" @@ -36,7 +34,6 @@ #include "misc.h" #include "bandplan.h" - #define IC756_ALL_RX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_FM) #define IC756_1HZ_TS_MODES IC756_ALL_RX_MODES @@ -182,6 +179,8 @@ const struct rig_caps ic756_caps = .max_rit = Hz(9999), .max_xit = Hz(0), .max_ifshift = Hz(0), + .agc_level_count = 3, + .agc_levels = { RIG_AGC_FAST, RIG_AGC_MEDIUM, RIG_AGC_SLOW }, .targetable_vfo = 0, .vfo_ops = IC756_VFO_OPS, .scan_ops = IC756_SCAN_OPS, @@ -344,6 +343,8 @@ const struct rig_caps ic756pro_caps = .max_rit = Hz(9999), .max_xit = Hz(0), .max_ifshift = Hz(0), + .agc_level_count = 3, + .agc_levels = { RIG_AGC_FAST, RIG_AGC_MEDIUM, RIG_AGC_SLOW }, .targetable_vfo = 0, .vfo_ops = IC756_VFO_OPS, .scan_ops = IC756_SCAN_OPS, @@ -581,6 +582,8 @@ const struct rig_caps ic756pro2_caps = .max_rit = Hz(9999), .max_xit = Hz(9999), .max_ifshift = Hz(0), + .agc_level_count = 3, + .agc_levels = { RIG_AGC_FAST, RIG_AGC_MEDIUM, RIG_AGC_SLOW }, .targetable_vfo = 0, .vfo_ops = IC756_VFO_OPS, .scan_ops = IC756_SCAN_OPS, @@ -1011,6 +1014,8 @@ const struct rig_caps ic756pro3_caps = .max_rit = Hz(9999), .max_xit = Hz(9999), .max_ifshift = Hz(0), + .agc_level_count = 3, + .agc_levels = { RIG_AGC_FAST, RIG_AGC_MEDIUM, RIG_AGC_SLOW }, .targetable_vfo = 0, .vfo_ops = IC756_VFO_OPS | RIG_OP_TUNE, .scan_ops = IC756_SCAN_OPS, diff --git a/rigs/icom/ic7600.c b/rigs/icom/ic7600.c index c8340caa6..f16866610 100644 --- a/rigs/icom/ic7600.c +++ b/rigs/icom/ic7600.c @@ -205,11 +205,13 @@ const struct rig_caps ic7600_caps = .extparms = icom_ext_parms, .ctcss_list = common_ctcss_list, .dcs_list = NULL, - .preamp = { 10, 20, RIG_DBLST_END, }, /* FIXME: TBC */ + .preamp = { 10, 16, RIG_DBLST_END, }, .attenuator = { 6, 12, 18, RIG_DBLST_END, }, .max_rit = Hz(9999), .max_xit = Hz(9999), .max_ifshift = Hz(0), + .agc_level_count = 3, + .agc_levels = { RIG_AGC_FAST, RIG_AGC_MEDIUM, RIG_AGC_SLOW }, .targetable_vfo = 0, .vfo_ops = IC7600_VFO_OPS, .scan_ops = IC7600_SCAN_OPS, diff --git a/rigs/icom/ic7610.c b/rigs/icom/ic7610.c index d25eed8e2..50b80ca42 100644 --- a/rigs/icom/ic7610.c +++ b/rigs/icom/ic7610.c @@ -286,7 +286,7 @@ const struct rig_caps ic7610_caps = .extlevels = icom_ext_levels, .ctcss_list = common_ctcss_list, .dcs_list = NULL, - .preamp = { 10, 20, RIG_DBLST_END, }, /* FIXME: TBC */ + .preamp = { 12, 20, RIG_DBLST_END, }, .attenuator = { 6, 12, 18, RIG_DBLST_END, }, .max_rit = Hz(9999), .max_xit = Hz(9999), diff --git a/rigs/icom/ic7700.c b/rigs/icom/ic7700.c index 0a1484533..168605977 100644 --- a/rigs/icom/ic7700.c +++ b/rigs/icom/ic7700.c @@ -23,7 +23,6 @@ #include "config.h" #endif -#include #include /* String function definitions */ #include @@ -32,8 +31,6 @@ #include "icom.h" #include "icom_defs.h" -#include "frame.h" -#include "misc.h" #include "bandplan.h" #define IC7700_OTHER_TX_MODES (RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_FM|RIG_MODE_PKTLSB|RIG_MODE_PKTUSB|RIG_MODE_PKTFM|RIG_MODE_PSK|RIG_MODE_PSKR) @@ -193,6 +190,8 @@ const struct rig_caps ic7700_caps = .max_rit = Hz(9999), .max_xit = Hz(9999), .max_ifshift = Hz(0), + .agc_level_count = 4, + .agc_levels = { RIG_AGC_OFF, RIG_AGC_FAST, RIG_AGC_MEDIUM, RIG_AGC_SLOW }, .targetable_vfo = 0, .vfo_ops = IC7700_VFO_OPS, .scan_ops = IC7700_SCAN_OPS, diff --git a/rigs/icom/ic7800.c b/rigs/icom/ic7800.c index 32d0dfec8..9409da3d3 100644 --- a/rigs/icom/ic7800.c +++ b/rigs/icom/ic7800.c @@ -23,7 +23,6 @@ #include "config.h" #endif -#include #include /* String function definitions */ #include @@ -32,8 +31,6 @@ #include "icom.h" #include "icom_defs.h" -#include "frame.h" -#include "misc.h" #include "bandplan.h" #define IC7800_ALL_RX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_FM|RIG_MODE_PSK|RIG_MODE_PSKR|RIG_MODE_PKTLSB|RIG_MODE_PKTUSB|RIG_MODE_PKTAM|RIG_MODE_PKTFM) @@ -191,11 +188,13 @@ const struct rig_caps ic7800_caps = .ext_tokens = ic7800_ext_tokens, .ctcss_list = common_ctcss_list, .dcs_list = NULL, - .preamp = { 10, 20, RIG_DBLST_END, }, /* FIXME: TBC */ + .preamp = { 10, 16, RIG_DBLST_END, }, .attenuator = { 3, 6, 9, 12, 15, 18, 21, RIG_DBLST_END, }, .max_rit = Hz(9999), .max_xit = Hz(9999), .max_ifshift = Hz(0), + .agc_level_count = 4, + .agc_levels = { RIG_AGC_OFF, RIG_AGC_FAST, RIG_AGC_MEDIUM, RIG_AGC_SLOW }, .targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE, .vfo_ops = IC7800_VFO_OPS, .scan_ops = IC7800_SCAN_OPS, diff --git a/rigs/icom/ic785x.c b/rigs/icom/ic785x.c index 1f9e7f2a0..813460d01 100644 --- a/rigs/icom/ic785x.c +++ b/rigs/icom/ic785x.c @@ -41,7 +41,7 @@ #define IC785x_FUNCS (RIG_FUNC_NB|RIG_FUNC_COMP|RIG_FUNC_VOX|RIG_FUNC_TONE|RIG_FUNC_TSQL|RIG_FUNC_SBKIN|RIG_FUNC_FBKIN|RIG_FUNC_NR|RIG_FUNC_MON|RIG_FUNC_MN|RIG_FUNC_ANF|RIG_FUNC_VSC|RIG_FUNC_LOCK|RIG_FUNC_RIT|RIG_FUNC_XIT|RIG_FUNC_TUNER|RIG_FUNC_APF|RIG_FUNC_DUAL_WATCH|RIG_FUNC_TRANSCEIVE|RIG_FUNC_SPECTRUM|RIG_FUNC_SPECTRUM_HOLD) -#define IC785x_LEVELS (RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_AGC|RIG_LEVEL_COMP|RIG_LEVEL_BKINDL|RIG_LEVEL_BALANCE|RIG_LEVEL_NR|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT|RIG_LEVEL_CWPITCH|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN|RIG_LEVEL_KEYSPD|RIG_LEVEL_NOTCHF_RAW|RIG_LEVEL_SQL|RIG_LEVEL_RAWSTR|RIG_LEVEL_STRENGTH|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_APF|RIG_LEVEL_VOXGAIN|RIG_LEVEL_ANTIVOX|RIG_LEVEL_VOXDELAY|RIG_LEVEL_SWR|RIG_LEVEL_ALC|RIG_LEVEL_RFPOWER_METER|RIG_LEVEL_RFPOWER_METER_WATTS|RIG_LEVEL_COMP_METER|RIG_LEVEL_VD_METER|RIG_LEVEL_ID_METER|RIG_LEVEL_MONITOR_GAIN|RIG_LEVEL_NB|RIG_LEVEL_SPECTRUM_MODE|RIG_LEVEL_SPECTRUM_SPAN|RIG_LEVEL_SPECTRUM_SPEED|RIG_LEVEL_SPECTRUM_REF|RIG_LEVEL_SPECTRUM_AVG|RIG_LEVEL_SPECTRUM_EDGE_LOW|RIG_LEVEL_SPECTRUM_EDGE_HIGH) +#define IC785x_LEVELS (RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_AGC|RIG_LEVEL_COMP|RIG_LEVEL_BKINDL|RIG_LEVEL_BALANCE|RIG_LEVEL_NR|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT|RIG_LEVEL_CWPITCH|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN|RIG_LEVEL_KEYSPD|RIG_LEVEL_NOTCHF_RAW|RIG_LEVEL_SQL|RIG_LEVEL_RAWSTR|RIG_LEVEL_STRENGTH|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_APF|RIG_LEVEL_VOXGAIN|RIG_LEVEL_ANTIVOX|RIG_LEVEL_VOXDELAY|RIG_LEVEL_SWR|RIG_LEVEL_ALC|RIG_LEVEL_RFPOWER_METER|RIG_LEVEL_RFPOWER_METER_WATTS|RIG_LEVEL_COMP_METER|RIG_LEVEL_VD_METER|RIG_LEVEL_ID_METER|RIG_LEVEL_MONITOR_GAIN|RIG_LEVEL_NB|RIG_LEVEL_SPECTRUM_MODE|RIG_LEVEL_SPECTRUM_SPAN|RIG_LEVEL_SPECTRUM_SPEED|RIG_LEVEL_SPECTRUM_REF|RIG_LEVEL_SPECTRUM_AVG|RIG_LEVEL_SPECTRUM_EDGE_LOW|RIG_LEVEL_SPECTRUM_EDGE_HIGH|RIG_LEVEL_SPECTRUM_ATT) #define IC785x_VFOS (RIG_VFO_MAIN|RIG_VFO_SUB|RIG_VFO_MEM) #define IC785x_PARMS (RIG_PARM_ANN|RIG_PARM_BACKLIGHT|RIG_PARM_TIME|RIG_PARM_BEEP) @@ -280,11 +280,13 @@ const struct rig_caps ic785x_caps = .extlevels = icom_ext_levels, .ctcss_list = common_ctcss_list, .dcs_list = NULL, - .preamp = { 10, 20, RIG_DBLST_END, }, /* FIXME: TBC */ + .preamp = { 12, 20, RIG_DBLST_END, }, .attenuator = { 3, 6, 9, 12, 15, 18, 21, RIG_DBLST_END, }, .max_rit = Hz(9999), .max_xit = Hz(9999), .max_ifshift = Hz(0), + .agc_level_count = 4, + .agc_levels = { RIG_AGC_OFF, RIG_AGC_FAST, RIG_AGC_MEDIUM, RIG_AGC_SLOW }, .agc_level_count = 3, .agc_levels = { RIG_AGC_FAST, RIG_AGC_MEDIUM, RIG_AGC_SLOW }, .targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE | RIG_TARGETABLE_SPECTRUM, @@ -415,6 +417,7 @@ const struct rig_caps ic785x_caps = .name = "4", }, }, + .spectrum_attenuator = { 10, 20, 30, RIG_DBLST_END, }, .cfgparams = icom_cfg_params, .set_conf = icom_set_conf, diff --git a/rigs/icom/icom.c b/rigs/icom/icom.c index 25c26c49e..b81609d35 100644 --- a/rigs/icom/icom.c +++ b/rigs/icom/icom.c @@ -2789,7 +2789,7 @@ int icom_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) if (i == HAMLIB_MAXDBLSTSIZ || rs->preamp[i] == 0) { - rig_debug(RIG_DEBUG_ERR, "%s: unsupported preamp set_level %ddB", + rig_debug(RIG_DEBUG_ERR, "%s: unsupported preamp set_level %ddB\n", __func__, val.i); RETURNFUNC(-RIG_EINVAL); } @@ -2937,7 +2937,7 @@ int icom_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) break; default: - rig_debug(RIG_DEBUG_ERR, "%s: unsupported LEVEL_AGC %d", + rig_debug(RIG_DEBUG_ERR, "%s: unsupported LEVEL_AGC %d\n", __func__, val.i); RETURNFUNC(-RIG_EINVAL); } @@ -3010,7 +3010,7 @@ int icom_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) icom_val = SCOPE_MODE_SCROLL_F; break; default: - rig_debug(RIG_DEBUG_ERR, "%s: unsupported spectrum mode %d", __func__, val.i); + rig_debug(RIG_DEBUG_ERR, "%s: unsupported spectrum mode %d\n", __func__, val.i); RETURNFUNC(-RIG_EINVAL); } @@ -3127,8 +3127,32 @@ int icom_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) break; } + case RIG_LEVEL_SPECTRUM_ATT: + lvl_cn = C_CTL_SCP; + lvl_sc = S_SCP_ATT; + cmd_len = 2; + + for (i = 0; i < HAMLIB_MAXDBLSTSIZ; i++) + { + if (rig->caps->spectrum_attenuator[i] == val.i) + { + break; + } + } + + if (val.i != 0 && (i == HAMLIB_MAXDBLSTSIZ || rig->caps->spectrum_attenuator[i] == 0)) + { + rig_debug(RIG_DEBUG_ERR, "%s: unsupported spectrum attenuator level %ddB\n", + __func__, val.i); + RETURNFUNC(-RIG_EINVAL); + } + + cmdbuf[0] = icom_get_spectrum_vfo(rig, vfo); + to_bcd(cmdbuf + 1, val.i, 5 * 2); + break; + default: - rig_debug(RIG_DEBUG_ERR, "%s: unsupported set_level %s", __func__, + rig_debug(RIG_DEBUG_ERR, "%s: unsupported set_level %s\n", __func__, rig_strlevel(level)); RETURNFUNC(-RIG_EINVAL); } @@ -3440,8 +3464,16 @@ int icom_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) break; } + case RIG_LEVEL_SPECTRUM_ATT: + lvl_cn = C_CTL_SCP; + lvl_sc = S_SCP_ATT; + cmd_len = 1; + + cmdbuf[0] = icom_get_spectrum_vfo(rig, vfo); + break; + default: - rig_debug(RIG_DEBUG_ERR, "%s: unsupported get_level %s", __func__, + rig_debug(RIG_DEBUG_ERR, "%s: unsupported get_level %s\n", __func__, rig_strlevel(level)); RETURNFUNC(-RIG_EINVAL); } @@ -3502,7 +3534,7 @@ int icom_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) if (!found) { - rig_debug(RIG_DEBUG_ERR, "%s: unexpected AGC 0x%02x", __func__, + rig_debug(RIG_DEBUG_ERR, "%s: unexpected AGC 0x%02x\n", __func__, icom_val); RETURNFUNC(-RIG_EPROTO); } @@ -3528,7 +3560,7 @@ int icom_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) break; default: - rig_debug(RIG_DEBUG_ERR, "%s: unexpected AGC 0x%02x", __func__, + rig_debug(RIG_DEBUG_ERR, "%s: unexpected AGC 0x%02x\n", __func__, icom_val); RETURNFUNC(-RIG_EPROTO); } @@ -3650,7 +3682,7 @@ int icom_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) if (icom_val > HAMLIB_MAXDBLSTSIZ || rs->preamp[icom_val - 1] == 0) { - rig_debug(RIG_DEBUG_ERR, "%s: unsupported preamp get_level %ddB", + rig_debug(RIG_DEBUG_ERR, "%s: unsupported preamp get_level %ddB\n", __func__, icom_val); RETURNFUNC(-RIG_EPROTO); } @@ -3674,7 +3706,7 @@ int icom_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) val->i = RIG_SPECTRUM_MODE_FIXED_SCROLL; break; default: - rig_debug(RIG_DEBUG_ERR, "%s: unsupported spectrum mode %d", __func__, icom_val); + rig_debug(RIG_DEBUG_ERR, "%s: unsupported spectrum mode %d\n", __func__, icom_val); RETURNFUNC(-RIG_EINVAL); } break; @@ -3698,7 +3730,7 @@ int icom_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) val->i = 2; break; default: - rig_debug(RIG_DEBUG_ERR, "%s: unsupported spectrum speed %d", __func__, icom_val); + rig_debug(RIG_DEBUG_ERR, "%s: unsupported spectrum speed %d\n", __func__, icom_val); RETURNFUNC(-RIG_EINVAL); } break; @@ -3727,7 +3759,7 @@ int icom_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) val->i = (int) from_bcd(respbuf + cmdhead + 5, 5 * 2); break; - /* RIG_LEVEL_ATT: returned value is already an integer in dB (coded in BCD) */ + /* RIG_LEVEL_ATT/RIG_LEVEL_SPECTRUM_ATT: returned value is already an integer in dB (coded in BCD) */ default: if (RIG_LEVEL_IS_FLOAT(level)) { @@ -3889,7 +3921,7 @@ int icom_set_ext_level(RIG *rig, vfo_t vfo, token_t token, value_t val) else { i++; } } - rig_debug(RIG_DEBUG_ERR, "%s: unsupported set_ext_level token: %ld", __func__, token); + rig_debug(RIG_DEBUG_ERR, "%s: unsupported set_ext_level token: %ld\n", __func__, token); RETURNFUNC(-RIG_EINVAL); } @@ -3995,7 +4027,7 @@ int icom_get_ext_level(RIG *rig, vfo_t vfo, token_t token, value_t *val) else { i++; } } - rig_debug(RIG_DEBUG_ERR, "%s: unsupported get_ext_level token: %ld", __func__, token); + rig_debug(RIG_DEBUG_ERR, "%s: unsupported get_ext_level token: %ld\n", __func__, token); RETURNFUNC(-RIG_EINVAL); } @@ -4427,7 +4459,7 @@ int icom_set_rptr_shift(RIG *rig, vfo_t vfo, rptr_shift_t rptr_shift) break; default: - rig_debug(RIG_DEBUG_ERR, "%s: unsupported shift %d", __func__, + rig_debug(RIG_DEBUG_ERR, "%s: unsupported shift %d\n", __func__, rptr_shift); RETURNFUNC(-RIG_EINVAL); } @@ -4512,7 +4544,7 @@ int icom_get_rptr_shift(RIG *rig, vfo_t vfo, rptr_shift_t *rptr_shift) break; default: - rig_debug(RIG_DEBUG_ERR, "%s: unsupported shift %d", __func__, + rig_debug(RIG_DEBUG_ERR, "%s: unsupported shift %d\n", __func__, rptrbuf[1]); RETURNFUNC(-RIG_EPROTO); } @@ -8527,6 +8559,16 @@ static int icom_get_spectrum_edge_frequency_range(RIG *rig, vfo_t vfo, int *rang RETURNFUNC(retval); } + // Get frequency if it is not cached or value is old + if (freq == 0 || cache_ms_freq >= 1000) + { + retval = rig_get_freq(rig, vfo, &freq); + if (retval != RIG_OK) + { + RETURNFUNC(retval); + } + } + for (i = 0; i < ICOM_MAX_SPECTRUM_FREQ_RANGES; i++) { int id = priv_caps->spectrum_edge_frequency_ranges[i].range_id; diff --git a/rigs/icom/icom.h b/rigs/icom/icom.h index 7ab80a922..d9a2974bc 100644 --- a/rigs/icom/icom.h +++ b/rigs/icom/icom.h @@ -229,8 +229,7 @@ struct icom_priv_caps int offs_len; /*!< Number of bytes in offset frequency field. 0 defaults to 3 */ int serial_USB_echo_check; /*!< Flag to test USB echo state */ int agc_levels_present; /*!< Flag to indicate that agc_levels array is populated */ - struct icom_agc_level agc_levels[RIG_AGC_LAST + - 1]; /*!< Icom rig-specific AGC levels, the last entry should have level -1 */ + struct icom_agc_level agc_levels[RIG_AGC_LAST + 1]; /*!< Icom rig-specific AGC levels, the last entry should have level -1 */ struct icom_spectrum_scope_caps spectrum_scope_caps; /*!< Icom spectrum scope capabilities, if supported by the rig. Main/Sub scopes in Icom rigs have the same caps. */ struct icom_spectrum_edge_frequency_range spectrum_edge_frequency_ranges[ICOM_MAX_SPECTRUM_FREQ_RANGES]; /*!< Icom spectrum scope edge frequencies, if supported by the rig. Last entry should have zeros in all fields. */ struct cmdparams *extcmds; /*!< Pointer to extended operations array */ diff --git a/src/idx_builtin.h b/src/idx_builtin.h index 73263dbf4..955cd9211 100644 --- a/src/idx_builtin.h +++ b/src/idx_builtin.h @@ -161,8 +161,8 @@ #define LVL_SPECTRUM_SPEED setting2idx_builtin(RIG_LEVEL_SPECTRUM_SPEED) #define LVL_SPECTRUM_REF setting2idx_builtin(RIG_LEVEL_SPECTRUM_REF) #define LVL_SPECTRUM_AVG setting2idx_builtin(RIG_LEVEL_SPECTRUM_AVG) +#define LVL_SPECTRUM_ATT setting2idx_builtin(RIG_LEVEL_SPECTRUM_ATT) -#define LVL_47 setting2idx_builtin(RIG_LEVEL_47) #define LVL_48 setting2idx_builtin(RIG_LEVEL_48) #define LVL_49 setting2idx_builtin(RIG_LEVEL_49) #define LVL_50 setting2idx_builtin(RIG_LEVEL_50) diff --git a/src/misc.c b/src/misc.c index 4f8f9990f..ee772a953 100644 --- a/src/misc.c +++ b/src/misc.c @@ -868,6 +868,7 @@ static struct { RIG_LEVEL_SPECTRUM_SPEED, "SPECTRUM_SPEED" }, { RIG_LEVEL_SPECTRUM_REF, "SPECTRUM_REF" }, { RIG_LEVEL_SPECTRUM_AVG, "SPECTRUM_AVG" }, + { RIG_LEVEL_SPECTRUM_ATT, "SPECTRUM_ATT" }, { RIG_LEVEL_NONE, "" }, }; diff --git a/tests/dumpcaps.c b/tests/dumpcaps.c index 22301ab5e..80d1ff2ce 100644 --- a/tests/dumpcaps.c +++ b/tests/dumpcaps.c @@ -721,6 +721,20 @@ int dumpcaps(RIG *rig, FILE *fout) rig_sprintf_spectrum_avg_modes(prntbuf, sizeof(prntbuf), caps->spectrum_avg_modes); fprintf(fout, "Spectrum averaging modes: %s\n", prntbuf); + fprintf(fout, "Spectrum attenuator:"); + + for (i = 0; i < HAMLIB_MAXDBLSTSIZ && caps->spectrum_attenuator[i] != 0; i++) + { + fprintf(fout, " %ddB", caps->spectrum_attenuator[i]); + } + + if (i == 0) + { + fprintf(fout, " None"); + } + + fprintf(fout, "\n"); + fprintf(fout, "Has priv data:\t%c\n", caps->priv != NULL ? 'Y' : 'N'); /* * Status is either 'Y'es, 'E'mulated, 'N'o