[Hamlib-commits] Hamlib -- Ham radio control libraries branch master updated. d47fb672c82aebce342cb
Library to control radio transceivers and receivers
Brought to you by:
n0nb
From: n0nb <n0...@us...> - 2024-04-28 19:57:39
|
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 d47fb672c82aebce342cba8f0dd3b496ec536b9a (commit) via 2638eeb774ed5c162c6ab492cb3af3328cec1402 (commit) via 92e82a25d2ebbbf776c4f9aa58a37dde8fc15554 (commit) via fe0d47acef9dd5a7401e4a4162fc5195e6f7a0c7 (commit) via 86afa90739b3b4427646a555670c431683bc1bc8 (commit) via 25f58afb72e993e2c51435c47ba0126d50971317 (commit) via d7e0b214f7bcea8855f0b5570d48b06a69bf5a7e (commit) via e9a9424eedd44ed4f8b908dfb23e3e7899bf1eb5 (commit) via 93bd44c3d56ac7d406ef0d90dc47ace1d813fec9 (commit) via b182ca2d51740d5dcaa126b52d4f208003b9cc86 (commit) via 6a98b0b9cb8128c09ecf4cf7374bbefd09170aaf (commit) via c70502ea34fd319f41d6f4d9c4ee22e30b3db846 (commit) via f8a67d716e54ed9ea816920f25fefbea3594571f (commit) via 2b275531559f2158a2aaf5e7534b352dac708ec8 (commit) via 08aac883775c8cd89d682682f2e3b49d796e2a35 (commit) via c31497918f8511ad01e1dd749e7df94a00332db2 (commit) via d9b57bc7a8a5cf0f93c6792a58f7db1273992199 (commit) via 90545a192e94ebb01021c05273f5c3d8e196c2be (commit) via dce80d264a5cd093707c0e6720e18dff77f68665 (commit) via 4c111da0d1b7206050ca719a9ff3c97e84aaa260 (commit) via d9b589d25499ca823777130a854768b4533cc0a6 (commit) via 95b0af114f10defbcfbb4f1b1d9b97c7f99ee5b8 (commit) via 9e42ca2052d6b3ade2d30400b952ed8c34147aa7 (commit) via 331143fa173eb7bd1bd44aae60544155fcd97a1f (commit) via a6ad5f0928b23a0717426e708dd4d1fe3b8a9592 (commit) via b42aa75dd8251721345e89926e0bd4140fa2accb (commit) via 6cfdb9d4eddf8b135a3961e5d41912a6c1152348 (commit) via bddd7e1a7d984bb1edac14724afb1921174ed31c (commit) via 35b0bb086bcb7342ee38820231c673eb402fc127 (commit) via 0ba199448bf49b32b776cfdeb4ae140f3ac532d9 (commit) via 3dac2efb48a3781fbeea73a60335bf8c1466e401 (commit) via 63fa818fd7a5f2beb650a5f6dac8c48c9534d49d (commit) via 878243aff35f3e42191a916c857f8857deb61dfd (commit) via 00ceb6e72f1f5c4d58afc090bae5c327dccfd97c (commit) via 279362f40347d92c5623702297c48621334df7e3 (commit) via 9a7dda25c88848531cb96834eab8d8851a020c65 (commit) from 41de3425d24edcbd448e0231692eeacc58909521 (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 d47fb672c82aebce342cba8f0dd3b496ec536b9a Author: Mike Black W9MDB <mdb...@ya...> Date: Sun Apr 28 11:44:05 2024 -0500 Fix serial port type for Micom diff --git a/rigs/motorola/micom.c b/rigs/motorola/micom.c index f815c80c2..43ad9b11f 100644 --- a/rigs/motorola/micom.c +++ b/rigs/motorola/micom.c @@ -72,13 +72,12 @@ struct rig_caps micom_caps = .rig_type = RIG_TYPE_OTHER, .targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE, .ptt_type = RIG_PTT_RIG, - .dcd_type = RIG_DCD_RIG, - .port_type = RIG_PORT_NONE, + .port_type = RIG_PORT_SERIAL, .serial_rate_min = 9600, .serial_rate_max = 9600, .serial_data_bits = 8, .serial_stop_bits = 2, - .serial_parity = RIG_PARITY_ODD, + .serial_parity = RIG_PARITY_EVEN, .rig_open = micom_open, .set_freq = micom_set_freq, .get_freq = micom_get_freq, commit 2638eeb774ed5c162c6ab492cb3af3328cec1402 Author: Mike Black W9MDB <mdb...@ya...> Date: Sun Apr 28 11:33:23 2024 -0500 Fix ptt type for Micom 2/3 and change from Motorola to Micom diff --git a/rigs/motorola/micom.c b/rigs/motorola/micom.c index 8168b0650..f815c80c2 100644 --- a/rigs/motorola/micom.c +++ b/rigs/motorola/micom.c @@ -65,13 +65,13 @@ struct rig_caps micom_caps = { RIG_MODEL(RIG_MODEL_MICOM2), .model_name = "Micom 2/3", - .mfg_name = "Motorola", - .version = "20240423.0", + .mfg_name = "Micom", + .version = "20240428.0", .copyright = "LGPL", .status = RIG_STATUS_ALPHA, .rig_type = RIG_TYPE_OTHER, .targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE, - .ptt_type = RIG_PTT_NONE, + .ptt_type = RIG_PTT_RIG, .dcd_type = RIG_DCD_RIG, .port_type = RIG_PORT_NONE, .serial_rate_min = 9600, commit 92e82a25d2ebbbf776c4f9aa58a37dde8fc15554 Author: Mike Black W9MDB <mdb...@ya...> Date: Fri Apr 26 17:35:18 2024 -0500 Fix possible null argument in rig_test_2038 diff --git a/src/misc.c b/src/misc.c index 2ea94e6d5..e7bdb2c02 100644 --- a/src/misc.c +++ b/src/misc.c @@ -3104,7 +3104,7 @@ int rig_test_2038(RIG *rig) if (s == NULL) { failed = 1; } else rig_debug(RIG_DEBUG_VERBOSE, "%s: time_t 2038 test = 0x%08lx:%s", __func__, x, - s); + s == NULL ? "NULL" : s); #endif commit fe0d47acef9dd5a7401e4a4162fc5195e6f7a0c7 Author: Mike Black W9MDB <mdb...@ya...> Date: Wed Apr 24 12:33:14 2024 -0500 Fix motorola Makefile.am diff --git a/rigs/motorola/Makefile.am b/rigs/motorola/Makefile.am index baa2ff0c4..d47e60a7e 100644 --- a/rigs/motorola/Makefile.am +++ b/rigs/motorola/Makefile.am @@ -1,4 +1,4 @@ -RSSRC = motorola.c micom.c +RSSRC = motorola.c micom.c motorola.h noinst_LTLIBRARIES = libhamlib-motorola.la libhamlib_motorola_la_SOURCES = $(RSSRC) commit 86afa90739b3b4427646a555670c431683bc1bc8 Author: Mike Black W9MDB <mdb...@ya...> Date: Wed Apr 24 12:21:30 2024 -0500 Add Android.mk for motorola diff --git a/rigs/motorola/Android.mk b/rigs/motorola/Android.mk new file mode 100644 index 000000000..17ba6f97b --- /dev/null +++ b/rigs/motorola/Android.mk @@ -0,0 +1,12 @@ +LOCAL_PATH:= $(call my-dir) + +include $(CLEAR_VARS) + +LOCAL_SRC_FILES := motorola.c micom.c +LOCAL_MODULE := motorola + +LOCAL_CFLAGS := +LOCAL_C_INCLUDES := android include src +LOCAL_LDLIBS := -lhamlib -Lobj/local/$(TARGET_ARCH_ABI) + +include $(BUILD_STATIC_LIBRARY) commit 25f58afb72e993e2c51435c47ba0126d50971317 Author: Mike Black W9MDB <mdb...@ya...> Date: Wed Apr 24 12:07:10 2024 -0500 Update motorola diff --git a/rigs/motorola/Makefile.am b/rigs/motorola/Makefile.am new file mode 100644 index 000000000..baa2ff0c4 --- /dev/null +++ b/rigs/motorola/Makefile.am @@ -0,0 +1,6 @@ +RSSRC = motorola.c micom.c + +noinst_LTLIBRARIES = libhamlib-motorola.la +libhamlib_motorola_la_SOURCES = $(RSSRC) + +EXTRA_DIST = Android.mk diff --git a/rigs/motorola/README.txt b/rigs/motorola/README.txt new file mode 100644 index 000000000..0f7ccd9cc --- /dev/null +++ b/rigs/motorola/README.txt @@ -0,0 +1,106 @@ +Received from George Csahanin W2DB + +PS- + +Here are some of the code from the head project: + +//Control data strings +/////byte volumestr[8] = { + ///// 0x24,0x03,0x18,0x2b,0x00,0x00,0x6A,0x03}; +byte squelchOff[8] = { + 0x24,0x03,0x18,0x09,0x00,0x00,0x48,0x03}; +byte squelchOn[8] = { + 0x24,0x03,0x18,0x09,0x00,0x01,0x49,0x03}; +byte volume[8] = { + 0x24,0x03,0x18,0x2B,0x00,0x00,0x6A,0x03}; // volume level 0 in hex +byte reportVol[7] = { + 0x24,0x01,0x18,0x2C,0x69,0x03}; +byte button1[10] = { + 0x24,0x05,0x18,0x36,0xFF,0x79,0xEF,0x01,0xDF,0x03}; // keypad button 1 +byte button2[10] = { + 0x24,0x05,0x18,0x36,0xFF,0x3B,0xEF,0x01,0xA1,0x03}; // keypad button 2 +byte button3[10] = { + 0x24,0x05,0x18,0x36,0xFF,0x7B,0xE7,0x01,0xD9,0x03}; // keypad button 3 +byte button4[10] = { + 0x24,0x05,0x18,0x36,0xFF,0x5B,0xEF,0x01,0xC1,0x03}; // keypad button 4 +byte button5[10] = { + 0x24,0x05,0x18,0x36,0xFF,0x7B,0xEB,0x01,0xDD,0x03}; // keypad button 5 +byte button6[10] = { + 0x24,0x05,0x18,0x36,0xFF,0x7B,0x6F,0x01,0x61,0x03}; // keypad button 6 +byte button7[10] = { + 0x24,0x05,0x18,0x36,0xFF,0x7B,0xAF,0x01,0xA1,0x03}; // keypad button 7 +byte button8[10] = { + 0x24,0x05,0x18,0x36,0xF7,0x7B,0xEF,0x01,0xD9,0x03}; // keypad button 8 +byte button9[10] = { + 0x24,0x05,0x18,0x36,0xFF,0x7A,0xEF,0x01,0xE0,0x03}; // keypad button 9 +byte button0[10] = { + 0x24,0x05,0x18,0x36,0x7F,0x7B,0xEF,0x01,0x61,0x03}; // keypad button 0 +byte buttonAsterisk[10] = { + 0x24,0x05,0x18,0x36,0xFB,0x7B,0xEF,0x01,0xDD,0x03}; // keypad button * +byte buttonPound[10] = { + 0x24,0x05,0x18,0x36,0xFF,0x6B,0xEF,0x01,0xD1,0x03}; // keypad button # +byte buttonMENU[10] = { + 0x24,0x05,0x18,0x36,0xFF,0x7B,0xEF,0x00,0xE0,0x03}; // keypad button MENU +byte buttonPesc[10] = { + 0x24,0x05,0x18,0x36,0xEF,0x7B,0xEF,0x01,0xD1,0x03}; // keypad button Pesc +byte buttonEnter[10] = { + 0x24,0x05,0x18,0x36,0xFF,0x7B,0xED,0x01,0xDF,0x03}; // keypad button +Enter +byte colorKey[10] = { +}; // keypad button for color or other use +byte moreKey[10] = { + 0x24,0x05,0x18,0x36,0xFD,0x7B,0xEF,0x01,0xDF,0x03}; // more key +byte fOneKey[10] = { + 0x24,0x05,0x18,0x36,0xBF,0x7B,0xEF,0x01,0xA1,0x03}; // soft key F1 +byte fTwoKey[10] = { + 0x24,0x05,0x18,0x36,0xFF,0x73,0xEF,0x01,0xD9,0x03}; // soft key F2 +byte fThreeKey[10] = { + 0x24,0x05,0x18,0x36,0xFF,0x7B,0xEE,0x01,0xE0,0x03}; //soft key F3 +byte fFourKey[10] = { + 0x24,0x05,0x18,0x36,0xFF,0x7B,0xCF,0x01,0xc1,0x03}; // soft key F4 +byte buttonRelease[10] = { + 0x24,0x05,0x18,0x36,0xFF,0x7B,0xEF,0x01,0xE1,0x03}; // button release +command +byte arrowUp[10] = { + 0x24,0x05,0x18,0x36,0xFE,0x7B,0xEF,0x01,0xE0,0x03}; // up button command +byte arrowDown[10] = { + 0x24,0x05,0x18,0x36,0xDF,0x7B,0xEF,0x01,0xC1,0x03}; // down button +command +byte GetData[9] = { + 0x24,0x04,0x18,0x29,0x00,0x01,0x2E,0x98,0x03}; // enable special reports +//byte txACK[6] = { +// 0x24,0x01,0x10,0xF3,0x28,0x03}; // ack to radio +byte pttEngage[7] = { + 0x24, 0x02, 0x81, 0x13, 0x01, 0xBB, 0x03}; +byte pttRelease[7] = { + 0x24, 0x02, 0x81, 0x14, 0x01, 0xBC, 0x03}; +byte acknowledge[6] = { + 0x24,0x01,0x10,0xF3,0x28,0x03}; // ack to radio from head +byte radioack[6] = { + 0x24,0x01,0x80,0xF3,0x98,0x03}; // ack from radio to head +//byte rxACK[6] = { +// 0x24,0x01,0x80,0xF3,0x98,0x03}; // ack from radio + + + //---------FREQUENCY(LINE1)----------------------------- + if ((opCode == 0x2E && subopCode == 0x03) && (checkSum == true)) + { + //EXAMPLE FREQUENCY PACKET 24 0F 81 2E 03 02 6E 46 20 20 38 2C 39 +39 32 2E 39 38 82 03 (display 0, 1) + char freqLine[10]; + for(int i=5, j=0; i<=15; i++, j++) { + freqLine[j] = rxdata[i]; + freqLine[j+1] = '\0'; + } + + LCD.sendString(freqLine,0,1); + + } + +//---------------------MENU(LINE0)------------------------------ + if (opCode == 0x2E && subopCode == 0x02) + { + //EXAMPLE MENU PACKET 24 09 81 2E 02 02 55 4D 45 4E 55 20 8A 03 +(display 0, 0) + + diff --git a/rigs/motorola/motorola.c b/rigs/motorola/motorola.c new file mode 100644 index 000000000..192b2b977 --- /dev/null +++ b/rigs/motorola/motorola.c @@ -0,0 +1,32 @@ +/* + * Hamlib Motorola backend - main file + * Copyright (c) 2024 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 + * + */ + +#include "motorola.h" +#include <register.h> + +DECLARE_INITRIG_BACKEND(motorola) +{ + rig_debug(RIG_DEBUG_VERBOSE, "%s: _init called\n", __func__); + + rig_register(&micom_caps); + + return RIG_OK; +} diff --git a/rigs/motorola/motorola.h b/rigs/motorola/motorola.h new file mode 100644 index 000000000..db6790b1f --- /dev/null +++ b/rigs/motorola/motorola.h @@ -0,0 +1,8 @@ +#ifndef _MOTOROLA_H +#define _MOTOROLADUMMY_H 1 + +#include "hamlib/rig.h" + +extern struct rig_caps micom_caps; + +#endif // _MOTOROLA_H commit d7e0b214f7bcea8855f0b5570d48b06a69bf5a7e Author: Mike Black W9MDB <mdb...@ya...> Date: Wed Apr 24 12:06:36 2024 -0500 Add fake freq set/get for micom diff --git a/rigs/motorola/micom.c b/rigs/motorola/micom.c new file mode 100644 index 000000000..8168b0650 --- /dev/null +++ b/rigs/motorola/micom.c @@ -0,0 +1,86 @@ +/* + * Hamlib Motorola Micom backend - main file + * Copyright (c) 2024 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 + * + */ + +#include <hamlib/rig.h> +#include <misc.h> +#include <iofunc.h> + +static freq_t freqA = 14074000; + +static int micom_open(RIG *rig) +{ + ENTERFUNC; + RETURNFUNC(RIG_OK); +} + +static int micom_set_freq(RIG *rig, vfo_t vfo, freq_t freq) +{ + freqA = freq; + RETURNFUNC(RIG_OK); +} + +static int micom_get_freq(RIG *rig, vfo_t vfo, freq_t *freq) +{ + *freq = freqA; + RETURNFUNC(RIG_OK); +} + +static int micom_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt) +{ + hamlib_port_t *rp = RIGPORT(rig); + unsigned char on[] = { 0x24, 0x02, 0x81, 0x13, 0x01, 0xBB, 0x03 }; + unsigned char off[] = { 0x24, 0x02, 0x81, 0x14, 0x01, 0xBC, 0x03 }; + + rig_flush(rp); + int retval = write_block(rp, ptt ? on : off, sizeof(on)); + + if (retval != RIG_OK) + { + set_transaction_inactive(rig); + RETURNFUNC(retval); + } + + return RIG_OK; +} + +struct rig_caps micom_caps = +{ + RIG_MODEL(RIG_MODEL_MICOM2), + .model_name = "Micom 2/3", + .mfg_name = "Motorola", + .version = "20240423.0", + .copyright = "LGPL", + .status = RIG_STATUS_ALPHA, + .rig_type = RIG_TYPE_OTHER, + .targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE, + .ptt_type = RIG_PTT_NONE, + .dcd_type = RIG_DCD_RIG, + .port_type = RIG_PORT_NONE, + .serial_rate_min = 9600, + .serial_rate_max = 9600, + .serial_data_bits = 8, + .serial_stop_bits = 2, + .serial_parity = RIG_PARITY_ODD, + .rig_open = micom_open, + .set_freq = micom_set_freq, + .get_freq = micom_get_freq, + .set_ptt = micom_set_ptt +}; commit e9a9424eedd44ed4f8b908dfb23e3e7899bf1eb5 Author: Mike Black W9MDB <mdb...@ya...> Date: Wed Apr 24 12:06:00 2024 -0500 Adding motorola rig diff --git a/configure.ac b/configure.ac index d07ec9b9a..cfcd2eb1f 100644 --- a/configure.ac +++ b/configure.ac @@ -66,7 +66,7 @@ dnl added to AC_CONFIG_FILES near the end of this file. See README.developer dnl Beware of duplication should a backend directory include both rig and dnl rotor definitions, e.g. "dummy". Optional backends will not be listed dnl here but will be added later, e.g. "winradio". -RIG_BACKEND_LIST="rigs/adat rigs/alinco rigs/aor rigs/barrett rigs/codan rigs/dorji rigs/drake rigs/dummy rigs/elad rigs/flexradio rigs/icom rigs/icmarine rigs/jrc rigs/kachina rigs/kenwood rigs/kit rigs/lowe rigs/pcr rigs/prm80 rigs/racal rigs/rft rigs/rs rigs/skanti rigs/tapr rigs/tentec rigs/tuner rigs/uniden rigs/winradio rigs/wj rigs/yaesu rigs/gomspace rigs/mds rigs/anytone" +RIG_BACKEND_LIST="rigs/adat rigs/alinco rigs/aor rigs/barrett rigs/codan rigs/dorji rigs/drake rigs/dummy rigs/elad rigs/flexradio rigs/icom rigs/icmarine rigs/jrc rigs/kachina rigs/kenwood rigs/kit rigs/lowe rigs/pcr rigs/prm80 rigs/racal rigs/rft rigs/rs rigs/skanti rigs/tapr rigs/tentec rigs/tuner rigs/uniden rigs/winradio rigs/wj rigs/yaesu rigs/gomspace rigs/mds rigs/anytone rigs/motorola" ROT_BACKEND_LIST="rotators/amsat rotators/apex rotators/ars rotators/celestron rotators/cnctrk rotators/grbltrk rotators/easycomm rotators/ether6 rotators/flir rotators/fodtrack rotators/gs232a rotators/heathkit rotators/m2 rotators/meade rotators/rotorez rotators/sartek rotators/saebrtrack rotators/spid rotators/ts7400 rotators/prosistel rotators/ioptron rotators/satel rotators/radant" # Amplifiers are all in the amplifiers directory AMP_BACKEND_LIST="amplifiers/elecraft amplifiers/gemini amplifiers/expert" @@ -932,6 +932,7 @@ rigs/yaesu/Makefile rigs/gomspace/Makefile rigs/mds/Makefile rigs/anytone/Makefile +rigs/motorola/Makefile tests/Makefile scripts/Makefile android/Makefile diff --git a/include/hamlib/riglist.h b/include/hamlib/riglist.h index 4f09e4991..4059f9e14 100644 --- a/include/hamlib/riglist.h +++ b/include/hamlib/riglist.h @@ -672,6 +672,13 @@ #define RIG_BACKEND_ANYTONE "AnyTone" #define RIG_MODEL_ATD578UVIII RIG_MAKE_MODEL(RIG_ANYTONE, 1) +/* + * Motorola rigs + */ +#define RIG_MOTOROLA 38 +#define RIG_BACKEND_MOTOROLA "Motorola" +#define RIG_MODEL_MICOM2 RIG_MAKE_MODEL(RIG_MOTOROLA, 1) + //! @endcond diff --git a/src/register.c b/src/register.c index a47adf10d..157e99911 100644 --- a/src/register.c +++ b/src/register.c @@ -90,6 +90,7 @@ DEFINE_INITRIG_BACKEND(codan); DEFINE_INITRIG_BACKEND(gomspace); DEFINE_INITRIG_BACKEND(mds); DEFINE_INITRIG_BACKEND(anytone); +DEFINE_INITRIG_BACKEND(motorola); //! @endcond #ifdef HAVE_WINRADIO @@ -150,6 +151,7 @@ static struct { RIG_GOMSPACE, RIG_BACKEND_GOMSPACE, RIG_FUNCNAM(gomspace) }, { RIG_MDS, RIG_BACKEND_MDS, RIG_FUNCNAMA(mds) }, { RIG_ANYTONE, RIG_BACKEND_ANYTONE, RIG_FUNCNAMA(anytone) }, + { RIG_MOTOROLA, RIG_BACKEND_MOTOROLA, RIG_FUNCNAMA(motorola) }, { 0, NULL }, /* end */ }; commit 93bd44c3d56ac7d406ef0d90dc47ace1d813fec9 Author: Mike Black W9MDB <mdb...@ya...> Date: Tue Apr 23 11:19:24 2024 -0500 Update simts890.c diff --git a/simulators/simts890.c b/simulators/simts890.c index cd9f53643..22c44c891 100644 --- a/simulators/simts890.c +++ b/simulators/simts890.c @@ -28,7 +28,7 @@ int vfo, vfo_tx, ptt, ptt_data, ptt_mic, ptt_tune; int operatingband; int split; int modeMain = 2; -int modeSub = 2; +int modeSub = 1; int keyspd = 20; int sl=3, sh=3; int nr=0; @@ -163,7 +163,7 @@ int main(int argc, char *argv[]) if (getmyline(fd, buf) > 0) { - // printf("Cmd:\"%s\"\n", buf); +// printf("Cmd:\"%s\"\n", buf); } @@ -200,7 +200,7 @@ int main(int argc, char *argv[]) } else if (strcmp(buf, "NB1;") == 0) { - hl_usleep(mysleep * 100); + hl_usleep(mysleep * 20); sprintf(buf,"NB1%d;", nb1); write(fd, buf, strlen(buf)); } @@ -211,7 +211,7 @@ int main(int argc, char *argv[]) } else if (strcmp(buf, "NB2;") == 0) { - hl_usleep(mysleep * 100); + hl_usleep(mysleep * 20); sprintf(buf,"NB2%d;", nb2); write(fd, buf, strlen(buf)); } @@ -351,6 +351,7 @@ int main(int argc, char *argv[]) SNPRINTF(buf, sizeof(buf), SFformat, tmpvfo, tmpvfo == 0 ? freqa : freqb, tmpvfo == 0 ? modeA : modeB); + printf("SF buf=%s\n", buf); write(fd, buf, strlen(buf)); } else if (strncmp(buf, "SF", 2) == 0) @@ -455,6 +456,7 @@ int main(int argc, char *argv[]) } else if (strncmp(buf, "CB;", 3) == 0) { + printf("No CB command!\n"); sprintf(buf, "CB%d;", operatingband); write(fd, buf, strlen(buf)); } @@ -503,23 +505,27 @@ int main(int argc, char *argv[]) sprintf(buf, "RM2%04d;", 10); write(fd, buf, strlen(buf)); } - else if (strcmp(buf, "SL;") == 0) + else if (strcmp(buf, "SL0;") == 0) { sprintf(buf,"SL0%02d;", sl); + printf("R: %s\n", buf); write(fd, buf, strlen(buf)); } - else if (strcmp(buf, "SH;") == 0) + else if (strcmp(buf, "SH0;") == 0) { - sprintf(buf,"SH0%02d;", sh); + sprintf(buf,"SH0%03d;", sh); + printf("R: %s\n", buf); write(fd, buf, strlen(buf)); } - else if (strncmp(buf, "SL", 2) == 0) + else if (strncmp(buf, "SL0", 3) == 0) { - sscanf(&buf[3],"%d", &sl); + printf("Cmd: %s\n", buf); + sscanf(buf,"SL0%3d", &sl); } - else if (strncmp(buf, "SH", 2) == 0) + else if (strncmp(buf, "SH0", 3) == 0) { - sscanf(&buf[3],"%d", &sh); + printf("Cmd: %s\n", buf); + sscanf("SH0%3d","%d", &sh); } else if (strcmp(buf, "NR;") == 0) { commit b182ca2d51740d5dcaa126b52d4f208003b9cc86 Author: Mike Black W9MDB <mdb...@ya...> Date: Mon Apr 22 22:47:18 2024 -0500 Fix kachina set_ptt diff --git a/rigs/kachina/kachina.c b/rigs/kachina/kachina.c index ed4fa979a..71cb8655f 100644 --- a/rigs/kachina/kachina.c +++ b/rigs/kachina/kachina.c @@ -176,7 +176,7 @@ int kachina_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt) { char c = ptt == 0 ? 0x00 : 0x01; - int retval = kachina_trans_n(rig, 'X', &c , 1); + int retval = kachina_trans_n(rig, 'x', &c , 1); return retval; } commit 6a98b0b9cb8128c09ecf4cf7374bbefd09170aaf Author: Mike Black W9MDB <mdb...@ya...> Date: Mon Apr 22 17:48:59 2024 -0500 Rest of commit -- if setting FM width to other than 7000/10000/15000 cache will show requested width until next poll https://github.com/Hamlib/Hamlib/issues/1533 diff --git a/rigs/icom/frame.c b/rigs/icom/frame.c index 5a4d58f60..d939de897 100644 --- a/rigs/icom/frame.c +++ b/rigs/icom/frame.c @@ -765,6 +765,17 @@ void icom2rig_mode(RIG *rig, unsigned char md, int pd, rmode_t *mode, pbwidth_t *width) { rig_debug(RIG_DEBUG_TRACE, "%s: mode=0x%02x, pd=%d\n", __func__, md, pd); + + // Some rigs return fixed with for FM mode + if ((RIG_IS_IC7300 || RIG_IS_IC9700) && (md == S_FM || md == S_WFM)) + { + *mode = RIG_MODE_FM; + if (*width == 1) *width = 15000; + else if (*width == 2) *width = 10000; + else *width = 7000; + return; + } + *width = RIG_PASSBAND_NORMAL; switch (md) diff --git a/rigs/icom/ic7300.c b/rigs/icom/ic7300.c index 1ea70cae8..1c0ac833a 100644 --- a/rigs/icom/ic7300.c +++ b/rigs/icom/ic7300.c @@ -37,21 +37,21 @@ static int ic7300_set_parm(RIG *rig, setting_t parm, value_t val); static int ic7300_get_parm(RIG *rig, setting_t parm, value_t *val); int ic7300_set_clock(RIG *rig, int year, int month, int day, int hour, - int min, int sec, double msec, int utc_offset); + int min, int sec, double msec, int utc_offset); int ic7300_get_clock(RIG *rig, int *year, int *month, int *day, - int *hour, - int *min, int *sec, double *msec, int *utc_offset); + int *hour, + int *min, int *sec, double *msec, int *utc_offset); int ic9700_set_clock(RIG *rig, int year, int month, int day, int hour, - int min, int sec, double msec, int utc_offset); + int min, int sec, double msec, int utc_offset); int ic9700_get_clock(RIG *rig, int *year, int *month, int *day, - int *hour, - int *min, int *sec, double *msec, int *utc_offset); + int *hour, + int *min, int *sec, double *msec, int *utc_offset); int ic9700_set_vfo(RIG *rig, vfo_t vfo); #define IC7300_ALL_RX_MODES (RIG_MODE_FM|RIG_MODE_PKTFM|RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_PKTLSB|RIG_MODE_PKTUSB|RIG_MODE_PKTFM|RIG_MODE_PKTAM) -#define IC7300_1HZ_TS_MODES (RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_PKTLSB|RIG_MODE_PKTUSB|RIG_MODE_PKTFM|RIG_MODE_PKTAM) +#define IC7300_1HZ_TS_MODES (RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_PKTLSB|RIG_MODE_PKTUSB|RIG_MODE_PKTAM) #define IC7300_NOT_TS_MODES (IC7300_ALL_RX_MODES &~IC7300_1HZ_TS_MODES) #define IC7300_OTHER_TX_MODES (RIG_MODE_FM|RIG_MODE_PKTFM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR) commit c70502ea34fd319f41d6f4d9c4ee22e30b3db846 Author: Mike Black W9MDB <mdb...@ya...> Date: Mon Apr 22 17:32:48 2024 -0500 Fix IC7300/9700 FM filter set -- now honors FM widths of 7000,10000, and 15000 diff --git a/rigs/icom/icom.c b/rigs/icom/icom.c index 7746f971d..17d774329 100644 --- a/rigs/icom/icom.c +++ b/rigs/icom/icom.c @@ -2048,7 +2048,7 @@ pbwidth_t icom_get_dsp_flt(RIG *rig, rmode_t mode) RETURNFUNC2(RIG_OK); } -int icom_set_dsp_flt(RIG *rig, rmode_t mode, pbwidth_t width) +int icom_set_dsp_flt(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) { int retval, rfstatus; unsigned char ackbuf[MAXFRAMELEN]; @@ -2113,13 +2113,6 @@ int icom_set_dsp_flt(RIG *rig, rmode_t mode, pbwidth_t width) flt_idx = width <= 500 ? ((width + 49) / 50) - 1 : ((width + 99) / 100) + 4; } - else if (mode & (RIG_MODE_FM | RIG_MODE_PKTFM)) - { - if (width <= 7000) width = 7000; - else if (width <= 10000) width = 10000; - else width=15000; - RETURNFUNC(RIG_OK); - } else { rig_debug(RIG_DEBUG_VERBOSE, "%s: unknown mode=%s\n", __func__, @@ -2249,7 +2242,7 @@ static int icom_set_mode_without_data(RIG *rig, vfo_t vfo, rmode_t mode, RETURNFUNC2(retval); } - icom_set_dsp_flt(rig, mode, width); + icom_set_dsp_flt(rig, vfo, mode, width); RETURNFUNC2(RIG_OK); } @@ -2316,6 +2309,12 @@ static int icom_set_mode_x26(RIG *rig, vfo_t vfo, rmode_t mode, // Skip filter selection, because at least IC-7300 has a bug defaulting to filter 2 when changing mode // Tested on IC-7300 and IC-9700 buf[2] = priv->filter; + if (mode == RIG_MODE_FM || mode == RIG_MODE_WFM) + { + // we use the passed in filter for FM mode widths + buf[2] = filter; + } + //rig_debug(RIG_DEBUG_TRACE, "%s: mode=%ld, filters usbd=%d, usb=%d, cw=%d\n", // __func__, mode, priv->filter_usbd, priv->filter_usb, priv->filter_cw); @@ -2474,7 +2473,7 @@ int icom_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) retval = RIG_OK; } - if (retval == RIG_OK && mode != current_mode) + if (retval == RIG_OK && (mode != current_mode || width != RIG_PASSBAND_NOCHANGE)) { unsigned char datamode[2]; unsigned char mode_icom; // Not used, we only need the width @@ -2509,6 +2508,14 @@ int icom_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) if (datamode[0] == 0) { datamode[1] = 0; } // the only good combo possible according to manual + // we need to let FM mode widths through here with datamode[1] set to FM width + if((RIG_IS_IC7300 || RIG_IS_IC9700) && (mode == RIG_MODE_FM || mode == RIG_MODE_WFM)) + { + if (width <= 7000) datamode[1] = 3; + else if (width <= 10000) datamode[1] = 2; + else datamode[1] = 1; + } + rig_debug(RIG_DEBUG_TRACE, "%s(%d) mode_icom=%d, datamode=%d, filter=%d\n", __func__, __LINE__, mode_icom, datamode[0], datamode[1]); @@ -2554,7 +2561,7 @@ int icom_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) if (((width != RIG_PASSBAND_NOCHANGE) && (width != current_width)) || (priv->filter_usbd > 0 || priv->filter_usb > 0 || priv->filter_cw > 0 || priv->filter_fm > 0)) { - icom_set_dsp_flt(rig, mode, width); + icom_set_dsp_flt(rig, vfo, mode, width); } else { @@ -2606,7 +2613,7 @@ static int icom_get_mode_without_data(RIG *rig, vfo_t vfo, rmode_t *mode, // mode_len=5, modebuf=26 01 01 01 01 // last 3 bytes are mode, datamode, filter (1-3) priv_data->datamode = modebuf[3]; - priv_data->filter = modebuf[4]; + *width = priv_data->filter = modebuf[4]; modebuf[1] = modebuf[2]; // copy mode to 2-byte format modebuf[2] = modebuf[4]; // copy filter to 2-byte format mode_len = 2; @@ -2660,9 +2667,15 @@ static int icom_get_mode_without_data(RIG *rig, vfo_t vfo, rmode_t *mode, } else { + // we use width to pass in FM width for some rigs to i2r_mode icom2rig_mode(rig, modebuf[1], mode_len == 2 ? modebuf[2] : -1, mode, width); } + if ((RIG_IS_IC7300 || RIG_IS_IC9700) && (*mode == RIG_MODE_FM || *mode == RIG_MODE_PKTFM)) + { + // we already have width from icom2rig_mode + RETURNFUNC2(RIG_OK); + } // The following rigs do not support querying filter width if ((RIG_IS_IC910) || @@ -2690,7 +2703,8 @@ static int icom_get_mode_without_data(RIG *rig, vfo_t vfo, rmode_t *mode, if (vfo == rig->state.current_vfo) { - filter_width = icom_get_dsp_flt(rig, *mode); + if (!((RIG_IS_IC7300 || RIG_IS_IC9700) && (*mode == RIG_MODE_FM || *mode == RIG_MODE_PKTFM))) // can't do this in FM mode + filter_width = icom_get_dsp_flt(rig, *mode); } else { @@ -2705,10 +2719,10 @@ static int icom_get_mode_without_data(RIG *rig, vfo_t vfo, rmode_t *mode, *width = filter_width; - if (*mode == RIG_MODE_FM) + if (*mode == RIG_MODE_FM || *mode == RIG_MODE_PKTFM) { *width = 12000; // some default to 12000 - if (RIG_IS_IC7300) + if (RIG_IS_IC7300 || RIG_IS_IC9700) { if (priv_data->filter == 1) *width = 15000; else if (priv_data->filter == 2) *width = 10000; diff --git a/rigs/icom/icom.h b/rigs/icom/icom.h index 7b26379cc..8d17cfb34 100644 --- a/rigs/icom/icom.h +++ b/rigs/icom/icom.h @@ -35,7 +35,7 @@ #include <sys/time.h> #endif -#define BACKEND_VER "20240415" +#define BACKEND_VER "20240422" #define ICOM_IS_ID31 rig_is_model(rig, RIG_MODEL_ID31) #define ICOM_IS_ID51 rig_is_model(rig, RIG_MODEL_ID51) commit f8a67d716e54ed9ea816920f25fefbea3594571f Author: Mike Black W9MDB <mdb...@ya...> Date: Mon Apr 22 11:27:29 2024 -0500 Some progress getting SB4100 to work https://github.com/Hamlib/Hamlib/issues/1541 diff --git a/rigs/barrett/4100.c b/rigs/barrett/4100.c index 1724ec7ac..8b8d1db04 100644 --- a/rigs/barrett/4100.c +++ b/rigs/barrett/4100.c @@ -47,12 +47,12 @@ extern int barret950_get_freq(RIG *rig, vfo_t vfo, freq_t freq); */ static const char *barrett4100_get_info(RIG *rig) { - char *response = NULL; + static char *response; int retval; rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - retval = barrett_transaction(rig, "M:MIB GM", 0, &response); + retval = barrett_transaction2(rig, "M:MIB GM", 64, &response); if (retval == RIG_OK) { @@ -64,7 +64,7 @@ static const char *barrett4100_get_info(RIG *rig) rig_debug(RIG_DEBUG_VERBOSE, "MIB GM: %s\n", response); } - retval = barrett_transaction(rig, "M:FF GM", 0, &response); + retval = barrett_transaction2(rig, "M:FF GM", 0, &response); if (retval == RIG_OK) { @@ -73,10 +73,10 @@ static const char *barrett4100_get_info(RIG *rig) } else { - rig_debug(RIG_DEBUG_VERBOSE, "FF GM: %s\n", response); + rig_debug(RIG_DEBUG_VERBOSE, "M:MIB GM: %s\n", response); } - retval = barrett_transaction(rig, "M:FF BWA", 0, &response); + retval = barrett_transaction2(rig, "M:FF BWA", 0, &response); if (retval == RIG_OK) { @@ -88,7 +88,7 @@ static const char *barrett4100_get_info(RIG *rig) rig_debug(RIG_DEBUG_VERBOSE, "FF BWA: %s\n", response); } - retval = barrett_transaction(rig, "M:FF GRFA", 0, &response); + retval = barrett_transaction2(rig, "M:FF GRFA", 0, &response); if (retval == RIG_OK) { @@ -108,22 +108,24 @@ static int barrett4100_open(RIG *rig) int retval; char *response; ENTERFUNC; - retval = barrett_transaction2(rig, "M:REMOTE SENTER2,1", 0, &response); + retval = barrett_transaction2(rig, "M:REMOTE SENTER2,1", 3, &response); - if (retval != RIG_OK || response[0] != 's') + rig_debug(RIG_DEBUG_ERR, "%s: back from REMOTE SENTER2: got %d\n", __func__, retval); + if (response[0] != 's') { rig_debug(RIG_DEBUG_ERR, "%s: REMOTE SENTER2 error: got %s\n", __func__, response); } - barrett4100_get_info(rig); + //barrett4100_get_info(rig); + rig_debug(RIG_DEBUG_VERBOSE, "%s: success, ret=%d\n", __func__, retval); RETURNFUNC(RIG_OK); } static int barrett4100_close(RIG *rig) { char *response; - int retval = barrett_transaction2(rig, "M:REMOTE SENTER0", 0, &response); + int retval = barrett_transaction2(rig, "M:REMOTE SENTER0", 18, &response); if (retval != RIG_OK) { @@ -231,6 +233,7 @@ int barrett4100_get_ptt(RIG *rig, vfo_t vfo, ptt_t *ptt) rig_debug(RIG_DEBUG_VERBOSE, "%s(%d); response=%s\n", __func__, __LINE__, response); + return retval; } @@ -238,7 +241,7 @@ struct rig_caps barrett4100_caps = { RIG_MODEL(RIG_MODEL_BARRETT_4100), .model_name = "4100", - .mfg_name = "Barrett", + .mfg_name = "Rhode&Schwarz", .version = BACKEND_VER ".1", .copyright = "LGPL", .status = RIG_STATUS_BETA, diff --git a/rigs/barrett/barrett.c b/rigs/barrett/barrett.c index 0dad6cd72..da5cd9074 100644 --- a/rigs/barrett/barrett.c +++ b/rigs/barrett/barrett.c @@ -53,6 +53,15 @@ DECLARE_INITRIG_BACKEND(barrett) return RIG_OK; } +void barrett_flush(RIG *rig) +{ + hamlib_port_t *rp = RIGPORT(rig); + int timesave = rig->state.timeout; + rig->state.timeout = 0; + rig_flush(rp); + rig->state.timeout = timesave; +} + // this version is for 4100 int barrett_transaction2(RIG *rig, char *cmd, int expected, char **result) @@ -60,8 +69,16 @@ int barrett_transaction2(RIG *rig, char *cmd, int expected, char **result) char cmd_buf[MAXCMDLEN]; struct barrett_priv_data *priv = STATE(rig)->priv; int retval; + hamlib_port_t *rp = RIGPORT(rig); SNPRINTF(cmd_buf, sizeof(cmd_buf), "%c%s%s", 0x0a, cmd, EOM); + barrett_flush(rig); + retval = write_block(rp, (unsigned char *) cmd_buf, strlen(cmd_buf)); + if (retval < 0) + { + rig_debug(RIG_DEBUG_ERR, "%s(%d): error in write_block\n", __func__, __LINE__); + return retval; + } retval = read_block(RIGPORT(rig), (unsigned char *) priv->ret_data, expected); if (retval < 0) @@ -69,6 +86,15 @@ int barrett_transaction2(RIG *rig, char *cmd, int expected, char **result) rig_debug(RIG_DEBUG_ERR, "%s(%d): error in read_block\n", __func__, __LINE__); return retval; } + rig_debug(RIG_DEBUG_VERBOSE, "%s(%d): %d bytes read\n", __func__, __LINE__, retval); + if (priv->ret_data[0] == 0x13) // we'll return from the 1st good char + { + *result = &(priv->ret_data[1]); + } + else // some commands like IAL don't give XOFF but XON is there -- is this a bug? + { + *result = &(priv->ret_data[0]); + } return retval; } @@ -92,7 +118,7 @@ int barrett_transaction(RIG *rig, char *cmd, int expected, char **result) SNPRINTF(cmd_buf, sizeof(cmd_buf), "%s%s", cmd, EOM); } - rig_flush(rp); + barrett_flush(rig); retval = write_block(rp, (unsigned char *) cmd_buf, strlen(cmd_buf)); if (retval < 0) @@ -715,7 +741,7 @@ int barrett_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) default: return -RIG_ENIMPL; } - rig_flush(rp); + barrett_flush(rig); retval = write_block(rp, (unsigned char *) cmd_buf, strlen(cmd_buf)); if (retval < 0) diff --git a/rigs/barrett/barrett.h b/rigs/barrett/barrett.h index f778acc5a..0a82bbd3d 100644 --- a/rigs/barrett/barrett.h +++ b/rigs/barrett/barrett.h @@ -24,7 +24,7 @@ #include "hamlib/rig.h" -#define BACKEND_VER "20220113" +#define BACKEND_VER "20240422" #define EOM "\x0d" #define TRUE 1 commit 2b275531559f2158a2aaf5e7534b352dac708ec8 Author: Mike Black W9MDB <mdb...@ya...> Date: Mon Apr 22 11:26:57 2024 -0500 Make rig_flush_force in rig.c timeout immediately https://github.com/Hamlib/Hamlib/issues/1541 diff --git a/src/rig.c b/src/rig.c index e19f0cfee..cdb3d8e88 100644 --- a/src/rig.c +++ b/src/rig.c @@ -1569,7 +1569,10 @@ int HAMLIB_API rig_open(RIG *rig) memcpy(&rs->rigport_deprecated, rp, sizeof(hamlib_port_t_deprecated)); memcpy(&rs->pttport_deprecated, pttp, sizeof(hamlib_port_t_deprecated)); memcpy(&rs->dcdport_deprecated, dcdp, sizeof(hamlib_port_t_deprecated)); + int timesave = rig->state.timeout; + rig->state.timeout = 0; rig_flush_force(rp, 1); + rig->state.timeout = timesave; #if defined(HAVE_PTHREAD) enum multicast_item_e items = RIG_MULTICAST_POLL | RIG_MULTICAST_TRANSCEIVE commit 08aac883775c8cd89d682682f2e3b49d796e2a35 Author: Mike Black W9MDB <mdb...@ya...> Date: Sat Apr 20 15:09:09 2024 -0500 Add set_ptt for kachina 505dsp diff --git a/rigs/kachina/505dsp.c b/rigs/kachina/505dsp.c index 0640f5e7a..73a209189 100644 --- a/rigs/kachina/505dsp.c +++ b/rigs/kachina/505dsp.c @@ -62,7 +62,7 @@ struct rig_caps k505dsp_caps = .copyright = "LGPL", .status = RIG_STATUS_STABLE, .rig_type = RIG_TYPE_COMPUTER, - .ptt_type = RIG_PTT_NONE, + .ptt_type = RIG_PTT_RIG, .dcd_type = RIG_DCD_RIG, .port_type = RIG_PORT_SERIAL, .serial_rate_min = 9600, @@ -151,6 +151,7 @@ struct rig_caps k505dsp_caps = .set_freq = kachina_set_freq, .set_mode = kachina_set_mode, + .set_ptt = kachina_set_ptt, .get_level = kachina_get_level, .hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS diff --git a/rigs/kachina/kachina.c b/rigs/kachina/kachina.c index 4ce343918..ed4fa979a 100644 --- a/rigs/kachina/kachina.c +++ b/rigs/kachina/kachina.c @@ -169,12 +169,16 @@ int kachina_set_freq(RIG *rig, vfo_t vfo, freq_t freq) /* transmit frequency */ retval = kachina_trans_n(rig, 'T', (char *) freqbuf, 4); - if (retval != RIG_OK) - { - return retval; - } + return retval; +} - return RIG_OK; +int kachina_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt) +{ + char c = ptt == 0 ? 0x00 : 0x01; + + int retval = kachina_trans_n(rig, 'X', &c , 1); + + return retval; } /* diff --git a/rigs/kachina/kachina.h b/rigs/kachina/kachina.h index 4fafe56a1..cce933baf 100644 --- a/rigs/kachina/kachina.h +++ b/rigs/kachina/kachina.h @@ -24,10 +24,11 @@ #include <hamlib/rig.h> -#define BACKEND_VER "20061007" +#define BACKEND_VER "20240420" int kachina_set_freq(RIG *rig, vfo_t vfo, freq_t freq); int kachina_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width); +int kachina_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt); int kachina_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val); extern struct rig_caps k505dsp_caps; commit c31497918f8511ad01e1dd749e7df94a00332db2 Author: Mike Black W9MDB <mdb...@ya...> Date: Fri Apr 19 16:42:10 2024 -0500 Add VFO Ops to rigmatrix.c and colorize things a bit diff --git a/tests/rigmatrix.c b/tests/rigmatrix.c index fab0dc011..72e8e182f 100644 --- a/tests/rigmatrix.c +++ b/tests/rigmatrix.c @@ -32,7 +32,7 @@ #include <hamlib/rig.h> #include "misc.h" -static setting_t bitmap_func, bitmap_level, bitmap_parm; +static setting_t bitmap_func, bitmap_level, bitmap_parm, bitmap_vfo_ops; int create_png_range(const freq_range_t rx_range_list[], const freq_range_t tx_range_list[], int num); @@ -99,10 +99,11 @@ int print_caps_sum(struct rig_caps *caps, void *data) "<TD><A HREF=\"#setlevel%u\">levels</A></TD>" "<TD><A HREF=\"#getparm%u\">parms</A></TD>" "<TD><A HREF=\"#setparm%u\">parms</A></TD>" + "<TD><A HREF=\"#op%u\">ops</A></TD>" "</TR>\n", caps->rig_model, caps->rig_model, caps->rig_model, caps->rig_model, caps->rig_model, caps->rig_model, - caps->rig_model, caps->rig_model, caps->rig_model); + caps->rig_model, caps->rig_model, caps->rig_model, caps->rig_model); return 1; /* !=0, we want them all ! */ } @@ -215,7 +216,7 @@ int print_caps_parameters(struct rig_caps *caps, void *data) } /* used by print_caps_caps and print_caps_level */ -#define print_yn(fn) printf("<TD>%c</TD>", (fn) ? 'Y':'N') +#define print_yn(fn) printf("<TD>%s</TD>", (fn) ? "<font color=\"00AA00\"><strong>Y</strong><font>":"<font color=\"#CCCCCC\">N<font>") /* * backend functions defined @@ -303,6 +304,43 @@ int print_caps_parm(struct rig_caps *caps, void *data) return 1; } +/* + * VFO Ops capabilities + */ +int print_caps_vfo_ops(struct rig_caps *caps, void *data) +{ + setting_t vfo_ops; + int i; + + if (!data) + { + return 0; + } + + // Only set for these + vfo_ops = (*(int *)data) ? caps->vfo_ops : caps->vfo_ops; + + printf("<A NAME=\"%s%u\"><TR><TD>%s</TD>", + (*(int *)data) ? "op" : "op", + caps->rig_model, + caps->model_name); + + /* + * bitmap_vfo_ops: only those who have a label + */ + for (i = 0; i < RIG_SETTING_MAX; i++) + { + if (rig_idx2setting(i) & bitmap_vfo_ops) + { + print_yn(vfo_ops & rig_idx2setting(i)); + } + } + + printf("</TR></A>\n"); + + return 1; +} + /* * Get/Set level abilities @@ -647,6 +685,7 @@ int main(int argc, char *argv[]) "<TD>Set level</TD>" "<TD>Get parm</TD>" "<TD>Set parm</TD>" + "<TD>VFO Ops</TD>" "</TR>\n"); rig_list_foreach(print_caps_sum, NULL); printf("</TABLE>\n"); @@ -821,6 +860,40 @@ int main(int argc, char *argv[]) printf("<P>"); + bitmap_vfo_ops = 0; + prntbuf[0] = '\0'; + pbuf = prntbuf; + + for (i = 0; i < RIG_SETTING_MAX; i++) + { + setting_t op = rig_idx2setting(i); + const char *s = rig_strvfop(op); + + if (!s) + { + continue; + } + + bitmap_vfo_ops |= op; + nbytes = strlen("<TD></TD>") + strlen(s) + 1; + nbytes_total += nbytes; + pbuf += snprintf(pbuf, sizeof(pbuf) - nbytes_total, "<TD>%s</TD>", s); + + if (strlen(pbuf) > sizeof(pbuf) + nbytes) + { + printf("Buffer overflow in %s\n", __func__); + } + } + + printf("VFO Ops"); + printf("<TABLE BORDER=1>\n"); + printf("<TR><TD>Model</TD>%s</TR>\n", prntbuf); + set_or_get = 0; + rig_list_foreach(print_caps_vfo_ops, &set_or_get); + printf("</TABLE>\n"); + + printf("<P>"); + time(&gentime); printf("Rigmatrix generated %s\n", ctime(&gentime)); commit d9b57bc7a8a5cf0f93c6792a58f7db1273992199 Author: Mike Black W9MDB <mdb...@ya...> Date: Fri Apr 19 16:41:37 2024 -0500 Align dummy rigs diff --git a/rigs/dummy/dummy.c b/rigs/dummy/dummy.c index 239a8a3d6..9f8da3406 100644 --- a/rigs/dummy/dummy.c +++ b/rigs/dummy/dummy.c @@ -2564,7 +2564,6 @@ struct rig_caps dummy_caps = .get_info = dummy_get_info, - .set_ptt = dummy_set_ptt, .get_ptt = dummy_get_ptt, .get_dcd = dummy_get_dcd, @@ -2620,12 +2619,12 @@ struct rig_caps dummy_no_vfo_caps = RIG_MODEL(RIG_MODEL_DUMMY_NOVFO), .model_name = "Dummy No VFO", .mfg_name = "Hamlib", - .version = "20220510.0", + .version = "20240409.0", .copyright = "LGPL", .status = RIG_STATUS_STABLE, .rig_type = RIG_TYPE_OTHER, - .targetable_vfo = RIG_TARGETABLE_PTT | RIG_TARGETABLE_RITXIT | RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE, - .ptt_type = RIG_PTT_RIG, + .targetable_vfo = RIG_TARGETABLE_PTT | RIG_TARGETABLE_RITXIT | RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE | RIG_TARGETABLE_SPECTRUM, + .ptt_type = RIG_PTT_NONE, .dcd_type = RIG_DCD_RIG, .port_type = RIG_PORT_NONE, .has_get_func = DUMMY_FUNC, @@ -2734,7 +2733,6 @@ struct rig_caps dummy_no_vfo_caps = .get_info = dummy_get_info, - .set_ptt = dummy_set_ptt, .get_ptt = dummy_get_ptt, .get_dcd = dummy_get_dcd, commit 90545a192e94ebb01021c05273f5c3d8e196c2be Author: Mike Black W9MDB <mdb...@ya...> Date: Fri Apr 19 10:34:20 2024 -0500 Hopefully fix Barrett 4100 protocol diff --git a/rigs/barrett/4100.c b/rigs/barrett/4100.c index e1a2bc77e..1724ec7ac 100644 --- a/rigs/barrett/4100.c +++ b/rigs/barrett/4100.c @@ -108,7 +108,7 @@ static int barrett4100_open(RIG *rig) int retval; char *response; ENTERFUNC; - retval = barrett_transaction2(rig, "M:REMOTE SENTER2", 0, &response); + retval = barrett_transaction2(rig, "M:REMOTE SENTER2,1", 0, &response); if (retval != RIG_OK || response[0] != 's') { @@ -193,7 +193,13 @@ int barrett4100_get_freq(RIG *rig, vfo_t vfo, freq_t *freq) } else { - sscanf(response, "gRFA1,%*d,%lf,%*d", freq); + int n = sscanf(response, "gRF%lf", freq); + //int n = sscanf(response, "gRFA1,%*d,%lf,%*d", freq); + if (n != 1) + { + rig_debug(RIG_DEBUG_ERR, "%s(%d): unable to parse freq from '%s'\n", __func__, __LINE__, response); + return -RIG_EPROTO; + } } return retval; @@ -233,7 +239,7 @@ struct rig_caps barrett4100_caps = RIG_MODEL(RIG_MODEL_BARRETT_4100), .model_name = "4100", .mfg_name = "Barrett", - .version = BACKEND_VER ".0", + .version = BACKEND_VER ".1", .copyright = "LGPL", .status = RIG_STATUS_BETA, .rig_type = RIG_TYPE_TRANSCEIVER, commit dce80d264a5cd093707c0e6720e18dff77f68665 Author: Mike Black W9MDB <mdb...@ya...> Date: Thu Apr 18 11:28:38 2024 -0500 Update FLRig version diff --git a/rigs/dummy/flrig.c b/rigs/dummy/flrig.c index 5fd955baf..f18101ca7 100644 --- a/rigs/dummy/flrig.c +++ b/rigs/dummy/flrig.c @@ -143,7 +143,7 @@ struct rig_caps flrig_caps = RIG_MODEL(RIG_MODEL_FLRIG), .model_name = "", .mfg_name = "FLRig", - .version = "20240325.0", + .version = "20240418.0", .copyright = "LGPL", .status = RIG_STATUS_STABLE, .rig_type = RIG_TYPE_TRANSCEIVER, commit 4c111da0d1b7206050ca719a9ff3c97e84aaa260 Author: Mike Black W9MDB <mdb...@ya...> Date: Thu Apr 18 11:22:41 2024 -0500 Add small delay when setting VFO in FLRig to allow GUI to catch up diff --git a/rigs/dummy/flrig.c b/rigs/dummy/flrig.c index bd247191e..5fd955baf 100644 --- a/rigs/dummy/flrig.c +++ b/rigs/dummy/flrig.c @@ -1305,6 +1305,8 @@ static int flrig_set_freq(RIG *rig, vfo_t vfo, freq_t freq) retval = flrig_transaction(rig, cmd, cmd_arg, NULL, 0); + hl_usleep(100*1000); // FLRig needs a moment to update the active VFO + if (retval != RIG_OK) { RETURNFUNC2(retval); commit d9b589d25499ca823777130a854768b4533cc0a6 Author: Mike Black W9MDB <mdb...@ya...> Date: Thu Apr 18 11:22:25 2024 -0500 Fix unflushed data in get_lock diff --git a/rigs/dummy/netrigctl.c b/rigs/dummy/netrigctl.c index 1a682a66d..86544598b 100644 --- a/rigs/dummy/netrigctl.c +++ b/rigs/dummy/netrigctl.c @@ -2790,6 +2790,8 @@ int netrigctl_get_lock_mode(RIG *rig, int *lock) char cmdbuf[256]; char buf[BUF_MAX]; int ret; + hamlib_port_t *rp = RIGPORT(rig); + SNPRINTF(cmdbuf, sizeof(cmdbuf), "\\get_lock_mode\n"); ret = netrigctl_transaction(rig, cmdbuf, strlen(cmdbuf), buf); @@ -2799,6 +2801,7 @@ int netrigctl_get_lock_mode(RIG *rig, int *lock) } sscanf(buf, "%d", lock); + ret = read_string(rp, (unsigned char *) buf, BUF_MAX, "\n", 1, 0, 1); return (RIG_OK); } @@ -2819,7 +2822,7 @@ struct rig_caps netrigctl_caps = RIG_MODEL(RIG_MODEL_NETRIGCTL), .model_name = "NET rigctl", .mfg_name = "Hamlib", - .version = "20240304.0", + .version = "20240418.0", .copyright = "LGPL", .status = RIG_STATUS_STABLE, .rig_type = RIG_TYPE_OTHER, commit 95b0af114f10defbcfbb4f1b1d9b97c7f99ee5b8 Author: Mike Black W9MDB <mdb...@ya...> Date: Mon Apr 15 14:49:49 2024 -0500 Fix rigmatrix.c with new non-const rig_caps diff --git a/tests/rigmatrix.c b/tests/rigmatrix.c index d1dbdab83..fab0dc011 100644 --- a/tests/rigmatrix.c +++ b/tests/rigmatrix.c @@ -37,7 +37,7 @@ static setting_t bitmap_func, bitmap_level, bitmap_parm; int create_png_range(const freq_range_t rx_range_list[], const freq_range_t tx_range_list[], int num); -int print_caps_sum(const struct rig_caps *caps, void *data) +int print_caps_sum(struct rig_caps *caps, void *data) { printf("<TR><TD><A HREF=\"support/model%u.txt\">%s</A></TD><TD>%s</TD>" @@ -111,7 +111,7 @@ int print_caps_sum(const struct rig_caps *caps, void *data) /* * IO params et al. */ -int print_caps_parameters(const struct rig_caps *caps, void *data) +int print_caps_parameters(struct rig_caps *caps, void *data) { printf("<A NAME=\"parms%u\"><TR><TD>%s</TD><TD>", caps->rig_model, @@ -222,7 +222,7 @@ int print_caps_parameters(const struct rig_caps *caps, void *data) * * TODO: add new API calls! */ -int print_caps_caps(const struct rig_caps *caps, void *data) +int print_caps_caps(struct rig_caps *caps, void *data) { printf("<A NAME=\"caps%u\"><TR><TD>%s</TD>", caps->rig_model, @@ -270,7 +270,7 @@ int print_caps_caps(const struct rig_caps *caps, void *data) /* * Get/Set parm abilities */ -int print_caps_parm(const struct rig_caps *caps, void *data) +int print_caps_parm(struct rig_caps *caps, void *data) { setting_t parm; int i; @@ -307,7 +307,7 @@ int print_caps_parm(const struct rig_caps *caps, void *data) /* * Get/Set level abilities */ -int print_caps_level(const struct rig_caps *caps, void *data) +int print_caps_level(struct rig_caps *caps, void *data) { setting_t level; int i; @@ -344,7 +344,7 @@ int print_caps_level(const struct rig_caps *caps, void *data) /* * Get/Set func abilities */ -int print_caps_func(const struct rig_caps *caps, void *data) +int print_caps_func(struct rig_caps *caps, void *data) { setting_t func; int i; @@ -383,7 +383,7 @@ int print_caps_func(const struct rig_caps *caps, void *data) * * FIXME: default output pics is for region2: add region 1 too! */ -int print_caps_range(const struct rig_caps *caps, void *data) +int print_caps_range(struct rig_caps *caps, void *data) { create_png_range(caps->rx_range_list2, caps->tx_range_list2, caps->rig_model); commit 9e42ca2052d6b3ade2d30400b952ed8c34147aa7 Author: Mike Black W9MDB <mdb...@ya...> Date: Mon Apr 15 08:13:55 2024 -0500 Add IC756 IC756PROII and IC756PROIII to execeptions on get/set_mode diff --git a/rigs/icom/icom.c b/rigs/icom/icom.c index a59d456cd..7746f971d 100644 --- a/rigs/icom/icom.c +++ b/rigs/icom/icom.c @@ -2223,6 +2223,9 @@ static int icom_set_mode_without_data(RIG *rig, vfo_t vfo, rmode_t mode, || RIG_IS_IC375 || RIG_IS_IC726 || RIG_IS_IC475 + || RIG_IS_IC756 + || RIG_IS_IC756PROII + || RIG_IS_IC756PROIII || RIG_IS_IC910 || RIG_IS_IC7000) { @@ -2668,6 +2671,8 @@ static int icom_get_mode_without_data(RIG *rig, vfo_t vfo, rmode_t *mode, (RIG_IS_IC706MKII) || (RIG_IS_IC706MKIIG) || (RIG_IS_IC756) || + (RIG_IS_IC756PROII) || + (RIG_IS_IC756PROIII) || (RIG_IS_ICR30)) { RETURNFUNC2(RIG_OK); diff --git a/rigs/icom/icom.h b/rigs/icom/icom.h index 3c5d5e81a..7b26379cc 100644 --- a/rigs/icom/icom.h +++ b/rigs/icom/icom.h @@ -35,7 +35,7 @@ #include <sys/time.h> #endif -#define BACKEND_VER "20240303" +#define BACKEND_VER "20240415" #define ICOM_IS_ID31 rig_is_model(rig, RIG_MODEL_ID31) #define ICOM_IS_ID51 rig_is_model(rig, RIG_MODEL_ID51) commit 331143fa173eb7bd1bd44aae60544155fcd97a1f Author: Mike Black W9MDB <mdb...@ya...> Date: Sat Apr 13 22:50:38 2024 -0500 Change TS890 to use SF command for mode get/set diff --git a/rigs/kenwood/kenwood.c b/rigs/kenwood/kenwood.c index b3cff5e6c..64c80e267 100644 --- a/rigs/kenwood/kenwood.c +++ b/rigs/kenwood/kenwood.c @@ -2443,7 +2443,47 @@ int kenwood_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) rig_debug(RIG_DEBUG_VERBOSE, "%s: kmode=%d, cmode=%c, datamode=%c\n", __func__, kmode, c, data_mode); - if (RIG_IS_TS990S || RIG_IS_TS890S) + if (RIG_IS_TS890S) + { + char sf[20]; + // TS890 has SF command -- unique so far + if (vfo == RIG_VFO_A) + { + err = kenwood_transaction(rig, "SF0;", sf, sizeof(sf)); + if (err != RIG_OK) + { + rig_debug(RIG_DEBUG_ERR, "%s: SF0; failed: %s\n", __func__, rigerror(err)); + return err; + } + sf[14] = c; + err = kenwood_transaction(rig, sf, NULL, 0); + if (err != RIG_OK) + { + rig_debug(RIG_DEBUG_ERR, "%s: %s failed: %s\n", __func__, sf, rigerror(err)); + return err; + } + return RIG_OK; + } + else + { + err = kenwood_transaction(rig, "SF1;", sf, sizeof(sf)); + if (err != RIG_OK) + { + rig_debug(RIG_DEBUG_ERR, "%s: SF0; failed: %s\n", __func__, rigerror(err)); + return err; + } + sf[14] = c; + err = kenwood_transaction(rig, sf, NULL, 0); + if (err != RIG_OK) + { + rig_debug(RIG_DEBUG_ERR, "%s: %s failed: %s\n", __func__, sf, rigerror(err)); + return err; + } + return RIG_OK; + } + + } + else if (RIG_IS_TS990S) { /* The TS990s has targetable read mode but can only set the mode of the current VFO :( So we need to toggle the operating VFO @@ -2711,9 +2751,10 @@ static int kenwood_get_filter_width(RIG *rig, rmode_t mode, pbwidth_t *width) */ int kenwood_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width) { - char cmd[4]; - char modebuf[10]; + char cmd[5]; + char modebuf[20]; int offs; + int len = 6; int retval; int kmode; @@ -2736,8 +2777,22 @@ int kenwood_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width) STATE(rig)->current_vfo = RIG_VFO_A; RETURNFUNC2(RIG_OK); } - - if (RIG_IS_TS990S || RIG_IS_TS890S) + if (RIG_IS_TS890S) + { + len = 16; + // TS890 has SF command -- unique so far + if (vfo == RIG_VFO_A) + { + strcpy(cmd,"SF0;"); + offs = 14; + } + else + { + strcpy(cmd,"SF1;"); + offs = 14; + } + } + else if (RIG_IS_TS990S) { char c; @@ -2780,7 +2835,7 @@ int kenwood_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width) } } - retval = kenwood_safe_transaction(rig, cmd, modebuf, 6, offs + 1); + retval = kenwood_safe_transaction(rig, cmd, modebuf, len, offs + 1); if (retval != RIG_OK) { commit a6ad5f0928b23a0717426e708dd4d1fe3b8a9592 Author: Mike Black W9MDB <mdb...@ya...> Date: Sat Apr 13 15:23:53 2024 -0500 Fix TS890 set_vfo in set_mode diff --git a/rigs/kenwood/kenwood.c b/rigs/kenwood/kenwood.c index 619fa1709..b3cff5e6c 100644 --- a/rigs/kenwood/kenwood.c +++ b/rigs/kenwood/kenwood.c @@ -2472,7 +2472,7 @@ int kenwood_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) } else // RIG_IS_TS890 { - err = kenwood_set_vfo(rig, curr_vfo); + err = kenwood_set_vfo(rig, vfo); } if (err != RIG_OK) { RETURNFUNC2(err); } commit b42aa75dd8251721345e89926e0bd4140fa2accb Author: Mike Black W9MDB <mdb...@ya...> Date: Sat Apr 13 07:36:02 2024 -0500 astyle kenwood.c diff --git a/rigs/kenwood/kenwood.c b/rigs/kenwood/kenwood.c index 1127cd4dd..619fa1709 100644 --- a/rigs/kenwood/kenwood.c +++ b/rigs/kenwood/kenwood.c @@ -194,12 +194,12 @@ tone_t kenwood42_ctcss_list[] = */ tone_t kenwood51_ctcss_list[] = { - 670 , 693, 719, 744, 770, 797, 825, 854, 885, 915, /* 0- 9 */ - 948 , 974, 1000, 1035, 1072, 1109, 1148, 1188, 1230, 1273, /* 10-19 */ - 1318, 1365, 1413, 1462, 1514, 1567, 1598, 1622, 1655, 1679, /* 20-29 */ - 1713, 1738, 1773, 1799, 1835, 1862, 1899, 1928, 1966, 1995, /* 30-39 */ - 2035, 2065, 2107, 2181, 2257, 2291, 2336, 2418, 2503, 2541, /* 40-49 */ - 17500, 0 /* 50-99 */ + 670, 693, 719, 744, 770, 797, 825, 854, 885, 915, /* 0- 9 */ + 948, 974, 1000, 1035, 1072, 1109, 1148, 1188, 1230, 1273, /* 10-19 */ + 1318, 1365, 1413, 1462, 1514, 1567, 1598, 1622, 1655, 1679, /* 20-29 */ + 1713, 1738, 1773, 1799, 1835, 1862, 1899, 1928, 1966, 1995, /* 30-39 */ + 2035, 2065, 2107, 2181, 2257, 2291, 2336, 2418, 2503, 2541, /* 40-49 */ + 17500, 0 /* 50-99 */ }; /* Token definitions for .cfgparams in rig_caps @@ -1745,13 +1745,13 @@ int kenwood_get_split_vfo_if(RIG *rig, vfo_t rxvfo, split_t *split, { HAMLIB_TRACE; *txvfo = rs->tx_vfo = priv->tx_vfo = (*split - && !transmitting) ? RIG_VFO_B : RIG_VFO_A; + && !transmitting) ? RIG_VFO_B : RIG_VFO_A; } else if (rs->rx_vfo == RIG_VFO_B) { HAMLIB_TRACE; *txvfo = rs->tx_vfo = priv->tx_vfo = (*split - && !transmitting) ? RIG_VFO_B : RIG_VFO_A; + && !transmitting) ? RIG_VFO_B : RIG_VFO_A; } else { @@ -1841,7 +1841,7 @@ int kenwood_get_vfo_if(RIG *rig, vfo_t *vfo) { case '0': *vfo = rs->rx_vfo = rs->tx_vfo = priv->tx_vfo = - split_and_transmitting ? RIG_VFO_B : RIG_VFO_A; + split_and_transmitting ? RIG_VFO_B : RIG_VFO_A; if (priv->info[32] == '1') { priv->tx_vfo = rs->tx_vfo = RIG_VFO_B; } @@ -2417,8 +2417,9 @@ int kenwood_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) if (RIG_IS_TS990S) { - if (mode == RIG_MODE_PKTUSB) mode = RIG_MODE_USBD1; - if (mode == RIG_MODE_PKTLSB) mode = RIG_MODE_LSBD1; + if (mode == RIG_MODE_PKTUSB) { mode = RIG_MODE_USBD1; } + + if (mode == RIG_MODE_PKTLSB) { mode = RIG_MODE_LSBD1; } } kmode = rmode2kenwood(mode, caps->mode_table); @@ -2451,19 +2452,28 @@ int kenwood_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) RIG_TARGETABLE_MODE since the toggle is not required for reading the mode. */ vfo_t curr_vfo; - if (RIG_IS_TS990S) + + if (RIG_IS_TS990S) + { err = kenwood_get_vfo_main_sub(rig, &curr_vfo); - else // RIG_IS_TS890 + } + else // RIG_IS_TS890... [truncated message content] |