Add SPECTRUM_ATT level (also supported by Kenwood rigs). Get VFO frequency for Icom spectrum edge ranges (if not cached). Fix preamp levels based on docs. Add supported AGC levels to recent Icom rigs.

pull/712/head
Mikael Nousiainen 2021-05-27 10:12:01 +03:00
rodzic 26ea916ca7
commit 12527581b0
17 zmienionych plików z 111 dodań i 41 usunięć

Wyświetl plik

@ -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. */

Wyświetl plik

@ -24,17 +24,14 @@
#include "config.h"
#endif
#include <stdlib.h>
#include <string.h> /* String function definitions */
#include <hamlib/rig.h>
#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,

Wyświetl plik

@ -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,

Wyświetl plik

@ -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,

Wyświetl plik

@ -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),

Wyświetl plik

@ -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,

Wyświetl plik

@ -23,11 +23,9 @@
#include "config.h"
#endif
#include <stdlib.h>
#include <string.h> /* String function definitions */
#include <hamlib/rig.h>
#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,

Wyświetl plik

@ -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,

Wyświetl plik

@ -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),

Wyświetl plik

@ -23,7 +23,6 @@
#include "config.h"
#endif
#include <stdlib.h>
#include <string.h> /* String function definitions */
#include <hamlib/rig.h>
@ -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,

Wyświetl plik

@ -23,7 +23,6 @@
#include "config.h"
#endif
#include <stdlib.h>
#include <string.h> /* String function definitions */
#include <hamlib/rig.h>
@ -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,

Wyświetl plik

@ -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,

Wyświetl plik

@ -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;

Wyświetl plik

@ -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 */

Wyświetl plik

@ -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)

Wyświetl plik

@ -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, "" },
};

Wyświetl plik

@ -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