[Hamlib-commits] Hamlib -- Ham radio control libraries branch master updated. 9c02b2ebc2df7a2ac5580
Library to control radio transceivers and receivers
Brought to you by:
n0nb
From: Nate B. <n0...@us...> - 2022-10-27 11:38:46
|
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 9c02b2ebc2df7a2ac55806e721ec1a95025f75b5 (commit) via b63460f05f74972c68a806a0f16e4979efcd0a0d (commit) via 8c274456d43e34b1981ee01e2335e4dde8836793 (commit) via e3ce4a35a4168a0352ba2b31f72610e806bc2165 (commit) via d3d21983f05f8c22f071f5ae0fe7613059e4ecb4 (commit) via bbeb87eb0572067c2a9bf14848070d82a60fc4a0 (commit) via b6743177910773c3790c0183f3ab307179094093 (commit) via 04a1a8def170ede47bcdaed759904f684beca45f (commit) via 399153df9bba1e6770bdc56d1f0eb41adc49c205 (commit) via 0b49f569ba0379710dbed571642d084a2aabcb0b (commit) via e9325c9c7b1453f7c60796459440e74b768dae70 (commit) via e616f282818a11fd07b9d8d89b45491c0067ede8 (commit) via 411925a372aadd073792986de85d53b2d338cb9e (commit) via b46b930770ad4b8e3be0e019f0c6d0892eef4905 (commit) via e6cd452c9d3804486b8e757512a05132a52cbfe7 (commit) via 04bc5cc0895484cef60496d2b6f4096b1ab6dcb6 (commit) via 791a5e3f5748f9eba33260354ca2a67279caca7d (commit) via 436365f6a496db6e0b04e1de997637fc54c55682 (commit) via ec4aea81b2b25555e7c76be28e7f781fceeab59f (commit) via e6d0403cd2d81cf03643776c47cebd8dc84810dc (commit) via dde5d752fce4521d6daabe6253caf702bf9fff86 (commit) via b3d0a5a350bef1dbdb9908bc5558efc2bc64cc45 (commit) via eb9efa720052360eb8868dd25cf26966ff977169 (commit) via 032d37626e961a67f70baf697ddf5ff22059c9b2 (commit) via 8adfd5e351e88f217cccbd93a45b50226b5cf4d0 (commit) via 4dbce1a0aa57e1712d6e0166b428ecdd59b44f3c (commit) via 63805eb427890535da97447544bc7c2b56ecc433 (commit) via 745554683433b40a43e27e08bd171c5254fb9c2c (commit) via 48241f52d0411ea2d5128ebcb65dcc23b98f9fe2 (commit) via e7647de001ed7f53d8d00e7379a76d3ca024219f (commit) via 0b68de7b6569110ebf85dbd0b9fe7dea4547f904 (commit) via 467964aba0106ef3e43e3b436373db8c1f32b2ea (commit) via 6bd5ab89b66d9687bcf37297aee064e3c84bcd9f (commit) via c169ec59dd70322c8e0347fbf205462b2416f493 (commit) via a033b66f9c5e164ee7d7c77809e631fee71408c8 (commit) via 66351df5549266e3d2756632a096ef65a1ae52c2 (commit) via e28e019179530538efee2274a31b4f70546f812d (commit) via 67b933ddb5dacc4804b32a100d110c9710a6b69f (commit) via 9ffd0a4ba5e557db170b2aa61c754f185ec72a3e (commit) via 7c2bdbb64fc2aba9c8cc9ef514db3210b04a7da1 (commit) via 9b98ea11eb11460dcbd5befeaaa3f9e821e68826 (commit) via 57a7e656c29e34a261ed2234bbdb5a6e3c563451 (commit) via b1d132dd276c5b492239f9459cdae37161bcd7db (commit) via 4985d9ab26fae3a492428ea1349847a397a33a17 (commit) via 7db23d549f16212df0c8a3f0e01eeb693ad83335 (commit) via 8c4c906efe99597c8dc281f2e434d3b6291bd6f2 (commit) via e7262e23c8250b8606b0da6dfd1cb48df6dfe996 (commit) via f58ca95c9c265fe4785066d0143cf0bfb3f0df31 (commit) via 098d1d8dbb2f9f3042380bfee117fb5e357e1e8c (commit) via 224ccc7839c0f2ce4535b38ce0f81cf7a3f67b5c (commit) via 66a823bb6b9b6c27bc61924cbd285d937640a977 (commit) via 7da1a1f6a1ebc2c44b9a9834b0a8d6b45643f8de (commit) via 9cb511af00f00e2ab42d0a8c731492f615a207c7 (commit) via f5f97b35db7ec607bc6205599c0ad9524119e561 (commit) via 400758136357cbfeeb33f665d0b0f6f6c14ce7e2 (commit) via 6c746c310bc85b3629220a6182aeb756b52b4405 (commit) via 86245cffa6bc831df2a5555a6c1240db5764e4ee (commit) via 0cd6f1f7610d353d4fdb2e8e0ac02e39364059f2 (commit) via 81f489b969d39d5460efe36b16fe3290e56d6186 (commit) via 1d0d73340547f7c0f49a5dda34fc7443ac7c647c (commit) via 571f59e696f474ee3cffe35a8a3a74e20d68e055 (commit) via d3824aa7abcfa1856097bc31777198d3e50241e7 (commit) via 927b2d858ab2710301c26c04a40316c6bc4a6e8d (commit) via 9410e7f66f2a6b789dc5fa0dc2534837688477c4 (commit) via e2616b991a6cc6fa22c6f0e77fd437aa5aa17bfd (commit) via e630fc818005f551e4fccf522a0fd71d73b42d54 (commit) via 5701e73e1e38f3c8818b26044f7734f109d164dc (commit) via 69a39dfa2e335d1208a4cf692690e61f9dd33ba9 (commit) via 5e9b853d0791cae2d9bbb9e364052134866de843 (commit) via 7e51932a9ec55d75f74768c27fb40e9819170066 (commit) via aa0937e6c150c3cea599b462732c66a9234ddcb5 (commit) via 884190886c4c2763aeeb23b2b5481ef0ff389efd (commit) via 1aed27c71a11bbd7f2c89b88bdcf2b1219383646 (commit) via b3d69d221e35e860503ff7dc83658a6aa1a9b1a7 (commit) via 4c2a68c94bc4451293ea05ce3f071845b202c783 (commit) via 825e3eefa814fea6d597d3eb8547c40f2a5542ce (commit) via f0fdf97a9b8d1c2a87720bf9930c48f43d623a5e (commit) via 7c071b84b69f1fb0436af458db9359b9e42a696a (commit) from 6f967a68d5a6c0fda3e0d4092dde54eb6ffd4c32 (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 9c02b2ebc2df7a2ac55806e721ec1a95025f75b5 Author: Mike Black W9MDB <mdb...@ya...> Date: Tue Oct 25 23:26:16 2022 -0500 Fix Yaesu DT command and add 2 or 4 digit timezone option https://github.com/Hamlib/Hamlib/issues/1132 diff --git a/doc/man1/rigctl.1 b/doc/man1/rigctl.1 index d04b1f46..b80a640c 100644 --- a/doc/man1/rigctl.1 +++ b/doc/man1/rigctl.1 @@ -1158,13 +1158,16 @@ Sets rig clock -- note that some rigs do not handle seconds or milliseconds. If you try to set sec/msec and rig does not support it you will get a debug warning message. Format is ISO8601, .EX -Formats accepted -YYYY-MM-DDTHH:MM:SS.SSS+ZZ (where +ZZ is either -/+ UTC offset) +Formats accepted allow for 2-digit or 4-digit time zone +YYYY-MM-DDTHH:MM:SS.SSS+ZZ (where +ZZ is either -/+ UTC offset HH) +YYYY-MM-DDTHH:MM:SS.SSS+ZZZZ (where +ZZZZ is either -/+ UTC offset HHMM) YYYY-MM-DDTHH:MM:SS+ZZ +YYYY-MM-DDTHH:MM:SS+ZZZZ YYYY-MM-DDTHH:MM+ZZ +YYYY-MM-DDTHH:MM+ZZZZ YYYY-MM-DD (sets date only) Note: Icom rigs expect you to set local time and the hours off to UTC. -So...4PM EST example would be 2021-12-01T16:00:00+05 +So...4PM EST example would be 2021-12-01T16:00:00+0500 But...if you want to display GMT you must set the clock for GMT with zero UTC offset. Hopefully Icom will allow displaying either clock in the future diff --git a/rigs/yaesu/newcat.c b/rigs/yaesu/newcat.c index 1aee1fdc..d10f7605 100644 --- a/rigs/yaesu/newcat.c +++ b/rigs/yaesu/newcat.c @@ -263,9 +263,9 @@ static const yaesu_newcat_commands_t valid_commands[] = {"CT", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, {"DA", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, {"DN", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"DT", FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, TRUE, TRUE, TRUE, TRUE }, {"DP", FALSE, TRUE, FALSE, FALSE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE }, {"DS", TRUE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE }, + {"DT", FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, TRUE, TRUE, TRUE, TRUE }, {"ED", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, {"EK", FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE }, {"EM", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, FALSE, TRUE }, @@ -11557,6 +11557,8 @@ int newcat_set_clock(RIG *rig, int year, int month, int day, int hour, int min, RETURNFUNC2(err); } + if (hour < 0) RETURNFUNC2(RIG_OK); + SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "DT1%02d%02d%02d%c", hour, min, sec, cat_term); diff --git a/rigs/yaesu/newcat.h b/rigs/yaesu/newcat.h index 8b52fa79..76547210 100644 --- a/rigs/yaesu/newcat.h +++ b/rigs/yaesu/newcat.h @@ -50,7 +50,7 @@ typedef char ncboolean; /* shared function version */ -#define NEWCAT_VER "20221021" +#define NEWCAT_VER "20221025" /* Hopefully large enough for future use, 128 chars plus '\0' */ #define NEWCAT_DATA_LEN 129 diff --git a/simulators/simyaesu.c b/simulators/simyaesu.c index f332f459..c5a31363 100644 --- a/simulators/simyaesu.c +++ b/simulators/simyaesu.c @@ -23,6 +23,8 @@ int roofing_filter_main = 1; int roofing_filter_sub = 6; int width_main = 0; int width_sub = 0; +int ex039 = 0; +int lk = 0; // ID 0310 == 310, Must drop leading zero typedef enum nc_rigid_e @@ -401,6 +403,40 @@ int main(int argc, char *argv[]) SNPRINTF(buf, sizeof(buf), "SH%c%02d;", buf[2], buf[2] == 0 ? width_main : width_sub); } + else if (strcmp(buf, "EX039;") == 0) + { + SNPRINTF(buf, sizeof(buf), "EX039%d;", ex039); + n = write(fd, buf, strlen(buf)); + } + else if (strncmp(buf, "EX039", 3) == 0) + { + sscanf(buf, "EX039%d", &ex039); + } + else if (strcmp(buf, "LK;") == 0) + { + SNPRINTF(buf, sizeof(buf), "LK%d;", lk); + n = write(fd, buf, strlen(buf)); + } + else if (strncmp(buf, "LK", 3) == 0) + { + sscanf(buf, "LK%d", &lk); + } + else if (strncmp(buf, "DT0;", 4) == 0) + { + SNPRINTF(buf, sizeof(buf), "DT020221022;"); + n = write(fd, buf, strlen(buf)); + } + else if (strncmp(buf, "DT1;", 4) == 0) + { + SNPRINTF(buf, sizeof(buf), "DT1222100;"); + n = write(fd, buf, strlen(buf)); + } + else if (strncmp(buf, "DT2;", 4) == 0) + { + SNPRINTF(buf, sizeof(buf), "DT2+0500;"); + n = write(fd, buf, strlen(buf)); + } + else if (strlen(buf) > 0) { diff --git a/tests/rigctl_parse.c b/tests/rigctl_parse.c index c52c5be6..99fb0702 100644 --- a/tests/rigctl_parse.c +++ b/tests/rigctl_parse.c @@ -5172,9 +5172,9 @@ declare_proto_rig(get_cache) /* '0xf8' */ declare_proto_rig(set_clock) { - int year, mon, day, hour = -1, min = -1, sec = -1; - double msec; - int utc_offset = 0; + int year, mon, day, hour = -1, min = -1, sec = 0; + double msec=-1; + int utc_offset = 0; int n; char timebuf[64]; @@ -5196,22 +5196,35 @@ declare_proto_rig(set_clock) &hour, &min, &sec, &msec, &utc_offset); } - else - { + else if (arg1[16] == '+' || arg1[16] == '-') + { // YYYY-MM-DDTHH:MM+ZZ + n = sscanf(arg1, "%04d-%02d-%02dT%02d:%02d%d", &year, &mon, &day, &hour, + &min, &utc_offset); + } + else if (arg1[19] == '+' || arg1[19] == '-') + { // YYYY-MM-DDTHH:MM:SS+ZZ + n = sscanf(arg1, "%04d-%02d-%02dT%02d:%02d:%02d%d", &year, &mon, &day, &hour, + &min, &sec, &utc_offset); + } + else if (arg1[23] == '+' || arg1[23] == '-') + { // YYYY-MM-DDTHH:MM:SS.SSS+ZZ n = sscanf(arg1, "%04d-%02d-%02dT%02d:%02d:%02d%lf%d", &year, &mon, &day, &hour, &min, &sec, &msec, &utc_offset); } + else + { + rig_debug(RIG_DEBUG_ERR, "%s: '%s' not valid time format\n", __func__, arg1); + RETURNFUNC2(-RIG_EINVAL); + } rig_debug(RIG_DEBUG_VERBOSE, "%s: n=%d, %04d-%02d-%02dT%02d:%02d:%02d.%0.3f%s%02d\n", __func__, n, year, mon, day, hour, min, sec, msec, utc_offset >= 0 ? "+" : "-", (unsigned)abs(utc_offset)); - rig_debug(RIG_DEBUG_ERR, "%s: utc_offset=%d\n", __func__, utc_offset); - if (utc_offset < 24) { utc_offset *= 100; } // allow for minutes offset too - rig_debug(RIG_DEBUG_ERR, "%s: utc_offset=%d\n", __func__, utc_offset); + rig_debug(RIG_DEBUG_VERBOSE, "%s: utc_offset=%d\n", __func__, utc_offset); RETURNFUNC(rig_set_clock(rig, year, mon, day, hour, min, sec, msec, utc_offset)); commit b63460f05f74972c68a806a0f16e4979efcd0a0d Author: Mike Black W9MDB <mdb...@ya...> Date: Tue Oct 25 23:23:13 2022 -0500 Future code information in iofunc.c diff --git a/src/iofunc.c b/src/iofunc.c index cdaa662f..dc0c1937 100644 --- a/src/iofunc.c +++ b/src/iofunc.c @@ -1339,10 +1339,14 @@ static int read_string_generic(hamlib_port_t *p, */ do { - // The ioctl works on Linux but not mingw -- enable in 4.6 for non-mingw builds and see if it breaks anything - //int avail=0; - //ioctl(p->fd, FIONREAD, &avail); +#if 0 +#ifndef __MINGW32__ + // The ioctl works on Linux but not mingw + int avail=0; + ioctl(p->fd, FIONREAD, &avail); //rig_debug(RIG_DEBUG_ERR, "xs: avail=%d expected_len=%d, minlen=%d, direct=%d\n", __func__, avail, expected_len, minlen, direct); +#endif +#endif rd_count = port_read_generic(p, &rxbuffer[total_count], expected_len == 1 ? 1 : minlen, direct); rig_debug(RIG_DEBUG_VERBOSE, "%s: read %d bytes\n", __func__, (int)rd_count); commit 8c274456d43e34b1981ee01e2335e4dde8836793 Author: Mike Black W9MDB <mdb...@ya...> Date: Fri Oct 21 22:59:49 2022 -0500 Update rigctl.1 Update simft897.c diff --git a/doc/man1/rigctl.1 b/doc/man1/rigctl.1 index 0487f4a7..d04b1f46 100644 --- a/doc/man1/rigctl.1 +++ b/doc/man1/rigctl.1 @@ -947,13 +947,18 @@ radio backend. Perform a .RI \(aq "Scan Fct" \(aq on a -.RI \(aq "Scan Channel" \(aq. +.RI \(aq "Scan Option" \(aq. .IP Scan Function is a token: \(oqSTOP\(cq, \(oqMEM\(cq, \(oqSLCT\(cq, \(oqPRIO\(cq, \(oqPROG\(cq, \(oqDELTA\(cq, \(oqVFO\(cq, \(oqPLT\(cq. .IP -.\" FIXME: What is a scan channel value? -Scan Channel is an integer (maybe?). +Scan Option is an integer. +.IP +Scan Option for Yaesu rigs 0=STOP, 1=UP, 2=DOWN. +.IP +Scan Option for Icom rigs is a channel number to program with G otherwise not used. +.IP +Scan Option for Kenwood rigs is not used. .IP .BR Note : Passing a \(oq?\(cq (query) as the first argument instead of a Scan Fct token diff --git a/simulators/simft897.c b/simulators/simft897.c index 6367847c..f86fe184 100644 --- a/simulators/simft897.c +++ b/simulators/simft897.c @@ -144,7 +144,10 @@ again: case 0x03: printf("READ RX STATUS\n"); - buf[0] = buf[1] = buf[2] = buf[3] = 0; + buf[0] = 0x01; + buf[1] = 0x40; + buf[2] = 0x74; + buf[3] = 0x00; buf[4] = 0x03; n = write(fd, buf, 5); break; commit e3ce4a35a4168a0352ba2b31f72610e806bc2165 Author: Mike Black W9MDB <mdb...@ya...> Date: Fri Oct 21 22:54:20 2022 -0500 Add RIG_SCAN_STOP to newcat_scan diff --git a/rigs/yaesu/newcat.c b/rigs/yaesu/newcat.c index 2bf46758..1aee1fdc 100644 --- a/rigs/yaesu/newcat.c +++ b/rigs/yaesu/newcat.c @@ -6895,8 +6895,11 @@ int newcat_scan(RIG *rig, vfo_t vfo, scan_t scan, int ch) int retval; ENTERFUNC; - if (scan != RIG_SCAN_VFO) RETURNFUNC2(-RIG_EINVAL); - SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "SC%d%c", ch, cat_term); + + if (scan != RIG_SCAN_VFO) { RETURNFUNC2(-RIG_EINVAL); } + + SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "SC%d%c", + scan == RIG_SCAN_STOP ? 0 : ch, cat_term); if (RIG_OK != (retval = newcat_set_cmd(rig))) { commit d3d21983f05f8c22f071f5ae0fe7613059e4ecb4 Author: Mike Black W9MDB <mdb...@ya...> Date: Fri Oct 21 22:41:29 2022 -0500 Fix newcat_scan diff --git a/rigs/yaesu/newcat.c b/rigs/yaesu/newcat.c index f7652eb9..2bf46758 100644 --- a/rigs/yaesu/newcat.c +++ b/rigs/yaesu/newcat.c @@ -6895,7 +6895,8 @@ int newcat_scan(RIG *rig, vfo_t vfo, scan_t scan, int ch) int retval; ENTERFUNC; - SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "SC%d%c", scan, cat_term); + if (scan != RIG_SCAN_VFO) RETURNFUNC2(-RIG_EINVAL); + SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "SC%d%c", ch, cat_term); if (RIG_OK != (retval = newcat_set_cmd(rig))) { commit bbeb87eb0572067c2a9bf14848070d82a60fc4a0 Author: Mike Black W9MDB <mdb...@ya...> Date: Fri Oct 21 22:27:58 2022 -0500 Add newcat_scan for Yaesu rigs diff --git a/rigs/yaesu/ft1200.c b/rigs/yaesu/ft1200.c index 9ba50b22..88882397 100644 --- a/rigs/yaesu/ft1200.c +++ b/rigs/yaesu/ft1200.c @@ -190,6 +190,7 @@ const struct rig_caps ftdx1200_caps = .agc_level_count = 5, .agc_levels = { RIG_AGC_OFF, RIG_AGC_FAST, RIG_AGC_MEDIUM, RIG_AGC_SLOW, RIG_AGC_AUTO }, .vfo_ops = FTDX1200_VFO_OPS, + .scan_ops = RIG_SCAN_VFO, .targetable_vfo = RIG_TARGETABLE_FREQ, .transceive = RIG_TRN_OFF, /* May enable later as the 1200 has an Auto Info command */ .bank_qty = 0, @@ -323,5 +324,6 @@ const struct rig_caps ftdx1200_caps = .wait_morse = rig_wait_morse, .set_clock = newcat_set_clock, .get_clock = newcat_get_clock, + .scan = newcat_scan, .hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS }; diff --git a/rigs/yaesu/ft2000.c b/rigs/yaesu/ft2000.c index 268586b5..c73a254e 100644 --- a/rigs/yaesu/ft2000.c +++ b/rigs/yaesu/ft2000.c @@ -172,6 +172,7 @@ const struct rig_caps ft2000_caps = .max_xit = Hz(9999), .max_ifshift = Hz(1000), .vfo_ops = FT2000_VFO_OPS, + .scan_ops = RIG_SCAN_VFO, .targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE, .transceive = RIG_TRN_OFF, /* May enable later as the 2000 has an Auto Info command */ .bank_qty = 0, @@ -308,5 +309,6 @@ const struct rig_caps ft2000_caps = .get_ext_level = newcat_get_ext_level, .send_morse = newcat_send_morse, .wait_morse = rig_wait_morse, + .scan = newcat_scan, .hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS }; diff --git a/rigs/yaesu/ft3000.c b/rigs/yaesu/ft3000.c index 88700167..34ce1256 100644 --- a/rigs/yaesu/ft3000.c +++ b/rigs/yaesu/ft3000.c @@ -285,6 +285,7 @@ const struct rig_caps ftdx3000_caps = .agc_level_count = 5, .agc_levels = { RIG_AGC_OFF, RIG_AGC_FAST, RIG_AGC_MEDIUM, RIG_AGC_SLOW, RIG_AGC_AUTO }, .vfo_ops = FTDX5000_VFO_OPS, + .scan_ops = RIG_SCAN_VFO, .targetable_vfo = RIG_TARGETABLE_FREQ, /* one of the few diffs from the 5000 */ .transceive = RIG_TRN_OFF, /* May enable later as the 5000 has an Auto Info command */ .bank_qty = 0, @@ -414,6 +415,7 @@ const struct rig_caps ftdx3000_caps = .get_ext_level = newcat_get_ext_level, .send_morse = newcat_send_morse, .wait_morse = rig_wait_morse, + .scan = newcat_scan, .hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS }; diff --git a/rigs/yaesu/ft450.c b/rigs/yaesu/ft450.c index f157b24f..021d123d 100644 --- a/rigs/yaesu/ft450.c +++ b/rigs/yaesu/ft450.c @@ -82,6 +82,7 @@ const struct rig_caps ft450_caps = .agc_level_count = 4, .agc_levels = { RIG_AGC_OFF, RIG_AGC_FAST, RIG_AGC_SLOW, RIG_AGC_AUTO }, .vfo_ops = FT450_VFO_OPS, + .scan_ops = RIG_SCAN_VFO, .targetable_vfo = RIG_TARGETABLE_FREQ, .transceive = RIG_TRN_OFF, /* May enable later as the 450 has an Auto Info command */ .bank_qty = 0, @@ -203,6 +204,7 @@ const struct rig_caps ft450_caps = .get_channel = newcat_get_channel, .send_morse = newcat_send_morse, .wait_morse = rig_wait_morse, + .scan = newcat_scan, .hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS }; diff --git a/rigs/yaesu/ft5000.c b/rigs/yaesu/ft5000.c index aaa42e35..150f32ad 100644 --- a/rigs/yaesu/ft5000.c +++ b/rigs/yaesu/ft5000.c @@ -180,6 +180,7 @@ const struct rig_caps ftdx5000_caps = .agc_level_count = 5, .agc_levels = { RIG_AGC_OFF, RIG_AGC_FAST, RIG_AGC_MEDIUM, RIG_AGC_SLOW, RIG_AGC_AUTO }, .vfo_ops = FTDX5000_VFO_OPS, + .scan_ops = RIG_SCAN_VFO, .targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE | RIG_TARGETABLE_FUNC | RIG_TARGETABLE_LEVEL | RIG_TARGETABLE_ANT | RIG_TARGETABLE_ROOFING, .transceive = RIG_TRN_OFF, /* May enable later as the 5000 has an Auto Info command */ .bank_qty = 0, @@ -310,5 +311,6 @@ const struct rig_caps ftdx5000_caps = .get_ext_level = newcat_get_ext_level, .send_morse = newcat_send_morse, .wait_morse = rig_wait_morse, + .scan = newcat_scan, .hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS }; diff --git a/rigs/yaesu/ft710.c b/rigs/yaesu/ft710.c index 54ddfb1e..a643cccd 100644 --- a/rigs/yaesu/ft710.c +++ b/rigs/yaesu/ft710.c @@ -176,6 +176,7 @@ const struct rig_caps ft710_caps = .agc_level_count = 5, .agc_levels = { RIG_AGC_OFF, RIG_AGC_FAST, RIG_AGC_MEDIUM, RIG_AGC_SLOW, RIG_AGC_AUTO }, .vfo_ops = FTDX10_VFO_OPS, + .scan_ops = RIG_SCAN_VFO, .targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_FUNC | RIG_TARGETABLE_LEVEL | RIG_TARGETABLE_COMMON, .transceive = RIG_TRN_OFF, /* May enable later as the FTDX10 has an Auto Info command */ .bank_qty = 0, @@ -311,5 +312,6 @@ const struct rig_caps ft710_caps = .wait_morse = rig_wait_morse, .set_clock = newcat_set_clock, .get_clock = newcat_get_clock, + .scan = newcat_scan, .hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS }; diff --git a/rigs/yaesu/ft891.c b/rigs/yaesu/ft891.c index b8247080..2c244c65 100644 --- a/rigs/yaesu/ft891.c +++ b/rigs/yaesu/ft891.c @@ -173,6 +173,7 @@ const struct rig_caps ft891_caps = .agc_level_count = 5, .agc_levels = { RIG_AGC_OFF, RIG_AGC_FAST, RIG_AGC_MEDIUM, RIG_AGC_SLOW, RIG_AGC_AUTO }, .vfo_ops = FT891_VFO_OPS, + .scan_ops = RIG_SCAN_VFO, .targetable_vfo = RIG_TARGETABLE_FREQ, .transceive = RIG_TRN_OFF, /* May enable later as the 950 has an Auto Info command */ .bank_qty = 0, @@ -323,6 +324,7 @@ const struct rig_caps ft891_caps = .wait_morse = rig_wait_morse, .set_clock = newcat_set_clock, .get_clock = newcat_get_clock, + .scan = newcat_scan, .hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS }; diff --git a/rigs/yaesu/ft9000.c b/rigs/yaesu/ft9000.c index 43fe7f4d..39305e22 100644 --- a/rigs/yaesu/ft9000.c +++ b/rigs/yaesu/ft9000.c @@ -89,6 +89,7 @@ const struct rig_caps ft9000_caps = .agc_level_count = 5, .agc_levels = { RIG_AGC_OFF, RIG_AGC_FAST, RIG_AGC_MEDIUM, RIG_AGC_SLOW, RIG_AGC_AUTO }, .vfo_ops = FT9000_VFO_OPS, + .scan_ops = RIG_SCAN_VFO, .targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE | RIG_TARGETABLE_ANT, .transceive = RIG_TRN_OFF, /* May enable later as the 9000 has an Auto Info command */ .bank_qty = 0, @@ -213,5 +214,6 @@ const struct rig_caps ft9000_caps = .get_channel = newcat_get_channel, .send_morse = newcat_send_morse, .wait_morse = rig_wait_morse, + .scan = newcat_scan, .hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS }; diff --git a/rigs/yaesu/ft950.c b/rigs/yaesu/ft950.c index b9b46ea0..c3e682a9 100644 --- a/rigs/yaesu/ft950.c +++ b/rigs/yaesu/ft950.c @@ -127,6 +127,7 @@ const struct rig_caps ft950_caps = .agc_level_count = 5, .agc_levels = { RIG_AGC_OFF, RIG_AGC_FAST, RIG_AGC_MEDIUM, RIG_AGC_SLOW, RIG_AGC_AUTO }, .vfo_ops = FT950_VFO_OPS, + .scan_ops = RIG_SCAN_VFO, .targetable_vfo = RIG_TARGETABLE_FREQ, .transceive = RIG_TRN_OFF, /* May enable later as the 950 has an Auto Info command */ .bank_qty = 0, @@ -285,5 +286,6 @@ const struct rig_caps ft950_caps = .get_ext_level = newcat_get_ext_level, .send_morse = newcat_send_morse, .wait_morse = rig_wait_morse, + .scan = newcat_scan, .hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS }; diff --git a/rigs/yaesu/ft991.c b/rigs/yaesu/ft991.c index 52765118..d2af1e20 100644 --- a/rigs/yaesu/ft991.c +++ b/rigs/yaesu/ft991.c @@ -141,7 +141,7 @@ const struct rig_caps ft991_caps = RIG_MODEL(RIG_MODEL_FT991), .model_name = "FT-991", .mfg_name = "Yaesu", - .version = NEWCAT_VER ".12", + .version = NEWCAT_VER ".13", .copyright = "LGPL", .status = RIG_STATUS_STABLE, .rig_type = RIG_TYPE_TRANSCEIVER, @@ -181,6 +181,7 @@ const struct rig_caps ft991_caps = .agc_level_count = 5, .agc_levels = { RIG_AGC_OFF, RIG_AGC_FAST, RIG_AGC_MEDIUM, RIG_AGC_SLOW, RIG_AGC_AUTO }, .vfo_ops = FT991_VFO_OPS, + .scan_ops = RIG_SCAN_VFO, .targetable_vfo = RIG_TARGETABLE_FREQ, .transceive = RIG_TRN_OFF, /* May enable later as the 950 has an Auto Info command */ .bank_qty = 0, @@ -354,9 +355,11 @@ const struct rig_caps ft991_caps = .get_ext_level = newcat_get_ext_level, .send_morse = newcat_send_morse, .wait_morse = rig_wait_morse, + .scan = newcat_scan, .send_voice_mem = newcat_send_voice_mem, .set_clock = newcat_set_clock, .get_clock = newcat_get_clock, + .scan = newcat_scan, .hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS }; diff --git a/rigs/yaesu/ftdx10.c b/rigs/yaesu/ftdx10.c index 3ef3876d..58d1be65 100644 --- a/rigs/yaesu/ftdx10.c +++ b/rigs/yaesu/ftdx10.c @@ -176,6 +176,7 @@ const struct rig_caps ftdx10_caps = .agc_level_count = 5, .agc_levels = { RIG_AGC_OFF, RIG_AGC_FAST, RIG_AGC_MEDIUM, RIG_AGC_SLOW, RIG_AGC_AUTO }, .vfo_ops = FTDX10_VFO_OPS, + .scan_ops = RIG_SCAN_VFO, .targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE | RIG_TARGETABLE_FUNC | RIG_TARGETABLE_LEVEL | RIG_TARGETABLE_COMMON, .transceive = RIG_TRN_OFF, /* May enable later as the FTDX10 has an Auto Info command */ .bank_qty = 0, @@ -311,5 +312,6 @@ const struct rig_caps ftdx10_caps = .wait_morse = rig_wait_morse, .set_clock = newcat_set_clock, .get_clock = newcat_get_clock, + .scan = newcat_scan, .hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS }; diff --git a/rigs/yaesu/ftdx101.c b/rigs/yaesu/ftdx101.c index 76b97e7c..d7aeec2f 100644 --- a/rigs/yaesu/ftdx101.c +++ b/rigs/yaesu/ftdx101.c @@ -176,6 +176,7 @@ const struct rig_caps ftdx101d_caps = .agc_level_count = 5, .agc_levels = { RIG_AGC_OFF, RIG_AGC_FAST, RIG_AGC_MEDIUM, RIG_AGC_SLOW, RIG_AGC_AUTO }, .vfo_ops = FTDX101_VFO_OPS, + .scan_ops = RIG_SCAN_VFO, .targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE | RIG_TARGETABLE_FUNC | RIG_TARGETABLE_LEVEL | RIG_TARGETABLE_COMMON | RIG_TARGETABLE_ANT | RIG_TARGETABLE_ROOFING, .transceive = RIG_TRN_OFF, /* May enable later as the FTDX101 has an Auto Info command */ .bank_qty = 0, @@ -312,6 +313,7 @@ const struct rig_caps ftdx101d_caps = .wait_morse = rig_wait_morse, .set_clock = newcat_set_clock, .get_clock = newcat_get_clock, + .scan = newcat_scan, .hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS }; diff --git a/rigs/yaesu/ftdx101mp.c b/rigs/yaesu/ftdx101mp.c index 349bda87..1f635181 100644 --- a/rigs/yaesu/ftdx101mp.c +++ b/rigs/yaesu/ftdx101mp.c @@ -112,6 +112,7 @@ const struct rig_caps ftdx101mp_caps = .max_xit = Hz(9999), .max_ifshift = Hz(1200), .vfo_ops = FTDX101_VFO_OPS, + .scan_ops = RIG_SCAN_VFO, .targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE | RIG_TARGETABLE_FUNC | RIG_TARGETABLE_LEVEL | RIG_TARGETABLE_COMMON | RIG_TARGETABLE_ANT, .transceive = RIG_TRN_OFF, /* May enable later as the FTDX101 has an Auto Info command */ .bank_qty = 0, @@ -249,5 +250,6 @@ const struct rig_caps ftdx101mp_caps = .wait_morse = rig_wait_morse, .set_clock = newcat_set_clock, .get_clock = newcat_get_clock, + .scan = newcat_scan, .hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS }; diff --git a/rigs/yaesu/newcat.c b/rigs/yaesu/newcat.c index 627c2a0c..f7652eb9 100644 --- a/rigs/yaesu/newcat.c +++ b/rigs/yaesu/newcat.c @@ -6891,9 +6891,20 @@ int newcat_vfo_op(RIG *rig, vfo_t vfo, vfo_op_t op) int newcat_scan(RIG *rig, vfo_t vfo, scan_t scan, int ch) { + struct newcat_priv_data *priv = (struct newcat_priv_data *)rig->state.priv; + int retval; + ENTERFUNC; + SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "SC%d%c", scan, cat_term); - RETURNFUNC(-RIG_ENAVAIL); + if (RIG_OK != (retval = newcat_set_cmd(rig))) + { + rig_debug(RIG_DEBUG_VERBOSE, "%s:%d command err = %d\n", __func__, __LINE__, + retval); + RETURNFUNC2(retval); + } + + RETURNFUNC2(retval); } @@ -11629,4 +11640,3 @@ int newcat_get_clock(RIG *rig, int *year, int *month, int *day, int *hour, RETURNFUNC2(retval); } - diff --git a/rigs/yaesu/newcat.h b/rigs/yaesu/newcat.h index 87b3878b..8b52fa79 100644 --- a/rigs/yaesu/newcat.h +++ b/rigs/yaesu/newcat.h @@ -50,7 +50,7 @@ typedef char ncboolean; /* shared function version */ -#define NEWCAT_VER "20221013" +#define NEWCAT_VER "20221021" /* Hopefully large enough for future use, 128 chars plus '\0' */ #define NEWCAT_DATA_LEN 129 @@ -236,7 +236,7 @@ int newcat_set_clock(RIG *rig, int year, int month, int day, int hour, int min, int sec, double msec, int utc_offset); int newcat_get_clock(RIG *rig, int *year, int *month, int *day, int *hour, int *min, int *sec, double *msec, int *utc_offset); - +int newcat_scan(RIG *rig, vfo_t vfo, scan_t scan, int ch); #define TOKEN_BACKEND(t) (t) commit b6743177910773c3790c0183f3ab307179094093 Author: Mike Black W9MDB <mdb...@ya...> Date: Fri Oct 21 13:26:13 2022 -0500 Fix kenwood PS command length diff --git a/rigs/kenwood/kenwood.c b/rigs/kenwood/kenwood.c index 7612ace6..b6964f5c 100644 --- a/rigs/kenwood/kenwood.c +++ b/rigs/kenwood/kenwood.c @@ -4862,7 +4862,7 @@ int kenwood_get_powerstat(RIG *rig, powerstat_t *status) RETURNFUNC(-RIG_EINVAL); } - retval = kenwood_safe_transaction(rig, "PS", pwrbuf, 6, 4); + retval = kenwood_safe_transaction(rig, "PS", pwrbuf, 6, 3); if (retval != RIG_OK) { diff --git a/rigs/kenwood/kenwood.h b/rigs/kenwood/kenwood.h index d7b70a34..194a7068 100644 --- a/rigs/kenwood/kenwood.h +++ b/rigs/kenwood/kenwood.h @@ -28,7 +28,7 @@ #include "token.h" #include "misc.h" -#define BACKEND_VER "20221012" +#define BACKEND_VER "20221021" #define EOM_KEN ';' #define EOM_TH '\r' commit 04a1a8def170ede47bcdaed759904f684beca45f Merge: 399153df 0b49f569 Author: Mike Black W9MDB <mdb...@ya...> Date: Fri Oct 21 11:22:45 2022 -0500 Merge branch 'master' of https://github.com/Hamlib/Hamlib commit 399153df9bba1e6770bdc56d1f0eb41adc49c205 Author: Mike Black W9MDB <mdb...@ya...> Date: Fri Oct 21 08:19:46 2022 -0500 Add bootstrap info to README.md diff --git a/README.md b/README.md index 09e5372e..754d423f 100644 --- a/README.md +++ b/README.md @@ -78,6 +78,8 @@ Recompiling Hamlib is entirely developed using GNU tools, under various Linux systems. The library may be recompiled by the familiar "three step": +Note: if ./configure does not exist run ./bootstrap first + ./configure make sudo make install commit 0b49f569ba0379710dbed571642d084a2aabcb0b Author: Mike Black W9MDB <mdb...@ya...> Date: Thu Oct 20 22:35:02 2022 -0500 Update INSTALL to include directions for git clone https://github.com/Hamlib/Hamlib/issues/1128 diff --git a/INSTALL b/INSTALL index 3fabd7a3..d55fed81 100644 --- a/INSTALL +++ b/INSTALL @@ -10,11 +10,16 @@ on. These are generic instructions for people who are not familiar with installing autoconfiguring software (along with some Hamlib-specific information). + The simplest way to compile this package is to enter the source code main directory and do the following: 1. Configure the source code by typing: + If you check out the source code from github you need this step first + $ ./bootstrap + + With the tar file or after the step above from a git clone $ ./configure If configure does not exist you can create it with ./bootstrap commit e9325c9c7b1453f7c60796459440e74b768dae70 Author: Mike Black W9MDB <mdb...@ya...> Date: Sun Oct 16 08:15:33 2022 -0500 Fix case on TS-990S diff --git a/rigs/kenwood/ts990s.c b/rigs/kenwood/ts990s.c index eb2c01e5..1bcd9ddd 100644 --- a/rigs/kenwood/ts990s.c +++ b/rigs/kenwood/ts990s.c @@ -120,7 +120,7 @@ static struct kenwood_priv_caps ts990s_priv_caps = const struct rig_caps ts990s_caps = { RIG_MODEL(RIG_MODEL_TS990S), - .model_name = "TS-990s", + .model_name = "TS-990S", .mfg_name = "Kenwood", .version = BACKEND_VER ".1", .copyright = "LGPL", commit e616f282818a11fd07b9d8d89b45491c0067ede8 Author: Mike Black W9MDB <mdb...@ya...> Date: Sat Oct 15 17:06:53 2022 -0500 set_mode will no longer set mode unless necessary this will preven display flashing on some rigs now that WSJTX sets VFOB mode diff --git a/src/rig.c b/src/rig.c index 722914fa..7e07af18 100644 --- a/src/rig.c +++ b/src/rig.c @@ -2246,6 +2246,21 @@ int HAMLIB_API rig_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) vfo = vfo_fixup(rig, vfo, rig->state.cache.split); + // if we're not asking for bandwidth and the mode is already set we don't need to do it + // this will prevent flashing on some rigs like the TS-870 + if (caps->get_mode && width == RIG_PASSBAND_NOCHANGE) + { + rmode_t mode_curr; + pbwidth_t width_curr; + retcode = caps->get_mode(rig, vfo, &mode_curr, &width_curr); + if (retcode == RIG_OK && mode==mode_curr) + { + rig_debug(RIG_DEBUG_VERBOSE, "%s: mode already %s and bw change not requested\n", __func__, rig_strrmode(mode)); + ELAPSED2; + RETURNFUNC2(RIG_OK); + } + } + if ((caps->targetable_vfo & RIG_TARGETABLE_MODE) || vfo == rig->state.current_vfo) { commit 411925a372aadd073792986de85d53b2d338cb9e Author: Mike Black W9MDB <mdb...@ya...> Date: Fri Oct 14 15:44:24 2022 -0500 FT710 does have targetable mode diff --git a/rigs/yaesu/ft710.c b/rigs/yaesu/ft710.c index d9a8da36..54ddfb1e 100644 --- a/rigs/yaesu/ft710.c +++ b/rigs/yaesu/ft710.c @@ -176,7 +176,7 @@ const struct rig_caps ft710_caps = .agc_level_count = 5, .agc_levels = { RIG_AGC_OFF, RIG_AGC_FAST, RIG_AGC_MEDIUM, RIG_AGC_SLOW, RIG_AGC_AUTO }, .vfo_ops = FTDX10_VFO_OPS, - .targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE | RIG_TARGETABLE_FUNC | RIG_TARGETABLE_LEVEL | RIG_TARGETABLE_COMMON, + .targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_FUNC | RIG_TARGETABLE_LEVEL | RIG_TARGETABLE_COMMON, .transceive = RIG_TRN_OFF, /* May enable later as the FTDX10 has an Auto Info command */ .bank_qty = 0, .chan_desc_sz = 0, commit b46b930770ad4b8e3be0e019f0c6d0892eef4905 Author: Mike Black W9MDB <mdb...@ya...> Date: Fri Oct 14 15:33:26 2022 -0500 Update FT710 parameters based on testing FT8 mode defaults to 1 stop bit and no hardware flow control diff --git a/rigs/yaesu/ft710.c b/rigs/yaesu/ft710.c index 786a3e23..d9a8da36 100644 --- a/rigs/yaesu/ft710.c +++ b/rigs/yaesu/ft710.c @@ -137,7 +137,7 @@ const struct rig_caps ft710_caps = RIG_MODEL(RIG_MODEL_FT710), .model_name = "FT-710", .mfg_name = "Yaesu", - .version = NEWCAT_VER ".0", + .version = NEWCAT_VER ".1", .copyright = "LGPL", .status = RIG_STATUS_STABLE, .rig_type = RIG_TYPE_TRANSCEIVER, @@ -147,12 +147,12 @@ const struct rig_caps ft710_caps = .serial_rate_min = 4800, .serial_rate_max = 115200, .serial_data_bits = 8, - .serial_stop_bits = 2, + .serial_stop_bits = 1, .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_HARDWARE, - .write_delay = FTDX10_WRITE_DELAY, - .post_write_delay = FTDX10_POST_WRITE_DELAY, - .timeout = 2000, + .serial_handshake = RIG_HANDSHAKE_NONE, + .write_delay = 0, + .post_write_delay = 0, + .timeout = 1000, .retry = 3, .has_get_func = FTDX10_FUNCS, .has_set_func = FTDX10_FUNCS, commit e6cd452c9d3804486b8e757512a05132a52cbfe7 Author: Mike Black W9MDB <mdb...@ya...> Date: Fri Oct 14 09:02:40 2022 -0500 Fix detection if FT-710 Update simyaesu.c diff --git a/rigs/yaesu/newcat.c b/rigs/yaesu/newcat.c index 5ec9091f..627c2a0c 100644 --- a/rigs/yaesu/newcat.c +++ b/rigs/yaesu/newcat.c @@ -7351,7 +7351,7 @@ ncboolean newcat_valid_command(RIG *rig, char const *const command) if (!is_ft450 && !is_ft950 && !is_ft891 && !is_ft991 && !is_ft2000 && !is_ftdx5000 && !is_ftdx9000 && !is_ftdx1200 && !is_ftdx3000 && !is_ftdx101d - && !is_ftdx101mp && !is_ftdx10) + && !is_ftdx101mp && !is_ftdx10 && !is_ft710) { rig_debug(RIG_DEBUG_ERR, "%s: '%s' is unknown\n", __func__, caps->model_name); RETURNFUNC2(FALSE); diff --git a/simulators/simyaesu.c b/simulators/simyaesu.c index 9d63509b..f332f459 100644 --- a/simulators/simyaesu.c +++ b/simulators/simyaesu.c @@ -117,7 +117,7 @@ int main(int argc, char *argv[]) { printf("Cmd:%s\n", buf); } - else { return 0; } + //else { return 0; } if (buf[0] == 0x0a) { commit 04bc5cc0895484cef60496d2b6f4096b1ab6dcb6 Author: Mike Black W9MDB <mdb...@ya...> Date: Thu Oct 13 17:41:27 2022 -0500 Add FT710 to newcat.c checks diff --git a/rigs/yaesu/newcat.c b/rigs/yaesu/newcat.c index 6c13a165..5ec9091f 100644 --- a/rigs/yaesu/newcat.c +++ b/rigs/yaesu/newcat.c @@ -90,8 +90,9 @@ typedef struct _yaesu_newcat_commands ncboolean ft1200; ncboolean ft3000; ncboolean ft101d; - ncboolean ft10; + ncboolean ftdx10; ncboolean ft101mp; + ncboolean ft710; } yaesu_newcat_commands_t; /** @@ -206,6 +207,7 @@ const cal_table_float_t yaesu_default_id_meter_cal = // Easy reference to rig model -- it is set in newcat_valid_command static ncboolean is_ft450; +static ncboolean is_ft710; static ncboolean is_ft891; static ncboolean is_ft950; static ncboolean is_ft991; @@ -237,125 +239,125 @@ static ncboolean is_ftdx10; */ static const yaesu_newcat_commands_t valid_commands[] = { - /* Command FT-450 FT-950 FT-891 FT-991 FT-2000 FT-9000 FT-5000 FT-1200 FT-3000 FTDX101D FTDX10 FTDX101MP */ - {"AB", FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"AC", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"AG", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"AI", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"AM", FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"AN", FALSE, TRUE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE }, - {"AO", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE }, - {"BA", FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"BC", FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"BD", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"BI", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"BM", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE }, - {"BP", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"BS", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"BU", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"BY", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"CH", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"CN", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"CO", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"CS", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"CT", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"DA", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"DN", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"DT", FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, TRUE, TRUE, TRUE }, - {"DP", FALSE, TRUE, FALSE, FALSE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, - {"DS", TRUE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, - {"ED", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"EK", FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, TRUE, FALSE, FALSE, TRUE }, - {"EM", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, FALSE }, - {"EN", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"EU", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"EX", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"FA", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"FB", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"FK", FALSE, TRUE, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE }, - {"FN", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE }, - {"FR", FALSE, TRUE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"FS", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"FT", TRUE, TRUE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"GT", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"ID", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"IF", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"IS", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"KM", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"KP", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"KR", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"KS", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"KY", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"LK", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"LM", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"MA", FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"MB", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE }, - {"MC", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"MD", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"MG", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"MK", TRUE, TRUE, FALSE, FALSE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, - {"ML", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"MR", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"MS", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"MT", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE }, - {"MW", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"MX", FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"NA", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"NB", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"NL", FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"NR", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"OI", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"OS", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"PA", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"PB", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"PC", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"PL", FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"PR", FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"PS", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"QI", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"QR", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"QS", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"RA", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"RC", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"RD", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"RF", FALSE, TRUE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"RG", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"RI", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"RL", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"RM", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"RO", FALSE, TRUE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE }, - {"RP", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE }, - {"RS", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"RT", TRUE, TRUE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"RU", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"SC", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"SD", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"SF", FALSE, TRUE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"SH", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"SM", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"SQ", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, - {"SS", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE }, + /* Command FT-450 FT-950 FT-891 FT-991 FT-2000 FT-9000 FT-5000 FT-1200 FT-3000 FTDX101D FTDX10 FTDX101MP FT710 */ + {"AB", FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"AC", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"AG", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"AI", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"AM", FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"AN", FALSE, TRUE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, FALSE }, + {"AO", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE }, + {"BA", FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"BC", FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"BD", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"BI", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"BM", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE }, + {"BP", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"BS", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"BU", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"BY", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"CH", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"CN", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"CO", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"CS", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"CT", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"DA", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"DN", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"DT", FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, TRUE, TRUE, TRUE, TRUE }, + {"DP", FALSE, TRUE, FALSE, FALSE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE }, + {"DS", TRUE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE }, + {"ED", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"EK", FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE }, + {"EM", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, FALSE, TRUE }, + {"EN", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"EU", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"EX", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"FA", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"FB", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"FK", FALSE, TRUE, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE }, + {"FN", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE }, + {"FR", FALSE, TRUE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"FS", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"FT", TRUE, TRUE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"GT", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"ID", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"IF", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"IS", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"KM", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"KP", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"KR", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"KS", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"KY", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"LK", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"LM", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"MA", FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"MB", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE }, + {"MC", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"MD", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"MG", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"MK", TRUE, TRUE, FALSE, FALSE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE }, + {"ML", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"MR", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"MS", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"MT", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE }, + {"MW", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"MX", FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"NA", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"NB", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"NL", FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"NR", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"OI", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"OS", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"PA", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"PB", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"PC", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"PL", FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"PR", FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"PS", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"QI", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"QR", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"QS", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, + {"RA", TRUE, TRUE, TRUE, TRUE, ... [truncated message content] |