[Hamlib-commits] Hamlib -- Ham radio control libraries branch master updated. 32f37d390ffeaa83f9480
Library to control radio transceivers and receivers
Brought to you by:
n0nb
|
From: n0nb <n0...@us...> - 2023-12-26 01:18:23
|
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 32f37d390ffeaa83f9480780cde15a2cad9b3592 (commit)
via 3ba1bc2c19300d73f8883d828574331ba662b5c5 (commit)
via b2850ff7a80719a669523a98b67143072a0969f7 (commit)
via 675ed1c85ad8f7c416007823c95592aee947445e (commit)
via a1b56bc3150709f4f36e53f91a27df8ef016e1cc (commit)
via 8c8c20c2567de23c893e63d547590704f9d04574 (commit)
via 37c0f07ecb340d32f3199d68754eb2b71fdb874a (commit)
via bca0a6ee47459d3846e2f6f23e9dede966041782 (commit)
via c3d489cca3ab288bcad7be505278240582b37009 (commit)
via 70c35791ceee33876bc519d46e1ed3ca81b0d260 (commit)
via cc81d7ecca8ee8d3f285289c1c0d0d4b5f0f31c4 (commit)
via 7542f4cc71ab57f695098f641b98bafb00979175 (commit)
via 633da3d7c67c8e885cbfbec283e1166e12831133 (commit)
via 25596f4c79d7ee7be76258f6444e9b891d7bbda4 (commit)
via 9ac55a9baa42c192424938863c27fe8a3e09ec5e (commit)
via 74062c6aba1650f0f4f5f77883e2cc3d25dc4da7 (commit)
via a5c273efe98deb09b0748e05623f68926dbc86f0 (commit)
via 3061d5e208f2f2d6d234d1a2a31b9550b00e35ce (commit)
via ea7ce78c6580b75ee471de825fefbe193cb1e8a8 (commit)
via 576ed8266ae4cb9234b7d1582c15d4a173d5c559 (commit)
via 7334da6d89a8a5451088746e508af8f5dc6d1dd7 (commit)
via 935cebed6ee776473f9a8397754629a86c4be1dc (commit)
via af5ea58350f34ba918685e6bd72b272a6bb1d9ad (commit)
via 48b6b4910cafd62d885e16498780e95d24fd3b13 (commit)
from 21cbd7704738d6e7da778c06145463e33f77b611 (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 32f37d390ffeaa83f9480780cde15a2cad9b3592
Author: Mike Black W9MDB <mdb...@ya...>
Date: Mon Dec 25 16:13:43 2023 -0600
Allow mulitcast receiver to continue after error==0
https://github.com/Hamlib/Hamlib/issues/1418
diff --git a/src/network.c b/src/network.c
index ebb301a75..56688787e 100644
--- a/src/network.c
+++ b/src/network.c
@@ -1056,6 +1056,8 @@ static int is_networked(char *address, int address_length)
struct sockaddr_in *sa_in = (struct sockaddr_in *)pUnicast->Address.lpSockaddr;
addr = &(sa_in->sin_addr);
}
+
+#if 0 // going to skip IPV6 for now -- should never need it on a local network
else if (pUnicast->Address.lpSockaddr->sa_family == AF_INET6) // IPv6 address
{
struct sockaddr_in6 *sa_in6 = (struct sockaddr_in6 *)
@@ -1063,6 +1065,8 @@ static int is_networked(char *address, int address_length)
addr = &(sa_in6->sin6_addr);
}
+#endif
+
// Convert IP address to string and ignore bad ones
if (addr)
{
@@ -1156,6 +1160,46 @@ int is_wireless()
#include <linux/wireless.h>
#include <ifaddrs.h>
+int is_networked(char *ipv4, int ipv4_length)
+{
+ struct ifaddrs *interfaces, *iface;
+ char addr_str[INET_ADDRSTRLEN];
+
+ // Get a list of all network interfaces
+ if (getifaddrs(&interfaces) == -1)
+ {
+ perror("getifaddrs");
+ exit(EXIT_FAILURE);
+ }
+
+ // Iterate through the list of interfaces
+ for (iface = interfaces; iface != NULL; iface = iface->ifa_next)
+ {
+ if (iface->ifa_addr
+ && iface->ifa_addr->sa_family == AF_INET) // Check it is IP4
+ {
+ // Convert the linked list of interfaces to a human readable string
+ struct sockaddr_in *sa = (struct sockaddr_in *) iface->ifa_addr;
+ inet_ntop(AF_INET, &(sa->sin_addr), addr_str, INET_ADDRSTRLEN);
+
+ if (strncmp(addr_str, "127", 3) == 0 && ipv4[0] == 0)
+ {
+ strncpy(ipv4, addr_str, ipv4_length);
+ rig_debug(RIG_DEBUG_VERBOSE, "%s: Can use %s\n", __func__, ipv4);
+ }
+ else if (strncmp(addr_str, "127", 3) != 0)
+ {
+ strncpy(ipv4, addr_str, ipv4_length);
+ rig_debug(RIG_DEBUG_VERBOSE, "%s: Will use %s\n", __func__, ipv4);
+ }
+ }
+ }
+
+ freeifaddrs(interfaces); // Free the linked list
+ return strlen(ipv4) > 0 ;
+}
+
+
int is_wireless_linux(const char *ifname)
{
int sock = socket(AF_INET, SOCK_DGRAM, 0);
@@ -1205,9 +1249,7 @@ int is_wireless()
void *multicast_receiver(void *arg)
{
char data[4096];
-#ifdef __MINGW32__
char ip4[INET6_ADDRSTRLEN];
-#endif
struct multicast_receiver_args_s *args = (struct multicast_receiver_args_s *)
arg;
@@ -1219,17 +1261,18 @@ void *multicast_receiver(void *arg)
rig_debug(RIG_DEBUG_VERBOSE, "%s(%d): Starting multicast receiver\n", __FILE__,
__LINE__);
- int optval = 1;
-
-#ifdef __MINGW32__
if (!is_networked(ip4, sizeof(ip4)))
{
- rig_debug(RIG_DEBUG_WARN, "%s: No network found...multicast disabled\n",
- __func__);
+ rig_debug(RIG_DEBUG_WARN,
+ "%s: no network detected...disabling multicast receive\n", __func__);
return NULL;
}
+ int optval = 1;
+
+#ifdef __MINGW32__
+
if (setsockopt(socket_fd, SOL_SOCKET, SO_REUSEADDR, (PCHAR)&optval,
sizeof(optval)) < 0)
#else
@@ -1265,7 +1308,7 @@ void *multicast_receiver(void *arg)
if (is_wireless())
{
rig_debug(RIG_DEBUG_VERBOSE,
- "%s: wireless detected so INADDR_ANY is being used\n", __func__);
+ "%s: wireless detected\n", __func__);
// dest_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
}
@@ -1276,6 +1319,7 @@ void *multicast_receiver(void *arg)
}
#else
+// dest_addr.sin_addr.s_addr = inet_addr(args->multicast_addr);
dest_addr.sin_addr.s_addr = inet_addr(args->multicast_addr);
#endif
dest_addr.sin_port = htons(args->multicast_port);
@@ -1321,7 +1365,11 @@ void *multicast_receiver(void *arg)
rig_debug(RIG_DEBUG_ERR, "%s: error joining multicast group %s:%d: %s\n",
__func__,
args->multicast_addr, args->multicast_port, strerror(errno));
- return NULL;
+ if (errno != 0)
+ {
+ return NULL;
+ }
+ rig_debug(RIG_DEBUG_VERBOSE, "%s: errno==0 so trying to continue\n", __func__);
}
rs->multicast_receiver_run = 1;
commit 3ba1bc2c19300d73f8883d828574331ba662b5c5
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sun Dec 24 22:26:04 2023 -0600
Get the right variable name for checking the 169.x.x.x address
https://github.com/Hamlib/Hamlib/issues/1461
diff --git a/src/network.c b/src/network.c
index fa3336890..ebb301a75 100644
--- a/src/network.c
+++ b/src/network.c
@@ -1071,7 +1071,7 @@ static int is_networked(char *address, int address_length)
sizeof(ipString)) != NULL)
{
// Use IP address if not 169.x.x.x
- if (strncmp(address, "169", 3) != 0)
+ if (strncmp(ipString, "169", 3) != 0)
{
count++;
commit b2850ff7a80719a669523a98b67143072a0969f7
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sun Dec 24 16:25:43 2023 -0600
Fix warning message on duplicate IP addresses to only when trying to use
https://github.com/Hamlib/Hamlib/issues/1461
diff --git a/src/network.c b/src/network.c
index c0d2834b5..fa3336890 100644
--- a/src/network.c
+++ b/src/network.c
@@ -1066,20 +1066,21 @@ static int is_networked(char *address, int address_length)
// Convert IP address to string and ignore bad ones
if (addr)
{
- count++;
-
- if (count > 1)
- {
- rig_debug(RIG_DEBUG_WARN,
- "%s: more than 1 address found...multicast may not work\n", __func__);
- }
if (inet_ntop(pUnicast->Address.lpSockaddr->sa_family, addr, ipString,
sizeof(ipString)) != NULL)
{
// Use IP address if not 169.x.x.x
- if (strncmp(address,"169",3) != 0)
+ if (strncmp(address, "169", 3) != 0)
{
+ count++;
+
+ if (count > 1)
+ {
+ rig_debug(RIG_DEBUG_WARN,
+ "%s: more than 1 address found...multicast may not work\n", __func__);
+ }
+
rig_debug(RIG_DEBUG_VERBOSE, "%s: Address: %s\n", ipString, ipString);
strncpy(address, ipString, address_length);
}
commit 675ed1c85ad8f7c416007823c95592aee947445e
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sun Dec 24 16:18:48 2023 -0600
Fix 169.x.x.x network detection
https://github.com/Hamlib/Hamlib/issues/1461
diff --git a/src/network.c b/src/network.c
index c093b148b..c0d2834b5 100644
--- a/src/network.c
+++ b/src/network.c
@@ -1064,7 +1064,7 @@ static int is_networked(char *address, int address_length)
}
// Convert IP address to string and ignore bad ones
- if (addr && strncmp(addr, "169", 3) != 0)
+ if (addr)
{
count++;
@@ -1077,8 +1077,12 @@ static int is_networked(char *address, int address_length)
if (inet_ntop(pUnicast->Address.lpSockaddr->sa_family, addr, ipString,
sizeof(ipString)) != NULL)
{
- rig_debug(RIG_DEBUG_VERBOSE, "%s: Address: %s\n", ipString, ipString);
- strncpy(address, ipString, address_length);
+ // Use IP address if not 169.x.x.x
+ if (strncmp(address,"169",3) != 0)
+ {
+ rig_debug(RIG_DEBUG_VERBOSE, "%s: Address: %s\n", ipString, ipString);
+ strncpy(address, ipString, address_length);
+ }
}
}
}
commit a1b56bc3150709f4f36e53f91a27df8ef016e1cc
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sun Dec 24 14:52:37 2023 -0600
Prevent multicast from trying to use 169.x.x.x network
https://github.com/Hamlib/Hamlib/issues/1461
diff --git a/src/network.c b/src/network.c
index a5d631215..c093b148b 100644
--- a/src/network.c
+++ b/src/network.c
@@ -1063,8 +1063,8 @@ static int is_networked(char *address, int address_length)
addr = &(sa_in6->sin6_addr);
}
- // Convert IP address to string
- if (addr)
+ // Convert IP address to string and ignore bad ones
+ if (addr && strncmp(addr, "169", 3) != 0)
{
count++;
@@ -1248,6 +1248,7 @@ void *multicast_receiver(void *arg)
return NULL;
}
+
#endif
memset(&dest_addr, 0, sizeof(dest_addr));
commit 8c8c20c2567de23c893e63d547590704f9d04574
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sun Dec 24 11:39:30 2023 -0600
Make multicast bind the IPV4 address if available
https://github.com/Hamlib/Hamlib/issues/1461
diff --git a/src/network.c b/src/network.c
index f50652d4a..a5d631215 100644
--- a/src/network.c
+++ b/src/network.c
@@ -1288,9 +1288,23 @@ void *multicast_receiver(void *arg)
mreq.imr_multiaddr.s_addr = inet_addr(args->multicast_addr);
- mreq.imr_interface.s_addr = htonl(INADDR_ANY);
+#ifdef __MINGW32__
+
+ // we're not worrying about IPV6 right now as that will likely never occur on home network
+ if (strlen(ip4) > 0)
+ {
+ rig_debug(RIG_DEBUG_VERBOSE, "%s: multicast binding to %s\n", __func__, ip4);
+ mreq.imr_interface.s_addr = inet_addr(ip4);
+ }
+ else
+#endif
+ {
+ rig_debug(RIG_DEBUG_VERBOSE, "%s: multicast binding to INADDR_ANY\n", __func__);
+ mreq.imr_interface.s_addr = htonl(INADDR_ANY);
+ }
#ifdef __MINGW32__
+
if (setsockopt(socket_fd, IPPROTO_IP, IP_ADD_MEMBERSHIP, (PCHAR)&mreq,
sizeof(mreq)) < 0)
#else
commit 37c0f07ecb340d32f3199d68754eb2b71fdb874a
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sat Dec 23 00:01:56 2023 -0600
Add some debug for https://github.com/Hamlib/Hamlib/issues/1461
diff --git a/src/network.c b/src/network.c
index 3f519348d..f50652d4a 100644
--- a/src/network.c
+++ b/src/network.c
@@ -85,7 +85,11 @@
#endif
#ifdef __MINGW32__
+#include <winsock2.h>
+#include <windows.h>
+#include <iphlpapi.h>
static int wsstarted;
+static int is_networked(char *address, int address_length);
#endif
//! @cond Doxygen_Suppress
@@ -910,6 +914,9 @@ void *multicast_publisher(void *arg)
{
unsigned char spectrum_data[HAMLIB_MAX_SPECTRUM_DATA];
char snapshot_buffer[HAMLIB_MAX_SNAPSHOT_PACKET_SIZE];
+#ifdef __MINGW32__
+ char ip4[32];
+#endif
struct multicast_publisher_args_s *args = (struct multicast_publisher_args_s *)
arg;
@@ -928,6 +935,17 @@ void *multicast_publisher(void *arg)
rig_debug(RIG_DEBUG_VERBOSE, "%s(%d): Starting multicast publisher\n", __FILE__,
__LINE__);
+#ifdef __MINGW32__
+
+ if (!is_networked(ip4, sizeof(ip4)))
+ {
+ rig_debug(RIG_DEBUG_WARN, "%s: no IPV4 network detected...multicast disabled\n",
+ __func__);
+ return NULL;
+ }
+
+#endif
+
snapshot_init();
memset(&dest_addr, 0, sizeof(dest_addr));
@@ -995,8 +1013,90 @@ void *multicast_publisher(void *arg)
#ifdef __MINGW32__
-#include <winsock2.h>
-#include <iphlpapi.h>
+
+static int is_networked(char *address, int address_length)
+{
+ int count = 0;
+
+ DWORD dwSize = 0;
+ DWORD dwRetVal = 0;
+ ULONG flags = GAA_FLAG_INCLUDE_PREFIX;
+ PIP_ADAPTER_ADDRESSES pAddresses = NULL;
+ PIP_ADAPTER_ADDRESSES pCurrAddresses = NULL;
+ PIP_ADAPTER_UNICAST_ADDRESS pUnicast = NULL;
+ char ipString[INET6_ADDRSTRLEN]; // large enough for both IPv4 and IPv6
+ address[0] = 0;
+
+ // First call to determine actual memory size needed
+ GetAdaptersAddresses(AF_UNSPEC, flags, NULL, NULL, &dwSize);
+ pAddresses = (IP_ADAPTER_ADDRESSES *)malloc(dwSize);
+
+ // Second call to get the actual data
+ dwRetVal = GetAdaptersAddresses(AF_UNSPEC, flags, NULL, pAddresses, &dwSize);
+
+ if (dwRetVal == NO_ERROR)
+ {
+ for (pCurrAddresses = pAddresses; pCurrAddresses != NULL;
+ pCurrAddresses = pCurrAddresses->Next)
+ {
+// if (pCurrAddresses->IfType == IF_TYPE_IEEE80211) // Wireless adapter
+ {
+ char friendlyName[256];
+ wcstombs(friendlyName, pCurrAddresses->FriendlyName, sizeof(friendlyName));
+ rig_debug(RIG_DEBUG_VERBOSE, "%s: network IfType = %d, name=%s\n", __func__,
+ (int)pCurrAddresses->IfType, friendlyName);
+
+ for (pUnicast = pCurrAddresses->FirstUnicastAddress; pUnicast != NULL;
+ pUnicast = pUnicast->Next)
+ {
+ void *addr = NULL;
+
+ if (pUnicast->Address.lpSockaddr->sa_family == AF_INET) // IPv4 address
+ {
+ struct sockaddr_in *sa_in = (struct sockaddr_in *)pUnicast->Address.lpSockaddr;
+ addr = &(sa_in->sin_addr);
+ }
+ else if (pUnicast->Address.lpSockaddr->sa_family == AF_INET6) // IPv6 address
+ {
+ struct sockaddr_in6 *sa_in6 = (struct sockaddr_in6 *)
+ pUnicast->Address.lpSockaddr;
+ addr = &(sa_in6->sin6_addr);
+ }
+
+ // Convert IP address to string
+ if (addr)
+ {
+ count++;
+
+ if (count > 1)
+ {
+ rig_debug(RIG_DEBUG_WARN,
+ "%s: more than 1 address found...multicast may not work\n", __func__);
+ }
+
+ if (inet_ntop(pUnicast->Address.lpSockaddr->sa_family, addr, ipString,
+ sizeof(ipString)) != NULL)
+ {
+ rig_debug(RIG_DEBUG_VERBOSE, "%s: Address: %s\n", ipString, ipString);
+ strncpy(address, ipString, address_length);
+ }
+ }
+ }
+
+ free(pAddresses);
+ return 1; // Wireless and addresses printed
+ }
+ }
+ }
+
+ if (pAddresses)
+ {
+ free(pAddresses);
+ }
+
+ return 0; // Not wireless or no addresses found
+}
+
int is_wireless()
{
DWORD dwSize = 0;
@@ -1100,6 +1200,9 @@ int is_wireless()
void *multicast_receiver(void *arg)
{
char data[4096];
+#ifdef __MINGW32__
+ char ip4[INET6_ADDRSTRLEN];
+#endif
struct multicast_receiver_args_s *args = (struct multicast_receiver_args_s *)
arg;
@@ -1111,10 +1214,17 @@ void *multicast_receiver(void *arg)
rig_debug(RIG_DEBUG_VERBOSE, "%s(%d): Starting multicast receiver\n", __FILE__,
__LINE__);
-
int optval = 1;
+
#ifdef __MINGW32__
+ if (!is_networked(ip4, sizeof(ip4)))
+ {
+ rig_debug(RIG_DEBUG_WARN, "%s: No network found...multicast disabled\n",
+ __func__);
+ return NULL;
+ }
+
if (setsockopt(socket_fd, SOL_SOCKET, SO_REUSEADDR, (PCHAR)&optval,
sizeof(optval)) < 0)
#else
@@ -1145,16 +1255,18 @@ void *multicast_receiver(void *arg)
#ifdef __MINGW32__
// Windows wireless cannot bind to multicast group addresses for some unknown reason
+ // Update: it's not wireless causing the error we see but we'll leave the detection in place
if (is_wireless())
{
rig_debug(RIG_DEBUG_VERBOSE,
- "%s: wireless detected so localhost is being used\n", __func__);
- dest_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
+ "%s: wireless detected so INADDR_ANY is being used\n", __func__);
+
+// dest_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
}
else
{
rig_debug(RIG_DEBUG_VERBOSE,
- "%s: no wireless detect so INADDR_ANY is being used\n", __func__);
+ "%s: no wireless detected so INADDR_ANY is being used\n", __func__);
}
#else
@@ -1296,6 +1408,9 @@ int network_multicast_publisher_start(RIG *rig, const char *multicast_addr,
multicast_publisher_priv_data *mcast_publisher_priv;
int socket_fd;
int status;
+#ifdef __MINGW32__
+ char ip4[32];
+#endif
ENTERFUNC;
@@ -1304,6 +1419,17 @@ int network_multicast_publisher_start(RIG *rig, const char *multicast_addr,
__LINE__,
multicast_addr, multicast_port);
+#ifdef __MINGW32__
+
+ if (!is_networked(ip4, sizeof(ip4)))
+ {
+ rig_debug(RIG_DEBUG_WARN, "%s: No network found...multicast disabled\n",
+ __func__);
+ return RIG_OK;
+ }
+
+#endif
+
if (multicast_addr == NULL || strcmp(multicast_addr, "0.0.0.0") == 0)
{
rig_debug(RIG_DEBUG_TRACE, "%s(%d): not starting multicast publisher\n",
commit bca0a6ee47459d3846e2f6f23e9dede966041782
Author: Mike Black W9MDB <mdb...@ya...>
Date: Fri Dec 22 16:00:40 2023 -0600
Make FLRig name simpler for rig list
diff --git a/rigs/dummy/flrig.c b/rigs/dummy/flrig.c
index f3c02ea3a..c7f6b3739 100644
--- a/rigs/dummy/flrig.c
+++ b/rigs/dummy/flrig.c
@@ -141,7 +141,7 @@ static const struct confparams flrig_ext_parms[] =
struct rig_caps flrig_caps =
{
RIG_MODEL(RIG_MODEL_FLRIG),
- .model_name = "FLRig",
+ .model_name = "",
.mfg_name = "FLRig",
.version = "20231216.0",
.copyright = "LGPL",
commit c3d489cca3ab288bcad7be505278240582b37009
Author: Mike Black W9MDB <mdb...@ya...>
Date: Fri Dec 22 09:15:22 2023 -0600
Update Thetis entry for correct display in WSJT-X
diff --git a/NEWS b/NEWS
index 50b9d8521..aee9a7730 100644
--- a/NEWS
+++ b/NEWS
@@ -13,6 +13,7 @@ Version 5.x -- future
* Change FT1000MP Mark V model names to align with FT1000MP
Version 4.6
+ * Added Thetis entry -- derived from FlexRadio/Apache PowerSDR
* Added VOICE/CW memory capability to many rigs -- thanks to David Balharrie M0DGB/G8FKH
* Add -# --skip_init option to rigctl to skip rig initialization -- useful for executing commands quickly
* rig_caps is no longer constant -- this may break some 3rd party relying on the "const" declaration. Here's an example of how to handle compatiblity.
diff --git a/rigs/kenwood/flex6xxx.c b/rigs/kenwood/flex6xxx.c
index fea17f68f..3186f7aad 100644
--- a/rigs/kenwood/flex6xxx.c
+++ b/rigs/kenwood/flex6xxx.c
@@ -1524,8 +1524,8 @@ struct rig_caps powersdr_caps =
struct rig_caps thetis_caps =
{
RIG_MODEL(RIG_MODEL_THETIS),
- .model_name = "Thetis",
- .mfg_name = "Apache",
+ .model_name = "",
+ .mfg_name = "Thetis",
.version = "20231222.0",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
commit 70c35791ceee33876bc519d46e1ed3ca81b0d260
Author: Mike Black W9MDB <mdb...@ya...>
Date: Fri Dec 22 07:51:48 2023 -0600
Add rig entry for Thetis
diff --git a/include/hamlib/riglist.h b/include/hamlib/riglist.h
index b4adaf953..541ab43e0 100644
--- a/include/hamlib/riglist.h
+++ b/include/hamlib/riglist.h
@@ -201,6 +201,7 @@
#define RIG_MODEL_SDRUNO RIG_MAKE_MODEL(RIG_KENWOOD,51)
#define RIG_MODEL_QRPLABS RIG_MAKE_MODEL(RIG_KENWOOD,52)
#define RIG_MODEL_FX4 RIG_MAKE_MODEL(RIG_KENWOOD,53)
+#define RIG_MODEL_THETIS RIG_MAKE_MODEL(RIG_KENWOOD, 54)
/*
* Icom
diff --git a/rigs/kenwood/flex6xxx.c b/rigs/kenwood/flex6xxx.c
index 50e21d15b..fea17f68f 100644
--- a/rigs/kenwood/flex6xxx.c
+++ b/rigs/kenwood/flex6xxx.c
@@ -1372,8 +1372,8 @@ struct rig_caps f6k_caps =
struct rig_caps powersdr_caps =
{
RIG_MODEL(RIG_MODEL_POWERSDR),
- .model_name = "PowerSDR/Thetis",
- .mfg_name = "FlexRadio/ANAN",
+ .model_name = "PowerSDR",
+ .mfg_name = "FlexRadio/Apache",
.version = "20231107.0",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
@@ -1518,3 +1518,155 @@ struct rig_caps powersdr_caps =
.hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS
};
+/*
+ * Thetis rig capabilities. Same as PowerSDR for now but may get new functions
+ */
+struct rig_caps thetis_caps =
+{
+ RIG_MODEL(RIG_MODEL_THETIS),
+ .model_name = "Thetis",
+ .mfg_name = "Apache",
+ .version = "20231222.0",
+ .copyright = "LGPL",
+ .status = RIG_STATUS_STABLE,
+ .rig_type = RIG_TYPE_TRANSCEIVER,
+ .ptt_type = RIG_PTT_RIG,
+ .dcd_type = RIG_DCD_NONE,
+ .port_type = RIG_PORT_SERIAL,
+ .serial_rate_min = 300,
+ .serial_rate_max = 115200,
+ .serial_data_bits = 8,
+ .serial_stop_bits = 1,
+ .serial_parity = RIG_PARITY_NONE,
+ .serial_handshake = RIG_HANDSHAKE_NONE,
+ .write_delay = 0,
+ .post_write_delay = 0,
+ // The combination of timeout and retry is important
+ // We need at least 3 seconds to do profile switches
+ // Hitting the timeout is OK as long as we retry
+ // Previous note showed FA/FB may take up to 500ms on band change
+ // Flex 1500 needs about 6 seconds for a band change in PowerSDR
+ .timeout = 800, // some band transitions can take 600ms
+ .retry = 10,
+
+ .has_get_func = POWERSDR_FUNC_ALL,
+ .has_set_func = POWERSDR_FUNC_ALL,
+ .has_get_level = POWERSDR_LEVEL_ALL,
+ .has_set_level = POWERSDR_LEVEL_SET,
+ .has_get_parm = RIG_PARM_BANDSELECT,
+ .has_set_parm = RIG_PARM_BANDSELECT,
+ .level_gran = {
+#include "level_gran_kenwood.h"
+ [LVL_KEYSPD] = { .min = { .i = 5 }, .max = { .i = 60 }, .step = { .i = 1 } },
+ }, /* FIXME: granularity */
+ .parm_gran = {
+ // there are V00 thru V13 but we don't cover them as of yet -- what rig?
+ [PARM_BANDSELECT] = {.min = {.f = 0.0f}, .max = {.f = 1.0f}, .step = {.s = "BAND160M,BAND80M,BAND60M,BAND40M,BAND30M,BAND20M,BAND17M,BAND15M,BAND12M,BAND10M,BAND6M,BAND2M,BANDWWV,BANDGEN"}}
+ },
+
+ //.extlevels = elecraft_ext_levels,
+ //.extparms = kenwood_cfg_params,
+ .preamp = { RIG_DBLST_END, },
+ .attenuator = { RIG_DBLST_END, },
+ .max_rit = Hz(0),
+ .max_xit = Hz(0),
+ .max_ifshift = Hz(0),
+ .vfo_op = kenwood_vfo_op,
+ .vfo_ops = POWERSDR_VFO_OP,
+ .targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE,
+ .transceive = RIG_TRN_RIG,
+ .agc_level_count = 6,
+ .agc_levels = { RIG_AGC_OFF, RIG_AGC_LONG, RIG_AGC_SLOW, RIG_AGC_MEDIUM, RIG_AGC_FAST, RIG_AGC_USER },
+ .bank_qty = 0,
+ .chan_desc_sz = 0,
+
+ .chan_list = { RIG_CHAN_END },
+
+ .rx_range_list1 = {
+ {kHz(30), MHz(77), POWERSDR_MODES, -1, -1, F6K_VFO, F6K_ANTS},
+ {MHz(135), MHz(165), POWERSDR_MODES, -1, - 1, F6K_VFO, F6K_ANTS},
+ RIG_FRNG_END,
+ }, /* rx range */
+ .tx_range_list1 = {
+ FRQ_RNG_HF(1, POWERSDR_MODES, mW(10), W(100), F6K_VFO, F6K_ANTS),
+ FRQ_RNG_6m(1, POWERSDR_MODES, mW(10), W(100), F6K_VFO, F6K_ANTS),
+ FRQ_RNG_2m(1, POWERSDR_MODES, mW(10), W(100), F6K_VFO, F6K_ANTS),
+ RIG_FRNG_END,
+ }, /* tx range */
+
+ .rx_range_list2 = {
+ {kHz(30), MHz(77), POWERSDR_MODES, -1, -1, F6K_VFO, F6K_ANTS},
+ { MHz(135), MHz(165), POWERSDR_MODES, -1, -1, F6K_VFO, F6K_ANTS},
+ RIG_FRNG_END,
+ }, /* rx range */
+ .tx_range_list2 = {
+ FRQ_RNG_HF(2, POWERSDR_MODES, mW(10), W(100), F6K_VFO, F6K_ANTS),
+ FRQ_RNG_6m(2, POWERSDR_MODES, mW(10), W(100), F6K_VFO, F6K_ANTS),
+ FRQ_RNG_2m(2, POWERSDR_MODES, mW(10), W(100), F6K_VFO, F6K_ANTS),
+ RIG_FRNG_END,
+ }, /* tx range */
+
+ .tuning_steps = {
+ {POWERSDR_MODES, 1},
+ RIG_TS_END,
+ },
+
+ /* mode/filter list, remember: order matters! */
+ .filters = {
+ {RIG_MODE_SSB, kHz(2.7)},
+ {RIG_MODE_SSB, kHz(3.3)},
+ {RIG_MODE_SSB, kHz(1.8)},
+ {RIG_MODE_SSB, kHz(1.6)},
+ {RIG_MODE_SSB, kHz(4.0)},
+ {RIG_MODE_SSB, RIG_FLT_ANY},
+ {RIG_MODE_CW, kHz(0.4)},
+ {RIG_MODE_CW, kHz(1.5)},
+ {RIG_MODE_CW, Hz(50)},
+ {RIG_MODE_CW, kHz(3.0)},
+ {RIG_MODE_CW, RIG_FLT_ANY},
+ {RIG_MODE_PKTUSB | RIG_MODE_PKTLSB, kHz(1.5)},
+ {RIG_MODE_PKTUSB | RIG_MODE_PKTLSB, kHz(3.0)},
+ {RIG_MODE_PKTUSB | RIG_MODE_PKTLSB, kHz(0.1)},
+ {RIG_MODE_PKTUSB | RIG_MODE_PKTLSB, RIG_FLT_ANY},
+ {RIG_MODE_AM, kHz(6)},
+ {RIG_MODE_AM, kHz(14)},
+ {RIG_MODE_AM, kHz(5.6)},
+ {RIG_MODE_AM, kHz(20.0)},
+ {RIG_MODE_AM, RIG_FLT_ANY},
+ {RIG_MODE_FM, kHz(13)}, /* TBC */
+ RIG_FLT_END,
+ },
+ .priv = (void *)& powersdr_priv_caps,
+
+ .rig_init = kenwood_init,
+ .rig_cleanup = kenwood_cleanup,
+ .rig_open = flexradio_open,
+ .rig_close = kenwood_close,
+ .set_freq = kenwood_set_freq,
+ .get_freq = kenwood_get_freq,
+ .set_mode = powersdr_set_mode,
+ .get_mode = powersdr_get_mode,
+ .set_vfo = kenwood_set_vfo,
+ .get_vfo = kenwood_get_vfo_if,
+ .set_split_vfo = kenwood_set_split_vfo,
+ .get_split_vfo = kenwood_get_split_vfo_if,
+ .get_ptt = flex6k_get_ptt,
+ .set_ptt = flex6k_set_ptt,
+ .get_powerstat = kenwood_get_powerstat,
+ .set_powerstat = kenwood_set_powerstat,
+ // TODO copy over kenwood_[set|get]_level and modify to handle DSP filter values
+ // correctly - use actual values instead of indices
+ .set_level = powersdr_set_level,
+ .get_level = powersdr_get_level,
+ .get_func = powersdr_get_func,
+ .set_func = powersdr_set_func,
+ .get_parm = powersdr_get_parm,
+ .set_parm = powersdr_set_parm,
+ //.set_ant = kenwood_set_ant_no_ack,
+ //.get_ant = kenwood_get_ant,
+ .send_morse = kenwood_send_morse,
+ .stop_morse = kenwood_stop_morse,
+ .wait_morse = rig_wait_morse,
+ .hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS
+};
+
diff --git a/rigs/kenwood/kenwood.c b/rigs/kenwood/kenwood.c
index c234a1646..fe301968f 100644
--- a/rigs/kenwood/kenwood.c
+++ b/rigs/kenwood/kenwood.c
@@ -6187,6 +6187,7 @@ DECLARE_INITRIG_BACKEND(kenwood)
rig_register(&sdruno_caps);
rig_register(&qrplabs_caps);
rig_register(&fx4_caps);
+ rig_register(&thetis_caps);
return (RIG_OK);
}
diff --git a/rigs/kenwood/kenwood.h b/rigs/kenwood/kenwood.h
index ec88254f8..338535b35 100644
--- a/rigs/kenwood/kenwood.h
+++ b/rigs/kenwood/kenwood.h
@@ -323,6 +323,7 @@ extern struct rig_caps tx500_caps;
extern struct rig_caps sdruno_caps;
extern struct rig_caps qrplabs_caps;
extern struct rig_caps fx4_caps;
+extern struct rig_caps thetis_caps;
/* use when not interested in the answer, but want to check its len */
static int inline kenwood_simple_transaction(RIG *rig, const char *cmd,
commit cc81d7ecca8ee8d3f285289c1c0d0d4b5f0f31c4
Merge: 7542f4cc7 a5c273efe
Author: Michael Black <mdb...@ya...>
Date: Thu Dec 21 08:39:12 2023 -0600
Merge pull request #1458 from DJ3CE/power_ic705905
Patch power reading of IC-705/-905
commit 7542f4cc71ab57f695098f641b98bafb00979175
Merge: 633da3d7c 25596f4c7
Author: Mike Black W9MDB <mdb...@ya...>
Date: Thu Dec 21 08:17:19 2023 -0600
Merge branch 'master' of https://github.com/Hamlib/Hamlib
commit 633da3d7c67c8e885cbfbec283e1166e12831133
Author: Mike Black W9MDB <mdb...@ya...>
Date: Thu Dec 21 08:17:08 2023 -0600
Update NEWS
diff --git a/NEWS b/NEWS
index 9fadc11a2..50b9d8521 100644
--- a/NEWS
+++ b/NEWS
@@ -13,6 +13,7 @@ Version 5.x -- future
* Change FT1000MP Mark V model names to align with FT1000MP
Version 4.6
+ * Added VOICE/CW memory capability to many rigs -- thanks to David Balharrie M0DGB/G8FKH
* Add -# --skip_init option to rigctl to skip rig initialization -- useful for executing commands quickly
* rig_caps is no longer constant -- this may break some 3rd party relying on the "const" declaration. Here's an example of how to handle compatiblity.
#ifdef RIGCAPS_NOT_CONST
commit 25596f4c79d7ee7be76258f6444e9b891d7bbda4
Merge: 9ac55a9ba 74062c6ab
Author: Michael Black <mdb...@ya...>
Date: Thu Dec 21 08:14:44 2023 -0600
Merge pull request #1459 from dgbalharrie/master
Add number of CW and Voice memories to supporting Icom, Yaesu, Kenwoo…
commit 9ac55a9baa42c192424938863c27fe8a3e09ec5e
Author: Mike Black W9MDB <mdb...@ya...>
Date: Thu Dec 21 08:13:41 2023 -0600
Add notes on voice memory for rigs
diff --git a/rigs/hamlib_voice_cw_memory_4.6.0.xlsx b/rigs/hamlib_voice_cw_memory_4.6.0.xlsx
new file mode 100755
index 000000000..bcaabccf7
Binary files /dev/null and b/rigs/hamlib_voice_cw_memory_4.6.0.xlsx differ
commit 74062c6aba1650f0f4f5f77883e2cc3d25dc4da7
Merge: 3061d5e20 ea7ce78c6
Author: Michael Black <mdb...@ya...>
Date: Thu Dec 21 07:53:27 2023 -0600
Merge branch 'master' into master
diff --cc rigs/icom/ic7300.c
index 4a8a332c7,653c15bc5..e8fbe287a
--- a/rigs/icom/ic7300.c
+++ b/rigs/icom/ic7300.c
@@@ -755,10 -753,11 +753,10 @@@ struct rig_caps ic7300_caps
.transceive = RIG_TRN_RIG,
.bank_qty = 1,
.chan_desc_sz = 0,
-
.chan_list = {
{ 1, 99, RIG_MTYPE_MEM },
- { 1, 8, RIG_MTYPE_VOICE },
- { 1, 8, RIG_MTYPE_MORSE },
- { 1, 8, RIG_MTYPE_VOICE },
- { 1, 8, RIG_MTYPE_MORSE },
++ { 1, 8, RIG_MTYPE_VOICE },
++ { 1, 8, RIG_MTYPE_MORSE },
RIG_CHAN_END,
},
@@@ -1323,10 -1318,11 +1317,10 @@@ struct rig_caps ic705_caps
.transceive = RIG_TRN_RIG,
.bank_qty = 5,
.chan_desc_sz = 0,
-
.chan_list = {
{ 1, 99, RIG_MTYPE_MEM },
- { 1, 8, RIG_MTYPE_VOICE },
- { 1, 8, RIG_MTYPE_MORSE },
- { 1, 8, RIG_MTYPE_VOICE },
- { 1, 8, RIG_MTYPE_MORSE },
++ { 1, 8, RIG_MTYPE_VOICE },
++ { 1, 8, RIG_MTYPE_MORSE },
RIG_CHAN_END,
},
@@@ -1598,10 -1592,11 +1590,10 @@@ struct rig_caps ic905_caps
.transceive = RIG_TRN_RIG,
.bank_qty = 5,
.chan_desc_sz = 0,
-
.chan_list = {
{ 1, 99, RIG_MTYPE_MEM },
- { 1, 8, RIG_MTYPE_VOICE },
- { 1, 8, RIG_MTYPE_MORSE },
- { 1, 8, RIG_MTYPE_VOICE },
- { 1, 8, RIG_MTYPE_MORSE },
++ { 1, 8, RIG_MTYPE_VOICE },
++ { 1, 8, RIG_MTYPE_MORSE },
RIG_CHAN_END,
},
commit a5c273efe98deb09b0748e05623f68926dbc86f0
Author: DJ3CE <se...@ma...>
Date: Thu Dec 21 01:18:18 2023 +0100
Patch power reading of IC-705/-905
diff --git a/rigs/icom/ic7300.c b/rigs/icom/ic7300.c
index 653c15bc5..f79a1d9b5 100644
--- a/rigs/icom/ic7300.c
+++ b/rigs/icom/ic7300.c
@@ -152,6 +152,23 @@ int ic9700_set_vfo(RIG *rig, vfo_t vfo);
#define IC705_OTHER_TX_MODES (RIG_MODE_FM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_DSTAR)
#define IC705_LEVELS (RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_AGC|RIG_LEVEL_COMP|RIG_LEVEL_BKINDL|RIG_LEVEL_NR|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT|RIG_LEVEL_CWPITCH|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN|RIG_LEVEL_KEYSPD|RIG_LEVEL_NOTCHF_RAW|RIG_LEVEL_SQL|RIG_LEVEL_RAWSTR|RIG_LEVEL_STRENGTH|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_VOXGAIN|RIG_LEVEL_ANTIVOX|RIG_LEVEL_VOXDELAY|RIG_LEVEL_SWR|RIG_LEVEL_ALC|RIG_LEVEL_RFPOWER_METER|RIG_LEVEL_RFPOWER_METER_WATTS|RIG_LEVEL_COMP_METER|RIG_LEVEL_VD_METER|RIG_LEVEL_ID_METER|RIG_LEVEL_MONITOR_GAIN|RIG_LEVEL_NB|RIG_LEVEL_SPECTRUM_MODE|RIG_LEVEL_SPECTRUM_SPAN|RIG_LEVEL_SPECTRUM_SPEED|RIG_LEVEL_SPECTRUM_REF|RIG_LEVEL_SPECTRUM_AVG|RIG_LEVEL_SPECTRUM_EDGE_LOW|RIG_LEVEL_SPECTRUM_EDGE_HIGH)
+#define IC705_RFPOWER_METER_CAL { 13, \
+ { \
+ { 0, 0.0f }, \
+ { 21, 0.50f }, \
+ { 43, 1.00f }, \
+ { 65, 1.50f }, \
+ { 83, 2.00f }, \
+ { 95, 2.50f }, \
+ { 105, 3.00f }, \
+ { 114, 3.50f }, \
+ { 124, 4.00f }, \
+ { 143, 5.00f }, \
+ { 183, 7.50f }, \
+ { 213, 10.0f }, \
+ { 255, 12.0f } \
+ } }
+
/*
* IC9700 items that differ from IC7300
*/
@@ -1407,7 +1424,7 @@ struct rig_caps ic705_caps =
.str_cal = IC7300_STR_CAL,
.swr_cal = IC7300_SWR_CAL,
.alc_cal = IC7300_ALC_CAL,
- .rfpower_meter_cal = IC7300_RFPOWER_METER_CAL,
+ .rfpower_meter_cal = IC705_RFPOWER_METER_CAL,
.comp_meter_cal = IC7300_COMP_METER_CAL,
.vd_meter_cal = IC7300_VD_METER_CAL,
.id_meter_cal = IC7300_ID_METER_CAL,
@@ -1678,7 +1695,7 @@ struct rig_caps ic905_caps =
.str_cal = IC7300_STR_CAL,
.swr_cal = IC7300_SWR_CAL,
.alc_cal = IC7300_ALC_CAL,
- .rfpower_meter_cal = IC7300_RFPOWER_METER_CAL,
+ .rfpower_meter_cal = IC705_RFPOWER_METER_CAL,
.comp_meter_cal = IC7300_COMP_METER_CAL,
.vd_meter_cal = IC7300_VD_METER_CAL,
.id_meter_cal = IC7300_ID_METER_CAL,
diff --git a/rigs/icom/icom.c b/rigs/icom/icom.c
index 949ed1d32..732e64c9e 100644
--- a/rigs/icom/icom.c
+++ b/rigs/icom/icom.c
@@ -9080,6 +9080,10 @@ int icom_power2mW(RIG *rig, unsigned int *mwpower, float power, freq_t freq,
switch (rig_id)
{
+ case RIG_MODEL_IC705:
+ case RIG_MODEL_IC905:
+ *mwpower = power * 10000;
+ break;
default:
/* Normal 100 Watts */
*mwpower = power * 100000;
commit 3061d5e208f2f2d6d234d1a2a31b9550b00e35ce
Author: davidg <da...@ba...>
Date: Wed Dec 20 21:26:57 2023 +0000
Add number of CW and Voice memories to supporting Icom, Yaesu, Kenwood and Elecraft Radios. Added added .chanlist to TS890S
diff --git a/include/hamlib/rig.h b/include/hamlib/rig.h
index 008b32eee..a4066cbf1 100644
--- a/include/hamlib/rig.h
+++ b/include/hamlib/rig.h
@@ -1663,11 +1663,10 @@ typedef enum {
\endcode
*/
struct chan_list {
- int startc; /*!< Starting memory channel \b number */
- int endc; /*!< Ending memory channel \b number */
- chan_type_t type; /*!< Memory type. see chan_type_t */
- channel_cap_t
- mem_caps; /*!< Definition of attributes that can be stored/retrieved */
+ int startc; /*!< Starting memory channel \b number */
+ int endc; /*!< Ending memory channel \b number */
+ chan_type_t type; /*!< Memory type. see chan_type_t */
+ channel_cap_t mem_caps; /*!< Definition of attributes that can be stored/retrieved */
};
//! @cond Doxygen_Suppress
diff --git a/rigs/icom/ic7100.c b/rigs/icom/ic7100.c
index 16ed4d3fc..d6cc30453 100644
--- a/rigs/icom/ic7100.c
+++ b/rigs/icom/ic7100.c
@@ -382,6 +382,7 @@ const struct rig_caps ic7100_caps =
{ 1, 396, RIG_MTYPE_MEM },
{ 397, 400, RIG_MTYPE_CALL },
{ 401, 424, RIG_MTYPE_EDGE },
+ { 1, 4, RIG_MTYPE_MORSE },
RIG_CHAN_END,
},
diff --git a/rigs/icom/ic7300.c b/rigs/icom/ic7300.c
index 06679572f..4a8a332c7 100644
--- a/rigs/icom/ic7300.c
+++ b/rigs/icom/ic7300.c
@@ -755,11 +755,10 @@ const struct rig_caps ic7300_caps =
.transceive = RIG_TRN_RIG,
.bank_qty = 1,
.chan_desc_sz = 0,
-
.chan_list = {
{ 1, 99, RIG_MTYPE_MEM },
- { 1, 8, RIG_MTYPE_VOICE },
- { 1, 8, RIG_MTYPE_MORSE },
+ { 1, 8, RIG_MTYPE_VOICE },
+ { 1, 8, RIG_MTYPE_MORSE },
RIG_CHAN_END,
},
@@ -1324,11 +1323,10 @@ const struct rig_caps ic705_caps =
.transceive = RIG_TRN_RIG,
.bank_qty = 5,
.chan_desc_sz = 0,
-
.chan_list = {
{ 1, 99, RIG_MTYPE_MEM },
- { 1, 8, RIG_MTYPE_VOICE },
- { 1, 8, RIG_MTYPE_MORSE },
+ { 1, 8, RIG_MTYPE_VOICE },
+ { 1, 8, RIG_MTYPE_MORSE },
RIG_CHAN_END,
},
@@ -1600,11 +1598,10 @@ const struct rig_caps ic905_caps =
.transceive = RIG_TRN_RIG,
.bank_qty = 5,
.chan_desc_sz = 0,
-
.chan_list = {
{ 1, 99, RIG_MTYPE_MEM },
- { 1, 8, RIG_MTYPE_VOICE },
- { 1, 8, RIG_MTYPE_MORSE },
+ { 1, 8, RIG_MTYPE_VOICE },
+ { 1, 8, RIG_MTYPE_MORSE },
RIG_CHAN_END,
},
diff --git a/rigs/icom/ic7410.c b/rigs/icom/ic7410.c
index 1ebc4707c..bb9a0db00 100644
--- a/rigs/icom/ic7410.c
+++ b/rigs/icom/ic7410.c
@@ -179,6 +179,7 @@ const struct rig_caps ic7410_caps =
.chan_list = {
{ 1, 99, RIG_MTYPE_MEM },
{ 100, 101, RIG_MTYPE_EDGE }, /* two by two */
+ { 1, 4, RIG_MTYPE_MORSE },
RIG_CHAN_END,
},
diff --git a/rigs/icom/ic7600.c b/rigs/icom/ic7600.c
index 89c0328d1..1f3c612f5 100644
--- a/rigs/icom/ic7600.c
+++ b/rigs/icom/ic7600.c
@@ -341,6 +341,7 @@ struct rig_caps ic7600_caps =
.chan_list = {
{ 1, 99, RIG_MTYPE_MEM },
{ 100, 101, RIG_MTYPE_EDGE }, /* two by two */
+ { 1, 4, RIG_MTYPE_MORSE },
RIG_CHAN_END,
},
diff --git a/rigs/icom/ic7610.c b/rigs/icom/ic7610.c
index ce327e324..dfcbddccf 100644
--- a/rigs/icom/ic7610.c
+++ b/rigs/icom/ic7610.c
@@ -422,6 +422,8 @@ struct rig_caps ic7610_caps =
.chan_list = {
{ 1, 99, RIG_MTYPE_MEM },
{ 100, 101, RIG_MTYPE_EDGE }, /* two by two */
+ { 1, 8, RIG_MTYPE_VOICE },
+ { 1, 8, RIG_MTYPE_MORSE },
RIG_CHAN_END,
},
diff --git a/rigs/icom/ic7700.c b/rigs/icom/ic7700.c
index debd3644f..61c49d861 100644
--- a/rigs/icom/ic7700.c
+++ b/rigs/icom/ic7700.c
@@ -316,6 +316,7 @@ const struct rig_caps ic7700_caps =
.chan_list = {
{ 1, 99, RIG_MTYPE_MEM },
{ 100, 101, RIG_MTYPE_EDGE }, /* two by two */
+ { 1, 4, RIG_MTYPE_MORSE },
RIG_CHAN_END,
},
diff --git a/rigs/icom/ic7800.c b/rigs/icom/ic7800.c
index 00af91d85..ad4266e94 100644
--- a/rigs/icom/ic7800.c
+++ b/rigs/icom/ic7800.c
@@ -215,6 +215,7 @@ const struct rig_caps ic7800_caps =
.chan_list = {
{ 1, 99, RIG_MTYPE_MEM },
{ 100, 101, RIG_MTYPE_EDGE }, /* two by two */
+ { 1, 4, RIG_MTYPE_MORSE },
RIG_CHAN_END,
},
diff --git a/rigs/kenwood/k2.c b/rigs/kenwood/k2.c
index bca431dde..c5359d015 100644
--- a/rigs/kenwood/k2.c
+++ b/rigs/kenwood/k2.c
@@ -160,7 +160,9 @@ const struct rig_caps k2_caps =
.bank_qty = 0,
.chan_desc_sz = 0,
- .chan_list = { RIG_CHAN_END },
+ .chan_list = {
+ { 1, 8, RIG_MTYPE_MORSE },
+ RIG_CHAN_END },
.rx_range_list1 = {
{kHz(500), MHz(30), K2_MODES, -1, -1, K2_VFO, K2_ANTS},
diff --git a/rigs/kenwood/k3.c b/rigs/kenwood/k3.c
index c81c3550f..b863d5c8d 100644
--- a/rigs/kenwood/k3.c
+++ b/rigs/kenwood/k3.c
@@ -238,7 +238,10 @@ const struct rig_caps k3_caps =
.bank_qty = 0,
.chan_desc_sz = 0,
- .chan_list = { RIG_CHAN_END },
+ .chan_list = {
+ { 1, 4, RIG_MTYPE_VOICE },
+ { 1, 4, RIG_MTYPE_MORSE },
+ RIG_CHAN_END },
.rx_range_list1 = {
{kHz(500), MHz(30), K3_MODES, -1, -1, K3_VFO, K3_ANTS},
@@ -394,7 +397,10 @@ const struct rig_caps k3s_caps =
.bank_qty = 0,
.chan_desc_sz = 0,
- .chan_list = { RIG_CHAN_END },
+ .chan_list = {
+ { 1, 4, RIG_MTYPE_VOICE },
+ { 1, 4, RIG_MTYPE_MORSE },
+ RIG_CHAN_END },
.rx_range_list1 = {
{kHz(500), MHz(30), K3_MODES, -1, -1, K3_VFO, K3_ANTS},
@@ -556,7 +562,10 @@ const struct rig_caps k4_caps =
.bank_qty = 0,
.chan_desc_sz = 0,
- .chan_list = { RIG_CHAN_END },
+ .chan_list = {
+ { 1, 4, RIG_MTYPE_VOICE },
+ { 1, 4, RIG_MTYPE_MORSE },
+ RIG_CHAN_END },
.rx_range_list1 = {
{kHz(500), MHz(30), K3_MODES, -1, -1, K3_VFO, K4_ANTS},
@@ -711,7 +720,10 @@ const struct rig_caps kx3_caps =
.bank_qty = 0,
.chan_desc_sz = 0,
- .chan_list = { RIG_CHAN_END },
+ .chan_list = {
+ { 1, 4, RIG_MTYPE_VOICE },
+ { 1, 4, RIG_MTYPE_MORSE },
+ RIG_CHAN_END },
.rx_range_list1 = {
{kHz(500), MHz(30), K3_MODES, -1, -1, K3_VFO, K3_ANTS},
@@ -866,7 +878,9 @@ const struct rig_caps kx2_caps =
.bank_qty = 0,
.chan_desc_sz = 0,
- .chan_list = { RIG_CHAN_END },
+ .chan_list = {
+ { 1, 4, RIG_MTYPE_MORSE },
+ RIG_CHAN_END },
.rx_range_list1 = {
{kHz(500), MHz(30), K3_MODES, -1, -1, K3_VFO, K3_ANTS},
diff --git a/rigs/kenwood/ts2000.c b/rigs/kenwood/ts2000.c
index 9e62a0817..1ca20d05a 100644
--- a/rigs/kenwood/ts2000.c
+++ b/rigs/kenwood/ts2000.c
@@ -1730,6 +1730,7 @@ const struct rig_caps ts2000_caps =
.chan_list = {
{ 0, 299, RIG_MTYPE_MEM, TS2000_MEM_CAP },
+ { 1, 3, RIG_MTYPE_MORSE },
RIG_CHAN_END,
},
diff --git a/rigs/kenwood/ts570.c b/rigs/kenwood/ts570.c
index 772599269..8820b8278 100644
--- a/rigs/kenwood/ts570.c
+++ b/rigs/kenwood/ts570.c
@@ -1134,6 +1134,7 @@ const struct rig_caps ts570d_caps =
.chan_list = {
{ 0, 89, RIG_MTYPE_MEM, TS570_MEM_CAP },
{ 90, 99, RIG_MTYPE_EDGE, TS570_MEM_CAP },
+ { 1, 3, RIG_MTYPE_MORSE },
RIG_CHAN_END,
},
.rx_range_list1 = {
diff --git a/rigs/kenwood/ts590.c b/rigs/kenwood/ts590.c
index 9a4c1dc48..dcec334e7 100644
--- a/rigs/kenwood/ts590.c
+++ b/rigs/kenwood/ts590.c
@@ -1994,6 +1994,7 @@ const struct rig_caps ts590sg_caps =
.chan_list = { /* TBC */
{ 0, 89, RIG_MTYPE_MEM, TS590_CHANNEL_CAPS },
{ 90, 99, RIG_MTYPE_EDGE, TS590_CHANNEL_CAPS },
+ { 1, 3, RIG_MTYPE_MORSE },
RIG_CHAN_END,
},
diff --git a/rigs/kenwood/ts870s.c b/rigs/kenwood/ts870s.c
index da45bff2d..61b1a5436 100644
--- a/rigs/kenwood/ts870s.c
+++ b/rigs/kenwood/ts870s.c
@@ -586,6 +586,7 @@ const struct rig_caps ts870s_caps =
.chan_list = {
{ 0, 89, RIG_MTYPE_MEM }, /* TBC */
{ 90, 99, RIG_MTYPE_EDGE },
+ { 1, 4, RIG_MTYPE_MORSE },
RIG_CHAN_END,
},
diff --git a/rigs/kenwood/ts890s.c b/rigs/kenwood/ts890s.c
index f71d009fb..4abd36681 100644
--- a/rigs/kenwood/ts890s.c
+++ b/rigs/kenwood/ts890s.c
@@ -414,7 +414,11 @@ const struct rig_caps ts890s_caps =
.transceive = RIG_TRN_RIG,
.agc_level_count = 5,
.agc_levels = { RIG_AGC_OFF, RIG_AGC_SLOW, RIG_AGC_MEDIUM, RIG_AGC_FAST, RIG_AGC_ON },
-
+ .chan_list = {
+ { 1, 6, RIG_MTYPE_VOICE },
+ { 1, 8, RIG_MTYPE_MORSE },
+ RIG_CHAN_END,
+ },
.rx_range_list1 = {
{kHz(100), Hz(59999999), TS890_ALL_MODES, -1, -1, TS890_VFO},
RIG_FRNG_END,
diff --git a/rigs/kenwood/ts990s.c b/rigs/kenwood/ts990s.c
index 112c3cba3..74a973fc5 100644
--- a/rigs/kenwood/ts990s.c
+++ b/rigs/kenwood/ts990s.c
@@ -181,6 +181,8 @@ const struct rig_caps ts990s_caps =
.chan_list = {
{ 0, 299, RIG_MTYPE_MEM, TS990S_MEM_CAP },
+ { 1, 6, RIG_MTYPE_VOICE },
+ { 1, 8, RIG_MTYPE_MORSE },
RIG_CHAN_END,
},
diff --git a/rigs/yaesu/ft1200.c b/rigs/yaesu/ft1200.c
index eca6c098f..eb3b20acc 100644
--- a/rigs/yaesu/ft1200.c
+++ b/rigs/yaesu/ft1200.c
@@ -202,6 +202,7 @@ const struct rig_caps ftdx1200_caps =
.chan_list = {
{ 1, 99, RIG_MTYPE_MEM, NEWCAT_MEM_CAP },
{ 100, 117, RIG_MTYPE_EDGE, NEWCAT_MEM_CAP }, /* two by two */
+ { 1, 5, RIG_MTYPE_MORSE },
RIG_CHAN_END,
},
diff --git a/rigs/yaesu/ft2000.c b/rigs/yaesu/ft2000.c
index c8fc41cbd..35c146a45 100644
--- a/rigs/yaesu/ft2000.c
+++ b/rigs/yaesu/ft2000.c
@@ -184,6 +184,7 @@ const struct rig_caps ft2000_caps =
.chan_list = {
{ 1, 99, RIG_MTYPE_MEM, NEWCAT_MEM_CAP },
{ 100, 117, RIG_MTYPE_EDGE, NEWCAT_MEM_CAP }, /* two by two */
+ { 1, 5, RIG_MTYPE_MORSE },
RIG_CHAN_END,
},
diff --git a/rigs/yaesu/ft3000.c b/rigs/yaesu/ft3000.c
index 7774b7895..6c1f27edc 100644
--- a/rigs/yaesu/ft3000.c
+++ b/rigs/yaesu/ft3000.c
@@ -297,6 +297,7 @@ const struct rig_caps ftdx3000_caps =
.chan_list = {
{ 1, 99, RIG_MTYPE_MEM, NEWCAT_MEM_CAP },
{ 100, 117, RIG_MTYPE_EDGE, NEWCAT_MEM_CAP }, /* two by two */
+ { 1, 5, RIG_MTYPE_MORSE },
RIG_CHAN_END,
},
diff --git a/rigs/yaesu/ft450.c b/rigs/yaesu/ft450.c
index 5377211b9..a6fa56ec3 100644
--- a/rigs/yaesu/ft450.c
+++ b/rigs/yaesu/ft450.c
@@ -94,7 +94,8 @@ const struct rig_caps ft450_caps =
.chan_list = {
{ 1, 500, RIG_MTYPE_MEM, NEWCAT_MEM_CAP },
{ 501, 504, RIG_MTYPE_EDGE, NEWCAT_MEM_CAP }, /* two by two */
- RIG_CHAN_END,
+ { 1, 1, RIG_MTYPE_MORSE },
+ RIG_CHAN_END,
},
.rx_range_list1 = {
diff --git a/rigs/yaesu/ft5000.c b/rigs/yaesu/ft5000.c
index d7421b280..284063a7e 100644
--- a/rigs/yaesu/ft5000.c
+++ b/rigs/yaesu/ft5000.c
@@ -192,6 +192,7 @@ const struct rig_caps ftdx5000_caps =
.chan_list = {
{ 1, 99, RIG_MTYPE_MEM, NEWCAT_MEM_CAP },
{ 100, 117, RIG_MTYPE_EDGE, NEWCAT_MEM_CAP }, /* two by two */
+ { 1, 5, RIG_MTYPE_MORSE },
RIG_CHAN_END,
},
diff --git a/rigs/yaesu/ft710.c b/rigs/yaesu/ft710.c
index 792350806..10e8ae249 100644
--- a/rigs/yaesu/ft710.c
+++ b/rigs/yaesu/ft710.c
@@ -177,6 +177,7 @@ const struct rig_caps ft710_caps =
.comp_meter_cal = FT710_COMP_CAL,
.chan_list = {
{ 1, 99, RIG_MTYPE_MEM, NEWCAT_MEM_CAP },
+ { 1, 5, RIG_MTYPE_MORSE },
RIG_CHAN_END,
},
diff --git a/rigs/yaesu/ft891.c b/rigs/yaesu/ft891.c
index 2d5309344..68a426145 100644
--- a/rigs/yaesu/ft891.c
+++ b/rigs/yaesu/ft891.c
@@ -185,6 +185,7 @@ const struct rig_caps ft891_caps =
.str_cal = FT891_STR_CAL,
.chan_list = {
{ 1, 99, RIG_MTYPE_MEM, NEWCAT_MEM_CAP },
+ { 1, 5, RIG_MTYPE_MORSE },
RIG_CHAN_END,
},
diff --git a/rigs/yaesu/ft9000.c b/rigs/yaesu/ft9000.c
index 7f5b61f85..cbc7aa28e 100644
--- a/rigs/yaesu/ft9000.c
+++ b/rigs/yaesu/ft9000.c
@@ -98,6 +98,7 @@ const struct rig_caps ft9000_caps =
/* TBC */
{ 1, 99, RIG_MTYPE_MEM, NEWCAT_MEM_CAP },
{ 100, 117, RIG_MTYPE_EDGE, NEWCAT_MEM_CAP }, /* two by two */
+ { 1, 5, RIG_MTYPE_MORSE },
RIG_CHAN_END,
},
@@ -274,6 +275,7 @@ const struct rig_caps ft9000Old_caps =
/* TBC */
{ 1, 99, RIG_MTYPE_MEM, NEWCAT_MEM_CAP },
{ 100, 117, RIG_MTYPE_EDGE, NEWCAT_MEM_CAP }, /* two by two */
+ { 1, 5, RIG_MTYPE_MORSE },
RIG_CHAN_END,
},
diff --git a/rigs/yaesu/ft950.c b/rigs/yaesu/ft950.c
index 2ee973d55..6c99924d3 100644
--- a/rigs/yaesu/ft950.c
+++ b/rigs/yaesu/ft950.c
@@ -141,7 +141,7 @@ const struct rig_caps ft950_caps =
{ 125, 128, RIG_MTYPE_BAND, NEWCAT_MEM_CAP }, /* 60M Channels U51-U54 or US1-US4, if available */
{ 130, 130, RIG_MTYPE_BAND, NEWCAT_MEM_CAP }, /* 60M Channel U55 or US5, if available */
{ 131, 131, RIG_MTYPE_BAND, NEWCAT_MEM_CAP }, /* EU5, 5167.5 KHz Alaska Emergency Freq, if available */
-
+ { 1, 5, RIG_MTYPE_MORSE },
RIG_CHAN_END,
},
diff --git a/rigs/yaesu/ft991.c b/rigs/yaesu/ft991.c
index cd5ef0503..9449df4a3 100644
--- a/rigs/yaesu/ft991.c
+++ b/rigs/yaesu/ft991.c
@@ -233,7 +233,9 @@ const struct rig_caps ft991_caps =
{ 1, 99, RIG_MTYPE_MEM, NEWCAT_MEM_CAP },
{ 100, 117, RIG_MTYPE_MEM, NEWCAT_MEM_CAP }, // P1L-P9U PMS channels
{ 118, 127, RIG_MTYPE_MEM, NEWCAT_MEM_CAP }, // 5xx 5MHz band
- RIG_CHAN_END,
+ { 1, 5, RIG_MTYPE_VOICE },
+ { 1, 5, RIG_MTYPE_MORSE },
+ RIG_CHAN_END,
},
// Rig only has 1 model
diff --git a/rigs/yaesu/ftdx10.c b/rigs/yaesu/ftdx10.c
index 65e9dade9..11c486b42 100644
--- a/rigs/yaesu/ftdx10.c
+++ b/rigs/yaesu/ftdx10.c
@@ -190,6 +190,7 @@ const struct rig_caps ftdx10_caps =
.chan_list = {
{ 1, 99, RIG_MTYPE_MEM, NEWCAT_MEM_CAP },
{ 501, 510, RIG_MTYPE_BAND, NEWCAT_MEM_CAP }, /* 60M Channels, 5-01 - 5-10, if available */
+ { 1, 5, RIG_MTYPE_MORSE },
RIG_CHAN_END,
},
diff --git a/rigs/yaesu/ftdx101.c b/rigs/yaesu/ftdx101.c
index 0473b7b85..e22527687 100644
--- a/rigs/yaesu/ftdx101.c
+++ b/rigs/yaesu/ftdx101.c
@@ -232,6 +232,7 @@ const struct rig_caps ftdx101d_caps =
{ 1, 99, RIG_MTYPE_MEM, NEWCAT_MEM_CAP },
{ 100, 117, RIG_MTYPE_MEM, NEWCAT_MEM_CAP }, // P1L-P9U PMS channels
{ 501, 510, RIG_MTYPE_MEM, NEWCAT_MEM_CAP }, // 5xx 5MHz band
+ { 1, 5, RIG_MTYPE_MORSE },
RIG_CHAN_END,
},
diff --git a/rigs/yaesu/ftdx101mp.c b/rigs/yaesu/ftdx101mp.c
index bf0cd4a0a..6f2b59284 100644
--- a/rigs/yaesu/ftdx101mp.c
+++ b/rigs/yaesu/ftdx101mp.c
@@ -133,6 +133,7 @@ const struct rig_caps ftdx101mp_caps =
{ 1, 99, RIG_MTYPE_MEM, NEWCAT_MEM_CAP },
{ 100, 117, RIG_MTYPE_MEM, NEWCAT_MEM_CAP }, // P1L-P9U PMS channels
{ 501, 510, RIG_MTYPE_MEM, NEWCAT_MEM_CAP }, // 5xx 5MHz band
+ { 1, 5, RIG_MTYPE_MORSE },
RIG_CHAN_END,
},
commit ea7ce78c6580b75ee471de825fefbe193cb1e8a8
Author: Mike Black W9MDB <mdb...@ya...>
Date: Tue Dec 19 22:42:08 2023 -0600
Balance RETURNFUNC in id5100.c
diff --git a/rigs/icom/id5100.c b/rigs/icom/id5100.c
index b1e114843..006bcdce3 100644
--- a/rigs/icom/id5100.c
+++ b/rigs/icom/id5100.c
@@ -142,7 +142,7 @@ int id5100_set_vfo(RIG *rig, vfo_t vfo)
RETURNFUNC2(retval);
}
- return retval;
+ RETURNFUNC(retval);
}
commit 576ed8266ae4cb9234b7d1582c15d4a173d5c559
Author: Mike Black W9MDB <mdb...@ya...>
Date: Tue Dec 19 16:23:03 2023 -0600
Ignore scanfc Invalid argument for rotctld
https://github.com/Hamlib/Hamlib/issues/1391
diff --git a/tests/rotctl_parse.c b/tests/rotctl_parse.c
index 032284353..027f310a3 100644
--- a/tests/rotctl_parse.c
+++ b/tests/rotctl_parse.c
@@ -417,6 +417,10 @@ static int scanfc(FILE *fin, const char *format, void *p)
}
if (ferror(fin)) { rig_debug(RIG_DEBUG_ERR, "%s: errno=%d, %s\n", __func__, errno, strerror(errno)); clearerr(fin); }
+ if (errno == 22) // invalid arg we will continue
+ {
+ continue;
+ }
return ret;
}
commit 7334da6d89a8a5451088746e508af8f5dc6d1dd7
Author: Mike Black W9MDB <mdb...@ya...>
Date: Tue Dec 19 09:29:31 2023 -0600
Split AZ/EL request into two transactions for easycomm.c
diff --git a/rotators/easycomm/easycomm.c b/rotators/easycomm/easycomm.c
index 419c16fd8..99c3a64b6 100644
--- a/rotators/easycomm/easycomm.c
+++ b/rotators/easycomm/easycomm.c
@@ -135,7 +135,7 @@ easycomm_rot_get_position(ROT *rot, azimuth_t *az, elevation_t *el)
rig_debug(RIG_DEBUG_TRACE, "%s called\n", __func__);
- SNPRINTF(cmdstr, sizeof(cmdstr), "AZ EL \n");
+ SNPRINTF(cmdstr, sizeof(cmdstr), "AZ\n");
retval = easycomm_transaction(rot, cmdstr, ackbuf, sizeof(ackbuf));
@@ -145,16 +145,37 @@ easycomm_rot_get_position(ROT *rot, azimuth_t *az, elevation_t *el)
return retval;
}
- /* Parse parse string to extract AZ,EL values */
+ /* Parse parse string to extract AZ values */
rig_debug(RIG_DEBUG_TRACE, "%s got response: %s\n", __func__, ackbuf);
- retval = sscanf(ackbuf, "AZ%f EL%f", az, el);
+ retval = sscanf(ackbuf, "AZ%f", az);
- if (retval != 2)
+ if (retval != 1)
{
rig_debug(RIG_DEBUG_ERR, "%s: unknown response (%s)\n", __func__, ackbuf);
return -RIG_ERJCTED;
}
+ SNPRINTF(cmdstr, sizeof(cmdstr), "EL\n");
+
+ retval = easycomm_transaction(rot, cmdstr, ackbuf, sizeof(ackbuf));
+
+ if (retval != RIG_OK)
+ {
+ rig_debug(RIG_DEBUG_TRACE, "%s got error: %d\n", __func__, retval);
+ return retval;
+ }
+
+ /* Parse parse string to extract EL values */
+ rig_debug(RIG_DEBUG_TRACE, "%s got response: %s\n", __func__, ackbuf);
+ retval = sscanf(ackbuf, "EL%f", el);
+
+ if (retval != 1)
+ {
+ rig_debug(RIG_DEBUG_ERR, "%s: unknown response (%s)\n", __func__, ackbuf);
+ return -RIG_ERJCTED;
+ }
+
+
return RIG_OK;
}
@@ -527,7 +548,7 @@ const struct rot_caps easycomm1_rot_caps =
ROT_MODEL(ROT_MODEL_EASYCOMM1),
.model_name = "EasycommI",
.mfg_name = "Hamlib",
- .version = "20231218.0",
+ .version = "20231219.0",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rot_type = ROT_TYPE_OTHER,
commit 935cebed6ee776473f9a8397754629a86c4be1dc
Author: Mike Black W9MDB <mdb...@ya...>
Date: Mon Dec 18 16:44:57 2023 -0600
Remove some debug and fix debug indendation
diff --git a/src/misc.h b/src/misc.h
index f2d135c94..98c130d45 100644
--- a/src/misc.h
+++ b/src/misc.h
@@ -166,8 +166,7 @@ void errmsg(int err, char *s, const char *func, const char *file, int line);
// could be a function call
#define RETURNFUNC(rc) {do { \
int rctmp = rc; \
- rig_debug(RIG_DEBUG_VERBOSE, "%.*s%d:%s(%d):%s returning(%ld) %s\n", rig->state.depth-1, spaces(), rig->state.depth, __FILENAME__, __LINE__, __func__, (long int) (rctmp), rctmp<0?rigerror2(rctmp):""); \
- if (rig->state.depth == 0) rig_debug(RIG_DEBUG_ERR, "%s(%d) depth=0 ******************\n", __func__, __LINE__); \
+ rig_debug(RIG_DEBUG_VERBOSE, "%.*s%d:%s(%d):%s returning(%ld) %s\n", rig->state.depth, spaces(), rig->state.depth, __FILENAME__, __LINE__, __func__, (long int) (rctmp), rctmp<0?rigerror2(rctmp):""); \
--rig->state.depth; \
return (rctmp); \
} while(0);}
commit af5ea58350f34ba918685e6bd72b272a6bb1d9ad
Author: Mike Black W9MDB <mdb...@ya...>
Date: Mon Dec 18 15:26:46 2023 -0600
Add -# --skip_init option to rigctl
diff --git a/NEWS b/NEWS
index 644b7fd1a..9fadc11a2 100644
--- a/NEWS
+++ b/NEWS
@@ -13,6 +13,7 @@ Version 5.x -- future
* Change FT1000MP Mark V model names to align with FT1000MP
Version 4.6
+ * Add -# --skip_init option to rigctl to skip rig initialization -- useful for executing commands quickly
* rig_caps is no longer constant -- this may break some 3rd party relying on the "const" declaration. Here's an example of how to handle compatiblity.
#ifdef RIGCAPS_NOT_CONST
static int add_to_list(struct rig_caps* rc, void*)
diff --git a/doc/man1/rigctl.1 b/doc/man1/rigctl.1
index db4535e2e..baf5b8fa8 100644
--- a/doc/man1/rigctl.1
+++ b/doc/man1/rigctl.1
@@ -1424,6 +1424,11 @@ Can also use 1,2,3,4
Reads GPIO1, GPIO2, GPIO3, GPIO4 on the GPIO ptt port
Can also use 1,2,3,4
.
+.TP
+.BR skip_init
+.EX
+Skips rig initialization -- useful when executing commands with rigctl to speed up things
+.
.SH READLINE
.
If
diff --git a/include/hamlib/rig.h b/include/hamlib/rig.h
index 718e55d90..4428dab24 100644
--- a/include/hamlib/rig.h
+++ b/include/hamlib/rig.h
@@ -156,6 +156,7 @@ typedef struct
// cookie is 26-char time code plus 10-char (2^31-1) random number
#define HAMLIB_COOKIE_SIZE 37
extern int cookie_use; // this is global as once one client requests it everybody needs to honor it
+extern int skip_init; // allow rigctl to skip any radio commands at startup
//! @cond Doxygen_Suppress
extern HAMLIB_EXPORT_VAR(const char) hamlib_version[];
diff --git a/src/rig.c b/src/rig.c
index ce6a185ba..40051a2c8 100644
--- a/src/rig.c
+++ b/src/rig.c
@@ -100,6 +100,7 @@ const char hamlib_version[21] = "Hamlib " PACKAGE_VERSION;
const char *hamlib_version2 = "Hamlib " PACKAGE_VERSION " " HAMLIBDATETIME " "
ARCHBITS;
HAMLIB_EXPORT_VAR(int) cookie_use;
+HAMLIB_EXPORT_VAR(int) skip_init;
HAMLIB_EXPORT_VAR(int) lock_mode; // for use by rigctld
HAMLIB_EXPORT_VAR(powerstat_t)
rig_powerstat; // for use by both rigctld and rigctl
@@ -1326,6 +1327,8 @@ int HAMLIB_API rig_open(RIG *rig)
}
#if defined(HAVE_PTHREAD)
+ if (!skip_init)
+ {
status = async_data_handler_start(rig);
if (status < 0)
@@ -1334,7 +1337,7 @@ int HAMLIB_API rig_open(RIG *rig)
rig->state.comm_status = RIG_COMM_STATUS_ERROR;
RETURNFUNC2(status);
}
-
+ }
#endif
rs->comm_state = 1;
@@ -1354,7 +1357,7 @@ int HAMLIB_API rig_open(RIG *rig)
if (caps->rig_open != NULL)
{
- if (caps->get_powerstat != NULL)
+ if (caps->get_powerstat != NULL && !skip_init)
{
powerstat_t powerflag;
status = rig_get_powerstat(rig, &powerflag);
@@ -1388,8 +1391,11 @@ int HAMLIB_API rig_open(RIG *rig)
{
remove_opened_rig(rig);
#if d...
[truncated message content] |