[Hamlib-commits] Hamlib -- Ham radio control libraries branch master updated. 9731b5fda2124f9f57029
Library to control radio transceivers and receivers
Brought to you by:
n0nb
From: Nate B. <n0...@us...> - 2022-01-07 13:48:15
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Hamlib -- Ham radio control libraries". The branch, master has been updated via 9731b5fda2124f9f570290b57aa8a7fbd3f7753f (commit) via 0f26a981c11383160c5dd7804b8a744a8b7ad523 (commit) via 4dd97ef79c1b54915334040074fd8ebde4e4c141 (commit) via a6e25219ca15aa97abb651cb437490ea9f7081f7 (commit) via f3e0178f6bde567affd295af1be3f025ea90077b (commit) via 1cc0b2fb594709c069aa830b28bf1e12de0cd36d (commit) via e486f10c52fbfa5b89ebfdb0c96d0a866831657e (commit) via 573544120520039b52df8ffd4ccd1843b2cfae3b (commit) via 2f0b12fbb3952e5adac14fbac5328b823f343f51 (commit) via 0b6d4236338b5476830a31119940e307953d1a30 (commit) via 3f431314d83631ef951647d0ad8a42cee9cb5617 (commit) via bf013a9bb3ddd36f6d0e87cba9b1e225a4f5e54a (commit) via 2857a54ea6b34b1b7cfe407b20505f9a78a04f0f (commit) via f634cd3050d61288c48d40ed0b00a71e0214617f (commit) via f5a83df14c24cd5bc7409f839ee60c73b879110f (commit) via 4eb0719f1dfb0e4704ffd9b98892a12937990fd0 (commit) via 5a5902c7edbebe80b7ed4fdeca2dbf753a4660c1 (commit) via 5b942259ac52373ba3b2e25ff7fd6f96659a922b (commit) via 8ee038346446f33624fe4cfd5f23833392d77263 (commit) via a00d78c860ce33efdc897ab2e2d77da8fdf51cf6 (commit) via 60c1be9d0d7dd7e7bda95084b17c0a281ce3531f (commit) via 66819cd13340341d219700102dcfa563895582e5 (commit) via fb048939185ff529bdcacccdb4e80bf7fb504064 (commit) via a38447ece64d45d4b13b6b207111b7c16c276af1 (commit) via be53d99d9fee367a9e138a986be2d8331f3ee0cd (commit) via 18548ef29833de460c598c2ed92995ce46f62e70 (commit) via 01b7f81119a7bca2d128e75a53215e06ecf47438 (commit) via 3fd5198a57884d121f3651c83bec12902d445476 (commit) via 0080044fb1a9d3c78f43bafe737a326945578b60 (commit) via 954d70c143a9a0293371d8def3a7300ce3ca68c4 (commit) via 8a7806997535cf3ec513de02890ae316f8cf9cf6 (commit) via 80188965a16959a954581108f9d53b4cbd719d70 (commit) via a1ea9bf0e3e40133bec1f7b15f620d26d7329543 (commit) via 7c7d04dc84dddf415a5662db47cb0a13ac99b8a0 (commit) via a54b74f3c5fe6ac79fe3bba36faa236081ef33f0 (commit) via e6be62c4af1f5b33ef03941188998a39dec9309c (commit) via 8bf26f1fa0f16cf86b45059723d96b77c6e064ff (commit) via 76b3ec72fd6cb903075255878c31f2e9f38acfe5 (commit) via f547ef0f138f6455c40a6036f8edca77d9502361 (commit) via e9038f7c4194fefb4cd33d29db055b72ec6eda37 (commit) via 05bed8f52e076a08eb4a94ec7b5bcba0c597214a (commit) via 99f964ed7260175626133fc28e0d7ad988ec41cf (commit) via e223cf8ac9f9bc8ab49a99c4d0f25167a26d7cec (commit) via 320eb0975d01d9da97189db749625813ab9a8511 (commit) via 739e0633f7ad904fc83914bbdf3ec64b817b4f48 (commit) via 32a990346689c5e7eaf3a58cf27803f41ec49f99 (commit) via 502409aa174844939f008cc51779696b6829f32c (commit) via cab6ae80b5f141e68c1f899f4327fd7de8e4da44 (commit) via c8cf296711e193e53e51c9874f5681685518a50e (commit) via 882471bf19c8b8fa2c15bd1b316476a707d28540 (commit) via 664ca3871513bacc454c1e3f7b0808ea0094d7b1 (commit) via 6d16f2415755e69a96cc0040852e7ed893b53ec6 (commit) via f5b229f9dc4b4364d2f40e0b0b415e92c9a371ce (commit) via 36859c33dc8668a553fb4ae53103a8cd16749fe5 (commit) via a77f18b79a4c1479e0174c335d5ed9cc93bad5dd (commit) via 86a6ffb19e3aae8a1364dab9bd696d93ed4755de (commit) via 1c0ecc7ec63405e65fbb4386c85381823333f12d (commit) via b0b660ede9e3f839249104170e249d8ac3813902 (commit) via 045ab048f1d7ac4d4fa450c21b4651abcd40ea77 (commit) via af3027bbd1dc173c4ef6f85d33feef637a608528 (commit) via d2d622a3e814d4aaaaa55de09eed1146491e1564 (commit) via 43889b1af9553071f6837478e14603a813a9e1da (commit) via 7ce460f7d6721d6c5fdeb2dafd055fc4bf137572 (commit) via fc002ad1877db2d9729b94f84d35121d938fd759 (commit) via 1518b8033c9b1d201badc045cdd4b19a7b0d4bb2 (commit) via d4d4547321b4ced028a06c3cf342c6009250db86 (commit) via 451aa7be0c51b1417ef5d14e9ce5d7aa762d8c4e (commit) via 16406bba09a120baadb48be6045625ef6b2ee75e (commit) via 0ccf0b480c8b24d84f087d86401a27b93be0e719 (commit) via 70beeb69e1f1eb0bacdc50ea4e70c43fbd9d835a (commit) via 2f15661067ae132887f159f9849050c61bb2d9a4 (commit) via 09746800222bf1943f311832a264e90b77a8c6cf (commit) via 1048cbb56859909103f94b7813e65a83274bcee8 (commit) via 2fe9117639b81b2e5bfec12b0a3ecb994df01d49 (commit) via 65cfbb97609adc6bfc28f812cad635cae02ccdce (commit) via 3a79e125c468d9aa1aacf789f6edf22cee8a7452 (commit) via 3da4a9ea740a3b639d04aa8ed04d5f54090f2e3a (commit) via 1601375f7a7e2176dd9e5593fcfbaf5d50af1bde (commit) via 665e0de4881466e1ef89f2ce1c0add95d92f1bf1 (commit) via 196be77da4ef202cc79640c4be64f9538fed1290 (commit) via 016bcfcf394c0b7562b90ef1f29bee7d8f49b753 (commit) via a9fd2020f6a453815ee85dc9aeb175751be2af29 (commit) via ef77f1c71f58834cc497610431c93b1038b0126e (commit) via 90400c0d9f3f3fff0c745e8e6bf9d9ccad9f3b77 (commit) via 72dac9a573f37334caa6c01c846d934810a055a0 (commit) via 5a188089330c0bba04ce78ed0a0ca1763b4de0db (commit) via 499ffcc1f849d10ec3c6119c7817c0d4161a2c47 (commit) via d510893f7e68940e16fb044482512d1f42495526 (commit) via 52e856dbbe22e784e35c55d5ada5d37b6c714008 (commit) via 55b8f03c740ef35b1da0becb93f99d45cf2a759b (commit) via 8c5816c53c508fd9e6dd3ef1aebeb23f83203cc5 (commit) via e602e7da54b30875dfb92f8e1ffb195a23a04900 (commit) via cee10db2cd81b6afcb35ff395216c3a02f209e42 (commit) via 296b3b6e034fde28324aa4201f3320c96351c323 (commit) via b62d1da67194c39a95808a574ddadbc9564904fa (commit) via 2c7394f638a3a74b1e23fc21b290a9c04c8ae966 (commit) via dfa6b730d93b06f259256d856c4fde2641faeced (commit) via f12b4187e402f7bf07573982ad61cac80874aacb (commit) via 367023db31dfcf25ba15208c10e27b1b348575ba (commit) via 783ae504a75211afc6864ccab2eb00e96eba4500 (commit) via 4f4b14f771d6501f7010bc66e1b45ece5e5b1d97 (commit) via ece4d8484ff3916d340076242aa356bcb63bb40a (commit) via baea7e8c9a30ddf051cd04deec1b715856e4ed83 (commit) via 2cd18ffa3cecbecc4b5ff408275831b8e31ee909 (commit) via 99b98934300e83a66ca9f8f14f8df58b958828e6 (commit) via a7693b00f4c8ff1630ef8f5fbcb8509afc18a53f (commit) via 0d8e1355bd0db769d2c0d7a1512cd9293dba31db (commit) via 0fe723d6facffc2a688a5f0fe92659fa947734b2 (commit) via 908f33b8efefad1b3009968f023e00d0b3b59c13 (commit) via b78ec43e2e8c391f0eca5761f7d059c013b23173 (commit) via cd9a24b72e3a21eaa37cb6563d3a3b1c7b014bc6 (commit) via c764336e730135324f9a5df5d4ee0df3b9ccb6ff (commit) via c901126bf61888967e65a093abfd31c57fba65cf (commit) via 39d9577c1c1de02a23cac044ef5a5aa9f0192893 (commit) via dc0c5ddcf6625e79389bf093523bcf73608568fa (commit) via 4d33abeaae869925eb6aab165aaa05283354207c (commit) via 3cf36a7877be815ddd77b64f2ae52ef599ba0b58 (commit) via c6c18c0903850fb962dad9041d48647989a6c067 (commit) via 1a88ae350b5fa259ea5c2a997354f9bc5e9298c0 (commit) via db38378412543307df572ee4469e9b49af9e2098 (commit) via 2f95f7a8f4028153e42b602980efe9321bd96886 (commit) via 7ea9eb3f13f0358285e4900522870de6edaa6be4 (commit) via 16cf1990155faaf547b2bb6a8349d0349557f965 (commit) via dda13b91c66fc4118f2e7db9c068338ad61f9e34 (commit) via e9b732d6fde5e7affe388129d13f54068775b6da (commit) via 41eb23bb26a27f8af8badadba45c8edbbcb6a0c8 (commit) via 6aa7f9e9bc169eb71b428d59262da999caa78a65 (commit) via 09aae91d37ef9f7f06b284f79cba8ef308a6c2c9 (commit) via 4c0af35163504501514fe598e57e7bf2705a2e4e (commit) via 465d14ff3039539c95220ff3e68f6dd51408a51a (commit) via baa70cdca11d9f2a61985b240558cb8890b1a844 (commit) via 32ce1bae50706daf6d8e3bba5d135f69fa23ff70 (commit) via e257116689fbee21a54d12215bf562b0591942f1 (commit) via 1d067d6a4302be573b89d304e4da90784c632a84 (commit) via 56c95b152953acc868f9d16c04e8926b4c770fda (commit) via add666f8919b0584d68a7fd3e603b9c0193f73ca (commit) via 5e15159c79c056d235f69a1c092fdae6029bd081 (commit) via 4fa2d684778052087c655f5eae98a3ddcfb55bae (commit) via 26bfaa37ead9ab31ea8a5f0a6e375271c4e2c18c (commit) via b90c745239ff303adf3a0a121bec78ac51d6229b (commit) via 550e5daa3bbac1d89edcb25f43dfd704d6c58760 (commit) via 759918aac6263798b2df4137f9a3f12a1bc71da9 (commit) via c67f21bf963c626d9ab31e3aaac159371b70a51e (commit) via cb80f2b18da3938e2d438dcf392f08136cde4ce6 (commit) via 67e18b865e8a1376c55bcfff62deeb1e883408c1 (commit) via 674a9868d907e1cf2ffbf02e4432e6be6caa09db (commit) via b11f2e4bbfe4a97a485b965ef43c27caf3cec5d7 (commit) via 4d1e7e63f10438a5231961947d144fffacbf846f (commit) via 07cac7be764c676f79618dc9074b0c5a32157bf3 (commit) via 16976641e781c06a1d0dbe421f3e43a1a02b5b8a (commit) via 1b6a1b85a8efdcfc354df2c2b276c7c0a24721f4 (commit) via c6fbc8e682c9da469d808e66d4a24e14a8c64b5d (commit) via 29541d98069b89117ceaf242ca7fde7f79560b9f (commit) via c20f397c24f5737a97f031ae22845a76348dc9b6 (commit) via d857f181635059fd6c227f758cffd0707f26ffe5 (commit) via 39cec4aa27e6b3211034298df51ab852af862765 (commit) via 1f538ad7ece1533f596da38fd03a3367319d2050 (commit) from 223488699853a2555c45a2a08d835ba4d8eeff73 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 9731b5fda2124f9f570290b57aa8a7fbd3f7753f Author: Mike Black W9MDB <mdb...@ya...> Date: Fri Jan 7 07:23:37 2022 -0600 Remove README.Barrett from Makefile.am diff --git a/rigs/barrett/Makefile.am b/rigs/barrett/Makefile.am index ebab766b..5df26260 100644 --- a/rigs/barrett/Makefile.am +++ b/rigs/barrett/Makefile.am @@ -3,4 +3,4 @@ BARRETTSRC = barrett.c barrett.h 950.c 4050.c noinst_LTLIBRARIES = libhamlib-barrett.la libhamlib_barrett_la_SOURCES = $(BARRETTSRC) -EXTRA_DIST = README.barrett Android.mk +EXTRA_DIST = Android.mk commit 0f26a981c11383160c5dd7804b8a744a8b7ad523 Author: Mike Black W9MDB <mdb...@ya...> Date: Fri Jan 7 07:17:57 2022 -0600 Add 4050.c diff --git a/rigs/barrett/4050.c b/rigs/barrett/4050.c new file mode 100644 index 00000000..e752fe58 --- /dev/null +++ b/rigs/barrett/4050.c @@ -0,0 +1,266 @@ +/* + * Hamlib Barrett 4050 backend - main file + * Copyright (c) 2017-2022 by Michael Black W9MDB + * + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <math.h> + +#include <hamlib/rig.h> +#include "serial.h" +#include "misc.h" +#include "cal.h" +#include "token.h" +#include "register.h" + +#include "barrett.h" + +#define MAXCMDLEN 32 + +#define BARRETT4050_VFOS (RIG_VFO_A|RIG_VFO_MEM) + +#define BARRETT4050_MODES (RIG_MODE_AM | RIG_MODE_CW | RIG_MODE_RTTY | RIG_MODE_SSB) + +#define BARRETT4050_LEVELS (RIG_LEVEL_NONE) + +#define BARRETT4050_FUNCTIONS (RIG_FUNC_TUNER) + + +static int barrett4050_set_freq(RIG *rig, vfo_t vfo, freq_t freq); + +static int barrett4050_get_level(RIG *rig, vfo_t vfo, setting_t level, + value_t *val); + +static const char *barrett4050_get_info(RIG *rig); + +// 10 band channel from 441 to 450 +#define CHANNEL_BASE 441 + +struct chan_map_s +{ + float lo, hi; + int chan_offset; +}; + +// Our 10 bands +static struct chan_map_s chan_map[] = +{ + { 1.8, 2.0, 0}, + { 3.5, 4.0, 1}, + { 5.3, 5.4, 2}, + { 7.0, 7.3, 3}, + { 10.1, 10.15, 4}, + { 14.0, 14.35, 5}, + { 18.068, 18.168, 6}, + { 21.0, 21.45, 7}, + { 24.89, 24.99, 8}, + { 28.0, 29.7, 9} +}; + +const struct rig_caps barrett4050_caps = +{ + RIG_MODEL(RIG_MODEL_BARRETT_4050), + .model_name = "4050", + .mfg_name = "Barrett", + .version = BACKEND_VER ".0", + .copyright = "LGPL", + .status = RIG_STATUS_ALPHA, + .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 = 115200, + .serial_data_bits = 8, + .serial_stop_bits = 1, + .serial_parity = RIG_PARITY_NONE, + .serial_handshake = RIG_HANDSHAKE_XONXOFF, + .write_delay = 0, + .post_write_delay = 0, + .timeout = 1000, + .retry = 3, + + .has_get_func = BARRETT4050_FUNCTIONS, + .has_set_func = BARRETT4050_FUNCTIONS, + .has_get_level = BARRETT4050_LEVELS, + .has_set_level = RIG_LEVEL_NONE, + .has_get_parm = RIG_PARM_NONE, + .has_set_parm = RIG_PARM_NONE, + .transceive = RIG_TRN_RIG, + .rx_range_list1 = {{ + .startf = kHz(1600), .endf = MHz(30), .modes = BARRETT4050_MODES, + .low_power = -1, .high_power = -1, BARRETT4050_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 = { {BARRETT4050_MODES, 1}, {BARRETT4050_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, + + .rig_init = barrett_init, + .rig_cleanup = barrett_cleanup, + + .set_freq = barrett4050_set_freq, + .get_freq = barrett_get_freq, + .set_mode = barrett_set_mode, + .get_mode = barrett_get_mode, + + .get_level = barrett4050_get_level, + + .get_info = barrett4050_get_info, + .set_ptt = barrett_set_ptt, + .get_ptt = NULL, + .set_split_freq = barrett_set_split_freq, + .set_split_vfo = barrett_set_split_vfo, + .get_split_vfo = barrett_get_split_vfo, +}; + +/* + * barrett4050_set_freq + * assumes rig!=NULL, rig->state.priv!=NULL + */ +int barrett4050_set_freq(RIG *rig, vfo_t vfo, freq_t freq) +{ + char cmd_buf[MAXCMDLEN]; + int retval; + int i; + int chan = -1; + freq_t freq_rx, freq_tx; + freq_t freq_MHz; + char *response = NULL; + //struct barrett_priv_data *priv = rig->state.priv; + + rig_debug(RIG_DEBUG_VERBOSE, "%s: vfo=%s freq=%.0f\n", __func__, + rig_strvfo(vfo), freq); + + // 950 can only set freq via memory channel + // So we make a 10-channel memory from 441-450 by band + // And we don't care about VFO -- we set TX=RX to avoid doing split freq changes + // Trying to minimize writes to EEPROM + + // What band is being requested? + freq_MHz = freq / 1e6; + + for (i = 0; i < 10; ++i) + { + if (freq_MHz >= chan_map[i].lo && freq_MHz <= chan_map[i].hi) + { + chan = CHANNEL_BASE + chan_map[i].chan_offset; + } + } + + rig_debug(RIG_DEBUG_VERBOSE, "%s: using chan %d for freq %.0f \n", __func__, + chan, freq); + + // Set the channel + sprintf((char *) cmd_buf, "XC%04d", chan); + retval = barrett_transaction(rig, cmd_buf, 0, &response); + + if (retval < 0) + { + return retval; + } + + // Read the current channel for the requested freq to see if it needs changing + sprintf((char *) cmd_buf, "IDC%04d", chan); + retval = barrett_transaction(rig, cmd_buf, 0, &response); + + if (retval < 0) + { + return retval; + } + + if (sscanf(response, "%4d%8lf%8lf", &chan, &freq_rx, &freq_tx) != 2) + { + rig_debug(RIG_DEBUG_ERR, "%s: unable to parse chan/freq from %s\n", __func__, + response); + return -RIG_EPROTO; + } + + rig_debug(RIG_DEBUG_VERBOSE, "%s: got chan %d, freq_rx=%.0f, freq_tx=%.0f", + __func__, chan, + freq_rx, freq_tx); + + if (freq_rx == freq && freq_tx == freq) + { + rig_debug(RIG_DEBUG_VERBOSE, "%s: no freq change needed\n", __func__); + return RIG_OK; + } + + // New freq so let's update the channel + // We do not support split mode -- too many writes to EEPROM to support it + sprintf((char *) cmd_buf, "PC%04dR%08.0lfT%08.0lf", chan, freq, freq); + retval = barrett_transaction(rig, cmd_buf, 0, &response); + + if (retval != RIG_OK || strncmp(response, "OK", 2) != 0) + { + rig_debug(RIG_DEBUG_ERR, "%s: Expected OK, got '%s'\n", __func__, response); + return -RIG_EPROTO; + } + + return RIG_OK; +} + +/* + * barrett4050_get_level + */ +int barrett4050_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) +{ + return -RIG_ENIMPL; +} + +/* + * barrett4050_get_info + */ +const char *barrett4050_get_info(RIG *rig) +{ + char *response = NULL; + int retval; + + rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); + + retval = barrett_transaction(rig, "IV", 0, &response); + + if (retval == RIG_OK) + { + rig_debug(RIG_DEBUG_ERR, "%s: result=%s\n", __func__, response); + } + else + { + rig_debug(RIG_DEBUG_VERBOSE, "Software Version %s\n", response); + } + + return response; +} commit 4dd97ef79c1b54915334040074fd8ebde4e4c141 Author: Mike Black W9MDB <mdb...@ya...> Date: Fri Jan 7 07:12:17 2022 -0600 Change Barret set_mode to use temporary commmand instead of channel write diff --git a/NEWS b/NEWS index 0608718d..073de2cd 100644 --- a/NEWS +++ b/NEWS @@ -14,6 +14,7 @@ Version 5.x Version 4.5 * 202?-??-?? + * Added Barrett 4050 * Added TM-V71(A) * Added IC-F8101 * Added JRC JST-145 and JST-245 diff --git a/rigs/barrett/barrett.c b/rigs/barrett/barrett.c index 94b11f8c..37226d25 100644 --- a/rigs/barrett/barrett.c +++ b/rigs/barrett/barrett.c @@ -435,7 +435,7 @@ int barrett_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) return -RIG_EINVAL; } - sprintf((char *) cmd_buf, "XB%c" EOM, ttmode); + sprintf((char *) cmd_buf, "TB%c" EOM, ttmode); retval = barrett_transaction(rig, cmd_buf, 0, NULL); commit a6e25219ca15aa97abb651cb437490ea9f7081f7 Merge: f3e0178f 1cc0b2fb Author: Mike Black W9MDB <mdb...@ya...> Date: Fri Jan 7 06:55:30 2022 -0600 Merge branch 'master' of https://github.com/Hamlib/Hamlib commit f3e0178f6bde567affd295af1be3f025ea90077b Author: Mike Black W9MDB <mdb...@ya...> Date: Fri Jan 7 06:55:13 2022 -0600 Add Barrett 4050 diff --git a/include/hamlib/riglist.h b/include/hamlib/riglist.h index b1542278..301e5324 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 942613be..79531e06 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 71953213..ebab766b 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 b6c6aed7..00000000 --- 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 237c8e92..94b11f8c 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 9395d72b..3513d414 100644 --- a/rigs/barrett/barrett.h +++ b/rigs/barrett/barrett.h @@ -28,7 +28,7 @@ #include <sys/time.h> #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 */ commit 1cc0b2fb594709c069aa830b28bf1e12de0cd36d Merge: 57354412 e486f10c Author: Michael Black <mdb...@ya...> Date: Thu Jan 6 10:05:52 2022 -0600 Merge pull request #922 from mikaelnousiainen/fix-typo-1 Fix typo in conf parameters documentation commit e486f10c52fbfa5b89ebfdb0c96d0a866831657e Author: Mikael Nousiainen <mik...@ik...> Date: Thu Jan 6 10:38:39 2022 +0200 Fix typo in conf parameters documentation diff --git a/src/conf.c b/src/conf.c index 40bebeae..b6225476 100644 --- a/src/conf.c +++ b/src/conf.c @@ -170,7 +170,7 @@ static const struct confparams frontend_cfg_params[] = }, { TOK_ASYNC, "async", "Asynchronous data transfer support", - "True enables asynchronous data transfer for backends that support it. This enabled handling of transceive and spectrum data, for example.", + "True enables asynchronous data transfer for backends that support it. This allows use of transceive and spectrum data.", "0", RIG_CONF_CHECKBUTTON, { } }, commit 573544120520039b52df8ffd4ccd1843b2cfae3b Author: Mike Black W9MDB <mdb...@ya...> Date: Wed Jan 5 22:58:30 2022 -0600 Fix set_mode_with_data for IC-7200 https://github.com/Hamlib/Hamlib/issues/921 diff --git a/rigs/icom/icom.c b/rigs/icom/icom.c index d117e57d..f0758922 100644 --- a/rigs/icom/icom.c +++ b/rigs/icom/icom.c @@ -2510,6 +2510,8 @@ int icom_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width) } else { + priv_data->filter = 0; + if (mode_len == 2) priv_data->filter = modebuf[2]; rig_debug(RIG_DEBUG_TRACE, "%s: modebuf[0]=0x%02x, modebuf[1]=0x%02x, mode_len=%d\n", __func__, modebuf[0], modebuf[1], mode_len); diff --git a/rigs/icom/icom.h b/rigs/icom/icom.h index 412144b6..f98ad274 100644 --- a/rigs/icom/icom.h +++ b/rigs/icom/icom.h @@ -30,7 +30,7 @@ #include <sys/time.h> #endif -#define BACKEND_VER "20211222" +#define BACKEND_VER "20220105" #define ICOM_IS_SECONDARY_VFO(vfo) ((vfo) & (RIG_VFO_B | RIG_VFO_SUB | RIG_VFO_SUB_B | RIG_VFO_MAIN_B)) #define ICOM_GET_VFO_NUMBER(vfo) (ICOM_IS_SECONDARY_VFO(vfo) ? 0x01 : 0x00) commit 2f0b12fbb3952e5adac14fbac5328b823f343f51 Author: Mike Black W9MDB <mdb...@ya...> Date: Wed Jan 5 13:13:12 2022 -0600 Fix WIN32 build diff --git a/src/iofunc.c b/src/iofunc.c index 99f9b0b3..76171213 100644 --- a/src/iofunc.c +++ b/src/iofunc.c @@ -433,6 +433,7 @@ int HAMLIB_API port_close(hamlib_port_t *p, rig_port_t port_type) extern int is_uh_radio_fd(int fd); +#ifdef ASYNC_BUG static int port_read_sync_data_error_code(hamlib_port_t *p) { ssize_t total_bytes_read = 0; @@ -573,6 +574,7 @@ static ssize_t port_read_sync_data_pipe(hamlib_port_t *p, void *buf, size_t coun { return port_read_sync_data(p, buf, count); } +#endif /* On MinGW32/MSVC/.. the appropriate accessor must be used * depending on the port type, sigh. commit 0b6d4236338b5476830a31119940e307953d1a30 Author: Mike Black W9MDB <mdb...@ya...> Date: Wed Jan 5 13:11:34 2022 -0600 Revert "Fix win32 build" This reverts commit 3f431314d83631ef951647d0ad8a42cee9cb5617. diff --git a/rigs/icom/ic706.c b/rigs/icom/ic706.c index f953530b..67db3529 100644 --- a/rigs/icom/ic706.c +++ b/rigs/icom/ic706.c @@ -615,11 +615,7 @@ const struct rig_caps ic706mkiig_caps = .get_split_mode = icom_get_split_mode, .set_split_vfo = icom_set_split_vfo, .get_split_vfo = icom_mem_get_split_vfo, - .hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS, - .async_data_supported = 1, - .read_frame_direct = icom_read_frame_direct, - .is_async_frame = icom_is_async_frame, - .process_async_frame = icom_process_async_frame, + .hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS }; diff --git a/rigs/yaesu/ft3000.c b/rigs/yaesu/ft3000.c index 8a7b15fc..d2e590e3 100644 --- a/rigs/yaesu/ft3000.c +++ b/rigs/yaesu/ft3000.c @@ -234,18 +234,6 @@ int ft3000_get_ant(RIG *rig, vfo_t vfo, ant_t dummy, value_t *option, RETURNFUNC(RIG_OK); } -static int dx3000_set_vfo(RIG *rig, vfo_t vfo) -{ - rig->state.current_vfo = vfo; - RETURNFUNC(RIG_OK); -} - -static int dx3000_get_vfo(RIG *rig, vfo_t *vfo) -{ - *vfo = rig->state.current_vfo; - RETURNFUNC(RIG_OK); -} - /* * FTDX 3000 rig capabilities @@ -258,7 +246,7 @@ const struct rig_caps ftdx3000_caps = RIG_MODEL(RIG_MODEL_FTDX3000), .model_name = "FTDX-3000", .mfg_name = "Yaesu", - .version = NEWCAT_VER ".5a", + .version = NEWCAT_VER ".5", .copyright = "LGPL", .status = RIG_STATUS_STABLE, .rig_type = RIG_TYPE_TRANSCEIVER, @@ -273,8 +261,8 @@ const struct rig_caps ftdx3000_caps = .serial_handshake = RIG_HANDSHAKE_HARDWARE, // write_delay 5ms or less was causing VS1;VS; to answer with VS0 instead of VS1 even though change did occur // see https://github.com/Hamlib/Hamlib/issues/906 - .write_delay = 0, - .post_write_delay = 25, // same as FT-991 + .write_delay = 10, + .post_write_delay = FTDX5000_POST_WRITE_DELAY, .timeout = 2000, .retry = 3, .has_get_func = FTDX5000_FUNCS, @@ -297,7 +285,7 @@ const struct rig_caps ftdx3000_caps = .max_xit = Hz(9999), .max_ifshift = Hz(1000), .vfo_ops = FTDX5000_VFO_OPS, - .targetable_vfo = RIG_TARGETABLE_FREQ|RIG_TARGETABLE_MODE, /* one of the few diffs from the 5000 */ + .targetable_vfo = RIG_TARGETABLE_FREQ, /* one of the few diffs from the 5000 */ .transceive = RIG_TRN_OFF, /* May enable later as the 5000 has an Auto Info command */ .bank_qty = 0, .chan_desc_sz = 0, @@ -384,8 +372,8 @@ const struct rig_caps ftdx3000_caps = .get_freq = newcat_get_freq, .set_mode = newcat_set_mode, .get_mode = newcat_get_mode, - .set_vfo = dx3000_set_vfo, - .get_vfo = dx3000_get_vfo, + .set_vfo = newcat_set_vfo, + .get_vfo = newcat_get_vfo, .set_ptt = newcat_set_ptt, .get_ptt = newcat_get_ptt, .set_split_vfo = newcat_set_split_vfo, diff --git a/rigs/yaesu/newcat.c b/rigs/yaesu/newcat.c index b09e0fcb..dc0039a8 100644 --- a/rigs/yaesu/newcat.c +++ b/rigs/yaesu/newcat.c @@ -10099,7 +10099,7 @@ int newcat_set_cmd_validate(RIG *rig) } else if ((strncmp(priv->cmd_str, "VS", 2) == 0) && (strlen(priv->cmd_str) > 3)) { - strcpy(valcmd, "ID;"); + strcpy(valcmd, "VS;"); } else if (strncmp(priv->cmd_str, "SV", 2) == 0) { diff --git a/rigs/yaesu/newcat.h b/rigs/yaesu/newcat.h index cc59fcd3..9fe9023e 100644 --- a/rigs/yaesu/newcat.h +++ b/rigs/yaesu/newcat.h @@ -50,7 +50,7 @@ typedef char ncboolean; /* shared function version */ -#define NEWCAT_VER "20220103" +#define NEWCAT_VER "20211227" /* Hopefully large enough for future use, 128 chars plus '\0' */ #define NEWCAT_DATA_LEN 129 diff --git a/src/iofunc.c b/src/iofunc.c index 76171213..99f9b0b3 100644 --- a/src/iofunc.c +++ b/src/iofunc.c @@ -433,7 +433,6 @@ int HAMLIB_API port_close(hamlib_port_t *p, rig_port_t port_type) extern int is_uh_radio_fd(int fd); -#ifdef ASYNC_BUG static int port_read_sync_data_error_code(hamlib_port_t *p) { ssize_t total_bytes_read = 0; @@ -574,7 +573,6 @@ static ssize_t port_read_sync_data_pipe(hamlib_port_t *p, void *buf, size_t coun { return port_read_sync_data(p, buf, count); } -#endif /* On MinGW32/MSVC/.. the appropriate accessor must be used * depending on the port type, sigh. commit 3f431314d83631ef951647d0ad8a42cee9cb5617 Author: Mike Black W9MDB <mdb...@ya...> Date: Wed Jan 5 13:08:38 2022 -0600 Fix win32 build diff --git a/rigs/icom/ic706.c b/rigs/icom/ic706.c index 67db3529..f953530b 100644 --- a/rigs/icom/ic706.c +++ b/rigs/icom/ic706.c @@ -615,7 +615,11 @@ const struct rig_caps ic706mkiig_caps = .get_split_mode = icom_get_split_mode, .set_split_vfo = icom_set_split_vfo, .get_split_vfo = icom_mem_get_split_vfo, - .hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS + .hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS, + .async_data_supported = 1, + .read_frame_direct = icom_read_frame_direct, + .is_async_frame = icom_is_async_frame, + .process_async_frame = icom_process_async_frame, }; diff --git a/rigs/yaesu/ft3000.c b/rigs/yaesu/ft3000.c index d2e590e3..8a7b15fc 100644 --- a/rigs/yaesu/ft3000.c +++ b/rigs/yaesu/ft3000.c @@ -234,6 +234,18 @@ int ft3000_get_ant(RIG *rig, vfo_t vfo, ant_t dummy, value_t *option, RETURNFUNC(RIG_OK); } +static int dx3000_set_vfo(RIG *rig, vfo_t vfo) +{ + rig->state.current_vfo = vfo; + RETURNFUNC(RIG_OK); +} + +static int dx3000_get_vfo(RIG *rig, vfo_t *vfo) +{ + *vfo = rig->state.current_vfo; + RETURNFUNC(RIG_OK); +} + /* * FTDX 3000 rig capabilities @@ -246,7 +258,7 @@ const struct rig_caps ftdx3000_caps = RIG_MODEL(RIG_MODEL_FTDX3000), .model_name = "FTDX-3000", .mfg_name = "Yaesu", - .version = NEWCAT_VER ".5", + .version = NEWCAT_VER ".5a", .copyright = "LGPL", .status = RIG_STATUS_STABLE, .rig_type = RIG_TYPE_TRANSCEIVER, @@ -261,8 +273,8 @@ const struct rig_caps ftdx3000_caps = .serial_handshake = RIG_HANDSHAKE_HARDWARE, // write_delay 5ms or less was causing VS1;VS; to answer with VS0 instead of VS1 even though change did occur // see https://github.com/Hamlib/Hamlib/issues/906 - .write_delay = 10, - .post_write_delay = FTDX5000_POST_WRITE_DELAY, + .write_delay = 0, + .post_write_delay = 25, // same as FT-991 .timeout = 2000, .retry = 3, .has_get_func = FTDX5000_FUNCS, @@ -285,7 +297,7 @@ const struct rig_caps ftdx3000_caps = .max_xit = Hz(9999), .max_ifshift = Hz(1000), .vfo_ops = FTDX5000_VFO_OPS, - .targetable_vfo = RIG_TARGETABLE_FREQ, /* one of the few diffs from the 5000 */ + .targetable_vfo = RIG_TARGETABLE_FREQ|RIG_TARGETABLE_MODE, /* one of the few diffs from the 5000 */ .transceive = RIG_TRN_OFF, /* May enable later as the 5000 has an Auto Info command */ .bank_qty = 0, .chan_desc_sz = 0, @@ -372,8 +384,8 @@ const struct rig_caps ftdx3000_caps = .get_freq = newcat_get_freq, .set_mode = newcat_set_mode, .get_mode = newcat_get_mode, - .set_vfo = newcat_set_vfo, - .get_vfo = newcat_get_vfo, + .set_vfo = dx3000_set_vfo, + .get_vfo = dx3000_get_vfo, .set_ptt = newcat_set_ptt, .get_ptt = newcat_get_ptt, .set_split_vfo = newcat_set_split_vfo, diff --git a/rigs/yaesu/newcat.c b/rigs/yaesu/newcat.c index dc0039a8..b09e0fcb 100644 --- a/rigs/yaesu/newcat.c +++ b/rigs/yaesu/newcat.c @@ -10099,7 +10099,7 @@ int newcat_set_cmd_validate(RIG *rig) } else if ((strncmp(priv->cmd_str, "VS", 2) == 0) && (strlen(priv->cmd_str) > 3)) { - strcpy(valcmd, "VS;"); + strcpy(valcmd, "ID;"); } else if (strncmp(priv->cmd_str, "SV", 2) == 0) { diff --git a/rigs/yaesu/newcat.h b/rigs/yaesu/newcat.h index 9fe9023e..cc59fcd3 100644 --- a/rigs/yaesu/newcat.h +++ b/rigs/yaesu/newcat.h @@ -50,7 +50,7 @@ typedef char ncboolean; /* shared function version */ -#define NEWCAT_VER "20211227" +#define NEWCAT_VER "20220103" /* Hopefully large enough for future use, 128 chars plus '\0' */ #define NEWCAT_DATA_LEN 129 diff --git a/src/iofunc.c b/src/iofunc.c index 99f9b0b3..76171213 100644 --- a/src/iofunc.c +++ b/src/iofunc.c @@ -433,6 +433,7 @@ int HAMLIB_API port_close(hamlib_port_t *p, rig_port_t port_type) extern int is_uh_radio_fd(int fd); +#ifdef ASYNC_BUG static int port_read_sync_data_error_code(hamlib_port_t *p) { ssize_t total_bytes_read = 0; @@ -573,6 +574,7 @@ static ssize_t port_read_sync_data_pipe(hamlib_port_t *p, void *buf, size_t coun { return port_read_sync_data(p, buf, count); } +#endif /* On MinGW32/MSVC/.. the appropriate accessor must be used * depending on the port type, sigh. commit bf013a9bb3ddd36f6d0e87cba9b1e225a4f5e54a Merge: f634cd30 2857a54e Author: Michael Black <mdb...@ya...> Date: Wed Jan 5 11:52:26 2022 -0600 Merge pull request #918 from mikaelnousiainen/async-io-on-windows Implement async I/O on Windows commit 2857a54ea6b34b1b7cfe407b20505f9a78a04f0f Author: Mikael Nousiainen <mik...@ik...> Date: Wed Jan 5 19:12:43 2022 +0200 Allow enabling of async data mode via conf option. Ignore multicast data publishing if the publisher routine is not enabled. diff --git a/include/hamlib/rig.h b/include/hamlib/rig.h index 00f6fe5d..ce9dfe38 100644 --- a/include/hamlib/rig.h +++ b/include/hamlib/rig.h @@ -2218,6 +2218,7 @@ typedef struct hamlib_port { int client_port; /*!< client socket port for tcp connection */ RIG *rig; /*!< our parent RIG device */ +#ifdef ASYNC_BUG int async; /*!< enable asynchronous data handling if true */ #if defined(_WIN32) hamlib_async_pipe_t *sync_data_pipe; /*!< pipe data structure for synchronous data */ @@ -2228,6 +2229,7 @@ typedef struct hamlib_port { int fd_sync_error_write; /*!< file descriptor for writing synchronous data error codes */ int fd_sync_error_read; /*!< file descriptor for reading synchronous data error codes */ #endif +#endif } hamlib_port_t; //! @endcond @@ -2239,7 +2241,7 @@ typedef hamlib_port_t port_t; #define HAMLIB_ELAPSED_SET 1 #define HAMLIB_ELAPSED_INVALIDATE 2 -#define HAMLIB_CACHE_ALWAYS -1 /*< value to set cache timeout to always use cache */ +#define HAMLIB_CACHE_ALWAYS (-1) /*< value to set cache timeout to always use cache */ typedef enum { HAMLIB_CACHE_ALL, // to set all cache timeouts at once @@ -2399,7 +2401,7 @@ struct rig_state { rig_ptr_t priv; /*!< Pointer to private rig state data. */ rig_ptr_t obj; /*!< Internal use by hamlib++ for event handling. */ - int async_data; /*!< Whether async data mode is on */ + int async_data_enabled; /*!< Whether async data mode is enabled */ int poll_interval; /*!< Rig state polling period in milliseconds */ freq_t current_freq; /*!< Frequency currently set */ rmode_t current_mode; /*!< Mode currently set */ diff --git a/src/conf.c b/src/conf.c index 9347f737..40bebeae 100644 --- a/src/conf.c +++ b/src/conf.c @@ -168,6 +168,11 @@ static const struct confparams frontend_cfg_params[] = "Suppress get_freq on VFOB for RIT tuning satellites", "Unset", RIG_CONF_COMBO, { .c = {{ "Unset", "ON", "OFF", NULL }} } }, + { + TOK_ASYNC, "async", "Asynchronous data transfer support", + "True enables asynchronous data transfer for backends that support it. This enabled handling of transceive and spectrum data, for example.", + "0", RIG_CONF_CHECKBUTTON, { } + }, { RIG_CONF_END, NULL, } }; @@ -666,6 +671,15 @@ static int frontend_set_conf(RIG *rig, token_t token, const char *val) rs->twiddle_rit = val_i ? 1 : 0; break; + case TOK_ASYNC: + if (1 != sscanf(val, "%d", &val_i)) + { + return -RIG_EINVAL; //value format error + } + + rs->async_data_enabled = val_i ? 1 : 0; + break; + default: return -RIG_EINVAL; } @@ -1010,6 +1024,9 @@ static int frontend_get_conf(RIG *rig, token_t token, char *val) sprintf(val, "%d", rs->twiddle_rit); break; + case TOK_ASYNC: + sprintf(val, "%d", rs->async_data_enabled); + break; default: return -RIG_EINVAL; diff --git a/src/network.c b/src/network.c index a08d20ef..eb3175d9 100644 --- a/src/network.c +++ b/src/network.c @@ -692,21 +692,37 @@ static int multicast_publisher_write_packet_header(RIG *rig, multicast_publisher int network_publish_rig_poll_data(RIG *rig) { + struct rig_state *rs = &rig->state; multicast_publisher_data_packet packet = { .type = MULTICAST_PUBLISHER_DATA_PACKET_TYPE_POLL, .padding = 0, .data_length = 0, }; + + if (rs->multicast_publisher_priv_data == NULL) + { + // Silently ignore call if multicast publisher is not enabled + return RIG_OK; + } + return multicast_publisher_write_packet_header(rig, &packet); } int network_publish_rig_transceive_data(RIG *rig) { + struct rig_state *rs = &rig->state; multicast_publisher_data_packet packet = { .type = MULTICAST_PUBLISHER_DATA_PACKET_TYPE_TRANSCEIVE, .padding = 0, .data_length = 0, }; + + if (rs->multicast_publisher_priv_data == NULL) + { + // Silently ignore call if multicast publisher is not enabled + return RIG_OK; + } + return multicast_publisher_write_packet_header(rig, &packet); } @@ -724,8 +740,8 @@ int network_publish_rig_spectrum_data(RIG *rig, struct rig_spectrum_line *line) if (rs->multicast_publisher_priv_data == NULL) { - // Silently ignore if multicast publisher is not enabled - RETURNFUNC(RIG_OK); + // Silently ignore call if multicast publisher is not enabled + return RIG_OK; } result = multicast_publisher_write_packet_header(rig, &packet); diff --git a/src/rig.c b/src/rig.c index 868bd07c..d4780b55 100644 --- a/src/rig.c +++ b/src/rig.c @@ -452,18 +452,15 @@ RIG *HAMLIB_API rig_init(rig_model_t rig_model) */ rs = &rig->state; + rs->async_data_enabled = 0; rs->rigport.fd = -1; rs->pttport.fd = -1; rs->comm_state = 0; rig_debug(RIG_DEBUG_VERBOSE, "%s: rs->comm_state==0?=%d\n", __func__, rs->comm_state); rs->rigport.type.rig = caps->port_type; /* default from caps */ -#ifdef ASYNC_BUG -#ifdef HAVE_PTHREAD - rs->rigport.async = caps->async_data_supported; -#else +#if defined(ASYNC_BUG) && defined(HAVE_PTHREAD) rs->rigport.async = 0; -#endif #endif switch (caps->port_type) @@ -513,11 +510,6 @@ RIG *HAMLIB_API rig_init(rig_model_t rig_model) rs->vfo_comp = 0.0; /* override it with preferences */ rs->current_vfo = RIG_VFO_CURR; /* we don't know yet! */ rs->tx_vfo = RIG_VFO_CURR; /* we don't know yet! */ -#ifdef HAVE_PTHREAD - rs->async_data = caps->async_data_supported; -#else - rs->async_data = 0; -#endif rs->poll_interval = 0; // disable polling by default rs->lo_freq = 0; rs->cache.timeout_ms = 500; // 500ms cache timeout by default @@ -723,6 +715,12 @@ int HAMLIB_API rig_open(RIG *rig) rs = &rig->state; rs->rigport.rig = rig; +#if defined(ASYNC_BUG) && defined(HAVE_PTHREAD) + // Enable async data only if it's enabled through conf settings *and* supported by the backend + rs->async_data_enabled = rs->async_data_enabled && caps->async_data_supported; + rs->rigport.async = rs->async_data_enabled; +#endif + if (strlen(rs->rigport.pathname) > 0) { char hoststr[256], portstr[6]; @@ -6880,39 +6878,39 @@ HAMLIB_EXPORT(void) sync_callback(int lock) #ifdef ASYNC_BUG static int async_data_handler_start(RIG *rig) { - const struct rig_caps *caps = rig->caps; struct rig_state *rs = &rig->state; async_data_handler_priv_data *async_data_handler_priv; ENTERFUNC; + if (!rs->async_data_enabled) + { + rig_debug(RIG_DEBUG_TRACE, "%s: async data support disabled\n", __func__); + RETURNFUNC(RIG_OK); + } + #ifdef ASYNC_BUG #ifdef HAVE_PTHREAD - if (caps->async_data_supported) - { - rs->async_data_handler_thread_run = 1; - rs->async_data_handler_priv_data = calloc(1, - sizeof(async_data_handler_priv_data)); + rs->async_data_handler_thread_run = 1; + rs->async_data_handler_priv_data = calloc(1, + sizeof(async_data_handler_priv_data)); - if (rs->async_data_handler_priv_data == NULL) - { - RETURNFUNC(-RIG_ENOMEM); - } + if (rs->async_data_handler_priv_data == NULL) + { + RETURNFUNC(-RIG_ENOMEM); + } - async_data_handler_priv = (async_data_handler_priv_data *) - rs->async_data_handler_priv_data; - async_data_handler_priv->args.rig = rig; - int err = pthread_create(&async_data_handler_priv->thread_id, NULL, - async_data_handler, &async_data_handler_priv->args); + async_data_handler_priv = (async_data_handler_priv_data *) + rs->async_data_handler_priv_data; + async_data_handler_priv->args.rig = rig; + int err = pthread_create(&async_data_handler_priv->thread_id, NULL, + async_data_handler, &async_data_handler_priv->args); - if (err) - { - rig_debug(RIG_DEBUG_ERR, "%s(%d) pthread_create error: %s\n", __FILE__, - __LINE__, - strerror(errno)); - RETURNFUNC(-RIG_EINTERNAL); - } + if (err) + { + rig_debug(RIG_DEBUG_ERR, "%s: pthread_create error: %s\n", __func__, strerror(errno)); + RETURNFUNC(-RIG_EINTERNAL); } #endif @@ -6943,8 +6941,7 @@ static int async_data_handler_stop(RIG *rig) if (err) { - rig_debug(RIG_DEBUG_ERR, "%s(%d): pthread_join error: %s\n", __FILE__, __LINE__, - strerror(errno)); + rig_debug(RIG_DEBUG_ERR, "%s: pthread_join error: %s\n", __func__, strerror(errno)); // just ignore the error } @@ -6973,9 +6970,7 @@ void *async_data_handler(void *arg) int result; #endif - rig_debug(RIG_DEBUG_VERBOSE, "%s(%d): Starting async data handler thread\n", - __FILE__, - __LINE__); + rig_debug(RIG_DEBUG_VERBOSE, "%s: Starting async data handler thread\n", __func__); // TODO: check how to enable "transceive" on recent Kenwood/Yaesu rigs // TODO: add initial support for async in Kenwood kenwood_transaction (+one) functions -> add transaction_active flag usage @@ -7045,9 +7040,7 @@ void *async_data_handler(void *arg) #endif - rig_debug(RIG_DEBUG_VERBOSE, "%s(%d): Stopping async data handler thread\n", - __FILE__, - __LINE__); + rig_debug(RIG_DEBUG_VERBOSE, "%s: Stopping async data handler thread\n", __func__); return NULL; } diff --git a/src/token.h b/src/token.h index b73174a6..46b80f19 100644 --- a/src/token.h +++ b/src/token.h @@ -91,6 +91,9 @@ #define TOK_PTT_SHARE TOKEN_FRONTEND(35) /** \brief PTT share with other applications */ #define TOK_FLUSHX TOKEN_FRONTEND(36) +/** \brief Asynchronous data transfer support */ +#define TOK_ASYNC TOKEN_FRONTEND(37) + /* * rig specific tokens */ commit f634cd3050d61288c48d40ed0b00a71e0214617f Merge: 4eb0719f f5a83df1 Author: Michael Black <mdb...@ya...> Date: Tue Jan 4 16:54:35 2022 -0600 Merge pull request #913 from arodland/rt21-stop Enable "stop" command for RT-21 rotator. commit f5a83df14c24cd5bc7409f839ee60c73b879110f Author: Andrew Rodland <an...@cl...> Date: Tue Jan 4 17:47:48 2022 -0500 Update RT-21 version diff --git a/rotators/rotorez/rotorez.c b/rotators/rotorez/rotorez.c index 044ab6a5..af36466f 100644 --- a/rotators/rotorez/rotorez.c +++ b/rotators/rotorez/rotorez.c @@ -310,7 +310,7 @@ const struct rot_caps rt21_rot_caps = ROT_MODEL(ROT_MODEL_RT21), .model_name = "RT-21", .mfg_name = "Green Heron", - .version = "20210801.0", + .version = "20220104.0", .copyright = "LGPL", .status = RIG_STATUS_STABLE, .rot_type = ROT_TYPE_OTHER, commit 4eb0719f1dfb0e4704ffd9b98892a12937990fd0 Author: Mike Black W9MDB <mdb...@ya...> Date: Tue Jan 4 07:11:44 2022 -0600 Fix IC-7610 send_voice_mem looping https://github.com/Hamlib/Hamlib/issues/917 diff --git a/rigs/icom/ic7610.c b/rigs/icom/ic7610.c index 7ad2100c..45d7ae09 100644 --- a/rigs/icom/ic7610.c +++ b/rigs/icom/ic7610.c @@ -352,7 +352,7 @@ const struct rig_caps ic7610_caps = RIG_MODEL(RIG_MODEL_IC7610), .model_name = "IC-7610", .mfg_name = "Icom", - .version = BACKEND_VER ".5", + .version = BACKEND_VER ".6", .copyright = "LGPL", .status = RIG_STATUS_STABLE, .rig_type = RIG_TYPE_TRANSCEIVER, @@ -582,7 +582,7 @@ const struct rig_caps ic7610_caps = .send_morse = icom_send_morse, .stop_morse = icom_stop_morse, .wait_morse = rig_wait_morse, - .send_voice_mem = rig_send_voice_mem, + .send_voice_mem = icom_send_voice_mem, .set... [truncated message content] |