From 02179e0a93d7eeea9214ed7dcbdb52d7e94364d3 Mon Sep 17 00:00:00 2001 From: George Baltz N3GB Date: Mon, 30 Jun 2025 13:48:53 -0400 Subject: [PATCH 01/12] Basic infrastructure for moving internal structures out of rig.h Create breakout files, add them to Makefile.am manifest. --- include/Makefile.am | 3 ++- include/hamlib/amp_state.h | 30 ++++++++++++++++++++++++++++++ include/hamlib/port.h | 30 ++++++++++++++++++++++++++++++ include/hamlib/rig_state.h | 30 ++++++++++++++++++++++++++++++ include/hamlib/rot_state.h | 30 ++++++++++++++++++++++++++++++ 5 files changed, 122 insertions(+), 1 deletion(-) create mode 100644 include/hamlib/amp_state.h create mode 100644 include/hamlib/port.h create mode 100644 include/hamlib/rig_state.h create mode 100644 include/hamlib/rot_state.h diff --git a/include/Makefile.am b/include/Makefile.am index bba8cdc13..716a5186e 100644 --- a/include/Makefile.am +++ b/include/Makefile.am @@ -3,4 +3,5 @@ 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/multicast.h + hamlib/ampclass.h hamlib/multicast.h hamlib/port.h \ + hamlib/amp_state.h hamlib/rig_state.h hamlib/rot_state.h diff --git a/include/hamlib/amp_state.h b/include/hamlib/amp_state.h new file mode 100644 index 000000000..70dec12c9 --- /dev/null +++ b/include/hamlib/amp_state.h @@ -0,0 +1,30 @@ +/* + * Hamlib Interface - Amplifier state structure + * Copyright (c) 2025 by The Hamlib Group + * + * + * 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 + * + */ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ + +#ifndef _AMP_STATE_H +#define _AMP_STATE_H 1 + +__BEGIN_DECLS + +__END_DECLS + +#endif /* _AMP_STATE_H */ diff --git a/include/hamlib/port.h b/include/hamlib/port.h new file mode 100644 index 000000000..45f28c9fd --- /dev/null +++ b/include/hamlib/port.h @@ -0,0 +1,30 @@ +/* + * Hamlib Interface - Port structure + * Copyright (c) 2025 by The Hamlib Group + * + * + * 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 + * + */ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ + +#ifndef _HL_PORT_H +#define _HL_PORT_H 1 + +__BEGIN_DECLS + +__END_DECLS + +#endif /* _HL_PORT_H */ diff --git a/include/hamlib/rig_state.h b/include/hamlib/rig_state.h new file mode 100644 index 000000000..22d9b91b2 --- /dev/null +++ b/include/hamlib/rig_state.h @@ -0,0 +1,30 @@ +/* + * Hamlib Interface - Rig state structure + * Copyright (c) 2025 by The Hamlib Group + * + * + * 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 + * + */ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ + +#ifndef _RIG_STATE_H +#define _RIG_STATE_H 1 + +__BEGIN_DECLS + +__END_DECLS + +#endif /* _RIG_STATE_H */ diff --git a/include/hamlib/rot_state.h b/include/hamlib/rot_state.h new file mode 100644 index 000000000..afc80a1b2 --- /dev/null +++ b/include/hamlib/rot_state.h @@ -0,0 +1,30 @@ +/* + * Hamlib Interface - Rotator state structure + * Copyright (c) 2025 by The Hamlib Group + * + * + * 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 + * + */ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ + +#ifndef _ROT_STATE_H +#define _ROT_STATE_H 1 + +__BEGIN_DECLS + +__END_DECLS + +#endif /* _ROT_STATE_H */ From 0148378ed9adb70c9342542e11c0bb03370298e5 Mon Sep 17 00:00:00 2001 From: George Baltz N3GB Date: Tue, 1 Jul 2025 03:31:16 -0400 Subject: [PATCH 02/12] Add needed new includes in src/*.c --- src/amp_conf.c | 2 ++ src/amp_settings.c | 1 + src/amplifier.c | 2 ++ src/cache.c | 1 + src/conf.c | 2 ++ src/event.c | 1 + src/mem.c | 1 + src/misc.c | 1 + src/multicast.c | 2 ++ src/network.c | 1 + src/rig.c | 4 +++- src/rot_conf.c | 2 ++ src/rot_settings.c | 1 + src/rotator.c | 2 ++ src/serial.c | 3 ++- src/settings.c | 1 + src/snapshot_data.c | 2 ++ src/tones.c | 1 + 18 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/amp_conf.c b/src/amp_conf.c index 22738866a..b5115a5b5 100644 --- a/src/amp_conf.c +++ b/src/amp_conf.c @@ -38,6 +38,8 @@ #include /* String function definitions */ #include +#include "hamlib/port.h" +#include "hamlib/amp_state.h" #include "amp_conf.h" #include "token.h" diff --git a/src/amp_settings.c b/src/amp_settings.c index 749c42904..f65b637ec 100644 --- a/src/amp_settings.c +++ b/src/amp_settings.c @@ -42,6 +42,7 @@ #include #include +#include "hamlib/amp_state.h" #include diff --git a/src/amplifier.c b/src/amplifier.c index 9be99e0e0..8c0fa11c1 100644 --- a/src/amplifier.c +++ b/src/amplifier.c @@ -58,6 +58,8 @@ #include #include +#include "hamlib/port.h" +#include "hamlib/amp_state.h" #include "serial.h" #include "parallel.h" #include "usb_port.h" diff --git a/src/cache.c b/src/cache.c index d66b64af4..ea5c3f95e 100644 --- a/src/cache.c +++ b/src/cache.c @@ -22,6 +22,7 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #include "cache.h" +#include "hamlib/rig_state.h" #include "misc.h" #define CHECK_RIG_ARG(r) (!(r) || !(r)->caps || !STATE(r)->comm_state) diff --git a/src/conf.c b/src/conf.c index 335b419dd..ce8b1d2e0 100644 --- a/src/conf.c +++ b/src/conf.c @@ -38,6 +38,8 @@ #include /* String function definitions */ #include +#include "hamlib/port.h" +#include "hamlib/rig_state.h" #include "token.h" diff --git a/src/event.c b/src/event.c index 84b4d2649..3d794a838 100644 --- a/src/event.c +++ b/src/event.c @@ -45,6 +45,7 @@ #endif #include +#include "hamlib/rig_state.h" #include "event.h" #include "misc.h" #include "cache.h" diff --git a/src/mem.c b/src/mem.c index 3b3a64137..6bebecf1b 100644 --- a/src/mem.c +++ b/src/mem.c @@ -41,6 +41,7 @@ #include #include +#include "hamlib/rig_state.h" #ifndef DOC_HIDDEN diff --git a/src/misc.c b/src/misc.c index 8b3c0372c..b4543583c 100644 --- a/src/misc.c +++ b/src/misc.c @@ -47,6 +47,7 @@ #include #include +#include "hamlib/rig_state.h" #include #include diff --git a/src/multicast.c b/src/multicast.c index 6822ea51d..f222f072b 100644 --- a/src/multicast.c +++ b/src/multicast.c @@ -12,6 +12,8 @@ #include #endif #include "hamlib/rig.h" +#include "hamlib/port.h" +#include "hamlib/rig_state.h" #include "misc.h" #include "cache.h" #include "multicast.h" diff --git a/src/network.c b/src/network.c index 3e169a97f..3404eaeb5 100644 --- a/src/network.c +++ b/src/network.c @@ -74,6 +74,7 @@ #endif #include +#include "hamlib/rig_state.h" #include "network.h" #include "misc.h" #include "asyncpipe.h" diff --git a/src/rig.c b/src/rig.c index b2958407a..0fccb2388 100644 --- a/src/rig.c +++ b/src/rig.c @@ -50,8 +50,10 @@ * \example ../tests/testrig.c */ -#include "hamlib/rig.h" #include "hamlib/config.h" +#include "hamlib/rig.h" +#include "hamlib/port.h" +#include "hamlib/rig_state.h" #include "fifo.h" #include diff --git a/src/rot_conf.c b/src/rot_conf.c index 44e2f467e..dcf2e65b1 100644 --- a/src/rot_conf.c +++ b/src/rot_conf.c @@ -39,6 +39,8 @@ #include /* String function definitions */ #include +#include "hamlib/port.h" +#include "hamlib/rot_state.h" #include "rot_conf.h" #include "token.h" diff --git a/src/rot_settings.c b/src/rot_settings.c index ed366401e..dd0ba21a7 100644 --- a/src/rot_settings.c +++ b/src/rot_settings.c @@ -43,6 +43,7 @@ #include #include +#include "hamlib/rot_state.h" #ifndef DOC_HIDDEN diff --git a/src/rotator.c b/src/rotator.c index d09606f66..dbf2e4713 100644 --- a/src/rotator.c +++ b/src/rotator.c @@ -58,6 +58,8 @@ #include #include +#include "hamlib/port.h" +#include "hamlib/rot_state.h" #include "serial.h" #include "parallel.h" #if defined(HAVE_LIB_USB_H) || defined(HAMB_LIBUSB_1_0_LIBUSB_H) diff --git a/src/serial.c b/src/serial.c index 1421f51fd..97791b3d0 100644 --- a/src/serial.c +++ b/src/serial.c @@ -64,6 +64,7 @@ #endif #include +#include "hamlib/port.h" //! @cond Doxygen_Suppress #if defined(WIN32) && !defined(HAVE_TERMIOS_H) @@ -211,7 +212,7 @@ int check_com_port_in_use(const char *port) #endif /** - * \brief Open serial port using STATE(rig) data + * \brief Open serial port using port data only * \param rp port data structure (must spec port id eg /dev/ttyS1) * \return RIG_OK or < 0 if error */ diff --git a/src/settings.c b/src/settings.c index 0667160b0..14411f7fa 100644 --- a/src/settings.c +++ b/src/settings.c @@ -42,6 +42,7 @@ #include #include +#include "hamlib/rig_state.h" #include "cal.h" #include "misc.h" diff --git a/src/snapshot_data.c b/src/snapshot_data.c index c89b43617..f947fff03 100644 --- a/src/snapshot_data.c +++ b/src/snapshot_data.c @@ -3,6 +3,8 @@ #include #include #include +#include "hamlib/port.h" +#include "hamlib/rig_state.h" #include "misc.h" #include "cache.h" #include "snapshot_data.h" diff --git a/src/tones.c b/src/tones.c index 86d0b1fcf..a345657ef 100644 --- a/src/tones.c +++ b/src/tones.c @@ -35,6 +35,7 @@ #include #include +#include "hamlib/rig_state.h" #include "tones.h" #if !defined(_WIN32) && !defined(__CYGWIN__) From 1efaacb5ab5a8856fe56ad0cc197504906beebd9 Mon Sep 17 00:00:00 2001 From: George Baltz N3GB Date: Fri, 4 Jul 2025 10:06:48 -0400 Subject: [PATCH 03/12] Move port definition(s) to include/hamlib/port.h Add some ghost structs and typedefs Make example.c compile on gcc15 and with new includes --- include/hamlib/port.h | 168 +++++++++++++++++++++++++++++++++++++ include/hamlib/rig.h | 190 +++++++----------------------------------- tests/example.c | 13 +-- 3 files changed, 204 insertions(+), 167 deletions(-) diff --git a/include/hamlib/port.h b/include/hamlib/port.h index 45f28c9fd..95de6251b 100644 --- a/include/hamlib/port.h +++ b/include/hamlib/port.h @@ -24,6 +24,174 @@ #define _HL_PORT_H 1 __BEGIN_DECLS +/** + * \brief Port definition + * + * Of course, looks like OO painstakingly programmed in C, sigh. + */ +//! @cond Doxygen_Suppress +// DO NOT CHANGE THIS STRUCTURE ALL UNTIL 5.0 +// Right now it is static inside rig structure +// 5.0 will change it to a pointer which can then be added to +// At that point only add to the end of the structure +typedef struct hamlib_port { + union { + rig_port_t rig; /*!< Communication port type */ + ptt_type_t ptt; /*!< PTT port type */ + dcd_type_t dcd; /*!< DCD port type */ + } type; + + int fd; /*!< File descriptor */ + void *handle; /*!< handle for USB */ + + int write_delay; /*!< Delay between each byte sent out, in mS */ + int post_write_delay; /*!< Delay between each commands send out, in mS */ + + struct { + int tv_sec, tv_usec; + } post_write_date; /*!< hamlib internal use */ + + int timeout; /*!< Timeout, in mS */ + short retry; /*!< Maximum number of retries, 0 to disable */ + short flushx; /*!< If true flush is done with read instead of TCFLUSH - MicroHam */ + + char pathname[HAMLIB_FILPATHLEN]; /*!< Port pathname */ + + union { + struct { + int rate; /*!< Serial baud rate */ + int data_bits; /*!< Number of data bits */ + int stop_bits; /*!< Number of stop bits */ + enum serial_parity_e parity; /*!< Serial parity */ + enum serial_handshake_e handshake; /*!< Serial handshake */ + enum serial_control_state_e rts_state; /*!< RTS set state */ + enum serial_control_state_e dtr_state; /*!< DTR set state */ + } serial; /*!< serial attributes */ + + struct { + int pin; /*!< Parallel port pin number */ + } parallel; /*!< parallel attributes */ + + struct { + int ptt_bitnum; /*!< Bit number for CM108 GPIO PTT */ + } cm108; /*!< CM108 attributes */ + + struct { + int vid; /*!< Vendor ID */ + int pid; /*!< Product ID */ + int conf; /*!< Configuration */ + int iface; /*!< interface */ + int alt; /*!< alternate */ + char *vendor_name; /*!< Vendor name (opt.) */ + char *product; /*!< Product (opt.) */ + } usb; /*!< USB attributes */ + + struct { + int on_value; /*!< GPIO: 1 == normal, GPION: 0 == inverted */ + int value; /*!< Toggle PTT ON or OFF */ + } gpio; /*!< GPIO attributes */ + } parm; /*!< Port parameter union */ + int client_port; /*!< client socket port for tcp connection */ + RIG *rig; /*!< our parent RIG device */ + int asyncio; /*!< enable asynchronous data handling if true -- async collides with python keyword so _async is used */ +#if defined(_WIN32) + hamlib_async_pipe_t *sync_data_pipe; /*!< pipe data structure for synchronous data */ + hamlib_async_pipe_t *sync_data_error_pipe; /*!< pipe data structure for synchronous data error codes */ +#else + int fd_sync_write; /*!< file descriptor for writing synchronous data */ + int fd_sync_read; /*!< file descriptor for reading synchronous data */ + int fd_sync_error_write; /*!< file descriptor for writing synchronous data error codes */ + 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 */ +// DO NOT ADD ANYTHING HERE UNTIL 5.0!! +} hamlib_port_t; + + +// DO NOT CHANGE THIS STRUCTURE AT ALL +// Will be removed in 5.0 +typedef struct hamlib_port_deprecated { + union { + rig_port_t rig; /*!< Communication port type */ + ptt_type_t ptt; /*!< PTT port type */ + dcd_type_t dcd; /*!< DCD port type */ + } type; + + int fd; /*!< File descriptor */ + void *handle; /*!< handle for USB */ + + int write_delay; /*!< Delay between each byte sent out, in mS */ + int post_write_delay; /*!< Delay between each commands send out, in mS */ + + struct { + int tv_sec, tv_usec; + } post_write_date; /*!< hamlib internal use */ + + int timeout; /*!< Timeout, in mS */ + short retry; /*!< Maximum number of retries, 0 to disable */ + short flushx; /*!< If true flush is done with read instead of TCFLUSH - MicroHam */ + + char pathname[HAMLIB_FILPATHLEN]; /*!< Port pathname */ + + union { + struct { + int rate; /*!< Serial baud rate */ + int data_bits; /*!< Number of data bits */ + int stop_bits; /*!< Number of stop bits */ + enum serial_parity_e parity; /*!< Serial parity */ + enum serial_handshake_e handshake; /*!< Serial handshake */ + enum serial_control_state_e rts_state; /*!< RTS set state */ + enum serial_control_state_e dtr_state; /*!< DTR set state */ + } serial; /*!< serial attributes */ + + struct { + int pin; /*!< Parallel port pin number */ + } parallel; /*!< parallel attributes */ + + struct { + int ptt_bitnum; /*!< Bit number for CM108 GPIO PTT */ + } cm108; /*!< CM108 attributes */ + + struct { + int vid; /*!< Vendor ID */ + int pid; /*!< Product ID */ + int conf; /*!< Configuration */ + int iface; /*!< interface */ + int alt; /*!< alternate */ + char *vendor_name; /*!< Vendor name (opt.) */ + char *product; /*!< Product (opt.) */ + } usb; /*!< USB attributes */ + + struct { + int on_value; /*!< GPIO: 1 == normal, GPION: 0 == inverted */ + int value; /*!< Toggle PTT ON or OFF */ + } gpio; /*!< GPIO attributes */ + } parm; /*!< Port parameter union */ + int client_port; /*!< client socket port for tcp connection */ + RIG *rig; /*!< our parent RIG device */ +} hamlib_port_t_deprecated; +//! @endcond + +#if !defined(__APPLE__) || !defined(__cplusplus) +typedef hamlib_port_t_deprecated port_t_deprecated; +typedef hamlib_port_t port_t; +#endif + +#if defined(IN_HAMLIB) +/* These are for internal use only */ +#define RIGPORT(r) (&(r)->state.rigport) +#define PTTPORT(r) (&(r)->state.pttport) +#define DCDPORT(r) (&(r)->state.dcdport) +#define AMPPORT(a) (&(a)->state.ampport) +#define ROTPORT(r) (&(r)->state.rotport) +#define ROTPORT2(r) (&(r)->state.rotport2) +#endif +#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_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)) __END_DECLS diff --git a/include/hamlib/rig.h b/include/hamlib/rig.h index c6421d324..a606d80f9 100644 --- a/include/hamlib/rig.h +++ b/include/hamlib/rig.h @@ -261,6 +261,12 @@ enum rig_debug_level_e { struct rig; struct rig_state; struct rig_cache; +struct hamlib_port; +typedef struct hamlib_port hamlib_port_t; +//---Start cut here--- +struct hamlib_port_deprecated; +typedef struct hamlib_port_deprecated hamlib_port_t_deprecated; +//---End cut here--- /** * \brief Rig structure definition (see rig for details). @@ -2354,159 +2360,19 @@ struct hamlib_async_pipe; typedef struct hamlib_async_pipe hamlib_async_pipe_t; -/** - * \brief Port definition - * - * Of course, looks like OO painstakingly programmed in C, sigh. - */ -//! @cond Doxygen_Suppress -// DO NOT CHANGE THIS STRUCTURE ALL UNTIL 5.0 -// Right now it is static inside rig structure -// 5.0 will change it to a pointer which can then be added to -// At that point only add to the end of the structure -typedef struct hamlib_port { - union { - rig_port_t rig; /*!< Communication port type */ - ptt_type_t ptt; /*!< PTT port type */ - dcd_type_t dcd; /*!< DCD port type */ - } type; +//---Start cut here--- +// Definition of struct hamlib_port moved to port.h +// Temporary include here until 5.0 +/* For non-invasive debugging */ +#ifndef NO_OLD_INCLUDES +__END_DECLS - int fd; /*!< File descriptor */ - void *handle; /*!< handle for USB */ +#include - int write_delay; /*!< Delay between each byte sent out, in mS */ - int post_write_delay; /*!< Delay between each commands send out, in mS */ - - struct { - int tv_sec, tv_usec; - } post_write_date; /*!< hamlib internal use */ - - int timeout; /*!< Timeout, in mS */ - short retry; /*!< Maximum number of retries, 0 to disable */ - short flushx; /*!< If true flush is done with read instead of TCFLUSH - MicroHam */ - - char pathname[HAMLIB_FILPATHLEN]; /*!< Port pathname */ - - union { - struct { - int rate; /*!< Serial baud rate */ - int data_bits; /*!< Number of data bits */ - int stop_bits; /*!< Number of stop bits */ - enum serial_parity_e parity; /*!< Serial parity */ - enum serial_handshake_e handshake; /*!< Serial handshake */ - enum serial_control_state_e rts_state; /*!< RTS set state */ - enum serial_control_state_e dtr_state; /*!< DTR set state */ - } serial; /*!< serial attributes */ - - struct { - int pin; /*!< Parallel port pin number */ - } parallel; /*!< parallel attributes */ - - struct { - int ptt_bitnum; /*!< Bit number for CM108 GPIO PTT */ - } cm108; /*!< CM108 attributes */ - - struct { - int vid; /*!< Vendor ID */ - int pid; /*!< Product ID */ - int conf; /*!< Configuration */ - int iface; /*!< interface */ - int alt; /*!< alternate */ - char *vendor_name; /*!< Vendor name (opt.) */ - char *product; /*!< Product (opt.) */ - } usb; /*!< USB attributes */ - - struct { - int on_value; /*!< GPIO: 1 == normal, GPION: 0 == inverted */ - int value; /*!< Toggle PTT ON or OFF */ - } gpio; /*!< GPIO attributes */ - } parm; /*!< Port parameter union */ - int client_port; /*!< client socket port for tcp connection */ - RIG *rig; /*!< our parent RIG device */ - int asyncio; /*!< enable asynchronous data handling if true -- async collides with python keyword so _async is used */ -#if defined(_WIN32) - hamlib_async_pipe_t *sync_data_pipe; /*!< pipe data structure for synchronous data */ - hamlib_async_pipe_t *sync_data_error_pipe; /*!< pipe data structure for synchronous data error codes */ -#else - int fd_sync_write; /*!< file descriptor for writing synchronous data */ - int fd_sync_read; /*!< file descriptor for reading synchronous data */ - int fd_sync_error_write; /*!< file descriptor for writing synchronous data error codes */ - 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 */ -// DO NOT ADD ANYTHING HERE UNTIL 5.0!! -} hamlib_port_t; - - -// DO NOT CHANGE THIS STRUCTURE AT ALL -// Will be removed in 5.0 -typedef struct hamlib_port_deprecated { - union { - rig_port_t rig; /*!< Communication port type */ - ptt_type_t ptt; /*!< PTT port type */ - dcd_type_t dcd; /*!< DCD port type */ - } type; - - int fd; /*!< File descriptor */ - void *handle; /*!< handle for USB */ - - int write_delay; /*!< Delay between each byte sent out, in mS */ - int post_write_delay; /*!< Delay between each commands send out, in mS */ - - struct { - int tv_sec, tv_usec; - } post_write_date; /*!< hamlib internal use */ - - int timeout; /*!< Timeout, in mS */ - short retry; /*!< Maximum number of retries, 0 to disable */ - short flushx; /*!< If true flush is done with read instead of TCFLUSH - MicroHam */ - - char pathname[HAMLIB_FILPATHLEN]; /*!< Port pathname */ - - union { - struct { - int rate; /*!< Serial baud rate */ - int data_bits; /*!< Number of data bits */ - int stop_bits; /*!< Number of stop bits */ - enum serial_parity_e parity; /*!< Serial parity */ - enum serial_handshake_e handshake; /*!< Serial handshake */ - enum serial_control_state_e rts_state; /*!< RTS set state */ - enum serial_control_state_e dtr_state; /*!< DTR set state */ - } serial; /*!< serial attributes */ - - struct { - int pin; /*!< Parallel port pin number */ - } parallel; /*!< parallel attributes */ - - struct { - int ptt_bitnum; /*!< Bit number for CM108 GPIO PTT */ - } cm108; /*!< CM108 attributes */ - - struct { - int vid; /*!< Vendor ID */ - int pid; /*!< Product ID */ - int conf; /*!< Configuration */ - int iface; /*!< interface */ - int alt; /*!< alternate */ - char *vendor_name; /*!< Vendor name (opt.) */ - char *product; /*!< Product (opt.) */ - } usb; /*!< USB attributes */ - - struct { - int on_value; /*!< GPIO: 1 == normal, GPION: 0 == inverted */ - int value; /*!< Toggle PTT ON or OFF */ - } gpio; /*!< GPIO attributes */ - } parm; /*!< Port parameter union */ - int client_port; /*!< client socket port for tcp connection */ - RIG *rig; /*!< our parent RIG device */ -} hamlib_port_t_deprecated; -//! @endcond - -#if !defined(__APPLE__) || !defined(__cplusplus) -typedef hamlib_port_t_deprecated port_t_deprecated; -typedef hamlib_port_t port_t; +__BEGIN_DECLS #endif +//---End cut here--- /* Macros to access data structures/pointers * Make it easier to change location in preparation * for moving them out of rig->state. @@ -2519,13 +2385,13 @@ typedef hamlib_port_t port_t; // Note: Experimental, and subject to change!! #if defined(IN_HAMLIB) /* These are for internal use only */ -#define RIGPORT(r) (&r->state.rigport) -#define PTTPORT(r) (&r->state.pttport) -#define DCDPORT(r) (&r->state.dcdport) -//Moved to cache.h #define CACHE(r) ((r)->cache_addr) -#define AMPPORT(a) (&a->state.ampport) -#define ROTPORT(r) (&r->state.rotport) -#define ROTPORT2(r) (&r->state.rotport2) +//Moved to include/hamlib/port.h #define RIGPORT(r) (&r->state.rigport) +// " " " #define PTTPORT(r) (&r->state.pttport) +// " " " #define DCDPORT(r) (&r->state.dcdport) +//Moved to src/cache.h #define CACHE(r) ((r)->cache_addr) +//Moved to include/hamlib/port.h #define AMPPORT(a) (&a->state.ampport) +// " " " #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) @@ -2536,13 +2402,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_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_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_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)) diff --git a/tests/example.c b/tests/example.c index a9274d3c0..321cd3988 100644 --- a/tests/example.c +++ b/tests/example.c @@ -11,11 +11,13 @@ #include #include #include +#include +#include #include #include "sprintflst.h" #include -#if 0 +#if 1 #define MODEL RIG_MODEL_DUMMY #define PATH "/dev/ttyUSB0" #define BAUD 19200 @@ -31,14 +33,14 @@ int main() char *info_buf; freq_t freq; value_t rawstrength, power, strength; - float s_meter, rig_raw2val(); + float s_meter, rig_raw2val(int i, cal_table_t *t); int status, retcode; unsigned int mwpower; rmode_t mode; pbwidth_t width; /* Set verbosity level */ - rig_set_debug(RIG_DEBUG_TRACE); // errors only + rig_set_debug(RIG_DEBUG_TRACE); // Lots of output /* Instantiate a rig */ my_rig = rig_init(MODEL); // your rig model. @@ -123,7 +125,8 @@ int main() printf("LEVEL_STRENGTH returns %d\n", strength.i); - const freq_range_t *range = rig_get_range(&my_rig->state.rx_range_list[0], + const struct rig_state *my_rs = HAMLIB_STATE(my_rig); + const freq_range_t *range = rig_get_range(&my_rs->rx_range_list[0], 14074000, RIG_MODE_USB); if (status != RIG_OK) { rig_debug(RIG_DEBUG_ERR, "%s: error rig_get_ragne: %s\n", __func__, rigerror(status)); } @@ -131,7 +134,7 @@ int main() if (range) { char vfolist[256]; - rig_sprintf_vfo(vfolist, sizeof(vfolist), my_rig->state.vfo_list); + rig_sprintf_vfo(vfolist, sizeof(vfolist), my_rs->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); } From f03fefe1cd1028310bb63d482e538808ddd40938 Mon Sep 17 00:00:00 2001 From: George Baltz N3GB Date: Fri, 4 Jul 2025 13:26:54 -0400 Subject: [PATCH 04/12] Move rig_state definition(s) from rig.h to include/hamlib/rig_state.h Compiling with NO_OLD_INCLUDES still won't work until the state structure(s) are moved out of rig_struct, but at least I get the right compiler errors. --- include/hamlib/rig.h | 340 ++----------------------------------- include/hamlib/rig_state.h | 338 ++++++++++++++++++++++++++++++++++++ 2 files changed, 348 insertions(+), 330 deletions(-) diff --git a/include/hamlib/rig.h b/include/hamlib/rig.h index a606d80f9..33134d3ca 100644 --- a/include/hamlib/rig.h +++ b/include/hamlib/rig.h @@ -2392,7 +2392,7 @@ __BEGIN_DECLS //Moved to include/hamlib/port.h #define AMPPORT(a) (&a->state.ampport) // " " " #define ROTPORT(r) (&r->state.rotport) // " " " #define ROTPORT2(r) (&r->state.rotport2) -#define STATE(r) (&r->state) +//Moved to include/hamlib/rig_state.h #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, @@ -2409,7 +2409,7 @@ __BEGIN_DECLS //#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_STATE(r) ((struct rig_state *)rig_data_pointer(r, RIG_PTRX_STATE)) +//#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 @@ -2565,337 +2565,18 @@ typedef unsigned int rig_comm_status_t; #define RIG_COMM_STATUS_WARNING 0x04 #define RIG_COMM_STATUS_ERROR 0x05 -/** - * \brief Rig state containing live data and customized fields. - * - * This struct contains live data, as well as a copy of capability fields - * that may be updated (ie. customized) - * - * It is NOT fine to move fields around as it can break shared library offset - * As of 2024-03-03 freq_event_elapsed is the last known item being reference externally - * So any additions or changes to this structure must be at the end of the structure - */ -struct rig_state { - /********* ENSURE ANY NEW ITEMS ARE ADDED AT BOTTOM OF THIS STRUCTURE *********/ - /* - * overridable fields - */ - // moving the hamlib_port_t to the end of rig_state and making it a pointer - // this should allow changes to hamlib_port_t without breaking shared libraries - // these will maintain a copy of the new port_t for backwards compatibility - // to these offsets -- note these must stay until a major version update is done like 5.0 - hamlib_port_t_deprecated rigport_deprecated; /*!< Rig port (internal use). */ - hamlib_port_t_deprecated pttport_deprecated; /*!< PTT port (internal use). */ - hamlib_port_t_deprecated dcdport_deprecated; /*!< DCD port (internal use). */ +//---Start cut here--- +/* rig_state definition moved to include/hamlib/rig_state.h */ +#ifndef NO_OLD_INCLUDES - double vfo_comp; /*!< VFO compensation in PPM, 0.0 to disable */ +__END_DECLS - int deprecated_itu_region; /*!< ITU region to select among freq_range_t */ - freq_range_t rx_range_list[HAMLIB_FRQRANGESIZ]; /*!< Receive frequency range list */ - freq_range_t tx_range_list[HAMLIB_FRQRANGESIZ]; /*!< Transmit frequency range list */ +#include - struct tuning_step_list tuning_steps[HAMLIB_TSLSTSIZ]; /*!< Tuning step list */ +__BEGIN_DECLS - struct filter_list filters[HAMLIB_FLTLSTSIZ]; /*!< Mode/filter table, at -6dB */ - - cal_table_t str_cal; /*!< S-meter calibration table */ - - chan_t chan_list[HAMLIB_CHANLSTSIZ]; /*!< Channel list, zero ended */ - - shortfreq_t max_rit; /*!< max absolute RIT */ - shortfreq_t max_xit; /*!< max absolute XIT */ - shortfreq_t max_ifshift; /*!< max absolute IF-SHIFT */ - - ann_t announces; /*!< Announces bit field list */ - - int preamp[HAMLIB_MAXDBLSTSIZ]; /*!< Preamp list in dB, 0 terminated */ - int attenuator[HAMLIB_MAXDBLSTSIZ]; /*!< Attenuator list in dB, 0 terminated */ - - setting_t has_get_func; /*!< List of get functions */ - setting_t has_set_func; /*!< List of set functions */ - setting_t has_get_level; /*!< List of get level */ - setting_t has_set_level; /*!< List of set level */ - setting_t has_get_parm; /*!< List of get parm */ - setting_t has_set_parm; /*!< List of set parm */ - - gran_t level_gran[RIG_SETTING_MAX]; /*!< level granularity */ - gran_t parm_gran[RIG_SETTING_MAX]; /*!< parm granularity */ - - - /* - * non overridable fields, internal use - */ - - int transaction_active; /*!< set to 1 to inform the async reader thread that a synchronous command transaction is waiting for a response, otherwise 0 */ - vfo_t current_vfo; /*!< VFO currently set */ - int vfo_list; /*!< Complete list of VFO for this rig */ - int comm_state; /*!< Comm port state, opened/closed. */ - rig_ptr_t priv; /*!< Pointer to private rig state data. */ - rig_ptr_t obj; /*!< Internal use by hamlib++ for event handling. */ - - int async_data_enabled; /*!< Whether async data mode is enabled */ - int poll_interval; /*!< Rig state polling period in milliseconds */ - freq_t current_freq; /*!< Frequency currently set */ - rmode_t current_mode; /*!< Mode currently set */ - //rmode_t current_modeB; /*!< Mode currently set VFOB */ - pbwidth_t current_width; /*!< Passband width currently set */ - vfo_t tx_vfo; /*!< Tx VFO currently set */ - rmode_t mode_list; /*!< Complete list of modes for this rig */ - // mode_list is used by some - // so anything added to this structure must be below here - int transmit; /*!< rig should be transmitting i.e. hard - wired PTT asserted - used by rigs that - don't do CAT while in Tx */ - freq_t lo_freq; /*!< Local oscillator frequency of any transverter */ - time_t twiddle_time; /*!< time when vfo twiddling was detected */ - int twiddle_timeout; /*!< timeout to resume from twiddling */ - // uplink allows gpredict to behave better by no reading the uplink VFO - int uplink; /*!< uplink=1 will not read Sub, uplink=2 will not read Main */ - struct rig_cache_deprecated cache; // Only here for backward compatability - int vfo_opt; /*!< Is -o switch turned on? */ - int auto_power_on; /*!< Allow Hamlib to power on rig - automatically if supported */ - int auto_power_off; /*!< Allow Hamlib to power off rig - automatically if supported */ - int auto_disable_screensaver; /*!< Allow Hamlib to disable the - rig's screen saver automatically if - supported */ - int ptt_share; /*!< Share ptt port by open/close during get_ptt, set_ptt hogs the port while active */ - int power_now; /*!< Current RF power level in rig units */ - int power_min; /*!< Minimum RF power level in rig units */ - int power_max; /*!< Maximum RF power level in rig units */ - unsigned char disable_yaesu_bandselect; /*!< Disables Yaesu band select logic */ - int twiddle_rit; /*!< Suppresses VFOB reading (cached value used) so RIT control can be used */ - int twiddle_state; /*!< keeps track of twiddle status */ - vfo_t rx_vfo; /*!< Rx VFO currently set */ - - volatile unsigned int snapshot_packet_sequence_number; - - volatile int multicast_publisher_run; - void *multicast_publisher_priv_data; - volatile int async_data_handler_thread_run; - void *async_data_handler_priv_data; - volatile int poll_routine_thread_run; - void *poll_routine_priv_data; - pthread_mutex_t mutex_set_transaction; - hamlib_port_t rigport; /*!< Rig port (internal use). */ - hamlib_port_t pttport; /*!< PTT port (internal use). */ - hamlib_port_t dcdport; /*!< DCD port (internal use). */ - /********* DO NOT ADD or CHANGE anything (or than to rename) ABOVE THIS LINE *********/ - /********* ENSURE ANY NEW ITEMS ARE ADDED AFTER HERE *********/ - /* flags instructing the rig_get routines to use cached values when asyncio is in use */ - int use_cached_freq; /*!< flag instructing rig_get_freq to use cached values when asyncio is in use */ - int use_cached_mode; /*!< flag instructing rig_get_mode to use cached values when asyncio is in use */ - int use_cached_ptt; /*!< flag instructing rig_get_ptt to use cached values when asyncio is in use */ - int depth; /*!< a depth counter to use for debug indentation and such */ - int lock_mode; /*!< flag that prevents mode changes if ~= 0 -- see set/get_lock_mode */ - powerstat_t powerstat; /*!< power status */ - char *tuner_control_pathname; /*!< Path to external tuner control program that get 0/1 (Off/On) argument */ - char client_version[32]; /*!state) +#endif +#define HAMLIB_STATE(r) ((struct rig_state *)rig_data_pointer(r, RIG_PTRX_STATE)) __END_DECLS From cc4b1ce7db096309d36f0381d93152f35901e8f0 Mon Sep 17 00:00:00 2001 From: George Baltz N3GB Date: Sat, 5 Jul 2025 14:59:06 -0400 Subject: [PATCH 05/12] Move amp_state definition to include/hamlib/amp_state.h --- include/hamlib/amp_state.h | 40 ++++++++++++++++++++++++++++++++++++++ include/hamlib/amplifier.h | 40 +++++++++----------------------------- include/hamlib/rig.h | 4 ++-- 3 files changed, 51 insertions(+), 33 deletions(-) diff --git a/include/hamlib/amp_state.h b/include/hamlib/amp_state.h index 70dec12c9..4f4716a5e 100644 --- a/include/hamlib/amp_state.h +++ b/include/hamlib/amp_state.h @@ -24,6 +24,46 @@ #define _AMP_STATE_H 1 __BEGIN_DECLS +/** + * \brief Amplifier state structure. + * + * \struct amp_state + * + * This structure contains live data, as well as a copy of capability fields + * that may be updated, i.e. customized while the #AMP handle is instantiated. + * + * It is fine to move fields around, as this kind of struct should not be + * initialized like amp_caps are. + */ +struct amp_state +{ + /* + * overridable fields + */ + + /* + * non overridable fields, internal use + */ + //---Start cut here--- + hamlib_port_t_deprecated ampport_deprecated; /*!< Amplifier port (internal use). Deprecated */ + //---End cut here--- + + int comm_state; /*!< Comm port state, opened/closed. */ + rig_ptr_t priv; /*!< Pointer to private amplifier state data. */ + rig_ptr_t obj; /*!< Internal use by hamlib++ for event handling. */ + + setting_t has_get_level; /*!< List of get levels. */ + setting_t has_set_level; /*!< List of set levels. */ + + gran_t level_gran[RIG_SETTING_MAX]; /*!< Level granularity. */ + gran_t parm_gran[RIG_SETTING_MAX]; /*!< Parameter granularity. */ + hamlib_port_t ampport; /*!< Amplifier port (internal use). */ +}; + +#if defined(IN_HAMLIB) +#define AMPSTATE(a) (&(a)->state) +#endif +#define HAMLIB_AMPSTATE(a) ((struct amp_state *)amp_data_pointer(a, RIG_PTRX_AMPSTATE)) __END_DECLS diff --git a/include/hamlib/amplifier.h b/include/hamlib/amplifier.h index 3949e6e32..847b2a53b 100644 --- a/include/hamlib/amplifier.h +++ b/include/hamlib/amplifier.h @@ -264,42 +264,20 @@ struct amp_caps const char *macro_name; /*!< Amplifier model macro name. */ }; +//---Start cut here--- +// Amp state structure definition moved to include/hamlib/amp_state.h +// Temporary include until 5.0 +#ifndef NO_OLD_INCLUDES -/** - * \brief Amplifier state structure. - * - * \struct amp_state - * - * This structure contains live data, as well as a copy of capability fields - * that may be updated, i.e. customized while the #AMP handle is instantiated. - * - * It is fine to move fields around, as this kind of struct should not be - * initialized like amp_caps are. - */ -struct amp_state -{ - /* - * overridable fields - */ +__END_DECLS - /* - * non overridable fields, internal use - */ - hamlib_port_t_deprecated ampport_deprecated; /*!< Amplifier port (internal use). Deprecated */ +#include - int comm_state; /*!< Comm port state, opened/closed. */ - rig_ptr_t priv; /*!< Pointer to private amplifier state data. */ - rig_ptr_t obj; /*!< Internal use by hamlib++ for event handling. */ - - setting_t has_get_level; /*!< List of get levels. */ - setting_t has_set_level; /*!< List of set levels. */ - - gran_t level_gran[RIG_SETTING_MAX]; /*!< Level granularity. */ - gran_t parm_gran[RIG_SETTING_MAX]; /*!< Parameter granularity. */ - hamlib_port_t ampport; /*!< Amplifier port (internal use). */ -}; +__BEGIN_DECLS +#endif +//---End cut here--- /** * \brief Master amplifier structure. * diff --git a/include/hamlib/rig.h b/include/hamlib/rig.h index 33134d3ca..e31fa6aa2 100644 --- a/include/hamlib/rig.h +++ b/include/hamlib/rig.h @@ -2393,7 +2393,7 @@ __BEGIN_DECLS // " " " #define ROTPORT(r) (&r->state.rotport) // " " " #define ROTPORT2(r) (&r->state.rotport2) //Moved to include/hamlib/rig_state.h #define STATE(r) (&r->state) -#define AMPSTATE(a) (&(a)->state) +//Moved to include/hamlib/amp_state.h #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 @@ -2410,7 +2410,7 @@ __BEGIN_DECLS //#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_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 From 9991f46e58b937e6034f26245d6d1ab60cb7eff5 Mon Sep 17 00:00:00 2001 From: George Baltz N3GB Date: Sat, 5 Jul 2025 19:19:20 -0400 Subject: [PATCH 06/12] Move rotator state definition to include/hamlib/rot_state.h --- include/hamlib/rig.h | 4 +-- include/hamlib/rot_state.h | 55 ++++++++++++++++++++++++++++++++++++ include/hamlib/rotator.h | 58 ++++++-------------------------------- 3 files changed, 66 insertions(+), 51 deletions(-) diff --git a/include/hamlib/rig.h b/include/hamlib/rig.h index e31fa6aa2..b33f505ac 100644 --- a/include/hamlib/rig.h +++ b/include/hamlib/rig.h @@ -2394,7 +2394,7 @@ __BEGIN_DECLS // " " " #define ROTPORT2(r) (&r->state.rotport2) //Moved to include/hamlib/rig_state.h #define STATE(r) (&r->state) //Moved to include/hamlib/amp_state.h #define AMPSTATE(a) (&(a)->state) -#define ROTSTATE(r) (&(r)->state) +//Moved to include/hamlib/rot_state.h #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 @@ -2411,7 +2411,7 @@ __BEGIN_DECLS //#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)) +//#define HAMLIB_ROTSTATE(r) ((struct rot_state *)rot_data_pointer(r, RIG_PTRX_ROTSTATE)) #endif typedef enum { diff --git a/include/hamlib/rot_state.h b/include/hamlib/rot_state.h index afc80a1b2..39766f035 100644 --- a/include/hamlib/rot_state.h +++ b/include/hamlib/rot_state.h @@ -24,7 +24,62 @@ #define _ROT_STATE_H 1 __BEGIN_DECLS +/** + * \struct rot_state + * \brief Rotator state structure + * + * This structure contains live data, as well as a copy of capability fields + * that may be updated, i.e. customized while the #ROT handle is instantiated. + * + * It is fine to move fields around, as this kind of structure should not be + * initialized like rot_caps are. + */ +struct rot_state { + /* + * overridable fields + */ + azimuth_t min_az; /*!< Lower limit for azimuth (overridable). */ + azimuth_t max_az; /*!< Upper limit for azimuth (overridable). */ + elevation_t min_el; /*!< Lower limit for elevation (overridable). */ + elevation_t max_el; /*!< Upper limit for elevation (overridable). */ + int south_zero; /*!< South is zero degrees. */ + azimuth_t az_offset; /*!< Offset to be applied to azimuth. */ + elevation_t el_offset; /*!< Offset to be applied to elevation. */ + + setting_t has_get_func; /*!< List of get functions. */ + setting_t has_set_func; /*!< List of set functions. */ + setting_t has_get_level; /*!< List of get levels. */ + setting_t has_set_level; /*!< List of set levels. */ + setting_t has_get_parm; /*!< List of get parameters. */ + setting_t has_set_parm; /*!< List of set parameters. */ + + rot_status_t has_status; /*!< Supported status flags. */ + + gran_t level_gran[RIG_SETTING_MAX]; /*!< Level granularity. */ + gran_t parm_gran[RIG_SETTING_MAX]; /*!< Parameter granularity. */ + + /* + * non overridable fields, internal use + */ + hamlib_port_t_deprecated rotport_deprecated; /*!< Rotator port (internal use). Deprecated */ + hamlib_port_t_deprecated rotport2_deprecated; /*!< 2nd Rotator port (internal use). Deprecated */ + + int comm_state; /*!< Comm port state, i.e. opened or closed. */ + rig_ptr_t priv; /*!< Pointer to private rotator state data. */ + rig_ptr_t obj; /*!< Internal use by hamlib++ for event handling. */ + + int current_speed; /*!< Current speed 1-100, to be used when no change to speed is requested. */ + hamlib_port_t rotport; /*!< Rotator port (internal use). */ + hamlib_port_t rotport2; /*!< 2nd Rotator port (internal use). */ + rig_ptr_t *pstrotator_handler_priv_data; + deferred_config_header_t config_queue; +}; __END_DECLS +#if defined(IN_HAMLIB) +#define ROTSTATE(r) (&(r)->state) +#endif +#define HAMLIB_ROTSTATE(r) ((struct rot_state *)rot_data_pointer(r, RIG_PTRX_ROTSTATE)) + #endif /* _ROT_STATE_H */ diff --git a/include/hamlib/rotator.h b/include/hamlib/rotator.h index 0a183c668..ab79f5260 100644 --- a/include/hamlib/rotator.h +++ b/include/hamlib/rotator.h @@ -580,59 +580,19 @@ struct rot_caps { #define ROT_MODEL(arg) .rot_model=arg,.macro_name=#arg //! @endcond +//---Start cut here--- +// Rotatot state definition moved to include/hamlib/rot_state.h +// Temporary include until 5.0 +#ifndef NO_OLD_INCLUDES -/** - * \struct rot_state - * \brief Rotator state structure - * - * This structure contains live data, as well as a copy of capability fields - * that may be updated, i.e. customized while the #ROT handle is instantiated. - * - * It is fine to move fields around, as this kind of structure should not be - * initialized like rot_caps are. - */ -struct rot_state { - /* - * overridable fields - */ - azimuth_t min_az; /*!< Lower limit for azimuth (overridable). */ - azimuth_t max_az; /*!< Upper limit for azimuth (overridable). */ - elevation_t min_el; /*!< Lower limit for elevation (overridable). */ - elevation_t max_el; /*!< Upper limit for elevation (overridable). */ - int south_zero; /*!< South is zero degrees. */ - azimuth_t az_offset; /*!< Offset to be applied to azimuth. */ - elevation_t el_offset; /*!< Offset to be applied to elevation. */ +__END_DECLS - setting_t has_get_func; /*!< List of get functions. */ - setting_t has_set_func; /*!< List of set functions. */ - setting_t has_get_level; /*!< List of get levels. */ - setting_t has_set_level; /*!< List of set levels. */ - setting_t has_get_parm; /*!< List of get parameters. */ - setting_t has_set_parm; /*!< List of set parameters. */ - - rot_status_t has_status; /*!< Supported status flags. */ - - gran_t level_gran[RIG_SETTING_MAX]; /*!< Level granularity. */ - gran_t parm_gran[RIG_SETTING_MAX]; /*!< Parameter granularity. */ - - /* - * non overridable fields, internal use - */ - hamlib_port_t_deprecated rotport_deprecated; /*!< Rotator port (internal use). Deprecated */ - hamlib_port_t_deprecated rotport2_deprecated; /*!< 2nd Rotator port (internal use). Deprecated */ - - int comm_state; /*!< Comm port state, i.e. opened or closed. */ - rig_ptr_t priv; /*!< Pointer to private rotator state data. */ - rig_ptr_t obj; /*!< Internal use by hamlib++ for event handling. */ - - int current_speed; /*!< Current speed 1-100, to be used when no change to speed is requested. */ - hamlib_port_t rotport; /*!< Rotator port (internal use). */ - hamlib_port_t rotport2; /*!< 2nd Rotator port (internal use). */ - rig_ptr_t *pstrotator_handler_priv_data; - deferred_config_header_t config_queue; -}; +#include +__BEGIN_DECLS +#endif +//---End cut here--- /** * \struct s_rot * \brief Master rotator structure. From 213e7751bf751d69111fe6bdc722f9ec73a93a71 Mon Sep 17 00:00:00 2001 From: George Baltz N3GB Date: Sun, 6 Jul 2025 16:34:54 -0400 Subject: [PATCH 07/12] Add needed includes of new files to rotators/*/* --- rotators/amsat/if100.c | 2 ++ rotators/androidsensor/androidsensor.cpp | 3 ++- rotators/apex/apex.c | 1 + rotators/apex/sharedloop.c | 1 + rotators/ars/ars.c | 2 ++ rotators/celestron/celestron.c | 1 + rotators/easycomm/easycomm.c | 2 ++ rotators/ether6/ether6.c | 2 ++ rotators/flir/flir.c | 2 ++ rotators/fodtrack/fodtrack.c | 2 ++ rotators/grbltrk/grbltrk.c | 2 ++ rotators/gs232a/gs232.c | 1 + rotators/gs232a/gs232a.c | 4 ++-- rotators/gs232a/gs232b.c | 2 ++ rotators/heathkit/hd1780.c | 2 ++ rotators/ioptron/rot_ioptron.c | 1 + rotators/m2/rc2800.c | 1 + rotators/meade/meade.c | 2 ++ rotators/prosistel/prosistel.c | 1 + rotators/radant/radant.c | 1 + rotators/rotorez/rotorez.c | 2 ++ rotators/saebrtrack/saebrtrack.c | 1 + rotators/sartek/sartek.c | 1 + rotators/satel/satel.c | 1 + rotators/skywatcher/skywatcher.c | 2 ++ rotators/spid/spid.c | 2 ++ rotators/ts7400/ts7400.c | 2 ++ 27 files changed, 43 insertions(+), 3 deletions(-) diff --git a/rotators/amsat/if100.c b/rotators/amsat/if100.c index da924c90f..3094a940a 100644 --- a/rotators/amsat/if100.c +++ b/rotators/amsat/if100.c @@ -27,6 +27,8 @@ #endif #include +#include "hamlib/port.h" +#include "hamlib/rot_state.h" #include "parallel.h" #include "register.h" diff --git a/rotators/androidsensor/androidsensor.cpp b/rotators/androidsensor/androidsensor.cpp index e8fc130cc..cff44d409 100644 --- a/rotators/androidsensor/androidsensor.cpp +++ b/rotators/androidsensor/androidsensor.cpp @@ -30,6 +30,7 @@ #include #include "hamlib/rotator.h" +#include "hamlib/rot_state.h" #include "register.h" #include "androidsensor.h" @@ -111,7 +112,7 @@ androidsensor_rot_cleanup(ROT *rot) delete priv->imu; free(ROTSTATE(rot)->priv); - ROTSTATE(rot) = NULL; + ROTSTATE(rot)->priv = NULL; return RIG_OK; } diff --git a/rotators/apex/apex.c b/rotators/apex/apex.c index 04f803f05..956088378 100644 --- a/rotators/apex/apex.c +++ b/rotators/apex/apex.c @@ -1,4 +1,5 @@ #include +#include "hamlib/port.h" #include #include "iofunc.h" #include "register.h" diff --git a/rotators/apex/sharedloop.c b/rotators/apex/sharedloop.c index 5fa8eb865..6490aeefd 100644 --- a/rotators/apex/sharedloop.c +++ b/rotators/apex/sharedloop.c @@ -2,6 +2,7 @@ #include #include "hamlib/rotator.h" +#include "hamlib/port.h" #include "iofunc.h" #include "apex.h" diff --git a/rotators/ars/ars.c b/rotators/ars/ars.c index d7f5c3309..928cbcf7c 100644 --- a/rotators/ars/ars.c +++ b/rotators/ars/ars.c @@ -32,6 +32,8 @@ #endif #include "hamlib/rotator.h" +#include "hamlib/port.h" +#include "hamlib/rot_state.h" #include "parallel.h" #include "misc.h" #include "register.h" diff --git a/rotators/celestron/celestron.c b/rotators/celestron/celestron.c index dfc2d25f0..1cb849449 100644 --- a/rotators/celestron/celestron.c +++ b/rotators/celestron/celestron.c @@ -23,6 +23,7 @@ #include #include "hamlib/rotator.h" +#include "hamlib/port.h" #include "serial.h" #include "register.h" diff --git a/rotators/easycomm/easycomm.c b/rotators/easycomm/easycomm.c index 94a93a1d8..7bb0cac9f 100644 --- a/rotators/easycomm/easycomm.c +++ b/rotators/easycomm/easycomm.c @@ -26,6 +26,8 @@ #include /* String function definitions */ #include "hamlib/rotator.h" +#include "hamlib/port.h" +#include "hamlib/rot_state.h" #include "serial.h" #include "register.h" #include "idx_builtin.h" diff --git a/rotators/ether6/ether6.c b/rotators/ether6/ether6.c index 64ee72386..aeffa6bf3 100644 --- a/rotators/ether6/ether6.c +++ b/rotators/ether6/ether6.c @@ -25,6 +25,8 @@ #include /* String function definitions */ #include +#include "hamlib/port.h" +#include "hamlib/rot_state.h" #include "serial.h" #include "register.h" #include "idx_builtin.h" diff --git a/rotators/flir/flir.c b/rotators/flir/flir.c index 51291055e..04e4d52e3 100644 --- a/rotators/flir/flir.c +++ b/rotators/flir/flir.c @@ -27,6 +27,8 @@ #include #include "hamlib/rotator.h" +#include "hamlib/port.h" +#include "hamlib/rot_state.h" #include "register.h" #include "idx_builtin.h" #include "serial.h" diff --git a/rotators/fodtrack/fodtrack.c b/rotators/fodtrack/fodtrack.c index 6598dc1ea..0b31ac70c 100644 --- a/rotators/fodtrack/fodtrack.c +++ b/rotators/fodtrack/fodtrack.c @@ -32,6 +32,8 @@ #endif #include "hamlib/rotator.h" +#include "hamlib/port.h" +#include "hamlib/rot_state.h" #include "parallel.h" #include "misc.h" #include "register.h" diff --git a/rotators/grbltrk/grbltrk.c b/rotators/grbltrk/grbltrk.c index abf398765..2cfe9f37f 100644 --- a/rotators/grbltrk/grbltrk.c +++ b/rotators/grbltrk/grbltrk.c @@ -34,6 +34,8 @@ #endif #include "hamlib/rotator.h" +#include "hamlib/port.h" +#include "hamlib/rot_state.h" #include "hamlib/rig.h" #include "misc.h" diff --git a/rotators/gs232a/gs232.c b/rotators/gs232a/gs232.c index 9299db429..bbddc9a27 100644 --- a/rotators/gs232a/gs232.c +++ b/rotators/gs232a/gs232.c @@ -25,6 +25,7 @@ #include #include "hamlib/rotator.h" +#include "hamlib/port.h" #include "serial.h" #define EOM "\r" diff --git a/rotators/gs232a/gs232a.c b/rotators/gs232a/gs232a.c index d9b225a7d..a243024b9 100644 --- a/rotators/gs232a/gs232a.c +++ b/rotators/gs232a/gs232a.c @@ -23,13 +23,13 @@ // cppcheck-suppress * #include // cppcheck-suppress * -// cppcheck-suppress * #include /* String function definitions */ // cppcheck-suppress * -// cppcheck-suppress * #include #include "hamlib/rotator.h" +#include "hamlib/port.h" +#include "hamlib/rot_state.h" #include "serial.h" #include "misc.h" #include "register.h" diff --git a/rotators/gs232a/gs232b.c b/rotators/gs232a/gs232b.c index 4b1d558bc..8275a9ca8 100644 --- a/rotators/gs232a/gs232b.c +++ b/rotators/gs232a/gs232b.c @@ -29,6 +29,8 @@ #include #include "hamlib/rotator.h" +#include "hamlib/port.h" +#include "hamlib/rot_state.h" #include "serial.h" #include "misc.h" #include "idx_builtin.h" diff --git a/rotators/heathkit/hd1780.c b/rotators/heathkit/hd1780.c index 85799f35a..7cc25e364 100644 --- a/rotators/heathkit/hd1780.c +++ b/rotators/heathkit/hd1780.c @@ -32,6 +32,8 @@ #include /* String function definitions */ #include "hamlib/rotator.h" +#include "hamlib/port.h" +#include "hamlib/rot_state.h" #include "serial.h" #include "register.h" diff --git a/rotators/ioptron/rot_ioptron.c b/rotators/ioptron/rot_ioptron.c index c4899952d..b19d40db0 100644 --- a/rotators/ioptron/rot_ioptron.c +++ b/rotators/ioptron/rot_ioptron.c @@ -24,6 +24,7 @@ #include #include "hamlib/rotator.h" +#include "hamlib/port.h" #include "serial.h" #include "register.h" diff --git a/rotators/m2/rc2800.c b/rotators/m2/rc2800.c index 36883de24..c399cd679 100644 --- a/rotators/m2/rc2800.c +++ b/rotators/m2/rc2800.c @@ -23,6 +23,7 @@ #include #include "hamlib/rotator.h" +#include "hamlib/port.h" #include "serial.h" #include "misc.h" #include "register.h" diff --git a/rotators/meade/meade.c b/rotators/meade/meade.c index b3fad52f9..18f13a57f 100644 --- a/rotators/meade/meade.c +++ b/rotators/meade/meade.c @@ -26,6 +26,8 @@ #include #include +#include "hamlib/port.h" +#include "hamlib/rot_state.h" #include #include "serial.h" diff --git a/rotators/prosistel/prosistel.c b/rotators/prosistel/prosistel.c index 464151bf5..d09cd185d 100644 --- a/rotators/prosistel/prosistel.c +++ b/rotators/prosistel/prosistel.c @@ -25,6 +25,7 @@ #include #include "hamlib/rotator.h" +#include "hamlib/port.h" #include "serial.h" #include "register.h" #include "num_stdio.h" diff --git a/rotators/radant/radant.c b/rotators/radant/radant.c index b8203ef1f..10a457a79 100644 --- a/rotators/radant/radant.c +++ b/rotators/radant/radant.c @@ -26,6 +26,7 @@ #include /* String function definitions */ #include "hamlib/rotator.h" +#include "hamlib/port.h" #include "serial.h" #include "misc.h" #include "register.h" diff --git a/rotators/rotorez/rotorez.c b/rotators/rotorez/rotorez.c index bd0ad65e1..a29298c60 100644 --- a/rotators/rotorez/rotorez.c +++ b/rotators/rotorez/rotorez.c @@ -37,6 +37,8 @@ #include /* for isdigit function */ #include "hamlib/rotator.h" +#include "hamlib/port.h" +#include "hamlib/rot_state.h" #include "serial.h" #include "register.h" #include "iofunc.h" diff --git a/rotators/saebrtrack/saebrtrack.c b/rotators/saebrtrack/saebrtrack.c index 4baa4a8f9..25a9cb689 100644 --- a/rotators/saebrtrack/saebrtrack.c +++ b/rotators/saebrtrack/saebrtrack.c @@ -29,6 +29,7 @@ #include /* String function definitions */ #include "hamlib/rotator.h" +#include "hamlib/port.h" #include "serial.h" #include "register.h" diff --git a/rotators/sartek/sartek.c b/rotators/sartek/sartek.c index baeb5716c..d93bcb2e7 100644 --- a/rotators/sartek/sartek.c +++ b/rotators/sartek/sartek.c @@ -25,6 +25,7 @@ #include /* String function definitions */ #include "hamlib/rotator.h" +#include "hamlib/port.h" #include "serial.h" #include "register.h" diff --git a/rotators/satel/satel.c b/rotators/satel/satel.c index aa90d8db7..024ac35a9 100644 --- a/rotators/satel/satel.c +++ b/rotators/satel/satel.c @@ -28,6 +28,7 @@ #include #include "hamlib/rotator.h" +#include "hamlib/port.h" #include "serial.h" #include "register.h" diff --git a/rotators/skywatcher/skywatcher.c b/rotators/skywatcher/skywatcher.c index 43a38a54a..1080f32a3 100644 --- a/rotators/skywatcher/skywatcher.c +++ b/rotators/skywatcher/skywatcher.c @@ -21,6 +21,8 @@ #include #include "skywatcher.h" +#include "hamlib/port.h" +#include "hamlib/rot_state.h" #include "register.h" #include "serial.h" diff --git a/rotators/spid/spid.c b/rotators/spid/spid.c index fd4fab6d1..365187fa0 100644 --- a/rotators/spid/spid.c +++ b/rotators/spid/spid.c @@ -25,6 +25,8 @@ #include #include "hamlib/rotator.h" +#include "hamlib/port.h" +#include "hamlib/rot_state.h" #include "serial.h" #include "register.h" diff --git a/rotators/ts7400/ts7400.c b/rotators/ts7400/ts7400.c index 11b577643..a99f84aae 100644 --- a/rotators/ts7400/ts7400.c +++ b/rotators/ts7400/ts7400.c @@ -25,6 +25,8 @@ #include #include +#include "hamlib/port.h" +#include "hamlib/rot_state.h" #include "serial.h" #include "misc.h" #include "register.h" From e90cc5fb0ecf2bdbf3b5468e3bad73e7546e2b12 Mon Sep 17 00:00:00 2001 From: George Baltz N3GB Date: Sun, 6 Jul 2025 17:11:44 -0400 Subject: [PATCH 08/12] Add includes to amplifiers/*/*.c --- amplifiers/elecraft/kpa.c | 2 ++ amplifiers/elecraft/kpa1500.c | 1 + amplifiers/expert/expert.c | 2 ++ amplifiers/gemini/dx1200.c | 2 +- amplifiers/gemini/gemini.c | 2 ++ 5 files changed, 8 insertions(+), 1 deletion(-) diff --git a/amplifiers/elecraft/kpa.c b/amplifiers/elecraft/kpa.c index b7bf05a05..8fdc38e25 100644 --- a/amplifiers/elecraft/kpa.c +++ b/amplifiers/elecraft/kpa.c @@ -22,6 +22,8 @@ #include #include #include "kpa.h" +#include "hamlib/port.h" +#include "hamlib/amp_state.h" struct fault_list { diff --git a/amplifiers/elecraft/kpa1500.c b/amplifiers/elecraft/kpa1500.c index bcdbed910..0c2773456 100644 --- a/amplifiers/elecraft/kpa1500.c +++ b/amplifiers/elecraft/kpa1500.c @@ -28,6 +28,7 @@ #include "register.h" #include "kpa.h" +#include "hamlib/port.h" struct kpa_priv_data *kpa1500_priv; diff --git a/amplifiers/expert/expert.c b/amplifiers/expert/expert.c index 7f4080cf8..73f706eaa 100644 --- a/amplifiers/expert/expert.c +++ b/amplifiers/expert/expert.c @@ -22,6 +22,8 @@ #include #include #include "expert.h" +#include "hamlib/port.h" +#include "hamlib/amp_state.h" #include "register.h" #include "misc.h" diff --git a/amplifiers/gemini/dx1200.c b/amplifiers/gemini/dx1200.c index ba41d370e..f13aee6e2 100644 --- a/amplifiers/gemini/dx1200.c +++ b/amplifiers/gemini/dx1200.c @@ -28,7 +28,7 @@ #include "register.h" #include "gemini.h" - +#include "hamlib/port.h" struct gemini_priv_data *gemini_priv; /* diff --git a/amplifiers/gemini/gemini.c b/amplifiers/gemini/gemini.c index 5a154f52c..b95b77200 100644 --- a/amplifiers/gemini/gemini.c +++ b/amplifiers/gemini/gemini.c @@ -23,6 +23,8 @@ #include #include "misc.h" #include "gemini.h" +#include "hamlib/port.h" +#include "hamlib/amp_state.h" #if 0 struct fault_list From 80cfadadb0e63555dd4ace00a4b6326da86976db Mon Sep 17 00:00:00 2001 From: George Baltz N3GB Date: Mon, 7 Jul 2025 16:13:25 -0400 Subject: [PATCH 09/12] Update copyright lines --- include/hamlib/amp_state.h | 3 ++- include/hamlib/port.h | 3 ++- include/hamlib/rig_state.h | 3 ++- include/hamlib/rot_state.h | 3 ++- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/include/hamlib/amp_state.h b/include/hamlib/amp_state.h index 4f4716a5e..8f86ecb10 100644 --- a/include/hamlib/amp_state.h +++ b/include/hamlib/amp_state.h @@ -1,6 +1,7 @@ /* * Hamlib Interface - Amplifier state structure - * Copyright (c) 2025 by The Hamlib Group + * Copyright (c) 2000-2025 by the Hamlib developers + * Copyright (c) 2025 by George Baltz * * * This library is free software; you can redistribute it and/or diff --git a/include/hamlib/port.h b/include/hamlib/port.h index 95de6251b..cec85912e 100644 --- a/include/hamlib/port.h +++ b/include/hamlib/port.h @@ -1,6 +1,7 @@ /* * Hamlib Interface - Port structure - * Copyright (c) 2025 by The Hamlib Group + * Copyright (c) 2000-2025 the Hamlib developers + * Copyright (c) 2025 by George Baltz * * * This library is free software; you can redistribute it and/or diff --git a/include/hamlib/rig_state.h b/include/hamlib/rig_state.h index a148d4d66..604846ddf 100644 --- a/include/hamlib/rig_state.h +++ b/include/hamlib/rig_state.h @@ -1,6 +1,7 @@ /* * Hamlib Interface - Rig state structure - * Copyright (c) 2025 by The Hamlib Group + * Copyright (c) 2000-2025 by the Hamlib developers + * Copyright (c) 2025 by George Baltz * * * This library is free software; you can redistribute it and/or diff --git a/include/hamlib/rot_state.h b/include/hamlib/rot_state.h index 39766f035..949317a9b 100644 --- a/include/hamlib/rot_state.h +++ b/include/hamlib/rot_state.h @@ -1,6 +1,7 @@ /* * Hamlib Interface - Rotator state structure - * Copyright (c) 2025 by The Hamlib Group + * Copyright (c) 2000-2025 by the Hamlib developers + * Copyright (c) 2025 by George Baltz * * * This library is free software; you can redistribute it and/or From f3e9a859ed22c7e5362eccb4fe93ef971ea15a02 Mon Sep 17 00:00:00 2001 From: George Baltz N3GB Date: Mon, 7 Jul 2025 20:24:48 -0400 Subject: [PATCH 10/12] Move ???PORT() macro definitions back to rig.h Many (most?) of the uses of the port structures in Hamlib are to pass through to the basic I/O routines (rig_flush(), write_block(), read_string()), without referencing any of the structure data. Don't bother including port.h if it won't be used. The ???PORT macros are independent of actual hamlib_port_t data use. --- amplifiers/elecraft/kpa1500.c | 1 - amplifiers/gemini/dx1200.c | 1 - include/hamlib/port.h | 10 +--------- include/hamlib/rig.h | 12 ++++++------ rotators/amsat/if100.c | 1 - rotators/apex/apex.c | 1 - rotators/apex/sharedloop.c | 1 - rotators/ars/ars.c | 1 - rotators/easycomm/easycomm.c | 1 - rotators/ether6/ether6.c | 1 - rotators/fodtrack/fodtrack.c | 1 - rotators/ioptron/rot_ioptron.c | 1 - rotators/radant/radant.c | 1 - rotators/saebrtrack/saebrtrack.c | 1 - rotators/satel/satel.c | 1 - src/gpio.c | 1 + src/iofunc.c | 2 +- src/network.c | 1 + src/parallel.c | 1 + src/usb_port.c | 1 + 20 files changed, 12 insertions(+), 29 deletions(-) diff --git a/amplifiers/elecraft/kpa1500.c b/amplifiers/elecraft/kpa1500.c index 0c2773456..bcdbed910 100644 --- a/amplifiers/elecraft/kpa1500.c +++ b/amplifiers/elecraft/kpa1500.c @@ -28,7 +28,6 @@ #include "register.h" #include "kpa.h" -#include "hamlib/port.h" struct kpa_priv_data *kpa1500_priv; diff --git a/amplifiers/gemini/dx1200.c b/amplifiers/gemini/dx1200.c index f13aee6e2..b1738485e 100644 --- a/amplifiers/gemini/dx1200.c +++ b/amplifiers/gemini/dx1200.c @@ -28,7 +28,6 @@ #include "register.h" #include "gemini.h" -#include "hamlib/port.h" struct gemini_priv_data *gemini_priv; /* diff --git a/include/hamlib/port.h b/include/hamlib/port.h index cec85912e..2fa175b45 100644 --- a/include/hamlib/port.h +++ b/include/hamlib/port.h @@ -178,15 +178,7 @@ typedef hamlib_port_t_deprecated port_t_deprecated; typedef hamlib_port_t port_t; #endif -#if defined(IN_HAMLIB) -/* These are for internal use only */ -#define RIGPORT(r) (&(r)->state.rigport) -#define PTTPORT(r) (&(r)->state.pttport) -#define DCDPORT(r) (&(r)->state.dcdport) -#define AMPPORT(a) (&(a)->state.ampport) -#define ROTPORT(r) (&(r)->state.rotport) -#define ROTPORT2(r) (&(r)->state.rotport2) -#endif +// Macros for app access to hamlib_port_t data #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)) diff --git a/include/hamlib/rig.h b/include/hamlib/rig.h index b33f505ac..7c0d39424 100644 --- a/include/hamlib/rig.h +++ b/include/hamlib/rig.h @@ -2385,13 +2385,13 @@ __BEGIN_DECLS // Note: Experimental, and subject to change!! #if defined(IN_HAMLIB) /* These are for internal use only */ -//Moved to include/hamlib/port.h #define RIGPORT(r) (&r->state.rigport) -// " " " #define PTTPORT(r) (&r->state.pttport) -// " " " #define DCDPORT(r) (&r->state.dcdport) +#define RIGPORT(r) (&(r)->state.rigport) +#define PTTPORT(r) (&(r)->state.pttport) +#define DCDPORT(r) (&(r)->state.dcdport) //Moved to src/cache.h #define CACHE(r) ((r)->cache_addr) -//Moved to include/hamlib/port.h #define AMPPORT(a) (&a->state.ampport) -// " " " #define ROTPORT(r) (&r->state.rotport) -// " " " #define ROTPORT2(r) (&r->state.rotport2) +#define AMPPORT(a) (&(a)->state.ampport) +#define ROTPORT(r) (&(r)->state.rotport) +#define ROTPORT2(r) (&(r)->state.rotport2) //Moved to include/hamlib/rig_state.h #define STATE(r) (&r->state) //Moved to include/hamlib/amp_state.h #define AMPSTATE(a) (&(a)->state) //Moved to include/hamlib/rot_state.h #define ROTSTATE(r) (&(r)->state) diff --git a/rotators/amsat/if100.c b/rotators/amsat/if100.c index 3094a940a..d9c2e73e3 100644 --- a/rotators/amsat/if100.c +++ b/rotators/amsat/if100.c @@ -27,7 +27,6 @@ #endif #include -#include "hamlib/port.h" #include "hamlib/rot_state.h" #include "parallel.h" #include "register.h" diff --git a/rotators/apex/apex.c b/rotators/apex/apex.c index 956088378..04f803f05 100644 --- a/rotators/apex/apex.c +++ b/rotators/apex/apex.c @@ -1,5 +1,4 @@ #include -#include "hamlib/port.h" #include #include "iofunc.h" #include "register.h" diff --git a/rotators/apex/sharedloop.c b/rotators/apex/sharedloop.c index 6490aeefd..5fa8eb865 100644 --- a/rotators/apex/sharedloop.c +++ b/rotators/apex/sharedloop.c @@ -2,7 +2,6 @@ #include #include "hamlib/rotator.h" -#include "hamlib/port.h" #include "iofunc.h" #include "apex.h" diff --git a/rotators/ars/ars.c b/rotators/ars/ars.c index 928cbcf7c..795aa0f53 100644 --- a/rotators/ars/ars.c +++ b/rotators/ars/ars.c @@ -32,7 +32,6 @@ #endif #include "hamlib/rotator.h" -#include "hamlib/port.h" #include "hamlib/rot_state.h" #include "parallel.h" #include "misc.h" diff --git a/rotators/easycomm/easycomm.c b/rotators/easycomm/easycomm.c index 7bb0cac9f..4af5cb217 100644 --- a/rotators/easycomm/easycomm.c +++ b/rotators/easycomm/easycomm.c @@ -26,7 +26,6 @@ #include /* String function definitions */ #include "hamlib/rotator.h" -#include "hamlib/port.h" #include "hamlib/rot_state.h" #include "serial.h" #include "register.h" diff --git a/rotators/ether6/ether6.c b/rotators/ether6/ether6.c index aeffa6bf3..a4c2a6de4 100644 --- a/rotators/ether6/ether6.c +++ b/rotators/ether6/ether6.c @@ -25,7 +25,6 @@ #include /* String function definitions */ #include -#include "hamlib/port.h" #include "hamlib/rot_state.h" #include "serial.h" #include "register.h" diff --git a/rotators/fodtrack/fodtrack.c b/rotators/fodtrack/fodtrack.c index 0b31ac70c..455a40eb3 100644 --- a/rotators/fodtrack/fodtrack.c +++ b/rotators/fodtrack/fodtrack.c @@ -32,7 +32,6 @@ #endif #include "hamlib/rotator.h" -#include "hamlib/port.h" #include "hamlib/rot_state.h" #include "parallel.h" #include "misc.h" diff --git a/rotators/ioptron/rot_ioptron.c b/rotators/ioptron/rot_ioptron.c index b19d40db0..c4899952d 100644 --- a/rotators/ioptron/rot_ioptron.c +++ b/rotators/ioptron/rot_ioptron.c @@ -24,7 +24,6 @@ #include #include "hamlib/rotator.h" -#include "hamlib/port.h" #include "serial.h" #include "register.h" diff --git a/rotators/radant/radant.c b/rotators/radant/radant.c index 10a457a79..b8203ef1f 100644 --- a/rotators/radant/radant.c +++ b/rotators/radant/radant.c @@ -26,7 +26,6 @@ #include /* String function definitions */ #include "hamlib/rotator.h" -#include "hamlib/port.h" #include "serial.h" #include "misc.h" #include "register.h" diff --git a/rotators/saebrtrack/saebrtrack.c b/rotators/saebrtrack/saebrtrack.c index 25a9cb689..4baa4a8f9 100644 --- a/rotators/saebrtrack/saebrtrack.c +++ b/rotators/saebrtrack/saebrtrack.c @@ -29,7 +29,6 @@ #include /* String function definitions */ #include "hamlib/rotator.h" -#include "hamlib/port.h" #include "serial.h" #include "register.h" diff --git a/rotators/satel/satel.c b/rotators/satel/satel.c index 024ac35a9..aa90d8db7 100644 --- a/rotators/satel/satel.c +++ b/rotators/satel/satel.c @@ -28,7 +28,6 @@ #include #include "hamlib/rotator.h" -#include "hamlib/port.h" #include "serial.h" #include "register.h" diff --git a/src/gpio.c b/src/gpio.c index e5fcfb597..385cc41ee 100644 --- a/src/gpio.c +++ b/src/gpio.c @@ -27,6 +27,7 @@ #include #include "gpio.h" +#include "hamlib/port.h" int gpio_open(hamlib_port_t *port, int output, int on_value) diff --git a/src/iofunc.c b/src/iofunc.c index 956d56c25..a6998869c 100644 --- a/src/iofunc.c +++ b/src/iofunc.c @@ -42,7 +42,7 @@ #include #include -#include +#include "hamlib/port.h" #include "iofunc.h" #include "misc.h" diff --git a/src/network.c b/src/network.c index 3404eaeb5..ceea68921 100644 --- a/src/network.c +++ b/src/network.c @@ -74,6 +74,7 @@ #endif #include +#include "hamlib/port.h" #include "hamlib/rig_state.h" #include "network.h" #include "misc.h" diff --git a/src/parallel.c b/src/parallel.c index 56478434e..e3fba4b6e 100644 --- a/src/parallel.c +++ b/src/parallel.c @@ -58,6 +58,7 @@ # include #endif +#include "hamlib/port.h" #include "parallel.h" #ifdef HAVE_LINUX_PPDEV_H diff --git a/src/usb_port.c b/src/usb_port.c index bd89b0a18..1a3d687c8 100644 --- a/src/usb_port.c +++ b/src/usb_port.c @@ -40,6 +40,7 @@ #include #include +#include "hamlib/port.h" #ifdef HAVE_LIBUSB_H # include From 3952f030d4e3f0c394a47b0214777ef4ed4cd266 Mon Sep 17 00:00:00 2001 From: George Baltz N3GB Date: Fri, 11 Jul 2025 13:43:47 -0400 Subject: [PATCH 11/12] More copyright updates --- include/hamlib/amp_state.h | 4 ++-- include/hamlib/port.h | 4 ++-- include/hamlib/rig_state.h | 4 ++-- include/hamlib/rot_state.h | 4 ++-- simulators/simts890.c | 25 +++++++++++++++++++++++++ 5 files changed, 33 insertions(+), 8 deletions(-) diff --git a/include/hamlib/amp_state.h b/include/hamlib/amp_state.h index 8f86ecb10..c9b5253d1 100644 --- a/include/hamlib/amp_state.h +++ b/include/hamlib/amp_state.h @@ -1,7 +1,7 @@ /* * Hamlib Interface - Amplifier state structure - * Copyright (c) 2000-2025 by the Hamlib developers - * Copyright (c) 2025 by George Baltz + * Copyright (c) 2000-2025 The Hamlib Group + * Copyright (c) 2025 George Baltz * * * This library is free software; you can redistribute it and/or diff --git a/include/hamlib/port.h b/include/hamlib/port.h index 2fa175b45..59af611cd 100644 --- a/include/hamlib/port.h +++ b/include/hamlib/port.h @@ -1,7 +1,7 @@ /* * Hamlib Interface - Port structure - * Copyright (c) 2000-2025 the Hamlib developers - * Copyright (c) 2025 by George Baltz + * Copyright (c) 2000-2025 The Hamlib Group + * Copyright (c) 2025 George Baltz * * * This library is free software; you can redistribute it and/or diff --git a/include/hamlib/rig_state.h b/include/hamlib/rig_state.h index 604846ddf..74b4d2c4a 100644 --- a/include/hamlib/rig_state.h +++ b/include/hamlib/rig_state.h @@ -1,7 +1,7 @@ /* * Hamlib Interface - Rig state structure - * Copyright (c) 2000-2025 by the Hamlib developers - * Copyright (c) 2025 by George Baltz + * Copyright (c) 2000-2025 The Hamlib Group + * Copyright (c) 2025 George Baltz * * * This library is free software; you can redistribute it and/or diff --git a/include/hamlib/rot_state.h b/include/hamlib/rot_state.h index 949317a9b..04d3a37db 100644 --- a/include/hamlib/rot_state.h +++ b/include/hamlib/rot_state.h @@ -1,7 +1,7 @@ /* * Hamlib Interface - Rotator state structure - * Copyright (c) 2000-2025 by the Hamlib developers - * Copyright (c) 2025 by George Baltz + * Copyright (c) 2000-2025 The Hamlib Group + * Copyright (c) 2025 George Baltz * * * This library is free software; you can redistribute it and/or diff --git a/simulators/simts890.c b/simulators/simts890.c index 4c2982f97..7d9120669 100644 --- a/simulators/simts890.c +++ b/simulators/simts890.c @@ -1,3 +1,28 @@ +/* + * simts890.c - Copyright 2019-2024 The Hamlib Group + * Copyright 2024-2025 George Baltz + * + * This program simulates the CAT actions of the Kenwood TS-890S + * transceiver. It takes commands over a pseudo-tty port, and responds + * as closely as possible in the same way as the real hardware. + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + */ +/* SPDX-License-Identifier: GPL-2.0-or-later */ //#define TRACE /* Full traffic trace if enabled */ // can run this using rigctl/rigctld and socat pty devices #define _XOPEN_SOURCE 700 From b8c1d80626bc2cc0a8537d748aa490adff3a61bf Mon Sep 17 00:00:00 2001 From: George Baltz N3GB Date: Fri, 11 Jul 2025 15:45:27 -0400 Subject: [PATCH 12/12] Add required noise --- bindings/python/test_Hamlib_class.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bindings/python/test_Hamlib_class.py b/bindings/python/test_Hamlib_class.py index d8c9555af..76a2623db 100755 --- a/bindings/python/test_Hamlib_class.py +++ b/bindings/python/test_Hamlib_class.py @@ -16,12 +16,12 @@ class TestClass: def test_callables(self): """Check that nothing was added or removed""" - expected_callables = ['Amp', 'Rig', 'Rot', 'add2debugmsgsave', 'amp_caps', 'amp_state', 'azimuth_long_path', 'cal_table', 'cal_table_float', 'cal_table_float_table', 'cal_table_table', 'chan_list', 'channel', 'channelArray', 'channel_cap', 'confparams', 'confparams_u', 'confparams_u_c', 'confparams_u_n', 'dec2dmmm', 'dec2dms', 'deferred_config_header', 'deferred_config_item', 'distance_long_path', 'dmmm2dec', 'dms2dec', 'ext_list', 'filter_list', 'freq_range_t', 'gran', 'hamlib_port_deprecated_parm', 'hamlib_port_deprecated_parm_cm108', 'hamlib_port_deprecated_parm_gpio', 'hamlib_port_deprecated_parm_parallel', 'hamlib_port_deprecated_parm_serial', 'hamlib_port_deprecated_parm_usb', 'hamlib_port_deprecated_post_write_date', 'hamlib_port_deprecated_type', 'hamlib_port_parm', 'hamlib_port_parm_cm108', 'hamlib_port_parm_gpio', 'hamlib_port_parm_parallel', 'hamlib_port_parm_serial', 'hamlib_port_parm_usb', 'hamlib_port_post_write_date', 'hamlib_port_t', 'hamlib_port_t_deprecated', 'hamlib_port_type', 'hl_usleep', 'locator2longlat', 'longlat2locator', 'multicast_s', 'netrigctl_get_vfo_mode', 'qrb', 'rig_cache_deprecated', 'rig_callbacks', 'rig_caps', 'rig_set_debug', 'rig_spectrum_avg_mode', 'rig_spectrum_line', 'rig_spectrum_scope', 'rig_state', 'rig_state_deprecated', 'rig_stragclevel', 'rig_strcommstatus', 'rig_strfunc', 'rig_strlevel', 'rig_strmtype', 'rig_strparm', 'rig_strptrshift', 'rig_strrmode', 'rig_strrmodes', 'rig_strscan', 'rig_strspectrummode', 'rig_strstatus', 'rig_strvfo', 'rig_strvfop', 'rigerror', 'rigerror2', 'rot_caps', 'rot_state', 'toneArray', 'tuning_step_list', 'value_t', 'value_t_b'] + expected_callables = ['Amp', 'Rig', 'Rot', 'add2debugmsgsave', 'amp_caps', 'azimuth_long_path', 'cal_table', 'cal_table_float', 'cal_table_float_table', 'cal_table_table', 'chan_list', 'channel', 'channelArray', 'channel_cap', 'confparams', 'confparams_u', 'confparams_u_c', 'confparams_u_n', 'dec2dmmm', 'dec2dms', 'deferred_config_header', 'deferred_config_item', 'distance_long_path', 'dmmm2dec', 'dms2dec', 'ext_list', 'filter_list', 'freq_range_t', 'gran', 'hl_usleep', 'locator2longlat', 'longlat2locator', 'multicast_s', 'netrigctl_get_vfo_mode', 'qrb', 'rig_cache_deprecated', 'rig_callbacks', 'rig_caps', 'rig_set_debug', 'rig_spectrum_avg_mode', 'rig_spectrum_line', 'rig_spectrum_scope', 'rig_stragclevel', 'rig_strcommstatus', 'rig_strfunc', 'rig_strlevel', 'rig_strmtype', 'rig_strparm', 'rig_strptrshift', 'rig_strrmode', 'rig_strrmodes', 'rig_strscan', 'rig_strspectrummode', 'rig_strstatus', 'rig_strvfo', 'rig_strvfop', 'rigerror', 'rigerror2', 'rot_caps', 'toneArray', 'tuning_step_list', 'value_t', 'value_t_b'] assert expected_callables == self.actual_callables def test_properties(self): """Check that nothing was added or removed""" - expected_properties = ['AMP_FLAG_1', 'AMP_FLAG_2', 'AMP_LEVEL_FAULT', 'AMP_LEVEL_NH', 'AMP_LEVEL_NONE', 'AMP_LEVEL_PF', 'AMP_LEVEL_PWR', 'AMP_LEVEL_PWR_FWD', 'AMP_LEVEL_PWR_INPUT', 'AMP_LEVEL_PWR_PEAK', 'AMP_LEVEL_PWR_REFLECTED', 'AMP_LEVEL_SWR', 'AMP_MODEL_DUMMY', 'AMP_MODEL_ELECRAFT_KPA1500', 'AMP_MODEL_EXPERT_FA', 'AMP_MODEL_GEMINI_DX1200', 'AMP_MODEL_NETAMPCTL', 'AMP_MODEL_NONE', 'AMP_RESET_AMP', 'AMP_RESET_FAULT', 'AMP_RESET_MEM', 'AMP_TYPE_OTHER', 'BUILTINFUNC', 'CTCSS_LIST_SIZE', 'DCS_LIST_SIZE', 'DEBUGMSGSAVE_SIZE', 'GPIO1', 'GPIO2', 'GPIO3', 'GPIO4', 'HAMLIB_CACHE_ALL', 'HAMLIB_CACHE_ALWAYS', 'HAMLIB_CACHE_FREQ', 'HAMLIB_CACHE_MODE', 'HAMLIB_CACHE_PTT', 'HAMLIB_CACHE_SPLIT', 'HAMLIB_CACHE_VFO', 'HAMLIB_CACHE_WIDTH', 'HAMLIB_CHANLSTSIZ', 'HAMLIB_CHECK_RIG_CAPS', 'HAMLIB_COOKIE_SIZE', 'HAMLIB_ELAPSED_GET', 'HAMLIB_ELAPSED_INVALIDATE', 'HAMLIB_ELAPSED_SET', 'HAMLIB_FIFO_SIZE', 'HAMLIB_FILPATHLEN', 'HAMLIB_FLTLSTSIZ', 'HAMLIB_FRQRANGESIZ', 'HAMLIB_MAXCHANDESC', 'HAMLIB_MAXDBLSTSIZ', 'HAMLIB_MAX_AGC_LEVELS', 'HAMLIB_MAX_CAL_LENGTH', 'HAMLIB_MAX_MODES', 'HAMLIB_MAX_ROTORS', 'HAMLIB_MAX_RSCANS', 'HAMLIB_MAX_SNAPSHOT_PACKET_SIZE', 'HAMLIB_MAX_SPECTRUM_AVG_MODES', 'HAMLIB_MAX_SPECTRUM_DATA', 'HAMLIB_MAX_SPECTRUM_MODES', 'HAMLIB_MAX_SPECTRUM_SCOPES', 'HAMLIB_MAX_SPECTRUM_SPANS', 'HAMLIB_MAX_VFOS', 'HAMLIB_MAX_VFO_OPS', 'HAMLIB_RIGNAMSIZ', 'HAMLIB_RIGVERSIZ', 'HAMLIB_SECRET_LENGTH', 'HAMLIB_SETTINGS_FILE', 'HAMLIB_TSLSTSIZ', 'MAX_MODELS_PER_BACKEND', 'NETAMPCTL_RET', 'NETRIGCTL_RET', 'NETROTCTL_RET', 'RIG_AGC_AUTO', 'RIG_AGC_FAST', 'RIG_AGC_LAST', 'RIG_AGC_LONG', 'RIG_AGC_MEDIUM', 'RIG_AGC_NONE', 'RIG_AGC_OFF', 'RIG_AGC_ON', 'RIG_AGC_SLOW', 'RIG_AGC_SUPERFAST', 'RIG_AGC_USER', 'RIG_ANN_CW', 'RIG_ANN_ENG', 'RIG_ANN_FREQ', 'RIG_ANN_JAP', 'RIG_ANN_NONE', 'RIG_ANN_OFF', 'RIG_ANN_RXMODE', 'RIG_ANT_MAX', 'RIG_ANT_NONE', 'RIG_BANDSELECT_10M', 'RIG_BANDSELECT_12M', 'RIG_BANDSELECT_13CM', 'RIG_BANDSELECT_15M', 'RIG_BANDSELECT_160M', 'RIG_BANDSELECT_17M', 'RIG_BANDSELECT_1_25M', 'RIG_BANDSELECT_20M', 'RIG_BANDSELECT_2200M', 'RIG_BANDSELECT_23CM', 'RIG_BANDSELECT_2M', 'RIG_BANDSELECT_30M', 'RIG_BANDSELECT_33CM', 'RIG_BANDSELECT_3CM', 'RIG_BANDSELECT_40M', 'RIG_BANDSELECT_4M', 'RIG_BANDSELECT_5CM', 'RIG_BANDSELECT_600M', 'RIG_BANDSELECT_60M', 'RIG_BANDSELECT_6M', 'RIG_BANDSELECT_70CM', 'RIG_BANDSELECT_80M', 'RIG_BANDSELECT_9CM', 'RIG_BANDSELECT_AIR', 'RIG_BANDSELECT_GEN', 'RIG_BANDSELECT_MW', 'RIG_BANDSELECT_UNUSED', 'RIG_BANDSELECT_WFM', 'RIG_BAND_10M', 'RIG_BAND_12M', 'RIG_BAND_144MHZ', 'RIG_BAND_15M', 'RIG_BAND_160M', 'RIG_BAND_17M', 'RIG_BAND_20M', 'RIG_BAND_30M', 'RIG_BAND_40M', 'RIG_BAND_430MHZ', 'RIG_BAND_60M', 'RIG_BAND_6M', 'RIG_BAND_80M', 'RIG_BAND_AIR', 'RIG_BAND_GEN', 'RIG_BAND_MW', 'RIG_BAND_UNUSED', 'RIG_BUSBUSY', 'RIG_BUSERROR', 'RIG_CAPS_HAS_GET_LEVEL', 'RIG_CAPS_HAS_SET_LEVEL', 'RIG_CAPS_MFG_NAME_CPTR', 'RIG_CAPS_MODEL_NAME_CPTR', 'RIG_CAPS_PORT_TYPE', 'RIG_CAPS_PTT_TYPE', 'RIG_CAPS_RIG_MODEL', 'RIG_CAPS_STATUS_CPTR', 'RIG_CAPS_TARGETABLE_VFO', 'RIG_CAPS_VERSION_CPTR', 'RIG_CHFLAG_DATA', 'RIG_CHFLAG_NONE', 'RIG_CHFLAG_PSKIP', 'RIG_CHFLAG_SKIP', 'RIG_CLIENT_GPREDICT', 'RIG_CLIENT_UNKNOWN', 'RIG_CLIENT_WSJTX', 'RIG_COMM_STATUS_CONNECTING', 'RIG_COMM_STATUS_DISCONNECTED', 'RIG_COMM_STATUS_ERROR', 'RIG_COMM_STATUS_OK', 'RIG_COMM_STATUS_TERMINATED', 'RIG_COMM_STATUS_WARNING', 'RIG_CONF_BINARY', 'RIG_CONF_BUTTON', 'RIG_CONF_CHECKBUTTON', 'RIG_CONF_COMBO', 'RIG_CONF_END', 'RIG_CONF_INT', 'RIG_CONF_NUMERIC', 'RIG_CONF_STRING', 'RIG_COOKIE_GET', 'RIG_COOKIE_RELEASE', 'RIG_COOKIE_RENEW', 'RIG_DCD_CM108', 'RIG_DCD_GPIO', 'RIG_DCD_GPION', 'RIG_DCD_NONE', 'RIG_DCD_OFF', 'RIG_DCD_ON', 'RIG_DCD_PARALLEL', 'RIG_DCD_RIG', 'RIG_DCD_SERIAL_CAR', 'RIG_DCD_SERIAL_CTS', 'RIG_DCD_SERIAL_DSR', 'RIG_DEBUG_BUG', 'RIG_DEBUG_CACHE', 'RIG_DEBUG_ERR', 'RIG_DEBUG_NONE', 'RIG_DEBUG_TRACE', 'RIG_DEBUG_VERBOSE', 'RIG_DEBUG_WARN', 'RIG_EACCESS', 'RIG_EARG', 'RIG_ECONF', 'RIG_EDEPRECATED', 'RIG_EDOM', 'RIG_EEND', 'RIG_EINTERNAL', 'RIG_EINVAL', 'RIG_EIO', 'RIG_ELIMIT', 'RIG_ENAVAIL', 'RIG_ENIMPL', 'RIG_ENOMEM', 'RIG_ENTARGET', 'RIG_EPOWER', 'RIG_EPROTO', 'RIG_ERJCTED', 'RIG_ESECURITY', 'RIG_ETIMEOUT', 'RIG_ETRUNC', 'RIG_EVFO', 'RIG_FLAG_APRS', 'RIG_FLAG_COMPUTER', 'RIG_FLAG_DXCLUSTER', 'RIG_FLAG_HANDHELD', 'RIG_FLAG_MOBILE', 'RIG_FLAG_RECEIVER', 'RIG_FLAG_SCANNER', 'RIG_FLAG_TNC', 'RIG_FLAG_TRANSMITTER', 'RIG_FLAG_TRUNKING', 'RIG_FLAG_TUNER', 'RIG_FLT_ANY', 'RIG_FUNCTION_CLEANUP', 'RIG_FUNCTION_CLOSE', 'RIG_FUNCTION_DECODE_EVENT', 'RIG_FUNCTION_GET_ANT', 'RIG_FUNCTION_GET_CHANNEL', 'RIG_FUNCTION_GET_CHAN_ALL_CB', 'RIG_FUNCTION_GET_CONF', 'RIG_FUNCTION_GET_CONF2', 'RIG_FUNCTION_GET_CTCSS_SQL', 'RIG_FUNCTION_GET_CTCSS_TONE', 'RIG_FUNCTION_GET_DCD', 'RIG_FUNCTION_GET_DCS_CODE', 'RIG_FUNCTION_GET_DCS_SQL', 'RIG_FUNCTION_GET_EXT_FUNC', 'RIG_FUNCTION_GET_EXT_LEVEL', 'RIG_FUNCTION_GET_EXT_PARM', 'RIG_FUNCTION_GET_FREQ', 'RIG_FUNCTION_GET_FUNC', 'RIG_FUNCTION_GET_INFO', 'RIG_FUNCTION_GET_LEVEL', 'RIG_FUNCTION_GET_MEM', 'RIG_FUNCTION_GET_MEM_ALL_CB', 'RIG_FUNCTION_GET_MODE', 'RIG_FUNCTION_GET_PARM', 'RIG_FUNCTION_GET_POWERSTAT', 'RIG_FUNCTION_GET_PTT', 'RIG_FUNCTION_GET_RIT', 'RIG_FUNCTION_GET_RPTR_OFFS', 'RIG_FUNCTION_GET_RPTR_SHIFT', 'RIG_FUNCTION_GET_SPLIT_FREQ', 'RIG_FUNCTION_GET_SPLIT_FREQ_MODE', 'RIG_FUNCTION_GET_SPLIT_VFO', 'RIG_FUNCTION_GET_TONE', 'RIG_FUNCTION_GET_TONE_SQL', 'RIG_FUNCTION_GET_TRN', 'RIG_FUNCTION_GET_TS', 'RIG_FUNCTION_GET_VFO', 'RIG_FUNCTION_GET_XIT', 'RIG_FUNCTION_INIT', 'RIG_FUNCTION_IS_ASYNC_FRAME', 'RIG_FUNCTION_MW2POWER', 'RIG_FUNCTION_OPEN', 'RIG_FUNCTION_POWER2MW', 'RIG_FUNCTION_PROCESS_ASYNC_FRAME', 'RIG_FUNCTION_READ_FRAME_DIRECT', 'RIG_FUNCTION_RESET', 'RIG_FUNCTION_SCAN', 'RIG_FUNCTION_SEND_DTMF', 'RIG_FUNCTION_SEND_MORSE', 'RIG_FUNCTION_SEND_VOICE_MEM', 'RIG_FUNCTION_SET_ANT', 'RIG_FUNCTION_SET_BANK', 'RIG_FUNCTION_SET_CHANNEL', 'RIG_FUNCTION_SET_CHAN_ALL_CB', 'RIG_FUNCTION_SET_CONF', 'RIG_FUNCTION_SET_CTCSS_SQL', 'RIG_FUNCTION_SET_CTCSS_TONE', 'RIG_FUNCTION_SET_DCS_CODE', 'RIG_FUNCTION_SET_DCS_SQL', 'RIG_FUNCTION_SET_EXT_FUNC', 'RIG_FUNCTION_SET_EXT_LEVEL', 'RIG_FUNCTION_SET_EXT_PARM', 'RIG_FUNCTION_SET_FREQ', 'RIG_FUNCTION_SET_FUNC', 'RIG_FUNCTION_SET_LEVEL', 'RIG_FUNCTION_SET_MEM', 'RIG_FUNCTION_SET_MEM_ALL_CB', 'RIG_FUNCTION_SET_MODE', 'RIG_FUNCTION_SET_PARM', 'RIG_FUNCTION_SET_POWERSTAT', 'RIG_FUNCTION_SET_PTT', 'RIG_FUNCTION_SET_RIT', 'RIG_FUNCTION_SET_RPTR_OFFS', 'RIG_FUNCTION_SET_RPTR_SHIFT', 'RIG_FUNCTION_SET_SPLIT_FREQ', 'RIG_FUNCTION_SET_SPLIT_FREQ_MODE', 'RIG_FUNCTION_SET_SPLIT_MODE', 'RIG_FUNCTION_SET_SPLIT_VFO', 'RIG_FUNCTION_SET_TONE', 'RIG_FUNCTION_SET_TONE_SQL', 'RIG_FUNCTION_SET_TRN', 'RIG_FUNCTION_SET_TS', 'RIG_FUNCTION_SET_VFO', 'RIG_FUNCTION_SET_VFO_OPT', 'RIG_FUNCTION_SET_XIT', 'RIG_FUNCTION_STOP_MORSE', 'RIG_FUNCTION_STOP_VOICE_MEM', 'RIG_FUNCTION_VFO_OP', 'RIG_FUNCTION_WAIT_MORSE', 'RIG_FUNC_ABM', 'RIG_FUNC_AFC', 'RIG_FUNC_AFLT', 'RIG_FUNC_AIP', 'RIG_FUNC_ANF', 'RIG_FUNC_ANL', 'RIG_FUNC_APF', 'RIG_FUNC_ARO', 'RIG_FUNC_BC', 'RIG_FUNC_BC2', 'RIG_FUNC_BIT49', 'RIG_FUNC_BIT50', 'RIG_FUNC_BIT51', 'RIG_FUNC_BIT52', 'RIG_FUNC_BIT53', 'RIG_FUNC_BIT54', 'RIG_FUNC_BIT55', 'RIG_FUNC_BIT56', 'RIG_FUNC_BIT57', 'RIG_FUNC_BIT58', 'RIG_FUNC_BIT59', 'RIG_FUNC_BIT60', 'RIG_FUNC_BIT61', 'RIG_FUNC_BIT62', 'RIG_FUNC_BIT63', 'RIG_FUNC_COMP', 'RIG_FUNC_CSQL', 'RIG_FUNC_DIVERSITY', 'RIG_FUNC_DSQL', 'RIG_FUNC_DUAL_WATCH', 'RIG_FUNC_FAGC', 'RIG_FUNC_FBKIN', 'RIG_FUNC_LOCK', 'RIG_FUNC_MBC', 'RIG_FUNC_MN', 'RIG_FUNC_MON', 'RIG_FUNC_MUTE', 'RIG_FUNC_NB', 'RIG_FUNC_NB2', 'RIG_FUNC_NONE', 'RIG_FUNC_NR', 'RIG_FUNC_OVF_STATUS', 'RIG_FUNC_RESUME', 'RIG_FUNC_REV', 'RIG_FUNC_RF', 'RIG_FUNC_RIT', 'RIG_FUNC_SATMODE', 'RIG_FUNC_SBKIN', 'RIG_FUNC_SCEN', 'RIG_FUNC_SCOPE', 'RIG_FUNC_SEND_MORSE', 'RIG_FUNC_SEND_VOICE_MEM', 'RIG_FUNC_SLICE', 'RIG_FUNC_SPECTRUM', 'RIG_FUNC_SPECTRUM_HOLD', 'RIG_FUNC_SQL', 'RIG_FUNC_SYNC', 'RIG_FUNC_TBURST', 'RIG_FUNC_TONE', 'RIG_FUNC_TRANSCEIVE', 'RIG_FUNC_TSQL', 'RIG_FUNC_TUNER', 'RIG_FUNC_VOX', 'RIG_FUNC_VSC', 'RIG_FUNC_XIT', 'RIG_HANDSHAKE_HARDWARE', 'RIG_HANDSHAKE_NONE', 'RIG_HANDSHAKE_XONXOFF', 'RIG_KEYERTYPE_BUG', 'RIG_KEYERTYPE_PADDLE', 'RIG_KEYERTYPE_STRAIGHT', 'RIG_KEYERTYPE_UNKNOWN', 'RIG_LEVEL_53', 'RIG_LEVEL_54', 'RIG_LEVEL_55', 'RIG_LEVEL_56', 'RIG_LEVEL_57', 'RIG_LEVEL_58', 'RIG_LEVEL_59', 'RIG_LEVEL_60', 'RIG_LEVEL_61', 'RIG_LEVEL_62', 'RIG_LEVEL_63', 'RIG_LEVEL_AF', 'RIG_LEVEL_AGC', 'RIG_LEVEL_AGC_TIME', 'RIG_LEVEL_ALC', 'RIG_LEVEL_ANTIVOX', 'RIG_LEVEL_APF', 'RIG_LEVEL_ATT', 'RIG_LEVEL_BALANCE', 'RIG_LEVEL_BAND_SELECT', 'RIG_LEVEL_BKINDL', 'RIG_LEVEL_BKIN_DLYMS', 'RIG_LEVEL_COMP', 'RIG_LEVEL_COMP_METER', 'RIG_LEVEL_CWPITCH', 'RIG_LEVEL_FLOAT_LIST', 'RIG_LEVEL_ID_METER', 'RIG_LEVEL_IF', 'RIG_LEVEL_KEYSPD', 'RIG_LEVEL_METER', 'RIG_LEVEL_MICGAIN', 'RIG_LEVEL_MONITOR_GAIN', 'RIG_LEVEL_NB', 'RIG_LEVEL_NONE', 'RIG_LEVEL_NOTCHF', 'RIG_LEVEL_NOTCHF_RAW', 'RIG_LEVEL_NR', 'RIG_LEVEL_PBT_IN', 'RIG_LEVEL_PBT_OUT', 'RIG_LEVEL_PREAMP', 'RIG_LEVEL_RAWSTR', 'RIG_LEVEL_READONLY_LIST', 'RIG_LEVEL_RF', 'RIG_LEVEL_RFPOWER', 'RIG_LEVEL_RFPOWER_METER', 'RIG_LEVEL_RFPOWER_METER_WATTS', 'RIG_LEVEL_SLOPE_HIGH', 'RIG_LEVEL_SLOPE_LOW', 'RIG_LEVEL_SPECTRUM_ATT', 'RIG_LEVEL_SPECTRUM_AVG', 'RIG_LEVEL_SPECTRUM_EDGE_HIGH', 'RIG_LEVEL_SPECTRUM_EDGE_LOW', 'RIG_LEVEL_SPECTRUM_MODE', 'RIG_LEVEL_SPECTRUM_REF', 'RIG_LEVEL_SPECTRUM_SPAN', 'RIG_LEVEL_SPECTRUM_SPEED', 'RIG_LEVEL_SQL', 'RIG_LEVEL_STRENGTH', 'RIG_LEVEL_SWR', 'RIG_LEVEL_TEMP_METER', 'RIG_LEVEL_USB_AF', 'RIG_LEVEL_USB_AF_INPUT', 'RIG_LEVEL_VD_METER', 'RIG_LEVEL_VOXDELAY', 'RIG_LEVEL_VOXGAIN', 'RIG_MEM_CAPS_ALL', 'RIG_METER_ALC', 'RIG_METER_COMP', 'RIG_METER_DB', 'RIG_METER_IC', 'RIG_METER_NONE', 'RIG_METER_PO', 'RIG_METER_SWR', 'RIG_METER_TEMP', 'RIG_METER_VDD', 'RIG_MODEL_505DSP', 'RIG_MODEL_ACLOG', 'RIG_MODEL_ADT_200A', 'RIG_MODEL_AR16', 'RIG_MODEL_AR2500', 'RIG_MODEL_AR2700', 'RIG_MODEL_AR3000', 'RIG_MODEL_AR3000A', 'RIG_MODEL_AR3030', 'RIG_MODEL_AR5000', 'RIG_MODEL_AR5000A', 'RIG_MODEL_AR7030', 'RIG_MODEL_AR7030P', 'RIG_MODEL_AR8000', 'RIG_MODEL_AR8200', 'RIG_MODEL_AR8600', 'RIG_MODEL_ARMSTRONG', 'RIG_MODEL_ATD578UVIII', 'RIG_MODEL_BARRETT_2050', 'RIG_MODEL_BARRETT_4050', 'RIG_MODEL_BARRETT_4100', 'RIG_MODEL_BARRETT_950', 'RIG_MODEL_BC235', 'RIG_MODEL_BC245', 'RIG_MODEL_BC250', 'RIG_MODEL_BC780', 'RIG_MODEL_BC785', 'RIG_MODEL_BC786', 'RIG_MODEL_BC895', 'RIG_MODEL_BC898', 'RIG_MODEL_BCD396T', 'RIG_MODEL_BCD996T', 'RIG_MODEL_BCT8', 'RIG_MODEL_CMH530', 'RIG_MODEL_CODAN_2110', 'RIG_MODEL_CODAN_ENVOY', 'RIG_MODEL_CODAN_NGT', 'RIG_MODEL_CTX10', 'RIG_MODEL_DDS60', 'RIG_MODEL_DELTAII', 'RIG_MODEL_DKR8', 'RIG_MODEL_DKR8A', 'RIG_MODEL_DKR8B', 'RIG_MODEL_DORJI_DRA818U', 'RIG_MODEL_DORJI_DRA818V', 'RIG_MODEL_DRT1', 'RIG_MODEL_DSP10', 'RIG_MODEL_DTTSP', 'RIG_MODEL_DTTSP_UDP', 'RIG_MODEL_DUMMY', 'RIG_MODEL_DUMMY_NOVFO', 'RIG_MODEL_DWT', 'RIG_MODEL_DX77', 'RIG_MODEL_DXSR8', 'RIG_MODEL_EB200', 'RIG_MODEL_EK070', 'RIG_MODEL_EK890', 'RIG_MODEL_EK891', 'RIG_MODEL_EK895', 'RIG_MODEL_EK89X', 'RIG_MODEL_EKD500', 'RIG_MODEL_ELAD_FDM_DUO', 'RIG_MODEL_ELEKTOR304', 'RIG_MODEL_ELEKTOR507', 'RIG_MODEL_ESM500', 'RIG_MODEL_ESMC', 'RIG_MODEL_F6K', 'RIG_MODEL_FASDR', 'RIG_MODEL_FIFISDR', 'RIG_MODEL_FLRIG', 'RIG_MODEL_FRG100', 'RIG_MODEL_FRG8800', 'RIG_MODEL_FRG9600', 'RIG_MODEL_FT100', 'RIG_MODEL_FT1000', 'RIG_MODEL_FT1000D', 'RIG_MODEL_FT1000MP', 'RIG_MODEL_FT1000MPMKV', 'RIG_MODEL_FT1000MPMKVFLD', 'RIG_MODEL_FT2000', 'RIG_MODEL_FT450', 'RIG_MODEL_FT450D', 'RIG_MODEL_FT575', 'RIG_MODEL_FT600', 'RIG_MODEL_FT650', 'RIG_MODEL_FT710', 'RIG_MODEL_FT736R', 'RIG_MODEL_FT747', 'RIG_MODEL_FT757', 'RIG_MODEL_FT757GXII', 'RIG_MODEL_FT767', 'RIG_MODEL_FT817', 'RIG_MODEL_FT818', 'RIG_MODEL_FT820', 'RIG_MODEL_FT840', 'RIG_MODEL_FT847', 'RIG_MODEL_FT847UNI', 'RIG_MODEL_FT857', 'RIG_MODEL_FT890', 'RIG_MODEL_FT891', 'RIG_MODEL_FT897', 'RIG_MODEL_FT897D', 'RIG_MODEL_FT900', 'RIG_MODEL_FT9000', 'RIG_MODEL_FT9000OLD', 'RIG_MODEL_FT920', 'RIG_MODEL_FT950', 'RIG_MODEL_FT980', 'RIG_MODEL_FT990', 'RIG_MODEL_FT990UNI', 'RIG_MODEL_FT991', 'RIG_MODEL_FTDX10', 'RIG_MODEL_FTDX101D', 'RIG_MODEL_FTDX101MP', 'RIG_MODEL_FTDX1200', 'RIG_MODEL_FTDX3000', 'RIG_MODEL_FTDX5000', 'RIG_MODEL_FUNCUBEDONGLE', 'RIG_MODEL_FUNCUBEDONGLEPLUS', 'RIG_MODEL_FX4', 'RIG_MODEL_G303', 'RIG_MODEL_G305', 'RIG_MODEL_G313', 'RIG_MODEL_G315', 'RIG_MODEL_G90', 'RIG_MODEL_GNURADIO', 'RIG_MODEL_GRAUDIO', 'RIG_MODEL_GRAUDIOIQ', 'RIG_MODEL_GS100', 'RIG_MODEL_HF1000', 'RIG_MODEL_HF1000A', 'RIG_MODEL_HF150', 'RIG_MODEL_HF225', 'RIG_MODEL_HF235', 'RIG_MODEL_HF250', 'RIG_MODEL_HIQSDR', 'RIG_MODEL_HPSDR', 'RIG_MODEL_IC1271', 'RIG_MODEL_IC1275', 'RIG_MODEL_IC271', 'RIG_MODEL_IC2730', 'RIG_MODEL_IC275', 'RIG_MODEL_IC375', 'RIG_MODEL_IC471', 'RIG_MODEL_IC475', 'RIG_MODEL_IC575', 'RIG_MODEL_IC7000', 'RIG_MODEL_IC703', 'RIG_MODEL_IC705', 'RIG_MODEL_IC706', 'RIG_MODEL_IC706MKII', 'RIG_MODEL_IC706MKIIG', 'RIG_MODEL_IC707', 'RIG_MODEL_IC7100', 'RIG_MODEL_IC718', 'RIG_MODEL_IC7200', 'RIG_MODEL_IC725', 'RIG_MODEL_IC726', 'RIG_MODEL_IC728', 'RIG_MODEL_IC729', 'RIG_MODEL_IC7300', 'RIG_MODEL_IC731', 'RIG_MODEL_IC735', 'RIG_MODEL_IC736', 'RIG_MODEL_IC737', 'RIG_MODEL_IC738', 'RIG_MODEL_IC7410', 'RIG_MODEL_IC746', 'RIG_MODEL_IC746PRO', 'RIG_MODEL_IC751', 'RIG_MODEL_IC751A', 'RIG_MODEL_IC756', 'RIG_MODEL_IC756PRO', 'RIG_MODEL_IC756PROII', 'RIG_MODEL_IC756PROIII', 'RIG_MODEL_IC7600', 'RIG_MODEL_IC761', 'RIG_MODEL_IC7610', 'RIG_MODEL_IC765', 'RIG_MODEL_IC7700', 'RIG_MODEL_IC775', 'RIG_MODEL_IC7760', 'RIG_MODEL_IC78', 'RIG_MODEL_IC7800', 'RIG_MODEL_IC781', 'RIG_MODEL_IC785x', 'RIG_MODEL_IC820', 'RIG_MODEL_IC821H', 'RIG_MODEL_IC905', 'RIG_MODEL_IC910', 'RIG_MODEL_IC9100', 'RIG_MODEL_IC92D', 'RIG_MODEL_IC970', 'RIG_MODEL_IC9700', 'RIG_MODEL_ICF8101', 'RIG_MODEL_ICID1', 'RIG_MODEL_ICR10', 'RIG_MODEL_ICR20', 'RIG_MODEL_ICR30', 'RIG_MODEL_ICR6', 'RIG_MODEL_ICR7000', 'RIG_MODEL_ICR71', 'RIG_MODEL_ICR7100', 'RIG_MODEL_ICR72', 'RIG_MODEL_ICR75', 'RIG_MODEL_ICR8500', 'RIG_MODEL_ICR8600', 'RIG_MODEL_ICR9000', 'RIG_MODEL_ICR9500', 'RIG_MODEL_ICRX7', 'RIG_MODEL_IC_M700PRO', 'RIG_MODEL_IC_M710', 'RIG_MODEL_IC_M802', 'RIG_MODEL_IC_M803', 'RIG_MODEL_ID31', 'RIG_MODEL_ID4100', 'RIG_MODEL_ID51', 'RIG_MODEL_ID5100', 'RIG_MODEL_JST145', 'RIG_MODEL_JST245', 'RIG_MODEL_K2', 'RIG_MODEL_K3', 'RIG_MODEL_K3S', 'RIG_MODEL_K4', 'RIG_MODEL_KX2', 'RIG_MODEL_KX3', 'RIG_MODEL_LAB599_TX500', 'RIG_MODEL_MALACHITE', 'RIG_MODEL_MC4020', 'RIG_MODEL_MCHFQRP', 'RIG_MODEL_MDS4710', 'RIG_MODEL_MDS9710', 'RIG_MODEL_MICOM2', 'RIG_MODEL_MICROTUNE_4702', 'RIG_MODEL_MICROTUNE_4707', 'RIG_MODEL_MICROTUNE_4937', 'RIG_MODEL_MINISCOUT', 'RIG_MODEL_MINIVNA', 'RIG_MODEL_NETRIGCTL', 'RIG_MODEL_NONE', 'RIG_MODEL_NRD345', 'RIG_MODEL_NRD525', 'RIG_MODEL_NRD535', 'RIG_MODEL_NRD545', 'RIG_MODEL_OMNIVI', 'RIG_MODEL_OMNIVIP', 'RIG_MODEL_OS456', 'RIG_MODEL_OS535', 'RIG_MODEL_PARAGON2', 'RIG_MODEL_PCR100', 'RIG_MODEL_PCR1000', 'RIG_MODEL_PCR1500', 'RIG_MODEL_PCR2500', 'RIG_MODEL_PERSEUS', 'RIG_MODEL_PMR171', 'RIG_MODEL_PMSDR', 'RIG_MODEL_POWERSDR', 'RIG_MODEL_PRM8060', 'RIG_MODEL_PRM8070', 'RIG_MODEL_PRO2052', 'RIG_MODEL_PT8000A', 'RIG_MODEL_Q900', 'RIG_MODEL_QRPLABS', 'RIG_MODEL_QRPLABS_QMX', 'RIG_MODEL_QUISK', 'RIG_MODEL_R5000', 'RIG_MODEL_RA3702', 'RIG_MODEL_RA3710', 'RIG_MODEL_RA3720', 'RIG_MODEL_RA3790', 'RIG_MODEL_RA6790', 'RIG_MODEL_RS2005', 'RIG_MODEL_RS2006', 'RIG_MODEL_RS2035', 'RIG_MODEL_RS2041', 'RIG_MODEL_RS2042', 'RIG_MODEL_RS64', 'RIG_MODEL_RSHFIQ', 'RIG_MODEL_RX320', 'RIG_MODEL_RX331', 'RIG_MODEL_RX340', 'RIG_MODEL_RX350', 'RIG_MODEL_SDR1000', 'RIG_MODEL_SDR1000RFE', 'RIG_MODEL_SDRCONSOLE', 'RIG_MODEL_SDRSHARP', 'RIG_MODEL_SDRUNO', 'RIG_MODEL_SDU5000', 'RIG_MODEL_SDU5500', 'RIG_MODEL_SI570AVRUSB', 'RIG_MODEL_SI570PEABERRY1', 'RIG_MODEL_SI570PEABERRY2', 'RIG_MODEL_SI570PICUSB', 'RIG_MODEL_SMARTSDR_A', 'RIG_MODEL_SMARTSDR_B', 'RIG_MODEL_SMARTSDR_C', 'RIG_MODEL_SMARTSDR_D', 'RIG_MODEL_SMARTSDR_E', 'RIG_MODEL_SMARTSDR_F', 'RIG_MODEL_SMARTSDR_G', 'RIG_MODEL_SMARTSDR_H', 'RIG_MODEL_SR2200', 'RIG_MODEL_TCI1X', 'RIG_MODEL_THD72A', 'RIG_MODEL_THD74', 'RIG_MODEL_THD7A', 'RIG_MODEL_THD7AG', 'RIG_MODEL_THETIS', 'RIG_MODEL_THF6A', 'RIG_MODEL_THF7E', 'RIG_MODEL_THG71', 'RIG_MODEL_TMD700', 'RIG_MODEL_TMD710', 'RIG_MODEL_TMV7', 'RIG_MODEL_TMV71', 'RIG_MODEL_TRANSFOX', 'RIG_MODEL_TRC80', 'RIG_MODEL_TRP7000', 'RIG_MODEL_TRP8000', 'RIG_MODEL_TRP8255', 'RIG_MODEL_TRP9000', 'RIG_MODEL_TRUSDX', 'RIG_MODEL_TRXMANAGER_RIG', 'RIG_MODEL_TS140S', 'RIG_MODEL_TS2000', 'RIG_MODEL_TS440', 'RIG_MODEL_TS450S', 'RIG_MODEL_TS480', 'RIG_MODEL_TS50', 'RIG_MODEL_TS570D', 'RIG_MODEL_TS570S', 'RIG_MODEL_TS590S', 'RIG_MODEL_TS590SG', 'RIG_MODEL_TS680S', 'RIG_MODEL_TS690S', 'RIG_MODEL_TS711', 'RIG_MODEL_TS790', 'RIG_MODEL_TS811', 'RIG_MODEL_TS850', 'RIG_MODEL_TS870S', 'RIG_MODEL_TS890S', 'RIG_MODEL_TS930', 'RIG_MODEL_TS940', 'RIG_MODEL_TS950S', 'RIG_MODEL_TS950SDX', 'RIG_MODEL_TS990S', 'RIG_MODEL_TT516', 'RIG_MODEL_TT526', 'RIG_MODEL_TT538', 'RIG_MODEL_TT550', 'RIG_MODEL_TT565', 'RIG_MODEL_TT585', 'RIG_MODEL_TT588', 'RIG_MODEL_TT599', 'RIG_MODEL_USRP', 'RIG_MODEL_USRP0', 'RIG_MODEL_USRP_G', 'RIG_MODEL_V4L', 'RIG_MODEL_V4L2', 'RIG_MODEL_VR5000', 'RIG_MODEL_VX1700', 'RIG_MODEL_WJ8711', 'RIG_MODEL_WJ8888', 'RIG_MODEL_WR1000', 'RIG_MODEL_WR1500', 'RIG_MODEL_WR1550', 'RIG_MODEL_WR3100', 'RIG_MODEL_WR3150', 'RIG_MODEL_WR3500', 'RIG_MODEL_WR3700', 'RIG_MODEL_X108G', 'RIG_MODEL_X5105', 'RIG_MODEL_X6100', 'RIG_MODEL_X6200', 'RIG_MODEL_XG3', 'RIG_MODEL_XK2100', 'RIG_MODEL_XK852', 'RIG_MODEL_XPLORER', 'RIG_MODE_ALL', 'RIG_MODE_AM', 'RIG_MODE_AMN', 'RIG_MODE_AMS', 'RIG_MODE_BIT46', 'RIG_MODE_BIT47', 'RIG_MODE_BIT48', 'RIG_MODE_BIT49', 'RIG_MODE_BIT50', 'RIG_MODE_BIT51', 'RIG_MODE_BIT52', 'RIG_MODE_BIT53', 'RIG_MODE_BIT54', 'RIG_MODE_BIT55', 'RIG_MODE_BIT56', 'RIG_MODE_BIT57', 'RIG_MODE_BIT58', 'RIG_MODE_BIT59', 'RIG_MODE_BIT60', 'RIG_MODE_BIT61', 'RIG_MODE_BIT62', 'RIG_MODE_C4FM', 'RIG_MODE_CW', 'RIG_MODE_CWN', 'RIG_MODE_CWR', 'RIG_MODE_DCR', 'RIG_MODE_DD', 'RIG_MODE_DPMR', 'RIG_MODE_DSB', 'RIG_MODE_DSTAR', 'RIG_MODE_ECSS', 'RIG_MODE_ECSSLSB', 'RIG_MODE_ECSSUSB', 'RIG_MODE_FAX', 'RIG_MODE_FM', 'RIG_MODE_FMN', 'RIG_MODE_IQ', 'RIG_MODE_ISBLSB', 'RIG_MODE_ISBUSB', 'RIG_MODE_LSB', 'RIG_MODE_LSBD1', 'RIG_MODE_LSBD2', 'RIG_MODE_LSBD3', 'RIG_MODE_NONE', 'RIG_MODE_NXDNVN', 'RIG_MODE_NXDN_N', 'RIG_MODE_P25', 'RIG_MODE_PKTAM', 'RIG_MODE_PKTFM', 'RIG_MODE_PKTFMN', 'RIG_MODE_PKTLSB', 'RIG_MODE_PKTSSB', 'RIG_MODE_PKTUSB', 'RIG_MODE_PSK', 'RIG_MODE_PSKR', 'RIG_MODE_RTTY', 'RIG_MODE_RTTYR', 'RIG_MODE_SAH', 'RIG_MODE_SAL', 'RIG_MODE_SAM', 'RIG_MODE_SPEC', 'RIG_MODE_SSB', 'RIG_MODE_TESTS_MAX', 'RIG_MODE_USB', 'RIG_MODE_USBD1', 'RIG_MODE_USBD2', 'RIG_MODE_USBD3', 'RIG_MODE_WFM', 'RIG_MTYPE_BAND', 'RIG_MTYPE_CALL', 'RIG_MTYPE_EDGE', 'RIG_MTYPE_MEM', 'RIG_MTYPE_MEMOPAD', 'RIG_MTYPE_MORSE', 'RIG_MTYPE_NONE', 'RIG_MTYPE_PRIO', 'RIG_MTYPE_SAT', 'RIG_MTYPE_SPLIT', 'RIG_MTYPE_VOICE', 'RIG_MULTICAST_POLL', 'RIG_MULTICAST_SPECTRUM', 'RIG_MULTICAST_TRANSCEIVE', 'RIG_OK', 'RIG_OP_BAND_DOWN', 'RIG_OP_BAND_UP', 'RIG_OP_CPY', 'RIG_OP_DOWN', 'RIG_OP_FROM_VFO', 'RIG_OP_LEFT', 'RIG_OP_MCL', 'RIG_OP_NONE', 'RIG_OP_RIGHT', 'RIG_OP_TOGGLE', 'RIG_OP_TO_VFO', 'RIG_OP_TUNE', 'RIG_OP_UP', 'RIG_OP_XCHG', 'RIG_PARITY_EVEN', 'RIG_PARITY_MARK', 'RIG_PARITY_NONE', 'RIG_PARITY_ODD', 'RIG_PARITY_SPACE', 'RIG_PARM_AFIF', 'RIG_PARM_AFIF_ACC', 'RIG_PARM_AFIF_LAN', 'RIG_PARM_AFIF_WLAN', 'RIG_PARM_ANN', 'RIG_PARM_APO', 'RIG_PARM_BACKLIGHT', 'RIG_PARM_BANDSELECT', 'RIG_PARM_BAT', 'RIG_PARM_BEEP', 'RIG_PARM_KEYERTYPE', 'RIG_PARM_KEYLIGHT', 'RIG_PARM_NONE', 'RIG_PARM_SCREENSAVER', 'RIG_PARM_TIME', 'RIG_PORT_CM108', 'RIG_PORT_DEVICE', 'RIG_PORT_DTMF', 'RIG_PORT_GPIO', 'RIG_PORT_GPION', 'RIG_PORT_NETWORK', 'RIG_PORT_NONE', 'RIG_PORT_PACKET', 'RIG_PORT_PARALLEL', 'RIG_PORT_RPC', 'RIG_PORT_SERIAL', 'RIG_PORT_UDP_NETWORK', 'RIG_PORT_ULTRA', 'RIG_PORT_USB', 'RIG_POWER_OFF', 'RIG_POWER_ON', 'RIG_POWER_OPERATE', 'RIG_POWER_STANDBY', 'RIG_POWER_UNKNOWN', 'RIG_PTRX_AMPPORT', 'RIG_PTRX_AMPSTATE', 'RIG_PTRX_CACHE', 'RIG_PTRX_DCDPORT', 'RIG_PTRX_MAXIMUM', 'RIG_PTRX_NONE', 'RIG_PTRX_PTTPORT', 'RIG_PTRX_RIGPORT', 'RIG_PTRX_ROTPORT', 'RIG_PTRX_ROTPORT2', 'RIG_PTRX_ROTSTATE', 'RIG_PTRX_STATE', 'RIG_PTT_CM108', 'RIG_PTT_GPIO', 'RIG_PTT_GPION', 'RIG_PTT_NONE', 'RIG_PTT_OFF', 'RIG_PTT_ON', 'RIG_PTT_ON_DATA', 'RIG_PTT_ON_MIC', 'RIG_PTT_PARALLEL', 'RIG_PTT_RIG', 'RIG_PTT_RIG_MICDATA', 'RIG_PTT_SERIAL_DTR', 'RIG_PTT_SERIAL_RTS', 'RIG_RESET_MASTER', 'RIG_RESET_MCALL', 'RIG_RESET_NONE', 'RIG_RESET_SOFT', 'RIG_RESET_VFO', 'RIG_RPT_SHIFT_MINUS', 'RIG_RPT_SHIFT_NONE', 'RIG_RPT_SHIFT_PLUS', 'RIG_SCAN_DELTA', 'RIG_SCAN_MEM', 'RIG_SCAN_NONE', 'RIG_SCAN_PLT', 'RIG_SCAN_PRIO', 'RIG_SCAN_PROG', 'RIG_SCAN_SLCT', 'RIG_SCAN_STOP', 'RIG_SCAN_VFO', 'RIG_SETTING_MAX', 'RIG_SIGNAL_OFF', 'RIG_SIGNAL_ON', 'RIG_SIGNAL_UNSET', 'RIG_SPECTRUM_MODE_CENTER', 'RIG_SPECTRUM_MODE_CENTER_SCROLL', 'RIG_SPECTRUM_MODE_FIXED', 'RIG_SPECTRUM_MODE_FIXED_SCROLL', 'RIG_SPECTRUM_MODE_NONE', 'RIG_SPLIT_OFF', 'RIG_SPLIT_ON', 'RIG_STATUS_ALPHA', 'RIG_STATUS_BETA', 'RIG_STATUS_BUGGY', 'RIG_STATUS_STABLE', 'RIG_STATUS_UNTESTED', 'RIG_TARGETABLE_ALL', 'RIG_TARGETABLE_ANT', 'RIG_TARGETABLE_BAND', 'RIG_TARGETABLE_BANK', 'RIG_TARGETABLE_COMMON', 'RIG_TARGETABLE_FREQ', 'RIG_TARGETABLE_FUNC', 'RIG_TARGETABLE_LEVEL', 'RIG_TARGETABLE_MEM', 'RIG_TARGETABLE_MODE', 'RIG_TARGETABLE_NONE', 'RIG_TARGETABLE_PTT', 'RIG_TARGETABLE_PURE', 'RIG_TARGETABLE_RITXIT', 'RIG_TARGETABLE_ROOFING', 'RIG_TARGETABLE_SPECTRUM', 'RIG_TARGETABLE_TONE', 'RIG_TRN_OFF', 'RIG_TRN_POLL', 'RIG_TRN_RIG', 'RIG_TS_ANY', 'RIG_TYPE_OTHER', 'RIG_VFO_A', 'RIG_VFO_ALL', 'RIG_VFO_B', 'RIG_VFO_C', 'RIG_VFO_CURR', 'RIG_VFO_MAIN', 'RIG_VFO_MAIN_A', 'RIG_VFO_MAIN_B', 'RIG_VFO_MAIN_C', 'RIG_VFO_MEM', 'RIG_VFO_NONE', 'RIG_VFO_OTHER', 'RIG_VFO_RX', 'RIG_VFO_SUB', 'RIG_VFO_SUB_A', 'RIG_VFO_SUB_B', 'RIG_VFO_SUB_C', 'RIG_VFO_TX', 'RIG_VFO_TX_FLAG', 'RIG_VFO_VFO', 'ROT_FLAG_AZIMUTH', 'ROT_FLAG_ELEVATION', 'ROT_FUNC_BIT63', 'ROT_FUNC_NONE', 'ROT_LEVEL_63', 'ROT_LEVEL_FLOAT_LIST', 'ROT_LEVEL_NONE', 'ROT_LEVEL_READONLY_LIST', 'ROT_LEVEL_SPEED', 'ROT_MODEL_ANDROIDSENSOR', 'ROT_MODEL_APEX_SHARED_LOOP', 'ROT_MODEL_ARRAYSOLUTIONS_SAL_12_20_30', 'ROT_MODEL_CNCTRK', 'ROT_MODEL_DCU', 'ROT_MODEL_DUMMY', 'ROT_MODEL_EASYCOMM1', 'ROT_MODEL_EASYCOMM2', 'ROT_MODEL_EASYCOMM3', 'ROT_MODEL_ERC', 'ROT_MODEL_ETHER6', 'ROT_MODEL_F1TETRACKER', 'ROT_MODEL_FLIR', 'ROT_MODEL_FODTRACK', 'ROT_MODEL_GRBLTRK_NET', 'ROT_MODEL_GRBLTRK_SER', 'ROT_MODEL_GS23', 'ROT_MODEL_GS232', 'ROT_MODEL_GS232A', 'ROT_MODEL_GS232A_AZ', 'ROT_MODEL_GS232A_EL', 'ROT_MODEL_GS232B', 'ROT_MODEL_GS232B_AZ', 'ROT_MODEL_GS232B_EL', 'ROT_MODEL_GS232_GENERIC', 'ROT_MODEL_AF6SA_WRC', 'ROT_MODEL_GS23_AZ', 'ROT_MODEL_HD1780', 'ROT_MODEL_IF100', 'ROT_MODEL_INDI', 'ROT_MODEL_IOPTRON', 'ROT_MODEL_LVB', 'ROT_MODEL_MEADE', 'ROT_MODEL_NETROTCTL', 'ROT_MODEL_NEXSTAR', 'ROT_MODEL_NONE', 'ROT_MODEL_PCROTOR', 'ROT_MODEL_PROSISTEL_COMBI_TRACK_AZEL', 'ROT_MODEL_PROSISTEL_D_AZ', 'ROT_MODEL_PROSISTEL_D_EL', 'ROT_MODEL_PROSISTEL_D_EL_CBOXAZ', 'ROT_MODEL_PSTROTATOR', 'ROT_MODEL_RADANT', 'ROT_MODEL_RC2800', 'ROT_MODEL_RC2800_EARLY_AZ', 'ROT_MODEL_RC2800_EARLY_AZEL', 'ROT_MODEL_RCI_AZ', 'ROT_MODEL_RCI_AZEL', 'ROT_MODEL_ROTORCARD', 'ROT_MODEL_ROTOREZ', 'ROT_MODEL_RT21', 'ROT_MODEL_SAEBRTRACK', 'ROT_MODEL_SARTEK1', 'ROT_MODEL_SATEL', 'ROT_MODEL_SATROTCTL', 'ROT_MODEL_SKYWATCHER', 'ROT_MODEL_SPID_MD01_ROT2PROG', 'ROT_MODEL_SPID_ROT1PROG', 'ROT_MODEL_SPID_ROT2PROG', 'ROT_MODEL_ST2', 'ROT_MODEL_TS7400', 'ROT_MODEL_YRC1', 'ROT_MOVE_CCW', 'ROT_MOVE_CW', 'ROT_MOVE_DOWN', 'ROT_MOVE_DOWN_CCW', 'ROT_MOVE_DOWN_CW', 'ROT_MOVE_DOWN_LEFT', 'ROT_MOVE_DOWN_RIGHT', 'ROT_MOVE_LEFT', 'ROT_MOVE_RIGHT', 'ROT_MOVE_UP', 'ROT_MOVE_UP_CCW', 'ROT_MOVE_UP_CW', 'ROT_MOVE_UP_LEFT', 'ROT_MOVE_UP_RIGHT', 'ROT_PARM_FLOAT_LIST', 'ROT_PARM_NONE', 'ROT_PARM_READONLY_LIST', 'ROT_RESET_ALL', 'ROT_SPEED_NOCHANGE', 'ROT_STATUS_BUSY', 'ROT_STATUS_LIMIT_DOWN', 'ROT_STATUS_LIMIT_LEFT', 'ROT_STATUS_LIMIT_RIGHT', 'ROT_STATUS_LIMIT_UP', 'ROT_STATUS_MOVING', 'ROT_STATUS_MOVING_AZ', 'ROT_STATUS_MOVING_DOWN', 'ROT_STATUS_MOVING_EL', 'ROT_STATUS_MOVING_LEFT', 'ROT_STATUS_MOVING_RIGHT', 'ROT_STATUS_MOVING_UP', 'ROT_STATUS_NONE', 'ROT_STATUS_OVERLAP_DOWN', 'ROT_STATUS_OVERLAP_LEFT', 'ROT_STATUS_OVERLAP_RIGHT', 'ROT_STATUS_OVERLAP_UP', 'ROT_TYPE_OTHER', 'TWIDDLE_OFF', 'TWIDDLE_ON', 'VFO_DUAL', 'cvar', 'hamlib_copyright', 'hamlib_version'] + expected_properties = ['AMP_FLAG_1', 'AMP_FLAG_2', 'AMP_LEVEL_FAULT', 'AMP_LEVEL_NH', 'AMP_LEVEL_NONE', 'AMP_LEVEL_PF', 'AMP_LEVEL_PWR', 'AMP_LEVEL_PWR_FWD', 'AMP_LEVEL_PWR_INPUT', 'AMP_LEVEL_PWR_PEAK', 'AMP_LEVEL_PWR_REFLECTED', 'AMP_LEVEL_SWR', 'AMP_MODEL_DUMMY', 'AMP_MODEL_ELECRAFT_KPA1500', 'AMP_MODEL_EXPERT_FA', 'AMP_MODEL_GEMINI_DX1200', 'AMP_MODEL_NETAMPCTL', 'AMP_MODEL_NONE', 'AMP_RESET_AMP', 'AMP_RESET_FAULT', 'AMP_RESET_MEM', 'AMP_TYPE_OTHER', 'BUILTINFUNC', 'CTCSS_LIST_SIZE', 'DCS_LIST_SIZE', 'DEBUGMSGSAVE_SIZE', 'GPIO1', 'GPIO2', 'GPIO3', 'GPIO4', 'HAMLIB_CACHE_ALL', 'HAMLIB_CACHE_ALWAYS', 'HAMLIB_CACHE_FREQ', 'HAMLIB_CACHE_MODE', 'HAMLIB_CACHE_PTT', 'HAMLIB_CACHE_SPLIT', 'HAMLIB_CACHE_VFO', 'HAMLIB_CACHE_WIDTH', 'HAMLIB_CHANLSTSIZ', 'HAMLIB_CHECK_RIG_CAPS', 'HAMLIB_COOKIE_SIZE', 'HAMLIB_ELAPSED_GET', 'HAMLIB_ELAPSED_INVALIDATE', 'HAMLIB_ELAPSED_SET', 'HAMLIB_FIFO_SIZE', 'HAMLIB_FILPATHLEN', 'HAMLIB_FLTLSTSIZ', 'HAMLIB_FRQRANGESIZ', 'HAMLIB_MAXCHANDESC', 'HAMLIB_MAXDBLSTSIZ', 'HAMLIB_MAX_AGC_LEVELS', 'HAMLIB_MAX_CAL_LENGTH', 'HAMLIB_MAX_MODES', 'HAMLIB_MAX_ROTORS', 'HAMLIB_MAX_RSCANS', 'HAMLIB_MAX_SNAPSHOT_PACKET_SIZE', 'HAMLIB_MAX_SPECTRUM_AVG_MODES', 'HAMLIB_MAX_SPECTRUM_DATA', 'HAMLIB_MAX_SPECTRUM_MODES', 'HAMLIB_MAX_SPECTRUM_SCOPES', 'HAMLIB_MAX_SPECTRUM_SPANS', 'HAMLIB_MAX_VFOS', 'HAMLIB_MAX_VFO_OPS', 'HAMLIB_RIGNAMSIZ', 'HAMLIB_RIGVERSIZ', 'HAMLIB_SECRET_LENGTH', 'HAMLIB_SETTINGS_FILE', 'HAMLIB_TSLSTSIZ', 'MAX_MODELS_PER_BACKEND', 'NETAMPCTL_RET', 'NETRIGCTL_RET', 'NETROTCTL_RET', 'RIG_AGC_AUTO', 'RIG_AGC_FAST', 'RIG_AGC_LAST', 'RIG_AGC_LONG', 'RIG_AGC_MEDIUM', 'RIG_AGC_NONE', 'RIG_AGC_OFF', 'RIG_AGC_ON', 'RIG_AGC_SLOW', 'RIG_AGC_SUPERFAST', 'RIG_AGC_USER', 'RIG_ANN_CW', 'RIG_ANN_ENG', 'RIG_ANN_FREQ', 'RIG_ANN_JAP', 'RIG_ANN_NONE', 'RIG_ANN_OFF', 'RIG_ANN_RXMODE', 'RIG_ANT_MAX', 'RIG_ANT_NONE', 'RIG_BANDSELECT_10M', 'RIG_BANDSELECT_12M', 'RIG_BANDSELECT_13CM', 'RIG_BANDSELECT_15M', 'RIG_BANDSELECT_160M', 'RIG_BANDSELECT_17M', 'RIG_BANDSELECT_1_25M', 'RIG_BANDSELECT_20M', 'RIG_BANDSELECT_2200M', 'RIG_BANDSELECT_23CM', 'RIG_BANDSELECT_2M', 'RIG_BANDSELECT_30M', 'RIG_BANDSELECT_33CM', 'RIG_BANDSELECT_3CM', 'RIG_BANDSELECT_40M', 'RIG_BANDSELECT_4M', 'RIG_BANDSELECT_5CM', 'RIG_BANDSELECT_600M', 'RIG_BANDSELECT_60M', 'RIG_BANDSELECT_6M', 'RIG_BANDSELECT_70CM', 'RIG_BANDSELECT_80M', 'RIG_BANDSELECT_9CM', 'RIG_BANDSELECT_AIR', 'RIG_BANDSELECT_GEN', 'RIG_BANDSELECT_MW', 'RIG_BANDSELECT_UNUSED', 'RIG_BANDSELECT_WFM', 'RIG_BAND_10M', 'RIG_BAND_12M', 'RIG_BAND_144MHZ', 'RIG_BAND_15M', 'RIG_BAND_160M', 'RIG_BAND_17M', 'RIG_BAND_20M', 'RIG_BAND_30M', 'RIG_BAND_40M', 'RIG_BAND_430MHZ', 'RIG_BAND_60M', 'RIG_BAND_6M', 'RIG_BAND_80M', 'RIG_BAND_AIR', 'RIG_BAND_GEN', 'RIG_BAND_MW', 'RIG_BAND_UNUSED', 'RIG_BUSBUSY', 'RIG_BUSERROR', 'RIG_CAPS_HAS_GET_LEVEL', 'RIG_CAPS_HAS_SET_LEVEL', 'RIG_CAPS_MFG_NAME_CPTR', 'RIG_CAPS_MODEL_NAME_CPTR', 'RIG_CAPS_PORT_TYPE', 'RIG_CAPS_PTT_TYPE', 'RIG_CAPS_RIG_MODEL', 'RIG_CAPS_STATUS_CPTR', 'RIG_CAPS_TARGETABLE_VFO', 'RIG_CAPS_VERSION_CPTR', 'RIG_CHFLAG_DATA', 'RIG_CHFLAG_NONE', 'RIG_CHFLAG_PSKIP', 'RIG_CHFLAG_SKIP', 'RIG_CLIENT_GPREDICT', 'RIG_CLIENT_UNKNOWN', 'RIG_CLIENT_WSJTX', 'RIG_COMM_STATUS_CONNECTING', 'RIG_COMM_STATUS_DISCONNECTED', 'RIG_COMM_STATUS_ERROR', 'RIG_COMM_STATUS_OK', 'RIG_COMM_STATUS_TERMINATED', 'RIG_COMM_STATUS_WARNING', 'RIG_CONF_BINARY', 'RIG_CONF_BUTTON', 'RIG_CONF_CHECKBUTTON', 'RIG_CONF_COMBO', 'RIG_CONF_END', 'RIG_CONF_INT', 'RIG_CONF_NUMERIC', 'RIG_CONF_STRING', 'RIG_COOKIE_GET', 'RIG_COOKIE_RELEASE', 'RIG_COOKIE_RENEW', 'RIG_DCD_CM108', 'RIG_DCD_GPIO', 'RIG_DCD_GPION', 'RIG_DCD_NONE', 'RIG_DCD_OFF', 'RIG_DCD_ON', 'RIG_DCD_PARALLEL', 'RIG_DCD_RIG', 'RIG_DCD_SERIAL_CAR', 'RIG_DCD_SERIAL_CTS', 'RIG_DCD_SERIAL_DSR', 'RIG_DEBUG_BUG', 'RIG_DEBUG_CACHE', 'RIG_DEBUG_ERR', 'RIG_DEBUG_NONE', 'RIG_DEBUG_TRACE', 'RIG_DEBUG_VERBOSE', 'RIG_DEBUG_WARN', 'RIG_EACCESS', 'RIG_EARG', 'RIG_ECONF', 'RIG_EDEPRECATED', 'RIG_EDOM', 'RIG_EEND', 'RIG_EINTERNAL', 'RIG_EINVAL', 'RIG_EIO', 'RIG_ELIMIT', 'RIG_ENAVAIL', 'RIG_ENIMPL', 'RIG_ENOMEM', 'RIG_ENTARGET', 'RIG_EPOWER', 'RIG_EPROTO', 'RIG_ERJCTED', 'RIG_ESECURITY', 'RIG_ETIMEOUT', 'RIG_ETRUNC', 'RIG_EVFO', 'RIG_FLAG_APRS', 'RIG_FLAG_COMPUTER', 'RIG_FLAG_DXCLUSTER', 'RIG_FLAG_HANDHELD', 'RIG_FLAG_MOBILE', 'RIG_FLAG_RECEIVER', 'RIG_FLAG_SCANNER', 'RIG_FLAG_TNC', 'RIG_FLAG_TRANSMITTER', 'RIG_FLAG_TRUNKING', 'RIG_FLAG_TUNER', 'RIG_FLT_ANY', 'RIG_FUNCTION_CLEANUP', 'RIG_FUNCTION_CLOSE', 'RIG_FUNCTION_DECODE_EVENT', 'RIG_FUNCTION_GET_ANT', 'RIG_FUNCTION_GET_CHANNEL', 'RIG_FUNCTION_GET_CHAN_ALL_CB', 'RIG_FUNCTION_GET_CONF', 'RIG_FUNCTION_GET_CONF2', 'RIG_FUNCTION_GET_CTCSS_SQL', 'RIG_FUNCTION_GET_CTCSS_TONE', 'RIG_FUNCTION_GET_DCD', 'RIG_FUNCTION_GET_DCS_CODE', 'RIG_FUNCTION_GET_DCS_SQL', 'RIG_FUNCTION_GET_EXT_FUNC', 'RIG_FUNCTION_GET_EXT_LEVEL', 'RIG_FUNCTION_GET_EXT_PARM', 'RIG_FUNCTION_GET_FREQ', 'RIG_FUNCTION_GET_FUNC', 'RIG_FUNCTION_GET_INFO', 'RIG_FUNCTION_GET_LEVEL', 'RIG_FUNCTION_GET_MEM', 'RIG_FUNCTION_GET_MEM_ALL_CB', 'RIG_FUNCTION_GET_MODE', 'RIG_FUNCTION_GET_PARM', 'RIG_FUNCTION_GET_POWERSTAT', 'RIG_FUNCTION_GET_PTT', 'RIG_FUNCTION_GET_RIT', 'RIG_FUNCTION_GET_RPTR_OFFS', 'RIG_FUNCTION_GET_RPTR_SHIFT', 'RIG_FUNCTION_GET_SPLIT_FREQ', 'RIG_FUNCTION_GET_SPLIT_FREQ_MODE', 'RIG_FUNCTION_GET_SPLIT_VFO', 'RIG_FUNCTION_GET_TONE', 'RIG_FUNCTION_GET_TONE_SQL', 'RIG_FUNCTION_GET_TRN', 'RIG_FUNCTION_GET_TS', 'RIG_FUNCTION_GET_VFO', 'RIG_FUNCTION_GET_XIT', 'RIG_FUNCTION_INIT', 'RIG_FUNCTION_IS_ASYNC_FRAME', 'RIG_FUNCTION_MW2POWER', 'RIG_FUNCTION_OPEN', 'RIG_FUNCTION_POWER2MW', 'RIG_FUNCTION_PROCESS_ASYNC_FRAME', 'RIG_FUNCTION_READ_FRAME_DIRECT', 'RIG_FUNCTION_RESET', 'RIG_FUNCTION_SCAN', 'RIG_FUNCTION_SEND_DTMF', 'RIG_FUNCTION_SEND_MORSE', 'RIG_FUNCTION_SEND_VOICE_MEM', 'RIG_FUNCTION_SET_ANT', 'RIG_FUNCTION_SET_BANK', 'RIG_FUNCTION_SET_CHANNEL', 'RIG_FUNCTION_SET_CHAN_ALL_CB', 'RIG_FUNCTION_SET_CONF', 'RIG_FUNCTION_SET_CTCSS_SQL', 'RIG_FUNCTION_SET_CTCSS_TONE', 'RIG_FUNCTION_SET_DCS_CODE', 'RIG_FUNCTION_SET_DCS_SQL', 'RIG_FUNCTION_SET_EXT_FUNC', 'RIG_FUNCTION_SET_EXT_LEVEL', 'RIG_FUNCTION_SET_EXT_PARM', 'RIG_FUNCTION_SET_FREQ', 'RIG_FUNCTION_SET_FUNC', 'RIG_FUNCTION_SET_LEVEL', 'RIG_FUNCTION_SET_MEM', 'RIG_FUNCTION_SET_MEM_ALL_CB', 'RIG_FUNCTION_SET_MODE', 'RIG_FUNCTION_SET_PARM', 'RIG_FUNCTION_SET_POWERSTAT', 'RIG_FUNCTION_SET_PTT', 'RIG_FUNCTION_SET_RIT', 'RIG_FUNCTION_SET_RPTR_OFFS', 'RIG_FUNCTION_SET_RPTR_SHIFT', 'RIG_FUNCTION_SET_SPLIT_FREQ', 'RIG_FUNCTION_SET_SPLIT_FREQ_MODE', 'RIG_FUNCTION_SET_SPLIT_MODE', 'RIG_FUNCTION_SET_SPLIT_VFO', 'RIG_FUNCTION_SET_TONE', 'RIG_FUNCTION_SET_TONE_SQL', 'RIG_FUNCTION_SET_TRN', 'RIG_FUNCTION_SET_TS', 'RIG_FUNCTION_SET_VFO', 'RIG_FUNCTION_SET_VFO_OPT', 'RIG_FUNCTION_SET_XIT', 'RIG_FUNCTION_STOP_MORSE', 'RIG_FUNCTION_STOP_VOICE_MEM', 'RIG_FUNCTION_VFO_OP', 'RIG_FUNCTION_WAIT_MORSE', 'RIG_FUNC_ABM', 'RIG_FUNC_AFC', 'RIG_FUNC_AFLT', 'RIG_FUNC_AIP', 'RIG_FUNC_ANF', 'RIG_FUNC_ANL', 'RIG_FUNC_APF', 'RIG_FUNC_ARO', 'RIG_FUNC_BC', 'RIG_FUNC_BC2', 'RIG_FUNC_BIT49', 'RIG_FUNC_BIT50', 'RIG_FUNC_BIT51', 'RIG_FUNC_BIT52', 'RIG_FUNC_BIT53', 'RIG_FUNC_BIT54', 'RIG_FUNC_BIT55', 'RIG_FUNC_BIT56', 'RIG_FUNC_BIT57', 'RIG_FUNC_BIT58', 'RIG_FUNC_BIT59', 'RIG_FUNC_BIT60', 'RIG_FUNC_BIT61', 'RIG_FUNC_BIT62', 'RIG_FUNC_BIT63', 'RIG_FUNC_COMP', 'RIG_FUNC_CSQL', 'RIG_FUNC_DIVERSITY', 'RIG_FUNC_DSQL', 'RIG_FUNC_DUAL_WATCH', 'RIG_FUNC_FAGC', 'RIG_FUNC_FBKIN', 'RIG_FUNC_LOCK', 'RIG_FUNC_MBC', 'RIG_FUNC_MN', 'RIG_FUNC_MON', 'RIG_FUNC_MUTE', 'RIG_FUNC_NB', 'RIG_FUNC_NB2', 'RIG_FUNC_NONE', 'RIG_FUNC_NR', 'RIG_FUNC_OVF_STATUS', 'RIG_FUNC_RESUME', 'RIG_FUNC_REV', 'RIG_FUNC_RF', 'RIG_FUNC_RIT', 'RIG_FUNC_SATMODE', 'RIG_FUNC_SBKIN', 'RIG_FUNC_SCEN', 'RIG_FUNC_SCOPE', 'RIG_FUNC_SEND_MORSE', 'RIG_FUNC_SEND_VOICE_MEM', 'RIG_FUNC_SLICE', 'RIG_FUNC_SPECTRUM', 'RIG_FUNC_SPECTRUM_HOLD', 'RIG_FUNC_SQL', 'RIG_FUNC_SYNC', 'RIG_FUNC_TBURST', 'RIG_FUNC_TONE', 'RIG_FUNC_TRANSCEIVE', 'RIG_FUNC_TSQL', 'RIG_FUNC_TUNER', 'RIG_FUNC_VOX', 'RIG_FUNC_VSC', 'RIG_FUNC_XIT', 'RIG_HANDSHAKE_HARDWARE', 'RIG_HANDSHAKE_NONE', 'RIG_HANDSHAKE_XONXOFF', 'RIG_KEYERTYPE_BUG', 'RIG_KEYERTYPE_PADDLE', 'RIG_KEYERTYPE_STRAIGHT', 'RIG_KEYERTYPE_UNKNOWN', 'RIG_LEVEL_53', 'RIG_LEVEL_54', 'RIG_LEVEL_55', 'RIG_LEVEL_56', 'RIG_LEVEL_57', 'RIG_LEVEL_58', 'RIG_LEVEL_59', 'RIG_LEVEL_60', 'RIG_LEVEL_61', 'RIG_LEVEL_62', 'RIG_LEVEL_63', 'RIG_LEVEL_AF', 'RIG_LEVEL_AGC', 'RIG_LEVEL_AGC_TIME', 'RIG_LEVEL_ALC', 'RIG_LEVEL_ANTIVOX', 'RIG_LEVEL_APF', 'RIG_LEVEL_ATT', 'RIG_LEVEL_BALANCE', 'RIG_LEVEL_BAND_SELECT', 'RIG_LEVEL_BKINDL', 'RIG_LEVEL_BKIN_DLYMS', 'RIG_LEVEL_COMP', 'RIG_LEVEL_COMP_METER', 'RIG_LEVEL_CWPITCH', 'RIG_LEVEL_FLOAT_LIST', 'RIG_LEVEL_ID_METER', 'RIG_LEVEL_IF', 'RIG_LEVEL_KEYSPD', 'RIG_LEVEL_METER', 'RIG_LEVEL_MICGAIN', 'RIG_LEVEL_MONITOR_GAIN', 'RIG_LEVEL_NB', 'RIG_LEVEL_NONE', 'RIG_LEVEL_NOTCHF', 'RIG_LEVEL_NOTCHF_RAW', 'RIG_LEVEL_NR', 'RIG_LEVEL_PBT_IN', 'RIG_LEVEL_PBT_OUT', 'RIG_LEVEL_PREAMP', 'RIG_LEVEL_RAWSTR', 'RIG_LEVEL_READONLY_LIST', 'RIG_LEVEL_RF', 'RIG_LEVEL_RFPOWER', 'RIG_LEVEL_RFPOWER_METER', 'RIG_LEVEL_RFPOWER_METER_WATTS', 'RIG_LEVEL_SLOPE_HIGH', 'RIG_LEVEL_SLOPE_LOW', 'RIG_LEVEL_SPECTRUM_ATT', 'RIG_LEVEL_SPECTRUM_AVG', 'RIG_LEVEL_SPECTRUM_EDGE_HIGH', 'RIG_LEVEL_SPECTRUM_EDGE_LOW', 'RIG_LEVEL_SPECTRUM_MODE', 'RIG_LEVEL_SPECTRUM_REF', 'RIG_LEVEL_SPECTRUM_SPAN', 'RIG_LEVEL_SPECTRUM_SPEED', 'RIG_LEVEL_SQL', 'RIG_LEVEL_STRENGTH', 'RIG_LEVEL_SWR', 'RIG_LEVEL_TEMP_METER', 'RIG_LEVEL_USB_AF', 'RIG_LEVEL_USB_AF_INPUT', 'RIG_LEVEL_VD_METER', 'RIG_LEVEL_VOXDELAY', 'RIG_LEVEL_VOXGAIN', 'RIG_MEM_CAPS_ALL', 'RIG_METER_ALC', 'RIG_METER_COMP', 'RIG_METER_DB', 'RIG_METER_IC', 'RIG_METER_NONE', 'RIG_METER_PO', 'RIG_METER_SWR', 'RIG_METER_TEMP', 'RIG_METER_VDD', 'RIG_MODEL_505DSP', 'RIG_MODEL_ACLOG', 'RIG_MODEL_ADT_200A', 'RIG_MODEL_AR16', 'RIG_MODEL_AR2500', 'RIG_MODEL_AR2700', 'RIG_MODEL_AR3000', 'RIG_MODEL_AR3000A', 'RIG_MODEL_AR3030', 'RIG_MODEL_AR5000', 'RIG_MODEL_AR5000A', 'RIG_MODEL_AR7030', 'RIG_MODEL_AR7030P', 'RIG_MODEL_AR8000', 'RIG_MODEL_AR8200', 'RIG_MODEL_AR8600', 'RIG_MODEL_ARMSTRONG', 'RIG_MODEL_ATD578UVIII', 'RIG_MODEL_BARRETT_2050', 'RIG_MODEL_BARRETT_4050', 'RIG_MODEL_BARRETT_4100', 'RIG_MODEL_BARRETT_950', 'RIG_MODEL_BC235', 'RIG_MODEL_BC245', 'RIG_MODEL_BC250', 'RIG_MODEL_BC780', 'RIG_MODEL_BC785', 'RIG_MODEL_BC786', 'RIG_MODEL_BC895', 'RIG_MODEL_BC898', 'RIG_MODEL_BCD396T', 'RIG_MODEL_BCD996T', 'RIG_MODEL_BCT8', 'RIG_MODEL_CMH530', 'RIG_MODEL_CODAN_2110', 'RIG_MODEL_CODAN_ENVOY', 'RIG_MODEL_CODAN_NGT', 'RIG_MODEL_CTX10', 'RIG_MODEL_DDS60', 'RIG_MODEL_DELTAII', 'RIG_MODEL_DKR8', 'RIG_MODEL_DKR8A', 'RIG_MODEL_DKR8B', 'RIG_MODEL_DORJI_DRA818U', 'RIG_MODEL_DORJI_DRA818V', 'RIG_MODEL_DRT1', 'RIG_MODEL_DSP10', 'RIG_MODEL_DTTSP', 'RIG_MODEL_DTTSP_UDP', 'RIG_MODEL_DUMMY', 'RIG_MODEL_DUMMY_NOVFO', 'RIG_MODEL_DWT', 'RIG_MODEL_DX77', 'RIG_MODEL_DXSR8', 'RIG_MODEL_EB200', 'RIG_MODEL_EK070', 'RIG_MODEL_EK890', 'RIG_MODEL_EK891', 'RIG_MODEL_EK895', 'RIG_MODEL_EK89X', 'RIG_MODEL_EKD500', 'RIG_MODEL_ELAD_FDM_DUO', 'RIG_MODEL_ELEKTOR304', 'RIG_MODEL_ELEKTOR507', 'RIG_MODEL_ESM500', 'RIG_MODEL_ESMC', 'RIG_MODEL_F6K', 'RIG_MODEL_FASDR', 'RIG_MODEL_FIFISDR', 'RIG_MODEL_FLRIG', 'RIG_MODEL_FRG100', 'RIG_MODEL_FRG8800', 'RIG_MODEL_FRG9600', 'RIG_MODEL_FT100', 'RIG_MODEL_FT1000', 'RIG_MODEL_FT1000D', 'RIG_MODEL_FT1000MP', 'RIG_MODEL_FT1000MPMKV', 'RIG_MODEL_FT1000MPMKVFLD', 'RIG_MODEL_FT2000', 'RIG_MODEL_FT450', 'RIG_MODEL_FT450D', 'RIG_MODEL_FT575', 'RIG_MODEL_FT600', 'RIG_MODEL_FT650', 'RIG_MODEL_FT710', 'RIG_MODEL_FT736R', 'RIG_MODEL_FT747', 'RIG_MODEL_FT757', 'RIG_MODEL_FT757GXII', 'RIG_MODEL_FT767', 'RIG_MODEL_FT817', 'RIG_MODEL_FT818', 'RIG_MODEL_FT820', 'RIG_MODEL_FT840', 'RIG_MODEL_FT847', 'RIG_MODEL_FT847UNI', 'RIG_MODEL_FT857', 'RIG_MODEL_FT890', 'RIG_MODEL_FT891', 'RIG_MODEL_FT897', 'RIG_MODEL_FT897D', 'RIG_MODEL_FT900', 'RIG_MODEL_FT9000', 'RIG_MODEL_FT9000OLD', 'RIG_MODEL_FT920', 'RIG_MODEL_FT950', 'RIG_MODEL_FT980', 'RIG_MODEL_FT990', 'RIG_MODEL_FT990UNI', 'RIG_MODEL_FT991', 'RIG_MODEL_FTDX10', 'RIG_MODEL_FTDX101D', 'RIG_MODEL_FTDX101MP', 'RIG_MODEL_FTDX1200', 'RIG_MODEL_FTDX3000', 'RIG_MODEL_FTDX5000', 'RIG_MODEL_FUNCUBEDONGLE', 'RIG_MODEL_FUNCUBEDONGLEPLUS', 'RIG_MODEL_FX4', 'RIG_MODEL_G303', 'RIG_MODEL_G305', 'RIG_MODEL_G313', 'RIG_MODEL_G315', 'RIG_MODEL_G90', 'RIG_MODEL_GNURADIO', 'RIG_MODEL_GRAUDIO', 'RIG_MODEL_GRAUDIOIQ', 'RIG_MODEL_GS100', 'RIG_MODEL_HF1000', 'RIG_MODEL_HF1000A', 'RIG_MODEL_HF150', 'RIG_MODEL_HF225', 'RIG_MODEL_HF235', 'RIG_MODEL_HF250', 'RIG_MODEL_HIQSDR', 'RIG_MODEL_HPSDR', 'RIG_MODEL_IC1271', 'RIG_MODEL_IC1275', 'RIG_MODEL_IC271', 'RIG_MODEL_IC2730', 'RIG_MODEL_IC275', 'RIG_MODEL_IC375', 'RIG_MODEL_IC471', 'RIG_MODEL_IC475', 'RIG_MODEL_IC575', 'RIG_MODEL_IC7000', 'RIG_MODEL_IC703', 'RIG_MODEL_IC705', 'RIG_MODEL_IC706', 'RIG_MODEL_IC706MKII', 'RIG_MODEL_IC706MKIIG', 'RIG_MODEL_IC707', 'RIG_MODEL_IC7100', 'RIG_MODEL_IC718', 'RIG_MODEL_IC7200', 'RIG_MODEL_IC725', 'RIG_MODEL_IC726', 'RIG_MODEL_IC728', 'RIG_MODEL_IC729', 'RIG_MODEL_IC7300', 'RIG_MODEL_IC731', 'RIG_MODEL_IC735', 'RIG_MODEL_IC736', 'RIG_MODEL_IC737', 'RIG_MODEL_IC738', 'RIG_MODEL_IC7410', 'RIG_MODEL_IC746', 'RIG_MODEL_IC746PRO', 'RIG_MODEL_IC751', 'RIG_MODEL_IC751A', 'RIG_MODEL_IC756', 'RIG_MODEL_IC756PRO', 'RIG_MODEL_IC756PROII', 'RIG_MODEL_IC756PROIII', 'RIG_MODEL_IC7600', 'RIG_MODEL_IC761', 'RIG_MODEL_IC7610', 'RIG_MODEL_IC765', 'RIG_MODEL_IC7700', 'RIG_MODEL_IC775', 'RIG_MODEL_IC7760', 'RIG_MODEL_IC78', 'RIG_MODEL_IC7800', 'RIG_MODEL_IC781', 'RIG_MODEL_IC785x', 'RIG_MODEL_IC820', 'RIG_MODEL_IC821H', 'RIG_MODEL_IC905', 'RIG_MODEL_IC910', 'RIG_MODEL_IC9100', 'RIG_MODEL_IC92D', 'RIG_MODEL_IC970', 'RIG_MODEL_IC9700', 'RIG_MODEL_ICF8101', 'RIG_MODEL_ICID1', 'RIG_MODEL_ICR10', 'RIG_MODEL_ICR20', 'RIG_MODEL_ICR30', 'RIG_MODEL_ICR6', 'RIG_MODEL_ICR7000', 'RIG_MODEL_ICR71', 'RIG_MODEL_ICR7100', 'RIG_MODEL_ICR72', 'RIG_MODEL_ICR75', 'RIG_MODEL_ICR8500', 'RIG_MODEL_ICR8600', 'RIG_MODEL_ICR9000', 'RIG_MODEL_ICR9500', 'RIG_MODEL_ICRX7', 'RIG_MODEL_IC_M700PRO', 'RIG_MODEL_IC_M710', 'RIG_MODEL_IC_M802', 'RIG_MODEL_IC_M803', 'RIG_MODEL_ID31', 'RIG_MODEL_ID4100', 'RIG_MODEL_ID51', 'RIG_MODEL_ID5100', 'RIG_MODEL_JST145', 'RIG_MODEL_JST245', 'RIG_MODEL_K2', 'RIG_MODEL_K3', 'RIG_MODEL_K3S', 'RIG_MODEL_K4', 'RIG_MODEL_KX2', 'RIG_MODEL_KX3', 'RIG_MODEL_LAB599_TX500', 'RIG_MODEL_MALACHITE', 'RIG_MODEL_MC4020', 'RIG_MODEL_MCHFQRP', 'RIG_MODEL_MDS4710', 'RIG_MODEL_MDS9710', 'RIG_MODEL_MICOM2', 'RIG_MODEL_MICROTUNE_4702', 'RIG_MODEL_MICROTUNE_4707', 'RIG_MODEL_MICROTUNE_4937', 'RIG_MODEL_MINISCOUT', 'RIG_MODEL_MINIVNA', 'RIG_MODEL_NETRIGCTL', 'RIG_MODEL_NONE', 'RIG_MODEL_NRD345', 'RIG_MODEL_NRD525', 'RIG_MODEL_NRD535', 'RIG_MODEL_NRD545', 'RIG_MODEL_OMNIVI', 'RIG_MODEL_OMNIVIP', 'RIG_MODEL_OS456', 'RIG_MODEL_OS535', 'RIG_MODEL_PARAGON2', 'RIG_MODEL_PCR100', 'RIG_MODEL_PCR1000', 'RIG_MODEL_PCR1500', 'RIG_MODEL_PCR2500', 'RIG_MODEL_PERSEUS', 'RIG_MODEL_PMR171', 'RIG_MODEL_PMSDR', 'RIG_MODEL_POWERSDR', 'RIG_MODEL_PRM8060', 'RIG_MODEL_PRM8070', 'RIG_MODEL_PRO2052', 'RIG_MODEL_PT8000A', 'RIG_MODEL_Q900', 'RIG_MODEL_QRPLABS', 'RIG_MODEL_QRPLABS_QMX', 'RIG_MODEL_QUISK', 'RIG_MODEL_R5000', 'RIG_MODEL_RA3702', 'RIG_MODEL_RA3710', 'RIG_MODEL_RA3720', 'RIG_MODEL_RA3790', 'RIG_MODEL_RA6790', 'RIG_MODEL_RS2005', 'RIG_MODEL_RS2006', 'RIG_MODEL_RS2035', 'RIG_MODEL_RS2041', 'RIG_MODEL_RS2042', 'RIG_MODEL_RS64', 'RIG_MODEL_RSHFIQ', 'RIG_MODEL_RX320', 'RIG_MODEL_RX331', 'RIG_MODEL_RX340', 'RIG_MODEL_RX350', 'RIG_MODEL_SDR1000', 'RIG_MODEL_SDR1000RFE', 'RIG_MODEL_SDRCONSOLE', 'RIG_MODEL_SDRSHARP', 'RIG_MODEL_SDRUNO', 'RIG_MODEL_SDU5000', 'RIG_MODEL_SDU5500', 'RIG_MODEL_SI570AVRUSB', 'RIG_MODEL_SI570PEABERRY1', 'RIG_MODEL_SI570PEABERRY2', 'RIG_MODEL_SI570PICUSB', 'RIG_MODEL_SMARTSDR_A', 'RIG_MODEL_SMARTSDR_B', 'RIG_MODEL_SMARTSDR_C', 'RIG_MODEL_SMARTSDR_D', 'RIG_MODEL_SMARTSDR_E', 'RIG_MODEL_SMARTSDR_F', 'RIG_MODEL_SMARTSDR_G', 'RIG_MODEL_SMARTSDR_H', 'RIG_MODEL_SR2200', 'RIG_MODEL_TCI1X', 'RIG_MODEL_THD72A', 'RIG_MODEL_THD74', 'RIG_MODEL_THD7A', 'RIG_MODEL_THD7AG', 'RIG_MODEL_THETIS', 'RIG_MODEL_THF6A', 'RIG_MODEL_THF7E', 'RIG_MODEL_THG71', 'RIG_MODEL_TMD700', 'RIG_MODEL_TMD710', 'RIG_MODEL_TMV7', 'RIG_MODEL_TMV71', 'RIG_MODEL_TRANSFOX', 'RIG_MODEL_TRC80', 'RIG_MODEL_TRP7000', 'RIG_MODEL_TRP8000', 'RIG_MODEL_TRP8255', 'RIG_MODEL_TRP9000', 'RIG_MODEL_TRUSDX', 'RIG_MODEL_TRXMANAGER_RIG', 'RIG_MODEL_TS140S', 'RIG_MODEL_TS2000', 'RIG_MODEL_TS440', 'RIG_MODEL_TS450S', 'RIG_MODEL_TS480', 'RIG_MODEL_TS50', 'RIG_MODEL_TS570D', 'RIG_MODEL_TS570S', 'RIG_MODEL_TS590S', 'RIG_MODEL_TS590SG', 'RIG_MODEL_TS680S', 'RIG_MODEL_TS690S', 'RIG_MODEL_TS711', 'RIG_MODEL_TS790', 'RIG_MODEL_TS811', 'RIG_MODEL_TS850', 'RIG_MODEL_TS870S', 'RIG_MODEL_TS890S', 'RIG_MODEL_TS930', 'RIG_MODEL_TS940', 'RIG_MODEL_TS950S', 'RIG_MODEL_TS950SDX', 'RIG_MODEL_TS990S', 'RIG_MODEL_TT516', 'RIG_MODEL_TT526', 'RIG_MODEL_TT538', 'RIG_MODEL_TT550', 'RIG_MODEL_TT565', 'RIG_MODEL_TT585', 'RIG_MODEL_TT588', 'RIG_MODEL_TT599', 'RIG_MODEL_USRP', 'RIG_MODEL_USRP0', 'RIG_MODEL_USRP_G', 'RIG_MODEL_V4L', 'RIG_MODEL_V4L2', 'RIG_MODEL_VR5000', 'RIG_MODEL_VX1700', 'RIG_MODEL_WJ8711', 'RIG_MODEL_WJ8888', 'RIG_MODEL_WR1000', 'RIG_MODEL_WR1500', 'RIG_MODEL_WR1550', 'RIG_MODEL_WR3100', 'RIG_MODEL_WR3150', 'RIG_MODEL_WR3500', 'RIG_MODEL_WR3700', 'RIG_MODEL_X108G', 'RIG_MODEL_X5105', 'RIG_MODEL_X6100', 'RIG_MODEL_X6200', 'RIG_MODEL_XG3', 'RIG_MODEL_XK2100', 'RIG_MODEL_XK852', 'RIG_MODEL_XPLORER', 'RIG_MODE_ALL', 'RIG_MODE_AM', 'RIG_MODE_AMN', 'RIG_MODE_AMS', 'RIG_MODE_BIT46', 'RIG_MODE_BIT47', 'RIG_MODE_BIT48', 'RIG_MODE_BIT49', 'RIG_MODE_BIT50', 'RIG_MODE_BIT51', 'RIG_MODE_BIT52', 'RIG_MODE_BIT53', 'RIG_MODE_BIT54', 'RIG_MODE_BIT55', 'RIG_MODE_BIT56', 'RIG_MODE_BIT57', 'RIG_MODE_BIT58', 'RIG_MODE_BIT59', 'RIG_MODE_BIT60', 'RIG_MODE_BIT61', 'RIG_MODE_BIT62', 'RIG_MODE_C4FM', 'RIG_MODE_CW', 'RIG_MODE_CWN', 'RIG_MODE_CWR', 'RIG_MODE_DCR', 'RIG_MODE_DD', 'RIG_MODE_DPMR', 'RIG_MODE_DSB', 'RIG_MODE_DSTAR', 'RIG_MODE_ECSS', 'RIG_MODE_ECSSLSB', 'RIG_MODE_ECSSUSB', 'RIG_MODE_FAX', 'RIG_MODE_FM', 'RIG_MODE_FMN', 'RIG_MODE_IQ', 'RIG_MODE_ISBLSB', 'RIG_MODE_ISBUSB', 'RIG_MODE_LSB', 'RIG_MODE_LSBD1', 'RIG_MODE_LSBD2', 'RIG_MODE_LSBD3', 'RIG_MODE_NONE', 'RIG_MODE_NXDNVN', 'RIG_MODE_NXDN_N', 'RIG_MODE_P25', 'RIG_MODE_PKTAM', 'RIG_MODE_PKTFM', 'RIG_MODE_PKTFMN', 'RIG_MODE_PKTLSB', 'RIG_MODE_PKTSSB', 'RIG_MODE_PKTUSB', 'RIG_MODE_PSK', 'RIG_MODE_PSKR', 'RIG_MODE_RTTY', 'RIG_MODE_RTTYR', 'RIG_MODE_SAH', 'RIG_MODE_SAL', 'RIG_MODE_SAM', 'RIG_MODE_SPEC', 'RIG_MODE_SSB', 'RIG_MODE_TESTS_MAX', 'RIG_MODE_USB', 'RIG_MODE_USBD1', 'RIG_MODE_USBD2', 'RIG_MODE_USBD3', 'RIG_MODE_WFM', 'RIG_MTYPE_BAND', 'RIG_MTYPE_CALL', 'RIG_MTYPE_EDGE', 'RIG_MTYPE_MEM', 'RIG_MTYPE_MEMOPAD', 'RIG_MTYPE_MORSE', 'RIG_MTYPE_NONE', 'RIG_MTYPE_PRIO', 'RIG_MTYPE_SAT', 'RIG_MTYPE_SPLIT', 'RIG_MTYPE_VOICE', 'RIG_MULTICAST_POLL', 'RIG_MULTICAST_SPECTRUM', 'RIG_MULTICAST_TRANSCEIVE', 'RIG_OK', 'RIG_OP_BAND_DOWN', 'RIG_OP_BAND_UP', 'RIG_OP_CPY', 'RIG_OP_DOWN', 'RIG_OP_FROM_VFO', 'RIG_OP_LEFT', 'RIG_OP_MCL', 'RIG_OP_NONE', 'RIG_OP_RIGHT', 'RIG_OP_TOGGLE', 'RIG_OP_TO_VFO', 'RIG_OP_TUNE', 'RIG_OP_UP', 'RIG_OP_XCHG', 'RIG_PARITY_EVEN', 'RIG_PARITY_MARK', 'RIG_PARITY_NONE', 'RIG_PARITY_ODD', 'RIG_PARITY_SPACE', 'RIG_PARM_AFIF', 'RIG_PARM_AFIF_ACC', 'RIG_PARM_AFIF_LAN', 'RIG_PARM_AFIF_WLAN', 'RIG_PARM_ANN', 'RIG_PARM_APO', 'RIG_PARM_BACKLIGHT', 'RIG_PARM_BANDSELECT', 'RIG_PARM_BAT', 'RIG_PARM_BEEP', 'RIG_PARM_KEYERTYPE', 'RIG_PARM_KEYLIGHT', 'RIG_PARM_NONE', 'RIG_PARM_SCREENSAVER', 'RIG_PARM_TIME', 'RIG_PORT_CM108', 'RIG_PORT_DEVICE', 'RIG_PORT_DTMF', 'RIG_PORT_GPIO', 'RIG_PORT_GPION', 'RIG_PORT_NETWORK', 'RIG_PORT_NONE', 'RIG_PORT_PACKET', 'RIG_PORT_PARALLEL', 'RIG_PORT_RPC', 'RIG_PORT_SERIAL', 'RIG_PORT_UDP_NETWORK', 'RIG_PORT_ULTRA', 'RIG_PORT_USB', 'RIG_POWER_OFF', 'RIG_POWER_ON', 'RIG_POWER_OPERATE', 'RIG_POWER_STANDBY', 'RIG_POWER_UNKNOWN', 'RIG_PTRX_AMPPORT', 'RIG_PTRX_AMPSTATE', 'RIG_PTRX_CACHE', 'RIG_PTRX_DCDPORT', 'RIG_PTRX_MAXIMUM', 'RIG_PTRX_NONE', 'RIG_PTRX_PTTPORT', 'RIG_PTRX_RIGPORT', 'RIG_PTRX_ROTPORT', 'RIG_PTRX_ROTPORT2', 'RIG_PTRX_ROTSTATE', 'RIG_PTRX_STATE', 'RIG_PTT_CM108', 'RIG_PTT_GPIO', 'RIG_PTT_GPION', 'RIG_PTT_NONE', 'RIG_PTT_OFF', 'RIG_PTT_ON', 'RIG_PTT_ON_DATA', 'RIG_PTT_ON_MIC', 'RIG_PTT_PARALLEL', 'RIG_PTT_RIG', 'RIG_PTT_RIG_MICDATA', 'RIG_PTT_SERIAL_DTR', 'RIG_PTT_SERIAL_RTS', 'RIG_RESET_MASTER', 'RIG_RESET_MCALL', 'RIG_RESET_NONE', 'RIG_RESET_SOFT', 'RIG_RESET_VFO', 'RIG_RPT_SHIFT_MINUS', 'RIG_RPT_SHIFT_NONE', 'RIG_RPT_SHIFT_PLUS', 'RIG_SCAN_DELTA', 'RIG_SCAN_MEM', 'RIG_SCAN_NONE', 'RIG_SCAN_PLT', 'RIG_SCAN_PRIO', 'RIG_SCAN_PROG', 'RIG_SCAN_SLCT', 'RIG_SCAN_STOP', 'RIG_SCAN_VFO', 'RIG_SETTING_MAX', 'RIG_SIGNAL_OFF', 'RIG_SIGNAL_ON', 'RIG_SIGNAL_UNSET', 'RIG_SPECTRUM_MODE_CENTER', 'RIG_SPECTRUM_MODE_CENTER_SCROLL', 'RIG_SPECTRUM_MODE_FIXED', 'RIG_SPECTRUM_MODE_FIXED_SCROLL', 'RIG_SPECTRUM_MODE_NONE', 'RIG_SPLIT_OFF', 'RIG_SPLIT_ON', 'RIG_STATUS_ALPHA', 'RIG_STATUS_BETA', 'RIG_STATUS_BUGGY', 'RIG_STATUS_STABLE', 'RIG_STATUS_UNTESTED', 'RIG_TARGETABLE_ALL', 'RIG_TARGETABLE_ANT', 'RIG_TARGETABLE_BAND', 'RIG_TARGETABLE_BANK', 'RIG_TARGETABLE_COMMON', 'RIG_TARGETABLE_FREQ', 'RIG_TARGETABLE_FUNC', 'RIG_TARGETABLE_LEVEL', 'RIG_TARGETABLE_MEM', 'RIG_TARGETABLE_MODE', 'RIG_TARGETABLE_NONE', 'RIG_TARGETABLE_PTT', 'RIG_TARGETABLE_PURE', 'RIG_TARGETABLE_RITXIT', 'RIG_TARGETABLE_ROOFING', 'RIG_TARGETABLE_SPECTRUM', 'RIG_TARGETABLE_TONE', 'RIG_TRN_OFF', 'RIG_TRN_POLL', 'RIG_TRN_RIG', 'RIG_TS_ANY', 'RIG_TYPE_OTHER', 'RIG_VFO_A', 'RIG_VFO_ALL', 'RIG_VFO_B', 'RIG_VFO_C', 'RIG_VFO_CURR', 'RIG_VFO_MAIN', 'RIG_VFO_MAIN_A', 'RIG_VFO_MAIN_B', 'RIG_VFO_MAIN_C', 'RIG_VFO_MEM', 'RIG_VFO_NONE', 'RIG_VFO_OTHER', 'RIG_VFO_RX', 'RIG_VFO_SUB', 'RIG_VFO_SUB_A', 'RIG_VFO_SUB_B', 'RIG_VFO_SUB_C', 'RIG_VFO_TX', 'RIG_VFO_TX_FLAG', 'RIG_VFO_VFO', 'ROT_FLAG_AZIMUTH', 'ROT_FLAG_ELEVATION', 'ROT_FUNC_BIT63', 'ROT_FUNC_NONE', 'ROT_LEVEL_63', 'ROT_LEVEL_FLOAT_LIST', 'ROT_LEVEL_NONE', 'ROT_LEVEL_READONLY_LIST', 'ROT_LEVEL_SPEED', 'ROT_MODEL_AF6SA_WRC', 'ROT_MODEL_ANDROIDSENSOR', 'ROT_MODEL_APEX_SHARED_LOOP', 'ROT_MODEL_ARRAYSOLUTIONS_SAL_12_20_30', 'ROT_MODEL_CNCTRK', 'ROT_MODEL_DCU', 'ROT_MODEL_DUMMY', 'ROT_MODEL_EASYCOMM1', 'ROT_MODEL_EASYCOMM2', 'ROT_MODEL_EASYCOMM3', 'ROT_MODEL_ERC', 'ROT_MODEL_ETHER6', 'ROT_MODEL_F1TETRACKER', 'ROT_MODEL_FLIR', 'ROT_MODEL_FODTRACK', 'ROT_MODEL_GRBLTRK_NET', 'ROT_MODEL_GRBLTRK_SER', 'ROT_MODEL_GS23', 'ROT_MODEL_GS232', 'ROT_MODEL_GS232A', 'ROT_MODEL_GS232A_AZ', 'ROT_MODEL_GS232A_EL', 'ROT_MODEL_GS232B', 'ROT_MODEL_GS232B_AZ', 'ROT_MODEL_GS232B_EL', 'ROT_MODEL_GS232_GENERIC', 'ROT_MODEL_GS23_AZ', 'ROT_MODEL_HD1780', 'ROT_MODEL_IF100', 'ROT_MODEL_INDI', 'ROT_MODEL_IOPTRON', 'ROT_MODEL_LVB', 'ROT_MODEL_MEADE', 'ROT_MODEL_NETROTCTL', 'ROT_MODEL_NEXSTAR', 'ROT_MODEL_NONE', 'ROT_MODEL_PCROTOR', 'ROT_MODEL_PROSISTEL_COMBI_TRACK_AZEL', 'ROT_MODEL_PROSISTEL_D_AZ', 'ROT_MODEL_PROSISTEL_D_EL', 'ROT_MODEL_PROSISTEL_D_EL_CBOXAZ', 'ROT_MODEL_PSTROTATOR', 'ROT_MODEL_RADANT', 'ROT_MODEL_RC2800', 'ROT_MODEL_RC2800_EARLY_AZ', 'ROT_MODEL_RC2800_EARLY_AZEL', 'ROT_MODEL_RCI_AZ', 'ROT_MODEL_RCI_AZEL', 'ROT_MODEL_ROTORCARD', 'ROT_MODEL_ROTOREZ', 'ROT_MODEL_RT21', 'ROT_MODEL_SAEBRTRACK', 'ROT_MODEL_SARTEK1', 'ROT_MODEL_SATEL', 'ROT_MODEL_SATROTCTL', 'ROT_MODEL_SKYWATCHER', 'ROT_MODEL_SPID_MD01_ROT2PROG', 'ROT_MODEL_SPID_ROT1PROG', 'ROT_MODEL_SPID_ROT2PROG', 'ROT_MODEL_ST2', 'ROT_MODEL_TS7400', 'ROT_MODEL_YRC1', 'ROT_MOVE_CCW', 'ROT_MOVE_CW', 'ROT_MOVE_DOWN', 'ROT_MOVE_DOWN_CCW', 'ROT_MOVE_DOWN_CW', 'ROT_MOVE_DOWN_LEFT', 'ROT_MOVE_DOWN_RIGHT', 'ROT_MOVE_LEFT', 'ROT_MOVE_RIGHT', 'ROT_MOVE_UP', 'ROT_MOVE_UP_CCW', 'ROT_MOVE_UP_CW', 'ROT_MOVE_UP_LEFT', 'ROT_MOVE_UP_RIGHT', 'ROT_PARM_FLOAT_LIST', 'ROT_PARM_NONE', 'ROT_PARM_READONLY_LIST', 'ROT_RESET_ALL', 'ROT_SPEED_NOCHANGE', 'ROT_STATUS_BUSY', 'ROT_STATUS_LIMIT_DOWN', 'ROT_STATUS_LIMIT_LEFT', 'ROT_STATUS_LIMIT_RIGHT', 'ROT_STATUS_LIMIT_UP', 'ROT_STATUS_MOVING', 'ROT_STATUS_MOVING_AZ', 'ROT_STATUS_MOVING_DOWN', 'ROT_STATUS_MOVING_EL', 'ROT_STATUS_MOVING_LEFT', 'ROT_STATUS_MOVING_RIGHT', 'ROT_STATUS_MOVING_UP', 'ROT_STATUS_NONE', 'ROT_STATUS_OVERLAP_DOWN', 'ROT_STATUS_OVERLAP_LEFT', 'ROT_STATUS_OVERLAP_RIGHT', 'ROT_STATUS_OVERLAP_UP', 'ROT_TYPE_OTHER', 'TWIDDLE_OFF', 'TWIDDLE_ON', 'VFO_DUAL', 'cvar', 'hamlib_copyright', 'hamlib_version'] assert expected_properties == self.actual_properties @classmethod