Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package hamlib for openSUSE:Factory checked 
in at 2022-12-27 11:55:03
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/hamlib (Old)
 and      /work/SRC/openSUSE:Factory/.hamlib.new.1563 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "hamlib"

Tue Dec 27 11:55:03 2022 rev:14 rq:1045466 version:4.5.2

Changes:
--------
--- /work/SRC/openSUSE:Factory/hamlib/hamlib.changes    2022-12-10 
21:18:53.801931299 +0100
+++ /work/SRC/openSUSE:Factory/.hamlib.new.1563/hamlib.changes  2022-12-27 
11:55:14.175372757 +0100
@@ -1,0 +2,19 @@
+Tue Dec 27 08:52:30 UTC 2022 - Wojciech Kazubski <w...@ire.pw.edu.pl>
+
+- Update to version 4.5.2 (2022-12-23)
+  * Fix PowerSDR ability to do commands while powered off
+  * Fix TX-500 operations
+  * Fix FTDX5000 to return to MIC input on closing
+  * Fix rig.c calling rig_get_mode when backend does not have get_mode
+  * Fix kenwood_ts890_get_level
+  * Add Prosistel D elevation CBOX az to fix problem with azimuth
+    control
+  * Fix FT736R gpredict usage by adding cached get_freq
+  * Fix get_powerstat problem with Log4OM/Flex and others
+  * Fix -R option to not need argument
+  * Fix -R option to close rig on last rigctld client disconnect
+  * Add FTDX1200 to rigs that need to ensure PTT is off before
+    changing frequency
+  * Add --disable-parallel configure option for mingw builds on Linux
+
+-------------------------------------------------------------------

Old:
----
  Hamlib-4.5.1.tar.gz

New:
----
  Hamlib-4.5.2.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ hamlib.spec ++++++
--- /var/tmp/diff_new_pack.Tapotq/_old  2022-12-27 11:55:14.683375583 +0100
+++ /var/tmp/diff_new_pack.Tapotq/_new  2022-12-27 11:55:14.691375627 +0100
@@ -18,7 +18,7 @@
 
 %define sover   4
 Name:           hamlib
-Version:        4.5.1
+Version:        4.5.2
 Release:        0
 Summary:        Run-time library to control radio transcievers and receivers
 License:        LGPL-2.1-only

++++++ Hamlib-4.5.1.tar.gz -> Hamlib-4.5.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Hamlib-4.5.1/NEWS new/Hamlib-4.5.2/NEWS
--- old/Hamlib-4.5.1/NEWS       2022-12-08 16:11:46.000000000 +0100
+++ new/Hamlib-4.5.2/NEWS       2022-12-24 00:04:12.000000000 +0100
@@ -14,12 +14,33 @@
 
 Version 4.6
         * 2023-11-XX -- Planned for Nov 2023
+        * Add --set-conf=tuner_control_pathname=hamlib_tuner_control (default)
+          If file exists then it will be called with 0/1 (Off/On) argument
+          with 'U TUNER 0' or 'U TUNER 1"
+          Default path is for current directory
         * Add MDS 4710/9710 rigs
+        * Add FLIR PTU-D48, E46, D100, D300 rotors
+        * Fix FTDX3000 rig split
+
+Version 4.5.2
+        * 2022-12-23
+        * Fix PowerSDR ability to do commands while powered off
+        * Fix TX-500 operations
+        * Fix FTDX5000 to return to MIC input on closing
+        * Fix rig.c calling rig_get_mode when backend does not have get_mode
+        * Fix kenwood_ts890_get_level
+        * Add Prosistel D elevation CBOX az to fix problem with azimuth control
+        * Fix FT736R gpredict usage by adding cached get_freq
+        * Fix get_powerstat problem with Log4OM/Flex and others
+        * Fix -R option to not need argument
+        * Fix -R option to close rig on last rigctld client disconnect
+        * Add FTDX1200 to rigs that need to ensure PTT is off before changing 
frequency
+        * Add --disable-parallel configure option for mingw builds on Linux
 
 Version 4.5.1
         * 2022-12-08
         * FT2000, FTDX3000/D, FT891, FT991, FT950, FTDX5000 now set CAT TOT to 
100ms
-        * Add missing NB2 setting to FT-950, FTDX-1200, FTDX-3000, FTDX-5000, 
FTDX-9000
+        * Add missing NB2 setting to FT-950, FTDX-1200, FT-2000, FTDX-3000, 
FTDX-5000, FTDX-9000
         * Add missing meter reading to TS-890S -- thanks to Geore Baltz N3GB
         * Fix FT736 VFOB freq and mode set
         * Added send_raw to rigctl -- see rigctl man page
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Hamlib-4.5.1/Segfault-award 
new/Hamlib-4.5.2/Segfault-award
--- old/Hamlib-4.5.1/Segfault-award     2022-12-08 16:11:46.000000000 +0100
+++ new/Hamlib-4.5.2/Segfault-award     2022-12-24 00:04:12.000000000 +0100
@@ -7,6 +7,8 @@
 
 Here is the list of the brave fellows:
 
+* Saku Nyland OH1KH v4.5.1, 10/2022, rigctld.c using ptt_type=RTS
+
 * David Kjellquist WB5NHL, v1.1.3, 09/2002, kenwood/ts570.c
        caught on TS570D backend startup.
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Hamlib-4.5.1/configure.ac 
new/Hamlib-4.5.2/configure.ac
--- old/Hamlib-4.5.1/configure.ac       2022-12-08 16:11:46.000000000 +0100
+++ new/Hamlib-4.5.2/configure.ac       2022-12-24 00:04:12.000000000 +0100
@@ -14,7 +14,7 @@
 dnl however, the use of '~' should be fine as apt (others?) will treat
 dnl it as an earlier version than the actual release.  TNX KA6MAL
 dnl PACKAGE_NAME + " " + PACKAGE_VERSION must not exceed 20 chars!
