From eeac97c72594b364fc65d760d4ca9d332796d380 Mon Sep 17 00:00:00 2001 From: Mike Black W9MDB Date: Thu, 10 Nov 2022 16:00:00 -0600 Subject: [PATCH] Fix FT-991 level_gran https://github.com/Hamlib/Hamlib/issues/1144 --- NEWS | 3 +++ doc/man1/rigctl.1 | 47 +++++++++++++++++++++++++++++++++++++++++++++ rigs/yaesu/ft991.c | 43 ++++++++++++++++++++++++++++++++++++----- rigs/yaesu/ft991.h | 2 +- rigs/yaesu/newcat.c | 18 ++++++++++------- src/idx_builtin.h | 2 +- 6 files changed, 101 insertions(+), 14 deletions(-) diff --git a/NEWS b/NEWS index 251f49cfa..64e100de0 100644 --- a/NEWS +++ b/NEWS @@ -17,6 +17,9 @@ Version 4.6 Version 4.5.1 * 2022-XX-XX + * Add RIG_FUNC_TUNER to flrig.c + * Fix FT-991 level_gran (needs to be done for lots of rigs) + * Fix man page rigctl to show units for LEVEL items * Fix Flex6xxx if_len * Fix FLRig set_ptt * Add KEYSPD to TS890 diff --git a/doc/man1/rigctl.1 b/doc/man1/rigctl.1 index b29f030a1..438de67d7 100644 --- a/doc/man1/rigctl.1 +++ b/doc/man1/rigctl.1 @@ -863,6 +863,53 @@ The Level Value can be a float or an integer value. For the AGC token the value is one of \(oq0\(cq = OFF, \(oq1\(cq = SUPERFAST, \(oq2\(cq = FAST, \(oq3\(cq = SLOW, \(oq4\(cq = USER, \(oq5\(cq = MEDIUM, \(oq6\(cq = AUTO. Note that not all values work on all rigs. To list usable values do "rigctl -m [modelnum] -u | grep AGC levels" or for Windows "rigctl -m [modelnum] -u | find "AGC levels"". +.IP +Level units +.in +4n +.EX +0.0-1.0 where 0=0% and 1.0=100% (except for BAL where 50% is center) + AF, ALC, ANTIVOX, BAL, COMP, MICGAIN, MONITOR_GAIN, NOTCHF_RAW, NR, RF, RFPOWER, RFPOWER_METER, USB_AF, VOXGAIN + +Amps + ID_METER(A) + +dB + NL, COMP_METER, PREAMP, ATT, SLOPE_LOW, SLOPE_HIGH, SPECTRUM_REF, SPECTRUM_ATT, STRENGTH + +Degrees(temperature) + TEMP_METER(C) + +Hz + CWPITCH, IF, NOTCHF, PBT_IN, PBT_OUT, SPECTRUM_EDGE_LOW, SPECTRUM_EDGE_HIGH, SPECTRUM_SPAN + +Seconds + VOXDELAY(ds), BKINDL(ms), BKIN_DLYMS(ms) + +Raw info from rig + RAWSTR, BAND_SELECT (subject to change -- index right now but may convert to band name) + +SWR + SWR + +Volts + VD_METER + +Lookup - if level shows 0/0/0 then it's probably a lookup value + METER RIG_METER_XXXX 1=SWR, 2=COMP, 4=ALC, 8=IC, 16=DB, 32=PO, 64=VDD, 128=Temp + AGC 0=None, 1=SuperFast, 2=Fast, 3=Slow, 4=User, 5=Medium, 6=Auto + Note: Not all AGC values may be available -- see AGC Level in dumpcaps (e.g. rigctl -m 1035 -u | grep AGC) + SPECTRUM_MODE 0=None, 1=Center, 2=Fixed, 3=Center Scroll, 4=Fixed Scroll + SPECTRUM_AVG rig specific + +Watts + RFPOWER_METER_WATTS + +WPM + KEYSPD +.in +.EE +.IP + .IP .BR Note : Passing a \(oq?\(cq (query) as the first argument instead of a Level token diff --git a/rigs/yaesu/ft991.c b/rigs/yaesu/ft991.c index d2af1e20f..4b4fc427e 100644 --- a/rigs/yaesu/ft991.c +++ b/rigs/yaesu/ft991.c @@ -141,7 +141,7 @@ const struct rig_caps ft991_caps = RIG_MODEL(RIG_MODEL_FT991), .model_name = "FT-991", .mfg_name = "Yaesu", - .version = NEWCAT_VER ".13", + .version = NEWCAT_VER ".14", .copyright = "LGPL", .status = RIG_STATUS_STABLE, .rig_type = RIG_TYPE_TRANSCEIVER, @@ -166,10 +166,43 @@ const struct rig_caps ft991_caps = .has_set_parm = RIG_PARM_NONE, .level_gran = { // 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 } }, + /* raw data */ + [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, + /* levels with dB units */ + [LVL_PREAMP] = { .min = { .i = 10 }, .max = { .i = 20 }, .step = { .i = 10 } }, + [LVL_ATT] = { .min = { .i = 12 }, .max = { .i = 12 }, .step = { .i = 0 } }, + [LVL_STRENGTH] = { .min = { .i = 0 }, .max = { .i = 60 }, .step = { .i = 0 } }, + [LVL_NB] = { .min = { .f = 0 }, .max = { .f = 10 }, .step = { .f = 1 } }, + /* levels with WPM units */ + [LVL_KEYSPD] = { .min = { .i = 4 }, .max = { .i = 60 }, .step = { .i = 1 } }, + /* levels with Hz units */ + [LVL_CWPITCH] = { .min = { .i = 300 }, .max = { .i = 1050 }, .step = { .i = 50 } }, + [LVL_IF] = { .min = { .i = -1200 }, .max = { .i = 1200 }, .step = { .i = 20 } }, + [LVL_NOTCHF] = { .min = { .i = 1 }, .max = { .i = 3200 }, .step = { .i = 10 } }, + /* levels with time units */ + [LVL_VOXDELAY] = { .min = { .i = 3 }, .max = { .i = 300 }, .step = { .i = 1 } }, + [LVL_BKINDL] = { .min = { .i = 30 }, .max = { .i = 3000 }, .step = { .i = 1 } }, + [LVL_BKIN_DLYMS] = { .min = { .i = 30 }, .max = { .i = 3000 }, .step = { .i = 1 } }, + /* level with misc units */ + [LVL_SWR] = { .min = { .f = 0 }, .max = { .f = 5.0 }, .step = { .f = 1.0f/255.0f } }, + [LVL_BAND_SELECT] = { .min = { .i = 0 }, .max = { .i = 16 }, .step = { .i = 1 } }, + /* levels with 0-1 values -- increment based on rig's range */ + [LVL_NR] = { .min = { .f = 0 }, .max = { .f = 1 }, .step = { .f = 1.0f/10.0f } }, + [LVL_AF] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/255.0f } }, + [LVL_RF] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/255.0f } }, + [LVL_RFPOWER] = { .min = { .f = .05 }, .max = { .f = 1 }, .step = { .f = 1.0f/100.0f } }, + [LVL_RFPOWER_METER] = { .min = { .f = .0 }, .max = { .f = 1 }, .step = { .f = 1.0f/255.0f } }, + [LVL_RFPOWER_METER_WATTS] = { .min = { .f = .0 }, .max = { .f = 100 }, .step = { .f = 1.0f/255.0f } }, + [LVL_COMP_METER] = { .min = { .f = .0 }, .max = { .f = 1 }, .step = { .f = 1.0f/255.0f } }, + [LVL_ID_METER] = { .min = { .f = .0 }, .max = { .f = 1 }, .step = { .f = 1.0f/255.0f } }, + [LVL_VD_METER] = { .min = { .f = .0 }, .max = { .f = 1 }, .step = { .f = 1.0f/255.0f } }, + [LVL_SQL] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, + [LVL_MICGAIN] = { .min = { .f = .0 }, .max = { .f = 1 }, .step = { .f = 1.0f/100.0f } }, + [LVL_MONITOR_GAIN] = { .min = { .f = .0 }, .max = { .f = 1 }, .step = { .f = 1.0f/100.0f } }, + [LVL_COMP] = { .min = { .f = .0 }, .max = { .f = 1 }, .step = { .f = 1.0f/100.0f } }, + [LVL_VOXGAIN] = { .min = { .f = .0 }, .max = { .f = 1 }, .step = { .f = 1.0f/100.0f } }, + [LVL_ANTIVOX] = { .min = { .f = .0 }, .max = { .f = 1 }, .step = { .f = 1.0f/100.0f } }, + [LVL_ALC] = { .min = { .f = .0 }, .max = { .f = 1 }, .step = { .f = 1.0f/100.0f } }, }, .ctcss_list = common_ctcss_list, .dcs_list = common_dcs_list, diff --git a/rigs/yaesu/ft991.h b/rigs/yaesu/ft991.h index 92e5c9887..7371bd593 100644 --- a/rigs/yaesu/ft991.h +++ b/rigs/yaesu/ft991.h @@ -54,7 +54,7 @@ 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_METER|RIG_LEVEL_BKINDL|RIG_LEVEL_BKIN_DLYMS|RIG_LEVEL_SQL|\ RIG_LEVEL_VOXGAIN|RIG_LEVEL_VOXDELAY|RIG_LEVEL_COMP|\ RIG_LEVEL_ANTIVOX|RIG_LEVEL_NR|RIG_LEVEL_NB|RIG_LEVEL_NOTCHF|\ RIG_LEVEL_MONITOR_GAIN|RIG_LEVEL_RFPOWER_METER|RIG_LEVEL_RFPOWER_METER_WATTS|\ diff --git a/rigs/yaesu/newcat.c b/rigs/yaesu/newcat.c index 560cb2909..c2ed5915a 100644 --- a/rigs/yaesu/newcat.c +++ b/rigs/yaesu/newcat.c @@ -4187,16 +4187,20 @@ int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) } else { - fpf = newcat_scale_float(15, val.f); - - if (fpf < 1) + if (is_ft991) { - fpf = 1; + fpf = newcat_scale_float(10, val.f); + if (fpf > 10) fpf=10; + } + else + { + fpf = newcat_scale_float(15, val.f); + if (fpf > 15) fpf=10; } - if (fpf > 15) + if (fpf < 0) { - fpf = 15; + fpf = 0; } SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "RL0%02d%c", fpf, cat_term); @@ -4443,7 +4447,7 @@ int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) else if (is_ft991) { fpf = newcat_scale_float(100, val.f); - SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "EX147%03d%c", fpf, cat_term); + SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "EX145%03d%c", fpf, cat_term); } else if (is_ft891) { diff --git a/src/idx_builtin.h b/src/idx_builtin.h index 004bdbbfb..4c4680344 100644 --- a/src/idx_builtin.h +++ b/src/idx_builtin.h @@ -165,7 +165,7 @@ #define LVL_USB_AF setting2idx_builtin(RIG_LEVEL_USB_AF) #define LVL_AGC_TIME setting2idx_builtin(RIG_LEVEL_AGC_TIME) -#define LVL_50 setting2idx_builtin(RIG_LEVEL_50) +#define LVL_BAND_SELECT setting2idx_builtin(RIG_LEVEL_BAND_SELECT) #define LVL_51 setting2idx_builtin(RIG_LEVEL_51) #define LVL_52 setting2idx_builtin(RIG_LEVEL_52) #define LVL_53 setting2idx_builtin(RIG_LEVEL_53)