diff --git a/hamlib/amplifier.h b/hamlib/amplifier.h index 8a0b076..3647aee 100644 --- a/hamlib/amplifier.h +++ b/hamlib/amplifier.h @@ -18,6 +18,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ #ifndef _AMPLIFIER_H #define _AMPLIFIER_H 1 @@ -232,9 +233,9 @@ struct amp_caps int (*set_freq)(AMP *amp, freq_t val); /*!< Pointer to backend implementation of ::amp_set_freq(). */ int (*get_freq)(AMP *amp, freq_t *val); /*!< Pointer to backend implementation of ::amp_get_freq(). */ - int (*set_conf)(AMP *amp, token_t token, const char *val); /*!< Pointer to backend implementation of ::amp_set_conf(). */ - int (*get_conf2)(AMP *amp, token_t token, char *val, int val_len); /*!< Pointer to backend implementation of ::amp_get_conf(). */ - int (*get_conf)(AMP *amp, token_t token, char *val); /*!< Pointer to backend implementation of ::amp_get_conf(). */ + int (*set_conf)(AMP *amp, hamlib_token_t token, const char *val); /*!< Pointer to backend implementation of ::amp_set_conf(). */ + int (*get_conf2)(AMP *amp, hamlib_token_t token, char *val, int val_len); /*!< Pointer to backend implementation of ::amp_get_conf(). */ + int (*get_conf)(AMP *amp, hamlib_token_t token, char *val); /*!< Pointer to backend implementation of ::amp_get_conf(). */ /* * General API commands, from most primitive to least.. :() @@ -244,8 +245,8 @@ struct amp_caps int (*reset)(AMP *amp, amp_reset_t reset); /*!< Pointer to backend implementation of ::amp_reset(). */ int (*get_level)(AMP *amp, setting_t level, value_t *val); /*!< Pointer to backend implementation of ::amp_get_level(). */ int (*set_level)(AMP *amp, setting_t level, value_t val); /*!< Pointer to backend implementation of ::amp_get_level(). */ - int (*get_ext_level)(AMP *amp, token_t level, value_t *val); /*!< Pointer to backend implementation of ::amp_get_ext_level(). */ - int (*set_ext_level)(AMP *amp, token_t level, value_t val); /*!< Pointer to backend implementation of ::amp_set_ext_level(). */ + int (*get_ext_level)(AMP *amp, hamlib_token_t level, value_t *val); /*!< Pointer to backend implementation of ::amp_get_ext_level(). */ + int (*set_ext_level)(AMP *amp, hamlib_token_t level, value_t val); /*!< Pointer to backend implementation of ::amp_set_ext_level(). */ int (*set_powerstat)(AMP *amp, powerstat_t status); /*!< Pointer to backend implementation of ::amp_set_powerstat(). */ int (*get_powerstat)(AMP *amp, powerstat_t *status); /*!< Pointer to backend implementation of ::amp_get_powerstat(). */ @@ -335,11 +336,11 @@ amp_cleanup HAMLIB_PARAMS((AMP *amp)); extern HAMLIB_EXPORT(int) amp_set_conf HAMLIB_PARAMS((AMP *amp, - token_t token, + hamlib_token_t token, const char *val)); extern HAMLIB_EXPORT(int) amp_get_conf HAMLIB_PARAMS((AMP *amp, - token_t token, + hamlib_token_t token, char *val)); extern HAMLIB_EXPORT(int) amp_set_powerstat HAMLIB_PARAMS((AMP *amp, @@ -407,7 +408,7 @@ extern HAMLIB_EXPORT(const struct confparams *) amp_confparam_lookup HAMLIB_PARAMS((AMP *amp, const char *name)); -extern HAMLIB_EXPORT(token_t) +extern HAMLIB_EXPORT(hamlib_token_t) amp_token_lookup HAMLIB_PARAMS((AMP *amp, const char *name)); @@ -428,12 +429,12 @@ amp_ext_lookup HAMLIB_PARAMS((AMP *amp, extern HAMLIB_EXPORT(int) amp_get_ext_level HAMLIB_PARAMS((AMP *amp, - token_t token, + hamlib_token_t token, value_t *val)); extern HAMLIB_EXPORT(int) amp_set_ext_level HAMLIB_PARAMS((AMP *amp, - token_t token, + hamlib_token_t token, value_t val)); extern HAMLIB_EXPORT(const char *) amp_strlevel(setting_t); @@ -445,6 +446,8 @@ rig_ext_lookup HAMLIB_PARAMS((RIG *rig, extern HAMLIB_EXPORT(setting_t) amp_parse_level(const char *s); extern HAMLIB_EXPORT(const char *) amp_strlevel(setting_t); +extern HAMLIB_EXPORT(void *) amp_data_pointer(AMP *amp, rig_ptrx_t idx); + //! @endcond diff --git a/hamlib/amplist.h b/hamlib/amplist.h index db6d4b5..fd4581a 100644 --- a/hamlib/amplist.h +++ b/hamlib/amplist.h @@ -106,10 +106,15 @@ //! @endcond #define AMP_MODEL_ELECRAFT_KPA1500 AMP_MAKE_MODEL(AMP_ELECRAFT, 1) //#define AMP_MODEL_ELECRAFT_KPA500 AMP_MAKE_MODEL(AMP_ELECRAFT, 2) + #define AMP_GEMINI 3 #define AMP_BACKEND_GEMINI "gemini" #define AMP_MODEL_GEMINI_DX1200 AMP_MAKE_MODEL(AMP_GEMINI, 1) +#define AMP_EXPERT 4 +#define AMP_BACKEND_EXPERT "expert" +#define AMP_MODEL_EXPERT_FA AMP_MAKE_MODEL(AMP_EXPERT, 1) + /** * \brief Convenience type definition for an amplifier model. diff --git a/hamlib/config.h b/hamlib/config.h index 2e2237e..fb25a20 100644 --- a/hamlib/config.h +++ b/hamlib/config.h @@ -10,6 +10,15 @@ /* Frontend ABI version */ #define ABI_VERSION 4 +/* Frontend Major version */ +#define ABI_VERSION_MAJOR 4 + +/* Frontend Minor version */ +#define ABI_VERSION_MINOR 6 + +/* Frontend Patch version */ +#define ABI_VERSION_PATCH 0 + /* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP systems. This function is required for `alloca.c' support on those systems. */ @@ -367,7 +376,7 @@ #define PACKAGE_NAME "Hamlib" /* Define to the full name and version of this package. */ -#define PACKAGE_STRING "Hamlib 4.5.5" +#define PACKAGE_STRING "Hamlib 4.6~git" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "hamlib" @@ -376,7 +385,7 @@ #define PACKAGE_URL "http://www.hamlib.org" /* Define to the version of this package. */ -#define PACKAGE_VERSION "4.5.5" +#define PACKAGE_VERSION "4.6~git" /* Define to necessary symbol if this constant uses a non-standard name on your system. */ @@ -416,7 +425,7 @@ /* Version number of package */ -#define VERSION "4.5.5" +#define VERSION "4.6~git" /* Define to 1 if on MINIX. */ /* #undef _MINIX */ diff --git a/hamlib/libhamlib.dll.a b/hamlib/libhamlib.dll.a index 7ad64d0..2814f40 100644 Binary files a/hamlib/libhamlib.dll.a and b/hamlib/libhamlib.dll.a differ diff --git a/hamlib/multicast.h b/hamlib/multicast.h new file mode 100644 index 0000000..619d598 --- /dev/null +++ b/hamlib/multicast.h @@ -0,0 +1,45 @@ +//include +//#include +//#include +//#include +//#include +#include +//#include +#ifdef HAVE_NETINET_IN_H +#include +#endif +#ifdef _WIN32 +#include +#include +#endif + +#ifdef HAVE_ARPA_INET_H +#include +#endif + +#ifndef MULTICAST_H +#define MULTICAST_H + +struct multicast_vfo +{ + char *name; + double freq; + char *mode; + int width; + int widthLower; + int widthUpper; + unsigned char rx; // true if in rx mode + unsigned char tx; // true in in tx mode +}; + +struct multicast_broadcast +{ + char *ID; + struct multicast_vfo **vfo; +}; + +// returns # of bytes sent +extern HAMLIB_EXPORT (int) multicast_init(RIG *rig, char *addr, int port); +extern HAMLIB_EXPORT (int) multicast_send(RIG *rig, const char *msg, int msglen); +extern HAMLIB_EXPORT (int) multicast_stop(RIG *rig); +#endif //MULTICAST_H diff --git a/hamlib/rig.h b/hamlib/rig.h index 5d59e2e..a99a157 100644 --- a/hamlib/rig.h +++ b/hamlib/rig.h @@ -19,25 +19,46 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ - +/* SPDX-License-Identifier: LGPL-2.1-or-later */ #ifndef _RIG_H #define _RIG_H 1 +// as of 2023-11-23 rig_caps is no longer constant +// this #define allows clients to test which declaration to use for backwards compatibility +#define RIGCAPS_NOT_CONST 1 + #define BUILTINFUNC 0 // Our shared secret password #define HAMLIB_SECRET_LENGTH 32 -#define HAMLIB_TRACE rig_debug(RIG_DEBUG_TRACE,"%s(%d) trace\n", __FILE__, __LINE__) +#define HAMLIB_TRACE rig_debug(RIG_DEBUG_TRACE,"%s%s(%d) trace\n",spaces(rig->state.depth-1), __FILE__, __LINE__) #define __FILENAME__ (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__) #include -#include #include #include #include +// to stop warnings about including winsock2.h before windows.h +#if defined(_WIN32) +#include +#include +#else +#include +#include +#include +#endif + +// mingw64 still shows __TIMESIZE != 64 +// need to do more testing +#if 0 +#if __TIMESIZE != 64 +#warning TIMESIZE != 64 -- Please report your OS system to hamlib-developer@lists.sourceforge.net +#endif +#endif + // For MSVC install the NUGet pthread package #if defined(_MSC_VER) #define HAVE_STRUCT_TIMESPEC @@ -46,6 +67,7 @@ /* Rig list is in a separate file so as not to mess up w/ this one */ #include +//#include /** * \addtogroup rig @@ -118,6 +140,23 @@ __BEGIN_DECLS +// FIFO currently used for send_morse queue +#define HAMLIB_FIFO_SIZE 1024 + +typedef struct +{ + char data[HAMLIB_FIFO_SIZE]; + int head; + int tail; + int flush; // flush flag for stop_morse +#ifdef _PTHREAD_H + pthread_mutex_t mutex; +#else + int mutex; +#endif +} FIFO_RIG; + + /** * \brief size of cookie request buffer * Minimum size of cookie buffer to pass to rig_cookie @@ -125,6 +164,7 @@ __BEGIN_DECLS // cookie is 26-char time code plus 10-char (2^31-1) random number #define HAMLIB_COOKIE_SIZE 37 extern int cookie_use; // this is global as once one client requests it everybody needs to honor it +extern int skip_init; // allow rigctl to skip any radio commands at startup //! @cond Doxygen_Suppress extern HAMLIB_EXPORT_VAR(const char) hamlib_version[]; @@ -164,7 +204,7 @@ enum rig_errcode_e { RIG_EDOM, /*!< 17 Argument out of domain of func */ RIG_EDEPRECATED,/*!< 18 Function deprecated */ RIG_ESECURITY, /*!< 19 Security error */ - RIG_EPOWER, /*!, 20 Rig not powered on */ + RIG_EPOWER, /*!< 20 Rig not powered on */ RIG_EEND // MUST BE LAST ITEM IN LAST }; /** @@ -260,6 +300,8 @@ typedef unsigned int tone_t; /** * \brief Port type + * + * Note: All rigs may use a network:port address ( e.g. tcp/serial adapter) */ typedef enum rig_port_e { RIG_PORT_NONE = 0, /*!< No port */ @@ -341,8 +383,8 @@ enum agc_level_e { RIG_AGC_MEDIUM, RIG_AGC_AUTO, RIG_AGC_LONG, - RIG_AGC_ON, /*< Turns AGC ON -- Kenwood -- restores last level set */ - RIG_AGC_NONE /*< Rig does not have CAT AGC control */ + RIG_AGC_ON, /*!< Turns AGC ON -- Kenwood -- restores last level set */ + RIG_AGC_NONE /*!< Rig does not have CAT AGC control */ }; @@ -397,8 +439,8 @@ typedef enum { * \brief Split mode */ typedef enum { - RIG_SPLIT_OFF = 0, /*!< Split mode disabled */ - RIG_SPLIT_ON /*!< Split mode enabled */ + RIG_SPLIT_OFF = 0, /*!< Split mode disabled */ + RIG_SPLIT_ON, /*!< Split mode enabled */ } split_t; @@ -537,7 +579,7 @@ typedef unsigned int vfo_t; /** \brief \c Macro to tell you if VFO can transmit */ #define RIG_VFO_TX_VFO(v) ((v)|RIG_VFO_TX_FLAG) -/** \brief \c TX -- alias for split tx or uplink, of VFO_CURR */ +/** \brief \c TX -- alias for split tx or uplink, of VFO_CURR */ #define RIG_VFO_TX RIG_VFO_TX_VFO(RIG_VFO_CURR) /** \brief \c RX -- alias for split rx or downlink */ @@ -565,7 +607,7 @@ typedef unsigned int vfo_t; #define RIG_TARGETABLE_ANT (1<<10) #define RIG_TARGETABLE_ROOFING (1<<11) // roofing filter targetable by VFO #define RIG_TARGETABLE_SPECTRUM (1<<12) // spectrum scope targetable by VFO -#define RIG_TARGETABLE_BAND (1<<13) // Band select -- e.g. Yaeus BS command +#define RIG_TARGETABLE_BAND (1<<13) // Band select -- e.g. Yaesu BS command #define RIG_TARGETABLE_COMMON (RIG_TARGETABLE_RITXIT | RIG_TARGETABLE_PTT | RIG_TARGETABLE_MEM | RIG_TARGETABLE_BANK) #define RIG_TARGETABLE_ALL 0x7fffffff //! @endcond @@ -739,6 +781,46 @@ typedef enum { // numbers here reflect the Yaesu values RIG_BAND_430MHZ = 16, /*!< \c 430MHz */ } hamlib_band_t; +typedef enum { // numbers here reflect generic values -- need to map to rig values + RIG_BANDSELECT_UNUSED = CONSTANT_64BIT_FLAG(0), /*!< \c Unused */ + RIG_BANDSELECT_2200M = CONSTANT_64BIT_FLAG(1), /*!< \c 160M */ + RIG_BANDSELECT_600M = CONSTANT_64BIT_FLAG(2), /*!< \c 160M */ + RIG_BANDSELECT_160M = CONSTANT_64BIT_FLAG(3), /*!< \c 160M */ + RIG_BANDSELECT_80M = CONSTANT_64BIT_FLAG(4), /*!< \c 80M */ + RIG_BANDSELECT_60M = CONSTANT_64BIT_FLAG(5), /*!< \c 60M */ + RIG_BANDSELECT_40M = CONSTANT_64BIT_FLAG(6), /*!< \c 40M */ + RIG_BANDSELECT_30M = CONSTANT_64BIT_FLAG(7), /*!< \c 30M */ + RIG_BANDSELECT_20M = CONSTANT_64BIT_FLAG(8), /*!< \c 20M */ + RIG_BANDSELECT_17M = CONSTANT_64BIT_FLAG(9), /*!< \c 17M */ + RIG_BANDSELECT_15M = CONSTANT_64BIT_FLAG(10), /*!< \c 15M */ + RIG_BANDSELECT_12M = CONSTANT_64BIT_FLAG(11), /*!< \c 12M */ + RIG_BANDSELECT_10M = CONSTANT_64BIT_FLAG(12), /*!< \c 10M */ + RIG_BANDSELECT_6M = CONSTANT_64BIT_FLAG(13), /*!< \c 6M */ + RIG_BANDSELECT_WFM = CONSTANT_64BIT_FLAG(14), /*!< \c IC705 74.8-108 */ + RIG_BANDSELECT_GEN = CONSTANT_64BIT_FLAG(15), /*!< \c 60M */ + RIG_BANDSELECT_MW = CONSTANT_64BIT_FLAG(16), /*!< \c Medium Wave */ + RIG_BANDSELECT_AIR = CONSTANT_64BIT_FLAG(17), /*!< \c Air band */ + RIG_BANDSELECT_4M = CONSTANT_64BIT_FLAG(18), /*!< \c 70MHz */ + RIG_BANDSELECT_2M = CONSTANT_64BIT_FLAG(19), /*!< \c 144MHz */ + RIG_BANDSELECT_1_25M = CONSTANT_64BIT_FLAG(20), /*!< \c 222MHz */ + RIG_BANDSELECT_70CM = CONSTANT_64BIT_FLAG(21), /*!< \c 420MHz */ + RIG_BANDSELECT_33CM = CONSTANT_64BIT_FLAG(22), /*!< \c 902MHz */ + RIG_BANDSELECT_23CM = CONSTANT_64BIT_FLAG(23), /*!< \c 1240MHz */ + RIG_BANDSELECT_13CM = CONSTANT_64BIT_FLAG(24), /*!< \c 2300MHz */ + RIG_BANDSELECT_9CM = CONSTANT_64BIT_FLAG(25), /*!< \c 3300MHz */ + RIG_BANDSELECT_5CM = CONSTANT_64BIT_FLAG(26), /*!< \c 5650MHz */ + RIG_BANDSELECT_3CM = CONSTANT_64BIT_FLAG(27), /*!< \c 10000MHz */ +} hamlib_bandselect_t; + + +#define RIG_BANDSELECT_ALL +#define RIG_BANDSELECT_LF (RIG_BANDSELECT_2200M | RIG_BANDSELECT_600M) +#define RIG_BANDSELECT_HF (RIG_BANDSELECT_160M | RIG_BANDSELECT_80M | RIG_BANDSELECT_60M | RIG_BANDSELECT_40M\ +| RIG_BANDSELECT_30M | RIG_BANDSELECT_20M | RIG_BANDSELECT_17M | RIG_BANDSELECT_15M | RIG_BANDSELECT_12M\ +RIG_BANDSELECT_10M | RIG_BANDSELECT_6M) +#define RIG_BANDSELECT_VHF (RIG_BANDSELECT_AIR | RIG_BANDSELECT_2M| RIG_BANDSELECT_1_25M( +#define RIG_BANDSELECT_UHF (RIG_BANDSELECT_70CM) + /** * \brief Rig Scan operation @@ -764,7 +846,8 @@ typedef enum { /** * \brief configuration token */ -typedef long token_t; +typedef long hamlib_token_t; +#define token_t hamlib_token_t //! @cond Doxygen_Suppress @@ -779,7 +862,7 @@ typedef long token_t; * * Current internal implementation * NUMERIC: val.f or val.i - * COMBO: val.i, starting from 0. Points to a table of strings or asci stored values. + * COMBO: val.i, starting from 0. Points to a table of strings or ASCII stored values. * STRING: val.s or val.cs * CHECKBUTTON: val.i 0/1 * BINARY: val.b @@ -792,7 +875,8 @@ enum rig_conf_e { RIG_CONF_NUMERIC, /*!< Numeric type integer or real */ RIG_CONF_CHECKBUTTON, /*!< on/off type */ RIG_CONF_BUTTON, /*!< Button type */ - RIG_CONF_BINARY /*!< Binary buffer type */ + RIG_CONF_BINARY, /*!< Binary buffer type */ + RIG_CONF_INT /*!< Integer */ }; //! @cond Doxygen_Suppress @@ -804,7 +888,7 @@ enum rig_conf_e { * \brief Configuration parameter structure. */ struct confparams { - token_t token; /*!< Conf param token ID */ + hamlib_token_t token; /*!< Conf param token ID */ const char *name; /*!< Param name, no spaces allowed */ const char *label; /*!< Human readable label */ const char *tooltip; /*!< Hint on the parameter */ @@ -902,7 +986,7 @@ typedef unsigned int ant_t; //! @cond Doxygen_Suppress -#define RIG_AGC_LAST -1 +#define RIG_AGC_LAST 99999 //! @endcond #if 1 // deprecated @@ -930,6 +1014,7 @@ enum meter_level_e { */ typedef union { signed int i; /*!< Signed integer */ + unsigned int u; /*!< Unsigned integer */ float f; /*!< Single precision float */ char *s; /*!< Pointer to char string */ const char *cs; /*!< Pointer to constant char string */ @@ -1006,8 +1091,8 @@ typedef uint64_t rig_level_e; #define RIG_LEVEL_TEMP_METER CONSTANT_64BIT_FLAG(48) /*!< \c TEMP_METER -- arg float (C, centigrade) */ #define RIG_LEVEL_BAND_SELECT CONSTANT_64BIT_FLAG(49) /*!< \c BAND_SELECT -- arg enum BAND_ENUM */ #define RIG_LEVEL_USB_AF CONSTANT_64BIT_FLAG(50) /*!< \c ACC/USB AF output level */ -#define RIG_LEVEL_AGC_TIME CONSTANT_64BIT_FLAG(51) /*!< \c AGC_TIME -- in seconds, rig dependent */ -#define RIG_LEVEL_52 CONSTANT_64BIT_FLAG(52) /*!< \c Future use */ +#define RIG_LEVEL_USB_AF_INPUT CONSTANT_64BIT_FLAG(51) /*!< \c ACC/USB AF input level */ +#define RIG_LEVEL_AGC_TIME CONSTANT_64BIT_FLAG(52) /*!< \c AGC_TIME -- in seconds, rig dependent */ #define RIG_LEVEL_53 CONSTANT_64BIT_FLAG(53) /*!< \c Future use */ #define RIG_LEVEL_54 CONSTANT_64BIT_FLAG(54) /*!< \c Future use */ #define RIG_LEVEL_55 CONSTANT_64BIT_FLAG(55) /*!< \c Future use */ @@ -1021,9 +1106,9 @@ typedef uint64_t rig_level_e; #define RIG_LEVEL_63 CONSTANT_64BIT_FLAG(63) /*!< \c Future use */ //! @cond Doxygen_Suppress -#define RIG_LEVEL_FLOAT_LIST (RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_SQL|RIG_LEVEL_APF|RIG_LEVEL_NR|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN|RIG_LEVEL_COMP|RIG_LEVEL_BALANCE|RIG_LEVEL_SWR|RIG_LEVEL_ALC|RIG_LEVEL_VOXGAIN|RIG_LEVEL_ANTIVOX|RIG_LEVEL_RFPOWER_METER|RIG_LEVEL_RFPOWER_METER_WATTS|RIG_LEVEL_COMP_METER|RIG_LEVEL_VD_METER|RIG_LEVEL_ID_METER|RIG_LEVEL_NOTCHF_RAW|RIG_LEVEL_MONITOR_GAIN|RIG_LEVEL_NB|RIG_LEVEL_SPECTRUM_REF|RIG_LEVEL_TEMP_METER|RIG_LEVEL_USB_AF|RIG_LEVEL_AGC_TIME) +#define RIG_LEVEL_FLOAT_LIST (RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_SQL|RIG_LEVEL_APF|RIG_LEVEL_NR|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN|RIG_LEVEL_COMP|RIG_LEVEL_BALANCE|RIG_LEVEL_SWR|RIG_LEVEL_ALC|RIG_LEVEL_VOXGAIN|RIG_LEVEL_ANTIVOX|RIG_LEVEL_RFPOWER_METER|RIG_LEVEL_RFPOWER_METER_WATTS|RIG_LEVEL_COMP_METER|RIG_LEVEL_VD_METER|RIG_LEVEL_ID_METER|RIG_LEVEL_NOTCHF_RAW|RIG_LEVEL_MONITOR_GAIN|RIG_LEVEL_NB|RIG_LEVEL_SPECTRUM_REF|RIG_LEVEL_TEMP_METER|RIG_LEVEL_USB_AF|RIG_LEVEL_USB_AF_INPUT|RIG_LEVEL_AGC_TIME) -#define RIG_LEVEL_READONLY_LIST (RIG_LEVEL_SWR|RIG_LEVEL_ALC|RIG_LEVEL_STRENGTH|RIG_LEVEL_RAWSTR|RIG_LEVEL_RFPOWER_METER|RIG_LEVEL_COMP_METER|RIG_LEVEL_VD_METER|RIG_LEVEL_ID_METER|RIG_LEVEL_RFPOWER_METER|RIG_LEVEL_RFPOWER_METER_WATTS) +#define RIG_LEVEL_READONLY_LIST (RIG_LEVEL_SWR|RIG_LEVEL_ALC|RIG_LEVEL_STRENGTH|RIG_LEVEL_RAWSTR|RIG_LEVEL_COMP_METER|RIG_LEVEL_VD_METER|RIG_LEVEL_ID_METER|RIG_LEVEL_TEMP_METER|RIG_LEVEL_RFPOWER_METER|RIG_LEVEL_RFPOWER_METER_WATTS) #define RIG_LEVEL_IS_FLOAT(l) ((l)&RIG_LEVEL_FLOAT_LIST) #define RIG_LEVEL_SET(l) ((l)&~RIG_LEVEL_READONLY_LIST) @@ -1048,7 +1133,15 @@ enum rig_parm_e { RIG_PARM_BAT = (1 << 6), /*!< \c BAT -- battery level, float [0.0 ... 1.0] */ RIG_PARM_KEYLIGHT = (1 << 7), /*!< \c KEYLIGHT -- Button backlight, on/off */ RIG_PARM_SCREENSAVER = (1 << 8), /*!< \c SCREENSAVER -- rig specific timeouts */ - RIG_PARM_AFIF = (1 << 9) /*!< \c AFIF -- 0=AF audio, 1=IF audio -- see IC-7300/9700/705 */ + RIG_PARM_AFIF = (1 << 9), /*!< \c AFIF -- 0=AF audio, 1=IF audio -- see IC-7300/9700/705 */ + RIG_PARM_BANDSELECT = (1 << 10), /*!< \c BANDSELECT -- e.g. BAND160M, BAND80M, BAND70CM, BAND2CM */ + RIG_PARM_KEYERTYPE = (1 << 11) /*!< \c KEYERTYPE -- 0,1,2 or STRAIGHT PADDLE BUG */ +}; + +enum rig_keyertype_e { + RIG_KEYERTYPE_STRAIGHT = 0, + RIG_KEYERTYPE_BUG = (1 << 0), + RIG_KEYERTYPE_PADDLE = (2 << 0) }; /** @@ -1076,10 +1169,12 @@ enum multicast_item_e { }; //! @cond Doxygen_Suppress -#define RIG_PARM_FLOAT_LIST (RIG_PARM_BACKLIGHT|RIG_PARM_BAT|RIG_PARM_KEYLIGHT) +#define RIG_PARM_FLOAT_LIST (RIG_PARM_BACKLIGHT|RIG_PARM_BAT|RIG_PARM_KEYLIGHT|RIG_PARM_BACKLIGHT) +#define RIG_PARM_STRING_LIST (RIG_PARM_BANDSELECT|RIG_PARM_KEYERTYPE) #define RIG_PARM_READONLY_LIST (RIG_PARM_BAT) #define RIG_PARM_IS_FLOAT(l) ((l)&RIG_PARM_FLOAT_LIST) +#define RIG_PARM_IS_STRING(l) ((l)&RIG_PARM_STRING_LIST) #define RIG_PARM_SET(l) ((l)&~RIG_PARM_READONLY_LIST) //! @endcond @@ -1179,14 +1274,14 @@ typedef uint64_t setting_t; #define RIG_FUNC_DIVERSITY CONSTANT_64BIT_FLAG (38) /*!< \c DIVERSITY -- Diversity receive */ #define RIG_FUNC_DSQL CONSTANT_64BIT_FLAG (39) /*!< \c DSQL -- Digital modes squelch */ #define RIG_FUNC_SCEN CONSTANT_64BIT_FLAG (40) /*!< \c SCEN -- scrambler/encryption */ -#define RIG_FUNC_SLICE CONSTANT_64BIT_FLAG (41) /*!< \c Rig slice selection -- Flex */ +#define RIG_FUNC_SLICE CONSTANT_64BIT_FLAG (41) /*!< \c SLICE -- Rig slice selection -- Flex */ #define RIG_FUNC_TRANSCEIVE CONSTANT_64BIT_FLAG (42) /*!< \c TRANSCEIVE -- Send radio state changes automatically ON/OFF */ #define RIG_FUNC_SPECTRUM CONSTANT_64BIT_FLAG (43) /*!< \c SPECTRUM -- Spectrum scope data output ON/OFF */ #define RIG_FUNC_SPECTRUM_HOLD CONSTANT_64BIT_FLAG (44) /*!< \c SPECTRUM_HOLD -- Pause spectrum scope updates ON/OFF */ #define RIG_FUNC_SEND_MORSE CONSTANT_64BIT_FLAG (45) /*!< \c SEND_MORSE -- Send specified characters using CW */ #define RIG_FUNC_SEND_VOICE_MEM CONSTANT_64BIT_FLAG (46) /*!< \c SEND_VOICE_MEM -- Transmit in SSB message stored in memory */ #define RIG_FUNC_OVF_STATUS CONSTANT_64BIT_FLAG (47) /*!< \c OVF -- Read overflow status 0=Off, 1=On */ -#define RIG_FUNC_BIT48 CONSTANT_64BIT_FLAG (48) /*!< \c available for future RIG_FUNC items */ +#define RIG_FUNC_SYNC CONSTANT_64BIT_FLAG (48) /*!< \c Synchronize VFOS -- FTDX101D/MP for now SY command */ #define RIG_FUNC_BIT49 CONSTANT_64BIT_FLAG (49) /*!< \c available for future RIG_FUNC items */ #define RIG_FUNC_BIT50 CONSTANT_64BIT_FLAG (50) /*!< \c available for future RIG_FUNC items */ #define RIG_FUNC_BIT51 CONSTANT_64BIT_FLAG (51) /*!< \c available for future RIG_FUNC items */ @@ -1291,12 +1386,12 @@ typedef uint64_t rmode_t; #define RIG_MODE_IQ CONSTANT_64BIT_FLAG (37) /*!< \c IQ mode for a couple of kit rigs */ #define RIG_MODE_ISBUSB CONSTANT_64BIT_FLAG (38) /*!< \c ISB mode monitoring USB */ #define RIG_MODE_ISBLSB CONSTANT_64BIT_FLAG (39) /*!< \c ISB mode monitoring LSB */ -#define RIG_MODE_BIT40 CONSTANT_64BIT_FLAG (40) /*!< \c reserved for future expansion */ -#define RIG_MODE_BIT41 CONSTANT_64BIT_FLAG (41) /*!< \c reserved for future expansion */ -#define RIG_MODE_BIT42 CONSTANT_64BIT_FLAG (42) /*!< \c reserved for future expansion */ -#define RIG_MODE_BIT43 CONSTANT_64BIT_FLAG (43) /*!< \c reserved for future expansion */ -#define RIG_MODE_BIT44 CONSTANT_64BIT_FLAG (44) /*!< \c reserved for future expansion */ -#define RIG_MODE_BIT45 CONSTANT_64BIT_FLAG (45) /*!< \c reserved for future expansion */ +#define RIG_MODE_USBD1 CONSTANT_64BIT_FLAG (40) /*!< \c USB-D1 for some rigs */ +#define RIG_MODE_USBD2 CONSTANT_64BIT_FLAG (41) /*!< \c USB-D2 for some rigs */ +#define RIG_MODE_USBD3 CONSTANT_64BIT_FLAG (42) /*!< \c USB-D3 for some rigs */ +#define RIG_MODE_LSBD1 CONSTANT_64BIT_FLAG (43) /*!< \c LSB-D1 for some rigs */ +#define RIG_MODE_LSBD2 CONSTANT_64BIT_FLAG (44) /*!< \c LSB-D1 for some rigs */ +#define RIG_MODE_LSBD3 CONSTANT_64BIT_FLAG (45) /*!< \c LSB-D1 for some rigs */ #define RIG_MODE_BIT46 CONSTANT_64BIT_FLAG (46) /*!< \c reserved for future expansion */ #define RIG_MODE_BIT47 CONSTANT_64BIT_FLAG (47) /*!< \c reserved for future expansion */ #define RIG_MODE_BIT48 CONSTANT_64BIT_FLAG (48) /*!< \c reserved for future expansion */ @@ -1323,6 +1418,11 @@ typedef uint64_t rmode_t; */ #define RIG_MODE_SSB (RIG_MODE_USB|RIG_MODE_LSB) +/** + * \brief macro for backends, not to be used by rig_set_mode et al. + */ +#define RIG_MODE_PKTSSB (RIG_MODE_PKTUSB|RIG_MODE_PKTLSB) + /** * \brief macro for backends, not to be used by rig_set_mode et al. */ @@ -1441,7 +1541,7 @@ struct filter_list { * */ struct ext_list { - token_t token; /*!< Token ID */ + hamlib_token_t token; /*!< Token ID */ value_t val; /*!< Value */ }; @@ -1489,6 +1589,7 @@ struct channel { char channel_desc[HAMLIB_MAXCHANDESC]; /*!< Name */ struct ext_list *ext_levels; /*!< Extension level value list, NULL ended. ext_levels can be NULL */ + char tag[32]; /*!< TAG ASCII for channel name, etc */ }; /** @@ -1530,6 +1631,7 @@ struct channel_cap { unsigned flags: 1; /*!< Channel flags */ unsigned channel_desc: 1; /*!< Name */ unsigned ext_levels: 1; /*!< Extension level value list */ + unsigned tag: 1; /*!< Has tag field e.g. FT991 */ }; /** @@ -1556,7 +1658,9 @@ typedef enum { RIG_MTYPE_MEMOPAD, /*!< Memory pad */ RIG_MTYPE_SAT, /*!< Satellite */ RIG_MTYPE_BAND, /*!< VFO/Band channel */ - RIG_MTYPE_PRIO /*!< Priority channel */ + RIG_MTYPE_PRIO, /*!< Priority channel */ + RIG_MTYPE_VOICE, /*!< Stored Voice Message */ + RIG_MTYPE_MORSE /*!< Morse Message */ } chan_type_t; @@ -1574,11 +1678,10 @@ typedef enum { \endcode */ struct chan_list { - int startc; /*!< Starting memory channel \b number */ - int endc; /*!< Ending memory channel \b number */ - chan_type_t type; /*!< Memory type. see chan_type_t */ - channel_cap_t - mem_caps; /*!< Definition of attributes that can be stored/retrieved */ + int startc; /*!< Starting memory channel \b number */ + int endc; /*!< Ending memory channel \b number */ + chan_type_t type; /*!< Memory type. see chan_type_t */ + channel_cap_t mem_caps; /*!< Definition of attributes that can be stored/retrieved */ }; //! @cond Doxygen_Suppress @@ -1602,7 +1705,7 @@ typedef struct chan_list chan_t; * * The granularity is undefined if min = 0, max = 0, and step = 0. * - * For float settings, if min.f = 0 and max.f = 0 (and step.f! = 0), max.f is + * For float settings, if min.f = 0 and max.f = 0 (and step.f != 0), max.f is * assumed to be actually equal to 1.0. * * If step = 0 (and min and/or max are not null), then this means step can @@ -1983,17 +2086,17 @@ struct rig_caps { int (*set_parm)(RIG *rig, setting_t parm, value_t val); int (*get_parm)(RIG *rig, setting_t parm, value_t *val); - int (*set_ext_level)(RIG *rig, vfo_t vfo, token_t token, value_t val); - int (*get_ext_level)(RIG *rig, vfo_t vfo, token_t token, value_t *val); + int (*set_ext_level)(RIG *rig, vfo_t vfo, hamlib_token_t token, value_t val); + int (*get_ext_level)(RIG *rig, vfo_t vfo, hamlib_token_t token, value_t *val); - int (*set_ext_func)(RIG *rig, vfo_t vfo, token_t token, int status); - int (*get_ext_func)(RIG *rig, vfo_t vfo, token_t token, int *status); + int (*set_ext_func)(RIG *rig, vfo_t vfo, hamlib_token_t token, int status); + int (*get_ext_func)(RIG *rig, vfo_t vfo, hamlib_token_t token, int *status); - int (*set_ext_parm)(RIG *rig, token_t token, value_t val); - int (*get_ext_parm)(RIG *rig, token_t token, value_t *val); + int (*set_ext_parm)(RIG *rig, hamlib_token_t token, value_t val); + int (*get_ext_parm)(RIG *rig, hamlib_token_t token, value_t *val); - int (*set_conf)(RIG *rig, token_t token, const char *val); - int (*get_conf)(RIG *rig, token_t token, char *val); + int (*set_conf)(RIG *rig, hamlib_token_t token, const char *val); + int (*get_conf)(RIG *rig, hamlib_token_t token, char *val); int (*send_dtmf)(RIG *rig, vfo_t vfo, const char *digits); int (*recv_dtmf)(RIG *rig, vfo_t vfo, char *digits, int *length); @@ -2003,6 +2106,7 @@ struct rig_caps { int (*wait_morse)(RIG *rig, vfo_t vfo); int (*send_voice_mem)(RIG *rig, vfo_t vfo, int ch); + int (*stop_voice_mem)(RIG *rig, vfo_t vfo); int (*set_bank)(RIG *rig, vfo_t vfo, int bank); @@ -2063,10 +2167,14 @@ struct rig_caps { const unsigned char *frame); // this will be used to check rigcaps structure is compatible with client char *hamlib_check_rig_caps; // a constant value we can check for hamlib integrity - int (*get_conf2)(RIG *rig, token_t token, char *val, int val_len); + int (*get_conf2)(RIG *rig, hamlib_token_t token, char *val, int val_len); int (*password)(RIG *rig, const char *key1); /*< Send encrypted password if rigctld is secured with -A/--password */ int (*set_lock_mode)(RIG *rig, int mode); int (*get_lock_mode)(RIG *rig, int *mode); + short timeout_retry; /*!< number of retries to make in case of read timeout errors, some serial interfaces may require this, 0 to use default value, -1 to disable */ + short morse_qsize; /* max length of morse */ +// int (*bandwidth2rig)(RIG *rig, enum bandwidth_t bandwidth); +// enum bandwidth_t (*rig2bandwidth)(RIG *rig, int rigbandwidth); }; //! @endcond @@ -2074,7 +2182,6 @@ struct rig_caps { * \brief Enumeration of all rig_ functions * */ -//! @cond Doxygen_Suppress // all functions enumerated for rig_get_function_ptr enum rig_function_e { RIG_FUNCTION_INIT, @@ -2165,27 +2272,27 @@ enum rig_function_e { RIG_FUNCTION_IS_ASYNC_FRAME, RIG_FUNCTION_PROCESS_ASYNC_FRAME, RIG_FUNCTION_GET_CONF2, + RIG_FUNCTION_STOP_VOICE_MEM, }; /** * \brief Function to return pointer to rig_* function * */ -//! @cond Doxygen_Suppress extern HAMLIB_EXPORT (void *) rig_get_function_ptr(rig_model_t rig_model, enum rig_function_e rig_function); /** * \brief Enumeration of rig->caps values * */ -//! @cond Doxygen_Suppress // values enumerated for rig->caps values enum rig_caps_int_e { RIG_CAPS_TARGETABLE_VFO, RIG_CAPS_RIG_MODEL, RIG_CAPS_PORT_TYPE, RIG_CAPS_PTT_TYPE, - RIG_CAPS_HAS_GET_LEVEL + RIG_CAPS_HAS_GET_LEVEL, + RIG_CAPS_HAS_SET_LEVEL, }; enum rig_caps_cptr_e { @@ -2199,14 +2306,12 @@ enum rig_caps_cptr_e { * \brief Function to return int value from rig->caps * Does not support > 32-bit rig_caps values */ -//! @cond Doxygen_Suppress -extern HAMLIB_EXPORT (long long) rig_get_caps_int(rig_model_t rig_model, enum rig_caps_int_e rig_caps); +extern HAMLIB_EXPORT (uint64_t) rig_get_caps_int(rig_model_t rig_model, enum rig_caps_int_e rig_caps); /** * \brief Function to return char pointer value from rig->caps * */ -//! @cond Doxygen_Suppress extern HAMLIB_EXPORT (const char *) rig_get_caps_cptr(rig_model_t rig_model, enum rig_caps_cptr_e rig_caps); struct hamlib_async_pipe; @@ -2280,8 +2385,8 @@ typedef struct hamlib_port { 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 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 */ @@ -2292,6 +2397,8 @@ typedef struct hamlib_port { 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; @@ -2364,11 +2471,62 @@ typedef hamlib_port_t_deprecated port_t_deprecated; typedef hamlib_port_t port_t; #endif +/* Macros to access data structures/pointers + * Make it easier to change location in preparation + * for moving them out of rig->state. + * See https://github.com/Hamlib/Hamlib/issues/1445 + * https://github.com/Hamlib/Hamlib/issues/1452 + * https://github.com/Hamlib/Hamlib/issues/1420 + * https://github.com/Hamlib/Hamlib/issues/536 + * https://github.com/Hamlib/Hamlib/issues/487 + */ +// 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) +#define CACHE(r) (&r->state.cache) +#define AMPPORT(a) (&a->state.ampport) +#define ROTPORT(r) (&r->state.rotport) +#define ROTPORT2(r) (&r->state.rotport2) +#define STATE(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 + * and every reference is updated. + */ +#else +/* Define external unique names */ +#define HAMLIB_RIGPORT(r) ((hamlib_port_t *)rig_data_pointer(r, RIG_PTRX_RIGPORT)) +#define HAMLIB_PTTPORT(r) ((hamlib_port_t *)rig_data_pointer(r, RIG_PTRX_PTTPORT)) +#define HAMLIB_DCDPORT(r) ((hamlib_port_t *)rig_data_pointer(r, RIG_PTRX_DCDPORT)) +#define HAMLIB_CACHE(r) ((struct rig_cache *)rig_data_pointer(r, RIG_PTRX_CACHE)) +#define HAMLIB_AMPPORT(a) ((hamlib_port_t *)amp_data_pointer(a, RIG_PTRX_AMPPORT)) +#define HAMLIB_ROTPORT(r) ((hamlib_port_t *)rot_data_pointer(r, RIG_PTRX_ROTPORT)) +#define HAMLIB_ROTPORT2(r) ((hamlib_port_t *)rot_data_pointer(r, RIG_PTRX_ROTPORT2)) +#define HAMLIB_STATE(r) ((struct rig_state *)rig_data_pointer(r, RIG_PTRX_STATE)) +#endif + +typedef enum { + RIG_PTRX_NONE=0, + RIG_PTRX_RIGPORT, + RIG_PTRX_PTTPORT, + RIG_PTRX_DCDPORT, + RIG_PTRX_CACHE, + RIG_PTRX_AMPPORT, + RIG_PTRX_ROTPORT, + RIG_PTRX_ROTPORT2, + RIG_PTRX_STATE, +// New entries go directly above this line==================== + RIG_PTRX_MAXIMUM +} rig_ptrx_t; + #define HAMLIB_ELAPSED_GET 0 #define HAMLIB_ELAPSED_SET 1 #define HAMLIB_ELAPSED_INVALIDATE 2 -#define HAMLIB_CACHE_ALWAYS (-1) /*< value to set cache timeout to always use cache */ +#define HAMLIB_CACHE_ALWAYS (-1) /*!< value to set cache timeout to always use cache */ typedef enum { HAMLIB_CACHE_ALL, // to set all cache timeouts at once @@ -2389,6 +2547,7 @@ typedef enum { * \brief Rig cache data * * This struct contains all the items we cache at the highest level + * DO NOT MODIFY THIS STRUCTURE AT ALL -- we need a new cache that is a pointer rather than a structure */ struct rig_cache { int timeout_ms; // the cache timeout for invalidating itself @@ -2464,6 +2623,38 @@ struct rig_cache { int satmode; // if rig is in satellite mode }; +/** + * \brief Multicast data items the are unique per rig instantiation + * This is meant for internal Hamlib use only + */ +#include +struct multicast_s +{ + int multicast_running; + int sock; + int seqnumber; + int runflag; // = 0; + pthread_t threadid; + // this mutex is needed to control serial access + // as of 2023-05-13 we have main thread and multicast thread needing it + // eventually we should be able to use cached info only in the main thread to avoid contention + pthread_mutex_t mutex; + int mutex_initialized; +//#ifdef HAVE_ARPA_INET_H + //struct ip_mreq mreq; // = {0}; + struct sockaddr_in dest_addr; // = {0}; + int port; +//#endif +}; + +typedef unsigned int rig_comm_status_t; + +#define RIG_COMM_STATUS_OK 0x00 +#define RIG_COMM_STATUS_CONNECTING 0x01 +#define RIG_COMM_STATUS_DISCONNECTED 0x02 +#define RIG_COMM_STATUS_TERMINATED 0x03 +#define RIG_COMM_STATUS_WARNING 0x04 +#define RIG_COMM_STATUS_ERROR 0x05 /** * \brief Rig state containing live data and customized fields. @@ -2472,7 +2663,7 @@ struct rig_cache { * that may be updated (ie. customized) * * It is NOT fine to move fields around as it can break share library offset - * As of 2021-03-03 vfo_list is the last known item being reference externally + * 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 { @@ -2584,12 +2775,215 @@ struct rig_state { /********* 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; /*state.depth, spaces(), rig->state.depth, __func__, elapsed_ms(&__begin, HAMLIB_ELAPSED_GET)); +#define ELAPSED2 rig_debug(RIG_DEBUG_VERBOSE, "%s%d:%s: elapsed=%.0lfms\n", spaces(rig->state.depth-1), rig->state.depth, __func__, elapsed_ms(&__begin, HAMLIB_ELAPSED_GET)); // use this instead of snprintf for automatic detection of buffer limit #define SNPRINTF(s,n,...) { snprintf(s,n,##__VA_ARGS__);if (strlen(s) > n-1) fprintf(stderr,"****** %s(%d): buffer overflow ******\n", __func__, __LINE__); } @@ -3323,13 +3746,13 @@ extern HAMLIB_EXPORT(FILE *) rig_set_debug_file HAMLIB_PARAMS((FILE *stream)); extern HAMLIB_EXPORT(int) -rig_register HAMLIB_PARAMS((const struct rig_caps *caps)); +rig_register HAMLIB_PARAMS((struct rig_caps *caps)); extern HAMLIB_EXPORT(int) rig_unregister HAMLIB_PARAMS((rig_model_t rig_model)); extern HAMLIB_EXPORT(int) -rig_list_foreach HAMLIB_PARAMS((int (*cfunc)(const struct rig_caps *, rig_ptr_t), +rig_list_foreach HAMLIB_PARAMS((int (*cfunc)(struct rig_caps *, rig_ptr_t), rig_ptr_t data)); extern HAMLIB_EXPORT(int) @@ -3364,7 +3787,7 @@ extern HAMLIB_EXPORT(const char *) rig_strfunc(setting_t); extern HAMLIB_EXPORT(const char *) rig_strlevel(setting_t); extern HAMLIB_EXPORT(const char *) rig_strparm(setting_t); extern HAMLIB_EXPORT(const char *) rig_stragclevel(enum agc_level_e level); -extern HAMLIB_EXPORT(enum agc_level_e) rig_levelagcstr (char *agcString); +extern HAMLIB_EXPORT(enum agc_level_e) rig_levelagcstr (const char *agcString); extern HAMLIB_EXPORT(enum agc_level_e) rig_levelagcvalue (int agcValue); extern HAMLIB_EXPORT(value_t) rig_valueagclevel (enum agc_level_e agcLevel); extern HAMLIB_EXPORT(const char *) rig_strptrshift(rptr_shift_t); @@ -3373,6 +3796,7 @@ extern HAMLIB_EXPORT(const char *) rig_strscan(scan_t scan); extern HAMLIB_EXPORT(const char *) rig_strstatus(enum rig_status_e status); extern HAMLIB_EXPORT(const char *) rig_strmtype(chan_type_t mtype); extern HAMLIB_EXPORT(const char *) rig_strspectrummode(enum rig_spectrum_mode_e mode); +extern HAMLIB_EXPORT(const char *) rig_strcommstatus(rig_comm_status_t vfo); extern HAMLIB_EXPORT(rmode_t) rig_parse_mode(const char *s); extern HAMLIB_EXPORT(vfo_t) rig_parse_vfo(const char *s); @@ -3430,6 +3854,14 @@ extern HAMLIB_EXPORT(int) rig_get_lock_mode(RIG *rig, int *lock); extern HAMLIB_EXPORT(int) rig_is_model(RIG *rig, rig_model_t model); +extern HAMLIB_EXPORT(char*) rig_date_strget(char *buf, int buflen, int localtime); + +enum GPIO { GPIO1, GPIO2, GPIO3, GPIO4 }; +extern HAMLIB_EXPORT(int) rig_cm108_get_bit(hamlib_port_t *p, enum GPIO gpio, int *bit); +extern HAMLIB_EXPORT(int) rig_cm108_set_bit(hamlib_port_t *p, enum GPIO gpio, int bit); +extern HAMLIB_EXPORT(int) rig_band_changed(RIG *rig, hamlib_bandselect_t band); + +extern HAMLIB_EXPORT(void *) rig_data_pointer(RIG *rig, rig_ptrx_t idx); //! @endcond diff --git a/hamlib/riglist.h b/hamlib/riglist.h index 3c347da..6723445 100644 --- a/hamlib/riglist.h +++ b/hamlib/riglist.h @@ -33,6 +33,8 @@ #define RIG_MAKE_MODEL(a,b) ((a)*MAX_MODELS_PER_BACKEND+(b)) #define RIG_BACKEND_NUM(a) ((a)/MAX_MODELS_PER_BACKEND) +//! @endcond + /*! \file riglist.h * \brief Hamlib rig(radio) model definitions. * @@ -49,6 +51,13 @@ * whishes to use. It is done with the rig_init() API call. */ +/** + * \def RIG_MODEL_NONE + * \brief A macro that returns the model number for an unknown model. + * + * The none backend, as the name suggests, does nothing. It is mainly for + * internal use. + */ #define RIG_MODEL_NONE 0 /*! \def RIG_MODEL_DUMMY @@ -62,16 +71,21 @@ * It has also been expanded to provide support to "virtual" type of rigs * such as the network rig control backend and W1HKJ's Flrig application. */ +//! @cond Doxygen_Suppress #define RIG_DUMMY 0 #define RIG_BACKEND_DUMMY "dummy" +//! @endcond #define RIG_MODEL_DUMMY RIG_MAKE_MODEL(RIG_DUMMY, 1) +//! @cond Doxygen_Suppress #define RIG_MODEL_NETRIGCTL RIG_MAKE_MODEL(RIG_DUMMY, 2) #define RIG_MODEL_ARMSTRONG RIG_MAKE_MODEL(RIG_DUMMY, 3) #define RIG_MODEL_FLRIG RIG_MAKE_MODEL(RIG_DUMMY, 4) #define RIG_MODEL_TRXMANAGER_RIG RIG_MAKE_MODEL(RIG_DUMMY, 5) #define RIG_MODEL_DUMMY_NOVFO RIG_MAKE_MODEL(RIG_DUMMY, 6) #define RIG_MODEL_TCI1X RIG_MAKE_MODEL(RIG_DUMMY, 7) - +#define RIG_MODEL_ACLOG RIG_MAKE_MODEL(RIG_DUMMY, 8) +#define RIG_MODEL_SDRSHARP RIG_MAKE_MODEL(RIG_DUMMY, 9) +#define RIG_MODEL_QUISK RIG_MAKE_MODEL(RIG_DUMMY, 10) /* * Yaesu @@ -127,7 +141,8 @@ #define RIG_MODEL_FT650 RIG_MAKE_MODEL(RIG_YAESU, 47) #define RIG_MODEL_FT990UNI RIG_MAKE_MODEL(RIG_YAESU, 48) #define RIG_MODEL_FT710 RIG_MAKE_MODEL(RIG_YAESU, 49) - +#define RIG_MODEL_FT9000OLD RIG_MAKE_MODEL(RIG_YAESU, 50) +#define RIG_MODEL_Q900 RIG_MAKE_MODEL(RIG_YAESU, 51) /* * Kenwood @@ -186,6 +201,9 @@ #define RIG_MODEL_LAB599_TX500 RIG_MAKE_MODEL(RIG_KENWOOD,50) #define RIG_MODEL_SDRUNO RIG_MAKE_MODEL(RIG_KENWOOD,51) #define RIG_MODEL_QRPLABS RIG_MAKE_MODEL(RIG_KENWOOD,52) +#define RIG_MODEL_FX4 RIG_MAKE_MODEL(RIG_KENWOOD,53) +#define RIG_MODEL_THETIS RIG_MAKE_MODEL(RIG_KENWOOD, 54) +#define RIG_MODEL_TRUSDX RIG_MAKE_MODEL(RIG_KENWOOD, 55) /* * Icom @@ -273,7 +291,7 @@ #define RIG_MODEL_X6100 RIG_MAKE_MODEL(RIG_ICOM, 87) /* Xiegu X6100 */ #define RIG_MODEL_G90 RIG_MAKE_MODEL(RIG_ICOM, 88) /* Xiegu G90 */ #define RIG_MODEL_X5105 RIG_MAKE_MODEL(RIG_ICOM, 89) /* Xiegu X5105 -- G90 compatible */ - +#define RIG_MODEL_IC905 RIG_MAKE_MODEL(RIG_ICOM, 90) /* * Optoelectronics (CI-V) @@ -283,7 +301,6 @@ #define RIG_MODEL_OS535 RIG_MAKE_MODEL(RIG_ICOM, 52) #define RIG_MODEL_OS456 RIG_MAKE_MODEL(RIG_ICOM, 53) - /* * TenTec (CI-V) */ @@ -292,7 +309,6 @@ #define RIG_MODEL_PARAGON2 RIG_MAKE_MODEL(RIG_ICOM, 59) #define RIG_MODEL_DELTAII RIG_MAKE_MODEL(RIG_ICOM, 64) - /* * Icom PCR */ @@ -303,7 +319,6 @@ #define RIG_MODEL_PCR1500 RIG_MAKE_MODEL(RIG_PCR, 3) #define RIG_MODEL_PCR2500 RIG_MAKE_MODEL(RIG_PCR, 4) - /* * AOR */ @@ -326,7 +341,6 @@ #define RIG_MODEL_AR7030P RIG_MAKE_MODEL(RIG_AOR, 15) #define RIG_MODEL_SR2200 RIG_MAKE_MODEL(RIG_AOR, 16) - /* * JRC */ @@ -340,7 +354,6 @@ #define RIG_MODEL_NRD535 RIG_MAKE_MODEL(RIG_JRC, 6) #define RIG_MODEL_NRD545 RIG_MAKE_MODEL(RIG_JRC, 7) - /* * Radio Shack * Actually, they might be either Icom or Uniden. TBC --SF @@ -354,7 +367,6 @@ #define RIG_MODEL_RS2042 RIG_MAKE_MODEL(RIG_RADIOSHACK, 5) /* w/ OptoElectronics OS435 Board */ #define RIG_MODEL_RS2041 RIG_MAKE_MODEL(RIG_RADIOSHACK, 6) /* PRO-2041 */ - /* * Uniden */ @@ -373,7 +385,6 @@ #define RIG_MODEL_BCD996T RIG_MAKE_MODEL(RIG_UNIDEN, 11) #define RIG_MODEL_BC898 RIG_MAKE_MODEL(RIG_UNIDEN, 12) - /* * Drake */ @@ -383,7 +394,6 @@ #define RIG_MODEL_DKR8A RIG_MAKE_MODEL(RIG_DRAKE, 2) #define RIG_MODEL_DKR8B RIG_MAKE_MODEL(RIG_DRAKE, 3) - /* * Lowe */ @@ -394,7 +404,6 @@ #define RIG_MODEL_HF250 RIG_MAKE_MODEL(RIG_LOWE, 3) #define RIG_MODEL_HF235 RIG_MAKE_MODEL(RIG_LOWE, 4) - /* * Racal */ @@ -406,7 +415,6 @@ #define RIG_MODEL_RA3710 RIG_MAKE_MODEL(RIG_RACAL, 4) #define RIG_MODEL_RA3702 RIG_MAKE_MODEL(RIG_RACAL, 5) - /* * Watkins-Johnson */ @@ -417,7 +425,6 @@ #define RIG_MODEL_WJ8711 RIG_MAKE_MODEL(RIG_WJ, 3) #define RIG_MODEL_WJ8888 RIG_MAKE_MODEL(RIG_WJ, 4) - /* * Rohde & Schwarz--ek */ @@ -429,7 +436,6 @@ #define RIG_MODEL_EK895 RIG_MAKE_MODEL(RIG_EK, 4) #define RIG_MODEL_EK070 RIG_MAKE_MODEL(RIG_EK, 5) - /* * Skanti */ @@ -440,7 +446,6 @@ #define RIG_MODEL_TRP9000 RIG_MAKE_MODEL(RIG_SKANTI, 3) #define RIG_MODEL_TRP8255 RIG_MAKE_MODEL(RIG_SKANTI, 4) - /* * WiNRADiO/LinRADiO */ @@ -458,7 +463,6 @@ #define RIG_MODEL_G305 RIG_MAKE_MODEL(RIG_WINRADIO, 10) #define RIG_MODEL_G315 RIG_MAKE_MODEL(RIG_WINRADIO, 11) - /* * Ten Tec */ @@ -477,7 +481,6 @@ #define RIG_MODEL_RX331 RIG_MAKE_MODEL(RIG_TENTEC, 12) #define RIG_MODEL_TT599 RIG_MAKE_MODEL(RIG_TENTEC, 13) /* Eagle */ - /* * Alinco */ @@ -486,7 +489,6 @@ #define RIG_MODEL_DX77 RIG_MAKE_MODEL(RIG_ALINCO, 1) #define RIG_MODEL_DXSR8 RIG_MAKE_MODEL(RIG_ALINCO, 2) - /* * Kachina */ @@ -494,7 +496,6 @@ #define RIG_BACKEND_KACHINA "kachina" #define RIG_MODEL_505DSP RIG_MAKE_MODEL(RIG_KACHINA, 1) - /* * Gnuradio backend */ @@ -506,7 +507,6 @@ #define RIG_MODEL_GRAUDIOIQ RIG_MAKE_MODEL(RIG_GNURADIO, 4) /* I&Q stereo sound card source */ #define RIG_MODEL_USRP_G RIG_MAKE_MODEL(RIG_GNURADIO, 5) /* Universal Software Radio Peripheral */ - /* * Microtune tuners */ @@ -516,7 +516,6 @@ #define RIG_MODEL_MICROTUNE_4702 RIG_MAKE_MODEL(RIG_MICROTUNE, 2) /* Alan's */ #define RIG_MODEL_MICROTUNE_4707 RIG_MAKE_MODEL(RIG_MICROTUNE, 3) - /* * TAPR */ @@ -524,7 +523,6 @@ #define RIG_BACKEND_TAPR "tapr" #define RIG_MODEL_DSP10 RIG_MAKE_MODEL(RIG_TAPR, 1) - /* * Flex-radio */ @@ -535,7 +533,6 @@ #define RIG_MODEL_DTTSP RIG_MAKE_MODEL(RIG_FLEXRADIO, 3) #define RIG_MODEL_DTTSP_UDP RIG_MAKE_MODEL(RIG_FLEXRADIO, 4) - /* * VEB Funkwerk Köpenick RFT */ @@ -543,7 +540,6 @@ #define RIG_BACKEND_RFT "rft" #define RIG_MODEL_EKD500 RIG_MAKE_MODEL(RIG_RFT, 1) - /* * Various kits */ @@ -569,7 +565,6 @@ #define RIG_MODEL_FUNCUBEDONGLEPLUS RIG_MAKE_MODEL(RIG_KIT, 18) /* FunCUBE Dongle Pro+ */ #define RIG_MODEL_RSHFIQ RIG_MAKE_MODEL(RIG_KIT, 19) /* RS-HFIQ */ - /* * SW/FM/TV tuner cards supported by Video4Linux,*BSD, .. */ @@ -578,7 +573,6 @@ #define RIG_MODEL_V4L RIG_MAKE_MODEL(RIG_TUNER, 1) #define RIG_MODEL_V4L2 RIG_MAKE_MODEL(RIG_TUNER, 2) - /* * Rohde & Schwarz--rs */ @@ -589,7 +583,6 @@ #define RIG_MODEL_XK2100 RIG_MAKE_MODEL(RIG_RS, 3) #define RIG_MODEL_EK89X RIG_MAKE_MODEL(RIG_RS, 4) - /* * Phillips/Simoco PRM80 */ @@ -598,7 +591,6 @@ #define RIG_MODEL_PRM8060 RIG_MAKE_MODEL(RIG_PRM80, 1) #define RIG_MODEL_PRM8070 RIG_MAKE_MODEL(RIG_PRM80, 2) - /* * ADAT by HB9CBU * @@ -608,7 +600,6 @@ #define RIG_BACKEND_ADAT "adat" #define RIG_MODEL_ADT_200A RIG_MAKE_MODEL(RIG_ADAT, 1) - /* * ICOM Marine */ @@ -619,7 +610,6 @@ #define RIG_MODEL_IC_M710 RIG_MAKE_MODEL(RIG_ICMARINE, 3) #define RIG_MODEL_IC_M803 RIG_MAKE_MODEL(RIG_ICMARINE, 4) - /* * Dorji transceiver modules */ @@ -636,6 +626,7 @@ #define RIG_MODEL_BARRETT_2050 RIG_MAKE_MODEL(RIG_BARRETT, 1) #define RIG_MODEL_BARRETT_950 RIG_MAKE_MODEL(RIG_BARRETT, 2) #define RIG_MODEL_BARRETT_4050 RIG_MAKE_MODEL(RIG_BARRETT, 3) +#define RIG_MODEL_BARRETT_4100 RIG_MAKE_MODEL(RIG_BARRETT, 4) /* * Elad @@ -658,8 +649,14 @@ #define RIG_GOMSPACE 35 #define RIG_BACKEND_GOMSPACE "gomspace" #define RIG_MODEL_GS100 RIG_MAKE_MODEL(RIG_GOMSPACE, 1) -//! @endcond +/* + * MDS Microwave Data Systems https://en.wikipedia.org/wiki/Microwave_Data_Systems + */ +#define RIG_MDS 36 +#define RIG_BACKEND_MDS "MDS" +#define RIG_MODEL_MDS4710 RIG_MAKE_MODEL(RIG_MDS, 1) +#define RIG_MODEL_MDS9710 RIG_MAKE_MODEL(RIG_MDS, 2) /* * TODO: RIG_MODEL_KWZ30, KNEISNER +DOERING @@ -667,6 +664,15 @@ etc. */ +/* + * AnyTone rigs + */ +#define RIG_ANYTONE 37 +#define RIG_BACKEND_ANYTONE "AnyTone" +#define RIG_MODEL_ATD578UVIII RIG_MAKE_MODEL(RIG_ANYTONE, 1) + + +//! @endcond /*! \typedef typedef int rig_model_t \brief Convenience type definition for rig model. diff --git a/hamlib/rotator.h b/hamlib/rotator.h index 0b67230..7468752 100644 --- a/hamlib/rotator.h +++ b/hamlib/rotator.h @@ -18,6 +18,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ #ifndef _ROTATOR_H #define _ROTATOR_H 1 @@ -413,8 +414,8 @@ struct rot_caps { int (*rot_open)(ROT *rot); /*!< Pointer to backend implementation of ::rot_open(). */ int (*rot_close)(ROT *rot); /*!< Pointer to backend implementation of ::rot_close(). */ - int (*set_conf)(ROT *rot, token_t token, const char *val); /*!< Pointer to backend implementation of ::rot_set_conf(). */ - int (*get_conf)(ROT *rot, token_t token, char *val); /*!< Pointer to backend implementation of ::rot_get_conf(). */ + int (*set_conf)(ROT *rot, hamlib_token_t token, const char *val); /*!< Pointer to backend implementation of ::rot_set_conf(). */ + int (*get_conf)(ROT *rot, hamlib_token_t token, char *val); /*!< Pointer to backend implementation of ::rot_get_conf(). */ /* * General API commands, from most primitive to least.. :() @@ -441,19 +442,19 @@ struct rot_caps { int (*set_parm)(ROT *rot, setting_t parm, value_t val); /*!< Pointer to backend implementation of ::rot_set_parm(). */ int (*get_parm)(ROT *rot, setting_t parm, value_t *val); /*!< Pointer to backend implementation of ::rot_get_parm(). */ - int (*set_ext_level)(ROT *rot, token_t token, value_t val); /*!< Pointer to backend implementation of ::rot_set_ext_level(). */ - int (*get_ext_level)(ROT *rot, token_t token, value_t *val); /*!< Pointer to backend implementation of ::rot_get_ext_level(). */ + int (*set_ext_level)(ROT *rot, hamlib_token_t token, value_t val); /*!< Pointer to backend implementation of ::rot_set_ext_level(). */ + int (*get_ext_level)(ROT *rot, hamlib_token_t token, value_t *val); /*!< Pointer to backend implementation of ::rot_get_ext_level(). */ - int (*set_ext_func)(ROT *rot, token_t token, int status); /*!< Pointer to backend implementation of ::rot_set_ext_func(). */ - int (*get_ext_func)(ROT *rot, token_t token, int *status); /*!< Pointer to backend implementation of ::rot_get_ext_func(). */ + int (*set_ext_func)(ROT *rot, hamlib_token_t token, int status); /*!< Pointer to backend implementation of ::rot_set_ext_func(). */ + int (*get_ext_func)(ROT *rot, hamlib_token_t token, int *status); /*!< Pointer to backend implementation of ::rot_get_ext_func(). */ - int (*set_ext_parm)(ROT *rot, token_t token, value_t val); /*!< Pointer to backend implementation of ::rot_set_ext_parm(). */ - int (*get_ext_parm)(ROT *rot, token_t token, value_t *val); /*!< Pointer to backend implementation of ::rot_get_ext_parm(). */ + int (*set_ext_parm)(ROT *rot, hamlib_token_t token, value_t val); /*!< Pointer to backend implementation of ::rot_set_ext_parm(). */ + int (*get_ext_parm)(ROT *rot, hamlib_token_t token, value_t *val); /*!< Pointer to backend implementation of ::rot_get_ext_parm(). */ int (*get_status)(ROT *rot, rot_status_t *status); /*!< Pointer to backend implementation of ::rot_get_status(). */ const char *macro_name; /*!< Rotator model macro name. */ - int (*get_conf2)(ROT *rot, token_t token, char *val, int val_len); /*!< Pointer to backend implementation of ::rot_get_conf2(). */ + int (*get_conf2)(ROT *rot, hamlib_token_t token, char *val, int val_len); /*!< Pointer to backend implementation of ::rot_get_conf2(). */ }; //! @cond Doxygen_Suppress #define ROT_MODEL(arg) .rot_model=arg,.macro_name=#arg @@ -544,16 +545,16 @@ rot_cleanup HAMLIB_PARAMS((ROT *rot)); extern HAMLIB_EXPORT(int) rot_set_conf HAMLIB_PARAMS((ROT *rot, - token_t token, + hamlib_token_t token, const char *val)); extern HAMLIB_EXPORT(int) rot_get_conf HAMLIB_PARAMS((ROT *rot, - token_t token, + hamlib_token_t token, char *val)); extern HAMLIB_EXPORT(int) rot_get_conf2 HAMLIB_PARAMS((ROT *rot, - token_t token, + hamlib_token_t token, char *val, int val_len)); @@ -635,29 +636,29 @@ rot_get_parm HAMLIB_PARAMS((ROT *rig, extern HAMLIB_EXPORT(int) rot_set_ext_level HAMLIB_PARAMS((ROT *rig, - token_t token, + hamlib_token_t token, value_t val)); extern HAMLIB_EXPORT(int) rot_get_ext_level HAMLIB_PARAMS((ROT *rig, - token_t token, + hamlib_token_t token, value_t *val)); extern HAMLIB_EXPORT(int) rot_set_ext_func HAMLIB_PARAMS((ROT *rig, - token_t token, + hamlib_token_t token, int status)); extern HAMLIB_EXPORT(int) rot_get_ext_func HAMLIB_PARAMS((ROT *rig, - token_t token, + hamlib_token_t token, int *status)); extern HAMLIB_EXPORT(int) rot_set_ext_parm HAMLIB_PARAMS((ROT *rig, - token_t token, + hamlib_token_t token, value_t val)); extern HAMLIB_EXPORT(int) rot_get_ext_parm HAMLIB_PARAMS((ROT *rig, - token_t token, + hamlib_token_t token, value_t *val)); extern HAMLIB_EXPORT(const char *) @@ -700,7 +701,7 @@ extern HAMLIB_EXPORT(const struct confparams *) rot_confparam_lookup HAMLIB_PARAMS((ROT *rot, const char *name)); -extern HAMLIB_EXPORT(token_t) +extern HAMLIB_EXPORT(hamlib_token_t) rot_token_lookup HAMLIB_PARAMS((ROT *rot, const char *name)); @@ -729,8 +730,8 @@ rot_ext_lookup HAMLIB_PARAMS((ROT *rot, extern HAMLIB_EXPORT(const struct confparams *) rot_ext_lookup_tok HAMLIB_PARAMS((ROT *rot, - token_t token)); -extern HAMLIB_EXPORT(token_t) + hamlib_token_t token)); +extern HAMLIB_EXPORT(hamlib_token_t) rot_ext_token_lookup HAMLIB_PARAMS((ROT *rot, const char *name)); @@ -797,6 +798,8 @@ extern HAMLIB_EXPORT(const char *) rot_strlevel(setting_t); extern HAMLIB_EXPORT(const char *) rot_strparm(setting_t); extern HAMLIB_EXPORT(const char *) rot_strstatus(rot_status_t); +extern HAMLIB_EXPORT(void *) rot_data_pointer(ROT *rot, rig_ptrx_t idx); + //! @endcond /** diff --git a/hamlib/rotlist.h b/hamlib/rotlist.h index a96b9a5..d043a14 100644 --- a/hamlib/rotlist.h +++ b/hamlib/rotlist.h @@ -637,9 +637,17 @@ #define ROT_MODEL_ANDROIDSENSOR ROT_MAKE_MODEL(ROT_ANDROIDSENSOR, 1) /** - * \brief A macro that returns the model number of the GRBLTRK backend. + * \brief A macro that returns the model number of the ROT_MODEL_GRBLTRK_SER backend. * - * \def ROT_MODEL_GRBLTRK + * \def ROT_MODEL_GRBLTRK_SER + * + * The GRBLTRK backend can be used with rotators that support the GRBL + * protocol. + */ +/** + * \brief A macro that returns the model number of the ROT_MODEL_GRBLTRK_NET backend. + * + * \def ROT_MODEL_GRBLTRK_NET * * The GRBLTRK backend can be used with rotators that support the GRBL * protocol. @@ -651,6 +659,48 @@ #define ROT_MODEL_GRBLTRK_SER ROT_MAKE_MODEL(ROT_GRBLTRK, 1) #define ROT_MODEL_GRBLTRK_NET ROT_MAKE_MODEL(ROT_GRBLTRK, 2) +/** + * \brief A macro that returns the model number of the FLIR backend. + * + * \def ROT_MODEL_FLIR + * + * The FLIR backend can be used with FLIR and DirectedPercepition + * rotators using the PTU protocol (e.g. PTU-D48). Currently only + * the serial interface is supported and no ethernet. + */ +//! @cond Doxygen_Suppress +#define ROT_FLIR 25 +#define ROT_BACKEND_FLIR "flir" +//! @endcond +#define ROT_MODEL_FLIR ROT_MAKE_MODEL(ROT_FLIR, 1) + +/** + * \brief A macro that returns the model number of the APEX backend. + * + * \def ROT_MODEL_APEX_SHARED_LOOP + * + * The APEX backend can be used with APEX * rotators. + */ +//! @cond Doxygen_Suppress +#define ROT_APEX 26 +#define ROT_BACKEND_APEX "apex" +//! @endcond +#define ROT_MODEL_APEX_SHARED_LOOP ROT_MAKE_MODEL(ROT_APEX, 1) + +/** + * \brief A macro that returns the model number of the SAEBRTRACK backend. + * + * \def ROT_MODEL_SAEBRTRACK + * + * The SAEBRTRACK backend can be used with SAEBRTRACK * rotators. + */ +//! @cond Doxygen_Suppress +#define ROT_SAEBRTRACK 27 +#define ROT_BACKEND_SAEBRTRACK "SAEBRTrack" +//! @endcond +#define ROT_MODEL_SAEBRTRACK ROT_MAKE_MODEL(ROT_SAEBRTRACK, 1) + + /** * \brief Convenience type definition for a rotator model. *