[Hamlib-commits] Hamlib -- Ham radio control libraries branch master updated. 11d2f34ec8f2ac2d972f3
Library to control radio transceivers and receivers
Brought to you by:
n0nb
From: n0nb <n0...@us...> - 2023-08-09 13:31:38
|
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 11d2f34ec8f2ac2d972f33e497ff10b0a837ab2b (commit) via 22aee2ff31aa0eb7aae8b51e5ae3bc4939113737 (commit) via 55370c1e64176ddb86a9230049feb557d5d9da4d (commit) via dfb923e001998b6630a262e0c4c08cadc5e7596e (commit) via 23ae64eeadc2e4fb6a5d04f53503cdfc6956e0fc (commit) via 457b09d50fc286052a0a9c927af1aebb448d38db (commit) via 93a1d90889a547e24a65ef3179e34eea6d60f8ba (commit) via 11f8a33e76c970b9e6280cb40ca8e0d1a4631a54 (commit) via 6c3e5a6b7f341bfd1fe4e4bce4338ef76879bb35 (commit) via b1bef6101b7a1c22139826aba2787c7277c08f24 (commit) via 915ee383fbe28806b10744eba744201579c5fa35 (commit) via cbec337cd3f5cbaa9263a84139b4c29c81d48891 (commit) via 90f0ffcdc9b9298728cd70864a500ff7c5a21f48 (commit) via 2194d0dac9b0fd39c9551d7eac7f8996de639d87 (commit) via 12f855dbacb80a5b518cfe3021ec442b30825b51 (commit) via 18390bdbf8901847db555c79743fb4156e1dd15a (commit) via aa3cf8988640b84b04311ede5054f9a3a3bc81ec (commit) via 17c5a8aed9cffafc100606ff35852c60faf422a0 (commit) via 364a1360007c962f29229d58392f90e17ac3137a (commit) via 7c57a22ac893c5514d58467f847f0e8653405503 (commit) via 145c9e0c80a439a1af05c43768f53c797ac99b84 (commit) via bf9835791beb3261ffc0d367345e3aed30428b04 (commit) via 10f88807e6c48a6ca6229694fdc2c10450244c44 (commit) via 82c169527dbe267a26f40f50b41b51f8cc54e3b2 (commit) via 4f14e14993020930495a7603a0878d66be1c5f4d (commit) via 652e12a44610e5121d10a6053205eb8386b3c0c1 (commit) via a29eb33e6e1b2c29f4bfce5ea8e74a8435504c0b (commit) via 321f3f8ab42c5961b7ac5f484ff99d6fc0a61762 (commit) via a9b3d62f41130712aabf1bb201630f7525a293ef (commit) via 8cf3d5c02c654b89c4113dea98625ff669cb4ce6 (commit) via 2c81d04ec02f046073fb6b6df96d0cb25f75d3ab (commit) via 2f818472abe3b20aeaf0f38f0bb4ee897c7b13d8 (commit) via 89214bf132680357f4948be799bab2ae305cb3c2 (commit) via 3eafbcad111891b2798def5ca1ff504f87eecdf6 (commit) via d03affebea4d3c343a4f934b4d72f1205b6cc1ac (commit) via deaf44c8c61fe6e5f31c5369cf29ce4a6b647351 (commit) via 6c89f0045ff8a38b0ad513e6d57c8646f1303a63 (commit) via d5828f65ffcbee8a021644ec2dd29ebf194eda71 (commit) via 97b341eb3fbced984340eb33c82ef8d94a1fecdb (commit) via 494252fe1cf27ce20c8a3a081a21f01cb1ec1286 (commit) via d76e28d7720e11ea826ba08a5069979744968558 (commit) via 5ddfefb91dfbdcafedae0fd070b552d495bb3521 (commit) via bbff9fae9f3fb325e08bb6a2b7fcdce8eaf2b066 (commit) via 8a49278682d55363417f9f497a1aa2dfb39dd8db (commit) via a4b88ee84aaaa733b534586cbf1506d9da325f06 (commit) via d48d12c97294e61b91026713d2e89dde3eff052c (commit) via 6a4e31f89009c5adedb9c38ba4f9e8b966447383 (commit) via 2e34bb599184aba7dcbc358367bcdee7250760a5 (commit) via 503f27e20c060719077d73a6157b22d1f2a1906a (commit) via f0821041a2c48a2c6da5e5f437a72ebdd291c360 (commit) via 0228614a1759eda971b27d9e3a8a8d103ea1a8bd (commit) via 17382c03c63b69e3f75921a94bcb4cf0a47cbba7 (commit) via 6aa13e45c7a44809ecd216a23461fab06d6bd603 (commit) from 56de3bb25d0e0c9919681c86ec3c2c235697d381 (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 11d2f34ec8f2ac2d972f33e497ff10b0a837ab2b Author: Mike Black W9MDB <mdb...@ya...> Date: Tue Aug 8 15:42:40 2023 -0500 Fix rigctlsync.1 man page diff --git a/doc/man1/rigctlsync.1 b/doc/man1/rigctlsync.1 index 369950ad6..e2c504b1b 100644 --- a/doc/man1/rigctlsync.1 +++ b/doc/man1/rigctlsync.1 @@ -259,7 +259,7 @@ if an error was returned by Start .B rigctlsync with FLRig as the Hamlib model -.UE +.UE . . .PP .in +4n commit 22aee2ff31aa0eb7aae8b51e5ae3bc4939113737 Author: Mike Black W9MDB <mdb...@ya...> Date: Mon Aug 7 23:30:29 2023 -0500 Update simulators diff --git a/simulators/simic7100.c b/simulators/simic7100.c index f19b074c7..f05e44c44 100644 --- a/simulators/simic7100.c +++ b/simulators/simic7100.c @@ -200,6 +200,7 @@ void frameParse(int fd, unsigned char *frame, int len) frame[4] = 0xfb; frame[5] = 0xfd; + hl_usleep(20*1000); n = write(fd, frame, 6); break; diff --git a/simulators/simic7300.c b/simulators/simic7300.c index 8ac113245..be9f316ad 100644 --- a/simulators/simic7300.c +++ b/simulators/simic7300.c @@ -31,6 +31,7 @@ int civ_731_mode = 0; vfo_t current_vfo = RIG_VFO_A; int split = 0; int keyspd = 85; // 85=20WPM +int band=8; // we make B different from A to ensure we see a difference at startup float freqA = 14074000; @@ -365,6 +366,22 @@ void frameParse(int fd, unsigned char *frame, int len) case 0x1a: // miscellaneous things switch (frame[5]) { + case 0x01: // band + if (frame[6] == 0xfd) + { + frame[6] = band; + frame[7] = 0xfd; + n = write(fd,frame,8); + } + else + { + band = frame[6]; + printf("Band select=%d\n",band); + frame[4] = 0xfb; + frame[5] = 0xfe; + n = write(fd,frame,6); + } + break; case 0x03: // width if (current_vfo == RIG_VFO_A || current_vfo == RIG_VFO_MAIN) { frame[6] = widthA; } else { frame[6] = widthB; } commit 55370c1e64176ddb86a9230049feb557d5d9da4d Author: Mike Black W9MDB <mdb...@ya...> Date: Mon Aug 7 17:21:39 2023 -0500 Fix non-targetable VFO Icom rigs (e.g. IC7100) error during open routine by call get_freq first to establish echo on or off https://github.com/Hamlib/Hamlib/issues/1358 diff --git a/src/rig.c b/src/rig.c index e8661b09f..ef4ca9884 100644 --- a/src/rig.c +++ b/src/rig.c @@ -2317,6 +2317,15 @@ int HAMLIB_API rig_get_freq(RIG *rig, vfo_t vfo, freq_t *freq) } HAMLIB_TRACE; + retcode = caps->get_freq(rig, vfo, freq); + + if (retcode != RIG_OK) + { + ELAPSED2; + LOCK(0); + RETURNFUNC(retcode); + } + retcode = caps->set_vfo(rig, vfo); if (retcode != RIG_OK) @@ -7773,6 +7782,7 @@ static int async_data_handler_start(RIG *rig) rs->async_data_enabled); RETURNFUNC(RIG_OK); } + sleep(2); // give other things a chance to finish opening up the rig #ifdef HAVE_PTHREAD commit dfb923e001998b6630a262e0c4c08cadc5e7596e Merge: 23ae64eea 93a1d9088 Author: Mike Black W9MDB <mdb...@ya...> Date: Sat Aug 5 12:15:50 2023 -0500 Merge branch 'master' of https://github.com/Hamlib/Hamlib commit 23ae64eeadc2e4fb6a5d04f53503cdfc6956e0fc Author: Mike Black W9MDB <mdb...@ya...> Date: Sat Aug 5 12:15:28 2023 -0500 Add is_ft710 for SH command in newcat.c diff --git a/rigs/yaesu/newcat.c b/rigs/yaesu/newcat.c index 31d1293cc..ec607fc3c 100644 --- a/rigs/yaesu/newcat.c +++ b/rigs/yaesu/newcat.c @@ -8737,7 +8737,7 @@ int newcat_set_rx_bandwidth(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) RETURNFUNC(err); } } // end is_ftdx5000 - else if (is_ftdx101d || is_ftdx101mp || is_ftdx10) + else if (is_ftdx101d || is_ftdx101mp || is_ftdx10 || is_ft710) { switch (mode) { commit 457b09d50fc286052a0a9c927af1aebb448d38db Author: Mike Black W9MDB <mdb...@ya...> Date: Sat Aug 5 09:41:55 2023 -0500 Fix FTDX101D/MP to allow new 3200/3500/4000Hz bandwidths https://github.com/Hamlib/Hamlib/issues/1355 diff --git a/rigs/yaesu/newcat.c b/rigs/yaesu/newcat.c index 2fd09f867..31d1293cc 100644 --- a/rigs/yaesu/newcat.c +++ b/rigs/yaesu/newcat.c @@ -8765,7 +8765,10 @@ int newcat_set_rx_bandwidth(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) else if (width <= 1700) { w = 15; } else if (width <= 2000) { w = 16; } else if (width <= 2400) { w = 17; } - else { w = 18; } // 3000Hz + else if (width <= 3000) { w = 18; } + else if (width <= 3200) { w = 19; } + else if (width <= 3500) { w = 20; } + else { w = 21; } // 4000Hz break; @@ -10053,7 +10056,15 @@ int newcat_get_rx_bandwidth(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t *width) case 18: *width = 3000; break; - default: RETURNFUNC(-RIG_EINVAL); + case 19: *width = 3200; break; + + case 20: *width = 3500; break; + + case 21: *width = 4000; break; + + default: + + RETURNFUNC(-RIG_EINVAL); } break; diff --git a/rigs/yaesu/newcat.h b/rigs/yaesu/newcat.h index de1d49c7f..267b36f0b 100644 --- a/rigs/yaesu/newcat.h +++ b/rigs/yaesu/newcat.h @@ -50,7 +50,7 @@ typedef char ncboolean; /* shared function version */ -#define NEWCAT_VER "20230802" +#define NEWCAT_VER "20230805" /* Hopefully large enough for future use, 128 chars plus '\0' */ #define NEWCAT_DATA_LEN 129 commit 93a1d90889a547e24a65ef3179e34eea6d60f8ba Author: Mike Black W9MDB <mdb...@ya...> Date: Sat Aug 5 09:41:55 2023 -0500 Fix FTDX101D/MP to allow new 3200/3500/4000Hz bandwidths https://github.com/Hamlib/Hamlib/issues/1356 diff --git a/rigs/yaesu/newcat.c b/rigs/yaesu/newcat.c index 2fd09f867..31d1293cc 100644 --- a/rigs/yaesu/newcat.c +++ b/rigs/yaesu/newcat.c @@ -8765,7 +8765,10 @@ int newcat_set_rx_bandwidth(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) else if (width <= 1700) { w = 15; } else if (width <= 2000) { w = 16; } else if (width <= 2400) { w = 17; } - else { w = 18; } // 3000Hz + else if (width <= 3000) { w = 18; } + else if (width <= 3200) { w = 19; } + else if (width <= 3500) { w = 20; } + else { w = 21; } // 4000Hz break; @@ -10053,7 +10056,15 @@ int newcat_get_rx_bandwidth(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t *width) case 18: *width = 3000; break; - default: RETURNFUNC(-RIG_EINVAL); + case 19: *width = 3200; break; + + case 20: *width = 3500; break; + + case 21: *width = 4000; break; + + default: + + RETURNFUNC(-RIG_EINVAL); } break; diff --git a/rigs/yaesu/newcat.h b/rigs/yaesu/newcat.h index de1d49c7f..267b36f0b 100644 --- a/rigs/yaesu/newcat.h +++ b/rigs/yaesu/newcat.h @@ -50,7 +50,7 @@ typedef char ncboolean; /* shared function version */ -#define NEWCAT_VER "20230802" +#define NEWCAT_VER "20230805" /* Hopefully large enough for future use, 128 chars plus '\0' */ #define NEWCAT_DATA_LEN 129 commit 11f8a33e76c970b9e6280cb40ca8e0d1a4631a54 Author: Mike Black W9MDB <mdb...@ya...> Date: Sat Aug 5 07:48:21 2023 -0500 Add simic7851 diff --git a/simulators/Makefile.am b/simulators/Makefile.am index 5fb482e10..895b8d416 100644 --- a/simulators/Makefile.am +++ b/simulators/Makefile.am @@ -8,7 +8,7 @@ DISTCLEANFILES = bin_PROGRAMS = -check_PROGRAMS = simelecraft simicgeneric simkenwood simyaesu simic9100 simic9700 simft991 simftdx1200 simftdx3000 simjupiter simpowersdr simid5100 simft736 simftdx5000 simtmd700 simrotorez simspid simft817 simts590 simft847 simic7300 simic7000 simic7100 simic7200 simatd578 simic905 simts450 simic7600 simic7610 simic705 simts950 simts990 +check_PROGRAMS = simelecraft simicgeneric simkenwood simyaesu simic9100 simic9700 simft991 simftdx1200 simftdx3000 simjupiter simpowersdr simid5100 simft736 simftdx5000 simtmd700 simrotorez simspid simft817 simts590 simft847 simic7300 simic7000 simic7100 simic7200 simatd578 simic905 simts450 simic7600 simic7610 simic705 simts950 simts990 simic7851 simelecraft_SOURCES = simelecraft.c simkenwood_SOURCES = simkenwood.c diff --git a/simulators/simic7851.c b/simulators/simic7851.c new file mode 100644 index 000000000..d0201d7de --- /dev/null +++ b/simulators/simic7851.c @@ -0,0 +1,705 @@ +// 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 we are POSIX here we need this +struct ip_mreq +{ + int dummy; +}; + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <fcntl.h> +#include <errno.h> +#include <sys/time.h> +#include <hamlib/rig.h> +#include "../src/misc.h" +#include <termios.h> +#include <unistd.h> + + +#define BUFSIZE 256 +#define X25 + +int civ_731_mode = 0; +vfo_t current_vfo = RIG_VFO_A; +int split = 0; + +// we make B different from A to ensure we see a difference at startup +float freqA = 14074000; +float freqB = 14074500; +mode_t modeA = RIG_MODE_PKTUSB; +mode_t modeB = RIG_MODE_PKTUSB; +int datamodeA = 0; +int datamodeB = 0; +pbwidth_t widthA = 0; +pbwidth_t widthB = 1; +ant_t ant_curr = 0; +int ant_option = 0; +int ptt = 0; +int satmode = 0; +int agc_time = 1; +int ovf_status = 0; +int powerstat = 1; +int datamode = 0; +int keyspd = 130; // 130=20WPM +int attenuator; +int filterA = 2; +int filterB = 3; + +void dumphex(unsigned char *buf, int n) +{ + for (int i = 0; i < n; ++i) { printf("%02x ", buf[i]); } + + printf("\n"); +} + +int +frameGet(int fd, unsigned char *buf) +{ + int i = 0; + memset(buf, 0, BUFSIZE); + unsigned char c; + +again: + + while (read(fd, &c, 1) > 0) + { + buf[i++] = c; + //printf("i=%d, c=0x%02x\n",i,c); + + if (c == 0xfd) + { + dumphex(buf, i); + return i; + } + + if (i > 2 && c == 0xfe) + { + printf("Turning power on due to 0xfe string\n"); + powerstat = 1; + int j; + + for (j = i; j < 175; ++j) + { + if (read(fd, &c, 1) < 0) { break; } + } + + i = 0; + goto again; + } + } + + printf("Error??? c=x%02x\n", c); + + return 0; +} + +void frameParse(int fd, unsigned char *frame, int len) +{ + double freq; + int n = 0; + + dumphex(frame, len); + + if (frame[0] != 0xfe && frame[1] != 0xfe) + { + printf("expected fe fe, got "); + dumphex(frame, len); + return; + } + + int echo = 1; + + if (echo) + { + n = write(fd, frame, len); + } + + frame[3] = frame[2]; + frame[2] = 0xe0; + + switch (frame[4]) + { + case 0x03: + + //from_bcd(frameackbuf[2], (civ_731_mode ? 4 : 5) * 2); + if (current_vfo == RIG_VFO_A || current_vfo == RIG_VFO_MAIN) + { + printf("get_freqA\n"); + to_bcd(&frame[5], (long long)freqA, (civ_731_mode ? 4 : 5) * 2); + } + else + { + printf("get_freqB\n"); + to_bcd(&frame[5], (long long)freqB, (civ_731_mode ? 4 : 5) * 2); + } + + frame[10] = 0xfd; + + if (powerstat) + { + n = write(fd, frame, 11); + } + + break; + + case 0x04: + if (current_vfo == RIG_VFO_A || current_vfo == RIG_VFO_MAIN) + { + printf("get_modeA\n"); + frame[5] = modeA; + frame[6] = widthA; + } + else + { + printf("get_modeB\n"); + frame[5] = modeB; + frame[6] = widthB; + } + + frame[7] = 0xfd; + n = write(fd, frame, 8); + break; + + case 0x05: + freq = from_bcd(&frame[5], (civ_731_mode ? 4 : 5) * 2); + printf("set_freq to %.0f\n", freq); + + if (current_vfo == RIG_VFO_A || current_vfo == RIG_VFO_MAIN) { freqA = freq; } + else { freqB = freq; } + + frame[4] = 0xfb; + frame[5] = 0xfd; + n = write(fd, frame, 6); + break; + + case 0x06: + if (current_vfo == RIG_VFO_A || current_vfo == RIG_VFO_MAIN) { modeA = frame[6]; } + else { modeB = frame[6]; } + + frame[4] = 0xfb; + frame[5] = 0xfd; + n = write(fd, frame, 6); + break; + + case 0x07: + +printf("******* [5] = 0x07\n"); + switch (frame[5]) + { + case 0xd2: +printf("******* [6] = 0x07\n"); + switch (frame[6]) + { + case 0x00: current_vfo = RIG_VFO_MAIN; break; + + case 0x01: current_vfo = RIG_VFO_SUB; break; + } + } + + printf("set_vfo to %s\n", rig_strvfo(current_vfo)); + + frame[4] = 0xfb; + frame[5] = 0xfd; + printf("0x07 0xd2 answer: \n"); + dump_hex(frame, 6); + n = write(fd, frame, 6); + break; + + case 0x0f: + if (frame[5] == 0) { split = 0; } + else if (frame[5] == 1) { split = 1; } + else { frame[6] = split; } + + if (frame[5] == 0xfd) + { + printf("get split %d\n", 1); + frame[7] = 0xfd; + n = write(fd, frame, 8); + } + else + { + printf("set split %d\n", 1); + frame[4] = 0xfb; + frame[5] = 0xfd; + n = write(fd, frame, 6); + } + + break; + + case 0x11: + if (frame[5] != 0xfd) + { + attenuator = frame[6]; + frame[4] = 0xfb; + frame[5] = 0xfd; + n = write(fd, frame, 6); + } + else + { + frame[6] = attenuator; + frame[7] = 0xfd; + n = write(fd, frame, 8); + } + break; + + + case 0x12: // we're simulating the 3-byte version -- not the 2-byte + if (frame[5] != 0xfd) + { + printf("Set ant %d\n", -1); + ant_curr = frame[5]; + ant_option = frame[6]; + dump_hex(frame, 8); + } + else + { + printf("Get ant\n"); + } + + frame[5] = ant_curr; + frame[6] = ant_option; + frame[7] = 0xfd; + printf("write 8 bytes\n"); + dump_hex(frame, 8); + n = write(fd, frame, 8); + break; + + case 0x14: + printf("******** 0x14 received frame[5]=0x%02x\n", frame[5]); + + switch (frame[5]) + { + static int power_level = 0; + + case 0x07: + case 0x08: + if (frame[6] != 0xfd) + { + printf("DEBUG#1\n"); + frame[4] = 0xfb; + frame[5] = 0xfd; + dumphex(frame, 6); + n = write(fd, frame, 6); + printf("ACK x14 x08\n"); + } + else + { + printf("DEBUG#2\n"); + to_bcd(&frame[6], (long long)128, 2); + frame[8] = 0xfb; + frame[9] = 0xfd; + dumphex(frame, 10); + n = write(fd, frame, 10); + printf("SEND x14 x08\n"); + } + + break; + + case 0x0a: + printf("Using power level %d\n", power_level); + power_level += 10; + + if (power_level > 250) { power_level = 0; } + + to_bcd(&frame[6], (long long)power_level, 2); + frame[8] = 0xfd; + n = write(fd, frame, 9); + break; + + case 0x0c: + if (frame[6] != 0xfd) + { + keyspd = frame[5]; + } + else + { + frame[6] = keyspd; + frame[7] = 0xfd; + n = write(fd, frame, 8); + } + + break; + + default: + printf("*********** NAK\n"); + frame[5] = 0xfa; + frame[6] = 0xfd; + n = write(fd, frame, 7); + break; + } + + break; + + case 0x15: + switch (frame[5]) + { + static int meter_level = 0; + + case 0x07: + frame[6] = ovf_status; + frame[7] = 0xfd; + n = write(fd, frame, 8); + ovf_status = ovf_status == 0 ? 1 : 0; + break; + + case 0x11: + printf("Using meter level %d\n", meter_level); + meter_level += 10; + + if (meter_level > 250) { meter_level = 0; } + + to_bcd(&frame[6], (long long)meter_level, 2); + frame[8] = 0xfd; + n = write(fd, frame, 9); + break; + + default: + frame[5] = 0xfa; + frame[6] = 0xfd; + n = write(fd, frame, 7); + break; + + } + + case 0x16: + switch (frame[5]) + { + case 0x5a: + if (frame[6] == 0xfe) + { + satmode = frame[6]; + } + else + { + frame[6] = satmode; + frame[7] = 0xfd; + n = write(fd, frame, 8); + } + + break; + } + + break; + + case 0x18: // miscellaneous things + frame[5] = 1; + frame[6] = 0xfd; + n = write(fd, frame, 7); + break; + + case 0x19: // miscellaneous things + frame[5] = 0x94; + frame[6] = 0xfd; + n = write(fd, frame, 7); + break; + + case 0x1a: // miscellaneous things + switch (frame[5]) + { + case 0x03: // width + if (current_vfo == RIG_VFO_A || current_vfo == RIG_VFO_MAIN) { frame[6] = widthA; } + else { frame[6] = widthB; } + + frame[7] = 0xfd; + n = write(fd, frame, 8); + break; + + case 0x04: // AGC TIME + printf("frame[6]==x%02x, frame[7]=0%02x\n", frame[6], frame[7]); + + if (frame[6] == 0xfd) // the we are reading + { + frame[6] = agc_time; + frame[7] = 0xfd; + n = write(fd, frame, 8); + } + else + { + printf("AGC_TIME RESPONSE******************************"); + agc_time = frame[6]; + frame[4] = 0xfb; + frame[5] = 0xfd; + n = write(fd, frame, 6); + } + + break; + + case 0x06: // satmode + if (frame[6] == 0xfd) // then we are reading + { + frame[6] = datamode; + frame[7] = 0xfd; + n = write(fd, frame, 8); + } + else + { + datamode = frame[6]; + frame[4] = 0xfd; + frame[5] = 0xfd; + n = write(fd, frame, 6); + } + + break; + + case 0x07: // satmode + frame[4] = 0; + frame[7] = 0xfd; + n = write(fd, frame, 8); + break; + + } + + break; + + case 0x1c: + switch (frame[5]) + { + case 0: + if (frame[6] == 0xfd) + { + frame[6] = ptt; + frame[7] = 0xfd; + n = write(fd, frame, 8); + } + else + { + ptt = frame[6]; + frame[7] = 0xfb; + frame[8] = 0xfd; + n = write(fd, frame, 9); + } + + break; + + } + + break; + + +#ifdef X25 + + case 0x25: + if (frame[6] == 0xfd) + { + if (frame[5] == 0x00) + { + to_bcd(&frame[6], (long long)freqA, (civ_731_mode ? 4 : 5) * 2); + printf("X25 get_freqA=%.0f\n", freqA); + } + else + { + to_bcd(&frame[6], (long long)freqB, (civ_731_mode ? 4 : 5) * 2); + printf("X25 get_freqB=%.0f\n", freqB); + } + + frame[11] = 0xfd; +#if 0 // async frame + unsigned char frame2[11]; + + frame2[0] = 0xfe; + frame2[1] = 0xfe; + frame2[2] = 0x00; // send transceive frame + frame2[3] = frame[3]; // send transceive frame + frame2[4] = 0x00; + frame2[5] = 0x70; + frame2[6] = 0x28; + frame2[7] = 0x57; + frame2[8] = 0x03; + frame2[9] = 0x00; + frame2[10] = 0xfd; + n = write(fd, frame2, 11); +#endif + n = write(fd, frame, 12); + } + else + { + freq = from_bcd(&frame[6], (civ_731_mode ? 4 : 5) * 2); + printf("set_freq to %.0f\n", freq); + + if (frame[5] == 0x00) { freqA = freq; } + else { freqB = freq; } + + frame[4] = 0xfb; + frame[5] = 0xfd; + n = write(fd, frame, 6); + // send async frame + frame[2] = 0x00; // async freq + frame[3] = 0xa2; + frame[4] = 0x00; + frame[5] = 0x00; + frame[6] = 0x10; + frame[7] = 0x01; + frame[8] = 0x96; + frame[9] = 0x12; + frame[10] = 0xfd; + n = write(fd, frame, 11); + } + + break; + + case 0x26: + for (int i = 0; i < 6; ++i) { printf("%02x:", frame[i]); } + + if (frame[6] == 0xfd) // then a query + { + for (int i = 0; i < 6; ++i) { printf("%02x:", frame[i]); } + + frame[6] = frame[5] == 0 ? modeA : modeB; + frame[7] = frame[5] == 0 ? datamodeA : datamodeB; + frame[8] = frame[5] == 0 ? filterA : filterB; + frame[9] = 0xfd; + n = write(fd, frame, 10); + } + else + { + for (int i = 0; i < 12; ++i) { printf("%02x:", frame[i]); } + + if (frame[6] == 0) + { + modeA = frame[7]; + datamodeA = frame[8]; + } + else + { + modeB = frame[7]; + datamodeB = frame[8]; + } + + frame[4] = 0xfb; + frame[5] = 0xfd; + n = write(fd, frame, 6); + } + + printf("\n"); + break; +#else + + case 0x25: + printf("x25 send nak\n"); + frame[4] = 0xfa; + frame[5] = 0xfd; + n = write(fd, frame, 6); + break; + + case 0x26: + printf("x26 send nak\n"); + frame[4] = 0xfa; + frame[5] = 0xfd; + n = write(fd, frame, 6); + break; +#endif + + default: printf("cmd 0x%02x unknown\n", frame[4]); + } + + if (n == 0) { printf("Write failed=%s\n", strerror(errno)); } + +// don't care about the rig type yet + +} + +#if defined(WIN32) || defined(_WIN32) +int openPort(char *comport) // doesn't matter for using pts devices +{ + int fd; + fd = open(comport, O_RDWR); + + if (fd < 0) + { + perror(comport); + } + + return fd; +} + +#else +int openPort(char *comport) // doesn't matter for using pts devices +{ + int fd = posix_openpt(O_RDWR); + char *name = ptsname(fd); + + if (name == NULL) + { + perror("pstname"); + return -1; + } + + printf("name=%s\n", name); + + if (fd == -1 || grantpt(fd) == -1 || unlockpt(fd) == -1) + { + perror("posix_openpt"); + return -1; + } + + return fd; +} +#endif + +void rigStatus() +{ + char vfoa = current_vfo == RIG_VFO_A ? '*' : ' '; + char vfob = current_vfo == RIG_VFO_B ? '*' : ' '; + printf("%cVFOA: mode=%d datamode=%d width=%ld freq=%.0f\n", vfoa, modeA, + datamodeA, + widthA, + freqA); + printf("%cVFOB: mode=%d datamode=%d width=%ld freq=%.0f\n", vfob, modeB, + datamodeB, + widthB, + freqB); +} + +int main(int argc, char **argv) +{ + unsigned char buf[256]; + int fd = openPort(argv[1]); + + printf("%s: %s\n", argv[0], rig_version()); +#ifdef X25 + printf("x25/x26 command recognized\n"); +#else + printf("x25/x26 command rejected\n"); +#endif +#if defined(WIN32) || defined(_WIN32) + + if (argc != 2) + { + printf("Missing comport argument\n"); + printf("%s [comport]\n", argv[0]); + exit(1); + } + +#endif + + while (1) + { + int len = frameGet(fd, buf); + + if (len <= 0) + { + close(fd); + fd = openPort(argv[1]); + } + + if (powerstat) + { + frameParse(fd, buf, len); + } + else + { + hl_usleep(1000 * 1000); + } + + rigStatus(); + } + + return 0; +} commit 6c3e5a6b7f341bfd1fe4e4bce4338ef76879bb35 Merge: 90f0ffcdc b1bef6101 Author: Michael Black <mdb...@ya...> Date: Fri Aug 4 08:58:27 2023 -0500 Merge pull request #1354 from GeoBaltz/yaesu_level2 Yaesu level2 commit b1bef6101b7a1c22139826aba2787c7277c08f24 Author: George Baltz N3GB <Geo...@gm...> Date: Thu Aug 3 09:56:38 2023 -0400 Convert RFPOWER to level_gran usage Two rigs (FTDX3000dm & FT450D) handled slightly abnormally - both should function as before. Remove 2 now unused variables to avoid compiler warnings. diff --git a/rigs/yaesu/ft1200.c b/rigs/yaesu/ft1200.c index 39477ff40..85d890fa5 100644 --- a/rigs/yaesu/ft1200.c +++ b/rigs/yaesu/ft1200.c @@ -177,6 +177,7 @@ const struct rig_caps ftdx1200_caps = [LVL_NOTCHF] = { .min = { .i = 1 }, .max = { .i = 4000 }, .step = { .i = 10 } }, [LVL_MICGAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, [LVL_MONITOR_GAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, + [LVL_RFPOWER] = { .min = { .f = .05 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, }, .ctcss_list = common_ctcss_list, .dcs_list = NULL, diff --git a/rigs/yaesu/ft3000.c b/rigs/yaesu/ft3000.c index 6973de01a..9696677a8 100644 --- a/rigs/yaesu/ft3000.c +++ b/rigs/yaesu/ft3000.c @@ -272,6 +272,7 @@ const struct rig_caps ftdx3000_caps = [LVL_NOTCHF] = { .min = { .i = 1 }, .max = { .i = 4000 }, .step = { .i = 10 } }, [LVL_MICGAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, [LVL_MONITOR_GAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, + [LVL_RFPOWER] = { .min = { .f = .05 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, }, .ctcss_list = common_ctcss_list, .dcs_list = NULL, diff --git a/rigs/yaesu/ft710.c b/rigs/yaesu/ft710.c index 5c7ada307..b3a8e4f6b 100644 --- a/rigs/yaesu/ft710.c +++ b/rigs/yaesu/ft710.c @@ -148,6 +148,7 @@ const struct rig_caps ft710_caps = [LVL_MICGAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, [LVL_SQL] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, [LVL_MONITOR_GAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, + [LVL_RFPOWER] = { .min = { .f = .05 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, }, .ctcss_list = common_ctcss_list, .dcs_list = NULL, diff --git a/rigs/yaesu/ft891.c b/rigs/yaesu/ft891.c index 0f2229a6e..09c1c6adc 100644 --- a/rigs/yaesu/ft891.c +++ b/rigs/yaesu/ft891.c @@ -161,6 +161,7 @@ const struct rig_caps ft891_caps = [LVL_MICGAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, [LVL_SQL] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, [LVL_MONITOR_GAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, + [LVL_RFPOWER] = { .min = { .f = .05 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, }, .ctcss_list = common_ctcss_list, .dcs_list = NULL, diff --git a/rigs/yaesu/ft950.c b/rigs/yaesu/ft950.c index 01abb261f..27d67023a 100644 --- a/rigs/yaesu/ft950.c +++ b/rigs/yaesu/ft950.c @@ -113,6 +113,7 @@ const struct rig_caps ft950_caps = [LVL_CWPITCH] = { .min = { .i = 300 }, .max = { .i = 1050 }, .step = { .i = 50 } }, [LVL_KEYSPD] = { .min = { .i = 4 }, .max = { .i = 60 }, .step = { .i = 1 } }, [LVL_NOTCHF] = { .min = { .i = 1 }, .max = { .i = 3000 }, .step = { .i = 10 } }, + [LVL_RFPOWER] = { .min = { .f = .05 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, }, .ctcss_list = common_ctcss_list, .dcs_list = NULL, diff --git a/rigs/yaesu/ft991.c b/rigs/yaesu/ft991.c index 7c5b27bc0..d13f67b86 100644 --- a/rigs/yaesu/ft991.c +++ b/rigs/yaesu/ft991.c @@ -166,6 +166,7 @@ const struct rig_caps ft991_caps = [LVL_MICGAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, [LVL_SQL] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, [LVL_MONITOR_GAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, + [LVL_RFPOWER] = { .min = { .f = .05 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, }, .ctcss_list = common_ctcss_list, .dcs_list = common_dcs_list, diff --git a/rigs/yaesu/ftdx10.c b/rigs/yaesu/ftdx10.c index 35ae64b82..d411b26a4 100644 --- a/rigs/yaesu/ftdx10.c +++ b/rigs/yaesu/ftdx10.c @@ -164,6 +164,7 @@ const struct rig_caps ftdx10_caps = [LVL_MICGAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, [LVL_SQL] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, [LVL_MONITOR_GAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, + [LVL_RFPOWER] = { .min = { .f = .05 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, }, .ctcss_list = common_ctcss_list, .dcs_list = NULL, diff --git a/rigs/yaesu/ftdx101.c b/rigs/yaesu/ftdx101.c index d06b384b4..6922a17ff 100644 --- a/rigs/yaesu/ftdx101.c +++ b/rigs/yaesu/ftdx101.c @@ -164,6 +164,7 @@ const struct rig_caps ftdx101d_caps = [LVL_MICGAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, [LVL_SQL] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, [LVL_MONITOR_GAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, + [LVL_RFPOWER] = { .min = { .f = .05 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, }, .ctcss_list = common_ctcss_list, .dcs_list = NULL, diff --git a/rigs/yaesu/ftdx101mp.c b/rigs/yaesu/ftdx101mp.c index 9ef8d46d9..78673c8ce 100644 --- a/rigs/yaesu/ftdx101mp.c +++ b/rigs/yaesu/ftdx101mp.c @@ -101,6 +101,7 @@ const struct rig_caps ftdx101mp_caps = [LVL_MICGAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, [LVL_SQL] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, [LVL_MONITOR_GAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, + [LVL_RFPOWER] = { .min = { .f = .05 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, }, .ctcss_list = common_ctcss_list, .dcs_list = NULL, diff --git a/rigs/yaesu/level_gran_yaesu.h b/rigs/yaesu/level_gran_yaesu.h index 7fdb383ff..c440455f1 100644 --- a/rigs/yaesu/level_gran_yaesu.h +++ b/rigs/yaesu/level_gran_yaesu.h @@ -17,7 +17,7 @@ /* levels with time units */ [LVL_VOXDELAY] = { .min = { .i = 3 }, .max = { .i = 300 }, .step = { .i = 1 } }, [LVL_BKINDL] = { .min = { .i = 30 }, .max = { .i = 3000 }, .step = { .i = 1 } }, - [LVL_BKIN_DLYMS] = { .min = { .i = 30 }, .max = { .i = 3000 }, .step = { .i = 1 } }, + [LVL_BKIN_DLYMS] = { .min = { .i = 30 }, .max = { .i = 3000 }, .step = { .i = 1 } }, /* levels with watt units */ [LVL_RFPOWER_METER_WATTS] = { .min = { .f = .0 }, .max = { .f = 100 }, .step = { .f = 1.0f/255.0f } }, /* level with misc units */ @@ -28,7 +28,7 @@ /* levels with 0-1 values -- increment based on rig's range */ [LVL_AF] = { .min = { .f = 0 }, .max = { .f = 1 }, .step = { .f = 1.0f/255.0f } }, [LVL_RF] = { .min = { .f = 0 }, .max = { .f = 1 }, .step = { .f = 1.0f/255.0f } }, - [LVL_RFPOWER] = { .min = { .f = .05 }, .max = { .f = 1 }, .step = { .f = 1.0f/100.0f } }, + [LVL_RFPOWER] = { .min = { .f = 5.0/255.0 }, .max = { .f = 1 }, .step = { .f = 1.0f/255.0f } }, [LVL_RFPOWER_METER] = { .min = { .f = 0 }, .max = { .f = 1 }, .step = { .f = 1.0f/255.0f } }, [LVL_COMP_METER] = { .min = { .f = 0 }, .max = { .f = 1 }, .step = { .f = 1.0f/255.0f } }, [LVL_ID_METER] = { .min = { .f = 0 }, .max = { .f = 1 }, .step = { .f = 1.0f/255.0f } }, diff --git a/rigs/yaesu/newcat.c b/rigs/yaesu/newcat.c index e990624e5..2fd09f867 100644 --- a/rigs/yaesu/newcat.c +++ b/rigs/yaesu/newcat.c @@ -3999,7 +3999,6 @@ int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) struct newcat_priv_data *priv = (struct newcat_priv_data *)rig->state.priv; int err; int i; - int scale; int fpf; char main_sub_vfo = '0'; char *format; @@ -4035,26 +4034,16 @@ int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) RETURNFUNC(-RIG_ENAVAIL); } - if (is_ft950 || is_ftdx1200 || is_ftdx3000 || is_ft891 || is_ft991 || is_ft710 - || is_ftdx101d || is_ftdx101mp || is_ftdx10) - { - scale = 100.; - } - else if (is_ft450 && newcat_get_rigid(rig) == NC_RIGID_FT450D) - { - scale = 100.; - } - else if (is_ftdx3000dm) - { - scale = 50; - } - else - { - scale = 255.; - } - - fpf = newcat_scale_float(scale, val.f); + if ( is_ftdx3000dm ) /* No separate rig->caps for this rig :-( */ + { + fpf = (int)((val.f * 50.0f) + 0.5f); + } + else + { + fpf = (int)((val.f / level_info->step.f) + 0.5f ); + } + //TODO Remove when global level checking enabled if (is_ft950 || is_ft891 || is_ft991 || is_ftdx3000 || is_ftdx3000dm || is_ftdx101d || is_ftdx101mp || is_ftdx10) @@ -4065,6 +4054,7 @@ int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) fpf = 5; } } + //endTODO SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "PC%03d%c", fpf, cat_term); break; @@ -4880,7 +4870,6 @@ int newcat_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) int ret_data_len; char *retlvl; int retlvl_len; - float scale; char main_sub_vfo = '0'; int i; gran_t *level_info; @@ -5436,25 +5425,6 @@ int newcat_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) switch (level) { - case RIG_LEVEL_RFPOWER: - if (is_ft950 || is_ftdx1200 || is_ftdx3000 || is_ftdx3000dm || is_ft891 - || is_ft991 || is_ft710 - || is_ftdx101d || is_ftdx101mp || is_ftdx10) - { - scale = 100.; - } - else if (is_ft450 && newcat_get_rigid(rig) == NC_RIGID_FT450D) - { - scale = 100.; - } - else - { - scale = 255.; - } - - val->f = (float)atoi(retlvl) / scale; - break; - case RIG_LEVEL_SWR: if (retlvl_len > 3) { @@ -5597,6 +5567,7 @@ int newcat_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) case RIG_LEVEL_ANTIVOX: case RIG_LEVEL_MICGAIN: case RIG_LEVEL_VOXGAIN: + case RIG_LEVEL_RFPOWER: case RIG_LEVEL_MONITOR_GAIN: val->f = (float)atoi(retlvl) * level_info->step.f; break; diff --git a/rigs/yaesu/yaesu.c b/rigs/yaesu/yaesu.c index e1e0d7633..19aec375e 100644 --- a/rigs/yaesu/yaesu.c +++ b/rigs/yaesu/yaesu.c @@ -72,6 +72,8 @@ DECLARE_INITRIG_BACKEND(yaesu) ft450d_caps = ft450_caps; ft450d_caps.rig_model = RIG_MODEL_FT450D; ft450d_caps.model_name = "FT-450D"; + ft450d_caps.level_gran[LVL_RFPOWER].min.f = .05; + ft450d_caps.level_gran[LVL_RFPOWER].step.f = 1.0f/100.0f; rig_register(&ft100_caps); rig_register(&ft450_caps); rig_register(&ft450d_caps); commit 915ee383fbe28806b10744eba744201579c5fa35 Author: George Baltz N3GB <Geo...@gm...> Date: Sun Jul 30 11:14:01 2023 -0400 Convert MONITOR_GAIN diff --git a/rigs/yaesu/ft1200.c b/rigs/yaesu/ft1200.c index 81e98000d..39477ff40 100644 --- a/rigs/yaesu/ft1200.c +++ b/rigs/yaesu/ft1200.c @@ -176,6 +176,7 @@ const struct rig_caps ftdx1200_caps = // cppcheck-suppress * [LVL_NOTCHF] = { .min = { .i = 1 }, .max = { .i = 4000 }, .step = { .i = 10 } }, [LVL_MICGAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, + [LVL_MONITOR_GAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, }, .ctcss_list = common_ctcss_list, .dcs_list = NULL, diff --git a/rigs/yaesu/ft3000.c b/rigs/yaesu/ft3000.c index 2070e672e..6973de01a 100644 --- a/rigs/yaesu/ft3000.c +++ b/rigs/yaesu/ft3000.c @@ -271,6 +271,7 @@ const struct rig_caps ftdx3000_caps = #include "level_gran_yaesu.h" [LVL_NOTCHF] = { .min = { .i = 1 }, .max = { .i = 4000 }, .step = { .i = 10 } }, [LVL_MICGAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, + [LVL_MONITOR_GAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, }, .ctcss_list = common_ctcss_list, .dcs_list = NULL, diff --git a/rigs/yaesu/ft710.c b/rigs/yaesu/ft710.c index 8cd55f461..5c7ada307 100644 --- a/rigs/yaesu/ft710.c +++ b/rigs/yaesu/ft710.c @@ -147,6 +147,7 @@ const struct rig_caps ft710_caps = #include "level_gran_yaesu.h" [LVL_MICGAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, [LVL_SQL] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, + [LVL_MONITOR_GAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, }, .ctcss_list = common_ctcss_list, .dcs_list = NULL, diff --git a/rigs/yaesu/ft891.c b/rigs/yaesu/ft891.c index 0ff29cb9b..0f2229a6e 100644 --- a/rigs/yaesu/ft891.c +++ b/rigs/yaesu/ft891.c @@ -160,6 +160,7 @@ const struct rig_caps ft891_caps = [LVL_RF] = { .min = { .f = 0 }, .max = { .f = 1.0f }, .step = { .f = 1.0f/30.0f } }, [LVL_MICGAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, [LVL_SQL] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, + [LVL_MONITOR_GAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, }, .ctcss_list = common_ctcss_list, .dcs_list = NULL, diff --git a/rigs/yaesu/ft991.c b/rigs/yaesu/ft991.c index 85738ba1d..7c5b27bc0 100644 --- a/rigs/yaesu/ft991.c +++ b/rigs/yaesu/ft991.c @@ -165,6 +165,7 @@ const struct rig_caps ft991_caps = #include "level_gran_yaesu.h" [LVL_MICGAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, [LVL_SQL] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, + [LVL_MONITOR_GAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, }, .ctcss_list = common_ctcss_list, .dcs_list = common_dcs_list, diff --git a/rigs/yaesu/ftdx10.c b/rigs/yaesu/ftdx10.c index 716bf6e35..35ae64b82 100644 --- a/rigs/yaesu/ftdx10.c +++ b/rigs/yaesu/ftdx10.c @@ -163,6 +163,7 @@ const struct rig_caps ftdx10_caps = #include "level_gran_yaesu.h" [LVL_MICGAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, [LVL_SQL] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, + [LVL_MONITOR_GAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, }, .ctcss_list = common_ctcss_list, .dcs_list = NULL, diff --git a/rigs/yaesu/ftdx101.c b/rigs/yaesu/ftdx101.c index d40bf972f..d06b384b4 100644 --- a/rigs/yaesu/ftdx101.c +++ b/rigs/yaesu/ftdx101.c @@ -163,6 +163,7 @@ const struct rig_caps ftdx101d_caps = #include "level_gran_yaesu.h" [LVL_MICGAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, [LVL_SQL] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, + [LVL_MONITOR_GAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, }, .ctcss_list = common_ctcss_list, .dcs_list = NULL, diff --git a/rigs/yaesu/ftdx101mp.c b/rigs/yaesu/ftdx101mp.c index 1840ec1b9..9ef8d46d9 100644 --- a/rigs/yaesu/ftdx101mp.c +++ b/rigs/yaesu/ftdx101mp.c @@ -100,6 +100,7 @@ const struct rig_caps ftdx101mp_caps = #include "level_gran_yaesu.h" [LVL_MICGAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, [LVL_SQL] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, + [LVL_MONITOR_GAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, }, .ctcss_list = common_ctcss_list, .dcs_list = NULL, diff --git a/rigs/yaesu/level_gran_yaesu.h b/rigs/yaesu/level_gran_yaesu.h index d0e9c52a5..7fdb383ff 100644 --- a/rigs/yaesu/level_gran_yaesu.h +++ b/rigs/yaesu/level_gran_yaesu.h @@ -35,7 +35,7 @@ [LVL_VD_METER] = { .min = { .f = 0 }, .max = { .f = 1 }, .step = { .f = 1.0f/255.0f } }, [LVL_SQL] = { .min = { .f = 0 }, .max = { .f = 1 }, .step = { .f = 1.0f/255.0f } }, [LVL_MICGAIN] = { .min = { .f = 0 }, .max = { .f = 1 }, .step = { .f = 1.0f/255.0f } }, - [LVL_MONITOR_GAIN] = { .min = { .f = 0 }, .max = { .f = 1 }, .step = { .f = 1.0f/100.0f } }, + [LVL_MONITOR_GAIN] = { .min = { .f = 0 }, .max = { .f = 1 }, .step = { .f = 1.0f/255.0f } }, [LVL_COMP] = { .min = { .f = 0 }, .max = { .f = 1 }, .step = { .f = 1.0f/100.0f } }, [LVL_VOXGAIN] = { .min = { .f = 0 }, .max = { .f = 1 }, .step = { .f = 1.0f/100.0f } }, [LVL_ANTIVOX] = { .min = { .f = 0 }, .max = { .f = 1 }, .step = { .f = 1.0f/100.0f } }, diff --git a/rigs/yaesu/newcat.c b/rigs/yaesu/newcat.c index a8c8fcf82..e990624e5 100644 --- a/rigs/yaesu/newcat.c +++ b/rigs/yaesu/newcat.c @@ -4799,19 +4799,10 @@ int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) RETURNFUNC(-RIG_ENAVAIL); } + //TODO Remove when full level checking enabled if (val.f > 1.0) { RETURNFUNC(-RIG_EINVAL); } - if (is_ftdx1200 || is_ftdx3000 || is_ftdx3000dm || is_ft891 || is_ft991 || is_ft710 - || is_ftdx101d - || is_ftdx101mp - || is_ftdx10) - { - fpf = newcat_scale_float(100, val.f); - } - else - { - fpf = newcat_scale_float(255, val.f); - } + fpf = (int)((val.f / level_info->step.f) + 0.5f); if (is_ftdx9000) { @@ -5606,6 +5597,7 @@ int newcat_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) case RIG_LEVEL_ANTIVOX: case RIG_LEVEL_MICGAIN: case RIG_LEVEL_VOXGAIN: + case RIG_LEVEL_MONITOR_GAIN: val->f = (float)atoi(retlvl) * level_info->step.f; break; @@ -5882,21 +5874,6 @@ int newcat_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) val->i = atoi(retlvl) * 10; break; - case RIG_LEVEL_MONITOR_GAIN: - if (is_ftdx1200 || is_ftdx3000 || is_ftdx3000dm || is_ft891 || is_ft991 || is_ft710 - || is_ftdx101d - || is_ftdx101mp) - { - scale = 100.; - } - else - { - scale = 255.; - } - - val->f = ((float) atoi(retlvl)) / scale; - break; - case RIG_LEVEL_NB: // Do not scale the value, level maximum value is set to 10 val->f = (float) atoi(retlvl); commit cbec337cd3f5cbaa9263a84139b4c29c81d48891 Author: George Baltz N3GB <Geo...@gm...> Date: Sat Jul 29 11:31:12 2023 -0400 Convert SQL to use level_gran data. diff --git a/rigs/yaesu/ft710.c b/rigs/yaesu/ft710.c index 8c850a42b..8cd55f461 100644 --- a/rigs/yaesu/ft710.c +++ b/rigs/yaesu/ft710.c @@ -146,6 +146,7 @@ const struct rig_caps ft710_caps = { #include "level_gran_yaesu.h" [LVL_MICGAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, + [LVL_SQL] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, }, .ctcss_list = common_ctcss_list, .dcs_list = NULL, diff --git a/rigs/yaesu/ft891.c b/rigs/yaesu/ft891.c index 9ce50b719..0ff29cb9b 100644 --- a/rigs/yaesu/ft891.c +++ b/rigs/yaesu/ft891.c @@ -159,6 +159,7 @@ const struct rig_caps ft891_caps = // cppcheck-suppress * [LVL_RF] = { .min = { .f = 0 }, .max = { .f = 1.0f }, .step = { .f = 1.0f/30.0f } }, [LVL_MICGAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, + [LVL_SQL] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, }, .ctcss_list = common_ctcss_list, .dcs_list = NULL, diff --git a/rigs/yaesu/ft991.c b/rigs/yaesu/ft991.c index 6dfd39d66..85738ba1d 100644 --- a/rigs/yaesu/ft991.c +++ b/rigs/yaesu/ft991.c @@ -164,6 +164,7 @@ const struct rig_caps ft991_caps = .level_gran = { #include "level_gran_yaesu.h" [LVL_MICGAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, + [LVL_SQL] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, }, .ctcss_list = common_ctcss_list, .dcs_list = common_dcs_list, diff --git a/rigs/yaesu/ftdx10.c b/rigs/yaesu/ftdx10.c index 7f9574c84..716bf6e35 100644 --- a/rigs/yaesu/ftdx10.c +++ b/rigs/yaesu/ftdx10.c @@ -162,6 +162,7 @@ const struct rig_caps ftdx10_caps = { #include "level_gran_yaesu.h" [LVL_MICGAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, + [LVL_SQL] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, }, .ctcss_list = common_ctcss_list, .dcs_list = NULL, diff --git a/rigs/yaesu/ftdx101.c b/rigs/yaesu/ftdx101.c index cfa8757ce..d40bf972f 100644 --- a/rigs/yaesu/ftdx101.c +++ b/rigs/yaesu/ftdx101.c @@ -162,6 +162,7 @@ const struct rig_caps ftdx101d_caps = { #include "level_gran_yaesu.h" [LVL_MICGAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, + [LVL_SQL] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, }, .ctcss_list = common_ctcss_list, .dcs_list = NULL, diff --git a/rigs/yaesu/ftdx101mp.c b/rigs/yaesu/ftdx101mp.c index 1eca8de1f..1840ec1b9 100644 --- a/rigs/yaesu/ftdx101mp.c +++ b/rigs/yaesu/ftdx101mp.c @@ -99,6 +99,7 @@ const struct rig_caps ftdx101mp_caps = .level_gran = { #include "level_gran_yaesu.h" [LVL_MICGAIN] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, + [LVL_SQL] = { .min = { .f = 0 }, .max = { .f = 1.0 }, .step = { .f = 1.0f/100.0f } }, }, .ctcss_list = common_ctcss_list, .dcs_list = NULL, diff --git a/rigs/yaesu/level_gran_yaesu.h b/rigs/yaesu/level_gran_yaesu.h index d99905a34..d0e9c52a5 100644 --- a/rigs/yaesu/level_gran_yaesu.h +++ b/rigs/yaesu/level_gran_yaesu.h @@ -33,7 +33,7 @@ [LVL_COMP_METER] = { .min = { .f = 0 }, .max = { .f = 1 }, .step = { .f = 1.0f/255.0f } }, [LVL_ID_METER] = { .min = { .f = 0 }, .max = { .f = 1 }, .step = { .f = 1.0f/255.0f } }, [LVL_VD_METER] = { .min = { .f = 0 }, .max = { .f = 1 }, .step = { .f = 1.0f/255.0f } }, - [LVL_SQL] = { .min = { .f = 0 }, .max = { .f = 1 }, .step = { .f = 1.0f/100.0f } }, + [LVL_SQL] = { .min = { .f = 0 }, .max = { .f = 1 }, .step = { .f = 1.0f/255.0f } }, [LVL_MICGAIN] = { .min = { .f = 0 }, .max = { .f = 1 }, .step = { .f = 1.0f/255.0f } }, [LVL_MONITOR_GAIN] = { .min = { .f = 0 }, .max = { .f = 1 }, .step = { .f = 1.0f/100.0f } }, [LVL_COMP] = { .min = { .f = 0 }, .max = { .f = 1 }, .step = { .f = 1.0f/100.0f } }, diff --git a/rigs/yaesu/newcat.c b/rigs/yaesu/newcat.c index 5ccee0253..a8c8fcf82 100644 --- a/rigs/yaesu/newcat.c +++ b/rigs/yaesu/newcat.c @@ -4615,16 +4615,7 @@ int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) RETURNFUNC(-RIG_ENAVAIL); } - if (is_ft891 || is_ft991 || is_ft710 || is_ftdx101d || is_ftdx101mp || is_ftdx10) - { - scale = 100; - } - else - { - scale = 255; - } - - fpf = newcat_scale_float(scale, val.f); + fpf = (int) ((val.f / level_info->step.f) + 0.5f ); SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "SQ%c%03d%c", main_sub_vfo, fpf, cat_term); @@ -5610,6 +5601,7 @@ int newcat_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) case RIG_LEVEL_AF: case RIG_LEVEL_RF: + case RIG_LEVEL_SQL: case RIG_LEVEL_COMP: case RIG_LEVEL_ANTIVOX: case RIG_LEVEL_MICGAIN: @@ -5617,19 +5609,6 @@ int newcat_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) val->f = (float)atoi(retlvl) * level_info->step.f; break; - case RIG_LEVEL_SQL: - if (is_ft891 || is_ft991 || is_ft710 || is_ftdx101d || is_ftdx101mp || is_ftdx10) - { - scale = 100.; - } - else - { - scale = 255.; - } - - val->f = (float)atoi(retlvl) / scale; - break; - case RIG_LEVEL_BKINDL: { int raw_value = atoi(retlvl); commit 90f0ffcdc9b9298728cd70864a500ff7c5a21f48 Author: Mike Black W9MDB <mdb...@ya...> Date: Thu Aug 3 08:14:15 2023 -0500 Add simts950 simts990 diff --git a/simulators/Makefile.am b/simulators/Makefile.am index 923ac3790..5fb482e10 100644 --- a/simulators/Makefile.am +++ b/simulators/Makefile.am @@ -8,7 +8,7 @@ DISTCLEANFILES = bin_PROGRAMS = -check_PROGRAMS = simelecraft simicgeneric simkenwood simyaesu simic9100 simic9700 simft991 simftdx1200 simftdx3000 simjupiter simpowersdr simid5100 simft736 simftdx5000 simtmd700 simrotorez simspid simft817 simts590 simft847 simic7300 simic7000 simic7100 simic7200 simatd578 simic905 simts450 simic7600 simic7610 simic705 +check_PROGRAMS = simelecraft simicgeneric simkenwood simyaesu simic9100 simic9700 simft991 simftdx1200 simftdx3000 simjupiter simpowersdr simid5100 simft736 simftdx5000 simtmd700 simrotorez simspid simft817 simts590 simft847 simic7300 simic7000 simic7100 simic7200 simatd578 simic905 simts450 simic7600 simic7610 simic705 simts950 simts990 simelecraft_SOURCES = simelecraft.c simkenwood_SOURCES = simkenwood.c diff --git a/simulators/simts950.c b/simulators/simts950.c new file mode 100644 index 000000000..54847ea02 --- /dev/null +++ b/simulators/simts950.c @@ -0,0 +1,425 @@ +// can run this using rigctl/rigctld and socat pty devices +// gcc -o simyaesu simyaesu.c +#define _XOPEN_SOURCE 700 +// since we are POSIX here we need this +struct ip_mreq +{ + int dummy; +}; + +#include <stdio.h> +#include <stdlib.h> +#include <fcntl.h> +#include <string.h> +#include <unistd.h> +#include <hamlib/rig.h> + +#define BUFSIZE 256 + +int mysleep = 20; + +float freqA = 14074000; +float freqB = 14074500; +int filternum1 = 7; +int filternum2 = 8; +int datamode = 0; +int vfo, vfo_tx, ptt, ptt_data, ptt_mic, ptt_tune; + +int +getmyline(int fd, char *buf) +{ + char c; + int i = 0; + memset(buf, 0, BUFSIZE); + + while (read(fd, &c, 1) > 0) + { + buf[i++] = c; + + if (c == ';') { return strlen(buf); } + } + + return strlen(buf); +} + +#if defined(WIN32) || defined(_WIN32) +int openPort(char *comport) // doesn't matter for using pts devices +{ + int fd; + fd = open(comport, O_RDWR); + + if (fd < 0) + { + perror(comport); + } + + return fd; +} + +#else +int openPort(char *comport) // doesn't matter for using pts devices +{ + int fd = posix_openpt(O_RDWR); + char *name = ptsname(fd); + + if (name == NULL) + { + perror("pstname"); + return -1; + } + + printf("name=%s\n", name); + + if (fd == -1 || grantpt(fd) == -1 || unlockpt(fd) == -1) + { + perror("posix_openpt"); + return -1; + } + + return fd; +} +#endif + + + +int main(int argc, char *argv[]) +{ + char buf[256]; + char *pbuf; + int n; + int fd = openPort(argv[1]); + int freqa = 14074000, freqb = 140735000; + int modeA = 1, modeB = 2; + + while (1) + { + buf[0] = 0; + + if (getmyline(fd, buf) > 0) { printf("Cmd:%s\n", buf); } + +// else { return 0; } + + if (strcmp(buf, "RM5;") == 0) + { + printf("%s\n", buf); + hl_usleep(mysleep * 1000); + pbuf = "RM5100000;"; + n = write(fd, pbuf, strlen(pbuf)); +// printf("n=%d\n", n); + + if (n <= 0) { perror("RM5"); } + } + + else if (strcmp(buf, "AN0;") == 0) + { + printf("%s\n", buf); + hl_usleep(mysleep * 1000); + pbuf = "AN030;"; + n = write(fd, pbuf, strlen(pbuf)); +// printf("n=%d\n", n); + + if (n <= 0) { perror("AN"); } + } + else if (strcmp(buf, "IF;") == 0) + { + char ifbuf[256]; + printf("%s\n", buf); + hl_usleep(mysleep * 1000); +// pbuf = "IF000503130001000+0000000000030000000;" + sprintf(ifbuf, "IF%011d1000+0000002000000000000;", freqa); + //pbuf = "IF00010138698 +00000000002000000 ; + n = write(fd, ifbuf, strlen(ifbuf)); +// printf("n=%d\n", n); + + if (n <= 0) { perror("IF"); } + + continue; + } + else if (strcmp(buf, "NB;") == 0) + { + hl_usleep(mysleep * 1000); + pbuf = "NB0;"; + n = write(fd, pbuf, strlen(pbuf)); + continue; + } + else if (strcmp(buf, "RA;") == 0) + { + hl_usleep(mysleep * 1000); + pbuf = "RA01;"; + n = write(fd, pbuf, strlen(pbuf)); + continue; + } + else if (strcmp(buf, "RG;") == 0) + { + hl_usleep(mysleep * 1000); + pbuf = "RG055;"; + n = write(fd, pbuf, strlen(pbuf)); + continue; + } + else if (strcmp(buf, "MG;") == 0) + { + hl_usleep(mysleep * 1000); + pbuf = "MG050;"; + n = write(fd, pbuf, strlen(pbuf)); + continue; + } + else if (strcmp(buf, "AG;") == 0) + { + hl_usleep(mysleep * 1000); + pbuf = "AG100;"; + n = write(fd, pbuf, strlen(pbuf)); + continue; + } + else if (strcmp(buf, "FV;") == 0) + { + hl_usleep(mysleep * 1000); + pbuf = "FV1.2;"; + n = write(fd, pbuf, strlen(pbuf)); + continue; + } + else if (strncmp(buf, "IS;", 3) == 0) + { + SNPRINTF(buf, siz... [truncated message content] |