diff --git a/include/hamlib/riglist.h b/include/hamlib/riglist.h index 034b3ff8e..a1a1660c7 100644 --- a/include/hamlib/riglist.h +++ b/include/hamlib/riglist.h @@ -137,6 +137,7 @@ #define RIG_MODEL_TMD710 RIG_MAKE_MODEL(RIG_KENWOOD, 34) #define RIG_MODEL_TMV71 RIG_MAKE_MODEL(RIG_KENWOOD, 35) #define RIG_MODEL_F6K RIG_MAKE_MODEL(RIG_KENWOOD, 36) /* Flex 6000 Series */ +#define RIG_MODEL_TS590SG RIG_MAKE_MODEL(RIG_KENWOOD, 37) /* * Icom diff --git a/kenwood/kenwood.c b/kenwood/kenwood.c index bc88a2bc5..b53f38b60 100644 --- a/kenwood/kenwood.c +++ b/kenwood/kenwood.c @@ -76,7 +76,8 @@ static const struct kenwood_id kenwood_id_list[] = { { RIG_MODEL_TS570S, 18 }, { RIG_MODEL_TS2000, 19 }, { RIG_MODEL_TS480, 20 }, - { RIG_MODEL_TS590S, 21 }, /* TBC */ + { RIG_MODEL_TS590S, 21 }, + { RIG_MODEL_TS590SG, 23 }, { RIG_MODEL_NONE, UNKNOWN_ID }, /* end marker */ }; @@ -97,7 +98,8 @@ static const struct kenwood_id_string kenwood_id_string_list[] = { { RIG_MODEL_TS570S, "018" }, { RIG_MODEL_TS2000, "019" }, { RIG_MODEL_TS480, "020" }, - { RIG_MODEL_TS590S, "021" }, /* TBC */ + { RIG_MODEL_TS590S, "021" }, + { RIG_MODEL_TS590SG, "023" }, { RIG_MODEL_THD7A, "TH-D7" }, { RIG_MODEL_THD7AG, "TH-D7G" }, { RIG_MODEL_TMD700, "TM-D700" }, @@ -1104,7 +1106,8 @@ int kenwood_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) int err; char data_mode = '0'; - if (RIG_MODEL_TS590S == rig->caps->rig_model) + if (RIG_MODEL_TS590S == rig->caps->rig_model + || RIG_MODEL_TS590SG == rig->caps->rig_model) { /* supports DATA sub modes */ switch (mode) @@ -1140,7 +1143,8 @@ int kenwood_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) if (err != RIG_OK) return err; - if (RIG_MODEL_TS590S == rig->caps->rig_model) + if (RIG_MODEL_TS590S == rig->caps->rig_model + || RIG_MODEL_TS590SG == rig->caps->rig_model) { /* supports DATA sub modes - see above */ sprintf (buf, "DA%c", data_mode); @@ -1232,7 +1236,8 @@ int kenwood_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width) *mode = kenwood2rmode(modebuf[2] - '0', caps->mode_table); - if (RIG_MODEL_TS590S == rig->caps->rig_model) + if (RIG_MODEL_TS590S == rig->caps->rig_model + || RIG_MODEL_TS590SG == rig->caps->rig_model) { /* supports DATA sub-modes */ retval = kenwood_safe_transaction (rig, "DA", modebuf, 6, 4); diff --git a/kenwood/kenwood.h b/kenwood/kenwood.h index 91b001b09..22aa633d0 100644 --- a/kenwood/kenwood.h +++ b/kenwood/kenwood.h @@ -188,6 +188,7 @@ extern const struct rig_caps r5000_caps; extern const struct rig_caps ts480_caps; extern const struct rig_caps ts590_caps; +extern const struct rig_caps ts590sg_caps; extern const struct rig_caps thf6a_caps; extern const struct rig_caps transfox_caps; diff --git a/kenwood/ts590.c b/kenwood/ts590.c index a498e9b92..4835e4fd5 100644 --- a/kenwood/ts590.c +++ b/kenwood/ts590.c @@ -232,6 +232,172 @@ const struct rig_caps ts590_caps = { .vfo_op = kenwood_vfo_op, }; +const struct rig_caps ts590sg_caps = { + .rig_model = RIG_MODEL_TS590SG, + .model_name = "TS-590SG", + .mfg_name = "Kenwood", + .version = BACKEND_VER ".1", + .copyright = "LGPL", + .status = RIG_STATUS_BETA, + .rig_type = RIG_TYPE_TRANSCEIVER, + .ptt_type = RIG_PTT_RIG_MICDATA, + .dcd_type = RIG_DCD_RIG, + .port_type = RIG_PORT_SERIAL, + .serial_rate_min = 4800, + .serial_rate_max = 115200, + .serial_data_bits = 8, + .serial_stop_bits = 1, + .serial_parity = RIG_PARITY_NONE, + .serial_handshake = RIG_HANDSHAKE_HARDWARE, + .write_delay = 0, + .post_write_delay = 0, + .timeout = 500, + .retry = 3, + .preamp = {12, RIG_DBLST_END,}, + .attenuator = {12, RIG_DBLST_END,}, + .max_rit = kHz (9.99), + .max_xit = kHz (9.99), + .max_ifshift = Hz (0), + .targetable_vfo = RIG_TARGETABLE_FREQ, + .transceive = RIG_TRN_RIG, + + +.chan_list = { /* TBC */ + { 0, 89, RIG_MTYPE_MEM, TS590_CHANNEL_CAPS }, + { 90, 99, RIG_MTYPE_EDGE, TS590_CHANNEL_CAPS }, + RIG_CHAN_END, + }, + + .rx_range_list1 = { + {kHz(30), Hz(59999999), TS590_ALL_MODES, -1, -1, TS590_VFO, TS590_ANTS}, + RIG_FRNG_END, + }, /*!< Receive frequency range list for ITU region 1 */ + .tx_range_list1 = { + {kHz(1810), kHz(1850), TS590_OTHER_TX_MODES, 5000, 100000, TS590_VFO, TS590_ANTS}, /* 100W class */ + {kHz(1810), kHz(1850), TS590_AM_TX_MODES, 5000, 25000, TS590_VFO, TS590_ANTS}, /* 25W class */ + {kHz(3500), kHz(3800), TS590_OTHER_TX_MODES, 5000, 100000, TS590_VFO, TS590_ANTS}, + {kHz(3500), kHz(3800), TS590_AM_TX_MODES, 5000, 25000, TS590_VFO, TS590_ANTS}, + {MHz(7), kHz(7200), TS590_OTHER_TX_MODES, 5000, 100000, TS590_VFO, TS590_ANTS}, + {MHz(7), kHz(7200), TS590_AM_TX_MODES, 5000, 25000, TS590_VFO, TS590_ANTS}, + {kHz(10100), kHz(10150), TS590_OTHER_TX_MODES, 5000, 100000, TS590_VFO, TS590_ANTS}, + {kHz(10100), kHz(10150), TS590_AM_TX_MODES, 5000, 25000, TS590_VFO, TS590_ANTS}, + {MHz(14), kHz(14350), TS590_OTHER_TX_MODES, 5000, 100000, TS590_VFO, TS590_ANTS}, + {MHz(14), kHz(14350), TS590_AM_TX_MODES, 5000, 25000, TS590_VFO, TS590_ANTS}, + {kHz(18068), kHz(18168), TS590_OTHER_TX_MODES, 5000, 100000, TS590_VFO, TS590_ANTS}, + {kHz(18068), kHz(18168), TS590_AM_TX_MODES, 5000, 25000, TS590_VFO, TS590_ANTS}, + {MHz(21), kHz(21450), TS590_OTHER_TX_MODES, 5000, 100000, TS590_VFO, TS590_ANTS}, + {MHz(21), kHz(21450), TS590_AM_TX_MODES, 5000, 25000, TS590_VFO, TS590_ANTS}, + {kHz(24890), kHz(24990), TS590_OTHER_TX_MODES, 5000, 100000, TS590_VFO, TS590_ANTS}, + {kHz(24890), kHz(24990), TS590_AM_TX_MODES, 5000, 25000, TS590_VFO, TS590_ANTS}, + {MHz(28), kHz(29700), TS590_OTHER_TX_MODES, 5000, 100000, TS590_VFO, TS590_ANTS}, + {MHz(28), kHz(29700), TS590_AM_TX_MODES, 5000, 25000, TS590_VFO, TS590_ANTS}, + {MHz(50), kHz(52000), TS590_OTHER_TX_MODES, 5000, 100000, TS590_VFO, TS590_ANTS}, + {MHz(50), kHz(52000), TS590_AM_TX_MODES, 5000, 25000, TS590_VFO, TS590_ANTS}, + RIG_FRNG_END, + }, /*!< Transmit frequency range list for ITU region 1 */ + .rx_range_list2 = { + {kHz(30), Hz(59999999), TS590_ALL_MODES, -1, -1, TS590_VFO, TS590_ANTS}, + RIG_FRNG_END, + }, /*!< Receive frequency range list for ITU region 2 */ + .tx_range_list2 = { + {kHz(1800), MHz(2) - 1, TS590_OTHER_TX_MODES, 5000, 100000, TS590_VFO, TS590_ANTS}, /* 100W class */ + {kHz(1800), MHz(2) - 1, TS590_AM_TX_MODES, 5000, 25000, TS590_VFO, TS590_ANTS}, /* 25W class */ + {kHz(3500), MHz(4) - 1, TS590_OTHER_TX_MODES, 5000, 100000, TS590_VFO, TS590_ANTS}, + {kHz(3500), MHz(4) - 1, TS590_AM_TX_MODES, 5000, 25000, TS590_VFO, TS590_ANTS}, + {kHz(5250), kHz(5450), TS590_OTHER_TX_MODES, 5000, 100000, TS590_VFO, TS590_ANTS}, + {kHz(5250), kHz(5450), TS590_AM_TX_MODES, 5000, 25000, TS590_VFO, TS590_ANTS}, + {MHz(7), kHz(7300), TS590_OTHER_TX_MODES, 5000, 100000, TS590_VFO, TS590_ANTS}, + {MHz(7), kHz(7300), TS590_AM_TX_MODES, 5000, 25000, TS590_VFO, TS590_ANTS}, + {kHz(10100), kHz(10150), TS590_OTHER_TX_MODES, 5000, 100000, TS590_VFO, TS590_ANTS}, + {kHz(10100), kHz(10150), TS590_AM_TX_MODES, 5000, 25000, TS590_VFO, TS590_ANTS}, + {MHz(14), kHz(14350), TS590_OTHER_TX_MODES, 5000, 100000, TS590_VFO, TS590_ANTS}, + {MHz(14), kHz(14350), TS590_AM_TX_MODES, 5000, 25000, TS590_VFO, TS590_ANTS}, + {kHz(18068), kHz(18168), TS590_OTHER_TX_MODES, 5000, 100000, TS590_VFO, TS590_ANTS}, + {kHz(18068), kHz(18168), TS590_AM_TX_MODES, 5000, 25000, TS590_VFO, TS590_ANTS}, + {MHz(21), kHz(21450), TS590_OTHER_TX_MODES, 5000, 100000, TS590_VFO, TS590_ANTS}, + {MHz(21), kHz(21450), TS590_AM_TX_MODES, 5000, 25000, TS590_VFO, TS590_ANTS}, + {kHz(24890), kHz(24990), TS590_OTHER_TX_MODES, 5000, 100000, TS590_VFO, TS590_ANTS}, + {kHz(24890), kHz(24990), TS590_AM_TX_MODES, 5000, 25000, TS590_VFO, TS590_ANTS}, + {MHz(28), kHz(29700), TS590_OTHER_TX_MODES, 5000, 100000, TS590_VFO, TS590_ANTS}, + {MHz(28), kHz(29700), TS590_AM_TX_MODES, 5000, 25000, TS590_VFO, TS590_ANTS}, + {MHz(50), kHz(52000), TS590_OTHER_TX_MODES, 5000, 100000, TS590_VFO, TS590_ANTS}, + {MHz(50), kHz(52000), TS590_AM_TX_MODES, 5000, 25000, TS590_VFO, TS590_ANTS}, + RIG_FRNG_END, + }, /*!< Transmit frequency range list for ITU region 2 */ + .tuning_steps = { + {TS590_ALL_MODES,kHz(1)}, + {TS590_ALL_MODES,Hz(2500)}, + {TS590_ALL_MODES,kHz(5)}, + {TS590_ALL_MODES,Hz(6250)}, + {TS590_ALL_MODES,kHz(10)}, + {TS590_ALL_MODES,Hz(12500)}, + {TS590_ALL_MODES,kHz(15)}, + {TS590_ALL_MODES,kHz(20)}, + {TS590_ALL_MODES,kHz(25)}, + {TS590_ALL_MODES,kHz(30)}, + {TS590_ALL_MODES,kHz(100)}, + {TS590_ALL_MODES,kHz(500)}, + {TS590_ALL_MODES,MHz(1)}, + {TS590_ALL_MODES,0}, /* any tuning step */ + RIG_TS_END, + }, + /* mode/filter list, remember: order matters! */ + .filters = { + {RIG_MODE_SSB, kHz(2.2)}, + {RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_RTTY|RIG_MODE_RTTYR, Hz(500)}, + {RIG_MODE_AM, kHz(6)}, + {RIG_MODE_FM, kHz(12)}, + RIG_FLT_END, + }, + .priv = (void *) &ts590_priv_caps, + .rig_init = kenwood_init, + .rig_cleanup = kenwood_cleanup, + .rig_open = kenwood_open, + .set_freq = kenwood_set_freq, + .get_freq = kenwood_get_freq, + .set_rit = kenwood_set_rit, /* FIXME should this switch to rit mode or just set the frequency? */ + .get_rit = kenwood_get_rit, + .set_xit = kenwood_set_xit, /* FIXME should this switch to xit mode or just set the frequency? */ + .get_xit = kenwood_get_xit, + .set_mode = kenwood_set_mode, + .get_mode = kenwood_get_mode, + .set_vfo = kenwood_set_vfo, + .get_vfo = kenwood_get_vfo_if, + .set_split_vfo = kenwood_set_split_vfo, + .get_split_vfo = kenwood_get_split_vfo_if, + .get_ptt = kenwood_get_ptt, + .set_ptt = kenwood_set_ptt, + .get_dcd = kenwood_get_dcd, + .set_powerstat = kenwood_set_powerstat, + .get_powerstat = kenwood_get_powerstat, + .get_info = kenwood_get_info, + .reset = kenwood_reset, + .set_ant = kenwood_set_ant, + .get_ant = kenwood_get_ant, + .scan_ops = TS590_SCAN_OPS, + .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 = RIG_LEVEL_SET(TS590_LEVEL_ALL), + .has_get_level = TS590_LEVEL_ALL, + .set_level = kenwood_set_level, + .get_level = kenwood_get_level, + .has_get_func = TS590_FUNC_ALL, + .has_set_func = TS590_FUNC_ALL, + .set_func = kenwood_set_func, + .get_func = kenwood_get_func, + .set_ctcss_tone = kenwood_set_ctcss_tone, + .get_ctcss_tone = kenwood_get_ctcss_tone, + .ctcss_list = kenwood38_ctcss_list, + .set_trn = kenwood_set_trn, + .get_trn = kenwood_get_trn, + .send_morse = kenwood_send_morse, + .set_mem = kenwood_set_mem, + .get_mem = kenwood_get_mem, + .set_channel = kenwood_set_channel, + .get_channel = kenwood_get_channel, + .vfo_ops = TS590_VFO_OPS, + .vfo_op = kenwood_vfo_op, +}; + /* * Function definitions below