[Hamlib-commits] Hamlib -- Ham radio control libraries branch master updated. d1d4964a193217da42f57
Library to control radio transceivers and receivers
Brought to you by:
n0nb
From: n0nb <n0...@us...> - 2024-12-03 13:24:07
|
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 d1d4964a193217da42f57ef7bdeb59796ea7acc2 (commit) via cf61b9a178b2ce48eeeaba01b677a31d8ef92e0a (commit) via abe40e6e8b6322b7811a4466d2a9c4f29440a249 (commit) via 558234897807c793baa2874e351007a6c827ab37 (commit) via 806b08729356d1515b7c2994b032fb79e187f772 (commit) via bdbe66dfa06114974331e42f1072fef78bfa2f1e (commit) via 8bd74aa3bcdfec900955c15ef1cc754bfb93d6df (commit) via 65832ecf53b3788ae3adc1eefe697b7e0112ac7c (commit) via 890ed18c43132c3b0d1b96eff6a2b5d6a96d57ba (commit) via 711a35135326af3f949bd69b227bd3e31d67c6ae (commit) via 5219ef2b26fa657e9370fefbdfa6396ecda7faa3 (commit) via 7b679afa1d851a3d0962f5f3d18ad4ad4088d2b1 (commit) via e480bc74796ad6206ae882251db0575127663aad (commit) via 71698e44325c26c92efd09b027e54cf22f0f18a8 (commit) via 4a34d4c27f5ae9305e689fccbc3ca496223b5309 (commit) via 5abc606e13903e821c0ac88a2768f6549c5b8704 (commit) via ab2b5fb9e9d9f8bcf48bac5190b8fa17ce33c04c (commit) via dc7bbeca34cd91bd021bcd60dfa936fbd1f242de (commit) via d86f0db383cd51c3640aab17de91168351744ec3 (commit) via 3f90a9323eb3b477fbc92308dee131221a7cac90 (commit) via 610581ca95686a9eb8e407c399816b421e720aa9 (commit) via 8ee3c9fa64fdebf70aa18b5b1ccbc313a5442a53 (commit) via a94e2948f550f2e040a24d5c965a62be4628f2ea (commit) via fbdb6656209306df75aaa2f541122f325f90a818 (commit) via dcc7b3743215e6a47a70863125c02d6e9d19c750 (commit) via 2447cb204ecaa5119d3d09e93e6b183791885446 (commit) via aae8109d4e63ce812f302fa9db6534ae069361ca (commit) via 6adfce0305ebfd26a88fc08c99cd4007053d0986 (commit) via 6036a65d2e075393664f27d639fa4c6a312c6e1f (commit) via 82c8a0795e5eaab6bdd27a56bbb684a77ca915db (commit) via 4811ebe3bc72f98a4ed688be03040f442dab5c89 (commit) via 5b277e460047270c8ec85274d112d939fefedcdc (commit) from 4b77f9b6b67afc4bf26e4aeaa4774cb842d48d8b (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 d1d4964a193217da42f57ef7bdeb59796ea7acc2 Merge: abe40e6e8 cf61b9a17 Author: Michael Black <mdb...@ya...> Date: Tue Dec 3 07:05:22 2024 -0600 Merge pull request #1636 from GeoBaltz/fix24 Change Kenwood _send_morse() for TS-890/990 commit cf61b9a178b2ce48eeeaba01b677a31d8ef92e0a Merge: 806b08729 abe40e6e8 Author: Michael Black <mdb...@ya...> Date: Tue Dec 3 06:57:15 2024 -0600 Merge branch 'master' into fix24 diff --cc rigs/kenwood/kenwood.c index 3222a69a7,ae6a8e109..38a87600a --- a/rigs/kenwood/kenwood.c +++ b/rigs/kenwood/kenwood.c @@@ -5553,31 -5551,19 +5553,29 @@@ int kenwood_send_morse(RIG *rig, vfo_t SNPRINTF(morsebuf, sizeof(morsebuf), "KY %s", m2); break; - case RIG_MODEL_TS590S: + case RIG_MODEL_TS890S: + SNPRINTF(morsebuf, sizeof morsebuf, "KY2%s", m2); + break; + + case RIG_MODEL_TS990S: + // Variable message length only on newer firmware + priv = STATE(rig)->priv; + if (priv->fw_rev_uint >= 110) + { + SNPRINTF(morsebuf, sizeof morsebuf, "KY2%s", m2); + break; + } + /* FALL THROUGH */ + ++ case RIG_MODEL_TS590S: + /* the command must consist of 28 bytes right aligned */ - SNPRINTF(morsebuf, sizeof(morsebuf), "KY %24s", m2); - break; ++ SNPRINTF(morsebuf, sizeof(morsebuf), "KY %24s", m2); ++ break; + default: /* the command must consist of 28 bytes 0x20 padded */ SNPRINTF(morsebuf, sizeof(morsebuf), "KY %-24s", m2); - #if 0 // Why is this here?? 0x20 == ' ' - int i; -- for (i = strlen(morsebuf) - 1; i > 0 && morsebuf[i] == ' '; --i) -- { -- morsebuf[i] = 0x20; -- } - #endif } retval = kenwood_transaction(rig, morsebuf, NULL, 0); commit abe40e6e8b6322b7811a4466d2a9c4f29440a249 Merge: 65832ecf5 558234897 Author: Michael Black <mdb...@ya...> Date: Tue Dec 3 06:45:02 2024 -0600 Merge pull request #1637 from dl1jbe/ts590_fix_kenwood_send_morse Drop addional unwanted space after message commit 558234897807c793baa2874e351007a6c827ab37 Author: Thomas Beierlein <to...@ge...> Date: Tue Dec 3 12:34:32 2024 +0100 Drop addional unwanted space after message Kenwood_send_morse adds an unwanted space after each transmission on TS-590S model (see issue 1634). Tests showed that all space before any message gets ignored and all trailing spaces (if any) were compressed to exactly one space. The patch changes the alignment to the right. diff --git a/rigs/kenwood/kenwood.c b/rigs/kenwood/kenwood.c index e0bad2505..ae6a8e109 100644 --- a/rigs/kenwood/kenwood.c +++ b/rigs/kenwood/kenwood.c @@ -5551,6 +5551,11 @@ int kenwood_send_morse(RIG *rig, vfo_t vfo, const char *msg) SNPRINTF(morsebuf, sizeof(morsebuf), "KY %s", m2); break; + case RIG_MODEL_TS590S: + /* the command must consist of 28 bytes right aligned */ + SNPRINTF(morsebuf, sizeof(morsebuf), "KY %24s", m2); + break; + default: /* the command must consist of 28 bytes 0x20 padded */ SNPRINTF(morsebuf, sizeof(morsebuf), "KY %-24s", m2); commit 806b08729356d1515b7c2994b032fb79e187f772 Author: George Baltz N3GB <Geo...@gm...> Date: Tue Dec 3 05:06:10 2024 -0500 Fix porting unneeded code diff --git a/rigs/kenwood/kenwood.c b/rigs/kenwood/kenwood.c index da75b19f8..3222a69a7 100644 --- a/rigs/kenwood/kenwood.c +++ b/rigs/kenwood/kenwood.c @@ -5572,7 +5572,8 @@ int kenwood_send_morse(RIG *rig, vfo_t vfo, const char *msg) SNPRINTF(morsebuf, sizeof(morsebuf), "KY %-24s", m2); #if 0 // Why is this here?? 0x20 == ' ' - for (int i = strlen(morsebuf) - 1; i > 0 && morsebuf[i] == ' '; --i) + int i; + for (i = strlen(morsebuf) - 1; i > 0 && morsebuf[i] == ' '; --i) { morsebuf[i] = 0x20; } commit bdbe66dfa06114974331e42f1072fef78bfa2f1e Author: George Baltz N3GB <Geo...@gm...> Date: Sat Nov 30 04:17:01 2024 -0500 Use short (i.e., variable length) messages in kenwood_send_morse() Enabled for TS-890S & TS-990S(if firmware capable) Kludge the kludges in kenwood_transaction() for KY->KY2 change. diff --git a/rigs/kenwood/kenwood.c b/rigs/kenwood/kenwood.c index e0bad2505..da75b19f8 100644 --- a/rigs/kenwood/kenwood.c +++ b/rigs/kenwood/kenwood.c @@ -375,6 +375,7 @@ transaction_write: skip |= strncmp(cmdstr, "RD", 2) == 0; skip |= strncmp(cmdstr, "KYW", 3) == 0; skip |= strncmp(cmdstr, "KY ", 3) == 0; + skip |= strncmp(cmdstr, "KY2", 3) == 0; skip |= strncmp(cmdstr, "PS1", 3) == 0; skip |= strncmp(cmdstr, "PS0", 3) == 0; skip |= strncmp(cmdstr, "K22", 3) == 0; @@ -382,7 +383,7 @@ transaction_write: if (skip) { // most command we give them a little time -- but not KY - if (strncmp(cmdstr, "KY ", 3) != 0) + if (strncmp(cmdstr, "KY ", 3) != 0 && strncmp(cmdstr, "KY2", 3) != 0) { hl_usleep(200 * 1000); // give little settle time for these commands } @@ -958,7 +959,7 @@ int kenwood_open(RIG *rig) priv->has_rit2 = 1; } - if (RIG_IS_TS590S) + if (RIG_IS_TS590S || RIG_IS_TS990S) { /* we need the firmware version for these rigs to deal with f/w defects */ static char fw_version[7]; @@ -992,7 +993,7 @@ int kenwood_open(RIG *rig) } } - rig_debug(RIG_DEBUG_TRACE, "%s: found f/w version %.1f\n", __func__, + rig_debug(RIG_DEBUG_TRACE, "%s: found f/w version %.2f\n", __func__, priv->fw_rev_uint / 100.0); } @@ -5486,8 +5487,9 @@ int kenwood_reset(RIG *rig, reset_t reset) int kenwood_send_morse(RIG *rig, vfo_t vfo, const char *msg) { char morsebuf[40], m2[30]; - int msg_len, retval, i; + int msg_len, retval; const char *p; + struct kenwood_priv_data *priv; ENTERFUNC; @@ -5551,14 +5553,30 @@ int kenwood_send_morse(RIG *rig, vfo_t vfo, const char *msg) SNPRINTF(morsebuf, sizeof(morsebuf), "KY %s", m2); break; + case RIG_MODEL_TS890S: + SNPRINTF(morsebuf, sizeof morsebuf, "KY2%s", m2); + break; + + case RIG_MODEL_TS990S: + // Variable message length only on newer firmware + priv = STATE(rig)->priv; + if (priv->fw_rev_uint >= 110) + { + SNPRINTF(morsebuf, sizeof morsebuf, "KY2%s", m2); + break; + } + /* FALL THROUGH */ + default: /* the command must consist of 28 bytes 0x20 padded */ SNPRINTF(morsebuf, sizeof(morsebuf), "KY %-24s", m2); - for (i = strlen(morsebuf) - 1; i > 0 && morsebuf[i] == ' '; --i) +#if 0 // Why is this here?? 0x20 == ' ' + for (int i = strlen(morsebuf) - 1; i > 0 && morsebuf[i] == ' '; --i) { morsebuf[i] = 0x20; } +#endif } retval = kenwood_transaction(rig, morsebuf, NULL, 0); commit 8bd74aa3bcdfec900955c15ef1cc754bfb93d6df Author: George Baltz N3GB <Geo...@gm...> Date: Fri Nov 29 15:10:46 2024 -0500 Minimal support for KY commands in simts890.c diff --git a/simulators/simts890.c b/simulators/simts890.c index 6ebc0f264..b1d4158ae 100644 --- a/simulators/simts890.c +++ b/simulators/simts890.c @@ -927,6 +927,24 @@ int main(int argc, char *argv[]) { sscanf(buf, "KS%03d", &keyspd); } + else if (strncmp(buf, "KY", 2) == 0) + { // CW Keying + if (buf[2] == ';') + { + // Checking status - we always have room + OUTPUT("KY0;"); + } + else if (buf[3] == ';') + { + // Stop sending(?) + if (buf[2] != '0') {cmd_err = 1; } + } + else + { + // Send the message + //printf("CW mesg: %s\n", buf + 2); + } + } else if (strncmp(buf, "OM", 2) == 0) { // Operating Mode commit 65832ecf53b3788ae3adc1eefe697b7e0112ac7c Author: Michael Black W9MDB <mdb...@ya...> Date: Mon Dec 2 07:24:00 2024 -0600 Fix compile warnings diff --git a/src/rig.c b/src/rig.c index cd315ab1f..dc9a7a5de 100644 --- a/src/rig.c +++ b/src/rig.c @@ -997,7 +997,7 @@ int HAMLIB_API rig_open(RIG *rig) else { rig_debug(RIG_DEBUG_VERBOSE, "%s: cwd=%s\n", __func__, cwd); - char *path = calloc(1, 4096); + char *path = calloc(1, 8192); extern char settings_file[4096]; const char *xdgpath = getenv("XDG_CONFIG_HOME"); commit 890ed18c43132c3b0d1b96eff6a2b5d6a96d57ba Author: Michael Black W9MDB <mdb...@ya...> Date: Mon Dec 2 07:20:42 2024 -0600 Change morse_data_handler from LOCK to rig_lock as it needs to always use it diff --git a/src/rig.c b/src/rig.c index d886d6ecb..cd315ab1f 100644 --- a/src/rig.c +++ b/src/rig.c @@ -169,6 +169,10 @@ const char hamlib_copyright[231] = /* hamlib 1.2 ABI specifies 231 bytes */ #define CHECK_RIG_ARG(r) (!(r) || !(r)->caps || !STATE((r))->comm_state) #define CHECK_RIG_CAPS(r) (!(r) || !(r)->caps) +// The LOCK macro is for the primary thread calling the rig functions +// For a separate thread use rig_lock directly +// The purpose here is to avoid deadlock during recursion +// Any other thread should grab the mutex itself via rig_lock #define LOCK(n) if (STATE(rig)->depth == 1) { rig_debug(RIG_DEBUG_CACHE, "%s: %s\n", n?"lock":"unlock", __func__); rig_lock(rig,n); } MUTEX(morse_mutex); @@ -8760,9 +8764,9 @@ void *morse_data_handler(void *arg) if (strlen(c) > 0) { int nloops = 10; - MUTEX_LOCK(morse_mutex); + MUTEX_LOCK(morse_mutex); // wait until the write is idle - LOCK(1); + rig_lock(rig, 1); do { result = rig->caps->send_morse(rig, RIG_VFO_CURR, c); @@ -8786,7 +8790,7 @@ void *morse_data_handler(void *arg) } while (result != RIG_OK && STATE(rig)->fifo_morse->flush == 0 && --nloops > 0); - LOCK(0); + rig_lock(rig,0); MUTEX_UNLOCK(morse_mutex); commit 711a35135326af3f949bd69b227bd3e31d67c6ae Merge: 5219ef2b2 7b679afa1 Author: Michael Black W9MDB <mdb...@ya...> Date: Sun Dec 1 22:41:04 2024 -0600 Merge branch 'master' of github.com:Hamlib/Hamlib commit 5219ef2b26fa657e9370fefbdfa6396ecda7faa3 Author: Michael Black W9MDB <mdb...@ya...> Date: Sun Dec 1 16:44:22 2024 -0600 Put a heavier LOCK around send_morse when clearing the buffer diff --git a/src/rig.c b/src/rig.c index e47105e6c..c755fefd6 100644 --- a/src/rig.c +++ b/src/rig.c @@ -8762,6 +8762,7 @@ void *morse_data_handler(void *arg) int nloops = 10; MUTEX_LOCK(morse_mutex); + LOCK(1); do { result = rig->caps->send_morse(rig, RIG_VFO_CURR, c); @@ -8785,6 +8786,7 @@ void *morse_data_handler(void *arg) } while (result != RIG_OK && STATE(rig)->fifo_morse->flush == 0 && --nloops > 0); + LOCK(0); MUTEX_UNLOCK(morse_mutex); commit 7b679afa1d851a3d0962f5f3d18ad4ad4088d2b1 Merge: 71698e443 e480bc747 Author: Nate Bargmann <n0...@n0...> Date: Sun Dec 1 16:06:16 2024 -0600 Merge pull request #1635 from dforsi/fix/typos Fix typos commit e480bc74796ad6206ae882251db0575127663aad Author: Daniele Forsi IU5HKX <iu...@gm...> Date: Sun Dec 1 21:52:34 2024 +0100 Fix typos diff --git a/NEWS b/NEWS index d9b04777f..37ec46881 100644 --- a/NEWS +++ b/NEWS @@ -13,7 +13,7 @@ Version 5.x -- future * Change FT1000MP Mark V model names to align with FT1000MP Version 4.6 - * send_raw can now take hex digits as colon-seperated -- e.g. send_raw icom xfe:xfe:x94:xe0:03:xfd + * send_raw can now take hex digits as colon-separated -- e.g. send_raw icom xfe:xfe:x94:xe0:03:xfd * Add IC7760 * IC7300 Mode filter can now be set by # (i.e. 1,2,3) * Fixed AF6SA WRC rotor controller @@ -44,7 +44,7 @@ Version 4.6 * Added Thetis entry -- derived from FlexRadio/Apache PowerSDR * Added VOICE/CW memory capability to many rigs -- thanks to David Balharrie M0DGB/G8FKH * Add -# --skip_init option to rigctl to skip rig initialization -- useful for executing commands quickly - * rig_caps is no longer constant -- this may break some 3rd party relying on the "const" declaration. Here's an example of how to handle compatiblity. + * rig_caps is no longer constant -- this may break some 3rd party relying on the "const" declaration. Here's an example of how to handle compatibility. #ifdef RIGCAPS_NOT_CONST static int add_to_list(struct rig_caps* rc, void*) #else @@ -66,7 +66,7 @@ static int add_to_list(const struct rig_caps* rc, void*) * Added rig_cm108_get/set_bit to API and get/set_gpio to rigctl(d) for GPIO1,2,3,4 access on CM108 * Added BG2FX FX4/C/CR/L * Fixed IC7610 to use new 0x25 0x26 command added in latest firmware - * Fix W command in rigctld to work propery -- can take terminating char or # of bytes to expect + * Fix W command in rigctld to work properly -- can take terminating char or # of bytes to expect * Add rig_set_debug_filename so Python can redirect debug stream * Fix Yaesu LBL_NR to use proper values * Add IC-905 diff --git a/bindings/csharp/multicast/README.txt b/bindings/csharp/multicast/README.txt index fbb130f50..f87c199a1 100644 --- a/bindings/csharp/multicast/README.txt +++ b/bindings/csharp/multicast/README.txt @@ -22,7 +22,7 @@ You should then be able to run ./bin/Debug/net6.0/multicast ====================================================== -Waiting for Net 7.0/8.0 to be in Ubunut main packages +Waiting for Net 7.0/8.0 to be in Ubuntu main packages Following did not work sudo apt remove 'dotnet*' 'aspnet*' 'netstandard*' diff --git a/rigs/icom/ic821h.c b/rigs/icom/ic821h.c index 1d0938eba..8e9dacb06 100644 --- a/rigs/icom/ic821h.c +++ b/rigs/icom/ic821h.c @@ -181,8 +181,8 @@ struct rig_caps ic821h_caps = }, /* mode/filter list, remember: order matters! */ .filters = { - {RIG_MODE_CW | RIG_MODE_SSB, kHz(2.3)}, /* buildin */ - {RIG_MODE_FM, kHz(15)}, /* buildin */ + {RIG_MODE_CW | RIG_MODE_SSB, kHz(2.3)}, /* built-in */ + {RIG_MODE_FM, kHz(15)}, /* built-in */ RIG_FLT_END, }, diff --git a/rigs/kenwood/thf6a.c b/rigs/kenwood/thf6a.c index 7b1bdacf8..0f2b80a6e 100644 --- a/rigs/kenwood/thf6a.c +++ b/rigs/kenwood/thf6a.c @@ -5,7 +5,7 @@ * * 10-03-2010 * Ported from Stephane Fillod's thf7.c - * Changed TH-F7E perameters to reflect TH-F6A + * Changed TH-F7E parameters to reflect TH-F6A * Changed RIG_ITU_REGION from 1 to 2 * * diff --git a/rigs/kenwood/ts590.c b/rigs/kenwood/ts590.c index 73e5b3997..95a9779dd 100644 --- a/rigs/kenwood/ts590.c +++ b/rigs/kenwood/ts590.c @@ -400,7 +400,7 @@ static int ts590_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width) const int ssb_htable[] = { 1000, 1200, 1400, 1600, 1800, 2000, 2200, 2400, 2600, 2800, 3000, 3400, 4000, 5000 }; const int ssb_ltable[] = { 0, 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000 }; *width = ssb_htable[hwidth]; - // we dont' do anything with shift yet which will be just the hwidth value + // we don't do anything with shift yet which will be just the hwidth value shift = ssb_ltable[lwidth]; } else if (*mode == RIG_MODE_AM || *mode == RIG_MODE_PKTAM) diff --git a/rigs/yaesu/README.ft920 b/rigs/yaesu/README.ft920 index 76fd5acec..e58eddfac 100644 --- a/rigs/yaesu/README.ft920 +++ b/rigs/yaesu/README.ft920 @@ -97,7 +97,7 @@ rig_get_split_mode and set "proper" VFO? rig_set_rit - * Hamlib specificies that passing 0 as the RIT frequency disables + * Hamlib specifies that passing 0 as the RIT frequency disables RIT. Thus there is no way to meet the spec and mimic the front panel RIT off function whilst keeping the RIT offset on the display. The Hamlib spec causes behavior analogous to shutting @@ -112,7 +112,7 @@ rig_get_rit * vfo is honored and stored RIT is returned. rig_set_xit - * Hamlib specificies that passing 0 as the XIT frequency disables + * Hamlib specifies that passing 0 as the XIT frequency disables XIT. Thus there is no way to meet the spec and mimic the front panel XIT off function whilst keeping the XIT offset on the display. The Hamlib spec causes behavior analogous to shutting diff --git a/rotators/easycomm/easycomm.txt b/rotators/easycomm/easycomm.txt index c62795778..fe33fed92 100644 --- a/rotators/easycomm/easycomm.txt +++ b/rotators/easycomm/easycomm.txt @@ -34,7 +34,7 @@ may only decode the rotator control commands. The Host PC can issue the following commands -: -Command Meaning Perameters +Command Meaning Parameters ------- ------- ---------- AZ Azimuth number - 1 decimal place [deg] @@ -88,7 +88,7 @@ EASYCOMM III Standard The EasyComm 3 standard is an extension of the version 2 with the additional features: -Command Meaning Perameters Hamlib Config Token +Command Meaning Parameters Hamlib Config Token ------- ------- ---------- ------------------- VL Velocity Left number [mdeg/s] VR Velocity Right number [mdeg/s] diff --git a/simulators/simts890.c b/simulators/simts890.c index a3c513d21..6ebc0f264 100644 --- a/simulators/simts890.c +++ b/simulators/simts890.c @@ -328,7 +328,7 @@ int main(int argc, char *argv[]) if (strcmp(buf, "IF;") == 0) { - // Reads the tranceiver status + // Reads the transceiver status #if defined(LEGACY) char ifbuf[256]; hl_usleep(mysleep * 1000); @@ -1322,7 +1322,7 @@ int main(int argc, char *argv[]) case '3': // Bandscope Span case '4': // Bandscope Span case '5': // Bandscope Scope Range (Fixed Mode) - case '6': // Bandscope Dispaly Pause + case '6': // Bandscope Display Pause case '7': // Bandscope Marker case '8': // Bandscope Attenuator case '9': // Bandscope Max Hold @@ -1371,7 +1371,7 @@ int main(int argc, char *argv[]) case '0': // Registration of CW Message (Paddle Input) case '1': // Play/Stop the CW Message case '2': // Register State of CW Message (Paddle Input) - case '3': // Clear the CW Message (Paddle Inut) + case '3': // Clear the CW Message (Paddle Input) case '4': // CW Message Memory Name (Paddle Input) case '5': // Registering the CW Message Memory (Text Input) case '6': // CW Message Channel Repeat @@ -1454,7 +1454,7 @@ int main(int argc, char *argv[]) case '2': // Memory Channel (Channel Name) case '3': // Memory Channel (Scan Lockout) case '4': // Memory Channel (Channel Copy) - case '5': // Memory Channle (Channel Deletion) + case '5': // Memory Channel (Channel Deletion) case '6': // Programmable VFO End Frequency case '7': // Memory Channel (Temporary Change Frequency) break; diff --git a/src/microham.c b/src/microham.c index c47a0bb0f..f6482c782 100644 --- a/src/microham.c +++ b/src/microham.c @@ -721,7 +721,7 @@ static void writeControl(const unsigned char *data, int len) // // send a heartbeat and record time // The "last heartbeat" time is recorded in a global variable -// such that the service thread can decice whether a new +// such that the service thread can decide whether a new // heartbeat is due. // static void heartbeat() diff --git a/src/rig.c b/src/rig.c index e47105e6c..24be4ca1a 100644 --- a/src/rig.c +++ b/src/rig.c @@ -7547,7 +7547,7 @@ int HAMLIB_API rig_stop_morse(RIG *rig, vfo_t vfo) /* * wait_morse_ptt * generic routine to wait for ptt=0 - * should work on any full breakin CW morse send + * should work on any full break-in CW morse send * Assumes rig!=NULL, msg!=NULL */ static int wait_morse_ptt(RIG *rig, vfo_t vfo) diff --git a/src/sleep.c b/src/sleep.c index c3cc6c162..00a29e2d0 100644 --- a/src/sleep.c +++ b/src/sleep.c @@ -116,7 +116,7 @@ int hl_usleep(rig_useconds_t usec) int retval = 0; rig_debug(RIG_DEBUG_ERR, "%s: usec=%ld\n", __func__, usec); - if (usec <= 1000) { return 0; } // dont' sleep if only 1ms is requested -- speeds things up on Windows + if (usec <= 1000) { return 0; } // don't sleep if only 1ms is requested -- speeds things up on Windows while (usec > 1000000) { commit 71698e44325c26c92efd09b027e54cf22f0f18a8 Merge: 4a34d4c27 5abc606e1 Author: Michael Black W9MDB <mdb...@ya...> Date: Sun Dec 1 11:25:36 2024 -0600 Merge branch 'master' of github.com:Hamlib/Hamlib commit 4a34d4c27f5ae9305e689fccbc3ca496223b5309 Author: Michael Black W9MDB <mdb...@ya...> Date: Sun Dec 1 11:23:13 2024 -0600 Add new semi-colon separated hex values for send_raw icom https://github.com/Hamlib/Hamlib/issues/1632 diff --git a/NEWS b/NEWS index 2cef16957..d9b04777f 100644 --- a/NEWS +++ b/NEWS @@ -13,6 +13,7 @@ Version 5.x -- future * Change FT1000MP Mark V model names to align with FT1000MP Version 4.6 + * send_raw can now take hex digits as colon-seperated -- e.g. send_raw icom xfe:xfe:x94:xe0:03:xfd * Add IC7760 * IC7300 Mode filter can now be set by # (i.e. 1,2,3) * Fixed AF6SA WRC rotor controller diff --git a/doc/man1/rigctl.1 b/doc/man1/rigctl.1 index cb8ba8a89..9a1b6d44e 100644 --- a/doc/man1/rigctl.1 +++ b/doc/man1/rigctl.1 @@ -1398,13 +1398,26 @@ Returns current lock mode status 1=On, 2=Off (only useful when using rigctld) .TP .BR send_raw " \(aq" \fITerminator\fP "\(aq \(aq" \fIString\fP \(aq .EX -Can send ASCII string or 0xnn values -- there can be no spaces in the command string. +Can send ASCII string or 0xnn values or xnn values -- there can be no spaces in the command string. Possible terminator values are CR, LF, ;, ICOM, 0-100 (bytes to read), or -1 meaning unknown (will timeout on read) -Examples: - send_raw ; FA;MD; +Examples (note that a ; must be escaped in Unix/Linux): +For Windows & Unix/Linux we have a new colon-separated format for hex digits + send_raw icom 0xFE:0xFE:0x94:0x03:0xFD Note: colon-separated does not have to be escaped on Unix/Linux + send_raw -1 0xFE:0xFE:0x94:0x03:0xFD + send_raw 14 0xFE:0xFE:0x94:0x03:0xFD + Note that ASCII commands still require escaping the semicolon on Unix/Linux + send_raw \; FA\;MD\; + +For Windows: send_raw icom 0xFE;0xFE;0x94;0x03;0xFD send_raw -1 0xFE;0xFE;0x94;0x03;0xFD send_raw 14 0xFE;0xFE;0x94;0x03;0xFD + + For Unix/Linux + send_raw icom 0xFE\;0xFE\;0x94\;0x03\;0xFD + send_raw \; FA\;MD\; + send_raw -1 0xFE\;0xFE\;0x94\;0x03\;0xFD + send_raw 14 0xFE\;0xFE\;0x94\;0x03\;0xFD . .TP .BR client_version " \(aq" \fIString\fP "\(aq diff --git a/tests/rigctl_parse.c b/tests/rigctl_parse.c index 4b305a281..5c52ad408 100644 --- a/tests/rigctl_parse.c +++ b/tests/rigctl_parse.c @@ -5793,14 +5793,26 @@ static int parse_hex(const char *s, unsigned char *buf, int len) int i = 0; buf[0] = 0; char *s2 = strdup(s); - char *p = strtok(s2, ";"); + char *p = strtok(s2, ";:"); while (p) { unsigned int val; - sscanf(p, "0x%x", &val); + int n; + + if ((n = sscanf(p, "0x%2x", &val)) != 1) + { + n = sscanf(p, "x%2x", &val); + } + + if (n == 0) + { + rig_debug(RIG_DEBUG_ERR, "%s: unable to parse 0x??; or x??; from '%s'\n", + __func__, s); + } + buf[i++] = val; - p = strtok(NULL, ";"); + p = strtok(NULL, ";:"); } free(s2); @@ -5863,7 +5875,7 @@ declare_proto_rig(send_raw) return -RIG_EINVAL; } - if (strncmp(arg2, "0x", 2) == 0) + if (strncmp(arg2, "0x", 2) == 0 || arg2[0] == 'x') { arg2_len = parse_hex(arg2, send, sizeof(send)); sendp = send; commit 5abc606e13903e821c0ac88a2768f6549c5b8704 Author: Michael Black W9MDB <mdb...@ya...> Date: Sun Dec 1 11:23:13 2024 -0600 Add new semi-colon separated hex values for send_raw icom diff --git a/NEWS b/NEWS index 2cef16957..d9b04777f 100644 --- a/NEWS +++ b/NEWS @@ -13,6 +13,7 @@ Version 5.x -- future * Change FT1000MP Mark V model names to align with FT1000MP Version 4.6 + * send_raw can now take hex digits as colon-seperated -- e.g. send_raw icom xfe:xfe:x94:xe0:03:xfd * Add IC7760 * IC7300 Mode filter can now be set by # (i.e. 1,2,3) * Fixed AF6SA WRC rotor controller diff --git a/doc/man1/rigctl.1 b/doc/man1/rigctl.1 index cb8ba8a89..9a1b6d44e 100644 --- a/doc/man1/rigctl.1 +++ b/doc/man1/rigctl.1 @@ -1398,13 +1398,26 @@ Returns current lock mode status 1=On, 2=Off (only useful when using rigctld) .TP .BR send_raw " \(aq" \fITerminator\fP "\(aq \(aq" \fIString\fP \(aq .EX -Can send ASCII string or 0xnn values -- there can be no spaces in the command string. +Can send ASCII string or 0xnn values or xnn values -- there can be no spaces in the command string. Possible terminator values are CR, LF, ;, ICOM, 0-100 (bytes to read), or -1 meaning unknown (will timeout on read) -Examples: - send_raw ; FA;MD; +Examples (note that a ; must be escaped in Unix/Linux): +For Windows & Unix/Linux we have a new colon-separated format for hex digits + send_raw icom 0xFE:0xFE:0x94:0x03:0xFD Note: colon-separated does not have to be escaped on Unix/Linux + send_raw -1 0xFE:0xFE:0x94:0x03:0xFD + send_raw 14 0xFE:0xFE:0x94:0x03:0xFD + Note that ASCII commands still require escaping the semicolon on Unix/Linux + send_raw \; FA\;MD\; + +For Windows: send_raw icom 0xFE;0xFE;0x94;0x03;0xFD send_raw -1 0xFE;0xFE;0x94;0x03;0xFD send_raw 14 0xFE;0xFE;0x94;0x03;0xFD + + For Unix/Linux + send_raw icom 0xFE\;0xFE\;0x94\;0x03\;0xFD + send_raw \; FA\;MD\; + send_raw -1 0xFE\;0xFE\;0x94\;0x03\;0xFD + send_raw 14 0xFE\;0xFE\;0x94\;0x03\;0xFD . .TP .BR client_version " \(aq" \fIString\fP "\(aq diff --git a/tests/rigctl_parse.c b/tests/rigctl_parse.c index 4b305a281..5c52ad408 100644 --- a/tests/rigctl_parse.c +++ b/tests/rigctl_parse.c @@ -5793,14 +5793,26 @@ static int parse_hex(const char *s, unsigned char *buf, int len) int i = 0; buf[0] = 0; char *s2 = strdup(s); - char *p = strtok(s2, ";"); + char *p = strtok(s2, ";:"); while (p) { unsigned int val; - sscanf(p, "0x%x", &val); + int n; + + if ((n = sscanf(p, "0x%2x", &val)) != 1) + { + n = sscanf(p, "x%2x", &val); + } + + if (n == 0) + { + rig_debug(RIG_DEBUG_ERR, "%s: unable to parse 0x??; or x??; from '%s'\n", + __func__, s); + } + buf[i++] = val; - p = strtok(NULL, ";"); + p = strtok(NULL, ";:"); } free(s2); @@ -5863,7 +5875,7 @@ declare_proto_rig(send_raw) return -RIG_EINVAL; } - if (strncmp(arg2, "0x", 2) == 0) + if (strncmp(arg2, "0x", 2) == 0 || arg2[0] == 'x') { arg2_len = parse_hex(arg2, send, sizeof(send)); sendp = send; commit ab2b5fb9e9d9f8bcf48bac5190b8fa17ce33c04c Author: Michael Black W9MDB <mdb...@ya...> Date: Wed Nov 27 12:30:27 2024 -0600 Fix IC7760 civ address diff --git a/rigs/icom/icom.c b/rigs/icom/icom.c index 85edeb01d..363772cc2 100644 --- a/rigs/icom/icom.c +++ b/rigs/icom/icom.c @@ -678,7 +678,7 @@ static const struct icom_addr icom_addr_list[] = {RIG_MODEL_IC7300, 0x94}, {RIG_MODEL_IC7610, 0x98}, {RIG_MODEL_IC7700, 0x74}, - {RIG_MODEL_IC7760, 0xB1}, + {RIG_MODEL_IC7760, 0xB2}, {RIG_MODEL_PERSEUS, 0xE1}, {RIG_MODEL_X108G, 0x70}, {RIG_MODEL_X6100, 0x70}, commit dc7bbeca34cd91bd021bcd60dfa936fbd1f242de Author: Michael Black W9MDB <mdb...@ya...> Date: Wed Nov 27 12:28:59 2024 -0600 Fix civ address for IC7760 diff --git a/rigs/icom/ic7760.c b/rigs/icom/ic7760.c index 438ae191f..c20f46d74 100644 --- a/rigs/icom/ic7760.c +++ b/rigs/icom/ic7760.c @@ -118,7 +118,7 @@ int ic7760_ext_tokens[] = */ static const struct icom_priv_caps ic7760_priv_caps = { - 0xb1, /* default address */ + 0xb2, /* default address */ 0, /* 731 mode */ 0, /* no XCHG */ ic756pro_ts_sc_list, commit d86f0db383cd51c3640aab17de91168351744ec3 Author: Michael Black W9MDB <mdb...@ya...> Date: Wed Nov 27 12:10:48 2024 -0600 Fix 10GHz power watts for IC9700 diff --git a/rigs/icom/icom.c b/rigs/icom/icom.c index 082d846b4..85edeb01d 100644 --- a/rigs/icom/icom.c +++ b/rigs/icom/icom.c @@ -4550,11 +4550,6 @@ int icom_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) rig_raw2val_float(icom_val, &rig->caps->rfpower_meter_cal) * 0.01; } - if (RIG_IS_IC9700 && CACHE(rig)->freqMainA >= 1e9) - { - val->f /= 10; // power scale is different for 10GHz - } - break; case RIG_LEVEL_RFPOWER_METER_WATTS: @@ -4578,6 +4573,11 @@ int icom_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) val->f); } + if (RIG_IS_IC9700 && CACHE(rig)->freqMainA >= 1e9) + { + val->f /= 10; // power scale is different for 10GHz + } + rig_get_range(&range_list, STATE(rig)->current_freq, STATE(rig)->current_mode); rig_debug(RIG_DEBUG_VERBOSE, "%s: maxpower=%d\n", __func__, range_list.high_power); diff --git a/rigs/icom/icom.h b/rigs/icom/icom.h index b1f3812b7..faf004030 100644 --- a/rigs/icom/icom.h +++ b/rigs/icom/icom.h @@ -35,7 +35,7 @@ #include <sys/time.h> #endif -#define BACKEND_VER "20241121" +#define BACKEND_VER "20241127" #define ICOM_IS_ID31 rig_is_model(rig, RIG_MODEL_ID31) #define ICOM_IS_ID51 rig_is_model(rig, RIG_MODEL_ID51) commit 3f90a9323eb3b477fbc92308dee131221a7cac90 Author: Michael Black W9MDB <mdb...@ya...> Date: Wed Nov 27 12:07:03 2024 -0600 Update POWER_METER values for IC7700 and IC7760 diff --git a/rigs/icom/ic7700.c b/rigs/icom/ic7700.c index 700da9a4e..3d1a2f576 100644 --- a/rigs/icom/ic7700.c +++ b/rigs/icom/ic7700.c @@ -72,21 +72,12 @@ { 120, 1.0f } \ } } -#define IC7700_RFPOWER_METER_CAL { 13, \ +#define IC7700_RFPOWER_METER_CAL { 4, \ { \ { 0, 0.0f }, \ - { 21, 5.0f }, \ - { 43, 10.0f }, \ - { 65, 15.0f }, \ - { 83, 20.0f }, \ - { 95, 25.0f }, \ - { 105, 30.0f }, \ - { 114, 35.0f }, \ - { 124, 40.0f }, \ - { 143, 50.0f }, \ - { 183, 75.0f }, \ - { 213, 100.0f }, \ - { 255, 120.0f } \ + { 143, 100.0f }, \ + { 212, 200.0f }, \ + { 255, 250.0f }, \ } } @@ -277,7 +268,7 @@ struct rig_caps ic7700_caps = RIG_MODEL(RIG_MODEL_IC7700), .model_name = "IC-7700", .mfg_name = "Icom", - .version = BACKEND_VER ".5", + .version = BACKEND_VER ".6", .copyright = "LGPL", .status = RIG_STATUS_STABLE, .rig_type = RIG_TYPE_TRANSCEIVER, diff --git a/rigs/icom/ic7760.c b/rigs/icom/ic7760.c index dd03adf8b..438ae191f 100644 --- a/rigs/icom/ic7760.c +++ b/rigs/icom/ic7760.c @@ -49,7 +49,7 @@ #define IC7760_ANTS (RIG_ANT_1|RIG_ANT_2|RIG_ANT_3|RIG_ANT_4) -// IC-7760 S-meter calibration data based on manual +// IC-7760 calibration data based on manual #define IC7760_STR_CAL { 3, \ { \ { 0,-54 }, \ @@ -72,24 +72,14 @@ { 120, 1.0f } \ } } -#define IC7760_RFPOWER_METER_CAL { 13, \ +#define IC7760_RFPOWER_METER_CAL { 4, \ { \ { 0, 0.0f }, \ - { 21, 5.0f }, \ - { 43, 10.0f }, \ - { 65, 15.0f }, \ - { 83, 20.0f }, \ - { 95, 25.0f }, \ - { 105, 30.0f }, \ - { 114, 35.0f }, \ - { 124, 40.0f }, \ - { 143, 50.0f }, \ - { 183, 75.0f }, \ - { 213, 100.0f }, \ - { 255, 120.0f } \ + { 143, 100.0f }, \ + { 212, 200.0f }, \ + { 255, 250.0f }, \ } } - #define IC7760_COMP_METER_CAL { 3, \ { \ { 0, 0.0f }, \ commit 610581ca95686a9eb8e407c399816b421e720aa9 Author: Michael Black W9MDB <mdb...@ya...> Date: Wed Nov 27 10:47:34 2024 -0600 Some updates to IC7760 diff --git a/rigs/icom/ic7760.c b/rigs/icom/ic7760.c index f101e9726..dd03adf8b 100644 --- a/rigs/icom/ic7760.c +++ b/rigs/icom/ic7760.c @@ -343,10 +343,10 @@ struct rig_caps ic7760_caps = RIG_FRNG_END, }, .tx_range_list1 = { - FRQ_RNG_HF(1, IC7760_OTHER_TX_MODES, W(5), W(200), IC7760_VFOS, IC7760_ANTS), - FRQ_RNG_6m(1, IC7760_OTHER_TX_MODES, W(5), W(200), IC7760_VFOS, IC7760_ANTS), - FRQ_RNG_HF(1, IC7760_AM_TX_MODES, W(5), W(50), IC7760_VFOS, IC7760_ANTS), /* AM class */ - FRQ_RNG_6m(1, IC7760_AM_TX_MODES, W(5), W(50), IC7760_VFOS, IC7760_ANTS), /* AM class */ + FRQ_RNG_HF(1, IC7760_OTHER_TX_MODES, W(1), W(200), IC7760_VFOS, IC7760_ANTS), + FRQ_RNG_6m(1, IC7760_OTHER_TX_MODES, W(1), W(200), IC7760_VFOS, IC7760_ANTS), + FRQ_RNG_HF(1, IC7760_AM_TX_MODES, W(.25), W(50), IC7760_VFOS, IC7760_ANTS), /* AM class */ + FRQ_RNG_6m(1, IC7760_AM_TX_MODES, W(.25), W(50), IC7760_VFOS, IC7760_ANTS), /* AM class */ RIG_FRNG_END, }, @@ -354,16 +354,16 @@ struct rig_caps ic7760_caps = RIG_FRNG_END, }, .tx_range_list2 = { - FRQ_RNG_HF(2, IC7760_OTHER_TX_MODES, W(5), W(200), IC7760_VFOS, IC7760_ANTS), - FRQ_RNG_6m(2, IC7760_OTHER_TX_MODES, W(5), W(200), IC7760_VFOS, IC7760_ANTS), - FRQ_RNG_HF(2, IC7760_AM_TX_MODES, W(5), W(50), IC7760_VFOS, IC7760_ANTS), /* AM class */ - FRQ_RNG_6m(2, IC7760_AM_TX_MODES, W(5), W(50), IC7760_VFOS, IC7760_ANTS), /* AM class */ + FRQ_RNG_HF(2, IC7760_OTHER_TX_MODES, W(1), W(200), IC7760_VFOS, IC7760_ANTS), + FRQ_RNG_6m(2, IC7760_OTHER_TX_MODES, W(1), W(200), IC7760_VFOS, IC7760_ANTS), + FRQ_RNG_HF(2, IC7760_AM_TX_MODES, W(.25), W(50), IC7760_VFOS, IC7760_ANTS), /* AM class */ + FRQ_RNG_6m(2, IC7760_AM_TX_MODES, W(.251), W(50), IC7760_VFOS, IC7760_ANTS), /* AM class */ /* USA only, TBC: end of range and modes */ - {MHz(5.33050), MHz(5.33350), IC7760_OTHER_TX_MODES, W(5), W(200), IC7760_VFOS, IC7760_ANTS}, /* USA only */ - {MHz(5.34650), MHz(5.34950), IC7760_OTHER_TX_MODES, W(5), W(200), IC7760_VFOS, IC7760_ANTS}, /* USA only */ - {MHz(5.36650), MHz(5.36950), IC7760_OTHER_TX_MODES, W(5), W(200), IC7760_VFOS, IC7760_ANTS}, /* USA only */ - {MHz(5.37150), MHz(5.37450), IC7760_OTHER_TX_MODES, W(5), W(200), IC7760_VFOS, IC7760_ANTS}, /* USA only */ - {MHz(5.40350), MHz(5.40650), IC7760_OTHER_TX_MODES, W(5), W(200), IC7760_VFOS, IC7760_ANTS}, /* USA only */ + {MHz(5.33050), MHz(5.33350), IC7760_OTHER_TX_MODES, W(1), W(200), IC7760_VFOS, IC7760_ANTS}, /* USA only */ + {MHz(5.34650), MHz(5.34950), IC7760_OTHER_TX_MODES, W(1), W(200), IC7760_VFOS, IC7760_ANTS}, /* USA only */ + {MHz(5.36650), MHz(5.36950), IC7760_OTHER_TX_MODES, W(1), W(200), IC7760_VFOS, IC7760_ANTS}, /* USA only */ + {MHz(5.37150), MHz(5.37450), IC7760_OTHER_TX_MODES, W(1), W(200), IC7760_VFOS, IC7760_ANTS}, /* USA only */ + {MHz(5.40350), MHz(5.40650), IC7760_OTHER_TX_MODES, W(1), W(200), IC7760_VFOS, IC7760_ANTS}, /* USA only */ RIG_FRNG_END, }, commit 8ee3c9fa64fdebf70aa18b5b1ccbc313a5442a53 Author: Michael Black W9MDB <mdb...@ya...> Date: Tue Nov 26 23:44:45 2024 -0600 Add ic7760.c diff --git a/rigs/icom/ic7760.c b/rigs/icom/ic7760.c new file mode 100644 index 000000000..f101e9726 --- /dev/null +++ b/rigs/icom/ic7760.c @@ -0,0 +1,466 @@ +/* + * Hamlib CI-V backend - description of IC-7760 and variations + * Copyright (c) 2009-2010 by Stephane Fillod + * + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Stre<et, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#include <stdlib.h> + +#include <hamlib/rig.h> +#include "token.h" +#include "tones.h" +#include "idx_builtin.h" + +#include "icom.h" +#include "icom_defs.h" +#include "bandplan.h" +#include "frame.h" +#include "misc.h" + +#define IC7760_OTHER_TX_MODES (RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_FM|RIG_MODE_PKTLSB|RIG_MODE_PKTUSB|RIG_MODE_PKTFM|RIG_MODE_PSK|RIG_MODE_PSKR) +#define IC7760_AM_TX_MODES (RIG_MODE_AM|RIG_MODE_PKTAM) +#define IC7760_ALL_RX_MODES IC7760_OTHER_TX_MODES | IC7760_AM_TX_MODES +#define IC7760_1HZ_TS_MODES IC7760_ALL_RX_MODES + +#define IC7760_FUNCS (RIG_FUNC_NB|RIG_FUNC_COMP|RIG_FUNC_VOX|RIG_FUNC_TONE|RIG_FUNC_TSQL|RIG_FUNC_SBKIN|RIG_FUNC_FBKIN|RIG_FUNC_NR|RIG_FUNC_MON|RIG_FUNC_MN|RIG_FUNC_ANF|RIG_FUNC_VSC|RIG_FUNC_LOCK|RIG_FUNC_RIT|RIG_FUNC_XIT|RIG_FUNC_TUNER|RIG_FUNC_APF) + +#define IC7760_LEVELS (RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_AGC|RIG_LEVEL_COMP|RIG_LEVEL_BKINDL|RIG_LEVEL_BALANCE|RIG_LEVEL_NR|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT|RIG_LEVEL_CWPITCH|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN|RIG_LEVEL_KEYSPD|RIG_LEVEL_NOTCHF_RAW|RIG_LEVEL_SQL|RIG_LEVEL_RAWSTR|RIG_LEVEL_STRENGTH|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_APF|RIG_LEVEL_VOXGAIN|RIG_LEVEL_ANTIVOX|RIG_LEVEL_VOXDELAY|RIG_LEVEL_SWR|RIG_LEVEL_ALC|RIG_LEVEL_RFPOWER_METER|RIG_LEVEL_RFPOWER_METER_WATTS|RIG_LEVEL_COMP_METER|RIG_LEVEL_VD_METER|RIG_LEVEL_ID_METER|RIG_LEVEL_MONITOR_GAIN|RIG_LEVEL_NB|RIG_LEVEL_AGC_TIME) + +#define IC7760_VFOS (RIG_VFO_MAIN|RIG_VFO_SUB|RIG_VFO_MEM) +#define IC7760_PARMS (RIG_PARM_ANN|RIG_PARM_BACKLIGHT) + +#define IC7760_VFO_OPS (RIG_OP_CPY|RIG_OP_XCHG|RIG_OP_FROM_VFO|RIG_OP_TO_VFO|RIG_OP_MCL|RIG_OP_TUNE) +#define IC7760_SCAN_OPS (RIG_SCAN_MEM|RIG_SCAN_VFO|RIG_SCAN_PROG|RIG_SCAN_DELTA|RIG_SCAN_PRIO) + +#define IC7760_ANTS (RIG_ANT_1|RIG_ANT_2|RIG_ANT_3|RIG_ANT_4) + +// IC-7760 S-meter calibration data based on manual +#define IC7760_STR_CAL { 3, \ + { \ + { 0,-54 }, \ + { 120, 0 }, \ + { 241, 60 } \ + } } + +#define IC7760_SWR_CAL { 5, \ + { \ + { 0, 1.0f }, \ + { 48, 1.5f }, \ + { 80, 2.0f }, \ + { 120, 3.0f }, \ + { 240, 6.0f } \ + } } + +#define IC7760_ALC_CAL { 2, \ + { \ + { 0, 0.0f }, \ + { 120, 1.0f } \ + } } + +#define IC7760_RFPOWER_METER_CAL { 13, \ + { \ + { 0, 0.0f }, \ + { 21, 5.0f }, \ + { 43, 10.0f }, \ + { 65, 15.0f }, \ + { 83, 20.0f }, \ + { 95, 25.0f }, \ + { 105, 30.0f }, \ + { 114, 35.0f }, \ + { 124, 40.0f }, \ + { 143, 50.0f }, \ + { 183, 75.0f }, \ + { 213, 100.0f }, \ + { 255, 120.0f } \ + } } + + +#define IC7760_COMP_METER_CAL { 3, \ + { \ + { 0, 0.0f }, \ + { 130, 15.0f }, \ + { 241, 30.0f } \ + } } + +#define IC7760_VD_METER_CAL { 4, \ + { \ + { 0, 0.0f }, \ + { 151, 44.0f }, \ + { 180, 48.0f }, \ + { 211, 52.0f } \ + } } + +#define IC7760_ID_METER_CAL { 3, \ + { \ + { 0, 0.0f }, \ + { 165, 10.0f }, \ + { 241, 15.0f } \ + } } + +struct cmdparams ic7760_extcmds[] = +{ + { {.s = RIG_LEVEL_VOXDELAY}, CMD_PARAM_TYPE_LEVEL, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x82}, CMD_DAT_INT, 1 }, + { { 0 } } +}; + +int ic7760_ext_tokens[] = +{ + TOK_DRIVE_GAIN, TOK_DIGI_SEL_FUNC, TOK_DIGI_SEL_LEVEL, TOK_BACKEND_NONE +}; + +/* + * IC-7760 rig capabilities. + */ +static const struct icom_priv_caps ic7760_priv_caps = +{ + 0xb1, /* default address */ + 0, /* 731 mode */ + 0, /* no XCHG */ + ic756pro_ts_sc_list, + .antack_len = 4, + .ant_count = 4, + .agc_levels_present = 1, + .agc_levels = { + { .level = RIG_AGC_OFF, .icom_level = 0 }, + { .level = RIG_AGC_FAST, .icom_level = 1 }, + { .level = RIG_AGC_MEDIUM, .icom_level = 2 }, + { .level = RIG_AGC_SLOW, .icom_level = 3 }, + { .level = RIG_AGC_LAST, .icom_level = -1 }, + }, + .extcmds = ic7760_extcmds, + .x25x26_always = 1, + .x25x26_possibly = 1, + .x1cx03_always = 1, + .x1cx03_possibly = 1, + .x1ax03_supported = 1, + .mode_with_filter = 1, + .data_mode_supported = 1 +}; + +// if hour < 0 then only date will be set +int ic7760_set_clock(RIG *rig, int year, int month, int day, int hour, int min, + int sec, double msec, int utc_offset) +{ + int cmd = 0x1a; + int subcmd = 0x05; + int retval = RIG_OK; + unsigned char prmbuf[MAXFRAMELEN]; + + if (year >= 0) + { + prmbuf[0] = 0x02; + prmbuf[1] = 0x05; + to_bcd(&prmbuf[2], year / 100, 2); + to_bcd(&prmbuf[3], year % 100, 2); + to_bcd(&prmbuf[4], month, 2); + to_bcd(&prmbuf[5], day, 2); + retval = icom_transaction(rig, cmd, subcmd, prmbuf, 6, NULL, NULL); + + if (retval != RIG_OK) + { + rig_debug(RIG_DEBUG_ERR, "%s(%d): %s\b", __func__, __LINE__, rigerror(retval)); + } + } + + if (hour >= 0) + { + prmbuf[0] = 0x02; + prmbuf[1] = 0x06; + to_bcd(&prmbuf[2], hour, 2); + to_bcd(&prmbuf[3], min, 2); + retval = icom_transaction(rig, cmd, subcmd, prmbuf, 4, NULL, NULL); + + if (retval != RIG_OK) + { + rig_debug(RIG_DEBUG_ERR, "%s(%d): %s\b", __func__, __LINE__, rigerror(retval)); + } + + prmbuf[0] = 0x02; + prmbuf[1] = 0x04; + rig_debug(RIG_DEBUG_ERR, "%s: utc_offset=%d\n", __func__, utc_offset); + to_bcd(&prmbuf[2], abs(utc_offset) / 100, 2); + to_bcd(&prmbuf[3], abs(utc_offset) % 100, 2); + to_bcd(&prmbuf[4], utc_offset >= 0 ? 0 : 1, 2); + retval = icom_transaction(rig, cmd, subcmd, prmbuf, 5, NULL, NULL); + + if (retval != RIG_OK) + { + rig_debug(RIG_DEBUG_ERR, "%s(%d): %s\b", __func__, __LINE__, rigerror(retval)); + } + } + + return retval; +} + +int ic7760_get_clock(RIG *rig, int *year, int *month, int *day, int *hour, + int *min, int *sec, double *msec, int *utc_offset) +{ + int cmd = 0x1a; + int subcmd = 0x05; + int retval = RIG_OK; + int resplen; + unsigned char prmbuf[MAXFRAMELEN]; + unsigned char respbuf[MAXFRAMELEN]; + + prmbuf[0] = 0x00; + prmbuf[1] = 0x58; + resplen = sizeof(respbuf); + retval = icom_transaction(rig, cmd, subcmd, prmbuf, 2, respbuf, &resplen); + *year = from_bcd(&respbuf[4], 2) * 100 + from_bcd(&respbuf[5], 2); + *month = from_bcd(&respbuf[6], 2); + *day = from_bcd(&respbuf[7], 2); + + if (hour != NULL) + { + prmbuf[0] = 0x00; + prmbuf[1] = 0x59; + retval = icom_transaction(rig, cmd, subcmd, prmbuf, 2, respbuf, &resplen); + + if (retval != RIG_OK) + { + return retval; + } + + *hour = from_bcd(&respbuf[4], 2); + *min = from_bcd(&respbuf[5], 2); + *sec = 0; + *msec = 0; + + prmbuf[0] = 0x00; + prmbuf[1] = 0x61; + retval = icom_transaction(rig, cmd, subcmd, prmbuf, 2, respbuf, &resplen); + + if (retval != RIG_OK) + { + return retval; + } + + *utc_offset = from_bcd(&respbuf[4], 2) * 100; + *utc_offset += from_bcd(&respbuf[5], 2); + + if (respbuf[6] != 0x00) { *utc_offset *= -1; } + + //rig_debug(RIG_DEBUG_VERBOSE, + // "%s: %02d-%02d-%02dT%02d:%02d:%06.3lf%s%04d\n'", + // __func__, *year, *month, *day, *hour, *min, *sec + *msec / 1000, + // *utc_offset >= 0 ? "+" : "-", (unsigned)abs(*utc_offset)); + } + + return retval; +} + +static int ic7760_rig_open(RIG *rig) +{ + rig_debug(RIG_DEBUG_VERBOSE, "%s: enter\n", __func__); + return icom_rig_open(rig); +} + +struct rig_caps ic7760_caps = +{ + RIG_MODEL(RIG_MODEL_IC7760), + .model_name = "IC-7760", + .mfg_name = "Icom", + .version = BACKEND_VER ".0", + .copyright = "LGPL", + .status = RIG_STATUS_ALPHA, + .rig_type = RIG_TYPE_TRANSCEIVER, + .ptt_type = RIG_PTT_RIG, + .dcd_type = RIG_DCD_RIG, + .port_type = RIG_PORT_SERIAL, + .serial_rate_min = 300, // the manual does not show serial speeds + .serial_rate_max = 19200, + .serial_data_bits = 8, + .serial_stop_bits = 1, + .serial_parity = RIG_PARITY_NONE, + .serial_handshake = RIG_HANDSHAKE_NONE, + .write_delay = 0, + .post_write_delay = 0, + .timeout = 1000, + .retry = 3, + .has_get_func = IC7760_FUNCS, + .has_set_func = IC7760_FUNCS, + .has_get_level = IC7760_LEVELS, + .has_set_level = RIG_LEVEL_SET(IC7760_LEVELS), + .has_get_parm = IC7760_PARMS, + .has_set_parm = RIG_PARM_SET(IC7760_PARMS), /* FIXME: parms */ + .level_gran = + { +#define NO_LVL_KEYSPD +#define NO_LVL_CWPITCH +#include "level_gran_icom.h" +#undef NO_LVL_KEYSPD +#undef NO_LVL_CWPITCH + [LVL_KEYSPD] = { .min = { .i = 6 }, .max = { .i = 48 }, .step = { .i = 1 } }, + [LVL_CWPITCH] = { .min = { .i = 300 }, .max = { .i = 900 }, .step = { .i = 1 } }, + }, + .parm_gran = { + [PARM_BACKLIGHT] = {.min = {.f = 0.0f}, .max = {.f = 1.0f}, .step = {.f = 1.0f / 255.0f}}, + [PARM_BANDSELECT] = {.step = {.s = "BANDUNUSED,BAND160M,BAND80M,BAND40M,BAND30M,BAND20M,BAND17M,BAND15M,BAND12M,BAND10M,BAND6M,BANDGEN"}}, + [PARM_ANN] = {.min = {.i = 0}, .max = {.i = 2}, .step = {.i = 1}}, + }, + + .ext_tokens = ic7760_ext_tokens, + .ctcss_list = common_ctcss_list, + .dcs_list = NULL, + .preamp = { 10, 20, RIG_DBLST_END, }, /* FIXME: TBC */ + .attenuator = { 6, 12, 18, RIG_DBLST_END, }, + .max_rit = Hz(9999), + .max_xit = Hz(9999), + .max_ifshift = Hz(0), + .agc_level_count = 4, + .agc_levels = { RIG_AGC_OFF, RIG_AGC_FAST, RIG_AGC_MEDIUM, RIG_AGC_SLOW }, + // ?? 7700 can have a different mode on VFOB but requires VFO swap + .targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE, + .vfo_ops = IC7760_VFO_OPS, + .scan_ops = IC7760_SCAN_OPS, + .transceive = RIG_TRN_RIG, + .bank_qty = 0, + .chan_desc_sz = 0, + + .chan_list = { + { 1, 99, RIG_MTYPE_MEM }, + { 100, 101, RIG_MTYPE_EDGE }, /* two by two */ + { 1, 4, RIG_MTYPE_MORSE }, + RIG_CHAN_END, + }, + + .rx_range_list1 = { {kHz(30), MHz(60), IC7760_ALL_RX_MODES, -1, -1, IC7760_VFOS, IC7760_ANTS}, + RIG_FRNG_END, + }, + .tx_range_list1 = { + FRQ_RNG_HF(1, IC7760_OTHER_TX_MODES, W(5), W(200), IC7760_VFOS, IC7760_ANTS), + FRQ_RNG_6m(1, IC7760_OTHER_TX_MODES, W(5), W(200), IC7760_VFOS, IC7760_ANTS), + FRQ_RNG_HF(1, IC7760_AM_TX_MODES, W(5), W(50), IC7760_VFOS, IC7760_ANTS), /* AM class */ + FRQ_RNG_6m(1, IC7760_AM_TX_MODES, W(5), W(50), IC7760_VFOS, IC7760_ANTS), /* AM class */ + RIG_FRNG_END, + }, + + .rx_range_list2 = { {kHz(30), MHz(60), IC7760_ALL_RX_MODES, -1, -1, IC7760_VFOS, IC7760_ANTS}, + RIG_FRNG_END, + }, + .tx_range_list2 = { + FRQ_RNG_HF(2, IC7760_OTHER_TX_MODES, W(5), W(200), IC7760_VFOS, IC7760_ANTS), + FRQ_RNG_6m(2, IC7760_OTHER_TX_MODES, W(5), W(200), IC7760_VFOS, IC7760_ANTS), + FRQ_RNG_HF(2, IC7760_AM_TX_MODES, W(5), W(50), IC7760_VFOS, IC7760_ANTS), /* AM class */ + FRQ_RNG_6m(2, IC7760_AM_TX_MODES, W(5), W(50), IC7760_VFOS, IC7760_ANTS), /* AM class */ + /* USA only, TBC: end of range and modes */ + {MHz(5.33050), MHz(5.33350), IC7760_OTHER_TX_MODES, W(5), W(200), IC7760_VFOS, IC7760_ANTS}, /* USA only */ + {MHz(5.34650), MHz(5.34950), IC7760_OTHER_TX_MODES, W(5), W(200), IC7760_VFOS, IC7760_ANTS}, /* USA only */ + {MHz(5.36650), MHz(5.36950), IC7760_OTHER_TX_MODES, W(5), W(200), IC7760_VFOS, IC7760_ANTS}, /* USA only */ + {MHz(5.37150), MHz(5.37450), IC7760_OTHER_TX_MODES, W(5), W(200), IC7760_VFOS, IC7760_ANTS}, /* USA only */ + {MHz(5.40350), MHz(5.40650), IC7760_OTHER_TX_MODES, W(5), W(200), IC7760_VFOS, IC7760_ANTS}, /* USA only */ + RIG_FRNG_END, + }, + + .tuning_steps = { + {IC7760_1HZ_TS_MODES, 1}, + {IC7760_ALL_RX_MODES, Hz(100)}, + {IC7760_ALL_RX_MODES, kHz(1)}, + {IC7760_ALL_RX_MODES, kHz(5)}, + {IC7760_ALL_RX_MODES, kHz(9)}, + {IC7760_ALL_RX_MODES, kHz(10)}, + {IC7760_ALL_RX_MODES, kHz(12.5)}, + {IC7760_ALL_RX_MODES, kHz(20)}, + {IC7760_ALL_RX_MODES, kHz(25)}, + RIG_TS_END, + }, + /* mode/filter list, remember: order matters! */ + .filters = { + {RIG_MODE_SSB | RIG_MODE_PKTLSB | RIG_MODE_PKTUSB, kHz(2.4)}, + {RIG_MODE_SSB | RIG_MODE_PKTLSB | RIG_MODE_PKTUSB, kHz(1.8)}, + {RIG_MODE_SSB | RIG_MODE_PKTLSB | RIG_MODE_PKTUSB, kHz(3)}, + {RIG_MODE_CW | RIG_MODE_CWR | RIG_MODE_RTTY | RIG_MODE_RTTYR | RIG_MODE_PSK | RIG_MODE_PSKR, Hz(400)}, + {RIG_MODE_CW | RIG_MODE_CWR | RIG_MODE_RTTY | RIG_MODE_RTTYR | RIG_MODE_PSK | RIG_MODE_PSKR, Hz(50)}, + {RIG_MODE_CW | RIG_MODE_CWR | RIG_MODE_PSK | RIG_MODE_PSKR, kHz(1.0)}, + {RIG_MODE_RTTY | RIG_MODE_RTTYR, kHz(2.4)}, + {RIG_MODE_AM | RIG_MODE_PKTAM, kHz(6)}, + {RIG_MODE_AM | RIG_MODE_PKTAM, kHz(3)}, + {RIG_MODE_AM | RIG_MODE_PKTAM, kHz(9)}, + {RIG_MODE_FM | RIG_MODE_PKTFM, kHz(12)}, + {RIG_MODE_FM | RIG_MODE_PKTFM, kHz(8)}, + {RIG_MODE_FM | RIG_MODE_PKTFM, kHz(15)}, + RIG_FLT_END, + }, + .str_cal = IC7760_STR_CAL, + .swr_cal = IC7760_SWR_CAL, + .alc_cal = IC7760_ALC_CAL, + .rfpower_meter_cal = IC7760_RFPOWER_METER_CAL, + .comp_meter_cal = IC7760_COMP_METER_CAL, + .vd_meter_cal = IC7760_VD_METER_CAL, + .id_meter_cal = IC7760_ID_METER_CAL, + + .cfgparams = icom_cfg_params, + .set_conf = icom_set_conf, + .get_conf = icom_get_conf, + + .priv = (void *)& ic7760_priv_caps, + .rig_init = icom_init, + .rig_cleanup = icom_cleanup, + .rig_open = ic7760_rig_open, + .rig_close = icom_rig_close, + + .set_freq = icom_set_freq, + .get_freq = icom_get_freq, + .set_mode = icom_set_mode, + .get_mode = icom_get_mode, + .set_vfo = icom_set_vfo, +// .get_vfo = icom_get_vfo, + .set_ant = icom_set_ant, + .get_ant = icom_get_ant, + + .set_rit = icom_set_rit_new, + .get_rit = icom_get_rit_new, + .get_xit = icom_get_rit_new, + .set_xit = icom_set_xit_new, + + .decode_event = icom_decode_event, + .set_level = icom_set_level, + .get_level = icom_get_level, + .set_ext_level = icom_set_ext_level, + .get_ext_level = icom_get_ext_level, + .set_func = icom_set_func, + .get_func = icom_get_func, + .set_parm = icom_set_parm, + .get_parm = icom_get_parm, + .set_mem = icom_set_mem, + .vfo_op = icom_vfo_op, + .scan = icom_scan, + .set_ptt = icom_set_ptt, + .get_ptt = icom_get_ptt, + .get_dcd = icom_get_dcd, + .set_ts = icom_set_ts, + .get_ts = icom_get_ts, + .set_ctcss_tone = icom_set_ctcss_tone, + .get_ctcss_tone = icom_get_ctcss_tone, + .set_ctcss_sql = icom_set_ctcss_sql, + .get_ctcss_sql = icom_get_ctcss_sql, + .set_split_freq = icom_set_split_freq, + .get_split_freq = icom_get_split_freq, + .set_split_mode = icom_set_split_mode, + .get_split_mode = icom_get_split_mode, + .set_split_vfo = icom_set_split_vfo, + .get_split_vfo = icom_get_split_vfo, + .set_powerstat = icom_set_powerstat, + .get_powerstat = icom_get_powerstat, + .send_morse = icom_send_morse, + .stop_morse = icom_stop_morse, + .wait_morse = rig_wait_morse, + .set_clock = ic7760_set_clock, + .get_clock = ic7760_get_clock, + .hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS +}; commit a94e2948f550f2e040a24d5c965a62be4628f2ea Author: Michael Black W9MDB <mdb...@ya...> Date: Tue Nov 26 23:38:19 2024 -0600 Add IC7760 Alpha diff --git a/NEWS b/NEWS index 32e029f7b..2cef16957 100644 --- a/NEWS +++ b/NEWS @@ -13,6 +13,7 @@ Version 5.x -- future * Change FT1000MP Mark V model names to align with FT1000MP Version 4.6 + * Add IC7760 * IC7300 Mode filter can now be set by # (i.e. 1,2,3) * Fixed AF6SA WRC rotor controller * Added Rhode&Schwarz XK852 diff --git a/include/hamlib/riglist.h b/include/hamlib/riglist.h index 8b1abb743..7b1579e23 100644 --- a/include/hamlib/riglist.h +++ b/include/hamlib/riglist.h @@ -297,6 +297,7 @@ #define RIG_MODEL_X5105 RIG_MAKE_MODEL(RIG_ICOM, 89) /* Xiegu X5105 -- G90 compatible */ #define RIG_MODEL_IC905 RIG_MAKE_MODEL(RIG_ICOM, 90) #define RIG_MODEL_X6200 RIG_MAKE_MODEL(RIG_ICOM, 91) /* Xiegu X6200 */ +#define RIG_MODEL_IC7760 RIG_MAKE_MODEL(RIG_ICOM, 92) /* * Optoelectronics (CI-V) diff --git a/rigs/icom/Makefile.am b/rigs/icom/Makefile.am index ae35b5139..b295fe8d1 100644 --- a/rigs/icom/Makefile.am +++ b/rigs/icom/Makefile.am @@ -8,7 +8,7 @@ ICOMSRC = icom.c icom.h icom_defs.h frame.c frame.h ic706.c icr8500.c ic735.c ic id1.c id31.c id51.c id4100.c id5100.c perseus.c ic2730.c \ ic707.c ic728.c ic751.c ic761.c \ ic78.c ic7800.c ic785x.c \ - ic7000.c ic7100.c ic7200.c ic7300.c ic7600.c ic7610.c ic7700.c icf8101.c \ + ic7000.c ic7100.c ic7200.c ic7300.c ic7600.c ic7610.c ic7700.c ic7760.c icf8101.c \ ic7300.h optoscan.c optoscan.h xiegu.c level_gran_icom.h noinst_LTLIBRARIES = libhamlib-icom.la diff --git a/rigs/icom/icom.c b/rigs/icom/icom.c index 5eaec5dde..082d846b4 100644 --- a/rigs/icom/icom.c +++ b/rigs/icom/icom.c @@ -668,15 +668,17 @@ static const struct icom_addr icom_addr_list[] = {RIG_MODEL_ICR8500, 0x4a}, {RIG_MODEL_ICR9000, 0x2a}, {RIG_MODEL_ICR9500, 0x72}, - {RIG_MODEL_MINISCOUT, 0x94}, +// {RIG_MODEL_MINISCOUT, 0x94}, // ic7300 took this one {RIG_MODEL_IC718, 0x5e}, {RIG_MODEL_OS535, 0x80}, /* same address as IC-7410 */ {RIG_MODEL_ICID1, 0x01}, {RIG_MODEL_IC7000, 0x70}, {RIG_MODEL_IC7100, 0x88}, {RIG_MODEL_IC7200, 0x76}, + {RIG_MODEL_IC7300, 0x94}, {RIG_MODEL_IC7610, 0x98}, {RIG_MODEL_IC7700, 0x74}, + {RIG_MODEL_IC7760, 0xB1}, {RIG_MODEL_PERSEUS, 0xE1}, {RIG_MODEL_X108G, 0x70}, {RIG_MODEL_X6100, 0x70}, @@ -10043,6 +10045,7 @@ DECLARE_INITRIG_BACKEND(icom) rig_register(&ic7200_caps); rig_register(&ic7300_caps); rig_register(&ic7610_caps); + rig_register(&ic7760_caps); rig_register(&ic781_caps); rig_register(&ic707_caps); rig_register(&ic728_caps); diff --git a/rigs/icom/icom.h b/rigs/icom/icom.h index 11d6e7214..b1f3812b7 100644 --- a/rigs/icom/icom.h +++ b/rigs/icom/icom.h @@ -497,6 +497,7 @@ extern struct rig_caps ic475_caps; extern struct rig_caps ic575_caps; extern struct rig_caps ic1275_caps; extern struct rig_caps icf8101_caps; +extern struct rig_caps ic7760_caps; extern struct rig_caps omnivip_caps; extern struct rig_caps delta2_caps; commit fbdb6656209306df75aaa2f541122f325f90a818 Merge: dcc7b3743 2447cb204 Author: Mike Black W9MDB <mdb...@ya...> Date: Sun Nov 24 22:30:38 2024 -0600 Merge branch 'master' of https://github.com/Hamlib/Hamlib diff --cc doc/man1/rigctlsync.1 index c84ea9ef7,d07dc83b4..d35dd41eb --- a/doc/man1/rigctlsync.1 +++ b/doc/man1/rigctlsync.1 @@@ -29,7 -29,7 +29,7 @@@ rigctlsync \- synchronize a rig to SDR .YS . .SH DESCRIPTION - Allows you to synchronize frequence from a rig to SDR#. -Allows you to synchornize frequency from a rig to SDR#. ++Allows you to synchronize frequency from a rig to SDR#. Best when used with rigctld, FlRig, or a multiport radio. . .PP diff --cc rigs/icom/icom.h index 2cf9259c0,2cf9259c0..11d6e7214 --- a/rigs/icom/icom.h +++ b/rigs/icom/icom.h @@@ -35,7 -35,7 +35,7 @@@ #include <sys/time.h> #endif --#define BACKEND_VER "20241111" ++#define BACKEND_VER "20241121" #define ICOM_IS_ID31 rig_is_model(rig, RIG_MODEL_ID31) #define ICOM_IS_ID51 rig_is_model(rig, RIG_MODEL_ID51) diff --cc rigs/kenwood/flex6xxx.c index 76da92547,76da92547..dd145a368 --- a/rigs/kenwood/flex6xxx.c +++ b/rigs/kenwood/flex6xxx.c @@@ -1331,6 -1331,6 +1331,9 @@@ int powersdr_get_parm(RIG *rig, setting RETURNFUNC(RIG_OK); } ++#define NO_LVL_KEYSPD ++#define NO_LVL_SLOPE_LOW ++#define NO_LVL_SLOPE_HIGH /* * F6K rig capabilities. @@@ -1360,13 -1360,13 +1363,7 @@@ struct rig_caps f6k_caps .has_set_level = F6K_LEVEL_ALL, .has_get_parm = RIG_P... [truncated message content] |