[Hamlib-commits] Hamlib -- Ham radio control libraries branch master updated. 3811071f9e80a570a7cbd
Library to control radio transceivers and receivers
Brought to you by:
n0nb
From: Michael B. <mdb...@us...> - 2020-09-18 20:39:04
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Hamlib -- Ham radio control libraries". The branch, master has been updated via 3811071f9e80a570a7cbd2ff4d1d5ba6d4708312 (commit) via 2a378919dbd8fb39eafaf7089785a96853ea979c (commit) via fd7ba5e8d089182a24a0b2b63e90dfc4b88f44d8 (commit) from 2b2786cd4761f604c3b752089c0216a39621e37c (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 3811071f9e80a570a7cbd2ff4d1d5ba6d4708312 Author: Michael Black W9MDB <mdb...@ya...> Date: Fri Sep 18 13:07:19 2020 -0500 Add Thetis/ANAN to PowerSDR description diff --git a/rigs/kenwood/flex6xxx.c b/rigs/kenwood/flex6xxx.c index 2b132cf6..8364e0f4 100644 --- a/rigs/kenwood/flex6xxx.c +++ b/rigs/kenwood/flex6xxx.c @@ -1010,9 +1010,9 @@ const struct rig_caps f6k_caps = const struct rig_caps powersdr_caps = { RIG_MODEL(RIG_MODEL_POWERSDR), - .model_name = "PowerSDR", - .mfg_name = "FlexRadio", - .version = "20200716.0", + .model_name = "PowerSDR/Thetis", + .mfg_name = "FlexRadio/ANAN", + .version = "20200918.0", .copyright = "LGPL", .status = RIG_STATUS_STABLE, .rig_type = RIG_TYPE_TRANSCEIVER, commit 2a378919dbd8fb39eafaf7089785a96853ea979c Author: Michael Black W9MDB <mdb...@ya...> Date: Fri Sep 18 13:04:31 2020 -0500 Add SQL to PowerSDR diff --git a/rigs/kenwood/flex6xxx.c b/rigs/kenwood/flex6xxx.c index a9b5f6ee..2b132cf6 100644 --- a/rigs/kenwood/flex6xxx.c +++ b/rigs/kenwood/flex6xxx.c @@ -28,6 +28,7 @@ #endif #include <stdlib.h> +#include <math.h> #include <hamlib/rig.h> #include "kenwood.h" @@ -48,9 +49,9 @@ #define F6K_ANTS (RIG_ANT_1|RIG_ANT_2|RIG_ANT_3) /* PowerSDR differences */ -#define POWERSDR_FUNC_ALL (RIG_FUNC_VOX) +#define POWERSDR_FUNC_ALL (RIG_FUNC_VOX|RIG_FUNC_SQL) -#define POWERSDR_LEVEL_ALL (RIG_LEVEL_SLOPE_HIGH|RIG_LEVEL_SLOPE_LOW|RIG_LEVEL_KEYSPD|RIG_LEVEL_RFPOWER_METER|RIG_LEVEL_MICGAIN|RIG_LEVEL_VOXGAIN) +#define POWERSDR_LEVEL_ALL (RIG_LEVEL_SLOPE_HIGH|RIG_LEVEL_SLOPE_LOW|RIG_LEVEL_KEYSPD|RIG_LEVEL_RFPOWER_METER|RIG_LEVEL_MICGAIN|RIG_LEVEL_VOXGAIN|RIG_LEVEL_SQL) static rmode_t flex_mode_table[KENWOOD_MODE_TABLE_MAX] = @@ -642,6 +643,8 @@ int powersdr_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) char cmd[KENWOOD_MAX_BUF_LEN]; int retval; int ival; + rmode_t mode; + pbwidth_t width; rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); @@ -650,31 +653,40 @@ int powersdr_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) case RIG_LEVEL_MICGAIN: ival = val.f * (10 - -40) - 40; snprintf(cmd, sizeof(cmd) - 1, "ZZMG%03d", ival); - retval = kenwood_transaction(rig, cmd, NULL, 0); - - if (retval != RIG_OK) - { - return retval; - } - break; case RIG_LEVEL_VOXGAIN: ival = val.f * 1000; snprintf(cmd, sizeof(cmd) - 1, "ZZVG%04d", ival); - retval = kenwood_transaction(rig, cmd, NULL, 0); + break; - if (retval != RIG_OK) + case RIG_LEVEL_SQL: + powersdr_get_mode(rig, vfo, &mode, &width); + + if (mode == RIG_MODE_FM) { - return retval; + ival = val.f * 100; // FM mode is 0 to 100 + } + else + { + ival = 160 - (val.f * 160); // all other modes 0 to 160 } + snprintf(cmd, sizeof(cmd) - 1, "ZZSQ%03d", ival); break; default: return kenwood_set_level(rig, vfo, level, val); } + retval = kenwood_transaction(rig, cmd, NULL, 0); + + if (retval != RIG_OK) + { + return retval; + } + + rig_debug(RIG_DEBUG_VERBOSE, "%s exiting\n", __func__); return RIG_OK; @@ -689,6 +701,8 @@ int powersdr_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) char *cmd; int retval; int len, ans; + rmode_t mode; + pbwidth_t width; rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); @@ -717,6 +731,12 @@ int powersdr_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) ans = 4; break; + case RIG_LEVEL_SQL: + cmd = "ZZSQ"; + len = 4; + ans = 3; + break; + default: return kenwood_get_level(rig, vfo, level, val); } @@ -758,6 +778,22 @@ int powersdr_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) val->f /= 1000; break; + case RIG_LEVEL_SQL: + n = sscanf(lvlbuf + len, "%f", &val->f); + + powersdr_get_mode(rig, vfo, &mode, &width); + + if (mode == RIG_MODE_FM) + { + val->f /= 100; // FM mode is 0 to 100 + } + else + { + val->f = fabs((val->f - 160) / -160); // all other modes 0 to 160 + } + + break; + default: rig_debug(RIG_DEBUG_ERR, "%s: should never get here\n", __func__); } @@ -768,7 +804,6 @@ int powersdr_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) int powersdr_set_func(RIG *rig, vfo_t vfo, setting_t func, int status) { char cmd[KENWOOD_MAX_BUF_LEN]; - int retval; rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); @@ -776,20 +811,17 @@ int powersdr_set_func(RIG *rig, vfo_t vfo, setting_t func, int status) { case RIG_FUNC_VOX: snprintf(cmd, sizeof(cmd) - 1, "ZZVE%01d", status); - retval = kenwood_transaction(rig, cmd, NULL, 0); - - if (retval != RIG_OK) - { - return retval; - } + break; + case RIG_FUNC_SQL: + snprintf(cmd, sizeof(cmd) - 1, "ZZSO%01d", status); break; default: return kenwood_set_func(rig, vfo, func, status); } - return RIG_OK; + return kenwood_transaction(rig, cmd, NULL, 0); } int powersdr_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status) @@ -814,6 +846,12 @@ int powersdr_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status) ans = 1; break; + case RIG_FUNC_SQL: + cmd = "ZZSO"; + len = 4; + ans = 1; + break; + default: return kenwood_get_func(rig, vfo, func, status); } @@ -831,6 +869,10 @@ int powersdr_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status) sscanf(lvlbuf + len, "%d", status); break; + case RIG_FUNC_SQL: + sscanf(lvlbuf + len, "%d", status); + break; + default: rig_debug(RIG_DEBUG_ERR, "%s: should never get here\n", __func__); } commit fd7ba5e8d089182a24a0b2b63e90dfc4b88f44d8 Author: Michael Black W9MDB <mdb...@ya...> Date: Fri Sep 18 12:14:32 2020 -0500 Added VOX and VOXGAIN to PowerSDR diff --git a/rigs/kenwood/flex6xxx.c b/rigs/kenwood/flex6xxx.c index 5571c6dd..a9b5f6ee 100644 --- a/rigs/kenwood/flex6xxx.c +++ b/rigs/kenwood/flex6xxx.c @@ -48,7 +48,9 @@ #define F6K_ANTS (RIG_ANT_1|RIG_ANT_2|RIG_ANT_3) /* PowerSDR differences */ -#define POWERSDR_LEVEL_ALL (RIG_LEVEL_SLOPE_HIGH|RIG_LEVEL_SLOPE_LOW|RIG_LEVEL_KEYSPD|RIG_LEVEL_RFPOWER_METER|RIG_LEVEL_MICGAIN) +#define POWERSDR_FUNC_ALL (RIG_FUNC_VOX) + +#define POWERSDR_LEVEL_ALL (RIG_LEVEL_SLOPE_HIGH|RIG_LEVEL_SLOPE_LOW|RIG_LEVEL_KEYSPD|RIG_LEVEL_RFPOWER_METER|RIG_LEVEL_MICGAIN|RIG_LEVEL_VOXGAIN) static rmode_t flex_mode_table[KENWOOD_MODE_TABLE_MAX] = @@ -657,6 +659,18 @@ int powersdr_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) break; + case RIG_LEVEL_VOXGAIN: + ival = val.f * 1000; + snprintf(cmd, sizeof(cmd) - 1, "ZZVG%04d", ival); + retval = kenwood_transaction(rig, cmd, NULL, 0); + + if (retval != RIG_OK) + { + return retval; + } + + break; + default: return kenwood_set_level(rig, vfo, level, val); } @@ -674,7 +688,7 @@ int powersdr_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) char lvlbuf[KENWOOD_MAX_BUF_LEN]; char *cmd; int retval; - int len; + int len, ans; rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); @@ -688,18 +702,26 @@ int powersdr_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) case RIG_LEVEL_RFPOWER_METER: cmd = "ZZRM5"; len = 5; + ans = 3; break; case RIG_LEVEL_MICGAIN: cmd = "ZZMG"; len = 4; + ans = 3; + break; + + case RIG_LEVEL_VOXGAIN: + cmd = "ZZVG"; + len = 4; + ans = 4; break; default: return kenwood_get_level(rig, vfo, level, val); } - retval = kenwood_safe_transaction(rig, cmd, lvlbuf, 10, len + 3); + retval = kenwood_safe_transaction(rig, cmd, lvlbuf, 10, len + ans); if (retval != RIG_OK) { @@ -729,11 +751,92 @@ int powersdr_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) // Setting val->f = (val->f - -40) / (10 - -40); break; + + case RIG_LEVEL_VOXGAIN: + // return is 0-1000 + n = sscanf(lvlbuf + len, "%f", &val->f); + val->f /= 1000; + break; + + default: + rig_debug(RIG_DEBUG_ERR, "%s: should never get here\n", __func__); + } + + return RIG_OK; +} + +int powersdr_set_func(RIG *rig, vfo_t vfo, setting_t func, int status) +{ + char cmd[KENWOOD_MAX_BUF_LEN]; + int retval; + + rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); + + switch (func) + { + case RIG_FUNC_VOX: + snprintf(cmd, sizeof(cmd) - 1, "ZZVE%01d", status); + retval = kenwood_transaction(rig, cmd, NULL, 0); + + if (retval != RIG_OK) + { + return retval; + } + + break; + + default: + return kenwood_set_func(rig, vfo, func, status); } return RIG_OK; } +int powersdr_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status) +{ + char lvlbuf[KENWOOD_MAX_BUF_LEN]; + char *cmd; + int retval; + int len, ans; + + rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); + + if (!status) + { + return -RIG_EINVAL; + } + + switch (func) + { + case RIG_FUNC_VOX: + cmd = "ZZVE"; + len = 4; + ans = 1; + break; + + default: + return kenwood_get_func(rig, vfo, func, status); + } + + retval = kenwood_safe_transaction(rig, cmd, lvlbuf, 10, len + ans); + + if (retval != RIG_OK) + { + return retval; + } + + switch (func) + { + case RIG_FUNC_VOX: + sscanf(lvlbuf + len, "%d", status); + break; + + default: + rig_debug(RIG_DEBUG_ERR, "%s: should never get here\n", __func__); + } + + return RIG_OK; +} /* * F6K rig capabilities. @@ -889,8 +992,8 @@ const struct rig_caps powersdr_caps = .timeout = 800, // some band transitions can take 600ms .retry = 3, - .has_get_func = RIG_FUNC_NONE, /* has VOX but not implemented here */ - .has_set_func = RIG_FUNC_NONE, + .has_get_func = POWERSDR_FUNC_ALL, + .has_set_func = POWERSDR_FUNC_ALL, .has_get_level = POWERSDR_LEVEL_ALL, .has_set_level = POWERSDR_LEVEL_ALL, .has_get_parm = RIG_PARM_NONE, @@ -986,6 +1089,8 @@ const struct rig_caps powersdr_caps = // correctly - use actual values instead of indices .set_level = powersdr_set_level, .get_level = powersdr_get_level, + .get_func = powersdr_get_func, + .set_func = powersdr_set_func, //.set_ant = kenwood_set_ant_no_ack, //.get_ant = kenwood_get_ant, }; ----------------------------------------------------------------------- Summary of changes: rigs/kenwood/flex6xxx.c | 169 ++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 158 insertions(+), 11 deletions(-) hooks/post-receive -- Hamlib -- Ham radio control libraries |