From d340f747c1a2d0283d9512b775931b8d2a56367d Mon Sep 17 00:00:00 2001 From: Mikael Nousiainen Date: Fri, 23 Oct 2020 00:04:43 +0300 Subject: [PATCH] Add separate definitions for FTDX101 to make fixes for filters and modes. Fix many newcat commands for FTDX101 and some other newcat Yaesu rigs. (cherry picked from commit fea5ed875d8c201f83f4a35a4d6b55062f0c2ccd) --- rigs/yaesu/Makefile.am | 2 +- rigs/yaesu/ft1200.h | 18 +--- rigs/yaesu/ft5000.c | 165 --------------------------------- rigs/yaesu/ft5000.h | 21 ++--- rigs/yaesu/ft891.h | 15 ++- rigs/yaesu/ft991.h | 15 ++- rigs/yaesu/ftdx101.c | 205 +++++++++++++++++++++++++++++++++++++++++ rigs/yaesu/ftdx101.h | 121 ++++++++++++++++++++++++ rigs/yaesu/newcat.c | 91 +++++++++++++++--- rigs/yaesu/newcat.h | 2 +- 10 files changed, 429 insertions(+), 226 deletions(-) create mode 100644 rigs/yaesu/ftdx101.c create mode 100644 rigs/yaesu/ftdx101.h diff --git a/rigs/yaesu/Makefile.am b/rigs/yaesu/Makefile.am index 9afd547d3..22aff93f9 100644 --- a/rigs/yaesu/Makefile.am +++ b/rigs/yaesu/Makefile.am @@ -10,7 +10,7 @@ YAESUSRC = ft100.c ft100.h ft747.c ft747.h ft817.c ft817.h ft847.c ft847.h \ ## Yaesu radios that use the new Kenwood style CAT commands NEWCATSRC = newcat.c newcat.h ft450.c ft450.h ft950.c ft950.h ft991.c ft991.h \ ft2000.c ft2000.h ft9000.c ft9000.h ft5000.c ft5000.h ft1200.c ft1200.h \ - ft891.c ft891.h + ft891.c ft891.h ftdx101.c ftdx101.h noinst_LTLIBRARIES = libhamlib-yaesu.la libhamlib_yaesu_la_SOURCES = $(YAESUSRC) $(NEWCATSRC) yaesu.c yaesu.h diff --git a/rigs/yaesu/ft1200.h b/rigs/yaesu/ft1200.h index 78f2555fe..af992b442 100644 --- a/rigs/yaesu/ft1200.h +++ b/rigs/yaesu/ft1200.h @@ -29,20 +29,12 @@ #ifndef _FT1200_H #define _FT1200_H 1 -#if 0 -#define TRUE 1 -#define FALSE 0 -#define ON TRUE -#define OFF FALSE -#endif - #define FT1200_VFO_ALL (RIG_VFO_A|RIG_VFO_B) /* Receiver caps */ #define FT1200_ALL_RX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|\ - RIG_MODE_RTTY|RIG_MODE_RTTYR|\ - RIG_MODE_PKTLSB|RIG_MODE_PKTUSB|RIG_MODE_PKTFM) + RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_PKTLSB|RIG_MODE_PKTUSB|RIG_MODE_PKTFM|RIG_MODE_FM) #define FT1200_SSB_CW_RX_MODES (RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|\ RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_PKTLSB|RIG_MODE_PKTUSB) @@ -51,13 +43,10 @@ #define FT1200_CW_RTTY_PKT_RX_MODES (RIG_MODE_RTTY|RIG_MODE_RTTYR|\ RIG_MODE_PKTUSB|RIG_MODE_PKTLSB|RIG_MODE_CW|RIG_MODE_CWR) - - - /* TRX caps */ #define FT1200_OTHER_TX_MODES (RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_RTTY| \ - RIG_MODE_PKTLSB|RIG_MODE_PKTUSB|RIG_MODE_PKTFM) /* 100 W class */ + RIG_MODE_PKTLSB|RIG_MODE_PKTUSB|RIG_MODE_PKTFM|RIG_MODE_FM) /* 100 W class */ #define FT1200_AM_TX_MODES (RIG_MODE_AM) /* set 25W max */ /* TBC */ @@ -68,7 +57,8 @@ RIG_LEVEL_KEYSPD|RIG_LEVEL_AF|RIG_LEVEL_AGC|\ RIG_LEVEL_METER|RIG_LEVEL_BKINDL|RIG_LEVEL_SQL|\ RIG_LEVEL_VOXGAIN|RIG_LEVEL_VOXDELAY|RIG_LEVEL_COMP|\ - RIG_LEVEL_ANTIVOX|RIG_LEVEL_NR|RIG_LEVEL_NOTCHF) + RIG_LEVEL_ANTIVOX|RIG_LEVEL_NR|RIG_LEVEL_NOTCHF|\ + RIG_LEVEL_MONITOR_GAIN) /* TBC */ #define FT1200_FUNCS (RIG_FUNC_TONE|RIG_FUNC_TSQL|RIG_FUNC_LOCK|\ diff --git a/rigs/yaesu/ft5000.c b/rigs/yaesu/ft5000.c index 61ffc0e42..2131dfcd6 100644 --- a/rigs/yaesu/ft5000.c +++ b/rigs/yaesu/ft5000.c @@ -381,168 +381,3 @@ const struct rig_caps ftdx3000_caps = .get_channel = newcat_get_channel, }; - -const struct rig_caps ftdx101d_caps = -{ - RIG_MODEL(RIG_MODEL_FTDX101D), - .model_name = "FT-DX101D", - .mfg_name = "Yaesu", - .version = NEWCAT_VER ".5", - .copyright = "LGPL", - .status = RIG_STATUS_STABLE, - .rig_type = RIG_TYPE_TRANSCEIVER, - .ptt_type = RIG_PTT_RIG, - .dcd_type = RIG_DCD_NONE, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 4800, /* Default rate per manual */ - .serial_rate_max = 38400, - .serial_data_bits = 8, - .serial_stop_bits = 1, /* Assumed since manual makes no mention */ - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_HARDWARE, - .write_delay = FTDX5000_WRITE_DELAY, - .post_write_delay = FTDX5000_POST_WRITE_DELAY, - .timeout = 2000, - .retry = 3, - .has_get_func = FTDX5000_FUNCS, - .has_set_func = FTDX5000_FUNCS, - .has_get_level = FTDX5000_LEVELS, - .has_set_level = RIG_LEVEL_SET(FTDX5000_LEVELS), - .has_get_parm = RIG_PARM_NONE, - .has_set_parm = RIG_PARM_NONE, - .level_gran = { - [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, - [LVL_CWPITCH] = { .min = { .i = 300 }, .max = { .i = 1050 }, .step = { .i = 10 } }, - }, - .ctcss_list = common_ctcss_list, - .dcs_list = NULL, - .preamp = { 10, 20, RIG_DBLST_END, }, /* TBC */ - .attenuator = { 6, 12, 18, RIG_DBLST_END, }, - .max_rit = Hz(9999), - .max_xit = Hz(9999), - .max_ifshift = Hz(1200), - .vfo_ops = FTDX5000_VFO_OPS, - .targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE | RIG_TARGETABLE_FUNC | RIG_TARGETABLE_LEVEL, - .transceive = RIG_TRN_OFF, /* May enable later as the 5000 has an Auto Info command */ - .bank_qty = 0, - .chan_desc_sz = 0, - .str_cal = FTDX5000_STR_CAL, - .chan_list = { - { 1, 99, RIG_MTYPE_MEM, NEWCAT_MEM_CAP }, - { 100, 117, RIG_MTYPE_EDGE, NEWCAT_MEM_CAP }, /* two by two */ - RIG_CHAN_END, - }, - - .rx_range_list1 = { - /* General coverage + ham, ANT_5 is RX only antenna */ - {kHz(30), MHz(60), FTDX5000_ALL_RX_MODES, -1, -1, FTDX5000_VFO_ALL, FTDX5000_TX_ANTS | RIG_ANT_5, "USA"}, - RIG_FRNG_END, - }, - - .tx_range_list1 = { /* the 101DX is 100W and the MP is 200W */ - FRQ_RNG_HF(1, FTDX5000_OTHER_TX_MODES, W(5), W(200), FTDX5000_VFO_ALL, FTDX5000_TX_ANTS), - FRQ_RNG_HF(1, FTDX5000_AM_TX_MODES, W(2), W(75), FTDX5000_VFO_ALL, FTDX5000_TX_ANTS), /* AM class */ - FRQ_RNG_6m(1, FTDX5000_OTHER_TX_MODES, W(5), W(200), FTDX5000_VFO_ALL, FTDX5000_TX_ANTS), - FRQ_RNG_6m(1, FTDX5000_AM_TX_MODES, W(2), W(75), FTDX5000_VFO_ALL, FTDX5000_TX_ANTS), /* AM class */ - - RIG_FRNG_END, - }, - - .rx_range_list2 = { - {kHz(30), MHz(60), FTDX5000_ALL_RX_MODES, -1, -1, FTDX5000_VFO_ALL, FTDX5000_TX_ANTS | RIG_ANT_5, "EUR"}, - RIG_FRNG_END, - }, - - .tx_range_list2 = { - FRQ_RNG_HF(2, FTDX5000_OTHER_TX_MODES, W(5), W(200), FTDX5000_VFO_ALL, FTDX5000_TX_ANTS), - FRQ_RNG_HF(2, FTDX5000_AM_TX_MODES, W(2), W(75), FTDX5000_VFO_ALL, FTDX5000_TX_ANTS), /* AM class */ - FRQ_RNG_6m(2, FTDX5000_OTHER_TX_MODES, W(5), W(200), FTDX5000_VFO_ALL, FTDX5000_TX_ANTS), - FRQ_RNG_6m(2, FTDX5000_AM_TX_MODES, W(2), W(75), FTDX5000_VFO_ALL, FTDX5000_TX_ANTS), /* AM class */ - FRQ_RNG_4m_REGION2(FTDX5000_OTHER_TX_MODES, W(5), W(200), FTDX5000_VFO_ALL, FTDX5000_TX_ANTS), - FRQ_RNG_4m_REGION2(FTDX5000_AM_TX_MODES, W(2), W(75), FTDX5000_VFO_ALL, FTDX5000_TX_ANTS), /* AM class */ - - RIG_FRNG_END, - }, - - .tuning_steps = { - {FTDX5000_SSB_CW_RX_MODES, Hz(10)}, /* Normal */ - {FTDX5000_SSB_CW_RX_MODES, Hz(100)}, /* Fast */ - - {FTDX5000_AM_RX_MODES, Hz(100)}, /* Normal */ - {FTDX5000_AM_RX_MODES, kHz(1)}, /* Fast */ - - {FTDX5000_FM_RX_MODES, Hz(100)}, /* Normal */ - {FTDX5000_FM_RX_MODES, kHz(1)}, /* Fast */ - - RIG_TS_END, - - }, - - /* mode/filter list, .remember = order matters! */ - .filters = { - {FTDX5000_CW_RTTY_PKT_RX_MODES, Hz(1800)}, /* Normal CW, RTTY, PKT/USER */ - {FTDX5000_CW_RTTY_PKT_RX_MODES, Hz(500)}, /* Narrow CW, RTTY, PKT/USER */ - {FTDX5000_CW_RTTY_PKT_RX_MODES, Hz(2400)}, /* Wide CW, RTTY, PKT/USER */ - {RIG_MODE_SSB, Hz(2400)}, /* Normal SSB */ - {RIG_MODE_SSB, Hz(1800)}, /* Narrow SSB */ - {RIG_MODE_SSB, Hz(3000)}, /* Wide SSB */ - {RIG_MODE_AM, Hz(9000)}, /* Normal AM */ - {RIG_MODE_AM, Hz(6000)}, /* Narrow AM */ - {FTDX5000_FM_RX_MODES, Hz(15000)}, /* Normal FM */ - {FTDX5000_FM_RX_MODES, Hz(8000)}, /* Narrow FM */ - - RIG_FLT_END, - }, - - .priv = NULL, - - .rig_init = newcat_init, - .rig_cleanup = newcat_cleanup, - .rig_open = newcat_open, /* port opened */ - .rig_close = newcat_close, /* port closed */ - - .cfgparams = newcat_cfg_params, - .set_conf = newcat_set_conf, - .get_conf = newcat_get_conf, - .set_freq = newcat_set_freq, - .get_freq = newcat_get_freq, - .set_mode = newcat_set_mode, - .get_mode = newcat_get_mode, - .set_vfo = newcat_set_vfo, - .get_vfo = newcat_get_vfo, - .set_ptt = newcat_set_ptt, - .get_ptt = newcat_get_ptt, - .set_split_vfo = newcat_set_split_vfo, - .get_split_vfo = newcat_get_split_vfo, - .set_rit = newcat_set_rit, - .get_rit = newcat_get_rit, - .set_xit = newcat_set_xit, - .get_xit = newcat_get_xit, - .set_ant = newcat_set_ant, - .get_ant = newcat_get_ant, - .get_func = newcat_get_func, - .set_func = newcat_set_func, - .get_level = newcat_get_level, - .set_level = newcat_set_level, - .get_mem = newcat_get_mem, - .set_mem = newcat_set_mem, - .vfo_op = newcat_vfo_op, - .get_info = newcat_get_info, - .power2mW = newcat_power2mW, - .mW2power = newcat_mW2power, - .set_rptr_shift = newcat_set_rptr_shift, - .get_rptr_shift = newcat_get_rptr_shift, - .set_ctcss_tone = newcat_set_ctcss_tone, - .get_ctcss_tone = newcat_get_ctcss_tone, - .set_ctcss_sql = newcat_set_ctcss_sql, - .get_ctcss_sql = newcat_get_ctcss_sql, - .set_powerstat = newcat_set_powerstat, - .get_powerstat = newcat_get_powerstat, - .get_ts = newcat_get_ts, - .set_ts = newcat_set_ts, - .set_trn = newcat_set_trn, - .get_trn = newcat_get_trn, - .set_channel = newcat_set_channel, - .get_channel = newcat_get_channel, - -}; diff --git a/rigs/yaesu/ft5000.h b/rigs/yaesu/ft5000.h index a5ddd8a4e..326bcc83b 100644 --- a/rigs/yaesu/ft5000.h +++ b/rigs/yaesu/ft5000.h @@ -28,35 +28,25 @@ #ifndef _FT5000_H #define _FT5000_H 1 -#if 0 -#define TRUE 1 -#define FALSE 0 -#define ON TRUE -#define OFF FALSE -#endif - #define FTDX5000_VFO_ALL (RIG_VFO_MAIN|RIG_VFO_SUB) /* Receiver caps */ #define FTDX5000_ALL_RX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|\ - RIG_MODE_RTTY|RIG_MODE_RTTYR|\ - RIG_MODE_PKTLSB|RIG_MODE_PKTUSB|RIG_MODE_PKTFM) + RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_PKTLSB|RIG_MODE_PKTUSB|RIG_MODE_PKTFM|\ + RIG_MODE_FM|RIG_MODE_FMN) #define FTDX5000_SSB_CW_RX_MODES (RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|\ RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_PKTLSB|RIG_MODE_PKTUSB) #define FTDX5000_AM_RX_MODES (RIG_MODE_AM) -#define FTDX5000_FM_RX_MODES (RIG_MODE_FM|RIG_MODE_PKTFM) +#define FTDX5000_FM_RX_MODES (RIG_MODE_FM|RIG_MODE_PKTFM|RIG_MODE_FMN) #define FTDX5000_CW_RTTY_PKT_RX_MODES (RIG_MODE_RTTY|RIG_MODE_RTTYR|\ RIG_MODE_PKTUSB|RIG_MODE_PKTLSB|RIG_MODE_CW|RIG_MODE_CWR) - - - /* TRX caps */ #define FTDX5000_OTHER_TX_MODES (RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_RTTY| \ - RIG_MODE_PKTLSB|RIG_MODE_PKTUSB|RIG_MODE_PKTFM) /* 100 W class */ + RIG_MODE_PKTLSB|RIG_MODE_PKTUSB|RIG_MODE_FM|RIG_MODE_PKTFM|RIG_MODE_FMN) /* 100 W class */ #define FTDX5000_AM_TX_MODES (RIG_MODE_AM) /* set 25W max */ /* TBC */ @@ -67,7 +57,8 @@ RIG_LEVEL_KEYSPD|RIG_LEVEL_AF|RIG_LEVEL_AGC|\ RIG_LEVEL_METER|RIG_LEVEL_BKINDL|RIG_LEVEL_SQL|\ RIG_LEVEL_VOXGAIN|RIG_LEVEL_VOXDELAY|RIG_LEVEL_COMP|\ - RIG_LEVEL_ANTIVOX|RIG_LEVEL_NR|RIG_LEVEL_NOTCHF) + RIG_LEVEL_ANTIVOX|RIG_LEVEL_NR|RIG_LEVEL_NOTCHF|\ + RIG_LEVEL_MONITOR_GAIN) /* TBC */ #define FTDX5000_FUNCS (RIG_FUNC_TONE|RIG_FUNC_TSQL|RIG_FUNC_LOCK|\ diff --git a/rigs/yaesu/ft891.h b/rigs/yaesu/ft891.h index f8c5e534c..67610cdc5 100644 --- a/rigs/yaesu/ft891.h +++ b/rigs/yaesu/ft891.h @@ -28,28 +28,24 @@ #ifndef _FT891_H #define _FT891_H 1 -#define TRUE 1 -#define FALSE 0 -#define ON TRUE -#define OFF FALSE - #define FT891_VFO_ALL (RIG_VFO_A|RIG_VFO_B) /* Receiver caps */ #define FT891_ALL_RX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|\ - RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_PKTLSB|RIG_MODE_PKTUSB|RIG_MODE_PKTFM) + RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_PKTLSB|RIG_MODE_PKTUSB|RIG_MODE_FM|RIG_MODE_FMN) #define FT891_SSB_CW_RX_MODES (RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|\ RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_PKTLSB|RIG_MODE_PKTUSB) #define FT891_AM_RX_MODES (RIG_MODE_AM) -#define FT891_FM_RX_MODES (RIG_MODE_FM|RIG_MODE_PKTFM) +#define FT891_FM_RX_MODES (RIG_MODE_FM|RIG_MODE_FMN) #define FT891_CW_RX_MODES (RIG_MODE_CW|RIG_MODE_CWR) #define FT891_CW_RTTY_PKT_RX_MODES (RIG_MODE_RTTY|RIG_MODE_RTTYR|\ RIG_MODE_PKTUSB|RIG_MODE_PKTLSB|RIG_MODE_CW|RIG_MODE_CWR) /* TRX caps */ -#define FT891_OTHER_TX_MODES (RIG_MODE_CW| RIG_MODE_USB| RIG_MODE_LSB | RIG_MODE_PKTUSB | RIG_MODE_PKTLSB ) /* 100 W class */ +#define FT891_OTHER_TX_MODES (RIG_MODE_CW|RIG_MODE_USB|RIG_MODE_LSB|RIG_MODE_PKTUSB|RIG_MODE_PKTLSB|\ + RIG_MODE_FM|RIG_MODE_FMN) /* 100 W class */ #define FT891_AM_TX_MODES (RIG_MODE_AM) /* set 25W max */ #define FT891_LEVELS (RIG_LEVEL_ATT|RIG_LEVEL_PREAMP|RIG_LEVEL_STRENGTH|\ @@ -59,7 +55,8 @@ RIG_LEVEL_KEYSPD|RIG_LEVEL_AF|RIG_LEVEL_AGC|\ RIG_LEVEL_METER|RIG_LEVEL_BKINDL|RIG_LEVEL_SQL|\ RIG_LEVEL_VOXGAIN|RIG_LEVEL_VOXDELAY|RIG_LEVEL_COMP|\ - RIG_LEVEL_ANTIVOX|RIG_LEVEL_NR|RIG_LEVEL_NOTCHF) + RIG_LEVEL_ANTIVOX|RIG_LEVEL_NR|RIG_LEVEL_NOTCHF|\ + RIG_LEVEL_MONITOR_GAIN) #define FT891_FUNCS (RIG_FUNC_TONE|RIG_FUNC_TSQL|RIG_FUNC_LOCK|\ RIG_FUNC_MON|RIG_FUNC_NB|RIG_FUNC_NR|RIG_FUNC_VOX|\ diff --git a/rigs/yaesu/ft991.h b/rigs/yaesu/ft991.h index e7e9aa1b3..2c8a473f2 100644 --- a/rigs/yaesu/ft991.h +++ b/rigs/yaesu/ft991.h @@ -28,29 +28,25 @@ #ifndef _FT991_H #define _FT991_H 1 -#define TRUE 1 -#define FALSE 0 -#define ON TRUE -#define OFF FALSE - #define FT991_VFO_ALL (RIG_VFO_A|RIG_VFO_B) /* Receiver caps */ #define FT991_ALL_RX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|\ RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_PKTLSB|RIG_MODE_PKTUSB|RIG_MODE_PKTFM|\ - RIG_MODE_C4FM|RIG_MODE_FM|RIG_MODE_AMN) + RIG_MODE_C4FM|RIG_MODE_FM|RIG_MODE_AMN|RIG_MODE_FMN) #define FT991_SSB_CW_RX_MODES (RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|\ RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_PKTLSB|RIG_MODE_PKTUSB) #define FT991_AM_RX_MODES (RIG_MODE_AM|RIG_MODE_AMN) -#define FT991_FM_RX_MODES (RIG_MODE_FM|RIG_MODE_PKTFM|RIG_MODE_C4FM) +#define FT991_FM_RX_MODES (RIG_MODE_FM|RIG_MODE_PKTFM|RIG_MODE_FMN|RIG_MODE_C4FM) #define FT991_CW_RX_MODES (RIG_MODE_CW|RIG_MODE_CWR) #define FT991_CW_RTTY_PKT_RX_MODES (RIG_MODE_RTTY|RIG_MODE_RTTYR|\ RIG_MODE_PKTUSB|RIG_MODE_PKTLSB|RIG_MODE_CW|RIG_MODE_CWR) /* TRX caps */ -#define FT991_OTHER_TX_MODES (RIG_MODE_CW| RIG_MODE_USB| RIG_MODE_LSB | RIG_MODE_PKTUSB | RIG_MODE_PKTLSB ) /* 100 W class */ +#define FT991_OTHER_TX_MODES (RIG_MODE_CW|RIG_MODE_USB|RIG_MODE_LSB|RIG_MODE_PKTUSB|RIG_MODE_PKTLSB|\ + RIG_MODE_FM|RIG_MODE_PKTFM|RIG_MODE_FMN) /* 100 W class */ #define FT991_AM_TX_MODES (RIG_MODE_AM|RIG_MODE_AMN) /* set 25W max */ #define FT991_LEVELS (RIG_LEVEL_ATT|RIG_LEVEL_PREAMP|RIG_LEVEL_STRENGTH|\ @@ -60,7 +56,8 @@ RIG_LEVEL_KEYSPD|RIG_LEVEL_AF|RIG_LEVEL_AGC|\ RIG_LEVEL_METER|RIG_LEVEL_BKINDL|RIG_LEVEL_SQL|\ RIG_LEVEL_VOXGAIN|RIG_LEVEL_VOXDELAY|RIG_LEVEL_COMP|\ - RIG_LEVEL_ANTIVOX|RIG_LEVEL_NR|RIG_LEVEL_NOTCHF) + RIG_LEVEL_ANTIVOX|RIG_LEVEL_NR|RIG_LEVEL_NOTCHF|\ + RIG_LEVEL_MONITOR_GAIN) #define FT991_FUNCS (RIG_FUNC_TONE|RIG_FUNC_TSQL|RIG_FUNC_LOCK|\ RIG_FUNC_MON|RIG_FUNC_NB|RIG_FUNC_NR|RIG_FUNC_VOX|\ diff --git a/rigs/yaesu/ftdx101.c b/rigs/yaesu/ftdx101.c new file mode 100644 index 000000000..38c800616 --- /dev/null +++ b/rigs/yaesu/ftdx101.c @@ -0,0 +1,205 @@ +/* + * hamlib - (C) Frank Singleton 2000 (javabear at users.sourceforge.net) + * + * ftdx101.c - (C) Nate Bargmann 2007 (n0nb at arrl.net) + * (C) Stephane Fillod 2008-2010 + * (C) Terry Embry 2008-2009 + * (C) Mikael Nousiainen 2020 + * + * This shared library provides an API for communicating + * via serial interface to an FTDX101(D/MP) using the "CAT" interface + * + * + * 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 + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "hamlib/rig.h" +#include "bandplan.h" +#include "idx_builtin.h" +#include "tones.h" +#include "newcat.h" +#include "ftdx101.h" + +const struct rig_caps ftdx101d_caps = +{ + RIG_MODEL(RIG_MODEL_FTDX101D), + .model_name = "FT-DX101D", + .mfg_name = "Yaesu", + .version = NEWCAT_VER ".5", + .copyright = "LGPL", + .status = RIG_STATUS_STABLE, + .rig_type = RIG_TYPE_TRANSCEIVER, + .ptt_type = RIG_PTT_RIG, + .dcd_type = RIG_DCD_NONE, + .port_type = RIG_PORT_SERIAL, + .serial_rate_min = 4800, + .serial_rate_max = 38400, + .serial_data_bits = 8, + .serial_stop_bits = 1, + .serial_parity = RIG_PARITY_NONE, + .serial_handshake = RIG_HANDSHAKE_HARDWARE, + .write_delay = FTDX101_WRITE_DELAY, + .post_write_delay = FTDX101_POST_WRITE_DELAY, + .timeout = 2000, + .retry = 3, + .has_get_func = FTDX101_FUNCS, + .has_set_func = FTDX101_FUNCS, + .has_get_level = FTDX101_LEVELS, + .has_set_level = RIG_LEVEL_SET(FTDX101_LEVELS), + .has_get_parm = RIG_PARM_NONE, + .has_set_parm = RIG_PARM_NONE, + .level_gran = { + [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, + [LVL_CWPITCH] = { .min = { .i = 300 }, .max = { .i = 1050 }, .step = { .i = 10 } }, + }, + .ctcss_list = common_ctcss_list, + .dcs_list = NULL, + .preamp = { 10, 20, RIG_DBLST_END, }, + .attenuator = { 6, 12, 18, RIG_DBLST_END, }, + .max_rit = Hz(9999), + .max_xit = Hz(9999), + .max_ifshift = Hz(1200), + .vfo_ops = FTDX101_VFO_OPS, + .targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE | RIG_TARGETABLE_FUNC | RIG_TARGETABLE_LEVEL, + .transceive = RIG_TRN_OFF, /* May enable later as the FTDX101 has an Auto Info command */ + .bank_qty = 0, + .chan_desc_sz = 0, + .str_cal = FTDX101_STR_CAL, + .chan_list = { + { 1, 99, RIG_MTYPE_MEM, NEWCAT_MEM_CAP }, + { 100, 117, RIG_MTYPE_EDGE, NEWCAT_MEM_CAP }, /* two by two */ + RIG_CHAN_END, + }, + + .rx_range_list1 = { + /* General coverage + ham, ANT_5 is RX only antenna */ + {kHz(30), MHz(60), FTDX101_ALL_RX_MODES, -1, -1, FTDX101_VFO_ALL, FTDX101_TX_ANTS | RIG_ANT_5, "USA"}, + RIG_FRNG_END, + }, + + .tx_range_list1 = { /* the 101DX is 100W and the MP is 200W */ + FRQ_RNG_HF(1, FTDX101_OTHER_TX_MODES, W(5), W(200), FTDX101_VFO_ALL, FTDX101_TX_ANTS), + FRQ_RNG_HF(1, FTDX101_AM_TX_MODES, W(2), W(75), FTDX101_VFO_ALL, FTDX101_TX_ANTS), /* AM class */ + FRQ_RNG_6m(1, FTDX101_OTHER_TX_MODES, W(5), W(200), FTDX101_VFO_ALL, FTDX101_TX_ANTS), + FRQ_RNG_6m(1, FTDX101_AM_TX_MODES, W(2), W(75), FTDX101_VFO_ALL, FTDX101_TX_ANTS), /* AM class */ + + RIG_FRNG_END, + }, + + .rx_range_list2 = { + {kHz(30), MHz(60), FTDX101_ALL_RX_MODES, -1, -1, FTDX101_VFO_ALL, FTDX101_TX_ANTS | RIG_ANT_5, "EUR"}, + RIG_FRNG_END, + }, + + .tx_range_list2 = { + FRQ_RNG_HF(2, FTDX101_OTHER_TX_MODES, W(5), W(200), FTDX101_VFO_ALL, FTDX101_TX_ANTS), + FRQ_RNG_HF(2, FTDX101_AM_TX_MODES, W(2), W(75), FTDX101_VFO_ALL, FTDX101_TX_ANTS), /* AM class */ + FRQ_RNG_6m(2, FTDX101_OTHER_TX_MODES, W(5), W(200), FTDX101_VFO_ALL, FTDX101_TX_ANTS), + FRQ_RNG_6m(2, FTDX101_AM_TX_MODES, W(2), W(75), FTDX101_VFO_ALL, FTDX101_TX_ANTS), /* AM class */ + FRQ_RNG_4m_REGION2(FTDX101_OTHER_TX_MODES, W(5), W(200), FTDX101_VFO_ALL, FTDX101_TX_ANTS), + FRQ_RNG_4m_REGION2(FTDX101_AM_TX_MODES, W(2), W(75), FTDX101_VFO_ALL, FTDX101_TX_ANTS), /* AM class */ + + RIG_FRNG_END, + }, + + .tuning_steps = { + {FTDX101_SSB_CW_RX_MODES, Hz(10)}, /* Normal */ + {FTDX101_SSB_CW_RX_MODES, Hz(100)}, /* Fast */ + + {FTDX101_AM_RX_MODES, Hz(100)}, /* Normal */ + {FTDX101_AM_RX_MODES, kHz(1)}, /* Fast */ + + {FTDX101_FM_RX_MODES, Hz(100)}, /* Normal */ + {FTDX101_FM_RX_MODES, kHz(1)}, /* Fast */ + + RIG_TS_END, + + }, + + /* mode/filter list, remember that order matters! */ + .filters = { + {FTDX101_CW_RTTY_PKT_RX_MODES, Hz(600)}, /* Normal CW, RTTY, PKT/USER */ + {FTDX101_CW_RTTY_PKT_RX_MODES, Hz(300)}, /* Narrow CW, RTTY, PKT/USER */ + {FTDX101_CW_RTTY_PKT_RX_MODES, Hz(2400)}, /* Wide CW, RTTY, PKT/USER */ + {FTDX101_CW_RTTY_PKT_RX_MODES, Hz(1200)}, /* Normal CW, RTTY, PKT/USER */ + {RIG_MODE_SSB, Hz(2400)}, /* Normal SSB */ + {RIG_MODE_SSB, Hz(1800)}, /* Narrow SSB */ + {RIG_MODE_SSB, Hz(3000)}, /* Wide SSB */ + {RIG_MODE_AM, Hz(9000)}, /* Normal AM */ + {RIG_MODE_AMN, Hz(6000)}, /* Narrow AM */ + {RIG_MODE_FM | RIG_MODE_PKTFM, Hz(16000)}, /* Normal FM */ + {RIG_MODE_FMN | RIG_MODE_PKTFMN, Hz(9000)}, /* Narrow FM */ + {FTDX101_CW_RTTY_PKT_RX_MODES | RIG_MODE_SSB, RIG_FLT_ANY}, + + RIG_FLT_END, + }, + + .priv = NULL, + + .rig_init = newcat_init, + .rig_cleanup = newcat_cleanup, + .rig_open = newcat_open, /* port opened */ + .rig_close = newcat_close, /* port closed */ + + .cfgparams = newcat_cfg_params, + .set_conf = newcat_set_conf, + .get_conf = newcat_get_conf, + .set_freq = newcat_set_freq, + .get_freq = newcat_get_freq, + .set_mode = newcat_set_mode, + .get_mode = newcat_get_mode, + .set_vfo = newcat_set_vfo, + .get_vfo = newcat_get_vfo, + .set_ptt = newcat_set_ptt, + .get_ptt = newcat_get_ptt, + .set_split_vfo = newcat_set_split_vfo, + .get_split_vfo = newcat_get_split_vfo, + .set_rit = newcat_set_rit, + .get_rit = newcat_get_rit, + .set_xit = newcat_set_xit, + .get_xit = newcat_get_xit, + .set_ant = newcat_set_ant, + .get_ant = newcat_get_ant, + .get_func = newcat_get_func, + .set_func = newcat_set_func, + .get_level = newcat_get_level, + .set_level = newcat_set_level, + .get_mem = newcat_get_mem, + .set_mem = newcat_set_mem, + .vfo_op = newcat_vfo_op, + .get_info = newcat_get_info, + .power2mW = newcat_power2mW, + .mW2power = newcat_mW2power, + .set_rptr_shift = newcat_set_rptr_shift, + .get_rptr_shift = newcat_get_rptr_shift, + .set_ctcss_tone = newcat_set_ctcss_tone, + .get_ctcss_tone = newcat_get_ctcss_tone, + .set_ctcss_sql = newcat_set_ctcss_sql, + .get_ctcss_sql = newcat_get_ctcss_sql, + .set_powerstat = newcat_set_powerstat, + .get_powerstat = newcat_get_powerstat, + .get_ts = newcat_get_ts, + .set_ts = newcat_set_ts, + .set_trn = newcat_set_trn, + .get_trn = newcat_get_trn, + .set_channel = newcat_set_channel, + .get_channel = newcat_get_channel, + +}; diff --git a/rigs/yaesu/ftdx101.h b/rigs/yaesu/ftdx101.h new file mode 100644 index 000000000..7afb4b4b7 --- /dev/null +++ b/rigs/yaesu/ftdx101.h @@ -0,0 +1,121 @@ +/* + * hamlib - (C) Frank Singleton 2000 (javabear at users.sourceforge.net) + * + * ftdx101.h - (C) Nate Bargmann 2007 (n0nb at arrl.net) + * (C) Stephane Fillod 2008-2010 + * (C) Mikael Nousiainen 2020 + * + * This shared library provides an API for communicating + * via serial interface to an FTDX101(D/MP) using the "CAT" interface + * + * + * 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 + * + */ + + +#ifndef _FTDX101_H +#define _FTDX101_H 1 + +#define FTDX101_VFO_ALL (RIG_VFO_MAIN|RIG_VFO_SUB) + +/* Receiver caps */ + +#define FTDX101_ALL_RX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|\ + RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_PKTLSB|RIG_MODE_PKTUSB|RIG_MODE_PKTAM|RIG_MODE_PKTFM|\ + RIG_MODE_FM|RIG_MODE_FMN|RIG_MODE_PKTFMN) + +#define FTDX101_SSB_CW_RX_MODES (RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|\ + RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_PKTLSB|RIG_MODE_PKTUSB) +#define FTDX101_AM_RX_MODES (RIG_MODE_AM|RIG_MODE_PKTAM) +#define FTDX101_FM_RX_MODES (RIG_MODE_FM|RIG_MODE_PKTFM|RIG_MODE_FMN|RIG_MODE_PKTFMN) +#define FTDX101_CW_RTTY_PKT_RX_MODES (RIG_MODE_RTTY|RIG_MODE_RTTYR|\ + RIG_MODE_PKTUSB|RIG_MODE_PKTLSB|RIG_MODE_CW|RIG_MODE_CWR) + +/* TRX caps */ + +#define FTDX101_OTHER_TX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_RTTY| \ + RIG_MODE_PKTLSB|RIG_MODE_PKTUSB|RIG_MODE_PKTAM|RIG_MODE_PKTFM|RIG_MODE_FM|RIG_MODE_FMN|RIG_MODE_PKTFMN) /* 100 W class */ +#define FTDX101_AM_TX_MODES (RIG_MODE_AM|RIG_MODE_PKTAM) /* set 25W max */ + +/* TBC */ +#define FTDX101_LEVELS (RIG_LEVEL_ATT|RIG_LEVEL_PREAMP|\ + RIG_LEVEL_ALC|RIG_LEVEL_RAWSTR|RIG_LEVEL_SWR|\ + RIG_LEVEL_RFPOWER|RIG_LEVEL_RF|RIG_LEVEL_SQL|\ + RIG_LEVEL_MICGAIN|RIG_LEVEL_IF|RIG_LEVEL_CWPITCH|\ + RIG_LEVEL_KEYSPD|RIG_LEVEL_AF|RIG_LEVEL_AGC|\ + RIG_LEVEL_METER|RIG_LEVEL_BKINDL|RIG_LEVEL_SQL|\ + RIG_LEVEL_VOXGAIN|RIG_LEVEL_VOXDELAY|RIG_LEVEL_COMP|\ + RIG_LEVEL_ANTIVOX|RIG_LEVEL_NR|RIG_LEVEL_NOTCHF|\ + RIG_LEVEL_MONITOR_GAIN) + +/* TBC */ +#define FTDX101_FUNCS (RIG_FUNC_TONE|RIG_FUNC_TSQL|RIG_FUNC_LOCK|\ + RIG_FUNC_MON|RIG_FUNC_NB|RIG_FUNC_NR|RIG_FUNC_VOX|\ + RIG_FUNC_FBKIN|RIG_FUNC_COMP|RIG_FUNC_ANF|RIG_FUNC_MN|\ + RIG_FUNC_RIT|RIG_FUNC_XIT|RIG_FUNC_TUNER) + +/* TBC */ +#define FTDX101_VFO_OPS (RIG_OP_TUNE|RIG_OP_CPY|RIG_OP_XCHG|\ + RIG_OP_UP|RIG_OP_DOWN|RIG_OP_BAND_UP|RIG_OP_BAND_DOWN|\ + RIG_OP_TO_VFO|RIG_OP_FROM_VFO|RIG_OP_TOGGLE) + +/* TBC */ +#define FTDX101_STR_CAL { 16, \ + { \ + { 0, -54 }, /* S0 */ \ + { 12, -48 }, /* S1 */ \ + { 27, -42 }, /* S2 */ \ + { 40, -36 }, /* S3 */ \ + { 55, -30 }, /* S4 */ \ + { 65, -24 }, /* S5 */ \ + { 80, -18 }, /* S6 */ \ + { 95, -12 }, /* S7 */ \ + { 112, -6 }, /* S8 */ \ + { 130, 0 }, /* S9 */ \ + { 150, 10 }, /* +10 */ \ + { 172, 20 }, /* +20 */ \ + { 190, 30 }, /* +30 */ \ + { 220, 40 }, /* +40 */ \ + { 240, 50 }, /* +50 */ \ + { 255, 60 }, /* +60 */ \ + } } + +/* + * Other features (used by rig_caps) + */ + +#define FTDX101_TX_ANTS (RIG_ANT_1|RIG_ANT_2) + +#define FTDX101_MEM_CHNL_LENGTH 1 /* 0x10 P1 = 01 return size */ +#define FTDX101_OP_DATA_LENGTH 19 /* 0x10 P1 = 03 return size */ +#define FTDX101_VFO_DATA_LENGTH 18 /* 0x10 P1 = 03 return size -- A & B returned */ +#define FTDX101_MEM_CHNL_DATA_LENGTH 19 /* 0x10 P1 = 04, P4 = 0x01-0x20 return size */ +#define FTDX101_STATUS_FLAGS_LENGTH 5 /* 0xf7, 0xfa return size */ +#define FTDX101_ALL_DATA_LENGTH 649 /* 0x10 P1 = 00 return size */ + +/* Timing values in mS */ + +/* Delay between bytes sent + * Should not exceed value set in CAT TOT menu (rig default is 10 mSec) + */ +#define FTDX101_WRITE_DELAY 0 + + +/* Delay sequential fast writes */ + +#define FTDX101_POST_WRITE_DELAY 5 + +#endif /* _FTDX101_H */ diff --git a/rigs/yaesu/newcat.c b/rigs/yaesu/newcat.c index 7984fa075..6c95d6b06 100644 --- a/rigs/yaesu/newcat.c +++ b/rigs/yaesu/newcat.c @@ -2721,7 +2721,7 @@ int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) return -RIG_ENAVAIL; } - if (newcat_is_rig(rig, RIG_MODEL_FT1200)) + if (is_ft1200 || is_ft3000 || is_ft891 || is_ft991 || is_ft101) { fpf = newcat_scale_float(100, val.f); } @@ -3148,6 +3148,24 @@ int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) break; + case RIG_LEVEL_MONITOR_GAIN: + if (!newcat_valid_command(rig, "ML")) + { + return -RIG_ENAVAIL; + } + + if (is_ft1200 || is_ft3000 || is_ft891 || is_ft991 || is_ft101) + { + fpf = newcat_scale_float(100, val.f); + } + else + { + fpf = newcat_scale_float(255, val.f); + } + + snprintf(priv->cmd_str, sizeof(priv->cmd_str), "ML1%03d%c", fpf, cat_term); + break; + default: return -RIG_EINVAL; } @@ -3435,6 +3453,15 @@ int newcat_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) break; + case RIG_LEVEL_MONITOR_GAIN: + if (!newcat_valid_command(rig, "ML")) + { + return -RIG_ENAVAIL; + } + + snprintf(priv->cmd_str, sizeof(priv->cmd_str), "ML1%c", cat_term); + break; + default: return -RIG_EINVAL; } @@ -3486,8 +3513,19 @@ int newcat_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) break; - case RIG_LEVEL_AF: case RIG_LEVEL_MICGAIN: + if (is_ft1200 || is_ft3000 || is_ft891 || is_ft991 || is_ft101) + { + scale = 100.; + } + else + { + scale = 255.; + } + val->f = (float)atoi(retlvl) / scale; + break; + + case RIG_LEVEL_AF: case RIG_LEVEL_RF: case RIG_LEVEL_SQL: case RIG_LEVEL_ALC: @@ -3703,6 +3741,18 @@ int newcat_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) val->i = atoi(retlvl) * 10; break; + case RIG_LEVEL_MONITOR_GAIN: + if (is_ft1200 || is_ft3000 || is_ft891 || is_ft991 || is_ft101) + { + scale = 100.; + } + else + { + scale = 255.; + } + val->f = (float)atoi(retlvl) / scale; + break; + default: return -RIG_EINVAL; } @@ -3866,7 +3916,13 @@ int newcat_set_func(RIG *rig, vfo_t vfo, setting_t func, int status) return -RIG_ENAVAIL; } - if (is_ft101 || is_ft5000) + if (is_ft1200 || is_ft3000 || is_ft991 || is_ft101) + { + // 1 = OFF, 2 = ON for these rigs + snprintf(priv->cmd_str, sizeof(priv->cmd_str), "PR0%d%c", status ? 2 : 1, + cat_term); + } + else if (is_ft891) { snprintf(priv->cmd_str, sizeof(priv->cmd_str), "PR0%d%c", status ? 1 : 0, cat_term); @@ -3936,6 +3992,7 @@ int newcat_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status) struct newcat_priv_data *priv = (struct newcat_priv_data *)rig->state.priv; int err; int ret_data_len; + int last_digit_index; char *retfunc; char main_sub_vfo = '0'; @@ -4071,7 +4128,7 @@ int newcat_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status) return -RIG_ENAVAIL; } - if (is_ft101 || is_ft5000) + if (is_ft1200 || is_ft3000 || is_ft891 || is_ft991 || is_ft101) { snprintf(priv->cmd_str, sizeof(priv->cmd_str), "PR0%c", cat_term); } @@ -4128,6 +4185,7 @@ int newcat_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status) } ret_data_len = strlen(priv->ret_data); + last_digit_index = ret_data_len - 1; /* skip command */ retfunc = priv->ret_data + strlen(priv->cmd_str) - 1; @@ -4141,19 +4199,28 @@ int newcat_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status) break; case RIG_FUNC_COMP: - - // future Yaesu's may use the new command format - // so we do this check here instead of the back end - // only need to add the "|| is_XXX" here - if (is_ft101) { *status = (retfunc[1] == '0') ? 0 : 1; } - else { *status = (retfunc[0] == '0') ? 0 : 1; } - + if (is_ft1200 || is_ft3000 || is_ft991 || is_ft101) + { + // The return values are 1=OFF and 2=ON for these rigs + *status = (retfunc[1] == '2') ? 1 : 0; + } + else if (is_ft891) + { + *status = (retfunc[1] == '1') ? 1 : 0; + } + else + { + *status = (retfunc[0] == '0') ? 0 : 1; + } break; + case RIG_FUNC_MON: + // The number of digits varies by rig, but the last digit indicates the status always + *status = (retfunc[last_digit_index] == '0') ? 0 : 1; + break; case RIG_FUNC_ANF: case RIG_FUNC_FBKIN: case RIG_FUNC_LOCK: - case RIG_FUNC_MON: case RIG_FUNC_NB: case RIG_FUNC_NR: case RIG_FUNC_VOX: diff --git a/rigs/yaesu/newcat.h b/rigs/yaesu/newcat.h index ce7ff95b1..fe8f51da9 100644 --- a/rigs/yaesu/newcat.h +++ b/rigs/yaesu/newcat.h @@ -50,7 +50,7 @@ typedef char ncboolean; /* shared function version */ -#define NEWCAT_VER "20201016" +#define NEWCAT_VER "20201023" /* Hopefully large enough for future use, 128 chars plus '\0' */ #define NEWCAT_DATA_LEN 129