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);