diff --git a/include/hamlib/rig.h b/include/hamlib/rig.h index 4d84c3410..574c21bdd 100644 --- a/include/hamlib/rig.h +++ b/include/hamlib/rig.h @@ -315,17 +315,17 @@ enum serial_control_state_e { * \brief Rig type flags */ typedef enum { - RIG_FLAG_RECEIVER = (1 << 1), /*!< Receiver */ - RIG_FLAG_TRANSMITTER = (1 << 2), /*!< Transmitter */ - RIG_FLAG_SCANNER = (1 << 3), /*!< Scanner */ - RIG_FLAG_MOBILE = (1 << 4), /*!< mobile sized */ - RIG_FLAG_HANDHELD = (1 << 5), /*!< handheld sized */ - RIG_FLAG_COMPUTER = (1 << 6), /*!< "Computer" rig */ - RIG_FLAG_TRUNKING = (1 << 7), /*!< has trunking */ - RIG_FLAG_APRS = (1 << 8), /*!< has APRS */ - RIG_FLAG_TNC = (1 << 9), /*!< has TNC */ - RIG_FLAG_DXCLUSTER = (1 << 10), /*!< has DXCluster */ - RIG_FLAG_TUNER = (1 << 11) /*!< dumb tuner */ + RIG_FLAG_RECEIVER = (1 << 1), /*!< Receiver 2 */ + RIG_FLAG_TRANSMITTER = (1 << 2), /*!< Transmitter 4 */ + RIG_FLAG_SCANNER = (1 << 3), /*!< Scanner 8 */ + RIG_FLAG_MOBILE = (1 << 4), /*!< mobile sized 16 */ + RIG_FLAG_HANDHELD = (1 << 5), /*!< handheld sized 32 */ + RIG_FLAG_COMPUTER = (1 << 6), /*!< "Computer" rig 64 */ + RIG_FLAG_TRUNKING = (1 << 7), /*!< has trunking 128 */ + RIG_FLAG_APRS = (1 << 8), /*!< has APRS 256 */ + RIG_FLAG_TNC = (1 << 9), /*!< has TNC 512 */ + RIG_FLAG_DXCLUSTER = (1 << 10), /*!< has DXCluster 1024 */ + RIG_FLAG_TUNER = (1 << 11) /*!< dumb tuner 2048 */ } rig_type_t; /** @@ -1312,6 +1312,7 @@ typedef uint64_t rmode_t; #define RIG_MODE_BIT61 CONSTANT_64BIT_FLAG (61) /*!< \c reserved for future expansion */ #define RIG_MODE_BIT62 CONSTANT_64BIT_FLAG (62) /*!< \c reserved for future expansion */ #define RIG_MODE_TESTS_MAX CONSTANT_64BIT_FLAG (63) /*!< \c last bit available for 64-bit enum MUST ALWAYS BE LAST, Max Count for dumpcaps.c */ +#define RIG_MODE_ALL (0xffffffff) /*!< any mode constant */ #endif /** diff --git a/rigs/dummy/flrig.c b/rigs/dummy/flrig.c index 1e0b997a6..da64b0285 100644 --- a/rigs/dummy/flrig.c +++ b/rigs/dummy/flrig.c @@ -163,6 +163,7 @@ const struct rig_caps flrig_caps = .has_set_parm = RIG_PARM_SET(FLRIG_PARM), .filters = { + {RIG_MODE_ALL, RIG_FLT_ANY}, RIG_FLT_END }, diff --git a/rigs/dummy/tci1x.c b/rigs/dummy/tci1x.c index 68b11d53d..26a38a191 100644 --- a/rigs/dummy/tci1x.c +++ b/rigs/dummy/tci1x.c @@ -158,6 +158,7 @@ const struct rig_caps tci1x_caps = .has_set_parm = RIG_PARM_SET(TCI1X_PARM), .filters = { + {RIG_MODE_ALL, RIG_FLT_ANY}, RIG_FLT_END }, diff --git a/rigs/dummy/trxmanager.c b/rigs/dummy/trxmanager.c index 72a7ded17..92e39148d 100644 --- a/rigs/dummy/trxmanager.c +++ b/rigs/dummy/trxmanager.c @@ -134,6 +134,7 @@ struct rig_caps trxmanager_caps = .has_get_parm = RIG_PARM_NONE, .has_set_parm = RIG_PARM_NONE, .filters = { + {RIG_MODE_ALL, RIG_FLT_ANY}, RIG_FLT_END }, diff --git a/rigs/gomspace/gs100.c b/rigs/gomspace/gs100.c index 9e8ed8882..bb8f0cf14 100644 --- a/rigs/gomspace/gs100.c +++ b/rigs/gomspace/gs100.c @@ -410,17 +410,21 @@ struct rig_caps GS100_caps = .vfo_ops = GS100_VFO_OPS, .rx_range_list1 = { { .startf = MHz(430), .endf = MHz(440), .modes = GS100_MODES, - .low_power = -1, .high_power = -1, GS100_VFOS, + .low_power = 0, .high_power = 0, GS100_VFOS, .label = "GS100#1" }, RIG_FRNG_END, }, .tx_range_list1 = { { .startf = MHz(430), .endf = MHz(440), .modes = GS100_MODES, - .low_power = -1, .high_power = -1, GS100_VFOS, + .low_power = 0, .high_power = 0, GS100_VFOS, .label = "GS100#1" }, RIG_FRNG_END, }, .tuning_steps = { {GS100_MODES, Hz(10)}, RIG_TS_END, }, + .filters = { + {RIG_MODE_ALL, RIG_FLT_ANY}, + RIG_FLT_END + }, .priv = NULL, .rig_init = gs100_init, .rig_cleanup = gs100_cleanup, diff --git a/rigs/icom/ic765.c b/rigs/icom/ic765.c index 687d4bf0b..a6307c136 100644 --- a/rigs/icom/ic765.c +++ b/rigs/icom/ic765.c @@ -84,7 +84,12 @@ const struct rig_caps ic765_caps = .has_set_level = RIG_LEVEL_NONE, .has_get_parm = RIG_PARM_NONE, .has_set_parm = RIG_PARM_NONE, - .level_gran = {}, +#if 0 + .level_gran = + { +#include "level_gran_icom.h" + }, +#endif .parm_gran = {}, .ctcss_list = NULL, .dcs_list = NULL, @@ -131,8 +136,8 @@ const struct rig_caps ic765_caps = {MHz(6.9), kHz(7499.99), IC765_AM_TX_MODES, 2000, 40000, IC765_VFO_ALL}, {MHz(9.9), MHz(1049999), IC765_OTHER_TX_MODES, 5000, 100000, IC765_VFO_ALL}, {MHz(9.9), MHz(1049999), IC765_AM_TX_MODES, 2000, 40000, IC765_VFO_ALL}, - {MHz(13.9), kHz(14.49999), IC765_OTHER_TX_MODES, 5000, 100000, IC765_VFO_ALL}, - {MHz(13.9), kHz(14.49999), IC765_AM_TX_MODES, 2000, 40000, IC765_VFO_ALL}, + {MHz(13.9), MHz(14.49999), IC765_OTHER_TX_MODES, 5000, 100000, IC765_VFO_ALL}, + {MHz(13.9), MHz(14.49999), IC765_AM_TX_MODES, 2000, 40000, IC765_VFO_ALL}, {kHz(17900), kHz(18499.99), IC765_OTHER_TX_MODES, 5000, 100000, IC765_VFO_ALL}, {kHz(17900), kHz(18499.99), IC765_AM_TX_MODES, 2000, 40000, IC765_VFO_ALL}, {MHz(20.9), kHz(21499.99), IC765_OTHER_TX_MODES, 5000, 100000, IC765_VFO_ALL}, diff --git a/rigs/icom/ic781.c b/rigs/icom/ic781.c index 7d0b6e557..53d9d48f0 100644 --- a/rigs/icom/ic781.c +++ b/rigs/icom/ic781.c @@ -85,7 +85,10 @@ const struct rig_caps ic781_caps = .has_set_level = RIG_LEVEL_NONE, .has_get_parm = RIG_PARM_NONE, .has_set_parm = RIG_PARM_NONE, - .level_gran = {}, + .level_gran = + { +#include "level_gran_icom.h" + }, .parm_gran = {}, .ctcss_list = NULL, .dcs_list = NULL, @@ -132,8 +135,8 @@ const struct rig_caps ic781_caps = {MHz(6.9), kHz(7499.99), IC781_AM_TX_MODES, 2000, 75000, IC781_VFO_ALL}, {MHz(9.9), MHz(1049999), IC781_OTHER_TX_MODES, 5000, 150000, IC781_VFO_ALL}, {MHz(9.9), MHz(1049999), IC781_AM_TX_MODES, 2000, 75000, IC781_VFO_ALL}, - {MHz(13.9), kHz(14.49999), IC781_OTHER_TX_MODES, 5000, 150000, IC781_VFO_ALL}, - {MHz(13.9), kHz(14.49999), IC781_AM_TX_MODES, 2000, 75000, IC781_VFO_ALL}, + {MHz(13.9), MHz(14.49999), IC781_OTHER_TX_MODES, 5000, 150000, IC781_VFO_ALL}, + {MHz(13.9), MHz(14.49999), IC781_AM_TX_MODES, 2000, 75000, IC781_VFO_ALL}, {kHz(17900), kHz(18499.99), IC781_OTHER_TX_MODES, 5000, 150000, IC781_VFO_ALL}, {kHz(17900), kHz(18499.99), IC781_AM_TX_MODES, 2000, 75000, IC781_VFO_ALL}, {MHz(20.9), kHz(21499.99), IC781_OTHER_TX_MODES, 5000, 150000, IC781_VFO_ALL}, diff --git a/rigs/icom/ic910.c b/rigs/icom/ic910.c index 647d141bc..7f55059af 100644 --- a/rigs/icom/ic910.c +++ b/rigs/icom/ic910.c @@ -256,28 +256,28 @@ const struct rig_caps ic910_caps = }, .rx_range_list1 = { /* USA */ - {MHz(144), MHz(148), IC910_MODES, -1, -1, IC910_VFO_ALL}, - {MHz(430), MHz(450), IC910_MODES, -1, -1, IC910_VFO_ALL}, - {MHz(1240), MHz(1300), IC910_MODES, -1, -1, IC910_VFO_ALL}, + {MHz(144), MHz(148), IC910_MODES, 0, 0, IC910_VFO_ALL}, + {MHz(430), MHz(450), IC910_MODES, 0, 0, IC910_VFO_ALL}, + {MHz(1240), MHz(1300), IC910_MODES, 0, 0, IC910_VFO_ALL}, RIG_FRNG_END, }, .tx_range_list1 = { {MHz(144), MHz(148), IC910_MODES, W(5), W(100), IC910_VFO_ALL}, {MHz(430), MHz(450), IC910_MODES, W(5), W(75), IC910_VFO_ALL}, - {MHz(1240), MHz(1300), IC910_MODES, -1, -1, IC910_VFO_ALL}, + {MHz(1240), MHz(1300), IC910_MODES, 0, 0, IC910_VFO_ALL}, RIG_FRNG_END, }, .rx_range_list2 = { /* Europe */ - {MHz(144), MHz(146), IC910_MODES, -1, -1, IC910_VFO_ALL}, - {MHz(430), MHz(440), IC910_MODES, -1, -1, IC910_VFO_ALL}, - {MHz(1240), MHz(1300), IC910_MODES, -1, -1, IC910_VFO_ALL}, + {MHz(144), MHz(146), IC910_MODES, 0, 0, IC910_VFO_ALL}, + {MHz(430), MHz(440), IC910_MODES, 0, 0, IC910_VFO_ALL}, + {MHz(1240), MHz(1300), IC910_MODES, 0, 0, IC910_VFO_ALL}, RIG_FRNG_END, }, .tx_range_list2 = { {MHz(144), MHz(146), IC910_MODES, W(5), W(100), IC910_VFO_ALL}, {MHz(430), MHz(440), IC910_MODES, W(5), W(75), IC910_VFO_ALL}, - {MHz(1240), MHz(1300), IC910_MODES, -1, -1, IC910_VFO_ALL}, + {MHz(1240), MHz(1300), IC910_MODES, 0, 0, IC910_VFO_ALL}, RIG_FRNG_END, }, diff --git a/rigs/icom/icom.h b/rigs/icom/icom.h index 4373583fc..3fa3691c7 100644 --- a/rigs/icom/icom.h +++ b/rigs/icom/icom.h @@ -25,6 +25,7 @@ #include "hamlib/rig.h" #include "cal.h" #include "tones.h" +#include "idx_builtin.h" #ifdef HAVE_SYS_TIME_H #include diff --git a/rigs/icom/icr6.c b/rigs/icom/icr6.c index e9abd9751..5e0dd4f4f 100644 --- a/rigs/icom/icr6.c +++ b/rigs/icom/icr6.c @@ -119,6 +119,8 @@ const struct rig_caps icr6_caps = .tuning_steps = { {ICR6_MODES, Hz(5000)}, {ICR6_MODES, Hz(6250)}, + {ICR6_MODES, Hz(8330)}, // Air band only + {ICR6_MODES, Hz(9000)}, // AM broadcast band only {ICR6_MODES, Hz(10000)}, {ICR6_MODES, Hz(12500)}, {ICR6_MODES, kHz(15)}, @@ -129,10 +131,6 @@ const struct rig_caps icr6_caps = {ICR6_MODES, kHz(100)}, {ICR6_MODES, kHz(125)}, {ICR6_MODES, kHz(200)}, - /* Air band only */ - {ICR6_MODES, Hz(8330)}, - /* AM broadcast band only */ - {ICR6_MODES, Hz(9000)}, RIG_TS_END, }, diff --git a/rigs/icom/id1.c b/rigs/icom/id1.c index b02228e5a..7bd0b2da3 100644 --- a/rigs/icom/id1.c +++ b/rigs/icom/id1.c @@ -145,13 +145,13 @@ const struct rig_caps id1_caps = .tuning_steps = { {ID1_MODES, kHz(5)}, + {ID1_MODES, kHz(6.25)}, {ID1_MODES, kHz(10)}, - {ID1_MODES, 12500}, + {ID1_MODES, kHz(12.5)}, {ID1_MODES, kHz(20)}, {ID1_MODES, kHz(25)}, {ID1_MODES, kHz(25)}, {ID1_MODES, kHz(100)}, - {ID1_MODES, kHz(6.25)}, RIG_TS_END, }, /* mode/filter list, remember: order matters! */ diff --git a/rigs/icom/id31.c b/rigs/icom/id31.c index 7230bf0ab..26453be79 100644 --- a/rigs/icom/id31.c +++ b/rigs/icom/id31.c @@ -151,8 +151,10 @@ const struct rig_caps id31_caps = .tuning_steps = { // Rem: no support for changing tuning step + {RIG_MODE_ALL, 1}, RIG_TS_END, }, + /* mode/filter list, remember: order matters! */ .filters = { {RIG_MODE_FM, kHz(12)}, diff --git a/rigs/icom/id4100.c b/rigs/icom/id4100.c index a712b5a3e..d46e7a6cc 100644 --- a/rigs/icom/id4100.c +++ b/rigs/icom/id4100.c @@ -159,8 +159,10 @@ const struct rig_caps id4100_caps = .tuning_steps = { // Rem: no support for changing tuning step + {RIG_MODE_ALL, 1}, RIG_TS_END, }, + /* mode/filter list, remember: order matters! */ .filters = { {RIG_MODE_FM | RIG_MODE_AM, kHz(12)}, diff --git a/rigs/icom/id51.c b/rigs/icom/id51.c index 66694349e..c8c98f6c8 100644 --- a/rigs/icom/id51.c +++ b/rigs/icom/id51.c @@ -164,8 +164,10 @@ const struct rig_caps id51_caps = .tuning_steps = { // Rem: no support for changing tuning step + {RIG_MODE_ALL, 1}, RIG_TS_END, }, + /* mode/filter list, remember: order matters! */ .filters = { {RIG_MODE_FM | RIG_MODE_AM, kHz(12)}, diff --git a/rigs/icom/id5100.c b/rigs/icom/id5100.c index 9831163d0..e9769737c 100644 --- a/rigs/icom/id5100.c +++ b/rigs/icom/id5100.c @@ -161,6 +161,7 @@ const struct rig_caps id5100_caps = .tuning_steps = { // Rem: no support for changing tuning step + {RIG_MODE_ALL, 1}, RIG_TS_END, }, /* mode/filter list, remember: order matters! */ diff --git a/rigs/kenwood/tmv7.c b/rigs/kenwood/tmv7.c index 13ed90d52..b86a9171d 100644 --- a/rigs/kenwood/tmv7.c +++ b/rigs/kenwood/tmv7.c @@ -180,7 +180,8 @@ const struct rig_caps tmv7_caps = }, /* mode/filter list, remember: order matters! */ .filters = { - RIG_FLT_END, + {RIG_MODE_ALL, RIG_FLT_ANY}, + RIG_FLT_END }, .str_cal = { 4, { {0, -60 }, {1, -30,}, {5, 0}, {7, 20}}}, /* rought guess */ diff --git a/rigs/kenwood/ts480.c b/rigs/kenwood/ts480.c index 3b2a501a0..543582da9 100644 --- a/rigs/kenwood/ts480.c +++ b/rigs/kenwood/ts480.c @@ -40,12 +40,14 @@ #define TS480_AM_TX_MODES RIG_MODE_AM #define TS480_VFO (RIG_VFO_A|RIG_VFO_B) -#define TS480_LEVEL_ALL (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| \ +#define TS480_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_METER|RIG_LEVEL_SWR|RIG_LEVEL_COMP_METER|RIG_LEVEL_ALC|RIG_LEVEL_RFPOWER_METER|RIG_LEVEL_SLOPE_HIGH|RIG_LEVEL_SLOPE_LOW) + #define TS480_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_SLOPE_HIGH|RIG_LEVEL_SLOPE_LOW) + RIG_LEVEL_METER|RIG_LEVEL_SLOPE_HIGH|RIG_LEVEL_SLOPE_LOW) + #define TS480_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) @@ -1427,7 +1429,7 @@ const struct rig_caps ts480_caps = .get_ant = kenwood_get_ant, .scan = kenwood_scan, /* not working, invalid arguments using rigctl; kenwood_scan does only support on/off and not tone and CTCSS scan */ .has_set_level = TS480_LEVEL_SET, - .has_get_level = TS480_LEVEL_ALL, + .has_get_level = TS480_LEVEL_GET, .set_level = kenwood_ts480_set_level, .get_level = kenwood_ts480_get_level, .set_ext_level = ts480_set_ext_level, @@ -1593,8 +1595,8 @@ const struct rig_caps pt8000a_caps = .set_ant = kenwood_set_ant, .get_ant = kenwood_get_ant, .scan = kenwood_scan, /* not working, invalid arguments using rigctl; kenwood_scan does only support on/off and not tone and CTCSS scan */ - .has_set_level = TS480_LEVEL_ALL, - .has_get_level = TS480_LEVEL_ALL, + .has_set_level = TS480_LEVEL_SET, + .has_get_level = TS480_LEVEL_GET, .set_level = kenwood_ts480_set_level, .get_level = kenwood_ts480_get_level, .has_get_func = TS480_FUNC_ALL, @@ -1780,8 +1782,8 @@ const struct rig_caps sdruno_caps = .set_ant = kenwood_set_ant, .get_ant = kenwood_get_ant, .scan = kenwood_scan, /* not working, invalid arguments using rigctl; kenwood_scan does only support on/off and not tone and CTCSS scan */ - .has_set_level = TS480_LEVEL_ALL, - .has_get_level = TS480_LEVEL_ALL, + .has_set_level = TS480_LEVEL_SET, + .has_get_level = TS480_LEVEL_GET, .set_level = kenwood_ts480_set_level, .get_level = kenwood_ts480_get_level, .set_ext_level = ts480_set_ext_level, @@ -1879,6 +1881,15 @@ const struct rig_caps malachite_caps = {MHz(400), GHz(2), TS480_ALL_MODES, -1, -1, RIG_VFO_A, RIG_ANT_CURR, "Generic" }, RIG_FRNG_END, }, + .tuning_steps = { + {RIG_MODE_ALL, Hz(1)}, + RIG_TS_END + }, + .filters = { + {RIG_MODE_ALL, RIG_FLT_ANY}, + RIG_FLT_END + }, + .priv = (void *)& ts480_priv_caps, .rig_init = malachite_init, .rig_open = kenwood_open, diff --git a/rigs/kenwood/ts950.c b/rigs/kenwood/ts950.c index 400b1c75b..319df7424 100644 --- a/rigs/kenwood/ts950.c +++ b/rigs/kenwood/ts950.c @@ -40,6 +40,16 @@ #define TS950_GET_LEVEL (RIG_LEVEL_RAWSTR) +// STR_CAL borrowed from TS850 +#define TS950_STR_CAL { 4, \ + { \ + { 0, -54 }, \ + { 15, 0 }, \ + { 22,30 }, \ + { 30, 66}, \ + } } + + #define cmd_trm(rig) ((struct kenwood_priv_caps *)(rig)->caps->priv)->cmdtrm static struct kenwood_priv_caps ts950_priv_caps = { @@ -159,6 +169,7 @@ const struct rig_caps ts950s_caps = {RIG_MODE_FM, kHz(14)}, RIG_FLT_END, }, + .str_cal = TS950_STR_CAL, .priv = (void *)& ts950_priv_caps, .rig_init = kenwood_init, @@ -304,6 +315,7 @@ const struct rig_caps ts950sdx_caps = {RIG_MODE_FM, kHz(14)}, RIG_FLT_END, }, + .str_cal = TS950_STR_CAL, .priv = (void *)& ts950_priv_caps, .rig_init = kenwood_init, diff --git a/rigs/kenwood/xg3.c b/rigs/kenwood/xg3.c index 15fc9d8d1..75feda2c1 100644 --- a/rigs/kenwood/xg3.c +++ b/rigs/kenwood/xg3.c @@ -143,6 +143,15 @@ const struct rig_caps xg3_caps = {kHz(1500), MHz(200), RIG_MODE_CW, 0, 2, RIG_VFO_A, RIG_ANT_1}, RIG_FRNG_END, }, + .tuning_steps = { + {RIG_MODE_ALL, 0}, + RIG_TS_END + }, + .filters = { + {RIG_MODE_ALL, RIG_FLT_ANY}, + RIG_FLT_END + }, + .priv = (void *)& xg3_priv_caps, diff --git a/rigs/kit/rs_hfiq.c b/rigs/kit/rs_hfiq.c index e685340e5..8ab352dea 100644 --- a/rigs/kit/rs_hfiq.c +++ b/rigs/kit/rs_hfiq.c @@ -381,22 +381,26 @@ const struct rig_caps rshfiq_caps = .has_get_level = RSHFIQ_LEVEL_ALL, - .rx_range_list1 = { {.startf = kHz(3500), .endf = MHz(30), .modes = RIG_MODE_IQ, .low_power = -1, .high_power = -1, RIG_VFO_A}, + .rx_range_list1 = { {.startf = kHz(3500), .endf = MHz(30), .modes = RIG_MODE_IQ, .low_power = 0, .high_power = 0, RIG_VFO_A}, RIG_FRNG_END, }, - .rx_range_list2 = { {.startf = kHz(3500), .endf = MHz(30), .modes = RIG_MODE_IQ, .low_power = -1, .high_power = -1, RIG_VFO_A}, + .rx_range_list2 = { {.startf = kHz(3500), .endf = MHz(30), .modes = RIG_MODE_IQ, .low_power = 0, .high_power = 0, RIG_VFO_A}, RIG_FRNG_END, }, - .tx_range_list1 = { {.startf = kHz(3500), .endf = kHz(3800), .modes = RIG_MODE_IQ, .low_power = -1, .high_power = -1, RIG_VFO_A}, - {.startf = kHz(7000), .endf = kHz(7200), .modes = RIG_MODE_IQ, .low_power = -1, .high_power = -1, RIG_VFO_A}, - {.startf = kHz(10100), .endf = kHz(10150), .modes = RIG_MODE_IQ, .low_power = -1, .high_power = -1, RIG_VFO_A}, - {.startf = MHz(14), .endf = kHz(14350), .modes = RIG_MODE_IQ, .low_power = -1, .high_power = -1, RIG_VFO_A}, - {.startf = MHz(21), .endf = kHz(21450), .modes = RIG_MODE_IQ, .low_power = -1, .high_power = -1, RIG_VFO_A}, - {.startf = kHz(24890), .endf = kHz(24990), .modes = RIG_MODE_IQ, .low_power = -1, .high_power = -1, RIG_VFO_A}, - {.startf = MHz(28), .endf = kHz(29700), .modes = RIG_MODE_IQ, .low_power = -1, .high_power = -1, RIG_VFO_A}, + .tx_range_list1 = { {.startf = kHz(3500), .endf = kHz(3800), .modes = RIG_MODE_IQ, .low_power = 0, .high_power = 0, RIG_VFO_A}, + {.startf = kHz(7000), .endf = kHz(7200), .modes = RIG_MODE_IQ, .low_power = 0, .high_power = 0, RIG_VFO_A}, + {.startf = kHz(10100), .endf = kHz(10150), .modes = RIG_MODE_IQ, .low_power = 0, .high_power = 0, RIG_VFO_A}, + {.startf = MHz(14), .endf = kHz(14350), .modes = RIG_MODE_IQ, .low_power = 0, .high_power = 0, RIG_VFO_A}, + {.startf = MHz(21), .endf = kHz(21450), .modes = RIG_MODE_IQ, .low_power = 0, .high_power = 0, RIG_VFO_A}, + {.startf = kHz(24890), .endf = kHz(24990), .modes = RIG_MODE_IQ, .low_power = 0, .high_power = 0, RIG_VFO_A}, + {.startf = MHz(28), .endf = kHz(29700), .modes = RIG_MODE_IQ, .low_power = 0, .high_power = 0, RIG_VFO_A}, RIG_FRNG_END, }, .tuning_steps = { {RIG_MODE_IQ, Hz(1)}, RIG_TS_END, }, + .filters = { + {RIG_MODE_ALL, RIG_FLT_ANY}, + RIG_FLT_END + }, .rig_open = rshfiq_open, .get_freq = rshfiq_get_freq, diff --git a/rigs/skanti/trp8000.c b/rigs/skanti/trp8000.c index 54e5fa257..d47657fc4 100644 --- a/rigs/skanti/trp8000.c +++ b/rigs/skanti/trp8000.c @@ -100,8 +100,8 @@ const struct rig_caps trp8000_caps = RIG_FRNG_END, }, .tuning_steps = { - {TRP8000_ALL_MODES, 100}, {TRP8000_ALL_MODES, 10}, + {TRP8000_ALL_MODES, 100}, {TRP8000_ALL_MODES, kHz(1)}, RIG_TS_END, }, diff --git a/rigs/tentec/argonaut.c b/rigs/tentec/argonaut.c index fcbca0290..01784e1f8 100644 --- a/rigs/tentec/argonaut.c +++ b/rigs/tentec/argonaut.c @@ -42,6 +42,28 @@ #define TT516_VFO (RIG_VFO_A|RIG_VFO_B) +// Taken from RX320_STR_CAL -- unknown if accurate for TT516 +#define TT516_STR_CAL { 17, { \ + { 0, -60 }, \ + { 10, -50 }, \ + { 20, -40 }, \ + { 30, -30 }, \ + { 40, -20 }, \ + { 50, -15 }, \ + { 100, -10 }, \ + { 200, -5 }, \ + { 225, -3 }, \ + { 256, 0 }, \ + { 512, 1 }, \ + { 768, 3}, \ + { 1024, 4 }, \ + { 1280, 5 }, \ + { 2560, 10 }, \ + { 5120, 20 }, \ + { 10000, 30 }, \ + } } + + /* * tt516 receiver capabilities. @@ -79,7 +101,9 @@ const struct rig_caps tt516_caps = .has_set_level = RIG_LEVEL_SET(TT516_LEVELS), .has_get_parm = RIG_PARM_NONE, .has_set_parm = RIG_PARM_NONE, - .level_gran = {}, /* FIXME: granularity */ + .level_gran = { + [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, + }, .parm_gran = {}, .ctcss_list = NULL, .dcs_list = NULL, @@ -137,6 +161,7 @@ const struct rig_caps tt516_caps = {RIG_MODE_FM, kHz(15)}, RIG_FLT_END, }, + .str_cal = TT516_STR_CAL, .priv = (void *)NULL, .set_freq = tentec2_set_freq, diff --git a/rigs/tentec/rx350.c b/rigs/tentec/rx350.c index 95fe7eed8..82b61b690 100644 --- a/rigs/tentec/rx350.c +++ b/rigs/tentec/rx350.c @@ -46,6 +46,27 @@ #define RX350_VFO_OPS (RIG_OP_TO_VFO|RIG_OP_FROM_VFO) +// Taken from RX320_STR_CAL -- unknown if accurate for RX350 +#define RX350_STR_CAL { 17, { \ + { 0, -60 }, \ + { 10, -50 }, \ + { 20, -40 }, \ + { 30, -30 }, \ + { 40, -20 }, \ + { 50, -15 }, \ + { 100, -10 }, \ + { 200, -5 }, \ + { 225, -3 }, \ + { 256, 0 }, \ + { 512, 1 }, \ + { 768, 3}, \ + { 1024, 4 }, \ + { 1280, 5 }, \ + { 2560, 10 }, \ + { 5120, 20 }, \ + { 10000, 30 }, \ + } } + /* * RX350 receiver capabilities. @@ -85,7 +106,10 @@ const struct rig_caps rx350_caps = .has_set_level = RIG_LEVEL_SET(RX350_LEVELS), .has_get_parm = RX350_PARMS, .has_set_parm = RX350_PARMS, - .level_gran = {}, /* FIXME: granularity */ + .level_gran = + { + [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } } + }, .parm_gran = {}, .ctcss_list = NULL, .dcs_list = NULL, @@ -131,6 +155,7 @@ const struct rig_caps rx350_caps = {RX350_MODES, 0}, /* 34 filters */ RIG_FLT_END, }, + .str_cal = RX350_STR_CAL, .priv = (void *)NULL, .set_freq = tentec2_set_freq, diff --git a/rigs/tentec/tentec2.h b/rigs/tentec/tentec2.h index a0389ccdf..2aefa1b22 100644 --- a/rigs/tentec/tentec2.h +++ b/rigs/tentec/tentec2.h @@ -23,6 +23,7 @@ #define _TENTEC2_H 1 #include +#include // The include order will determine which BACKEND_VER is used // tentec.h may also be included and the last include is the BACKEND_VER used diff --git a/rigs/winradio/winradio.c b/rigs/winradio/winradio.c index a1b8e6577..f3fe348aa 100644 --- a/rigs/winradio/winradio.c +++ b/rigs/winradio/winradio.c @@ -41,6 +41,8 @@ #define DEFAULT_WINRADIO_PATH "/dev/winradio0" +#define WINRADIO_MODES RIG_MODE_AM | RIG_MODE_CW | RIG_MODE_LSB | RIG_MODE_USB | RIG_MODE_WFM | RIG_MODE_FM + int wr_rig_init(RIG *rig) { rig->state.rigport.type.rig = RIG_PORT_DEVICE; diff --git a/rigs/yaesu/frg100.c b/rigs/yaesu/frg100.c index 02788a2f0..7f6285375 100644 --- a/rigs/yaesu/frg100.c +++ b/rigs/yaesu/frg100.c @@ -197,22 +197,22 @@ const struct rig_caps frg100_caps = { 0x33, 0x34, RIG_MTYPE_EDGE }, }, .rx_range_list1 = { - {kHz(50), MHz(30), FRG100_MODES, -1, -1, FRG100_VFOS, FRG100_ANTS }, + {kHz(50), MHz(30), FRG100_MODES, 0, 0, FRG100_VFOS, FRG100_ANTS }, RIG_FRNG_END, }, /* Region 1 rx ranges */ .tx_range_list1 = { - {kHz(50), MHz(30), FRG100_MODES, -1, -1, FRG100_VFOS, FRG100_ANTS }, + {kHz(50), MHz(30), FRG100_MODES, 0, 0, FRG100_VFOS, FRG100_ANTS }, RIG_FRNG_END, }, /* region 1 TX ranges */ .rx_range_list2 = { - {kHz(50), MHz(30), FRG100_MODES, -1, -1, FRG100_VFOS, FRG100_ANTS }, + {kHz(50), MHz(30), FRG100_MODES, 0, 0, FRG100_VFOS, FRG100_ANTS }, RIG_FRNG_END, }, /* Region 2 rx ranges */ .tx_range_list2 = { - {kHz(50), MHz(30), FRG100_MODES, -1, -1, FRG100_VFOS, FRG100_ANTS }, + {kHz(50), MHz(30), FRG100_MODES, 0, 0, FRG100_VFOS, FRG100_ANTS }, RIG_FRNG_END, }, /* region 2 TX ranges */ diff --git a/rigs/yaesu/ft600.c b/rigs/yaesu/ft600.c index f1bbb4951..3e6643bd0 100644 --- a/rigs/yaesu/ft600.c +++ b/rigs/yaesu/ft600.c @@ -290,7 +290,11 @@ const struct rig_caps ft600_caps = {FT600_ALL_RX_MODES, 1000}, RIG_TS_END, }, - .filters = {}, + .filters = { + {RIG_MODE_ALL, RIG_FLT_ANY}, + RIG_FLT_END + }, + .str_cal = FT600_STR_CAL, .priv = NULL, .rig_init = ft600_init, diff --git a/rigs/yaesu/ft757gx.c b/rigs/yaesu/ft757gx.c index 48db12bf8..8633abbec 100644 --- a/rigs/yaesu/ft757gx.c +++ b/rigs/yaesu/ft757gx.c @@ -195,11 +195,11 @@ const struct rig_caps ft757gx_caps = }, /* mode/filter list, .remember = order matters! */ - .filters = { - RIG_FLT_END, + .filters = { + {RIG_MODE_ALL, RIG_FLT_ANY}, + RIG_FLT_END }, - .priv = NULL, /* private data */ .rig_init = ft757_init, diff --git a/rigs/yaesu/ft767gx.c b/rigs/yaesu/ft767gx.c index 514530e16..afbc5f455 100644 --- a/rigs/yaesu/ft767gx.c +++ b/rigs/yaesu/ft767gx.c @@ -349,10 +349,10 @@ const struct rig_caps ft767gx_caps = /* mode/filter list, .remember = order matters! */ .filters = { - RIG_FLT_END, + {RIG_MODE_ALL, RIG_FLT_ANY}, + RIG_FLT_END }, - .priv = NULL, /* private data */ .rig_init = ft767_init, diff --git a/rigs/yaesu/ft847.c b/rigs/yaesu/ft847.c index 5efcd4cb6..d9d4a4e7e 100644 --- a/rigs/yaesu/ft847.c +++ b/rigs/yaesu/ft847.c @@ -626,6 +626,11 @@ const struct rig_caps ft650_caps = RIG_FRNG_END, }, /* tx range end */ + .tuning_steps = { + {RIG_MODE_ALL, 1}, + RIG_TS_END, + }, + /* mode/filter list, .remember = order matters! */ .filters = { {RIG_MODE_SSB | RIG_MODE_CW, kHz(2.4)}, diff --git a/rigs/yaesu/ft857.c b/rigs/yaesu/ft857.c index 60f0b07d2..15b4454ac 100644 --- a/rigs/yaesu/ft857.c +++ b/rigs/yaesu/ft857.c @@ -343,6 +343,7 @@ const struct rig_caps ft857_caps = * per testing by Rich Newsom, WA4SXZ */ .filters = { + {RIG_MODE_ALL, RIG_FLT_ANY}, // {RIG_MODE_SSB, kHz(2.2)}, // {RIG_MODE_CW, kHz(2.2)}, // {RIG_MODE_CWR, kHz(2.2)}, diff --git a/rigs/yaesu/ft897.c b/rigs/yaesu/ft897.c index e2a9940db..4feee7fb3 100644 --- a/rigs/yaesu/ft897.c +++ b/rigs/yaesu/ft897.c @@ -348,6 +348,7 @@ const struct rig_caps ft897_caps = * per testing by Rich Newsom, WA4SXZ */ .filters = { + {RIG_MODE_ALL, RIG_FLT_ANY}, // {RIG_MODE_SSB, kHz(2.2)}, // {RIG_MODE_CW, kHz(2.2)}, // {RIG_MODE_CWR, kHz(2.2)}, @@ -495,6 +496,7 @@ const struct rig_caps ft897d_caps = * per testing by Rich Newsom, WA4SXZ */ .filters = { + {RIG_MODE_ALL, RIG_FLT_ANY}, // {RIG_MODE_SSB, kHz(2.2)}, // {RIG_MODE_CW, kHz(2.2)}, // {RIG_MODE_CWR, kHz(2.2)}, diff --git a/tests/dumpcaps.c b/tests/dumpcaps.c index fb666d3ba..bcd218f75 100644 --- a/tests/dumpcaps.c +++ b/tests/dumpcaps.c @@ -36,6 +36,31 @@ int range_sanity_check(const struct freq_range_list range_list[], int rx); int ts_sanity_check(const struct tuning_step_list tuning_step[]); static void dump_chan_caps(const channel_cap_t *chan, FILE *fout); +struct rig_type_s +{ + int type; + char *description; +}; + +struct rig_type_s rig_type[] = +{ + {RIG_TYPE_OTHER, "Other"}, + {RIG_FLAG_RECEIVER, "Receiver"}, + {RIG_FLAG_TRANSMITTER, "Transmitter"}, + {RIG_FLAG_SCANNER, "Scanner"}, + {RIG_FLAG_MOBILE, "Mobile"}, + {RIG_FLAG_HANDHELD, "Handheld"}, + {RIG_FLAG_COMPUTER, "Computer"}, + {RIG_FLAG_TRANSCEIVER, "Transceiver"}, + {RIG_FLAG_TRUNKING, "Trunking scanner"}, + {RIG_FLAG_APRS, "APRS"}, + {RIG_FLAG_TNC, "TNC"}, + {RIG_FLAG_DXCLUSTER, "DxCluster"}, + {RIG_FLAG_DXCLUSTER, "DxCluster"}, + {RIG_FLAG_TUNER, "Tuner"}, + {-1, "?\n"} +}; + static int print_ext(RIG *rig, const struct confparams *cfp, rig_ptr_t ptr) { return print_ext_param(cfp, ptr); @@ -51,10 +76,14 @@ int dumpcaps(RIG *rig, FILE *fout) int can_esplit, can_echannel; char freqbuf[20]; int backend_warnings = 0; - static char prntbuf[1024]; /* a malloc would be better.. */ + char warnbuf[4096]; + char prntbuf[1024]; /* a malloc would be better.. */ char *label1, *label2, *label3, *label4, *label5; char *labelrx1; // , *labelrx2, *labelrx3, *labelrx4, *labelrx5; + warnbuf[0] = 0; + prntbuf[0] = 0; + if (!rig || !rig->caps) { return -RIG_EINVAL; @@ -70,50 +99,22 @@ int dumpcaps(RIG *rig, FILE *fout) fprintf(fout, "Backend status:\t%s\n", rig_strstatus(caps->status)); fprintf(fout, "Rig type:\t"); - switch (caps->rig_type & RIG_TYPE_MASK) + char *unknown = "Unknown"; + + for (i = 0; rig_type[i].type != -1; ++i) { - case RIG_TYPE_TRANSCEIVER: - fprintf(fout, "Transceiver\n"); - break; + if ((rig_type[i].type & caps->rig_type) == rig_type[i].type) + { + fprintf(fout, "%s ", rig_type[i].description); + unknown = ""; + } + } - case RIG_TYPE_HANDHELD: - fprintf(fout, "Handheld\n"); - break; + fprintf(fout, "%s\n", unknown); - case RIG_TYPE_MOBILE: - fprintf(fout, "Mobile\n"); - break; - - case RIG_TYPE_RECEIVER: - fprintf(fout, "Receiver\n"); - break; - - case RIG_TYPE_PCRECEIVER: - fprintf(fout, "PC Receiver\n"); - break; - - case RIG_TYPE_SCANNER: - fprintf(fout, "Scanner\n"); - break; - - case RIG_TYPE_TRUNKSCANNER: - fprintf(fout, "Trunking scanner\n"); - break; - - case RIG_TYPE_COMPUTER: - fprintf(fout, "Computer\n"); - break; - - case RIG_TYPE_TUNER: - fprintf(fout, "Tuner\n"); - break; - - case RIG_TYPE_OTHER: - fprintf(fout, "Other\n"); - break; - - default: - fprintf(fout, "Unknown\n"); + if (strlen(unknown) > 0) + { + strcat(warnbuf, " RIG_TYPE"); backend_warnings++; } @@ -147,6 +148,7 @@ int dumpcaps(RIG *rig, FILE *fout) default: fprintf(fout, "Unknown\n"); + strcat(warnbuf, " PTT_TYPE"); backend_warnings++; } @@ -180,6 +182,7 @@ int dumpcaps(RIG *rig, FILE *fout) default: fprintf(fout, "Unknown\n"); + strcat(warnbuf, " DCD_TYPE"); backend_warnings++; } @@ -230,6 +233,7 @@ int dumpcaps(RIG *rig, FILE *fout) default: fprintf(fout, "Unknown\n"); + strcat(warnbuf, " PORT_TYPE"); backend_warnings++; } @@ -384,6 +388,7 @@ int dumpcaps(RIG *rig, FILE *fout) fprintf(fout, "Warning--backend has get RAWSTR, but not calibration data\n"); + strcat(warnbuf, " RAWSTR_level"); backend_warnings++; } @@ -396,6 +401,7 @@ int dumpcaps(RIG *rig, FILE *fout) //fprintf(fout, "Warning--backend can set readonly levels=0x%0llx\n", caps->has_set_level & RIG_LEVEL_READONLY_LIST); fprintf(fout, "Warning--backend can set readonly levels\n"); + strcat(warnbuf, " READONLY_LEVEL"); backend_warnings++; } @@ -413,6 +419,7 @@ int dumpcaps(RIG *rig, FILE *fout) if (caps->has_set_parm & RIG_PARM_READONLY_LIST) { fprintf(fout, "Warning--backend can set readonly parms!\n"); + strcat(warnbuf, " READONLY_PARM"); backend_warnings++; } @@ -427,6 +434,7 @@ int dumpcaps(RIG *rig, FILE *fout) else { strcpy(prntbuf, "None. This backend might be bogus!\n"); + strcat(warnbuf, " MODE_LIST"); backend_warnings++; } @@ -439,6 +447,7 @@ int dumpcaps(RIG *rig, FILE *fout) else { strcpy(prntbuf, "None. This backend might be bogus!\n"); + strcat(warnbuf, " VFO_LIST"); backend_warnings++; } @@ -531,6 +540,7 @@ int dumpcaps(RIG *rig, FILE *fout) if (status) { + strcat(warnbuf, " TX#1"); backend_warnings++; } @@ -542,6 +552,7 @@ int dumpcaps(RIG *rig, FILE *fout) if (status) { + strcat(warnbuf, " RX#1"); backend_warnings++; } @@ -553,6 +564,7 @@ int dumpcaps(RIG *rig, FILE *fout) if (status) { + strcat(warnbuf, " TX#2"); backend_warnings++; } @@ -564,6 +576,7 @@ int dumpcaps(RIG *rig, FILE *fout) if (status) { + strcat(warnbuf, " RX#2"); backend_warnings++; } @@ -575,6 +588,7 @@ int dumpcaps(RIG *rig, FILE *fout) if (status) { + strcat(warnbuf, " TX#3"); backend_warnings++; } @@ -586,6 +600,7 @@ int dumpcaps(RIG *rig, FILE *fout) if (status) { + strcat(warnbuf, " RX#3"); backend_warnings++; } @@ -597,6 +612,7 @@ int dumpcaps(RIG *rig, FILE *fout) if (status) { + strcat(warnbuf, " TX#4"); backend_warnings++; } @@ -608,6 +624,7 @@ int dumpcaps(RIG *rig, FILE *fout) if (status) { + strcat(warnbuf, " RX#4"); backend_warnings++; } @@ -619,6 +636,7 @@ int dumpcaps(RIG *rig, FILE *fout) if (status) { + strcat(warnbuf, " TX#5"); backend_warnings++; } @@ -630,6 +648,7 @@ int dumpcaps(RIG *rig, FILE *fout) if (status) { + strcat(warnbuf, " RX#5"); backend_warnings++; } @@ -653,6 +672,7 @@ int dumpcaps(RIG *rig, FILE *fout) if (i == 0) { fprintf(fout, " None! This backend might be bogus!"); + strcat(warnbuf, " TUNING_STEPS"); backend_warnings++; } @@ -662,6 +682,7 @@ int dumpcaps(RIG *rig, FILE *fout) if (status) { + strcat(warnbuf, " TUNING_SANE"); backend_warnings++; } @@ -685,6 +706,7 @@ int dumpcaps(RIG *rig, FILE *fout) if (i == 0) { fprintf(fout, " None. This backend might be bogus!"); + strcat(warnbuf, " FILTERS"); backend_warnings++; } @@ -903,7 +925,8 @@ int dumpcaps(RIG *rig, FILE *fout) fprintf(fout, "Can get power2mW:\t%c\n", caps->power2mW != NULL ? 'Y' : 'N'); fprintf(fout, "Can get mW2power:\t%c\n", caps->mW2power != NULL ? 'Y' : 'N'); - fprintf(fout, "\nOverall backend warnings: %d\n", backend_warnings); + fprintf(fout, "\nOverall backend warnings: %d %c %s\n", backend_warnings, + warnbuf[0] != 0 ? '=' : ' ', warnbuf); return backend_warnings; } @@ -1017,7 +1040,8 @@ int range_sanity_check(const struct freq_range_list range_list[], int rx) } else { - if (!(range_list[i].low_power > 0 && range_list[i].high_power > 0)) + if (!(range_list[i].low_power >= RIG_FREQ_NONE + && range_list[i].high_power >= RIG_FREQ_NONE)) { return -3; }