Add SWR reading for PowerSDR/Thetis

pull/1416/head
Mike Black W9MDB 2023-11-05 16:45:15 -06:00
rodzic 31298bb917
commit 337fb0f3e5
2 zmienionych plików z 24 dodań i 2 usunięć

Wyświetl plik

@ -2551,6 +2551,7 @@ struct rig_cache {
struct timespec time_ptt;
struct timespec time_split;
int satmode; // if rig is in satellite mode
double swr; // keep swr
};
/**

Wyświetl plik

@ -49,7 +49,7 @@
#define POWERSDR_FUNC_ALL (RIG_FUNC_VOX|RIG_FUNC_SQL|RIG_FUNC_NB|RIG_FUNC_ANF|RIG_FUNC_MUTE|RIG_FUNC_RIT|RIG_FUNC_XIT|RIG_FUNC_TUNER)
#define POWERSDR_LEVEL_ALL (RIG_LEVEL_SLOPE_HIGH|RIG_LEVEL_SLOPE_LOW|RIG_LEVEL_KEYSPD|RIG_LEVEL_RFPOWER|RIG_LEVEL_RFPOWER_METER|RIG_LEVEL_RFPOWER_METER_WATTS|RIG_LEVEL_MICGAIN|RIG_LEVEL_VOXGAIN|RIG_LEVEL_SQL|RIG_LEVEL_AF|RIG_LEVEL_AGC|RIG_LEVEL_RF|RIG_LEVEL_IF|RIG_LEVEL_STRENGTH)
#define POWERSDR_LEVEL_ALL (RIG_LEVEL_SLOPE_HIGH|RIG_LEVEL_SLOPE_LOW|RIG_LEVEL_KEYSPD|RIG_LEVEL_RFPOWER|RIG_LEVEL_RFPOWER_METER|RIG_LEVEL_RFPOWER_METER_WATTS|RIG_LEVEL_MICGAIN|RIG_LEVEL_VOXGAIN|RIG_LEVEL_SQL|RIG_LEVEL_AF|RIG_LEVEL_AGC|RIG_LEVEL_RF|RIG_LEVEL_IF|RIG_LEVEL_STRENGTH|RIG_LEVEL_SWR)
#define POWERSDR_LEVEL_SET (RIG_LEVEL_SLOPE_HIGH|RIG_LEVEL_SLOPE_LOW|RIG_LEVEL_KEYSPD|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN|RIG_LEVEL_VOXGAIN|RIG_LEVEL_SQL|RIG_LEVEL_AF|RIG_LEVEL_AGC|RIG_LEVEL_RF|RIG_LEVEL_IF)
@ -837,6 +837,27 @@ int powersdr_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
ans = 3;
break;
case RIG_LEVEL_SWR:
{
// if not PTT we'll return the last SWR value
// seems desirable to able to see this always
if (!rig->state.cache.ptt) { val->f = rig->state.cache.swr; return RIG_OK; }
double forward=0, reverse=0;
cmd = "ZZRM5"; // get forward power
len = 5;
ans = 4;
retval = kenwood_safe_transaction(rig, cmd, lvlbuf, sizeof(lvlbuf), len + ans);
if (retval != RIG_OK) { val->f = 0; return RIG_OK;};
sscanf(lvlbuf,"ZZRM5%lg", &forward);
if (forward == 0) { val->f = 1.0; return RIG_OK;}
cmd = "ZZRM7";
retval = kenwood_safe_transaction(rig, cmd, lvlbuf, sizeof(lvlbuf), len + ans);
if (retval != RIG_OK) { val->f = 0; return RIG_OK;};
sscanf(lvlbuf,"ZZRM7%lg", &reverse);
rig->state.cache.swr = val->f = (1.0 + sqrt(reverse/forward)) / (1.0 - sqrt(reverse/forward));
return RIG_OK;
}
default:
return kenwood_get_level(rig, vfo, level, val);
}
@ -1321,7 +1342,7 @@ const struct rig_caps powersdr_caps =
RIG_MODEL(RIG_MODEL_POWERSDR),
.model_name = "PowerSDR/Thetis",
.mfg_name = "FlexRadio/ANAN",
.version = "20230819.0",
.version = "20231104.0",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,