[Hamlib-commits] Hamlib -- Ham radio control libraries branch master updated. 05cf5546717be163e94b3
Library to control radio transceivers and receivers
Brought to you by:
n0nb
From: n0nb <n0...@us...> - 2023-06-07 14:21:35
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Hamlib -- Ham radio control libraries". The branch, master has been updated via 05cf5546717be163e94b30f98cd17a3f1136ba1a (commit) via 203920e293f470fbf709b9d54da0c9266788656a (commit) via 835b66e7df30f40a1941985727e22662bcb2b77d (commit) via 92363f6b0c27b81de1513c0770fdbfaa8b53d238 (commit) via 72071a313eef49a17c4d6d0704aba698f4274d21 (commit) via 138060d4d92de6c56c8af7e12c9f17338d91bcc2 (commit) via 527dbaad34e73538f2341454309f2c26f86925a8 (commit) via b25db51a515076f7991cadd0c4a84112a3b993c8 (commit) via bc50d9c273e2f195a4179498e9b5b96399fc8c03 (commit) via 1e5563909d7a9f5103bba0b2034159c6eeeee993 (commit) via 21f0e560f771f39acbf9ea5276356fa78832c3d9 (commit) via e8af3447aa62ec15ac363a9d706910513f29f0e8 (commit) via 5276e25a92584b33a8fd27a44b10e7c4d915ab3a (commit) via acc42665efb051707bc7380ae812f0afcdf665a4 (commit) via 55cbf80719a3b6972731ad9d85c725f0998a4e11 (commit) via 4e4d8e39d825412a8a5f46e6785f6eb465df2752 (commit) via eb97c7c107f550e01a63d01a7ec138e9aaa4ca89 (commit) via e1e570d19a944bd8918ad085b904ba6ffa7733ef (commit) via 48b01aa3ffb677e529e73cc8b4fe8783d9106c27 (commit) via a6de41e206d8d8fa2bab59069d052d9953b5e757 (commit) via 412221d346c61ebf70028edaac39f069b250e00c (commit) via 2491d208d945859f294f6f56ea0b52396350562e (commit) via cd0b685ed26baa5c89c786620dadbccb85f3ed39 (commit) via 729554ea80e84681ac77a000ebf3a6bd90016da3 (commit) via b34f18af40f822cfc235188523df933b297252da (commit) via 1fb69e18fdf1c974e252e5e4994799877ba7d652 (commit) via 82954c054922dc14d4a471cd7dcec8624ce539ff (commit) via fe209d7cce9cc1c647c8d1edac536bf3c46b7368 (commit) via fd86001ead11a5e2447a2382375857451efe93d6 (commit) via c3cf7a9874ba64c6a76eed13d8763782a96a351d (commit) via 2c8f8a9c294345bc878b000565ee3a1efd597a86 (commit) via 5745457d7f9c04b4ed60f11b81963826e0a83999 (commit) via c85cf58235dae925a00d70d4231373ab0669b8db (commit) via bdd16c8f20f2473f8a51636aa3694279da972039 (commit) via 5541deb8125632ece6f3274202e1a2a116605684 (commit) via 8fcd8242afbcca4c1fdeda751d260aa11df1da92 (commit) via 1ea7e2323579890afee9a34de0756ad949ead8f0 (commit) via 16137cd72ac6fcd9d33ddcc727b906d66858c87a (commit) via 75699adbbbfb9f1d7855a275deb47d6373a2b897 (commit) via dcd8ac58cf8f56cdbc49788114b626886faec345 (commit) via 84643407fff746f735aabd293d85622fd2e5b200 (commit) from 07a9f321b4a3a337df306b4b6184435040174eae (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 05cf5546717be163e94b30f98cd17a3f1136ba1a Author: Mike Black W9MDB <mdb...@ya...> Date: Wed Jun 7 07:26:39 2023 -0500 This seems to fix the DLL backwards compatiblity now -- more testing needed Revert "Remove timeout_retry as it broke DLL compatibility" This reverts commit 1c08cd7a64a3cd46c5b3aae875f9a38d29b94b80. diff --git a/include/hamlib/rig.h b/include/hamlib/rig.h index bfa5f7e35..908f753c4 100644 --- a/include/hamlib/rig.h +++ b/include/hamlib/rig.h @@ -2084,6 +2084,7 @@ struct rig_caps { int (*password)(RIG *rig, const char *key1); /*< Send encrypted password if rigctld is secured with -A/--password */ int (*set_lock_mode)(RIG *rig, int mode); int (*get_lock_mode)(RIG *rig, int *mode); + short timeout_retry; /*!< number of retries to make in case of read timeout errors, some serial interfaces may require this, 0 to use default value, -1 to disable */ }; //! @endcond diff --git a/src/conf.c b/src/conf.c index 7529c87c0..831fdc5d8 100644 --- a/src/conf.c +++ b/src/conf.c @@ -69,6 +69,11 @@ static const struct confparams frontend_cfg_params[] = TOK_RETRY, "retry", "Retry", "Max number of retry", "0", RIG_CONF_NUMERIC, { .n = { 0, 10, 1 } } }, + { + TOK_TIMEOUT_RETRY, "timeout_retry", "Number of retries for read timeouts", + "Set the number of retries for data read timeouts that may occur especially with some serial interfaces", + "1", RIG_CONF_NUMERIC, { .n = { 0, 100, 1 } } + }, { TOK_RANGE_SELECTED, "Selected range list", "Range list#", "The tx/rx range list in use", @@ -738,6 +743,15 @@ static int frontend_set_conf(RIG *rig, token_t token, const char *val) rs->tuner_control_pathname = strdup(val); // yeah -- need to free it break; + case TOK_TIMEOUT_RETRY: + if (1 != sscanf(val, "%ld", &val_i)) + { + return -RIG_EINVAL; + } + + rs->rigport.timeout_retry = val_i; + break; + case TOK_OFFSET_VFOA: if (1 != sscanf(val, "%ld", &val_i)) { @@ -1111,6 +1125,10 @@ static int frontend_get_conf2(RIG *rig, token_t token, char *val, int val_len) SNPRINTF(val, val_len, "%d", rs->async_data_enabled); break; + case TOK_TIMEOUT_RETRY: + SNPRINTF(val, val_len, "%d", rs->rigport.timeout_retry); + break; + default: return -RIG_EINVAL; } diff --git a/src/rig.c b/src/rig.c index 1c5b8ae85..794a92471 100644 --- a/src/rig.c +++ b/src/rig.c @@ -623,13 +623,28 @@ RIG *HAMLIB_API rig_init(rig_model_t rig_model) rs->rigport.post_write_delay = caps->post_write_delay; // since we do two timeouts now we can cut the timeout in half for serial - if (caps->port_type == RIG_PORT_SERIAL) + if (caps->port_type == RIG_PORT_SERIAL && caps->timeout_retry >= 0) { rs->rigport.timeout = caps->timeout / 2; } rs->rigport.retry = caps->retry; + if (caps->timeout_retry < 0) + { + // Rigs may disable read timeout retries + rs->rigport.timeout_retry = 0; + } + else if (caps->timeout_retry == 0) + { + // Default to 1 retry for read timeouts + rs->rigport.timeout_retry = 1; + } + else + { + rs->rigport.timeout_retry = caps->timeout_retry; + } + rs->pttport.type.ptt = caps->ptt_type; rs->dcdport.type.dcd = caps->dcd_type; commit 203920e293f470fbf709b9d54da0c9266788656a Author: Mike Black W9MDB <mdb...@ya...> Date: Wed Jun 7 07:05:05 2023 -0500 FIx FT817 set/get_mode -- thanks to Mooner Salem K6AQ https://github.com/drowe67/freedv-gui/issues/409 diff --git a/rigs/yaesu/ft817.c b/rigs/yaesu/ft817.c index dc8035090..a187b0017 100644 --- a/rigs/yaesu/ft817.c +++ b/rigs/yaesu/ft817.c @@ -224,13 +224,13 @@ enum ft817_digi }; #define FT817_ALL_RX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_PKTFM|\ - RIG_MODE_USB|RIG_MODE_LSB|RIG_MODE_RTTY|RIG_MODE_FM|RIG_MODE_PKTUSB|RIG_MODE_PKTLSB) + RIG_MODE_USB|RIG_MODE_LSB|RIG_MODE_RTTY|RIG_MODE_FM|RIG_MODE_PKTUSB|RIG_MODE_PKTLSB|RIG_MODE_PSK|RIG_MODE_PSKR) #define FT817_SSB_CW_RX_MODES (RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_USB|RIG_MODE_LSB|RIG_MODE_RTTY) #define FT817_CWN_RX_MODES (RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_RTTY) #define FT817_AM_FM_RX_MODES (RIG_MODE_AM|RIG_MODE_FM|RIG_MODE_PKTFM) #define FT817_OTHER_TX_MODES (RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_USB|\ - RIG_MODE_LSB|RIG_MODE_RTTY|RIG_MODE_FM|RIG_MODE_PKTUSB|RIG_MODE_PKTLSB) + RIG_MODE_LSB|RIG_MODE_RTTY|RIG_MODE_FM|RIG_MODE_PKTUSB|RIG_MODE_PKTLSB|RIG_MODE_PSK|RIG_MODE_PSKR) #define FT817_AM_TX_MODES (RIG_MODE_AM) #define FT817_VFO_ALL (RIG_VFO_A|RIG_VFO_B) @@ -294,7 +294,7 @@ const struct rig_caps ft817_caps = RIG_MODEL(RIG_MODEL_FT817), .model_name = "FT-817", .mfg_name = "Yaesu", - .version = "20230606.0", + .version = "20230607.0", .copyright = "LGPL", .status = RIG_STATUS_STABLE, .rig_type = RIG_TYPE_TRANSCEIVER, @@ -711,6 +711,7 @@ static int ft817_read_eeprom(RIG *rig, unsigned short addr, unsigned char *out) rig_debug(RIG_DEBUG_VERBOSE, "%s: data[0]=%02x, data[1]=%02x, out=%02x\n", __func__, data[0], data[1], *out); + memcpy(out, data, 2); return RIG_OK; } @@ -934,9 +935,9 @@ static int ft817_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width) { case FT817_DIGI_RTTY: *mode = RIG_MODE_RTTYR; break; - case FT817_DIGI_PSK_L: *mode = RIG_MODE_PKTLSB; break; + case FT817_DIGI_PSK_L: *mode = RIG_MODE_PSKR; break; - case FT817_DIGI_PSK_U: *mode = RIG_MODE_PKTUSB; break; + case FT817_DIGI_PSK_U: *mode = RIG_MODE_PSK; break; case FT817_DIGI_USER_L: *mode = RIG_MODE_PKTLSB; break; @@ -1532,9 +1533,9 @@ static int ft817_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) if (mode == RIG_MODE_RTTY) { data[2] = 0; } - if (mode == RIG_MODE_PSK) { data[2] = 1 << 5; } + if (mode == RIG_MODE_PSKR) { data[2] = 1 << 5; } - if (mode == RIG_MODE_PSKR) { data[2] = 2 << 5; } + if (mode == RIG_MODE_PSK) { data[2] = 2 << 5; } if (mode == RIG_MODE_PKTLSB) { data[2] = 3 << 5; } commit 835b66e7df30f40a1941985727e22662bcb2b77d Author: Mike Black W9MDB <mdb...@ya...> Date: Tue Jun 6 23:34:15 2023 -0500 Give the FT-920 some time during PTT OFF to allow it to occur Fake-It was not working probably due to this as can't set freq while PTT diff --git a/rigs/yaesu/ft920.c b/rigs/yaesu/ft920.c index 01be2022a..68cc18877 100644 --- a/rigs/yaesu/ft920.c +++ b/rigs/yaesu/ft920.c @@ -407,7 +407,7 @@ const struct rig_caps ft920_caps = RIG_MODEL(RIG_MODEL_FT920), .model_name = "FT-920", .mfg_name = "Yaesu", - .version = "20220529.0", /* YYYYMMDD */ + .version = "20220060.0", /* YYYYMMDD */ .copyright = "LGPL", .status = RIG_STATUS_STABLE, .rig_type = RIG_TYPE_TRANSCEIVER, @@ -2296,6 +2296,7 @@ static int ft920_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt) { return err; } + hl_usleep(200*1000); // give the rig some time before we try set_freq return RIG_OK; } commit 92363f6b0c27b81de1513c0770fdbfaa8b53d238 Author: Mike Black W9MDB <mdb...@ya...> Date: Tue Jun 6 15:12:52 2023 -0500 Re-add field to rig_state for DLL alignment https://github.com/Hamlib/Hamlib/issues/1299 diff --git a/include/hamlib/rig.h b/include/hamlib/rig.h index 0dd9d648d..bfa5f7e35 100644 --- a/include/hamlib/rig.h +++ b/include/hamlib/rig.h @@ -2691,7 +2691,8 @@ struct rig_state { * It is NOT fine to touch this struct AT ALL!!! */ struct rig_state_deprecated { - /********* DO NOT MODIFY OR REMOVE THIS STRUCTURE -- IT IS FOREVER DEPRECATED *********/ + /********* ENSURE YOU DO NOT EVERY MODIFY THIS STRUCTURE *********/ + /********* It will remain forever to provide DLL backwards compatiblity ******/ /* * overridable fields */ @@ -2809,6 +2810,7 @@ struct rig_state_deprecated { char client_version[32]; /*!<! Allow client to report version for compatibility checks/capability */ freq_t offset_vfoa; /*!< Offset to apply to VFOA/Main set_freq */ freq_t offset_vfob; /*!< Offset to apply to VFOB/Sub set_freq */ + struct multicast_s *multicast; /*!< Pointer to multicast server data */ }; //! @cond Doxygen_Suppress @@ -2883,6 +2885,7 @@ struct s_rig { // Do not remove the deprecated structure -- it will mess up DLL backwards compatibility struct rig_state_deprecated state_deprecated; /*!< Deprecated Rig state */ struct rig_callbacks callbacks; /*!< registered event callbacks */ + // state should really be a pointer but that's a LOT of changes involved struct rig_state state; /*!< Rig state */ }; commit 72071a313eef49a17c4d6d0704aba698f4274d21 Author: Mike Black W9MDB <mdb...@ya...> Date: Tue Jun 6 14:22:28 2023 -0500 Fix FT817 get_mode https://github.com/Hamlib/Hamlib/issues/1308 diff --git a/rigs/yaesu/ft817.c b/rigs/yaesu/ft817.c index 6cc77009c..dc8035090 100644 --- a/rigs/yaesu/ft817.c +++ b/rigs/yaesu/ft817.c @@ -224,13 +224,13 @@ enum ft817_digi }; #define FT817_ALL_RX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_PKTFM|\ - RIG_MODE_USB|RIG_MODE_LSB|RIG_MODE_RTTY|RIG_MODE_FM|RIG_MODE_PKTUSB) + RIG_MODE_USB|RIG_MODE_LSB|RIG_MODE_RTTY|RIG_MODE_FM|RIG_MODE_PKTUSB|RIG_MODE_PKTLSB) #define FT817_SSB_CW_RX_MODES (RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_USB|RIG_MODE_LSB|RIG_MODE_RTTY) #define FT817_CWN_RX_MODES (RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_RTTY) #define FT817_AM_FM_RX_MODES (RIG_MODE_AM|RIG_MODE_FM|RIG_MODE_PKTFM) #define FT817_OTHER_TX_MODES (RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_USB|\ - RIG_MODE_LSB|RIG_MODE_RTTY|RIG_MODE_FM|RIG_MODE_PKTUSB) + RIG_MODE_LSB|RIG_MODE_RTTY|RIG_MODE_FM|RIG_MODE_PKTUSB|RIG_MODE_PKTLSB) #define FT817_AM_TX_MODES (RIG_MODE_AM) #define FT817_VFO_ALL (RIG_VFO_A|RIG_VFO_B) @@ -799,7 +799,7 @@ static int ft817_get_status(RIG *rig, int status) } /* Top 3 bit define the digi mode */ - p->dig_mode = dig_mode[1] >> 5; + p->dig_mode = dig_mode[0] >> 5; default: break; commit 138060d4d92de6c56c8af7e12c9f17338d91bcc2 Author: Mike Black W9MDB <mdb...@ya...> Date: Tue Jun 6 14:17:48 2023 -0500 Fix flex6xxx ZZAR command diff --git a/rigs/kenwood/flex6xxx.c b/rigs/kenwood/flex6xxx.c index 99f7d55ad..14604e04f 100644 --- a/rigs/kenwood/flex6xxx.c +++ b/rigs/kenwood/flex6xxx.c @@ -666,8 +666,17 @@ int powersdr_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) case RIG_LEVEL_RF: if (val.f > 1.0) { return -RIG_EINVAL; } - ival = val.f * (120 - -20) - 20; - SNPRINTF(cmd, sizeof(cmd) - 1, "ZZAR%+04d", ival); + if (rig->caps->rig_model == RIG_MODEL_POWERSDR) + { + ival = val.f * (120 - -20) - 20; + SNPRINTF(cmd, sizeof(cmd) - 1, "ZZAR%+04d", ival); + } + else + { + ival = val.f * 100; + SNPRINTF(cmd, sizeof(cmd) - 1, "ZZAR%03d", ival); + } + break; case RIG_LEVEL_MICGAIN: @@ -1102,7 +1111,7 @@ const struct rig_caps f6k_caps = RIG_MODEL(RIG_MODEL_F6K), .model_name = "6xxx", .mfg_name = "FlexRadio", - .version = "20220306.0", + .version = "20230606.0", .copyright = "LGPL", .status = RIG_STATUS_STABLE, .rig_type = RIG_TYPE_TRANSCEIVER, @@ -1123,7 +1132,7 @@ const struct rig_caps f6k_caps = .has_get_parm = RIG_PARM_NONE, .has_set_parm = RIG_PARM_NONE, /* FIXME: parms */ .level_gran = { - [LVL_KEYSPD] = { .min = { .i = 5 }, .max = { .i = 60 }, .step = { .i = 1 } }, + [LVL_KEYSPD] = { .min = { .i = 5 }, .max = { .i = 60 }, .step = { .i = 1 } }, }, /* FIXME: granularity */ .parm_gran = {}, //.extlevels = elecraft_ext_levels, @@ -1263,7 +1272,7 @@ const struct rig_caps powersdr_caps = .has_get_parm = RIG_PARM_NONE, .has_set_parm = RIG_PARM_NONE, /* FIXME: parms */ .level_gran = { - [LVL_KEYSPD] = { .min = { .i = 5 }, .max = { .i = 60 }, .step = { .i = 1 } }, + [LVL_KEYSPD] = { .min = { .i = 5 }, .max = { .i = 60 }, .step = { .i = 1 } }, }, /* FIXME: granularity */ .parm_gran = {}, //.extlevels = elecraft_ext_levels, commit 527dbaad34e73538f2341454309f2c26f86925a8 Author: Mike Black W9MDB <mdb...@ya...> Date: Tue Jun 6 12:40:51 2023 -0500 Add LOCK in send_morse diff --git a/src/rig.c b/src/rig.c index 9efd81c34..1c5b8ae85 100644 --- a/src/rig.c +++ b/src/rig.c @@ -788,6 +788,9 @@ RIG *HAMLIB_API rig_init(rig_model_t rig_model) rs->rigport.fd = rs->pttport.fd = rs->dcdport.fd = -1; rs->powerstat = RIG_POWER_ON; // default to power on + // we have to copy rs to rig->state_deprecated for DLL backwards compatibility + memcpy(&rig->state_deprecated, rs, sizeof(rig->state_deprecated)); + /* * let the backend a chance to setup his private data * This must be done only once defaults are setup, @@ -2420,10 +2423,6 @@ int HAMLIB_API rig_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) retcode = caps->set_mode(rig, vfo, mode, width); rig_debug(RIG_DEBUG_TRACE, "%s: targetable retcode after set_mode(%s)=%d\n", __func__, rig_strrmode(mode), retcode); - if (rig->caps->rig_model == RIG_MODEL_FT817) - { - rig_debug(RIG_DEBUG_WARN, "%s: FT817 must use Menu 26 to switch between upper/lower sideband, Hamlib only sets DIG mode\n", __func__); - } } else { @@ -6753,7 +6752,9 @@ int HAMLIB_API rig_send_morse(RIG *rig, vfo_t vfo, const char *msg) if (vfo == RIG_VFO_CURR || vfo == rig->state.current_vfo) { + LOCK(1); retcode = caps->send_morse(rig, vfo, msg); + LOCK(0); RETURNFUNC(retcode); } commit b25db51a515076f7991cadd0c4a84112a3b993c8 Author: Mike Black W9MDB <mdb...@ya...> Date: Tue Jun 6 10:42:30 2023 -0500 Allow icom_send_morse to repeat a single char transmit when receiving a NAK diff --git a/rigs/icom/icom.c b/rigs/icom/icom.c index a44f193c8..92788ef77 100644 --- a/rigs/icom/icom.c +++ b/rigs/icom/icom.c @@ -8768,6 +8768,7 @@ int icom_send_morse(RIG *rig, vfo_t vfo, const char *msg) unsigned char ackbuf[MAXFRAMELEN]; int ack_len = sizeof(ackbuf), retval; int len; + int retry = 20; ENTERFUNC; len = strlen(msg); @@ -8779,6 +8780,7 @@ int icom_send_morse(RIG *rig, vfo_t vfo, const char *msg) rig_debug(RIG_DEBUG_TRACE, "%s: %s\n", __func__, msg); +morse_retry: retval = icom_transaction(rig, C_SND_CW, -1, (unsigned char *) msg, len, ackbuf, &ack_len); @@ -8798,6 +8800,11 @@ int icom_send_morse(RIG *rig, vfo_t vfo, const char *msg) { rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, ackbuf[0], ack_len); + if (len == 1 && --retry > 0) { + // 50 retries should be around 200ms --plenty of time to clear out some characters + hl_usleep(10*1000); + goto morse_retry; + } RETURNFUNC(-RIG_ERJCTED); } commit bc50d9c273e2f195a4179498e9b5b96399fc8c03 Author: Mike Black W9MDB <mdb...@ya...> Date: Tue Jun 6 10:16:21 2023 -0500 +04d actaully kicks out 3-digits and not 4 -- the + is included in the width value Revert "Fix PowerSDR ZZAR command format -- may need another fix for SmartSDR format to be different" This reverts commit 1e5563909d7a9f5103bba0b2034159c6eeeee993. diff --git a/rigs/kenwood/flex6xxx.c b/rigs/kenwood/flex6xxx.c index d9f961d3a..99f7d55ad 100644 --- a/rigs/kenwood/flex6xxx.c +++ b/rigs/kenwood/flex6xxx.c @@ -667,7 +667,7 @@ int powersdr_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) if (val.f > 1.0) { return -RIG_EINVAL; } ival = val.f * (120 - -20) - 20; - SNPRINTF(cmd, sizeof(cmd) - 1, "ZZAR%+03d", ival); + SNPRINTF(cmd, sizeof(cmd) - 1, "ZZAR%+04d", ival); break; case RIG_LEVEL_MICGAIN: @@ -1233,7 +1233,7 @@ const struct rig_caps powersdr_caps = RIG_MODEL(RIG_MODEL_POWERSDR), .model_name = "PowerSDR/Thetis", .mfg_name = "FlexRadio/ANAN", - .version = "20230606.0", + .version = "20221123.0", .copyright = "LGPL", .status = RIG_STATUS_STABLE, .rig_type = RIG_TYPE_TRANSCEIVER, commit 1e5563909d7a9f5103bba0b2034159c6eeeee993 Author: Mike Black W9MDB <mdb...@ya...> Date: Tue Jun 6 10:09:32 2023 -0500 Fix PowerSDR ZZAR command format -- may need another fix for SmartSDR format to be different diff --git a/rigs/kenwood/flex6xxx.c b/rigs/kenwood/flex6xxx.c index 99f7d55ad..d9f961d3a 100644 --- a/rigs/kenwood/flex6xxx.c +++ b/rigs/kenwood/flex6xxx.c @@ -667,7 +667,7 @@ int powersdr_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) if (val.f > 1.0) { return -RIG_EINVAL; } ival = val.f * (120 - -20) - 20; - SNPRINTF(cmd, sizeof(cmd) - 1, "ZZAR%+04d", ival); + SNPRINTF(cmd, sizeof(cmd) - 1, "ZZAR%+03d", ival); break; case RIG_LEVEL_MICGAIN: @@ -1233,7 +1233,7 @@ const struct rig_caps powersdr_caps = RIG_MODEL(RIG_MODEL_POWERSDR), .model_name = "PowerSDR/Thetis", .mfg_name = "FlexRadio/ANAN", - .version = "20221123.0", + .version = "20230606.0", .copyright = "LGPL", .status = RIG_STATUS_STABLE, .rig_type = RIG_TYPE_TRANSCEIVER, commit 21f0e560f771f39acbf9ea5276356fa78832c3d9 Author: Mike Black W9MDB <mdb...@ya...> Date: Tue Jun 6 09:44:25 2023 -0500 For Icom rigs when PASSBAND_NOCHANGE is requested do not change the filter setting https://github.com/Hamlib/Hamlib/issues/1309 diff --git a/rigs/icom/icom.c b/rigs/icom/icom.c index 0c6852c99..a44f193c8 100644 --- a/rigs/icom/icom.c +++ b/rigs/icom/icom.c @@ -2215,9 +2215,10 @@ int icom_set_mode_with_data(RIG *rig, vfo_t vfo, rmode_t mode, RETURNFUNC(retval); } - if (tmode == mode && ((width == RIG_PASSBAND_NOCHANGE) || (width == twidth))) + // do we really need/want to skip if width == twidth? + if ((width == RIG_PASSBAND_NOCHANGE) || (width == twidth)) { - rig_debug(RIG_DEBUG_TRACE, "%s: mode/width not changing\n", __func__); + rig_debug(RIG_DEBUG_TRACE, "%s: width not changing..keeping filter selection\n", __func__); RETURNFUNC(RIG_OK); } diff --git a/rigs/icom/icom.h b/rigs/icom/icom.h index a8e0aa699..ff260c7a5 100644 --- a/rigs/icom/icom.h +++ b/rigs/icom/icom.h @@ -35,7 +35,7 @@ #include <sys/time.h> #endif -#define BACKEND_VER "20230530" +#define BACKEND_VER "20230606" #define ICOM_IS_ID31 rig_is_model(rig, RIG_MODEL_ID31) #define ICOM_IS_ID51 rig_is_model(rig, RIG_MODEL_ID51) commit e8af3447aa62ec15ac363a9d706910513f29f0e8 Author: Mike Black W9MDB <mdb...@ya...> Date: Tue Jun 6 08:36:50 2023 -0500 Fix ft817.c build for MacOS and Pi https://github.com/Hamlib/Hamlib/issues/1308 diff --git a/rigs/yaesu/ft817.c b/rigs/yaesu/ft817.c index b2086c613..6cc77009c 100644 --- a/rigs/yaesu/ft817.c +++ b/rigs/yaesu/ft817.c @@ -1504,6 +1504,7 @@ static int ft817_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) case RIG_MODE_PKTLSB: case RIG_MODE_PSK: case RIG_MODE_PSKR: + { // first we get our dig mode to see if it needs changing unsigned char digmode[2]; int ret = ft817_read_eeprom(rig, 0x65, digmode); @@ -1561,6 +1562,7 @@ static int ft817_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) } return RIG_OK; + } case RIG_MODE_FM: index = FT817_NATIVE_CAT_SET_MODE_FM; commit 5276e25a92584b33a8fd27a44b10e7c4d915ab3a Author: Mike Black W9MDB <mdb...@ya...> Date: Tue Jun 6 08:14:37 2023 -0500 FIx from Brian G8SEZ for FT817 get_mode And another fix for returning the correct mode hopefully for DIG modes https://github.com/Hamlib/Hamlib/issues/1308 diff --git a/rigs/yaesu/ft817.c b/rigs/yaesu/ft817.c index 832eb94e0..b2086c613 100644 --- a/rigs/yaesu/ft817.c +++ b/rigs/yaesu/ft817.c @@ -294,7 +294,7 @@ const struct rig_caps ft817_caps = RIG_MODEL(RIG_MODEL_FT817), .model_name = "FT-817", .mfg_name = "Yaesu", - .version = "20230605.0", + .version = "20230606.0", .copyright = "LGPL", .status = RIG_STATUS_STABLE, .rig_type = RIG_TYPE_TRANSCEIVER, @@ -799,7 +799,7 @@ static int ft817_get_status(RIG *rig, int status) } /* Top 3 bit define the digi mode */ - p->dig_mode = dig_mode[0] >> 5; + p->dig_mode = dig_mode[1] >> 5; default: break; @@ -1475,7 +1475,7 @@ static int ft817_set_freq(RIG *rig, vfo_t vfo, freq_t freq) static int ft817_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) { int index; /* index of sequence to send */ - unsigned char data[YAESU_CMD_LENGTH - 1]; + unsigned char data[YAESU_CMD_LENGTH]; rig_debug(RIG_DEBUG_VERBOSE, "%s: generic mode = %s\n", __func__, rig_strrmode(mode)); @@ -1526,15 +1526,23 @@ static int ft817_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) memcpy(data, ncmd[FT817_NATIVE_CAT_EEPROM_WRITE].nseq, YAESU_CMD_LENGTH); - if (mode == RIG_MODE_RTTY) { data[0] = 0; } + data[0] = 0x00; + data[1] = 0x65; + + if (mode == RIG_MODE_RTTY) { data[2] = 0; } - if (mode == RIG_MODE_PSK) { data[0] = 1 << 5; } + if (mode == RIG_MODE_PSK) { data[2] = 1 << 5; } - if (mode == RIG_MODE_PSKR) { data[0] = 2 << 5; } + if (mode == RIG_MODE_PSKR) { data[2] = 2 << 5; } - if (mode == RIG_MODE_PKTLSB) { data[0] = 3 << 5; } + if (mode == RIG_MODE_PKTLSB) { data[2] = 3 << 5; } - if (mode == RIG_MODE_PKTUSB) { data[0] = 4 << 5; } + if (mode == RIG_MODE_PKTUSB) { data[2] = 4 << 5; } + + // data[3] should be the original value at address 0x66, + // i.e. "DCS INV" / digmode[1]. This is so we don't end + // up overwriting this setting by mistake. + data[3] = digmode[1]; index = FT817_NATIVE_CAT_SET_MODE_DIG; ret = ft817_send_cmd(rig, index); @@ -1553,7 +1561,6 @@ static int ft817_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) } return RIG_OK; - break; case RIG_MODE_FM: index = FT817_NATIVE_CAT_SET_MODE_FM; commit acc42665efb051707bc7380ae812f0afcdf665a4 Author: Mike Black W9MDB <mdb...@ya...> Date: Mon Jun 5 08:34:59 2023 -0500 Allow FT817 to write to EEPROM for set_mode Should not cause too much wear on the EEPROM https://github.com/Hamlib/Hamlib/issues/1308 diff --git a/rigs/yaesu/ft817.c b/rigs/yaesu/ft817.c index 17c86bb1a..832eb94e0 100644 --- a/rigs/yaesu/ft817.c +++ b/rigs/yaesu/ft817.c @@ -100,6 +100,7 @@ enum ft817_native_cmd_e FT817_NATIVE_CAT_PWR_ON, FT817_NATIVE_CAT_PWR_OFF, FT817_NATIVE_CAT_EEPROM_READ, + FT817_NATIVE_CAT_EEPROM_WRITE, FT817_NATIVE_CAT_GET_TX_METERING, FT817_NATIVE_SIZE /* end marker */ }; @@ -209,6 +210,7 @@ static const yaesu_cmd_set_t ncmd[] = { 1, { 0x00, 0x00, 0x00, 0x00, 0x0f } }, /* pwr on */ { 1, { 0x00, 0x00, 0x00, 0x00, 0x8f } }, /* pwr off */ { 0, { 0x00, 0x00, 0x00, 0x00, 0xbb } }, /* eeprom read */ + { 0, { 0x00, 0x00, 0x00, 0x00, 0xbc } }, /* eeprom write */ { 1, { 0x00, 0x00, 0x00, 0x00, 0xbd } }, /* get TX metering levels (PWR, SWR, MOD, ALC) */ }; @@ -292,7 +294,7 @@ const struct rig_caps ft817_caps = RIG_MODEL(RIG_MODEL_FT817), .model_name = "FT-817", .mfg_name = "Yaesu", - .version = "20230604.0", + .version = "20230605.0", .copyright = "LGPL", .status = RIG_STATUS_STABLE, .rig_type = RIG_TYPE_TRANSCEIVER, @@ -788,16 +790,16 @@ static int ft817_get_status(RIG *rig, int status) * getting the frequency. */ switch (p->fm_status[4] & 0x7f) { - unsigned char dig_mode; + unsigned char dig_mode[2]; case 0x0a: - if ((n = ft817_read_eeprom(rig, 0x0065, &dig_mode)) < 0) + if ((n = ft817_read_eeprom(rig, 0x0065, dig_mode)) < 0) { return n; } /* Top 3 bit define the digi mode */ - p->dig_mode = dig_mode >> 5; + p->dig_mode = dig_mode[0] >> 5; default: break; @@ -986,17 +988,17 @@ static int ft817_get_split_vfo(RIG *rig, vfo_t vfo, split_t *split, if (ptt == RIG_PTT_OFF) { // TX status not valid when in RX - unsigned char c; + unsigned char c[2]; /* Get split status from EEPROM */ - n = ft817_read_eeprom(rig, 0x7a, &c); + n = ft817_read_eeprom(rig, 0x7a, c); if (n != RIG_OK) { return n; } - *split = (c & 0x80) ? RIG_SPLIT_ON : RIG_SPLIT_OFF; + *split = (c[0] & 0x80) ? RIG_SPLIT_ON : RIG_SPLIT_OFF; } else { @@ -1204,10 +1206,10 @@ static int ft818_817_get_ant(RIG *rig, vfo_t vfo, ant_t ant, value_t *option, /* The FT818/817 has no RIG_TARGETABLE_ALL * so rig.c switched the active VFO to the one requested */ int ret; - unsigned char eeprom_band, eeprom_ant; + unsigned char eeprom_band[2], eeprom_ant[2]; /* Read eeprom for current 'band' for both VFO's */ - ret = ft817_read_eeprom(rig, 0x59, &eeprom_band); + ret = ft817_read_eeprom(rig, 0x59, eeprom_band); if (ret != RIG_OK) { @@ -1217,7 +1219,7 @@ static int ft818_817_get_ant(RIG *rig, vfo_t vfo, ant_t ant, value_t *option, /* Read eeprom for antenna selection per band. * The FT818/817 stores antenna per band not per VFO! * So changing antenna will change for both VFO's */ - ret = ft817_read_eeprom(rig, 0x7A, &eeprom_ant); + ret = ft817_read_eeprom(rig, 0x7A, eeprom_ant); if (ret != RIG_OK) { @@ -1234,11 +1236,11 @@ static int ft818_817_get_ant(RIG *rig, vfo_t vfo, ant_t ant, value_t *option, switch (vfo) { case RIG_VFO_A: - eeprom_band &= 0xF; + eeprom_band[0] &= 0xF; break; case RIG_VFO_B: - eeprom_band = eeprom_band >> 4; + eeprom_band[0] = eeprom_band[0] >> 4; break; default: @@ -1255,9 +1257,9 @@ static int ft818_817_get_ant(RIG *rig, vfo_t vfo, ant_t ant, value_t *option, * So to make the code simple: if we have a 817 and 2 or higher band then * add 1 to the value to align it on the 818 mapping. */ - if (is817 && eeprom_band >= 2) + if (is817 && eeprom_band[0] >= 2) { - eeprom_band++; + eeprom_band[0]++; } /* The 817/818 does not have a antenna selection per VFO but per band. @@ -1266,7 +1268,7 @@ static int ft818_817_get_ant(RIG *rig, vfo_t vfo, ant_t ant, value_t *option, */ - switch (eeprom_band) + switch (eeprom_band[0]) { case 0: /* 160M */ case 1: /* 80M */ @@ -1279,37 +1281,37 @@ static int ft818_817_get_ant(RIG *rig, vfo_t vfo, ant_t ant, value_t *option, case 8: /* 12M */ case 9: /* 10M */ /* All HF use the same antenna setting, bit 0 */ - eeprom_ant &= 1 << 0; + eeprom_ant[0] &= 1 << 0; break; case 0xA: /* 6m, bit 1 */ - eeprom_ant &= 1 << 1; + eeprom_ant[0] &= 1 << 1; break; case 0xB: /* FM BCB 76Mhz - 108Mhz, bit 2 */ - eeprom_ant &= 1 << 2; + eeprom_ant[0] &= 1 << 2; break; case 0xC: /* Airband, bit 3 */ - eeprom_ant &= 1 << 3; + eeprom_ant[0] &= 1 << 3; break; case 0xD: /* 2M, bit 4 */ - eeprom_ant &= 1 << 4; + eeprom_ant[0] &= 1 << 4; break; case 0xE: /* 70cm / UHF, bit 5 */ - eeprom_ant &= 1 << 5; + eeprom_ant[0] &= 1 << 5; break; case 0xF: /* Free-tuning?, bit 6 */ - eeprom_ant &= 1 << 6; + eeprom_ant[0] &= 1 << 6; break; } /* We have no split TX/RX capability per VFO. * So only set ant_curr and leave rx/tx set to unknown. */ - *ant_curr = eeprom_ant ? FT817_ANT_REAR : FT817_ANT_FRONT; + *ant_curr = eeprom_ant[0] ? FT817_ANT_REAR : FT817_ANT_FRONT; return RIG_OK; } @@ -1403,16 +1405,16 @@ static int ft817_send_icmd(RIG *rig, int index, unsigned char *data) /* ---------------------------------------------------------------------- */ static int ft817_get_vfo(RIG *rig, vfo_t *vfo) { - unsigned char c; + unsigned char c[2]; rig_debug(RIG_DEBUG_VERBOSE, "%s: called \n", __func__); - if (ft817_read_eeprom(rig, 0x55, &c) < 0) /* get vfo status */ + if (ft817_read_eeprom(rig, 0x55, c) < 0) /* get vfo status */ { return -RIG_EPROTO; } - if ((c & 0x1) == 0) + if ((c[0] & 0x1) == 0) { *vfo = RIG_VFO_A; } @@ -1473,6 +1475,7 @@ static int ft817_set_freq(RIG *rig, vfo_t vfo, freq_t freq) static int ft817_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) { int index; /* index of sequence to send */ + unsigned char data[YAESU_CMD_LENGTH - 1]; rig_debug(RIG_DEBUG_VERBOSE, "%s: generic mode = %s\n", __func__, rig_strrmode(mode)); @@ -1499,8 +1502,57 @@ static int ft817_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) case RIG_MODE_RTTY: case RIG_MODE_PKTUSB: case RIG_MODE_PKTLSB: - /* user has to have correct DIG mode setup on rig */ + case RIG_MODE_PSK: + case RIG_MODE_PSKR: + // first we get our dig mode to see if it needs changing + unsigned char digmode[2]; + int ret = ft817_read_eeprom(rig, 0x65, digmode); + + if (ret != RIG_OK) + { + return ret; + } + + rig_debug(RIG_DEBUG_VERBOSE, "%s: digmode=0x%02x%02x\n", __func__, digmode[0], + digmode[1]); + digmode[0] = digmode[0] >> 5; // shift 5 bits + + // check if we're already in the mode and return if so + if (digmode[0] == 0x00 && mode == RIG_MODE_RTTY) { return RIG_OK; } + else if (digmode[0] == 0x01 && mode == RIG_MODE_PSKR) { return RIG_OK; } + else if (digmode[0] == 0x02 && mode == RIG_MODE_PSK) { return RIG_OK; } + else if (digmode[0] == 0x03 && mode == RIG_MODE_PKTLSB) { return RIG_OK; } + else if (digmode[0] == 0x04 && mode == RIG_MODE_PKTUSB) { return RIG_OK; } + + memcpy(data, ncmd[FT817_NATIVE_CAT_EEPROM_WRITE].nseq, YAESU_CMD_LENGTH); + + if (mode == RIG_MODE_RTTY) { data[0] = 0; } + + if (mode == RIG_MODE_PSK) { data[0] = 1 << 5; } + + if (mode == RIG_MODE_PSKR) { data[0] = 2 << 5; } + + if (mode == RIG_MODE_PKTLSB) { data[0] = 3 << 5; } + + if (mode == RIG_MODE_PKTUSB) { data[0] = 4 << 5; } + index = FT817_NATIVE_CAT_SET_MODE_DIG; + ret = ft817_send_cmd(rig, index); + + if (ret != RIG_OK) + { + rig_debug(RIG_DEBUG_ERR, "%s: ft817_send_cmd: %s\n", __func__, rigerror(ret)); + } + + index = FT817_NATIVE_CAT_EEPROM_WRITE; + ret = ft817_send_icmd(rig, index, data); + + if (ret != RIG_OK) + { + rig_debug(RIG_DEBUG_ERR, "%s: ft817_send_icmd: %s\n", __func__, rigerror(ret)); + } + + return RIG_OK; break; case RIG_MODE_FM: commit 55cbf80719a3b6972731ad9d85c725f0998a4e11 Author: Mike Black W9MDB <mdb...@ya...> Date: Sun Jun 4 17:44:31 2023 -0500 Fix compile warning in rig.c diff --git a/src/rig.c b/src/rig.c index 6af805c4b..9efd81c34 100644 --- a/src/rig.c +++ b/src/rig.c @@ -669,7 +669,7 @@ RIG *HAMLIB_API rig_init(rig_model_t rig_model) //return(NULL); // this is not fatal } - if (rs->level_gran) + //if (rs->level_gran) { memcpy(rs->level_gran, rig->caps->level_gran, sizeof(rs->level_gran)); } commit 4e4d8e39d825412a8a5f46e6785f6eb465df2752 Author: Mike Black W9MDB <mdb...@ya...> Date: Sun Jun 4 17:43:33 2023 -0500 Fix sleep.c function diff --git a/src/sleep.c b/src/sleep.c index 810d76edf..e7f5192ba 100644 --- a/src/sleep.c +++ b/src/sleep.c @@ -56,8 +56,8 @@ int hl_usleep(rig_useconds_t usec) double delay = sleep_time; double lasterr = 0; - if (sleep_time > .001) { sleep_time -= .001; } - else if (sleep_time > .0001) { sleep_time -= .0005; } + if (sleep_time > .001) { delay -= .0001; } + else if (sleep_time > .0001) { delay -= .00005; } tv1.tv_sec = (time_t) delay; tv1.tv_nsec = (long)((delay - tv1.tv_sec) * 1e+9); commit eb97c7c107f550e01a63d01a7ec138e9aaa4ca89 Author: Mike Black W9MDB <mdb...@ya...> Date: Sun Jun 4 15:56:01 2023 -0500 Change anytone.c to use bluetooth protocol Update some things to keep debug quiet during thread operations in anytone.c diff --git a/include/hamlib/rig.h b/include/hamlib/rig.h index c6666adae..0dd9d648d 100644 --- a/include/hamlib/rig.h +++ b/include/hamlib/rig.h @@ -2681,6 +2681,136 @@ struct rig_state { int spectrum_attenuator[HAMLIB_MAXDBLSTSIZ]; /*!< Spectrum attenuator list in dB, 0 terminated */ }; +/** + * \brief Deprecated Rig state containing live data and customized fields. + * Due to DLL problems this remains in-place in the rig_caps structure but is no longer referred to + * A new rig_state has been added at the end of the structure instead of the middle + * + * This struct contains no data and is just a place holder for DLL alignment + * + * It is NOT fine to touch this struct AT ALL!!! + */ +struct rig_state_deprecated { + /********* DO NOT MODIFY OR REMOVE THIS STRUCTURE -- IT IS FOREVER DEPRECATED *********/ + /* + * overridable fields + */ + // moving the hamlib_port_t to the end of rig_state and making it a pointer + // this should allow changes to hamlib_port_t without breaking shared libraries + // these will maintain a copy of the new port_t for backwards compatibility + // to these offsets -- note these must stay until a major version update is done like 5.0 + hamlib_port_t_deprecated rigport_deprecated; /*!< Rig port (internal use). */ + hamlib_port_t_deprecated pttport_deprecated; /*!< PTT port (internal use). */ + hamlib_port_t_deprecated dcdport_deprecated; /*!< DCD port (internal use). */ + + double vfo_comp; /*!< VFO compensation in PPM, 0.0 to disable */ + + int deprecated_itu_region; /*!< ITU region to select among freq_range_t */ + freq_range_t rx_range_list[HAMLIB_FRQRANGESIZ]; /*!< Receive frequency range list */ + freq_range_t tx_range_list[HAMLIB_FRQRANGESIZ]; /*!< Transmit frequency range list */ + + struct tuning_step_list tuning_steps[HAMLIB_TSLSTSIZ]; /*!< Tuning step list */ + + struct filter_list filters[HAMLIB_FLTLSTSIZ]; /*!< Mode/filter table, at -6dB */ + + cal_table_t str_cal; /*!< S-meter calibration table */ + + chan_t chan_list[HAMLIB_CHANLSTSIZ]; /*!< Channel list, zero ended */ + + shortfreq_t max_rit; /*!< max absolute RIT */ + shortfreq_t max_xit; /*!< max absolute XIT */ + shortfreq_t max_ifshift; /*!< max absolute IF-SHIFT */ + + ann_t announces; /*!< Announces bit field list */ + + int preamp[HAMLIB_MAXDBLSTSIZ]; /*!< Preamp list in dB, 0 terminated */ + int attenuator[HAMLIB_MAXDBLSTSIZ]; /*!< Preamp list in dB, 0 terminated */ + + setting_t has_get_func; /*!< List of get functions */ + setting_t has_set_func; /*!< List of set functions */ + setting_t has_get_level; /*!< List of get level */ + setting_t has_set_level; /*!< List of set level */ + setting_t has_get_parm; /*!< List of get parm */ + setting_t has_set_parm; /*!< List of set parm */ + + gran_t level_gran[RIG_SETTING_MAX]; /*!< level granularity */ + gran_t parm_gran[RIG_SETTING_MAX]; /*!< parm granularity */ + + + /* + * non overridable fields, internal use + */ + + int transaction_active; /*!< set to 1 to inform the async reader thread that a synchronous command transaction is waiting for a response, otherwise 0 */ + vfo_t current_vfo; /*!< VFO currently set */ + int vfo_list; /*!< Complete list of VFO for this rig */ + int comm_state; /*!< Comm port state, opened/closed. */ + rig_ptr_t priv; /*!< Pointer to private rig state data. */ + rig_ptr_t obj; /*!< Internal use by hamlib++ for event handling. */ + + int async_data_enabled; /*!< Whether async data mode is enabled */ + int poll_interval; /*!< Rig state polling period in milliseconds */ + freq_t current_freq; /*!< Frequency currently set */ + rmode_t current_mode; /*!< Mode currently set */ + //rmode_t current_modeB; /*!< Mode currently set VFOB */ + pbwidth_t current_width; /*!< Passband width currently set */ + vfo_t tx_vfo; /*!< Tx VFO currently set */ + rmode_t mode_list; /*!< Complete list of modes for this rig */ + // mode_list is used by some + // so anything added to this structure must be below here + int transmit; /*!< rig should be transmitting i.e. hard + wired PTT asserted - used by rigs that + don't do CAT while in Tx */ + freq_t lo_freq; /*!< Local oscillator frequency of any transverter */ + time_t twiddle_time; /*!< time when vfo twiddling was detected */ + int twiddle_timeout; /*!< timeout to resume from twiddling */ + // uplink allows gpredict to behave better by no reading the uplink VFO + int uplink; /*!< uplink=1 will not read Sub, uplink=2 will not read Main */ + struct rig_cache cache; + int vfo_opt; /*!< Is -o switch turned on? */ + int auto_power_on; /*!< Allow Hamlib to power on rig + automatically if supported */ + int auto_power_off; /*!< Allow Hamlib to power off rig + automatically if supported */ + int auto_disable_screensaver; /*!< Allow Hamlib to disable the + rig's screen saver automatically if + supported */ + int ptt_share; /*!< Share ptt port by open/close during get_ptt, set_ptt hogs the port while active */ + int power_now; /*!< Current RF power level in rig units */ + int power_min; /*!< Minimum RF power level in rig units */ + int power_max; /*!< Maximum RF power level in rig units */ + unsigned char disable_yaesu_bandselect; /*!< Disables Yaesu band select logic */ + int twiddle_rit; /*!< Suppresses VFOB reading (cached value used) so RIT control can be used */ + int twiddle_state; /*!< keeps track of twiddle status */ + vfo_t rx_vfo; /*!< Rx VFO currently set */ + + volatile unsigned int snapshot_packet_sequence_number; + + volatile int multicast_publisher_run; + void *multicast_publisher_priv_data; + volatile int async_data_handler_thread_run; + void *async_data_handler_priv_data; + volatile int poll_routine_thread_run; + void *poll_routine_priv_data; + pthread_mutex_t mutex_set_transaction; + hamlib_port_t rigport; /*!< Rig port (internal use). */ + hamlib_port_t pttport; /*!< PTT port (internal use). */ + hamlib_port_t dcdport; /*!< DCD port (internal use). */ + /********* DO NOT ADD or CHANGE anything (or than to rename) ABOVE THIS LINE *********/ + /********* ENSURE ANY NEW ITEMS ARE ADDED AFTER HERE *********/ + /* flags instructing the rig_get routines to use cached values when asyncio is in use */ + int use_cached_freq; /*!< flag instructing rig_get_freq to use cached values when asyncio is in use */ + int use_cached_mode; /*!< flag instructing rig_get_mode to use cached values when asyncio is in use */ + int use_cached_ptt; /*!< flag instructing rig_get_ptt to use cached values when asyncio is in use */ + int depth; /*!< a depth counter to use for debug indentation and such */ + int lock_mode; /*!< flag that prevents mode changes if ~= 0 -- see set/get_lock_mode */ + powerstat_t powerstat; /*!< power status */ + char *tuner_control_pathname; /*!< Path to external tuner control program that get 0/1 (Off/On) argument */ + char client_version[32]; /*!<! Allow client to report version for compatibility checks/capability */ + freq_t offset_vfoa; /*!< Offset to apply to VFOA/Main set_freq */ + freq_t offset_vfob; /*!< Offset to apply to VFOB/Sub set_freq */ +}; + //! @cond Doxygen_Suppress typedef int (*vprintf_cb_t)(enum rig_debug_level_e, rig_ptr_t, @@ -2750,8 +2880,10 @@ struct rig_callbacks { */ struct s_rig { struct rig_caps *caps; /*!< Pointer to rig capabilities (read only) */ - struct rig_state state; /*!< Rig state */ + // Do not remove the deprecated structure -- it will mess up DLL backwards compatibility + struct rig_state_deprecated state_deprecated; /*!< Deprecated Rig state */ struct rig_callbacks callbacks; /*!< registered event callbacks */ + struct rig_state state; /*!< Rig state */ }; @@ -3377,6 +3509,9 @@ rig_idx2setting(int i); extern HAMLIB_EXPORT(void) rig_set_debug HAMLIB_PARAMS((enum rig_debug_level_e debug_level)); +extern HAMLIB_EXPORT(void) +rig_get_debug HAMLIB_PARAMS((enum rig_debug_level_e *debug_level)); + extern HAMLIB_EXPORT(void) rig_set_debug_time_stamp HAMLIB_PARAMS((int flag)); diff --git a/rigs/anytone/anytone.c b/rigs/anytone/anytone.c index 0a8807249..43298c2f5 100644 --- a/rigs/anytone/anytone.c +++ b/rigs/anytone/anytone.c @@ -120,18 +120,28 @@ void *anytone_thread(void *vrig) rig_debug(RIG_DEBUG_TRACE, "%s: anytone_thread started\n", __func__); p->runflag = 1; - // if we don't have CACHE debug enabled then we only show WARN and higher for this rig - if (rig_need_debug(RIG_DEBUG_CACHE) == 0) - { - rig_set_debug(RIG_DEBUG_WARN); // only show WARN debug otherwise too verbose - } - while (p->runflag) { - char c = 0x06; +// char c [] = { 0x2b, 0x41, 0x44, 0x41, 0x54, 0x41, 0x3a, 0x30, 0x30, 0x2c, 0x30, 0x30, 0x31, 0x0d, 0x0a, 0x61, 0x0d, 0x0a }; + char *c = "+ADATA:00,001\r\na\r\n"; MUTEX_LOCK(p->priv.mutex); - write_block(&rig->state.rigport, (unsigned char *)&c, 1); + // if we don't have CACHE debug enabled then we only show WARN and higher for this rig + enum rig_debug_level_e debug_level_save; + rig_get_debug(&debug_level_save); + + if (rig_need_debug(RIG_DEBUG_CACHE) == 0) + { + rig_set_debug(RIG_DEBUG_WARN); // only show WARN debug otherwise too verbose + } + + write_block(&rig->state.rigport, (unsigned char *)c, strlen(c)); hl_usleep(100 * 1000); + + if (rig_need_debug(RIG_DEBUG_CACHE) == 0) + { + rig_set_debug(debug_level_save); + } + rig_flush(&rig->state.rigport); MUTEX_UNLOCK(p->priv.mutex); hl_usleep(1000 * 1000); // 1-second loop @@ -246,7 +256,7 @@ int anytone_init(RIG *rig) rig->state.priv = p; p->vfo_curr = RIG_VFO_NONE; #ifdef HAVE_PTHREAD -// pthread_mutex_init(&p->mutex, NULL); + pthread_mutex_init(&p->mutex, NULL); #endif } @@ -301,8 +311,8 @@ int anytone_open(RIG *rig) // can we ask for any information? Maybe just toggle A/B? } -#if 0 pthread_t id; + // will start the keep alive int err = pthread_create(&id, NULL, anytone_thread, (void *)rig); if (err) @@ -311,7 +321,12 @@ int anytone_open(RIG *rig) strerror(errno)); RETURNFUNC(-RIG_EINTERNAL); } -#endif + + hl_usleep(500 * 1000); + char *cmd = "+ADATA:00,016\r\n"; + + anytone_transaction(rig, cmd, strlen(cmd), 21); + RETURNFUNC(retval); } @@ -324,6 +339,8 @@ int anytone_close(RIG *rig) int retval = RIG_OK; ENTERFUNC; + char *cmd = "+ADATA:00,000\r\n"; + anytone_transaction(rig, cmd, strlen(cmd), 0); RETURNFUNC(retval); } @@ -452,12 +469,13 @@ int anytone_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt) } else { - char buf[8] = { 0x41, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x06 }; + //char buf[8] = { 0x41, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x06 }; + char *cmd = "+ADATA:00,001\r\na\r\n"; - if (!ptt) { buf[1] = 0x01; } + if (!ptt) { cmd = "+ADATA:00,023\r\nV\r\n"; } MUTEX_LOCK(p->mutex); - anytone_transaction(rig, buf, 8, 1); + anytone_transaction(rig, cmd, strlen(cmd), 1); anytone_priv_data_t *p = rig->state.priv; p->ptt = ptt; MUTEX_UNLOCK(p->mutex); @@ -466,6 +484,50 @@ int anytone_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt) RETURNFUNC(retval); } +int anytone_get_freq(RIG *rig, vfo_t vfo, freq_t *freq) +{ + char cmd[32]; + + if (vfo == RIG_VFO_A) + { + SNPRINTF(cmd, sizeof(cmd), "+ADATA:00,119\r\n"); + cmd[15] = 0x04; + cmd[16] = 0x2c; + cmd[17] = 0x07; + cmd[18] = 0x00; + cmd[19] = 0x00; + cmd[21] = 0x00; + cmd[22] = 0x00; + cmd[23] = 0x0d; + cmd[24] = 0x0a; + } + else + { + SNPRINTF(cmd, sizeof(cmd), "+ADATA:00,006\r\n"); + cmd[15] = 0x04; + cmd[16] = 0x2d; + cmd[17] = 0x07; + cmd[18] = 0x00; + cmd[19] = 0x00; + cmd[21] = 0x00; + cmd[22] = 0x00; + cmd[23] = 0x0d; + cmd[24] = 0x0a; + } + + write_block(&rig->state.rigport, (unsigned char *)cmd, 25); + unsigned char buf[64]; + int retval = read_block(&rig->state.rigport, buf, 135); + + if (retval == 135) + { + *freq = buf[17] * 10e7 + buf[18] * 10e5 + buf[19] * 10e3 + buf[20] * 10e1; + retval = RIG_OK; + } + + return RIG_OK; +} + // --------------------------------------------------------------------------- // END OF FILE // --------------------------------------------------------------------------- diff --git a/rigs/anytone/anytone.h b/rigs/anytone/anytone.h index c3c39353f..1b1c6d0c4 100644 --- a/rigs/anytone/anytone.h +++ b/rigs/anytone/anytone.h @@ -42,4 +42,6 @@ extern int anytone_get_ptt(RIG *rig, vfo_t vfo,ptt_t *ptt); extern int anytone_set_vfo(RIG *rig, vfo_t vfo); extern int anytone_get_vfo(RIG *rig, vfo_t *vfo); +extern int anytone_get_freq(RIG *rig, vfo_t vfo, freq_t *freq); + #endif /* _ANYTONE_H */ diff --git a/rigs/anytone/d578.c b/rigs/anytone/d578.c index f6d56dd37..e16cbb3d4 100644 --- a/rigs/anytone/d578.c +++ b/rigs/anytone/d578.c @@ -84,6 +84,8 @@ const struct rig_caps anytone_d578_caps = .get_ptt = anytone_get_ptt, .set_ptt = anytone_set_ptt, + .get_freq = anytone_get_freq, + .hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS }; diff --git a/simulators/simatd578.c b/simulators/simatd578.c index 82b07a027..d04296a4a 100644 --- a/simulators/simatd578.c +++ b/simulators/simatd578.c @@ -36,22 +36,23 @@ getmyline(int fd, unsigned char *buf) int n = 0; memset(buf, 0, BUFSIZE); - // seemd the anytone only gives 8-byte commands and 1-byte responses - while (i < 8 && read(fd, &c, 1) > 0) + // seems the anytone only gives 8-byte commands and 1-byte responses + do { - if (i == 0 && c == 0x06) - { - write(fd, &c, 1); - } - else + int bytes = read(fd, &c, 1); + if (bytes > 0) { buf[i++] = c; - n++; } + n++; } + while (c != 0x0a); + + printf("n=%d \n", n); + + for (i = 0; i < n; ++i) { printf("%02x ", buf[i]); } - printf("n=%d %02x %02x %02x %02x %02x %02x %02x %02x\n", n, buf[0], buf[1], - buf[2], buf[3], buf[4], buf[5], buf[6], buf[7]); + printf("\n"); return n; } diff --git a/src/debug.c b/src/debug.c index ae7420fca..693b7c92c 100644 --- a/src/debug.c +++ b/src/debug.c @@ -149,6 +149,19 @@ void HAMLIB_API rig_set_debug(enum rig_debug_level_e debug_level) rig_debug_level = debug_level; } +/** + * \brief Get the current debug level. + * + * \param debug_level Equivalent to the `-v` option of the utilities. + * + * Allows for obtaining the current debug level + * + */ +void HAMLIB_API rig_get_debug(enum rig_debug_level_e *debug_level) +{ + *debug_level = rig_debug_level; +} + /** * \brief Test if a given debug level is active. diff --git a/src/misc.c b/src/misc.c index 8a3b1c4ee..5180143c3 100644 --- a/src/misc.c +++ b/src/misc.c @@ -2188,8 +2188,8 @@ int HAMLIB_API rig_flush_force(hamlib_port_t *port, int flush_async_data) } #ifndef RIG_FLUSH_REMOVE - rig_debug(RIG_DEBUG_TRACE, "%s: called for %s device\n", __func__, - port->type.rig == RIG_PORT_SERIAL ? "serial" : "network"); +// rig_debug(RIG_DEBUG_TRACE, "%s: called for %s device\n", __func__, +// port->type.rig == RIG_PORT_SERIAL ? "serial" : "network"); if (port->type.rig == RIG_PORT_NETWORK || port->type.rig == RIG_PORT_UDP_NETWORK) diff --git a/src/serial.c b/src/serial.c index 4ce4baba0..eae1ac7ea 100644 --- a/src/serial.c +++ b/src/serial.c @@ -799,7 +799,7 @@ int HAMLIB_API serial_flush(hamlib_port_t *p) p->timeout = timeout_save; p->timeout_retry = timeout_retry_save; - rig_debug(RIG_DEBUG_VERBOSE, "tcflush%s\n", ""); +// rig_debug(RIG_DEBUG_VERBOSE, "tcflush%s\n", ""); // we also do this flush https://github.com/Hamlib/Hamlib/issues/1241 tcflush(p->fd,TCIFLUSH); commit e1e570d19a944bd8918ad085b904ba6ffa7733ef Author: Mike Black W9MDB <mdb...@ya...> Date: Sun Jun 4 07:56:10 2023 -0500 Add documentaion for FT-817 diff --git a/rigs/yaesu/FT-817CAT.pdf b/rigs/yaesu/FT-817CAT.pdf new file mode 100755 index 000000000..76058cb31 Binary files /dev/null and b/rigs/yaesu/FT-817CAT.pdf differ diff --git a/rigs/yaesu/FT-817MemoryMap.pdf b/rigs/yaesu/FT-817MemoryMap.pdf new file mode 100755 index 000000000..47ec3f023 Binary files /dev/null and b/rigs/yaesu/FT-817MemoryMap.pdf differ commit 48b01aa3ffb677e529e73cc8b4fe8783d9106c27 Author: Mike Black W9MDB <mdb...@ya...> Date: Sun Jun 4 07:18:00 2023 -0500 Add RIG_MODE_PKTLSB to FT817 even though it must be switched using Menu 26 Add a warning message to notify the user https://github.com/Hamlib/Hamlib/issues/1308 diff --git a/rigs/yaesu/ft817.c b/rigs/yaesu/ft817.c index e30d4268a..17c86bb1a 100644 --- a/rigs/yaesu/ft817.c +++ b/rigs/yaesu/ft817.c @@ -292,7 +292,7 @@ const struct rig_caps ft817_caps = RIG_MODEL(RIG_MODEL_FT817), .model_name = "FT-817", .mfg_name = "Yaesu", - .version = "20230429.1", + .version = "20230604.0", .copyright = "LGPL", .status = RIG_STATUS_STABLE, .rig_type = RIG_TYPE_TRANSCEIVER, @@ -1498,6 +1498,7 @@ static int ft817_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) case RIG_MODE_RTTY: case RIG_MODE_PKTUSB: + case RIG_MODE_PKTLSB: /* user has to have correct DIG mode setup on rig */ index = FT817_NATIVE_CAT_SET_MODE_DIG; break; diff --git a/src/rig.c b/src/rig.c index ed7074c92..6af805c4b 100644 --- a/src/rig.c +++ b/src/rig.c @@ -2420,6 +2420,10 @@ int HAMLIB_API rig_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) retcode = caps->set_mode(rig, vfo, mode, width); rig_debug(RIG_DEBUG_TRACE, "%s: targetable retcode after set_mode(%s)=%d\n", __func__, rig_strrmode(mode), retcode); + if (rig->caps->rig_model == RIG_MODEL_FT817) + { + rig_debug(RIG_DEBUG_WARN, "%s: FT817 must use Menu 26 to switch between upper/lower sideband, Hamlib only sets DIG mode\n", __func__); + } } else { commit a6de41e206d8d8fa2bab59069d052d9953b5e757 Author: Mike Black W9MDB <mdb...@ya...> Date: Sat Jun 3 16:50:30 2023 -0500 rigctld can now see RIG_LEVEL values correctly https://github.com/Hamlib/Hamlib/issues/1305 diff --git a/include/hamlib/rig.h b/include/hamlib/rig.h index 424f404e0..c6666adae 100644 --- a/include/hamlib/rig.h +++ b/include/hamlib/rig.h @@ -2630,6 +2630,55 @@ struct rig_state { freq_t offset_vfoa; /*!< Offset to apply to VFOA/Main set_freq */ freq_t offset_vfob; /*!< Offset to apply to VFOB/Sub set_freq */ struct multicast_s *multicast; /*!< Pointer to multicast server data */ + // Adding a number of items so netrigctl can see the real rig information + // Eventually may want to add these so that rigctld can see more of the backend + // But that will come later if requested -- for now they just fill out dumpstate.c + rig_model_t rig_model; /*!< Rig model. */ + const char *model_name; /*!< Model name. */ + const char *mfg_name; /*!< Manufacturer. */ + const char *version; /*!< Driver version. */ + const char *copyright; /*!< Copyright info. */ + enum rig_status_e status; /*!< Driver status. */ + int rig_type; /*!< Rig type. */ + ptt_type_t ptt_type; /*!< Type of the PTT port. */ + dcd_type_t dcd_type; /*!< Type of the DCD port. */ + rig_port_t port_type; /*!< Type of communication port. */ + int serial_rate_min; /*!< Minimum serial speed. */ + int serial_rate_max; /*!< Maximum serial speed. */ + int serial_data_bits; /*!< Number of data bits. */ + int serial_stop_bits; /*!< Number of stop bits. */ + enum serial_parity_e serial_parity; /*!< Parity. */ + enum serial_handshake_e serial_handshake; /*!< Handshake. */ + int write_delay; /*!< Delay between each byte sent out, in mS */ + int post_write_delay; /*!< Delay between each commands send out, in mS */ + int timeout; /*!< Timeout, in mS */ + int retry; /*!< Maximum number of retries if command fails, 0 to disable */ + int targetable_vfo; /*!< Bit field list of direct VFO access commands */ + int async_data_supported; /*!< Indicates that rig is capable of outputting asynchronous data updates, such as transceive state updates or spectrum data. 1 if true, 0 otherwise. */ + int agc_level_count; /*!< Number of supported AGC levels. Zero indicates all modes should be available (for backwards-compatibility). */ + enum agc_level_e agc_levels[HAMLIB_MAX_AGC_LEVELS]; /*!< Supported AGC levels */ + tone_t *ctcss_list; /*!< CTCSS tones list, zero ended */ + tone_t *dcs_list; /*!< DCS code list, zero ended */ + vfo_op_t vfo_ops; /*!< VFO op bit field list */ + scan_t scan_ops; /*!< Scan bit field list */ + int transceive; /*!< \deprecated Use async_data_supported instead */ + int bank_qty; /*!< Number of banks */ + int chan_desc_sz; /*!< Max length of memory channel name */ + freq_range_t rx_range_list1[HAMLIB_FRQRANGESIZ]; /*!< Receive frequency range list #1 */ + freq_range_t tx_range_list1[HAMLIB_FRQRANGESIZ]; /*!< Transmit frequency range list #1 */ + freq_range_t rx_range_list2[HAMLIB_FRQRANGESIZ]; /*!< Receive frequency range list #2 */ + freq_range_t tx_range_list2[HAMLIB_FRQRANGESIZ]; /*!< Transmit frequency range list #2 */ + freq_range_t rx_range_list3[HAMLIB_FRQRANGESIZ]; /*!< Receive frequency range list #3 */ + freq_range_t tx_range_list3[HAMLIB_FRQRANGESIZ]; /*!< Transmit frequency range list #3 */ + freq_range_t rx_range_list4[HAMLIB_FRQRANGESIZ]; /*!< Receive frequency range list #4 */ + freq_range_t tx_range_list4[HAMLIB_FRQRANGESIZ]; /*!< Transmit frequency range list #4 */ + freq_range_t rx_range_list5[HAMLIB_FRQRANGESIZ]; /*!< Receive frequency range list #5 */ + freq_range_t tx_range_list5[HAMLIB_FRQRANGESIZ]; /*!< Transmit frequency range list #5 */ + struct rig_spectrum_scope spectrum_scopes[HAMLIB_MAX_SPECTRUM_SCOPES]; /*!< Supported spectrum scopes. The array index must match the scope ID. Last entry must have NULL name. */ + enum rig_spectrum_mode_e spectrum_modes[HAMLIB_MAX_SPECTRUM_MODES]; /*!< Supported spectrum scope modes.... [truncated message content] |