From 00dce998aebfd9f4b9addd3830eb4b9026e1d1ce Mon Sep 17 00:00:00 2001 From: Mike Black W9MDB Date: Mon, 9 Jan 2023 23:26:15 -0600 Subject: [PATCH] Fix Elecraft power2mW precision/accuracy Should fix any others too https://github.com/Hamlib/Hamlib/issues/1205 --- NEWS | 1 + rigs/kenwood/k3.c | 12 +++++++----- simulators/simelecraft.c | 2 +- src/rig.c | 6 +++++- 4 files changed, 14 insertions(+), 7 deletions(-) diff --git a/NEWS b/NEWS index a8dd99d07..9c1c83539 100644 --- a/NEWS +++ b/NEWS @@ -26,6 +26,7 @@ Version 4.6 Version 4.5.5 * Really fix CM108 ptt_bitnum usage + * Fix Elecraft power2mW precision/accuracy Version 4.5.4 * 2023-XX-XX diff --git a/rigs/kenwood/k3.c b/rigs/kenwood/k3.c index a9b0a1f6d..336b30bc5 100644 --- a/rigs/kenwood/k3.c +++ b/rigs/kenwood/k3.c @@ -343,7 +343,7 @@ const struct rig_caps k3s_caps = RIG_MODEL(RIG_MODEL_K3S), .model_name = "K3S", .mfg_name = "Elecraft", - .version = BACKEND_VER ".19", + .version = BACKEND_VER ".20", .copyright = "LGPL", .status = RIG_STATUS_STABLE, .rig_type = RIG_TYPE_TRANSCEIVER, @@ -495,7 +495,7 @@ const struct rig_caps k4_caps = RIG_MODEL(RIG_MODEL_K4), .model_name = "K4", .mfg_name = "Elecraft", - .version = BACKEND_VER ".25", + .version = BACKEND_VER ".26", .copyright = "LGPL", .status = RIG_STATUS_STABLE, .rig_type = RIG_TYPE_TRANSCEIVER, @@ -646,7 +646,7 @@ const struct rig_caps kx3_caps = RIG_MODEL(RIG_MODEL_KX3), .model_name = "KX3", .mfg_name = "Elecraft", - .version = BACKEND_VER ".18", + .version = BACKEND_VER ".19", .copyright = "LGPL", .status = RIG_STATUS_STABLE, .rig_type = RIG_TYPE_TRANSCEIVER, @@ -797,7 +797,7 @@ const struct rig_caps kx2_caps = RIG_MODEL(RIG_MODEL_KX2), .model_name = "KX2", .mfg_name = "Elecraft", - .version = BACKEND_VER ".17", + .version = BACKEND_VER ".18", .copyright = "LGPL", .status = RIG_STATUS_STABLE, .rig_type = RIG_TYPE_TRANSCEIVER, @@ -1839,7 +1839,9 @@ int k3_power2mW(RIG *rig, freq_t freq, rmode_t mode) { - *mwpower = power * k3_get_maxpower(rig) * 1000; + char buf[32]; + snprintf(buf, sizeof(buf), "%.0f", power * k3_get_maxpower(rig) * 1000); + *mwpower = atoi(buf); return RIG_OK; } diff --git a/simulators/simelecraft.c b/simulators/simelecraft.c index ea82a0a3a..8dc58b6e2 100644 --- a/simulators/simelecraft.c +++ b/simulators/simelecraft.c @@ -281,7 +281,7 @@ int main(int argc, char *argv[]) } else if (strncmp(buf, "PC;", 3) == 0) { - SNPRINTF(buf, sizeof(buf), "PC0150;"); + SNPRINTF(buf, sizeof(buf), "PC0980;"); n = write(fd, buf, strlen(buf)); } else if (strlen(buf) > 0) diff --git a/src/rig.c b/src/rig.c index 01e36480c..8c14aa3ee 100644 --- a/src/rig.c +++ b/src/rig.c @@ -5845,6 +5845,7 @@ int HAMLIB_API rig_power2mW(RIG *rig, rmode_t mode) { const freq_range_t *txrange; + char buf[32]; ENTERFUNC; @@ -5880,7 +5881,10 @@ int HAMLIB_API rig_power2mW(RIG *rig, RETURNFUNC(-RIG_EINVAL); } - *mwpower = (unsigned int)(power * txrange->high_power); + + snprintf(buf, sizeof(buf), "%.0f", power * txrange->high_power); + *mwpower = atoi(buf); + //*mwpower = (unsigned int)(power * txrange->high_power); RETURNFUNC(RIG_OK); }