-AC_INIT([Hamlib],[4.5.1],[hamlib-develo...@lists.sourceforge.net],[hamlib],[http://www.hamlib.org])
+AC_INIT([Hamlib],[4.5.2],[hamlib-develo...@lists.sourceforge.net],[hamlib],[http://www.hamlib.org])
 
 AC_CONFIG_SRCDIR([include/hamlib/rig.h])
 AC_CONFIG_MACRO_DIR([macros])
@@ -694,6 +694,15 @@
              [cf_with_winradio="yes" AC_DEFINE([HAVE_WINRADIO],[1],[Define if 
winradio backend is built])])
 AC_MSG_RESULT([$cf_with_winradio])
 
+dnl Parallel port device disable
+AC_MSG_CHECKING([whether to build parallel port devices])
+AC_ARG_ENABLE([parallel],
+             [AS_HELP_STRING([--disable-parallel],
+                             [do not build parallel devices 
@<:@default=yes@:>@])],
+             [cf_with_parallel="no"],
+             [cf_with_parallel="yes" AC_DEFINE([HAVE_PARALLEL],[1],[Define if 
parallel devices are to be built])])
+AC_MSG_RESULT([$cf_with_parallel])
+
 DL_LIBS=""
 
 AS_IF([test x"${cf_with_winradio}" = "xyes"],
@@ -912,6 +921,7 @@
 
     Enable HTML rig feature matrix  ${cf_enable_html_matrix}
     Enable WinRadio                ${cf_with_winradio}
+    Enable Parallel                ${cf_with_parallel}
     Enable USRP                    ${cf_with_usrp}
     Enable USB backends            ${cf_with_libusb}
     Enable shared libs             ${enable_shared}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Hamlib-4.5.1/doc/man1/rigctl.1 
new/Hamlib-4.5.2/doc/man1/rigctl.1
--- old/Hamlib-4.5.1/doc/man1/rigctl.1  2022-12-08 16:11:46.000000000 +0100
+++ new/Hamlib-4.5.2/doc/man1/rigctl.1  2022-12-24 00:04:12.000000000 +0100
@@ -1289,7 +1289,7 @@
 Returns current lock mode status 1=On, 2=Off (only useful when using rigctld)
 .
 .TP
-.BR send_raw " \(aq" \fITerminator\fP "\(aq \(aq" \fIString\fp \(aq
+.BR send_raw " \(aq" \fITerminator\fP "\(aq \(aq" \fIString\fP \(aq
 .EX
 Can send ASCII string or 0xnn values -- there can be no spaces in the command 
string.
 Possible terminator values are CR, LF, ;, ICOM, 0-100 (bytes to read), or -1 
meaning unknown (will timeout on read)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Hamlib-4.5.1/include/hamlib/rig.h 
new/Hamlib-4.5.2/include/hamlib/rig.h
--- old/Hamlib-4.5.1/include/hamlib/rig.h       2022-12-08 16:11:46.000000000 
+0100
+++ new/Hamlib-4.5.2/include/hamlib/rig.h       2022-12-24 00:04:12.000000000 
+0100
@@ -3396,6 +3396,7 @@
 extern HAMLIB_EXPORT(int) rig_get_vfo_info(RIG *rig, vfo_t vfo, freq_t *freq, 
rmode_t *mode, pbwidth_t *width, split_t *split, int *satmode);
 extern HAMLIB_EXPORT(int) rig_get_rig_info(RIG *rig, char *response, int 
max_response_len);
 extern HAMLIB_EXPORT(int) rig_get_cache(RIG *rig, vfo_t vfo, freq_t *freq, int 
* cache_ms_freq, rmode_t *mode, int *cache_ms_mode, pbwidth_t *width, int 
*cache_ms_width);
+extern HAMLIB_EXPORT(int) rig_get_cache_freq(RIG *rig, vfo_t vfo, freq_t 
*freq, int * cache_ms_freq);
 
 extern HAMLIB_EXPORT(int) rig_set_clock(RIG *rig, int year, int month, int 
day, int hour, int min, int sec, double msec, int utc_offset);
 extern HAMLIB_EXPORT(int) rig_get_clock(RIG *rig, int *year, int *month, int 
*day, int *hour, int *min, int *sec, double *msec, int *utc_offset);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Hamlib-4.5.1/include/hamlib/rotlist.h 
new/Hamlib-4.5.2/include/hamlib/rotlist.h
--- old/Hamlib-4.5.1/include/hamlib/rotlist.h   2022-12-08 16:11:46.000000000 
+0100
+++ new/Hamlib-4.5.2/include/hamlib/rotlist.h   2022-12-24 00:04:12.000000000 
+0100
@@ -557,6 +557,7 @@
 #define ROT_MODEL_PROSISTEL_D_AZ ROT_MAKE_MODEL(ROT_PROSISTEL, 1)
 #define ROT_MODEL_PROSISTEL_D_EL ROT_MAKE_MODEL(ROT_PROSISTEL, 2)
 #define ROT_MODEL_PROSISTEL_COMBI_TRACK_AZEL ROT_MAKE_MODEL(ROT_PROSISTEL, 3)
+#define ROT_MODEL_PROSISTEL_D_EL_CBOXAZ ROT_MAKE_MODEL(ROT_PROSISTEL, 4)
 
 
 /**
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Hamlib-4.5.1/rigs/dummy/netrigctl.c 
new/Hamlib-4.5.2/rigs/dummy/netrigctl.c
--- old/Hamlib-4.5.1/rigs/dummy/netrigctl.c     2022-12-08 16:11:46.000000000 
+0100
+++ new/Hamlib-4.5.2/rigs/dummy/netrigctl.c     2022-12-24 00:04:12.000000000 
+0100
@@ -2052,14 +2052,22 @@
 
     ret = netrigctl_transaction(rig, cmd, strlen(cmd), buf);
 
-    if (ret <= 0)
+    if (ret == 0)
     {
-        return (ret < 0) ? ret : -RIG_EPROTO;
+        *status = atoi(buf);
+    }
+    else
+    {
+        // was causing problems with sdr++ since it does not have PS command
+        // a return of 1 should indicate there is no powerstat command 
available
+        // so we fake the ON status
+        // also a problem with Flex 6xxx and Log4OM not working due to lack of 
PS command
+        rig_debug(RIG_DEBUG_VERBOSE,
+                  "%s: PS command failed (ret=%d) so returning 
RIG_POWER_ON\n", __func__, ret);
+        *status = RIG_POWER_ON;
     }
 
-    *status = atoi(buf);
-
-    return RIG_OK;
+    return RIG_OK; // always return RIG_OK
 }
 
 
@@ -2726,7 +2734,7 @@
     RIG_MODEL(RIG_MODEL_NETRIGCTL),
     .model_name =     "NET rigctl",
     .mfg_name =       "Hamlib",
-    .version =        "20221201.0",
+    .version =        "20221214.0",
     .copyright =      "LGPL",
     .status =         RIG_STATUS_STABLE,
     .rig_type =       RIG_TYPE_OTHER,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Hamlib-4.5.1/rigs/kenwood/ts890s.c 
new/Hamlib-4.5.2/rigs/kenwood/ts890s.c
--- old/Hamlib-4.5.1/rigs/kenwood/ts890s.c      2022-12-08 16:11:46.000000000 
+0100
+++ new/Hamlib-4.5.2/rigs/kenwood/ts890s.c      2022-12-24 00:04:12.000000000 
+0100
@@ -305,7 +305,7 @@
 
         if (rig->caps->swr_cal.size)
         {
-            val->f = rig_raw2val_float(val->i, &rig->caps->swr_cal);
+            val->f = rig_raw2val_float(levelint, &rig->caps->swr_cal);
         }
         else
         {
@@ -432,7 +432,7 @@
     RIG_MODEL(RIG_MODEL_TS890S),
     .model_name = "TS-890S",
     .mfg_name = "Kenwood",
-    .version = BACKEND_VER ".9",
+    .version = BACKEND_VER ".10",
     .copyright = "LGPL",
     .status = RIG_STATUS_STABLE,
     .rig_type = RIG_TYPE_TRANSCEIVER,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Hamlib-4.5.1/rigs/kenwood/tx500.c 
new/Hamlib-4.5.2/rigs/kenwood/tx500.c
--- old/Hamlib-4.5.1/rigs/kenwood/tx500.c       2022-12-08 16:11:46.000000000 
+0100
+++ new/Hamlib-4.5.2/rigs/kenwood/tx500.c       2022-12-24 00:04:12.000000000 
+0100
@@ -127,15 +127,15 @@
     RIG_MODEL(RIG_MODEL_LAB599_TX500),
     .model_name = "TX-500",
     .mfg_name =  "Lab599",
-    .version =  BACKEND_VER ".1",
+    .version =  BACKEND_VER ".3",
     .copyright =  "LGPL",
     .status =  RIG_STATUS_STABLE,
     .rig_type =  RIG_TYPE_TRANSCEIVER,
     .ptt_type =  RIG_PTT_RIG,
     .dcd_type =  RIG_DCD_RIG,
     .port_type =  RIG_PORT_SERIAL,
-    .serial_rate_min =  1200,
-    .serial_rate_max =  57600,
+    .serial_rate_min =  9600,
+    .serial_rate_max =  9600,
     .serial_data_bits =  8,
     .serial_stop_bits =  1,
     .serial_parity =  RIG_PARITY_NONE,
@@ -318,8 +318,8 @@
     .set_channel = ts2000_set_channel,
     .set_trn =  kenwood_set_trn,
     .get_trn =  kenwood_get_trn,
-    .set_powerstat =  kenwood_set_powerstat,
-    .get_powerstat =  kenwood_get_powerstat,
+    //.set_powerstat =  kenwood_set_powerstat,
+    //.get_powerstat =  kenwood_get_powerstat,
     .get_info =  kenwood_get_info,
     .reset =  kenwood_reset,
     .hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Hamlib-4.5.1/rigs/yaesu/ft736.c 
new/Hamlib-4.5.2/rigs/yaesu/ft736.c
--- old/Hamlib-4.5.1/rigs/yaesu/ft736.c 2022-12-08 16:11:46.000000000 +0100
+++ new/Hamlib-4.5.2/rigs/yaesu/ft736.c 2022-12-24 00:04:12.000000000 +0100
@@ -31,6 +31,7 @@
 #include "misc.h"
 #include "yaesu.h"
 #include "tones.h"
+#include "cache.h"
 
 
 
@@ -58,6 +59,7 @@
 static int ft736_close(RIG *rig);
 
 static int ft736_set_freq(RIG *rig, vfo_t vfo, freq_t freq);
+static int ft736_get_freq(RIG *rig, vfo_t vfo, freq_t *freq); // cached answer
 static int ft736_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width);
 static int ft736_set_split_vfo(RIG *rig, vfo_t vfo, split_t split,
                                vfo_t tx_vfo);
@@ -98,7 +100,7 @@
     RIG_MODEL(RIG_MODEL_FT736R),
     .model_name =         "FT-736R",
     .mfg_name =           "Yaesu",
-    .version =            "20211271.0",
+    .version =            "20221218.0",
     .copyright =          "LGPL",
     .status =             RIG_STATUS_STABLE,
     .rig_type =           RIG_TYPE_TRANSCEIVER,
@@ -195,6 +197,7 @@
     .rig_close =      ft736_close,
 
     .set_freq =           ft736_set_freq,
+    .get_freq =           ft736_get_freq,
     .set_mode =           ft736_set_mode,
     .set_ptt =            ft736_set_ptt,
     .get_dcd =            ft736_get_dcd,
@@ -268,6 +271,7 @@
 {
     unsigned char cmd[YAESU_CMD_LENGTH] = { 0x00, 0x00, 0x00, 0x00, 0x01};
     struct ft736_priv_data *priv = (struct ft736_priv_data *)rig->state.priv;
+    int retval;
 
     // we will assume requesting to set VFOB is split mode
     if (vfo == RIG_VFO_B) { return rig_set_split_freq(rig, vfo, freq); }
@@ -286,10 +290,24 @@
         cmd[0] = (cmd[0] & 0x0f) | 0xc0;
     }
 
-    /* Frequency set */
-    return write_block(&rig->state.rigport, cmd, YAESU_CMD_LENGTH);
+    retval = write_block(&rig->state.rigport, cmd, YAESU_CMD_LENGTH);
+
+    if (retval == RIG_OK) { rig_set_cache_freq(rig, vfo, freq); }
+
+    return retval;
 }
 
+int ft736_get_freq(RIG *rig, vfo_t vfo, freq_t *freq)
+{
+    rig_debug(RIG_DEBUG_VERBOSE, "%s: called\n", __func__);
+
+    if (vfo == RIG_VFO_A || vfo == RIG_VFO_MAIN) { *freq = 
rig->state.cache.freqMainA; }
+    else { rig_get_cache_freq(rig, vfo, freq, NULL); }
+
+    return RIG_OK;
+}
+
+
 
 
 #define MD_LSB  0x00
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Hamlib-4.5.1/rigs/yaesu/newcat.c 
new/Hamlib-4.5.2/rigs/yaesu/newcat.c
--- old/Hamlib-4.5.1/rigs/yaesu/newcat.c        2022-12-08 16:11:46.000000000 
+0100
+++ new/Hamlib-4.5.2/rigs/yaesu/newcat.c        2022-12-24 00:04:12.000000000 
+0100
@@ -604,12 +604,18 @@
         char *cmd = "EX0291;EX029;"; // FT2000/D
 
         if (priv->rig_id == NC_RIGID_FT950 || rig->caps->rig_model == 
RIG_MODEL_FT950) { cmd = "EX0271;EX027;"; }
-        else if (priv->rig_id == NC_RIGID_FT891 || rig->caps->rig_model == 
RIG_MODEL_FT891) { cmd = "EX05071;EX0507;"; }
-        else if (priv->rig_id == NC_RIGID_FT991 || rig->caps->rig_model == 
RIG_MODEL_FT991) { cmd = "EX0321;EX032;"; }
-        else if (priv->rig_id == NC_RIGID_FT991A || rig->caps->rig_model == 
RIG_MODEL_FT991) { cmd = "EX0321;EX032;"; }
-        else if (priv->rig_id == NC_RIGID_FTDX3000 || rig->caps->rig_model == 
RIG_MODEL_FTDX3000) { cmd = "EX0391;EX039;"; }
-        else if (priv->rig_id == NC_RIGID_FTDX3000DM || rig->caps->rig_model 
== RIG_MODEL_FTDX3000) { cmd = "EX0391;EX039;"; }
-        else if (priv->rig_id == NC_RIGID_FTDX5000 || rig->caps->rig_model == 
RIG_MODEL_FTDX5000) { cmd = "EX0331;EX033"; }
+        else if (priv->rig_id == NC_RIGID_FT891
+                 || rig->caps->rig_model == RIG_MODEL_FT891) { cmd = 
"EX05071;EX0507;"; }
+        else if (priv->rig_id == NC_RIGID_FT991
+                 || rig->caps->rig_model == RIG_MODEL_FT991) { cmd = 
"EX0321;EX032;"; }
+        else if (priv->rig_id == NC_RIGID_FT991A
+                 || rig->caps->rig_model == RIG_MODEL_FT991) { cmd = 
"EX0321;EX032;"; }
+        else if (priv->rig_id == NC_RIGID_FTDX3000
+                 || rig->caps->rig_model == RIG_MODEL_FTDX3000) { cmd = 
"EX0391;EX039;"; }
+        else if (priv->rig_id == NC_RIGID_FTDX3000DM
+                 || rig->caps->rig_model == RIG_MODEL_FTDX3000) { cmd = 
"EX0391;EX039;"; }
+        else if (priv->rig_id == NC_RIGID_FTDX5000
+                 || rig->caps->rig_model == RIG_MODEL_FTDX5000) { cmd = 
"EX0331;EX033"; }
 
         SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "%s", cmd);
 
@@ -656,6 +662,14 @@
         priv->poweron = 0;
     }
 
+    if (is_ftdx5000)
+    {
+        // Ensure FT5000 is back to MIC input
+        SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "EX1030;");
+        rig_debug(RIG_DEBUG_TRACE, "%s: cmd_str = %s\n", __func__, 
priv->cmd_str);
+        newcat_set_cmd(rig); // don't care about the return
+    }
+
     RETURNFUNC(RIG_OK);
 }
 
@@ -880,7 +894,7 @@
         if (vfo != rig->state.tx_vfo) { return -RIG_ENTARGET; }
     }
 
