[Hamlib-commits] Hamlib -- Ham radio control libraries branch Hamlib-4.0 updated. 506cd8118442173ee
Library to control radio transceivers and receivers
Brought to you by:
n0nb
From: Nate B. <n0...@us...> - 2020-10-03 16:30:40
|
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, Hamlib-4.0 has been updated via 506cd8118442173ee275c60651bf80c09974a76e (commit) via 98045329d4615ca910535585ac8d8b9e824029fd (commit) via 2b5cfb37c911de699820f8997d20b938801a5462 (commit) via e062000aa341b45c1104ad8bd3ea232b07071ccc (commit) via b2227c20005dd2615380479a336d1565c31ac178 (commit) via 755d719505971b12fbdce6ba6f821dc636dc3251 (commit) via e7b881712d0367439bcc630a6afec1286e1e83c2 (commit) via e63087ccd4d4f36955e377f78dedd0b669a209c2 (commit) via fd27a7a3af221e4d50771306a2c4fb6f0eed3321 (commit) via fe3d7a108f3fbff3008f74f1f15458bc2e8bd613 (commit) via dcf43f537ef096239448c3f5f8451c15a54e937f (commit) via f96440fb9200d6d070d9b306f77c2f0f5a56ace9 (commit) via 7c03ec7e236173c3a54255e270cd4ed9627bf7b7 (commit) via fdbdb9bbf7cd44791069909eb116bc97f27314c2 (commit) via 2454771cbb0efd2c4f76d9984ca7750cf4a45239 (commit) via 0d4e5aae6dff52b3059bad92c14e2920d09fdedb (commit) via 6b34508ffa1977b1f30da77c63c88caa5dd0f871 (commit) via 3a93eb0adc09945df9b71679020f4fa519302d8f (commit) via 29a09d0f46894cf9b85673c4bda6c396cf1d7512 (commit) via a963a9f486ec32f826b99834b72c00de630a3f0a (commit) via f17c578c0c423ba0772380250f472c1db7782f75 (commit) via dc494a9687f494be0839c05984226ea7ca4c5d16 (commit) via eb9b55cab0a13d6fdd3394b494687417726c4315 (commit) via dffdc904a06c1e813bd8a2a223d764048e988e1c (commit) via 2aaa5af80c6edfb79d9d23741b98f8855abba624 (commit) via af76fe554a2d68d4be21959057eb00288086a211 (commit) via 8965b62cd68a2513d583860952dd688394f3651a (commit) via 309e19b273f48473d43edb44fcf83db009183b4a (commit) via f43a266cdfdb9ca3bb7dbcedd24785da5a92832c (commit) via 7c008339e9c3a7c3c1dd2da53c128f56f1c6bc83 (commit) via e569113f448ab3a3a8c7e8afd0b77d06e1bb7129 (commit) via 65fcdb0f0836d18df9ea84d0c7769b3fea3910f7 (commit) from 89b290f946062e878b9f249f4205c73d7a6c6707 (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 506cd8118442173ee275c60651bf80c09974a76e Author: Michael Black W9MDB <mdb...@ya...> Date: Sat Oct 3 00:16:02 2020 -0500 Implemented dynamic detection of RFPOWER levels for Kenwoods Need to remove RFPOWER customizations from other Kenwood backends now Need to do this same thing for MICGAIN https://github.com/Hamlib/Hamlib/issues/389 (cherry picked from commit 5ae848c48f1810fa81deb8365cb89e552740c8b7) diff --git a/rigs/kenwood/kenwood.c b/rigs/kenwood/kenwood.c index 374b9cff..4dc3ca1c 100644 --- a/rigs/kenwood/kenwood.c +++ b/rigs/kenwood/kenwood.c @@ -2179,6 +2179,63 @@ int kenwood_get_mode_if(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width) return RIG_OK; } +/* kenwood_get_power_minmax + * Kenwood rigs have different power levels by mode and by rig + * This routine relies on the idea that setting the power + * to 0 and 255 will result in the minimum and maximum values being set + * If a rig doesn't behave this way then customize inside that rig's backend +*/ +static int kenwood_get_power_minmax(RIG *rig, int *power_now, int *power_min, + int *power_max, + int restore) +{ + int retval; + char levelbuf[19]; + // read power_now, set 0, read power_min, set 255, read_power_max; set 0 + // we set back to 0 for safety and if restore is true we restore power_min + // otherwise we expect calling routine to be setting new power level + // we batch these commands together for speed + char *cmd = "PC;PC000;PC;PC255;PC;PC000;"; + int n; + struct rig_state *rs = &rig->state; + + rig_debug(RIG_DEBUG_TRACE, "%s: called\n", __func__); + retval = write_block(&rs->rigport, cmd, strlen(cmd)); + + if (retval != RIG_OK) { return retval; } + + retval = read_string(&rs->rigport, levelbuf, sizeof(levelbuf), NULL, 0); + + rig_debug(RIG_DEBUG_TRACE, "%s: retval=%d\n", __func__, retval); + + if (retval != 18) + { + rig_debug(RIG_DEBUG_ERR, "%s: expected 19, got %d in '%s'\n", __func__, retval, + levelbuf); + return -RIG_EPROTO; + } + + n = sscanf(levelbuf, "PC%d;PC%d;PC%d", power_now, power_min, power_max); + + if (n != 3) + { + rig_debug(RIG_DEBUG_ERR, "%s: count not parse 3 values from '%s'\n", __func__, + levelbuf); + return -RIG_EPROTO; + } + + if (restore) + { + snprintf(levelbuf, sizeof(levelbuf), "PC%03d;", *power_now); + retval = kenwood_transaction(rig, levelbuf, NULL, 0); + return retval; + } + + rig_debug(RIG_DEBUG_TRACE, "%s: returning now=%d, min=%d, max=%d\n", __func__, + *power_now, *power_min, *power_max); + return RIG_OK; +} + int kenwood_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) { char levelbuf[16]; @@ -2198,12 +2255,16 @@ int kenwood_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) switch (level) { + int power_now, power_min, power_max; + int retval; + case RIG_LEVEL_RFPOWER: + // Power min/max can vary so we query to find them out every time + retval = kenwood_get_power_minmax(rig, &power_now, &power_min, &power_max, 0); - /* - * Best estimate: 1.0 corresponds to 100W - */ - kenwood_val = val.f * 100; + if (retval != RIG_OK) { return retval; } + + kenwood_val = val.f * (power_max - power_min) + power_min; snprintf(levelbuf, sizeof(levelbuf), "PC%03d", kenwood_val); break; @@ -2425,6 +2486,8 @@ int kenwood_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) switch (level) { + int power_now, power_min, power_max; + case RIG_LEVEL_RAWSTR: if (RIG_IS_TS590S || RIG_IS_TS590SG) { @@ -2562,12 +2625,13 @@ int kenwood_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) break; case RIG_LEVEL_RFPOWER: - /* - * an answer "PC100" means 100 Watt - */ - ret = get_kenwood_level(rig, "PC", NULL, &val->i); - val->f = val->i / 100.0; - return ret; + // Power min/max can vary so we query to find them out every time + retval = kenwood_get_power_minmax(rig, &power_now, &power_min, &power_max, 1); + + if (retval != RIG_OK) { return retval; } + + val->f = (power_now - power_min) / (float)(power_max - power_min); + return RIG_OK; case RIG_LEVEL_AF: diff --git a/rigs/kenwood/kenwood.h b/rigs/kenwood/kenwood.h index ce8ec5b2..ecc284ff 100644 --- a/rigs/kenwood/kenwood.h +++ b/rigs/kenwood/kenwood.h @@ -27,7 +27,7 @@ #include <string.h> #include "token.h" -#define BACKEND_VER "20200930" +#define BACKEND_VER "20201002" #define EOM_KEN ';' #define EOM_TH '\r' diff --git a/rigs/kenwood/ts480.c b/rigs/kenwood/ts480.c index be13fc6d..0f6a97ac 100644 --- a/rigs/kenwood/ts480.c +++ b/rigs/kenwood/ts480.c @@ -111,9 +111,7 @@ kenwood_ts480_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) switch (level) { case RIG_LEVEL_RFPOWER: - kenwood_val = val.f * 100; /* level for TS480SAT is from 0.. 100W in SSB */ - sprintf(levelbuf, "PC%03d", kenwood_val); - break; + return kenwood_set_level(rig, vfo, level, val); case RIG_LEVEL_AF: return kenwood_set_level(rig, vfo, level, val); @@ -246,29 +244,6 @@ kenwood_ts480_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) switch (level) { - case RIG_LEVEL_RFPOWER: - retval = kenwood_transaction(rig, "PC", ackbuf, sizeof(ackbuf)); - - if (RIG_OK != retval) - { - return retval; - } - - ack_len = strlen(ackbuf); - - if (5 != ack_len) - { - return -RIG_EPROTO; - } - - if (1 != sscanf(&ackbuf[2], "%d", &levelint)) - { - return -RIG_EPROTO; - } - - val->f = (float) levelint / 100.; - return RIG_OK; - case RIG_LEVEL_AF: if (rig->caps->rig_model == RIG_MODEL_TS890S) { @@ -424,6 +399,9 @@ kenwood_ts480_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) return RIG_OK; + case RIG_LEVEL_RFPOWER: + return kenwood_get_level(rig, vfo, level, val); + case RIG_LEVEL_MICGAIN: case RIG_LEVEL_PREAMP: case RIG_LEVEL_IF: commit 98045329d4615ca910535585ac8d8b9e824029fd Author: Michael Black W9MDB <mdb...@ya...> Date: Fri Oct 2 23:00:53 2020 -0500 Remove debug (cherry picked from commit 86949c4ef711d5e4baa86241d7e7579bdffef1e3) diff --git a/src/iofunc.c b/src/iofunc.c index 6fc16ae1..c3677a7f 100644 --- a/src/iofunc.c +++ b/src/iofunc.c @@ -753,7 +753,6 @@ int HAMLIB_API read_string(hamlib_port_t *p, */ rd_count = port_read(p, &rxbuffer[total_count], 1); - rig_debug(RIG_DEBUG_TRACE, "%s: YYY rd_count=%d, total_count=%d\n", __func__, rd_count, total_count); /* if we get 0 bytes or an error something is wrong */ if (rd_count <= 0) { commit 2b5cfb37c911de699820f8997d20b938801a5462 Author: Michael Black W9MDB <mdb...@ya...> Date: Fri Oct 2 15:46:06 2020 -0700 Fix kenwood RFPOWER...more to come to make it know the max power possible https://github.com/Hamlib/Hamlib/issues/389 (cherry picked from commit ba943ae4b9209dfb7f4ed2cdb3efff679c71b900) diff --git a/rigs/kenwood/kenwood.c b/rigs/kenwood/kenwood.c index 02dac60a..374b9cff 100644 --- a/rigs/kenwood/kenwood.c +++ b/rigs/kenwood/kenwood.c @@ -2566,7 +2566,7 @@ int kenwood_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) * an answer "PC100" means 100 Watt */ ret = get_kenwood_level(rig, "PC", NULL, &val->i); - val->f = val->f / 100.0; + val->f = val->i / 100.0; return ret; case RIG_LEVEL_AF: commit e062000aa341b45c1104ad8bd3ea232b07071ccc Author: Michael Black W9MDB <mdb...@ya...> Date: Fri Oct 2 17:23:48 2020 -0500 Fix W command speed by using bytes requested correctly read_string now recognizes binary strings to read 5X more bytes Fixed Reply: prompt double output and space after : https://github.com/Hamlib/Hamlib/issues/387 (cherry picked from commit 293a844c41945db98dc6d8fa3036fec598de56a0) diff --git a/src/iofunc.c b/src/iofunc.c index d7380bce..6fc16ae1 100644 --- a/src/iofunc.c +++ b/src/iofunc.c @@ -753,6 +753,7 @@ int HAMLIB_API read_string(hamlib_port_t *p, */ rd_count = port_read(p, &rxbuffer[total_count], 1); + rig_debug(RIG_DEBUG_TRACE, "%s: YYY rd_count=%d, total_count=%d\n", __func__, rd_count, total_count); /* if we get 0 bytes or an error something is wrong */ if (rd_count <= 0) { @@ -765,6 +766,8 @@ int HAMLIB_API read_string(hamlib_port_t *p, return -RIG_EIO; } + // check to see if our string startis with \...if so we need more chars + if (total_count == 0 && rxbuffer[total_count] == '\\') rxmax = (rxmax-1)*5; ++total_count; if (stopset && memchr(stopset, rxbuffer[total_count - 1], stopset_len)) diff --git a/tests/rigctl_parse.c b/tests/rigctl_parse.c index ce37d0a5..3d1e8da3 100644 --- a/tests/rigctl_parse.c +++ b/tests/rigctl_parse.c @@ -989,11 +989,13 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc, { rig_debug(RIG_DEBUG_TRACE, "%s: debug7\n", __func__); +#if 0 // was printing Reply: twice if (prompt) { rig_debug(RIG_DEBUG_TRACE, "%s: debug8\n", __func__); fprintf_flush(fout, "%s: ", cmd_entry->arg2); } +#endif if (scanfc(fin, "%s", arg2) < 1) { @@ -4285,11 +4287,11 @@ declare_proto_rig(get_powerstat) return status; } -static int hasbinary(char *s) +static int hasbinary(char *s, int len) { int i; - for (i = 0; s[i] != 0; ++i) + for (i = 0; i < len; ++i) { if (!isascii(s[i])) { return 1; } } @@ -4309,7 +4311,7 @@ declare_proto_rig(send_cmd) struct rig_state *rs; int backend_num, cmd_len; #define BUFSZ 128 - char bufcmd[BUFSZ]; + char bufcmd[BUFSZ*5]; // allow for 5 chars for binary unsigned char buf[BUFSZ]; char eom_buf[4] = { 0xa, 0xd, 0, 0 }; int binary = 0; @@ -4414,7 +4416,7 @@ declare_proto_rig(send_cmd) rig_flush(&rs->rigport); rig_debug(RIG_DEBUG_TRACE, "%s: rigport=%d, bufcmd=%s, cmd_len=%d\n", __func__, - rs->rigport.fd, hasbinary(bufcmd) ? "BINARY" : bufcmd, cmd_len); + rs->rigport.fd, hasbinary(bufcmd, cmd_len) ? "BINARY" : bufcmd, cmd_len); retval = write_block(&rs->rigport, (char *)bufcmd, cmd_len); if (retval != RIG_OK) @@ -4426,7 +4428,7 @@ declare_proto_rig(send_cmd) { rig_debug(RIG_DEBUG_TRACE, "%s: debug Cmd\n", __func__); fwrite(cmd->arg2, 1, strlen(cmd->arg2), fout); /* i.e. "Frequency" */ - fwrite(":", 1, 1, fout); /* i.e. "Frequency" */ + fwrite(": ", 1, 2, fout); /* i.e. "Frequency" */ } do @@ -4436,9 +4438,6 @@ declare_proto_rig(send_cmd) if (rxbytes > 0) { ++rxbytes; // need length + 1 for end of string - - if (cmd->cmd == 'W') { rxbytes *= 5; } - eom_buf[0] = 0; } @@ -4463,10 +4462,10 @@ declare_proto_rig(send_cmd) buf[BUFSZ - 1] = '\0'; } - if (rig->caps->rig_model != RIG_MODEL_NETRIGCTL) + //if (rig->caps->rig_model != RIG_MODEL_NETRIGCTL) { // see if we have binary being returned - binary = hasbinary((char *)buf); + binary = hasbinary((char *)buf, retval); } if (binary) // convert our buf to a hex representation commit b2227c20005dd2615380479a336d1565c31ac178 Author: Michael Black W9MDB <mdb...@ya...> Date: Thu Oct 1 22:51:31 2020 -0500 astyle files (cherry picked from commit 0576a01ec2b73cafec6f1ea5506d014fa82d75ff) 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 755d719505971b12fbdce6ba6f821dc636dc3251 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 (cherry picked from commit 3f94e66c9fe8ec3db7fe6494e58592334e913c27) 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 e7b881712d0367439bcc630a6afec1286e1e83c2 Author: Michael Black W9MDB <mdb...@ya...> Date: Thu Oct 1 09:46:01 2020 -0700 Change KX3 MICGAIN level to 0-80 (cherry picked from commit 614627d8ba5e4c37aed6964c6a2d4bddd2f121b3) 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 e63087ccd4d4f36955e377f78dedd0b669a209c2 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 (cherry picked from commit 5fdf98ec57982f6dc29e960dc4a6218d63e03a68) 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 fd27a7a3af221e4d50771306a2c4fb6f0eed3321 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 (cherry picked from commit 8020450559bfc4c713b11e3db78f95e76dd75788) 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 fe3d7a108f3fbff3008f74f1f15458bc2e8bd613 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 (cherry picked from commit bbde85064a4858265cf2de5c00a8b523f6e189d5) 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 dcf43f537ef096239448c3f5f8451c15a54e937f 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 (cherry picked from commit b6ed9b53e6d20a938e9ab830d1408b73207e3e58) 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_... [truncated message content] |