[Hamlib-commits] Hamlib -- Ham radio control libraries branch master updated. 3bda269494f4719fa49a9
Library to control radio transceivers and receivers
Brought to you by:
n0nb
From: n0nb <n0...@us...> - 2023-07-07 15:43:16
|
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 3bda269494f4719fa49a996dd62ab0429f81e9d4 (commit) via 90585cbb6e0d51440ea122e1b054e39db52da0b4 (commit) via 24f17730f4ee4032216cb18e8a509fca73751b87 (commit) via 52cba4630b5eea36421bb55aa698fb1e211985d6 (commit) via ad1e63efa1e64e83cd9bb1c10bfc0b45f7e308bb (commit) via 58e5e260a51fc45f88ccc5a2d5551e5fd89e203d (commit) via 858f2b66c3f5e2ad8845a8b76b1bd3008283a132 (commit) via 44fa32c8cd8be026f9fa43a469247c9383220009 (commit) via 7a713634e37f2eca1ec05a74cae8022b5d88c8c7 (commit) via 4c02a70ea3bcea5b68aa765a837aed04eee579a3 (commit) via 0f706dfaae539e5bde62848ee20f5f6b1e4cf7f9 (commit) via 16b83b76b37503d81903fee6be2b237f6d78921a (commit) via 25ad13cea9ffe4f853a5a4070399b80e7adef778 (commit) via 4171598eafa5c028010b3191ff6659ff66847783 (commit) via f3cab55c4f8782761ceb9674c948a9a254050dc5 (commit) via a3ac6e0be312486628cb97199fa5e7eaa1e63954 (commit) via c0c70b014693f7d41703cb6087416b96c6935a90 (commit) via 2728d47a6052e6b3f1a469fdb0c716e7b0e2f290 (commit) via 4bd904502ba66a89bb9ec47fd799075bf8393306 (commit) via b158b224ab0f4d697136efaa0a71849df67713de (commit) via fcef98e60dc728453e245f7e59e0dcad2dc644d2 (commit) via 5c3f26cc5668e01f9540d3ab6c541ebdcd390eaf (commit) via e9d032011106dd24179754788b0eeb958711ab81 (commit) via 28396bad7a3fc116a8666269a27c95a7c1df3d94 (commit) via 5a26bde2369c6a2c986cde7effc9a9a1d01ba140 (commit) via 105cc6e3c612a1f7c94395c348c7e3895ac39062 (commit) via 3283c3b22ffda6a112376bf4278ad13e999011a4 (commit) via 701aaab1c6fb63ff7a9e0e4478c4879370a6a354 (commit) via c5937b23e518a396870a2c3ebc791b18f47cb673 (commit) via 1c2033c17f6d70f76b7a5b1b867a198e15b109a5 (commit) via 751935d83879c8edad2f58d131948eb714fafe50 (commit) via 5281361e071973386025571eef636f68ca7293db (commit) via efb567f66701b4227d290ca26bdb5155be91e109 (commit) via 97811d2aa7eb2246da0195150b2018cbc15bf193 (commit) via 4dfe98b0fea83737193a97105f4c52ee627a2962 (commit) via b3a61cf00ea55fdeb3fd12d2dc7238d9e353e533 (commit) via f14c241f43b83ed811a00d3d71f6a4849879436e (commit) via fa31975650c242dd0b734e59065a23b41e8eeaa8 (commit) via d9b936618c8a65593c71f435174bb3e462fb39c4 (commit) via f9d27d0e35ff0aa8fa47c75d7642199efbb16ad1 (commit) via 8e94bc63d0888fc70b551bf0e76d56c9c3ba5760 (commit) via 33d13f78492e85bc754c21bd4c5771f40118e6af (commit) via 07dde9ae0fe503a7093559ab947de1a21ad423e3 (commit) via ebedbbbfb5ba84ac8591220e6f8387750575693b (commit) via dc1fa7f450909a1bb2cc7fa40d2d5b688a204359 (commit) via 2e610be0313cef0366ce61443d2b54d040ab9b3b (commit) via c640f663260510e274b9991aa4cea929a63f6161 (commit) via 88a1d88e0fae81402ed31e9e6d7921858d34404f (commit) via 03e72c3a994b1a0a692faa8b7c23209f91fb38b3 (commit) via 788db91e2fce8c354b1779c717433bb8e470dc10 (commit) via 163d10651bb0d9601943e75b0b210af4288bca17 (commit) via c4f635ab5d71e9312380a264c655f2344e44af4f (commit) via 224d68d1ac3ffe951e1258a67fec726d1cfca313 (commit) via 6100bfdc115cb32021cb9dbf774a1e1f7e3a44c9 (commit) via 8d8f224affc955b94f12c0b4da7be533a55d6217 (commit) via 32569d40201728de756a8bfe012495bdcbadebea (commit) via 9bec3fad4ffb76073b1ed0bea26c25221ef88e20 (commit) from 05cf5546717be163e94b30f98cd17a3f1136ba1a (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 3bda269494f4719fa49a996dd62ab0429f81e9d4 Author: Mike Black W9MDB <mdb...@ya...> Date: Tue Jul 4 22:20:34 2023 -0500 Add elapsd to rig_test_cw diff --git a/tests/rig_tests.c b/tests/rig_tests.c index 8a8a63401..a4a706b69 100644 --- a/tests/rig_tests.c +++ b/tests/rig_tests.c @@ -8,6 +8,7 @@ int rig_test_cw(RIG *rig) char *s = "SOS SOS SOS SOS SOS SOS SOS SOS SOS SOS SOS SOS SOS"; //char *s = "TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST"; int i; + ELAPSED1; ENTERFUNC; for (i = 0; i < strlen(s); ++i) @@ -26,5 +27,6 @@ int rig_test_cw(RIG *rig) } } + ELAPSED2; RETURNFUNC(RIG_OK); } commit 90585cbb6e0d51440ea122e1b054e39db52da0b4 Author: Mike Black W9MDB <mdb...@ya...> Date: Tue Jul 4 17:36:42 2023 -0500 Add testmW2power.c diff --git a/tests/testmW2power.c b/tests/testmW2power.c new file mode 100644 index 000000000..215b20b25 --- /dev/null +++ b/tests/testmW2power.c @@ -0,0 +1,78 @@ +/* + * Hamlib sample program to test transceive mode (async event) + */ + +#include <stdio.h> +#include <string.h> +#include <unistd.h> +#include <stdlib.h> + +#include <hamlib/rig.h> + +#include <hamlib/config.h> + +int nrigs = 0; + +int callback(const struct rig_caps *caps, rig_ptr_t rigp) +{ + RIG *rig = (RIG *) rigp; + + switch (caps->rig_model) + { + case RIG_MODEL_NETRIGCTL: + return 1; + break; + } + + rig = rig_init(caps->rig_model); + + if (!rig) + { + fprintf(stderr, "Unknown rig num: %u\n", caps->rig_model); + fprintf(stderr, "Please check riglist.h\n"); + exit(1); /* whoops! something went wrong (mem alloc?) */ + } + + if (caps->mW2power) + { + nrigs++; + printf("%20s:", caps->model_name); + fflush(stdout); + float fpow; + unsigned int mwpower = 1 * 1000; + freq_t freq = MHz(14); + int retcode = rig_mW2power(rig, &fpow, mwpower, freq, RIG_MODE_CW); + + if (retcode != RIG_OK) + { + printf("rig_mW2power: error = %s \n", rigerror(retcode)); + return 1; + } + + if (fpow < 0.009 || fpow > .11) + { +// printf("rig=%d, fpow=%g, min=%d, max=%d\n", caps->rig_model, fpow, caps->); + printf("rig=%d, fpow=%g\n", caps->rig_model, fpow); + // we call again to make debugging this section easier + rig_mW2power(rig, &fpow, mwpower, freq, RIG_MODE_CW); + } + else { printf("\n"); } + } + + rig_cleanup(rig); /* if you care about memory */ + return 1; +} + +int main(int argc, char *argv[]) +{ + RIG *rig; + int i; + + rig_set_debug(RIG_DEBUG_NONE); + + rig_load_all_backends(); + rig_list_foreach(callback, &rig); + printf("Done testing %d rigs\n", nrigs); + + return 0; +} commit 24f17730f4ee4032216cb18e8a509fca73751b87 Author: Mike Black W9MDB <mdb...@ya...> Date: Tue Jul 4 17:31:07 2023 -0500 Add \test command to rigctl -- first test routine is "cw" https://github.com/Hamlib/Hamlib/issues/1281 diff --git a/tests/Makefile.am b/tests/Makefile.am index 0e3d453d8..72717b30e 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -17,9 +17,9 @@ DISTCLEANFILES = rigctl.log rigctl.sum testbcd.log testbcd.sum bin_PROGRAMS = rigctl rigctld rigmem rigsmtr rigswr rotctl rotctld rigctlcom rigctltcp rigctlsync ampctl ampctld rigtestmcast rigtestmcastrx $(TESTLIBUSB) #check_PROGRAMS = dumpmem testrig testrigopen testrigcaps testtrn testbcd testfreq listrigs testloc rig_bench testcache cachetest cachetest2 testcookie testgrid testsecurity -check_PROGRAMS = dumpmem testrig testrigopen testrigcaps testtrn testbcd testfreq listrigs testloc rig_bench testcache cachetest cachetest2 testcookie testgrid hamlibmodels +check_PROGRAMS = dumpmem testrig testrigopen testrigcaps testtrn testbcd testfreq listrigs testloc rig_bench testcache cachetest cachetest2 testcookie testgrid hamlibmodels testmW2power -RIGCOMMONSRC = rigctl_parse.c rigctl_parse.h dumpcaps.c dumpstate.c uthash.h +RIGCOMMONSRC = rigctl_parse.c rigctl_parse.h dumpcaps.c dumpstate.c uthash.h rig_tests.c rig_tests.h ROTCOMMONSRC = rotctl_parse.c rotctl_parse.h dumpcaps_rot.c uthash.h AMPCOMMONSRC = ampctl_parse.c ampctl_parse.h dumpcaps_amp.c uthash.h diff --git a/tests/rig_tests.c b/tests/rig_tests.c new file mode 100644 index 000000000..8a8a63401 --- /dev/null +++ b/tests/rig_tests.c @@ -0,0 +1,30 @@ +#include <stdio.h> +#include <hamlib/rig.h> +#include <misc.h> + + +int rig_test_cw(RIG *rig) +{ + char *s = "SOS SOS SOS SOS SOS SOS SOS SOS SOS SOS SOS SOS SOS"; + //char *s = "TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST"; + int i; + ENTERFUNC; + + for (i = 0; i < strlen(s); ++i) + { + char cw[2]; + cw[0] = s[i]; + cw[1] = '\0'; + + int retval = rig_send_morse(rig, RIG_VFO_CURR, cw); + hl_usleep(100*1000); + + if (retval != RIG_OK) + { + rig_debug(RIG_DEBUG_ERR, "%s: rig_send_morse error: %s\n", __func__, + rigerror(retval)); + } + } + + RETURNFUNC(RIG_OK); +} diff --git a/tests/rig_tests.h b/tests/rig_tests.h new file mode 100644 index 000000000..7cd3e18a6 --- /dev/null +++ b/tests/rig_tests.h @@ -0,0 +1,3 @@ +#include <hamlib/rig.h> + +int rig_test_cw(RIG *rig); diff --git a/tests/rigctl_parse.c b/tests/rigctl_parse.c index 23e25d566..c0386bd2a 100644 --- a/tests/rigctl_parse.c +++ b/tests/rigctl_parse.c @@ -36,6 +36,7 @@ #include <ctype.h> #include <errno.h> #include <getopt.h> +#include <rig_tests.h> // If true adds some debug statements to see flow of rigctl parsing int debugflow = 0; @@ -264,6 +265,7 @@ declare_proto_rig(set_lock_mode); declare_proto_rig(get_lock_mode); declare_proto_rig(send_raw); declare_proto_rig(client_version); +declare_proto_rig(test); /* @@ -379,6 +381,7 @@ static struct test_table test_list[] = { 0xa4, "send_raw", ACTION(send_raw), ARG_NOVFO | ARG_IN1 | ARG_IN2 | ARG_OUT3, "Terminator", "Command", "Send raw answer" }, { 0xa5, "client_version", ACTION(client_version), ARG_NOVFO | ARG_IN1, "Version", "Client version" }, { 0xa6, "get_vfo_list", ACTION(get_vfo_list), ARG_NOVFO }, + { 0xa7, "test", ACTION(test), ARG_NOVFO | ARG_IN, "routine" }, { 0x00, "", NULL }, }; @@ -2437,6 +2440,20 @@ declare_proto_rig(get_vfo_list) RETURNFUNC2(RIG_OK); } +/* '\test' */ +declare_proto_rig(test) +{ + ENTERFUNC2; + if (!strcmp(arg1, "?")) + { + fprintf(fout, "cw\n"); + RETURNFUNC2(RIG_OK); + } + if (strcmp(arg1, "cw")==0) rig_test_cw(rig); + + RETURNFUNC2(RIG_OK); +} + /* '\get_modes' */ declare_proto_rig(get_modes) { commit 52cba4630b5eea36421bb55aa698fb1e211985d6 Author: Mike Black W9MDB <mdb...@ya...> Date: Mon Jul 3 07:56:04 2023 -0500 Change FLRig PKT modes to PKTUSB/LSB instead of RTTY https://github.com/Hamlib/Hamlib/issues/1327 diff --git a/rigs/dummy/flrig.c b/rigs/dummy/flrig.c index 8a77cc69e..bc5964043 100644 --- a/rigs/dummy/flrig.c +++ b/rigs/dummy/flrig.c @@ -138,7 +138,7 @@ const struct rig_caps flrig_caps = RIG_MODEL(RIG_MODEL_FLRIG), .model_name = "FLRig", .mfg_name = "FLRig", - .version = "20221109.0", + .version = "20230703.0", .copyright = "LGPL", .status = RIG_STATUS_STABLE, .rig_type = RIG_TYPE_TRANSCEIVER, @@ -996,12 +996,12 @@ static int flrig_open(RIG *rig) else if (streq(p, "LSB-D2")) { modeMapAdd(&modes, RIG_MODE_PKTLSB, p); } else if (streq(p, "LSB-D3")) { modeMapAdd(&modes, RIG_MODE_PKTLSB, p); } else if (streq(p, "NFM")) { modeMapAdd(&modes, RIG_MODE_FMN, p); } - else if (streq(p, "PKT")) { modeMapAdd(&modes, RIG_MODE_RTTY, p); } + else if (streq(p, "PKT")) { modeMapAdd(&modes, RIG_MODE_PKTUSB, p); } else if (streq(p, "PKT-FM")) { modeMapAdd(&modes, RIG_MODE_PKTFM, p); } - else if (streq(p, "PKT-L")) { modeMapAdd(&modes, RIG_MODE_RTTYR, p); } - else if (streq(p, "PKT-U")) { modeMapAdd(&modes, RIG_MODE_RTTY, p); } - else if (streq(p, "PKT(L)")) { modeMapAdd(&modes, RIG_MODE_RTTYR, p); } - else if (streq(p, "PKT(U)")) { modeMapAdd(&modes, RIG_MODE_RTTY, p); } + else if (streq(p, "PKT-L")) { modeMapAdd(&modes, RIG_MODE_PKTLSB, p); } + else if (streq(p, "PKT-U")) { modeMapAdd(&modes, RIG_MODE_PKTUSB, p); } + else if (streq(p, "PKT(L)")) { modeMapAdd(&modes, RIG_MODE_PKTLSB, p); } + else if (streq(p, "PKT(U)")) { modeMapAdd(&modes, RIG_MODE_PKTUSB, p); } else if (streq(p, "PSK")) { modeMapAdd(&modes, RIG_MODE_RTTY, p); } else if (streq(p, "PSK-L")) { modeMapAdd(&modes, RIG_MODE_RTTYR, p); } else if (streq(p, "PSK-R")) { modeMapAdd(&modes, RIG_MODE_RTTYR, p); } commit ad1e63efa1e64e83cd9bb1c10bfc0b45f7e308bb Author: Mike Black W9MDB <mdb...@ya...> Date: Sun Jul 2 17:50:38 2023 -0500 Fix FT-991 Fake It failing to retrun to receive frequency Yaesu rigs will no return from set_ptt until TX0 is achieved Restrict 300ms wait just to FTDX3000 due to antenna switching This speeds up set_ptt off for other Yaeus rigs https://github.com/Hamlib/Hamlib/issues/1326 diff --git a/rigs/yaesu/newcat.c b/rigs/yaesu/newcat.c index eb30eb57f..9b8de873d 100644 --- a/rigs/yaesu/newcat.c +++ b/rigs/yaesu/newcat.c @@ -1943,6 +1943,7 @@ int newcat_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt) if (rig->state.current_mode != RIG_MODE_CW && rig->state.current_mode != RIG_MODE_CWR && rig->state.current_mode != RIG_MODE_CWN + && (is_ftdx3000 || is_ftdx3000dm) ) { // DX3000 with seperate rx/tx antennas was failing frequency change @@ -10908,6 +10909,7 @@ int newcat_set_cmd_validate(RIG *rig) { int bytes; char cmd[256]; // big enough + repeat: rig_flush(&state->rigport); /* discard any unsolicited data */ SNPRINTF(cmd, sizeof(cmd), "%s", priv->cmd_str); rc = write_block(&state->rigport, (unsigned char *) cmd, strlen(cmd)); @@ -10942,6 +10944,7 @@ int newcat_set_cmd_validate(RIG *rig) if (strncmp(priv->cmd_str, "TX", 2) == 0 && strncmp(priv->ret_data, "TX", 2) == 0) { + if (strstr(priv->ret_data,"TX2")) goto repeat; // TX command does not echo what's sent so we just check the basic command RETURNFUNC(RIG_OK); } diff --git a/rigs/yaesu/newcat.h b/rigs/yaesu/newcat.h index c943de044..23cc3083d 100644 --- a/rigs/yaesu/newcat.h +++ b/rigs/yaesu/newcat.h @@ -50,7 +50,7 @@ typedef char ncboolean; /* shared function version */ -#define NEWCAT_VER "20230531" +#define NEWCAT_VER "20230702" /* Hopefully large enough for future use, 128 chars plus '\0' */ #define NEWCAT_DATA_LEN 129 commit 58e5e260a51fc45f88ccc5a2d5551e5fd89e203d Merge: 858f2b66c 44fa32c8c Author: Michael Black <mdb...@ya...> Date: Sun Jul 2 17:28:52 2023 -0500 Merge pull request #1324 from koarlchen/rigctld-get-powerstat-separator-character Fix 'get_powerstat' command provided by rigctld regarding extended response protocol commit 858f2b66c3f5e2ad8845a8b76b1bd3008283a132 Merge: 7a713634e 4dfe98b0f Author: Michael Black <mdb...@ya...> Date: Sun Jul 2 17:28:18 2023 -0500 Merge pull request #1315 from j-gallardo/j-gallardo-patch-1 Update password.c commit 44fa32c8cd8be026f9fa43a469247c9383220009 Author: max <ma...@ka...> Date: Thu Jun 29 16:20:00 2023 +0200 Fix 'get_powerstat' command provided by rigctld by taking care of the given separator according to the extended response protocol diff --git a/tests/rigctl_parse.c b/tests/rigctl_parse.c index c076a8ac5..23e25d566 100644 --- a/tests/rigctl_parse.c +++ b/tests/rigctl_parse.c @@ -4796,7 +4796,7 @@ declare_proto_rig(get_powerstat) fprintf(fout, "%s: ", cmd->arg1); } - fprintf(fout, "%d\n", stat); + fprintf(fout, "%d%c", stat, resp_sep); rig_powerstat = stat; // update our global so others can see powerstat RETURNFUNC2(status); commit 7a713634e37f2eca1ec05a74cae8022b5d88c8c7 Merge: 4c02a70ea 0f706dfaa Author: Mike Black W9MDB <mdb...@ya...> Date: Thu Jun 29 09:19:00 2023 -0500 Merge branch 'master' of https://github.com/Hamlib/Hamlib commit 4c02a70ea3bcea5b68aa765a837aed04eee579a3 Author: Mike Black W9MDB <mdb...@ya...> Date: Thu Jun 29 09:17:46 2023 -0500 Fix IC-76XX rig_mW2power -- fixed any such rig https://github.com/Hamlib/Hamlib/issues/1323 diff --git a/src/rig.c b/src/rig.c index e70bbda9b..7bc854191 100644 --- a/src/rig.c +++ b/src/rig.c @@ -6115,6 +6115,7 @@ int HAMLIB_API rig_mW2power(RIG *rig, rmode_t mode) { const freq_range_t *txrange; + int limited = 0; if (!rig || !rig->caps || !power || mwpower == 0) { @@ -6142,14 +6143,20 @@ int HAMLIB_API rig_mW2power(RIG *rig, RETURNFUNC2(RIG_OK); } - *power = (float)mwpower / txrange->high_power; + *power = (float)mwpower / (float) txrange->high_power; if (*power > 1.0) { *power = 1.0; + limited = 1; + } + else if (*power < 0.0) + { + *power = 0; + limited = 1; } - RETURNFUNC2(mwpower > txrange->high_power ? RIG_OK : -RIG_ETRUNC); + RETURNFUNC2(limited ? RIG_ETRUNC : RIG_OK); } commit 0f706dfaae539e5bde62848ee20f5f6b1e4cf7f9 Merge: 25ad13cea 16b83b76b Author: Michael Black <mdb...@ya...> Date: Thu Jun 29 07:35:13 2023 -0500 Merge pull request #1322 from koarlchen/man-rigctld-typo-section-command Fix minor typo in man page for rigctld commit 16b83b76b37503d81903fee6be2b237f6d78921a Author: max <ma...@ka...> Date: Thu Jun 29 13:34:14 2023 +0200 Fix minor typo (missing u character) diff --git a/doc/man1/rigctld.1 b/doc/man1/rigctld.1 index af3b6b4e0..9680b7fc7 100644 --- a/doc/man1/rigctld.1 +++ b/doc/man1/rigctld.1 @@ -436,7 +436,7 @@ Since most of the .B Hamlib operations have a .BR set " and a " get -method, a single pper case letter will be used for +method, a single upper case letter will be used for .B set methods whereas the corresponding single lower case letter refers to the .B get commit 25ad13cea9ffe4f853a5a4070399b80e7adef778 Author: Mike Black W9MDB <mdb...@ya...> Date: Wed Jun 28 12:48:30 2023 -0500 Add BG2FX FC4/C/CR/L diff --git a/NEWS b/NEWS index b99dc6bb4..a0114ed9c 100644 --- a/NEWS +++ b/NEWS @@ -13,6 +13,8 @@ Version 5.x -- future * Change FT1000MP Mark V model names to align with FT1000MP Version 4.6 + * 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 * Add rig_set_debug_filename so Python can redirect debug stream * Fix Yaesu LBL_NR to use proper values diff --git a/include/hamlib/riglist.h b/include/hamlib/riglist.h index f231f38b8..b186f2308 100644 --- a/include/hamlib/riglist.h +++ b/include/hamlib/riglist.h @@ -198,6 +198,7 @@ #define RIG_MODEL_LAB599_TX500 RIG_MAKE_MODEL(RIG_KENWOOD,50) #define RIG_MODEL_SDRUNO RIG_MAKE_MODEL(RIG_KENWOOD,51) #define RIG_MODEL_QRPLABS RIG_MAKE_MODEL(RIG_KENWOOD,52) +#define RIG_MODEL_FX4 RIG_MAKE_MODEL(RIG_KENWOOD,53) /* * Icom diff --git a/rigs/kenwood/kenwood.c b/rigs/kenwood/kenwood.c index f03f526aa..649a7fee8 100644 --- a/rigs/kenwood/kenwood.c +++ b/rigs/kenwood/kenwood.c @@ -6105,6 +6105,7 @@ DECLARE_INITRIG_BACKEND(kenwood) rig_register(&tx500_caps); rig_register(&sdruno_caps); rig_register(&qrplabs_caps); + rig_register(&fx4_caps); return (RIG_OK); } diff --git a/rigs/kenwood/kenwood.h b/rigs/kenwood/kenwood.h index 836720667..c12a850f3 100644 --- a/rigs/kenwood/kenwood.h +++ b/rigs/kenwood/kenwood.h @@ -318,6 +318,7 @@ extern const struct rig_caps malachite_caps; extern const struct rig_caps tx500_caps; extern const struct rig_caps sdruno_caps; extern const struct rig_caps qrplabs_caps; +extern const struct rig_caps fx4_caps; /* use when not interested in the answer, but want to check its len */ static int inline kenwood_simple_transaction(RIG *rig, const char *cmd, diff --git a/rigs/kenwood/ts590.c b/rigs/kenwood/ts590.c index 6902e34a6..b385da864 100644 --- a/rigs/kenwood/ts590.c +++ b/rigs/kenwood/ts590.c @@ -29,9 +29,13 @@ #include "cal.h" #include "iofunc.h" +#define FX4_ALL_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_FM|RIG_MODE_PKTUSB|RIG_MODE_PKTLSB) #define TS590_ALL_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_FM|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_PKTFM|RIG_MODE_PKTUSB|RIG_MODE_PKTLSB|RIG_MODE_PKTAM) +#define FX4_OTHER_TX_MODES (RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_FM) #define TS590_OTHER_TX_MODES (RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_FM|RIG_MODE_RTTY) +#define FX4_AM_TX_MODES (RIG_MODE_AM) #define TS590_AM_TX_MODES (RIG_MODE_AM|RIG_MODE_PKTAM) +#define FX4_VFO (RIG_VFO_A|RIG_VFO_B) #define TS590_VFO (RIG_VFO_A|RIG_VFO_B|RIG_VFO_MEM) #define TS590_LEVEL_GET (RIG_LEVEL_RFPOWER|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_SQL|RIG_LEVEL_AGC|RIG_LEVEL_MICGAIN|RIG_LEVEL_STRENGTH|RIG_LEVEL_KEYSPD|RIG_LEVEL_CWPITCH| \ @@ -49,6 +53,7 @@ #define TS590_SCAN_OPS (RIG_SCAN_VFO) +#define FX4_ANTS (RIG_ANT_1) #define TS590_ANTS (RIG_ANT_1|RIG_ANT_2) #define TS590_CHANNEL_CAPS { \ @@ -1734,6 +1739,200 @@ const struct rig_caps ts590_caps = .hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS }; +/** + * BG2FX FX-4C/FX-4CR rig capabilities + * Supposed to be 590S compatible + * Separate entry allows for customization + */ +const struct rig_caps fx4_caps = +{ + RIG_MODEL(RIG_MODEL_FX4), + .model_name = "FX4/C/CR/L", + .mfg_name = "BG2FX", + .version = BACKEND_VER ".7", + .copyright = "LGPL", + .status = RIG_STATUS_STABLE, + .rig_type = RIG_TYPE_TRANSCEIVER, + .ptt_type = RIG_PTT_RIG_MICDATA, + .dcd_type = RIG_DCD_RIG, + .port_type = RIG_PORT_SERIAL, + .serial_rate_min = 115200, + .serial_rate_max = 115200, + .serial_data_bits = 8, + .serial_stop_bits = 1, + .serial_parity = RIG_PARITY_NONE, + .serial_handshake = RIG_HANDSHAKE_HARDWARE, + .write_delay = 0, + .post_write_delay = 0, + .timeout = 500, + .retry = 3, + .preamp = {12, RIG_DBLST_END,}, + .attenuator = {12, RIG_DBLST_END,}, + .max_rit = kHz(9.99), + .max_xit = kHz(9.99), + .max_ifshift = Hz(0), + .targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE, + .transceive = RIG_TRN_RIG, + .agc_level_count = 6, + .agc_levels = { RIG_AGC_OFF, RIG_AGC_SLOW, RIG_AGC_MEDIUM, RIG_AGC_FAST, RIG_AGC_SUPERFAST, RIG_AGC_ON }, + + .chan_list = { /* TBC */ + { 0, 89, RIG_MTYPE_MEM, TS590_CHANNEL_CAPS }, + { 90, 99, RIG_MTYPE_EDGE, TS590_CHANNEL_CAPS }, + RIG_CHAN_END, + }, + + .rx_range_list1 = { + {kHz(30), Hz(59999999), FX4_ALL_MODES, -1, -1, FX4_VFO, FX4_ANTS}, + RIG_FRNG_END, + }, /*!< Receive frequency range list for ITU region 1 */ + .tx_range_list1 = { + {kHz(3500), kHz(3800), FX4_OTHER_TX_MODES, 5000, 100000, FX4_VFO, FX4_ANTS}, + {kHz(3500), kHz(3800), FX4_AM_TX_MODES, 5000, 25000, FX4_VFO, FX4_ANTS}, + {MHz(7), kHz(7200), FX4_OTHER_TX_MODES, 5000, 100000, FX4_VFO, FX4_ANTS}, + {MHz(7), kHz(7200), FX4_AM_TX_MODES, 5000, 25000, FX4_VFO, FX4_ANTS}, + {kHz(10100), kHz(10150), FX4_OTHER_TX_MODES, 5000, 100000, FX4_VFO, FX4_ANTS}, + {kHz(10100), kHz(10150), FX4_AM_TX_MODES, 5000, 25000, FX4_VFO, FX4_ANTS}, + {MHz(14), kHz(14350), FX4_OTHER_TX_MODES, 5000, 100000, FX4_VFO, FX4_ANTS}, + {MHz(14), kHz(14350), FX4_AM_TX_MODES, 5000, 25000, FX4_VFO, FX4_ANTS}, + {kHz(18068), kHz(18168), FX4_OTHER_TX_MODES, 5000, 100000, FX4_VFO, FX4_ANTS}, + {kHz(18068), kHz(18168), FX4_AM_TX_MODES, 5000, 25000, FX4_VFO, FX4_ANTS}, + {MHz(21), kHz(21450), FX4_OTHER_TX_MODES, 5000, 100000, FX4_VFO, FX4_ANTS}, + {MHz(21), kHz(21450), FX4_AM_TX_MODES, 5000, 25000, FX4_VFO, FX4_ANTS}, + {kHz(24890), kHz(24990), FX4_OTHER_TX_MODES, 5000, 100000, FX4_VFO, FX4_ANTS}, + {kHz(24890), kHz(24990), FX4_AM_TX_MODES, 5000, 25000, FX4_VFO, FX4_ANTS}, + {MHz(28), kHz(29700), FX4_OTHER_TX_MODES, 5000, 100000, FX4_VFO, FX4_ANTS}, + {MHz(28), kHz(29700), FX4_AM_TX_MODES, 5000, 25000, FX4_VFO, FX4_ANTS}, + {MHz(50), kHz(52000), FX4_OTHER_TX_MODES, 5000, 100000, FX4_VFO, FX4_ANTS}, + {MHz(50), kHz(52000), FX4_AM_TX_MODES, 5000, 25000, FX4_VFO, FX4_ANTS}, + RIG_FRNG_END, + }, /*!< Transmit frequency range list for ITU region 1 */ + .rx_range_list2 = { + {kHz(30), Hz(59999999), FX4_ALL_MODES, -1, -1, FX4_VFO, FX4_ANTS}, + RIG_FRNG_END, + }, /*!< Receive frequency range list for ITU region 2 */ + .tx_range_list2 = { + {kHz(3500), MHz(4) - 1, FX4_OTHER_TX_MODES, 5000, 100000, FX4_VFO, FX4_ANTS}, + {kHz(3500), MHz(4) - 1, FX4_AM_TX_MODES, 5000, 25000, FX4_VFO, FX4_ANTS}, + {kHz(5250), kHz(5450), FX4_OTHER_TX_MODES, 5000, 100000, FX4_VFO, FX4_ANTS}, + {kHz(5250), kHz(5450), FX4_AM_TX_MODES, 5000, 25000, FX4_VFO, FX4_ANTS}, + {MHz(7), kHz(7300), FX4_OTHER_TX_MODES, 5000, 100000, FX4_VFO, FX4_ANTS}, + {MHz(7), kHz(7300), FX4_AM_TX_MODES, 5000, 25000, FX4_VFO, FX4_ANTS}, + {kHz(10100), kHz(10150), FX4_OTHER_TX_MODES, 5000, 100000, FX4_VFO, FX4_ANTS}, + {kHz(10100), kHz(10150), FX4_AM_TX_MODES, 5000, 25000, FX4_VFO, FX4_ANTS}, + {MHz(14), kHz(14350), FX4_OTHER_TX_MODES, 5000, 100000, FX4_VFO, FX4_ANTS}, + {MHz(14), kHz(14350), FX4_AM_TX_MODES, 5000, 25000, FX4_VFO, FX4_ANTS}, + {kHz(18068), kHz(18168), FX4_OTHER_TX_MODES, 5000, 100000, FX4_VFO, FX4_ANTS}, + {kHz(18068), kHz(18168), FX4_AM_TX_MODES, 5000, 25000, FX4_VFO, FX4_ANTS}, + {MHz(21), kHz(21450), FX4_OTHER_TX_MODES, 5000, 100000, FX4_VFO, FX4_ANTS}, + {MHz(21), kHz(21450), FX4_AM_TX_MODES, 5000, 25000, FX4_VFO, FX4_ANTS}, + {kHz(24890), kHz(24990), FX4_OTHER_TX_MODES, 5000, 100000, FX4_VFO, FX4_ANTS}, + {kHz(24890), kHz(24990), FX4_AM_TX_MODES, 5000, 25000, FX4_VFO, FX4_ANTS}, + {MHz(28), kHz(29700), FX4_OTHER_TX_MODES, 5000, 100000, FX4_VFO, FX4_ANTS}, + {MHz(28), kHz(29700), FX4_AM_TX_MODES, 5000, 25000, FX4_VFO, FX4_ANTS}, + {MHz(50), kHz(52000), FX4_OTHER_TX_MODES, 5000, 100000, FX4_VFO, FX4_ANTS}, + {MHz(50), kHz(52000), FX4_AM_TX_MODES, 5000, 25000, FX4_VFO, FX4_ANTS}, + RIG_FRNG_END, + }, /*!< Transmit frequency range list for ITU region 2 */ + .tuning_steps = { + {TS590_ALL_MODES, kHz(1)}, + {TS590_ALL_MODES, Hz(2500)}, + {TS590_ALL_MODES, kHz(5)}, + {TS590_ALL_MODES, Hz(6250)}, + {TS590_ALL_MODES, kHz(10)}, + {TS590_ALL_MODES, Hz(12500)}, + {TS590_ALL_MODES, kHz(15)}, + {TS590_ALL_MODES, kHz(20)}, + {TS590_ALL_MODES, kHz(25)}, + {TS590_ALL_MODES, kHz(30)}, + {TS590_ALL_MODES, kHz(100)}, + {TS590_ALL_MODES, kHz(500)}, + {TS590_ALL_MODES, MHz(1)}, + {TS590_ALL_MODES, 0}, /* any tuning step */ + RIG_TS_END, + }, + /* mode/filter list, remember: order matters! */ + .filters = { + {RIG_MODE_SSB, kHz(2.2)}, + {RIG_MODE_CW | RIG_MODE_CWR, Hz(500)}, + {RIG_MODE_AM, kHz(6)}, + {RIG_MODE_FM, kHz(12)}, + RIG_FLT_END, + }, + .level_gran = + { +#include "level_gran_kenwood.h" + [LVL_RF] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f / 100.0f } }, + [LVL_AF] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f / 100.0f } }, + [LVL_VOXDELAY] = { .min = { .i = 0 }, .max = { .i = 30 }, .step = { .i = 1 } }, + [LVL_CWPITCH] = {.min = {.i = 300}, .max = {.i = 1000}, .step = {.i = 50}}, + [LVL_BKIN_DLYMS] = {.min = {.i = 0}, .max = {.i = 1000}, .step = {.i = 50}}, + [LVL_SLOPE_LOW] = {.min = {.i = 0}, .max = {.i = 2400}, .step = {.i = 10}}, + [LVL_SLOPE_HIGH] = {.min = {.i = 0}, .max = {.i = 5000}, .step = {.i = 10}}, + }, + + .str_cal = TS590_STR_CAL, + .swr_cal = TS590_SWR_CAL, + + .ext_tokens = ts590_ext_tokens, + .extfuncs = ts590_ext_funcs, + .extlevels = ts590_ext_levels, + + .priv = (void *)& ts590_priv_caps, + .rig_init = kenwood_init, + .rig_cleanup = kenwood_cleanup, + .rig_open = kenwood_open, + .rig_close = kenwood_close, + .set_freq = kenwood_set_freq, + .get_freq = kenwood_get_freq, + .set_rit = ts590_set_rit, + .get_rit = ts590_get_rit, + .set_xit = ts590_set_rit, + .get_xit = ts590_get_rit, + .set_mode = ts590_set_mode, + .get_mode = ts590_get_mode, + .set_vfo = kenwood_set_vfo, + .get_vfo = kenwood_get_vfo_if, + .set_split_vfo = kenwood_set_split_vfo, + .get_split_vfo = kenwood_get_split_vfo_if, + .get_ptt = kenwood_get_ptt, + .set_ptt = kenwood_set_ptt, + .get_dcd = kenwood_get_dcd, + .set_powerstat = kenwood_set_powerstat, + .get_powerstat = kenwood_get_powerstat, + .get_info = ts590_get_info, + .reset = kenwood_reset, + .set_ant = kenwood_set_ant, + .get_ant = kenwood_get_ant, + .scan_ops = TS590_SCAN_OPS, + .scan = kenwood_scan, /* not working, invalid arguments using rigctl; kenwood_scan does only support on/off and not tone and CTCSS scan */ + .has_set_level = TS590_LEVEL_SET, + .has_get_level = TS590_LEVEL_GET, + .set_level = ts590_set_level, + .get_level = ts590_get_level, + .set_ext_level = ts590_set_ext_level, + .get_ext_level = ts590_get_ext_level, + .has_get_func = TS590_FUNC_ALL, + .has_set_func = TS590_FUNC_ALL, + .set_func = ts590_set_func, + .get_func = ts590_get_func, + .set_ext_func = ts590_set_ext_func, + .get_ext_func = ts590_get_ext_func, + .set_ctcss_tone = kenwood_set_ctcss_tone, + .get_ctcss_tone = kenwood_get_ctcss_tone, + .ctcss_list = kenwood38_ctcss_list, + .set_trn = kenwood_set_trn, + .get_trn = kenwood_get_trn, + .send_morse = kenwood_send_morse, + .stop_morse = kenwood_stop_morse, + .wait_morse = rig_wait_morse, + .set_mem = kenwood_set_mem, + .get_mem = kenwood_get_mem, + .vfo_ops = TS590_VFO_OPS, + .vfo_op = kenwood_vfo_op, + .hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS +}; + /** * TS-590SG rig capabilities */ commit 4171598eafa5c028010b3191ff6659ff66847783 Author: Mike Black W9MDB <mdb...@ya...> Date: Tue Jun 27 22:58:56 2023 -0500 Initialize rig->state.targetable_vfo diff --git a/src/rig.c b/src/rig.c index 22d08d825..e70bbda9b 100644 --- a/src/rig.c +++ b/src/rig.c @@ -658,6 +658,7 @@ RIG *HAMLIB_API rig_init(rig_model_t rig_model) rs->lo_freq = 0; rs->cache.timeout_ms = 500; // 500ms cache timeout by default rs->cache.ptt = 0; + rs->targetable_vfo = rig->caps->targetable_vfo; // We are using range_list1 as the default // Eventually we will have separate model number for different rig variations @@ -1385,7 +1386,7 @@ int HAMLIB_API rig_open(RIG *rig) { // for non-Icom rigs if there's no set_vfo then we need to set one rs->current_vfo = vfo_fixup(rig, RIG_VFO_A, rig->state.cache.split); - rig_debug(RIG_DEBUG_TRACE, "%s: No set_vfo function rig so default vfo = %s\n", + rig_debug(RIG_DEBUG_TRACE, "%s: No set_vfo function rig so default vfo=%s\n", __func__, rig_strvfo(rs->current_vfo)); } else commit f3cab55c4f8782761ceb9674c948a9a254050dc5 Author: Mike Black W9MDB <mdb...@ya...> Date: Tue Jun 27 14:28:37 2023 -0500 Change set_mode_x26 to do correct VFO for 7600/7610 https://github.com/Hamlib/Hamlib/issues/1319 diff --git a/rigs/icom/icom.c b/rigs/icom/icom.c index 40b1a5f67..4b9a691b5 100644 --- a/rigs/icom/icom.c +++ b/rigs/icom/icom.c @@ -2174,6 +2174,11 @@ static int icom_set_mode_x26(RIG *rig, vfo_t vfo, rmode_t mode, int datamode, { subcmd2 = 0x01; // get unselected VFO } + if (RIG_IS_IC7600 || RIG_IS_IC7610) + { // the 7600/7610 do it different 0=Main, 1=Sub -- maybe other Icoms will start doing this too + subcmd2 = 0; + if (vfo & RIG_VFO_B || vfo & RIG_VFO_SUB) subcmd2 = 1; + } buf[0] = mode; buf[1] = datamode; commit a3ac6e0be312486628cb97199fa5e7eaa1e63954 Author: Mike Black W9MDB <mdb...@ya...> Date: Tue Jun 27 11:24:27 2023 -0500 Change to using RIG_IS macros Fix segfault on non 76XX rigs https://github.com/Hamlib/Hamlib/issues/1319 diff --git a/rigs/icom/icom.c b/rigs/icom/icom.c index 9142a48bf..40b1a5f67 100644 --- a/rigs/icom/icom.c +++ b/rigs/icom/icom.c @@ -689,30 +689,30 @@ int icom_init(RIG *rig) // we can add rigs here that will never use the 0x25 cmd // some like the 751 don't even reject the command and have to time out if ( - rig->caps->rig_model == RIG_MODEL_IC275 - || rig->caps->rig_model == RIG_MODEL_IC375 - || rig->caps->rig_model == RIG_MODEL_IC706 - || rig->caps->rig_model == RIG_MODEL_IC706MKII - || rig->caps->rig_model == RIG_MODEL_IC706MKIIG - || rig->caps->rig_model == RIG_MODEL_IC751 - || rig->caps->rig_model == RIG_MODEL_X5105 - || rig->caps->rig_model == RIG_MODEL_IC1275 - || rig->caps->rig_model == RIG_MODEL_IC746 - || rig->caps->rig_model == RIG_MODEL_IC756 - || rig->caps->rig_model == RIG_MODEL_IC756PRO - || rig->caps->rig_model == RIG_MODEL_IC756PROII - || rig->caps->rig_model == RIG_MODEL_IC756PROIII - || rig->caps->rig_model == RIG_MODEL_IC746PRO - || rig->caps->rig_model == RIG_MODEL_IC756 - || rig->caps->rig_model == RIG_MODEL_IC7000 - || rig->caps->rig_model == RIG_MODEL_IC7100 - || rig->caps->rig_model == RIG_MODEL_IC7200 - || rig->caps->rig_model == RIG_MODEL_IC7700 - || rig->caps->rig_model == RIG_MODEL_IC821H - || rig->caps->rig_model == RIG_MODEL_IC910 - || rig->caps->rig_model == RIG_MODEL_IC2730 - || rig->caps->rig_model == RIG_MODEL_ID5100 - || rig->caps->rig_model == RIG_MODEL_IC9100 + RIG_IS_IC275 + || RIG_IS_IC375 + || RIG_IS_IC706 + || RIG_IS_IC706MKII + || RIG_IS_IC706MKIIG + || RIG_IS_IC751 + || RIG_IS_X5105 + || RIG_IS_IC1275 + || RIG_IS_IC746 + || RIG_IS_IC756 + || RIG_IS_IC756PRO + || RIG_IS_IC756PROII + || RIG_IS_IC756PROIII + || RIG_IS_IC746PRO + || RIG_IS_IC756 + || RIG_IS_IC7000 + || RIG_IS_IC7100 + || RIG_IS_IC7200 + || RIG_IS_IC7700 + || RIG_IS_IC821H + || RIG_IS_IC910 + || RIG_IS_IC2730 + || RIG_IS_ID5100 + || RIG_IS_IC9100 ) { priv->x25cmdfails = 1; @@ -961,13 +961,13 @@ static vfo_t icom_current_vfo(RIG *rig) // some rigs like IC9700 cannot do 0x25 0x26 command in satmode static void icom_satmode_fix(RIG *rig, int satmode) { - if (rig->caps->rig_model == RIG_MODEL_IC9700) + if (RIG_IS_IC9700) { rig_debug(RIG_DEBUG_VERBOSE, "%s: toggling IC9700 targetable for satmode=%d\n", __func__, satmode); - if (satmode) { rig->caps->targetable_vfo = 0; } - else { rig->caps->targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE; } + if (satmode) { rig->caps->targetable_vfo = rig->state.targetable_vfo = 0; } + else { rig->caps->targetable_vfo = rig->state.targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE; } } } @@ -1342,7 +1342,7 @@ int icom_set_freq(RIG *rig, vfo_t vfo, freq_t freq) freq_len = priv->civ_731_mode ? 4 : 5; - if (rig->caps->rig_model == RIG_MODEL_IC905) { freq /= 10; freq_len = 6; } + if (RIG_IS_IC905) { freq /= 10; freq_len = 6; } /* * to_bcd requires nibble len @@ -1373,8 +1373,8 @@ int icom_set_freq(RIG *rig, vfo_t vfo, freq_t freq) HAMLIB_TRACE; subcmd = 0x01; // get unselected VFO } - if (rig->state.rig_model == RIG_MODEL_IC7600) - { // the 7600 does it different 0=Main, 1=Sub -- maybe other Icoms will start doing this too + if (RIG_IS_IC7600) + { // the 7600/7610 do it different 0=Main, 1=Sub -- maybe other Icoms will start doing this too subcmd = 0; if (vfo & RIG_VFO_B || vfo & RIG_VFO_SUB) subcmd = 1; } @@ -1535,7 +1535,7 @@ int icom_get_freq(RIG *rig, vfo_t vfo, freq_t *freq) subcmd = -1; if (vfo == RIG_VFO_MEM && (priv->civ_731_mode - || rig->caps->rig_model == RIG_MODEL_IC706)) + || RIG_IS_IC706)) { rig_debug(RIG_DEBUG_TRACE, "%s: VFO=MEM so turning off civ_731\n", __func__); civ_731_mode = 1; @@ -1666,10 +1666,10 @@ int icom_get_freq(RIG *rig, vfo_t vfo, freq_t *freq) // Rigs like IC-7600 new firmware has 0x25 and 0x26 // So if this succeeds we'll assume all such rigs are targetable freq & mode - rig->caps->targetable_vfo = rig->state.targetable_vfo |= RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE; rig_debug(RIG_DEBUG_VERBOSE, "%s: TARGETABLE_FREQ and TARGETABLE_MODE enabled\n", __func__); - if (rig->state.rig_model == RIG_MODEL_IC7600) - { // the 7600 does it different 0=Main, 1=Sub -- maybe other Icoms will start doing this too + if (RIG_IS_IC7600 || RIG_IS_IC7610) + { // the 7600/7610 do it different 0=Main, 1=Sub -- maybe other Icoms will start doing this too + rig->caps->targetable_vfo = rig->state.targetable_vfo |= RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE; subcmd2 = 0; if (vfo & RIG_VFO_B || vfo & RIG_VFO_SUB) subcmd2 = 1; } @@ -1780,7 +1780,7 @@ int icom_get_freq(RIG *rig, vfo_t vfo, freq_t *freq) if (freq_len == 3) { *freq *= 10000; } // 3-byte freq for ID5100 is in 10000Hz units so convert to Hz -if (rig->caps->rig_model == RIG_MODEL_IC905) { *freq *= 10; } +if (RIG_IS_IC905) { *freq *= 10; } if (vfo == RIG_VFO_MEM && civ_731_mode) { priv->civ_731_mode = 1; } @@ -2208,19 +2208,19 @@ int icom_set_mode_with_data(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t twidth; //struct icom_priv_data *priv = (struct icom_priv_data *) rig->state.priv; unsigned char dm_sub_cmd = - rig->caps->rig_model == RIG_MODEL_IC7200 ? 0x04 : S_MEM_DATA_MODE; - int filter_byte = rig->caps->rig_model == RIG_MODEL_IC7100 - || rig->caps->rig_model == RIG_MODEL_IC7200 - || rig->caps->rig_model == RIG_MODEL_IC7300 - || rig->caps->rig_model == RIG_MODEL_IC7600 - || rig->caps->rig_model == RIG_MODEL_IC7610 - || rig->caps->rig_model == RIG_MODEL_IC7700 - || rig->caps->rig_model == RIG_MODEL_IC7800 - || rig->caps->rig_model == RIG_MODEL_IC785x - || rig->caps->rig_model == RIG_MODEL_IC9100 - || rig->caps->rig_model == RIG_MODEL_IC9700 - || rig->caps->rig_model == RIG_MODEL_IC705 - || rig->caps->rig_model == RIG_MODEL_X6100; + RIG_IS_IC7200 ? 0x04 : S_MEM_DATA_MODE; + int filter_byte = RIG_IS_IC7100 + || RIG_IS_IC7200 + || RIG_IS_IC7300 + || RIG_IS_IC7600 + || RIG_IS_IC7610 + || RIG_IS_IC7700 + || RIG_IS_IC7800 + || RIG_IS_IC785X + || RIG_IS_IC9100 + || RIG_IS_IC9700 + || RIG_IS_IC705 + || RIG_IS_X6100; ENTERFUNC; @@ -2417,12 +2417,12 @@ int icom_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) /* IC-375, IC-731, IC-726, IC-735, IC-910, IC-7000 don't support passband data */ /* IC-726 & IC-475A/E also limited support - only on CW */ /* TODO: G4WJS CW wide/narrow are possible with above two radios */ - if (priv->civ_731_mode || rig->caps->rig_model == RIG_MODEL_OS456 - || rig->caps->rig_model == RIG_MODEL_IC375 - || rig->caps->rig_model == RIG_MODEL_IC726 - || rig->caps->rig_model == RIG_MODEL_IC475 - || rig->caps->rig_model == RIG_MODEL_IC910 - || rig->caps->rig_model == RIG_MODEL_IC7000) + if (priv->civ_731_mode || RIG_IS_OS456 + || RIG_IS_IC375 + || RIG_IS_IC726 + || RIG_IS_IC475 + || RIG_IS_IC910 + || RIG_IS_IC7000) { icmode_ext = -1; } @@ -2711,13 +2711,13 @@ int icom_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width) /* Likewise, don't ask if we happen to be an Omni VI Plus */ /* Likewise, don't ask if we happen to be an IC-R30 */ /* Likewise, don't ask if we happen to be an IC-706* */ - if ((rig->caps->rig_model == RIG_MODEL_IC910) || - (rig->caps->rig_model == RIG_MODEL_OMNIVIP) || - (rig->caps->rig_model == RIG_MODEL_IC706) || - (rig->caps->rig_model == RIG_MODEL_IC706MKII) || - (rig->caps->rig_model == RIG_MODEL_IC706MKIIG) || - (rig->caps->rig_model == RIG_MODEL_IC756) || - (rig->caps->rig_model == RIG_MODEL_ICR30)) + if ((RIG_IS_IC910) || + (RIG_IS_OMNIVIP) || + (RIG_IS_IC706) || + (RIG_IS_IC706MKII) || + (RIG_IS_IC706MKIIG) || + (RIG_IS_IC756) || + (RIG_IS_ICR30)) { RETURNFUNC2(RIG_OK); } @@ -2879,7 +2879,7 @@ int icom_set_vfo(RIG *rig, vfo_t vfo) if (rig->state.cache.split == RIG_SPLIT_ON && !rig->state.cache.satmode) { vfo = RIG_VFO_A; } // Seems the IC821H reverses Main/Sub when in satmode - if (rig->caps->rig_model == RIG_MODEL_IC821H && rig->state.cache.satmode) { vfo = RIG_VFO_SUB; } + if (RIG_IS_IC821H && rig->state.cache.satmode) { vfo = RIG_VFO_SUB; } } else if ((vfo == RIG_VFO_B || vfo == RIG_VFO_SUB) && VFO_HAS_DUAL) { @@ -2896,7 +2896,7 @@ int icom_set_vfo(RIG *rig, vfo_t vfo) else if (rig->state.cache.split == RIG_SPLIT_ON) { vfo = RIG_VFO_B; } // Seems the IC821H reverses Main/Sub when in satmode - if (rig->caps->rig_model == RIG_MODEL_IC821H && rig->state.cache.satmode) { vfo = RIG_VFO_MAIN; } + if (RIG_IS_IC821H && rig->state.cache.satmode) { vfo = RIG_VFO_MAIN; } } else if ((vfo == RIG_VFO_A || vfo == RIG_VFO_B) && !VFO_HAS_A_B && VFO_HAS_MAIN_SUB) @@ -3362,7 +3362,7 @@ int icom_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) } /* convert values to 0 .. 255 range */ - if (rig->caps->rig_model == RIG_MODEL_ICR75) + if (RIG_IS_ICR75) { switch (level) { @@ -3514,7 +3514,7 @@ int icom_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) lvl_sc = S_LVL_CWPITCH; /* use 'set mode' call for CWPITCH on IC-R75 */ - if (rig->caps->rig_model == RIG_MODEL_ICR75) + if (RIG_IS_ICR75) { lvl_cn = C_CTL_MEM; lvl_sc = S_MEM_MODE_SLCT; @@ -3644,7 +3644,7 @@ int icom_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) break; case RIG_LEVEL_VOXGAIN: - if (rig->caps->rig_model == RIG_MODEL_IC910) + if (RIG_IS_IC910) { /* IC-910H */ lvl_cn = C_CTL_MEM; @@ -3659,7 +3659,7 @@ int icom_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) break; case RIG_LEVEL_ANTIVOX: - if (rig->caps->rig_model == RIG_MODEL_IC910) + if (RIG_IS_IC910) { /* IC-910H */ lvl_cn = C_CTL_MEM; @@ -4021,7 +4021,7 @@ int icom_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) lvl_sc = S_LVL_CWPITCH; /* use 'set mode' call for CWPITCH on IC-R75 */ - if (rig->caps->rig_model == RIG_MODEL_ICR75) + if (RIG_IS_ICR75) { lvl_cn = C_CTL_MEM; lvl_sc = S_MEM_MODE_SLCT; @@ -4072,7 +4072,7 @@ int icom_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) break; case RIG_LEVEL_VOXGAIN: /* IC-910H */ - if (rig->caps->rig_model == RIG_MODEL_IC910) + if (RIG_IS_IC910) { /* IC-910H */ lvl_cn = C_CTL_MEM; @@ -4087,7 +4087,7 @@ int icom_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) break; case RIG_LEVEL_ANTIVOX: - if (rig->caps->rig_model == RIG_MODEL_IC910) + if (RIG_IS_IC910) { /* IC-910H */ lvl_cn = C_CTL_MEM; @@ -4519,7 +4519,7 @@ int icom_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) } /* convert values from 0 .. 255 range */ - if (rig->caps->rig_model == RIG_MODEL_ICR75) + if (RIG_IS_ICR75) { switch (level) { @@ -5571,7 +5571,7 @@ int icom_set_split_freq(RIG *rig, vfo_t vfo, freq_t tx_freq) // we can add rigs we know will never have 0x25 here to skip this check if ((satmode == 0) - && !(rig->caps->rig_model == RIG_MODEL_IC751) + && !(RIG_IS_IC751) ) // only worth trying if not in satmode { int cmd, subcmd, freq_len, retry_save; @@ -5761,7 +5761,7 @@ int icom_get_split_freq(RIG *rig, vfo_t vfo, freq_t *tx_freq) rig_strvfo(rig->state.current_vfo)); - if (rig->caps->rig_model == RIG_MODEL_IC910) + if (RIG_IS_IC910) { ptt_t ptt; rig_debug(RIG_DEBUG_VERBOSE, "%s: ic910#2\n", __func__); @@ -5818,8 +5818,8 @@ int icom_get_split_freq(RIG *rig, vfo_t vfo, freq_t *tx_freq) // when transmitting in split mode the split VFO is active subcmd = (rig->state.cache.split && rig->state.cache.ptt) ? 0x00 : 0x01; // get the unselected vfo - if (rig->state.rig_model == RIG_MODEL_IC7600) - { // the 7600 does it different 0=Main, 1=Sub -- maybe other Icoms will start doing this too + if (RIG_IS_IC7600 || RIG_IS_IC7610) + { // the 7600/7610 do it different 0=Main, 1=Sub -- maybe other Icoms will start doing this too subcmd = 0; if (vfo & RIG_VFO_B || vfo & RIG_VFO_SUB) subcmd = 1; } @@ -7200,9 +7200,9 @@ int icom_set_func(RIG *rig, vfo_t vfo, setting_t func, int status) break; case RIG_FUNC_DUAL_WATCH: - if ((rig->caps->rig_model == RIG_MODEL_IC9100) - || (rig->caps->rig_model == RIG_MODEL_IC9700) - || (rig->caps->rig_model == RIG_MODEL_ID5100)) + if ((RIG_IS_IC9100) + || (RIG_IS_IC9700) + || (RIG_IS_ID5100)) { fct_cn = C_CTL_FUNC; fct_sc = S_MEM_DUALMODE; @@ -7217,7 +7217,7 @@ int icom_set_func(RIG *rig, vfo_t vfo, setting_t func, int status) break; case RIG_FUNC_SATMODE: - if (rig->caps->rig_model == RIG_MODEL_IC910) + if (RIG_IS_IC910) { // Is the 910 the only one that uses this command? fct_cn = C_CTL_MEM; @@ -7442,8 +7442,8 @@ int icom_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status) break; case RIG_FUNC_DUAL_WATCH: - if ((rig->caps->rig_model == RIG_MODEL_IC9100) || - (rig->caps->rig_model == RIG_MODEL_IC9700)) + if ((RIG_IS_IC9100) || + (RIG_IS_IC9700)) { fct_cn = C_CTL_FUNC; fct_sc = S_MEM_DUALMODE; @@ -7457,7 +7457,7 @@ int icom_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status) break; case RIG_FUNC_SATMODE: - if (rig->caps->rig_model == RIG_MODEL_IC910) + if (RIG_IS_IC910) { // Is the 910 the only one that uses this command? fct_cn = C_CTL_MEM; @@ -8096,7 +8096,7 @@ int icom_set_powerstat(RIG *rig, powerstat_t status) retval = icom_transaction(rig, C_SET_PWR, pwr_sc, NULL, 0, ackbuf, &ack_len); - if (rig->caps->rig_model == RIG_MODEL_IC7300) + if (RIG_IS_IC7300) { rig_debug(RIG_DEBUG_VERBOSE, "%s: waiting 5 seconds for rig to wake up\n", __func__); @@ -8215,7 +8215,7 @@ int icom_get_powerstat(RIG *rig, powerstat_t *status) *status = RIG_POWER_OFF; // default return until proven otherwise /* r75 has no way to get power status, so fake it */ - if (rig->caps->rig_model == RIG_MODEL_ICR75) + if (RIG_IS_ICR75) { /* getting the mode doesn't work if a memory is blank */ /* so use one of the more innocuous 'set mode' commands instead */ @@ -8234,14 +8234,14 @@ int icom_get_powerstat(RIG *rig, powerstat_t *status) RIG_POWER_ON : RIG_POWER_OFF; } - if (rig->caps->rig_model == RIG_MODEL_IC2730 - || rig->caps->rig_model == RIG_MODEL_IC7100 - || rig->caps->rig_model == RIG_MODEL_IC7300 - || rig->caps->rig_model == RIG_MODEL_IC7600 - || rig->caps->rig_model == RIG_MODEL_IC7610 - || rig->caps->rig_model == RIG_MODEL_IC7700 - || rig->caps->rig_model == RIG_MODEL_IC7800 - || rig->caps->rig_model == RIG_MODEL_IC905) + if (RIG_IS_IC2730 + || RIG_IS_IC7100 + || RIG_IS_IC7300 + || RIG_IS_IC7600 + || RIG_IS_IC7610 + || RIG_IS_IC7700 + || RIG_IS_IC7800 + || RIG_IS_IC905) { freq_t freq; int retrysave = rig->caps->retry; @@ -8512,7 +8512,7 @@ int icom_get_ant(RIG *rig, vfo_t vfo, ant_t ant, value_t *option, { retval = icom_transaction(rig, C_CTL_ANT, -1, NULL, 0, ackbuf, &ack_len); } - else if (rig->caps->rig_model == RIG_MODEL_IC785x) + else if (RIG_IS_IC785X) { unsigned char buf[2]; buf[0] = 0x03; diff --git a/rigs/icom/icom.h b/rigs/icom/icom.h index a9e89f148..e5a00cf20 100644 --- a/rigs/icom/icom.h +++ b/rigs/icom/icom.h @@ -509,4 +509,88 @@ extern const struct rig_caps x5105_caps; extern const struct rig_caps icr8600_caps; extern const struct rig_caps icr30_caps; +#define RIG_IS_IC1271 (rig->state.rig_model == RIG_MODEL_IC1271) +#define RIG_IS_IC1275 (rig->state.rig_model == RIG_MODEL_IC1275) +#define RIG_IS_IC271 (rig->state.rig_model == RIG_MODEL_IC271) +#define RIG_IS_IC2730 (rig->state.rig_model == RIG_MODEL_IC2730) +#define RIG_IS_IC275 (rig->state.rig_model == RIG_MODEL_IC275) +#define RIG_IS_IC375 (rig->state.rig_model == RIG_MODEL_IC375) +#define RIG_IS_IC471 (rig->state.rig_model == RIG_MODEL_IC471) +#define RIG_IS_IC475 (rig->state.rig_model == RIG_MODEL_IC475) +#define RIG_IS_IC575 (rig->state.rig_model == RIG_MODEL_IC575) +#define RIG_IS_IC7000 (rig->state.rig_model == RIG_MODEL_IC7000) +#define RIG_IS_IC703 (rig->state.rig_model == RIG_MODEL_IC703) +#define RIG_IS_IC705 (rig->state.rig_model == RIG_MODEL_IC705) +#define RIG_IS_IC706 (rig->state.rig_model == RIG_MODEL_IC706) +#define RIG_IS_IC706MKII (rig->state.rig_model == RIG_MODEL_IC706MKII) +#define RIG_IS_IC706MKIIG (rig->state.rig_model == RIG_MODEL_IC706MKIIG) +#define RIG_IS_IC707 (rig->state.rig_model == RIG_MODEL_IC707) +#define RIG_IS_IC7100 (rig->state.rig_model == RIG_MODEL_IC7100) +#define RIG_IS_IC718 (rig->state.rig_model == RIG_MODEL_IC718) +#define RIG_IS_IC7200 (rig->state.rig_model == RIG_MODEL_IC7200) +#define RIG_IS_IC725 (rig->state.rig_model == RIG_MODEL_IC725) +#define RIG_IS_IC726 (rig->state.rig_model == RIG_MODEL_IC726) +#define RIG_IS_IC728 (rig->state.rig_model == RIG_MODEL_IC728) +#define RIG_IS_IC729 (rig->state.rig_model == RIG_MODEL_IC729) +#define RIG_IS_IC7300 (rig->state.rig_model == RIG_MODEL_IC7300) +#define RIG_IS_IC731 (rig->state.rig_model == RIG_MODEL_IC731) +#define RIG_IS_IC735 (rig->state.rig_model == RIG_MODEL_IC735) +#define RIG_IS_IC736 (rig->state.rig_model == RIG_MODEL_IC736) +#define RIG_IS_IC737 (rig->state.rig_model == RIG_MODEL_IC737) +#define RIG_IS_IC738 (rig->state.rig_model == RIG_MODEL_IC738) +#define RIG_IS_IC7410 (rig->state.rig_model == RIG_MODEL_IC7410) +#define RIG_IS_IC746 (rig->state.rig_model == RIG_MODEL_IC746) +#define RIG_IS_IC746PRO (rig->state.rig_model == RIG_MODEL_IC746PRO) +#define RIG_IS_IC751 (rig->state.rig_model == RIG_MODEL_IC751) +#define RIG_IS_IC751A (rig->state.rig_model == RIG_MODEL_IC751A) +#define RIG_IS_IC756 (rig->state.rig_model == RIG_MODEL_IC756) +#define RIG_IS_IC756PRO (rig->state.rig_model == RIG_MODEL_IC756PRO) +#define RIG_IS_IC756PROII (rig->state.rig_model == RIG_MODEL_IC756PROII) +#define RIG_IS_IC756PROIII (rig->state.rig_model == RIG_MODEL_IC756PROIII) +#define RIG_IS_IC7600 (rig->state.rig_model == RIG_MODEL_IC7600) +#define RIG_IS_IC761 (rig->state.rig_model == RIG_MODEL_IC761) +#define RIG_IS_IC7610 (rig->state.rig_model == RIG_MODEL_IC7610) +#define RIG_IS_IC765 (rig->state.rig_model == RIG_MODEL_IC765) +#define RIG_IS_IC7700 (rig->state.rig_model == RIG_MODEL_IC7700) +#define RIG_IS_IC775 (rig->state.rig_model == RIG_MODEL_IC775) +#define RIG_IS_IC78 (rig->state.rig_model == RIG_MODEL_IC78) +#define RIG_IS_IC7800 (rig->state.rig_model == RIG_MODEL_IC7800) +#define RIG_IS_IC781 (rig->state.rig_model == RIG_MODEL_IC781) +#define RIG_IS_IC785X (rig->state.rig_model == RIG_MODEL_IC785x) +#define RIG_IS_IC820 (rig->state.rig_model == RIG_MODEL_IC820) +#define RIG_IS_IC821 (rig->state.rig_model == RIG_MODEL_IC821) +#define RIG_IS_IC821H (rig->state.rig_model == RIG_MODEL_IC821H) +#define RIG_IS_IC905 (rig->state.rig_model == RIG_MODEL_IC905) +#define RIG_IS_IC910 (rig->state.rig_model == RIG_MODEL_IC910) +#define RIG_IS_IC9100 (rig->state.rig_model == RIG_MODEL_IC9100) +#define RIG_IS_IC92D (rig->state.rig_model == RIG_MODEL_IC92D) +#define RIG_IS_IC970 (rig->state.rig_model == RIG_MODEL_IC970) +#define RIG_IS_IC9700 (rig->state.rig_model == RIG_MODEL_IC9700) +#define RIG_IS_IC8101 (rig->state.rig_model == RIG_MODEL_ICF8101) +#define RIG_IS_ICID1 (rig->state.rig_model == RIG_MODEL_ICID1) +#define RIG_IS_ICM700PRO (rig->state.rig_model == RIG_MODEL_IC_M700PRO) +#define RIG_IS_ICM710 (rig->state.rig_model == RIG_MODEL_IC_M710) +#define RIG_IS_ICM802 (rig->state.rig_model == RIG_MODEL_IC_M802) +#define RIG_IS_ICM803 (rig->state.rig_model == RIG_MODEL_IC_M803) +#define RIG_IS_ICR10 (rig->state.rig_model == RIG_MODEL_ICR10) +#define RIG_IS_ICR20 (rig->state.rig_model == RIG_MODEL_ICR20) +#define RIG_IS_ICR30 (rig->state.rig_model == RIG_MODEL_ICR30) +#define RIG_IS_ICR6 (rig->state.rig_model == RIG_MODEL_ICR6) +#define RIG_IS_ICR7000 (rig->state.rig_model == RIG_MODEL_ICR7000) +#define RIG_IS_ICR71 (rig->state.rig_model == RIG_MODEL_ICR71) +#define RIG_IS_ICR7100 (rig->state.rig_model == RIG_MODEL_ICR7100) +#define RIG_IS_ICR72 (rig->state.rig_model == RIG_MODEL_ICR72) +#define RIG_IS_ICR75 (rig->state.rig_model == RIG_MODEL_ICR75) +#define RIG_IS_ICR8500 (rig->state.rig_model == RIG_MODEL_ICR8500) +#define RIG_IS_ICR8600 (rig->state.rig_model == RIG_MODEL_ICR8600) +#define RIG_IS_ICR9000 (rig->state.rig_model == RIG_MODEL_ICR9000) +#define RIG_IS_ICR9500 (rig->state.rig_model == RIG_MODEL_ICR9500) +#define RIG_IS_ICRX7 (rig->state.rig_model == RIG_MODEL_ICRX7) +#define RIG_IS_ID5100 (rig->state.rig_model == RIG_MODEL_ID5100) +#define RIG_IS_OMNIVIP (rig->state.rig_model == RIG_MODEL_OMNIVIP) +#define RIG_IS_OS456 (rig->state.rig_model == RIG_MODEL_OS456) +#define RIG_IS_X5105 (rig->state.rig_model == RIG_MODEL_X5105) +#define RIG_IS_X6100 (rig->state.rig_model == RIG_MODEL_X6100) + + #endif /* _ICOM_H */ commit c0c70b014693f7d41703cb6087416b96c6935a90 Author: Mike Black W9MDB <mdb...@ya...> Date: Tue Jun 27 08:54:43 2023 -0500 Fix IC-7600 set/get freq to use new 0x25/x26 capability if available https://github.com/Hamlib/Hamlib/issues/1319 diff --git a/rigs/icom/ic7600.c b/rigs/icom/ic7600.c index 9b9e84fdd..f56806fe1 100644 --- a/rigs/icom/ic7600.c +++ b/rigs/icom/ic7600.c @@ -263,7 +263,7 @@ int ic7600_get_clock(RIG *rig, int *year, int *month, int *day, int *hour, return retval; } -const struct rig_caps ic7600_caps = +struct rig_caps ic7600_caps = { RIG_MODEL(RIG_MODEL_IC7600), .model_name = "IC-7600", diff --git a/rigs/icom/icom.c b/rigs/icom/icom.c index 3abc0f61f..9142a48bf 100644 --- a/rigs/icom/icom.c +++ b/rigs/icom/icom.c @@ -1373,6 +1373,11 @@ int icom_set_freq(RIG *rig, vfo_t vfo, freq_t freq) HAMLIB_TRACE; subcmd = 0x01; // get unselected VFO } + if (rig->state.rig_model == RIG_MODEL_IC7600) + { // the 7600 does it different 0=Main, 1=Sub -- maybe other Icoms will start doing this too + subcmd = 0; + if (vfo & RIG_VFO_B || vfo & RIG_VFO_SUB) subcmd = 1; + } cmd = 0x25; retval = icom_transaction(rig, cmd, subcmd, freqbuf, freq_len, ackbuf, @@ -1659,6 +1664,16 @@ int icom_get_freq(RIG *rig, vfo_t vfo, freq_t *freq) subcmd2 = 0x01; // get unselected VFO } + // Rigs like IC-7600 new firmware has 0x25 and 0x26 + // So if this succeeds we'll assume all such rigs are targetable freq & mode + rig->caps->targetable_vfo = rig->state.targetable_vfo |= RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE; + rig_debug(RIG_DEBUG_VERBOSE, "%s: TARGETABLE_FREQ and TARGETABLE_MODE enabled\n", __func__); + if (rig->state.rig_model == RIG_MODEL_IC7600) + { // the 7600 does it different 0=Main, 1=Sub -- maybe other Icoms will start doing this too + subcmd2 = 0; + if (vfo & RIG_VFO_B || vfo & RIG_VFO_SUB) subcmd2 = 1; + } + retval = icom_transaction(rig, cmd2, subcmd2, NULL, 0, freqbuf, &freq_len); if (retval == RIG_OK) @@ -5803,6 +5818,11 @@ int icom_get_split_freq(RIG *rig, vfo_t vfo, freq_t *tx_freq) // when transmitting in split mode the split VFO is active subcmd = (rig->state.cache.split && rig->state.cache.ptt) ? 0x00 : 0x01; // get the unselected vfo + if (rig->state.rig_model == RIG_MODEL_IC7600) + { // the 7600 does it different 0=Main, 1=Sub -- maybe other Icoms will start doing this too + subcmd = 0; + if (vfo & RIG_VFO_B || vfo & RIG_VFO_SUB) subcmd = 1; + } retval = icom_transaction(rig, cmd, subcmd, NULL, 0, ackbuf, &ack_len); diff --git a/rigs/icom/icom.h b/rigs/icom/icom.h index 6c968d0a0..a9e89f148 100644 --- a/rigs/icom/icom.h +++ b/rigs/icom/icom.h @@ -35,7 +35,7 @@ #include <sys/time.h> #endif -#define BACKEND_VER "20230620" +#define BACKEND_VER "20230627" #define ICOM_IS_ID31 rig_is_model(rig, RIG_MODEL_ID31) #define ICOM_IS_ID51 rig_is_model(rig, RIG_MODEL_ID51) @@ -443,7 +443,7 @@ extern const struct rig_caps ic756pro_caps; extern const struct rig_caps ic756pro2_caps; extern const struct rig_caps ic756pro3_caps; extern const struct rig_caps ic751_caps; -extern const struct rig_caps ic7600_caps; +extern struct rig_caps ic7600_caps; // need to modify targetable_vfo depending on response to 0x25 cmd extern const struct rig_caps ic7610_caps; extern const struct rig_caps ic761_caps; extern const struct rig_caps ic765_caps; diff --git a/simulators/simicom7600.c b/simulators/simicom7600.c new file mode 100644 index 000000000..13301cdf4 --- /dev/null +++ b/simulators/simicom7600.c @@ -0,0 +1,635 @@ +// simicom will show the pts port to use for rigctl on Unix +// using virtual serial ports on Windows is to be developed yet +// Needs a lot of improvement to work on all Icoms +// gcc -g -Wall -o simicom simicom.c -lhamlib +// On mingw in the hamlib src directory +// gcc -static -I../include -g -Wall -o simicom simicom.c -L../../build/src/.libs -lhamlib -lwsock32 -lws2_32 +#define _XOPEN_SOURCE 700 +// since w... [truncated message content] |