-    if (is_ftdx3000 || is_ftdx3000dm || is_ftdx5000)
+    if (is_ftdx3000 || is_ftdx3000dm || is_ftdx5000 || is_ftdx1200)
     {
         // we have a few rigs that can't set freq while PTT_ON
         // so we'll try a few times to see if we just need to wait a bit
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Hamlib-4.5.1/rigs/yaesu/newcat.h 
new/Hamlib-4.5.2/rigs/yaesu/newcat.h
--- old/Hamlib-4.5.1/rigs/yaesu/newcat.h        2022-12-08 16:11:46.000000000 
+0100
+++ new/Hamlib-4.5.2/rigs/yaesu/newcat.h        2022-12-24 00:04:12.000000000 
+0100
@@ -50,7 +50,7 @@
 typedef char ncboolean;
 
 /* shared function version */
-#define NEWCAT_VER "20221204"
+#define NEWCAT_VER "20221223"
 
 /* Hopefully large enough for future use, 128 chars plus '\0' */
 #define NEWCAT_DATA_LEN                 129
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Hamlib-4.5.1/rotators/fodtrack/fodtrack.c 
new/Hamlib-4.5.2/rotators/fodtrack/fodtrack.c
--- old/Hamlib-4.5.1/rotators/fodtrack/fodtrack.c       2022-12-08 
16:11:46.000000000 +0100
+++ new/Hamlib-4.5.2/rotators/fodtrack/fodtrack.c       2022-12-24 
00:04:12.000000000 +0100
@@ -26,9 +26,11 @@
 #include <sys/ioctl.h>
 #endif
 
+#ifdef HAVE_PARALLEL
 #ifdef HAVE_LINUX_PARPORT_H
 #include <linux/parport.h>
 #endif
+#endif
 
 #include "hamlib/rotator.h"
 #include "parallel.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Hamlib-4.5.1/rotators/prosistel/prosistel.c 
new/Hamlib-4.5.2/rotators/prosistel/prosistel.c
--- old/Hamlib-4.5.1/rotators/prosistel/prosistel.c     2022-12-08 
16:11:46.000000000 +0100
+++ new/Hamlib-4.5.2/rotators/prosistel/prosistel.c     2022-12-24 
00:04:12.000000000 +0100
@@ -379,6 +379,15 @@
 };
 
 
