From 0ad76ba38ae6b89934cf5f3388b2e8c26fc2bdbd Mon Sep 17 00:00:00 2001 From: Mikael Nousiainen Date: Thu, 5 Nov 2020 11:05:37 +0200 Subject: [PATCH] Fix a number of issues in Yaesu commands, all changes based on manuals --- rigs/yaesu/ft1200.c | 6 +- rigs/yaesu/ft2000.c | 4 +- rigs/yaesu/ft3000.c | 8 +- rigs/yaesu/ft450.c | 6 +- rigs/yaesu/ft5000.c | 4 +- rigs/yaesu/ft5000.h | 2 +- rigs/yaesu/ft891.c | 10 +- rigs/yaesu/ft891.h | 2 +- rigs/yaesu/ft9000.c | 6 +- rigs/yaesu/ft9000.h | 9 +- rigs/yaesu/ft950.c | 4 +- rigs/yaesu/ft991.c | 12 +- rigs/yaesu/ft991.h | 3 +- rigs/yaesu/ftdx101.c | 6 +- rigs/yaesu/ftdx101.h | 2 +- rigs/yaesu/newcat.c | 285 ++++++++++++++++++++++++++++++++----------- 16 files changed, 264 insertions(+), 105 deletions(-) diff --git a/rigs/yaesu/ft1200.c b/rigs/yaesu/ft1200.c index 7706d463c..dcaa10613 100644 --- a/rigs/yaesu/ft1200.c +++ b/rigs/yaesu/ft1200.c @@ -112,14 +112,16 @@ const struct rig_caps ftdx1200_caps = // cppcheck-suppress * [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, [LVL_CWPITCH] = { .min = { .i = 300 }, .max = { .i = 1050 }, .step = { .i = 10 } }, + [LVL_KEYSPD] = { .min = { .i = 4 }, .max = { .i = 60 }, .step = { .i = 1 } }, + [LVL_NOTCHF] = { .min = { .i = 1 }, .max = { .i = 4000 }, .step = { .i = 10 } }, }, .ctcss_list = common_ctcss_list, .dcs_list = NULL, - .preamp = { 10, 20, RIG_DBLST_END, }, /* TBC */ + .preamp = { 10, 20, RIG_DBLST_END, }, .attenuator = { 6, 12, 18, RIG_DBLST_END, }, .max_rit = Hz(9999), .max_xit = Hz(9999), - .max_ifshift = Hz(1000), + .max_ifshift = Hz(1200), .vfo_ops = FTDX1200_VFO_OPS, .targetable_vfo = RIG_TARGETABLE_FREQ, .transceive = RIG_TRN_OFF, /* May enable later as the 1200 has an Auto Info command */ diff --git a/rigs/yaesu/ft2000.c b/rigs/yaesu/ft2000.c index 68ca3398d..32521f455 100644 --- a/rigs/yaesu/ft2000.c +++ b/rigs/yaesu/ft2000.c @@ -78,10 +78,12 @@ const struct rig_caps ft2000_caps = // cppcheck-suppress * [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, [LVL_CWPITCH] = { .min = { .i = 300 }, .max = { .i = 1050 }, .step = { .i = 50 } }, + [LVL_KEYSPD] = { .min = { .i = 4 }, .max = { .i = 60 }, .step = { .i = 1 } }, + [LVL_NOTCHF] = { .min = { .i = 1 }, .max = { .i = 4000 }, .step = { .i = 10 } }, }, .ctcss_list = common_ctcss_list, .dcs_list = NULL, - .preamp = { 10, 20, RIG_DBLST_END, }, /* TBC */ + .preamp = { 10, 17, RIG_DBLST_END, }, .attenuator = { 6, 12, 18, RIG_DBLST_END, }, .max_rit = Hz(9999), .max_xit = Hz(9999), diff --git a/rigs/yaesu/ft3000.c b/rigs/yaesu/ft3000.c index 3234d63ae..fcfa67892 100644 --- a/rigs/yaesu/ft3000.c +++ b/rigs/yaesu/ft3000.c @@ -116,10 +116,12 @@ const struct rig_caps ftdx3000_caps = .level_gran = { [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, [LVL_CWPITCH] = { .min = { .i = 300 }, .max = { .i = 1050 }, .step = { .i = 10 } }, + [LVL_KEYSPD] = { .min = { .i = 4 }, .max = { .i = 60 }, .step = { .i = 1 } }, + [LVL_NOTCHF] = { .min = { .i = 1 }, .max = { .i = 4000 }, .step = { .i = 10 } }, }, .ctcss_list = common_ctcss_list, .dcs_list = NULL, - .preamp = { 10, 20, RIG_DBLST_END, }, /* TBC */ + .preamp = { 10, 17, RIG_DBLST_END, }, .attenuator = { 6, 12, 18, RIG_DBLST_END, }, .max_rit = Hz(9999), .max_xit = Hz(9999), @@ -138,7 +140,7 @@ const struct rig_caps ftdx3000_caps = .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"}, + {kHz(30), MHz(60), FTDX5000_ALL_RX_MODES, -1, -1, FTDX5000_VFO_ALL, FTDX5000_TX_ANTS, "USA"}, RIG_FRNG_END, }, @@ -152,7 +154,7 @@ const struct rig_caps ftdx3000_caps = }, .rx_range_list2 = { - {kHz(30), MHz(60), FTDX5000_ALL_RX_MODES, -1, -1, FTDX5000_VFO_ALL, FTDX5000_TX_ANTS | RIG_ANT_5, "EUR"}, + {kHz(30), MHz(60), FTDX5000_ALL_RX_MODES, -1, -1, FTDX5000_VFO_ALL, FTDX5000_TX_ANTS, "EUR"}, RIG_FRNG_END, }, diff --git a/rigs/yaesu/ft450.c b/rigs/yaesu/ft450.c index 057c86e95..98857ed43 100644 --- a/rigs/yaesu/ft450.c +++ b/rigs/yaesu/ft450.c @@ -77,11 +77,13 @@ const struct rig_caps ft450_caps = // cppcheck-suppress * [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, [LVL_CWPITCH] = { .min = { .i = 400 }, .max = { .i = 800 }, .step = { .i = 100 } }, + [LVL_KEYSPD] = { .min = { .i = 4 }, .max = { .i = 60 }, .step = { .i = 1 } }, + [LVL_NOTCHF] = { .min = { .i = 1 }, .max = { .i = 4000 }, .step = { .i = 10 } }, }, .ctcss_list = common_ctcss_list, .dcs_list = NULL, - .preamp = { 10, RIG_DBLST_END, }, /* TBC */ - .attenuator = { 18, RIG_DBLST_END, }, /* TBC */ + .preamp = { 10, RIG_DBLST_END, }, /* TBC: Not specified in manual */ + .attenuator = { 20, RIG_DBLST_END, }, .max_rit = Hz(9999), .max_xit = Hz(0), .max_ifshift = Hz(1000), diff --git a/rigs/yaesu/ft5000.c b/rigs/yaesu/ft5000.c index 8ab58f8aa..d8d53cf13 100644 --- a/rigs/yaesu/ft5000.c +++ b/rigs/yaesu/ft5000.c @@ -111,10 +111,12 @@ const struct rig_caps ftdx5000_caps = // cppcheck-suppress * [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, [LVL_CWPITCH] = { .min = { .i = 300 }, .max = { .i = 1050 }, .step = { .i = 10 } }, + [LVL_KEYSPD] = { .min = { .i = 4 }, .max = { .i = 60 }, .step = { .i = 1 } }, + [LVL_NOTCHF] = { .min = { .i = 1 }, .max = { .i = 4000 }, .step = { .i = 10 } }, }, .ctcss_list = common_ctcss_list, .dcs_list = NULL, - .preamp = { 10, 20, RIG_DBLST_END, }, /* TBC */ + .preamp = { 10, 20, RIG_DBLST_END, }, /* TBC: Not specified in manual */ .attenuator = { 6, 12, 18, RIG_DBLST_END, }, .max_rit = Hz(9999), .max_xit = Hz(9999), diff --git a/rigs/yaesu/ft5000.h b/rigs/yaesu/ft5000.h index db32b61b6..59f6c8922 100644 --- a/rigs/yaesu/ft5000.h +++ b/rigs/yaesu/ft5000.h @@ -100,7 +100,7 @@ * */ -#define FTDX5000_TX_ANTS (RIG_ANT_1|RIG_ANT_2) +#define FTDX5000_TX_ANTS (RIG_ANT_1|RIG_ANT_2|RIG_ANT_3|RIG_ANT_4) #define FTDX5000_MEM_CHNL_LENGTH 1 /* 0x10 P1 = 01 return size */ #define FTDX5000_OP_DATA_LENGTH 19 /* 0x10 P1 = 03 return size */ diff --git a/rigs/yaesu/ft891.c b/rigs/yaesu/ft891.c index da1997b08..5c5eaaaae 100644 --- a/rigs/yaesu/ft891.c +++ b/rigs/yaesu/ft891.c @@ -77,14 +77,16 @@ const struct rig_caps ft891_caps = // cppcheck-suppress * [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, [LVL_CWPITCH] = { .min = { .i = 300 }, .max = { .i = 1050 }, .step = { .i = 50 } }, + [LVL_KEYSPD] = { .min = { .i = 4 }, .max = { .i = 60 }, .step = { .i = 1 } }, + [LVL_NOTCHF] = { .min = { .i = 1 }, .max = { .i = 3200 }, .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, }, + .preamp = { 10, RIG_DBLST_END, }, /* TBC */ + .attenuator = { 12, RIG_DBLST_END, }, .max_rit = Hz(9999), .max_xit = Hz(9999), - .max_ifshift = Hz(1000), + .max_ifshift = Hz(1200), .vfo_ops = FT891_VFO_OPS, .targetable_vfo = RIG_TARGETABLE_FREQ, .transceive = RIG_TRN_OFF, /* May enable later as the 950 has an Auto Info command */ @@ -200,8 +202,6 @@ const struct rig_caps ft891_caps = .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, diff --git a/rigs/yaesu/ft891.h b/rigs/yaesu/ft891.h index e95401aee..6a3b541f0 100644 --- a/rigs/yaesu/ft891.h +++ b/rigs/yaesu/ft891.h @@ -95,7 +95,7 @@ * */ -#define FT891_ANTS (RIG_ANT_1|RIG_ANT_2) +#define FT891_ANTS (RIG_ANT_CURR) #define FT891_MEM_CHNL_LENGTH 1 /* 0x10 P1 = 01 return size */ #define FT891_OP_DATA_LENGTH 19 /* 0x10 P1 = 03 return size */ diff --git a/rigs/yaesu/ft9000.c b/rigs/yaesu/ft9000.c index b0d626ae3..149a43df3 100644 --- a/rigs/yaesu/ft9000.c +++ b/rigs/yaesu/ft9000.c @@ -78,11 +78,13 @@ const struct rig_caps ft9000_caps = // cppcheck-suppress * [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, [LVL_CWPITCH] = { .min = { .i = 300 }, .max = { .i = 1050 }, .step = { .i = 50 } }, + [LVL_KEYSPD] = { .min = { .i = 4 }, .max = { .i = 60 }, .step = { .i = 1 } }, + [LVL_NOTCHF] = { .min = { .i = 1 }, .max = { .i = 3000 }, .step = { .i = 10 } }, }, .ctcss_list = common_ctcss_list, .dcs_list = NULL, - .preamp = { 10, 20, RIG_DBLST_END, }, /* TBC */ - .attenuator = { 6, 12, 18, RIG_DBLST_END, }, + .preamp = { 10, RIG_DBLST_END, }, /* TBC: Not specified in manual */ + .attenuator = { RIG_DBLST_END, }, .max_rit = Hz(9999), .max_xit = Hz(9999), .max_ifshift = Hz(1000), diff --git a/rigs/yaesu/ft9000.h b/rigs/yaesu/ft9000.h index 5cfc27d71..03525832d 100644 --- a/rigs/yaesu/ft9000.h +++ b/rigs/yaesu/ft9000.h @@ -68,14 +68,13 @@ 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 FT9000_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_NB|RIG_FUNC_NR|RIG_FUNC_VOX|\ + RIG_FUNC_FBKIN|RIG_FUNC_COMP|RIG_FUNC_ANF|\ + RIG_FUNC_RIT|RIG_FUNC_XIT) /* TBC */ #define FT9000_VFO_OPS (RIG_OP_TUNE|RIG_OP_CPY|RIG_OP_XCHG|\ diff --git a/rigs/yaesu/ft950.c b/rigs/yaesu/ft950.c index 6703daa93..2d1d5d124 100644 --- a/rigs/yaesu/ft950.c +++ b/rigs/yaesu/ft950.c @@ -77,10 +77,12 @@ const struct rig_caps ft950_caps = // cppcheck-suppress * [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, [LVL_CWPITCH] = { .min = { .i = 300 }, .max = { .i = 1050 }, .step = { .i = 50 } }, + [LVL_KEYSPD] = { .min = { .i = 4 }, .max = { .i = 60 }, .step = { .i = 1 } }, + [LVL_NOTCHF] = { .min = { .i = 1 }, .max = { .i = 3000 }, .step = { .i = 10 } }, }, .ctcss_list = common_ctcss_list, .dcs_list = NULL, - .preamp = { 10, 20, RIG_DBLST_END, }, /* TBC */ + .preamp = { 10, 17, RIG_DBLST_END, }, .attenuator = { 6, 12, 18, RIG_DBLST_END, }, .max_rit = Hz(9999), .max_xit = Hz(9999), diff --git a/rigs/yaesu/ft991.c b/rigs/yaesu/ft991.c index 086d2b42d..7f2a1858d 100644 --- a/rigs/yaesu/ft991.c +++ b/rigs/yaesu/ft991.c @@ -76,14 +76,16 @@ const struct rig_caps ft991_caps = // cppcheck-suppress * [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, [LVL_CWPITCH] = { .min = { .i = 300 }, .max = { .i = 1050 }, .step = { .i = 50 } }, + [LVL_KEYSPD] = { .min = { .i = 4 }, .max = { .i = 60 }, .step = { .i = 1 } }, + [LVL_NOTCHF] = { .min = { .i = 1 }, .max = { .i = 3200 }, .step = { .i = 10 } }, }, .ctcss_list = common_ctcss_list, .dcs_list = common_dcs_list, - .preamp = { 10, 20, RIG_DBLST_END, }, /* TBC */ - .attenuator = { 6, 12, 18, RIG_DBLST_END, }, + .preamp = { 10, 20, RIG_DBLST_END, }, + .attenuator = { 12, RIG_DBLST_END, }, .max_rit = Hz(9999), .max_xit = Hz(9999), - .max_ifshift = Hz(1000), + .max_ifshift = Hz(1200), .vfo_ops = FT991_VFO_OPS, .targetable_vfo = RIG_TARGETABLE_FREQ, .transceive = RIG_TRN_OFF, /* May enable later as the 950 has an Auto Info command */ @@ -163,7 +165,7 @@ const struct rig_caps ft991_caps = {RIG_MODE_SSB, Hz(200)}, /* SSB */ {RIG_MODE_AM, Hz(9000)}, /* Normal AM */ {RIG_MODE_AMN, Hz(6000)}, /* Narrow AM */ - {FT991_FM_RX_MODES, Hz(16000)}, /* Normal FM */ + {FT991_FM_WIDE_RX_MODES, Hz(16000)}, /* Normal FM */ {RIG_MODE_FMN, Hz(9000)}, /* Narrow FM */ RIG_FLT_END, @@ -192,8 +194,6 @@ const struct rig_caps ft991_caps = .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, diff --git a/rigs/yaesu/ft991.h b/rigs/yaesu/ft991.h index 4557d1a13..159aeeac0 100644 --- a/rigs/yaesu/ft991.h +++ b/rigs/yaesu/ft991.h @@ -38,7 +38,8 @@ #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_FMN|RIG_MODE_C4FM) +#define FT991_FM_WIDE_RX_MODES (RIG_MODE_FM|RIG_MODE_PKTFM|RIG_MODE_C4FM) +#define FT991_FM_RX_MODES (FT991_FM_WIDE_RX_MODES|RIG_MODE_FMN) #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) diff --git a/rigs/yaesu/ftdx101.c b/rigs/yaesu/ftdx101.c index a330c1e10..75b3668af 100644 --- a/rigs/yaesu/ftdx101.c +++ b/rigs/yaesu/ftdx101.c @@ -104,6 +104,8 @@ const struct rig_caps ftdx101d_caps = .level_gran = { [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, [LVL_CWPITCH] = { .min = { .i = 300 }, .max = { .i = 1050 }, .step = { .i = 10 } }, + [LVL_KEYSPD] = { .min = { .i = 4 }, .max = { .i = 60 }, .step = { .i = 1 } }, + [LVL_NOTCHF] = { .min = { .i = 1 }, .max = { .i = 3200 }, .step = { .i = 10 } }, }, .ctcss_list = common_ctcss_list, .dcs_list = NULL, @@ -125,7 +127,7 @@ const struct rig_caps ftdx101d_caps = .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"}, + {kHz(30), MHz(60), FTDX101_ALL_RX_MODES, -1, -1, FTDX101_VFO_ALL, FTDX101_TX_ANTS, "USA"}, RIG_FRNG_END, }, @@ -139,7 +141,7 @@ const struct rig_caps ftdx101d_caps = }, .rx_range_list2 = { - {kHz(30), MHz(60), FTDX101_ALL_RX_MODES, -1, -1, FTDX101_VFO_ALL, FTDX101_TX_ANTS | RIG_ANT_5, "EUR"}, + {kHz(30), MHz(60), FTDX101_ALL_RX_MODES, -1, -1, FTDX101_VFO_ALL, FTDX101_TX_ANTS, "EUR"}, RIG_FRNG_END, }, diff --git a/rigs/yaesu/ftdx101.h b/rigs/yaesu/ftdx101.h index 66be4a8a5..5e0309f4b 100644 --- a/rigs/yaesu/ftdx101.h +++ b/rigs/yaesu/ftdx101.h @@ -91,7 +91,7 @@ * Other features (used by rig_caps) */ -#define FTDX101_TX_ANTS (RIG_ANT_1|RIG_ANT_2) +#define FTDX101_TX_ANTS (RIG_ANT_1|RIG_ANT_2|RIG_ANT_3) #define FTDX101_MEM_CHNL_LENGTH 1 /* 0x10 P1 = 01 return size */ #define FTDX101_OP_DATA_LENGTH 19 /* 0x10 P1 = 03 return size */ diff --git a/rigs/yaesu/newcat.c b/rigs/yaesu/newcat.c index 3bcb79a7d..a605c5187 100644 --- a/rigs/yaesu/newcat.c +++ b/rigs/yaesu/newcat.c @@ -203,7 +203,7 @@ static ncboolean is_ft891; static ncboolean is_ft950; static ncboolean is_ft991; static ncboolean is_ft2000; -static ncboolean is_ft9000; +static ncboolean is_ftdx9000; static ncboolean is_ftdx5000; static ncboolean is_ftdx1200; static ncboolean is_ftdx3000; @@ -2849,25 +2849,34 @@ int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) switch (val.i) { - case RIG_AGC_OFF: snprintf(priv->cmd_str, sizeof(priv->cmd_str), "GT00;"); + case RIG_AGC_OFF: + snprintf(priv->cmd_str, sizeof(priv->cmd_str), "GT00;"); break; - case RIG_AGC_FAST: snprintf(priv->cmd_str, sizeof(priv->cmd_str), "GT01;"); + case RIG_AGC_FAST: + snprintf(priv->cmd_str, sizeof(priv->cmd_str), "GT01;"); break; - case RIG_AGC_MEDIUM: snprintf(priv->cmd_str, sizeof(priv->cmd_str), "GT02;"); + case RIG_AGC_MEDIUM: + snprintf(priv->cmd_str, sizeof(priv->cmd_str), "GT02;"); break; - case RIG_AGC_SLOW: snprintf(priv->cmd_str, sizeof(priv->cmd_str), "GT03;"); + case RIG_AGC_SLOW: + snprintf(priv->cmd_str, sizeof(priv->cmd_str), "GT03;"); break; - case RIG_AGC_AUTO: snprintf(priv->cmd_str, sizeof(priv->cmd_str), "GT04;"); + case RIG_AGC_AUTO: + snprintf(priv->cmd_str, sizeof(priv->cmd_str), "GT04;"); break; - default: return -RIG_EINVAL; + default: + return -RIG_EINVAL; } - priv->cmd_str[2] = main_sub_vfo; + if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE) + { + priv->cmd_str[2] = main_sub_vfo; + } break; case RIG_LEVEL_IF: @@ -2895,6 +2904,11 @@ int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) snprintf(priv->cmd_str, sizeof(priv->cmd_str), "IS%c0%+.4d%c", main_sub_vfo, val.i, cat_term); } + else if (is_ft891) + { + snprintf(priv->cmd_str, sizeof(priv->cmd_str), "IS0%d%+.4d%c", val.i == 0 ? 0 : 1, + val.i, cat_term); + } else { snprintf(priv->cmd_str, sizeof(priv->cmd_str), "IS%c%+.4d%c", main_sub_vfo, @@ -3048,23 +3062,25 @@ int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) priv->cmd_str[0] = '\0'; for (i = 0; state->preamp[i] != RIG_DBLST_END; i++) + { if (state->preamp[i] == val.i) { snprintf(priv->cmd_str, sizeof(priv->cmd_str), "PA0%d%c", i + 1, cat_term); break; } - - if (strlen(priv->cmd_str) != 0) - { - if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE) - { - priv->cmd_str[2] = main_sub_vfo; - } - - break; } - return -RIG_EINVAL; + if (strlen(priv->cmd_str) == 0) + { + return -RIG_EINVAL; + } + + if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE) + { + priv->cmd_str[2] = main_sub_vfo; + } + + break; case RIG_LEVEL_ATT: if (!newcat_valid_command(rig, "RA")) @@ -3087,23 +3103,25 @@ int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) priv->cmd_str[0] = '\0'; for (i = 0; state->attenuator[i] != RIG_DBLST_END; i++) + { if (state->attenuator[i] == val.i) { snprintf(priv->cmd_str, sizeof(priv->cmd_str), "RA0%d%c", i + 1, cat_term); - break; /* for loop */ + break; } - - if (strlen(priv->cmd_str) != 0) - { - if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE) - { - priv->cmd_str[2] = main_sub_vfo; - } - - break; } - return -RIG_EINVAL; + if (strlen(priv->cmd_str) == 0) + { + return -RIG_EINVAL; + } + + if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE) + { + priv->cmd_str[2] = main_sub_vfo; + } + + break; case RIG_LEVEL_RF: if (!newcat_valid_command(rig, "RG")) @@ -3111,7 +3129,16 @@ int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) return -RIG_ENAVAIL; } - fpf = newcat_scale_float(255, val.f); + if (is_ft891) + { + scale = 30; + } + else + { + scale = 255; + } + + fpf = newcat_scale_float(scale, val.f); snprintf(priv->cmd_str, sizeof(priv->cmd_str), "RG%c%03d%c", main_sub_vfo, fpf, cat_term); break; @@ -3168,7 +3195,7 @@ int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) return -RIG_ENAVAIL; } - if (is_ft2000 || is_ft9000 || is_ftdx5000) + if (is_ft2000 || is_ftdx9000 || is_ftdx5000) { scale = 255; } @@ -3241,7 +3268,7 @@ int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) snprintf(priv->cmd_str, sizeof(priv->cmd_str), "SD%04d%c", val.i, cat_term); } - else if (is_ft2000 || is_ft9000) + else if (is_ft2000 || is_ftdx9000) { if (val.i < 0) { @@ -3278,7 +3305,16 @@ int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) return -RIG_ENAVAIL; } - fpf = newcat_scale_float(255, val.f); + if (is_ft891 || is_ft991 || is_ftdx101) + { + scale = 100; + } + else + { + scale = 255; + } + + fpf = newcat_scale_float(scale, val.f); snprintf(priv->cmd_str, sizeof(priv->cmd_str), "SQ%c%03d%c", main_sub_vfo, fpf, cat_term); break; @@ -3349,7 +3385,7 @@ int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) return -RIG_ENAVAIL; } - if (is_ft2000 || is_ft9000 || is_ftdx5000) + if (is_ft2000 || is_ftdx9000 || is_ftdx5000) { scale = 255; } @@ -3413,12 +3449,29 @@ int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) val.i = val.i / 10; - if (val.i < 1) /* fix lower bounds limit */ + if (is_ftdx9000) { - val.i = 1; + if (val.i < 0) + { + val.i = 0; + } + } + else + { + if (val.i < 1) + { + val.i = 1; + } } - if (newcat_is_rig(rig, RIG_MODEL_FT950)) + if (is_ft891 || is_ft991 || is_ftdx101) + { + if (val.i > 320) + { + val.i = 320; + } + } + if (is_ft950 || is_ftdx9000) { if (val.i > 300) { @@ -3435,14 +3488,14 @@ int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) snprintf(priv->cmd_str, sizeof(priv->cmd_str), "BP01%03d%c", val.i, cat_term); - if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE && !is_ft9000) - { - priv->cmd_str[2] = main_sub_vfo; - } - else if (is_ft9000) // different BP command format + if (is_ftdx9000) { snprintf(priv->cmd_str, sizeof(priv->cmd_str), "BP%03d%c", val.i, cat_term); } + else if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE) + { + priv->cmd_str[2] = main_sub_vfo; + } break; @@ -3461,7 +3514,14 @@ int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) fpf = newcat_scale_float(255, val.f); } - snprintf(priv->cmd_str, sizeof(priv->cmd_str), "ML1%03d%c", fpf, cat_term); + if (is_ftdx9000) + { + snprintf(priv->cmd_str, sizeof(priv->cmd_str), "ML%03d%c", fpf, cat_term); + } + else + { + snprintf(priv->cmd_str, sizeof(priv->cmd_str), "ML1%03d%c", fpf, cat_term); + } break; default: @@ -3482,6 +3542,7 @@ int newcat_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) int retlvl_len; float scale; char main_sub_vfo = '0'; + int i; rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); @@ -3557,7 +3618,6 @@ int newcat_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) { priv->cmd_str[2] = main_sub_vfo; } - break; case RIG_LEVEL_CWPITCH: @@ -3801,7 +3861,11 @@ int newcat_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) snprintf(priv->cmd_str, sizeof(priv->cmd_str), "BP01%c", cat_term); - if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE) + if (is_ftdx9000) + { + snprintf(priv->cmd_str, sizeof(priv->cmd_str), "BP%c", cat_term); + } + else if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE) { priv->cmd_str[2] = main_sub_vfo; } @@ -3814,7 +3878,14 @@ int newcat_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) return -RIG_ENAVAIL; } - snprintf(priv->cmd_str, sizeof(priv->cmd_str), "ML1%c", cat_term); + if (is_ftdx9000) + { + snprintf(priv->cmd_str, sizeof(priv->cmd_str), "ML%c", cat_term); + } + else + { + snprintf(priv->cmd_str, sizeof(priv->cmd_str), "ML1%c", cat_term); + } break; default: @@ -3856,7 +3927,7 @@ int newcat_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) case RIG_LEVEL_VOXGAIN: case RIG_LEVEL_COMP: - if (is_ft2000 || is_ft9000 || is_ftdx5000) + if (is_ft2000 || is_ftdx9000 || is_ftdx5000) { scale = 255; } @@ -3994,9 +4065,33 @@ int newcat_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) break; case RIG_LEVEL_AF: + val->f = (float)atoi(retlvl) / 255; + break; + case RIG_LEVEL_RF: + if (is_ft891) + { + scale = 30.; + } + else + { + scale = 255.; + } + + val->f = (float)atoi(retlvl) / scale; + break; + case RIG_LEVEL_SQL: - val->f = (float)atoi(retlvl) / 255.; + if (is_ft891 || is_ft991 || is_ftdx101) + { + scale = 100.; + } + else + { + scale = 255.; + } + + val->f = (float)atoi(retlvl) / scale; break; case RIG_LEVEL_BKINDL: @@ -4133,41 +4228,80 @@ int newcat_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) break; - case RIG_LEVEL_PREAMP: + case RIG_LEVEL_PREAMP: { + int preamp; + if (retlvl[0] < '0' || retlvl[0] > '9') { return -RIG_EPROTO; } - val->i = (retlvl[0] == '0') ? 0 : state->preamp[retlvl[0] - '1']; - break; + preamp = retlvl[0] - '0'; + + val->i = 0; + + if (preamp > 0) + { + for (i = 0; state->preamp[i] != RIG_DBLST_END; i++) + { + if (i == preamp - 1) + { + val->i = state->preamp[i]; + break; + } + } + } + break; + } + + case RIG_LEVEL_ATT: { + int att; - case RIG_LEVEL_ATT: if (retlvl[0] < '0' || retlvl[0] > '9') { return -RIG_EPROTO; } - val->i = (retlvl[0] == '0') ? 0 : state->attenuator[retlvl[0] - '1']; + att = retlvl[0] - '0'; + + val->i = 0; + + if (att > 0) + { + for (i = 0; state->attenuator[i] != RIG_DBLST_END; i++) + { + if (i == att - 1) + { + val->i = state->attenuator[i]; + break; + } + } + } break; + } case RIG_LEVEL_AGC: switch (retlvl[0]) { - case '0': val->i = RIG_AGC_OFF; break; - - case '1': val->i = RIG_AGC_FAST; break; - - case '2': val->i = RIG_AGC_MEDIUM; break; - - case '3': val->i = RIG_AGC_SLOW; break; - + case '0': + val->i = RIG_AGC_OFF; + break; + case '1': + val->i = RIG_AGC_FAST; + break; + case '2': + val->i = RIG_AGC_MEDIUM; + break; + case '3': + val->i = RIG_AGC_SLOW; + break; case '4': case '5': case '6': val->i = RIG_AGC_AUTO; break; - default: return -RIG_EPROTO; + default: + return -RIG_EPROTO; } break; @@ -4394,15 +4528,17 @@ int newcat_set_func(RIG *rig, vfo_t vfo, setting_t func, int status) return -RIG_ENAVAIL; } - if (is_ftdx1200 || is_ftdx3000 || is_ft891 || is_ft991 || is_ftdx101) + if (is_ft891) { - snprintf(priv->cmd_str, sizeof(priv->cmd_str), "PR0%d%c", status ? 1 : 0, - cat_term); + snprintf(priv->cmd_str, sizeof(priv->cmd_str), "PR0%d%c", status ? 1 : 0, cat_term); + } + else if (is_ft991 || is_ftdx1200 || is_ftdx3000 || is_ftdx101) + { + snprintf(priv->cmd_str, sizeof(priv->cmd_str), "PR0%d%c", status ? 2 : 1, cat_term); } else { - snprintf(priv->cmd_str, sizeof(priv->cmd_str), "PR%d%c", status ? 1 : 0, - cat_term); + snprintf(priv->cmd_str, sizeof(priv->cmd_str), "PR%d%c", status ? 1 : 0, cat_term); } break; @@ -4674,7 +4810,14 @@ int newcat_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status) break; case RIG_FUNC_COMP: - *status = (retfunc[0] == '0') ? 0 : 1; + if (is_ft991 || is_ftdx1200 || is_ftdx3000 || is_ftdx101) + { + *status = (retfunc[0] == '2') ? 1 : 0; + } + else + { + *status = (retfunc[0] == '0') ? 0 : 1; + } break; case RIG_FUNC_MON: @@ -5543,14 +5686,14 @@ ncboolean newcat_valid_command(RIG *rig, char const *const command) is_ft950 = newcat_is_rig(rig, RIG_MODEL_FT950); is_ft991 = newcat_is_rig(rig, RIG_MODEL_FT991); is_ft2000 = newcat_is_rig(rig, RIG_MODEL_FT2000); - is_ft9000 = newcat_is_rig(rig, RIG_MODEL_FT9000); + is_ftdx9000 = newcat_is_rig(rig, RIG_MODEL_FT9000); is_ftdx5000 = newcat_is_rig(rig, RIG_MODEL_FTDX5000); is_ftdx1200 = newcat_is_rig(rig, RIG_MODEL_FTDX1200); is_ftdx3000 = newcat_is_rig(rig, RIG_MODEL_FTDX3000); is_ftdx101 = newcat_is_rig(rig, RIG_MODEL_FTDX101D); if (!is_ft450 && !is_ft950 && !is_ft891 && !is_ft991 && !is_ft2000 - && !is_ftdx5000 && !is_ft9000 && !is_ftdx1200 && !is_ftdx3000 && !is_ftdx101) + && !is_ftdx5000 && !is_ftdx9000 && !is_ftdx1200 && !is_ftdx3000 && !is_ftdx101) { rig_debug(RIG_DEBUG_ERR, "%s: '%s' is unknown\n", __func__, caps->model_name); return FALSE; @@ -5609,7 +5752,7 @@ ncboolean newcat_valid_command(RIG *rig, char const *const command) { return TRUE; } - else if (is_ft9000 && valid_commands[search_index].ft9000) + else if (is_ftdx9000 && valid_commands[search_index].ft9000) { return TRUE; }