From d2bc23b6767ab5e3d5e4c930fbcc918cc6932707 Mon Sep 17 00:00:00 2001 From: Nate Bargmann Date: Fri, 22 May 2020 07:36:24 -0500 Subject: [PATCH 01/25] Remove bashisms from shell scripts Replace backticks in bootstrap with POSIX subshell substitution. Restructure cppcheck.sh to help readability and remove bashisms. --- bootstrap | 6 +-- cppcheck.sh | 104 +++++++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 101 insertions(+), 9 deletions(-) diff --git a/bootstrap b/bootstrap index 51f349a9e..db85b1e9d 100755 --- a/bootstrap +++ b/bootstrap @@ -12,13 +12,13 @@ AUTOMAKE=automake # Check if we compile on OSX and resolve the name conflict with # Apple's tool for creating Mach-O dynamic libraries. -case `uname` in Darwin*) LIBTOOLIZE=glibtoolize ;; esac +case $(uname) in Darwin*) LIBTOOLIZE=glibtoolize ;; esac # variables below this line should not need modification -SRCDIR=`dirname "$0"` +SRCDIR=$(dirname "$0") test -z "$SRCDIR" && SRCDIR=. -ORIGDIR=`pwd` +ORIGDIR=$(pwd) PROJECT=hamlib diff --git a/cppcheck.sh b/cppcheck.sh index eb09e6f10..a73f6fbdf 100755 --- a/cppcheck.sh +++ b/cppcheck.sh @@ -1,16 +1,108 @@ +#!/bin/sh + # Author Michael Black W9MDB # This SUPPRESS setting results in no warnings as of 2020-01-14 # There are things that could still be done...especialy in the C++ area echo "See cppcheck.log when done" echo "There should be no errors or warnings" echo "This takes several hours to run" + # We do suppress some errors which are expected or other code # There are quite a few C++ items to take care of still if anybody cares -SUPPRESS="-i c++/rigclass.cc -i c++/rotclass.cc -i c++/ampclass.cc -i bindings -i lib/getopt.c -i lib/getopt_long.c --suppress=*:extra/gnuradio/demod.h --suppress=*:extra/gnuradio/HrAGC.h --suppress=*:extra/gnuradio/nfm.h --suppress=*:extra/gnuradio/am.h --suppress=*:extra/gnuradio/ssb.h --suppress=*:extra/gnuradio/wfm.h --suppress=*:extra/gnuradio/wfm.h --suppress=*:extra/gnuradio/HrAGC.h --suppress=knownConditionTrueFalse:tests/rotctl.c --suppress=knownConditionTrueFalse:tests/rigctl.c --suppress=knownConditionTrueFalse:tests/ampctl.c --suppress=knownConditionTrueFalse:tests/rotctl_parse.c --suppress=knownConditionTrueFalse:tests/rigctl_parse.c --suppress=knownConditionTrueFalse:tests/ampctl_parse.c" -#CHECK="-D RIG_LEVEL_LINEOUT=1 -D SIGPIPE -D SIGINT -D IPV6_V6ONLY -D RIG_MODE_WFM -D ABI_VERSION=4 -D F_SETSIG=1 -U O_ASYNC -U SA_SIGINFO -U HASH_BLOOM -U HASH_EMIT_KEYS -U HASH_FUNCTION -U __USEP5P6__" -CHECK="-Duint64_t -D HAVE_CONFIG_H -D HAMLIB_EXPORT -D HAMLIB_EXPORT_VAR -D __WORDSIZE -D BACKEND_EXPORT -D PRId64 -D DECLARE_INITRIG_BACKEND -D DECLARE_INITRROT_BACKEND -D DECLARE_INITAMP_BACKEND -U RIG_LEVEL_LINEOUT -U O_ASYNC -U F_SETSIG -U SA_SIGINFO -U SIGPIPE -U gai_strerror -U CMSPAR -U TIOCCBRK -U TIOCSBRK -U TIOCMBIC -U TIOCMBIS -U HASH_BLOOM -U HASH_EMIT_KEYS -U HASH_FUNCTION -U IPV6_V6ONLY -D SIGINT -D WIN32 -D HAVE_SIGNAL" -if [ "$1" == "" ];then -cppcheck --inline-suppr -I src -I include --include=include/config.h --include=include/hamlib/rig.h -q --force --enable=all --std=c99 $SUPPRESS $CHECK . &>cppcheck.log +SUPPRESS="\ +-i c++/rigclass.cc \ +-i c++/rotclass.cc \ +-i c++/ampclass.cc \ +-i bindings \ +-i lib/getopt.c \ +-i lib/getopt_long.c \ +--suppress=*:extra/gnuradio/demod.h \ +--suppress=*:extra/gnuradio/HrAGC.h \ +--suppress=*:extra/gnuradio/nfm.h \ +--suppress=*:extra/gnuradio/am.h \ +--suppress=*:extra/gnuradio/ssb.h \ +--suppress=*:extra/gnuradio/wfm.h \ +--suppress=*:extra/gnuradio/wfm.h \ +--suppress=*:extra/gnuradio/HrAGC.h \ +--suppress=knownConditionTrueFalse:tests/rotctl.c \ +--suppress=knownConditionTrueFalse:tests/rigctl.c \ +--suppress=knownConditionTrueFalse:tests/ampctl.c \ +--suppress=knownConditionTrueFalse:tests/rotctl_parse.c \ +--suppress=knownConditionTrueFalse:tests/rigctl_parse.c \ +--suppress=knownConditionTrueFalse:tests/ampctl_parse.c" + +#CHECK="\ +#-D RIG_LEVEL_LINEOUT=1 \ +#-D SIGPIPE \ +#-D SIGINT \ +# -D IPV6_V6ONLY \ +# -D RIG_MODE_WFM \ +# -D ABI_VERSION=4 \ +# -D F_SETSIG=1 \ +# -U O_ASYNC \ +# -U SA_SIGINFO \ +# -U HASH_BLOOM \ +# -U HASH_EMIT_KEYS \ +# -U HASH_FUNCTION \ +# -U __USEP5P6__" + +CHECK="\ +-Duint64_t \ +-D HAVE_CONFIG_H \ +-D HAMLIB_EXPORT \ +-D HAMLIB_EXPORT_VAR \ +-D __WORDSIZE \ +-D BACKEND_EXPORT \ +-D PRId64 \ +-D DECLARE_INITRIG_BACKEND \ +-D DECLARE_INITRROT_BACKEND \ +-D DECLARE_INITAMP_BACKEND \ +-U RIG_LEVEL_LINEOUT \ +-U O_ASYNC \ +-U F_SETSIG \ +-U SA_SIGINFO \ +-U SIGPIPE \ +-U gai_strerror \ +-U CMSPAR \ +-U TIOCCBRK \ +-U TIOCSBRK \ +-U TIOCMBIC \ +-U TIOCMBIS \ +-U HASH_BLOOM \ +-U HASH_EMIT_KEYS \ +-U HASH_FUNCTION \ +-U IPV6_V6ONLY \ +-D SIGINT \ +-D WIN32 \ +-D HAVE_SIGNAL" + +# If no directory or file name provided, scan the entire project. +if test $# -eq 0 ; then + cppcheck --inline-suppr \ + -I src \ + -I include \ + --include=include/config.h \ + --include=include/hamlib/rig.h \ + -q \ + --force \ + --enable=all \ + --std=c99 \ + $SUPPRESS \ + $CHECK \ + . \ + >cppcheck.log 2>&1 else -cppcheck --check-config --inline-suppr -I src -I include --include=include/config.h --include=include/hamlib/rig.h -q --force --enable=all --std=c99 $SUPPRESS $CHECK $1 + cppcheck --check-config \ + --inline-suppr \ + -I src \ + -I include \ + --include=include/config.h \ + --include=include/hamlib/rig.h \ + -q \ + --force \ + --enable=all \ + --std=c99 \ + $SUPPRESS \ + $CHECK \ + $1 fi From 468c93e5bb9675c9678ca6ec061359863e5572a7 Mon Sep 17 00:00:00 2001 From: Michael Black W9MDB Date: Fri, 22 May 2020 12:07:05 -0500 Subject: [PATCH 02/25] Change FT-1000MP rigs to only use 5-byte status command Contrary to the manual the MARK-V was not recognizing 00 00 00 01 FA We do not need the extra bytes for anything apparently The 0xFA is only referenced in get_vfo https://github.com/Hamlib/Hamlib/issues/258 --- rigs/yaesu/ft1000mp.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/rigs/yaesu/ft1000mp.c b/rigs/yaesu/ft1000mp.c index 83f9656ef..1c9632d9b 100644 --- a/rigs/yaesu/ft1000mp.c +++ b/rigs/yaesu/ft1000mp.c @@ -115,7 +115,10 @@ static const yaesu_cmd_set_t ncmd[] = { 1, { 0x00, 0x00, 0x00, 0x01, 0x0F } }, /* PTT ON */ { 1, { 0x00, 0x00, 0x00, 0x03, 0x10 } }, /* status update VFO A & B update */ { 1, { 0x00, 0x00, 0x00, 0x02, 0x10 } }, /* status update operating data */ - { 1, { 0x00, 0x00, 0x00, 0x01, 0xFA } }, /* Read status flags */ + // We only ask for the 1st 3 status bytes + // The MARK-V was not recognizing the 6-byte request + // This should be all we need as we're only getting the VFO + { 1, { 0x00, 0x00, 0x00, 0x00, 0xFA } }, /* Read status flags */ /* { 0, { 0x00, 0x00, 0x00, 0x00, 0x70 } }, */ /* keyer commands */ /* { 1, { 0x00, 0x00, 0x00, 0x00, 0x81 } }, */ /* tuner off */ /* { 1, { 0x00, 0x00, 0x00, 0x01, 0x81 } }, */ /* tuner on */ @@ -213,7 +216,7 @@ const struct rig_caps ft1000mp_caps = RIG_MODEL(RIG_MODEL_FT1000MP), .model_name = "FT-1000MP", .mfg_name = "Yaesu", - .version = "20200323.0", + .version = "20200522.0", .copyright = "LGPL", .status = RIG_STATUS_BETA, .rig_type = RIG_TYPE_TRANSCEIVER, @@ -339,9 +342,9 @@ const struct rig_caps ft1000mpmkv_caps = RIG_MODEL(RIG_MODEL_FT1000MPMKV), .model_name = "MARK-V FT-1000MP", .mfg_name = "Yaesu", - .version = "20200323.0", + .version = "20200522.0", .copyright = "LGPL", - .status = RIG_STATUS_ALPHA, + .status = RIG_STATUS_BETA, .rig_type = RIG_TYPE_TRANSCEIVER, .ptt_type = RIG_PTT_RIG, .dcd_type = RIG_DCD_RIG, @@ -465,9 +468,9 @@ const struct rig_caps ft1000mpmkvfld_caps = RIG_MODEL(RIG_MODEL_FT1000MPMKVFLD), .model_name = "MARK-V Field FT-1000MP", .mfg_name = "Yaesu", - .version = "20200320.0", + .version = "20200522.0", .copyright = "LGPL", - .status = RIG_STATUS_ALPHA, + .status = RIG_STATUS_BETA, .rig_type = RIG_TYPE_TRANSCEIVER, .ptt_type = RIG_PTT_RIG, .dcd_type = RIG_DCD_RIG, From 8812529169c2933c277600444a43c5e99b747f76 Mon Sep 17 00:00:00 2001 From: Michael Black W9MDB Date: Fri, 22 May 2020 14:26:21 -0500 Subject: [PATCH 03/25] Fix FT1000MP status return length -- is 5 now rather than 6 https://github.com/Hamlib/Hamlib/issues/258 --- rigs/yaesu/ft1000mp.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rigs/yaesu/ft1000mp.h b/rigs/yaesu/ft1000mp.h index fb577b9c1..b7838b8c7 100644 --- a/rigs/yaesu/ft1000mp.h +++ b/rigs/yaesu/ft1000mp.h @@ -25,7 +25,7 @@ #ifndef _FT1000MP_H #define _FT1000MP_H 1 -#define FT1000MP_STATUS_FLAGS_LENGTH 6 /* 0xfa return size */ +#define FT1000MP_STATUS_FLAGS_LENGTH 5 /* 0xfa return size */ #define FT1000MP_STATUS_UPDATE_LENGTH 16 /* 0x10 U = 02 return size */ #define FT1000MP_PACING_INTERVAL 5 From 7104977953abd25fb511503838732e336c7ee85a Mon Sep 17 00:00:00 2001 From: Michael Black W9MDB Date: Sat, 23 May 2020 10:39:01 -0500 Subject: [PATCH 04/25] Add alpha version of Elecraft K4 --- include/hamlib/riglist.h | 1 + rigs/kenwood/k3.c | 151 +++++++++++++++++++++++++++++++++++++++ rigs/kenwood/kenwood.c | 1 + rigs/kenwood/kenwood.h | 1 + 4 files changed, 154 insertions(+) diff --git a/include/hamlib/riglist.h b/include/hamlib/riglist.h index 961376ae1..f98bd4557 100644 --- a/include/hamlib/riglist.h +++ b/include/hamlib/riglist.h @@ -169,6 +169,7 @@ #define RIG_MODEL_KX2 RIG_MAKE_MODEL(RIG_KENWOOD, 44) #define RIG_MODEL_KX3 RIG_MAKE_MODEL(RIG_KENWOOD, 45) #define RIG_MODEL_PT8000A RIG_MAKE_MODEL(RIG_KENWOOD, 46) +#define RIG_MODEL_K4 RIG_MAKE_MODEL(RIG_KENWOOD, 47) /* diff --git a/rigs/kenwood/k3.c b/rigs/kenwood/k3.c index d1453c730..1759688c7 100644 --- a/rigs/kenwood/k3.c +++ b/rigs/kenwood/k3.c @@ -53,6 +53,7 @@ #define K3_VFO_OP (RIG_OP_UP|RIG_OP_DOWN) #define K3_ANTS (RIG_ANT_1|RIG_ANT_2) +#define K4_ANTS (RIG_ANT_1|RIG_ANT_2|RIG_ANT_3|RIG_ANT_4) #define KX3_FUNC_ALL (RIG_FUNC_NB|RIG_FUNC_VOX|RIG_FUNC_APF|\ RIG_FUNC_DUAL_WATCH|RIG_FUNC_LOCK|RIG_FUNC_RIT|RIG_FUNC_XIT) @@ -472,6 +473,156 @@ const struct rig_caps k3s_caps = }; +// How similar is this to the K3S? +const struct rig_caps k4_caps = +{ + RIG_MODEL(RIG_MODEL_K4), + .model_name = "K4", + .mfg_name = "Elecraft", + .version = BACKEND_VER ".0", + .copyright = "LGPL", + .status = RIG_STATUS_ALPHA, + .rig_type = RIG_TYPE_TRANSCEIVER, + .ptt_type = RIG_PTT_RIG, + .dcd_type = RIG_DCD_RIG, + .port_type = RIG_PORT_SERIAL, + .serial_rate_min = 4800, + .serial_rate_max = 115200, + .serial_data_bits = 8, + .serial_stop_bits = 1, + .serial_parity = RIG_PARITY_NONE, + .serial_handshake = RIG_HANDSHAKE_NONE, + .write_delay = 0, /* Timing between bytes */ + .post_write_delay = 0, /* Timing between command strings */ + .timeout = 1000, /* FA and FB make take up to 500 ms on band change */ + .retry = 5, + + .has_get_func = K3_FUNC_ALL, + .has_set_func = K3_FUNC_ALL, + .has_get_level = K3_LEVEL_ALL, + .has_set_level = RIG_LEVEL_SET(K3_LEVEL_ALL), + .has_get_parm = RIG_PARM_NONE, + .has_set_parm = RIG_PARM_NONE, /* FIXME: parms */ + .level_gran = { + [LVL_KEYSPD] = { .min = { .i = 8 }, .max = { .i = 50 }, .step = { .i = 1 } }, + }, + .parm_gran = {}, + .extlevels = k3_ext_levels, + .extparms = kenwood_cfg_params, + .preamp = { 1, RIG_DBLST_END, }, + .attenuator = { 5, 10, 15, RIG_DBLST_END, }, + .max_rit = Hz(9990), + .max_xit = Hz(9990), + .max_ifshift = Hz(0), + .vfo_ops = K3_VFO_OP, + .targetable_vfo = RIG_TARGETABLE_FREQ, + .transceive = RIG_TRN_RIG, + .bank_qty = 0, + .chan_desc_sz = 0, + + .chan_list = { RIG_CHAN_END }, + + .rx_range_list1 = { + {kHz(500), MHz(30), K3_MODES, -1, -1, K3_VFO, K4_ANTS}, + { MHz(48), MHz(54), K3_MODES, -1, - 1, K3_VFO, K4_ANTS}, + RIG_FRNG_END, + }, /* rx range */ + .tx_range_list1 = { + FRQ_RNG_HF(1, K3_MODES, mW(10), W(100), K3_VFO, K4_ANTS), + FRQ_RNG_6m(1, K3_MODES, mW(10), W(100), K3_VFO, K4_ANTS), + RIG_FRNG_END, + }, /* tx range */ + + .rx_range_list2 = { + {kHz(500), MHz(30), K3_MODES, -1, -1, K3_VFO, K4_ANTS}, + { MHz(48), MHz(54), K3_MODES, -1, -1, K3_VFO, K4_ANTS}, + RIG_FRNG_END, + }, /* rx range */ + .tx_range_list2 = { + FRQ_RNG_HF(2, K3_MODES, mW(10), W(100), K3_VFO, K4_ANTS), + FRQ_RNG_6m(2, K3_MODES, mW(10), W(100), K3_VFO, K4_ANTS), + RIG_FRNG_END, + }, /* tx range */ + .tuning_steps = { + {K3_MODES, 1}, + RIG_TS_END, + }, + + /* mode/filter list, remember: order matters! */ + /* Values are arbitrary based on common K3 filter options. */ + .filters = { + {RIG_MODE_SSB, kHz(2.7)}, + {RIG_MODE_SSB, kHz(2.8)}, + {RIG_MODE_SSB, kHz(1.8)}, + {RIG_MODE_SSB, kHz(2.4)}, + {RIG_MODE_SSB, RIG_FLT_ANY}, + {RIG_MODE_CW | RIG_MODE_CWR, kHz(1)}, + {RIG_MODE_CW | RIG_MODE_CWR, kHz(2.8)}, + {RIG_MODE_CW | RIG_MODE_CWR, Hz(50)}, + {RIG_MODE_CW | RIG_MODE_CWR, Hz(500)}, + {RIG_MODE_CW | RIG_MODE_CWR, Hz(300)}, + {RIG_MODE_CW | RIG_MODE_CWR, RIG_FLT_ANY}, + {RIG_MODE_RTTY | RIG_MODE_RTTYR, kHz(2)}, + {RIG_MODE_RTTY | RIG_MODE_RTTYR, kHz(2.7)}, + {RIG_MODE_RTTY | RIG_MODE_RTTYR, Hz(500)}, + {RIG_MODE_RTTY | RIG_MODE_RTTYR, Hz(300)}, + {RIG_MODE_RTTY | RIG_MODE_RTTYR, RIG_FLT_ANY}, + {RIG_MODE_PKTUSB | RIG_MODE_PKTLSB, kHz(2.7)}, + {RIG_MODE_PKTUSB | RIG_MODE_PKTLSB, kHz(2.8)}, + {RIG_MODE_PKTUSB | RIG_MODE_PKTLSB, Hz(50)}, + {RIG_MODE_PKTUSB | RIG_MODE_PKTLSB, Hz(2400)}, + {RIG_MODE_PKTUSB | RIG_MODE_PKTLSB, Hz(500)}, + {RIG_MODE_PKTUSB | RIG_MODE_PKTLSB, Hz(300)}, + {RIG_MODE_PKTUSB | RIG_MODE_PKTLSB, RIG_FLT_ANY}, + {RIG_MODE_AM, kHz(6)}, + {RIG_MODE_AM, kHz(13)}, + {RIG_MODE_AM, kHz(2.7)}, + {RIG_MODE_AM, RIG_FLT_ANY}, + {RIG_MODE_FM, kHz(13)}, /* TBC */ + RIG_FLT_END, + }, + .priv = (void *)& k3_priv_caps, + + .rig_init = kenwood_init, + .rig_cleanup = kenwood_cleanup, + .rig_open = elecraft_open, + .rig_close = kenwood_close, + .set_freq = kenwood_set_freq, + .get_freq = kenwood_get_freq, + .set_mode = k3_set_mode, + .get_mode = k3_get_mode, + .set_vfo = k3_set_vfo, + .get_vfo = kenwood_get_vfo_if, + .set_split_mode = k3_set_split_mode, + .get_split_mode = k3_get_split_mode, + .set_split_vfo = kenwood_set_split_vfo, + .get_split_vfo = kenwood_get_split_vfo_if, + .set_rit = k3_set_rit, + .get_rit = kenwood_get_rit, + .set_xit = k3_set_xit, + .get_xit = kenwood_get_xit, + .get_ptt = kenwood_get_ptt, + .set_ptt = kenwood_set_ptt, + .get_dcd = kenwood_get_dcd, + .set_func = k3_set_func, + .get_func = k3_get_func, + .set_ext_parm = kenwood_set_ext_parm, + .get_ext_parm = kenwood_get_ext_parm, + .set_level = k3_set_level, + .get_level = k3_get_level, + .set_ext_level = k3_set_ext_level, + .get_ext_level = k3_get_ext_level, + .vfo_op = kenwood_vfo_op, + .set_trn = kenwood_set_trn, + .get_trn = kenwood_get_trn, + .set_powerstat = kenwood_set_powerstat, + .get_powerstat = kenwood_get_powerstat, + .set_ant = kenwood_set_ant_no_ack, + .get_ant = kenwood_get_ant, + .send_morse = kenwood_send_morse, + +}; + const struct rig_caps kx3_caps = { RIG_MODEL(RIG_MODEL_KX3), diff --git a/rigs/kenwood/kenwood.c b/rigs/kenwood/kenwood.c index 8a8c7112d..8cff18101 100644 --- a/rigs/kenwood/kenwood.c +++ b/rigs/kenwood/kenwood.c @@ -4320,6 +4320,7 @@ DECLARE_INITRIG_BACKEND(kenwood) rig_register(&k3s_caps); rig_register(&kx2_caps); rig_register(&kx3_caps); + rig_register(&k4_caps); rig_register(&xg3_caps); rig_register(&ts440_caps); diff --git a/rigs/kenwood/kenwood.h b/rigs/kenwood/kenwood.h index c2294e494..d1a39c538 100644 --- a/rigs/kenwood/kenwood.h +++ b/rigs/kenwood/kenwood.h @@ -226,6 +226,7 @@ extern const struct rig_caps k3_caps; extern const struct rig_caps k3s_caps; extern const struct rig_caps kx2_caps; extern const struct rig_caps kx3_caps; +extern const struct rig_caps k4_caps; extern const struct rig_caps xg3_caps; extern const struct rig_caps trc80_caps; From 8e9cad1e0fac48a19e538f0ceccb338a3c7da4d2 Mon Sep 17 00:00:00 2001 From: Michael Black W9MDB Date: Sat, 23 May 2020 10:58:25 -0500 Subject: [PATCH 05/25] Add better version info to utilities --- tests/Makefile.am | 16 ++++++++++++---- tests/ampctl.c | 3 ++- tests/rigctl.c | 5 +++-- tests/rotctl.c | 3 ++- 4 files changed, 19 insertions(+), 8 deletions(-) diff --git a/tests/Makefile.am b/tests/Makefile.am index 9b51f6a53..9a0400a25 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -4,15 +4,17 @@ # AUTOMAKE_OPTIONS = dejagnu # DEJATOOL = testfreq testbcd testloc rigctl -DISTCLEANFILES = rigctl.log rigctl.sum testbcd.log testbcd.sum +BUILT_SOURCES = hamlibdatetime.h + +DISTCLEANFILES = rigctl.log rigctl.sum testbcd.log testbcd.sum datebuilt.h bin_PROGRAMS = rigctl rigctld rigmem rigsmtr rigswr rotctl rotctld rigctlcom ampctl ampctld check_PROGRAMS = dumpmem testrig testtrn testbcd testfreq listrigs testloc rig_bench cachetest cachetest2 -RIGCOMMONSRC = rigctl_parse.c rigctl_parse.h dumpcaps.c sprintflst.c sprintflst.h uthash.h -ROTCOMMONSRC = rotctl_parse.c rotctl_parse.h dumpcaps_rot.c uthash.h -AMPCOMMONSRC = ampctl_parse.c ampctl_parse.h dumpcaps_amp.c sprintflst.c sprintflst.h uthash.h +RIGCOMMONSRC = rigctl_parse.c rigctl_parse.h dumpcaps.c sprintflst.c sprintflst.h uthash.h datebuilt.h +ROTCOMMONSRC = rotctl_parse.c rotctl_parse.h dumpcaps_rot.c uthash.h datebuilt.h +AMPCOMMONSRC = ampctl_parse.c ampctl_parse.h dumpcaps_amp.c sprintflst.c sprintflst.h uthash.h datebuilt.h rigctl_SOURCES = rigctl.c $(RIGCOMMONSRC) rigctld_SOURCES = rigctld.c $(RIGCOMMONSRC) @@ -94,5 +96,11 @@ testloc.sh: echo './testloc EM79UT96LW 5' > testloc.sh chmod +x ./testloc.sh +# If we have a .git directory then we will update the hamlibdate.h file +hamlibdatetime.h: FORCE + test ! -x ../.git || echo // This date time is from the last commit to hamlib > hamlibdatetime.h + test ! -x ../.git || echo "#define HAMLIBDATETIME "\"`git log -n 1 | grep Date:|cut -c9-`"\"" >> hamlibdatetime.h + +FORCE: ; CLEANFILES = testrig.sh testfreq.sh testbcd.sh testloc.sh diff --git a/tests/ampctl.c b/tests/ampctl.c index 8da1925b9..eb9f4da76 100644 --- a/tests/ampctl.c +++ b/tests/ampctl.c @@ -24,6 +24,7 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * */ +#include "hamlibdatetime.h" #ifdef HAVE_CONFIG_H # include "config.h" @@ -272,7 +273,7 @@ int main(int argc, char *argv[]) rig_set_debug(verbose); - rig_debug(RIG_DEBUG_VERBOSE, "ampctl, %s\n", hamlib_version); + rig_debug(RIG_DEBUG_VERBOSE, "ampctl %s\nLast commit was %s\n", hamlib_version, HAMLIBDATETIME); rig_debug(RIG_DEBUG_VERBOSE, "%s", "Report bugs to \n\n"); diff --git a/tests/rigctl.c b/tests/rigctl.c index a47c8efbd..fedb0405b 100644 --- a/tests/rigctl.c +++ b/tests/rigctl.c @@ -23,6 +23,7 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * */ +#include "hamlibdatetime.h" #ifdef HAVE_CONFIG_H # include "config.h" @@ -428,8 +429,8 @@ int main(int argc, char *argv[]) rig_set_debug(verbose); - rig_debug(RIG_DEBUG_VERBOSE, "rigctl, %s %s\n", hamlib_version, - __DATE__ " " __TIME__); + rig_debug(RIG_DEBUG_VERBOSE, "rigctl %s\nLast commit was %s\n", hamlib_version, + HAMLIBDATETIME); rig_debug(RIG_DEBUG_VERBOSE, "%s", "Report bugs to \n\n"); diff --git a/tests/rotctl.c b/tests/rotctl.c index b565502b1..d0d16f21a 100644 --- a/tests/rotctl.c +++ b/tests/rotctl.c @@ -23,6 +23,7 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * */ +#include "hamlibdatetime.h" #ifdef HAVE_CONFIG_H # include "config.h" @@ -298,7 +299,7 @@ int main(int argc, char *argv[]) rig_set_debug(verbose); - rig_debug(RIG_DEBUG_VERBOSE, "rotctl, %s\n", hamlib_version); + rig_debug(RIG_DEBUG_VERBOSE, "rotctl %s\nLast commit was %s\n", hamlib_version, HAMLIBDATETIME); rig_debug(RIG_DEBUG_VERBOSE, "%s", "Report bugs to \n\n"); From bbbb3e6be62367fc93de56b6643260657a567c2a Mon Sep 17 00:00:00 2001 From: Michael Black W9MDB Date: Sat, 23 May 2020 10:59:29 -0500 Subject: [PATCH 06/25] Adding version control file for utilities --- tests/hamlibdatetime.h | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 tests/hamlibdatetime.h diff --git a/tests/hamlibdatetime.h b/tests/hamlibdatetime.h new file mode 100644 index 000000000..b31d6a142 --- /dev/null +++ b/tests/hamlibdatetime.h @@ -0,0 +1,2 @@ +// This date time is from the last commit to hamlib +#define HAMLIBDATETIME "Sat May 23 10:39:01 2020 -0500" From de7cf6576fd521a8cf5d399dc03bf952a19ef262 Mon Sep 17 00:00:00 2001 From: Michael Black W9MDB Date: Sun, 24 May 2020 23:42:35 -0500 Subject: [PATCH 07/25] Add rules for setting VFO_RX and VFO_TX for different rig types https://github.com/Hamlib/Hamlib/issues/261 --- include/hamlib/rig.h | 2 ++ rigs/icom/icom.c | 47 +++++++++++++++++++++++++------------------- rigs/icom/icom.h | 5 ++--- src/rig.c | 26 ++++++++++++++++++++++-- 4 files changed, 55 insertions(+), 25 deletions(-) diff --git a/include/hamlib/rig.h b/include/hamlib/rig.h index 462bae519..53d0594cc 100644 --- a/include/hamlib/rig.h +++ b/include/hamlib/rig.h @@ -1930,6 +1930,7 @@ struct rig_cache { struct timespec time_split; vfo_t vfo_freq; // last vfo cached vfo_t vfo_mode; // last vfo cached + int satmode; // if rig is in satellite mode }; @@ -2009,6 +2010,7 @@ struct rig_state { time_t twiddle_time; /*!< time when vfo twiddling was detected */ int twiddle_timeout; /*!< timeout to resume from twiddling */ struct rig_cache cache; + int vfo_opt; /*!< Is -o switch turned on? */ }; //! @cond Doxygen_Suppress diff --git a/rigs/icom/icom.c b/rigs/icom/icom.c index 8692bee5c..5ab943ba3 100644 --- a/rigs/icom/icom.c +++ b/rigs/icom/icom.c @@ -757,7 +757,7 @@ icom_rig_open(RIG *rig) } retval = rig_get_func(rig, RIG_VFO_CURR, RIG_FUNC_SATMODE, &satmode); - priv->satmode = satmode; + rig->state.cache.satmode = satmode; rig_debug(RIG_DEBUG_VERBOSE, "%s: satmode=%d\n", __func__, satmode); // RIG_OK return means this rig has satmode capabiltiy and Main/Sub VFOs @@ -1159,7 +1159,7 @@ int icom_get_freq(RIG *rig, vfo_t vfo, freq_t *freq) vfo = RIG_VFO_A; if (priv->split_on) { vfo = RIG_VFO_B; } - else if (priv->satmode) { vfo = RIG_VFO_SUB; } + else if (rig->state.cache.satmode) { vfo = RIG_VFO_SUB; } } rig_debug(RIG_DEBUG_TRACE, "%s: VFO_TX requested, new vfo=%s\n", __func__, @@ -1960,7 +1960,7 @@ int icom_set_vfo(RIG *rig, vfo_t vfo) __func__, rig_strvfo(vfo)); } else if ((vfo == RIG_VFO_SUB) && (VFO_HAS_A_B_ONLY - || (VFO_HAS_MAIN_SUB_A_B_ONLY && !priv->split_on && !priv->satmode))) + || (VFO_HAS_MAIN_SUB_A_B_ONLY && !priv->split_on && !rig->state.cache.satmode))) { // if rig doesn't have Main/Sub // or if rig has both Main/Sub and A/B -- e.g. 9700 @@ -1971,6 +1971,13 @@ int icom_set_vfo(RIG *rig, vfo_t vfo) "%s: Rig does not have MAIN/SUB so Sub changed to %s\n", __func__, rig_strvfo(vfo)); } + else if (vfo == RIG_VFO_TX) + { + vfo = RIG_VFO_A; + if (VFO_HAS_A_B_ONLY && rig->state.cache.satmode) vfo = RIG_VFO_B; + else if (VFO_HAS_MAIN_SUB_ONLY) vfo = RIG_VFO_SUB; + else if (VFO_HAS_MAIN_SUB_A_B_ONLY && rig->state.cache.satmode) vfo = RIG_VFO_SUB; + } if ((vfo == RIG_VFO_A || vfo == RIG_VFO_B) && !VFO_HAS_A_B && VFO_HAS_MAIN_SUB) { @@ -2018,7 +2025,7 @@ rig_debug(RIG_DEBUG_TRACE,"%s: debug#2\n", __func__); if (VFO_HAS_MAIN_SUB_A_B_ONLY && priv->split_on) { icvfo = S_VFOB; } // If not split or satmode then we must want VFOB - if (VFO_HAS_MAIN_SUB_A_B_ONLY && !priv->split_on && !priv->satmode) { icvfo = S_VFOB; } + if (VFO_HAS_MAIN_SUB_A_B_ONLY && !priv->split_on && !rig->state.cache.satmode) { icvfo = S_VFOB; } rig_debug(RIG_DEBUG_TRACE, "%s: Sub asked for, ended up with vfo=%s\n", __func__, icvfo == S_SUB ? "Sub" : "VFOB"); @@ -3713,7 +3720,7 @@ int icom_get_rptr_offs(RIG *rig, vfo_t vfo, shortfreq_t *rptr_offs) /* * Helper function to go back and forth split VFO */ -int icom_get_split_vfos(const RIG *rig, vfo_t *rx_vfo, vfo_t *tx_vfo) +int icom_get_split_vfos(RIG *rig, vfo_t *rx_vfo, vfo_t *tx_vfo) { struct icom_priv_data *priv; struct rig_state *rs; @@ -3751,7 +3758,7 @@ int icom_get_split_vfos(const RIG *rig, vfo_t *rx_vfo, vfo_t *tx_vfo) // e.g. IC9700 split on Main/Sub does not work // only Main VFOA/B and SubRx/MainTx split works rig_get_func((RIG *)rig, RIG_VFO_CURR, RIG_FUNC_SATMODE, &satmode); - priv->satmode = satmode; + rig->state.cache.satmode = satmode; // don't care about retval here...only care about satmode=1 if (satmode) @@ -3805,17 +3812,17 @@ int icom_set_split_freq(RIG *rig, vfo_t vfo, freq_t tx_freq) priv = (struct icom_priv_data *) rs->priv; rig_debug(RIG_DEBUG_VERBOSE, "%s: satmode=%d, subvfo=%s\n", __func__, - priv->satmode, rig_strvfo(priv->tx_vfo)); + rig->state.cache.satmode, rig_strvfo(priv->tx_vfo)); if (RIG_VFO_TX) { - if (priv->satmode) { vfo = RIG_VFO_SUB; } + if (rig->state.cache.satmode) { vfo = RIG_VFO_SUB; } else { vfo = priv->tx_vfo; } } rig_debug(RIG_DEBUG_VERBOSE, "%s: vfo is now %s\n", __func__, rig_strvfo(vfo)); - if (priv->satmode && vfo == RIG_VFO_TX) { vfo = RIG_VFO_SUB; } + if (rig->state.cache.satmode && vfo == RIG_VFO_TX) { vfo = RIG_VFO_SUB; } if (priv->curr_vfo == RIG_VFO_NONE) { @@ -3845,7 +3852,7 @@ int icom_set_split_freq(RIG *rig, vfo_t vfo, freq_t tx_freq) int satmode = 0; // retval not important here...only satmode=1 means anything rig_get_func(rig, RIG_VFO_CURR, RIG_FUNC_SATMODE, &satmode); - priv->satmode = satmode; + rig->state.cache.satmode = satmode; rig_debug(RIG_DEBUG_VERBOSE, "%s: satmode=%d\n", __func__, satmode); if (satmode == 0) // only worth trying if not in satmode @@ -4040,7 +4047,7 @@ int icom_get_split_freq(RIG *rig, vfo_t vfo, freq_t *tx_freq) int satmode = 0; // don't care about the retval here..only satmode=1 is important rig_get_func(rig, RIG_VFO_CURR, RIG_FUNC_SATMODE, &satmode); - priv->satmode = satmode; + rig->state.cache.satmode = satmode; rig_debug(RIG_DEBUG_VERBOSE, "%s: satmode=%d\n", __func__, satmode); if (satmode == 0) // only worth trying if not in satmode @@ -4644,24 +4651,24 @@ int icom_set_split_vfo(RIG *rig, vfo_t vfo, split_t split, vfo_t tx_vfo) } // This should automaticaly switch between satmode on/off based on the requested split vfo - if (tx_vfo == RIG_VFO_SUB && !priv->satmode) + if (tx_vfo == RIG_VFO_SUB && !rig->state.cache.satmode) { rig_debug(RIG_DEBUG_VERBOSE, "%s: VFO_SUB and satmode is off so turning on\n", __func__); rig_set_func(rig, RIG_VFO_CURR, RIG_FUNC_SATMODE, 1); - priv->satmode = 1; + rig->state.cache.satmode = 1; priv->tx_vfo = RIG_VFO_SUB; } - else if ((tx_vfo == RIG_VFO_B && priv->satmode) || (tx_vfo == RIG_VFO_A - && priv->satmode)) + else if ((tx_vfo == RIG_VFO_B && rig->state.cache.satmode) || (tx_vfo == RIG_VFO_A + && rig->state.cache.satmode)) { rig_debug(RIG_DEBUG_VERBOSE, "%s: VFO_B and satmode is on so turning off\n", __func__); rig_set_func(rig, RIG_VFO_CURR, RIG_FUNC_SATMODE, 0); - priv->satmode = 0; + rig->state.cache.satmode = 0; priv->tx_vfo = RIG_VFO_B; } - else if (tx_vfo == RIG_VFO_SUB && priv->satmode && split==1) + else if (tx_vfo == RIG_VFO_SUB && rig->state.cache.satmode && split==1) { rig_debug(RIG_DEBUG_VERBOSE, "%s: rig in satmode so setting split on is redundant and will create error...returning OK\n", __func__); // we'll return OK anyways as this is a split mode @@ -4884,7 +4891,7 @@ int icom_get_split_vfo(RIG *rig, vfo_t vfo, split_t *split, vfo_t *tx_vfo) } rig_get_func(rig, RIG_VFO_CURR, RIG_FUNC_SATMODE, &satmode); - priv->satmode = satmode; + rig->state.cache.satmode = satmode; priv->split_on = RIG_SPLIT_ON == *split; @@ -5235,7 +5242,7 @@ int icom_set_func(RIG *rig, vfo_t vfo, setting_t func, int status) priv->x25cmdfails = 0; // we reset this to try it again priv->x1cx03cmdfails = 0; // we reset this to try it again - priv->satmode = status; + rig->state.cache.satmode = status; break; @@ -7113,7 +7120,7 @@ static int set_vfo_curr(RIG *rig, vfo_t vfo, vfo_t curr_vfo) // only need to set vfo if it's changed else if (priv->curr_vfo != vfo) { - if (!(VFO_HAS_MAIN_SUB_A_B_ONLY && !priv->split_on && !priv->satmode && vfo == RIG_VFO_SUB && priv->curr_vfo == RIG_VFO_B)) { + if (!(VFO_HAS_MAIN_SUB_A_B_ONLY && !priv->split_on && !rig->state.cache.satmode && vfo == RIG_VFO_SUB && priv->curr_vfo == RIG_VFO_B)) { rig_debug(RIG_DEBUG_TRACE, "%s: setting new vfo=%s\n", __func__, rig_strvfo(vfo)); retval = rig_set_vfo(rig, vfo); diff --git a/rigs/icom/icom.h b/rigs/icom/icom.h index 380a52b32..abbef5e9c 100644 --- a/rigs/icom/icom.h +++ b/rigs/icom/icom.h @@ -31,7 +31,7 @@ #include #endif -#define BACKEND_VER "20200519" +#define BACKEND_VER "20200524" /* * defines used by comp_cal_str in rig.c @@ -191,7 +191,6 @@ struct icom_priv_data freq_t vfob_freq; // track last setting of vfob -- used to return last freq when ptt is asserted int x25cmdfails; // This will get set if the 0x25 command fails so we try just once int x1cx03cmdfails; // This will get set if the 0x1c 0x03 command fails so we try just once - int satmode; // Remember satmode for handling TX/RX VFOs and such }; extern const struct ts_sc_list r8500_ts_sc_list[]; @@ -296,7 +295,7 @@ int icom_mW2power(RIG *rig, float *power, unsigned int mwpower, freq_t freq, int icom_send_morse(RIG *rig, vfo_t vfo, const char *msg); int icom_send_voice_mem(RIG *rig, vfo_t vfo, int bank); /* Exposed routines */ -int icom_get_split_vfos(const RIG *rig, vfo_t *rx_vfo, vfo_t *tx_vfo); +int icom_get_split_vfos(RIG *rig, vfo_t *rx_vfo, vfo_t *tx_vfo); int icom_set_raw(RIG *rig, int cmd, int subcmd, int subcmdbuflen, unsigned char *subcmdbuf, int val_bytes, int val); int icom_get_raw_buf(RIG *rig, int cmd, int subcmd, int subcmdbuflen, diff --git a/src/rig.c b/src/rig.c index b18ba5040..fe59f8f0c 100644 --- a/src/rig.c +++ b/src/rig.c @@ -1214,7 +1214,7 @@ int HAMLIB_API rig_set_freq(RIG *rig, vfo_t vfo, freq_t freq) const struct rig_caps *caps; int retcode; - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); + rig_debug(RIG_DEBUG_VERBOSE, "%s called vfo=%s\n", __func__, rig_strvfo(vfo)); if (CHECK_RIG_ARG(rig)) { @@ -1362,8 +1362,9 @@ int HAMLIB_API rig_get_freq(RIG *rig, vfo_t vfo, freq_t *freq) return -RIG_ENAVAIL; } + // If we're in vfo_mode then rigctld will do any VFO swapping we need if ((caps->targetable_vfo & RIG_TARGETABLE_FREQ) - || vfo == RIG_VFO_CURR || vfo == rig->state.current_vfo) + || vfo == RIG_VFO_CURR || vfo == rig->state.current_vfo || rig->state.vfo_opt == 1) { retcode = caps->get_freq(rig, vfo, freq); @@ -1811,6 +1812,24 @@ int HAMLIB_API rig_set_vfo(RIG *rig, vfo_t vfo) rig_debug(RIG_DEBUG_ERR, "%s: rig does not have %s\n", __func__, rig_strvfo(vfo)); return -RIG_EINVAL; } + if (vfo == RIG_VFO_RX) + { + vfo = RIG_VFO_A; + if (VFO_HAS_MAIN_SUB_ONLY) vfo = RIG_VFO_MAIN; + if (VFO_HAS_MAIN_SUB_A_B_ONLY) vfo = RIG_VFO_MAIN; + } + if (vfo == RIG_VFO_TX) + { + int split = rig->state.cache.split; + int satmode = rig->state.cache.satmode; + vfo = RIG_VFO_A; + if (split) vfo = RIG_VFO_B; + if (VFO_HAS_MAIN_SUB_ONLY && !split && !satmode) vfo = RIG_VFO_MAIN; + if (VFO_HAS_MAIN_SUB_ONLY && (split || satmode)) vfo = RIG_VFO_SUB; + if (VFO_HAS_MAIN_SUB_A_B_ONLY && split) vfo = RIG_VFO_B; + if (VFO_HAS_MAIN_SUB_A_B_ONLY && satmode) vfo = RIG_VFO_SUB; + rig_debug(RIG_DEBUG_TRACE, "%s: RIG_VFO_TX changed to %s, split=%d, satmode=%d\n", __func__, rig_strvfo(vfo), split, satmode); + } caps = rig->caps; @@ -3336,6 +3355,9 @@ int HAMLIB_API rig_set_split_vfo(RIG *rig, rig->state.tx_vfo = tx_vfo; } + rig->state.cache.split = split; + rig->state.cache.split_vfo = tx_vfo; + elapsed_ms(&rig->state.cache.time_split, ELAPSED_SET); return retcode; } From 7508f6497b5746cea338576bb573f51bda529860 Mon Sep 17 00:00:00 2001 From: Michael Black W9MDB Date: Mon, 25 May 2020 07:38:03 -0500 Subject: [PATCH 08/25] on rig_get_vfo ask for the real split mode --- src/rig.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/rig.c b/src/rig.c index fe59f8f0c..60140e088 100644 --- a/src/rig.c +++ b/src/rig.c @@ -1820,7 +1820,13 @@ int HAMLIB_API rig_set_vfo(RIG *rig, vfo_t vfo) } if (vfo == RIG_VFO_TX) { - int split = rig->state.cache.split; + split_t split = 0; + // get split if we can -- it will default to off otherwise + // maybe split/satmode/vfo/freq/mode can be cached for rigs + // that don't have read capability or get_vfo like Icom? + // Icom's lack of get_vfo is problematic in this respect + // If we cache vfo or others than twiddling the rig may cause problems + rig_get_split(rig,vfo,&split); int satmode = rig->state.cache.satmode; vfo = RIG_VFO_A; if (split) vfo = RIG_VFO_B; From 353d7d50d19d17fb4b1081d0895f0f389007bbca Mon Sep 17 00:00:00 2001 From: Michael Black W9MDB Date: Mon, 25 May 2020 09:10:40 -0500 Subject: [PATCH 09/25] Add a littld debug to rig.c --- src/rig.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rig.c b/src/rig.c index 60140e088..5adad7484 100644 --- a/src/rig.c +++ b/src/rig.c @@ -1795,7 +1795,7 @@ int HAMLIB_API rig_set_vfo(RIG *rig, vfo_t vfo) int retcode; freq_t curr_freq; - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); + rig_debug(RIG_DEBUG_VERBOSE, "%s called vfo=%s\n", __func__,rig_strvfo(vfo)); if (CHECK_RIG_ARG(rig)) { From dd514e695ea2afe7dd3a2a2430e614feff7d7a62 Mon Sep 17 00:00:00 2001 From: Michael Black W9MDB Date: Mon, 25 May 2020 09:11:32 -0500 Subject: [PATCH 10/25] Update some more items in icom.c where appropriate --- rigs/icom/icom.c | 9 ++++++--- rigs/icom/icom.h | 2 +- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/rigs/icom/icom.c b/rigs/icom/icom.c index 5ab943ba3..f3466e8f8 100644 --- a/rigs/icom/icom.c +++ b/rigs/icom/icom.c @@ -4685,7 +4685,8 @@ int icom_set_split_vfo(RIG *rig, vfo_t vfo, split_t split, vfo_t tx_vfo) { rig_debug(RIG_DEBUG_TRACE, "%s: tx_vfo=%s\n", __func__, rig_strvfo(tx_vfo)); - //vfo_final = RIG_VFO_A; + priv->tx_vfo = RIG_VFO_A; + //vfo_final = RIG_VFO_A; // do we need to switch back at all? } // otherwise if Main or Sub we set Main or VFOA as the current vfo else if (tx_vfo == RIG_VFO_MAIN || tx_vfo == RIG_VFO_SUB) @@ -4694,7 +4695,7 @@ int icom_set_split_vfo(RIG *rig, vfo_t vfo, split_t split, vfo_t tx_vfo) __func__, rig_strvfo(tx_vfo)); //rig_set_vfo(rig, RIG_VFO_MAIN); - //vfo_final = RIG_VFO_MAIN; + //vfo_final = RIG_VFO_MAIN; // do we need to switch back at all? if (VFO_HAS_A_B_ONLY) { @@ -4726,7 +4727,8 @@ int icom_set_split_vfo(RIG *rig, vfo_t vfo, split_t split, vfo_t tx_vfo) if (vfo == RIG_VFO_MAIN) { vfo = RIG_VFO_A; } else if (vfo == RIG_VFO_SUB) { vfo = RIG_VFO_B; } - //vfo_final = RIG_VFO_A; + priv->tx_vfo = tx_vfo; + //vfo_final = RIG_VFO_A; // do we need to switch back at all? } /* ensure VFO A is Rx and VFO B is Tx as we assume that elsewhere */ @@ -4922,6 +4924,7 @@ int icom_mem_get_split_vfo(RIG *rig, vfo_t vfo, split_t *split, if (rig->state.current_vfo != RIG_VFO_MEM || !rig_has_vfo_op(rig, RIG_OP_XCHG)) { + *split = rig->state.cache.split; // we set this but still return ENAVAIL return -RIG_ENAVAIL; } diff --git a/rigs/icom/icom.h b/rigs/icom/icom.h index abbef5e9c..4bdfef0c6 100644 --- a/rigs/icom/icom.h +++ b/rigs/icom/icom.h @@ -31,7 +31,7 @@ #include #endif -#define BACKEND_VER "20200524" +#define BACKEND_VER "20200525" /* * defines used by comp_cal_str in rig.c From 732992830a5d8c9d4516ad66ec6581869c2ce666 Mon Sep 17 00:00:00 2001 From: Michael Black W9MDB Date: Mon, 25 May 2020 14:35:49 -0500 Subject: [PATCH 11/25] Add debug for RTS PTT --- src/rig.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/rig.c b/src/rig.c index 5adad7484..51835e1f7 100644 --- a/src/rig.c +++ b/src/rig.c @@ -2076,6 +2076,7 @@ int HAMLIB_API rig_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt) case RIG_PTT_SERIAL_RTS: + rig_debug(RIG_DEBUG_ERR, "%s: PTT RTS\n", __func__); /* when the PTT port is not the control port we want to free the port when PTT is reset and seize the port when PTT is set, this allows limited sharing of the PTT port between @@ -2084,6 +2085,7 @@ int HAMLIB_API rig_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt) && rs->pttport.fd < 0 && RIG_PTT_OFF != ptt) { + rig_debug(RIG_DEBUG_ERR, "%s: PTT RTS debug#1\n", __func__); rs->pttport.fd = ser_open(&rs->pttport); @@ -2103,10 +2105,12 @@ int HAMLIB_API rig_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt) if (RIG_OK != retcode) { + rig_debug(RIG_DEBUG_ERR, "%s: ser_set_dtr retcode=%d\n", __func__, retcode); return retcode; } } + rig_debug(RIG_DEBUG_ERR, "%s: PTT RTS debug#2\n", __func__); retcode = ser_set_rts(&rig->state.pttport, ptt != RIG_PTT_OFF); if (strcmp(rs->pttport.pathname, rs->rigport.pathname) @@ -2143,6 +2147,7 @@ int HAMLIB_API rig_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt) rig->state.cache.ptt = ptt; elapsed_ms(&rig->state.cache.time_ptt, ELAPSED_SET); + if (retcode != RIG_OK) rig_debug(RIG_DEBUG_ERR, "%s: return code=%d\n", __func__, retcode); return retcode; } From 72066a4ebe0ccebceb5e5605f8d2c66348dd99b4 Mon Sep 17 00:00:00 2001 From: Michael Black W9MDB Date: Mon, 25 May 2020 15:31:58 -0500 Subject: [PATCH 12/25] Add debug to serial.c --- src/rig.c | 1 + src/serial.c | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/rig.c b/src/rig.c index 51835e1f7..304b39d19 100644 --- a/src/rig.c +++ b/src/rig.c @@ -2117,6 +2117,7 @@ int HAMLIB_API rig_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt) && ptt == RIG_PTT_OFF) { + rig_debug(RIG_DEBUG_ERR, "%s: PTT RTS debug#3\n", __func__); /* free the port */ ser_close(&rs->pttport); } diff --git a/src/serial.c b/src/serial.c index 358320448..63625a485 100644 --- a/src/serial.c +++ b/src/serial.c @@ -808,10 +808,13 @@ int HAMLIB_API ser_set_rts(hamlib_port_t *p, int state) } #if defined(TIOCMBIS) && defined(TIOCMBIC) + rc = IOCTL(p->fd, TIOCMGET, &y); + rig_debug(RIG_DEBUG_TRACE,"%s: IOCTL#1 got y=%d\n", __func__, y); rc = IOCTL(p->fd, state ? TIOCMBIS : TIOCMBIC, &y); + rig_debug(RIG_DEBUG_TRACE,"%s: IOCTL#1 after set y=%d\n", __func__, y); #else rc = IOCTL(p->fd, TIOCMGET, &y); - + rig_debug(RIG_DEBUG_TRACE,"%s: IOCTL#2 got y=%d\n", __func__, y); if (rc >= 0) { if (state) @@ -823,7 +826,10 @@ int HAMLIB_API ser_set_rts(hamlib_port_t *p, int state) y &= ~TIOCM_RTS; } + rig_debug(RIG_DEBUG_TRACE,"%s: IOCTL#2 set y=%d\n", __func__, y); rc = IOCTL(p->fd, TIOCMSET, &y); + rc = IOCTL(p->fd, TIOCMGET, &y); + rig_debug(RIG_DEBUG_TRACE,"%s: IOCTL#2 after set y=%d\n", __func__, y); } #endif From 1a836d4d7c5286ceb59c15e886148a44b9e9263a Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Tue, 26 May 2020 13:02:34 +0100 Subject: [PATCH 13/25] Repair a regression with the dummy get PTT functionality --- dummy/dummy.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/dummy/dummy.c b/dummy/dummy.c index b42ebef33..45a5463ce 100644 --- a/dummy/dummy.c +++ b/dummy/dummy.c @@ -535,6 +535,10 @@ static int dummy_get_ptt(RIG *rig, vfo_t vfo, ptt_t *ptt) *ptt = status ? RIG_PTT_ON : RIG_PTT_OFF; } + else + { + *ptt = RIG_PTT_OFF; + } break; @@ -545,6 +549,10 @@ static int dummy_get_ptt(RIG *rig, vfo_t vfo, ptt_t *ptt) *ptt = status ? RIG_PTT_ON : RIG_PTT_OFF; } + else + { + *ptt = RIG_PTT_OFF; + } break; From 5f8897ee201acf092c0c9051f37e9787688829ed Mon Sep 17 00:00:00 2001 From: Michael Black W9MDB Date: Tue, 26 May 2020 09:44:13 -0500 Subject: [PATCH 14/25] FT-1200 does not have TARGETABLE_MODE --- rigs/yaesu/ft1200.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rigs/yaesu/ft1200.c b/rigs/yaesu/ft1200.c index cac526271..68faac7e5 100644 --- a/rigs/yaesu/ft1200.c +++ b/rigs/yaesu/ft1200.c @@ -87,7 +87,7 @@ const struct rig_caps ft1200_caps = .max_xit = Hz(9999), .max_ifshift = Hz(1000), .vfo_ops = FT1200_VFO_OPS, - .targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE, + .targetable_vfo = RIG_TARGETABLE_FREQ, .transceive = RIG_TRN_OFF, /* May enable later as the 1200 has an Auto Info command */ .bank_qty = 0, .chan_desc_sz = 0, From b41e5468a92c14f4434c9c5325d2cd5096899199 Mon Sep 17 00:00:00 2001 From: Michael Black W9MDB Date: Tue, 26 May 2020 11:42:31 -0500 Subject: [PATCH 15/25] FT-5000 does have TARGETABLE_MODE --- rigs/yaesu/ft5000.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rigs/yaesu/ft5000.c b/rigs/yaesu/ft5000.c index 0e43e8ea0..7545a5d73 100644 --- a/rigs/yaesu/ft5000.c +++ b/rigs/yaesu/ft5000.c @@ -421,7 +421,7 @@ const struct rig_caps ftdx101d_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, .transceive = RIG_TRN_OFF, /* May enable later as the 5000 has an Auto Info command */ .bank_qty = 0, .chan_desc_sz = 0, From e72ae661d721919903e657c209ea2d48b91e48f6 Mon Sep 17 00:00:00 2001 From: Michael Black W9MDB Date: Tue, 26 May 2020 11:42:52 -0500 Subject: [PATCH 16/25] Update newcat.h version --- rigs/yaesu/newcat.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rigs/yaesu/newcat.h b/rigs/yaesu/newcat.h index 9695a1055..7a034067b 100644 --- a/rigs/yaesu/newcat.h +++ b/rigs/yaesu/newcat.h @@ -50,7 +50,7 @@ typedef char ncboolean; /* shared function version */ -#define NEWCAT_VER "20200511" +#define NEWCAT_VER "20200526" /* Hopefully large enough for future use, 128 chars plus '\0' */ #define NEWCAT_DATA_LEN 129 From 1179641ca5abb98c7fe3752b4ea162421f675415 Mon Sep 17 00:00:00 2001 From: Michael Black W9MDB Date: Tue, 26 May 2020 11:53:47 -0500 Subject: [PATCH 17/25] Rewrite of TARGETABLE_MODE operations for Yaeus rigs Should fix the FT-DX101D operations Should also fix several functions for the other Yaesu VFO mode capable rigs Added a spreadsheet to keep track of capabilities of these rigs https://github.com/Hamlib/Hamlib/issues/260 --- rigs/yaesu/YaesuTargetableVFO.xlsx | Bin 0 -> 10622 bytes rigs/yaesu/newcat.c | 141 +++++++++++------------------ 2 files changed, 54 insertions(+), 87 deletions(-) create mode 100755 rigs/yaesu/YaesuTargetableVFO.xlsx diff --git a/rigs/yaesu/YaesuTargetableVFO.xlsx b/rigs/yaesu/YaesuTargetableVFO.xlsx new file mode 100755 index 0000000000000000000000000000000000000000..4c33caabc3d528a293608e323fd7a3d29c2da22e GIT binary patch literal 10622 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 Hpa1?3PXs_; literal 0 HcmV?d00001 diff --git a/rigs/yaesu/newcat.c b/rigs/yaesu/newcat.c index e87cc8279..6f0a0bd8a 100644 --- a/rigs/yaesu/newcat.c +++ b/rigs/yaesu/newcat.c @@ -11,10 +11,6 @@ * via serial interface to any newer Yaesu radio using the * "new" text CAT interface. * - * Models this code aims to support are FTDX-9000*, FT-2000, FT-DX5000, - * FT-950, FT-450 and FT-1200. Much testing remains. -N0NB - * - * * 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 @@ -97,6 +93,18 @@ typedef struct _yaesu_newcat_commands ncboolean ft101; } yaesu_newcat_commands_t; +// Easy reference to rig model -- it is set in newcat_valid_command +static ncboolean is_ft450; +static ncboolean is_ft891; +static ncboolean is_ft950; +static ncboolean is_ft991; +static ncboolean is_ft2000; +static ncboolean is_ft9000; +static ncboolean is_ft5000; +static ncboolean is_ft1200; +static ncboolean is_ft3000; +static ncboolean is_ft101; + /* * Even thought this table does make a handy reference, it could be depreciated as it is not really needed. * All of the CAT commands used in the newcat interface are available on the FT-950, FT-2000, FT-5000, and FT-9000. @@ -115,7 +123,7 @@ typedef struct _yaesu_newcat_commands */ static const yaesu_newcat_commands_t valid_commands[] = { - /* Command FT-450 FT-950 FT-891 FT-991 FT-2000 FT-9000 FT-5000 FT-1200 FT-3000 FTDX101D */ + /* Command FT-450 FT-950 FT-891 FT-991 FT-2000 FT-9000 FT-5000 FT-1200 FT-3000 FTDX101D */ {"AB", FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, {"AC", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, {"AG", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, @@ -176,7 +184,7 @@ static const yaesu_newcat_commands_t valid_commands[] = {"MT", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE }, {"MW", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, {"MX", FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"NA", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"NA", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, TRUE, TRUE, TRUE }, {"NB", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, {"NL", FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, {"NR", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, @@ -742,9 +750,7 @@ int newcat_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) /* FT9000 RIG_TARGETABLE_MODE (mode and width) */ /* FT2000 mode only */ - if (newcat_is_rig(rig, RIG_MODEL_FT9000) || - newcat_is_rig(rig, RIG_MODEL_FT2000) || - newcat_is_rig(rig, RIG_MODEL_FTDX5000)) + if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE) { priv->cmd_str[2] = (RIG_VFO_B == vfo) ? '1' : '0'; } @@ -802,9 +808,7 @@ int newcat_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width) return err; } - if (newcat_is_rig(rig, RIG_MODEL_FT9000) || - newcat_is_rig(rig, RIG_MODEL_FT2000) || - newcat_is_rig(rig, RIG_MODEL_FTDX5000)) + if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE) { main_sub_vfo = RIG_VFO_B == vfo ? '1' : '0'; } @@ -1159,9 +1163,7 @@ int newcat_set_rptr_shift(RIG *rig, vfo_t vfo, rptr_shift_t rptr_shift) return err; } - if (newcat_is_rig(rig, RIG_MODEL_FT9000) || - newcat_is_rig(rig, RIG_MODEL_FT2000) || - newcat_is_rig(rig, RIG_MODEL_FTDX5000)) + if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE) { main_sub_vfo = RIG_VFO_B == vfo ? '1' : '0'; } @@ -1214,9 +1216,7 @@ int newcat_get_rptr_shift(RIG *rig, vfo_t vfo, rptr_shift_t *rptr_shift) return err; } - if (newcat_is_rig(rig, RIG_MODEL_FT9000) || - newcat_is_rig(rig, RIG_MODEL_FT2000) || - newcat_is_rig(rig, RIG_MODEL_FTDX5000)) + if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE) { main_sub_vfo = (RIG_VFO_B == vfo) ? '1' : '0'; } @@ -1882,9 +1882,7 @@ int newcat_set_ctcss_tone(RIG *rig, vfo_t vfo, tone_t tone) return err; } - if (newcat_is_rig(rig, RIG_MODEL_FT9000) || - newcat_is_rig(rig, RIG_MODEL_FT2000) || - newcat_is_rig(rig, RIG_MODEL_FTDX5000)) + if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE) { main_sub_vfo = (RIG_VFO_B == vfo) ? '1' : '0'; } @@ -1943,9 +1941,7 @@ int newcat_get_ctcss_tone(RIG *rig, vfo_t vfo, tone_t *tone) return err; } - if (newcat_is_rig(rig, RIG_MODEL_FT9000) || - newcat_is_rig(rig, RIG_MODEL_FT2000) || - newcat_is_rig(rig, RIG_MODEL_FTDX5000)) + if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE) { main_sub_vfo = (RIG_VFO_B == vfo) ? '1' : '0'; } @@ -2340,7 +2336,7 @@ int newcat_set_ant(RIG *rig, vfo_t vfo, ant_t ant, value_t option) return err; } - if (newcat_is_rig(rig, RIG_MODEL_FT9000)) + if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE) { main_sub_vfo = RIG_VFO_B == vfo ? '1' : '0'; } @@ -2432,7 +2428,7 @@ int newcat_get_ant(RIG *rig, vfo_t vfo, ant_t dummy, value_t *option, return err; } - if (newcat_is_rig(rig, RIG_MODEL_FT9000)) + if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE) { main_sub_vfo = (RIG_VFO_B == vfo) ? '1' : '0'; } @@ -2499,10 +2495,7 @@ int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) return err; } - /* Start with both but mostly FT9000 */ - if (newcat_is_rig(rig, RIG_MODEL_FT9000) || - newcat_is_rig(rig, RIG_MODEL_FT2000) || - newcat_is_rig(rig, RIG_MODEL_FTDX5000)) + if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE) { main_sub_vfo = (RIG_VFO_B == vfo) ? '1' : '0'; } @@ -2585,7 +2578,7 @@ int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) snprintf(priv->cmd_str, sizeof(priv->cmd_str), "IS0%+.4d%c", val.i, cat_term); /* problem with %+04d */ - if (newcat_is_rig(rig, RIG_MODEL_FT9000)) + if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE && !is_ft2000) { priv->cmd_str[2] = main_sub_vfo; } @@ -2692,7 +2685,7 @@ int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) { snprintf(priv->cmd_str, sizeof(priv->cmd_str), "PA00%c", cat_term); - if (newcat_is_rig(rig, RIG_MODEL_FT9000)) + if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE && !is_ft2000) { priv->cmd_str[2] = main_sub_vfo; } @@ -2711,7 +2704,7 @@ int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) if (strlen(priv->cmd_str) != 0) { - if (newcat_is_rig(rig, RIG_MODEL_FT9000)) + if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE) { priv->cmd_str[2] = main_sub_vfo; } @@ -2731,7 +2724,7 @@ int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) { snprintf(priv->cmd_str, sizeof(priv->cmd_str), "RA00%c", cat_term); - if (newcat_is_rig(rig, RIG_MODEL_FT9000)) + if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE && !is_ft2000) { priv->cmd_str[2] = main_sub_vfo; } @@ -2750,7 +2743,7 @@ int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) if (strlen(priv->cmd_str) != 0) { - if (newcat_is_rig(rig, RIG_MODEL_FT9000)) + if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE) { priv->cmd_str[2] = main_sub_vfo; } @@ -2809,7 +2802,7 @@ int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) snprintf(priv->cmd_str, sizeof(priv->cmd_str), "RL0%02d%c", fpf, cat_term); - if (newcat_is_rig(rig, RIG_MODEL_FT9000)) + if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE && !is_ft2000) { priv->cmd_str[2] = main_sub_vfo; } @@ -2859,9 +2852,7 @@ int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) val.i = 3000; } } - else if (newcat_is_rig(rig, RIG_MODEL_FT2000) || - newcat_is_rig(rig, RIG_MODEL_FT9000) || - newcat_is_rig(rig, RIG_MODEL_FTDX5000)) + else if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE) { if (val.i < 1) { @@ -2910,9 +2901,7 @@ int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) val.i = 3000; } } - else if (newcat_is_rig(rig, RIG_MODEL_FT2000) || - newcat_is_rig(rig, RIG_MODEL_FT9000) || - newcat_is_rig(rig, RIG_MODEL_FTDX5000)) + else if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE) { if (val.i < 0) { @@ -2988,10 +2977,14 @@ int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) snprintf(priv->cmd_str, sizeof(priv->cmd_str), "BP01%03d%c", val.i, cat_term); - if (newcat_is_rig(rig, RIG_MODEL_FT9000)) /* The old CAT Man. shows VFO */ + if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE && !is_ft9000) { priv->cmd_str[2] = main_sub_vfo; } + else if (is_ft9000) // different BP command format + { + snprintf(priv->cmd_str, sizeof(priv->cmd_str), "BP%03d%c", val.i, cat_term); + } break; @@ -3023,9 +3016,7 @@ int newcat_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) return err; } - if (newcat_is_rig(rig, RIG_MODEL_FT9000) || - newcat_is_rig(rig, RIG_MODEL_FT2000) || - newcat_is_rig(rig, RIG_MODEL_FTDX5000)) + if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE) { main_sub_vfo = (RIG_VFO_B == vfo) ? '1' : '0'; } @@ -3049,7 +3040,7 @@ int newcat_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) snprintf(priv->cmd_str, sizeof(priv->cmd_str), "PA0%c", cat_term); - if (newcat_is_rig(rig, RIG_MODEL_FT9000)) + if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE) { priv->cmd_str[2] = main_sub_vfo; } @@ -3084,7 +3075,7 @@ int newcat_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) snprintf(priv->cmd_str, sizeof(priv->cmd_str), "IS0%c", cat_term); - if (newcat_is_rig(rig, RIG_MODEL_FT9000)) + if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE) { priv->cmd_str[2] = main_sub_vfo; } @@ -3135,7 +3126,7 @@ int newcat_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) snprintf(priv->cmd_str, sizeof(priv->cmd_str), "RA0%c", cat_term); - if (newcat_is_rig(rig, RIG_MODEL_FT9000)) + if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE) { priv->cmd_str[2] = main_sub_vfo; } @@ -3169,7 +3160,7 @@ int newcat_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) snprintf(priv->cmd_str, sizeof(priv->cmd_str), "RL0%c", cat_term); - if (newcat_is_rig(rig, RIG_MODEL_FT9000)) + if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE) { priv->cmd_str[2] = main_sub_vfo; } @@ -3236,7 +3227,7 @@ int newcat_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) return -RIG_ENAVAIL; } - if (newcat_is_rig(rig, RIG_MODEL_FT9000)) + if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE) { snprintf(priv->cmd_str, sizeof(priv->cmd_str), "RM09%c", cat_term); } @@ -3253,7 +3244,7 @@ int newcat_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) return -RIG_ENAVAIL; } - if (newcat_is_rig(rig, RIG_MODEL_FT9000)) + if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE) { snprintf(priv->cmd_str, sizeof(priv->cmd_str), "RM07%c", cat_term); } @@ -3288,7 +3279,7 @@ int newcat_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) snprintf(priv->cmd_str, sizeof(priv->cmd_str), "BP01%c", cat_term); - if (newcat_is_rig(rig, RIG_MODEL_FT9000)) + if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE) { priv->cmd_str[2] = main_sub_vfo; } @@ -3503,9 +3494,7 @@ int newcat_set_func(RIG *rig, vfo_t vfo, setting_t func, int status) return err; } - if (newcat_is_rig(rig, RIG_MODEL_FT9000) || - newcat_is_rig(rig, RIG_MODEL_FT2000) || - newcat_is_rig(rig, RIG_MODEL_FTDX5000)) + if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE) { main_sub_vfo = (RIG_VFO_B == vfo) ? '1' : '0'; } @@ -3521,7 +3510,7 @@ int newcat_set_func(RIG *rig, vfo_t vfo, setting_t func, int status) snprintf(priv->cmd_str, sizeof(priv->cmd_str), "BC0%d%c", status ? 1 : 0, cat_term); - if (newcat_is_rig(rig, RIG_MODEL_FT9000)) + if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE && !is_ft2000) { priv->cmd_str[2] = main_sub_vfo; } @@ -3537,7 +3526,7 @@ int newcat_set_func(RIG *rig, vfo_t vfo, setting_t func, int status) snprintf(priv->cmd_str, sizeof(priv->cmd_str), "BP00%03d%c", status ? 1 : 0, cat_term); - if (newcat_is_rig(rig, RIG_MODEL_FT9000)) + if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE && !is_ft2000) { priv->cmd_str[2] = main_sub_vfo; } @@ -3676,7 +3665,7 @@ int newcat_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status) snprintf(priv->cmd_str, sizeof(priv->cmd_str), "BC0%c", cat_term); - if (newcat_is_rig(rig, RIG_MODEL_FT9000)) + if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE) { priv->cmd_str[2] = main_sub_vfo; } @@ -3691,7 +3680,7 @@ int newcat_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status) snprintf(priv->cmd_str, sizeof(priv->cmd_str), "BP00%c", cat_term); - if (newcat_is_rig(rig, RIG_MODEL_FT9000)) + if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE) { priv->cmd_str[2] = main_sub_vfo; } @@ -4076,9 +4065,7 @@ int newcat_vfo_op(RIG *rig, vfo_t vfo, vfo_op_t op) return err; } - if (newcat_is_rig(rig, RIG_MODEL_FT9000) || - newcat_is_rig(rig, RIG_MODEL_FT2000) || - newcat_is_rig(rig, RIG_MODEL_FTDX5000)) + if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE) { main_sub_vfo = (RIG_VFO_B == vfo) ? '1' : '0'; } @@ -4592,16 +4579,6 @@ const char *newcat_get_info(RIG *rig) ncboolean newcat_valid_command(RIG *rig, char const *const command) { const struct rig_caps *caps; - ncboolean is_ft450; - ncboolean is_ft891; - ncboolean is_ft950; - ncboolean is_ft991; - ncboolean is_ft2000; - ncboolean is_ft9000; - ncboolean is_ft5000; - ncboolean is_ft1200; - ncboolean is_ft3000; - ncboolean is_ft101; int search_high; int search_low; @@ -4962,10 +4939,7 @@ int newcat_set_narrow(RIG *rig, vfo_t vfo, ncboolean narrow) return err; } - if (newcat_is_rig(rig, RIG_MODEL_FT9000) || - newcat_is_rig(rig, RIG_MODEL_FT2000) || - newcat_is_rig(rig, RIG_MODEL_FTDX5000) || - newcat_is_rig(rig, RIG_MODEL_FTDX3000)) + if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE) { main_sub_vfo = (RIG_VFO_B == vfo) ? '1' : '0'; } @@ -5010,10 +4984,7 @@ int newcat_get_narrow(RIG *rig, vfo_t vfo, ncboolean *narrow) return err; } - if (newcat_is_rig(rig, RIG_MODEL_FT9000) || - newcat_is_rig(rig, RIG_MODEL_FT2000) || - newcat_is_rig(rig, RIG_MODEL_FTDX5000) || - newcat_is_rig(rig, RIG_MODEL_FTDX3000)) + if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE) { main_sub_vfo = (RIG_VFO_B == vfo) ? '1' : '0'; } @@ -5066,9 +5037,7 @@ int newcat_set_rx_bandwidth(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) return err; } - if (newcat_is_rig(rig, RIG_MODEL_FT9000) || - newcat_is_rig(rig, RIG_MODEL_FTDX5000) || - newcat_is_rig(rig, RIG_MODEL_FTDX3000)) + if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE && !is_ft2000) { main_sub_vfo = (RIG_VFO_B == vfo) ? '1' : '0'; } @@ -5731,9 +5700,7 @@ int newcat_get_rx_bandwidth(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t *width) return err; } - if (newcat_is_rig(rig, RIG_MODEL_FT9000) || - newcat_is_rig(rig, RIG_MODEL_FTDX5000) || - newcat_is_rig(rig, RIG_MODEL_FTDX3000)) + if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE) { main_sub_vfo = (RIG_VFO_B == vfo) ? '1' : '0'; } From 86434084abadf33344022709eeb72c25e215afde Mon Sep 17 00:00:00 2001 From: Michael Black W9MDB Date: Tue, 26 May 2020 11:59:50 -0500 Subject: [PATCH 18/25] Change vfo_mode to vfo_opt to distinguish it from rig mode --- tests/rigctl.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/tests/rigctl.c b/tests/rigctl.c index fedb0405b..fc0b543b0 100644 --- a/tests/rigctl.c +++ b/tests/rigctl.c @@ -149,7 +149,7 @@ int main(int argc, char *argv[]) char conf_parms[MAXCONFLEN] = ""; int interactive; /* if no cmd on command line, switch to interactive */ int prompt = 1; /* Print prompt in rigctl */ - int vfo_mode = 0; /* vfo_mode = 0 means target VFO is 'currVFO' */ + int vfo_opt = 0; /* vfo_opt = 0 means target VFO is 'currVFO' */ char send_cmd_term = '\r'; /* send_cmd termination char */ int ext_resp = 0; char resp_sep = '\n'; @@ -380,7 +380,7 @@ int main(int argc, char *argv[]) break; case 'o': - vfo_mode++; + vfo_opt = 1; break; case 'n': @@ -448,6 +448,7 @@ int main(int argc, char *argv[]) } my_rig = rig_init(my_model); + my_rig->state.vfo_opt = 1; if (!my_rig) { @@ -555,21 +556,21 @@ int main(int argc, char *argv[]) if (my_rig->caps->rig_model == RIG_MODEL_NETRIGCTL) { /* We automatically detect if we need to be in vfo mode or not */ - int rigctld_vfo_mode = netrigctl_get_vfo_mode(my_rig); + int rigctld_vfo_opt = netrigctl_get_vfo_mode(my_rig); - if (rigctld_vfo_mode && !vfo_mode) + if (rigctld_vfo_opt && !vfo_opt) { fprintf(stderr, "Looks like rigctld is using vfo mode so we're switching to vfo mode\n"); - vfo_mode = rigctld_vfo_mode; + vfo_opt = rigctld_vfo_opt; } - else if (!rigctld_vfo_mode && vfo_mode) + else if (!rigctld_vfo_opt && vfo_opt) { fprintf(stderr, "Looks like rigctld is not using vfo mode so we're switching vfo mode off\n"); - vfo_mode = rigctld_vfo_mode; + vfo_opt = rigctld_vfo_opt; } - else if (vfo_mode && my_rig->caps->rig_model != RIG_MODEL_NETRIGCTL) + else if (vfo_opt && my_rig->caps->rig_model != RIG_MODEL_NETRIGCTL) { fprintf(stderr, "vfo mode doesn't make sense for any rig other than rig#2\n"); fprintf(stderr, "But we'll let you run this way if you want\n"); @@ -632,7 +633,7 @@ int main(int argc, char *argv[]) do { retcode = rigctl_parse(my_rig, stdin, stdout, argv, argc, NULL, - interactive, prompt, &vfo_mode, send_cmd_term, + interactive, prompt, &vfo_opt, send_cmd_term, &ext_resp, &resp_sep); if (retcode == 2) From b5c53b36658ee9edf0dc8abd10e9e6ad958856d8 Mon Sep 17 00:00:00 2001 From: Michael Black W9MDB Date: Tue, 26 May 2020 12:01:44 -0500 Subject: [PATCH 19/25] Change vfo_mode to vfo_opt to distinguish it from rig mode --- tests/rigctl_parse.c | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/tests/rigctl_parse.c b/tests/rigctl_parse.c index 8f0195b00..ab892e27d 100644 --- a/tests/rigctl_parse.c +++ b/tests/rigctl_parse.c @@ -144,7 +144,7 @@ struct test_table FILE *fin, \ int interactive, \ int prompt, \ - int vfo_mode, \ + int vfo_opt, \ char send_cmd_term, \ int ext_resp, \ char resp_sep, \ @@ -613,7 +613,7 @@ static int next_word(char *buffer, int argc, char *argv[], int newline) int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc, sync_cb_t sync_cb, - int interactive, int prompt, int *vfo_mode, char send_cmd_term, + int interactive, int prompt, int *vfo_opt, char send_cmd_term, int *ext_resp_ptr, char *resp_sep_ptr) { int retcode; /* generic return code from functions */ @@ -651,8 +651,10 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc, return -1; } + if (cmd != 0xa) { rig_debug(RIG_DEBUG_TRACE, "%s: cmd=%c(%02x)\n", __func__, isprint(cmd) ? cmd : ' ', cmd); + } /* Extended response protocol requested with leading '+' on command * string--rigctld only! @@ -764,9 +766,11 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc, return 0; } - if (cmd == '(') {rig_debug(RIG_DEBUG_ERR, "%s: vfo_mode on\n", __func__); *vfo_mode = 1; return 0;} + if (cmd == '(') {rig_debug(RIG_DEBUG_ERR, "%s: vfo_opt on\n", __func__); *vfo_opt = 1; return 0;} - if (cmd == ')') {rig_debug(RIG_DEBUG_ERR, "%s: vfo_mode off\n", __func__); *vfo_mode = 0; return 0;} + if (cmd == ')') {rig_debug(RIG_DEBUG_ERR, "%s: vfo_opt off\n", __func__); *vfo_opt = 0; return 0;} + + my_rig->state.vfo_opt = *vfo_opt; if (cmd == 'Q' || cmd == 'q') { @@ -820,7 +824,7 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc, return 0; } - if (!(cmd_entry->flags & ARG_NOVFO) && *vfo_mode) + if (!(cmd_entry->flags & ARG_NOVFO) && *vfo_opt) { if (interactive) { @@ -1222,10 +1226,10 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc, return 0; } - /* If vfo_mode is enabled (-o|--vfo) check if already given + /* If vfo_opt is enabled (-o|--vfo) check if already given * or prompt for it. */ - if (!(cmd_entry->flags & ARG_NOVFO) && *vfo_mode) + if (!(cmd_entry->flags & ARG_NOVFO) && *vfo_opt) { /* Check if VFO was given with command. */ result = strtok(NULL, " "); @@ -1321,7 +1325,7 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc, */ result = strtok(NULL, "\0"); - if (*vfo_mode && result) + if (*vfo_opt && result) { x = 2; parsed_input[x] = result; @@ -1384,7 +1388,7 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc, { result = strtok(NULL, " "); - if (*vfo_mode && result) + if (*vfo_opt && result) { x = 2; parsed_input[x] = result; @@ -1450,7 +1454,7 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc, result = strtok(NULL, " "); - if (*vfo_mode && result) + if (*vfo_opt && result) { x = 3; parsed_input[x] = result; @@ -1516,7 +1520,7 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc, result = strtok(NULL, " "); - if (*vfo_mode && result) + if (*vfo_opt && result) { x = 4; parsed_input[x] = result; @@ -1612,7 +1616,7 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc, char a3[MAXARGSZ + 2]; char vfo_str[MAXARGSZ + 2]; - *vfo_mode == 0 ? vfo_str[0] = '\0' : snprintf(vfo_str, + *vfo_opt == 0 ? vfo_str[0] = '\0' : snprintf(vfo_str, sizeof(vfo_str), " %s", rig_strvfo(vfo)); @@ -1631,13 +1635,13 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc, *resp_sep_ptr); } - rig_debug(RIG_DEBUG_TRACE, "%s: vfo_mode=%d\n", __func__, *vfo_mode); + rig_debug(RIG_DEBUG_TRACE, "%s: vfo_opt=%d\n", __func__, *vfo_opt); retcode = (*cmd_entry->rig_routine)(my_rig, fout, fin, interactive, prompt, - *vfo_mode, + *vfo_opt, send_cmd_term, *ext_resp_ptr, *resp_sep_ptr, @@ -4507,7 +4511,7 @@ declare_proto_rig(chk_vfo) fprintf(fout, "%s: ", cmd->arg1); /* i.e. "Frequency" */ } - fprintf(fout, "%d\n", vfo_mode); + fprintf(fout, "%d\n", rig->state.vfo_opt); return RIG_OK; } From aacc1a43780b1b391248abc7363451dfc72af51c Mon Sep 17 00:00:00 2001 From: Michael Black W9MDB Date: Wed, 27 May 2020 06:37:51 -0500 Subject: [PATCH 20/25] remove sleep from dummy set_ptt --- dummy/dummy.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/dummy/dummy.c b/dummy/dummy.c index 45a5463ce..acab823eb 100644 --- a/dummy/dummy.c +++ b/dummy/dummy.c @@ -77,6 +77,9 @@ struct dummy_priv_data char *magic_conf; int static_data; + + freq_t freq_vfoa; + freq_t freq_vfob; }; /* levels pertain to each VFO */ @@ -382,12 +385,15 @@ static int dummy_set_freq(RIG *rig, vfo_t vfo, freq_t freq) channel_t *curr = priv->curr; char fstr[20]; + if (vfo == RIG_VFO_CURR) vfo = priv->curr_vfo; usleep(CMDSLEEP); sprintf_freq(fstr, freq); rig_debug(RIG_DEBUG_VERBOSE, "%s called: %s %s\n", __func__, rig_strvfo(vfo), fstr); curr->freq = freq; - + if (vfo == RIG_VFO_A) priv->freq_vfoa = freq; + else if (vfo == RIG_VFO_B) priv->freq_vfob = freq; + rig_debug(RIG_DEBUG_TRACE, "%s: freq_vfoa=%.0f, freq_vfob=%.0f\n", __func__, priv->freq_vfoa, priv->freq_vfob); return RIG_OK; } @@ -395,11 +401,13 @@ static int dummy_set_freq(RIG *rig, vfo_t vfo, freq_t freq) static int dummy_get_freq(RIG *rig, vfo_t vfo, freq_t *freq) { struct dummy_priv_data *priv = (struct dummy_priv_data *)rig->state.priv; - channel_t *curr = priv->curr; + if (vfo == RIG_VFO_CURR) vfo = priv->curr_vfo; usleep(CMDSLEEP); rig_debug(RIG_DEBUG_VERBOSE, "%s called: %s\n", __func__, rig_strvfo(vfo)); - *freq = curr->freq; + if (vfo == RIG_VFO_A) *freq = priv->freq_vfoa; + else if (vfo == RIG_VFO_B) *freq = priv->freq_vfob; + rig_debug(RIG_DEBUG_TRACE, "%s: freq=%.0f\n", __func__, *freq); return RIG_OK; } @@ -507,7 +515,6 @@ static int dummy_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt) { struct dummy_priv_data *priv = (struct dummy_priv_data *)rig->state.priv; - usleep(CMDSLEEP); rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); priv->ptt = ptt; @@ -1920,7 +1927,7 @@ struct rig_caps dummy_caps = RIG_MODEL(RIG_MODEL_DUMMY), .model_name = "Dummy", .mfg_name = "Hamlib", - .version = "20200503.0", + .version = "20200527.0", .copyright = "LGPL", .status = RIG_STATUS_STABLE, .rig_type = RIG_TYPE_OTHER, From eb02124761378e907cc1e4ad90c7c4c49ebeae49 Mon Sep 17 00:00:00 2001 From: Nate Bargmann Date: Wed, 27 May 2020 07:04:36 -0500 Subject: [PATCH 21/25] Rename datebuilt.h to hamlibdatetime.h in tests/Makefile.am The name conflict caused 'make dist' to fail. --- tests/Makefile.am | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/Makefile.am b/tests/Makefile.am index 9a0400a25..c99f96cf1 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -6,15 +6,15 @@ BUILT_SOURCES = hamlibdatetime.h -DISTCLEANFILES = rigctl.log rigctl.sum testbcd.log testbcd.sum datebuilt.h +DISTCLEANFILES = rigctl.log rigctl.sum testbcd.log testbcd.sum hamlibdatetime.h bin_PROGRAMS = rigctl rigctld rigmem rigsmtr rigswr rotctl rotctld rigctlcom ampctl ampctld check_PROGRAMS = dumpmem testrig testtrn testbcd testfreq listrigs testloc rig_bench cachetest cachetest2 -RIGCOMMONSRC = rigctl_parse.c rigctl_parse.h dumpcaps.c sprintflst.c sprintflst.h uthash.h datebuilt.h -ROTCOMMONSRC = rotctl_parse.c rotctl_parse.h dumpcaps_rot.c uthash.h datebuilt.h -AMPCOMMONSRC = ampctl_parse.c ampctl_parse.h dumpcaps_amp.c sprintflst.c sprintflst.h uthash.h datebuilt.h +RIGCOMMONSRC = rigctl_parse.c rigctl_parse.h dumpcaps.c sprintflst.c sprintflst.h uthash.h hamlibdatetime.h +ROTCOMMONSRC = rotctl_parse.c rotctl_parse.h dumpcaps_rot.c uthash.h hamlibdatetime.h +AMPCOMMONSRC = ampctl_parse.c ampctl_parse.h dumpcaps_amp.c sprintflst.c sprintflst.h uthash.h hamlibdatetime.h rigctl_SOURCES = rigctl.c $(RIGCOMMONSRC) rigctld_SOURCES = rigctld.c $(RIGCOMMONSRC) From 6c2435e52db408d2c750cb3131b86cce45c1dec6 Mon Sep 17 00:00:00 2001 From: Nate Bargmann Date: Wed, 27 May 2020 07:54:09 -0500 Subject: [PATCH 22/25] Ensure hamlibdatetime.h works with VPATH builds --- tests/Makefile.am | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/Makefile.am b/tests/Makefile.am index c99f96cf1..b6cd7cdba 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -98,8 +98,8 @@ testloc.sh: # If we have a .git directory then we will update the hamlibdate.h file hamlibdatetime.h: FORCE - test ! -x ../.git || echo // This date time is from the last commit to hamlib > hamlibdatetime.h - test ! -x ../.git || echo "#define HAMLIBDATETIME "\"`git log -n 1 | grep Date:|cut -c9-`"\"" >> hamlibdatetime.h + test ! -x $(top_srcdir)/.git || echo // This date time is from the last commit to hamlib > $(builddir)/hamlibdatetime.h + test ! -x $(top_srcdir)/.git || echo "#define HAMLIBDATETIME "\"$$(git --git-dir=$(top_srcdir)/.git log -n 1 | grep Date:|cut -c9-)"\"" >> $(builddir)/hamlibdatetime.h FORCE: ; From ae658c0789680cf6dfb5773fee41d3224b954059 Mon Sep 17 00:00:00 2001 From: Nate Bargmann Date: Wed, 27 May 2020 07:54:41 -0500 Subject: [PATCH 23/25] Remove generated file from repository tests/hamlibdatetime.h is a generated file and its content will change locally so to avoid confusion do not keep an older copy in the repository. --- tests/hamlibdatetime.h | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 tests/hamlibdatetime.h diff --git a/tests/hamlibdatetime.h b/tests/hamlibdatetime.h deleted file mode 100644 index b31d6a142..000000000 --- a/tests/hamlibdatetime.h +++ /dev/null @@ -1,2 +0,0 @@ -// This date time is from the last commit to hamlib -#define HAMLIBDATETIME "Sat May 23 10:39:01 2020 -0500" From 4d385bc937f67221df37dbb1febe529189042751 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Wed, 27 May 2020 11:19:30 +0100 Subject: [PATCH 24/25] Revert "Add debug to serial.c" This reverts commit be439ea394004a7a96b04bd3c22b6ccfc520a57a. Remove debugging code that breaks the intended functionality. How did this change pass even the most basic of tests? --- src/rig.c | 1 - src/serial.c | 8 +------- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/src/rig.c b/src/rig.c index 304b39d19..51835e1f7 100644 --- a/src/rig.c +++ b/src/rig.c @@ -2117,7 +2117,6 @@ int HAMLIB_API rig_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt) && ptt == RIG_PTT_OFF) { - rig_debug(RIG_DEBUG_ERR, "%s: PTT RTS debug#3\n", __func__); /* free the port */ ser_close(&rs->pttport); } diff --git a/src/serial.c b/src/serial.c index 63625a485..358320448 100644 --- a/src/serial.c +++ b/src/serial.c @@ -808,13 +808,10 @@ int HAMLIB_API ser_set_rts(hamlib_port_t *p, int state) } #if defined(TIOCMBIS) && defined(TIOCMBIC) - rc = IOCTL(p->fd, TIOCMGET, &y); - rig_debug(RIG_DEBUG_TRACE,"%s: IOCTL#1 got y=%d\n", __func__, y); rc = IOCTL(p->fd, state ? TIOCMBIS : TIOCMBIC, &y); - rig_debug(RIG_DEBUG_TRACE,"%s: IOCTL#1 after set y=%d\n", __func__, y); #else rc = IOCTL(p->fd, TIOCMGET, &y); - rig_debug(RIG_DEBUG_TRACE,"%s: IOCTL#2 got y=%d\n", __func__, y); + if (rc >= 0) { if (state) @@ -826,10 +823,7 @@ int HAMLIB_API ser_set_rts(hamlib_port_t *p, int state) y &= ~TIOCM_RTS; } - rig_debug(RIG_DEBUG_TRACE,"%s: IOCTL#2 set y=%d\n", __func__, y); rc = IOCTL(p->fd, TIOCMSET, &y); - rc = IOCTL(p->fd, TIOCMGET, &y); - rig_debug(RIG_DEBUG_TRACE,"%s: IOCTL#2 after set y=%d\n", __func__, y); } #endif From 73c93ef93eaae76cc8ce8eb79e231f3599259d1b Mon Sep 17 00:00:00 2001 From: Nate Bargmann Date: Sun, 24 May 2020 12:06:44 -0500 Subject: [PATCH 25/25] Do not link libpython >= 3.8 Per issue https://github.com/Hamlib/Hamlib/issues/253 when building Python binding for version 3.8 or later, set PYTHON_LIBS="". --- configure.ac | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/configure.ac b/configure.ac index a64c0979e..04ee53770 100644 --- a/configure.ac +++ b/configure.ac @@ -544,6 +544,11 @@ dnl Determine whether to install pytest.py or py3test.py to $(docdir)/examples AM_PYTHON_CHECK_VERSION([${PYTHON}], [3.0], [pyver_3="yes"], [pyver_3="no"]) AM_CONDITIONAL([PYVER_3], [test x"${pyver_3}" = x"yes"]) +dnl Determine whether to link libpython as it is unneeded for Python >= 3.8 +AM_PYTHON_CHECK_VERSION([${PYTHON}], [3.8], [pyver_3_8="yes"], [pyver_3_8="no"]) +AS_IF([test x"${pyver_3_8}" = "xyes"],[ + PYTHON_LIBS="" +]) # Tcl binding AC_MSG_CHECKING([Whether to build Tcl bindings])