+// Elevation rotator with Control box D using azimuth logic
+static const struct prosistel_rot_priv_caps prosistel_rot_el_cboxaz =
+{
+    .angle_multiplier = 1.0f,
+    .stop_angle = 997,
+    .elevation_id = 'A',
+};
+
+
 /*
  * Prosistel rotator capabilities
  */
@@ -486,6 +495,43 @@
     .get_position = prosistel_rot_get_position,
 };
 
+
+// Elevation rotator with Control box D using azimuth logic
+const struct rot_caps prosistel_d_el_cboxaz_rot_caps =
+{
+    ROT_MODEL(ROT_MODEL_PROSISTEL_D_EL_CBOXAZ),
+    .model_name =     "D elevation CBOX az",
+    .mfg_name =       "Prosistel",
+    .version =        "20221215.0",
+    .copyright =      "LGPL",
+    .status =         RIG_STATUS_STABLE,
+    .rot_type =       ROT_TYPE_ELEVATION,
+    .port_type =      RIG_PORT_SERIAL,
+    .serial_rate_min  = 9600,
+    .serial_rate_max  = 9600,
+    .serial_data_bits = 8,
+    .serial_stop_bits = 1,
+    .serial_parity    = RIG_PARITY_NONE,
+    .serial_handshake = RIG_HANDSHAKE_NONE,
+    .write_delay      = 0,
+    .post_write_delay = 0,
+    .timeout          = 3000,
+    .retry            = 3,
+
+    .min_az =     0.0,
+    .max_az =     0.0,
+    .min_el =     0.0,
+    .max_el =     90.0,
+
+    .priv = &prosistel_rot_el_cboxaz,
+
+    .rot_open = prosistel_rot_open,
+    .stop = prosistel_rot_stop,
+    .set_position = prosistel_rot_set_position,
+    .get_position = prosistel_rot_get_position,
+};
+
+
 DECLARE_INITROT_BACKEND(prosistel)
 {
     rig_debug(RIG_DEBUG_VERBOSE, "%s: _init called\n", __func__);
@@ -493,6 +539,7 @@
     rot_register(&prosistel_d_az_rot_caps);
     rot_register(&prosistel_d_el_rot_caps);
     rot_register(&prosistel_combi_track_azel_rot_caps);
+    rot_register(&prosistel_d_el_cboxaz_rot_caps);
 
     return RIG_OK;
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Hamlib-4.5.1/rotators/prosistel/prosistel.h 
new/Hamlib-4.5.2/rotators/prosistel/prosistel.h
--- old/Hamlib-4.5.1/rotators/prosistel/prosistel.h     2022-12-08 
16:11:46.000000000 +0100
+++ new/Hamlib-4.5.2/rotators/prosistel/prosistel.h     2022-12-24 
00:04:12.000000000 +0100
@@ -25,5 +25,6 @@
 extern const struct rot_caps prosistel_d_az_rot_caps;
 extern const struct rot_caps prosistel_d_el_rot_caps;
 extern const struct rot_caps prosistel_combi_track_azel_rot_caps;
+extern const struct rot_caps prosistel_d_el_cboxaz_rot_caps;
 
 #endif /* _ROT_PROSISTEL_H */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Hamlib-4.5.1/simulators/simftdx1200.c 
new/Hamlib-4.5.2/simulators/simftdx1200.c
--- old/Hamlib-4.5.1/simulators/simftdx1200.c   1970-01-01 01:00:00.000000000 
+0100
+++ new/Hamlib-4.5.2/simulators/simftdx1200.c   2022-12-24 00:04:12.000000000 
+0100
@@ -0,0 +1,309 @@
+// can run this using rigctl/rigctld and socat pty devices
+// gcc -o simyaesu simyaesu.c
+#define _XOPEN_SOURCE 600
+#include <stdio.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include <string.h>
+#include <unistd.h>
+#include "../include/hamlib/rig.h"
+
+#define BUFSIZE 256
+
+float freqA = 14074000;
+float freqB = 14074500;
+int vfo = 0;
+int ft = 0;
+int md = 1;
+int vs = 0;
+int tx = 0;
+int ai = 0;
+int sh = 25;
+int na = 0;
+int ex039 = 0;
+
+// ID 0310 == 310, Must drop leading zero
+typedef enum nc_rigid_e
+{
+    NC_RIGID_NONE            = 0,
+    NC_RIGID_FT450           = 241,
+    NC_RIGID_FT450D          = 244,
+    NC_RIGID_FT950           = 310,
+    NC_RIGID_FT891           = 135,
+    NC_RIGID_FT991           = 135,
+    NC_RIGID_FT2000          = 251,
+    NC_RIGID_FT2000D         = 252,
+    NC_RIGID_FTDX1200        = 583,
+    NC_RIGID_FTDX9000D       = 101,
+    NC_RIGID_FTDX9000Contest = 102,
+    NC_RIGID_FTDX9000MP      = 103,
+    NC_RIGID_FTDX5000        = 362,
+    NC_RIGID_FTDX3000        = 460,
+    NC_RIGID_FTDX101D        = 681,
+    NC_RIGID_FTDX101MP       = 682
+} nc_rigid_t;
+
+int
+getmyline(int fd, char *buf)
+{
+    char c;
+    int i = 0;
+    memset(buf, 0, BUFSIZE);
+
+    while (read(fd, &c, 1) > 0)
+    {
+        buf[i++] = c;
+
+        if (c == ';') { return strlen(buf); }
+    }
+
+    return strlen(buf);
+}
+
+#if defined(WIN32) || defined(_WIN32)
+int openPort(char *comport) // doesn't matter for using pts devices
+{
+    int fd;
+    fd = open(comport, O_RDWR);
+
+    if (fd < 0)
+    {
+        perror(comport);
+    }
+
+    return fd;
+}
+
+#else
+int openPort(char *comport) // doesn't matter for using pts devices
+{
+    int fd = posix_openpt(O_RDWR);
+    char *name = ptsname(fd);
+
+    if (name == NULL)
+    {
+        perror("pstname");
+        return -1;
+    }
+
+    printf("name=%s\n", name);
+
+    if (fd == -1 || grantpt(fd) == -1 || unlockpt(fd) == -1)
+    {
+        perror("posix_openpt");
+        return -1;
+    }
+
+    return fd;
+}
+#endif
+
+
+
+int main(int argc, char *argv[])
+{
+    char buf[256];
+    char *pbuf;
+    int n;
+    int fd = openPort(argv[1]);
+
+    while (1)
+    {
+        if (getmyline(fd, buf))
+        {
+            printf("Cmd:%s\n", buf);
+        }
+        else { continue; }
+
+        if (strcmp(buf, "RM5;") == 0)
+        {
+            printf("%s\n", buf);
+            usleep(50 * 1000);
+            pbuf = "RM5100000;";
+            n = write(fd, pbuf, strlen(pbuf));
+            printf("n=%d\n", n);
+
+            if (n <= 0) { perror("RM5"); }
+        }
+
+        if (strcmp(buf, "AN0;") == 0)
+        {
+            printf("%s\n", buf);
+            usleep(50 * 1000);
+            pbuf = "AN030;";
+            n = write(fd, pbuf, strlen(pbuf));
+            printf("n=%d\n", n);
+
+            if (n <= 0) { perror("AN"); }
+        }
+        else if (strcmp(buf, "IF;") == 0)
+        {
+            printf("%s\n", buf);
+            usleep(50 * 1000);
+            pbuf = "IF059014200000+000000700000;";
+            n = write(fd, pbuf, strlen(pbuf));
+            printf("n=%d\n", n);
+
+            if (n <= 0) { perror("IF"); }
+        }
+        else if (strcmp(buf, "ID;") == 0)
+        {
+            printf("%s\n", buf);
+            usleep(50 * 1000);
+            int id = NC_RIGID_FTDX3000;
+            SNPRINTF(buf, sizeof(buf), "ID%03d;", id);
+            n = write(fd, buf, strlen(buf));
+            printf("n=%d\n", n);
+
+            if (n <= 0) { perror("ID"); }
+        }
+        else if (strcmp(buf, "AI;") == 0)
+        {
+            printf("%s\n", buf);
+            usleep(50 * 1000);
+            SNPRINTF(buf, sizeof(buf), "AI0;");
+            n = write(fd, buf, strlen(buf));
+            printf("n=%d\n", n);
+
+            if (n <= 0) { perror("ID"); }
+        }
+
+#if 0
+        else if (strncmp(buf, "AI", 2) == 0)
+        {
+            if (strcmp(buf, "AI;"))
+            {
+                printf("%s\n", buf);
+                usleep(50 * 1000);
+                n = fprintf(fp, "%s", "AI0;");
+                printf("n=%d\n", n);
+
+                if (n <= 0) { perror("AI"); }
+            }
+        }
+
+#endif
+        else if (strcmp(buf, "VS;") == 0)
+        {
+            printf("%s\n", buf);
+            usleep(50 * 1000);
+            pbuf = "VS0;";
+            n = write(fd, pbuf, strlen(pbuf));
+            printf("n=%d\n", n);
+
+            if (n < 0) { perror("VS"); }
+        }
+        else if (strcmp(buf, "EX032;") == 0)
+        {
+            static int ant = 0;
+            ant = (ant + 1) % 3;
+            printf("%s\n", buf);
+            usleep(50 * 1000);
+            SNPRINTF(buf, sizeof(buf), "EX032%1d;", ant);
+            n = write(fd, buf, strlen(buf));
+            printf("n=%d\n", n);
+
+            if (n < 0) { perror("EX032"); }
+        }
+
+        else if (strcmp(buf, "FA;") == 0)
+        {
+            SNPRINTF(buf, sizeof(buf), "FA%08.0f;", freqA);
+            n = write(fd, buf, strlen(buf));
+        }
+        else if (strncmp(buf, "FA", 2) == 0)
+        {
+            sscanf(buf, "FA%f", &freqA);
+        }
+        else if (strcmp(buf, "FB;") == 0)
+        {
+            SNPRINTF(buf, sizeof(buf), "FB%08.0f;", freqB);
+            n = write(fd, buf, strlen(buf));
+        }
+        else if (strncmp(buf, "FB", 2) == 0)
+        {
+            sscanf(buf, "FB%f", &freqB);
+        }
+        else if (strcmp(buf, "VS;") == 0)
+        {
+            SNPRINTF(buf, sizeof(buf), "VS%c;", vfo == 0 ? '0' : '1');
+            n = write(fd, buf, strlen(buf));
+        }
+        else if (strcmp(buf, "FT;") == 0)
+        {
+            SNPRINTF(buf, sizeof(buf), "FT%d;", ft);
+            n = write(fd, buf, strlen(buf));
+        }
+        else if (strcmp(buf, "MD0;") == 0)
+        {
+            SNPRINTF(buf, sizeof(buf), "MD0%d;", md);
+            n = write(fd, buf, strlen(buf));
+        }
+        else if (strcmp(buf, "VS;") == 0)
+        {
+            SNPRINTF(buf, sizeof(buf), "VS%d;", vs);
+            n = write(fd, buf, strlen(buf));
+        }
+        else if (strncmp(buf, "VS", 2) == 0)
+        {
+            sscanf(buf, "VS%d", &vs);
+        }
+        else if (strcmp(buf, "TX;") == 0)
+        {
+            SNPRINTF(buf, sizeof(buf), "TX%d;", tx);
+            n = write(fd, buf, strlen(buf));
+        }
+        else if (strncmp(buf, "TX", 2) == 0)
+        {
+            sscanf(buf, "TX%d", &tx);
+        }
+        else if (strcmp(buf, "AI;") == 0)
+        {
+            SNPRINTF(buf, sizeof(buf), "AI%d;", ai);
+            n = write(fd, buf, strlen(buf));
+        }
+        else if (strncmp(buf, "AI", 2) == 0)
+        {
+            sscanf(buf, "AI%d", &ai);
+        }
+        else if (strcmp(buf, "SH0;") == 0)
+        {
+            SNPRINTF(buf, sizeof(buf), "SH0%d;", sh);
+            n = write(fd, buf, strlen(buf));
+        }
+        else if (strncmp(buf, "SH0", 3) == 0)
+        {
+            sscanf(buf, "SH0%d", &sh);
+        }
+        else if (strcmp(buf, "NA0;") == 0)
+        {
+            SNPRINTF(buf, sizeof(buf), "NA0%d;", na);
+            n = write(fd, buf, strlen(buf));
+        }
+        else if (strncmp(buf, "NA0", 3) == 0)
+        {
+            sscanf(buf, "NA0%d", &na);
+        }
+        else if (strcmp(buf, "EX039;") == 0)
+        {
+            SNPRINTF(buf, sizeof(buf), "EX039%d;", ex039);
+            n = write(fd, buf, strlen(buf));
+        }
+        else if (strncmp(buf, "EX039", 3) == 0)
+        {
+            sscanf(buf, "EX039%d", &ex039);
+        }
+        else if (strcmp(buf,"PS;") == 0)
+        {
+            SNPRINTF(buf, sizeof(buf), "PS1;");
+            n = write(fd, buf, strlen(buf));
+        }
+        else if (strlen(buf) > 0)
+        {
+            fprintf(stderr, "Unknown command: %s\n", buf);
+        }
+
+    }
+
+    return 0;
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Hamlib-4.5.1/simulators/simftdx3000.c 
new/Hamlib-4.5.2/simulators/simftdx3000.c
--- old/Hamlib-4.5.1/simulators/simftdx3000.c   2022-12-08 16:11:46.000000000 
+0100
+++ new/Hamlib-4.5.2/simulators/simftdx3000.c   2022-12-24 00:04:12.000000000 
+0100
@@ -252,6 +252,11 @@
         {
             sscanf(buf, "MD0%d", &md);
         }
+        else if (strcmp(buf, "PS;") == 0)
+        {
+            SNPRINTF(buf, sizeof(buf), "PS1;");
+            n = write(fd, buf, strlen(buf));
+        }
         else if (strcmp(buf, "VS;") == 0)
         {
             SNPRINTF(buf, sizeof(buf), "VS%d;", vs);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Hamlib-4.5.1/src/cache.c new/Hamlib-4.5.2/src/cache.c
--- old/Hamlib-4.5.1/src/cache.c        2022-12-08 16:11:46.000000000 +0100
+++ new/Hamlib-4.5.2/src/cache.c        2022-12-24 00:04:12.000000000 +0100
@@ -442,6 +442,41 @@
     return RIG_OK;
 }
 
+/**
+ * \brief get cached values for a VFO
+ * \param rig           The rig handle
+ * \param vfo           The VFO to get information from
+ * \param freq          The frequency is stored here
+ * \param cache_ms_freq The age of the last frequency update in ms -- NULL if 
you don't want it
+
+ * Use this to query the frequency cache and then determine to actually fetch 
data from
+ * the rig.
+ *
+ * \return RIG_OK if the operation has been successful, otherwise
+ * a negative value if an error occurred (in which case, cause is
+ * set appropriately).
+ *
+ */
+int rig_get_cache_freq(RIG *rig, vfo_t vfo, freq_t *freq, int *cache_ms_freq_p)
+{
+    rmode_t mode;
+    int cache_ms_freq;
+    int cache_ms_mode;
+    pbwidth_t width;
+    int cache_ms_width;
+    int retval;
+    retval = rig_get_cache(rig, vfo, freq, &cache_ms_freq, &mode, 
&cache_ms_mode,
+                           &width, &cache_ms_width);
+
+    if (retval == RIG_OK)
+    {
+        if (cache_ms_freq_p) { *cache_ms_freq_p = cache_ms_freq; }
+    }
+
+    return retval;
+}
+
+
 void rig_cache_show(RIG *rig, const char *func, int line)
 {
     rig_debug(RIG_DEBUG_CACHE,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Hamlib-4.5.1/src/parallel.h 
new/Hamlib-4.5.2/src/parallel.h
--- old/Hamlib-4.5.1/src/parallel.h     2022-12-08 16:11:46.000000000 +0100
+++ new/Hamlib-4.5.2/src/parallel.h     2022-12-24 00:04:12.000000000 +0100
@@ -26,9 +26,11 @@
 #include <hamlib/rig.h>
 #include "iofunc.h"
 
+#ifdef HAVE_PARALLEL
 #ifdef HAVE_LINUX_PARPORT_H
 #  include <linux/parport.h>
 #endif
+#endif
 
 #ifndef PARPORT_CONTROL_STROBE
 #  define PARPORT_CONTROL_STROBE    0x1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Hamlib-4.5.1/src/rig.c new/Hamlib-4.5.2/src/rig.c
--- old/Hamlib-4.5.1/src/rig.c  2022-12-08 16:11:46.000000000 +0100
+++ new/Hamlib-4.5.2/src/rig.c  2022-12-24 00:04:12.000000000 +0100
@@ -1346,14 +1346,18 @@
             rig_debug(RIG_DEBUG_VERBOSE, "%s(%d): Current split=%d, 
tx_vfo=%s\n", __func__,
                       __LINE__, split, rig_strvfo(tx_vfo));
             rmode_t mode;
-            pbwidth_t width;
-            rig_get_mode(rig, RIG_VFO_A, &mode, &width);
+            pbwidth_t width = 2400; // we'll use 2400Hz as default width
 
-            if (split)
+            if (rig->caps->get_mode)
             {
-                rig_debug(RIG_DEBUG_VERBOSE, "xxxsplit=%d\n", split);
-                HAMLIB_TRACE;
-                rig_get_mode(rig, RIG_VFO_B, &mode, &width);
+                rig_get_mode(rig, RIG_VFO_A, &mode, &width);
+
+                if (split)
+                {
+                    rig_debug(RIG_DEBUG_VERBOSE, "xxxsplit=%d\n", split);
+                    HAMLIB_TRACE;
+                    rig_get_mode(rig, RIG_VFO_B, &mode, &width);
+                }
             }
         }
     }
@@ -1516,6 +1520,8 @@
 
     remove_opened_rig(rig);
 
+    // zero split so it will allow it to be set again on open for rigctld
+    rig->state.cache.split = 0;
     rs->comm_state = 0;
     rig_debug(RIG_DEBUG_VERBOSE, "%s(%d): %p rs->comm_state==0?=%d\n", 
__func__,
               __LINE__, &rs->comm_state,
@@ -1802,7 +1808,11 @@
 
             if (retcode != RIG_OK) { RETURNFUNC(retcode); }
 
-            rig_set_cache_freq(rig, vfo, (freq_t)0);
+            // Unidirectional rigs do not reset cache
+            if (rig->caps->rig_model != RIG_MODEL_FT736R)
+            {
+                rig_set_cache_freq(rig, vfo, (freq_t)0);
+            }
 
 #if 0 // this verification seems to be causing bad behavior on some rigs
 
@@ -1893,7 +1903,12 @@
 #endif
            )
         {
-            rig_set_cache_freq(rig, RIG_VFO_ALL, (freq_t)0);
+            // Unidirectional rigs do not reset cache
+            if (rig->caps->rig_model != RIG_MODEL_FT736R)
+            {
+                rig_set_cache_freq(rig, RIG_VFO_ALL, (freq_t)0);
+            }
+
             HAMLIB_TRACE;
             retcode = rig_get_freq(rig, vfo, &freq_new);
 
@@ -2892,8 +2907,9 @@
 
     if (cache_ms < rig->state.cache.timeout_ms)
     {
-        rig_debug(RIG_DEBUG_TRACE, "%s: cache hit age=%dms\n", __func__, 
cache_ms);
         *vfo = rig->state.cache.vfo;
+        rig_debug(RIG_DEBUG_TRACE, "%s: cache hit age=%dms, vfo=%s\n", 
__func__,
+                  cache_ms, rig_strvfo(*vfo));
         ELAPSED2;
         RETURNFUNC(RIG_OK);
     }
@@ -6020,7 +6036,7 @@
     if (rig->caps->get_powerstat == NULL)
     {
         *status = RIG_POWER_ON; // default to power if not available
-        RETURNFUNC(-RIG_ENAVAIL);
+        RETURNFUNC(RIG_OK);
     }
 
     *status = RIG_POWER_OFF; // default now to power off until proven 
otherwise in get_powerstat
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Hamlib-4.5.1/tests/rigctl_parse.c 
new/Hamlib-4.5.2/tests/rigctl_parse.c
--- old/Hamlib-4.5.1/tests/rigctl_parse.c       2022-12-08 16:11:46.000000000 
+0100
+++ new/Hamlib-4.5.2/tests/rigctl_parse.c       2022-12-24 00:04:12.000000000 
+0100
@@ -1752,7 +1752,8 @@
                 && cmd_entry->cmd != '3' // dump_conf
                 && cmd_entry->cmd != 0x8f // dump_state
                 && cmd_entry->cmd != 0xf0 // chk_vfo
-                && cmd_entry->cmd != 0x87) // set_powerstat
+                && cmd_entry->cmd != 0x87 // set_powerstat
+                && my_rig->caps->rig_model != RIG_MODEL_POWERSDR) // some rigs 
can do stuff when powered off
         {
             rig_debug(RIG_DEBUG_WARN,
                       "%s: command %s not allowed when rig is powered off\n", 
__func__,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Hamlib-4.5.1/tests/rigctld.c 
new/Hamlib-4.5.2/tests/rigctld.c
--- old/Hamlib-4.5.1/tests/rigctld.c    2022-12-08 16:11:46.000000000 +0100
+++ new/Hamlib-4.5.2/tests/rigctld.c    2022-12-24 00:04:12.000000000 +0100
@@ -83,7 +83,7 @@
  *      keep up to date SHORT_OPTIONS, usage()'s output and man page. thanks.
  * TODO: add an option to read from a file
  */
-#define SHORT_OPTIONS "m:r:R:p:d:P:D:s:S:c:T:t:C:W:w:x:z:lLuovhVZMA:n:"
+#define SHORT_OPTIONS "m:r:p:d:P:D:s:S:c:T:t:C:W:w:x:z:lLuovhVZMRA:n:"
 static struct option long_options[] =
 {
     {"model",           1, 0, 'm'},
@@ -154,6 +154,8 @@
 char resp_sep = '\n';
 extern int lock_mode;
 extern powerstat_t rig_powerstat;
+static int rigctld_idle =
+    0; // if true then rig will close when no clients are connected
 
 #define MAXCONFLEN 1024
 
@@ -262,8 +264,6 @@
     int twiddle_timeout = 0;
     int twiddle_rit = 0;
     int uplink = 0;
-    int rigctld_idle =
-        0; // if true then rig will close when no clients are connected
     char host[NI_MAXHOST];
     char serv[NI_MAXSERV];
     char rigstartup[1024];
@@ -701,7 +701,9 @@
     {
         my_rig->state.pttport.type.ptt = ptt_type;
         my_rig->state.pttport_deprecated.type.ptt = ptt_type;
-        my_rig->caps->ptt_type = ptt_type;
+        // This causes segfault since backend rig_caps are const
+        // rigctld will use the rig->state version of this for clients
+        //my_rig->caps->ptt_type = ptt_type;
     }
 
     if (dcd_type != RIG_DCD_NONE)
@@ -1195,7 +1197,7 @@
 #ifdef HAVE_PTHREAD
     mutex_rigctld(1);
 
-//    ++client_count;
+    ++client_count;
 #if 0
 
     if (!client_count++)
@@ -1311,7 +1313,19 @@
     }
     while (!ctrl_c && (retcode == RIG_OK || RIG_IS_SOFT_ERRCODE(-retcode)));
 
+    if (rigctld_idle && client_count == 1)
+    {
+        rig_close(my_rig);
+
+        if (verbose > RIG_DEBUG_ERR) { printf("Closed rig model %s.  Will 
reopen for new clients\n", my_rig->caps->model_name); }
+    }
+
+
 #ifdef HAVE_PTHREAD
+    --client_count;
+
+    if (rigctld_idle && client_count > 0) { printf("%d client%s still 
connected so rig remains open\n", client_count, client_count > 1 ? "s" : ""); }
+
 #if 0
     mutex_rigctld(1);
 

Reply via email to