From ed2a359a64fee1843fef649d709c075e865115e6 Mon Sep 17 00:00:00 2001 From: Michael Black Date: Fri, 3 Apr 2020 07:46:11 -0500 Subject: [PATCH] Add Kenwood TS-950S entry --- include/hamlib/riglist.h | 2 +- rigs/kenwood/kenwood.c | 16 ++-- rigs/kenwood/kenwood.h | 5 +- rigs/kenwood/ts950.c | 144 ++++++++++++++++++++++++++++++++- rotators/ioptron/rot_ioptron.c | 2 +- 5 files changed, 157 insertions(+), 12 deletions(-) diff --git a/include/hamlib/riglist.h b/include/hamlib/riglist.h index 430824c44..6c74eb2d4 100644 --- a/include/hamlib/riglist.h +++ b/include/hamlib/riglist.h @@ -132,7 +132,7 @@ #define RIG_MODEL_TS850 RIG_MAKE_MODEL(RIG_KENWOOD, 9) #define RIG_MODEL_TS870S RIG_MAKE_MODEL(RIG_KENWOOD, 10) #define RIG_MODEL_TS940 RIG_MAKE_MODEL(RIG_KENWOOD, 11) -#define RIG_MODEL_TS950 RIG_MAKE_MODEL(RIG_KENWOOD, 12) +#define RIG_MODEL_TS950S RIG_MAKE_MODEL(RIG_KENWOOD, 12) #define RIG_MODEL_TS950SDX RIG_MAKE_MODEL(RIG_KENWOOD, 13) #define RIG_MODEL_TS2000 RIG_MAKE_MODEL(RIG_KENWOOD, 14) #define RIG_MODEL_R5000 RIG_MAKE_MODEL(RIG_KENWOOD, 15) diff --git a/rigs/kenwood/kenwood.c b/rigs/kenwood/kenwood.c index 0e6800f5e..3ffbb18c1 100644 --- a/rigs/kenwood/kenwood.c +++ b/rigs/kenwood/kenwood.c @@ -75,7 +75,7 @@ static const struct kenwood_id kenwood_id_list[] = { RIG_MODEL_TS440, 4 }, { RIG_MODEL_R5000, 5 }, { RIG_MODEL_TS790, 7 }, - { RIG_MODEL_TS950, 8 }, + { RIG_MODEL_TS950S, 8 }, { RIG_MODEL_TS850, 9 }, { RIG_MODEL_TS450S, 10 }, { RIG_MODEL_TS690S, 11 }, @@ -103,10 +103,11 @@ static const struct kenwood_id_string kenwood_id_string_list[] = { RIG_MODEL_TS440, "004" }, { RIG_MODEL_R5000, "005" }, { RIG_MODEL_TS790, "007" }, - { RIG_MODEL_TS950SDX, "008" }, /* reported as RIG_MODEL_TS950SD originally */ + { RIG_MODEL_TS950S, "008" }, { RIG_MODEL_TS850, "009" }, { RIG_MODEL_TS450S, "010" }, { RIG_MODEL_TS690S, "011" }, + { RIG_MODEL_TS950SDX, "012" }, { RIG_MODEL_TS50, "013" }, { RIG_MODEL_TS870S, "015" }, { RIG_MODEL_TS570D, "017" }, /* Elecraft K2|K3 also returns 17 */ @@ -1764,7 +1765,7 @@ int kenwood_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) if (err != RIG_OK) { return err; } - if (RIG_IS_TS590S || RIG_IS_TS590SG || RIG_IS_TS950 || RIG_IS_TS950SDX) + if (RIG_IS_TS590S || RIG_IS_TS590SG || RIG_IS_TS950S || RIG_IS_TS950SDX) { if (!(RIG_MODE_CW == mode || RIG_MODE_CWR == mode @@ -1774,7 +1775,7 @@ int kenwood_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) { char *data_cmd = "DA"; - if (RIG_IS_TS950 || RIG_IS_TS950SDX) + if (RIG_IS_TS950S || RIG_IS_TS950SDX) { data_cmd = "DT"; } @@ -1789,7 +1790,7 @@ int kenwood_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) if (RIG_PASSBAND_NOCHANGE == width) { return RIG_OK; } - if (RIG_IS_TS450S || RIG_IS_TS690S || RIG_IS_TS850 || RIG_IS_TS950SDX) + if (RIG_IS_TS450S || RIG_IS_TS690S || RIG_IS_TS850 || RIG_IS_TS950S || RIG_IS_TS950SDX) { if (RIG_PASSBAND_NORMAL == width) @@ -2008,7 +2009,7 @@ int kenwood_get_mode_if(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width) *width = rig_passband_normal(rig, *mode); - if (RIG_IS_TS450S || RIG_IS_TS690S || RIG_IS_TS850 || RIG_IS_TS950SDX) + if (RIG_IS_TS450S || RIG_IS_TS690S || RIG_IS_TS850 || RIG_IS_TS950S || RIG_IS_TS950SDX) { kenwood_get_filter(rig, width); @@ -3308,7 +3309,7 @@ int kenwood_get_trn(RIG *rig, int *trn) /* these rigs only have AI[0|1] set commands and no AI query */ if (RIG_IS_TS450S || RIG_IS_TS690S || RIG_IS_TS790 || RIG_IS_TS850 - || RIG_IS_TS950SDX) + || RIG_IS_TS950S || RIG_IS_TS950SDX) { return -RIG_ENAVAIL; } @@ -4196,6 +4197,7 @@ DECLARE_INITRIG_BACKEND(kenwood) { rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); + rig_register(&ts950s_caps); rig_register(&ts950sdx_caps); rig_register(&ts50s_caps); rig_register(&ts140_caps); diff --git a/rigs/kenwood/kenwood.h b/rigs/kenwood/kenwood.h index 832c083bd..baec212bf 100644 --- a/rigs/kenwood/kenwood.h +++ b/rigs/kenwood/kenwood.h @@ -27,7 +27,7 @@ #include #include "token.h" -#define BACKEND_VER "20200402" +#define BACKEND_VER "20200403" #define EOM_KEN ';' #define EOM_TH '\r' @@ -93,7 +93,7 @@ extern const struct confparams kenwood_cfg_params[]; #define RIG_IS_TS890S (rig->caps->rig_model == RIG_MODEL_TS890S) #define RIG_IS_TS940 (rig->caps->rig_model == RIG_MODEL_TS940) #define RIG_IS_TS950SDX (rig->caps->rig_model == RIG_MODEL_TS950SDX) -#define RIG_IS_TS950 (rig->caps->rig_model == RIG_MODEL_TS950) +#define RIG_IS_TS950S (rig->caps->rig_model == RIG_MODEL_TS950S) #define RIG_IS_TS990S (rig->caps->rig_model == RIG_MODEL_TS990S) #define RIG_IS_XG3 (rig->caps->rig_model == RIG_MODEL_XG3) @@ -204,6 +204,7 @@ int kenwood_get_trn(RIG *rig, int *trn); int get_kenwood_level(RIG *rig, const char *cmd, float *f); int get_kenwood_func(RIG *rig, const char *cmd, int *status); +extern const struct rig_caps ts950s_caps; extern const struct rig_caps ts950sdx_caps; extern const struct rig_caps ts50s_caps; extern const struct rig_caps ts140_caps; diff --git a/rigs/kenwood/ts950.c b/rigs/kenwood/ts950.c index 0fe3dce8b..a6dd615e0 100644 --- a/rigs/kenwood/ts950.c +++ b/rigs/kenwood/ts950.c @@ -55,6 +55,148 @@ static struct kenwood_priv_caps ts950_priv_caps = * * Reference: TS-950 series External Control Instruction Manual (1992) */ +const struct rig_caps ts950s_caps = +{ + RIG_MODEL(RIG_MODEL_TS950S), + .model_name = "TS-950S", + .mfg_name = "Kenwood", + .version = BACKEND_VER ".0", + .copyright = "LGPL", + .status = RIG_STATUS_STABLE, + .rig_type = RIG_TYPE_TRANSCEIVER, + .ptt_type = RIG_PTT_RIG, + .dcd_type = RIG_DCD_RIG, + .port_type = RIG_PORT_SERIAL, + .serial_rate_min = 1200, + .serial_rate_max = 4800, + .serial_data_bits = 8, + .serial_stop_bits = 2, + .serial_parity = RIG_PARITY_NONE, + .serial_handshake = RIG_HANDSHAKE_NONE, + .write_delay = 0, + .post_write_delay = 0, + .timeout = 200, + .retry = 10, + + .has_get_func = RIG_FUNC_NONE, + .has_set_func = RIG_FUNC_NONE, + + .has_get_level = TS950_GET_LEVEL, + .has_set_level = RIG_LEVEL_NONE, + .has_get_parm = RIG_PARM_NONE, + .has_set_parm = RIG_PARM_NONE, + + .level_gran = {}, + .parm_gran = {}, + .ctcss_list = kenwood38_ctcss_list, + .dcs_list = NULL, + .preamp = { RIG_DBLST_END, }, + /* atten settings are not available in CAT interface */ + .attenuator = { 6, 12, 18, 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, + .bank_qty = 0, + .chan_desc_sz = 0, + + .chan_list = { + { 0, 89, RIG_MTYPE_MEM }, /* TBC */ + { 90, 99, RIG_MTYPE_EDGE }, + RIG_CHAN_END, + }, + + .rx_range_list1 = { RIG_FRNG_END, }, /* FIXME: enter region 1 setting */ + .tx_range_list1 = { RIG_FRNG_END, }, + .rx_range_list2 = { + {kHz(100), MHz(30), TS950_ALL_MODES, -1, -1, TS950_VFO}, + RIG_FRNG_END, + }, + .tx_range_list2 = { + {kHz(1800), MHz(2) - 1, TS950_OTHER_TX_MODES, 5000, W(150), TS950_VFO}, /* 100W class */ + {kHz(1800), MHz(2) - 1, TS950_AM_TX_MODES, 2000, W(40), TS950_VFO}, /* 25W class */ + {kHz(3500), MHz(4) - 1, TS950_OTHER_TX_MODES, 5000, W(150), TS950_VFO}, + {kHz(3500), MHz(4) - 1, TS950_AM_TX_MODES, 2000, W(40), TS950_VFO}, + {MHz(7), kHz(7300), TS950_OTHER_TX_MODES, 5000, W(150), TS950_VFO}, + {MHz(7), kHz(7300), TS950_AM_TX_MODES, 2000, W(40), TS950_VFO}, + {kHz(10100), kHz(10150), TS950_OTHER_TX_MODES, 5000, W(150), TS950_VFO}, + {kHz(10100), kHz(10150), TS950_AM_TX_MODES, 2000, W(40), TS950_VFO}, + {MHz(14), kHz(14350), TS950_OTHER_TX_MODES, 5000, W(150), TS950_VFO}, + {MHz(14), kHz(14350), TS950_AM_TX_MODES, 2000, W(40), TS950_VFO}, + {kHz(18068), kHz(18168), TS950_OTHER_TX_MODES, 5000, W(150), TS950_VFO}, + {kHz(18068), kHz(18168), TS950_AM_TX_MODES, 2000, W(40), TS950_VFO}, + {MHz(21), kHz(21450), TS950_OTHER_TX_MODES, 5000, W(150), TS950_VFO}, + {MHz(21), kHz(21450), TS950_AM_TX_MODES, 2000, W(40), TS950_VFO}, + {kHz(24890), kHz(24990), TS950_OTHER_TX_MODES, 5000, W(150), TS950_VFO}, + {kHz(24890), kHz(24990), TS950_AM_TX_MODES, 2000, W(40), TS950_VFO}, + {MHz(28), kHz(29700), TS950_OTHER_TX_MODES, 5000, W(150), TS950_VFO}, + {MHz(28), kHz(29700), TS950_AM_TX_MODES, 2000, W(40), TS950_VFO}, + RIG_FRNG_END, + }, /* tx range */ + .tuning_steps = { + {TS950_ALL_MODES, 50}, + {TS950_ALL_MODES, 100}, + {TS950_ALL_MODES, kHz(1)}, + {TS950_ALL_MODES, kHz(5)}, + {TS950_ALL_MODES, kHz(9)}, + {TS950_ALL_MODES, kHz(10)}, + {TS950_ALL_MODES, 12500}, + {TS950_ALL_MODES, kHz(20)}, + {TS950_ALL_MODES, kHz(25)}, + {TS950_ALL_MODES, kHz(100)}, + {TS950_ALL_MODES, MHz(1)}, + {TS950_ALL_MODES, 0}, /* any tuning step */ + RIG_TS_END, + }, + /* mode/filter list, remember: order matters! */ + .filters = { + {RIG_MODE_SSB, kHz(2.4)}, + {RIG_MODE_CW, Hz(200)}, + {RIG_MODE_RTTY, Hz(500)}, + {RIG_MODE_AM, kHz(9)}, + {RIG_MODE_FM, kHz(14)}, + RIG_FLT_END, + }, + .priv = (void *)& ts950_priv_caps, + + .rig_init = kenwood_init, + .rig_open = kenwood_open, + .rig_cleanup = kenwood_cleanup, + .set_freq = kenwood_set_freq, + .get_freq = kenwood_get_freq, + .set_rit = kenwood_set_rit, + .get_rit = kenwood_get_rit, + .set_xit = kenwood_set_xit, + .get_xit = kenwood_get_xit, + .set_mode = kenwood_set_mode, + .get_mode = kenwood_get_mode_if, + .set_vfo = kenwood_set_vfo, + .get_vfo = kenwood_get_vfo_if, + .set_ctcss_tone = kenwood_set_ctcss_tone, + .get_ctcss_tone = kenwood_get_ctcss_tone, + .get_ptt = kenwood_get_ptt, + .set_ptt = kenwood_set_ptt, + .get_dcd = kenwood_get_dcd, + /* Things that the '950 doesn't do ... + * .set_func = kenwood_set_func, + * .get_func = kenwood_get_func, + * .set_level = kenwood_set_level, + */ + .get_level = kenwood_get_level, + /* + * .send_morse = kenwood_send_morse, + */ + .vfo_op = kenwood_vfo_op, + .set_mem = kenwood_set_mem, + .get_mem = kenwood_get_mem, + .set_trn = kenwood_set_trn, + .get_trn = kenwood_get_trn, + .set_powerstat = kenwood_set_powerstat, + .get_powerstat = kenwood_get_powerstat, + .reset = kenwood_reset, +}; + const struct rig_caps ts950sdx_caps = { @@ -63,7 +205,7 @@ const struct rig_caps ts950sdx_caps = .mfg_name = "Kenwood", .version = BACKEND_VER ".0", .copyright = "LGPL", - .status = RIG_STATUS_BETA, + .status = RIG_STATUS_STABLE, .rig_type = RIG_TYPE_TRANSCEIVER, .ptt_type = RIG_PTT_RIG, .dcd_type = RIG_DCD_RIG, diff --git a/rotators/ioptron/rot_ioptron.c b/rotators/ioptron/rot_ioptron.c index 7a5387279..4a584ac95 100644 --- a/rotators/ioptron/rot_ioptron.c +++ b/rotators/ioptron/rot_ioptron.c @@ -310,7 +310,7 @@ const struct rot_caps ioptron_rot_caps = .copyright = "LGPL", .status = RIG_STATUS_ALPHA, .rot_type = ROT_TYPE_AZEL, - .port_type = RIG_PORT_SERIAL, + .port_type = RIG_PORT_SERIAL|RIG_PORT_NETWORK, .serial_rate_min = 9600, .serial_rate_max = 9600, .serial_data_bits = 8,