hamlib-cvs-digest Mailing List for Ham Radio Control Libraries (Page 10)
Library to control radio transceivers and receivers
Brought to you by:
n0nb
You can subscribe to this list here.
| 2000 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(57) |
Nov
(27) |
Dec
(25) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2001 |
Jan
(41) |
Feb
(101) |
Mar
(60) |
Apr
(32) |
May
(32) |
Jun
(198) |
Jul
(95) |
Aug
(60) |
Sep
(48) |
Oct
(96) |
Nov
(27) |
Dec
(222) |
| 2002 |
Jan
(180) |
Feb
(46) |
Mar
(68) |
Apr
(11) |
May
(36) |
Jun
(34) |
Jul
(113) |
Aug
(42) |
Sep
(71) |
Oct
(65) |
Nov
(116) |
Dec
(40) |
| 2003 |
Jan
(32) |
Feb
(92) |
Mar
(29) |
Apr
(102) |
May
(21) |
Jun
(34) |
Jul
(3) |
Aug
(60) |
Sep
(30) |
Oct
(62) |
Nov
(57) |
Dec
(33) |
| 2004 |
Jan
(28) |
Feb
(46) |
Mar
(16) |
Apr
(14) |
May
(31) |
Jun
(21) |
Jul
(10) |
Aug
(80) |
Sep
(42) |
Oct
(11) |
Nov
(28) |
Dec
(13) |
| 2005 |
Jan
(35) |
Feb
(26) |
Mar
(20) |
Apr
(118) |
May
(2) |
Jun
(5) |
Jul
|
Aug
|
Sep
(5) |
Oct
(1) |
Nov
(13) |
Dec
(1) |
| 2006 |
Jan
(9) |
Feb
(25) |
Mar
(22) |
Apr
(6) |
May
|
Jun
|
Jul
(2) |
Aug
(1) |
Sep
(3) |
Oct
(46) |
Nov
(13) |
Dec
(7) |
| 2007 |
Jan
(9) |
Feb
(14) |
Mar
(3) |
Apr
|
May
(6) |
Jun
(1) |
Jul
|
Aug
(11) |
Sep
(7) |
Oct
(8) |
Nov
(41) |
Dec
(3) |
| 2008 |
Jan
(27) |
Feb
(16) |
Mar
(13) |
Apr
(23) |
May
(39) |
Jun
(4) |
Jul
(7) |
Aug
(1) |
Sep
(13) |
Oct
(52) |
Nov
(44) |
Dec
(55) |
| 2009 |
Jan
(72) |
Feb
(69) |
Mar
|
Apr
|
May
|
Jun
(13) |
Jul
(1) |
Aug
(6) |
Sep
(15) |
Oct
(11) |
Nov
(31) |
Dec
(20) |
| 2010 |
Jan
(24) |
Feb
(21) |
Mar
(22) |
Apr
(40) |
May
(38) |
Jun
(4) |
Jul
(2) |
Aug
(22) |
Sep
(19) |
Oct
(14) |
Nov
(5) |
Dec
(8) |
| 2011 |
Jan
(14) |
Feb
(36) |
Mar
(6) |
Apr
|
May
|
Jun
(23) |
Jul
(13) |
Aug
(8) |
Sep
(7) |
Oct
|
Nov
(3) |
Dec
(9) |
| 2012 |
Jan
(17) |
Feb
(13) |
Mar
(10) |
Apr
|
May
(1) |
Jun
(14) |
Jul
(4) |
Aug
(12) |
Sep
(2) |
Oct
(24) |
Nov
(14) |
Dec
(2) |
| 2013 |
Jan
(4) |
Feb
(3) |
Mar
(3) |
Apr
(3) |
May
(10) |
Jun
(4) |
Jul
(7) |
Aug
|
Sep
(15) |
Oct
(5) |
Nov
(1) |
Dec
(2) |
| 2014 |
Jan
|
Feb
(8) |
Mar
(1) |
Apr
(3) |
May
(1) |
Jun
|
Jul
|
Aug
(1) |
Sep
(3) |
Oct
(7) |
Nov
(6) |
Dec
(3) |
| 2015 |
Jan
(4) |
Feb
(5) |
Mar
(8) |
Apr
(8) |
May
(2) |
Jun
|
Jul
(4) |
Aug
(7) |
Sep
(8) |
Oct
|
Nov
(6) |
Dec
(4) |
| 2016 |
Jan
(6) |
Feb
(26) |
Mar
(3) |
Apr
(10) |
May
(6) |
Jun
(5) |
Jul
(1) |
Aug
(4) |
Sep
(3) |
Oct
(4) |
Nov
(3) |
Dec
(10) |
| 2017 |
Jan
(11) |
Feb
(11) |
Mar
(2) |
Apr
(1) |
May
(7) |
Jun
(2) |
Jul
(11) |
Aug
(9) |
Sep
(5) |
Oct
(5) |
Nov
(1) |
Dec
(2) |
| 2018 |
Jan
(5) |
Feb
(2) |
Mar
(19) |
Apr
(7) |
May
(11) |
Jun
(3) |
Jul
(4) |
Aug
(10) |
Sep
(2) |
Oct
(8) |
Nov
(6) |
Dec
(9) |
| 2019 |
Jan
(9) |
Feb
(6) |
Mar
(2) |
Apr
(4) |
May
(6) |
Jun
(9) |
Jul
(6) |
Aug
(3) |
Sep
(5) |
Oct
(2) |
Nov
(8) |
Dec
(9) |
| 2020 |
Jan
(15) |
Feb
(1) |
Mar
(18) |
Apr
(33) |
May
(43) |
Jun
(87) |
Jul
(45) |
Aug
(8) |
Sep
(43) |
Oct
(3) |
Nov
(5) |
Dec
(42) |
| 2021 |
Jan
(116) |
Feb
(40) |
Mar
(58) |
Apr
(48) |
May
(29) |
Jun
(2) |
Jul
|
Aug
(22) |
Sep
(18) |
Oct
(1) |
Nov
|
Dec
(3) |
| 2022 |
Jan
(1) |
Feb
(1) |
Mar
|
Apr
(1) |
May
(2) |
Jun
(1) |
Jul
|
Aug
(1) |
Sep
|
Oct
(6) |
Nov
(2) |
Dec
(9) |
| 2023 |
Jan
(10) |
Feb
|
Mar
|
Apr
(10) |
May
(3) |
Jun
(1) |
Jul
(2) |
Aug
(4) |
Sep
(1) |
Oct
|
Nov
(2) |
Dec
(3) |
| 2024 |
Jan
(4) |
Feb
(1) |
Mar
(2) |
Apr
(2) |
May
(5) |
Jun
(3) |
Jul
(1) |
Aug
(2) |
Sep
|
Oct
(2) |
Nov
(3) |
Dec
(9) |
| 2025 |
Jan
(5) |
Feb
(5) |
Mar
|
Apr
(10) |
May
(20) |
Jun
(43) |
Jul
(24) |
Aug
(47) |
Sep
(38) |
Oct
(5) |
Nov
(3) |
Dec
(4) |
|
From: n0nb <n0...@us...> - 2024-05-15 21:41:21
|
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 cd453b5b7167392cfdfd2e748bafc74334af4c7f (commit)
from 9e816e37ff87c4a6b434014b49dc2d8d7a6d60a3 (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 cd453b5b7167392cfdfd2e748bafc74334af4c7f
Author: Mike Black W9MDB <mdb...@ya...>
Date: Tue May 14 10:27:39 2024 -0500
Reduce verbose level on debug to VERBOSE instead of ERR in newcat.c
diff --git a/rigs/yaesu/newcat.c b/rigs/yaesu/newcat.c
index 5b5665543..85a20865c 100644
--- a/rigs/yaesu/newcat.c
+++ b/rigs/yaesu/newcat.c
@@ -1332,7 +1332,7 @@ int newcat_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
// just drop through
}
- rig_debug(RIG_DEBUG_ERR, "%s: is_ft991=%d, CACHE(rig)->split=%d, vfo=%s\n",
+ rig_debug(RIG_DEBUG_VERBOSE, "%s: is_ft991=%d, CACHE(rig)->split=%d, vfo=%s\n",
__func__, is_ft991, cachep->split, rig_strvfo(vfo));
if (priv->band_index < 0) { priv->band_index = newcat_band_index(freq); }
-----------------------------------------------------------------------
Summary of changes:
rigs/yaesu/newcat.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
hooks/post-receive
--
Hamlib -- Ham radio control libraries
|
|
From: n0nb <n0...@us...> - 2024-05-13 20:27:15
|
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 9e816e37ff87c4a6b434014b49dc2d8d7a6d60a3 (commit)
via efbe36570148bb17da5f44af6c1482d77166d8ba (commit)
via c06255d364574b312858200fd11d3710708edf5b (commit)
via 1988b7cf4fa901687635f4463f2bf959e288b493 (commit)
via ee6b89d45bd2f0e42d40cd974d79d6ae697e50bc (commit)
via 3c4b1a83f8f5afa5af2c838bc5a3bb4c4ebb1d3e (commit)
via 37df9e93bd0267b2dd967ccb40741154430476cf (commit)
via 2d30291caa23b17b1177b3f219e5ba37d3be5f25 (commit)
via 64a119367d1fd156088e865c7108ba8d85e600ad (commit)
via d71f7a93857a2eb1b551b13b5b6add03cbbe0b4e (commit)
via 09fbc4cb64895925e3a00ec8d314f6b3e275ad7f (commit)
via cf91e96333979368a0bde89d5c31b7ed4f39bce5 (commit)
from 8221961de2e24121482e72959c77c27edaa74740 (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 9e816e37ff87c4a6b434014b49dc2d8d7a6d60a3
Merge: c06255d36 efbe36570
Author: Michael Black <mdb...@ya...>
Date: Sun May 12 14:37:50 2024 -0500
Merge pull request #1551 from Hamlib/revert-1539-libgpiod
Revert "Refactoring GPIO push-to-talk logic to use libgpiod rather than the d…"
commit efbe36570148bb17da5f44af6c1482d77166d8ba
Author: Michael Black <mdb...@ya...>
Date: Sun May 12 14:37:23 2024 -0500
Revert "Refactoring GPIO push-to-talk logic to use libgpiod rather than the d…"
diff --git a/configure.ac b/configure.ac
index 77bb0cc4b..cfcd2eb1f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -529,9 +529,6 @@ AS_IF([test x"${cf_with_xml_support}" = "xyes"], [
AC_SUBST([LIBXML2_LIBS])
AC_SUBST([LIBXML2_CFLAGS])
-# TODO: I don't know how to use autoconf
-LIBS="$LIBS -lgpiod"
-
## ----------------- ##
## Language bindings ##
diff --git a/include/hamlib/rig.h b/include/hamlib/rig.h
index a03890f8e..fc360c692 100644
--- a/include/hamlib/rig.h
+++ b/include/hamlib/rig.h
@@ -2340,7 +2340,6 @@ typedef struct hamlib_port {
int fd; /*!< File descriptor */
void *handle; /*!< handle for USB */
- void *gpio; /*!< handle for GPIO */
int write_delay; /*!< Delay between each byte sent out, in mS */
int post_write_delay; /*!< Delay between each commands send out, in mS */
diff --git a/src/gpio.c b/src/gpio.c
index 88bfd305f..e5fcfb597 100644
--- a/src/gpio.c
+++ b/src/gpio.c
@@ -19,91 +19,135 @@
*
*/
-#include "gpio.h"
-
-#include <errno.h>
-#include <fcntl.h>
#include <string.h>
-#include <sys/stat.h>
-#include <sys/types.h>
+#include <errno.h>
#include <unistd.h>
-#include <gpiod.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
-#ifndef GPIOD_PATH
-// This is what's used on the Raspberry Pi 4; I'm not sure about others
-#define GPIO_CHIP_NAME "gpiochip0"
-#endif
+#include "gpio.h"
-#define GPIO_CHIP_CONSUMER "Hamlib"
int gpio_open(hamlib_port_t *port, int output, int on_value)
{
- struct gpiod_chip *chip;
- struct gpiod_line *line;
+ char pathname[HAMLIB_FILPATHLEN * 2];
+ FILE *fexp, *fdir;
+ int fd;
+ char *dir;
port->parm.gpio.on_value = on_value;
- chip = gpiod_chip_open_by_name(GPIO_CHIP_NAME);
+ SNPRINTF(pathname, HAMLIB_FILPATHLEN, "/sys/class/gpio/export");
+ fexp = fopen(pathname, "w");
- if (!chip)
+ if (!fexp)
{
- rig_debug(RIG_DEBUG_ERR, "Failed to open GPIO chip %s: %s\n", GPIO_CHIP_NAME, strerror(errno));
+ rig_debug(RIG_DEBUG_ERR,
+ "Export GPIO%s (using %s): %s\n",
+ port->pathname,
+ pathname,
+ strerror(errno));
return -RIG_EIO;
}
- line = gpiod_chip_get_line(chip, atoi(port->pathname));
- if (!line)
+ fprintf(fexp, "%s\n", port->pathname);
+ fclose(fexp);
+
+ SNPRINTF(pathname,
+ sizeof(pathname),
+ "/sys/class/gpio/gpio%s/direction",
+ port->pathname);
+ fdir = fopen(pathname, "w");
+
+ if (!fdir)
{
- rig_debug(RIG_DEBUG_ERR, "Failed to acquire GPIO%s: %s\n", port->pathname, strerror(errno));
- gpiod_chip_close(chip);
+ rig_debug(RIG_DEBUG_ERR,
+ "GPIO%s direction (using %s): %s\n",
+ port->pathname,
+ pathname,
+ strerror(errno));
return -RIG_EIO;
}
- if ((output && gpiod_line_request_output(line, GPIO_CHIP_CONSUMER, 0) < 0) ||
- (!output && gpiod_line_request_input(line, GPIO_CHIP_CONSUMER) < 0))
+ dir = output ? "out" : "in";
+ rig_debug(RIG_DEBUG_VERBOSE, "Setting direction of GPIO%s to %s\n",
+ port->pathname, dir);
+ fprintf(fdir, "%s\n", dir);
+ fclose(fdir);
+
+ SNPRINTF(pathname,
+ sizeof(pathname),
+ "/sys/class/gpio/gpio%s/value",
+ port->pathname);
+ fd = open(pathname, O_RDWR);
+
+ if (fd < 0)
{
- rig_debug(RIG_DEBUG_ERR, "Failed to set GPIO%s to %s mode: %s\n",
- port->pathname, (output ? "OUTPUT" : "INPUT"), strerror(errno));
- gpiod_line_release(line);
- gpiod_chip_close(chip);
+ rig_debug(RIG_DEBUG_ERR,
+ "GPIO%s opening value file %s: %s\n",
+ port->pathname,
+ pathname,
+ strerror(errno));
return -RIG_EIO;
}
- port->gpio = line;
-
- return RIG_OK;
+ port->fd = fd;
+ return fd;
}
+
int gpio_close(hamlib_port_t *port)
{
- gpiod_line_close_chip((struct gpiod_line*)port->gpio);
- return RIG_OK;
+ int retval;
+ char pathname[HAMLIB_FILPATHLEN * 2];
+ FILE *fexp;
+
+ retval = close(port->fd);
+
+ SNPRINTF(pathname, HAMLIB_FILPATHLEN, "/sys/class/gpio/unexport");
+ fexp = fopen(pathname, "w");
+
+ if (!fexp)
+ {
+ rig_debug(RIG_DEBUG_ERR,
+ "Export GPIO%s (using %s): %s\n",
+ port->pathname,
+ pathname,
+ strerror(errno));
+ return -RIG_EIO;
+ }
+
+ fprintf(fexp, "%s\n", port->pathname);
+ fclose(fexp);
+ return retval;
}
+
int gpio_ptt_set(hamlib_port_t *port, ptt_t pttx)
{
- int result = 0;
+ char *val;
port->parm.gpio.value = pttx != RIG_PTT_OFF;
- if ((port->parm.gpio.value && port->parm.gpio.on_value) ||
- (!port->parm.gpio.value && !port->parm.gpio.on_value))
+ if ((port->parm.gpio.value && port->parm.gpio.on_value)
+ || (!port->parm.gpio.value && !port->parm.gpio.on_value))
{
- result = gpiod_line_set_value((struct gpiod_line*)port->gpio, 1);
+ val = "1\n";
}
else
{
- result = gpiod_line_set_value((struct gpiod_line*)port->gpio, 0);
+ val = "0\n";
}
- if (result)
+ if (write(port->fd, val, strlen(val)) <= 0)
{
- rig_debug(RIG_DEBUG_ERR, "Failed to set the value of GPIO%s: %s\n", port->pathname, strerror(errno));
return -RIG_EIO;
}
return RIG_OK;
}
+
int gpio_ptt_get(hamlib_port_t *port, ptt_t *pttx)
{
if (port->parm.gpio.value)
@@ -120,15 +164,21 @@ int gpio_ptt_get(hamlib_port_t *port, ptt_t *pttx)
int gpio_dcd_get(hamlib_port_t *port, dcd_t *dcdx)
{
- int val = gpiod_line_get_value((struct gpiod_line*)port->gpio);
- if (val < 0)
+ char val;
+ int port_value;
+
+ lseek(port->fd, 0, SEEK_SET);
+
+ if (read(port->fd, &val, sizeof(val)) <= 0)
{
- rig_debug(RIG_DEBUG_ERR, "Failed to read the value of GPIO%s: %s\n", port->pathname, strerror(errno));
+ return -RIG_EIO;
}
rig_debug(RIG_DEBUG_VERBOSE, "DCD GPIO pin value: %c\n", val);
- if (val == port->parm.gpio.on_value)
+ port_value = val - '0';
+
+ if (port_value == port->parm.gpio.on_value)
{
*dcdx = RIG_DCD_ON;
}
commit c06255d364574b312858200fd11d3710708edf5b
Merge: 1988b7cf4 cf91e9633
Author: Michael Black <mdb...@ya...>
Date: Sun May 12 11:41:31 2024 -0500
Merge pull request #1539 from aschuhardt/libgpiod
Refactoring GPIO push-to-talk logic to use libgpiod rather than the d…
commit 1988b7cf4fa901687635f4463f2bf959e288b493
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sat May 11 17:31:38 2024 -0500
Update simelecraft.c
diff --git a/simulators/simelecraft.c b/simulators/simelecraft.c
index 10fbee1f2..3fe6d53a7 100644
--- a/simulators/simelecraft.c
+++ b/simulators/simelecraft.c
@@ -37,6 +37,7 @@ int ai = 0;
int dt = 0;
int modea = 2;
int modeb = 2;
+int ptt = 0;
// ID 0310 == 310, Must drop leading zero
typedef enum nc_rigid_e
@@ -162,8 +163,10 @@ int main(int argc, char *argv[])
printf("%s\n", buf);
hl_usleep(50 * 1000);
//pbuf = "IF059014200000+000000700000;";
- pbuf = "IF00007230000 -000000 0001000001 ;" ;
+ pbuf = strdup("IF00007230000 -000000 00?1000001 ;") ;
+ pbuf[28] = ptt == 0 ? '0' : '1';
WRITE(fd, pbuf, strlen(pbuf));
+ free(pbuf);
}
else if (strcmp(buf, "ID;") == 0)
{
@@ -312,9 +315,13 @@ int main(int argc, char *argv[])
{
WRITE(fd, "K30;", 4);
}
+ else if (strcmp(buf, "RVD;") == 0)
+ {
+ WRITE(fd, "RVD02.36;", 9);
+ }
else if (strcmp(buf, "RVM;") == 0)
{
- WRITE(fd, "RV02.37;", 8);
+ WRITE(fd, "RVM02.37;", 9);
}
else if (strcmp(buf, "MD;") == 0)
{
@@ -430,6 +437,14 @@ int main(int argc, char *argv[])
{
printf("Morse: %s\n", buf);
}
+ else if (strncmp(buf, "TX", 2) == 0)
+ {
+ ptt = 1;
+ }
+ else if (strncmp(buf, "RX", 2) == 0)
+ {
+ ptt = 0;
+ }
else if (strlen(buf) > 0)
{
fprintf(stderr, "Unknown command: %s\n", buf);
commit ee6b89d45bd2f0e42d40cd974d79d6ae697e50bc
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sat May 11 17:30:10 2024 -0500
Fix currvfo warning message in kenwood.c
diff --git a/rigs/kenwood/kenwood.c b/rigs/kenwood/kenwood.c
index e0f029721..4c6069c26 100644
--- a/rigs/kenwood/kenwood.c
+++ b/rigs/kenwood/kenwood.c
@@ -1745,6 +1745,7 @@ int kenwood_get_split_vfo_if(RIG *rig, vfo_t rxvfo, split_t *split,
switch (priv->info[30])
{
case '0':
+ rs->rx_vfo = STATE(rig)->current_vfo;
if (rs->rx_vfo == RIG_VFO_A)
{
HAMLIB_TRACE;
@@ -1757,6 +1758,12 @@ int kenwood_get_split_vfo_if(RIG *rig, vfo_t rxvfo, split_t *split,
*txvfo = rs->tx_vfo = priv->tx_vfo = (*split
&& !transmitting) ? RIG_VFO_B : RIG_VFO_A;
}
+ else if (rs->rx_vfo == RIG_VFO_CURR)
+ {
+ HAMLIB_TRACE;
+ *txvfo = rs->tx_vfo = priv->tx_vfo = (*split
+ && !transmitting) ? RIG_VFO_B : RIG_VFO_A;
+ }
else
{
rig_debug(RIG_DEBUG_WARN, "%s(%d): unknown rx_vfo=%s\n", __func__, __LINE__,
diff --git a/rigs/kenwood/kenwood.h b/rigs/kenwood/kenwood.h
index ec2331ab8..bbbeac31b 100644
--- a/rigs/kenwood/kenwood.h
+++ b/rigs/kenwood/kenwood.h
@@ -28,7 +28,7 @@
#include "token.h"
#include "idx_builtin.h"
-#define BACKEND_VER "20240505"
+#define BACKEND_VER "20240511"
#define EOM_KEN ';'
#define EOM_TH '\r'
commit 3c4b1a83f8f5afa5af2c838bc5a3bb4c4ebb1d3e
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sat May 11 12:51:25 2024 -0500
Change IC7100 so x25x26 always and update icom.c to detect probably better
diff --git a/rigs/icom/ic7100.c b/rigs/icom/ic7100.c
index 4499bfd9d..a7ff0288e 100644
--- a/rigs/icom/ic7100.c
+++ b/rigs/icom/ic7100.c
@@ -201,8 +201,8 @@ static const struct icom_priv_caps ic7100_priv_caps =
.extcmds = ic7100_extcmds,
.antack_len = 2,
.ant_count = 2,
- .x25x26_always = 0,
- .x25x26_possibly = 1,
+ .x25x26_always = 1,
+ .x25x26_possibly = 0,
.x1cx03_always = 0,
.x1cx03_possibly = 1,
.x1ax03_supported = 1,
@@ -327,7 +327,7 @@ struct rig_caps ic7100_caps =
RIG_MODEL(RIG_MODEL_IC7100),
.model_name = "IC-7100",
.mfg_name = "Icom",
- .version = BACKEND_VER ".6",
+ .version = BACKEND_VER ".7",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
diff --git a/rigs/icom/icom.h b/rigs/icom/icom.h
index 212a35c2f..131db64b9 100644
--- a/rigs/icom/icom.h
+++ b/rigs/icom/icom.h
@@ -35,7 +35,7 @@
#include <sys/time.h>
#endif
-#define BACKEND_VER "20240504"
+#define BACKEND_VER "20240511"
#define ICOM_IS_ID31 rig_is_model(rig, RIG_MODEL_ID31)
#define ICOM_IS_ID51 rig_is_model(rig, RIG_MODEL_ID51)
commit 37df9e93bd0267b2dd967ccb40741154430476cf
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sat May 11 07:55:32 2024 -0500
Add RIG_OP_TUNE to Elecraftc K2 -- update docs a bit
diff --git a/rigs/kenwood/k2.c b/rigs/kenwood/k2.c
index 7e2142d86..0ebf14d12 100644
--- a/rigs/kenwood/k2.c
+++ b/rigs/kenwood/k2.c
@@ -38,7 +38,7 @@
RIG_LEVEL_STRENGTH|RIG_LEVEL_RFPOWER|RIG_LEVEL_KEYSPD)
#define K2_VFO (RIG_VFO_A|RIG_VFO_B)
-#define K2_VFO_OP (RIG_OP_UP|RIG_OP_DOWN)
+#define K2_VFO_OP (RIG_OP_UP|RIG_OP_DOWN|RIG_OP_TUNE)
#define K2_ANTS (RIG_ANT_1|RIG_ANT_2)
@@ -99,6 +99,7 @@ int k2_open(RIG *rig);
int k2_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width);
int k2_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width);
int k2_get_ext_level(RIG *rig, vfo_t vfo, hamlib_token_t token, value_t *val);
+int k2_vfo_op(RIG *rig, vfo_t vfo, vfo_op_t op);
/* Private function declarations */
int k2_probe_mdfw(RIG *rig, struct kenwood_priv_data *priv);
@@ -118,7 +119,7 @@ struct rig_caps k2_caps =
RIG_MODEL(RIG_MODEL_K2),
.model_name = "K2",
.mfg_name = "Elecraft",
- .version = BACKEND_VER ".0",
+ .version = BACKEND_VER ".2",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
@@ -237,7 +238,7 @@ struct rig_caps k2_caps =
.set_level = kenwood_set_level,
.get_level = kenwood_get_level,
.get_ext_level = k2_get_ext_level,
- .vfo_op = kenwood_vfo_op,
+ .vfo_op = k2_vfo_op,
.set_trn = kenwood_set_trn,
.get_powerstat = kenwood_get_powerstat,
.get_trn = kenwood_get_trn,
@@ -804,3 +805,17 @@ int k2_pop_fw_lst(RIG *rig, const char *cmd)
return RIG_OK;
}
+int k2_vfo_op(RIG *rig, vfo_t vfo, vfo_op_t op)
+{
+ char buf[32];
+ switch (op)
+ {
+ case RIG_OP_TUNE: // K2
+ SNPRINTF(buf, sizeof(buf), "SWH20");
+ break;
+ default: return kenwood_vfo_op(rig, vfo, op);
+ }
+ return kenwood_transaction(rig, buf, NULL, 0);
+}
+
+
diff --git a/rigs/kenwood/k3.c b/rigs/kenwood/k3.c
index 03057d144..a0a6c33a3 100644
--- a/rigs/kenwood/k3.c
+++ b/rigs/kenwood/k3.c
@@ -2495,7 +2495,7 @@ int k3_vfo_op(RIG *rig, vfo_t vfo, vfo_op_t op)
char buf[32];
switch (op)
{
- case RIG_OP_TUNE: // K2 KX2 K3 KX3 K4
+ case RIG_OP_TUNE: // KX2 K3 KX3 K4 -- K2 needs SWH20 to it's in k2.c
SNPRINTF(buf, sizeof(buf), "SWH16");
break;
default: return kenwood_vfo_op(rig, vfo, op);
commit 2d30291caa23b17b1177b3f219e5ba37d3be5f25
Merge: 64a119367 d71f7a938
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sat May 11 07:52:41 2024 -0500
Merge branch 'master' of https://github.com/Hamlib/Hamlib
commit 64a119367d1fd156088e865c7108ba8d85e600ad
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sat May 11 07:42:20 2024 -0500
Add RIG_OP_TUNE to Elecraft KX2 K3 KX3 K4
diff --git a/rigs/kenwood/k3.c b/rigs/kenwood/k3.c
index 779fc504a..03057d144 100644
--- a/rigs/kenwood/k3.c
+++ b/rigs/kenwood/k3.c
@@ -52,7 +52,7 @@
RIG_LEVEL_NR|RIG_LEVEL_MONITOR_GAIN|RIG_LEVEL_RAWSTR|RIG_LEVEL_RFPOWER_METER|RIG_LEVEL_RFPOWER_METER_WATTS)
#define K3_VFO (RIG_VFO_A|RIG_VFO_B)
-#define K3_VFO_OP (RIG_OP_UP|RIG_OP_DOWN)
+#define K3_VFO_OP (RIG_OP_UP|RIG_OP_DOWN|RIG_OP_TUNE)
#define K3_ANTS (RIG_ANT_1|RIG_ANT_2)
#define K4_ANTS (RIG_ANT_1|RIG_ANT_2|RIG_ANT_3|RIG_ANT_4)
@@ -161,6 +161,7 @@ int kx3_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val);
int kx3_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val);
int k3_set_func(RIG *rig, vfo_t vfo, setting_t func, int status);
int k3_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status);
+int k3_vfo_op(RIG *rig, vfo_t vfo, vfo_op_t op);
int k3_power2mW(RIG *rig, unsigned int *mwpower, float power, freq_t freq,
rmode_t mode);
@@ -197,7 +198,7 @@ struct rig_caps k3_caps =
RIG_MODEL(RIG_MODEL_K3),
.model_name = "K3",
.mfg_name = "Elecraft",
- .version = BACKEND_VER ".27",
+ .version = BACKEND_VER ".28",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
@@ -334,7 +335,7 @@ struct rig_caps k3_caps =
.get_level = k3_get_level,
.set_ext_level = k3_set_ext_level,
.get_ext_level = k3_get_ext_level,
- .vfo_op = kenwood_vfo_op,
+ .vfo_op = k3_vfo_op,
.set_trn = kenwood_set_trn,
.get_trn = kenwood_get_trn,
.set_powerstat = kenwood_set_powerstat,
@@ -356,7 +357,7 @@ struct rig_caps k3s_caps =
RIG_MODEL(RIG_MODEL_K3S),
.model_name = "K3S",
.mfg_name = "Elecraft",
- .version = BACKEND_VER ".21",
+ .version = BACKEND_VER ".22",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
@@ -493,7 +494,7 @@ struct rig_caps k3s_caps =
.get_level = k3_get_level,
.set_ext_level = k3_set_ext_level,
.get_ext_level = k3_get_ext_level,
- .vfo_op = kenwood_vfo_op,
+ .vfo_op = k3_vfo_op,
.set_trn = kenwood_set_trn,
.get_trn = kenwood_get_trn,
.set_powerstat = kenwood_set_powerstat,
@@ -516,7 +517,7 @@ struct rig_caps k4_caps =
RIG_MODEL(RIG_MODEL_K4),
.model_name = "K4",
.mfg_name = "Elecraft",
- .version = BACKEND_VER ".28",
+ .version = BACKEND_VER ".29",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
@@ -658,7 +659,7 @@ struct rig_caps k4_caps =
.get_level = k3_get_level,
.set_ext_level = k3_set_ext_level,
.get_ext_level = k3_get_ext_level,
- .vfo_op = kenwood_vfo_op,
+ .vfo_op = k3_vfo_op,
.set_trn = kenwood_set_trn,
.get_trn = kenwood_get_trn,
.set_powerstat = kenwood_set_powerstat,
@@ -680,7 +681,7 @@ struct rig_caps kx3_caps =
RIG_MODEL(RIG_MODEL_KX3),
.model_name = "KX3",
.mfg_name = "Elecraft",
- .version = BACKEND_VER ".19",
+ .version = BACKEND_VER ".20",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
@@ -816,7 +817,7 @@ struct rig_caps kx3_caps =
.get_level = kx3_get_level,
.set_ext_level = k3_set_ext_level,
.get_ext_level = k3_get_ext_level,
- .vfo_op = kenwood_vfo_op,
+ .vfo_op = k3_vfo_op,
.set_trn = kenwood_set_trn,
.get_trn = kenwood_get_trn,
.set_powerstat = kenwood_set_powerstat,
@@ -838,7 +839,7 @@ struct rig_caps kx2_caps =
RIG_MODEL(RIG_MODEL_KX2),
.model_name = "KX2",
.mfg_name = "Elecraft",
- .version = BACKEND_VER ".18",
+ .version = BACKEND_VER ".19",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
@@ -973,7 +974,7 @@ struct rig_caps kx2_caps =
.get_level = kx3_get_level,
.set_ext_level = k3_set_ext_level,
.get_ext_level = k3_get_ext_level,
- .vfo_op = kenwood_vfo_op,
+ .vfo_op = k3_vfo_op,
.set_trn = kenwood_set_trn,
.get_trn = kenwood_get_trn,
.set_powerstat = kenwood_set_powerstat,
@@ -2478,6 +2479,10 @@ int k3_set_func(RIG *rig, vfo_t vfo, setting_t func, int status)
SNPRINTF(buf, sizeof(buf), "AG%c", (status == 0) ? '/' : '0');
break;
+ case RIG_FUNC_TUNER: // K2 KX2 K3 KX3 K4
+ SNPRINTF(buf, sizeof(buf), "SWH16");
+ break;
+
default:
return kenwood_set_func(rig, vfo, func, status);
}
@@ -2485,6 +2490,19 @@ int k3_set_func(RIG *rig, vfo_t vfo, setting_t func, int status)
return kenwood_transaction(rig, buf, NULL, 0);
}
+int k3_vfo_op(RIG *rig, vfo_t vfo, vfo_op_t op)
+{
+ char buf[32];
+ switch (op)
+ {
+ case RIG_OP_TUNE: // K2 KX2 K3 KX3 K4
+ SNPRINTF(buf, sizeof(buf), "SWH16");
+ break;
+ default: return kenwood_vfo_op(rig, vfo, op);
+ }
+ return kenwood_transaction(rig, buf, NULL, 0);
+}
+
/*
* Some functions, notably RIT and XIT On/Off status, can be queried
* on the K3. Those functions are handled here and others are passed
commit d71f7a93857a2eb1b551b13b5b6add03cbbe0b4e
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sat May 11 07:42:20 2024 -0500
Add RIG_OP_TUNE to Elecraft K2 KX2 K3 KX3 K4
diff --git a/rigs/kenwood/k3.c b/rigs/kenwood/k3.c
index 779fc504a..03057d144 100644
--- a/rigs/kenwood/k3.c
+++ b/rigs/kenwood/k3.c
@@ -52,7 +52,7 @@
RIG_LEVEL_NR|RIG_LEVEL_MONITOR_GAIN|RIG_LEVEL_RAWSTR|RIG_LEVEL_RFPOWER_METER|RIG_LEVEL_RFPOWER_METER_WATTS)
#define K3_VFO (RIG_VFO_A|RIG_VFO_B)
-#define K3_VFO_OP (RIG_OP_UP|RIG_OP_DOWN)
+#define K3_VFO_OP (RIG_OP_UP|RIG_OP_DOWN|RIG_OP_TUNE)
#define K3_ANTS (RIG_ANT_1|RIG_ANT_2)
#define K4_ANTS (RIG_ANT_1|RIG_ANT_2|RIG_ANT_3|RIG_ANT_4)
@@ -161,6 +161,7 @@ int kx3_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val);
int kx3_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val);
int k3_set_func(RIG *rig, vfo_t vfo, setting_t func, int status);
int k3_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status);
+int k3_vfo_op(RIG *rig, vfo_t vfo, vfo_op_t op);
int k3_power2mW(RIG *rig, unsigned int *mwpower, float power, freq_t freq,
rmode_t mode);
@@ -197,7 +198,7 @@ struct rig_caps k3_caps =
RIG_MODEL(RIG_MODEL_K3),
.model_name = "K3",
.mfg_name = "Elecraft",
- .version = BACKEND_VER ".27",
+ .version = BACKEND_VER ".28",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
@@ -334,7 +335,7 @@ struct rig_caps k3_caps =
.get_level = k3_get_level,
.set_ext_level = k3_set_ext_level,
.get_ext_level = k3_get_ext_level,
- .vfo_op = kenwood_vfo_op,
+ .vfo_op = k3_vfo_op,
.set_trn = kenwood_set_trn,
.get_trn = kenwood_get_trn,
.set_powerstat = kenwood_set_powerstat,
@@ -356,7 +357,7 @@ struct rig_caps k3s_caps =
RIG_MODEL(RIG_MODEL_K3S),
.model_name = "K3S",
.mfg_name = "Elecraft",
- .version = BACKEND_VER ".21",
+ .version = BACKEND_VER ".22",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
@@ -493,7 +494,7 @@ struct rig_caps k3s_caps =
.get_level = k3_get_level,
.set_ext_level = k3_set_ext_level,
.get_ext_level = k3_get_ext_level,
- .vfo_op = kenwood_vfo_op,
+ .vfo_op = k3_vfo_op,
.set_trn = kenwood_set_trn,
.get_trn = kenwood_get_trn,
.set_powerstat = kenwood_set_powerstat,
@@ -516,7 +517,7 @@ struct rig_caps k4_caps =
RIG_MODEL(RIG_MODEL_K4),
.model_name = "K4",
.mfg_name = "Elecraft",
- .version = BACKEND_VER ".28",
+ .version = BACKEND_VER ".29",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
@@ -658,7 +659,7 @@ struct rig_caps k4_caps =
.get_level = k3_get_level,
.set_ext_level = k3_set_ext_level,
.get_ext_level = k3_get_ext_level,
- .vfo_op = kenwood_vfo_op,
+ .vfo_op = k3_vfo_op,
.set_trn = kenwood_set_trn,
.get_trn = kenwood_get_trn,
.set_powerstat = kenwood_set_powerstat,
@@ -680,7 +681,7 @@ struct rig_caps kx3_caps =
RIG_MODEL(RIG_MODEL_KX3),
.model_name = "KX3",
.mfg_name = "Elecraft",
- .version = BACKEND_VER ".19",
+ .version = BACKEND_VER ".20",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
@@ -816,7 +817,7 @@ struct rig_caps kx3_caps =
.get_level = kx3_get_level,
.set_ext_level = k3_set_ext_level,
.get_ext_level = k3_get_ext_level,
- .vfo_op = kenwood_vfo_op,
+ .vfo_op = k3_vfo_op,
.set_trn = kenwood_set_trn,
.get_trn = kenwood_get_trn,
.set_powerstat = kenwood_set_powerstat,
@@ -838,7 +839,7 @@ struct rig_caps kx2_caps =
RIG_MODEL(RIG_MODEL_KX2),
.model_name = "KX2",
.mfg_name = "Elecraft",
- .version = BACKEND_VER ".18",
+ .version = BACKEND_VER ".19",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
@@ -973,7 +974,7 @@ struct rig_caps kx2_caps =
.get_level = kx3_get_level,
.set_ext_level = k3_set_ext_level,
.get_ext_level = k3_get_ext_level,
- .vfo_op = kenwood_vfo_op,
+ .vfo_op = k3_vfo_op,
.set_trn = kenwood_set_trn,
.get_trn = kenwood_get_trn,
.set_powerstat = kenwood_set_powerstat,
@@ -2478,6 +2479,10 @@ int k3_set_func(RIG *rig, vfo_t vfo, setting_t func, int status)
SNPRINTF(buf, sizeof(buf), "AG%c", (status == 0) ? '/' : '0');
break;
+ case RIG_FUNC_TUNER: // K2 KX2 K3 KX3 K4
+ SNPRINTF(buf, sizeof(buf), "SWH16");
+ break;
+
default:
return kenwood_set_func(rig, vfo, func, status);
}
@@ -2485,6 +2490,19 @@ int k3_set_func(RIG *rig, vfo_t vfo, setting_t func, int status)
return kenwood_transaction(rig, buf, NULL, 0);
}
+int k3_vfo_op(RIG *rig, vfo_t vfo, vfo_op_t op)
+{
+ char buf[32];
+ switch (op)
+ {
+ case RIG_OP_TUNE: // K2 KX2 K3 KX3 K4
+ SNPRINTF(buf, sizeof(buf), "SWH16");
+ break;
+ default: return kenwood_vfo_op(rig, vfo, op);
+ }
+ return kenwood_transaction(rig, buf, NULL, 0);
+}
+
/*
* Some functions, notably RIT and XIT On/Off status, can be queried
* on the K3. Those functions are handled here and others are passed
commit 09fbc4cb64895925e3a00ec8d314f6b3e275ad7f
Author: Mike Black W9MDB <mdb...@ya...>
Date: Thu May 9 17:09:40 2024 -0500
Restore Xiegu G90 x25/x26 command detection. Works find on Base 1.79 App 1.80
https://github.com/Hamlib/Hamlib/issues/1547
diff --git a/rigs/icom/icom.c b/rigs/icom/icom.c
index 5660a9823..7dd23c42e 100644
--- a/rigs/icom/icom.c
+++ b/rigs/icom/icom.c
@@ -9751,6 +9751,7 @@ static void icom_set_x25x26_ability(RIG *rig, int status)
if (!icom_is_x25x26_potentially_supported(rig))
{
// No change for rigs that don't support these commands anyway
+ rig_debug(RIG_DEBUG_VERBOSE, "%s: Hamlib thinks rig does not support x25/x26 command\n", __func__);
return;
}
diff --git a/rigs/icom/xiegu.c b/rigs/icom/xiegu.c
index 3fc04385b..fad83abdc 100644
--- a/rigs/icom/xiegu.c
+++ b/rigs/icom/xiegu.c
@@ -147,6 +147,7 @@ int xiegu_rig_open(RIG *rig)
if (retval == RIG_OK)
{
+ dump_hex(id,id_len);
iid = (((int)id[2]) << 8) + id[3];
rig_debug(RIG_DEBUG_VERBOSE, "%s: Xiegu Radio ID=0x%04x\n", __func__, iid);
switch(iid)
@@ -551,7 +552,7 @@ static struct icom_priv_caps g90_priv_caps =
0, /* no XCHG */
ic7200_ts_sc_list,
.x25x26_always = 0,
- .x25x26_possibly = 0, // Firmware G90 v20240504.8 doesn't work well -- see https://github.com/Hamlib/Hamlib/issues/1547
+ .x25x26_possibly = 1, // Firmware G90 v20240504.8 doesn't work well -- see https://github.com/Hamlib/Hamlib/issues/1547
.x1cx03_always = 0,
.x1cx03_possibly = 0,
.x1ax03_supported = 0,
@@ -564,7 +565,7 @@ struct rig_caps g90_caps =
RIG_MODEL(RIG_MODEL_G90),
.model_name = "G90",
.mfg_name = "Xiegu",
- .version = BACKEND_VER ".9",
+ .version = BACKEND_VER ".10",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
@@ -599,8 +600,7 @@ struct rig_caps g90_caps =
.max_xit = Hz(9999),
.max_ifshift = Hz(0), /* TODO */
.vfo_ops = X108G_VFO_OPS,
-// Disabling targetable_vfo as G90 firmare update has brokne it see https://github.com/Hamlib/Hamlib/issues/1547
-// .targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE,
+ .targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE,
.scan_ops = X108G_SCAN_OPS,
.transceive = RIG_TRN_RIG,
.bank_qty = 5,
commit cf91e96333979368a0bde89d5c31b7ed4f39bce5
Author: Addison Schuhardt <ad...@sc...>
Date: Thu Apr 11 00:17:06 2024 -0700
Refactoring GPIO push-to-talk logic to use libgpiod rather than the deprecated/broken sysfs method.
TODO: I'm not familiar with autoconf to set up linking to libgpiod correctly, so I'd like to ask someone else to do that.
Fixes #1538
diff --git a/configure.ac b/configure.ac
index d07ec9b9a..3a6af4e55 100644
--- a/configure.ac
+++ b/configure.ac
@@ -529,6 +529,9 @@ AS_IF([test x"${cf_with_xml_support}" = "xyes"], [
AC_SUBST([LIBXML2_LIBS])
AC_SUBST([LIBXML2_CFLAGS])
+# TODO: I don't know how to use autoconf
+LIBS="$LIBS -lgpiod"
+
## ----------------- ##
## Language bindings ##
diff --git a/include/hamlib/rig.h b/include/hamlib/rig.h
index fc360c692..a03890f8e 100644
--- a/include/hamlib/rig.h
+++ b/include/hamlib/rig.h
@@ -2340,6 +2340,7 @@ typedef struct hamlib_port {
int fd; /*!< File descriptor */
void *handle; /*!< handle for USB */
+ void *gpio; /*!< handle for GPIO */
int write_delay; /*!< Delay between each byte sent out, in mS */
int post_write_delay; /*!< Delay between each commands send out, in mS */
diff --git a/src/gpio.c b/src/gpio.c
index e5fcfb597..88bfd305f 100644
--- a/src/gpio.c
+++ b/src/gpio.c
@@ -19,135 +19,91 @@
*
*/
-#include <string.h>
+#include "gpio.h"
+
#include <errno.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/stat.h>
#include <fcntl.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <gpiod.h>
-#include "gpio.h"
+#ifndef GPIOD_PATH
+// This is what's used on the Raspberry Pi 4; I'm not sure about others
+#define GPIO_CHIP_NAME "gpiochip0"
+#endif
+#define GPIO_CHIP_CONSUMER "Hamlib"
int gpio_open(hamlib_port_t *port, int output, int on_value)
{
- char pathname[HAMLIB_FILPATHLEN * 2];
- FILE *fexp, *fdir;
- int fd;
- char *dir;
+ struct gpiod_chip *chip;
+ struct gpiod_line *line;
port->parm.gpio.on_value = on_value;
- SNPRINTF(pathname, HAMLIB_FILPATHLEN, "/sys/class/gpio/export");
- fexp = fopen(pathname, "w");
+ chip = gpiod_chip_open_by_name(GPIO_CHIP_NAME);
- if (!fexp)
+ if (!chip)
{
- rig_debug(RIG_DEBUG_ERR,
- "Export GPIO%s (using %s): %s\n",
- port->pathname,
- pathname,
- strerror(errno));
+ rig_debug(RIG_DEBUG_ERR, "Failed to open GPIO chip %s: %s\n", GPIO_CHIP_NAME, strerror(errno));
return -RIG_EIO;
}
- fprintf(fexp, "%s\n", port->pathname);
- fclose(fexp);
-
- SNPRINTF(pathname,
- sizeof(pathname),
- "/sys/class/gpio/gpio%s/direction",
- port->pathname);
- fdir = fopen(pathname, "w");
-
- if (!fdir)
+ line = gpiod_chip_get_line(chip, atoi(port->pathname));
+ if (!line)
{
- rig_debug(RIG_DEBUG_ERR,
- "GPIO%s direction (using %s): %s\n",
- port->pathname,
- pathname,
- strerror(errno));
+ rig_debug(RIG_DEBUG_ERR, "Failed to acquire GPIO%s: %s\n", port->pathname, strerror(errno));
+ gpiod_chip_close(chip);
return -RIG_EIO;
}
- dir = output ? "out" : "in";
- rig_debug(RIG_DEBUG_VERBOSE, "Setting direction of GPIO%s to %s\n",
- port->pathname, dir);
- fprintf(fdir, "%s\n", dir);
- fclose(fdir);
-
- SNPRINTF(pathname,
- sizeof(pathname),
- "/sys/class/gpio/gpio%s/value",
- port->pathname);
- fd = open(pathname, O_RDWR);
-
- if (fd < 0)
+ if ((output && gpiod_line_request_output(line, GPIO_CHIP_CONSUMER, 0) < 0) ||
+ (!output && gpiod_line_request_input(line, GPIO_CHIP_CONSUMER) < 0))
{
- rig_debug(RIG_DEBUG_ERR,
- "GPIO%s opening value file %s: %s\n",
- port->pathname,
- pathname,
- strerror(errno));
+ rig_debug(RIG_DEBUG_ERR, "Failed to set GPIO%s to %s mode: %s\n",
+ port->pathname, (output ? "OUTPUT" : "INPUT"), strerror(errno));
+ gpiod_line_release(line);
+ gpiod_chip_close(chip);
return -RIG_EIO;
}
- port->fd = fd;
- return fd;
-}
+ port->gpio = line;
+ return RIG_OK;
+}
int gpio_close(hamlib_port_t *port)
{
- int retval;
- char pathname[HAMLIB_FILPATHLEN * 2];
- FILE *fexp;
-
- retval = close(port->fd);
-
- SNPRINTF(pathname, HAMLIB_FILPATHLEN, "/sys/class/gpio/unexport");
- fexp = fopen(pathname, "w");
-
- if (!fexp)
- {
- rig_debug(RIG_DEBUG_ERR,
- "Export GPIO%s (using %s): %s\n",
- port->pathname,
- pathname,
- strerror(errno));
- return -RIG_EIO;
- }
-
- fprintf(fexp, "%s\n", port->pathname);
- fclose(fexp);
- return retval;
+ gpiod_line_close_chip((struct gpiod_line*)port->gpio);
+ return RIG_OK;
}
-
int gpio_ptt_set(hamlib_port_t *port, ptt_t pttx)
{
- char *val;
+ int result = 0;
port->parm.gpio.value = pttx != RIG_PTT_OFF;
- if ((port->parm.gpio.value && port->parm.gpio.on_value)
- || (!port->parm.gpio.value && !port->parm.gpio.on_value))
+ if ((port->parm.gpio.value && port->parm.gpio.on_value) ||
+ (!port->parm.gpio.value && !port->parm.gpio.on_value))
{
- val = "1\n";
+ result = gpiod_line_set_value((struct gpiod_line*)port->gpio, 1);
}
else
{
- val = "0\n";
+ result = gpiod_line_set_value((struct gpiod_line*)port->gpio, 0);
}
- if (write(port->fd, val, strlen(val)) <= 0)
+ if (result)
{
+ rig_debug(RIG_DEBUG_ERR, "Failed to set the value of GPIO%s: %s\n", port->pathname, strerror(errno));
return -RIG_EIO;
}
return RIG_OK;
}
-
int gpio_ptt_get(hamlib_port_t *port, ptt_t *pttx)
{
if (port->parm.gpio.value)
@@ -164,21 +120,15 @@ int gpio_ptt_get(hamlib_port_t *port, ptt_t *pttx)
int gpio_dcd_get(hamlib_port_t *port, dcd_t *dcdx)
{
- char val;
- int port_value;
-
- lseek(port->fd, 0, SEEK_SET);
-
- if (read(port->fd, &val, sizeof(val)) <= 0)
+ int val = gpiod_line_get_value((struct gpiod_line*)port->gpio);
+ if (val < 0)
{
- return -RIG_EIO;
+ rig_debug(RIG_DEBUG_ERR, "Failed to read the value of GPIO%s: %s\n", port->pathname, strerror(errno));
}
rig_debug(RIG_DEBUG_VERBOSE, "DCD GPIO pin value: %c\n", val);
- port_value = val - '0';
-
- if (port_value == port->parm.gpio.on_value)
+ if (val == port->parm.gpio.on_value)
{
*dcdx = RIG_DCD_ON;
}
-----------------------------------------------------------------------
Summary of changes:
rigs/icom/ic7100.c | 6 +++---
rigs/icom/icom.c | 1 +
rigs/icom/icom.h | 2 +-
rigs/icom/xiegu.c | 8 ++++----
rigs/kenwood/k2.c | 21 ++++++++++++++++++---
rigs/kenwood/k3.c | 40 +++++++++++++++++++++++++++++-----------
rigs/kenwood/kenwood.c | 7 +++++++
rigs/kenwood/kenwood.h | 2 +-
simulators/simelecraft.c | 19 +++++++++++++++++--
9 files changed, 81 insertions(+), 25 deletions(-)
hooks/post-receive
--
Hamlib -- Ham radio control libraries
|
|
From: n0nb <n0...@us...> - 2024-05-08 21:00:10
|
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 8221961de2e24121482e72959c77c27edaa74740 (commit)
from 02a5f70200e589249bf8958e6d4b4a3aa094e00a (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 8221961de2e24121482e72959c77c27edaa74740
Author: Christoph Nadig <hb...@us...>
Date: Wed May 8 11:02:13 2024 +0200
Fix for setting power on Elecraft TRXs
(currently the power set is off by a factor of 10 if no PA is attached).
I also included a change to k3_max_power to take the current band into
account again. These values have changed in firmware upgrades in the
past but have been stable for quite a while now, so I think they should
be considered again.
Best Regards,
Chris, HB9ZHK
diff --git a/rigs/kenwood/k3.c b/rigs/kenwood/k3.c
index 53aab4f94..779fc504a 100644
--- a/rigs/kenwood/k3.c
+++ b/rigs/kenwood/k3.c
@@ -1835,15 +1835,12 @@ static int k3_get_maxpower(RIG *rig)
{
maxpower = 110;
}
-
-// Elecraft makes max power pretty variable
-// So we will stick with 15W or 110W and scale everything to that
-#if 0
else if (RIG_IS_KX2 || RIG_IS_KX3)
{
int bandnum = -1;
- retval = kenwood_safe_transaction(rig, "BN", levelbuf, KENWOOD_MAX_BUF_LEN, 4);
+ char levelbuf[KENWOOD_MAX_BUF_LEN];
+ int retval = kenwood_safe_transaction(rig, "BN", levelbuf, KENWOOD_MAX_BUF_LEN, 4);
if (retval != RIG_OK) { return retval; }
@@ -1877,8 +1874,6 @@ static int k3_get_maxpower(RIG *rig)
}
}
-#endif
-
rig_debug(RIG_DEBUG_TRACE, "%s: maxpower=%d\n", __func__, maxpower);
return maxpower;
}
@@ -1899,6 +1894,7 @@ int k3_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
{
char levelbuf[16];
int kenwood_val;
+ float pwr;
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
@@ -1998,9 +1994,9 @@ int k3_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
break;
case RIG_LEVEL_RFPOWER:
- kenwood_val = (int)(val.f * k3_get_maxpower(rig));
- SNPRINTF(levelbuf, sizeof(levelbuf), "PC%03d%s", kenwood_val,
- kenwood_val > 15 ? "1" : "0");
+ pwr = val.f * k3_get_maxpower(rig);
+ SNPRINTF(levelbuf, sizeof(levelbuf), "PC%03.f%c", pwr > 15.0 ? pwr : 10.0 * pwr,
+ pwr > 15.0 ? '1' : '0');
break;
default:
-----------------------------------------------------------------------
Summary of changes:
rigs/kenwood/k3.c | 16 ++++++----------
1 file changed, 6 insertions(+), 10 deletions(-)
hooks/post-receive
--
Hamlib -- Ham radio control libraries
|
|
From: n0nb <n0...@us...> - 2024-05-08 10:06:47
|
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 02a5f70200e589249bf8958e6d4b4a3aa094e00a (commit)
via e9fa4de2aeffb637b76a1440cc8207d242ec809a (commit)
via fd69cb0487c491133a2cc1f231c73096b3369cc4 (commit)
via 85d9d8d62c2575a0314d403c08f3e10d23dfa2f0 (commit)
via fadf83a42c35e95b7c8a64037aeb08923cc92761 (commit)
via 95f2e9b54678b0d83178ec3de6e0902db214fbfc (commit)
via c2b8f2b4fe87b17568101a776305bd9e2af76405 (commit)
via 42c900cb8a8ee1733aa39c6b808fa5bb2dd1118a (commit)
via 9bcb4c4771649468dfafd4eb47da5c7c813b0dc2 (commit)
via 44317e542bca8922a7cc69a68bee0560e9466540 (commit)
via 424a34c504c90ae8839f076b23cfaed424b70980 (commit)
via 74c96da18a6f4ee6159c4459b9614bbb7eaec14f (commit)
via cc9bb6f0b54eaddf90fb6e1d32f1f0787b6eec04 (commit)
via a5fa04f8847d94d18b17e2a7e51a0b0df2fdd663 (commit)
via 85f78862863f24ff842edae95024b3d8409e360a (commit)
via baeb484ddf1ae2a7aff811a0788f75c0762c87cc (commit)
via 4e600a9ed67c6e627c495deeacbb65872f8eaec0 (commit)
via 8002d470508135ce4b70c40e8b736ff436e9b7fc (commit)
via 105c6b8d3942646d35a7af09d52e1cb73a5a8c8b (commit)
via d683955811377ae1e47db526ae8d6a46928a1abf (commit)
via e67c80f1217953f1bff20bd4483e48df3a266e03 (commit)
via 594df4b31de374e1066dd27ddb510640f59d9531 (commit)
via 8f1b6851e787a72f617e5e139f2a046413b5a5b7 (commit)
via c7635ee3b14e7ec2c7ccba9bbb3ea81aa56685f2 (commit)
via 94d753860b194b234324195681484e2efcc5d711 (commit)
via 7b44297543ff0ff1c2b11b71fa17ecf33477e05b (commit)
via abee6a3cb9f93c9456fbae8bcd3d44c9f22f07d1 (commit)
from d47fb672c82aebce342cba8f0dd3b496ec536b9a (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 02a5f70200e589249bf8958e6d4b4a3aa094e00a
Author: Mike Black W9MDB <mdb...@ya...>
Date: Tue May 7 16:47:32 2024 -0500
Update some things for G90
diff --git a/rigs/icom/xiegu.c b/rigs/icom/xiegu.c
index 8ec5ec7e9..3fc04385b 100644
--- a/rigs/icom/xiegu.c
+++ b/rigs/icom/xiegu.c
@@ -151,7 +151,8 @@ int xiegu_rig_open(RIG *rig)
rig_debug(RIG_DEBUG_VERBOSE, "%s: Xiegu Radio ID=0x%04x\n", __func__, iid);
switch(iid)
{
- case 0x0090: rig_debug(RIG_DEBUG_VERBOSE, "%s: Xiegu model %s\n", __func__, "G90/G90S");break;
+ case 0x0070: rig_debug(RIG_DEBUG_VERBOSE, "%s: Xiegu model %s\n", __func__, "G90");break;
+ case 0x0090: rig_debug(RIG_DEBUG_VERBOSE, "%s: Xiegu model %s\n", __func__, "G90S");break;
case 0x0106: rig_debug(RIG_DEBUG_VERBOSE, "%s: Xiegu model %s\n", __func__, "G106/G106C");break;
case 0x6100:
case 0xa400: rig_debug(RIG_DEBUG_VERBOSE, "%s: Xiegu model %s\n", __func__, "X6100");break;
@@ -181,7 +182,7 @@ struct rig_caps x108g_caps =
RIG_MODEL(RIG_MODEL_X108G),
.model_name = "X108G",
.mfg_name = "Xiegu",
- .version = BACKEND_VER ".2",
+ .version = BACKEND_VER ".3",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
@@ -570,7 +571,7 @@ struct rig_caps g90_caps =
.ptt_type = RIG_PTT_RIG,
.dcd_type = RIG_DCD_RIG,
.port_type = RIG_PORT_SERIAL,
- .serial_rate_min = 300,
+ .serial_rate_min = 19200,
.serial_rate_max = 19200,
.serial_data_bits = 8,
.serial_stop_bits = 1,
commit e9fa4de2aeffb637b76a1440cc8207d242ec809a
Author: Mike Black W9MDB <mdb...@ya...>
Date: Mon May 6 06:58:52 2024 -0500
Disable TARGETABLE for G90 due to firmware bug
https://github.com/Hamlib/Hamlib/issues/1547
diff --git a/rigs/icom/xiegu.c b/rigs/icom/xiegu.c
index 2acee5a81..8ec5ec7e9 100644
--- a/rigs/icom/xiegu.c
+++ b/rigs/icom/xiegu.c
@@ -598,7 +598,8 @@ struct rig_caps g90_caps =
.max_xit = Hz(9999),
.max_ifshift = Hz(0), /* TODO */
.vfo_ops = X108G_VFO_OPS,
- .targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE,
+// Disabling targetable_vfo as G90 firmare update has brokne it see https://github.com/Hamlib/Hamlib/issues/1547
+// .targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE,
.scan_ops = X108G_SCAN_OPS,
.transceive = RIG_TRN_RIG,
.bank_qty = 5,
commit fd69cb0487c491133a2cc1f231c73096b3369cc4
Author: Mike Black W9MDB <mdb...@ya...>
Date: Mon May 6 06:35:40 2024 -0500
Have icom rigs fallback to old get mode when x26 has beeen disabled
https://github.com/Hamlib/Hamlib/issues/1547
diff --git a/rigs/icom/icom.c b/rigs/icom/icom.c
index d30b70ed8..5660a9823 100644
--- a/rigs/icom/icom.c
+++ b/rigs/icom/icom.c
@@ -2254,8 +2254,9 @@ static int icom_get_mode_x26(RIG *rig, vfo_t vfo, int *mode_len,
const struct icom_priv_caps *priv_caps = rig->caps->priv;
int retval;
- if (priv->x26cmdfails > 0 && !priv_caps->x25x26_always)
+ if (priv->x26cmdfails != 0 && priv_caps->x25x26_always==0)
{
+ rig_debug(RIG_DEBUG_WARN, "%s: x26cmdfails=%d, x25x26_always=%d\n", __func__, priv->x26cmdfails, priv_caps->x25x26_always);
return -RIG_ENAVAIL;
}
@@ -2610,13 +2611,20 @@ static int icom_get_mode_without_data(RIG *rig, vfo_t vfo, rmode_t *mode,
{
retval = icom_get_mode_x26(rig, vfo, &mode_len, modebuf);
- // mode_len=5, modebuf=26 01 01 01 01
- // last 3 bytes are mode, datamode, filter (1-3)
- priv_data->datamode = modebuf[3];
- *width = priv_data->filter = modebuf[4];
- modebuf[1] = modebuf[2]; // copy mode to 2-byte format
- modebuf[2] = modebuf[4]; // copy filter to 2-byte format
- mode_len = 2;
+ if (retval == RIG_OK)
+ {
+ // mode_len=5, modebuf=26 01 01 01 01
+ // last 3 bytes are mode, datamode, filter (1-3)
+ priv_data->datamode = modebuf[3];
+ *width = priv_data->filter = modebuf[4];
+ modebuf[1] = modebuf[2]; // copy mode to 2-byte format
+ modebuf[2] = modebuf[4]; // copy filter to 2-byte format
+ mode_len = 2;
+ }
+ else if (retval == -RIG_ENAVAIL) // In case it's been disabled
+ {
+ retval = icom_transaction(rig, C_RD_MODE, -1, NULL, 0, modebuf, &mode_len);
+ }
}
else
{
commit 85d9d8d62c2575a0314d403c08f3e10d23dfa2f0
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sun May 5 22:17:17 2024 -0500
Make ignoring morse handler more generic
diff --git a/src/rig.c b/src/rig.c
index a898034de..f42aace5a 100644
--- a/src/rig.c
+++ b/src/rig.c
@@ -1494,8 +1494,8 @@ int HAMLIB_API rig_open(RIG *rig)
if (skip_init) { return RIG_OK; }
#if defined(HAVE_PTHREAD)
- // Some models don't support CW
- if (rig->caps->rig_model != RIG_MODEL_SDRCONSOLE)
+ // Some models don't support CW so don't need morse handler
+ if (rig->caps->send_morse)
{
status = morse_data_handler_start(rig);
commit fadf83a42c35e95b7c8a64037aeb08923cc92761
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sun May 5 17:28:29 2024 -0500
Update kenwood.h version
diff --git a/rigs/kenwood/kenwood.h b/rigs/kenwood/kenwood.h
index c8d57dbcf..ec2331ab8 100644
--- a/rigs/kenwood/kenwood.h
+++ b/rigs/kenwood/kenwood.h
@@ -28,7 +28,7 @@
#include "token.h"
#include "idx_builtin.h"
-#define BACKEND_VER "20240413"
+#define BACKEND_VER "20240505"
#define EOM_KEN ';'
#define EOM_TH '\r'
commit 95f2e9b54678b0d83178ec3de6e0902db214fbfc
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sun May 5 17:19:22 2024 -0500
Change Xeigu G90 to not use 0x25/x26 since it misbehaves on latest firmware and is not documented either
diff --git a/rigs/icom/xiegu.c b/rigs/icom/xiegu.c
index 97efc7c0b..2acee5a81 100644
--- a/rigs/icom/xiegu.c
+++ b/rigs/icom/xiegu.c
@@ -543,12 +543,27 @@ struct rig_caps x6100_caps =
.hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS
};
+static struct icom_priv_caps g90_priv_caps =
+{
+ 0xa4, /* default address */
+ 0, /* 731 mode */
+ 0, /* no XCHG */
+ ic7200_ts_sc_list,
+ .x25x26_always = 0,
+ .x25x26_possibly = 0, // Firmware G90 v20240504.8 doesn't work well -- see https://github.com/Hamlib/Hamlib/issues/1547
+ .x1cx03_always = 0,
+ .x1cx03_possibly = 0,
+ .x1ax03_supported = 0,
+ .mode_with_filter = 1,
+ .data_mode_supported = 1
+};
+
struct rig_caps g90_caps =
{
RIG_MODEL(RIG_MODEL_G90),
.model_name = "G90",
.mfg_name = "Xiegu",
- .version = BACKEND_VER ".7",
+ .version = BACKEND_VER ".9",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
@@ -667,7 +682,7 @@ struct rig_caps g90_caps =
.set_conf = icom_set_conf,
.get_conf = icom_get_conf,
- .priv = (void *)& x108g_priv_caps,
+ .priv = (void *)& g90_priv_caps,
.rig_init = icom_init,
.rig_cleanup = icom_cleanup,
.rig_open = xiegu_rig_open,
commit c2b8f2b4fe87b17568101a776305bd9e2af76405
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sun May 5 16:03:50 2024 -0500
Improve SDRCONSOLE behavior
diff --git a/rigs/kenwood/kenwood.c b/rigs/kenwood/kenwood.c
index 64c80e267..e0f029721 100644
--- a/rigs/kenwood/kenwood.c
+++ b/rigs/kenwood/kenwood.c
@@ -1115,11 +1115,15 @@ int kenwood_open(RIG *rig)
}
/* driver mismatch */
- rig_debug(RIG_DEBUG_VERBOSE,
+ // SDRCONSOLE identifies as TS-2000 -- even though it's a sub/superset
+ if (rig->caps->rig_model == RIG_MODEL_SDRCONSOLE && kenwood_id_string_list[i].model != 2014)
+ {
+ rig_debug(RIG_DEBUG_VERBOSE,
"%s: not the right driver apparently (found %u, asked for %d, checked %s)\n",
__func__, rig->caps->rig_model,
kenwood_id_string_list[i].model,
rig->caps->model_name);
+ }
// we continue to search for other matching IDs/models
}
diff --git a/src/rig.c b/src/rig.c
index cdb3d8e88..a898034de 100644
--- a/src/rig.c
+++ b/src/rig.c
@@ -1494,14 +1494,18 @@ int HAMLIB_API rig_open(RIG *rig)
if (skip_init) { return RIG_OK; }
#if defined(HAVE_PTHREAD)
- status = morse_data_handler_start(rig);
-
- if (status < 0)
+ // Some models don't support CW
+ if (rig->caps->rig_model != RIG_MODEL_SDRCONSOLE)
{
- rig_debug(RIG_DEBUG_ERR, "%s: cw_data_handler_start failed: %s\n", __func__,
+ status = morse_data_handler_start(rig);
+
+ if (status < 0)
+ {
+ rig_debug(RIG_DEBUG_ERR, "%s: cw_data_handler_start failed: %s\n", __func__,
rigerror(status));
- port_close(rp, rp->type.rig);
- RETURNFUNC2(status);
+ port_close(rp, rp->type.rig);
+ RETURNFUNC2(status);
+ }
}
#endif
commit 42c900cb8a8ee1733aa39c6b808fa5bb2dd1118a
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sat May 4 22:57:25 2024 -0500
Fix default filter_width in icom.c
diff --git a/rigs/icom/icom.c b/rigs/icom/icom.c
index 17d774329..d30b70ed8 100644
--- a/rigs/icom/icom.c
+++ b/rigs/icom/icom.c
@@ -2699,7 +2699,7 @@ static int icom_get_mode_without_data(RIG *rig, vfo_t vfo, rmode_t *mode,
* The DSP filter width can be read only for the selected VFO, so use cached width for other VFOs.
*/
- pbwidth_t filter_width;
+ pbwidth_t filter_width = 1;
if (vfo == rig->state.current_vfo)
{
diff --git a/rigs/icom/icom.h b/rigs/icom/icom.h
index 8d17cfb34..212a35c2f 100644
--- a/rigs/icom/icom.h
+++ b/rigs/icom/icom.h
@@ -35,7 +35,7 @@
#include <sys/time.h>
#endif
-#define BACKEND_VER "20240422"
+#define BACKEND_VER "20240504"
#define ICOM_IS_ID31 rig_is_model(rig, RIG_MODEL_ID31)
#define ICOM_IS_ID51 rig_is_model(rig, RIG_MODEL_ID51)
commit 9bcb4c4771649468dfafd4eb47da5c7c813b0dc2
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sat May 4 17:36:02 2024 -0500
Fix micom set_freq to read ack back and get freq offsets
diff --git a/rigs/motorola/micom.c b/rigs/motorola/micom.c
index b66d99c51..7d26a30f4 100644
--- a/rigs/motorola/micom.c
+++ b/rigs/motorola/micom.c
@@ -92,10 +92,16 @@ static int micom_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
set_transaction_active(rig);
rig_flush(rp);
retval = write_block(rp, rxcmd, sizeof(rxcmd));
+ micom_read_frame(rig, reply, sizeof(reply));
if (retval == RIG_OK) retval = write_block(rp, cmd2, sizeof(cmd2));
+ micom_read_frame(rig, reply, sizeof(reply));
if (retval == RIG_OK) retval = write_block(rp, cmd3, sizeof(cmd3));
+ micom_read_frame(rig, reply, sizeof(reply));
if (retval == RIG_OK) retval = write_block(rp, cmd4, sizeof(cmd4));
+ micom_read_frame(rig, reply, sizeof(reply));
if (retval == RIG_OK) retval = write_block(rp, cmd5, sizeof(cmd5));
+ micom_read_frame(rig, reply, sizeof(reply));
+ micom_read_frame(rig, reply, sizeof(reply));
if (retval != RIG_OK)
{
@@ -163,7 +169,7 @@ static int micom_get_freq(RIG *rig, vfo_t vfo, freq_t *freq)
micom_read_frame(rig, reply, sizeof(reply));
write_block(rp, ack, sizeof(ack));
set_transaction_inactive(rig);
- *freq = (reply[5] << 24) | (reply[6] << 16) | (reply[7] << 8) | reply[8];
+ *freq = (reply[4] << 24) | (reply[5] << 16) | (reply[6] << 8) | reply[7];
RETURNFUNC(RIG_OK);
}
@@ -189,7 +195,7 @@ struct rig_caps micom_caps =
RIG_MODEL(RIG_MODEL_MICOM2),
.model_name = "Micom 2/3",
.mfg_name = "Micom",
- .version = "20240503.1",
+ .version = "20240504.0",
.copyright = "LGPL",
.status = RIG_STATUS_ALPHA,
.rig_type = RIG_TYPE_TRANSCEIVER,
commit 44317e542bca8922a7cc69a68bee0560e9466540
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sat May 4 08:44:19 2024 -0500
Make ft891 power level work like ft991 which supposedly is the same according to JA1NLX
diff --git a/rigs/yaesu/ft891.c b/rigs/yaesu/ft891.c
index 7a576e688..cbba6e96f 100644
--- a/rigs/yaesu/ft891.c
+++ b/rigs/yaesu/ft891.c
@@ -130,7 +130,7 @@ struct rig_caps ft891_caps =
RIG_MODEL(RIG_MODEL_FT891),
.model_name = "FT-891",
.mfg_name = "Yaesu",
- .version = NEWCAT_VER ".9",
+ .version = NEWCAT_VER ".10",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
diff --git a/rigs/yaesu/ft891.h b/rigs/yaesu/ft891.h
index 58c3c294f..f61fcb247 100644
--- a/rigs/yaesu/ft891.h
+++ b/rigs/yaesu/ft891.h
@@ -69,13 +69,18 @@
RIG_OP_UP|RIG_OP_DOWN|RIG_OP_BAND_UP|RIG_OP_BAND_DOWN|\
RIG_OP_TO_VFO|RIG_OP_FROM_VFO)
-// Borrowed from FLRig -- Thanks to Dave W1HKJ
+// borrowed from FT991
#define FT891_RFPOWER_METER_CAL \
{ \
- 2, \
+ 7, \
{ \
{0, 0.0f}, \
- {100, 100.0f}, \
+ {10, 0.8f}, \
+ {50, 8.0f}, \
+ {100, 26.0f}, \
+ {150, 54.0f}, \
+ {200, 92.0f}, \
+ {250, 140.0f}, \
} \
}
commit 424a34c504c90ae8839f076b23cfaed424b70980
Author: Mike Black W9MDB <mdb...@ya...>
Date: Fri May 3 17:16:25 2024 -0500
More work on micom get_freq
diff --git a/rigs/motorola/micom.c b/rigs/motorola/micom.c
index 7c60bcd7e..b66d99c51 100644
--- a/rigs/motorola/micom.c
+++ b/rigs/motorola/micom.c
@@ -137,6 +137,7 @@ static int micom_get_freq(RIG *rig, vfo_t vfo, freq_t *freq)
{
hamlib_port_t *rp = RIGPORT(rig);
unsigned char cmd[6] = { 0x24, 0x01, 0x18, 0x06, 0x06, 0x03 };
+ unsigned char ack[6] = { 0x24, 0x01, 0x18, 0xf3, 0xff, 0x03 };
unsigned char reply[11];
int retval;
@@ -153,7 +154,14 @@ static int micom_get_freq(RIG *rig, vfo_t vfo, freq_t *freq)
return retval;
}
+ // expecting 24 01 80 fe 98 03 -- an ack packet?
micom_read_frame(rig, reply, sizeof(reply));
+ if (reply[3] != 0xfe)
+ {
+ rig_debug(RIG_DEBUG_ERR, "%s: unknown packet...expected byte 4 = 0xfe\n", __func__);
+ }
+ micom_read_frame(rig, reply, sizeof(reply));
+ write_block(rp, ack, sizeof(ack));
set_transaction_inactive(rig);
*freq = (reply[5] << 24) | (reply[6] << 16) | (reply[7] << 8) | reply[8];
RETURNFUNC(RIG_OK);
@@ -181,7 +189,7 @@ struct rig_caps micom_caps =
RIG_MODEL(RIG_MODEL_MICOM2),
.model_name = "Micom 2/3",
.mfg_name = "Micom",
- .version = "20240503.0",
+ .version = "20240503.1",
.copyright = "LGPL",
.status = RIG_STATUS_ALPHA,
.rig_type = RIG_TYPE_TRANSCEIVER,
commit 74c96da18a6f4ee6159c4459b9614bbb7eaec14f
Author: Mike Black W9MDB <mdb...@ya...>
Date: Fri May 3 07:52:55 2024 -0500
Fix micom get_freq
diff --git a/rigs/motorola/micom.c b/rigs/motorola/micom.c
index ff8a96bb6..7c60bcd7e 100644
--- a/rigs/motorola/micom.c
+++ b/rigs/motorola/micom.c
@@ -41,16 +41,26 @@ static int micom_open(RIG *rig)
RETURNFUNC(RIG_OK);
}
+// returns bytes read
+// format has length in byte[1] plus 5 bytes 0x24/len/cmd at start and checksum+0x03 at end
+// So a data "length" of 5 is 10 bytes for example
static int micom_read_frame(RIG *rig, unsigned char *buf, int maxlen)
{
hamlib_port_t *rp = RIGPORT(rig);
- int retval;
+ int bytes;
//const char stopset[1] = {0x03};
ENTERFUNC;
- retval = read_block(rp, buf, 4);
- retval = read_block(rp, buf, buf[1]+1);
- rig_debug(RIG_DEBUG_VERBOSE, "%s: retval=%d\n", __func__, retval);
- RETURNFUNC(retval);
+ bytes = read_block(rp, buf, 3);
+ if (bytes+buf[1]+2 > maxlen)
+ {
+ rig_debug(RIG_DEBUG_ERR, "%s: buffer overrun...expected max of %d, got %d\n",
+ __func__, maxlen, bytes+buf[1]+2);
+ dump_hex(buf,bytes);
+ RETURNFUNC(-RIG_EPROTO);
+ }
+ bytes += read_block(rp, &buf[3], buf[1]+2);
+ dump_hex(buf,bytes);
+ RETURNFUNC(bytes);
}
/* Example of set of commands that works
@@ -129,7 +139,6 @@ static int micom_get_freq(RIG *rig, vfo_t vfo, freq_t *freq)
unsigned char cmd[6] = { 0x24, 0x01, 0x18, 0x06, 0x06, 0x03 };
unsigned char reply[11];
int retval;
- int ifreq;
cmd[4] = checksum(cmd,4);
set_transaction_active(rig);
@@ -146,8 +155,7 @@ static int micom_get_freq(RIG *rig, vfo_t vfo, freq_t *freq)
micom_read_frame(rig, reply, sizeof(reply));
set_transaction_inactive(rig);
- ifreq = (reply[5] << 24) | (reply[6] << 16) | (reply[7] << 8) | reply[8];
- *freq = ifreq * 1000;
+ *freq = (reply[5] << 24) | (reply[6] << 16) | (reply[7] << 8) | reply[8];
RETURNFUNC(RIG_OK);
}
@@ -173,7 +181,7 @@ struct rig_caps micom_caps =
RIG_MODEL(RIG_MODEL_MICOM2),
.model_name = "Micom 2/3",
.mfg_name = "Micom",
- .version = "20240502.0",
+ .version = "20240503.0",
.copyright = "LGPL",
.status = RIG_STATUS_ALPHA,
.rig_type = RIG_TYPE_TRANSCEIVER,
diff --git a/simulators/simmicom.c b/simulators/simmicom.c
index 70f5b0019..1cfb6a4d4 100644
--- a/simulators/simmicom.c
+++ b/simulators/simmicom.c
@@ -15,6 +15,7 @@ struct ip_mreq
#include <string.h>
#include <unistd.h>
#include "../include/hamlib/rig.h"
+#include "../src/misc.h"
#define BUFSIZE 256
@@ -114,6 +115,10 @@ again:
{
case 0x06:
printf("Report receiver freq\n");
+ unsigned char cmd[11] = { 0x24,0x06,0x18,0x05,0x01,0x00,0x38,0xea,0x50,0xba,0x03};
+ dump_hex(cmd, 11);
+ int n = write(fd, cmd, sizeof(cmd));
+ printf("%d bytes sent\n", n);
break;
case 0x13:
printf("PTT On\n");
@@ -121,6 +126,9 @@ again:
case 0x14:
printf("PTT Off\n");
break;
+ case 0x36:
+ printf("Key request\n");
+ break;
default: printf("Unknown cmd=%02x\n", buf[3]);
}
commit cc9bb6f0b54eaddf90fb6e1d32f1f0787b6eec04
Author: Mike Black W9MDB <mdb...@ya...>
Date: Thu May 2 08:20:02 2024 -0500
Another attempt at micom get/set freq
diff --git a/rigs/motorola/micom.c b/rigs/motorola/micom.c
index c86f28485..ff8a96bb6 100644
--- a/rigs/motorola/micom.c
+++ b/rigs/motorola/micom.c
@@ -45,18 +45,30 @@ static int micom_read_frame(RIG *rig, unsigned char *buf, int maxlen)
{
hamlib_port_t *rp = RIGPORT(rig);
int retval;
- const char stopset[1] = {0x03};
+ //const char stopset[1] = {0x03};
ENTERFUNC;
- retval = read_string_direct(rp, buf, maxlen, stopset, 1, 0, 12);
+ retval = read_block(rp, buf, 4);
+ retval = read_block(rp, buf, buf[1]+1);
rig_debug(RIG_DEBUG_VERBOSE, "%s: retval=%d\n", __func__, retval);
RETURNFUNC(retval);
}
+/* Example of set of commands that works
+24 06 18 05 01 00 38 ea 50 ba 03 15
+24 05 18 36 fe 7b ef 01 e0 03 15
+24 05 18 36 ff 7b ef 01 e1 03 15
+24 05 18 36 df 7b ef 01 c1 03 15
+24 05 18 36 ff 7b ef 01 e1 03
+*/
static int micom_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
{
hamlib_port_t *rp = RIGPORT(rig);
- unsigned char rxcmd[11] = { 0x24, 0x06, 0x18, 0x05, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03 };
- unsigned char txcmd[11] = { 0x24, 0x05, 0x81, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03 };
+ unsigned char rxcmd[12] = { 0x24, 0x06, 0x18, 0x05, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x15 };
+ unsigned char cmd2[11] = { 0x24, 0x05, 0x18, 0x36, 0xfe, 0x7b, 0xef, 0x01, 0xe0, 0x03, 0x15 };
+ unsigned char cmd3[11] = { 0x24, 0x05, 0x18, 0x36, 0xfe, 0x7b, 0xef, 0x01, 0xe1, 0x03, 0x15 };
+ unsigned char cmd4[11] = { 0x24, 0x05, 0x18, 0x36, 0xdf, 0x7b, 0xef, 0x01, 0xc1, 0x03, 0x15 };
+ unsigned char cmd5[10] = { 0x24, 0x05, 0x18, 0x36, 0xff, 0x7b, 0xef, 0x01, 0xe1, 0x03 };
+ //unsigned char txcmd[11] = { 0x24, 0x05, 0x81, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03 };
unsigned int ifreq = freq;
unsigned char reply[11];
int retval;
@@ -69,8 +81,11 @@ static int micom_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
set_transaction_active(rig);
rig_flush(rp);
-#if 0
retval = write_block(rp, rxcmd, sizeof(rxcmd));
+ if (retval == RIG_OK) retval = write_block(rp, cmd2, sizeof(cmd2));
+ if (retval == RIG_OK) retval = write_block(rp, cmd3, sizeof(cmd3));
+ if (retval == RIG_OK) retval = write_block(rp, cmd4, sizeof(cmd4));
+ if (retval == RIG_OK) retval = write_block(rp, cmd5, sizeof(cmd5));
if (retval != RIG_OK)
{
@@ -82,13 +97,11 @@ static int micom_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
micom_read_frame(rig, reply, sizeof(reply));
-#endif
-#if 0
+#if 0 // this method doesn't work
txcmd[5] = (ifreq >> 16) & 0xff;
txcmd[6] = (ifreq >> 8) & 0xff;
txcmd[7] = ifreq & 0xff;
txcmd[8] = checksum(txcmd, 8);
-#endif
txcmd[5] = (ifreq >> 24) & 0xff;
txcmd[6] = (ifreq >> 16) & 0xff;
txcmd[7] = (ifreq >> 8) & 0xff;
@@ -105,7 +118,7 @@ static int micom_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
return retval;
}
- micom_read_frame(rig, reply, sizeof(reply));
+#endif
set_transaction_inactive(rig);
return retval;
}
@@ -160,7 +173,7 @@ struct rig_caps micom_caps =
RIG_MODEL(RIG_MODEL_MICOM2),
.model_name = "Micom 2/3",
.mfg_name = "Micom",
- .version = "20240429.0",
+ .version = "20240502.0",
.copyright = "LGPL",
.status = RIG_STATUS_ALPHA,
.rig_type = RIG_TYPE_TRANSCEIVER,
commit a5fa04f8847d94d18b17e2a7e51a0b0df2fdd663
Author: Mike Black W9MDB <mdb...@ya...>
Date: Wed May 1 16:33:17 2024 -0500
Add another flush to micom.c
diff --git a/rigs/motorola/micom.c b/rigs/motorola/micom.c
index 0179efebd..c86f28485 100644
--- a/rigs/motorola/micom.c
+++ b/rigs/motorola/micom.c
@@ -120,6 +120,7 @@ static int micom_get_freq(RIG *rig, vfo_t vfo, freq_t *freq)
cmd[4] = checksum(cmd,4);
set_transaction_active(rig);
+ rig_flush(rp);
retval = write_block(rp, cmd, sizeof(cmd));
if (retval != RIG_OK)
@@ -172,6 +173,7 @@ struct rig_caps micom_caps =
.serial_stop_bits = 2,
.serial_parity = RIG_PARITY_ODD,
.serial_handshake = RIG_HANDSHAKE_NONE,
+ .timeout = 500,
.rig_open = micom_open,
.set_freq = micom_set_freq,
.get_freq = micom_get_freq,
commit 85f78862863f24ff842edae95024b3d8409e360a
Author: Mike Black W9MDB <mdb...@ya...>
Date: Wed May 1 16:29:48 2024 -0500
Another attempt at micom set_freq
diff --git a/rigs/motorola/micom.c b/rigs/motorola/micom.c
index ad2d6e428..0179efebd 100644
--- a/rigs/motorola/micom.c
+++ b/rigs/motorola/micom.c
@@ -56,8 +56,8 @@ static int micom_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
{
hamlib_port_t *rp = RIGPORT(rig);
unsigned char rxcmd[11] = { 0x24, 0x06, 0x18, 0x05, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03 };
- unsigned char txcmd[10] = { 0x24, 0x05, 0x18, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x03 };
- unsigned int ifreq = freq / 1000;
+ unsigned char txcmd[11] = { 0x24, 0x05, 0x81, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03 };
+ unsigned int ifreq = freq;
unsigned char reply[11];
int retval;
@@ -83,10 +83,17 @@ static int micom_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
micom_read_frame(rig, reply, sizeof(reply));
#endif
+#if 0
txcmd[5] = (ifreq >> 16) & 0xff;
txcmd[6] = (ifreq >> 8) & 0xff;
txcmd[7] = ifreq & 0xff;
txcmd[8] = checksum(txcmd, 8);
+#endif
+ txcmd[5] = (ifreq >> 24) & 0xff;
+ txcmd[6] = (ifreq >> 16) & 0xff;
+ txcmd[7] = (ifreq >> 8) & 0xff;
+ txcmd[8] = ifreq & 0xff;
+ txcmd[9] = checksum(rxcmd, 9);
retval = write_block(rp, txcmd, sizeof(txcmd));
micom_read_frame(rig, reply, sizeof(reply));
commit baeb484ddf1ae2a7aff811a0788f75c0762c87cc
Author: Mike Black W9MDB <mdb...@ya...>
Date: Wed May 1 08:34:01 2024 -0500
Change micom to odd parity
diff --git a/rigs/motorola/micom.c b/rigs/motorola/micom.c
index b4f7ad077..ad2d6e428 100644
--- a/rigs/motorola/micom.c
+++ b/rigs/motorola/micom.c
@@ -46,8 +46,10 @@ static int micom_read_frame(RIG *rig, unsigned char *buf, int maxlen)
hamlib_port_t *rp = RIGPORT(rig);
int retval;
const char stopset[1] = {0x03};
+ ENTERFUNC;
retval = read_string_direct(rp, buf, maxlen, stopset, 1, 0, 12);
- return retval;
+ rig_debug(RIG_DEBUG_VERBOSE, "%s: retval=%d\n", __func__, retval);
+ RETURNFUNC(retval);
}
static int micom_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
@@ -161,7 +163,7 @@ struct rig_caps micom_caps =
.serial_rate_max = 9600,
.serial_data_bits = 8,
.serial_stop_bits = 2,
- .serial_parity = RIG_PARITY_EVEN,
+ .serial_parity = RIG_PARITY_ODD,
.serial_handshake = RIG_HANDSHAKE_NONE,
.rig_open = micom_open,
.set_freq = micom_set_freq,
commit 4e600a9ed67c6e627c495deeacbb65872f8eaec0
Author: Mike Black W9MDB <mdb...@ya...>
Date: Tue Apr 30 22:41:06 2024 -0500
For Micom see if setting transmit freq is all we need -- setting Rx freq, then Tx isn't working
diff --git a/rigs/motorola/micom.c b/rigs/motorola/micom.c
index 8773e1edb..b4f7ad077 100644
--- a/rigs/motorola/micom.c
+++ b/rigs/motorola/micom.c
@@ -57,6 +57,7 @@ static int micom_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
unsigned char txcmd[10] = { 0x24, 0x05, 0x18, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x03 };
unsigned int ifreq = freq / 1000;
unsigned char reply[11];
+ int retval;
rxcmd[5] = (ifreq >> 24) & 0xff;
rxcmd[6] = (ifreq >> 16) & 0xff;
@@ -66,7 +67,8 @@ static int micom_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
set_transaction_active(rig);
rig_flush(rp);
- int retval = write_block(rp, rxcmd, sizeof(rxcmd));
+#if 0
+ retval = write_block(rp, rxcmd, sizeof(rxcmd));
if (retval != RIG_OK)
{
@@ -78,6 +80,7 @@ static int micom_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
micom_read_frame(rig, reply, sizeof(reply));
+#endif
txcmd[5] = (ifreq >> 16) & 0xff;
txcmd[6] = (ifreq >> 8) & 0xff;
txcmd[7] = ifreq & 0xff;
commit 8002d470508135ce4b70c40e8b736ff436e9b7fc
Author: Mike Black W9MDB <mdb...@ya...>
Date: Tue Apr 30 17:28:37 2024 -0500
Fix micom set_freq for correct checksum
diff --git a/rigs/motorola/micom.c b/rigs/motorola/micom.c
index ca9a01239..8773e1edb 100644
--- a/rigs/motorola/micom.c
+++ b/rigs/motorola/micom.c
@@ -106,6 +106,7 @@ static int micom_get_freq(RIG *rig, vfo_t vfo, freq_t *freq)
int retval;
int ifreq;
+ cmd[4] = checksum(cmd,4);
set_transaction_active(rig);
retval = write_block(rp, cmd, sizeof(cmd));
@@ -149,7 +150,7 @@ struct rig_caps micom_caps =
.version = "20240429.0",
.copyright = "LGPL",
.status = RIG_STATUS_ALPHA,
- .rig_type = RIG_TYPE_OTHER,
+ .rig_type = RIG_TYPE_TRANSCEIVER,
.targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE,
.ptt_type = RIG_PTT_RIG,
.port_type = RIG_PORT_SERIAL,
@@ -158,8 +159,10 @@ struct rig_caps micom_caps =
.serial_data_bits = 8,
.serial_stop_bits = 2,
.serial_parity = RIG_PARITY_EVEN,
+ .serial_handshake = RIG_HANDSHAKE_NONE,
.rig_open = micom_open,
.set_freq = micom_set_freq,
.get_freq = micom_get_freq,
- .set_ptt = micom_set_ptt
+ .set_ptt = micom_set_ptt,
+ .hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS
};
commit 105c6b8d3942646d35a7af09d52e1cb73a5a8c8b
Author: Mike Black W9MDB <mdb...@ya...>
Date: Tue Apr 30 17:28:03 2024 -0500
Add simmicom.c
diff --git a/simulators/Makefile.am b/simulators/Makefile.am
index 12c290686..74fb40224 100644
--- a/simulators/Makefile.am
+++ b/simulators/Makefile.am
@@ -8,7 +8,7 @@ DISTCLEANFILES =
bin_PROGRAMS =
-check_PROGRAMS = simelecraft simicgeneric simkenwood simyaesu simic9100 simic9700 simft991 simftdx1200 simftdx3000 simjupiter simpowersdr simid5100 simft736 simftdx5000 simtmd700 simrotorez simspid simft817 simts590 simft847 simic7300 simic7000 simic7100 simic7200 simatd578 simic905 simts450 simic7600 simic7610 simic705 simts950 simts990 simic7851 simftdx101 simxiegug90 simqrplabs simft818 simic275 simtrusdx simft1000 simtmd710 simts890 simxiegux108g simxiegux6100 simic910 simft450 simelecraftk4
+check_PROGRAMS = simelecraft simicgeneric simkenwood simyaesu simic9100 simic9700 simft991 simftdx1200 simftdx3000 simjupiter simpowersdr simid5100 simft736 simftdx5000 simtmd700 simrotorez simspid simft817 simts590 simft847 simic7300 simic7000 simic7100 simic7200 simatd578 simic905 simts450 simic7600 simic7610 simic705 simts950 simts990 simic7851 simftdx101 simxiegug90 simqrplabs simft818 simic275 simtrusdx simft1000 simtmd710 simts890 simxiegux108g simxiegux6100 simic910 simft450 simelecraftk4 simmicom
simelecraft_SOURCES = simelecraft.c
simkenwood_SOURCES = simkenwood.c
diff --git a/simulators/simmicom.c b/simulators/simmicom.c
new file mode 100644
index 000000000..70f5b0019
--- /dev/null
+++ b/simulators/simmicom.c
@@ -0,0 +1,130 @@
+// can run this using rigctl/rigctld and socat pty devices
+// gcc -o simspid simspid.c
+#define _XOPEN_SOURCE 700
+// since we are POSIX here we need this
+#if 0
+struct ip_mreq
+{
+ int dummy;
+};
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include <string.h>
+#include <unistd.h>
+#include "../include/hamlib/rig.h"
+
+#define BUFSIZE 256
+
+float freqA = 14074000;
+float freqB = 14074500;
+char tx_vfo = '0';
+char rx_vfo = '0';
+char modeA = '1';
+char modeB = '1';
+int width_main = 500;
+int width_sub = 700;
+
+
+int
+getmyline(int fd, unsigned char *buf)
+{
+ int i = 0;
+ int n = 0;
+ memset(buf, 0, BUFSIZE);
+
+ n = read(fd, buf, 4);
+
+ if (n <= 0) { sleep(1); return 0;}
+
+ int bytesToRead = buf[1] + 2; //; len does not include cksum, or eom
+ n += read(fd, &buf[4], bytesToRead);
+ printf("n=%d:", n);
+
+ for (i = 0; i < n; ++i)
+ {
+ printf(" %02x", buf[i]);
+ }
+
+ printf("\n");
+ return n;
+}
+
+#if defined(WIN32) || defined(_WIN32)
+int openPort(char *comport) // doesn't matter for using pts devices
+{
+ int fd;
+ fd = open(comport, O_RDWR);
+
+ if (fd < 0)
+ {
+ perror(comport);
+ }
+
+ return fd;
+}
+
+#else
+int openPort(char *comport) // doesn't matter for using pts devices
+{
+ int fd = posix_openpt(O_RDWR);
+ char *name = ptsname(fd);
+
+ if (name == NULL)
+ {
+ perror("pstname");
+ return -1;
+ }
+
+ printf("name=%s\n", name);
+
+ if (fd == -1 || grantpt(fd) == -1 || unlockpt(fd) == -1)
+ {
+ perror("posix_openpt");
+ return -1;
+ }
+
+ return fd;
+}
+#endif
+
+
+
+int main(int argc, char *argv[])
+{
+ unsigned char buf[256];
+
+
+again:
+ int fd = openPort(argv[1]);
+
+ while (1)
+ {
+ int bytes = getmyline(fd, buf);
+
+ if (bytes == 0)
+ {
+ close(fd);
+ goto again;
+ }
+
+ switch (buf[3])
+ {
+ case 0x06:
+ printf("Report receiver freq\n");
+ break;
+ case 0x13:
+ printf("PTT On\n");
+ break;
+ case 0x14:
+ printf("PTT Off\n");
+ break;
+
+ default: printf("Unknown cmd=%02x\n", buf[3]);
+ }
+ }
+
+ return 0;
+}
commit d683955811377ae1e47db526ae8d6a46928a1abf
Author: Mike Black W9MDB <mdb...@ya...>
Date: Tue Apr 30 10:39:30 2024 -0500
Fix set_freq for micom.c
diff --git a/rigs/motorola/micom.c b/rigs/motorola/micom.c
index adb88f06a..ca9a01239 100644
--- a/rigs/motorola/micom.c
+++ b/rigs/motorola/micom.c
@@ -81,7 +81,7 @@ static int micom_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
txcmd[5] = (ifreq >> 16) & 0xff;
txcmd[6] = (ifreq >> 8) & 0xff;
txcmd[7] = ifreq & 0xff;
- rxcmd[8] = checksum(txcmd, 8);
+ txcmd[8] = checksum(txcmd, 8);
retval = write_block(rp, txcmd, sizeof(txcmd));
micom_read_frame(rig, reply, sizeof(reply));
commit e67c80f1217953f1bff20bd4483e48df3a266e03
Author: Mike Black W9MDB <mdb...@ya...>
Date: Mon Apr 29 23:40:35 2024 -0500
Add get_freq and set_freq for micom
diff --git a/rigs/motorola/micom.c b/rigs/motorola/micom.c
index 43ad9b11f..adb88f06a 100644
--- a/rigs/motorola/micom.c
+++ b/rigs/motorola/micom.c
@@ -23,7 +23,17 @@
#include <misc.h>
#include <iofunc.h>
-static freq_t freqA = 14074000;
+// char* to start of checksum for len bytes
+unsigned int checksum(unsigned char *buf, int len)
+{
+ int checksum = 0;
+ int i;
+
+ // simple 1-byte checksum
+ for (i = 0; i < len; ++i) { checksum += buf[i]; }
+
+ return checksum & 0xff;
+}
static int micom_open(RIG *rig)
{
@@ -31,15 +41,86 @@ static int micom_open(RIG *rig)
RETURNFUNC(RIG_OK);
}
+static int micom_read_frame(RIG *rig, unsigned char *buf, int maxlen)
+{
+ hamlib_port_t *rp = RIGPORT(rig);
+ int retval;
+ const char stopset[1] = {0x03};
+ retval = read_string_direct(rp, buf, maxlen, stopset, 1, 0, 12);
+ return retval;
+}
+
static int micom_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
{
- freqA = freq;
- RETURNFUNC(RIG_OK);
+ hamlib_port_t *rp = RIGPORT(rig);
+ unsigned char rxcmd[11] = { 0x24, 0x06, 0x18, 0x05, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03 };
+ unsigned char txcmd[10] = { 0x24, 0x05, 0x18, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x03 };
+ unsigned int ifreq = freq / 1000;
+ unsigned char reply[11];
+
+ rxcmd[5] = (ifreq >> 24) & 0xff;
+ rxcmd[6] = (ifreq >> 16) & 0xff;
+ rxcmd[7] = (ifreq >> 8) & 0xff;
+ rxcmd[8] = ifreq & 0xff;
+ rxcmd[9] = checksum(rxcmd, 9);
+
+ set_transaction_active(rig);
+ rig_flush(rp);
+ int retval = write_block(rp, rxcmd, sizeof(rxcmd));
+
+ if (retval != RIG_OK)
+ {
+ rig_debug(RIG_DEBUG_ERR, "%s: write_block err: %s\n", __func__,
+ rigerror(retval));
+ set_transaction_inactive(rig);
+ return retval;
+ }
+
+ micom_read_frame(rig, reply, sizeof(reply));
+
+ txcmd[5] = (ifreq >> 16) & 0xff;
+ txcmd[6] = (ifreq >> 8) & 0xff;
+ txcmd[7] = ifreq & 0xff;
+ rxcmd[8] = checksum(txcmd, 8);
+ retval = write_block(rp, txcmd, sizeof(txcmd));
+ micom_read_frame(rig, reply, sizeof(reply));
+
+ if (retval != RIG_OK)
+ {
+ rig_debug(RIG_DEBUG_ERR, "%s: write_block err: %s\n", __func__,
+ rigerror(retval));
+ set_transaction_inactive(rig);
+ return retval;
+ }
+
+ micom_read_frame(rig, reply, sizeof(reply));
+ set_transaction_inactive(rig);
+ return retval;
}
static int micom_get_freq(RIG *rig, vfo_t vfo, freq_t *freq)
{
- *freq = freqA;
+ hamlib_port_t *rp = RIGPORT(rig);
+ unsigned char cmd[6] = { 0x24, 0x01, 0x18, 0x06, 0x06, 0x03 };
+ unsigned char reply[11];
+ int retval;
+ int ifreq;
+
+ set_transaction_active(rig);
+ retval = write_block(rp, cmd, sizeof(cmd));
+
+ if (retval != RIG_OK)
+ {
+ rig_debug(RIG_DEBUG_ERR, "%s: write_block err: %s\n", __func__,
+ rigerror(retval));
+ set_transaction_inactive(rig);
+ return retval;
+ }
+
+ micom_read_frame(rig, reply, sizeof(reply));
+ set_transaction_inactive(rig);
+ ifreq = (reply[5] << 24) | (reply[6] << 16) | (reply[7] << 8) | reply[8];
+ *freq = ifreq * 1000;
RETURNFUNC(RIG_OK);
}
@@ -48,17 +129,16 @@ static int micom_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt)
hamlib_port_t *rp = RIGPORT(rig);
unsigned char on[] = { 0x24, 0x02, 0x81, 0x13, 0x01, 0xBB, 0x03 };
unsigned char off[] = { 0x24, 0x02, 0x81, 0x14, 0x01, 0xBC, 0x03 };
+ int retval;
+ set_transaction_active(rig);
rig_flush(rp);
- int retval = write_block(rp, ptt ? on : off, sizeof(on));
- if (retval != RIG_OK)
- {
- set_transaction_inactive(rig);
- RETURNFUNC(retval);
- }
+ retval = write_block(rp, ptt ? on : off, sizeof(on));
+
+ set_transaction_inactive(rig);
- return RIG_OK;
+ return retval;
}
struct rig_caps micom_caps =
@@ -66,7 +146,7 @@ struct rig_caps micom_caps =
RIG_MODEL(RIG_MODEL_MICOM2),
.model_name = "Micom 2/3",
.mfg_name = "Micom",
- .version = "20240428.0",
+ .version = "20240429.0",
.copyright = "LGPL",
.status = RIG_STATUS_ALPHA,
.rig_type = RIG_TYPE_OTHER,
commit 594df4b31de374e1066dd27ddb510640f59d9531
Merge: c7635ee3b 8f1b6851e
Author: Michael Black <mdb...@ya...>
Date: Sun Apr 28 17:06:20 2024 -0500
Merge pull request #1544 from N0NB/update_win_build_scripts
Sync local build scripts with main repository
commit 8f1b6851e787a72f617e5e139f2a046413b5a5b7
Author: Nate Bargmann <n0...@n0...>
Date: Sun Apr 28 16:23:35 2024 -0500
Sync local build scripts with main repository
Updates for including libgcc* provided by MinGW in Debian 11 and Debian
12 (untested).
Include other updates added to the build virtual machine along the way.
diff --git a/scripts/build-w32.sh b/scripts/build-w32.sh
index de7f17607..8414faf1f 100755
--- a/scripts/build-w32.sh
+++ b/scripts/build-w32.sh
@@ -14,14 +14,17 @@
BUILD_DIR=~/builds
# Set this to LibUSB archive extracted in $BUILD_DIR
-LIBUSB_VER=libusb-1.0.22
+LIBUSB_VER=libusb-1.0.24
-# Set to the correct HOST_ARCH= line for your minGW installation
+# Set to the correct HOST_ARCH= line for your MinGW installation
HOST_ARCH=i686-w64-mingw32
-# Set to the strip name for your version of minGW
+# Set to the strip name for your version of MinGW
HOST_ARCH_STRIP=i686-w64-mingw32-strip
+# Set to the dlltool name for your version of MinGW
+HOST_ARCH_DLLTOOL=i686-w64-mingw32-dlltool
+
# Error return codes. See /usr/include/sysexits.h
EX_USAGE=64
EX_NOINPUT=66
@@ -176,6 +179,10 @@ program is not considered a "derivative work" when using the published Hamlib
API and normal linking to the front-end library, and may be of a license of
your choosing.
+As of 08 Sep 2022 a .lib file is generated using the MinGW dlltool utility.
+If this file does not work for your project, follow the steps in the following
+section:
+
For linking the library with MS Visual C++ 2003, from the directory you
installed Hamlib run the following commands to generate the libhamlib-4.lib
file needed for linking with your MSVC project:
@@ -186,15 +193,12 @@ c:\Program Files\Microsoft Visual C++ Toolkit 2003\bin\link.exe /lib /machine:i3
To do the same for Visual Studio 2017:
cd lib\msvc
-"c:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\Tools\MSVC\14.16.27023\bin\Hostx64\x86\bin\link.exe" /lib /machine:i386 /def:libhamlib-4.def
+c:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\Tools\MSVC\14.16.27023\bin\Hostx64\x86\bin\link.exe /lib /machine:i386 /def:libhamlib-4.def
-and for VS 2019:
+For VS 2019:
cd lib\msvc
-"c:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.25.28610\bin\Hostx64\x86\bin\link.exe" /lib /machine:i386 /def:libhamlib-4.def
-
-cd lib/msvc
-"c:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.32.31326\bin\Hostx64\x86\link.exe" /lib /machine:i386 /def:libhamlib-4.def
+c:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.25.28610\bin\Hostx64\x86\bin\link.exe /lib /machine:i386 /def:libhamlib-4.def
NOTE: feedback is requested on the previous two command examples!
@@ -212,6 +216,7 @@ Please report problems or success to ham...@li...
Cheers,
Stephane Fillod - F8CFE
+Mike Black - W9MDB
Nate Bargmann - N0NB
http://www.hamlib.org
@@ -232,9 +237,9 @@ make -j 4 install
mkdir -p ${ZIP_DIR}/bin ${ZIP_DIR}/lib/msvc ${ZIP_DIR}/lib/gcc ${ZIP_DIR}/include ${ZIP_DIR}/doc
cp -a src/libhamlib.def ${ZIP_DIR}/lib/msvc/libhamlib-4.def
-#todos ${ZIP_DIR}/lib/msvc/libhamlib-4.def
+todos ${ZIP_DIR}/lib/msvc/libhamlib-4.def
cp -a ${INST_DIR}/include/hamlib ${ZIP_DIR}/include/.
-#todos ${ZIP_DIR}/include/hamlib/*.h
+todos ${ZIP_DIR}/include/hamlib/*.h
# C++ binding is useless on w32 because of ABI
for f in *class.h
@@ -287,4 +292,21 @@ then
cp -a ${FILE} ${ZIP_DIR}/bin/.
fi
+# Required for MinGW with GCC 10 (Debian 11)
+FILE="/usr/lib/gcc/i686-w64-mingw32/10-posix/libgcc_s_dw2-1.dll"
+if test -f "$FILE"
+then
+ cp -a ${FILE} ${ZIP_DIR}/bin/.
+fi
+
+# Required for MinGW with GCC 12 (Debian 12)
+FILE="/usr/lib/gcc/i686-w64-mingw32/12-posix/libgcc_s_dw2-1.dll"
+if test -f "$FILE"
+then
+ cp -a ${FILE} ${ZIP_DIR}/bin/.
+fi
+
+# Generate .lib file for MSVC
+${HOST_ARCH_DLLTOOL} --input-def ${ZIP_DIR}/lib/msvc/libhamlib-4.def --output-lib ${ZIP_DIR}/lib/msvc/libhamlib-4.lib
+
/usr/bin/zip -r ${HL_FILENAME}.zip $(basename ${ZIP_DIR})
diff --git a/scripts/build-w64.sh b/scripts/build-w64.sh
index eb302f135..fff9b6241 100755
--- a/scripts/build-w64.sh
+++ b/scripts/build-w64.sh
@@ -14,14 +14,17 @@
BUILD_DIR=~/builds
# Set this to LibUSB archive extracted in $BUILD_DIR
-LIBUSB_VER=libusb-1.0.22
+LIBUSB_VER=libusb-1.0.24
-# Set to the correct HOST_ARCH= line for your minGW installation
+# Set to the correct HOST_ARCH= line for your MinGW installation
HOST_ARCH=x86_64-w64-mingw32
-# Set to the strip name for your version of minGW
+# Set to the strip name for your version of MinGW
HOST_ARCH_STRIP=x86_64-w64-mingw32-strip
+# Set to the dlltool name for your version of MinGW
+HOST_ARCH_DLLTOOL=x86_64-w64-mingw32-dlltool
+
# Error return codes. See /usr/include/sysexits.h
EX_USAGE=64
EX_NOINPUT=66
@@ -176,6 +179,10 @@ program is not considered a "derivative work" when using the published Hamlib
API and normal linking to the front-end library, and may be of a license of
your choosing.
+As of 08 Sep 2022 a .lib file is generated using the MinGW dlltool utility.
+If this file does not work for your project, follow the steps in the following
+section:
+
For linking the library with MS Visual C++ 2003, from the directory you
installed Hamlib run the following commands to generate the libhamlib-4.lib
file needed for linking with your MSVC project:
@@ -196,6 +203,11 @@ c:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.2
NOTE: feedback is requested on the previous two command examples as these do
not appear to be correct to generate a 64 bit libhamlib-4.lib file!
+For VS 2022:
+
+cd lib/msvc
+c:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.32.31326\bin\Hostx64\x86\link.exe /lib /machine:i386 /def:libhamlib-4.def
+
The published Hamlib API may be found at:
http://hamlib.sourceforge.net/manuals/4.1/index.html
@@ -210,6 +222,7 @@ Please report problems or success to ham...@li...
Cheers,
Stephane Fillod - F8CFE
+Mike Black - W9MDB
Nate Bargmann - N0NB
http://www.hamlib.org
@@ -285,4 +298,21 @@ then
cp -a ${FILE} ${ZIP_DIR}/bin/.
fi
+# Required for MinGW with GCC 10 (Debian 11)
+FILE="/usr/lib/gcc/i686-w64-mingw32/10-posix/libgcc_s_dw2-1.dll"
+if test -f "$FILE"
+then
+ cp -a ${FILE} ${ZIP_DIR}/bin/.
+fi
+
+# Required for MinGW with GCC 12 (Debian 12)
+FILE="/usr/lib/gcc/i686-w64-mingw32/12-posix/libgcc_s_dw2-1.dll"
+if test -f "$FILE"
+then
+ cp -a ${FILE} ${ZIP_DIR}/bin/.
+fi
+
+# Generate .lib file for MSVC
+${HOST_ARCH_DLLTOOL} --input-def ${ZIP_DIR}/lib/msvc/libhamlib-4.def --output-lib ${ZIP_DIR}/lib/msvc/libhamlib-4.lib
+
/usr/bin/zip -r ${HL_FILENAME}.zip $(basename ${ZIP_DIR})
commit c7635ee3b14e7ec2c7ccba9bbb3ea81aa56685f2
Merge: 7b4429754 94d753860
Author: Nate Bargmann <n0...@n0...>
Date: Sun Apr 28 15:49:15 2024 -0500
Merge pull request #1543 from N0NB/update_win_build_scripts
REALLY include README.md in archive
commit 94d753860b194b234324195681484e2efcc5d711
Author: Nate Bargmann <n0...@n0...>
Date: Sun Apr 28 15:47:08 2024 -0500
REALLY include README.md in archive
Teach me not to test before committing and pushing...
diff --git a/Makefile.am b/Makefile.am
index 7dff7c0d0..398b1f812 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -6,7 +6,7 @@ aclocal_DATA = hamlib.m4
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = hamlib.pc
-EXTRA_DIST = PLAN LICENSE hamlib.m4 hamlib.pc.in README.developer \
+EXTRA_DIST = PLAN LICENSE hamlib.m4 hamlib.pc.in README.md README.developer \
README.betatester README.freqranges README.multicast README.osx \
Android.mk
commit 7b44297543ff0ff1c2b11b71fa17ecf33477e05b
Merge: d47fb672c abee6a3cb
Author: Nate Bargmann <n0...@n0...>
Date: Sun Apr 28 15:36:03 2024 -0500
Merge pull request #1542 from N0NB/update_win_build_scripts
Distribute README.md instead of README
commit abee6a3cb9f93c9456fbae8bcd3d44c9f22f07d1
Author: Nate Bargmann <n0...@n0...>
Date: Sun Apr 28 15:31:16 2024 -0500
Distribute README.md instead of README
README.md has replaced README as the main introductory file.
diff --git a/Makefile.am b/Makefile.am
index b854d504c..7dff7c0d0 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -11,7 +11,7 @@ EXTRA_DIST = PLAN LICENSE hamlib.m4 hamlib.pc.in README.developer \
Android.mk
doc_DATA = ChangeLog COPYING COPYING.LIB LICENSE \
- README README.betatester README.developer
+ README.md README.betatester README.developer
SUBDIRS = macros include lib security \
$(BACKEND_LIST) \
-----------------------------------------------------------------------
Summary of changes:
Makefile.am | 4 +-
rigs/icom/icom.c | 26 ++++--
rigs/icom/icom.h | 2 +-
rigs/icom/xiegu.c | 29 +++++--
rigs/kenwood/kenwood.c | 6 +-
rigs/kenwood/kenwood.h | 2 +-
rigs/motorola/micom.c | 162 +++++++++++++++++++++++++++++++----
rigs/yaesu/ft891.c | 2 +-
rigs/yaesu/ft891.h | 11 ++-
scripts/build-w32.sh | 44 +++++++---
scripts/build-w64.sh | 36 +++++++-
simulators/Makefile.am | 2 +-
simulators/{simspid.c => simmicom.c} | 48 +++++++----
src/rig.c | 16 ++--
14 files changed, 313 insertions(+), 77 deletions(-)
copy simulators/{simspid.c => simmicom.c} (63%)
hooks/post-receive
--
Hamlib -- Ham radio control libraries
|
|
From: n0nb <n0...@us...> - 2024-04-28 19:57:39
|
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 d47fb672c82aebce342cba8f0dd3b496ec536b9a (commit)
via 2638eeb774ed5c162c6ab492cb3af3328cec1402 (commit)
via 92e82a25d2ebbbf776c4f9aa58a37dde8fc15554 (commit)
via fe0d47acef9dd5a7401e4a4162fc5195e6f7a0c7 (commit)
via 86afa90739b3b4427646a555670c431683bc1bc8 (commit)
via 25f58afb72e993e2c51435c47ba0126d50971317 (commit)
via d7e0b214f7bcea8855f0b5570d48b06a69bf5a7e (commit)
via e9a9424eedd44ed4f8b908dfb23e3e7899bf1eb5 (commit)
via 93bd44c3d56ac7d406ef0d90dc47ace1d813fec9 (commit)
via b182ca2d51740d5dcaa126b52d4f208003b9cc86 (commit)
via 6a98b0b9cb8128c09ecf4cf7374bbefd09170aaf (commit)
via c70502ea34fd319f41d6f4d9c4ee22e30b3db846 (commit)
via f8a67d716e54ed9ea816920f25fefbea3594571f (commit)
via 2b275531559f2158a2aaf5e7534b352dac708ec8 (commit)
via 08aac883775c8cd89d682682f2e3b49d796e2a35 (commit)
via c31497918f8511ad01e1dd749e7df94a00332db2 (commit)
via d9b57bc7a8a5cf0f93c6792a58f7db1273992199 (commit)
via 90545a192e94ebb01021c05273f5c3d8e196c2be (commit)
via dce80d264a5cd093707c0e6720e18dff77f68665 (commit)
via 4c111da0d1b7206050ca719a9ff3c97e84aaa260 (commit)
via d9b589d25499ca823777130a854768b4533cc0a6 (commit)
via 95b0af114f10defbcfbb4f1b1d9b97c7f99ee5b8 (commit)
via 9e42ca2052d6b3ade2d30400b952ed8c34147aa7 (commit)
via 331143fa173eb7bd1bd44aae60544155fcd97a1f (commit)
via a6ad5f0928b23a0717426e708dd4d1fe3b8a9592 (commit)
via b42aa75dd8251721345e89926e0bd4140fa2accb (commit)
via 6cfdb9d4eddf8b135a3961e5d41912a6c1152348 (commit)
via bddd7e1a7d984bb1edac14724afb1921174ed31c (commit)
via 35b0bb086bcb7342ee38820231c673eb402fc127 (commit)
via 0ba199448bf49b32b776cfdeb4ae140f3ac532d9 (commit)
via 3dac2efb48a3781fbeea73a60335bf8c1466e401 (commit)
via 63fa818fd7a5f2beb650a5f6dac8c48c9534d49d (commit)
via 878243aff35f3e42191a916c857f8857deb61dfd (commit)
via 00ceb6e72f1f5c4d58afc090bae5c327dccfd97c (commit)
via 279362f40347d92c5623702297c48621334df7e3 (commit)
via 9a7dda25c88848531cb96834eab8d8851a020c65 (commit)
from 41de3425d24edcbd448e0231692eeacc58909521 (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 d47fb672c82aebce342cba8f0dd3b496ec536b9a
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sun Apr 28 11:44:05 2024 -0500
Fix serial port type for Micom
diff --git a/rigs/motorola/micom.c b/rigs/motorola/micom.c
index f815c80c2..43ad9b11f 100644
--- a/rigs/motorola/micom.c
+++ b/rigs/motorola/micom.c
@@ -72,13 +72,12 @@ struct rig_caps micom_caps =
.rig_type = RIG_TYPE_OTHER,
.targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE,
.ptt_type = RIG_PTT_RIG,
- .dcd_type = RIG_DCD_RIG,
- .port_type = RIG_PORT_NONE,
+ .port_type = RIG_PORT_SERIAL,
.serial_rate_min = 9600,
.serial_rate_max = 9600,
.serial_data_bits = 8,
.serial_stop_bits = 2,
- .serial_parity = RIG_PARITY_ODD,
+ .serial_parity = RIG_PARITY_EVEN,
.rig_open = micom_open,
.set_freq = micom_set_freq,
.get_freq = micom_get_freq,
commit 2638eeb774ed5c162c6ab492cb3af3328cec1402
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sun Apr 28 11:33:23 2024 -0500
Fix ptt type for Micom 2/3 and change from Motorola to Micom
diff --git a/rigs/motorola/micom.c b/rigs/motorola/micom.c
index 8168b0650..f815c80c2 100644
--- a/rigs/motorola/micom.c
+++ b/rigs/motorola/micom.c
@@ -65,13 +65,13 @@ struct rig_caps micom_caps =
{
RIG_MODEL(RIG_MODEL_MICOM2),
.model_name = "Micom 2/3",
- .mfg_name = "Motorola",
- .version = "20240423.0",
+ .mfg_name = "Micom",
+ .version = "20240428.0",
.copyright = "LGPL",
.status = RIG_STATUS_ALPHA,
.rig_type = RIG_TYPE_OTHER,
.targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE,
- .ptt_type = RIG_PTT_NONE,
+ .ptt_type = RIG_PTT_RIG,
.dcd_type = RIG_DCD_RIG,
.port_type = RIG_PORT_NONE,
.serial_rate_min = 9600,
commit 92e82a25d2ebbbf776c4f9aa58a37dde8fc15554
Author: Mike Black W9MDB <mdb...@ya...>
Date: Fri Apr 26 17:35:18 2024 -0500
Fix possible null argument in rig_test_2038
diff --git a/src/misc.c b/src/misc.c
index 2ea94e6d5..e7bdb2c02 100644
--- a/src/misc.c
+++ b/src/misc.c
@@ -3104,7 +3104,7 @@ int rig_test_2038(RIG *rig)
if (s == NULL) { failed = 1; }
else rig_debug(RIG_DEBUG_VERBOSE, "%s: time_t 2038 test = 0x%08lx:%s", __func__, x,
- s);
+ s == NULL ? "NULL" : s);
#endif
commit fe0d47acef9dd5a7401e4a4162fc5195e6f7a0c7
Author: Mike Black W9MDB <mdb...@ya...>
Date: Wed Apr 24 12:33:14 2024 -0500
Fix motorola Makefile.am
diff --git a/rigs/motorola/Makefile.am b/rigs/motorola/Makefile.am
index baa2ff0c4..d47e60a7e 100644
--- a/rigs/motorola/Makefile.am
+++ b/rigs/motorola/Makefile.am
@@ -1,4 +1,4 @@
-RSSRC = motorola.c micom.c
+RSSRC = motorola.c micom.c motorola.h
noinst_LTLIBRARIES = libhamlib-motorola.la
libhamlib_motorola_la_SOURCES = $(RSSRC)
commit 86afa90739b3b4427646a555670c431683bc1bc8
Author: Mike Black W9MDB <mdb...@ya...>
Date: Wed Apr 24 12:21:30 2024 -0500
Add Android.mk for motorola
diff --git a/rigs/motorola/Android.mk b/rigs/motorola/Android.mk
new file mode 100644
index 000000000..17ba6f97b
--- /dev/null
+++ b/rigs/motorola/Android.mk
@@ -0,0 +1,12 @@
+LOCAL_PATH:= $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := motorola.c micom.c
+LOCAL_MODULE := motorola
+
+LOCAL_CFLAGS :=
+LOCAL_C_INCLUDES := android include src
+LOCAL_LDLIBS := -lhamlib -Lobj/local/$(TARGET_ARCH_ABI)
+
+include $(BUILD_STATIC_LIBRARY)
commit 25f58afb72e993e2c51435c47ba0126d50971317
Author: Mike Black W9MDB <mdb...@ya...>
Date: Wed Apr 24 12:07:10 2024 -0500
Update motorola
diff --git a/rigs/motorola/Makefile.am b/rigs/motorola/Makefile.am
new file mode 100644
index 000000000..baa2ff0c4
--- /dev/null
+++ b/rigs/motorola/Makefile.am
@@ -0,0 +1,6 @@
+RSSRC = motorola.c micom.c
+
+noinst_LTLIBRARIES = libhamlib-motorola.la
+libhamlib_motorola_la_SOURCES = $(RSSRC)
+
+EXTRA_DIST = Android.mk
diff --git a/rigs/motorola/README.txt b/rigs/motorola/README.txt
new file mode 100644
index 000000000..0f7ccd9cc
--- /dev/null
+++ b/rigs/motorola/README.txt
@@ -0,0 +1,106 @@
+Received from George Csahanin W2DB
+
+PS-
+
+Here are some of the code from the head project:
+
+//Control data strings
+/////byte volumestr[8] = {
+ ///// 0x24,0x03,0x18,0x2b,0x00,0x00,0x6A,0x03};
+byte squelchOff[8] = {
+ 0x24,0x03,0x18,0x09,0x00,0x00,0x48,0x03};
+byte squelchOn[8] = {
+ 0x24,0x03,0x18,0x09,0x00,0x01,0x49,0x03};
+byte volume[8] = {
+ 0x24,0x03,0x18,0x2B,0x00,0x00,0x6A,0x03}; // volume level 0 in hex
+byte reportVol[7] = {
+ 0x24,0x01,0x18,0x2C,0x69,0x03};
+byte button1[10] = {
+ 0x24,0x05,0x18,0x36,0xFF,0x79,0xEF,0x01,0xDF,0x03}; // keypad button 1
+byte button2[10] = {
+ 0x24,0x05,0x18,0x36,0xFF,0x3B,0xEF,0x01,0xA1,0x03}; // keypad button 2
+byte button3[10] = {
+ 0x24,0x05,0x18,0x36,0xFF,0x7B,0xE7,0x01,0xD9,0x03}; // keypad button 3
+byte button4[10] = {
+ 0x24,0x05,0x18,0x36,0xFF,0x5B,0xEF,0x01,0xC1,0x03}; // keypad button 4
+byte button5[10] = {
+ 0x24,0x05,0x18,0x36,0xFF,0x7B,0xEB,0x01,0xDD,0x03}; // keypad button 5
+byte button6[10] = {
+ 0x24,0x05,0x18,0x36,0xFF,0x7B,0x6F,0x01,0x61,0x03}; // keypad button 6
+byte button7[10] = {
+ 0x24,0x05,0x18,0x36,0xFF,0x7B,0xAF,0x01,0xA1,0x03}; // keypad button 7
+byte button8[10] = {
+ 0x24,0x05,0x18,0x36,0xF7,0x7B,0xEF,0x01,0xD9,0x03}; // keypad button 8
+byte button9[10] = {
+ 0x24,0x05,0x18,0x36,0xFF,0x7A,0xEF,0x01,0xE0,0x03}; // keypad button 9
+byte button0[10] = {
+ 0x24,0x05,0x18,0x36,0x7F,0x7B,0xEF,0x01,0x61,0x03}; // keypad button 0
+byte buttonAsterisk[10] = {
+ 0x24,0x05,0x18,0x36,0xFB,0x7B,0xEF,0x01,0xDD,0x03}; // keypad button *
+byte buttonPound[10] = {
+ 0x24,0x05,0x18,0x36,0xFF,0x6B,0xEF,0x01,0xD1,0x03}; // keypad button #
+byte buttonMENU[10] = {
+ 0x24,0x05,0x18,0x36,0xFF,0x7B,0xEF,0x00,0xE0,0x03}; // keypad button MENU
+byte buttonPesc[10] = {
+ 0x24,0x05,0x18,0x36,0xEF,0x7B,0xEF,0x01,0xD1,0x03}; // keypad button Pesc
+byte buttonEnter[10] = {
+ 0x24,0x05,0x18,0x36,0xFF,0x7B,0xED,0x01,0xDF,0x03}; // keypad button
+Enter
+byte colorKey[10] = {
+}; // keypad button for color or other use
+byte moreKey[10] = {
+ 0x24,0x05,0x18,0x36,0xFD,0x7B,0xEF,0x01,0xDF,0x03}; // more key
+byte fOneKey[10] = {
+ 0x24,0x05,0x18,0x36,0xBF,0x7B,0xEF,0x01,0xA1,0x03}; // soft key F1
+byte fTwoKey[10] = {
+ 0x24,0x05,0x18,0x36,0xFF,0x73,0xEF,0x01,0xD9,0x03}; // soft key F2
+byte fThreeKey[10] = {
+ 0x24,0x05,0x18,0x36,0xFF,0x7B,0xEE,0x01,0xE0,0x03}; //soft key F3
+byte fFourKey[10] = {
+ 0x24,0x05,0x18,0x36,0xFF,0x7B,0xCF,0x01,0xc1,0x03}; // soft key F4
+byte buttonRelease[10] = {
+ 0x24,0x05,0x18,0x36,0xFF,0x7B,0xEF,0x01,0xE1,0x03}; // button release
+command
+byte arrowUp[10] = {
+ 0x24,0x05,0x18,0x36,0xFE,0x7B,0xEF,0x01,0xE0,0x03}; // up button command
+byte arrowDown[10] = {
+ 0x24,0x05,0x18,0x36,0xDF,0x7B,0xEF,0x01,0xC1,0x03}; // down button
+command
+byte GetData[9] = {
+ 0x24,0x04,0x18,0x29,0x00,0x01,0x2E,0x98,0x03}; // enable special reports
+//byte txACK[6] = {
+// 0x24,0x01,0x10,0xF3,0x28,0x03}; // ack to radio
+byte pttEngage[7] = {
+ 0x24, 0x02, 0x81, 0x13, 0x01, 0xBB, 0x03};
+byte pttRelease[7] = {
+ 0x24, 0x02, 0x81, 0x14, 0x01, 0xBC, 0x03};
+byte acknowledge[6] = {
+ 0x24,0x01,0x10,0xF3,0x28,0x03}; // ack to radio from head
+byte radioack[6] = {
+ 0x24,0x01,0x80,0xF3,0x98,0x03}; // ack from radio to head
+//byte rxACK[6] = {
+// 0x24,0x01,0x80,0xF3,0x98,0x03}; // ack from radio
+
+
+ //---------FREQUENCY(LINE1)-----------------------------
+ if ((opCode == 0x2E && subopCode == 0x03) && (checkSum == true))
+ {
+ //EXAMPLE FREQUENCY PACKET 24 0F 81 2E 03 02 6E 46 20 20 38 2C 39
+39 32 2E 39 38 82 03 (display 0, 1)
+ char freqLine[10];
+ for(int i=5, j=0; i<=15; i++, j++) {
+ freqLine[j] = rxdata[i];
+ freqLine[j+1] = '\0';
+ }
+
+ LCD.sendString(freqLine,0,1);
+
+ }
+
+//---------------------MENU(LINE0)------------------------------
+ if (opCode == 0x2E && subopCode == 0x02)
+ {
+ //EXAMPLE MENU PACKET 24 09 81 2E 02 02 55 4D 45 4E 55 20 8A 03
+(display 0, 0)
+
+
diff --git a/rigs/motorola/motorola.c b/rigs/motorola/motorola.c
new file mode 100644
index 000000000..192b2b977
--- /dev/null
+++ b/rigs/motorola/motorola.c
@@ -0,0 +1,32 @@
+/*
+ * Hamlib Motorola backend - main file
+ * Copyright (c) 2024 Michael Black W9MDB
+ *
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ */
+
+#include "motorola.h"
+#include <register.h>
+
+DECLARE_INITRIG_BACKEND(motorola)
+{
+ rig_debug(RIG_DEBUG_VERBOSE, "%s: _init called\n", __func__);
+
+ rig_register(&micom_caps);
+
+ return RIG_OK;
+}
diff --git a/rigs/motorola/motorola.h b/rigs/motorola/motorola.h
new file mode 100644
index 000000000..db6790b1f
--- /dev/null
+++ b/rigs/motorola/motorola.h
@@ -0,0 +1,8 @@
+#ifndef _MOTOROLA_H
+#define _MOTOROLADUMMY_H 1
+
+#include "hamlib/rig.h"
+
+extern struct rig_caps micom_caps;
+
+#endif // _MOTOROLA_H
commit d7e0b214f7bcea8855f0b5570d48b06a69bf5a7e
Author: Mike Black W9MDB <mdb...@ya...>
Date: Wed Apr 24 12:06:36 2024 -0500
Add fake freq set/get for micom
diff --git a/rigs/motorola/micom.c b/rigs/motorola/micom.c
new file mode 100644
index 000000000..8168b0650
--- /dev/null
+++ b/rigs/motorola/micom.c
@@ -0,0 +1,86 @@
+/*
+ * Hamlib Motorola Micom backend - main file
+ * Copyright (c) 2024 Michael Black W9MDB
+ *
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ */
+
+#include <hamlib/rig.h>
+#include <misc.h>
+#include <iofunc.h>
+
+static freq_t freqA = 14074000;
+
+static int micom_open(RIG *rig)
+{
+ ENTERFUNC;
+ RETURNFUNC(RIG_OK);
+}
+
+static int micom_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
+{
+ freqA = freq;
+ RETURNFUNC(RIG_OK);
+}
+
+static int micom_get_freq(RIG *rig, vfo_t vfo, freq_t *freq)
+{
+ *freq = freqA;
+ RETURNFUNC(RIG_OK);
+}
+
+static int micom_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt)
+{
+ hamlib_port_t *rp = RIGPORT(rig);
+ unsigned char on[] = { 0x24, 0x02, 0x81, 0x13, 0x01, 0xBB, 0x03 };
+ unsigned char off[] = { 0x24, 0x02, 0x81, 0x14, 0x01, 0xBC, 0x03 };
+
+ rig_flush(rp);
+ int retval = write_block(rp, ptt ? on : off, sizeof(on));
+
+ if (retval != RIG_OK)
+ {
+ set_transaction_inactive(rig);
+ RETURNFUNC(retval);
+ }
+
+ return RIG_OK;
+}
+
+struct rig_caps micom_caps =
+{
+ RIG_MODEL(RIG_MODEL_MICOM2),
+ .model_name = "Micom 2/3",
+ .mfg_name = "Motorola",
+ .version = "20240423.0",
+ .copyright = "LGPL",
+ .status = RIG_STATUS_ALPHA,
+ .rig_type = RIG_TYPE_OTHER,
+ .targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE,
+ .ptt_type = RIG_PTT_NONE,
+ .dcd_type = RIG_DCD_RIG,
+ .port_type = RIG_PORT_NONE,
+ .serial_rate_min = 9600,
+ .serial_rate_max = 9600,
+ .serial_data_bits = 8,
+ .serial_stop_bits = 2,
+ .serial_parity = RIG_PARITY_ODD,
+ .rig_open = micom_open,
+ .set_freq = micom_set_freq,
+ .get_freq = micom_get_freq,
+ .set_ptt = micom_set_ptt
+};
commit e9a9424eedd44ed4f8b908dfb23e3e7899bf1eb5
Author: Mike Black W9MDB <mdb...@ya...>
Date: Wed Apr 24 12:06:00 2024 -0500
Adding motorola rig
diff --git a/configure.ac b/configure.ac
index d07ec9b9a..cfcd2eb1f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -66,7 +66,7 @@ dnl added to AC_CONFIG_FILES near the end of this file. See README.developer
dnl Beware of duplication should a backend directory include both rig and
dnl rotor definitions, e.g. "dummy". Optional backends will not be listed
dnl here but will be added later, e.g. "winradio".
-RIG_BACKEND_LIST="rigs/adat rigs/alinco rigs/aor rigs/barrett rigs/codan rigs/dorji rigs/drake rigs/dummy rigs/elad rigs/flexradio rigs/icom rigs/icmarine rigs/jrc rigs/kachina rigs/kenwood rigs/kit rigs/lowe rigs/pcr rigs/prm80 rigs/racal rigs/rft rigs/rs rigs/skanti rigs/tapr rigs/tentec rigs/tuner rigs/uniden rigs/winradio rigs/wj rigs/yaesu rigs/gomspace rigs/mds rigs/anytone"
+RIG_BACKEND_LIST="rigs/adat rigs/alinco rigs/aor rigs/barrett rigs/codan rigs/dorji rigs/drake rigs/dummy rigs/elad rigs/flexradio rigs/icom rigs/icmarine rigs/jrc rigs/kachina rigs/kenwood rigs/kit rigs/lowe rigs/pcr rigs/prm80 rigs/racal rigs/rft rigs/rs rigs/skanti rigs/tapr rigs/tentec rigs/tuner rigs/uniden rigs/winradio rigs/wj rigs/yaesu rigs/gomspace rigs/mds rigs/anytone rigs/motorola"
ROT_BACKEND_LIST="rotators/amsat rotators/apex rotators/ars rotators/celestron rotators/cnctrk rotators/grbltrk rotators/easycomm rotators/ether6 rotators/flir rotators/fodtrack rotators/gs232a rotators/heathkit rotators/m2 rotators/meade rotators/rotorez rotators/sartek rotators/saebrtrack rotators/spid rotators/ts7400 rotators/prosistel rotators/ioptron rotators/satel rotators/radant"
# Amplifiers are all in the amplifiers directory
AMP_BACKEND_LIST="amplifiers/elecraft amplifiers/gemini amplifiers/expert"
@@ -932,6 +932,7 @@ rigs/yaesu/Makefile
rigs/gomspace/Makefile
rigs/mds/Makefile
rigs/anytone/Makefile
+rigs/motorola/Makefile
tests/Makefile
scripts/Makefile
android/Makefile
diff --git a/include/hamlib/riglist.h b/include/hamlib/riglist.h
index 4f09e4991..4059f9e14 100644
--- a/include/hamlib/riglist.h
+++ b/include/hamlib/riglist.h
@@ -672,6 +672,13 @@
#define RIG_BACKEND_ANYTONE "AnyTone"
#define RIG_MODEL_ATD578UVIII RIG_MAKE_MODEL(RIG_ANYTONE, 1)
+/*
+ * Motorola rigs
+ */
+#define RIG_MOTOROLA 38
+#define RIG_BACKEND_MOTOROLA "Motorola"
+#define RIG_MODEL_MICOM2 RIG_MAKE_MODEL(RIG_MOTOROLA, 1)
+
//! @endcond
diff --git a/src/register.c b/src/register.c
index a47adf10d..157e99911 100644
--- a/src/register.c
+++ b/src/register.c
@@ -90,6 +90,7 @@ DEFINE_INITRIG_BACKEND(codan);
DEFINE_INITRIG_BACKEND(gomspace);
DEFINE_INITRIG_BACKEND(mds);
DEFINE_INITRIG_BACKEND(anytone);
+DEFINE_INITRIG_BACKEND(motorola);
//! @endcond
#ifdef HAVE_WINRADIO
@@ -150,6 +151,7 @@ static struct
{ RIG_GOMSPACE, RIG_BACKEND_GOMSPACE, RIG_FUNCNAM(gomspace) },
{ RIG_MDS, RIG_BACKEND_MDS, RIG_FUNCNAMA(mds) },
{ RIG_ANYTONE, RIG_BACKEND_ANYTONE, RIG_FUNCNAMA(anytone) },
+ { RIG_MOTOROLA, RIG_BACKEND_MOTOROLA, RIG_FUNCNAMA(motorola) },
{ 0, NULL }, /* end */
};
commit 93bd44c3d56ac7d406ef0d90dc47ace1d813fec9
Author: Mike Black W9MDB <mdb...@ya...>
Date: Tue Apr 23 11:19:24 2024 -0500
Update simts890.c
diff --git a/simulators/simts890.c b/simulators/simts890.c
index cd9f53643..22c44c891 100644
--- a/simulators/simts890.c
+++ b/simulators/simts890.c
@@ -28,7 +28,7 @@ int vfo, vfo_tx, ptt, ptt_data, ptt_mic, ptt_tune;
int operatingband;
int split;
int modeMain = 2;
-int modeSub = 2;
+int modeSub = 1;
int keyspd = 20;
int sl=3, sh=3;
int nr=0;
@@ -163,7 +163,7 @@ int main(int argc, char *argv[])
if (getmyline(fd, buf) > 0)
{
- // printf("Cmd:\"%s\"\n", buf);
+// printf("Cmd:\"%s\"\n", buf);
}
@@ -200,7 +200,7 @@ int main(int argc, char *argv[])
}
else if (strcmp(buf, "NB1;") == 0)
{
- hl_usleep(mysleep * 100);
+ hl_usleep(mysleep * 20);
sprintf(buf,"NB1%d;", nb1);
write(fd, buf, strlen(buf));
}
@@ -211,7 +211,7 @@ int main(int argc, char *argv[])
}
else if (strcmp(buf, "NB2;") == 0)
{
- hl_usleep(mysleep * 100);
+ hl_usleep(mysleep * 20);
sprintf(buf,"NB2%d;", nb2);
write(fd, buf, strlen(buf));
}
@@ -351,6 +351,7 @@ int main(int argc, char *argv[])
SNPRINTF(buf, sizeof(buf), SFformat, tmpvfo,
tmpvfo == 0 ? freqa : freqb,
tmpvfo == 0 ? modeA : modeB);
+ printf("SF buf=%s\n", buf);
write(fd, buf, strlen(buf));
}
else if (strncmp(buf, "SF", 2) == 0)
@@ -455,6 +456,7 @@ int main(int argc, char *argv[])
}
else if (strncmp(buf, "CB;", 3) == 0)
{
+ printf("No CB command!\n");
sprintf(buf, "CB%d;", operatingband);
write(fd, buf, strlen(buf));
}
@@ -503,23 +505,27 @@ int main(int argc, char *argv[])
sprintf(buf, "RM2%04d;", 10);
write(fd, buf, strlen(buf));
}
- else if (strcmp(buf, "SL;") == 0)
+ else if (strcmp(buf, "SL0;") == 0)
{
sprintf(buf,"SL0%02d;", sl);
+ printf("R: %s\n", buf);
write(fd, buf, strlen(buf));
}
- else if (strcmp(buf, "SH;") == 0)
+ else if (strcmp(buf, "SH0;") == 0)
{
- sprintf(buf,"SH0%02d;", sh);
+ sprintf(buf,"SH0%03d;", sh);
+ printf("R: %s\n", buf);
write(fd, buf, strlen(buf));
}
- else if (strncmp(buf, "SL", 2) == 0)
+ else if (strncmp(buf, "SL0", 3) == 0)
{
- sscanf(&buf[3],"%d", &sl);
+ printf("Cmd: %s\n", buf);
+ sscanf(buf,"SL0%3d", &sl);
}
- else if (strncmp(buf, "SH", 2) == 0)
+ else if (strncmp(buf, "SH0", 3) == 0)
{
- sscanf(&buf[3],"%d", &sh);
+ printf("Cmd: %s\n", buf);
+ sscanf("SH0%3d","%d", &sh);
}
else if (strcmp(buf, "NR;") == 0)
{
commit b182ca2d51740d5dcaa126b52d4f208003b9cc86
Author: Mike Black W9MDB <mdb...@ya...>
Date: Mon Apr 22 22:47:18 2024 -0500
Fix kachina set_ptt
diff --git a/rigs/kachina/kachina.c b/rigs/kachina/kachina.c
index ed4fa979a..71cb8655f 100644
--- a/rigs/kachina/kachina.c
+++ b/rigs/kachina/kachina.c
@@ -176,7 +176,7 @@ int kachina_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt)
{
char c = ptt == 0 ? 0x00 : 0x01;
- int retval = kachina_trans_n(rig, 'X', &c , 1);
+ int retval = kachina_trans_n(rig, 'x', &c , 1);
return retval;
}
commit 6a98b0b9cb8128c09ecf4cf7374bbefd09170aaf
Author: Mike Black W9MDB <mdb...@ya...>
Date: Mon Apr 22 17:48:59 2024 -0500
Rest of commit -- if setting FM width to other than 7000/10000/15000 cache will show requested width until next poll
https://github.com/Hamlib/Hamlib/issues/1533
diff --git a/rigs/icom/frame.c b/rigs/icom/frame.c
index 5a4d58f60..d939de897 100644
--- a/rigs/icom/frame.c
+++ b/rigs/icom/frame.c
@@ -765,6 +765,17 @@ void icom2rig_mode(RIG *rig, unsigned char md, int pd, rmode_t *mode,
pbwidth_t *width)
{
rig_debug(RIG_DEBUG_TRACE, "%s: mode=0x%02x, pd=%d\n", __func__, md, pd);
+
+ // Some rigs return fixed with for FM mode
+ if ((RIG_IS_IC7300 || RIG_IS_IC9700) && (md == S_FM || md == S_WFM))
+ {
+ *mode = RIG_MODE_FM;
+ if (*width == 1) *width = 15000;
+ else if (*width == 2) *width = 10000;
+ else *width = 7000;
+ return;
+ }
+
*width = RIG_PASSBAND_NORMAL;
switch (md)
diff --git a/rigs/icom/ic7300.c b/rigs/icom/ic7300.c
index 1ea70cae8..1c0ac833a 100644
--- a/rigs/icom/ic7300.c
+++ b/rigs/icom/ic7300.c
@@ -37,21 +37,21 @@
static int ic7300_set_parm(RIG *rig, setting_t parm, value_t val);
static int ic7300_get_parm(RIG *rig, setting_t parm, value_t *val);
int ic7300_set_clock(RIG *rig, int year, int month, int day, int hour,
- int min, int sec, double msec, int utc_offset);
+ int min, int sec, double msec, int utc_offset);
int ic7300_get_clock(RIG *rig, int *year, int *month, int *day,
- int *hour,
- int *min, int *sec, double *msec, int *utc_offset);
+ int *hour,
+ int *min, int *sec, double *msec, int *utc_offset);
int ic9700_set_clock(RIG *rig, int year, int month, int day, int hour,
- int min, int sec, double msec, int utc_offset);
+ int min, int sec, double msec, int utc_offset);
int ic9700_get_clock(RIG *rig, int *year, int *month, int *day,
- int *hour,
- int *min, int *sec, double *msec, int *utc_offset);
+ int *hour,
+ int *min, int *sec, double *msec, int *utc_offset);
int ic9700_set_vfo(RIG *rig, vfo_t vfo);
#define IC7300_ALL_RX_MODES (RIG_MODE_FM|RIG_MODE_PKTFM|RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_PKTLSB|RIG_MODE_PKTUSB|RIG_MODE_PKTFM|RIG_MODE_PKTAM)
-#define IC7300_1HZ_TS_MODES (RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_PKTLSB|RIG_MODE_PKTUSB|RIG_MODE_PKTFM|RIG_MODE_PKTAM)
+#define IC7300_1HZ_TS_MODES (RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_PKTLSB|RIG_MODE_PKTUSB|RIG_MODE_PKTAM)
#define IC7300_NOT_TS_MODES (IC7300_ALL_RX_MODES &~IC7300_1HZ_TS_MODES)
#define IC7300_OTHER_TX_MODES (RIG_MODE_FM|RIG_MODE_PKTFM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR)
commit c70502ea34fd319f41d6f4d9c4ee22e30b3db846
Author: Mike Black W9MDB <mdb...@ya...>
Date: Mon Apr 22 17:32:48 2024 -0500
Fix IC7300/9700 FM filter set -- now honors FM widths of 7000,10000, and 15000
diff --git a/rigs/icom/icom.c b/rigs/icom/icom.c
index 7746f971d..17d774329 100644
--- a/rigs/icom/icom.c
+++ b/rigs/icom/icom.c
@@ -2048,7 +2048,7 @@ pbwidth_t icom_get_dsp_flt(RIG *rig, rmode_t mode)
RETURNFUNC2(RIG_OK);
}
-int icom_set_dsp_flt(RIG *rig, rmode_t mode, pbwidth_t width)
+int icom_set_dsp_flt(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
{
int retval, rfstatus;
unsigned char ackbuf[MAXFRAMELEN];
@@ -2113,13 +2113,6 @@ int icom_set_dsp_flt(RIG *rig, rmode_t mode, pbwidth_t width)
flt_idx =
width <= 500 ? ((width + 49) / 50) - 1 : ((width + 99) / 100) + 4;
}
- else if (mode & (RIG_MODE_FM | RIG_MODE_PKTFM))
- {
- if (width <= 7000) width = 7000;
- else if (width <= 10000) width = 10000;
- else width=15000;
- RETURNFUNC(RIG_OK);
- }
else
{
rig_debug(RIG_DEBUG_VERBOSE, "%s: unknown mode=%s\n", __func__,
@@ -2249,7 +2242,7 @@ static int icom_set_mode_without_data(RIG *rig, vfo_t vfo, rmode_t mode,
RETURNFUNC2(retval);
}
- icom_set_dsp_flt(rig, mode, width);
+ icom_set_dsp_flt(rig, vfo, mode, width);
RETURNFUNC2(RIG_OK);
}
@@ -2316,6 +2309,12 @@ static int icom_set_mode_x26(RIG *rig, vfo_t vfo, rmode_t mode,
// Skip filter selection, because at least IC-7300 has a bug defaulting to filter 2 when changing mode
// Tested on IC-7300 and IC-9700
buf[2] = priv->filter;
+ if (mode == RIG_MODE_FM || mode == RIG_MODE_WFM)
+ {
+ // we use the passed in filter for FM mode widths
+ buf[2] = filter;
+ }
+
//rig_debug(RIG_DEBUG_TRACE, "%s: mode=%ld, filters usbd=%d, usb=%d, cw=%d\n",
// __func__, mode, priv->filter_usbd, priv->filter_usb, priv->filter_cw);
@@ -2474,7 +2473,7 @@ int icom_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
retval = RIG_OK;
}
- if (retval == RIG_OK && mode != current_mode)
+ if (retval == RIG_OK && (mode != current_mode || width != RIG_PASSBAND_NOCHANGE))
{
unsigned char datamode[2];
unsigned char mode_icom; // Not used, we only need the width
@@ -2509,6 +2508,14 @@ int icom_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
if (datamode[0] == 0) { datamode[1] = 0; } // the only good combo possible according to manual
+ // we need to let FM mode widths through here with datamode[1] set to FM width
+ if((RIG_IS_IC7300 || RIG_IS_IC9700) && (mode == RIG_MODE_FM || mode == RIG_MODE_WFM))
+ {
+ if (width <= 7000) datamode[1] = 3;
+ else if (width <= 10000) datamode[1] = 2;
+ else datamode[1] = 1;
+ }
+
rig_debug(RIG_DEBUG_TRACE, "%s(%d) mode_icom=%d, datamode=%d, filter=%d\n",
__func__, __LINE__, mode_icom, datamode[0], datamode[1]);
@@ -2554,7 +2561,7 @@ int icom_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
if (((width != RIG_PASSBAND_NOCHANGE) && (width != current_width))
|| (priv->filter_usbd > 0 || priv->filter_usb > 0 || priv->filter_cw > 0 || priv->filter_fm > 0))
{
- icom_set_dsp_flt(rig, mode, width);
+ icom_set_dsp_flt(rig, vfo, mode, width);
}
else
{
@@ -2606,7 +2613,7 @@ static int icom_get_mode_without_data(RIG *rig, vfo_t vfo, rmode_t *mode,
// mode_len=5, modebuf=26 01 01 01 01
// last 3 bytes are mode, datamode, filter (1-3)
priv_data->datamode = modebuf[3];
- priv_data->filter = modebuf[4];
+ *width = priv_data->filter = modebuf[4];
modebuf[1] = modebuf[2]; // copy mode to 2-byte format
modebuf[2] = modebuf[4]; // copy filter to 2-byte format
mode_len = 2;
@@ -2660,9 +2667,15 @@ static int icom_get_mode_without_data(RIG *rig, vfo_t vfo, rmode_t *mode,
}
else
{
+ // we use width to pass in FM width for some rigs to i2r_mode
icom2rig_mode(rig, modebuf[1],
mode_len == 2 ? modebuf[2] : -1, mode, width);
}
+ if ((RIG_IS_IC7300 || RIG_IS_IC9700) && (*mode == RIG_MODE_FM || *mode == RIG_MODE_PKTFM))
+ {
+ // we already have width from icom2rig_mode
+ RETURNFUNC2(RIG_OK);
+ }
// The following rigs do not support querying filter width
if ((RIG_IS_IC910) ||
@@ -2690,7 +2703,8 @@ static int icom_get_mode_without_data(RIG *rig, vfo_t vfo, rmode_t *mode,
if (vfo == rig->state.current_vfo)
{
- filter_width = icom_get_dsp_flt(rig, *mode);
+ if (!((RIG_IS_IC7300 || RIG_IS_IC9700) && (*mode == RIG_MODE_FM || *mode == RIG_MODE_PKTFM))) // can't do this in FM mode
+ filter_width = icom_get_dsp_flt(rig, *mode);
}
else
{
@@ -2705,10 +2719,10 @@ static int icom_get_mode_without_data(RIG *rig, vfo_t vfo, rmode_t *mode,
*width = filter_width;
- if (*mode == RIG_MODE_FM)
+ if (*mode == RIG_MODE_FM || *mode == RIG_MODE_PKTFM)
{
*width = 12000; // some default to 12000
- if (RIG_IS_IC7300)
+ if (RIG_IS_IC7300 || RIG_IS_IC9700)
{
if (priv_data->filter == 1) *width = 15000;
else if (priv_data->filter == 2) *width = 10000;
diff --git a/rigs/icom/icom.h b/rigs/icom/icom.h
index 7b26379cc..8d17cfb34 100644
--- a/rigs/icom/icom.h
+++ b/rigs/icom/icom.h
@@ -35,7 +35,7 @@
#include <sys/time.h>
#endif
-#define BACKEND_VER "20240415"
+#define BACKEND_VER "20240422"
#define ICOM_IS_ID31 rig_is_model(rig, RIG_MODEL_ID31)
#define ICOM_IS_ID51 rig_is_model(rig, RIG_MODEL_ID51)
commit f8a67d716e54ed9ea816920f25fefbea3594571f
Author: Mike Black W9MDB <mdb...@ya...>
Date: Mon Apr 22 11:27:29 2024 -0500
Some progress getting SB4100 to work
https://github.com/Hamlib/Hamlib/issues/1541
diff --git a/rigs/barrett/4100.c b/rigs/barrett/4100.c
index 1724ec7ac..8b8d1db04 100644
--- a/rigs/barrett/4100.c
+++ b/rigs/barrett/4100.c
@@ -47,12 +47,12 @@ extern int barret950_get_freq(RIG *rig, vfo_t vfo, freq_t freq);
*/
static const char *barrett4100_get_info(RIG *rig)
{
- char *response = NULL;
+ static char *response;
int retval;
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
- retval = barrett_transaction(rig, "M:MIB GM", 0, &response);
+ retval = barrett_transaction2(rig, "M:MIB GM", 64, &response);
if (retval == RIG_OK)
{
@@ -64,7 +64,7 @@ static const char *barrett4100_get_info(RIG *rig)
rig_debug(RIG_DEBUG_VERBOSE, "MIB GM: %s\n", response);
}
- retval = barrett_transaction(rig, "M:FF GM", 0, &response);
+ retval = barrett_transaction2(rig, "M:FF GM", 0, &response);
if (retval == RIG_OK)
{
@@ -73,10 +73,10 @@ static const char *barrett4100_get_info(RIG *rig)
}
else
{
- rig_debug(RIG_DEBUG_VERBOSE, "FF GM: %s\n", response);
+ rig_debug(RIG_DEBUG_VERBOSE, "M:MIB GM: %s\n", response);
}
- retval = barrett_transaction(rig, "M:FF BWA", 0, &response);
+ retval = barrett_transaction2(rig, "M:FF BWA", 0, &response);
if (retval == RIG_OK)
{
@@ -88,7 +88,7 @@ static const char *barrett4100_get_info(RIG *rig)
rig_debug(RIG_DEBUG_VERBOSE, "FF BWA: %s\n", response);
}
- retval = barrett_transaction(rig, "M:FF GRFA", 0, &response);
+ retval = barrett_transaction2(rig, "M:FF GRFA", 0, &response);
if (retval == RIG_OK)
{
@@ -108,22 +108,24 @@ static int barrett4100_open(RIG *rig)
int retval;
char *response;
ENTERFUNC;
- retval = barrett_transaction2(rig, "M:REMOTE SENTER2,1", 0, &response);
+ retval = barrett_transaction2(rig, "M:REMOTE SENTER2,1", 3, &response);
- if (retval != RIG_OK || response[0] != 's')
+ rig_debug(RIG_DEBUG_ERR, "%s: back from REMOTE SENTER2: got %d\n", __func__, retval);
+ if (response[0] != 's')
{
rig_debug(RIG_DEBUG_ERR, "%s: REMOTE SENTER2 error: got %s\n", __func__,
response);
}
- barrett4100_get_info(rig);
+ //barrett4100_get_info(rig);
+ rig_debug(RIG_DEBUG_VERBOSE, "%s: success, ret=%d\n", __func__, retval);
RETURNFUNC(RIG_OK);
}
static int barrett4100_close(RIG *rig)
{
char *response;
- int retval = barrett_transaction2(rig, "M:REMOTE SENTER0", 0, &response);
+ int retval = barrett_transaction2(rig, "M:REMOTE SENTER0", 18, &response);
if (retval != RIG_OK)
{
@@ -231,6 +233,7 @@ int barrett4100_get_ptt(RIG *rig, vfo_t vfo, ptt_t *ptt)
rig_debug(RIG_DEBUG_VERBOSE, "%s(%d); response=%s\n", __func__, __LINE__,
response);
+
return retval;
}
@@ -238,7 +241,7 @@ struct rig_caps barrett4100_caps =
{
RIG_MODEL(RIG_MODEL_BARRETT_4100),
.model_name = "4100",
- .mfg_name = "Barrett",
+ .mfg_name = "Rhode&Schwarz",
.version = BACKEND_VER ".1",
.copyright = "LGPL",
.status = RIG_STATUS_BETA,
diff --git a/rigs/barrett/barrett.c b/rigs/barrett/barrett.c
index 0dad6cd72..da5cd9074 100644
--- a/rigs/barrett/barrett.c
+++ b/rigs/barrett/barrett.c
@@ -53,6 +53,15 @@ DECLARE_INITRIG_BACKEND(barrett)
return RIG_OK;
}
+void barrett_flush(RIG *rig)
+{
+ hamlib_port_t *rp = RIGPORT(rig);
+ int timesave = rig->state.timeout;
+ rig->state.timeout = 0;
+ rig_flush(rp);
+ rig->state.timeout = timesave;
+}
+
// this version is for 4100
int barrett_transaction2(RIG *rig, char *cmd, int expected, char **result)
@@ -60,8 +69,16 @@ int barrett_transaction2(RIG *rig, char *cmd, int expected, char **result)
char cmd_buf[MAXCMDLEN];
struct barrett_priv_data *priv = STATE(rig)->priv;
int retval;
+ hamlib_port_t *rp = RIGPORT(rig);
SNPRINTF(cmd_buf, sizeof(cmd_buf), "%c%s%s", 0x0a, cmd, EOM);
+ barrett_flush(rig);
+ retval = write_block(rp, (unsigned char *) cmd_buf, strlen(cmd_buf));
+ if (retval < 0)
+ {
+ rig_debug(RIG_DEBUG_ERR, "%s(%d): error in write_block\n", __func__, __LINE__);
+ return retval;
+ }
retval = read_block(RIGPORT(rig), (unsigned char *) priv->ret_data, expected);
if (retval < 0)
@@ -69,6 +86,15 @@ int barrett_transaction2(RIG *rig, char *cmd, int expected, char **result)
rig_debug(RIG_DEBUG_ERR, "%s(%d): error in read_block\n", __func__, __LINE__);
return retval;
}
+ rig_debug(RIG_DEBUG_VERBOSE, "%s(%d): %d bytes read\n", __func__, __LINE__, retval);
+ if (priv->ret_data[0] == 0x13) // we'll return from the 1st good char
+ {
+ *result = &(priv->ret_data[1]);
+ }
+ else // some commands like IAL don't give XOFF but XON is there -- is this a bug?
+ {
+ *result = &(priv->ret_data[0]);
+ }
return retval;
}
@@ -92,7 +118,7 @@ int barrett_transaction(RIG *rig, char *cmd, int expected, char **result)
SNPRINTF(cmd_buf, sizeof(cmd_buf), "%s%s", cmd, EOM);
}
- rig_flush(rp);
+ barrett_flush(rig);
retval = write_block(rp, (unsigned char *) cmd_buf, strlen(cmd_buf));
if (retval < 0)
@@ -715,7 +741,7 @@ int barrett_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
default: return -RIG_ENIMPL;
}
- rig_flush(rp);
+ barrett_flush(rig);
retval = write_block(rp, (unsigned char *) cmd_buf, strlen(cmd_buf));
if (retval < 0)
diff --git a/rigs/barrett/barrett.h b/rigs/barrett/barrett.h
index f778acc5a..0a82bbd3d 100644
--- a/rigs/barrett/barrett.h
+++ b/rigs/barrett/barrett.h
@@ -24,7 +24,7 @@
#include "hamlib/rig.h"
-#define BACKEND_VER "20220113"
+#define BACKEND_VER "20240422"
#define EOM "\x0d"
#define TRUE 1
commit 2b275531559f2158a2aaf5e7534b352dac708ec8
Author: Mike Black W9MDB <mdb...@ya...>
Date: Mon Apr 22 11:26:57 2024 -0500
Make rig_flush_force in rig.c timeout immediately
https://github.com/Hamlib/Hamlib/issues/1541
diff --git a/src/rig.c b/src/rig.c
index e19f0cfee..cdb3d8e88 100644
--- a/src/rig.c
+++ b/src/rig.c
@@ -1569,7 +1569,10 @@ int HAMLIB_API rig_open(RIG *rig)
memcpy(&rs->rigport_deprecated, rp, sizeof(hamlib_port_t_deprecated));
memcpy(&rs->pttport_deprecated, pttp, sizeof(hamlib_port_t_deprecated));
memcpy(&rs->dcdport_deprecated, dcdp, sizeof(hamlib_port_t_deprecated));
+ int timesave = rig->state.timeout;
+ rig->state.timeout = 0;
rig_flush_force(rp, 1);
+ rig->state.timeout = timesave;
#if defined(HAVE_PTHREAD)
enum multicast_item_e items = RIG_MULTICAST_POLL | RIG_MULTICAST_TRANSCEIVE
commit 08aac883775c8cd89d682682f2e3b49d796e2a35
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sat Apr 20 15:09:09 2024 -0500
Add set_ptt for kachina 505dsp
diff --git a/rigs/kachina/505dsp.c b/rigs/kachina/505dsp.c
index 0640f5e7a..73a209189 100644
--- a/rigs/kachina/505dsp.c
+++ b/rigs/kachina/505dsp.c
@@ -62,7 +62,7 @@ struct rig_caps k505dsp_caps =
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_COMPUTER,
- .ptt_type = RIG_PTT_NONE,
+ .ptt_type = RIG_PTT_RIG,
.dcd_type = RIG_DCD_RIG,
.port_type = RIG_PORT_SERIAL,
.serial_rate_min = 9600,
@@ -151,6 +151,7 @@ struct rig_caps k505dsp_caps =
.set_freq = kachina_set_freq,
.set_mode = kachina_set_mode,
+ .set_ptt = kachina_set_ptt,
.get_level = kachina_get_level,
.hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS
diff --git a/rigs/kachina/kachina.c b/rigs/kachina/kachina.c
index 4ce343918..ed4fa979a 100644
--- a/rigs/kachina/kachina.c
+++ b/rigs/kachina/kachina.c
@@ -169,12 +169,16 @@ int kachina_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
/* transmit frequency */
retval = kachina_trans_n(rig, 'T', (char *) freqbuf, 4);
- if (retval != RIG_OK)
- {
- return retval;
- }
+ return retval;
+}
- return RIG_OK;
+int kachina_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt)
+{
+ char c = ptt == 0 ? 0x00 : 0x01;
+
+ int retval = kachina_trans_n(rig, 'X', &c , 1);
+
+ return retval;
}
/*
diff --git a/rigs/kachina/kachina.h b/rigs/kachina/kachina.h
index 4fafe56a1..cce933baf 100644
--- a/rigs/kachina/kachina.h
+++ b/rigs/kachina/kachina.h
@@ -24,10 +24,11 @@
#include <hamlib/rig.h>
-#define BACKEND_VER "20061007"
+#define BACKEND_VER "20240420"
int kachina_set_freq(RIG *rig, vfo_t vfo, freq_t freq);
int kachina_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width);
+int kachina_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt);
int kachina_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val);
extern struct rig_caps k505dsp_caps;
commit c31497918f8511ad01e1dd749e7df94a00332db2
Author: Mike Black W9MDB <mdb...@ya...>
Date: Fri Apr 19 16:42:10 2024 -0500
Add VFO Ops to rigmatrix.c and colorize things a bit
diff --git a/tests/rigmatrix.c b/tests/rigmatrix.c
index fab0dc011..72e8e182f 100644
--- a/tests/rigmatrix.c
+++ b/tests/rigmatrix.c
@@ -32,7 +32,7 @@
#include <hamlib/rig.h>
#include "misc.h"
-static setting_t bitmap_func, bitmap_level, bitmap_parm;
+static setting_t bitmap_func, bitmap_level, bitmap_parm, bitmap_vfo_ops;
int create_png_range(const freq_range_t rx_range_list[],
const freq_range_t tx_range_list[], int num);
@@ -99,10 +99,11 @@ int print_caps_sum(struct rig_caps *caps, void *data)
"<TD><A HREF=\"#setlevel%u\">levels</A></TD>"
"<TD><A HREF=\"#getparm%u\">parms</A></TD>"
"<TD><A HREF=\"#setparm%u\">parms</A></TD>"
+ "<TD><A HREF=\"#op%u\">ops</A></TD>"
"</TR>\n",
caps->rig_model, caps->rig_model, caps->rig_model,
caps->rig_model, caps->rig_model, caps->rig_model,
- caps->rig_model, caps->rig_model, caps->rig_model);
+ caps->rig_model, caps->rig_model, caps->rig_model, caps->rig_model);
return 1; /* !=0, we want them all ! */
}
@@ -215,7 +216,7 @@ int print_caps_parameters(struct rig_caps *caps, void *data)
}
/* used by print_caps_caps and print_caps_level */
-#define print_yn(fn) printf("<TD>%c</TD>", (fn) ? 'Y':'N')
+#define print_yn(fn) printf("<TD>%s</TD>", (fn) ? "<font color=\"00AA00\"><strong>Y</strong><font>":"<font color=\"#CCCCCC\">N<font>")
/*
* backend functions defined
@@ -303,6 +304,43 @@ int print_caps_parm(struct rig_caps *caps, void *data)
return 1;
}
+/*
+ * VFO Ops capabilities
+ */
+int print_caps_vfo_ops(struct rig_caps *caps, void *data)
+{
+ setting_t vfo_ops;
+ int i;
+
+ if (!data)
+ {
+ return 0;
+ }
+
+ // Only set for these
+ vfo_ops = (*(int *)data) ? caps->vfo_ops : caps->vfo_ops;
+
+ printf("<A NAME=\"%s%u\"><TR><TD>%s</TD>",
+ (*(int *)data) ? "op" : "op",
+ caps->rig_model,
+ caps->model_name);
+
+ /*
+ * bitmap_vfo_ops: only those who have a label
+ */
+ for (i = 0; i < RIG_SETTING_MAX; i++)
+ {
+ if (rig_idx2setting(i) & bitmap_vfo_ops)
+ {
+ print_yn(vfo_ops & rig_idx2setting(i));
+ }
+ }
+
+ printf("</TR></A>\n");
+
+ return 1;
+}
+
/*
* Get/Set level abilities
@@ -647,6 +685,7 @@ int main(int argc, char *argv[])
"<TD>Set level</TD>"
"<TD>Get parm</TD>"
"<TD>Set parm</TD>"
+ "<TD>VFO Ops</TD>"
"</TR>\n");
rig_list_foreach(print_caps_sum, NULL);
printf("</TABLE>\n");
@@ -821,6 +860,40 @@ int main(int argc, char *argv[])
printf("<P>");
+ bitmap_vfo_ops = 0;
+ prntbuf[0] = '\0';
+ pbuf = prntbuf;
+
+ for (i = 0; i < RIG_SETTING_MAX; i++)
+ {
+ setting_t op = rig_idx2setting(i);
+ const char *s = rig_strvfop(op);
+
+ if (!s)
+ {
+ continue;
+ }
+
+ bitmap_vfo_ops |= op;
+ nbytes = strlen("<TD></TD>") + strlen(s) + 1;
+ nbytes_total += nbytes;
+ pbuf += snprintf(pbuf, sizeof(pbuf) - nbytes_total, "<TD>%s</TD>", s);
+
+ if (strlen(pbuf) > sizeof(pbuf) + nbytes)
+ {
+ printf("Buffer overflow in %s\n", __func__);
+ }
+ }
+
+ printf("VFO Ops");
+ printf("<TABLE BORDER=1>\n");
+ printf("<TR><TD>Model</TD>%s</TR>\n", prntbuf);
+ set_or_get = 0;
+ rig_list_foreach(print_caps_vfo_ops, &set_or_get);
+ printf("</TABLE>\n");
+
+ printf("<P>");
+
time(&gentime);
printf("Rigmatrix generated %s\n", ctime(&gentime));
commit d9b57bc7a8a5cf0f93c6792a58f7db1273992199
Author: Mike Black W9MDB <mdb...@ya...>
Date: Fri Apr 19 16:41:37 2024 -0500
Align dummy rigs
diff --git a/rigs/dummy/dummy.c b/rigs/dummy/dummy.c
index 239a8a3d6..9f8da3406 100644
--- a/rigs/dummy/dummy.c
+++ b/rigs/dummy/dummy.c
@@ -2564,7 +2564,6 @@ struct rig_caps dummy_caps =
.get_info = dummy_get_info,
-
.set_ptt = dummy_set_ptt,
.get_ptt = dummy_get_ptt,
.get_dcd = dummy_get_dcd,
@@ -2620,12 +2619,12 @@ struct rig_caps dummy_no_vfo_caps =
RIG_MODEL(RIG_MODEL_DUMMY_NOVFO),
.model_name = "Dummy No VFO",
.mfg_name = "Hamlib",
- .version = "20220510.0",
+ .version = "20240409.0",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_OTHER,
- .targetable_vfo = RIG_TARGETABLE_PTT | RIG_TARGETABLE_RITXIT | RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE,
- .ptt_type = RIG_PTT_RIG,
+ .targetable_vfo = RIG_TARGETABLE_PTT | RIG_TARGETABLE_RITXIT | RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE | RIG_TARGETABLE_SPECTRUM,
+ .ptt_type = RIG_PTT_NONE,
.dcd_type = RIG_DCD_RIG,
.port_type = RIG_PORT_NONE,
.has_get_func = DUMMY_FUNC,
@@ -2734,7 +2733,6 @@ struct rig_caps dummy_no_vfo_caps =
.get_info = dummy_get_info,
-
.set_ptt = dummy_set_ptt,
.get_ptt = dummy_get_ptt,
.get_dcd = dummy_get_dcd,
commit 90545a192e94ebb01021c05273f5c3d8e196c2be
Author: Mike Black W9MDB <mdb...@ya...>
Date: Fri Apr 19 10:34:20 2024 -0500
Hopefully fix Barrett 4100 protocol
diff --git a/rigs/barrett/4100.c b/rigs/barrett/4100.c
index e1a2bc77e..1724ec7ac 100644
--- a/rigs/barrett/4100.c
+++ b/rigs/barrett/4100.c
@@ -108,7 +108,7 @@ static int barrett4100_open(RIG *rig)
int retval;
char *response;
ENTERFUNC;
- retval = barrett_transaction2(rig, "M:REMOTE SENTER2", 0, &response);
+ retval = barrett_transaction2(rig, "M:REMOTE SENTER2,1", 0, &response);
if (retval != RIG_OK || response[0] != 's')
{
@@ -193,7 +193,13 @@ int barrett4100_get_freq(RIG *rig, vfo_t vfo, freq_t *freq)
}
else
{
- sscanf(response, "gRFA1,%*d,%lf,%*d", freq);
+ int n = sscanf(response, "gRF%lf", freq);
+ //int n = sscanf(response, "gRFA1,%*d,%lf,%*d", freq);
+ if (n != 1)
+ {
+ rig_debug(RIG_DEBUG_ERR, "%s(%d): unable to parse freq from '%s'\n", __func__, __LINE__, response);
+ return -RIG_EPROTO;
+ }
}
return retval;
@@ -233,7 +239,7 @@ struct rig_caps barrett4100_caps =
RIG_MODEL(RIG_MODEL_BARRETT_4100),
.model_name = "4100",
.mfg_name = "Barrett",
- .version = BACKEND_VER ".0",
+ .version = BACKEND_VER ".1",
.copyright = "LGPL",
.status = RIG_STATUS_BETA,
.rig_type = RIG_TYPE_TRANSCEIVER,
commit dce80d264a5cd093707c0e6720e18dff77f68665
Author: Mike Black W9MDB <mdb...@ya...>
Date: Thu Apr 18 11:28:38 2024 -0500
Update FLRig version
diff --git a/rigs/dummy/flrig.c b/rigs/dummy/flrig.c
index 5fd955baf..f18101ca7 100644
--- a/rigs/dummy/flrig.c
+++ b/rigs/dummy/flrig.c
@@ -143,7 +143,7 @@ struct rig_caps flrig_caps =
RIG_MODEL(RIG_MODEL_FLRIG),
.model_name = "",
.mfg_name = "FLRig",
- .version = "20240325.0",
+ .version = "20240418.0",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
commit 4c111da0d1b7206050ca719a9ff3c97e84aaa260
Author: Mike Black W9MDB <mdb...@ya...>
Date: Thu Apr 18 11:22:41 2024 -0500
Add small delay when setting VFO in FLRig to allow GUI to catch up
diff --git a/rigs/dummy/flrig.c b/rigs/dummy/flrig.c
index bd247191e..5fd955baf 100644
--- a/rigs/dummy/flrig.c
+++ b/rigs/dummy/flrig.c
@@ -1305,6 +1305,8 @@ static int flrig_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
retval = flrig_transaction(rig, cmd, cmd_arg, NULL, 0);
+ hl_usleep(100*1000); // FLRig needs a moment to update the active VFO
+
if (retval != RIG_OK)
{
RETURNFUNC2(retval);
commit d9b589d25499ca823777130a854768b4533cc0a6
Author: Mike Black W9MDB <mdb...@ya...>
Date: Thu Apr 18 11:22:25 2024 -0500
Fix unflushed data in get_lock
diff --git a/rigs/dummy/netrigctl.c b/rigs/dummy/netrigctl.c
index 1a682a66d..86544598b 100644
--- a/rigs/dummy/netrigctl.c
+++ b/rigs/dummy/netrigctl.c
@@ -2790,6 +2790,8 @@ int netrigctl_get_lock_mode(RIG *rig, int *lock)
char cmdbuf[256];
char buf[BUF_MAX];
int ret;
+ hamlib_port_t *rp = RIGPORT(rig);
+
SNPRINTF(cmdbuf, sizeof(cmdbuf), "\\get_lock_mode\n");
ret = netrigctl_transaction(rig, cmdbuf, strlen(cmdbuf), buf);
@@ -2799,6 +2801,7 @@ int netrigctl_get_lock_mode(RIG *rig, int *lock)
}
sscanf(buf, "%d", lock);
+ ret = read_string(rp, (unsigned char *) buf, BUF_MAX, "\n", 1, 0, 1);
return (RIG_OK);
}
@@ -2819,7 +2822,7 @@ struct rig_caps netrigctl_caps =
RIG_MODEL(RIG_MODEL_NETRIGCTL),
.model_name = "NET rigctl",
.mfg_name = "Hamlib",
- .version = "20240304.0",
+ .version = "20240418.0",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_OTHER,
commit 95b0af114f10defbcfbb4f1b1d9b97c7f99ee5b8
Author: Mike Black W9MDB <mdb...@ya...>
Date: Mon Apr 15 14:49:49 2024 -0500
Fix rigmatrix.c with new non-const rig_caps
diff --git a/tests/rigmatrix.c b/tests/rigmatrix.c
index d1dbdab83..fab0dc011 100644
--- a/tests/rigmatrix.c
+++ b/tests/rigmatrix.c
@@ -37,7 +37,7 @@ static setting_t bitmap_func, bitmap_level, bitmap_parm;
int create_png_range(const freq_range_t rx_range_list[],
const freq_range_t tx_range_list[], int num);
-int print_caps_sum(const struct rig_caps *caps, void *data)
+int print_caps_sum(struct rig_caps *caps, void *data)
{
printf("<TR><TD><A HREF=\"support/model%u.txt\">%s</A></TD><TD>%s</TD>"
@@ -111,7 +111,7 @@ int print_caps_sum(const struct rig_caps *caps, void *data)
/*
* IO params et al.
*/
-int print_caps_parameters(const struct rig_caps *caps, void *data)
+int print_caps_parameters(struct rig_caps *caps, void *data)
{
printf("<A NAME=\"parms%u\"><TR><TD>%s</TD><TD>",
caps->rig_model,
@@ -222,7 +222,7 @@ int print_caps_parameters(const struct rig_caps *caps, void *data)
*
* TODO: add new API calls!
*/
-int print_caps_caps(const struct rig_caps *caps, void *data)
+int print_caps_caps(struct rig_caps *caps, void *data)
{
printf("<A NAME=\"caps%u\"><TR><TD>%s</TD>",
caps->rig_model,
@@ -270,7 +270,7 @@ int print_caps_caps(const struct rig_caps *caps, void *data)
/*
* Get/Set parm abilities
*/
-int print_caps_parm(const struct rig_caps *caps, void *data)
+int print_caps_parm(struct rig_caps *caps, void *data)
{
setting_t parm;
int i;
@@ -307,7 +307,7 @@ int print_caps_parm(const struct rig_caps *caps, void *data)
/*
* Get/Set level abilities
*/
-int print_caps_level(const struct rig_caps *caps, void *data)
+int print_caps_level(struct rig_caps *caps, void *data)
{
setting_t level;
int i;
@@ -344,7 +344,7 @@ int print_caps_level(const struct rig_caps *caps, void *data)
/*
* Get/Set func abilities
*/
-int print_caps_func(const struct rig_caps *caps, void *data)
+int print_caps_func(struct rig_caps *caps, void *data)
{
setting_t func;
int i;
@@ -383,7 +383,7 @@ int print_caps_func(const struct rig_caps *caps, void *data)
*
* FIXME: default output pics is for region2: add region 1 too!
*/
-int print_caps_range(const struct rig_caps *caps, void *data)
+int print_caps_range(struct rig_caps *caps, void *data)
{
create_png_range(caps->rx_range_list2, caps->tx_range_list2,
caps->rig_model);
commit 9e42ca2052d6b3ade2d30400b952ed8c34147aa7
Author: Mike Black W9MDB <mdb...@ya...>
Date: Mon Apr 15 08:13:55 2024 -0500
Add IC756 IC756PROII and IC756PROIII to execeptions on get/set_mode
diff --git a/rigs/icom/icom.c b/rigs/icom/icom.c
index a59d456cd..7746f971d 100644
--- a/rigs/icom/icom.c
+++ b/rigs/icom/icom.c
@@ -2223,6 +2223,9 @@ static int icom_set_mode_without_data(RIG *rig, vfo_t vfo, rmode_t mode,
|| RIG_IS_IC375
|| RIG_IS_IC726
|| RIG_IS_IC475
+ || RIG_IS_IC756
+ || RIG_IS_IC756PROII
+ || RIG_IS_IC756PROIII
|| RIG_IS_IC910
|| RIG_IS_IC7000)
{
@@ -2668,6 +2671,8 @@ static int icom_get_mode_without_data(RIG *rig, vfo_t vfo, rmode_t *mode,
(RIG_IS_IC706MKII) ||
(RIG_IS_IC706MKIIG) ||
(RIG_IS_IC756) ||
+ (RIG_IS_IC756PROII) ||
+ (RIG_IS_IC756PROIII) ||
(RIG_IS_ICR30))
{
RETURNFUNC2(RIG_OK);
diff --git a/rigs/icom/icom.h b/rigs/icom/icom.h
index 3c5d5e81a..7b26379cc 100644
--- a/rigs/icom/icom.h
+++ b/rigs/icom/icom.h
@@ -35,7 +35,7 @@
#include <sys/time.h>
#endif
-#define BACKEND_VER "20240303"
+#define BACKEND_VER "20240415"
#define ICOM_IS_ID31 rig_is_model(rig, RIG_MODEL_ID31)
#define ICOM_IS_ID51 rig_is_model(rig, RIG_MODEL_ID51)
commit 331143fa173eb7bd1bd44aae60544155fcd97a1f
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sat Apr 13 22:50:38 2024 -0500
Change TS890 to use SF command for mode get/set
diff --git a/rigs/kenwood/kenwood.c b/rigs/kenwood/kenwood.c
index b3cff5e6c..64c80e267 100644
--- a/rigs/kenwood/kenwood.c
+++ b/rigs/kenwood/kenwood.c
@@ -2443,7 +2443,47 @@ int kenwood_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
rig_debug(RIG_DEBUG_VERBOSE, "%s: kmode=%d, cmode=%c, datamode=%c\n", __func__,
kmode, c, data_mode);
- if (RIG_IS_TS990S || RIG_IS_TS890S)
+ if (RIG_IS_TS890S)
+ {
+ char sf[20];
+ // TS890 has SF command -- unique so far
+ if (vfo == RIG_VFO_A)
+ {
+ err = kenwood_transaction(rig, "SF0;", sf, sizeof(sf));
+ if (err != RIG_OK)
+ {
+ rig_debug(RIG_DEBUG_ERR, "%s: SF0; failed: %s\n", __func__, rigerror(err));
+ return err;
+ }
+ sf[14] = c;
+ err = kenwood_transaction(rig, sf, NULL, 0);
+ if (err != RIG_OK)
+ {
+ rig_debug(RIG_DEBUG_ERR, "%s: %s failed: %s\n", __func__, sf, rigerror(err));
+ return err;
+ }
+ return RIG_OK;
+ }
+ else
+ {
+ err = kenwood_transaction(rig, "SF1;", sf, sizeof(sf));
+ if (err != RIG_OK)
+ {
+ rig_debug(RIG_DEBUG_ERR, "%s: SF0; failed: %s\n", __func__, rigerror(err));
+ return err;
+ }
+ sf[14] = c;
+ err = kenwood_transaction(rig, sf, NULL, 0);
+ if (err != RIG_OK)
+ {
+ rig_debug(RIG_DEBUG_ERR, "%s: %s failed: %s\n", __func__, sf, rigerror(err));
+ return err;
+ }
+ return RIG_OK;
+ }
+
+ }
+ else if (RIG_IS_TS990S)
{
/* The TS990s has targetable read mode but can only set the mode
of the current VFO :( So we need to toggle the operating VFO
@@ -2711,9 +2751,10 @@ static int kenwood_get_filter_width(RIG *rig, rmode_t mode, pbwidth_t *width)
*/
int kenwood_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
{
- char cmd[4];
- char modebuf[10];
+ char cmd[5];
+ char modebuf[20];
int offs;
+ int len = 6;
int retval;
int kmode;
@@ -2736,8 +2777,22 @@ int kenwood_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
STATE(rig)->current_vfo = RIG_VFO_A;
RETURNFUNC2(RIG_OK);
}
-
- if (RIG_IS_TS990S || RIG_IS_TS890S)
+ if (RIG_IS_TS890S)
+ {
+ len = 16;
+ // TS890 has SF command -- unique so far
+ if (vfo == RIG_VFO_A)
+ {
+ strcpy(cmd,"SF0;");
+ offs = 14;
+ }
+ else
+ {
+ strcpy(cmd,"SF1;");
+ offs = 14;
+ }
+ }
+ else if (RIG_IS_TS990S)
{
char c;
@@ -2780,7 +2835,7 @@ int kenwood_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
}
}
- retval = kenwood_safe_transaction(rig, cmd, modebuf, 6, offs + 1);
+ retval = kenwood_safe_transaction(rig, cmd, modebuf, len, offs + 1);
if (retval != RIG_OK)
{
commit a6ad5f0928b23a0717426e708dd4d1fe3b8a9592
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sat Apr 13 15:23:53 2024 -0500
Fix TS890 set_vfo in set_mode
diff --git a/rigs/kenwood/kenwood.c b/rigs/kenwood/kenwood.c
index 619fa1709..b3cff5e6c 100644
--- a/rigs/kenwood/kenwood.c
+++ b/rigs/kenwood/kenwood.c
@@ -2472,7 +2472,7 @@ int kenwood_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
}
else // RIG_IS_TS890
{
- err = kenwood_set_vfo(rig, curr_vfo);
+ err = kenwood_set_vfo(rig, vfo);
}
if (err != RIG_OK) { RETURNFUNC2(err); }
commit b42aa75dd8251721345e89926e0bd4140fa2accb
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sat Apr 13 07:36:02 2024 -0500
astyle kenwood.c
diff --git a/rigs/kenwood/kenwood.c b/rigs/kenwood/kenwood.c
index 1127cd4dd..619fa1709 100644
--- a/rigs/kenwood/kenwood.c
+++ b/rigs/kenwood/kenwood.c
@@ -194,12 +194,12 @@ tone_t kenwood42_ctcss_list[] =
*/
tone_t kenwood51_ctcss_list[] =
{
- 670 , 693, 719, 744, 770, 797, 825, 854, 885, 915, /* 0- 9 */
- 948 , 974, 1000, 1035, 1072, 1109, 1148, 1188, 1230, 1273, /* 10-19 */
- 1318, 1365, 1413, 1462, 1514, 1567, 1598, 1622, 1655, 1679, /* 20-29 */
- 1713, 1738, 1773, 1799, 1835, 1862, 1899, 1928, 1966, 1995, /* 30-39 */
- 2035, 2065, 2107, 2181, 2257, 2291, 2336, 2418, 2503, 2541, /* 40-49 */
- 17500, 0 /* 50-99 */
+ 670, 693, 719, 744, 770, 797, 825, 854, 885, 915, /* 0- 9 */
+ 948, 974, 1000, 1035, 1072, 1109, 1148, 1188, 1230, 1273, /* 10-19 */
+ 1318, 1365, 1413, 1462, 1514, 1567, 1598, 1622, 1655, 1679, /* 20-29 */
+ 1713, 1738, 1773, 1799, 1835, 1862, 1899, 1928, 1966, 1995, /* 30-39 */
+ 2035, 2065, 2107, 2181, 2257, 2291, 2336, 2418, 2503, 2541, /* 40-49 */
+ 17500, 0 /* 50-99 */
};
/* Token definitions for .cfgparams in rig_caps
@@ -1745,13 +1745,13 @@ int kenwood_get_split_vfo_if(RIG *rig, vfo_t rxvfo, split_t *split,
{
HAMLIB_TRACE;
*txvfo = rs->tx_vfo = priv->tx_vfo = (*split
- && !transmitting) ? RIG_VFO_B : RIG_VFO_A;
+ && !transmitting) ? RIG_VFO_B : RIG_VFO_A;
}
else if (rs->rx_vfo == RIG_VFO_B)
{
HAMLIB_TRACE;
*txvfo = rs->tx_vfo = priv->tx_vfo = (*split
- && !transmitting) ? RIG_VFO_B : RIG_VFO_A;
+ && !transmitting) ? RIG_VFO_B : RIG_VFO_A;
}
else
{
@@ -1841,7 +1841,7 @@ int kenwood_get_vfo_if(RIG *rig, vfo_t *vfo)
{
case '0':
*vfo = rs->rx_vfo = rs->tx_vfo = priv->tx_vfo =
- split_and_transmitting ? RIG_VFO_B : RIG_VFO_A;
+ split_and_transmitting ? RIG_VFO_B : RIG_VFO_A;
if (priv->info[32] == '1') { priv->tx_vfo = rs->tx_vfo = RIG_VFO_B; }
@@ -2417,8 +2417,9 @@ int kenwood_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
if (RIG_IS_TS990S)
{
- if (mode == RIG_MODE_PKTUSB) mode = RIG_MODE_USBD1;
- if (mode == RIG_MODE_PKTLSB) mode = RIG_MODE_LSBD1;
+ if (mode == RIG_MODE_PKTUSB) { mode = RIG_MODE_USBD1; }
+
+ if (mode == RIG_MODE_PKTLSB) { mode = RIG_MODE_LSBD1; }
}
kmode = rmode2kenwood(mode, caps->mode_table);
@@ -2451,19 +2452,28 @@ int kenwood_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
RIG_TARGETABLE_MODE since the toggle is not required for
reading the mode. */
vfo_t curr_vfo;
- if (RIG_IS_TS990S)
+
+ if (RIG_IS_TS990S)
+ {
err = kenwood_get_vfo_main_sub(rig, &curr_vfo);
- else // RIG_IS_TS890
+ }
+ else // RIG_IS_TS890...
[truncated message content] |
|
From: n0nb <n0...@us...> - 2024-04-01 19:36:13
|
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 41de3425d24edcbd448e0231692eeacc58909521 (commit)
via a4cd6deb9ddcbbf3f259a52937c0b2e1d094009a (commit)
via de719760445da30809786a6e7f096d29594ba805 (commit)
via 59fca440a537e5b858e92e67e5b8c6fd8e240aef (commit)
via 7b8f263b213da1649750fc4b38324096f769766f (commit)
via 0353fdcae07f9c5d4eb87f700da86d6042c019de (commit)
via e2b5a3bcb5170662460180742c329c13fdd994f7 (commit)
via 00dbd6a6df87733cbea105bf3d924ebe32ecebd2 (commit)
via ce4e9bfdf06ae67da2fbb7fcee285e742e6d9c5c (commit)
via 9f997d799d7c132b5d7c0d18f85785bad5141595 (commit)
via 55d5f8b64a259664374778f2f1e7ef6eb24def8d (commit)
via 0a0118b7977974d6fc5bdf951b0a216e4987540b (commit)
via 295ad7475762ab2a4b0d8eb0923e3e255ae84500 (commit)
via 2d0b8b807d220c10e49ba9c0f94b408ac3fd9d68 (commit)
via 4b436479d1667f1ee3f9f50db07a2a3fc9bdb7e4 (commit)
via 406b947134502996a1eca14a98b53716b86b5cec (commit)
via 53b01d829ed7ebaf1742353117db1646051a9330 (commit)
via 896230beeda0bbda4f551a754d47dcd0e7683f80 (commit)
via 8ebffd20b6afab1977729735947dcd1c6d40dfa6 (commit)
from dc375c6d005c1c143a7088e5792d10d6638e29f0 (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 41de3425d24edcbd448e0231692eeacc58909521
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sun Mar 31 12:22:02 2024 -0500
Fix hamlib_version in netrigctl_open and blank agc_levels from FLRig
diff --git a/rigs/dummy/netrigctl.c b/rigs/dummy/netrigctl.c
index 207ca9083..1a682a66d 100644
--- a/rigs/dummy/netrigctl.c
+++ b/rigs/dummy/netrigctl.c
@@ -889,6 +889,11 @@ static int netrigctl_open(RIG *rig)
p = strtok(NULL, ";");
}
}
+ else if (strcmp(setting, "hamlib_version") == 0)
+ {
+ printf("rigctld: %s\n", value);
+ }
+
else
{
diff --git a/tests/rigctl_parse.c b/tests/rigctl_parse.c
index 02ee83d7c..aa4c7de98 100644
--- a/tests/rigctl_parse.c
+++ b/tests/rigctl_parse.c
@@ -4705,7 +4705,7 @@ declare_proto_rig(dump_state)
fprintf(fout, "rig_model=%d\n", rig->caps->rig_model);
fprintf(fout, "rigctld_version=%s\n", hamlib_version2);
rig_sprintf_agc_levels(rig, buf, sizeof(buf));
- fprintf(fout, "agc_levels=%s\n", buf);
+ if (strlen(buf) > 0) fprintf(fout, "agc_levels=%s\n", buf);
if (rig->caps->ctcss_list)
{
commit a4cd6deb9ddcbbf3f259a52937c0b2e1d094009a
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sun Mar 31 12:21:55 2024 -0500
Update simic7000.c
diff --git a/simulators/simic7000.c b/simulators/simic7000.c
index 6f4b3ccc0..61808432e 100644
--- a/simulators/simic7000.c
+++ b/simulators/simic7000.c
@@ -132,6 +132,8 @@ void frameParse(int fd, unsigned char *frame, int len)
{
case 0x03:
+ if (frame[5] != 0xfd)
+ {
//from_bcd(frameackbuf[2], (civ_731_mode ? 4 : 5) * 2);
if (current_vfo == RIG_VFO_A || current_vfo == RIG_VFO_MAIN)
{
@@ -149,6 +151,18 @@ void frameParse(int fd, unsigned char *frame, int len)
if (powerstat)
{
n = write(fd, frame, 11);
+ dump_hex(frame, 11);
+ }
+ else
+ {
+ if (current_vfo==RIG_VFO_A)
+ freqA = from_bcd(&frame[5], (civ_731_mode ? 4 : 5) * 2);
+ else
+ freqB = from_bcd(&frame[5], (civ_731_mode ? 4 : 5) * 2);
+ frame[4] = 0xfb;
+ frame[5] = 0xfd;
+ n = write(fd, frame, 6);
+ }
}
break;
@@ -410,8 +424,8 @@ void frameParse(int fd, unsigned char *frame, int len)
{
printf("0x05 0x00 0x92 received\n");
transceive = frame[8];
- frame[6] = 0xfb;
- frame[7] = 0xfd;
+ frame[4] = 0xfb;
+ frame[5] = 0xfd;
n = write(fd, frame, 8);
}
else
commit de719760445da30809786a6e7f096d29594ba805
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sat Mar 30 23:40:59 2024 -0500
Fix CPU usage with rigctlcom in sleep.c
Hopefully doesn't affect other things too much
diff --git a/src/sleep.c b/src/sleep.c
index b3d2d34a2..bf1dc5454 100644
--- a/src/sleep.c
+++ b/src/sleep.c
@@ -62,7 +62,7 @@ int hl_usleep(rig_useconds_t usec)
tv1.tv_sec = (time_t) delay;
tv1.tv_nsec = (long)((delay - tv1.tv_sec) * 1e+9);
tv2.tv_sec = 0;
- tv2.tv_nsec = 10;
+ tv2.tv_nsec = 1000000;
// rig_debug(RIG_DEBUG_CACHE,"usec=%ld, sleep_time=%f, tv1=%ld,%ld\n", usec, sleep_time, (long)tv1.tv_sec,
// (long)tv1.tv_nsec);
@@ -194,7 +194,7 @@ int main()
{
char buf[256];
time(&rawtime);
- hl_usleep(1000000 * 1000); // test 1s sleep
+ hl_usleep(1000000); // test 1s sleep
date_strget(buf, sizeof(buf), 0);
printf("%s\n", buf);
time(&rawtime);
commit 59fca440a537e5b858e92e67e5b8c6fd8e240aef
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sat Mar 30 17:21:29 2024 -0500
Fix rigctld CPU usage when client impolitely disconnects
diff --git a/tests/rigctl_parse.c b/tests/rigctl_parse.c
index 9dabe4dcd..02ee83d7c 100644
--- a/tests/rigctl_parse.c
+++ b/tests/rigctl_parse.c
@@ -575,6 +575,8 @@ static int scanfc(FILE *fin, const char *format, void *p)
if (ret < 1) { rig_debug(RIG_DEBUG_TRACE, "%s: ret=%d\n", __func__, ret); }
+ if (errno == 22) return -22;
+
if (ferror(fin)) { rig_debug(RIG_DEBUG_ERR, "%s: errno=%d, %s\n", __func__, errno, strerror(errno)); }
return ret;
commit 7b8f263b213da1649750fc4b38324096f769766f
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sat Mar 30 10:06:08 2024 -0500
Reduce verbosity in netrigctl.c
diff --git a/rigs/dummy/netrigctl.c b/rigs/dummy/netrigctl.c
index d3b1e9b08..207ca9083 100644
--- a/rigs/dummy/netrigctl.c
+++ b/rigs/dummy/netrigctl.c
@@ -635,7 +635,7 @@ static int netrigctl_open(RIG *rig)
ret = read_string(rp, (unsigned char *) buf, BUF_MAX, "\n", 1, 0, 1);
strtok(buf, "\r\n"); // chop the EOL
-rig_debug(RIG_DEBUG_ERR, "## %s\n", buf);
+ rig_debug(RIG_DEBUG_VERBOSE, "## %s\n", buf);
if (ret <= 0)
{
RETURNFUNC((ret < 0) ? ret : -RIG_EPROTO);
commit 0353fdcae07f9c5d4eb87f700da86d6042c019de
Author: Mike Black W9MDB <mdb...@ya...>
Date: Fri Mar 29 22:23:36 2024 -0500
Reduce debug in flrig
diff --git a/rigs/dummy/flrig.c b/rigs/dummy/flrig.c
index ecdf3c0c1..a4c38d1b3 100644
--- a/rigs/dummy/flrig.c
+++ b/rigs/dummy/flrig.c
@@ -1831,7 +1831,7 @@ static int flrig_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
if (strstr(p, "k")) { *width = *width * 1000; }
- rig_debug(RIG_DEBUG_ERR, "%s: p=%s, *width=%d\n", __func__, p, (int)(*width));
+ rig_debug(RIG_DEBUG_TRACE, "%s: p=%s, *width=%d\n", __func__, p, (int)(*width));
if (strcmp(p, "FIXED") == 0)
{
commit e2b5a3bcb5170662460180742c329c13fdd994f7
Merge: 00dbd6a6d ce4e9bfdf
Author: Mike Black W9MDB <mdb...@ya...>
Date: Fri Mar 29 17:10:07 2024 -0500
Merge branch 'master' of https://github.com/Hamlib/Hamlib
commit 00dbd6a6df87733cbea105bf3d924ebe32ecebd2
Author: Mike Black W9MDB <mdb...@ya...>
Date: Fri Mar 29 17:09:38 2024 -0500
Fix rigctlcom.s IF command for CW Skimmer use and others that might use IF command
diff --git a/tests/rigctlcom.c b/tests/rigctlcom.c
index cadcb6904..2716b98fe 100644
--- a/tests/rigctlcom.c
+++ b/tests/rigctlcom.c
@@ -224,7 +224,7 @@ int main(int argc, char *argv[])
char conf_parms[MAXCONFLEN] = "";
int status;
- printf("rigctlcom Version 1.4\n");
+ printf("rigctlcom Version 1.5\n");
while (1)
{
@@ -807,7 +807,7 @@ static int handle_ts2000(void *arg)
char response[64];
char *fmt =
// cppcheck-suppress *
- "IF%011"PRIll" %1d%1d%1d%02d%1d%1"PRIll"%1d%1d%1d%1d%02d%1d;";
+ "IF%011"PRIll"%04d %1d%1d%1d%02d%1d%1"PRIll"%1d%1d%1d%1d%02d%1d;";
if (retval != RIG_OK)
{
commit ce4e9bfdf06ae67da2fbb7fcee285e742e6d9c5c
Merge: 55d5f8b64 9f997d799
Author: Michael Black <mdb...@ya...>
Date: Thu Mar 28 15:46:13 2024 -0500
Merge pull request #1532 from GeoBaltz/rp8
More pointer conversions
commit 9f997d799d7c132b5d7c0d18f85785bad5141595
Author: George Baltz N3GB <Geo...@gm...>
Date: Thu Mar 28 16:26:21 2024 -0400
Fix incorrect port read for elevation
Add missing port parameters for rotp2
Remove funky character(^B) from simrotorez.c so `file` and `more` think it
is plain text.
Dunno if this works on the real H/W, but at least the simulator can get
and set az/el position without errors.
diff --git a/rotators/rotorez/rotorez.c b/rotators/rotorez/rotorez.c
index ec4e559ca..819675870 100644
--- a/rotators/rotorez/rotorez.c
+++ b/rotators/rotorez/rotorez.c
@@ -667,7 +667,7 @@ static int rotorez_rot_get_position(ROT *rot, azimuth_t *azimuth,
//TODO: Should this be rotp or rotp2????
//err = read_block(&rs->rotport, (unsigned char *) az, AZ_READ_LEN);
- err = read_block(rotp, (unsigned char *) az, AZ_READ_LEN);
+ err = read_block(rotp2, (unsigned char *) az, AZ_READ_LEN);
if (err != AZ_READ_LEN)
{
diff --git a/simulators/simrotorez.c b/simulators/simrotorez.c
index aa1ebc6ea..95f21262f 100644
--- a/simulators/simrotorez.c
+++ b/simulators/simrotorez.c
@@ -102,7 +102,7 @@ int main(int argc, char *argv[])
int flag = 0;
while (1)
- {
+ {
int bytes;
if (!flag) bytes = getmyline(fd, buf);
else bytes = getmyline(fd2, buf);
diff --git a/src/rotator.c b/src/rotator.c
index 166fe7a6a..5dd492b18 100644
--- a/src/rotator.c
+++ b/src/rotator.c
@@ -266,12 +266,12 @@ ROT *HAMLIB_API rot_init(rot_model_t rot_model)
rotp2 = ROTPORT2(rot);
rs->comm_state = 0;
- rotp->type.rig = caps->port_type; /* default from caps */
+ rotp->type.rig = rotp2->type.rig = caps->port_type; /* default from caps */
- rotp->write_delay = caps->write_delay;
- rotp->post_write_delay = caps->post_write_delay;
- rotp->timeout = caps->timeout;
- rotp->retry = caps->retry;
+ rotp->write_delay = rotp2->write_delay = caps->write_delay;
+ rotp->post_write_delay = rotp2->post_write_delay = caps->post_write_delay;
+ rotp->timeout = rotp2->timeout = caps->timeout;
+ rotp->retry = rotp2->retry = caps->retry;
switch (caps->port_type)
{
commit 55d5f8b64a259664374778f2f1e7ef6eb24def8d
Author: Mike Black W9MDB <mdb...@ya...>
Date: Tue Mar 26 16:59:57 2024 -0500
Really fix FLRig get_bwA return code
diff --git a/rigs/dummy/flrig.c b/rigs/dummy/flrig.c
index fc3080436..ecdf3c0c1 100644
--- a/rigs/dummy/flrig.c
+++ b/rigs/dummy/flrig.c
@@ -1769,10 +1769,11 @@ static int flrig_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
cmdp = "rig.get_bwA";
retval = flrig_transaction(rig, cmdp, NULL, value, sizeof(value));
- if (strlen(value) == 0)
+ if (strlen(value) == 0) // sometimes we get a null reply here -- OK...deal with it
{
rig_debug(RIG_DEBUG_WARN, "%s: empty value return cached bandwidth\n", __func__);
*width = rig->state.cache.widthMainA;
+ RETURNFUNC(RIG_OK);
}
if (retval == RIG_OK && strstr(value, "NONE"))
commit 0a0118b7977974d6fc5bdf951b0a216e4987540b
Author: Mike Black W9MDB <mdb...@ya...>
Date: Tue Mar 26 16:25:20 2024 -0500
Fix FLrig get_bwA and get_bwB to return cached value if FLRig returns empty value
diff --git a/rigs/dummy/flrig.c b/rigs/dummy/flrig.c
index f8992de77..fc3080436 100644
--- a/rigs/dummy/flrig.c
+++ b/rigs/dummy/flrig.c
@@ -1769,11 +1769,18 @@ static int flrig_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
cmdp = "rig.get_bwA";
retval = flrig_transaction(rig, cmdp, NULL, value, sizeof(value));
+ if (strlen(value) == 0)
+ {
+ rig_debug(RIG_DEBUG_WARN, "%s: empty value return cached bandwidth\n", __func__);
+ *width = rig->state.cache.widthMainA;
+ }
+
if (retval == RIG_OK && strstr(value, "NONE"))
{
priv->has_get_bwA = priv->has_get_bwB = 0;
*width = 0;
rig_debug(RIG_DEBUG_VERBOSE, "%s: does not have rig.get_bwA/B\n", __func__);
+ RETURNFUNC(RIG_OK);
}
if (retval != RIG_OK || strstr(value, "NONE"))
@@ -1787,6 +1794,12 @@ static int flrig_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
cmdp = "rig.get_bwB";
retval = flrig_transaction(rig, cmdp, NULL, value, sizeof(value));
+ if (strlen(value) == 0)
+ {
+ rig_debug(RIG_DEBUG_WARN, "%s: empty value return cached bandwidth\n", __func__);
+ *width = rig->state.cache.widthMainA;
+ RETURNFUNC(RIG_OK);
+ }
if (retval == RIG_OK && strlen(value) == 0)
{
rig_debug(RIG_DEBUG_VERBOSE, "%s: does not have rig.get_bwB\n", __func__);
commit 295ad7475762ab2a4b0d8eb0923e3e255ae84500
Author: George Baltz N3GB <Geo...@gm...>
Date: Tue Mar 26 02:04:53 2024 -0400
Add macros for amplifier and rotator state pointers.
diff --git a/include/hamlib/rig.h b/include/hamlib/rig.h
index 7f3607bcf..9ecb99d46 100644
--- a/include/hamlib/rig.h
+++ b/include/hamlib/rig.h
@@ -2491,6 +2491,8 @@ typedef hamlib_port_t port_t;
#define ROTPORT(r) (&r->state.rotport)
#define ROTPORT2(r) (&r->state.rotport2)
#define STATE(r) (&r->state)
+#define AMPSTATE(a) (&(a)->state)
+#define ROTSTATE(r) (&(r)->state)
/* Then when the rigport address is stored as a pointer somewhere else(say,
* in the rig structure itself), the definition could be changed to
* #define RIGPORT(r) r->somewhereelse
@@ -2506,6 +2508,8 @@ typedef hamlib_port_t port_t;
#define HAMLIB_ROTPORT(r) ((hamlib_port_t *)rot_data_pointer(r, RIG_PTRX_ROTPORT))
#define HAMLIB_ROTPORT2(r) ((hamlib_port_t *)rot_data_pointer(r, RIG_PTRX_ROTPORT2))
#define HAMLIB_STATE(r) ((struct rig_state *)rig_data_pointer(r, RIG_PTRX_STATE))
+#define HAMLIB_AMPSTATE(a) ((struct amp_state *)amp_data_pointer(a, RIG_PTRX_AMPSTATE))
+#define HAMLIB_ROTSTATE(r) ((struct rot_state *)rot_data_pointer(r, RIG_PTRX_ROTSTATE))
#endif
typedef enum {
@@ -2518,6 +2522,8 @@ typedef enum {
RIG_PTRX_ROTPORT,
RIG_PTRX_ROTPORT2,
RIG_PTRX_STATE,
+ RIG_PTRX_AMPSTATE,
+ RIG_PTRX_ROTSTATE,
// New entries go directly above this line====================
RIG_PTRX_MAXIMUM
} rig_ptrx_t;
diff --git a/src/amp_conf.c b/src/amp_conf.c
index e6a734a5a..434c9e72d 100644
--- a/src/amp_conf.c
+++ b/src/amp_conf.c
@@ -44,7 +44,7 @@
/*
- * Configuration options available in the amp->state struct.
+ * Configuration options available in the amp_state struct.
*/
static const struct confparams ampfrontend_cfg_params[] =
{
@@ -112,7 +112,7 @@ int frontamp_set_conf(AMP *amp, hamlib_token_t token, const char *val)
hamlib_port_t *ampp = AMPPORT(amp);
int val_i;
- rs = &->state;
+ rs = AMPSTATE(amp);
amp_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
diff --git a/src/amp_settings.c b/src/amp_settings.c
index ffd399c23..749c42904 100644
--- a/src/amp_settings.c
+++ b/src/amp_settings.c
@@ -75,7 +75,7 @@ setting_t HAMLIB_API amp_has_set_level(AMP *amp, setting_t level)
return 0;
}
- return (amp->state.has_set_level & level);
+ return (AMPSTATE(amp)->has_set_level & level);
}
/**
@@ -108,7 +108,7 @@ setting_t HAMLIB_API amp_has_get_level(AMP *amp, setting_t level)
return 0;
}
- return (amp->state.has_get_level & level);
+ return (AMPSTATE(amp)->has_get_level & level);
}
/*! @} */
diff --git a/src/amplifier.c b/src/amplifier.c
index 896f71f9c..aa41d650c 100644
--- a/src/amplifier.c
+++ b/src/amplifier.c
@@ -65,7 +65,7 @@
#include "token.h"
//! @cond Doxygen_Suppress
-#define CHECK_AMP_ARG(r) (!(r) || !(r)->caps || !(r)->state.comm_state)
+#define CHECK_AMP_ARG(r) (!(r) || !(r)->caps || !AMPSTATE(r)->comm_state)
//! @endcond
/*
@@ -224,7 +224,7 @@ AMP *HAMLIB_API amp_init(amp_model_t amp_model)
/**
* \todo Read the Preferences here!
*/
- rs = &->state;
+ rs = AMPSTATE(amp);
//TODO allocate and link new ampport
// For now, use the embedded one
@@ -285,8 +285,8 @@ AMP *HAMLIB_API amp_init(amp_model_t amp_model)
// Now we have to copy our new rig state hamlib_port structure to the deprecated one
// Clients built on older 4.X versions will use the old structure
// Clients built on newer 4.5 versions will use the new structure
- memcpy(&->state.ampport_deprecated, ap,
- sizeof(amp->state.ampport_deprecated));
+ memcpy(&rs->ampport_deprecated, ap,
+ sizeof(rs->ampport_deprecated));
return amp;
}
@@ -324,7 +324,7 @@ int HAMLIB_API amp_open(AMP *amp)
}
caps = amp->caps;
- rs = &->state;
+ rs = AMPSTATE(amp);
if (rs->comm_state)
{
@@ -419,8 +419,8 @@ int HAMLIB_API amp_open(AMP *amp)
if (status != RIG_OK)
{
- memcpy(&->state.ampport_deprecated, ap,
- sizeof(amp->state.ampport_deprecated));
+ memcpy(&rs->ampport_deprecated, ap,
+ sizeof(rs->ampport_deprecated));
return status;
}
}
@@ -443,8 +443,8 @@ int HAMLIB_API amp_open(AMP *amp)
ser_set_rts(ap, 0);
}
- memcpy(&->state.ampport_deprecated, ap,
- sizeof(amp->state.ampport_deprecated));
+ memcpy(&rs->ampport_deprecated, ap,
+ sizeof(rs->ampport_deprecated));
return RIG_OK;
}
@@ -488,7 +488,7 @@ int HAMLIB_API amp_close(AMP *amp)
}
caps = amp->caps;
- rs = &->state;
+ rs = AMPSTATE(amp);
if (!rs->comm_state)
{
@@ -571,7 +571,7 @@ int HAMLIB_API amp_cleanup(AMP *amp)
/*
* check if they forgot to close the amp
*/
- if (amp->state.comm_state)
+ if (AMPSTATE(amp)->comm_state)
{
amp_close(amp);
}
@@ -969,6 +969,8 @@ void * HAMLIB_API amp_data_pointer(AMP *amp, rig_ptrx_t idx)
{
case RIG_PTRX_AMPPORT:
return AMPPORT(amp);
+ case RIG_PTRX_AMPSTATE:
+ return AMPSTATE(amp);
default:
amp_debug(RIG_DEBUG_ERR, "%s: Invalid data index=%d\n", __func__, idx);
return NULL;
diff --git a/src/rot_conf.c b/src/rot_conf.c
index 89a616382..6d96b4be9 100644
--- a/src/rot_conf.c
+++ b/src/rot_conf.c
@@ -45,7 +45,7 @@
/*
- * Configuration options available in the rot->state struct.
+ * Configuration options available in the rot_state struct.
*/
static const struct confparams rotfrontend_cfg_params[] =
{
@@ -143,7 +143,7 @@ int frontrot_set_conf(ROT *rot, hamlib_token_t token, const char *val)
hamlib_port_t *rotp = ROTPORT(rot);
int val_i;
- rs = &rot->state;
+ rs = ROTSTATE(rot);
rot_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
@@ -412,7 +412,7 @@ int frontrot_get_conf(ROT *rot, hamlib_token_t token, char *val, int val_len)
hamlib_port_t *rotp = ROTPORT(rot);
const char *s;
- rs = &rot->state;
+ rs = ROTSTATE(rot);
rot_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
diff --git a/src/rot_settings.c b/src/rot_settings.c
index a75c55844..bee4a8f29 100644
--- a/src/rot_settings.c
+++ b/src/rot_settings.c
@@ -47,7 +47,7 @@
#ifndef DOC_HIDDEN
-# define CHECK_ROT_ARG(r) (!(r) || !(r)->caps || !(r)->state.comm_state)
+# define CHECK_ROT_ARG(r) (!(r) || !(r)->caps || !(ROTSTATE(r)->comm_state))
#endif /* !DOC_HIDDEN */
@@ -255,7 +255,7 @@ setting_t HAMLIB_API rot_has_get_level(ROT *rot, setting_t level)
return 0;
}
- return (rot->state.has_get_level & level);
+ return (ROTSTATE(rot)->has_get_level & level);
}
@@ -293,7 +293,7 @@ setting_t HAMLIB_API rot_has_set_level(ROT *rot, setting_t level)
return 0;
}
- return (rot->state.has_set_level & level);
+ return (ROTSTATE(rot)->has_set_level & level);
}
@@ -330,7 +330,7 @@ setting_t HAMLIB_API rot_has_get_parm(ROT *rot, setting_t parm)
return 0;
}
- return (rot->state.has_get_parm & parm);
+ return (ROTSTATE(rot)->has_get_parm & parm);
}
@@ -367,7 +367,7 @@ setting_t HAMLIB_API rot_has_set_parm(ROT *rot, setting_t parm)
return 0;
}
- return (rot->state.has_set_parm & parm);
+ return (ROTSTATE(rot)->has_set_parm & parm);
}
@@ -404,7 +404,7 @@ setting_t HAMLIB_API rot_has_get_func(ROT *rot, setting_t func)
return 0;
}
- return (rot->state.has_get_func & func);
+ return (ROTSTATE(rot)->has_get_func & func);
}
@@ -440,7 +440,7 @@ setting_t HAMLIB_API rot_has_set_func(ROT *rot, setting_t func)
return 0;
}
- return (rot->state.has_set_func & func);
+ return (ROTSTATE(rot)->has_set_func & func);
}
diff --git a/src/rotator.c b/src/rotator.c
index b1db5c478..166fe7a6a 100644
--- a/src/rotator.c
+++ b/src/rotator.c
@@ -89,7 +89,7 @@
# define DEFAULT_PARALLEL_PORT "/dev/parport0"
#endif
-#define CHECK_ROT_ARG(r) (!(r) || !(r)->caps || !(r)->state.comm_state)
+#define CHECK_ROT_ARG(r) (!(r) || !(r)->caps || !(ROTSTATE(r)->comm_state))
/*
@@ -258,7 +258,7 @@ ROT *HAMLIB_API rot_init(rot_model_t rot_model)
/**
* \todo Read the Preferences here!
*/
- rs = &rot->state;
+ rs = ROTSTATE(rot);
//TODO Allocate new rotport[2]
// For now, use the embedded ones
@@ -345,8 +345,8 @@ ROT *HAMLIB_API rot_init(rot_model_t rot_model)
// Now we have to copy our new rig state hamlib_port structure to the deprecated one
// Clients built on older 4.X versions will use the old structure
// Clients built on newer 4.5 versions will use the new structure
- memcpy(&rot->state.rotport_deprecated, rotp,
- sizeof(rot->state.rotport_deprecated));
+ memcpy(&rs->rotport_deprecated, rotp,
+ sizeof(rs->rotport_deprecated));
return rot;
}
@@ -386,7 +386,7 @@ int HAMLIB_API rot_open(ROT *rot)
}
caps = rot->caps;
- rs = &rot->state;
+ rs = ROTSTATE(rot);
if (rs->comm_state)
{
@@ -520,8 +520,8 @@ int HAMLIB_API rot_open(ROT *rot)
if (status != RIG_OK)
{
- memcpy(&rot->state.rotport_deprecated, rotp,
- sizeof(rot->state.rotport_deprecated));
+ memcpy(&rs->rotport_deprecated, rotp,
+ sizeof(rs->rotport_deprecated));
return status;
}
}
@@ -544,8 +544,8 @@ int HAMLIB_API rot_open(ROT *rot)
ser_set_rts(rotp, 0);
}
- memcpy(&rot->state.rotport_deprecated, rotp,
- sizeof(rot->state.rotport_deprecated));
+ memcpy(&rs->rotport_deprecated, rotp,
+ sizeof(rs->rotport_deprecated));
return RIG_OK;
}
@@ -580,7 +580,7 @@ int HAMLIB_API rot_close(ROT *rot)
}
caps = rot->caps;
- rs = &rot->state;
+ rs = ROTSTATE(rot);
if (!rs->comm_state)
{
@@ -632,8 +632,8 @@ int HAMLIB_API rot_close(ROT *rot)
rs->comm_state = 0;
- memcpy(&rot->state.rotport_deprecated, rotp,
- sizeof(rot->state.rotport_deprecated));
+ memcpy(&rs->rotport_deprecated, rotp,
+ sizeof(rs->rotport_deprecated));
return RIG_OK;
}
@@ -667,7 +667,7 @@ int HAMLIB_API rot_cleanup(ROT *rot)
/*
* check if they forgot to close the rot
*/
- if (rot->state.comm_state)
+ if (ROTSTATE(rot)->comm_state)
{
rot_close(rot);
}
@@ -726,11 +726,11 @@ int HAMLIB_API rot_set_position(ROT *rot,
return -RIG_EINVAL;
}
- azimuth += rot->state.az_offset;
- elevation += rot->state.el_offset;
-
caps = rot->caps;
- rs = &rot->state;
+ rs = ROTSTATE(rot);
+
+ azimuth += rs->az_offset;
+ elevation += rs->el_offset;
rot_debug(RIG_DEBUG_VERBOSE, "%s: south_zero=%d \n", __func__, rs->south_zero);
@@ -801,7 +801,7 @@ int HAMLIB_API rot_get_position(ROT *rot,
}
caps = rot->caps;
- rs = &rot->state;
+ rs = ROTSTATE(rot);
if (caps->get_position == NULL)
{
@@ -820,8 +820,8 @@ int HAMLIB_API rot_get_position(ROT *rot,
rot_debug(RIG_DEBUG_VERBOSE, "%s: south adj to az=%.2f\n", __func__, az);
}
- *azimuth = az - rot->state.az_offset;
- *elevation = el - rot->state.el_offset;
+ *azimuth = az - rs->az_offset;
+ *elevation = el - rs->el_offset;
return RIG_OK;
}
@@ -1057,6 +1057,8 @@ void * HAMLIB_API rot_data_pointer(ROT *rot, rig_ptrx_t idx)
return ROTPORT(rot);
case RIG_PTRX_ROTPORT2:
return ROTPORT2(rot);
+ case RIG_PTRX_ROTSTATE:
+ return ROTSTATE(rot);
default:
rot_debug(RIG_DEBUG_ERR, "%s: Invalid data index=%d\n", __func__, idx);
return NULL;
commit 2d0b8b807d220c10e49ba9c0f94b408ac3fd9d68
Author: George Baltz N3GB <Geo...@gm...>
Date: Sun Mar 17 03:43:25 2024 -0400
Pointerize all state references in rigs/kenwood/*
diff --git a/rigs/kenwood/ic10.c b/rigs/kenwood/ic10.c
index 38d8fad08..ac57db4b8 100644
--- a/rigs/kenwood/ic10.c
+++ b/rigs/kenwood/ic10.c
@@ -67,7 +67,7 @@ int ic10_cmd_trim(char *data, int data_len)
/**
* ic10_transaction
- * Assumes rig!=NULL rig->state!=NULL rig->caps!=NULL
+ * Assumes rig!=NULL STATE(rig)!=NULL rig->caps!=NULL
**/
int ic10_transaction(RIG *rig, const char *cmd, int cmd_len, char *data,
int *data_len)
@@ -99,7 +99,7 @@ transaction:
if (!data)
{
char buffer[50];
- const struct kenwood_priv_data *priv = rig->state.priv;
+ const struct kenwood_priv_data *priv = STATE(rig)->priv;
if (RIG_OK != (retval = write_block(rp,
(unsigned char *) priv->verify_cmd, strlen(priv->verify_cmd))))
@@ -451,7 +451,7 @@ int ic10_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
if (vfo == RIG_VFO_CURR)
{
- tvfo = rig->state.current_vfo;
+ tvfo = STATE(rig)->current_vfo;
}
else
{
diff --git a/rigs/kenwood/kenwood.c b/rigs/kenwood/kenwood.c
index 19b54fabe..2562e01fc 100644
--- a/rigs/kenwood/kenwood.c
+++ b/rigs/kenwood/kenwood.c
@@ -234,7 +234,7 @@ struct confparams kenwood_cfg_params[] =
/**
* kenwood_transaction
- * Assumes rig!=NULL rig->state!=NULL rig->caps!=NULL
+ * Assumes rig!=NULL STATE(rig)!=NULL rig->caps!=NULL
*
* Parameters:
* cmdstr: Command to be sent to the rig. cmdstr can also be NULL,
@@ -262,7 +262,7 @@ int kenwood_transaction(RIG *rig, const char *cmdstr, char *data,
char *cmd;
int len;
int retry_read = 0;
- struct kenwood_priv_data *priv = rig->state.priv;
+ struct kenwood_priv_data *priv = STATE(rig)->priv;
struct kenwood_priv_caps *caps = kenwood_caps(rig);
struct rig_state *rs;
struct hamlib_port *rp; /* Pointer to rigport structure */
@@ -285,7 +285,7 @@ int kenwood_transaction(RIG *rig, const char *cmdstr, char *data,
RETURNFUNC2(-RIG_EINVAL);
}
- rs = &rig->state;
+ rs = STATE(rig);
rp = RIGPORT(rig);
rs->transaction_active = 1;
@@ -396,7 +396,7 @@ transaction_write:
if (!datasize && strncmp(cmdstr, "KY", 2) != 0)
{
- rig->state.transaction_active = 0;
+ rs->transaction_active = 0;
// there are some commands that have problems with immediate follow-up
// so we'll just ignore them
@@ -749,7 +749,7 @@ int kenwood_safe_transaction(RIG *rig, const char *cmd, char *buf,
// QRPLABS can't seem top decide if they give 37 or 38 bytes for IF command
if (strncmp(cmd, "IF", 2) == 0 && rig->caps->rig_model == RIG_MODEL_QRPLABS) { break; }
- struct kenwood_priv_data *priv = rig->state.priv;
+ struct kenwood_priv_data *priv = STATE(rig)->priv;
rig_debug(RIG_DEBUG_ERR,
"%s: wrong answer; len for cmd %s: expected = %d, got %d\n",
@@ -809,14 +809,14 @@ int kenwood_init(RIG *rig)
rig_debug(RIG_DEBUG_VERBOSE, "%s called, version %s/%s\n", __func__,
BACKEND_VER, rig->caps->version);
- rig->state.priv = calloc(1, sizeof(struct kenwood_priv_data));
+ STATE(rig)->priv = calloc(1, sizeof(struct kenwood_priv_data));
- if (rig->state.priv == NULL)
+ if (STATE(rig)->priv == NULL)
{
RETURNFUNC2(-RIG_ENOMEM);
}
- priv = rig->state.priv;
+ priv = STATE(rig)->priv;
memset(priv, 0x00, sizeof(struct kenwood_priv_data));
@@ -878,15 +878,15 @@ int kenwood_cleanup(RIG *rig)
{
ENTERFUNC;
- free(rig->state.priv);
- rig->state.priv = NULL;
+ free(STATE(rig)->priv);
+ STATE(rig)->priv = NULL;
RETURNFUNC(RIG_OK);
}
int kenwood_open(RIG *rig)
{
- struct kenwood_priv_data *priv = rig->state.priv;
+ struct kenwood_priv_data *priv = STATE(rig)->priv;
struct kenwood_priv_caps *caps = kenwood_caps(rig);
int err, i;
char *idptr;
@@ -900,7 +900,7 @@ int kenwood_open(RIG *rig)
priv->question_mark_response_means_rejected = 0;
- if (rig->state.auto_power_on)
+ if (STATE(rig)->auto_power_on)
{
// Ensure rig is on
rig_set_powerstat(rig, 1);
@@ -923,7 +923,7 @@ int kenwood_open(RIG *rig)
err = rig_get_powerstat(rig, &powerstat);
if (err == RIG_OK && powerstat == 0 && priv->poweron == 0
- && rig->state.auto_power_on)
+ && STATE(rig)->auto_power_on)
{
priv->has_ps = 1;
rig_debug(RIG_DEBUG_TRACE, "%s: got PS0 so powerup\n", __func__);
@@ -1074,7 +1074,7 @@ int kenwood_open(RIG *rig)
__func__, kenwood_id_string_list[i].id);
// current vfo is rx_vfo
- rig_get_vfo(rig, &rig->state.rx_vfo);
+ rig_get_vfo(rig, &STATE(rig)->rx_vfo);
if (kenwood_id_string_list[i].model == rig->caps->rig_model)
{
@@ -1138,7 +1138,7 @@ int kenwood_open(RIG *rig)
int kenwood_close(RIG *rig)
{
- struct kenwood_priv_data *priv = rig->state.priv;
+ struct kenwood_priv_data *priv = STATE(rig)->priv;
ENTERFUNC;
@@ -1151,7 +1151,7 @@ int kenwood_close(RIG *rig)
it's not supported */
}
- if (rig->state.auto_power_off)
+ if (STATE(rig)->auto_power_off)
{
rig_debug(RIG_DEBUG_TRACE, "%s: got PS1 so powerdown\n", __func__);
rig_set_powerstat(rig, 0);
@@ -1186,7 +1186,7 @@ int kenwood_get_id(RIG *rig, char *buf)
*/
int kenwood_get_if(RIG *rig)
{
- struct kenwood_priv_data *priv = rig->state.priv;
+ struct kenwood_priv_data *priv = STATE(rig)->priv;
struct kenwood_priv_caps *caps = kenwood_caps(rig);
int retval;
int post_write_delay_save = 0;
@@ -1196,8 +1196,8 @@ int kenwood_get_if(RIG *rig)
// Malachite has a 400ms delay but some get commands can work with no delay
if (RIG_IS_MALACHITE)
{
- post_write_delay_save = rig->state.post_write_delay;
- rig->state.post_write_delay = 0;
+ post_write_delay_save = STATE(rig)->post_write_delay;
+ STATE(rig)->post_write_delay = 0;
}
retval = kenwood_safe_transaction(rig, "IF", priv->info,
@@ -1205,7 +1205,7 @@ int kenwood_get_if(RIG *rig)
if (RIG_IS_MALACHITE)
{
- rig->state.post_write_delay = post_write_delay_save;
+ STATE(rig)->post_write_delay = post_write_delay_save;
}
RETURNFUNC(retval);
@@ -1222,7 +1222,7 @@ int kenwood_set_vfo(RIG *rig, vfo_t vfo)
char cmdbuf[12];
int retval;
char vfo_function;
- struct kenwood_priv_data *priv = rig->state.priv;
+ struct kenwood_priv_data *priv = STATE(rig)->priv;
ENTERFUNC;
rig_debug(RIG_DEBUG_VERBOSE,
@@ -1243,7 +1243,7 @@ int kenwood_set_vfo(RIG *rig, vfo_t vfo)
#if 0
- if (rig->state.current_vfo == vfo)
+ if (STATE(rig)->current_vfo == vfo)
{
rig_debug(RIG_DEBUG_VERBOSE, "%s: vfo already is %s...skipping\n", __func__,
rig_strvfo(vfo));
@@ -1267,19 +1267,19 @@ int kenwood_set_vfo(RIG *rig, vfo_t vfo)
break;
case RIG_VFO_TX:
- vfo_function = rig->state.tx_vfo == RIG_VFO_B ? '1' : '0';
+ vfo_function = STATE(rig)->tx_vfo == RIG_VFO_B ? '1' : '0';
break;
#if 0 // VFO_RX really should NOT be VFO_CURR as VFO_CURR could be either VFO
case RIG_VFO_RX:
- vfo_function = rig->state.rx_vfo == RIG_VFO_B ? '1' : '0';
+ vfo_function = STATE(rig)->rx_vfo == RIG_VFO_B ? '1' : '0';
break;
#endif
case RIG_VFO_CURR:
HAMLIB_TRACE;
- rig->state.current_vfo = RIG_VFO_CURR;
+ STATE(rig)->current_vfo = RIG_VFO_CURR;
RETURNFUNC2(RIG_OK);
default:
@@ -1344,7 +1344,7 @@ int kenwood_set_vfo(RIG *rig, vfo_t vfo)
}
HAMLIB_TRACE;
- rig->state.current_vfo = vfo;
+ STATE(rig)->current_vfo = vfo;
/* if FN command then there's no FT or FR */
/* If split mode on, the don't change TxVFO */
@@ -1473,7 +1473,7 @@ int kenwood_get_vfo_main_sub(RIG *rig, vfo_t *vfo)
*/
int kenwood_set_split_vfo(RIG *rig, vfo_t vfo, split_t split, vfo_t txvfo)
{
- struct kenwood_priv_data *priv = rig->state.priv;
+ struct kenwood_priv_data *priv = STATE(rig)->priv;
char cmdbuf[12];
int retval;
unsigned char vfo_function;
@@ -1496,7 +1496,7 @@ int kenwood_set_split_vfo(RIG *rig, vfo_t vfo, split_t split, vfo_t txvfo)
RETURNFUNC2(kenwood_transaction(rig, cmdbuf, NULL, 0));
}
- if (vfo == RIG_VFO_CURR) { vfo = rig->state.current_vfo; }
+ if (vfo == RIG_VFO_CURR) { vfo = STATE(rig)->current_vfo; }
if (vfo == RIG_VFO_TX || vfo == RIG_VFO_RX) { vfo = vfo_fixup(rig, vfo, split); }
@@ -1640,7 +1640,7 @@ int kenwood_set_split_vfo(RIG *rig, vfo_t vfo, split_t split, vfo_t txvfo)
*/
int kenwood_set_split(RIG *rig, vfo_t vfo, split_t split, vfo_t txvfo)
{
- struct kenwood_priv_data *priv = rig->state.priv;
+ struct kenwood_priv_data *priv = STATE(rig)->priv;
char cmdbuf[6];
int retval;
@@ -1674,7 +1674,8 @@ int kenwood_get_split_vfo_if(RIG *rig, vfo_t rxvfo, split_t *split,
{
int transmitting;
int retval;
- struct kenwood_priv_data *priv = rig->state.priv;
+ struct rig_state *rs = STATE(rig);
+ struct kenwood_priv_data *priv = rs->priv;
ENTERFUNC;
@@ -1694,13 +1695,13 @@ int kenwood_get_split_vfo_if(RIG *rig, vfo_t rxvfo, split_t *split,
{
*split = RIG_SPLIT_ON;
*txvfo = RIG_VFO_SUB;
- priv->tx_vfo = rig->state.tx_vfo = *txvfo;
+ priv->tx_vfo = rs->tx_vfo = *txvfo;
}
else
{
*split = RIG_SPLIT_OFF;
*txvfo = RIG_VFO_MAIN;
- priv->tx_vfo = rig->state.tx_vfo = *txvfo;
+ priv->tx_vfo = rs->tx_vfo = *txvfo;
}
}
@@ -1740,35 +1741,35 @@ int kenwood_get_split_vfo_if(RIG *rig, vfo_t rxvfo, split_t *split,
switch (priv->info[30])
{
case '0':
- if (rig->state.rx_vfo == RIG_VFO_A)
+ if (rs->rx_vfo == RIG_VFO_A)
{
HAMLIB_TRACE;
- *txvfo = rig->state.tx_vfo = priv->tx_vfo = (*split
+ *txvfo = rs->tx_vfo = priv->tx_vfo = (*split
&& !transmitting) ? RIG_VFO_B : RIG_VFO_A;
}
- else if (rig->state.rx_vfo == RIG_VFO_B)
+ else if (rs->rx_vfo == RIG_VFO_B)
{
HAMLIB_TRACE;
- *txvfo = rig->state.tx_vfo = priv->tx_vfo = (*split
+ *txvfo = rs->tx_vfo = priv->tx_vfo = (*split
&& !transmitting) ? RIG_VFO_B : RIG_VFO_A;
}
else
{
rig_debug(RIG_DEBUG_WARN, "%s(%d): unknown rx_vfo=%s\n", __func__, __LINE__,
- rig_strvfo(rig->state.rx_vfo));
+ rig_strvfo(rs->rx_vfo));
*txvfo = RIG_VFO_A; // pick a default
- rig->state.rx_vfo = priv->tx_vfo = RIG_VFO_A;
+ rs->rx_vfo = priv->tx_vfo = RIG_VFO_A;
}
break;
case '1':
- if (rig->state.rx_vfo == RIG_VFO_A)
+ if (rs->rx_vfo == RIG_VFO_A)
{
HAMLIB_TRACE;
*txvfo = priv->tx_vfo = (*split && !transmitting) ? RIG_VFO_A : RIG_VFO_B;
}
- else if (rig->state.rx_vfo == RIG_VFO_B)
+ else if (rs->rx_vfo == RIG_VFO_B)
{
HAMLIB_TRACE;
*txvfo = priv->tx_vfo = (*split && !transmitting) ? RIG_VFO_B : RIG_VFO_A;
@@ -1776,9 +1777,9 @@ int kenwood_get_split_vfo_if(RIG *rig, vfo_t rxvfo, split_t *split,
else
{
rig_debug(RIG_DEBUG_WARN, "%s(%d): unknown rx_vfo=%s\n", __func__, __LINE__,
- rig_strvfo(rig->state.rx_vfo));
+ rig_strvfo(rs->rx_vfo));
*txvfo = RIG_VFO_A; // pick a default
- rig->state.rx_vfo = RIG_VFO_A;
+ rs->rx_vfo = RIG_VFO_A;
}
break;
@@ -1812,7 +1813,8 @@ int kenwood_get_vfo_if(RIG *rig, vfo_t *vfo)
{
int retval;
int split_and_transmitting;
- struct kenwood_priv_data *priv = rig->state.priv;
+ struct rig_state *rs = STATE(rig);
+ struct kenwood_priv_data *priv = rs->priv;
ENTERFUNC;
@@ -1838,10 +1840,10 @@ int kenwood_get_vfo_if(RIG *rig, vfo_t *vfo)
switch (priv->info[30])
{
case '0':
- *vfo = rig->state.rx_vfo = rig->state.tx_vfo = priv->tx_vfo =
+ *vfo = rs->rx_vfo = rs->tx_vfo = priv->tx_vfo =
split_and_transmitting ? RIG_VFO_B : RIG_VFO_A;
- if (priv->info[32] == '1') { priv->tx_vfo = rig->state.tx_vfo = RIG_VFO_B; }
+ if (priv->info[32] == '1') { priv->tx_vfo = rs->tx_vfo = RIG_VFO_B; }
break;
@@ -1876,13 +1878,13 @@ int kenwood_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
vfo_t tvfo;
freq_t tfreq = 0;
int err;
- struct kenwood_priv_data *priv = rig->state.priv;
+ struct kenwood_priv_data *priv = STATE(rig)->priv;
rig_debug(RIG_DEBUG_VERBOSE, "%s called vfo=%s freq=%.0f\n", __func__,
rig_strvfo(vfo), freq);
tvfo = (vfo == RIG_VFO_CURR
- || vfo == RIG_VFO_VFO) ? rig->state.current_vfo : vfo;
+ || vfo == RIG_VFO_VFO) ? STATE(rig)->current_vfo : vfo;
rig_debug(RIG_DEBUG_TRACE, "%s: tvfo=%s\n", __func__, rig_strvfo(tvfo));
@@ -1897,7 +1899,7 @@ int kenwood_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
// Malchite is so slow we don't do the get_freq
// And when we have detected Doppler operations we just set the freq all the time
// This should provide stable timing for set_ptt operation so relay delays are consistent
- if (!RIG_IS_MALACHITE && rig->state.doppler == 0)
+ if (!RIG_IS_MALACHITE && STATE(rig)->doppler == 0)
{
rig_get_freq(rig, tvfo, &tfreq);
@@ -1995,7 +1997,7 @@ int kenwood_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
int kenwood_get_freq_if(RIG *rig, vfo_t vfo, freq_t *freq)
{
- struct kenwood_priv_data *priv = rig->state.priv;
+ struct kenwood_priv_data *priv = STATE(rig)->priv;
char freqbuf[50];
int retval;
@@ -2030,7 +2032,7 @@ int kenwood_get_freq(RIG *rig, vfo_t vfo, freq_t *freq)
int retval;
unsigned char vfo_letter = '\0';
vfo_t tvfo;
- struct kenwood_priv_data *priv = rig->state.priv;
+ struct kenwood_priv_data *priv = STATE(rig)->priv;
ENTERFUNC;
@@ -2040,7 +2042,7 @@ int kenwood_get_freq(RIG *rig, vfo_t vfo, freq_t *freq)
}
tvfo = (vfo == RIG_VFO_CURR
- || vfo == RIG_VFO_VFO) ? rig->state.current_vfo : vfo;
+ || vfo == RIG_VFO_VFO) ? STATE(rig)->current_vfo : vfo;
if (RIG_VFO_CURR == tvfo)
{
@@ -2109,7 +2111,7 @@ int kenwood_get_rit(RIG *rig, vfo_t vfo, shortfreq_t *rit)
{
int retval;
char buf[7];
- struct kenwood_priv_data *priv = rig->state.priv;
+ struct kenwood_priv_data *priv = STATE(rig)->priv;
ENTERFUNC;
@@ -2145,7 +2147,7 @@ int kenwood_set_rit(RIG *rig, vfo_t vfo, shortfreq_t rit)
int rit_enabled;
int xit_enabled;
shortfreq_t curr_rit;
- struct kenwood_priv_data *priv = rig->state.priv;
+ struct kenwood_priv_data *priv = STATE(rig)->priv;
rig_debug(RIG_DEBUG_VERBOSE, "%s called: vfo=%s, rit=%ld\n",
__func__,
@@ -2354,13 +2356,13 @@ int kenwood_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
int err;
int datamode = 0;
int needdata;
- struct kenwood_priv_data *priv = rig->state.priv;
+ struct kenwood_priv_data *priv = STATE(rig)->priv;
struct kenwood_priv_caps *caps = kenwood_caps(rig);
rig_debug(RIG_DEBUG_VERBOSE,
"%s called, vfo=%s, mode=%s, width=%d, curr_vfo=%s\n", __func__,
rig_strvfo(vfo), rig_strrmode(mode), (int)width,
- rig_strvfo(rig->state.current_vfo));
+ rig_strvfo(STATE(rig)->current_vfo));
// we wont' set opposite VFO if the mode is the same as requested
// setting VFOB mode requires split modifications which cause VFO flashing
@@ -2515,7 +2517,7 @@ int kenwood_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
if (vfo == RIG_VFO_CURR)
{
HAMLIB_TRACE;
- vfo = rig->state.current_vfo;
+ vfo = STATE(rig)->current_vfo;
}
if ((vfo & (RIG_VFO_A | RIG_VFO_MAIN)) && ((priv->datamodeA == 0 && datamode)
@@ -2689,11 +2691,11 @@ int kenwood_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
int retval;
int kmode;
- struct kenwood_priv_data *priv = rig->state.priv;
+ struct kenwood_priv_data *priv = STATE(rig)->priv;
struct kenwood_priv_caps *caps = kenwood_caps(rig);
rig_debug(RIG_DEBUG_VERBOSE, "%s called, curr_vfo=%s\n", __func__,
- rig_strvfo(rig->state.current_vfo));
+ rig_strvfo(STATE(rig)->current_vfo));
if (!mode || !width)
{
@@ -2705,7 +2707,7 @@ int kenwood_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
/* only need to get it if it has to be initialized */
if (priv->curr_mode > 0 && priv->is_emulation && vfo == RIG_VFO_B)
{
- rig->state.current_vfo = RIG_VFO_A;
+ STATE(rig)->current_vfo = RIG_VFO_A;
RETURNFUNC2(RIG_OK);
}
@@ -2844,7 +2846,7 @@ int kenwood_get_mode_if(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
{
int err;
struct kenwood_priv_caps *caps = kenwood_caps(rig);
- struct kenwood_priv_data *priv = rig->state.priv;
+ struct kenwood_priv_data *priv = STATE(rig)->priv;
ENTERFUNC;
@@ -2956,7 +2958,7 @@ static int kenwood_get_power_minmax(RIG *rig, int *power_now, int *power_min,
// we batch these commands together for speed
char *cmd;
int n;
- struct rig_state *rs = &rig->state;
+ struct rig_state *rs = STATE(rig);
struct hamlib_port *rp = RIGPORT(rig);
ENTERFUNC;
@@ -3184,7 +3186,8 @@ int kenwood_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
{
char levelbuf[16];
int i, kenwood_val, len, result;
- struct kenwood_priv_data *priv = rig->state.priv;
+ struct rig_state *rs = STATE(rig);
+ struct kenwood_priv_data *priv = rs->priv;
struct kenwood_priv_caps *caps = kenwood_caps(rig);
gran_t *level_info;
@@ -3331,9 +3334,9 @@ int kenwood_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
{
int foundit = 0;
- for (i = 0; i < HAMLIB_MAXDBLSTSIZ && rig->state.attenuator[i]; i++)
+ for (i = 0; i < HAMLIB_MAXDBLSTSIZ && rs->attenuator[i]; i++)
{
- if (val.i == rig->state.attenuator[i])
+ if (val.i == rs->attenuator[i])
{
SNPRINTF(levelbuf, sizeof(levelbuf), "RA%0*d", len, i + 1);
foundit = 1;
@@ -3360,9 +3363,9 @@ int kenwood_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
{
int foundit = 0;
- for (i = 0; i < HAMLIB_MAXDBLSTSIZ && rig->state.preamp[i]; i++)
+ for (i = 0; i < HAMLIB_MAXDBLSTSIZ && rs->preamp[i]; i++)
{
- if (val.i == rig->state.preamp[i])
+ if (val.i == rs->preamp[i])
{
SNPRINTF(levelbuf, sizeof(levelbuf), "PA%01d", i + 1);
foundit = 1;
@@ -3565,7 +3568,8 @@ int kenwood_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
int retval;
int lvl;
int i, ret, agclevel, len, value;
- struct kenwood_priv_data *priv = rig->state.priv;
+ struct rig_state *rs = STATE(rig);
+ struct kenwood_priv_data *priv = rs->priv;
struct kenwood_priv_caps *caps = kenwood_caps(rig);
gran_t *level_info;
@@ -3728,7 +3732,7 @@ int kenwood_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
{
for (i = 0; i < lvl && i < HAMLIB_MAXDBLSTSIZ; i++)
{
- if (rig->state.attenuator[i] == 0)
+ if (rs->attenuator[i] == 0)
{
rig_debug(RIG_DEBUG_ERR, "%s: "
"unexpected att level %d\n",
@@ -3742,7 +3746,7 @@ int kenwood_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
RETURNFUNC(-RIG_EINTERNAL);
}
- val->i = rig->state.attenuator[i - 1];
+ val->i = rs->attenuator[i - 1];
}
break;
@@ -3765,7 +3769,7 @@ int kenwood_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
for (i = 0; i < lvl && i < HAMLIB_MAXDBLSTSIZ; i++)
{
- if (rig->state.preamp[i] == 0)
+ if (rs->preamp[i] == 0)
{
rig_debug(RIG_DEBUG_ERR, "%s: "
"unexpected preamp level %d\n",
@@ -3779,7 +3783,7 @@ int kenwood_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
RETURNFUNC(-RIG_EINTERNAL);
}
- val->i = rig->state.preamp[i - 1];
+ val->i = rs->preamp[i - 1];
}
else
{
@@ -4500,11 +4504,11 @@ int kenwood_set_ctcss_tone_tn(RIG *rig, vfo_t vfo, tone_t tone)
/*
* kenwood_get_ctcss_tone
- * Assumes rig->state.priv != NULL
+ * Assumes STATE(rig)->priv != NULL
*/
int kenwood_get_ctcss_tone(RIG *rig, vfo_t vfo, tone_t *tone)
{
- struct kenwood_priv_data *priv = rig->state.priv;
+ struct kenwood_priv_data *priv = STATE(rig)->priv;
struct rig_caps *caps;
char tonebuf[3];
int i, retval;
@@ -4891,7 +4895,7 @@ int kenwood_get_ant(RIG *rig, vfo_t vfo, ant_t dummy, value_t *option,
*/
int kenwood_get_ptt(RIG *rig, vfo_t vfo, ptt_t *ptt)
{
- struct kenwood_priv_data *priv = rig->state.priv;
+ struct kenwood_priv_data *priv = STATE(rig)->priv;
int retval;
ENTERFUNC;
@@ -5128,7 +5132,7 @@ int kenwood_set_powerstat(RIG *rig, powerstat_t status)
{
int retval;
struct hamlib_port *rp = RIGPORT(rig);
- struct kenwood_priv_data *priv = rig->state.priv;
+ struct kenwood_priv_data *priv = STATE(rig)->priv;
if ((priv->is_k3 || priv->is_k3s) && status == RIG_POWER_ON)
{
@@ -5195,7 +5199,7 @@ int kenwood_get_powerstat(RIG *rig, powerstat_t *status)
char pwrbuf[6];
int result;
struct hamlib_port *rp = RIGPORT(rig);
- struct kenwood_priv_data *priv = rig->state.priv;
+ struct kenwood_priv_data *priv = STATE(rig)->priv;
ENTERFUNC;
@@ -5433,7 +5437,7 @@ int kenwood_stop_morse(RIG *rig, vfo_t vfo)
int kenwood_send_voice_mem(RIG *rig, vfo_t vfo, int bank)
{
char cmd[16];
- struct kenwood_priv_data *priv = rig->state.priv;
+ struct kenwood_priv_data *priv = STATE(rig)->priv;
ENTERFUNC;
#if 0 // don't really need to turn on the list
@@ -5477,7 +5481,7 @@ int kenwood_send_voice_mem(RIG *rig, vfo_t vfo, int bank)
int kenwood_stop_voice_mem(RIG *rig, vfo_t vfo)
{
char cmd[16];
- struct kenwood_priv_data *priv = rig->state.priv;
+ struct kenwood_priv_data *priv = STATE(rig)->priv;
ENTERFUNC;
if (rig->caps->rig_model == RIG_MODEL_TS2000
@@ -5648,7 +5652,7 @@ int kenwood_get_mem_if(RIG *rig, vfo_t vfo, int *ch)
{
int err;
char buf[4];
- struct kenwood_priv_data *priv = rig->state.priv;
+ struct kenwood_priv_data *priv = STATE(rig)->priv;
ENTERFUNC;
@@ -5887,7 +5891,7 @@ int kenwood_set_channel(RIG *rig, vfo_t vfo, const channel_t *chan)
int kenwood_set_ext_parm(RIG *rig, hamlib_token_t token, value_t val)
{
- struct kenwood_priv_data *priv = rig->state.priv;
+ struct kenwood_priv_data *priv = STATE(rig)->priv;
char buf[4];
ENTERFUNC;
@@ -5920,7 +5924,7 @@ int kenwood_set_ext_parm(RIG *rig, hamlib_token_t token, value_t val)
int kenwood_get_ext_parm(RIG *rig, hamlib_token_t token, value_t *val)
{
int err;
- struct kenwood_priv_data *priv = rig->state.priv;
+ struct kenwood_priv_data *priv = STATE(rig)->priv;
ENTERFUNC;
diff --git a/rigs/kenwood/kenwood.h b/rigs/kenwood/kenwood.h
index eb6aee8e0..b512a3308 100644
--- a/rigs/kenwood/kenwood.h
+++ b/rigs/kenwood/kenwood.h
@@ -334,7 +334,7 @@ extern struct rig_caps trudx_caps;
static int inline kenwood_simple_transaction(RIG *rig, const char *cmd,
size_t expected)
{
- struct kenwood_priv_data *priv = rig->state.priv;
+ struct kenwood_priv_data *priv = STATE(rig)->priv;
return kenwood_safe_transaction(rig, cmd, priv->info, KENWOOD_MAX_BUF_LEN,
expected);
}
diff --git a/rigs/kenwood/ts450s.c b/rigs/kenwood/ts450s.c
index e5e393512..51aba0836 100644
--- a/rigs/kenwood/ts450s.c
+++ b/rigs/kenwood/ts450s.c
@@ -94,8 +94,8 @@ int ts450_open(RIG *rig)
if (err != RIG_OK)
{
rig_debug(RIG_DEBUG_VERBOSE, "%s: tone unit not detected\n", __func__);
- rig->state.has_set_func &= ~RIG_FUNC_TONE;
- rig->state.has_get_func &= ~RIG_FUNC_TONE;
+ STATE(rig)->has_set_func &= ~RIG_FUNC_TONE;
+ STATE(rig)->has_get_func &= ~RIG_FUNC_TONE;
}
RIGPORT(rig)->retry = maxtries;
diff --git a/rigs/kenwood/ts480.c b/rigs/kenwood/ts480.c
index f9034ad7b..eb194d1ac 100644
--- a/rigs/kenwood/ts480.c
+++ b/rigs/kenwood/ts480.c
@@ -823,7 +823,7 @@ static int ts480_get_rit(RIG *rig, vfo_t vfo, shortfreq_t *rit)
{
int retval;
char buf[7];
- struct kenwood_priv_data *priv = rig->state.priv;
+ struct kenwood_priv_data *priv = STATE(rig)->priv;
ENTERFUNC;
@@ -1207,7 +1207,7 @@ int ts480_init(RIG *rig)
return retval;
}
- priv = (struct kenwood_priv_data *) rig->state.priv;
+ priv = (struct kenwood_priv_data *) STATE(rig)->priv;
priv->ag_format = 2;
priv->micgain_min = 0;
@@ -2167,7 +2167,7 @@ int malachite_init(RIG *rig)
retval = kenwood_init(rig);
- priv = rig->state.priv;
+ priv = STATE(rig)->priv;
priv->no_id = 1; // the Malchite doesn't like the ID; verify cmd
@@ -2178,20 +2178,20 @@ int malachite_init(RIG *rig)
int malachite_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
{
- int post_write_delay_save = rig->state.post_write_delay;
- rig->state.post_write_delay = 0;
+ int post_write_delay_save = STATE(rig)->post_write_delay;
+ STATE(rig)->post_write_delay = 0;
int retval = kenwood_get_mode(rig, vfo, mode, width);
- rig->state.post_write_delay = post_write_delay_save;
+ STATE(rig)->post_write_delay = post_write_delay_save;
return retval;
}
int malachite_get_freq(RIG *rig, vfo_t vfo, freq_t *freq)
{
- int post_write_delay_save = rig->state.post_write_delay;
+ int post_write_delay_save = STATE(rig)->post_write_delay;
ENTERFUNC;
- rig->state.post_write_delay = 0;
+ STATE(rig)->post_write_delay = 0;
int retval = kenwood_get_freq(rig, vfo, freq);
- rig->state.post_write_delay = post_write_delay_save;
+ STATE(rig)->post_write_delay = post_write_delay_save;
RETURNFUNC(retval);
}
@@ -2212,13 +2212,13 @@ int malachite_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
// Malachite has a bug where it takes two freq set to make it work
// under band changes -- so we just do this all the time
retval = kenwood_set_freq(rig, vfo, freq + 1);
- rig->state.post_write_delay = 250; // need a bit more time on band change
+ STATE(rig)->post_write_delay = 250; // need a bit more time on band change
if (retval != RIG_OK) { RETURNFUNC(retval); }
}
else
{
- rig->state.post_write_delay = 125;
+ STATE(rig)->post_write_delay = 125;
}
retval = kenwood_set_freq(rig, vfo, freq);
diff --git a/rigs/kenwood/ts570.c b/rigs/kenwood/ts570.c
index dc676250d..fd1f57519 100644
--- a/rigs/kenwood/ts570.c
+++ b/rigs/kenwood/ts570.c
@@ -351,7 +351,7 @@ ts570_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
int i;
for (i = 0; i < HAMLIB_MAXDBLSTSIZ; i++)
- if (kenwood_val == rig->state.preamp[i])
+ if (kenwood_val == STATE(rig)->preamp[i])
{
SNPRINTF(levelbuf, sizeof(levelbuf), "PA%01d", i + 1);
break; /* found - stop searching */
@@ -475,7 +475,7 @@ ts570_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
for (i = 0; i < levelint && i < HAMLIB_MAXDBLSTSIZ; i++)
{
- if (rig->state.preamp[i] == 0)
+ if (STATE(rig)->preamp[i] == 0)
{
rig_debug(RIG_DEBUG_ERR, "%s: unexpected att level %d\n", __func__,
(int)levelint);
@@ -488,7 +488,7 @@ ts570_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
return -RIG_EINTERNAL;
}
- val->i = rig->state.preamp[i - 1];
+ val->i = STATE(rig)->preamp[i - 1];
}
break;
diff --git a/rigs/kenwood/ts590.c b/rigs/kenwood/ts590.c
index 84903494c..f38b46418 100644
--- a/rigs/kenwood/ts590.c
+++ b/rigs/kenwood/ts590.c
@@ -326,7 +326,7 @@ static int ts590_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
char cmd[32], ackbuf[32];
int retval;
- if (vfo == RIG_VFO_CURR) { vfo = rig->state.current_vfo; }
+ if (vfo == RIG_VFO_CURR) { vfo = STATE(rig)->current_vfo; }
if (vfo == RIG_VFO_TX || vfo == RIG_VFO_RX) { vfo = vfo_fixup(rig, vfo, CACHE(rig)->split); }
@@ -541,7 +541,7 @@ static int ts590_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status)
static int ts590_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
{
- struct kenwood_priv_data *priv = rig->state.priv;
+ struct kenwood_priv_data *priv = STATE(rig)->priv;
char levelbuf[16];
int kenwood_val;
int result;
@@ -731,7 +731,7 @@ static int ts590_read_meters(RIG *rig, int *swr, int *comp, int *alc)
static int ts590_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
{
- struct kenwood_priv_data *priv = rig->state.priv;
+ struct kenwood_priv_data *priv = STATE(rig)->priv;
char ackbuf[50];
size_t ack_len, ack_len_expected;
int levelint = 0;
@@ -1148,7 +1148,7 @@ static int ts590_get_rit(RIG *rig, vfo_t vfo, shortfreq_t *rit)
{
int retval;
char buf[7];
- struct kenwood_priv_data *priv = rig->state.priv;
+ struct kenwood_priv_data *priv = STATE(rig)->priv;
ENTERFUNC;
diff --git a/rigs/kenwood/tx500.c b/rigs/kenwood/tx500.c
index f8b8184f0..43d422b32 100644
--- a/rigs/kenwood/tx500.c
+++ b/rigs/kenwood/tx500.c
@@ -854,7 +854,7 @@ int ts2000_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
if (lvl > 9)
{
- val->i = rig->state.preamp[0];
+ val->i = STATE(rig)->preamp[0];
}
break;
@@ -885,7 +885,7 @@ int ts2000_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
if (lvl > 99)
{
- val->i = rig->state.attenuator[0]; /* Since the TS-2000 only has one step on the attenuator */
+ val->i = STATE(rig)->attenuator[0]; /* Since the TS-2000 only has one step on the attenuator */
}
break;
diff --git a/rigs/kenwood/xg3.c b/rigs/kenwood/xg3.c
index e8c8526fc..271bebca2 100644
--- a/rigs/kenwood/xg3.c
+++ b/rigs/kenwood/xg3.c
@@ -197,12 +197,12 @@ int xg3_init(RIG *rig)
return -RIG_ENOMEM;
}
- rig->state.priv = (void *)priv;
+ STATE(rig)->priv = (void *)priv;
RIGPORT(rig)->type.rig = RIG_PORT_SERIAL;
// Tried set_trn to turn transceiver on/off but turning it on isn't enabled in hamlib for some reason
// So we use PTT instead
-// rig->state.transceive = RIG_TRN_RIG; // this allows xg3_set_trn to be called
- rig->state.current_vfo = RIG_VFO_A;
+// STATE(rig)->transceive = RIG_TRN_RIG; // this allows xg3_set_trn to be called
+ STATE(rig)->current_vfo = RIG_VFO_A;
// priv->last_vfo = RIG_VFO_A;
// priv->ptt = RIG_PTT_ON;
// priv->powerstat = RIG_POWER_ON;
@@ -352,7 +352,7 @@ int xg3_get_vfo(RIG *rig, vfo_t *vfo)
return -RIG_EINVAL;
}
- *vfo = rig->state.current_vfo; // VFOA or MEM
+ *vfo = STATE(rig)->current_vfo; // VFOA or MEM
return RIG_OK;
}
@@ -372,7 +372,7 @@ int xg3_set_vfo(RIG *rig, vfo_t vfo)
// We don't actually set the vfo on the XG3
// But we need this so we can set frequencies on the band buttons
- rig->state.current_vfo = vfo;
+ STATE(rig)->current_vfo = vfo;
return RIG_OK;
}
@@ -388,7 +388,7 @@ int xg3_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
tvfo = (vfo == RIG_VFO_CURR ||
- vfo == RIG_VFO_VFO) ? rig->state.current_vfo : vfo;
+ vfo == RIG_VFO_VFO) ? STATE(rig)->current_vfo : vfo;
switch (tvfo)
{
@@ -440,7 +440,7 @@ int xg3_get_freq(RIG *rig, vfo_t vfo, freq_t *freq)
}
tvfo = (vfo == RIG_VFO_CURR ||
- vfo == RIG_VFO_VFO) ? rig->state.current_vfo : vfo;
+ vfo == RIG_VFO_VFO) ? STATE(rig)->current_vfo : vfo;
rp = RIGPORT(rig);
switch (tvfo)
commit 4b436479d1667f1ee3f9f50db07a2a3fc9bdb7e4
Author: George Baltz N3GB <Geo...@gm...>
Date: Sat Mar 16 11:25:46 2024 -0400
More pointers to state
diff --git a/rigs/kenwood/elecraft.c b/rigs/kenwood/elecraft.c
index 05b32835f..dc2e8c6cb 100644
--- a/rigs/kenwood/elecraft.c
+++ b/rigs/kenwood/elecraft.c
@@ -96,10 +96,10 @@ int elecraft_open(RIG *rig)
{
int err;
char buf[KENWOOD_MAX_BUF_LEN];
- struct kenwood_priv_data *priv = rig->state.priv;
char *model = "Unknown";
- struct rig_state *rs = &rig->state;
+ struct rig_state *rs = STATE(rig);
struct hamlib_port *rp = RIGPORT(rig);
+ struct kenwood_priv_data *priv = rs->priv;
rig_debug(RIG_DEBUG_VERBOSE, "%s called, rig version=%s\n", __func__,
rig->caps->version);
@@ -395,7 +395,7 @@ int elecraft_open(RIG *rig)
int elecraft_close(RIG *rig)
{
- const struct kenwood_priv_data *priv = rig->state.priv;
+ const struct kenwood_priv_data *priv = STATE(rig)->priv;
if (priv->save_k2_ext_lvl >= 0)
{
@@ -622,12 +622,12 @@ int elecraft_get_vfo_tq(RIG *rig, vfo_t *vfo)
rig_debug(RIG_DEBUG_ERR, "%s: unable to parse TQ '%s'\n", __func__, splitbuf);
}
- *vfo = rig->state.tx_vfo = RIG_VFO_A;
+ *vfo = STATE(rig)->tx_vfo = RIG_VFO_A;
- if (tq && ft == 1) { *vfo = rig->state.tx_vfo = RIG_VFO_B; }
- else if (tq && ft =...
[truncated message content] |
|
From: n0nb <n0...@us...> - 2024-03-25 22:26:59
|
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 dc375c6d005c1c143a7088e5792d10d6638e29f0 (commit)
via 624e00dcb4d95c7cbb2b6d5f7c4fa2f237106573 (commit)
via 31ea63b2f3f2ba476f65e43b35a4d841179ce1bd (commit)
via c3429084fb2ff9d4d5e8efcc06411063566234c7 (commit)
via 12ae80c0c5a9b02fd2bae405ae836eef6421e26a (commit)
via 7a7b52b89c015d812748ba7ddebe83704d4fed7a (commit)
via 1881b2e20618889150dfd47a22b1a4f99afd1886 (commit)
via 1b3481ba9517662d4e9859c93a0b5f8108a5e755 (commit)
via f51e7ef760300c3711b4e640b8c4a0e071656b55 (commit)
via 2feb4cc65cd3cde925f3f872d09c912cd339b3eb (commit)
via 538d41b9e8c7dfe9a80e4410b2eab7af9cf956d7 (commit)
via 9331f9e5f40844ed3e9249e37d20916baa28e570 (commit)
via 68bcae6ee86ed0b495575fd2da8f70953c311be7 (commit)
from 1de9a5cede92b4847a32966c6b087ca91b74d113 (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 dc375c6d005c1c143a7088e5792d10d6638e29f0
Author: Mike Black W9MDB <mdb...@ya...>
Date: Mon Mar 25 14:46:26 2024 -0500
Fix rig_get_split_vfo -- was almost always using cache
diff --git a/src/rig.c b/src/rig.c
index 3db6567e7..e19f0cfee 100644
--- a/src/rig.c
+++ b/src/rig.c
@@ -5825,7 +5825,7 @@ int HAMLIB_API rig_get_split_vfo(RIG *rig,
struct rig_cache *cachep = CACHE(rig);
int retcode;
int cache_ms;
- int use_cache;
+ int use_cache = 0;
if (CHECK_RIG_ARG(rig))
{
@@ -5854,6 +5854,7 @@ int HAMLIB_API rig_get_split_vfo(RIG *rig,
if (caps->get_split_vfo == NULL || use_cache)
{
+ rig_debug(RIG_DEBUG_TRACE, "%s: ?get_split_vfo=%d use_cache=%d\n", __func__, caps->get_split_vfo != NULL, use_cache);
// if we can't get the vfo we will return whatever we have cached
*split = cachep->split;
*tx_vfo = cachep->split_vfo;
commit 624e00dcb4d95c7cbb2b6d5f7c4fa2f237106573
Author: Mike Black W9MDB <mdb...@ya...>
Date: Mon Mar 25 11:29:18 2024 -0500
Fix FLRig reading of bandwith when FIXED or "k" is read back
diff --git a/rigs/dummy/flrig.c b/rigs/dummy/flrig.c
index f61c96cd5..5afa4c6e0 100644
--- a/rigs/dummy/flrig.c
+++ b/rigs/dummy/flrig.c
@@ -1811,9 +1811,11 @@ static int flrig_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
*width = atoi(p);
- if (strstr(p, "k")) { *width *= 10000; }
+ if (strstr(p, "k")) { *width = *width * 1000; }
- if (strcmp(p, "FIXED"))
+ rig_debug(RIG_DEBUG_ERR, "%s: p=%s, *width=%d\n", __func__, p, (int)(*width));
+
+ if (strcmp(p, "FIXED") == 0)
{
switch (*mode)
{
commit 31ea63b2f3f2ba476f65e43b35a4d841179ce1bd
Author: Mike Black W9MDB <mdb...@ya...>
Date: Mon Mar 25 10:23:40 2024 -0500
Fix IC7300 bandwidth reading for AM/BM ....still need to fix setting bandwidth for AM/FM
diff --git a/rigs/icom/ic7300.c b/rigs/icom/ic7300.c
index 98d010e60..58a45a25d 100644
--- a/rigs/icom/ic7300.c
+++ b/rigs/icom/ic7300.c
@@ -50,11 +50,11 @@ int ic9700_get_clock(RIG *rig, int *year, int *month, int *day,
int ic9700_set_vfo(RIG *rig, vfo_t vfo);
-#define IC7300_ALL_RX_MODES (RIG_MODE_FM|RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_PKTLSB|RIG_MODE_PKTUSB|RIG_MODE_PKTFM|RIG_MODE_PKTAM)
+#define IC7300_ALL_RX_MODES (RIG_MODE_FM|RIG_MODE_PKTFM|RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_PKTLSB|RIG_MODE_PKTUSB|RIG_MODE_PKTFM|RIG_MODE_PKTAM)
#define IC7300_1HZ_TS_MODES (RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_PKTLSB|RIG_MODE_PKTUSB|RIG_MODE_PKTFM|RIG_MODE_PKTAM)
#define IC7300_NOT_TS_MODES (IC7300_ALL_RX_MODES &~IC7300_1HZ_TS_MODES)
-#define IC7300_OTHER_TX_MODES (RIG_MODE_FM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR)
+#define IC7300_OTHER_TX_MODES (RIG_MODE_FM|RIG_MODE_PKTFM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR)
#define IC7300_AM_TX_MODES (RIG_MODE_AM|RIG_MODE_PKTAM)
#define IC7300_FUNCS (RIG_FUNC_NB|RIG_FUNC_COMP|RIG_FUNC_VOX|RIG_FUNC_TONE|RIG_FUNC_TSQL|RIG_FUNC_SBKIN|RIG_FUNC_FBKIN|RIG_FUNC_NR|RIG_FUNC_MON|RIG_FUNC_MN|RIG_FUNC_ANF|RIG_FUNC_LOCK|RIG_FUNC_RIT|RIG_FUNC_XIT|RIG_FUNC_SCOPE|RIG_FUNC_TUNER|RIG_FUNC_TRANSCEIVE|RIG_FUNC_SPECTRUM|RIG_FUNC_SPECTRUM_HOLD|RIG_FUNC_SEND_MORSE|RIG_FUNC_SEND_VOICE_MEM|RIG_FUNC_OVF_STATUS)
diff --git a/rigs/icom/icom.c b/rigs/icom/icom.c
index e6e1bb6a4..a59d456cd 100644
--- a/rigs/icom/icom.c
+++ b/rigs/icom/icom.c
@@ -440,6 +440,7 @@ struct icom_addr
#define TOK_FILTER_USBD TOKEN_BACKEND(5)
#define TOK_FILTER_USB TOKEN_BACKEND(6)
#define TOK_FILTER_CW TOKEN_BACKEND(7)
+#define TOK_FILTER_FM TOKEN_BACKEND(8)
const struct confparams icom_cfg_params[] =
{
@@ -474,6 +475,10 @@ const struct confparams icom_cfg_params[] =
TOK_FILTER_CW, "filter_cw", "Filter to use CW", "Filter to use for CW/CWR when setting mode",
"0", RIG_CONF_NUMERIC, {.n = {0, 3, 1}}
},
+ {
+ TOK_FILTER_FM, "filter_fm", "Filter to use FM", "Filter to use for FM/PKTFM when setting mode",
+ "0", RIG_CONF_NUMERIC, {.n = {0, 3, 1}}
+ },
{RIG_CONF_END, NULL,}
};
@@ -1977,9 +1982,9 @@ pbwidth_t icom_get_dsp_flt(RIG *rig, rmode_t mode)
}
// TODO: Skip for Xiegu G90 too????
- if (mode == RIG_MODE_FM || mode == RIG_MODE_FMN
- || RIG_MODEL_X108G == rig->caps->rig_model
- || RIG_MODEL_X5105 == rig->caps->rig_model)
+ if (RIG_MODEL_X108G == rig->caps->rig_model
+ || RIG_MODEL_X5105 == rig->caps->rig_model
+ || RIG_MODEL_G90 == rig->caps->rig_model)
{
priv->no_1a_03_cmd = ENUM_1A_03_NO;
}
@@ -1992,7 +1997,7 @@ pbwidth_t icom_get_dsp_flt(RIG *rig, rmode_t mode)
retval = icom_transaction(rig, C_CTL_MEM, fw_sub_cmd, 0, 0,
resbuf, &res_len);
- if (-RIG_ERJCTED == retval)
+ if (-RIG_ERJCTED == retval && !RIG_IS_IC7300)
{
if (priv->no_1a_03_cmd == ENUM_1A_03_UNK)
{
@@ -2108,6 +2113,13 @@ int icom_set_dsp_flt(RIG *rig, rmode_t mode, pbwidth_t width)
flt_idx =
width <= 500 ? ((width + 49) / 50) - 1 : ((width + 99) / 100) + 4;
}
+ else if (mode & (RIG_MODE_FM | RIG_MODE_PKTFM))
+ {
+ if (width <= 7000) width = 7000;
+ else if (width <= 10000) width = 10000;
+ else width=15000;
+ RETURNFUNC(RIG_OK);
+ }
else
{
rig_debug(RIG_DEBUG_VERBOSE, "%s: unknown mode=%s\n", __func__,
@@ -2311,17 +2323,22 @@ static int icom_set_mode_x26(RIG *rig, vfo_t vfo, rmode_t mode,
buf[2] = priv->filter_usbd;
}
- if (priv->filter_usb > 0 && (mode == RIG_MODE_USB || mode == RIG_MODE_LSB))
+ else if (priv->filter_usb > 0 && (mode == RIG_MODE_USB || mode == RIG_MODE_LSB))
{
rig_debug(RIG_DEBUG_TRACE, "%s: filter usb=%d\n", __func__, priv->filter_usb);
buf[2] = priv->filter_usb;
}
- if (priv->filter_cw > 0 && (mode == RIG_MODE_CW || mode == RIG_MODE_CWR))
+ else if (priv->filter_cw > 0 && (mode == RIG_MODE_CW || mode == RIG_MODE_CWR))
{
rig_debug(RIG_DEBUG_TRACE, "%s: filter cw=%d\n", __func__, priv->filter_cw);
buf[2] = priv->filter_cw;
}
+ else if (priv->filter_fm > 0 && (mode == RIG_MODE_FM || mode == RIG_MODE_PKTFM))
+ {
+ rig_debug(RIG_DEBUG_TRACE, "%s: filter fm=%d\n", __func__, priv->filter_fm);
+ buf[2] = priv->filter_fm;
+ }
int vfo_number = icom_get_vfo_number_x25x26(rig, vfo);
@@ -2532,7 +2549,7 @@ int icom_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
}
if (((width != RIG_PASSBAND_NOCHANGE) && (width != current_width))
- || (priv->filter_usbd > 0 || priv->filter_usb > 0 || priv->filter_cw > 0))
+ || (priv->filter_usbd > 0 || priv->filter_usb > 0 || priv->filter_cw > 0 || priv->filter_fm > 0))
{
icom_set_dsp_flt(rig, mode, width);
}
@@ -2609,7 +2626,7 @@ static int icom_get_mode_without_data(RIG *rig, vfo_t vfo, rmode_t *mode,
{
priv_data->filter = 0;
- if (mode_len == 2) { priv_data->filter = modebuf[2]; }
+ if (mode_len == 1) { priv_data->filter = modebuf[2]; }
rig_debug(RIG_DEBUG_TRACE,
"%s(%d): modebuf[0]=0x%02x, modebuf[1]=0x%02x, mode_len=%d\n", __func__,
@@ -2683,7 +2700,16 @@ static int icom_get_mode_without_data(RIG *rig, vfo_t vfo, rmode_t *mode,
*width = filter_width;
- if (*mode == RIG_MODE_FM) { *width = 12000; }
+ if (*mode == RIG_MODE_FM)
+ {
+ *width = 12000; // some default to 12000
+ if (RIG_IS_IC7300)
+ {
+ if (priv_data->filter == 1) *width = 15000;
+ else if (priv_data->filter == 2) *width = 10000;
+ else if (priv_data->filter == 3) *width = 7000;
+ }
+ }
RETURNFUNC2(RIG_OK);
}
@@ -5089,6 +5115,15 @@ int icom_set_conf(RIG *rig, hamlib_token_t token, const char *val)
break;
+ case TOK_FILTER_FM:
+ priv->filter_fm = atoi(val);
+
+ if (priv->filter_fm > 3) { priv->filter_fm = 3; }
+
+ if (priv->filter_fm < 1) { priv->filter_fm = 1; }
+
+ break;
+
default:
RETURNFUNC(-RIG_EINVAL);
}
diff --git a/rigs/icom/icom.h b/rigs/icom/icom.h
index 0f4c80d8e..3c5d5e81a 100644
--- a/rigs/icom/icom.h
+++ b/rigs/icom/icom.h
@@ -296,6 +296,7 @@ struct icom_priv_data
int filter_usbd; /*!< Filter number to use for USBD/LSBD when setting mode */
int filter_usb; /*!< Filter number to use for USB/LSB when setting mode */
int filter_cw; /*!< Filter number to use for CW/CWR when setting mode */
+ int filter_fm; /*!< Filter number to use for CW/CWR when setting mode */
};
extern const struct ts_sc_list r8500_ts_sc_list[];
commit c3429084fb2ff9d4d5e8efcc06411063566234c7
Author: Mike Black W9MDB <mdb...@ya...>
Date: Mon Mar 25 10:22:48 2024 -0500
Allow FLRig to use "k" values for bandwidth
diff --git a/rigs/dummy/flrig.c b/rigs/dummy/flrig.c
index be53202b5..f61c96cd5 100644
--- a/rigs/dummy/flrig.c
+++ b/rigs/dummy/flrig.c
@@ -143,7 +143,7 @@ struct rig_caps flrig_caps =
RIG_MODEL(RIG_MODEL_FLRIG),
.model_name = "",
.mfg_name = "FLRig",
- .version = "20240302.0",
+ .version = "20240325.0",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
@@ -1808,15 +1808,19 @@ static int flrig_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
/* we might get two values and then we want the 2nd one */
if (strchr(value, '|') != NULL) { p = strchr(value, '|') + 1; }
+
*width = atoi(p);
+
+ if (strstr(p, "k")) { *width *= 10000; }
+
if (strcmp(p, "FIXED"))
{
- switch(*mode)
+ switch (*mode)
{
- case RIG_MODE_PKTAM:
- case RIG_MODE_AM:
- case RIG_MODE_PKTFM:
- case RIG_MODE_FM: *width = 10000;break;
+ case RIG_MODE_PKTAM:
+ case RIG_MODE_AM:
+ case RIG_MODE_PKTFM:
+ case RIG_MODE_FM: *width = 10000; break;
}
}
}
commit 12ae80c0c5a9b02fd2bae405ae836eef6421e26a
Merge: 1881b2e20 7a7b52b89
Author: Michael Black <mdb...@ya...>
Date: Sun Mar 24 22:36:03 2024 -0500
Merge pull request #1529 from DJ3CE/k3kx3_swr
Add SWR get_level to K3 (KX3, KX2)
commit 7a7b52b89c015d812748ba7ddebe83704d4fed7a
Author: Cedric DJ3CE <dj...@da...>
Date: Fri Jan 12 01:45:28 2024 +0100
Add SWR get_level to K3 (KX3, KX2)
Capabilities, level_gran and k3_get_level
diff --git a/rigs/kenwood/k3.c b/rigs/kenwood/k3.c
index 19fff8297..eb70d37c0 100644
--- a/rigs/kenwood/k3.c
+++ b/rigs/kenwood/k3.c
@@ -63,7 +63,8 @@
#define KX3_LEVEL_ALL (RIG_LEVEL_ATT|RIG_LEVEL_PREAMP|RIG_LEVEL_AGC|RIG_LEVEL_SQL|\
RIG_LEVEL_STRENGTH|RIG_LEVEL_RFPOWER|RIG_LEVEL_KEYSPD|\
RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_MICGAIN|RIG_LEVEL_COMP|\
- RIG_LEVEL_NR|RIG_LEVEL_MONITOR_GAIN|RIG_LEVEL_RAWSTR|RIG_LEVEL_RFPOWER_METER|RIG_LEVEL_RFPOWER_METER_WATTS)
+ RIG_LEVEL_NR|RIG_LEVEL_MONITOR_GAIN|RIG_LEVEL_RAWSTR|RIG_LEVEL_RFPOWER_METER|\
+ RIG_LEVEL_RFPOWER_METER_WATTS|RIG_LEVEL_SWR)
/*
* Elecraft K3/K3S extra level definitions
@@ -2313,6 +2314,18 @@ int k3_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
break;
+ case RIG_LEVEL_SWR:
+ retval = kenwood_safe_transaction(rig, "SW", levelbuf, sizeof(levelbuf), 5);
+
+ if (retval != RIG_OK)
+ {
+ return retval;
+ }
+
+ sscanf(levelbuf + 2, "%d", &val->i);
+ val->f = (float) val->i / 10.0f;
+ break;
+
default:
return kenwood_get_level(rig, vfo, level, val);
}
diff --git a/rigs/kenwood/level_gran_elecraft.h b/rigs/kenwood/level_gran_elecraft.h
index ad36095ca..4e3a24498 100644
--- a/rigs/kenwood/level_gran_elecraft.h
+++ b/rigs/kenwood/level_gran_elecraft.h
@@ -27,4 +27,5 @@
[LVL_COMP] = { .min = { .f = .0 }, .max = { .f = 1 }, .step = { .f = 1.0f/100.0f } },
[LVL_VOXGAIN] = { .min = { .f = .0 }, .max = { .f = 1 }, .step = { .f = 1.0f/100.0f } },
[LVL_ALC] = { .min = { .f = .0 }, .max = { .f = 1 }, .step = { .f = 1.0f/100.0f } },
+ [LVL_SWR] = { .min = { .f = 1.0 }, .max = { .f = 99.9 }, .step = { .f = 1.0f/10.0f } },
commit 1881b2e20618889150dfd47a22b1a4f99afd1886
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sat Mar 23 11:52:26 2024 -0500
Fix FT1000MP rig_set_freq to set cache
diff --git a/rigs/yaesu/ft1000mp.c b/rigs/yaesu/ft1000mp.c
index 02897bb14..2a7f48f6a 100644
--- a/rigs/yaesu/ft1000mp.c
+++ b/rigs/yaesu/ft1000mp.c
@@ -313,7 +313,7 @@ struct rig_caps ft1000mp_caps =
RIG_MODEL(RIG_MODEL_FT1000MP),
.model_name = "FT-1000MP",
.mfg_name = "Yaesu",
- .version = "20240323.0",
+ .version = "20240323.1",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
@@ -849,14 +849,19 @@ static int ft1000mp_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
vfo = rig->state.current_vfo;
}
+ // round freq to 10Hz intervals due to rig restriction
+ freq = round(freq / 10.0) * 10.0;
+
switch (vfo)
{
case RIG_VFO_A:
cmd_index = FT1000MP_NATIVE_FREQA_SET;
+ CACHE(rig)->freqMainA = freq;
break;
case RIG_VFO_B:
cmd_index = FT1000MP_NATIVE_FREQB_SET;
+ CACHE(rig)->freqMainB = freq;
break;
case RIG_VFO_MEM:
@@ -874,9 +879,6 @@ static int ft1000mp_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
*/
memcpy(&p->p_cmd, &ncmd[cmd_index].nseq, YAESU_CMD_LENGTH);
- // round freq to 10Hz intervals due to rig restriction
- freq = round(freq / 10.0) * 10.0;
-
to_bcd(p->p_cmd, freq / 10, 8); /* store bcd format in in p_cmd */
rig_debug(RIG_DEBUG_TRACE, "%s: freq = %"PRIfreq" Hz\n", __func__,
@@ -885,6 +887,7 @@ static int ft1000mp_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
cmd = p->p_cmd; /* get native sequence */
write_block(RIGPORT(rig), cmd, YAESU_CMD_LENGTH);
+
RETURNFUNC(RIG_OK);
}
commit 1b3481ba9517662d4e9859c93a0b5f8108a5e755
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sat Mar 23 09:57:15 2024 -0500
Fix FT-1000MP get_freq
diff --git a/NEWS b/NEWS
index 1cd13356e..47caff7a4 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 SDR Radio SDRConsole -- TS-2000 is now hardware flow control so need separate entry
* Added --set-conf=filter_usb, filter_usbd, and filter_cw to allow Icom rigs set mode to set filter number too
* Added macros for applications to obtain pointers to Hamlib structures(issues #1445, #1420, #487).
Internal conversion is still a WIP, but use of these macros will make the final cutover transparent to applications.
diff --git a/rigs/yaesu/ft1000mp.c b/rigs/yaesu/ft1000mp.c
index 084a9c7c4..02897bb14 100644
--- a/rigs/yaesu/ft1000mp.c
+++ b/rigs/yaesu/ft1000mp.c
@@ -313,7 +313,7 @@ struct rig_caps ft1000mp_caps =
RIG_MODEL(RIG_MODEL_FT1000MP),
.model_name = "FT-1000MP",
.mfg_name = "Yaesu",
- .version = "20240229.0",
+ .version = "20240323.0",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
@@ -939,8 +939,6 @@ static int ft1000mp_get_freq(RIG *rig, vfo_t vfo, freq_t *freq)
*freq = CACHE(rig)->freqMainB;
}
- return RIG_OK;
-
RETURNFUNC(RIG_OK);
}
commit f51e7ef760300c3711b4e640b8c4a0e071656b55
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sat Mar 23 08:46:56 2024 -0500
Add SDRConsole rig entry since TS-2000 is now hardware flow control by default
diff --git a/include/hamlib/riglist.h b/include/hamlib/riglist.h
index 85fdc4fe2..4f09e4991 100644
--- a/include/hamlib/riglist.h
+++ b/include/hamlib/riglist.h
@@ -204,6 +204,7 @@
#define RIG_MODEL_FX4 RIG_MAKE_MODEL(RIG_KENWOOD,53)
#define RIG_MODEL_THETIS RIG_MAKE_MODEL(RIG_KENWOOD, 54)
#define RIG_MODEL_TRUSDX RIG_MAKE_MODEL(RIG_KENWOOD, 55)
+#define RIG_MODEL_SDRCONSOLE RIG_MAKE_MODEL(RIG_KENWOOD, 56)
/*
* Icom
diff --git a/rigs/kenwood/kenwood.c b/rigs/kenwood/kenwood.c
index 4ff44d1cb..19b54fabe 100644
--- a/rigs/kenwood/kenwood.c
+++ b/rigs/kenwood/kenwood.c
@@ -6190,6 +6190,7 @@ DECLARE_INITRIG_BACKEND(kenwood)
rig_register(&kx3_caps);
rig_register(&k4_caps);
rig_register(&xg3_caps);
+ rig_register(&sdrconsole_caps);
rig_register(&ts440_caps);
rig_register(&ts940_caps);
diff --git a/rigs/kenwood/kenwood.h b/rigs/kenwood/kenwood.h
index 7e97593ae..eb6aee8e0 100644
--- a/rigs/kenwood/kenwood.h
+++ b/rigs/kenwood/kenwood.h
@@ -291,6 +291,7 @@ extern struct rig_caps kx3_caps;
extern struct rig_caps k4_caps;
extern struct rig_caps xg3_caps;
extern struct rig_caps trc80_caps;
+extern struct rig_caps sdrconsole_caps;
extern struct rig_caps thd7a_caps;
extern struct rig_caps thd72a_caps;
diff --git a/rigs/kenwood/ts2000.c b/rigs/kenwood/ts2000.c
index a1e2bf999..5e127407e 100644
--- a/rigs/kenwood/ts2000.c
+++ b/rigs/kenwood/ts2000.c
@@ -1915,3 +1915,249 @@ struct rig_caps ts2000_caps =
.hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS
};
+/*
+ * SDRConsole TS-2000 rig capabilities
+ * SDRConsole does not use hardware flow control for example
+ */
+struct rig_caps sdrconsole_caps =
+{
+ RIG_MODEL(RIG_MODEL_SDRCONSOLE),
+ .model_name = "SDRConsole",
+ .mfg_name = "SDR Radio",
+ .version = BACKEND_VER ".2",
+ .copyright = "LGPL",
+ .status = RIG_STATUS_STABLE,
+ .rig_type = RIG_TYPE_TRANSCEIVER,
+ .ptt_type = RIG_PTT_RIG,
+ .dcd_type = RIG_DCD_RIG,
+ .port_type = RIG_PORT_SERIAL,
+ .serial_rate_min = 1200,
+ .serial_rate_max = 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, /* ms */
+ .timeout = 200,
+ .retry = 3,
+
+ .has_get_func = TS2000_FUNC_ALL,
+ .has_set_func = TS2000_FUNC_ALL,
+ .has_get_level = TS2000_LEVEL_GET,
+ .has_set_level = TS2000_LEVEL_SET,
+ .has_get_parm = RIG_PARM_NONE,
+ .has_set_parm = RIG_PARM_NONE,
+ .level_gran =
+ {
+#include "level_gran_kenwood.h"
+ [LVL_VOXDELAY] = { .min = { .i = 0 }, .max = { .i = 30 }, .step = { .i = 1 } },
+ [LVL_KEYSPD] = {.min = {.i = 10}, .max = {.i = 60}, .step = {.i = 1}},
+ [LVL_CWPITCH] = {.min = {.i = 400}, .max = {.i = 1000}, .step = {.i = 50}},
+ [LVL_BKIN_DLYMS] = {.min = {.i = 0}, .max = {.i = 1000}, .step = {.i = 50}},
+ [LVL_SLOPE_LOW] = {.min = {.i = 0}, .max = {.i = 1000}, .step = {.i = 10}},
+ [LVL_SLOPE_HIGH] = {.min = {.i = 0}, .max = {.i = 5000}, .step = {.i = 10}},
+ },
+ .parm_gran = {},
+ .vfo_ops = TS2000_VFO_OPS,
+ .scan_ops = TS2000_SCAN_OP,
+ .ctcss_list = ts2000_ctcss_list,
+ .dcs_list = ts2000_dcs_list,
+ .preamp = { 12, RIG_DBLST_END, },
+ .attenuator = { 12, RIG_DBLST_END, },
+ .max_rit = kHz(20),
+ .max_xit = kHz(20),
+ .max_ifshift = kHz(1),
+ .targetable_vfo = RIG_TARGETABLE_FREQ,
+ .transceive = RIG_TRN_RIG,
+ .agc_level_count = 5,
+ .agc_levels = { RIG_AGC_OFF, RIG_AGC_SLOW, RIG_AGC_MEDIUM, RIG_AGC_FAST, RIG_AGC_SUPERFAST },
+ .bank_qty = 0,
+ .chan_desc_sz = 7,
+
+ .chan_list = {
+ { 0, 299, RIG_MTYPE_MEM, TS2000_MEM_CAP },
+ { 1, 3, RIG_MTYPE_MORSE },
+ RIG_CHAN_END,
+ },
+
+ .rx_range_list1 = {
+ {kHz(300), MHz(60), TS2000_ALL_MODES, -1, -1, TS2000_MAINVFO, TS2000_ANTS},
+ {MHz(144), MHz(146), TS2000_ALL_MODES, -1, -1, TS2000_MAINVFO},
+ {MHz(430), MHz(440), TS2000_ALL_MODES, -1, -1, TS2000_MAINVFO},
+ {MHz(144), MHz(146), TS2000_ALL_MODES, -1, -1, TS2000_SUBVFO},
+ {MHz(430), MHz(440), TS2000_ALL_MODES, -1, -1, TS2000_SUBVFO},
+ RIG_FRNG_END,
+ }, /* rx range */
+ .tx_range_list1 = {
+ {kHz(1830), kHz(1850), TS2000_OTHER_TX_MODES, W(5), W(100), TS2000_MAINVFO, TS2000_ANTS},
+ {kHz(1830), kHz(1850), TS2000_AM_TX_MODES, 2000, 25000, TS2000_MAINVFO, TS2000_ANTS},
+ {kHz(3500), kHz(3800), TS2000_OTHER_TX_MODES, W(5), W(100), TS2000_MAINVFO, TS2000_ANTS},
+ {kHz(3500), kHz(3800), TS2000_AM_TX_MODES, W(5), W(25), TS2000_MAINVFO, TS2000_ANTS},
+ {MHz(7), kHz(7100), TS2000_OTHER_TX_MODES, W(5), W(100), TS2000_MAINVFO, TS2000_ANTS},
+ {MHz(7), kHz(7100), TS2000_AM_TX_MODES, W(5), W(25), TS2000_MAINVFO, TS2000_ANTS},
+ {MHz(10.1), MHz(10.15), TS2000_OTHER_TX_MODES, W(5), W(100), TS2000_MAINVFO, TS2000_ANTS},
+ {MHz(10.1), MHz(10.15), TS2000_AM_TX_MODES, W(5), W(25), TS2000_MAINVFO, TS2000_ANTS},
+ {MHz(14), kHz(14350), TS2000_OTHER_TX_MODES, W(5), W(100), TS2000_MAINVFO, TS2000_ANTS},
+ {MHz(14), kHz(14350), TS2000_AM_TX_MODES, W(5), W(25), TS2000_MAINVFO, TS2000_ANTS},
+ {kHz(18068), kHz(18168), TS2000_OTHER_TX_MODES, W(5), W(100), TS2000_MAINVFO, TS2000_ANTS},
+ {kHz(18068), kHz(18168), TS2000_AM_TX_MODES, W(5), W(25), TS2000_MAINVFO, TS2000_ANTS},
+ {MHz(21), kHz(21450), TS2000_OTHER_TX_MODES, W(5), W(100), TS2000_MAINVFO, TS2000_ANTS},
+ {MHz(21), kHz(21450), TS2000_AM_TX_MODES, W(5), W(25), TS2000_MAINVFO, TS2000_ANTS},
+ {kHz(24890), kHz(24990), TS2000_OTHER_TX_MODES, W(5), W(100), TS2000_MAINVFO, TS2000_ANTS},
+ {kHz(24890), kHz(24990), TS2000_AM_TX_MODES, W(5), W(25), TS2000_MAINVFO, TS2000_ANTS},
+ {MHz(28), kHz(29700), TS2000_OTHER_TX_MODES, W(5), W(100), TS2000_MAINVFO, TS2000_ANTS},
+ {MHz(28), kHz(29700), TS2000_AM_TX_MODES, W(5), W(25), TS2000_MAINVFO, TS2000_ANTS},
+ {MHz(50), MHz(50.2), TS2000_OTHER_TX_MODES, W(5), W(100), TS2000_MAINVFO, TS2000_ANTS},
+ {MHz(50), MHz(50.2), TS2000_AM_TX_MODES, W(5), W(25), TS2000_MAINVFO, TS2000_ANTS},
+ {MHz(144), MHz(146), TS2000_OTHER_TX_MODES, W(5), W(100), TS2000_MAINVFO},
+ {MHz(144), MHz(146), TS2000_AM_TX_MODES, W(5), W(25), TS2000_MAINVFO},
+ {MHz(430), MHz(440), TS2000_OTHER_TX_MODES, W(5), W(50), TS2000_MAINVFO},
+ {MHz(430), MHz(440), TS2000_AM_TX_MODES, W(5), W(12.5), TS2000_MAINVFO},
+ RIG_FRNG_END,
+ }, /* tx range */
+
+ .rx_range_list2 = {
+ {kHz(300), MHz(60), TS2000_ALL_MODES, -1, -1, TS2000_MAINVFO, TS2000_ANTS},
+ {MHz(142), MHz(152), TS2000_ALL_MODES, -1, -1, TS2000_MAINVFO},
+ {MHz(420), MHz(450), TS2000_ALL_MODES, -1, -1, TS2000_MAINVFO},
+ {MHz(118), MHz(174), TS2000_ALL_MODES, -1, -1, TS2000_SUBVFO},
+ {MHz(220), MHz(512), TS2000_ALL_MODES, -1, -1, TS2000_SUBVFO},
+ RIG_FRNG_END,
+ }, /* rx range */
+ .tx_range_list2 = {
+ {kHz(1800), MHz(2), TS2000_OTHER_TX_MODES, W(5), W(100), TS2000_MAINVFO, TS2000_ANTS},
+ {kHz(1800), MHz(2), TS2000_AM_TX_MODES, 2000, 25000, TS2000_MAINVFO, TS2000_ANTS},
+ {kHz(3500), MHz(4), TS2000_OTHER_TX_MODES, W(5), W(100), TS2000_MAINVFO, TS2000_ANTS},
+ {kHz(3500), MHz(4), TS2000_AM_TX_MODES, W(5), W(25), TS2000_MAINVFO, TS2000_ANTS},
+ {MHz(7), kHz(7300), TS2000_OTHER_TX_MODES, W(5), W(100), TS2000_MAINVFO, TS2000_ANTS},
+ {MHz(7), kHz(7300), TS2000_AM_TX_MODES, W(5), W(25), TS2000_MAINVFO, TS2000_ANTS},
+ {MHz(10.1), MHz(10.15), TS2000_OTHER_TX_MODES, W(5), W(100), TS2000_MAINVFO, TS2000_ANTS},
+ {MHz(10.1), MHz(10.15), TS2000_AM_TX_MODES, W(5), W(25), TS2000_MAINVFO, TS2000_ANTS},
+ {MHz(14), kHz(14350), TS2000_OTHER_TX_MODES, W(5), W(100), TS2000_MAINVFO, TS2000_ANTS},
+ {MHz(14), kHz(14350), TS2000_AM_TX_MODES, W(5), W(25), TS2000_MAINVFO, TS2000_ANTS},
+ {kHz(18068), kHz(18168), TS2000_OTHER_TX_MODES, W(5), W(100), TS2000_MAINVFO, TS2000_ANTS},
+ {kHz(18068), kHz(18168), TS2000_AM_TX_MODES, W(5), W(25), TS2000_MAINVFO, TS2000_ANTS},
+ {MHz(21), kHz(21450), TS2000_OTHER_TX_MODES, W(5), W(100), TS2000_MAINVFO, TS2000_ANTS},
+ {MHz(21), kHz(21450), TS2000_AM_TX_MODES, W(5), W(25), TS2000_MAINVFO, TS2000_ANTS},
+ {kHz(24890), kHz(24990), TS2000_OTHER_TX_MODES, W(5), W(100), TS2000_MAINVFO, TS2000_ANTS},
+ {kHz(24890), kHz(24990), TS2000_AM_TX_MODES, W(5), W(25), TS2000_MAINVFO, TS2000_ANTS},
+ {MHz(28), kHz(29700), TS2000_OTHER_TX_MODES, W(5), W(100), TS2000_MAINVFO, TS2000_ANTS},
+ {MHz(28), kHz(29700), TS2000_AM_TX_MODES, W(5), W(25), TS2000_MAINVFO, TS2000_ANTS},
+ {MHz(50), MHz(54), TS2000_OTHER_TX_MODES, W(5), W(100), TS2000_MAINVFO, TS2000_ANTS},
+ {MHz(50), MHz(54), TS2000_AM_TX_MODES, W(5), W(25), TS2000_MAINVFO, TS2000_ANTS},
+ {MHz(144), MHz(148), TS2000_OTHER_TX_MODES, W(5), W(100), TS2000_MAINVFO},
+ {MHz(144), MHz(148), TS2000_AM_TX_MODES, W(5), W(25), TS2000_MAINVFO},
+ {MHz(430), MHz(450), TS2000_OTHER_TX_MODES, W(5), W(50), TS2000_MAINVFO},
+ {MHz(430), MHz(450), TS2000_AM_TX_MODES, W(5), W(12.5), TS2000_MAINVFO},
+ RIG_FRNG_END,
+ }, /* tx range */
+
+ .tuning_steps = {
+ {RIG_MODE_SSB | RIG_MODE_CW | RIG_MODE_RTTY, 1},
+ {TS2000_ALL_MODES, 10},
+ {TS2000_ALL_MODES, 100},
+ {TS2000_ALL_MODES, kHz(1)},
+ {TS2000_ALL_MODES, kHz(2.5)},
+ {TS2000_ALL_MODES, kHz(5)},
+ {RIG_MODE_AM | RIG_MODE_FM, kHz(6.25)},
+ {TS2000_ALL_MODES, kHz(10)},
+ {RIG_MODE_AM | RIG_MODE_FM, kHz(12.5)},
+ {RIG_MODE_AM | RIG_MODE_FM, kHz(12.5)},
+ {RIG_MODE_AM | RIG_MODE_FM, kHz(15)},
+ {RIG_MODE_AM | RIG_MODE_FM, kHz(20)},
+ {RIG_MODE_AM | RIG_MODE_FM, kHz(25)},
+ {RIG_MODE_AM | RIG_MODE_FM, kHz(30)},
+ {RIG_MODE_AM | RIG_MODE_FM, kHz(50)},
+ {RIG_MODE_AM | RIG_MODE_FM, kHz(100)},
+ {TS2000_ALL_MODES, MHz(1)},
+ {TS2000_ALL_MODES, 0}, /* any tuning step */
+ RIG_TS_END,
+ },
+
+ /* mode/filter list, remember: order matters! */
+ .filters = {
+ {RIG_MODE_SSB, kHz(2.2)},
+ {RIG_MODE_CW | RIG_MODE_CWR, Hz(200)},
+ {RIG_MODE_CW | RIG_MODE_CWR, Hz(50)},
+ {RIG_MODE_CW | RIG_MODE_CWR, Hz(1000)},
+ {RIG_MODE_CW | RIG_MODE_CWR, Hz(80)},
+ {RIG_MODE_CW | RIG_MODE_CWR, Hz(100)},
+ {RIG_MODE_CW | RIG_MODE_CWR, Hz(150)},
+ {RIG_MODE_CW | RIG_MODE_CWR, Hz(300)},
+ {RIG_MODE_CW | RIG_MODE_CWR, Hz(400)},
+ {RIG_MODE_CW | RIG_MODE_CWR, Hz(500)},
+ {RIG_MODE_CW | RIG_MODE_CWR, Hz(600)},
+ {RIG_MODE_CW | RIG_MODE_CWR, Hz(2000)},
+ {RIG_MODE_RTTY | RIG_MODE_RTTYR, Hz(500)},
+ {RIG_MODE_RTTY | RIG_MODE_RTTYR, Hz(250)},
+ {RIG_MODE_RTTY | RIG_MODE_RTTYR, Hz(1000)},
+ {RIG_MODE_RTTY | RIG_MODE_RTTYR, Hz(1500)},
+ {RIG_MODE_AM, kHz(6)},
+ {RIG_MODE_AM, kHz(2.4)},
+ {RIG_MODE_FM, kHz(12)},
+ {RIG_MODE_FM, kHz(6)},
+ RIG_FLT_END,
+ },
+
+ .str_cal = TS2000_STR_CAL,
+ .swr_cal = TS2000_SWR_CAL,
+
+ .ext_tokens = ts2000_ext_tokens,
+ .extfuncs = ts2000_ext_funcs,
+ .extlevels = ts2000_ext_levels,
+
+ .priv = (void *)& ts2000_priv_caps,
+
+ .rig_init = ts2000_init,
+ .rig_open = kenwood_open,
+ .rig_close = kenwood_close,
+ .rig_cleanup = kenwood_cleanup,
+ .set_freq = kenwood_set_freq,
+ .get_freq = kenwood_get_freq,
+ .set_rit = ts2000_set_rit,
+ .get_rit = ts2000_get_rit,
+ .set_xit = ts2000_set_rit,
+ .get_xit = ts2000_get_rit,
+ .set_mode = kenwood_set_mode,
+ .get_mode = kenwood_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,
+ .set_ctcss_tone = kenwood_set_ctcss_tone_tn,
+ .get_ctcss_tone = kenwood_get_ctcss_tone,
+ .set_ctcss_sql = kenwood_set_ctcss_sql,
+ .get_ctcss_sql = kenwood_get_ctcss_sql,
+ .get_ptt = kenwood_get_ptt,
+ .set_ptt = kenwood_set_ptt,
+ .get_dcd = kenwood_get_dcd,
+ .set_func = ts2000_set_func,
+ .get_func = ts2000_get_func,
+ .set_level = ts2000_set_level,
+ .get_level = ts2000_get_level,
+ .set_ext_func = ts2000_set_ext_func,
+ .get_ext_func = ts2000_get_ext_func,
+ .set_ext_level = ts2000_set_ext_level,
+ .get_ext_level = ts2000_get_ext_level,
+ .set_ant = kenwood_set_ant,
+ .get_ant = kenwood_get_ant,
+ .send_morse = kenwood_send_morse,
+ .wait_morse = rig_wait_morse,
+ .send_voice_mem = kenwood_send_voice_mem,
+ .stop_voice_mem = kenwood_stop_voice_mem,
+ .vfo_op = kenwood_vfo_op,
+ .scan = kenwood_scan,
+ .set_mem = kenwood_set_mem,
+ .get_mem = kenwood_get_mem,
+ .get_channel = ts2000_get_channel,
+ .set_channel = ts2000_set_channel,
+ .set_trn = kenwood_set_trn,
+ .get_trn = kenwood_get_trn,
+ .set_powerstat = kenwood_set_powerstat,
+ .get_powerstat = kenwood_get_powerstat,
+ .get_info = kenwood_get_info,
+ .reset = kenwood_reset,
+
+ .hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS
+};
diff --git a/simulators/simic705.c b/simulators/simic705.c
index e6bad1bb0..c0579d53e 100644
--- a/simulators/simic705.c
+++ b/simulators/simic705.c
@@ -37,8 +37,8 @@ int keyspd = 85; // 85=20WPM
// we make B different from A to ensure we see a difference at startup
float freqA = 14074000;
float freqB = 14074500;
-mode_t modeA = RIG_MODE_PKTUSB;
-mode_t modeB = RIG_MODE_PKTUSB;
+mode_t modeA = RIG_MODE_FM;
+mode_t modeB = RIG_MODE_FM;
int datamodeA = 0;
int datamodeB = 0;
pbwidth_t widthA = 0;
@@ -110,6 +110,7 @@ void frameParse(int fd, unsigned char *frame, int len)
return;
}
+printf("Here#1\n");
dumphex(frame, len);
if (frame[0] != 0xfe && frame[1] != 0xfe)
diff --git a/src/conf.c b/src/conf.c
index 8302f89a2..5e00e8d38 100644
--- a/src/conf.c
+++ b/src/conf.c
@@ -1452,6 +1452,7 @@ int HAMLIB_API rig_set_conf(RIG *rig, hamlib_token_t token, const char *val)
*/
int HAMLIB_API rig_get_conf(RIG *rig, hamlib_token_t token, char *val)
{
+ printf("tokendid=%lx, %s\n", token, val);
return rig_get_conf2(rig, token, val, 128);
}
commit 2feb4cc65cd3cde925f3f872d09c912cd339b3eb
Author: Mike Black W9MDB <mdb...@ya...>
Date: Thu Mar 21 17:04:37 2024 -0500
Fix IC7700 get_mode_without_data
diff --git a/rigs/icom/ic7700.c b/rigs/icom/ic7700.c
index f9be28d1d..b9b1edc43 100644
--- a/rigs/icom/ic7700.c
+++ b/rigs/icom/ic7700.c
@@ -277,7 +277,7 @@ struct rig_caps ic7700_caps =
RIG_MODEL(RIG_MODEL_IC7700),
.model_name = "IC-7700",
.mfg_name = "Icom",
- .version = BACKEND_VER ".4",
+ .version = BACKEND_VER ".5",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
diff --git a/rigs/icom/icom.c b/rigs/icom/icom.c
index 921259642..e6e1bb6a4 100644
--- a/rigs/icom/icom.c
+++ b/rigs/icom/icom.c
@@ -2578,7 +2578,7 @@ static int icom_get_mode_without_data(RIG *rig, vfo_t vfo, rmode_t *mode,
// Use command 0x26 to get selected/unselected or Main/Sub VFO mode, data mode and filter width
// IC-7800 can set, but not read with 0x26 (although manual states otherwise?)
- if ((rs->targetable_vfo & RIG_TARGETABLE_MODE) && !RIG_IS_IC7800
+ if ((rs->targetable_vfo & RIG_TARGETABLE_MODE) && !RIG_IS_IC7800 && !RIG_IS_IC7700
&& !force_vfo_swap)
{
retval = icom_get_mode_x26(rig, vfo, &mode_len, modebuf);
commit 538d41b9e8c7dfe9a80e4410b2eab7af9cf956d7
Author: Mike Black W9MDB <mdb...@ya...>
Date: Tue Mar 19 17:51:03 2024 -0500
Fix Xiegu X6100
https://github.com/Hamlib/Hamlib/issues/1499
diff --git a/rigs/icom/xiegu.c b/rigs/icom/xiegu.c
index 9fa3142dd..97efc7c0b 100644
--- a/rigs/icom/xiegu.c
+++ b/rigs/icom/xiegu.c
@@ -139,6 +139,10 @@ int xiegu_rig_open(RIG *rig)
int cmd = 0x19;
int subcmd = 0x00;
unsigned short iid;
+
+ retval = icom_rig_open(rig);
+ if (retval != RIG_OK) return retval;
+
retval = icom_transaction(rig, cmd, subcmd, NULL, 0, id, &id_len);
if (retval == RIG_OK)
@@ -149,12 +153,13 @@ int xiegu_rig_open(RIG *rig)
{
case 0x0090: rig_debug(RIG_DEBUG_VERBOSE, "%s: Xiegu model %s\n", __func__, "G90/G90S");break;
case 0x0106: rig_debug(RIG_DEBUG_VERBOSE, "%s: Xiegu model %s\n", __func__, "G106/G106C");break;
- case 0x6100: rig_debug(RIG_DEBUG_VERBOSE, "%s: Xiegu model %s\n", __func__, "X6100");break;
+ case 0x6100:
+ case 0xa400: rig_debug(RIG_DEBUG_VERBOSE, "%s: Xiegu model %s\n", __func__, "X6100");break;
default: rig_debug(RIG_DEBUG_VERBOSE, "%s: Xiegu model %s\n", __func__, "Unknown");break;
}
}
- return icom_rig_open(rig);
+ return retval;
}
/*
@@ -349,7 +354,7 @@ struct rig_caps x108g_caps =
static struct icom_priv_caps x6100_priv_caps =
{
- 0x70, /* default address */
+ 0xa4, /* default address */
0, /* 731 mode */
0, /* no XCHG */
ic7200_ts_sc_list,
commit 9331f9e5f40844ed3e9249e37d20916baa28e570
Author: Mike Black W9MDB <mdb...@ya...>
Date: Tue Mar 19 16:19:52 2024 -0500
Fix TS890S to not give an error for STRENGTH or WATTS but return 0 as appropriate
diff --git a/rigs/kenwood/ts890s.c b/rigs/kenwood/ts890s.c
index 2b8ca60c7..ede63c181 100644
--- a/rigs/kenwood/ts890s.c
+++ b/rigs/kenwood/ts890s.c
@@ -322,7 +322,16 @@ int kenwood_ts890_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
if ((ptt == RIG_PTT_OFF) != (level == RIG_LEVEL_STRENGTH))
{
/* We're sorry, the number you have dialed is not in service */
- return -RIG_ENAVAIL;
+ if (level == RIG_LEVEL_RFPOWER_METER_WATTS)
+ {
+ val->f = 0;
+ }
+ else
+ {
+ val->i = 0;
+ }
+
+ return RIG_OK;
}
/* Find out which meter type is in use */
@@ -482,7 +491,7 @@ struct rig_caps ts890s_caps =
RIG_MODEL(RIG_MODEL_TS890S),
.model_name = "TS-890S",
.mfg_name = "Kenwood",
- .version = BACKEND_VER ".14",
+ .version = BACKEND_VER ".15",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
commit 68bcae6ee86ed0b495575fd2da8f70953c311be7
Author: Mike Black W9MDB <mdb...@ya...>
Date: Mon Mar 18 17:24:07 2024 -0500
Some improvements on codan rigs
diff --git a/rigs/codan/codan.c b/rigs/codan/codan.c
index 6f9fc1cb8..f1fe2b51a 100644
--- a/rigs/codan/codan.c
+++ b/rigs/codan/codan.c
@@ -151,8 +151,8 @@ int codan_init(RIG *rig)
int codan_open(RIG *rig)
{
char *results = NULL;
- codan_transaction(rig, "scan off\r", 1, &results);
- codan_transaction(rig, "echo off", 1, &results);
+ codan_transaction(rig, "\recho off", 1, &results);
+ codan_transaction(rig, "ver", 1, &results);
//codan_transaction(rig, "prompt time", 1, &results);
codan_transaction(rig, "login", 1, &results);
diff --git a/rigs/codan/codan.h b/rigs/codan/codan.h
index cd02ac1c0..ad334276a 100644
--- a/rigs/codan/codan.h
+++ b/rigs/codan/codan.h
@@ -24,9 +24,9 @@
#include "hamlib/rig.h"
-#define BACKEND_VER "20211228"
+#define BACKEND_VER "20240318"
-#define EOM "\x0d"
+#define EOM "\x0a"
#define TRUE 1
#define FALSE 0
// For the current implemented command set 64 is long enough
-----------------------------------------------------------------------
Summary of changes:
NEWS | 1 +
include/hamlib/riglist.h | 1 +
rigs/codan/codan.c | 4 +-
rigs/codan/codan.h | 4 +-
rigs/dummy/flrig.c | 20 +--
rigs/icom/ic7300.c | 4 +-
rigs/icom/ic7700.c | 2 +-
rigs/icom/icom.c | 55 +++++++--
rigs/icom/icom.h | 1 +
rigs/icom/xiegu.c | 11 +-
rigs/kenwood/k3.c | 15 ++-
rigs/kenwood/kenwood.c | 1 +
rigs/kenwood/kenwood.h | 1 +
rigs/kenwood/level_gran_elecraft.h | 1 +
rigs/kenwood/ts2000.c | 246 +++++++++++++++++++++++++++++++++++++
rigs/kenwood/ts890s.c | 13 +-
rigs/yaesu/ft1000mp.c | 13 +-
simulators/simic705.c | 5 +-
src/conf.c | 1 +
src/rig.c | 3 +-
20 files changed, 363 insertions(+), 39 deletions(-)
hooks/post-receive
--
Hamlib -- Ham radio control libraries
|
|
From: n0nb <n0...@us...> - 2024-03-17 16:02:46
|
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 1de9a5cede92b4847a32966c6b087ca91b74d113 (commit)
via 0e572f631b8f4d75984f5b8f03b83ddce36eaf50 (commit)
via 84d5f367f6b6631114e12fcf84e9b949411b1e55 (commit)
via 6d257841a6e79dcb16b0e9efe1c1a9007904255f (commit)
via 8449ac3c436065cbca6886a7ad469d1229268fdf (commit)
via 1045620313669792c24f49df570d66a596faf95b (commit)
via b9e59f205e029147c0e9fac12cc457c47582a954 (commit)
via 6220da1eaf73d212b4d082035ef9de3ab8598522 (commit)
via f119f5976aaa49fd7eca4997fbbd7b38796b49bf (commit)
via 96ec37a276fd773b1a14f699bc033c4c2ef75a74 (commit)
via 789d863f9779160ea6b204e84db1aaae29a702ae (commit)
via c7665cb7d115acc12f57144c4f3431196241852f (commit)
via aa0d83df959ec7dcd76546be45a72a17552db98f (commit)
via 609065775c49da604d38b46b3fee601910d06e5d (commit)
via 5ab1122139e4227fe124124fea6c4a8e9386db24 (commit)
via 24135bd7d704dbf61c1f3cdf674cbb4159c59045 (commit)
via b358cdbd2eb04ee89c6c6819775fb2adc8bbb039 (commit)
via f3b8330331b145f893868a97420d5c6f428d2939 (commit)
via 61211976872a798b709416a6671622cb93d4ed29 (commit)
via 15a2b5a0dc3e40a57aac485b63499a1a06992255 (commit)
via b9df1c7bda84092ab114838078b58a5133ef7eba (commit)
via 4f3e40f3c6ec6b9a6e4dc72c31399f799f62e199 (commit)
via bafb88432aced418aaaab73d70099eabbc0c6b1d (commit)
via 2212c47ad7660f8228246ae4d8f72cf84e1cfc86 (commit)
via f122f6422b86da02f8b101e55266acc253d0ae47 (commit)
via 0868edbd659284f84290f2503680e52ec0342941 (commit)
via dc38d19449a0a7e0c97298a46876887e484fb80c (commit)
via c74b3c10c657aa14880eb860baf4cc540cc7e5eb (commit)
via a96a97ae3ce24df355cf2cc774b8da4034bd2857 (commit)
via 7831dfc311cec469e7d0dfc9af2574e05cd9fe88 (commit)
via bb9b1f1783f23a415f22863de7b63611021f0c0a (commit)
via 12404aa8a6498e871b664993a1320e433069f70e (commit)
via cef2525d0f09ee6557736cdd7c98aeb6abf5924c (commit)
via 728db84c0c1d0ec22a096ee1bcfba1182fed8df1 (commit)
via 07f8023d17f96ffc2898d5713a33221ce494301c (commit)
via 55db73894fb71b3fcb3a676dc421cd88a419806f (commit)
via 0fdc78c6043ebb3f9dd0df9b2d913ddfabe9e02f (commit)
via 0f74a23b142e8e3ec33ed0907fb9c0c1798baeb7 (commit)
via 7f02c35562da9946c4ab398eeb781deaeac1b171 (commit)
via a8f7da8fc4e325ac5a87ad7f665e43e54d00233b (commit)
via c15f5b0da01ee8308d94d42bac71ecb501a3782b (commit)
via c6371a14a1786f8ed2eb00e121efb200287cd2fd (commit)
via 65d2023b95695e14493024246ceec7013c44fb32 (commit)
via c68ef118e9cbb10807e9f1eebf0823e60624a7e1 (commit)
via 25ee5d65d592e80f7471806c2959ded06ece1b69 (commit)
via eaae02ef008e117d8ad5f2568776a6c2b393a193 (commit)
via 45db5d32c3cb61cbf0ac0ffd0d482cf0f57df126 (commit)
via 7bda13f0e0f7a257b9e36fe7b13dee3ceb3a42c7 (commit)
via b65997a24929edfa4809e7912413ddb25ebfacac (commit)
via 7ee8c358cd056ff5f5ccc965da605f3329f7d6c3 (commit)
via 5f92b19ef4882da83bbbfcf30ea61384ca9b7791 (commit)
via 5089949f100ed31f8e321d84221b90efbc2793af (commit)
via 83f5655a9fec53811250e8d20d2c04342700b304 (commit)
via 1b2f6a84f7a2b322593eead90f3f278008ee8464 (commit)
via 9f87279b0b2b3e9dad4391f4daae657ed6b33806 (commit)
via c1f8b091abe305dadbf9a08777532bd1b9ce23ad (commit)
via 3967e41fcf2463a5b11fea12f4527b44d47d06d6 (commit)
via 2849a756762fd73ced678de01958ed73b1c1eb4b (commit)
via fff8e83c111ff7476c4accae27d99b849da39530 (commit)
via c23948c8f4711e6d2dc8422bf904a912c2579d42 (commit)
via 911692c715f658600d4c5c1a90aea3cc24b222f2 (commit)
via db6dc9251330e953423cfeaba79825858f2bde41 (commit)
via 8ff07c47f9d0c3cf13aaed05dfcc9607933ba014 (commit)
via f247ee20888acb9dfb66f9e4455fbc14a2d41d36 (commit)
via 878117ab1f342d0e04b7bbd9998accb30665bbee (commit)
from 8cc6ce131926b49a2a6bd5e1b1268f98fa00fc78 (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 1de9a5cede92b4847a32966c6b087ca91b74d113
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sun Mar 17 09:01:58 2024 -0500
Fix compile warning on rig_debug messages
https://github.com/Hamlib/Hamlib/issues/1525
diff --git a/rigs/kenwood/elecraft.c b/rigs/kenwood/elecraft.c
index e349882cb..05b32835f 100644
--- a/rigs/kenwood/elecraft.c
+++ b/rigs/kenwood/elecraft.c
@@ -457,12 +457,12 @@ int verify_kenwood_id(RIG *rig, char *id)
if (strcmp("017", idptr) != 0)
{
- rig_debug(RIG_DEBUG_VERBOSE, "%s: Rig (%s) is not a K2 or K3\n", __func__, id);
+ rig_debug(RIG_DEBUG_VERBOSE, "%s: Rig (%.4095s) is not a K2 or K3\n", __func__, id);
// return -RIG_EPROTO;
}
else
{
- rig_debug(RIG_DEBUG_VERBOSE, "%s: Rig ID is %s\n", __func__, id);
+ rig_debug(RIG_DEBUG_VERBOSE, "%s: Rig ID is %.4095s\n", __func__, id);
}
return RIG_OK;
diff --git a/rigs/kenwood/kenwood.c b/rigs/kenwood/kenwood.c
index 41e21f89d..4ff44d1cb 100644
--- a/rigs/kenwood/kenwood.c
+++ b/rigs/kenwood/kenwood.c
@@ -270,7 +270,7 @@ int kenwood_transaction(RIG *rig, const char *cmdstr, char *data,
if (datasize > 0 && datasize < (cmdstr ? strlen(cmdstr) : 0))
{
rig_debug(RIG_DEBUG_WARN,
- "%s called cmd=%s datasize=%d, datasize < cmd length?\n", __func__,
+ "%s called cmd=%.4095s datasize=%d, datasize < cmd length?\n", __func__,
cmdstr ? cmdstr : "(NULL)",
(int)datasize);
}
diff --git a/rigs/winradio/g313-posix.c b/rigs/winradio/g313-posix.c
index 4ee963d7d..1fb7ac798 100644
--- a/rigs/winradio/g313-posix.c
+++ b/rigs/winradio/g313-posix.c
@@ -553,7 +553,7 @@ int g313_set_conf(RIG *rig, hamlib_token_t token, const char *val)
case TOK_SHM_AUDIO:
if (len > (FIFO_PATHNAME_SIZE - 1))
{
- rig_debug(RIG_DEBUG_WARN, "%s: set audio_path %s is too long\n", __func__, val);
+ rig_debug(RIG_DEBUG_WARN, "%s: set audio_path %.4095s is too long\n", __func__, val);
return -RIG_EINVAL;
}
@@ -566,7 +566,7 @@ int g313_set_conf(RIG *rig, hamlib_token_t token, const char *val)
case TOK_SHM_IF:
if (len > (FIFO_PATHNAME_SIZE - 1))
{
- rig_debug(RIG_DEBUG_WARN, "%s: set if_path %s is too long\n", __func__, val);
+ rig_debug(RIG_DEBUG_WARN, "%s: set if_path %.4095s is too long\n", __func__, val);
return -RIG_EINVAL;
}
@@ -579,7 +579,7 @@ int g313_set_conf(RIG *rig, hamlib_token_t token, const char *val)
case TOK_SHM_SPECTRUM:
if (len > (FIFO_PATHNAME_SIZE - 1))
{
- rig_debug(RIG_DEBUG_WARN, "%s: set spectrum_path %s is too long\n", __func__,
+ rig_debug(RIG_DEBUG_WARN, "%s: set spectrum_path %.4095s is too long\n", __func__,
val);
return -RIG_EINVAL;
}
commit 0e572f631b8f4d75984f5b8f03b83ddce36eaf50
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sun Mar 17 08:53:53 2024 -0500
Update simft897.c
diff --git a/simulators/simft897.c b/simulators/simft897.c
index f473f96d9..892d39fde 100644
--- a/simulators/simft897.c
+++ b/simulators/simft897.c
@@ -129,7 +129,11 @@ again:
case 0xF5: printf("FREQ\n"); break;
- case 0x81: printf("VFO TOGGLE\n"); break;
+ case 0x81:
+ rx_vfo = rx_vfo == 0? 1: 0;
+ printf("VFO TOGGLE to %dE\n", rx_vfo);
+ break;
+
case 0x02: printf("SPLIT ON\n"); break;
@@ -147,7 +151,14 @@ again:
case 0xE7: printf("READ RX STATUS\n"); break;
- case 0xF7: printf("READ TX STATUS\n"); break;
+ case 0xF7:
+ printf("READ TX STATUS\n");
+ buf[0] = 0x01;
+ buf[1] = 0x40;
+ buf[2] = 0x74;
+ buf[3] = 0x00;
+ buf[4] = 0x03; n = write(fd, buf, 5);
+ break;
case 0x03:
printf("READ RX STATUS\n");
commit 84d5f367f6b6631114e12fcf84e9b949411b1e55
Author: Mike Black W9MDB <mdb...@ya...>
Date: Fri Mar 15 22:51:19 2024 -0500
Fix compile warning on testrig.c
diff --git a/tests/testrig.c b/tests/testrig.c
index 212d356fa..e73a4cd79 100644
--- a/tests/testrig.c
+++ b/tests/testrig.c
@@ -80,7 +80,7 @@ int main(int argc, const char *argv[])
uint64_t levels = rig_get_caps_int(my_rig->caps->rig_model,
RIG_CAPS_HAS_GET_LEVEL);
- printf("HAS_GET_LEVEL=0x%8llx, SWR=%8llx,true=%d\n", levels,
+ printf("HAS_GET_LEVEL=0x%8lx, SWR=%8llx,true=%d\n", levels,
levels & RIG_LEVEL_SWR, (levels & RIG_LEVEL_SWR) == RIG_LEVEL_SWR);
char val[256];
commit 6d257841a6e79dcb16b0e9efe1c1a9007904255f
Author: Mike Black W9MDB <mdb...@ya...>
Date: Fri Mar 15 16:46:14 2024 -0500
Fix some memory leaks in rigctl_parse.c
diff --git a/tests/rigctl_parse.c b/tests/rigctl_parse.c
index e92fb5660..5c6a24b76 100644
--- a/tests/rigctl_parse.c
+++ b/tests/rigctl_parse.c
@@ -1175,12 +1175,14 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc,
if (!input_line)
{
fprintf_flush(fout, "\n");
+ free(rp_hist_buf);
return (RIGCTL_PARSE_END);
}
/* Q or q to quit */
if (!(strncasecmp(input_line, "q", 1)))
{
+ free(rp_hist_buf);
return (RIGCTL_PARSE_END);
}
@@ -1189,12 +1191,14 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc,
{
usage_rig(fout);
fflush(fout);
+ free(rp_hist_buf);
return (RIG_OK);
}
/* '#' for comment */
if (!(strncmp(input_line, "#", 1)))
{
+ free(rp_hist_buf);
return (RIG_OK);
}
@@ -1203,6 +1207,7 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc,
{
fprintf(fout, "? for help, q to quit.\n");
fflush(fout);
+ free(rp_hist_buf);
return (RIG_OK);
}
@@ -1227,6 +1232,7 @@ readline_repeat:
{
/* Oops! Invoke GDB!! */
fprintf_flush(fout, "\n");
+ free(rp_hist_buf);
return (RIGCTL_PARSE_END);
}
@@ -1286,6 +1292,7 @@ readline_repeat:
{
fprintf(stderr,
"Valid multiple character command names contain alphanumeric characters plus '_'\n");
+ free(rp_hist_buf);
return (RIG_OK);
}
}
@@ -1295,12 +1302,14 @@ readline_repeat:
/* Single '\' entered, prompt again */
else if ((*parsed_input[0] == '\\') && (strlen(parsed_input[0]) == 1))
{
+ free(rp_hist_buf);
return (RIG_OK);
}
/* Multiple characters but no leading '\' */
else
{
fprintf(stderr, "Precede multiple character command names with '\\'\n");
+ free(rp_hist_buf);
return (RIG_OK);
}
@@ -1317,6 +1326,7 @@ readline_repeat:
fprintf(stderr, "Command '%c' not found!\n", cmd);
}
+ free(rp_hist_buf);
return (RIG_OK);
}
@@ -1342,6 +1352,7 @@ readline_repeat:
if (!input_line)
{
fprintf_flush(fout, "\n");
+ free(rp_hist_buf);
return (RIGCTL_PARSE_END);
}
@@ -1350,6 +1361,7 @@ readline_repeat:
{
fprintf(fout, "? for help, q to quit.\n");
fflush(fout);
+ free(rp_hist_buf);
return (RIG_OK);
}
@@ -1365,6 +1377,7 @@ readline_repeat:
else
{
fprintf_flush(fout, "\n");
+ free(rp_hist_buf);
return (RIGCTL_PARSE_END);
}
}
@@ -1444,6 +1457,7 @@ readline_repeat:
{
fprintf(fout, "? for help, q to quit.\n");
fflush(fout);
+ free(rp_hist_buf);
return (RIG_OK);
}
@@ -1454,6 +1468,7 @@ readline_repeat:
else
{
fprintf_flush(fout, "\n");
+ free(rp_hist_buf);
return (RIGCTL_PARSE_END);
}
}
@@ -1506,6 +1521,7 @@ readline_repeat:
{
fprintf(fout, "? for help, q to quit.\n");
fflush(fout);
+ free(rp_hist_buf);
return (RIG_OK);
}
@@ -1518,6 +1534,7 @@ readline_repeat:
else
{
fprintf_flush(fout, "\n");
+ free(rp_hist_buf);
return (RIGCTL_PARSE_END);
}
}
@@ -1572,6 +1589,7 @@ readline_repeat:
{
fprintf(fout, "? for help, q to quit.\n");
fflush(fout);
+ free(rp_hist_buf);
return (RIG_OK);
}
@@ -1584,6 +1602,7 @@ readline_repeat:
else
{
fprintf_flush(fout, "\n");
+ free(rp_hist_buf);
return (RIGCTL_PARSE_END);
}
}
@@ -1638,6 +1657,7 @@ readline_repeat:
{
fprintf(fout, "? for help, q to quit.\n");
fflush(fout);
+ free(rp_hist_buf);
return (RIG_OK);
}
@@ -1650,6 +1670,7 @@ readline_repeat:
else
{
fprintf_flush(fout, "\n");
+ free(rp_hist_buf);
return (RIGCTL_PARSE_END);
}
}
commit 8449ac3c436065cbca6886a7ad469d1229268fdf
Author: Mike Black W9MDB <mdb...@ya...>
Date: Fri Mar 15 07:29:03 2024 -0500
Update simulators
diff --git a/simulators/Makefile.am b/simulators/Makefile.am
index 2ea8fee66..12c290686 100644
--- a/simulators/Makefile.am
+++ b/simulators/Makefile.am
@@ -8,7 +8,7 @@ DISTCLEANFILES =
bin_PROGRAMS =
-check_PROGRAMS = simelecraft simicgeneric simkenwood simyaesu simic9100 simic9700 simft991 simftdx1200 simftdx3000 simjupiter simpowersdr simid5100 simft736 simftdx5000 simtmd700 simrotorez simspid simft817 simts590 simft847 simic7300 simic7000 simic7100 simic7200 simatd578 simic905 simts450 simic7600 simic7610 simic705 simts950 simts990 simic7851 simftdx101 simxiegug90 simqrplabs simft818 simic275 simtrusdx simft1000 simtmd710 simts890 simxiegux108g simxiegux6100 simic910 simft450
+check_PROGRAMS = simelecraft simicgeneric simkenwood simyaesu simic9100 simic9700 simft991 simftdx1200 simftdx3000 simjupiter simpowersdr simid5100 simft736 simftdx5000 simtmd700 simrotorez simspid simft817 simts590 simft847 simic7300 simic7000 simic7100 simic7200 simatd578 simic905 simts450 simic7600 simic7610 simic705 simts950 simts990 simic7851 simftdx101 simxiegug90 simqrplabs simft818 simic275 simtrusdx simft1000 simtmd710 simts890 simxiegux108g simxiegux6100 simic910 simft450 simelecraftk4
simelecraft_SOURCES = simelecraft.c
simkenwood_SOURCES = simkenwood.c
diff --git a/simulators/simelecraft.c b/simulators/simelecraft.c
index 9296d7dbc..10fbee1f2 100644
--- a/simulators/simelecraft.c
+++ b/simulators/simelecraft.c
@@ -35,6 +35,8 @@ int rxattenuatorB = 0;
int keyspd = 20;
int ai = 0;
int dt = 0;
+int modea = 2;
+int modeb = 2;
// ID 0310 == 310, Must drop leading zero
typedef enum nc_rigid_e
@@ -122,14 +124,13 @@ int main(int argc, char *argv[])
char *pbuf;
int n;
int fd = openPort(argv[1]);
- int modea = 3, modeb = 3;
int freqa = 14074000, freqb = 14073500;
while (1)
{
buf[0] = 0;
- if ((n = getmyline(fd, buf)) > 0) { printf("Cmd:%s, len=%d\n", buf, n); }
+ if ((n = getmyline(fd, buf)) > 0) { if (strstr(buf,"BW")) printf("Cmd:%s, len=%d\n", buf, n); }
else {continue; }
if (strcmp(buf, "RM5;") == 0)
diff --git a/simulators/simelecraft.c b/simulators/simelecraftk4.c
similarity index 93%
copy from simulators/simelecraft.c
copy to simulators/simelecraftk4.c
index 9296d7dbc..1aa4cad2f 100644
--- a/simulators/simelecraft.c
+++ b/simulators/simelecraftk4.c
@@ -19,14 +19,14 @@ struct ip_mreq
#define BUFSIZE 256
-float freqA = 14074000;
-float freqB = 14074500;
+int freqA = 14074000;
+int freqB = 14074500;
int afgain = 180;
int rfgain = 190;
int micgain = 30;
int noiseblanker = 0;
-int bandwidthA = 2200;
-int bandwidthB = 2400;
+int bandwidthA = 200;
+int bandwidthB = 200;
int ifshift = 0;
int preampA = 0;
int preampB = 0;
@@ -35,6 +35,9 @@ int rxattenuatorB = 0;
int keyspd = 20;
int ai = 0;
int dt = 0;
+int modeA = 2;
+int modeB = 2;
+// int freqa = 14074000, freqb = 14073500;
// ID 0310 == 310, Must drop leading zero
typedef enum nc_rigid_e
@@ -122,14 +125,12 @@ int main(int argc, char *argv[])
char *pbuf;
int n;
int fd = openPort(argv[1]);
- int modea = 3, modeb = 3;
- int freqa = 14074000, freqb = 14073500;
while (1)
{
buf[0] = 0;
- if ((n = getmyline(fd, buf)) > 0) { printf("Cmd:%s, len=%d\n", buf, n); }
+ if ((n = getmyline(fd, buf)) > 0) { if (strstr(buf,"BW0")) printf("Cmd:%s, len=%d\n", buf, n); }
else {continue; }
if (strcmp(buf, "RM5;") == 0)
@@ -317,37 +318,37 @@ int main(int argc, char *argv[])
}
else if (strcmp(buf, "MD;") == 0)
{
- SNPRINTF(buf, sizeof(buf), "MD%d;", modea);
+ SNPRINTF(buf, sizeof(buf), "MD%d;", modeA);
WRITE(fd, buf, strlen(buf));
}
else if (strcmp(buf, "MD$;") == 0)
{
- SNPRINTF(buf, sizeof(buf), "MD$%d;", modeb);
+ SNPRINTF(buf, sizeof(buf), "MD$%d;", modeB);
WRITE(fd, buf, strlen(buf));
}
else if (strncmp(buf, "MD", 2) == 0)
{
- if (buf[2] == '$') { sscanf(buf, "MD$%d;", &modeb); }
- else { sscanf(buf, "MD%d;", &modea); }
+ if (buf[2] == '$') { sscanf(buf, "MD$%d;", &modeB); }
+ else { sscanf(buf, "MD%d;", &modeA); }
}
else if (strcmp(buf, "FA;") == 0)
{
- SNPRINTF(buf, sizeof(buf), "FA%011d;", freqa);
+ SNPRINTF(buf, sizeof(buf), "FA%011d;", freqA);
WRITE(fd, buf, strlen(buf));
}
else if (strcmp(buf, "FB;") == 0)
{
- SNPRINTF(buf, sizeof(buf), "FB%011d;", freqb);
+ SNPRINTF(buf, sizeof(buf), "FB%011d;", freqB);
WRITE(fd, buf, strlen(buf));
}
else if (strncmp(buf, "FA", 2) == 0)
{
- sscanf(buf, "FA%d", &freqa);
+ sscanf(buf, "FA%d", &freqA);
}
else if (strncmp(buf, "FB", 2) == 0)
{
- sscanf(buf, "FB%d", &freqb);
+ sscanf(buf, "FB%d", &freqB);
}
else if (strncmp(buf, "FR;", 3) == 0)
{
diff --git a/simulators/simic910.c b/simulators/simic910.c
index 9038f09c8..4b539de50 100644
--- a/simulators/simic910.c
+++ b/simulators/simic910.c
@@ -28,7 +28,7 @@ struct ip_mreq
#define BUFSIZE 256
-#define X25
+//#define X25
int civ_731_mode = 0;
vfo_t current_vfo = RIG_VFO_A;
commit 1045620313669792c24f49df570d66a596faf95b
Author: Mike Black W9MDB <mdb...@ya...>
Date: Fri Mar 15 07:27:19 2024 -0500
Return error on bad read_icom_frame
diff --git a/rigs/icom/frame.c b/rigs/icom/frame.c
index 946040c73..5a4d58f60 100644
--- a/rigs/icom/frame.c
+++ b/rigs/icom/frame.c
@@ -301,6 +301,12 @@ again2:
buf[0] = 0;
frm_len = read_icom_frame(rp, buf, sizeof(buf));
+ if (frm_len <= 0)
+ {
+ set_transaction_inactive(rig);
+ return frm_len;
+ }
+
if (frm_len > 4 && memcmp(buf, sendbuf, frm_len) == 0)
{
priv->serial_USB_echo_off = 0;
commit b9e59f205e029147c0e9fac12cc457c47582a954
Author: Mike Black W9MDB <mdb...@ya...>
Date: Thu Mar 14 22:43:10 2024 -0500
Fix compile error
https://github.com/Hamlib/Hamlib/issues/1524
diff --git a/tests/rigctl_parse.c b/tests/rigctl_parse.c
index 59c9b3663..e92fb5660 100644
--- a/tests/rigctl_parse.c
+++ b/tests/rigctl_parse.c
@@ -101,7 +101,7 @@ extern int read_history();
#define ARG_OUT (ARG_OUT1|ARG_OUT2|ARG_OUT3|ARG_OUT4|ARG_OUT5)
static int chk_vfo_executed;
-char rigctld_password[64];
+char rigctld_password[65];
int is_passwordOK;
int is_rigctld;
extern int lock_mode; // used by rigctld
commit 6220da1eaf73d212b4d082035ef9de3ab8598522
Merge: f119f5976 96ec37a27
Author: Mike Black W9MDB <mdb...@ya...>
Date: Thu Mar 14 17:10:39 2024 -0500
Merge branch 'master' of https://github.com/Hamlib/Hamlib
commit f119f5976aaa49fd7eca4997fbbd7b38796b49bf
Author: Mike Black W9MDB <mdb...@ya...>
Date: Thu Mar 14 17:09:36 2024 -0500
Fix build warning
https://github.com/Hamlib/Hamlib/issues/1524
diff --git a/src/rig.c b/src/rig.c
index f7bc8961f..3db6567e7 100644
--- a/src/rig.c
+++ b/src/rig.c
@@ -999,10 +999,10 @@ int HAMLIB_API rig_open(RIG *rig)
{
rig_debug(RIG_DEBUG_VERBOSE, "%s: cwd=%s\n", __func__, cwd);
char *path = calloc(1, 4096);
- extern char *settings_file;
+ extern char settings_file[4096];
const char *xdgpath = getenv("XDG_CONFIG_HOME");
- settings_file = "hamlib_settings";
+ strcpy(settings_file,"hamlib_settings");
if (xdgpath)
{
commit 96ec37a276fd773b1a14f699bc033c4c2ef75a74
Author: Mike Black W9MDB <mdb...@ya...>
Date: Thu Mar 14 17:09:36 2024 -0500
Fix build warning
diff --git a/src/rig.c b/src/rig.c
index f7bc8961f..3db6567e7 100644
--- a/src/rig.c
+++ b/src/rig.c
@@ -999,10 +999,10 @@ int HAMLIB_API rig_open(RIG *rig)
{
rig_debug(RIG_DEBUG_VERBOSE, "%s: cwd=%s\n", __func__, cwd);
char *path = calloc(1, 4096);
- extern char *settings_file;
+ extern char settings_file[4096];
const char *xdgpath = getenv("XDG_CONFIG_HOME");
- settings_file = "hamlib_settings";
+ strcpy(settings_file,"hamlib_settings");
if (xdgpath)
{
commit 789d863f9779160ea6b204e84db1aaae29a702ae
Merge: 5ab112213 c7665cb7d
Author: Michael Black <mdb...@ya...>
Date: Sun Mar 10 09:04:26 2024 -0500
Merge pull request #1523 from GeoBaltz/rp7
Convert all cache references to pointers
commit c7665cb7d115acc12f57144c4f3431196241852f
Author: George Baltz N3GB <Geo...@gm...>
Date: Sat Mar 9 21:23:01 2024 -0500
All struct rig_cache referenced converted to pointers.
diff --git a/tests/rigctlcom.c b/tests/rigctlcom.c
index f1a285576..cadcb6904 100644
--- a/tests/rigctlcom.c
+++ b/tests/rigctlcom.c
@@ -665,7 +665,7 @@ static rmode_t ts2000_get_mode()
{
rmode_t mode;
pbwidth_t width;
- rig_get_mode(my_rig, vfo_fixup(my_rig, RIG_VFO_A, my_rig->state.cache.split),
+ rig_get_mode(my_rig, vfo_fixup(my_rig, RIG_VFO_A, CACHE(my_rig)->split),
&mode, &width);
kwidth = width;
#if 0
@@ -802,8 +802,8 @@ static int handle_ts2000(void *arg)
int p13 = 0; // P13(1) Tone dummy value for now
int p14 = 0; // P14(2) Tone Freq dummy value for now
int p15 = 0; // P15(1) Shift status dummy value for now
- int retval = rig_get_freq(my_rig, vfo_fixup(my_rig, RIG_VFO_A,
- my_rig->state.cache.split), &freq);
+ int retval = rig_get_freq(my_rig, vfo_fixup(my_rig, RIG_VFO_A, CACHE(my_rig)->split),
+ &freq);
char response[64];
char *fmt =
// cppcheck-suppress *
@@ -815,8 +815,8 @@ static int handle_ts2000(void *arg)
}
mode = ts2000_get_mode();
- retval = rig_get_ptt(my_rig, vfo_fixup(my_rig, RIG_VFO_A,
- my_rig->state.cache.split), &ptt);
+ retval = rig_get_ptt(my_rig, vfo_fixup(my_rig, RIG_VFO_A, CACHE(my_rig)->split),
+ &ptt);
if (retval != RIG_OK)
{
@@ -900,8 +900,8 @@ static int handle_ts2000(void *arg)
freq_t freq = 0;
char response[32];
- int retval = rig_get_freq(my_rig, vfo_fixup(my_rig, RIG_VFO_A,
- my_rig->state.cache.split), &freq);
+ int retval = rig_get_freq(my_rig, vfo_fixup(my_rig, RIG_VFO_A, CACHE(my_rig)->split),
+ &freq);
if (retval != RIG_OK)
{
@@ -917,8 +917,8 @@ static int handle_ts2000(void *arg)
{
char response[32];
freq_t freq = 0;
- int retval = rig_get_freq(my_rig, vfo_fixup(my_rig, RIG_VFO_B,
- my_rig->state.cache.split), &freq);
+ int retval = rig_get_freq(my_rig, vfo_fixup(my_rig, RIG_VFO_B, CACHE(my_rig)->split),
+ &freq);
if (retval != RIG_OK)
{
@@ -941,7 +941,7 @@ static int handle_ts2000(void *arg)
{
char response[32];
- rig_set_ptt(my_rig, vfo_fixup(my_rig, RIG_VFO_A, my_rig->state.cache.split), 0);
+ rig_set_ptt(my_rig, vfo_fixup(my_rig, RIG_VFO_A, CACHE(my_rig)->split), 0);
SNPRINTF(response, sizeof(response), "RX0;");
return write_block2((void *)__func__, &my_com, response, strlen(response));
}
@@ -972,8 +972,7 @@ static int handle_ts2000(void *arg)
}
else if (strcmp(arg, "TX;") == 0)
{
- return rig_set_ptt(my_rig, vfo_fixup(my_rig, RIG_VFO_A,
- my_rig->state.cache.split), 1);
+ return rig_set_ptt(my_rig, vfo_fixup(my_rig, RIG_VFO_A, CACHE(my_rig)->split), 1);
}
else if (strcmp(arg, "AI0;") == 0)
{
@@ -987,13 +986,11 @@ static int handle_ts2000(void *arg)
}
else if (strcmp(arg, "FR0;") == 0)
{
- return rig_set_vfo(my_rig, vfo_fixup(my_rig, RIG_VFO_A,
- my_rig->state.cache.split));
+ return rig_set_vfo(my_rig, vfo_fixup(my_rig, RIG_VFO_A, CACHE(my_rig)->split));
}
else if (strcmp(arg, "FR1;") == 0)
{
- return rig_set_vfo(my_rig, vfo_fixup(my_rig, RIG_VFO_B,
- my_rig->state.cache.split));
+ return rig_set_vfo(my_rig, vfo_fixup(my_rig, RIG_VFO_B, CACHE(my_rig)->split));
}
else if (strcmp(arg, "FR;") == 0)
{
@@ -1013,8 +1010,8 @@ static int handle_ts2000(void *arg)
}
- if (vfo == vfo_fixup(my_rig, RIG_VFO_A, my_rig->state.cache.split)) { nvfo = 0; }
- else if (vfo == vfo_fixup(my_rig, RIG_VFO_B, my_rig->state.cache.split)) { nvfo = 1; }
+ if (vfo == vfo_fixup(my_rig, RIG_VFO_A, CACHE(my_rig)->split)) { nvfo = 0; }
+ else if (vfo == vfo_fixup(my_rig, RIG_VFO_B, CACHE(my_rig)->split)) { nvfo = 1; }
else
{
retval = -RIG_EPROTO;
@@ -1029,7 +1026,7 @@ static int handle_ts2000(void *arg)
else if (strcmp(arg, "FT;") == 0)
{
char response[32];
- vfo_t vfo, vfo_curr = vfo_fixup(my_rig, RIG_VFO_A, my_rig->state.cache.split);
+ vfo_t vfo, vfo_curr = vfo_fixup(my_rig, RIG_VFO_A, CACHE(my_rig)->split);
split_t split;
int nvfo = 0;
int retval = rig_get_split_vfo(my_rig, vfo_curr, &split, &vfo);
@@ -1042,8 +1039,8 @@ static int handle_ts2000(void *arg)
}
- if (vfo == vfo_fixup(my_rig, RIG_VFO_A, my_rig->state.cache.split)) { nvfo = 0; }
- else if (vfo == vfo_fixup(my_rig, RIG_VFO_B, my_rig->state.cache.split)) { nvfo = 1; }
+ if (vfo == vfo_fixup(my_rig, RIG_VFO_A, CACHE(my_rig)->split)) { nvfo = 0; }
+ else if (vfo == vfo_fixup(my_rig, RIG_VFO_B, CACHE(my_rig)->split)) { nvfo = 1; }
else
{
retval = -RIG_EPROTO;
@@ -1092,9 +1089,8 @@ static int handle_ts2000(void *arg)
{
char response[32];
int valA;
- int retval = rig_get_func(my_rig, vfo_fixup(my_rig, RIG_VFO_A,
- my_rig->state.cache.split), RIG_FUNC_AIP,
- &valA);
+ int retval = rig_get_func(my_rig, vfo_fixup(my_rig, RIG_VFO_A, CACHE(my_rig)->split),
+ RIG_FUNC_AIP, &valA);
int valB;
if (retval != RIG_OK)
@@ -1112,9 +1108,8 @@ static int handle_ts2000(void *arg)
return retval;
}
- retval = rig_get_func(my_rig, vfo_fixup(my_rig, RIG_VFO_B,
- my_rig->state.cache.split), RIG_FUNC_AIP,
- &valB);
+ retval = rig_get_func(my_rig, vfo_fixup(my_rig, RIG_VFO_B, CACHE(my_rig)->split),
+ RIG_FUNC_AIP, &valB);
if (retval != RIG_OK)
{
@@ -1139,8 +1134,8 @@ static int handle_ts2000(void *arg)
(char *)arg);
}
- retval = rig_set_func(my_rig, vfo_fixup(my_rig, RIG_VFO_A,
- my_rig->state.cache.split), RIG_FUNC_AIP, valA);
+ retval = rig_set_func(my_rig, vfo_fixup(my_rig, RIG_VFO_A, CACHE(my_rig)->split),
+ RIG_FUNC_AIP, valA);
if (retval != RIG_OK)
{
@@ -1149,8 +1144,8 @@ static int handle_ts2000(void *arg)
return retval;
}
- retval = rig_set_func(my_rig, vfo_fixup(my_rig, RIG_VFO_B,
- my_rig->state.cache.split), RIG_FUNC_AIP, valB);
+ retval = rig_set_func(my_rig, vfo_fixup(my_rig, RIG_VFO_B, CACHE(my_rig)->split),
+ RIG_FUNC_AIP, valB);
if (retval != RIG_OK)
{
@@ -1515,7 +1510,7 @@ static int handle_ts2000(void *arg)
}
else if (strcmp(arg, "DC;") == 0)
{
- vfo_t vfo, vfo_curr = vfo_fixup(my_rig, RIG_VFO_A, my_rig->state.cache.split);
+ vfo_t vfo, vfo_curr = vfo_fixup(my_rig, RIG_VFO_A, CACHE(my_rig)->split);
split_t split;
char response[32];
int retval = rig_get_split_vfo(my_rig, vfo_curr, &split, &vfo);
@@ -1534,7 +1529,7 @@ static int handle_ts2000(void *arg)
}
else if (strncmp(arg, "DC", 2) == 0)
{
- vfo_t vfo_curr = vfo_fixup(my_rig, RIG_VFO_A, my_rig->state.cache.split);
+ vfo_t vfo_curr = vfo_fixup(my_rig, RIG_VFO_A, CACHE(my_rig)->split);
split_t split;
int isplit;
int retval;
@@ -1565,15 +1560,13 @@ static int handle_ts2000(void *arg)
}
else if (strcmp(arg, "FT0;") == 0)
{
- return rig_set_split_vfo(my_rig, vfo_fixup(my_rig, RIG_VFO_A,
- my_rig->state.cache.split), vfo_fixup(my_rig,
- RIG_VFO_A, my_rig->state.cache.split), 0);
+ return rig_set_split_vfo(my_rig, vfo_fixup(my_rig, RIG_VFO_A, CACHE(my_rig)->split),
+ vfo_fixup(my_rig, RIG_VFO_A, CACHE(my_rig)->split), 0);
}
else if (strcmp(arg, "FT1;") == 0)
{
- return rig_set_split_vfo(my_rig, vfo_fixup(my_rig, RIG_VFO_B,
- my_rig->state.cache.split), vfo_fixup(my_rig,
- RIG_VFO_B, my_rig->state.cache.split), 0);
+ return rig_set_split_vfo(my_rig, vfo_fixup(my_rig, RIG_VFO_B, CACHE(my_rig)->split),
+ vfo_fixup(my_rig, RIG_VFO_B, CACHE(my_rig)->split), 0);
}
else if (strncmp(arg, "FA0", 3) == 0)
{
@@ -1583,16 +1576,14 @@ static int handle_ts2000(void *arg)
if (mapa2b) { vfo = RIG_VFO_B; }
sscanf((char *)arg + 2, "%"SCNfreq, &freq);
- return rig_set_freq(my_rig, vfo_fixup(my_rig, vfo,
- my_rig->state.cache.split), freq);
+ return rig_set_freq(my_rig, vfo_fixup(my_rig, vfo, CACHE(my_rig)->split), freq);
}
else if (strncmp(arg, "FB0", 3) == 0)
{
freq_t freq;
sscanf((char *)arg + 2, "%"SCNfreq, &freq);
- return rig_set_freq(my_rig, vfo_fixup(my_rig, RIG_VFO_B,
- my_rig->state.cache.split), freq);
+ return rig_set_freq(my_rig, vfo_fixup(my_rig, RIG_VFO_B, CACHE(my_rig)->split), freq);
}
else if (strncmp(arg, "MD", 2) == 0)
{
commit aa0d83df959ec7dcd76546be45a72a17552db98f
Author: George Baltz N3GB <Geo...@gm...>
Date: Sat Mar 9 14:25:59 2024 -0500
Use pointers for all cache references in rigs/*
diff --git a/rigs/kenwood/ts2000.c b/rigs/kenwood/ts2000.c
index 817156439..a1e2bf999 100644
--- a/rigs/kenwood/ts2000.c
+++ b/rigs/kenwood/ts2000.c
@@ -692,7 +692,7 @@ static int ts2000_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
return RIG_OK;
case RIG_LEVEL_STRENGTH:
- if (rig->state.cache.ptt != RIG_PTT_OFF)
+ if (CACHE(rig)->ptt != RIG_PTT_OFF)
{
val->i = -9 * 6;
break;
@@ -879,7 +879,7 @@ static int ts2000_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
int raw_value;
char read_vfo_num;
- if (rig->state.cache.ptt == RIG_PTT_OFF)
+ if (CACHE(rig)->ptt == RIG_PTT_OFF)
{
val->f = 0;
break;
diff --git a/rigs/kenwood/ts480.c b/rigs/kenwood/ts480.c
index 3cd3579c1..f9034ad7b 100644
--- a/rigs/kenwood/ts480.c
+++ b/rigs/kenwood/ts480.c
@@ -581,7 +581,7 @@ kenwood_ts480_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
return RIG_OK;
case RIG_LEVEL_STRENGTH:
- if (rig->state.cache.ptt != RIG_PTT_OFF)
+ if (CACHE(rig)->ptt != RIG_PTT_OFF)
{
val->i = -9 * 6;
break;
@@ -708,7 +708,7 @@ kenwood_ts480_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
{
int raw_value;
- if (rig->state.cache.ptt == RIG_PTT_OFF)
+ if (CACHE(rig)->ptt == RIG_PTT_OFF)
{
val->f = 0;
break;
@@ -2198,15 +2198,16 @@ int malachite_get_freq(RIG *rig, vfo_t vfo, freq_t *freq)
int malachite_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
{
int retval;
+ struct rig_cache *cachep = CACHE(rig);
ENTERFUNC;
rig_debug(RIG_DEBUG_TRACE, "%s: freqMainA=%g, freq=%g\n", __func__,
- rig->state.cache.freqMainA, freq);
+ cachep->freqMainA, freq);
- if ((rig->state.cache.freqMainA < 400000000 && freq >= 400000000)
- || (rig->state.cache.freqMainA >= 400000000 && freq < 400000000)
- || rig->state.cache.freqMainA == 0)
+ if ((cachep->freqMainA < 400000000 && freq >= 400000000)
+ || (cachep->freqMainA >= 400000000 && freq < 400000000)
+ || cachep->freqMainA == 0)
{
// Malachite has a bug where it takes two freq set to make it work
// under band changes -- so we just do this all the time
diff --git a/rigs/kenwood/ts590.c b/rigs/kenwood/ts590.c
index a995182e3..84903494c 100644
--- a/rigs/kenwood/ts590.c
+++ b/rigs/kenwood/ts590.c
@@ -240,7 +240,7 @@ static int ts590_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
if (!sf_fails)
{
SNPRINTF(cmd, sizeof(cmd), "SF%d%011.0f%c", vfo == RIG_VFO_A ? 0 : 1,
- vfo == RIG_VFO_A ? rig->state.cache.freqMainA : rig->state.cache.freqMainB,
+ vfo == RIG_VFO_A ? CACHE(rig)->freqMainA : CACHE(rig)->freqMainB,
c);
retval = kenwood_transaction(rig, cmd, NULL, 0);
}
@@ -328,7 +328,7 @@ static int ts590_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
if (vfo == RIG_VFO_CURR) { vfo = rig->state.current_vfo; }
- if (vfo == RIG_VFO_TX || vfo == RIG_VFO_RX) { vfo = vfo_fixup(rig, vfo, rig->state.cache.split); }
+ if (vfo == RIG_VFO_TX || vfo == RIG_VFO_RX) { vfo = vfo_fixup(rig, vfo, CACHE(rig)->split); }
retval = RIG_OK;
@@ -875,7 +875,7 @@ static int ts590_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
return RIG_OK;
case RIG_LEVEL_STRENGTH:
- if (rig->state.cache.ptt != RIG_PTT_OFF)
+ if (CACHE(rig)->ptt != RIG_PTT_OFF)
{
val->i = -9 * 6;
break;
@@ -1022,7 +1022,7 @@ static int ts590_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
int raw_value;
- if (rig->state.cache.ptt == RIG_PTT_OFF)
+ if (CACHE(rig)->ptt == RIG_PTT_OFF)
{
val->f = 0;
break;
diff --git a/rigs/yaesu/ft100.c b/rigs/yaesu/ft100.c
index e243f0341..47623ddeb 100644
--- a/rigs/yaesu/ft100.c
+++ b/rigs/yaesu/ft100.c
@@ -914,7 +914,7 @@ int ft100_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt)
{
unsigned char cmd_index;
- int split = rig->state.cache.split;
+ int split = CACHE(rig)->split;
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
@@ -971,8 +971,8 @@ int ft100_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
{
int ret;
- int split = rig->state.cache.split;
- int ptt = rig->state.cache.ptt;
+ int split = CACHE(rig)->split;
+ int ptt = CACHE(rig)->ptt;
FT100_METER_INFO ft100_meter;
diff --git a/rigs/yaesu/ft1000d.c b/rigs/yaesu/ft1000d.c
index bf99876ce..bb67ec7c0 100644
--- a/rigs/yaesu/ft1000d.c
+++ b/rigs/yaesu/ft1000d.c
@@ -4121,11 +4121,11 @@ static int ft1000_get_freq(RIG *rig, vfo_t vfo, freq_t *freq)
if (vfo == RIG_VFO_A)
{
- *freq = rig->state.cache.freqMainA;
+ *freq = CACHE(rig)->freqMainA;
}
else
{
- *freq = rig->state.cache.freqMainB;
+ *freq = CACHE(rig)->freqMainB;
}
return RIG_OK;
@@ -4135,11 +4135,11 @@ static int ft1000_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
{
if (vfo == RIG_VFO_A)
{
- *mode = rig->state.cache.modeMainA;
+ *mode = CACHE(rig)->modeMainA;
}
else
{
- *mode = rig->state.cache.modeMainB;
+ *mode = CACHE(rig)->modeMainB;
}
return RIG_OK;
@@ -4153,7 +4153,7 @@ static int ft1000_get_vfo(RIG *rig, vfo_t *vfo)
static int ft1000_get_ptt(RIG *rig, vfo_t vfo, ptt_t *ptt)
{
- *ptt = rig->state.cache.ptt;
+ *ptt = CACHE(rig)->ptt;
return RIG_OK;
}
diff --git a/rigs/yaesu/ft1000mp.c b/rigs/yaesu/ft1000mp.c
index 7e171da55..084a9c7c4 100644
--- a/rigs/yaesu/ft1000mp.c
+++ b/rigs/yaesu/ft1000mp.c
@@ -932,11 +932,11 @@ static int ft1000mp_get_freq(RIG *rig, vfo_t vfo, freq_t *freq)
if (vfo == RIG_VFO_A)
{
- *freq = rig->state.cache.freqMainA;
+ *freq = CACHE(rig)->freqMainA;
}
else
{
- *freq = rig->state.cache.freqMainB;
+ *freq = CACHE(rig)->freqMainB;
}
return RIG_OK;
@@ -1818,8 +1818,8 @@ static int ft1000mp_set_split_freq_mode(RIG *rig, vfo_t vfo, freq_t freq,
if (retval == RIG_OK)
{
- rig->state.cache.freqMainB = freq;
- rig->state.cache.modeMainB = mode;
+ CACHE(rig)->freqMainB = freq;
+ CACHE(rig)->modeMainB = mode;
}
RETURNFUNC(retval);
@@ -1842,8 +1842,8 @@ static int ft1000mp_get_split_freq_mode(RIG *rig, vfo_t vfo, freq_t *freq,
if (retval == RIG_OK)
{
- rig->state.cache.freqMainB = *freq;
- rig->state.cache.modeMainB = *mode;
+ CACHE(rig)->freqMainB = *freq;
+ CACHE(rig)->modeMainB = *mode;
}
RETURNFUNC(retval);
diff --git a/rigs/yaesu/ft736.c b/rigs/yaesu/ft736.c
index 69cf8d2e6..68f62d43a 100644
--- a/rigs/yaesu/ft736.c
+++ b/rigs/yaesu/ft736.c
@@ -298,7 +298,7 @@ int ft736_get_freq(RIG *rig, vfo_t vfo, freq_t *freq)
{
rig_debug(RIG_DEBUG_VERBOSE, "%s: called\n", __func__);
- if (vfo == RIG_VFO_A || vfo == RIG_VFO_MAIN) { *freq = rig->state.cache.freqMainA; }
+ if (vfo == RIG_VFO_A || vfo == RIG_VFO_MAIN) { *freq = CACHE(rig)->freqMainA; }
else { rig_get_cache_freq(rig, vfo, freq, NULL); }
return RIG_OK;
diff --git a/rigs/yaesu/ft747.c b/rigs/yaesu/ft747.c
index 52f951565..74a45c7d0 100644
--- a/rigs/yaesu/ft747.c
+++ b/rigs/yaesu/ft747.c
@@ -579,18 +579,19 @@ int ft747_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
int ft747_get_freq(RIG *rig, vfo_t vfo, freq_t *freq)
{
struct ft747_priv_data *p;
+ struct rig_cache *cachep = CACHE(rig);
freq_t f;
int ret;
rig_debug(RIG_DEBUG_VERBOSE,
"%s: called vfo=%s, freqMainA=%.0f, freqMainB=%.0f\n", __func__,
- rig_strvfo(vfo), rig->state.cache.freqMainA, rig->state.cache.freqMainB);
+ rig_strvfo(vfo), cachep->freqMainA, cachep->freqMainB);
- if (vfo == RIG_VFO_CURR) { vfo = rig->state.cache.vfo; }
+ if (vfo == RIG_VFO_CURR) { vfo = cachep->vfo; }
- if (rig->state.cache.ptt == RIG_PTT_ON)
+ if (cachep->ptt == RIG_PTT_ON)
{
- *freq = RIG_VFO_B ? rig->state.cache.freqMainB : rig->state.cache.freqMainA;
+ *freq = RIG_VFO_B ? cachep->freqMainB : cachep->freqMainA;
return RIG_OK;
}
@@ -1005,7 +1006,7 @@ static int ft747_get_update_data(RIG *rig)
p = (struct ft747_priv_data *)rig->state.priv;
rigport = RIGPORT(rig);
- if (rig->state.cache.ptt == RIG_PTT_ON
+ if (CACHE(rig)->ptt == RIG_PTT_ON
|| !rig_check_cache_timeout(&p->status_tv, FT747_CACHE_TIMEOUT))
{
return RIG_OK;
diff --git a/rigs/yaesu/ft817.c b/rigs/yaesu/ft817.c
index 950379e0b..4d239014f 100644
--- a/rigs/yaesu/ft817.c
+++ b/rigs/yaesu/ft817.c
@@ -988,16 +988,17 @@ static int ft817_get_freq(RIG *rig, vfo_t vfo, freq_t *freq)
{
struct ft817_priv_data *p = (struct ft817_priv_data *) rig->state.priv;
freq_t f1 = 0, f2 = 0;
+ struct rig_cache *cachep = CACHE(rig);
int retries = RIGPORT(rig)->retry +
1; // +1 because, because 2 steps are needed even in best scenario
rig_debug(RIG_DEBUG_VERBOSE, "%s: called, vfo=%s, ptt=%d, split=%d\n", __func__,
- rig_strvfo(vfo), rig->state.cache.ptt, rig->state.cache.split);
+ rig_strvfo(vfo), cachep->ptt, cachep->split);
// we can't query VFOB while in transmit and split mode
- if (rig->state.cache.ptt && vfo == RIG_VFO_B && rig->state.cache.split)
+ if (cachep->ptt && vfo == RIG_VFO_B && cachep->split)
{
- *freq = rig->state.cache.freqMainB;
+ *freq = cachep->freqMainB;
return RIG_OK;
}
@@ -2127,7 +2128,7 @@ static int ft817_set_split_vfo(RIG *rig, vfo_t vfo, split_t split, vfo_t tx_vfo)
return n;
}
- rig->state.cache.split = split;
+ CACHE(rig)->split = split;
return RIG_OK;
diff --git a/rigs/yaesu/ft857.c b/rigs/yaesu/ft857.c
index 935a0b8ab..ace4e7874 100644
--- a/rigs/yaesu/ft857.c
+++ b/rigs/yaesu/ft857.c
@@ -615,14 +615,14 @@ int ft857_get_vfo(RIG *rig, vfo_t *vfo)
// Some 857's cannot read so we'll just return the cached value if we've seen an error
if (ignore)
{
- *vfo = rig->state.cache.vfo;
+ *vfo = CACHE(rig)->vfo;
return RIG_OK;
}
if (ft857_read_eeprom(rig, 0x0068, &c) < 0) /* get vfo status */
{
ignore = 1;
- *vfo = rig->state.cache.vfo;
+ *vfo = CACHE(rig)->vfo;
return RIG_OK;
}
diff --git a/rigs/yaesu/ft990v12.c b/rigs/yaesu/ft990v12.c
index 1d165ee76..00eed8314 100644
--- a/rigs/yaesu/ft990v12.c
+++ b/rigs/yaesu/ft990v12.c
@@ -701,7 +701,7 @@ int ft990v12_get_freq(RIG *rig, vfo_t vfo, freq_t *freq)
else
{
// M0EZP: Uni use cache
-// *freq = vfo == RIG_VFO_A ? rig->state.cache.freqMainA : rig->state.cache.freqMainB;
+// *freq = vfo == RIG_VFO_A ? CACHE(rig)->freqMainA : CACHE(rig)->freqMainB;
return (RIG_OK);
}
}
diff --git a/rigs/yaesu/ft991.c b/rigs/yaesu/ft991.c
index 47d9d484f..70e3e8b5f 100644
--- a/rigs/yaesu/ft991.c
+++ b/rigs/yaesu/ft991.c
@@ -458,7 +458,7 @@ ft991_set_split_freq(RIG *rig, vfo_t vfo, freq_t tx_freq)
return (rval);
}
- if (rig->state.cache.freqMainB == tx_freq)
+ if (CACHE(rig)->freqMainB == tx_freq)
{
rig_debug(RIG_DEBUG_TRACE, "%s: freq %.0f already set on VFOB\n", __func__,
tx_freq);
@@ -635,7 +635,7 @@ static int ft991_set_split_mode(RIG *rig, vfo_t vfo, rmode_t tx_mode,
return -RIG_EINVAL;
}
- if (rig->state.cache.modeMainB == tx_mode)
+ if (CACHE(rig)->modeMainB == tx_mode)
{
rig_debug(RIG_DEBUG_TRACE, "%s: mode %s already set on VFOB\n", __func__,
rig_strrmode(tx_mode));
diff --git a/rigs/yaesu/newcat.c b/rigs/yaesu/newcat.c
index 6242a8b40..5b5665543 100644
--- a/rigs/yaesu/newcat.c
+++ b/rigs/yaesu/newcat.c
@@ -936,17 +936,18 @@ int newcat_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
char target_vfo;
int err;
struct rig_caps *caps;
+ struct rig_cache *cachep = CACHE(rig);
struct newcat_priv_data *priv;
int special_60m = 0;
vfo_t vfo_mode;
ENTERFUNC;
- if (newcat_60m_exception(rig, freq, rig->state.cache.modeMainA))
+ if (newcat_60m_exception(rig, freq, cachep->modeMainA))
{
// we don't try to set freq on 60m for some rigs since we must be in memory mode
// and we can't run split mode on 60M memory mode either
- if (rig->state.cache.split == RIG_SPLIT_ON)
+ if (cachep->split == RIG_SPLIT_ON)
{
rig_set_split_vfo(rig, RIG_VFO_A, RIG_VFO_A, RIG_SPLIT_OFF);
}
@@ -1029,16 +1030,16 @@ int newcat_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
// some rigs like FTDX101D cannot change non-TX vfo freq
// but they can change the TX vfo
- if ((is_ftdx101d || is_ftdx101mp) && rig->state.cache.ptt == RIG_PTT_ON)
+ if ((is_ftdx101d || is_ftdx101mp) && cachep->ptt == RIG_PTT_ON)
{
rig_debug(RIG_DEBUG_TRACE, "%s: ftdx101 check vfo OK, vfo=%s, tx_vfo=%s\n",
__func__, rig_strvfo(vfo), rig_strvfo(rig->state.tx_vfo));
// when in split we can change VFOB but not VFOA
- if (rig->state.cache.split == RIG_SPLIT_ON && target_vfo == '0') { return -RIG_ENTARGET; }
+ if (cachep->split == RIG_SPLIT_ON && target_vfo == '0') { return -RIG_ENTARGET; }
// when not in split we can't change VFOA at all
- if (rig->state.cache.split == RIG_SPLIT_OFF && target_vfo == '0') { return -RIG_ENTARGET; }
+ if (cachep->split == RIG_SPLIT_OFF && target_vfo == '0') { return -RIG_ENTARGET; }
if (vfo != rig->state.tx_vfo) { return -RIG_ENTARGET; }
}
@@ -1077,7 +1078,7 @@ int newcat_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
and select the correct VFO before setting the frequency
*/
// Plus we can't do the VFO swap if transmitting
- if (target_vfo == '1' && rig->state.cache.ptt == RIG_PTT_ON) { RETURNFUNC(-RIG_ENTARGET); }
+ if (target_vfo == '1' && cachep->ptt == RIG_PTT_ON) { RETURNFUNC(-RIG_ENTARGET); }
SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "VS%c", cat_term);
@@ -1147,7 +1148,7 @@ int newcat_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
if (newcat_valid_command(rig, "BS") && changing
&& !rig->state.disable_yaesu_bandselect
// remove the split check here -- hopefully works OK
- //&& !rig->state.cache.split
+ //&& !cachep->split
// seems some rigs are problematic
// && !(is_ftdx3000 || is_ftdx3000dm)
// some rigs can't do BS command on 60M
@@ -1331,8 +1332,8 @@ int newcat_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
// just drop through
}
- rig_debug(RIG_DEBUG_ERR, "%s: is_ft991=%d, rig->state.cache.split=%d, vfo=%s\n",
- __func__, is_ft991, rig->state.cache.split, rig_strvfo(vfo));
+ rig_debug(RIG_DEBUG_ERR, "%s: is_ft991=%d, CACHE(rig)->split=%d, vfo=%s\n",
+ __func__, is_ft991, cachep->split, rig_strvfo(vfo));
if (priv->band_index < 0) { priv->band_index = newcat_band_index(freq); }
@@ -1340,7 +1341,7 @@ int newcat_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
// there are multiple bandstacks so we just use the 1st one
if (is_ft991 && vfo == RIG_VFO_A && priv->band_index != newcat_band_index(freq))
{
- if (rig->state.cache.split)
+ if (cachep->split)
{
// FT991/991A bandstack does not work in split mode
// so for a VFOA change we stop split, change bands, change freq, enable split
@@ -1493,16 +1494,17 @@ int newcat_get_freq(RIG *rig, vfo_t vfo, freq_t *freq)
int newcat_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
{
struct newcat_priv_data *priv;
+ struct rig_cache *cachep = CACHE(rig);
int err;
rmode_t tmode;
pbwidth_t twidth;
- split_t split_save = rig->state.cache.split;
+ split_t split_save = cachep->split;
priv = (struct newcat_priv_data *)rig->state.priv;
ENTERFUNC;
- if (newcat_60m_exception(rig, rig->state.cache.freqMainA, mode)) { RETURNFUNC(RIG_OK); } // we don't set mode in this case
+ if (newcat_60m_exception(rig, cachep->freqMainA, mode)) { RETURNFUNC(RIG_OK); } // we don't set mode in this case
if (!newcat_valid_command(rig, "MD"))
{
@@ -1571,11 +1573,11 @@ int newcat_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
if (vfo == RIG_VFO_A || vfo == RIG_VFO_MAIN)
{
- rig->state.cache.modeMainA = mode;
+ cachep->modeMainA = mode;
}
else
{
- rig->state.cache.modeMainB = mode;
+ cachep->modeMainB = mode;
}
if (RIG_PASSBAND_NOCHANGE == width) { RETURNFUNC(err); }
@@ -1705,7 +1707,7 @@ int newcat_set_vfo(RIG *rig, vfo_t vfo)
rig_strvfo(vfo));
// we can't change VFO while transmitting
- if (rig->state.cache.ptt == RIG_PTT_ON) { RETURNFUNC(RIG_OK); }
+ if (CACHE(rig)->ptt == RIG_PTT_ON) { RETURNFUNC(RIG_OK); }
if (!newcat_valid_command(rig, command))
{
@@ -2712,11 +2714,11 @@ int newcat_set_split_mode(RIG *rig, vfo_t vfo, rmode_t tx_mode,
if (vfo == RIG_VFO_A || vfo == RIG_VFO_MAIN)
{
- rig->state.cache.modeMainA = tx_mode;
+ CACHE(rig)->modeMainA = tx_mode;
}
else
{
- rig->state.cache.modeMainB = tx_mode;
+ CACHE(rig)->modeMainB = tx_mode;
}
@@ -2758,8 +2760,8 @@ int newcat_set_split_vfo(RIG *rig, vfo_t vfo, split_t split, vfo_t tx_vfo)
RETURNFUNC(err);
}
- if (newcat_60m_exception(rig, rig->state.cache.freqMainA,
- rig->state.cache.modeMainA))
+ if (newcat_60m_exception(rig, CACHE(rig)->freqMainA,
+ CACHE(rig)->modeMainA))
{
rig_debug(RIG_DEBUG_VERBOSE,
"%s: force set_split off since we're on 60M exception\n", __func__);
@@ -4088,7 +4090,8 @@ static int band2rig(hamlib_band_t band)
int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
{
- struct rig_state *state = &rig->state;
+ struct rig_state *state = STATE(rig);
+ struct rig_cache *cachep = CACHE(rig);
struct newcat_priv_data *priv = (struct newcat_priv_data *)rig->state.priv;
int err;
int i;
@@ -4300,9 +4303,9 @@ int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
rmode_t exclude = RIG_MODE_CW | RIG_MODE_CWR | RIG_MODE_RTTY | RIG_MODE_RTTYR;
- if ((rig->state.tx_vfo == RIG_VFO_A && (rig->state.cache.modeMainA & exclude))
- || (rig->state.tx_vfo == RIG_VFO_B && (rig->state.cache.modeMainB & exclude))
- || (rig->state.tx_vfo == RIG_VFO_C && (rig->state.cache.modeMainC & exclude)))
+ if ((rig->state.tx_vfo == RIG_VFO_A && (cachep->modeMainA & exclude))
+ || (rig->state.tx_vfo == RIG_VFO_B && (cachep->modeMainB & exclude))
+ || (rig->state.tx_vfo == RIG_VFO_C && (cachep->modeMainC & exclude)))
{
rig_debug(RIG_DEBUG_VERBOSE, "%s: rig cannot set MG in CW/RTTY modes\n",
__func__);
@@ -4906,7 +4909,7 @@ int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
if (is_ftdx101d || is_ftdx101mp)
{
rmode_t curmode = rig->state.current_vfo == RIG_VFO_A ?
- rig->state.cache.modeMainA : rig->state.cache.modeMainB;
+ cachep->modeMainA : cachep->modeMainB;
float valf = val.f / level_info->step.f;
switch (curmode)
@@ -4960,7 +4963,8 @@ int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
int newcat_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
{
- struct rig_state *state = &rig->state;
+ struct rig_state *state = STATE(rig);
+ struct rig_cache *cachep = CACHE(rig);
struct newcat_priv_data *priv = (struct newcat_priv_data *)rig->state.priv;
int err;
int ret_data_len;
@@ -5117,9 +5121,9 @@ int newcat_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
rmode_t exclude = RIG_MODE_CW | RIG_MODE_CWR | RIG_MODE_RTTY | RIG_MODE_RTTYR;
- if ((rig->state.tx_vfo == RIG_VFO_A && (rig->state.cache.modeMainA & exclude))
- || (rig->state.tx_vfo == RIG_VFO_B && (rig->state.cache.modeMainB & exclude))
- || (rig->state.tx_vfo == RIG_VFO_C && (rig->state.cache.modeMainC & exclude)))
+ if ((rig->state.tx_vfo == RIG_VFO_A && (cachep->modeMainA & exclude))
+ || (rig->state.tx_vfo == RIG_VFO_B && (cachep->modeMainB & exclude))
+ || (rig->state.tx_vfo == RIG_VFO_C && (cachep->modeMainC & exclude)))
{
rig_debug(RIG_DEBUG_VERBOSE, "%s: rig cannot read MG in CW/RTTY modes\n",
__func__);
@@ -5502,7 +5506,7 @@ int newcat_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
if (is_ftdx101d || is_ftdx101mp)
{
rmode_t curmode = rig->state.current_vfo == RIG_VFO_A ?
- rig->state.cache.modeMainA : rig->state.cache.modeMainB;
+ cachep->modeMainA : cachep->modeMainB;
switch (curmode)
{
@@ -5544,7 +5548,7 @@ int newcat_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
if (is_ftdx101d || is_ftdx101mp)
{
rmode_t curmode = rig->state.current_vfo == RIG_VFO_A ?
- rig->state.cache.modeMainA : rig->state.cache.modeMainB;
+ cachep->modeMainA : cachep->modeMainB;
switch (curmode)
{
commit 609065775c49da604d38b46b3fee601910d06e5d
Author: George Baltz N3GB <Geo...@gm...>
Date: Fri Mar 8 10:28:03 2024 -0500
Update some of rigs/* to use pointer to cache
Issue #536
diff --git a/rigs/dummy/dummy.c b/rigs/dummy/dummy.c
index b61f24f8e..239a8a3d6 100644
--- a/rigs/dummy/dummy.c
+++ b/rigs/dummy/dummy.c
@@ -446,7 +446,7 @@ static int dummy_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
if (vfo == RIG_VFO_CURR) { vfo = priv->curr_vfo; }
- if (vfo == RIG_VFO_CURR || vfo == RIG_VFO_TX) { vfo = vfo_fixup(rig, vfo, rig->state.cache.split); }
+ if (vfo == RIG_VFO_CURR || vfo == RIG_VFO_TX) { vfo = vfo_fixup(rig, vfo, CACHE(rig)->split); }
// if needed for testing enable this to emulate a rig with 100hz resolution
#if 0
@@ -534,6 +534,7 @@ static int dummy_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
{
struct dummy_priv_data *priv = (struct dummy_priv_data *)rig->state.priv;
channel_t *curr = priv->curr;
+ struct rig_cache *cachep = CACHE(rig);
char buf[16];
ENTERFUNC;
@@ -542,7 +543,7 @@ static int dummy_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
rig_debug(RIG_DEBUG_VERBOSE, "%s called: %s %s %s\n", __func__,
rig_strvfo(vfo), rig_strrmode(mode), buf);
- vfo = vfo_fixup(rig, vfo, rig->state.cache.split);
+ vfo = vfo_fixup(rig, vfo, cachep->split);
if (vfo == RIG_VFO_CURR) { vfo = priv->curr_vfo; }
@@ -587,7 +588,7 @@ static int dummy_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
RETURNFUNC(-RIG_EINVAL);
}
- vfo = vfo_fixup(rig, vfo, rig->state.cache.split);
+ vfo = vfo_fixup(rig, vfo, cachep->split);
if (RIG_PASSBAND_NOCHANGE == width) { RETURNFUNC(RIG_OK); }
@@ -1085,7 +1086,7 @@ static int dummy_set_split_vfo(RIG *rig, vfo_t vfo, split_t split, vfo_t tx_vfo)
if (tx_vfo == RIG_VFO_NONE || tx_vfo == RIG_VFO_CURR) { tx_vfo = priv->curr_vfo; }
- if (tx_vfo == RIG_VFO_CURR || tx_vfo == RIG_VFO_TX) { tx_vfo = vfo_fixup(rig, vfo, rig->state.cache.split); }
+ if (tx_vfo == RIG_VFO_CURR || tx_vfo == RIG_VFO_TX) { tx_vfo = vfo_fixup(rig, vfo, CACHE(rig)->split); }
priv->split = split;
priv->tx_vfo = tx_vfo;
diff --git a/rigs/icom/ic7300.c b/rigs/icom/ic7300.c
index 9536beb35..98d010e60 100644
--- a/rigs/icom/ic7300.c
+++ b/rigs/icom/ic7300.c
@@ -2218,12 +2218,13 @@ int ic9700_set_vfo(RIG *rig, vfo_t vfo)
int ack_len = sizeof(ackbuf);
int retval;
int vfo_is_main_or_sub = (vfo == RIG_VFO_MAIN) || (vfo == RIG_VFO_SUB);
+ struct rig_cache *cachep = CACHE(rig);
ENTERFUNC;
rig_debug(RIG_DEBUG_VERBOSE, "%s: vfo=%s\n", __func__, rig_strvfo(vfo));
- if (rig->state.cache.satmode && !vfo_is_main_or_sub)
+ if (cachep->satmode && !vfo_is_main_or_sub)
{
// Translate VFO A/B to Main/Sub in satellite mode
if (vfo == RIG_VFO_A)
@@ -2247,7 +2248,7 @@ int ic9700_set_vfo(RIG *rig, vfo_t vfo)
}
else if (vfo == RIG_VFO_B)
{
- if (rig->state.cache.satmode)
+ if (cachep->satmode)
{
rig_debug(RIG_DEBUG_WARN, "%s: cannot switch to VFOB when in satmode\n",
__func__);
@@ -2267,7 +2268,7 @@ int ic9700_set_vfo(RIG *rig, vfo_t vfo)
return retval;
}
- if (rig->state.cache.satmode && vfo == RIG_VFO_MAIN_B)
+ if (cachep->satmode && vfo == RIG_VFO_MAIN_B)
{
rig_debug(RIG_DEBUG_WARN, "%s: cannot switch to VFOB when in satmode\n", __func__);
// we return RIG_OK anyways as this should just be a bad request
@@ -2290,7 +2291,7 @@ int ic9700_set_vfo(RIG *rig, vfo_t vfo)
return retval;
}
- if (rig->state.cache.satmode && vfo == RIG_VFO_SUB_B)
+ if (cachep->satmode && vfo == RIG_VFO_SUB_B)
{
rig_debug(RIG_DEBUG_WARN, "%s: cannot switch to VFOB when in satmode\n", __func__);
// we return RIG_OK anyways as this should just be a bad request
diff --git a/rigs/icom/ic821h.c b/rigs/icom/ic821h.c
index e8f4d33ea..3b6000f7a 100644
--- a/rigs/icom/ic821h.c
+++ b/rigs/icom/ic821h.c
@@ -64,10 +64,10 @@ int ic821h_set_split_vfo(RIG *rig, vfo_t vfo, split_t split, vfo_t tx_vfo)
if (tx_vfo == RIG_VFO_MAIN)
{
- rig->state.cache.satmode =
+ CACHE(rig)->satmode =
split; // we emulate satmode of other rigs since we apparently can't query
rig_debug(RIG_DEBUG_TRACE, "%s: tx_vfo==MAIN so assuming sat mode=%d\n",
- __func__, rig->state.cache.satmode);
+ __func__, CACHE(rig)->satmode);
rig->state.tx_vfo = split == RIG_SPLIT_ON ? RIG_VFO_SUB : RIG_VFO_MAIN;
// the IC821 seems to be backwards in satmode -- setting Main select Sub and vice versa
retval = rig_set_vfo(rig, RIG_VFO_SUB);
diff --git a/rigs/icom/icom.c b/rigs/icom/icom.c
index a5894f681..921259642 100644
--- a/rigs/icom/icom.c
+++ b/rigs/icom/icom.c
@@ -934,7 +934,8 @@ static vfo_t icom_current_vfo(RIG *rig)
freq_t freq_current, freq_other, f...
[truncated message content] |
|
From: n0nb <n0...@us...> - 2024-02-20 13:11:24
|
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 8cc6ce131926b49a2a6bd5e1b1268f98fa00fc78 (commit)
via 91ec3afcda5769d3d39f6684fa205e8a24130fc0 (commit)
via 1657a0e673e37dc5c32b613b4f51d260998a1575 (commit)
via 81dae00ea00be7c3976b564a320453c801e9fdd1 (commit)
via 0902b32c457b9e6a2a879e6ecd550891a0560357 (commit)
via 34d8b0eec3714a34fa466abbfd2c8fff374784f2 (commit)
via 1ea597b6e133aa96c68d76e0bf0b229059ec22d3 (commit)
via 4cadea95f8aa5e8c4ab23a6a393d38b96b8a1af6 (commit)
via 7caef5398e7bda1460cf21e8a8ccc5a40856f9bb (commit)
via 5d83ac767b0288498608134648b7802c6946116d (commit)
via c471884122de94fa69fd76671eb8cb6ce9b932a8 (commit)
via 47fcf999f063214027be7bbf9ac2115ba759cf2e (commit)
via f12d653f6ceaa4dadeb17278239a73092d8a9802 (commit)
via e1f23429821777b938a69b11f7589e5c0c191e51 (commit)
via 972d792a4f82f010c9f8ef77e86ddc364dba7be1 (commit)
via 2b22a42e732b586e64013fc1f88626adcec315d1 (commit)
via 45e097d3a46e305bb3bf8c2ca46a1b8dbd7cd40f (commit)
via 59aaf1f4c30e9efa729e9b3b5048c8d2e86a4225 (commit)
via 59217b560ac1f65e642243f1e0196672c2d5d0de (commit)
via 8d33869ca275e8445beb9a93fc51183d0296ac1e (commit)
via a8cfff8bd34c1f3fb531bafae27f026760b740c1 (commit)
via 916049b0a5fe790b1a292c75c44f7f31a9eb6385 (commit)
via 6844722faab84e4cca03f405e91c5d6501ca9f6c (commit)
via f5d6be3b3efe9781763df903d0c062e24b52e143 (commit)
via 59e4ba1cdcd3f8789803ffbeac691cf79d71cd6c (commit)
via 64c470a4e7e035a90e6b566eb95b3f8c68fdf48b (commit)
via 3dd8c97b54ac58baed2e1cbd2c1cd55a53f200ff (commit)
via e26e6cd7f28751448e7ba26a7f8c838c8dcb42b3 (commit)
via 12552bff64b541f70ed1aee06e311e2b2a6716d6 (commit)
via a2abc2541673e29caa3d9d44a8f52dff867facae (commit)
via eb94ce2b940bea23e4be88751402e6728a83874d (commit)
via 464eea58e720000b90dd19fe06f684d2a1c71fac (commit)
via c7ab5c44afc0cb6f728860a2e25a8ad7aee25811 (commit)
via 1e552b557fe99f9aa04b63dc4af01f81c0cade79 (commit)
via f777179bc88b272f0bb0463a07c8f9f15662927b (commit)
via 23d5d5324831ef710cebffbc23cc3dfe767cf4c4 (commit)
via 02f0ad067a67453329e6e7690cee59f3f149f403 (commit)
via 4a1fa678ea8adb0746e258180edc2ecadc0bf26f (commit)
via b1d85e5aa1f9757a2afaa0b4ce00ebebb17bc4e2 (commit)
via 1532a7d8dc4baea6b00ceb6868d572e66c69d44d (commit)
via 3eb41c6400e5729e328c6c599a0b7fc6de4be630 (commit)
via 96ee58436a9c3d029159fb6bdbe0db827bfc003a (commit)
via bf8bf51bf404e8034088b8ef2dc20ad81ec45911 (commit)
via 6bfccb3e929971185bf2f21e74d4a3a9af5a5454 (commit)
via d42d505d226a0b8a64b1b0288da1488c3e34563f (commit)
via 1093349564d1f65a41356d19db87f957a7f767ef (commit)
via d77b0df70267fd086b42cbd180f16fb7ca5f6548 (commit)
via 8757271437f39980ca738c8c1a9026dcc269c82d (commit)
via ab8835e87e4b1578e925ee3d1e45bb6cf276727d (commit)
via 9bfb0f5f7179582b1a62683b2520cb795a69dc02 (commit)
via dab7cf1ee690c397fa9409c290df95a8e643acd8 (commit)
via 904dfef9b96e8c0e2b61f600d27cbbfdb72231f4 (commit)
via 0adaebd100ce58017f6d5fa7fc169de05ea7a58d (commit)
via 09a90758444ac020a6a7c36fe4a5098fb82739ef (commit)
via ade62105a30e978b371929b15b54b35260bcc331 (commit)
via cff4faba533e84f66b29ef3117bd09b6e5ef0eeb (commit)
via 697c0909350ecfcf28cfa80fe5e943c991976d12 (commit)
via b6dc6110a61e53b91f2a44a41eb1857246b425d9 (commit)
via 4ef5bd414293e310d2e161232adc3cae88d6b070 (commit)
via a03a79c864148458339e2ec3d027beeab818d1b4 (commit)
via 7436e4395f99614eb5a58d50cc5c9cf2474c80c0 (commit)
via 7310f370c1ce7998909112ea91b8d61689f21da0 (commit)
via d9bae6f46f4a9da3f579c4f247cb647cd5ba4b69 (commit)
via 434f399d12f4452cd932adf75a1689984a366e84 (commit)
via 68fca2c73d27bc91ba6b9ae0ba337ac7b0353b9b (commit)
via 75a4d324de2e4cd6da9e792493661fb88451d165 (commit)
via c969405c2602062751c40a2a9b3a8ce777fd54db (commit)
via 270786320925964254921c7eb2ae6390a78c6dac (commit)
via 35e49ffdfce5e17aacf84a48ab2fa93de1618d05 (commit)
via 4fe6ea7cc4ce350e41b0139046ebe9cbedc152e3 (commit)
via fff1bbc8cd14d74ab73996400339262800190b23 (commit)
via b4ec8a427cd8e29ccea245570708a7af55337ef9 (commit)
via 25a8d6586055da9ede363112ca0106716a450573 (commit)
via 1ea95c94ee305f1a5cbf182dd773ea22413f8d4b (commit)
via 9f6ca845722ca17a2b1deb89322b2e5f1d4257f2 (commit)
via 8d59c9302f0fad49f6d8573f4015c1cc9f627242 (commit)
via 793bc1a0dc4169f5edd5547e5600cc2e9174af3f (commit)
via d29caa7cad63c7b8a74d0e2ec0308747dc77eb5d (commit)
via 267f30d16b1fbeb338bbe9b3c5bf9036696d1552 (commit)
via 6ef2c457e4f9eb1d4bb50f80083718503be68816 (commit)
via 2efc2069f54a31f9826099cc03e57261b158f11a (commit)
via 703d86a025821cb1ae87bef5e238eb0ccd3efaaf (commit)
via c8e33010f672a6b5e7ef107817836d6319b2775e (commit)
via 7fba4c012da025798ec81fed5d1f11f8515f2d84 (commit)
via 10c002c13fbcad28aa611970b2c62428ff6df938 (commit)
via a0f8251b64921be57edc0d391c99e2cd08655355 (commit)
via 9ed13add011e41f76eb76624afa46e7a4da45b41 (commit)
via fabfe61a457e2d184a855d77d057089d2bb143b2 (commit)
via d8a9968fac650bd8402fdd21cf380c10a72c868b (commit)
via 1b5fbc1d8b21d73f4e4e74d559ee278257823f0c (commit)
via a4ff5a3e601ca7d1b3671ac575addfe47fcab2f5 (commit)
via 83fa83586490976f2cfa71fd7974fb2e6b403ecf (commit)
via ceebaeae35935d72dd1d2948098cd117f191cc7d (commit)
via 0145588fd9cd58c08b1875a12ebacaeda11fa492 (commit)
via 17b93213108e199e1217cf0f34696c9e4ef9569c (commit)
via 75079d40a88651ca48298f332bc3b18c1b9757f4 (commit)
via 5ad803d90cf898891f9c83c2bdbffa77006227ad (commit)
via e42bb719b9692027addb0912c38508d0f1960d4e (commit)
via a703c77c2d5225401c0523f5311da79da933319b (commit)
via 74b07528982fc58c0b4c3ca1a8b2bf401794da8a (commit)
via a52d0c5931f1e3b3d860f031c3bf146390f1376d (commit)
via efeba2dfe0759704182e0072d35dd09a1e05b100 (commit)
via 75cf467c1d2d314df747247efee28af5130d0b03 (commit)
via 1bb469f90fcd04d27bd3ccac683e48fda3aae48d (commit)
via 354606f46d6695978fea45efd1ef69caaeed8367 (commit)
via 046f3b849caa9af7bf4828c7c569e873d4ebb22c (commit)
via 05033171c379123b2af6e29bd9f586f77d5fdcd3 (commit)
via 67aee821330f5374353b51cb1f7b0c02712a872f (commit)
via e62dcd0b4a6e5acd500262187192f1b78de7c57f (commit)
via 2cc68f4773c274d146083d74ac34a8b77658808d (commit)
via c4733d9dc3fb4207b62fc5e7de18793bb7a75a4b (commit)
via 66218e57f7179568a68b05d70fb17245f3868b6e (commit)
via e4e12f3ce72d61799680b2648b9b3e4cf642e7cb (commit)
via 1dfd17cc187f32ada47118b6d0be51a02b2a43a8 (commit)
via 8bb5bcefb92a60751f8b7f198087f7fa0d1bac0b (commit)
via 7d0c737e961cbb0103960a8c376c756952e18020 (commit)
via 77aa5ddb551f66f064c5f8a6031fc73622ce8ed1 (commit)
via eff0c7b6362bf13de8e65a31fd92c6cf95dbbe42 (commit)
via 4b3a7514caa04e95ce0fca28ce6512f81f85fecf (commit)
via d3917736227107af9c0d83a92f9a1042e1ad7552 (commit)
via eb7634abfbc712ffdb6f837e4d50d97411267e73 (commit)
via 051e671bfaad6b1450b5a35e4441d723d3c44e23 (commit)
via 2358cba6a4df6172e560bbcccda5e1bde7706c1b (commit)
via 1cc08d2f00a4d980e7ef120ed92ee22a9024cad4 (commit)
via 3a414c3221630c0e2786b2809f340f9a222bb0e9 (commit)
via 93b61d2c5e035eecd41772d010a072eb3bb71932 (commit)
via 0dea8ed8bb276e59be05708378a2ffab7df8f02a (commit)
via 8185a3562b5d3109d2c1c15cfec57e143458c140 (commit)
via 00cb0eccdc666e101b64cb393891863522ca5d9a (commit)
via 7b341a2ad6e9bf7488ecc75a57955c21869de73f (commit)
via 7d5f540b9c367d2c3e7e6ef2f9b154e425c5fe44 (commit)
via b78fa43b56855ee4b9ff913df501b5c3d5ef9c90 (commit)
via dd974a25369a95f82316897071c5836b128908d6 (commit)
via e2e723ec6098da211b907b5c1ee6c1fd11dc0b13 (commit)
via 4a926ec503b6fc9b5148f0e7db4335393fe466e5 (commit)
via 82f2b10275ccbea508f98d8c55d194f1cec50ada (commit)
via c90c675add10dd2d32c371c85b4b8b9f4ad80f3d (commit)
via 0ece468b49c9f5db72483fe87d366f55b557f346 (commit)
via 4fa61a9a32a5666807a66135881887cd298cc9b8 (commit)
via 89abbfeb3ae19d18894fd80d4e108576cb784cfe (commit)
via f89e0f0388b339ae14614ada3a6fe3e3e678bd7b (commit)
via 8ab8aafe4836288a1da736315b77ace5146d572c (commit)
from 761f1d3b0024c4989935207a9e731c57eb2ccd8c (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 8cc6ce131926b49a2a6bd5e1b1268f98fa00fc78
Author: Mike Black W9MDB <mdb...@ya...>
Date: Mon Feb 19 11:46:16 2024 -0600
Fix rigctlcom.c for Icom rigs and those that don't have get_vfo
diff --git a/tests/rigctlcom.c b/tests/rigctlcom.c
index 6de847c38..38422d742 100644
--- a/tests/rigctlcom.c
+++ b/tests/rigctlcom.c
@@ -667,7 +667,9 @@ static rmode_t ts2000_get_mode()
pbwidth_t width;
rig_get_mode(my_rig, vfo_fixup(my_rig, RIG_VFO_A, my_rig->state.cache.split),
&mode, &width);
-
+ rig_debug(RIG_DEBUG_ERR, "%s(%d): width=%ld\n", __func__, __LINE__, width);
+ kwidth = width;
+#if 0
// Perhaps we should emulate a rig that has PKT modes instead??
int kwidth_ssb[] = { 10, 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000 };
int kwidth_am[] = { 10, 100, 200, 500 };
@@ -704,6 +706,7 @@ static rmode_t ts2000_get_mode()
default: mode = 0; break;
}
+#endif
return mode;
}
@@ -765,6 +768,7 @@ static int handle_ts2000(void *arg)
int retval = rig_get_freq(my_rig, vfo_fixup(my_rig, RIG_VFO_A,
my_rig->state.cache.split), &freq);
char response[64];
+ rig_debug(RIG_DEBUG_ERR, "%s(%d):\n", __func__, __LINE__);
char *fmt =
// cppcheck-suppress *
"IF%011"PRIll"%04d+%05d%1d%1d%1d%02d%1d%1"PRIll"%1d%1d%1d%1d%02d%1d;";
@@ -774,15 +778,19 @@ static int handle_ts2000(void *arg)
return retval;
}
+ rig_debug(RIG_DEBUG_ERR, "%s(%d):\n", __func__, __LINE__);
mode = ts2000_get_mode();
+ rig_debug(RIG_DEBUG_ERR, "%s(%d):\n", __func__, __LINE__);
retval = rig_get_ptt(my_rig, vfo_fixup(my_rig, RIG_VFO_A,
my_rig->state.cache.split), &ptt);
+ rig_debug(RIG_DEBUG_ERR, "%s(%d):\n", __func__, __LINE__);
if (retval != RIG_OK)
{
return retval;
}
+ rig_debug(RIG_DEBUG_ERR, "%s(%d):\n", __func__, __LINE__);
// we need to know split status -- don't care about the vfo
retval = rig_get_split_vfo(my_rig, RIG_VFO_CURR, &split, &vfo);
@@ -791,13 +799,19 @@ static int handle_ts2000(void *arg)
return retval;
}
+ rig_debug(RIG_DEBUG_ERR, "%s(%d):\n", __func__, __LINE__);
retval = rig_get_vfo(my_rig, &vfo);
if (retval != RIG_OK)
{
+ vfo = RIG_VFO_A;
+#if 0 // so we work with rigs (like Icom) that have no get_vfo
+ rig_debug(RIG_DEBUG_ERR, "%s(%d):\n", __func__, __LINE__);
return retval;
+#endif
}
+ rig_debug(RIG_DEBUG_ERR, "%s(%d):\n", __func__, __LINE__);
switch (vfo)
{
case RIG_VFO_A:
@@ -818,6 +832,7 @@ static int handle_ts2000(void *arg)
rig_debug(RIG_DEBUG_ERR, "%s: unexpected vfo=%d\n", __func__, vfo);
}
+ rig_debug(RIG_DEBUG_ERR, "%s(%d):\n", __func__, __LINE__);
SNPRINTF(response,
sizeof(response),
fmt,
@@ -836,10 +851,12 @@ static int handle_ts2000(void *arg)
p14,
p15);
+ rig_debug(RIG_DEBUG_ERR, "%s(%d):\n", __func__, __LINE__);
return write_block2((void *)__func__, &my_com, response, strlen(response));
}
else if (strcmp(arg, "MD;") == 0)
{
+ rig_debug(RIG_DEBUG_ERR, "%s(%d):\n", __func__, __LINE__);
rmode_t mode = ts2000_get_mode();
char response[32];
commit 91ec3afcda5769d3d39f6684fa205e8a24130fc0
Author: Mike Black W9MDB <mdb...@ya...>
Date: Mon Feb 19 10:42:25 2024 -0600
Fix get_vfo for Icom rigs in rigctlcom.c
diff --git a/tests/rigctlcom.c b/tests/rigctlcom.c
index 39692f2c2..6de847c38 100644
--- a/tests/rigctlcom.c
+++ b/tests/rigctlcom.c
@@ -962,9 +962,12 @@ static int handle_ts2000(void *arg)
if (retval != RIG_OK)
{
+ vfo = RIG_VFO_A;
+#if 0 // so we work with rigs (like Icom) that have no get_vfo
rig_debug(RIG_DEBUG_ERR, "%s: get vfo failed: %s\n", __func__,
rigerror(retval));
return retval;
+#endif
}
commit 1657a0e673e37dc5c32b613b4f51d260998a1575
Author: Mike Black W9MDB <mdb...@ya...>
Date: Mon Feb 19 10:34:15 2024 -0600
Fix rigctlcom.c
diff --git a/tests/rigctlcom.c b/tests/rigctlcom.c
index 023952baa..39692f2c2 100644
--- a/tests/rigctlcom.c
+++ b/tests/rigctlcom.c
@@ -493,14 +493,16 @@ int main(int argc, char *argv[])
exit(2);
}
+#if 0
retcode = -RIG_ENIMPL;
-// retcode = set_conf(my_rig, conf_parms);
+ retcode = set_conf(my_rig, conf_parms);
if (retcode != RIG_OK)
{
fprintf(stderr, "Config parameter error: %s\n", rigerror(retcode));
exit(2);
}
+#endif
if (my_model > 5 && !rig_file)
{
commit 81dae00ea00be7c3976b564a320453c801e9fdd1
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sun Feb 18 22:25:19 2024 -0600
Fix ID read for Xiegu rigs and add x25x26 possible
https://github.com/Hamlib/Hamlib/issues/1499
diff --git a/rigs/icom/xiegu.c b/rigs/icom/xiegu.c
index 5ca0fb316..a4ba8da57 100644
--- a/rigs/icom/xiegu.c
+++ b/rigs/icom/xiegu.c
@@ -131,6 +131,32 @@ static int x108g_rig_open(RIG *rig)
RETURNFUNC(RIG_OK);
}
+int xiegu_rig_open(RIG *rig)
+{
+ int retval;
+ unsigned char id[4];
+ int id_len = 2;
+ int cmd = 0x19;
+ int subcmd = 0x00;
+ unsigned short iid;
+ retval = icom_transaction(rig, cmd, subcmd, NULL, 0, id, &id_len);
+
+ if (retval == RIG_OK)
+ {
+ iid = (((int)id[2]) << 8) + id[3];
+ rig_debug(RIG_DEBUG_VERBOSE, "%s: Xiegu Radio ID=0x%04x\n", __func__, iid);
+ switch(iid)
+ {
+ case 0x0090: rig_debug(RIG_DEBUG_VERBOSE, "%s: Xiegu model %s\n", __func__, "G90/G90S");break;
+ case 0x0106: rig_debug(RIG_DEBUG_VERBOSE, "%s: Xiegu model %s\n", __func__, "G106/G106C");break;
+ case 0x6100: rig_debug(RIG_DEBUG_VERBOSE, "%s: Xiegu model %s\n", __func__, "X6100");break;
+ default: rig_debug(RIG_DEBUG_VERBOSE, "%s: Xiegu model %s\n", __func__, "Unknown");break;
+ }
+ }
+
+ return icom_rig_open(rig);
+}
+
/*
* taken from IC-7000 rig capabilities.
*
@@ -328,7 +354,7 @@ static struct icom_priv_caps x6100_priv_caps =
0, /* no XCHG */
ic7200_ts_sc_list,
.x25x26_always = 0,
- .x25x26_possibly = 0,
+ .x25x26_possibly = 1,
.x1cx03_always = 0,
.x1cx03_possibly = 0,
.x1ax03_supported = 0,
@@ -341,7 +367,7 @@ struct rig_caps x6100_caps =
RIG_MODEL(RIG_MODEL_X6100),
.model_name = "X6100",
.mfg_name = "Xiegu",
- .version = BACKEND_VER ".4",
+ .version = BACKEND_VER ".5",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
@@ -463,7 +489,7 @@ struct rig_caps x6100_caps =
.priv = (void *) &x6100_priv_caps,
.rig_init = icom_init,
.rig_cleanup = icom_cleanup,
- .rig_open = icom_rig_open,
+ .rig_open = xiegu_rig_open,
.rig_close = icom_rig_close,
.set_freq = icom_set_freq,
@@ -512,25 +538,6 @@ struct rig_caps x6100_caps =
.hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS
};
-int g90_rig_open(RIG *rig)
-{
- int retval;
- unsigned char id[2];
- int id_len = 2;
- int cmd = 0x19;
- int subcmd = 0x1d;
- short iid;
- retval = icom_transaction(rig, cmd, subcmd, NULL, 0, id, &id_len);
-
- if (retval == RIG_OK)
- {
- memcpy(&iid, id, 2);
- rig_debug(RIG_DEBUG_VERBOSE, "Xiegu Radio ID=0x%04x\n", iid);
- }
-
- return icom_rig_open(rig);
-}
-
struct rig_caps g90_caps =
{
RIG_MODEL(RIG_MODEL_G90),
@@ -658,7 +665,7 @@ struct rig_caps g90_caps =
.priv = (void *)& x108g_priv_caps,
.rig_init = icom_init,
.rig_cleanup = icom_cleanup,
- .rig_open = g90_rig_open,
+ .rig_open = xiegu_rig_open,
.rig_close = icom_rig_close,
.set_freq = icom_set_freq,
@@ -833,7 +840,7 @@ struct rig_caps x5105_caps =
.priv = (void *)& x108g_priv_caps,
.rig_init = icom_init,
.rig_cleanup = icom_cleanup,
- .rig_open = icom_rig_open,
+ .rig_open = xiegu_rig_open,
.rig_close = icom_rig_close,
.set_freq = icom_set_freq,
commit 0902b32c457b9e6a2a879e6ecd550891a0560357
Author: Mike Black W9MDB <mdb...@ya...>
Date: Fri Feb 16 17:05:07 2024 -0600
Remove debug statement causing warning on mingw64
diff --git a/rigs/icom/icom.c b/rigs/icom/icom.c
index 5ca4ffac8..e23cafce1 100644
--- a/rigs/icom/icom.c
+++ b/rigs/icom/icom.c
@@ -2290,8 +2290,8 @@ static int icom_set_mode_x26(RIG *rig, vfo_t vfo, rmode_t mode,
// Skip filter selection, because at least IC-7300 has a bug defaulting to filter 2 when changing mode
// Tested on IC-7300 and IC-9700
buf[2] = priv->filter;
- rig_debug(RIG_DEBUG_TRACE, "%s: mode=%ld, filters usbd=%d, usb=%d, cw=%d\n",
- __func__, mode, priv->filter_usbd, priv->filter_usb, priv->filter_cw);
+ //rig_debug(RIG_DEBUG_TRACE, "%s: mode=%ld, filters usbd=%d, usb=%d, cw=%d\n",
+ // __func__, mode, priv->filter_usbd, priv->filter_usb, priv->filter_cw);
if (priv->filter_usbd > 0 && (mode == RIG_MODE_PKTUSB
|| mode == RIG_MODE_PKTLSB))
commit 34d8b0eec3714a34fa466abbfd2c8fff374784f2
Author: Mike Black W9MDB <mdb...@ya...>
Date: Fri Feb 16 09:17:50 2024 -0600
Update simts590.c
diff --git a/simulators/simts590.c b/simulators/simts590.c
index 4f6f350a1..ee2db59b6 100644
--- a/simulators/simts590.c
+++ b/simulators/simts590.c
@@ -115,7 +115,7 @@ int main(int argc, char *argv[])
{
printf("%s\n", buf);
hl_usleep(mysleep * 1000);
- pbuf = "RM5100000;";
+ pbuf = "RM50005;";
WRITE(fd, pbuf, strlen(pbuf));
}
commit 1ea597b6e133aa96c68d76e0bf0b229059ec22d3
Author: Mike Black W9MDB <mdb...@ya...>
Date: Thu Feb 15 09:25:39 2024 -0600
Move time_t test later so 32-bit check of 64-bit functions can work
https://github.com/Hamlib/Hamlib/issues/1478
diff --git a/src/misc.c b/src/misc.c
index bbab4946f..18723f8eb 100644
--- a/src/misc.c
+++ b/src/misc.c
@@ -2826,6 +2826,7 @@ char *date_strget(char *buf, int buflen, int localtime)
struct tm result = { 0, 0, 0, 0, 0, 0, 0, 0, 0};
int mytimezone;
+ // 2038 failure here for 32-bit time_t
t = time(NULL);
if (localtime)
@@ -3068,12 +3069,6 @@ int rig_test_2038(RIG *rig)
__MSVCRT_VERSION__);
#endif
- if (sizeof(time_t) == 4)
- {
- rig_debug(RIG_DEBUG_TRACE, "%s: ctime is null, 2038 test failed\n", __func__);
- return 1;
- }
-
int failed = 0;
#if defined(__MSVCRT_VERSION__)
x = (__time64_t)((1UL << 31) - 1);
@@ -3082,12 +3077,26 @@ int rig_test_2038(RIG *rig)
if (strlen(s) == 0) { failed = 1; }
+ rig_debug(RIG_DEBUG_VERBOSE, "%s: MSVCRT 2038 test = 0x%08lx:%s\n", __func__, x,
+ s);
+
#else
- x = (time_t)((1U << 31) - 1);
+
+ if (sizeof(time_t) == 4)
+ {
+ rig_debug(RIG_DEBUG_TRACE, "%s: time_t is 4 bytes, 2038 test failed\n",
+ __func__);
+ return 1;
+ }
+
+ x = (time_t)((1U << 63) - 1);
char *s = ctime(&x);
if (s == NULL) { failed = 1; }
+ rig_debug(RIG_DEBUG_VERBOSE, "%s: time_t 2038 test = 0x%08lx:%s", __func__, x,
+ s);
+
#endif
if (failed)
commit 4cadea95f8aa5e8c4ab23a6a393d38b96b8a1af6
Author: Mike Black W9MDB <mdb...@ya...>
Date: Thu Feb 15 09:25:27 2024 -0600
Astyle cal.c
diff --git a/src/cal.c b/src/cal.c
index eeeeea3ab..38fcfed70 100644
--- a/src/cal.c
+++ b/src/cal.c
@@ -86,7 +86,10 @@ float HAMLIB_API rig_raw2val(int rawval, const cal_table_t *cal)
}
if (rawval == cal->table[i - 1].raw)
- return cal->table[i-1].val;
+ {
+ return cal->table[i - 1].val;
+ }
+
if (i == 0)
{
return cal->table[0].val;
commit 7caef5398e7bda1460cf21e8a8ccc5a40856f9bb
Author: Mike Black W9MDB <mdb...@ya...>
Date: Thu Feb 15 09:24:58 2024 -0600
Return exact value for rig_raw2val when appropriate
diff --git a/src/cal.c b/src/cal.c
index 2083a522e..eeeeea3ab 100644
--- a/src/cal.c
+++ b/src/cal.c
@@ -85,6 +85,8 @@ float HAMLIB_API rig_raw2val(int rawval, const cal_table_t *cal)
}
}
+ if (rawval == cal->table[i - 1].raw)
+ return cal->table[i-1].val;
if (i == 0)
{
return cal->table[0].val;
commit 5d83ac767b0288498608134648b7802c6946116d
Author: Mike Black W9MDB <mdb...@ya...>
Date: Thu Feb 15 09:08:42 2024 -0600
Update SDRUno information
diff --git a/rigs/kenwood/ts480.c b/rigs/kenwood/ts480.c
index 9bb1c403f..3cd3579c1 100644
--- a/rigs/kenwood/ts480.c
+++ b/rigs/kenwood/ts480.c
@@ -2006,12 +2006,11 @@ struct rig_caps sdruno_caps =
RIG_MODEL(RIG_MODEL_SDRUNO),
.model_name = "SDRUno",
.mfg_name = "SDRPlay",
- .version = BACKEND_VER ".2",
+ .version = BACKEND_VER ".3",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
- .rig_type = RIG_TYPE_TRANSCEIVER,
- .ptt_type = RIG_PTT_RIG_MICDATA,
- .dcd_type = RIG_DCD_RIG,
+ .rig_type = RIG_TYPE_RECEIVER,
+ .ptt_type = RIG_PTT_NONE,
.port_type = RIG_PORT_SERIAL,
.serial_rate_min = 4800,
.serial_rate_max = 115200,
@@ -2036,26 +2035,6 @@ struct rig_caps sdruno_caps =
RIG_FRNG_END,
}, /*!< Receive frequency range list for ITU region 1 */
.tx_range_list1 = {
- {kHz(1810), kHz(1850), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO}, /* 100W class */
- {kHz(1810), kHz(1850), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO}, /* 25W class */
- {kHz(3500), kHz(3800), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO},
- {kHz(3500), kHz(3800), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO},
- {MHz(7), kHz(7200), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO},
- {MHz(7), kHz(7200), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO},
- {kHz(10100), kHz(10150), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO},
- {kHz(10100), kHz(10150), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO},
- {MHz(14), kHz(14350), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO},
- {MHz(14), kHz(14350), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO},
- {kHz(18068), kHz(18168), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO},
- {kHz(18068), kHz(18168), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO},
- {MHz(21), kHz(21450), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO},
- {MHz(21), kHz(21450), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO},
- {kHz(24890), kHz(24990), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO},
- {kHz(24890), kHz(24990), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO},
- {MHz(28), kHz(29700), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO},
- {MHz(28), kHz(29700), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO},
- {MHz(50), kHz(52000), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO},
- {MHz(50), kHz(52000), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO},
RIG_FRNG_END,
}, /*!< Transmit frequency range list for ITU region 1 */
.rx_range_list2 = {
@@ -2063,28 +2042,6 @@ struct rig_caps sdruno_caps =
RIG_FRNG_END,
}, /*!< Receive frequency range list for ITU region 2 */
.tx_range_list2 = {
- {kHz(1800), MHz(2) - 1, TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO}, /* 100W class */
- {kHz(1800), MHz(2) - 1, TS480_AM_TX_MODES, 5000, 25000, TS480_VFO}, /* 25W class */
- {kHz(3500), MHz(4) - 1, TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO},
- {kHz(3500), MHz(4) - 1, TS480_AM_TX_MODES, 5000, 25000, TS480_VFO},
- {kHz(5250), kHz(5450), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO},
- {kHz(5250), kHz(5450), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO},
- {MHz(7), kHz(7300), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO},
- {MHz(7), kHz(7300), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO},
- {kHz(10100), kHz(10150), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO},
- {kHz(10100), kHz(10150), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO},
- {MHz(14), kHz(14350), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO},
- {MHz(14), kHz(14350), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO},
- {kHz(18068), kHz(18168), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO},
- {kHz(18068), kHz(18168), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO},
- {MHz(21), kHz(21450), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO},
- {MHz(21), kHz(21450), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO},
- {kHz(24890), kHz(24990), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO},
- {kHz(24890), kHz(24990), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO},
- {MHz(28), kHz(29700), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO},
- {MHz(28), kHz(29700), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO},
- {MHz(50), kHz(52000), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO},
- {MHz(50), kHz(52000), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO},
RIG_FRNG_END,
}, /*!< Transmit frequency range list for ITU region 2 */
.tuning_steps = {
commit c471884122de94fa69fd76671eb8cb6ce9b932a8
Author: Mike Black W9MDB <mdb...@ya...>
Date: Wed Feb 14 16:35:34 2024 -0600
Fix TS590 and TS890 RIG_LEVEL_RFPOWER_METER_WATTS
diff --git a/rigs/kenwood/ts590.c b/rigs/kenwood/ts590.c
index 7523b81a8..a995182e3 100644
--- a/rigs/kenwood/ts590.c
+++ b/rigs/kenwood/ts590.c
@@ -41,11 +41,11 @@
#define TS590_LEVEL_GET (RIG_LEVEL_RFPOWER|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_SQL|RIG_LEVEL_AGC|RIG_LEVEL_MICGAIN|RIG_LEVEL_STRENGTH|RIG_LEVEL_KEYSPD|RIG_LEVEL_CWPITCH| \
RIG_LEVEL_MONITOR_GAIN|RIG_LEVEL_NB|RIG_LEVEL_NR|RIG_LEVEL_PREAMP|RIG_LEVEL_COMP|RIG_LEVEL_ATT|RIG_LEVEL_VOXDELAY|RIG_LEVEL_VOXGAIN|RIG_LEVEL_BKIN_DLYMS| \
- RIG_LEVEL_SWR|RIG_LEVEL_COMP_METER|RIG_LEVEL_ALC|RIG_LEVEL_RFPOWER_METER|RIG_LEVEL_SLOPE_HIGH|RIG_LEVEL_SLOPE_LOW|RIG_LEVEL_USB_AF|RIG_LEVEL_USB_AF_INPUT)
+ RIG_LEVEL_SWR|RIG_LEVEL_COMP_METER|RIG_LEVEL_ALC|RIG_LEVEL_RFPOWER_METER|RIG_LEVEL_RFPOWER_METER_WATTS|RIG_LEVEL_SLOPE_HIGH|RIG_LEVEL_SLOPE_LOW|RIG_LEVEL_USB_AF|RIG_LEVEL_USB_AF_INPUT)
#define TS590_LEVEL_SET (RIG_LEVEL_RFPOWER|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_SQL|RIG_LEVEL_AGC|RIG_LEVEL_MICGAIN|RIG_LEVEL_KEYSPD|RIG_LEVEL_CWPITCH| \
RIG_LEVEL_MONITOR_GAIN|RIG_LEVEL_NB|RIG_LEVEL_NR|RIG_LEVEL_PREAMP|RIG_LEVEL_COMP|RIG_LEVEL_ATT|RIG_LEVEL_VOXDELAY|RIG_LEVEL_VOXGAIN|RIG_LEVEL_BKIN_DLYMS| \
- RIG_LEVEL_METER|RIG_LEVEL_RFPOWER_METER_WATTS|RIG_LEVEL_SLOPE_HIGH|RIG_LEVEL_SLOPE_LOW|RIG_LEVEL_USB_AF|RIG_LEVEL_USB_AF_INPUT)
+ RIG_LEVEL_METER|RIG_LEVEL_SLOPE_HIGH|RIG_LEVEL_SLOPE_LOW|RIG_LEVEL_USB_AF|RIG_LEVEL_USB_AF_INPUT)
#define TS590_FUNC_ALL (RIG_FUNC_NB|RIG_FUNC_COMP|RIG_FUNC_VOX|RIG_FUNC_NR|RIG_FUNC_NR|RIG_FUNC_BC|RIG_FUNC_BC2|RIG_FUNC_RIT|RIG_FUNC_XIT| \
RIG_FUNC_TUNER|RIG_FUNC_MON|RIG_FUNC_FBKIN|RIG_FUNC_LOCK)
@@ -1013,6 +1013,13 @@ static int ts590_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
case RIG_LEVEL_RFPOWER_METER:
case RIG_LEVEL_RFPOWER_METER_WATTS:
{
+ static cal_table_t power_meter =
+ {
+ 7, { { 0, 0}, { 3, 5}, { 6, 10}, { 8, 15}, {12, 25},
+ { 17, 50}, { 30, 100}
+ }
+ };
+
int raw_value;
if (rig->state.cache.ptt == RIG_PTT_OFF)
@@ -1030,13 +1037,16 @@ static int ts590_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
sscanf(ackbuf, "SM0%d", &raw_value);
- val->f = (float) raw_value / 30.0f;
+// val->f = (float) raw_value / 30.0f;
if (level == RIG_LEVEL_RFPOWER_METER_WATTS)
{
- val->f *= 100;
- if (val->f >= 10) val->f = roundf(val->f);
- else val->f = roundf(val->f*10.0)/10.0;
+ val->f = roundf(rig_raw2val(raw_value, &power_meter));
+ if (val->f < 10)
+ {
+ val->f = roundf(rig_raw2val(raw_value, &power_meter) * 10.0) / 10.0;
+ }
+
}
break;
@@ -1703,7 +1713,7 @@ struct rig_caps ts590_caps =
RIG_MODEL(RIG_MODEL_TS590S),
.model_name = "TS-590S",
.mfg_name = "Kenwood",
- .version = BACKEND_VER ".15",
+ .version = BACKEND_VER ".16",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
@@ -2097,7 +2107,7 @@ struct rig_caps ts590sg_caps =
RIG_MODEL(RIG_MODEL_TS590SG),
.model_name = "TS-590SG",
.mfg_name = "Kenwood",
- .version = BACKEND_VER ".9",
+ .version = BACKEND_VER ".10",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
diff --git a/rigs/kenwood/ts890s.c b/rigs/kenwood/ts890s.c
index d9c28d829..2b8ca60c7 100644
--- a/rigs/kenwood/ts890s.c
+++ b/rigs/kenwood/ts890s.c
@@ -359,14 +359,7 @@ int kenwood_ts890_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
if (level == RIG_LEVEL_RFPOWER_METER_WATTS)
{
- if (val->f >= 10)
- {
- val->f = roundf(rig_raw2val(val->i, &power_meter));
- }
- else
- {
- val->f = roundf(rig_raw2val(val->i, &power_meter) * 10.0) / 10.0;
- }
+ val->f = roundf(rig_raw2val(val->i, &power_meter));
}
else
{
commit 47fcf999f063214027be7bbf9ac2115ba759cf2e
Author: Mike Black W9MDB <mdb...@ya...>
Date: Wed Feb 14 08:59:52 2024 -0600
Reduce debug error level for rig_test_2038
diff --git a/src/misc.c b/src/misc.c
index b914e37d6..bbab4946f 100644
--- a/src/misc.c
+++ b/src/misc.c
@@ -3064,7 +3064,7 @@ int rig_test_2038(RIG *rig)
__func__);
#endif
#if defined(__MSVCRT_VERSION__)
- rig_debug(RIG_DEBUG_ERR, "%s: __MSVCRT_VERSION__=0x%04x\n", __func__,
+ rig_debug(RIG_DEBUG_TRACE, "%s: __MSVCRT_VERSION__=0x%04x\n", __func__,
__MSVCRT_VERSION__);
#endif
commit f12d653f6ceaa4dadeb17278239a73092d8a9802
Author: Mike Black W9MDB <mdb...@ya...>
Date: Wed Feb 14 07:55:42 2024 -0600
Try to fix MINGW time_t
https://github.com/Hamlib/Hamlib/issues/1478
diff --git a/src/misc.c b/src/misc.c
index 4d59cc5c0..b914e37d6 100644
--- a/src/misc.c
+++ b/src/misc.c
@@ -3076,7 +3076,7 @@ int rig_test_2038(RIG *rig)
int failed = 0;
#if defined(__MSVCRT_VERSION__)
- x = (__time64_t)((1U << 31) - 1);
+ x = (__time64_t)((1UL << 31) - 1);
char s[64];
_ctime64_s(s, sizeof(s), &x);
commit e1f23429821777b938a69b11f7589e5c0c191e51
Author: Mike Black W9MDB <mdb...@ya...>
Date: Wed Feb 14 07:11:20 2024 -0600
Promote all BETA to STABLE
Promot all ALPHA to BETA
diff --git a/amplifiers/elecraft/kpa1500.c b/amplifiers/elecraft/kpa1500.c
index f2309b32c..f53d4c85a 100644
--- a/amplifiers/elecraft/kpa1500.c
+++ b/amplifiers/elecraft/kpa1500.c
@@ -62,7 +62,7 @@ const struct amp_caps kpa1500_amp_caps =
.mfg_name = "Elecraft",
.version = "20220710.0",
.copyright = "LGPL",
- .status = RIG_STATUS_ALPHA,
+ .status = RIG_STATUS_BETA,
.amp_type = AMP_TYPE_OTHER,
.port_type = RIG_PORT_SERIAL,
.serial_rate_min = 4800,
diff --git a/amplifiers/expert/expert.c b/amplifiers/expert/expert.c
index 35fdde367..756cb7b49 100644
--- a/amplifiers/expert/expert.c
+++ b/amplifiers/expert/expert.c
@@ -676,7 +676,7 @@ const struct amp_caps expert_amp_caps =
.mfg_name = "Expert",
.version = "20230328.0",
.copyright = "LGPL",
- .status = RIG_STATUS_ALPHA,
+ .status = RIG_STATUS_BETA,
.amp_type = AMP_TYPE_OTHER,
.port_type = RIG_PORT_SERIAL,
.serial_rate_min = 9600,
diff --git a/amplifiers/gemini/dx1200.c b/amplifiers/gemini/dx1200.c
index f0b41c654..a685453ba 100644
--- a/amplifiers/gemini/dx1200.c
+++ b/amplifiers/gemini/dx1200.c
@@ -62,7 +62,7 @@ const struct amp_caps gemini_amp_caps =
.mfg_name = "Gemini",
.version = "20230318.0",
.copyright = "LGPL",
- .status = RIG_STATUS_BETA,
+ .status = RIG_STATUS_STABLE,
.amp_type = AMP_TYPE_OTHER,
.port_type = RIG_PORT_NETWORK,
.write_delay = 0,
diff --git a/rigs/anytone/d578.c b/rigs/anytone/d578.c
index cf7ec4214..ee29f9b95 100644
--- a/rigs/anytone/d578.c
+++ b/rigs/anytone/d578.c
@@ -33,7 +33,7 @@ struct rig_caps anytone_d578_caps =
.mfg_name = "AnyTone",
.version = BACKEND_VER ".0",
.copyright = "Michael Black W9MDB: GNU LGPL",
- .status = RIG_STATUS_ALPHA,
+ .status = RIG_STATUS_BETA,
.rig_type = RIG_TYPE_TRANSCEIVER,
.ptt_type = RIG_PTT_RIG,
.dcd_type = RIG_DCD_NONE,
diff --git a/rigs/aor/ar2700.c b/rigs/aor/ar2700.c
index 161ee0ebe..0245dd07b 100644
--- a/rigs/aor/ar2700.c
+++ b/rigs/aor/ar2700.c
@@ -87,7 +87,7 @@ struct rig_caps ar2700_caps =
.mfg_name = "AOR",
.version = BACKEND_VER ".0",
.copyright = "LGPL",
- .status = RIG_STATUS_ALPHA,
+ .status = RIG_STATUS_BETA,
.rig_type = RIG_TYPE_SCANNER,
.ptt_type = RIG_PTT_NONE,
.dcd_type = RIG_DCD_RIG,
diff --git a/rigs/aor/ar5000.c b/rigs/aor/ar5000.c
index 73a8ffd9c..95c9b313e 100644
--- a/rigs/aor/ar5000.c
+++ b/rigs/aor/ar5000.c
@@ -252,7 +252,7 @@ struct rig_caps ar5000a_caps =
.mfg_name = "AOR",
.version = BACKEND_VER ".0",
.copyright = "LGPL",
- .status = RIG_STATUS_BETA,
+ .status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_SCANNER,
.ptt_type = RIG_PTT_NONE,
.dcd_type = RIG_DCD_RIG,
diff --git a/rigs/aor/ar8200.c b/rigs/aor/ar8200.c
index c1a640fd3..17832f15e 100644
--- a/rigs/aor/ar8200.c
+++ b/rigs/aor/ar8200.c
@@ -91,7 +91,7 @@ struct rig_caps ar8200_caps =
.mfg_name = "AOR",
.version = BACKEND_VER ".0",
.copyright = "LGPL",
- .status = RIG_STATUS_BETA,
+ .status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_SCANNER,
.ptt_type = RIG_PTT_NONE,
.dcd_type = RIG_DCD_RIG,
diff --git a/rigs/barrett/4100.c b/rigs/barrett/4100.c
index 814ae7b15..e1a2bc77e 100644
--- a/rigs/barrett/4100.c
+++ b/rigs/barrett/4100.c
@@ -235,7 +235,7 @@ struct rig_caps barrett4100_caps =
.mfg_name = "Barrett",
.version = BACKEND_VER ".0",
.copyright = "LGPL",
- .status = RIG_STATUS_ALPHA,
+ .status = RIG_STATUS_BETA,
.rig_type = RIG_TYPE_TRANSCEIVER,
.targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE,
.ptt_type = RIG_PTT_RIG,
diff --git a/rigs/dorji/dra818.c b/rigs/dorji/dra818.c
index 065b0d305..8cf4e93e4 100644
--- a/rigs/dorji/dra818.c
+++ b/rigs/dorji/dra818.c
@@ -527,7 +527,7 @@ struct rig_caps dra818u_caps =
.mfg_name = "Dorji",
.version = "20191209.0",
.copyright = "LGPL",
- .status = RIG_STATUS_ALPHA,
+ .status = RIG_STATUS_BETA,
.rig_type = RIG_TYPE_TRANSCEIVER,
.ptt_type = RIG_PTT_NONE,
.dcd_type = RIG_DCD_RIG,
@@ -631,7 +631,7 @@ struct rig_caps dra818v_caps =
.mfg_name = "Dorji",
.version = "20191209.0",
.copyright = "LGPL",
- .status = RIG_STATUS_ALPHA,
+ .status = RIG_STATUS_BETA,
.rig_type = RIG_TYPE_TRANSCEIVER,
.ptt_type = RIG_PTT_NONE,
.dcd_type = RIG_DCD_RIG,
diff --git a/rigs/drake/r8b.c b/rigs/drake/r8b.c
index 11fa4f1fe..a11a72bc3 100644
--- a/rigs/drake/r8b.c
+++ b/rigs/drake/r8b.c
@@ -85,7 +85,7 @@ struct rig_caps r8b_caps =
.mfg_name = "Drake",
.version = BACKEND_VER ".0",
.copyright = "LGPL",
- .status = RIG_STATUS_ALPHA,
+ .status = RIG_STATUS_BETA,
.rig_type = RIG_TYPE_RECEIVER,
.ptt_type = RIG_PTT_NONE,
.dcd_type = RIG_DCD_NONE,
diff --git a/rigs/dummy/tci1x.c b/rigs/dummy/tci1x.c
index a0aaaa635..15fae09cd 100644
--- a/rigs/dummy/tci1x.c
+++ b/rigs/dummy/tci1x.c
@@ -139,7 +139,7 @@ struct rig_caps tci1x_caps =
.mfg_name = "Expert Elec",
.version = "20211125.0",
.copyright = "LGPL",
- .status = RIG_STATUS_ALPHA,
+ .status = RIG_STATUS_BETA,
.rig_type = RIG_TYPE_TRANSCEIVER,
.targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE,
.ptt_type = RIG_PTT_RIG,
diff --git a/rigs/flexradio/dttsp.c b/rigs/flexradio/dttsp.c
index de41b6ad5..50de1461a 100644
--- a/rigs/flexradio/dttsp.c
+++ b/rigs/flexradio/dttsp.c
@@ -162,7 +162,7 @@ struct rig_caps dttsp_rig_caps =
.mfg_name = "DTTS Microwave Society",
.version = "20200319.0",
.copyright = "LGPL",
- .status = RIG_STATUS_BETA,
+ .status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_COMPUTER,
.targetable_vfo = RIG_TARGETABLE_ALL,
.ptt_type = RIG_PTT_RIG,
@@ -248,7 +248,7 @@ struct rig_caps dttsp_udp_rig_caps =
.mfg_name = "DTTS Microwave Society",
.version = "20200319.0",
.copyright = "LGPL",
- .status = RIG_STATUS_BETA,
+ .status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_COMPUTER,
.targetable_vfo = RIG_TARGETABLE_ALL,
.ptt_type = RIG_PTT_RIG,
diff --git a/rigs/flexradio/sdr1k.c b/rigs/flexradio/sdr1k.c
index e773d47bf..3489651d2 100644
--- a/rigs/flexradio/sdr1k.c
+++ b/rigs/flexradio/sdr1k.c
@@ -117,7 +117,7 @@ struct rig_caps sdr1k_rig_caps =
.mfg_name = "Flex-radio",
.version = "20200323.0",
.copyright = "LGPL",
- .status = RIG_STATUS_ALPHA,
+ .status = RIG_STATUS_BETA,
.rig_type = RIG_TYPE_TUNER,
.targetable_vfo = 0,
.ptt_type = RIG_PTT_RIG,
diff --git a/rigs/gomspace/gs100.c b/rigs/gomspace/gs100.c
index 04d7097a3..ee3541bac 100644
--- a/rigs/gomspace/gs100.c
+++ b/rigs/gomspace/gs100.c
@@ -380,7 +380,7 @@ struct rig_caps GS100_caps =
.mfg_name = "GOMSPACE",
.version = "20211117.0",
.copyright = "LGPL",
- .status = RIG_STATUS_BETA,
+ .status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
.targetable_vfo = 0,
.ptt_type = RIG_PTT_NONE,
diff --git a/rigs/icmarine/icm700pro.c b/rigs/icmarine/icm700pro.c
index 681ea4785..d1cd379dd 100644
--- a/rigs/icmarine/icm700pro.c
+++ b/rigs/icmarine/icm700pro.c
@@ -56,7 +56,7 @@ struct rig_caps icm700pro_caps =
.mfg_name = "Icom",
.version = BACKEND_VER ".0",
.copyright = "LGPL",
- .status = RIG_STATUS_BETA,
+ .status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
.ptt_type = RIG_PTT_RIG,
.dcd_type = RIG_DCD_RIG,
diff --git a/rigs/icom/delta2.c b/rigs/icom/delta2.c
index ec43e8ab0..e39f5017f 100644
--- a/rigs/icom/delta2.c
+++ b/rigs/icom/delta2.c
@@ -59,7 +59,7 @@ struct rig_caps delta2_caps =
.mfg_name = "Ten-Tec",
.version = BACKEND_VER ".0",
.copyright = "LGPL",
- .status = RIG_STATUS_ALPHA,
+ .status = RIG_STATUS_BETA,
.rig_type = RIG_TYPE_TRANSCEIVER,
.ptt_type = RIG_PTT_NONE,
.dcd_type = RIG_DCD_NONE,
diff --git a/rigs/icom/ic271.c b/rigs/icom/ic271.c
index dfa8d732a..b0dd0c336 100644
--- a/rigs/icom/ic271.c
+++ b/rigs/icom/ic271.c
@@ -56,7 +56,7 @@ struct rig_caps ic271_caps =
.mfg_name = "Icom",
.version = BACKEND_VER ".0",
.copyright = "LGPL",
- .status = RIG_STATUS_ALPHA,
+ .status = RIG_STATUS_BETA,
.rig_type = RIG_TYPE_TRANSCEIVER,
.ptt_type = RIG_PTT_NONE,
.dcd_type = RIG_DCD_NONE,
diff --git a/rigs/icom/ic2730.c b/rigs/icom/ic2730.c
index 16ed41b01..f9fc56953 100644
--- a/rigs/icom/ic2730.c
+++ b/rigs/icom/ic2730.c
@@ -66,7 +66,7 @@ struct rig_caps ic2730_caps =
.mfg_name = "Icom",
.version = BACKEND_VER ".0",
.copyright = "LGPL",
- .status = RIG_STATUS_ALPHA,
+ .status = RIG_STATUS_BETA,
.rig_type = RIG_TYPE_MOBILE,
.ptt_type = RIG_PTT_RIG,
.dcd_type = RIG_DCD_RIG,
diff --git a/rigs/icom/ic471.c b/rigs/icom/ic471.c
index b1e1ec20c..c8f07de1c 100644
--- a/rigs/icom/ic471.c
+++ b/rigs/icom/ic471.c
@@ -55,7 +55,7 @@ struct rig_caps ic471_caps =
.mfg_name = "Icom",
.version = BACKEND_VER ".0",
.copyright = "LGPL",
- .status = RIG_STATUS_ALPHA,
+ .status = RIG_STATUS_BETA,
.rig_type = RIG_TYPE_TRANSCEIVER,
.ptt_type = RIG_PTT_NONE,
.dcd_type = RIG_DCD_NONE,
diff --git a/rigs/icom/ic707.c b/rigs/icom/ic707.c
index 4376094a4..1b4834760 100644
--- a/rigs/icom/ic707.c
+++ b/rigs/icom/ic707.c
@@ -61,7 +61,7 @@ struct rig_caps ic707_caps =
.mfg_name = "Icom",
.version = BACKEND_VER ".0",
.copyright = "LGPL",
- .status = RIG_STATUS_ALPHA,
+ .status = RIG_STATUS_BETA,
.rig_type = RIG_TYPE_TRANSCEIVER,
.ptt_type = RIG_PTT_NONE,
.dcd_type = RIG_DCD_NONE,
diff --git a/rigs/icom/ic728.c b/rigs/icom/ic728.c
index 964b013ae..7e959580a 100644
--- a/rigs/icom/ic728.c
+++ b/rigs/icom/ic728.c
@@ -61,7 +61,7 @@ struct rig_caps ic728_caps =
.mfg_name = "Icom",
.version = BACKEND_VER ".0",
.copyright = "LGPL",
- .status = RIG_STATUS_ALPHA,
+ .status = RIG_STATUS_BETA,
.rig_type = RIG_TYPE_TRANSCEIVER,
.ptt_type = RIG_PTT_NONE,
.dcd_type = RIG_DCD_NONE,
diff --git a/rigs/icom/ic736.c b/rigs/icom/ic736.c
index 979c336b6..48e4817f4 100644
--- a/rigs/icom/ic736.c
+++ b/rigs/icom/ic736.c
@@ -65,7 +65,7 @@ struct rig_caps ic736_caps =
.mfg_name = "Icom",
.version = BACKEND_VER ".0",
.copyright = "LGPL",
- .status = RIG_STATUS_ALPHA,
+ .status = RIG_STATUS_BETA,
.rig_type = RIG_TYPE_TRANSCEIVER,
.ptt_type = RIG_PTT_NONE,
.dcd_type = RIG_DCD_NONE,
diff --git a/rigs/icom/ic737.c b/rigs/icom/ic737.c
index 8f1a8da64..c7f3b3f23 100644
--- a/rigs/icom/ic737.c
+++ b/rigs/icom/ic737.c
@@ -63,7 +63,7 @@ struct rig_caps ic737_caps =
.mfg_name = "Icom",
.version = BACKEND_VER ".0",
.copyright = "LGPL",
- .status = RIG_STATUS_ALPHA,
+ .status = RIG_STATUS_BETA,
.rig_type = RIG_TYPE_TRANSCEIVER,
.ptt_type = RIG_PTT_NONE,
.dcd_type = RIG_DCD_NONE,
diff --git a/rigs/icom/ic738.c b/rigs/icom/ic738.c
index 354152d4a..c71fab5d1 100644
--- a/rigs/icom/ic738.c
+++ b/rigs/icom/ic738.c
@@ -65,7 +65,7 @@ struct rig_caps ic738_caps =
.mfg_name = "Icom",
.version = BACKEND_VER ".0",
.copyright = "LGPL",
- .status = RIG_STATUS_ALPHA,
+ .status = RIG_STATUS_BETA,
.rig_type = RIG_TYPE_TRANSCEIVER,
.ptt_type = RIG_PTT_NONE,
.dcd_type = RIG_DCD_NONE,
diff --git a/rigs/icom/ic7410.c b/rigs/icom/ic7410.c
index bc8895310..d8e31510a 100644
--- a/rigs/icom/ic7410.c
+++ b/rigs/icom/ic7410.c
@@ -126,7 +126,7 @@ struct rig_caps ic7410_caps =
.mfg_name = "Icom",
.version = BACKEND_VER ".3",
.copyright = "LGPL",
- .status = RIG_STATUS_ALPHA,
+ .status = RIG_STATUS_BETA,
.rig_type = RIG_TYPE_TRANSCEIVER,
.ptt_type = RIG_PTT_RIG,
.dcd_type = RIG_DCD_RIG,
diff --git a/rigs/icom/ic775.c b/rigs/icom/ic775.c
index 33d10113a..7e7d19d79 100644
--- a/rigs/icom/ic775.c
+++ b/rigs/icom/ic775.c
@@ -58,7 +58,7 @@ struct rig_caps ic775_caps =
.mfg_name = "Icom",
.version = BACKEND_VER ".0",
.copyright = "LGPL",
- .status = RIG_STATUS_ALPHA,
+ .status = RIG_STATUS_BETA,
.rig_type = RIG_TYPE_TRANSCEIVER,
.ptt_type = RIG_PTT_NONE,
.dcd_type = RIG_DCD_NONE,
diff --git a/rigs/icom/ic78.c b/rigs/icom/ic78.c
index 977e0ee2a..a752f4ccc 100644
--- a/rigs/icom/ic78.c
+++ b/rigs/icom/ic78.c
@@ -69,7 +69,7 @@ struct rig_caps ic78_caps =
.mfg_name = "Icom",
.version = BACKEND_VER ".0",
.copyright = "LGPL",
- .status = RIG_STATUS_ALPHA,
+ .status = RIG_STATUS_BETA,
.rig_type = RIG_TYPE_TRANSCEIVER,
.ptt_type = RIG_PTT_NONE,
.dcd_type = RIG_DCD_RIG,
diff --git a/rigs/icom/ic820h.c b/rigs/icom/ic820h.c
index e81dc1637..1d0bf11cf 100644
--- a/rigs/icom/ic820h.c
+++ b/rigs/icom/ic820h.c
@@ -57,7 +57,7 @@ struct rig_caps ic820h_caps =
.mfg_name = "Icom",
.version = BACKEND_VER ".0",
.copyright = "LGPL",
- .status = RIG_STATUS_BETA,
+ .status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
.ptt_type = RIG_PTT_NONE,
.dcd_type = RIG_DCD_NONE,
diff --git a/rigs/icom/ic92d.c b/rigs/icom/ic92d.c
index b0f3b6753..5d8c33f95 100644
--- a/rigs/icom/ic92d.c
+++ b/rigs/icom/ic92d.c
@@ -100,7 +100,7 @@ struct rig_caps ic92d_caps =
.mfg_name = "Icom",
.version = BACKEND_VER ".0",
.copyright = "LGPL",
- .status = RIG_STATUS_ALPHA,
+ .status = RIG_STATUS_BETA,
.rig_type = RIG_TYPE_HANDHELD,
.ptt_type = RIG_PTT_NONE,
.dcd_type = RIG_DCD_NONE,
diff --git a/rigs/icom/ic970.c b/rigs/icom/ic970.c
index 333eb6337..d627347f6 100644
--- a/rigs/icom/ic970.c
+++ b/rigs/icom/ic970.c
@@ -52,7 +52,7 @@ struct rig_caps ic970_caps =
.mfg_name = "Icom",
.version = BACKEND_VER ".0",
.copyright = "LGPL",
- .status = RIG_STATUS_ALPHA,
+ .status = RIG_STATUS_BETA,
.rig_type = RIG_TYPE_TRANSCEIVER,
.ptt_type = RIG_PTT_NONE,
.dcd_type = RIG_DCD_NONE,
diff --git a/rigs/icom/icr30.c b/rigs/icom/icr30.c
index 7ce95a322..16453423e 100644
--- a/rigs/icom/icr30.c
+++ b/rigs/icom/icr30.c
@@ -131,7 +131,7 @@ struct rig_caps icr30_caps =
.mfg_name = "Icom",
.version = BACKEND_VER ".0",
.copyright = "LGPL",
- .status = RIG_STATUS_BETA,
+ .status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_RECEIVER | RIG_FLAG_HANDHELD,
.ptt_type = RIG_PTT_NONE,
.dcd_type = RIG_DCD_RIG,
diff --git a/rigs/icom/icr7000.c b/rigs/icom/icr7000.c
index 3636046b8..768054cca 100644
--- a/rigs/icom/icr7000.c
+++ b/rigs/icom/icr7000.c
@@ -181,7 +181,7 @@ struct rig_caps icr7100_caps =
.mfg_name = "Icom",
.version = BACKEND_VER ".0",
.copyright = "LGPL",
- .status = RIG_STATUS_ALPHA,
+ .status = RIG_STATUS_BETA,
.rig_type = RIG_TYPE_RECEIVER,
.ptt_type = RIG_PTT_NONE,
.dcd_type = RIG_DCD_RIG,
diff --git a/rigs/icom/icr71.c b/rigs/icom/icr71.c
index 660fba2e8..8666acfe5 100644
--- a/rigs/icom/icr71.c
+++ b/rigs/icom/icr71.c
@@ -51,7 +51,7 @@ struct rig_caps icr71_caps =
.mfg_name = "Icom",
.version = BACKEND_VER ".0",
.copyright = "LGPL",
- .status = RIG_STATUS_ALPHA,
+ .status = RIG_STATUS_BETA,
.rig_type = RIG_TYPE_RECEIVER,
.ptt_type = RIG_PTT_NONE,
.dcd_type = RIG_DCD_NONE,
diff --git a/rigs/icom/icr72.c b/rigs/icom/icr72.c
index 115a2abd5..4af798a4d 100644
--- a/rigs/icom/icr72.c
+++ b/rigs/icom/icr72.c
@@ -52,7 +52,7 @@ struct rig_caps icr72_caps =
.mfg_name = "Icom",
.version = BACKEND_VER ".0",
.copyright = "LGPL",
- .status = RIG_STATUS_ALPHA,
+ .status = RIG_STATUS_BETA,
.rig_type = RIG_TYPE_RECEIVER,
.ptt_type = RIG_PTT_NONE,
.dcd_type = RIG_DCD_RIG,
diff --git a/rigs/icom/icr8600.c b/rigs/icom/icr8600.c
index e3a012b4c..446b77a7e 100644
--- a/rigs/icom/icr8600.c
+++ b/rigs/icom/icr8600.c
@@ -135,7 +135,7 @@ struct rig_caps icr8600_caps =
.mfg_name = "Icom",
.version = BACKEND_VER ".4",
.copyright = "LGPL",
- .status = RIG_STATUS_BETA,
+ .status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_RECEIVER,
.ptt_type = RIG_PTT_NONE,
.dcd_type = RIG_DCD_RIG,
diff --git a/rigs/icom/icr9000.c b/rigs/icom/icr9000.c
index 33e9f4887..9767cebd9 100644
--- a/rigs/icom/icr9000.c
+++ b/rigs/icom/icr9000.c
@@ -69,7 +69,7 @@ struct rig_caps icr9000_caps =
.mfg_name = "Icom",
.version = BACKEND_VER ".0",
.copyright = "LGPL",
- .status = RIG_STATUS_BETA,
+ .status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_RECEIVER,
.ptt_type = RIG_PTT_NONE,
.dcd_type = RIG_DCD_RIG,
diff --git a/rigs/icom/icrx7.c b/rigs/icom/icrx7.c
index 089c1d6b5..e46d0d8b5 100644
--- a/rigs/icom/icrx7.c
+++ b/rigs/icom/icrx7.c
@@ -56,7 +56,7 @@ struct rig_caps icrx7_caps =
.mfg_name = "Icom",
.version = BACKEND_VER ".0",
.copyright = "LGPL",
- .status = RIG_STATUS_ALPHA,
+ .status = RIG_STATUS_BETA,
.rig_type = RIG_TYPE_RECEIVER | RIG_FLAG_HANDHELD,
.ptt_type = RIG_PTT_NONE,
.dcd_type = RIG_DCD_RIG,
diff --git a/rigs/icom/id1.c b/rigs/icom/id1.c
index d83efc844..3ee4bb907 100644
--- a/rigs/icom/id1.c
+++ b/rigs/icom/id1.c
@@ -74,7 +74,7 @@ struct rig_caps id1_caps =
.mfg_name = "Icom",
.version = BACKEND_VER ".0",
.copyright = "LGPL",
- .status = RIG_STATUS_ALPHA,
+ .status = RIG_STATUS_BETA,
.rig_type = RIG_TYPE_MOBILE,
.ptt_type = RIG_PTT_RIG,
.dcd_type = RIG_DCD_RIG,
diff --git a/rigs/icom/id31.c b/rigs/icom/id31.c
index 9727c42b6..ffad0eaf1 100644
--- a/rigs/icom/id31.c
+++ b/rigs/icom/id31.c
@@ -82,7 +82,7 @@ struct rig_caps id31_caps =
.mfg_name = "Icom",
.version = BACKEND_VER ".1",
.copyright = "LGPL",
- .status = RIG_STATUS_ALPHA,
+ .status = RIG_STATUS_BETA,
.rig_type = RIG_TYPE_HANDHELD,
.ptt_type = RIG_PTT_RIG,
.dcd_type = RIG_DCD_RIG,
diff --git a/rigs/icom/id4100.c b/rigs/icom/id4100.c
index e06694e95..f45de58bb 100644
--- a/rigs/icom/id4100.c
+++ b/rigs/icom/id4100.c
@@ -86,7 +86,7 @@ struct rig_caps id4100_caps =
.mfg_name = "Icom",
.version = BACKEND_VER ".1",
.copyright = "LGPL",
- .status = RIG_STATUS_BETA,
+ .status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_MOBILE,
.ptt_type = RIG_PTT_RIG,
.dcd_type = RIG_DCD_RIG,
diff --git a/rigs/icom/id51.c b/rigs/icom/id51.c
index 729312a85..2688ba69b 100644
--- a/rigs/icom/id51.c
+++ b/rigs/icom/id51.c
@@ -89,7 +89,7 @@ struct rig_caps id51_caps =
.mfg_name = "Icom",
.version = BACKEND_VER ".1",
.copyright = "LGPL",
- .status = RIG_STATUS_ALPHA,
+ .status = RIG_STATUS_BETA,
.rig_type = RIG_TYPE_HANDHELD,
.ptt_type = RIG_PTT_RIG,
.dcd_type = RIG_DCD_RIG,
diff --git a/rigs/icom/id5100.c b/rigs/icom/id5100.c
index 006bcdce3..9ad6fa4ff 100644
--- a/rigs/icom/id5100.c
+++ b/rigs/icom/id5100.c
@@ -530,7 +530,7 @@ struct rig_caps id5100_caps =
.mfg_name = "Icom",
.version = BACKEND_VER ".9",
.copyright = "LGPL",
- .status = RIG_STATUS_BETA,
+ .status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_MOBILE,
.ptt_type = RIG_PTT_RIG,
.dcd_type = RIG_DCD_RIG,
diff --git a/rigs/icom/perseus.c b/rigs/icom/perseus.c
index e13ae8667..06aa1adaf 100644
--- a/rigs/icom/perseus.c
+++ b/rigs/icom/perseus.c
@@ -78,7 +78,7 @@ struct rig_caps perseus_caps =
.mfg_name = "Microtelecom",
.version = BACKEND_VER ".0",
.copyright = "LGPL",
- .status = RIG_STATUS_BETA,
+ .status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_PCRECEIVER,
.ptt_type = RIG_PTT_NONE,
.dcd_type = RIG_DCD_NONE,
diff --git a/rigs/jrc/nrd525.c b/rigs/jrc/nrd525.c
index ca0c6ad4b..aaf798566 100644
--- a/rigs/jrc/nrd525.c
+++ b/rigs/jrc/nrd525.c
@@ -61,7 +61,7 @@ struct rig_caps nrd525_caps =
.mfg_name = "JRC",
.version = BACKEND_VER ".0",
.copyright = "LGPL",
- .status = RIG_STATUS_BETA,
+ .status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_RECEIVER,
.ptt_type = RIG_PTT_NONE,
.dcd_type = RIG_DCD_NONE,
diff --git a/rigs/kachina/505dsp.c b/rigs/kachina/505dsp.c
index 36e6ad37b..0640f5e7a 100644
--- a/rigs/kachina/505dsp.c
+++ b/rigs/kachina/505dsp.c
@@ -60,7 +60,7 @@ struct rig_caps k505dsp_caps =
.mfg_name = "Kachina",
.version = BACKEND_VER ".0",
.copyright = "LGPL",
- .status = RIG_STATUS_BETA,
+ .status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_COMPUTER,
.ptt_type = RIG_PTT_NONE,
.dcd_type = RIG_DCD_RIG,
diff --git a/rigs/kenwood/ts480.c b/rigs/kenwood/ts480.c
index 41269c2f1..9bb1c403f 100644
--- a/rigs/kenwood/ts480.c
+++ b/rigs/kenwood/ts480.c
@@ -1449,7 +1449,7 @@ struct rig_caps trudx_caps =
.mfg_name = "DL2MAN",
.version = BACKEND_VER ".1",
.copyright = "LGPL",
- .status = RIG_STATUS_BETA,
+ .status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
.ptt_type = RIG_PTT_RIG_MICDATA,
.dcd_type = RIG_DCD_RIG,
diff --git a/rigs/kenwood/ts711.c b/rigs/kenwood/ts711.c
index 8e3500c46..422e5ff71 100644
--- a/rigs/kenwood/ts711.c
+++ b/rigs/kenwood/ts711.c
@@ -101,7 +101,7 @@ struct rig_caps ts711_caps =
.mfg_name = "Kenwood",
.version = BACKEND_VER ".0",
.copyright = "LGPL",
- .status = RIG_STATUS_ALPHA,
+ .status = RIG_STATUS_BETA,
.rig_type = RIG_TYPE_TRANSCEIVER,
.ptt_type = RIG_PTT_RIG,
.dcd_type = RIG_DCD_NONE,
diff --git a/rigs/kenwood/ts811.c b/rigs/kenwood/ts811.c
index 043c78311..bfcdb1b2f 100644
--- a/rigs/kenwood/ts811.c
+++ b/rigs/kenwood/ts811.c
@@ -87,7 +87,7 @@ struct rig_caps ts811_caps =
.mfg_name = "Kenwood",
.version = BACKEND_VER ".0",
.copyright = "LGPL",
- .status = RIG_STATUS_ALPHA,
+ .status = RIG_STATUS_BETA,
.rig_type = RIG_TYPE_TRANSCEIVER,
.ptt_type = RIG_PTT_RIG,
.dcd_type = RIG_DCD_RIG,
diff --git a/rigs/kenwood/ts930.c b/rigs/kenwood/ts930.c
index 31a1e577e..f26542e5b 100644
--- a/rigs/kenwood/ts930.c
+++ b/rigs/kenwood/ts930.c
@@ -54,7 +54,7 @@ struct rig_caps ts930_caps =
.mfg_name = "Kenwood",
.version = BACKEND_VER ".1",
.copyright = "LGPL",
- .status = RIG_STATUS_ALPHA,
+ .status = RIG_STATUS_BETA,
.rig_type = RIG_TYPE_TRANSCEIVER,
.ptt_type = RIG_PTT_RIG,
.dcd_type = RIG_DCD_RIG,
diff --git a/rigs/kit/dds60.c b/rigs/kit/dds60.c
index 6d7e98077..30ec93f1a 100644
--- a/rigs/kit/dds60.c
+++ b/rigs/kit/dds60.c
@@ -100,7 +100,7 @@ struct rig_caps dds60_caps =
.mfg_name = "AmQRP",
.version = "20200112.0",
.copyright = "LGPL",
- .status = RIG_STATUS_BETA,
+ .status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TUNER,
.ptt_type = RIG_PTT_NONE,
.dcd_type = RIG_DCD_NONE,
diff --git a/rigs/kit/dwt.c b/rigs/kit/dwt.c
index fc21e6f6a..6f1d45844 100644
--- a/rigs/kit/dwt.c
+++ b/rigs/kit/dwt.c
@@ -549,7 +549,7 @@ struct rig_caps dwt_caps =
.mfg_name = "Coding Technologies",
.version = BACKEND_VER ".0",
.copyright = "LGPL",
- .status = RIG_STATUS_ALPHA,
+ .status = RIG_STATUS_BETA,
.rig_type = RIG_TYPE_TUNER,
.ptt_type = RIG_PTT_NONE,
.dcd_type = RIG_DCD_NONE,
diff --git a/rigs/kit/hiqsdr.c b/rigs/kit/hiqsdr.c
index e98aca072..5a58b10b9 100644
--- a/rigs/kit/hiqsdr.c
+++ b/rigs/kit/hiqsdr.c
@@ -105,7 +105,7 @@ struct rig_caps hiqsdr_caps =
.mfg_name = "N2ADR",
.version = "20200323.0",
.copyright = "LGPL",
- .status = RIG_STATUS_ALPHA,
+ .status = RIG_STATUS_BETA,
.rig_type = RIG_TYPE_TUNER,
.targetable_vfo = RIG_TARGETABLE_NONE,
.ptt_type = RIG_PTT_RIG,
diff --git a/rigs/kit/miniVNA.c b/rigs/kit/miniVNA.c
index 7ef5e0ad9..5b73e8cde 100644
--- a/rigs/kit/miniVNA.c
+++ b/rigs/kit/miniVNA.c
@@ -61,7 +61,7 @@ struct rig_caps miniVNA_caps =
.mfg_name = "mRS",
.version = "20190817.0",
.copyright = "LGPL",
- .status = RIG_STATUS_BETA,
+ .status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TUNER,
.port_type = RIG_PORT_SERIAL,
.serial_rate_min = 115200,
diff --git a/rigs/kit/pcrotor.c b/rigs/kit/pcrotor.c
index fa52f4489..c1345a034 100644
--- a/rigs/kit/pcrotor.c
+++ b/rigs/kit/pcrotor.c
@@ -111,7 +111,7 @@ const struct rot_caps pcrotor_caps =
.mfg_name = "WA6UFQ",
.version = "20081013.0",
.copyright = "LGPL",
- .status = RIG_STATUS_BETA,
+ .status = RIG_STATUS_STABLE,
.rot_type = ROT_TYPE_OTHER,
.port_type = RIG_PORT_PARALLEL,
.write_delay = 0,
diff --git a/rigs/kit/si570avrusb.c b/rigs/kit/si570avrusb.c
index 6367e3702..3f71e9258 100644
--- a/rigs/kit/si570avrusb.c
+++ b/rigs/kit/si570avrusb.c
@@ -475,7 +475,7 @@ struct rig_caps fasdr_caps =
.mfg_name = "Funkamateur",
.version = BACKEND_VER ".0",
.copyright = "LGPL",
- .status = RIG_STATUS_BETA,
+ .status = RIG_STATUS_STABLE,
.rig_type = RIG_FLAG_TUNER | RIG_FLAG_TRANSMITTER,
.ptt_type = RIG_PTT_RIG,
.dcd_type = RIG_DCD_NONE,
diff --git a/rigs/kit/usrp.c b/rigs/kit/usrp.c
index d389f2ca3..2e844788b 100644
--- a/rigs/kit/usrp.c
+++ b/rigs/kit/usrp.c
@@ -67,7 +67,7 @@ struct rig_caps usrp_caps =
.mfg_name = "GNU Radio",
.version = "0.1",
.copyright = "LGPL",
- .status = RIG_STATUS_BETA,
+ .status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TUNER,
.ptt_type = RIG_PTT_NONE,
.dcd_type = RIG_DCD_NONE,
diff --git a/rigs/lowe/hf235.c b/rigs/lowe/hf235.c
index ad7426db2..8b0a58b7f 100644
--- a/rigs/lowe/hf235.c
+++ b/rigs/lowe/hf235.c
@@ -50,7 +50,7 @@ struct rig_caps hf235_caps =
.mfg_name = "Lowe",
.version = BACKEND_VER ".0",
.copyright = "LGPL",
- .status = RIG_STATUS_BETA, /* and only basic support */
+ .status = RIG_STATUS_STABLE, /* and only basic support */
.rig_type = RIG_TYPE_RECEIVER,
.ptt_type = RIG_PTT_NONE,
.dcd_type = RIG_DCD_NONE,
diff --git a/rigs/mds/4710.c b/rigs/mds/4710.c
index d1cfacac7..b377f3847 100644
--- a/rigs/mds/4710.c
+++ b/rigs/mds/4710.c
@@ -7,7 +7,7 @@ struct rig_caps mds_4710_caps =
.mfg_name = "MDS",
.version = "20221114.0",
.copyright = "LGPL",
- .status = RIG_STATUS_ALPHA,
+ .status = RIG_STATUS_BETA,
.rig_type = RIG_TYPE_TRANSCEIVER,
.ptt_type = RIG_PTT_RIG,
.dcd_type = RIG_DCD_NONE,
diff --git a/rigs/mds/9710.c b/rigs/mds/9710.c
index b83a8c6d2..7abacdbdf 100644
--- a/rigs/mds/9710.c
+++ b/rigs/mds/9710.c
@@ -7,7 +7,7 @@ struct rig_caps mds_9710_caps =
.mfg_name = "MDS",
.version = "20221116.0",
.copyright = "LGPL",
- .status = RIG_STATUS_ALPHA,
+ .status = RIG_STATUS_BETA,
.rig_type = RIG_TYPE_TRANSCEIVER,
.ptt_type = RIG_PTT_RIG,
.dcd_type = RIG_DCD_NONE,
diff --git a/rigs/racal/ra3702.c b/rigs/racal/ra3702.c
index 5ed8aa3b2..d5d3e5c51 100644
--- a/rigs/racal/ra3702.c
+++ b/rigs/racal/ra3702.c
@@ -51,7 +51,7 @@ struct rig_caps ra3702_caps =
.mfg_name = "Racal",
.version = BACKEND_VER ".0",
.copyright = "LGPL",
- .status = RIG_STATUS_BETA,
+ .status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_RECEIVER,
.ptt_type = RIG_PTT_NONE,
.dcd_type = RIG_DCD_NONE,
diff --git a/rigs/racal/ra6790...
[truncated message content] |
|
From: n0nb <n0...@us...> - 2024-01-18 17:54:27
|
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 761f1d3b0024c4989935207a9e731c57eb2ccd8c (commit)
via 48d3f3f7509034aaaf9ed2cd98ab4b486b62f85e (commit)
from aec9348138c28a6b3d8569067e9c0717bf234843 (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 761f1d3b0024c4989935207a9e731c57eb2ccd8c
Author: Mike Black W9MDB <mdb...@ya...>
Date: Thu Jan 18 09:18:49 2024 -0600
Add rest of RIG_FUNC_SYNC changes
diff --git a/NEWS b/NEWS
index 70fe9e26f..29fdbb15a 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 RIG_FUNC_SYNC for FTDX101D/MP
* Added Barrett 4100
* Added DL2MAN (tr)uSDX -- needs refinement
* Added Thetis entry -- derived from FlexRadio/Apache PowerSDR
diff --git a/src/misc.c b/src/misc.c
index 241765f32..c296e2972 100644
--- a/src/misc.c
+++ b/src/misc.c
@@ -740,6 +740,7 @@ static const struct
{ RIG_FUNC_SEND_MORSE, "SEND_MORSE" },
{ RIG_FUNC_SEND_VOICE_MEM, "SEND_VOICE_MEM" },
{ RIG_FUNC_OVF_STATUS, "OVF_STATUS" },
+ { RIG_FUNC_SYNC, "SYNC" },
{ RIG_FUNC_NONE, "" },
};
diff --git a/src/sprintflst.c b/src/sprintflst.c
index ca87d8b6f..b6d70b125 100644
--- a/src/sprintflst.c
+++ b/src/sprintflst.c
@@ -177,6 +177,7 @@ int rig_sprintf_func(char *str, int nlen, setting_t func)
if (!ms || !ms[0])
{
+ rig_debug(RIG_EINTERNAL, "%s: unknown RIG_FUNC=%x\n", __func__, i);
continue; /* unknown, FIXME! */
}
commit 48d3f3f7509034aaaf9ed2cd98ab4b486b62f85e
Author: Mike Black W9MDB <mdb...@ya...>
Date: Thu Jan 18 07:56:30 2024 -0600
Add RIG_FUNC_SYNC -- only for FTDX101D/MP right now.
diff --git a/include/hamlib/rig.h b/include/hamlib/rig.h
index 8044342c6..4e40e5c46 100644
--- a/include/hamlib/rig.h
+++ b/include/hamlib/rig.h
@@ -1273,7 +1273,7 @@ typedef uint64_t setting_t;
#define RIG_FUNC_SEND_MORSE CONSTANT_64BIT_FLAG (45) /*!< \c SEND_MORSE -- Send specified characters using CW */
#define RIG_FUNC_SEND_VOICE_MEM CONSTANT_64BIT_FLAG (46) /*!< \c SEND_VOICE_MEM -- Transmit in SSB message stored in memory */
#define RIG_FUNC_OVF_STATUS CONSTANT_64BIT_FLAG (47) /*!< \c OVF -- Read overflow status 0=Off, 1=On */
-#define RIG_FUNC_BIT48 CONSTANT_64BIT_FLAG (48) /*!< \c available for future RIG_FUNC items */
+#define RIG_FUNC_SYNC CONSTANT_64BIT_FLAG (48) /*!< \c Synchronize VFOS -- FTDX101D/MP for now SY command */
#define RIG_FUNC_BIT49 CONSTANT_64BIT_FLAG (49) /*!< \c available for future RIG_FUNC items */
#define RIG_FUNC_BIT50 CONSTANT_64BIT_FLAG (50) /*!< \c available for future RIG_FUNC items */
#define RIG_FUNC_BIT51 CONSTANT_64BIT_FLAG (51) /*!< \c available for future RIG_FUNC items */
diff --git a/rigs/yaesu/ftdx101.h b/rigs/yaesu/ftdx101.h
index fd830f1c5..64a433a3c 100644
--- a/rigs/yaesu/ftdx101.h
+++ b/rigs/yaesu/ftdx101.h
@@ -65,7 +65,8 @@
#define FTDX101_FUNCS (RIG_FUNC_TONE|RIG_FUNC_TSQL|RIG_FUNC_LOCK|\
RIG_FUNC_MON|RIG_FUNC_NB|RIG_FUNC_NR|RIG_FUNC_VOX|\
RIG_FUNC_FBKIN|RIG_FUNC_COMP|RIG_FUNC_ANF|RIG_FUNC_MN|\
- RIG_FUNC_RIT|RIG_FUNC_XIT|RIG_FUNC_TUNER|RIG_FUNC_APF)
+ RIG_FUNC_RIT|RIG_FUNC_XIT|RIG_FUNC_TUNER|RIG_FUNC_APF|\
+ RIG_FUNC_SYNC)
/* TBC */
#define FTDX101_VFO_OPS (RIG_OP_TUNE|RIG_OP_CPY|RIG_OP_XCHG|\
diff --git a/rigs/yaesu/newcat.c b/rigs/yaesu/newcat.c
index fa278e7f6..b579e1abb 100644
--- a/rigs/yaesu/newcat.c
+++ b/rigs/yaesu/newcat.c
@@ -6401,6 +6401,16 @@ int newcat_set_func(RIG *rig, vfo_t vfo, setting_t func, int status)
break;
+ case RIG_FUNC_SYNC:
+ if (!newcat_valid_command(rig, "SY"))
+ {
+ RETURNFUNC(-RIG_ENAVAIL);
+ }
+
+ SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "SY%d%c", status ? 1 : 0,
+ cat_term);
+ break;
+
default:
RETURNFUNC(-RIG_EINVAL);
}
@@ -6694,6 +6704,15 @@ int newcat_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status)
break;
+ case RIG_FUNC_SYNC:
+ if (!newcat_valid_command(rig, "SY"))
+ {
+ RETURNFUNC(-RIG_ENAVAIL);
+ }
+
+ SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "SY%c", cat_term);
+ break;
+
default:
RETURNFUNC(-RIG_EINVAL);
}
@@ -6808,6 +6827,10 @@ int newcat_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status)
break;
+ case RIG_FUNC_SYNC:
+ *status = (retfunc[0] == '1') ? 1 : 0;
+ break;
+
default:
RETURNFUNC(-RIG_EINVAL);
}
diff --git a/rigs/yaesu/newcat.h b/rigs/yaesu/newcat.h
index 43ffe73f2..dadf05f27 100644
--- a/rigs/yaesu/newcat.h
+++ b/rigs/yaesu/newcat.h
@@ -50,7 +50,7 @@
typedef char ncboolean;
/* shared function version */
-#define NEWCAT_VER "20240113"
+#define NEWCAT_VER "20240118"
/* Hopefully large enough for future use, 128 chars plus '\0' */
#define NEWCAT_DATA_LEN 129
-----------------------------------------------------------------------
Summary of changes:
NEWS | 1 +
include/hamlib/rig.h | 2 +-
rigs/yaesu/ftdx101.h | 3 ++-
rigs/yaesu/newcat.c | 23 +++++++++++++++++++++++
rigs/yaesu/newcat.h | 2 +-
src/misc.c | 1 +
src/sprintflst.c | 1 +
7 files changed, 30 insertions(+), 3 deletions(-)
hooks/post-receive
--
Hamlib -- Ham radio control libraries
|
|
From: n0nb <n0...@us...> - 2024-01-18 14:18:56
|
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 aec9348138c28a6b3d8569067e9c0717bf234843 (commit)
from df64af4583a6e8fcac0494cd64a958ebb55ceff1 (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 aec9348138c28a6b3d8569067e9c0717bf234843
Author: Mike Black W9MDB <mdb...@ya...>
Date: Thu Jan 18 07:39:56 2024 -0600
Add rig_band_changes to HAMLIB API
diff --git a/include/hamlib/rig.h b/include/hamlib/rig.h
index 4a48d1c04..8044342c6 100644
--- a/include/hamlib/rig.h
+++ b/include/hamlib/rig.h
@@ -3846,6 +3846,7 @@ extern HAMLIB_EXPORT(char*) rig_date_strget(char *buf, int buflen, int localtime
enum GPIO { GPIO1, GPIO2, GPIO3, GPIO4 };
extern HAMLIB_EXPORT(int) rig_cm108_get_bit(hamlib_port_t *p, enum GPIO gpio, int *bit);
extern HAMLIB_EXPORT(int) rig_cm108_set_bit(hamlib_port_t *p, enum GPIO gpio, int bit);
+extern HAMLIB_EXPORT(int) rig_band_changed(RIG *rig, hamlib_bandselect_t band);
extern HAMLIB_EXPORT(void *) rig_data_pointer(RIG *rig, rig_ptrx_t idx);
-----------------------------------------------------------------------
Summary of changes:
include/hamlib/rig.h | 1 +
1 file changed, 1 insertion(+)
hooks/post-receive
--
Hamlib -- Ham radio control libraries
|
|
From: n0nb <n0...@us...> - 2024-01-16 13:26:57
|
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 df64af4583a6e8fcac0494cd64a958ebb55ceff1 (commit)
via 0e5d2cfc481e209624e8d9858f7129067c3be179 (commit)
via 4d568c782e5e296f9d46e05fe8526de46f4fc51e (commit)
via d6689145a048ad34bd91904186df93b4fc39b7aa (commit)
via 34ccdcc5a57d7f06ebf6394fa50a94078b16e6ed (commit)
via f15679f5758653ff2f0f09aeefea3eecc76d6afe (commit)
via 7f6736368701d01944fb4f752e31099f9b0ff67e (commit)
via 64f69421de9f72cb8707b87915dbbb82add28ecf (commit)
via aa9c3b39baf9249e8bc3c8449971daa0cf4ea864 (commit)
via fddddf1f6f1a2acfa38a92ff6ef467eeda7b4bea (commit)
via 2c85a963092d4dd66bf6982a76dcc3c41ad70efe (commit)
via b0d1eb297f009eef57d1d5bb47055897c22ab224 (commit)
via cd1f4d39290b698e1db39f7deb055ad47de5cd89 (commit)
via e178a984ca693750f2b8a45f3e6b1e516faed281 (commit)
via 0b67958751067fc42a41a3ee6a734cbc70f5b4c2 (commit)
via 4b03abbdac27fabb8d084c0331a5810775438699 (commit)
via 11b5da878283f428144bbb21612dacc19fcd0a23 (commit)
via 190747430f6b6bd7b9283175d3fccb85057b0c28 (commit)
via f8fd79442dcc28a3c3ea1c7494754c8c8ff5baee (commit)
via 34f953ba0b04f25475d427a799b1f8b08eae40a3 (commit)
via 9b817f325df21e52416416aad431f50c6e9d770a (commit)
via dc0fd2955ddc7a2eb3bd9419e2ac3135aade0255 (commit)
via 89876895de0643f2ba050bed623f60ef2e96a786 (commit)
via 79c496800e1b5d15b497b057840047eea7705e05 (commit)
via a6951c8e1485df9ac2c71aad03bd7987f566d88a (commit)
via 2646f0fd3a18938dcac26a3e843774dd01740a9e (commit)
via 8280748acee945b084f740f1430903b4d42fd838 (commit)
via 32ed2c4d919be757e8616f3745ef8d668b9f09c9 (commit)
via ac054e9f75f8b9779346878eef3fcf2b7e33feaa (commit)
via 05fb4389f79280fb5f6198688d6c4cc58625245b (commit)
via e25fab7d2f279b6c8fb36775c16e5347fa7fc5ef (commit)
via ddb0a6427286cb8ee020ad4e1181e5ad6d42f76a (commit)
via 47062cf812ecda243266e40f7e8932966a236e7e (commit)
via 7002ca9f092b319a9e4643fb786efd714a0e182e (commit)
via a7d2a5e32b5084f584dccd07488c4e3082fb3238 (commit)
via 2709fb8ab9fdf5e8f24db7052d7d871381490eaa (commit)
via e610d3b691328e38302a20b451b813b477a10c3f (commit)
via cb74453f06e4d3955281c52ebe88f99c122dcf9c (commit)
via 5e59a555d8e605201b167c8b987613b43dbcd13c (commit)
via df78960ff1df985c512c7fbd2af36cd8b7e819e5 (commit)
via 8dff750285e43281511d4955813116418d22421f (commit)
via 9af715d2443f56b11862d34ddb56d8ccdbc48fb4 (commit)
via b38014832f36f4d901761829d13fae669a17acd7 (commit)
via 9c7a21282cef499e61a16513619a45b5860d2aac (commit)
from 21c14da270d8d73b9ecfffbf4c7709d6dc4f8c32 (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 df64af4583a6e8fcac0494cd64a958ebb55ceff1
Author: Mike Black W9MDB <mdb...@ya...>
Date: Mon Jan 15 11:18:46 2024 -0600
Suppress no get_vfo message for Icom rigs.
No hope of getting Icom to ever provide this ability
diff --git a/src/rig.c b/src/rig.c
index 85adb1bcb..c1cfd970d 100644
--- a/src/rig.c
+++ b/src/rig.c
@@ -3329,7 +3329,7 @@ int HAMLIB_API rig_get_vfo(RIG *rig, vfo_t *vfo)
caps = rig->caps;
- if (caps->get_vfo == NULL)
+ if (caps->get_vfo == NULL && RIG_ICOM != RIG_BACKEND_NUM(rig->caps->rig_model))
{
rig_debug(RIG_DEBUG_WARN, "%s: no get_vfo\n", __func__);
ELAPSED2;
commit 0e5d2cfc481e209624e8d9858f7129067c3be179
Author: Mike Black W9MDB <mdb...@ya...>
Date: Mon Jan 15 07:33:21 2024 -0600
Fix tx_vfo default in rig.c
diff --git a/src/rig.c b/src/rig.c
index e280dbec3..85adb1bcb 100644
--- a/src/rig.c
+++ b/src/rig.c
@@ -4509,7 +4509,7 @@ int HAMLIB_API rig_set_split_freq(RIG *rig, vfo_t vfo, freq_t tx_freq)
{
const struct rig_caps *caps;
int retcode, rc2;
- vfo_t curr_vfo, tx_vfo;
+ vfo_t curr_vfo, tx_vfo = RIG_VFO_CURR;
freq_t tfreq = 0;
if (CHECK_RIG_ARG(rig))
commit 4d568c782e5e296f9d46e05fe8526de46f4fc51e
Author: Mike Black W9MDB <mdb...@ya...>
Date: Mon Jan 15 07:28:22 2024 -0600
Speed up rig_band_changed actions for FT991 and perhaps others
Putting the AC001; command immediately after FA freq change make the band change end state occur immediately
diff --git a/src/rig.c b/src/rig.c
index 8c395be28..e280dbec3 100644
--- a/src/rig.c
+++ b/src/rig.c
@@ -588,7 +588,7 @@ RIG *HAMLIB_API rig_init(rig_model_t rig_model)
rp = RIGPORT(rig);
pttp = PTTPORT(rig);
dcdp = DCDPORT(rig);
-
+
rs->rig_model = caps->rig_model;
rs->priv = NULL;
rs->async_data_enabled = 0;
@@ -1310,7 +1310,7 @@ int HAMLIB_API rig_open(RIG *rig)
case RIG_DCD_GPIO:
case RIG_DCD_GPION:
dcdp->fd = gpio_open(dcdp, 0,
- RIG_DCD_GPION == dcdp->type.dcd ? 0 : 1);
+ RIG_DCD_GPION == dcdp->type.dcd ? 0 : 1);
if (dcdp->fd < 0)
{
@@ -1977,6 +1977,7 @@ int rig_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
vfo_t vfo_save;
static int last_band = -1;
int curr_band;
+ int band_changing = 0;
if (CHECK_RIG_ARG(rig))
{
@@ -1990,7 +1991,8 @@ int rig_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
{
rig_debug(RIG_DEBUG_VERBOSE, "%s: band changing to %s\n", __func__,
rig_get_band_str(rig, curr_band, 0));
- rig_band_changed(rig, curr_band);
+ band_changing = 1;
+ //rig_band_changed(rig, curr_band);
last_band = curr_band;
}
@@ -2117,8 +2119,13 @@ int rig_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
do
{
- HAMLIB_TRACE;
retcode = caps->set_freq(rig, vfo, freq);
+
+ if (band_changing)
+ {
+ rig_band_changed(rig, curr_band);
+ }
+
// disabling the freq check as of 2023-06-02
// seems unnecessary and slows down rigs unnecessarily
tfreq = freq;
@@ -2207,6 +2214,9 @@ int rig_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
}
HAMLIB_TRACE;
+
+ if (band_changing) { rig_band_changed(rig, curr_band); }
+
retcode = caps->set_freq(rig, vfo, freq);
}
@@ -4521,10 +4531,8 @@ int HAMLIB_API rig_set_split_freq(RIG *rig, vfo_t vfo, freq_t tx_freq)
{
tx_vfo = rig->state.tx_vfo;
}
- else
- {
- tx_vfo = vfo_fixup(rig, vfo, rig->state.cache.split);
- }
+
+ tx_vfo = vfo_fixup(rig, tx_vfo, rig->state.cache.split);
rig_get_freq(rig, tx_vfo, &tfreq);
@@ -8652,18 +8660,22 @@ int morse_data_handler_set_keyspd(RIG *rig, int keyspd)
*/
HAMLIB_EXPORT(void *) rig_data_pointer(RIG *rig, rig_ptrx_t idx)
{
- switch(idx)
+ switch (idx)
{
case RIG_PTRX_RIGPORT:
- return RIGPORT(rig);
+ return RIGPORT(rig);
+
case RIG_PTRX_PTTPORT:
- return PTTPORT(rig);
+ return PTTPORT(rig);
+
case RIG_PTRX_DCDPORT:
- return DCDPORT(rig);
+ return DCDPORT(rig);
+
case RIG_PTRX_CACHE:
- return CACHE(rig);
+ return CACHE(rig);
+
default:
- rig_debug(RIG_DEBUG_ERR, "%s: Invalid data index=%d\n", __func__, idx);
- return NULL;
+ rig_debug(RIG_DEBUG_ERR, "%s: Invalid data index=%d\n", __func__, idx);
+ return NULL;
}
}
commit d6689145a048ad34bd91904186df93b4fc39b7aa
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sun Jan 14 23:06:41 2024 -0600
Make rig_band_changed HAMLIB_API
diff --git a/src/band_changed.c b/src/band_changed.c
index 075f46ce2..848bef0bb 100644
--- a/src/band_changed.c
+++ b/src/band_changed.c
@@ -2,7 +2,7 @@
// Can customize during build
// Eventually should improved this for external actions when
// rigctld gets integrated as a service within Hamlib
-int rig_band_changed(RIG *rig, hamlib_bandselect_t band)
+int HAMLIB_API rig_band_changed(RIG *rig, hamlib_bandselect_t band)
{
// See band_changed.c
// Examples:
commit 34ccdcc5a57d7f06ebf6394fa50a94078b16e6ed
Merge: 0b6795875 f15679f57
Author: Michael Black <mdb...@ya...>
Date: Sun Jan 14 22:24:48 2024 -0600
Merge pull request #1476 from GeoBaltz/rp2
Phase 2 of moving port structures
commit f15679f5758653ff2f0f09aeefea3eecc76d6afe
Author: George Baltz N3GB <Geo...@gm...>
Date: Sun Jan 14 16:50:06 2024 -0500
Update example.c
Avoid using raw rigport, in two different ways.
Fix variable name.
diff --git a/tests/example.c b/tests/example.c
index c784c3698..a9274d3c0 100644
--- a/tests/example.c
+++ b/tests/example.c
@@ -43,9 +43,9 @@ int main()
/* Instantiate a rig */
my_rig = rig_init(MODEL); // your rig model.
- strncpy(my_rig->state.rigport.pathname, PATH, HAMLIB_FILPATHLEN - 1);
+ rig_set_conf(my_rig, rig_token_lookup(my_rig, "rig_pathname"), PATH);
- my_rig->state.rigport.parm.serial.rate = BAUD; // your baud rate
+ HAMLIB_RIGPORT(my_rig)->parm.serial.rate = BAUD; // your baud rate
/* Open my rig */
retcode = rig_open(my_rig);
@@ -131,7 +131,7 @@ int main()
if (range)
{
char vfolist[256];
- rig_sprintf_vfo(vfolist, sizeof(vfo_list), my_rig->state.vfo_list);
+ rig_sprintf_vfo(vfolist, sizeof(vfolist), my_rig->state.vfo_list);
printf("Range start=%"PRIfreq", end=%"PRIfreq", low_power=%d, high_power=%d, vfos=%s\n",
range->startf, range->endf, range->low_power, range->high_power, vfolist);
}
commit 7f6736368701d01944fb4f752e31099f9b0ff67e
Author: George Baltz N3GB <Geo...@gm...>
Date: Sun Jan 14 15:08:18 2024 -0500
Need more parens to work in expressions.
Clean up sticky note items.
diff --git a/include/hamlib/rig.h b/include/hamlib/rig.h
index f4760ed68..4a48d1c04 100644
--- a/include/hamlib/rig.h
+++ b/include/hamlib/rig.h
@@ -2489,13 +2489,13 @@ typedef hamlib_port_t port_t;
*/
#else
/* Define external unique names */
-#define HAMLIB_RIGPORT(r) (hamlib_port_t *)rig_data_pointer(r, RIG_PTRX_RIGPORT)
-#define HAMLIB_PTTPORT(r) (hamlib_port_t *)rig_data_pointer(r, RIG_PTRX_PTTPORT)
-#define HAMLIB_DCDPORT(r) (hamlib_port_t *)rig_data_pointer(r, RIG_PTRX_DCDPORT)
-//#define HAMLIB_CACHE(r) (struct rig_cache *)rig_data_pointer(r, RIG_PTRX_CACHE)
-#define HAMLIB_AMPPORT(a) (hamlib_port_t *)amp_data_pointer(a, RIG_PTRX_AMPPORT)
-#define HAMLIB_ROTPORT(r) (hamlib_port_t *)rot_data_pointer(r, RIG_PTRX_ROTPORT)
-#define HAMLIB_ROTPORT2(r) (hamlib_port_t *)rot_data_pointer(r, RIG_PTRX_ROTPORT2)
+#define HAMLIB_RIGPORT(r) ((hamlib_port_t *)rig_data_pointer(r, RIG_PTRX_RIGPORT))
+#define HAMLIB_PTTPORT(r) ((hamlib_port_t *)rig_data_pointer(r, RIG_PTRX_PTTPORT))
+#define HAMLIB_DCDPORT(r) ((hamlib_port_t *)rig_data_pointer(r, RIG_PTRX_DCDPORT))
+#define HAMLIB_CACHE(r) ((struct rig_cache *)rig_data_pointer(r, RIG_PTRX_CACHE))
+#define HAMLIB_AMPPORT(a) ((hamlib_port_t *)amp_data_pointer(a, RIG_PTRX_AMPPORT))
+#define HAMLIB_ROTPORT(r) ((hamlib_port_t *)rot_data_pointer(r, RIG_PTRX_ROTPORT))
+#define HAMLIB_ROTPORT2(r) ((hamlib_port_t *)rot_data_pointer(r, RIG_PTRX_ROTPORT2))
#endif
typedef enum {
diff --git a/src/conf.c b/src/conf.c
index 7a37428a3..5099a0fad 100644
--- a/src/conf.c
+++ b/src/conf.c
@@ -573,7 +573,7 @@ static int frontend_set_conf(RIG *rig, token_t token, const char *val)
}
// JTDX and WSJTX currently use state.pttport to check for PTT_NONE
- rig->state.pttport.type.ptt = pttp->type.ptt;
+// rig->state.pttport.type.ptt = pttp->type.ptt;
rs->pttport_deprecated.type.ptt = pttp->type.ptt;
break;
commit 64f69421de9f72cb8707b87915dbbb82add28ecf
Author: George Baltz N3GB <Geo...@gm...>
Date: Sat Jan 13 20:55:27 2024 -0500
Pointerize all the ports in src/rig.c
diff --git a/src/rig.c b/src/rig.c
index a3c93396f..8c395be28 100644
--- a/src/rig.c
+++ b/src/rig.c
@@ -518,6 +518,7 @@ RIG *HAMLIB_API rig_init(rig_model_t rig_model)
RIG *rig;
const struct rig_caps *caps;
struct rig_state *rs;
+ hamlib_port_t *rp, *pttp, *dcdp;
int i;
rig_check_rig_caps();
@@ -582,11 +583,17 @@ RIG *HAMLIB_API rig_init(rig_model_t rig_model)
pthread_mutex_init(&rs->mutex_set_transaction, NULL);
#endif
+ //TODO Allocate and link ports
+ // For now, use the embedded ones
+ rp = RIGPORT(rig);
+ pttp = PTTPORT(rig);
+ dcdp = DCDPORT(rig);
+
rs->rig_model = caps->rig_model;
rs->priv = NULL;
rs->async_data_enabled = 0;
- rs->rigport.fd = -1;
- rs->pttport.fd = -1;
+ rp->fd = -1;
+ pttp->fd = -1;
rs->comm_state = 0;
rig->state.depth = 1;
#if 0 // extra debug if needed
@@ -594,9 +601,9 @@ RIG *HAMLIB_API rig_init(rig_model_t rig_model)
__LINE__, &rs->comm_state,
rs->comm_state);
#endif
- rs->rigport.type.rig = caps->port_type; /* default from caps */
+ rp->type.rig = caps->port_type; /* default from caps */
#if defined(HAVE_PTHREAD)
- rs->rigport.asyncio = 0;
+ rp->asyncio = 0;
#endif
rig->state.comm_status = RIG_COMM_STATUS_CONNECTING;
@@ -605,73 +612,73 @@ RIG *HAMLIB_API rig_init(rig_model_t rig_model)
switch (caps->port_type)
{
case RIG_PORT_SERIAL:
- strncpy(rs->rigport.pathname, DEFAULT_SERIAL_PORT, HAMLIB_FILPATHLEN - 1);
- rs->rigport.parm.serial.rate = caps->serial_rate_max; /* fastest ! */
- rs->rigport.parm.serial.data_bits = caps->serial_data_bits;
- rs->rigport.parm.serial.stop_bits = caps->serial_stop_bits;
- rs->rigport.parm.serial.parity = caps->serial_parity;
- rs->rigport.parm.serial.handshake = caps->serial_handshake;
+ strncpy(rp->pathname, DEFAULT_SERIAL_PORT, HAMLIB_FILPATHLEN - 1);
+ rp->parm.serial.rate = caps->serial_rate_max; /* fastest ! */
+ rp->parm.serial.data_bits = caps->serial_data_bits;
+ rp->parm.serial.stop_bits = caps->serial_stop_bits;
+ rp->parm.serial.parity = caps->serial_parity;
+ rp->parm.serial.handshake = caps->serial_handshake;
break;
case RIG_PORT_PARALLEL:
- strncpy(rs->rigport.pathname, DEFAULT_PARALLEL_PORT, HAMLIB_FILPATHLEN - 1);
+ strncpy(rp->pathname, DEFAULT_PARALLEL_PORT, HAMLIB_FILPATHLEN - 1);
break;
/* Adding support for CM108 GPIO. This is compatible with CM108 series
* USB audio chips from CMedia and SSS1623 series USB audio chips from 3S
*/
case RIG_PORT_CM108:
- strncpy(rs->rigport.pathname, DEFAULT_CM108_PORT, HAMLIB_FILPATHLEN);
+ strncpy(rp->pathname, DEFAULT_CM108_PORT, HAMLIB_FILPATHLEN);
- if (rs->rigport.parm.cm108.ptt_bitnum == 0)
+ if (rp->parm.cm108.ptt_bitnum == 0)
{
- rs->rigport.parm.cm108.ptt_bitnum = DEFAULT_CM108_PTT_BITNUM;
- rs->pttport.parm.cm108.ptt_bitnum = DEFAULT_CM108_PTT_BITNUM;
+ rp->parm.cm108.ptt_bitnum = DEFAULT_CM108_PTT_BITNUM;
+ pttp->parm.cm108.ptt_bitnum = DEFAULT_CM108_PTT_BITNUM;
}
break;
case RIG_PORT_GPIO:
- strncpy(rs->rigport.pathname, DEFAULT_GPIO_PORT, HAMLIB_FILPATHLEN);
+ strncpy(rp->pathname, DEFAULT_GPIO_PORT, HAMLIB_FILPATHLEN);
break;
case RIG_PORT_NETWORK:
case RIG_PORT_UDP_NETWORK:
- strncpy(rs->rigport.pathname, "127.0.0.1:4532", HAMLIB_FILPATHLEN - 1);
+ strncpy(rp->pathname, "127.0.0.1:4532", HAMLIB_FILPATHLEN - 1);
break;
default:
- strncpy(rs->rigport.pathname, "", HAMLIB_FILPATHLEN - 1);
+ strncpy(rp->pathname, "", HAMLIB_FILPATHLEN - 1);
}
- rs->rigport.write_delay = caps->write_delay;
- rs->rigport.post_write_delay = caps->post_write_delay;
+ rp->write_delay = caps->write_delay;
+ rp->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 && caps->timeout_retry >= 0)
{
- rs->rigport.timeout = caps->timeout / 2;
+ rp->timeout = caps->timeout / 2;
}
- rs->rigport.retry = caps->retry;
+ rp->retry = caps->retry;
if (caps->timeout_retry < 0)
{
// Rigs may disable read timeout retries
- rs->rigport.timeout_retry = 0;
+ rp->timeout_retry = 0;
}
else if (caps->timeout_retry == 0)
{
// Default to 1 retry for read timeouts
- rs->rigport.timeout_retry = 1;
+ rp->timeout_retry = 1;
}
else
{
- rs->rigport.timeout_retry = caps->timeout_retry;
+ rp->timeout_retry = caps->timeout_retry;
}
- rs->pttport.type.ptt = caps->ptt_type;
- rs->dcdport.type.dcd = caps->dcd_type;
+ pttp->type.ptt = caps->ptt_type;
+ dcdp->type.dcd = caps->dcd_type;
rs->vfo_comp = 0.0; /* override it with preferences */
rs->current_vfo = RIG_VFO_CURR; /* we don't know yet! */
@@ -837,7 +844,7 @@ RIG *HAMLIB_API rig_init(rig_model_t rig_model)
rs->max_ifshift = caps->max_ifshift;
rs->announces = caps->announces;
- rs->rigport.fd = rs->pttport.fd = rs->dcdport.fd = -1;
+ rp->fd = pttp->fd = dcdp->fd = -1;
// some rigs (like SDR) behave differnt when checking for power on
// So we assume power is on until one of the backends KNOWS it is off
rs->powerstat = RIG_POWER_ON; // default to power on until proven otherwise
@@ -889,6 +896,9 @@ int HAMLIB_API rig_open(RIG *rig)
{
struct rig_caps *caps;
struct rig_state *rs;
+ hamlib_port_t *rp = RIGPORT(rig);
+ hamlib_port_t *pttp = PTTPORT(rig);
+ hamlib_port_t *dcdp = DCDPORT(rig);
int status = RIG_OK;
value_t parm_value;
//unsigned int net1, net2, net3, net4, net5, net6, net7, net8, port;
@@ -904,10 +914,10 @@ int HAMLIB_API rig_open(RIG *rig)
caps = rig->caps;
rs = &rig->state;
- rs->rigport.rig = rig;
+ rp->rig = rig;
rs->rigport_deprecated.rig = rig;
- if (strcmp(rs->rigport.pathname, "USB") == 0)
+ if (strcmp(rp->pathname, "USB") == 0)
{
rig_debug(RIG_DEBUG_ERR, "%s: 'USB' is not a valid COM port name\n", __func__);
errno = 2;
@@ -917,27 +927,27 @@ int HAMLIB_API rig_open(RIG *rig)
// rigctl/rigctld may have deprecated values -- backwards compatibility
if (rs->rigport_deprecated.pathname[0] != 0)
{
- strcpy(rs->rigport.pathname, rs->rigport_deprecated.pathname);
+ strcpy(rp->pathname, rs->rigport_deprecated.pathname);
}
if (rs->pttport_deprecated.type.ptt != RIG_PTT_NONE)
{
- rs->pttport.type.ptt = rs->pttport_deprecated.type.ptt;
+ pttp->type.ptt = rs->pttport_deprecated.type.ptt;
}
if (rs->dcdport_deprecated.type.dcd != RIG_DCD_NONE)
{
- rs->dcdport.type.dcd = rs->dcdport_deprecated.type.dcd;
+ dcdp->type.dcd = rs->dcdport_deprecated.type.dcd;
}
if (rs->pttport_deprecated.pathname[0] != 0)
{
- strcpy(rs->pttport.pathname, rs->pttport_deprecated.pathname);
+ strcpy(pttp->pathname, rs->pttport_deprecated.pathname);
}
if (rs->dcdport_deprecated.pathname[0] != 0)
{
- strcpy(rs->dcdport.pathname, rs->dcdport_deprecated.pathname);
+ strcpy(dcdp->pathname, rs->dcdport_deprecated.pathname);
}
rig_settings_load_all(NULL); // load default .hamlib_settings
@@ -987,12 +997,12 @@ int HAMLIB_API rig_open(RIG *rig)
"%s: async_data_enable=%d, async_data_supported=%d\n", __func__,
rs->async_data_enabled, caps->async_data_supported);
rs->async_data_enabled = rs->async_data_enabled && caps->async_data_supported;
- rs->rigport.asyncio = rs->async_data_enabled;
+ rp->asyncio = rs->async_data_enabled;
- if (strlen(rs->rigport.pathname) > 0)
+ if (strlen(rp->pathname) > 0)
{
char hoststr[256], portstr[6];
- status = parse_hoststr(rs->rigport.pathname, sizeof(rs->rigport.pathname),
+ status = parse_hoststr(rp->pathname, sizeof(rp->pathname),
hoststr, portstr);
if (status == RIG_OK) { is_network = 1; }
@@ -1001,16 +1011,16 @@ int HAMLIB_API rig_open(RIG *rig)
#if 0
// determine if we have a network address
//
- is_network |= sscanf(rs->rigport.pathname, "%u.%u.%u.%u:%u", &net1, &net2,
+ is_network |= sscanf(rp->pathname, "%u.%u.%u.%u:%u", &net1, &net2,
&net3, &net4, &port) == 5;
- is_network |= sscanf(rs->rigport.pathname, ":%u", &port) == 1;
- is_network |= sscanf(rs->rigport.pathname, "%u::%u:%u:%u:%u:%u", &net1, &net2,
+ is_network |= sscanf(rp->pathname, ":%u", &port) == 1;
+ is_network |= sscanf(rp->pathname, "%u::%u:%u:%u:%u:%u", &net1, &net2,
&net3, &net4, &net5, &port) == 6;
- is_network |= sscanf(rs->rigport.pathname, "%u:%u:%u:%u:%u:%u:%u:%u:%u", &net1,
+ is_network |= sscanf(rp->pathname, "%u:%u:%u:%u:%u:%u:%u:%u:%u", &net1,
&net2, &net3, &net4, &net5, &net6, &net7, &net8, &port) == 9;
// if we haven't met one of the condition above then we must have a hostname
- if (!is_network && (token = strtok_r(rs->rigport.pathname, ":", &strtokp)))
+ if (!is_network && (token = strtok_r(rp->pathname, ":", &strtokp)))
{
rig_debug(RIG_DEBUG_TRACE, "%s: token1=%s\n", __func__, token);
token = strtok_r(strtokp, ":", &strtokp);
@@ -1028,8 +1038,8 @@ int HAMLIB_API rig_open(RIG *rig)
if (is_network)
{
rig_debug(RIG_DEBUG_TRACE, "%s: using network address %s\n", __func__,
- rs->rigport.pathname);
- rs->rigport.type.rig = RIG_PORT_NETWORK;
+ rp->pathname);
+ rp->type.rig = RIG_PORT_NETWORK;
if (RIG_BACKEND_NUM(rig->caps->rig_model) == RIG_ICOM)
{
@@ -1039,7 +1049,7 @@ int HAMLIB_API rig_open(RIG *rig)
{
rig_debug(RIG_DEBUG_TRACE, "%s(%d): Icom rig UDP network enabled\n", __FILE__,
__LINE__);
- rs->rigport.type.rig = RIG_PORT_UDP_NETWORK;
+ rp->type.rig = RIG_PORT_UDP_NETWORK;
}
#endif
@@ -1051,55 +1061,55 @@ int HAMLIB_API rig_open(RIG *rig)
rig_debug(RIG_DEBUG_VERBOSE, "%s(%d): %p rs->comm_state==1?=%d\n", __func__,
__LINE__, &rs->comm_state,
rs->comm_state);
- port_close(&rs->rigport, rs->rigport.type.rig);
+ port_close(rp, rp->type.rig);
rs->comm_state = 0;
RETURNFUNC2(-RIG_EINVAL);
}
rs->comm_status = RIG_COMM_STATUS_CONNECTING;
- rs->rigport.fd = -1;
+ rp->fd = -1;
- if (rs->rigport.type.rig == RIG_PORT_SERIAL)
+ if (rp->type.rig == RIG_PORT_SERIAL)
{
- if (rs->rigport.parm.serial.rts_state != RIG_SIGNAL_UNSET
- && rs->rigport.parm.serial.handshake == RIG_HANDSHAKE_HARDWARE)
+ if (rp->parm.serial.rts_state != RIG_SIGNAL_UNSET
+ && rp->parm.serial.handshake == RIG_HANDSHAKE_HARDWARE)
{
rig_debug(RIG_DEBUG_ERR,
"%s: cannot set RTS with hardware handshake \"%s\"\n",
__func__,
- rs->rigport.pathname);
+ rp->pathname);
RETURNFUNC2(-RIG_ECONF);
}
- if ('\0' == rs->pttport.pathname[0]
- || !strcmp(rs->pttport.pathname, rs->rigport.pathname))
+ if ('\0' == pttp->pathname[0]
+ || !strcmp(pttp->pathname, rp->pathname))
{
/* check for control line conflicts */
- if (rs->rigport.parm.serial.rts_state != RIG_SIGNAL_UNSET
- && rs->pttport.type.ptt == RIG_PTT_SERIAL_RTS)
+ if (rp->parm.serial.rts_state != RIG_SIGNAL_UNSET
+ && pttp->type.ptt == RIG_PTT_SERIAL_RTS)
{
rig_debug(RIG_DEBUG_ERR,
"%s: cannot set RTS with PTT by RTS \"%s\"\n",
__func__,
- rs->rigport.pathname);
+ rp->pathname);
RETURNFUNC2(-RIG_ECONF);
}
- if (rs->rigport.parm.serial.dtr_state != RIG_SIGNAL_UNSET
- && rs->pttport.type.ptt == RIG_PTT_SERIAL_DTR)
+ if (rp->parm.serial.dtr_state != RIG_SIGNAL_UNSET
+ && pttp->type.ptt == RIG_PTT_SERIAL_DTR)
{
rig_debug(RIG_DEBUG_ERR,
"%s: cannot set DTR with PTT by DTR \"%s\"\n",
__func__,
- rs->rigport.pathname);
+ rp->pathname);
RETURNFUNC2(-RIG_ECONF);
}
}
}
- rs->rigport.timeout = caps->timeout;
- status = port_open(&rs->rigport);
+ rp->timeout = caps->timeout;
+ status = port_open(rp);
if (status < 0)
{
@@ -1110,7 +1120,7 @@ int HAMLIB_API rig_open(RIG *rig)
RETURNFUNC2(status);
}
- switch (rs->pttport.type.ptt)
+ switch (pttp->type.ptt)
{
case RIG_PTT_NONE:
case RIG_PTT_RIG:
@@ -1119,124 +1129,123 @@ int HAMLIB_API rig_open(RIG *rig)
case RIG_PTT_SERIAL_RTS:
case RIG_PTT_SERIAL_DTR:
- if (rs->pttport.pathname[0] == '\0'
- && rs->rigport.type.rig == RIG_PORT_SERIAL)
+ if (pttp->pathname[0] == '\0'
+ && rp->type.rig == RIG_PORT_SERIAL)
{
- strcpy(rs->pttport.pathname, rs->rigport.pathname);
+ strcpy(pttp->pathname, rp->pathname);
}
- if (!strcmp(rs->pttport.pathname, rs->rigport.pathname))
+ if (!strcmp(pttp->pathname, rp->pathname))
{
- rs->pttport.fd = rs->rigport.fd;
+ pttp->fd = rp->fd;
/* Needed on Linux because the serial port driver sets RTS/DTR
on open - only need to address the PTT line as we offer
config parameters to control the other (dtr_state &
rts_state) */
- if (rs->pttport.type.ptt == RIG_PTT_SERIAL_DTR)
+ if (pttp->type.ptt == RIG_PTT_SERIAL_DTR)
{
- status = ser_set_dtr(&rs->pttport, 0);
+ status = ser_set_dtr(pttp, 0);
}
- if (rs->pttport.type.ptt == RIG_PTT_SERIAL_RTS)
+ if (pttp->type.ptt == RIG_PTT_SERIAL_RTS)
{
- status = ser_set_rts(&rs->pttport, 0);
+ status = ser_set_rts(pttp, 0);
}
}
else
{
- rs->pttport.fd = ser_open(&rs->pttport);
+ pttp->fd = ser_open(pttp);
- if (rs->pttport.fd < 0)
+ if (pttp->fd < 0)
{
rig_debug(RIG_DEBUG_ERR,
"%s: cannot open PTT device \"%s\"\n",
__func__,
- rs->pttport.pathname);
+ pttp->pathname);
status = -RIG_EIO;
}
if (RIG_OK == status
- && (rs->pttport.type.ptt == RIG_PTT_SERIAL_DTR
- || rs->pttport.type.ptt == RIG_PTT_SERIAL_RTS))
+ && (pttp->type.ptt == RIG_PTT_SERIAL_DTR
+ || pttp->type.ptt == RIG_PTT_SERIAL_RTS))
{
/* Needed on Linux because the serial port driver sets
RTS/DTR high on open - set both low since we offer no
control of the non-PTT line and low is better than
high */
- status = ser_set_dtr(&rs->pttport, 0);
+ status = ser_set_dtr(pttp, 0);
if (RIG_OK == status)
{
- status = ser_set_rts(&rs->pttport, 0);
+ status = ser_set_rts(pttp, 0);
}
}
- ser_close(&rs->pttport);
+ ser_close(pttp);
}
break;
case RIG_PTT_PARALLEL:
- rs->pttport.fd = par_open(&rs->pttport);
+ pttp->fd = par_open(pttp);
- if (rs->pttport.fd < 0)
+ if (pttp->fd < 0)
{
rig_debug(RIG_DEBUG_ERR,
"%s: cannot open PTT device \"%s\"\n",
__func__,
- rs->pttport.pathname);
+ pttp->pathname);
status = -RIG_EIO;
}
else
{
- par_ptt_set(&rs->pttport, RIG_PTT_OFF);
+ par_ptt_set(pttp, RIG_PTT_OFF);
}
break;
case RIG_PTT_CM108:
- rs->pttport.fd = cm108_open(&rs->pttport);
+ pttp->fd = cm108_open(pttp);
- strncpy(rs->rigport.pathname, DEFAULT_CM108_PORT, HAMLIB_FILPATHLEN);
+ strncpy(rp->pathname, DEFAULT_CM108_PORT, HAMLIB_FILPATHLEN);
- if (rs->rigport.parm.cm108.ptt_bitnum == 0)
+ if (rp->parm.cm108.ptt_bitnum == 0)
{
- rs->rigport.parm.cm108.ptt_bitnum = DEFAULT_CM108_PTT_BITNUM;
- rs->pttport.parm.cm108.ptt_bitnum = DEFAULT_CM108_PTT_BITNUM;
+ rp->parm.cm108.ptt_bitnum = DEFAULT_CM108_PTT_BITNUM;
+ pttp->parm.cm108.ptt_bitnum = DEFAULT_CM108_PTT_BITNUM;
}
- if (rs->pttport.fd < 0)
+ if (pttp->fd < 0)
{
rig_debug(RIG_DEBUG_ERR,
"%s: cannot open PTT device \"%s\"\n",
__func__,
- rs->pttport.pathname);
+ pttp->pathname);
status = -RIG_EIO;
}
else
{
- cm108_ptt_set(&rs->pttport, RIG_PTT_OFF);
+ cm108_ptt_set(pttp, RIG_PTT_OFF);
}
break;
case RIG_PTT_GPIO:
case RIG_PTT_GPION:
- rs->pttport.fd = gpio_open(&rs->pttport, 1,
- RIG_PTT_GPION == rs->pttport.type.ptt ? 0 : 1);
+ pttp->fd = gpio_open(pttp, 1, RIG_PTT_GPION == pttp->type.ptt ? 0 : 1);
- if (rs->pttport.fd < 0)
+ if (pttp->fd < 0)
{
rig_debug(RIG_DEBUG_ERR,
"%s: cannot open PTT device \"GPIO%s\"\n",
__func__,
- rs->pttport.pathname);
+ pttp->pathname);
status = -RIG_EIO;
}
else
{
- gpio_ptt_set(&rs->pttport, RIG_PTT_OFF);
+ gpio_ptt_set(pttp, RIG_PTT_OFF);
}
break;
@@ -1245,11 +1254,11 @@ int HAMLIB_API rig_open(RIG *rig)
rig_debug(RIG_DEBUG_ERR,
"%s: unsupported PTT type %d\n",
__func__,
- rs->pttport.type.ptt);
+ pttp->type.ptt);
status = -RIG_ECONF;
}
- switch (rs->dcdport.type.dcd)
+ switch (dcdp->type.dcd)
{
case RIG_DCD_NONE:
case RIG_DCD_RIG:
@@ -1258,41 +1267,41 @@ int HAMLIB_API rig_open(RIG *rig)
case RIG_DCD_SERIAL_DSR:
case RIG_DCD_SERIAL_CTS:
case RIG_DCD_SERIAL_CAR:
- if (rs->dcdport.pathname[0] == '\0'
- && rs->rigport.type.rig == RIG_PORT_SERIAL)
+ if (dcdp->pathname[0] == '\0'
+ && rp->type.rig == RIG_PORT_SERIAL)
{
- strcpy(rs->dcdport.pathname, rs->rigport.pathname);
+ strcpy(dcdp->pathname, rp->pathname);
}
- if (strcmp(rs->dcdport.pathname, rs->rigport.pathname) == 0)
+ if (strcmp(dcdp->pathname, rp->pathname) == 0)
{
- rs->dcdport.fd = rs->rigport.fd;
+ dcdp->fd = rp->fd;
}
else
{
- rs->dcdport.fd = ser_open(&rs->dcdport);
+ dcdp->fd = ser_open(dcdp);
}
- if (rs->dcdport.fd < 0)
+ if (dcdp->fd < 0)
{
rig_debug(RIG_DEBUG_ERR,
"%s: cannot open DCD device \"%s\"\n",
__func__,
- rs->dcdport.pathname);
+ dcdp->pathname);
status = -RIG_EIO;
}
break;
case RIG_DCD_PARALLEL:
- rs->dcdport.fd = par_open(&rs->dcdport);
+ dcdp->fd = par_open(dcdp);
- if (rs->dcdport.fd < 0)
+ if (dcdp->fd < 0)
{
rig_debug(RIG_DEBUG_ERR,
"%s: cannot open DCD device \"%s\"\n",
__func__,
- rs->dcdport.pathname);
+ dcdp->pathname);
status = -RIG_EIO;
}
@@ -1300,15 +1309,15 @@ int HAMLIB_API rig_open(RIG *rig)
case RIG_DCD_GPIO:
case RIG_DCD_GPION:
- rs->dcdport.fd = gpio_open(&rs->dcdport, 0,
- RIG_DCD_GPION == rs->dcdport.type.dcd ? 0 : 1);
+ dcdp->fd = gpio_open(dcdp, 0,
+ RIG_DCD_GPION == dcdp->type.dcd ? 0 : 1);
- if (rs->dcdport.fd < 0)
+ if (dcdp->fd < 0)
{
rig_debug(RIG_DEBUG_ERR,
"%s: cannot open DCD device \"GPIO%s\"\n",
__func__,
- rs->dcdport.pathname);
+ dcdp->pathname);
status = -RIG_EIO;
}
@@ -1318,13 +1327,13 @@ int HAMLIB_API rig_open(RIG *rig)
rig_debug(RIG_DEBUG_ERR,
"%s: unsupported DCD type %d\n",
__func__,
- rs->dcdport.type.dcd);
+ dcdp->type.dcd);
status = -RIG_ECONF;
}
if (status < 0)
{
- port_close(&rs->rigport, rs->rigport.type.rig);
+ port_close(rp, rp->type.rig);
rig->state.comm_status = RIG_COMM_STATUS_ERROR;
RETURNFUNC2(status);
}
@@ -1337,7 +1346,7 @@ int HAMLIB_API rig_open(RIG *rig)
if (status < 0)
{
- port_close(&rs->rigport, rs->rigport.type.rig);
+ port_close(rp, rp->type.rig);
rig->state.comm_status = RIG_COMM_STATUS_ERROR;
RETURNFUNC2(status);
}
@@ -1357,8 +1366,8 @@ int HAMLIB_API rig_open(RIG *rig)
* Maybe the backend has something to initialize
* In case of failure, just close down and report error code.
*/
- int retry_save = rs->rigport.retry;
- rs->rigport.retry = 0;
+ int retry_save = rp->retry;
+ rp->retry = 0;
if (caps->rig_open != NULL)
{
@@ -1404,8 +1413,8 @@ int HAMLIB_API rig_open(RIG *rig)
}
#endif
- port_close(&rs->rigport, rs->rigport.type.rig);
- memcpy(&rs->rigport_deprecated, &rs->rigport, sizeof(hamlib_port_t_deprecated));
+ port_close(rp, rp->type.rig);
+ memcpy(&rs->rigport_deprecated, rp, sizeof(hamlib_port_t_deprecated));
rs->comm_state = 0;
rig->state.comm_status = RIG_COMM_STATUS_ERROR;
RETURNFUNC2(status);
@@ -1466,7 +1475,7 @@ int HAMLIB_API rig_open(RIG *rig)
{
rig_debug(RIG_DEBUG_ERR, "%s: cw_data_handler_start failed: %s\n", __func__,
rigerror(status));
- port_close(&rs->rigport, rs->rigport.type.rig);
+ port_close(rp, rp->type.rig);
RETURNFUNC2(status);
}
@@ -1535,12 +1544,12 @@ int HAMLIB_API rig_open(RIG *rig)
}
}
- rs->rigport.retry = retry_save;
+ rp->retry = retry_save;
- memcpy(&rs->rigport_deprecated, &rs->rigport, sizeof(hamlib_port_t_deprecated));
- memcpy(&rs->pttport_deprecated, &rs->pttport, sizeof(hamlib_port_t_deprecated));
- memcpy(&rs->dcdport_deprecated, &rs->dcdport, sizeof(hamlib_port_t_deprecated));
- rig_flush_force(&rs->rigport, 1);
+ memcpy(&rs->rigport_deprecated, rp, sizeof(hamlib_port_t_deprecated));
+ memcpy(&rs->pttport_deprecated, pttp, sizeof(hamlib_port_t_deprecated));
+ memcpy(&rs->dcdport_deprecated, dcdp, sizeof(hamlib_port_t_deprecated));
+ rig_flush_force(rp, 1);
#if defined(HAVE_PTHREAD)
enum multicast_item_e items = RIG_MULTICAST_POLL | RIG_MULTICAST_TRANSCEIVE
@@ -1602,6 +1611,9 @@ int HAMLIB_API rig_open(RIG *rig)
int HAMLIB_API rig_close(RIG *rig)
{
const struct rig_caps *caps;
+ hamlib_port_t *rp = RIGPORT(rig);
+ hamlib_port_t *pttp = PTTPORT(rig);
+ hamlib_port_t *dcdp = DCDPORT(rig);
struct rig_state *rs;
if (!rig || !rig->caps)
@@ -1652,7 +1664,7 @@ int HAMLIB_API rig_close(RIG *rig)
* FIXME: what happens if PTT and rig ports are the same?
* (eg. ptt_type = RIG_PTT_SERIAL)
*/
- switch (rs->pttport.type.ptt)
+ switch (pttp->type.ptt)
{
case RIG_PTT_NONE:
case RIG_PTT_RIG:
@@ -1662,14 +1674,14 @@ int HAMLIB_API rig_close(RIG *rig)
case RIG_PTT_SERIAL_RTS:
// If port is already closed, do nothing
- if (rs->pttport.fd > -1)
+ if (pttp->fd > -1)
{
- ser_set_rts(&rs->pttport, 0);
+ ser_set_rts(pttp, 0);
- if (rs->pttport.fd != rs->rigport.fd)
+ if (pttp->fd != rp->fd)
{
- port_close(&rs->pttport, RIG_PORT_SERIAL);
- memcpy(&rs->rigport_deprecated, &rs->rigport, sizeof(hamlib_port_t_deprecated));
+ port_close(pttp, RIG_PORT_SERIAL);
+ memcpy(&rs->rigport_deprecated, rp, sizeof(hamlib_port_t_deprecated));
}
}
@@ -1678,43 +1690,43 @@ int HAMLIB_API rig_close(RIG *rig)
case RIG_PTT_SERIAL_DTR:
// If port is already closed, do nothing
- if (rs->pttport.fd > -1)
+ if (pttp->fd > -1)
{
- ser_set_dtr(&rs->pttport, 0);
+ ser_set_dtr(pttp, 0);
- if (rs->pttport.fd != rs->rigport.fd)
+ if (pttp->fd != rp->fd)
{
- port_close(&rs->pttport, RIG_PORT_SERIAL);
- memcpy(&rs->rigport_deprecated, &rs->rigport, sizeof(hamlib_port_t_deprecated));
+ port_close(pttp, RIG_PORT_SERIAL);
+ memcpy(&rs->rigport_deprecated, rp, sizeof(hamlib_port_t_deprecated));
}
}
break;
case RIG_PTT_PARALLEL:
- par_ptt_set(&rs->pttport, RIG_PTT_OFF);
- par_close(&rs->pttport);
+ par_ptt_set(pttp, RIG_PTT_OFF);
+ par_close(pttp);
break;
case RIG_PTT_CM108:
- cm108_ptt_set(&rs->pttport, RIG_PTT_OFF);
- cm108_close(&rs->pttport);
+ cm108_ptt_set(pttp, RIG_PTT_OFF);
+ cm108_close(pttp);
break;
case RIG_PTT_GPIO:
case RIG_PTT_GPION:
- gpio_ptt_set(&rs->pttport, RIG_PTT_OFF);
- gpio_close(&rs->pttport);
+ gpio_ptt_set(pttp, RIG_PTT_OFF);
+ gpio_close(pttp);
break;
default:
rig_debug(RIG_DEBUG_ERR,
"%s: unsupported PTT type %d\n",
__func__,
- rs->pttport.type.ptt);
+ pttp->type.ptt);
}
- switch (rs->dcdport.type.dcd)
+ switch (dcdp->type.dcd)
{
case RIG_DCD_NONE:
case RIG_DCD_RIG:
@@ -1723,33 +1735,33 @@ int HAMLIB_API rig_close(RIG *rig)
case RIG_DCD_SERIAL_DSR:
case RIG_DCD_SERIAL_CTS:
case RIG_DCD_SERIAL_CAR:
- if (rs->dcdport.fd != rs->rigport.fd)
+ if (dcdp->fd != rp->fd)
{
- port_close(&rs->dcdport, RIG_PORT_SERIAL);
- memcpy(&rs->rigport_deprecated, &rs->rigport, sizeof(hamlib_port_t_deprecated));
+ port_close(dcdp, RIG_PORT_SERIAL);
+ memcpy(&rs->rigport_deprecated, rp, sizeof(hamlib_port_t_deprecated));
}
break;
case RIG_DCD_PARALLEL:
- par_close(&rs->dcdport);
+ par_close(dcdp);
break;
case RIG_DCD_GPIO:
case RIG_DCD_GPION:
- gpio_close(&rs->dcdport);
+ gpio_close(dcdp);
break;
default:
rig_debug(RIG_DEBUG_ERR,
"%s: unsupported DCD type %d\n",
__func__,
- rs->dcdport.type.dcd);
+ dcdp->type.dcd);
}
- rs->dcdport.fd = rs->pttport.fd = -1;
+ dcdp->fd = pttp->fd = -1;
- port_close(&rs->rigport, rs->rigport.type.rig);
+ port_close(rp, rp->type.rig);
// zero split so it will allow it to be set again on open for rigctld
rig->state.cache.split = 0;
@@ -1798,6 +1810,8 @@ int HAMLIB_API rig_cleanup(RIG *rig)
rig->caps->rig_cleanup(rig);
}
+ //TODO Release and null any allocated port structures
+
free(rig);
return (RIG_OK);
@@ -3373,6 +3387,8 @@ int HAMLIB_API rig_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt)
{
const struct rig_caps *caps;
struct rig_state *rs = &rig->state;
+ hamlib_port_t *rp = RIGPORT(rig);
+ hamlib_port_t *pttp = PTTPORT(rig);
int retcode = RIG_OK;
if (CHECK_RIG_ARG(rig))
@@ -3388,7 +3404,7 @@ int HAMLIB_API rig_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt)
LOCK(1);
- switch (rig->state.pttport.type.ptt)
+ switch (pttp->type.ptt)
{
case RIG_PTT_RIG:
if (ptt == RIG_PTT_ON_MIC || ptt == RIG_PTT_ON_DATA)
@@ -3536,19 +3552,19 @@ int HAMLIB_API rig_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt)
port when PTT is reset and seize the port when PTT is set,
this allows limited sharing of the PTT port between
applications so long as there is no contention */
- if (strcmp(rs->pttport.pathname, rs->rigport.pathname)
- && rs->pttport.fd < 0
+ if (strcmp(pttp->pathname, rp->pathname)
+ && pttp->fd < 0
&& RIG_PTT_OFF != ptt)
{
- rs->pttport.fd = ser_open(&rs->pttport);
+ pttp->fd = ser_open(pttp);
- if (rs->pttport.fd < 0)
+ if (pttp->fd < 0)
{
rig_debug(RIG_DEBUG_ERR,
"%s: cannot open PTT device \"%s\"\n",
__func__,
- rs->pttport.pathname);
+ pttp->pathname);
ELAPSED2;
RETURNFUNC(-RIG_EIO);
}
@@ -3556,7 +3572,7 @@ int HAMLIB_API rig_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt)
/* Needed on Linux because the serial port driver sets RTS/DTR
high on open - set both since we offer no control of
the non-PTT line and low is better than high */
- retcode = ser_set_rts(&rs->pttport, 0);
+ retcode = ser_set_rts(pttp, 0);
if (RIG_OK != retcode)
{
@@ -3565,16 +3581,16 @@ int HAMLIB_API rig_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt)
}
}
- retcode = ser_set_dtr(&rig->state.pttport, ptt != RIG_PTT_OFF);
+ retcode = ser_set_dtr(pttp, ptt != RIG_PTT_OFF);
rig_debug(RIG_DEBUG_TRACE, "%s: rigport=%s, pttport=%s, ptt_share=%d\n",
- __func__, rs->pttport.pathname, rs->rigport.pathname, rs->ptt_share);
+ __func__, rp->pathname, pttp->pathname, rs->ptt_share);
- if (strcmp(rs->pttport.pathname, rs->rigport.pathname)
+ if (strcmp(pttp->pathname, rp->pathname)
&& ptt == RIG_PTT_OFF && rs->ptt_share != 0)
{
/* free the port */
- ser_close(&rs->pttport);
+ ser_close(pttp);
}
break;
@@ -3585,20 +3601,20 @@ int HAMLIB_API rig_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt)
port when PTT is reset and seize the port when PTT is set,
this allows limited sharing of the PTT port between
applications so long as there is no contention */
- if (strcmp(rs->pttport.pathname, rs->rigport.pathname)
- && rs->pttport.fd < 0
+ if (strcmp(pttp->pathname, rp->pathname)
+ && pttp->fd < 0
&& RIG_PTT_OFF != ptt)
{
rig_debug(RIG_DEBUG_TRACE, "%s: PTT RTS debug#1\n", __func__);
- rs->pttport.fd = ser_open(&rs->pttport);
+ pttp->fd = ser_open(pttp);
- if (rs->pttport.fd < 0)
+ if (pttp->fd < 0)
{
rig_debug(RIG_DEBUG_ERR,
"%s: cannot open PTT device \"%s\"\n",
__func__,
- rs->pttport.pathname);
+ pttp->pathname);
ELAPSED2;
RETURNFUNC(-RIG_EIO);
}
@@ -3606,7 +3622,7 @@ int HAMLIB_API rig_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt)
/* Needed on Linux because the serial port driver sets RTS/DTR
high on open - set both since we offer no control of the
non-PTT line and low is better than high */
- retcode = ser_set_dtr(&rs->pttport, 0);
+ retcode = ser_set_dtr(pttp, 0);
if (RIG_OK != retcode)
{
@@ -3616,31 +3632,31 @@ int HAMLIB_API rig_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt)
}
}
- retcode = ser_set_rts(&rig->state.pttport, ptt != RIG_PTT_OFF);
+ retcode = ser_set_rts(pttp, ptt != RIG_PTT_OFF);
rig_debug(RIG_DEBUG_TRACE, "%s: rigport=%s, pttport=%s, ptt_share=%d\n",
- __func__, rs->pttport.pathname, rs->rigport.pathname, rs->ptt_share);
+ __func__, rp->pathname, pttp->pathname, rs->ptt_share);
- if (strcmp(rs->pttport.pathname, rs->rigport.pathname)
+ if (strcmp(pttp->pathname, rp->pathname)
&& ptt == RIG_PTT_OFF && rs->ptt_share != 0)
{
/* free the port */
- ser_close(&rs->pttport);
+ ser_close(pttp);
}
break;
case RIG_PTT_PARALLEL:
- retcode = par_ptt_set(&rig->state.pttport, ptt);
+ retcode = par_ptt_set(pttp, ptt);
break;
case RIG_PTT_CM108:
- retcode = cm108_ptt_set(&rig->state.pttport, ptt);
+ retcode = cm108_ptt_set(pttp, ptt);
break;
case RIG_PTT_GPIO:
case RIG_PTT_GPION:
- retcode = gpio_ptt_set(&rig->state.pttport, ptt);
+ retcode = gpio_ptt_set(pttp, ptt);
break;
case RIG_PTT_NONE:
@@ -3649,7 +3665,7 @@ int HAMLIB_API rig_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt)
default:
rig_debug(RIG_DEBUG_WARN, "%s: unknown PTT type=%d\n", __func__,
- rig->state.pttport.type.ptt);
+ pttp->type.ptt);
ELAPSED2;
RETURNFUNC(-RIG_EINVAL);
}
@@ -3669,7 +3685,7 @@ int HAMLIB_API rig_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt)
if (retcode != RIG_OK) { rig_debug(RIG_DEBUG_ERR, "%s: return code=%d\n", __func__, retcode); }
- memcpy(&rig->state.pttport_deprecated, &rig->state.pttport,
+ memcpy(&rig->state.pttport_deprecated, pttp,
sizeof(rig->state.pttport_deprecated));
if (rig->state.post_ptt_delay > 0) { hl_usleep(rig->state.post_ptt_delay * 1000); }
@@ -3698,6 +3714,8 @@ int HAMLIB_API rig_get_ptt(RIG *rig, vfo_t vfo, ptt_t *ptt)
{
const struct rig_caps *caps;
struct rig_state *rs = &rig->state;
+ hamlib_port_t *rp = RIGPORT(rig);
+ hamlib_port_t *pttp = PTTPORT(rig);
int retcode = RIG_OK;
int status;
vfo_t curr_vfo;
@@ -3739,7 +3757,7 @@ int HAMLIB_API rig_get_ptt(RIG *rig, vfo_t vfo, ptt_t *ptt)
LOCK(1);
- switch (rig->state.pttport.type.ptt)
+ switch (pttp->type.ptt)
{
case RIG_PTT_RIG:
case RIG_PTT_RIG_MICDATA:
@@ -3843,15 +3861,15 @@ int HAMLIB_API rig_get_ptt(RIG *rig, vfo_t vfo, ptt_t *ptt)
#endif
- if (strcmp(rs->pttport.pathname, rs->rigport.pathname)
- && rs->pttport.fd < 0)
+ if (strcmp(pttp->pathname, rp->pathname)
+ && pttp->fd < 0)
{
/* port is closed so assume PTT off */
*ptt = RIG_PTT_OFF;
}
else
{
- retcode = ser_get_rts(&rig->state.pttport, &status);
+ retcode = ser_get_rts(pttp, &status);
*ptt = status ? RIG_PTT_ON : RIG_PTT_OFF;
}
@@ -3881,15 +3899,15 @@ int HAMLIB_API rig_get_ptt(RIG *rig, vfo_t vfo, ptt_t *ptt)
#endif
- if (strcmp(rs->pttport.pathname, rs->rigport.pathname)
- && rs->pttport.fd < 0)
+ if (strcmp(pttp->pathname, rp->pathname)
+ && pttp->fd < 0)
{
/* port is closed so assume PTT off */
*ptt = RIG_PTT_OFF;
}
else
{
- retcode = ser_get_dtr(&rig->state.pttport, &status);
+ retcode = ser_get_dtr(pttp, &status);
*ptt = status ? RIG_PTT_ON : RIG_PTT_OFF;
}
@@ -3916,7 +3934,7 @@ int HAMLIB_API rig_get_ptt(RIG *rig, vfo_t vfo, ptt_t *ptt)
RETURNFUNC(retcode);
}
- retcode = par_ptt_get(&rig->state.pttport, ptt);
+ retcode = par_ptt_get(pttp, ptt);
if (retcode == RIG_OK)
{
@@ -3945,7 +3963,7 @@ int HAMLIB_API rig_get_ptt(RIG *rig, vfo_t vfo, ptt_t *ptt)
RETURNFUNC(retcode);
}
- retcode = cm108_ptt_get(&rig->state.pttport, ptt);
+ retcode = cm108_ptt_get(pttp, ptt);
if (retcode == RIG_OK)
{
@@ -3976,7 +3994,7 @@ int HAMLIB_API rig_get_ptt(RIG *rig, vfo_t vfo, ptt_t *ptt)
}
elapsed_ms(&rig->state.cache.time_ptt, HAMLIB_ELAPSED_SET);
- retcode = gpio_ptt_get(&rig->state.pttport, ptt);
+ retcode = gpio_ptt_get(pttp, ptt);
ELAPSED2;
LOCK(0);
RETURNFUNC(retcode);
@@ -4015,6 +4033,7 @@ int HAMLIB_API rig_get_ptt(RIG *rig, vfo_t vfo, ptt_t *ptt)
int HAMLIB_API rig_get_dcd(RIG *rig, vfo_t vfo, dcd_t *dcd)
{
const struct rig_caps *caps;
+ hamlib_port_t *dcdp = DCDPORT(rig);
int retcode, rc2, status;
vfo_t curr_vfo;
@@ -4035,7 +4054,7 @@ int HAMLIB_API rig_get_dcd(RIG *rig, vfo_t vfo, dcd_t *dcd)
caps = rig->caps;
- switch (rig->state.dcdport.type.dcd)
+ switch (dcdp->type.dcd)
{
case RIG_DCD_RIG:
if (caps->get_dcd == NULL)
@@ -4086,24 +4105,24 @@ int HAMLIB_API rig_get_dcd(RIG *rig, vfo_t vfo, dcd_t *dcd)
break;
case RIG_DCD_SERIAL_CTS:
- retcode = ser_get_cts(&rig->state.dcdport, &status);
- memcpy(&rig->state.dcdport_deprecated, &rig->state.dcdport,
+ retcode = ser_get_cts(dcdp, &status);
+ memcpy(&rig->state.dcdport_deprecated, dcdp,
sizeof(rig->state.dcdport_deprecated));
*dcd = status ? RIG_DCD_ON : RIG_DCD_OFF;
ELAPSED2;
RETURNFUNC(retcode);
case RIG_DCD_SERIAL_DSR:
- retcode = ser_get_dsr(&rig->state.dcdport, &status);
- memcpy(&rig->state.dcdport_deprecated, &rig->state.dcdport,
+ retcode = ser_get_dsr(dcdp, &status);
+ memcpy(&rig->state.dcdport_deprecated, dcdp,
sizeof(rig->state.dcdport_deprecated));
*dcd = status ? RIG_DCD_ON : RIG_DCD_OFF;
ELAPSED2;
RETURNFUNC(retcode);
case RIG_DCD_SERIAL_CAR:
- retcode = ser_get_car(&rig->state.dcdport, &status);
- memcpy(&rig->state.dcdport_deprecated, &rig->state.dcdport,
+ retcode = ser_get_car(dcdp, &status);
+ memcpy(&rig->state.dcdport_deprecated, dcdp,
sizeof(rig->state.dcdport_deprecated));
*dcd = status ? RIG_DCD_ON : RIG_DCD_OFF;
ELAPSED2;
@@ -4111,16 +4130,16 @@ int HAMLIB_API rig_get_dcd(RIG *rig, vfo_t vfo, dcd_t *dcd)
case RIG_DCD_PARALLEL:
- retcode = par_dcd_get(&rig->state.dcdport, dcd);
- memcpy(&rig->state.dcdport_deprecated, &rig->state.dcdport,
+ retcode = par_dcd_get(dcdp, dcd);
+ memcpy(&rig->state.dcdport_deprecated, dcdp,
sizeof(rig->state.dcdport_deprecated));
ELAPSED2;
RETURNFUNC(retcode);
case RIG_DCD_GPIO:
case RIG_DCD_GPION:
- retcode = gpio_dcd_get(&rig->state.dcdport, dcd);
- memcpy(&rig->state.dcdport_deprecated, &rig->state.dcdport,
+ retcode = gpio_dcd_get(dcdp, dcd);
+ memcpy(&rig->state.dcdport_deprecated, dcdp,
sizeof(rig->state.dcdport_deprecated));
ELAPSED2;
RETURNFUNC(retcode);
@@ -6499,7 +6518,7 @@ int HAMLIB_API rig_set_powerstat(RIG *rig, powerstat_t status)
}
// if anything is queued up flush it
- rig_flush_force(&rig->state.rigport, 1);
+ rig_flush_force(RIGPORT(rig), 1);
ELAPSED2;
RETURNFUNC(retcode);
}
@@ -8241,7 +8260,7 @@ void *async_data_handler(void *arg)
if (rs->transaction_active)
{
unsigned char data = (unsigned char) result;
- write_block_sync_error(&rs->rigport, &data, 1);
+ write_block_sync_error(RIGPORT(rig), &data, 1);
}
// TODO: error handling -> store errors in rig state -> to be exposed in async snapshot packets
@@ -8275,7 +8294,7 @@ void *async_data_handler(void *arg)
}
else
{
- result = write_block_sync(&rs->rigport, frame, frame_length);
+ result = write_block_sync(RIGPORT(rig), frame, frame_length);
if (result < 0)
{
@@ -8459,12 +8478,12 @@ extern int read_icom_frame(hamlib_port_t *p, const unsigned char rxbuffer[],
HAMLIB_EXPORT(int) rig_send_raw(RIG *rig, const unsigned char *send,
int send_len, unsigned char *reply, int reply_len, unsigned char *term)
{
- struct rig_state *rs = &rig->state;
int nbytes;
int retval;
+ hamlib_port_t *rp = RIGPORT(rig);
int simulate = rig->caps->rig_model == RIG_MODEL_DUMMY ||
rig->caps->rig_model == RIG_MODEL_NONE ||
- rs->rigport.rig == RIG_PORT_NONE;
+ rp->rig == RIG_PORT_NONE;
ENTERFUNC;
ELAPSED1;
@@ -8481,7 +8500,7 @@ HAMLIB_EXPORT(int) rig_send_raw(RIG *rig, const unsigned char *send,
}
else
{
- retval = write_block(&rs->rigport, send, send_len);
+ retval = write_block(rp, send, send_len);
if (retval < 0)
{
@@ -8506,25 +8525,25 @@ HAMLIB_EXPORT(int) rig_send_raw(RIG *rig, const unsigned char *send,
if (term == NULL)
{
rig_debug(RIG_DEBUG_VERBOSE, "%s: reading binary frame\n", __func__);
- retval = read_string(&rs->rigport, buf, reply_len, NULL, 0, 0, 1);
+ retval = read_string(rp, buf, reply_len, NULL, 0, 0, 1);
}
else if (*term == 0xfd) // then we want an Icom frame
{
rig_debug(RIG_DEBUG_VERBOSE, "%s: reading icom frame\n", __func__);
- retval = read_icom_frame(&rs->rigport, buf, sizeof(buf));
+ retval = read_icom_frame(rp, buf, sizeof(buf));
}
else // we'll assume the provided terminator works
{
rig_debug(RIG_DEBUG_VERBOSE, "%s: reading frame terminated by 0x%x\n", __func__,
*term);
- retval = read_string(&rs->rigport, buf, sizeof(buf), (const char *)term,
+ retval = read_string(rp, buf, sizeof(buf), (const char *)term,
1, 0, 1);
}
if (retval < RIG_OK)
{
rig_debug(RIG_DEBUG_ERR, "%s: read_string, result=%d\n", __func__, retval);
- rig_flush_force(&rs->rigport, 1);
+ rig_flush_force(rp, 1);
set_transaction_inactive(rig);
RETURNFUNC(retval);
}
@@ -8535,7 +8554,7 @@ HAMLIB_EXPORT(int) rig_send_raw(RIG *rig, const unsigned char *send,
{
rig_debug(RIG_DEBUG_ERR, "%s: reply_len(%d) less than reply from rig(%d)\n",
__func__, reply_len, nbytes);
- rig_flush_force(&rs->rigport, 1);
+ rig_flush_force(rp, 1);
set_transaction_inactive(rig);
return -RIG_EINVAL;
}
@@ -8545,12 +8564,12 @@ HAMLIB_EXPORT(int) rig_send_raw(RIG *rig, const unsigned char *send,
}
else
{
- rig_flush_force(&rs->rigport, 1);
+ rig_flush_force(rp, 1);
set_transaction_inactive(rig);
RETURNFUNC(retval);
}
- rig_flush_force(&rs->rigport, 1);
+ rig_flush_force(rp, 1);
set_transaction_inactive(rig);
ELAPSED2;
commit aa9c3b39baf9249e8bc3c8449971daa0cf4ea864
Author: George Baltz N3GB <Geo...@gm...>
Date: Sat Jan 13 11:36:57 2024 -0500
Convert more files in src/
Leaves only src/rig.c
diff --git a/src/multicast.c b/src/multicast.c
index f610cf067..189d15b7f 100644
--- a/src/multicast.c
+++ b/src/multicast.c
@@ -297,7 +297,7 @@ static int multicast_send_json(RIG *rig)
// sprintf(msg,"%s:f=%.1f", date_strget(msg, (int)sizeof(msg), 0), f);
msg[0] = 0;
snprintf(buf, sizeof(buf), "%s:%s", rig->caps->model_name,
- rig->state.rigport.pathname);
+ RIGPORT(rig)->pathname);
strcat(msg, "{\n");
json_add_string(msg, "ID", buf, 1);
json_add_time(msg, 1);
@@ -339,7 +339,7 @@ void *multicast_thread_rx(void *vrig)
while (rig->state.multicast->runflag)
{
#if 0
- ret = read_string(&rig->state.rigport, (unsigned char *) buf, sizeof(buf), "\n",
+ ret = read_string(RIGPORT(rig), (unsigned char *) buf, sizeof(buf), "\n",
1,
0, 1);
#endif
@@ -652,8 +652,8 @@ int main(int argc, const char *argv[])
return 1;
}
- strncpy(rig->state.rigport.pathname, "/dev/ttyUSB0", HAMLIB_FILPATHLEN - 1);
- rig->state.rigport.parm.serial.rate = 38400;
+ strncpy(RIGPORT(rig)->pathname, "/dev/ttyUSB0", HAMLIB_FILPATHLEN - 1);
+ RIGPORT(rig)->parm.serial.rate = 38400;
rig_open(rig);
multicast_init(rig, "224.0.0.1", 4532);
pthread_join(rig->state.multicast->threadid, NULL);
diff --git a/src/serial.c b/src/serial.c
index f891b1273..302e67b0c 100644
--- a/src/serial.c
+++ b/src/serial.c
@@ -1051,7 +1051,7 @@ int HAMLIB_API ser_set_rts(hamlib_port_t *p, int state)
/**
* \brief Get RTS bit
- * \param p supposed to be &rig->state.rigport
+ * \param p supposed to be RIGPORT(rig)
* \param state non-NULL
*/
int HAMLIB_API ser_get_rts(hamlib_port_t *p, int *state)
@@ -1134,7 +1134,7 @@ int HAMLIB_API ser_set_dtr(hamlib_port_t *p, int state)
/**
* \brief Get DTR bit
- * \param p supposed to be &rig->state.rigport
+ * \param p supposed to be RIGPORT(rig)
* \param state non-NULL
*/
int HAMLIB_API ser_get_dtr(hamlib_port_t *p, int *state)
@@ -1186,7 +1186,7 @@ int HAMLIB_API ser_set_brk(const hamlib_port_t *p, int state)
/**
* \brief Get Carrier (CI?) bit
- * \param p supposed to be &rig->state.rigport
+ * \param p supposed to be RIGPORT(rig)
* \param state non-NULL
*/
int HAMLIB_API ser_get_car(hamlib_port_t *p, int *state)
@@ -1209,7 +1209,7 @@ int HAMLIB_API ser_get_car(hamlib_port_t *p, int *state)
/**
* \brief Get Clear to Send (CTS) bit
- * \param p supposed to be &rig->state.rigport
+ * \param p supposed to be RIGPORT(rig)
* \param state non-NULL
*/
int HAMLIB_API ser_get_cts(hamlib_port_t *p, int *state)
@@ -1232,7 +1232,7 @@ int HAMLIB_API ser_get_cts(hamlib_port_t *p, int *state)
/**
* \brief Get Data Set Ready (DSR) bit
- * \param p supposed to be &rig->state.rigport
+ * \param p supposed to be RIGPORT(rig)
* \param state non-NULL
*/
int HAMLIB_API ser_get_dsr(hamlib_port_t *p, int *state)
diff --git a/src/snapshot_data.c b/src/snapshot_data.c
index 52f9a1333..7ddd53de2 100644
--- a/src/snapshot_data.c
+++ b/src/snapshot_data.c
@@ -22,7 +22,7 @@ static int snapshot_serialize_rig(cJSON *rig_node, RIG *rig)
cJSON *id_node = cJSON_CreateObject();
cJSON_AddStringToObject(id_node, "model", rig->caps->model_name);
- cJSON_AddStringToObject(id_node, "endpoint", r...
[truncated message content] |
|
From: n0nb <n0...@us...> - 2024-01-08 12:08:15
|
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 21c14da270d8d73b9ecfffbf4c7709d6dc4f8c32 (commit)
via e9e43e23da0be55cc6cc216cec5a6646ebac0bd1 (commit)
via eab660500e565913a39caa42174f2ecb3f90d2db (commit)
via 2eefb14137ab095dc0a83d4cdc6af4463139690f (commit)
via 890d1a69aa3bbb816d8dfdf3d4e2f8410efbb8ce (commit)
via 47f92eb5f712b6ac0822642bead5213ed95c1b3c (commit)
via 5980eb3cc7c9f2ed758e9ca3e5e7385f6a552b0b (commit)
via bb1590ed9cae1406cb24e40e2018face4b4d0a0c (commit)
via 64d606c1c4a366f060b0b048f80a59836fefea58 (commit)
via 921def7c5f18a4f0cf3f17b4007c8865156c2784 (commit)
via 9877387c55153c268b548109fa64ad97dc21c09e (commit)
via bd746387f9e7d1b6b52bf015a70c344891776d7a (commit)
via 65bd022a2cadb58cada8f249a577653cf11f480e (commit)
via c019467987eb9a0d56d8f55b5b0d9045cf752da0 (commit)
via 19c4b01e5abf68e91474b376faf2e2dc0b92c9a4 (commit)
via 5492572176581c8e17c3d82e9c935cc03a9346e3 (commit)
via 0c1f66710a37bd978ac95a2d622e52ee86a52340 (commit)
via 5d0cbba91edea54619fc9dcb0647ac4df8c84c39 (commit)
via a4fa021848748eb2c57fd53062d911aabed3a917 (commit)
via bc2f2ce5c7054450fdd2d251c6d2a4c5ea0ba811 (commit)
via da478d6e74d64234fac1848ef3447a6e8892b192 (commit)
via 02a6c80800f05c220294e7610c8c39ae95f6a157 (commit)
via 08ba518b717f8c9abaadfb9ffa5a34e7f4cc664a (commit)
from 32f37d390ffeaa83f9480780cde15a2cad9b3592 (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 21c14da270d8d73b9ecfffbf4c7709d6dc4f8c32
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sun Jan 7 22:38:52 2024 -0600
Add DL2MAN (tr)uSDX rig
Copy of TS480 for starters and needs refinement
diff --git a/NEWS b/NEWS
index aee9a7730..66ca89cb6 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 DL2MAN (tr)uSDX -- needs refinement
* 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
diff --git a/include/hamlib/riglist.h b/include/hamlib/riglist.h
index 541ab43e0..5c2182db6 100644
--- a/include/hamlib/riglist.h
+++ b/include/hamlib/riglist.h
@@ -202,6 +202,7 @@
#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)
+#define RIG_MODEL_TRUSDX RIG_MAKE_MODEL(RIG_KENWOOD, 55)
/*
* Icom
diff --git a/rigs/kenwood/kenwood.c b/rigs/kenwood/kenwood.c
index d7f26d9d3..7b4ba5b03 100644
--- a/rigs/kenwood/kenwood.c
+++ b/rigs/kenwood/kenwood.c
@@ -6189,6 +6189,7 @@ DECLARE_INITRIG_BACKEND(kenwood)
rig_register(&qrplabs_caps);
rig_register(&fx4_caps);
rig_register(&thetis_caps);
+ rig_register(&trudx_caps);
return (RIG_OK);
}
diff --git a/rigs/kenwood/kenwood.h b/rigs/kenwood/kenwood.h
index 5ab2e64f0..6c2fdbcb5 100644
--- a/rigs/kenwood/kenwood.h
+++ b/rigs/kenwood/kenwood.h
@@ -325,6 +325,7 @@ extern struct rig_caps sdruno_caps;
extern struct rig_caps qrplabs_caps;
extern struct rig_caps fx4_caps;
extern struct rig_caps thetis_caps;
+extern struct rig_caps trudx_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,
diff --git a/rigs/kenwood/ts480.c b/rigs/kenwood/ts480.c
index 43bb9b769..415f656b0 100644
--- a/rigs/kenwood/ts480.c
+++ b/rigs/kenwood/ts480.c
@@ -1438,6 +1438,204 @@ struct rig_caps ts480_caps =
.hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS
};
+/*
+ * truSDC rig capabilities
+ * Notice that some rigs share the same functions.
+ */
+struct rig_caps trudx_caps =
+{
+ RIG_MODEL(RIG_MODEL_TRUSDX),
+ .model_name = "(tr)uSDX",
+ .mfg_name = "DL2MAN",
+ .version = BACKEND_VER ".1",
+ .copyright = "LGPL",
+ .status = RIG_STATUS_BETA,
+ .rig_type = RIG_TYPE_TRANSCEIVER,
+ .ptt_type = RIG_PTT_RIG_MICDATA,
+ .dcd_type = RIG_DCD_RIG,
+ .port_type = RIG_PORT_SERIAL,
+ .serial_rate_min = 38400,
+ .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,
+ .timeout = 500,
+ .retry = 3,
+ .preamp = {12, RIG_DBLST_END,},
+ .attenuator = {12, RIG_DBLST_END,},
+ .max_rit = kHz(9.99),
+ .max_xit = kHz(9.99),
+ .max_ifshift = Hz(0),
+ .targetable_vfo = RIG_TARGETABLE_FREQ,
+ .transceive = RIG_TRN_RIG,
+ .agc_level_count = 3,
+ .agc_levels = { RIG_AGC_OFF, RIG_AGC_FAST, RIG_AGC_SLOW },
+
+ .rx_range_list1 = {
+ {kHz(100), Hz(59999999), TS480_ALL_MODES, -1, -1, TS480_VFO},
+ RIG_FRNG_END,
+ }, /*!< Receive frequency range list for ITU region 1 */
+ .tx_range_list1 = {
+ {kHz(1810), kHz(1850), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO}, /* 100W class */
+ {kHz(1810), kHz(1850), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO}, /* 25W class */
+ {kHz(3500), kHz(3800), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO},
+ {kHz(3500), kHz(3800), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO},
+ {MHz(7), kHz(7200), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO},
+ {MHz(7), kHz(7200), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO},
+ {kHz(10100), kHz(10150), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO},
+ {kHz(10100), kHz(10150), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO},
+ {MHz(14), kHz(14350), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO},
+ {MHz(14), kHz(14350), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO},
+ {kHz(18068), kHz(18168), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO},
+ {kHz(18068), kHz(18168), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO},
+ {MHz(21), kHz(21450), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO},
+ {MHz(21), kHz(21450), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO},
+ {kHz(24890), kHz(24990), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO},
+ {kHz(24890), kHz(24990), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO},
+ {MHz(28), kHz(29700), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO},
+ {MHz(28), kHz(29700), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO},
+ {MHz(50), kHz(52000), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO},
+ {MHz(50), kHz(52000), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO},
+ RIG_FRNG_END,
+ }, /*!< Transmit frequency range list for ITU region 1 */
+ .rx_range_list2 = {
+ {kHz(100), Hz(59999999), TS480_ALL_MODES, -1, -1, TS480_VFO},
+ RIG_FRNG_END,
+ }, /*!< Receive frequency range list for ITU region 2 */
+ .tx_range_list2 = {
+ {kHz(1800), MHz(2) - 1, TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO}, /* 100W class */
+ {kHz(1800), MHz(2) - 1, TS480_AM_TX_MODES, 5000, 25000, TS480_VFO}, /* 25W class */
+ {kHz(3500), MHz(4) - 1, TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO},
+ {kHz(3500), MHz(4) - 1, TS480_AM_TX_MODES, 5000, 25000, TS480_VFO},
+ {kHz(5250), kHz(5450), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO},
+ {kHz(5250), kHz(5450), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO},
+ {MHz(7), kHz(7300), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO},
+ {MHz(7), kHz(7300), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO},
+ {kHz(10100), kHz(10150), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO},
+ {kHz(10100), kHz(10150), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO},
+ {MHz(14), kHz(14350), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO},
+ {MHz(14), kHz(14350), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO},
+ {kHz(18068), kHz(18168), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO},
+ {kHz(18068), kHz(18168), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO},
+ {MHz(21), kHz(21450), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO},
+ {MHz(21), kHz(21450), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO},
+ {kHz(24890), kHz(24990), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO},
+ {kHz(24890), kHz(24990), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO},
+ {MHz(28), kHz(29700), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO},
+ {MHz(28), kHz(29700), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO},
+ {MHz(50), kHz(52000), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO},
+ {MHz(50), kHz(52000), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO},
+ RIG_FRNG_END,
+ }, /*!< Transmit frequency range list for ITU region 2 */
+ .tuning_steps = {
+ {TS480_ALL_MODES, kHz(1)},
+ {TS480_ALL_MODES, Hz(2500)},
+ {TS480_ALL_MODES, kHz(5)},
+ {TS480_ALL_MODES, Hz(6250)},
+ {TS480_ALL_MODES, kHz(10)},
+ {TS480_ALL_MODES, Hz(12500)},
+ {TS480_ALL_MODES, kHz(15)},
+ {TS480_ALL_MODES, kHz(20)},
+ {TS480_ALL_MODES, kHz(25)},
+ {TS480_ALL_MODES, kHz(30)},
+ {TS480_ALL_MODES, kHz(100)},
+ {TS480_ALL_MODES, kHz(500)},
+ {TS480_ALL_MODES, MHz(1)},
+ {TS480_ALL_MODES, 0}, /* any tuning step */
+ RIG_TS_END,
+ },
+ /* mode/filter list, remember: order matters! */
+ .filters = {
+ {RIG_MODE_SSB, kHz(2.4)},
+ {RIG_MODE_SSB, Hz(270)},
+ {RIG_MODE_SSB, Hz(500)},
+ {RIG_MODE_CW | RIG_MODE_CWR, Hz(200)},
+ {RIG_MODE_CW | RIG_MODE_CWR, Hz(50)},
+ {RIG_MODE_CW | RIG_MODE_CWR, Hz(1000)},
+ {RIG_MODE_CW | RIG_MODE_CWR, Hz(80)},
+ {RIG_MODE_CW | RIG_MODE_CWR, Hz(100)},
+ {RIG_MODE_CW | RIG_MODE_CWR, Hz(150)},
+ {RIG_MODE_CW | RIG_MODE_CWR, Hz(300)},
+ {RIG_MODE_CW | RIG_MODE_CWR, Hz(400)},
+ {RIG_MODE_CW | RIG_MODE_CWR, Hz(500)},
+ {RIG_MODE_CW | RIG_MODE_CWR, Hz(600)},
+ {RIG_MODE_CW | RIG_MODE_CWR, Hz(2000)},
+ {RIG_MODE_RTTY | RIG_MODE_RTTYR, Hz(500)},
+ {RIG_MODE_RTTY | RIG_MODE_RTTYR, Hz(250)},
+ {RIG_MODE_RTTY | RIG_MODE_RTTYR, Hz(1000)},
+ {RIG_MODE_RTTY | RIG_MODE_RTTYR, Hz(1500)},
+ {RIG_MODE_AM, kHz(6)},
+ {RIG_MODE_AM, kHz(2.4)},
+ {RIG_MODE_FM, kHz(12)},
+ RIG_FLT_END,
+ },
+ .vfo_ops = TS480_VFO_OPS,
+ .level_gran =
+ {
+#include "level_gran_kenwood.h"
+ [LVL_VOXDELAY] = { .min = { .i = 0 }, .max = { .i = 30 }, .step = { .i = 1 } },
+ [LVL_KEYSPD] = {.min = {.i = 10}, .max = {.i = 60}, .step = {.i = 1}},
+ [LVL_CWPITCH] = {.min = {.i = 400}, .max = {.i = 1000}, .step = {.i = 50}},
+ [LVL_BKIN_DLYMS] = {.min = {.i = 0}, .max = {.i = 1000}, .step = {.i = 50}},
+ [LVL_SLOPE_LOW] = {.min = {.i = 0}, .max = {.i = 2400}, .step = {.i = 10}},
+ [LVL_SLOPE_HIGH] = {.min = {.i = 0}, .max = {.i = 5000}, .step = {.i = 10}},
+ },
+ .str_cal = TS480_STR_CAL,
+ .swr_cal = TS480_SWR_CAL,
+
+ .ext_tokens = ts480_ext_tokens,
+ .extfuncs = ts480_ext_funcs,
+ .extlevels = ts480_ext_levels,
+
+ .priv = (void *)& ts480_priv_caps,
+ .rig_init = ts480_init,
+ .rig_open = kenwood_open,
+ .rig_cleanup = kenwood_cleanup,
+ .set_freq = kenwood_set_freq,
+ .get_freq = kenwood_get_freq,
+ .set_rit = ts480_set_rit,
+ .get_rit = ts480_get_rit,
+ .set_xit = ts480_set_rit,
+ .get_xit = ts480_get_rit,
+ .set_mode = kenwood_set_mode,
+ .get_mode = kenwood_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 = kenwood_get_ptt,
+ .set_ptt = kenwood_set_ptt,
+ .get_dcd = kenwood_get_dcd,
+ .set_powerstat = kenwood_set_powerstat,
+ .get_powerstat = kenwood_get_powerstat,
+ .get_info = kenwood_ts480_get_info,
+ .reset = kenwood_reset,
+ .set_ant = kenwood_set_ant,
+ .get_ant = kenwood_get_ant,
+ .scan = kenwood_scan, /* not working, invalid arguments using rigctl; kenwood_scan does only support on/off and not tone and CTCSS scan */
+ .has_set_level = TS480_LEVEL_SET,
+ .has_get_level = TS480_LEVEL_GET,
+ .set_level = kenwood_ts480_set_level,
+ .get_level = kenwood_ts480_get_level,
+ .set_ext_level = ts480_set_ext_level,
+ .get_ext_level = ts480_get_ext_level,
+ .has_get_func = TS480_FUNC_ALL,
+ .has_set_func = TS480_FUNC_ALL,
+ .set_func = ts480_set_func,
+ .get_func = ts480_get_func,
+ .set_ext_func = ts480_set_ext_func,
+ .get_ext_func = ts480_get_ext_func,
+ .send_morse = kenwood_send_morse,
+ .wait_morse = rig_wait_morse,
+ .send_voice_mem = kenwood_send_voice_mem,
+ .stop_voice_mem = kenwood_stop_voice_mem,
+ .vfo_op = kenwood_vfo_op,
+ .hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS
+};
+
/*
* QRPLabs TS-480 emulation rig capabilities
* Notice that some rigs share the same functions.
commit e9e43e23da0be55cc6cc216cec5a6646ebac0bd1
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sun Jan 7 11:55:20 2024 -0600
Remove readonly references to caps structure since it is R/W now
diff --git a/rigs/kenwood/ts450s.c b/rigs/kenwood/ts450s.c
index 6a5a43b4d..b2dc44f6e 100644
--- a/rigs/kenwood/ts450s.c
+++ b/rigs/kenwood/ts450s.c
@@ -106,7 +106,6 @@ int ts450_open(RIG *rig)
/*
* ts450s rig capabilities.
* Notice that some rigs share the same functions.
- * Also this struct is READONLY!
* RIT: Variable Range 9.99 kHz
*
* TODO: protocol to be checked with manual (identical to TS690)
diff --git a/rigs/kenwood/ts480.c b/rigs/kenwood/ts480.c
index 96a904805..43bb9b769 100644
--- a/rigs/kenwood/ts480.c
+++ b/rigs/kenwood/ts480.c
@@ -2073,7 +2073,6 @@ int malachite_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
/*
* Malachite SDR rig capabilities.
* Notice that some rigs share the same functions.
- * Also this struct is READONLY!
*/
struct rig_caps malachite_caps =
{
diff --git a/rigs/kenwood/ts570.c b/rigs/kenwood/ts570.c
index 33f942c41..ba4f6f49f 100644
--- a/rigs/kenwood/ts570.c
+++ b/rigs/kenwood/ts570.c
@@ -891,7 +891,6 @@ int ts570_set_xit(RIG *rig, vfo_t vfo, shortfreq_t rit)
/*
* ts570 rig capabilities.
* Notice that some rigs share the same functions.
- * Also this struct is READONLY!
* RIT: Variable Range 9.99 kHz
*
* part of infos comes from .http = //www.kenwood.net/
@@ -1078,7 +1077,6 @@ struct rig_caps ts570s_caps =
/*
* ts570d rig capabilities, which is basically the ts570s without 6m.
* Notice that some rigs share the same functions.
- * Also this struct is READONLY!
* RIT: Variable Range 9.99 kHz
*
* part of infos comes from .http = //www.kenwood.net/
diff --git a/rigs/kenwood/ts850.c b/rigs/kenwood/ts850.c
index f829934ee..f649c51e2 100644
--- a/rigs/kenwood/ts850.c
+++ b/rigs/kenwood/ts850.c
@@ -94,7 +94,6 @@ static const struct confparams ts850_ext_parms[] =
/*
* ts850 rig capabilities.
* Notice that some rigs share the same functions.
-* Also this struct is READONLY!
*/
struct rig_caps ts850_caps =
{
diff --git a/rigs/kenwood/ts870s.c b/rigs/kenwood/ts870s.c
index 2a7685cb2..cb130b0ef 100644
--- a/rigs/kenwood/ts870s.c
+++ b/rigs/kenwood/ts870s.c
@@ -528,7 +528,6 @@ static int ts870s_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
/*
* ts870s rig capabilities.
* Notice that some rigs share the same functions.
- * Also this struct is READONLY!
* RIT: Variable Range 9.99 kHz
*
* part of infos comes from .http = //www.kenwood.net/
diff --git a/rigs/kenwood/ts930.c b/rigs/kenwood/ts930.c
index 72f3c9088..31a1e577e 100644
--- a/rigs/kenwood/ts930.c
+++ b/rigs/kenwood/ts930.c
@@ -44,7 +44,6 @@ static struct kenwood_priv_caps ts930_priv_caps =
/*
* ts930 rig capabilities.
* Notice that some rigs share the same functions.
- * Also this struct is READONLY!
*
* part of infos comes from .http = //www.kenwood.net/
*/
commit eab660500e565913a39caa42174f2ecb3f90d2db
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sat Jan 6 16:12:48 2024 -0600
Suppress UDP packet error when errno==0
https://github.com/Hamlib/Hamlib/issues/1461
diff --git a/src/network.c b/src/network.c
index 96aa7c5bb..28e7507e3 100644
--- a/src/network.c
+++ b/src/network.c
@@ -999,8 +999,15 @@ void *multicast_publisher(void *arg)
if (send_result < 0)
{
- rig_debug(RIG_DEBUG_ERR, "%s: error sending UDP packet: %s\n", __func__,
- strerror(errno));
+ static int flag = 0;
+
+ if (errno != 0 || flag == 0)
+ {
+ rig_debug(RIG_DEBUG_ERR,
+ "%s: error sending UDP packet: %s\n", __func__,
+ strerror(errno));
+ flag = 1;
+ }
}
}
commit 2eefb14137ab095dc0a83d4cdc6af4463139690f
Author: Mike Black W9MDB <mdb...@ya...>
Date: Fri Jan 5 16:34:03 2024 -0600
Fix LVL granulatiry in ts590.c again
diff --git a/rigs/kenwood/ts590.c b/rigs/kenwood/ts590.c
index 0fc14b0e6..223af4863 100644
--- a/rigs/kenwood/ts590.c
+++ b/rigs/kenwood/ts590.c
@@ -1730,8 +1730,9 @@ struct rig_caps ts590_caps =
{
#include "level_gran_kenwood.h"
[LVL_RF] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f / 255.0f } },
- [LVL_AF] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f / 10.0f } },
- [LVL_AF_INPUT] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f / 10.0f } },
+ [LVL_AF] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f / 255.0f } },
+ [LVL_USB_AF] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f / 10.0f } },
+ [LVL_USB_AF_INPUT] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f / 10.0f } },
[LVL_VOXDELAY] = { .min = { .i = 0 }, .max = { .i = 30 }, .step = { .i = 1 } },
[LVL_CWPITCH] = {.min = {.i = 300}, .max = {.i = 1000}, .step = {.i = 50}},
[LVL_BKIN_DLYMS] = {.min = {.i = 0}, .max = {.i = 1000}, .step = {.i = 50}},
@@ -1925,7 +1926,7 @@ struct rig_caps fx4_caps =
{
#include "level_gran_kenwood.h"
[LVL_RF] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f / 100.0f } },
- [LVL_AF] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f / 100.0f } },
+ [LVL_AF] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f / 255.0f } },
[LVL_VOXDELAY] = { .min = { .i = 0 }, .max = { .i = 30 }, .step = { .i = 1 } },
[LVL_CWPITCH] = {.min = {.i = 300}, .max = {.i = 1000}, .step = {.i = 50}},
[LVL_BKIN_DLYMS] = {.min = {.i = 0}, .max = {.i = 1000}, .step = {.i = 50}},
@@ -2123,7 +2124,9 @@ struct rig_caps ts590sg_caps =
.level_gran = {
#include "level_gran_kenwood.h"
[LVL_RF] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f / 255.0f } },
- [LVL_AF] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f / 10.0f } },
+ [LVL_AF] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f / 255.0f } },
+ [LVL_USB_AF] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f / 10.0f } },
+ [LVL_USB_AF_INPUT] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f / 10.0f } },
[LVL_VOXDELAY] = { .min = { .i = 0 }, .max = { .i = 30 }, .step = { .i = 1 } },
[LVL_CWPITCH] = {.min = {.i = 300}, .max = {.i = 1000}, .step = {.i = 50}},
[LVL_BKIN_DLYMS] = {.min = {.i = 0}, .max = {.i = 1000}, .step = {.i = 50}},
commit 890d1a69aa3bbb816d8dfdf3d4e2f8410efbb8ce
Author: Mike Black W9MDB <mdb...@ya...>
Date: Fri Jan 5 16:26:45 2024 -0600
Fix granularity in ts590.c
diff --git a/rigs/kenwood/ts590.c b/rigs/kenwood/ts590.c
index 651cdfae0..0fc14b0e6 100644
--- a/rigs/kenwood/ts590.c
+++ b/rigs/kenwood/ts590.c
@@ -1729,8 +1729,9 @@ struct rig_caps ts590_caps =
.level_gran =
{
#include "level_gran_kenwood.h"
- [LVL_RF] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f / 100.0f } },
- [LVL_AF] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f / 100.0f } },
+ [LVL_RF] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f / 255.0f } },
+ [LVL_AF] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f / 10.0f } },
+ [LVL_AF_INPUT] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f / 10.0f } },
[LVL_VOXDELAY] = { .min = { .i = 0 }, .max = { .i = 30 }, .step = { .i = 1 } },
[LVL_CWPITCH] = {.min = {.i = 300}, .max = {.i = 1000}, .step = {.i = 50}},
[LVL_BKIN_DLYMS] = {.min = {.i = 0}, .max = {.i = 1000}, .step = {.i = 50}},
@@ -2121,8 +2122,8 @@ struct rig_caps ts590sg_caps =
},
.level_gran = {
#include "level_gran_kenwood.h"
- [LVL_RF] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f / 100.0f } },
- [LVL_AF] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f / 100.0f } },
+ [LVL_RF] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f / 255.0f } },
+ [LVL_AF] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f / 10.0f } },
[LVL_VOXDELAY] = { .min = { .i = 0 }, .max = { .i = 30 }, .step = { .i = 1 } },
[LVL_CWPITCH] = {.min = {.i = 300}, .max = {.i = 1000}, .step = {.i = 50}},
[LVL_BKIN_DLYMS] = {.min = {.i = 0}, .max = {.i = 1000}, .step = {.i = 50}},
commit 47f92eb5f712b6ac0822642bead5213ed95c1b3c
Author: Mike Black W9MDB <mdb...@ya...>
Date: Thu Jan 4 12:25:38 2024 -0600
Improved Kenwood USB_AF and USB_AF_INPUT level to make it more symmetrical
Values can now be enter in signal digits .1 .2 .3 .4 .5 .6 .7 .8, .9 and higher is max value
diff --git a/rigs/kenwood/ts590.c b/rigs/kenwood/ts590.c
index e758baa1e..651cdfae0 100644
--- a/rigs/kenwood/ts590.c
+++ b/rigs/kenwood/ts590.c
@@ -22,6 +22,7 @@
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
+#include <math.h>
#include "hamlib/rig.h"
#include "kenwood.h"
@@ -467,7 +468,7 @@ static int ts590_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
switch (level)
{
case RIG_LEVEL_USB_AF:
- kenwood_val = val.f * 9;
+ kenwood_val = roundl((val.f + .045) * 9);
cmd = 65; // TS-590S
if (rig->caps->rig_model == RIG_MODEL_TS590SG) { cmd = 72; }
@@ -476,7 +477,7 @@ static int ts590_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
break;
case RIG_LEVEL_USB_AF_INPUT:
- kenwood_val = val.f * 9;
+ kenwood_val = roundl((val.f + .045) * 9);
cmd = 64; // TS-590S
if (rig->caps->rig_model == RIG_MODEL_TS590SG) { cmd = 71; }
@@ -663,16 +664,34 @@ static int ts590_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
if (rig->caps->rig_model == RIG_MODEL_TS590SG) { cmd = 72; }
retval = ts590_get_ex_menu(rig, cmd, 1, &levelint);
- val->f = levelint / 9.0;
+
+ if (levelint == 9)
+ {
+ val->f = 1.0;
+ }
+ else
+ {
+ val->f = roundl(levelint * 10 / 10.0 + .04) / 10.0;
+ }
+
return retval;
case RIG_LEVEL_USB_AF_INPUT:
- cmd = 65; // TS-590S
+ cmd = 64; // TS-590S
if (rig->caps->rig_model == RIG_MODEL_TS590SG) { cmd = 71; }
retval = ts590_get_ex_menu(rig, cmd, 1, &levelint);
- val->f = levelint / 9.0;
+
+ if (levelint == 9)
+ {
+ val->f = 1.0;
+ }
+ else
+ {
+ val->f = roundl(levelint * 10 / 10.0) / 10.0;
+ }
+
return retval;
case RIG_LEVEL_AF:
@@ -1593,7 +1612,7 @@ struct rig_caps ts590_caps =
RIG_MODEL(RIG_MODEL_TS590S),
.model_name = "TS-590S",
.mfg_name = "Kenwood",
- .version = BACKEND_VER ".11",
+ .version = BACKEND_VER ".12",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
@@ -2015,7 +2034,7 @@ 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 },
+ { 1, 3, RIG_MTYPE_MORSE },
RIG_CHAN_END,
},
commit 5980eb3cc7c9f2ed758e9ca3e5e7385f6a552b0b
Merge: 921def7c5 bb1590ed9
Author: Michael Black <mdb...@ya...>
Date: Wed Jan 3 22:10:06 2024 -0600
Merge pull request #1470 from GeoBaltz/fix7
Fix copy/paste errors in rigs/icom/
commit bb1590ed9cae1406cb24e40e2018face4b4d0a0c
Author: George Baltz N3GB <Geo...@gm...>
Date: Wed Jan 3 21:13:42 2024 -0500
More typos/copy/paste errors in rigs/icom
diff --git a/rigs/icom/ic737.c b/rigs/icom/ic737.c
index e04ea3b3d..8f1a8da64 100644
--- a/rigs/icom/ic737.c
+++ b/rigs/icom/ic737.c
@@ -157,7 +157,7 @@ struct rig_caps ic737_caps =
.rig_init = icom_init,
.rig_cleanup = icom_cleanup,
.rig_open = icom_rig_open,
- .rig_close = icom_rig_open,
+ .rig_close = icom_rig_close,
.set_freq = icom_set_freq,
.get_freq = icom_get_freq,
diff --git a/rigs/icom/ic738.c b/rigs/icom/ic738.c
index 09d646c28..354152d4a 100644
--- a/rigs/icom/ic738.c
+++ b/rigs/icom/ic738.c
@@ -162,7 +162,7 @@ struct rig_caps ic738_caps =
.rig_init = icom_init,
.rig_cleanup = icom_cleanup,
.rig_open = icom_rig_open,
- .rig_close = icom_rig_open,
+ .rig_close = icom_rig_close,
.set_freq = icom_set_freq,
.get_freq = icom_get_freq,
diff --git a/rigs/icom/ic7410.c b/rigs/icom/ic7410.c
index 750393ae5..9e114c8a5 100644
--- a/rigs/icom/ic7410.c
+++ b/rigs/icom/ic7410.c
@@ -245,7 +245,7 @@ struct rig_caps ic7410_caps =
.rig_init = icom_init,
.rig_cleanup = icom_cleanup,
.rig_open = icom_rig_open,
- .rig_close = icom_rig_open,
+ .rig_close = icom_rig_close,
.set_freq = icom_set_freq,
.get_freq = icom_get_freq,
diff --git a/rigs/icom/ic746.c b/rigs/icom/ic746.c
index 23d134bff..461998201 100644
--- a/rigs/icom/ic746.c
+++ b/rigs/icom/ic746.c
@@ -297,7 +297,7 @@ struct rig_caps ic746_caps =
.rig_init = icom_init,
.rig_cleanup = icom_cleanup,
.rig_open = icom_rig_open,
- .rig_close = icom_rig_open,
+ .rig_close = icom_rig_close,
.set_freq = icom_set_freq,
.get_freq = icom_get_freq,
diff --git a/rigs/icom/ic751.c b/rigs/icom/ic751.c
index a1352f616..a691443f7 100644
--- a/rigs/icom/ic751.c
+++ b/rigs/icom/ic751.c
@@ -209,7 +209,7 @@ struct rig_caps ic751_caps =
.rig_init = icom_init,
.rig_cleanup = icom_cleanup,
.rig_open = icom_rig_open,
- .rig_close = icom_rig_open,
+ .rig_close = icom_rig_close,
.set_freq = icom_set_freq,
.get_freq = icom_get_freq,
diff --git a/rigs/icom/ic7600.c b/rigs/icom/ic7600.c
index 3c6f2ba49..bf9c0937a 100644
--- a/rigs/icom/ic7600.c
+++ b/rigs/icom/ic7600.c
@@ -420,7 +420,7 @@ struct rig_caps ic7600_caps =
.rig_init = icom_init,
.rig_cleanup = icom_cleanup,
.rig_open = icom_rig_open,
- .rig_close = icom_rig_open,
+ .rig_close = icom_rig_close,
.set_freq = icom_set_freq,
.get_freq = icom_get_freq,
diff --git a/rigs/icom/ic761.c b/rigs/icom/ic761.c
index 4a73b7a12..0f27af61f 100644
--- a/rigs/icom/ic761.c
+++ b/rigs/icom/ic761.c
@@ -174,7 +174,7 @@ struct rig_caps ic761_caps =
.rig_init = icom_init,
.rig_cleanup = icom_cleanup,
.rig_open = icom_rig_open,
- .rig_close = icom_rig_open,
+ .rig_close = icom_rig_close,
.set_freq = icom_set_freq,
.get_freq = icom_get_freq,
diff --git a/rigs/icom/id1.c b/rigs/icom/id1.c
index 81004a411..d83efc844 100644
--- a/rigs/icom/id1.c
+++ b/rigs/icom/id1.c
@@ -169,7 +169,7 @@ struct rig_caps id1_caps =
.rig_init = icom_init,
.rig_cleanup = icom_cleanup,
.rig_open = icom_rig_open,
- .rig_close = icom_rig_open,
+ .rig_close = icom_rig_close,
.set_freq = icom_set_freq,
.get_freq = icom_get_freq,
diff --git a/rigs/icom/id31.c b/rigs/icom/id31.c
index 3de602f9d..9727c42b6 100644
--- a/rigs/icom/id31.c
+++ b/rigs/icom/id31.c
@@ -168,7 +168,7 @@ struct rig_caps id31_caps =
.rig_init = icom_init,
.rig_cleanup = icom_cleanup,
.rig_open = icom_rig_open,
- .rig_close = icom_rig_open,
+ .rig_close = icom_rig_close,
.set_freq = icom_set_freq,
.get_freq = icom_get_freq,
diff --git a/rigs/icom/id4100.c b/rigs/icom/id4100.c
index c04c9ec55..e06694e95 100644
--- a/rigs/icom/id4100.c
+++ b/rigs/icom/id4100.c
@@ -176,7 +176,7 @@ struct rig_caps id4100_caps =
.rig_init = icom_init,
.rig_cleanup = icom_cleanup,
.rig_open = icom_rig_open,
- .rig_close = icom_rig_open,
+ .rig_close = icom_rig_close,
.set_freq = icom_set_freq,
.get_freq = icom_get_freq,
diff --git a/rigs/icom/omni.c b/rigs/icom/omni.c
index 14eb87af3..0c2e33f7c 100644
--- a/rigs/icom/omni.c
+++ b/rigs/icom/omni.c
@@ -159,7 +159,7 @@ struct rig_caps omnivip_caps =
.rig_cleanup = icom_cleanup,
.rig_open = icom_rig_open,
- .rig_close = icom_rig_open,
+ .rig_close = icom_rig_close,
.set_freq = icom_set_freq,
.get_freq = icom_get_freq,
.set_mode = icom_set_mode,
diff --git a/rigs/icom/perseus.c b/rigs/icom/perseus.c
index 65b5a9c47..e13ae8667 100644
--- a/rigs/icom/perseus.c
+++ b/rigs/icom/perseus.c
@@ -153,7 +153,7 @@ struct rig_caps perseus_caps =
.rig_init = icom_init,
.rig_cleanup = icom_cleanup,
.rig_open = icom_rig_open,
- .rig_close = icom_rig_open,
+ .rig_close = icom_rig_close,
.set_freq = icom_set_freq,
.get_freq = icom_get_freq,
commit 64d606c1c4a366f060b0b048f80a59836fefea58
Author: George Baltz N3GB <Geo...@gm...>
Date: Wed Jan 3 21:00:36 2024 -0500
Fix copy/paste errors in xiegu.c
diff --git a/rigs/icom/xiegu.c b/rigs/icom/xiegu.c
index 68dc21f48..bd4a88aa3 100644
--- a/rigs/icom/xiegu.c
+++ b/rigs/icom/xiegu.c
@@ -273,7 +273,7 @@ struct rig_caps x108g_caps =
.rig_init = icom_init,
.rig_cleanup = icom_cleanup,
.rig_open = x108g_rig_open,
- .rig_close = icom_rig_open,
+ .rig_close = icom_rig_close,
.set_freq = icom_set_freq,
.get_freq = icom_get_freq,
@@ -449,7 +449,7 @@ struct rig_caps x6100_caps =
.rig_init = icom_init,
.rig_cleanup = icom_cleanup,
.rig_open = icom_rig_open,
- .rig_close = icom_rig_open,
+ .rig_close = icom_rig_close,
.set_freq = icom_set_freq,
.get_freq = icom_get_freq,
@@ -644,7 +644,7 @@ struct rig_caps g90_caps =
.rig_init = icom_init,
.rig_cleanup = icom_cleanup,
.rig_open = g90_rig_open,
- .rig_close = icom_rig_open,
+ .rig_close = icom_rig_close,
.set_freq = icom_set_freq,
.get_freq = icom_get_freq,
@@ -819,7 +819,7 @@ struct rig_caps x5105_caps =
.rig_init = icom_init,
.rig_cleanup = icom_cleanup,
.rig_open = icom_rig_open,
- .rig_close = icom_rig_open,
+ .rig_close = icom_rig_close,
.set_freq = icom_set_freq,
.get_freq = icom_get_freq,
commit 921def7c5f18a4f0cf3f17b4007c8865156c2784
Author: Mike Black W9MDB <mdb...@ya...>
Date: Wed Jan 3 16:56:10 2024 -0600
Show Xeigu Radio ID during g90_open
https://github.com/Hamlib/Hamlib/issues/909
diff --git a/rigs/icom/xiegu.c b/rigs/icom/xiegu.c
index 8b5313c5b..68dc21f48 100644
--- a/rigs/icom/xiegu.c
+++ b/rigs/icom/xiegu.c
@@ -497,12 +497,31 @@ struct rig_caps x6100_caps =
.hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS
};
+int g90_rig_open(RIG *rig)
+{
+ int retval;
+ unsigned char id[2];
+ int id_len = 2;
+ int cmd = 0x19;
+ int subcmd = 0x1d;
+ short iid;
+ retval = icom_transaction(rig, cmd, subcmd, NULL, 0, id, &id_len);
+
+ if (retval == RIG_OK)
+ {
+ memcpy(&iid, id, 2);
+ rig_debug(RIG_DEBUG_VERBOSE, "Xiegu Radio ID=0x%04x\n", iid);
+ }
+
+ return icom_rig_open(rig);
+}
+
struct rig_caps g90_caps =
{
RIG_MODEL(RIG_MODEL_G90),
.model_name = "G90",
.mfg_name = "Xiegu",
- .version = BACKEND_VER ".6",
+ .version = BACKEND_VER ".7",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
@@ -624,7 +643,7 @@ struct rig_caps g90_caps =
.priv = (void *)& x108g_priv_caps,
.rig_init = icom_init,
.rig_cleanup = icom_cleanup,
- .rig_open = icom_rig_open,
+ .rig_open = g90_rig_open,
.rig_close = icom_rig_open,
.set_freq = icom_set_freq,
commit 9877387c55153c268b548109fa64ad97dc21c09e
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sat Dec 30 08:18:44 2023 -0600
Force split off for Yaesu rigs with 60m_exception since split cannot operate in memory mode
diff --git a/rigs/yaesu/newcat.c b/rigs/yaesu/newcat.c
index fee3ebf3a..436b08775 100644
--- a/rigs/yaesu/newcat.c
+++ b/rigs/yaesu/newcat.c
@@ -2732,8 +2732,9 @@ int newcat_set_split_vfo(RIG *rig, vfo_t vfo, split_t split, vfo_t tx_vfo)
}
if (newcat_60m_exception(rig, rig->state.cache.freqMainA, rig->state.cache.modeMainA))
{
- rig_debug(RIG_DEBUG_VERBOSE, "%s: ignoring set_split since we're on 60M exception\n", __func__);
- return RIG_OK; // fake the return code to make things happy
+ rig_debug(RIG_DEBUG_VERBOSE, "%s: force set_split off since we're on 60M exception\n", __func__);
+ split = RIG_SPLIT_OFF;
+ //return RIG_OK; // fake the return code to make things happy
}
if (is_ft991)
diff --git a/rigs/yaesu/newcat.h b/rigs/yaesu/newcat.h
index 6521bf966..f3a229035 100644
--- a/rigs/yaesu/newcat.h
+++ b/rigs/yaesu/newcat.h
@@ -50,7 +50,7 @@
typedef char ncboolean;
/* shared function version */
-#define NEWCAT_VER "20231204"
+#define NEWCAT_VER "20231230"
/* Hopefully large enough for future use, 128 chars plus '\0' */
#define NEWCAT_DATA_LEN 129
commit bd746387f9e7d1b6b52bf015a70c344891776d7a
Author: Mike Black W9MDB <mdb...@ya...>
Date: Fri Dec 29 15:59:34 2023 -0600
Fix set_ant and get_ant for rigctl -m 2 dump_caps
https://github.com/Hamlib/Hamlib/issues/1466
diff --git a/rigs/dummy/netrigctl.c b/rigs/dummy/netrigctl.c
index 8002348e4..96277700c 100644
--- a/rigs/dummy/netrigctl.c
+++ b/rigs/dummy/netrigctl.c
@@ -736,6 +736,18 @@ static int netrigctl_open(RIG *rig)
if (!has) { rig->caps->get_conf = NULL; }
}
+ else if (strcmp(setting, "has_get_ant") == 0)
+ {
+ int has = strtol(value, NULL, 0);
+
+ if (!has) { rig->caps->get_ant = NULL; }
+ }
+ else if (strcmp(setting, "has_set_ant") == 0)
+ {
+ int has = strtol(value, NULL, 0);
+
+ if (!has) { rig->caps->set_ant = NULL; }
+ }
#if 0 // for the future
else if (strcmp(setting, "has_set_trn") == 0)
@@ -2811,7 +2823,7 @@ struct rig_caps netrigctl_caps =
RIG_MODEL(RIG_MODEL_NETRIGCTL),
.model_name = "NET rigctl",
.mfg_name = "Hamlib",
- .version = "20231004.0",
+ .version = "20231229.0",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_OTHER,
diff --git a/tests/rigctl_parse.c b/tests/rigctl_parse.c
index 7fe15672d..ff5018aeb 100644
--- a/tests/rigctl_parse.c
+++ b/tests/rigctl_parse.c
@@ -4671,6 +4671,8 @@ declare_proto_rig(dump_state)
// fprintf(fout, "has_get_trn=%d\n", rig->caps->get_trn != NULL);
fprintf(fout, "has_power2mW=%d\n", rig->caps->power2mW != NULL);
fprintf(fout, "has_mW2power=%d\n", rig->caps->mW2power != NULL);
+ fprintf(fout, "has_get_ant=%d\n", rig->caps->get_ant != NULL);
+ fprintf(fout, "has_set_ant=%d\n", rig->caps->set_ant != NULL);
fprintf(fout, "timeout=%d\n", rig->caps->timeout);
fprintf(fout, "rig_model=%d\n", rig->caps->rig_model);
fprintf(fout, "rigctld_version=%s\n", hamlib_version2);
commit 65bd022a2cadb58cada8f249a577653cf11f480e
Author: Mike Black W9MDB <mdb...@ya...>
Date: Fri Dec 29 15:41:05 2023 -0600
Fix BAND_SELECT segfault on dumpcaps
https://github.com/Hamlib/Hamlib/issues/1467
diff --git a/src/sprintflst.c b/src/sprintflst.c
index 5c57db5cd..ca87d8b6f 100644
--- a/src/sprintflst.c
+++ b/src/sprintflst.c
@@ -566,7 +566,7 @@ int rig_sprintf_parm_gran(char *str, int nlen, setting_t parm,
if (RIG_PARM_IS_FLOAT(rig_idx2setting(i)))
{
- len += sprintf(str + len,
+ len += snprintf(str + len, nlen,
"%s(%.g..%.g/%.g) ",
ms,
gran[i].min.f,
@@ -578,10 +578,13 @@ int rig_sprintf_parm_gran(char *str, int nlen, setting_t parm,
if (gran[i].step.s)
{
rig_debug(RIG_DEBUG_ERR, "%s: BAND_SELECT?\n", __func__);
+ if (strcmp(ms,"BANDSELECT")!=0)
+ {
len += sprintf(str + len,
"%s(%s) ",
ms,
gran[i].step.s);
+ }
}
}
else
commit c019467987eb9a0d56d8f55b5b0d9045cf752da0
Author: Mike Black W9MDB <mdb...@ya...>
Date: Thu Dec 28 12:11:31 2023 -0600
Ignore set_split for Yaesu 60M exception rigs
Cannot do split in memory modey
diff --git a/rigs/yaesu/newcat.c b/rigs/yaesu/newcat.c
index 639ed241e..fee3ebf3a 100644
--- a/rigs/yaesu/newcat.c
+++ b/rigs/yaesu/newcat.c
@@ -2730,6 +2730,11 @@ int newcat_set_split_vfo(RIG *rig, vfo_t vfo, split_t split, vfo_t tx_vfo)
{
RETURNFUNC(err);
}
+ if (newcat_60m_exception(rig, rig->state.cache.freqMainA, rig->state.cache.modeMainA))
+ {
+ rig_debug(RIG_DEBUG_VERBOSE, "%s: ignoring set_split since we're on 60M exception\n", __func__);
+ return RIG_OK; // fake the return code to make things happy
+ }
if (is_ft991)
{
commit 19c4b01e5abf68e91474b376faf2e2dc0b92c9a4
Merge: 549257217 0c1f66710
Author: Mike Black W9MDB <mdb...@ya...>
Date: Thu Dec 28 11:52:24 2023 -0600
Merge branch 'master' of https://github.com/Hamlib/Hamlib
commit 5492572176581c8e17c3d82e9c935cc03a9346e3
Author: Mike Black W9MDB <mdb...@ya...>
Date: Thu Dec 28 11:51:56 2023 -0600
Add FTDX10 to 860M exception
diff --git a/rigs/yaesu/newcat.c b/rigs/yaesu/newcat.c
index 3a392bdf4..639ed241e 100644
--- a/rigs/yaesu/newcat.c
+++ b/rigs/yaesu/newcat.c
@@ -852,7 +852,7 @@ int newcat_60m_exception(RIG *rig, freq_t freq, mode_t mode)
}
// some rigs need to skip freq/mode settings as 60M only operates in memory mode
- if (is_ft991 || is_ft897 || is_ft897d || is_ftdx5000) { return 1; }
+ if (is_ft991 || is_ft897 || is_ft897d || is_ftdx5000 || is_ftdx10) { return 1; }
if (!is_ftdx10 && !is_ft710 && !is_ftdx101d && !is_ftdx101mp) { return 0; }
commit 0c1f66710a37bd978ac95a2d622e52ee86a52340
Merge: a4fa02184 5d0cbba91
Author: Michael Black <mdb...@ya...>
Date: Thu Dec 28 06:37:23 2023 -0600
Merge pull request #1464 from zcsahok/minor_man_fix
Minor man page fix
commit 5d0cbba91edea54619fc9dcb0647ac4df8c84c39
Author: zcsahok <ha...@gm...>
Date: Thu Dec 28 12:18:02 2023 +0000
Minor man page fix
diff --git a/doc/man1/rigctl.1 b/doc/man1/rigctl.1
index baf5b8fa8..add6d52e9 100644
--- a/doc/man1/rigctl.1
+++ b/doc/man1/rigctl.1
@@ -1168,7 +1168,7 @@ VFO reset, \(oq4\(cq = Memory Clear reset, \(oq8\(cq = Master reset.
.IP
Since these values are defined as a bitmask in
.IR include/hamlib/rig.h ,
-it should be possible to AND these values together to do multiple resets at
+it should be possible to OR these values together to do multiple resets at
once, if the backend supports it or supports a reset action via rig control at
all.
.
diff --git a/doc/man1/rigctld.1 b/doc/man1/rigctld.1
index fa8277a4e..fc701018b 100644
--- a/doc/man1/rigctld.1
+++ b/doc/man1/rigctld.1
@@ -1052,7 +1052,7 @@ VFO reset, \(oq4\(cq = Memory Clear reset, \(oq8\(cq = Master reset.
.IP
Since these values are defined as a bitmask in
.IR include/hamlib/rig.h ,
-it should be possible to AND these values together to do multiple resets at
+it should be possible to OR these values together to do multiple resets at
once, if the backend supports it or supports a reset action via rig control at
all.
.
commit a4fa021848748eb2c57fd53062d911aabed3a917
Author: Mike Black W9MDB <mdb...@ya...>
Date: Wed Dec 27 11:58:40 2023 -0600
Update kenwood.c for THETIS
diff --git a/rigs/kenwood/kenwood.c b/rigs/kenwood/kenwood.c
index c74cd7d87..d7f26d9d3 100644
--- a/rigs/kenwood/kenwood.c
+++ b/rigs/kenwood/kenwood.c
@@ -5018,6 +5018,7 @@ int kenwood_set_trn(RIG *rig, int trn)
char buf[5];
case RIG_MODEL_POWERSDR: // powersdr doesn't have AI command
+ case RIG_MODEL_THETIS: // powersdr doesn't have AI command
RETURNFUNC(-RIG_ENAVAIL);
case RIG_MODEL_TS990S:
commit bc2f2ce5c7054450fdd2d251c6d2a4c5ea0ba811
Author: Mike Black W9MDB <mdb...@ya...>
Date: Wed Dec 27 10:25:48 2023 -0600
Enable set_ptt for IC703
diff --git a/rigs/icom/ic703.c b/rigs/icom/ic703.c
index fa1f16d39..4d619f4be 100644
--- a/rigs/icom/ic703.c
+++ b/rigs/icom/ic703.c
@@ -86,11 +86,11 @@ struct rig_caps ic703_caps =
RIG_MODEL(RIG_MODEL_IC703),
.model_name = "IC-703",
.mfg_name = "Icom",
- .version = BACKEND_VER ".1",
+ .version = BACKEND_VER ".2",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_MOBILE,
- .ptt_type = RIG_PTT_NONE,
+ .ptt_type = RIG_PTT_RIG,
.dcd_type = RIG_DCD_RIG,
.port_type = RIG_PORT_SERIAL,
.serial_rate_min = 300,
commit da478d6e74d64234fac1848ef3447a6e8892b192
Author: Mike Black W9MDB <mdb...@ya...>
Date: Tue Dec 26 22:46:38 2023 -0600
Add THETIS to flex.c
diff --git a/rigs/kenwood/flex.c b/rigs/kenwood/flex.c
index 0fac02689..733a219e0 100644
--- a/rigs/kenwood/flex.c
+++ b/rigs/kenwood/flex.c
@@ -135,6 +135,7 @@ int flexradio_open(RIG *rig)
break;
case RIG_MODEL_POWERSDR:
+ case RIG_MODEL_THETIS:
break;
default:
commit 02a6c80800f05c220294e7610c8c39ae95f6a157
Author: Mike Black W9MDB <mdb...@ya...>
Date: Tue Dec 26 22:36:55 2023 -0600
Fix RIG_IS_THETIS in kenwood.c to match RIG_IS_POWERSDR
diff --git a/rigs/kenwood/kenwood.c b/rigs/kenwood/kenwood.c
index fe301968f..c74cd7d87 100644
--- a/rigs/kenwood/kenwood.c
+++ b/rigs/kenwood/kenwood.c
@@ -710,7 +710,7 @@ int kenwood_safe_transaction(RIG *rig, const char *cmd, char *buf,
{
size_t length;
// some PowerSDR commands have variable len
- int checklen = !RIG_IS_POWERSDR;
+ int checklen = !RIG_IS_POWERSDR && !RIG_IS_THETIS;
err = kenwood_transaction(rig, cmd, buf, buf_size);
if (err != RIG_OK) /* return immediately on error as any
@@ -5052,7 +5052,7 @@ int kenwood_get_trn(RIG *rig, int *trn)
/* these rigs only have AI[0|1] set commands and no AI query */
if (RIG_IS_TS450S || RIG_IS_TS690S || RIG_IS_TS790 || RIG_IS_TS850
- || RIG_IS_TS950S || RIG_IS_TS950SDX || RIG_IS_POWERSDR)
+ || RIG_IS_TS950S || RIG_IS_TS950SDX || RIG_IS_POWERSDR || RIG_IS_THETIS)
{
RETURNFUNC(-RIG_ENAVAIL);
}
diff --git a/rigs/kenwood/kenwood.h b/rigs/kenwood/kenwood.h
index 338535b35..5ab2e64f0 100644
--- a/rigs/kenwood/kenwood.h
+++ b/rigs/kenwood/kenwood.h
@@ -28,7 +28,7 @@
#include "token.h"
#include "idx_builtin.h"
-#define BACKEND_VER "20231112"
+#define BACKEND_VER "20231226"
#define EOM_KEN ';'
#define EOM_TH '\r'
@@ -109,6 +109,7 @@ extern struct confparams kenwood_cfg_params[];
#define RIG_IS_XG3 (rig->caps->rig_model == RIG_MODEL_XG3)
#define RIG_IS_PT8000A (rig->caps->rig_model == RIG_MODEL_PT8000A)
#define RIG_IS_POWERSDR (rig->caps->rig_model == RIG_MODEL_POWERSDR)
+#define RIG_IS_THETIS (rig->caps->rig_model == RIG_MODEL_THETIS)
#define RIG_IS_MALACHITE (rig->caps->rig_model == RIG_MODEL_MALACHITE)
#define RIG_IS_QRPLABS (rig->caps->rig_model == RIG_MODEL_QRPLABS)
commit 08ba518b717f8c9abaadfb9ffa5a34e7f4cc664a
Author: Mike Black W9MDB <mdb...@ya...>
Date: Tue Dec 26 06:40:11 2023 -0600
Change network.s to allow MacOS compilation for is_networked
https://github.com/Hamlib/Hamlib/issues/1463
diff --git a/src/network.c b/src/network.c
index 56688787e..96aa7c5bb 100644
--- a/src/network.c
+++ b/src/network.c
@@ -1153,11 +1153,9 @@ int is_wireless()
return 0;
}
#else
-#ifndef __APPLE__
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <unistd.h>
-#include <linux/wireless.h>
#include <ifaddrs.h>
int is_networked(char *ipv4, int ipv4_length)
@@ -1200,6 +1198,8 @@ int is_networked(char *ipv4, int ipv4_length)
}
+#ifdef __linux__
+#include <linux/wireless.h>
int is_wireless_linux(const char *ifname)
{
int sock = socket(AF_INET, SOCK_DGRAM, 0);
@@ -1365,10 +1365,12 @@ 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));
+
if (errno != 0)
{
return NULL;
}
+
rig_debug(RIG_DEBUG_VERBOSE, "%s: errno==0 so trying to continue\n", __func__);
}
-----------------------------------------------------------------------
Summary of changes:
NEWS | 1 +
doc/man1/rigctl.1 | 2 +-
doc/man1/rigctld.1 | 2 +-
include/hamlib/riglist.h | 1 +
rigs/dummy/netrigctl.c | 14 +++-
rigs/icom/ic703.c | 4 +-
rigs/icom/ic737.c | 2 +-
rigs/icom/ic738.c | 2 +-
rigs/icom/ic7410.c | 2 +-
rigs/icom/ic746.c | 2 +-
rigs/icom/ic751.c | 2 +-
rigs/icom/ic7600.c | 2 +-
rigs/icom/ic761.c | 2 +-
rigs/icom/id1.c | 2 +-
rigs/icom/id31.c | 2 +-
rigs/icom/id4100.c | 2 +-
rigs/icom/omni.c | 2 +-
rigs/icom/perseus.c | 2 +-
rigs/icom/xiegu.c | 31 ++++++--
rigs/kenwood/flex.c | 1 +
rigs/kenwood/kenwood.c | 6 +-
rigs/kenwood/kenwood.h | 4 +-
rigs/kenwood/ts450s.c | 1 -
rigs/kenwood/ts480.c | 199 ++++++++++++++++++++++++++++++++++++++++++++++-
rigs/kenwood/ts570.c | 2 -
rigs/kenwood/ts590.c | 47 ++++++++---
rigs/kenwood/ts850.c | 1 -
rigs/kenwood/ts870s.c | 1 -
rigs/kenwood/ts930.c | 1 -
rigs/yaesu/newcat.c | 8 +-
rigs/yaesu/newcat.h | 2 +-
src/network.c | 17 +++-
src/sprintflst.c | 5 +-
tests/rigctl_parse.c | 2 +
34 files changed, 324 insertions(+), 52 deletions(-)
hooks/post-receive
--
Hamlib -- Ham radio control libraries
|
|
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] |
|
From: n0nb <n0...@us...> - 2023-12-18 16:31:06
|
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 21cbd7704738d6e7da778c06145463e33f77b611 (commit)
via a3676e0e3b7f20f5a85cbbccb6adc0fdcd4a0f96 (commit)
via 3a6073d4013b63ab7e00e27e69ff6340ff7ca147 (commit)
via 98edf92240ff64c62321886cd7f2c8e60e9dcb5e (commit)
via 19bf90bbb48f80a0b1bc24ae9ab14896b1922a9e (commit)
via bc6f874675a2c66930457557f3f66086ec465afa (commit)
via dbb8f4d5a7d68e90633fe9357d9a42c7eedb0819 (commit)
via 1f38d591539f4b47889e8b8e792c9ccbb5900de2 (commit)
via 248d5e44a93d773119508e5bf4c363d1e5434342 (commit)
via 027b7801899e67133c153b3918205bf5464946e1 (commit)
via ac7c908036533b629ce70269e3d6b992c58ed3f8 (commit)
via 50711dcfb8c88729bf50291fd68034b16e485236 (commit)
via 11876d7cc4344d70354c28ad3c763c5999aab69a (commit)
via e267c6276495bee71eaf217715874cb56bcb4d6b (commit)
via e1b3ac2a95a052f8aa23b2aac2fa170a50b2771e (commit)
via 67e57f6e4db5f6de582445113c4785fb116ec01c (commit)
via f81d49cdabafa9254f539e1fa66fecf393674b20 (commit)
via 5dac79340fad70c6422ff686b9ff58dfc996afed (commit)
via 10accf17b83227ef16e27e15c7bf7df599cb89c8 (commit)
via 18c88c9f3859c3201eaac30e000a69e6d5e232c2 (commit)
via 5dc55ff9e1ea74732190eb57470e1a8a39a8a4a3 (commit)
via 81db043fbd500c0a44f95c94a343d1a952976e75 (commit)
via 27d7e8bd2d2013c60ec87e1393874ece8fea0273 (commit)
via 5f0c8691d7fdc7ccafee7fb888fbdaf9a4182931 (commit)
via e9f9286f212f4874f90d34aa6100481cfbab0910 (commit)
via b25b4960512f0ca2411bc5509cec023d62fa4683 (commit)
via 72fba4eb5b0d08de4818a5b56ecb08e02524e1a6 (commit)
via 63c615a452ec066ca989600eb8d8bd24d2c45bf2 (commit)
via ea823e911c5afdab7120e8b8d8f336e572428734 (commit)
from ae69772d2a5dd8adad0c8de51b6c44db5f060e35 (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 21cbd7704738d6e7da778c06145463e33f77b611
Author: Mike Black W9MDB <mdb...@ya...>
Date: Mon Dec 18 09:11:19 2023 -0600
Add retries in easycomm.c
diff --git a/rotators/easycomm/easycomm.c b/rotators/easycomm/easycomm.c
index 3007d3491..419c16fd8 100644
--- a/rotators/easycomm/easycomm.c
+++ b/rotators/easycomm/easycomm.c
@@ -50,6 +50,7 @@ easycomm_transaction(ROT *rot, const char *cmdstr, char *data, size_t data_len)
{
struct rot_state *rs;
int retval;
+ int retry = rot->caps->retry;
rig_debug(RIG_DEBUG_TRACE, "%s called: %s\n", __func__, cmdstr);
@@ -59,33 +60,39 @@ easycomm_transaction(ROT *rot, const char *cmdstr, char *data, size_t data_len)
}
rs = &rot->state;
- rig_flush(&rs->rotport);
- retval = write_block(&rs->rotport, (unsigned char *) cmdstr, strlen(cmdstr));
- if (retval != RIG_OK)
+ do
{
- goto transaction_quit;
- }
+ rig_flush(&rs->rotport);
+ retval = write_block(&rs->rotport, (unsigned char *) cmdstr, strlen(cmdstr));
- if (data == NULL)
- {
- return RIG_OK; /* don't want a reply */
- }
+ if (retval != RIG_OK)
+ {
+ goto transaction_quit;
+ }
- retval = read_string(&rs->rotport, (unsigned char *) data, data_len,
- "\n", 1, 0, 1);
+ if (data == NULL)
+ {
+ return RIG_OK; /* don't want a reply */
+ }
- if (retval < 0)
- {
- rig_debug(RIG_DEBUG_TRACE, "%s read_string failed with status %d:%s\n", __func__,
- retval, strerror(retval));
- goto transaction_quit;
- }
- else
- {
- rig_debug(RIG_DEBUG_TRACE, "%s read_string: %s\n", __func__, data);
- retval = RIG_OK;
+ retval = read_string(&rs->rotport, (unsigned char *) data, data_len,
+ "\n", 1, 0, 1);
+
+ if (retval < 0)
+ {
+ rig_debug(RIG_DEBUG_TRACE, "%s read_string failed with status %d:%s\n",
+ __func__,
+ retval, strerror(retval));
+ goto transaction_quit;
+ }
+ else
+ {
+ rig_debug(RIG_DEBUG_TRACE, "%s read_string: %s\n", __func__, data);
+ retval = RIG_OK;
+ }
}
+ while (--retry && retval != RIG_OK);
transaction_quit:
return retval;
@@ -520,7 +527,7 @@ const struct rot_caps easycomm1_rot_caps =
ROT_MODEL(ROT_MODEL_EASYCOMM1),
.model_name = "EasycommI",
.mfg_name = "Hamlib",
- .version = "20220109.0",
+ .version = "20231218.0",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rot_type = ROT_TYPE_OTHER,
@@ -556,7 +563,7 @@ const struct rot_caps easycomm2_rot_caps =
ROT_MODEL(ROT_MODEL_EASYCOMM2),
.model_name = "EasycommII",
.mfg_name = "Hamlib",
- .version = "20191206.0",
+ .version = "20231218.0",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rot_type = ROT_TYPE_OTHER,
@@ -602,7 +609,7 @@ const struct rot_caps easycomm3_rot_caps =
ROT_MODEL(ROT_MODEL_EASYCOMM3),
.model_name = "EasycommIII",
.mfg_name = "Hamlib",
- .version = "20201203.0",
+ .version = "2022312180",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rot_type = ROT_TYPE_OTHER,
commit a3676e0e3b7f20f5a85cbbccb6adc0fdcd4a0f96
Author: Mike Black W9MDB <mdb...@ya...>
Date: Mon Dec 18 09:05:15 2023 -0600
Improve error output in easycom.c to show message
diff --git a/rotators/easycomm/easycomm.c b/rotators/easycomm/easycomm.c
index af3a9ae69..3007d3491 100644
--- a/rotators/easycomm/easycomm.c
+++ b/rotators/easycomm/easycomm.c
@@ -77,8 +77,8 @@ easycomm_transaction(ROT *rot, const char *cmdstr, char *data, size_t data_len)
if (retval < 0)
{
- rig_debug(RIG_DEBUG_TRACE, "%s read_string failed with status %d\n", __func__,
- retval);
+ rig_debug(RIG_DEBUG_TRACE, "%s read_string failed with status %d:%s\n", __func__,
+ retval, strerror(retval));
goto transaction_quit;
}
else
commit 3a6073d4013b63ab7e00e27e69ff6340ff7ca147
Author: Mike Black W9MDB <mdb...@ya...>
Date: Mon Dec 18 08:25:15 2023 -0600
astyle files
diff --git a/src/network.c b/src/network.c
index bb0a1f6eb..3f519348d 100644
--- a/src/network.c
+++ b/src/network.c
@@ -917,8 +917,9 @@ void *multicast_publisher(void *arg)
struct rig_state *rs = &rig->state;
struct rig_spectrum_line spectrum_line;
uint8_t packet_type = MULTICAST_PUBLISHER_DATA_PACKET_TYPE_SPECTRUM;
- multicast_publisher_priv_data *mcast_publisher_priv = (multicast_publisher_priv_data *)
- rs->multicast_publisher_priv_data;
+ multicast_publisher_priv_data *mcast_publisher_priv =
+ (multicast_publisher_priv_data *)
+ rs->multicast_publisher_priv_data;
struct sockaddr_in dest_addr;
int socket_fd = args->socket_fd;
@@ -984,6 +985,7 @@ void *multicast_publisher(void *arg)
strerror(errno));
}
}
+
mcast_publisher_priv->thread_id = 0;
rig_debug(RIG_DEBUG_VERBOSE, "%s(%d): Stopped multicast publisher\n", __FILE__,
@@ -1320,10 +1322,12 @@ int network_multicast_publisher_start(RIG *rig, const char *multicast_addr,
status = network_init();
#ifdef __MINGW32__ // always RIG_OK if not Windows
+
if (status != RIG_OK)
{
RETURNFUNC(status);
}
+
#endif
socket_fd = socket(AF_INET, SOCK_DGRAM, 0);
@@ -1445,7 +1449,7 @@ int network_multicast_publisher_stop(RIG *rig)
if (mcast_publisher_priv->thread_id != 0)
{
- int err = pthread_join(mcast_publisher_priv->thread_id, NULL);
+ int err = pthread_join(mcast_publisher_priv->thread_id, NULL);
if (err)
{
commit 98edf92240ff64c62321886cd7f2c8e60e9dcb5e
Author: Mike Black W9MDB <mdb...@ya...>
Date: Mon Dec 18 07:53:55 2023 -0600
Update rig.h documentation a bit
diff --git a/include/hamlib/rig.h b/include/hamlib/rig.h
index f8a5a72ad..718e55d90 100644
--- a/include/hamlib/rig.h
+++ b/include/hamlib/rig.h
@@ -291,6 +291,8 @@ typedef unsigned int tone_t;
/**
* \brief Port type
+ *
+ * Note: All rigs may use a network:port address ( e.g. tcp/serial adapter)
*/
typedef enum rig_port_e {
RIG_PORT_NONE = 0, /*!< No port */
commit 19bf90bbb48f80a0b1bc24ae9ab14896b1922a9e
Author: Mike Black W9MDB <mdb...@ya...>
Date: Mon Dec 18 07:13:23 2023 -0600
Minor update to rigctl.1 rigctld.1
diff --git a/doc/man1/rigctl.1 b/doc/man1/rigctl.1
index 771051601..db4535e2e 100644
--- a/doc/man1/rigctl.1
+++ b/doc/man1/rigctl.1
@@ -81,8 +81,7 @@ Use
.I device
as the file name of the port connected to the radio.
.IP
-Often a serial port, but could be a USB to serial adapter. Typically
-.IR /dev/ttyS0 ", " /dev/ttyS1 ", " /dev/ttyUSB0 ,
+Typically /dev/ttyS0 ", " /dev/ttyS1 ", " /dev/ttyUSB0 ,
etc. on Linux,
.IR COM1 ", " COM2 ,
etc. on MS Windows. The BSD flavors and Mac OS/X have their own designations.
diff --git a/doc/man1/rigctld.1 b/doc/man1/rigctld.1
index 56b08109b..fa8277a4e 100644
--- a/doc/man1/rigctld.1
+++ b/doc/man1/rigctld.1
@@ -127,8 +127,7 @@ Use
.I device
as the file name of the port connected to the radio.
.IP
-Often a serial port, but could be a USB to serial adapter. Typically
-.IR /dev/ttyS0 ", " /dev/ttyS1 ", " /dev/ttyUSB0 ,
+Typically /dev/ttyS0 ", " /dev/ttyS1 ", " /dev/ttyUSB0 ,
etc. on Linux,
.IR COM1 ", " COM2 ,
etc. on MS Windows. The BSD flavors and Mac OS/X have their own designations.
commit bc6f874675a2c66930457557f3f66086ec465afa
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sun Dec 17 23:13:32 2023 -0600
Fix wireless detection
diff --git a/src/network.c b/src/network.c
index ada95a529..bb0a1f6eb 100644
--- a/src/network.c
+++ b/src/network.c
@@ -1142,17 +1142,17 @@ void *multicast_receiver(void *arg)
dest_addr.sin_family = AF_INET;
#ifdef __MINGW32__
- // Windows cannot bind to multicast group addresses for some unknown reason
+ // Windows wireless cannot bind to multicast group addresses for some unknown reason
if (is_wireless())
{
rig_debug(RIG_DEBUG_VERBOSE,
- "%s: no wireless detect so INADDR_ANY is being used\n", __func__);
+ "%s: wireless detected so localhost is being used\n", __func__);
+ dest_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
}
else
{
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: no wireless detect so INADDR_ANY is being used\n", __func__);
}
#else
commit dbb8f4d5a7d68e90633fe9357d9a42c7eedb0819
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sun Dec 17 22:29:21 2023 -0600
Remove some debug statements
diff --git a/src/network.c b/src/network.c
index cc3d287d3..ada95a529 100644
--- a/src/network.c
+++ b/src/network.c
@@ -1208,9 +1208,7 @@ void *multicast_receiver(void *arg)
efds = rfds;
select_result = select(socket_fd + 1, &rfds, NULL, &efds, &timeout);
- rig_debug(RIG_DEBUG_VERBOSE,"%s(%d)\n", __func__, __LINE__);
- rig_debug(RIG_DEBUG_VERBOSE,"%s(%d)\n", __func__, __LINE__);
if (rs->multicast_receiver_run == 0)
{
rig_debug(RIG_DEBUG_VERBOSE, "%s(%d): pselect signal\n", __func__, __LINE__);
commit 1f38d591539f4b47889e8b8e792c9ccbb5900de2
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sun Dec 17 17:38:28 2023 -0600
Fix Windows rigctl shutdown
https://github.com/Hamlib/Hamlib/issues/1448
diff --git a/src/network.c b/src/network.c
index 867aa04ed..cc3d287d3 100644
--- a/src/network.c
+++ b/src/network.c
@@ -470,6 +470,7 @@ extern void sync_callback(int lock);
//! @cond Doxygen_Suppress
#define MULTICAST_DATA_PIPE_TIMEOUT_MILLIS 1000
+#define MULTICAST_DATA_PIPE_TIMEOUT_USEC 100000
#if defined(WIN32) && defined(HAVE_WINDOWS_H)
@@ -535,8 +536,7 @@ static int multicast_publisher_read_data(multicast_publisher_args
{
ssize_t result;
- result = async_pipe_wait_for_data(mcast_publisher_args->data_pipe,
- MULTICAST_DATA_PIPE_TIMEOUT_MILLIS);
+ result = async_pipe_wait_for_data(mcast_publisher_args->data_pipe, 100);
if (result < 0)
{
@@ -660,8 +660,8 @@ static int multicast_publisher_read_data(const multicast_publisher_args
ssize_t result;
int retval;
- timeout.tv_sec = MULTICAST_DATA_PIPE_TIMEOUT_MILLIS / 1000;
- timeout.tv_usec = 0;
+ timeout.tv_sec = 0;
+ timeout.tv_usec = MULTICAST_DATA_PIPE_TIMEOUT_USEC;
FD_ZERO(&rfds);
FD_SET(fd, &rfds);
@@ -917,6 +917,8 @@ void *multicast_publisher(void *arg)
struct rig_state *rs = &rig->state;
struct rig_spectrum_line spectrum_line;
uint8_t packet_type = MULTICAST_PUBLISHER_DATA_PACKET_TYPE_SPECTRUM;
+ multicast_publisher_priv_data *mcast_publisher_priv = (multicast_publisher_priv_data *)
+ rs->multicast_publisher_priv_data;
struct sockaddr_in dest_addr;
int socket_fd = args->socket_fd;
@@ -982,8 +984,9 @@ void *multicast_publisher(void *arg)
strerror(errno));
}
}
+ mcast_publisher_priv->thread_id = 0;
- rig_debug(RIG_DEBUG_VERBOSE, "%s(%d): Stopping multicast publisher\n", __FILE__,
+ rig_debug(RIG_DEBUG_VERBOSE, "%s(%d): Stopped multicast publisher\n", __FILE__,
__LINE__);
return NULL;
}
@@ -1198,14 +1201,16 @@ void *multicast_receiver(void *arg)
int select_result;
ssize_t result;
- timeout.tv_sec = 1;
- timeout.tv_usec = 0;
+ timeout.tv_sec = 0;
+ timeout.tv_usec = 100000;
FD_ZERO(&rfds);
FD_SET(socket_fd, &rfds);
efds = rfds;
select_result = select(socket_fd + 1, &rfds, NULL, &efds, &timeout);
+ rig_debug(RIG_DEBUG_VERBOSE,"%s(%d)\n", __func__, __LINE__);
+ rig_debug(RIG_DEBUG_VERBOSE,"%s(%d)\n", __func__, __LINE__);
if (rs->multicast_receiver_run == 0)
{
rig_debug(RIG_DEBUG_VERBOSE, "%s(%d): pselect signal\n", __func__, __LINE__);
@@ -1215,7 +1220,7 @@ void *multicast_receiver(void *arg)
if (select_result == 0)
{
// Select timed out
-// rig_debug(RIG_DEBUG_ERR, "%s: select timeout\n", __FILE__);
+ //rig_debug(RIG_DEBUG_ERR, "%s: select timeout\n", __FILE__);
continue;
}
@@ -1268,7 +1273,7 @@ void *multicast_receiver(void *arg)
rs->multicast_receiver_run = 0;
- rig_debug(RIG_DEBUG_VERBOSE, "%s(%d): Stopping multicast receiver\n", __FILE__,
+ rig_debug(RIG_DEBUG_VERBOSE, "%s(%d): Stopped multicast receiver\n", __FILE__,
__LINE__);
return NULL;
}
@@ -1316,10 +1321,12 @@ int network_multicast_publisher_start(RIG *rig, const char *multicast_addr,
status = network_init();
+#ifdef __MINGW32__ // always RIG_OK if not Windows
if (status != RIG_OK)
{
RETURNFUNC(status);
}
+#endif
socket_fd = socket(AF_INET, SOCK_DGRAM, 0);
@@ -1367,7 +1374,6 @@ int network_multicast_publisher_start(RIG *rig, const char *multicast_addr,
}
rs->snapshot_packet_sequence_number = 0;
- rs->multicast_publisher_run = 1;
rs->multicast_publisher_priv_data = calloc(1,
sizeof(multicast_publisher_priv_data));
@@ -1441,7 +1447,7 @@ int network_multicast_publisher_stop(RIG *rig)
if (mcast_publisher_priv->thread_id != 0)
{
- int err = pthread_join(mcast_publisher_priv->thread_id, NULL);
+ int err = pthread_join(mcast_publisher_priv->thread_id, NULL);
if (err)
{
commit 248d5e44a93d773119508e5bf4c363d1e5434342
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sun Dec 17 12:52:34 2023 -0600
Fix cppcheck warning in newcat.c
diff --git a/rigs/yaesu/newcat.c b/rigs/yaesu/newcat.c
index 4585cc06e..3a392bdf4 100644
--- a/rigs/yaesu/newcat.c
+++ b/rigs/yaesu/newcat.c
@@ -7565,7 +7565,7 @@ int newcat_get_trn(RIG *rig, int *trn)
SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "%s%c", command, cat_term);
/* Get Auto Information */
- if (RIG_OK != (err = newcat_get_cmd(rig)))
+ if (RIG_OK != newcat_get_cmd(rig))
{
// if we failed to get AI we turn it off and try again
SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "%s0%c", command, cat_term);
commit 027b7801899e67133c153b3918205bf5464946e1
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sun Dec 17 06:19:08 2023 -0600
Fix FT857 set_vfo cppcheck warning as get_vfo is always RIG_OK
diff --git a/rigs/yaesu/ft857.c b/rigs/yaesu/ft857.c
index 7964cdd93..09dbbe861 100644
--- a/rigs/yaesu/ft857.c
+++ b/rigs/yaesu/ft857.c
@@ -636,14 +636,7 @@ int ft857_set_vfo(RIG *rig, vfo_t vfo)
rig_debug(RIG_DEBUG_VERBOSE, "%s: called \n", __func__);
- int retval = ft857_get_vfo(rig, &curvfo);
-
- if (retval != RIG_OK)
- {
- rig_debug(RIG_DEBUG_ERR, "%s: error get_vfo '%s'\n", __func__,
- rigerror(retval));
- return retval;
- }
+ ft857_get_vfo(rig, &curvfo); // retval is always RIG_OK so ignore it
if (curvfo == vfo)
{
commit ac7c908036533b629ce70269e3d6b992c58ed3f8
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sat Dec 16 17:09:11 2023 -0600
Add DSTAR to flrig.c -- thanks to Philip Rose GM3ZZA
diff --git a/rigs/dummy/flrig.c b/rigs/dummy/flrig.c
index c1b467797..f3c02ea3a 100644
--- a/rigs/dummy/flrig.c
+++ b/rigs/dummy/flrig.c
@@ -50,7 +50,7 @@
RIG_MODE_PKTLSB | RIG_MODE_PKTUSB |\
RIG_MODE_SSB | RIG_MODE_LSB | RIG_MODE_USB |\
RIG_MODE_FM | RIG_MODE_WFM | RIG_MODE_FMN | RIG_MODE_PKTFM |\
- RIG_MODE_C4FM)
+ RIG_MODE_C4FM | RIG_MODE_DSTAR)
#define FLRIG_LEVELS (RIG_LEVEL_AF | RIG_LEVEL_RF | RIG_LEVEL_MICGAIN | RIG_LEVEL_STRENGTH | RIG_LEVEL_RFPOWER_METER | RIG_LEVEL_RFPOWER_METER_WATTS | RIG_LEVEL_RFPOWER | RIG_LEVEL_SWR)
@@ -143,7 +143,7 @@ struct rig_caps flrig_caps =
RIG_MODEL(RIG_MODEL_FLRIG),
.model_name = "FLRig",
.mfg_name = "FLRig",
- .version = "20231213.0",
+ .version = "20231216.0",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
@@ -242,6 +242,7 @@ static struct s_modeMap modeMap[] =
{RIG_MODE_RTTY, NULL},
{RIG_MODE_RTTYR, NULL},
{RIG_MODE_C4FM, NULL},
+ {RIG_MODE_DSTAR, NULL},
{0, NULL}
};
@@ -1092,6 +1093,7 @@ static int flrig_open(RIG *rig)
else if (streq(p, "UCW")) { modeMapAdd(&modes, RIG_MODE_CW, p); }
else if (streq(p, "C4FM")) { modeMapAdd(&modes, RIG_MODE_C4FM, p); }
else if (streq(p, "SPEC")) { modeMapAdd(&modes, RIG_MODE_SPEC, p); }
+ else if (streq(p, "DV")) { modeMapAdd(&modes, RIG_MODE_DSTAR, p); }
else if (streq(p, "DRM")) // we don't support DRM yet (or maybe ever)
{
rig_debug(RIG_DEBUG_VERBOSE, "%s: no mapping for mode %s\n", __func__, p);
commit 50711dcfb8c88729bf50291fd68034b16e485236
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sat Dec 16 15:03:21 2023 -0600
Remove dead code in flex6xxx.c
diff --git a/rigs/kenwood/flex6xxx.c b/rigs/kenwood/flex6xxx.c
index 7e3d3f324..50e21d15b 100644
--- a/rigs/kenwood/flex6xxx.c
+++ b/rigs/kenwood/flex6xxx.c
@@ -847,8 +847,6 @@ int powersdr_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
if (ptt == RIG_PTT_OFF) { val->f = priv->swr; return RIG_OK;}
cmd = "ZZRM8"; // get SWR
- len = 5;
- ans = 8;
retval = kenwood_transaction(rig, cmd, lvlbuf, sizeof(lvlbuf));
if (retval != RIG_OK) { val->f = priv->swr; return RIG_OK;};
commit 11876d7cc4344d70354c28ad3c763c5999aab69a
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sat Dec 16 15:02:01 2023 -0600
Fix ptt shadow in flex6xxx.c
diff --git a/rigs/kenwood/flex6xxx.c b/rigs/kenwood/flex6xxx.c
index a386b6366..7e3d3f324 100644
--- a/rigs/kenwood/flex6xxx.c
+++ b/rigs/kenwood/flex6xxx.c
@@ -841,7 +841,7 @@ int powersdr_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
case RIG_LEVEL_SWR:
{
struct kenwood_priv_caps *priv = kenwood_caps(rig);
- ptt_t ptt = 0;
+ ptt = 0;
rig_get_ptt(rig, RIG_VFO_CURR, &ptt);
if (ptt == RIG_PTT_OFF) { val->f = priv->swr; return RIG_OK;}
@@ -948,7 +948,7 @@ int powersdr_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
case RIG_LEVEL_RFPOWER_METER_WATTS:
{
// if not ptt then no power is going out so return 0W
- ptt_t ptt;
+ ptt = 0;
rig_get_ptt(rig, RIG_VFO_TX, &ptt);
if (!ptt) { val->f = 0; return RIG_OK; }
commit e267c6276495bee71eaf217715874cb56bcb4d6b
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sat Dec 16 11:37:58 2023 -0600
astyle files
diff --git a/amplifiers/gemini/gemini.c b/amplifiers/gemini/gemini.c
index 6f69b0678..df7ad27f7 100644
--- a/amplifiers/gemini/gemini.c
+++ b/amplifiers/gemini/gemini.c
@@ -103,8 +103,9 @@ int gemini_transaction(AMP *amp, const char *cmd, char *response,
if (response) // if response expected get it
{
response[0] = 0;
- int len = read_string(&rs->ampport, (unsigned char *) response, response_len, "\n",
- 1, 0, 1);
+ int len = read_string(&rs->ampport, (unsigned char *) response, response_len,
+ "\n",
+ 1, 0, 1);
if (len < 0)
{
diff --git a/lib/cJSON.c b/lib/cJSON.c
index 524ba4641..d9b70dcd0 100644
--- a/lib/cJSON.c
+++ b/lib/cJSON.c
@@ -85,7 +85,8 @@
#endif
#endif
-typedef struct {
+typedef struct
+{
const unsigned char *json;
size_t position;
} error;
@@ -93,10 +94,10 @@ static error global_error = { NULL, 0 };
CJSON_PUBLIC(const char *) cJSON_GetErrorPtr(void)
{
- return (const char*) (global_error.json + global_error.position);
+ return (const char *)(global_error.json + global_error.position);
}
-CJSON_PUBLIC(char *) cJSON_GetStringValue(const cJSON * const item)
+CJSON_PUBLIC(char *) cJSON_GetStringValue(const cJSON *const item)
{
if (!cJSON_IsString(item))
{
@@ -106,7 +107,7 @@ CJSON_PUBLIC(char *) cJSON_GetStringValue(const cJSON * const item)
return item->valuestring;
}
-CJSON_PUBLIC(double) cJSON_GetNumberValue(const cJSON * const item)
+CJSON_PUBLIC(double) cJSON_GetNumberValue(const cJSON *const item)
{
if (!cJSON_IsNumber(item))
{
@@ -118,19 +119,21 @@ CJSON_PUBLIC(double) cJSON_GetNumberValue(const cJSON * const item)
/* This is a safeguard to prevent copy-pasters from using incompatible C and header files */
#if (CJSON_VERSION_MAJOR != 1) || (CJSON_VERSION_MINOR != 7) || (CJSON_VERSION_PATCH != 15)
- #error cJSON.h and cJSON.c have different versions. Make sure that both have the same.
+#error cJSON.h and cJSON.c have different versions. Make sure that both have the same.
#endif
-CJSON_PUBLIC(const char*) cJSON_Version(void)
+CJSON_PUBLIC(const char *) cJSON_Version(void)
{
static char version[15];
- sprintf(version, "%i.%i.%i", CJSON_VERSION_MAJOR, CJSON_VERSION_MINOR, CJSON_VERSION_PATCH);
+ sprintf(version, "%i.%i.%i", CJSON_VERSION_MAJOR, CJSON_VERSION_MINOR,
+ CJSON_VERSION_PATCH);
return version;
}
/* Case insensitive string comparison, doesn't consider two NULL pointers equal though */
-static int case_insensitive_strcmp(const unsigned char *string1, const unsigned char *string2)
+static int case_insensitive_strcmp(const unsigned char *string1,
+ const unsigned char *string2)
{
if ((string1 == NULL) || (string2 == NULL))
{
@@ -142,7 +145,7 @@ static int case_insensitive_strcmp(const unsigned char *string1, const unsigned
return 0;
}
- for(; tolower(*string1) == tolower(*string2); (void)string1++, string2++)
+ for (; tolower(*string1) == tolower(*string2); (void)string1++, string2++)
{
if (*string1 == '\0')
{
@@ -162,7 +165,7 @@ typedef struct internal_hooks
#if defined(_MSC_VER)
/* work around MSVC error C2322: '...' address of dllimport '...' is not static */
-static void * CJSON_CDECL internal_malloc(size_t size)
+static void *CJSON_CDECL internal_malloc(size_t size)
{
return malloc(size);
}
@@ -170,7 +173,7 @@ static void CJSON_CDECL internal_free(void *pointer)
{
free(pointer);
}
-static void * CJSON_CDECL internal_realloc(void *pointer, size_t size)
+static void *CJSON_CDECL internal_realloc(void *pointer, size_t size)
{
return realloc(pointer, size);
}
@@ -185,7 +188,8 @@ static void * CJSON_CDECL internal_realloc(void *pointer, size_t size)
static internal_hooks global_hooks = { internal_malloc, internal_free, internal_realloc };
-static unsigned char* cJSON_strdup(const unsigned char* string, const internal_hooks * const hooks)
+static unsigned char *cJSON_strdup(const unsigned char *string,
+ const internal_hooks *const hooks)
{
size_t length = 0;
unsigned char *copy = NULL;
@@ -195,18 +199,20 @@ static unsigned char* cJSON_strdup(const unsigned char* string, const internal_h
return NULL;
}
- length = strlen((const char*)string) + sizeof("");
- copy = (unsigned char*)hooks->allocate(length);
+ length = strlen((const char *)string) + sizeof("");
+ copy = (unsigned char *)hooks->allocate(length);
+
if (copy == NULL)
{
return NULL;
}
+
memcpy(copy, string, length);
return copy;
}
-CJSON_PUBLIC(void) cJSON_InitHooks(cJSON_Hooks* hooks)
+CJSON_PUBLIC(void) cJSON_InitHooks(cJSON_Hooks *hooks)
{
if (hooks == NULL)
{
@@ -218,12 +224,14 @@ CJSON_PUBLIC(void) cJSON_InitHooks(cJSON_Hooks* hooks)
}
global_hooks.allocate = malloc;
+
if (hooks->malloc_fn != NULL)
{
global_hooks.allocate = hooks->malloc_fn;
}
global_hooks.deallocate = free;
+
if (hooks->free_fn != NULL)
{
global_hooks.deallocate = hooks->free_fn;
@@ -231,6 +239,7 @@ CJSON_PUBLIC(void) cJSON_InitHooks(cJSON_Hooks* hooks)
/* use realloc only if both free and malloc are used */
global_hooks.reallocate = NULL;
+
if ((global_hooks.allocate == malloc) && (global_hooks.deallocate == free))
{
global_hooks.reallocate = realloc;
@@ -238,9 +247,10 @@ CJSON_PUBLIC(void) cJSON_InitHooks(cJSON_Hooks* hooks)
}
/* Internal constructor. */
-static cJSON *cJSON_New_Item(const internal_hooks * const hooks)
+static cJSON *cJSON_New_Item(const internal_hooks *const hooks)
{
- cJSON* node = (cJSON*)hooks->allocate(sizeof(cJSON));
+ cJSON *node = (cJSON *)hooks->allocate(sizeof(cJSON));
+
if (node)
{
memset(node, '\0', sizeof(cJSON));
@@ -253,21 +263,26 @@ static cJSON *cJSON_New_Item(const internal_hooks * const hooks)
CJSON_PUBLIC(void) cJSON_Delete(cJSON *item)
{
cJSON *next = NULL;
+
while (item != NULL)
{
next = item->next;
+
if (!(item->type & cJSON_IsReference) && (item->child != NULL))
{
cJSON_Delete(item->child);
}
+
if (!(item->type & cJSON_IsReference) && (item->valuestring != NULL))
{
global_hooks.deallocate(item->valuestring);
}
+
if (!(item->type & cJSON_StringIsConst) && (item->string != NULL))
{
global_hooks.deallocate(item->string);
}
+
global_hooks.deallocate(item);
item = next;
}
@@ -302,7 +317,8 @@ typedef struct
#define buffer_at_offset(buffer) ((buffer)->content + (buffer)->offset)
/* Parse the input text to generate a number, and populate the result into item. */
-static cJSON_bool parse_number(cJSON * const item, parse_buffer * const input_buffer)
+static cJSON_bool parse_number(cJSON *const item,
+ parse_buffer *const input_buffer)
{
double number = 0;
unsigned char *after_end = NULL;
@@ -318,39 +334,42 @@ static cJSON_bool parse_number(cJSON * const item, parse_buffer * const input_bu
/* copy the number into a temporary buffer and replace '.' with the decimal point
* of the current locale (for strtod)
* This also takes care of '\0' not necessarily being available for marking the end of the input */
- for (i = 0; (i < (sizeof(number_c_string) - 1)) && can_access_at_index(input_buffer, i); i++)
+ for (i = 0; (i < (sizeof(number_c_string) - 1))
+ && can_access_at_index(input_buffer, i); i++)
{
switch (buffer_at_offset(input_buffer)[i])
{
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- case '+':
- case '-':
- case 'e':
- case 'E':
- number_c_string[i] = buffer_at_offset(input_buffer)[i];
- break;
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ case '+':
+ case '-':
+ case 'e':
+ case 'E':
+ number_c_string[i] = buffer_at_offset(input_buffer)[i];
+ break;
- case '.':
- number_c_string[i] = decimal_point;
- break;
+ case '.':
+ number_c_string[i] = decimal_point;
+ break;
- default:
- goto loop_end;
+ default:
+ goto loop_end;
}
}
+
loop_end:
number_c_string[i] = '\0';
- number = strtod((const char*)number_c_string, (char**)&after_end);
+ number = strtod((const char *)number_c_string, (char **)&after_end);
+
if (number_c_string == after_end)
{
return false; /* parse_error */
@@ -397,28 +416,35 @@ CJSON_PUBLIC(double) cJSON_SetNumberHelper(cJSON *object, double number)
return object->valuedouble = number;
}
-CJSON_PUBLIC(char*) cJSON_SetValuestring(cJSON *object, const char *valuestring)
+CJSON_PUBLIC(char *) cJSON_SetValuestring(cJSON *object,
+ const char *valuestring)
{
char *copy = NULL;
+
/* if object's type is not cJSON_String or is cJSON_IsReference, it should not set valuestring */
if (!(object->type & cJSON_String) || (object->type & cJSON_IsReference))
{
return NULL;
}
+
if (strlen(valuestring) <= strlen(object->valuestring))
{
strcpy(object->valuestring, valuestring);
return object->valuestring;
}
- copy = (char*) cJSON_strdup((const unsigned char*)valuestring, &global_hooks);
+
+ copy = (char *) cJSON_strdup((const unsigned char *)valuestring, &global_hooks);
+
if (copy == NULL)
{
return NULL;
}
+
if (object->valuestring != NULL)
{
cJSON_free(object->valuestring);
}
+
object->valuestring = copy;
return copy;
@@ -436,7 +462,7 @@ typedef struct
} printbuffer;
/* realloc printbuffer if necessary to have at least "needed" bytes more */
-static unsigned char* ensure(printbuffer * const p, size_t needed)
+static unsigned char *ensure(printbuffer *const p, size_t needed)
{
unsigned char *newbuffer = NULL;
size_t newsize = 0;
@@ -459,12 +485,14 @@ static unsigned char* ensure(printbuffer * const p, size_t needed)
}
needed += p->offset + 1;
+
if (needed <= p->length)
{
return p->buffer + p->offset;
}
- if (p->noalloc) {
+ if (p->noalloc)
+ {
return NULL;
}
@@ -489,7 +517,8 @@ static unsigned char* ensure(printbuffer * const p, size_t needed)
if (p->hooks.reallocate != NULL)
{
/* reallocate with realloc if available */
- newbuffer = (unsigned char*)p->hooks.reallocate(p->buffer, newsize);
+ newbuffer = (unsigned char *)p->hooks.reallocate(p->buffer, newsize);
+
if (newbuffer == NULL)
{
p->hooks.deallocate(p->buffer);
@@ -502,7 +531,8 @@ static unsigned char* ensure(printbuffer * const p, size_t needed)
else
{
/* otherwise reallocate manually */
- newbuffer = (unsigned char*)p->hooks.allocate(newsize);
+ newbuffer = (unsigned char *)p->hooks.allocate(newsize);
+
if (!newbuffer)
{
p->hooks.deallocate(p->buffer);
@@ -515,6 +545,7 @@ static unsigned char* ensure(printbuffer * const p, size_t needed)
memcpy(newbuffer, p->buffer, p->offset + 1);
p->hooks.deallocate(p->buffer);
}
+
p->length = newsize;
p->buffer = newbuffer;
@@ -522,16 +553,18 @@ static unsigned char* ensure(printbuffer * const p, size_t needed)
}
/* calculate the new length of the string in a printbuffer and update the offset */
-static void update_offset(printbuffer * const buffer)
+static void update_offset(printbuffer *const buffer)
{
const unsigned char *buffer_pointer = NULL;
+
if ((buffer == NULL) || (buffer->buffer == NULL))
{
return;
}
+
buffer_pointer = buffer->buffer + buffer->offset;
- buffer->offset += strlen((const char*)buffer_pointer);
+ buffer->offset += strlen((const char *)buffer_pointer);
}
/* securely comparison of floating-point variables */
@@ -542,7 +575,8 @@ static cJSON_bool compare_double(double a, double b)
}
/* Render the number nicely from the given item into a string. */
-static cJSON_bool print_number(const cJSON * const item, printbuffer * const output_buffer)
+static cJSON_bool print_number(const cJSON *const item,
+ printbuffer *const output_buffer)
{
unsigned char *output_pointer = NULL;
double d = item->valuedouble;
@@ -560,22 +594,23 @@ static cJSON_bool print_number(const cJSON * const item, printbuffer * const out
/* This checks for NaN and Infinity */
if (isnan(d) || isinf(d))
{
- length = sprintf((char*)number_buffer, "null");
+ length = sprintf((char *)number_buffer, "null");
+ }
+ else if (d == (double)item->valueint)
+ {
+ length = sprintf((char *)number_buffer, "%d", item->valueint);
}
- else if(d == (double)item->valueint)
- {
- length = sprintf((char*)number_buffer, "%d", item->valueint);
- }
else
{
/* Try 15 decimal places of precision to avoid nonsignificant nonzero digits */
- length = sprintf((char*)number_buffer, "%1.15g", d);
+ length = sprintf((char *)number_buffer, "%1.15g", d);
/* Check whether the original double can be recovered */
- if ((sscanf((char*)number_buffer, "%lg", &test) != 1) || !compare_double((double)test, d))
+ if ((sscanf((char *)number_buffer, "%lg", &test) != 1)
+ || !compare_double((double)test, d))
{
/* If not, print with 17 decimal places of precision */
- length = sprintf((char*)number_buffer, "%1.17g", d);
+ length = sprintf((char *)number_buffer, "%1.17g", d);
}
}
@@ -587,6 +622,7 @@ static cJSON_bool print_number(const cJSON * const item, printbuffer * const out
/* reserve appropriate space in the output */
output_pointer = ensure(output_buffer, (size_t)length + sizeof(""));
+
if (output_pointer == NULL)
{
return false;
@@ -604,6 +640,7 @@ static cJSON_bool print_number(const cJSON * const item, printbuffer * const out
output_pointer[i] = number_buffer[i];
}
+
output_pointer[i] = '\0';
output_buffer->offset += (size_t)length;
@@ -612,7 +649,7 @@ static cJSON_bool print_number(const cJSON * const item, printbuffer * const out
}
/* parse 4 digit hexadecimal number */
-static unsigned parse_hex4(const unsigned char * const input)
+static unsigned parse_hex4(const unsigned char *const input)
{
unsigned int h = 0;
size_t i = 0;
@@ -649,7 +686,9 @@ static unsigned parse_hex4(const unsigned char * const input)
/* converts a UTF-16 literal to UTF-8
* A literal can be one or two sequences of the form \uXXXX */
-static unsigned char utf16_literal_to_utf8(const unsigned char * const input_pointer, const unsigned char * const input_end, unsigned char **output_pointer)
+static unsigned char utf16_literal_to_utf8(const unsigned char *const
+ input_pointer, const unsigned char *const input_end,
+ unsigned char **output_pointer)
{
long unsigned int codepoint = 0;
unsigned int first_code = 0;
@@ -695,6 +734,7 @@ static unsigned char utf16_literal_to_utf8(const unsigned char * const input_poi
/* get the second utf16 sequence */
second_code = parse_hex4(second_sequence + 2);
+
/* check that the code is valid */
if ((second_code < 0xDC00) || (second_code > 0xDFFF))
{
@@ -745,12 +785,14 @@ static unsigned char utf16_literal_to_utf8(const unsigned char * const input_poi
}
/* encode as utf8 */
- for (utf8_position = (unsigned char)(utf8_length - 1); utf8_position > 0; utf8_position--)
+ for (utf8_position = (unsigned char)(utf8_length - 1); utf8_position > 0;
+ utf8_position--)
{
/* 10xxxxxx */
(*output_pointer)[utf8_position] = (unsigned char)((codepoint | 0x80) & 0xBF);
codepoint >>= 6;
}
+
/* encode first byte */
if (utf8_length > 1)
{
@@ -770,7 +812,8 @@ fail:
}
/* Parse the input text into an unescaped cinput, and populate item. */
-static cJSON_bool parse_string(cJSON * const item, parse_buffer * const input_buffer)
+static cJSON_bool parse_string(cJSON *const item,
+ parse_buffer *const input_buffer)
{
const unsigned char *input_pointer = buffer_at_offset(input_buffer) + 1;
const unsigned char *input_end = buffer_at_offset(input_buffer) + 1;
@@ -787,7 +830,9 @@ static cJSON_bool parse_string(cJSON * const item, parse_buffer * const input_bu
/* calculate approximate size of the output (overestimate) */
size_t allocation_length = 0;
size_t skipped_bytes = 0;
- while (((size_t)(input_end - input_buffer->content) < input_buffer->length) && (*input_end != '\"'))
+
+ while (((size_t)(input_end - input_buffer->content) < input_buffer->length)
+ && (*input_end != '\"'))
{
/* is escape sequence */
if (input_end[0] == '\\')
@@ -797,19 +842,26 @@ static cJSON_bool parse_string(cJSON * const item, parse_buffer * const input_bu
/* prevent buffer overflow when last input character is a backslash */
goto fail;
}
+
skipped_bytes++;
input_end++;
}
+
input_end++;
}
- if (((size_t)(input_end - input_buffer->content) >= input_buffer->length) || (*input_end != '\"'))
+
+ if (((size_t)(input_end - input_buffer->content) >= input_buffer->length)
+ || (*input_end != '\"'))
{
goto fail; /* string ended unexpectedly */
}
/* This is at most how much we need for the output */
- allocation_length = (size_t) (input_end - buffer_at_offset(input_buffer)) - skipped_bytes;
- output = (unsigned char*)input_buffer->hooks.allocate(allocation_length + sizeof(""));
+ allocation_length = (size_t)(input_end - buffer_at_offset(
+ input_buffer)) - skipped_bytes;
+ output = (unsigned char *)input_buffer->hooks.allocate(allocation_length +
+ sizeof(""));
+
if (output == NULL)
{
goto fail; /* allocation failure */
@@ -817,6 +869,7 @@ static cJSON_bool parse_string(cJSON * const item, parse_buffer * const input_bu
}
output_pointer = output;
+
/* loop through the string literal */
while (input_pointer < input_end)
{
@@ -828,6 +881,7 @@ static cJSON_bool parse_string(cJSON * const item, parse_buffer * const input_bu
else
{
unsigned char sequence_length = 2;
+
if ((input_end - input_pointer) < 1)
{
goto fail;
@@ -835,40 +889,49 @@ static cJSON_bool parse_string(cJSON * const item, parse_buffer * const input_bu
switch (input_pointer[1])
{
- case 'b':
- *output_pointer++ = '\b';
- break;
- case 'f':
- *output_pointer++ = '\f';
- break;
- case 'n':
- *output_pointer++ = '\n';
- break;
- case 'r':
- *output_pointer++ = '\r';
- break;
- case 't':
- *output_pointer++ = '\t';
- break;
- case '\"':
- case '\\':
- case '/':
- *output_pointer++ = input_pointer[1];
- break;
-
- /* UTF-16 literal */
- case 'u':
- sequence_length = utf16_literal_to_utf8(input_pointer, input_end, &output_pointer);
- if (sequence_length == 0)
- {
- /* failed to convert UTF16-literal to UTF-8 */
- goto fail;
- }
- break;
-
- default:
+ case 'b':
+ *output_pointer++ = '\b';
+ break;
+
+ case 'f':
+ *output_pointer++ = '\f';
+ break;
+
+ case 'n':
+ *output_pointer++ = '\n';
+ break;
+
+ case 'r':
+ *output_pointer++ = '\r';
+ break;
+
+ case 't':
+ *output_pointer++ = '\t';
+ break;
+
+ case '\"':
+ case '\\':
+ case '/':
+ *output_pointer++ = input_pointer[1];
+ break;
+
+ /* UTF-16 literal */
+ case 'u':
+ sequence_length = utf16_literal_to_utf8(input_pointer, input_end,
+ &output_pointer);
+
+ if (sequence_length == 0)
+ {
+ /* failed to convert UTF16-literal to UTF-8 */
goto fail;
+ }
+
+ break;
+
+ default:
+ goto fail;
}
+
input_pointer += sequence_length;
}
}
@@ -877,14 +940,15 @@ static cJSON_bool parse_string(cJSON * const item, parse_buffer * const input_bu
*output_pointer = '\0';
item->type = cJSON_String;
- item->valuestring = (char*)output;
+ item->valuestring = (char *)output;
- input_buffer->offset = (size_t) (input_end - input_buffer->content);
+ input_buffer->offset = (size_t)(input_end - input_buffer->content);
input_buffer->offset++;
return true;
fail:
+
if (output != NULL)
{
input_buffer->hooks.deallocate(output);
@@ -899,7 +963,8 @@ fail:
}
/* Render the cstring provided to an escaped version that can be printed. */
-static cJSON_bool print_string_ptr(const unsigned char * const input, printbuffer * const output_buffer)
+static cJSON_bool print_string_ptr(const unsigned char *const input,
+ printbuffer *const output_buffer)
{
const unsigned char *input_pointer = NULL;
unsigned char *output = NULL;
@@ -917,11 +982,13 @@ static cJSON_bool print_string_ptr(const unsigned char * const input, printbuffe
if (input == NULL)
{
output = ensure(output_buffer, sizeof("\"\""));
+
if (output == NULL)
{
return false;
}
- strcpy((char*)output, "\"\"");
+
+ strcpy((char *)output, "\"\"");
return true;
}
@@ -931,28 +998,32 @@ static cJSON_bool print_string_ptr(const unsigned char * const input, printbuffe
{
switch (*input_pointer)
{
- case '\"':
- case '\\':
- case '\b':
- case '\f':
- case '\n':
- case '\r':
- case '\t':
- /* one character escape sequence */
- escape_characters++;
- break;
- default:
- if (*input_pointer < 32)
- {
- /* UTF-16 escape sequence uXXXX */
- escape_characters += 5;
- }
- break;
+ case '\"':
+ case '\\':
+ case '\b':
+ case '\f':
+ case '\n':
+ case '\r':
+ case '\t':
+ /* one character escape sequence */
+ escape_characters++;
+ break;
+
+ default:
+ if (*input_pointer < 32)
+ {
+ /* UTF-16 escape sequence uXXXX */
+ escape_characters += 5;
+ }
+
+ break;
}
}
+
output_length = (size_t)(input_pointer - input) + escape_characters;
output = ensure(output_buffer, output_length + sizeof("\"\""));
+
if (output == NULL)
{
return false;
@@ -971,10 +1042,13 @@ static cJSON_bool print_string_ptr(const unsigned char * const input, printbuffe
output[0] = '\"';
output_pointer = output + 1;
+
/* copy the string */
- for (input_pointer = input; *input_pointer != '\0'; (void)input_pointer++, output_pointer++)
+ for (input_pointer = input; *input_pointer != '\0';
+ (void)input_pointer++, output_pointer++)
{
- if ((*input_pointer > 31) && (*input_pointer != '\"') && (*input_pointer != '\\'))
+ if ((*input_pointer > 31) && (*input_pointer != '\"')
+ && (*input_pointer != '\\'))
{
/* normal character, copy */
*output_pointer = *input_pointer;
@@ -983,37 +1057,46 @@ static cJSON_bool print_string_ptr(const unsigned char * const input, printbuffe
{
/* character needs to be escaped */
*output_pointer++ = '\\';
+
switch (*input_pointer)
{
- case '\\':
- *output_pointer = '\\';
- break;
- case '\"':
- *output_pointer = '\"';
- break;
- case '\b':
- *output_pointer = 'b';
- break;
- case '\f':
- *output_pointer = 'f';
- break;
- case '\n':
- *output_pointer = 'n';
- break;
- case '\r':
- *output_pointer = 'r';
- break;
- case '\t':
- *output_pointer = 't';
- break;
- default:
- /* escape and print as unicode codepoint */
- sprintf((char*)output_pointer, "u%04x", *input_pointer);
- output_pointer += 4;
- break;
+ case '\\':
+ *output_pointer = '\\';
+ break;
+
+ case '\"':
+ *output_pointer = '\"';
+ break;
+
+ case '\b':
+ *output_pointer = 'b';
+ break;
+
+ case '\f':
+ *output_pointer = 'f';
+ break;
+
+ case '\n':
+ *output_pointer = 'n';
+ break;
+
+ case '\r':
+ *output_pointer = 'r';
+ break;
+
+ case '\t':
+ *output_pointer = 't';
+ break;
+
+ default:
+ /* escape and print as unicode codepoint */
+ sprintf((char *)output_pointer, "u%04x", *input_pointer);
+ output_pointer += 4;
+ break;
}
}
}
+
output[output_length + 1] = '\"';
output[output_length + 2] = '\0';
@@ -1021,21 +1104,27 @@ static cJSON_bool print_string_ptr(const unsigned char * const input, printbuffe
}
/* Invoke print_string_ptr (which is useful) on an item. */
-static cJSON_bool print_string(const cJSON * const item, printbuffer * const p)
+static cJSON_bool print_string(const cJSON *const item, printbuffer *const p)
{
- return print_string_ptr((unsigned char*)item->valuestring, p);
+ return print_string_ptr((unsigned char *)item->valuestring, p);
}
/* Predeclare these prototypes. */
-static cJSON_bool parse_value(cJSON * const item, parse_buffer * const input_buffer);
-static cJSON_bool print_value(const cJSON * const item, printbuffer * const output_buffer);
-static cJSON_bool parse_array(cJSON * const item, parse_buffer * const input_buffer);
-static cJSON_bool print_array(const cJSON * const item, printbuffer * const output_buffer);
-static cJSON_bool parse_object(cJSON * const item, parse_buffer * const input_buffer);
-static cJSON_bool print_object(const cJSON * const item, printbuffer * const output_buffer);
+static cJSON_bool parse_value(cJSON *const item,
+ parse_buffer *const input_buffer);
+static cJSON_bool print_value(const cJSON *const item,
+ printbuffer *const output_buffer);
+static cJSON_bool parse_array(cJSON *const item,
+ parse_buffer *const input_buffer);
+static cJSON_bool print_array(const cJSON *const item,
+ printbuffer *const output_buffer);
+static cJSON_bool parse_object(cJSON *const item,
+ parse_buffer *const input_buffer);
+static cJSON_bool print_object(const cJSON *const item,
+ printbuffer *const output_buffer);
/* Utility to jump whitespace and cr/lf */
-static parse_buffer *buffer_skip_whitespace(parse_buffer * const buffer)
+static parse_buffer *buffer_skip_whitespace(parse_buffer *const buffer)
{
if ((buffer == NULL) || (buffer->content == NULL))
{
@@ -1049,7 +1138,7 @@ static parse_buffer *buffer_skip_whitespace(parse_buffer * const buffer)
while (can_access_at_index(buffer, 0) && (buffer_at_offset(buffer)[0] <= 32))
{
- buffer->offset++;
+ buffer->offset++;
}
if (buffer->offset == buffer->length)
@@ -1061,14 +1150,15 @@ static parse_buffer *buffer_skip_whitespace(parse_buffer * const buffer)
}
/* skip the UTF-8 BOM (byte order mark) if it is at the beginning of a buffer */
-static parse_buffer *skip_utf8_bom(parse_buffer * const buffer)
+static parse_buffer *skip_utf8_bom(parse_buffer *const buffer)
{
if ((buffer == NULL) || (buffer->content == NULL) || (buffer->offset != 0))
{
return NULL;
}
- if (can_access_at_index(buffer, 4) && (strncmp((const char*)buffer_at_offset(buffer), "\xEF\xBB\xBF", 3) == 0))
+ if (can_access_at_index(buffer, 4)
+ && (strncmp((const char *)buffer_at_offset(buffer), "\xEF\xBB\xBF", 3) == 0))
{
buffer->offset += 3;
}
@@ -1076,7 +1166,8 @@ static parse_buffer *skip_utf8_bom(parse_buffer * const buffer)
return buffer;
}
-CJSON_PUBLIC(cJSON *) cJSON_ParseWithOpts(const char *value, const char **return_parse_end, cJSON_bool require_null_terminated)
+CJSON_PUBLIC(cJSON *) cJSON_ParseWithOpts(const char *value,
+ const char **return_parse_end, cJSON_bool require_null_terminated)
{
size_t buffer_length;
@@ -1088,11 +1179,14 @@ CJSON_PUBLIC(cJSON *) cJSON_ParseWithOpts(const char *value, const char **return
/* Adding null character size due to require_null_terminated. */
buffer_length = strlen(value) + sizeof("");
- return cJSON_ParseWithLengthOpts(value, buffer_length, return_parse_end, require_null_terminated);
+ return cJSON_ParseWithLengthOpts(value, buffer_length, return_parse_end,
+ require_null_terminated);
}
/* Parse an object - create a new root, and populate. */
-CJSON_PUBLIC(cJSON *) cJSON_ParseWithLengthOpts(const char *value, size_t buffer_length, const char **return_parse_end, cJSON_bool require_null_terminated)
+CJSON_PUBLIC(cJSON *) cJSON_ParseWithLengthOpts(const char *value,
+ size_t buffer_length, const char **return_parse_end,
+ cJSON_bool require_null_terminated)
{
parse_buffer buffer = { 0, 0, 0, 0, { 0, 0, 0 } };
cJSON *item = NULL;
@@ -1106,12 +1200,13 @@ CJSON_PUBLIC(cJSON *) cJSON_ParseWithLengthOpts(const char *value, size_t buffer
goto fail;
}
- buffer.content = (const unsigned char*)value;
+ buffer.content = (const unsigned char *)value;
buffer.length = buffer_length;
buffer.offset = 0;
buffer.hooks = global_hooks;
item = cJSON_New_Item(&global_hooks);
+
if (item == NULL) /* memory fail */
{
goto fail;
@@ -1127,19 +1222,22 @@ CJSON_PUBLIC(cJSON *) cJSON_ParseWithLengthOpts(const char *value, size_t buffer
if (require_null_terminated)
{
buffer_skip_whitespace(&buffer);
+
if ((buffer.offset >= buffer.length) || buffer_at_offset(&buffer)[0] != '\0')
{
goto fail;
}
}
+
if (return_parse_end)
{
- *return_parse_end = (const char*)buffer_at_offset(&buffer);
+ *return_parse_end = (const char *)buffer_at_offset(&buffer);
}
return item;
fail:
+
if (item != NULL)
{
cJSON_Delete(item);
@@ -1148,7 +1246,7 @@ fail:
if (value != NULL)
{
error local_error;
- local_error.json = (const unsigned char*)value;
+ local_error.json = (const unsigned char *)value;
local_error.position = 0;
if (buffer.offset < buffer.length)
@@ -1162,7 +1260,7 @@ fail:
if (return_parse_end != NULL)
{
- *return_parse_end = (const char*)local_error.json + local_error.position;
+ *return_parse_end = (const char *)local_error.json + local_error.position;
}
global_error = local_error;
@@ -1177,14 +1275,16 @@ CJSON_PUBLIC(cJSON *) cJSON_Parse(const char *value)
return cJSON_ParseWithOpts(value, 0, 0);
}
-CJSON_PUBLIC(cJSON *) cJSON_ParseWithLength(const char *value, size_t buffer_length)
+CJSON_PUBLIC(cJSON *) cJSON_ParseWithLength(const char *value,
+ size_t buffer_length)
{
return cJSON_ParseWithLengthOpts(value, buffer_length, 0, 0);
}
#define cjson_min(a, b) (((a) < (b)) ? (a) : (b))
-static unsigned char *print(const cJSON * const item, cJSON_bool format, const internal_hooks * const hooks)
+static unsigned char *print(const cJSON *const item, cJSON_bool format,
+ const internal_hooks *const hooks)
{
static const size_t default_buffer_size = 256;
printbuffer buffer[1];
@@ -1193,10 +1293,11 @@ static unsigned char *print(const cJSON * const item, cJSON_bool format, const i
memset(buffer, 0, sizeof(buffer));
/* create buffer */
- buffer->buffer = (unsigned char*) hooks->allocate(default_buffer_size);
+ buffer->buffer = (unsigned char *) hooks->allocate(default_buffer_size);
buffer->length = default_buffer_size;
buffer->format = format;
buffer->hooks = *hooks;
+
if (buffer->buffer == NULL)
{
goto fail;
@@ -1207,24 +1308,31 @@ static unsigned char *print(const cJSON * const item, cJSON_bool format, const i
{
goto fail;
}
+
update_offset(buffer);
/* check if reallocate is available */
if (hooks->reallocate != NULL)
{
- printed = (unsigned char*) hooks->reallocate(buffer->buffer, buffer->offset + 1);
- if (printed == NULL) {
+ printed = (unsigned char *) hooks->reallocate(buffer->buffer,
+ buffer->offset + 1);
+
+ if (printed == NULL)
+ {
goto fail;
}
+
buffer->buffer = NULL;
}
else /* otherwise copy the JSON over to a new buffer */
{
- printed = (unsigned char*) hooks->allocate(buffer->offset + 1);
+ printed = (unsigned char *) hooks->allocate(buffer->offset + 1);
+
if (printed == NULL)
{
goto fail;
}
+
memcpy(printed, buffer->buffer, cjson_min(buffer->length, buffer->offset + 1));
printed[buffer->offset] = '\0'; /* just to be sure */
@@ -1235,6 +1343,7 @@ static unsigned char *print(const cJSON * const item, cJSON_bool format, const i
return printed;
fail:
+
if (buffer->buffer != NULL)
{
hooks->deallocate(buffer->buffer);
@@ -1251,15 +1360,16 @@ fail:
/* Render a cJSON item/entity/structure to text. */
CJSON_PUBLIC(char *) cJSON_Print(const cJSON *item)
{
- return (char*)print(item, true, &global_hooks);
+ return (char *)print(item, true, &global_hooks);
}
CJSON_PUBLIC(char *) cJSON_PrintUnformatted(const cJSON *item)
{
- return (char*)print(item, false, &global_hooks);
+ return (char *)print(item, false, &global_hooks);
}
-CJSON_PUBLIC(char *) cJSON_PrintBuffered(const cJSON *item, int prebuffer, cJSON_bool fmt)
+CJSON_PUBLIC(char *) cJSON_PrintBuffered(const cJSON *item, int prebuffer,
+ cJSON_bool fmt)
{
printbuffer p = { 0, 0, 0, 0, 0, 0, { 0, 0, 0 } };
@@ -1268,7 +1378,8 @@ CJSON_PUBLIC(char *) cJSON_PrintBuffered(const cJSON *item, int prebuffer, cJSON
return NULL;
}
- p.buffer = (unsigned char*)global_hooks.allocate((size_t)prebuffer);
+ p.buffer = (unsigned char *)global_hooks.allocate((size_t)prebuffer);
+
if (!p.buffer)
{
return NULL;
@@ -1286,10 +1397,11 @@ CJSON_PUBLIC(char *) cJSON_PrintBuffered(const cJSON *item, int prebuffer, cJSON
return NULL;
}
- return (char*)p.buffer;
+ return (char *)p.buffer;
}
-CJSON_PUBLIC(cJSON_bool) cJSON_PrintPreallocated(cJSON *item, char *buffer, const int length, const cJSON_bool format)
+CJSON_PUBLIC(cJSON_bool) cJSON_PrintPreallocated(cJSON *item, char *buffer,
+ const int length, const cJSON_bool format)
{
printbuffer p = { 0, 0, 0, 0, 0, 0, { 0, 0, 0 } };
@@ -1298,7 +1410,7 @@ CJSON_PUBLIC(cJSON_bool) cJSON_PrintPreallocated(cJSON *item, char *buffer, cons
return false;
}
- p.buffer = (unsigned char*)buffer;
+ p.buffer = (unsigned char *)buffer;
p.length = (size_t)length;
p.offset = 0;
p.noalloc = true;
@@ -1309,7 +1421,8 @@ CJSON_PUBLIC(cJSON_bool) cJSON_PrintPreallocated(cJSON *item, char *buffer, cons
}
/* Parser core - when encountering text, process appropriately. */
-static cJSON_bool parse_value(cJSON * const item, parse_buffer * const input_buffer)
+static cJSON_bool parse_value(cJSON *const item,
+ parse_buffer *const input_buffer)
{
if ((input_buffer == NULL) || (input_buffer->content == NULL))
{
@@ -1318,44 +1431,59 @@ static cJSON_bool parse_value(cJSON * const item, parse_buffer * const input_buf
/* parse the different types of values */
/* null */
- if (can_read(input_buffer, 4) && (strncmp((const char*)buffer_at_offset(input_buffer), "null", 4) == 0))
+ if (can_read(input_buffer, 4)
+ && (strncmp((const char *)buffer_at_offset(input_buffer), "null", 4) == 0))
{
item->type = cJSON_NULL;
input_buffer->offset += 4;
return true;
}
+
/* false */
- if (can_read(input_buffer, 5) && (strncmp((const char*)buffer_at_offset(input_buffer), "false", 5) == 0))
+ if (can_read(input_buffer, 5)
+ ...
[truncated message content] |
|
From: n0nb <n0...@us...> - 2023-12-08 18:56: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 ae69772d2a5dd8adad0c8de51b6c44db5f060e35 (commit)
via f6eed234941f4985b992b57a2a2fd3c84aa1e403 (commit)
via cf973c9b0aad24e764c03b8df48cbfbca4040e78 (commit)
via 3729f658ecd6b9697233a6f741eb2beebed6f5f6 (commit)
via 768ca6105d3b0cf3fa18c5988f1c418c7594a1c6 (commit)
via f0e97a9e0e0c9d13479972996836df410beda484 (commit)
via 4e1aa90499126198ff10069e7b1a1456c0d55889 (commit)
via f4d40e0d79193a9b1925b9bac0ed7e9c9a5d2882 (commit)
via e3f1816e8a422729b9ca4750d4690a2017b3c493 (commit)
via 37fb4eafdd33cdb88beda3d20e94a6ffcf12d781 (commit)
via ed630b28d196bcf723a52199c71b9b9f45f75f08 (commit)
via f255f6f8d8412c423a2fffb4864e11200f45491f (commit)
via 88c3d9427b5683f1d183cf75bceaefd346500847 (commit)
via cc49669b494e736726b496fbec8e85b67904caf7 (commit)
via 8940d915220b97b5ed4f25bfc9e606c89df48ac8 (commit)
via e40981e198163d0acf7d9ab98bc073ee823b97fc (commit)
via a5ad218bba7879b7e57c4b65043b1ead08ad3180 (commit)
via 7973db52de5d149e7a416aabd19c093659e92629 (commit)
via 001dd01a10397ec63f1ddcce05c9bddd843a9cbd (commit)
via 756fad1c723cd77d2aa0e212777b29b7f352ed46 (commit)
via 07f57cfc18349100280d26c3466d6b284512b561 (commit)
via ed941939359da9f8734dbdf4a21a9b01622a1a6e (commit)
via a910b16e8f961506d2408ff62632f8afe797f323 (commit)
via 4f019e622e3c3957e94d5f42de8be93cdc55c6f4 (commit)
via c0457a0d7b8f894baf4f8f2e446f36922cb9c1a1 (commit)
via 09ab2819b3b66936e7a7d73d832660fc59354643 (commit)
via 46c16b22a0bbce4acd5d25a6bcdcac69708a588e (commit)
via 698cb10ff3a5921454924f0f5e05534ba21b55bd (commit)
via 9c01045356a29622857ca7338329903317123a83 (commit)
via 30f47cdeba342f80905a1c73a9b9afc3fa59dbc3 (commit)
via 50563e2fce8132db121c42393e4256a796622996 (commit)
via 6712f32fe3dc1aed1ac1ed4ee4bfe5c238a43f1c (commit)
via 8c49a977faef8d8ffec9bfd546dc37752f6aef8f (commit)
via 5bb669edbd24e6e05db0c67f8b826bf70c01dd4a (commit)
via 9841e500b94f642a0b4511991faccb0143c32475 (commit)
via f28d6742112ea0e508b21246cce42e082f4f9579 (commit)
via 50c4646c1d237deb806b88724e171f7f6c9dfe48 (commit)
via f88399ed3a2828fb967e7d570c13b19e029411f6 (commit)
via d0fd27afd6b4d9df99b0e3c3e6afeafacbb88117 (commit)
via 5d51e29d4459ff3a9dd87df90adc3ef6cac2de69 (commit)
via 15729dfafd16fb1fabca24c03f6f0670ee278aea (commit)
from bb87d92f43f2f0599e1e573907daf33a6b50286f (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 ae69772d2a5dd8adad0c8de51b6c44db5f060e35
Author: Mike Black W9MDB <mdb...@ya...>
Date: Fri Dec 8 11:42:44 2023 -0600
Update NEWS
diff --git a/NEWS b/NEWS
index 5409bba58..644b7fd1a 100644
--- a/NEWS
+++ b/NEWS
@@ -13,6 +13,14 @@ Version 5.x -- future
* Change FT1000MP Mark V model names to align with FT1000MP
Version 4.6
+ * 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*)
+#else
+static int add_to_list(const struct rig_caps* rc, void*)
+#endif
+
+ * IC7610 now has IPP, DPP, and TX_INHIBIT functions set/get
* Hamlib now starts a multicast server that sends out rig information. Does not receive commands yet.
See README.multicast
commit f6eed234941f4985b992b57a2a2fd3c84aa1e403
Author: Mike Black W9MDB <mdb...@ya...>
Date: Fri Dec 8 08:24:29 2023 -0600
Ignore RIG_VFO_NONE in cache.c
diff --git a/src/cache.c b/src/cache.c
index 48452ac5d..75dea96a3 100644
--- a/src/cache.c
+++ b/src/cache.c
@@ -326,6 +326,10 @@ int rig_get_cache(RIG *rig, vfo_t vfo, freq_t *freq, int *cache_ms_freq,
vfo = RIG_VFO_SUB_A;
break;
+ case RIG_VFO_NONE:
+ rig_debug(RIG_DEBUG_VERBOSE, "%s(%d): ignoring VFO_OTHER\n", __func__, __LINE__);
+ break;
+
default:
rig_debug(RIG_DEBUG_WARN, "%s(%d): unknown vfo=%s, curr_vfo=%s\n", __func__, __LINE__,
rig_strvfo(vfo), rig_strvfo(rig->state.current_vfo));
commit cf973c9b0aad24e764c03b8df48cbfbca4040e78
Author: Mike Black W9MDB <mdb...@ya...>
Date: Fri Dec 8 07:53:21 2023 -0600
Ignorie RIG_VFO_OTHER cache request
diff --git a/src/cache.c b/src/cache.c
index cf257a3d8..48452ac5d 100644
--- a/src/cache.c
+++ b/src/cache.c
@@ -215,6 +215,10 @@ int rig_set_cache_freq(RIG *rig, vfo_t vfo, freq_t freq)
elapsed_ms(&rig->state.cache.time_freqMem, flag);
break;
+ case RIG_VFO_OTHER:
+ rig_debug(RIG_DEBUG_VERBOSE, "%s(%d): ignoring VFO_OTHER\n", __func__, __LINE__);
+ break;
+
default:
rig_debug(RIG_DEBUG_WARN, "%s(%d): unknown vfo?, vfo=%s\n", __func__, __LINE__,
rig_strvfo(vfo));
commit 3729f658ecd6b9697233a6f741eb2beebed6f5f6
Author: Mike Black W9MDB <mdb...@ya...>
Date: Mon Dec 4 22:18:14 2023 -0600
Add 60M channel 3 for 5357MhZ for FT8 on channelized 60M rigs
diff --git a/rigs/yaesu/newcat.c b/rigs/yaesu/newcat.c
index 6635c2a33..d4c38f860 100644
--- a/rigs/yaesu/newcat.c
+++ b/rigs/yaesu/newcat.c
@@ -893,6 +893,7 @@ int newcat_60m_exception(RIG *rig, freq_t freq, mode_t mode)
{
if ((long)freq == freq_60m[i]) { channel = i; }
}
+ if ((long)freq == 5357000) channel = 3; // 60M channel for FT8
if (channel < 0)
{
diff --git a/rigs/yaesu/newcat.h b/rigs/yaesu/newcat.h
index 29a639eb7..6521bf966 100644
--- a/rigs/yaesu/newcat.h
+++ b/rigs/yaesu/newcat.h
@@ -50,7 +50,7 @@
typedef char ncboolean;
/* shared function version */
-#define NEWCAT_VER "20231101"
+#define NEWCAT_VER "20231204"
/* Hopefully large enough for future use, 128 chars plus '\0' */
#define NEWCAT_DATA_LEN 129
commit 768ca6105d3b0cf3fa18c5988f1c418c7594a1c6
Author: Mike Black W9MDB <mdb...@ya...>
Date: Mon Dec 4 16:35:23 2023 -0600
Update comment in icom.c
diff --git a/rigs/icom/icom.c b/rigs/icom/icom.c
index 7a4228750..1e34d671f 100644
--- a/rigs/icom/icom.c
+++ b/rigs/icom/icom.c
@@ -2212,7 +2212,7 @@ static int icom_set_mode_x26(RIG *rig, vfo_t vfo, rmode_t mode, int datamode,
buf[1] = datamode;
// filter fixed to filter 1 due to IC7300 bug defaulting to filter 2 on mode changed -- yuck!!
// buf[2] = filter // if Icom ever fixed this
- // buf[2] = 1; // let's skip the filter selection
+ // buf[2] = 1; // let's skip the filter selection Tested on 7300 and 9700
retval = icom_transaction(rig, cmd2, subcmd2, buf, 2, ackbuf, &ack_len);
commit f0e97a9e0e0c9d13479972996836df410beda484
Author: Mike Black W9MDB <mdb...@ya...>
Date: Mon Dec 4 16:13:52 2023 -0600
Allow freq=0 for PowerSDR and perhaps others
diff --git a/rigs/dummy/flrig.c b/rigs/dummy/flrig.c
index 3ef94b1f5..f4fb27349 100644
--- a/rigs/dummy/flrig.c
+++ b/rigs/dummy/flrig.c
@@ -143,7 +143,7 @@ struct rig_caps flrig_caps =
RIG_MODEL(RIG_MODEL_FLRIG),
.model_name = "FLRig",
.mfg_name = "FLRig",
- .version = "20231113.0",
+ .version = "20231204.0",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
@@ -1209,6 +1209,9 @@ static int flrig_get_freq(RIG *rig, vfo_t vfo, freq_t *freq)
*freq = atof(value);
+
+#if 0 // zero is actually valid for PowerSDR
+
if (*freq == 0)
{
rig_debug(RIG_DEBUG_ERR, "%s: freq==0??\nvalue=%s\n", __func__,
@@ -1216,6 +1219,7 @@ static int flrig_get_freq(RIG *rig, vfo_t vfo, freq_t *freq)
RETURNFUNC(-RIG_EPROTO);
}
else
+#endif
{
rig_debug(RIG_DEBUG_TRACE, "%s: freq=%.0f\n", __func__, *freq);
}
commit 4e1aa90499126198ff10069e7b1a1456c0d55889
Merge: e3f1816e8 f4d40e0d7
Author: Michael Black <mdb...@ya...>
Date: Mon Dec 4 14:42:48 2023 -0600
Merge pull request #1444 from GeoBaltz/fix6
Restore shared library ABI compatibility with previous hamlibs
commit f4d40e0d79193a9b1925b9bac0ed7e9c9a5d2882
Author: George Baltz N3GB <Geo...@gm...>
Date: Mon Dec 4 10:47:52 2023 -0500
Restore shared library ABI compatibility with previous hamlibs
No need for post_ptt_delay to be in hamlib_port - move it to misc
rig_state data.
Update references to post_ptt_delay
Fix a couple of typos
Add code to actually set post_ptt_delay
Fixes issue #1412
diff --git a/include/hamlib/rig.h b/include/hamlib/rig.h
index 9ad2e32db..f8a5a72ad 100644
--- a/include/hamlib/rig.h
+++ b/include/hamlib/rig.h
@@ -2388,7 +2388,7 @@ typedef struct hamlib_port {
int fd_sync_error_read; /*!< file descriptor for reading synchronous data error codes */
#endif
short timeout_retry; /*!< number of retries to make in case of read timeout errors, some serial interfaces may require this, 0 to disable */
- int post_ptt_delay; /*!< delay after PTT to allow for relays and such */
+// DO NOT ADD ANYTHING HERE UNTIL 5.0!!
} hamlib_port_t;
@@ -2787,6 +2787,8 @@ struct rig_state {
rig_comm_status_t comm_status; /*!< Detailed rig control status */
char device_id[HAMLIB_RIGNAMSIZ];
int dual_watch; /*!< Boolean DUAL_WATCH status */
+ int post_ptt_delay; /*!< delay after PTT to allow for relays and such */
+// New rig_state items go before this line ============================================
};
/**
@@ -2799,7 +2801,7 @@ struct rig_state {
* It is NOT fine to touch this struct AT ALL!!!
*/
struct rig_state_deprecated {
- /********* ENSURE YOU DO NOT EVERY MODIFY THIS STRUCTURE *********/
+ /********* ENSURE YOU DO NOT EVER MODIFY THIS STRUCTURE *********/
/********* It will remain forever to provide DLL backwards compatiblity ******/
/*
* overridable fields
diff --git a/src/conf.c b/src/conf.c
index 612fa46c4..6e5102de4 100644
--- a/src/conf.c
+++ b/src/conf.c
@@ -268,7 +268,15 @@ static int frontend_set_conf(RIG *rig, token_t token, const char *val)
}
rs->rigport.post_write_delay = val_i;
- rs->rigport_deprecated.timeout = val_i;
+ rs->rigport_deprecated.post_write_delay = val_i;
+ break;
+
+ case TOK_POST_PTT_DELAY:
+ if (1 != sscanf(val, "%ld", &val_i))
+ {
+ return -RIG_EINVAL;
+ }
+ rs->post_ptt_delay = val_i;
break;
case TOK_TIMEOUT:
@@ -841,7 +849,7 @@ static int frontend_get_conf2(RIG *rig, token_t token, char *val, int val_len)
break;
case TOK_POST_PTT_DELAY:
- SNPRINTF(val, val_len, "%d", rs->rigport.post_ptt_delay);
+ SNPRINTF(val, val_len, "%d", rs->post_ptt_delay);
break;
case TOK_TIMEOUT:
diff --git a/src/rig.c b/src/rig.c
index 4fc6e6d32..059911bb7 100644
--- a/src/rig.c
+++ b/src/rig.c
@@ -3562,7 +3562,7 @@ int HAMLIB_API rig_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt)
memcpy(&rig->state.pttport_deprecated, &rig->state.pttport,
sizeof(rig->state.pttport_deprecated));
- if (rig->state.rigport.post_ptt_delay > 0) hl_usleep(rig->state.rigport.post_ptt_delay*1000);
+ if (rig->state.post_ptt_delay > 0) hl_usleep(rig->state.post_ptt_delay*1000);
ELAPSED2;
RETURNFUNC(retcode);
commit e3f1816e8a422729b9ca4750d4690a2017b3c493
Merge: f255f6f8d 37fb4eafd
Author: Michael Black <mdb...@ya...>
Date: Fri Dec 1 10:41:37 2023 -0600
Merge pull request #1441 from GeoBaltz/fix5
Fix FTDX101MP RFPOWER the right way
commit 37fb4eafdd33cdb88beda3d20e94a6ffcf12d781
Author: George Baltz N3GB <Geo...@gm...>
Date: Fri Dec 1 11:18:13 2023 -0500
Fix FTDX101MP RFPOWER the right way.
diff --git a/rigs/yaesu/ftdx101mp.c b/rigs/yaesu/ftdx101mp.c
index 5289c09e9..d459051c0 100644
--- a/rigs/yaesu/ftdx101mp.c
+++ b/rigs/yaesu/ftdx101mp.c
@@ -104,7 +104,7 @@ struct rig_caps ftdx101mp_caps =
[LVL_MICGAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
[LVL_SQL] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
[LVL_MONITOR_GAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
- [LVL_RFPOWER] = { .min = { .f = .05 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
+ [LVL_RFPOWER] = { .min = { .f = .025 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/200.0f } },
[LVL_USB_AF] = { .min = { .f = .0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
[LVL_USB_AF_INPUT] = { .min = { .f = .0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
},
commit ed630b28d196bcf723a52199c71b9b9f45f75f08
Author: George Baltz N3GB <Geo...@gm...>
Date: Fri Dec 1 11:11:21 2023 -0500
Revert "Fix FTDX101MP RFPOWER to allow 200W"
Unnecessary code, breaks other levels.
This reverts commit f255f6f8d8412c423a2fffb4864e11200f45491f.
diff --git a/rigs/yaesu/newcat.c b/rigs/yaesu/newcat.c
index e99a89558..6635c2a33 100644
--- a/rigs/yaesu/newcat.c
+++ b/rigs/yaesu/newcat.c
@@ -4046,19 +4046,13 @@ int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
}
if ( is_ftdx3000dm ) /* No separate rig->caps for this rig :-( */
- {
- fpf = (int)((val.f * 50.0f) + 0.5f);
- }
- else if (is_ftdx101mp)
- {
- fpf = (int)((val.f / level_info->step.f) + 0.5f ) * 2;
- if (fpf > 200) fpf = 200;
- }
-
- else
- {
- fpf = (int)((val.f / level_info->step.f) + 0.5f );
- }
+ {
+ fpf = (int)((val.f * 50.0f) + 0.5f);
+ }
+ else
+ {
+ fpf = (int)((val.f / level_info->step.f) + 0.5f );
+ }
SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "PC%03d%c", fpf, cat_term);
break;
@@ -5640,7 +5634,6 @@ int newcat_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
case RIG_LEVEL_RFPOWER:
case RIG_LEVEL_MONITOR_GAIN:
val->f = (float)atoi(retlvl) * level_info->step.f;
- if (is_ftdx101mp) val->f /= 2;
break;
case RIG_LEVEL_BKINDL:
diff --git a/rigs/yaesu/newcat.h b/rigs/yaesu/newcat.h
index 3b30adf16..29a639eb7 100644
--- a/rigs/yaesu/newcat.h
+++ b/rigs/yaesu/newcat.h
@@ -50,7 +50,7 @@
typedef char ncboolean;
/* shared function version */
-#define NEWCAT_VER "20231130"
+#define NEWCAT_VER "20231101"
/* Hopefully large enough for future use, 128 chars plus '\0' */
#define NEWCAT_DATA_LEN 129
commit f255f6f8d8412c423a2fffb4864e11200f45491f
Author: Mike Black W9MDB <mdb...@ya...>
Date: Thu Nov 30 22:32:42 2023 -0600
Fix FTDX101MP RFPOWER to allow 200W
https://github.com/Hamlib/Hamlib/issues/1396
diff --git a/rigs/yaesu/newcat.c b/rigs/yaesu/newcat.c
index 6635c2a33..e99a89558 100644
--- a/rigs/yaesu/newcat.c
+++ b/rigs/yaesu/newcat.c
@@ -4046,13 +4046,19 @@ int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
}
if ( is_ftdx3000dm ) /* No separate rig->caps for this rig :-( */
- {
- fpf = (int)((val.f * 50.0f) + 0.5f);
- }
- else
- {
- fpf = (int)((val.f / level_info->step.f) + 0.5f );
- }
+ {
+ fpf = (int)((val.f * 50.0f) + 0.5f);
+ }
+ else if (is_ftdx101mp)
+ {
+ fpf = (int)((val.f / level_info->step.f) + 0.5f ) * 2;
+ if (fpf > 200) fpf = 200;
+ }
+
+ else
+ {
+ fpf = (int)((val.f / level_info->step.f) + 0.5f );
+ }
SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "PC%03d%c", fpf, cat_term);
break;
@@ -5634,6 +5640,7 @@ int newcat_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
case RIG_LEVEL_RFPOWER:
case RIG_LEVEL_MONITOR_GAIN:
val->f = (float)atoi(retlvl) * level_info->step.f;
+ if (is_ftdx101mp) val->f /= 2;
break;
case RIG_LEVEL_BKINDL:
diff --git a/rigs/yaesu/newcat.h b/rigs/yaesu/newcat.h
index 29a639eb7..3b30adf16 100644
--- a/rigs/yaesu/newcat.h
+++ b/rigs/yaesu/newcat.h
@@ -50,7 +50,7 @@
typedef char ncboolean;
/* shared function version */
-#define NEWCAT_VER "20231101"
+#define NEWCAT_VER "20231130"
/* Hopefully large enough for future use, 128 chars plus '\0' */
#define NEWCAT_DATA_LEN 129
commit 88c3d9427b5683f1d183cf75bceaefd346500847
Author: Mike Black W9MDB <mdb...@ya...>
Date: Thu Nov 30 22:15:44 2023 -0600
Fix simftdx101
diff --git a/simulators/simftdx101.c b/simulators/simftdx101.c
index 13adf7965..10e34e72f 100644
--- a/simulators/simftdx101.c
+++ b/simulators/simftdx101.c
@@ -332,13 +332,13 @@ int main(int argc, char *argv[])
}
else if (strcmp(buf, "EX010415;") == 0)
{
- sprintf(buf,"EX010415%03d;", rport_gain);
+ sprintf(buf,"EX010415%03d;", rport_gain_psk);
n = write(fd, buf, strlen(buf));
}
else if (strncmp(buf, "EX010415", 8) == 0)
{
printf("Here#1");
- sscanf(buf,"EX010415%d", &rport_gain);
+ sscanf(buf,"EX010415%d", &rport_gain_psk);
}
else if (strlen(buf) > 0)
commit cc49669b494e736726b496fbec8e85b67904caf7
Author: Mike Black W9MDB <mdb...@ya...>
Date: Thu Nov 30 10:31:56 2023 -0600
Change Icom 0x26 behavior to leave filter# alone
Rigs should remember filter based on last filter used for the mode
diff --git a/rigs/icom/icom.c b/rigs/icom/icom.c
index ce8f09006..7a4228750 100644
--- a/rigs/icom/icom.c
+++ b/rigs/icom/icom.c
@@ -950,6 +950,7 @@ static vfo_t icom_current_vfo(RIG *rig)
}
rig_debug(RIG_DEBUG_TRACE, "%s: currVFO=%s\n", __func__, rig_strvfo(currVFO));
+ if (rig->state.current_vfo != RIG_VFO_NONE) currVFO = rig->state.current_vfo;
return currVFO;
}
@@ -2211,9 +2212,9 @@ static int icom_set_mode_x26(RIG *rig, vfo_t vfo, rmode_t mode, int datamode,
buf[1] = datamode;
// filter fixed to filter 1 due to IC7300 bug defaulting to filter 2 on mode changed -- yuck!!
// buf[2] = filter // if Icom ever fixed this
- buf[2] = 1;
+ // buf[2] = 1; // let's skip the filter selection
- retval = icom_transaction(rig, cmd2, subcmd2, buf, 3, ackbuf, &ack_len);
+ retval = icom_transaction(rig, cmd2, subcmd2, buf, 2, ackbuf, &ack_len);
if (retval != RIG_OK)
{
diff --git a/rigs/icom/icom.h b/rigs/icom/icom.h
index cc800675c..95bb0787a 100644
--- a/rigs/icom/icom.h
+++ b/rigs/icom/icom.h
@@ -35,7 +35,7 @@
#include <sys/time.h>
#endif
-#define BACKEND_VER "20231116"
+#define BACKEND_VER "20231130"
#define ICOM_IS_ID31 rig_is_model(rig, RIG_MODEL_ID31)
#define ICOM_IS_ID51 rig_is_model(rig, RIG_MODEL_ID51)
commit 8940d915220b97b5ed4f25bfc9e606c89df48ac8
Author: Mike Black W9MDB <mdb...@ya...>
Date: Wed Nov 29 17:04:56 2023 -0600
Fix CPU usage in simulators when client quits
diff --git a/simulators/simelecraft.c b/simulators/simelecraft.c
index 7a9e84c47..d047474c7 100644
--- a/simulators/simelecraft.c
+++ b/simulators/simelecraft.c
@@ -70,6 +70,7 @@ getmyline(int fd, char *buf)
if (c == ';') { return strlen(buf); }
}
+ if (strlen(buf)==0) hl_usleep(10*1000);
return strlen(buf);
}
diff --git a/simulators/simft818.c b/simulators/simft818.c
index a2bafe672..dda144558 100644
--- a/simulators/simft818.c
+++ b/simulators/simft818.c
@@ -63,6 +63,7 @@ getmyline(int fd, char *buf)
if (c == ';') { return strlen(buf); }
}
+ if (strlen(buf)==0) hl_usleep(10*1000);
return strlen(buf);
}
diff --git a/simulators/simft991.c b/simulators/simft991.c
index d2f5b1eb2..3ce19996d 100644
--- a/simulators/simft991.c
+++ b/simulators/simft991.c
@@ -63,6 +63,7 @@ getmyline(int fd, char *buf)
if (c == ';') { return strlen(buf); }
}
+ if (strlen(buf)==0) hl_usleep(10*1000);
return strlen(buf);
}
diff --git a/simulators/simftdx101.c b/simulators/simftdx101.c
index f12cbdaac..13adf7965 100644
--- a/simulators/simftdx101.c
+++ b/simulators/simftdx101.c
@@ -72,6 +72,7 @@ getmyline(int fd, char *buf)
if (c == ';') { return strlen(buf); }
}
+ if (strlen(buf)==0) hl_usleep(10*1000);
return strlen(buf);
}
diff --git a/simulators/simftdx1200.c b/simulators/simftdx1200.c
index 2aa814b70..a5c948a78 100644
--- a/simulators/simftdx1200.c
+++ b/simulators/simftdx1200.c
@@ -65,6 +65,7 @@ getmyline(int fd, char *buf)
if (c == ';') { return strlen(buf); }
}
+ if (strlen(buf)==0) hl_usleep(10*1000);
return strlen(buf);
}
diff --git a/simulators/simftdx3000.c b/simulators/simftdx3000.c
index 23a1ae999..361993dd9 100644
--- a/simulators/simftdx3000.c
+++ b/simulators/simftdx3000.c
@@ -64,6 +64,7 @@ getmyline(int fd, char *buf)
if (c == ';') { return strlen(buf); }
}
+ if (strlen(buf)==0) hl_usleep(10*1000);
return strlen(buf);
}
diff --git a/simulators/simftdx5000.c b/simulators/simftdx5000.c
index 25450001d..a2560b4f9 100644
--- a/simulators/simftdx5000.c
+++ b/simulators/simftdx5000.c
@@ -66,6 +66,7 @@ getmyline(int fd, char *buf)
if (c == ';') { return strlen(buf); }
}
+ if (strlen(buf)==0) hl_usleep(10*1000);
return strlen(buf);
}
diff --git a/simulators/simic7300.c b/simulators/simic7300.c
index 92f1bf481..c49d0ea68 100644
--- a/simulators/simic7300.c
+++ b/simulators/simic7300.c
@@ -72,7 +72,7 @@ again:
while (read(fd, &c, 1) > 0)
{
buf[i++] = c;
- //printf("i=%d, c=0x%02x\n",i,c);
+ printf("i=%d, c=0x%02x\n",i,c);
if (c == 0xfd)
{
@@ -141,6 +141,7 @@ void frameParse(int fd, unsigned char *frame, int len)
if (powerstat)
{
+ dump_hex(frame,11);
n = write(fd, frame, 11);
if (n <= 0) { fprintf(stderr, "%s(%d) write error %s\n", __func__, __LINE__, strerror(errno)); }
diff --git a/simulators/simkenwood.c b/simulators/simkenwood.c
index fabff7b43..12d1d8ff4 100644
--- a/simulators/simkenwood.c
+++ b/simulators/simkenwood.c
@@ -60,6 +60,7 @@ getmyline(int fd, char *buf)
if (c == ';') { return strlen(buf); }
}
+ if (strlen(buf)==0) hl_usleep(10*1000);
return strlen(buf);
}
diff --git a/simulators/simpowersdr.c b/simulators/simpowersdr.c
index 3dedd8fb7..fac5f2456 100644
--- a/simulators/simpowersdr.c
+++ b/simulators/simpowersdr.c
@@ -61,6 +61,7 @@ getmyline(int fd, char *buf)
if (c == ';') { return strlen(buf); }
}
+ if (strlen(buf)==0) hl_usleep(10*1000);
return strlen(buf);
}
diff --git a/simulators/simqrplabs.c b/simulators/simqrplabs.c
index 39372c75c..c33612307 100644
--- a/simulators/simqrplabs.c
+++ b/simulators/simqrplabs.c
@@ -40,6 +40,7 @@ getmyline(int fd, char *buf)
if (c == ';') { return strlen(buf); }
}
+ if (strlen(buf)==0) hl_usleep(10*1000);
return strlen(buf);
}
diff --git a/simulators/simrotorez.c b/simulators/simrotorez.c
index 51101ae4d..fdd859ece 100644
--- a/simulators/simrotorez.c
+++ b/simulators/simrotorez.c
@@ -39,6 +39,7 @@ getmyline(int fd, char *buf)
printf("\n");
}
+ if (strlen(buf)==0) hl_usleep(10*1000);
return n;
}
diff --git a/simulators/simtmd700.c b/simulators/simtmd700.c
index e82aa49e9..67501b28b 100644
--- a/simulators/simtmd700.c
+++ b/simulators/simtmd700.c
@@ -60,6 +60,7 @@ getmyline(int fd, char *buf)
buf[i++] = c;
}
+ if (strlen(buf)==0) hl_usleep(10*1000);
return strlen(buf);
}
diff --git a/simulators/simtrusdx.c b/simulators/simtrusdx.c
index 5241e5a7d..211f20d6e 100644
--- a/simulators/simtrusdx.c
+++ b/simulators/simtrusdx.c
@@ -42,6 +42,7 @@ getmyline(int fd, char *buf)
if (c == ';') { return strlen(buf); }
}
+ if (strlen(buf)==0) hl_usleep(10*1000);
return strlen(buf);
}
diff --git a/simulators/simts450.c b/simulators/simts450.c
index 08ab439bb..853db5c85 100644
--- a/simulators/simts450.c
+++ b/simulators/simts450.c
@@ -42,6 +42,7 @@ getmyline(int fd, char *buf)
if (c == ';') { return strlen(buf); }
}
+ if (strlen(buf)==0) hl_usleep(10*1000);
return strlen(buf);
}
diff --git a/simulators/simts590.c b/simulators/simts590.c
index 699d6e266..08e444f11 100644
--- a/simulators/simts590.c
+++ b/simulators/simts590.c
@@ -48,6 +48,7 @@ getmyline(int fd, char *buf)
if (c == ';') { return strlen(buf); }
}
+ if (strlen(buf)==0) hl_usleep(10*1000);
return strlen(buf);
}
diff --git a/simulators/simts950.c b/simulators/simts950.c
index c0296fce6..c9b9ba2ca 100644
--- a/simulators/simts950.c
+++ b/simulators/simts950.c
@@ -40,6 +40,7 @@ getmyline(int fd, char *buf)
if (c == ';') { return strlen(buf); }
}
+ if (strlen(buf)==0) hl_usleep(10*1000);
return strlen(buf);
}
diff --git a/simulators/simts990.c b/simulators/simts990.c
index 24d265e9b..9433aaa8b 100644
--- a/simulators/simts990.c
+++ b/simulators/simts990.c
@@ -92,6 +92,7 @@ getmyline(int fd, char *buf)
close(fd);
fd = openPort("");
}
+ if (strlen(buf)==0) hl_usleep(10*1000);
return strlen(buf);
}
diff --git a/simulators/simyaesu.c b/simulators/simyaesu.c
index 550108f89..2759930ad 100644
--- a/simulators/simyaesu.c
+++ b/simulators/simyaesu.c
@@ -69,6 +69,7 @@ getmyline(int fd, char *buf)
if (c == ';') { return strlen(buf); }
}
+ if (strlen(buf)==0) hl_usleep(10*1000);
return strlen(buf);
}
commit e40981e198163d0acf7d9ab98bc073ee823b97fc
Author: Mike Black W9MDB <mdb...@ya...>
Date: Wed Nov 29 16:02:19 2023 -0600
Add simtrusdx.c
diff --git a/simulators/simtrusdx.c b/simulators/simtrusdx.c
new file mode 100644
index 000000000..5241e5a7d
--- /dev/null
+++ b/simulators/simtrusdx.c
@@ -0,0 +1,358 @@
+// can run this using rigctl/rigctld and socat pty devices
+// gcc -o simyaesu simyaesu.c
+#define _XOPEN_SOURCE 700
+// since we are POSIX here we need this
+#if 0
+struct ip_mreq
+{
+ int dummy;
+};
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include <string.h>
+#include <unistd.h>
+#include <hamlib/rig.h>
+#include "sim.h"
+
+#define BUFSIZE 256
+
+int mysleep = 20;
+
+float freqA = 14074000;
+float freqB = 14074500;
+int filternum = 7;
+int datamode = 0;
+int vfo, vfo_tx, ptt, ptt_data, ptt_mic, ptt_tune;
+int tomode = 0;
+int keyspd = 25;
+
+int
+getmyline(int fd, char *buf)
+{
+ char c;
+ int i = 0;
+ memset(buf, 0, BUFSIZE);
+
+ while (read(fd, &c, 1) > 0)
+ {
+ buf[i++] = c;
+
+ if (c == ';') { return strlen(buf); }
+ }
+
+ return strlen(buf);
+}
+
+#if defined(WIN32) || defined(_WIN32)
+int openPort(char *comport) // doesn't matter for using pts devices
+{
+ int fd;
+ fd = open(comport, O_RDWR);
+
+ if (fd < 0)
+ {
+ perror(comport);
+ }
+
+ return fd;
+}
+
+#else
+int openPort(char *comport) // doesn't matter for using pts devices
+{
+ int fd = posix_openpt(O_RDWR);
+ char *name = ptsname(fd);
+
+ if (name == NULL)
+ {
+ perror("pstname");
+ return -1;
+ }
+
+ printf("name=%s\n", name);
+
+ if (fd == -1 || grantpt(fd) == -1 || unlockpt(fd) == -1)
+ {
+ perror("posix_openpt");
+ return -1;
+ }
+
+ return fd;
+}
+#endif
+
+
+
+int main(int argc, char *argv[])
+{
+ char buf[256];
+ char *pbuf;
+ int fd = openPort(argv[1]);
+ int freqa = 14074000, freqb = 140735000;
+ int modeA = 1, modeB = 2;
+
+ while (1)
+ {
+ buf[0] = 0;
+
+ if (getmyline(fd, buf) > 0) { printf("Cmd:%s\n", buf); }
+
+// else { return 0; }
+
+ if (strcmp(buf, "RM5;") == 0)
+ {
+ printf("%s\n", buf);
+ hl_usleep(mysleep * 1000);
+ pbuf = "RM5100000;";
+ WRITE(fd, pbuf, strlen(pbuf));
+ }
+
+ else if (strcmp(buf, "AN0;") == 0)
+ {
+ printf("%s\n", buf);
+ hl_usleep(mysleep * 1000);
+ pbuf = "AN030;";
+ WRITE(fd, pbuf, strlen(pbuf));
+ }
+ else if (strcmp(buf, "IF;") == 0)
+ {
+ char ifbuf[256];
+ printf("%s\n", buf);
+ hl_usleep(mysleep * 1000);
+ pbuf = "IF000503130001000+0000000000030000000;";
+ sprintf(ifbuf, "IF%011d0001000+0000000000030000000;", freqa);
+ //pbuf = "IF00010138698 +00000000002000000 ;
+ WRITE(fd, ifbuf, strlen(ifbuf));
+ }
+ else if (strcmp(buf, "NB;") == 0)
+ {
+ hl_usleep(mysleep * 1000);
+ pbuf = "NB0;";
+ WRITE(fd, pbuf, strlen(pbuf));
+ }
+ else if (strcmp(buf, "RA;") == 0)
+ {
+ hl_usleep(mysleep * 1000);
+ pbuf = "RA01;";
+ WRITE(fd, pbuf, strlen(pbuf));
+ }
+ else if (strcmp(buf, "RG;") == 0)
+ {
+ hl_usleep(mysleep * 1000);
+ pbuf = "RG055;";
+ WRITE(fd, pbuf, strlen(pbuf));
+ }
+ else if (strcmp(buf, "MG;") == 0)
+ {
+ hl_usleep(mysleep * 1000);
+ pbuf = "MG050;";
+ WRITE(fd, pbuf, strlen(pbuf));
+ }
+ else if (strcmp(buf, "AG;") == 0)
+ {
+ hl_usleep(mysleep * 1000);
+ pbuf = "AG100;";
+ WRITE(fd, pbuf, strlen(pbuf));
+ }
+ else if (strcmp(buf, "FV;") == 0)
+ {
+ hl_usleep(mysleep * 1000);
+ pbuf = "FV1.2;";
+ WRITE(fd, pbuf, strlen(pbuf));
+ }
+ else if (strncmp(buf, "IS;", 3) == 0)
+ {
+ SNPRINTF(buf, sizeof(buf), "IS+0000;");
+ WRITE(fd, buf, strlen(buf));
+ printf("%s\n", buf);
+ }
+ else if (strncmp(buf, "IS", 2) == 0)
+ {
+ }
+ else if (strncmp(buf, "SM;", 3) == 0)
+ {
+ SNPRINTF(buf, sizeof(buf), "SM0035;");
+ WRITE(fd, buf, strlen(buf));
+ printf("%s\n", buf);
+ }
+ else if (strncmp(buf, "PC;", 3) == 0)
+ {
+ SNPRINTF(buf, sizeof(buf), "PC100;");
+ WRITE(fd, buf, strlen(buf));
+ printf("%s\n", buf);
+ }
+ else if (strcmp(buf, "FW;") == 0)
+ {
+ //usleep(mysleep * 1000);
+ pbuf = "FW240";
+ WRITE(fd, pbuf, strlen(pbuf));
+ hl_usleep(20 * 1000);
+ pbuf = "0;";
+ WRITE(fd, pbuf, strlen(pbuf));
+ }
+ else if (strncmp(buf, "FW", 2) == 0)
+ {
+ }
+ else if (strcmp(buf, "ID;") == 0)
+ {
+ printf("%s\n", buf);
+ hl_usleep(mysleep * 1000);
+ SNPRINTF(buf, sizeof(buf), "ID%03d;", 20);
+ WRITE(fd, buf, strlen(buf));
+ }
+
+ else if (strcmp(buf, "VS;") == 0)
+ {
+ printf("%s\n", buf);
+ hl_usleep(mysleep * 1000);
+ pbuf = "VS0;";
+ WRITE(fd, pbuf, strlen(pbuf));
+ }
+ else if (strcmp(buf, "EX032;") == 0)
+ {
+ static int ant = 0;
+ ant = (ant + 1) % 3;
+ printf("%s\n", buf);
+ hl_usleep(mysleep * 1000);
+ SNPRINTF(buf, sizeof(buf), "EX032%1d;", ant);
+ WRITE(fd, buf, strlen(buf));
+ }
+ else if (strncmp(buf, "EX", 2) == 0)
+ {
+ }
+ else if (strcmp(buf, "FA;") == 0)
+ {
+ SNPRINTF(buf, sizeof(buf), "FA%011d;", freqa);
+ WRITE(fd, buf, strlen(buf));
+ }
+ else if (strcmp(buf, "FB;") == 0)
+ {
+ SNPRINTF(buf, sizeof(buf), "FB%011d;", freqb);
+ WRITE(fd, buf, strlen(buf));
+ }
+ else if (strncmp(buf, "FA", 2) == 0)
+ {
+ sscanf(buf, "FA%d", &freqa);
+ }
+ else if (strncmp(buf, "FB", 2) == 0)
+ {
+ sscanf(buf, "FB%d", &freqb);
+ }
+ else if (strncmp(buf, "AI", 2) == 0)
+ {
+ // nothing to do yet
+ }
+
+ else if (strncmp(buf, "PS;", 3) == 0)
+ {
+ SNPRINTF(buf, sizeof(buf), "PS1;");
+ WRITE(fd, buf, strlen(buf));
+ }
+ else if (strncmp(buf, "SA;", 3) == 0)
+ {
+ SNPRINTF(buf, sizeof(buf), "SA0;");
+ WRITE(fd, buf, strlen(buf));
+ }
+ else if (buf[3] == ';' && strncmp(buf, "SF", 2) == 0)
+ {
+ SNPRINTF(buf, sizeof(buf), "SF%c%011.0f%c;", buf[2],
+ buf[2] == '0' ? freqA : freqB,
+ buf[2] == '0' ? modeA + '0' : modeB + '0');
+ WRITE(fd, buf, strlen(buf));
+ }
+ else if (strncmp(buf, "SF", 2) == 0)
+ {
+ mode_t tmpmode = buf[14];
+
+ if (buf[2] == '0') { modeA = tmpmode - '0'; }
+ else { modeB = tmpmode - '0'; }
+
+ printf("modeA=%c, modeB=%c\n", modeA, modeB);
+
+ }
+ else if (strncmp(buf, "MD;", 3) == 0)
+ {
+ SNPRINTF(buf, sizeof(buf), "MD%d;",
+ modeA); // not worried about modeB yet for simulator
+ WRITE(fd, buf, strlen(buf));
+ }
+ else if (strncmp(buf, "MD", 2) == 0)
+ {
+ sscanf(buf, "MD%d", &modeA); // not worried about modeB yet for simulator
+ }
+ else if (strncmp(buf, "FL;", 3) == 0)
+ {
+ SNPRINTF(buf, sizeof(buf), "FL%03d;", filternum);
+ WRITE(fd, buf, strlen(buf));
+ }
+ else if (strncmp(buf, "FL", 2) == 0)
+ {
+ sscanf(buf, "FL%d", &filternum);
+ }
+ else if (strcmp(buf, "FR;") == 0)
+ {
+ SNPRINTF(buf, sizeof(buf), "FR%d;", vfo);
+ WRITE(fd, buf, strlen(buf));
+ }
+ else if (strncmp(buf, "FR", 2) == 0)
+ {
+ sscanf(buf, "FR%d", &vfo);
+ }
+ else if (strcmp(buf, "FT;") == 0)
+ {
+ SNPRINTF(buf, sizeof(buf), "FT%d;", vfo_tx);
+ WRITE(fd, buf, strlen(buf));
+ }
+ else if (strncmp(buf, "FT", 2) == 0)
+ {
+ sscanf(buf, "FT%d", &vfo_tx);
+ }
+ else if (strncmp(buf, "DA;", 3) == 0)
+ {
+ SNPRINTF(buf, sizeof(buf), "DA%d;", datamode);
+ WRITE(fd, buf, strlen(buf));
+ printf("%s\n", buf);
+ }
+ else if (strncmp(buf, "DA", 2) == 0)
+ {
+ sscanf(buf, "DA%d", &datamode);
+ printf("%s\n", buf);
+ }
+ else if (strncmp(buf, "TO;", 3) == 0)
+ {
+ SNPRINTF(buf, sizeof(buf), "TO%d;", tomode);
+ }
+ else if (strncmp(buf, "BD;", 3) == 0)
+ {
+ }
+ else if (strncmp(buf, "BU;", 3) == 0)
+ {
+ }
+ else if (strncmp(buf, "TX", 2) == 0)
+ {
+ ptt = ptt_mic = ptt_data = ptt_tune = 0;
+
+ switch (buf[2])
+ {
+ case ';': ptt = 1;
+
+ case '0': ptt_mic = 1;
+
+ case '1': ptt_data = 1;
+
+ case '2': ptt_tune = 1;
+ }
+
+ }
+
+ else if (strlen(buf) > 0)
+ {
+ fprintf(stderr, "Unknown command: %s\n", buf);
+ }
+ }
+
+ return 0;
+}
commit a5ad218bba7879b7e57c4b65043b1ead08ad3180
Author: Mike Black W9MDB <mdb...@ya...>
Date: Wed Nov 29 15:58:15 2023 -0600
Add simft1000 to Makefile.am
diff --git a/simulators/Makefile.am b/simulators/Makefile.am
index f383f5ce7..9b0412412 100644
--- a/simulators/Makefile.am
+++ b/simulators/Makefile.am
@@ -8,7 +8,7 @@ DISTCLEANFILES =
bin_PROGRAMS =
-check_PROGRAMS = simelecraft simicgeneric simkenwood simyaesu simic9100 simic9700 simft991 simftdx1200 simftdx3000 simjupiter simpowersdr simid5100 simft736 simftdx5000 simtmd700 simrotorez simspid simft817 simts590 simft847 simic7300 simic7000 simic7100 simic7200 simatd578 simic905 simts450 simic7600 simic7610 simic705 simts950 simts990 simic7851 simftdx101 simxiegug90 simqrplabs simft818 simic275
+check_PROGRAMS = simelecraft simicgeneric simkenwood simyaesu simic9100 simic9700 simft991 simftdx1200 simftdx3000 simjupiter simpowersdr simid5100 simft736 simftdx5000 simtmd700 simrotorez simspid simft817 simts590 simft847 simic7300 simic7000 simic7100 simic7200 simatd578 simic905 simts450 simic7600 simic7610 simic705 simts950 simts990 simic7851 simftdx101 simxiegug90 simqrplabs simft818 simic275 simtrusdx simft1000
simelecraft_SOURCES = simelecraft.c
simkenwood_SOURCES = simkenwood.c
commit 7973db52de5d149e7a416aabd19c093659e92629
Author: Mike Black W9MDB <mdb...@ya...>
Date: Wed Nov 29 14:53:39 2023 -0600
Remove debug from network.c
diff --git a/src/network.c b/src/network.c
index 048cb98e7..e2272d627 100644
--- a/src/network.c
+++ b/src/network.c
@@ -1196,9 +1196,7 @@ void *multicast_receiver(void *arg)
if (select_result == 0)
{
// Select timed out
- rig_debug(RIG_DEBUG_ERR, "%s: select timeout\n", __FILE__);
-// char *p = NULL;
-// *p = 0;
+// rig_debug(RIG_DEBUG_ERR, "%s: select timeout\n", __FILE__);
continue;
}
commit 001dd01a10397ec63f1ddcce05c9bddd843a9cbd
Author: Mike Black W9MDB <mdb...@ya...>
Date: Wed Nov 29 12:53:16 2023 -0600
Fix more compile errors for mingw
diff --git a/src/network.c b/src/network.c
index 5a79e0df6..048cb98e7 100644
--- a/src/network.c
+++ b/src/network.c
@@ -1175,21 +1175,19 @@ void *multicast_receiver(void *arg)
struct sockaddr_in client_addr;
socklen_t client_len = sizeof(client_addr);
fd_set rfds, efds;
- sigset_t sigfds;
- struct timespec timeout;
+ struct timeval timeout;
int select_result;
ssize_t result;
timeout.tv_sec = 1;
- timeout.tv_nsec = 0;
+ timeout.tv_usec = 0;
FD_ZERO(&rfds);
FD_SET(socket_fd, &rfds);
efds = rfds;
- sigfillset(&sigfds);
- select_result = pselect(socket_fd + 1, &rfds, NULL, &efds, &timeout, &sigfds);
+ select_result = select(socket_fd + 1, &rfds, NULL, &efds, &timeout);
- if (rs->multicast_receiver_run == 0 && sigismember(&sigfds, SIGINT))
+ if (rs->multicast_receiver_run == 0)
{
rig_debug(RIG_DEBUG_VERBOSE, "%s(%d): pselect signal\n", __func__, __LINE__);
break;
commit 756fad1c723cd77d2aa0e212777b29b7f352ed46
Author: Mike Black W9MDB <mdb...@ya...>
Date: Wed Nov 29 12:47:38 2023 -0600
Fix compile error on mingw with network.c
diff --git a/src/network.c b/src/network.c
index 66a7a4ec9..5a79e0df6 100644
--- a/src/network.c
+++ b/src/network.c
@@ -42,7 +42,6 @@
#include <errno.h> /* Error number definitions */
#include <sys/types.h>
#include <signal.h>
-#include <execinfo.h>
#include <pthread.h>
#ifdef HAVE_NETINET_IN_H
commit 07f57cfc18349100280d26c3466d6b284512b561
Author: Mike Black W9MDB <mdb...@ya...>
Date: Wed Nov 29 12:45:11 2023 -0600
Fix error on ctrl-c of rigctld
diff --git a/src/network.c b/src/network.c
index 4f155e03e..66a7a4ec9 100644
--- a/src/network.c
+++ b/src/network.c
@@ -42,6 +42,7 @@
#include <errno.h> /* Error number definitions */
#include <sys/types.h>
#include <signal.h>
+#include <execinfo.h>
#include <pthread.h>
#ifdef HAVE_NETINET_IN_H
@@ -686,7 +687,10 @@ static int multicast_publisher_read_data(const multicast_publisher_args
if (FD_ISSET(fd, &efds))
{
rig_debug(RIG_DEBUG_ERR,
- "%s(): fd error when reading multicast publisher data\n", __func__);
+ "%s(): fd error when reading multicast publisher data: %s\n",
+ __func__,
+ strerror(errno));
+
return -RIG_EIO;
}
@@ -1087,7 +1091,6 @@ int is_wireless()
#endif
#endif
-
void *multicast_receiver(void *arg)
{
char data[4096];
@@ -1173,38 +1176,50 @@ void *multicast_receiver(void *arg)
struct sockaddr_in client_addr;
socklen_t client_len = sizeof(client_addr);
fd_set rfds, efds;
- struct timeval timeout;
+ sigset_t sigfds;
+ struct timespec timeout;
int select_result;
ssize_t result;
timeout.tv_sec = 1;
- timeout.tv_usec = 0;
-
+ timeout.tv_nsec = 0;
FD_ZERO(&rfds);
FD_SET(socket_fd, &rfds);
efds = rfds;
+ sigfillset(&sigfds);
+
+ select_result = pselect(socket_fd + 1, &rfds, NULL, &efds, &timeout, &sigfds);
+
+ if (rs->multicast_receiver_run == 0 && sigismember(&sigfds, SIGINT))
+ {
+ rig_debug(RIG_DEBUG_VERBOSE, "%s(%d): pselect signal\n", __func__, __LINE__);
+ break;
+ }
- select_result = select(socket_fd + 1, &rfds, NULL, &efds, &timeout);
if (select_result == 0)
{
// Select timed out
+ rig_debug(RIG_DEBUG_ERR, "%s: select timeout\n", __FILE__);
+// char *p = NULL;
+// *p = 0;
continue;
}
- if (select_result < 0)
+ if (select_result <= 0)
{
rig_debug(RIG_DEBUG_ERR,
- "%s(): select() failed when reading UDP multicast socket data: %s\n",
+ "%s((%d): select() failed when reading UDP multicast socket data: %s\n",
__func__,
+ __LINE__,
strerror(errno));
break;
}
- if (FD_ISSET(socket_fd, &efds))
+ if ((result = FD_ISSET(socket_fd, &efds)))
{
rig_debug(RIG_DEBUG_ERR,
- "%s(): fd error when reading UDP multicast socket data\n", __func__);
+ "%s(%d): fd error when reading UDP multicast socket data: (%d)=%s\n", __func__, __LINE__, (int)result, strerror(errno));
break;
}
@@ -1230,6 +1245,7 @@ void *multicast_receiver(void *arg)
// TODO: if a new snapshot needs to be sent, call network_publish_rig_poll_data() and the publisher routine will send out a snapshot
// TODO: new logic in publisher needs to be written for other types of responses
}
+ rs->multicast_receiver_run = 0;
rig_debug(RIG_DEBUG_VERBOSE, "%s(%d): Stopping multicast receiver\n", __FILE__,
__LINE__);
commit ed941939359da9f8734dbdf4a21a9b01622a1a6e
Author: Mike Black W9MDB <mdb...@ya...>
Date: Wed Nov 29 11:10:43 2023 -0600
Add #define RIGCAPS_NOT_CONST
Allows clients to test for which declarations to use
https://github.com/Hamlib/Hamlib/issues/1436
diff --git a/include/hamlib/rig.h b/include/hamlib/rig.h
index 83ef311e6..9ad2e32db 100644
--- a/include/hamlib/rig.h
+++ b/include/hamlib/rig.h
@@ -24,6 +24,10 @@
#ifndef _RIG_H
#define _RIG_H 1
+// as of 2023-11-23 rig_caps is no longer constant
+// this #define allows clients to test which declaration to use for backwards compatibility
+#define RIGCAPS_NOT_CONST 1
+
#define BUILTINFUNC 0
// Our shared secret password
commit a910b16e8f961506d2408ff62632f8afe797f323
Merge: 09ab2819b 4f019e622
Author: Mike Black W9MDB <mdb...@ya...>
Date: Tue Nov 28 07:06:47 2023 -0600
Merge branch 'master' of https://github.com/Hamlib/Hamlib
commit 4f019e622e3c3957e94d5f42de8be93cdc55c6f4
Merge: 46c16b22a c0457a0d7
Author: Michael Black <mdb...@ya...>
Date: Tue Nov 28 07:06:33 2023 -0600
Merge pull request #1434 from pdaderko/master
Fix for iOptron rotator (tested with AZ Mount Pro), added improvements
commit c0457a0d7b8f894baf4f8f2e446f36922cb9c1a1
Author: pdaderko <pda...@ya...>
Date: Tue Nov 28 05:07:00 2023 -0500
Fixed functionality (AZ Mount Pro), added improvements
Updated code to work with current AZ Mount Pro firmware.
Current firmware uses serial at 115200.
Original code looked for # delimiter on responses, but not all responses end in #. This caused the software to timeout, which caused slow response time, and in some cases returned a failure (including :MountInfo# used at open). All responses have fixed length replies, so code updated to look at fixed length data rather than delimiter.
Added workarounds for a couple firmware bugs.
Minor cleanup.
diff --git a/rotators/ioptron/rot_ioptron.c b/rotators/ioptron/rot_ioptron.c
index ef4abbf15..3336914ce 100644
--- a/rotators/ioptron/rot_ioptron.c
+++ b/rotators/ioptron/rot_ioptron.c
@@ -38,10 +38,9 @@
* ioptron_transaction
*
* cmdstr - Command to be sent to the rig.
- * data - Buffer for reply string. Can be NULL, indicating that no reply is
- * is needed, but answer will still be read.
- * data_len - in: Size of buffer. It is the caller's responsibily to provide
- * a large enough buffer for all possible replies for a command.
+ * data - Buffer for reply string.
+ * resp_len - in: Expected length of response. It is the caller's responsibily to
+ * provide a buffer at least 1 byte larger than this for null terminator.
*
* COMMANDS note: as of 12/2018 a mixture of V2 and V3
* | TTTTTTTT(T) .01 arc seconds
@@ -62,136 +61,103 @@
*/
static int
-ioptron_transaction(ROT *rot, const char *cmdstr,
- char *data, size_t data_len)
+ioptron_transaction(ROT *rot, const char *cmdstr, char *data, size_t resp_len)
{
struct rot_state *rs;
- int retval;
- int retry_read = 0;
- char replybuf[BUFSZ];
+ int retval = 0;
+ int retry_read;
rs = &rot->state;
-transaction_write:
+ for (retry_read = 0; retry_read <= rot->state.rotport.retry; retry_read++)
+ {
+ rig_flush(&rs->rotport);
- rig_flush(&rs->rotport);
+ if (cmdstr)
+ {
+ retval = write_block(&rs->rotport, (unsigned char *) cmdstr, strlen(cmdstr));
- if (cmdstr)
- {
- retval = write_block(&rs->rotport, (unsigned char *) cmdstr, strlen(cmdstr));
+ if (retval != RIG_OK)
+ {
+ return retval;
+ }
+ }
- if (retval != RIG_OK)
+ /** the answer */
+ memset(data, 0, resp_len+1);
+ retval = read_block(&rs->rotport, (unsigned char *) data, resp_len);
+ /** if expected number of bytes received, return OK status */
+ if (retval == resp_len)
{
- goto transaction_quit;
+ return RIG_OK;
}
}
- /** Always read the reply to know whether the cmd went OK */
- if (!data)
- {
- data = replybuf;
- }
+ /** if got here, retry loop failed */
+ rig_debug(RIG_DEBUG_ERR, "%s: unexpected response, len %d: '%s'\n", __func__, retval, data);
- if (!data_len)
- {
- data_len = BUFSZ;
- }
+ return -RIG_EPROTO;
+}
+
+/** get mount type code, initializes mount */
+static const char *
+ioptron_get_info(ROT *rot)
+{
+ static char info[32];
+ char str[6];
+ int retval;
- /** the answer */
- memset(data, 0, data_len);
- retval = read_string(&rs->rotport, (unsigned char *) data, data_len, ACK,
- strlen(ACK), 0, 1);
+ rig_debug(RIG_DEBUG_TRACE, "%s called\n", __func__);
- if (retval < 0)
- {
- if (retry_read++ < rot->state.rotport.retry)
- {
- goto transaction_write;
- }
+ retval = ioptron_transaction(rot, ":MountInfo#", str, 4);
- goto transaction_quit;
- }
+ rig_debug(RIG_DEBUG_TRACE, "retval, RIG_OK str %d %d %str\n", retval, RIG_OK,
+ str);
- /** check for acknowledge */
- if (retval < 1)
- {
- rig_debug(RIG_DEBUG_ERR, "%s: unexpected response, len %d: '%s'\n", __func__,
- retval, data);
- return -RIG_EPROTO;
- }
+ SNPRINTF(info, sizeof(info), "MountInfo %s", str);
- retval = RIG_OK;
-transaction_quit:
- return retval;
+ return info;
}
/**
* Opens the Port and sets all needed parameters for operation
* as of 12/2018 initiates mount with V3 :MountInfo#
*/
-static int ioptron_open(ROT *rot)
-{
- rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
-
- return ioptron_transaction(rot, ":Mountinfo#", NULL, 0);
-}
-
-/** sets mount position, requires 4 steps
- * set azmiuth
- * set altitude
- * goto set
- * stop tracking - mount starts tracking after goto
- */
static int
-ioptron_set_position(ROT *rot, azimuth_t az, elevation_t el)
+ioptron_open(ROT *rot)
{
- char cmdstr[32];
- char retbuf[10];
+ const char *info;
int retval;
- float faz, fel;
-
- rig_debug(RIG_DEBUG_TRACE, "%s called: %f %f\n", __func__, az, el);
-
- /* units .01 arc sec */
- faz = az * 360000;
- fel = el * 360000;
- /* set azmiuth, returns '1" if OK */
- SNPRINTF(cmdstr, sizeof(cmdstr), ":Sz%09.0f#", faz);
- retval = ioptron_transaction(rot, cmdstr, retbuf, sizeof(retbuf));
-
- if (retval != RIG_OK || retbuf[0] != ACK1)
- {
- return -RIG_EPROTO;
- }
-
- /* set altitude, returns '1" if OK */
- SNPRINTF(cmdstr, sizeof(cmdstr), ":Sa+%08.0f#", fel);
- retval = ioptron_transaction(rot, cmdstr, retbuf, sizeof(retbuf));
+ char retbuf[10];
+
+ rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
- if (retval != RIG_OK || retbuf[0] != ACK1)
+ info = ioptron_get_info(rot);
+ /* ioptron_get_info returns "MountInfo xxxx", check model number from string */
+ /* string of 4 numeric digits is likely model number */
+ if ((strlen(&info[10]) != 4) || (strspn(&info[10], "1234567890") != 4))
{
- return -RIG_EPROTO;
+ return -RIG_ETIMEOUT;
}
- /* move to set target, V2 command, returns '1" if OK */
- SNPRINTF(cmdstr, sizeof(cmdstr), ":MS#"); //
- retval = ioptron_transaction(rot, cmdstr, retbuf, sizeof(retbuf));
+ /** stops tracking, returns "1" if OK */
+ retval = ioptron_transaction(rot, ":ST0#", retbuf, 1);
if (retval != RIG_OK || retbuf[0] != ACK1)
{
return -RIG_EPROTO;
}
- /* stop tracking, V2 command, returns '1" if OK */
- SNPRINTF(cmdstr, sizeof(cmdstr), ":ST0#");
- retval = ioptron_transaction(rot, cmdstr, retbuf, sizeof(retbuf));
+ /** set alt limit to -1 since firmware bug sometimes doesn't allow alt of 0 when limit is 0 */
+ /** returns "1" if OK */
+ retval = ioptron_transaction(rot, ":SAL-01#", retbuf, 1);
if (retval != RIG_OK || retbuf[0] != ACK1)
{
return -RIG_EPROTO;
}
-
- return retval;
+
+ return RIG_OK;
}
/** gets current position */
@@ -205,9 +171,9 @@ ioptron_get_position(ROT *rot, azimuth_t *az, elevation_t *el)
rig_debug(RIG_DEBUG_TRACE, "%s called\n", __func__);
/** Get Az-Alt */
- retval = ioptron_transaction(rot, ":GAC#", posbuf, sizeof(posbuf));
+ retval = ioptron_transaction(rot, ":GAC#", posbuf, 19);
- if (retval != RIG_OK || strlen(posbuf) < 18)
+ if (retval != RIG_OK || strlen(posbuf) < 19)
{
return retval < 0 ? retval : -RIG_EPROTO;
}
@@ -218,6 +184,8 @@ ioptron_get_position(ROT *rot, azimuth_t *az, elevation_t *el)
}
/** convert from .01 arc sec to degrees */
+ /** note that firmware only reports alt between -90 and +90 */
+ /** e.g. both 80 and 100 degrees are read as 80 degrees */
*el = ((elevation_t)w / 360000.);
if (sscanf(posbuf + 9, "%9f", &w) != 1)
@@ -243,7 +211,7 @@ ioptron_stop(ROT *rot)
rig_debug(RIG_DEBUG_TRACE, "%s called\n", __func__);
/** stop slew, returns "1" if OK */
- retval = ioptron_transaction(rot, ":Q#", retbuf, 10);
+ retval = ioptron_transaction(rot, ":Q#", retbuf, 1);
if (retval != RIG_OK || retbuf[0] != ACK1)
{
@@ -251,38 +219,120 @@ ioptron_stop(ROT *rot)
}
/** stops tracking returns "1" if OK */
- retval = ioptron_transaction(rot, ":ST0#", retbuf, 10);
+ retval = ioptron_transaction(rot, ":ST0#", retbuf, 1);
if (retval != RIG_OK || retbuf[0] != ACK1)
{
return -RIG_EPROTO;
}
- return retval;
+ return RIG_OK;
}
-/** get mount type code, initializes mount */
-static const char *
-ioptron_get_info(ROT *rot)
+/** sets mount position, requires 4 steps
+ * set azmiuth
+ * set altitude
+ * goto set
+ * stop tracking - mount starts tracking after goto
+ */
+static int
+ioptron_set_position(ROT *rot, azimuth_t az, elevation_t el)
{
- static char info[32];
- char str[6];
+ char cmdstr[32];
+ char retbuf[10];
int retval;
+ double faz, fel;
+ azimuth_t curr_az;
+ elevation_t curr_el;
- rig_debug(RIG_DEBUG_TRACE, "%s called\n", __func__);
+ rig_debug(RIG_DEBUG_TRACE, "%s called: %f %f\n", __func__, az, el);
+
+ /* units .01 arc sec */
+ faz = az * 360000;
+ fel = el * 360000;
- retval = ioptron_transaction(rot, ":MountInfo#", str, sizeof(str));
+ /** Firmware bug: (at least for AZ Mount Pro as of FW 20200305)
+ * azimuth has problems going to 0
+ * going to 0 from <=180 causes it to overshoot 0 and never stop
+ * going to 0 from >180 causes it to make a hard stop at 0 and a following
+ * command to <= 180 will make it rotate forever until manually stopped,
+ * and require resetting the mount for azimuth to work correctly again
+ * similar behavior is seen the other direction (>180 to 360 goes past 360,
+ * <=180 to 360 makes a hard stop with the possibility of loss of
+ * azimuth control)
+ * Workaround:
+ * get current position, if 0 is requested, go to 0.01 arcseconds away from
+ * 0 from the same direction (e.g. go to 0.01 arcseconds if currently <= 180,
+ * 129599999 arcseconds if currently > 180)
+ */
+ if (faz == 0)
+ {
+ /* make sure stopped */
+ retval = ioptron_stop(rot);
+ if (retval != RIG_OK)
+ {
+ return -RIG_EPROTO;
+ }
+
+ /* get current position */
+ retval = ioptron_get_position(rot, &curr_az, &curr_el);
+ if (retval != RIG_OK)
+ {
+ return -RIG_EPROTO;
+ }
- rig_debug(RIG_DEBUG_TRACE, "retval, RIG_OK str %d %d %str\n", retval, RIG_OK,
- str);
+ if (curr_az <= 180)
+ {
+ faz = 1;
+ }
+ else
+ {
+ faz = 129599999; /* needs double precision float */
+ }
+ }
+
+ /* set azmiuth, returns '1" if OK */
+ SNPRINTF(cmdstr, sizeof(cmdstr), ":Sz%09.0f#", faz);
+ retval = ioptron_transaction(rot, cmdstr, retbuf, 1);
- SNPRINTF(info, sizeof(info), "MountInfo %s", str);
+ if (retval != RIG_OK || retbuf[0] != ACK1)
+ {
+ return -RIG_EPROTO;
+ }
- return info;
+ /* set altitude, returns '1" if OK */
+ SNPRINTF(cmdstr, sizeof(cmdstr), ":Sa+%08.0f#", fel);
+ retval = ioptron_transaction(rot, cmdstr, retbuf, 1);
+
+ if (retval != RIG_OK || retbuf[0] != ACK1)
+ {
+ return -RIG_EPROTO;
+ }
+
+ /* move to set target, V2 command, returns '1" if OK */
+ SNPRINTF(cmdstr, sizeof(cmdstr), ":MS#"); //
+ retval = ioptron_transaction(rot, cmdstr, retbuf, 1);
+
+ if (retval != RIG_OK || retbuf[0] != ACK1)
+ {
+ return -RIG_EPROTO;
+ }
+
+ /* stop tracking, V2 command, returns '1" if OK */
+ SNPRINTF(cmdstr, sizeof(cmdstr), ":ST0#");
+ retval = ioptron_transaction(rot, cmdstr, retbuf, 1);
+
+ if (retval != RIG_OK || retbuf[0] != ACK1)
+ {
+ return -RIG_EPROTO;
+ }
+
+ return retval;
}
+
/** *************************************************************************
*
* ioptron mount capabilities.
@@ -304,7 +354,7 @@ const struct rot_caps ioptron_rot_caps =
.rot_type = ROT_TYPE_AZEL,
.port_type = RIG_PORT_SERIAL,
.serial_rate_min = 9600,
- .serial_rate_max = 9600,
+ .serial_rate_max = 115200,
.serial_data_bits = 8,
.serial_stop_bits = 1,
.serial_parity = RIG_PARITY_NONE,
commit 09ab2819b3b66936e7a7d73d832660fc59354643
Author: Mike Black W9MDB <mdb...@ya...>
Date: Mon Nov 27 11:39:09 2023 -0600
Add better error info to serial error
diff --git a/src/serial.c b/src/serial.c
index 7c46b0b0e..2d14b5852 100644
--- a/src/serial.c
+++ b/src/serial.c
@@ -227,7 +227,7 @@ int HAMLIB_API serial_open(hamlib_port_t *rp)
if (fd == -1) // some serial ports fail to open 1st time for some unknown reason
{
- rig_debug(RIG_DEBUG_WARN, "%s(%d): open failed#%d\n", __func__, __LINE__, i);
+ rig_debug(RIG_DEBUG_WARN, "%s(%d): open failed#%d %s\n", __func__, __LINE__, i, strerror(errno));
hl_usleep(500 * 1000);
fd = OPEN(rp->pathname, O_RDWR | O_NOCTTY | O_NDELAY);
}
commit 46c16b22a0bbce4acd5d25a6bcdcac69708a588e
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sun Nov 26 12:41:26 2023 -0600
Fix compile warning
diff --git a/src/network.c b/src/network.c
index 0ccf60990..4f155e03e 100644
--- a/src/network.c
+++ b/src/network.c
@@ -1046,7 +1046,7 @@ int is_wireless_linux(const char *ifname)
int sock = socket(AF_INET, SOCK_DGRAM, 0);
struct iwreq pwrq;
memset(&pwrq, 0, sizeof(pwrq));
- strncpy(pwrq.ifr_name, ifname, IFNAMSIZ);
+ strncpy(pwrq.ifr_name, ifname, IFNAMSIZ-1);
if (ioctl(sock, SIOCGIWNAME, &pwrq) != -1)
{
commit 698cb10ff3a5921454924f0f5e05534ba21b55bd
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sat Nov 25 22:33:07 2023 -0600
Re-enable extra get_freq so see if it fixes timeout problem on IC-7100
diff --git a/src/rig.c b/src/rig.c
index 9dec89c4e..4fc6e6d32 100644
--- a/src/rig.c
+++ b/src/rig.c
@@ -2389,7 +2389,7 @@ int HAMLIB_API rig_get_freq(RIG *rig, vfo_t vfo, freq_t *freq)
RETURNFUNC(-RIG_ENAVAIL);
}
-#if 0 // this seems redundant as we ask for freq a few lines below
+#if 1 // this seems redundant as we ask for freq a few lines below
HAMLIB_TRACE;
retcode = caps->get_freq(rig, vfo, freq);
commit 9c01045356a29622857ca7338329903317123a83
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sat Nov 25 15:05:42 2023 -0600
Fix HOMEPATH for Windows hamlib_settings file
diff --git a/src/settings.c b/src/settings.c
index e51803741..28940ba17 100644
--- a/src/settings.c
+++ b/src/settings.c
@@ -1030,7 +1030,12 @@ HAMLIB_EXPORT(int) rig_settings_get_path(char *path, int pathlen)
const char *xdgpath = getenv("XDG_CONFIG_HOME");
char *home = getenv("HOME");
- if (home == NULL) home = "?HOME";
+ if (home == NULL) {
+ home = getenv("HOMEPATH");
+ }
+ if (home == NULL) {
+ home = "?HOME";
+ }
snprintf(path, pathlen, "%s/.config", home);
if (xdgpath)
commit 30f47cdeba342f80905a1c73a9b9afc3fa59dbc3
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sat Nov 25 09:29:01 2023 -0600
Update Icom simulators for better behavior at rigctl shutdown
diff --git a/simulators/simic275.c b/simulators/simic275.c
index 388ddd2f7..6f4b3ccc0 100644
--- a/simulators/simic275.c
+++ b/simulators/simic275.c
@@ -103,7 +103,7 @@ again:
}
}
- printf("Error??? c=x%02x\n", c);
+ printf("Error %s\n", strerror(errno));
return 0;
}
@@ -113,6 +113,12 @@ void frameParse(int fd, unsigned char *frame, int len)
double freq;
int n = 0;
+ if (len == 0)
+ {
+ printf("%s: len==0\n", __func__);
+ return;
+ }
+
dumphex(frame, len);
if (frame[0] != 0xfe && frame[1] != 0xfe)
diff --git a/simulators/simic7000.c b/simulators/simic7000.c
index 388ddd2f7..6f4b3ccc0 100644
--- a/simulators/simic7000.c
+++ b/simulators/simic7000.c
@@ -103,7 +103,7 @@ again:
}
}
- printf("Error??? c=x%02x\n", c);
+ printf("Error %s\n", strerror(errno));
return 0;
}
@@ -113,6 +113,12 @@ void frameParse(int fd, unsigned char *frame, int len)
double freq;
int n = 0;
+ if (len == 0)
+ {
+ printf("%s: len==0\n", __func__);
+ return;
+ }
+
dumphex(frame, len);
if (frame[0] != 0xfe && frame[1] != 0xfe)
dif...
[truncated message content] |
|
From: n0nb <n0...@us...> - 2023-11-19 06:42:06
|
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 bb87d92f43f2f0599e1e573907daf33a6b50286f (commit)
via eff7d97c64c1ae43179487ebb245098fa0deb3da (commit)
via 58fdb4423f3645b2847809d5371520f506348690 (commit)
via 85f828b19f80c169f8e0a0669c27d1860dee40f2 (commit)
via 41a1da795cbb7670a11e146d4464451a2d4be330 (commit)
via deebca4eaf3fa0e00d6b886c33b9ca36eaba1353 (commit)
via 7d9ef323d76e72bcdc6ba0f6684ab97873ad9e92 (commit)
via 43545e171a6bbd366e40891cb0349256aaf17b46 (commit)
via 16488d3267b93219c70bc302d63a05b9dd54b38d (commit)
via c1780b19f4a30697588da277db579825f3698516 (commit)
via cb34dc3b207022410d8c44971e285997c05a29c1 (commit)
via 4f0393d6add63b0c1460d3f36d32376c5e12116d (commit)
via e8d387d51c552c014b19fc2acebfc4b3de871d13 (commit)
via 1fce7ced5be4701a067cf4a9e52b88ac9c0f5922 (commit)
via 512c82649e4f80d696938bd7843ea8fa2b2444ca (commit)
via c348632b262c17121867457f685d06a3111727a2 (commit)
via 8478367223f611a4fbc2e677a577664c5611db9c (commit)
via f57b7cba71e48dfb3aef258f5e492d2cf06db711 (commit)
via 723b835fdde16c774deaa51ba2be39e47436d0e5 (commit)
via d868f1a545a753f1b8b1c47b30ae0383b3ff4483 (commit)
via 394cb4cbcf53971ac5f5e2ede0b0c488be989528 (commit)
via b1b567d64a7d65584377926fa0818fde3b6abf18 (commit)
via 176c49240d5d3006a02db2d2db4ef84c6209825b (commit)
via e05b79acd311caf0c2c9a14a8711881566a1362a (commit)
via e19bdc3d564a774afa853bf8ba9f16a543b68942 (commit)
from e7786cee4c4e15aeba8a551622342f4b090a3059 (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 bb87d92f43f2f0599e1e573907daf33a6b50286f
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sat Nov 18 10:39:58 2023 -0600
Update simts950 and simts990
diff --git a/simulators/simts950.c b/simulators/simts950.c
index bcf8f8053..c0296fce6 100644
--- a/simulators/simts950.c
+++ b/simulators/simts950.c
@@ -391,6 +391,10 @@ int main(int argc, char *argv[])
continue;
}
+ else if (strcmp(buf, "RX;") == 0)
+ {
+ ptt = ptt_mic = ptt_data = ptt_tune = 0;
+ }
else if (strlen(buf) > 0)
{
fprintf(stderr, "Unknown command: %s\n", buf);
diff --git a/simulators/simts990.c b/simulators/simts990.c
index a3198b475..24d265e9b 100644
--- a/simulators/simts990.c
+++ b/simulators/simts990.c
@@ -394,6 +394,10 @@ int main(int argc, char *argv[])
{
continue;
}
+ else if (strcmp(buf, "RX;") == 0)
+ {
+ ptt = ptt_mic = ptt_data = ptt_tune = 0;
+ }
else if (strncmp(buf, "TX", 2) == 0)
{
ptt = ptt_mic = ptt_data = ptt_tune = 0;
commit eff7d97c64c1ae43179487ebb245098fa0deb3da
Author: Mike Black W9MDB <mdb...@ya...>
Date: Fri Nov 17 00:07:04 2023 -0600
Update rigctl.1
diff --git a/doc/man1/rigctl.1 b/doc/man1/rigctl.1
index 6937cb267..771051601 100644
--- a/doc/man1/rigctl.1
+++ b/doc/man1/rigctl.1
@@ -1282,11 +1282,11 @@ option above, will terminate each command string sent to the radio. This
character should not be a part of the input string.
.
.TP
-.BR W ", " send_cmd_rx " \(aq" \fICmd\fP\(aq " " \fI[nbytes or terminator char\FP
+.BR W ", " send_cmd_rx " \(aq" \fICmd\fP\(aq " " \fInbytes_or_terminator_char\fP
Send a raw command string to the radio and expect nbytes returned or the terminator char (e.g. ;).
.IP
This is useful for testing and troubleshooting radio commands and responses when
-developing a backend. If the # of bytes requested is <= the number actually returned no timeout will occur.
+developing a backend. If the # of bytes requested is <= the number actually returned no timeout will occur. If a char is provided it will be used to terminate reading the string so ';' is popular for Kenwood/Yaesu commands for example.
.IP
The command argument can have no spaces in it.
For binary protocols enter values as \\0xAA\\0xBB. Expect a
commit 58fdb4423f3645b2847809d5371520f506348690
Author: Mike Black W9MDB <mdb...@ya...>
Date: Thu Nov 16 16:37:03 2023 -0600
Add callback.c test
diff --git a/tests/callback.c b/tests/callback.c
new file mode 100644
index 000000000..57cada2af
--- /dev/null
+++ b/tests/callback.c
@@ -0,0 +1,42 @@
+int callback(const struct rig_caps *caps, rig_ptr_t rigp)
+{
+ RIG *rig = (RIG *) rigp;
+
+ rig = rig_init(caps->rig_model);
+
+ if (!rig)
+ {
+ fprintf(stderr, "Unknown rig num: %u\n", caps->rig_model);
+ fprintf(stderr, "Please check riglist.h\n");
+ exit(1); /* whoops! something went wrong (mem alloc?) */
+ }
+
+ const char *port = "/dev/pts/3";
+ strcpy(rig->state.rigport.pathname, port);
+
+ printf("%20s:", caps->model_name);
+ fflush(stdout);
+ struct timeval start, end;
+ gettimeofday(&start, NULL);
+ rig_open(rig);
+ gettimeofday(&end, NULL);
+ double dstart = start.tv_sec + start.tv_usec / 1e6;
+ double dend = end.tv_sec + end.tv_usec / (double)1e6;
+ printf(" %.1f\n", dend - dstart);
+
+ rig_close(rig); /* close port */
+ rig_cleanup(rig); /* if you care about memory */
+ return 1;
+}
+
+int main(int argc, char *argv[])
+{
+ RIG rig;
+ printf("testing rig timeouts when rig powered off\n");
+
+ /* Turn off backend debugging output */
+ rig_set_debug_level(RIG_DEBUG_NONE);
+ rig_load_all_backends();
+ rig_list_foreach(callback, &rig);
+ return 0;
+}
commit 85f828b19f80c169f8e0a0669c27d1860dee40f2
Author: Mike Black W9MDB <mdb...@ya...>
Date: Thu Nov 16 16:33:32 2023 -0600
Add sim.h
diff --git a/rigs/icom/icom.c b/rigs/icom/icom.c
index 2370ff947..ccdb2957e 100644
--- a/rigs/icom/icom.c
+++ b/rigs/icom/icom.c
@@ -7462,7 +7462,8 @@ int icom_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status)
case RIG_FUNC_DUAL_WATCH:
if ((RIG_IS_IC9100) ||
- (RIG_IS_IC9700))
+ (RIG_IS_IC9700) ||
+ (RIG_IS_ID5100))
{
fct_cn = C_CTL_FUNC;
fct_sc = S_MEM_DUALMODE;
diff --git a/rigs/icom/id5100.c b/rigs/icom/id5100.c
index 613ebcf9a..637fe7afc 100644
--- a/rigs/icom/id5100.c
+++ b/rigs/icom/id5100.c
@@ -154,7 +154,7 @@ int id5100_set_vfo(RIG *rig, vfo_t vfo)
if (vfo == RIG_VFO_A || vfo == RIG_VFO_B)
{
// and 0x25 works in this mode
- priv->x25cmdfails = 0;
+ priv->x25cmdfails = 1;
if (priv->dual_watch)
{
@@ -222,6 +222,24 @@ int id5100_set_split_vfo(RIG *rig, vfo_t vfo, split_t split, vfo_t tx_vfo)
return retval;
}
+int id5100_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status)
+{
+ unsigned char ackbuf[MAXFRAMELEN];
+ int ack_len = sizeof(ackbuf), retval;
+ int fct_cn, fct_sc; /* Command Number, Subcommand */
+ unsigned char fctbuf[MAXFRAMELEN];
+ int fct_len = 0;
+
+ const struct icom_priv_caps *priv_caps = rig->caps->priv;
+ const struct cmdparams *extcmds = priv_caps->extcmds;
+ int i;
+
+ rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
+ ENTERFUNC;
+
+ value_t value;
+ RETURNFUNC(icom_get_func(rig, vfo, func, status));
+}
/*
*/
static struct icom_priv_caps id5100_priv_caps =
@@ -237,7 +255,7 @@ const struct rig_caps id5100_caps =
RIG_MODEL(RIG_MODEL_ID5100),
.model_name = "ID-5100",
.mfg_name = "Icom",
- .version = BACKEND_VER ".6",
+ .version = BACKEND_VER ".7",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_MOBILE,
@@ -344,7 +362,7 @@ const struct rig_caps id5100_caps =
.decode_event = icom_decode_event,
.set_func = icom_set_func,
- .get_func = icom_get_func,
+ .get_func = id5100_get_func,
.set_level = icom_set_level,
.get_level = icom_get_level,
.set_parm = icom_set_parm,
diff --git a/simulators/sim.h b/simulators/sim.h
new file mode 100644
index 000000000..fda16b2e7
--- /dev/null
+++ b/simulators/sim.h
@@ -0,0 +1,20 @@
+#include "../src/misc.h"
+#include <errno.h>
+
+#define WRITE(f,b,l) write_sim(f,(const unsigned char*)b,l,__func__,__LINE__)
+
+int write_sim(int fd, const unsigned char *buf, int buflen, const char *func,
+ int linenum)
+{
+ int n;
+ dump_hex(buf, buflen);
+ n = write(fd, buf, buflen);
+
+ if (n <= 0)
+ {
+ fprintf(stderr, "%s(%d) buf='%s' write error %d: %s\n", func, linenum, buf, n,
+ strerror(errno));
+ }
+
+ return n;
+}
commit 41a1da795cbb7670a11e146d4464451a2d4be330
Author: Mike Black W9MDB <mdb...@ya...>
Date: Thu Nov 16 15:42:52 2023 -0600
Fix build for Apple
https://github.com/Hamlib/Hamlib/issues/1430
diff --git a/src/network.c b/src/network.c
index aeba822ee..0ccf60990 100644
--- a/src/network.c
+++ b/src/network.c
@@ -1034,6 +1034,7 @@ int is_wireless()
return 0;
}
#else
+#ifndef __APPLE__
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <unistd.h>
@@ -1084,6 +1085,7 @@ int is_wireless()
return 0;
}
#endif
+#endif
void *multicast_receiver(void *arg)
commit deebca4eaf3fa0e00d6b886c33b9ca36eaba1353
Author: Mike Black W9MDB <mdb...@ya...>
Date: Thu Nov 16 15:12:01 2023 -0600
Remove voice functions from IC275 -- rig does not have them
diff --git a/rigs/icom/ic275.c b/rigs/icom/ic275.c
index e3c9561a4..89a4c330a 100644
--- a/rigs/icom/ic275.c
+++ b/rigs/icom/ic275.c
@@ -143,8 +143,6 @@ const struct rig_caps ic275_caps =
.set_mode = icom_set_mode,
.get_mode = icom_get_mode,
.set_vfo = icom_set_vfo,
- .send_voice_mem = icom_send_voice_mem,
- .stop_voice_mem = icom_stop_voice_mem,
.decode_event = icom_decode_event,
.set_mem = icom_set_mem,
commit 7d9ef323d76e72bcdc6ba0f6684ab97873ad9e92
Author: Mike Black W9MDB <mdb...@ya...>
Date: Thu Nov 16 14:40:54 2023 -0600
Add some needed enums
diff --git a/include/hamlib/rig.h b/include/hamlib/rig.h
index a0cb2486f..c524dd42c 100644
--- a/include/hamlib/rig.h
+++ b/include/hamlib/rig.h
@@ -2256,6 +2256,7 @@ enum rig_function_e {
RIG_FUNCTION_IS_ASYNC_FRAME,
RIG_FUNCTION_PROCESS_ASYNC_FRAME,
RIG_FUNCTION_GET_CONF2,
+ RIG_FUNCTION_STOP_VOICE_MEM,
};
/**
@@ -2274,7 +2275,8 @@ enum rig_caps_int_e {
RIG_CAPS_RIG_MODEL,
RIG_CAPS_PORT_TYPE,
RIG_CAPS_PTT_TYPE,
- RIG_CAPS_HAS_GET_LEVEL
+ RIG_CAPS_HAS_GET_LEVEL,
+ RIG_CAPS_HAS_SET_LEVEL,
};
enum rig_caps_cptr_e {
commit 43545e171a6bbd366e40891cb0349256aaf17b46
Author: Mike Black W9MDB <mdb...@ya...>
Date: Thu Nov 16 14:40:25 2023 -0600
Fix debug statement for mingw
diff --git a/src/misc.c b/src/misc.c
index c1c91d308..2e2837050 100644
--- a/src/misc.c
+++ b/src/misc.c
@@ -2676,7 +2676,7 @@ uint64_t HAMLIB_API rig_get_caps_int(rig_model_t rig_model,
return caps->port_type;
case RIG_CAPS_HAS_GET_LEVEL:
- rig_debug(RIG_DEBUG_TRACE, "%s(%d): return %8lx\n", __func__, __LINE__, caps->has_get_level);
+ rig_debug(RIG_DEBUG_TRACE, "%s(%d): return %08"PRIll"\n", __func__, __LINE__, caps->has_get_level);
return caps->has_get_level;
default:
commit 16488d3267b93219c70bc302d63a05b9dd54b38d
Author: Mike Black W9MDB <mdb...@ya...>
Date: Thu Nov 16 09:16:26 2023 -0600
Add -liphlpapi to configure.ac for mingw build
https://github.com/Hamlib/Hamlib/issues/1409
diff --git a/configure.ac b/configure.ac
index 25f53c6bf..78fa890fe 100644
--- a/configure.ac
+++ b/configure.ac
@@ -241,7 +241,7 @@ AC_CHECK_FUNC([gethostbyname],
[],
[AC_CHECK_LIB([ws2_32],
[main],
- [NET_LIBS="$NET_LIBS -lws2_32"],
+ [NET_LIBS="$NET_LIBS -lws2_32 -liphlpapi"],
[],
[])
])
commit c1780b19f4a30697588da277db579825f3698516
Author: Mike Black W9MDB <mdb...@ya...>
Date: Thu Nov 16 09:05:29 2023 -0600
Add wireless detection for multicast address -- possible fix for UDP error messages by using 127.0.0.1 instead of IN_ADDR_ANY
https://github.com/Hamlib/Hamlib/issues/1409
diff --git a/include/hamlib/rig.h b/include/hamlib/rig.h
index 590e91e67..a0cb2486f 100644
--- a/include/hamlib/rig.h
+++ b/include/hamlib/rig.h
@@ -2288,7 +2288,7 @@ enum rig_caps_cptr_e {
* \brief Function to return int value from rig->caps
* Does not support > 32-bit rig_caps values
*/
-extern HAMLIB_EXPORT (long long) rig_get_caps_int(rig_model_t rig_model, enum rig_caps_int_e rig_caps);
+extern HAMLIB_EXPORT (uint64_t) rig_get_caps_int(rig_model_t rig_model, enum rig_caps_int_e rig_caps);
/**
* \brief Function to return char pointer value from rig->caps
diff --git a/simulators/simts990.c b/simulators/simts990.c
index c4918d52a..a3198b475 100644
--- a/simulators/simts990.c
+++ b/simulators/simts990.c
@@ -456,6 +456,11 @@ int main(int argc, char *argv[])
{
sscanf(buf, "OM1%d", &modeSub);
}
+ else if (strcmp(buf,"RM;") == 0)
+ {
+ sprintf(buf, "RM2%04d;", 10);
+ write(fd, buf, strlen(buf));
+ }
else if (strlen(buf) > 0)
{
fprintf(stderr, "Unknown command: %s\n", buf);
diff --git a/src/misc.c b/src/misc.c
index c238e7ada..c1c91d308 100644
--- a/src/misc.c
+++ b/src/misc.c
@@ -2640,7 +2640,7 @@ void *HAMLIB_API rig_get_function_ptr(rig_model_t rig_model,
* \param RIG* and rig_caps_int_e
* \return the corresponding long value -- -RIG_EINVAL is the only error possible
*/
-long long HAMLIB_API rig_get_caps_int(rig_model_t rig_model,
+uint64_t HAMLIB_API rig_get_caps_int(rig_model_t rig_model,
enum rig_caps_int_e rig_caps)
{
const struct rig_caps *caps = rig_get_caps(rig_model);
@@ -2676,6 +2676,7 @@ long long HAMLIB_API rig_get_caps_int(rig_model_t rig_model,
return caps->port_type;
case RIG_CAPS_HAS_GET_LEVEL:
+ rig_debug(RIG_DEBUG_TRACE, "%s(%d): return %8lx\n", __func__, __LINE__, caps->has_get_level);
return caps->has_get_level;
default:
diff --git a/src/network.c b/src/network.c
index a576d90bf..aeba822ee 100644
--- a/src/network.c
+++ b/src/network.c
@@ -983,6 +983,109 @@ void *multicast_publisher(void *arg)
return NULL;
}
+
+#ifdef __MINGW32__
+#include <winsock2.h>
+#include <iphlpapi.h>
+int is_wireless()
+{
+ DWORD dwSize = 0;
+ DWORD dwRetVal = 0;
+ ULONG flags = GAA_FLAG_INCLUDE_PREFIX;
+ PIP_ADAPTER_ADDRESSES pAddresses = NULL, pCurrAddresses = NULL;
+
+ // First call to determine actual memory size needed
+ GetAdaptersAddresses(AF_UNSPEC, flags, NULL, pAddresses, &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)
+ {
+ // printf("Adapter name: %s\n", pCurrAddresses->AdapterName);
+ // printf("Adapter description: %ls\n", pCurrAddresses->Description);
+ // printf("Adapter type: ");
+
+ if (pCurrAddresses->IfType == IF_TYPE_IEEE80211)
+ {
+ // printf("Wireless\n\n");
+ return 1;
+ }
+ else
+ {
+ // printf("Not Wireless\n\n");
+ }
+ }
+ }
+ else
+ {
+ //printf("GetAdaptersAddresses failed with error: %lu\n", dwRetVal);
+ }
+
+ if (pAddresses)
+ {
+ free(pAddresses);
+ }
+
+ return 0;
+}
+#else
+#include <sys/ioctl.h>
+#include <sys/socket.h>
+#include <unistd.h>
+#include <linux/wireless.h>
+#include <ifaddrs.h>
+
+int is_wireless_linux(const char *ifname)
+{
+ int sock = socket(AF_INET, SOCK_DGRAM, 0);
+ struct iwreq pwrq;
+ memset(&pwrq, 0, sizeof(pwrq));
+ strncpy(pwrq.ifr_name, ifname, IFNAMSIZ);
+
+ if (ioctl(sock, SIOCGIWNAME, &pwrq) != -1)
+ {
+ close(sock);
+ return 1; // Wireless
+ }
+
+ close(sock);
+ return 0; // Not wireless
+}
+
+int is_wireless()
+{
+ struct ifaddrs *ifaddr, *ifa;
+
+ if (getifaddrs(&ifaddr) == -1)
+ {
+ perror("getifaddrs");
+ return 0;
+ }
+
+ for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next)
+ {
+ if (ifa->ifa_addr == NULL)
+ {
+ continue;
+ }
+
+ int iswireless = is_wireless_linux(ifa->ifa_name);
+
+ //printf("%s is %s\n", ifa->ifa_name, iswireless ? "wireless" : "not wireless");
+ if (iswireless) {freeifaddrs(ifaddr); return 1;}
+ }
+
+ freeifaddrs(ifaddr);
+ return 0;
+}
+#endif
+
+
void *multicast_receiver(void *arg)
{
char data[4096];
@@ -1024,8 +1127,15 @@ void *multicast_receiver(void *arg)
dest_addr.sin_family = AF_INET;
#ifdef __MINGW32__
// Windows cannot bind to multicast group addresses for some unknown reason
- dest_addr.sin_addr.s_addr = htonl(INADDR_ANY);
- rig_debug(RIG_DEBUG_ERR, "%s(%d): INADDR_ANY=%x,%x\n", htonl(INADDR_ANY), INADDR_ANY);
+ if (is_wireless())
+ {
+ rig_debug(RIG_DEBUG_VERBOSE, "%s: no wireless detect so INADDR_ANY is being used\n", __func__);
+ }
+ else
+ {
+ 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");
+ }
#else
dest_addr.sin_addr.s_addr = inet_addr(args->multicast_addr);
#endif
diff --git a/tests/testrig.c b/tests/testrig.c
index 18eb45a2e..19701f49c 100644
--- a/tests/testrig.c
+++ b/tests/testrig.c
@@ -11,7 +11,7 @@
#include <hamlib/config.h>
-#define SERIAL_PORT "/dev/ttyUSB0"
+#define SERIAL_PORT "/dev/pts/2"
int main(int argc, const char *argv[])
@@ -38,9 +38,9 @@ int main(int argc, const char *argv[])
* allocate memory, setup & open port
*/
+ hamlib_port_t myport;
if (argc < 2)
{
- hamlib_port_t myport;
/* may be overridden by backend probe */
myport.type.rig = RIG_PORT_SERIAL;
myport.parm.serial.rate = 9600;
@@ -48,7 +48,6 @@ int main(int argc, const char *argv[])
myport.parm.serial.stop_bits = 1;
myport.parm.serial.parity = RIG_PARITY_NONE;
myport.parm.serial.handshake = RIG_HANDSHAKE_NONE;
- strncpy(myport.pathname, SERIAL_PORT, HAMLIB_FILPATHLEN - 1);
rig_load_all_backends();
myrig_model = rig_probe(&myport);
@@ -59,6 +58,7 @@ int main(int argc, const char *argv[])
}
my_rig = rig_init(myrig_model);
+ rig_set_conf(my_rig, rig_token_lookup(my_rig, "rig_pathname"), SERIAL_PORT);
if (!my_rig)
{
@@ -77,6 +77,9 @@ int main(int argc, const char *argv[])
exit(2);
}
+ uint64_t levels = rig_get_caps_int(my_rig->caps->rig_model, RIG_CAPS_HAS_GET_LEVEL);
+ printf("HAS_GET_LEVEL=0x%8lx, SWR=%8llx,true=%d\n", levels, levels & RIG_LEVEL_SWR, (levels & RIG_LEVEL_SWR) == RIG_LEVEL_SWR);
+
char val[256];
retcode = rig_get_conf2(my_rig, rig_token_lookup(my_rig, "write_delay"), val,
sizeof(val));
commit cb34dc3b207022410d8c44971e285997c05a29c1
Author: Mike Black W9MDB <mdb...@ya...>
Date: Thu Nov 16 09:02:32 2023 -0600
Add stop_voice_mem to some icom rigs
Also add send_voice_mem to IC275
diff --git a/rigs/icom/ic275.c b/rigs/icom/ic275.c
index 89a4c330a..e3c9561a4 100644
--- a/rigs/icom/ic275.c
+++ b/rigs/icom/ic275.c
@@ -143,6 +143,8 @@ const struct rig_caps ic275_caps =
.set_mode = icom_set_mode,
.get_mode = icom_get_mode,
.set_vfo = icom_set_vfo,
+ .send_voice_mem = icom_send_voice_mem,
+ .stop_voice_mem = icom_stop_voice_mem,
.decode_event = icom_decode_event,
.set_mem = icom_set_mem,
diff --git a/rigs/icom/ic7300.c b/rigs/icom/ic7300.c
index a9a68838e..ad1bf47f2 100644
--- a/rigs/icom/ic7300.c
+++ b/rigs/icom/ic7300.c
@@ -929,6 +929,7 @@ const struct rig_caps ic7300_caps =
.stop_morse = icom_stop_morse,
.wait_morse = rig_wait_morse,
.send_voice_mem = icom_send_voice_mem,
+ .stop_voice_mem = icom_stop_voice_mem,
.set_clock = ic7300_set_clock,
.get_clock = ic7300_get_clock,
.hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS
@@ -1251,6 +1252,7 @@ struct rig_caps ic9700_caps =
.stop_morse = icom_stop_morse,
.wait_morse = rig_wait_morse,
.send_voice_mem = icom_send_voice_mem,
+ .stop_voice_mem = icom_stop_voice_mem,
.set_clock = ic9700_set_clock,
.get_clock = ic9700_get_clock,
.hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS
@@ -1525,6 +1527,7 @@ const struct rig_caps ic705_caps =
.stop_morse = icom_stop_morse,
.wait_morse = rig_wait_morse,
.send_voice_mem = icom_send_voice_mem,
+ .stop_voice_mem = icom_stop_voice_mem,
.hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS
};
@@ -1795,6 +1798,7 @@ const struct rig_caps ic905_caps =
.stop_morse = icom_stop_morse,
.wait_morse = rig_wait_morse,
.send_voice_mem = icom_send_voice_mem,
+ .stop_voice_mem = icom_stop_voice_mem,
.hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS,
};
diff --git a/rigs/icom/ic7610.c b/rigs/icom/ic7610.c
index 1ba953daa..ce327e324 100644
--- a/rigs/icom/ic7610.c
+++ b/rigs/icom/ic7610.c
@@ -603,6 +603,7 @@ struct rig_caps ic7610_caps =
.stop_morse = icom_stop_morse,
.wait_morse = rig_wait_morse,
.send_voice_mem = icom_send_voice_mem,
+ .stop_voice_mem = icom_stop_voice_mem,
.set_clock = ic7610_set_clock,
.get_clock = ic7610_get_clock,
.hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS
diff --git a/rigs/icom/icom.c b/rigs/icom/icom.c
index adf8898ce..2370ff947 100644
--- a/rigs/icom/icom.c
+++ b/rigs/icom/icom.c
@@ -9500,6 +9500,10 @@ int icom_get_level_raw(RIG *rig, setting_t level, int cmd, int subcmd,
RETURNFUNC(RIG_OK);
}
+int icom_stop_voice_mem(RIG *rig, vfo_t vfo)
+{
+ return icom_send_voice_mem(rig, vfo, 0);
+}
/*
* icom_send_voice_mem
* Assumes rig!=NULL, rig->state.priv!=NULL
diff --git a/rigs/icom/icom.h b/rigs/icom/icom.h
index a29cfe221..a16230076 100644
--- a/rigs/icom/icom.h
+++ b/rigs/icom/icom.h
@@ -35,7 +35,7 @@
#include <sys/time.h>
#endif
-#define BACKEND_VER "20231113"
+#define BACKEND_VER "20231116"
#define ICOM_IS_ID31 rig_is_model(rig, RIG_MODEL_ID31)
#define ICOM_IS_ID51 rig_is_model(rig, RIG_MODEL_ID51)
@@ -390,6 +390,7 @@ int icom_mW2power(RIG *rig, float *power, unsigned int mwpower, freq_t freq,
int icom_send_morse(RIG *rig, vfo_t vfo, const char *msg);
int icom_stop_morse(RIG *rig, vfo_t vfo);
int icom_send_voice_mem(RIG *rig, vfo_t vfo, int bank);
+int icom_stop_voice_mem(RIG *rig, vfo_t vfo);
/* Exposed routines */
int icom_get_split_vfos(RIG *rig, vfo_t *rx_vfo, vfo_t *tx_vfo);
int icom_set_raw(RIG *rig, int cmd, int subcmd, int subcmdbuflen,
commit 4f0393d6add63b0c1460d3f36d32376c5e12116d
Author: Mike Black W9MDB <mdb...@ya...>
Date: Wed Nov 15 07:38:13 2023 -0600
Add simic275.c
diff --git a/simulators/simic275.c b/simulators/simic275.c
new file mode 100644
index 000000000..388ddd2f7
--- /dev/null
+++ b/simulators/simic275.c
@@ -0,0 +1,603 @@
+// simicom will show the pts port to use for rigctl on Unix
+// using virtual serial ports on Windows is to be developed yet
+// Needs a lot of improvement to work on all Icoms
+// gcc -g -Wall -o simicom simicom.c -lhamlib
+// On mingw in the hamlib src directory
+// gcc -static -I../include -g -Wall -o simicom simicom.c -L../../build/src/.libs -lhamlib -lwsock32 -lws2_32
+#define _XOPEN_SOURCE 700
+// since we are POSIX here we need this
+#if 0
+struct ip_mreq
+{
+ int dummy;
+};
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <sys/time.h>
+#include <hamlib/rig.h>
+#include "../src/misc.h"
+#include <termios.h>
+#include <unistd.h>
+
+
+#define BUFSIZE 256
+#define X25
+
+int civ_731_mode = 0;
+vfo_t current_vfo = RIG_VFO_A;
+int split = 0;
+
+// we make B different from A to ensure we see a difference at startup
+float freqA = 14074000;
+float freqB = 14074500;
+mode_t modeA = RIG_MODE_PKTUSB;
+mode_t modeB = RIG_MODE_PKTUSB;
+int datamodeA = 0;
+int datamodeB = 0;
+pbwidth_t widthA = 0;
+pbwidth_t widthB = 1;
+ant_t ant_curr = 0;
+int ant_option = 0;
+int ptt = 0;
+int satmode = 0;
+int agc_time = 1;
+int ovf_status = 0;
+int powerstat = 1;
+int transceive = 0;
+int keyspd = 20;
+int rigtime = 1230;
+
+void dumphex(const unsigned char *buf, int n)
+{
+ for (int i = 0; i < n; ++i) { printf("%02x ", buf[i]); }
+
+ printf("\n");
+}
+
+int
+frameGet(int fd, unsigned char *buf)
+{
+ int i = 0, n;
+ memset(buf, 0, BUFSIZE);
+ unsigned char c;
+
+again:
+
+ while (read(fd, &c, 1) > 0)
+ {
+ buf[i++] = c;
+ //printf("i=%d, c=0x%02x\n",i,c);
+
+ if (c == 0xfd)
+ {
+ char mytime[256];
+ date_strget(mytime, sizeof(mytime), 1);
+ printf("%s:", mytime); dumphex(buf, i);
+ // echo
+ n = write(fd, buf, i);
+
+ if (n != i) { printf("%s: error on write: %s\n", __func__, strerror(errno)); }
+
+ return i;
+ }
+
+ if (i > 2 && c == 0xfe)
+ {
+ printf("Turning power on due to 0xfe string\n");
+ powerstat = 1;
+ int j;
+
+ for (j = i; j < 175; ++j)
+ {
+ if (read(fd, &c, 1) < 0) { break; }
+ }
+
+ i = 0;
+ goto again;
+ }
+ }
+
+ printf("Error??? c=x%02x\n", c);
+
+ return 0;
+}
+
+void frameParse(int fd, unsigned char *frame, int len)
+{
+ double freq;
+ int n = 0;
+
+ dumphex(frame, len);
+
+ if (frame[0] != 0xfe && frame[1] != 0xfe)
+ {
+ printf("expected fe fe, got ");
+ dumphex(frame, len);
+ return;
+ }
+
+ switch (frame[4])
+ {
+ case 0x03:
+
+ //from_bcd(frameackbuf[2], (civ_731_mode ? 4 : 5) * 2);
+ if (current_vfo == RIG_VFO_A || current_vfo == RIG_VFO_MAIN)
+ {
+ printf("get_freqA\n");
+ to_bcd(&frame[5], (long long)freqA, (civ_731_mode ? 4 : 5) * 2);
+ }
+ else
+ {
+ printf("get_freqB\n");
+ to_bcd(&frame[5], (long long)freqB, (civ_731_mode ? 4 : 5) * 2);
+ }
+
+ frame[10] = 0xfd;
+
+ if (powerstat)
+ {
+ n = write(fd, frame, 11);
+ }
+
+ break;
+
+ case 0x04:
+ if (current_vfo == RIG_VFO_A || current_vfo == RIG_VFO_MAIN)
+ {
+ printf("get_modeA\n");
+ frame[5] = modeA;
+ frame[6] = widthA;
+ }
+ else
+ {
+ printf("get_modeB\n");
+ frame[5] = modeB;
+ frame[6] = widthB;
+ }
+
+ frame[7] = 0xfd;
+ n = write(fd, frame, 8);
+ break;
+
+ case 0x05:
+ freq = from_bcd(&frame[5], (civ_731_mode ? 4 : 5) * 2);
+ printf("set_freq to %.0f\n", freq);
+
+ if (current_vfo == RIG_VFO_A || current_vfo == RIG_VFO_MAIN) { freqA = freq; }
+ else { freqB = freq; }
+
+ frame[4] = 0xfb;
+ frame[5] = 0xfd;
+ n = write(fd, frame, 6);
+ break;
+
+ case 0x06:
+ if (current_vfo == RIG_VFO_A || current_vfo == RIG_VFO_MAIN) { modeA = frame[6]; }
+ else { modeB = frame[6]; }
+
+ frame[4] = 0xfb;
+ frame[5] = 0xfd;
+ n = write(fd, frame, 6);
+ break;
+
+ case 0x07:
+
+ switch (frame[5])
+ {
+ case 0x00: current_vfo = RIG_VFO_A; break;
+
+ case 0x01: current_vfo = RIG_VFO_B; break;
+
+ case 0xa0: current_vfo = freq = freqA; freqA = freqB; freqB = freq; break;
+
+ case 0xb0: current_vfo = RIG_VFO_MAIN; break;
+
+ case 0xd0: current_vfo = RIG_VFO_MAIN; break;
+
+ case 0xd1: current_vfo = RIG_VFO_SUB; break;
+ }
+
+ printf("set_vfo to %s\n", rig_strvfo(current_vfo));
+
+ frame[4] = 0xfb;
+ frame[5] = 0xfd;
+ n = write(fd, frame, 6);
+ break;
+
+ case 0x0f:
+ if (frame[5] == 0) { split = 0; }
+ else if (frame[5] == 1) { split = 1; }
+ else { frame[6] = split; }
+
+ if (frame[5] == 0xfd)
+ {
+ printf("get split %d\n", 1);
+ frame[7] = 0xfd;
+ n = write(fd, frame, 8);
+ }
+ else
+ {
+ printf("set split %d\n", 1);
+ frame[4] = 0xfb;
+ frame[5] = 0xfd;
+ n = write(fd, frame, 6);
+ }
+
+ break;
+
+ case 0x12: // we're simulating the 3-byte version -- not the 2-byte
+ if (frame[5] != 0xfd)
+ {
+ printf("Set ant %d\n", -1);
+ ant_curr = frame[5];
+ ant_option = frame[6];
+ dump_hex(frame, 8);
+ }
+ else
+ {
+ printf("Get ant\n");
+ }
+
+ frame[5] = ant_curr;
+ frame[6] = ant_option;
+ frame[7] = 0xfd;
+ printf("write 8 bytes\n");
+ dump_hex(frame, 8);
+ n = write(fd, frame, 8);
+ break;
+
+ case 0x14:
+ switch (frame[5])
+ {
+ static int power_level = 0;
+
+ case 0x07:
+ case 0x08:
+ if (frame[6] != 0xfd)
+ {
+ frame[6] = 0xfb;
+ dumphex(frame, 7);
+ n = write(fd, frame, 7);
+ printf("ACK x14 x08\n");
+ }
+ else
+ {
+ to_bcd(&frame[6], (long long)128, 2);
+ frame[8] = 0xfb;
+ dumphex(frame, 9);
+ n = write(fd, frame, 9);
+ printf("SEND x14 x08\n");
+ }
+
+ break;
+
+ case 0x0a:
+ printf("Using power level %d\n", power_level);
+ power_level += 10;
+
+ if (power_level > 250) { power_level = 0; }
+
+ to_bcd(&frame[6], (long long)power_level, 2);
+ frame[8] = 0xfd;
+ n = write(fd, frame, 9);
+ break;
+
+ case 0x0c:
+ dumphex(frame, 10);
+ printf("subcmd=0x0c #1\n");
+
+ if (frame[6] != 0xfd) // then we have data
+ {
+ printf("subcmd=0x0c #1\n");
+ keyspd = from_bcd(&frame[6], 2);
+ frame[6] = 0xfb;
+ n = write(fd, frame, 7);
+ }
+ else
+ {
+ printf("subcmd=0x0c #1\n");
+ to_bcd(&frame[6], keyspd, 2);
+ frame[8] = 0xfd;
+ n = write(fd, frame, 9);
+ }
+
+ break;
+ }
+
+ break;
+
+
+ case 0x15:
+ switch (frame[5])
+ {
+ static int meter_level = 0;
+
+ case 0x07:
+ frame[6] = ovf_status;
+ frame[7] = 0xfd;
+ n = write(fd, frame, 8);
+ ovf_status = ovf_status == 0 ? 1 : 0;
+ break;
+
+ case 0x11:
+ printf("Using meter level %d\n", meter_level);
+ meter_level += 10;
+
+ if (meter_level > 250) { meter_level = 0; }
+
+ to_bcd(&frame[6], (long long)meter_level, 2);
+ frame[8] = 0xfd;
+ n = write(fd, frame, 9);
+ break;
+ }
+
+ case 0x16:
+ switch (frame[5])
+ {
+ case 0x5a:
+ if (frame[6] == 0xfe)
+ {
+ satmode = frame[6];
+ }
+ else
+ {
+ frame[6] = satmode;
+ frame[7] = 0xfd;
+ n = write(fd, frame, 8);
+ }
+
+ break;
+ }
+
+ break;
+
+ case 0x19: // miscellaneous things
+ frame[5] = 0x94;
+ frame[6] = 0xfd;
+ n = write(fd, frame, 7);
+ break;
+
+ case 0x1a: // miscellaneous things
+ switch (frame[5])
+ {
+ case 0x03: // width
+ if (current_vfo == RIG_VFO_A || current_vfo == RIG_VFO_MAIN) { frame[6] = widthA; }
+ else { frame[6] = widthB; }
+
+ frame[7] = 0xfd;
+ n = write(fd, frame, 8);
+ break;
+
+ case 0x04: // AGC TIME
+ printf("frame[6]==x%02x, frame[7]=0%02x\n", frame[6], frame[7]);
+
+ if (frame[6] == 0xfd) // the we are reading
+ {
+ frame[6] = agc_time;
+ frame[7] = 0xfd;
+ n = write(fd, frame, 8);
+ }
+ else
+ {
+ printf("AGC_TIME RESPONSE******************************");
+ agc_time = frame[6];
+ frame[4] = 0xfb;
+ frame[5] = 0xfd;
+ n = write(fd, frame, 6);
+ }
+
+ break;
+
+ case 0x05:
+ // FE FE 70 E0 1A 05 00 92 00 FD
+ printf("0x05 received\n");
+
+ if (frame[6] == 0x00 && frame[7] == 0x92)
+ {
+ if (frame[8] == 0x00)
+ {
+ printf("0x05 0x00 0x92 received\n");
+ transceive = frame[8];
+ frame[6] = 0xfb;
+ frame[7] = 0xfd;
+ n = write(fd, frame, 8);
+ }
+ else
+ {
+ frame[8] = transceive;
+ frame[9] = 0xfb;
+ frame[10] = 0xfd;
+ n = write(fd, frame, 11);
+ }
+ }
+ // FE FE 70 E0 1A 05 00 41 00 FD
+ else if (frame[6] == 0x00 && frame[7] == 0x41)
+ {
+ if (frame[8] != 0xfd)
+ {
+ printf("0x05 0x00 0x41 received\n");
+ rigtime = frame[8] * 100 + frame[9];
+ frame[6] = 0xfb;
+ frame[7] = 0xfd;
+ n = write(fd, frame, 8);
+ }
+ else
+ {
+ frame[8] = rigtime / 100;
+ frame[9] = rigtime % 100;
+ frame[10] = 0xfd;
+ n = write(fd, frame, 11);
+ }
+ }
+
+ break;
+
+ case 0x06: // Data mode
+ if (frame[6] == 0xfd) // then we're replying with mode
+ {
+ frame[6] = datamodeA;
+ frame[7] = 0xfd;
+ n = write(fd, frame, 8);
+ }
+ else
+ {
+ datamodeA = frame[6];
+ frame[4] = 0xfb;
+ frame[5] = 0xfd;
+ n = write(fd, frame, 6);
+ }
+
+ break;
+
+ }
+
+ break;
+
+ case 0x1c:
+ switch (frame[5])
+ {
+ case 0:
+ if (frame[6] == 0xfd)
+ {
+ frame[6] = ptt;
+ frame[7] = 0xfd;
+ n = write(fd, frame, 8);
+ }
+ else
+ {
+ ptt = frame[6];
+ frame[4] = 0xfb;
+ frame[5] = 0xfd;
+ n = write(fd, frame, 6);
+ }
+
+ break;
+
+ }
+
+ break;
+
+
+ case 0x25:
+ printf("x25 send nak\n");
+ frame[4] = 0xfa;
+ frame[5] = 0xfd;
+ n = write(fd, frame, 6);
+ break;
+
+ case 0x26:
+ printf("x26 send nak\n");
+ frame[4] = 0xfa;
+ frame[5] = 0xfd;
+ n = write(fd, frame, 6);
+ break;
+
+ default: printf("cmd 0x%02x unknown\n", frame[4]);
+ }
+
+ if (n == 0) { printf("Write failed=%s\n", strerror(errno)); }
+
+// don't care about the rig type yet
+
+}
+
+#if defined(WIN32) || defined(_WIN32)
+int openPort(char *comport) // doesn't matter for using pts devices
+{
+ int fd;
+ fd = open(comport, O_RDWR);
+
+ if (fd < 0)
+ {
+ perror(comport);
+ }
+
+ return fd;
+}
+
+#else
+int openPort(char *comport) // doesn't matter for using pts devices
+{
+ int fd = posix_openpt(O_RDWR);
+ char *name = ptsname(fd);
+
+ if (name == NULL)
+ {
+ perror("pstname");
+ return -1;
+ }
+
+ printf("name=%s\n", name);
+
+ if (fd == -1 || grantpt(fd) == -1 || unlockpt(fd) == -1)
+ {
+ perror("posix_openpt");
+ return -1;
+ }
+
+ return fd;
+}
+#endif
+
+void rigStatus()
+{
+ char vfoa = current_vfo == RIG_VFO_A ? '*' : ' ';
+ char vfob = current_vfo == RIG_VFO_B ? '*' : ' ';
+ printf("%cVFOA: mode=%d datamode=%d width=%ld freq=%.0f\n", vfoa, modeA,
+ datamodeA,
+ widthA,
+ freqA);
+ printf("%cVFOB: mode=%d datamode=%d width=%ld freq=%.0f\n", vfob, modeB,
+ datamodeB,
+ widthB,
+ freqB);
+}
+
+int main(int argc, char **argv)
+{
+ unsigned char buf[256];
+ int fd = openPort(argv[1]);
+
+ printf("%s: %s\n", argv[0], rig_version());
+ printf("x25/x26 command rejected\n");
+#if defined(WIN32) || defined(_WIN32)
+
+ if (argc != 2)
+ {
+ printf("Missing comport argument\n");
+ printf("%s [comport]\n", argv[0]);
+ exit(1);
+ }
+
+#endif
+
+ while (1)
+ {
+ int len = frameGet(fd, buf);
+
+ if (len <= 0)
+ {
+ close(fd);
+ fd = openPort(argv[1]);
+ }
+
+ if (powerstat)
+ {
+ frameParse(fd, buf, len);
+ }
+ else
+ {
+ hl_usleep(1000 * 1000);
+ }
+
+ rigStatus();
+ }
+
+ return 0;
+}
commit e8d387d51c552c014b19fc2acebfc4b3de871d13
Author: Mike Black W9MDB <mdb...@ya...>
Date: Tue Nov 14 23:54:56 2023 -0600
Update actions in c-cpp.yml
diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml
index 30663e032..52fb2d589 100644
--- a/.github/workflows/c-cpp.yml
+++ b/.github/workflows/c-cpp.yml
@@ -12,7 +12,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v2
+ - uses: actions/checkout@v4
- name: bootstrap
run: |
sudo apt install libusb-1.0-0-dev
commit 1fce7ced5be4701a067cf4a9e52b88ac9c0f5922
Author: Mike Black W9MDB <mdb...@ya...>
Date: Tue Nov 14 23:44:47 2023 -0600
Really fix modeMapGetHamblib in Flrig to find mode in multiple mode list
https://github.com/Hamlib/Hamlib/issues/1428
diff --git a/rigs/dummy/flrig.c b/rigs/dummy/flrig.c
index 7c359d6be..ef2160bce 100644
--- a/rigs/dummy/flrig.c
+++ b/rigs/dummy/flrig.c
@@ -716,7 +716,7 @@ static rmode_t modeMapGetHamlib(const char *modeFLRig)
modeFLRigCheck, modeMap[i].mode_flrig);
if (modeMap[i].mode_flrig
- && strstr(modeMap[i].mode_flrig, modeFLRigCheck) == 0)
+ && strstr(modeMap[i].mode_flrig, modeFLRigCheck))
{
return (modeMap[i].mode_hamlib);
}
diff --git a/simulators/Makefile.am b/simulators/Makefile.am
index ad9879b6b..f383f5ce7 100644
--- a/simulators/Makefile.am
+++ b/simulators/Makefile.am
@@ -8,7 +8,7 @@ DISTCLEANFILES =
bin_PROGRAMS =
-check_PROGRAMS = simelecraft simicgeneric simkenwood simyaesu simic9100 simic9700 simft991 simftdx1200 simftdx3000 simjupiter simpowersdr simid5100 simft736 simftdx5000 simtmd700 simrotorez simspid simft817 simts590 simft847 simic7300 simic7000 simic7100 simic7200 simatd578 simic905 simts450 simic7600 simic7610 simic705 simts950 simts990 simic7851 simftdx101 simxiegug90 simqrplabs simft818
+check_PROGRAMS = simelecraft simicgeneric simkenwood simyaesu simic9100 simic9700 simft991 simftdx1200 simftdx3000 simjupiter simpowersdr simid5100 simft736 simftdx5000 simtmd700 simrotorez simspid simft817 simts590 simft847 simic7300 simic7000 simic7100 simic7200 simatd578 simic905 simts450 simic7600 simic7610 simic705 simts950 simts990 simic7851 simftdx101 simxiegug90 simqrplabs simft818 simic275
simelecraft_SOURCES = simelecraft.c
simkenwood_SOURCES = simkenwood.c
diff --git a/simulators/simft817.c b/simulators/simft817.c
index 00adb9c3a..a77fd3ddf 100644
--- a/simulators/simft817.c
+++ b/simulators/simft817.c
@@ -18,6 +18,7 @@ struct ip_mreq
#define BUFSIZE 256
+int vfo = 0; // 0=A, !0=B
float freqA = 14074000;
float freqB = 14074500;
char tx_vfo = '0';
@@ -121,7 +122,11 @@ again:
case 0x88: printf("PTT OFF\n"); break;
- case 0x07: printf("MODE\n"); break;
+ case 0x07:
+ printf("MODE %0xx\n", buf[0]);
+ if (vfo == 0) modeA = buf[0];
+ else modeB = buf[0];
+ break;
case 0x05: printf("CLAR ON\n"); break;
@@ -129,7 +134,10 @@ again:
case 0xF5: printf("FREQ\n"); break;
- case 0x81: printf("VFO TOGGLE\n"); break;
+ case 0x81:
+ vfo = !vfo;
+ printf("VFO TOGGLE, %s active\n", vfo==0?"VFOA":"VFOB");
+ break;
case 0x02: printf("SPLIT ON\n"); break;
commit 512c82649e4f80d696938bd7843ea8fa2b2444ca
Author: Mike Black W9MDB <mdb...@ya...>
Date: Tue Nov 14 22:55:25 2023 -0600
Fix modeMapGetHamblib in Flrig to find mode in multiple mode list
https://github.com/Hamlib/Hamlib/issues/1428
diff --git a/rigs/dummy/flrig.c b/rigs/dummy/flrig.c
index eb1db8b91..7c359d6be 100644
--- a/rigs/dummy/flrig.c
+++ b/rigs/dummy/flrig.c
@@ -716,7 +716,7 @@ static rmode_t modeMapGetHamlib(const char *modeFLRig)
modeFLRigCheck, modeMap[i].mode_flrig);
if (modeMap[i].mode_flrig
- && strcmp(modeMap[i].mode_flrig, modeFLRigCheck) == 0)
+ && strstr(modeMap[i].mode_flrig, modeFLRigCheck) == 0)
{
return (modeMap[i].mode_hamlib);
}
commit c348632b262c17121867457f685d06a3111727a2
Author: Mike Black W9MDB <mdb...@ya...>
Date: Tue Nov 14 17:03:40 2023 -0600
Add ptt_type to rig->caps when set so it can be queried correctly
diff --git a/src/conf.c b/src/conf.c
index 99fad9154..c6e991c4f 100644
--- a/src/conf.c
+++ b/src/conf.c
@@ -514,26 +514,32 @@ static int frontend_set_conf(RIG *rig, token_t token, const char *val)
if (!strcmp(val, "RIG"))
{
rs->pttport.type.ptt = RIG_PTT_RIG;
+ rig->caps->ptt_type = RIG_PTT_RIG;
}
else if (!strcmp(val, "RIGMICDATA"))
{
rs->pttport.type.ptt = RIG_PTT_RIG_MICDATA;
+ rig->caps->ptt_type = RIG_PTT_RIG_MICDATA;
}
else if (!strcmp(val, "DTR"))
{
rs->pttport.type.ptt = RIG_PTT_SERIAL_DTR;
+ rig->caps->ptt_type = RIG_PTT_SERIAL_DTR;
}
else if (!strcmp(val, "RTS"))
{
rs->pttport.type.ptt = RIG_PTT_SERIAL_RTS;
+ rig->caps->ptt_type = RIG_PTT_SERIAL_RTS;
}
else if (!strcmp(val, "Parallel"))
{
rs->pttport.type.ptt = RIG_PTT_PARALLEL;
+ rig->caps->ptt_type = RIG_PTT_PARALLEL;
}
else if (!strcmp(val, "CM108"))
{
rs->pttport.type.ptt = RIG_PTT_CM108;
+ rig->caps->ptt_type = RIG_PTT_CM108;
}
else if (!strcmp(val, "GPIO"))
{
@@ -542,6 +548,7 @@ static int frontend_set_conf(RIG *rig, token_t token, const char *val)
else if (!strcmp(val, "GPION"))
{
rs->pttport.type.ptt = RIG_PTT_GPION;
+ rig->caps->ptt_type = RIG_PTT_GPION;
}
else if (!strcmp(val, "None"))
{
commit 8478367223f611a4fbc2e677a577664c5611db9c
Author: Mike Black W9MDB <mdb...@ya...>
Date: Tue Nov 14 10:23:14 2023 -0600
Improve rigctld printout when TCP session is aborted
diff --git a/src/network.c b/src/network.c
index a68329149..a576d90bf 100644
--- a/src/network.c
+++ b/src/network.c
@@ -1025,6 +1025,7 @@ void *multicast_receiver(void *arg)
#ifdef __MINGW32__
// Windows cannot bind to multicast group addresses for some unknown reason
dest_addr.sin_addr.s_addr = htonl(INADDR_ANY);
+ rig_debug(RIG_DEBUG_ERR, "%s(%d): INADDR_ANY=%x,%x\n", htonl(INADDR_ANY), INADDR_ANY);
#else
dest_addr.sin_addr.s_addr = inet_addr(args->multicast_addr);
#endif
diff --git a/tests/rigctl_parse.c b/tests/rigctl_parse.c
index 23d14cfe3..9c6b215b0 100644
--- a/tests/rigctl_parse.c
+++ b/tests/rigctl_parse.c
@@ -720,9 +720,18 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc,
{
if ((retcode = scanfc(fin, "%c", &cmd)) < 1)
{
+ if (last_cmd==0)
+ {
+ rig_debug(RIG_DEBUG_WARN, "%s: nothing to scan#1? retcode=%d, last_cmd=[empty]\n",
+ __func__,
+ retcode);
+ }
+ else
+ {
rig_debug(RIG_DEBUG_WARN, "%s: nothing to scan#1? retcode=%d, last_cmd=%c\n",
__func__,
retcode, last_cmd);
+ }
return (RIGCTL_PARSE_ERROR);
}
diff --git a/tests/rigctld.c b/tests/rigctld.c
index 2bce5b814..e82f18cff 100644
--- a/tests/rigctld.c
+++ b/tests/rigctld.c
@@ -867,6 +867,26 @@ int main(int argc, char *argv[])
freeaddrinfo(saved_result); /* No longer needed */
exit(2);
}
+ int optval = 1;
+#ifdef __MINGW32__
+ if (setsockopt(sock_listen, SOL_SOCKET, SO_REUSEADDR, (PCHAR)&optval, sizeof(optval)) < 0)
+#else
+ if (setsockopt(sock_listen, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval)) < 0)
+#endif
+ {
+ rig_debug(RIG_DEBUG_ERR, "%s: error enabling UDP address reuse: %s\n", __func__,
+ strerror(errno));
+ }
+
+ // Windows does not have SO_REUSEPORT. However, SO_REUSEADDR works in a similar way.
+#if defined(SO_REUSEPORT)
+ if (setsockopt(sock_listen, SOL_SOCKET, SO_REUSEPORT, &optval, sizeof(optval)) < 0)
+ {
+ rig_debug(RIG_DEBUG_ERR, "%s: error enabling UDP port reuse: %s\n", __func__,
+ strerror(errno));
+ }
+#endif
+
#if 0
if (setsockopt(sock_listen,
commit f57b7cba71e48dfb3aef258f5e492d2cf06db711
Author: Mike Black W9MDB <mdb...@ya...>
Date: Tue Nov 14 07:42:38 2023 -0600
Revert commit 1c379e793a066c30d35fed99e5fb1a77f7a882f8
Removing LF from here caused "l ?" to not have CR where "L ?" does.
I don't see the problem with a CR to end the printout.
Not sure why this was removed before...bad documentation on my part.
diff --git a/tests/rigctl_parse.c b/tests/rigctl_parse.c
index c47a87fe6..23d14cfe3 100644
--- a/tests/rigctl_parse.c
+++ b/tests/rigctl_parse.c
@@ -3352,7 +3352,7 @@ declare_proto_rig(get_level)
fprintf(fout, "%s%c", s, resp_sep);
}
- //fputc('\n', fout);
+ fputc('\n', fout);
RETURNFUNC2(RIG_OK);
}
level = rig_parse_level(arg1);
commit 723b835fdde16c774deaa51ba2be39e47436d0e5
Author: Mike Black W9MDB <mdb...@ya...>
Date: Tue Nov 14 06:48:41 2023 -0600
Remove bogus set_level in ts590.c for ALC,SWR,COMP
diff --git a/rigs/kenwood/ts590.c b/rigs/kenwood/ts590.c
index 1b80a3831..9a4c1dc48 100644
--- a/rigs/kenwood/ts590.c
+++ b/rigs/kenwood/ts590.c
@@ -564,28 +564,6 @@ static int ts590_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
SNPRINTF(levelbuf, sizeof(levelbuf), "RA%02d", (val.i == 12) ? 1 : 0);
break;
- case RIG_LEVEL_METER:
- switch (val.i)
- {
- case RIG_METER_SWR:
- kenwood_val = 1;
- break;
-
- case RIG_METER_COMP:
- kenwood_val = 2;
- break;
-
- case RIG_METER_ALC:
- kenwood_val = 3;
- break;
-
- default:
- RETURNFUNC(-RIG_EINVAL);
- }
-
- SNPRINTF(levelbuf, sizeof(levelbuf), "RM%d", kenwood_val);
- break;
-
case RIG_LEVEL_CWPITCH:
if (val.i > 1000 || val.i < 300)
{
@@ -1594,7 +1572,7 @@ const struct rig_caps ts590_caps =
RIG_MODEL(RIG_MODEL_TS590S),
.model_name = "TS-590S",
.mfg_name = "Kenwood",
- .version = BACKEND_VER ".9",
+ .version = BACKEND_VER ".10",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
@@ -1792,7 +1770,7 @@ const struct rig_caps fx4_caps =
RIG_MODEL(RIG_MODEL_FX4),
.model_name = "FX4/C/CR/L",
.mfg_name = "BG2FX",
- .version = BACKEND_VER ".8",
+ .version = BACKEND_VER ".9",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
@@ -1986,7 +1964,7 @@ const struct rig_caps ts590sg_caps =
RIG_MODEL(RIG_MODEL_TS590SG),
.model_name = "TS-590SG",
.mfg_name = "Kenwood",
- .version = BACKEND_VER ".6",
+ .version = BACKEND_VER ".7",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
commit d868f1a545a753f1b8b1c47b30ae0383b3ff4483
Author: Mike Black W9MDB <mdb...@ya...>
Date: Mon Nov 13 23:07:57 2023 -0600
Fix FLRig get_bwA/B for rigs that do not have it
https://github.com/Hamlib/Hamlib/issues/1427
diff --git a/rigs/dummy/flrig.c b/rigs/dummy/flrig.c
index a5688ecde..eb1db8b91 100644
--- a/rigs/dummy/flrig.c
+++ b/rigs/dummy/flrig.c
@@ -590,6 +590,8 @@ static int flrig_transaction(RIG *rig, char *cmd, char *cmd_arg, char *value,
// we get an unknown response if function does not exist
if (strstr(xml, "unknown")) { set_transaction_inactive(rig); RETURNFUNC(RIG_ENAVAIL); }
+ if (strstr(xml, "get_bw") && strstr(xml, "NONE")) { set_transaction_inactive(rig); RETURNFUNC(RIG_ENAVAIL); }
+
if (value)
{
xml_parse(xml, value, value_len);
@@ -896,7 +898,8 @@ static int flrig_open(RIG *rig)
if (retval == RIG_ENAVAIL) // must not have it
{
priv->has_get_bwA = 0;
- rig_debug(RIG_DEBUG_VERBOSE, "%s: get_bwA is not available=%s\n", __func__,
+ priv->has_get_bwB = 0; // if we don't have A then surely we don't have B either
+ rig_debug(RIG_DEBUG_VERBOSE, "%s: get_bwA/B is not available=%s\n", __func__,
value);
}
else
@@ -911,6 +914,7 @@ static int flrig_open(RIG *rig)
if (retval == RIG_ENAVAIL) // must not have it
{
priv->has_set_bwA = 0;
+ priv->has_set_bwB = 0;
rig_debug(RIG_DEBUG_VERBOSE, "%s: set_bwA is not available=%s\n", __func__,
value);
}
@@ -920,34 +924,37 @@ static int flrig_open(RIG *rig)
rig_debug(RIG_DEBUG_VERBOSE, "%s: set_bwA is available=%s\n", __func__, value);
}
- /* see if get_bwB is available */
- retval = flrig_transaction(rig, "rig.get_bwB", NULL, value, sizeof(value));
-
- if (retval == RIG_ENAVAIL) // must not have it
+ if (priv->has_get_bwA)
{
- priv->has_get_bwB = 0;
- rig_debug(RIG_DEBUG_VERBOSE, "%s: get_bwB is not available=%s\n", __func__,
- value);
- }
- else
- {
- priv->has_get_bwB = 1;
- rig_debug(RIG_DEBUG_VERBOSE, "%s: get_bwB is available=%s\n", __func__, value);
- }
+ /* see if get_bwB is available FLRig can return empty value too */
+ retval = flrig_transaction(rig, "rig.get_bwB", NULL, value, sizeof(value));
- /* see if set_bwA is available */
- retval = flrig_transaction(rig, "rig.set_bwB", NULL, value, sizeof(value));
+ if (retval == RIG_ENAVAIL || strlen(value) == 0) // must not have it
+ {
+ priv->has_get_bwB = 0;
+ rig_debug(RIG_DEBUG_VERBOSE, "%s: get_bwB is not available=%s\n", __func__,
+ value);
+ }
+ else
+ {
+ priv->has_get_bwB = 1;
+ rig_debug(RIG_DEBUG_VERBOSE, "%s: get_bwB is available=%s\n", __func__, value);
+ }
- if (retval == RIG_ENAVAIL) // must not have it
- {
- priv->has_set_bwB = 0;
- rig_debug(RIG_DEBUG_VERBOSE, "%s: set_bwB is not available=%s\n", __func__,
- value);
- }
- else
- {
- priv->has_set_bwB = 1;
- rig_debug(RIG_DEBUG_VERBOSE, "%s: set_bwB is available=%s\n", __func__, value);
+ /* see if set_bwA is available */
+ retval = flrig_transaction(rig, "rig.set_bwB", NULL, value, sizeof(value));
+
+ if (retval == RIG_ENAVAIL) // must not have it
+ {
+ priv->has_set_bwB = 0;
+ rig_debug(RIG_DEBUG_VERBOSE, "%s: set_bwB is not available=%s\n", __func__,
+ value);
+ }
+ else
+ {
+ priv->has_set_bwB = 1;
+ rig_debug(RIG_DEBUG_VERBOSE, "%s: set_bwB is available=%s\n", __func__, value);
+ }
}
retval = flrig_transaction(rig, "rig.get_AB", NULL, value, sizeof(value));
@@ -1743,8 +1750,14 @@ static int flrig_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
/* so we may not be 100% accurate if op is twiddling knobs */
cmdp = "rig.get_bwA";
retval = flrig_transaction(rig, cmdp, NULL, value, sizeof(value));
+ if (retval == RIG_OK && strstr(value,"NONE"))
+ {
+ priv->has_get_bwA = priv->has_get_bwB = 0;
+ *width = 0;
+ rig_debug(RIG_DEBUG_VERBOSE, "%s: does not have rig.get_bwA/B\n", __func__);
+ }
- if (retval != RIG_OK)
+ if (retval != RIG_OK || strstr(value,"NONE"))
{
RETURNFUNC(retval);
}
@@ -1754,6 +1767,12 @@ static int flrig_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
{
cmdp = "rig.get_bwB";
retval = flrig_transaction(rig, cmdp, NULL, value, sizeof(value));
+ if (retval == RIG_OK && strlen(value)==0)
+ {
+ rig_debug(RIG_DEBUG_VERBOSE, "%s: does not have rig.get_bwB\n", __func__);
+ priv->has_get_bwB = 0;
+ *width = 0;
+ }
if (retval != RIG_OK)
{
commit 394cb4cbcf53971ac5f5e2ede0b0c488be989528
Merge: b1b567d64 176c49240
Author: Michael Black <mdb...@ya...>
Date: Mon Nov 13 17:48:52 2023 -0600
Merge pull request #1426 from GeoBaltz/990_meter
990 meter
commit b1b567d64a7d65584377926fa0818fde3b6abf18
Author: Mike Black W9MDB <mdb...@ya...>
Date: Mon Nov 13 13:58:06 2023 -0600
Fix FLRig get_bwA/B for rigs that do not have get_bwA/b
https://github.com/Hamlib/Hamlib/issues/1427
diff --git a/rigs/dummy/flrig.c b/rigs/dummy/flrig.c
index e5a14e32e..a5688ecde 100644
--- a/rigs/dummy/flrig.c
+++ b/rigs/dummy/flrig.c
@@ -118,6 +118,9 @@ struct flrig_priv_data
value_t parms[RIG_SETTING_MAX];
struct ext_list *ext_parms;
int get_SWR;
+ int has_get_modeB; /* True if this function is available */
+ int has_get_bwB; /* True if this function is available */
+ int has_set_bwB; /* True if this function is available */
};
/* level's and parm's tokens */
@@ -140,7 +143,7 @@ const struct rig_caps flrig_caps =
RIG_MODEL(RIG_MODEL_FLRIG),
.model_name = "FLRig",
.mfg_name = "FLRig",
- .version = "20231110.0",
+ .version = "20231113.0",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
@@ -863,6 +866,21 @@ static int flrig_open(RIG *rig)
rig_debug(RIG_DEBUG_VERBOSE, "%s: getmodeA is available\n", __func__);
}
+ /* see if get_modeB is available */
+ retval = flrig_transaction(rig, "rig.get_modeB", NULL, value, sizeof(value));
+
+ if (retval == RIG_ENAVAIL) // must not have it
+ {
+ priv->has_get_modeB = 0;
+ rig_debug(RIG_DEBUG_VERBOSE, "%s: getmodeB is not available=%s\n", __func__,
+ value);
+ }
+ else
+ {
+ priv->has_get_modeB = 1;
+ rig_debug(RIG_DEBUG_VERBOSE, "%s: getmodeB is available\n", __func__);
+ }
+
freq_t freq;
retval = flrig_get_freq(rig, RIG_VFO_CURR, &freq);
@@ -902,6 +920,36 @@ static int flrig_open(RIG *rig)
rig_debug(RIG_DEBUG_VERBOSE, "%s: set_bwA is available=%s\n", __func__, value);
}
+ /* see if get_bwB is available */
+ retval = flrig_transaction(rig, "rig.get_bwB", NULL, value, sizeof(value));
+
+ if (retval == RIG_ENAVAIL) // must not have it
+ {
+ priv->has_get_bwB = 0;
+ rig_debug(RIG_DEBUG_VERBOSE, "%s: get_bwB is not available=%s\n", __func__,
+ value);
+ }
+ else
+ {
+ priv->has_get_bwB = 1;
+ rig_debug(RIG_DEBUG_VERBOSE, "%s: get_bwB is available=%s\n", __func__, value);
+ }
+
+ /* see if set_bwA is available */
+ retval = flrig_transaction(rig, "rig.set_bwB", NULL, value, sizeof(value));
+
+ if (retval == RIG_ENAVAIL) // must not have it
+ {
+ priv->has_set_bwB = 0;
+ rig_debug(RIG_DEBUG_VERBOSE, "%s: set_bwB is not available=%s\n", __func__,
+ value);
+ }
+ else
+ {
+ priv->has_set_bwB = 1;
+ rig_debug(RIG_DEBUG_VERBOSE, "%s: set_bwB is available=%s\n", __func__, value);
+ }
+
retval = flrig_transaction(rig, "rig.get_AB", NULL, value, sizeof(value));
if (retval != RIG_OK) { RETURNFUNC(retval); }
@@ -1599,6 +1647,8 @@ static int flrig_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
rig_debug(RIG_DEBUG_TRACE, "%s: vfo=%s\n", __func__,
rig_strvfo(vfo));
+ *width = 0;
+
if (check_vfo(vfo) == FALSE)
{
rig_debug(RIG_DEBUG_ERR, "%s: unsupported VFO %s\n",
@@ -1655,7 +1705,7 @@ static int flrig_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
/* so we may not be 100% accurate if op is twiddling knobs */
cmdp = "rig.get_modeA";
- if (vfo == RIG_VFO_B) { cmdp = "rig.get_modeB"; }
+ if (priv->has_get_modeB && vfo == RIG_VFO_B) { cmdp = "rig.get_modeB"; }
}
retval = flrig_transaction(rig, cmdp, NULL, value, sizeof(value));
@@ -1692,15 +1742,25 @@ static int flrig_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
/* vfo B may not be getting polled though in FLRig */
/* so we may not be 100% accurate if op is twiddling knobs */
cmdp = "rig.get_bwA";
+ retval = flrig_transaction(rig, cmdp, NULL, value, sizeof(value));
- if (vfo == RIG_VFO_B) { cmdp = "rig.get_bwB"; }
- }
+ if (retval != RIG_OK)
+ {
+ RETURNFUNC(retval);
+ }
- retval = flrig_transaction(rig, cmdp, NULL, value, sizeof(value));
- if (retval != RIG_OK)
- {
- RETURNFUNC(retval);
+ if (priv->has_get_bwB && vfo == RIG_VFO_B)
+ {
+ cmdp = "rig.get_bwB";
+ retval = flrig_transaction(rig, cmdp, NULL, value, sizeof(value));
+
+ if (retval != RIG_OK)
+ {
+ RETURNFUNC(retval);
+ }
+
+ }
}
rig_debug(RIG_DEBUG_TRACE, "%s: mode=%s width='%s'\n", __func__,
@@ -2114,12 +2174,14 @@ static int flrig_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
RETURNFUNC(RIG_OK);
}
-typedef struct {
+typedef struct
+{
float mtr;
float swr;
} swrpair;
-static swrpair swrtbl[] = {
+static swrpair swrtbl[] =
+{
{0.0, 1.0},
{10.5, 1.5},
{23.0, 2.0},
@@ -2129,21 +2191,29 @@ static swrpair swrtbl[] = {
};
// Function to interpolate SWR from MTR
-float interpolateSWR(float mtr) {
+float interpolateSWR(float mtr)
+{
int i;
- for (i = 0; i < sizeof(swrtbl)/sizeof(swrpair) - 1; i++) {
- if (mtr == swrtbl[i].mtr) {
+
+ for (i = 0; i < sizeof(swrtbl) / sizeof(swrpair) - 1; i++)
+ {
+ if (mtr == swrtbl[i].mtr)
+ {
// Exact match
return swrtbl[i].swr;
}
- if (mtr < swrtbl[i + 1].mtr) {
+
+ if (mtr < swrtbl[i + 1].mtr)
+ {
// Perform linear interpolation
- float slope = (swrtbl[i +...
[truncated message content] |
|
From: n0nb <n0...@us...> - 2023-11-13 14:10:34
|
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 e7786cee4c4e15aeba8a551622342f4b090a3059 (commit)
via 43159e55a1c4351199fada21eb6be4632001d930 (commit)
via 9832fba7979c827785119052f0a824c76acd3007 (commit)
via 6351d5deacd5b2ba37c307fe6430965fa86573f4 (commit)
via 1374ee554c9d73b5fd301a2afd1023725ef4d4ab (commit)
via 774e60895cb268f6ec1001047f97ff2319881869 (commit)
via 5059ec8cd6bc2913ffc8d5f4b84910fed2f97466 (commit)
via 1f9d3a63d42526d2cbd162a08c8d40d498b3c8de (commit)
via 7cb10edf20c4a1be18f0ff2f52c54c1b095d17c7 (commit)
via 59285750ef32dc0ee5deab8634832965372f7b73 (commit)
via 3a08bbe3d82b2cbc22ecb5b4af6775cfea2e3c4b (commit)
via 5d7db6b516affc9a4e1c6e6f6cba393bbe49a077 (commit)
via f1a9823bddf2dd93e781bbc6fe9ef0a46335a639 (commit)
via 62341a657efcce90af1f897861b20572d0e3f4a9 (commit)
via 02b4da83c3c34330ca796942f7e0698fb0a86464 (commit)
via a5bac081908255fe71dc06d934ef418821b50364 (commit)
via 7c3e71a487fd600591d299794fa2c3c28e79147a (commit)
via 162a685887d9cdd18dc17f557edbb117694b38f5 (commit)
via afdb26093e6fe0eeafabcbad6b48859f928b7e47 (commit)
via 4aa8e010a1653574bbf582fe9b102cb2464bff01 (commit)
via 45dca3be598c028f08e6db1edb0a7e78525c2fe2 (commit)
via 49e93f3090f0dd32a2fbf752ab43d5872e58e52b (commit)
via 02ffc6d6dcaa34100e2b7ff93e7713999505c45c (commit)
via 2d2d5009e0181a71d171add29c19a7bbe347887d (commit)
via 1e3e1a9499f6cdc6738e311fdf07fb14e52ebbed (commit)
via 337fb0f3e5b7b83c8d28481d516587cc9469e304 (commit)
via 43d1fbb3230c74e62f47dc510aeafb072443aca5 (commit)
via 31298bb91711d71356b2309670321a88a11f4582 (commit)
via 3107a060f015dfda3d5087ce85bac5a668ae2154 (commit)
via f8814732a2224d50ca16cf497fe0d9dd0686358d (commit)
via 41c891251f4641d2aeb292e76654ed88b9f85a90 (commit)
via 40a8cedc9da307c00ca7b4bd591ffb69542a9cde (commit)
via 5b86d4efffe86b9893093790bcb0f74c86e11a9e (commit)
via 88e86fb62a17a14dc681a1ed4336d6268af709cc (commit)
via 53ff60d98156b277c369fbdd63ce3da2893594d2 (commit)
via 5fb2e68e07c8b972d82b68dc4b0a5b2d79045623 (commit)
via f36822ac20b43d7257ded7ba25b8162b4c5eda31 (commit)
via f618540f227d634c05dfa69d2237fb1350a0eb77 (commit)
via 0dbe24ff424854ce849c0c159bcd6f938f61d995 (commit)
via f4f4d122a850bd2cffe586a2850b45fc5fa1b6ca (commit)
via 8484b132f265e99257f64dcbc99d9e2da732e96c (commit)
via 7f8f470ef75b3cb9424ab01667da6b5b1a23d03d (commit)
via 701bc365599ee0cfe0174da58e5be56d38ac0a5a (commit)
via fccc540353269ccf89aa70c37ec060fe30c78039 (commit)
via 6cb17e49dcf1219d9c44b684356797128daf4209 (commit)
via c8c8869a3c19661a73e321079d35a3cc1ce58262 (commit)
via fb03d095dff23b7efd1794a9ce2ebf9425889579 (commit)
via 012534a628f6025bbaed6d0189f686c776388945 (commit)
via 6b558c5d2ad5dffa9887495688882fd6f1560ed0 (commit)
via f9bd07bbf5faee04129158606e4c207db85115e9 (commit)
via 7c5d4db2fe14addd7c57235229f610b0ee931207 (commit)
via 06c20da7384f8426df3543bda42c94f34bbf10a2 (commit)
via 1d57136d699ed8e4fa7cc829a1060338382542ea (commit)
via 66e8548d606d666ed863ece111f1c1150d622e20 (commit)
via 6d0035180c1126867e80069fee96970a5f4cc8a0 (commit)
via 228aac34ca9e47bd30cf20d8b637013d320dc790 (commit)
via b5653852b382eefc19273adc53ffea350f1f35f2 (commit)
via d39662348642f2c8d9fe2977721403a1b7b0eb79 (commit)
via 325277f269615eef8fdfb1fc1104203557dc99b1 (commit)
via 32728ba95f8ee396793bb5fcaa002154ebf4f1cf (commit)
via 599554ee162f2806bf84128f4ba6c62f947d2dc8 (commit)
via 192822417b80e8ea7929c14ed2c1dfbf56cc511b (commit)
via e0fa354d3a684d5a012144ec53a0e9afba126cff (commit)
via a8f224e660728f428ea2f2cd6bef51d332c3896c (commit)
via 7e0d60535a67443c27297ba054ab206ea943af2e (commit)
via 0613c5844bf03fb3019b7c982f5228f895aa519c (commit)
via 541c1e1de23cc41e020546b8bce4cf00a773f822 (commit)
via b17d2b869c266548f44a92f1710ea2f8d1697067 (commit)
via ce6dd8d2c79460ac368321b4065d39d629d78217 (commit)
via 5a7eec1af702f7298ffc5084c814fc1cfb39352a (commit)
via 84875071a93fefc9f4f7c56e31a4fc90c42f203c (commit)
via 9b6d1565f137b8f0a61b9c934d1c0eded866e9fd (commit)
via fb49c0cf7099dffba94354c7fffb77ca2e4e7987 (commit)
via 46bfe24a62b5e2ae2c968e82aae8863892ad7b1d (commit)
via 00d69f63ef65d287dc2a00d8ca747cee885d9603 (commit)
via bdeb433d040736ad28a6f8cb7128ae4c5a2be532 (commit)
via 464fa3f4780bf249bc876d26fac7df549f9c21af (commit)
via 344f06382ce4eae0829ecd85eb6bd9469bec6356 (commit)
via aa429806aa8f21569d7ca117bb98205753d2cd1b (commit)
via 65caf427f09034f799e7498dbb9166dc197ce495 (commit)
via e1ca06655d141e1bc30c112a86884967b925a937 (commit)
via a1baf7307d7c5067c909322d39c9414a77a24837 (commit)
via 9a22b39fcdf0ec063d630703146bf7f67bc34a9a (commit)
via 05823482a001c13d0aaeede857371dac0128a642 (commit)
via c74fc74e9ec23bc53649eeda2b46e873dc532098 (commit)
via b6ffeeda990c79b64d32e1495b7055d00bd9193e (commit)
via f697f71205862284de64bd4066742b7999796124 (commit)
via b609eb0085f4f5f28a94a13b173d38c6784b2af8 (commit)
via df413d0dc4d7083be4abca6b626340603a56a124 (commit)
via d87671b54b9e432bdaef5860dcf4c8bf520d63c2 (commit)
via 289585388b057f0e8043e3b0e220c818178b8de7 (commit)
via ff2c0e6b0365e6ae6b5d2ab45a8812a3ee4f70a3 (commit)
via 01292b261f40cc6d0ac0d57158ef5a7508234ae2 (commit)
via ec6c19854e0c59c129ac6a1b20da295c51e352f6 (commit)
via f5f8694a709bf084145121c4ed8633032eacf873 (commit)
via 914c4f4d2a695dcf0e1d756e476806baeca0a88f (commit)
via 60356f5774140738b692da88b7fd8b83a0190051 (commit)
via cb5e9ec8539394bd4d0931eb189c4f3ec3f4f461 (commit)
via aac762712a8382626a7c0d41ba481969f69b8f2b (commit)
via 680ce55ba26df1e3634356229bfe20491706f77e (commit)
via 1bf2111c7a72aac84f2618c4338142fdabafd06e (commit)
via 8a006db51d297e5b894ee887ec89886de0bc5a8e (commit)
via 9f053799e91e2ba5c090fc31e86bcb38fb716211 (commit)
via cdc9bc45f21174d82af7350d967d771e425563c4 (commit)
via b72dd095f730b73f560944d4261e0d876154625d (commit)
via 8d15c04727ddea13feef5d37fe203a4105f4ae5d (commit)
via e2354333f34986359559dd74073bb0712f060bcb (commit)
via 534fe449a28273bf30b4ae363dc4d81160071367 (commit)
via d72127f29a1a226fb09949a6570cace1db7e6bc2 (commit)
via 501c4b62c9f40feb64d4acdd409f3940a8552949 (commit)
via 9c6e564006c0e39db053b2bffe7084125a6f6ac9 (commit)
via 744eb5fc5d23f69cdcc6268aff4815726dc3608f (commit)
via e68b6f98b52d0ff5286e304734ad8455aa2e4bfb (commit)
via 67fdf34f226f33573ea63eb9a8fd06eec1374122 (commit)
via d3edab375950c67cafc987d73058912f684c9e57 (commit)
via dfc04d49c4b218b7211eba0550ca20d602735428 (commit)
via fd1c48bfabcd7fb890e1c24fbac4e6290afd957c (commit)
via 64d6cd4af270bd2e94968eb6df5c34202b0763a4 (commit)
via d7b65ec5a5e59bbd6f82d9271547ffc216728836 (commit)
via f7f57ecc68fd647c59a27e226c9f8c46fd196b09 (commit)
via 8a9776664ede8b2f902c6c33326a80a5edca11bf (commit)
via 4175929a48f256e8ce8c2920f987f38c76601ced (commit)
via 8dea15d4dbdfce581a348a87255c0882e34b4713 (commit)
via 3217a007e4e1a7071bc40389809c7e69b69d172d (commit)
via d5f7660781ea7310028463b99d22a054eb198022 (commit)
via e2d03ea581b39400d15fcbe28f29ac54e0282ab7 (commit)
via 6957c15ec39236bb3883539cdba9f654b80f169a (commit)
via d48c847cf5c625868488f92a9633ac3da79af470 (commit)
via 4fd9edbc97167f2c7f60a72bb720a2c7f8708f2d (commit)
via adc339039decaa7b60e4cb0c1ff304dad39228ff (commit)
via 98ab55b80500fb3b8e0fe98f0d94249bb0651dc2 (commit)
via 89db4ae757e12474d2325d81d5011701b5159118 (commit)
via d4cf8a04d71c9da9bdd704277a616574b4c973a3 (commit)
via e0c4988e6a59ca781b6c9816c29a90d9fc07e429 (commit)
via da5de3cb6ec6a188545910ec255d8c5849ebe18d (commit)
via 3b5f7a6dcf6dc191d906f8a15d4b204ad8d51d93 (commit)
via c93440706f24073daf2ec8e8c1ce09e2e6bbd417 (commit)
via 5ac1e50b8060ac248659ffe8d7e28788843d5b04 (commit)
via 631a2a3aa1f4ff0763d6d966067bdadcd5914c6c (commit)
via 717a451d9cf48036ac9ed8c845d1fac35e1cb3aa (commit)
via 1a8ae4b4342e433552384f6b0d002a02ad36e49b (commit)
via 84ca35f19e643545bef67fb154994465b344993a (commit)
via 6877d0357967df737b50049758d90900466d3d6b (commit)
via 1a4a189dbcb972788efade98778ecc9a5705fbab (commit)
via 0484dc08c8538db34d4e1302a702147b28e42353 (commit)
via 18d016a2a2b72e70bb9c69acf85494cbaadd6380 (commit)
via 18e122196f0f5fa7eedbda6b4b92534af52bea6d (commit)
via 71f8b3b8c9e64e3e7d561da83ced9dad84bfb8d0 (commit)
via 93af897753279dcc4455c47726ad80535284abf8 (commit)
via a4698230287e2d9690d842f7c0498bc8e94f4ccc (commit)
via f00661a8ae24f662b2ad8c2d88a3e904de8b8197 (commit)
via e1e7112cb5ceecadcc62961fc63cd7902e8219ed (commit)
via 53855c868db32e1dc87984d103daf6daf307a4bd (commit)
via 027c59d6e94d44ea0c3235f23c43f7fa8a527df6 (commit)
via 6e8d328fb15c63f09bc51e82340d5b6c076481fd (commit)
via 4d540b14590aa8794d2fa1c380c67f7302fcf985 (commit)
via f9e9657ad139dad008c0c3f6ad84beb585393bd7 (commit)
via d49543f00c0b0198ef5a1f33c41a21a7017ee8eb (commit)
via f55d0fc872cfbd88ffddd73fd13b7d1733906030 (commit)
via 2423fb237ce2317464383803223d82b430dc8f9f (commit)
via aeb03fda62c7dc1c931365654ca9b38188d4df5c (commit)
via 8bb6a57548a3c56cd58183ef0ed15edbe83644f4 (commit)
via a82d67234b9da44de9bd2729a27efc031dcc42e0 (commit)
via f9a9de37cf7a6df701f7755a63ff973cc7b63b52 (commit)
via 76a836af5b4550bbec01f0ea6261497afb3934fb (commit)
via cd9077fbc26754032d505e5ec282fa31c7e193aa (commit)
via 6b6289313cffb9f12dc531c4f835919478b276de (commit)
via 85787c8e89d02388788313208a0167c2b82eb762 (commit)
via db6ffaf7dad2bd5adcb619850f541676b1797d70 (commit)
via 3e0420f13829436786c02eeaa13ce0fc5d0ce8cb (commit)
via 85226e5bc43da0b3b12f17b54449cfb0654a4057 (commit)
via be8372c72f16b123f7fa5b557d8329594eb1cf60 (commit)
via f797178e961ff52f7d29ce281102e9b5141f7b29 (commit)
via b731e77841e861c93b2cfb123e756aef7d2cf212 (commit)
via 44a6274bbee830515756183f00ee46ba21529354 (commit)
via 6b4cc5b36baa490342d15a87e69bad3cf44c43d5 (commit)
via 6f3a9831c3e4750a75a83983e499710c1a301704 (commit)
via 5e4cb6f1c189441107dddb0bc9d1cb363e1aa277 (commit)
via 6644afbf8d4dbf966638a8597e59eb0133aeeaf6 (commit)
via 1fbb03fa92320f49dfa45704a1e557f888a69093 (commit)
via 5f825aa0d466b2e3b22455035423033cf8f5ffb3 (commit)
via da9199577ea3b948d49babde894829a2c17fe806 (commit)
via 86df4001a1b3d29b51ce0f7ef5bfcd8e7fdd4a5a (commit)
via 57c8819ce0467ec80e322d1aa7f92332ab2fcadf (commit)
via e9ef4c1a81d1de111d2e2996377159bcf1e64dab (commit)
via 5115fa8959b75aeb15746146cd99ef7ce688214f (commit)
via 0bee5820953d06e4796982b08c65dd4cbcebe9d6 (commit)
via e972262e8068890ad21e46acb4d0affb016ae973 (commit)
via 3e91601a0f2a1e0b6d8d28443f6b9d1512bc5543 (commit)
via d50ff331eea3f183928c202fe544c9b8cf7fa7be (commit)
via 9415fc34462128ab4a6cb1f14025657c31a91426 (commit)
via f05b6604a28820b1dcf1582acba6afc336dce3d4 (commit)
via 8a4767db17c049d2d9b67155370ab24cd6e40adc (commit)
via 4df8260cc1153e9576f2cac30c7469b7cab00eaf (commit)
via 4f65288c326a609eefc0b276b4db3c5f7af64c79 (commit)
via 3cf5fab21d6a238dee77b1372413d116085251c6 (commit)
via ee807a7541fbd85a8125aafcc12fddfa954e44cb (commit)
via a00326161c25dba722211edaec0743c86104ae94 (commit)
via 5b4654024ad2b7fb252fd8d10df8ea2cb6bd1211 (commit)
via 81e14ae4f1663de21ada86b3b204a286cc58ac1a (commit)
via 6f229d1c1a015e507e6bf912b18a02cd1b776f85 (commit)
via c07e40e18be59e849c1643f602802b0cac22c194 (commit)
via 256766c5b6c02eab247ac93581b41199c4fd1b2b (commit)
via 8ebadb3b7d39ef2d3d314019d560232e8f63fa07 (commit)
via 1e93364f7d7f4dd28f338c1f1d3b390b50ed4487 (commit)
via 3c48de2159713ef073ec238e827eced4d2f5bce7 (commit)
from 2e3e0df4d6be4bd9aad2f0a155ee2370a45959a0 (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 e7786cee4c4e15aeba8a551622342f4b090a3059
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sun Nov 12 13:22:02 2023 -0600
Fix TS990S SWR read -- strange behavior of RM command reading first RM turned on for read
New SWR table too for TS990S
https://github.com/Hamlib/Hamlib/issues/1423
diff --git a/rigs/kenwood/kenwood.c b/rigs/kenwood/kenwood.c
index 4e87543ba..7974d4423 100644
--- a/rigs/kenwood/kenwood.c
+++ b/rigs/kenwood/kenwood.c
@@ -1100,6 +1100,15 @@ int kenwood_open(RIG *rig)
// mismatched IDs can still be tested
rig->state.rigport.retry = retry_save;
+
+ // TS-990S needs to ensure all RM meters are turned off as first one with read on gets read
+ // Any RM commands need to be ON/READ/OFF to allow other apps or threads to read meters
+
+ if (RIG_IS_TS990S)
+ {
+ kenwood_transaction(rig, "RM10;RM20;RM30;RM40;RM50;RM60;", NULL, 0);
+ }
+
RETURNFUNC(RIG_OK);
}
diff --git a/rigs/kenwood/kenwood.h b/rigs/kenwood/kenwood.h
index cfb5df20b..0e2a3858f 100644
--- a/rigs/kenwood/kenwood.h
+++ b/rigs/kenwood/kenwood.h
@@ -28,7 +28,7 @@
#include "token.h"
#include "idx_builtin.h"
-#define BACKEND_VER "20231031"
+#define BACKEND_VER "20231112"
#define EOM_KEN ';'
#define EOM_TH '\r'
diff --git a/rigs/kenwood/ts990s.c b/rigs/kenwood/ts990s.c
index 63374cb16..39a5c9a07 100644
--- a/rigs/kenwood/ts990s.c
+++ b/rigs/kenwood/ts990s.c
@@ -59,9 +59,9 @@
#define TS990S_SWR_CAL { 5, \
{ \
{ 0, 1.0f }, \
- { 14, 1.5f }, \
- { 28, 2.0f }, \
- { 42, 3.0f }, \
+ { 7, 1.5f }, \
+ { 36, 3.0f }, \
+ { 43, 6.0f }, \
{ 70, 10.0f } \
} }
@@ -647,7 +647,9 @@ int ts990s_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
break;
case RIG_LEVEL_SWR:
- retval = kenwood_safe_transaction(rig, "RM21", lvlbuf, sizeof(lvlbuf), 7);
+ // we need to turn on read, read it, and turn it off again
+ // first RM meter with read on is the that gets read with RM;
+ retval = kenwood_safe_transaction(rig, "RM21;RM;RM20", lvlbuf, sizeof(lvlbuf), 8);
if (retval != RIG_OK)
{
diff --git a/src/rig.c b/src/rig.c
index a080cd7d8..d95ae97fb 100644
--- a/src/rig.c
+++ b/src/rig.c
@@ -2740,6 +2740,14 @@ int HAMLIB_API rig_get_mode(RIG *rig,
*width = rig->state.cache.widthMainA;
RETURNFUNC(RIG_OK);
}
+ else if (vfo == RIG_VFO_B)
+ {
+ if (rig->state.cache.modeMainB == RIG_MODE_NONE)
+ {
+ retcode = caps->get_mode(rig, vfo, mode, width);
+ return retcode;
+ }
+ }
if ((*mode != RIG_MODE_NONE && cache_ms_mode < rig->state.cache.timeout_ms)
&& cache_ms_width < rig->state.cache.timeout_ms)
commit 43159e55a1c4351199fada21eb6be4632001d930
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sun Nov 12 08:47:28 2023 -0600
Default configure builds shared libraries
Adding --enable-static now turnes off shared as it never build both at the same time
diff --git a/configure.ac b/configure.ac
index 863b76dec..25f53c6bf 100644
--- a/configure.ac
+++ b/configure.ac
@@ -43,6 +43,23 @@ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
## ------------------------------ ##
## Hamlib specific configuration. ##
## ------------------------------ ##
+AC_ARG_ENABLE([shared],
+ [AS_HELP_STRING([--enable-shared],
+ [Enable shared libraries @<:@default=yes@:>@])],
+ [enable_shared=$enableval],
+ [enable_shared=yes])
+AC_ARG_ENABLE([static],
+ [AS_HELP_STRING([--enable-static],
+ [Enable static libraries @<:@default=check@:>@])],
+ [enable_static=$enableval],
+ [enable_static=check])
+
+AS_IF([test "x$enable_static" = "xyes"], [
+ enable_shared=no
+])
+AS_IF([test "x$enable_static" = "xyes" && test "x$enable_shared" = "xyes"], [
+ AC_MSG_ERROR([Both --enable-static and --enable-shared cannot be enabled at the same time.])
+])
dnl New backends must be listed here! Also the new Makefile path must be
dnl added to AC_CONFIG_FILES near the end of this file. See README.developer
commit 9832fba7979c827785119052f0a824c76acd3007
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sat Nov 11 22:21:38 2023 -0600
Add null check in rig_get_function_ptr
diff --git a/src/misc.c b/src/misc.c
index 67a96205f..eba3ee2b7 100644
--- a/src/misc.c
+++ b/src/misc.c
@@ -2346,6 +2346,12 @@ void *HAMLIB_API rig_get_function_ptr(rig_model_t rig_model,
{
const struct rig_caps *caps = rig_get_caps(rig_model);
+ if (caps == NULL)
+ {
+ rig_debug(RIG_DEBUG_ERR, "%s: caps == null for model %d??\n", __func__, rig_model);
+ return NULL;
+ }
+
switch (rig_function)
{
case RIG_FUNCTION_INIT:
commit 6351d5deacd5b2ba37c307fe6430965fa86573f4
Author: Mike Black W9MDB <mdb...@ya...>
Date: Fri Nov 10 17:38:57 2023 -0600
Get scaling correct (i.e.none) for FLRig get_SWR
https://github.com/Hamlib/Hamlib/issues/1423
diff --git a/rigs/dummy/flrig.c b/rigs/dummy/flrig.c
index c1c4e1c4f..e5a14e32e 100644
--- a/rigs/dummy/flrig.c
+++ b/rigs/dummy/flrig.c
@@ -2210,7 +2210,10 @@ static int flrig_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
{
case RIG_LEVEL_SWR:
{
- val->f = interpolateSWR(atoi(value));
+ if (priv->get_SWR)
+ val->f = atof(value);
+ else
+ val->f = interpolateSWR(atoi(value));
break;
}
case RIG_LEVEL_STRENGTH:
commit 1374ee554c9d73b5fd301a2afd1023725ef4d4ab
Author: Mike Black W9MDB <mdb...@ya...>
Date: Fri Nov 10 15:43:20 2023 -0600
Add new get_SWR function for FLRig
https://github.com/Hamlib/Hamlib/issues/1423
diff --git a/rigs/dummy/flrig.c b/rigs/dummy/flrig.c
index 7d10d4882..c1c4e1c4f 100644
--- a/rigs/dummy/flrig.c
+++ b/rigs/dummy/flrig.c
@@ -117,6 +117,7 @@ struct flrig_priv_data
float powermeter_scale; /* So we can scale power meter to 0-1 */
value_t parms[RIG_SETTING_MAX];
struct ext_list *ext_parms;
+ int get_SWR;
};
/* level's and parm's tokens */
@@ -639,6 +640,7 @@ static int flrig_init(RIG *rig)
priv->curr_modeB = -1;
priv->curr_widthA = -1;
priv->curr_widthB = -1;
+ priv->get_SWR = 1; // we'll try getSWR once to see if it works
if (!rig->caps)
{
@@ -2154,7 +2156,7 @@ static int flrig_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
char value[MAXARGLEN];
char *cmd;
int retval;
- const struct flrig_priv_data *priv = (struct flrig_priv_data *) rig->state.priv;
+ struct flrig_priv_data *priv = (struct flrig_priv_data *) rig->state.priv;
ENTERFUNC;
rig_debug(RIG_DEBUG_TRACE, "%s: vfo=%s\n", __func__,
@@ -2171,8 +2173,11 @@ static int flrig_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
case RIG_LEVEL_STRENGTH: cmd = "rig.get_smeter"; break;
- case RIG_LEVEL_SWR: cmd = "rig.get_SWR"; break;
- //case RIG_LEVEL_SWR: cmd = "rig.get_swrmeter"; break;
+ case RIG_LEVEL_SWR:
+ cmd = "rig.get_swrmeter";
+ // we'll try get_SWR at least once to see if it works
+ if (priv->get_SWR) cmd = "rig.get_SWR";
+ break;
case RIG_LEVEL_RFPOWER: cmd = "rig.get_power"; break;
@@ -2188,6 +2193,7 @@ static int flrig_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
if (retval == RIG_ENAVAIL && strcmp(cmd,"rig.get_SWR")==0)
{
+ priv->get_SWR = 0;
cmd = "rig.get_swrmeter"; // revert to old flrig method
retval = flrig_transaction(rig, cmd, NULL, value, sizeof(value));
}
commit 774e60895cb268f6ec1001047f97ff2319881869
Author: Mike Black W9MDB <mdb...@ya...>
Date: Fri Nov 10 11:55:30 2023 -0600
Use new FLRig get_SWR method if available -- otherwise use old method
diff --git a/rigs/dummy/flrig.c b/rigs/dummy/flrig.c
index 60dd8b5cf..7d10d4882 100644
--- a/rigs/dummy/flrig.c
+++ b/rigs/dummy/flrig.c
@@ -139,7 +139,7 @@ const struct rig_caps flrig_caps =
RIG_MODEL(RIG_MODEL_FLRIG),
.model_name = "FLRig",
.mfg_name = "FLRig",
- .version = "20231108.0",
+ .version = "20231110.0",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
@@ -2171,7 +2171,8 @@ static int flrig_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
case RIG_LEVEL_STRENGTH: cmd = "rig.get_smeter"; break;
- case RIG_LEVEL_SWR: cmd = "rig.get_swrmeter"; break;
+ case RIG_LEVEL_SWR: cmd = "rig.get_SWR"; break;
+ //case RIG_LEVEL_SWR: cmd = "rig.get_swrmeter"; break;
case RIG_LEVEL_RFPOWER: cmd = "rig.get_power"; break;
@@ -2185,6 +2186,12 @@ static int flrig_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
retval = flrig_transaction(rig, cmd, NULL, value, sizeof(value));
+ if (retval == RIG_ENAVAIL && strcmp(cmd,"rig.get_SWR")==0)
+ {
+ cmd = "rig.get_swrmeter"; // revert to old flrig method
+ retval = flrig_transaction(rig, cmd, NULL, value, sizeof(value));
+ }
+
if (retval != RIG_OK)
{
rig_debug(RIG_DEBUG_ERR, "%s: flrig_transaction failed retval=%s\n", __func__,
diff --git a/simulators/simft991.c b/simulators/simft991.c
index 0a9066f3c..d2f5b1eb2 100644
--- a/simulators/simft991.c
+++ b/simulators/simft991.c
@@ -138,8 +138,14 @@ int main(int argc, char *argv[])
if (n <= 0) { perror("RM5"); }
}
+ else if (strcmp(buf,"MR118;") == 0)
+ {
+ pbuf = "?;";
+ n = write(fd, pbuf, strlen(pbuf));
+ if (n <= 0) { perror("MR118"); }
+ }
- if (strcmp(buf, "AN0;") == 0)
+ else if (strcmp(buf, "AN0;") == 0)
{
printf("%s\n", buf);
hl_usleep(50 * 1000);
@@ -161,7 +167,7 @@ int main(int argc, char *argv[])
}
else if (strcmp(buf, "FA;") == 0)
{
- SNPRINTF(buf, sizeof(buf), "FA%08.0f;", freqA);
+ SNPRINTF(buf, sizeof(buf), "FA%09.0f;", freqA);
n = write(fd, buf, strlen(buf));
}
else if (strncmp(buf, "FA", 2) == 0)
@@ -170,7 +176,7 @@ int main(int argc, char *argv[])
}
else if (strcmp(buf, "FB;") == 0)
{
- SNPRINTF(buf, sizeof(buf), "FB%08.0f;", freqB);
+ SNPRINTF(buf, sizeof(buf), "FB%09.0f;", freqB);
n = write(fd, buf, strlen(buf));
}
else if (strncmp(buf, "FB", 2) == 0)
commit 5059ec8cd6bc2913ffc8d5f4b84910fed2f97466
Author: Mike Black W9MDB <mdb...@ya...>
Date: Fri Nov 10 10:55:31 2023 -0600
Add SWR for TS990
https://github.com/Hamlib/Hamlib/issues/1423
diff --git a/rigs/kenwood/ts990s.c b/rigs/kenwood/ts990s.c
index ffa724a71..63374cb16 100644
--- a/rigs/kenwood/ts990s.c
+++ b/rigs/kenwood/ts990s.c
@@ -22,10 +22,12 @@
#include <stdlib.h>
#include <string.h>
+#include <math.h>
#include <hamlib/rig.h>
#include "kenwood.h"
#include "ts990s.h"
+#include "cal.h"
#define TS990S_AM_MODES RIG_MODE_AM
#define TS990S_FM_MODES (RIG_MODE_FM|RIG_MODE_FMN)
@@ -37,7 +39,7 @@
#define TS2000_FUNC_ALL (RIG_FUNC_TONE|RIG_FUNC_TSQL|RIG_FUNC_BC|RIG_FUNC_NB|RIG_FUNC_NR|RIG_FUNC_ANF|RIG_FUNC_COMP)
-#define TS2000_LEVEL_ALL (RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_VOXDELAY|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_SQL|RIG_LEVEL_CWPITCH|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN|RIG_LEVEL_KEYSPD|RIG_LEVEL_COMP|RIG_LEVEL_AGC|RIG_LEVEL_BKINDL|RIG_LEVEL_METER|RIG_LEVEL_VOXGAIN|RIG_LEVEL_ANTIVOX|RIG_LEVEL_RAWSTR|RIG_LEVEL_STRENGTH)
+#define TS2000_LEVEL_ALL (RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_VOXDELAY|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_SQL|RIG_LEVEL_CWPITCH|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN|RIG_LEVEL_KEYSPD|RIG_LEVEL_COMP|RIG_LEVEL_AGC|RIG_LEVEL_BKINDL|RIG_LEVEL_METER|RIG_LEVEL_VOXGAIN|RIG_LEVEL_ANTIVOX|RIG_LEVEL_RAWSTR|RIG_LEVEL_STRENGTH|RIG_LEVEL_SWR)
#define TS990S_VFO_OP (RIG_OP_BAND_UP|RIG_OP_BAND_DOWN)
#define TS990S_SCAN_OP (RIG_SCAN_VFO)
@@ -54,6 +56,16 @@
{0x46, 60}}\
}
+#define TS990S_SWR_CAL { 5, \
+ { \
+ { 0, 1.0f }, \
+ { 14, 1.5f }, \
+ { 28, 2.0f }, \
+ { 42, 3.0f }, \
+ { 70, 10.0f } \
+ } }
+
+
/* memory capabilities */
#define TS990S_MEM_CAP { \
.freq = 1, \
@@ -121,7 +133,7 @@ const struct rig_caps ts990s_caps =
RIG_MODEL(RIG_MODEL_TS990S),
.model_name = "TS-990S",
.mfg_name = "Kenwood",
- .version = BACKEND_VER ".5",
+ .version = BACKEND_VER ".6",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
@@ -311,6 +323,7 @@ const struct rig_caps ts990s_caps =
},
.str_cal = TS990S_STR_CAL,
+ .swr_cal = TS990S_SWR_CAL,
.priv = (void *)& ts990s_priv_caps,
@@ -633,6 +646,19 @@ int ts990s_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
val->i = lvl / 100;
break;
+ case RIG_LEVEL_SWR:
+ retval = kenwood_safe_transaction(rig, "RM21", lvlbuf, sizeof(lvlbuf), 7);
+
+ if (retval != RIG_OK)
+ {
+ return retval;
+ }
+
+ sscanf(lvlbuf, "RM2%d", &lvl);
+ val->f = rig_raw2val_float(lvl, &rig->caps->swr_cal);
+ val->f = round(val->f*10)/10.0; // 1 decimal place precision
+ break;
+
case RIG_LEVEL_METER:
retval = kenwood_safe_transaction(rig, "RM", lvlbuf, sizeof(lvlbuf), 7);
@@ -715,7 +741,7 @@ int ts990s_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
}
}
break;
-
+
default:
rig_debug(RIG_DEBUG_ERR, "%s: unsupported get_level %s", __func__,
rig_strlevel(level));
diff --git a/simulators/simts990.c b/simulators/simts990.c
index 462be1824..c4918d52a 100644
--- a/simulators/simts990.c
+++ b/simulators/simts990.c
@@ -14,6 +14,7 @@ struct ip_mreq
#include <fcntl.h>
#include <string.h>
#include <unistd.h>
+#include <errno.h>
#include <hamlib/rig.h>
#define BUFSIZE 256
@@ -32,22 +33,6 @@ int modeMain = 2;
int modeSub = 2;
int keyspd = 20;
-int
-getmyline(int fd, char *buf)
-{
- char c;
- int i = 0;
- memset(buf, 0, BUFSIZE);
-
- while (read(fd, &c, 1) > 0)
- {
- buf[i++] = c;
-
- if (c == ';') { return strlen(buf); }
- }
-
- return strlen(buf);
-}
#if defined(WIN32) || defined(_WIN32)
int openPort(char *comport) // doesn't matter for using pts devices
@@ -87,6 +72,30 @@ int openPort(char *comport) // doesn't matter for using pts devices
}
#endif
+int
+getmyline(int fd, char *buf)
+{
+ char c;
+ int i = 0;
+ memset(buf, 0, BUFSIZE);
+ int retval;
+
+ while ((retval=read(fd, &c, 1)) > 0)
+ {
+ buf[i++] = c;
+
+ if (c == ';') { return strlen(buf); }
+ }
+ if (retval != 0)
+ {
+ perror("read failed:");
+ close(fd);
+ fd = openPort("");
+ }
+
+ return strlen(buf);
+}
+
int main(int argc, char *argv[])
@@ -99,13 +108,19 @@ int main(int argc, char *argv[])
while (1)
{
+ hl_usleep(10);
buf[0] = 0;
if (getmyline(fd, buf) > 0) { printf("Cmd:%s\n", buf); }
// else { return 0; }
- if (strcmp(buf, "RM5;") == 0)
+ if (strncmp(buf, "RM2", 3) == 0)
+ {
+ pbuf = "RM20020;";
+ write(fd, pbuf, strlen(pbuf));
+ }
+ else if (strcmp(buf, "RM5;") == 0)
{
printf("%s\n", buf);
hl_usleep(mysleep * 1000);
commit 1f9d3a63d42526d2cbd162a08c8d40d498b3c8de
Author: Mike Black W9MDB <mdb...@ya...>
Date: Thu Nov 9 11:26:56 2023 -0600
Fix PTT status for multicast
diff --git a/src/snapshot_data.c b/src/snapshot_data.c
index a32ad1ff5..8d61ebe0b 100644
--- a/src/snapshot_data.c
+++ b/src/snapshot_data.c
@@ -151,7 +151,7 @@ static int snapshot_serialize_vfo(cJSON *vfo_node, RIG *rig, vfo_t vfo)
|| (split == RIG_SPLIT_ON && vfo != split_vfo);
is_tx = (split == RIG_SPLIT_OFF && vfo == rig->state.current_vfo)
|| (split == RIG_SPLIT_ON && vfo == split_vfo);
- ptt = rig->state.cache.ptt;
+ ptt = rig->state.cache.ptt && is_tx;
if (is_tx)
{
commit 7cb10edf20c4a1be18f0ff2f52c54c1b095d17c7
Merge: 5d7db6b51 59285750e
Author: Michael Black <mdb...@ya...>
Date: Thu Nov 9 09:33:13 2023 -0600
Merge pull request #1421 from mikaelnousiainen/hamlib-multicast-4
Improve rig poll routine (multicast)
commit 59285750ef32dc0ee5deab8634832965372f7b73
Merge: 3a08bbe3d 5d7db6b51
Author: Mikael Nousiainen <mik...@ik...>
Date: Thu Nov 9 09:59:35 2023 +0200
Fix conflict
commit 3a08bbe3d82b2cbc22ecb5b4af6775cfea2e3c4b
Author: Mikael Nousiainen <mik...@ik...>
Date: Thu Nov 9 09:53:48 2023 +0200
Detect also VFO changes in poll routine and allow detection of multiple changes at once. Remove old unused code.
diff --git a/src/event.c b/src/event.c
index 6f70e37af..10ca23ab9 100644
--- a/src/event.c
+++ b/src/event.c
@@ -69,10 +69,9 @@ void *rig_poll_routine(void *arg)
rig_poll_routine_args *args = (rig_poll_routine_args *)arg;
RIG *rig = args->rig;
struct rig_state *rs = &rig->state;
- int result;
int update_occurred;
- vfo_t vfo = RIG_VFO_NONE, vfo_prev = RIG_VFO_NONE;
+ vfo_t vfo = RIG_VFO_NONE, tx_vfo = RIG_VFO_NONE;
freq_t freq_main_a = 0, freq_main_b = 0, freq_main_c = 0, freq_sub_a = 0, freq_sub_b = 0, freq_sub_c = 0;
rmode_t mode_main_a = 0, mode_main_b = 0, mode_main_c = 0, mode_sub_a = 0, mode_sub_b = 0, mode_sub_c = 0;
pbwidth_t width_main_a = 0, width_main_b = 0, width_main_c = 0, width_sub_a = 0, width_sub_b = 0, width_sub_c = 0;
@@ -95,244 +94,117 @@ void *rig_poll_routine(void *arg)
while (rs->poll_routine_thread_run)
{
+ if (rig->state.current_vfo != vfo)
+ {
+ vfo = rig->state.current_vfo;
+ update_occurred = 1;
+ }
+ if (rig->state.tx_vfo != tx_vfo)
+ {
+ tx_vfo = rig->state.tx_vfo;
+ update_occurred = 1;
+ }
if (rig->state.cache.freqMainA != freq_main_a)
{
freq_main_a = rig->state.cache.freqMainA;
update_occurred = 1;
}
- else if (rig->state.cache.freqMainB != freq_main_b)
+ if (rig->state.cache.freqMainB != freq_main_b)
{
freq_main_b = rig->state.cache.freqMainB;
update_occurred = 1;
}
- else if (rig->state.cache.freqMainC != freq_main_c)
+ if (rig->state.cache.freqMainC != freq_main_c)
{
freq_main_b = rig->state.cache.freqMainC;
update_occurred = 1;
}
- else if (rig->state.cache.freqSubA != freq_sub_a)
+ if (rig->state.cache.freqSubA != freq_sub_a)
{
freq_sub_a = rig->state.cache.freqSubA;
update_occurred = 1;
}
- else if (rig->state.cache.freqSubB != freq_sub_b)
+ if (rig->state.cache.freqSubB != freq_sub_b)
{
freq_sub_b = rig->state.cache.freqSubB;
update_occurred = 1;
}
- else if (rig->state.cache.freqSubC != freq_sub_c)
+ if (rig->state.cache.freqSubC != freq_sub_c)
{
freq_sub_c = rig->state.cache.freqSubC;
update_occurred = 1;
}
- else if (rig->state.cache.ptt != ptt)
+ if (rig->state.cache.ptt != ptt)
{
ptt = rig->state.cache.ptt;
update_occurred = 1;
}
- else if (rig->state.cache.split != split)
+ if (rig->state.cache.split != split)
{
split = rig->state.cache.split;
update_occurred = 1;
}
- else if (rig->state.cache.modeMainA != mode_main_a)
+ if (rig->state.cache.modeMainA != mode_main_a)
{
mode_main_a = rig->state.cache.modeMainA;
update_occurred = 1;
}
- else if (rig->state.cache.modeMainB != mode_main_b)
+ if (rig->state.cache.modeMainB != mode_main_b)
{
mode_main_b = rig->state.cache.modeMainB;
update_occurred = 1;
}
- else if (rig->state.cache.modeMainC != mode_main_c)
+ if (rig->state.cache.modeMainC != mode_main_c)
{
mode_main_c = rig->state.cache.modeMainC;
update_occurred = 1;
}
- else if (rig->state.cache.modeSubA != mode_sub_a)
+ if (rig->state.cache.modeSubA != mode_sub_a)
{
mode_sub_a = rig->state.cache.modeSubA;
update_occurred = 1;
}
- else if (rig->state.cache.modeSubB != mode_sub_b)
+ if (rig->state.cache.modeSubB != mode_sub_b)
{
mode_sub_b = rig->state.cache.modeSubB;
update_occurred = 1;
}
- else if (rig->state.cache.modeSubC != mode_sub_c)
+ if (rig->state.cache.modeSubC != mode_sub_c)
{
mode_sub_c = rig->state.cache.modeSubC;
update_occurred = 1;
}
- else if (rig->state.cache.widthMainA != width_main_a)
+ if (rig->state.cache.widthMainA != width_main_a)
{
width_main_a = rig->state.cache.widthMainA;
update_occurred = 1;
}
- else if (rig->state.cache.widthMainB != width_main_b)
+ if (rig->state.cache.widthMainB != width_main_b)
{
width_main_b = rig->state.cache.widthMainB;
update_occurred = 1;
}
- else if (rig->state.cache.widthMainC != width_main_c)
+ if (rig->state.cache.widthMainC != width_main_c)
{
width_main_c = rig->state.cache.widthMainC;
update_occurred = 1;
}
- else if (rig->state.cache.widthSubA != width_sub_a)
+ if (rig->state.cache.widthSubA != width_sub_a)
{
width_sub_a = rig->state.cache.widthSubA;
update_occurred = 1;
}
- else if (rig->state.cache.widthSubB != width_sub_b)
+ if (rig->state.cache.widthSubB != width_sub_b)
{
width_sub_b = rig->state.cache.widthSubB;
update_occurred = 1;
}
- else if (rig->state.cache.widthSubC != width_sub_c)
+ if (rig->state.cache.widthSubC != width_sub_c)
{
width_sub_c = rig->state.cache.widthSubC;
update_occurred = 1;
}
-// The original code here actively reads rig state, which can be too intensive and intrusive
-#if 0
- if (rig->caps->get_vfo)
- {
- result = rig_get_vfo(rig, &vfo);
-
- if (result != RIG_OK)
- {
- rig_debug(RIG_DEBUG_ERR, "%s(%d): rig_get_vfo error %s\n", __FILE__, __LINE__,
- rigerror(result));
- }
-
- if (vfo != vfo_prev)
- {
- rig_fire_vfo_event(rig, vfo);
- }
-
- if (vfo != vfo_prev)
- {
- rig_debug(RIG_DEBUG_CACHE,
- "%s(%d) vfo=%s was %s\n", __FILE__, __LINE__,
- rig_strvfo(vfo), rig_strvfo(vfo_prev));
- update_occurred = 1;
- vfo_prev = vfo;
- }
- }
-
- if (rig->caps->get_freq)
- {
- result = rig_get_freq(rig, RIG_VFO_A, &freq_main);
-
- if (result != RIG_OK)
- {
- rig_debug(RIG_DEBUG_ERR, "%s(%d): rig_get_freqA error %s\n", __FILE__, __LINE__,
- rigerror(result));
- }
-
- result = rig_get_freq(rig, RIG_VFO_B, &freq_sub);
-
- if (result != RIG_OK)
- {
- rig_debug(RIG_DEBUG_ERR, "%s(%d): rig_get_freqB error %s\n", __FILE__, __LINE__,
- rigerror(result));
- }
-
- if (freq_main != freq_main_prev)
- {
- rig_fire_freq_event(rig, RIG_VFO_A, freq_main);
- }
-
- if (freq_sub != freq_sub_prev)
- {
- rig_fire_freq_event(rig, RIG_VFO_B, freq_sub);
- }
-
- if (freq_main != freq_main_prev || freq_sub != freq_sub_prev)
- {
- rig_debug(RIG_DEBUG_CACHE,
- "%s(%d) freq_main=%.0f was %.0f, freq_sub=%.0f was %.0f\n", __FILE__, __LINE__,
- freq_main, freq_main_prev, freq_sub, freq_sub_prev);
- update_occurred = 1;
- freq_main_prev = freq_main;
- freq_sub_prev = freq_sub;
- }
- }
-
- if (rig->caps->get_mode)
- {
- result = rig_get_mode(rig, RIG_VFO_A, &mode_main, &width_main);
-
- if (result != RIG_OK)
- {
- rig_debug(RIG_DEBUG_ERR, "%s(%d): rig_get_modeA error %s\n", __FILE__, __LINE__,
- rigerror(result));
- }
-
- result = rig_get_mode(rig, RIG_VFO_B, &mode_sub, &width_sub);
-
- if (result != RIG_OK)
- {
- rig_debug(RIG_DEBUG_ERR, "%s(%d): rig_get_modeB error %s\n", __FILE__, __LINE__,
- rigerror(result));
- }
-
- if (mode_main != mode_main_prev || width_main != width_main_prev)
- {
- rig_fire_mode_event(rig, RIG_VFO_A, mode_main, width_main);
- }
-
- if (mode_sub != mode_sub_prev || width_sub != width_sub_prev)
- {
- rig_fire_mode_event(rig, RIG_VFO_B, mode_sub, width_sub);
- }
-
- if (mode_main != mode_main_prev || mode_sub != mode_sub_prev)
- {
- rig_debug(RIG_DEBUG_CACHE, "%s(%d) mode_main=%s was %s, mode_sub=%s was %s\n",
- __FILE__, __LINE__, rig_strrmode(mode_main), rig_strrmode(mode_main_prev),
- rig_strrmode(mode_sub), rig_strrmode(mode_sub_prev));
- update_occurred = 1;
- mode_main_prev = mode_main;
- mode_sub_prev = mode_sub;
- }
-
- if (width_main != width_main_prev || width_sub != width_sub_prev)
- {
- rig_debug(RIG_DEBUG_CACHE,
- "%s(%d) width_main=%ld was %ld, width_sub=%ld was %ld\n", __FILE__, __LINE__,
- width_main, width_main_prev, width_sub, width_sub_prev);
- update_occurred = 1;
- width_main_prev = width_main;
- width_sub_prev = width_sub;
- }
- }
-
- if (rig->caps->get_split_vfo)
- {
- vfo_t tx_vfo;
- result = rig_get_split_vfo(rig, RIG_VFO_A, &split, &tx_vfo);
-
- if (result != RIG_OK)
- {
- rig_debug(RIG_DEBUG_ERR, "%s(%d): rig_get_modeA error %s\n", __FILE__, __LINE__,
- rigerror(result));
- }
-
- if (split != split_prev)
- {
- rig_debug(RIG_DEBUG_CACHE, "%s(%d) split=%d was %d\n", __FILE__, __LINE__,
- split,
- split_prev);
- update_occurred = 1;
- split_prev = split;
- }
- }
-#endif
-
if (update_occurred)
{
network_publish_rig_poll_data(rig);
commit 5d7db6b516affc9a4e1c6e6f6cba393bbe49a077
Author: Mike Black W9MDB <mdb...@ya...>
Date: Wed Nov 8 17:14:10 2023 -0600
Fix FLRig SWR value
Change float level print to %g format for better appearance
https://github.com/Hamlib/Hamlib/issues/1417
diff --git a/rigs/dummy/flrig.c b/rigs/dummy/flrig.c
index 5c0b6fcd8..60dd8b5cf 100644
--- a/rigs/dummy/flrig.c
+++ b/rigs/dummy/flrig.c
@@ -23,6 +23,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h> /* String function definitions */
+#include <math.h>
#include <hamlib/rig.h>
#include <serial.h>
@@ -138,7 +139,7 @@ const struct rig_caps flrig_caps =
RIG_MODEL(RIG_MODEL_FLRIG),
.model_name = "FLRig",
.mfg_name = "FLRig",
- .version = "20231107.0",
+ .version = "20231108.0",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
@@ -2111,6 +2112,39 @@ static int flrig_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
RETURNFUNC(RIG_OK);
}
+typedef struct {
+ float mtr;
+ float swr;
+} swrpair;
+
+static swrpair swrtbl[] = {
+ {0.0, 1.0},
+ {10.5, 1.5},
+ {23.0, 2.0},
+ {35.0, 2.5},
+ {48.0, 3.0},
+ {100.0, 10.0 } // assuming 10.0 is infinity for FLRig
+};
+
+// Function to interpolate SWR from MTR
+float interpolateSWR(float mtr) {
+ int i;
+ for (i = 0; i < sizeof(swrtbl)/sizeof(swrpair) - 1; i++) {
+ if (mtr == swrtbl[i].mtr) {
+ // Exact match
+ return swrtbl[i].swr;
+ }
+ if (mtr < swrtbl[i + 1].mtr) {
+ // Perform linear interpolation
+ float slope = (swrtbl[i + 1].swr - swrtbl[i].swr) / (swrtbl[i + 1].mtr - swrtbl[i].mtr);
+ float swr = round((swrtbl[i].swr + slope * (mtr - swrtbl[i].mtr))*10)/10.0;
+ rig_debug(RIG_DEBUG_VERBOSE,"%s: swr=%f\n", __func__, swr);
+ return swr;
+ }
+ }
+ // If mtr is not within the range of values in the table, you could choose to return an error or extrapolate
+ return 10; // Example er
+}
/*
* flrig_get_level
* Assumes rig!=NULL, rig->state.priv!=NULL, val!=NULL
@@ -2161,6 +2195,11 @@ static int flrig_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
// most levels are 0-100 -- may have to allow for different ranges
switch (level)
{
+ case RIG_LEVEL_SWR:
+ {
+ val->f = interpolateSWR(atoi(value));
+ break;
+ }
case RIG_LEVEL_STRENGTH:
val->i = atoi(value) - 54;
//if (val->i > 0) val->i /= 10;
diff --git a/tests/rigctl_parse.c b/tests/rigctl_parse.c
index 668034b8b..c47a87fe6 100644
--- a/tests/rigctl_parse.c
+++ b/tests/rigctl_parse.c
@@ -1952,7 +1952,7 @@ int print_conf_list(const struct confparams *cfp, rig_ptr_t data)
cfp->u.n.step);
break;
case RIG_CONF_NUMERIC:
- printf("\tRange: %.1f..%.1f, step %.1f\n",
+ printf("\tRange: %g..%g, step %.1f\n",
cfp->u.n.min,
cfp->u.n.max,
cfp->u.n.step);
@@ -3287,7 +3287,7 @@ declare_proto_rig(set_level)
break;
case RIG_CONF_NUMERIC:
- CHKSCN1ARG(sscanf(arg2, "%f", &val.f));
+ CHKSCN1ARG(sscanf(arg2, "%g", &val.f));
break;
case RIG_CONF_STRING:
@@ -3393,7 +3393,7 @@ declare_proto_rig(get_level)
break;
case RIG_CONF_NUMERIC:
- fprintf(fout, "%f%c", val.f, resp_sep);
+ fprintf(fout, "%g%c", val.f, resp_sep);
break;
case RIG_CONF_INT:
@@ -3445,7 +3445,7 @@ declare_proto_rig(get_level)
if (RIG_LEVEL_IS_FLOAT(level))
{
- fprintf(fout, "%f%c", val.f, resp_sep);
+ fprintf(fout, "%g%c", val.f, resp_sep);
}
else
{
@@ -3629,7 +3629,7 @@ declare_proto_rig(set_parm)
break;
case RIG_CONF_NUMERIC:
- CHKSCN1ARG(sscanf(arg2, "%f", &val.f));
+ CHKSCN1ARG(sscanf(arg2, "%g", &val.f));
break;
case RIG_CONF_STRING:
@@ -3747,7 +3747,7 @@ declare_proto_rig(get_parm)
break;
case RIG_CONF_NUMERIC:
- fprintf(fout, "%f%c", val.f, resp_sep);
+ fprintf(fout, "%g%c", val.f, resp_sep);
break;
case RIG_CONF_STRING:
@@ -4442,7 +4442,7 @@ int dump_chan(FILE *fout, RIG *rig, channel_t *chan)
break;
case RIG_CONF_NUMERIC:
- SNPRINTF(lstr, sizeof(lstr), "%f", chan->ext_levels[idx].val.f);
+ SNPRINTF(lstr, sizeof(lstr), "%g", chan->ext_levels[idx].val.f);
break;
case RIG_CONF_CHECKBUTTON:
commit f1a9823bddf2dd93e781bbc6fe9ef0a46335a639
Author: Mike Black W9MDB <mdb...@ya...>
Date: Wed Nov 8 08:05:56 2023 -0600
Move swr from rig_cache to priv value until we get rig_cache fixed to be expandable
https://github.com/Hamlib/Hamlib/issues/1419
diff --git a/include/hamlib/rig.h b/include/hamlib/rig.h
index bc16a1f0c..590e91e67 100644
--- a/include/hamlib/rig.h
+++ b/include/hamlib/rig.h
@@ -2478,6 +2478,7 @@ typedef enum {
* \brief Rig cache data
*
* This struct contains all the items we cache at the highest level
+ * DO NOT MODIFY THIS STRUCTURE AT ALL -- we need a new cache that is a pointer rather than a structure
*/
struct rig_cache {
int timeout_ms; // the cache timeout for invalidating itself
@@ -2551,7 +2552,6 @@ struct rig_cache {
struct timespec time_ptt;
struct timespec time_split;
int satmode; // if rig is in satellite mode
- double swr; // keep swr
};
/**
diff --git a/rigs/kenwood/flex6xxx.c b/rigs/kenwood/flex6xxx.c
index 3a6b1d113..0510ceac8 100644
--- a/rigs/kenwood/flex6xxx.c
+++ b/rigs/kenwood/flex6xxx.c
@@ -94,7 +94,8 @@ static struct kenwood_priv_caps powersdr_priv_caps =
{
.cmdtrm = EOM_KEN,
.mode_table = powersdr_mode_table,
- .if_len = 37
+ .if_len = 37,
+ .swr = 0
};
#define DSP_BW_NUM 8
@@ -839,16 +840,17 @@ int powersdr_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
case RIG_LEVEL_SWR:
{
+ struct kenwood_priv_caps *priv = kenwood_caps(rig);
ptt_t ptt = 0;
rig_get_ptt(rig, RIG_VFO_CURR, &ptt);
- if (ptt == RIG_PTT_OFF) { val->f = rig->state.cache.swr; return RIG_OK;}
+ if (ptt == RIG_PTT_OFF) { val->f = priv->swr; return RIG_OK;}
cmd = "ZZRM8"; // get SWR
len = 5;
ans = 8;
retval = kenwood_transaction(rig, cmd, lvlbuf, sizeof(lvlbuf));
- if (retval != RIG_OK) { val->f = rig->state.cache.swr; return RIG_OK;};
- sscanf(lvlbuf,"ZZRM8%lg", &rig->state.cache.swr);
- val->f = rig->state.cache.swr;
+ if (retval != RIG_OK) { val->f = priv->swr; return RIG_OK;};
+ sscanf(lvlbuf,"ZZRM8%lg", &priv->swr);
+ val->f = priv->swr;
rig_debug(RIG_DEBUG_ERR, "%s(%d) swr=%.1f\n", __func__, __LINE__, val->f);
return RIG_OK;
}
diff --git a/rigs/kenwood/kenwood.h b/rigs/kenwood/kenwood.h
index c455685ff..cfb5df20b 100644
--- a/rigs/kenwood/kenwood.h
+++ b/rigs/kenwood/kenwood.h
@@ -135,6 +135,7 @@ struct kenwood_priv_caps
struct kenwood_filter_width *filter_width; /* Last entry should have value == -1 and width_hz == -1 */
struct kenwood_slope_filter *slope_filter_high; /* Last entry should have value == -1 and frequency_hz == -1 */
struct kenwood_slope_filter *slope_filter_low; /* Last entry should have value == -1 and frequency_hz == -1 */
+ double swr;
};
struct kenwood_priv_data
commit 62341a657efcce90af1f897861b20572d0e3f4a9
Author: Mike Black W9MDB <mdb...@ya...>
Date: Tue Nov 7 16:05:27 2023 -0600
Only allow SWR read when ptt is on for PowerSDR
https://github.com/Hamlib/Hamlib/issues/1417
diff --git a/rigs/kenwood/flex6xxx.c b/rigs/kenwood/flex6xxx.c
index 1ff71288e..3a6b1d113 100644
--- a/rigs/kenwood/flex6xxx.c
+++ b/rigs/kenwood/flex6xxx.c
@@ -839,6 +839,9 @@ int powersdr_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
case RIG_LEVEL_SWR:
{
+ ptt_t ptt = 0;
+ rig_get_ptt(rig, RIG_VFO_CURR, &ptt);
+ if (ptt == RIG_PTT_OFF) { val->f = rig->state.cache.swr; return RIG_OK;}
cmd = "ZZRM8"; // get SWR
len = 5;
ans = 8;
commit 02b4da83c3c34330ca796942f7e0698fb0a86464
Author: Mike Black W9MDB <mdb...@ya...>
Date: Tue Nov 7 16:00:31 2023 -0600
Fix PowerSDR swr reading -- then we can fix FLRig's read too
https://github.com/Hamlib/Hamlib/issues/1417
diff --git a/rigs/kenwood/flex6xxx.c b/rigs/kenwood/flex6xxx.c
index 98699b212..1ff71288e 100644
--- a/rigs/kenwood/flex6xxx.c
+++ b/rigs/kenwood/flex6xxx.c
@@ -839,24 +839,14 @@ int powersdr_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
case RIG_LEVEL_SWR:
{
- // if not PTT we'll return the last SWR value
- // seems desirable to able to see this always
- ptt_t ptt;
- rig_get_ptt(rig, RIG_VFO_TX, &ptt);
- if (!ptt) { val->f = rig->state.cache.swr; return RIG_OK; }
- double forward=0, reverse=0;
- cmd = "ZZRM5"; // get forward power
+ cmd = "ZZRM8"; // get SWR
len = 5;
- ans = 4;
- retval = kenwood_safe_transaction(rig, cmd, lvlbuf, sizeof(lvlbuf), len + ans);
- if (retval != RIG_OK) { val->f = 0; return RIG_OK;};
- sscanf(lvlbuf,"ZZRM5%lg", &forward);
- if (forward == 0) { val->f = 1.0; return RIG_OK;}
- cmd = "ZZRM7";
- retval = kenwood_safe_transaction(rig, cmd, lvlbuf, sizeof(lvlbuf), len + ans);
- if (retval != RIG_OK) { val->f = 0; return RIG_OK;};
- sscanf(lvlbuf,"ZZRM7%lg", &reverse);
- rig->state.cache.swr = val->f = (1.0 + sqrt(reverse/forward)) / (1.0 - sqrt(reverse/forward));
+ ans = 8;
+ retval = kenwood_transaction(rig, cmd, lvlbuf, sizeof(lvlbuf));
+ if (retval != RIG_OK) { val->f = rig->state.cache.swr; return RIG_OK;};
+ sscanf(lvlbuf,"ZZRM8%lg", &rig->state.cache.swr);
+ val->f = rig->state.cache.swr;
+ rig_debug(RIG_DEBUG_ERR, "%s(%d) swr=%.1f\n", __func__, __LINE__, val->f);
return RIG_OK;
}
@@ -1350,7 +1340,7 @@ const struct rig_caps powersdr_caps =
RIG_MODEL(RIG_MODEL_POWERSDR),
.model_name = "PowerSDR/Thetis",
.mfg_name = "FlexRadio/ANAN",
- .version = "20231104.0",
+ .version = "20231107.0",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
commit a5bac081908255fe71dc06d934ef418821b50364
Author: Mike Black W9MDB <mdb...@ya...>
Date: Tue Nov 7 12:32:47 2023 -0600
Add SWR to flrig
diff --git a/rigs/dummy/flrig.c b/rigs/dummy/flrig.c
index 8e649a3ef..5c0b6fcd8 100644
--- a/rigs/dummy/flrig.c
+++ b/rigs/dummy/flrig.c
@@ -51,7 +51,7 @@
RIG_MODE_FM | RIG_MODE_WFM | RIG_MODE_FMN | RIG_MODE_PKTFM |\
RIG_MODE_C4FM)
-#define FLRIG_LEVELS (RIG_LEVEL_AF | RIG_LEVEL_RF | RIG_LEVEL_MICGAIN | RIG_LEVEL_STRENGTH | RIG_LEVEL_RFPOWER_METER | RIG_LEVEL_RFPOWER_METER_WATTS | RIG_LEVEL_RFPOWER)
+#define FLRIG_LEVELS (RIG_LEVEL_AF | RIG_LEVEL_RF | RIG_LEVEL_MICGAIN | RIG_LEVEL_STRENGTH | RIG_LEVEL_RFPOWER_METER | RIG_LEVEL_RFPOWER_METER_WATTS | RIG_LEVEL_RFPOWER | RIG_LEVEL_SWR)
#define FLRIG_PARM (TOK_FLRIG_VERIFY_FREQ|TOK_FLRIG_VERIFY_PTT)
@@ -138,7 +138,7 @@ const struct rig_caps flrig_caps =
RIG_MODEL(RIG_MODEL_FLRIG),
.model_name = "FLRig",
.mfg_name = "FLRig",
- .version = "20231010.0",
+ .version = "20231107.0",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
@@ -2137,6 +2137,8 @@ static int flrig_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
case RIG_LEVEL_STRENGTH: cmd = "rig.get_smeter"; break;
+ case RIG_LEVEL_SWR: cmd = "rig.get_swrmeter"; break;
+
case RIG_LEVEL_RFPOWER: cmd = "rig.get_power"; break;
case RIG_LEVEL_RFPOWER_METER_WATTS:
commit 7c3e71a487fd600591d299794fa2c3c28e79147a
Merge: 4aa8e010a 162a68588
Author: Mike Black W9MDB <mdb...@ya...>
Date: Tue Nov 7 07:55:10 2023 -0600
Merge branch 'master' of https://github.com/Hamlib/Hamlib
commit 162a685887d9cdd18dc17f557edbb117694b38f5
Merge: 45dca3be5 afdb26093
Author: Michael Black <mdb...@ya...>
Date: Tue Nov 7 07:54:55 2023 -0600
Merge pull request #1416 from mikaelnousiainen/hamlib-multicast-3
List all available VFOs in multicast state snapshot packets
commit afdb26093e6fe0eeafabcbad6b48859f928b7e47
Author: Mikael Nousiainen <mik...@ik...>
Date: Tue Nov 7 09:55:30 2023 +0200
List all available VFOs in multicast state snapshot packets
diff --git a/src/snapshot_data.c b/src/snapshot_data.c
index 8d99af7e9..a32ad1ff5 100644
--- a/src/snapshot_data.c
+++ b/src/snapshot_data.c
@@ -10,8 +10,6 @@
#include "cJSON.h"
-#define MAX_VFO_COUNT 4
-
#define SPECTRUM_MODE_FIXED "FIXED"
#define SPECTRUM_MODE_CENTER "CENTER"
@@ -87,7 +85,6 @@ static int snapshot_serialize_rig(cJSON *rig_node, RIG *rig)
}
cJSON_AddItemToObject(rig_node, "modes", modes_array);
- //RETURNFUNC2(RIG_OK);
return RIG_OK;
error:
@@ -157,9 +154,13 @@ static int snapshot_serialize_vfo(cJSON *vfo_node, RIG *rig, vfo_t vfo)
ptt = rig->state.cache.ptt;
if (is_tx)
- node = cJSON_AddBoolToObject(vfo_node, "ptt", ptt == RIG_PTT_OFF ? 0 : 1);
- else
- node = cJSON_AddBoolToObject(vfo_node, "ptt", 0);
+ {
+ node = cJSON_AddBoolToObject(vfo_node, "ptt", ptt == RIG_PTT_OFF ? 0 : 1);
+ }
+ else
+ {
+ node = cJSON_AddBoolToObject(vfo_node, "ptt", 0);
+ }
if (node == NULL)
{
@@ -181,7 +182,6 @@ static int snapshot_serialize_vfo(cJSON *vfo_node, RIG *rig, vfo_t vfo)
goto error;
}
- //RETURNFUNC2(RIG_OK);
return RIG_OK;
error:
@@ -309,7 +309,6 @@ static int snapshot_serialize_spectrum(cJSON *spectrum_node, RIG *rig,
goto error;
}
- //RETURNFUNC2(RIG_OK);
return RIG_OK;
error:
@@ -329,15 +328,9 @@ int snapshot_serialize(size_t buffer_length, char *buffer, RIG *rig,
cJSON *node;
cJSON_bool bool_result;
char buf[256];
-
- int vfo_count = 2;
- vfo_t vfos[MAX_VFO_COUNT];
int result;
int i;
- vfos[0] = RIG_VFO_A;
- vfos[1] = RIG_VFO_B;
-
root_node = cJSON_CreateObject();
if (root_node == NULL)
@@ -408,10 +401,16 @@ int snapshot_serialize(size_t buffer_length, char *buffer, RIG *rig,
goto error;
}
- for (i = 0; i < vfo_count; i++)
+ for (i = 0; i < HAMLIB_MAX_VFOS; i++)
{
+ vfo_t vfo = rig->state.vfo_list & RIG_VFO_N(i);
+ if (!vfo)
+ {
+ continue;
+ }
+
vfo_node = cJSON_CreateObject();
- result = snapshot_serialize_vfo(vfo_node, rig, vfos[i]);
+ result = snapshot_serialize_vfo(vfo_node, rig, vfo);
if (result != RIG_OK)
{
@@ -459,7 +458,6 @@ int snapshot_serialize(size_t buffer_length, char *buffer, RIG *rig,
rig->state.snapshot_packet_sequence_number++;
- //RETURNFUNC2(RIG_OK);
return RIG_OK;
error:
commit 4aa8e010a1653574bbf582fe9b102cb2464bff01
Merge: 49e93f309 45dca3be5
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sun Nov 5 22:38:55 2023 -0600
Merge branch 'master' of https://github.com/Hamlib/Hamlib
commit 45dca3be598c028f08e6db1edb0a7e78525c2fe2
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sun Nov 5 17:34:49 2023 -0600
Add dumpcap include files to test/Makefile.am
diff --git a/tests/Makefile.am b/tests/Makefile.am
index b2ec16650..11831e511 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -19,8 +19,8 @@ bin_PROGRAMS = rigctl rigctld rigmem rigsmtr rigswr rotctl rotctld rigctlcom rig
#check_PROGRAMS = dumpmem testrig testrigopen testrigcaps testtrn testbcd testfreq listrigs testloc rig_bench testcache cachetest cachetest2 testcookie testgrid testsecurity
check_PROGRAMS = dumpmem testrig testrigopen testrigcaps testtrn testbcd testfreq listrigs testloc rig_bench testcache cachetest cachetest2 testcookie testgrid hamlibmodels testmW2power
-RIGCOMMONSRC = rigctl_parse.c rigctl_parse.h dumpcaps.c dumpstate.c uthash.h rig_tests.c rig_tests.h
-ROTCOMMONSRC = rotctl_parse.c rotctl_parse.h dumpcaps_rot.c uthash.h
+RIGCOMMONSRC = rigctl_parse.c rigctl_parse.h dumpcaps.c dumpstate.c uthash.h rig_tests.c rig_tests.h dumpcaps.h
+ROTCOMMONSRC = rotctl_parse.c rotctl_parse.h dumpcaps_rot.c uthash.h dumpcaps_rot.h
AMPCOMMONSRC = ampctl_parse.c ampctl_parse.h dumpcaps_amp.c uthash.h
rigctl_SOURCES = rigctl.c $(RIGCOMMONSRC)
commit 49e93f3090f0dd32a2fbf752ab43d5872e58e52b
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sun Nov 5 17:16:09 2023 -0600
Comment out lines on compile warning
diff --git a/src/event.c b/src/event.c
index 6f70e37af..12feca650 100644
--- a/src/event.c
+++ b/src/event.c
@@ -69,10 +69,10 @@ void *rig_poll_routine(void *arg)
rig_poll_routine_args *args = (rig_poll_routine_args *)arg;
RIG *rig = args->rig;
struct rig_state *rs = &rig->state;
- int result;
+ //int result;
int update_occurred;
- vfo_t vfo = RIG_VFO_NONE, vfo_prev = RIG_VFO_NONE;
+ //vfo_t vfo = RIG_VFO_NONE, vfo_prev = RIG_VFO_NONE;
freq_t freq_main_a = 0, freq_main_b = 0, freq_main_c = 0, freq_sub_a = 0, freq_sub_b = 0, freq_sub_c = 0;
rmode_t mode_main_a = 0, mode_main_b = 0, mode_main_c = 0, mode_sub_a = 0, mode_sub_b = 0, mode_sub_c = 0;
pbwidth_t width_main_a = 0, width_main_b = 0, width_main_c = 0, width_sub_a = 0, width_sub_b = 0, width_sub_c = 0;
commit 02ffc6d6dcaa34100e2b7ff93e7713999505c45c
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sun Nov 5 17:03:21 2023 -0600
More set_conf/get_conf work
https://github.com/Hamlib/Hamlib/issues/971
diff --git a/src/network.c b/src/network.c
index c4754cbd1..a68329149 100644
--- a/src/network.c
+++ b/src/network.c
@@ -999,15 +999,19 @@ void *multicast_receiver(void *arg)
__LINE__);
int optval = 1;
+#ifdef __MINGW32__
+ if (setsockopt(socket_fd, SOL_SOCKET, SO_REUSEADDR, (PCHAR)&optval, sizeof(optval)) < 0)
+#else
if (setsockopt(socket_fd, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval)) < 0)
+#endif
{
rig_debug(RIG_DEBUG_ERR, "%s: error enabling UDP address reuse: %s\n", __func__,
strerror(errno));
return NULL;
}
-#if defined(SO_REUSEPORT)
// Windows does not have SO_REUSEPORT. However, SO_REUSEADDR works in a similar way.
+#if defined(SO_REUSEPORT)
if (setsockopt(socket_fd, SOL_SOCKET, SO_REUSEPORT, &optval, sizeof(optval)) < 0)
{
rig_debug(RIG_DEBUG_ERR, "%s: error enabling UDP port reuse: %s\n", __func__,
@@ -1038,7 +1042,11 @@ 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__
+ if (setsockopt(socket_fd, IPPROTO_IP, IP_ADD_MEMBERSHIP, (PCHAR)&mreq, sizeof(mreq)) < 0)
+#else
if (setsockopt(socket_fd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq)) < 0)
+#endif
{
rig_debug(RIG_DEBUG_ERR, "%s: error joining multicast group %s:%d: %s\n", __func__,
args->multicast_addr, args->multicast_port, strerror(err...
[truncated message content] |
|
From: n0nb <n0...@us...> - 2023-09-04 10:37:47
|
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 2e3e0df4d6be4bd9aad2f0a155ee2370a45959a0 (commit)
via 5963e149a97470d87bc4873748c76dc1bff31cd5 (commit)
via 5d12e5f8bd5b2f36dd5cd178afc339240af33bf3 (commit)
via 6e7aec3077da74b74cfc53beb32ae174b7260406 (commit)
via 875214eb54a78146ac4b45a485fe314575ebeca5 (commit)
via 8ede3518f1f2891654cab7190227f9c20e6fbabe (commit)
via 42b6fb13f998a8ba5a28ee2457cb70ced954d7a3 (commit)
via c1f24b2f7adf062d3378fed01ba042e53e2654c1 (commit)
from 897faf00c08028c6f6567bf12cf309c7787b1fc6 (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 2e3e0df4d6be4bd9aad2f0a155ee2370a45959a0
Author: Mike Black W9MDB <mdb...@ya...>
Date: Tue Aug 29 07:45:42 2023 -0500
Remove debug from serial.c
diff --git a/src/serial.c b/src/serial.c
index 23ccd1af8..cad1baa33 100644
--- a/src/serial.c
+++ b/src/serial.c
@@ -772,7 +772,7 @@ int HAMLIB_API serial_flush(hamlib_port_t *p)
}
timeout_save = p->timeout;
- rig_debug(RIG_DEBUG_ERR, "%s: p->timeout=%d\n", __func__, p->timeout);
+ //rig_debug(RIG_DEBUG_ERR, "%s: p->timeout=%d\n", __func__, p->timeout);
timeout_retry_save = p->timeout_retry;
p->timeout = 0;
p->timeout_retry = 0;
commit 5963e149a97470d87bc4873748c76dc1bff31cd5
Author: Mike Black W9MDB <mdb...@ya...>
Date: Mon Aug 28 23:34:28 2023 -0500
Fix IC-590 filter byte
https://github.com/Hamlib/Hamlib/issues/1375
diff --git a/rigs/icom/icom.c b/rigs/icom/icom.c
index 305731f03..9bbc86454 100644
--- a/rigs/icom/icom.c
+++ b/rigs/icom/icom.c
@@ -1345,7 +1345,7 @@ int icom_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
if (RIG_IS_IC905)
{
- // 10Hz resolution and > 5.85MHz is 6 bytes
+ // > 5.85GHz is 6 bytes
if (freq > 5.85e9) { freq_len = 6; }
}
@@ -2241,6 +2241,7 @@ int icom_set_mode_with_data(RIG *rig, vfo_t vfo, rmode_t mode,
|| RIG_IS_IC9100
|| RIG_IS_IC9700
|| RIG_IS_IC705
+ || RIG_IS_IC905
|| RIG_IS_X6100;
ENTERFUNC;
diff --git a/simulators/simic905.c b/simulators/simic905.c
index f9cfe2f56..4f6476a2d 100644
--- a/simulators/simic905.c
+++ b/simulators/simic905.c
@@ -32,7 +32,7 @@ vfo_t current_vfo = RIG_VFO_A;
int split = 0;
// we make B different from A to ensure we see a difference at startup
-double freqA = 1407400;
+double freqA = 145123456;
double freqB = 1407450;
mode_t modeA = RIG_MODE_PKTUSB;
mode_t modeB = RIG_MODE_PKTUSB;
@@ -50,6 +50,14 @@ int agc_time = 1;
int ovf_status = 0;
int powerstat = 1;
int keyspd = 25;
+int datamode = 0;
+int filter = 0;
+
+int WRITE(int fd, unsigned char* buf, int buflen)
+{
+ dump_hex(buf,buflen);
+ return write(fd,buf,buflen);
+}
void dumphex(unsigned char *buf, int n)
{
@@ -121,22 +129,22 @@ void frameParse(int fd, unsigned char *frame, int len)
int freq_len = 5;
if (current_vfo == RIG_VFO_A || current_vfo == RIG_VFO_MAIN)
{
- if (freqA > 5.85e5) freq_len = 6;
+ if (freqA > 5.85e9) freq_len = 6;
printf("get_freqA len=%d\n", freq_len);
to_bcd(&frame[5], (long long)freqA, freq_len * 2);
}
else
{
- if (freqB > 5.85e5) freq_len = 6;
+ if (freqB > 5.85e9) freq_len = 6;
printf("get_freqB len=%d\n", freq_len);
to_bcd(&frame[5], (long long)freqB, freq_len * 2);
}
- frame[4+freq_len] = 0xfd;
+ frame[5+freq_len] = 0xfd;
if (powerstat)
{
- n = write(fd, frame, 11);
+ n = WRITE(fd, frame, 11);
}
break;
@@ -156,7 +164,7 @@ void frameParse(int fd, unsigned char *frame, int len)
}
frame[7] = 0xfd;
- n = write(fd, frame, 8);
+ n = WRITE(fd, frame, 8);
break;
case 0x05:
@@ -168,7 +176,7 @@ void frameParse(int fd, unsigned char *frame, int len)
frame[4] = 0xfb;
frame[5] = 0xfd;
- n = write(fd, frame, 6);
+ n = WRITE(fd, frame, 6);
break;
case 0x06:
@@ -177,7 +185,7 @@ void frameParse(int fd, unsigned char *frame, int len)
frame[4] = 0xfb;
frame[5] = 0xfd;
- n = write(fd, frame, 6);
+ n = WRITE(fd, frame, 6);
break;
case 0x07:
@@ -197,7 +205,7 @@ void frameParse(int fd, unsigned char *frame, int len)
frame[4] = 0xfb;
frame[5] = 0xfd;
- n = write(fd, frame, 6);
+ n = WRITE(fd, frame, 6);
break;
case 0x0f:
@@ -206,7 +214,7 @@ void frameParse(int fd, unsigned char *frame, int len)
printf("get split %d\n", split);
frame[5] = split;
frame[6] = 0xfd;
- n = write(fd, frame, 7);
+ n = WRITE(fd, frame, 7);
}
else
{
@@ -214,7 +222,7 @@ void frameParse(int fd, unsigned char *frame, int len)
split = frame[5];
frame[4] = 0xfb;
frame[5] = 0xfd;
- n = write(fd, frame, 6);
+ n = WRITE(fd, frame, 6);
}
break;
@@ -235,9 +243,9 @@ void frameParse(int fd, unsigned char *frame, int len)
frame[5] = ant_curr;
frame[6] = ant_option;
frame[7] = 0xfd;
- printf("write 8 bytes\n");
+ printf("WRITE 8 bytes\n");
dump_hex(frame, 8);
- n = write(fd, frame, 8);
+ n = WRITE(fd, frame, 8);
break;
case 0x14:
@@ -251,7 +259,7 @@ void frameParse(int fd, unsigned char *frame, int len)
{
frame[6] = 0xfb;
dumphex(frame, 7);
- n = write(fd, frame, 7);
+ n = WRITE(fd, frame, 7);
printf("ACK x14 x08\n");
}
else
@@ -259,7 +267,7 @@ void frameParse(int fd, unsigned char *frame, int len)
to_bcd(&frame[6], (long long)128, 2);
frame[8] = 0xfb;
dumphex(frame, 9);
- n = write(fd, frame, 9);
+ n = WRITE(fd, frame, 9);
printf("SEND x14 x08\n");
}
@@ -273,7 +281,7 @@ void frameParse(int fd, unsigned char *frame, int len)
to_bcd(&frame[6], (long long)power_level, 2);
frame[8] = 0xfd;
- n = write(fd, frame, 9);
+ n = WRITE(fd, frame, 9);
break;
case 0x0c:
@@ -285,14 +293,14 @@ void frameParse(int fd, unsigned char *frame, int len)
printf("subcmd=0x0c #1\n");
keyspd = from_bcd(&frame[6], 2);
frame[6] = 0xfb;
- n = write(fd, frame, 7);
+ n = WRITE(fd, frame, 7);
}
else
{
printf("subcmd=0x0c #1\n");
to_bcd(&frame[6], keyspd, 2);
frame[8] = 0xfd;
- n = write(fd, frame, 9);
+ n = WRITE(fd, frame, 9);
}
break;
@@ -309,7 +317,7 @@ void frameParse(int fd, unsigned char *frame, int len)
case 0x07:
frame[6] = ovf_status;
frame[7] = 0xfd;
- n = write(fd, frame, 8);
+ n = WRITE(fd, frame, 8);
ovf_status = ovf_status == 0 ? 1 : 0;
break;
@@ -321,7 +329,7 @@ void frameParse(int fd, unsigned char *frame, int len)
to_bcd(&frame[6], (long long)meter_level, 2);
frame[8] = 0xfd;
- n = write(fd, frame, 9);
+ n = WRITE(fd, frame, 9);
break;
}
@@ -337,7 +345,7 @@ void frameParse(int fd, unsigned char *frame, int len)
{
frame[6] = satmode;
frame[7] = 0xfd;
- n = write(fd, frame, 8);
+ n = WRITE(fd, frame, 8);
}
break;
@@ -348,13 +356,13 @@ void frameParse(int fd, unsigned char *frame, int len)
case 0x18: // miscellaneous things
frame[5] = 1;
frame[6] = 0xfd;
- n = write(fd, frame, 7);
+ n = WRITE(fd, frame, 7);
break;
case 0x19: // miscellaneous things
frame[5] = 0x94;
frame[6] = 0xfd;
- n = write(fd, frame, 7);
+ n = WRITE(fd, frame, 7);
break;
case 0x1a: // miscellaneous things
@@ -365,7 +373,7 @@ void frameParse(int fd, unsigned char *frame, int len)
else { frame[6] = widthB; }
frame[7] = 0xfd;
- n = write(fd, frame, 8);
+ n = WRITE(fd, frame, 8);
break;
case 0x04: // AGC TIME
@@ -375,7 +383,7 @@ void frameParse(int fd, unsigned char *frame, int len)
{
frame[6] = agc_time;
frame[7] = 0xfd;
- n = write(fd, frame, 8);
+ n = WRITE(fd, frame, 8);
}
else
{
@@ -383,15 +391,31 @@ void frameParse(int fd, unsigned char *frame, int len)
agc_time = frame[6];
frame[4] = 0xfb;
frame[5] = 0xfd;
- n = write(fd, frame, 6);
+ n = WRITE(fd, frame, 6);
}
break;
+ case 0x06: // datamode
+ if (frame[5] == 0xfd)
+ {
+ frame[6] = datamode;
+ frame[7] = filter;
+ frame[8] = 0xfd;
+ n = WRITE(fd, frame, 9);
+ }
+ else
+ {
+ datamode = frame[6];
+ filter = frame[7];
+ frame[4] = 0xfb;
+ frame[5] = 0xfd;
+ n = WRITE(fd, frame, 6);
+ }
case 0x07: // satmode
frame[4] = 0;
frame[7] = 0xfd;
- n = write(fd, frame, 8);
+ n = WRITE(fd, frame, 8);
break;
}
@@ -404,16 +428,22 @@ void frameParse(int fd, unsigned char *frame, int len)
case 0:
if (frame[6] == 0xfd)
{
+ int tmp = frame[2];
+ frame[2] = frame[3];
+ frame[3] = tmp;
frame[6] = ptt;
frame[7] = 0xfd;
- n = write(fd, frame, 8);
+ n = WRITE(fd, frame, 8);
}
else
{
ptt = frame[6];
- frame[7] = 0xfb;
- frame[8] = 0xfd;
- n = write(fd, frame, 9);
+ int tmp = frame[2];
+ frame[2] = frame[3];
+ frame[3] = tmp;
+ frame[4] = 0xfb;
+ frame[5] = 0xfd;
+ n = WRITE(fd, frame, 6);
}
break;
@@ -431,18 +461,21 @@ void frameParse(int fd, unsigned char *frame, int len)
int freq_len = 5;
if (frame[5] == 0x00)
{
- if (freqA > 5.85e5) freq_len = 6;
+ if (freqA > 5.85e9) freq_len = 6;
to_bcd(&frame[6], (long long)freqA, freq_len * 2);
printf("X25 get_freqA=%.0f\n", freqA);
+ frame[6+freq_len] = 0xfd;
+ n = WRITE(fd, frame, 7+freq_len);
}
else
{
- if (freqB > 5.85e5) freq_len = 6;
+ if (freqB > 5.85e9) freq_len = 6;
to_bcd(&frame[6], (long long)freqB, freq_len * 2);
printf("X25 get_freqB=%.0f\n", freqB);
+ frame[6+freq_len] = 0xfd;
+ n = WRITE(fd, frame, 7+freq_len);
}
- frame[6+freq_len] = 0xfd;
//unsigned char frame2[12];
#if 0
@@ -458,9 +491,8 @@ void frameParse(int fd, unsigned char *frame, int len)
frame2[9] = 0x00;
frame2[10] = 0x00;
frame2[11] = 0xfd;
- n = write(fd, frame2, 12);
+ n = WRITE(fd, frame2, 12);
#endif
- n = write(fd, frame, 7+freq_len);
}
else
{
@@ -472,9 +504,12 @@ void frameParse(int fd, unsigned char *frame, int len)
if (frame[5] == 0x00) { freqA = freq; }
else { freqB = freq; }
+ int tmp = frame[2];
+ frame[2] = frame[3];
+ frame[3] = tmp;
frame[4] = 0xfb;
frame[5] = 0xfd;
- n = write(fd, frame, 6);
+ n = WRITE(fd, frame, 6);
#if 0
// send async frame
frame[2] = 0x00; // async freq
@@ -486,7 +521,7 @@ void frameParse(int fd, unsigned char *frame, int len)
frame[8] = 0x96;
frame[9] = 0x12;
frame[10] = 0xfd;
- n = write(fd, frame, 11);
+ n = WRITE(fd, frame, 11);
#endif
}
@@ -503,7 +538,7 @@ void frameParse(int fd, unsigned char *frame, int len)
frame[7] = frame[5] == 0 ? datamodeA : datamodeB;
frame[8] = frame[5] == 0 ? filterA : filterB;
frame[9] = 0xfd;
- n = write(fd, frame, 10);
+ n = WRITE(fd, frame, 10);
}
else
{
@@ -522,7 +557,7 @@ void frameParse(int fd, unsigned char *frame, int len)
frame[4] = 0xfb;
frame[5] = 0xfd;
- n = write(fd, frame, 6);
+ n = WRITE(fd, frame, 6);
}
printf("\n");
@@ -533,14 +568,14 @@ void frameParse(int fd, unsigned char *frame, int len)
printf("x25 send nak\n");
frame[4] = 0xfa;
frame[5] = 0xfd;
- n = write(fd, frame, 6);
+ n = WRITE(fd, frame, 6);
break;
case 0x26:
printf("x26 send nak\n");
frame[4] = 0xfa;
frame[5] = 0xfd;
- n = write(fd, frame, 6);
+ n = WRITE(fd, frame, 6);
break;
#endif
commit 5d12e5f8bd5b2f36dd5cd178afc339240af33bf3
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sun Aug 27 15:43:28 2023 -0500
Fix IC-905 10Ghz+ set/get freq and lower frequencies too
https://github.com/Hamlib/Hamlib/issues/1375
diff --git a/rigs/icom/icom.c b/rigs/icom/icom.c
index f049c77e8..305731f03 100644
--- a/rigs/icom/icom.c
+++ b/rigs/icom/icom.c
@@ -1347,7 +1347,6 @@ int icom_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
{
// 10Hz resolution and > 5.85MHz is 6 bytes
if (freq > 5.85e9) { freq_len = 6; }
- freq /= 10;
}
/*
@@ -1799,8 +1798,6 @@ int icom_get_freq(RIG *rig, vfo_t vfo, freq_t *freq)
if (freq_len == 3) { *freq *= 10000; } // 3-byte freq for ID5100 is in 10000Hz units so convert to Hz
-if (RIG_IS_IC905) { *freq *= 10; }
-
if (vfo == RIG_VFO_MEM && civ_731_mode) { priv->civ_731_mode = 1; }
switch (vfo)
diff --git a/simulators/simic7300.c b/simulators/simic7300.c
index 86283a01c..978f72a8f 100644
--- a/simulators/simic7300.c
+++ b/simulators/simic7300.c
@@ -540,9 +540,8 @@ case 0x26:
frame[6] = frame[5] == 0 ? modeA : modeB;
frame[7] = frame[5] == 0 ? datamodeA : datamodeB;
- frame[8] = 0xfb;
- frame[9] = 0xfd;
- n = write(fd, frame, 10);
+ frame[8] = 0xfd;
+ n = write(fd, frame, 9);
}
else
{
diff --git a/simulators/simic7851.c b/simulators/simic7851.c
index 53fb10d27..41d76e25b 100644
--- a/simulators/simic7851.c
+++ b/simulators/simic7851.c
@@ -33,10 +33,12 @@ int split = 0;
// we make B different from A to ensure we see a difference at startup
float freqA = 14074000;
float freqB = 14074500;
-mode_t modeA = RIG_MODE_PKTUSB;
-mode_t modeB = RIG_MODE_PKTUSB;
-int datamodeA = 0;
-int datamodeB = 0;
+mode_t modeA = 1;
+mode_t modeB = 0;
+int datamodeA = 2;
+int datamodeB = 1;
+int filterA = 3;
+int filterB = 2;
pbwidth_t widthA = 0;
pbwidth_t widthB = 1;
ant_t ant_curr = 0;
@@ -49,8 +51,9 @@ int powerstat = 1;
int datamode = 0;
int keyspd = 130; // 130=20WPM
int attenuator;
-int filterA = 2;
-int filterB = 3;
+int notch = 0;
+int speechcompressor = 0;
+int vox = 0;
void dumphex(unsigned char *buf, int n)
{
@@ -75,7 +78,8 @@ again:
if (c == 0xfd)
{
- dumphex(buf, i);
+// printf("Read: ");
+// dumphex(buf, i);
return i;
}
@@ -105,7 +109,7 @@ void frameParse(int fd, unsigned char *frame, int len)
double freq;
int n = 0;
- dumphex(frame, len);
+ //dumphex(frame, len);
if (frame[0] != 0xfe && frame[1] != 0xfe)
{
@@ -114,7 +118,7 @@ void frameParse(int fd, unsigned char *frame, int len)
return;
}
- int echo = 1;
+ int echo = 0;
if (echo)
{
@@ -131,12 +135,12 @@ void frameParse(int fd, unsigned char *frame, int len)
//from_bcd(frameackbuf[2], (civ_731_mode ? 4 : 5) * 2);
if (current_vfo == RIG_VFO_A || current_vfo == RIG_VFO_MAIN)
{
- printf("get_freqA\n");
+ //printf("get_freqA\n");
to_bcd(&frame[5], (long long)freqA, (civ_731_mode ? 4 : 5) * 2);
}
else
{
- printf("get_freqB\n");
+ //printf("get_freqB\n");
to_bcd(&frame[5], (long long)freqB, (civ_731_mode ? 4 : 5) * 2);
}
@@ -152,13 +156,13 @@ void frameParse(int fd, unsigned char *frame, int len)
case 0x04:
if (current_vfo == RIG_VFO_A || current_vfo == RIG_VFO_MAIN)
{
- printf("get_modeA\n");
+ //printf("get_modeA\n");
frame[5] = modeA;
frame[6] = widthA;
}
else
{
- printf("get_modeB\n");
+ //printf("get_modeB\n");
frame[5] = modeB;
frame[6] = widthB;
}
@@ -169,7 +173,7 @@ void frameParse(int fd, unsigned char *frame, int len)
case 0x05:
freq = from_bcd(&frame[5], (civ_731_mode ? 4 : 5) * 2);
- printf("set_freq to %.0f\n", freq);
+ //printf("set_freq to %.0f\n", freq);
if (current_vfo == RIG_VFO_A || current_vfo == RIG_VFO_MAIN) { freqA = freq; }
else { freqB = freq; }
@@ -190,12 +194,12 @@ void frameParse(int fd, unsigned char *frame, int len)
case 0x07:
- printf("******* [5] = 0x07\n");
+ //printf("******* [5] = 0x07\n");
switch (frame[5])
{
case 0xd2:
- printf("******* [6] = 0x07\n");
+ //printf("******* [6] = 0x07\n");
switch (frame[6])
{
@@ -205,11 +209,11 @@ void frameParse(int fd, unsigned char *frame, int len)
}
}
- printf("set_vfo to %s\n", rig_strvfo(current_vfo));
+ //printf("set_vfo to %s\n", rig_strvfo(current_vfo));
frame[4] = 0xfb;
frame[5] = 0xfd;
- printf("0x07 0xd2 answer: \n");
+ //printf("0x07 0xd2 answer: \n");
dump_hex(frame, 6);
n = write(fd, frame, 6);
break;
@@ -221,13 +225,13 @@ void frameParse(int fd, unsigned char *frame, int len)
if (frame[5] == 0xfd)
{
- printf("get split %d\n", 1);
+ //printf("get split %d\n", 1);
frame[7] = 0xfd;
n = write(fd, frame, 8);
}
else
{
- printf("set split %d\n", 1);
+ //printf("set split %d\n", 1);
frame[4] = 0xfb;
frame[5] = 0xfd;
n = write(fd, frame, 6);
@@ -245,37 +249,36 @@ void frameParse(int fd, unsigned char *frame, int len)
}
else
{
- frame[6] = attenuator;
- frame[7] = 0xfd;
- n = write(fd, frame, 8);
+ frame[5] = attenuator;
+ frame[6] = 0xfd;
+ n = write(fd, frame, 7);
}
break;
-
case 0x12: // we're simulating the 3-byte version -- not the 2-byte
if (frame[5] != 0xfd)
{
- printf("Set ant %d\n", -1);
+ //printf("Set ant %d\n", -1);
ant_curr = frame[5];
ant_option = frame[6];
dump_hex(frame, 8);
}
else
{
- printf("Get ant\n");
+ //printf("Get ant\n");
}
frame[5] = ant_curr;
frame[6] = ant_option;
frame[7] = 0xfd;
- printf("write 8 bytes\n");
+ //printf("write 8 bytes\n");
dump_hex(frame, 8);
n = write(fd, frame, 8);
break;
case 0x14:
- printf("******** 0x14 received frame[5]=0x%02x\n", frame[5]);
+ //printf("******** 0x14 received frame[5]=0x%02x\n", frame[5]);
switch (frame[5])
{
@@ -285,28 +288,28 @@ void frameParse(int fd, unsigned char *frame, int len)
case 0x08:
if (frame[6] != 0xfd)
{
- printf("DEBUG#1\n");
+ //printf("DEBUG#1\n");
frame[4] = 0xfb;
frame[5] = 0xfd;
dumphex(frame, 6);
n = write(fd, frame, 6);
- printf("ACK x14 x08\n");
+ //printf("ACK x14 x08\n");
}
else
{
- printf("DEBUG#2\n");
+ //printf("DEBUG#2\n");
to_bcd(&frame[6], (long long)128, 2);
frame[8] = 0xfb;
frame[9] = 0xfd;
dumphex(frame, 10);
n = write(fd, frame, 10);
- printf("SEND x14 x08\n");
+ //printf("SEND x14 x08\n");
}
break;
case 0x0a:
- printf("Using power level %d\n", power_level);
+ //printf("Using power level %d\n", power_level);
power_level += 10;
if (power_level > 250) { power_level = 0; }
@@ -331,7 +334,7 @@ void frameParse(int fd, unsigned char *frame, int len)
break;
default:
- printf("*********** NAK\n");
+ //printf("*********** NAK\n");
frame[5] = 0xfa;
frame[6] = 0xfd;
n = write(fd, frame, 7);
@@ -353,7 +356,7 @@ void frameParse(int fd, unsigned char *frame, int len)
break;
case 0x11:
- printf("Using meter level %d\n", meter_level);
+ //printf("Using meter level %d\n", meter_level);
meter_level += 10;
if (meter_level > 250) { meter_level = 0; }
@@ -374,6 +377,51 @@ void frameParse(int fd, unsigned char *frame, int len)
case 0x16:
switch (frame[5])
{
+ case 0x44:
+ if (frame[6] == 0xfe)
+ {
+ frame[6] = speechcompressor;
+ frame[7] = 0xfd;
+ n = write(fd, frame, 8);
+ }
+ else
+ {
+ speechcompressor = frame[6];
+ frame[4] = 0xfb;
+ frame[5] = 0xfd;
+ n = write(fd, frame, 6);
+ }
+ break;
+ case 0x46:
+ if (frame[6] == 0xfe)
+ {
+ frame[6] = vox;
+ frame[7] = 0xfd;
+ n = write(fd, frame, 8);
+ }
+ else
+ {
+ vox = frame[6];
+ frame[4] = 0xfb;
+ frame[5] = 0xfd;
+ n = write(fd, frame, 6);
+ }
+ break;
+ case 0x48:
+ if (frame[6] == 0xfe)
+ {
+ frame[6] = notch;
+ frame[7] = 0xfd;
+ n = write(fd, frame, 8);
+ }
+ else
+ {
+ notch = frame[6];
+ frame[4] = 0xfb;
+ frame[5] = 0xfd;
+ n = write(fd, frame, 6);
+ }
+ break;
case 0x5a:
if (frame[6] == 0xfe)
{
@@ -415,7 +463,7 @@ void frameParse(int fd, unsigned char *frame, int len)
break;
case 0x04: // AGC TIME
- printf("frame[6]==x%02x, frame[7]=0%02x\n", frame[6], frame[7]);
+ //printf("frame[6]==x%02x, frame[7]=0%02x\n", frame[6], frame[7]);
if (frame[6] == 0xfd) // the we are reading
{
@@ -425,7 +473,7 @@ void frameParse(int fd, unsigned char *frame, int len)
}
else
{
- printf("AGC_TIME RESPONSE******************************");
+ //printf("AGC_TIME RESPONSE******************************");
agc_time = frame[6];
frame[4] = 0xfb;
frame[5] = 0xfd;
@@ -494,12 +542,12 @@ void frameParse(int fd, unsigned char *frame, int len)
if (frame[5] == 0x00)
{
to_bcd(&frame[6], (long long)freqA, (civ_731_mode ? 4 : 5) * 2);
- printf("X25 get_freqA=%.0f\n", freqA);
+ //printf("X25 get_freqA=%.0f\n", freqA);
}
else
{
to_bcd(&frame[6], (long long)freqB, (civ_731_mode ? 4 : 5) * 2);
- printf("X25 get_freqB=%.0f\n", freqB);
+ //printf("X25 get_freqB=%.0f\n", freqB);
}
frame[11] = 0xfd;
@@ -524,7 +572,7 @@ void frameParse(int fd, unsigned char *frame, int len)
else
{
freq = from_bcd(&frame[6], (civ_731_mode ? 4 : 5) * 2);
- printf("set_freq to %.0f\n", freq);
+ //printf("set_freq to %.0f\n", freq);
if (frame[5] == 0x00) { freqA = freq; }
else { freqB = freq; }
@@ -548,31 +596,36 @@ void frameParse(int fd, unsigned char *frame, int len)
break;
case 0x26:
- for (int i = 0; i < 6; ++i) { printf("%02x:", frame[i]); }
+ for (int i = 0; i < 7; ++i) { printf("%02x:", frame[i]); }
if (frame[6] == 0xfd) // then a query
{
- for (int i = 0; i < 6; ++i) { printf("%02x:", frame[i]); }
-
+ printf("GET MODE XXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n");
+// fe fe e0 8e 26 00 01 00 fd fd
frame[6] = frame[5] == 0 ? modeA : modeB;
frame[7] = frame[5] == 0 ? datamodeA : datamodeB;
frame[8] = frame[5] == 0 ? filterA : filterB;
frame[9] = 0xfd;
+ printf("x26 response: ");
+ dumphex(frame, 10);
n = write(fd, frame, 10);
}
else
{
+ printf("SET MODE YYYYYYYYYYYYYYYYYYYYYYYYYYYYY\n");
for (int i = 0; i < 12; ++i) { printf("%02x:", frame[i]); }
- if (frame[6] == 0)
+ if (frame[5] == 0)
{
- modeA = frame[7];
- datamodeA = frame[8];
+ modeA = frame[6];
+ datamodeA = frame[7];
+ filterA = frame[8];
}
else
{
- modeB = frame[7];
- datamodeB = frame[8];
+ modeB = frame[6];
+ datamodeB = frame[7];
+ filterB = frame[8];
}
frame[4] = 0xfb;
@@ -701,7 +754,7 @@ int main(int argc, char **argv)
hl_usleep(1000 * 1000);
}
- rigStatus();
+ //rigStatus();
}
return 0;
diff --git a/simulators/simic905.c b/simulators/simic905.c
index be90e4666..f9cfe2f56 100644
--- a/simulators/simic905.c
+++ b/simulators/simic905.c
@@ -32,12 +32,14 @@ vfo_t current_vfo = RIG_VFO_A;
int split = 0;
// we make B different from A to ensure we see a difference at startup
-float freqA = 14074000;
-float freqB = 14074500;
+double freqA = 1407400;
+double freqB = 1407450;
mode_t modeA = RIG_MODE_PKTUSB;
mode_t modeB = RIG_MODE_PKTUSB;
int datamodeA = 0;
int datamodeB = 0;
+int filterA = 1;
+int filterB = 2;
pbwidth_t widthA = 0;
pbwidth_t widthB = 1;
ant_t ant_curr = 0;
@@ -47,6 +49,7 @@ int satmode = 0;
int agc_time = 1;
int ovf_status = 0;
int powerstat = 1;
+int keyspd = 25;
void dumphex(unsigned char *buf, int n)
{
@@ -115,18 +118,21 @@ void frameParse(int fd, unsigned char *frame, int len)
case 0x03:
//from_bcd(frameackbuf[2], (civ_731_mode ? 4 : 5) * 2);
+ int freq_len = 5;
if (current_vfo == RIG_VFO_A || current_vfo == RIG_VFO_MAIN)
{
- printf("get_freqA\n");
- to_bcd(&frame[5], (long long)freqA, (civ_731_mode ? 4 : 5) * 2);
+ if (freqA > 5.85e5) freq_len = 6;
+ printf("get_freqA len=%d\n", freq_len);
+ to_bcd(&frame[5], (long long)freqA, freq_len * 2);
}
else
{
- printf("get_freqB\n");
- to_bcd(&frame[5], (long long)freqB, (civ_731_mode ? 4 : 5) * 2);
+ if (freqB > 5.85e5) freq_len = 6;
+ printf("get_freqB len=%d\n", freq_len);
+ to_bcd(&frame[5], (long long)freqB, freq_len * 2);
}
- frame[10] = 0xfd;
+ frame[4+freq_len] = 0xfd;
if (powerstat)
{
@@ -182,9 +188,9 @@ void frameParse(int fd, unsigned char *frame, int len)
case 0x01: current_vfo = RIG_VFO_B; break;
- case 0xd0: current_vfo = RIG_VFO_MAIN; break;
+ case 0xa0: freqB = freqA;modeB = modeA; break;
- case 0xd1: current_vfo = RIG_VFO_SUB; break;
+ case 0xb0: current_vfo = RIG_VFO_SUB; exit(1);break;
}
printf("set_vfo to %s\n", rig_strvfo(current_vfo));
@@ -195,19 +201,17 @@ void frameParse(int fd, unsigned char *frame, int len)
break;
case 0x0f:
- if (frame[5] == 0) { split = 0; }
- else if (frame[5] == 1) { split = 1; }
- else { frame[6] = split; }
-
if (frame[5] == 0xfd)
{
- printf("get split %d\n", 1);
- frame[7] = 0xfd;
- n = write(fd, frame, 8);
+ printf("get split %d\n", split);
+ frame[5] = split;
+ frame[6] = 0xfd;
+ n = write(fd, frame, 7);
}
else
{
printf("set split %d\n", 1);
+ split = frame[5];
frame[4] = 0xfb;
frame[5] = 0xfd;
n = write(fd, frame, 6);
@@ -271,10 +275,32 @@ void frameParse(int fd, unsigned char *frame, int len)
frame[8] = 0xfd;
n = write(fd, frame, 9);
break;
+
+ case 0x0c:
+ dumphex(frame, 10);
+ printf("subcmd=0x0c #1\n");
+
+ if (frame[6] != 0xfd) // then we have data
+ {
+ printf("subcmd=0x0c #1\n");
+ keyspd = from_bcd(&frame[6], 2);
+ frame[6] = 0xfb;
+ n = write(fd, frame, 7);
+ }
+ else
+ {
+ printf("subcmd=0x0c #1\n");
+ to_bcd(&frame[6], keyspd, 2);
+ frame[8] = 0xfd;
+ n = write(fd, frame, 9);
+ }
+
+ break;
}
break;
+
case 0x15:
switch (frame[5])
{
@@ -402,20 +428,24 @@ void frameParse(int fd, unsigned char *frame, int len)
case 0x25:
if (frame[6] == 0xfd)
{
+ int freq_len = 5;
if (frame[5] == 0x00)
{
- to_bcd(&frame[6], (long long)freqA, 6 * 2);
+ if (freqA > 5.85e5) freq_len = 6;
+ to_bcd(&frame[6], (long long)freqA, freq_len * 2);
printf("X25 get_freqA=%.0f\n", freqA);
}
else
{
- to_bcd(&frame[6], (long long)freqB, 6 * 2);
+ if (freqB > 5.85e5) freq_len = 6;
+ to_bcd(&frame[6], (long long)freqB, freq_len * 2);
printf("X25 get_freqB=%.0f\n", freqB);
}
- frame[12] = 0xfd;
- unsigned char frame2[12];
+ frame[6+freq_len] = 0xfd;
+ //unsigned char frame2[12];
+#if 0
frame2[0] = 0xfe;
frame2[1] = 0xfe;
frame2[2] = 0x00; // send transceive frame
@@ -429,11 +459,14 @@ void frameParse(int fd, unsigned char *frame, int len)
frame2[10] = 0x00;
frame2[11] = 0xfd;
n = write(fd, frame2, 12);
- n = write(fd, frame, 13);
+#endif
+ n = write(fd, frame, 7+freq_len);
}
else
{
- freq = from_bcd(&frame[6], (civ_731_mode ? 4 : 5) * 2);
+ int freq_len = 5;
+ if (frame[11] != 0xfd) freq_len = 6;
+ freq = from_bcd(&frame[6], freq_len * 2);
printf("set_freq to %.0f\n", freq);
if (frame[5] == 0x00) { freqA = freq; }
@@ -442,6 +475,7 @@ void frameParse(int fd, unsigned char *frame, int len)
frame[4] = 0xfb;
frame[5] = 0xfd;
n = write(fd, frame, 6);
+#if 0
// send async frame
frame[2] = 0x00; // async freq
frame[3] = 0xa2;
@@ -453,6 +487,7 @@ void frameParse(int fd, unsigned char *frame, int len)
frame[9] = 0x12;
frame[10] = 0xfd;
n = write(fd, frame, 11);
+#endif
}
break;
@@ -466,7 +501,7 @@ void frameParse(int fd, unsigned char *frame, int len)
frame[6] = frame[5] == 0 ? modeA : modeB;
frame[7] = frame[5] == 0 ? datamodeA : datamodeB;
- frame[8] = 0xfb;
+ frame[8] = frame[5] == 0 ? filterA : filterB;
frame[9] = 0xfd;
n = write(fd, frame, 10);
}
commit 6e7aec3077da74b74cfc53beb32ae174b7260406
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sun Aug 27 12:33:11 2023 -0500
Fix IC905 test for 5.8GHz (not MHz)
vi simic905.c
diff --git a/rigs/icom/icom.c b/rigs/icom/icom.c
index fcdc196ee..f049c77e8 100644
--- a/rigs/icom/icom.c
+++ b/rigs/icom/icom.c
@@ -1346,8 +1346,8 @@ int icom_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
if (RIG_IS_IC905)
{
// 10Hz resolution and > 5.85MHz is 6 bytes
- freq /= 10;
- if (freq > 5.85e6) { freq_len = 6; }
+ if (freq > 5.85e9) { freq_len = 6; }
+ freq /= 10;
}
/*
@@ -1355,7 +1355,6 @@ int icom_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
*/
to_bcd(freqbuf, freq, freq_len * 2);
- // mike
if (rig->caps->targetable_vfo & RIG_TARGETABLE_FREQ)
{
vfo_t vfo_unselected = RIG_VFO_B | RIG_VFO_SUB | RIG_VFO_SUB_B | RIG_VFO_MAIN_B
@@ -1834,8 +1833,8 @@ default:
rig_strvfo(vfo));
}
- rig_debug(RIG_DEBUG_VERBOSE, "%s exit vfo=%s, curr_vfo=%s\n", __func__,
- rig_strvfo(vfo), rig_strvfo(rig->state.current_vfo));
+ rig_debug(RIG_DEBUG_VERBOSE, "%s exit vfo=%s, curr_vfo=%s ,freq=%g\n", __func__,
+ rig_strvfo(vfo), rig_strvfo(rig->state.current_vfo), *freq);
RETURNFUNC2(RIG_OK);
}
commit 875214eb54a78146ac4b45a485fe314575ebeca5
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sun Aug 27 12:08:00 2023 -0500
Fix IC-905 set_freq -- get_freq should be working
https://github.com/Hamlib/Hamlib/issues/1375
diff --git a/rigs/icom/icom.c b/rigs/icom/icom.c
index daecdbf03..fcdc196ee 100644
--- a/rigs/icom/icom.c
+++ b/rigs/icom/icom.c
@@ -1343,7 +1343,12 @@ int icom_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
freq_len = priv->civ_731_mode ? 4 : 5;
- if (RIG_IS_IC905) { freq /= 10; freq_len = 6; }
+ if (RIG_IS_IC905)
+ {
+ // 10Hz resolution and > 5.85MHz is 6 bytes
+ freq /= 10;
+ if (freq > 5.85e6) { freq_len = 6; }
+ }
/*
* to_bcd requires nibble len
commit 8ede3518f1f2891654cab7190227f9c20e6fbabe
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sat Aug 26 16:06:20 2023 -0500
Remove VFO_OP_XCHG from IC-905 as it's not working in firmware V1.11 anymore
https://github.com/Hamlib/Hamlib/issues/1374
diff --git a/rigs/icom/ic7300.c b/rigs/icom/ic7300.c
index 59acc14d5..e4da8a97f 100644
--- a/rigs/icom/ic7300.c
+++ b/rigs/icom/ic7300.c
@@ -135,6 +135,10 @@ int ic9700_set_vfo(RIG *rig, vfo_t vfo);
} }
+/*
+ * IC905 items that differ from IC7300
+ */
+#define IC905_VFO_OPS (RIG_OP_CPY|RIG_OP_FROM_VFO|RIG_OP_TO_VFO|RIG_OP_MCL|RIG_OP_TUNE)
/*
* IC705 items that differ from IC7300
*/
@@ -1523,7 +1527,7 @@ const struct rig_caps ic905_caps =
RIG_MODEL(RIG_MODEL_IC905),
.model_name = "IC-905",
.mfg_name = "Icom",
- .version = BACKEND_VER ".0",
+ .version = BACKEND_VER ".1",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
@@ -1576,7 +1580,7 @@ const struct rig_caps ic905_caps =
.agc_level_count = 3,
.agc_levels = { RIG_AGC_OFF, RIG_AGC_FAST, RIG_AGC_MEDIUM, RIG_AGC_SLOW },
.targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE,
- .vfo_ops = IC7300_VFO_OPS,
+ .vfo_ops = IC905_VFO_OPS,
.scan_ops = IC7300_SCAN_OPS,
.transceive = RIG_TRN_RIG,
.bank_qty = 5,
commit 42b6fb13f998a8ba5a28ee2457cb70ced954d7a3
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sat Aug 26 10:13:54 2023 -0500
Remove hamlib/config.h from nobase_include_HEADERS
https://github.com/Hamlib/Hamlib/issues/1373
diff --git a/include/Makefile.am b/include/Makefile.am
index 324c082f4..bba8cdc13 100644
--- a/include/Makefile.am
+++ b/include/Makefile.am
@@ -3,4 +3,4 @@ noinst_HEADERS = bandplan.h num_stdio.h
nobase_include_HEADERS = hamlib/rig.h hamlib/riglist.h hamlib/rig_dll.h \
hamlib/rotator.h hamlib/rotlist.h hamlib/rigclass.h \
hamlib/rotclass.h hamlib/amplifier.h hamlib/amplist.h \
- hamlib/ampclass.h hamlib/config.h hamlib/multicast.h
+ hamlib/ampclass.h hamlib/multicast.h
commit c1f24b2f7adf062d3378fed01ba042e53e2654c1
Author: Mike Black W9MDB <mdb...@ya...>
Date: Fri Aug 25 15:36:12 2023 -0500
Fix TS2000 SA command
diff --git a/rigs/kenwood/kenwood.c b/rigs/kenwood/kenwood.c
index 77480f5b3..883507a01 100644
--- a/rigs/kenwood/kenwood.c
+++ b/rigs/kenwood/kenwood.c
@@ -1262,7 +1262,7 @@ int kenwood_set_vfo(RIG *rig, vfo_t vfo)
rig_debug(RIG_DEBUG_VERBOSE, "%s: checking satellite mode status\n", __func__);
SNPRINTF(cmdbuf, sizeof(cmdbuf), "SA");
- retval = kenwood_transaction(rig, cmdbuf, retbuf, 4);
+ retval = kenwood_transaction(rig, cmdbuf, retbuf, 18);
if (retval != RIG_OK)
{
@@ -5330,6 +5330,7 @@ int kenwood_send_morse(RIG *rig, vfo_t vfo, const char *msg)
/*
* kenwood_stop_morse
+ /
*/
int kenwood_stop_morse(RIG *rig, vfo_t vfo)
{
diff --git a/rigs/kenwood/kenwood.h b/rigs/kenwood/kenwood.h
index 0fbaaa79f..33dafa3e7 100644
--- a/rigs/kenwood/kenwood.h
+++ b/rigs/kenwood/kenwood.h
@@ -28,7 +28,7 @@
#include "token.h"
#include "idx_builtin.h"
-#define BACKEND_VER "20230821"
+#define BACKEND_VER "20230825"
#define EOM_KEN ';'
#define EOM_TH '\r'
-----------------------------------------------------------------------
Summary of changes:
include/Makefile.am | 2 +-
rigs/icom/ic7300.c | 8 ++-
rigs/icom/icom.c | 14 ++--
rigs/kenwood/kenwood.c | 3 +-
rigs/kenwood/kenwood.h | 2 +-
simulators/simic7300.c | 5 +-
simulators/simic7851.c | 151 +++++++++++++++++++++++++++--------------
simulators/simic905.c | 178 ++++++++++++++++++++++++++++++++++---------------
src/serial.c | 2 +-
9 files changed, 247 insertions(+), 118 deletions(-)
hooks/post-receive
--
Hamlib -- Ham radio control libraries
|
|
From: n0nb <n0...@us...> - 2023-08-24 17:39:04
|
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 897faf00c08028c6f6567bf12cf309c7787b1fc6 (commit)
via d049b90aa9041ea6821f88ce92617425e9efffad (commit)
via ccab50a7df42dcd9b937c17cdd8cf602a9d22dea (commit)
via 470c71dd93633d484525835de5bb438baa48f17e (commit)
via 46c0649b234163f4d08927d173d505168ef93436 (commit)
via 404ceb8c4b11ff54bfe76cfa2240a8878fc882f2 (commit)
via 453a8cc94f98131b04bd136155d9df7523faf393 (commit)
via 5113c6a895766ba32bb2aeaa3f04b2a6cac2f175 (commit)
via 194906b2900366ea73327252d379e0330edb1fb5 (commit)
via 24e407c82c358b09e7714c301bf2d398607b71cb (commit)
via 7011b4855461a1fa178e7ddc9469b8826c220ad1 (commit)
via cca3891362a0efd56e47eaa10c00bf419bedd215 (commit)
via 1b0f0ec42201e418ebcdfa66ad0645ceed069348 (commit)
via b40da0f6b0f07d19b79a0869d6fe522037dc3e5f (commit)
via 424e8cc04a67bbb240efa2a14c44922eed352bd8 (commit)
via 1ad43a44ba437ea095061ec289e51457a2335306 (commit)
via 3492be25625a54a1331ac58a2b6daf680217b1e6 (commit)
via af86f44eac92b526b017c73a81a72b7265459888 (commit)
via d57e4ae185ddf5a1dc5971a080af8984187f2a03 (commit)
via 3318766a7c9efcb23c522551fe111d395291e586 (commit)
via 3814f2dadf53e2806130934cc8be09027ae3d1ec (commit)
via 36dade6e6c25b7c2e8a322960fe045ac1a30f043 (commit)
via 57ebd647ebc09c091fd43df2cb662d7ed35e05ab (commit)
via 7bd9cbef83681468102dfafd6b2aa3792c4f5a13 (commit)
via 7eefc77f5d50cf9198067c9fd879665f8a84da7e (commit)
from 4faef9e0316fd118e114c2794baff5b19cadfbf3 (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 897faf00c08028c6f6567bf12cf309c7787b1fc6
Merge: 46c0649b2 d049b90aa
Author: Michael Black <mdb...@ya...>
Date: Tue Aug 22 22:25:48 2023 -0500
Merge pull request #1349 from torque/spid-logfix
spid: handle a control stream containing log packets
commit d049b90aa9041ea6821f88ce92617425e9efffad
Author: torque <to...@us...>
Date: Tue Aug 22 17:24:29 2023 -0700
spid: flush serial input buffer before command send
This seems to take care of the log data pretty much entirely and is
possibly a much simpler alternative solution to the previous two
commits. However, for full robustness, I think it makes sense to keep
all three of these changes together. Also, it's entirely possible that
this approach introduces a performance regression: I haven't
particularly looked at how the buffer flushing is implemented, but if
it ends up doing looped reads with a timeout, this could slow down
command processing for the SPID object significantly. Since I've only
tested this through the command line interface, I have not taken a
close look at performance.
diff --git a/rotators/spid/spid.c b/rotators/spid/spid.c
index 7c4100bd7..c2f68a9a7 100644
--- a/rotators/spid/spid.c
+++ b/rotators/spid/spid.c
@@ -168,6 +168,14 @@ static int read_r2p_frame(hamlib_port_t *port, unsigned char *rxbuffer,
}
}
+static int spid_write(hamlib_port_t *p, const unsigned char *txbuffer,
+ size_t count)
+{
+ int ret = rig_flush(p);
+ if (ret < 0) return ret;
+ return write_block(p, txbuffer, count);
+}
+
static int spid_rot_init(ROT *rot)
{
rig_debug(RIG_DEBUG_TRACE, "%s called\n", __func__);
@@ -310,7 +318,7 @@ static int spid_rot1prog_rot_set_position(ROT *rot, azimuth_t az,
cmdstr[11] = 0x2F; /* K */
cmdstr[12] = 0x20; /* END */
- retval = write_block(&rs->rotport, (unsigned char *) cmdstr, 13);
+ retval = spid_write(&rs->rotport, (unsigned char *) cmdstr, 13);
if (retval != RIG_OK)
{
@@ -337,7 +345,7 @@ static int spid_rot2prog_rot_set_position(ROT *rot, azimuth_t az,
{
do
{
- retval = write_block(&rs->rotport,
+ retval = spid_write(&rs->rotport,
(unsigned char *) "\x57\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1F\x20", 13);
if (retval != RIG_OK)
@@ -378,7 +386,7 @@ static int spid_rot2prog_rot_set_position(ROT *rot, azimuth_t az,
cmdstr[11] = 0x2F; /* K */
cmdstr[12] = 0x20; /* END */
- retval = write_block(&rs->rotport, (unsigned char *) cmdstr, 13);
+ retval = spid_write(&rs->rotport, (unsigned char *) cmdstr, 13);
if (retval != RIG_OK)
{
@@ -412,7 +420,7 @@ static int spid_rot_get_position(ROT *rot, azimuth_t *az, elevation_t *el)
do
{
- retval = write_block(&rs->rotport,
+ retval = spid_write(&rs->rotport,
(unsigned char *) "\x57\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1F\x20", 13);
if (retval != RIG_OK)
@@ -484,7 +492,7 @@ static int spid_rot_stop(ROT *rot)
do
{
- retval = write_block(&rs->rotport,
+ retval = spid_write(&rs->rotport,
(unsigned char *) "\x57\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0F\x20", 13);
if (retval != RIG_OK)
@@ -559,7 +567,7 @@ static int spid_md01_rot2prog_rot_move(ROT *rot, int direction, int speed)
moving at all), always send the stop command first. */
spid_rot_stop(rot);
- retval = write_block(&rs->rotport, (unsigned char *) cmdstr, 13);
+ retval = spid_write(&rs->rotport, (unsigned char *) cmdstr, 13);
return retval;
}
commit ccab50a7df42dcd9b937c17cdd8cf602a9d22dea
Author: torque <to...@us...>
Date: Tue Aug 22 17:23:19 2023 -0700
spid: account for another type of debug message
When the settings are saved via the front panel on the MD-01, the
following debug messages are printed on COM 0:
thread_motionController: settings changed!\r\n
thread_protocols: settings changed!\r\n
Notably, because these aren't timestamped the way the other debug
messages are, they were missing the our debug message sieve and causing
protocol errors. Address this by treating anything that doesn't start
with the ROT2PROG start byte ('W') as a log frame.
diff --git a/rotators/spid/spid.c b/rotators/spid/spid.c
index fe46b5af1..7c4100bd7 100644
--- a/rotators/spid/spid.c
+++ b/rotators/spid/spid.c
@@ -94,12 +94,16 @@ static int read_r2p_frame(hamlib_port_t *port, unsigned char *rxbuffer,
// strict numerical bounds that could be used to sanity check the contents
// of the reply frame).
-
int res = 0;
unsigned char peek = 0;
enum r2p_frame_parser_state pstate = ROT2PROG_PARSER_EXPECT_FRAME_START;
- while (1) {
+ // This will loop infinitely in the case of a badly-behaved serial device
+ // that is producing log-like frames faster than we can consume them.
+ // However, this is not expected to be a practical possibility, and there's
+ // no concrete loop bounds we can use.
+ while (1)
+ {
switch (pstate)
{
case ROT2PROG_PARSER_EXPECT_FRAME_START:
@@ -108,27 +112,14 @@ static int read_r2p_frame(hamlib_port_t *port, unsigned char *rxbuffer,
switch (peek)
{
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9': {
- pstate = ROT2PROG_PARSER_EXPECT_CR;
- break;
- }
-
- case ROT2PROG_FRAME_START_BYTE: {
+ case ROT2PROG_FRAME_START_BYTE:
rxbuffer[0] = peek;
pstate = ROT2PROG_PARSER_EXPECT_FRAME_END;
break;
- }
- default: return -RIG_EPROTO;
+ default:
+ pstate = ROT2PROG_PARSER_EXPECT_CR;
+ break;
}
break;
@@ -168,10 +159,11 @@ static int read_r2p_frame(hamlib_port_t *port, unsigned char *rxbuffer,
return -RIG_EPROTO;
}
- // lie about the number of bytes read
+ // account for the already-read start byte here
return res + 1;
- default: return -RIG_EINTERNAL;
+ default:
+ return -RIG_EINTERNAL;
}
}
}
commit 470c71dd93633d484525835de5bb438baa48f17e
Author: torque <to...@us...>
Date: Mon Jul 31 23:27:56 2023 -0700
spid: handle a control stream containing log packets
I have an MD-01 controller running firmware 2.0.237 that is connected
to the computer via the COM0 DB9 port. When it receives a control
command to move the rotator, it prints debug logs to the serial output
that look like this:
input:
W3600\x0A4500\x0A\x2F\x20
output:
W\x03\x06\x00\x00\x0A\x04\x05\x01\x00\x0A\x20
287925671: in motion\r\n
287925673: Change motion state M0 to mcsStart\r\n
287925678: GO A 0.000000 0.000000 t ---\r\n
287925680: in motion\r\n
287925683: Change motion state M1 to mcsStart\r\n
287925686: GO E 90.000000 91.000000 t ---\r\n
287925690: distance to go M0 too small. End.\r\n
287925694: Change motion state M0 to mcsStopped\r\n
287925698: Stop on motor 0 on angle 0.000000\r\n
287925703: Change motion state M1 to mcsRunning\r\n
287926610: distance to go M1 too small. End.\r\n
287926613: Change motion state M1 to mcsStopped\r\n
287926617: Stop on motor 1 on angle 90.000000\r\n
Note that the response frame is not necessarily present in an specific
order relative to the log messages: I have seen it come after the logs
as well. Because the current implementation just slurps up response
bytes without checking the framing or anything, as soon as any of this
log data enters the command stream, all subsequent commands will read
completely bogus responses.
Regardless of whether it's due to a misconfiguration, a weird artifact
of the firmware, or something more sinister, the MD-01 is awkwardly
interspersing its normal fixed-size-frame response with these
line-based log messages. As shown above, the log messages appear to be
consistently of the format <timestamp>: <message>\r\n, where
<timestamp> is some kind of integer timestamp (possibly relative to
unit boot) and <message> is an ASCII string.
Due to poor(?) design decisions by the protocol designers, the frame
start and end bytes are both printable ASCII characters ('W' and ' '
respectively) and the MD-01 response frame contains no other
validation information (such as a CRC), which means that a valid log
line could fairly easily contain a character sequence that is
indistinguishable from a valid response frame, without actually being
a valid response frame.
However, since the log messages appear to be reasonably strictly
structured, we can make a small number of assumptions that will allow
us to reliably separate response frames from log lines without having
to fall back on a heuristic-based parsing strategy. These assumptions
are as follows:
1. A log line will always begin with an ASCII character in the range
[0-9], none of which are the frame start byte.
2. A log line will never contain \r\n in the middle of the line (i.e.
multi-line log messages do not exist). This means a log "frame" will
always be of the form [0-9]<anything>\r\n.
3. The controller will not emit a response frame in the middle of a log
line.
4. The operating system's serial port read buffer is large enough that
we won't lose data while accumulating log messages between commands.
Provided the above assumptions are true, a simple state machine can be
used to parse the response by treating the log lines as a different
type of frame. This could be made much more robust by applying
additional heuristics for specific packets (e.g. get_position has some
reasonably strict numerical bounds that could be used to sanity check
the contents of the reply frame).
diff --git a/rotators/spid/spid.c b/rotators/spid/spid.c
index 072d019ca..fe46b5af1 100644
--- a/rotators/spid/spid.c
+++ b/rotators/spid/spid.c
@@ -39,6 +39,143 @@ struct spid_rot2prog_priv_data
int el_resolution;
};
+enum spid_rot2prog_framemagic {
+ ROT2PROG_FRAME_START_BYTE = 'W',
+ ROT2PROG_FRAME_END_BYTE = ' ',
+};
+
+enum r2p_frame_parser_state {
+ ROT2PROG_PARSER_EXPECT_FRAME_START,
+ ROT2PROG_PARSER_EXPECT_CR,
+ ROT2PROG_PARSER_EXPECT_LF,
+ ROT2PROG_PARSER_EXPECT_FRAME_END,
+};
+
+static int read_r2p_frame(hamlib_port_t *port, unsigned char *rxbuffer,
+ size_t count)
+{
+ // Some MD-01 firmware can apparently print debug messages to the same
+ // serial port that is used for the control protocol. This awkwardly
+ // intersperses the normal fixed-size frame response with a line-based
+ // logs. Theoretically, a valid response frame will not actually be emitted
+ // in the middle of a log message.
+ //
+ // Log messages are of the format <timestamp>: <message>\r\n, where
+ // <timestamp> is a unix-ish timestamp (inasmuch as it is an integer) and
+ // <message> is an ASCII string.
+
+ // Due to poor(?) design decisions by the protocol designers, the frame
+ // start and end bytes are both printable ASCII characters ('W' and ' '
+ // respectively) and the MD-01 response frame contains no other validation
+ // information (such as a CRC), which means that a valid log line can
+ // contain a character sequence that is indistinguishable from a valid
+ // response frame, without actually being a valid response frame.
+
+ // However, since the log messages appear to be reasonably strictly
+ // structured, we can make a small number of assumptions that will allow us
+ // to reliably separate response frames from log lines without having to
+ // fall back on a heuristic-based parsing strategy. These assumptions are
+ // as follows:
+
+ // 1. A log line will always begin with an ASCII character in the range
+ // [0-9], none of which are the frame start byte.
+ // 2. A log line will never contain \r\n in the middle of the line (i.e.
+ // multi-line log messages do not exist). This means a log "frame" will
+ // always be of the form [0-9]<anything>\r\n.
+ // 3. The controller will not emit a response frame in the middle of a log
+ // line.
+ // 4. The operating system's serial port read buffer is large enough that we
+ // won't lose data while accumulating log messages between commands.
+
+ // Provided the above assumptions are true, a simple state machine can be
+ // used to parse the response by treating the log lines as a different type
+ // of frame. This could be made much more robust by applying additional
+ // heuristics for specific packets (e.g. get_position has some reasonably
+ // strict numerical bounds that could be used to sanity check the contents
+ // of the reply frame).
+
+
+ int res = 0;
+ unsigned char peek = 0;
+ enum r2p_frame_parser_state pstate = ROT2PROG_PARSER_EXPECT_FRAME_START;
+
+ while (1) {
+ switch (pstate)
+ {
+ case ROT2PROG_PARSER_EXPECT_FRAME_START:
+ res = read_block(port, &peek, 1);
+ if (res < 0) return res;
+
+ switch (peek)
+ {
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9': {
+ pstate = ROT2PROG_PARSER_EXPECT_CR;
+ break;
+ }
+
+ case ROT2PROG_FRAME_START_BYTE: {
+ rxbuffer[0] = peek;
+ pstate = ROT2PROG_PARSER_EXPECT_FRAME_END;
+ break;
+ }
+
+ default: return -RIG_EPROTO;
+ }
+ break;
+
+ case ROT2PROG_PARSER_EXPECT_CR:
+ res = read_block(port, &peek, 1);
+ if (res < 0) return res;
+
+ if (peek == '\r') pstate = ROT2PROG_PARSER_EXPECT_LF;
+ break;
+
+ case ROT2PROG_PARSER_EXPECT_LF:
+ res = read_block(port, &peek, 1);
+ if (res < 0) return res;
+
+ if (peek == '\n')
+ {
+ pstate = ROT2PROG_PARSER_EXPECT_FRAME_START;
+ }
+ else
+ {
+ // we have stumbled across a \r that is not immediately
+ // followed by \n. We could assume this is a weirdly formed
+ // log message, but I think it makes more sense to be
+ // defensive here and assume it is invalid for this to
+ // happen.
+ return -RIG_EPROTO;
+ }
+ break;
+
+ case ROT2PROG_PARSER_EXPECT_FRAME_END:
+ // we already read the frame start byte
+ res = read_block(port, rxbuffer + 1, count - 1);
+ if (res < 0) return res;
+
+ if (rxbuffer[count - 1] != ROT2PROG_FRAME_END_BYTE)
+ {
+ return -RIG_EPROTO;
+ }
+
+ // lie about the number of bytes read
+ return res + 1;
+
+ default: return -RIG_EINTERNAL;
+ }
+ }
+}
+
static int spid_rot_init(ROT *rot)
{
rig_debug(RIG_DEBUG_TRACE, "%s called\n", __func__);
@@ -217,7 +354,7 @@ static int spid_rot2prog_rot_set_position(ROT *rot, azimuth_t az,
}
memset(cmdstr, 0, 12);
- retval = read_block(&rs->rotport, (unsigned char *) cmdstr, 12);
+ retval = read_r2p_frame(&rs->rotport, (unsigned char *) cmdstr, 12);
}
while (retval < 0 && retry_read++ < rot->state.rotport.retry);
@@ -264,7 +401,7 @@ static int spid_rot2prog_rot_set_position(ROT *rot, azimuth_t az,
do
{
- retval = read_block(&rs->rotport, (unsigned char *) cmdstr, 12);
+ retval = read_r2p_frame(&rs->rotport, (unsigned char *) cmdstr, 12);
}
while ((retval < 0) && (retry_read++ < rot->state.rotport.retry));
}
@@ -295,12 +432,12 @@ static int spid_rot_get_position(ROT *rot, azimuth_t *az, elevation_t *el)
if (rot->caps->rot_model == ROT_MODEL_SPID_ROT1PROG)
{
- retval = read_block(&rs->rotport, (unsigned char *) posbuf, 5);
+ retval = read_r2p_frame(&rs->rotport, (unsigned char *) posbuf, 5);
}
else if (rot->caps->rot_model == ROT_MODEL_SPID_ROT2PROG ||
rot->caps->rot_model == ROT_MODEL_SPID_MD01_ROT2PROG)
{
- retval = read_block(&rs->rotport, (unsigned char *) posbuf, 12);
+ retval = read_r2p_frame(&rs->rotport, (unsigned char *) posbuf, 12);
}
else
{
@@ -367,12 +504,12 @@ static int spid_rot_stop(ROT *rot)
if (rot->caps->rot_model == ROT_MODEL_SPID_ROT1PROG)
{
- retval = read_block(&rs->rotport, (unsigned char *) posbuf, 5);
+ retval = read_r2p_frame(&rs->rotport, (unsigned char *) posbuf, 5);
}
else if (rot->caps->rot_model == ROT_MODEL_SPID_ROT2PROG ||
rot->caps->rot_model == ROT_MODEL_SPID_MD01_ROT2PROG)
{
- retval = read_block(&rs->rotport, (unsigned char *) posbuf, 12);
+ retval = read_r2p_frame(&rs->rotport, (unsigned char *) posbuf, 12);
}
}
while (retval < 0 && retry_read++ < rot->state.rotport.retry);
commit 46c0649b234163f4d08927d173d505168ef93436
Author: Mike Black W9MDB <mdb...@ya...>
Date: Mon Aug 21 16:33:53 2023 -0500
Fix spacing in k3/k4_stop_morse
https://github.com/Hamlib/Hamlib/issues/1366
diff --git a/rigs/kenwood/k3.c b/rigs/kenwood/k3.c
index 7298999ad..760dc1b46 100644
--- a/rigs/kenwood/k3.c
+++ b/rigs/kenwood/k3.c
@@ -2912,7 +2912,7 @@ int k4_stop_voice_mem(RIG *rig, vfo_t vfo)
int k4_stop_morse(RIG *rig, vfo_t vfo)
{
int retval;
- retval = kenwood_transaction(rig, "KY@;", NULL, 0);
+ retval = kenwood_transaction(rig, "KY @;", NULL, 0);
return retval;
}
@@ -2920,7 +2920,7 @@ int k3_stop_morse(RIG *rig, vfo_t vfo)
{
int retval;
char cmd[32];
- SNPRINTF(cmd,sizeof(cmd),"KY%c;", 0x04);
+ SNPRINTF(cmd,sizeof(cmd),"KY %c;", 0x04);
retval = kenwood_transaction(rig, cmd, NULL, 0);
return retval;
}
commit 404ceb8c4b11ff54bfe76cfa2240a8878fc882f2
Author: Mike Black W9MDB <mdb...@ya...>
Date: Mon Aug 21 15:16:32 2023 -0500
Change send_morse, stop_morse, send_voice_mem, and stop_voicemem to not require a VFO argument
https://github.com/Hamlib/Hamlib/issues/1365
diff --git a/tests/rigctl_parse.c b/tests/rigctl_parse.c
index dc322400a..6942abe5b 100644
--- a/tests/rigctl_parse.c
+++ b/tests/rigctl_parse.c
@@ -350,10 +350,10 @@ static struct test_table test_list[] =
{ 'w', "send_cmd", ACTION(send_cmd), ARG_IN1 | ARG_IN_LINE | ARG_OUT2 | ARG_NOVFO, "Cmd", "Reply" },
{ 'W', "send_cmd_rx", ACTION(send_cmd), ARG_IN | ARG_OUT2 | ARG_NOVFO, "Cmd", "Reply"},
{ 'b', "send_morse", ACTION(send_morse), ARG_IN | ARG_NOVFO | ARG_IN_LINE, "Morse" },
- { 0xbb, "stop_morse", ACTION(stop_morse), },
- { 0xbc, "wait_morse", ACTION(wait_morse), },
- { 0x94, "send_voice_mem", ACTION(send_voice_mem), ARG_IN, "Voice Mem#" },
- { 0xab, "stop_voice_mem", ACTION(stop_voice_mem), },
+ { 0xbb, "stop_morse", ACTION(stop_morse), ARG_NOVFO},
+ { 0xbc, "wait_morse", ACTION(wait_morse), ARG_NOVFO},
+ { 0x94, "send_voice_mem", ACTION(send_voice_mem), ARG_NOVFO | ARG_IN, "Voice Mem#" },
+ { 0xab, "stop_voice_mem", ACTION(stop_voice_mem), ARG_NOVFO},
{ 0x8b, "get_dcd", ACTION(get_dcd), ARG_OUT, "DCD" },
{ 0x8d, "set_twiddle", ACTION(set_twiddle), ARG_IN | ARG_NOVFO, "Timeout (secs)" },
{ 0x8e, "get_twiddle", ACTION(get_twiddle), ARG_OUT | ARG_NOVFO, "Timeout (secs)" },
commit 453a8cc94f98131b04bd136155d9df7523faf393
Author: Mike Black W9MDB <mdb...@ya...>
Date: Mon Aug 21 15:10:41 2023 -0500
Fix K3/K4 stop_morse
https://github.com/Hamlib/Hamlib/issues/1366
diff --git a/rigs/kenwood/k3.c b/rigs/kenwood/k3.c
index 46457e994..7298999ad 100644
--- a/rigs/kenwood/k3.c
+++ b/rigs/kenwood/k3.c
@@ -179,6 +179,7 @@ int k4_get_ptt(RIG *rig, vfo_t vfo, ptt_t *ptt);
int k4_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt);
int k4_send_voice_mem(RIG *rig, vfo_t vfo, int ch);
int k4_stop_voice_mem(RIG *rig, vfo_t vfo);
+int k4_stop_morse(RIG *rig, vfo_t vfo);
/*
* K3 rig capabilities.
@@ -508,7 +509,7 @@ const struct rig_caps k4_caps =
RIG_MODEL(RIG_MODEL_K4),
.model_name = "K4",
.mfg_name = "Elecraft",
- .version = BACKEND_VER ".27",
+ .version = BACKEND_VER ".28",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
@@ -656,7 +657,7 @@ const struct rig_caps k4_caps =
.get_ant = kenwood_get_ant,
.send_morse = kenwood_send_morse,
.wait_morse = rig_wait_morse,
- .stop_morse = k3_stop_morse,
+ .stop_morse = k4_stop_morse,
.send_voice_mem = k4_send_voice_mem,
.stop_voice_mem = k4_stop_voice_mem,
.power2mW = k3_power2mW,
@@ -2908,10 +2909,18 @@ int k4_stop_voice_mem(RIG *rig, vfo_t vfo)
return retval;
}
+int k4_stop_morse(RIG *rig, vfo_t vfo)
+{
+ int retval;
+ retval = kenwood_transaction(rig, "KY@;", NULL, 0);
+ return retval;
+}
+
int k3_stop_morse(RIG *rig, vfo_t vfo)
{
int retval;
- char buf[32];
- retval = kenwood_transaction(rig, "KY;", buf, 4);
+ char cmd[32];
+ SNPRINTF(cmd,sizeof(cmd),"KY%c;", 0x04);
+ retval = kenwood_transaction(rig, cmd, NULL, 0);
return retval;
}
commit 5113c6a895766ba32bb2aeaa3f04b2a6cac2f175
Author: Mike Black W9MDB <mdb...@ya...>
Date: Mon Aug 21 10:31:55 2023 -0500
Add simqrplabs.c
diff --git a/simulators/simqrplabs.c b/simulators/simqrplabs.c
new file mode 100644
index 000000000..4c1c282ea
--- /dev/null
+++ b/simulators/simqrplabs.c
@@ -0,0 +1,429 @@
+// can run this using rigctl/rigctld and socat pty devices
+// gcc -o simyaesu simyaesu.c
+#define _XOPEN_SOURCE 700
+// since we are POSIX here we need this
+struct ip_mreq
+{
+ int dummy;
+};
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include <string.h>
+#include <unistd.h>
+#include <hamlib/rig.h>
+
+#define BUFSIZE 256
+
+int mysleep = 20;
+
+float freqA = 14074000;
+float freqB = 14074500;
+int filternum = 7;
+int datamode = 0;
+int vfo, vfo_tx, ptt, ptt_data, ptt_mic, ptt_tune;
+int tomode = 0;
+
+int
+getmyline(int fd, char *buf)
+{
+ char c;
+ int i = 0;
+ memset(buf, 0, BUFSIZE);
+
+ while (read(fd, &c, 1) > 0)
+ {
+ buf[i++] = c;
+
+ if (c == ';') { return strlen(buf); }
+ }
+
+ return strlen(buf);
+}
+
+#if defined(WIN32) || defined(_WIN32)
+int openPort(char *comport) // doesn't matter for using pts devices
+{
+ int fd;
+ fd = open(comport, O_RDWR);
+
+ if (fd < 0)
+ {
+ perror(comport);
+ }
+
+ return fd;
+}
+
+#else
+int openPort(char *comport) // doesn't matter for using pts devices
+{
+ int fd = posix_openpt(O_RDWR);
+ char *name = ptsname(fd);
+
+ if (name == NULL)
+ {
+ perror("pstname");
+ return -1;
+ }
+
+ printf("name=%s\n", name);
+
+ if (fd == -1 || grantpt(fd) == -1 || unlockpt(fd) == -1)
+ {
+ perror("posix_openpt");
+ return -1;
+ }
+
+ return fd;
+}
+#endif
+
+
+
+int main(int argc, char *argv[])
+{
+ char buf[256];
+ char *pbuf;
+ int n;
+ int fd = openPort(argv[1]);
+ int freqa = 14074000, freqb = 140735000;
+ int modeA = 1, modeB = 2;
+
+ while (1)
+ {
+ buf[0] = 0;
+
+ if (getmyline(fd, buf) > 0) { printf("Cmd:%s\n", buf); }
+
+// else { return 0; }
+
+ if (strcmp(buf, "RM5;") == 0)
+ {
+ printf("%s\n", buf);
+ hl_usleep(mysleep * 1000);
+ pbuf = "RM5100000;";
+ n = write(fd, pbuf, strlen(pbuf));
+// printf("n=%d\n", n);
+
+ if (n <= 0) { perror("RM5"); }
+ }
+
+ else if (strcmp(buf, "AN0;") == 0)
+ {
+ printf("%s\n", buf);
+ hl_usleep(mysleep * 1000);
+ pbuf = "AN030;";
+ n = write(fd, pbuf, strlen(pbuf));
+// printf("n=%d\n", n);
+
+ if (n <= 0) { perror("AN"); }
+ }
+ else if (strcmp(buf, "IF;") == 0)
+ {
+ char ifbuf[256];
+ printf("%s\n", buf);
+ hl_usleep(mysleep * 1000);
+ pbuf = "IF000503130001000+0000000000030000000;";
+ // from QMX 1_09 firmware "IF00007074000 +0.0000000002000000 ;"
+ sprintf(ifbuf, "IF%011d +0.0000000002000000 ;", freqa);
+ //pbuf = "IF00010138698 +00000000002000000 ;
+ n = write(fd, ifbuf, strlen(ifbuf));
+// printf("n=%d\n", n);
+
+ if (n <= 0) { perror("IF"); }
+
+ continue;
+ }
+ else if (strcmp(buf, "NB;") == 0)
+ {
+ hl_usleep(mysleep * 1000);
+ pbuf = "NB0;";
+ n = write(fd, pbuf, strlen(pbuf));
+ continue;
+ }
+ else if (strcmp(buf, "RA;") == 0)
+ {
+ hl_usleep(mysleep * 1000);
+ pbuf = "RA01;";
+ n = write(fd, pbuf, strlen(pbuf));
+ continue;
+ }
+ else if (strcmp(buf, "RG;") == 0)
+ {
+ hl_usleep(mysleep * 1000);
+ pbuf = "RG055;";
+ n = write(fd, pbuf, strlen(pbuf));
+ continue;
+ }
+ else if (strcmp(buf, "MG;") == 0)
+ {
+ hl_usleep(mysleep * 1000);
+ pbuf = "MG050;";
+ n = write(fd, pbuf, strlen(pbuf));
+ continue;
+ }
+ else if (strcmp(buf, "AG;") == 0)
+ {
+ hl_usleep(mysleep * 1000);
+ pbuf = "AG100;";
+ n = write(fd, pbuf, strlen(pbuf));
+ continue;
+ }
+ else if (strcmp(buf, "FV;") == 0)
+ {
+ hl_usleep(mysleep * 1000);
+ pbuf = "FV1.2;";
+ n = write(fd, pbuf, strlen(pbuf));
+ continue;
+ }
+ else if (strncmp(buf, "IS;", 3) == 0)
+ {
+ SNPRINTF(buf, sizeof(buf), "IS+0000;");
+ n = write(fd, buf, strlen(buf));
+ printf("%s\n", buf);
+ continue;
+ }
+ else if (strncmp(buf, "IS", 2) == 0)
+ {
+ continue;
+ }
+ else if (strncmp(buf, "SM;", 3) == 0)
+ {
+ SNPRINTF(buf, sizeof(buf), "SM0035;");
+ n = write(fd, buf, strlen(buf));
+ printf("%s\n", buf);
+ continue;
+ }
+ else if (strncmp(buf, "PC;", 3) == 0)
+ {
+ SNPRINTF(buf, sizeof(buf), "PC100;");
+ n = write(fd, buf, strlen(buf));
+ printf("%s\n", buf);
+ continue;
+ }
+ else if (strcmp(buf, "FW;") == 0)
+ {
+ //usleep(mysleep * 1000);
+ pbuf = "FW240";
+ n = write(fd, pbuf, strlen(pbuf));
+ hl_usleep(20 * 1000);
+ pbuf = "0;";
+ n = write(fd, pbuf, strlen(pbuf));
+ continue;
+ }
+ else if (strncmp(buf, "FW", 2) == 0)
+ {
+ continue;
+ }
+ else if (strcmp(buf, "ID;") == 0)
+ {
+ printf("%s\n", buf);
+ hl_usleep(mysleep * 1000);
+ SNPRINTF(buf, sizeof(buf), "ID%03d;", 10);
+ n = write(fd, buf, strlen(buf));
+// printf("n=%d\n", n);
+
+ if (n <= 0) { perror("ID"); }
+
+ continue;
+ }
+
+ else if (strncmp(buf, "AI", 2) == 0)
+ {
+ if (strcmp(buf, "AI;"))
+ {
+ printf("%s\n", buf);
+ hl_usleep(mysleep * 1000);
+ pbuf = "AI0;";
+ n = write(fd, pbuf, strlen(pbuf));
+ printf("n=%d\n", n);
+
+ if (n <= 0) { perror("AI"); }
+ }
+ }
+
+ else if (strcmp(buf, "VS;") == 0)
+ {
+ printf("%s\n", buf);
+ hl_usleep(mysleep * 1000);
+ pbuf = "VS0;";
+ n = write(fd, pbuf, strlen(pbuf));
+// printf("n=%d\n", n);
+
+ if (n < 0) { perror("VS"); }
+
+ continue;
+ }
+ else if (strcmp(buf, "EX032;") == 0)
+ {
+ static int ant = 0;
+ ant = (ant + 1) % 3;
+ printf("%s\n", buf);
+ hl_usleep(mysleep * 1000);
+ SNPRINTF(buf, sizeof(buf), "EX032%1d;", ant);
+ n = write(fd, buf, strlen(buf));
+// printf("n=%d\n", n);
+
+ if (n < 0) { perror("EX032"); }
+
+ continue;
+ }
+ else if (strncmp(buf, "EX", 2) == 0)
+ {
+ continue;
+ }
+ else if (strcmp(buf, "FA;") == 0)
+ {
+ SNPRINTF(buf, sizeof(buf), "FA%011d;", freqa);
+ n = write(fd, buf, strlen(buf));
+ continue;
+ }
+ else if (strcmp(buf, "FB;") == 0)
+ {
+ SNPRINTF(buf, sizeof(buf), "FB%011d;", freqb);
+ n = write(fd, buf, strlen(buf));
+ continue;
+ }
+ else if (strncmp(buf, "FA", 2) == 0)
+ {
+ sscanf(buf, "FA%d", &freqa);
+ continue;
+ }
+ else if (strncmp(buf, "FB", 2) == 0)
+ {
+ sscanf(buf, "FB%d", &freqb);
+ continue;
+ }
+ else if (strncmp(buf, "AI;", 3) == 0)
+ {
+ SNPRINTF(buf, sizeof(buf), "AI0;");
+ n = write(fd, buf, strlen(buf));
+ continue;
+ }
+
+ else if (strncmp(buf, "PS;", 3) == 0)
+ {
+ SNPRINTF(buf, sizeof(buf), "PS1;");
+ n = write(fd, buf, strlen(buf));
+ continue;
+ }
+ else if (strncmp(buf, "SA;", 3) == 0)
+ {
+ SNPRINTF(buf, sizeof(buf), "SA0;");
+ n = write(fd, buf, strlen(buf));
+ }
+ else if (buf[3] == ';' && strncmp(buf, "SF", 2)==0)
+ {
+ SNPRINTF(buf, sizeof(buf), "SF%c%011.0f%c;", buf[2], buf[2] == '0' ? freqA : freqB,
+ buf[2] == '0' ? modeA + '0' : modeB + '0');
+ n = write(fd, buf, strlen(buf));
+ continue;
+ }
+ else if (strncmp(buf, "SF", 2) == 0)
+ {
+ mode_t tmpmode= buf[14];
+
+ if (buf[2] == '0') { modeA = tmpmode - '0'; }
+ else { modeB = tmpmode - '0'; }
+ printf("modeA=%c, modeB=%c\n", modeA, modeB);
+
+ continue;
+ }
+ else if (strncmp(buf, "MD;", 3) == 0)
+ {
+ SNPRINTF(buf, sizeof(buf), "MD%d;",
+ modeA); // not worried about modeB yet for simulator
+ n = write(fd, buf, strlen(buf));
+ continue;
+ }
+ else if (strncmp(buf, "MD", 2) == 0)
+ {
+ sscanf(buf, "MD%d", &modeA); // not worried about modeB yet for simulator
+ continue;
+ }
+ else if (strncmp(buf, "FL;", 3) == 0)
+ {
+ SNPRINTF(buf, sizeof(buf), "FL%03d;", filternum);
+ n = write(fd, buf, strlen(buf));
+ continue;
+ }
+ else if (strncmp(buf, "FL", 2) == 0)
+ {
+ sscanf(buf, "FL%d", &filternum);
+ continue;
+ }
+ else if (strcmp(buf, "FR;") == 0)
+ {
+ SNPRINTF(buf, sizeof(buf), "FR%d;", vfo);
+ n = write(fd, buf, strlen(buf));
+ continue;
+ }
+ else if (strncmp(buf, "FR", 2) == 0)
+ {
+ sscanf(buf, "FR%d", &vfo);
+ }
+ else if (strcmp(buf, "FT;") == 0)
+ {
+ SNPRINTF(buf, sizeof(buf), "FR%d;", vfo_tx);
+ n = write(fd, buf, strlen(buf));
+ continue;
+ }
+ else if (strncmp(buf, "FT", 2) == 0)
+ {
+ sscanf(buf, "FT%d", &vfo_tx);
+ }
+ else if (strncmp(buf, "DA;", 3) == 0)
+ {
+ SNPRINTF(buf, sizeof(buf), "DA%d;", datamode);
+ n = write(fd, buf, strlen(buf));
+ printf("%s\n", buf);
+ continue;
+ }
+ else if (strncmp(buf, "DA", 2) == 0)
+ {
+ sscanf(buf, "DA%d", &datamode);
+ printf("%s\n", buf);
+ continue;
+ }
+ else if (strncmp(buf, "TO;", 3) == 0)
+ {
+ SNPRINTF(buf, sizeof(buf), "TO%d;", tomode);
+ continue;
+ }
+ else if (strncmp(buf, "BD;", 3) == 0)
+ {
+ continue;
+ }
+ else if (strncmp(buf, "BU;", 3) == 0)
+ {
+ continue;
+ }
+ else if (strncmp(buf, "TX", 2) == 0)
+ {
+ ptt = ptt_mic = ptt_data = ptt_tune = 0;
+
+ switch (buf[2])
+ {
+ case ';': ptt = 1;
+
+ case '0': ptt_mic = 1;
+
+ case '1': ptt_data = 1;
+
+ case '2': ptt_tune = 1;
+ }
+
+ continue;
+ }
+ else if (strlen(buf) > 0)
+ {
+ fprintf(stderr, "Unknown command: %s\n", buf);
+ }
+
+
+ }
+
+ return 0;
+}
commit 194906b2900366ea73327252d379e0330edb1fb5
Author: Mike Black W9MDB <mdb...@ya...>
Date: Mon Aug 21 10:13:26 2023 -0500
For QRPLabs ignore the IF return length as the differenet models can't agree on the length.
QMX adds an extra space on the end with firmware 1_00_09
https://github.com/Hamlib/Hamlib/issues/1372
diff --git a/rigs/kenwood/kenwood.c b/rigs/kenwood/kenwood.c
index 0503202c9..77480f5b3 100644
--- a/rigs/kenwood/kenwood.c
+++ b/rigs/kenwood/kenwood.c
@@ -719,6 +719,8 @@ int kenwood_safe_transaction(RIG *rig, const char *cmd, char *buf,
if (checklen && length != expected) /* worth retrying as some rigs
occasionally send short results */
{
+ // QRPLABS can't seem top decide if they give 37 or 38 bytes for IF command
+ if (strncmp(cmd,"IF",2)==0 && rig->caps->rig_model == RIG_MODEL_QRPLABS) break;
struct kenwood_priv_data *priv = rig->state.priv;
rig_debug(RIG_DEBUG_ERR,
"%s: wrong answer; len for cmd %s: expected = %d, got %d\n",
diff --git a/rigs/kenwood/kenwood.h b/rigs/kenwood/kenwood.h
index c12a850f3..0fbaaa79f 100644
--- a/rigs/kenwood/kenwood.h
+++ b/rigs/kenwood/kenwood.h
@@ -28,7 +28,7 @@
#include "token.h"
#include "idx_builtin.h"
-#define BACKEND_VER "20230626"
+#define BACKEND_VER "20230821"
#define EOM_KEN ';'
#define EOM_TH '\r'
diff --git a/simulators/Makefile.am b/simulators/Makefile.am
index 7b794947c..85394b19c 100644
--- a/simulators/Makefile.am
+++ b/simulators/Makefile.am
@@ -8,7 +8,7 @@ DISTCLEANFILES =
bin_PROGRAMS =
-check_PROGRAMS = simelecraft simicgeneric simkenwood simyaesu simic9100 simic9700 simft991 simftdx1200 simftdx3000 simjupiter simpowersdr simid5100 simft736 simftdx5000 simtmd700 simrotorez simspid simft817 simts590 simft847 simic7300 simic7000 simic7100 simic7200 simatd578 simic905 simts450 simic7600 simic7610 simic705 simts950 simts990 simic7851 simftdx101 simxiegug90
+check_PROGRAMS = simelecraft simicgeneric simkenwood simyaesu simic9100 simic9700 simft991 simftdx1200 simftdx3000 simjupiter simpowersdr simid5100 simft736 simftdx5000 simtmd700 simrotorez simspid simft817 simts590 simft847 simic7300 simic7000 simic7100 simic7200 simatd578 simic905 simts450 simic7600 simic7610 simic705 simts950 simts990 simic7851 simftdx101 simxiegug90 simqrplabs
simelecraft_SOURCES = simelecraft.c
simkenwood_SOURCES = simkenwood.c
commit 24e407c82c358b09e7714c301bf2d398607b71cb
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sun Aug 20 16:34:35 2023 -0500
Fix github build
diff --git a/tests/Makefile.am b/tests/Makefile.am
index fb87a2918..b2ec16650 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -43,7 +43,7 @@ endif
rigctl_CPPFLAGS = -I$(top_builddir)/tests -I$(top_builddir)/src -I$(srcdir) -I$(top_builddir)/security $(AM_CPPFLAGS)
# all the programs need this
-LDADD = $(top_builddir)/src/libhamlib.la $(top_builddir)/lib/libmisc.la $(DL_LIBS)
+LDADD = $(top_builddir)/src/libhamlib.la $(top_builddir)/lib/libmisc.la $(DL_LIBS) -lm
rigmem_CFLAGS = $(AM_CFLAGS) $(LIBXML2_CFLAGS) -I$(top_builddir)/src
rigctld_CFLAGS = $(AM_CFLAGS) $(PTHREAD_CFLAGS) -I$(top_builddir)/src -I$(top_builddir)/security
commit 7011b4855461a1fa178e7ddc9469b8826c220ad1
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sun Aug 20 16:16:08 2023 -0500
Add rigfreqwalk
diff --git a/tests/rigfreqwalk.c b/tests/rigfreqwalk.c
new file mode 100644
index 000000000..403d90008
--- /dev/null
+++ b/tests/rigfreqwalk.c
@@ -0,0 +1,152 @@
+/*
+ * Hamlib sample program
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <hamlib/rig.h>
+
+#include <hamlib/config.h>
+
+#define HISTORYSIZE 10
+double history[HISTORYSIZE];
+int nhistory;
+int historyinit = 1;
+
+double compute_mean(double arr[], int length)
+{
+ double sum = 0.0;
+ for (int i = 0; i < length; i++) {
+ sum += arr[i];
+ }
+ return sum / length;
+}
+
+double sigma(double arr[], int length) {
+ double mean = compute_mean(arr, length);
+ double sum_of_squares = 0.0;
+
+ for (int i = 0; i < length; i++) {
+ sum_of_squares += pow(arr[i] - mean, 2);
+ }
+
+ return sqrt(sum_of_squares / length);
+}
+
+int main(int argc, char *argv[])
+{
+ RIG *my_rig; /* handle to rig (nstance) */
+ int strength; /* S-Meter level */
+ int retcode; /* generic return code from functions */
+
+ rig_model_t myrig_model;
+
+
+
+ if (argc != 8)
+ {
+ fprintf(stderr,"%s: version 1.0\n", argv[0]);
+ fprintf(stderr,"Usage: %s [model#] [comport] [baud] [start freq] [stop_freq] [stepsize] [seconds/step]\n",
+ argv[0]);
+ return 1;
+ }
+
+ /* Turn off backend debugging output */
+ rig_set_debug_level(RIG_DEBUG_NONE);
+
+ /*
+ * allocate memory, setup & open port
+ */
+
+ hamlib_port_t myport;
+ myrig_model = atoi(argv[1]);
+ strncpy(myport.pathname, argv[2], HAMLIB_FILPATHLEN - 1);
+ myport.parm.serial.rate = atoi(argv[3]);
+
+ my_rig = rig_init(myrig_model);
+
+ if (!my_rig)
+ {
+ fprintf(stderr, "Unknown rig num: %d\n", myrig_model);
+ fprintf(stderr, "Please check riglist.h\n");
+ exit(1); /* whoops! something went wrong (mem alloc?) */
+ }
+
+ strncpy(my_rig->state.rigport.pathname, argv[2], HAMLIB_FILPATHLEN - 1);
+
+ retcode = rig_open(my_rig);
+
+ if (retcode != RIG_OK)
+ {
+ printf("rig_open: error = %s\n", rigerror(retcode));
+ exit(2);
+ }
+
+// printf("Port %s opened ok\n", SERIAL_PORT);
+
+ long freq1, freq2;
+ int stepsize, seconds;
+ int n = sscanf(argv[4], "%ld", &freq1);
+ n += sscanf(argv[5], "%ld", &freq2);
+ n += sscanf(argv[6], "%d", &stepsize);
+ n += sscanf(argv[7], "%d", &seconds);
+
+ if (n != 4)
+ {
+ fprintf(stderr, "Error parsing %s/%s/%s/%s as start/stop/step/seconds\n",
+ argv[4], argv[5], argv[6], argv[7]);
+ return 1;
+ }
+
+ printf("Start:%ld Stop:%ld Step:%d Wait:%d\n", freq1, freq2, stepsize, seconds);
+
+ while (1)
+ {
+ for (long f = freq1; f <= freq2; f += stepsize)
+ {
+ retcode = rig_set_freq(my_rig, RIG_VFO_CURR, (freq_t)f);
+ if (retcode != RIG_OK)
+ {
+ fprintf(stderr, "%s: Error rig_set_freq: %s\n", __func__, rigerror(retcode));
+ return 1;
+ }
+ sleep(seconds);
+ retcode = rig_get_strength(my_rig, RIG_VFO_CURR, &strength);
+
+ if (retcode != RIG_OK)
+ {
+ int static once=1;
+ if (once)
+ {
+ once = 0;
+ fprintf(stderr,"rig_get_strength error: %s\n", rigerror(retcode));
+ }
+ strength = 1;
+ }
+ history[nhistory++] = strength;
+ if (historyinit)
+ {
+ for(int i=0;i<HISTORYSIZE;++i) history[i] = strength;
+ historyinit = 0;
+ }
+ nhistory %= HISTORYSIZE;
+ double s = sigma(history, HISTORYSIZE);
+ char timebuf[64];
+ rig_date_strget(timebuf, sizeof(timebuf), 1);
+ printf("%s\t%ld\t%d\t%f\n", timebuf, f, strength, s);
+ fflush(stdout);
+
+ }
+ }
+
+ rig_close(my_rig); /* close port */
+ rig_cleanup(my_rig); /* if you care about memory */
+
+ printf("port %s closed ok \n", argv[2]);
+
+ return 0;
+}
commit cca3891362a0efd56e47eaa10c00bf419bedd215
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sun Aug 20 16:03:25 2023 -0500
Change L METER to allow meter names in addition to numeric
Change l METER to return meter number=name instead of just number
Hopefully doesn't mess up anybody using this function via rigctl/rigctld uf they parsing the number correctly.
It's easier for users with to use/see text names for both set/get
https://github.com/Hamlib/Hamlib/issues/1369
diff --git a/NEWS b/NEWS
index 2a6d62139..4e28851a7 100644
--- a/NEWS
+++ b/NEWS
@@ -13,6 +13,8 @@ Version 5.x -- future
* Change FT1000MP Mark V model names to align with FT1000MP
Version 4.6
+ * rig set level METER can now take SWR,COMP,ALC,IC/ID,DB,PO,VDD,TEMP arguments to set which meter to display
+ * reg get level displays meter number=name now
* Added parm BANDSELECT for Yaesu rigs
'p BANDSELECT' returns current band of VFOA
'P BANDSELECT BAND160M' example selects the 160M band
diff --git a/doc/man1/rigctl.1 b/doc/man1/rigctl.1
index 584bc43c7..80728ac0c 100644
--- a/doc/man1/rigctl.1
+++ b/doc/man1/rigctl.1
@@ -985,6 +985,8 @@ Lookup - if level shows 0/0/0 then it's probably a lookup value
SPECTRUM_MODE 0=None, 1=Center, 2=Fixed, 3=Center Scroll, 4=Fixed Scroll
SPECTRUM_AVG rig specific
+METER -- SWR,COMP,ALC,IC/ID,DB,PO,VDD,TEMP or can use the numbers above in Lookup l METER returns the meter number=name
+
Watts
RFPOWER_METER_WATTS
diff --git a/simulators/simic7300.c b/simulators/simic7300.c
index 898475f24..86283a01c 100644
--- a/simulators/simic7300.c
+++ b/simulators/simic7300.c
@@ -198,19 +198,17 @@ void frameParse(int fd, unsigned char *frame, int len)
break;
case 0x0f:
- if (frame[5] == 0) { split = 0; }
- else if (frame[5] == 1) { split = 1; }
- else { frame[6] = split; }
-
if (frame[5] == 0xfd)
{
printf("get split %d\n", split);
- frame[7] = 0xfd;
- n = write(fd, frame, 8);
+ frame[5] = split;
+ frame[6] = 0xfd;
+ n = write(fd, frame, 7);
}
else
{
printf("set split %d\n", 1);
+ split = frame[5];
frame[4] = 0xfb;
frame[5] = 0xfd;
n = write(fd, frame, 6);
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 72717b30e..fb87a2918 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -14,7 +14,7 @@ endif
DISTCLEANFILES = rigctl.log rigctl.sum testbcd.log testbcd.sum
-bin_PROGRAMS = rigctl rigctld rigmem rigsmtr rigswr rotctl rotctld rigctlcom rigctltcp rigctlsync ampctl ampctld rigtestmcast rigtestmcastrx $(TESTLIBUSB)
+bin_PROGRAMS = rigctl rigctld rigmem rigsmtr rigswr rotctl rotctld rigctlcom rigctltcp rigctlsync ampctl ampctld rigtestmcast rigtestmcastrx $(TESTLIBUSB) rigfreqwalk
#check_PROGRAMS = dumpmem testrig testrigopen testrigcaps testtrn testbcd testfreq listrigs testloc rig_bench testcache cachetest cachetest2 testcookie testgrid testsecurity
check_PROGRAMS = dumpmem testrig testrigopen testrigcaps testtrn testbcd testfreq listrigs testloc rig_bench testcache cachetest cachetest2 testcookie testgrid hamlibmodels testmW2power
diff --git a/tests/rigctl_parse.c b/tests/rigctl_parse.c
index ffcfe099c..dc322400a 100644
--- a/tests/rigctl_parse.c
+++ b/tests/rigctl_parse.c
@@ -3272,6 +3272,13 @@ declare_proto_rig(set_level)
level = rig_parse_level(arg1);
+ if ((!strcmp(arg2, "?") || arg2[0]==0) && level == RIG_LEVEL_METER)
+ {
+ fprintf(fout, "COMP ALC SWR ID/IC VDD DB PO TEMP%c", resp_sep);
+ RETURNFUNC2(RIG_OK);
+ }
+
+
// some Java apps send comma in international setups so substitute period
char *p = strchr(arg2, ',');
@@ -3288,6 +3295,7 @@ declare_proto_rig(set_level)
RETURNFUNC2(-RIG_ENAVAIL); /* no such parameter */
}
+
switch (cfp->type)
{
case RIG_CONF_BUTTON:
@@ -3315,6 +3323,23 @@ declare_proto_rig(set_level)
RETURNFUNC2(rig_set_ext_level(rig, vfo, cfp->token, val));
}
+ int dummy;
+ if (level == RIG_LEVEL_METER && sscanf(arg2,"%d",&dummy)==0)
+ {
+ if (strcmp(arg2,"COMP")==0) arg2 = "2";
+ else if (strcmp(arg2,"ALC")==0) arg2 = "4";
+ else if (strcmp(arg2,"SWR")==0) arg2 = "1";
+ else if (strcmp(arg2,"ID")==0 || strcmp(arg2,"IC")==0) arg2 = "8";
+ else if (strcmp(arg2,"VDD")==0) arg2 = "64";
+ else if (strcmp(arg2, "DB")==0) arg2 = "16";
+ else if (strcmp(arg2, "PO")==0) arg2 = "32";
+ else if (strcmp(arg2, "TEMP")==0) arg2 = "128";
+ else
+ {
+ rig_debug(RIG_DEBUG_ERR, "%s: unknown meter=%s, only know COMP,ALC,SWR,ID/IC,VDD,DB,PO,TEMP\n", __func__, arg2);
+ RETURNFUNC2(-RIG_EINVAL);
+ }
+ }
if (RIG_LEVEL_IS_FLOAT(level))
{
CHKSCN1ARG(sscanf(arg2, "%f", &val.f));
@@ -3352,7 +3377,6 @@ declare_proto_rig(get_level)
//fputc('\n', fout);
RETURNFUNC2(RIG_OK);
}
-
level = rig_parse_level(arg1);
if (!rig_has_get_level(rig, level))
@@ -3416,6 +3440,26 @@ declare_proto_rig(get_level)
{
fprintf(fout, "%s: ", cmd->arg2);
}
+ if (level == RIG_LEVEL_METER && interactive && prompt)
+ {
+ // we will show text answers as they make morse sense for rigtl
+ switch(val.i)
+ {
+ case RIG_METER_COMP: fprintf(fout, "%d=%s%c", val.i, "COMP", resp_sep);break;
+ case RIG_METER_ALC: fprintf(fout, "%d=%s%c", val.i, "ALC", resp_sep);break;
+ case RIG_METER_SWR: fprintf(fout, "%d=%s%c", val.i, "SWR", resp_sep);break;
+ case RIG_METER_IC: fprintf(fout, "%d=%s%c", val.i, "IC", resp_sep);break;
+ case RIG_METER_VDD: fprintf(fout, "%d=%s%c", val.i, "VDD", resp_sep);break;
+ case RIG_METER_DB: fprintf(fout, "%d=%s%c", val.i, "DB", resp_sep);break;
+ case RIG_METER_PO: fprintf(fout, "%d=%s%c", val.i, "PO", resp_sep);break;
+ case RIG_METER_TEMP: fprintf(fout, "%d=%s%c", val.i, "TEMP", resp_sep);break;
+ default:
+ rig_debug(RIG_DEBUG_ERR, "%s: unknown meter=%d, only know COMP,ALC,SWR,ID/IC,VDD,DB,PO,TEMP\n", __func__, val.i);
+ RETURNFUNC2(-RIG_EINVAL);
+ }
+ RETURNFUNC(RIG_OK);
+ }
+
if (RIG_LEVEL_IS_FLOAT(level))
{
commit 1b0f0ec42201e418ebcdfa66ad0645ceed069348
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sat Aug 19 15:35:54 2023 -0500
Fix K3 stop_morse RPRT return
https://github.com/Hamlib/Hamlib/issues/1365
diff --git a/rigs/kenwood/k3.c b/rigs/kenwood/k3.c
index 9d391c148..46457e994 100644
--- a/rigs/kenwood/k3.c
+++ b/rigs/kenwood/k3.c
@@ -2911,6 +2911,7 @@ int k4_stop_voice_mem(RIG *rig, vfo_t vfo)
int k3_stop_morse(RIG *rig, vfo_t vfo)
{
int retval;
- retval = kenwood_transaction(rig, "KY;", NULL, 0);
+ char buf[32];
+ retval = kenwood_transaction(rig, "KY;", buf, 4);
return retval;
}
commit b40da0f6b0f07d19b79a0869d6fe522037dc3e5f
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sat Aug 19 12:36:07 2023 -0500
Increase send_morse size to use maximum for rigs or 20 chars (if morse_qsize unknown)
This will still allow for up to 1023 characater to queue up.
No guarantees on which rigs allow for this queuing though.
Kenwood rigs can at least find the buffer status to wait for room but not all rigs do.
https://github.com/Hamlib/Hamlib/issues/1368
diff --git a/include/hamlib/rig.h b/include/hamlib/rig.h
index 027bc92de..d49734608 100644
--- a/include/hamlib/rig.h
+++ b/include/hamlib/rig.h
@@ -2153,6 +2153,7 @@ struct rig_caps {
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 */
+ short morse_qsize; /* max length of morse */
// int (*bandwidth2rig)(RIG *rig, enum bandwidth_t bandwidth);
// enum bandwidth_t (*rig2bandwidth)(RIG *rig, int rigbandwidth);
};
diff --git a/rigs/kenwood/k3.c b/rigs/kenwood/k3.c
index 6ad85abf8..9d391c148 100644
--- a/rigs/kenwood/k3.c
+++ b/rigs/kenwood/k3.c
@@ -342,6 +342,7 @@ const struct rig_caps k3_caps =
.send_voice_mem = k3_send_voice_mem,
.stop_voice_mem = k3_stop_voice_mem,
.power2mW = k3_power2mW,
+ .morse_qsize = 24,
.hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS
};
@@ -497,6 +498,7 @@ const struct rig_caps k3s_caps =
.send_voice_mem = k3_send_voice_mem,
.stop_voice_mem = k3_stop_voice_mem,
.power2mW = k3_power2mW,
+ .morse_qsize = 24,
.hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS
};
@@ -658,6 +660,7 @@ const struct rig_caps k4_caps =
.send_voice_mem = k4_send_voice_mem,
.stop_voice_mem = k4_stop_voice_mem,
.power2mW = k3_power2mW,
+ .morse_qsize = 24,
.hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS
};
@@ -812,6 +815,7 @@ const struct rig_caps kx3_caps =
.send_voice_mem = k3_send_voice_mem,
.stop_voice_mem = k3_stop_voice_mem,
.power2mW = k3_power2mW,
+ .morse_qsize = 24,
.hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS
};
diff --git a/rigs/yaesu/ft1200.c b/rigs/yaesu/ft1200.c
index 87e1f8c75..712e64aa2 100644
--- a/rigs/yaesu/ft1200.c
+++ b/rigs/yaesu/ft1200.c
@@ -147,7 +147,7 @@ const struct rig_caps ftdx1200_caps =
RIG_MODEL(RIG_MODEL_FTDX1200),
.model_name = "FTDX-1200",
.mfg_name = "Yaesu",
- .version = NEWCAT_VER ".6",
+ .version = NEWCAT_VER ".7",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
@@ -328,5 +328,6 @@ const struct rig_caps ftdx1200_caps =
.set_clock = newcat_set_clock,
.get_clock = newcat_get_clock,
.scan = newcat_scan,
+ .morse_qsize = 50,
.hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS
};
diff --git a/rigs/yaesu/ft2000.c b/rigs/yaesu/ft2000.c
index 0ebb5f94b..416b239b0 100644
--- a/rigs/yaesu/ft2000.c
+++ b/rigs/yaesu/ft2000.c
@@ -132,7 +132,7 @@ const struct rig_caps ft2000_caps =
RIG_MODEL(RIG_MODEL_FT2000),
.model_name = "FT-2000",
.mfg_name = "Yaesu",
- .version = NEWCAT_VER ".4",
+ .version = NEWCAT_VER ".5",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
@@ -313,5 +313,6 @@ const struct rig_caps ft2000_caps =
.send_morse = newcat_send_morse,
.wait_morse = rig_wait_morse,
.scan = newcat_scan,
+ .morse_qsize = 50,
.hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS
};
diff --git a/rigs/yaesu/ft3000.c b/rigs/yaesu/ft3000.c
index 20d3b7eaf..a51ae072e 100644
--- a/rigs/yaesu/ft3000.c
+++ b/rigs/yaesu/ft3000.c
@@ -242,7 +242,7 @@ const struct rig_caps ftdx3000_caps =
RIG_MODEL(RIG_MODEL_FTDX3000),
.model_name = "FTDX-3000",
.mfg_name = "Yaesu",
- .version = NEWCAT_VER ".11",
+ .version = NEWCAT_VER ".12",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
@@ -419,6 +419,7 @@ const struct rig_caps ftdx3000_caps =
.send_morse = newcat_send_morse,
.wait_morse = rig_wait_morse,
.scan = newcat_scan,
+ .morse_qsize = 50,
.hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS
};
diff --git a/rigs/yaesu/ft450.c b/rigs/yaesu/ft450.c
index e1e5d13a9..d0a7cbb34 100644
--- a/rigs/yaesu/ft450.c
+++ b/rigs/yaesu/ft450.c
@@ -207,6 +207,7 @@ const struct rig_caps ft450_caps =
.send_morse = newcat_send_morse,
.wait_morse = rig_wait_morse,
.scan = newcat_scan,
+ .morse_qsize = 40,
.hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS
};
diff --git a/rigs/yaesu/ft5000.c b/rigs/yaesu/ft5000.c
index a15e8ab50..f1a06608f 100644
--- a/rigs/yaesu/ft5000.c
+++ b/rigs/yaesu/ft5000.c
@@ -138,7 +138,7 @@ const struct rig_caps ftdx5000_caps =
RIG_MODEL(RIG_MODEL_FTDX5000),
.model_name = "FTDX-5000",
.mfg_name = "Yaesu",
- .version = NEWCAT_VER ".10",
+ .version = NEWCAT_VER ".11",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
@@ -315,5 +315,6 @@ const struct rig_caps ftdx5000_caps =
.send_morse = newcat_send_morse,
.wait_morse = rig_wait_morse,
.scan = newcat_scan,
+ .morse_qsize = 50,
.hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS
};
diff --git a/rigs/yaesu/ft710.c b/rigs/yaesu/ft710.c
index ac0b425ec..792350806 100644
--- a/rigs/yaesu/ft710.c
+++ b/rigs/yaesu/ft710.c
@@ -119,7 +119,7 @@ const struct rig_caps ft710_caps =
RIG_MODEL(RIG_MODEL_FT710),
.model_name = "FT-710",
.mfg_name = "Yaesu",
- .version = NEWCAT_VER ".6",
+ .version = NEWCAT_VER ".7",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
@@ -305,5 +305,6 @@ const struct rig_caps ft710_caps =
.set_clock = newcat_set_clock,
.get_clock = newcat_get_clock,
.scan = newcat_scan,
+ .morse_qsize = 50,
.hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS
};
diff --git a/rigs/yaesu/ft891.c b/rigs/yaesu/ft891.c
index 817b0a8cc..9a2eabc99 100644
--- a/rigs/yaesu/ft891.c
+++ b/rigs/yaesu/ft891.c
@@ -130,7 +130,7 @@ const struct rig_caps ft891_caps =
RIG_MODEL(RIG_MODEL_FT891),
.model_name = "FT-891",
.mfg_name = "Yaesu",
- .version = NEWCAT_VER ".8",
+ .version = NEWCAT_VER ".9",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
@@ -329,6 +329,7 @@ const struct rig_caps ft891_caps =
.set_clock = newcat_set_clock,
.get_clock = newcat_get_clock,
.scan = newcat_scan,
+ .morse_qsize = 50,
.hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS
};
diff --git a/rigs/yaesu/ft9000.c b/rigs/yaesu/ft9000.c
index 795fa1b24..964bc38a6 100644
--- a/rigs/yaesu/ft9000.c
+++ b/rigs/yaesu/ft9000.c
@@ -46,7 +46,7 @@ const struct rig_caps ft9000_caps =
RIG_MODEL(RIG_MODEL_FT9000),
.model_name = "FTDX-9000",
.mfg_name = "Yaesu",
- .version = NEWCAT_VER ".4",
+ .version = NEWCAT_VER ".5",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
@@ -214,6 +214,7 @@ const struct rig_caps ft9000_caps =
.send_morse = newcat_send_morse,
.wait_morse = rig_wait_morse,
.scan = newcat_scan,
+ .morse_qsize = 50,
.hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS
};
@@ -222,7 +223,7 @@ const struct rig_caps ft9000Old_caps =
RIG_MODEL(RIG_MODEL_FT9000OLD),
.model_name = "FTDX-9000 Old",
.mfg_name = "Yaesu",
- .version = NEWCAT_VER ".4",
+ .version = NEWCAT_VER ".5",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
@@ -390,5 +391,6 @@ const struct rig_caps ft9000Old_caps =
.send_morse = newcat_send_morse,
.wait_morse = rig_wait_morse,
.scan = newcat_scan,
+ .morse_qsize = 50,
.hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS
};
diff --git a/rigs/yaesu/ft950.c b/rigs/yaesu/ft950.c
index d640bfe76..9802033c5 100644
--- a/rigs/yaesu/ft950.c
+++ b/rigs/yaesu/ft950.c
@@ -289,5 +289,6 @@ const struct rig_caps ft950_caps =
.send_morse = newcat_send_morse,
.wait_morse = rig_wait_morse,
.scan = newcat_scan,
+ .morse_qsize = 50,
...
[truncated message content] |
|
From: n0nb <n0...@us...> - 2023-08-18 13:58:00
|
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 4faef9e0316fd118e114c2794baff5b19cadfbf3 (commit)
via 01730082fbfd029e1df789df47f21eaeb524d510 (commit)
via 0edd1df223bef5a2814e06c004c480e4d5593ddf (commit)
via 147dea76514d072598197d44eb6ce29ad997214d (commit)
via ccd6472f031aec1f38f4ae4453be602712b8e71d (commit)
via 8c63fdeafc3c0011202a692cc29c64151df4d1b9 (commit)
via aa338afa1ad2a70e2e06507f092e478c1b47cd9c (commit)
via 63bb03cb07809fb8ee865a65351317e353d11085 (commit)
via e88715240774db70a4e41d872cf4aa5f17e5b8a9 (commit)
via beb69f752ae7ec58be753059557a06ae59841ab2 (commit)
via 5062d565a951bdd3863a1b2c6e1dde8d2ddbca42 (commit)
via 2bc28f2deaf3fb9d5fe406e86079afb4c06b39b4 (commit)
via 003b50bc57a376556c96fbc8e60e6ed1c66a7bb1 (commit)
via f0765e6c3a4ed0b0b7956f6137b380253a02b7ea (commit)
via 7392d206a8f379c81399d2b55e2dc988aabe1784 (commit)
via fb3d83a19ab5f6fc4692dfc4b5aee31764a84c86 (commit)
via ac5018a9a39d26c005a926ceaf8bdeb3afedc62b (commit)
via 1f50b88320bfcc229e6eb354e461638adea0879a (commit)
via 6014e3142d421a6a4236bd5a755a5961a86cafc9 (commit)
via f5e30815b7a31dd9cf8a67dcc326ce5f6118b23a (commit)
via ef3b90a1bed12b040de6aeab67257a12d177ca98 (commit)
via 72870ec26a6802de4b8f15e220ea977d56ad0721 (commit)
via afa51b9863706018c47ba5168c0e8ccd163de901 (commit)
via d7d450df493dd47c913bfc3c5272be4ba32eaf4b (commit)
from 11d2f34ec8f2ac2d972f33e497ff10b0a837ab2b (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 4faef9e0316fd118e114c2794baff5b19cadfbf3
Author: Mike Black W9MDB <mdb...@ya...>
Date: Fri Aug 18 08:17:39 2023 -0500
Add simxiegug90.c
diff --git a/simulators/simxiegug90.c b/simulators/simxiegug90.c
new file mode 100644
index 000000000..0378d88c7
--- /dev/null
+++ b/simulators/simxiegug90.c
@@ -0,0 +1,510 @@
+// simicom will show the pts port to use for rigctl on Unix
+// using virtual serial ports on Windows is to be developed yet
+// Needs a lot of improvement to work on all Icoms
+// gcc -g -Wall -o simicom simicom.c -lhamlib
+// On mingw in the hamlib src directory
+// gcc -static -I../include -g -Wall -o simicom simicom.c -L../../build/src/.libs -lhamlib -lwsock32 -lws2_32
+#define _XOPEN_SOURCE 700
+// since we are POSIX here we need this
+struct ip_mreq
+{
+ int dummy;
+};
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <sys/time.h>
+#include <hamlib/rig.h>
+#include "../src/misc.h"
+
+#define BUFSIZE 256
+//#define X25
+
+int civ_731_mode = 0;
+vfo_t current_vfo = RIG_VFO_A;
+int split = 0;
+
+// we make B different from A to ensure we see a difference at startup
+float freqA = 14074000;
+float freqB = 14074500;
+mode_t modeA = RIG_MODE_CW;
+mode_t modeB = RIG_MODE_USB;
+int datamodeA = 0;
+int datamodeB = 0;
+pbwidth_t widthA = 0;
+pbwidth_t widthB = 1;
+ant_t ant_curr = 0;
+int ant_option = 0;
+int ptt = 0;
+int keyspd = 20;
+
+void dumphex(unsigned char *buf, int n)
+{
+ for (int i = 0; i < n; ++i) { printf("%02x ", buf[i]); }
+
+ printf("\n");
+}
+
+int
+frameGet(int fd, unsigned char *buf)
+{
+ int i = 0;
+ memset(buf, 0, BUFSIZE);
+ unsigned char c;
+
+ while (read(fd, &c, 1) > 0)
+ {
+ buf[i++] = c;
+ //printf("i=%d, c=0x%02x\n",i,c);
+
+ if (c == 0xfd)
+ {
+ dumphex(buf, i);
+ return i;
+ }
+ }
+
+ printf("Error???\n");
+
+ return 0;
+}
+
+void frameParse(int fd, unsigned char *frame, int len)
+{
+ double freq;
+ int n;
+
+ dumphex(frame, len);
+
+ if (frame[0] != 0xfe && frame[1] != 0xfe)
+ {
+ printf("expected fe fe, got ");
+ dumphex(frame, len);
+ return;
+ }
+
+ switch (frame[4])
+ {
+ case 0x03:
+
+ //from_bcd(frameackbuf[2], (civ_731_mode ? 4 : 5) * 2);
+ if (current_vfo == RIG_VFO_A || current_vfo == RIG_VFO_MAIN)
+ {
+ printf("get_freqA\n");
+ to_bcd(&frame[5], (long long)freqA, (civ_731_mode ? 4 : 5) * 2);
+ }
+ else
+ {
+ printf("get_freqB\n");
+ to_bcd(&frame[5], (long long)freqB, (civ_731_mode ? 4 : 5) * 2);
+ }
+
+ frame[10] = 0xfd;
+ n = write(fd, frame, 11);
+
+ if (n != 11) {printf("Error!\n"); exit(1);}
+
+ break;
+
+ case 0x04:
+ if (current_vfo == RIG_VFO_A || current_vfo == RIG_VFO_MAIN)
+ {
+ printf("get_modeA\n");
+ frame[5] = modeA;
+ frame[6] = widthA;
+ }
+ else
+ {
+ printf("get_modeB\n");
+ frame[5] = modeB;
+ frame[6] = widthB;
+ }
+
+ frame[7] = 0xfd;
+ n = write(fd, frame, 8);
+ break;
+
+ case 0x05:
+ freq = from_bcd(&frame[5], (civ_731_mode ? 4 : 5) * 2);
+ printf("set_freq to %.0f\n", freq);
+
+ if (current_vfo == RIG_VFO_A || current_vfo == RIG_VFO_MAIN) { freqA = freq; }
+ else { freqB = freq; }
+
+ frame[4] = 0xfb;
+ frame[5] = 0xfd;
+ n = write(fd, frame, 6);
+ break;
+
+ case 0x06:
+ if (current_vfo == RIG_VFO_A || current_vfo == RIG_VFO_MAIN) { modeA = frame[6]; }
+ else { modeB = frame[6]; }
+
+ frame[4] = 0xfb;
+ frame[5] = 0xfd;
+ n = write(fd, frame, 6);
+ break;
+
+ case 0x07:
+
+ switch (frame[5])
+ {
+ case 0x00: current_vfo = RIG_VFO_A; break;
+
+ case 0x01: current_vfo = RIG_VFO_B; break;
+
+ case 0xb0: freq = freqA; freqA = freqB; freqB = freq; break;
+
+ }
+
+ printf("set_vfo to %s\n", rig_strvfo(current_vfo));
+
+ frame[4] = 0xfb;
+ frame[5] = 0xfd;
+ n = write(fd, frame, 6);
+ break;
+
+ case 0x0f:
+ if (frame[5] == 0) { split = 0; }
+ else { split = 1; }
+
+ printf("set split %d\n", 1);
+ frame[4] = 0xfb;
+ frame[5] = 0xfd;
+ n = write(fd, frame, 6);
+ break;
+
+#if 0
+ case 0x12: // we're simulating the 3-byte version -- not the 2-byte
+ if (frame[5] != 0xfd)
+ {
+ printf("Set ant %d\n", -1);
+ ant_curr = frame[5];
+ ant_option = frame[6];
+ dump_hex(frame, 8);
+ }
+ else
+ {
+ printf("Get ant\n");
+ }
+
+ frame[5] = ant_curr;
+ frame[6] = ant_option;
+ frame[7] = 0xfd;
+ printf("n=write 8 bytes\n");
+ dump_hex(frame, 8);
+ n = write(fd, frame, 8);
+ break;
+#endif
+
+ case 0x14:
+ switch (frame[5])
+ {
+ static int power_level = 0;
+ static int level = 0;
+
+ case 0x01:
+ level = 255;
+ printf("Using AF level %d\n", level);
+ to_bcd(&frame[6], (long long) level, 2);
+ frame[8] = 0xfd;
+ n = write(fd, frame, 9);
+ break;
+
+ case 0x0a:
+ printf("Using power level %d\n", power_level);
+ power_level += 10;
+
+ if (power_level > 250) { power_level = 0; }
+
+ to_bcd(&frame[6], (long long)power_level, 2);
+ frame[8] = 0xfd;
+ n = write(fd, frame, 9);
+ break;
+
+ case 0x0c:
+ dumphex(frame, 10);
+ printf("subcmd=0x0c #1\n");
+
+ if (frame[6] != 0xfd) // then we have data
+ {
+ printf("subcmd=0x0c #1\n");
+ keyspd = from_bcd(&frame[6], 2);
+ frame[6] = 0xfb;
+ n = write(fd, frame, 7);
+ }
+ else
+ {
+ printf("subcmd=0x0c #1\n");
+ to_bcd(&frame[6], keyspd, 2);
+ frame[8] = 0xfd;
+ n = write(fd, frame, 9);
+ }
+
+ break;
+ }
+
+
+ break;
+
+ case 0x15:
+ switch (frame[5])
+ {
+ static int meter_level = 0;
+
+ case 0x11:
+ printf("Using meter level %d\n", meter_level);
+ meter_level += 10;
+
+ if (meter_level > 250) { meter_level = 0; }
+
+ to_bcd(&frame[6], (long long)meter_level, 2);
+ frame[8] = 0xfd;
+ n = write(fd, frame, 9);
+ break;
+ }
+
+ break;
+
+#if 0
+ case 0x18: // miscellaneous things
+ frame[5] = 1;
+ frame[6] = 0xfd;
+ n = write(fd, frame, 7);
+ break;
+
+ case 0x1a: // miscellaneous things
+ switch (frame[5])
+ {
+ case 0x03: // width
+ if (current_vfo == RIG_VFO_A || current_vfo == RIG_VFO_MAIN) { frame[6] = widthA; }
+ else { frame[6] = widthB; }
+
+ frame[7] = 0xfd;
+ n = write(fd, frame, 8);
+ break;
+
+ case 0x04: // IC7200 data mode
+ frame[6] = 0;
+ frame[7] = 0;
+ frame[8] = 0xfd;
+ n = write(fd, frame, 9);
+ break;
+
+ case 0x07: // satmode
+ frame[6] = 0;
+ frame[7] = 0xfd;
+ n = write(fd, frame, 8);
+ break;
+
+ }
+
+ break;
+#endif
+ case 0x1c:
+ switch (frame[5])
+ {
+ case 0:
+ if (frame[6] == 0xfd)
+ {
+ frame[6] = ptt;
+ frame[7] = 0xfd;
+ n = write(fd, frame, 8);
+ }
+ else
+ {
+ ptt = frame[6];
+ frame[7] = 0xfb;
+ frame[8] = 0xfd;
+ n = write(fd, frame, 9);
+ }
+
+ break;
+
+ }
+
+ break;
+
+
+#ifdef X25
+
+ case 0x25:
+ if (frame[6] == 0xfd)
+ {
+ if (frame[5] == 0x00)
+ {
+ to_bcd(&frame[6], (long long)freqA, (civ_731_mode ? 4 : 5) * 2);
+ printf("get_freqA=%.0f\n", freqA);
+ }
+ else
+ {
+ to_bcd(&frame[6], (long long)freqB, (civ_731_mode ? 4 : 5) * 2);
+ printf("get_freqB=%.0f\n", freqB);
+ }
+
+ frame[11] = 0xfd;
+ n = write(fd, frame, 12);
+ }
+ else
+ {
+ freq = from_bcd(&frame[6], (civ_731_mode ? 4 : 5) * 2);
+ printf("set_freq to %.0f\n", freq);
+
+ if (frame[5] == 0x00) { freqA = freq; }
+ else { freqB = freq; }
+
+ frame[4] = 0xfb;
+ frame[5] = 0xfd;
+ n = write(fd, frame, 6);
+ }
+
+ break;
+
+ case 0x26:
+ for (int i = 0; i < 6; ++i) { printf("%02x:", frame[i]); }
+
+ if (frame[6] == 0xfd) // then a query
+ {
+ for (int i = 0; i < 6; ++i) { printf("%02x:", frame[i]); }
+
+ frame[6] = frame[5] == 0 ? modeA : modeB;
+ frame[7] = frame[5] == 0 ? datamodeA : datamodeB;
+ frame[8] = 0xfb;
+ frame[9] = 0xfd;
+ n = write(fd, frame, 10);
+ }
+ else
+ {
+ for (int i = 0; i < 12; ++i) { printf("%02x:", frame[i]); }
+
+ if (frame[5] == 0)
+ {
+ modeA = frame[6];
+ datamodeA = frame[7];
+ }
+ else
+ {
+ modeB = frame[6];
+ datamodeB = frame[7];
+ }
+
+ frame[4] = 0xfb;
+ frame[5] = 0xfd;
+ n = write(fd, frame, 6);
+ }
+
+ printf("\n");
+ break;
+#else
+
+ case 0x25:
+ frame[4] = 0xfa;
+ frame[5] = 0xfd;
+ break;
+
+ case 0x26:
+ frame[4] = 0xfa;
+ frame[5] = 0xfd;
+ break;
+#endif
+
+ default: printf("cmd 0x%02x unknown\n", frame[4]);
+ }
+
+ // don't care about the rig type yet
+
+}
+
+#if defined(WIN32) || defined(_WIN32)
+int openPort(char *comport) // doesn't matter for using pts devices
+{
+ int fd;
+ fd = open(comport, O_RDWR);
+
+ if (fd < 0)
+ {
+ perror(comport);
+ }
+
+ return fd;
+}
+
+#else
+int openPort(char *comport) // doesn't matter for using pts devices
+{
+ int fd = posix_openpt(O_RDWR);
+ char *name = ptsname(fd);
+
+ if (name == NULL)
+ {
+ perror("pstname");
+ return -1;
+ }
+
+ printf("name=%s\n", name);
+
+ if (fd == -1 || grantpt(fd) == -1 || unlockpt(fd) == -1)
+ {
+ perror("posix_openpt");
+ return -1;
+ }
+
+ return fd;
+}
+#endif
+
+void rigStatus()
+{
+ char vfoa = current_vfo == RIG_VFO_A ? '*' : ' ';
+ char vfob = current_vfo == RIG_VFO_B ? '*' : ' ';
+ printf("%cVFOA: mode=%d datamode=%d width=%ld freq=%.0f\n", vfoa, modeA,
+ datamodeA,
+ widthA,
+ freqA);
+ printf("%cVFOB: mode=%d datamode=%d width=%ld freq=%.0f\n", vfob, modeB,
+ datamodeB,
+ widthB,
+ freqB);
+}
+
+int main(int argc, char **argv)
+{
+ unsigned char buf[256];
+ int fd = openPort(argv[1]);
+
+ printf("%s: %s\n", argv[0], rig_version());
+#ifdef X25
+ printf("x25/x26 command recognized\n");
+#else
+ printf("x25/x26 command rejected\n");
+#endif
+#if defined(WIN32) || defined(_WIN32)
+
+ if (argc != 2)
+ {
+ printf("Missing comport argument\n");
+ printf("%s [comport]\n", argv[0]);
+ exit(1);
+ }
+
+#endif
+
+ while (1)
+ {
+ int len = frameGet(fd, buf);
+
+ if (len <= 0)
+ {
+ close(fd);
+ fd = openPort(argv[1]);
+ }
+
+ frameParse(fd, buf, len);
+ rigStatus();
+ }
+
+ return 0;
+}
commit 01730082fbfd029e1df789df47f21eaeb524d510
Author: Mike Black W9MDB <mdb...@ya...>
Date: Fri Aug 18 08:06:14 2023 -0500
Fix G90 by changing set/get_mode_with_data to set/get_mode and suppress icom_get_dsp_flt
https://github.com/Hamlib/Hamlib/issues/1364
diff --git a/rigs/icom/icom.c b/rigs/icom/icom.c
index daecdbf03..6d5ae1c25 100644
--- a/rigs/icom/icom.c
+++ b/rigs/icom/icom.c
@@ -1951,7 +1951,6 @@ int filtericom[] = { 50, 100, 150, 200, 250, 300, 350, 400, 450, 500, 600, 700,
pbwidth_t icom_get_dsp_flt(RIG *rig, rmode_t mode)
{
-
int retval, res_len = 0, rfstatus;
unsigned char resbuf[MAXFRAMELEN];
value_t rfwidth;
@@ -1984,7 +1983,8 @@ pbwidth_t icom_get_dsp_flt(RIG *rig, rmode_t mode)
}
if (RIG_MODEL_X108G == rig->caps->rig_model
- || RIG_MODEL_X5105 == rig->caps->rig_model)
+ || RIG_MODEL_X5105 == rig->caps->rig_model
+ || RIG_MODEL_G90 == rig->caps->rig_model)
{
priv->no_1a_03_cmd = ENUM_1A_03_NO;
}
@@ -2761,12 +2761,7 @@ int icom_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
rig_set_vfo(rig, vfo); // force VFO
}
- retval = 0;
- // G90 does have dsp_flt command
- if (rig->caps->rig_model != RIG_MODEL_G90)
- {
- retval = icom_get_dsp_flt(rig, *mode);
- }
+ retval = icom_get_dsp_flt(rig, *mode);
*width = retval;
if (retval == 0)
@@ -2789,12 +2784,7 @@ int icom_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
// we need to figure out how to read VFOB without swapping VFOs
//HAMLIB_TRACE;
//rig_set_vfo(rig, RIG_VFO_B);
- retval = 0;
-
- if (rig->caps->rig_model != RIG_MODEL_G90)
- {
- retval = icom_get_dsp_flt(rig, *mode);
- }
+ retval = icom_get_dsp_flt(rig, *mode);
*width = retval;
if (*width == 0) { *width = rig->state.cache.widthMainA; } // we'll use VFOA's width
diff --git a/rigs/icom/xiegu.c b/rigs/icom/xiegu.c
index 697b6950a..91e5b5f09 100644
--- a/rigs/icom/xiegu.c
+++ b/rigs/icom/xiegu.c
@@ -632,8 +632,8 @@ const struct rig_caps g90_caps =
.set_freq = icom_set_freq,
.get_freq = icom_get_freq,
- .set_mode = icom_set_mode_with_data,
- .get_mode = icom_get_mode_with_data,
+ .set_mode = icom_set_mode,
+ .get_mode = icom_get_mode,
.set_vfo = icom_set_vfo,
.set_ant = NULL, /*automatically set by rig depending band */
.get_ant = NULL,
diff --git a/simulators/Makefile.am b/simulators/Makefile.am
index 3583ba822..7b794947c 100644
--- a/simulators/Makefile.am
+++ b/simulators/Makefile.am
@@ -8,7 +8,7 @@ DISTCLEANFILES =
bin_PROGRAMS =
-check_PROGRAMS = simelecraft simicgeneric simkenwood simyaesu simic9100 simic9700 simft991 simftdx1200 simftdx3000 simjupiter simpowersdr simid5100 simft736 simftdx5000 simtmd700 simrotorez simspid simft817 simts590 simft847 simic7300 simic7000 simic7100 simic7200 simatd578 simic905 simts450 simic7600 simic7610 simic705 simts950 simts990 simic7851 simftdx101
+check_PROGRAMS = simelecraft simicgeneric simkenwood simyaesu simic9100 simic9700 simft991 simftdx1200 simftdx3000 simjupiter simpowersdr simid5100 simft736 simftdx5000 simtmd700 simrotorez simspid simft817 simts590 simft847 simic7300 simic7000 simic7100 simic7200 simatd578 simic905 simts450 simic7600 simic7610 simic705 simts950 simts990 simic7851 simftdx101 simxiegug90
simelecraft_SOURCES = simelecraft.c
simkenwood_SOURCES = simkenwood.c
diff --git a/simulators/simxiegug90 b/simulators/simxiegug90
new file mode 100755
index 000000000..46a19d615
Binary files /dev/null and b/simulators/simxiegug90 differ
commit 0edd1df223bef5a2814e06c004c480e4d5593ddf
Author: Mike Black W9MDB <mdb...@ya...>
Date: Fri Aug 18 00:04:59 2023 -0500
Add more KEYERTYPE implementaions to Icom rigs
diff --git a/include/hamlib/rig.h b/include/hamlib/rig.h
index b8a065797..85396a2d8 100644
--- a/include/hamlib/rig.h
+++ b/include/hamlib/rig.h
@@ -1154,7 +1154,7 @@ enum multicast_item_e {
//! @cond Doxygen_Suppress
#define RIG_PARM_FLOAT_LIST (RIG_PARM_BACKLIGHT|RIG_PARM_BAT|RIG_PARM_KEYLIGHT|RIG_PARM_BACKLIGHT)
-#define RIG_PARM_STRING_LIST (RIG_PARM_BANDSELECT)
+#define RIG_PARM_STRING_LIST (RIG_PARM_BANDSELECT|RIG_PARM_KEYERTYPE)
#define RIG_PARM_READONLY_LIST (RIG_PARM_BAT)
#define RIG_PARM_IS_FLOAT(l) ((l)&RIG_PARM_FLOAT_LIST)
diff --git a/rigs/icom/ic7300.c b/rigs/icom/ic7300.c
index 76e74c46c..59acc14d5 100644
--- a/rigs/icom/ic7300.c
+++ b/rigs/icom/ic7300.c
@@ -727,7 +727,8 @@ const struct rig_caps ic7300_caps =
[PARM_BEEP] = {.min = {.i = 0}, .max = {.i = 1}, .step = {.i = 1}},
[PARM_SCREENSAVER] = {.min = {.i = 0}, .max = {.i = 3}, .step = {.i = 1}},
[PARM_TIME] = {.min = {.i = 0}, .max = {.i = 86399}, .step = {.i = 1}},
- [PARM_KEYERTYPE] = {.min = {.i = 0}, .max = {.i = 2}, .step = {.i = 1}},
+ [PARM_KEYERTYPE] = {.step = {.s = "STRAIGHT, BUG, PADDLE"}},
+
},
.ext_tokens = ic7300_ext_tokens,
.extlevels = icom_ext_levels,
@@ -969,7 +970,7 @@ struct rig_caps ic9700_caps =
[PARM_BANDSELECT] = {.step = {.s = "BANDUNUSED,BAND70CM,BAND33CM,BAND23CM"}},
[PARM_BEEP] = {.min = {.i = 0}, .max = {.i = 1}},
[PARM_SCREENSAVER] = {.min = {.i = 0}, .max = {.i = 3}, .step = {.i = 1}},
- [PARM_KEYERTYPE] = {.min = {.i = 0}, .max = {.i = 2}, .step = {.i = 1}},
+ [PARM_KEYERTYPE] = {.step = {.s = "STRAIGHT, BUG, PADDLE"}},
},
.ext_tokens = ic9700_ext_tokens,
.extlevels = icom_ext_levels,
@@ -1561,7 +1562,7 @@ const struct rig_caps ic905_caps =
[PARM_BANDSELECT] = {.step = {.s = "BANDUNUSED,BAND70CM,BAND33CM,BAND23CM,BAND23CM,BAND13CM,BAND3CM"}},
[PARM_BEEP] = {.min = {.i = 0}, .max = {.i = 1}},
[PARM_SCREENSAVER] = {.min = {.i = 0}, .max = {.i = 3}, .step = {.i = 1}},
- [PARM_KEYERTYPE] = {.min = {.i = 0}, .max = {.i = 2}, .step = {.i = 1}},
+ [PARM_KEYERTYPE] = {.step = {.s = "STRAIGHT, BUG, PADDLE"}},
},
.ext_tokens = ic705_ext_tokens,
.extlevels = icom_ext_levels,
diff --git a/rigs/icom/ic7410.c b/rigs/icom/ic7410.c
index 937b87bac..33a786af9 100644
--- a/rigs/icom/ic7410.c
+++ b/rigs/icom/ic7410.c
@@ -92,6 +92,7 @@
struct cmdparams ic7410_extcmds[] =
{
{ {.s = RIG_LEVEL_VOXDELAY}, CMD_PARAM_TYPE_LEVEL, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 1, {0x75 }, CMD_DAT_INT, 1 },
+ { {.s = RIG_PARM_KEYERTYPE}, CMD_PARAM_TYPE_PARM, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x00, 0x75}, CMD_DAT_INT, 1 },
{ {0} }
};
@@ -157,6 +158,7 @@ const struct rig_caps ic7410_caps =
.parm_gran = {
[PARM_BACKLIGHT] = {.min = {.f = 0.0f}, .max = {.f = 1.0f}, .step = {.f = 1.0f / 255.0f}},
[PARM_ANN] = {.min = {.i = 0}, .max = {.i = 2}, .step = {.i = 1}},
+ [PARM_KEYERTYPE] = {.step = {.s = "STRAIGHT, BUG, PADDLE"}},
},
.ctcss_list = common_ctcss_list,
diff --git a/rigs/icom/ic7600.c b/rigs/icom/ic7600.c
index fc0ba365f..97b8c4139 100644
--- a/rigs/icom/ic7600.c
+++ b/rigs/icom/ic7600.c
@@ -133,6 +133,7 @@ struct cmdparams ic7600_extcmds[] =
{ {.s = RIG_PARM_BACKLIGHT}, CMD_PARAM_TYPE_PARM, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x00, 0x38}, CMD_DAT_LVL, 2 },
{ {.s = RIG_PARM_TIME}, CMD_PARAM_TYPE_PARM, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x00, 0x54}, CMD_DAT_TIM, 2 },
{ {.s = RIG_LEVEL_VOXDELAY}, CMD_PARAM_TYPE_LEVEL, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x67}, CMD_DAT_INT, 1 },
+ { {.s = RIG_PARM_KEYERTYPE}, CMD_PARAM_TYPE_PARM, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x37}, CMD_DAT_INT, 1 },
{ { 0 } }
};
@@ -315,6 +316,7 @@ struct rig_caps ic7600_caps =
[PARM_TIME] = {.min = {.i = 0}, .max = {.i = 86399}, .step = {.i = 1}},
[PARM_ANN] = {.min = {.i = 0}, .max = {.i = 2}, .step = {.i = 1}},
[PARM_APO] = { .min = { .i = 1 }, .max = { .i = 1439} },
+ [PARM_KEYERTYPE] = {.step = {.s = "STRAIGHT, BUG, PADDLE"}},
},
.ext_tokens = ic7600_ext_tokens,
diff --git a/rigs/icom/ic7610.c b/rigs/icom/ic7610.c
index 77dee9d20..4c8cfa6bd 100644
--- a/rigs/icom/ic7610.c
+++ b/rigs/icom/ic7610.c
@@ -137,6 +137,7 @@ struct cmdparams ic7610_extcmds[] =
{ {.s = RIG_FUNC_TRANSCEIVE}, CMD_PARAM_TYPE_FUNC, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x12}, CMD_DAT_BOL, 1 },
{ {.s = RIG_LEVEL_SPECTRUM_AVG}, CMD_PARAM_TYPE_LEVEL, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x70}, CMD_DAT_INT, 1 },
{ {.s = RIG_LEVEL_USB_AF}, CMD_PARAM_TYPE_LEVEL, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x00, 0x82}, CMD_DAT_LVL, 2 },
+ { {.s = RIG_PARM_KEYERTYPE}, CMD_PARAM_TYPE_PARM, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x02, 0x31}, CMD_DAT_INT, 1 },
{ { 0 } }
};
@@ -398,6 +399,7 @@ struct rig_caps ic7610_caps =
[PARM_BEEP] = {.min = {.i = 0}, .max = {.i = 1}, .step = {.i = 1}},
[PARM_TIME] = {.min = {.i = 0}, .max = {.i = 86399}, .step = {.i = 1}},
[PARM_ANN] = {.min = {.i = 0}, .max = {.i = 2}, .step = {.i = 1}},
+ [PARM_KEYERTYPE] = {.step = {.s = "STRAIGHT, BUG, PADDLE"}},
},
.ext_tokens = ic7610_ext_tokens,
diff --git a/rigs/icom/ic785x.c b/rigs/icom/ic785x.c
index 93f587faf..ec814a0be 100644
--- a/rigs/icom/ic785x.c
+++ b/rigs/icom/ic785x.c
@@ -42,7 +42,7 @@
#define IC785x_LEVELS (RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_AGC|RIG_LEVEL_COMP|RIG_LEVEL_BKINDL|RIG_LEVEL_BALANCE|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_APF|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|RIG_LEVEL_SPECTRUM_ATT|RIG_LEVEL_AGC_TIME)
#define IC785x_VFOS (RIG_VFO_MAIN|RIG_VFO_SUB|RIG_VFO_MEM)
-#define IC785x_PARMS (RIG_PARM_ANN|RIG_PARM_BACKLIGHT|RIG_PARM_TIME|RIG_PARM_BEEP)
+#define IC785x_PARMS (RIG_PARM_ANN|RIG_PARM_BACKLIGHT|RIG_PARM_TIME|RIG_PARM_BEEP|RIG_PARM_KEYERTYPE)
#define IC785x_VFO_OPS (RIG_OP_CPY|RIG_OP_XCHG|RIG_OP_FROM_VFO|RIG_OP_TO_VFO|RIG_OP_MCL|RIG_OP_TUNE)
#define IC785x_SCAN_OPS (RIG_SCAN_MEM|RIG_SCAN_VFO|RIG_SCAN_PROG|RIG_SCAN_DELTA|RIG_SCAN_PRIO)
@@ -128,6 +128,7 @@ struct cmdparams ic785x_extcmds[] =
{ {.s = RIG_FUNC_TRANSCEIVE}, CMD_PARAM_TYPE_FUNC, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x55}, CMD_DAT_BOL, 1 },
{ {.s = RIG_LEVEL_SPECTRUM_AVG}, CMD_PARAM_TYPE_LEVEL, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x87}, CMD_DAT_INT, 1 },
{ {.s = RIG_LEVEL_USB_AF}, CMD_PARAM_TYPE_LEVEL, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x00, 0x52}, CMD_DAT_LVL, 2 },
+ { {.s = RIG_PARM_KEYERTYPE}, CMD_PARAM_TYPE_PARM, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x02, 0x54}, CMD_DAT_INT, 1 },
{ { 0 } }
};
@@ -282,6 +283,7 @@ const struct rig_caps ic785x_caps =
[PARM_BEEP] = {.min = {.i = 0}, .max = {.i = 1}, .step = {.i = 1}},
[PARM_TIME] = {.min = {.i = 0}, .max = {.i = 86399}, .step = {.i = 1}},
[PARM_ANN] = {.min = {.i = 0}, .max = {.i = 2}, .step = {.i = 1}},
+ [PARM_KEYERTYPE] = {.step = {.s = "STRAIGHT, BUG, PADDLE"}},
},
.ext_tokens = ic785x_ext_tokens,
diff --git a/rigs/icom/ic9100.c b/rigs/icom/ic9100.c
index 15cc1a03c..2a8ef9dcc 100644
--- a/rigs/icom/ic9100.c
+++ b/rigs/icom/ic9100.c
@@ -89,6 +89,7 @@
struct cmdparams ic9100_extcmds[] =
{
{ {.s = RIG_LEVEL_VOXDELAY}, CMD_PARAM_TYPE_LEVEL, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x27}, CMD_DAT_INT, 1 },
+ { {.s = RIG_PARM_KEYERTYPE}, CMD_PARAM_TYPE_PARM, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x02}, CMD_DAT_INT, 1 },
{ {.s = RIG_PARM_NONE} }
};
@@ -142,6 +143,7 @@ const struct rig_caps ic9100_caps =
[PARM_BACKLIGHT] = {.min = {.f = 0.0f}, .max = {.f = 1.0f}, .step = {.f = 1.0f / 255.0f}},
[PARM_BANDSELECT] = {.step = {.s = "BANDUNUSED,BAND160M,BAND80M,BAND40M,BAND30M,BAND20M,BAND17M,BAND15M,BAND12M,BAND10M,BAND6M,BANDGEN"}},
[PARM_ANN] = {.min = {.i = 0}, .max = {.i = 2}, .step = {.i = 1}},
+ [PARM_KEYERTYPE] = {.step = {.s = "STRAIGHT, BUG, PADDLE"}},
},
.ctcss_list = common_ctcss_list,
diff --git a/tests/rigctl_parse.c b/tests/rigctl_parse.c
index 2ba99cb1e..49f5ab9ed 100644
--- a/tests/rigctl_parse.c
+++ b/tests/rigctl_parse.c
@@ -3734,7 +3734,14 @@ declare_proto_rig(get_parm)
fprintf(fout, "%s: ", cmd->arg2);
}
- if (RIG_PARM_IS_FLOAT(parm))
+ if (parm == RIG_PARM_KEYERTYPE)
+ {
+ char *s = "STRAIGHT";
+ if (val.i == 1) s = "BUG";
+ else if (val.i == 2) s = "PADDLE";
+ fprintf(fout, "%s%cv", s, resp_sep);
+ }
+ else if (RIG_PARM_IS_FLOAT(parm))
{
rig_debug(RIG_DEBUG_ERR, "%s: float\n", __func__);
fprintf(fout, "%f%c", val.f, resp_sep);
commit 147dea76514d072598197d44eb6ce29ad997214d
Author: Mike Black W9MDB <mdb...@ya...>
Date: Thu Aug 17 22:57:11 2023 -0500
Remove get_dsp_flt for G90 as it does not have that command
diff --git a/rigs/icom/icom.c b/rigs/icom/icom.c
index b1a1ca83a..daecdbf03 100644
--- a/rigs/icom/icom.c
+++ b/rigs/icom/icom.c
@@ -2761,7 +2761,12 @@ int icom_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
rig_set_vfo(rig, vfo); // force VFO
}
- retval = icom_get_dsp_flt(rig, *mode);
+ retval = 0;
+ // G90 does have dsp_flt command
+ if (rig->caps->rig_model != RIG_MODEL_G90)
+ {
+ retval = icom_get_dsp_flt(rig, *mode);
+ }
*width = retval;
if (retval == 0)
@@ -2784,7 +2789,12 @@ int icom_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
// we need to figure out how to read VFOB without swapping VFOs
//HAMLIB_TRACE;
//rig_set_vfo(rig, RIG_VFO_B);
- retval = icom_get_dsp_flt(rig, *mode);
+ retval = 0;
+
+ if (rig->caps->rig_model != RIG_MODEL_G90)
+ {
+ retval = icom_get_dsp_flt(rig, *mode);
+ }
*width = retval;
if (*width == 0) { *width = rig->state.cache.widthMainA; } // we'll use VFOA's width
commit ccd6472f031aec1f38f4ae4453be602712b8e71d
Author: Mike Black W9MDB <mdb...@ya...>
Date: Thu Aug 17 22:49:20 2023 -0500
Fix KEYERTYPE in ic7300.c and add parsing of STRAIGHT, BUG, PADDLE for rigctl(d)
https://xiegu.eu/downloads/
diff --git a/doc/man1/rigctl.1 b/doc/man1/rigctl.1
index e8d0efafc..584bc43c7 100644
--- a/doc/man1/rigctl.1
+++ b/doc/man1/rigctl.1
@@ -1022,7 +1022,7 @@ and
.RI \(aq "Parm Value" \(aq.
.IP
Parm is a token: \(oqANN\(cq, \(oqAPO\(cq, \(oqBACKLIGHT\(cq, \(oqBEEP\(cq,
-\(oqTIME\(cq, \(oqBAT\(cq, \(oqKEYLIGHT\(cq, \(oqSCREENSAVER\(cq, \(oqAFIF\(cq, \(oqBANDSELECT\(cq.
+\(oqTIME\(cq, \(oqBAT\(cq, \(oqKEYLIGHT\(cq, \(oqSCREENSAVER\(cq, \(oqAFIF\(cq, \(oqBANDSELECT\(cq, \(oqKEYERTYPE\(cq.
.IP
.BR Note :
Passing a \(oq?\(cq (query) as the first argument instead of a Parm token will
@@ -1039,6 +1039,7 @@ Use this to determine the supported parameters of a given radio backend.
SCREENSAVER -- rig specific timeouts
AFIF -- 0=AF audio, 1=IF audio -- see IC-7300/9700/705
BANDSELECT -- band name, e.g. BAND160M, BAND80M.... a ? instead of band will show band possibilities
+ KEYERTYPE -- Icom keyer type 0,1,2 or STRAIGHT,BUG,PADDLE
.
.TP
diff --git a/doc/man1/rigctld.1 b/doc/man1/rigctld.1
index 9913ea1f4..190556d16 100644
--- a/doc/man1/rigctld.1
+++ b/doc/man1/rigctld.1
@@ -922,7 +922,7 @@ and
.RI \(aq "Parm Value" \(aq.
.IP
Parm is a token: \(oqANN\(cq, \(oqAPO\(cq, \(oqBACKLIGHT\(cq, \(oqBEEP\(cq,
-\(oqTIME\(cq, \(oqBAT\(cq, \(oqKEYLIGHT\(cq, \(oqBANDSELECT\(cq.
+\(oqTIME\(cq, \(oqBAT\(cq, \(oqKEYLIGHT\(cq, \(oqBANDSELECT\(cq, \(oqKEYERTYPE\(cq.
.IP
.BR Note :
Passing a \(oq?\(cq (query) as the first argument instead of a Parm token will
diff --git a/rigs/icom/ic7300.c b/rigs/icom/ic7300.c
index 66efe1085..76e74c46c 100644
--- a/rigs/icom/ic7300.c
+++ b/rigs/icom/ic7300.c
@@ -234,7 +234,7 @@ struct cmdparams ic7300_extcmds[] =
{ {.s = RIG_LEVEL_SPECTRUM_AVG}, CMD_PARAM_TYPE_LEVEL, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x02}, CMD_DAT_INT, 1 },
{ {.s = RIG_LEVEL_USB_AF}, CMD_PARAM_TYPE_LEVEL, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x00, 0x60}, CMD_DAT_LVL, 2 },
{ {.s = RIG_PARM_BANDSELECT}, CMD_PARAM_TYPE_PARM, C_CTL_MEM, S_MEM_BAND_REG, SC_MOD_RW, 0, {0x00}, CMD_DAT_INT, 1 },
- { {.s = RIG_PARM_KEYERTYPE}, CMD_PARAM_TYPE_PARM, C_CTL_MEM, S_MEM_BAND_REG, SC_MOD_RW, 2, {0x01, 0x64}, CMD_DAT_INT, 1 },
+ { {.s = RIG_PARM_KEYERTYPE}, CMD_PARAM_TYPE_PARM, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x64}, CMD_DAT_INT, 1 },
{ {.s = RIG_PARM_NONE} }
};
@@ -250,7 +250,7 @@ struct cmdparams ic9700_extcmds[] =
{ {.s = RIG_FUNC_TRANSCEIVE}, CMD_PARAM_TYPE_FUNC, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x27}, CMD_DAT_BOL, 1 },
{ {.s = RIG_LEVEL_SPECTRUM_AVG}, CMD_PARAM_TYPE_LEVEL, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x92}, CMD_DAT_INT, 1 },
{ {.s = RIG_LEVEL_USB_AF}, CMD_PARAM_TYPE_LEVEL, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x06}, CMD_DAT_LVL, 2 },
- { {.s = RIG_PARM_KEYERTYPE}, CMD_PARAM_TYPE_PARM, C_CTL_MEM, S_MEM_BAND_REG, SC_MOD_RW, 2, {0x02, 0x27}, CMD_DAT_INT, 1 },
+ { {.s = RIG_PARM_KEYERTYPE}, CMD_PARAM_TYPE_PARM, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x02, 0x27}, CMD_DAT_INT, 1 },
{ {.s = RIG_PARM_NONE} }
};
@@ -266,7 +266,7 @@ struct cmdparams ic705_extcmds[] =
{ {.s = RIG_FUNC_TRANSCEIVE}, CMD_PARAM_TYPE_FUNC, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x31}, CMD_DAT_BOL, 1 },
{ {.s = RIG_LEVEL_SPECTRUM_AVG}, CMD_PARAM_TYPE_LEVEL, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x78}, CMD_DAT_INT, 1 },
{ {.s = RIG_LEVEL_USB_AF}, CMD_PARAM_TYPE_LEVEL, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x13}, CMD_DAT_LVL, 2 },
- { {.s = RIG_PARM_KEYERTYPE}, CMD_PARAM_TYPE_PARM, C_CTL_MEM, S_MEM_BAND_REG, SC_MOD_RW, 2, {0x02, 0x55}, CMD_DAT_INT, 1 },
+ { {.s = RIG_PARM_KEYERTYPE}, CMD_PARAM_TYPE_PARM, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x02, 0x55}, CMD_DAT_INT, 1 },
{ {.s = RIG_PARM_NONE} }
};
diff --git a/tests/rigctl_parse.c b/tests/rigctl_parse.c
index e446ad700..2ba99cb1e 100644
--- a/tests/rigctl_parse.c
+++ b/tests/rigctl_parse.c
@@ -3562,6 +3562,13 @@ declare_proto_rig(set_parm)
else RETURNFUNC2(-RIG_EINTERNAL);
}
+ if (strcmp(arg1,"KEYERTYPE")==0 && strcmp(arg2,"?") != 0)
+ {
+ if (strcmp(arg2,"STRAIGHT")==0) arg2 = "0";
+ else if (strcmp(arg2,"BUG")==0) arg2 = "1";
+ else if (strcmp(arg2,"PADDLE")==0) arg2 = "2";
+ }
+
parm = rig_parse_parm(arg1);
if (!rig_has_set_parm(rig, parm))
commit 8c63fdeafc3c0011202a692cc29c64151df4d1b9
Author: Mike Black W9MDB <mdb...@ya...>
Date: Thu Aug 17 17:52:03 2023 -0500
Add KEYERTYPE for IC-7300, IC-705, IC-9700
https://github.com/Hamlib/Hamlib/issues/1363
diff --git a/include/hamlib/rig.h b/include/hamlib/rig.h
index 374735446..b8a065797 100644
--- a/include/hamlib/rig.h
+++ b/include/hamlib/rig.h
@@ -1118,7 +1118,14 @@ enum rig_parm_e {
RIG_PARM_KEYLIGHT = (1 << 7), /*!< \c KEYLIGHT -- Button backlight, on/off */
RIG_PARM_SCREENSAVER = (1 << 8), /*!< \c SCREENSAVER -- rig specific timeouts */
RIG_PARM_AFIF = (1 << 9), /*!< \c AFIF -- 0=AF audio, 1=IF audio -- see IC-7300/9700/705 */
- RIG_PARM_BANDSELECT = (1 << 10) /*!< \c BANDSELECT -- e.g. BAND160M, BAND80M, BAND70CM, BAND2CM */
+ RIG_PARM_BANDSELECT = (1 << 10), /*!< \c BANDSELECT -- e.g. BAND160M, BAND80M, BAND70CM, BAND2CM */
+ RIG_PARM_KEYERTYPE = (1 << 11) /*!< \c KEYERTYPE -- 0,1,2 or STRAIGHT PADDLE BUG */
+};
+
+enum rig_keyertype_e {
+ RIG_KEYERTYPE_STRAIGHT = 0,
+ RIG_KEYERTYPE_BUG = (1 << 0),
+ RIG_KEYERTYPE_PADDLE = (2 << 0)
};
/**
diff --git a/rigs/icom/ic7300.c b/rigs/icom/ic7300.c
index 879bed0c9..66efe1085 100644
--- a/rigs/icom/ic7300.c
+++ b/rigs/icom/ic7300.c
@@ -59,7 +59,7 @@ int ic9700_set_vfo(RIG *rig, vfo_t vfo);
#define IC7300_VFOS (RIG_VFO_A|RIG_VFO_B|RIG_VFO_MEM)
// RIG_PARM_BANDSELECT disabled until Icom can describe the return from 0x1a 0x01
//#define IC7300_PARMS (RIG_PARM_ANN|RIG_PARM_BACKLIGHT|RIG_PARM_TIME|RIG_PARM_BEEP|RIG_PARM_BANDSELECT)
-#define IC7300_PARMS (RIG_PARM_ANN|RIG_PARM_BACKLIGHT|RIG_PARM_SCREENSAVER|RIG_PARM_TIME|RIG_PARM_BEEP)
+#define IC7300_PARMS (RIG_PARM_ANN|RIG_PARM_BACKLIGHT|RIG_PARM_SCREENSAVER|RIG_PARM_TIME|RIG_PARM_BEEP|RIG_PARM_KEYERTYPE)
#define IC7300_VFO_OPS (RIG_OP_CPY|RIG_OP_XCHG|RIG_OP_FROM_VFO|RIG_OP_TO_VFO|RIG_OP_MCL|RIG_OP_TUNE)
#define IC7300_SCAN_OPS (RIG_SCAN_STOP|RIG_SCAN_MEM|RIG_SCAN_PROG|RIG_SCAN_SLCT)
@@ -149,7 +149,7 @@ int ic9700_set_vfo(RIG *rig, vfo_t vfo);
#define IC9700_VFOS (RIG_VFO_A|RIG_VFO_B|RIG_VFO_MAIN|RIG_VFO_SUB|RIG_VFO_MEM|RIG_VFO_MAIN_A|RIG_VFO_MAIN_B|RIG_VFO_SUB_A|RIG_VFO_SUB_B)
// RIG_PARM_BANDSELECT disabled until Icom can describe the return from 0x1a 0x01
//#define IC9700_PARMS (RIG_PARM_ANN|RIG_PARM_BACKLIGHT|RIG_PARM_TIME|RIG_PARM_BEEP|RIG_PARM_SCREENSAVER|RIG_PARM_BANDSELECT)
-#define IC9700_PARMS (RIG_PARM_ANN|RIG_PARM_BACKLIGHT|RIG_PARM_TIME|RIG_PARM_BEEP|RIG_PARM_SCREENSAVER)
+#define IC9700_PARMS (RIG_PARM_ANN|RIG_PARM_BACKLIGHT|RIG_PARM_TIME|RIG_PARM_BEEP|RIG_PARM_SCREENSAVER|RIG_PARM_KEYERTYPE)
#define IC9700_FUNCS (RIG_FUNC_NB|RIG_FUNC_COMP|RIG_FUNC_VOX|RIG_FUNC_TONE|RIG_FUNC_TSQL|RIG_FUNC_SBKIN|RIG_FUNC_FBKIN|RIG_FUNC_NR|RIG_FUNC_MON|RIG_FUNC_MN|RIG_FUNC_ANF|RIG_FUNC_LOCK|RIG_FUNC_RIT|RIG_FUNC_SCOPE|RIG_FUNC_SATMODE|RIG_FUNC_DUAL_WATCH|RIG_FUNC_AFC|RIG_FUNC_TRANSCEIVE|RIG_FUNC_SPECTRUM|RIG_FUNC_SPECTRUM_HOLD|RIG_FUNC_SEND_MORSE|RIG_FUNC_SEND_VOICE_MEM|RIG_FUNC_OVF_STATUS)
#define IC9700_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|RIG_LEVEL_USB_AF|RIG_LEVEL_AGC_TIME)
#define IC9700_VFO_OPS (RIG_OP_CPY|RIG_OP_XCHG|RIG_OP_FROM_VFO|RIG_OP_TO_VFO|RIG_OP_MCL)
@@ -234,6 +234,7 @@ struct cmdparams ic7300_extcmds[] =
{ {.s = RIG_LEVEL_SPECTRUM_AVG}, CMD_PARAM_TYPE_LEVEL, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x02}, CMD_DAT_INT, 1 },
{ {.s = RIG_LEVEL_USB_AF}, CMD_PARAM_TYPE_LEVEL, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x00, 0x60}, CMD_DAT_LVL, 2 },
{ {.s = RIG_PARM_BANDSELECT}, CMD_PARAM_TYPE_PARM, C_CTL_MEM, S_MEM_BAND_REG, SC_MOD_RW, 0, {0x00}, CMD_DAT_INT, 1 },
+ { {.s = RIG_PARM_KEYERTYPE}, CMD_PARAM_TYPE_PARM, C_CTL_MEM, S_MEM_BAND_REG, SC_MOD_RW, 2, {0x01, 0x64}, CMD_DAT_INT, 1 },
{ {.s = RIG_PARM_NONE} }
};
@@ -249,6 +250,7 @@ struct cmdparams ic9700_extcmds[] =
{ {.s = RIG_FUNC_TRANSCEIVE}, CMD_PARAM_TYPE_FUNC, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x27}, CMD_DAT_BOL, 1 },
{ {.s = RIG_LEVEL_SPECTRUM_AVG}, CMD_PARAM_TYPE_LEVEL, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x92}, CMD_DAT_INT, 1 },
{ {.s = RIG_LEVEL_USB_AF}, CMD_PARAM_TYPE_LEVEL, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x06}, CMD_DAT_LVL, 2 },
+ { {.s = RIG_PARM_KEYERTYPE}, CMD_PARAM_TYPE_PARM, C_CTL_MEM, S_MEM_BAND_REG, SC_MOD_RW, 2, {0x02, 0x27}, CMD_DAT_INT, 1 },
{ {.s = RIG_PARM_NONE} }
};
@@ -264,6 +266,7 @@ struct cmdparams ic705_extcmds[] =
{ {.s = RIG_FUNC_TRANSCEIVE}, CMD_PARAM_TYPE_FUNC, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x31}, CMD_DAT_BOL, 1 },
{ {.s = RIG_LEVEL_SPECTRUM_AVG}, CMD_PARAM_TYPE_LEVEL, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x78}, CMD_DAT_INT, 1 },
{ {.s = RIG_LEVEL_USB_AF}, CMD_PARAM_TYPE_LEVEL, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x13}, CMD_DAT_LVL, 2 },
+ { {.s = RIG_PARM_KEYERTYPE}, CMD_PARAM_TYPE_PARM, C_CTL_MEM, S_MEM_BAND_REG, SC_MOD_RW, 2, {0x02, 0x55}, CMD_DAT_INT, 1 },
{ {.s = RIG_PARM_NONE} }
};
@@ -724,6 +727,7 @@ const struct rig_caps ic7300_caps =
[PARM_BEEP] = {.min = {.i = 0}, .max = {.i = 1}, .step = {.i = 1}},
[PARM_SCREENSAVER] = {.min = {.i = 0}, .max = {.i = 3}, .step = {.i = 1}},
[PARM_TIME] = {.min = {.i = 0}, .max = {.i = 86399}, .step = {.i = 1}},
+ [PARM_KEYERTYPE] = {.min = {.i = 0}, .max = {.i = 2}, .step = {.i = 1}},
},
.ext_tokens = ic7300_ext_tokens,
.extlevels = icom_ext_levels,
@@ -964,7 +968,8 @@ struct rig_caps ic9700_caps =
[PARM_BACKLIGHT] = {.min = {.f = 0.0f}, .max = {.f = 1.0f}, .step = {.f = 1.0f / 255.0f}},
[PARM_BANDSELECT] = {.step = {.s = "BANDUNUSED,BAND70CM,BAND33CM,BAND23CM"}},
[PARM_BEEP] = {.min = {.i = 0}, .max = {.i = 1}},
- [PARM_SCREENSAVER] = {.min = {.i = 0}, .max = {.i = 3}, .step = {.i = 1}}
+ [PARM_SCREENSAVER] = {.min = {.i = 0}, .max = {.i = 3}, .step = {.i = 1}},
+ [PARM_KEYERTYPE] = {.min = {.i = 0}, .max = {.i = 2}, .step = {.i = 1}},
},
.ext_tokens = ic9700_ext_tokens,
.extlevels = icom_ext_levels,
@@ -1556,6 +1561,7 @@ const struct rig_caps ic905_caps =
[PARM_BANDSELECT] = {.step = {.s = "BANDUNUSED,BAND70CM,BAND33CM,BAND23CM,BAND23CM,BAND13CM,BAND3CM"}},
[PARM_BEEP] = {.min = {.i = 0}, .max = {.i = 1}},
[PARM_SCREENSAVER] = {.min = {.i = 0}, .max = {.i = 3}, .step = {.i = 1}},
+ [PARM_KEYERTYPE] = {.min = {.i = 0}, .max = {.i = 2}, .step = {.i = 1}},
},
.ext_tokens = ic705_ext_tokens,
.extlevels = icom_ext_levels,
diff --git a/src/idx_builtin.h b/src/idx_builtin.h
index c0fafe62d..4a607189c 100644
--- a/src/idx_builtin.h
+++ b/src/idx_builtin.h
@@ -189,6 +189,7 @@
#define PARM_KEYLIGHT setting2idx_builtin(RIG_PARM_KEYLIGHT)
#define PARM_BANDSELECT setting2idx_builtin(RIG_PARM_BANDSELECT)
#define PARM_SCREENSAVER setting2idx_builtin(RIG_PARM_SCREENSAVER)
+#define PARM_KEYERTYPE setting2idx_builtin(RIG_PARM_KEYERTYPE)
/* Rotator levels */
diff --git a/src/misc.c b/src/misc.c
index eff013560..c4304f89b 100644
--- a/src/misc.c
+++ b/src/misc.c
@@ -1270,6 +1270,7 @@ static const struct
{ RIG_PARM_KEYLIGHT, "KEYLIGHT"},
{ RIG_PARM_SCREENSAVER, "SCREENSAVER"},
{ RIG_PARM_BANDSELECT, "BANDSELECT"},
+ { RIG_PARM_KEYERTYPE, "KEYERTYPE"},
{ RIG_PARM_NONE, "" },
};
commit aa338afa1ad2a70e2e06507f092e478c1b47cd9c
Author: Mike Black W9MDB <mdb...@ya...>
Date: Thu Aug 17 17:12:33 2023 -0500
Fix parm_gran for Kenwood
https://github.com/Hamlib/Hamlib/issues/1357
diff --git a/rigs/kenwood/r5000.c b/rigs/kenwood/r5000.c
index d9be871c8..b9041db2c 100644
--- a/rigs/kenwood/r5000.c
+++ b/rigs/kenwood/r5000.c
@@ -82,7 +82,10 @@ const struct rig_caps r5000_caps =
.has_set_level = RIG_LEVEL_SET(R5000_LEVEL_ALL),
.has_get_parm = R5000_PARM_ALL,
.has_set_parm = RIG_PARM_SET(R5000_PARM_ALL),
- .parm_gran = {},
+ .parm_gran = {
+ [PARM_TIME] = {.min = {.i = 0}, .max = {.i = 86399}, .step = {.i = 1}},
+ },
+
.ctcss_list = NULL,
.dcs_list = NULL,
.preamp = { RIG_DBLST_END, },
diff --git a/rigs/kenwood/thd7.c b/rigs/kenwood/thd7.c
index fbd871ad1..4a6cb48ba 100644
--- a/rigs/kenwood/thd7.c
+++ b/rigs/kenwood/thd7.c
@@ -110,7 +110,9 @@ const struct rig_caps thd7a_caps =
{
#include "level_gran_kenwood.h"
},
- .parm_gran = {},
+ .parm_gran = {
+ [PARM_BACKLIGHT] = {.min = {.f = 0.0f}, .max = {.f = 1.0f}, .step = {.f = 1.0f / 255.0f}},
+ },
.ctcss_list = kenwood38_ctcss_list,
.dcs_list = NULL,
.preamp = { RIG_DBLST_END, },
diff --git a/rigs/kenwood/thd72.c b/rigs/kenwood/thd72.c
index 9ee9f3280..b939b26d1 100644
--- a/rigs/kenwood/thd72.c
+++ b/rigs/kenwood/thd72.c
@@ -1651,7 +1651,10 @@ const struct rig_caps thd72a_caps =
{
#include "level_gran_kenwood.h"
},
- .parm_gran = {},
+ .parm_gran = {
+ [PARM_TIME] = {.min = {.i = 0}, .max = {.i = 86399}, .step = {.i = 1}},
+ [PARM_APO] = { .min = { .i = 1 }, .max = { .i = 1439} },
+ },
.ctcss_list = kenwood42_ctcss_list,
.dcs_list = thd72dcs_list,
.preamp = { RIG_DBLST_END, },
diff --git a/rigs/kenwood/thd74.c b/rigs/kenwood/thd74.c
index 07ba4660a..a46a892aa 100644
--- a/rigs/kenwood/thd74.c
+++ b/rigs/kenwood/thd74.c
@@ -1677,7 +1677,12 @@ const struct rig_caps thd74_caps =
{
#include "level_gran_kenwood.h"
},
- .parm_gran = {},
+ .parm_gran = {
+ [PARM_TIME] = {.min = {.i = 0}, .max = {.i = 86399}, .step = {.i = 1}},
+ },
+
+
+
.ctcss_list = kenwood38_ctcss_list,
.dcs_list = NULL,
.preamp = { RIG_DBLST_END, },
commit 63bb03cb07809fb8ee865a65351317e353d11085
Author: Mike Black W9MDB <mdb...@ya...>
Date: Thu Aug 17 16:57:05 2023 -0500
Fix Yaesu gran_parm
https://github.com/Hamlib/Hamlib/issues/1357
diff --git a/rigs/yaesu/frg100.c b/rigs/yaesu/frg100.c
index 2dc155cec..975cd097d 100644
--- a/rigs/yaesu/frg100.c
+++ b/rigs/yaesu/frg100.c
@@ -174,7 +174,7 @@ const struct rig_caps frg100_caps =
.has_get_level = RIG_LEVEL_RAWSTR,
.has_set_level = RIG_LEVEL_BAND_SELECT,
.has_get_parm = RIG_PARM_NONE,
- .has_set_parm = RIG_PARM_BACKLIGHT,
+ .has_set_parm = RIG_PARM_NONE,
.level_gran =
{
#include "level_gran_yaesu.h"
diff --git a/rigs/yaesu/ft1000d.c b/rigs/yaesu/ft1000d.c
index 8891d62df..9cd013f6a 100644
--- a/rigs/yaesu/ft1000d.c
+++ b/rigs/yaesu/ft1000d.c
@@ -296,6 +296,9 @@ const struct rig_caps ft1000d_caps =
{
#include "level_gran_yaesu.h"
},
+ .parm_gran = {
+ [PARM_BACKLIGHT] = {.min = {.f = 0.0f}, .max = {.f = 1.0f}, .step = {.f = 1.0f / 13.0f}},
+ },
.ctcss_list = NULL,
.dcs_list = NULL,
.preamp = { RIG_DBLST_END, },
diff --git a/rigs/yaesu/ft990.c b/rigs/yaesu/ft990.c
index 8d059cb7e..5a2c9c5ce 100755
--- a/rigs/yaesu/ft990.c
+++ b/rigs/yaesu/ft990.c
@@ -263,6 +263,10 @@ const struct rig_caps ft990_caps =
{
#include "level_gran_yaesu.h"
},
+ .parm_gran = {
+ [PARM_BACKLIGHT] = {.min = {.f = 0.0f}, .max = {.f = 1.0f}, .step = {.f = 1.0f / 255.0f}},
+ },
+
.ctcss_list = NULL,
.dcs_list = NULL,
.preamp = { RIG_DBLST_END, },
diff --git a/rigs/yaesu/ft990v12.c b/rigs/yaesu/ft990v12.c
index b7f9f0656..eb445fad2 100644
--- a/rigs/yaesu/ft990v12.c
+++ b/rigs/yaesu/ft990v12.c
@@ -278,6 +278,10 @@ const struct rig_caps ft990uni_caps =
.has_set_level = RIG_LEVEL_BAND_SELECT,
.has_get_parm = RIG_PARM_NONE,
.has_set_parm = RIG_PARM_BACKLIGHT,
+ .parm_gran = {
+ [PARM_BACKLIGHT] = {.min = {.f = 0.0f}, .max = {.f = 1.0f}, .step = {.f = 1.0f / 13.0f}},
+ },
+
.ctcss_list = NULL,
.dcs_list = NULL,
.preamp = { RIG_DBLST_END, },
commit e88715240774db70a4e41d872cf4aa5f17e5b8a9
Author: Mike Black W9MDB <mdb...@ya...>
Date: Thu Aug 17 16:04:45 2023 -0500
Fix parm_gran
https://github.com/Hamlib/Hamlib/issues/1357
diff --git a/include/hamlib/rig.h b/include/hamlib/rig.h
index 09a563638..374735446 100644
--- a/include/hamlib/rig.h
+++ b/include/hamlib/rig.h
@@ -1146,7 +1146,7 @@ enum multicast_item_e {
};
//! @cond Doxygen_Suppress
-#define RIG_PARM_FLOAT_LIST (RIG_PARM_BACKLIGHT|RIG_PARM_BAT|RIG_PARM_KEYLIGHT)
+#define RIG_PARM_FLOAT_LIST (RIG_PARM_BACKLIGHT|RIG_PARM_BAT|RIG_PARM_KEYLIGHT|RIG_PARM_BACKLIGHT)
#define RIG_PARM_STRING_LIST (RIG_PARM_BANDSELECT)
#define RIG_PARM_READONLY_LIST (RIG_PARM_BAT)
diff --git a/rigs/icom/ic7000.c b/rigs/icom/ic7000.c
index f6aaefdf2..f8e0d0546 100644
--- a/rigs/icom/ic7000.c
+++ b/rigs/icom/ic7000.c
@@ -137,6 +137,7 @@
struct cmdparams ic7000_extcmds[] =
{
{ {.s = RIG_LEVEL_VOXDELAY}, CMD_PARAM_TYPE_LEVEL, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x17}, CMD_DAT_INT, 1 },
+ { {.s = RIG_PARM_TIME}, CMD_PARAM_TYPE_PARM, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x00, 0x41}, CMD_DAT_TIM, 2 },
{ {.s = RIG_PARM_NONE} }
};
@@ -226,7 +227,14 @@ const struct rig_caps ic7000_caps =
[LVL_KEYSPD] = { .min = { .i = 6 }, .max = { .i = 48 }, .step = { .i = 1 } },
[LVL_CWPITCH] = { .min = { .i = 300 }, .max = { .i = 900 }, .step = { .i = 1 } },
},
- .parm_gran = {},
+ .parm_gran = {
+ [PARM_BACKLIGHT] = {.min = {.f = 0.0f}, .max = {.f = 1.0f}, .step = {.f = 1.0f / 255.0f}},
+ [PARM_BEEP] = {.min = {.i = 0}, .max = {.i = 1}, .step = {.i = 1}},
+ [PARM_TIME] = {.min = {.i = 0}, .max = {.i = 86399}, .step = {.i = 1}},
+ [PARM_APO] = {.min = {.i = 0}, .max = {.i = 3}, .step = {.i = 1}},
+ [PARM_ANN] = {.min = {.i = 0}, .max = {.i = 2}, .step = {.i = 1}},
+ },
+
.ctcss_list = common_ctcss_list,
.dcs_list = common_dcs_list,
.preamp = { 10, RIG_DBLST_END, }, /* FIXME: TBC it's a guess */
@@ -345,8 +353,8 @@ const struct rig_caps ic7000_caps =
.get_level = icom_get_level,
.set_func = icom_set_func,
.get_func = icom_get_func,
- .set_parm = NULL,
- .get_parm = NULL,
+ .set_parm = icom_set_parm,
+ .get_parm = icom_get_parm,
.set_mem = icom_set_mem,
.set_bank = icom_set_bank,
.vfo_op = icom_vfo_op,
diff --git a/rigs/icom/ic7100.c b/rigs/icom/ic7100.c
index b33d44038..d626c6810 100644
--- a/rigs/icom/ic7100.c
+++ b/rigs/icom/ic7100.c
@@ -98,7 +98,9 @@
RIG_LEVEL_NB | \
RIG_LEVEL_AGC_TIME)
-#define IC7100_PARM_ALL (RIG_PARM_ANN|RIG_PARM_BACKLIGHT|RIG_PARM_KEYLIGHT|RIG_PARM_BEEP|RIG_PARM_TIME|RIG_PARM_BANDSELECT)
+//#define IC7100_PARM_ALL (RIG_PARM_ANN|RIG_PARM_BACKLIGHT|RIG_PARM_KEYLIGHT|RIG_PARM_BEEP|RIG_PARM_TIME|RIG_PARM_BANDSELECT)
+// BANDSELECT disabled unti we figure out Icom's ability
+#define IC7100_PARM_ALL (RIG_PARM_ANN|RIG_PARM_BACKLIGHT|RIG_PARM_KEYLIGHT|RIG_PARM_BEEP|RIG_PARM_TIME)
int ic7100_tokens[] = { TOK_DSTAR_CODE, TOK_DSTAR_DSQL, TOK_DSTAR_CALL_SIGN, TOK_DSTAR_MESSAGE,
TOK_DSTAR_STATUS, TOK_DSTAR_MY_CS, TOK_DSTAR_TX_CS, TOK_DSTAR_TX_MESS,
@@ -347,8 +349,16 @@ const struct rig_caps ic7100_caps =
.extfuncs = icom_ext_funcs,
.extparms = icom_ext_parms,
.parm_gran = {
- [PARM_BANDSELECT] = {.min = {.f = 0.0f}, .max = {.f = 1.0f}, .step = {.s = "BAND160M,BAND80M,BAND40M,BAND30M,BAND20M,BAND17M,BAND15M,BAND12M,BAND10M,BAND6M,BAND2M,BAND70CM,BANDGEN"}}
- },
+ [PARM_BACKLIGHT] = {.min = {.f = 0.0f}, .max = {.f = 1.0f}, .step = {.f = 1.0f / 255.0f}},
+ [PARM_KEYLIGHT] = {.min = {.f = 0.0f}, .max = {.f = 1.0f}, .step = {.f = 1.0f / 255.0f}},
+ [PARM_BANDSELECT] = {.step = {.s = "BANDUNUSED,BAND160M,BAND80M,BAND40M,BAND30M,BAND20M,BAND17M,BAND15M,BAND12M,BAND10M,BAND6M,BANDGEN"}},
+ [PARM_BEEP] = {.min = {.i = 0}, .max = {.i = 1}, .step = {.i = 1}},
+ [PARM_SCREENSAVER] = {.min = {.i = 0}, .max = {.i = 3}, .step = {.i = 1}},
+ [PARM_TIME] = {.min = {.i = 0}, .max = {.i = 86399}, .step = {.i = 1}},
+ [PARM_ANN] = {.min = {.i = 0}, .max = {.i = 2}, .step = {.i = 1}},
+ [PARM_APO] = { .min = { .i = 1 }, .max = { .i = 1439} },
+ },
+
.ctcss_list = common_ctcss_list,
.dcs_list = common_dcs_list,
.preamp = { 1, 2, RIG_DBLST_END, },
diff --git a/rigs/icom/ic7200.c b/rigs/icom/ic7200.c
index 9b964552a..01a451827 100644
--- a/rigs/icom/ic7200.c
+++ b/rigs/icom/ic7200.c
@@ -155,7 +155,15 @@ const struct rig_caps ic7200_caps =
[LVL_KEYSPD] = { .min = { .i = 6 }, .max = { .i = 48 }, .step = { .i = 1 } },
[LVL_CWPITCH] = { .min = { .i = 300 }, .max = { .i = 900 }, .step = { .i = 1 } },
},
- .parm_gran = {},
+ .parm_gran = {
+ [PARM_BACKLIGHT] = {.min = {.f = 0.0f}, .max = {.f = 1.0f}, .step = {.f = 1.0f / 255.0f}},
+ [PARM_BANDSELECT] = {.step = {.s = "BANDUNUSED,BAND160M,BAND80M,BAND40M,BAND30M,BAND20M,BAND17M,BAND15M,BAND12M,BAND10M,BAND6M,BANDGEN"}},
+ [PARM_BEEP] = {.min = {.i = 0}, .max = {.i = 1}, .step = {.i = 1}},
+ [PARM_TIME] = {.min = {.i = 0}, .max = {.i = 86399}, .step = {.i = 1}},
+ [PARM_ANN] = {.min = {.i = 0}, .max = {.i = 2}, .step = {.i = 1}},
+ [PARM_APO] = { .min = { .i = 1 }, .max = { .i = 1439} },
+ },
+
.ctcss_list = NULL,
.dcs_list = NULL,
.preamp = { 10, RIG_DBLST_END, }, /* FIXME: TBC it's a guess */
diff --git a/rigs/icom/ic7300.c b/rigs/icom/ic7300.c
index ba92742e2..879bed0c9 100644
--- a/rigs/icom/ic7300.c
+++ b/rigs/icom/ic7300.c
@@ -223,6 +223,7 @@ int ic9700_set_vfo(RIG *rig, vfo_t vfo);
struct cmdparams ic7300_extcmds[] =
{
+ { {.s = RIG_PARM_ANN}, CMD_PARAM_TYPE_PARM, C_CTL_ANN, 0, SC_MOD_WR, 0, {0x00}, CMD_DAT_INT, 1 },
{ {.s = RIG_PARM_BEEP}, CMD_PARAM_TYPE_PARM, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x00, 0x23}, CMD_DAT_BOL, 1 },
{ {.s = RIG_PARM_BACKLIGHT}, CMD_PARAM_TYPE_PARM, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x00, 0x81}, CMD_DAT_LVL, 2 },
{ {.s = RIG_PARM_SCREENSAVER}, CMD_PARAM_TYPE_PARM, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x00, 0x89}, CMD_DAT_INT, 1 },
@@ -238,6 +239,7 @@ struct cmdparams ic7300_extcmds[] =
struct cmdparams ic9700_extcmds[] =
{
+ { {.s = RIG_PARM_ANN}, CMD_PARAM_TYPE_PARM, C_CTL_ANN, 0, SC_MOD_WR, 0, {0x00}, CMD_DAT_INT, 1 },
{ {.s = RIG_PARM_BEEP}, CMD_PARAM_TYPE_PARM, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x00, 0x29}, CMD_DAT_BOL, 1 },
{ {.s = RIG_PARM_BACKLIGHT}, CMD_PARAM_TYPE_PARM, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x52}, CMD_DAT_LVL, 2 },
{ {.s = RIG_PARM_SCREENSAVER}, CMD_PARAM_TYPE_PARM, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x67}, CMD_DAT_INT, 1 },
@@ -252,6 +254,7 @@ struct cmdparams ic9700_extcmds[] =
struct cmdparams ic705_extcmds[] =
{
+ { {.s = RIG_PARM_ANN}, CMD_PARAM_TYPE_PARM, C_CTL_ANN, 0, SC_MOD_WR, 0, {0x00}, CMD_DAT_INT, 1 },
{ {.s = RIG_PARM_BEEP}, CMD_PARAM_TYPE_PARM, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x00, 0x31}, CMD_DAT_BOL, 1 },
{ {.s = RIG_PARM_BACKLIGHT}, CMD_PARAM_TYPE_PARM, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x36}, CMD_DAT_LVL, 2 },
{ {.s = RIG_PARM_SCREENSAVER}, CMD_PARAM_TYPE_PARM, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x38}, CMD_DAT_INT, 1 },
@@ -715,7 +718,12 @@ const struct rig_caps ic7300_caps =
[LVL_USB_AF] = {.min = {.f = 0.0f}, .max = {.f = 1.0f}, .step = {.f = 1.0f / 255.0f }},
},
.parm_gran = {
- [PARM_BANDSELECT] = {.step = {.s = "BANDUNUSED,BAND160M,BAND80M,BAND40M,BAND30M,BAND20M,BAND17M,BAND15M,BAND12M,BAND10M,BAND6M,BANDGEN"}}
+ [PARM_ANN] = {.min = {.i = 0}, .max = {.i = 2}, .step = {.i = 1}},
+ [PARM_BACKLIGHT] = {.min = {.f = 0.0f}, .max = {.f = 1.0f}, .step = {.f = 1.0f / 255.0f}},
+ [PARM_BANDSELECT] = {.step = {.s = "BANDUNUSED,BAND160M,BAND80M,BAND40M,BAND30M,BAND20M,BAND17M,BAND15M,BAND12M,BAND10M,BAND6M,BANDGEN"}},
+ [PARM_BEEP] = {.min = {.i = 0}, .max = {.i = 1}, .step = {.i = 1}},
+ [PARM_SCREENSAVER] = {.min = {.i = 0}, .max = {.i = 3}, .step = {.i = 1}},
+ [PARM_TIME] = {.min = {.i = 0}, .max = {.i = 86399}, .step = {.i = 1}},
},
.ext_tokens = ic7300_ext_tokens,
.extlevels = icom_ext_levels,
@@ -953,7 +961,10 @@ struct rig_caps ic9700_caps =
[LVL_USB_AF] = {.min = {.f = 0.0f}, .max = {.f = 1.0f}, .step = {.f = 1.0f / 255.0f }},
},
.parm_gran = {
- [PARM_BANDSELECT] = {.step = {.s = "BANDUNUSED,BAND70CM,BAND33CM,BAND23CM"}}
+ [PARM_BACKLIGHT] = {.min = {.f = 0.0f}, .max = {.f = 1.0f}, .step = {.f = 1.0f / 255.0f}},
+ [PARM_BANDSELECT] = {.step = {.s = "BANDUNUSED,BAND70CM,BAND33CM,BAND23CM"}},
+ [PARM_BEEP] = {.min = {.i = 0}, .max = {.i = 1}},
+ [PARM_SCREENSAVER] = {.min = {.i = 0}, .max = {.i = 3}, .step = {.i = 1}}
},
.ext_tokens = ic9700_ext_tokens,
.extlevels = icom_ext_levels,
@@ -1269,7 +1280,10 @@ const struct rig_caps ic705_caps =
[LVL_USB_AF] = {.min = {.f = 0.0f}, .max = {.f = 1.0f}, .step = {.f = 1.0f / 255.0f }},
},
.parm_gran = {
- [PARM_BANDSELECT] = {.step = {.s = "BANDUNUSED,BAND160M,BAND80M,BAND40M,BAND30M,BAND20M,BAND17M,BAND15M,BAND12M,BAND10M,BAND6M,BANDWFM,BANDAIR,BAND70CM,BAND33CM,BANDGEN"}}
+ [PARM_BACKLIGHT] = {.min = {.f = 0.0f}, .max = {.f = 1.0f}, .step = {.f = 1.0f / 255.0f}},
+ [PARM_BANDSELECT] = {.step = {.s = "BANDUNUSED,BAND160M,BAND80M,BAND40M,BAND30M,BAND20M,BAND17M,BAND15M,BAND12M,BAND10M,BAND6M,BANDWFM,BANDAIR,BAND70CM,BAND33CM,BANDGEN"}},
+ [PARM_BEEP] = {.min = {.i = 0}, .max = {.i = 1}},
+ [PARM_SCREENSAVER] = {.min = {.i = 0}, .max = {.i = 3}, .step = {.i = 1}},
},
.ext_tokens = ic705_ext_tokens,
.extlevels = icom_ext_levels,
@@ -1538,7 +1552,10 @@ const struct rig_caps ic905_caps =
[LVL_USB_AF] = {.min = {.f = 0.0f}, .max = {.f = 1.0f}, .step = {.f = 1.0f / 255.0f }},
},
.parm_gran = {
- [PARM_BANDSELECT] = {.step = {.s = "BANDUNUSED,BAND70CM,BAND33CM,BAND23CM,BAND23CM,BAND13CM,BAND3CM"}}
+ [PARM_BACKLIGHT] = {.min = {.f = 0.0f}, .max = {.f = 1.0f}, .step = {.f = 1.0f / 255.0f}},
+ [PARM_BANDSELECT] = {.step = {.s = "BANDUNUSED,BAND70CM,BAND33CM,BAND23CM,BAND23CM,BAND13CM,BAND3CM"}},
+ [PARM_BEEP] = {.min = {.i = 0}, .max = {.i = 1}},
+ [PARM_SCREENSAVER] = {.min = {.i = 0}, .max = {.i = 3}, .step = {.i = 1}},
},
.ext_tokens = ic705_ext_tokens,
.extlevels = icom_ext_levels,
@@ -1857,8 +1874,10 @@ int ic7300_get_parm(RIG *rig, setting_t parm, value_t *val)
switch (parm)
{
+#if 0
case RIG_PARM_ANN:
return -RIG_ENIMPL; // How can we implement this?
+#endif
default:
rig_debug(RIG_DEBUG_TRACE, "%s: using icom routine for PARM=%s\n", __func__,
@@ -1887,9 +1906,11 @@ int ic7300_get_parm(RIG *rig, setting_t parm, value_t *val)
switch (parm)
{
+#if 0
case RIG_PARM_ANN:
rig_debug(RIG_DEBUG_WARN, "%s: not implemented\n", __func__);
return -RIG_ENIMPL;
+#endif
default:
return icom_get_parm(rig, parm, val);
diff --git a/rigs/icom/ic7410.c b/rigs/icom/ic7410.c
index 3100397dc..937b87bac 100644
--- a/rigs/icom/ic7410.c
+++ b/rigs/icom/ic7410.c
@@ -154,7 +154,11 @@ const struct rig_caps ic7410_caps =
[LVL_KEYSPD] = { .min = { .i = 6 }, .max = { .i = 48 }, .step = { .i = 1 } },
[LVL_CWPITCH] = { .min = { .i = 300 }, .max = { .i = 900 }, .step = { .i = 1 } },
},
- .parm_gran = {},
+ .parm_gran = {
+ [PARM_BACKLIGHT] = {.min = {.f = 0.0f}, .max = {.f = 1.0f}, .step = {.f = 1.0f / 255.0f}},
+ [PARM_ANN] = {.min = {.i = 0}, .max = {.i = 2}, .step = {.i = 1}},
+ },
+
.ctcss_list = common_ctcss_list,
.dcs_list = NULL,
.preamp = { 10, 20, RIG_DBLST_END, }, /* FIXME: TBC */
diff --git a/rigs/icom/ic746.c b/rigs/icom/ic746.c
index 95787dcb9..81c092b6f 100644
--- a/rigs/icom/ic746.c
+++ b/rigs/icom/ic746.c
@@ -446,7 +446,12 @@ const struct rig_caps ic746pro_caps =
#include "level_gran_icom.h"
[LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } },
},
- .parm_gran = {},
+ .parm_gran = {
+ [PARM_BACKLIGHT] = {.min = {.f = 0.0f}, .max = {.f = 1.0f}, .step = {.f = 1.0f / 255.0f}},
+ [PARM_BEEP] = {.min = {.i = 0}, .max = {.i = 1}, .step = {.i = 1}},
+ [PARM_ANN] = {.min = {.i = 0}, .max = {.i = 2}, .step = {.i = 1}},
+ },
+
.extparms = ic746pro_ext_parms,
.ctcss_list = common_ctcss_list,
.dcs_list = full_dcs_list,
diff --git a/rigs/icom/ic756.c b/rigs/icom/ic756.c
index 25cf15f56..afeda348a 100644
--- a/rigs/icom/ic756.c
+++ b/rigs/icom/ic756.c
@@ -1014,7 +1014,13 @@ const struct rig_caps ic756pro3_caps =
[LVL_KEYSPD] = { .min = { .i = 6 }, .max = { .i = 48 }, .step = { .i = 1 } },
[LVL_CWPITCH] = { .min = { .i = 300 }, .max = { .i = 900 }, .step = { .i = 1 } },
},
- .parm_gran = {},
+ .parm_gran = {
+ [PARM_BACKLIGHT] = {.min = {.f = 0.0f}, .max = {.f = 1.0f}, .step = {.f = 1.0f / 255.0f}},
+ [PARM_BEEP] = {.min = {.i = 0}, .max = {.i = 1}, .step = {.i = 1}},
+ [PARM_TIME] = {.min = {.i = 0}, .max = {.i = 86399}, .step = {.i = 1}},
+ [PARM_ANN] = {.min = {.i = 0}, .max = {.i = 2}, .step = {.i = 1}},
+ },
+
.extparms = ic756pro2_ext_parms,
.ctcss_list = common_ctcss_list,
.dcs_list = NULL,
diff --git a/rigs/icom/ic7600.c b/rigs/icom/ic7600.c
index faeb11e5e..fc0ba365f 100644
--- a/rigs/icom/ic7600.c
+++ b/rigs/icom/ic7600.c
@@ -308,7 +308,15 @@ struct rig_caps ic7600_caps =
[LVL_KEYSPD] = { .min = { .i = 6 }, .max = { .i = 48 }, .step = { .i = 1 } },
[LVL_CWPITCH] = { .min = { .i = 300 }, .max = { .i = 900 }, .step = { .i = 1 } },
},
- .parm_gran = {},
+ .parm_gran = {
+ [PARM_BACKLIGHT] = {.min = {.f = 0.0f}, .max = {.f = 1.0f}, .step = {.f = 1.0f / 255.0f}},
+ [PARM_KEYLIGHT] = {.min = {.f = 0.0f}, .max = {.f = 1.0f}, .step = {.f = 1.0f / 255.0f}},
+ [PARM_BEEP] = {.min = {.i = 0}, .max = {.i = 1}, .step = {.i = 1}},
+ [PARM_TIME] = {.min = {.i = 0}, .max = {.i = 86399}, .step = {.i = 1}},
+ [PARM_ANN] = {.min = {.i = 0}, .max = {.i = 2}, .step = {.i = 1}},
+ [PARM_APO] = { .min = { .i = 1 }, .max = { .i = 1439} },
+ },
+
.ext_tokens = ic7600_ext_tokens,
.extfuncs = icom_e...
[truncated message content] |
|
From: n0nb <n0...@us...> - 2023-08-09 13:31:38
|
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 11d2f34ec8f2ac2d972f33e497ff10b0a837ab2b (commit)
via 22aee2ff31aa0eb7aae8b51e5ae3bc4939113737 (commit)
via 55370c1e64176ddb86a9230049feb557d5d9da4d (commit)
via dfb923e001998b6630a262e0c4c08cadc5e7596e (commit)
via 23ae64eeadc2e4fb6a5d04f53503cdfc6956e0fc (commit)
via 457b09d50fc286052a0a9c927af1aebb448d38db (commit)
via 93a1d90889a547e24a65ef3179e34eea6d60f8ba (commit)
via 11f8a33e76c970b9e6280cb40ca8e0d1a4631a54 (commit)
via 6c3e5a6b7f341bfd1fe4e4bce4338ef76879bb35 (commit)
via b1bef6101b7a1c22139826aba2787c7277c08f24 (commit)
via 915ee383fbe28806b10744eba744201579c5fa35 (commit)
via cbec337cd3f5cbaa9263a84139b4c29c81d48891 (commit)
via 90f0ffcdc9b9298728cd70864a500ff7c5a21f48 (commit)
via 2194d0dac9b0fd39c9551d7eac7f8996de639d87 (commit)
via 12f855dbacb80a5b518cfe3021ec442b30825b51 (commit)
via 18390bdbf8901847db555c79743fb4156e1dd15a (commit)
via aa3cf8988640b84b04311ede5054f9a3a3bc81ec (commit)
via 17c5a8aed9cffafc100606ff35852c60faf422a0 (commit)
via 364a1360007c962f29229d58392f90e17ac3137a (commit)
via 7c57a22ac893c5514d58467f847f0e8653405503 (commit)
via 145c9e0c80a439a1af05c43768f53c797ac99b84 (commit)
via bf9835791beb3261ffc0d367345e3aed30428b04 (commit)
via 10f88807e6c48a6ca6229694fdc2c10450244c44 (commit)
via 82c169527dbe267a26f40f50b41b51f8cc54e3b2 (commit)
via 4f14e14993020930495a7603a0878d66be1c5f4d (commit)
via 652e12a44610e5121d10a6053205eb8386b3c0c1 (commit)
via a29eb33e6e1b2c29f4bfce5ea8e74a8435504c0b (commit)
via 321f3f8ab42c5961b7ac5f484ff99d6fc0a61762 (commit)
via a9b3d62f41130712aabf1bb201630f7525a293ef (commit)
via 8cf3d5c02c654b89c4113dea98625ff669cb4ce6 (commit)
via 2c81d04ec02f046073fb6b6df96d0cb25f75d3ab (commit)
via 2f818472abe3b20aeaf0f38f0bb4ee897c7b13d8 (commit)
via 89214bf132680357f4948be799bab2ae305cb3c2 (commit)
via 3eafbcad111891b2798def5ca1ff504f87eecdf6 (commit)
via d03affebea4d3c343a4f934b4d72f1205b6cc1ac (commit)
via deaf44c8c61fe6e5f31c5369cf29ce4a6b647351 (commit)
via 6c89f0045ff8a38b0ad513e6d57c8646f1303a63 (commit)
via d5828f65ffcbee8a021644ec2dd29ebf194eda71 (commit)
via 97b341eb3fbced984340eb33c82ef8d94a1fecdb (commit)
via 494252fe1cf27ce20c8a3a081a21f01cb1ec1286 (commit)
via d76e28d7720e11ea826ba08a5069979744968558 (commit)
via 5ddfefb91dfbdcafedae0fd070b552d495bb3521 (commit)
via bbff9fae9f3fb325e08bb6a2b7fcdce8eaf2b066 (commit)
via 8a49278682d55363417f9f497a1aa2dfb39dd8db (commit)
via a4b88ee84aaaa733b534586cbf1506d9da325f06 (commit)
via d48d12c97294e61b91026713d2e89dde3eff052c (commit)
via 6a4e31f89009c5adedb9c38ba4f9e8b966447383 (commit)
via 2e34bb599184aba7dcbc358367bcdee7250760a5 (commit)
via 503f27e20c060719077d73a6157b22d1f2a1906a (commit)
via f0821041a2c48a2c6da5e5f437a72ebdd291c360 (commit)
via 0228614a1759eda971b27d9e3a8a8d103ea1a8bd (commit)
via 17382c03c63b69e3f75921a94bcb4cf0a47cbba7 (commit)
via 6aa13e45c7a44809ecd216a23461fab06d6bd603 (commit)
from 56de3bb25d0e0c9919681c86ec3c2c235697d381 (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 11d2f34ec8f2ac2d972f33e497ff10b0a837ab2b
Author: Mike Black W9MDB <mdb...@ya...>
Date: Tue Aug 8 15:42:40 2023 -0500
Fix rigctlsync.1 man page
diff --git a/doc/man1/rigctlsync.1 b/doc/man1/rigctlsync.1
index 369950ad6..e2c504b1b 100644
--- a/doc/man1/rigctlsync.1
+++ b/doc/man1/rigctlsync.1
@@ -259,7 +259,7 @@ if an error was returned by
Start
.B rigctlsync
with FLRig as the Hamlib model
-.UE
+.UE .
.
.PP
.in +4n
commit 22aee2ff31aa0eb7aae8b51e5ae3bc4939113737
Author: Mike Black W9MDB <mdb...@ya...>
Date: Mon Aug 7 23:30:29 2023 -0500
Update simulators
diff --git a/simulators/simic7100.c b/simulators/simic7100.c
index f19b074c7..f05e44c44 100644
--- a/simulators/simic7100.c
+++ b/simulators/simic7100.c
@@ -200,6 +200,7 @@ void frameParse(int fd, unsigned char *frame, int len)
frame[4] = 0xfb;
frame[5] = 0xfd;
+ hl_usleep(20*1000);
n = write(fd, frame, 6);
break;
diff --git a/simulators/simic7300.c b/simulators/simic7300.c
index 8ac113245..be9f316ad 100644
--- a/simulators/simic7300.c
+++ b/simulators/simic7300.c
@@ -31,6 +31,7 @@ int civ_731_mode = 0;
vfo_t current_vfo = RIG_VFO_A;
int split = 0;
int keyspd = 85; // 85=20WPM
+int band=8;
// we make B different from A to ensure we see a difference at startup
float freqA = 14074000;
@@ -365,6 +366,22 @@ void frameParse(int fd, unsigned char *frame, int len)
case 0x1a: // miscellaneous things
switch (frame[5])
{
+ case 0x01: // band
+ if (frame[6] == 0xfd)
+ {
+ frame[6] = band;
+ frame[7] = 0xfd;
+ n = write(fd,frame,8);
+ }
+ else
+ {
+ band = frame[6];
+ printf("Band select=%d\n",band);
+ frame[4] = 0xfb;
+ frame[5] = 0xfe;
+ n = write(fd,frame,6);
+ }
+ break;
case 0x03: // width
if (current_vfo == RIG_VFO_A || current_vfo == RIG_VFO_MAIN) { frame[6] = widthA; }
else { frame[6] = widthB; }
commit 55370c1e64176ddb86a9230049feb557d5d9da4d
Author: Mike Black W9MDB <mdb...@ya...>
Date: Mon Aug 7 17:21:39 2023 -0500
Fix non-targetable VFO Icom rigs (e.g. IC7100) error during open routine by call get_freq first to establish echo on or off
https://github.com/Hamlib/Hamlib/issues/1358
diff --git a/src/rig.c b/src/rig.c
index e8661b09f..ef4ca9884 100644
--- a/src/rig.c
+++ b/src/rig.c
@@ -2317,6 +2317,15 @@ int HAMLIB_API rig_get_freq(RIG *rig, vfo_t vfo, freq_t *freq)
}
HAMLIB_TRACE;
+ retcode = caps->get_freq(rig, vfo, freq);
+
+ if (retcode != RIG_OK)
+ {
+ ELAPSED2;
+ LOCK(0);
+ RETURNFUNC(retcode);
+ }
+
retcode = caps->set_vfo(rig, vfo);
if (retcode != RIG_OK)
@@ -7773,6 +7782,7 @@ static int async_data_handler_start(RIG *rig)
rs->async_data_enabled);
RETURNFUNC(RIG_OK);
}
+ sleep(2); // give other things a chance to finish opening up the rig
#ifdef HAVE_PTHREAD
commit dfb923e001998b6630a262e0c4c08cadc5e7596e
Merge: 23ae64eea 93a1d9088
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sat Aug 5 12:15:50 2023 -0500
Merge branch 'master' of https://github.com/Hamlib/Hamlib
commit 23ae64eeadc2e4fb6a5d04f53503cdfc6956e0fc
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sat Aug 5 12:15:28 2023 -0500
Add is_ft710 for SH command in newcat.c
diff --git a/rigs/yaesu/newcat.c b/rigs/yaesu/newcat.c
index 31d1293cc..ec607fc3c 100644
--- a/rigs/yaesu/newcat.c
+++ b/rigs/yaesu/newcat.c
@@ -8737,7 +8737,7 @@ int newcat_set_rx_bandwidth(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
RETURNFUNC(err);
}
} // end is_ftdx5000
- else if (is_ftdx101d || is_ftdx101mp || is_ftdx10)
+ else if (is_ftdx101d || is_ftdx101mp || is_ftdx10 || is_ft710)
{
switch (mode)
{
commit 457b09d50fc286052a0a9c927af1aebb448d38db
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sat Aug 5 09:41:55 2023 -0500
Fix FTDX101D/MP to allow new 3200/3500/4000Hz bandwidths
https://github.com/Hamlib/Hamlib/issues/1355
diff --git a/rigs/yaesu/newcat.c b/rigs/yaesu/newcat.c
index 2fd09f867..31d1293cc 100644
--- a/rigs/yaesu/newcat.c
+++ b/rigs/yaesu/newcat.c
@@ -8765,7 +8765,10 @@ int newcat_set_rx_bandwidth(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
else if (width <= 1700) { w = 15; }
else if (width <= 2000) { w = 16; }
else if (width <= 2400) { w = 17; }
- else { w = 18; } // 3000Hz
+ else if (width <= 3000) { w = 18; }
+ else if (width <= 3200) { w = 19; }
+ else if (width <= 3500) { w = 20; }
+ else { w = 21; } // 4000Hz
break;
@@ -10053,7 +10056,15 @@ int newcat_get_rx_bandwidth(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t *width)
case 18: *width = 3000; break;
- default: RETURNFUNC(-RIG_EINVAL);
+ case 19: *width = 3200; break;
+
+ case 20: *width = 3500; break;
+
+ case 21: *width = 4000; break;
+
+ default:
+
+ RETURNFUNC(-RIG_EINVAL);
}
break;
diff --git a/rigs/yaesu/newcat.h b/rigs/yaesu/newcat.h
index de1d49c7f..267b36f0b 100644
--- a/rigs/yaesu/newcat.h
+++ b/rigs/yaesu/newcat.h
@@ -50,7 +50,7 @@
typedef char ncboolean;
/* shared function version */
-#define NEWCAT_VER "20230802"
+#define NEWCAT_VER "20230805"
/* Hopefully large enough for future use, 128 chars plus '\0' */
#define NEWCAT_DATA_LEN 129
commit 93a1d90889a547e24a65ef3179e34eea6d60f8ba
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sat Aug 5 09:41:55 2023 -0500
Fix FTDX101D/MP to allow new 3200/3500/4000Hz bandwidths
https://github.com/Hamlib/Hamlib/issues/1356
diff --git a/rigs/yaesu/newcat.c b/rigs/yaesu/newcat.c
index 2fd09f867..31d1293cc 100644
--- a/rigs/yaesu/newcat.c
+++ b/rigs/yaesu/newcat.c
@@ -8765,7 +8765,10 @@ int newcat_set_rx_bandwidth(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
else if (width <= 1700) { w = 15; }
else if (width <= 2000) { w = 16; }
else if (width <= 2400) { w = 17; }
- else { w = 18; } // 3000Hz
+ else if (width <= 3000) { w = 18; }
+ else if (width <= 3200) { w = 19; }
+ else if (width <= 3500) { w = 20; }
+ else { w = 21; } // 4000Hz
break;
@@ -10053,7 +10056,15 @@ int newcat_get_rx_bandwidth(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t *width)
case 18: *width = 3000; break;
- default: RETURNFUNC(-RIG_EINVAL);
+ case 19: *width = 3200; break;
+
+ case 20: *width = 3500; break;
+
+ case 21: *width = 4000; break;
+
+ default:
+
+ RETURNFUNC(-RIG_EINVAL);
}
break;
diff --git a/rigs/yaesu/newcat.h b/rigs/yaesu/newcat.h
index de1d49c7f..267b36f0b 100644
--- a/rigs/yaesu/newcat.h
+++ b/rigs/yaesu/newcat.h
@@ -50,7 +50,7 @@
typedef char ncboolean;
/* shared function version */
-#define NEWCAT_VER "20230802"
+#define NEWCAT_VER "20230805"
/* Hopefully large enough for future use, 128 chars plus '\0' */
#define NEWCAT_DATA_LEN 129
commit 11f8a33e76c970b9e6280cb40ca8e0d1a4631a54
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sat Aug 5 07:48:21 2023 -0500
Add simic7851
diff --git a/simulators/Makefile.am b/simulators/Makefile.am
index 5fb482e10..895b8d416 100644
--- a/simulators/Makefile.am
+++ b/simulators/Makefile.am
@@ -8,7 +8,7 @@ DISTCLEANFILES =
bin_PROGRAMS =
-check_PROGRAMS = simelecraft simicgeneric simkenwood simyaesu simic9100 simic9700 simft991 simftdx1200 simftdx3000 simjupiter simpowersdr simid5100 simft736 simftdx5000 simtmd700 simrotorez simspid simft817 simts590 simft847 simic7300 simic7000 simic7100 simic7200 simatd578 simic905 simts450 simic7600 simic7610 simic705 simts950 simts990
+check_PROGRAMS = simelecraft simicgeneric simkenwood simyaesu simic9100 simic9700 simft991 simftdx1200 simftdx3000 simjupiter simpowersdr simid5100 simft736 simftdx5000 simtmd700 simrotorez simspid simft817 simts590 simft847 simic7300 simic7000 simic7100 simic7200 simatd578 simic905 simts450 simic7600 simic7610 simic705 simts950 simts990 simic7851
simelecraft_SOURCES = simelecraft.c
simkenwood_SOURCES = simkenwood.c
diff --git a/simulators/simic7851.c b/simulators/simic7851.c
new file mode 100644
index 000000000..d0201d7de
--- /dev/null
+++ b/simulators/simic7851.c
@@ -0,0 +1,705 @@
+// using virtual serial ports on Windows is to be developed yet
+// Needs a lot of improvement to work on all Icoms
+// gcc -g -Wall -o simicom simicom.c -lhamlib
+// On mingw in the hamlib src directory
+// gcc -static -I../include -g -Wall -o simicom simicom.c -L../../build/src/.libs -lhamlib -lwsock32 -lws2_32
+#define _XOPEN_SOURCE 700
+// since we are POSIX here we need this
+struct ip_mreq
+{
+ int dummy;
+};
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <sys/time.h>
+#include <hamlib/rig.h>
+#include "../src/misc.h"
+#include <termios.h>
+#include <unistd.h>
+
+
+#define BUFSIZE 256
+#define X25
+
+int civ_731_mode = 0;
+vfo_t current_vfo = RIG_VFO_A;
+int split = 0;
+
+// we make B different from A to ensure we see a difference at startup
+float freqA = 14074000;
+float freqB = 14074500;
+mode_t modeA = RIG_MODE_PKTUSB;
+mode_t modeB = RIG_MODE_PKTUSB;
+int datamodeA = 0;
+int datamodeB = 0;
+pbwidth_t widthA = 0;
+pbwidth_t widthB = 1;
+ant_t ant_curr = 0;
+int ant_option = 0;
+int ptt = 0;
+int satmode = 0;
+int agc_time = 1;
+int ovf_status = 0;
+int powerstat = 1;
+int datamode = 0;
+int keyspd = 130; // 130=20WPM
+int attenuator;
+int filterA = 2;
+int filterB = 3;
+
+void dumphex(unsigned char *buf, int n)
+{
+ for (int i = 0; i < n; ++i) { printf("%02x ", buf[i]); }
+
+ printf("\n");
+}
+
+int
+frameGet(int fd, unsigned char *buf)
+{
+ int i = 0;
+ memset(buf, 0, BUFSIZE);
+ unsigned char c;
+
+again:
+
+ while (read(fd, &c, 1) > 0)
+ {
+ buf[i++] = c;
+ //printf("i=%d, c=0x%02x\n",i,c);
+
+ if (c == 0xfd)
+ {
+ dumphex(buf, i);
+ return i;
+ }
+
+ if (i > 2 && c == 0xfe)
+ {
+ printf("Turning power on due to 0xfe string\n");
+ powerstat = 1;
+ int j;
+
+ for (j = i; j < 175; ++j)
+ {
+ if (read(fd, &c, 1) < 0) { break; }
+ }
+
+ i = 0;
+ goto again;
+ }
+ }
+
+ printf("Error??? c=x%02x\n", c);
+
+ return 0;
+}
+
+void frameParse(int fd, unsigned char *frame, int len)
+{
+ double freq;
+ int n = 0;
+
+ dumphex(frame, len);
+
+ if (frame[0] != 0xfe && frame[1] != 0xfe)
+ {
+ printf("expected fe fe, got ");
+ dumphex(frame, len);
+ return;
+ }
+
+ int echo = 1;
+
+ if (echo)
+ {
+ n = write(fd, frame, len);
+ }
+
+ frame[3] = frame[2];
+ frame[2] = 0xe0;
+
+ switch (frame[4])
+ {
+ case 0x03:
+
+ //from_bcd(frameackbuf[2], (civ_731_mode ? 4 : 5) * 2);
+ if (current_vfo == RIG_VFO_A || current_vfo == RIG_VFO_MAIN)
+ {
+ printf("get_freqA\n");
+ to_bcd(&frame[5], (long long)freqA, (civ_731_mode ? 4 : 5) * 2);
+ }
+ else
+ {
+ printf("get_freqB\n");
+ to_bcd(&frame[5], (long long)freqB, (civ_731_mode ? 4 : 5) * 2);
+ }
+
+ frame[10] = 0xfd;
+
+ if (powerstat)
+ {
+ n = write(fd, frame, 11);
+ }
+
+ break;
+
+ case 0x04:
+ if (current_vfo == RIG_VFO_A || current_vfo == RIG_VFO_MAIN)
+ {
+ printf("get_modeA\n");
+ frame[5] = modeA;
+ frame[6] = widthA;
+ }
+ else
+ {
+ printf("get_modeB\n");
+ frame[5] = modeB;
+ frame[6] = widthB;
+ }
+
+ frame[7] = 0xfd;
+ n = write(fd, frame, 8);
+ break;
+
+ case 0x05:
+ freq = from_bcd(&frame[5], (civ_731_mode ? 4 : 5) * 2);
+ printf("set_freq to %.0f\n", freq);
+
+ if (current_vfo == RIG_VFO_A || current_vfo == RIG_VFO_MAIN) { freqA = freq; }
+ else { freqB = freq; }
+
+ frame[4] = 0xfb;
+ frame[5] = 0xfd;
+ n = write(fd, frame, 6);
+ break;
+
+ case 0x06:
+ if (current_vfo == RIG_VFO_A || current_vfo == RIG_VFO_MAIN) { modeA = frame[6]; }
+ else { modeB = frame[6]; }
+
+ frame[4] = 0xfb;
+ frame[5] = 0xfd;
+ n = write(fd, frame, 6);
+ break;
+
+ case 0x07:
+
+printf("******* [5] = 0x07\n");
+ switch (frame[5])
+ {
+ case 0xd2:
+printf("******* [6] = 0x07\n");
+ switch (frame[6])
+ {
+ case 0x00: current_vfo = RIG_VFO_MAIN; break;
+
+ case 0x01: current_vfo = RIG_VFO_SUB; break;
+ }
+ }
+
+ printf("set_vfo to %s\n", rig_strvfo(current_vfo));
+
+ frame[4] = 0xfb;
+ frame[5] = 0xfd;
+ printf("0x07 0xd2 answer: \n");
+ dump_hex(frame, 6);
+ n = write(fd, frame, 6);
+ break;
+
+ case 0x0f:
+ if (frame[5] == 0) { split = 0; }
+ else if (frame[5] == 1) { split = 1; }
+ else { frame[6] = split; }
+
+ if (frame[5] == 0xfd)
+ {
+ printf("get split %d\n", 1);
+ frame[7] = 0xfd;
+ n = write(fd, frame, 8);
+ }
+ else
+ {
+ printf("set split %d\n", 1);
+ frame[4] = 0xfb;
+ frame[5] = 0xfd;
+ n = write(fd, frame, 6);
+ }
+
+ break;
+
+ case 0x11:
+ if (frame[5] != 0xfd)
+ {
+ attenuator = frame[6];
+ frame[4] = 0xfb;
+ frame[5] = 0xfd;
+ n = write(fd, frame, 6);
+ }
+ else
+ {
+ frame[6] = attenuator;
+ frame[7] = 0xfd;
+ n = write(fd, frame, 8);
+ }
+ break;
+
+
+ case 0x12: // we're simulating the 3-byte version -- not the 2-byte
+ if (frame[5] != 0xfd)
+ {
+ printf("Set ant %d\n", -1);
+ ant_curr = frame[5];
+ ant_option = frame[6];
+ dump_hex(frame, 8);
+ }
+ else
+ {
+ printf("Get ant\n");
+ }
+
+ frame[5] = ant_curr;
+ frame[6] = ant_option;
+ frame[7] = 0xfd;
+ printf("write 8 bytes\n");
+ dump_hex(frame, 8);
+ n = write(fd, frame, 8);
+ break;
+
+ case 0x14:
+ printf("******** 0x14 received frame[5]=0x%02x\n", frame[5]);
+
+ switch (frame[5])
+ {
+ static int power_level = 0;
+
+ case 0x07:
+ case 0x08:
+ if (frame[6] != 0xfd)
+ {
+ printf("DEBUG#1\n");
+ frame[4] = 0xfb;
+ frame[5] = 0xfd;
+ dumphex(frame, 6);
+ n = write(fd, frame, 6);
+ printf("ACK x14 x08\n");
+ }
+ else
+ {
+ printf("DEBUG#2\n");
+ to_bcd(&frame[6], (long long)128, 2);
+ frame[8] = 0xfb;
+ frame[9] = 0xfd;
+ dumphex(frame, 10);
+ n = write(fd, frame, 10);
+ printf("SEND x14 x08\n");
+ }
+
+ break;
+
+ case 0x0a:
+ printf("Using power level %d\n", power_level);
+ power_level += 10;
+
+ if (power_level > 250) { power_level = 0; }
+
+ to_bcd(&frame[6], (long long)power_level, 2);
+ frame[8] = 0xfd;
+ n = write(fd, frame, 9);
+ break;
+
+ case 0x0c:
+ if (frame[6] != 0xfd)
+ {
+ keyspd = frame[5];
+ }
+ else
+ {
+ frame[6] = keyspd;
+ frame[7] = 0xfd;
+ n = write(fd, frame, 8);
+ }
+
+ break;
+
+ default:
+ printf("*********** NAK\n");
+ frame[5] = 0xfa;
+ frame[6] = 0xfd;
+ n = write(fd, frame, 7);
+ break;
+ }
+
+ break;
+
+ case 0x15:
+ switch (frame[5])
+ {
+ static int meter_level = 0;
+
+ case 0x07:
+ frame[6] = ovf_status;
+ frame[7] = 0xfd;
+ n = write(fd, frame, 8);
+ ovf_status = ovf_status == 0 ? 1 : 0;
+ break;
+
+ case 0x11:
+ printf("Using meter level %d\n", meter_level);
+ meter_level += 10;
+
+ if (meter_level > 250) { meter_level = 0; }
+
+ to_bcd(&frame[6], (long long)meter_level, 2);
+ frame[8] = 0xfd;
+ n = write(fd, frame, 9);
+ break;
+
+ default:
+ frame[5] = 0xfa;
+ frame[6] = 0xfd;
+ n = write(fd, frame, 7);
+ break;
+
+ }
+
+ case 0x16:
+ switch (frame[5])
+ {
+ case 0x5a:
+ if (frame[6] == 0xfe)
+ {
+ satmode = frame[6];
+ }
+ else
+ {
+ frame[6] = satmode;
+ frame[7] = 0xfd;
+ n = write(fd, frame, 8);
+ }
+
+ break;
+ }
+
+ break;
+
+ case 0x18: // miscellaneous things
+ frame[5] = 1;
+ frame[6] = 0xfd;
+ n = write(fd, frame, 7);
+ break;
+
+ case 0x19: // miscellaneous things
+ frame[5] = 0x94;
+ frame[6] = 0xfd;
+ n = write(fd, frame, 7);
+ break;
+
+ case 0x1a: // miscellaneous things
+ switch (frame[5])
+ {
+ case 0x03: // width
+ if (current_vfo == RIG_VFO_A || current_vfo == RIG_VFO_MAIN) { frame[6] = widthA; }
+ else { frame[6] = widthB; }
+
+ frame[7] = 0xfd;
+ n = write(fd, frame, 8);
+ break;
+
+ case 0x04: // AGC TIME
+ printf("frame[6]==x%02x, frame[7]=0%02x\n", frame[6], frame[7]);
+
+ if (frame[6] == 0xfd) // the we are reading
+ {
+ frame[6] = agc_time;
+ frame[7] = 0xfd;
+ n = write(fd, frame, 8);
+ }
+ else
+ {
+ printf("AGC_TIME RESPONSE******************************");
+ agc_time = frame[6];
+ frame[4] = 0xfb;
+ frame[5] = 0xfd;
+ n = write(fd, frame, 6);
+ }
+
+ break;
+
+ case 0x06: // satmode
+ if (frame[6] == 0xfd) // then we are reading
+ {
+ frame[6] = datamode;
+ frame[7] = 0xfd;
+ n = write(fd, frame, 8);
+ }
+ else
+ {
+ datamode = frame[6];
+ frame[4] = 0xfd;
+ frame[5] = 0xfd;
+ n = write(fd, frame, 6);
+ }
+
+ break;
+
+ case 0x07: // satmode
+ frame[4] = 0;
+ frame[7] = 0xfd;
+ n = write(fd, frame, 8);
+ break;
+
+ }
+
+ break;
+
+ case 0x1c:
+ switch (frame[5])
+ {
+ case 0:
+ if (frame[6] == 0xfd)
+ {
+ frame[6] = ptt;
+ frame[7] = 0xfd;
+ n = write(fd, frame, 8);
+ }
+ else
+ {
+ ptt = frame[6];
+ frame[7] = 0xfb;
+ frame[8] = 0xfd;
+ n = write(fd, frame, 9);
+ }
+
+ break;
+
+ }
+
+ break;
+
+
+#ifdef X25
+
+ case 0x25:
+ if (frame[6] == 0xfd)
+ {
+ if (frame[5] == 0x00)
+ {
+ to_bcd(&frame[6], (long long)freqA, (civ_731_mode ? 4 : 5) * 2);
+ printf("X25 get_freqA=%.0f\n", freqA);
+ }
+ else
+ {
+ to_bcd(&frame[6], (long long)freqB, (civ_731_mode ? 4 : 5) * 2);
+ printf("X25 get_freqB=%.0f\n", freqB);
+ }
+
+ frame[11] = 0xfd;
+#if 0 // async frame
+ unsigned char frame2[11];
+
+ frame2[0] = 0xfe;
+ frame2[1] = 0xfe;
+ frame2[2] = 0x00; // send transceive frame
+ frame2[3] = frame[3]; // send transceive frame
+ frame2[4] = 0x00;
+ frame2[5] = 0x70;
+ frame2[6] = 0x28;
+ frame2[7] = 0x57;
+ frame2[8] = 0x03;
+ frame2[9] = 0x00;
+ frame2[10] = 0xfd;
+ n = write(fd, frame2, 11);
+#endif
+ n = write(fd, frame, 12);
+ }
+ else
+ {
+ freq = from_bcd(&frame[6], (civ_731_mode ? 4 : 5) * 2);
+ printf("set_freq to %.0f\n", freq);
+
+ if (frame[5] == 0x00) { freqA = freq; }
+ else { freqB = freq; }
+
+ frame[4] = 0xfb;
+ frame[5] = 0xfd;
+ n = write(fd, frame, 6);
+ // send async frame
+ frame[2] = 0x00; // async freq
+ frame[3] = 0xa2;
+ frame[4] = 0x00;
+ frame[5] = 0x00;
+ frame[6] = 0x10;
+ frame[7] = 0x01;
+ frame[8] = 0x96;
+ frame[9] = 0x12;
+ frame[10] = 0xfd;
+ n = write(fd, frame, 11);
+ }
+
+ break;
+
+ case 0x26:
+ for (int i = 0; i < 6; ++i) { printf("%02x:", frame[i]); }
+
+ if (frame[6] == 0xfd) // then a query
+ {
+ for (int i = 0; i < 6; ++i) { printf("%02x:", frame[i]); }
+
+ frame[6] = frame[5] == 0 ? modeA : modeB;
+ frame[7] = frame[5] == 0 ? datamodeA : datamodeB;
+ frame[8] = frame[5] == 0 ? filterA : filterB;
+ frame[9] = 0xfd;
+ n = write(fd, frame, 10);
+ }
+ else
+ {
+ for (int i = 0; i < 12; ++i) { printf("%02x:", frame[i]); }
+
+ if (frame[6] == 0)
+ {
+ modeA = frame[7];
+ datamodeA = frame[8];
+ }
+ else
+ {
+ modeB = frame[7];
+ datamodeB = frame[8];
+ }
+
+ frame[4] = 0xfb;
+ frame[5] = 0xfd;
+ n = write(fd, frame, 6);
+ }
+
+ printf("\n");
+ break;
+#else
+
+ case 0x25:
+ printf("x25 send nak\n");
+ frame[4] = 0xfa;
+ frame[5] = 0xfd;
+ n = write(fd, frame, 6);
+ break;
+
+ case 0x26:
+ printf("x26 send nak\n");
+ frame[4] = 0xfa;
+ frame[5] = 0xfd;
+ n = write(fd, frame, 6);
+ break;
+#endif
+
+ default: printf("cmd 0x%02x unknown\n", frame[4]);
+ }
+
+ if (n == 0) { printf("Write failed=%s\n", strerror(errno)); }
+
+// don't care about the rig type yet
+
+}
+
+#if defined(WIN32) || defined(_WIN32)
+int openPort(char *comport) // doesn't matter for using pts devices
+{
+ int fd;
+ fd = open(comport, O_RDWR);
+
+ if (fd < 0)
+ {
+ perror(comport);
+ }
+
+ return fd;
+}
+
+#else
+int openPort(char *comport) // doesn't matter for using pts devices
+{
+ int fd = posix_openpt(O_RDWR);
+ char *name = ptsname(fd);
+
+ if (name == NULL)
+ {
+ perror("pstname");
+ return -1;
+ }
+
+ printf("name=%s\n", name);
+
+ if (fd == -1 || grantpt(fd) == -1 || unlockpt(fd) == -1)
+ {
+ perror("posix_openpt");
+ return -1;
+ }
+
+ return fd;
+}
+#endif
+
+void rigStatus()
+{
+ char vfoa = current_vfo == RIG_VFO_A ? '*' : ' ';
+ char vfob = current_vfo == RIG_VFO_B ? '*' : ' ';
+ printf("%cVFOA: mode=%d datamode=%d width=%ld freq=%.0f\n", vfoa, modeA,
+ datamodeA,
+ widthA,
+ freqA);
+ printf("%cVFOB: mode=%d datamode=%d width=%ld freq=%.0f\n", vfob, modeB,
+ datamodeB,
+ widthB,
+ freqB);
+}
+
+int main(int argc, char **argv)
+{
+ unsigned char buf[256];
+ int fd = openPort(argv[1]);
+
+ printf("%s: %s\n", argv[0], rig_version());
+#ifdef X25
+ printf("x25/x26 command recognized\n");
+#else
+ printf("x25/x26 command rejected\n");
+#endif
+#if defined(WIN32) || defined(_WIN32)
+
+ if (argc != 2)
+ {
+ printf("Missing comport argument\n");
+ printf("%s [comport]\n", argv[0]);
+ exit(1);
+ }
+
+#endif
+
+ while (1)
+ {
+ int len = frameGet(fd, buf);
+
+ if (len <= 0)
+ {
+ close(fd);
+ fd = openPort(argv[1]);
+ }
+
+ if (powerstat)
+ {
+ frameParse(fd, buf, len);
+ }
+ else
+ {
+ hl_usleep(1000 * 1000);
+ }
+
+ rigStatus();
+ }
+
+ return 0;
+}
commit 6c3e5a6b7f341bfd1fe4e4bce4338ef76879bb35
Merge: 90f0ffcdc b1bef6101
Author: Michael Black <mdb...@ya...>
Date: Fri Aug 4 08:58:27 2023 -0500
Merge pull request #1354 from GeoBaltz/yaesu_level2
Yaesu level2
commit b1bef6101b7a1c22139826aba2787c7277c08f24
Author: George Baltz N3GB <Geo...@gm...>
Date: Thu Aug 3 09:56:38 2023 -0400
Convert RFPOWER to level_gran usage
Two rigs (FTDX3000dm & FT450D) handled slightly abnormally - both should
function as before.
Remove 2 now unused variables to avoid compiler warnings.
diff --git a/rigs/yaesu/ft1200.c b/rigs/yaesu/ft1200.c
index 39477ff40..85d890fa5 100644
--- a/rigs/yaesu/ft1200.c
+++ b/rigs/yaesu/ft1200.c
@@ -177,6 +177,7 @@ const struct rig_caps ftdx1200_caps =
[LVL_NOTCHF] = { .min = { .i = 1 }, .max = { .i = 4000 }, .step = { .i = 10 } },
[LVL_MICGAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
[LVL_MONITOR_GAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
+ [LVL_RFPOWER] = { .min = { .f = .05 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
},
.ctcss_list = common_ctcss_list,
.dcs_list = NULL,
diff --git a/rigs/yaesu/ft3000.c b/rigs/yaesu/ft3000.c
index 6973de01a..9696677a8 100644
--- a/rigs/yaesu/ft3000.c
+++ b/rigs/yaesu/ft3000.c
@@ -272,6 +272,7 @@ const struct rig_caps ftdx3000_caps =
[LVL_NOTCHF] = { .min = { .i = 1 }, .max = { .i = 4000 }, .step = { .i = 10 } },
[LVL_MICGAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
[LVL_MONITOR_GAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
+ [LVL_RFPOWER] = { .min = { .f = .05 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
},
.ctcss_list = common_ctcss_list,
.dcs_list = NULL,
diff --git a/rigs/yaesu/ft710.c b/rigs/yaesu/ft710.c
index 5c7ada307..b3a8e4f6b 100644
--- a/rigs/yaesu/ft710.c
+++ b/rigs/yaesu/ft710.c
@@ -148,6 +148,7 @@ const struct rig_caps ft710_caps =
[LVL_MICGAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
[LVL_SQL] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
[LVL_MONITOR_GAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
+ [LVL_RFPOWER] = { .min = { .f = .05 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
},
.ctcss_list = common_ctcss_list,
.dcs_list = NULL,
diff --git a/rigs/yaesu/ft891.c b/rigs/yaesu/ft891.c
index 0f2229a6e..09c1c6adc 100644
--- a/rigs/yaesu/ft891.c
+++ b/rigs/yaesu/ft891.c
@@ -161,6 +161,7 @@ const struct rig_caps ft891_caps =
[LVL_MICGAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
[LVL_SQL] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
[LVL_MONITOR_GAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
+ [LVL_RFPOWER] = { .min = { .f = .05 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
},
.ctcss_list = common_ctcss_list,
.dcs_list = NULL,
diff --git a/rigs/yaesu/ft950.c b/rigs/yaesu/ft950.c
index 01abb261f..27d67023a 100644
--- a/rigs/yaesu/ft950.c
+++ b/rigs/yaesu/ft950.c
@@ -113,6 +113,7 @@ const struct rig_caps ft950_caps =
[LVL_CWPITCH] = { .min = { .i = 300 }, .max = { .i = 1050 }, .step = { .i = 50 } },
[LVL_KEYSPD] = { .min = { .i = 4 }, .max = { .i = 60 }, .step = { .i = 1 } },
[LVL_NOTCHF] = { .min = { .i = 1 }, .max = { .i = 3000 }, .step = { .i = 10 } },
+ [LVL_RFPOWER] = { .min = { .f = .05 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
},
.ctcss_list = common_ctcss_list,
.dcs_list = NULL,
diff --git a/rigs/yaesu/ft991.c b/rigs/yaesu/ft991.c
index 7c5b27bc0..d13f67b86 100644
--- a/rigs/yaesu/ft991.c
+++ b/rigs/yaesu/ft991.c
@@ -166,6 +166,7 @@ const struct rig_caps ft991_caps =
[LVL_MICGAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
[LVL_SQL] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
[LVL_MONITOR_GAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
+ [LVL_RFPOWER] = { .min = { .f = .05 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
},
.ctcss_list = common_ctcss_list,
.dcs_list = common_dcs_list,
diff --git a/rigs/yaesu/ftdx10.c b/rigs/yaesu/ftdx10.c
index 35ae64b82..d411b26a4 100644
--- a/rigs/yaesu/ftdx10.c
+++ b/rigs/yaesu/ftdx10.c
@@ -164,6 +164,7 @@ const struct rig_caps ftdx10_caps =
[LVL_MICGAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
[LVL_SQL] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
[LVL_MONITOR_GAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
+ [LVL_RFPOWER] = { .min = { .f = .05 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
},
.ctcss_list = common_ctcss_list,
.dcs_list = NULL,
diff --git a/rigs/yaesu/ftdx101.c b/rigs/yaesu/ftdx101.c
index d06b384b4..6922a17ff 100644
--- a/rigs/yaesu/ftdx101.c
+++ b/rigs/yaesu/ftdx101.c
@@ -164,6 +164,7 @@ const struct rig_caps ftdx101d_caps =
[LVL_MICGAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
[LVL_SQL] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
[LVL_MONITOR_GAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
+ [LVL_RFPOWER] = { .min = { .f = .05 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
},
.ctcss_list = common_ctcss_list,
.dcs_list = NULL,
diff --git a/rigs/yaesu/ftdx101mp.c b/rigs/yaesu/ftdx101mp.c
index 9ef8d46d9..78673c8ce 100644
--- a/rigs/yaesu/ftdx101mp.c
+++ b/rigs/yaesu/ftdx101mp.c
@@ -101,6 +101,7 @@ const struct rig_caps ftdx101mp_caps =
[LVL_MICGAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
[LVL_SQL] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
[LVL_MONITOR_GAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
+ [LVL_RFPOWER] = { .min = { .f = .05 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
},
.ctcss_list = common_ctcss_list,
.dcs_list = NULL,
diff --git a/rigs/yaesu/level_gran_yaesu.h b/rigs/yaesu/level_gran_yaesu.h
index 7fdb383ff..c440455f1 100644
--- a/rigs/yaesu/level_gran_yaesu.h
+++ b/rigs/yaesu/level_gran_yaesu.h
@@ -17,7 +17,7 @@
/* levels with time units */
[LVL_VOXDELAY] = { .min = { .i = 3 }, .max = { .i = 300 }, .step = { .i = 1 } },
[LVL_BKINDL] = { .min = { .i = 30 }, .max = { .i = 3000 }, .step = { .i = 1 } },
- [LVL_BKIN_DLYMS] = { .min = { .i = 30 }, .max = { .i = 3000 }, .step = { .i = 1 } },
+ [LVL_BKIN_DLYMS] = { .min = { .i = 30 }, .max = { .i = 3000 }, .step = { .i = 1 } },
/* levels with watt units */
[LVL_RFPOWER_METER_WATTS] = { .min = { .f = .0 }, .max = { .f = 100 }, .step = { .f = 1.0f/255.0f } },
/* level with misc units */
@@ -28,7 +28,7 @@
/* levels with 0-1 values -- increment based on rig's range */
[LVL_AF] = { .min = { .f = 0 }, .max = { .f = 1 }, .step = { .f = 1.0f/255.0f } },
[LVL_RF] = { .min = { .f = 0 }, .max = { .f = 1 }, .step = { .f = 1.0f/255.0f } },
- [LVL_RFPOWER] = { .min = { .f = .05 }, .max = { .f = 1 }, .step = { .f = 1.0f/100.0f } },
+ [LVL_RFPOWER] = { .min = { .f = 5.0/255.0 }, .max = { .f = 1 }, .step = { .f = 1.0f/255.0f } },
[LVL_RFPOWER_METER] = { .min = { .f = 0 }, .max = { .f = 1 }, .step = { .f = 1.0f/255.0f } },
[LVL_COMP_METER] = { .min = { .f = 0 }, .max = { .f = 1 }, .step = { .f = 1.0f/255.0f } },
[LVL_ID_METER] = { .min = { .f = 0 }, .max = { .f = 1 }, .step = { .f = 1.0f/255.0f } },
diff --git a/rigs/yaesu/newcat.c b/rigs/yaesu/newcat.c
index e990624e5..2fd09f867 100644
--- a/rigs/yaesu/newcat.c
+++ b/rigs/yaesu/newcat.c
@@ -3999,7 +3999,6 @@ int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
struct newcat_priv_data *priv = (struct newcat_priv_data *)rig->state.priv;
int err;
int i;
- int scale;
int fpf;
char main_sub_vfo = '0';
char *format;
@@ -4035,26 +4034,16 @@ int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
RETURNFUNC(-RIG_ENAVAIL);
}
- if (is_ft950 || is_ftdx1200 || is_ftdx3000 || is_ft891 || is_ft991 || is_ft710
- || is_ftdx101d || is_ftdx101mp || is_ftdx10)
- {
- scale = 100.;
- }
- else if (is_ft450 && newcat_get_rigid(rig) == NC_RIGID_FT450D)
- {
- scale = 100.;
- }
- else if (is_ftdx3000dm)
- {
- scale = 50;
- }
- else
- {
- scale = 255.;
- }
-
- fpf = newcat_scale_float(scale, val.f);
+ if ( is_ftdx3000dm ) /* No separate rig->caps for this rig :-( */
+ {
+ fpf = (int)((val.f * 50.0f) + 0.5f);
+ }
+ else
+ {
+ fpf = (int)((val.f / level_info->step.f) + 0.5f );
+ }
+ //TODO Remove when global level checking enabled
if (is_ft950 || is_ft891 || is_ft991 || is_ftdx3000 || is_ftdx3000dm
|| is_ftdx101d
|| is_ftdx101mp || is_ftdx10)
@@ -4065,6 +4054,7 @@ int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
fpf = 5;
}
}
+ //endTODO
SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "PC%03d%c", fpf, cat_term);
break;
@@ -4880,7 +4870,6 @@ int newcat_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
int ret_data_len;
char *retlvl;
int retlvl_len;
- float scale;
char main_sub_vfo = '0';
int i;
gran_t *level_info;
@@ -5436,25 +5425,6 @@ int newcat_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
switch (level)
{
- case RIG_LEVEL_RFPOWER:
- if (is_ft950 || is_ftdx1200 || is_ftdx3000 || is_ftdx3000dm || is_ft891
- || is_ft991 || is_ft710
- || is_ftdx101d || is_ftdx101mp || is_ftdx10)
- {
- scale = 100.;
- }
- else if (is_ft450 && newcat_get_rigid(rig) == NC_RIGID_FT450D)
- {
- scale = 100.;
- }
- else
- {
- scale = 255.;
- }
-
- val->f = (float)atoi(retlvl) / scale;
- break;
-
case RIG_LEVEL_SWR:
if (retlvl_len > 3)
{
@@ -5597,6 +5567,7 @@ int newcat_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
case RIG_LEVEL_ANTIVOX:
case RIG_LEVEL_MICGAIN:
case RIG_LEVEL_VOXGAIN:
+ case RIG_LEVEL_RFPOWER:
case RIG_LEVEL_MONITOR_GAIN:
val->f = (float)atoi(retlvl) * level_info->step.f;
break;
diff --git a/rigs/yaesu/yaesu.c b/rigs/yaesu/yaesu.c
index e1e0d7633..19aec375e 100644
--- a/rigs/yaesu/yaesu.c
+++ b/rigs/yaesu/yaesu.c
@@ -72,6 +72,8 @@ DECLARE_INITRIG_BACKEND(yaesu)
ft450d_caps = ft450_caps;
ft450d_caps.rig_model = RIG_MODEL_FT450D;
ft450d_caps.model_name = "FT-450D";
+ ft450d_caps.level_gran[LVL_RFPOWER].min.f = .05;
+ ft450d_caps.level_gran[LVL_RFPOWER].step.f = 1.0f/100.0f;
rig_register(&ft100_caps);
rig_register(&ft450_caps);
rig_register(&ft450d_caps);
commit 915ee383fbe28806b10744eba744201579c5fa35
Author: George Baltz N3GB <Geo...@gm...>
Date: Sun Jul 30 11:14:01 2023 -0400
Convert MONITOR_GAIN
diff --git a/rigs/yaesu/ft1200.c b/rigs/yaesu/ft1200.c
index 81e98000d..39477ff40 100644
--- a/rigs/yaesu/ft1200.c
+++ b/rigs/yaesu/ft1200.c
@@ -176,6 +176,7 @@ const struct rig_caps ftdx1200_caps =
// cppcheck-suppress *
[LVL_NOTCHF] = { .min = { .i = 1 }, .max = { .i = 4000 }, .step = { .i = 10 } },
[LVL_MICGAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
+ [LVL_MONITOR_GAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
},
.ctcss_list = common_ctcss_list,
.dcs_list = NULL,
diff --git a/rigs/yaesu/ft3000.c b/rigs/yaesu/ft3000.c
index 2070e672e..6973de01a 100644
--- a/rigs/yaesu/ft3000.c
+++ b/rigs/yaesu/ft3000.c
@@ -271,6 +271,7 @@ const struct rig_caps ftdx3000_caps =
#include "level_gran_yaesu.h"
[LVL_NOTCHF] = { .min = { .i = 1 }, .max = { .i = 4000 }, .step = { .i = 10 } },
[LVL_MICGAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
+ [LVL_MONITOR_GAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
},
.ctcss_list = common_ctcss_list,
.dcs_list = NULL,
diff --git a/rigs/yaesu/ft710.c b/rigs/yaesu/ft710.c
index 8cd55f461..5c7ada307 100644
--- a/rigs/yaesu/ft710.c
+++ b/rigs/yaesu/ft710.c
@@ -147,6 +147,7 @@ const struct rig_caps ft710_caps =
#include "level_gran_yaesu.h"
[LVL_MICGAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
[LVL_SQL] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
+ [LVL_MONITOR_GAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
},
.ctcss_list = common_ctcss_list,
.dcs_list = NULL,
diff --git a/rigs/yaesu/ft891.c b/rigs/yaesu/ft891.c
index 0ff29cb9b..0f2229a6e 100644
--- a/rigs/yaesu/ft891.c
+++ b/rigs/yaesu/ft891.c
@@ -160,6 +160,7 @@ const struct rig_caps ft891_caps =
[LVL_RF] = { .min = { .f = 0 }, .max = { .f = 1.0f }, .step = { .f = 1.0f/30.0f } },
[LVL_MICGAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
[LVL_SQL] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
+ [LVL_MONITOR_GAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
},
.ctcss_list = common_ctcss_list,
.dcs_list = NULL,
diff --git a/rigs/yaesu/ft991.c b/rigs/yaesu/ft991.c
index 85738ba1d..7c5b27bc0 100644
--- a/rigs/yaesu/ft991.c
+++ b/rigs/yaesu/ft991.c
@@ -165,6 +165,7 @@ const struct rig_caps ft991_caps =
#include "level_gran_yaesu.h"
[LVL_MICGAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
[LVL_SQL] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
+ [LVL_MONITOR_GAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
},
.ctcss_list = common_ctcss_list,
.dcs_list = common_dcs_list,
diff --git a/rigs/yaesu/ftdx10.c b/rigs/yaesu/ftdx10.c
index 716bf6e35..35ae64b82 100644
--- a/rigs/yaesu/ftdx10.c
+++ b/rigs/yaesu/ftdx10.c
@@ -163,6 +163,7 @@ const struct rig_caps ftdx10_caps =
#include "level_gran_yaesu.h"
[LVL_MICGAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
[LVL_SQL] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
+ [LVL_MONITOR_GAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
},
.ctcss_list = common_ctcss_list,
.dcs_list = NULL,
diff --git a/rigs/yaesu/ftdx101.c b/rigs/yaesu/ftdx101.c
index d40bf972f..d06b384b4 100644
--- a/rigs/yaesu/ftdx101.c
+++ b/rigs/yaesu/ftdx101.c
@@ -163,6 +163,7 @@ const struct rig_caps ftdx101d_caps =
#include "level_gran_yaesu.h"
[LVL_MICGAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
[LVL_SQL] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
+ [LVL_MONITOR_GAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
},
.ctcss_list = common_ctcss_list,
.dcs_list = NULL,
diff --git a/rigs/yaesu/ftdx101mp.c b/rigs/yaesu/ftdx101mp.c
index 1840ec1b9..9ef8d46d9 100644
--- a/rigs/yaesu/ftdx101mp.c
+++ b/rigs/yaesu/ftdx101mp.c
@@ -100,6 +100,7 @@ const struct rig_caps ftdx101mp_caps =
#include "level_gran_yaesu.h"
[LVL_MICGAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
[LVL_SQL] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
+ [LVL_MONITOR_GAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
},
.ctcss_list = common_ctcss_list,
.dcs_list = NULL,
diff --git a/rigs/yaesu/level_gran_yaesu.h b/rigs/yaesu/level_gran_yaesu.h
index d0e9c52a5..7fdb383ff 100644
--- a/rigs/yaesu/level_gran_yaesu.h
+++ b/rigs/yaesu/level_gran_yaesu.h
@@ -35,7 +35,7 @@
[LVL_VD_METER] = { .min = { .f = 0 }, .max = { .f = 1 }, .step = { .f = 1.0f/255.0f } },
[LVL_SQL] = { .min = { .f = 0 }, .max = { .f = 1 }, .step = { .f = 1.0f/255.0f } },
[LVL_MICGAIN] = { .min = { .f = 0 }, .max = { .f = 1 }, .step = { .f = 1.0f/255.0f } },
- [LVL_MONITOR_GAIN] = { .min = { .f = 0 }, .max = { .f = 1 }, .step = { .f = 1.0f/100.0f } },
+ [LVL_MONITOR_GAIN] = { .min = { .f = 0 }, .max = { .f = 1 }, .step = { .f = 1.0f/255.0f } },
[LVL_COMP] = { .min = { .f = 0 }, .max = { .f = 1 }, .step = { .f = 1.0f/100.0f } },
[LVL_VOXGAIN] = { .min = { .f = 0 }, .max = { .f = 1 }, .step = { .f = 1.0f/100.0f } },
[LVL_ANTIVOX] = { .min = { .f = 0 }, .max = { .f = 1 }, .step = { .f = 1.0f/100.0f } },
diff --git a/rigs/yaesu/newcat.c b/rigs/yaesu/newcat.c
index a8c8fcf82..e990624e5 100644
--- a/rigs/yaesu/newcat.c
+++ b/rigs/yaesu/newcat.c
@@ -4799,19 +4799,10 @@ int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
RETURNFUNC(-RIG_ENAVAIL);
}
+ //TODO Remove when full level checking enabled
if (val.f > 1.0) { RETURNFUNC(-RIG_EINVAL); }
- if (is_ftdx1200 || is_ftdx3000 || is_ftdx3000dm || is_ft891 || is_ft991 || is_ft710
- || is_ftdx101d
- || is_ftdx101mp
- || is_ftdx10)
- {
- fpf = newcat_scale_float(100, val.f);
- }
- else
- {
- fpf = newcat_scale_float(255, val.f);
- }
+ fpf = (int)((val.f / level_info->step.f) + 0.5f);
if (is_ftdx9000)
{
@@ -5606,6 +5597,7 @@ int newcat_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
case RIG_LEVEL_ANTIVOX:
case RIG_LEVEL_MICGAIN:
case RIG_LEVEL_VOXGAIN:
+ case RIG_LEVEL_MONITOR_GAIN:
val->f = (float)atoi(retlvl) * level_info->step.f;
break;
@@ -5882,21 +5874,6 @@ int newcat_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
val->i = atoi(retlvl) * 10;
break;
- case RIG_LEVEL_MONITOR_GAIN:
- if (is_ftdx1200 || is_ftdx3000 || is_ftdx3000dm || is_ft891 || is_ft991 || is_ft710
- || is_ftdx101d
- || is_ftdx101mp)
- {
- scale = 100.;
- }
- else
- {
- scale = 255.;
- }
-
- val->f = ((float) atoi(retlvl)) / scale;
- break;
-
case RIG_LEVEL_NB:
// Do not scale the value, level maximum value is set to 10
val->f = (float) atoi(retlvl);
commit cbec337cd3f5cbaa9263a84139b4c29c81d48891
Author: George Baltz N3GB <Geo...@gm...>
Date: Sat Jul 29 11:31:12 2023 -0400
Convert SQL to use level_gran data.
diff --git a/rigs/yaesu/ft710.c b/rigs/yaesu/ft710.c
index 8c850a42b..8cd55f461 100644
--- a/rigs/yaesu/ft710.c
+++ b/rigs/yaesu/ft710.c
@@ -146,6 +146,7 @@ const struct rig_caps ft710_caps =
{
#include "level_gran_yaesu.h"
[LVL_MICGAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
+ [LVL_SQL] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
},
.ctcss_list = common_ctcss_list,
.dcs_list = NULL,
diff --git a/rigs/yaesu/ft891.c b/rigs/yaesu/ft891.c
index 9ce50b719..0ff29cb9b 100644
--- a/rigs/yaesu/ft891.c
+++ b/rigs/yaesu/ft891.c
@@ -159,6 +159,7 @@ const struct rig_caps ft891_caps =
// cppcheck-suppress *
[LVL_RF] = { .min = { .f = 0 }, .max = { .f = 1.0f }, .step = { .f = 1.0f/30.0f } },
[LVL_MICGAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
+ [LVL_SQL] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
},
.ctcss_list = common_ctcss_list,
.dcs_list = NULL,
diff --git a/rigs/yaesu/ft991.c b/rigs/yaesu/ft991.c
index 6dfd39d66..85738ba1d 100644
--- a/rigs/yaesu/ft991.c
+++ b/rigs/yaesu/ft991.c
@@ -164,6 +164,7 @@ const struct rig_caps ft991_caps =
.level_gran = {
#include "level_gran_yaesu.h"
[LVL_MICGAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
+ [LVL_SQL] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
},
.ctcss_list = common_ctcss_list,
.dcs_list = common_dcs_list,
diff --git a/rigs/yaesu/ftdx10.c b/rigs/yaesu/ftdx10.c
index 7f9574c84..716bf6e35 100644
--- a/rigs/yaesu/ftdx10.c
+++ b/rigs/yaesu/ftdx10.c
@@ -162,6 +162,7 @@ const struct rig_caps ftdx10_caps =
{
#include "level_gran_yaesu.h"
[LVL_MICGAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
+ [LVL_SQL] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
},
.ctcss_list = common_ctcss_list,
.dcs_list = NULL,
diff --git a/rigs/yaesu/ftdx101.c b/rigs/yaesu/ftdx101.c
index cfa8757ce..d40bf972f 100644
--- a/rigs/yaesu/ftdx101.c
+++ b/rigs/yaesu/ftdx101.c
@@ -162,6 +162,7 @@ const struct rig_caps ftdx101d_caps =
{
#include "level_gran_yaesu.h"
[LVL_MICGAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
+ [LVL_SQL] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
},
.ctcss_list = common_ctcss_list,
.dcs_list = NULL,
diff --git a/rigs/yaesu/ftdx101mp.c b/rigs/yaesu/ftdx101mp.c
index 1eca8de1f..1840ec1b9 100644
--- a/rigs/yaesu/ftdx101mp.c
+++ b/rigs/yaesu/ftdx101mp.c
@@ -99,6 +99,7 @@ const struct rig_caps ftdx101mp_caps =
.level_gran = {
#include "level_gran_yaesu.h"
[LVL_MICGAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
+ [LVL_SQL] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } },
},
.ctcss_list = common_ctcss_list,
.dcs_list = NULL,
diff --git a/rigs/yaesu/level_gran_yaesu.h b/rigs/yaesu/level_gran_yaesu.h
index d99905a34..d0e9c52a5 100644
--- a/rigs/yaesu/level_gran_yaesu.h
+++ b/rigs/yaesu/level_gran_yaesu.h
@@ -33,7 +33,7 @@
[LVL_COMP_METER] = { .min = { .f = 0 }, .max = { .f = 1 }, .step = { .f = 1.0f/255.0f } },
[LVL_ID_METER] = { .min = { .f = 0 }, .max = { .f = 1 }, .step = { .f = 1.0f/255.0f } },
[LVL_VD_METER] = { .min = { .f = 0 }, .max = { .f = 1 }, .step = { .f = 1.0f/255.0f } },
- [LVL_SQL] = { .min = { .f = 0 }, .max = { .f = 1 }, .step = { .f = 1.0f/100.0f } },
+ [LVL_SQL] = { .min = { .f = 0 }, .max = { .f = 1 }, .step = { .f = 1.0f/255.0f } },
[LVL_MICGAIN] = { .min = { .f = 0 }, .max = { .f = 1 }, .step = { .f = 1.0f/255.0f } },
[LVL_MONITOR_GAIN] = { .min = { .f = 0 }, .max = { .f = 1 }, .step = { .f = 1.0f/100.0f } },
[LVL_COMP] = { .min = { .f = 0 }, .max = { .f = 1 }, .step = { .f = 1.0f/100.0f } },
diff --git a/rigs/yaesu/newcat.c b/rigs/yaesu/newcat.c
index 5ccee0253..a8c8fcf82 100644
--- a/rigs/yaesu/newcat.c
+++ b/rigs/yaesu/newcat.c
@@ -4615,16 +4615,7 @@ int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
RETURNFUNC(-RIG_ENAVAIL);
}
- if (is_ft891 || is_ft991 || is_ft710 || is_ftdx101d || is_ftdx101mp || is_ftdx10)
- {
- scale = 100;
- }
- else
- {
- scale = 255;
- }
-
- fpf = newcat_scale_float(scale, val.f);
+ fpf = (int) ((val.f / level_info->step.f) + 0.5f );
SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "SQ%c%03d%c", main_sub_vfo, fpf,
cat_term);
@@ -5610,6 +5601,7 @@ int newcat_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
case RIG_LEVEL_AF:
case RIG_LEVEL_RF:
+ case RIG_LEVEL_SQL:
case RIG_LEVEL_COMP:
case RIG_LEVEL_ANTIVOX:
case RIG_LEVEL_MICGAIN:
@@ -5617,19 +5609,6 @@ int newcat_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
val->f = (float)atoi(retlvl) * level_info->step.f;
break;
- case RIG_LEVEL_SQL:
- if (is_ft891 || is_ft991 || is_ft710 || is_ftdx101d || is_ftdx101mp || is_ftdx10)
- {
- scale = 100.;
- }
- else
- {
- scale = 255.;
- }
-
- val->f = (float)atoi(retlvl) / scale;
- break;
-
case RIG_LEVEL_BKINDL:
{
int raw_value = atoi(retlvl);
commit 90f0ffcdc9b9298728cd70864a500ff7c5a21f48
Author: Mike Black W9MDB <mdb...@ya...>
Date: Thu Aug 3 08:14:15 2023 -0500
Add simts950 simts990
diff --git a/simulators/Makefile.am b/simulators/Makefile.am
index 923ac3790..5fb482e10 100644
--- a/simulators/Makefile.am
+++ b/simulators/Makefile.am
@@ -8,7 +8,7 @@ DISTCLEANFILES =
bin_PROGRAMS =
-check_PROGRAMS = simelecraft simicgeneric simkenwood simyaesu simic9100 simic9700 simft991 simftdx1200 simftdx3000 simjupiter simpowersdr simid5100 simft736 simftdx5000 simtmd700 simrotorez simspid simft817 simts590 simft847 simic7300 simic7000 simic7100 simic7200 simatd578 simic905 simts450 simic7600 simic7610 simic705
+check_PROGRAMS = simelecraft simicgeneric simkenwood simyaesu simic9100 simic9700 simft991 simftdx1200 simftdx3000 simjupiter simpowersdr simid5100 simft736 simftdx5000 simtmd700 simrotorez simspid simft817 simts590 simft847 simic7300 simic7000 simic7100 simic7200 simatd578 simic905 simts450 simic7600 simic7610 simic705 simts950 simts990
simelecraft_SOURCES = simelecraft.c
simkenwood_SOURCES = simkenwood.c
diff --git a/simulators/simts950.c b/simulators/simts950.c
new file mode 100644
index 000000000..54847ea02
--- /dev/null
+++ b/simulators/simts950.c
@@ -0,0 +1,425 @@
+// can run this using rigctl/rigctld and socat pty devices
+// gcc -o simyaesu simyaesu.c
+#define _XOPEN_SOURCE 700
+// since we are POSIX here we need this
+struct ip_mreq
+{
+ int dummy;
+};
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include <string.h>
+#include <unistd.h>
+#include <hamlib/rig.h>
+
+#define BUFSIZE 256
+
+int mysleep = 20;
+
+float freqA = 14074000;
+float freqB = 14074500;
+int filternum1 = 7;
+int filternum2 = 8;
+int datamode = 0;
+int vfo, vfo_tx, ptt, ptt_data, ptt_mic, ptt_tune;
+
+int
+getmyline(int fd, char *buf)
+{
+ char c;
+ int i = 0;
+ memset(buf, 0, BUFSIZE);
+
+ while (read(fd, &c, 1) > 0)
+ {
+ buf[i++] = c;
+
+ if (c == ';') { return strlen(buf); }
+ }
+
+ return strlen(buf);
+}
+
+#if defined(WIN32) || defined(_WIN32)
+int openPort(char *comport) // doesn't matter for using pts devices
+{
+ int fd;
+ fd = open(comport, O_RDWR);
+
+ if (fd < 0)
+ {
+ perror(comport);
+ }
+
+ return fd;
+}
+
+#else
+int openPort(char *comport) // doesn't matter for using pts devices
+{
+ int fd = posix_openpt(O_RDWR);
+ char *name = ptsname(fd);
+
+ if (name == NULL)
+ {
+ perror("pstname");
+ return -1;
+ }
+
+ printf("name=%s\n", name);
+
+ if (fd == -1 || grantpt(fd) == -1 || unlockpt(fd) == -1)
+ {
+ perror("posix_openpt");
+ return -1;
+ }
+
+ return fd;
+}
+#endif
+
+
+
+int main(int argc, char *argv[])
+{
+ char buf[256];
+ char *pbuf;
+ int n;
+ int fd = openPort(argv[1]);
+ int freqa = 14074000, freqb = 140735000;
+ int modeA = 1, modeB = 2;
+
+ while (1)
+ {
+ buf[0] = 0;
+
+ if (getmyline(fd, buf) > 0) { printf("Cmd:%s\n", buf); }
+
+// else { return 0; }
+
+ if (strcmp(buf, "RM5;") == 0)
+ {
+ printf("%s\n", buf);
+ hl_usleep(mysleep * 1000);
+ pbuf = "RM5100000;";
+ n = write(fd, pbuf, strlen(pbuf));
+// printf("n=%d\n", n);
+
+ if (n <= 0) { perror("RM5"); }
+ }
+
+ else if (strcmp(buf, "AN0;") == 0)
+ {
+ printf("%s\n", buf);
+ hl_usleep(mysleep * 1000);
+ pbuf = "AN030;";
+ n = write(fd, pbuf, strlen(pbuf));
+// printf("n=%d\n", n);
+
+ if (n <= 0) { perror("AN"); }
+ }
+ else if (strcmp(buf, "IF;") == 0)
+ {
+ char ifbuf[256];
+ printf("%s\n", buf);
+ hl_usleep(mysleep * 1000);
+// pbuf = "IF000503130001000+0000000000030000000;"
+ sprintf(ifbuf, "IF%011d1000+0000002000000000000;", freqa);
+ //pbuf = "IF00010138698 +00000000002000000 ;
+ n = write(fd, ifbuf, strlen(ifbuf));
+// printf("n=%d\n", n);
+
+ if (n <= 0) { perror("IF"); }
+
+ continue;
+ }
+ else if (strcmp(buf, "NB;") == 0)
+ {
+ hl_usleep(mysleep * 1000);
+ pbuf = "NB0;";
+ n = write(fd, pbuf, strlen(pbuf));
+ continue;
+ }
+ else if (strcmp(buf, "RA;") == 0)
+ {
+ hl_usleep(mysleep * 1000);
+ pbuf = "RA01;";
+ n = write(fd, pbuf, strlen(pbuf));
+ continue;
+ }
+ else if (strcmp(buf, "RG;") == 0)
+ {
+ hl_usleep(mysleep * 1000);
+ pbuf = "RG055;";
+ n = write(fd, pbuf, strlen(pbuf));
+ continue;
+ }
+ else if (strcmp(buf, "MG;") == 0)
+ {
+ hl_usleep(mysleep * 1000);
+ pbuf = "MG050;";
+ n = write(fd, pbuf, strlen(pbuf));
+ continue;
+ }
+ else if (strcmp(buf, "AG;") == 0)
+ {
+ hl_usleep(mysleep * 1000);
+ pbuf = "AG100;";
+ n = write(fd, pbuf, strlen(pbuf));
+ continue;
+ }
+ else if (strcmp(buf, "FV;") == 0)
+ {
+ hl_usleep(mysleep * 1000);
+ pbuf = "FV1.2;";
+ n = write(fd, pbuf, strlen(pbuf));
+ continue;
+ }
+ else if (strncmp(buf, "IS;", 3) == 0)
+ {
+ SNPRINTF(buf, siz...
[truncated message content] |
|
From: n0nb <n0...@us...> - 2023-08-02 21:30:02
|
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 56de3bb25d0e0c9919681c86ec3c2c235697d381 (commit)
via 942e4cd950e01e06d9a60708153435803ccee504 (commit)
via 232d7626cc75b55a5db193e683e63c61cc5fcae7 (commit)
via 2709be053ccca3c109ac0dfc3bfba85e8986fd2a (commit)
via e155dfbf5e37f7d52075e643c566219f3fbee34c (commit)
via 6c794a17bdb9e11f97b3923298aaf79efdb41310 (commit)
via 428500bb1c79d783d19e9f6840bb1a10761e3b97 (commit)
via 6ef0f32d56aabc9d62a90496c60e53b6a1a31bff (commit)
via 89797e5a54f2db8dd721f62c1afd9bf3015e50c1 (commit)
via c452cd31d904c05236329e26e03d793e8683c088 (commit)
via 801d34e3fba7e94bb738aed32ba7b91c06dcbcbd (commit)
via d9b1cfb4047c9b94700340a66fc6b1cb3b543f1c (commit)
via 5446b2c99dc5e2da5b1d0593b19fa15aaf0aaf5a (commit)
via 71629cf2f323f5121d7cb69fd198c3cd8e30b481 (commit)
via c251a075abcaebd8b2222f9e5e02fe5ae5d81e4b (commit)
via ddb128bbf74570addd7296afcf9e42eaabff8698 (commit)
via 006f724dae6c992373779b28547e8daf9022a3cd (commit)
via b4ddf64b311f31db08f094893b633059ea2434a6 (commit)
via 21c5c3f419ad2a0f485176d725a2a454f3795395 (commit)
via 2852fba73fa705a8a97ed5c580df2970cee5b3b0 (commit)
via b24cad1278520e18576476e2236bdf5e97895f41 (commit)
via bd1fcbe025bc2e88c08cf26d2b6a6faa8c718f95 (commit)
via ebb6efba8d3a6c67ccfc062e4d90f3a0859022da (commit)
via 1260921daf4db98f6511c6196af6f41942d050a1 (commit)
via 192b5fe7a542c886e90e62488bdee4b0bf49bb92 (commit)
via 342e082fbbefa314dac2b0d2b6270a335fd18db7 (commit)
via 2ccac887d26422363863edf247fc4dbc39f09b7b (commit)
via 2f3c632ff651f6cf230713ab52e0ab100c2674d8 (commit)
via bb260d264061745e41a5d9686acaf09bffabdd9d (commit)
via d1106cae8bc59df8ccfdae855dc39601699ee0c9 (commit)
via a975a6e8a6faba510df5c2db5ac3bc1d981712be (commit)
via ee5b96443f8f367b52040b257e4f81481c310810 (commit)
via 13a8c0fb1d4350eea65a701b43a95cea37d92ef4 (commit)
via bf3ac3bbecaca170fcfaab39a08ed55bc8cf3603 (commit)
via 00d94d410fdf427d969b57ae436849b135796dda (commit)
via 802892887af132b1e41af447cf893ed9c905c7f4 (commit)
via bbdd1dc31211126fa7627b18c3bf4f6f556571ef (commit)
via fcba1cab20e68da2b9d2e6fbf164bacc99dfc091 (commit)
via da96315dc527d34eade1d5a1e718de98d6f53af2 (commit)
via 2c40ebcbc16bd9bdc44270c36ece70312acaf792 (commit)
via 09143fcff9e6c2e3acbc84da9b34a25a840e2c1f (commit)
via f5b4cd6047d92ba1f932c5f599597c2de8b8c5ae (commit)
via 557e9a71e5620b6fe466cc6e6d51188af4822840 (commit)
via 75569ab3f2ab84af16873d38ae79d9e003e1d9f4 (commit)
via 23639557a0f58b10670bf8edf7b5ed7124bfbe7e (commit)
via c288dacb5429a21e481bffc29c857a24b526ba8c (commit)
via d02b9f02b1113171f4863b89bb3c7f7fe1cbc204 (commit)
via ca3f19fbd6ea69ed38443a93a4da6c88ba0cef5d (commit)
via 9c246ed3fb7b5546038d4d509a1d3551c7db7c3c (commit)
via 448c41978f991f252b7f5a868cffbb2c4825678a (commit)
via 9ad070c33f9e2bf8d1bc17e0bae91b2588f80a02 (commit)
via d28ce6b798f460c54bdc0358e8bb96d6e83d263f (commit)
via c9fc80fea1fc7d7b077547e1bb6e2625b0de7952 (commit)
via d8d716f0f2e20e3e86b459da5c9ab3088de8ffde (commit)
via f48f6152ff639d58c39429793e428fe848bb540a (commit)
via c5cc47dcd15b79bf1389e14091d4e1fec031317e (commit)
via ef4489172abfb3288daa4ebe7b38564b24c8ce35 (commit)
via 9b89e3fe2359081a476c1aa774ed7ff1f1762ab6 (commit)
via 8fe3080139b9686f41fa34a19e904f5666d9f841 (commit)
via aacf060e11b5fefba5a6a3aa63263f77277b8702 (commit)
via 7adc91d0ead5fb9541f8396f20527738d0a032a3 (commit)
via f33fa95d8d892d6fae674c8c70fd331409b48ff0 (commit)
via 2da6c400f7a423be9d4992e0bffaa7810be17283 (commit)
via 2f838f22644fce9577362b04d5302a0cf2c34908 (commit)
via c17b5da379f61292df5fc221b5b495f33276f91c (commit)
via 1688f25ed58b0dfc6dba13c988e77fcec29e8f33 (commit)
via 4c8994d90551af96d7efed4a8fe3b94061d8ca7e (commit)
via d0eed2b412cf621babbded446136c135f5fa4095 (commit)
via 17c7c4d68f3418d16243dcd5db4863e6b88333b5 (commit)
via 8161cda2fc9cc4ac010741438e54b14e3d36cf38 (commit)
via df9d9dfbd155482d2d70007c28c6c262e290857a (commit)
via 64cb40f06671ca1a87cd87dfb2b7f399fbfddeda (commit)
via 2c834867750d6681a0ba40fdfe1145e627fa306b (commit)
via 3a3c51bcf69d83455818f1afe17d4e876e956676 (commit)
via 1fdc3f3eaf69407704efa1c1e785cc4460d95045 (commit)
via 2395d37afde737622d9aca1b8522f2df2b59154f (commit)
via 79737df92ac8c187678bfd699b17ac06e27a7bdf (commit)
via d6b8575eb34972e8c48f892cf033e0ca1c8ac954 (commit)
via 0540fa4f129364e376094d0bcb20124c9e1a393b (commit)
via c1212b5bf398a632f4a23f0bba561cf80fb15060 (commit)
via 0a9796f2e732348f68e881f875ee58301a05d614 (commit)
via daa86f5b7a0c46cdc795d160b23c4390a0e6e7e9 (commit)
via d0fba93c654bcbdc4e9c06f0bb78e4288b99f63a (commit)
via ebc10b84f4885eff15b1ea0d4027a5de8ee4a155 (commit)
via f7bed3320ec1501f98cf137e0b99054fb0de9dcb (commit)
via b58c0a0fa473b4c0097babe7b6f3ca14a97bb31a (commit)
via 56ad3ac1ef3d507a5b78976abd5d1343d87f8462 (commit)
via 983a9fae0b8e0bc65fba828a267e55812ff10439 (commit)
via 330322e745a005d917f7a55761f5e1c1044e5eb0 (commit)
via 876e79c34df6458ae80124b8e667d78a972bb8e0 (commit)
via 015de3b5a454e0fd3031090def00cf249c5b56ea (commit)
via 5df0ae02f130a9b159c399d9bfd36a61d7523603 (commit)
via 52df1e4f0abf76d4c323dbeb1f19cf14782b48dc (commit)
via 3814224c89a39e87a5fb1177ec0895863949d351 (commit)
via 9b04338080624117277befb5b038da1c7527f4fb (commit)
via e167d0f1a07bf16cd14738cc772e7b268afc6075 (commit)
via 7962a51f051d8f77067c91becd3b1b48b5d71d52 (commit)
via 902cfd708f4064b91fd8da1be7c03159772ae139 (commit)
via 932cca4c8419c8698aa13157c3b9ea1ea297800c (commit)
via d834a5a50dabe000bc576d74b954878b547257ba (commit)
via 8cd135e2cea9f1d4a7d537cd56a9faac0092543a (commit)
via 685f8c38621fab8cfffdc1b6ab47371b4316ffe0 (commit)
via a2c7227676ac23c5c04d2904bbaba0570d699f7b (commit)
via a360d2aaeca4365a72a6541180c6711451f57c82 (commit)
via f3941cdf62ce6f7563798a3e9b06470cd0b7f82a (commit)
via 2204ebef563166c64744e1b387648b4847c0c5f0 (commit)
via ecf914fca9c5b7c7aa9593a1817d0f77bce9cfcc (commit)
via 71f4e47006cc6c7614589be242bde4e2431f91ad (commit)
via 820549faf6e4dfe4779973c857605c359ecc8594 (commit)
via 8a99adc5eb6b3a60324825f393776206addae332 (commit)
via c4aa3c51f950a6679f2ed3cae6c3f3269ae6b35c (commit)
via 3821ef92fa294d1a58de142dd722ba830ef9ad45 (commit)
via c7e73ddf8f8abd7b2c135a1b60b718793b3f9dc1 (commit)
via c1829e3de0ffcd59128330bbc1635c5a3aba83e1 (commit)
via d54912e375cb0ad00acf8bd5b7ecdeabac6e5b8d (commit)
via 5a8bd96427df6dfe34e6d0746c6a92b845da8254 (commit)
via 778889e06ae20de8c55b78b402616c33640aece1 (commit)
via 0225d51a6094f4b4b902c07cbc4a773196b90971 (commit)
via 556e1dd198a088b70347b34a13fa088078e54188 (commit)
via 94cce7242825f4dcba5d037b592702c3fa0d236f (commit)
via 79657a4b4d4a7898bca0737a0c0ac5664ab1cdee (commit)
via 84048e3e947cad3b24d82ea538f5f65f4215d874 (commit)
via a5034b88aba921c1a741dde25b28bdb8e5500dbe (commit)
via b37e9877bd45cb57fb44164e535f6219f163f7dc (commit)
via 2ff99809f128dab0809c6dbca64387f798742672 (commit)
via bb9a93cc35f34dfbbc9e0b48bd495af2cdabf412 (commit)
via b2ea9da61c3b442daf8c75c74fe5cfa55a01a164 (commit)
via 649f09449a15d007cc3fd40f851c219d1402a654 (commit)
via 34fd238291958711735cd84448e2496fcf921959 (commit)
via 14cb2304b0ae083e2ef173c45674d64f802c4e1c (commit)
via fdc074e1b8ab27228dde95389d1714cc9addafff (commit)
via 04c65d9d7ebae3994d3a1d456d2ffb0ed8a1038a (commit)
via d22653a69df075257887d0607370c6f7a6f9b116 (commit)
via e9fd0fba401a6ed2d5cbde5905e2c64cbae21f51 (commit)
via 97c9cb1961d9bb08f562536351e5a34c57a9bb7f (commit)
via 1ddaf638565b186564f41705ca91918ea4713dd4 (commit)
via ebf054f4cc07b64344313a9646092ee60d700d28 (commit)
via c6d0365c3b6640fa732195adc5b74948e1e5e2e6 (commit)
via 9218d208ef0910018cc77e411184108e5b3c5622 (commit)
via 0e25df0b4eacfc5f4c6dfe9b5418486212e959ac (commit)
via 4aec46133750f55e13cb2b3310635f5c196c7460 (commit)
from ba9a1006e8fd905f3c16679649ddbc8226e4a5ea (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 56de3bb25d0e0c9919681c86ec3c2c235697d381
Author: Mike Black W9MDB <mdb...@ya...>
Date: Wed Aug 2 16:13:55 2023 -0500
Fix FTDX10 SM command
diff --git a/rigs/yaesu/newcat.c b/rigs/yaesu/newcat.c
index 4f81d6dc4..5ccee0253 100644
--- a/rigs/yaesu/newcat.c
+++ b/rigs/yaesu/newcat.c
@@ -5207,6 +5207,7 @@ int newcat_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
{
RETURNFUNC(-RIG_ENAVAIL);
}
+ if (is_ftdx10) { main_sub_vfo = '0'; }
SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "SM%c%c", main_sub_vfo,
cat_term);
commit 942e4cd950e01e06d9a60708153435803ccee504
Author: Mike Black W9MDB <mdb...@ya...>
Date: Wed Aug 2 16:09:32 2023 -0500
Fix get_level AF for FTDX10
diff --git a/rigs/yaesu/newcat.c b/rigs/yaesu/newcat.c
index 92f5ce325..4f81d6dc4 100644
--- a/rigs/yaesu/newcat.c
+++ b/rigs/yaesu/newcat.c
@@ -4952,6 +4952,7 @@ int newcat_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
{
RETURNFUNC(-RIG_ENAVAIL);
}
+ if (is_ftdx10) { main_sub_vfo = '0'; }
SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "AG%c%c", main_sub_vfo,
cat_term);
commit 232d7626cc75b55a5db193e683e63c61cc5fcae7
Author: Mike Black W9MDB <mdb...@ya...>
Date: Wed Aug 2 16:01:10 2023 -0500
Yaesu rigs (at least some of them cannot use MG command when in RTTY or CW mode
So we return RIG_OK for set which just ignores it and level=0 in this case
diff --git a/rigs/yaesu/newcat.c b/rigs/yaesu/newcat.c
index e1bdcb009..92f5ce325 100644
--- a/rigs/yaesu/newcat.c
+++ b/rigs/yaesu/newcat.c
@@ -4247,6 +4247,16 @@ int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
RETURNFUNC(-RIG_ENAVAIL);
}
+ rmode_t exclude = RIG_MODE_CW | RIG_MODE_CWR | RIG_MODE_RTTY | RIG_MODE_RTTYR;
+ if ((rig->state.tx_vfo == RIG_VFO_A && (rig->state.cache.modeMainA & exclude))
+ ||(rig->state.tx_vfo == RIG_VFO_B && (rig->state.cache.modeMainB & exclude))
+ ||(rig->state.tx_vfo == RIG_VFO_C && (rig->state.cache.modeMainC & exclude)))
+ {
+ rig_debug(RIG_DEBUG_VERBOSE, "%s: rig cannot set MG in CW/RTTY modes\n", __func__);
+ return RIG_OK;
+ }
+
+
if (is_ft991 || is_ft710 || is_ftdx3000 || is_ftdx3000dm || is_ftdx5000 || is_ftdx101d
|| is_ftdx101mp)
{
@@ -5035,6 +5045,15 @@ int newcat_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
{
RETURNFUNC(-RIG_ENAVAIL);
}
+ rmode_t exclude = RIG_MODE_CW | RIG_MODE_CWR | RIG_MODE_RTTY | RIG_MODE_RTTYR;
+ if ((rig->state.tx_vfo == RIG_VFO_A && (rig->state.cache.modeMainA & exclude))
+ ||(rig->state.tx_vfo == RIG_VFO_B && (rig->state.cache.modeMainB & exclude))
+ ||(rig->state.tx_vfo == RIG_VFO_C && (rig->state.cache.modeMainC & exclude)))
+ {
+ rig_debug(RIG_DEBUG_VERBOSE, "%s: rig cannot read MG in CW/RTTY modes\n", __func__);
+ level = 0;
+ return RIG_OK;
+ }
if (is_ft991 || is_ft710 || is_ftdx3000 || is_ftdx3000dm || is_ftdx5000 || is_ftdx101d
|| is_ftdx101mp)
commit 2709be053ccca3c109ac0dfc3bfba85e8986fd2a
Author: Mike Black W9MDB <mdb...@ya...>
Date: Wed Aug 2 15:25:44 2023 -0500
Fix new.cat EX030109 command
diff --git a/rigs/yaesu/newcat.c b/rigs/yaesu/newcat.c
index 2893a02c0..e1bdcb009 100644
--- a/rigs/yaesu/newcat.c
+++ b/rigs/yaesu/newcat.c
@@ -626,7 +626,7 @@ int newcat_open(RIG *rig)
else if (priv->rig_id == NC_RIGID_FTDX5000
|| rig->caps->rig_model == RIG_MODEL_FTDX5000) { cmd = "EX0331;EX033"; }
else if (priv->rig_id == NC_RIGID_FTDX10
- || rig->caps->rig_model == RIG_MODEL_FTDX10) { cmd = "EX03010901;EX030109;"; }
+ || rig->caps->rig_model == RIG_MODEL_FTDX10) { cmd = "EX0301091;EX030109;"; }
SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "%s", cmd);
diff --git a/rigs/yaesu/newcat.h b/rigs/yaesu/newcat.h
index 4fd014372..de1d49c7f 100644
--- a/rigs/yaesu/newcat.h
+++ b/rigs/yaesu/newcat.h
@@ -50,7 +50,7 @@
typedef char ncboolean;
/* shared function version */
-#define NEWCAT_VER "20230731"
+#define NEWCAT_VER "20230802"
/* Hopefully large enough for future use, 128 chars plus '\0' */
#define NEWCAT_DATA_LEN 129
commit e155dfbf5e37f7d52075e643c566219f3fbee34c
Author: Mike Black W9MDB <mdb...@ya...>
Date: Wed Aug 2 12:50:03 2023 -0500
Fix cppcheck errors
https://github.com/Hamlib/Hamlib/issues/1350
diff --git a/rigs/icom/ic7300.c b/rigs/icom/ic7300.c
index e47c3c848..39c9313ec 100644
--- a/rigs/icom/ic7300.c
+++ b/rigs/icom/ic7300.c
@@ -1832,8 +1832,8 @@ int ic7300_set_parm(RIG *rig, setting_t parm, value_t val)
int ic7300_get_parm(RIG *rig, setting_t parm, value_t *val)
{
unsigned char prmbuf[MAXFRAMELEN], resbuf[MAXFRAMELEN];
- int prm_len, res_len;
- int prm_cn, prm_sc;
+ int prm_len = 0, res_len;
+ int prm_cn = 0, prm_sc = 0;
int icom_val = 0;
int cmdhead;
int retval;
diff --git a/rigs/icom/ic765.c b/rigs/icom/ic765.c
index 9ce3d6586..eca4708c6 100644
--- a/rigs/icom/ic765.c
+++ b/rigs/icom/ic765.c
@@ -82,12 +82,9 @@ const struct rig_caps ic765_caps =
.has_set_level = RIG_LEVEL_NONE,
.has_get_parm = RIG_PARM_NONE,
.has_set_parm = RIG_PARM_NONE,
-#if 0
.level_gran =
{
-#include "level_gran_icom.h"
},
-#endif
.parm_gran = {},
.ctcss_list = NULL,
.dcs_list = NULL,
diff --git a/rigs/icom/ic821h.c b/rigs/icom/ic821h.c
index db5ac2c55..d6b9f5fdc 100644
--- a/rigs/icom/ic821h.c
+++ b/rigs/icom/ic821h.c
@@ -57,7 +57,7 @@ static const struct icom_priv_caps ic821h_priv_caps =
int ic821h_set_split_vfo(RIG *rig, vfo_t vfo, split_t split, vfo_t tx_vfo)
{
struct icom_priv_data *priv = (struct icom_priv_data *) rig->state.priv;
- int retval;
+ int retval = -RIG_EINTERNAL;
ENTERFUNC;
rig_debug(RIG_DEBUG_TRACE, "%s: vfo=%s, split=%d, tx_vfo=%s\n", __func__,
diff --git a/rigs/icom/icom.c b/rigs/icom/icom.c
index 78932cb60..8f2bc165a 100644
--- a/rigs/icom/icom.c
+++ b/rigs/icom/icom.c
@@ -8286,6 +8286,7 @@ int icom_get_powerstat(RIG *rig, powerstat_t *status)
RIG_POWER_ON : RIG_POWER_OFF;
}
+ HAMLIB_TRACE;
if (RIG_IS_IC2730
|| RIG_IS_IC705
|| RIG_IS_IC7100
@@ -8301,16 +8302,27 @@ int icom_get_powerstat(RIG *rig, powerstat_t *status)
freq_t freq;
short retry_save = rig->state.rigport.retry;
short timeout_retry_save = rig->state.rigport.timeout_retry;
+ HAMLIB_TRACE;
rig->state.rigport.retry = 0;
rig->state.rigport.timeout_retry = 0;
retval = rig_get_freq(rig, RIG_VFO_A, &freq);
+ if (retval == -RIG_ETIMEOUT)
+ { // then rig must be turned off
+ HAMLIB_TRACE;
+ rig_debug(RIG_DEBUG_WARN, "%s: get freq failed...assuming power is off\n", __func__);
+ rig->state.powerstat = RIG_POWER_OFF;
+ return RIG_OK; // returning RIG_OK here makes the rig->state reflect POWER_OFF
+ }
+ HAMLIB_TRACE;
+
rig->state.rigport.retry = retry_save;
rig->state.rigport.timeout_retry = timeout_retry_save;
*status = retval == RIG_OK ? RIG_POWER_ON : RIG_POWER_OFF;
+ rig->state.powerstat = *status;
return retval;
}
else
@@ -8318,6 +8330,12 @@ int icom_get_powerstat(RIG *rig, powerstat_t *status)
retval = icom_transaction(rig, C_SET_PWR, -1, NULL, 0,
ackbuf, &ack_len);
+ if (retval == -RIG_ETIMEOUT)
+ { // then rig must be turned off
+ rig_debug(RIG_DEBUG_WARN, "%s: get powerstat failed...assuming power is off\n", __func__);
+ rig->state.powerstat = RIG_POWER_OFF;
+ return RIG_OK; // returning RIG_OK here makes the rig->state reflect POWER_OFF
+ }
if (retval != RIG_OK)
{
RETURNFUNC(retval);
@@ -8551,7 +8569,7 @@ int icom_get_ant(RIG *rig, vfo_t vfo, ant_t ant, value_t *option,
ant_t *ant_curr, ant_t *ant_tx, ant_t *ant_rx)
{
unsigned char ackbuf[MAXFRAMELEN];
- int ack_len = sizeof(ackbuf), retval;
+ int ack_len = sizeof(ackbuf), retval = -RIG_EINTERNAL;
struct icom_priv_caps *priv_caps = (struct icom_priv_caps *) rig->caps->priv;
commit 6c794a17bdb9e11f97b3923298aaf79efdb41310
Author: Mike Black W9MDB <mdb...@ya...>
Date: Wed Aug 2 12:41:25 2023 -0500
Fix cppcheck errors
https://github.com/Hamlib/Hamlib/issues/1350
diff --git a/rigs/dummy/aclog.c b/rigs/dummy/aclog.c
index 8596d5c87..77a382801 100644
--- a/rigs/dummy/aclog.c
+++ b/rigs/dummy/aclog.c
@@ -738,7 +738,7 @@ static int aclog_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
char cmd[MAXCMDLEN];
char *p;
char *pttmode;
- char *ttmode;
+ char *ttmode = NULL;
struct aclog_priv_data *priv = (struct aclog_priv_data *) rig->state.priv;
ENTERFUNC;
diff --git a/rigs/dummy/flrig.c b/rigs/dummy/flrig.c
index bc5964043..5c793539d 100644
--- a/rigs/dummy/flrig.c
+++ b/rigs/dummy/flrig.c
@@ -1374,7 +1374,7 @@ static int flrig_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
char cmd_arg[MAXCMDLEN];
char *p;
char *pttmode;
- char *ttmode;
+ char *ttmode = NULL;
struct flrig_priv_data *priv = (struct flrig_priv_data *) rig->state.priv;
ENTERFUNC;
diff --git a/rigs/dummy/sdrsharp.c b/rigs/dummy/sdrsharp.c
index e47f694cb..530fb9b07 100644
--- a/rigs/dummy/sdrsharp.c
+++ b/rigs/dummy/sdrsharp.c
@@ -387,6 +387,8 @@ static int sdrsharp_open(RIG *rig)
char value[MAXARGLEN];
ENTERFUNC;
+ value[0] = '?';
+ value[1] = 0;
freq_t freq;
retval = sdrsharp_get_freq(rig, RIG_VFO_CURR, &freq);
diff --git a/rigs/dummy/tci1x.c b/rigs/dummy/tci1x.c
index 2fe040e0d..39bcaa19b 100644
--- a/rigs/dummy/tci1x.c
+++ b/rigs/dummy/tci1x.c
@@ -596,6 +596,8 @@ static int tci1x_open(RIG *rig)
char *p;
char *pr;
//struct tci1x_priv_data *priv = (struct tci1x_priv_data *) rig->state.priv;
+ arg[0] = '?';
+ arg[1] = 0;
rig_debug(RIG_DEBUG_VERBOSE, "%s: version %s\n", __func__, rig->caps->version);
char *websocket =
@@ -1097,7 +1099,7 @@ static int tci1x_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
char cmd_arg[MAXCMDLEN];
char *p;
char *pttmode;
- char *ttmode;
+ char *ttmode = NULL;
struct tci1x_priv_data *priv = (struct tci1x_priv_data *) rig->state.priv;
ENTERFUNC;
commit 428500bb1c79d783d19e9f6840bb1a10761e3b97
Author: Mike Black W9MDB <mdb...@ya...>
Date: Wed Aug 2 12:37:36 2023 -0500
Fix cppcheck error
https://github.com/Hamlib/Hamlib/issues/1350
diff --git a/lib/precise_time.c b/lib/precise_time.c
index c4e0ddb89..84b011c53 100644
--- a/lib/precise_time.c
+++ b/lib/precise_time.c
@@ -132,13 +132,16 @@ static int showme = 0;
#include <stdint.h>
static inline uint64_t rdtsc() {
- uint32_t hi, lo;
+ uint32_t hi, lo;
+ uint64_t hi64, lo64;
asm volatile("rdtscp\n"
"movl %%edx, %0\n"
"movl %%eax, %1\n"
"cpuid"
: "=r" (hi), "=r" (lo) : : "%rax", "%rbx", "%rcx", "%rdx");
- return (((uint64_t)hi) << 32) | (uint64_t)lo;
+ hi64 = hi;
+ lo64 = lo;
+ return (hi64 << 32) | lo64);
}
static uint64_t rdtsc_per_sec = 0;
commit 6ef0f32d56aabc9d62a90496c60e53b6a1a31bff
Author: Mike Black W9MDB <mdb...@ya...>
Date: Tue Aug 1 17:05:59 2023 -0500
Add KS to simftdx1200.v
diff --git a/simulators/simftdx1200.c b/simulators/simftdx1200.c
index eb88715ea..2255f55be 100644
--- a/simulators/simftdx1200.c
+++ b/simulators/simftdx1200.c
@@ -27,6 +27,7 @@ int ai = 0;
int sh = 25;
int na = 0;
int ex039 = 0;
+int keyspd = 20;
// ID 0310 == 310, Must drop leading zero
typedef enum nc_rigid_e
@@ -284,6 +285,16 @@ int main(int argc, char *argv[])
SNPRINTF(buf, sizeof(buf), "PS1;");
n = write(fd, buf, strlen(buf));
}
+ else if (strncmp(buf, "KS;", 3) == 0)
+ {
+ sprintf(buf,"KS%d;", keyspd);
+ n = write(fd, buf, strlen(buf));
+ }
+ else if (strncmp(buf,"KS",2) == 0)
+ {
+ sscanf(buf,"KS%03d", &keyspd);
+ }
+
else if (strlen(buf) > 0)
{
fprintf(stderr, "Unknown command: %s\n", buf);
commit 89797e5a54f2db8dd721f62c1afd9bf3015e50c1
Author: Mike Black W9MDB <mdb...@ya...>
Date: Mon Jul 31 22:40:42 2023 -0500
Fix rig_set_freq to only set vfo at end when needed
https://github.com/Hamlib/Hamlib/issues/1126
diff --git a/src/rig.c b/src/rig.c
index 74ad943e2..e8661b09f 100644
--- a/src/rig.c
+++ b/src/rig.c
@@ -2091,7 +2091,7 @@ int rig_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
rig_set_cache_freq(rig, vfo, freq_new);
- if (vfo != RIG_VFO_CURR)
+ if (vfo != vfo_save && vfo != RIG_VFO_CURR)
{
HAMLIB_TRACE;
rig_set_vfo(rig, vfo_save);
commit c452cd31d904c05236329e26e03d793e8683c088
Author: Mike Black W9MDB <mdb...@ya...>
Date: Mon Jul 31 17:10:17 2023 -0500
Add simic705 simulator
diff --git a/simulators/Makefile.am b/simulators/Makefile.am
index 0a081a681..923ac3790 100644
--- a/simulators/Makefile.am
+++ b/simulators/Makefile.am
@@ -8,7 +8,7 @@ DISTCLEANFILES =
bin_PROGRAMS =
-check_PROGRAMS = simelecraft simicgeneric simkenwood simyaesu simic9100 simic9700 simft991 simftdx1200 simftdx3000 simjupiter simpowersdr simid5100 simft736 simftdx5000 simtmd700 simrotorez simspid simft817 simts590 simft847 simic7300 simic7000 simic7100 simic7200 simatd578 simic905 simts450 simic7600 simic7610
+check_PROGRAMS = simelecraft simicgeneric simkenwood simyaesu simic9100 simic9700 simft991 simftdx1200 simftdx3000 simjupiter simpowersdr simid5100 simft736 simftdx5000 simtmd700 simrotorez simspid simft817 simts590 simft847 simic7300 simic7000 simic7100 simic7200 simatd578 simic905 simts450 simic7600 simic7610 simic705
simelecraft_SOURCES = simelecraft.c
simkenwood_SOURCES = simkenwood.c
diff --git a/simulators/simic705.c b/simulators/simic705.c
new file mode 100644
index 000000000..bcafc8bc6
--- /dev/null
+++ b/simulators/simic705.c
@@ -0,0 +1,652 @@
+// simicom will show the pts port to use for rigctl on Unix
+// using virtual serial ports on Windows is to be developed yet
+// Needs a lot of improvement to work on all Icoms
+// gcc -g -Wall -o simicom simicom.c -lhamlib
+// On mingw in the hamlib src directory
+// gcc -static -I../include -g -Wall -o simicom simicom.c -L../../build/src/.libs -lhamlib -lwsock32 -lws2_32
+#define _XOPEN_SOURCE 700
+// since we are POSIX here we need this
+struct ip_mreq
+{
+ int dummy;
+};
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <sys/time.h>
+#include <hamlib/rig.h>
+#include "../src/misc.h"
+#include <termios.h>
+#include <unistd.h>
+
+
+#define BUFSIZE 256
+#define X25
+
+int civ_731_mode = 0;
+vfo_t current_vfo = RIG_VFO_A;
+int split = 0;
+int keyspd = 85; // 85=20WPM
+
+// we make B different from A to ensure we see a difference at startup
+float freqA = 14074000;
+float freqB = 14074500;
+mode_t modeA = RIG_MODE_PKTUSB;
+mode_t modeB = RIG_MODE_PKTUSB;
+int datamodeA = 0;
+int datamodeB = 0;
+pbwidth_t widthA = 0;
+pbwidth_t widthB = 1;
+ant_t ant_curr = 0;
+int ant_option = 0;
+int ptt = 0;
+int satmode = 0;
+int agc_time = 1;
+int ovf_status = 0;
+int powerstat = 1;
+
+void dumphex(unsigned char *buf, int n)
+{
+ for (int i = 0; i < n; ++i) { printf("%02x ", buf[i]); }
+
+ printf("\n");
+}
+
+int
+frameGet(int fd, unsigned char *buf)
+{
+ int i = 0;
+ memset(buf, 0, BUFSIZE);
+ unsigned char c;
+
+again:
+
+ while (read(fd, &c, 1) > 0)
+ {
+ buf[i++] = c;
+ //printf("i=%d, c=0x%02x\n",i,c);
+
+ if (c == 0xfd)
+ {
+ dumphex(buf, i);
+ return i;
+ }
+
+ if (i > 2 && c == 0xfe)
+ {
+ printf("Turning power on due to 0xfe string\n");
+ powerstat = 1;
+ int j;
+
+ for (j = i; j < 175; ++j)
+ {
+ if (read(fd, &c, 1) < 0) { break; }
+ }
+
+ i = 0;
+ goto again;
+ }
+ }
+
+ printf("Error??? c=x%02x\n", c);
+
+ return 0;
+}
+
+void frameParse(int fd, unsigned char *frame, int len)
+{
+ double freq;
+ int n = 0;
+
+ dumphex(frame, len);
+
+ if (frame[0] != 0xfe && frame[1] != 0xfe)
+ {
+ printf("expected fe fe, got ");
+ dumphex(frame, len);
+ return;
+ }
+
+ switch (frame[4])
+ {
+ case 0x03:
+
+ //from_bcd(frameackbuf[2], (civ_731_mode ? 4 : 5) * 2);
+ if (current_vfo == RIG_VFO_A || current_vfo == RIG_VFO_MAIN)
+ {
+ printf("get_freqA\n");
+ to_bcd(&frame[5], (long long)freqA, (civ_731_mode ? 4 : 5) * 2);
+ }
+ else
+ {
+ printf("get_freqB\n");
+ to_bcd(&frame[5], (long long)freqB, (civ_731_mode ? 4 : 5) * 2);
+ }
+
+ frame[10] = 0xfd;
+
+ if (powerstat)
+ {
+ n = write(fd, frame, 11);
+ }
+
+ break;
+
+ case 0x04:
+ if (current_vfo == RIG_VFO_A || current_vfo == RIG_VFO_MAIN)
+ {
+ printf("get_modeA\n");
+ frame[5] = modeA;
+ frame[6] = widthA;
+ }
+ else
+ {
+ printf("get_modeB\n");
+ frame[5] = modeB;
+ frame[6] = widthB;
+ }
+
+ frame[7] = 0xfd;
+ n = write(fd, frame, 8);
+ break;
+
+ case 0x05:
+ freq = from_bcd(&frame[5], (civ_731_mode ? 4 : 5) * 2);
+ printf("set_freq to %.0f\n", freq);
+
+ if (current_vfo == RIG_VFO_A || current_vfo == RIG_VFO_MAIN) { freqA = freq; }
+ else { freqB = freq; }
+
+ frame[4] = 0xfb;
+ frame[5] = 0xfd;
+ n = write(fd, frame, 6);
+ break;
+
+ case 0x06:
+ if (current_vfo == RIG_VFO_A || current_vfo == RIG_VFO_MAIN) { modeA = frame[6]; }
+ else { modeB = frame[6]; }
+
+ frame[4] = 0xfb;
+ frame[5] = 0xfd;
+ n = write(fd, frame, 6);
+ break;
+
+ case 0x07:
+
+ switch (frame[5])
+ {
+ case 0x00: current_vfo = RIG_VFO_A; break;
+
+ case 0x01: current_vfo = RIG_VFO_B; break;
+
+ case 0xd0: current_vfo = RIG_VFO_MAIN; break;
+
+ case 0xd1: current_vfo = RIG_VFO_SUB; break;
+ }
+
+ printf("set_vfo to %s\n", rig_strvfo(current_vfo));
+
+ frame[4] = 0xfb;
+ frame[5] = 0xfd;
+ n = write(fd, frame, 6);
+ break;
+
+ case 0x0f:
+ if (frame[5] == 0) { split = 0; }
+ else if (frame[5] == 1) { split = 1; }
+ else { frame[6] = split; }
+
+ if (frame[5] == 0xfd)
+ {
+ printf("get split %d\n", split);
+ frame[7] = 0xfd;
+ n = write(fd, frame, 8);
+ }
+ else
+ {
+ printf("set split %d\n", 1);
+ frame[4] = 0xfb;
+ frame[5] = 0xfd;
+ n = write(fd, frame, 6);
+ }
+
+ break;
+
+ case 0x12: // we're simulating the 3-byte version -- not the 2-byte
+ if (frame[5] != 0xfd)
+ {
+ printf("Set ant %d\n", -1);
+ ant_curr = frame[5];
+ ant_option = frame[6];
+ dump_hex(frame, 8);
+ }
+ else
+ {
+ printf("Get ant\n");
+ }
+
+ frame[5] = ant_curr;
+ frame[6] = ant_option;
+ frame[7] = 0xfd;
+ printf("write 8 bytes\n");
+ dump_hex(frame, 8);
+ n = write(fd, frame, 8);
+ break;
+
+ case 0x14:
+ printf("cmd=0x14\n");
+
+ switch (frame[5])
+ {
+ static int power_level = 0;
+
+ case 0x07:
+ case 0x08:
+ if (frame[6] != 0xfd)
+ {
+ frame[6] = 0xfb;
+ dumphex(frame, 7);
+ n = write(fd, frame, 7);
+ printf("ACK x14 x08\n");
+ }
+ else
+ {
+ to_bcd(&frame[6], (long long)128, 2);
+ frame[8] = 0xfb;
+ dumphex(frame, 9);
+ n = write(fd, frame, 9);
+ printf("SEND x14 x08\n");
+ }
+
+ break;
+
+ case 0x0a:
+ printf("Using power level %d\n", power_level);
+ power_level += 10;
+
+ if (power_level > 250) { power_level = 0; }
+
+ to_bcd(&frame[6], (long long)power_level, 2);
+ frame[8] = 0xfd;
+ n = write(fd, frame, 9);
+ break;
+
+ case 0x0c:
+ dumphex(frame, 10);
+ printf("subcmd=0x0c #1\n");
+
+ if (frame[6] != 0xfd) // then we have data
+ {
+ printf("subcmd=0x0c #1\n");
+ keyspd = from_bcd(&frame[6], 2);
+ frame[6] = 0xfb;
+ n = write(fd, frame, 7);
+ }
+ else
+ {
+ printf("subcmd=0x0c #1\n");
+ to_bcd(&frame[6], keyspd, 2);
+ frame[8] = 0xfd;
+ n = write(fd, frame, 9);
+ }
+
+ break;
+ }
+
+ break;
+
+ case 0x15:
+ switch (frame[5])
+ {
+ static int meter_level = 0;
+
+ case 0x02:
+ frame[6] = 00;
+ frame[7] = 00;
+ frame[8] = 0xfd;
+ n = write(fd, frame, 9);
+ break;
+
+ case 0x07:
+ frame[6] = ovf_status;
+ frame[7] = 0xfd;
+ n = write(fd, frame, 8);
+ ovf_status = ovf_status == 0 ? 1 : 0;
+ break;
+
+ case 0x11:
+ printf("Using meter level %d\n", meter_level);
+ meter_level += 10;
+
+ if (meter_level > 250) { meter_level = 0; }
+
+ to_bcd(&frame[6], (long long)meter_level, 2);
+ frame[8] = 0xfd;
+ n = write(fd, frame, 9);
+ break;
+ }
+
+ case 0x16:
+ switch (frame[5])
+ {
+ case 0x5a:
+ if (frame[6] == 0xfe)
+ {
+ satmode = frame[6];
+ }
+ else
+ {
+ frame[6] = satmode;
+ frame[7] = 0xfd;
+ n = write(fd, frame, 8);
+ }
+
+ break;
+ }
+
+ break;
+
+ case 0x18: // miscellaneous things
+ frame[5] = 1;
+ frame[6] = 0xfd;
+ n = write(fd, frame, 7);
+ break;
+
+ case 0x19: // miscellaneous things
+ frame[5] = 0x94;
+ frame[6] = 0xfd;
+ n = write(fd, frame, 7);
+ break;
+
+ case 0x1a: // miscellaneous things
+ switch (frame[5])
+ {
+ case 0x03: // width
+ if (current_vfo == RIG_VFO_A || current_vfo == RIG_VFO_MAIN) { frame[6] = widthA; }
+ else { frame[6] = widthB; }
+
+ frame[7] = 0xfd;
+ n = write(fd, frame, 8);
+ break;
+
+ case 0x04: // AGC TIME
+ printf("frame[6]==x%02x, frame[7]=0%02x\n", frame[6], frame[7]);
+
+ if (frame[6] == 0xfd) // the we are reading
+ {
+ frame[6] = agc_time;
+ frame[7] = 0xfd;
+ n = write(fd, frame, 8);
+ }
+ else
+ {
+ printf("AGC_TIME RESPONSE******************************");
+ agc_time = frame[6];
+ frame[4] = 0xfb;
+ frame[5] = 0xfd;
+ n = write(fd, frame, 6);
+ }
+
+ break;
+
+ case 0x07: // satmode
+ frame[4] = 0;
+ frame[7] = 0xfd;
+ n = write(fd, frame, 8);
+ break;
+
+ }
+
+ break;
+
+ case 0x1c:
+ switch (frame[5])
+ {
+ case 0:
+ if (frame[6] == 0xfd)
+ {
+ frame[6] = ptt;
+ frame[7] = 0xfd;
+ n = write(fd, frame, 8);
+ }
+ else
+ {
+ ptt = frame[6];
+ frame[7] = 0xfb;
+ frame[8] = 0xfd;
+ n = write(fd, frame, 9);
+ }
+
+ break;
+
+ }
+
+ break;
+
+
+#ifdef X25
+
+ case 0x25:
+ if (frame[6] == 0xfd)
+ {
+ if (frame[5] == 0x00)
+ {
+ to_bcd(&frame[6], (long long)freqA, (civ_731_mode ? 4 : 5) * 2);
+ printf("X25 get_freqA=%.0f\n", freqA);
+ }
+ else
+ {
+ to_bcd(&frame[6], (long long)freqB, (civ_731_mode ? 4 : 5) * 2);
+ printf("X25 get_freqB=%.0f\n", freqB);
+ }
+
+ frame[11] = 0xfd;
+#if 1
+ unsigned char frame2[11];
+
+ frame2[0] = 0xfe;
+ frame2[1] = 0xfe;
+ frame2[2] = 0x00; // send transceive frame
+ frame2[3] = frame[3]; // send transceive frame
+ frame2[4] = 0x00;
+ frame2[5] = 0x00;
+ frame2[6] = 0x35;
+ frame2[7] = 0x57;
+ frame2[8] = 0x03;
+ frame2[9] = 0x00;
+ frame2[10] = 0xfd;
+ n = write(fd, frame2, 11);
+#endif
+ n = write(fd, frame, 12);
+ }
+ else
+ {
+ freq = from_bcd(&frame[6], (civ_731_mode ? 4 : 5) * 2);
+ printf("set_freq to %.0f\n", freq);
+
+ if (frame[5] == 0x00) { freqA = freq; }
+ else { freqB = freq; }
+
+ frame[4] = 0xfb;
+ frame[5] = 0xfd;
+ n = write(fd, frame, 6);
+#if 0
+ // send async frame
+ frame[2] = 0x00; // async freq
+ frame[3] = 0xa2;
+ frame[4] = 0x00;
+ frame[5] = 0x00;
+ frame[6] = 0x10;
+ frame[7] = 0x01;
+ frame[8] = 0x96;
+ frame[9] = 0x12;
+ frame[10] = 0xfd;
+ n = write(fd, frame, 11);
+#endif
+ }
+
+ break;
+
+ case 0x26:
+ for (int i = 0; i < 6; ++i) { printf("%02x:", frame[i]); }
+
+ if (frame[6] == 0xfd) // then a query
+ {
+ for (int i = 0; i < 6; ++i) { printf("%02x:", frame[i]); }
+
+ frame[6] = frame[5] == 0 ? modeA : modeB;
+ frame[7] = frame[5] == 0 ? datamodeA : datamodeB;
+ frame[8] = 0xfb;
+ frame[9] = 0xfd;
+ n = write(fd, frame, 10);
+ }
+ else
+ {
+ for (int i = 0; i < 12; ++i) { printf("%02x:", frame[i]); }
+
+ if (frame[6] == 0)
+ {
+ modeA = frame[7];
+ datamodeA = frame[8];
+ }
+ else
+ {
+ modeB = frame[7];
+ datamodeB = frame[8];
+ }
+
+ frame[4] = 0xfb;
+ frame[5] = 0xfd;
+ n = write(fd, frame, 6);
+ }
+
+ printf("\n");
+ break;
+#else
+
+ case 0x25:
+ printf("x25 send nak\n");
+ frame[4] = 0xfa;
+ frame[5] = 0xfd;
+ n = write(fd, frame, 6);
+ break;
+
+ case 0x26:
+ printf("x26 send nak\n");
+ frame[4] = 0xfa;
+ frame[5] = 0xfd;
+ n = write(fd, frame, 6);
+ break;
+#endif
+
+ default: printf("cmd 0x%02x unknown\n", frame[4]);
+ }
+
+ if (n == 0) { printf("Write failed=%s\n", strerror(errno)); }
+
+// don't care about the rig type yet
+
+}
+
+#if defined(WIN32) || defined(_WIN32)
+int openPort(char *comport) // doesn't matter for using pts devices
+{
+ int fd;
+ fd = open(comport, O_RDWR);
+
+ if (fd < 0)
+ {
+ perror(comport);
+ }
+
+ return fd;
+}
+
+#else
+int openPort(char *comport) // doesn't matter for using pts devices
+{
+ int fd = posix_openpt(O_RDWR);
+ char *name = ptsname(fd);
+
+ if (name == NULL)
+ {
+ perror("pstname");
+ return -1;
+ }
+
+ printf("name=%s\n", name);
+
+ if (fd == -1 || grantpt(fd) == -1 || unlockpt(fd) == -1)
+ {
+ perror("posix_openpt");
+ return -1;
+ }
+
+ return fd;
+}
+#endif
+
+void rigStatus()
+{
+ char vfoa = current_vfo == RIG_VFO_A ? '*' : ' ';
+ char vfob = current_vfo == RIG_VFO_B ? '*' : ' ';
+ printf("%cVFOA: mode=%d datamode=%d width=%ld freq=%.0f\n", vfoa, modeA,
+ datamodeA,
+ widthA,
+ freqA);
+ printf("%cVFOB: mode=%d datamode=%d width=%ld freq=%.0f\n", vfob, modeB,
+ datamodeB,
+ widthB,
+ freqB);
+}
+
+int main(int argc, char **argv)
+{
+ unsigned char buf[256];
+ int fd = openPort(argv[1]);
+
+ printf("%s: %s\n", argv[0], rig_version());
+#ifdef X25
+ printf("x25/x26 command recognized\n");
+#else
+ printf("x25/x26 command rejected\n");
+#endif
+#if defined(WIN32) || defined(_WIN32)
+
+ if (argc != 2)
+ {
+ printf("Missing comport argument\n");
+ printf("%s [comport]\n", argv[0]);
+ exit(1);
+ }
+
+#endif
+
+ while (1)
+ {
+ int len = frameGet(fd, buf);
+
+ if (len <= 0)
+ {
+ close(fd);
+ fd = openPort(argv[1]);
+ }
+
+ if (powerstat)
+ {
+ frameParse(fd, buf, len);
+ }
+ else
+ {
+ hl_usleep(1000 * 1000);
+ }
+
+ rigStatus();
+ }
+
+ return 0;
+}
commit 801d34e3fba7e94bb738aed32ba7b91c06dcbcbd
Author: Mike Black W9MDB <mdb...@ya...>
Date: Mon Jul 31 15:31:06 2023 -0500
Fix reverse split for Yaeus VFO_SUB rigs
https://github.com/Hamlib/Hamlib/issues/1103
diff --git a/rigs/yaesu/newcat.c b/rigs/yaesu/newcat.c
index 381e62f36..2893a02c0 100644
--- a/rigs/yaesu/newcat.c
+++ b/rigs/yaesu/newcat.c
@@ -7884,7 +7884,7 @@ int newcat_set_tx_vfo(RIG *rig, vfo_t tx_vfo)
p1 = p1 + 2; /* use non-Toggle commands */
// If VFOB is active then we change VFOB with FT3 instead of VFOA
- if (rig->state.current_vfo == RIG_VFO_B) { p1++; }
+ if (rig->state.current_vfo == RIG_VFO_B || rig->state.current_vfo == RIG_VFO_SUB) { p1++; }
}
if (is_ftdx101d || is_ftdx101mp)
diff --git a/rigs/yaesu/newcat.h b/rigs/yaesu/newcat.h
index f03ce1974..4fd014372 100644
--- a/rigs/yaesu/newcat.h
+++ b/rigs/yaesu/newcat.h
@@ -50,7 +50,7 @@
typedef char ncboolean;
/* shared function version */
-#define NEWCAT_VER "20230724"
+#define NEWCAT_VER "20230731"
/* Hopefully large enough for future use, 128 chars plus '\0' */
#define NEWCAT_DATA_LEN 129
commit d9b1cfb4047c9b94700340a66fc6b1cb3b543f1c
Author: Mike Black W9MDB <mdb...@ya...>
Date: Mon Jul 31 09:08:34 2023 -0500
Fix fifo.c mutex handling
diff --git a/src/fifo.c b/src/fifo.c
index dd91cc86d..7b7056f1c 100644
--- a/src/fifo.c
+++ b/src/fifo.c
@@ -27,7 +27,6 @@ int push(FIFO_RIG *fifo, const char *msg)
#ifdef _PTHREAD_H
pthread_mutex_lock(&fifo->mutex);
#endif
- return RIG_OK;
int len = strlen(msg);
for (int i = 0; i < len; ++i)
@@ -76,10 +75,10 @@ int peek(FIFO_RIG *fifo)
else
rig_debug(RIG_DEBUG_VERBOSE, "%s: peek 0x%02x (%d,%d)\n", __func__, c, fifo->head,
fifo->tail);
- return c;
#ifdef _PTHREAD_H
pthread_mutex_unlock(&fifo->mutex);
#endif
+ return c;
}
int pop(FIFO_RIG *fifo)
commit 5446b2c99dc5e2da5b1d0593b19fa15aaf0aaf5a
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sun Jul 30 16:01:35 2023 -0500
Fix dependency for ignore.swg
diff --git a/bindings/Makefile.am b/bindings/Makefile.am
index 7e2647945..e1bb50ed2 100644
--- a/bindings/Makefile.am
+++ b/bindings/Makefile.am
@@ -39,7 +39,7 @@ BUILT_SOURCES += hamlibperl_wrap.c
MOSTLYCLEANFILES += hamlibperl_wrap.c Hamlib.pm Hamlib.bs Hamlib-pl.mk.old
example_DATA += perltest.pl
-hamlibperl_wrap.c: hamlib.swg $(SWIGDEP)
+hamlibperl_wrap.c: hamlib.swg $(SWIGDEP) ignore.swg
$(AM_V_GEN)$(SWIG) -perl5 -shadow $(AM_CPPFLAGS) -I$(top_srcdir)/bindings \
-o $@ $$(test -f hamlib.swg || echo '$(srcdir)/')hamlib.swg
commit 71629cf2f323f5121d7cb69fd198c3cd8e30b481
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sun Jul 30 11:24:16 2023 -0500
Hopefully fix Mac perl binding build
diff --git a/bindings/ignore.swg b/bindings/ignore.swg
index 37d6c96dc..acfd35fe9 100644
--- a/bindings/ignore.swg
+++ b/bindings/ignore.swg
@@ -213,6 +213,8 @@
%ignore hamlib_version2;
%ignore macro_name;
+%ignore FIFO_RIG;
+
#ifdef SWIGLUA
%ignore Rig::set_level(setting_t,int,vfo_t);
%ignore Rig::set_ext_level(setting_t,value_t,vfo_t);
commit c251a075abcaebd8b2222f9e5e02fe5ae5d81e4b
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sun Jul 30 09:49:10 2023 -0500
Fix MAC build
diff --git a/include/hamlib/rig.h b/include/hamlib/rig.h
index 458ef51d2..88240f535 100644
--- a/include/hamlib/rig.h
+++ b/include/hamlib/rig.h
@@ -137,7 +137,7 @@ typedef struct
int head;
int tail;
int flush; // flush flag for stop_morse
-#if _PTHREAD_H
+#ifdef _PTHREAD_H
pthread_mutex_t mutex;
#else
int mutex;
commit ddb128bbf74570addd7296afcf9e42eaabff8698
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sun Jul 30 07:55:28 2023 -0500
Make fifo.c thread safe
diff --git a/include/hamlib/rig.h b/include/hamlib/rig.h
index ad57c3390..458ef51d2 100644
--- a/include/hamlib/rig.h
+++ b/include/hamlib/rig.h
@@ -137,6 +137,11 @@ typedef struct
int head;
int tail;
int flush; // flush flag for stop_morse
+#if _PTHREAD_H
+ pthread_mutex_t mutex;
+#else
+ int mutex;
+#endif
} FIFO_RIG;
commit 006f724dae6c992373779b28547e8daf9022a3cd
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sun Jul 30 07:53:17 2023 -0500
Make fifo.c thread safe
diff --git a/src/fifo.c b/src/fifo.c
index d445882bd..dd91cc86d 100644
--- a/src/fifo.c
+++ b/src/fifo.c
@@ -2,12 +2,16 @@
#include <stdio.h>
#include <ctype.h>
#include "fifo.h"
-
+#include "config.h"
void initFIFO(FIFO_RIG *fifo)
{
fifo->head = 0;
fifo->tail = 0;
+#ifdef _PTHREAD_H
+ static pthread_mutex_t t = PTHREAD_MUTEX_INITIALIZER;
+ fifo->mutex = t;
+#endif
}
void resetFIFO(FIFO_RIG *fifo)
@@ -20,6 +24,10 @@ void resetFIFO(FIFO_RIG *fifo)
// return -RIG error if overflow
int push(FIFO_RIG *fifo, const char *msg)
{
+#ifdef _PTHREAD_H
+ pthread_mutex_lock(&fifo->mutex);
+#endif
+ return RIG_OK;
int len = strlen(msg);
for (int i = 0; i < len; ++i)
@@ -46,6 +54,9 @@ int push(FIFO_RIG *fifo, const char *msg)
fifo->tail = (fifo->tail + 1) % HAMLIB_FIFO_SIZE;
}
+#ifdef _PTHREAD_H
+ pthread_mutex_unlock(&fifo->mutex);
+#endif
return RIG_OK;
}
@@ -55,6 +66,9 @@ int peek(FIFO_RIG *fifo)
if (fifo->tail < 0 || fifo->head < 0) return -1;
if (fifo->tail > 1023 || fifo->head > 1023) return -1;
if (fifo->tail == fifo->head) { return -1; }
+#ifdef _PTHREAD_H
+ pthread_mutex_lock(&fifo->mutex);
+#endif
char c = fifo->data[fifo->head];
if (isalnum(c))
rig_debug(RIG_DEBUG_VERBOSE, "%s: peek %c (%d,%d)\n", __func__, c, fifo->head,
@@ -63,12 +77,18 @@ int peek(FIFO_RIG *fifo)
rig_debug(RIG_DEBUG_VERBOSE, "%s: peek 0x%02x (%d,%d)\n", __func__, c, fifo->head,
fifo->tail);
return c;
+#ifdef _PTHREAD_H
+ pthread_mutex_unlock(&fifo->mutex);
+#endif
}
int pop(FIFO_RIG *fifo)
{
if (fifo->tail == fifo->head) { return -1; }
+#ifdef _PTHREAD_H
+ pthread_mutex_lock(&fifo->mutex);
+#endif
char c = fifo->data[fifo->head];
if (isalnum(c))
rig_debug(RIG_DEBUG_VERBOSE, "%s: pop %c (%d,%d)\n", __func__, c, fifo->head,
@@ -77,6 +97,9 @@ int pop(FIFO_RIG *fifo)
rig_debug(RIG_DEBUG_VERBOSE, "%s: pop 0x%02x (%d,%d)\n", __func__, c, fifo->head,
fifo->tail);
fifo->head = (fifo->head + 1) % HAMLIB_FIFO_SIZE;
+#ifdef _PTHREAD_H
+ pthread_mutex_unlock(&fifo->mutex);
+#endif
return c;
}
commit b4ddf64b311f31db08f094893b633059ea2434a6
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sun Jul 30 07:25:57 2023 -0500
Assume rig is powered on if get_powerstat is not implemented
diff --git a/src/rig.c b/src/rig.c
index bced3faaf..74ad943e2 100644
--- a/src/rig.c
+++ b/src/rig.c
@@ -6270,6 +6270,7 @@ int HAMLIB_API rig_set_powerstat(RIG *rig, powerstat_t status)
if (rig->caps->set_powerstat == NULL)
{
rig_debug(RIG_DEBUG_WARN, "%s set_powerstat not implemented\n", __func__);
+ rig->state.powerstat = RIG_POWER_ON; // assume we are on if we can't set_powerstat
RETURNFUNC(-RIG_ENAVAIL);
}
commit 21c5c3f419ad2a0f485176d725a2a454f3795395
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sun Jul 30 07:17:44 2023 -0500
Update comments in rig.c
diff --git a/src/rig.c b/src/rig.c
index 0529abae2..bced3faaf 100644
--- a/src/rig.c
+++ b/src/rig.c
@@ -829,7 +829,9 @@ RIG *HAMLIB_API rig_init(rig_model_t rig_model)
rs->announces = caps->announces;
rs->rigport.fd = rs->pttport.fd = rs->dcdport.fd = -1;
- rs->powerstat = RIG_POWER_ON; // default to power on
+ // some rigs (like SDR) behave differnt when checking for power on
+ // So we assume power is on until one of the backends KNOWS it is off
+ rs->powerstat = RIG_POWER_ON; // default to power on until proven otherwise
// we have to copy rs to rig->state_deprecated for DLL backwards compatibility
memcpy(&rig->state_deprecated, rs, sizeof(rig->state_deprecated));
commit 2852fba73fa705a8a97ed5c580df2970cee5b3b0
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sat Jul 29 15:10:36 2023 -0500
Increase sleep during power on for Icom to wait for serial port to wake up
diff --git a/rigs/icom/icom.c b/rigs/icom/icom.c
index d3af1f0a1..78932cb60 100644
--- a/rigs/icom/icom.c
+++ b/rigs/icom/icom.c
@@ -8130,7 +8130,7 @@ int icom_set_powerstat(RIG *rig, powerstat_t status)
// sending more than enough 0xfe's to wake up the rs232
write_block(&rs->rigport, fe_buf, fe_max);
// need to wait a bit for RigPI and others to queue the echo
- hl_usleep(200 * 1000);
+ hl_usleep(400 * 1000);
// we'll try 0x18 0x01 now -- should work on STBY rigs too
pwr_sc = S_PWR_ON;
diff --git a/rigs/icom/icom.h b/rigs/icom/icom.h
index afd52e2b2..2fe849e7a 100644
--- a/rigs/icom/icom.h
+++ b/rigs/icom/icom.h
@@ -35,7 +35,7 @@
#include <sys/time.h>
#endif
-#define BACKEND_VER "20230728"
+#define BACKEND_VER "20230729"
#define ICOM_IS_ID31 rig_is_model(rig, RIG_MODEL_ID31)
#define ICOM_IS_ID51 rig_is_model(rig, RIG_MODEL_ID51)
commit b24cad1278520e18576476e2236bdf5e97895f41
Merge: bd1fcbe02 1260921da
Author: Mike Black W9MDB <mdb...@ya...>
Date: Fri Jul 28 17:32:56 2023 -0500
Merge branch 'master' of https://github.com/Hamlib/Hamlib
commit bd1fcbe025bc2e88c08cf26d2b6a6faa8c718f95
Author: Mike Black W9MDB <mdb...@ya...>
Date: Fri Jul 28 17:32:23 2023 -0500
Adjust icom power up to use the mininum number of 0xfe's needed for the baud rate
diff --git a/rigs/icom/icom.c b/rigs/icom/icom.c
index 33b361cc3..d3af1f0a1 100644
--- a/rigs/icom/icom.c
+++ b/rigs/icom/icom.c
@@ -8080,8 +8080,8 @@ int icom_set_powerstat(RIG *rig, powerstat_t status)
unsigned char ackbuf[200];
int ack_len = sizeof(ackbuf), retval = RIG_OK, echo_status;
int pwr_sc;
- // so we'll do up to 175 for 115,200
- int fe_max = 175;
+ // so we'll do up to 150 for 115,200
+ int fe_max = 150;
unsigned char fe_buf[fe_max]; // for FE's to power up
int i;
int retry, retry_save;
@@ -8105,6 +8105,27 @@ int icom_set_powerstat(RIG *rig, powerstat_t status)
case RIG_POWER_ON:
// ic7300 manual says ~150 for 115,200
// we'll just send a few more to be sure for all speeds
+ switch(rs->rigport.parm.serial.rate)
+ {
+ case 4800:
+ fe_max = 7;
+ break;
+ case 9600:
+ fe_max = 13;
+ break;
+ case 19200:
+ fe_max = 25;
+ break;
+ case 38400:
+ fe_max = 50;
+ break;
+ case 57600:
+ fe_max = 75;
+ break;
+ case 115200:
+ default:
+ fe_max = 150;
+ }
memset(fe_buf, 0xfe, fe_max);
// sending more than enough 0xfe's to wake up the rs232
write_block(&rs->rigport, fe_buf, fe_max);
diff --git a/rigs/icom/icom.h b/rigs/icom/icom.h
index 163b7754e..afd52e2b2 100644
--- a/rigs/icom/icom.h
+++ b/rigs/icom/icom.h
@@ -35,7 +35,7 @@
#include <sys/time.h>
#endif
-#define BACKEND_VER "20230724"
+#define BACKEND_VER "20230728"
#define ICOM_IS_ID31 rig_is_model(rig, RIG_MODEL_ID31)
#define ICOM_IS_ID51 rig_is_model(rig, RIG_MODEL_ID51)
commit ebb6efba8d3a6c67ccfc062e4d90f3a0859022da
Author: Mike Black W9MDB <mdb...@ya...>
Date: Fri Jul 28 17:02:00 2023 -0500
Add simic7200.c fully compatible with FLRig
Add simic7000.c
Improve simpowersdr.c
diff --git a/simulators/Makefile.am b/simulators/Makefile.am
index 628695349..0a081a681 100644
--- a/simulators/Makefile.am
+++ b/simulators/Makefile.am
@@ -8,7 +8,7 @@ DISTCLEANFILES =
bin_PROGRAMS =
-check_PROGRAMS = simelecraft simicgeneric simkenwood simyaesu simic9100 simic9700 simft991 simftdx1200 simftdx3000 simjupiter simpowersdr simid5100 simft736 simftdx5000 simtmd700 simrotorez simspid simft817 simts590 simft847 simic7300 simic7100 simatd578 simic905 simts450 simic7600 simic7610
+check_PROGRAMS = simelecraft simicgeneric simkenwood simyaesu simic9100 simic9700 simft991 simftdx1200 simftdx3000 simjupiter simpowersdr simid5100 simft736 simftdx5000 simtmd700 simrotorez simspid simft817 simts590 simft847 simic7300 simic7000 simic7100 simic7200 simatd578 simic905 simts450 simic7600 simic7610
simelecraft_SOURCES = simelecraft.c
simkenwood_SOURCES = simkenwood.c
diff --git a/simulators/simic7000.c b/simulators/simic7000.c
new file mode 100644
index 000000000..54c7bd7de
--- /dev/null
+++ b/simulators/simic7000.c
@@ -0,0 +1,542 @@
+// simicom will show the pts port to use for rigctl on Unix
+// using virtual serial ports on Windows is to be developed yet
+// Needs a lot of improvement to work on all Icoms
+// gcc -g -Wall -o simicom simicom.c -lhamlib
+// On mingw in the hamlib src directory
+// gcc -static -I../include -g -Wall -o simicom simicom.c -L../../build/src/.libs -lhamlib -lwsock32 -lws2_32
+#define _XOPEN_SOURCE 700
+// since we are POSIX here we need this
+struct ip_mreq
+{
+ int dummy;
+};
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <sys/time.h>
+#include <hamlib/rig.h>
+#include "../src/misc.h"
+#include <termios.h>
+#include <unistd.h>
+
+
+#define BUFSIZE 256
+#define X25
+
+int civ_731_mode = 0;
+vfo_t current_vfo = RIG_VFO_A;
+int split = 0;
+
+// we make B different from A to ensure we see a difference at startup
+float freqA = 14074000;
+float freqB = 14074500;
+mode_t modeA = RIG_MODE_PKTUSB;
+mode_t modeB = RIG_MODE_PKTUSB;
+int datamodeA = 0;
+int datamodeB = 0;
+pbwidth_t widthA = 0;
+pbwidth_t widthB = 1;
+ant_t ant_curr = 0;
+int ant_option = 0;
+int ptt = 0;
+int satmode = 0;
+int agc_time = 1;
+int ovf_status = 0;
+int powerstat = 1;
+int transceive = 0;
+
+void dumphex(unsigned char *buf, int n)
+{
+ for (int i = 0; i < n; ++i) { printf("%02x ", buf[i]); }
+
+ printf("\n");
+}
+
+int
+frameGet(int fd, unsigned char *buf)
+{
+ int i = 0, n;
+ memset(buf, 0, BUFSIZE);
+ unsigned char c;
+
+again:
+
+ while (read(fd, &c, 1) > 0)
+ {
+ buf[i++] = c;
+ //printf("i=%d, c=0x%02x\n",i,c);
+
+ if (c == 0xfd)
+ {
+ char mytime[256];
+ date_strget(mytime,sizeof(mytime),1);
+ printf("%s:", mytime); dumphex(buf, i);
+ // echo
+ n = write(fd, buf, i);
+ if (n != i) printf("%s: error on write: %s\n", __func__, strerror(errno));
+ return i;
+ }
+
+ if (i > 2 && c == 0xfe)
+ {
+ printf("Turning power on due to 0xfe string\n");
+ powerstat = 1;
+ int j;
+
+ for (j = i; j < 175; ++j)
+ {
+ if (read(fd, &c, 1) < 0) { break; }
+ }
+
+ i = 0;
+ goto again;
+ }
+ }
+
+ printf("Error??? c=x%02x\n", c);
+
+ return 0;
+}
+
+void frameParse(int fd, unsigned char *frame, int len)
+{
+ double freq;
+ int n = 0;
+
+ dumphex(frame, len);
+
+ if (frame[0] != 0xfe && frame[1] != 0xfe)
+ {
+ printf("expected fe fe, got ");
+ dumphex(frame, len);
+ return;
+ }
+
+ switch (frame[4])
+ {
+ case 0x03:
+
+ //from_bcd(frameackbuf[2], (civ_731_mode ? 4 : 5) * 2);
+ if (current_vfo == RIG_VFO_A || current_vfo == RIG_VFO_MAIN)
+ {
+ printf("get_freqA\n");
+ to_bcd(&frame[5], (long long)freqA, (civ_731_mode ? 4 : 5) * 2);
+ }
+ else
+ {
+ printf("get_freqB\n");
+ to_bcd(&frame[5], (long long)freqB, (civ_731_mode ? 4 : 5) * 2);
+ }
+
+ frame[10] = 0xfd;
+
+ if (powerstat)
+ {
+ n = write(fd, frame, 11);
+ }
+
+ break;
+
+ case 0x04:
+ if (current_vfo == RIG_VFO_A || current_vfo == RIG_VFO_MAIN)
+ {
+ printf("get_modeA\n");
+ frame[5] = modeA;
+ frame[6] = widthA;
+ }
+ else
+ {
+ printf("get_modeB\n");
+ frame[5] = modeB;
+ frame[6] = widthB;
+ }
+
+ frame[7] = 0xfd;
+ n = write(fd, frame, 8);
+ break;
+
+ case 0x05:
+ freq = from_bcd(&frame[5], (civ_731_mode ? 4 : 5) * 2);
+ printf("set_freq to %.0f\n", freq);
+
+ if (current_vfo == RIG_VFO_A || current_vfo == RIG_VFO_MAIN) { freqA = freq; }
+ else { freqB = freq; }
+
+ frame[4] = 0xfb;
+ frame[5] = 0xfd;
+ n = write(fd, frame, 6);
+ break;
+
+ case 0x06:
+ if (current_vfo == RIG_VFO_A || current_vfo == RIG_VFO_MAIN) { modeA = frame[6]; }
+ else { modeB = frame[6]; }
+
+ frame[4] = 0xfb;
+ frame[5] = 0xfd;
+ n = write(fd, frame, 6);
+ break;
+
+ case 0x07:
+
+ switch (frame[5])
+ {
+ case 0x00: current_vfo = RIG_VFO_A; break;
+
+ case 0x01: current_vfo = RIG_VFO_B; break;
+
+ case 0xa0: current_vfo = freq = freqA; freqA = freqB; freqB = freq; break;
+
+ case 0xb0: current_vfo = RIG_VFO_MAIN; break;
+
+ case 0xd0: current_vfo = RIG_VFO_MAIN; break;
+
+ case 0xd1: current_vfo = RIG_VFO_SUB; break;
+ }
+
+ printf("set_vfo to %s\n", rig_strvfo(current_vfo));
+
+ frame[4] = 0xfb;
+ frame[5] = 0xfd;
+ n = write(fd, frame, 6);
+ break;
+
+ case 0x0f:
+ if (frame[5] == 0) { split = 0; }
+ else if (frame[5] == 1) { split = 1; }
+ else { frame[6] = split; }
+
+ if (frame[5] == 0xfd)
+ {
+ printf("get split %d\n", 1);
+ frame[7] = 0xfd;
+ n = write(fd, frame, 8);
+ }
+ else
+ {
+ printf("set split %d\n", 1);
+ frame[4] = 0xfb;
+ frame[5] = 0xfd;
+ n = write(fd, frame, 6);
+ }
+
+ break;
+
+ case 0x12: // we're simulating the 3-byte version -- not the 2-byte
+ if (frame[5] != 0xfd)
+ {
+ printf("Set ant %d\n", -1);
+ ant_curr = frame[5];
+ ant_option = frame[6];
+ dump_hex(frame, 8);
+ }
+ else
+ {
+ printf("Get ant\n");
+ }
+
+ frame[5] = ant_curr;
+ frame[6] = ant_option;
+ frame[7] = 0xfd;
+ printf("write 8 bytes\n");
+ dump_hex(frame, 8);
+ n = write(fd, frame, 8);
+ break;
+
+ case 0x14:
+ switch (frame[5])
+ {
+ static int power_level = 0;
+
+ case 0x07:
+ case 0x08:
+ if (frame[6] != 0xfd)
+ {
+ frame[6] = 0xfb;
+ dumphex(frame, 7);
+ n = write(fd, frame, 7);
+ printf("ACK x14 x08\n");
+ }
+ else
+ {
+ to_bcd(&frame[6], (long long)128, 2);
+ frame[8] = 0xfb;
+ dumphex(frame, 9);
+ n = write(fd, frame, 9);
+ printf("SEND x14 x08\n");
+ }
+
+ break;
+
+ case 0x0a:
+ printf("Using power level %d\n", power_level);
+ power_level += 10;
+
+ if (power_level > 250) { power_level = 0; }
+
+ to_bcd(&frame[6], (long long)power_level, 2);
+ frame[8] = 0xfd;
+ n = write(fd, frame, 9);
+ break;
+ }
+
+ break;
+
+ case 0x15:
+ switch (frame[5])
+ {
+ static int meter_level = 0;
+
+ case 0x07:
+ frame[6] = ovf_status;
+ frame[7] = 0xfd;
+ n = write(fd, frame, 8);
+ ovf_status = ovf_status == 0 ? 1 : 0;
+ break;
+
+ case 0x11:
+ printf("Using meter level %d\n", meter_level);
+ meter_level += 10;
+
+ if (meter_level > 250) { meter_level = 0; }
+
+ to_bcd(&frame[6], (long long)meter_level, 2);
+ frame[8] = 0xfd;
+ n = write(fd, frame, 9);
+ break;
+ }
+
+ case 0x16:
+ switch (frame[5])
+ {
+ case 0x5a:
+ if (frame[6] == 0xfe)
+ {
+ satmode = frame[6];
+ }
+ else
+ {
+ frame[6] = satmode;
+ frame[7] = 0xfd;
+ n = write(fd, frame, 8);
+ }
+
+ break;
+ }
+
+ break;
+
+ case 0x19: // miscellaneous things
+ frame[5] = 0x94;
+ frame[6] = 0xfd;
+ n = write(fd, frame, 7);
+ break;
+
+ case 0x1a: // miscellaneous things
+ switch (frame[5])
+ {
+ case 0x03: // width
+ if (current_vfo == RIG_VFO_A || current_vfo == RIG_VFO_MAIN) { frame[6] = widthA; }
+ else { frame[6] = widthB; }
+
+ frame[7] = 0xfd;
+ n = write(fd, frame, 8);
+ break;
+
+ case 0x04: // AGC TIME
+ printf("frame[6]==x%02x, frame[7]=0%02x\n", frame[6], frame[7]);
+
+ if (frame[6] == 0xfd) // the we are reading
+ {
+ frame[6] = agc_time;
+ frame[7] = 0xfd;
+ ...
[truncated message content] |
|
From: n0nb <n0...@us...> - 2023-07-08 10:23:03
|
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 ba9a1006e8fd905f3c16679649ddbc8226e4a5ea (commit)
via bcad19d563a6eb79f5c3f2f064b5df488d655212 (commit)
via af506f8e1537a7ac8103220e953d95f5dca5b848 (commit)
via fda5b984e708bf1086cff8806b2301d2dcfda5a3 (commit)
via 8ebe2300292d151420d996c17261a00446325502 (commit)
via 4b43c755a68b254f6066415b68fcdcfbc6c419a0 (commit)
via 4f3bdbdffe9ac56f969302d4330dd85a12633fae (commit)
via ce052db3a290fd5f00050d79541f969ba9195d79 (commit)
via 3cc6b7614c5ce836c86787eb255e59fba989a49a (commit)
from 3bda269494f4719fa49a996dd62ab0429f81e9d4 (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 ba9a1006e8fd905f3c16679649ddbc8226e4a5ea
Author: Mike Black W9MDB <mdb...@ya...>
Date: Fri Jul 7 22:39:05 2023 -0500
Fix rig.c
diff --git a/src/rig.c b/src/rig.c
index 21cec3a13..50835b118 100644
--- a/src/rig.c
+++ b/src/rig.c
@@ -1,4 +1,3 @@
-Add current_vfo to cache debug statementy
/*
* Hamlib Interface - main file
* Copyright (c) 2021 by Mikael Nousiainen
commit bcad19d563a6eb79f5c3f2f064b5df488d655212
Author: Mike Black W9MDB <mdb...@ya...>
Date: Fri Jul 7 22:34:45 2023 -0500
Add morse_data items
diff --git a/include/hamlib/rig.h b/include/hamlib/rig.h
index 490bab24b..20eb6466a 100644
--- a/include/hamlib/rig.h
+++ b/include/hamlib/rig.h
@@ -2680,6 +2680,8 @@ struct rig_state {
freq_t spectrum_spans[HAMLIB_MAX_SPECTRUM_SPANS]; /*!< Supported spectrum scope frequency spans in Hz in center mode. Last entry must be 0. */
struct rig_spectrum_avg_mode spectrum_avg_modes[HAMLIB_MAX_SPECTRUM_AVG_MODES]; /*!< Supported spectrum scope averaging modes. Last entry must have NULL name. */
int spectrum_attenuator[HAMLIB_MAXDBLSTSIZ]; /*!< Spectrum attenuator list in dB, 0 terminated */
+ volatile int morse_data_handler_thread_run;
+ void *morse_data_handler_priv_data;
};
/**
commit af506f8e1537a7ac8103220e953d95f5dca5b848
Author: Mike Black W9MDB <mdb...@ya...>
Date: Fri Jul 7 22:23:28 2023 -0500
Implement next phase of threaded rig_send_morse
diff --git a/src/fifo.c b/src/fifo.c
index 44b00c8a9..3272188e0 100644
--- a/src/fifo.c
+++ b/src/fifo.c
@@ -48,6 +48,7 @@ int main()
// Popping and printing one character at a time
int c;
+
while ((c = pop(&fifo)) != -1)
{
printf("%c", c);
diff --git a/src/iofunc.c b/src/iofunc.c
index 42942b3f6..0fc8551d2 100644
--- a/src/iofunc.c
+++ b/src/iofunc.c
@@ -1337,7 +1337,10 @@ static int read_string_generic(hamlib_port_t *p,
{
ssize_t rd_count = 0;
int result;
+ int timeout_save = p->timeout;
+ p->timeout = 2;
result = port_wait_for_data(p, direct);
+ p->timeout = timeout_save;
if (result == -RIG_ETIMEOUT)
{
diff --git a/src/rig.c b/src/rig.c
index 7bc854191..21cec3a13 100644
--- a/src/rig.c
+++ b/src/rig.c
@@ -1,3 +1,4 @@
+Add current_vfo to cache debug statementy
/*
* Hamlib Interface - main file
* Copyright (c) 2021 by Mikael Nousiainen
@@ -51,6 +52,7 @@
#include "hamlib/rig.h"
#include "hamlib/config.h"
+#include "fifo.h"
#include <stdlib.h>
#include <string.h>
@@ -240,6 +242,22 @@ static int async_data_handler_stop(RIG *rig);
void *async_data_handler(void *arg);
#endif
+typedef struct morse_data_handler_args_s
+{
+ RIG *rig;
+} morse_data_handler_args;
+
+typedef struct morse_data_handler_priv_data_s
+{
+ pthread_t thread_id;
+ morse_data_handler_args args;
+ FIFO fifo;
+} morse_data_handler_priv_data;
+
+static int morse_data_handler_start(RIG *rig);
+static int morse_data_handler_stop(RIG *rig);
+void *morse_data_handler(void *arg);
+
/*
* track which rig is opened (with rig_open)
* needed at least for transceive mode
@@ -563,7 +581,7 @@ RIG *HAMLIB_API rig_init(rig_model_t rig_model)
rs->rig_model = caps->rig_model;
rs->priv = NULL;
- rs->async_data_enabled = 1;
+// rs->async_data_enabled = 1;
rs->rigport.fd = -1;
rs->pttport.fd = -1;
rs->comm_state = 0;
@@ -1303,6 +1321,16 @@ int HAMLIB_API rig_open(RIG *rig)
rs->comm_state);
hl_usleep(100 * 1000); // wait a bit after opening to give some serial ports time
+ status = morse_data_handler_start(rig);
+
+ if (status < 0)
+ {
+ rig_debug(RIG_DEBUG_ERR, "%s: cw_data_handler_start failed: %s\n", __func__, rigerror(status));
+ port_close(&rs->rigport, rs->rigport.type.rig);
+ RETURNFUNC2(status);
+ }
+
+
/*
* Maybe the backend has something to initialize
* In case of failure, just close down and report error code.
@@ -1344,6 +1372,7 @@ int HAMLIB_API rig_open(RIG *rig)
{
remove_opened_rig(rig);
async_data_handler_stop(rig);
+ morse_data_handler_stop(rig);
port_close(&rs->rigport, rs->rigport.type.rig);
memcpy(&rs->rigport_deprecated, &rs->rigport, sizeof(hamlib_port_t_deprecated));
rs->comm_state = 0;
@@ -1494,6 +1523,7 @@ int HAMLIB_API rig_close(RIG *rig)
caps->rig_close(rig);
}
+ morse_data_handler_stop(rig);
async_data_handler_stop(rig);
/*
@@ -7741,6 +7771,39 @@ static int async_data_handler_start(RIG *rig)
RETURNFUNC(RIG_OK);
}
+static int morse_data_handler_start(RIG *rig)
+{
+ struct rig_state *rs = &rig->state;
+ morse_data_handler_priv_data *morse_data_handler_priv;
+
+ ENTERFUNC;
+
+ rs->morse_data_handler_thread_run = 1;
+ rs->morse_data_handler_priv_data = calloc(1,
+ sizeof(morse_data_handler_priv_data));
+
+ if (rs->morse_data_handler_priv_data == NULL)
+ {
+ RETURNFUNC(-RIG_ENOMEM);
+ }
+
+ morse_data_handler_priv = (morse_data_handler_priv_data *)
+ rs->morse_data_handler_priv_data;
+ morse_data_handler_priv->args.rig = rig;
+ int err = pthread_create(&morse_data_handler_priv->thread_id, NULL,
+ morse_data_handler, &morse_data_handler_priv->args);
+
+ if (err)
+ {
+ rig_debug(RIG_DEBUG_ERR, "%s: pthread_create error: %s\n", __func__,
+ strerror(errno));
+ RETURNFUNC(-RIG_EINTERNAL);
+ }
+
+ RETURNFUNC(RIG_OK);
+}
+
+
static int async_data_handler_stop(RIG *rig)
{
struct rig_state *rs = &rig->state;
@@ -7782,6 +7845,45 @@ static int async_data_handler_stop(RIG *rig)
RETURNFUNC(RIG_OK);
}
+static int morse_data_handler_stop(RIG *rig)
+{
+ struct rig_state *rs = &rig->state;
+ morse_data_handler_priv_data *morse_data_handler_priv;
+
+ ENTERFUNC;
+
+ rs->morse_data_handler_thread_run = 0;
+
+ morse_data_handler_priv = (morse_data_handler_priv_data *)
+ rs->morse_data_handler_priv_data;
+
+ if (morse_data_handler_priv != NULL)
+ {
+ if (morse_data_handler_priv->thread_id != 0)
+ {
+ // all cleanup is done in this function so we can kill thread
+ // Windows was taking 30 seconds to stop without this
+ pthread_cancel(morse_data_handler_priv->thread_id);
+ int err = pthread_join(morse_data_handler_priv->thread_id, NULL);
+
+ if (err)
+ {
+ rig_debug(RIG_DEBUG_ERR, "%s: pthread_join error: %s\n", __func__,
+ strerror(errno));
+ // just ignore the error
+ }
+
+ morse_data_handler_priv->thread_id = 0;
+ }
+
+ free(rs->morse_data_handler_priv_data);
+ rs->morse_data_handler_priv_data = NULL;
+ }
+
+ RETURNFUNC(RIG_OK);
+}
+
+
void *async_data_handler(void *arg)
{
struct async_data_handler_args_s *args = (struct async_data_handler_args_s *)
@@ -7822,7 +7924,7 @@ void *async_data_handler(void *arg)
__func__, result);
hl_usleep(500 * 1000);
}
-
+ hl_usleep(10*1000);
continue;
}
@@ -7867,6 +7969,40 @@ void *async_data_handler(void *arg)
}
#endif
+void *morse_data_handler(void *arg)
+{
+ struct morse_data_handler_args_s *args = (struct morse_data_handler_args_s *)
+ arg;
+ RIG *rig = args->rig;
+ struct rig_state *rs = &rig->state;
+ int result;
+ FIFO fifo;
+
+ rig_debug(RIG_DEBUG_VERBOSE, "%s: Starting morse data handler thread\n",
+ __func__);
+
+ initFIFO(&fifo);
+ while (rs->morse_data_handler_thread_run)
+ {
+ char c[2];
+ c[1] = 0;
+ while((c[0]=pop(&fifo)!=-1))
+ {
+ result = rig_send_morse(rig, RIG_VFO_CURR, c);
+ if (result != RIG_OK)
+ {
+ rig_debug(RIG_DEBUG_ERR, "%s: error: %s\n", __func__, rigerror(result));
+ push(&fifo, c);
+ hl_usleep(20*1000);
+ }
+ }
+ hl_usleep(20*1000);
+ }
+ pthread_exit(NULL);
+ return NULL;
+}
+
+
HAMLIB_EXPORT(int) rig_password(RIG *rig, const char *key1)
{
int retval = -RIG_EPROTO;
@@ -8034,3 +8170,5 @@ HAMLIB_EXPORT(int) rig_is_model(RIG *rig, rig_model_t model)
return (is_rig); // RETURN is too verbose here
}
+
+
commit fda5b984e708bf1086cff8806b2301d2dcfda5a3
Author: Mike Black W9MDB <mdb...@ya...>
Date: Fri Jul 7 22:22:57 2023 -0500
Add current_vfo to cache debug statement
diff --git a/src/cache.c b/src/cache.c
index 355707b7b..cf257a3d8 100644
--- a/src/cache.c
+++ b/src/cache.c
@@ -323,8 +323,8 @@ int rig_get_cache(RIG *rig, vfo_t vfo, freq_t *freq, int *cache_ms_freq,
break;
default:
- rig_debug(RIG_DEBUG_WARN, "%s(%d): unknown vfo=%s\n", __func__, __LINE__,
- rig_strvfo(vfo));
+ rig_debug(RIG_DEBUG_WARN, "%s(%d): unknown vfo=%s, curr_vfo=%s\n", __func__, __LINE__,
+ rig_strvfo(vfo), rig_strvfo(rig->state.current_vfo));
}
}
commit 8ebe2300292d151420d996c17261a00446325502
Author: Mike Black W9MDB <mdb...@ya...>
Date: Fri Jul 7 22:12:55 2023 -0500
Comment out unused var
diff --git a/src/multicast.c b/src/multicast.c
index de834c7e1..a79a78863 100644
--- a/src/multicast.c
+++ b/src/multicast.c
@@ -214,9 +214,8 @@ void json_add_vfoB(RIG *rig, char *msg)
{
strcat(msg, ",\n{\n");
json_add_string(msg, "Name", "VFOB", 1);
- json_add_int(msg, "Freq", rig->state.cache.freqMainB, 0);
+ json_add_int(msg, "Freq", rig->state.cache.freqMainB, 1);
-#if 0
if (strlen(rig_strrmode(rig->state.cache.modeMainB)) > 0)
{
json_add_string(msg, "Mode", rig_strrmode(rig->state.cache.modeMainB), 1);
@@ -226,7 +225,6 @@ void json_add_vfoB(RIG *rig, char *msg)
{
json_add_int(msg, "Width", rig->state.cache.widthMainB, 0);
}
-#endif
#if 0 // not working yet
if (rig->state.rx_vfo != rig->state.tx_vfo && rig->state.cache.split)
@@ -291,14 +289,12 @@ void *multicast_thread(void *vrig)
// do the 1st packet all the time
multicast_status_changed(rig);
multicast_send_json(rig);
- int loopcount = 4;
+ int loopcount = 8;
+ freq_t freqA, freqAsave = 0;
+ freq_t freqB, freqBsave = 0;
while (rig->state.multicast->runflag)
{
- hl_usleep(100 * 1000);
- freq_t freqA, freqAsave = 0;
- freq_t freqB, freqBsave = 0;
-
if ((retval = rig_get_freq(rig, RIG_VFO_A, &freqA)) != RIG_OK)
{
rig_debug(RIG_DEBUG_ERR, "%s: rig_get_freqA:%s\n", __func__, rigerror(retval));
@@ -314,14 +310,19 @@ void *multicast_thread(void *vrig)
freqB = rig->state.cache.freqMainB;
}
- if (freqA != freqAsave || freqB != freqBsave || loopcount-- == 0)
+ if (freqA != freqAsave || freqB != freqBsave || loopcount-- <= 0)
{
multicast_status_changed(rig);
multicast_send_json(rig);
- loopcount = 4;
+ loopcount = 8;
freqAsave = freqA;
freqBsave = freqB;
}
+ else
+ {
+ hl_usleep(100 * 1000);
+ }
+
}
@@ -379,7 +380,7 @@ int multicast_init(RIG *rig, char *addr, int port)
if (port == 0) { port = RIG_MULTICAST_PORT; }
// Create a UDP socket
- rig->state.multicast->sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
+ rig->state.multicast->sock = socket(AF_INET, SOCK_DGRAM, 0);
if (rig->state.multicast->sock < 0)
{
@@ -392,6 +393,7 @@ int multicast_init(RIG *rig, char *addr, int port)
return -RIG_EIO;
}
+#if 0
// Set the SO_REUSEADDR option to allow multiple processes to use the same address
int optval = 1;
@@ -402,19 +404,22 @@ int multicast_init(RIG *rig, char *addr, int port)
rig_debug(RIG_DEBUG_ERR, "%s: setsockopt: %s\n", __func__, strerror(errno));
return -RIG_EIO;
}
+#endif
// Bind the socket to any available local address and the specified port
- struct sockaddr_in saddr = {0};
- saddr.sin_family = AF_INET;
- saddr.sin_addr.s_addr = htonl(INADDR_ANY);
- saddr.sin_port = htons(port);
+ //struct sockaddr_in saddr = {0};
+ //saddr.sin_family = AF_INET;
+ //saddr.sin_addr.s_addr = inet_addr(addr);
+ //saddr.sin_port = htons(port);
+#if 0
if (bind(rig->state.multicast->sock, (struct sockaddr *)&saddr,
sizeof(saddr)) < 0)
{
rig_debug(RIG_DEBUG_ERR, "%s: bind: %s\n", __func__, strerror(errno));
return -RIG_EIO;
}
+#endif
// Construct the multicast group address
// struct ip_mreq mreq = {0};
@@ -431,26 +436,30 @@ int multicast_init(RIG *rig, char *addr, int port)
return -RIG_EIO;
}
+#if 0
+// look like we need to implement the client in a separate thread?
// Join the multicast group
if (setsockopt(rig->state.multicast->sock, IPPROTO_IP, IP_ADD_MEMBERSHIP,
(char *)&rig->state.multicast->mreq, sizeof(rig->state.multicast->mreq)) < 0)
{
rig_debug(RIG_DEBUG_ERR, "%s: setsockopt: %s\n", __func__, strerror(errno));
- return -RIG_EIO;
+ //return -RIG_EIO;
}
+#endif
// prime the dest_addr for the send routine
+ memset(&rig->state.multicast->dest_addr,0,sizeof(rig->state.multicast->dest_addr));
rig->state.multicast->dest_addr.sin_family = AF_INET;
rig->state.multicast->dest_addr.sin_addr.s_addr = inet_addr(addr);
rig->state.multicast->dest_addr.sin_port = htons(port);
- printf("starting thread\n");
-
+#if 0
rig->state.multicast->runflag = 1;
pthread_create(&rig->state.multicast->threadid, NULL, multicast_thread,
(void *)rig);
//printf("threadid=%ld\n", rig->state.multicast->threadid);
rig->state.multicast->multicast_running = 1;
+#endif
return RIG_OK;
}
@@ -479,11 +488,17 @@ int multicast_send(RIG *rig, const char *msg, int msglen)
{
// Construct the message to send
if (msglen == 0) { msglen = strlen((char *)msg); }
+ struct sockaddr_in addr;
+ memset(&addr, 0, sizeof(addr));
+ addr.sin_family = AF_INET;
+ addr.sin_addr.s_addr = inet_addr("224.0.0.1");
+ addr.sin_port = htons(4532);
+
// Send the message to the multicast group
ssize_t num_bytes = sendto(rig->state.multicast->sock, msg, msglen, 0,
- (struct sockaddr *)&rig->state.multicast->dest_addr,
- sizeof(rig->state.multicast->dest_addr));
+ (struct sockaddr *)&addr,
+ sizeof(addr));
if (num_bytes < 0)
{
commit 4b43c755a68b254f6066415b68fcdcfbc6c419a0
Author: Mike Black W9MDB <mdb...@ya...>
Date: Fri Jul 7 15:37:06 2023 -0500
Add fifo.h to Makefile.am
diff --git a/src/Makefile.am b/src/Makefile.am
index 31fe4b9fe..6da17e185 100755
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -10,7 +10,7 @@ RIGSRC = hamlibdatetime.h rig.c serial.c serial.h misc.c misc.h register.c regis
network.c network.h cm108.c cm108.h gpio.c gpio.h idx_builtin.h token.h \
par_nt.h microham.c microham.h amplifier.c amp_reg.c amp_conf.c \
amp_conf.h amp_settings.c extamp.c sleep.c sleep.h sprintflst.c \
- sprintflst.h cache.c cache.h snapshot_data.c snapshot_data.h multicast.c fifo.c
+ sprintflst.h cache.c cache.h snapshot_data.c snapshot_data.h multicast.c fifo.c fifo.h
if VERSIONDLL
RIGSRC += \
commit 4f3bdbdffe9ac56f969302d4330dd85a12633fae
Author: Mike Black W9MDB <mdb...@ya...>
Date: Fri Jul 7 15:26:36 2023 -0500
Add fifo routine to be used for CW queueing
diff --git a/src/Makefile.am b/src/Makefile.am
index 17d5a2701..31fe4b9fe 100755
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -10,7 +10,7 @@ RIGSRC = hamlibdatetime.h rig.c serial.c serial.h misc.c misc.h register.c regis
network.c network.h cm108.c cm108.h gpio.c gpio.h idx_builtin.h token.h \
par_nt.h microham.c microham.h amplifier.c amp_reg.c amp_conf.c \
amp_conf.h amp_settings.c extamp.c sleep.c sleep.h sprintflst.c \
- sprintflst.h cache.c cache.h snapshot_data.c snapshot_data.h multicast.c
+ sprintflst.h cache.c cache.h snapshot_data.c snapshot_data.h multicast.c fifo.c
if VERSIONDLL
RIGSRC += \
diff --git a/src/fifo.c b/src/fifo.c
new file mode 100644
index 000000000..44b00c8a9
--- /dev/null
+++ b/src/fifo.c
@@ -0,0 +1,58 @@
+#include <hamlib/rig.h>
+#include <stdio.h>
+#include "fifo.h"
+
+
+void initFIFO(FIFO *fifo)
+{
+ fifo->head = 0;
+ fifo->tail = 0;
+}
+
+// returns RIG_OK if added
+// return -RIG error if overflow
+int push(FIFO *fifo, const char *msg)
+{
+ int len = strlen(msg);
+
+ for (int i = 0; i < len; ++i)
+ {
+ fifo->data[fifo->tail] = msg[i];
+ fifo->tail = (fifo->tail + 1) % FIFO_SIZE;
+
+ if (fifo->tail == fifo->head) { return -RIG_EDOM; }
+ }
+
+ return RIG_OK;
+}
+
+char pop(FIFO *fifo)
+{
+ if (fifo->tail == fifo->head) { return -1; }
+
+ char c = fifo->data[fifo->head];
+ fifo->head = (fifo->head + 1) % FIFO_SIZE;
+ return c;
+}
+
+#ifdef TEST
+int main()
+{
+ FIFO fifo;
+ initFIFO(&fifo);
+
+ const char *str = "Hello, World!\n";
+
+ // Pushing the string onto the FIFO
+ push(&fifo, str);
+
+ // Popping and printing one character at a time
+ int c;
+ while ((c = pop(&fifo)) != -1)
+ {
+ printf("%c", c);
+ }
+
+ return 0;
+}
+#endif
diff --git a/src/fifo.h b/src/fifo.h
new file mode 100644
index 000000000..0eeaedb99
--- /dev/null
+++ b/src/fifo.h
@@ -0,0 +1,12 @@
+#define FIFO_SIZE 1024
+
+typedef struct
+{
+ char data[FIFO_SIZE];
+ int head;
+ int tail;
+} FIFO;
+
+void initFIFO(FIFO *fifo);
+int push(FIFO *fifo, const char *msg);
+char pop(FIFO *fifo);
commit ce052db3a290fd5f00050d79541f969ba9195d79
Author: Mike Black W9MDB <mdb...@ya...>
Date: Fri Jul 7 12:06:38 2023 -0500
Remove get_vfo from ic9700 ic7610 and ic785x
diff --git a/rigs/icom/ic7300.c b/rigs/icom/ic7300.c
index 4623e638e..16e6bb8a5 100644
--- a/rigs/icom/ic7300.c
+++ b/rigs/icom/ic7300.c
@@ -910,7 +910,7 @@ struct rig_caps ic9700_caps =
RIG_MODEL(RIG_MODEL_IC9700),
.model_name = "IC-9700",
.mfg_name = "Icom",
- .version = BACKEND_VER ".13",
+ .version = BACKEND_VER ".14",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
@@ -1169,7 +1169,7 @@ struct rig_caps ic9700_caps =
.get_freq = icom_get_freq,
.set_mode = icom_set_mode_with_data,
.get_mode = icom_get_mode_with_data,
- .get_vfo = icom_get_vfo,
+// .get_vfo = icom_get_vfo,
.set_vfo = ic9700_set_vfo,
.set_ant = NULL,
.get_ant = NULL,
diff --git a/rigs/icom/ic7610.c b/rigs/icom/ic7610.c
index 34ed54aaa..26e4e8961 100644
--- a/rigs/icom/ic7610.c
+++ b/rigs/icom/ic7610.c
@@ -545,7 +545,7 @@ struct rig_caps ic7610_caps =
.set_mode = icom_set_mode_with_data,
.get_mode = icom_get_mode_with_data,
.set_vfo = icom_set_vfo,
- .get_vfo = icom_get_vfo,
+// .get_vfo = icom_get_vfo,
.set_ant = icom_set_ant,
.get_ant = icom_get_ant,
diff --git a/rigs/icom/ic785x.c b/rigs/icom/ic785x.c
index 0bb1e6a59..46e180617 100644
--- a/rigs/icom/ic785x.c
+++ b/rigs/icom/ic785x.c
@@ -242,7 +242,7 @@ const struct rig_caps ic785x_caps =
RIG_MODEL(RIG_MODEL_IC785x),
.model_name = "IC-7850/7851",
.mfg_name = "Icom",
- .version = BACKEND_VER ".7",
+ .version = BACKEND_VER ".8",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
@@ -438,7 +438,7 @@ const struct rig_caps ic785x_caps =
.set_mode = icom_set_mode_with_data,
.get_mode = icom_get_mode_with_data,
.set_vfo = icom_set_vfo,
- .get_vfo = icom_get_vfo,
+// .get_vfo = icom_get_vfo,
.set_ant = icom_set_ant,
.get_ant = icom_get_ant,
commit 3cc6b7614c5ce836c86787eb255e59fba989a49a
Author: Mike Black W9MDB <mdb...@ya...>
Date: Fri Jul 7 11:47:59 2023 -0500
Fix IC7610 caps structure for new firmware test
diff --git a/rigs/icom/ic7610.c b/rigs/icom/ic7610.c
index 71957e762..34ed54aaa 100644
--- a/rigs/icom/ic7610.c
+++ b/rigs/icom/ic7610.c
@@ -345,12 +345,12 @@ int ic7610_get_clock(RIG *rig, int *year, int *month, int *day, int *hour,
return retval;
}
-const struct rig_caps ic7610_caps =
+struct rig_caps ic7610_caps =
{
RIG_MODEL(RIG_MODEL_IC7610),
.model_name = "IC-7610",
.mfg_name = "Icom",
- .version = BACKEND_VER ".14",
+ .version = BACKEND_VER ".15",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
diff --git a/rigs/icom/icom.c b/rigs/icom/icom.c
index 4b9a691b5..bbe377b2c 100644
--- a/rigs/icom/icom.c
+++ b/rigs/icom/icom.c
@@ -1666,12 +1666,16 @@ int icom_get_freq(RIG *rig, vfo_t vfo, freq_t *freq)
// Rigs like IC-7600 new firmware has 0x25 and 0x26
// So if this succeeds we'll assume all such rigs are targetable freq & mode
- rig_debug(RIG_DEBUG_VERBOSE, "%s: TARGETABLE_FREQ and TARGETABLE_MODE enabled\n", __func__);
- if (RIG_IS_IC7600 || RIG_IS_IC7610)
+ int targetable_vfo_save = rig->caps->targetable_vfo;
+ if ((RIG_IS_IC7600 || RIG_IS_IC7610) && priv->x25cmdfails <= 0)
{ // the 7600/7610 do it different 0=Main, 1=Sub -- maybe other Icoms will start doing this too
- rig->caps->targetable_vfo = rig->state.targetable_vfo |= RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE;
subcmd2 = 0;
if (vfo & RIG_VFO_B || vfo & RIG_VFO_SUB) subcmd2 = 1;
+ if (priv->x25cmdfails < 0)
+ { // we'll test this once to support the newer firmware
+ rig_debug(RIG_DEBUG_VERBOSE, "%s: TARGETABLE_FREQ and TARGETABLE_MODE enabled for testing\n", __func__);
+ rig->caps->targetable_vfo = rig->state.targetable_vfo |= RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE;
+ }
}
retval = icom_transaction(rig, cmd2, subcmd2, NULL, 0, freqbuf, &freq_len);
@@ -1685,6 +1689,11 @@ int icom_get_freq(RIG *rig, vfo_t vfo, freq_t *freq)
if (priv->x25cmdfails < 0)
{
priv->x25cmdfails = 1;
+ if (RIG_IS_IC7600 || RIG_IS_IC7610)
+ {
+ rig->caps->targetable_vfo = targetable_vfo_save;
+ rig_debug(RIG_DEBUG_VERBOSE, "%s: TARGETABLE_FREQ and TARGETABLE_MODE disabled -- older firmare likely\n", __func__);
+ }
}
rig_debug(RIG_DEBUG_TRACE,
diff --git a/rigs/icom/icom.h b/rigs/icom/icom.h
index e5a00cf20..6ff4ea050 100644
--- a/rigs/icom/icom.h
+++ b/rigs/icom/icom.h
@@ -35,7 +35,7 @@
#include <sys/time.h>
#endif
-#define BACKEND_VER "20230627"
+#define BACKEND_VER "20230707"
#define ICOM_IS_ID31 rig_is_model(rig, RIG_MODEL_ID31)
#define ICOM_IS_ID51 rig_is_model(rig, RIG_MODEL_ID51)
@@ -444,7 +444,7 @@ extern const struct rig_caps ic756pro2_caps;
extern const struct rig_caps ic756pro3_caps;
extern const struct rig_caps ic751_caps;
extern struct rig_caps ic7600_caps; // need to modify targetable_vfo depending on response to 0x25 cmd
-extern const struct rig_caps ic7610_caps;
+extern struct rig_caps ic7610_caps;
extern const struct rig_caps ic761_caps;
extern const struct rig_caps ic765_caps;
extern const struct rig_caps ic7700_caps;
-----------------------------------------------------------------------
Summary of changes:
include/hamlib/rig.h | 2 +
rigs/icom/ic7300.c | 4 +-
rigs/icom/ic7610.c | 6 +--
rigs/icom/ic785x.c | 4 +-
rigs/icom/icom.c | 15 ++++--
rigs/icom/icom.h | 4 +-
src/Makefile.am | 2 +-
src/cache.c | 4 +-
src/fifo.c | 59 +++++++++++++++++++++
src/fifo.h | 12 +++++
src/iofunc.c | 3 ++
src/multicast.c | 55 ++++++++++++--------
src/rig.c | 141 ++++++++++++++++++++++++++++++++++++++++++++++++++-
13 files changed, 274 insertions(+), 37 deletions(-)
create mode 100644 src/fifo.c
create mode 100644 src/fifo.h
hooks/post-receive
--
Hamlib -- Ham radio control libraries
|
|
From: n0nb <n0...@us...> - 2023-07-07 15:43:16
|
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 3bda269494f4719fa49a996dd62ab0429f81e9d4 (commit)
via 90585cbb6e0d51440ea122e1b054e39db52da0b4 (commit)
via 24f17730f4ee4032216cb18e8a509fca73751b87 (commit)
via 52cba4630b5eea36421bb55aa698fb1e211985d6 (commit)
via ad1e63efa1e64e83cd9bb1c10bfc0b45f7e308bb (commit)
via 58e5e260a51fc45f88ccc5a2d5551e5fd89e203d (commit)
via 858f2b66c3f5e2ad8845a8b76b1bd3008283a132 (commit)
via 44fa32c8cd8be026f9fa43a469247c9383220009 (commit)
via 7a713634e37f2eca1ec05a74cae8022b5d88c8c7 (commit)
via 4c02a70ea3bcea5b68aa765a837aed04eee579a3 (commit)
via 0f706dfaae539e5bde62848ee20f5f6b1e4cf7f9 (commit)
via 16b83b76b37503d81903fee6be2b237f6d78921a (commit)
via 25ad13cea9ffe4f853a5a4070399b80e7adef778 (commit)
via 4171598eafa5c028010b3191ff6659ff66847783 (commit)
via f3cab55c4f8782761ceb9674c948a9a254050dc5 (commit)
via a3ac6e0be312486628cb97199fa5e7eaa1e63954 (commit)
via c0c70b014693f7d41703cb6087416b96c6935a90 (commit)
via 2728d47a6052e6b3f1a469fdb0c716e7b0e2f290 (commit)
via 4bd904502ba66a89bb9ec47fd799075bf8393306 (commit)
via b158b224ab0f4d697136efaa0a71849df67713de (commit)
via fcef98e60dc728453e245f7e59e0dcad2dc644d2 (commit)
via 5c3f26cc5668e01f9540d3ab6c541ebdcd390eaf (commit)
via e9d032011106dd24179754788b0eeb958711ab81 (commit)
via 28396bad7a3fc116a8666269a27c95a7c1df3d94 (commit)
via 5a26bde2369c6a2c986cde7effc9a9a1d01ba140 (commit)
via 105cc6e3c612a1f7c94395c348c7e3895ac39062 (commit)
via 3283c3b22ffda6a112376bf4278ad13e999011a4 (commit)
via 701aaab1c6fb63ff7a9e0e4478c4879370a6a354 (commit)
via c5937b23e518a396870a2c3ebc791b18f47cb673 (commit)
via 1c2033c17f6d70f76b7a5b1b867a198e15b109a5 (commit)
via 751935d83879c8edad2f58d131948eb714fafe50 (commit)
via 5281361e071973386025571eef636f68ca7293db (commit)
via efb567f66701b4227d290ca26bdb5155be91e109 (commit)
via 97811d2aa7eb2246da0195150b2018cbc15bf193 (commit)
via 4dfe98b0fea83737193a97105f4c52ee627a2962 (commit)
via b3a61cf00ea55fdeb3fd12d2dc7238d9e353e533 (commit)
via f14c241f43b83ed811a00d3d71f6a4849879436e (commit)
via fa31975650c242dd0b734e59065a23b41e8eeaa8 (commit)
via d9b936618c8a65593c71f435174bb3e462fb39c4 (commit)
via f9d27d0e35ff0aa8fa47c75d7642199efbb16ad1 (commit)
via 8e94bc63d0888fc70b551bf0e76d56c9c3ba5760 (commit)
via 33d13f78492e85bc754c21bd4c5771f40118e6af (commit)
via 07dde9ae0fe503a7093559ab947de1a21ad423e3 (commit)
via ebedbbbfb5ba84ac8591220e6f8387750575693b (commit)
via dc1fa7f450909a1bb2cc7fa40d2d5b688a204359 (commit)
via 2e610be0313cef0366ce61443d2b54d040ab9b3b (commit)
via c640f663260510e274b9991aa4cea929a63f6161 (commit)
via 88a1d88e0fae81402ed31e9e6d7921858d34404f (commit)
via 03e72c3a994b1a0a692faa8b7c23209f91fb38b3 (commit)
via 788db91e2fce8c354b1779c717433bb8e470dc10 (commit)
via 163d10651bb0d9601943e75b0b210af4288bca17 (commit)
via c4f635ab5d71e9312380a264c655f2344e44af4f (commit)
via 224d68d1ac3ffe951e1258a67fec726d1cfca313 (commit)
via 6100bfdc115cb32021cb9dbf774a1e1f7e3a44c9 (commit)
via 8d8f224affc955b94f12c0b4da7be533a55d6217 (commit)
via 32569d40201728de756a8bfe012495bdcbadebea (commit)
via 9bec3fad4ffb76073b1ed0bea26c25221ef88e20 (commit)
from 05cf5546717be163e94b30f98cd17a3f1136ba1a (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 3bda269494f4719fa49a996dd62ab0429f81e9d4
Author: Mike Black W9MDB <mdb...@ya...>
Date: Tue Jul 4 22:20:34 2023 -0500
Add elapsd to rig_test_cw
diff --git a/tests/rig_tests.c b/tests/rig_tests.c
index 8a8a63401..a4a706b69 100644
--- a/tests/rig_tests.c
+++ b/tests/rig_tests.c
@@ -8,6 +8,7 @@ int rig_test_cw(RIG *rig)
char *s = "SOS SOS SOS SOS SOS SOS SOS SOS SOS SOS SOS SOS SOS";
//char *s = "TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST";
int i;
+ ELAPSED1;
ENTERFUNC;
for (i = 0; i < strlen(s); ++i)
@@ -26,5 +27,6 @@ int rig_test_cw(RIG *rig)
}
}
+ ELAPSED2;
RETURNFUNC(RIG_OK);
}
commit 90585cbb6e0d51440ea122e1b054e39db52da0b4
Author: Mike Black W9MDB <mdb...@ya...>
Date: Tue Jul 4 17:36:42 2023 -0500
Add testmW2power.c
diff --git a/tests/testmW2power.c b/tests/testmW2power.c
new file mode 100644
index 000000000..215b20b25
--- /dev/null
+++ b/tests/testmW2power.c
@@ -0,0 +1,78 @@
+/*
+ * Hamlib sample program to test transceive mode (async event)
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <stdlib.h>
+
+#include <hamlib/rig.h>
+
+#include <hamlib/config.h>
+
+int nrigs = 0;
+
+int callback(const struct rig_caps *caps, rig_ptr_t rigp)
+{
+ RIG *rig = (RIG *) rigp;
+
+ switch (caps->rig_model)
+ {
+ case RIG_MODEL_NETRIGCTL:
+ return 1;
+ break;
+ }
+
+ rig = rig_init(caps->rig_model);
+
+ if (!rig)
+ {
+ fprintf(stderr, "Unknown rig num: %u\n", caps->rig_model);
+ fprintf(stderr, "Please check riglist.h\n");
+ exit(1); /* whoops! something went wrong (mem alloc?) */
+ }
+
+ if (caps->mW2power)
+ {
+ nrigs++;
+ printf("%20s:", caps->model_name);
+ fflush(stdout);
+ float fpow;
+ unsigned int mwpower = 1 * 1000;
+ freq_t freq = MHz(14);
+ int retcode = rig_mW2power(rig, &fpow, mwpower, freq, RIG_MODE_CW);
+
+ if (retcode != RIG_OK)
+ {
+ printf("rig_mW2power: error = %s \n", rigerror(retcode));
+ return 1;
+ }
+
+ if (fpow < 0.009 || fpow > .11)
+ {
+// printf("rig=%d, fpow=%g, min=%d, max=%d\n", caps->rig_model, fpow, caps->);
+ printf("rig=%d, fpow=%g\n", caps->rig_model, fpow);
+ // we call again to make debugging this section easier
+ rig_mW2power(rig, &fpow, mwpower, freq, RIG_MODE_CW);
+ }
+ else { printf("\n"); }
+ }
+
+ rig_cleanup(rig); /* if you care about memory */
+ return 1;
+}
+
+int main(int argc, char *argv[])
+{
+ RIG *rig;
+ int i;
+
+ rig_set_debug(RIG_DEBUG_NONE);
+
+ rig_load_all_backends();
+ rig_list_foreach(callback, &rig);
+ printf("Done testing %d rigs\n", nrigs);
+
+ return 0;
+}
commit 24f17730f4ee4032216cb18e8a509fca73751b87
Author: Mike Black W9MDB <mdb...@ya...>
Date: Tue Jul 4 17:31:07 2023 -0500
Add \test command to rigctl -- first test routine is "cw"
https://github.com/Hamlib/Hamlib/issues/1281
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 0e3d453d8..72717b30e 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -17,9 +17,9 @@ DISTCLEANFILES = rigctl.log rigctl.sum testbcd.log testbcd.sum
bin_PROGRAMS = rigctl rigctld rigmem rigsmtr rigswr rotctl rotctld rigctlcom rigctltcp rigctlsync ampctl ampctld rigtestmcast rigtestmcastrx $(TESTLIBUSB)
#check_PROGRAMS = dumpmem testrig testrigopen testrigcaps testtrn testbcd testfreq listrigs testloc rig_bench testcache cachetest cachetest2 testcookie testgrid testsecurity
-check_PROGRAMS = dumpmem testrig testrigopen testrigcaps testtrn testbcd testfreq listrigs testloc rig_bench testcache cachetest cachetest2 testcookie testgrid hamlibmodels
+check_PROGRAMS = dumpmem testrig testrigopen testrigcaps testtrn testbcd testfreq listrigs testloc rig_bench testcache cachetest cachetest2 testcookie testgrid hamlibmodels testmW2power
-RIGCOMMONSRC = rigctl_parse.c rigctl_parse.h dumpcaps.c dumpstate.c uthash.h
+RIGCOMMONSRC = rigctl_parse.c rigctl_parse.h dumpcaps.c dumpstate.c uthash.h rig_tests.c rig_tests.h
ROTCOMMONSRC = rotctl_parse.c rotctl_parse.h dumpcaps_rot.c uthash.h
AMPCOMMONSRC = ampctl_parse.c ampctl_parse.h dumpcaps_amp.c uthash.h
diff --git a/tests/rig_tests.c b/tests/rig_tests.c
new file mode 100644
index 000000000..8a8a63401
--- /dev/null
+++ b/tests/rig_tests.c
@@ -0,0 +1,30 @@
+#include <stdio.h>
+#include <hamlib/rig.h>
+#include <misc.h>
+
+
+int rig_test_cw(RIG *rig)
+{
+ char *s = "SOS SOS SOS SOS SOS SOS SOS SOS SOS SOS SOS SOS SOS";
+ //char *s = "TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST";
+ int i;
+ ENTERFUNC;
+
+ for (i = 0; i < strlen(s); ++i)
+ {
+ char cw[2];
+ cw[0] = s[i];
+ cw[1] = '\0';
+
+ int retval = rig_send_morse(rig, RIG_VFO_CURR, cw);
+ hl_usleep(100*1000);
+
+ if (retval != RIG_OK)
+ {
+ rig_debug(RIG_DEBUG_ERR, "%s: rig_send_morse error: %s\n", __func__,
+ rigerror(retval));
+ }
+ }
+
+ RETURNFUNC(RIG_OK);
+}
diff --git a/tests/rig_tests.h b/tests/rig_tests.h
new file mode 100644
index 000000000..7cd3e18a6
--- /dev/null
+++ b/tests/rig_tests.h
@@ -0,0 +1,3 @@
+#include <hamlib/rig.h>
+
+int rig_test_cw(RIG *rig);
diff --git a/tests/rigctl_parse.c b/tests/rigctl_parse.c
index 23e25d566..c0386bd2a 100644
--- a/tests/rigctl_parse.c
+++ b/tests/rigctl_parse.c
@@ -36,6 +36,7 @@
#include <ctype.h>
#include <errno.h>
#include <getopt.h>
+#include <rig_tests.h>
// If true adds some debug statements to see flow of rigctl parsing
int debugflow = 0;
@@ -264,6 +265,7 @@ declare_proto_rig(set_lock_mode);
declare_proto_rig(get_lock_mode);
declare_proto_rig(send_raw);
declare_proto_rig(client_version);
+declare_proto_rig(test);
/*
@@ -379,6 +381,7 @@ static struct test_table test_list[] =
{ 0xa4, "send_raw", ACTION(send_raw), ARG_NOVFO | ARG_IN1 | ARG_IN2 | ARG_OUT3, "Terminator", "Command", "Send raw answer" },
{ 0xa5, "client_version", ACTION(client_version), ARG_NOVFO | ARG_IN1, "Version", "Client version" },
{ 0xa6, "get_vfo_list", ACTION(get_vfo_list), ARG_NOVFO },
+ { 0xa7, "test", ACTION(test), ARG_NOVFO | ARG_IN, "routine" },
{ 0x00, "", NULL },
};
@@ -2437,6 +2440,20 @@ declare_proto_rig(get_vfo_list)
RETURNFUNC2(RIG_OK);
}
+/* '\test' */
+declare_proto_rig(test)
+{
+ ENTERFUNC2;
+ if (!strcmp(arg1, "?"))
+ {
+ fprintf(fout, "cw\n");
+ RETURNFUNC2(RIG_OK);
+ }
+ if (strcmp(arg1, "cw")==0) rig_test_cw(rig);
+
+ RETURNFUNC2(RIG_OK);
+}
+
/* '\get_modes' */
declare_proto_rig(get_modes)
{
commit 52cba4630b5eea36421bb55aa698fb1e211985d6
Author: Mike Black W9MDB <mdb...@ya...>
Date: Mon Jul 3 07:56:04 2023 -0500
Change FLRig PKT modes to PKTUSB/LSB instead of RTTY
https://github.com/Hamlib/Hamlib/issues/1327
diff --git a/rigs/dummy/flrig.c b/rigs/dummy/flrig.c
index 8a77cc69e..bc5964043 100644
--- a/rigs/dummy/flrig.c
+++ b/rigs/dummy/flrig.c
@@ -138,7 +138,7 @@ const struct rig_caps flrig_caps =
RIG_MODEL(RIG_MODEL_FLRIG),
.model_name = "FLRig",
.mfg_name = "FLRig",
- .version = "20221109.0",
+ .version = "20230703.0",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
@@ -996,12 +996,12 @@ static int flrig_open(RIG *rig)
else if (streq(p, "LSB-D2")) { modeMapAdd(&modes, RIG_MODE_PKTLSB, p); }
else if (streq(p, "LSB-D3")) { modeMapAdd(&modes, RIG_MODE_PKTLSB, p); }
else if (streq(p, "NFM")) { modeMapAdd(&modes, RIG_MODE_FMN, p); }
- else if (streq(p, "PKT")) { modeMapAdd(&modes, RIG_MODE_RTTY, p); }
+ else if (streq(p, "PKT")) { modeMapAdd(&modes, RIG_MODE_PKTUSB, p); }
else if (streq(p, "PKT-FM")) { modeMapAdd(&modes, RIG_MODE_PKTFM, p); }
- else if (streq(p, "PKT-L")) { modeMapAdd(&modes, RIG_MODE_RTTYR, p); }
- else if (streq(p, "PKT-U")) { modeMapAdd(&modes, RIG_MODE_RTTY, p); }
- else if (streq(p, "PKT(L)")) { modeMapAdd(&modes, RIG_MODE_RTTYR, p); }
- else if (streq(p, "PKT(U)")) { modeMapAdd(&modes, RIG_MODE_RTTY, p); }
+ else if (streq(p, "PKT-L")) { modeMapAdd(&modes, RIG_MODE_PKTLSB, p); }
+ else if (streq(p, "PKT-U")) { modeMapAdd(&modes, RIG_MODE_PKTUSB, p); }
+ else if (streq(p, "PKT(L)")) { modeMapAdd(&modes, RIG_MODE_PKTLSB, p); }
+ else if (streq(p, "PKT(U)")) { modeMapAdd(&modes, RIG_MODE_PKTUSB, p); }
else if (streq(p, "PSK")) { modeMapAdd(&modes, RIG_MODE_RTTY, p); }
else if (streq(p, "PSK-L")) { modeMapAdd(&modes, RIG_MODE_RTTYR, p); }
else if (streq(p, "PSK-R")) { modeMapAdd(&modes, RIG_MODE_RTTYR, p); }
commit ad1e63efa1e64e83cd9bb1c10bfc0b45f7e308bb
Author: Mike Black W9MDB <mdb...@ya...>
Date: Sun Jul 2 17:50:38 2023 -0500
Fix FT-991 Fake It failing to retrun to receive frequency
Yaesu rigs will no return from set_ptt until TX0 is achieved
Restrict 300ms wait just to FTDX3000 due to antenna switching
This speeds up set_ptt off for other Yaeus rigs
https://github.com/Hamlib/Hamlib/issues/1326
diff --git a/rigs/yaesu/newcat.c b/rigs/yaesu/newcat.c
index eb30eb57f..9b8de873d 100644
--- a/rigs/yaesu/newcat.c
+++ b/rigs/yaesu/newcat.c
@@ -1943,6 +1943,7 @@ int newcat_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt)
if (rig->state.current_mode != RIG_MODE_CW
&& rig->state.current_mode != RIG_MODE_CWR
&& rig->state.current_mode != RIG_MODE_CWN
+ && (is_ftdx3000 || is_ftdx3000dm)
)
{
// DX3000 with seperate rx/tx antennas was failing frequency change
@@ -10908,6 +10909,7 @@ int newcat_set_cmd_validate(RIG *rig)
{
int bytes;
char cmd[256]; // big enough
+ repeat:
rig_flush(&state->rigport); /* discard any unsolicited data */
SNPRINTF(cmd, sizeof(cmd), "%s", priv->cmd_str);
rc = write_block(&state->rigport, (unsigned char *) cmd, strlen(cmd));
@@ -10942,6 +10944,7 @@ int newcat_set_cmd_validate(RIG *rig)
if (strncmp(priv->cmd_str, "TX", 2) == 0
&& strncmp(priv->ret_data, "TX", 2) == 0)
{
+ if (strstr(priv->ret_data,"TX2")) goto repeat;
// TX command does not echo what's sent so we just check the basic command
RETURNFUNC(RIG_OK);
}
diff --git a/rigs/yaesu/newcat.h b/rigs/yaesu/newcat.h
index c943de044..23cc3083d 100644
--- a/rigs/yaesu/newcat.h
+++ b/rigs/yaesu/newcat.h
@@ -50,7 +50,7 @@
typedef char ncboolean;
/* shared function version */
-#define NEWCAT_VER "20230531"
+#define NEWCAT_VER "20230702"
/* Hopefully large enough for future use, 128 chars plus '\0' */
#define NEWCAT_DATA_LEN 129
commit 58e5e260a51fc45f88ccc5a2d5551e5fd89e203d
Merge: 858f2b66c 44fa32c8c
Author: Michael Black <mdb...@ya...>
Date: Sun Jul 2 17:28:52 2023 -0500
Merge pull request #1324 from koarlchen/rigctld-get-powerstat-separator-character
Fix 'get_powerstat' command provided by rigctld regarding extended response protocol
commit 858f2b66c3f5e2ad8845a8b76b1bd3008283a132
Merge: 7a713634e 4dfe98b0f
Author: Michael Black <mdb...@ya...>
Date: Sun Jul 2 17:28:18 2023 -0500
Merge pull request #1315 from j-gallardo/j-gallardo-patch-1
Update password.c
commit 44fa32c8cd8be026f9fa43a469247c9383220009
Author: max <ma...@ka...>
Date: Thu Jun 29 16:20:00 2023 +0200
Fix 'get_powerstat' command provided by rigctld by taking care of the given separator according to the extended response protocol
diff --git a/tests/rigctl_parse.c b/tests/rigctl_parse.c
index c076a8ac5..23e25d566 100644
--- a/tests/rigctl_parse.c
+++ b/tests/rigctl_parse.c
@@ -4796,7 +4796,7 @@ declare_proto_rig(get_powerstat)
fprintf(fout, "%s: ", cmd->arg1);
}
- fprintf(fout, "%d\n", stat);
+ fprintf(fout, "%d%c", stat, resp_sep);
rig_powerstat = stat; // update our global so others can see powerstat
RETURNFUNC2(status);
commit 7a713634e37f2eca1ec05a74cae8022b5d88c8c7
Merge: 4c02a70ea 0f706dfaa
Author: Mike Black W9MDB <mdb...@ya...>
Date: Thu Jun 29 09:19:00 2023 -0500
Merge branch 'master' of https://github.com/Hamlib/Hamlib
commit 4c02a70ea3bcea5b68aa765a837aed04eee579a3
Author: Mike Black W9MDB <mdb...@ya...>
Date: Thu Jun 29 09:17:46 2023 -0500
Fix IC-76XX rig_mW2power -- fixed any such rig
https://github.com/Hamlib/Hamlib/issues/1323
diff --git a/src/rig.c b/src/rig.c
index e70bbda9b..7bc854191 100644
--- a/src/rig.c
+++ b/src/rig.c
@@ -6115,6 +6115,7 @@ int HAMLIB_API rig_mW2power(RIG *rig,
rmode_t mode)
{
const freq_range_t *txrange;
+ int limited = 0;
if (!rig || !rig->caps || !power || mwpower == 0)
{
@@ -6142,14 +6143,20 @@ int HAMLIB_API rig_mW2power(RIG *rig,
RETURNFUNC2(RIG_OK);
}
- *power = (float)mwpower / txrange->high_power;
+ *power = (float)mwpower / (float) txrange->high_power;
if (*power > 1.0)
{
*power = 1.0;
+ limited = 1;
+ }
+ else if (*power < 0.0)
+ {
+ *power = 0;
+ limited = 1;
}
- RETURNFUNC2(mwpower > txrange->high_power ? RIG_OK : -RIG_ETRUNC);
+ RETURNFUNC2(limited ? RIG_ETRUNC : RIG_OK);
}
commit 0f706dfaae539e5bde62848ee20f5f6b1e4cf7f9
Merge: 25ad13cea 16b83b76b
Author: Michael Black <mdb...@ya...>
Date: Thu Jun 29 07:35:13 2023 -0500
Merge pull request #1322 from koarlchen/man-rigctld-typo-section-command
Fix minor typo in man page for rigctld
commit 16b83b76b37503d81903fee6be2b237f6d78921a
Author: max <ma...@ka...>
Date: Thu Jun 29 13:34:14 2023 +0200
Fix minor typo (missing u character)
diff --git a/doc/man1/rigctld.1 b/doc/man1/rigctld.1
index af3b6b4e0..9680b7fc7 100644
--- a/doc/man1/rigctld.1
+++ b/doc/man1/rigctld.1
@@ -436,7 +436,7 @@ Since most of the
.B Hamlib
operations have a
.BR set " and a " get
-method, a single pper case letter will be used for
+method, a single upper case letter will be used for
.B set
methods whereas the corresponding single lower case letter refers to the
.B get
commit 25ad13cea9ffe4f853a5a4070399b80e7adef778
Author: Mike Black W9MDB <mdb...@ya...>
Date: Wed Jun 28 12:48:30 2023 -0500
Add BG2FX FC4/C/CR/L
diff --git a/NEWS b/NEWS
index b99dc6bb4..a0114ed9c 100644
--- a/NEWS
+++ b/NEWS
@@ -13,6 +13,8 @@ Version 5.x -- future
* Change FT1000MP Mark V model names to align with FT1000MP
Version 4.6
+ * Added BG2FX FX4/C/CR/L
+ * Fixed IC7610 to use new 0x25 0x26 command added in latest firmware
* Fix W command in rigctld to work propery -- can take terminating char or # of bytes to expect
* Add rig_set_debug_filename so Python can redirect debug stream
* Fix Yaesu LBL_NR to use proper values
diff --git a/include/hamlib/riglist.h b/include/hamlib/riglist.h
index f231f38b8..b186f2308 100644
--- a/include/hamlib/riglist.h
+++ b/include/hamlib/riglist.h
@@ -198,6 +198,7 @@
#define RIG_MODEL_LAB599_TX500 RIG_MAKE_MODEL(RIG_KENWOOD,50)
#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)
/*
* Icom
diff --git a/rigs/kenwood/kenwood.c b/rigs/kenwood/kenwood.c
index f03f526aa..649a7fee8 100644
--- a/rigs/kenwood/kenwood.c
+++ b/rigs/kenwood/kenwood.c
@@ -6105,6 +6105,7 @@ DECLARE_INITRIG_BACKEND(kenwood)
rig_register(&tx500_caps);
rig_register(&sdruno_caps);
rig_register(&qrplabs_caps);
+ rig_register(&fx4_caps);
return (RIG_OK);
}
diff --git a/rigs/kenwood/kenwood.h b/rigs/kenwood/kenwood.h
index 836720667..c12a850f3 100644
--- a/rigs/kenwood/kenwood.h
+++ b/rigs/kenwood/kenwood.h
@@ -318,6 +318,7 @@ extern const struct rig_caps malachite_caps;
extern const struct rig_caps tx500_caps;
extern const struct rig_caps sdruno_caps;
extern const struct rig_caps qrplabs_caps;
+extern const struct rig_caps fx4_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,
diff --git a/rigs/kenwood/ts590.c b/rigs/kenwood/ts590.c
index 6902e34a6..b385da864 100644
--- a/rigs/kenwood/ts590.c
+++ b/rigs/kenwood/ts590.c
@@ -29,9 +29,13 @@
#include "cal.h"
#include "iofunc.h"
+#define FX4_ALL_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_FM|RIG_MODE_PKTUSB|RIG_MODE_PKTLSB)
#define TS590_ALL_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_FM|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_PKTFM|RIG_MODE_PKTUSB|RIG_MODE_PKTLSB|RIG_MODE_PKTAM)
+#define FX4_OTHER_TX_MODES (RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_FM)
#define TS590_OTHER_TX_MODES (RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_FM|RIG_MODE_RTTY)
+#define FX4_AM_TX_MODES (RIG_MODE_AM)
#define TS590_AM_TX_MODES (RIG_MODE_AM|RIG_MODE_PKTAM)
+#define FX4_VFO (RIG_VFO_A|RIG_VFO_B)
#define TS590_VFO (RIG_VFO_A|RIG_VFO_B|RIG_VFO_MEM)
#define TS590_LEVEL_GET (RIG_LEVEL_RFPOWER|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_SQL|RIG_LEVEL_AGC|RIG_LEVEL_MICGAIN|RIG_LEVEL_STRENGTH|RIG_LEVEL_KEYSPD|RIG_LEVEL_CWPITCH| \
@@ -49,6 +53,7 @@
#define TS590_SCAN_OPS (RIG_SCAN_VFO)
+#define FX4_ANTS (RIG_ANT_1)
#define TS590_ANTS (RIG_ANT_1|RIG_ANT_2)
#define TS590_CHANNEL_CAPS { \
@@ -1734,6 +1739,200 @@ const struct rig_caps ts590_caps =
.hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS
};
+/**
+ * BG2FX FX-4C/FX-4CR rig capabilities
+ * Supposed to be 590S compatible
+ * Separate entry allows for customization
+ */
+const struct rig_caps fx4_caps =
+{
+ RIG_MODEL(RIG_MODEL_FX4),
+ .model_name = "FX4/C/CR/L",
+ .mfg_name = "BG2FX",
+ .version = BACKEND_VER ".7",
+ .copyright = "LGPL",
+ .status = RIG_STATUS_STABLE,
+ .rig_type = RIG_TYPE_TRANSCEIVER,
+ .ptt_type = RIG_PTT_RIG_MICDATA,
+ .dcd_type = RIG_DCD_RIG,
+ .port_type = RIG_PORT_SERIAL,
+ .serial_rate_min = 115200,
+ .serial_rate_max = 115200,
+ .serial_data_bits = 8,
+ .serial_stop_bits = 1,
+ .serial_parity = RIG_PARITY_NONE,
+ .serial_handshake = RIG_HANDSHAKE_HARDWARE,
+ .write_delay = 0,
+ .post_write_delay = 0,
+ .timeout = 500,
+ .retry = 3,
+ .preamp = {12, RIG_DBLST_END,},
+ .attenuator = {12, RIG_DBLST_END,},
+ .max_rit = kHz(9.99),
+ .max_xit = kHz(9.99),
+ .max_ifshift = Hz(0),
+ .targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE,
+ .transceive = RIG_TRN_RIG,
+ .agc_level_count = 6,
+ .agc_levels = { RIG_AGC_OFF, RIG_AGC_SLOW, RIG_AGC_MEDIUM, RIG_AGC_FAST, RIG_AGC_SUPERFAST, RIG_AGC_ON },
+
+ .chan_list = { /* TBC */
+ { 0, 89, RIG_MTYPE_MEM, TS590_CHANNEL_CAPS },
+ { 90, 99, RIG_MTYPE_EDGE, TS590_CHANNEL_CAPS },
+ RIG_CHAN_END,
+ },
+
+ .rx_range_list1 = {
+ {kHz(30), Hz(59999999), FX4_ALL_MODES, -1, -1, FX4_VFO, FX4_ANTS},
+ RIG_FRNG_END,
+ }, /*!< Receive frequency range list for ITU region 1 */
+ .tx_range_list1 = {
+ {kHz(3500), kHz(3800), FX4_OTHER_TX_MODES, 5000, 100000, FX4_VFO, FX4_ANTS},
+ {kHz(3500), kHz(3800), FX4_AM_TX_MODES, 5000, 25000, FX4_VFO, FX4_ANTS},
+ {MHz(7), kHz(7200), FX4_OTHER_TX_MODES, 5000, 100000, FX4_VFO, FX4_ANTS},
+ {MHz(7), kHz(7200), FX4_AM_TX_MODES, 5000, 25000, FX4_VFO, FX4_ANTS},
+ {kHz(10100), kHz(10150), FX4_OTHER_TX_MODES, 5000, 100000, FX4_VFO, FX4_ANTS},
+ {kHz(10100), kHz(10150), FX4_AM_TX_MODES, 5000, 25000, FX4_VFO, FX4_ANTS},
+ {MHz(14), kHz(14350), FX4_OTHER_TX_MODES, 5000, 100000, FX4_VFO, FX4_ANTS},
+ {MHz(14), kHz(14350), FX4_AM_TX_MODES, 5000, 25000, FX4_VFO, FX4_ANTS},
+ {kHz(18068), kHz(18168), FX4_OTHER_TX_MODES, 5000, 100000, FX4_VFO, FX4_ANTS},
+ {kHz(18068), kHz(18168), FX4_AM_TX_MODES, 5000, 25000, FX4_VFO, FX4_ANTS},
+ {MHz(21), kHz(21450), FX4_OTHER_TX_MODES, 5000, 100000, FX4_VFO, FX4_ANTS},
+ {MHz(21), kHz(21450), FX4_AM_TX_MODES, 5000, 25000, FX4_VFO, FX4_ANTS},
+ {kHz(24890), kHz(24990), FX4_OTHER_TX_MODES, 5000, 100000, FX4_VFO, FX4_ANTS},
+ {kHz(24890), kHz(24990), FX4_AM_TX_MODES, 5000, 25000, FX4_VFO, FX4_ANTS},
+ {MHz(28), kHz(29700), FX4_OTHER_TX_MODES, 5000, 100000, FX4_VFO, FX4_ANTS},
+ {MHz(28), kHz(29700), FX4_AM_TX_MODES, 5000, 25000, FX4_VFO, FX4_ANTS},
+ {MHz(50), kHz(52000), FX4_OTHER_TX_MODES, 5000, 100000, FX4_VFO, FX4_ANTS},
+ {MHz(50), kHz(52000), FX4_AM_TX_MODES, 5000, 25000, FX4_VFO, FX4_ANTS},
+ RIG_FRNG_END,
+ }, /*!< Transmit frequency range list for ITU region 1 */
+ .rx_range_list2 = {
+ {kHz(30), Hz(59999999), FX4_ALL_MODES, -1, -1, FX4_VFO, FX4_ANTS},
+ RIG_FRNG_END,
+ }, /*!< Receive frequency range list for ITU region 2 */
+ .tx_range_list2 = {
+ {kHz(3500), MHz(4) - 1, FX4_OTHER_TX_MODES, 5000, 100000, FX4_VFO, FX4_ANTS},
+ {kHz(3500), MHz(4) - 1, FX4_AM_TX_MODES, 5000, 25000, FX4_VFO, FX4_ANTS},
+ {kHz(5250), kHz(5450), FX4_OTHER_TX_MODES, 5000, 100000, FX4_VFO, FX4_ANTS},
+ {kHz(5250), kHz(5450), FX4_AM_TX_MODES, 5000, 25000, FX4_VFO, FX4_ANTS},
+ {MHz(7), kHz(7300), FX4_OTHER_TX_MODES, 5000, 100000, FX4_VFO, FX4_ANTS},
+ {MHz(7), kHz(7300), FX4_AM_TX_MODES, 5000, 25000, FX4_VFO, FX4_ANTS},
+ {kHz(10100), kHz(10150), FX4_OTHER_TX_MODES, 5000, 100000, FX4_VFO, FX4_ANTS},
+ {kHz(10100), kHz(10150), FX4_AM_TX_MODES, 5000, 25000, FX4_VFO, FX4_ANTS},
+ {MHz(14), kHz(14350), FX4_OTHER_TX_MODES, 5000, 100000, FX4_VFO, FX4_ANTS},
+ {MHz(14), kHz(14350), FX4_AM_TX_MODES, 5000, 25000, FX4_VFO, FX4_ANTS},
+ {kHz(18068), kHz(18168), FX4_OTHER_TX_MODES, 5000, 100000, FX4_VFO, FX4_ANTS},
+ {kHz(18068), kHz(18168), FX4_AM_TX_MODES, 5000, 25000, FX4_VFO, FX4_ANTS},
+ {MHz(21), kHz(21450), FX4_OTHER_TX_MODES, 5000, 100000, FX4_VFO, FX4_ANTS},
+ {MHz(21), kHz(21450), FX4_AM_TX_MODES, 5000, 25000, FX4_VFO, FX4_ANTS},
+ {kHz(24890), kHz(24990), FX4_OTHER_TX_MODES, 5000, 100000, FX4_VFO, FX4_ANTS},
+ {kHz(24890), kHz(24990), FX4_AM_TX_MODES, 5000, 25000, FX4_VFO, FX4_ANTS},
+ {MHz(28), kHz(29700), FX4_OTHER_TX_MODES, 5000, 100000, FX4_VFO, FX4_ANTS},
+ {MHz(28), kHz(29700), FX4_AM_TX_MODES, 5000, 25000, FX4_VFO, FX4_ANTS},
+ {MHz(50), kHz(52000), FX4_OTHER_TX_MODES, 5000, 100000, FX4_VFO, FX4_ANTS},
+ {MHz(50), kHz(52000), FX4_AM_TX_MODES, 5000, 25000, FX4_VFO, FX4_ANTS},
+ RIG_FRNG_END,
+ }, /*!< Transmit frequency range list for ITU region 2 */
+ .tuning_steps = {
+ {TS590_ALL_MODES, kHz(1)},
+ {TS590_ALL_MODES, Hz(2500)},
+ {TS590_ALL_MODES, kHz(5)},
+ {TS590_ALL_MODES, Hz(6250)},
+ {TS590_ALL_MODES, kHz(10)},
+ {TS590_ALL_MODES, Hz(12500)},
+ {TS590_ALL_MODES, kHz(15)},
+ {TS590_ALL_MODES, kHz(20)},
+ {TS590_ALL_MODES, kHz(25)},
+ {TS590_ALL_MODES, kHz(30)},
+ {TS590_ALL_MODES, kHz(100)},
+ {TS590_ALL_MODES, kHz(500)},
+ {TS590_ALL_MODES, MHz(1)},
+ {TS590_ALL_MODES, 0}, /* any tuning step */
+ RIG_TS_END,
+ },
+ /* mode/filter list, remember: order matters! */
+ .filters = {
+ {RIG_MODE_SSB, kHz(2.2)},
+ {RIG_MODE_CW | RIG_MODE_CWR, Hz(500)},
+ {RIG_MODE_AM, kHz(6)},
+ {RIG_MODE_FM, kHz(12)},
+ RIG_FLT_END,
+ },
+ .level_gran =
+ {
+#include "level_gran_kenwood.h"
+ [LVL_RF] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f / 100.0f } },
+ [LVL_AF] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f / 100.0f } },
+ [LVL_VOXDELAY] = { .min = { .i = 0 }, .max = { .i = 30 }, .step = { .i = 1 } },
+ [LVL_CWPITCH] = {.min = {.i = 300}, .max = {.i = 1000}, .step = {.i = 50}},
+ [LVL_BKIN_DLYMS] = {.min = {.i = 0}, .max = {.i = 1000}, .step = {.i = 50}},
+ [LVL_SLOPE_LOW] = {.min = {.i = 0}, .max = {.i = 2400}, .step = {.i = 10}},
+ [LVL_SLOPE_HIGH] = {.min = {.i = 0}, .max = {.i = 5000}, .step = {.i = 10}},
+ },
+
+ .str_cal = TS590_STR_CAL,
+ .swr_cal = TS590_SWR_CAL,
+
+ .ext_tokens = ts590_ext_tokens,
+ .extfuncs = ts590_ext_funcs,
+ .extlevels = ts590_ext_levels,
+
+ .priv = (void *)& ts590_priv_caps,
+ .rig_init = kenwood_init,
+ .rig_cleanup = kenwood_cleanup,
+ .rig_open = kenwood_open,
+ .rig_close = kenwood_close,
+ .set_freq = kenwood_set_freq,
+ .get_freq = kenwood_get_freq,
+ .set_rit = ts590_set_rit,
+ .get_rit = ts590_get_rit,
+ .set_xit = ts590_set_rit,
+ .get_xit = ts590_get_rit,
+ .set_mode = ts590_set_mode,
+ .get_mode = ts590_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 = kenwood_get_ptt,
+ .set_ptt = kenwood_set_ptt,
+ .get_dcd = kenwood_get_dcd,
+ .set_powerstat = kenwood_set_powerstat,
+ .get_powerstat = kenwood_get_powerstat,
+ .get_info = ts590_get_info,
+ .reset = kenwood_reset,
+ .set_ant = kenwood_set_ant,
+ .get_ant = kenwood_get_ant,
+ .scan_ops = TS590_SCAN_OPS,
+ .scan = kenwood_scan, /* not working, invalid arguments using rigctl; kenwood_scan does only support on/off and not tone and CTCSS scan */
+ .has_set_level = TS590_LEVEL_SET,
+ .has_get_level = TS590_LEVEL_GET,
+ .set_level = ts590_set_level,
+ .get_level = ts590_get_level,
+ .set_ext_level = ts590_set_ext_level,
+ .get_ext_level = ts590_get_ext_level,
+ .has_get_func = TS590_FUNC_ALL,
+ .has_set_func = TS590_FUNC_ALL,
+ .set_func = ts590_set_func,
+ .get_func = ts590_get_func,
+ .set_ext_func = ts590_set_ext_func,
+ .get_ext_func = ts590_get_ext_func,
+ .set_ctcss_tone = kenwood_set_ctcss_tone,
+ .get_ctcss_tone = kenwood_get_ctcss_tone,
+ .ctcss_list = kenwood38_ctcss_list,
+ .set_trn = kenwood_set_trn,
+ .get_trn = kenwood_get_trn,
+ .send_morse = kenwood_send_morse,
+ .stop_morse = kenwood_stop_morse,
+ .wait_morse = rig_wait_morse,
+ .set_mem = kenwood_set_mem,
+ .get_mem = kenwood_get_mem,
+ .vfo_ops = TS590_VFO_OPS,
+ .vfo_op = kenwood_vfo_op,
+ .hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS
+};
+
/**
* TS-590SG rig capabilities
*/
commit 4171598eafa5c028010b3191ff6659ff66847783
Author: Mike Black W9MDB <mdb...@ya...>
Date: Tue Jun 27 22:58:56 2023 -0500
Initialize rig->state.targetable_vfo
diff --git a/src/rig.c b/src/rig.c
index 22d08d825..e70bbda9b 100644
--- a/src/rig.c
+++ b/src/rig.c
@@ -658,6 +658,7 @@ RIG *HAMLIB_API rig_init(rig_model_t rig_model)
rs->lo_freq = 0;
rs->cache.timeout_ms = 500; // 500ms cache timeout by default
rs->cache.ptt = 0;
+ rs->targetable_vfo = rig->caps->targetable_vfo;
// We are using range_list1 as the default
// Eventually we will have separate model number for different rig variations
@@ -1385,7 +1386,7 @@ int HAMLIB_API rig_open(RIG *rig)
{
// for non-Icom rigs if there's no set_vfo then we need to set one
rs->current_vfo = vfo_fixup(rig, RIG_VFO_A, rig->state.cache.split);
- rig_debug(RIG_DEBUG_TRACE, "%s: No set_vfo function rig so default vfo = %s\n",
+ rig_debug(RIG_DEBUG_TRACE, "%s: No set_vfo function rig so default vfo=%s\n",
__func__, rig_strvfo(rs->current_vfo));
}
else
commit f3cab55c4f8782761ceb9674c948a9a254050dc5
Author: Mike Black W9MDB <mdb...@ya...>
Date: Tue Jun 27 14:28:37 2023 -0500
Change set_mode_x26 to do correct VFO for 7600/7610
https://github.com/Hamlib/Hamlib/issues/1319
diff --git a/rigs/icom/icom.c b/rigs/icom/icom.c
index 40b1a5f67..4b9a691b5 100644
--- a/rigs/icom/icom.c
+++ b/rigs/icom/icom.c
@@ -2174,6 +2174,11 @@ static int icom_set_mode_x26(RIG *rig, vfo_t vfo, rmode_t mode, int datamode,
{
subcmd2 = 0x01; // get unselected VFO
}
+ if (RIG_IS_IC7600 || RIG_IS_IC7610)
+ { // the 7600/7610 do it different 0=Main, 1=Sub -- maybe other Icoms will start doing this too
+ subcmd2 = 0;
+ if (vfo & RIG_VFO_B || vfo & RIG_VFO_SUB) subcmd2 = 1;
+ }
buf[0] = mode;
buf[1] = datamode;
commit a3ac6e0be312486628cb97199fa5e7eaa1e63954
Author: Mike Black W9MDB <mdb...@ya...>
Date: Tue Jun 27 11:24:27 2023 -0500
Change to using RIG_IS macros
Fix segfault on non 76XX rigs
https://github.com/Hamlib/Hamlib/issues/1319
diff --git a/rigs/icom/icom.c b/rigs/icom/icom.c
index 9142a48bf..40b1a5f67 100644
--- a/rigs/icom/icom.c
+++ b/rigs/icom/icom.c
@@ -689,30 +689,30 @@ int icom_init(RIG *rig)
// we can add rigs here that will never use the 0x25 cmd
// some like the 751 don't even reject the command and have to time out
if (
- rig->caps->rig_model == RIG_MODEL_IC275
- || rig->caps->rig_model == RIG_MODEL_IC375
- || rig->caps->rig_model == RIG_MODEL_IC706
- || rig->caps->rig_model == RIG_MODEL_IC706MKII
- || rig->caps->rig_model == RIG_MODEL_IC706MKIIG
- || rig->caps->rig_model == RIG_MODEL_IC751
- || rig->caps->rig_model == RIG_MODEL_X5105
- || rig->caps->rig_model == RIG_MODEL_IC1275
- || rig->caps->rig_model == RIG_MODEL_IC746
- || rig->caps->rig_model == RIG_MODEL_IC756
- || rig->caps->rig_model == RIG_MODEL_IC756PRO
- || rig->caps->rig_model == RIG_MODEL_IC756PROII
- || rig->caps->rig_model == RIG_MODEL_IC756PROIII
- || rig->caps->rig_model == RIG_MODEL_IC746PRO
- || rig->caps->rig_model == RIG_MODEL_IC756
- || rig->caps->rig_model == RIG_MODEL_IC7000
- || rig->caps->rig_model == RIG_MODEL_IC7100
- || rig->caps->rig_model == RIG_MODEL_IC7200
- || rig->caps->rig_model == RIG_MODEL_IC7700
- || rig->caps->rig_model == RIG_MODEL_IC821H
- || rig->caps->rig_model == RIG_MODEL_IC910
- || rig->caps->rig_model == RIG_MODEL_IC2730
- || rig->caps->rig_model == RIG_MODEL_ID5100
- || rig->caps->rig_model == RIG_MODEL_IC9100
+ RIG_IS_IC275
+ || RIG_IS_IC375
+ || RIG_IS_IC706
+ || RIG_IS_IC706MKII
+ || RIG_IS_IC706MKIIG
+ || RIG_IS_IC751
+ || RIG_IS_X5105
+ || RIG_IS_IC1275
+ || RIG_IS_IC746
+ || RIG_IS_IC756
+ || RIG_IS_IC756PRO
+ || RIG_IS_IC756PROII
+ || RIG_IS_IC756PROIII
+ || RIG_IS_IC746PRO
+ || RIG_IS_IC756
+ || RIG_IS_IC7000
+ || RIG_IS_IC7100
+ || RIG_IS_IC7200
+ || RIG_IS_IC7700
+ || RIG_IS_IC821H
+ || RIG_IS_IC910
+ || RIG_IS_IC2730
+ || RIG_IS_ID5100
+ || RIG_IS_IC9100
)
{
priv->x25cmdfails = 1;
@@ -961,13 +961,13 @@ static vfo_t icom_current_vfo(RIG *rig)
// some rigs like IC9700 cannot do 0x25 0x26 command in satmode
static void icom_satmode_fix(RIG *rig, int satmode)
{
- if (rig->caps->rig_model == RIG_MODEL_IC9700)
+ if (RIG_IS_IC9700)
{
rig_debug(RIG_DEBUG_VERBOSE, "%s: toggling IC9700 targetable for satmode=%d\n",
__func__, satmode);
- if (satmode) { rig->caps->targetable_vfo = 0; }
- else { rig->caps->targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE; }
+ if (satmode) { rig->caps->targetable_vfo = rig->state.targetable_vfo = 0; }
+ else { rig->caps->targetable_vfo = rig->state.targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE; }
}
}
@@ -1342,7 +1342,7 @@ int icom_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
freq_len = priv->civ_731_mode ? 4 : 5;
- if (rig->caps->rig_model == RIG_MODEL_IC905) { freq /= 10; freq_len = 6; }
+ if (RIG_IS_IC905) { freq /= 10; freq_len = 6; }
/*
* to_bcd requires nibble len
@@ -1373,8 +1373,8 @@ int icom_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
HAMLIB_TRACE;
subcmd = 0x01; // get unselected VFO
}
- if (rig->state.rig_model == RIG_MODEL_IC7600)
- { // the 7600 does it different 0=Main, 1=Sub -- maybe other Icoms will start doing this too
+ if (RIG_IS_IC7600)
+ { // the 7600/7610 do it different 0=Main, 1=Sub -- maybe other Icoms will start doing this too
subcmd = 0;
if (vfo & RIG_VFO_B || vfo & RIG_VFO_SUB) subcmd = 1;
}
@@ -1535,7 +1535,7 @@ int icom_get_freq(RIG *rig, vfo_t vfo, freq_t *freq)
subcmd = -1;
if (vfo == RIG_VFO_MEM && (priv->civ_731_mode
- || rig->caps->rig_model == RIG_MODEL_IC706))
+ || RIG_IS_IC706))
{
rig_debug(RIG_DEBUG_TRACE, "%s: VFO=MEM so turning off civ_731\n", __func__);
civ_731_mode = 1;
@@ -1666,10 +1666,10 @@ int icom_get_freq(RIG *rig, vfo_t vfo, freq_t *freq)
// Rigs like IC-7600 new firmware has 0x25 and 0x26
// So if this succeeds we'll assume all such rigs are targetable freq & mode
- rig->caps->targetable_vfo = rig->state.targetable_vfo |= RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE;
rig_debug(RIG_DEBUG_VERBOSE, "%s: TARGETABLE_FREQ and TARGETABLE_MODE enabled\n", __func__);
- if (rig->state.rig_model == RIG_MODEL_IC7600)
- { // the 7600 does it different 0=Main, 1=Sub -- maybe other Icoms will start doing this too
+ if (RIG_IS_IC7600 || RIG_IS_IC7610)
+ { // the 7600/7610 do it different 0=Main, 1=Sub -- maybe other Icoms will start doing this too
+ rig->caps->targetable_vfo = rig->state.targetable_vfo |= RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE;
subcmd2 = 0;
if (vfo & RIG_VFO_B || vfo & RIG_VFO_SUB) subcmd2 = 1;
}
@@ -1780,7 +1780,7 @@ int icom_get_freq(RIG *rig, vfo_t vfo, freq_t *freq)
if (freq_len == 3) { *freq *= 10000; } // 3-byte freq for ID5100 is in 10000Hz units so convert to Hz
-if (rig->caps->rig_model == RIG_MODEL_IC905) { *freq *= 10; }
+if (RIG_IS_IC905) { *freq *= 10; }
if (vfo == RIG_VFO_MEM && civ_731_mode) { priv->civ_731_mode = 1; }
@@ -2208,19 +2208,19 @@ int icom_set_mode_with_data(RIG *rig, vfo_t vfo, rmode_t mode,
pbwidth_t twidth;
//struct icom_priv_data *priv = (struct icom_priv_data *) rig->state.priv;
unsigned char dm_sub_cmd =
- rig->caps->rig_model == RIG_MODEL_IC7200 ? 0x04 : S_MEM_DATA_MODE;
- int filter_byte = rig->caps->rig_model == RIG_MODEL_IC7100
- || rig->caps->rig_model == RIG_MODEL_IC7200
- || rig->caps->rig_model == RIG_MODEL_IC7300
- || rig->caps->rig_model == RIG_MODEL_IC7600
- || rig->caps->rig_model == RIG_MODEL_IC7610
- || rig->caps->rig_model == RIG_MODEL_IC7700
- || rig->caps->rig_model == RIG_MODEL_IC7800
- || rig->caps->rig_model == RIG_MODEL_IC785x
- || rig->caps->rig_model == RIG_MODEL_IC9100
- || rig->caps->rig_model == RIG_MODEL_IC9700
- || rig->caps->rig_model == RIG_MODEL_IC705
- || rig->caps->rig_model == RIG_MODEL_X6100;
+ RIG_IS_IC7200 ? 0x04 : S_MEM_DATA_MODE;
+ int filter_byte = RIG_IS_IC7100
+ || RIG_IS_IC7200
+ || RIG_IS_IC7300
+ || RIG_IS_IC7600
+ || RIG_IS_IC7610
+ || RIG_IS_IC7700
+ || RIG_IS_IC7800
+ || RIG_IS_IC785X
+ || RIG_IS_IC9100
+ || RIG_IS_IC9700
+ || RIG_IS_IC705
+ || RIG_IS_X6100;
ENTERFUNC;
@@ -2417,12 +2417,12 @@ int icom_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
/* IC-375, IC-731, IC-726, IC-735, IC-910, IC-7000 don't support passband data */
/* IC-726 & IC-475A/E also limited support - only on CW */
/* TODO: G4WJS CW wide/narrow are possible with above two radios */
- if (priv->civ_731_mode || rig->caps->rig_model == RIG_MODEL_OS456
- || rig->caps->rig_model == RIG_MODEL_IC375
- || rig->caps->rig_model == RIG_MODEL_IC726
- || rig->caps->rig_model == RIG_MODEL_IC475
- || rig->caps->rig_model == RIG_MODEL_IC910
- || rig->caps->rig_model == RIG_MODEL_IC7000)
+ if (priv->civ_731_mode || RIG_IS_OS456
+ || RIG_IS_IC375
+ || RIG_IS_IC726
+ || RIG_IS_IC475
+ || RIG_IS_IC910
+ || RIG_IS_IC7000)
{
icmode_ext = -1;
}
@@ -2711,13 +2711,13 @@ int icom_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
/* Likewise, don't ask if we happen to be an Omni VI Plus */
/* Likewise, don't ask if we happen to be an IC-R30 */
/* Likewise, don't ask if we happen to be an IC-706* */
- if ((rig->caps->rig_model == RIG_MODEL_IC910) ||
- (rig->caps->rig_model == RIG_MODEL_OMNIVIP) ||
- (rig->caps->rig_model == RIG_MODEL_IC706) ||
- (rig->caps->rig_model == RIG_MODEL_IC706MKII) ||
- (rig->caps->rig_model == RIG_MODEL_IC706MKIIG) ||
- (rig->caps->rig_model == RIG_MODEL_IC756) ||
- (rig->caps->rig_model == RIG_MODEL_ICR30))
+ if ((RIG_IS_IC910) ||
+ (RIG_IS_OMNIVIP) ||
+ (RIG_IS_IC706) ||
+ (RIG_IS_IC706MKII) ||
+ (RIG_IS_IC706MKIIG) ||
+ (RIG_IS_IC756) ||
+ (RIG_IS_ICR30))
{
RETURNFUNC2(RIG_OK);
}
@@ -2879,7 +2879,7 @@ int icom_set_vfo(RIG *rig, vfo_t vfo)
if (rig->state.cache.split == RIG_SPLIT_ON && !rig->state.cache.satmode) { vfo = RIG_VFO_A; }
// Seems the IC821H reverses Main/Sub when in satmode
- if (rig->caps->rig_model == RIG_MODEL_IC821H && rig->state.cache.satmode) { vfo = RIG_VFO_SUB; }
+ if (RIG_IS_IC821H && rig->state.cache.satmode) { vfo = RIG_VFO_SUB; }
}
else if ((vfo == RIG_VFO_B || vfo == RIG_VFO_SUB) && VFO_HAS_DUAL)
{
@@ -2896,7 +2896,7 @@ int icom_set_vfo(RIG *rig, vfo_t vfo)
else if (rig->state.cache.split == RIG_SPLIT_ON) { vfo = RIG_VFO_B; }
// Seems the IC821H reverses Main/Sub when in satmode
- if (rig->caps->rig_model == RIG_MODEL_IC821H && rig->state.cache.satmode) { vfo = RIG_VFO_MAIN; }
+ if (RIG_IS_IC821H && rig->state.cache.satmode) { vfo = RIG_VFO_MAIN; }
}
else if ((vfo == RIG_VFO_A || vfo == RIG_VFO_B) && !VFO_HAS_A_B
&& VFO_HAS_MAIN_SUB)
@@ -3362,7 +3362,7 @@ int icom_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
}
/* convert values to 0 .. 255 range */
- if (rig->caps->rig_model == RIG_MODEL_ICR75)
+ if (RIG_IS_ICR75)
{
switch (level)
{
@@ -3514,7 +3514,7 @@ int icom_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
lvl_sc = S_LVL_CWPITCH;
/* use 'set mode' call for CWPITCH on IC-R75 */
- if (rig->caps->rig_model == RIG_MODEL_ICR75)
+ if (RIG_IS_ICR75)
{
lvl_cn = C_CTL_MEM;
lvl_sc = S_MEM_MODE_SLCT;
@@ -3644,7 +3644,7 @@ int icom_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
break;
case RIG_LEVEL_VOXGAIN:
- if (rig->caps->rig_model == RIG_MODEL_IC910)
+ if (RIG_IS_IC910)
{
/* IC-910H */
lvl_cn = C_CTL_MEM;
@@ -3659,7 +3659,7 @@ int icom_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
break;
case RIG_LEVEL_ANTIVOX:
- if (rig->caps->rig_model == RIG_MODEL_IC910)
+ if (RIG_IS_IC910)
{
/* IC-910H */
lvl_cn = C_CTL_MEM;
@@ -4021,7 +4021,7 @@ int icom_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
lvl_sc = S_LVL_CWPITCH;
/* use 'set mode' call for CWPITCH on IC-R75 */
- if (rig->caps->rig_model == RIG_MODEL_ICR75)
+ if (RIG_IS_ICR75)
{
lvl_cn = C_CTL_MEM;
lvl_sc = S_MEM_MODE_SLCT;
@@ -4072,7 +4072,7 @@ int icom_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
break;
case RIG_LEVEL_VOXGAIN: /* IC-910H */
- if (rig->caps->rig_model == RIG_MODEL_IC910)
+ if (RIG_IS_IC910)
{
/* IC-910H */
lvl_cn = C_CTL_MEM;
@@ -4087,7 +4087,7 @@ int icom_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
break;
case RIG_LEVEL_ANTIVOX:
- if (rig->caps->rig_model == RIG_MODEL_IC910)
+ if (RIG_IS_IC910)
{
/* IC-910H */
lvl_cn = C_CTL_MEM;
@@ -4519,7 +4519,7 @@ int icom_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
}
/* convert values from 0 .. 255 range */
- if (rig->caps->rig_model == RIG_MODEL_ICR75)
+ if (RIG_IS_ICR75)
{
switch (level)
{
@@ -5571,7 +5571,7 @@ int icom_set_split_freq(RIG *rig, vfo_t vfo, freq_t tx_freq)
// we can add rigs we know will never have 0x25 here to skip this check
if ((satmode == 0)
- && !(rig->caps->rig_model == RIG_MODEL_IC751)
+ && !(RIG_IS_IC751)
) // only worth trying if not in satmode
{
int cmd, subcmd, freq_len, retry_save;
@@ -5761,7 +5761,7 @@ int icom_get_split_freq(RIG *rig, vfo_t vfo, freq_t *tx_freq)
rig_strvfo(rig->state.current_vfo));
- if (rig->caps->rig_model == RIG_MODEL_IC910)
+ if (RIG_IS_IC910)
{
ptt_t ptt;
rig_debug(RIG_DEBUG_VERBOSE, "%s: ic910#2\n", __func__);
@@ -5818,8 +5818,8 @@ int icom_get_split_freq(RIG *rig, vfo_t vfo, freq_t *tx_freq)
// when transmitting in split mode the split VFO is active
subcmd = (rig->state.cache.split
&& rig->state.cache.ptt) ? 0x00 : 0x01; // get the unselected vfo
- if (rig->state.rig_model == RIG_MODEL_IC7600)
- { // the 7600 does it different 0=Main, 1=Sub -- maybe other Icoms will start doing this too
+ if (RIG_IS_IC7600 || RIG_IS_IC7610)
+ { // the 7600/7610 do it different 0=Main, 1=Sub -- maybe other Icoms will start doing this too
subcmd = 0;
if (vfo & RIG_VFO_B || vfo & RIG_VFO_SUB) subcmd = 1;
}
@@ -7200,9 +7200,9 @@ int icom_set_func(RIG *rig, vfo_t vfo, setting_t func, int status)
break;
case RIG_FUNC_DUAL_WATCH:
- if ((rig->caps->rig_model == RIG_MODEL_IC9100)
- || (rig->caps->rig_model == RIG_MODEL_IC9700)
- || (rig->caps->rig_model == RIG_MODEL_ID5100))
+ if ((RIG_IS_IC9100)
+ || (RIG_IS_IC9700)
+ || (RIG_IS_ID5100))
{
fct_cn = C_CTL_FUNC;
fct_sc = S_MEM_DUALMODE;
@@ -7217,7 +7217,7 @@ int icom_set_func(RIG *rig, vfo_t vfo, setting_t func, int status)
break;
case RIG_FUNC_SATMODE:
- if (rig->caps->rig_model == RIG_MODEL_IC910)
+ if (RIG_IS_IC910)
{
// Is the 910 the only one that uses this command?
fct_cn = C_CTL_MEM;
@@ -7442,8 +7442,8 @@ int icom_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status)
break;
case RIG_FUNC_DUAL_WATCH:
- if ((rig->caps->rig_model == RIG_MODEL_IC9100) ||
- (rig->caps->rig_model == RIG_MODEL_IC9700))
+ if ((RIG_IS_IC9100) ||
+ (RIG_IS_IC9700))
{
fct_cn = C_CTL_FUNC;
fct_sc = S_MEM_DUALMODE;
@@ -7457,7 +7457,7 @@ int icom_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status)
break;
case RIG_FUNC_SATMODE:
- if (rig->caps->rig_model == RIG_MODEL_IC910)
+ if (RIG_IS_IC910)
{
// Is the 910 the only one that uses this command?
fct_cn = C_CTL_MEM;
@@ -8096,7 +8096,7 @@ int icom_set_powerstat(RIG *rig, powerstat_t status)
retval =
icom_transaction(rig, C_SET_PWR, pwr_sc, NULL, 0, ackbuf, &ack_len);
- if (rig->caps->rig_model == RIG_MODEL_IC7300)
+ if (RIG_IS_IC7300)
{
rig_debug(RIG_DEBUG_VERBOSE, "%s: waiting 5 seconds for rig to wake up\n",
__func__);
@@ -8215,7 +8215,7 @@ int icom_get_powerstat(RIG *rig, powerstat_t *status)
*status = RIG_POWER_OFF; // default return until proven otherwise
/* r75 has no way to get power status, so fake it */
- if (rig->caps->rig_model == RIG_MODEL_ICR75)
+ if (RIG_IS_ICR75)
{
/* getting the mode doesn't work if a memory is blank */
/* so use one of the more innocuous 'set mode' commands instead */
@@ -8234,14 +8234,14 @@ int icom_get_powerstat(RIG *rig, powerstat_t *status)
RIG_POWER_ON : RIG_POWER_OFF;
}
- if (rig->caps->rig_model == RIG_MODEL_IC2730
- || rig->caps->rig_model == RIG_MODEL_IC7100
- || rig->caps->rig_model == RIG_MODEL_IC7300
- || rig->caps->rig_model == RIG_MODEL_IC7600
- || rig->caps->rig_model == RIG_MODEL_IC7610
- || rig->caps->rig_model == RIG_MODEL_IC7700
- || rig->caps->rig_model == RIG_MODEL_IC7800
- || rig->caps->rig_model == RIG_MODEL_IC905)
+ if (RIG_IS_IC2730
+ || RIG_IS_IC7100
+ || RIG_IS_IC7300
+ || RIG_IS_IC7600
+ || RIG_IS_IC7610
+ || RIG_IS_IC7700
+ || RIG_IS_IC7800
+ || RIG_IS_IC905)
{
freq_t freq;
int retrysave = rig->caps->retry;
@@ -8512,7 +8512,7 @@ int icom_get_ant(RIG *rig, vfo_t vfo, ant_t ant, value_t *option,
{
retval = icom_transaction(rig, C_CTL_ANT, -1, NULL, 0, ackbuf, &ack_len);
}
- else if (rig->caps->rig_model == RIG_MODEL_IC785x)
+ else if (RIG_IS_IC785X)
{
unsigned char buf[2];
buf[0] = 0x03;
diff --git a/rigs/icom/icom.h b/rigs/icom/icom.h
index a9e89f148..e5a00cf20 100644
--- a/rigs/icom/icom.h
+++ b/rigs/icom/icom.h
@@ -509,4 +509,88 @@ extern const struct rig_caps x5105_caps;
extern const struct rig_caps icr8600_caps;
extern const struct rig_caps icr30_caps;
+#define RIG_IS_IC1271 (rig->state.rig_model == RIG_MODEL_IC1271)
+#define RIG_IS_IC1275 (rig->state.rig_model == RIG_MODEL_IC1275)
+#define RIG_IS_IC271 (rig->state.rig_model == RIG_MODEL_IC271)
+#define RIG_IS_IC2730 (rig->state.rig_model == RIG_MODEL_IC2730)
+#define RIG_IS_IC275 (rig->state.rig_model == RIG_MODEL_IC275)
+#define RIG_IS_IC375 (rig->state.rig_model == RIG_MODEL_IC375)
+#define RIG_IS_IC471 (rig->state.rig_model == RIG_MODEL_IC471)
+#define RIG_IS_IC475 (rig->state.rig_model == RIG_MODEL_IC475)
+#define RIG_IS_IC575 (rig->state.rig_model == RIG_MODEL_IC575)
+#define RIG_IS_IC7000 (rig->state.rig_model == RIG_MODEL_IC7000)
+#define RIG_IS_IC703 (rig->state.rig_model == RIG_MODEL_IC703)
+#define RIG_IS_IC705 (rig->state.rig_model == RIG_MODEL_IC705)
+#define RIG_IS_IC706 (rig->state.rig_model == RIG_MODEL_IC706)
+#define RIG_IS_IC706MKII (rig->state.rig_model == RIG_MODEL_IC706MKII)
+#define RIG_IS_IC706MKIIG (rig->state.rig_model == RIG_MODEL_IC706MKIIG)
+#define RIG_IS_IC707 (rig->state.rig_model == RIG_MODEL_IC707)
+#define RIG_IS_IC7100 (rig->state.rig_model == RIG_MODEL_IC7100)
+#define RIG_IS_IC718 (rig->state.rig_model == RIG_MODEL_IC718)
+#define RIG_IS_IC7200 (rig->state.rig_model == RIG_MODEL_IC7200)
+#define RIG_IS_IC725 (rig->state.rig_model == RIG_MODEL_IC725)
+#define RIG_IS_IC726 (rig->state.rig_model == RIG_MODEL_IC726)
+#define RIG_IS_IC728 (rig->state.rig_model == RIG_MODEL_IC728)
+#define RIG_IS_IC729 (rig->state.rig_model == RIG_MODEL_IC729)
+#define RIG_IS_IC7300 (rig->state.rig_model == RIG_MODEL_IC7300)
+#define RIG_IS_IC731 (rig->state.rig_model == RIG_MODEL_IC731)
+#define RIG_IS_IC735 (rig->state.rig_model == RIG_MODEL_IC735)
+#define RIG_IS_IC736 (rig->state.rig_model == RIG_MODEL_IC736)
+#define RIG_IS_IC737 (rig->state.rig_model == RIG_MODEL_IC737)
+#define RIG_IS_IC738 (rig->state.rig_model == RIG_MODEL_IC738)
+#define RIG_IS_IC7410 (rig->state.rig_model == RIG_MODEL_IC7410)
+#define RIG_IS_IC746 (rig->state.rig_model == RIG_MODEL_IC746)
+#define RIG_IS_IC746PRO (rig->state.rig_model == RIG_MODEL_IC746PRO)
+#define RIG_IS_IC751 (rig->state.rig_model == RIG_MODEL_IC751)
+#define RIG_IS_IC751A (rig->state.rig_model == RIG_MODEL_IC751A)
+#define RIG_IS_IC756 (rig->state.rig_model == RIG_MODEL_IC756)
+#define RIG_IS_IC756PRO (rig->state.rig_model == RIG_MODEL_IC756PRO)
+#define RIG_IS_IC756PROII (rig->state.rig_model == RIG_MODEL_IC756PROII)
+#define RIG_IS_IC756PROIII (rig->state.rig_model == RIG_MODEL_IC756PROIII)
+#define RIG_IS_IC7600 (rig->state.rig_model == RIG_MODEL_IC7600)
+#define RIG_IS_IC761 (rig->state.rig_model == RIG_MODEL_IC761)
+#define RIG_IS_IC7610 (rig->state.rig_model == RIG_MODEL_IC7610)
+#define RIG_IS_IC765 (rig->state.rig_model == RIG_MODEL_IC765)
+#define RIG_IS_IC7700 (rig->state.rig_model == RIG_MODEL_IC7700)
+#define RIG_IS_IC775 (rig->state.rig_model == RIG_MODEL_IC775)
+#define RIG_IS_IC78 (rig->state.rig_model == RIG_MODEL_IC78)
+#define RIG_IS_IC7800 (rig->state.rig_model == RIG_MODEL_IC7800)
+#define RIG_IS_IC781 (rig->state.rig_model == RIG_MODEL_IC781)
+#define RIG_IS_IC785X (rig->state.rig_model == RIG_MODEL_IC785x)
+#define RIG_IS_IC820 (rig->state.rig_model == RIG_MODEL_IC820)
+#define RIG_IS_IC821 (rig->state.rig_model == RIG_MODEL_IC821)
+#define RIG_IS_IC821H (rig->state.rig_model == RIG_MODEL_IC821H)
+#define RIG_IS_IC905 (rig->state.rig_model == RIG_MODEL_IC905)
+#define RIG_IS_IC910 (rig->state.rig_model == RIG_MODEL_IC910)
+#define RIG_IS_IC9100 (rig->state.rig_model == RIG_MODEL_IC9100)
+#define RIG_IS_IC92D (rig->state.rig_model == RIG_MODEL_IC92D)
+#define RIG_IS_IC970 (rig->state.rig_model == RIG_MODEL_IC970)
+#define RIG_IS_IC9700 (rig->state.rig_model == RIG_MODEL_IC9700)
+#define RIG_IS_IC8101 (rig->state.rig_model == RIG_MODEL_ICF8101)
+#define RIG_IS_ICID1 (rig->state.rig_model == RIG_MODEL_ICID1)
+#define RIG_IS_ICM700PRO (rig->state.rig_model == RIG_MODEL_IC_M700PRO)
+#define RIG_IS_ICM710 (rig->state.rig_model == RIG_MODEL_IC_M710)
+#define RIG_IS_ICM802 (rig->state.rig_model == RIG_MODEL_IC_M802)
+#define RIG_IS_ICM803 (rig->state.rig_model == RIG_MODEL_IC_M803)
+#define RIG_IS_ICR10 (rig->state.rig_model == RIG_MODEL_ICR10)
+#define RIG_IS_ICR20 (rig->state.rig_model == RIG_MODEL_ICR20)
+#define RIG_IS_ICR30 (rig->state.rig_model == RIG_MODEL_ICR30)
+#define RIG_IS_ICR6 (rig->state.rig_model == RIG_MODEL_ICR6)
+#define RIG_IS_ICR7000 (rig->state.rig_model == RIG_MODEL_ICR7000)
+#define RIG_IS_ICR71 (rig->state.rig_model == RIG_MODEL_ICR71)
+#define RIG_IS_ICR7100 (rig->state.rig_model == RIG_MODEL_ICR7100)
+#define RIG_IS_ICR72 (rig->state.rig_model == RIG_MODEL_ICR72)
+#define RIG_IS_ICR75 (rig->state.rig_model == RIG_MODEL_ICR75)
+#define RIG_IS_ICR8500 (rig->state.rig_model == RIG_MODEL_ICR8500)
+#define RIG_IS_ICR8600 (rig->state.rig_model == RIG_MODEL_ICR8600)
+#define RIG_IS_ICR9000 (rig->state.rig_model == RIG_MODEL_ICR9000)
+#define RIG_IS_ICR9500 (rig->state.rig_model == RIG_MODEL_ICR9500)
+#define RIG_IS_ICRX7 (rig->state.rig_model == RIG_MODEL_ICRX7)
+#define RIG_IS_ID5100 (rig->state.rig_model == RIG_MODEL_ID5100)
+#define RIG_IS_OMNIVIP (rig->state.rig_model == RIG_MODEL_OMNIVIP)
+#define RIG_IS_OS456 (rig->state.rig_model == RIG_MODEL_OS456)
+#define RIG_IS_X5105 (rig->state.rig_model == RIG_MODEL_X5105)
+#define RIG_IS_X6100 (rig->state.rig_model == RIG_MODEL_X6100)
+
+
#endif /* _ICOM_H */
commit c0c70b014693f7d41703cb6087416b96c6935a90
Author: Mike Black W9MDB <mdb...@ya...>
Date: Tue Jun 27 08:54:43 2023 -0500
Fix IC-7600 set/get freq to use new 0x25/x26 capability if available
https://github.com/Hamlib/Hamlib/issues/1319
diff --git a/rigs/icom/ic7600.c b/rigs/icom/ic7600.c
index 9b9e84fdd..f56806fe1 100644
--- a/rigs/icom/ic7600.c
+++ b/rigs/icom/ic7600.c
@@ -263,7 +263,7 @@ int ic7600_get_clock(RIG *rig, int *year, int *month, int *day, int *hour,
return retval;
}
-const struct rig_caps ic7600_caps =
+struct rig_caps ic7600_caps =
{
RIG_MODEL(RIG_MODEL_IC7600),
.model_name = "IC-7600",
diff --git a/rigs/icom/icom.c b/rigs/icom/icom.c
index 3abc0f61f..9142a48bf 100644
--- a/rigs/icom/icom.c
+++ b/rigs/icom/icom.c
@@ -1373,6 +1373,11 @@ int icom_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
HAMLIB_TRACE;
subcmd = 0x01; // get unselected VFO
}
+ if (rig->state.rig_model == RIG_MODEL_IC7600)
+ { // the 7600 does it different 0=Main, 1=Sub -- maybe other Icoms will start doing this too
+ subcmd = 0;
+ if (vfo & RIG_VFO_B || vfo & RIG_VFO_SUB) subcmd = 1;
+ }
cmd = 0x25;
retval = icom_transaction(rig, cmd, subcmd, freqbuf, freq_len, ackbuf,
@@ -1659,6 +1664,16 @@ int icom_get_freq(RIG *rig, vfo_t vfo, freq_t *freq)
subcmd2 = 0x01; // get unselected VFO
}
+ // Rigs like IC-7600 new firmware has 0x25 and 0x26
+ // So if this succeeds we'll assume all such rigs are targetable freq & mode
+ rig->caps->targetable_vfo = rig->state.targetable_vfo |= RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE;
+ rig_debug(RIG_DEBUG_VERBOSE, "%s: TARGETABLE_FREQ and TARGETABLE_MODE enabled\n", __func__);
+ if (rig->state.rig_model == RIG_MODEL_IC7600)
+ { // the 7600 does it different 0=Main, 1=Sub -- maybe other Icoms will start doing this too
+ subcmd2 = 0;
+ if (vfo & RIG_VFO_B || vfo & RIG_VFO_SUB) subcmd2 = 1;
+ }
+
retval = icom_transaction(rig, cmd2, subcmd2, NULL, 0, freqbuf, &freq_len);
if (retval == RIG_OK)
@@ -5803,6 +5818,11 @@ int icom_get_split_freq(RIG *rig, vfo_t vfo, freq_t *tx_freq)
// when transmitting in split mode the split VFO is active
subcmd = (rig->state.cache.split
&& rig->state.cache.ptt) ? 0x00 : 0x01; // get the unselected vfo
+ if (rig->state.rig_model == RIG_MODEL_IC7600)
+ { // the 7600 does it different 0=Main, 1=Sub -- maybe other Icoms will start doing this too
+ subcmd = 0;
+ if (vfo & RIG_VFO_B || vfo & RIG_VFO_SUB) subcmd = 1;
+ }
retval = icom_transaction(rig, cmd, subcmd, NULL, 0, ackbuf,
&ack_len);
diff --git a/rigs/icom/icom.h b/rigs/icom/icom.h
index 6c968d0a0..a9e89f148 100644
--- a/rigs/icom/icom.h
+++ b/rigs/icom/icom.h
@@ -35,7 +35,7 @@
#include <sys/time.h>
#endif
-#define BACKEND_VER "20230620"
+#define BACKEND_VER "20230627"
#define ICOM_IS_ID31 rig_is_model(rig, RIG_MODEL_ID31)
#define ICOM_IS_ID51 rig_is_model(rig, RIG_MODEL_ID51)
@@ -443,7 +443,7 @@ extern const struct rig_caps ic756pro_caps;
extern const struct rig_caps ic756pro2_caps;
extern const struct rig_caps ic756pro3_caps;
extern const struct rig_caps ic751_caps;
-extern const struct rig_caps ic7600_caps;
+extern struct rig_caps ic7600_caps; // need to modify targetable_vfo depending on response to 0x25 cmd
extern const struct rig_caps ic7610_caps;
extern const struct rig_caps ic761_caps;
extern const struct rig_caps ic765_caps;
diff --git a/simulators/simicom7600.c b/simulators/simicom7600.c
new file mode 100644
index 000000000..13301cdf4
--- /dev/null
+++ b/simulators/simicom7600.c
@@ -0,0 +1,635 @@
+// simicom will show the pts port to use for rigctl on Unix
+// using virtual serial ports on Windows is to be developed yet
+// Needs a lot of improvement to work on all Icoms
+// gcc -g -Wall -o simicom simicom.c -lhamlib
+// On mingw in the hamlib src directory
+// gcc -static -I../include -g -Wall -o simicom simicom.c -L../../build/src/.libs -lhamlib -lwsock32 -lws2_32
+#define _XOPEN_SOURCE 700
+// since w...
[truncated message content] |