[Hamlib-commits] Hamlib -- Ham radio control libraries branch master updated. 5c00d46cc3a2ec75e4773
Library to control radio transceivers and receivers
Brought to you by:
n0nb
From: Michael B. <mdb...@us...> - 2021-08-30 13:47:12
|
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 5c00d46cc3a2ec75e4773343c27f58b748a23958 (commit) via f65022b4caf1db9b8218710918fdcba4f35cef05 (commit) via 118dcbb35f4ba0b3fb97eae84001eb519b645d43 (commit) via 53b67d24ec2730516dff5b5670d2afafdcb39243 (commit) via dc47740c400c120852c09c4e43e8c66712d01a9b (commit) from a0672e4f7e600f4ad9b887c11880baa6e9ab4052 (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 5c00d46cc3a2ec75e4773343c27f58b748a23958 Merge: f65022b4 118dcbb3 Author: Mike Black W9MDB <mdb...@ya...> Date: Mon Aug 30 08:46:55 2021 -0500 Merge branch 'master' of https://github.com/Hamlib/Hamlib commit f65022b4caf1db9b8218710918fdcba4f35cef05 Author: Mike Black W9MDB <mdb...@ya...> Date: Mon Aug 30 08:45:56 2021 -0500 If set_split_freq_mode is called when split=off we'll turn on split based on current vfo selection https://github.com/Hamlib/Hamlib/issues/764 diff --git a/src/rig.c b/src/rig.c index dce1adc0..dba18783 100644 --- a/src/rig.c +++ b/src/rig.c @@ -4369,6 +4369,19 @@ int HAMLIB_API rig_set_split_freq_mode(RIG *rig, caps = rig->caps; + // if split is off we'll turn it on + if (rig->state.cache.split == 0) + { + if (rig->state.current_vfo & (RIG_VFO_A | RIG_VFO_MAIN)) + { + rig_set_split_vfo(rig, RIG_VFO_A, 1, RIG_VFO_B); + } + else + { + rig_set_split_vfo(rig, RIG_VFO_B, 1, RIG_VFO_A); + } + } + vfo = vfo_fixup(rig, RIG_VFO_TX, rig->state.cache.split); // get the TX VFO rig_debug(RIG_DEBUG_VERBOSE, "%s: vfo=%s, tx_freq=%.0f, tx_mode=%s, tx_width=%d\n", __func__, commit 118dcbb35f4ba0b3fb97eae84001eb519b645d43 Merge: a0672e4f dc47740c Author: Michael Black <mdb...@ya...> Date: Mon Aug 30 08:25:26 2021 -0500 Merge pull request #779 from cjritola/fcdppAug2021 Map FCDPP LNA and Mixer Gain as PREAMP values. Closes #766 commit 53b67d24ec2730516dff5b5670d2afafdcb39243 Author: Mike Black W9MDB <mdb...@ya...> Date: Sun Aug 29 23:32:29 2021 -0500 Fix Startup information in rigctl and rigctld diff --git a/tests/rigctl.c b/tests/rigctl.c index 6e027faf..58a2b6b0 100644 --- a/tests/rigctl.c +++ b/tests/rigctl.c @@ -154,6 +154,7 @@ int main(int argc, char *argv[]) int ext_resp = 0; char resp_sep = '\n'; int i; + char rigstartup[1024]; while (1) { @@ -440,11 +441,11 @@ int main(int argc, char *argv[]) rig_set_debug(verbose); - rig_debug(RIG_DEBUG_VERBOSE, "%s(%d) Startup:", __FILE__, __LINE__); + snprintf(rigstartup, sizeof(rigstartup), "%s(%d) Startup:", __FILE__, __LINE__); - for (i = 0; i < argc; ++i) { rig_debug(RIG_DEBUG_VERBOSE, " %s", argv[i]); } + for (i = 0; i < argc; ++i) { strcat(rigstartup, " "); strcat(rigstartup, argv[i]); } - rig_debug(RIG_DEBUG_VERBOSE, "%s", "\n"); + rig_debug(RIG_DEBUG_VERBOSE, "%s\n", rigstartup); rig_debug(RIG_DEBUG_VERBOSE, "rigctl %s\n", hamlib_version2); diff --git a/tests/rigctld.c b/tests/rigctld.c index 508ae8cd..854227e0 100644 --- a/tests/rigctld.c +++ b/tests/rigctld.c @@ -257,6 +257,7 @@ int main(int argc, char *argv[]) int uplink = 0; char host[NI_MAXHOST]; char serv[NI_MAXSERV]; + char rigstartup[1024]; #if HAVE_SIGACTION struct sigaction act; #endif @@ -577,12 +578,11 @@ int main(int argc, char *argv[]) rig_set_debug(verbose); - rig_debug(RIG_DEBUG_VERBOSE, "%s(%d) Startup:", __FILE__, __LINE__); + snprintf(rigstartup, sizeof(rigstartup), "%s(%d) Startup:", __FILE__, __LINE__); - for (i = 0; i < argc; ++i) { rig_debug(RIG_DEBUG_VERBOSE, " %s", argv[i]); } - - rig_debug(RIG_DEBUG_VERBOSE, "%s", "\n"); + for (i = 0; i < argc; ++i) { strcat(rigstartup, " "); strcat(rigstartup, argv[i]); } + rig_debug(RIG_DEBUG_VERBOSE, "%s\n", rigstartup); rig_debug(RIG_DEBUG_VERBOSE, "rigctld %s\n", hamlib_version2); rig_debug(RIG_DEBUG_VERBOSE, "%s", commit dc47740c400c120852c09c4e43e8c66712d01a9b Author: Chuck Ritola <cjr...@gm...> Date: Mon Aug 30 00:18:42 2021 -0400 Map FCDPP LNA and Mixer Gain as PREAMP values. Closes #766 diff --git a/rigs/kit/funcube.c b/rigs/kit/funcube.c index 1402471f..b79b5f72 100644 --- a/rigs/kit/funcube.c +++ b/rigs/kit/funcube.c @@ -36,10 +36,11 @@ #include <math.h> #include "hamlib/rig.h" #include "token.h" +#include "misc.h" #include "kit.h" -#define BACKEND_VER "20200112" +#define BACKEND_VER "20210830" /* * Compile this model only if libusb is available @@ -56,6 +57,8 @@ #include "funcube.h" +static int funcube_hid_cmd(RIG *rig, unsigned char *au8BufOut, unsigned char *au8BufIn, int inputSize); + static int funcube_init(RIG *rig); static int funcubeplus_init(RIG *rig); static int funcube_cleanup(RIG *rig); @@ -180,23 +183,17 @@ const struct rig_caps funcubeplus_caps = .has_get_func = RIG_FUNC_NONE, .has_set_func = RIG_FUNC_NONE, - .has_get_level = RIG_LEVEL_ATT | RIG_LEVEL_PREAMP | RIG_LEVEL_RF, // RIG_LEVEL_ATT: Mixer gain on/off - // RIG_LEVEL_PREAMP: LNA gain on/off + .has_get_level = RIG_LEVEL_PREAMP | RIG_LEVEL_RF, + // RIG_LEVEL_PREAMP: 10dB=LNAon MixGainOff. 20dB=LNAoff, MixGainOn. 30dB=LNAOn, MixGainOn // RIG_LEVEL_RF 0..1 : IF gain 0 .. 59 dB - - - .has_set_level = RIG_LEVEL_ATT | RIG_LEVEL_PREAMP | RIG_LEVEL_RF, // RIG_LEVEL_ATT: Mixer gain on/off - // RIG_LEVEL_PREAMP: LNA gain on/off - // RIG_LEVEL_RF 0..1 : IF gain 0 .. 59 dB - // so values have to be mapped + .has_set_level = RIG_LEVEL_PREAMP | RIG_LEVEL_RF, .has_get_parm = RIG_PARM_NONE, .has_set_parm = RIG_PARM_NONE, .level_gran = {}, .parm_gran = {}, .ctcss_list = NULL, .dcs_list = NULL, - //.preamp = { 5, 10, 15, 20, 25, 30, RIG_DBLST_END, }, - //.attenuator = { 0, 1, 2, RIG_DBLST_END, }, + .preamp = { 10, 20, 30, RIG_DBLST_END, }, .max_rit = Hz(0), .max_xit = Hz(0), .max_ifshift = Hz(0), @@ -638,6 +635,7 @@ int funcube_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) return RIG_OK; } + int funcube_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) { libusb_device_handle *udh = rig->state.rigport.handle; @@ -761,44 +759,12 @@ int funcube_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) return RIG_OK; } -int funcubepro_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) + +int funcube_hid_cmd(RIG *rig, unsigned char *au8BufOut, unsigned char *au8BufIn, int inputSize) { libusb_device_handle *udh = rig->state.rigport.handle; int ret; int actual_length; - unsigned char au8BufOut[64] = { 0 }; // endpoint size - unsigned char au8BufIn[64] = { 0 }; // endpoint size - - switch (level) - { - case RIG_LEVEL_PREAMP: - au8BufOut[0] = REQUEST_SET_LNA_GAIN; // Command to set LNA gain - au8BufOut[1] = val.i & 0x1; - break; - - case RIG_LEVEL_ATT: - au8BufOut[0] = REQUEST_SET_MIXER_GAIN; // Command to Mixer gain - au8BufOut[1] = val.i & 0x1; - break; - - case RIG_LEVEL_RF: - au8BufOut[0] = REQUEST_SET_IF_GAIN; // Command to set IF gain - au8BufOut[1] = (int)(val.f * 100) ; - - if (au8BufOut[1] > 59) - { - au8BufOut[1] = 59; - } - - break; - - - default: - rig_debug(RIG_DEBUG_ERR, "%s: unsupported level %s\n", __func__, - rig_strlevel(level)); - return -RIG_EINVAL; - } - rig_debug(RIG_DEBUG_TRACE, "%s: HID packet set to %02x%02x%02x%02x\n", __func__, au8BufOut[0] & 0xFF, au8BufOut[1] & 0xFF, au8BufOut[2] & 0xFF, au8BufOut[3] & 0xFF); @@ -813,10 +779,10 @@ int funcubepro_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) libusb_error_name(ret)); } - ret = libusb_interrupt_transfer(udh, INPUT_ENDPOINT, au8BufIn, sizeof(au8BufIn), + ret = libusb_interrupt_transfer(udh, INPUT_ENDPOINT, au8BufIn, inputSize, &actual_length, rig->state.rigport.timeout); - if (ret < 0 || actual_length != sizeof(au8BufIn)) + if (ret < 0 || actual_length != inputSize) { rig_debug(RIG_DEBUG_ERR, "%s: libusb_interrupt_transfer failed (%d): %s\n", __func__, ret, @@ -828,85 +794,140 @@ int funcubepro_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) if (au8BufIn[1] != FUNCUBE_SUCCESS) { - rig_debug(RIG_DEBUG_ERR, "%s: REQUEST_GET_FREQ_HZ not supported\n", - __func__); + rig_debug(RIG_DEBUG_ERR, "%s: failed to perform FUNCube HID command %d.\n", + __func__, au8BufOut[0]); return -RIG_EIO; } return RIG_OK; } -int funcubepro_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) + +int funcubepro_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) { - libusb_device_handle *udh = rig->state.rigport.handle; + ENTERFUNC; int ret; - int actual_length; unsigned char au8BufOut[64] = { 0 }; // endpoint size unsigned char au8BufIn[64] = { 0 }; // endpoint size switch (level) { - case RIG_LEVEL_ATT: - au8BufOut[0] = REQUEST_GET_MIXER_GAIN; // Command to Mixer gain enabled - break; - case RIG_LEVEL_PREAMP: - au8BufOut[0] = REQUEST_GET_LNA_GAIN; // Command to get LNA gain enabled - break; + rig_debug(RIG_DEBUG_TRACE, "%s: Setting PREAMP state to %d.\n", + __func__, val.i); + au8BufOut[0] = REQUEST_SET_LNA_GAIN; // Command to set LNA gain + + if( val.i == 10 || val.i == 30 ) + { + au8BufOut[1] = 1; + } + else + { + au8BufOut[1] = 0; + } + + ret = funcube_hid_cmd(rig, au8BufOut, au8BufIn, sizeof(au8BufIn)); + + if( ret < 0 ) + { + return ret; + } + + au8BufOut[0] = REQUEST_SET_MIXER_GAIN; // Set mixer gain + + if( val.i == 20 || val.i == 30 ) + { + au8BufOut[1] = 1; + } + else + { + au8BufOut[1] = 0; + } + + return funcube_hid_cmd(rig, au8BufOut, au8BufIn, sizeof(au8BufIn)); case RIG_LEVEL_RF: - au8BufOut[0] = REQUEST_GET_IF_GAIN; - break; + au8BufOut[0] = REQUEST_SET_IF_GAIN; // Command to set IF gain + au8BufOut[1] = (int)(val.f * 100) ; + + if (au8BufOut[1] > 59) + { + au8BufOut[1] = 59; + } + + return funcube_hid_cmd(rig, au8BufOut, au8BufIn, sizeof(au8BufIn)); default: rig_debug(RIG_DEBUG_ERR, "%s: unsupported level %s\n", __func__, rig_strlevel(level)); return -RIG_EINVAL; } +} - rig_debug(RIG_DEBUG_TRACE, "%s: HID packet set to %02x%02x%02x%02x\n", - __func__, au8BufOut[0] & 0xFF, au8BufOut[1] & 0xFF, au8BufOut[2] & 0xFF, - au8BufOut[3] & 0xFF); - - ret = libusb_interrupt_transfer(udh, OUTPUT_ENDPOINT, au8BufOut, - sizeof(au8BufOut), &actual_length, rig->state.rigport.timeout); +int funcubepro_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) +{ + ENTERFUNC; + int ret; + int gain_state; + unsigned char au8BufOut[64] = { 0 }; // endpoint size + unsigned char au8BufIn[64] = { 0 }; // endpoint size - if (ret < 0) + switch (level) { - rig_debug(RIG_DEBUG_ERR, "%s: libusb_interrupt_transfer failed (%d): %s\n", - __func__, ret, - libusb_error_name(ret)); - } - ret = libusb_interrupt_transfer(udh, INPUT_ENDPOINT, au8BufIn, sizeof(au8BufIn), - &actual_length, rig->state.rigport.timeout); + case RIG_LEVEL_PREAMP: + au8BufOut[0] = REQUEST_GET_MIXER_GAIN; // Command to get mixer gain enabled + ret = funcube_hid_cmd(rig, au8BufOut, au8BufIn, sizeof(au8BufIn)); - if (ret < 0 || actual_length != sizeof(au8BufIn)) - { - rig_debug(RIG_DEBUG_ERR, "%s: libusb_interrupt_transfer failed (%d): %s\n", - __func__, ret, - libusb_error_name(ret)); - } + if( ret < 0 ) + { + return ret; + } - rig_debug(RIG_DEBUG_TRACE, "%s: Answer buf=%02x%02x%02x\n", - __func__, au8BufIn[0] & 0xFF, au8BufIn[1] & 0xFF, au8BufIn[2] & 0xFF); + rig_debug(RIG_DEBUG_TRACE, "%s: Mixer gain state returned %d.\n", + __func__, au8BufIn[2] & 0xFF); - if (au8BufIn[1] != FUNCUBE_SUCCESS) - { - rig_debug(RIG_DEBUG_ERR, "%s: REQUEST_LEVEL_x failed\n", - __func__); - return -RIG_EIO; - } + gain_state = au8BufIn[2] & 0x1; - switch (level) - { - case RIG_LEVEL_PREAMP: - case RIG_LEVEL_ATT: - val->i = au8BufIn[2] & 0x01; - break; + au8BufOut[0] = REQUEST_GET_LNA_GAIN; // Command to get LNA gain enabled + + ret = funcube_hid_cmd(rig, au8BufOut, au8BufIn, sizeof(au8BufIn)); + + if( ret < 0 ) + { + return ret; + } + + rig_debug(RIG_DEBUG_TRACE, "%s: LNA gain state returned %d.\n", + __func__, au8BufIn[2] & 0xFF); + + //Mixer gain is 20dB 0x2 + gain_state *= 2; + + //Add the LNA gain if present (10dB) 0x1 + gain_state += ( au8BufIn[2] & 0x1 ); + + //Scale it to tens 1->10dB 2->20dB 3->30dB + gain_state *= 10; + + rig_debug(RIG_DEBUG_TRACE, "%s: Calculated gain state is %d.\n", + __func__, gain_state); + + if( gain_state > 30 || gain_state < 0 || gain_state % 10 != 0) + { + rig_debug(RIG_DEBUG_ERR, "%s: unrecognized composite gain: %d\n", __func__, + gain_state); + return -RIG_EINVAL; + } + + val->i = gain_state; + + return RIG_OK; case RIG_LEVEL_RF: + au8BufOut[0] = REQUEST_GET_IF_GAIN; + ret = funcube_hid_cmd(rig, au8BufOut, au8BufIn, sizeof(au8BufIn)); val->f = ((float)au8BufIn[2]) / 100.; - break; + return ret; default: rig_debug(RIG_DEBUG_ERR, "%s: unsupported level %s\n", __func__, ----------------------------------------------------------------------- Summary of changes: rigs/kit/funcube.c | 209 +++++++++++++++++++++++++++++------------------------ src/rig.c | 13 ++++ tests/rigctl.c | 7 +- tests/rigctld.c | 8 +- 4 files changed, 136 insertions(+), 101 deletions(-) hooks/post-receive -- Hamlib -- Ham radio control libraries |