Attempt to use FT-991 S-meter values for recent Yaesu rigs

pull/426/head
Mikael Nousiainen 2020-10-23 12:32:10 +03:00
rodzic f7d1b74ff6
commit b09eadad56
1 zmienionych plików z 47 dodań i 24 usunięć

Wyświetl plik

@ -34,11 +34,10 @@
#include <stdlib.h>
#include <string.h> /* String function definitions */
#include <unistd.h> /* UNIX standard function definitions */
#include <math.h>
#include "hamlib/rig.h"
#include "iofunc.h"
#include "serial.h"
#include "misc.h"
#include "cal.h"
#include "newcat.h"
@ -94,6 +93,42 @@ typedef struct _yaesu_newcat_commands
ncboolean ft101;
} yaesu_newcat_commands_t;
/**
* Yaesu FT-991 S-meter scale, default for new Yaesu rigs.
* Determined by data from W6HN -- seems to be pretty linear
*
* SMeter, rig answer, %fullscale
* S0 SM0000 0
* S2 SM0026 10
* S4 SM0051 20
* S6 SM0081 30
* S7.5 SM0105 40
* S9 SM0130 50
* +12db SM0157 60
* +25db SM0186 70
* +35db SM0203 80
* +50db SM0237 90
* +60db SM0255 100
*
* 114dB range over 0-255 referenced to S0 of -54dB
*/
const cal_table_t yaesu_default_str_cal =
{
{
{ 0, -54, }, // S0
{ 26, -42, }, // S2
{ 51, -30, }, // S4
{ 81, -18, }, // S6
{ 105, -9, }, // S7.5
{ 130, 0, }, // S9
{ 157, 12, }, // S9+12dB
{ 186, 25, }, // S9+25dB
{ 203, 35, }, // S9+35dB
{ 237, 50, }, // S9+50dB
{ 255, 60, }, // S9+60dB
}
};
const cal_table_float_t yaesu_default_swr_cal =
{
5,
@ -3775,35 +3810,23 @@ int newcat_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
break;
case RIG_LEVEL_STRENGTH: // Yaesu's return straight s-meter answers
if (newcat_is_rig(rig, RIG_MODEL_FT991))
case RIG_LEVEL_STRENGTH:
if (rig->caps->str_cal.size > 0)
{
// value of 0.448 determined by data from W6HN
// seems to be pretty linear
// SMeter, rig answer, %fullscale
// S0 SM0000 0
// S2 SM0026 10
// S4 SM0051 20
// S6 SM0081 30
// S7.5 SM0105 40
// S9 SM0130 50
// +12db SM0157 60
// +25db SM0186 70
// +35db SM0203 80
// +50db SM0237 90
// +60db SM0255 100
// 114dB range over 0-255 referenced to S0 of -54dB
val->i = atoi(retlvl) * (114.0 / 255.0) - 54;
val->i = round(rig_raw2val(atoi(retlvl), &rig->caps->str_cal));
break;
}
else // some Yaesu's return straight s-meter answers
if (is_ft1200 || is_ft3000 || is_ft5000 || is_ft891 || is_ft991 || is_ft101)
{
val->i = round(rig_raw2val(atoi(retlvl), &yaesu_default_str_cal));
}
else // some Yaesu rigs return straight s-meter answers
{
// Return dbS9 -- does >S9 mean 10dB increments? If not, add to rig driver
if (val->i > 0) { val->i = (atoi(retlvl) - 9) * 10; }
else { val->i = (atoi(retlvl) - 9) * 6; } // Return dbS9 does >S9 mean 10dB increments?
}
break;
case RIG_LEVEL_RAWSTR: