From f51e7ef760300c3711b4e640b8c4a0e071656b55 Mon Sep 17 00:00:00 2001 From: Mike Black W9MDB Date: Sat, 23 Mar 2024 08:46:56 -0500 Subject: [PATCH] Add SDRConsole rig entry since TS-2000 is now hardware flow control by default --- include/hamlib/riglist.h | 1 + rigs/kenwood/kenwood.c | 1 + rigs/kenwood/kenwood.h | 1 + rigs/kenwood/ts2000.c | 246 +++++++++++++++++++++++++++++++++++++++ simulators/simic705.c | 5 +- src/conf.c | 1 + 6 files changed, 253 insertions(+), 2 deletions(-) diff --git a/include/hamlib/riglist.h b/include/hamlib/riglist.h index 85fdc4fe2..4f09e4991 100644 --- a/include/hamlib/riglist.h +++ b/include/hamlib/riglist.h @@ -204,6 +204,7 @@ #define RIG_MODEL_FX4 RIG_MAKE_MODEL(RIG_KENWOOD,53) #define RIG_MODEL_THETIS RIG_MAKE_MODEL(RIG_KENWOOD, 54) #define RIG_MODEL_TRUSDX RIG_MAKE_MODEL(RIG_KENWOOD, 55) +#define RIG_MODEL_SDRCONSOLE RIG_MAKE_MODEL(RIG_KENWOOD, 56) /* * Icom diff --git a/rigs/kenwood/kenwood.c b/rigs/kenwood/kenwood.c index 4ff44d1cb..19b54fabe 100644 --- a/rigs/kenwood/kenwood.c +++ b/rigs/kenwood/kenwood.c @@ -6190,6 +6190,7 @@ DECLARE_INITRIG_BACKEND(kenwood) rig_register(&kx3_caps); rig_register(&k4_caps); rig_register(&xg3_caps); + rig_register(&sdrconsole_caps); rig_register(&ts440_caps); rig_register(&ts940_caps); diff --git a/rigs/kenwood/kenwood.h b/rigs/kenwood/kenwood.h index 7e97593ae..eb6aee8e0 100644 --- a/rigs/kenwood/kenwood.h +++ b/rigs/kenwood/kenwood.h @@ -291,6 +291,7 @@ extern struct rig_caps kx3_caps; extern struct rig_caps k4_caps; extern struct rig_caps xg3_caps; extern struct rig_caps trc80_caps; +extern struct rig_caps sdrconsole_caps; extern struct rig_caps thd7a_caps; extern struct rig_caps thd72a_caps; diff --git a/rigs/kenwood/ts2000.c b/rigs/kenwood/ts2000.c index a1e2bf999..5e127407e 100644 --- a/rigs/kenwood/ts2000.c +++ b/rigs/kenwood/ts2000.c @@ -1915,3 +1915,249 @@ struct rig_caps ts2000_caps = .hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS }; +/* + * SDRConsole TS-2000 rig capabilities + * SDRConsole does not use hardware flow control for example + */ +struct rig_caps sdrconsole_caps = +{ + RIG_MODEL(RIG_MODEL_SDRCONSOLE), + .model_name = "SDRConsole", + .mfg_name = "SDR Radio", + .version = BACKEND_VER ".2", + .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 = 115200, + .serial_data_bits = 8, + .serial_stop_bits = 1, + .serial_parity = RIG_PARITY_NONE, + .serial_handshake = RIG_HANDSHAKE_NONE, + .write_delay = 0, + .post_write_delay = 0, /* ms */ + .timeout = 200, + .retry = 3, + + .has_get_func = TS2000_FUNC_ALL, + .has_set_func = TS2000_FUNC_ALL, + .has_get_level = TS2000_LEVEL_GET, + .has_set_level = TS2000_LEVEL_SET, + .has_get_parm = RIG_PARM_NONE, + .has_set_parm = RIG_PARM_NONE, + .level_gran = + { +#include "level_gran_kenwood.h" + [LVL_VOXDELAY] = { .min = { .i = 0 }, .max = { .i = 30 }, .step = { .i = 1 } }, + [LVL_KEYSPD] = {.min = {.i = 10}, .max = {.i = 60}, .step = {.i = 1}}, + [LVL_CWPITCH] = {.min = {.i = 400}, .max = {.i = 1000}, .step = {.i = 50}}, + [LVL_BKIN_DLYMS] = {.min = {.i = 0}, .max = {.i = 1000}, .step = {.i = 50}}, + [LVL_SLOPE_LOW] = {.min = {.i = 0}, .max = {.i = 1000}, .step = {.i = 10}}, + [LVL_SLOPE_HIGH] = {.min = {.i = 0}, .max = {.i = 5000}, .step = {.i = 10}}, + }, + .parm_gran = {}, + .vfo_ops = TS2000_VFO_OPS, + .scan_ops = TS2000_SCAN_OP, + .ctcss_list = ts2000_ctcss_list, + .dcs_list = ts2000_dcs_list, + .preamp = { 12, RIG_DBLST_END, }, + .attenuator = { 12, RIG_DBLST_END, }, + .max_rit = kHz(20), + .max_xit = kHz(20), + .max_ifshift = kHz(1), + .targetable_vfo = RIG_TARGETABLE_FREQ, + .transceive = RIG_TRN_RIG, + .agc_level_count = 5, + .agc_levels = { RIG_AGC_OFF, RIG_AGC_SLOW, RIG_AGC_MEDIUM, RIG_AGC_FAST, RIG_AGC_SUPERFAST }, + .bank_qty = 0, + .chan_desc_sz = 7, + + .chan_list = { + { 0, 299, RIG_MTYPE_MEM, TS2000_MEM_CAP }, + { 1, 3, RIG_MTYPE_MORSE }, + RIG_CHAN_END, + }, + + .rx_range_list1 = { + {kHz(300), MHz(60), TS2000_ALL_MODES, -1, -1, TS2000_MAINVFO, TS2000_ANTS}, + {MHz(144), MHz(146), TS2000_ALL_MODES, -1, -1, TS2000_MAINVFO}, + {MHz(430), MHz(440), TS2000_ALL_MODES, -1, -1, TS2000_MAINVFO}, + {MHz(144), MHz(146), TS2000_ALL_MODES, -1, -1, TS2000_SUBVFO}, + {MHz(430), MHz(440), TS2000_ALL_MODES, -1, -1, TS2000_SUBVFO}, + RIG_FRNG_END, + }, /* rx range */ + .tx_range_list1 = { + {kHz(1830), kHz(1850), TS2000_OTHER_TX_MODES, W(5), W(100), TS2000_MAINVFO, TS2000_ANTS}, + {kHz(1830), kHz(1850), TS2000_AM_TX_MODES, 2000, 25000, TS2000_MAINVFO, TS2000_ANTS}, + {kHz(3500), kHz(3800), TS2000_OTHER_TX_MODES, W(5), W(100), TS2000_MAINVFO, TS2000_ANTS}, + {kHz(3500), kHz(3800), TS2000_AM_TX_MODES, W(5), W(25), TS2000_MAINVFO, TS2000_ANTS}, + {MHz(7), kHz(7100), TS2000_OTHER_TX_MODES, W(5), W(100), TS2000_MAINVFO, TS2000_ANTS}, + {MHz(7), kHz(7100), TS2000_AM_TX_MODES, W(5), W(25), TS2000_MAINVFO, TS2000_ANTS}, + {MHz(10.1), MHz(10.15), TS2000_OTHER_TX_MODES, W(5), W(100), TS2000_MAINVFO, TS2000_ANTS}, + {MHz(10.1), MHz(10.15), TS2000_AM_TX_MODES, W(5), W(25), TS2000_MAINVFO, TS2000_ANTS}, + {MHz(14), kHz(14350), TS2000_OTHER_TX_MODES, W(5), W(100), TS2000_MAINVFO, TS2000_ANTS}, + {MHz(14), kHz(14350), TS2000_AM_TX_MODES, W(5), W(25), TS2000_MAINVFO, TS2000_ANTS}, + {kHz(18068), kHz(18168), TS2000_OTHER_TX_MODES, W(5), W(100), TS2000_MAINVFO, TS2000_ANTS}, + {kHz(18068), kHz(18168), TS2000_AM_TX_MODES, W(5), W(25), TS2000_MAINVFO, TS2000_ANTS}, + {MHz(21), kHz(21450), TS2000_OTHER_TX_MODES, W(5), W(100), TS2000_MAINVFO, TS2000_ANTS}, + {MHz(21), kHz(21450), TS2000_AM_TX_MODES, W(5), W(25), TS2000_MAINVFO, TS2000_ANTS}, + {kHz(24890), kHz(24990), TS2000_OTHER_TX_MODES, W(5), W(100), TS2000_MAINVFO, TS2000_ANTS}, + {kHz(24890), kHz(24990), TS2000_AM_TX_MODES, W(5), W(25), TS2000_MAINVFO, TS2000_ANTS}, + {MHz(28), kHz(29700), TS2000_OTHER_TX_MODES, W(5), W(100), TS2000_MAINVFO, TS2000_ANTS}, + {MHz(28), kHz(29700), TS2000_AM_TX_MODES, W(5), W(25), TS2000_MAINVFO, TS2000_ANTS}, + {MHz(50), MHz(50.2), TS2000_OTHER_TX_MODES, W(5), W(100), TS2000_MAINVFO, TS2000_ANTS}, + {MHz(50), MHz(50.2), TS2000_AM_TX_MODES, W(5), W(25), TS2000_MAINVFO, TS2000_ANTS}, + {MHz(144), MHz(146), TS2000_OTHER_TX_MODES, W(5), W(100), TS2000_MAINVFO}, + {MHz(144), MHz(146), TS2000_AM_TX_MODES, W(5), W(25), TS2000_MAINVFO}, + {MHz(430), MHz(440), TS2000_OTHER_TX_MODES, W(5), W(50), TS2000_MAINVFO}, + {MHz(430), MHz(440), TS2000_AM_TX_MODES, W(5), W(12.5), TS2000_MAINVFO}, + RIG_FRNG_END, + }, /* tx range */ + + .rx_range_list2 = { + {kHz(300), MHz(60), TS2000_ALL_MODES, -1, -1, TS2000_MAINVFO, TS2000_ANTS}, + {MHz(142), MHz(152), TS2000_ALL_MODES, -1, -1, TS2000_MAINVFO}, + {MHz(420), MHz(450), TS2000_ALL_MODES, -1, -1, TS2000_MAINVFO}, + {MHz(118), MHz(174), TS2000_ALL_MODES, -1, -1, TS2000_SUBVFO}, + {MHz(220), MHz(512), TS2000_ALL_MODES, -1, -1, TS2000_SUBVFO}, + RIG_FRNG_END, + }, /* rx range */ + .tx_range_list2 = { + {kHz(1800), MHz(2), TS2000_OTHER_TX_MODES, W(5), W(100), TS2000_MAINVFO, TS2000_ANTS}, + {kHz(1800), MHz(2), TS2000_AM_TX_MODES, 2000, 25000, TS2000_MAINVFO, TS2000_ANTS}, + {kHz(3500), MHz(4), TS2000_OTHER_TX_MODES, W(5), W(100), TS2000_MAINVFO, TS2000_ANTS}, + {kHz(3500), MHz(4), TS2000_AM_TX_MODES, W(5), W(25), TS2000_MAINVFO, TS2000_ANTS}, + {MHz(7), kHz(7300), TS2000_OTHER_TX_MODES, W(5), W(100), TS2000_MAINVFO, TS2000_ANTS}, + {MHz(7), kHz(7300), TS2000_AM_TX_MODES, W(5), W(25), TS2000_MAINVFO, TS2000_ANTS}, + {MHz(10.1), MHz(10.15), TS2000_OTHER_TX_MODES, W(5), W(100), TS2000_MAINVFO, TS2000_ANTS}, + {MHz(10.1), MHz(10.15), TS2000_AM_TX_MODES, W(5), W(25), TS2000_MAINVFO, TS2000_ANTS}, + {MHz(14), kHz(14350), TS2000_OTHER_TX_MODES, W(5), W(100), TS2000_MAINVFO, TS2000_ANTS}, + {MHz(14), kHz(14350), TS2000_AM_TX_MODES, W(5), W(25), TS2000_MAINVFO, TS2000_ANTS}, + {kHz(18068), kHz(18168), TS2000_OTHER_TX_MODES, W(5), W(100), TS2000_MAINVFO, TS2000_ANTS}, + {kHz(18068), kHz(18168), TS2000_AM_TX_MODES, W(5), W(25), TS2000_MAINVFO, TS2000_ANTS}, + {MHz(21), kHz(21450), TS2000_OTHER_TX_MODES, W(5), W(100), TS2000_MAINVFO, TS2000_ANTS}, + {MHz(21), kHz(21450), TS2000_AM_TX_MODES, W(5), W(25), TS2000_MAINVFO, TS2000_ANTS}, + {kHz(24890), kHz(24990), TS2000_OTHER_TX_MODES, W(5), W(100), TS2000_MAINVFO, TS2000_ANTS}, + {kHz(24890), kHz(24990), TS2000_AM_TX_MODES, W(5), W(25), TS2000_MAINVFO, TS2000_ANTS}, + {MHz(28), kHz(29700), TS2000_OTHER_TX_MODES, W(5), W(100), TS2000_MAINVFO, TS2000_ANTS}, + {MHz(28), kHz(29700), TS2000_AM_TX_MODES, W(5), W(25), TS2000_MAINVFO, TS2000_ANTS}, + {MHz(50), MHz(54), TS2000_OTHER_TX_MODES, W(5), W(100), TS2000_MAINVFO, TS2000_ANTS}, + {MHz(50), MHz(54), TS2000_AM_TX_MODES, W(5), W(25), TS2000_MAINVFO, TS2000_ANTS}, + {MHz(144), MHz(148), TS2000_OTHER_TX_MODES, W(5), W(100), TS2000_MAINVFO}, + {MHz(144), MHz(148), TS2000_AM_TX_MODES, W(5), W(25), TS2000_MAINVFO}, + {MHz(430), MHz(450), TS2000_OTHER_TX_MODES, W(5), W(50), TS2000_MAINVFO}, + {MHz(430), MHz(450), TS2000_AM_TX_MODES, W(5), W(12.5), TS2000_MAINVFO}, + RIG_FRNG_END, + }, /* tx range */ + + .tuning_steps = { + {RIG_MODE_SSB | RIG_MODE_CW | RIG_MODE_RTTY, 1}, + {TS2000_ALL_MODES, 10}, + {TS2000_ALL_MODES, 100}, + {TS2000_ALL_MODES, kHz(1)}, + {TS2000_ALL_MODES, kHz(2.5)}, + {TS2000_ALL_MODES, kHz(5)}, + {RIG_MODE_AM | RIG_MODE_FM, kHz(6.25)}, + {TS2000_ALL_MODES, kHz(10)}, + {RIG_MODE_AM | RIG_MODE_FM, kHz(12.5)}, + {RIG_MODE_AM | RIG_MODE_FM, kHz(12.5)}, + {RIG_MODE_AM | RIG_MODE_FM, kHz(15)}, + {RIG_MODE_AM | RIG_MODE_FM, kHz(20)}, + {RIG_MODE_AM | RIG_MODE_FM, kHz(25)}, + {RIG_MODE_AM | RIG_MODE_FM, kHz(30)}, + {RIG_MODE_AM | RIG_MODE_FM, kHz(50)}, + {RIG_MODE_AM | RIG_MODE_FM, kHz(100)}, + {TS2000_ALL_MODES, MHz(1)}, + {TS2000_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, Hz(200)}, + {RIG_MODE_CW | RIG_MODE_CWR, Hz(50)}, + {RIG_MODE_CW | RIG_MODE_CWR, Hz(1000)}, + {RIG_MODE_CW | RIG_MODE_CWR, Hz(80)}, + {RIG_MODE_CW | RIG_MODE_CWR, Hz(100)}, + {RIG_MODE_CW | RIG_MODE_CWR, Hz(150)}, + {RIG_MODE_CW | RIG_MODE_CWR, Hz(300)}, + {RIG_MODE_CW | RIG_MODE_CWR, Hz(400)}, + {RIG_MODE_CW | RIG_MODE_CWR, Hz(500)}, + {RIG_MODE_CW | RIG_MODE_CWR, Hz(600)}, + {RIG_MODE_CW | RIG_MODE_CWR, Hz(2000)}, + {RIG_MODE_RTTY | RIG_MODE_RTTYR, Hz(500)}, + {RIG_MODE_RTTY | RIG_MODE_RTTYR, Hz(250)}, + {RIG_MODE_RTTY | RIG_MODE_RTTYR, Hz(1000)}, + {RIG_MODE_RTTY | RIG_MODE_RTTYR, Hz(1500)}, + {RIG_MODE_AM, kHz(6)}, + {RIG_MODE_AM, kHz(2.4)}, + {RIG_MODE_FM, kHz(12)}, + {RIG_MODE_FM, kHz(6)}, + RIG_FLT_END, + }, + + .str_cal = TS2000_STR_CAL, + .swr_cal = TS2000_SWR_CAL, + + .ext_tokens = ts2000_ext_tokens, + .extfuncs = ts2000_ext_funcs, + .extlevels = ts2000_ext_levels, + + .priv = (void *)& ts2000_priv_caps, + + .rig_init = ts2000_init, + .rig_open = kenwood_open, + .rig_close = kenwood_close, + .rig_cleanup = kenwood_cleanup, + .set_freq = kenwood_set_freq, + .get_freq = kenwood_get_freq, + .set_rit = ts2000_set_rit, + .get_rit = ts2000_get_rit, + .set_xit = ts2000_set_rit, + .get_xit = ts2000_get_rit, + .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, + .set_ctcss_tone = kenwood_set_ctcss_tone_tn, + .get_ctcss_tone = kenwood_get_ctcss_tone, + .set_ctcss_sql = kenwood_set_ctcss_sql, + .get_ctcss_sql = kenwood_get_ctcss_sql, + .get_ptt = kenwood_get_ptt, + .set_ptt = kenwood_set_ptt, + .get_dcd = kenwood_get_dcd, + .set_func = ts2000_set_func, + .get_func = ts2000_get_func, + .set_level = ts2000_set_level, + .get_level = ts2000_get_level, + .set_ext_func = ts2000_set_ext_func, + .get_ext_func = ts2000_get_ext_func, + .set_ext_level = ts2000_set_ext_level, + .get_ext_level = ts2000_get_ext_level, + .set_ant = kenwood_set_ant, + .get_ant = kenwood_get_ant, + .send_morse = kenwood_send_morse, + .wait_morse = rig_wait_morse, + .send_voice_mem = kenwood_send_voice_mem, + .stop_voice_mem = kenwood_stop_voice_mem, + .vfo_op = kenwood_vfo_op, + .scan = kenwood_scan, + .set_mem = kenwood_set_mem, + .get_mem = kenwood_get_mem, + .get_channel = ts2000_get_channel, + .set_channel = ts2000_set_channel, + .set_trn = kenwood_set_trn, + .get_trn = kenwood_get_trn, + .set_powerstat = kenwood_set_powerstat, + .get_powerstat = kenwood_get_powerstat, + .get_info = kenwood_get_info, + .reset = kenwood_reset, + + .hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS +}; diff --git a/simulators/simic705.c b/simulators/simic705.c index e6bad1bb0..c0579d53e 100644 --- a/simulators/simic705.c +++ b/simulators/simic705.c @@ -37,8 +37,8 @@ int keyspd = 85; // 85=20WPM // we make B different from A to ensure we see a difference at startup float freqA = 14074000; float freqB = 14074500; -mode_t modeA = RIG_MODE_PKTUSB; -mode_t modeB = RIG_MODE_PKTUSB; +mode_t modeA = RIG_MODE_FM; +mode_t modeB = RIG_MODE_FM; int datamodeA = 0; int datamodeB = 0; pbwidth_t widthA = 0; @@ -110,6 +110,7 @@ void frameParse(int fd, unsigned char *frame, int len) return; } +printf("Here#1\n"); dumphex(frame, len); if (frame[0] != 0xfe && frame[1] != 0xfe) diff --git a/src/conf.c b/src/conf.c index 8302f89a2..5e00e8d38 100644 --- a/src/conf.c +++ b/src/conf.c @@ -1452,6 +1452,7 @@ int HAMLIB_API rig_set_conf(RIG *rig, hamlib_token_t token, const char *val) */ int HAMLIB_API rig_get_conf(RIG *rig, hamlib_token_t token, char *val) { + printf("tokendid=%lx, %s\n", token, val); return rig_get_conf2(rig, token, val, 128); }