Fix TT599 SWR level reading

Thanks to Peter Micuda OM4AEI
https://github.com/Hamlib/Hamlib/issues/1060
pull/1068/head
OM4AEI Peter Micuda 2022-06-08 16:31:02 -05:00 zatwierdzone przez Mike Black W9MDB
rodzic f7fe9dc239
commit 25a2a00c12
2 zmienionych plików z 66 dodań i 19 usunięć

Wyświetl plik

@ -74,6 +74,7 @@
#include <unistd.h> /* UNIX standard function definitions */
#include <time.h>
#include <sys/time.h>
#include <math.h>
#include <hamlib/rig.h>
#include "bandplan.h"
@ -1293,29 +1294,75 @@ int tt565_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
return retval;
}
/* in Xmit, response is @STFuuuRvvvSwww (or ...Swwww)
uuu = 000-100 (apx) fwd watts
vvv = 000-100 rev watts
www = 256-999 256 * VSWR
in Rcv, response is @SRMuuuSvvv
uuu = 000-100 (apx) Main S meter
vvv = 000-100 (apx) Sub S meter
*/
if (lvlbuf[1] != 'S' || lvl_len < 5)
if (rig->caps->rig_model == RIG_MODEL_TT599)
{
rig_debug(RIG_DEBUG_ERR, "%s: unexpected answer '%s'\n",
__func__, lvlbuf);
return -RIG_EPROTO;
}
double fwd, ref;
if (lvlbuf[2] == 'T')
/* in Xmit, response is @STF99R10<cr> 99 watts forward,1.0 watt reflected
uu = fwd watts
vv = rev watts x 10
in Rcv, response is @SRM16<CR> Indicates 16 dbm
uuu = 000-100 (apx) Main S meter
*/
if (lvlbuf[1] != 'S' || lvl_len < 5)
{
rig_debug(RIG_DEBUG_ERR, "%s: unexpected answer '%s'\n",
__func__, lvlbuf);
return -RIG_EPROTO;
}
if (lvlbuf[2] == 'T')
{
ref = atof(strchr(lvlbuf + 2, 'R') + 1) / 10.0; /* reflected power */
fwd = atof(strchr(lvlbuf + 2, 'F') + 1); /* forward power */
if (fwd == 0.0)
{
val->f = 0.0; /* no forward power */
}
else if (fwd == ref) /* too high SWR */
{
val->f = 9.99;
}
else
{
val->f = (1 + sqrt(ref / fwd)) / (1 - sqrt(ref / fwd)); /* calculate SWR */
}
if (val->f < 1.0) { val->f = 9.99; } /* high VSWR */
}
else { val->f = 0.0; } /* SWR in Receive = 0.0 */
}
else
{
val->f = atof(strchr(lvlbuf + 5, 'S') + 1) / 256.0;
if (val->f < 1.0) { val->f = 9.99; } /* high VSWR */
/* in Xmit, response is @STFuuuRvvvSwww (or ...Swwww)
uuu = 000-100 (apx) fwd watts
vvv = 000-100 rev watts
www = 256-999 256 * VSWR
in Rcv, response is @SRMuuuSvvv
uuu = 000-100 (apx) Main S meter
vvv = 000-100 (apx) Sub S meter
*/
if (lvlbuf[1] != 'S' || lvl_len < 5)
{
rig_debug(RIG_DEBUG_ERR, "%s: unexpected answer '%s'\n",
__func__, lvlbuf);
return -RIG_EPROTO;
}
if (lvlbuf[2] == 'T')
{
val->f = atof(strchr(lvlbuf + 5, 'S') + 1) / 256.0;
if (val->f < 1.0) { val->f = 9.99; } /* high VSWR */
}
else { val->f = 0.0; } /* SWR in Receive = 0.0 */
}
else { val->f = 0.0; } /* SWR in Receive = 0.0 */
break;

Wyświetl plik

@ -414,7 +414,7 @@ const struct rig_caps tt599_caps = {
RIG_MODEL(RIG_MODEL_TT599),
.model_name = "TT-599 Eagle",
.mfg_name = "Ten-Tec",
.version = BACKEND_VER ".1",
.version = BACKEND_VER ".2",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,