[Hamlib-commits] Hamlib -- Ham radio control libraries branch master updated. 0576a01ec2b73cafec6f1
Library to control radio transceivers and receivers
Brought to you by:
n0nb
From: Michael B. <mdb...@us...> - 2020-10-02 03:53:57
|
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 0576a01ec2b73cafec6f1ea5506d014fa82d75ff (commit) via 3f94e66c9fe8ec3db7fe6494e58592334e913c27 (commit) via 614627d8ba5e4c37aed6964c6a2d4bddd2f121b3 (commit) via 5fdf98ec57982f6dc29e960dc4a6218d63e03a68 (commit) via 8020450559bfc4c713b11e3db78f95e76dd75788 (commit) via bbde85064a4858265cf2de5c00a8b523f6e189d5 (commit) via b6ed9b53e6d20a938e9ab830d1408b73207e3e58 (commit) via 0e50906ca1bb122fdddf1a03374e79ca8fbdd43f (commit) via 58c5f52de8db78c0fffab1cd375fe784f7df77cb (commit) via 92dcdcd952419dc27a68e413a785008bca4e8dca (commit) via 01364ba1baa2d97e7a4c0b79288720d7b4e3eb14 (commit) via b47028c59d49ac562a1371df0fe75a5c643384b3 (commit) via ca8e49eb2ba9e03300ab3d6601a955d59bf45123 (commit) via 28bf6ac2741cf9f57752f4e34056ba3af8fbb2e0 (commit) via 65bb646ef04c49585cec9ea33d44dcb68a16a379 (commit) via 3cbdd3c387c5bab1a7810b5b9748d2bfb8868cf3 (commit) via eb40d8811cad90bf2d08aec14b535c9ae0f6ea4c (commit) via 63d325eb915819f60f68746957750bd9865e37ba (commit) via 38daabee8e152fc569d3afef5e5fc9fd9f843e11 (commit) via 7455fa1b918527b1ae8395883cc57022adb784f0 (commit) via 49d24815b2040e31511eeec3b00b1382c5df45a3 (commit) via 73d947213f449bd0a2dc3a8a38c8c60e101e8ad7 (commit) via 3c6ae62e594873f286951e45a07518579513b1ac (commit) via cfff76dae653fdbc1161fb14a0fb1f8535ed48ba (commit) from c9cfd40e91a225184f8e9423cd93015c94a57385 (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 0576a01ec2b73cafec6f1ea5506d014fa82d75ff Author: Michael Black W9MDB <mdb...@ya...> Date: Thu Oct 1 22:51:31 2020 -0500 astyle files diff --git a/dummy/dummy.c b/dummy/dummy.c index 5bfad894..f7382559 100644 --- a/dummy/dummy.c +++ b/dummy/dummy.c @@ -1273,21 +1273,23 @@ static int dummy_set_ext_func(RIG *rig, vfo_t vfo, token_t token, int status) switch (token) { - case TOK_EL_MAGICEXTFUNC: - break; + case TOK_EL_MAGICEXTFUNC: + break; - default: - return -RIG_EINVAL; + default: + return -RIG_EINVAL; } switch (cfp->type) { - case RIG_CONF_CHECKBUTTON: - break; - case RIG_CONF_BUTTON: - break; - default: - return -RIG_EINTERNAL; + case RIG_CONF_CHECKBUTTON: + break; + + case RIG_CONF_BUTTON: + break; + + default: + return -RIG_EINTERNAL; } elp = find_ext(priv->ext_funcs, token); @@ -1301,7 +1303,7 @@ static int dummy_set_ext_func(RIG *rig, vfo_t vfo, token_t token, int status) elp->val.i = status; rig_debug(RIG_DEBUG_VERBOSE, "%s called: %s %d\n", __func__, - cfp->name, status); + cfp->name, status); return RIG_OK; } @@ -1322,10 +1324,11 @@ static int dummy_get_ext_func(RIG *rig, vfo_t vfo, token_t token, int *status) switch (token) { - case TOK_EL_MAGICEXTFUNC: - break; - default: - return -RIG_EINVAL; + case TOK_EL_MAGICEXTFUNC: + break; + + default: + return -RIG_EINVAL; } elp = find_ext(priv->ext_funcs, token); @@ -1339,7 +1342,7 @@ static int dummy_get_ext_func(RIG *rig, vfo_t vfo, token_t token, int *status) *status = elp->val.i; rig_debug(RIG_DEBUG_VERBOSE, "%s called: %s\n", __func__, - cfp->name); + cfp->name); return RIG_OK; } diff --git a/rigs/icom/ic7300.c b/rigs/icom/ic7300.c index 4f059a0d..d57ba7d0 100644 --- a/rigs/icom/ic7300.c +++ b/rigs/icom/ic7300.c @@ -901,7 +901,7 @@ int ic7300_set_parm(RIG *rig, setting_t parm, value_t val) switch (parm) { - unsigned char prmbuf[MAXFRAMELEN]; + unsigned char prmbuf[MAXFRAMELEN]; case RIG_PARM_ANN: { diff --git a/rigs/icom/ic7600.c b/rigs/icom/ic7600.c index dec54753..9c2fc55e 100644 --- a/rigs/icom/ic7600.c +++ b/rigs/icom/ic7600.c @@ -129,7 +129,8 @@ struct cmdparams ic7600_extcmds[] = { { 0 } } }; -int ic7600_ext_tokens[] = { +int ic7600_ext_tokens[] = +{ TOK_DRIVE_GAIN, TOK_BACKEND_NONE }; diff --git a/rigs/icom/ic7610.c b/rigs/icom/ic7610.c index 66670451..a121bbd3 100644 --- a/rigs/icom/ic7610.c +++ b/rigs/icom/ic7610.c @@ -127,7 +127,8 @@ struct cmdparams ic7610_extcmds[] = { { 0 } } }; -int ic7610_ext_tokens[] = { +int ic7610_ext_tokens[] = +{ TOK_DRIVE_GAIN, TOK_DIGI_SEL_FUNC, TOK_DIGI_SEL_LEVEL, TOK_BACKEND_NONE }; diff --git a/rigs/icom/ic7700.c b/rigs/icom/ic7700.c index 03f4d5c6..03d2f7c8 100644 --- a/rigs/icom/ic7700.c +++ b/rigs/icom/ic7700.c @@ -111,7 +111,8 @@ struct cmdparams ic7700_extcmds[] = { { 0 } } }; -int ic7700_ext_tokens[] = { +int ic7700_ext_tokens[] = +{ TOK_DRIVE_GAIN, TOK_DIGI_SEL_FUNC, TOK_DIGI_SEL_LEVEL, TOK_BACKEND_NONE }; diff --git a/rigs/icom/ic7800.c b/rigs/icom/ic7800.c index e3ad8de4..ef9b83ef 100644 --- a/rigs/icom/ic7800.c +++ b/rigs/icom/ic7800.c @@ -114,7 +114,8 @@ struct cmdparams ic7800_extcmds[] = { { 0 } } }; -int ic7800_ext_tokens[] = { +int ic7800_ext_tokens[] = +{ TOK_DRIVE_GAIN, TOK_DIGI_SEL_FUNC, TOK_DIGI_SEL_LEVEL, TOK_BACKEND_NONE }; @@ -347,6 +348,7 @@ int ic7800_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) } return icom_set_level(rig, vfo, level, val); + default: return icom_set_level(rig, vfo, level, val); } @@ -378,7 +380,9 @@ int ic7800_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) { val->i = rig->state.attenuator[val->i - 1]; } + break; + default: return icom_get_level(rig, vfo, level, val); } diff --git a/rigs/icom/ic785x.c b/rigs/icom/ic785x.c index f100d238..6f7fb9a3 100644 --- a/rigs/icom/ic785x.c +++ b/rigs/icom/ic785x.c @@ -120,7 +120,8 @@ struct cmdparams ic785x_extcmds[] = }; -int ic785x_ext_tokens[] = { +int ic785x_ext_tokens[] = +{ TOK_DRIVE_GAIN, TOK_DIGI_SEL_FUNC, TOK_DIGI_SEL_LEVEL, TOK_BACKEND_NONE }; @@ -331,5 +332,5 @@ int ic785x_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) int ic785x_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) { - return ic7800_get_level(rig, vfo, level, val); + return ic7800_get_level(rig, vfo, level, val); } diff --git a/rigs/icom/icom.c b/rigs/icom/icom.c index df5b4a59..63007070 100644 --- a/rigs/icom/icom.c +++ b/rigs/icom/icom.c @@ -3241,9 +3241,12 @@ int icom_get_ext_func(RIG *rig, vfo_t vfo, token_t token, int *status) { value_t value; int result = icom_get_ext_cmd(rig, vfo, token, &value); - if (result == RIG_OK) { + + if (result == RIG_OK) + { *status = value.i; } + return result; } else { i++; } @@ -5411,6 +5414,7 @@ int icom_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status) rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); value_t value; + for (i = 0; extcmds && extcmds[i].id.s != 0; i++) { rig_debug(RIG_DEBUG_TRACE, "%s: i=%d\n", __func__, i); @@ -5418,9 +5422,12 @@ int icom_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status) if (extcmds[i].cmdparamtype == CMD_PARAM_TYPE_FUNC && extcmds[i].id.s == func) { int result = icom_get_cmd(rig, vfo, (struct cmdparams *)&extcmds[i], &value); - if (result == RIG_OK) { + + if (result == RIG_OK) + { *status = value.i; } + return result; } } diff --git a/rigs/kenwood/elecraft.c b/rigs/kenwood/elecraft.c index 97bc1381..3fedc481 100644 --- a/rigs/kenwood/elecraft.c +++ b/rigs/kenwood/elecraft.c @@ -183,31 +183,44 @@ int elecraft_open(RIG *rig) case RIG_MODEL_K3S: case RIG_MODEL_KX2: case RIG_MODEL_KX3: - // we need to know what's hooked up for PC command max levels - err = kenwood_safe_transaction(rig, "OM", buf, KENWOOD_MAX_BUF_LEN, 15); - if (err != RIG_OK) { return err; } - rig_debug(RIG_DEBUG_TRACE, "%s: OM=%s\n", __func__, buf); - priv->has_kpa3 = 0; - if (strstr(buf,"P")) priv->has_kpa3 = 1; - if (buf[13] == '0') // then we have a KX3 or KX2 - { - char modelnum; - modelnum = buf[14]; - switch (modelnum) - { - case '1': model = "KX2";break; - case '2': model = "KX3";break; - default: - rig_debug(RIG_DEBUG_ERR, "%s: Unknown Elecraft modelnum=%c, expected 1 or 2\n", __func__, modelnum); - break; - } - if (strstr(buf,"P")) priv->has_kpa100 = 1; - } - else { - model = "K3"; - if (strstr(buf,"R")) model = "K3S"; - } - rig_debug(RIG_DEBUG_TRACE, "%s: model=%s, kpa3%d\n", __func__, model, priv->has_kpa3); + // we need to know what's hooked up for PC command max levels + err = kenwood_safe_transaction(rig, "OM", buf, KENWOOD_MAX_BUF_LEN, 15); + + if (err != RIG_OK) { return err; } + + rig_debug(RIG_DEBUG_TRACE, "%s: OM=%s\n", __func__, buf); + priv->has_kpa3 = 0; + + if (strstr(buf, "P")) { priv->has_kpa3 = 1; } + + if (buf[13] == '0') // then we have a KX3 or KX2 + { + char modelnum; + modelnum = buf[14]; + + switch (modelnum) + { + case '1': model = "KX2"; break; + + case '2': model = "KX3"; break; + + default: + rig_debug(RIG_DEBUG_ERR, "%s: Unknown Elecraft modelnum=%c, expected 1 or 2\n", + __func__, modelnum); + break; + } + + if (strstr(buf, "P")) { priv->has_kpa100 = 1; } + } + else + { + model = "K3"; + + if (strstr(buf, "R")) { model = "K3S"; } + } + + rig_debug(RIG_DEBUG_TRACE, "%s: model=%s, kpa3%d\n", __func__, model, + priv->has_kpa3); err = elecraft_get_extension_level(rig, "K2", &priv->k2_ext_lvl); diff --git a/rigs/kenwood/k3.c b/rigs/kenwood/k3.c index c33357cb..76016dc8 100644 --- a/rigs/kenwood/k3.c +++ b/rigs/kenwood/k3.c @@ -1581,44 +1581,54 @@ int k3_get_split_mode(RIG *rig, vfo_t vfo, rmode_t *tx_mode, static int k3_get_maxpower(RIG *rig) { - int retval; - int maxpower = 12; // K3 default power level - char levelbuf[16]; - struct kenwood_priv_data *priv = rig->state.priv; - // default range is 0-12 if there is no KPA3 installed - if (priv->has_kpa3 || priv->has_kpa100) maxpower = 110; - if (RIG_IS_KX2 || RIG_IS_KX3) { - - int bandnum = -1; - retval = kenwood_safe_transaction(rig, "BN", levelbuf, KENWOOD_MAX_BUF_LEN, 4); - if (retval != RIG_OK) { return retval; } - sscanf(levelbuf,"BN%d", &bandnum); - switch(bandnum) - { - case 1: - case 2: - case 3: - case 4: - case 5: - maxpower = 15; - break; - case 0: // 160M - case 6: // 17M - case 7: // 15M - case 8: // 12M - case 9: // 10M - maxpower = 12; - break; - case 10: // 6M - maxpower = 10; - break; - default: // are transverters all limited to 3W?? - maxpower = 3; - break; - } - } - rig_debug(RIG_DEBUG_TRACE, "%s: maxpower=%d\n", __func__, maxpower); - return maxpower; + int retval; + int maxpower = 12; // K3 default power level + char levelbuf[16]; + struct kenwood_priv_data *priv = rig->state.priv; + + // default range is 0-12 if there is no KPA3 installed + if (priv->has_kpa3 || priv->has_kpa100) { maxpower = 110; } + + if (RIG_IS_KX2 || RIG_IS_KX3) + { + + int bandnum = -1; + retval = kenwood_safe_transaction(rig, "BN", levelbuf, KENWOOD_MAX_BUF_LEN, 4); + + if (retval != RIG_OK) { return retval; } + + sscanf(levelbuf, "BN%d", &bandnum); + + switch (bandnum) + { + case 1: + case 2: + case 3: + case 4: + case 5: + maxpower = 15; + break; + + case 0: // 160M + case 6: // 17M + case 7: // 15M + case 8: // 12M + case 9: // 10M + maxpower = 12; + break; + + case 10: // 6M + maxpower = 10; + break; + + default: // are transverters all limited to 3W?? + maxpower = 3; + break; + } + } + + rig_debug(RIG_DEBUG_TRACE, "%s: maxpower=%d\n", __func__, maxpower); + return maxpower; } int k3_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) @@ -1724,8 +1734,9 @@ int k3_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) break; case RIG_LEVEL_RFPOWER: - snprintf(levelbuf, sizeof(levelbuf), "PC%03d", (int)(val.f * k3_get_maxpower(rig))); - break; + snprintf(levelbuf, sizeof(levelbuf), "PC%03d", + (int)(val.f * k3_get_maxpower(rig))); + break; default: return kenwood_set_level(rig, vfo, level, val); @@ -1970,7 +1981,7 @@ int k3_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) sscanf(levelbuf + 2, "%d", &lvl); val->f = (float) lvl / 250.0f; - break; + break; case RIG_LEVEL_AF: retval = kenwood_safe_transaction(rig, "AG", levelbuf, sizeof(levelbuf), 5); @@ -1998,6 +2009,7 @@ int k3_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) sscanf(levelbuf + 2, "%d", &lvl); val->f = (float) lvl / 60.0f; break; + case RIG_LEVEL_RFPOWER: retval = kenwood_safe_transaction(rig, "PC", levelbuf, sizeof(levelbuf), 5); @@ -2008,7 +2020,7 @@ int k3_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) sscanf(levelbuf + 2, "%d", &lvl); val->f = (float) lvl / k3_get_maxpower(rig); - break; + break; default: return kenwood_get_level(rig, vfo, level, val); @@ -2030,16 +2042,18 @@ int kx3_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) { case RIG_LEVEL_RF: ival = val.f * (250.0 - 190.0) + 190.0; - snprintf(cmdbuf,sizeof(cmdbuf)-1,"RG%03d", ival); - return kenwood_transaction(rig, cmdbuf, NULL, 0); + snprintf(cmdbuf, sizeof(cmdbuf) - 1, "RG%03d", ival); + return kenwood_transaction(rig, cmdbuf, NULL, 0); + case RIG_LEVEL_AF: - // manual says 0-255 as of Rev G5 but experiment says 0-60 + // manual says 0-255 as of Rev G5 but experiment says 0-60 snprintf(cmdbuf, sizeof(cmdbuf), "AG%03d", (int)(val.f * 60.0f)); - return kenwood_transaction(rig, cmdbuf, NULL, 0); + return kenwood_transaction(rig, cmdbuf, NULL, 0); + case RIG_LEVEL_MICGAIN: - // manual says 0-255 as of Rev G5 but experiment says 0-80 + // manual says 0-255 as of Rev G5 but experiment says 0-80 snprintf(cmdbuf, sizeof(cmdbuf), "MG%03d", (int)(val.f * 80.0f)); - return kenwood_transaction(rig, cmdbuf, NULL, 0); + return kenwood_transaction(rig, cmdbuf, NULL, 0); } return k3_set_level(rig, vfo, level, val); @@ -2055,20 +2069,26 @@ int kx3_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) { case RIG_LEVEL_AF: retval = get_kenwood_level(rig, "AG", NULL, &val->i); + if (retval != RIG_OK) { return retval; } - // manual says 0-255 as of Rev G5 but experiment says 0-60 + + // manual says 0-255 as of Rev G5 but experiment says 0-60 val->f = val->i / 60.0; return retval; case RIG_LEVEL_RF: retval = get_kenwood_level(rig, "RG", NULL, &val->i); + if (retval != RIG_OK) { return retval; } - val->f = (val->i - 190.0) / (250.0-190.0); + + val->f = (val->i - 190.0) / (250.0 - 190.0); return retval; case RIG_LEVEL_MICGAIN: retval = get_kenwood_level(rig, "MG", NULL, &val->i); + if (retval != RIG_OK) { return retval; } + val->f = val->i / 80.0; return retval; diff --git a/rigs/kenwood/kenwood.c b/rigs/kenwood/kenwood.c index 94e33e4f..02dac60a 100644 --- a/rigs/kenwood/kenwood.c +++ b/rigs/kenwood/kenwood.c @@ -2203,7 +2203,7 @@ int kenwood_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) /* * Best estimate: 1.0 corresponds to 100W */ - kenwood_val = val.f * 100; + kenwood_val = val.f * 100; snprintf(levelbuf, sizeof(levelbuf), "PC%03d", kenwood_val); break; @@ -2240,6 +2240,7 @@ int kenwood_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) case RIG_LEVEL_MICGAIN: if (val.f > 1.0 || val.f < 0) { return -RIG_EINVAL; } + kenwood_val = val.f * 100; snprintf(levelbuf, sizeof(levelbuf), "MG%03d", kenwood_val); break; @@ -2249,6 +2250,7 @@ int kenwood_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) /* XXX check level range */ // KX2 and KX3 have range -190 to 250 if (val.f > 1.0 || val.f < 0) { return -RIG_EINVAL; } + kenwood_val = val.f * 255.0; snprintf(levelbuf, sizeof(levelbuf), "RG%03d", kenwood_val); break; @@ -2661,6 +2663,7 @@ int kenwood_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) rig_debug(RIG_DEBUG_ERR, "%s: Error getting MICGAIN\n", __func__); return ret; } + val->f = val->i / 255.0; return RIG_OK; diff --git a/rigs/yaesu/newcat.c b/rigs/yaesu/newcat.c index bbdad637..b1f17832 100644 --- a/rigs/yaesu/newcat.c +++ b/rigs/yaesu/newcat.c @@ -2685,9 +2685,12 @@ int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) { return -RIG_ENAVAIL; } - if (newcat_is_rig(rig, RIG_MODEL_TS890S)) // new format for the command with VFO selection + + if (newcat_is_rig(rig, + RIG_MODEL_TS890S)) // new format for the command with VFO selection { format = "MS0%d;"; + if (vfo == RIG_VFO_SUB) { format = "MS1%d"; @@ -3672,9 +3675,12 @@ int newcat_set_func(RIG *rig, vfo_t vfo, setting_t func, int status) snprintf(priv->cmd_str, sizeof(priv->cmd_str), "NB0%d%c", status ? 1 : 0, cat_term); - if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE){ - priv->cmd_str[2] = main_sub_vfo; + + if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE) + { + priv->cmd_str[2] = main_sub_vfo; } + break; case RIG_FUNC_NR: @@ -3685,9 +3691,12 @@ int newcat_set_func(RIG *rig, vfo_t vfo, setting_t func, int status) snprintf(priv->cmd_str, sizeof(priv->cmd_str), "NR0%d%c", status ? 1 : 0, cat_term); - if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE){ - priv->cmd_str[2] = main_sub_vfo; + + if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE) + { + priv->cmd_str[2] = main_sub_vfo; } + break; case RIG_FUNC_COMP: diff --git a/src/ext.c b/src/ext.c index 3c7adaef..ddd42403 100644 --- a/src/ext.c +++ b/src/ext.c @@ -62,7 +62,8 @@ static int rig_has_ext_token(RIG *rig, token_t token) for (i = 0; ext_tokens[i] != TOK_BACKEND_NONE; i++) { - if (ext_tokens[i] == token) { + if (ext_tokens[i] == token) + { return 1; } } @@ -83,10 +84,10 @@ static int rig_has_ext_token(RIG *rig, token_t token) * rig_ext_func_foreach. */ int HAMLIB_API rig_ext_func_foreach(RIG *rig, - int (*cfunc)(RIG *, - const struct confparams *, - rig_ptr_t), - rig_ptr_t data) + int (*cfunc)(RIG *, + const struct confparams *, + rig_ptr_t), + rig_ptr_t data) { const struct confparams *cfp; @@ -99,7 +100,8 @@ int HAMLIB_API rig_ext_func_foreach(RIG *rig, for (cfp = rig->caps->extfuncs; cfp && cfp->name; cfp++) { - if (!rig_has_ext_token(rig, cfp->token)) { + if (!rig_has_ext_token(rig, cfp->token)) + { continue; } @@ -148,7 +150,8 @@ int HAMLIB_API rig_ext_level_foreach(RIG *rig, for (cfp = rig->caps->extlevels; cfp && cfp->name; cfp++) { - if (!rig_has_ext_token(rig, cfp->token)) { + if (!rig_has_ext_token(rig, cfp->token)) + { continue; } @@ -197,7 +200,8 @@ int HAMLIB_API rig_ext_parm_foreach(RIG *rig, for (cfp = rig->caps->extparms; cfp && cfp->name; cfp++) { - if (!rig_has_ext_token(rig, cfp->token)) { + if (!rig_has_ext_token(rig, cfp->token)) + { continue; } diff --git a/src/settings.c b/src/settings.c index 4a81426a..8cf24837 100644 --- a/src/settings.c +++ b/src/settings.c @@ -534,9 +534,11 @@ int HAMLIB_API rig_set_func(RIG *rig, vfo_t vfo, setting_t func, int status) return caps->set_func(rig, vfo, func, status); } - else { + else + { int targetable = caps->targetable_vfo & RIG_TARGETABLE_FUNC; - rig_debug(RIG_DEBUG_TRACE, "%s: targetable=%d, vfo=%s, currvfo=%s\n", __func__, targetable, rig_strvfo(vfo), rig_strvfo(rig->state.current_vfo)); + rig_debug(RIG_DEBUG_TRACE, "%s: targetable=%d, vfo=%s, currvfo=%s\n", __func__, + targetable, rig_strvfo(vfo), rig_strvfo(rig->state.current_vfo)); } if (!caps->set_vfo) commit 3f94e66c9fe8ec3db7fe6494e58592334e913c27 Author: Michael Black W9MDB <mdb...@ya...> Date: Thu Oct 1 16:08:53 2020 -0700 Fix K3/K3S/KX2/KX3 RFPOWER set/get for band specific power levels diff --git a/rigs/kenwood/elecraft.c b/rigs/kenwood/elecraft.c index 52e4d249..97bc1381 100644 --- a/rigs/kenwood/elecraft.c +++ b/rigs/kenwood/elecraft.c @@ -94,8 +94,9 @@ int elecraft_get_firmware_revision_level(RIG *rig, const char *cmd, int elecraft_open(RIG *rig) { int err; - char id[KENWOOD_MAX_BUF_LEN]; + char buf[KENWOOD_MAX_BUF_LEN]; struct kenwood_priv_data *priv = rig->state.priv; + char *model = "Unknown"; rig_debug(RIG_DEBUG_VERBOSE, "%s called, rig version=%s\n", __func__, @@ -134,7 +135,7 @@ int elecraft_open(RIG *rig) return err; } - err = read_string(&rs->rigport, id, sizeof(id), ";", 1); + err = read_string(&rs->rigport, buf, sizeof(buf), ";", 1); if (err < 0) { @@ -142,7 +143,7 @@ int elecraft_open(RIG *rig) return err; } - rig_debug(RIG_DEBUG_VERBOSE, "%s: id=%s\n", __func__, id); + rig_debug(RIG_DEBUG_VERBOSE, "%s: id=%s\n", __func__, buf); #if 0 if (err != RIG_OK) @@ -155,7 +156,7 @@ int elecraft_open(RIG *rig) } else // Standard Kenwood { - err = verify_kenwood_id(rig, id); + err = verify_kenwood_id(rig, buf); if (err != RIG_OK) { @@ -182,6 +183,32 @@ int elecraft_open(RIG *rig) case RIG_MODEL_K3S: case RIG_MODEL_KX2: case RIG_MODEL_KX3: + // we need to know what's hooked up for PC command max levels + err = kenwood_safe_transaction(rig, "OM", buf, KENWOOD_MAX_BUF_LEN, 15); + if (err != RIG_OK) { return err; } + rig_debug(RIG_DEBUG_TRACE, "%s: OM=%s\n", __func__, buf); + priv->has_kpa3 = 0; + if (strstr(buf,"P")) priv->has_kpa3 = 1; + if (buf[13] == '0') // then we have a KX3 or KX2 + { + char modelnum; + modelnum = buf[14]; + switch (modelnum) + { + case '1': model = "KX2";break; + case '2': model = "KX3";break; + default: + rig_debug(RIG_DEBUG_ERR, "%s: Unknown Elecraft modelnum=%c, expected 1 or 2\n", __func__, modelnum); + break; + } + if (strstr(buf,"P")) priv->has_kpa100 = 1; + } + else { + model = "K3"; + if (strstr(buf,"R")) model = "K3S"; + } + rig_debug(RIG_DEBUG_TRACE, "%s: model=%s, kpa3%d\n", __func__, model, priv->has_kpa3); + err = elecraft_get_extension_level(rig, "K2", &priv->k2_ext_lvl); if (err != RIG_OK) diff --git a/rigs/kenwood/k3.c b/rigs/kenwood/k3.c index c1846d3e..c33357cb 100644 --- a/rigs/kenwood/k3.c +++ b/rigs/kenwood/k3.c @@ -1579,6 +1579,48 @@ int k3_get_split_mode(RIG *rig, vfo_t vfo, rmode_t *tx_mode, return RIG_OK; } +static int k3_get_maxpower(RIG *rig) +{ + int retval; + int maxpower = 12; // K3 default power level + char levelbuf[16]; + struct kenwood_priv_data *priv = rig->state.priv; + // default range is 0-12 if there is no KPA3 installed + if (priv->has_kpa3 || priv->has_kpa100) maxpower = 110; + if (RIG_IS_KX2 || RIG_IS_KX3) { + + int bandnum = -1; + retval = kenwood_safe_transaction(rig, "BN", levelbuf, KENWOOD_MAX_BUF_LEN, 4); + if (retval != RIG_OK) { return retval; } + sscanf(levelbuf,"BN%d", &bandnum); + switch(bandnum) + { + case 1: + case 2: + case 3: + case 4: + case 5: + maxpower = 15; + break; + case 0: // 160M + case 6: // 17M + case 7: // 15M + case 8: // 12M + case 9: // 10M + maxpower = 12; + break; + case 10: // 6M + maxpower = 10; + break; + default: // are transverters all limited to 3W?? + maxpower = 3; + break; + } + } + rig_debug(RIG_DEBUG_TRACE, "%s: maxpower=%d\n", __func__, maxpower); + return maxpower; +} + int k3_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) { char levelbuf[16]; @@ -1682,9 +1724,8 @@ int k3_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) break; case RIG_LEVEL_RFPOWER: - // range is 0-12 if there is no KPA3 installed - snprintf(levelbuf, sizeof(levelbuf), "PC%03d", (int)(val.f * 12.0f)); - break; + snprintf(levelbuf, sizeof(levelbuf), "PC%03d", (int)(val.f * k3_get_maxpower(rig))); + break; default: return kenwood_set_level(rig, vfo, level, val); @@ -1957,6 +1998,17 @@ int k3_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) sscanf(levelbuf + 2, "%d", &lvl); val->f = (float) lvl / 60.0f; break; + case RIG_LEVEL_RFPOWER: + retval = kenwood_safe_transaction(rig, "PC", levelbuf, sizeof(levelbuf), 5); + + if (retval != RIG_OK) + { + return retval; + } + + sscanf(levelbuf + 2, "%d", &lvl); + val->f = (float) lvl / k3_get_maxpower(rig); + break; default: return kenwood_get_level(rig, vfo, level, val); diff --git a/rigs/kenwood/kenwood.h b/rigs/kenwood/kenwood.h index 85ea6589..ce8ec5b2 100644 --- a/rigs/kenwood/kenwood.h +++ b/rigs/kenwood/kenwood.h @@ -117,18 +117,20 @@ struct kenwood_priv_data int k2_ext_lvl; /* Initial K2 extension level */ int k3_ext_lvl; /* Initial K3 extension level */ int k2_md_rtty; /* K2 RTTY mode available flag, 1 = RTTY, 0 = N/A */ - char *fw_rev; /* firmware revision level */ - int trn_state; /* AI state discovered at startup */ + int has_kpa3; /* Elecraft K3 has k3pa for PC command */ + int has_kpa100; /* Elecraft KX3/KX2 has kpa100 for PC command */ + char *fw_rev; /* firmware revision level */ + int trn_state; /* AI state discovered at startup */ unsigned fw_rev_uint; /* firmware revision as a number 1.07 -> 107 */ char verify_cmd[4]; /* command used to verify set commands */ int is_emulation; /* flag for TS-2000 emulations */ void *data; /* model specific data */ - rmode_t curr_mode; /* used for is_emulation to avoid get_mode on VFOB */ + rmode_t curr_mode; /* used for is_emulation to avoid get_mode on VFOB */ struct timespec cache_start; char last_if_response[KENWOOD_MAX_BUF_LEN]; - int poweron; /* to avoid powering on more than once */ - int has_rit2; /* rig has set 2 rit command */ - int ag_format; /* which AG command is being used...see LEVEL_AF in kenwood.c*/ + int poweron; /* to avoid powering on more than once */ + int has_rit2; /* rig has set 2 rit command */ + int ag_format; /* which AG command is being used...see LEVEL_AF in kenwood.c*/ }; commit 614627d8ba5e4c37aed6964c6a2d4bddd2f121b3 Author: Michael Black W9MDB <mdb...@ya...> Date: Thu Oct 1 09:46:01 2020 -0700 Change KX3 MICGAIN level to 0-80 diff --git a/rigs/kenwood/k3.c b/rigs/kenwood/k3.c index bff4f9a6..c1846d3e 100644 --- a/rigs/kenwood/k3.c +++ b/rigs/kenwood/k3.c @@ -1985,8 +1985,8 @@ int kx3_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) snprintf(cmdbuf, sizeof(cmdbuf), "AG%03d", (int)(val.f * 60.0f)); return kenwood_transaction(rig, cmdbuf, NULL, 0); case RIG_LEVEL_MICGAIN: - // manual says 0-255 as of Rev G5 but experiment says 0-99 - snprintf(cmdbuf, sizeof(cmdbuf), "MG%03d", (int)(val.f * 99.0f)); + // manual says 0-255 as of Rev G5 but experiment says 0-80 + snprintf(cmdbuf, sizeof(cmdbuf), "MG%03d", (int)(val.f * 80.0f)); return kenwood_transaction(rig, cmdbuf, NULL, 0); } @@ -2017,7 +2017,7 @@ int kx3_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) case RIG_LEVEL_MICGAIN: retval = get_kenwood_level(rig, "MG", NULL, &val->i); if (retval != RIG_OK) { return retval; } - val->f = val->i / 99.0; + val->f = val->i / 80.0; return retval; case RIG_LEVEL_RFPOWER_METER: commit 5fdf98ec57982f6dc29e960dc4a6218d63e03a68 Author: Michael Black W9MDB <mdb...@ya...> Date: Wed Sep 30 21:35:06 2020 -0700 Remove unneeded k3 code from kenwood.c Implement RFPOWER for kx3 https://github.com/Hamlib/Hamlib/issues/388 diff --git a/rigs/kenwood/k3.c b/rigs/kenwood/k3.c index 28bc75e1..bff4f9a6 100644 --- a/rigs/kenwood/k3.c +++ b/rigs/kenwood/k3.c @@ -1681,6 +1681,11 @@ int k3_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) snprintf(levelbuf, sizeof(levelbuf), "ML%03d", (int)(val.f * 60.0f)); break; + case RIG_LEVEL_RFPOWER: + // range is 0-12 if there is no KPA3 installed + snprintf(levelbuf, sizeof(levelbuf), "PC%03d", (int)(val.f * 12.0f)); + break; + default: return kenwood_set_level(rig, vfo, level, val); } diff --git a/rigs/kenwood/kenwood.c b/rigs/kenwood/kenwood.c index beca782a..94e33e4f 100644 --- a/rigs/kenwood/kenwood.c +++ b/rigs/kenwood/kenwood.c @@ -2203,15 +2203,7 @@ int kenwood_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) /* * Best estimate: 1.0 corresponds to 100W */ - if (RIG_IS_K3 || RIG_IS_KX3 || RIG_IS_KX2) - { - kenwood_val = val.f * 12; - } // range is 0-12 if there is no KPA3 installed - else - { - kenwood_val = val.f * 100; - } - + kenwood_val = val.f * 100; snprintf(levelbuf, sizeof(levelbuf), "PC%03d", kenwood_val); break; @@ -2247,14 +2239,8 @@ int kenwood_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) case RIG_LEVEL_MICGAIN: - /* XXX check level range */ - if (RIG_IS_KX2 || RIG_IS_KX3 || RIG_IS_K2 || RIG_IS_K3 || RIG_IS_K3S) { // range is 0-255 - kenwood_val = val.f * 100 * (60.0/255.0); - } - else { // range is 0-100 - kenwood_val = val.f * 100; - } - + if (val.f > 1.0 || val.f < 0) { return -RIG_EINVAL; } + kenwood_val = val.f * 100; snprintf(levelbuf, sizeof(levelbuf), "MG%03d", kenwood_val); break; @@ -2262,21 +2248,8 @@ int kenwood_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) /* XXX check level range */ // KX2 and KX3 have range -190 to 250 - if (val.f > 1.0) { return -RIG_EINVAL; } - - if (RIG_IS_KX2 || RIG_IS_KX3) - { - kenwood_val = val.f * (250.0 - 190.0) + 190; - } - else if (RIG_IS_K3 || RIG_IS_K3S) - { - kenwood_val = val.f * (250.0 / 100.0); - } - else // other kenwood rigs - { - kenwood_val = val.f * 255.0; - } - + if (val.f > 1.0 || val.f < 0) { return -RIG_EINVAL; } + kenwood_val = val.f * 255.0; snprintf(levelbuf, sizeof(levelbuf), "RG%03d", kenwood_val); break; @@ -2587,23 +2560,11 @@ int kenwood_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) break; case RIG_LEVEL_RFPOWER: -#if 0 // TBD - if (RIG_IS_K3) { // see if KPA3 is enabled - ret = get_kenwood_level(rig, "MP055", NULL, &val->i); - if (val->i == - } -#endif /* * an answer "PC100" means 100 Watt */ ret = get_kenwood_level(rig, "PC", NULL, &val->i); - if (RIG_IS_K3 || RIG_IS_KX3 || RIG_IS_KX2) - { // range is 0-12 if there is no KPA3 installed - val->f = val->i / 12.0; - } - else { - val->f = val->f / 100.0; - } + val->f = val->f / 100.0; return ret; case RIG_LEVEL_AF: @@ -2700,12 +2661,7 @@ int kenwood_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) rig_debug(RIG_DEBUG_ERR, "%s: Error getting MICGAIN\n", __func__); return ret; } - if (RIG_IS_KX2 || RIG_IS_KX3 || RIG_IS_K2 || RIG_IS_K3 || RIG_IS_K3S) { - val->f = val->i * (255.0/60.0); - } - else { - val->f = val->i / 255.0; - } + val->f = val->i / 255.0; return RIG_OK; case RIG_LEVEL_AGC: commit 8020450559bfc4c713b11e3db78f95e76dd75788 Author: Michael Black W9MDB <mdb...@ya...> Date: Wed Sep 30 21:17:11 2020 -0700 Fix KX3 MICGAIN set/get https://github.com/Hamlib/Hamlib/issues/388 diff --git a/rigs/kenwood/k3.c b/rigs/kenwood/k3.c index 34ffe597..28bc75e1 100644 --- a/rigs/kenwood/k3.c +++ b/rigs/kenwood/k3.c @@ -1979,6 +1979,10 @@ int kx3_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) // manual says 0-255 as of Rev G5 but experiment says 0-60 snprintf(cmdbuf, sizeof(cmdbuf), "AG%03d", (int)(val.f * 60.0f)); return kenwood_transaction(rig, cmdbuf, NULL, 0); + case RIG_LEVEL_MICGAIN: + // manual says 0-255 as of Rev G5 but experiment says 0-99 + snprintf(cmdbuf, sizeof(cmdbuf), "MG%03d", (int)(val.f * 99.0f)); + return kenwood_transaction(rig, cmdbuf, NULL, 0); } return k3_set_level(rig, vfo, level, val); @@ -2005,6 +2009,12 @@ int kx3_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) val->f = (val->i - 190.0) / (250.0-190.0); return retval; + case RIG_LEVEL_MICGAIN: + retval = get_kenwood_level(rig, "MG", NULL, &val->i); + if (retval != RIG_OK) { return retval; } + val->f = val->i / 99.0; + return retval; + case RIG_LEVEL_RFPOWER_METER: { int tx_status = 0; commit bbde85064a4858265cf2de5c00a8b523f6e189d5 Author: Michael Black W9MDB <mdb...@ya...> Date: Wed Sep 30 20:49:37 2020 -0700 Fix KX3 LEVEL_AF https://github.com/Hamlib/Hamlib/issues/388 diff --git a/rigs/kenwood/k3.c b/rigs/kenwood/k3.c index c38a2bd7..34ffe597 100644 --- a/rigs/kenwood/k3.c +++ b/rigs/kenwood/k3.c @@ -1693,7 +1693,7 @@ int k3_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) */ int k3_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) { - char lvlbuf[50]; + char levelbuf[16]; int retval; int lvl; struct kenwood_priv_data *priv = rig->state.priv; @@ -1725,14 +1725,14 @@ int k3_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) { cal_table_t str_cal = K3_SM_CAL; - retval = kenwood_safe_transaction(rig, "SM", lvlbuf, sizeof(lvlbuf), 6); + retval = kenwood_safe_transaction(rig, "SM", levelbuf, sizeof(levelbuf), 6); if (retval != RIG_OK) { return retval; } - sscanf(lvlbuf + 2, "%d", &val->i); /* rawstr */ + sscanf(levelbuf + 2, "%d", &val->i); /* rawstr */ val->i = (int) rig_raw2val(val->i, &str_cal); } @@ -1740,14 +1740,14 @@ int k3_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) { cal_table_t str_cal = K3_SMH_CAL; - retval = kenwood_safe_transaction(rig, "SMH", lvlbuf, sizeof(lvlbuf), 6); + retval = kenwood_safe_transaction(rig, "SMH", levelbuf, sizeof(levelbuf), 6); if (retval != RIG_OK) { return retval; } - sscanf(lvlbuf + 3, "%d", &val->i); /* rawstr */ + sscanf(levelbuf + 3, "%d", &val->i); /* rawstr */ val->i = (int) rig_raw2val(val->i, &str_cal); } @@ -1809,14 +1809,14 @@ int k3_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) } case RIG_LEVEL_AGC: - retval = kenwood_safe_transaction(rig, "GT", lvlbuf, sizeof(lvlbuf), 5); + retval = kenwood_safe_transaction(rig, "GT", levelbuf, sizeof(levelbuf), 5); if (retval != RIG_OK) { return retval; } - sscanf(lvlbuf + 2, "%d", &lvl); + sscanf(levelbuf + 2, "%d", &lvl); if (lvl == 0) { @@ -1838,14 +1838,14 @@ int k3_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) break; case RIG_LEVEL_ATT: - retval = kenwood_safe_transaction(rig, "RA", lvlbuf, sizeof(lvlbuf), 4); + retval = kenwood_safe_transaction(rig, "RA", levelbuf, sizeof(levelbuf), 4); if (retval != RIG_OK) { return retval; } - sscanf(lvlbuf + 2, "%d", &lvl); + sscanf(levelbuf + 2, "%d", &lvl); if (lvl == 0) { @@ -1879,62 +1879,62 @@ int k3_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) break; case RIG_LEVEL_MICGAIN: - retval = kenwood_safe_transaction(rig, "MG", lvlbuf, sizeof(lvlbuf), 5); + retval = kenwood_safe_transaction(rig, "MG", levelbuf, sizeof(levelbuf), 5); if (retval != RIG_OK) { return retval; } - sscanf(lvlbuf + 2, "%d", &lvl); + sscanf(levelbuf + 2, "%d", &lvl); val->f = (float) lvl / 60.0f; break; case RIG_LEVEL_COMP: - retval = kenwood_safe_transaction(rig, "CP", lvlbuf, sizeof(lvlbuf), 5); + retval = kenwood_safe_transaction(rig, "CP", levelbuf, sizeof(levelbuf), 5); if (retval != RIG_OK) { return retval; } - sscanf(lvlbuf + 2, "%d", &lvl); + sscanf(levelbuf + 2, "%d", &lvl); val->f = (float) lvl / 40.0f; break; case RIG_LEVEL_SQL: - retval = kenwood_safe_transaction(rig, "SQ", lvlbuf, sizeof(lvlbuf), 5); + retval = kenwood_safe_transaction(rig, "SQ", levelbuf, sizeof(levelbuf), 5); if (retval != RIG_OK) { return retval; } - sscanf(lvlbuf + 2, "%d", &lvl); + sscanf(levelbuf + 2, "%d", &lvl); val->f = (float) lvl / 29.0f; break; case RIG_LEVEL_RF: - retval = kenwood_safe_transaction(rig, "RG", lvlbuf, sizeof(lvlbuf), 5); + retval = kenwood_safe_transaction(rig, "RG", levelbuf, sizeof(levelbuf), 5); if (retval != RIG_OK) { return retval; } - sscanf(lvlbuf + 2, "%d", &lvl); + sscanf(levelbuf + 2, "%d", &lvl); val->f = (float) lvl / 250.0f; break; case RIG_LEVEL_AF: - retval = kenwood_safe_transaction(rig, "AG", lvlbuf, sizeof(lvlbuf), 5); + retval = kenwood_safe_transaction(rig, "AG", levelbuf, sizeof(levelbuf), 5); if (retval != RIG_OK) { return retval; } - sscanf(lvlbuf + 2, "%d", &lvl); + sscanf(levelbuf + 2, "%d", &lvl); val->f = (float) lvl / 250.0f; break; @@ -1942,14 +1942,14 @@ int k3_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) return k3_get_nb_level(rig, &val->f, NULL); case RIG_LEVEL_MONITOR_GAIN: - retval = kenwood_safe_transaction(rig, "ML", lvlbuf, sizeof(lvlbuf), 5); + retval = kenwood_safe_transaction(rig, "ML", levelbuf, sizeof(levelbuf), 5); if (retval != RIG_OK) { return retval; } - sscanf(lvlbuf + 2, "%d", &lvl); + sscanf(levelbuf + 2, "%d", &lvl); val->f = (float) lvl / 60.0f; break; @@ -1975,7 +1975,12 @@ int kx3_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) ival = val.f * (250.0 - 190.0) + 190.0; snprintf(cmdbuf,sizeof(cmdbuf)-1,"RG%03d", ival); return kenwood_transaction(rig, cmdbuf, NULL, 0); + case RIG_LEVEL_AF: + // manual says 0-255 as of Rev G5 but experiment says 0-60 + snprintf(cmdbuf, sizeof(cmdbuf), "AG%03d", (int)(val.f * 60.0f)); + return kenwood_transaction(rig, cmdbuf, NULL, 0); } + return k3_set_level(rig, vfo, level, val); } @@ -1987,13 +1992,19 @@ int kx3_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) switch (level) { + case RIG_LEVEL_AF: + retval = get_kenwood_level(rig, "AG", NULL, &val->i); + if (retval != RIG_OK) { return retval; } + // manual says 0-255 as of Rev G5 but experiment says 0-60 + val->f = val->i / 60.0; + return retval; + case RIG_LEVEL_RF: retval = get_kenwood_level(rig, "RG", NULL, &val->i); if (retval != RIG_OK) { return retval; } val->f = (val->i - 190.0) / (250.0-190.0); return retval; - case RIG_LEVEL_RFPOWER_METER: { int tx_status = 0; @@ -2021,14 +2032,11 @@ int kx3_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) } val->f = pwr; - break; + return retval; } - - default: - return k3_get_level(rig, vfo, level, val); } - return RIG_OK; + return k3_get_level(rig, vfo, level, val); } @@ -2147,7 +2155,7 @@ int set_rit_xit(RIG *rig, shortfreq_t rit) int k3_set_nb_level(RIG *rig, float dsp_nb, float if_nb) { - char lvlbuf[16]; + char levelbuf[16]; int dsp_nb_raw = 0; int if_nb_raw = 0; @@ -2168,14 +2176,14 @@ int k3_set_nb_level(RIG *rig, float dsp_nb, float if_nb) int current_dsp_nb_raw; int current_if_nb_raw; - int retval = kenwood_safe_transaction(rig, "NL", lvlbuf, sizeof(lvlbuf), 6); + int retval = kenwood_safe_transaction(rig, "NL", levelbuf, sizeof(levelbuf), 6); if (retval != RIG_OK) { return retval; } - sscanf(lvlbuf + 2, "%02d%02d", ¤t_dsp_nb_raw, ¤t_if_nb_raw); + sscanf(levelbuf + 2, "%02d%02d", ¤t_dsp_nb_raw, ¤t_if_nb_raw); if (dsp_nb < 0) { @@ -2188,28 +2196,28 @@ int k3_set_nb_level(RIG *rig, float dsp_nb, float if_nb) } } - snprintf(lvlbuf, sizeof(lvlbuf), "NL%02d%02d", dsp_nb_raw, if_nb_raw); + snprintf(levelbuf, sizeof(levelbuf), "NL%02d%02d", dsp_nb_raw, if_nb_raw); - return kenwood_transaction(rig, lvlbuf, NULL, 0); + return kenwood_transaction(rig, levelbuf, NULL, 0); } int k3_get_nb_level(RIG *rig, float *dsp_nb, float *if_nb) { - char lvlbuf[16]; + char levelbuf[16]; int retval; int dsp_nb_raw; int if_nb_raw; rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - retval = kenwood_safe_transaction(rig, "NL", lvlbuf, sizeof(lvlbuf), 6); + retval = kenwood_safe_transaction(rig, "NL", levelbuf, sizeof(levelbuf), 6); if (retval != RIG_OK) { return retval; } - sscanf(lvlbuf + 2, "%02d%02d", &dsp_nb_raw, &if_nb_raw); + sscanf(levelbuf + 2, "%02d%02d", &dsp_nb_raw, &if_nb_raw); if (dsp_nb != NULL) { @@ -2227,7 +2235,7 @@ int k3_get_nb_level(RIG *rig, float *dsp_nb, float *if_nb) int k3_get_bar_graph_level(RIG *rig, float *smeter, float *pwr, float *alc, int *mode_tx) { - char lvlbuf[16]; + char levelbuf[16]; int retval; int tm_raw; int bg_raw; @@ -2243,14 +2251,14 @@ int k3_get_bar_graph_level(RIG *rig, float *smeter, float *pwr, float *alc, return retval; } - retval = kenwood_safe_transaction(rig, "BG", lvlbuf, sizeof(lvlbuf), 5); + retval = kenwood_safe_transaction(rig, "BG", levelbuf, sizeof(levelbuf), 5); if (retval != RIG_OK) { return retval; } - sscanf(lvlbuf + 2, "%02d%c", &bg_raw, &mode); + sscanf(levelbuf + 2, "%02d%c", &bg_raw, &mode); if (mode == 'R') { @@ -2324,20 +2332,20 @@ int k3_get_bar_graph_level(RIG *rig, float *smeter, float *pwr, float *alc, int kx3_get_bar_graph_level(RIG *rig, float *level) { - char lvlbuf[16]; + char levelbuf[16]; int retval; int bg_raw; rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - retval = kenwood_safe_transaction(rig, "BG", lvlbuf, sizeof(lvlbuf), 4); + retval = kenwood_safe_transaction(rig, "BG", levelbuf, sizeof(levelbuf), 4); if (retval != RIG_OK) { return retval; } - sscanf(lvlbuf + 2, "%02d", &bg_raw); + sscanf(levelbuf + 2, "%02d", &bg_raw); if (bg_raw >= 0 && bg_raw <= 10) { commit b6ed9b53e6d20a938e9ab830d1408b73207e3e58 Author: root <root@rigpi4.local> Date: Wed Sep 30 16:07:10 2020 -0700 Fix K3X LEVEL_RF https://github.com/Hamlib/Hamlib/issues/388 diff --git a/rigs/kenwood/k3.c b/rigs/kenwood/k3.c index 0b00a1fa..c38a2bd7 100644 --- a/rigs/kenwood/k3.c +++ b/rigs/kenwood/k3.c @@ -152,6 +152,7 @@ int k3_get_split_mode(RIG *rig, vfo_t vfo, rmode_t *tx_mode, pbwidth_t *tx_width); int k3_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val); int k3_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val); +int kx3_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val); int kx3_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val); int k3_set_func(RIG *rig, vfo_t vfo, setting_t func, int status); int k3_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status); @@ -758,7 +759,7 @@ const struct rig_caps kx3_caps = .get_func = k3_get_func, .set_ext_parm = kenwood_set_ext_parm, .get_ext_parm = kenwood_get_ext_parm, - .set_level = k3_set_level, + .set_level = kx3_set_level, .get_level = kx3_get_level, .set_ext_level = k3_set_ext_level, .get_ext_level = k3_get_ext_level, @@ -907,7 +908,7 @@ const struct rig_caps kx2_caps = .get_func = k3_get_func, .set_ext_parm = kenwood_set_ext_parm, .get_ext_parm = kenwood_get_ext_parm, - .set_level = k3_set_level, + .set_level = kx3_set_level, .get_level = kx3_get_level, .set_ext_level = k3_set_ext_level, .get_ext_level = k3_get_ext_level, @@ -1913,8 +1914,8 @@ int k3_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) val->f = (float) lvl / 29.0f; break; - case RIG_LEVEL_AF: - retval = kenwood_safe_transaction(rig, "AG", lvlbuf, sizeof(lvlbuf), 5); + case RIG_LEVEL_RF: + retval = kenwood_safe_transaction(rig, "RG", lvlbuf, sizeof(lvlbuf), 5); if (retval != RIG_OK) { @@ -1923,10 +1924,10 @@ int k3_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) sscanf(lvlbuf + 2, "%d", &lvl); val->f = (float) lvl / 250.0f; - break; + break; - case RIG_LEVEL_RF: - retval = kenwood_safe_transaction(rig, "RG", lvlbuf, sizeof(lvlbuf), 5); + case RIG_LEVEL_AF: + retval = kenwood_safe_transaction(rig, "AG", lvlbuf, sizeof(lvlbuf), 5); if (retval != RIG_OK) { @@ -1959,17 +1960,47 @@ int k3_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) return RIG_OK; } +int kx3_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) +{ + int ival; + char cmdbuf[32]; + + rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); + + if (val.f > 1.0 || val.f < 0) { return -RIG_EINVAL; } + + switch (level) + { + case RIG_LEVEL_RF: + ival = val.f * (250.0 - 190.0) + 190.0; + snprintf(cmdbuf,sizeof(cmdbuf)-1,"RG%03d", ival); + return kenwood_transaction(rig, cmdbuf, NULL, 0); + } + return k3_set_level(rig, vfo, level, val); +} + int kx3_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) { + int retval; + + rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); + switch (level) { + case RIG_LEVEL_RF: + retval = get_kenwood_level(rig, "RG", NULL, &val->i); + if (retval != RIG_OK) { return retval; } + val->f = (val->i - 190.0) / (250.0-190.0); + return retval; + + case RIG_LEVEL_RFPOWER_METER: { int tx_status = 0; float pwr; // Return zero RF power when not in TX mode - int retval = get_kenwood_func(rig, "TQ", &tx_status); + retval = get_kenwood_func(rig, "TQ", &tx_status); if (retval != RIG_OK) { diff --git a/rigs/kenwood/kenwood.c b/rigs/kenwood/kenwood.c index 0ebc0b6b..beca782a 100644 --- a/rigs/kenwood/kenwood.c +++ b/rigs/kenwood/kenwood.c @@ -2687,27 +2687,7 @@ int kenwood_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) } case RIG_LEVEL_RF: - retval = get_kenwood_level(rig, "RG", NULL, &val->i); - - if (retval != RIG_OK) { return retval; } - - // KX2 and KX3 have range 190 to 250 - if (RIG_IS_KX2 || RIG_IS_KX3) - { - val->f = (val->i - 190.0) / (250.0 - 190.0); - } - // K3 is 0 to 250 - else if (RIG_IS_K3 || RIG_IS_K3S) - { - val->f = val->i / 250.0; - } - // all others default to 0-255 - else - { - val->f = val->i / 255.0; - } - - return retval; + return get_kenwood_level(rig, "RG", &val->f, NULL); case RIG_LEVEL_SQL: return get_kenwood_level(rig, "SQ", &val->f, NULL); commit 0e50906ca1bb122fdddf1a03374e79ca8fbdd43f Author: Michael Black W9MDB <mdb...@ya...> Date: Wed Sep 30 16:46:10 2020 -0500 Fix RF_POWER for K3/KX3/KX2 for non-KPA3 and non-KXPA100 mode diff --git a/rigs/kenwood/kenwood.c b/rigs/kenwood/kenwood.c index dd1fb03f..0ebc0b6b 100644 --- a/rigs/kenwood/kenwood.c +++ b/rigs/kenwood/kenwood.c @@ -2202,9 +2202,15 @@ int kenwood_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) /* * Best estimate: 1.0 corresponds to 100W - * Anything better must be done in rig-specific files. */ - if (RIG_LEVEL_IS_FLOAT(level)) { kenwood_val = val.f * 100; } + if (RIG_IS_K3 || RIG_IS_KX3 || RIG_IS_KX2) + { + kenwood_val = val.f * 12; + } // range is 0-12 if there is no KPA3 installed + else + { + kenwood_val = val.f * 100; + } snprintf(levelbuf, sizeof(levelbuf), "PC%03d", kenwood_val); break; @@ -2589,11 +2595,15 @@ int kenwood_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) #endif /* * an answer "PC100" means 100 Watt - * which is val=1.0 on most rigs, but - * get_kenwood_level maps 0...255 onto 0.0 ... 1.0 */ - ret = get_kenwood_level(rig, "PC", &val->f, NULL); - val->f = val->f * (255.0 / 100.0); + ret = get_kenwood_level(rig, "PC", NULL, &val->i); + if (RIG_IS_K3 || RIG_IS_KX3 || RIG_IS_KX2) + { // range is 0-12 if there is no KPA3 installed + val->f = val->i / 12.0; + } + else { + val->f = val->f / 100.0; + } return ret; case RIG_LEVEL_AF: commit 58c5f52de8db78c0fffab1cd375fe784f7df77cb Author: Michael Black W9MDB <mdb...@ya...> Date: Wed Sep 30 16:34:01 2020 -0500 Fix kenwood RIG_LEVEL_RF set https://github.com/Hamlib/Hamlib/issues/388 diff --git a/rigs/kenwood/kenwood.c b/rigs/kenwood/kenwood.c index 13560a4c..dd1fb03f 100644 --- a/rigs/kenwood/kenwood.c +++ b/rigs/kenwood/kenwood.c @@ -113,7 +113,7 @@ static const struct kenwood_id_string kenwood_id_string_list[] = { RIG_MODEL_TS950SDX, "012" }, { RIG_MODEL_TS50, "013" }, { RIG_MODEL_TS870S, "015" }, - { RIG_MODEL_TS570D, "017" }, /* Elecraft K2|K3 also returns 17 */ + { RIG_MODEL_TS570D, "017" }, /* Elecraft K2|K3|KX3 also returns 17 */ { RIG_MODEL_TS570S, "018" }, { RIG_MODEL_TS2000, "019" }, { RIG_MODEL_TS480, "020" }, @@ -2242,7 +2242,12 @@ int kenwood_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) case RIG_LEVEL_MICGAIN: /* XXX check level range */ - if (RIG_LEVEL_IS_FLOAT(level)) { kenwood_val = val.f * 100; } + if (RIG_IS_KX2 || RIG_IS_KX3 || RIG_IS_K2 || RIG_IS_K3 || RIG_IS_K3S) { // range is 0-255 + kenwood_val = val.f * 100 * (60.0/255.0); + } + else { // range is 0-100 + kenwood_val = val.f * 100; + } snprintf(levelbuf, sizeof(levelbuf), "MG%03d", kenwood_val); break; @@ -2255,15 +2260,15 @@ int kenwood_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) if (RIG_IS_KX2 || RIG_IS_KX3) { - val.f = val.f * (250.0 - 190.0) + 190; + kenwood_val = val.f * (250.0 - 190.0) + 190; } else if (RIG_IS_K3 || RIG_IS_K3S) { - val.f = val.f * (250.0 / 100.0); + kenwood_val = val.f * (250.0 / 100.0); } else // other kenwood rigs { - val.f = val.f * 255.0; + kenwood_val = val.f * 255.0; } snprintf(levelbuf, sizeof(levelbuf), "RG%03d", kenwood_val); @@ -2576,6 +2581,12 @@ int kenwood_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) break; case RIG_LEVEL_RFPOWER: +#if 0 // TBD + if (RIG_IS_K3) { // see if KPA3 is enabled + ret = get_kenwood_level(rig, "MP055", NULL, &val->i); + if (val->i == + } +#endif /* * an answer "PC100" means 100 Watt * which is val=1.0 on most rigs, but @@ -2692,15 +2703,19 @@ int kenwood_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) return get_kenwood_level(rig, "SQ", &val->f, NULL); case RIG_LEVEL_MICGAIN: - ret = get_kenwood_level(rig, "MG", &val->f, NULL); + ret = get_kenwood_level(rig, "MG", NULL, &val->i); if (ret != RIG_OK) { rig_debug(RIG_DEBUG_ERR, "%s: Error getting MICGAIN\n", __func__); return ret; } - - val->f = val->f * (255.0 / 100.0); + if (RIG_IS_KX2 || RIG_IS_KX3 || RIG_IS_K2 || RIG_IS_K3 || RIG_IS_K3S) { + val->f = val->i * (255.0/60.0); + } + else { + val->f = val->i / 255.0; + } return RIG_OK; case RIG_LEVEL_AGC: commit 92dcdcd952419dc27a68e413a785008bca4e8dca Author: Michael Black W9MDB <mdb...@ya...> Date: Wed Sep 30 15:52:20 2020 -0500 Fix floating point compuation on KX3/KX2 LEVEL_RF diff --git a/rigs/kenwood/kenwood.c b/rigs/kenwood/kenwood.c index 68057074..13560a4c 100644 --- a/rigs/kenwood/kenwood.c +++ b/rigs/kenwood/kenwood.c @@ -2673,7 +2673,7 @@ int kenwood_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) // KX2 and KX3 have range 190 to 250 if (RIG_IS_KX2 || RIG_IS_KX3) { - val->f = (val->i - 190) / (250 - 190); + val->f = (val->i - 190.0) / (250.0 - 190.0); } // K3 is 0 to 250 else if (RIG_IS_K3 || RIG_IS_K3S) commit 01364ba1baa2d97e7a4c0b79288720d7b4e3eb14 Author: Michael Black W9MDB <mdb...@ya...> Date: Wed Sep 30 15:08:37 2020 -0500 astyle flex6xxx.c diff --git a/rigs/kenwood/flex6xxx.c b/rigs/kenwood/flex6xxx.c index 3fca3604..328c2a93 100644 --- a/rigs/kenwood/flex6xxx.c +++ b/rigs/kenwood/flex6xxx.c @@ -651,19 +651,22 @@ int powersdr_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) switch (level) { case RIG_LEVEL_AF: - if (val.f > 1.0) return -RIG_EINVAL; + if (val.f > 1.0) { return -RIG_EINVAL; } + ival = val.f * 100; snprintf(cmd, sizeof(cmd) - 1, "ZZAG%03d", ival); break; case RIG_LEVEL_RF: - if (val.f > 1.0) return -RIG_EINVAL; + if (val.f > 1.0) { return -RIG_EINVAL; } + ival = val.f * (120 - -20) - 20; snprintf(cmd, sizeof(cmd) - 1, "ZZAR%+04d", ival); break; case RIG_LEVEL_MICGAIN: - if (val.f > 1.0) return -RIG_EINVAL; + if (val.f > 1.0) { return -RIG_EINVAL; } + ival = val.f * (10 - -40) - 40; snprintf(cmd, sizeof(cmd) - 1, "ZZMG%03d", ival); break; @@ -678,13 +681,15 @@ int powersdr_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) break; case RIG_LEVEL_VOXGAIN: - if (val.f > 1.0) return -RIG_EINVAL; + if (val.f > 1.0) { return -RIG_EINVAL; } + ival = val.f * 1000; snprintf(cmd, sizeof(cmd) - 1, "ZZVG%04d", ival); break; case RIG_LEVEL_SQL: - if (val.f > 1.0) return -RIG_EINVAL; + if (val.f > 1.0) { return -RIG_EINVAL; } + powersdr_get_mode(rig, vfo, &mode, &width); if (mode == RIG_MODE_FM) @@ -829,6 +834,7 @@ int powersdr_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) __func__, lvlbuf); return -RIG_EPROTO; } + val->f = (val->i + 20.0) / (120.0 - -20.0); break; commit b47028c59d49ac562a1371df0fe75a5c643384b3 Author: Michael Black W9MDB <mdb...@ya...> Date: Wed Sep 30 15:08:16 2020 -0500 Add get/set LEVEL_RF to PowerSDR diff --git a/rigs/kenwood/flex6xxx.c b/rigs/kenwood/flex6xxx.c index ad1572f4..3fca3604 100644 --- a/rigs/kenwood/flex6xxx.c +++ b/rigs/kenwood/flex6xxx.c @@ -651,11 +651,19 @@ int powersdr_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) switch (level) { case RIG_LEVEL_AF: + if (val.f > 1.0) return -RIG_EINVAL; ival = val.f * 100; snprintf(cmd, sizeof(cmd) - 1, "ZZAG%03d", ival); break; + case RIG_LEVEL_RF: + if (val.f > 1.0) return -RIG_EINVAL; + ival = val.f * (120 - -20) - 20; + snprintf(cmd, sizeof(cmd) - 1, "ZZAR%+04d", ival); + break; + case RIG_LEVEL_MICGAIN: + if (val.f > 1.0) return -RIG_EINVAL; ival = val.f * (10 - -40) - 40; snprintf(cmd, sizeof(cmd) - 1, "ZZMG%03d", ival); break; @@ -670,11 +678,13 @@ int powersdr_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) break; case RIG_LEVEL_VOXGAIN: + if (val.f > 1.0) return -RIG_EINVAL; ival = val.f * 1000; snprintf(cmd, sizeof(cmd) - 1, "ZZVG%04d", ival); break; case RIG_LEVEL_SQL: + if (val.f > 1.0) return -RIG_EINVAL; powersdr_get_mode(rig, vfo, &mode, &width); if (mode == RIG_MODE_FM) @@ -784,7 +794,6 @@ int powersdr_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) switch (level) { - int i; case RIG_LEVEL_AGC: n = sscanf(lvlbuf + len, "%d", &val->i); @@ -812,10 +821,7 @@ int powersdr_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) break; case RIG_LEVEL_RF: - n = sscanf(lvlbuf + len, "%d", &i); - val->i = i; - rig_debug(RIG_DEBUG_TRACE, "%s: lvlbuf+len=%s, len=%d, i=%d, val->i=%d\n", __func__, lvlbuf+len, len, i, val->i); - + n = sscanf(lvlbuf + len, "%d", &val->i); if (n != 1) { @@ -823,8 +829,7 @@ int powersdr_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) __func__, lvlbuf); return -RIG_EPROTO; } - val->f = (val->i + 20) / (120 - -20); - rig_... [truncated message content] |