From f3e0178f6bde567affd295af1be3f025ea90077b Mon Sep 17 00:00:00 2001 From: Mike Black W9MDB Date: Fri, 7 Jan 2022 06:55:13 -0600 Subject: [PATCH] Add Barrett 4050 --- include/hamlib/riglist.h | 1 + rigs/barrett/950.c | 2 +- rigs/barrett/Makefile.am | 2 +- rigs/barrett/README.barrett | 3 - rigs/barrett/barrett.c | 336 +++++++++++++++++++----------------- rigs/barrett/barrett.h | 3 +- 6 files changed, 181 insertions(+), 166 deletions(-) delete mode 100644 rigs/barrett/README.barrett diff --git a/include/hamlib/riglist.h b/include/hamlib/riglist.h index b15422785..301e5324f 100644 --- a/include/hamlib/riglist.h +++ b/include/hamlib/riglist.h @@ -627,6 +627,7 @@ #define RIG_BACKEND_BARRETT "barrett" #define RIG_MODEL_BARRETT_2050 RIG_MAKE_MODEL(RIG_BARRETT, 1) #define RIG_MODEL_BARRETT_950 RIG_MAKE_MODEL(RIG_BARRETT, 2) +#define RIG_MODEL_BARRETT_4050 RIG_MAKE_MODEL(RIG_BARRETT, 3) /* * Elad diff --git a/rigs/barrett/950.c b/rigs/barrett/950.c index 942613be1..79531e06c 100644 --- a/rigs/barrett/950.c +++ b/rigs/barrett/950.c @@ -63,7 +63,7 @@ struct chan_map_s }; // Our 10 bands -struct chan_map_s chan_map[] = +static struct chan_map_s chan_map[] = { { 1.8, 2.0, 0}, { 3.5, 4.0, 1}, diff --git a/rigs/barrett/Makefile.am b/rigs/barrett/Makefile.am index 719532135..ebab766bb 100644 --- a/rigs/barrett/Makefile.am +++ b/rigs/barrett/Makefile.am @@ -1,4 +1,4 @@ -BARRETTSRC = barrett.c barrett.h 950.c +BARRETTSRC = barrett.c barrett.h 950.c 4050.c noinst_LTLIBRARIES = libhamlib-barrett.la libhamlib_barrett_la_SOURCES = $(BARRETTSRC) diff --git a/rigs/barrett/README.barrett b/rigs/barrett/README.barrett deleted file mode 100644 index b6c6aed71..000000000 --- a/rigs/barrett/README.barrett +++ /dev/null @@ -1,3 +0,0 @@ -Initial version done for Barrett 250 -May need to break out to separate rigs -Mike Black W9MDB diff --git a/rigs/barrett/barrett.c b/rigs/barrett/barrett.c index 237c8e922..94b11f8c5 100644 --- a/rigs/barrett/barrett.c +++ b/rigs/barrett/barrett.c @@ -46,165 +46,6 @@ #define BARRETT_LEVELS (RIG_LEVEL_STRENGTH) -int barrett_init(RIG *rig); -int barrett_cleanup(RIG *rig); -static int barrett_set_freq(RIG *rig, vfo_t vfo, freq_t freq); -int barrett_get_freq(RIG *rig, vfo_t vfo, freq_t *freq); -int barrett_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt); -static int barrett_get_ptt(RIG *rig, vfo_t vfo, ptt_t *ptt); -int barrett_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width); -int barrett_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, - pbwidth_t *width); - -int barrett_set_split_freq(RIG *rig, vfo_t vfo, freq_t tx_freq); -int barrett_set_split_vfo(RIG *rig, vfo_t rxvfo, split_t split, - vfo_t txvfo); - -int barrett_get_split_vfo(RIG *rig, vfo_t rxvfo, split_t *split, - vfo_t *txvfo); - -static int barrett_get_level(RIG *rig, vfo_t vfo, setting_t level, - value_t *val); - -static const char *barrett_get_info(RIG *rig); - - -const struct rig_caps barrett_caps = -{ - RIG_MODEL(RIG_MODEL_BARRETT_2050), - .model_name = "2050", - .mfg_name = "Barrett", - .version = BACKEND_VER ".0", - .copyright = "LGPL", - .status = RIG_STATUS_STABLE, - .rig_type = RIG_TYPE_TRANSCEIVER, - .targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE, - .ptt_type = RIG_PTT_RIG, - .dcd_type = RIG_DCD_NONE, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 9600, - .serial_rate_max = 9600, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_XONXOFF, - .write_delay = 0, - .post_write_delay = 50, - .timeout = 1000, - .retry = 3, - - .has_get_func = RIG_FUNC_NONE, - .has_set_func = RIG_FUNC_NONE, - .has_get_level = BARRETT_LEVELS, - .has_set_level = RIG_LEVEL_NONE, - .has_get_parm = RIG_PARM_NONE, - .has_set_parm = RIG_PARM_NONE, -// .level_gran = { [LVL_CWPITCH] = { .step = { .i = 10 } } }, -// .ctcss_list = common_ctcss_list, -// .dcs_list = full_dcs_list, -// 2050 does have channels...not implemented yet as no need yet -// .chan_list = { -// { 0, 18, RIG_MTYPE_MEM, DUMMY_MEM_CAP }, -// { 19, 19, RIG_MTYPE_CALL }, -// { 20, NB_CHAN-1, RIG_MTYPE_EDGE }, -// RIG_CHAN_END, -// }, -// .scan_ops = DUMMY_SCAN, -// .vfo_ops = DUMMY_VFO_OP, - .transceive = RIG_TRN_RIG, - .rx_range_list1 = {{ - .startf = kHz(1600), .endf = MHz(30), .modes = BARRETT_MODES, - .low_power = -1, .high_power = -1, BARRETT_VFOS, RIG_ANT_1 - }, - RIG_FRNG_END, - }, - .rx_range_list2 = {RIG_FRNG_END,}, - .tx_range_list1 = {RIG_FRNG_END,}, - .tx_range_list2 = {RIG_FRNG_END,}, - .tuning_steps = { {BARRETT_MODES, 1}, {BARRETT_MODES, RIG_TS_ANY}, RIG_TS_END, }, - .filters = { - {RIG_MODE_SSB | RIG_MODE_CW | RIG_MODE_RTTY, kHz(2.4)}, - {RIG_MODE_CW, Hz(500)}, - {RIG_MODE_AM, kHz(8)}, - {RIG_MODE_AM, kHz(2.4)}, - RIG_FLT_END, - }, - .priv = NULL, - -// .extlevels = dummy_ext_levels, -// .extparms = dummy_ext_parms, -// .cfgparams = dummy_cfg_params, - - .rig_init = barrett_init, - .rig_cleanup = barrett_cleanup, - -// .set_conf = dummy_set_conf, -// .get_conf = dummy_get_conf, - - .set_freq = barrett_set_freq, - .get_freq = barrett_get_freq, - .set_mode = barrett_set_mode, - .get_mode = barrett_get_mode, - -// .set_powerstat = dummy_set_powerstat, -// .get_powerstat = dummy_get_powerstat, -// .set_level = dummy_set_level, - .get_level = barrett_get_level, -// .set_func = dummy_set_func, -// .get_func = dummy_get_func, -// .set_parm = dummy_set_parm, -// .get_parm = dummy_get_parm, -// .set_ext_level = dummy_set_ext_level, -// .get_ext_level = dummy_get_ext_level, -// .set_ext_parm = dummy_set_ext_parm, -// .get_ext_parm = dummy_get_ext_parm, - - .get_info = barrett_get_info, - .set_ptt = barrett_set_ptt, - .get_ptt = barrett_get_ptt, -// .get_dcd = dummy_get_dcd, -// .set_rptr_shift = dummy_set_rptr_shift, -// .get_rptr_shift = dummy_get_rptr_shift, -// .set_rptr_offs = dummy_set_rptr_offs, -// .get_rptr_offs = dummy_get_rptr_offs, -// .set_ctcss_tone = dummy_set_ctcss_tone, -// .get_ctcss_tone = dummy_get_ctcss_tone, -// .set_dcs_code = dummy_set_dcs_code, -// .get_dcs_code = dummy_get_dcs_code, -// .set_ctcss_sql = dummy_set_ctcss_sql, -// .get_ctcss_sql = dummy_get_ctcss_sql, -// .set_dcs_sql = dummy_set_dcs_sql, -// .get_dcs_sql = dummy_get_dcs_sql, - .set_split_freq = barrett_set_split_freq, -// .get_split_freq = dummy_get_split_freq, -// .set_split_mode = dummy_set_split_mode, -// .get_split_mode = dummy_get_split_mode, - .set_split_vfo = barrett_set_split_vfo, - .get_split_vfo = barrett_get_split_vfo, -// .set_rit = dummy_set_rit, -// .get_rit = dummy_get_rit, -// .set_xit = dummy_set_xit, -// .get_xit = dummy_get_xit, -// .set_ts = dummy_set_ts, -// .get_ts = dummy_get_ts, -// .set_ant = dummy_set_ant, -// .get_ant = dummy_get_ant, -// .set_bank = dummy_set_bank, -// .set_mem = dummy_set_mem, -// .get_mem = dummy_get_mem, -// .vfo_op = dummy_vfo_op, -// .scan = dummy_scan, -// .send_dtmf = dummy_send_dtmf, -// .recv_dtmf = dummy_recv_dtmf, -// .send_morse = dummy_send_morse, -// .set_channel = dummy_set_channel, -// .get_channel = dummy_get_channel, -// .set_trn = dummy_set_trn, -// .get_trn = dummy_get_trn, -// .power2mW = dummy_power2mW, -// .mW2power = dummy_mW2power, -}; - DECLARE_INITRIG_BACKEND(barrett) { @@ -212,6 +53,7 @@ DECLARE_INITRIG_BACKEND(barrett) rig_register(&barrett_caps); rig_register(&barrett950_caps); + rig_register(&barrett4050_caps); rig_debug(RIG_DEBUG_VERBOSE, "%s: _init back from rig_register\n", __func__); return RIG_OK; @@ -243,7 +85,8 @@ int barrett_transaction(RIG *rig, char *cmd, int expected, char **result) if (expected == 0) { // response format is 0x11,data...,0x0d,0x0a,0x13 - retval = read_string(&rs->rigport, (unsigned char *) priv->ret_data, sizeof(priv->ret_data), + retval = read_string(&rs->rigport, (unsigned char *) priv->ret_data, + sizeof(priv->ret_data), "\x11", 1, 0, 1); rig_debug(RIG_DEBUG_VERBOSE, "%s: resultlen=%d\n", __func__, (int)strlen(priv->ret_data)); @@ -792,10 +635,38 @@ int barrett_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) const char *barrett_get_info(RIG *rig) { char *response = NULL; + char *series; int retval; rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); + retval = barrett_transaction(rig, "IDR", 0, &response); + + if (retval != RIG_OK) + { + rig_debug(RIG_DEBUG_WARN, "%s: IDR command failed: %s\n", __func__, + strerror(retval)); + } + else + { + series = "unknown"; + } + + series = strdup(response); + retval = barrett_transaction(rig, "IDS", 0, &response); + + if (retval != RIG_OK) + { + rig_debug(RIG_DEBUG_WARN, "%s: IDS command failed: %s\n", __func__, + strerror(retval)); + } + else + { + response = "unknown"; + } + + rig_debug(RIG_DEBUG_VERBOSE, "%s: Barrett series %s, serial# %s\n", __func__, + series, response); retval = barrett_transaction(rig, "IVF", 0, &response); if (retval == RIG_OK) @@ -809,3 +680,148 @@ const char *barrett_get_info(RIG *rig) return response; } + +int barrett_open(RIG *rig) +{ + ENTERFUNC; + barrett_get_info(rig); + RETURNFUNC(RIG_OK); +} + + +const struct rig_caps barrett_caps = +{ + RIG_MODEL(RIG_MODEL_BARRETT_2050), + .model_name = "2050", + .mfg_name = "Barrett", + .version = BACKEND_VER ".0", + .copyright = "LGPL", + .status = RIG_STATUS_STABLE, + .rig_type = RIG_TYPE_TRANSCEIVER, + .targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE, + .ptt_type = RIG_PTT_RIG, + .dcd_type = RIG_DCD_NONE, + .port_type = RIG_PORT_SERIAL, + .serial_rate_min = 9600, + .serial_rate_max = 9600, + .serial_data_bits = 8, + .serial_stop_bits = 1, + .serial_parity = RIG_PARITY_NONE, + .serial_handshake = RIG_HANDSHAKE_XONXOFF, + .write_delay = 0, + .post_write_delay = 50, + .timeout = 1000, + .retry = 3, + + .has_get_func = RIG_FUNC_NONE, + .has_set_func = RIG_FUNC_NONE, + .has_get_level = BARRETT_LEVELS, + .has_set_level = RIG_LEVEL_NONE, + .has_get_parm = RIG_PARM_NONE, + .has_set_parm = RIG_PARM_NONE, +// .level_gran = { [LVL_CWPITCH] = { .step = { .i = 10 } } }, +// .ctcss_list = common_ctcss_list, +// .dcs_list = full_dcs_list, +// 2050 does have channels...not implemented yet as no need yet +// .chan_list = { +// { 0, 18, RIG_MTYPE_MEM, DUMMY_MEM_CAP }, +// { 19, 19, RIG_MTYPE_CALL }, +// { 20, NB_CHAN-1, RIG_MTYPE_EDGE }, +// RIG_CHAN_END, +// }, +// .scan_ops = DUMMY_SCAN, +// .vfo_ops = DUMMY_VFO_OP, + .transceive = RIG_TRN_RIG, + .rx_range_list1 = {{ + .startf = kHz(1600), .endf = MHz(30), .modes = BARRETT_MODES, + .low_power = -1, .high_power = -1, BARRETT_VFOS, RIG_ANT_1 + }, + RIG_FRNG_END, + }, + .rx_range_list2 = {RIG_FRNG_END,}, + .tx_range_list1 = {RIG_FRNG_END,}, + .tx_range_list2 = {RIG_FRNG_END,}, + .tuning_steps = { {BARRETT_MODES, 1}, {BARRETT_MODES, RIG_TS_ANY}, RIG_TS_END, }, + .filters = { + {RIG_MODE_SSB | RIG_MODE_CW | RIG_MODE_RTTY, kHz(2.4)}, + {RIG_MODE_CW, Hz(500)}, + {RIG_MODE_AM, kHz(8)}, + {RIG_MODE_AM, kHz(2.4)}, + RIG_FLT_END, + }, + .priv = NULL, + +// .extlevels = dummy_ext_levels, +// .extparms = dummy_ext_parms, +// .cfgparams = dummy_cfg_params, + + .rig_init = barrett_init, + .rig_open = barrett_open, + .rig_cleanup = barrett_cleanup, + +// .set_conf = dummy_set_conf, +// .get_conf = dummy_get_conf, + + .set_freq = barrett_set_freq, + .get_freq = barrett_get_freq, + .set_mode = barrett_set_mode, + .get_mode = barrett_get_mode, + +// .set_powerstat = dummy_set_powerstat, +// .get_powerstat = dummy_get_powerstat, +// .set_level = dummy_set_level, + .get_level = barrett_get_level, +// .set_func = dummy_set_func, +// .get_func = dummy_get_func, +// .set_parm = dummy_set_parm, +// .get_parm = dummy_get_parm, +// .set_ext_level = dummy_set_ext_level, +// .get_ext_level = dummy_get_ext_level, +// .set_ext_parm = dummy_set_ext_parm, +// .get_ext_parm = dummy_get_ext_parm, + + .get_info = barrett_get_info, + .set_ptt = barrett_set_ptt, + .get_ptt = barrett_get_ptt, +// .get_dcd = dummy_get_dcd, +// .set_rptr_shift = dummy_set_rptr_shift, +// .get_rptr_shift = dummy_get_rptr_shift, +// .set_rptr_offs = dummy_set_rptr_offs, +// .get_rptr_offs = dummy_get_rptr_offs, +// .set_ctcss_tone = dummy_set_ctcss_tone, +// .get_ctcss_tone = dummy_get_ctcss_tone, +// .set_dcs_code = dummy_set_dcs_code, +// .get_dcs_code = dummy_get_dcs_code, +// .set_ctcss_sql = dummy_set_ctcss_sql, +// .get_ctcss_sql = dummy_get_ctcss_sql, +// .set_dcs_sql = dummy_set_dcs_sql, +// .get_dcs_sql = dummy_get_dcs_sql, + .set_split_freq = barrett_set_split_freq, +// .get_split_freq = dummy_get_split_freq, +// .set_split_mode = dummy_set_split_mode, +// .get_split_mode = dummy_get_split_mode, + .set_split_vfo = barrett_set_split_vfo, + .get_split_vfo = barrett_get_split_vfo, +// .set_rit = dummy_set_rit, +// .get_rit = dummy_get_rit, +// .set_xit = dummy_set_xit, +// .get_xit = dummy_get_xit, +// .set_ts = dummy_set_ts, +// .get_ts = dummy_get_ts, +// .set_ant = dummy_set_ant, +// .get_ant = dummy_get_ant, +// .set_bank = dummy_set_bank, +// .set_mem = dummy_set_mem, +// .get_mem = dummy_get_mem, +// .vfo_op = dummy_vfo_op, +// .scan = dummy_scan, +// .send_dtmf = dummy_send_dtmf, +// .recv_dtmf = dummy_recv_dtmf, +// .send_morse = dummy_send_morse, +// .set_channel = dummy_set_channel, +// .get_channel = dummy_get_channel, +// .set_trn = dummy_set_trn, +// .get_trn = dummy_get_trn, +// .power2mW = dummy_power2mW, +// .mW2power = dummy_mW2power, +}; diff --git a/rigs/barrett/barrett.h b/rigs/barrett/barrett.h index 9395d72b7..3513d4149 100644 --- a/rigs/barrett/barrett.h +++ b/rigs/barrett/barrett.h @@ -28,7 +28,7 @@ #include #endif -#define BACKEND_VER "20181111" +#define BACKEND_VER "20220107" #define EOM "\x0d" #define TRUE 1 @@ -40,6 +40,7 @@ extern const struct rig_caps barrett_caps; extern const struct rig_caps barrett950_caps; +extern const struct rig_caps barrett4050_caps; struct barrett_priv_data { char cmd_str[BARRETT_DATA_LEN]; /* command string buffer */