Compare commits
1463 Commits
wsjtx-2.5.
...
master
Author | SHA1 | Date | |
---|---|---|---|
|
2b9d65408d | ||
|
c5a266b5e0 | ||
|
de9dc8e3fb | ||
|
5e410a982b | ||
|
2a9d0b6998 | ||
|
75f6b9b423 | ||
|
c7a93fca4a | ||
|
08785eff56 | ||
|
40fbc208fd | ||
|
1ac2fc23c3 | ||
|
d4a5ea60e6 | ||
|
86fd50304f | ||
|
75b4e0e798 | ||
|
ee68285583 | ||
|
ae50058498 | ||
|
587a16cd21 | ||
|
45151bda3b | ||
|
34b97b53f8 | ||
|
4c0d34477d | ||
|
72651037bd | ||
|
b83c41c8de | ||
|
ae61764af3 | ||
|
ae17011aa4 | ||
|
c228b6fe18 | ||
|
ffe1d11e99 | ||
|
3882953f51 | ||
|
3611f07ad6 | ||
|
98e48e00d3 | ||
|
20c41cf45b | ||
|
200168fd37 | ||
|
b7efe4d26d | ||
|
d67a406bf0 | ||
|
41407dad9f | ||
|
f59b5a48f7 | ||
|
c251764252 | ||
|
2655e41dd6 | ||
|
d4e2c21053 | ||
|
226b17d0ea | ||
|
495170e7a1 | ||
|
90b7ff7da9 | ||
|
aac9de3e4c | ||
|
e205bf0ca6 | ||
|
b84742b1fc | ||
|
7be1c34ea0 | ||
|
0705bd329e | ||
|
6474f7e1cf | ||
|
adc0345ef3 | ||
|
69a19946df | ||
|
4ec84087c7 | ||
|
05c3389307 | ||
|
9223ae3393 | ||
|
e178df928e | ||
|
8a2051e439 | ||
|
47c64f3675 | ||
|
d155abe274 | ||
|
9babd4616b | ||
|
e81cafa2c2 | ||
|
55286b05a9 | ||
|
b3d8750949 | ||
|
3a5da4b2ac | ||
|
ae64b71498 | ||
|
74f07211c3 | ||
|
db3c7c4668 | ||
|
14b60aa146 | ||
|
153c2e4212 | ||
|
9044718e36 | ||
|
cc9c1c62c9 | ||
|
8a899d000e | ||
|
6e6caa0d82 | ||
|
447127a49f | ||
|
24bfc9f30d | ||
|
9c45e510ff | ||
|
059096534b | ||
|
2f46104140 | ||
|
4af9c58bb0 | ||
|
ae1cf334e2 | ||
|
ff39abab58 | ||
|
f7e16671ab | ||
|
8be743e0b8 | ||
|
ae14fa13e9 | ||
|
9c3cc3d685 | ||
|
13a8efd533 | ||
|
80ed717aab | ||
|
8d17c7095c | ||
|
7a0a1736a7 | ||
|
f93d846c22 | ||
|
42f322e461 | ||
|
f98009daab | ||
|
c7e13191f1 | ||
|
2584b5ef3b | ||
|
6dc971d304 | ||
|
fbfc157e79 | ||
|
12042f6ae8 | ||
|
764fcaadcb | ||
|
53db514d42 | ||
|
e6fb080071 | ||
|
32c3cb7c4a | ||
|
faae78e0e6 | ||
|
bd4edcce49 | ||
|
07e82b0c40 | ||
|
d594d14a1e | ||
|
bb4564f734 | ||
|
9e0425ef40 | ||
|
c733c0c123 | ||
|
69f98d5c5c | ||
|
7f7a5322ed | ||
|
606506f578 | ||
|
4a4225bb9c | ||
|
b5bbf4a860 | ||
|
986eaf5d40 | ||
|
232c680a41 | ||
|
69f3186b13 | ||
|
05ed9c050d | ||
|
a4e7b915de | ||
|
a7b6798c99 | ||
|
a7cef9fc89 | ||
|
0d46c8a66e | ||
|
2a4ab7e92f | ||
|
f3be4b47fa | ||
|
fd0336f234 | ||
|
7276e86e60 | ||
|
5cc82189e6 | ||
|
ac0055b303 | ||
|
0f417374c3 | ||
|
ce2a4d2fe7 | ||
|
40cba29e5f | ||
|
f3308b7ee4 | ||
|
2c2deab91a | ||
|
6cab8c3da9 | ||
|
76007c8031 | ||
|
673f74e67b | ||
|
1d21dff93f | ||
|
3ebf72076c | ||
|
5bac396d60 | ||
|
efe8f090c2 | ||
|
1f0ddb92c5 | ||
|
887bc433ec | ||
|
3546fd4ba2 | ||
|
0eaf3360d8 | ||
|
115f850cd1 | ||
|
a4395c5d08 | ||
|
e0078bf01e | ||
|
e92d5ca1f5 | ||
|
fcee51cea8 | ||
|
f086aeb95a | ||
|
c1253954f6 | ||
|
c8cbb481a0 | ||
|
826fa8ae03 | ||
|
d3e9f3fc5a | ||
|
5bacc2d763 | ||
|
6b5db9fd0c | ||
|
08d9ebaf1a | ||
|
6ec9466dc1 | ||
|
cdb7b02835 | ||
|
031f7fc1e6 | ||
|
95daa2d791 | ||
|
b13c7d8dca | ||
|
171662ba50 | ||
|
4e935e01f3 | ||
|
9545c8eaa2 | ||
|
8f8f135e02 | ||
|
50bd14937f | ||
|
e42e995c59 | ||
|
2fb711401f | ||
|
889531fda6 | ||
|
e211bae779 | ||
|
517ca61f5c | ||
|
8be6d702d2 | ||
|
6f8c326717 | ||
|
35a1d37012 | ||
|
97fac57830 | ||
|
44bd5f9ac8 | ||
|
363e301e31 | ||
|
84ec6bb457 | ||
|
50519bc282 | ||
|
1f78fe5f2c | ||
|
20c090e2bc | ||
|
2e715fa47d | ||
|
d5a8ce97e3 | ||
|
bb5e8efd52 | ||
|
6afced7335 | ||
|
90f3c59ea0 | ||
|
f42a1bb357 | ||
|
9d5f3858d4 | ||
|
1aeaec7a6d | ||
|
186abfe99e | ||
|
c45420b194 | ||
|
1b3f4315b1 | ||
|
5e8deecdb4 | ||
|
7255a7c86a | ||
|
1542b7f857 | ||
|
9c7c837dc8 | ||
|
e040c926b9 | ||
|
11f8efd2a9 | ||
|
e2ef2c7dbb | ||
|
c413ea2f14 | ||
|
b0ea3a2eb5 | ||
|
717fd42ac1 | ||
|
d9cab59537 | ||
|
61fc069443 | ||
|
2f1082e973 | ||
|
adc457214f | ||
|
5d94775c7d | ||
|
91c0e43ef6 | ||
|
0cf01f1248 | ||
|
f525f08365 | ||
|
6019101018 | ||
|
115c4c4e30 | ||
|
ac1b5d03b2 | ||
|
6e9dc42881 | ||
|
e6fad89904 | ||
|
fe19a7263d | ||
|
57aca5c222 | ||
|
0d74918634 | ||
|
43019d0cb4 | ||
|
7622915147 | ||
|
62eb8fa3e9 | ||
|
8ae939b573 | ||
|
0455cf23e6 | ||
|
7f660d62fa | ||
|
bf861d9979 | ||
|
d62cdbaf2b | ||
|
ff2f2b00b9 | ||
|
cb7395b504 | ||
|
93dba5e623 | ||
|
05931313b3 | ||
|
7348bc323e | ||
|
76e28298a3 | ||
|
c6fb86067e | ||
|
711ea392ef | ||
|
456c5de125 | ||
|
c02b977c94 | ||
|
d8570e6817 | ||
|
74c6d9eb64 | ||
|
0456b3af8c | ||
|
bfd44f178a | ||
|
4a9c4dac6f | ||
|
f6989c3e6c | ||
|
5e9b9ff2d4 | ||
|
b986c7c81c | ||
|
330db0feb4 | ||
|
933aa29451 | ||
|
f394d77be7 | ||
|
5d3e927648 | ||
|
6546846f2c | ||
|
05ae0ee9af | ||
|
6156cf0d7d | ||
|
48ae40d781 | ||
|
60bcd6291d | ||
|
18b9dbf41b | ||
|
ce7a1c26fc | ||
|
3fcb8d3deb | ||
|
84069fe9e9 | ||
|
d4d47f8323 | ||
|
dece2e9fc5 | ||
|
c5969b0434 | ||
|
d76790adc3 | ||
|
b073fa0550 | ||
|
e8162970de | ||
|
97ed4022a2 | ||
|
893565f40d | ||
|
9913111464 | ||
|
ba453131eb | ||
|
2e3c37d7b2 | ||
|
bf70fae0bf | ||
|
64f53f30ff | ||
|
f75969ffb6 | ||
|
8ecdebaeba | ||
|
a3a02a8996 | ||
|
06d1469c10 | ||
|
ea8737e9f1 | ||
|
c65ebb16d5 | ||
|
b2a1c2d977 | ||
|
2ba2a580ff | ||
|
9a863d6590 | ||
|
b04e1517a9 | ||
|
3b03c9c824 | ||
|
2d9bebddbe | ||
|
fea274ed57 | ||
|
e4dca8e241 | ||
|
cbcf0c0ecd | ||
|
28d014e634 | ||
|
4f874b6507 | ||
|
630f0c34c3 | ||
|
c2883532ed | ||
|
ce2e94de26 | ||
|
88852bebe6 | ||
|
ec9682b57b | ||
|
68aae12588 | ||
|
99876a1916 | ||
|
54e46d90f2 | ||
|
4667929d0e | ||
|
256c0c8855 | ||
|
7f09f15f17 | ||
|
9125e8bdcc | ||
|
fc135f8e03 | ||
|
46676e4715 | ||
|
b697cd8ad1 | ||
|
60bc448413 | ||
|
60dbba359b | ||
|
c52ba84a49 | ||
|
596f9ba10f | ||
|
4671b9de0b | ||
|
383ff7e91a | ||
|
ca461d8f61 | ||
|
61ac076f7d | ||
|
be4b56139f | ||
|
72990e5cd3 | ||
|
72f3075836 | ||
|
1d881fcd25 | ||
|
6a151a63cc | ||
|
bf3fd11b28 | ||
|
1280dbe93a | ||
|
f3804569f2 | ||
|
79afbec133 | ||
|
0305d52671 | ||
|
a6a9c64ab0 | ||
|
05a50fe92a | ||
|
20eaa48ded | ||
|
84ce78e361 | ||
|
df8ef88501 | ||
|
cb70a45817 | ||
|
662af6ff7e | ||
|
7bb16bb9f4 | ||
|
3ce6674762 | ||
|
102af03057 | ||
|
dc35b4983e | ||
|
f9a93443ad | ||
|
2c98a4741e | ||
|
ea0ae2b18a | ||
|
efc1ac57fa | ||
|
df04b961e9 | ||
|
635b5f1ede | ||
|
5ea28b6103 | ||
|
3a6834baee | ||
|
f1b1af6e14 | ||
|
aff4469e84 | ||
|
cdff282c5c | ||
|
a97cebff4c | ||
|
e2085b0dd5 | ||
|
8ec78120a0 | ||
|
afd97aeb68 | ||
|
51539952b7 | ||
|
a7b489f373 | ||
|
cc22bd2819 | ||
|
db54472a5a | ||
|
d307193e0a | ||
|
7aa00f33a8 | ||
|
c348791b28 | ||
|
da8e6e92b3 | ||
|
21e377d363 | ||
|
d08a056c8e | ||
|
c249d1fe7b | ||
|
69f9c1f95d | ||
|
5d61d2bf17 | ||
|
a321348dfa | ||
|
570e9ceaf7 | ||
|
9151861c6d | ||
|
491f783224 | ||
|
a7413ae627 | ||
|
88b1e46ee4 | ||
|
b812ac2786 | ||
|
b8b0b73145 | ||
|
bc9d786cca | ||
|
ce8fef82c1 | ||
|
95b0669e55 | ||
|
507f5567b8 | ||
|
8f66be4253 | ||
|
e538469f8f | ||
|
58c4749ae3 | ||
|
36ced490a3 | ||
|
ee6cd7aa0e | ||
|
290dcd0b11 | ||
|
8723fea62b | ||
|
2b7a76232f | ||
|
eebababece | ||
|
4e7aa28ed4 | ||
|
4baca1ca60 | ||
|
715e8d1b14 | ||
|
19bc663abf | ||
|
d021c62d2f | ||
|
de0a3d60e3 | ||
|
7a6dbf60a5 | ||
|
67301c8402 | ||
|
a28316212b | ||
|
40ae967fa6 | ||
|
663ed60013 | ||
|
df3e922ed8 | ||
|
898b4edcdb | ||
|
ab3c24ee30 | ||
|
aac29fd2d4 | ||
|
82ed2b5872 | ||
|
29f6d50663 | ||
|
e9f43cf0ef | ||
|
8621b62b8b | ||
|
9dac5a2ef0 | ||
|
453b1577fc | ||
|
4c3bf37294 | ||
|
f45369af8d | ||
|
a215199fd1 | ||
|
f9b5d5a865 | ||
|
77f14560ff | ||
|
f15ad2b9a2 | ||
|
0493d03485 | ||
|
3dec36b9bd | ||
|
8cec7c7e2a | ||
|
e1865d4a4d | ||
|
a4adfcc149 | ||
|
9c953d1f2d | ||
|
9fadcad322 | ||
|
b54d7f2335 | ||
|
2375e2000c | ||
|
fb9fd768f8 | ||
|
04b49c1038 | ||
|
d58bd69884 | ||
|
0a243544d4 | ||
|
664194eb0c | ||
|
80d7de8839 | ||
|
fa1b5c55d1 | ||
|
df2728efb4 | ||
|
6a6647c5f8 | ||
|
5d0b580093 | ||
|
73e1198f08 | ||
|
631e3ed1cb | ||
|
3f7888a5c7 | ||
|
969411cd39 | ||
|
06f3b36939 | ||
|
dddb542a66 | ||
|
5ccf66e6b4 | ||
|
6be56a775e | ||
|
16f9f50263 | ||
|
92c9dd7fd6 | ||
|
d870c06b8e | ||
|
910b58ace8 | ||
|
1e96c8ae85 | ||
|
68e4671e00 | ||
|
3f5cbbb147 | ||
|
ce622487ca | ||
|
39c935a882 | ||
|
56dfb99a5d | ||
|
f1dbb8d134 | ||
|
bfeab39f8c | ||
|
b6bd9072d5 | ||
|
0eaf79020f | ||
|
86965dd96b | ||
|
f98bbabd27 | ||
|
96c7d6bf36 | ||
|
b61e8aeb24 | ||
|
c73fd39d47 | ||
|
f968c74093 | ||
|
5cdc476cbc | ||
|
280dd373d3 | ||
|
cd14778f0d | ||
|
4416c21f1b | ||
|
53bf3f4de1 | ||
|
20199c33b9 | ||
|
47aeb84c05 | ||
|
da3c63e739 | ||
|
f9d2ca736d | ||
|
b5f9e0ff03 | ||
|
6877a87fe4 | ||
|
37cd5b3ede | ||
|
f79e52a655 | ||
|
9d576c1bff | ||
|
b252abb462 | ||
|
7513a63ac5 | ||
|
aef5c198bb | ||
|
cbe674bedd | ||
|
0a139e5acd | ||
|
7bf6a6123d | ||
|
df2c767488 | ||
|
871198c44f | ||
|
31bc12e3b9 | ||
|
260f867cb9 | ||
|
d1a1578bc7 | ||
|
a83649a768 | ||
|
d6dd701601 | ||
|
88798f1ca3 | ||
|
8db7c2c128 | ||
|
0c0ecd893b | ||
|
1816e80707 | ||
|
43ca0b3f9c | ||
|
1b7830825a | ||
|
54709bdcaf | ||
|
5bd1ec3c49 | ||
|
b5a045c63b | ||
|
47a899465f | ||
|
019529d293 | ||
|
29360db01a | ||
|
46fdc79881 | ||
|
2d7b76ff03 | ||
|
3c3d3ebf3a | ||
|
ad4fb2be9d | ||
|
fb573ef407 | ||
|
6979a56d5d | ||
|
a87c308823 | ||
|
935ad492e6 | ||
|
86c863f288 | ||
|
0391144683 | ||
|
61c1d8bcc5 | ||
|
652bfb8429 | ||
|
e72b39a9d9 | ||
|
dd8c01f31c | ||
|
1795619b2c | ||
|
b1c82758ee | ||
|
41a1b4cf06 | ||
|
af5193014e | ||
|
1f438e6ba1 | ||
|
e0639169a9 | ||
|
646c353e5d | ||
|
f976d32013 | ||
|
f83db225f5 | ||
|
a76239dd76 | ||
|
afcb034956 | ||
|
aec42afda7 | ||
|
1fff588991 | ||
|
73db6eb28f | ||
|
d7859062bb | ||
|
0a439019b3 | ||
|
28a48ae6fc | ||
|
18e8c89a43 | ||
|
4ea595eea1 | ||
|
920b1a9b92 | ||
|
b8d20bd4de | ||
|
31bedb8528 | ||
|
96aa4fd85c | ||
|
70988919f0 | ||
|
e15d51f275 | ||
|
824478697b | ||
|
2992a37ae1 | ||
|
a4a3f95dac | ||
|
33a836242c | ||
|
21ef0c9d30 | ||
|
548eb1906b | ||
|
af04310f93 | ||
|
6f02c86d9a | ||
|
f4475740c1 | ||
|
4dd8dd456f | ||
|
be95a0c699 | ||
|
19182d3059 | ||
|
5ea9296944 | ||
|
0bf8193601 | ||
|
cfbb2ce1fe | ||
|
848a38f1b4 | ||
|
6b6d74cad8 | ||
|
948706272a | ||
|
9ec349dd26 | ||
|
66c8390c61 | ||
|
8319d3633d | ||
|
5e6b5b032c | ||
|
e02c430f9d | ||
|
ea0fb3a2d4 | ||
|
a7a1507b3d | ||
|
3efea6f1f5 | ||
|
1ec95a48f4 | ||
|
18ab1ce087 | ||
|
f7928f060e | ||
|
7f9a58483c | ||
|
210ee2147e | ||
|
f0e387bf18 | ||
|
02bf562712 | ||
|
4ed849580c | ||
|
0fd1f748fd | ||
|
9e6de4fab4 | ||
|
9e6ecbe8f4 | ||
|
245ebfa4d6 | ||
|
d2f8251d96 | ||
|
8f159db056 | ||
|
fc040d435a | ||
|
3b0e2edb75 | ||
|
c0d327b4be | ||
|
53bbf4bf23 | ||
|
dd243da82a | ||
|
b15b0790ad | ||
|
75a4dcdc4e | ||
|
434b0ec4e4 | ||
|
47c0fd15f9 | ||
|
029977c619 | ||
|
3958f66fd2 | ||
|
c912088107 | ||
|
b7a9ef3e63 | ||
|
0c4c0ba44d | ||
|
8207a72bec | ||
|
d821c87238 | ||
|
1371a750c4 | ||
|
64753c3f7f | ||
|
5c1adb293b | ||
|
6eedc7b439 | ||
|
562666169d | ||
|
91576d142f | ||
|
5fa736d08a | ||
|
23db815e0e | ||
|
8eecf98972 | ||
|
a4b2b4f51c | ||
|
8abdba46d3 | ||
|
ed4b3d1b5a | ||
|
a14d9cc6eb | ||
|
dbf45d9253 | ||
|
a6018be27a | ||
|
f63bd5958f | ||
|
6f3ae5190d | ||
|
3eec292986 | ||
|
ee497eecff | ||
|
ce8bc142f6 | ||
|
0bf83a8188 | ||
|
7c12c66f16 | ||
|
bb8663dce0 | ||
|
92d7f7c7de | ||
|
954d35bd52 | ||
|
90b49ddc0a | ||
|
88cbc521bd | ||
|
e0e7ac69fa | ||
|
b0e5ff0013 | ||
|
ceb80ac810 | ||
|
a085b5e390 | ||
|
e398b6a33d | ||
|
706351400f | ||
|
2716b3ed8a | ||
|
4b9763b982 | ||
|
c2fdba0b6e | ||
|
4ca2b2f219 | ||
|
8b165d81b8 | ||
|
d0cf7ea497 | ||
|
291410f3c2 | ||
|
8dcb41c47e | ||
|
7105d67e2b | ||
|
930e1e5a9c | ||
|
6771bd7970 | ||
|
8d0186bd2a | ||
|
042ff589fb | ||
|
2fcf6c45fe | ||
|
5f94a115f7 | ||
|
e4dd4b98a8 | ||
|
58964d1f87 | ||
|
469caa7d0c | ||
|
1773a70d79 | ||
|
2d4083e2cf | ||
|
6f59ddeab1 | ||
|
cbad491438 | ||
|
ca9406664e | ||
|
90c1598f1e | ||
|
31524396d2 | ||
|
a60edeb607 | ||
|
439f17c123 | ||
|
b288b20289 | ||
|
388f61b45c | ||
|
8507f6ff46 | ||
|
68d036913a | ||
|
db00402aad | ||
|
f68d4e2e6f | ||
|
9d89042d44 | ||
|
01df4a8c1e | ||
|
815200acdf | ||
|
4aace2d75c | ||
|
f024605d5a | ||
|
3fd9d5e976 | ||
|
5579c0a729 | ||
|
d1d92334bd | ||
|
00d405137a | ||
|
516c83d4f9 | ||
|
63bc2a6495 | ||
|
d3be147d35 | ||
|
bb47b65e9b | ||
|
d9211aee28 | ||
|
079927a8d8 | ||
|
173aab72e7 | ||
|
1c75702420 | ||
|
504a62bf93 | ||
|
16214c2ff1 | ||
|
d808521b0f | ||
|
a3c7b421bd | ||
|
0e12c8f3f4 | ||
|
fc2273dc67 | ||
|
b9b9fe6412 | ||
|
7d63433fe4 | ||
|
d2034e7c71 | ||
|
7b3587fcfd | ||
|
12539d3efe | ||
|
39318e9d21 | ||
|
ecaa0b8861 | ||
|
97b58a387b | ||
|
bac3198f7f | ||
|
e7b5db7b8e | ||
|
4b4a6162d6 | ||
|
6ccd2a290b | ||
|
fed64b6d9f | ||
|
994e9ca929 | ||
|
d0ea461355 | ||
|
74c3d55e7f | ||
|
6cc2a50aa0 | ||
|
dc23772f9e | ||
|
33382c1c88 | ||
|
f83a5c6cbe | ||
|
d8093cf4dc | ||
|
9f1c616487 | ||
|
d26f8c1a30 | ||
|
0e416e5d1f | ||
|
1dba0e1602 | ||
|
4b3cc34fa5 | ||
|
689d852a49 | ||
|
61d9d45be1 | ||
|
1a5815f084 | ||
|
e26b2db967 | ||
|
ff56d9fa0b | ||
|
9ff1f9ff3f | ||
|
10c70d042c | ||
|
f21d2ca9b1 | ||
|
83b833a4f7 | ||
|
2bbcd1010a | ||
|
df21127af7 | ||
|
24859b0b3a | ||
|
fcee5057f2 | ||
|
5054fb9e4e | ||
|
f4412ea7e2 | ||
|
5344fa559c | ||
|
f519ff7592 | ||
|
86e9ecb651 | ||
|
c6d13a7984 | ||
|
df96e8dee3 | ||
|
ffe6ed7a1c | ||
|
df388a35f0 | ||
|
3a9bb0a22e | ||
|
c4288b143d | ||
|
4d51c4e0a8 | ||
|
defb89573f | ||
|
c1972fc2dd | ||
|
3dc206dc2b | ||
|
8c2fec1212 | ||
|
a7a53dc3ba | ||
|
1099837b50 | ||
|
c98eb2019f | ||
|
58075a4443 | ||
|
f88f5ddc7a | ||
|
29abbedfe8 | ||
|
c2352bd00a | ||
|
52b946f546 | ||
|
43c3a5ec26 | ||
|
61796515af | ||
|
7f6f260dc8 | ||
|
bac63c1ea7 | ||
|
50f2ef1931 | ||
|
ce23a1897b | ||
|
fa5a63df8a | ||
|
8a70f9c131 | ||
|
2a2bc4e69b | ||
|
cd5a925208 | ||
|
2a97ba420e | ||
|
532d36dc77 | ||
|
c3d8e96c8f | ||
|
e4a7f3a22a | ||
|
27f304752a | ||
|
053ba57dc4 | ||
|
17eae05c53 | ||
|
88f542cd36 | ||
|
9ba8ae0b9b | ||
|
de841889b5 | ||
|
adc04fd71e | ||
|
8731f9e75a | ||
|
4c83311f5a | ||
|
dec65a1b7a | ||
|
dc69832745 | ||
|
f7421feb62 | ||
|
c8e64db9d4 | ||
|
f216648c05 | ||
|
44729ebe00 | ||
|
4160256747 | ||
|
5daa5f301d | ||
|
32411d1fd0 | ||
|
0055222306 | ||
|
6c018cb53f | ||
|
51eb142f4c | ||
|
db936dffc1 | ||
|
ef79bed994 | ||
|
14b1a71517 | ||
|
4e071495a0 | ||
|
89dd922cef | ||
|
a8979b01d1 | ||
|
104fcf2193 | ||
|
d3bcc2c6b4 | ||
|
a36a99997b | ||
|
8436eac2e2 | ||
|
f77a249c3d | ||
|
86c3f6aa90 | ||
|
3c8a8d518a | ||
|
fb01223768 | ||
|
d37e887eb9 | ||
|
119c838629 | ||
|
e443cb27c6 | ||
|
b3f6d41f4b | ||
|
94aec3766e | ||
|
d380be4ab4 | ||
|
11db3eb1f3 | ||
|
a247bcae94 | ||
|
0820a86d37 | ||
|
f59e9cba04 | ||
|
1069e705d2 | ||
|
bed8904298 | ||
|
bb756db817 | ||
|
23ca8f76c8 | ||
|
9d28082cc1 | ||
|
31676f0cc5 | ||
|
2ba4496baf | ||
|
e7dde090bf | ||
|
fcc10c1f69 | ||
|
940b26e6ea | ||
|
2b08cd9e4b | ||
|
31657834e3 | ||
|
44d947ff95 | ||
|
94334f2b6c | ||
|
d52621b928 | ||
|
7824ce6339 | ||
|
d789beaa82 | ||
|
2eb04f5c86 | ||
|
19229bc0c3 | ||
|
2b0aa9325d | ||
|
eae509f08d | ||
|
377d309d89 | ||
|
7187172d02 | ||
|
339c3a042d | ||
|
dedc54e449 | ||
|
a99798fec4 | ||
|
cb19944508 | ||
|
0cd2935b8c | ||
|
bc8ee62900 | ||
|
1bcbca4634 | ||
|
35d758647d | ||
|
1bcad2eda5 | ||
|
f4e8ee4f75 | ||
|
2e59bd79d3 | ||
|
0256bbb807 | ||
|
4e6db5063c | ||
|
e29eb263b5 | ||
|
f9df36989c | ||
|
f0c5b772df | ||
|
0fd396c903 | ||
|
5a0138fa02 | ||
|
c185f8578f | ||
|
98a67820c8 | ||
|
11396731d5 | ||
|
68f986defd | ||
|
c1da94ebf2 | ||
|
a39a48d76a | ||
|
70926b2a40 | ||
|
eb33b6029f | ||
|
5db0b06aeb | ||
|
85cb05a812 | ||
|
923de0ef38 | ||
|
f91e8e3cf1 | ||
|
6f36f7eea2 | ||
|
f98ec44e98 | ||
|
31f429724d | ||
|
9520eb1309 | ||
|
8e3b285f17 | ||
|
f9423aa6d4 | ||
|
ca4fac2fd0 | ||
|
3a069e47a3 | ||
|
088429f468 | ||
|
9e8a9f6a61 | ||
|
df45d53dba | ||
|
3bbc7e62f8 | ||
|
3f94b75912 | ||
|
8c916c14d4 | ||
|
7cc46af421 | ||
|
9243342ddd | ||
|
e9de8060de | ||
|
7656475fdc | ||
|
7ed12d8507 | ||
|
f8b21ea5e6 | ||
|
077b44f901 | ||
|
731230315b | ||
|
28a62c9aba | ||
|
b301b6ba44 | ||
|
04cad09683 | ||
|
b73120dd48 | ||
|
32a823afa7 | ||
|
64108e85ea | ||
|
c3579831ba | ||
|
6e1529b1cc | ||
|
eb1a4e4a65 | ||
|
1d8d6cf2ce | ||
|
2b15f0bf0f | ||
|
eb8fba2598 | ||
|
14a3ba02f2 | ||
|
fd09b426ea | ||
|
a569d25ddb | ||
|
c1b7890f2e | ||
|
50e3960ee4 | ||
|
ca04a2f3bb | ||
|
0bf35fa91f | ||
|
036c612d41 | ||
|
aea5184a6d | ||
|
9e177a9496 | ||
|
1e893ecafd | ||
|
8f8ee53b6f | ||
|
06849ac2ce | ||
|
3bb141cfbd | ||
|
09c3412aca | ||
|
66b90904cf | ||
|
6e5efdfda2 | ||
|
c81bcfa3ef | ||
|
62e5acd82b | ||
|
f38f5c0933 | ||
|
14452cd054 | ||
|
8cdbea788f | ||
|
5e4bd8ac9f | ||
|
7db3d80c90 | ||
|
c8ff0c221e | ||
|
38e66d4c63 | ||
|
9cb7772c4b | ||
|
ac151875ce | ||
|
91b3829849 | ||
|
6126baa8ac | ||
|
eee18ba764 | ||
|
db8ff74c50 | ||
|
45e4599008 | ||
|
f84b42678e | ||
|
d0a6be96e4 | ||
|
75516e8ce4 | ||
|
bfb5665c36 | ||
|
92df1fbd0c | ||
|
a483daf985 | ||
|
d08c1e106a | ||
|
a767a7dd1e | ||
|
f683d47f5b | ||
|
8eec2b58c0 | ||
|
5b52b30d56 | ||
|
3bdadf247a | ||
|
7cdb363c8c | ||
|
9c67aa8182 | ||
|
00f29458b3 | ||
|
d80146312f | ||
|
541aa37c79 | ||
|
ca39746dc5 | ||
|
4c4a5fe023 | ||
|
f46e42e622 | ||
|
b1000ee153 | ||
|
8992bbc16f | ||
|
2e82ce4546 | ||
|
d4ed6785fb | ||
|
3fb362ac28 | ||
|
d70f637632 | ||
|
c774e71bfe | ||
|
e3bceafe3a | ||
|
f9ce51c039 | ||
|
6396980de3 | ||
|
45532ed55c | ||
|
cc541973fc | ||
|
dbdfbb41a7 | ||
|
a69e3756b6 | ||
|
fd4a2e3b61 | ||
|
9d0e211844 | ||
|
992ee5140c | ||
|
994e3f1c3d | ||
|
3c98c9df41 | ||
|
2e4a6c3c32 | ||
|
c296bca73a | ||
|
215208636c | ||
|
c60aa83aa5 | ||
|
8bd3dd65bb | ||
|
aa16455320 | ||
|
8e4f293127 | ||
|
af3e06144c | ||
|
a4792074e4 | ||
|
47a89bc2c9 | ||
|
fadda93f2f | ||
|
320ddc0338 | ||
|
5759f06d6d | ||
|
a5f963233b | ||
|
e5bf51abf6 | ||
|
e1fde92ea2 | ||
|
fffc88de69 | ||
|
f20687f9fb | ||
|
a1106aff46 | ||
|
cd0a0e6db4 | ||
|
c85ed8cc7d | ||
|
68a534221b | ||
|
d81a3d799c | ||
|
31696388b9 | ||
|
9d90ede3de | ||
|
dd384d0765 | ||
|
4545195a32 | ||
|
4822b94350 | ||
|
566d01aa23 | ||
|
da282209f1 | ||
|
f84ba8a0d0 | ||
|
1f575bbe67 | ||
|
8b767b4c75 | ||
|
599cf1b7d6 | ||
|
c97c53db89 | ||
|
9adb1c8256 | ||
|
bc635f0cd7 | ||
|
3caaf785bd | ||
|
951d17b20c | ||
|
0ef914fb5c | ||
|
345e539074 | ||
|
219c04f5a4 | ||
|
e575005291 | ||
|
6744bc5468 | ||
|
121091c14e | ||
|
3beeb06dec | ||
|
6ca7523adf | ||
|
f77eb1ddf8 | ||
|
bdf33b6ab3 | ||
|
b968fe2b76 | ||
|
14bf6d5ec1 | ||
|
43cd871413 | ||
|
014a8e5104 | ||
|
0aeee4cdf8 | ||
|
a3d57024d5 | ||
|
9667fd837b | ||
|
ba03e471bc | ||
|
372b43df26 | ||
|
0fa2cf2166 | ||
|
95282f062e | ||
|
c5fe615a7b | ||
|
d6299e8a78 | ||
|
d4beab04bf | ||
|
fa111e6e87 | ||
|
f1497fbabb | ||
|
4664aec597 | ||
|
53bb5268ca | ||
|
8164e27909 | ||
|
ce13ca8800 | ||
|
148066135e | ||
|
cac0ea44ea | ||
|
c7e7062b8a | ||
|
a6e6b91cee | ||
|
f5291f280e | ||
|
bbb280b4f3 | ||
|
b9b3d1d6f5 | ||
|
eef441ec87 | ||
|
855daf92c4 | ||
|
a469b67afb | ||
|
b100a11835 | ||
|
c073fefa74 | ||
|
062f3a8037 | ||
|
f5ec31d3a1 | ||
|
df502242f2 | ||
|
7cdd2da5d5 | ||
|
7d8d0b8b94 | ||
|
581ef8b6e5 | ||
|
87dcde7564 | ||
|
03b680dee5 | ||
|
3b361b6d24 | ||
|
d0dd88de40 | ||
|
64a124ff20 | ||
|
7021477e21 | ||
|
4331594e4a | ||
|
d1c7efb1aa | ||
|
1da80c0631 | ||
|
d45d0b6b8f | ||
|
ab72238132 | ||
|
cf27347656 | ||
|
400957af0c | ||
|
708342f40a | ||
|
afa020558f | ||
|
fc4a70cf9c | ||
|
9b8b604a8c | ||
|
36d11fc561 | ||
|
70959a9796 | ||
|
1930271350 | ||
|
6e344fdec8 | ||
|
a78f5d06c4 | ||
|
cb03c837d0 | ||
|
36e54bf3a0 | ||
|
2d906247d7 | ||
|
cf9233b650 | ||
|
55bc403f83 | ||
|
dd81db1e95 | ||
|
ec1e521ba7 | ||
|
8a6a8e8bdf | ||
|
1068988bf1 | ||
|
74ae5f98de | ||
|
30047ecfeb | ||
|
dbeec73e86 | ||
|
3a8991ab80 | ||
|
95f75c8e49 | ||
|
432a501bf6 | ||
|
e9f1cbf375 | ||
|
a9e29327b7 | ||
|
675a768de1 | ||
|
4fb06dda43 | ||
|
218479f093 | ||
|
f32f2393ea | ||
|
d399b172a4 | ||
|
b219b59296 | ||
|
2d3914eb2d | ||
|
c909eb0845 | ||
|
91a39dd0a1 | ||
|
6414a8624b | ||
|
b317ea241b | ||
|
f43c1e97ae | ||
|
3c3c450839 | ||
|
02961a2ccc | ||
|
c5b6a6ae45 | ||
|
1cee98162a | ||
|
4957face2f | ||
|
190dca5501 | ||
|
be2ce2a6c4 | ||
|
ffe8927a30 | ||
|
f3ee013e43 | ||
|
f47596b2eb | ||
|
d6208b43e2 | ||
|
ae217cb2d9 | ||
|
aa9cc8e885 | ||
|
edd7fadd5a | ||
|
aceac2ccb5 | ||
|
07ab7de018 | ||
|
653ea56a77 | ||
|
6ca1b14477 | ||
|
304a04328a | ||
|
db33624da1 | ||
|
f6c608b227 | ||
|
ab48d77d0f | ||
|
fd7caa8cd6 | ||
|
bc92cd54f3 | ||
|
f3e838cdc6 | ||
|
e366b0a6af | ||
|
48312bc620 | ||
|
6e193ab0e1 | ||
|
2c0d05e05d | ||
|
5668e74f61 | ||
|
f3bac687ba | ||
|
15e33d22af | ||
|
ceb13110c5 | ||
|
e732c5ba62 | ||
|
38e65b747a | ||
|
689b040cc5 | ||
|
9761c10648 | ||
|
04836a447d | ||
|
38174ed6dc | ||
|
d96a1a1173 | ||
|
c8574b5890 | ||
|
66d1497558 | ||
|
22b86544be | ||
|
b12b1dec39 | ||
|
e529ad8df9 | ||
|
114aeda3f8 | ||
|
e8c08c24a5 | ||
|
f180d30126 | ||
|
4e96e58d57 | ||
|
f26b1c424f | ||
|
658f23b813 | ||
|
bc9e8f89bc | ||
|
d6bcf9767a | ||
|
df445297d2 | ||
|
283d7d32e4 | ||
|
0b951a05e7 | ||
|
e081c15716 | ||
|
4e7d282980 | ||
|
c952bee07e | ||
|
1af4e46793 | ||
|
ce5ecaf99d | ||
|
7d66232ec7 | ||
|
5e9645091d | ||
|
16d97aad3b | ||
|
561240763c | ||
|
c5bc704342 | ||
|
33d3955086 | ||
|
5471cb3534 | ||
|
8e6f027c5e | ||
|
5e1795ff5c | ||
|
5dc70b18db | ||
|
2545103ba5 | ||
|
2e3cec2201 | ||
|
cab1bb8aed | ||
|
22b580af56 | ||
|
5b97226b33 | ||
|
7a6f0344da | ||
|
d023c80109 | ||
|
56414dda30 | ||
|
a9f895ca6b | ||
|
78cd7824ae | ||
|
1ca81f4610 | ||
|
d3020efdef | ||
|
540d16302e | ||
|
5118e64fde | ||
|
fd6ebff4d9 | ||
|
76a1dd3c44 | ||
|
9c58135868 | ||
|
0c98c2d2ff | ||
|
81b4659de9 | ||
|
b10aa136d4 | ||
|
1ff74b2cd5 | ||
|
0309b4f826 | ||
|
35df81a858 | ||
|
8545cdb96d | ||
|
fde103da2d | ||
|
194ad5c7b4 | ||
|
5c09e55351 | ||
|
5c1b7a8d8f | ||
|
c84aac0c62 | ||
|
12cbf366fe | ||
|
a3fa2cef88 | ||
|
4b6886cdd0 | ||
|
7081f9cf9b | ||
|
151f0f0ab3 | ||
|
47b5cc21f2 | ||
|
ea3a6b272a | ||
|
f7dd8a86a8 | ||
|
de2ba14ca0 | ||
|
6266b8d80e | ||
|
c26aa9160b | ||
|
fc40770960 | ||
|
3a765e3b12 | ||
|
947ab4eb25 | ||
|
fb4eb56508 | ||
|
11b23ae9cd | ||
|
39fecf92c9 | ||
|
9d7f323231 | ||
|
d992c9bbaf | ||
|
39b63f4190 | ||
|
9ffa81e59a | ||
|
96974e0537 | ||
|
b68e90ae88 | ||
|
ab89d70b6a | ||
|
3e49dfacc5 | ||
|
5797e51fe3 | ||
|
d774733636 | ||
|
500e565d77 | ||
|
99861082f2 | ||
|
a3dedc81de | ||
|
6b2df37137 | ||
|
98b3cd9a05 | ||
|
1a794c7ce9 | ||
|
82d9ae9629 | ||
|
d28164e92a | ||
|
e2f601a01c | ||
|
204672375b | ||
|
7e8a405dc6 | ||
|
b68c544ef7 | ||
|
d99c6adf4d | ||
|
69f9ec89d4 | ||
|
48baf47a88 | ||
|
53b280ea53 | ||
|
a12a72836a | ||
|
f66858a813 | ||
|
a91dbe87be | ||
|
77704621aa | ||
|
e1928f3206 | ||
|
adcc8c4bd7 | ||
|
43c0752140 | ||
|
3e43e57858 | ||
|
6020552473 | ||
|
c13407612e | ||
|
e93cd45d19 | ||
|
d541286ba2 | ||
|
f68a4bb1a1 | ||
|
21f8303511 | ||
|
669b3d972e | ||
|
9aa4786f11 | ||
|
4a68d3c4cf | ||
|
393265a0e0 | ||
|
68dc11b291 | ||
|
05f69c99b2 | ||
|
1f2346e969 | ||
|
5b406effcf | ||
|
77c532b1a3 | ||
|
8097f25c9c | ||
|
7e078c805f | ||
|
bcd42a7677 | ||
|
32a3a75bb5 | ||
|
4b6ad3857a | ||
|
56ca761ac9 | ||
|
994e00c5d2 | ||
|
1205acb7e0 | ||
|
488c42b8a2 | ||
|
93ade73af7 | ||
|
c30b91cb69 | ||
|
f13e318204 | ||
|
48b1ad1e46 | ||
|
2b25c51169 | ||
|
5a0cb0f0a0 | ||
|
c0a5bad58a | ||
|
9d31ec843e | ||
|
1bb4dffb77 | ||
|
f51a7d4f7d | ||
|
901e9dbc38 | ||
|
5806daadc5 | ||
|
384899754f | ||
|
0ed62e4f80 | ||
|
7483f96759 | ||
|
81fcd574cf | ||
|
a5be2fb4ef | ||
|
20ef6a529a | ||
|
8f2dc74b52 | ||
|
677971ae38 | ||
|
e9e1688ad8 | ||
|
c56926595a | ||
|
00b39c8c37 | ||
|
7c90f53128 | ||
|
356bc10d84 | ||
|
175092f536 | ||
|
a7e662f227 | ||
|
d9bdac6bd1 | ||
|
ffe11cbb81 | ||
|
385f0e7b62 | ||
|
a969f304ab | ||
|
f30d2c3085 | ||
|
6f29b60f09 | ||
|
ec949b33ba | ||
|
00406acf38 | ||
|
7b9f3e491d | ||
|
9b765dd79f | ||
|
8b157a757e | ||
|
634943b6cf | ||
|
7c93215c50 | ||
|
3de683c03b | ||
|
a33887ea4a | ||
|
61ceb3f616 | ||
|
b9836fce9c | ||
|
f7996de670 | ||
|
d732537b59 | ||
|
d083346597 | ||
|
12c15e584b | ||
|
a99e0a79eb | ||
|
8cb125ccd8 | ||
|
f37c39df48 | ||
|
c7e2c4c9f5 | ||
|
07b9753726 | ||
|
30e11106c8 | ||
|
05a11abbb2 | ||
|
7695b7d331 | ||
|
595ef8e9db | ||
|
83c1a85226 | ||
|
2fb5d22e6f | ||
|
12efb098bb | ||
|
ef438919e4 | ||
|
089e0b9ebe | ||
|
226c59982b | ||
|
6c3fa97185 | ||
|
ece6ebae80 | ||
|
34753ca613 | ||
|
e92ec7bf9f | ||
|
1e2ceea199 | ||
|
b1c272d7b6 | ||
|
34a6af679a | ||
|
bd8992f6f2 | ||
|
00eb4d59ca | ||
|
f95b59b1cd | ||
|
c829bcfe27 | ||
|
76620d3e32 | ||
|
4cd6665ea3 | ||
|
59fbb6181b | ||
|
060739aa15 | ||
|
917acbb97f | ||
|
f884f77321 | ||
|
dbb9eca66e | ||
|
c764a5305e | ||
|
d41c0bc432 | ||
|
df9f7cc500 | ||
|
6b9cdd0071 | ||
|
2f24d0b47c | ||
|
71ac45ab6e | ||
|
7c655c07cd | ||
|
575af62f24 | ||
|
f22d501607 | ||
|
b3708f43e7 | ||
|
a926476402 | ||
|
201c646bc5 | ||
|
b5a55fe615 | ||
|
a886cee8b9 | ||
|
419ccc8dab | ||
|
8794bad146 | ||
|
5bf8ba4f55 | ||
|
87d4ee6fa1 | ||
|
c40225aa1e | ||
|
84ebec424a | ||
|
8cbf31ebdf | ||
|
82e3949b8b | ||
|
d3b079c425 | ||
|
d13a5d04e8 | ||
|
4030b0bd0c | ||
|
7506fefe80 | ||
|
0cdde4ea6d | ||
|
f11b38fb28 | ||
|
2af2d8131d | ||
|
990933024c | ||
|
11d874ec37 | ||
|
5d78cb0c97 | ||
|
119fe4dd4b | ||
|
67c01de4bd | ||
|
aa3e083b64 | ||
|
b04ad2fa20 | ||
|
ff5ce6ac0b | ||
|
3523d12940 | ||
|
2b42df4809 | ||
|
5446d86ff3 | ||
|
293f77d45d | ||
|
4ee17f9b88 | ||
|
2304f5dce3 | ||
|
aa1225ff96 | ||
|
25cb82b14d | ||
|
8946a2c5b3 | ||
|
ec2afd3fd2 | ||
|
64eed79027 | ||
|
e4144b7e19 | ||
|
4b4e78cd9d | ||
|
777126ae1e | ||
|
116f756b1a | ||
|
771f424108 | ||
|
57d9096d21 | ||
|
94861e04e5 | ||
|
3a463c3cd8 | ||
|
1c99c2b005 | ||
|
371e9e2365 | ||
|
6a2c8d487e | ||
|
d8235a43a6 | ||
|
06fee9c52a | ||
|
01990baa58 | ||
|
05503dd689 | ||
|
afcfb08072 | ||
|
e04c37d0c0 | ||
|
848f3ab30f | ||
|
c747e98bda | ||
|
1ce78c184a | ||
|
27def802a0 | ||
|
710240c57a | ||
|
7881b9c79a | ||
|
f21ccca0bf | ||
|
30286b2261 | ||
|
8e64184183 | ||
|
f74ad900ab | ||
|
3d04c767ca | ||
|
b25ef318a4 | ||
|
ea48ae04fb | ||
|
255d35c56e | ||
|
2fe6cb617b | ||
|
2ac5518057 | ||
|
05ff35a1f8 | ||
|
82de949a8c | ||
|
3a28992c7f | ||
|
775a204a68 | ||
|
0491dca741 | ||
|
139478b865 | ||
|
8c62f0280d | ||
|
1257b87118 | ||
|
d3861ae281 | ||
|
66b5fd0a2f | ||
|
8ea7669494 | ||
|
66e57b5405 | ||
|
924876e92c | ||
|
60b0c5b984 | ||
|
d34ba9010b | ||
|
f510f16509 | ||
|
d53b5cbd33 | ||
|
6641f2c7bf | ||
|
1a4bd199b6 | ||
|
69d375e1d2 | ||
|
1d3025329b | ||
|
7bac215fb0 | ||
|
2e301b59e6 | ||
|
91a840df6e | ||
|
c5ecd9fc76 | ||
|
1e4e2a714d | ||
|
1af473e9a5 | ||
|
2d2951e689 | ||
|
feb267e7cf | ||
|
b0b3ba438b | ||
|
dd149231e8 | ||
|
35d8e6deb3 | ||
|
72e6cbd4e9 | ||
|
3307cb2f9e |
@ -97,7 +97,7 @@ void SoundInput::start(QAudioDeviceInfo const& device, int framesPerBuffer, Audi
|
|||||||
m_stream->start (sink);
|
m_stream->start (sink);
|
||||||
checkStream ();
|
checkStream ();
|
||||||
cummulative_lost_usec_ = -1;
|
cummulative_lost_usec_ = -1;
|
||||||
LOG_DEBUG ("Selected buffer size (bytes): " << m_stream->bufferSize () << " period size: " << m_stream->periodSize ());
|
// LOG_DEBUG ("Selected buffer size (bytes): " << m_stream->bufferSize () << " period size: " << m_stream->periodSize ());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -180,13 +180,15 @@ void SoundInput::reset (bool report_dropped_frames)
|
|||||||
if (cummulative_lost_usec_ != std::numeric_limits<qint64>::min () && report_dropped_frames)
|
if (cummulative_lost_usec_ != std::numeric_limits<qint64>::min () && report_dropped_frames)
|
||||||
{
|
{
|
||||||
auto lost_usec = elapsed_usecs - m_stream->processedUSecs () - cummulative_lost_usec_;
|
auto lost_usec = elapsed_usecs - m_stream->processedUSecs () - cummulative_lost_usec_;
|
||||||
if (std::abs (lost_usec) > 48000 / 5)
|
// disable log warnings on dropped audio for now, as detection is not reliable
|
||||||
{
|
// if (std::abs (lost_usec) > 48000 / 5)
|
||||||
LOG_WARN ("Detected dropped audio source samples: "
|
// {
|
||||||
<< m_stream->format ().framesForDuration (lost_usec)
|
// LOG_WARN ("Detected dropped audio source samples: "
|
||||||
<< " (" << std::setprecision (4) << lost_usec / 1.e6 << " S)");
|
// << m_stream->format ().framesForDuration (lost_usec)
|
||||||
}
|
// << " (" << std::setprecision (4) << lost_usec / 1.e6 << " S)");
|
||||||
else if (std::abs (lost_usec) > 5 * 48000)
|
// }
|
||||||
|
// else if (std::abs (lost_usec) > 5 * 48000)
|
||||||
|
if (std::abs (lost_usec) > 5 * 48000)
|
||||||
{
|
{
|
||||||
LOG_ERROR ("Detected excessive dropped audio source samples: "
|
LOG_ERROR ("Detected excessive dropped audio source samples: "
|
||||||
<< m_stream->format ().framesForDuration (lost_usec)
|
<< m_stream->format ().framesForDuration (lost_usec)
|
||||||
|
@ -111,7 +111,7 @@ void SoundOutput::restart (QIODevice * source)
|
|||||||
}
|
}
|
||||||
m_stream->setCategory ("production");
|
m_stream->setCategory ("production");
|
||||||
m_stream->start (source);
|
m_stream->start (source);
|
||||||
LOG_DEBUG ("Selected buffer size (bytes): " << m_stream->bufferSize () << " period size: " << m_stream->periodSize ());
|
// LOG_DEBUG ("Selected buffer size (bytes): " << m_stream->bufferSize () << " period size: " << m_stream->periodSize ());
|
||||||
}
|
}
|
||||||
|
|
||||||
void SoundOutput::suspend ()
|
void SoundOutput::suspend ()
|
||||||
|
@ -26,7 +26,7 @@ if (WIN32)
|
|||||||
add_custom_command (
|
add_custom_command (
|
||||||
OUTPUT ${outfile}.h ${outfile}.cpp
|
OUTPUT ${outfile}.h ${outfile}.cpp
|
||||||
COMMAND ${DUMPCPP_Executable}
|
COMMAND ${DUMPCPP_Executable}
|
||||||
ARGS ${AX_SERVER_options} -o "${outfile}" "${infile}"
|
ARGS ${ax_server_options} -o "${outfile}" "${infile}"
|
||||||
MAIN_DEPENDENCY ${infile} VERBATIM)
|
MAIN_DEPENDENCY ${infile} VERBATIM)
|
||||||
list (APPEND ${outfiles} ${outfile}.cpp)
|
list (APPEND ${outfiles} ${outfile}.cpp)
|
||||||
endforeach()
|
endforeach()
|
||||||
|
@ -45,7 +45,7 @@ if (POLICY CMP0075)
|
|||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
project (wsjtx
|
project (wsjtx
|
||||||
VERSION 2.5.0.0
|
VERSION 2.7.0.0
|
||||||
LANGUAGES C CXX Fortran
|
LANGUAGES C CXX Fortran
|
||||||
)
|
)
|
||||||
set (PROJECT_DESCRIPTION "WSJT-X: Digital Modes for Weak Signal Communications in Amateur Radio")
|
set (PROJECT_DESCRIPTION "WSJT-X: Digital Modes for Weak Signal Communications in Amateur Radio")
|
||||||
@ -71,7 +71,7 @@ message (STATUS "******************************************************")
|
|||||||
|
|
||||||
include (set_build_type)
|
include (set_build_type)
|
||||||
# RC 0 or omitted is a development build, GA is a General Availability release build
|
# RC 0 or omitted is a development build, GA is a General Availability release build
|
||||||
set_build_type (RC 3)
|
set_build_type (RC 4)
|
||||||
set (wsjtx_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}${BUILD_TYPE_REVISION}")
|
set (wsjtx_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}${BUILD_TYPE_REVISION}")
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -80,10 +80,10 @@ set (wsjtx_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_
|
|||||||
set (PROJECT_BUNDLE_NAME "WSJT-X")
|
set (PROJECT_BUNDLE_NAME "WSJT-X")
|
||||||
set (PROJECT_VENDOR "Joe Taylor, K1JT")
|
set (PROJECT_VENDOR "Joe Taylor, K1JT")
|
||||||
set (PROJECT_CONTACT "Joe Taylor <k1jt@arrl.net>")
|
set (PROJECT_CONTACT "Joe Taylor <k1jt@arrl.net>")
|
||||||
set (PROJECT_COPYRIGHT "Copyright (C) 2001-2021 by Joe Taylor, K1JT")
|
set (PROJECT_COPYRIGHT "Copyright (C) 2001-2023 by Joe Taylor, K1JT")
|
||||||
set (PROJECT_HOMEPAGE https://www.physics.princeton.edu/pulsar/K1JT/wsjtx.html)
|
set (PROJECT_HOMEPAGE https://wsjt.sourceforge.io/wsjtx.html)
|
||||||
set (PROJECT_MANUAL wsjtx-main)
|
set (PROJECT_MANUAL wsjtx-main)
|
||||||
set (PROJECT_MANUAL_DIRECTORY_URL https://www.physics.princeton.edu/pulsar/K1JT/wsjtx-doc/)
|
set (PROJECT_MANUAL_DIRECTORY_URL https://wsjt.sourceforge.io/wsjtx-doc/)
|
||||||
set (PROJECT_SAMPLES_URL http://downloads.sourceforge.net/project/wsjt/)
|
set (PROJECT_SAMPLES_URL http://downloads.sourceforge.net/project/wsjt/)
|
||||||
set (PROJECT_SAMPLES_UPLOAD_DEST frs.sourceforge.net:/home/frs/project/wsjt/)
|
set (PROJECT_SAMPLES_UPLOAD_DEST frs.sourceforge.net:/home/frs/project/wsjt/)
|
||||||
|
|
||||||
@ -126,7 +126,8 @@ option (WSJT_GENERATE_DOCS "Generate documentation files." ON)
|
|||||||
option (WSJT_RIG_NONE_CAN_SPLIT "Allow split operation with \"None\" as rig.")
|
option (WSJT_RIG_NONE_CAN_SPLIT "Allow split operation with \"None\" as rig.")
|
||||||
option (WSJT_TRACE_UDP "Debugging option that turns on UDP message protocol diagnostics.")
|
option (WSJT_TRACE_UDP "Debugging option that turns on UDP message protocol diagnostics.")
|
||||||
option (WSJT_BUILD_UTILS "Build simulators and code demonstrators." ON)
|
option (WSJT_BUILD_UTILS "Build simulators and code demonstrators." ON)
|
||||||
|
CMAKE_DEPENDENT_OPTION (WSJT_QDEBUG_IN_RELEASE "Leave Qt debugging statements in Release configuration." OFF
|
||||||
|
"NOT is_debug_build" OFF)
|
||||||
CMAKE_DEPENDENT_OPTION (WSJT_ENABLE_EXPERIMENTAL_FEATURES "Enable features not fully ready for public releases." ON
|
CMAKE_DEPENDENT_OPTION (WSJT_ENABLE_EXPERIMENTAL_FEATURES "Enable features not fully ready for public releases." ON
|
||||||
is_debug_build OFF)
|
is_debug_build OFF)
|
||||||
CMAKE_DEPENDENT_OPTION (WSJT_CREATE_WINMAIN
|
CMAKE_DEPENDENT_OPTION (WSJT_CREATE_WINMAIN
|
||||||
@ -160,7 +161,6 @@ endif ()
|
|||||||
set (WSJT_PLUGIN_DESTINATION ${PLUGIN_DESTINATION} CACHE PATH "Path for plugins")
|
set (WSJT_PLUGIN_DESTINATION ${PLUGIN_DESTINATION} CACHE PATH "Path for plugins")
|
||||||
set (WSJT_QT_CONF_DESTINATION ${QT_CONF_DESTINATION} CACHE PATH "Path for the qt.conf file")
|
set (WSJT_QT_CONF_DESTINATION ${QT_CONF_DESTINATION} CACHE PATH "Path for the qt.conf file")
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Project sources
|
# Project sources
|
||||||
#
|
#
|
||||||
@ -189,6 +189,7 @@ set (wsjt_qt_CXXSRCS
|
|||||||
widgets/FrequencyDeltaLineEdit.cpp
|
widgets/FrequencyDeltaLineEdit.cpp
|
||||||
item_delegates/CandidateKeyFilter.cpp
|
item_delegates/CandidateKeyFilter.cpp
|
||||||
item_delegates/ForeignKeyDelegate.cpp
|
item_delegates/ForeignKeyDelegate.cpp
|
||||||
|
item_delegates/MessageItemDelegate.cpp
|
||||||
validators/LiveFrequencyValidator.cpp
|
validators/LiveFrequencyValidator.cpp
|
||||||
GetUserId.cpp
|
GetUserId.cpp
|
||||||
Audio/AudioDevice.cpp
|
Audio/AudioDevice.cpp
|
||||||
@ -220,6 +221,7 @@ set (wsjt_qt_CXXSRCS
|
|||||||
widgets/DoubleClickablePushButton.cpp
|
widgets/DoubleClickablePushButton.cpp
|
||||||
widgets/DoubleClickableRadioButton.cpp
|
widgets/DoubleClickableRadioButton.cpp
|
||||||
Network/LotWUsers.cpp
|
Network/LotWUsers.cpp
|
||||||
|
Network/FileDownload.cpp
|
||||||
models/DecodeHighlightingModel.cpp
|
models/DecodeHighlightingModel.cpp
|
||||||
widgets/DecodeHighlightingListView.cpp
|
widgets/DecodeHighlightingListView.cpp
|
||||||
models/FoxLog.cpp
|
models/FoxLog.cpp
|
||||||
@ -273,6 +275,7 @@ set (wsjtx_CXXSRCS
|
|||||||
widgets/about.cpp
|
widgets/about.cpp
|
||||||
widgets/astro.cpp
|
widgets/astro.cpp
|
||||||
widgets/messageaveraging.cpp
|
widgets/messageaveraging.cpp
|
||||||
|
widgets/activeStations.cpp
|
||||||
widgets/colorhighlighting.cpp
|
widgets/colorhighlighting.cpp
|
||||||
WSPR/WsprTxScheduler.cpp
|
WSPR/WsprTxScheduler.cpp
|
||||||
widgets/mainwindow.cpp
|
widgets/mainwindow.cpp
|
||||||
@ -324,6 +327,7 @@ set (wsjt_FSRCS
|
|||||||
lib/ft8_decode.f90
|
lib/ft8_decode.f90
|
||||||
lib/ft4_decode.f90
|
lib/ft4_decode.f90
|
||||||
lib/fst4_decode.f90
|
lib/fst4_decode.f90
|
||||||
|
lib/get_q3list.f90
|
||||||
lib/jt9_decode.f90
|
lib/jt9_decode.f90
|
||||||
lib/options.f90
|
lib/options.f90
|
||||||
lib/packjt.f90
|
lib/packjt.f90
|
||||||
@ -336,6 +340,7 @@ set (wsjt_FSRCS
|
|||||||
lib/timer_module.f90
|
lib/timer_module.f90
|
||||||
lib/wavhdr.f90
|
lib/wavhdr.f90
|
||||||
lib/qra/q65/q65_encoding_modules.f90
|
lib/qra/q65/q65_encoding_modules.f90
|
||||||
|
lib/ft8/ft8_a7.f90
|
||||||
|
|
||||||
# remaining non-module sources
|
# remaining non-module sources
|
||||||
lib/addit.f90
|
lib/addit.f90
|
||||||
@ -357,6 +362,7 @@ set (wsjt_FSRCS
|
|||||||
lib/bpdecode128_90.f90
|
lib/bpdecode128_90.f90
|
||||||
lib/ft8/bpdecode174_91.f90
|
lib/ft8/bpdecode174_91.f90
|
||||||
lib/baddata.f90
|
lib/baddata.f90
|
||||||
|
lib/cablog.f90
|
||||||
lib/calibrate.f90
|
lib/calibrate.f90
|
||||||
lib/ccf2.f90
|
lib/ccf2.f90
|
||||||
lib/ccf65.f90
|
lib/ccf65.f90
|
||||||
@ -382,6 +388,8 @@ set (wsjt_FSRCS
|
|||||||
lib/demod64a.f90
|
lib/demod64a.f90
|
||||||
lib/determ.f90
|
lib/determ.f90
|
||||||
lib/downsam9.f90
|
lib/downsam9.f90
|
||||||
|
lib/echosim.f90
|
||||||
|
lib/echo_snr.f90
|
||||||
lib/encode232.f90
|
lib/encode232.f90
|
||||||
lib/encode4.f90
|
lib/encode4.f90
|
||||||
lib/encode_msk40.f90
|
lib/encode_msk40.f90
|
||||||
@ -415,6 +423,7 @@ set (wsjt_FSRCS
|
|||||||
lib/fmtmsg.f90
|
lib/fmtmsg.f90
|
||||||
lib/foldspec9f.f90
|
lib/foldspec9f.f90
|
||||||
lib/four2a.f90
|
lib/four2a.f90
|
||||||
|
lib/fspread_lorentz.f90
|
||||||
lib/ft8/foxfilt.f90
|
lib/ft8/foxfilt.f90
|
||||||
lib/ft8/foxgen.f90
|
lib/ft8/foxgen.f90
|
||||||
lib/ft8/foxgen_wrap.f90
|
lib/ft8/foxgen_wrap.f90
|
||||||
@ -460,7 +469,6 @@ set (wsjt_FSRCS
|
|||||||
lib/inter_wspr.f90
|
lib/inter_wspr.f90
|
||||||
lib/jplsubs.f
|
lib/jplsubs.f
|
||||||
lib/jt9fano.f90
|
lib/jt9fano.f90
|
||||||
lib/jtmsg.f90
|
|
||||||
lib/libration.f90
|
lib/libration.f90
|
||||||
lib/lorentzian.f90
|
lib/lorentzian.f90
|
||||||
lib/fst4/lorentzian_fading.f90
|
lib/fst4/lorentzian_fading.f90
|
||||||
@ -484,6 +492,7 @@ set (wsjt_FSRCS
|
|||||||
lib/msk144sim.f90
|
lib/msk144sim.f90
|
||||||
lib/mskrtd.f90
|
lib/mskrtd.f90
|
||||||
lib/nuttal_window.f90
|
lib/nuttal_window.f90
|
||||||
|
lib/decode_msk144.f90
|
||||||
lib/ft4/ft4sim.f90
|
lib/ft4/ft4sim.f90
|
||||||
lib/ft4/ft4sim_mult.f90
|
lib/ft4/ft4sim_mult.f90
|
||||||
lib/ft4/ft4_downsample.f90
|
lib/ft4/ft4_downsample.f90
|
||||||
@ -503,8 +512,11 @@ set (wsjt_FSRCS
|
|||||||
lib/qra/q65/q65_ap.f90
|
lib/qra/q65/q65_ap.f90
|
||||||
lib/qra/q65/q65_loops.f90
|
lib/qra/q65/q65_loops.f90
|
||||||
lib/qra/q65/q65_set_list.f90
|
lib/qra/q65/q65_set_list.f90
|
||||||
|
lib/qra/q65/q65_set_list2.f90
|
||||||
lib/refspectrum.f90
|
lib/refspectrum.f90
|
||||||
lib/savec2.f90
|
lib/savec2.f90
|
||||||
|
lib/save_dxbase.f90
|
||||||
|
lib/save_echo_params.f90
|
||||||
lib/sec0.f90
|
lib/sec0.f90
|
||||||
lib/sec_midn.f90
|
lib/sec_midn.f90
|
||||||
lib/setup65.f90
|
lib/setup65.f90
|
||||||
@ -539,6 +551,7 @@ set (wsjt_FSRCS
|
|||||||
lib/sync9.f90
|
lib/sync9.f90
|
||||||
lib/sync9f.f90
|
lib/sync9f.f90
|
||||||
lib/sync9w.f90
|
lib/sync9w.f90
|
||||||
|
lib/test_snr.f90
|
||||||
lib/timf2.f90
|
lib/timf2.f90
|
||||||
lib/tweak1.f90
|
lib/tweak1.f90
|
||||||
lib/twkfreq.f90
|
lib/twkfreq.f90
|
||||||
@ -571,6 +584,7 @@ set (wsjt_FSRCS
|
|||||||
lib/fst4/fastosd240_74.f90
|
lib/fst4/fastosd240_74.f90
|
||||||
lib/fst4/get_crc24.f90
|
lib/fst4/get_crc24.f90
|
||||||
lib/fst4/fst4_baseline.f90
|
lib/fst4/fst4_baseline.f90
|
||||||
|
lib/77bit/hash22calc.f90
|
||||||
)
|
)
|
||||||
|
|
||||||
# temporary workaround for a gfortran v7.3 ICE on Fedora 27 64-bit
|
# temporary workaround for a gfortran v7.3 ICE on Fedora 27 64-bit
|
||||||
@ -649,6 +663,7 @@ set (wsjtx_UISRCS
|
|||||||
widgets/echograph.ui
|
widgets/echograph.ui
|
||||||
widgets/fastgraph.ui
|
widgets/fastgraph.ui
|
||||||
widgets/messageaveraging.ui
|
widgets/messageaveraging.ui
|
||||||
|
widgets/activeStations.ui
|
||||||
widgets/widegraph.ui
|
widgets/widegraph.ui
|
||||||
widgets/logqso.ui
|
widgets/logqso.ui
|
||||||
Configuration.ui
|
Configuration.ui
|
||||||
@ -884,8 +899,6 @@ find_program (RIGCTLCOM_EXE rigctlcom)
|
|||||||
check_type_size (CACHE_ALL HAMLIB_OLD_CACHING)
|
check_type_size (CACHE_ALL HAMLIB_OLD_CACHING)
|
||||||
check_symbol_exists (rig_set_cache_timeout_ms "hamlib/rig.h" HAVE_HAMLIB_CACHING)
|
check_symbol_exists (rig_set_cache_timeout_ms "hamlib/rig.h" HAVE_HAMLIB_CACHING)
|
||||||
|
|
||||||
find_package (Portaudio REQUIRED)
|
|
||||||
|
|
||||||
find_package (Usb REQUIRED)
|
find_package (Usb REQUIRED)
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -964,7 +977,10 @@ if (Fortran_COMPILER_NAME MATCHES "gfortran.*")
|
|||||||
|
|
||||||
set (CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE} -fbounds-check -funroll-all-loops -fno-f2c -ffpe-summary=invalid,zero,overflow,underflow ${General_FFLAGS}")
|
set (CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE} -fbounds-check -funroll-all-loops -fno-f2c -ffpe-summary=invalid,zero,overflow,underflow ${General_FFLAGS}")
|
||||||
|
|
||||||
set (CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -g -fbacktrace -fbounds-check -fno-f2c -ffpe-summary=invalid,zero,overflow,underflow ${General_FFLAGS}")
|
### TEMPORARY: Let Fortran use RElEASE flags for DEBUG builds
|
||||||
|
#set (CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -g -fbacktrace -fbounds-check -fno-f2c -ffpe-summary=invalid,zero,overflow,underflow ${General_FFLAGS}")
|
||||||
|
set (CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_RELEASE} -fbounds-check -funroll-all-loops -fno-f2c -ffpe-summary=invalid,zero,overflow,underflow ${General_FFLAGS}")
|
||||||
|
|
||||||
|
|
||||||
# FPE traps currently disabled in Debug configuration builds until
|
# FPE traps currently disabled in Debug configuration builds until
|
||||||
# we decide if they are meaningful, without these FP instructions
|
# we decide if they are meaningful, without these FP instructions
|
||||||
@ -1095,7 +1111,7 @@ target_link_libraries (wsjt_fort ${FFTW3_LIBRARIES})
|
|||||||
if (${OPENMP_FOUND} OR APPLE)
|
if (${OPENMP_FOUND} OR APPLE)
|
||||||
add_library (wsjt_fort_omp STATIC ${wsjt_FSRCS})
|
add_library (wsjt_fort_omp STATIC ${wsjt_FSRCS})
|
||||||
target_link_libraries (wsjt_fort_omp ${FFTW3_LIBRARIES})
|
target_link_libraries (wsjt_fort_omp ${FFTW3_LIBRARIES})
|
||||||
if (OpenMP_C_FLAGS)
|
if (OpenMP_C_FLAGS AND NOT APPLE)
|
||||||
set_target_properties (wsjt_fort_omp
|
set_target_properties (wsjt_fort_omp
|
||||||
PROPERTIES
|
PROPERTIES
|
||||||
COMPILE_FLAGS "${OpenMP_C_FLAGS}"
|
COMPILE_FLAGS "${OpenMP_C_FLAGS}"
|
||||||
@ -1128,6 +1144,12 @@ target_link_libraries (jt65sim wsjt_fort wsjt_cxx)
|
|||||||
add_executable (sumsim lib/sumsim.f90)
|
add_executable (sumsim lib/sumsim.f90)
|
||||||
target_link_libraries (sumsim wsjt_fort wsjt_cxx)
|
target_link_libraries (sumsim wsjt_fort wsjt_cxx)
|
||||||
|
|
||||||
|
add_executable (cablog lib/cablog.f90)
|
||||||
|
target_link_libraries (cablog)
|
||||||
|
|
||||||
|
add_executable (test_snr lib/test_snr.f90)
|
||||||
|
target_link_libraries (test_snr wsjt_fort)
|
||||||
|
|
||||||
add_executable (q65sim lib/qra/q65/q65sim.f90)
|
add_executable (q65sim lib/qra/q65/q65sim.f90)
|
||||||
target_link_libraries (q65sim wsjt_fort wsjt_cxx)
|
target_link_libraries (q65sim wsjt_fort wsjt_cxx)
|
||||||
|
|
||||||
@ -1161,6 +1183,9 @@ target_link_libraries (wsprcode wsjt_fort wsjt_cxx)
|
|||||||
add_executable (encode77 lib/77bit/encode77.f90)
|
add_executable (encode77 lib/77bit/encode77.f90)
|
||||||
target_link_libraries (encode77 wsjt_fort wsjt_cxx)
|
target_link_libraries (encode77 wsjt_fort wsjt_cxx)
|
||||||
|
|
||||||
|
add_executable (hash22calc lib/77bit/hash22calc.f90)
|
||||||
|
target_link_libraries (hash22calc wsjt_fort wsjt_cxx)
|
||||||
|
|
||||||
add_executable (wsprsim ${wsprsim_CSRCS})
|
add_executable (wsprsim ${wsprsim_CSRCS})
|
||||||
target_link_libraries (wsprsim ${LIBM_LIBRARIES})
|
target_link_libraries (wsprsim ${LIBM_LIBRARIES})
|
||||||
|
|
||||||
@ -1176,6 +1201,9 @@ target_link_libraries (ft8code wsjt_fort wsjt_cxx)
|
|||||||
add_executable (ft4code lib/ft4/ft4code.f90)
|
add_executable (ft4code lib/ft4/ft4code.f90)
|
||||||
target_link_libraries (ft4code wsjt_fort wsjt_cxx)
|
target_link_libraries (ft4code wsjt_fort wsjt_cxx)
|
||||||
|
|
||||||
|
add_executable (echosim lib/echosim.f90)
|
||||||
|
target_link_libraries (echosim wsjt_fort wsjt_cxx)
|
||||||
|
|
||||||
add_executable (ft8sim lib/ft8/ft8sim.f90)
|
add_executable (ft8sim lib/ft8/ft8sim.f90)
|
||||||
target_link_libraries (ft8sim wsjt_fort wsjt_cxx)
|
target_link_libraries (ft8sim wsjt_fort wsjt_cxx)
|
||||||
|
|
||||||
@ -1260,9 +1288,11 @@ set (LANGUAGES
|
|||||||
ja # Japanese
|
ja # Japanese
|
||||||
#no # Norwegian
|
#no # Norwegian
|
||||||
#pt # Portuguese
|
#pt # Portuguese
|
||||||
|
ru # Russian
|
||||||
#sv # Swedish
|
#sv # Swedish
|
||||||
zh # Chinese
|
zh # Chinese
|
||||||
zh_HK # Chinese per Hong Kong
|
zh_HK # Chinese per Hong Kong
|
||||||
|
zh_TW # Chinese traditional
|
||||||
it # Italian
|
it # Italian
|
||||||
)
|
)
|
||||||
foreach (lang_ ${LANGUAGES})
|
foreach (lang_ ${LANGUAGES})
|
||||||
@ -1404,9 +1434,10 @@ else (${OPENMP_FOUND} OR APPLE)
|
|||||||
endif (${OPENMP_FOUND} OR APPLE)
|
endif (${OPENMP_FOUND} OR APPLE)
|
||||||
|
|
||||||
if (WIN32)
|
if (WIN32)
|
||||||
# build map65
|
find_package (Portaudio REQUIRED)
|
||||||
add_subdirectory (map65)
|
add_subdirectory (map65)
|
||||||
endif ()
|
endif ()
|
||||||
|
add_subdirectory (qmap)
|
||||||
|
|
||||||
# build the main application
|
# build the main application
|
||||||
generate_version_info (wsjtx_VERSION_RESOURCES
|
generate_version_info (wsjtx_VERSION_RESOURCES
|
||||||
@ -1441,7 +1472,7 @@ set_target_properties (wsjtx PROPERTIES
|
|||||||
)
|
)
|
||||||
|
|
||||||
target_include_directories (wsjtx PRIVATE ${FFTW3_INCLUDE_DIRS})
|
target_include_directories (wsjtx PRIVATE ${FFTW3_INCLUDE_DIRS})
|
||||||
if (APPLE)
|
if ((NOT ${OPENMP_FOUND}) OR APPLE)
|
||||||
target_link_libraries (wsjtx wsjt_fort)
|
target_link_libraries (wsjtx wsjt_fort)
|
||||||
else ()
|
else ()
|
||||||
target_link_libraries (wsjtx wsjt_fort_omp)
|
target_link_libraries (wsjtx wsjt_fort_omp)
|
||||||
@ -1572,7 +1603,7 @@ install (TARGETS jt9 wsprd fmtave fcal fmeasure
|
|||||||
|
|
||||||
if(WSJT_BUILD_UTILS)
|
if(WSJT_BUILD_UTILS)
|
||||||
install (TARGETS ft8code jt65code jt9code jt4code msk144code
|
install (TARGETS ft8code jt65code jt9code jt4code msk144code
|
||||||
q65code fst4sim q65sim
|
q65code fst4sim q65sim echosim hash22calc cablog
|
||||||
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT runtime
|
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT runtime
|
||||||
BUNDLE DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT runtime
|
BUNDLE DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT runtime
|
||||||
)
|
)
|
||||||
@ -1614,6 +1645,7 @@ install (FILES
|
|||||||
cty.dat
|
cty.dat
|
||||||
cty.dat_copyright.txt
|
cty.dat_copyright.txt
|
||||||
contrib/Ephemeris/JPLEPH
|
contrib/Ephemeris/JPLEPH
|
||||||
|
eclipse.txt
|
||||||
DESTINATION ${CMAKE_INSTALL_DATADIR}/${CMAKE_PROJECT_NAME}
|
DESTINATION ${CMAKE_INSTALL_DATADIR}/${CMAKE_PROJECT_NAME}
|
||||||
#COMPONENT runtime
|
#COMPONENT runtime
|
||||||
)
|
)
|
||||||
|
@ -18,7 +18,7 @@ class QAudioDeviceInfo;
|
|||||||
class QDir;
|
class QDir;
|
||||||
class QNetworkAccessManager;
|
class QNetworkAccessManager;
|
||||||
class Bands;
|
class Bands;
|
||||||
class FrequencyList_v2;
|
class FrequencyList_v2_101;
|
||||||
class StationList;
|
class StationList;
|
||||||
class QStringListModel;
|
class QStringListModel;
|
||||||
class LotWUsers;
|
class LotWUsers;
|
||||||
@ -100,6 +100,7 @@ public:
|
|||||||
QString my_grid () const;
|
QString my_grid () const;
|
||||||
QString Field_Day_Exchange() const;
|
QString Field_Day_Exchange() const;
|
||||||
QString RTTY_Exchange() const;
|
QString RTTY_Exchange() const;
|
||||||
|
QString Contest_Name() const;
|
||||||
void setEU_VHF_Contest();
|
void setEU_VHF_Contest();
|
||||||
QFont text_font () const;
|
QFont text_font () const;
|
||||||
QFont decoded_text_font () const;
|
QFont decoded_text_font () const;
|
||||||
@ -164,8 +165,8 @@ public:
|
|||||||
Bands * bands ();
|
Bands * bands ();
|
||||||
Bands const * bands () const;
|
Bands const * bands () const;
|
||||||
IARURegions::Region region () const;
|
IARURegions::Region region () const;
|
||||||
FrequencyList_v2 * frequencies ();
|
FrequencyList_v2_101 * frequencies ();
|
||||||
FrequencyList_v2 const * frequencies () const;
|
FrequencyList_v2_101 const * frequencies () const;
|
||||||
StationList * stations ();
|
StationList * stations ();
|
||||||
StationList const * stations () const;
|
StationList const * stations () const;
|
||||||
QStringListModel * macros ();
|
QStringListModel * macros ();
|
||||||
@ -181,8 +182,17 @@ public:
|
|||||||
bool highlight_by_mode () const;
|
bool highlight_by_mode () const;
|
||||||
bool highlight_only_fields () const;
|
bool highlight_only_fields () const;
|
||||||
bool include_WAE_entities () const;
|
bool include_WAE_entities () const;
|
||||||
|
bool highlight_73 () const;
|
||||||
|
void setSpecial_Q65_Pileup();
|
||||||
|
void setSpecial_Hound();
|
||||||
|
void setSpecial_Fox();
|
||||||
|
void setSpecial_None();
|
||||||
|
bool highlight_DXcall () const;
|
||||||
|
bool highlight_DXgrid () const;
|
||||||
|
bool Individual_Contest_Name() const;
|
||||||
|
|
||||||
enum class SpecialOperatingActivity {NONE, NA_VHF, EU_VHF, FIELD_DAY, RTTY, WW_DIGI, FOX, HOUND};
|
// 0 1 2 3 4 5 6 7 8 9
|
||||||
|
enum class SpecialOperatingActivity {NONE, NA_VHF, EU_VHF, FIELD_DAY, RTTY, WW_DIGI, FOX, HOUND, ARRL_DIGI, Q65_PILEUP};
|
||||||
SpecialOperatingActivity special_op_id () const;
|
SpecialOperatingActivity special_op_id () const;
|
||||||
|
|
||||||
struct CalibrationParams
|
struct CalibrationParams
|
||||||
@ -215,8 +225,7 @@ public:
|
|||||||
// This method queries if a CAT and PTT connection is operational.
|
// This method queries if a CAT and PTT connection is operational.
|
||||||
bool is_transceiver_online () const;
|
bool is_transceiver_online () const;
|
||||||
|
|
||||||
// Start the rig connection, safe and normal to call when rig is
|
// Start the rig connection, safe and normal to call when rig is already open.
|
||||||
// already open.
|
|
||||||
bool transceiver_online ();
|
bool transceiver_online ();
|
||||||
|
|
||||||
// check if a real rig is configured
|
// check if a real rig is configured
|
||||||
@ -234,6 +243,8 @@ public:
|
|||||||
// Close down connection to rig.
|
// Close down connection to rig.
|
||||||
void transceiver_offline ();
|
void transceiver_offline ();
|
||||||
|
|
||||||
|
void set_CTY_DAT_version(QString const& version);
|
||||||
|
|
||||||
// Set transceiver frequency in Hertz.
|
// Set transceiver frequency in Hertz.
|
||||||
Q_SLOT void transceiver_frequency (Frequency);
|
Q_SLOT void transceiver_frequency (Frequency);
|
||||||
|
|
||||||
|
1707
Configuration.ui
@ -6,27 +6,34 @@ you change the name in the Applications folder from WSJT-X to WSJT-X_previous
|
|||||||
before proceeding.
|
before proceeding.
|
||||||
|
|
||||||
I recommend that you follow the installation instructions especially if you
|
I recommend that you follow the installation instructions especially if you
|
||||||
are moving from v2.2 to v2.3 or later, of WSJT-X or you have upgraded macOS.
|
are moving from v2.5 to v2.6 or later, of WSJT-X or you have upgraded macOS.
|
||||||
|
|
||||||
Double-click on the wsjtx-...-Darwin.dmg file you have downloaded from K1JT's web-site.
|
Double-click on the wsjtx-...-Darwin.dmg file you have downloaded from K1JT's web-site.
|
||||||
|
Make sure that you leave this window open for the remaining installation steps.
|
||||||
|
|
||||||
Now open a Terminal window by going to Applications->Utilities and clicking on Terminal.
|
Now open a Terminal window by going to Applications->Utilities and clicking on Terminal.
|
||||||
|
|
||||||
Along with this ReadMe file there is a file: com.wsjtx.sysctl.plist which must be copied to a
|
Along with this ReadMe file there is a file: com.wsjtx.sysctl.plist which must be copied to a
|
||||||
system area by typing this line in the Terminal window and then pressing the Return key.
|
system area by typing these lines in the Terminal window and then pressing the Return key after
|
||||||
|
each line.
|
||||||
|
|
||||||
sudo cp /Volumes/WSJT-X/com.wsjtx.sysctl.plist /Library/LaunchDaemons
|
sudo cp /Volumes/WSJT-X/com.wsjtx.sysctl.plist /Library/LaunchDaemons
|
||||||
|
sudo chown root:wheel /Library/LaunchDaemons/com.wsjtx.sysctl.plist
|
||||||
|
|
||||||
you will be asked for your normal password because authorisation is needed to copy this file.
|
you will be asked for your normal password because authorisation is needed to copy this file.
|
||||||
(Your password will not be echoed but press the Return key when completed.)
|
(Your password will not be echoed but press the Return key when completed.)
|
||||||
Now re-boot your Mac. This is necessary to install the changes. After the
|
|
||||||
reboot you should re-open the Terminal window as before and you can check that the
|
IMPORTANT: Now re-boot your Mac otherwise these changes will not take effect.
|
||||||
change has been made by typing:
|
|
||||||
|
After the reboot you should re-open the Terminal window as before and you can check
|
||||||
|
that the change has been made by typing:
|
||||||
|
|
||||||
sysctl -a | grep sysv.shm
|
sysctl -a | grep sysv.shm
|
||||||
|
|
||||||
If shmmax is not shown as 52428800 then contact me since WSJT-X will fail to load with
|
If shmmax is not shown as 52428800 then contact me since WSJT-X will fail to load with
|
||||||
an error message: "Unable to create shared memory segment".
|
an error message: "Unable to create shared memory segment". If the value of shmmax
|
||||||
|
is shown as 20971520 then it is probable that you have download JTDX. WSJT-X and JTDX
|
||||||
|
cannot both control the shmmax paramter. Contact me for advice.
|
||||||
|
|
||||||
You can now close the Terminal window. It will not be necessary to repeat this procedure
|
You can now close the Terminal window. It will not be necessary to repeat this procedure
|
||||||
again, even when you download an updated version of WSJT-X. It might be necessary if you
|
again, even when you download an updated version of WSJT-X. It might be necessary if you
|
||||||
@ -58,8 +65,17 @@ and how to access them.
|
|||||||
Finally, visit the Radio panel. WSJT-X is most effective when operated with CAT
|
Finally, visit the Radio panel. WSJT-X is most effective when operated with CAT
|
||||||
control. You will need to install the relevant Mac device driver for your rig,
|
control. You will need to install the relevant Mac device driver for your rig,
|
||||||
and then re-launch WSJT-X. Return to the Radio panel in Preferences and in
|
and then re-launch WSJT-X. Return to the Radio panel in Preferences and in
|
||||||
the "Serial port" panel select your driver from the list that is presented. If you
|
the "Serial port" panel select your driver from the list that is presented.
|
||||||
do not know where to get an appropriate driver, contact me.
|
|
||||||
|
You may need a device driver for your Mac. The USB/UART Bridge chip inside the Icom,
|
||||||
|
Yaesu and Kenwood radios is a Silicon Labs USB to UART Bridge Controller and the Mac
|
||||||
|
drivers are available here:
|
||||||
|
|
||||||
|
https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers
|
||||||
|
|
||||||
|
Visit the SiLabs site and download v6 for a Mac. Then in WSJT-X if you use the drop-down menu
|
||||||
|
for Serial Port you should see something like /dev/tty.SLAB_USBtoUART if the driver has been
|
||||||
|
installed correctly. Make sure you read the release notes that come with the driver.
|
||||||
|
|
||||||
WSJT-X needs the Mac clock to be accurate. Visit System Preferences > Date & Time
|
WSJT-X needs the Mac clock to be accurate. Visit System Preferences > Date & Time
|
||||||
and make sure that Date and Time are set automatically. The drop-down menu will
|
and make sure that Date and Time are set automatically. The drop-down menu will
|
||||||
@ -87,7 +103,8 @@ simultaneously, the shmall parameter in the com.wsjtx.sysctl.plist file needs to
|
|||||||
The shmall parameter determines the amount of shared memory which is allocated in 4096 byte pages
|
The shmall parameter determines the amount of shared memory which is allocated in 4096 byte pages
|
||||||
with 50MB (52428800) required for each instance. The shmall parameter is calculated as:
|
with 50MB (52428800) required for each instance. The shmall parameter is calculated as:
|
||||||
(n * 52428800)/4096 where 'n' is the number of instances required to run simultaneously.
|
(n * 52428800)/4096 where 'n' is the number of instances required to run simultaneously.
|
||||||
Remember to reboot your Mac afterwards.
|
Replace your new version of this file in /Library/LaunchDaemons and remember to reboot your
|
||||||
|
Mac afterwards.
|
||||||
|
|
||||||
Note that the shmmax parameter remains unchanged. This is the maximum amount of shared memory that
|
Note that the shmmax parameter remains unchanged. This is the maximum amount of shared memory that
|
||||||
any one instance is allowed to request from the total shared memory allocation and should not
|
any one instance is allowed to request from the total shared memory allocation and should not
|
||||||
@ -97,3 +114,9 @@ If two instances of WSJT-X are running, it is likely that you might need additio
|
|||||||
audio devices, from two rigs for example. Visit Audio MIDI Setup and create an Aggregate Device
|
audio devices, from two rigs for example. Visit Audio MIDI Setup and create an Aggregate Device
|
||||||
which will allow you to specify more than one interface. I recommend you consult Apple's guide
|
which will allow you to specify more than one interface. I recommend you consult Apple's guide
|
||||||
on combining multiple audio interfaces which is at https://support.apple.com/en-us/HT202000.
|
on combining multiple audio interfaces which is at https://support.apple.com/en-us/HT202000.
|
||||||
|
|
||||||
|
2. Preventing WSJT-X from being put into 'sleep' mode (App Nap).
|
||||||
|
|
||||||
|
In normal circumstances an application which has not been directly accessed for a while can be
|
||||||
|
subject to App Nap which means it is suspended until such time as its windows are accessed. If
|
||||||
|
|
||||||
|
@ -11,7 +11,39 @@ extern "C" {
|
|||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
QRegularExpression words_re {R"(^(?:(?<word1>(?:CQ|DE|QRZ)(?:\s?DX|\s(?:[A-Z]{1,4}|\d{3}))|[A-Z0-9/]+|\.{3})\s)(?:(?<word2>[A-Z0-9/]+)(?:\s(?<word3>[-+A-Z0-9]+)(?:\s(?<word4>(?:OOO|(?!RR73)[A-R]{2}[0-9]{2})))?)?)?)"};
|
QRegularExpression tokens_re {R"(
|
||||||
|
^
|
||||||
|
(?:(?<dual>[A-Z0-9/]+)\sRR73;\s)? # dual reply DXpedition message
|
||||||
|
(?:
|
||||||
|
(?<word1>
|
||||||
|
(?:CQ|DE|QRZ)
|
||||||
|
(?:\s?DX|\s
|
||||||
|
(?:[A-Z]{1,4}|\d{3}) # directional CQ
|
||||||
|
)
|
||||||
|
| [A-Z0-9/]+ # DX call
|
||||||
|
|\.{3} # unknown hash code
|
||||||
|
)\s
|
||||||
|
)
|
||||||
|
(?:
|
||||||
|
(?<word2>[A-Z0-9/]+) # DE call
|
||||||
|
(?:\s
|
||||||
|
(?<word3>[-+A-Z0-9]+) # report
|
||||||
|
(?:\s
|
||||||
|
(?<word4>
|
||||||
|
(?:
|
||||||
|
OOO # EME
|
||||||
|
| (?!RR73)[A-R]{2}[0-9]{2} # grid square (not RR73)
|
||||||
|
| 5[0-9]{5} # EU VHF Contest report & serial
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(?:\s
|
||||||
|
(?<word5>[A-R]{2}[0-9]{2}[A-X]{2}) # EU VHF Contest grid locator
|
||||||
|
)?
|
||||||
|
)?
|
||||||
|
)?
|
||||||
|
)?
|
||||||
|
)"
|
||||||
|
, QRegularExpression::ExtendedPatternSyntaxOption};
|
||||||
}
|
}
|
||||||
|
|
||||||
DecodedText::DecodedText (QString const& the_string)
|
DecodedText::DecodedText (QString const& the_string)
|
||||||
@ -23,13 +55,15 @@ DecodedText::DecodedText (QString const& the_string)
|
|||||||
, is_standard_ {false}
|
, is_standard_ {false}
|
||||||
{
|
{
|
||||||
// discard appended AP info
|
// discard appended AP info
|
||||||
clean_string_.replace (QRegularExpression {R"(^(.*?)(?:\?\s)?a[0-9].*$)"}, "\\1");
|
clean_string_.replace (QRegularExpression {R"(^(.*?)(?:\?\s)?[aq][0-9].*$)"}, "\\1");
|
||||||
|
|
||||||
// qDebug () << "DecodedText: the_string:" << the_string << "Nbsp pos:" << the_string.indexOf (QChar::Nbsp);
|
// qDebug () << "DecodedText: the_string:" << the_string << "Nbsp pos:" << the_string.indexOf (QChar::Nbsp);
|
||||||
if (message_.length() >= 1)
|
if (message_.length() >= 1)
|
||||||
{
|
{
|
||||||
message0_ = message_.left(36);
|
// remove appended confidence (?) and ap designators before truncating the message
|
||||||
message_ = message_.left(36).remove (QRegularExpression {"[<>]"});
|
message_ = clean_string_.mid (column_qsoText + padding_).trimmed ();
|
||||||
|
message0_ = message_.left(37);
|
||||||
|
message_ = message_.left(37).remove (QRegularExpression {"[<>]"});
|
||||||
int i1 = message_.indexOf ('\r');
|
int i1 = message_.indexOf ('\r');
|
||||||
if (i1 > 0)
|
if (i1 > 0)
|
||||||
{
|
{
|
||||||
@ -60,11 +94,13 @@ QStringList DecodedText::messageWords () const
|
|||||||
// extract up to the first four message words
|
// extract up to the first four message words
|
||||||
QString t=message_;
|
QString t=message_;
|
||||||
if(t.left(4)=="TU; ") t=message_.mid(4,-1);
|
if(t.left(4)=="TU; ") t=message_.mid(4,-1);
|
||||||
return words_re.match(t).capturedTexts();
|
return tokens_re.match(t).capturedTexts();
|
||||||
}
|
}
|
||||||
// simple word split for free text messages
|
// simple word split for free text messages
|
||||||
auto words = message_.split (' ', SkipEmptyParts);
|
auto words = message_.split (' ', SkipEmptyParts);
|
||||||
// add whole message as item 0 to mimic RE capture list
|
// add whole message and two empty strings as item 0 & 1 to mimic RE
|
||||||
|
// capture list
|
||||||
|
words.prepend (QString {});
|
||||||
words.prepend (message_);
|
words.prepend (message_);
|
||||||
return words;
|
return words;
|
||||||
}
|
}
|
||||||
@ -94,7 +130,7 @@ bool DecodedText::isTX() const
|
|||||||
|
|
||||||
bool DecodedText::isLowConfidence () const
|
bool DecodedText::isLowConfidence () const
|
||||||
{
|
{
|
||||||
return QChar {'?'} == string_.mid (padding_ + column_qsoText + 21, 1);
|
return QChar {'?'} == string_.mid (padding_ + column_qsoText + 36, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
int DecodedText::frequencyOffset() const
|
int DecodedText::frequencyOffset() const
|
||||||
@ -128,18 +164,23 @@ bool DecodedText::report(QString const& myBaseCall, QString const& dxBaseCall, /
|
|||||||
if (message_.size () < 1) return false;
|
if (message_.size () < 1) return false;
|
||||||
|
|
||||||
QStringList const& w = message_.split(" ", SkipEmptyParts);
|
QStringList const& w = message_.split(" ", SkipEmptyParts);
|
||||||
if (w.size ()
|
int offset {0};
|
||||||
&& is_standard_ && (w[0] == myBaseCall
|
if (w.size () > 2)
|
||||||
|| w[0].endsWith ("/" + myBaseCall)
|
{
|
||||||
|| w[0].startsWith (myBaseCall + "/")
|
if ("RR73;" == w[1] && w.size () > 3)
|
||||||
|| (w.size () > 1 && !dxBaseCall.isEmpty ()
|
{
|
||||||
&& (w[1] == dxBaseCall
|
offset = 2;
|
||||||
|| w[1].endsWith ("/" + dxBaseCall)
|
}
|
||||||
|| w[1].startsWith (dxBaseCall + "/")))))
|
if (is_standard_ && (w[offset] == myBaseCall
|
||||||
|
|| w[offset].endsWith ("/" + myBaseCall)
|
||||||
|
|| w[offset].startsWith (myBaseCall + "/")
|
||||||
|
|| (w.size () > offset + 1 && !dxBaseCall.isEmpty ()
|
||||||
|
&& (w[offset + 1] == dxBaseCall
|
||||||
|
|| w[offset + 1].endsWith ("/" + dxBaseCall)
|
||||||
|
|| w[offset + 1].startsWith (dxBaseCall + "/")))))
|
||||||
{
|
{
|
||||||
QString tt="";
|
|
||||||
if(w.size() > 2) tt=w[2];
|
|
||||||
bool ok;
|
bool ok;
|
||||||
|
auto tt = w[offset + 2];
|
||||||
auto i1=tt.toInt(&ok);
|
auto i1=tt.toInt(&ok);
|
||||||
if (ok and i1>=-50 and i1<50)
|
if (ok and i1>=-50 and i1<50)
|
||||||
{
|
{
|
||||||
@ -157,13 +198,14 @@ bool DecodedText::report(QString const& myBaseCall, QString const& dxBaseCall, /
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return is_standard_;
|
return is_standard_;
|
||||||
}
|
}
|
||||||
|
|
||||||
// get the first text word, usually the call
|
// get the first text word, usually the call
|
||||||
QString DecodedText::call() const
|
QString DecodedText::call() const
|
||||||
{
|
{
|
||||||
return words_re.match (message_).captured ("word1");
|
return tokens_re.match (message_).captured ("word1");
|
||||||
}
|
}
|
||||||
|
|
||||||
// get the second word, most likely the de call and the third word, most likely grid
|
// get the second word, most likely the de call and the third word, most likely grid
|
||||||
@ -175,7 +217,7 @@ void DecodedText::deCallAndGrid(/*out*/QString& call, QString& grid) const
|
|||||||
{
|
{
|
||||||
msg = msg.mid (p + 2);
|
msg = msg.mid (p + 2);
|
||||||
}
|
}
|
||||||
auto const& match = words_re.match (msg);
|
auto const& match = tokens_re.match (msg);
|
||||||
call = match.captured ("word2");
|
call = match.captured ("word2");
|
||||||
grid = match.captured ("word3");
|
grid = match.captured ("word3");
|
||||||
if ("R" == grid) grid = match.captured ("word4");
|
if ("R" == grid) grid = match.captured ("word4");
|
||||||
|
@ -443,7 +443,7 @@ void EqualizationToolsDialog::impl::plot_current ()
|
|||||||
plot_.graph (3)->rescaleValueAxis ();
|
plot_.graph (3)->rescaleValueAxis ();
|
||||||
|
|
||||||
QFileInfo refspec_file_info {data_directory_.absoluteFilePath ("refspec.dat")};
|
QFileInfo refspec_file_info {data_directory_.absoluteFilePath ("refspec.dat")};
|
||||||
std::ifstream refspec_file (refspec_file_info.absoluteFilePath ().toLatin1 ().constData (), std::ifstream::in);
|
std::ifstream refspec_file (refspec_file_info.absoluteFilePath ().toLocal8Bit ().constData (), std::ifstream::in);
|
||||||
unsigned n;
|
unsigned n;
|
||||||
if (refspec_file >> amp_poly_low_ >> amp_poly_high_ >> n)
|
if (refspec_file >> amp_poly_low_ >> amp_poly_high_ >> n)
|
||||||
{
|
{
|
||||||
@ -499,7 +499,7 @@ void EqualizationToolsDialog::impl::plot_phase ()
|
|||||||
, "Phase Coefficient Files (*.pcoeff)");
|
, "Phase Coefficient Files (*.pcoeff)");
|
||||||
if (!phase_file_name.size ()) return;
|
if (!phase_file_name.size ()) return;
|
||||||
|
|
||||||
std::ifstream phase_file (phase_file_name.toLatin1 ().constData (), std::ifstream::in);
|
std::ifstream phase_file (phase_file_name.toLocal8Bit ().constData (), std::ifstream::in);
|
||||||
int n;
|
int n;
|
||||||
float chi;
|
float chi;
|
||||||
float rmsdiff;
|
float rmsdiff;
|
||||||
|
36
INSTALL
@ -16,8 +16,7 @@ Installing WSJT-X
|
|||||||
|
|
||||||
Binary packages of WSJT-X are available from the project web site:
|
Binary packages of WSJT-X are available from the project web site:
|
||||||
|
|
||||||
http://www.physics.princeton.edu/pulsar/K1JT/wsjtx.html
|
https://wsjt.sourceforge.io/wsjtx.html
|
||||||
|
|
||||||
|
|
||||||
Building from Source
|
Building from Source
|
||||||
====================
|
====================
|
||||||
@ -28,7 +27,7 @@ the Boost C++ libraries. For MS Windows see the section "Building
|
|||||||
from Source on MS Windows" below. For Apple Mac see the section
|
from Source on MS Windows" below. For Apple Mac see the section
|
||||||
"Building from Source on Apple Mac".
|
"Building from Source on Apple Mac".
|
||||||
|
|
||||||
Qt v5, preferably v5.9 or later is required to build WSJT-X.
|
Qt v5, preferably v5.12 or later is required to build WSJT-X.
|
||||||
|
|
||||||
Qt v5 multimedia support, serial port, and Linguist is necessary as
|
Qt v5 multimedia support, serial port, and Linguist is necessary as
|
||||||
well as the core Qt v5 components, normally installing the Qt
|
well as the core Qt v5 components, normally installing the Qt
|
||||||
@ -51,15 +50,13 @@ normally you can choose not to install libusb-1.0-dev but if you have
|
|||||||
a SoftRock USB or similar SDR that uses a custom USB interface then it
|
a SoftRock USB or similar SDR that uses a custom USB interface then it
|
||||||
is required.
|
is required.
|
||||||
|
|
||||||
The Hamlib library is required. Currently WSJT-X needs to be built
|
The Hamlib library is required. WSJT-X can be built with any version
|
||||||
using a forked version of the Hamlib git master. This fork contains
|
of the Hamlib git master. To build Hamlib from sources something
|
||||||
patches not yet accepted by the Hamlib development team which are
|
like the following recipe should suffice:
|
||||||
essential for correct operation of WSJT-X. To build the Hamlib fork
|
|
||||||
from sources something like the following recipe should suffice:
|
|
||||||
|
|
||||||
$ mkdir ~/hamlib-prefix
|
$ mkdir ~/hamlib-prefix
|
||||||
$ cd ~/hamlib-prefix
|
$ cd ~/hamlib-prefix
|
||||||
$ git clone git://git.code.sf.net/u/bsomervi/hamlib src
|
$ git clone https://github.com/Hamlib/Hamlib src
|
||||||
$ cd src
|
$ cd src
|
||||||
$ git checkout integration
|
$ git checkout integration
|
||||||
$ ./bootstrap
|
$ ./bootstrap
|
||||||
@ -114,13 +111,13 @@ Building from Source on MS Windows
|
|||||||
|
|
||||||
Because building on MS Windows is quite complicated there is an
|
Because building on MS Windows is quite complicated there is an
|
||||||
Software Development Kit available that provides all the prerequisite
|
Software Development Kit available that provides all the prerequisite
|
||||||
libraries and tools for building WSJT-X. This SDK is called JT-SDK-QT
|
libraries and tools for building WSJT-X. This SDK is called HAMLIB SDK
|
||||||
which is documented here:
|
which is documented here:
|
||||||
|
|
||||||
http://physics.princeton.edu/pulsar/K1JT/wsjtx-doc/dev-guide-main.html
|
https://sourceforge.net/projects/hamlib-sdk/
|
||||||
|
|
||||||
If you need to build Hamlib rather than use the Hamlib kit included in
|
If you need to build Hamlib rather than use the Hamlib kit included in
|
||||||
the JT-SDK the following recipe should help. Reasons for building
|
the HAMLIB SDK the following recipe should help. Reasons for building
|
||||||
Hamlib from source might include picking up the very latest patches or
|
Hamlib from source might include picking up the very latest patches or
|
||||||
building a different branch that you wish to contribute to.
|
building a different branch that you wish to contribute to.
|
||||||
|
|
||||||
@ -144,7 +141,7 @@ In an MSYS shell:-
|
|||||||
|
|
||||||
$ mkdir ~/hamib-prefix
|
$ mkdir ~/hamib-prefix
|
||||||
$ cd ~/hamlib-prefix
|
$ cd ~/hamlib-prefix
|
||||||
$ git clone git://git.code.sf.net/u/bsomervi/hamlib src
|
$ git clone https://github.com/Hamlib/Hamlib src
|
||||||
$ cd src
|
$ cd src
|
||||||
$ git checkout integration
|
$ git checkout integration
|
||||||
$ ./bootstrap
|
$ ./bootstrap
|
||||||
@ -179,10 +176,6 @@ Hamlib binary location as one of the paths in CMAKE_PREFIX_PATH.
|
|||||||
Building from Source on Apple Mac
|
Building from Source on Apple Mac
|
||||||
=================================
|
=================================
|
||||||
|
|
||||||
These instructions are adapted from my Evernote page at:
|
|
||||||
|
|
||||||
https://www.evernote.com/pub/bsomervi/wsjt-xmacbuilds
|
|
||||||
|
|
||||||
There are several ways to get the required GNU and other open source
|
There are several ways to get the required GNU and other open source
|
||||||
tools and libraries installed, my preference is MacPorts because it is
|
tools and libraries installed, my preference is MacPorts because it is
|
||||||
easy to use and does everything we need.
|
easy to use and does everything we need.
|
||||||
@ -229,12 +222,11 @@ instructions are here:
|
|||||||
|
|
||||||
Hamlib
|
Hamlib
|
||||||
------
|
------
|
||||||
First fetch hamlib from the repository, in this case my fork of Hamlib
|
First fetch hamlib from the git master repository:
|
||||||
3 until the official repository has all the fixes we need:
|
|
||||||
|
|
||||||
$ mkdir -p ~/hamlib-prefix/build
|
$ mkdir -p ~/hamlib-prefix/build
|
||||||
$ cd ~/hamlib-prefix
|
$ cd ~/hamlib-prefix
|
||||||
$ git clone git://git.code.sf.net/u/bsomervi/hamlib src
|
$ git clone https://github.com/Hamlib/Hamlib src
|
||||||
$ cd src
|
$ cd src
|
||||||
$ git checkout integration
|
$ git checkout integration
|
||||||
$ ./bootstrap
|
$ ./bootstrap
|
||||||
@ -353,8 +345,8 @@ which installs the WSJT-X application bundle into ~/wsjtx-prefix
|
|||||||
Updating and Rebuilding Hamlib
|
Updating and Rebuilding Hamlib
|
||||||
==============================
|
==============================
|
||||||
|
|
||||||
From time to time new fixes will be pushed to the Hamlib fork
|
From time to time new fixes will be pushed to the Hamlib git
|
||||||
repository integration branch. To pick them up type:
|
master repository. To pick them up type:
|
||||||
|
|
||||||
$ cd ~/hamlib-prefix/src
|
$ cd ~/hamlib-prefix/src
|
||||||
$ git pull
|
$ git pull
|
||||||
|
@ -52,9 +52,13 @@ void register_types ()
|
|||||||
|
|
||||||
item_editor_factory->registerEditor (qMetaTypeId<QDateTime> (), new QStandardItemEditorCreator<DateTimeEdit> ());
|
item_editor_factory->registerEditor (qMetaTypeId<QDateTime> (), new QStandardItemEditorCreator<DateTimeEdit> ());
|
||||||
|
|
||||||
// Frequency list model
|
// V101 Frequency list model
|
||||||
|
qRegisterMetaTypeStreamOperators<FrequencyList_v2_101::Item> ("Item_v2_101");
|
||||||
|
QMetaType::registerConverter<FrequencyList_v2_101::Item, QString> (&FrequencyList_v2_101::Item::toString);
|
||||||
|
qRegisterMetaTypeStreamOperators<FrequencyList_v2_101::FrequencyItems> ("FrequencyItems_v2_101");
|
||||||
|
|
||||||
|
// V100 Frequency list model
|
||||||
qRegisterMetaTypeStreamOperators<FrequencyList_v2::Item> ("Item_v2");
|
qRegisterMetaTypeStreamOperators<FrequencyList_v2::Item> ("Item_v2");
|
||||||
QMetaType::registerConverter<FrequencyList_v2::Item, QString> (&FrequencyList_v2::Item::toString);
|
|
||||||
qRegisterMetaTypeStreamOperators<FrequencyList_v2::FrequencyItems> ("FrequencyItems_v2");
|
qRegisterMetaTypeStreamOperators<FrequencyList_v2::FrequencyItems> ("FrequencyItems_v2");
|
||||||
|
|
||||||
// defunct old versions
|
// defunct old versions
|
||||||
|
788
NEWS
@ -9,7 +9,784 @@
|
|||||||
\$$ \$$ \$$$$$$ \$$$$$$ \$$ \$$ \$$
|
\$$ \$$ \$$$$$$ \$$$$$$ \$$ \$$ \$$
|
||||||
|
|
||||||
|
|
||||||
Copyright 2001 - 2021 by Joe Taylor, K1JT.
|
Copyright 2001 - 2024 by Joe Taylor, K1JT, and the WSJT Development Team
|
||||||
|
|
||||||
|
Release: WSJT-X 2.7.0-rc4
|
||||||
|
March 11, 2024
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
WSJT-X 2.7.0 Release Candidate 4 brings some improvements for Fox-mode
|
||||||
|
operators, new features for companion program QMAP, and a number of
|
||||||
|
relatively minor enhancements and bug fixes.
|
||||||
|
|
||||||
|
QMAP enhancements -- of particular interest to EME operators:
|
||||||
|
|
||||||
|
- QMAP now decodes Q65 submodes with both 60-second and 30-second T/R
|
||||||
|
sequence lengths. Clicking on a resulting line in the WSJT-X Active
|
||||||
|
Stations window automatically sets dial frequency and working
|
||||||
|
submode as needed to call that station.
|
||||||
|
|
||||||
|
- QMAP operates in 60-second receive sequences, and its Q65 decoder
|
||||||
|
starts at t=19.5, 30.0, 49.5, and 58.5 s into the sequence. Most
|
||||||
|
decoded messages are displayed well before the end of the relevant
|
||||||
|
time slot.
|
||||||
|
|
||||||
|
- A new, more compact file format is now used for wideband data
|
||||||
|
files. A "Save decoded" option has been added to the Save menu.
|
||||||
|
|
||||||
|
- An option has been added to allow exporting a 3 kHz portion of a
|
||||||
|
wideband data file as a standard WSJT-X *.wav file.
|
||||||
|
|
||||||
|
- CTRL+click on QMAP's upper waterfall sends an integer kHz dial
|
||||||
|
frequency request to WSJT-X.
|
||||||
|
|
||||||
|
- With focus on the WSJT-X main window, hit Alt+A on the keyboard to
|
||||||
|
clear the Active Stations window.
|
||||||
|
|
||||||
|
- Many minor enhancements to the User Interface.
|
||||||
|
|
||||||
|
WSJT-X:
|
||||||
|
|
||||||
|
- Enable decoding of MSK144 from the jt9[.exe] executable.
|
||||||
|
|
||||||
|
- Several changes to reduce problems experienced when (contrary to
|
||||||
|
our recommendations) messages with short (10-bit) callsign hashes
|
||||||
|
are used in standard FT4/FT8 sub-bands.
|
||||||
|
|
||||||
|
Release: WSJT-X 2.7.0-rc3
|
||||||
|
January 1, 2024
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
WSJT-X 2.7.0 Release Candidate 3 brings some new features, as well as
|
||||||
|
numerous detail improvements and bug fixes, such as:
|
||||||
|
|
||||||
|
- Added a new "Update Hamlib" function. On Windows, it allows the user to
|
||||||
|
update Hamlib directly from the program. The previously used version is
|
||||||
|
backed up, so the user can easily revert a hamlib update.
|
||||||
|
|
||||||
|
- The Hamlib version in use is now displayed (also on Linux and macOS).
|
||||||
|
|
||||||
|
- The FT Roundup Messages protocol has been enhanced. It now allows also
|
||||||
|
the exchange of static 4-digit numbers instead of serial numbers. This
|
||||||
|
extends the usability of the FT RU protocol for other contest types.
|
||||||
|
|
||||||
|
- Improved direct switching between modes. Submode, as well as the status
|
||||||
|
of the "Sh" and "Fast" checkboxes are now saved and restored by mode.
|
||||||
|
|
||||||
|
- Some right-click events were made more intuitive and consistent.
|
||||||
|
- Right-clicking the Q65 button enables Q65 Pileup mode, a left-click
|
||||||
|
brings you back to the normal Q65 mode.
|
||||||
|
- Right-click the JT65 button to switch to JT9 mode.
|
||||||
|
|
||||||
|
- For Q65, all messages for us are now displayed in the right window.
|
||||||
|
|
||||||
|
- Message averaging is now allowed only when VHF features are
|
||||||
|
enabled, and label texts are changed to "Single Period Decodes" and
|
||||||
|
"Average Decodes" only if averaging is enabled.
|
||||||
|
|
||||||
|
- Some improvements to the Hamlib Transceiver code. Behavior is now
|
||||||
|
more stable when Rig Split has been selected.
|
||||||
|
|
||||||
|
- Prevented redundant network communication between WSJT-X and DX Lab
|
||||||
|
Suite Commander.
|
||||||
|
|
||||||
|
- Download of the LotW file now works without OpenSSL libraries.
|
||||||
|
|
||||||
|
- Made the spot counter work for WSPR.
|
||||||
|
|
||||||
|
- Prevented insertion of an individual contest name when in Fox mode.
|
||||||
|
|
||||||
|
- WAE entities are now assigned to the correct DXCC when "Include
|
||||||
|
extra WAE entities" is not selected.
|
||||||
|
|
||||||
|
- Added a utility program 'cablog' which can be used to convert the
|
||||||
|
wsjtx.log file to Cabrillo format for the ARRL EME contest.
|
||||||
|
|
||||||
|
- Minor improvements to the Active Stations window.
|
||||||
|
|
||||||
|
- The Rx/Tx frequency for Echo mode has been fixed at 1500 Hz.
|
||||||
|
|
||||||
|
- Some corrections and updates to the INSTALL instructions for Linux.
|
||||||
|
|
||||||
|
- Updated CTY.DAT file.
|
||||||
|
|
||||||
|
Release: WSJT-X 2.7.0-rc2
|
||||||
|
July 7, 2023
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
WSJT-X 2.7.0 Release Candidate 2 introduces several minor improvements
|
||||||
|
and bug fixes.
|
||||||
|
|
||||||
|
- CTRL+SHIFT+F11/F12 now changes dial frequency by 1000 Hz instead of
|
||||||
|
2000 Hz.
|
||||||
|
|
||||||
|
- Improved spotting to PSK Reporter for upcoming HamSCI Festivals of
|
||||||
|
Eclipse Ionospheric Science.
|
||||||
|
|
||||||
|
- Added optional Hungarian translation of the user interface.
|
||||||
|
|
||||||
|
- Fixed a flaw that could produce false decodes in Q65 submodes D and E.
|
||||||
|
|
||||||
|
- Fixed a flaw with the QSO start time. It is now reset when the DX
|
||||||
|
Call changes.
|
||||||
|
|
||||||
|
- Fixed a flaw that prevented contest logging of the ARRL Digi Contest.
|
||||||
|
|
||||||
|
- Right-clicking the Q65 mode button to toggle the Q65 Pileup mode on/off
|
||||||
|
now also works on macOS.
|
||||||
|
|
||||||
|
- Fixed a compilation error on macOS Ventura.
|
||||||
|
|
||||||
|
- WSPR and FST4W band hopping now works again.
|
||||||
|
|
||||||
|
- It is now ensured that "U.S.A." is displayed when using certain
|
||||||
|
cty.dat files.
|
||||||
|
|
||||||
|
- Corrected the problem with duplicated FT8 entries in ActiveStations
|
||||||
|
window.
|
||||||
|
|
||||||
|
Release: WSJT-X 2.7.0-rc1
|
||||||
|
May 12, 2023
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
WSJT-X 2.7.0 Release Candidate 1 introduces a new program called QMAP,
|
||||||
|
a new Special Operating Activity known as Q65 Pileup, and a number of
|
||||||
|
other enhancements and fixes.
|
||||||
|
|
||||||
|
- QMAP and Q65 Pileup mode are of particular interest to those
|
||||||
|
engaged in Earth-Moon-Earth (EME) communication, but other
|
||||||
|
applications may be found for them as well.
|
||||||
|
|
||||||
|
- QMAP is derived from MAP65, an older program used since 2007 for
|
||||||
|
EME, mainly on the 2 m band. QMAP provides single-polarization
|
||||||
|
receive-only capabilities for any one of the 60-second submodes
|
||||||
|
of Q65. It allows you to monitor all traffic in a 90 kHz subband
|
||||||
|
while conducting EME QSOs in the usual way with WSJT-X.
|
||||||
|
|
||||||
|
- Q65 Pileup mode is a new feature in WSJT-X that will assist DX
|
||||||
|
operators using Q65 in pileup circumstances with many
|
||||||
|
simultaneous callers and very weak signals, such as those
|
||||||
|
experienced by 6-meter EME DXpeditions.
|
||||||
|
|
||||||
|
- Further details on QMAP and Q65 Pileup mode are available in a
|
||||||
|
Quick-Start guide posted here:
|
||||||
|
https://wsjt.sourceforge.io/Quick_Start_WSJT-X_2.7_QMAP.pdf
|
||||||
|
|
||||||
|
- WSJT-X now provides more efficient spotting to PSK Reporter.
|
||||||
|
Redundant spots are omitted, and posting of spots is now spread
|
||||||
|
more widely in time. (Temporarily, in support of the HamSCI
|
||||||
|
Festivals of Eclipse Ionospheric Science, spots will be transmitted
|
||||||
|
more frequently during the upcoming solar eclipses.)
|
||||||
|
|
||||||
|
- WSJT-X is now able to process more than 100 FT8 decodes in a single
|
||||||
|
reception interval.
|
||||||
|
|
||||||
|
- Improvements to the Fox mode:
|
||||||
|
- More convenient and efficient handling of the two queues.
|
||||||
|
- Fox Log window now displays statistical data on the QSO rate.
|
||||||
|
|
||||||
|
- When the station locator is changed (e.g during portable
|
||||||
|
operations), the new locator will be sent automatically to PSK
|
||||||
|
Reporter.
|
||||||
|
|
||||||
|
- The cty.dat file can now be updated by clicking a button on the
|
||||||
|
Settings -> Colors tab.
|
||||||
|
|
||||||
|
- A new status display appears when fetching a new LotW file.
|
||||||
|
|
||||||
|
- Multi-streamed messages transmitted by MSHV are now handled
|
||||||
|
properly when WSJT-X is in Hound mode.
|
||||||
|
|
||||||
|
- Auto-sequencing now has better protection against unwanted effects
|
||||||
|
caused by late FT8 decodes.
|
||||||
|
|
||||||
|
- Fixed an inconsistency in which Contest Name was not correctly
|
||||||
|
remembered.
|
||||||
|
|
||||||
|
- Other minor bug fixes.
|
||||||
|
|
||||||
|
- Updated hyperlinks to our homepage and to our new WSJT GROUP User
|
||||||
|
Forum (https://groups.io/g/wsjtgroup/) can now also be found in the
|
||||||
|
User Guide.
|
||||||
|
|
||||||
|
- The build instructions for macOS have been clarified.
|
||||||
|
|
||||||
|
|
||||||
|
Release: WSJT-X 2.6.1
|
||||||
|
January 16, 2023
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
WSJT-X 2.6.1 is mostly a bug fix release for Q65. It has the following
|
||||||
|
changes since release 2.6.0:
|
||||||
|
|
||||||
|
- Fix a flaw in Q65 mode that prevented proper display of the T/R
|
||||||
|
period spinner.
|
||||||
|
|
||||||
|
- Correct the reference to "ARRL International Digital Contest" in the
|
||||||
|
Release Notes.
|
||||||
|
|
||||||
|
- Make the initialization of the decoded text font more robust.
|
||||||
|
|
||||||
|
- Better initialization when starting the program in FT8 Hound mode.
|
||||||
|
|
||||||
|
- Fix a compiler warning on macOS.
|
||||||
|
|
||||||
|
|
||||||
|
Release: WSJT-X 2.6.0
|
||||||
|
January 6, 2023
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
WSJT-X 2.6.0 is a General Availability (GA) release, the first since
|
||||||
|
version 2.5.4. Its major enhancements include the following:
|
||||||
|
|
||||||
|
- Mode selection buttons on main window for FT4, FT8, JT65, MSK144,
|
||||||
|
Q65, and FT8's Hound mode
|
||||||
|
- Support for the ARRL International Digital Contest
|
||||||
|
- Performance enhancements for the FT8 and Q65 modes
|
||||||
|
- New features for EME Echo mode, including calibrated SNR reports
|
||||||
|
- Several new convenience features for Fox operators
|
||||||
|
- Save/Restore capability, "Preferred" status, and effective date
|
||||||
|
ranges for mode-dependent tables of default frequencies
|
||||||
|
- Improved display features for contest log
|
||||||
|
- Improved calibration of SNR estimates for modes FST4 and FST4W
|
||||||
|
|
||||||
|
Other enhancements and bug fixes since 2.6.0-rc5 include the following:
|
||||||
|
|
||||||
|
- PSK Reporter spotting is now also possible for frequencies > 4 GHz.
|
||||||
|
This is required for QO-100, for example.
|
||||||
|
|
||||||
|
- The minimum width of the main window has been further reduced, and
|
||||||
|
such small sizes are now remembered and properly restored.
|
||||||
|
|
||||||
|
- Some further improvements for Fox operators.
|
||||||
|
|
||||||
|
- Fix the long-standing flaw that "Start new period decodes at top"
|
||||||
|
didn't work anymore after several hours.
|
||||||
|
|
||||||
|
- Fix a flaw that could cause crashes by double-clicking messages
|
||||||
|
with <...> in certain QSO situations.
|
||||||
|
|
||||||
|
- Fix a flaw that prevented the rig from initializing correctly after
|
||||||
|
switching between configurations when connected via HRD.
|
||||||
|
|
||||||
|
- Add tooltips to better explain the split operation options.
|
||||||
|
|
||||||
|
- Add some additional FT roundup exchanges which can be used for
|
||||||
|
local contests or QSO parties.
|
||||||
|
|
||||||
|
- Add an option to call CQ with an individual contest name.
|
||||||
|
|
||||||
|
- Update of some ARRL section abbreviations.
|
||||||
|
|
||||||
|
For full details on changes since WSJT-X version 2.5.4, be sure to
|
||||||
|
read the Release Notes sections for 2.6.0-rc1 through rc5, immediately
|
||||||
|
following.
|
||||||
|
|
||||||
|
|
||||||
|
Release: WSJT-X 2.6.0-rc5
|
||||||
|
November 29, 2022
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
WSJT-X 2.6.0 Release Candidate 5 brings a number of improvements as
|
||||||
|
well as some bug fixes.
|
||||||
|
|
||||||
|
In program WSJT-X:
|
||||||
|
|
||||||
|
- Better calibration for FST4/W SNR estimates.
|
||||||
|
|
||||||
|
- Upload FST4W-900 spots to wsprnet with TR code 15 instead of 16.
|
||||||
|
|
||||||
|
- Improved FT8 decoding on crowded bands.
|
||||||
|
|
||||||
|
- The Working frequency table now offers the following options:
|
||||||
|
- Better handling of more than one frequency per band.
|
||||||
|
- Set your preferred frequencies, WSJT-X always comes back to these
|
||||||
|
QRGs when changing band or mode.
|
||||||
|
- You can label your frequencies with descriptions (e.g. DXp AB0YXZ).
|
||||||
|
- Option to set Start and End Date/Time, so that the frequencies
|
||||||
|
automatically appear and disappear. Useful for contest or
|
||||||
|
DXpedition QRGs.
|
||||||
|
- Load a frequency table from a file to easily get all such data
|
||||||
|
implemented.
|
||||||
|
|
||||||
|
- In Fox mode, there are now a few additional functions that allow
|
||||||
|
operators to react even better to different QSO situations:
|
||||||
|
- A new two-column table in Tab 2 provides a better overview of
|
||||||
|
the queue and of the callsigns with QSOs in progress.
|
||||||
|
- Fox operator can now change the ordering of callsigns in the
|
||||||
|
queue so that he can react if there is only a narrow time slot
|
||||||
|
for a particular QSO due to propagation.
|
||||||
|
- Fox now responds for another two cycles to stations whose
|
||||||
|
report was not received, increasing the success rate for a
|
||||||
|
difficult QSO.
|
||||||
|
|
||||||
|
- Correct a flaw in Hound mode that sometimes prevented completion of
|
||||||
|
QSOs with non-standard calls.
|
||||||
|
|
||||||
|
- Improvements to EME Echo mode:
|
||||||
|
- New control "Avg" sets the number of Echo cycles to be averaged.
|
||||||
|
- New capability to display measurements of wideband noise power as
|
||||||
|
a function of time. This can be useful for measuring Sun noise,
|
||||||
|
antenna tracking errors, and the like.
|
||||||
|
- Several minor bug fixes
|
||||||
|
|
||||||
|
- Correct a flaw that prevented WSJT-X from always initializing
|
||||||
|
correctly when special operating activities were enabled.
|
||||||
|
|
||||||
|
- Correct a flaw that caused wrong Tx frequencies to be written to
|
||||||
|
ALL.TXT.
|
||||||
|
|
||||||
|
- The GUI has been improved regarding some details. The controls now
|
||||||
|
scale better at different font sizes and on different operating
|
||||||
|
systems.
|
||||||
|
|
||||||
|
- When in Hound mode and click the "H" button again, the frequency
|
||||||
|
is now kept. This gives the user the following two options to return
|
||||||
|
to normal FT8 mode:
|
||||||
|
- Click the "H" button again. Then you will stay on the QRG.
|
||||||
|
- Click the "FT8" button (or use the Settings menu). It brings
|
||||||
|
you back to the default FT8 QRG.
|
||||||
|
|
||||||
|
- Decodes flagged as 'a7' are now disabled when "Enable AP" is not
|
||||||
|
checked, and during the first period after a band change.
|
||||||
|
|
||||||
|
- The network address of the UDP server is now checked for errors
|
||||||
|
before being accepted.
|
||||||
|
|
||||||
|
- Some improvements to the DX Lab Suite Commander interface.
|
||||||
|
|
||||||
|
- Correct some possible flaws that could cause segfault errors in
|
||||||
|
certain unusual situations.
|
||||||
|
|
||||||
|
- Warnings on dropped audio have been disabled for now, as detection
|
||||||
|
has turned out to be not reliable enough.
|
||||||
|
|
||||||
|
- Correct a long-standing flaw which caused the "Transmit digital gain"
|
||||||
|
overlay to appear somewhere on the screen.
|
||||||
|
|
||||||
|
- "Highlight DX Call" now also works when the other station is <...>.
|
||||||
|
|
||||||
|
- CQ messages without a grid are now sent to PSK reporter.
|
||||||
|
|
||||||
|
- Several other minor corrections (tool tips, etc.).
|
||||||
|
|
||||||
|
Program MAP65 (Windows only) includes several minor bug fixes and two
|
||||||
|
tentative new features:
|
||||||
|
- an aid for measuring antenna pointing errors
|
||||||
|
- an ability to read the file wsjtx.log (kept by WSJT-X) to recognize
|
||||||
|
EME contest dupes.
|
||||||
|
|
||||||
|
|
||||||
|
Release: WSJT-X 2.6.0-rc4
|
||||||
|
September 8, 2022
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
WSJT-X 2.6.0 Release Candidate 4 provides further improvements to Echo
|
||||||
|
mode, a new File menu item, and several bug fixes.
|
||||||
|
|
||||||
|
- New features and fixes for Echo mode
|
||||||
|
- Created a new simulator echosim[.exe]
|
||||||
|
- Improved organization of output to text window
|
||||||
|
- Gain and Zero controls in Echo Graph now behave independently
|
||||||
|
- "Clear Avg" now erases the plot in Echo Graph
|
||||||
|
- Optional baseline for plots in Echo Graph
|
||||||
|
|
||||||
|
- New menu item "File | Copy main text window to WSJT-X.txt"
|
||||||
|
- Doppler tracking checkbox is made sticky
|
||||||
|
|
||||||
|
- Fix an RC2 bug that prevented normal use of JT9.
|
||||||
|
- Fix a rarely experienced failure when writing to decoded.txt
|
||||||
|
- Fix a hamlib bug caused by setting VFO B when Split is not used
|
||||||
|
- Rig control interface to Ham Radio deluxe made more robust
|
||||||
|
|
||||||
|
|
||||||
|
Release: WSJT-X 2.6.0-rc3
|
||||||
|
August 22, 2022
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
WSJT-X 2.6.0 Release Candidate 3 provides improvements to Echo mode and
|
||||||
|
several bug fixes.
|
||||||
|
|
||||||
|
- Echo mode now allows audio-frequency corrections rather than
|
||||||
|
CAT-controlled resetting of dial frequency for Doppler corrections,
|
||||||
|
when Doppler shift is less than 750 Hz. Audio-frequency
|
||||||
|
corrections are also used to correct any remaining portion of
|
||||||
|
Doppler shift caused by coarse CAT-controlled frequency setting.
|
||||||
|
|
||||||
|
- Echo mode now saves .wav files when "Save all" is selected. When
|
||||||
|
such files are opened in Echo mode, the astronomical parameters at
|
||||||
|
recording time are restored and used for processing the Echo data.
|
||||||
|
|
||||||
|
- A missing Leap Second (January 1, 2017) was added to the code that
|
||||||
|
converts UTC to UT1. This detail might matter if you want full
|
||||||
|
accuracy EME Doppler corrections.
|
||||||
|
|
||||||
|
- EME Doppler values are now rounded to nearest integer Hz.
|
||||||
|
|
||||||
|
- For backward compatibility, "Special Operating Activity"
|
||||||
|
enumerations for Fox and Hound modes are reset to their previous
|
||||||
|
values 6 and 7.
|
||||||
|
|
||||||
|
- Allow FST4W transmissions on 30m band. Ensure that correct
|
||||||
|
frequency is reported to WSPRnet for FST4W decodes with Rx Freq
|
||||||
|
spinbox not set to 1500.
|
||||||
|
|
||||||
|
- Fix a bug that could truncate WSPR transmissions early.
|
||||||
|
|
||||||
|
- Fix a bug that occasionally caused a crash when 'decoded.txt'
|
||||||
|
could not be opened.
|
||||||
|
|
||||||
|
- Fix a bug that could cause a crash if Astronomical Data window
|
||||||
|
is not active when needed.
|
||||||
|
|
||||||
|
- Fix a bug that caused a crash when "Reset Cabrillo Log" is
|
||||||
|
selected with Active Stations window not active.
|
||||||
|
|
||||||
|
|
||||||
|
Release: WSJT-X 2.6.0-rc2
|
||||||
|
July 21, 2022
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
WSJT-X 2.6.0 Release Candidate 2 brings a number of improvements as
|
||||||
|
well as some bug fixes.
|
||||||
|
|
||||||
|
- The "Measure" function in Echo mode now uses the computed Doppler
|
||||||
|
spread for DX grid, when available. This feature is especially
|
||||||
|
helpful for microwave EME tests, enabling accurate measurement of
|
||||||
|
SNR for a DX station.
|
||||||
|
|
||||||
|
- Settings for T/R period and Submode are now remembered by mode when
|
||||||
|
you switch directly between (for example) MSK144-15, Q65-60A,
|
||||||
|
JT65C, or FST4-120.
|
||||||
|
|
||||||
|
- Tx and Rx audio frequencies are remembered and restored when you
|
||||||
|
return from a mode that sets a default frequency of 1500 Hz
|
||||||
|
(MSK144, FST4W, Echo, WSPR, FreqCal) and then switching back to
|
||||||
|
FT4, FT8, Q65, JT65, or FST4.
|
||||||
|
|
||||||
|
- QSOs in the Contest Log can now be displayed in increasing or
|
||||||
|
decreasing order of logged time. By default the log is scrolled to
|
||||||
|
the latest logged QSO, ready for insertion of a new contact. The
|
||||||
|
total number of QSOs in the Contest Log is displayed at bottom left
|
||||||
|
of its window.
|
||||||
|
|
||||||
|
- Default FT8 frequency for 4m band (Region 1) is set to 70.154 MHz.
|
||||||
|
|
||||||
|
- Layout of mode buttons has been optimized for 4K screens.
|
||||||
|
|
||||||
|
- Display of Keyboard Shortcuts has been updated.
|
||||||
|
|
||||||
|
- The OK button now has default focus in the LogQSO dialog window.
|
||||||
|
You may just hit Enter to log the QSO.
|
||||||
|
|
||||||
|
- Bug fix: The Tx Freq spinbox remained red when coming back from
|
||||||
|
some Q65 submodes. Corrected.
|
||||||
|
|
||||||
|
- Hamlib bug fixes: make sure that VFOB is selected when required on
|
||||||
|
some rigs (e.g. IC7610, IC7100), and others.
|
||||||
|
|
||||||
|
|
||||||
|
Release: WSJT-X 2.6.0-rc1
|
||||||
|
June 20, 2022
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
WSJT-X 2.6.0 Release Candidate 1 introduces support for the ARRL
|
||||||
|
International Digital Contest; performance enhancements for FT8, Q65,
|
||||||
|
and EME Echo mode; new controls and options on the GUI; and several
|
||||||
|
bug fixes.
|
||||||
|
|
||||||
|
In program WSJT-X:
|
||||||
|
|
||||||
|
- Improved decoding for FT8: additional messages are marked 'a7'
|
||||||
|
|
||||||
|
- Improved decoding for Q65 when AP is in use
|
||||||
|
|
||||||
|
- Optional new "Active Stations" window and other features
|
||||||
|
supporting ARRL International Digital Contest
|
||||||
|
|
||||||
|
- Accurate SNR measurements in Echo mode, including large Doppler
|
||||||
|
spreads
|
||||||
|
|
||||||
|
- Add mode selection buttons on main window for FT4, FT8, JT65,
|
||||||
|
MSK144, and Q65
|
||||||
|
|
||||||
|
- Add a button to toggle FT8's Hound mode ON or OFF
|
||||||
|
|
||||||
|
- Add a "Clr Avg" button for Echo mode
|
||||||
|
|
||||||
|
- Add optional highlighting of DX Call and DX Grid
|
||||||
|
|
||||||
|
- Add optional highlighting of messages containing RR73 or 73
|
||||||
|
|
||||||
|
- New options for writing to ALL.TXT: split the file yearly, monthly,
|
||||||
|
or disable writing altogether
|
||||||
|
|
||||||
|
- Add Russian to available translations of user interface
|
||||||
|
|
||||||
|
- Add a 90 s Tune watchdog with optional disable
|
||||||
|
|
||||||
|
- Allow auto reply for non-CQ messages via UDP (JTAlert, etc.) when
|
||||||
|
Hold Tx Freq is enabled
|
||||||
|
|
||||||
|
- Suppress transmission of blank messages
|
||||||
|
|
||||||
|
- Suppress self-spotting when running multiple instances
|
||||||
|
|
||||||
|
- Correct the handling of messages starting with "CQ xxxx ..."
|
||||||
|
|
||||||
|
- Correct a flaw that could cause Windows to drop audio samples
|
||||||
|
|
||||||
|
- Correct a flaw that could send incorrect frequencies to ALL.TXT
|
||||||
|
and PSK Reporter after a band change
|
||||||
|
|
||||||
|
- Correct the auto-sequencing logic in several specific circumstances
|
||||||
|
|
||||||
|
- Correct a flaw in WSPR mode when handling three-character callsigns
|
||||||
|
|
||||||
|
- Correct a flaw that could cause OmniRig 1.19 or later to set
|
||||||
|
incorrect frequencies after initialization
|
||||||
|
|
||||||
|
- Clean up some ToolTips
|
||||||
|
|
||||||
|
- Fix an inconsistancy in the macOS installation package that caused
|
||||||
|
the pwr slider to behave incorrectly on macOS 12
|
||||||
|
|
||||||
|
In program MAP65 (Windows only):
|
||||||
|
|
||||||
|
- Send additional information to file azel.dat
|
||||||
|
|
||||||
|
- Allow optional scaling of digital I/Q data
|
||||||
|
|
||||||
|
- Suppress a bounds error caused by too-wide setting of display
|
||||||
|
bandwidth
|
||||||
|
|
||||||
|
|
||||||
|
Release: WSJT-X 2.5.4
|
||||||
|
Dec 28, 2021
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
This is mostly a bug fix release. It has the following changes since
|
||||||
|
release 2.5.3:
|
||||||
|
|
||||||
|
WSJTX:
|
||||||
|
- Repair a defect that caused occasional crashes when in QSO with
|
||||||
|
stations using nonstandard callsigns.
|
||||||
|
|
||||||
|
MAP65:
|
||||||
|
- Allowing MAP65 "Best-fit Delta phi" solution to be displayed to the
|
||||||
|
user.
|
||||||
|
|
||||||
|
|
||||||
|
Release: WSJT-X 2.5.3
|
||||||
|
Dec 7, 2021
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
This release has the following changes since release 2.5.2:
|
||||||
|
|
||||||
|
- Add a note in memory of G4WJS to the About window
|
||||||
|
|
||||||
|
- Add a simple $DXCALL macro capability for Tx messages, and update
|
||||||
|
the User Guide accordingly
|
||||||
|
|
||||||
|
- Ensure that MAIN VFO is used for receiving on rigs that require it
|
||||||
|
|
||||||
|
- Repair a defect in reporting low-confidence decodes to PskReporter
|
||||||
|
|
||||||
|
- Updated CTY.DAT database, tnx to Jim AD1C
|
||||||
|
|
||||||
|
|
||||||
|
Release: WSJT-X 2.5.2
|
||||||
|
Nov 4, 2021
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
This is mostly a bug fix release. It has the following changes since
|
||||||
|
release 2.5.1:
|
||||||
|
|
||||||
|
- Repair a longstanding regression that caused signal reports from
|
||||||
|
tail-ended Tx2 messages to be omitted from logged information
|
||||||
|
|
||||||
|
- Parse "dx-call-1 RR73; dx-call-2 <de-call> +nn" messages (i3=0,
|
||||||
|
n3=1 DXpedition mode) in regular 77-bit modes
|
||||||
|
|
||||||
|
- Repair a regression associated with setting the main window width
|
||||||
|
on program startup.
|
||||||
|
|
||||||
|
- Repair a problem with Q65 decodes of type 'q3' for messages of the
|
||||||
|
form "<Call_1> Call_2"
|
||||||
|
|
||||||
|
- Execute code associated with Q65 decodes of type 'q5' only when the
|
||||||
|
Max Drift control is set to 50. This fix prevents
|
||||||
|
double-incrementing of the message averaging counter on the first
|
||||||
|
decoding sequence.
|
||||||
|
|
||||||
|
- Polarization offset 'Dpol' from the astronomical data window is now
|
||||||
|
written to file azel.dat if environment variable
|
||||||
|
WSJT_AZEL_EXTRA_LINES has been defined as 1 or greater. Dpol is
|
||||||
|
especially useful for EME on the higher microwave bands.
|
||||||
|
|
||||||
|
- The Auto Log QSO option in "Settings->Reporting" now behaves the
|
||||||
|
same as the Prompt to log QSO option when not in a special
|
||||||
|
operating context mode.
|
||||||
|
|
||||||
|
- The Fast/Normal/Deep setting in Q65 mode is now a sticky setting
|
||||||
|
and is no longer reset to Fast on program startup or when Settings
|
||||||
|
has been opened. The user selection is used for automatic decodes,
|
||||||
|
but Deep is used for any subsequent manual decode attempts.
|
||||||
|
|
||||||
|
- New hamlib code to correct minor flaws in controlling several rigs.
|
||||||
|
|
||||||
|
- Update the Chinese and Hong Kong translations of the user
|
||||||
|
interface.
|
||||||
|
|
||||||
|
- Note that since the WSJT-X v2.5.0 GA release we have not been
|
||||||
|
providing pre-built 32-bit packages for Linux on Intel CPUs, this
|
||||||
|
is due to the mainstream Linux Desktop distributions no longer
|
||||||
|
providing updates for 32-bit only systems. 32-bit WSJT-X can still
|
||||||
|
be built for Linux Intel and is supported at least until some
|
||||||
|
prerequisite package is no longer available.
|
||||||
|
|
||||||
|
|
||||||
|
Release: WSJT-X 2.5.1
|
||||||
|
Oct 21, 2021
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
This release mainly contains improvements and defect repairs related
|
||||||
|
to Q65 and JT65 modes when used with non-standard and compound
|
||||||
|
calls. Also included is a new feature for microwave aircraft scatter
|
||||||
|
and repairs for defects detected since the 2.5.0 GA release.
|
||||||
|
|
||||||
|
- Improved Q65 support for 10GHz Aircraft Scatter contributed by Rex,
|
||||||
|
VK7MO, and Roger, W3SZ. (See "10 GHz Terrestrial with Q65" in DUBUS
|
||||||
|
Vol 1/2021 page 64.) Decodes of type 'q3' may now include
|
||||||
|
corrections for frequency drift.
|
||||||
|
|
||||||
|
- Repair a defect that failed to pre-load the DE and DX calls to the
|
||||||
|
hash lookup tables in the Q65 decoder.
|
||||||
|
|
||||||
|
- Repair standard message Tx4 and Tx5 generation in Q65 mode when
|
||||||
|
using a non-standard call.
|
||||||
|
|
||||||
|
- Repair a defect in generation of the standard Tx2 JT65 message in
|
||||||
|
EME mode when using a compound call.
|
||||||
|
|
||||||
|
- Repair a defect when decoding 77-bit type 4 non-standard call
|
||||||
|
message.
|
||||||
|
|
||||||
|
- Repair a defect that could cause a crash when switching from Q65 to
|
||||||
|
JT65 mode and attempting a double-click decode.
|
||||||
|
|
||||||
|
- Enable 'q3' AP decoding in Q65 mode for messages containing a
|
||||||
|
non-standard call.
|
||||||
|
|
||||||
|
- Repair a defect that required a blank DX Grid to achieve Q65 'q3'
|
||||||
|
decodes of messages containing a non-standard call.
|
||||||
|
|
||||||
|
- Repair the logic that sets parameters for Q65 "Deep" decoding.
|
||||||
|
|
||||||
|
- In Q65 mode, allow 'q2' decodes when MyCall is compound or
|
||||||
|
non-standard.
|
||||||
|
|
||||||
|
- Repair a long-standing defect that could cause a crash when
|
||||||
|
reference spectrum correction is enabled.
|
||||||
|
|
||||||
|
- Updated UI translations from Xavi, EA3W, Oba-san, JA7UDE, and a new
|
||||||
|
translation for Traditional Chinese by Steven, BU2EL.
|
||||||
|
|
||||||
|
- Updated CTY.DAT database, tnx to Jim AD1C
|
||||||
|
|
||||||
|
- Improved main window layout to ensure TxN messages are fully
|
||||||
|
visible.
|
||||||
|
|
||||||
|
|
||||||
|
Release: WSJT-X 2.5.0
|
||||||
|
Sept 27, 2021
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
WSJT-X in this release is nearly identical to that in WSJT-X 2.4.0.
|
||||||
|
The Q65 decoder has been enhanced to measure and compensate for linear
|
||||||
|
frequency drift in Q65 signals. In addition, the Windows installation
|
||||||
|
package now includes version 3.0 of application MAP65 which has Q65
|
||||||
|
support to match and improve on its existing JT65 capabilities.
|
||||||
|
|
||||||
|
See the 2.5.0 release candidate notices below for a summaries of the
|
||||||
|
other changes included in this release. WSJT-X 2.5.0 is bundled with
|
||||||
|
Hamlib version 4.3.1 which includes important regression repairs over
|
||||||
|
the earlier 4.3 release.
|
||||||
|
|
||||||
|
Other changes in the package since WSJT-X 2.5.0-rc6 include the
|
||||||
|
following enhancements and defect repairs:
|
||||||
|
|
||||||
|
MAP65:
|
||||||
|
- Ensure that CALL3.TXT is not deleted while updating the file (this
|
||||||
|
allows sharing using symlinks to work).
|
||||||
|
- Fix MAP65's generation of Tx3 message for abs(SNR)< 10.
|
||||||
|
|
||||||
|
WSJTX:
|
||||||
|
- Repair a defect that caused CAT errors when using WSPR band hopping
|
||||||
|
and auto tune-up with some Icom rigs.
|
||||||
|
- Ensure that CALL3.TXT is not deleted while updating the file (this
|
||||||
|
allows sharing using symlinks to work).
|
||||||
|
|
||||||
|
|
||||||
|
Release: WSJT-X 2.5.0-rc6
|
||||||
|
Sept 6, 2021
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
Remember that the WSJT-X 2.5.0 package includes MAP65 3.0.0. Changes
|
||||||
|
in the package since WSJT-X 2.5.0-rc5 include the following
|
||||||
|
enhancements and defect repairs:
|
||||||
|
|
||||||
|
MAP65:
|
||||||
|
- There are no functional changes to MAP65 in this release.
|
||||||
|
|
||||||
|
WSJT-X:
|
||||||
|
- Repair a file handle leak in wsprd (tnx Phil, KA9Q).
|
||||||
|
- Better handling of the Tx1 buttons when changing special operating
|
||||||
|
modes.
|
||||||
|
- Q65 mode now supports contest special operating modes.
|
||||||
|
- Repair an issue when non-ASCII characters used in account names.
|
||||||
|
- Repair a regression that prevented WSPR band-hopping working when
|
||||||
|
the Tx percentage is zero.
|
||||||
|
|
||||||
|
|
||||||
|
Release: WSJT-X 2.5.0-rc5
|
||||||
|
Aug 5, 2021
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
Remember that the WSJT-X 2.5.0 package includes MAP65 3.0.0. Changes
|
||||||
|
in the package since WSJT-X 2.5.0-rc4 include the following
|
||||||
|
enhancements and defect repairs:
|
||||||
|
|
||||||
|
MAP65:
|
||||||
|
- When you double-click on lower waterfall, Ftol is set to 100
|
||||||
|
only if it is currently set to a higher value.
|
||||||
|
- Early decoding pass is skipped when data are read from disk.
|
||||||
|
- Duplicate decodes are suppressed only when at the same frequency.
|
||||||
|
|
||||||
|
WSJT-X:
|
||||||
|
- Repair a regression that caused some messages involving compound
|
||||||
|
or nonstandard callsigns to be encoded as free text
|
||||||
|
|
||||||
|
|
||||||
|
Release: WSJT-X 2.5.0-rc4
|
||||||
|
Aug 2, 2021
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
Remember that the WSJT-X 2.5.0 package includes MAP65 3.0.0. Changes
|
||||||
|
in the package since WSJT-X 2.5.0-rc3 include the following
|
||||||
|
enhancements and defect repairs:
|
||||||
|
|
||||||
|
MAP65:
|
||||||
|
- Suppress display of duplicate decodes
|
||||||
|
- Increase the length of .tf2 & .iq files to 56 s
|
||||||
|
- Implements an early decoding pass at 52 s
|
||||||
|
|
||||||
|
WSJT-X:
|
||||||
|
- Repair a defect in CALL3.TXT lookups that incorrectly matched
|
||||||
|
partial calls
|
||||||
|
- Instructions in macOS ReadMe.txt to suppress App Nap energy saving
|
||||||
|
- Revised User Guide using FT8 mode for the basic tutorial
|
||||||
|
- Allow contest and FD operating in Q65 mode
|
||||||
|
|
||||||
|
|
||||||
Release: WSJT-X 2.5.0-rc3
|
Release: WSJT-X 2.5.0-rc3
|
||||||
@ -34,6 +811,7 @@ WSJT-X:
|
|||||||
messages to not be sent when no other intervening messages are
|
messages to not be sent when no other intervening messages are
|
||||||
sent.
|
sent.
|
||||||
|
|
||||||
|
|
||||||
Release: WSJT-X 2.5.0-rc2
|
Release: WSJT-X 2.5.0-rc2
|
||||||
Jun 28, 2021
|
Jun 28, 2021
|
||||||
-------------------------
|
-------------------------
|
||||||
@ -74,6 +852,7 @@ WSJT-X (including the decoder for Q65 used by MAP65):
|
|||||||
series rigs, and support for the Icom IC-575 rig.
|
series rigs, and support for the Icom IC-575 rig.
|
||||||
- Updated CTY.DAT database
|
- Updated CTY.DAT database
|
||||||
|
|
||||||
|
|
||||||
Release: WSJT-X 2.5.0-rc1
|
Release: WSJT-X 2.5.0-rc1
|
||||||
Jun 3, 2021
|
Jun 3, 2021
|
||||||
-------------------------
|
-------------------------
|
||||||
@ -428,7 +1207,6 @@ release candidate.
|
|||||||
- Several updates to international UI translations.
|
- Several updates to international UI translations.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Release: WSJT-X 2.3.0-rc2
|
Release: WSJT-X 2.3.0-rc2
|
||||||
Nov 16, 2020
|
Nov 16, 2020
|
||||||
-------------------------
|
-------------------------
|
||||||
@ -893,6 +1671,7 @@ prior v2.1.0 release.
|
|||||||
- Fix a production issue with the macOS tool chain that generated
|
- Fix a production issue with the macOS tool chain that generated
|
||||||
broken executables.
|
broken executables.
|
||||||
|
|
||||||
|
|
||||||
Release: WSJT-X 2.1
|
Release: WSJT-X 2.1
|
||||||
July 15, 2019
|
July 15, 2019
|
||||||
-------------------
|
-------------------
|
||||||
@ -962,6 +1741,7 @@ feedback to guide future development.
|
|||||||
*Note* this release is not for general public release and we request
|
*Note* this release is not for general public release and we request
|
||||||
that it is not distributed.
|
that it is not distributed.
|
||||||
|
|
||||||
|
|
||||||
Release: WSJT-X 2.1.0-rc1
|
Release: WSJT-X 2.1.0-rc1
|
||||||
March 25, 2019
|
March 25, 2019
|
||||||
-------------------------
|
-------------------------
|
||||||
@ -1095,6 +1875,7 @@ Some details of changes since WSJT-X-rc5 include the following:
|
|||||||
- Update the WSJT-X User Guide to v2.0 (more to come...)
|
- Update the WSJT-X User Guide to v2.0 (more to come...)
|
||||||
- Update cty.dat
|
- Update cty.dat
|
||||||
|
|
||||||
|
|
||||||
Release: WSJT-X 2.0-rc5
|
Release: WSJT-X 2.0-rc5
|
||||||
November 26, 2018
|
November 26, 2018
|
||||||
-----------------------
|
-----------------------
|
||||||
@ -1326,7 +2107,6 @@ Changes from WSJT-X Version 1.9.0-rc2 include the following:
|
|||||||
to be CAT controlled by WSJT-X.
|
to be CAT controlled by WSJT-X.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Release: WSJT-X Version 1.9.0-rc2
|
Release: WSJT-X Version 1.9.0-rc2
|
||||||
February 26, 2018
|
February 26, 2018
|
||||||
---------------------------------
|
---------------------------------
|
||||||
@ -1496,8 +2276,6 @@ message from populating the Tx message boxes.
|
|||||||
- Fix an issue with editing IARU regions in the working frequencies table.
|
- Fix an issue with editing IARU regions in the working frequencies table.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Release: WSJT-X Version 1.8.0-rc2
|
Release: WSJT-X Version 1.8.0-rc2
|
||||||
September 2, 2017
|
September 2, 2017
|
||||||
---------------------------------
|
---------------------------------
|
||||||
|
229
Network/FileDownload.cpp
Normal file
@ -0,0 +1,229 @@
|
|||||||
|
|
||||||
|
#include "FileDownload.hpp"
|
||||||
|
#include <QCoreApplication>
|
||||||
|
#include <QUrl>
|
||||||
|
#include <QNetworkRequest>
|
||||||
|
#include <QtNetwork/QNetworkAccessManager>
|
||||||
|
#include <QtNetwork/QNetworkReply>
|
||||||
|
#include <QFileInfo>
|
||||||
|
#include <QDir>
|
||||||
|
#include <QIODevice>
|
||||||
|
#include "qt_helpers.hpp"
|
||||||
|
#include "Logger.hpp"
|
||||||
|
|
||||||
|
FileDownload::FileDownload() : QObject(nullptr)
|
||||||
|
{
|
||||||
|
redirect_count_ = 0;
|
||||||
|
url_valid_ = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
FileDownload::~FileDownload()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)
|
||||||
|
void FileDownload::errorOccurred(QNetworkReply::NetworkError code)
|
||||||
|
{
|
||||||
|
LOG_INFO(QString{"FileDownload [%1]: errorOccurred %2 -> %3"}.arg(user_agent_).arg(code).arg(reply_->errorString()));
|
||||||
|
Q_EMIT error (reply_->errorString ());
|
||||||
|
destfile_.cancelWriting ();
|
||||||
|
destfile_.commit ();
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
void FileDownload::obsoleteError()
|
||||||
|
{
|
||||||
|
LOG_INFO(QString{"FileDownload [%1]: error -> %3"}.arg(user_agent_).arg(reply_->errorString()));
|
||||||
|
Q_EMIT error (reply_->errorString ());
|
||||||
|
destfile_.cancelWriting ();
|
||||||
|
destfile_.commit ();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void FileDownload::configure(QNetworkAccessManager *network_manager, const QString &source_url, const QString &destination_path, const QString &user_agent)
|
||||||
|
{
|
||||||
|
manager_ = network_manager;
|
||||||
|
source_url_ = source_url;
|
||||||
|
destination_filename_ = destination_path;
|
||||||
|
user_agent_ = user_agent;
|
||||||
|
}
|
||||||
|
|
||||||
|
void FileDownload::store()
|
||||||
|
{
|
||||||
|
if (destfile_.isOpen())
|
||||||
|
destfile_.write (reply_->read (reply_->bytesAvailable ()));
|
||||||
|
else
|
||||||
|
LOG_INFO(QString{ "FileDownload [%1]: file is not open."}.arg(user_agent_));
|
||||||
|
}
|
||||||
|
|
||||||
|
void FileDownload::replyComplete()
|
||||||
|
{
|
||||||
|
QFileInfo destination_file(destination_filename_);
|
||||||
|
QDir tmpdir_(destination_file.absoluteFilePath());
|
||||||
|
|
||||||
|
LOG_DEBUG(QString{ "FileDownload [%1]: replyComplete"}.arg(user_agent_));
|
||||||
|
if (!reply_)
|
||||||
|
{
|
||||||
|
Q_EMIT load_finished ();
|
||||||
|
return; // we probably deleted it in an earlier call
|
||||||
|
}
|
||||||
|
|
||||||
|
QUrl redirect_url {reply_->attribute (QNetworkRequest::RedirectionTargetAttribute).toUrl ()};
|
||||||
|
|
||||||
|
if (reply_->error () == QNetworkReply::NoError && !redirect_url.isEmpty ())
|
||||||
|
{
|
||||||
|
if ("https" == redirect_url.scheme () && !QSslSocket::supportsSsl ())
|
||||||
|
{
|
||||||
|
Q_EMIT download_error (tr ("Network Error - SSL/TLS support not installed, cannot fetch:\n\'%1\'")
|
||||||
|
.arg (redirect_url.toDisplayString ()));
|
||||||
|
url_valid_ = false; // reset
|
||||||
|
Q_EMIT load_finished ();
|
||||||
|
}
|
||||||
|
else if (++redirect_count_ < 10) // maintain sanity
|
||||||
|
{
|
||||||
|
// follow redirect
|
||||||
|
download (reply_->url ().resolved (redirect_url));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Q_EMIT download_error (tr ("Network Error - Too many redirects:\n\'%1\'")
|
||||||
|
.arg (redirect_url.toDisplayString ()));
|
||||||
|
url_valid_ = false; // reset
|
||||||
|
Q_EMIT load_finished ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (reply_->error () != QNetworkReply::NoError)
|
||||||
|
{
|
||||||
|
destfile_.cancelWriting();
|
||||||
|
destfile_.commit();
|
||||||
|
url_valid_ = false; // reset
|
||||||
|
// report errors that are not due to abort
|
||||||
|
if (QNetworkReply::OperationCanceledError != reply_->error ())
|
||||||
|
{
|
||||||
|
Q_EMIT download_error (tr ("Network Error:\n%1")
|
||||||
|
.arg (reply_->errorString ()));
|
||||||
|
}
|
||||||
|
Q_EMIT load_finished ();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!url_valid_)
|
||||||
|
{
|
||||||
|
// now get the body content
|
||||||
|
url_valid_ = true;
|
||||||
|
download (reply_->url ().resolved (redirect_url));
|
||||||
|
}
|
||||||
|
else // the body has completed. Save it.
|
||||||
|
{
|
||||||
|
url_valid_ = false; // reset
|
||||||
|
// load the database asynchronously
|
||||||
|
// future_load_ = std::async (std::launch::async, &LotWUsers::impl::load_dictionary, this, csv_file_.fileName ());
|
||||||
|
LOG_INFO(QString{ "FileDownload [%1]: complete. File path is %2"}.arg(user_agent_).arg(destfile_.fileName()));
|
||||||
|
destfile_.commit();
|
||||||
|
emit complete(destination_filename_);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (reply_ && reply_->isFinished ())
|
||||||
|
{
|
||||||
|
reply_->deleteLater ();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void FileDownload::downloadComplete(QNetworkReply *data)
|
||||||
|
{
|
||||||
|
// make a temp file in the same place as the file we're downloading. Needs to be on the same
|
||||||
|
// filesystem as where we eventually want to 'mv' it.
|
||||||
|
|
||||||
|
QUrl r = request_.url();
|
||||||
|
LOG_INFO(QString{"FileDownload [%1]: finished %2 of %3 -> %4 (%5)"}.arg(user_agent_).arg(data->operation()).arg(source_url_).arg(destination_filename_).arg(r.url()));
|
||||||
|
|
||||||
|
#ifdef DEBUG_FILEDOWNLOAD
|
||||||
|
LOG_INFO("Request Headers:");
|
||||||
|
Q_FOREACH (const QByteArray& hdr, request_.rawHeaderList()) {
|
||||||
|
LOG_INFO(QString{ "%1 -> %2"}.arg(QString(hdr)).arg(QString(request_.rawHeader(hdr))));
|
||||||
|
}
|
||||||
|
|
||||||
|
LOG_INFO("Response Headers:");
|
||||||
|
Q_FOREACH (const QByteArray& hdr, reply_->rawHeaderList()) {
|
||||||
|
LOG_INFO(QString{ "%1 -> %2"}.arg(QString(hdr)).arg(QString(reply_->rawHeader(hdr))));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
data->deleteLater();
|
||||||
|
}
|
||||||
|
|
||||||
|
void FileDownload::start_download()
|
||||||
|
{
|
||||||
|
url_valid_ = false;
|
||||||
|
download(QUrl(source_url_));
|
||||||
|
}
|
||||||
|
|
||||||
|
void FileDownload::download(QUrl qurl)
|
||||||
|
{
|
||||||
|
request_.setUrl(qurl);
|
||||||
|
|
||||||
|
#if QT_VERSION < QT_VERSION_CHECK(5, 15, 0)
|
||||||
|
if (QNetworkAccessManager::Accessible != manager_->networkAccessible ())
|
||||||
|
{
|
||||||
|
// try and recover network access for QNAM
|
||||||
|
manager_->setNetworkAccessible (QNetworkAccessManager::Accessible);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
LOG_INFO(QString{"FileDownload [%1]: Starting download of %2 to %3"}.arg(user_agent_).arg(source_url_).arg(destination_filename_));
|
||||||
|
|
||||||
|
request_.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true);
|
||||||
|
request_.setRawHeader("Accept", "*/*");
|
||||||
|
request_.setRawHeader ("User-Agent", user_agent_.toLocal8Bit()); // Must have a UA for some sites, like country-files
|
||||||
|
|
||||||
|
if (!url_valid_)
|
||||||
|
{
|
||||||
|
reply_ = manager_->head(request_);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
reply_ = manager_->get (request_);
|
||||||
|
}
|
||||||
|
|
||||||
|
QObject::connect(manager_, &QNetworkAccessManager::finished, this, &FileDownload::downloadComplete, Qt::UniqueConnection);
|
||||||
|
QObject::connect(reply_, &QNetworkReply::downloadProgress, this, &FileDownload::downloadProgress, Qt::UniqueConnection);
|
||||||
|
QObject::connect(reply_, &QNetworkReply::finished, this, &FileDownload::replyComplete, Qt::UniqueConnection);
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)
|
||||||
|
QObject::connect(reply_, &QNetworkReply::errorOccurred,this, &FileDownload::errorOccurred, Qt::UniqueConnection);
|
||||||
|
#else
|
||||||
|
QObject::connect(reply_, QOverload<QNetworkReply::NetworkError>::of(&QNetworkReply::error), this, &FileDownload::obsoleteError, Qt::UniqueConnection);
|
||||||
|
#endif
|
||||||
|
QObject::connect(reply_, &QNetworkReply::readyRead, this, &FileDownload::store, Qt::UniqueConnection);
|
||||||
|
|
||||||
|
QFileInfo destination_file(destination_filename_);
|
||||||
|
QString const tmpfile_base = destination_file.fileName();
|
||||||
|
QString const &tmpfile_path = destination_file.absolutePath();
|
||||||
|
QDir tmpdir{};
|
||||||
|
if (!tmpdir.mkpath(tmpfile_path))
|
||||||
|
{
|
||||||
|
LOG_INFO(QString{"FileDownload [%1]: Directory %2 does not exist"}.arg(user_agent_).arg(tmpfile_path).arg(
|
||||||
|
destfile_.errorString()));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (url_valid_) {
|
||||||
|
destfile_.setFileName(destination_file.absoluteFilePath());
|
||||||
|
if (!destfile_.open(QSaveFile::WriteOnly | QIODevice::WriteOnly)) {
|
||||||
|
LOG_INFO(QString{"FileDownload [%1]: Unable to open %2: %3"}.arg(user_agent_).arg(destfile_.fileName()).arg(
|
||||||
|
destfile_.errorString()));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void FileDownload::downloadProgress(qint64 received, qint64 total)
|
||||||
|
{
|
||||||
|
LOG_DEBUG(QString{"FileDownload: [%1] Progress %2 from %3, total %4, so far %5"}.arg(user_agent_).arg(destination_filename_).arg(source_url_).arg(total).arg(received));
|
||||||
|
Q_EMIT progress(QString{"%4 bytes downloaded"}.arg(received));
|
||||||
|
}
|
||||||
|
|
||||||
|
void FileDownload::abort ()
|
||||||
|
{
|
||||||
|
if (reply_ && reply_->isRunning ())
|
||||||
|
{
|
||||||
|
reply_->abort ();
|
||||||
|
}
|
||||||
|
}
|
54
Network/FileDownload.hpp
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
#ifndef WSJTX_FILEDOWNLOAD_H
|
||||||
|
#define WSJTX_FILEDOWNLOAD_H
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
#include <QString>
|
||||||
|
#include <QPointer>
|
||||||
|
#include <QtNetwork/QNetworkAccessManager>
|
||||||
|
#include <QtNetwork/QNetworkReply>
|
||||||
|
#include <QTemporaryFile>
|
||||||
|
#include <QSaveFile>
|
||||||
|
|
||||||
|
class FileDownload : public QObject {
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit FileDownload();
|
||||||
|
~FileDownload();
|
||||||
|
|
||||||
|
void configure(QNetworkAccessManager *network_manager, const QString& source_url, const QString& destination_filename, const QString& user_agent);
|
||||||
|
|
||||||
|
private:
|
||||||
|
QNetworkAccessManager *manager_;
|
||||||
|
QString source_url_;
|
||||||
|
QString destination_filename_;
|
||||||
|
QString user_agent_;
|
||||||
|
QPointer<QNetworkReply> reply_;
|
||||||
|
QNetworkRequest request_;
|
||||||
|
QSaveFile destfile_;
|
||||||
|
bool url_valid_;
|
||||||
|
int redirect_count_;
|
||||||
|
signals:
|
||||||
|
void complete(QString filename);
|
||||||
|
void progress(QString filename);
|
||||||
|
void load_finished() const;
|
||||||
|
void download_error (QString const& reason) const;
|
||||||
|
void error(QString const& reason) const;
|
||||||
|
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void start_download();
|
||||||
|
void download(QUrl url);
|
||||||
|
void store();
|
||||||
|
void abort();
|
||||||
|
void downloadComplete(QNetworkReply* data);
|
||||||
|
void downloadProgress(qint64 recieved, qint64 total);
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)
|
||||||
|
void errorOccurred(QNetworkReply::NetworkError code);
|
||||||
|
#else
|
||||||
|
void obsoleteError();
|
||||||
|
#endif
|
||||||
|
void replyComplete();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif //WSJTX_FILEDOWNLOAD_H
|
@ -16,7 +16,9 @@
|
|||||||
#include <QNetworkAccessManager>
|
#include <QNetworkAccessManager>
|
||||||
#include <QNetworkReply>
|
#include <QNetworkReply>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
#include "qt_helpers.hpp"
|
||||||
|
#include "Logger.hpp"
|
||||||
|
#include "FileDownload.hpp"
|
||||||
#include "pimpl_impl.hpp"
|
#include "pimpl_impl.hpp"
|
||||||
|
|
||||||
#include "moc_LotWUsers.cpp"
|
#include "moc_LotWUsers.cpp"
|
||||||
@ -39,6 +41,7 @@ public:
|
|||||||
, url_valid_ {false}
|
, url_valid_ {false}
|
||||||
, redirect_count_ {0}
|
, redirect_count_ {0}
|
||||||
, age_constraint_ {365}
|
, age_constraint_ {365}
|
||||||
|
, connected_ {false}
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -55,7 +58,29 @@ public:
|
|||||||
current_url_.setScheme("http");
|
current_url_.setScheme("http");
|
||||||
}
|
}
|
||||||
redirect_count_ = 0;
|
redirect_count_ = 0;
|
||||||
download (current_url_);
|
|
||||||
|
Q_EMIT self_->progress (QString("Starting download from %1").arg(url));
|
||||||
|
|
||||||
|
lotw_downloader_.configure(network_manager_,
|
||||||
|
url,
|
||||||
|
csv_file_name,
|
||||||
|
"WSJT-X LotW User Downloader");
|
||||||
|
if (!connected_)
|
||||||
|
{
|
||||||
|
connect(&lotw_downloader_, &FileDownload::complete, [this, csv_file_name] {
|
||||||
|
LOG_INFO(QString{"LotWUsers: Loading LotW file %1"}.arg(csv_file_name));
|
||||||
|
future_load_ = std::async(std::launch::async, &LotWUsers::impl::load_dictionary, this, csv_file_name);
|
||||||
|
});
|
||||||
|
connect(&lotw_downloader_, &FileDownload::error, [this] (QString const& msg) {
|
||||||
|
LOG_INFO(QString{"LotWUsers: Error downloading LotW file: %1"}.arg(msg));
|
||||||
|
Q_EMIT self_->LotW_users_error (msg);
|
||||||
|
});
|
||||||
|
connect( &lotw_downloader_, &FileDownload::progress, [this] (QString const& msg) {
|
||||||
|
Q_EMIT self_->progress (msg);
|
||||||
|
});
|
||||||
|
connected_ = true;
|
||||||
|
}
|
||||||
|
lotw_downloader_.start_download();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -67,142 +92,9 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void download (QUrl url)
|
|
||||||
{
|
|
||||||
#if QT_VERSION < QT_VERSION_CHECK(5, 15, 0)
|
|
||||||
if (QNetworkAccessManager::Accessible != network_manager_->networkAccessible ())
|
|
||||||
{
|
|
||||||
// try and recover network access for QNAM
|
|
||||||
network_manager_->setNetworkAccessible (QNetworkAccessManager::Accessible);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
QNetworkRequest request {url};
|
|
||||||
request.setRawHeader ("User-Agent", "WSJT LotW User Downloader");
|
|
||||||
request.setOriginatingObject (this);
|
|
||||||
|
|
||||||
// this blocks for a second or two the first time it is used on
|
|
||||||
// Windows - annoying
|
|
||||||
if (!url_valid_)
|
|
||||||
{
|
|
||||||
reply_ = network_manager_->head (request);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
reply_ = network_manager_->get (request);
|
|
||||||
}
|
|
||||||
|
|
||||||
connect (reply_.data (), &QNetworkReply::finished, this, &LotWUsers::impl::reply_finished);
|
|
||||||
connect (reply_.data (), &QNetworkReply::readyRead, this, &LotWUsers::impl::store);
|
|
||||||
}
|
|
||||||
|
|
||||||
void reply_finished ()
|
|
||||||
{
|
|
||||||
if (!reply_)
|
|
||||||
{
|
|
||||||
Q_EMIT self_->load_finished ();
|
|
||||||
return; // we probably deleted it in an earlier call
|
|
||||||
}
|
|
||||||
QUrl redirect_url {reply_->attribute (QNetworkRequest::RedirectionTargetAttribute).toUrl ()};
|
|
||||||
if (reply_->error () == QNetworkReply::NoError && !redirect_url.isEmpty ())
|
|
||||||
{
|
|
||||||
if ("https" == redirect_url.scheme () && !QSslSocket::supportsSsl ())
|
|
||||||
{
|
|
||||||
Q_EMIT self_->LotW_users_error (tr ("Network Error - SSL/TLS support not installed, cannot fetch:\n\'%1\'")
|
|
||||||
.arg (redirect_url.toDisplayString ()));
|
|
||||||
url_valid_ = false; // reset
|
|
||||||
Q_EMIT self_->load_finished ();
|
|
||||||
}
|
|
||||||
else if (++redirect_count_ < 10) // maintain sanity
|
|
||||||
{
|
|
||||||
// follow redirect
|
|
||||||
download (reply_->url ().resolved (redirect_url));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Q_EMIT self_->LotW_users_error (tr ("Network Error - Too many redirects:\n\'%1\'")
|
|
||||||
.arg (redirect_url.toDisplayString ()));
|
|
||||||
url_valid_ = false; // reset
|
|
||||||
Q_EMIT self_->load_finished ();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (reply_->error () != QNetworkReply::NoError)
|
|
||||||
{
|
|
||||||
csv_file_.cancelWriting ();
|
|
||||||
csv_file_.commit ();
|
|
||||||
url_valid_ = false; // reset
|
|
||||||
// report errors that are not due to abort
|
|
||||||
if (QNetworkReply::OperationCanceledError != reply_->error ())
|
|
||||||
{
|
|
||||||
Q_EMIT self_->LotW_users_error (tr ("Network Error:\n%1")
|
|
||||||
.arg (reply_->errorString ()));
|
|
||||||
}
|
|
||||||
Q_EMIT self_->load_finished ();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (url_valid_ && !csv_file_.commit ())
|
|
||||||
{
|
|
||||||
Q_EMIT self_->LotW_users_error (tr ("File System Error - Cannot commit changes to:\n\"%1\"")
|
|
||||||
.arg (csv_file_.fileName ()));
|
|
||||||
url_valid_ = false; // reset
|
|
||||||
Q_EMIT self_->load_finished ();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (!url_valid_)
|
|
||||||
{
|
|
||||||
// now get the body content
|
|
||||||
url_valid_ = true;
|
|
||||||
download (reply_->url ().resolved (redirect_url));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
url_valid_ = false; // reset
|
|
||||||
// load the database asynchronously
|
|
||||||
future_load_ = std::async (std::launch::async, &LotWUsers::impl::load_dictionary, this, csv_file_.fileName ());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (reply_ && reply_->isFinished ())
|
|
||||||
{
|
|
||||||
reply_->deleteLater ();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void store ()
|
|
||||||
{
|
|
||||||
if (url_valid_)
|
|
||||||
{
|
|
||||||
if (!csv_file_.isOpen ())
|
|
||||||
{
|
|
||||||
// create temporary file in the final location
|
|
||||||
if (!csv_file_.open (QSaveFile::WriteOnly))
|
|
||||||
{
|
|
||||||
abort ();
|
|
||||||
Q_EMIT self_->LotW_users_error (tr ("File System Error - Cannot open file:\n\"%1\"\nError(%2): %3")
|
|
||||||
.arg (csv_file_.fileName ())
|
|
||||||
.arg (csv_file_.error ())
|
|
||||||
.arg (csv_file_.errorString ()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (csv_file_.write (reply_->read (reply_->bytesAvailable ())) < 0)
|
|
||||||
{
|
|
||||||
abort ();
|
|
||||||
Q_EMIT self_->LotW_users_error (tr ("File System Error - Cannot write to file:\n\"%1\"\nError(%2): %3")
|
|
||||||
.arg (csv_file_.fileName ())
|
|
||||||
.arg (csv_file_.error ())
|
|
||||||
.arg (csv_file_.errorString ()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void abort ()
|
void abort ()
|
||||||
{
|
{
|
||||||
if (reply_ && reply_->isRunning ())
|
lotw_downloader_.abort();
|
||||||
{
|
|
||||||
reply_->abort ();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load the database from the given file name
|
// Load the database from the given file name
|
||||||
@ -222,12 +114,14 @@ public:
|
|||||||
auto pos = l.indexOf (',');
|
auto pos = l.indexOf (',');
|
||||||
result[l.left (pos)] = QDate::fromString (l.mid (pos + 1, l.indexOf (',', pos + 1) - pos - 1), "yyyy-MM-dd");
|
result[l.left (pos)] = QDate::fromString (l.mid (pos + 1, l.indexOf (',', pos + 1) - pos - 1), "yyyy-MM-dd");
|
||||||
}
|
}
|
||||||
// qDebug () << "LotW User Data Loaded";
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
throw std::runtime_error {QObject::tr ("Failed to open LotW users CSV file: '%1'").arg (f.fileName ()).toStdString ()};
|
throw std::runtime_error {QObject::tr ("Failed to open LotW users CSV file: '%1'").arg (f.fileName ()).toStdString ()};
|
||||||
}
|
}
|
||||||
|
LOG_INFO(QString{"LotWUsers: Loaded %1 records from %2"}.arg(result.size()).arg(lotw_csv_file));
|
||||||
|
Q_EMIT self_->progress (QString{"Loaded %1 records from LotW."}.arg(result.size()));
|
||||||
|
Q_EMIT self_->load_finished();
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -241,6 +135,8 @@ public:
|
|||||||
std::future<dictionary> future_load_;
|
std::future<dictionary> future_load_;
|
||||||
dictionary last_uploaded_;
|
dictionary last_uploaded_;
|
||||||
qint64 age_constraint_; // days
|
qint64 age_constraint_; // days
|
||||||
|
FileDownload lotw_downloader_;
|
||||||
|
bool connected_;
|
||||||
};
|
};
|
||||||
|
|
||||||
#include "LotWUsers.moc"
|
#include "LotWUsers.moc"
|
||||||
@ -249,6 +145,7 @@ LotWUsers::LotWUsers (QNetworkAccessManager * network_manager, QObject * parent)
|
|||||||
: QObject {parent}
|
: QObject {parent}
|
||||||
, m_ {this, network_manager}
|
, m_ {this, network_manager}
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
LotWUsers::~LotWUsers ()
|
LotWUsers::~LotWUsers ()
|
||||||
|
@ -31,6 +31,7 @@ public:
|
|||||||
bool user (QString const& call) const;
|
bool user (QString const& call) const;
|
||||||
|
|
||||||
Q_SIGNAL void LotW_users_error (QString const& reason) const;
|
Q_SIGNAL void LotW_users_error (QString const& reason) const;
|
||||||
|
Q_SIGNAL void progress (QString const& reason) const;
|
||||||
Q_SIGNAL void load_finished () const;
|
Q_SIGNAL void load_finished () const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -137,6 +137,7 @@ void MessageClient::impl::host_info_results (QHostInfo host_info)
|
|||||||
if (QHostInfo::NoError != host_info.error ())
|
if (QHostInfo::NoError != host_info.error ())
|
||||||
{
|
{
|
||||||
Q_EMIT self_->error ("UDP server DNS lookup failed: " + host_info.errorString ());
|
Q_EMIT self_->error ("UDP server DNS lookup failed: " + host_info.errorString ());
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -199,6 +199,7 @@
|
|||||||
* 5 -> WW DIGI
|
* 5 -> WW DIGI
|
||||||
* 6 -> FOX
|
* 6 -> FOX
|
||||||
* 7 -> HOUND
|
* 7 -> HOUND
|
||||||
|
* 8 -> ARRL DIGI
|
||||||
*
|
*
|
||||||
* The Frequency Tolerance and T/R period fields may have a value
|
* The Frequency Tolerance and T/R period fields may have a value
|
||||||
* of the maximum quint32 value which implies the field is not
|
* of the maximum quint32 value which implies the field is not
|
||||||
|
@ -6,6 +6,8 @@
|
|||||||
//
|
//
|
||||||
// Reports will be sent in batch mode every 5 minutes.
|
// Reports will be sent in batch mode every 5 minutes.
|
||||||
|
|
||||||
|
#include <fstream>
|
||||||
|
#include <iostream>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QString>
|
#include <QString>
|
||||||
@ -18,6 +20,7 @@
|
|||||||
#include <QByteArray>
|
#include <QByteArray>
|
||||||
#include <QDataStream>
|
#include <QDataStream>
|
||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
|
#include <QDir>
|
||||||
#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)
|
#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)
|
||||||
#include <QRandomGenerator>
|
#include <QRandomGenerator>
|
||||||
#endif
|
#endif
|
||||||
@ -29,19 +32,26 @@
|
|||||||
|
|
||||||
#include "moc_PSKReporter.cpp"
|
#include "moc_PSKReporter.cpp"
|
||||||
|
|
||||||
|
#define DEBUGECLIPSE 0
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
QLatin1String HOST {"report.pskreporter.info"};
|
QLatin1String HOST {"report.pskreporter.info"};
|
||||||
// QLatin1String HOST {"127.0.0.1"};
|
// QLatin1String HOST {"127.0.0.1"};
|
||||||
quint16 SERVICE_PORT {4739};
|
quint16 SERVICE_PORT {4739};
|
||||||
// quint16 SERVICE_PORT {14739};
|
// quint16 SERVICE_PORT {14739};
|
||||||
int MIN_SEND_INTERVAL {15}; // in seconds
|
int MIN_SEND_INTERVAL {120}; // in seconds
|
||||||
int FLUSH_INTERVAL {4 * 5}; // in send intervals
|
int FLUSH_INTERVAL {MIN_SEND_INTERVAL + 5}; // in send intervals
|
||||||
bool ALIGNMENT_PADDING {true};
|
bool ALIGNMENT_PADDING {true};
|
||||||
int MIN_PAYLOAD_LENGTH {508};
|
int MIN_PAYLOAD_LENGTH {508};
|
||||||
int MAX_PAYLOAD_LENGTH {1400};
|
int MAX_PAYLOAD_LENGTH {10000};
|
||||||
|
int CACHE_TIMEOUT {300}; // default to 5 minutes for repeating spots
|
||||||
|
QMap<QString, time_t> spot_cache;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int added;
|
||||||
|
static int removed;
|
||||||
|
|
||||||
class PSKReporter::impl final
|
class PSKReporter::impl final
|
||||||
: public QObject
|
: public QObject
|
||||||
{
|
{
|
||||||
@ -83,6 +93,7 @@ public:
|
|||||||
send_receiver_data_ = 3; // three times
|
send_receiver_data_ = 3; // three times
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
eclipse_load(config->data_dir ().absoluteFilePath ("eclipse.txt"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void check_connection ()
|
void check_connection ()
|
||||||
@ -167,7 +178,7 @@ public:
|
|||||||
|
|
||||||
if (!report_timer_.isActive ())
|
if (!report_timer_.isActive ())
|
||||||
{
|
{
|
||||||
report_timer_.start (MIN_SEND_INTERVAL * 1000);
|
report_timer_.start (MIN_SEND_INTERVAL+1 * 1000); // we add 1 to give some more randomization
|
||||||
}
|
}
|
||||||
if (!descriptor_timer_.isActive ())
|
if (!descriptor_timer_.isActive ())
|
||||||
{
|
{
|
||||||
@ -188,6 +199,8 @@ public:
|
|||||||
|
|
||||||
void send_report (bool send_residue = false);
|
void send_report (bool send_residue = false);
|
||||||
void build_preamble (QDataStream&);
|
void build_preamble (QDataStream&);
|
||||||
|
void eclipse_load(QString filename);
|
||||||
|
bool eclipse_active(QDateTime now = QDateTime::currentDateTime());
|
||||||
|
|
||||||
bool flushing ()
|
bool flushing ()
|
||||||
{
|
{
|
||||||
@ -196,6 +209,14 @@ public:
|
|||||||
return flush;
|
return flush;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString getStringFromQDateTime(const QString& dateTimeString, const QString& format)
|
||||||
|
{
|
||||||
|
QDateTime dateTime = QDateTime::fromString(dateTimeString, format);
|
||||||
|
return dateTime.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
QList<QDateTime> eclipseDates;
|
||||||
|
|
||||||
logger_type mutable logger_;
|
logger_type mutable logger_;
|
||||||
PSKReporter * self_;
|
PSKReporter * self_;
|
||||||
Configuration const * config_;
|
Configuration const * config_;
|
||||||
@ -272,6 +293,69 @@ namespace
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool PSKReporter::impl::eclipse_active(QDateTime timeutc)
|
||||||
|
{
|
||||||
|
#ifdef DEBUGECLIPSE
|
||||||
|
std::ofstream mylog("/temp/eclipse.log", std::ios_base::app);
|
||||||
|
#endif
|
||||||
|
QDateTime dateNow = QDateTime::currentDateTimeUtc();
|
||||||
|
for (int i=0; i< eclipseDates.size(); ++i)
|
||||||
|
{
|
||||||
|
QDateTime check = eclipseDates.at(i); // already in UTC time
|
||||||
|
// +- 6 hour window
|
||||||
|
qint64 secondsDiff = qAbs(check.secsTo(dateNow));
|
||||||
|
if (secondsDiff <= 3600*6) // 6 hour check
|
||||||
|
{
|
||||||
|
#ifdef DEBUGECLIPSE
|
||||||
|
mylog << dateNow.toString(Qt::ISODate) << " Eclipse! " << "secondsDiff=" << secondsDiff << std::endl;
|
||||||
|
#endif
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#ifdef DEBUGECLIPSE
|
||||||
|
mylog << timeutc.toString("yyyy-MM-dd HH:mm:ss") << " no eclipse" << "\n";
|
||||||
|
#endif
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PSKReporter::impl::eclipse_load(QString eclipse_file)
|
||||||
|
{
|
||||||
|
std::ifstream fs(qPrintable(eclipse_file));
|
||||||
|
std::string mydate,mytime,myline;
|
||||||
|
#ifdef DEBUGECLIPSE
|
||||||
|
std::ofstream mylog("c:/temp/eclipse.log");
|
||||||
|
mylog << "eclipse_file=" << eclipse_file << std::endl;
|
||||||
|
#endif
|
||||||
|
if (fs.is_open())
|
||||||
|
{
|
||||||
|
while(!fs.eof())
|
||||||
|
{
|
||||||
|
std::getline(fs, myline);
|
||||||
|
if (myline[0] != '#' && myline.length() > 2) // make sure to skip blank lines
|
||||||
|
{
|
||||||
|
//QString format = "yyyy-MM-dd hh:mm:ss";
|
||||||
|
QDateTime qdate = QDateTime::fromString(QString::fromStdString(myline), Qt::ISODate);
|
||||||
|
QDateTime now = QDateTime::currentDateTimeUtc();
|
||||||
|
// only add the date if we can cover the whole 12 hours
|
||||||
|
//if (now < qdate.toUTC().addSecs(-3600*6))
|
||||||
|
eclipseDates.append(qdate);
|
||||||
|
#ifdef DEBUGECLIPSE
|
||||||
|
//else
|
||||||
|
// mylog << "not adding " << myline << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
}
|
||||||
|
#ifdef DEBUGECLIPSE
|
||||||
|
mylog << myline << std::endl;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#ifdef DEBUGECLIPSE
|
||||||
|
if (eclipse_active(QDateTime::currentDateTime().toUTC())) mylog << "Eclipse is active" << std::endl;
|
||||||
|
else mylog << "Eclipse is not active" << std::endl;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
void PSKReporter::impl::build_preamble (QDataStream& message)
|
void PSKReporter::impl::build_preamble (QDataStream& message)
|
||||||
{
|
{
|
||||||
// Message Header
|
// Message Header
|
||||||
@ -299,7 +383,7 @@ void PSKReporter::impl::build_preamble (QDataStream& message)
|
|||||||
<< quint16 (0xffff) // Option 1 Field Length (variable)
|
<< quint16 (0xffff) // Option 1 Field Length (variable)
|
||||||
<< quint32 (30351u) // Option 1 Enterprise Number
|
<< quint32 (30351u) // Option 1 Enterprise Number
|
||||||
<< quint16 (0x8000 + 5u) // Option 2 Information Element ID (frequency)
|
<< quint16 (0x8000 + 5u) // Option 2 Information Element ID (frequency)
|
||||||
<< quint16 (4u) // Option 2 Field Length
|
<< quint16 (5u) // Option 2 Field Length
|
||||||
<< quint32 (30351u) // Option 2 Enterprise Number
|
<< quint32 (30351u) // Option 2 Enterprise Number
|
||||||
<< quint16 (0x8000 + 6u) // Option 3 Information Element ID (sNR)
|
<< quint16 (0x8000 + 6u) // Option 3 Information Element ID (sNR)
|
||||||
<< quint16 (1u) // Option 3 Field Length
|
<< quint16 (1u) // Option 3 Field Length
|
||||||
@ -423,8 +507,19 @@ void PSKReporter::impl::send_report (bool send_residue)
|
|||||||
|
|
||||||
// Sender information
|
// Sender information
|
||||||
writeUtfString (tx_out, spot.call_);
|
writeUtfString (tx_out, spot.call_);
|
||||||
tx_out
|
uint8_t data[5];
|
||||||
<< static_cast<quint32> (spot.freq_)
|
long long int i64 = spot.freq_;
|
||||||
|
data[0] = ( i64 & 0xff);
|
||||||
|
data[1] = ((i64 >> 8) & 0xff);
|
||||||
|
data[2] = ((i64 >> 16) & 0xff);
|
||||||
|
data[3] = ((i64 >> 24) & 0xff);
|
||||||
|
data[4] = ((i64 >> 32) & 0xff);
|
||||||
|
tx_out // BigEndian
|
||||||
|
<< static_cast<uint8_t> (data[4])
|
||||||
|
<< static_cast<uint8_t> (data[3])
|
||||||
|
<< static_cast<uint8_t> (data[2])
|
||||||
|
<< static_cast<uint8_t> (data[1])
|
||||||
|
<< static_cast<uint8_t> (data[0])
|
||||||
<< static_cast<qint8> (spot.snr_);
|
<< static_cast<qint8> (spot.snr_);
|
||||||
writeUtfString (tx_out, spot.mode_);
|
writeUtfString (tx_out, spot.mode_);
|
||||||
writeUtfString (tx_out, spot.grid_);
|
writeUtfString (tx_out, spot.grid_);
|
||||||
@ -505,6 +600,11 @@ void PSKReporter::reconnect ()
|
|||||||
m_->reconnect ();
|
m_->reconnect ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool PSKReporter::eclipse_active(QDateTime now)
|
||||||
|
{
|
||||||
|
return m_->eclipse_active(now);
|
||||||
|
}
|
||||||
|
|
||||||
void PSKReporter::setLocalStation (QString const& call, QString const& gridSquare, QString const& antenna)
|
void PSKReporter::setLocalStation (QString const& call, QString const& gridSquare, QString const& antenna)
|
||||||
{
|
{
|
||||||
LOG_LOG_LOCATION (m_->logger_, trace, "call: " << call << " grid: " << gridSquare << " ant: " << antenna);
|
LOG_LOG_LOCATION (m_->logger_, trace, "call: " << call << " grid: " << gridSquare << " ant: " << antenna);
|
||||||
@ -531,7 +631,45 @@ bool PSKReporter::addRemoteStation (QString const& call, QString const& grid, Ra
|
|||||||
{
|
{
|
||||||
reconnect ();
|
reconnect ();
|
||||||
}
|
}
|
||||||
|
// remove any earlier spots of this call to reduce pskreporter load
|
||||||
|
#ifdef DEBUGPSK
|
||||||
|
static std::fstream fs;
|
||||||
|
if (!fs.is_open()) fs.open("/temp/psk.log", std::fstream::in | std::fstream::out | std::fstream::app);
|
||||||
|
#endif
|
||||||
|
added++;
|
||||||
|
|
||||||
|
QDateTime qdateNow = QDateTime::currentDateTime().toUTC();
|
||||||
|
// we allow all spots through +/- 6 hours around an eclipse for the HamSCI group
|
||||||
|
if (!spot_cache.contains(call) || freq > 49000000 || eclipse_active(qdateNow)) // then it's a new spot
|
||||||
|
{
|
||||||
m_->spots_.enqueue ({call, grid, snr, freq, mode, QDateTime::currentDateTimeUtc ()});
|
m_->spots_.enqueue ({call, grid, snr, freq, mode, QDateTime::currentDateTimeUtc ()});
|
||||||
|
spot_cache.insert(call, time(NULL));
|
||||||
|
#ifdef DEBUGPSK
|
||||||
|
if (fs.is_open()) fs << "Adding " << call << " freq=" << freq << " " << spot_cache[call] << " count=" << m_->spots_.count() << std::endl;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
else if (time(NULL) - spot_cache[call] > CACHE_TIMEOUT) // then the cache has expired
|
||||||
|
{
|
||||||
|
m_->spots_.enqueue ({call, grid, snr, freq, mode, QDateTime::currentDateTimeUtc ()});
|
||||||
|
#ifdef DEBUGPSK
|
||||||
|
if (fs.is_open()) fs << "Adding # " << call << spot_cache[call] << " count=" << m_->spots_.count() << std::endl;
|
||||||
|
#endif
|
||||||
|
spot_cache[call] = time(NULL);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
removed++;
|
||||||
|
#ifdef DEBUGPSK
|
||||||
|
if (fs.is_open()) fs << "Removing " << call << " " << time(NULL) << " reduction=" << removed/(double)added*100 << "%" << std::endl;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
// remove cached items over 10 minutes old to save a little memory
|
||||||
|
QMapIterator<QString, time_t> i(spot_cache);
|
||||||
|
time_t tmptime = time(NULL);
|
||||||
|
while(i.hasNext()) {
|
||||||
|
i.next();
|
||||||
|
if (tmptime - i.value() > 600) spot_cache.remove(i.key());
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -31,6 +31,10 @@ public:
|
|||||||
//
|
//
|
||||||
void sendReport (bool last = false);
|
void sendReport (bool last = false);
|
||||||
|
|
||||||
|
//
|
||||||
|
// True if current time falls withing a +/- window of a solar eclipse for HamSCI use
|
||||||
|
bool eclipse_active(QDateTime now);
|
||||||
|
|
||||||
Q_SIGNAL void errorOccurred (QString const& reason);
|
Q_SIGNAL void errorOccurred (QString const& reason);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -278,9 +278,10 @@ QString WSPRNet::encode_mode () const
|
|||||||
if (m_mode == "FST4W")
|
if (m_mode == "FST4W")
|
||||||
{
|
{
|
||||||
auto tr = static_cast<int> ((TR_period_ / 60.)+.5);
|
auto tr = static_cast<int> ((TR_period_ / 60.)+.5);
|
||||||
if (2 == tr || 15 == tr)
|
// if (2 == tr || 15 == tr)
|
||||||
|
if (2 == tr)
|
||||||
{
|
{
|
||||||
tr += 1; // distinguish from WSPR-2 and WSPR-15
|
tr += 1; // distinguish from WSPR-2
|
||||||
}
|
}
|
||||||
return QString::number (tr);
|
return QString::number (tr);
|
||||||
}
|
}
|
||||||
|
51
README
@ -11,28 +11,30 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
Copyright (C) 2001 - 2021 by Joe Taylor, K1JT.
|
Copyright (C) 2001 - 2023 by Joe Taylor, K1JT.
|
||||||
|
|
||||||
WSJT-X Version 2.3 offers ten different protocols or modes: FT4, FT8,
|
WSJT-X Version 2.6.1 offers eleven different protocols or modes: FT4,
|
||||||
JT4, JT9, JT65, QRA64, FST4, ISCAT, MSK144, WSPR, FST4W, and Echo. The
|
FT8, JT4, JT9, JT65, Q65, FST4, MSK144, WSPR, FST4W, and Echo. The
|
||||||
first seven are designed for making reliable QSOs under weak-signal
|
first seven are designed for making reliable QSOs under weak-signal
|
||||||
conditions. They use nearly identical message structure and source
|
conditions. They use nearly identical message structure and source
|
||||||
encoding. JT65 and QRA64 were designed for EME (“moonbounce”) on the
|
encoding. JT65 and Q65 were designed for EME (“moonbounce”), but not
|
||||||
VHF/UHF bands and have also proven very effective for worldwide QRP
|
limited to just that propagation path, on the VHF/UHF bands and JT65
|
||||||
communication on the HF bands. QRA64 has a number of advantages over
|
has also proven very effective for worldwide QRP communication on the
|
||||||
JT65, including better performance on the very weakest signals. We
|
HF bands. Q65 has a number of advantages over JT65, including better
|
||||||
imagine that over time it may replace JT65 for EME use. JT9 was
|
performance on the very weakest signals and variants with different
|
||||||
originally designed for the LF, MF, and lower HF bands. Its submode
|
T/R period lengths. We imagine that over time it may replace JT65 for
|
||||||
JT9A is 2 dB more sensitive than JT65 while using less than 10% of the
|
EME use, it has also proved to be very effective for iono-scatter
|
||||||
bandwidth. JT4 offers a wide variety of tone spacings and has proven
|
paths on 6m. JT9 was originally designed for the LF, MF, and lower HF
|
||||||
highly effective for EME on microwave bands up to 24 GHz. These four
|
bands. Its submode JT9A is 2 dB more sensitive than JT65 while using
|
||||||
“slow” modes use one-minute timed sequences of alternating
|
less than 10% of the bandwidth. JT4 offers a wide variety of tone
|
||||||
transmission and reception, so a minimal QSO takes four to six minutes
|
spacings and has proven highly effective for EME on microwave bands up
|
||||||
— two or three transmissions by each station, one sending in odd UTC
|
to 24 GHz. These four “slow” modes use one-minute timed sequences of
|
||||||
minutes and the other even. FT8 is operationally similar but four
|
alternating transmission and reception, so a minimal QSO takes four to
|
||||||
times faster (15-second T/R sequences) and less sensitive by a few
|
six minutes — two or three transmissions by each station, one sending
|
||||||
dB. FT4 is faster still (7.5 s T/R sequences) and especially well
|
in odd UTC minutes and the other even. FT8 is operationally similar
|
||||||
suited for radio contesting. On the HF bands, world-wide QSOs are
|
but four times faster (15-second T/R sequences) and less sensitive by
|
||||||
|
a few dB. FT4 is faster still (7.5 s T/R sequences) and especially
|
||||||
|
well suited for radio contesting. On the HF bands, world-wide QSOs are
|
||||||
possible with any of these modes using power levels of a few watts (or
|
possible with any of these modes using power levels of a few watts (or
|
||||||
even milliwatts) and compromise antennas. QSOs are possible at signal
|
even milliwatts) and compromise antennas. QSOs are possible at signal
|
||||||
levels 10 to 15 dB below those required for CW. FST4 has similarities
|
levels 10 to 15 dB below those required for CW. FST4 has similarities
|
||||||
@ -48,14 +50,13 @@ once per transmission. All fast modes in WSJT-X send their message
|
|||||||
frames repeatedly, as many times as will fit into the Tx sequence
|
frames repeatedly, as many times as will fit into the Tx sequence
|
||||||
length.
|
length.
|
||||||
|
|
||||||
ISCAT, MSK144, and optionally submodes JT9E-H are “fast” protocols
|
MSK144, and optionally submodes JT9E-H are “fast” protocols designed
|
||||||
designed to take advantage of brief signal enhancements from ionized
|
to take advantage of brief signal enhancements from ionized meteor
|
||||||
meteor trails, aircraft scatter, and other types of scatter
|
trails, aircraft scatter, and other types of scatter
|
||||||
propagation. These modes use timed sequences of 5, 10, 15, or 30 s
|
propagation. These modes use timed sequences of 5, 10, 15, or 30 s
|
||||||
duration. User messages are transmitted repeatedly at high rate (up to
|
duration. User messages are transmitted repeatedly at high rate (up to
|
||||||
250 characters per second, for MSK144) to make good use of the
|
250 characters per second, for MSK144) to make good use of the
|
||||||
shortest meteor-trail reflections or “pings”. ISCAT uses free-form
|
shortest meteor-trail reflections or “pings”. MSK144 uses the same
|
||||||
messages up to 28 characters long, while MSK144 uses the same
|
|
||||||
structured messages as the slow modes and optionally an abbreviated
|
structured messages as the slow modes and optionally an abbreviated
|
||||||
format with hashed callsigns.
|
format with hashed callsigns.
|
||||||
|
|
||||||
@ -98,7 +99,7 @@ https://wsjtx.groups.io/g/main email reflector.
|
|||||||
|
|
||||||
Project web site:
|
Project web site:
|
||||||
|
|
||||||
https://www.physics.princeton.edu/pulsar/K1JT/wsjtx.html
|
https://wsjt.sourceforge.io/wsjtx.html
|
||||||
|
|
||||||
Project mailing list (shared with other applications from the same
|
Project mailing list (shared with other applications from the same
|
||||||
team):
|
team):
|
||||||
|
32
Radio.cpp
@ -42,14 +42,27 @@ namespace Radio
|
|||||||
value = v.toDouble ();
|
value = v.toDouble ();
|
||||||
if (ok) *ok = true;
|
if (ok) *ok = true;
|
||||||
}
|
}
|
||||||
|
if (ok && !*ok)
|
||||||
|
{
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
return frequency (value, scale, ok);
|
||||||
|
}
|
||||||
|
|
||||||
|
Frequency frequency (double value, int scale, bool * ok)
|
||||||
|
{
|
||||||
value *= std::pow (10., scale);
|
value *= std::pow (10., scale);
|
||||||
if (ok)
|
if (ok)
|
||||||
{
|
{
|
||||||
if (value < 0. || value > std::numeric_limits<Frequency>::max ())
|
if (value < 0. || value > static_cast<double>(std::numeric_limits<Frequency>::max ()))
|
||||||
{
|
{
|
||||||
value = 0.;
|
value = 0.;
|
||||||
*ok = false;
|
*ok = false;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*ok = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return std::llround (value);
|
return std::llround (value);
|
||||||
}
|
}
|
||||||
@ -66,15 +79,28 @@ namespace Radio
|
|||||||
value = v.toDouble ();
|
value = v.toDouble ();
|
||||||
if (ok) *ok = true;
|
if (ok) *ok = true;
|
||||||
}
|
}
|
||||||
|
if (ok && !*ok)
|
||||||
|
{
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
return frequency_delta (value, scale, ok);
|
||||||
|
}
|
||||||
|
|
||||||
|
FrequencyDelta frequency_delta (double value, int scale, bool * ok)
|
||||||
|
{
|
||||||
value *= std::pow (10., scale);
|
value *= std::pow (10., scale);
|
||||||
if (ok)
|
if (ok)
|
||||||
{
|
{
|
||||||
if (value < -std::numeric_limits<Frequency>::max ()
|
if (value < static_cast<double>(std::numeric_limits<Frequency>::min ())
|
||||||
|| value > std::numeric_limits<Frequency>::max ())
|
|| value > static_cast<double>(std::numeric_limits<Frequency>::max ()))
|
||||||
{
|
{
|
||||||
value = 0.;
|
value = 0.;
|
||||||
*ok = false;
|
*ok = false;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*ok = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return std::llround (value);
|
return std::llround (value);
|
||||||
}
|
}
|
||||||
|
@ -34,10 +34,12 @@ namespace Radio
|
|||||||
// QVariant argument is convertible to double and is assumed to
|
// QVariant argument is convertible to double and is assumed to
|
||||||
// be scaled by (10 ** -scale).
|
// be scaled by (10 ** -scale).
|
||||||
//
|
//
|
||||||
Frequency UDP_EXPORT frequency (QVariant const&, int scale,
|
Frequency UDP_EXPORT frequency (QVariant const&, int scale = 0,
|
||||||
bool * ok = nullptr, QLocale const& = QLocale ());
|
bool * ok = nullptr, QLocale const& = QLocale ());
|
||||||
FrequencyDelta UDP_EXPORT frequency_delta (QVariant const&, int scale,
|
FrequencyDelta UDP_EXPORT frequency_delta (QVariant const&, int scale = 0,
|
||||||
bool * ok = nullptr, QLocale const& = QLocale ());
|
bool * ok = nullptr, QLocale const& = QLocale ());
|
||||||
|
Frequency UDP_EXPORT frequency (double, int scale = 0, bool * ok = nullptr);
|
||||||
|
FrequencyDelta UDP_EXPORT frequency_delta (double, int scale = 0, bool * ok = nullptr);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Frequency type formatting
|
// Frequency type formatting
|
||||||
|
@ -9,7 +9,787 @@
|
|||||||
\$$ \$$ \$$$$$$ \$$$$$$ \$$ \$$ \$$
|
\$$ \$$ \$$$$$$ \$$$$$$ \$$ \$$ \$$
|
||||||
|
|
||||||
|
|
||||||
Copyright 2001 - 2021 by Joe Taylor, K1JT.
|
Copyright 2001 - 2024 by Joe Taylor, K1JT, and the WSJT Development Team
|
||||||
|
|
||||||
|
Release: WSJT-X 2.7.0-rc4
|
||||||
|
March 11, 2024
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
WSJT-X 2.7.0 Release Candidate 4 brings some improvements for Fox-mode
|
||||||
|
operators, new features for companion program QMAP, and a number of
|
||||||
|
relatively minor enhancements and bug fixes.
|
||||||
|
|
||||||
|
QMAP enhancements -- of particular interest to EME operators:
|
||||||
|
|
||||||
|
- QMAP now decodes Q65 submodes with both 60-second and 30-second T/R
|
||||||
|
sequence lengths. Clicking on a resulting line in the WSJT-X Active
|
||||||
|
Stations window automatically sets dial frequency and working
|
||||||
|
submode as needed to call that station.
|
||||||
|
|
||||||
|
- QMAP operates in 60-second receive sequences, and its Q65 decoder
|
||||||
|
starts at t=19.5, 30.0, 49.5, and 58.5 s into the sequence. Most
|
||||||
|
decoded messages are displayed well before the end of the relevant
|
||||||
|
time slot.
|
||||||
|
|
||||||
|
- A new, more compact file format is now used for wideband data
|
||||||
|
files. A "Save decoded" option has been added to the Save menu.
|
||||||
|
|
||||||
|
- An option has been added to allow exporting a 3 kHz portion of a
|
||||||
|
wideband data file as a standard WSJT-X *.wav file.
|
||||||
|
|
||||||
|
- CTRL+click on QMAP's upper waterfall sends an integer kHz dial
|
||||||
|
frequency request to WSJT-X.
|
||||||
|
|
||||||
|
- With focus on the WSJT-X main window, hit Alt+A on the keyboard to
|
||||||
|
clear the Active Stations window.
|
||||||
|
|
||||||
|
- Many minor enhancements to the User Interface.
|
||||||
|
|
||||||
|
WSJT-X:
|
||||||
|
|
||||||
|
- Enable decoding of MSK144 from the jt9[.exe] executable.
|
||||||
|
|
||||||
|
- Several changes to reduce problems experienced when (contrary to
|
||||||
|
our recommendations) messages with short (10-bit) callsign hashes
|
||||||
|
are used in standard FT4/FT8 sub-bands.
|
||||||
|
|
||||||
|
Release: WSJT-X 2.7.0-rc3
|
||||||
|
January 1, 2024
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
WSJT-X 2.7.0 Release Candidate 3 brings some new features, as well as
|
||||||
|
numerous detail improvements and bug fixes, such as:
|
||||||
|
|
||||||
|
- Added a new "Update Hamlib" function. On Windows, it allows the user to
|
||||||
|
update Hamlib directly from the program. The previously used version is
|
||||||
|
backed up, so the user can easily revert a hamlib update.
|
||||||
|
|
||||||
|
- The Hamlib version in use is now displayed (also on Linux and macOS).
|
||||||
|
|
||||||
|
- The FT Roundup Messages protocol has been enhanced. It now allows also
|
||||||
|
the exchange of static 4-digit numbers instead of serial numbers. This
|
||||||
|
extends the usability of the FT RU protocol for other contest types.
|
||||||
|
|
||||||
|
- Improved direct switching between modes. Submode, as well as the status
|
||||||
|
of the "Sh" and "Fast" checkboxes are now saved and restored by mode.
|
||||||
|
|
||||||
|
- Some right-click events were made more intuitive and consistent.
|
||||||
|
- Right-clicking the Q65 button enables Q65 Pileup mode, a left-click
|
||||||
|
brings you back to the normal Q65 mode.
|
||||||
|
- Right-click the JT65 button to switch to JT9 mode.
|
||||||
|
|
||||||
|
- For Q65, all messages for us are now displayed in the right window.
|
||||||
|
|
||||||
|
- Message averaging is now allowed only when VHF features are
|
||||||
|
enabled, and label texts are changed to "Single Period Decodes" and
|
||||||
|
"Average Decodes" only if averaging is enabled.
|
||||||
|
|
||||||
|
- Some improvements to the Hamlib Transceiver code. Behavior is now
|
||||||
|
more stable when Rig Split has been selected.
|
||||||
|
|
||||||
|
- Prevented redundant network communication between WSJT-X and DX Lab
|
||||||
|
Suite Commander.
|
||||||
|
|
||||||
|
- Download of the LotW file now works without OpenSSL libraries.
|
||||||
|
|
||||||
|
- Made the spot counter work for WSPR.
|
||||||
|
|
||||||
|
- Prevented insertion of an individual contest name when in Fox mode.
|
||||||
|
|
||||||
|
- WAE entities are now assigned to the correct DXCC when "Include
|
||||||
|
extra WAE entities" is not selected.
|
||||||
|
|
||||||
|
- Added a utility program 'cablog' which can be used to convert the
|
||||||
|
wsjtx.log file to Cabrillo format for the ARRL EME contest.
|
||||||
|
|
||||||
|
- Minor improvements to the Active Stations window.
|
||||||
|
|
||||||
|
- The Rx/Tx frequency for Echo mode has been fixed at 1500 Hz.
|
||||||
|
|
||||||
|
- Some corrections and updates to the INSTALL instructions for Linux.
|
||||||
|
|
||||||
|
- Updated CTY.DAT file.
|
||||||
|
|
||||||
|
Release: WSJT-X 2.7.0-rc2
|
||||||
|
July 7, 2023
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
WSJT-X 2.7.0 Release Candidate 2 introduces several minor improvements
|
||||||
|
and bug fixes.
|
||||||
|
|
||||||
|
- CTRL+SHIFT+F11/F12 now changes dial frequency by 1000 Hz instead of
|
||||||
|
2000 Hz.
|
||||||
|
|
||||||
|
- Improved spotting to PSK Reporter for upcoming HamSCI Festivals of
|
||||||
|
Eclipse Ionospheric Science.
|
||||||
|
|
||||||
|
- Added optional Hungarian translation of the user interface.
|
||||||
|
|
||||||
|
- Fixed a flaw that could produce false decodes in Q65 submodes D and E.
|
||||||
|
|
||||||
|
- Fixed a flaw with the QSO start time. It is now reset when the DX
|
||||||
|
Call changes.
|
||||||
|
|
||||||
|
- Fixed a flaw that prevented contest logging of the ARRL Digi Contest.
|
||||||
|
|
||||||
|
- Right-clicking the Q65 mode button to toggle the Q65 Pileup mode on/off
|
||||||
|
now also works on macOS.
|
||||||
|
|
||||||
|
- Fixed a compilation error on macOS Ventura.
|
||||||
|
|
||||||
|
- WSPR and FST4W band hopping now works again.
|
||||||
|
|
||||||
|
- It is now ensured that "U.S.A." is displayed when using certain
|
||||||
|
cty.dat files.
|
||||||
|
|
||||||
|
- Corrected the problem with duplicated FT8 entries in ActiveStations
|
||||||
|
window.
|
||||||
|
|
||||||
|
Release: WSJT-X 2.7.0-rc1
|
||||||
|
May 12, 2023
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
WSJT-X 2.7.0 Release Candidate 1 introduces a new program called QMAP,
|
||||||
|
a new Special Operating Activity known as Q65 Pileup, and a number of
|
||||||
|
other enhancements and fixes.
|
||||||
|
|
||||||
|
- QMAP and Q65 Pileup mode are of particular interest to those
|
||||||
|
engaged in Earth-Moon-Earth (EME) communication, but other
|
||||||
|
applications may be found for them as well.
|
||||||
|
|
||||||
|
- QMAP is derived from MAP65, an older program used since 2007 for
|
||||||
|
EME, mainly on the 2 m band. QMAP provides single-polarization
|
||||||
|
receive-only capabilities for any one of the 60-second submodes
|
||||||
|
of Q65. It allows you to monitor all traffic in a 90 kHz subband
|
||||||
|
while conducting EME QSOs in the usual way with WSJT-X.
|
||||||
|
|
||||||
|
- Q65 Pileup mode is a new feature in WSJT-X that will assist DX
|
||||||
|
operators using Q65 in pileup circumstances with many
|
||||||
|
simultaneous callers and very weak signals, such as those
|
||||||
|
experienced by 6-meter EME DXpeditions.
|
||||||
|
|
||||||
|
- Further details on QMAP and Q65 Pileup mode are available in a
|
||||||
|
Quick-Start guide posted here:
|
||||||
|
https://wsjt.sourceforge.io/Quick_Start_WSJT-X_2.7_QMAP.pdf
|
||||||
|
|
||||||
|
- WSJT-X now provides more efficient spotting to PSK Reporter.
|
||||||
|
Redundant spots are omitted, and posting of spots is now spread
|
||||||
|
more widely in time. (Temporarily, in support of the HamSCI
|
||||||
|
Festivals of Eclipse Ionospheric Science, spots will be transmitted
|
||||||
|
more frequently during the upcoming solar eclipses.)
|
||||||
|
|
||||||
|
- WSJT-X is now able to process more than 100 FT8 decodes in a single
|
||||||
|
reception interval.
|
||||||
|
|
||||||
|
- Improvements to the Fox mode:
|
||||||
|
- More convenient and efficient handling of the two queues.
|
||||||
|
- Fox Log window now displays statistical data on the QSO rate.
|
||||||
|
|
||||||
|
- When the station locator is changed (e.g during portable
|
||||||
|
operations), the new locator will be sent automatically to PSK
|
||||||
|
Reporter.
|
||||||
|
|
||||||
|
- The cty.dat file can now be updated by clicking a button on the
|
||||||
|
Settings -> Colors tab.
|
||||||
|
|
||||||
|
- A new status display appears when fetching a new LotW file.
|
||||||
|
|
||||||
|
- Multi-streamed messages transmitted by MSHV are now handled
|
||||||
|
properly when WSJT-X is in Hound mode.
|
||||||
|
|
||||||
|
- Auto-sequencing now has better protection against unwanted effects
|
||||||
|
caused by late FT8 decodes.
|
||||||
|
|
||||||
|
- Fixed an inconsistency in which Contest Name was not correctly
|
||||||
|
remembered.
|
||||||
|
|
||||||
|
- Other minor bug fixes.
|
||||||
|
|
||||||
|
- Updated hyperlinks to our homepage and to our new WSJT GROUP User
|
||||||
|
Forum (https://groups.io/g/wsjtgroup/) can now also be found in the
|
||||||
|
User Guide.
|
||||||
|
|
||||||
|
- The build instructions for macOS have been clarified.
|
||||||
|
|
||||||
|
|
||||||
|
Release: WSJT-X 2.6.1
|
||||||
|
January 16, 2023
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
WSJT-X 2.6.1 is mostly a bug fix release for Q65. It has the following
|
||||||
|
changes since release 2.6.0:
|
||||||
|
|
||||||
|
- Fix a flaw in Q65 mode that prevented proper display of the T/R
|
||||||
|
period spinner.
|
||||||
|
|
||||||
|
- Make the initialization of the decoded text font more robust.
|
||||||
|
|
||||||
|
- Better initialization when starting the program in FT8 Hound mode.
|
||||||
|
|
||||||
|
- Fix a bug causing program crash with more than 100 decodes in a
|
||||||
|
single FT8 sequence.
|
||||||
|
|
||||||
|
- Fix a compiler warning on macOS.
|
||||||
|
|
||||||
|
- Correct the reference to "ARRL International Digital Contest" in the
|
||||||
|
Release Notes.
|
||||||
|
|
||||||
|
Release: WSJT-X 2.6.0
|
||||||
|
January 6, 2023
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
WSJT-X 2.6.0 is a General Availability (GA) release, the first since
|
||||||
|
version 2.5.4. Its major enhancements include the following:
|
||||||
|
|
||||||
|
- Mode selection buttons on main window for FT4, FT8, JT65, MSK144,
|
||||||
|
Q65, and FT8's Hound mode
|
||||||
|
- Support for the ARRL International Digital Contest
|
||||||
|
- Performance enhancements for the FT8 and Q65 modes
|
||||||
|
- New features for EME Echo mode, including calibrated SNR reports
|
||||||
|
- Several new convenience features for Fox operators
|
||||||
|
- Save/Restore capability, "Preferred" status, and effective date
|
||||||
|
ranges for mode-dependent tables of default frequencies
|
||||||
|
- Improved display features for contest log
|
||||||
|
- Improved calibration of SNR estimates for modes FST4 and FST4W
|
||||||
|
|
||||||
|
Other enhancements and bug fixes since 2.6.0-rc5 include the following:
|
||||||
|
|
||||||
|
- PSK Reporter spotting is now also possible for frequencies > 4 GHz.
|
||||||
|
This is required for QO-100, for example.
|
||||||
|
|
||||||
|
- The minimum width of the main window has been further reduced, and
|
||||||
|
such small sizes are now remembered and properly restored.
|
||||||
|
|
||||||
|
- Some further improvements for Fox operators.
|
||||||
|
|
||||||
|
- Fix the long-standing flaw that "Start new period decodes at top"
|
||||||
|
didn't work anymore after several hours.
|
||||||
|
|
||||||
|
- Fix a flaw that could cause crashes by double-clicking messages
|
||||||
|
with <...> in certain QSO situations.
|
||||||
|
|
||||||
|
- Fix a flaw that prevented the rig from initializing correctly after
|
||||||
|
switching between configurations when connected via HRD.
|
||||||
|
|
||||||
|
- Add tooltips to better explain the split operation options.
|
||||||
|
|
||||||
|
- Add some additional FT roundup exchanges which can be used for
|
||||||
|
local contests or QSO parties.
|
||||||
|
|
||||||
|
- Add an option to call CQ with an individual contest name.
|
||||||
|
|
||||||
|
- Update of some ARRL section abbreviations.
|
||||||
|
|
||||||
|
For full details on changes since WSJT-X version 2.5.4, be sure to
|
||||||
|
read the Release Notes sections for 2.6.0-rc1 through rc5, immediately
|
||||||
|
following.
|
||||||
|
|
||||||
|
|
||||||
|
Release: WSJT-X 2.6.0-rc5
|
||||||
|
November 29, 2022
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
WSJT-X 2.6.0 Release Candidate 5 brings a number of improvements as
|
||||||
|
well as some bug fixes.
|
||||||
|
|
||||||
|
In program WSJT-X:
|
||||||
|
|
||||||
|
- Better calibration for FST4/W SNR estimates.
|
||||||
|
|
||||||
|
- Upload FST4W-900 spots to wsprnet with TR code 15 instead of 16.
|
||||||
|
|
||||||
|
- Improved FT8 decoding on crowded bands.
|
||||||
|
|
||||||
|
- The Working frequency table now offers the following options:
|
||||||
|
- Better handling of more than one frequency per band.
|
||||||
|
- Set your preferred frequencies, WSJT-X always comes back to these
|
||||||
|
QRGs when changing band or mode.
|
||||||
|
- You can label your frequencies with descriptions (e.g. DXp AB0YXZ).
|
||||||
|
- Option to set Start and End Date/Time, so that the frequencies
|
||||||
|
automatically appear and disappear. Useful for contest or
|
||||||
|
DXpedition QRGs.
|
||||||
|
- Load a frequency table from a file to easily get all such data
|
||||||
|
implemented.
|
||||||
|
|
||||||
|
- In Fox mode, there are now a few additional functions that allow
|
||||||
|
operators to react even better to different QSO situations:
|
||||||
|
- A new two-column table in Tab 2 provides a better overview of
|
||||||
|
the queue and of the callsigns with QSOs in progress.
|
||||||
|
- Fox operator can now change the ordering of callsigns in the
|
||||||
|
queue so that he can react if there is only a narrow time slot
|
||||||
|
for a particular QSO due to propagation.
|
||||||
|
- Fox now responds for another two cycles to stations whose
|
||||||
|
report was not received, increasing the success rate for a
|
||||||
|
difficult QSO.
|
||||||
|
|
||||||
|
- Correct a flaw in Hound mode that sometimes prevented completion of
|
||||||
|
QSOs with non-standard calls.
|
||||||
|
|
||||||
|
- Improvements to EME Echo mode:
|
||||||
|
- New control "Avg" sets the number of Echo cycles to be averaged.
|
||||||
|
- New capability to display measurements of wideband noise power as
|
||||||
|
a function of time. This can be useful for measuring Sun noise,
|
||||||
|
antenna tracking errors, and the like.
|
||||||
|
- Several minor bug fixes
|
||||||
|
|
||||||
|
- Correct a flaw that prevented WSJT-X from always initializing
|
||||||
|
correctly when special operating activities were enabled.
|
||||||
|
|
||||||
|
- Correct a flaw that caused wrong Tx frequencies to be written to
|
||||||
|
ALL.TXT.
|
||||||
|
|
||||||
|
- The GUI has been improved regarding some details. The controls now
|
||||||
|
scale better at different font sizes and on different operating
|
||||||
|
systems.
|
||||||
|
|
||||||
|
- When in Hound mode and click the "H" button again, the frequency
|
||||||
|
is now kept. This gives the user the following two options to return
|
||||||
|
to normal FT8 mode:
|
||||||
|
- Click the "H" button again. Then you will stay on the QRG.
|
||||||
|
- Click the "FT8" button (or use the Settings menu). It brings
|
||||||
|
you back to the default FT8 QRG.
|
||||||
|
|
||||||
|
- Decodes flagged as 'a7' are now disabled when "Enable AP" is not
|
||||||
|
checked, and during the first period after a band change.
|
||||||
|
|
||||||
|
- The network address of the UDP server is now checked for errors
|
||||||
|
before being accepted.
|
||||||
|
|
||||||
|
- Some improvements to the DX Lab Suite Commander interface.
|
||||||
|
|
||||||
|
- Correct some possible flaws that could cause segfault errors in
|
||||||
|
certain unusual situations.
|
||||||
|
|
||||||
|
- Warnings on dropped audio have been disabled for now, as detection
|
||||||
|
has turned out to be not reliable enough.
|
||||||
|
|
||||||
|
- Correct a long-standing flaw which caused the "Transmit digital gain"
|
||||||
|
overlay to appear somewhere on the screen.
|
||||||
|
|
||||||
|
- "Highlight DX Call" now also works when the other station is <...>.
|
||||||
|
|
||||||
|
- CQ messages without a grid are now sent to PSK reporter.
|
||||||
|
|
||||||
|
- Several other minor corrections (tool tips, etc.).
|
||||||
|
|
||||||
|
Program MAP65 (Windows only) includes several minor bug fixes and two
|
||||||
|
tentative new features:
|
||||||
|
- an aid for measuring antenna pointing errors
|
||||||
|
- an ability to read the file wsjtx.log (kept by WSJT-X) to recognize
|
||||||
|
EME contest dupes.
|
||||||
|
|
||||||
|
|
||||||
|
Release: WSJT-X 2.6.0-rc4
|
||||||
|
September 8, 2022
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
WSJT-X 2.6.0 Release Candidate 4 provides further improvements to Echo
|
||||||
|
mode, a new File menu item, and several bug fixes.
|
||||||
|
|
||||||
|
- New features and fixes for Echo mode
|
||||||
|
- Created a new simulator echosim[.exe]
|
||||||
|
- Improved organization of output to text window
|
||||||
|
- Gain and Zero controls in Echo Graph now behave independently
|
||||||
|
- "Clear Avg" now erases the plot in Echo Graph
|
||||||
|
- Optional baseline for plots in Echo Graph
|
||||||
|
|
||||||
|
- New menu item "File | Copy main text window to WSJT-X.txt"
|
||||||
|
- Doppler tracking checkbox is made sticky
|
||||||
|
|
||||||
|
- Fix an RC2 bug that prevented normal use of JT9.
|
||||||
|
- Fix a rarely experienced failure when writing to decoded.txt
|
||||||
|
- Fix a hamlib bug caused by setting VFO B when Split is not used
|
||||||
|
- Rig control interface to Ham Radio deluxe made more robust
|
||||||
|
|
||||||
|
|
||||||
|
Release: WSJT-X 2.6.0-rc3
|
||||||
|
August 22, 2022
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
WSJT-X 2.6.0 Release Candidate 3 provides improvements to Echo mode and
|
||||||
|
several bug fixes.
|
||||||
|
|
||||||
|
- Echo mode now allows audio-frequency corrections rather than
|
||||||
|
CAT-controlled resetting of dial frequency for Doppler corrections,
|
||||||
|
when Doppler shift is less than 750 Hz. Audio-frequency
|
||||||
|
corrections are also used to correct any remaining portion of
|
||||||
|
Doppler shift caused by coarse CAT-controlled frequency setting.
|
||||||
|
|
||||||
|
- Echo mode now saves .wav files when "Save all" is selected. When
|
||||||
|
such files are opened in Echo mode, the astronomical parameters at
|
||||||
|
recording time are restored and used for processing the Echo data.
|
||||||
|
|
||||||
|
- A missing Leap Second (January 1, 2017) was added to the code that
|
||||||
|
converts UTC to UT1. This detail might matter if you want full
|
||||||
|
accuracy EME Doppler corrections.
|
||||||
|
|
||||||
|
- EME Doppler values are now rounded to nearest integer Hz.
|
||||||
|
|
||||||
|
- For backward compatibility, "Special Operating Activity"
|
||||||
|
enumerations for Fox and Hound modes are reset to their previous
|
||||||
|
values 6 and 7.
|
||||||
|
|
||||||
|
- Allow FST4W transmissions on 30m band. Ensure that correct
|
||||||
|
frequency is reported to WSPRnet for FST4W decodes with Rx Freq
|
||||||
|
spinbox not set to 1500.
|
||||||
|
|
||||||
|
- Fix a bug that could truncate WSPR transmissions early.
|
||||||
|
|
||||||
|
- Fix a bug that occasionally caused a crash when 'decoded.txt'
|
||||||
|
could not be opened.
|
||||||
|
|
||||||
|
- Fix a bug that could cause a crash if Astronomical Data window
|
||||||
|
is not active when needed.
|
||||||
|
|
||||||
|
- Fix a bug that caused a crash when "Reset Cabrillo Log" is
|
||||||
|
selected with Active Stations window not active.
|
||||||
|
|
||||||
|
|
||||||
|
Release: WSJT-X 2.6.0-rc2
|
||||||
|
July 21, 2022
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
WSJT-X 2.6.0 Release Candidate 2 brings a number of improvements as
|
||||||
|
well as some bug fixes.
|
||||||
|
|
||||||
|
- The "Measure" function in Echo mode now uses the computed Doppler
|
||||||
|
spread for DX grid, when available. This feature is especially
|
||||||
|
helpful for microwave EME tests, enabling accurate measurement of
|
||||||
|
SNR for a DX station.
|
||||||
|
|
||||||
|
- Settings for T/R period and Submode are now remembered by mode when
|
||||||
|
you switch directly between (for example) MSK144-15, Q65-60A,
|
||||||
|
JT65C, or FST4-120.
|
||||||
|
|
||||||
|
- Tx and Rx audio frequencies are remembered and restored when you
|
||||||
|
return from a mode that sets a default frequency of 1500 Hz
|
||||||
|
(MSK144, FST4W, Echo, WSPR, FreqCal) and then switching back to
|
||||||
|
FT4, FT8, Q65, JT65, or FST4.
|
||||||
|
|
||||||
|
- QSOs in the Contest Log can now be displayed in increasing or
|
||||||
|
decreasing order of logged time. By default the log is scrolled to
|
||||||
|
the latest logged QSO, ready for insertion of a new contact. The
|
||||||
|
total number of QSOs in the Contest Log is displayed at bottom left
|
||||||
|
of its window.
|
||||||
|
|
||||||
|
- Default FT8 frequency for 4m band (Region 1) is set to 70.154 MHz.
|
||||||
|
|
||||||
|
- Layout of mode buttons has been optimized for 4K screens.
|
||||||
|
|
||||||
|
- Display of Keyboard Shortcuts has been updated.
|
||||||
|
|
||||||
|
- The OK button now has default focus in the LogQSO dialog window.
|
||||||
|
You may just hit Enter to log the QSO.
|
||||||
|
|
||||||
|
- Bug fix: The Tx Freq spinbox remained red when coming back from
|
||||||
|
some Q65 submodes. Corrected.
|
||||||
|
|
||||||
|
- Hamlib bug fixes: make sure that VFOB is selected when required on
|
||||||
|
some rigs (e.g. IC7610, IC7100), and others.
|
||||||
|
|
||||||
|
|
||||||
|
Release: WSJT-X 2.6.0-rc1
|
||||||
|
June 20, 2022
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
WSJT-X 2.6.0 Release Candidate 1 introduces support for the ARRL
|
||||||
|
International Digital Contest; performance enhancements for FT8, Q65,
|
||||||
|
and EME Echo mode; new controls and options on the GUI; and several
|
||||||
|
bug fixes.
|
||||||
|
|
||||||
|
In program WSJT-X:
|
||||||
|
|
||||||
|
- Improved decoding for FT8: additional messages are marked 'a7'
|
||||||
|
|
||||||
|
- Improved decoding for Q65 when AP is in use
|
||||||
|
|
||||||
|
- Optional new "Active Stations" window and other features
|
||||||
|
supporting ARRL International Digital Contest
|
||||||
|
|
||||||
|
- Accurate SNR measurements in Echo mode, including large Doppler
|
||||||
|
spreads
|
||||||
|
|
||||||
|
- Add mode selection buttons on main window for FT4, FT8, JT65,
|
||||||
|
MSK144, and Q65
|
||||||
|
|
||||||
|
- Add a button to toggle FT8's Hound mode ON or OFF
|
||||||
|
|
||||||
|
- Add a "Clr Avg" button for Echo mode
|
||||||
|
|
||||||
|
- Add optional highlighting of DX Call and DX Grid
|
||||||
|
|
||||||
|
- Add optional highlighting of messages containing RR73 or 73
|
||||||
|
|
||||||
|
- New options for writing to ALL.TXT: split the file yearly, monthly,
|
||||||
|
or disable writing altogether
|
||||||
|
|
||||||
|
- Add Russian to available translations of user interface
|
||||||
|
|
||||||
|
- Add a 90 s Tune watchdog with optional disable
|
||||||
|
|
||||||
|
- Allow auto reply for non-CQ messages via UDP (JTAlert, etc.) when
|
||||||
|
Hold Tx Freq is enabled
|
||||||
|
|
||||||
|
- Suppress transmission of blank messages
|
||||||
|
|
||||||
|
- Suppress self-spotting when running multiple instances
|
||||||
|
|
||||||
|
- Correct the handling of messages starting with "CQ xxxx ..."
|
||||||
|
|
||||||
|
- Correct a flaw that could cause Windows to drop audio samples
|
||||||
|
|
||||||
|
- Correct a flaw that could send incorrect frequencies to ALL.TXT
|
||||||
|
and PSK Reporter after a band change
|
||||||
|
|
||||||
|
- Correct the auto-sequencing logic in several specific circumstances
|
||||||
|
|
||||||
|
- Correct a flaw in WSPR mode when handling three-character callsigns
|
||||||
|
|
||||||
|
- Correct a flaw that could cause OmniRig 1.19 or later to set
|
||||||
|
incorrect frequencies after initialization
|
||||||
|
|
||||||
|
- Clean up some ToolTips
|
||||||
|
|
||||||
|
- Fix an inconsistancy in the macOS installation package that caused
|
||||||
|
the pwr slider to behave incorrectly on macOS 12
|
||||||
|
|
||||||
|
In program MAP65 (Windows only):
|
||||||
|
|
||||||
|
- Send additional information to file azel.dat
|
||||||
|
|
||||||
|
- Allow optional scaling of digital I/Q data
|
||||||
|
|
||||||
|
- Suppress a bounds error caused by too-wide setting of display
|
||||||
|
bandwidth
|
||||||
|
|
||||||
|
|
||||||
|
Release: WSJT-X 2.5.4
|
||||||
|
Dec 28, 2021
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
This is mostly a bug fix release. It has the following changes since
|
||||||
|
release 2.5.3:
|
||||||
|
|
||||||
|
WSJTX:
|
||||||
|
- Repair a defect that caused occasional crashes when in QSO with
|
||||||
|
stations using nonstandard callsigns.
|
||||||
|
|
||||||
|
MAP65:
|
||||||
|
- Allowing MAP65 "Best-fit Delta phi" solution to be displayed to the
|
||||||
|
user.
|
||||||
|
|
||||||
|
|
||||||
|
Release: WSJT-X 2.5.3
|
||||||
|
Dec 7, 2021
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
This release has the following changes since release 2.5.2:
|
||||||
|
|
||||||
|
- Add a note in memory of G4WJS to the About window
|
||||||
|
|
||||||
|
- Add a simple $DXCALL macro capability for Tx messages, and update
|
||||||
|
the User Guide accordingly
|
||||||
|
|
||||||
|
- Ensure that MAIN VFO is used for receiving on rigs that require it
|
||||||
|
|
||||||
|
- Repair a defect in reporting low-confidence decodes to PskReporter
|
||||||
|
|
||||||
|
- Updated CTY.DAT database, tnx to Jim AD1C
|
||||||
|
|
||||||
|
|
||||||
|
Release: WSJT-X 2.5.2
|
||||||
|
Nov 4, 2021
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
This is mostly a bug fix release. It has the following changes since
|
||||||
|
release 2.5.1:
|
||||||
|
|
||||||
|
- Repair a longstanding regression that caused signal reports from
|
||||||
|
tail-ended Tx2 messages to be omitted from logged information
|
||||||
|
|
||||||
|
- Parse "dx-call-1 RR73; dx-call-2 <de-call> +nn" messages (i3=0,
|
||||||
|
n3=1 DXpedition mode) in regular 77-bit modes
|
||||||
|
|
||||||
|
- Repair a regression associated with setting the main window width
|
||||||
|
on program startup.
|
||||||
|
|
||||||
|
- Repair a problem with Q65 decodes of type 'q3' for messages of the
|
||||||
|
form "<Call_1> Call_2"
|
||||||
|
|
||||||
|
- Execute code associated with Q65 decodes of type 'q5' only when the
|
||||||
|
Max Drift control is set to 50. This fix prevents
|
||||||
|
double-incrementing of the message averaging counter on the first
|
||||||
|
decoding sequence.
|
||||||
|
|
||||||
|
- Polarization offset 'Dpol' from the astronomical data window is now
|
||||||
|
written to file azel.dat if environment variable
|
||||||
|
WSJT_AZEL_EXTRA_LINES has been defined as 1 or greater. Dpol is
|
||||||
|
especially useful for EME on the higher microwave bands.
|
||||||
|
|
||||||
|
- The Auto Log QSO option in "Settings->Reporting" now behaves the
|
||||||
|
same as the Prompt to log QSO option when not in a special
|
||||||
|
operating context mode.
|
||||||
|
|
||||||
|
- The Fast/Normal/Deep setting in Q65 mode is now a sticky setting
|
||||||
|
and is no longer reset to Fast on program startup or when Settings
|
||||||
|
has been opened. The user selection is used for automatic decodes,
|
||||||
|
but Deep is used for any subsequent manual decode attempts.
|
||||||
|
|
||||||
|
- New hamlib code to correct minor flaws in controlling several rigs.
|
||||||
|
|
||||||
|
- Update the Chinese and Hong Kong translations of the user
|
||||||
|
interface.
|
||||||
|
|
||||||
|
- Note that since the WSJT-X v2.5.0 GA release we have not been
|
||||||
|
providing pre-built 32-bit packages for Linux on Intel CPUs, this
|
||||||
|
is due to the mainstream Linux Desktop distributions no longer
|
||||||
|
providing updates for 32-bit only systems. 32-bit WSJT-X can still
|
||||||
|
be built for Linux Intel and is supported at least until some
|
||||||
|
prerequisite package is no longer available.
|
||||||
|
|
||||||
|
|
||||||
|
Release: WSJT-X 2.5.1
|
||||||
|
Oct 21, 2021
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
This release mainly contains improvements and defect repairs related
|
||||||
|
to Q65 and JT65 modes when used with non-standard and compound
|
||||||
|
calls. Also included is a new feature for microwave aircraft scatter
|
||||||
|
and repairs for defects detected since the 2.5.0 GA release.
|
||||||
|
|
||||||
|
- Improved Q65 support for 10GHz Aircraft Scatter contributed by Rex,
|
||||||
|
VK7MO, and Roger, W3SZ. (See "10 GHz Terrestrial with Q65" in DUBUS
|
||||||
|
Vol 1/2021 page 64.) Decodes of type 'q3' may now include
|
||||||
|
corrections for frequency drift.
|
||||||
|
|
||||||
|
- Repair a defect that failed to pre-load the DE and DX calls to the
|
||||||
|
hash lookup tables in the Q65 decoder.
|
||||||
|
|
||||||
|
- Repair standard message Tx4 and Tx5 generation in Q65 mode when
|
||||||
|
using a non-standard call.
|
||||||
|
|
||||||
|
- Repair a defect in generation of the standard Tx2 JT65 message in
|
||||||
|
EME mode when using a compound call.
|
||||||
|
|
||||||
|
- Repair a defect when decoding 77-bit type 4 non-standard call
|
||||||
|
message.
|
||||||
|
|
||||||
|
- Repair a defect that could cause a crash when switching from Q65 to
|
||||||
|
JT65 mode and attempting a double-click decode.
|
||||||
|
|
||||||
|
- Enable 'q3' AP decoding in Q65 mode for messages containing a
|
||||||
|
non-standard call.
|
||||||
|
|
||||||
|
- Repair a defect that required a blank DX Grid to achieve Q65 'q3'
|
||||||
|
decodes of messages containing a non-standard call.
|
||||||
|
|
||||||
|
- Repair the logic that sets parameters for Q65 "Deep" decoding.
|
||||||
|
|
||||||
|
- In Q65 mode, allow 'q2' decodes when MyCall is compound or
|
||||||
|
non-standard.
|
||||||
|
|
||||||
|
- Repair a long-standing defect that could cause a crash when
|
||||||
|
reference spectrum correction is enabled.
|
||||||
|
|
||||||
|
- Updated UI translations from Xavi, EA3W, Oba-san, JA7UDE, and a new
|
||||||
|
translation for Traditional Chinese by Steven, BU2EL.
|
||||||
|
|
||||||
|
- Updated CTY.DAT database, tnx to Jim AD1C
|
||||||
|
|
||||||
|
- Improved main window layout to ensure TxN messages are fully
|
||||||
|
visible.
|
||||||
|
|
||||||
|
|
||||||
|
Release: WSJT-X 2.5.0
|
||||||
|
Sept 27, 2021
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
WSJT-X in this release is nearly identical to that in WSJT-X 2.4.0.
|
||||||
|
The Q65 decoder has been enhanced to measure and compensate for linear
|
||||||
|
frequency drift in Q65 signals. In addition, the Windows installation
|
||||||
|
package now includes version 3.0 of application MAP65 which has Q65
|
||||||
|
support to match and improve on its existing JT65 capabilities.
|
||||||
|
|
||||||
|
See the 2.5.0 release candidate notices below for a summaries of the
|
||||||
|
other changes included in this release. WSJT-X 2.5.0 is bundled with
|
||||||
|
Hamlib version 4.3.1 which includes important regression repairs over
|
||||||
|
the earlier 4.3 release.
|
||||||
|
|
||||||
|
Other changes in the package since WSJT-X 2.5.0-rc6 include the
|
||||||
|
following enhancements and defect repairs:
|
||||||
|
|
||||||
|
MAP65:
|
||||||
|
- Ensure that CALL3.TXT is not deleted while updating the file (this
|
||||||
|
allows sharing using symlinks to work).
|
||||||
|
- Fix MAP65's generation of Tx3 message for abs(SNR)< 10.
|
||||||
|
|
||||||
|
WSJTX:
|
||||||
|
- Repair a defect that caused CAT errors when using WSPR band hopping
|
||||||
|
and auto tune-up with some Icom rigs.
|
||||||
|
- Ensure that CALL3.TXT is not deleted while updating the file (this
|
||||||
|
allows sharing using symlinks to work).
|
||||||
|
|
||||||
|
|
||||||
|
Release: WSJT-X 2.5.0-rc6
|
||||||
|
Sept 6, 2021
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
Remember that the WSJT-X 2.5.0 package includes MAP65 3.0.0. Changes
|
||||||
|
in the package since WSJT-X 2.5.0-rc5 include the following
|
||||||
|
enhancements and defect repairs:
|
||||||
|
|
||||||
|
MAP65:
|
||||||
|
- There are no functional changes to MAP65 in this release.
|
||||||
|
|
||||||
|
WSJT-X:
|
||||||
|
- Repair a file handle leak in wsprd (tnx Phil, KA9Q).
|
||||||
|
- Better handling of the Tx1 buttons when changing special operating
|
||||||
|
modes.
|
||||||
|
- Q65 mode now supports contest special operating modes.
|
||||||
|
- Repair an issue when non-ASCII characters used in account names.
|
||||||
|
- Repair a regression that prevented WSPR band-hopping working when
|
||||||
|
the Tx percentage is zero.
|
||||||
|
|
||||||
|
|
||||||
|
Release: WSJT-X 2.5.0-rc5
|
||||||
|
Aug 5, 2021
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
Remember that the WSJT-X 2.5.0 package includes MAP65 3.0.0. Changes
|
||||||
|
in the package since WSJT-X 2.5.0-rc4 include the following
|
||||||
|
enhancements and defect repairs:
|
||||||
|
|
||||||
|
MAP65:
|
||||||
|
- When you double-click on lower waterfall, Ftol is set to 100
|
||||||
|
only if it is currently set to a higher value.
|
||||||
|
- Early decoding pass is skipped when data are read from disk.
|
||||||
|
- Duplicate decodes are suppressed only when at the same frequency.
|
||||||
|
|
||||||
|
WSJT-X:
|
||||||
|
- Repair a regression that caused some messages involving compound
|
||||||
|
or nonstandard callsigns to be encoded as free text
|
||||||
|
|
||||||
|
|
||||||
|
Release: WSJT-X 2.5.0-rc4
|
||||||
|
Aug 1, 2021
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
Remember that the WSJT-X 2.5.0 package includes MAP65 3.0.0. Changes
|
||||||
|
in the package since WSJT-X 2.5.0-rc3 include the following
|
||||||
|
enhancements and defect repairs:
|
||||||
|
|
||||||
|
MAP65:
|
||||||
|
- Suppress display of duplicate decodes
|
||||||
|
- Increase the length of .tf2 & .iq files to 56 s
|
||||||
|
- Implement an early decoding pass at 52 s
|
||||||
|
- Clean up the output written to map65_rx.log
|
||||||
|
|
||||||
|
WSJT-X:
|
||||||
|
- Repair a defect in CALL3.TXT lookups that incorrectly matched
|
||||||
|
partial calls
|
||||||
|
- Instructions in macOS ReadMe.txt to suppress App Nap energy saving
|
||||||
|
- Revised User Guide using FT8 mode for the basic tutorial
|
||||||
|
- Allow contest and FD operating in Q65 mode
|
||||||
|
|
||||||
|
|
||||||
Release: WSJT-X 2.5.0-rc3
|
Release: WSJT-X 2.5.0-rc3
|
||||||
@ -34,6 +814,7 @@ WSJT-X:
|
|||||||
messages to not be sent when no other intervening messages are
|
messages to not be sent when no other intervening messages are
|
||||||
sent.
|
sent.
|
||||||
|
|
||||||
|
|
||||||
Release: WSJT-X 2.5.0-rc2
|
Release: WSJT-X 2.5.0-rc2
|
||||||
Jun 28, 2021
|
Jun 28, 2021
|
||||||
-------------------------
|
-------------------------
|
||||||
@ -74,6 +855,7 @@ WSJT-X (including the decoder for Q65 used by MAP65):
|
|||||||
series rigs, and support for the Icom IC-575 rig.
|
series rigs, and support for the Icom IC-575 rig.
|
||||||
- Updated CTY.DAT database
|
- Updated CTY.DAT database
|
||||||
|
|
||||||
|
|
||||||
Release: WSJT-X 2.5.0-rc1
|
Release: WSJT-X 2.5.0-rc1
|
||||||
Jun 3, 2021
|
Jun 3, 2021
|
||||||
-------------------------
|
-------------------------
|
||||||
@ -428,7 +1210,6 @@ release candidate.
|
|||||||
- Several updates to international UI translations.
|
- Several updates to international UI translations.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Release: WSJT-X 2.3.0-rc2
|
Release: WSJT-X 2.3.0-rc2
|
||||||
Nov 16, 2020
|
Nov 16, 2020
|
||||||
-------------------------
|
-------------------------
|
||||||
@ -461,7 +1242,6 @@ includes some new functionality that missed the RC1 cut off deadline.
|
|||||||
choice.
|
choice.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Release: WSJT-X 2.3.0-rc1
|
Release: WSJT-X 2.3.0-rc1
|
||||||
Sept 28, 2020
|
Sept 28, 2020
|
||||||
-------------------------
|
-------------------------
|
||||||
@ -894,6 +1674,7 @@ prior v2.1.0 release.
|
|||||||
- Fix a production issue with the macOS tool chain that generated
|
- Fix a production issue with the macOS tool chain that generated
|
||||||
broken executables.
|
broken executables.
|
||||||
|
|
||||||
|
|
||||||
Release: WSJT-X 2.1
|
Release: WSJT-X 2.1
|
||||||
July 15, 2019
|
July 15, 2019
|
||||||
-------------------
|
-------------------
|
||||||
@ -915,6 +1696,7 @@ There are numerous minor enhancements and bug fixes.
|
|||||||
We now provide a separate installation package for 64-bit Windows 7
|
We now provide a separate installation package for 64-bit Windows 7
|
||||||
and later, with significant improvements in decoding speed.
|
and later, with significant improvements in decoding speed.
|
||||||
|
|
||||||
|
|
||||||
Release: WSJT-X 2.1.0-rc7
|
Release: WSJT-X 2.1.0-rc7
|
||||||
June 3, 2019
|
June 3, 2019
|
||||||
-------------------------
|
-------------------------
|
||||||
@ -1045,6 +1827,7 @@ feedback to guide future development.
|
|||||||
*Note* this release is not for general public release and we request
|
*Note* this release is not for general public release and we request
|
||||||
that it is not distributed.
|
that it is not distributed.
|
||||||
|
|
||||||
|
|
||||||
Release: WSJT-X 2.1.0-rc1
|
Release: WSJT-X 2.1.0-rc1
|
||||||
March 25, 2019
|
March 25, 2019
|
||||||
-------------------------
|
-------------------------
|
||||||
@ -1178,6 +1961,7 @@ Some details of changes since WSJT-X-rc5 include the following:
|
|||||||
- Update the WSJT-X User Guide to v2.0 (more to come...)
|
- Update the WSJT-X User Guide to v2.0 (more to come...)
|
||||||
- Update cty.dat
|
- Update cty.dat
|
||||||
|
|
||||||
|
|
||||||
Release: WSJT-X 2.0-rc5
|
Release: WSJT-X 2.0-rc5
|
||||||
November 26, 2018
|
November 26, 2018
|
||||||
-----------------------
|
-----------------------
|
||||||
@ -1407,7 +2191,6 @@ Changes from WSJT-X Version 1.9.0-rc2 include the following:
|
|||||||
to be CAT controlled by WSJT-X.
|
to be CAT controlled by WSJT-X.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Release: WSJT-X Version 1.9.0-rc2
|
Release: WSJT-X Version 1.9.0-rc2
|
||||||
February 26, 2018
|
February 26, 2018
|
||||||
---------------------------------
|
---------------------------------
|
||||||
@ -1577,8 +2360,6 @@ message from populating the Tx message boxes.
|
|||||||
- Fix an issue with editing IARU regions in the working frequencies table.
|
- Fix an issue with editing IARU regions in the working frequencies table.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Release: WSJT-X Version 1.8.0-rc2
|
Release: WSJT-X Version 1.8.0-rc2
|
||||||
September 2, 2017
|
September 2, 2017
|
||||||
---------------------------------
|
---------------------------------
|
||||||
|
@ -385,7 +385,7 @@ auto DXLabSuiteCommanderTransceiver::get_mode () -> MODE
|
|||||||
|
|
||||||
void DXLabSuiteCommanderTransceiver::simple_command (QString const& cmd)
|
void DXLabSuiteCommanderTransceiver::simple_command (QString const& cmd)
|
||||||
{
|
{
|
||||||
Q_ASSERT (commander_);
|
if (!commander_) return;
|
||||||
|
|
||||||
CAT_TRACE (cmd);
|
CAT_TRACE (cmd);
|
||||||
|
|
||||||
@ -398,7 +398,7 @@ void DXLabSuiteCommanderTransceiver::simple_command (QString const& cmd)
|
|||||||
|
|
||||||
QString DXLabSuiteCommanderTransceiver::command_with_reply (QString const& cmd)
|
QString DXLabSuiteCommanderTransceiver::command_with_reply (QString const& cmd)
|
||||||
{
|
{
|
||||||
Q_ASSERT (commander_);
|
if (!commander_) return QString {};
|
||||||
|
|
||||||
if (!write_to_port (cmd))
|
if (!write_to_port (cmd))
|
||||||
{
|
{
|
||||||
@ -437,16 +437,15 @@ QString DXLabSuiteCommanderTransceiver::command_with_reply (QString const& cmd)
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
auto result = commander_->readAll ();
|
QString result = commander_->readAll ();
|
||||||
// qDebug () << "result: " << result;
|
|
||||||
// for (int i = 0; i < result.size (); ++i)
|
|
||||||
// {
|
|
||||||
// qDebug () << i << ":" << hex << int (result[i]);
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
if (result != NULL)
|
||||||
|
{
|
||||||
CAT_TRACE (cmd << " -> " << QString {result});
|
CAT_TRACE (cmd << " -> " << QString {result});
|
||||||
return result; // converting raw UTF-8 bytes to QString
|
return result; // converting raw UTF-8 bytes to QString
|
||||||
}
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
bool DXLabSuiteCommanderTransceiver::write_to_port (QString const& s)
|
bool DXLabSuiteCommanderTransceiver::write_to_port (QString const& s)
|
||||||
{
|
{
|
||||||
|
@ -18,7 +18,7 @@ namespace
|
|||||||
|
|
||||||
// some commands require a settling time, particularly "RX A" and
|
// some commands require a settling time, particularly "RX A" and
|
||||||
// "RX B" on the Yaesu FTdx3000.
|
// "RX B" on the Yaesu FTdx3000.
|
||||||
int constexpr yaesu_delay {250};
|
int constexpr yaesu_delay {350};
|
||||||
}
|
}
|
||||||
|
|
||||||
#include "moc_HRDTransceiver.cpp"
|
#include "moc_HRDTransceiver.cpp"
|
||||||
@ -1005,7 +1005,7 @@ void HRDTransceiver::do_poll ()
|
|||||||
|
|
||||||
QString HRDTransceiver::send_command (QString const& cmd, bool prepend_context, bool recurse)
|
QString HRDTransceiver::send_command (QString const& cmd, bool prepend_context, bool recurse)
|
||||||
{
|
{
|
||||||
Q_ASSERT (hrd_);
|
if (!hrd_) return QString {};
|
||||||
|
|
||||||
QString result;
|
QString result;
|
||||||
|
|
||||||
@ -1124,7 +1124,7 @@ QByteArray HRDTransceiver::read_reply (QString const& cmd)
|
|||||||
{
|
{
|
||||||
// waitForReadReady appears to be occasionally unreliable on Windows
|
// waitForReadReady appears to be occasionally unreliable on Windows
|
||||||
// timing out when data is waiting so retry a few times
|
// timing out when data is waiting so retry a few times
|
||||||
unsigned retries {3};
|
unsigned retries {30};
|
||||||
bool replied {false};
|
bool replied {false};
|
||||||
while (!replied && retries--)
|
while (!replied && retries--)
|
||||||
{
|
{
|
||||||
|
@ -659,7 +659,7 @@ int HamlibTransceiver::do_start ()
|
|||||||
rmode_t mb;
|
rmode_t mb;
|
||||||
pbwidth_t w {RIG_PASSBAND_NORMAL};
|
pbwidth_t w {RIG_PASSBAND_NORMAL};
|
||||||
pbwidth_t wb;
|
pbwidth_t wb;
|
||||||
if (m_->freq_query_works_
|
if (m_->freq_query_works_ && m_->mode_query_works_
|
||||||
&& (!m_->get_vfo_works_ || !rig_get_function_ptr (m_->model_, RIG_FUNCTION_GET_VFO)))
|
&& (!m_->get_vfo_works_ || !rig_get_function_ptr (m_->model_, RIG_FUNCTION_GET_VFO)))
|
||||||
{
|
{
|
||||||
// Icom have deficient CAT protocol with no way of reading which
|
// Icom have deficient CAT protocol with no way of reading which
|
||||||
@ -760,7 +760,7 @@ int HamlibTransceiver::do_start ()
|
|||||||
|
|
||||||
m_->reversed_ = RIG_VFO_B == v;
|
m_->reversed_ = RIG_VFO_B == v;
|
||||||
|
|
||||||
if (m_->mode_query_works_ && !(rig_get_caps_int (m_->model_, RIG_CAPS_TARGETABLE_VFO) & (RIG_TARGETABLE_MODE | RIG_TARGETABLE_PURE)))
|
if (m_->mode_query_works_ && !(rig_get_caps_int (m_->model_, RIG_CAPS_TARGETABLE_VFO) & RIG_TARGETABLE_MODE))
|
||||||
{
|
{
|
||||||
if (RIG_OK == rig_get_mode (m_->rig_.data (), RIG_VFO_CURR, &m, &w))
|
if (RIG_OK == rig_get_mode (m_->rig_.data (), RIG_VFO_CURR, &m, &w))
|
||||||
{
|
{
|
||||||
@ -882,7 +882,12 @@ void HamlibTransceiver::do_frequency (Frequency f, MODE m, bool no_ignore)
|
|||||||
{
|
{
|
||||||
// for the 1st time as a band change may cause a recalled mode to be
|
// for the 1st time as a band change may cause a recalled mode to be
|
||||||
// set
|
// set
|
||||||
m_->error_check (rig_set_freq (m_->rig_.data (), RIG_VFO_CURR, f), tr ("setting frequency"));
|
vfo_t target_vfo = RIG_VFO_CURR;
|
||||||
|
if (!(m_->rig_->state.vfo_list & RIG_VFO_B))
|
||||||
|
{
|
||||||
|
target_vfo = RIG_VFO_MAIN; // no VFO A/B so force to Rx on MAIN
|
||||||
|
}
|
||||||
|
m_->error_check (rig_set_freq (m_->rig_.data (), target_vfo, f), tr ("setting frequency"));
|
||||||
update_rx_frequency (f);
|
update_rx_frequency (f);
|
||||||
|
|
||||||
if (m_->mode_query_works_ && UNK != m)
|
if (m_->mode_query_works_ && UNK != m)
|
||||||
@ -890,13 +895,13 @@ void HamlibTransceiver::do_frequency (Frequency f, MODE m, bool no_ignore)
|
|||||||
rmode_t current_mode;
|
rmode_t current_mode;
|
||||||
pbwidth_t current_width;
|
pbwidth_t current_width;
|
||||||
auto new_mode = m_->map_mode (m);
|
auto new_mode = m_->map_mode (m);
|
||||||
m_->error_check (rig_get_mode (m_->rig_.data (), RIG_VFO_CURR, ¤t_mode, ¤t_width), tr ("getting current VFO mode"));
|
m_->error_check (rig_get_mode (m_->rig_.data (), target_vfo, ¤t_mode, ¤t_width), tr ("getting current VFO mode"));
|
||||||
CAT_TRACE ("rig_get_mode mode=" << rig_strrmode (current_mode) << " bw=" << current_width);
|
CAT_TRACE ("rig_get_mode mode=" << rig_strrmode (current_mode) << " bw=" << current_width);
|
||||||
|
|
||||||
if (new_mode != current_mode)
|
if (new_mode != current_mode)
|
||||||
{
|
{
|
||||||
CAT_TRACE ("rig_set_mode mode=" << rig_strrmode (new_mode));
|
CAT_TRACE ("rig_set_mode mode=" << rig_strrmode (new_mode));
|
||||||
m_->error_check (rig_set_mode (m_->rig_.data (), RIG_VFO_CURR, new_mode, RIG_PASSBAND_NOCHANGE), tr ("setting current VFO mode"));
|
m_->error_check (rig_set_mode (m_->rig_.data (), target_vfo, new_mode, RIG_PASSBAND_NOCHANGE), tr ("setting current VFO mode"));
|
||||||
|
|
||||||
// for the 2nd time because a mode change may have caused a
|
// for the 2nd time because a mode change may have caused a
|
||||||
// frequency change
|
// frequency change
|
||||||
@ -905,8 +910,10 @@ void HamlibTransceiver::do_frequency (Frequency f, MODE m, bool no_ignore)
|
|||||||
// for the second time because some rigs change mode according
|
// for the second time because some rigs change mode according
|
||||||
// to frequency such as the TS-2000 auto mode setting
|
// to frequency such as the TS-2000 auto mode setting
|
||||||
CAT_TRACE ("rig_set_mode mode=" << rig_strrmode (new_mode));
|
CAT_TRACE ("rig_set_mode mode=" << rig_strrmode (new_mode));
|
||||||
m_->error_check (rig_set_mode (m_->rig_.data (), RIG_VFO_CURR, new_mode, RIG_PASSBAND_NOCHANGE), tr ("setting current VFO mode"));
|
m_->error_check (rig_set_mode (m_->rig_.data (), target_vfo, new_mode, RIG_PASSBAND_NOCHANGE), tr ("setting current VFO mode"));
|
||||||
}
|
}
|
||||||
|
// set mode on VFOB too if we are in split
|
||||||
|
if (state ().split()) rig_set_mode (m_->rig_.data (), RIG_VFO_B, new_mode, RIG_PASSBAND_NOCHANGE), tr ("setting VFOB mode");
|
||||||
update_mode (m);
|
update_mode (m);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1037,16 +1044,22 @@ void HamlibTransceiver::do_mode (MODE mode)
|
|||||||
pbwidth_t current_width;
|
pbwidth_t current_width;
|
||||||
auto new_mode = m_->map_mode (mode);
|
auto new_mode = m_->map_mode (mode);
|
||||||
|
|
||||||
|
vfo_t target_vfo = RIG_VFO_CURR;
|
||||||
|
if (!(m_->rig_->state.vfo_list & RIG_VFO_B))
|
||||||
|
{
|
||||||
|
target_vfo = RIG_VFO_MAIN; // no VFO A/B so force to Rx on MAIN
|
||||||
|
}
|
||||||
|
|
||||||
// only change when receiving or simplex if direct VFO addressing unavailable
|
// only change when receiving or simplex if direct VFO addressing unavailable
|
||||||
if (!(state ().ptt () && state ().split () && m_->one_VFO_))
|
if (!(state ().ptt () && state ().split () && m_->one_VFO_))
|
||||||
{
|
{
|
||||||
m_->error_check (rig_get_mode (m_->rig_.data (), RIG_VFO_CURR, ¤t_mode, ¤t_width), tr ("getting current VFO mode"));
|
m_->error_check (rig_get_mode (m_->rig_.data (), target_vfo, ¤t_mode, ¤t_width), tr ("getting current VFO mode"));
|
||||||
CAT_TRACE ("rig_get_mode mode=" << rig_strrmode (current_mode) << " bw=" << current_width);
|
CAT_TRACE ("rig_get_mode mode=" << rig_strrmode (current_mode) << " bw=" << current_width);
|
||||||
|
|
||||||
if (new_mode != current_mode)
|
if (new_mode != current_mode)
|
||||||
{
|
{
|
||||||
CAT_TRACE ("rig_set_mode mode=" << rig_strrmode (new_mode));
|
CAT_TRACE ("rig_set_mode mode=" << rig_strrmode (new_mode));
|
||||||
m_->error_check (rig_set_mode (m_->rig_.data (), RIG_VFO_CURR, new_mode, RIG_PASSBAND_NOCHANGE), tr ("setting current VFO mode"));
|
m_->error_check (rig_set_mode (m_->rig_.data (), target_vfo, new_mode, RIG_PASSBAND_NOCHANGE), tr ("setting current VFO mode"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1128,13 +1141,13 @@ void HamlibTransceiver::do_poll ()
|
|||||||
{
|
{
|
||||||
m_->error_check (rig_get_freq (m_->rig_.data (), RIG_VFO_CURR, &f), tr ("getting current VFO frequency"));
|
m_->error_check (rig_get_freq (m_->rig_.data (), RIG_VFO_CURR, &f), tr ("getting current VFO frequency"));
|
||||||
f = std::round (f);
|
f = std::round (f);
|
||||||
CAT_TRACE ("rig_get_freq frequency=" << f);
|
CAT_TRACE ("rig_get_freq frequency=" << Radio::frequency (f));
|
||||||
update_rx_frequency (f);
|
update_rx_frequency (f);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((WSJT_RIG_NONE_CAN_SPLIT || !m_->is_dummy_)
|
if ((WSJT_RIG_NONE_CAN_SPLIT || !m_->is_dummy_)
|
||||||
&& state ().split ()
|
&& state ().split ()
|
||||||
&& (rig_get_caps_int (m_->model_, RIG_CAPS_TARGETABLE_VFO) & (RIG_TARGETABLE_FREQ | RIG_TARGETABLE_PURE))
|
&& (rig_get_caps_int (m_->model_, RIG_CAPS_TARGETABLE_VFO) & RIG_TARGETABLE_FREQ)
|
||||||
&& !m_->one_VFO_)
|
&& !m_->one_VFO_)
|
||||||
{
|
{
|
||||||
// only read "other" VFO if in split, this allows rigs like
|
// only read "other" VFO if in split, this allows rigs like
|
||||||
|
@ -96,11 +96,11 @@ void OmniRigTransceiver::register_transceivers (logger_type *,
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
OmniRigTransceiver::OmniRigTransceiver (logger_type * logger,
|
OmniRigTransceiver::OmniRigTransceiver (logger_type * the_logger,
|
||||||
std::unique_ptr<TransceiverBase> wrapped,
|
std::unique_ptr<TransceiverBase> wrapped,
|
||||||
RigNumber n, TransceiverFactory::PTTMethod ptt_type,
|
RigNumber n, TransceiverFactory::PTTMethod ptt_type,
|
||||||
QString const& ptt_port, QObject * parent)
|
QString const& ptt_port, QObject * parent)
|
||||||
: TransceiverBase {logger, parent}
|
: TransceiverBase {the_logger, parent}
|
||||||
, wrapped_ {std::move (wrapped)}
|
, wrapped_ {std::move (wrapped)}
|
||||||
, use_for_ptt_ {TransceiverFactory::PTT_method_CAT == ptt_type || ("CAT" == ptt_port && (TransceiverFactory::PTT_method_RTS == ptt_type || TransceiverFactory::PTT_method_DTR == ptt_type))}
|
, use_for_ptt_ {TransceiverFactory::PTT_method_CAT == ptt_type || ("CAT" == ptt_port && (TransceiverFactory::PTT_method_RTS == ptt_type || TransceiverFactory::PTT_method_DTR == ptt_type))}
|
||||||
, ptt_type_ {ptt_type}
|
, ptt_type_ {ptt_type}
|
||||||
@ -111,26 +111,20 @@ OmniRigTransceiver::OmniRigTransceiver (logger_type * logger,
|
|||||||
, reversed_ {false}
|
, reversed_ {false}
|
||||||
{
|
{
|
||||||
CoInitializeEx (nullptr, 0 /*COINIT_APARTMENTTHREADED*/); // required because Qt only does this for GUI thread
|
CoInitializeEx (nullptr, 0 /*COINIT_APARTMENTTHREADED*/); // required because Qt only does this for GUI thread
|
||||||
|
CAT_TRACE ("constructed");
|
||||||
}
|
}
|
||||||
|
|
||||||
OmniRigTransceiver::~OmniRigTransceiver ()
|
OmniRigTransceiver::~OmniRigTransceiver ()
|
||||||
{
|
{
|
||||||
|
CAT_TRACE ("destroying");
|
||||||
CoUninitialize ();
|
CoUninitialize ();
|
||||||
}
|
}
|
||||||
|
|
||||||
// returns false on time out
|
|
||||||
bool OmniRigTransceiver::await_notification_with_timeout (int timeout)
|
|
||||||
{
|
|
||||||
QEventLoop el;
|
|
||||||
connect (this, &OmniRigTransceiver::notified, &el, [&el] () {el.exit (1);});
|
|
||||||
QTimer::singleShot (timeout, Qt::CoarseTimer, &el, [&el] () {el.exit (0);});
|
|
||||||
return 1 == el.exec (); // wait for notify or timer
|
|
||||||
}
|
|
||||||
|
|
||||||
int OmniRigTransceiver::do_start ()
|
int OmniRigTransceiver::do_start ()
|
||||||
{
|
{
|
||||||
CAT_TRACE ("starting");
|
CAT_TRACE ("starting");
|
||||||
|
try
|
||||||
|
{
|
||||||
if (wrapped_) wrapped_->start (0);
|
if (wrapped_) wrapped_->start (0);
|
||||||
|
|
||||||
omni_rig_.reset (new OmniRig::OmniRigX {this});
|
omni_rig_.reset (new OmniRig::OmniRigX {this});
|
||||||
@ -152,8 +146,10 @@ int OmniRigTransceiver::do_start ()
|
|||||||
, SIGNAL (CustomReply (int, QVariant const&, QVariant const&))
|
, SIGNAL (CustomReply (int, QVariant const&, QVariant const&))
|
||||||
, this, SLOT (handle_custom_reply (int, QVariant const&, QVariant const&)));
|
, this, SLOT (handle_custom_reply (int, QVariant const&, QVariant const&)));
|
||||||
|
|
||||||
CAT_INFO ("OmniRig s/w version: " << omni_rig_->SoftwareVersion ()
|
CAT_INFO ("OmniRig s/w version: " << static_cast<quint16> (omni_rig_->SoftwareVersion () >> 16)
|
||||||
<< "i/f version: " << omni_rig_->InterfaceVersion ());
|
<< '.' << static_cast<quint16> (omni_rig_->SoftwareVersion () & 0xffff)
|
||||||
|
<< " i/f version: " << static_cast<int> (omni_rig_->InterfaceVersion () >> 8 & 0xff)
|
||||||
|
<< '.' << static_cast<int> (omni_rig_->InterfaceVersion () && 0xff));
|
||||||
|
|
||||||
// fetch the interface of the RigX CoClass and instantiate a proxy object
|
// fetch the interface of the RigX CoClass and instantiate a proxy object
|
||||||
switch (rig_number_)
|
switch (rig_number_)
|
||||||
@ -168,12 +164,26 @@ int OmniRigTransceiver::do_start ()
|
|||||||
// COM/OLE exceptions get signaled
|
// COM/OLE exceptions get signaled
|
||||||
connect (&*rig_, SIGNAL (exception (int, QString, QString, QString)), this, SLOT (handle_COM_exception (int, QString, QString, QString)));
|
connect (&*rig_, SIGNAL (exception (int, QString, QString, QString)), this, SLOT (handle_COM_exception (int, QString, QString, QString)));
|
||||||
|
|
||||||
offline_timer_.reset (new QTimer); // instantiate here as
|
offline_timer_.reset (new QTimer); // instantiate here as constructor runs in wrong thread
|
||||||
// constructor runs in wrong
|
|
||||||
// thread
|
|
||||||
offline_timer_->setSingleShot (true);
|
offline_timer_->setSingleShot (true);
|
||||||
connect (offline_timer_.data (), &QTimer::timeout, [this] () {offline ("Rig went offline");});
|
connect (offline_timer_.data (), &QTimer::timeout, [this] () {offline ("Rig went offline");});
|
||||||
|
|
||||||
|
for (int i = 0; i < 5; ++i)
|
||||||
|
{
|
||||||
|
// leave some time for Omni-Rig to do its first poll
|
||||||
|
QThread::msleep (250);
|
||||||
|
if (OmniRig::ST_ONLINE == rig_->Status ())
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (OmniRig::ST_ONLINE != rig_->Status ())
|
||||||
|
{
|
||||||
|
CAT_ERROR ("rig not online");
|
||||||
|
throw_qstring ("OmniRig: " + rig_->StatusStr ());
|
||||||
|
}
|
||||||
|
|
||||||
if (use_for_ptt_ && (TransceiverFactory::PTT_method_DTR == ptt_type_ || TransceiverFactory::PTT_method_RTS == ptt_type_))
|
if (use_for_ptt_ && (TransceiverFactory::PTT_method_DTR == ptt_type_ || TransceiverFactory::PTT_method_RTS == ptt_type_))
|
||||||
{
|
{
|
||||||
// fetch the interface for the serial port if we need it for PTT
|
// fetch the interface for the serial port if we need it for PTT
|
||||||
@ -213,27 +223,7 @@ int OmniRigTransceiver::do_start ()
|
|||||||
.arg (readable_params_, 8, 16, QChar ('0'))
|
.arg (readable_params_, 8, 16, QChar ('0'))
|
||||||
.arg (writable_params_, 8, 16, QChar ('0'))
|
.arg (writable_params_, 8, 16, QChar ('0'))
|
||||||
.arg (rig_number_));
|
.arg (rig_number_));
|
||||||
for (int i = 0; i < 5; ++i)
|
update_rx_frequency (rig_->GetRxFrequency ());
|
||||||
{
|
|
||||||
if (OmniRig::ST_ONLINE == rig_->Status ())
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
await_notification_with_timeout (1000);
|
|
||||||
}
|
|
||||||
if (OmniRig::ST_ONLINE != rig_->Status ())
|
|
||||||
{
|
|
||||||
throw_qstring ("OmniRig: " + rig_->StatusStr ());
|
|
||||||
}
|
|
||||||
QThread::msleep (500); // leave some time for Omni-Rig to get
|
|
||||||
// the rig status for the 1st. time
|
|
||||||
auto f = rig_->GetRxFrequency ();
|
|
||||||
for (int i = 0; (f == 0) && (i < 5); ++i)
|
|
||||||
{
|
|
||||||
await_notification_with_timeout (1000);
|
|
||||||
f = rig_->GetRxFrequency ();
|
|
||||||
}
|
|
||||||
update_rx_frequency (f);
|
|
||||||
int resolution {0};
|
int resolution {0};
|
||||||
if (OmniRig::PM_UNKNOWN == rig_->Vfo ()
|
if (OmniRig::PM_UNKNOWN == rig_->Vfo ()
|
||||||
&& (writable_params_ & (OmniRig::PM_VFOA | OmniRig::PM_VFOB))
|
&& (writable_params_ & (OmniRig::PM_VFOA | OmniRig::PM_VFOB))
|
||||||
@ -243,7 +233,7 @@ int OmniRigTransceiver::do_start ()
|
|||||||
// can't query VFO but can set explicitly
|
// can't query VFO but can set explicitly
|
||||||
rig_->SetVfo (OmniRig::PM_VFOA);
|
rig_->SetVfo (OmniRig::PM_VFOA);
|
||||||
}
|
}
|
||||||
f = state ().frequency ();
|
auto f = state ().frequency ();
|
||||||
if (f % 10) return resolution; // 1Hz resolution
|
if (f % 10) return resolution; // 1Hz resolution
|
||||||
auto test_frequency = f - f % 100 + 55;
|
auto test_frequency = f - f % 100 + 55;
|
||||||
if (OmniRig::PM_FREQ & writable_params_)
|
if (OmniRig::PM_FREQ & writable_params_)
|
||||||
@ -262,11 +252,6 @@ int OmniRigTransceiver::do_start ()
|
|||||||
{
|
{
|
||||||
throw_qstring (tr ("OmniRig: don't know how to set rig frequency"));
|
throw_qstring (tr ("OmniRig: don't know how to set rig frequency"));
|
||||||
}
|
}
|
||||||
if (!await_notification_with_timeout (1000))
|
|
||||||
{
|
|
||||||
CAT_ERROR ("do_start 1: wait timed out");
|
|
||||||
throw_qstring (tr ("OmniRig: timeout waiting for update from rig"));
|
|
||||||
}
|
|
||||||
switch (rig_->GetRxFrequency () - test_frequency)
|
switch (rig_->GetRxFrequency () - test_frequency)
|
||||||
{
|
{
|
||||||
case -5: resolution = -1; break; // 10Hz truncated
|
case -5: resolution = -1; break; // 10Hz truncated
|
||||||
@ -290,34 +275,51 @@ int OmniRigTransceiver::do_start ()
|
|||||||
{
|
{
|
||||||
rig_->SetFreqA (test_frequency);
|
rig_->SetFreqA (test_frequency);
|
||||||
}
|
}
|
||||||
if (!await_notification_with_timeout (2000))
|
|
||||||
{
|
|
||||||
CAT_ERROR ("do_start 2: wait timed out");
|
|
||||||
throw_qstring (tr ("OmniRig: timeout waiting for update from rig"));
|
|
||||||
}
|
|
||||||
if (9 == rig_->GetRxFrequency () - test_frequency)
|
if (9 == rig_->GetRxFrequency () - test_frequency)
|
||||||
{
|
{
|
||||||
resolution = 2; // 20Hz rounded
|
resolution = 2; // 20Hz rounded
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// For OmniRig v1.19 or later we need a delay between GetRxFrequency () and SetFreq (f),
|
||||||
|
// otherwise rig QRG stays at f+55 Hz. 200 ms should do job for all modern transceivers.
|
||||||
|
// However, with very slow rigs, QRG may still stay at f+55 Hz. Such rigs should use v1.18.
|
||||||
|
// Due to the asynchronous nature of Omnirig commands, a better solution would be to implement
|
||||||
|
// an event handler for OmniRig's OnParamChange event and read the frequency inside that handler.
|
||||||
|
|
||||||
if (OmniRig::PM_FREQ & writable_params_)
|
if (OmniRig::PM_FREQ & writable_params_)
|
||||||
{
|
{
|
||||||
|
QTimer::singleShot (200, [=] {
|
||||||
rig_->SetFreq (f);
|
rig_->SetFreq (f);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
else if (reversed_ && (OmniRig::PM_FREQB & writable_params_))
|
else if (reversed_ && (OmniRig::PM_FREQB & writable_params_))
|
||||||
{
|
{
|
||||||
|
QTimer::singleShot (200, [=] {
|
||||||
rig_->SetFreqB (f);
|
rig_->SetFreqB (f);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
else if (!reversed_ && (OmniRig::PM_FREQA & writable_params_))
|
else if (!reversed_ && (OmniRig::PM_FREQA & writable_params_))
|
||||||
{
|
{
|
||||||
|
QTimer::singleShot (200, [=] {
|
||||||
rig_->SetFreqA (f);
|
rig_->SetFreqA (f);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
update_rx_frequency (f);
|
update_rx_frequency (f);
|
||||||
|
CAT_TRACE ("started");
|
||||||
|
|
||||||
return resolution;
|
return resolution;
|
||||||
}
|
}
|
||||||
|
catch (...)
|
||||||
|
{
|
||||||
|
CAT_TRACE ("start threw exception");
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void OmniRigTransceiver::do_stop ()
|
void OmniRigTransceiver::do_stop ()
|
||||||
{
|
{
|
||||||
|
CAT_TRACE ("stopping");
|
||||||
QThread::msleep (200); // leave some time for pending
|
QThread::msleep (200); // leave some time for pending
|
||||||
// commands at the server end
|
// commands at the server end
|
||||||
|
|
||||||
@ -337,6 +339,7 @@ void OmniRigTransceiver::do_stop ()
|
|||||||
{
|
{
|
||||||
rig_->clear ();
|
rig_->clear ();
|
||||||
rig_.reset ();
|
rig_.reset ();
|
||||||
|
CAT_TRACE ("rig_ reset");
|
||||||
}
|
}
|
||||||
omni_rig_->clear ();
|
omni_rig_->clear ();
|
||||||
omni_rig_.reset ();
|
omni_rig_.reset ();
|
||||||
@ -396,7 +399,6 @@ void OmniRigTransceiver::handle_status_change (int rig_number)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
offline_timer_->stop (); // good to go again
|
offline_timer_->stop (); // good to go again
|
||||||
Q_EMIT notified ();
|
|
||||||
}
|
}
|
||||||
// else
|
// else
|
||||||
// {
|
// {
|
||||||
@ -467,7 +469,6 @@ void OmniRigTransceiver::handle_params_change (int rig_number, int params)
|
|||||||
|
|
||||||
if (params & OmniRig::PM_FREQ)
|
if (params & OmniRig::PM_FREQ)
|
||||||
{
|
{
|
||||||
CAT_TRACE ("FREQ");
|
|
||||||
need_frequency = true;
|
need_frequency = true;
|
||||||
}
|
}
|
||||||
if (params & OmniRig::PM_FREQA)
|
if (params & OmniRig::PM_FREQA)
|
||||||
@ -653,7 +654,6 @@ void OmniRigTransceiver::handle_params_change (int rig_number, int params)
|
|||||||
}
|
}
|
||||||
CAT_TRACE ("OmniRig params change: state after:" << state ());
|
CAT_TRACE ("OmniRig params change: state after:" << state ());
|
||||||
}
|
}
|
||||||
Q_EMIT notified ();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void OmniRigTransceiver::handle_custom_reply (int rig_number, QVariant const& command, QVariant const& reply)
|
void OmniRigTransceiver::handle_custom_reply (int rig_number, QVariant const& command, QVariant const& reply)
|
||||||
@ -710,7 +710,7 @@ void OmniRigTransceiver::do_ptt (bool on)
|
|||||||
|
|
||||||
void OmniRigTransceiver::do_frequency (Frequency f, MODE m, bool /*no_ignore*/)
|
void OmniRigTransceiver::do_frequency (Frequency f, MODE m, bool /*no_ignore*/)
|
||||||
{
|
{
|
||||||
CAT_TRACE (f << state ());
|
CAT_TRACE (f << ' ' << state ());
|
||||||
if (!rig_ || rig_->isNull ()) return;
|
if (!rig_ || rig_->isNull ()) return;
|
||||||
if (UNK != m)
|
if (UNK != m)
|
||||||
{
|
{
|
||||||
@ -739,7 +739,7 @@ void OmniRigTransceiver::do_frequency (Frequency f, MODE m, bool /*no_ignore*/)
|
|||||||
|
|
||||||
void OmniRigTransceiver::do_tx_frequency (Frequency tx, MODE m, bool /*no_ignore*/)
|
void OmniRigTransceiver::do_tx_frequency (Frequency tx, MODE m, bool /*no_ignore*/)
|
||||||
{
|
{
|
||||||
CAT_TRACE (tx << state ());
|
CAT_TRACE (tx << ' ' << state ());
|
||||||
if (!rig_ || rig_->isNull ()) return;
|
if (!rig_ || rig_->isNull ()) return;
|
||||||
bool split {tx != 0};
|
bool split {tx != 0};
|
||||||
if (split)
|
if (split)
|
||||||
@ -804,7 +804,7 @@ void OmniRigTransceiver::do_tx_frequency (Frequency tx, MODE m, bool /*no_ignore
|
|||||||
|
|
||||||
void OmniRigTransceiver::do_mode (MODE mode)
|
void OmniRigTransceiver::do_mode (MODE mode)
|
||||||
{
|
{
|
||||||
CAT_TRACE (mode << state ());
|
CAT_TRACE (mode << ' ' << state ());
|
||||||
if (!rig_ || rig_->isNull ()) return;
|
if (!rig_ || rig_->isNull ()) return;
|
||||||
// TODO: G4WJS OmniRig doesn't seem to have any capability of tracking/setting VFO B mode
|
// TODO: G4WJS OmniRig doesn't seem to have any capability of tracking/setting VFO B mode
|
||||||
auto mapped = map_mode (mode);
|
auto mapped = map_mode (mode);
|
||||||
|
@ -44,9 +44,6 @@ public:
|
|||||||
void do_ptt (bool on) override;
|
void do_ptt (bool on) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool await_notification_with_timeout (int timeout);
|
|
||||||
Q_SIGNAL void notified () const;
|
|
||||||
// Q_SLOT void timeout_check ();
|
|
||||||
Q_SLOT void handle_COM_exception (int, QString, QString, QString);
|
Q_SLOT void handle_COM_exception (int, QString, QString, QString);
|
||||||
Q_SLOT void handle_visible_change ();
|
Q_SLOT void handle_visible_change ();
|
||||||
Q_SLOT void handle_rig_type_change (int rig_number);
|
Q_SLOT void handle_rig_type_change (int rig_number);
|
||||||
|
@ -117,6 +117,10 @@ void PollingTransceiver::do_post_ptt (bool p)
|
|||||||
retries_ = polls_to_stabilize;
|
retries_ = polls_to_stabilize;
|
||||||
//retries_ = 0; // fast feedback on PTT
|
//retries_ = 0; // fast feedback on PTT
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
next_state_.ptt(p); // ensure this is initialized
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool PollingTransceiver::do_pre_update ()
|
bool PollingTransceiver::do_pre_update ()
|
||||||
|
@ -23,6 +23,12 @@ QDebug operator << (QDebug d, Transceiver::TransceiverState const& s)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
std::ostream& operator << (std::ostream& os, Transceiver::MODE m)
|
||||||
|
{
|
||||||
|
auto const& mo = Transceiver::staticMetaObject; \
|
||||||
|
return os << mo.enumerator (mo.indexOfEnumerator ("MODE")).valueToKey (static_cast<int> (m)); \
|
||||||
|
}
|
||||||
|
|
||||||
std::ostream& operator << (std::ostream& os, Transceiver::TransceiverState const& s)
|
std::ostream& operator << (std::ostream& os, Transceiver::TransceiverState const& s)
|
||||||
{
|
{
|
||||||
return os
|
return os
|
||||||
|
@ -169,6 +169,7 @@ Q_DECLARE_METATYPE (Transceiver::TransceiverState);
|
|||||||
QDebug operator << (QDebug, Transceiver::TransceiverState const&);
|
QDebug operator << (QDebug, Transceiver::TransceiverState const&);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
std::ostream& operator << (std::ostream&, Transceiver::MODE);
|
||||||
std::ostream& operator << (std::ostream&, Transceiver::TransceiverState const&);
|
std::ostream& operator << (std::ostream&, Transceiver::TransceiverState const&);
|
||||||
|
|
||||||
ENUM_QDATASTREAM_OPS_DECL (Transceiver, MODE);
|
ENUM_QDATASTREAM_OPS_DECL (Transceiver, MODE);
|
||||||
|
@ -16,6 +16,8 @@ namespace
|
|||||||
|
|
||||||
void TransceiverBase::start (unsigned sequence_number) noexcept
|
void TransceiverBase::start (unsigned sequence_number) noexcept
|
||||||
{
|
{
|
||||||
|
CAT_TRACE ("#: " << sequence_number);
|
||||||
|
|
||||||
QString message;
|
QString message;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -26,10 +28,12 @@ void TransceiverBase::start (unsigned sequence_number) noexcept
|
|||||||
}
|
}
|
||||||
catch (std::exception const& e)
|
catch (std::exception const& e)
|
||||||
{
|
{
|
||||||
|
CAT_TRACE ("#: " << sequence_number << " what: " << e.what ());
|
||||||
message = e.what ();
|
message = e.what ();
|
||||||
}
|
}
|
||||||
catch (...)
|
catch (...)
|
||||||
{
|
{
|
||||||
|
CAT_TRACE ("#: " << sequence_number);
|
||||||
message = unexpected;
|
message = unexpected;
|
||||||
}
|
}
|
||||||
if (!message.isEmpty ())
|
if (!message.isEmpty ())
|
||||||
@ -41,7 +45,7 @@ void TransceiverBase::start (unsigned sequence_number) noexcept
|
|||||||
void TransceiverBase::set (TransceiverState const& s,
|
void TransceiverBase::set (TransceiverState const& s,
|
||||||
unsigned sequence_number) noexcept
|
unsigned sequence_number) noexcept
|
||||||
{
|
{
|
||||||
CAT_TRACE ("#: " << sequence_number << " " << s);
|
CAT_TRACE ("#: " << s);
|
||||||
|
|
||||||
QString message;
|
QString message;
|
||||||
try
|
try
|
||||||
@ -77,8 +81,7 @@ void TransceiverBase::set (TransceiverState const& s,
|
|||||||
}
|
}
|
||||||
if (s.frequency () // ignore bogus zero frequencies
|
if (s.frequency () // ignore bogus zero frequencies
|
||||||
&& ((s.frequency () != requested_.frequency () // and QSY
|
&& ((s.frequency () != requested_.frequency () // and QSY
|
||||||
|| (s.mode () != UNK && s.mode () != requested_.mode ())) // or mode change
|
|| (s.mode () != UNK && s.mode () != requested_.mode ())))) // or mode change
|
||||||
|| ptt_off)) // or just returned to rx
|
|
||||||
{
|
{
|
||||||
do_frequency (s.frequency (), s.mode (), ptt_off);
|
do_frequency (s.frequency (), s.mode (), ptt_off);
|
||||||
do_post_frequency (s.frequency (), s.mode ());
|
do_post_frequency (s.frequency (), s.mode ());
|
||||||
@ -119,10 +122,12 @@ void TransceiverBase::set (TransceiverState const& s,
|
|||||||
}
|
}
|
||||||
catch (std::exception const& e)
|
catch (std::exception const& e)
|
||||||
{
|
{
|
||||||
|
CAT_TRACE ("#: " << sequence_number << " what: " << e.what ());
|
||||||
message = e.what ();
|
message = e.what ();
|
||||||
}
|
}
|
||||||
catch (...)
|
catch (...)
|
||||||
{
|
{
|
||||||
|
CAT_TRACE ("#: " << sequence_number << " " << sequence_number);
|
||||||
message = unexpected;
|
message = unexpected;
|
||||||
}
|
}
|
||||||
if (!message.isEmpty ())
|
if (!message.isEmpty ())
|
||||||
@ -133,6 +138,7 @@ void TransceiverBase::set (TransceiverState const& s,
|
|||||||
|
|
||||||
void TransceiverBase::startup ()
|
void TransceiverBase::startup ()
|
||||||
{
|
{
|
||||||
|
CAT_TRACE ("startup");
|
||||||
QString message;
|
QString message;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -144,10 +150,12 @@ void TransceiverBase::startup ()
|
|||||||
}
|
}
|
||||||
catch (std::exception const& e)
|
catch (std::exception const& e)
|
||||||
{
|
{
|
||||||
|
CAT_TRACE ("startup" << " what: " << e.what ());
|
||||||
message = e.what ();
|
message = e.what ();
|
||||||
}
|
}
|
||||||
catch (...)
|
catch (...)
|
||||||
{
|
{
|
||||||
|
CAT_TRACE ("startup");
|
||||||
message = unexpected;
|
message = unexpected;
|
||||||
}
|
}
|
||||||
if (!message.isEmpty ())
|
if (!message.isEmpty ())
|
||||||
@ -158,6 +166,7 @@ void TransceiverBase::startup ()
|
|||||||
|
|
||||||
void TransceiverBase::shutdown ()
|
void TransceiverBase::shutdown ()
|
||||||
{
|
{
|
||||||
|
CAT_TRACE ("shutdown");
|
||||||
may_update u {this};
|
may_update u {this};
|
||||||
if (requested_.online ())
|
if (requested_.online ())
|
||||||
{
|
{
|
||||||
@ -177,6 +186,7 @@ void TransceiverBase::shutdown ()
|
|||||||
}
|
}
|
||||||
catch (...)
|
catch (...)
|
||||||
{
|
{
|
||||||
|
CAT_TRACE ("shutdown");
|
||||||
// don't care about exceptions
|
// don't care about exceptions
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -186,6 +196,7 @@ void TransceiverBase::shutdown ()
|
|||||||
|
|
||||||
void TransceiverBase::stop () noexcept
|
void TransceiverBase::stop () noexcept
|
||||||
{
|
{
|
||||||
|
CAT_TRACE ("stop");
|
||||||
QString message;
|
QString message;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -193,10 +204,12 @@ void TransceiverBase::stop () noexcept
|
|||||||
}
|
}
|
||||||
catch (std::exception const& e)
|
catch (std::exception const& e)
|
||||||
{
|
{
|
||||||
|
CAT_TRACE ("stop" << " what: " << e.what ());
|
||||||
message = e.what ();
|
message = e.what ();
|
||||||
}
|
}
|
||||||
catch (...)
|
catch (...)
|
||||||
{
|
{
|
||||||
|
CAT_TRACE ("stop");
|
||||||
message = unexpected;
|
message = unexpected;
|
||||||
}
|
}
|
||||||
if (!message.isEmpty ())
|
if (!message.isEmpty ())
|
||||||
@ -211,6 +224,7 @@ void TransceiverBase::stop () noexcept
|
|||||||
|
|
||||||
void TransceiverBase::update_rx_frequency (Frequency rx)
|
void TransceiverBase::update_rx_frequency (Frequency rx)
|
||||||
{
|
{
|
||||||
|
CAT_TRACE ("frequency: " << rx);
|
||||||
if (rx)
|
if (rx)
|
||||||
{
|
{
|
||||||
actual_.frequency (rx);
|
actual_.frequency (rx);
|
||||||
@ -220,28 +234,35 @@ void TransceiverBase::update_rx_frequency (Frequency rx)
|
|||||||
|
|
||||||
void TransceiverBase::update_other_frequency (Frequency tx)
|
void TransceiverBase::update_other_frequency (Frequency tx)
|
||||||
{
|
{
|
||||||
|
CAT_TRACE ("frequency: " << tx);
|
||||||
actual_.tx_frequency (tx);
|
actual_.tx_frequency (tx);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TransceiverBase::update_split (bool state)
|
void TransceiverBase::update_split (bool state)
|
||||||
{
|
{
|
||||||
|
CAT_TRACE ("state: " << state);
|
||||||
actual_.split (state);
|
actual_.split (state);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TransceiverBase::update_mode (MODE m)
|
void TransceiverBase::update_mode (MODE m)
|
||||||
{
|
{
|
||||||
|
CAT_TRACE ("mode: " << m);
|
||||||
actual_.mode (m);
|
actual_.mode (m);
|
||||||
requested_.mode (m); // track rig changes
|
requested_.mode (m); // track rig changes
|
||||||
}
|
}
|
||||||
|
|
||||||
void TransceiverBase::update_PTT (bool state)
|
void TransceiverBase::update_PTT (bool state)
|
||||||
{
|
{
|
||||||
|
CAT_TRACE ("state: " << state);
|
||||||
actual_.ptt (state);
|
actual_.ptt (state);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TransceiverBase::update_complete (bool force_signal)
|
void TransceiverBase::update_complete (bool force_signal)
|
||||||
{
|
{
|
||||||
if ((do_pre_update () && actual_ != last_) || force_signal)
|
CAT_TRACE ("force signal: " << force_signal);
|
||||||
|
if ((do_pre_update ()
|
||||||
|
&& actual_ != last_)
|
||||||
|
|| force_signal)
|
||||||
{
|
{
|
||||||
Q_EMIT update (actual_, last_sequence_number_);
|
Q_EMIT update (actual_, last_sequence_number_);
|
||||||
last_ = actual_;
|
last_ = actual_;
|
||||||
@ -250,6 +271,7 @@ void TransceiverBase::update_complete (bool force_signal)
|
|||||||
|
|
||||||
void TransceiverBase::offline (QString const& reason)
|
void TransceiverBase::offline (QString const& reason)
|
||||||
{
|
{
|
||||||
|
CAT_TRACE ("reason: " << reason);
|
||||||
Q_EMIT failure (reason);
|
Q_EMIT failure (reason);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -257,6 +279,7 @@ void TransceiverBase::offline (QString const& reason)
|
|||||||
}
|
}
|
||||||
catch (...)
|
catch (...)
|
||||||
{
|
{
|
||||||
|
CAT_TRACE ("reason: " << reason);
|
||||||
// don't care
|
// don't care
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -41,7 +41,7 @@ class QWidget;
|
|||||||
// storage using the provided QSettings object instance.
|
// storage using the provided QSettings object instance.
|
||||||
//
|
//
|
||||||
// A passed in Configuration object instance is used to query the
|
// A passed in Configuration object instance is used to query the
|
||||||
// FrequencyList_v2 model to determine working frequencies for each
|
// FrequencyList_v2_101 model to determine working frequencies for each
|
||||||
// band. The row index of this model is returned by this classes
|
// band. The row index of this model is returned by this classes
|
||||||
// hopping scheduling method so it may be conveniently used to select
|
// hopping scheduling method so it may be conveniently used to select
|
||||||
// a new working frequency by a client.
|
// a new working frequency by a client.
|
||||||
|
@ -7,7 +7,6 @@ JT4 11101000000011000011000000000000000000
|
|||||||
JT4/VHF 11111001001011011011110000000000000000
|
JT4/VHF 11111001001011011011110000000000000000
|
||||||
JT9 11101000000011100001000000000000100000
|
JT9 11101000000011100001000000000000100000
|
||||||
JT9/VHF 11111010100011111001000000000000000000
|
JT9/VHF 11111010100011111001000000000000000000
|
||||||
JT9+JT65 11101000000111100001000000000000100000
|
|
||||||
JT65 11101000000011100001000000000000100000
|
JT65 11101000000011100001000000000000100000
|
||||||
JT65/VHF 11111001000011011010110001000000000000
|
JT65/VHF 11111001000011011010110001000000000000
|
||||||
Q65 11111101011011010011100000010000000011
|
Q65 11111101011011010011100000010000000011
|
||||||
|
@ -49,12 +49,11 @@ set (UG_SRCS
|
|||||||
system-requirements.adoc
|
system-requirements.adoc
|
||||||
transceiver-setup.adoc
|
transceiver-setup.adoc
|
||||||
tutorial-example1.adoc
|
tutorial-example1.adoc
|
||||||
tutorial-example2.adoc
|
|
||||||
tutorial-example3.adoc
|
tutorial-example3.adoc
|
||||||
tutorial-example4.adoc
|
tutorial-example4.adoc
|
||||||
tutorial-example5.adoc
|
tutorial-example5.adoc
|
||||||
tutorial-example6.adoc
|
tutorial-example6.adoc
|
||||||
tutorial-main-window.adoc
|
tutorial-download-samples.adoc
|
||||||
tutorial-wide-graph-settings.adoc
|
tutorial-wide-graph-settings.adoc
|
||||||
utilities.adoc
|
utilities.adoc
|
||||||
vhf-features.adoc
|
vhf-features.adoc
|
||||||
@ -63,7 +62,9 @@ set (UG_SRCS
|
|||||||
)
|
)
|
||||||
|
|
||||||
set (UG_IMGS
|
set (UG_IMGS
|
||||||
images/130610_2343-wav-80.png
|
images/active_stations.png
|
||||||
|
images/Add_Frequency.png
|
||||||
|
images/Add_station_info.png
|
||||||
images/AstroData_2.png
|
images/AstroData_2.png
|
||||||
images/Astronomical_data.png
|
images/Astronomical_data.png
|
||||||
images/auto-seq.png
|
images/auto-seq.png
|
||||||
@ -72,9 +73,8 @@ set (UG_IMGS
|
|||||||
images/colors.png
|
images/colors.png
|
||||||
images/config-menu.png
|
images/config-menu.png
|
||||||
images/decode-menu.png
|
images/decode-menu.png
|
||||||
images/decodes.png
|
|
||||||
images/download_samples.png
|
images/download_samples.png
|
||||||
images/echo_144.png
|
images/Echo_1296.png
|
||||||
images/EME_Deep_0.png
|
images/EME_Deep_0.png
|
||||||
images/EME_Deep_1.png
|
images/EME_Deep_1.png
|
||||||
images/EME_Deep_2.png
|
images/EME_Deep_2.png
|
||||||
|
@ -25,16 +25,17 @@ https://www.msys2.org/wiki/MSYS2-installation/
|
|||||||
Take particular care to restart the MSYS2 shell window when directed
|
Take particular care to restart the MSYS2 shell window when directed
|
||||||
to.
|
to.
|
||||||
|
|
||||||
Once MSYS2 is installed you will find a start menu entry labelled
|
|
||||||
"MSYS2 MinGW 64-bit", use that to start a fresh MSYS2 shell window for
|
|
||||||
the rest of these instructions.
|
|
||||||
|
|
||||||
The first step is to install some prerequisite packages which contain
|
The first step is to install some prerequisite packages which contain
|
||||||
the tools needed to prepare and build the portaudio DLL. Execute the
|
the tools needed to prepare and build the portaudio DLL. Execute the
|
||||||
following command to do that:
|
following command to do that:
|
||||||
|
|
||||||
pacman -S make diffutils unzip mingw-w64-x86_64-gcc sed tar curl
|
pacman -S make diffutils unzip mingw-w64-x86_64-gcc sed tar curl
|
||||||
|
|
||||||
|
Once MSYS2 is installed and the prerequisite packages above are
|
||||||
|
installed you will find a new Windows Start Menu entry labelled "MSYS2
|
||||||
|
MinGW 64-bit", use that to start a fresh MSYS2 shell window for the
|
||||||
|
rest of these instructions.
|
||||||
|
|
||||||
Then make directories to put downloaded sources in and for building:
|
Then make directories to put downloaded sources in and for building:
|
||||||
|
|
||||||
mkdir -p ~/src ~/build/portaudio
|
mkdir -p ~/src ~/build/portaudio
|
||||||
|
@ -49,44 +49,44 @@ d). Edit lines as needed. Keeping them in alphabetic order help see dupes.
|
|||||||
:asciidoctor_style: https://asciidoctor.org/docs/asciidoc-writers-guide/#delimited-blocks[AsciiDoctor Styles Guide]
|
:asciidoctor_style: https://asciidoctor.org/docs/asciidoc-writers-guide/#delimited-blocks[AsciiDoctor Styles Guide]
|
||||||
:asciidoctor_syntax: https://asciidoctor.org/docs/asciidoc-writers-guide/#delimited-blocks[AsciiDoctor Syntax Guide]
|
:asciidoctor_syntax: https://asciidoctor.org/docs/asciidoc-writers-guide/#delimited-blocks[AsciiDoctor Syntax Guide]
|
||||||
:cc_by_sa: https://creativecommons.org/licenses/by-sa/3.0/[Commons Attribution-ShareAlike 3.0 Unported License]
|
:cc_by_sa: https://creativecommons.org/licenses/by-sa/3.0/[Commons Attribution-ShareAlike 3.0 Unported License]
|
||||||
:debian32: https://physics.princeton.edu/pulsar/K1JT/wsjtx_{VERSION}_i386.deb[wsjtx_{VERSION}_i386.deb]
|
:debian32: https://sourceforge.net/projects/wsjt/files/wsjtx-{VERSION}/wsjtx_{VERSION}_i386.deb[wsjtx_{VERSION}_i386.deb]
|
||||||
:debian64: https://physics.princeton.edu/pulsar/K1JT/wsjtx_{VERSION}_amd64.deb[wsjtx_{VERSION}_amd64.deb]
|
:debian64: https://sourceforge.net/projects/wsjt/files/wsjtx-{VERSION}/wsjtx_{VERSION}_amd64.deb[wsjtx_{VERSION}_amd64.deb]
|
||||||
:raspbian: https://physics.princeton.edu/pulsar/K1JT/wsjtx_{VERSION}_armhf.deb[wsjtx_{VERSION}_armhf.deb]
|
:raspbian: https://sourceforge.net/projects/wsjt/files/wsjtx-{VERSION}/wsjtx_{VERSION}_armhf.deb[wsjtx_{VERSION}_armhf.deb]
|
||||||
:raspbian64: https://physics.princeton.edu/pulsar/K1JT/wsjtx_{VERSION}_arm64.deb[wsjtx_{VERSION}_arm64.deb]
|
:raspbian64: https://sourceforge.net/projects/wsjt/files/wsjtx-{VERSION}/wsjtx_{VERSION}_arm64.deb[wsjtx_{VERSION}_arm64.deb]
|
||||||
:debian: https://www.debian.org/[Debian]
|
:debian: https://www.debian.org/[Debian]
|
||||||
:dev_guide: https://www.physics.princeton.edu/pulsar/K1JT/wsjtx-doc/wsjt-dev-guide.html[Dev-Guide]
|
:dev_guide: https://wsjt.sourceforge.io/wsjtx-doc/wsjt-dev-guide.html[Dev-Guide]
|
||||||
:devsvn: https://sourceforge.net/p/wsjt/wsjt/HEAD/tree/[Devel-SVN]
|
:devsvn: https://sourceforge.net/p/wsjt/wsjt/HEAD/tree/[Devel-SVN]
|
||||||
:devrepo: https://sourceforge.net/p/wsjt/wsjtx/ci/master/tree/[SourceForge]
|
:devrepo: https://sourceforge.net/p/wsjt/wsjtx/ci/master/tree/[SourceForge]
|
||||||
:dimension4: http://www.thinkman.com/dimension4/[Thinking Man Software]
|
:dimension4: http://www.thinkman.com/dimension4/[Thinking Man Software]
|
||||||
:download: https://physics.princeton.edu/pulsar/K1JT/wsjtx.html[Download Page]
|
:download: https://sourceforge.net/projects/wsjt/files/wsjtx-{VERSION}/wsjtx.html[Download Page]
|
||||||
:dxatlas: http://www.dxatlas.com/[Afreet Software, Inc.]
|
:dxatlas: http://www.dxatlas.com/[Afreet Software, Inc.]
|
||||||
:dxlcommander: https://www.dxlabsuite.com/commander/[Commander]
|
:dxlcommander: https://www.dxlabsuite.com/commander/[Commander]
|
||||||
:dxlsuite: https://www.dxlabsuite.com/[DX Lab Suite]
|
:dxlsuite: https://www.dxlabsuite.com/[DX Lab Suite]
|
||||||
:fedora32: https://physics.princeton.edu/pulsar/K1JT/wsjtx-{VERSION}-i686.rpm[wsjtx-{VERSION}-i686.rpm]
|
:fedora32: https://sourceforge.net/projects/wsjt/files/wsjtx-{VERSION}/wsjtx-{VERSION}-i686.rpm[wsjtx-{VERSION}-i686.rpm]
|
||||||
:fedora64: https://physics.princeton.edu/pulsar/K1JT/wsjtx-{VERSION}-x86_64.rpm[wsjtx-{VERSION}-x86_64.rpm]
|
:fedora64: https://sourceforge.net/projects/wsjt/files/wsjtx-{VERSION}/wsjtx-{VERSION}-x86_64.rpm[wsjtx-{VERSION}-x86_64.rpm]
|
||||||
:fmt_arrl: https://www.arrl.org/frequency-measuring-test[ARRL FMT Info]
|
:fmt_arrl: https://www.arrl.org/frequency-measuring-test[ARRL FMT Info]
|
||||||
:fmt_group: https://groups.yahoo.com/neo/groups/FMT-nuts/info[FMT Group]
|
:fmt_group: https://groups.yahoo.com/neo/groups/FMT-nuts/info[FMT Group]
|
||||||
:fmt_k5cm: http://www.k5cm.com/[FMT Event Info]
|
:fmt_k5cm: http://www.k5cm.com/[FMT Event Info]
|
||||||
:fmt_wspr: https://www.physics.princeton.edu/pulsar/K1JT/FMT_User.pdf[Accurate Frequency Measurements with your WSPR Setup]
|
:fmt_wspr: https://wsjt.sourceforge.io/FMT_User.pdf[Accurate Frequency Measurements with your WSPR Setup]
|
||||||
:ft4_protocol: https://physics.princeton.edu/pulsar/k1jt/FT4_Protocol.pdf[The FT4 Protocol for Digital Contesting]
|
:ft4_protocol: https://wsjt.sourceforge.io/FT4_Protocol.pdf[The FT4 Protocol for Digital Contesting]
|
||||||
:ft4_ft8_protocols: https://physics.princeton.edu/pulsar/k1jt/FT4_FT8_QEX.pdf[The FT4 and FT8 Communication Protocols]
|
:ft4_ft8_protocols: https://wsjt.sourceforge.io/FT4_FT8_QEX.pdf[The FT4 and FT8 Communication Protocols]
|
||||||
:ft8_tips: https://www.g4ifb.com/FT8_Hinson_tips_for_HF_DXers.pdf[FT8 Operating Guide]
|
:ft8_tips: https://www.g4ifb.com/FT8_Hinson_tips_for_HF_DXers.pdf[FT8 Operating Guide]
|
||||||
:ft8_DXped: https://physics.princeton.edu/pulsar/k1jt/FT8_DXpedition_Mode.pdf[FT8 DXpedition Mode]
|
:ft8_DXped: https://wsjt.sourceforge.io/FT8_DXpedition_Mode.pdf[FT8 DXpedition Mode]
|
||||||
:gnu_gpl: https://www.gnu.org/licenses/gpl-3.0.txt[GNU General Public License]
|
:gnu_gpl: https://www.gnu.org/licenses/gpl-3.0.txt[GNU General Public License]
|
||||||
:homepage: https://physics.princeton.edu/pulsar/K1JT/[WSJT Home Page]
|
:homepage: https://wsjt.sourceforge.io/index.html[WSJT Home Page]
|
||||||
:hrd: http://www.hrdsoftwarellc.com/[Ham Radio Deluxe]
|
:hrd: http://www.hrdsoftwarellc.com/[Ham Radio Deluxe]
|
||||||
:jt4eme: https://physics.princeton.edu/pulsar/K1JT/WSJT-X_1.6.0_for_JT4_v7.pdf[Using WSJT-X for JT4 EME Operation]
|
:jt4eme: https://sourceforge.net/projects/wsjt/files/wsjtx-{VERSION}/WSJT-X_1.6.0_for_JT4_v7.pdf[Using WSJT-X for JT4 EME Operation]
|
||||||
:jt65protocol: https://physics.princeton.edu/pulsar/K1JT/JT65.pdf[QEX]
|
:jt65protocol: https://sourceforge.net/projects/wsjt/files/wsjtx-{VERSION}/JT65.pdf[QEX]
|
||||||
:jtalert: https://hamapps.com/[JTAlert]
|
:jtalert: https://hamapps.com/[JTAlert]
|
||||||
:launchpadki7mt: https://launchpad.net/~ki7mt[KI7MT PPA's]
|
:launchpadki7mt: https://launchpad.net/~ki7mt[KI7MT PPA's]
|
||||||
:log4om: https://www.log4om.com[Log4OM]
|
:log4om: https://www.log4om.com[Log4OM]
|
||||||
:lunarEchoes: https://physics.princeton.edu/pulsar/K1JT/LunarEchoes_QEX.pdf[QEX]
|
:lunarEchoes: https://wsjt.sourceforge.io/LunarEchoes_QEX.pdf[QEX]
|
||||||
:msk144: https://physics.princeton.edu/pulsar/k1jt/MSK144_Protocol_QEX.pdf[QEX]
|
:msk144: https://wsjt.sourceforge.io/MSK144_Protocol_QEX.pdf[QEX]
|
||||||
:msvcpp_redist: https://www.microsoft.com/en-ph/download/details.aspx?id=40784[Microsoft VC++ 2013 Redistributable]
|
:msvcpp_redist: https://www.microsoft.com/en-ph/download/details.aspx?id=40784[Microsoft VC++ 2013 Redistributable]
|
||||||
:msys_url: https://sourceforge.net/projects/mingwbuilds/files/external-binary-packages/[MSYS Download]
|
:msys_url: https://sourceforge.net/projects/mingwbuilds/files/external-binary-packages/[MSYS Download]
|
||||||
:n1mm_logger: https://n1mm.hamdocs.com/tiki-index.php[N1MM Logger+]
|
:n1mm_logger: https://n1mm.hamdocs.com/tiki-index.php[N1MM Logger+]
|
||||||
:ntpsetup: https://www.satsignal.eu/ntp/setup.html[Network Time Protocol Setup]
|
:ntpsetup: https://www.satsignal.eu/ntp/setup.html[Network Time Protocol Setup]
|
||||||
:osx_instructions: https://physics.princeton.edu/pulsar/K1JT/OSX_Readme[Mac OS X Install Instructions]
|
:osx_instructions: https://sourceforge.net/projects/wsjt/files/wsjtx-{VERSION}/OSX_Readme[Mac OS X Install Instructions]
|
||||||
:ppa: https://en.wikipedia.org/wiki/Personal_Package_Archive[PPA]
|
:ppa: https://en.wikipedia.org/wiki/Personal_Package_Archive[PPA]
|
||||||
:projsummary: https://sourceforge.net/projects/wsjt/[Project Summary]
|
:projsummary: https://sourceforge.net/projects/wsjt/[Project Summary]
|
||||||
:pskreporter: https://pskreporter.info/pskmap.html[PSK Reporter]
|
:pskreporter: https://pskreporter.info/pskmap.html[PSK Reporter]
|
||||||
@ -94,35 +94,37 @@ d). Edit lines as needed. Keeping them in alphabetic order help see dupes.
|
|||||||
:sourceforge-jtsdk: https://sourceforge.net/projects/jtsdk[SourceForge JTSDK]
|
:sourceforge-jtsdk: https://sourceforge.net/projects/jtsdk[SourceForge JTSDK]
|
||||||
:ubuntu_sdk: https://launchpad.net/~ubuntu-sdk-team/+archive/ppa[Ubuntu SDK Notice]
|
:ubuntu_sdk: https://launchpad.net/~ubuntu-sdk-team/+archive/ppa[Ubuntu SDK Notice]
|
||||||
:win_openssl_packages: https://slproweb.com/products/Win32OpenSSL.html[Windows OpenSSL Packages]
|
:win_openssl_packages: https://slproweb.com/products/Win32OpenSSL.html[Windows OpenSSL Packages]
|
||||||
:win32_openssl: https://slproweb.com/download/Win32OpenSSL_Light-1_1_1k.msi[Win32 OpenSSL Light Package]
|
:win32_openssl: https://slproweb.com/download/Win32OpenSSL_Light-1_1_1s.msi[Win32 OpenSSL Light Package]
|
||||||
:win64_openssl: https://slproweb.com/download/Win64OpenSSL_Light-1_1_1k.msi[Win64 OpenSSL Light Package]
|
:win64_openssl: https://slproweb.com/download/Win64OpenSSL_Light-1_1_1s.msi[Win64 OpenSSL Light Package]
|
||||||
:writelog: https://writelog.com/[Writelog]
|
:writelog: https://writelog.com/[Writelog]
|
||||||
:wsjtx_group: https://groups.io/g/WSJTX[WSJTX Group]
|
:wsjtx_group: https://groups.io/g/wsjtgroup[WSJT GROUP User Forum]
|
||||||
:wsjtx: https://physics.princeton.edu/pulsar/K1JT/wsjtx.html[WSJT-X]
|
:wsjtx_group2: https://groups.io/g/wsjtgroup/join[join the group]
|
||||||
:wspr0_guide: https://www.physics.princeton.edu/pulsar/K1JT/WSPR0_Instructions.TXT[WSPR0 Guide]
|
:wsjtx: https://sourceforge.net/projects/wsjt/files/wsjtx-{VERSION}/wsjtx.html[WSJT-X]
|
||||||
:wspr: https://physics.princeton.edu/pulsar/K1JT/wspr.html[WSPR Home Page]
|
:wspr0_guide: https://wsjt.sourceforge.io/WSPR0_Instructions.TXT[WSPR0 Guide]
|
||||||
|
:wspr: https://sourceforge.net/projects/wsjt/files/wsjtx-{VERSION}/wspr.html[WSPR Home Page]
|
||||||
:wsprnet: https://wsprnet.org/drupal/[WSPRnet]
|
:wsprnet: https://wsprnet.org/drupal/[WSPRnet]
|
||||||
:wsprnet_activity: https://wsprnet.org/drupal/wsprnet/activity[WSPRnet Activity page]
|
:wsprnet_activity: https://wsprnet.org/drupal/wsprnet/activity[WSPRnet Activity page]
|
||||||
|
|
||||||
// Download Links
|
// Download Links
|
||||||
:cty_dat: https://www.country-files.com/cty/[Amateur Radio Country Files]
|
:cty_dat: https://www.country-files.com/bigcty/cty.dat/[Amateur Radio Country Files]
|
||||||
:jtbridge: https://jt-bridge.eller.nu/[JT-Bridge]
|
:jtbridge: https://jt-bridge.eller.nu/[JT-Bridge]
|
||||||
:jtsdk_doc: https://physics.princeton.edu/pulsar/K1JT/JTSDK-DOC.exe[Download]
|
:jtsdk_doc: https://sourceforge.net/projects/wsjt/files/wsjtx-{VERSION}/JTSDK-DOC.exe[Download]
|
||||||
:jtsdk_installer: https://sourceforge.net/projects/jtsdk/files/win32/2.0.0/JTSDK-2.0.0-B2-Win32.exe/download[Download]
|
:jtsdk_installer: https://sourceforge.net/projects/jtsdk/files/win32/2.0.0/JTSDK-2.0.0-B2-Win32.exe/download[Download]
|
||||||
:jtsdk_omnirig: https://sourceforge.net/projects/jtsdk/files/win32/2.0.0/base/contrib/OmniRig.zip/download[Download]
|
:jtsdk_omnirig: https://sourceforge.net/projects/jtsdk/files/win32/2.0.0/base/contrib/OmniRig.zip/download[Download]
|
||||||
:jtsdk_py: https://physics.princeton.edu/pulsar/K1JT/JTSDK-PY.exe[Download]
|
:jtsdk_py: https://sourceforge.net/projects/wsjt/files/wsjtx-{VERSION}/JTSDK-PY.exe[Download]
|
||||||
:jtsdk_qt: https://physics.princeton.edu/pulsar/K1JT/JTSDK-QT.exe[Download]
|
:jtsdk_qt: https://sourceforge.net/projects/wsjt/files/wsjtx-{VERSION}/JTSDK-QT.exe[Download]
|
||||||
:jtsdk_vcredist: https://sourceforge.net/projects/jtsdk/files/win32/2.0.0/base/contrib/vcredist_x86.exe/download[Download]
|
:jtsdk_vcredist: https://sourceforge.net/projects/jtsdk/files/win32/2.0.0/base/contrib/vcredist_x86.exe/download[Download]
|
||||||
:nh6z: http://www.nh6z.net/Amatuer_Radio_Station_NH6Z/Other_Peoples_Software.html[here]
|
:nh6z: http://www.nh6z.net/Amatuer_Radio_Station_NH6Z/Other_Peoples_Software.html[here]
|
||||||
:omnirig: http://www.dxatlas.com/OmniRig/Files/OmniRig.zip[Omni-Rig]
|
:omnirig: http://www.dxatlas.com/OmniRig/Files/OmniRig.zip[Omni-Rig]
|
||||||
:osx: https://physics.princeton.edu/pulsar/K1JT/wsjtx-{VERSION}-Darwin.dmg[wsjtx-{VERSION}-Darwin.dmg]
|
:osx: https://sourceforge.net/projects/wsjt/files/wsjtx-{VERSION}/wsjtx-{VERSION}-Darwin.dmg[wsjtx-{VERSION}-Darwin.dmg]
|
||||||
:QRA64_EME: https://physics.princeton.edu/pulsar/K1JT/QRA64_EME.pdf[QRA64 for microwave EME]
|
:QRA64_EME: https://sourceforge.net/projects/wsjt/files/wsjtx-{VERSION}/QRA64_EME.pdf[QRA64 for microwave EME]
|
||||||
:svn: https://subversion.apache.org/packages.html#windows[Subversion]
|
:svn: https://subversion.apache.org/packages.html#windows[Subversion]
|
||||||
:win32: https://physics.princeton.edu/pulsar/K1JT/wsjtx-{VERSION}-win32.exe[wsjtx-{VERSION}-win32.exe]
|
:win32: https://sourceforge.net/projects/wsjt/files/wsjtx-{VERSION}/wsjtx-{VERSION}-win32.exe[wsjtx-{VERSION}-win32.exe]
|
||||||
:win64: https://physics.princeton.edu/pulsar/K1JT/wsjtx-{VERSION}-win64.exe[wsjtx-{VERSION}-win64.exe]
|
:win64: https://sourceforge.net/projects/wsjt/files/wsjtx-{VERSION}/wsjtx-{VERSION}-win64.exe[wsjtx-{VERSION}-win64.exe]
|
||||||
:wsjt-devel: https://lists.sourceforge.net/lists/listinfo/wsjt-devel[here]
|
:wsjt-devel: https://sourceforge.net/projects/wsjt/lists/wsjt-devel/[join the group]
|
||||||
|
:wsjt-devel2: https://sourceforge.net/projects/wsjt/lists/wsjt-devel/[subscribe to the list]
|
||||||
:wsjt_repo: https://sourceforge.net/p/wsjt/wsjt_orig/ci/master/tree/[WSJT Source Repository]
|
:wsjt_repo: https://sourceforge.net/p/wsjt/wsjt_orig/ci/master/tree/[WSJT Source Repository]
|
||||||
:wspr_code: https://physics.princeton.edu/pulsar/K1JT/WSPRcode.exe[WSPRcode.exe]
|
:wspr_code: https://sourceforge.net/projects/wsjt/files/wsjtx-{VERSION}/WSPRcode.exe[WSPRcode.exe]
|
||||||
:wspr_svn: https://sourceforge.net/p/wsjt/wspr/ci/master/tree/[WSPR Source Repository]
|
:wspr_svn: https://sourceforge.net/p/wsjt/wspr/ci/master/tree/[WSPR Source Repository]
|
||||||
|
|
||||||
// MAIL-TO links
|
// MAIL-TO links
|
||||||
@ -132,7 +134,7 @@ d). Edit lines as needed. Keeping them in alphabetic order help see dupes.
|
|||||||
:dev_mail_svn: https://sourceforge.net/auth/subscriptions/[WSJT SVN Archives]
|
:dev_mail_svn: https://sourceforge.net/auth/subscriptions/[WSJT SVN Archives]
|
||||||
:devmail: mailto:wsjt-devel@lists.sourceforge.net[wsjt-devel@lists.sourceforge.net]
|
:devmail: mailto:wsjt-devel@lists.sourceforge.net[wsjt-devel@lists.sourceforge.net]
|
||||||
:devmail1: mailto:wsjt-devel@lists.sourceforge.net[Post Message]
|
:devmail1: mailto:wsjt-devel@lists.sourceforge.net[Post Message]
|
||||||
:wsjtgroup_mail: mailto:WSJTX@groups.io[Post Message]
|
:wsjtgroup_mail: mailto:wsjtgroup@groups.io[Post Message]
|
||||||
:greg_beam: mailto:ki7mt@yahoo.com[KI7MT]
|
:greg_beam: mailto:ki7mt@yahoo.com[KI7MT]
|
||||||
:joe_taylor: mailto:joe@princeton.edu[K1JT]
|
:joe_taylor: mailto:joe@princeton.edu[K1JT]
|
||||||
:stuart_rackman: mailto:srackham@gmail.com[Stuart Rackham]
|
:stuart_rackman: mailto:srackham@gmail.com[Stuart Rackham]
|
||||||
|
@ -1,23 +1,24 @@
|
|||||||
// Status=review
|
// Status=review
|
||||||
|
|
||||||
The _WSJT_ project was started by *K1JT* in 2001. Since 2005 it has
|
The _WSJT_ project was started by *K1JT* in 2001. Since 2005 it has
|
||||||
been an Open Source project, which now includes the programs _WSJT_,
|
been an Open Source project, and it has included the programs _WSJT_,
|
||||||
_MAP65_, _WSPR_, _WSJT-X_, and _WSPR-X_. *G4WJS* (since 2013), *K9AN*
|
_MAP65_, _WSPR_, _WSJT-X_, and _QMAP_. *G4WJS* (since 2013), *K9AN*
|
||||||
(since 2015), and *IV3NWV* (since 2016) have made major contributions
|
(since 2015), *IV3NWV* (since 2016), *DG2YCB* (since 2021), and
|
||||||
to _WSJT-X_. Together with K1JT they now form the core development
|
*N9ADG* (since 2022) have made major contributions to _WSJT-X_.
|
||||||
team. *G4WJS* and *W9MDB* have made major contributiions to _hamlib_,
|
Together with K1JT they now form the core development team. *G4WJS*
|
||||||
on which _WSJT-X_ depends for rig control.
|
and *W9MDB* have made major contributions to the _hamlib_ library, on
|
||||||
|
which _WSJT-X_ depends for rig control.
|
||||||
|
|
||||||
All code in the _WSJT_ project is licensed under the GNU Public
|
All code in the _WSJT_ project is licensed under the GNU Public
|
||||||
License (GPL). Many users of these programs, too numerous to mention
|
License (GPL). Many users of these programs, too numerous to mention
|
||||||
here individually, have contributed suggestions and advice that have
|
here individually, have contributed suggestions and advice that have
|
||||||
greatly aided the development of _WSJT_ and its sister programs. For
|
greatly aided the development of _WSJT_ and its sister programs. For
|
||||||
_WSJT-X_ in particular, we acknowledge contributions from *AC6SL,
|
_WSJT-X_ in particular, in addition to those mentioned above we
|
||||||
AE4JY, DF2ET, DJ0OT, G3WDG, G4KLA, IW3RAB, K3WYC, KA1GT, KA6MAL, KA9Q,
|
acknowledge contributions from *AC6SL, AE4JY, DF2ET, DJ0OT, G3WDG,
|
||||||
KB1ZMX, KD6EKQ, KI7MT, KK1D, ND0B, PY2SDR, VE1SKY, VK3ACF, VK4BDJ,
|
G4KLA, IW3RAB, K3WYC, KA1GT, KA6MAL, KA9Q, KB1ZMX, KD6EKQ, KI7MT,
|
||||||
VK7MO, W3DJS, W4TI, W4TV, and W9MDB*. Each of these amateurs has helped to
|
KK1D, ND0B, PY2SDR, VE1SKY, VK3ACF, VK4BDJ, VK7MO, W3DJS, W3SZ, W4TI,
|
||||||
bring the program’s design, code, testing, and/or documentation to its
|
and W4TV*. Each of these amateurs has helped to bring the program’s
|
||||||
present state.
|
design, code, testing, and/or documentation to its present state.
|
||||||
|
|
||||||
Most of the color palettes for the _WSJT-X_ waterfall were copied from
|
Most of the color palettes for the _WSJT-X_ waterfall were copied from
|
||||||
the excellent, well documented, open-source program _fldigi_, by *W1HKJ*
|
the excellent, well documented, open-source program _fldigi_, by *W1HKJ*
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
// Status=edited
|
// Status=edited
|
||||||
|
|
||||||
Controls related to frequency selection, received audio level, the
|
Controls related to frequency selection, received audio level, the
|
||||||
station being called, and date and time are found in the lower, left-hand section of the
|
station being called, and date and time are found in the lower,
|
||||||
main window:
|
left-hand section of the main window. Buttons are provided for making
|
||||||
|
quick changes among the modes FT8, FT4, MSK144, Q65, and JT65, and
|
||||||
|
for toggling FT8 Hound mode ON or OFF.
|
||||||
|
|
||||||
//.Misc Controls Left
|
//.Misc Controls Left
|
||||||
image::misc-main-ui.png[align="center",alt="Misc Menu Items"]
|
image::misc-main-ui.png[align="center",alt="Misc Menu Items"]
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
// Status=edited
|
// Status=edited
|
||||||
|
|
||||||
The following controls appear just under the decoded text windows on
|
The following controls appear just under the decoded text windows on
|
||||||
the main screen:
|
the main screen. Some of them are visible only in certain modes.
|
||||||
|
|
||||||
//.Main UI
|
//.Main UI
|
||||||
image::main-ui-controls.png[align="center",width=650,alt="Main UI Controls"]
|
image::main-ui-controls.png[align="center",width=650,alt="Main UI Controls"]
|
||||||
@ -11,7 +11,9 @@ image::main-ui-controls.png[align="center",width=650,alt="Main UI Controls"]
|
|||||||
* *Log QSO* raises a dialog window pre-filled with known information
|
* *Log QSO* raises a dialog window pre-filled with known information
|
||||||
about a QSO you have nearly completed. You can edit or add to this
|
about a QSO you have nearly completed. You can edit or add to this
|
||||||
information before clicking *OK* to log the QSO. If you check *Prompt
|
information before clicking *OK* to log the QSO. If you check *Prompt
|
||||||
me to log QSO* on the *File -> Settings -> Reporting* tab, the program raises the confirmation screen automatically when you send a message containing +73+. *Start Date* and *Start Time* are set when you click
|
me to log QSO* on the *File -> Settings -> Reporting* tab, the program
|
||||||
|
raises the confirmation screen automatically when you send a message
|
||||||
|
containing +73+. *Start Date* and *Start Time* are set when you click
|
||||||
to send the *Tx 2* or *Tx 3* message, and backed up by one or two
|
to send the *Tx 2* or *Tx 3* message, and backed up by one or two
|
||||||
sequence lengths, respectively. (Note that the actual start time may
|
sequence lengths, respectively. (Note that the actual start time may
|
||||||
have been earlier if repeats of early transmissions were required.)
|
have been earlier if repeats of early transmissions were required.)
|
||||||
|
@ -37,7 +37,18 @@ examples for configurations `FT8` and `Echo`:
|
|||||||
==== View Menu
|
==== View Menu
|
||||||
image::view-menu.png[align="left",alt="View Menu"]
|
image::view-menu.png[align="left",alt="View Menu"]
|
||||||
|
|
||||||
The *SWL Mode* action reduces the _WSJT-X_ main window to a minimum
|
*Active Stations* displays a window that can help you to work the most
|
||||||
|
distant stations, in particular for the distance-scored ARRL
|
||||||
|
International Digital Contest. Controls are provided to set the
|
||||||
|
maximum length of the list and the maximum "`age`" of decodes in Rx
|
||||||
|
sequences. You can request display of only ready-to-be-called
|
||||||
|
stations. For the ARRL International Digital Contest the window
|
||||||
|
displays scoring rate (points in the most recent hour), total score,
|
||||||
|
and the number of band changes in the past hour.
|
||||||
|
|
||||||
|
image::active_stations.png[align="left",alt="Active Stations"]
|
||||||
|
|
||||||
|
*SWL Mode* reduces the _WSJT-X_ main window to a minimum
|
||||||
size with just the menus, decodes windows, and status bar visible. You
|
size with just the menus, decodes windows, and status bar visible. You
|
||||||
may find this useful when running multiple instances of the
|
may find this useful when running multiple instances of the
|
||||||
application. Both size and location of the main window are saved and
|
application. Both size and location of the main window are saved and
|
||||||
|
@ -1,10 +1,9 @@
|
|||||||
// Status=edited
|
// Status=edited
|
||||||
|
|
||||||
The following controls appear at the bottom of the Wide Graph window.
|
The following controls appear at the bottom of the Wide Graph window.
|
||||||
Decoding occurs only in the displayed frequency range; otherwise, with
|
Decoding occurs only in the displayed frequency range; otherwise,
|
||||||
the exceptions of *Start NNN Hz* and of *JT65 nnnn JT9* when operating
|
controls on the Wide Graph window have no effect on the decoding
|
||||||
in JT9+JT65 mode, controls on the Wide Graph window have no effect on
|
process.
|
||||||
the decoding process.
|
|
||||||
|
|
||||||
image::wide-graph-controls.png[align="center",alt="Wide Graph Controls"]
|
image::wide-graph-controls.png[align="center",alt="Wide Graph Controls"]
|
||||||
|
|
||||||
@ -13,11 +12,6 @@ value to 1 for the highest possible resolution, or to higher numbers
|
|||||||
to compress the spectral display. Normal operation with a convenient
|
to compress the spectral display. Normal operation with a convenient
|
||||||
window size works well at 2 to 8 bins per pixel.
|
window size works well at 2 to 8 bins per pixel.
|
||||||
|
|
||||||
- *JT65 nnnn JT9* sets the dividing point (blue marker) for wide-band
|
|
||||||
decoding of JT65 and JT9 signals in *JT9+JT65* mode. The decoder
|
|
||||||
looks for JT65 signals everywhere, but JT9 signals only above this
|
|
||||||
frequency. This setting is stored separately for each band.
|
|
||||||
|
|
||||||
- *Start nnn Hz* sets the low-frequency starting point of the
|
- *Start nnn Hz* sets the low-frequency starting point of the
|
||||||
waterfall frequency scale.
|
waterfall frequency scale.
|
||||||
|
|
||||||
|
@ -24,12 +24,13 @@ AP bits, with a specified level of confidence. Successful AP decodes
|
|||||||
are labeled with an end-of-line indicator of the form `aP`, where `P`
|
are labeled with an end-of-line indicator of the form `aP`, where `P`
|
||||||
is one of the single-digit AP decoding types listed in Table 1. For
|
is one of the single-digit AP decoding types listed in Table 1. For
|
||||||
example, `a2` indicates that the successful decode used MyCall as
|
example, `a2` indicates that the successful decode used MyCall as
|
||||||
hypothetically known information.
|
hypothetically known information. Type `a7`, used only in FT8 mode,
|
||||||
|
uses information from the previous Rx sequence.
|
||||||
|
|
||||||
[[FT8_AP_INFO_TABLE]]
|
[[FT8_AP_INFO_TABLE]]
|
||||||
.FST4, FT4, and FT8 AP information types
|
.FST4, FT4, and FT8 AP information types
|
||||||
[width="35%",cols="h10,<m20",frame=topbot,options="header"]
|
[width="35%",cols="1h,<10m",frame=topbot,options="header"]
|
||||||
|===============================================
|
|===
|
||||||
|aP|Message components
|
|aP|Message components
|
||||||
|a1|CQ     ?     ?
|
|a1|CQ     ?     ?
|
||||||
|a2|MyCall     ?     ?
|
|a2|MyCall     ?     ?
|
||||||
@ -37,7 +38,8 @@ hypothetically known information.
|
|||||||
|a4|MyCall DxCall RRR
|
|a4|MyCall DxCall RRR
|
||||||
|a5|MyCall DxCall 73
|
|a5|MyCall DxCall 73
|
||||||
|a6|MyCall DxCall RR73
|
|a6|MyCall DxCall RR73
|
||||||
|===============================================
|
|a7|(Call_1 or CQ) Call_2     ?
|
||||||
|
|===
|
||||||
|
|
||||||
If a codeword is found that is judged to have high (but not
|
If a codeword is found that is judged to have high (but not
|
||||||
overwhelmingly high) probability of being correct, a `?` character is
|
overwhelmingly high) probability of being correct, a `?` character is
|
||||||
@ -53,8 +55,8 @@ is the same except that it omits the decoding attempts for AP types
|
|||||||
|
|
||||||
[[FT8_AP_DECODING_TYPES_TABLE]]
|
[[FT8_AP_DECODING_TYPES_TABLE]]
|
||||||
.FT4 and FT8 AP decoding types for each QSO state
|
.FT4 and FT8 AP decoding types for each QSO state
|
||||||
[width="35%",cols="h10,<m20",frame=topbot,options="header"]
|
[width="35%",cols="10h,<20m",frame=topbot,options="header"]
|
||||||
|===========================================
|
|===
|
||||||
|State |AP type
|
|State |AP type
|
||||||
|CALLING STN | 2, 3
|
|CALLING STN | 2, 3
|
||||||
|REPORT | 2, 3
|
|REPORT | 2, 3
|
||||||
@ -62,15 +64,15 @@ is the same except that it omits the decoding attempts for AP types
|
|||||||
|ROGERS | 3, 4, 5, 6
|
|ROGERS | 3, 4, 5, 6
|
||||||
|SIGNOFF | 3, 1, 2
|
|SIGNOFF | 3, 1, 2
|
||||||
|CALLING CQ | 1, 2
|
|CALLING CQ | 1, 2
|
||||||
|===========================================
|
|===
|
||||||
|
|
||||||
Decoding with _a priori_ information behaves slightly differently
|
Decoding with _a priori_ information behaves slightly differently
|
||||||
in JT65. Some details are provided in Tables 3 and 4.
|
in JT65. Some details are provided in Tables 3 and 4.
|
||||||
|
|
||||||
[[JT65_AP_INFO_TABLE]]
|
[[JT65_AP_INFO_TABLE]]
|
||||||
.JT65 AP information types
|
.JT65 AP information types
|
||||||
[width="35%",cols="h10,<m20",frame=topbot,options="header"]
|
[width="35%",cols="1h,<10m",frame=topbot,options="header"]
|
||||||
|===============================================
|
|===
|
||||||
|aP | Message components
|
|aP | Message components
|
||||||
|a1 | CQ     ?     ?
|
|a1 | CQ     ?     ?
|
||||||
|a2 | MyCall     ?     ?
|
|a2 | MyCall     ?     ?
|
||||||
@ -79,12 +81,12 @@ in JT65. Some details are provided in Tables 3 and 4.
|
|||||||
|a5 | MyCall DxCall 73
|
|a5 | MyCall DxCall 73
|
||||||
|a6 | MyCall DxCall DxGrid
|
|a6 | MyCall DxCall DxGrid
|
||||||
|a7 | CQ DxCall DxGrid
|
|a7 | CQ DxCall DxGrid
|
||||||
|===============================================
|
|===
|
||||||
|
|
||||||
[[JT65_AP_DECODING_TYPES_TABLE]]
|
[[JT65_AP_DECODING_TYPES_TABLE]]
|
||||||
.JT65 AP decoding types for each QSO state
|
.JT65 AP decoding types for each QSO state
|
||||||
[width="35%",cols="h10,<m20",frame=topbot,options="header"]
|
[width="35%",cols="10h,<20m",frame=topbot,options="header"]
|
||||||
|===========================================
|
|===
|
||||||
|State |AP type
|
|State |AP type
|
||||||
|CALLING STN |2, 3, 6, 7
|
|CALLING STN |2, 3, 6, 7
|
||||||
|REPORT |2, 3
|
|REPORT |2, 3
|
||||||
@ -92,7 +94,7 @@ in JT65. Some details are provided in Tables 3 and 4.
|
|||||||
|ROGERS |3, 4, 5
|
|ROGERS |3, 4, 5
|
||||||
|SIGNOFF |2, 3, 4, 5
|
|SIGNOFF |2, 3, 4, 5
|
||||||
|CALLING CQ |1, 2, 6
|
|CALLING CQ |1, 2, 6
|
||||||
|===========================================
|
|===
|
||||||
|
|
||||||
|
|
||||||
=== Decoded Lines
|
=== Decoded Lines
|
||||||
@ -109,7 +111,7 @@ summarized in the following Table:
|
|||||||
[[DECODED_LINES_TABLE]]
|
[[DECODED_LINES_TABLE]]
|
||||||
.Notations used on decoded text lines
|
.Notations used on decoded text lines
|
||||||
[width="50%",cols="h,3*^",frame=topbot,options="header"]
|
[width="50%",cols="h,3*^",frame=topbot,options="header"]
|
||||||
|===========================================
|
|===
|
||||||
|Mode |Mode character|Sync character|End of line information
|
|Mode |Mode character|Sync character|End of line information
|
||||||
|FST4 | ` | | ?   aP
|
|FST4 | ` | | ?   aP
|
||||||
|FT4 | + | | ?   aP
|
|FT4 | + | | ?   aP
|
||||||
@ -120,7 +122,7 @@ summarized in the following Table:
|
|||||||
|JT65 VHF| # | *, # | f, fN, dCN
|
|JT65 VHF| # | *, # | f, fN, dCN
|
||||||
|Q65 | : | | qP
|
|Q65 | : | | qP
|
||||||
|MSK144 | & | |
|
|MSK144 | & | |
|
||||||
|===========================================
|
|===
|
||||||
Sync character::
|
Sync character::
|
||||||
`*` - Normal sync +
|
`*` - Normal sync +
|
||||||
`#` - Alternate sync
|
`#` - Alternate sync
|
||||||
@ -136,12 +138,13 @@ End of line information::
|
|||||||
|
|
||||||
[[Q65_AP_INFO_TABLE]]
|
[[Q65_AP_INFO_TABLE]]
|
||||||
.Q65 end-of-line codes
|
.Q65 end-of-line codes
|
||||||
[width="45%",cols="h10,<m20",frame=topbot,options="header"]
|
[width="50%",cols="1h,<10m",frame=topbot,options="header"]
|
||||||
|===============================================
|
|===
|
||||||
| | Message components
|
|qP|Message components
|
||||||
|q0|?     ?     ?
|
|q0|?     ?     ?
|
||||||
|q1|CQ     ?     ?
|
|q1|CQ     ?     ?
|
||||||
|q2|MyCall     ?     ?
|
|q2|MyCall     ?     ?
|
||||||
|q3|MyCall DxCall     ?
|
|q3|MyCall DxCall     ?
|
||||||
|q4|MyCall DxCall     [<blank> \| RRR \| RR73 \| 73]
|
|q4|MyCall DxCall     [<blank> \| RRR \| RR73 \| 73]
|
||||||
|===============================================
|
|q5|MyCall DxCall     ?         (*Max Drift* = 50)
|
||||||
|
|===
|
||||||
|
Before Width: | Height: | Size: 52 KiB |
BIN
doc/user_guide/en/images/Add_Frequency.png
Normal file
After Width: | Height: | Size: 7.4 KiB |
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 3.6 KiB |
BIN
doc/user_guide/en/images/Echo_1296.png
Normal file
After Width: | Height: | Size: 177 KiB |
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 133 KiB |
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 42 KiB |
BIN
doc/user_guide/en/images/active_stations.png
Normal file
After Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 9.3 KiB After Width: | Height: | Size: 112 KiB |
Before Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 171 KiB |
Before Width: | Height: | Size: 8.7 KiB After Width: | Height: | Size: 8.3 KiB |
Before Width: | Height: | Size: 6.7 KiB After Width: | Height: | Size: 7.1 KiB |
Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 6.4 KiB |
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 3.5 KiB |
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 9.7 KiB After Width: | Height: | Size: 7.0 KiB |
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 4.8 KiB |
Before Width: | Height: | Size: 5.4 KiB After Width: | Height: | Size: 4.9 KiB |
@ -10,12 +10,6 @@ with the release for details of the targeted Linux distributions and
|
|||||||
versions. If the binary package is not compatible with your Linux
|
versions. If the binary package is not compatible with your Linux
|
||||||
distribution or version, you must build the application from sources.
|
distribution or version, you must build the application from sources.
|
||||||
|
|
||||||
* 32-bit Intel/AMD: {debian32}
|
|
||||||
- To install:
|
|
||||||
+
|
|
||||||
[example]
|
|
||||||
sudo dpkg -i wsjtx_{VERSION}_i386.deb
|
|
||||||
|
|
||||||
* 64-bit Intel/AMD: {debian64}
|
* 64-bit Intel/AMD: {debian64}
|
||||||
- To install:
|
- To install:
|
||||||
+
|
+
|
||||||
@ -45,24 +39,18 @@ You may also need to execute the following command in a terminal:
|
|||||||
sudo apt install libgfortran5 libqt5widgets5 libqt5network5 \
|
sudo apt install libgfortran5 libqt5widgets5 libqt5network5 \
|
||||||
libqt5printsupport5 libqt5multimedia5-plugins libqt5serialport5 \
|
libqt5printsupport5 libqt5multimedia5-plugins libqt5serialport5 \
|
||||||
libqt5sql5-sqlite libfftw3-single3 libgomp1 libboost-all-dev \
|
libqt5sql5-sqlite libfftw3-single3 libgomp1 libboost-all-dev \
|
||||||
libusb-1.0-0
|
libusb-1.0-0 libportaudio2
|
||||||
....
|
....
|
||||||
|
|
||||||
Fedora, CentOS, Red Hat, and other rpm-based systems:
|
Fedora, CentOS, Red Hat, and other rpm-based systems:
|
||||||
|
|
||||||
* 32-bit: {fedora32}
|
|
||||||
- To install:
|
|
||||||
+
|
|
||||||
[example]
|
|
||||||
sudo rpm -i wsjtx-{VERSION}-i686.rpm
|
|
||||||
|
|
||||||
* 64-bit: {fedora64}
|
* 64-bit: {fedora64}
|
||||||
- To install:
|
- To install:
|
||||||
+
|
+
|
||||||
[example]
|
[example]
|
||||||
sudo rpm -i wsjtx-{VERSION}-x86_64.rpm
|
sudo rpm -i wsjtx-{VERSION}-x86_64.rpm
|
||||||
|
|
||||||
* Uninstall for either of the above platforms:
|
* Uninstall:
|
||||||
+
|
+
|
||||||
[example]
|
[example]
|
||||||
sudo rpm -e wsjtx
|
sudo rpm -e wsjtx
|
||||||
@ -72,5 +60,5 @@ You may also need to execute the following command in a terminal:
|
|||||||
....
|
....
|
||||||
sudo dnf install libgfortran fftw-libs-single qt5-qtbase \
|
sudo dnf install libgfortran fftw-libs-single qt5-qtbase \
|
||||||
qt5-qtmultimedia qt5-qtserialport qt5-qtsvg \
|
qt5-qtmultimedia qt5-qtserialport qt5-qtsvg \
|
||||||
qt5-qtserialport libgomp boost libusbx
|
qt5-qtserialport libgomp boost libusbx portaudio
|
||||||
....
|
....
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
// Status=edited
|
// Status=edited
|
||||||
|
|
||||||
Download and execute the package file {win32} (Win 7,
|
Download and execute the package file {win32} (Windows 7 or later,
|
||||||
Win 8, Win10, 32-bit) or {win64} (Win 7, Win 8, Win10, 64-bit)
|
32-bit) or {win64} (Windows 7 or later, 64-bit) following these
|
||||||
following these instructions:
|
instructions:
|
||||||
|
|
||||||
* Install _WSJT-X_ into its own directory, for example `C:\WSJTX` or `C:\WSJT\WSJTX`, rather than the conventional location `C:\Program
|
* Install _WSJT-X_ into its own directory, for example `C:\WSJTX` or `C:\WSJT\WSJTX`, rather than the conventional location `C:\Program
|
||||||
Files ...\WSJTX`.
|
Files ...\WSJTX`.
|
||||||
|
@ -1,5 +1,13 @@
|
|||||||
=== Documentation Conventions
|
=== Documentation Conventions
|
||||||
|
|
||||||
|
We include screen shots that illustrate many of the settings and
|
||||||
|
features of _WSJT-X_. Keep in mind that _WSJT-X_ is a multi-platform
|
||||||
|
application: the detailed appearance of windows and user controls may
|
||||||
|
be significantly different in Windows, Linux, or macOS environments.
|
||||||
|
The underlying functionality is the same on all operating systems,
|
||||||
|
however. Where desirable we call special attention to important
|
||||||
|
platform differences.
|
||||||
|
|
||||||
In this manual the following icons call attention to particular types
|
In this manual the following icons call attention to particular types
|
||||||
of information:
|
of information:
|
||||||
|
|
||||||
@ -14,9 +22,14 @@ consequences.
|
|||||||
|
|
||||||
=== User Interface in Other Languages
|
=== User Interface in Other Languages
|
||||||
|
|
||||||
The _WSJT-X_ user interface is now available in many languages. When
|
The _WSJT-X_ user interface (UI) is now available in many languages.
|
||||||
a translated user interface is available for the computer's default
|
When a translated UI is available for the computer's default System
|
||||||
System Language, it will appear automatically on program startup.
|
Language, it will appear automatically on program startup. The UI
|
||||||
|
language may be overridden if desired by starting _WSJT-X_ with a
|
||||||
|
command line option. For example, to start _WSJT-X_ with its user
|
||||||
|
interface in Spanish, enter this command at the prompt: +
|
||||||
|
|
||||||
|
`wsjtx --language es`
|
||||||
|
|
||||||
=== How You Can Contribute
|
=== How You Can Contribute
|
||||||
|
|
||||||
|
@ -7,7 +7,9 @@ K1**JT**,`" while the suffix "`*-X*`" indicates that _WSJT-X_ started
|
|||||||
as an extended branch of an earlier program, _WSJT_, first released in
|
as an extended branch of an earlier program, _WSJT_, first released in
|
||||||
2001. Bill Somerville, G4WJS, Steve Franke, K9AN, and Nico Palermo,
|
2001. Bill Somerville, G4WJS, Steve Franke, K9AN, and Nico Palermo,
|
||||||
IV3NWV, have been major contributors to development of _WSJT-X_ since
|
IV3NWV, have been major contributors to development of _WSJT-X_ since
|
||||||
2013, 2015, and 2016, respectively.
|
2013, 2015, and 2016, respectively. Bill Somerville died suddenly and
|
||||||
|
unexpectedly in December 2021; Uwe Risse, DG2YCB, joined the core
|
||||||
|
development team soon afterward, and Brian Moran, N9ADG, in 2022.
|
||||||
|
|
||||||
_WSJT-X_ Version {VERSION_MAJOR}.{VERSION_MINOR} offers eleven
|
_WSJT-X_ Version {VERSION_MAJOR}.{VERSION_MINOR} offers eleven
|
||||||
different protocols or modes: *FST4*, *FT4*, *FT8*, *JT4*, *JT9*,
|
different protocols or modes: *FST4*, *FT4*, *FT8*, *JT4*, *JT9*,
|
||||||
@ -70,7 +72,8 @@ provides a mapping facility, archival storage, and many other
|
|||||||
features.
|
features.
|
||||||
|
|
||||||
*Echo* mode allows you to detect and measure your own station's echoes
|
*Echo* mode allows you to detect and measure your own station's echoes
|
||||||
from the moon, even if they are far below the audible threshold.
|
from the moon and to make other measurements useful for optimizing
|
||||||
|
your EME station's performance.
|
||||||
|
|
||||||
_WSJT-X_ provides spectral displays for receiver passbands as wide as
|
_WSJT-X_ provides spectral displays for receiver passbands as wide as
|
||||||
5 kHz, flexible rig control for nearly all modern radios used by
|
5 kHz, flexible rig control for nearly all modern radios used by
|
||||||
@ -89,3 +92,11 @@ Release candidates should be used _only_ during a short testing
|
|||||||
period. They carry an implied obligation to provide feedback to the
|
period. They carry an implied obligation to provide feedback to the
|
||||||
program development group. Candidate releases should not be used on
|
program development group. Candidate releases should not be used on
|
||||||
the air after a full release with the same number is made.
|
the air after a full release with the same number is made.
|
||||||
|
|
||||||
|
A companion program _MAP65_, written by K1JT, is designed for EME
|
||||||
|
communication using the JT65 and Q65 protocols. When used with RF
|
||||||
|
hardware providing coherent signal channels for two orthogonal
|
||||||
|
polarizations, the program provides automatic polarization-matched
|
||||||
|
reception for every JT65 or Q65 signal in a 90 kHz passband. On the
|
||||||
|
Windows platform, _MAP65_ is installed automatically along with
|
||||||
|
_WSJT-X_.
|
||||||
|
@ -69,9 +69,9 @@ Check *Auto Seq* on the main window to enable this feature:
|
|||||||
|
|
||||||
image::auto-seq.png[align="center",alt="AutoSeq"]
|
image::auto-seq.png[align="center",alt="AutoSeq"]
|
||||||
|
|
||||||
When calling CQ you may also choose to check the box *Call 1st*.
|
When calling CQ you may choose to select *CQ: First* to reply
|
||||||
_WSJT-X_ will then respond automatically to the first decoded
|
automatically to the first decoded responder, or *CQ: Max Dist*
|
||||||
responder to your CQ.
|
to reply to the most distant responder.
|
||||||
|
|
||||||
NOTE: When *Auto-Seq* is enabled, the program de-activates *Enable Tx*
|
NOTE: When *Auto-Seq* is enabled, the program de-activates *Enable Tx*
|
||||||
at the end of each QSO. It is not intended that _WSJT-X_ should make
|
at the end of each QSO. It is not intended that _WSJT-X_ should make
|
||||||
@ -83,14 +83,14 @@ operator replacement.
|
|||||||
|
|
||||||
The FT4, FT8, and MSK144 protocols support special messages optimized
|
The FT4, FT8, and MSK144 protocols support special messages optimized
|
||||||
for *NA VHF* and *EU VHF* contests. FT4 and FT8 also support messages
|
for *NA VHF* and *EU VHF* contests. FT4 and FT8 also support messages
|
||||||
for *ARRL Field Day*, *ARRL RTTY Roundup*, and the *WW Digi* contest.
|
for *ARRL Field Day*, *FT Roundup*, and the *WW Digi* contest.
|
||||||
The decoders recognize and decode these messages at any time.
|
The decoders recognize and decode these messages at any time.
|
||||||
Configure the program to automatically generate the required message
|
Configure the program to automatically generate the required message
|
||||||
types for contest exchanges and carry out suitable auto-sequencing by
|
types for contest exchanges and carry out suitable auto-sequencing by
|
||||||
selecting a supported operating activity on the *Settings | Advanced*
|
selecting a supported operating activity on the *Settings | Advanced*
|
||||||
tab. Model QSOs then proceed as follows, for each event type:
|
tab. Model QSOs then proceed as follows, for each event type:
|
||||||
|
|
||||||
*NA VHF Contest*
|
*NA VHF Contest* and *ARRL International Digital Contest*
|
||||||
|
|
||||||
CQ TEST K1ABC FN42
|
CQ TEST K1ABC FN42
|
||||||
K1ABC W9XYZ EN37
|
K1ABC W9XYZ EN37
|
||||||
@ -98,8 +98,9 @@ tab. Model QSOs then proceed as follows, for each event type:
|
|||||||
K1ABC W9XYZ RRR
|
K1ABC W9XYZ RRR
|
||||||
W9XYZ K1ABC 73
|
W9XYZ K1ABC 73
|
||||||
|
|
||||||
Either callsign (or both) may have /R appended. You can use RR73 in
|
Either callsign (or both) may have /R appended to signify a Rover in a
|
||||||
place of RRR, and the final 73 is optional.
|
VHF contest. You can use RR73 in place of RRR, and the final 73 is
|
||||||
|
optional.
|
||||||
|
|
||||||
|
|
||||||
*EU VHF Contest*
|
*EU VHF Contest*
|
||||||
@ -124,7 +125,7 @@ to upgrade _WSJT-X_ if you will use *EU VHF Contest* messages.
|
|||||||
W9XYZ K1ABC R 2B EMA
|
W9XYZ K1ABC R 2B EMA
|
||||||
K1ABC W9XYZ RR73
|
K1ABC W9XYZ RR73
|
||||||
|
|
||||||
*ARRL RTTY Roundup*
|
*FT Roundup*
|
||||||
|
|
||||||
CQ RU K1ABC FN42
|
CQ RU K1ABC FN42
|
||||||
K1ABC W9XYZ 579 WI
|
K1ABC W9XYZ 579 WI
|
||||||
@ -144,7 +145,7 @@ station's log and not the supposed QSO partner's. To avoid Not-in-Log
|
|||||||
(NIL) penalties for yourself and others, we recommend the following
|
(NIL) penalties for yourself and others, we recommend the following
|
||||||
guidelines for contest logging with FT4, FT8, and MSK144:
|
guidelines for contest logging with FT4, FT8, and MSK144:
|
||||||
|
|
||||||
- Activate and learn to use the alternate F1-F6 bindings selectable
|
- Activate and learn to use the *Alternate F1-F6 bindings* selectable
|
||||||
on the *Settings | General* tab.
|
on the *Settings | General* tab.
|
||||||
|
|
||||||
- Always log a QSO when you have received RRR, RR73, or 73 from a
|
- Always log a QSO when you have received RRR, RR73, or 73 from a
|
||||||
@ -153,8 +154,9 @@ guidelines for contest logging with FT4, FT8, and MSK144:
|
|||||||
- Log a QSO when you send RR73 or 73 if you are reasonably confident
|
- Log a QSO when you send RR73 or 73 if you are reasonably confident
|
||||||
it will be copied. But be sure to watch for any indication that it
|
it will be copied. But be sure to watch for any indication that it
|
||||||
was not copied, and then take appropriate action. For example, if
|
was not copied, and then take appropriate action. For example, if
|
||||||
you receive the Tx3 message (R plus contest exchange) again, hit F4
|
you receive the Tx3 message (R plus contest exchange) again, and if
|
||||||
to re-send your RR73.
|
you have activated the *Alternate F1-F6 bindings*, hit *F4* to
|
||||||
|
re-send your RR73.
|
||||||
|
|
||||||
[[COMP-CALL]]
|
[[COMP-CALL]]
|
||||||
=== Nonstandard Callsigns
|
=== Nonstandard Callsigns
|
||||||
|
@ -70,7 +70,7 @@ and slope of a straight line to the whole sequence of calibration
|
|||||||
measurements, as shown for these measurements in the graph plotted
|
measurements, as shown for these measurements in the graph plotted
|
||||||
below. Software tools for completing this task are included with the
|
below. Software tools for completing this task are included with the
|
||||||
_WSJT-X_ installation, and detailed instructions for their use are
|
_WSJT-X_ installation, and detailed instructions for their use are
|
||||||
available at https://physics.princeton.edu/pulsar/k1jt/FMT_User.pdf.
|
available at https://wsjt.sourceforge.io/FMT_User.pdf.
|
||||||
|
|
||||||
Using these tools and no specialized hardware beyond your
|
Using these tools and no specialized hardware beyond your
|
||||||
CAT-interfaced radio, you can calibrate the radio to better than 1 Hz
|
CAT-interfaced radio, you can calibrate the radio to better than 1 Hz
|
||||||
|
@ -1,27 +1,60 @@
|
|||||||
[[NEW_FEATURES]]
|
[[NEW_FEATURES]]
|
||||||
=== New in Version {VERSION}
|
=== New in Version {VERSION_MAJOR}.{VERSION_MINOR}
|
||||||
|
|
||||||
_WSJT-X 2.5.0_ introduces an enhanced Q65 decoder that measures and
|
_WSJT-X 2.7_ introduces a new program called *QMAP*, a new Special
|
||||||
compensates for linear frequency drifts of Q65 signals. Activate this
|
Operating Activity *Q65 Pileup*, an option to *Update Hamlib* at the
|
||||||
feature by setting a spinner control *Max Drift* on the _WSJT-X_ main
|
click of a button, and a number of other enhancements and bug fixes.
|
||||||
window to a number greater than 0. We suggest a setting of 10 for
|
|
||||||
submode Q65-60A, the recommended submode for EME on 50 and 144 MHz,
|
- QMAP and Q65 Pileup mode are of particular interest to those engaged
|
||||||
which will accommodate drift rates up to 20 Hz/minute. Similarly, we
|
in Earth-Moon-Earth (EME) communication, but other applications may
|
||||||
suggest *Max Drift* = 40 for submode Q65-15C, used for for 10 GHz QSOs
|
be found for them as well. QMAP is currently available for Windows
|
||||||
(up to 900 km) via aircraft scatter and drift rates up to about 20
|
only; it is derived from MAP65, an older program used since 2007 for
|
||||||
Hz/s.
|
EME. QMAP provides single-polarization receive-only capabilities for
|
||||||
|
any one of the 60-second submodes of Q65. It allows you to monitor
|
||||||
|
all traffic in a 90 kHz sub-band while conducting EME QSOs in the
|
||||||
|
usual way with _WSJT-X_. Q65 Pileup mode helps DX operators using
|
||||||
|
Q65 in pileup circumstances with many simultaneous callers and very
|
||||||
|
weak signals, such as those experienced by 6-meter EME DXpeditions.
|
||||||
|
Further details on QMAP and Q65 Pileup mode are available in a
|
||||||
|
Quick-Start guide posted here:
|
||||||
|
https://wsjt.sourceforge.io/Quick_Start_WSJT-X_2.7_QMAP.pdf
|
||||||
|
|
||||||
|
- A button *Update Hamlib* now appears on the *Settings -> Radio* tab.
|
||||||
|
On Windows it allows the user to automatically download and install
|
||||||
|
the latest version of the rig-control features in Hamlib. The
|
||||||
|
previously used version is backed up, so you can easily revert the
|
||||||
|
procedure if necessary. Names and dates of the active and backup
|
||||||
|
versions are clearly displayed.
|
||||||
|
|
||||||
|
- Spotting to *PSK Reporter* has been made more efficient. Redundant
|
||||||
|
spots are omitted, and all posts are spread more widely in time. If
|
||||||
|
your station locator is changed, for example during portable
|
||||||
|
operations, your new locator will be sent automatically to PSK
|
||||||
|
Reporter.
|
||||||
|
|
||||||
|
- *Fox* mode now provides more convenient handling of the two callsign
|
||||||
|
queues, and Fox's Log window displays statistical data on recent QSO
|
||||||
|
rate. Multi-streamed messages transmitted by _MSHV_ are now handled
|
||||||
|
properly when _WSJT-X_ is in *Hound* mode.
|
||||||
|
|
||||||
|
- The cty.dat file can now be updated by clicking a button on the
|
||||||
|
*Settings -> Colors* tab.
|
||||||
|
|
||||||
|
- The FT Roundup message protocol now allows the exchange of static
|
||||||
|
4-digit numbers in place of serial numbers. This extends the
|
||||||
|
usability of the FT RU protocol for other contest types.
|
||||||
|
|
||||||
|
- Features for main-window switching between modes have been enhanced
|
||||||
|
so that submode and status of the *Sh* and *Fast* checkboxes are
|
||||||
|
saved and restored by mode. Right-click events were made more
|
||||||
|
intuitive and consistent. Right-clicking the Q65 button enables Q65
|
||||||
|
Pileup mode, and a left-click brings you back to the normal Q65
|
||||||
|
mode. Right-click on the JT65 button switches to JT9 mode.
|
||||||
|
|
||||||
|
- Message averaging is now allowed only when *VHF features* are
|
||||||
|
enabled. Main window text box labels are changed to read "`Single
|
||||||
|
Period Decodes`" and "`Average Decodes`" when averaging is enabled.
|
||||||
|
|
||||||
|
Further details on minor changes can be found in the Release Notes,
|
||||||
|
accessible from the _WSJT-X_ *Help* menu.
|
||||||
|
|
||||||
On the Windows platform only, _WSJT-X 2.5.0_ installations now include
|
|
||||||
an early version of _MAP65 3.0_. This program works together with
|
|
||||||
suitable hardware that converts RF to baseband. The hardware/software
|
|
||||||
combination implements a wideband, highly optimized receiver for the
|
|
||||||
Q65 and JT65 protocols, with matching transmitting features that
|
|
||||||
require a standard SSB transceiver. _MAP65_ is effective in both
|
|
||||||
single-polarization and dual-polarization systems. If two
|
|
||||||
polarization channels are available, _MAP65_ determines and matches
|
|
||||||
the linear polarization angle of each decodable signal. This
|
|
||||||
capability provides a major advantage for efficient EME communication
|
|
||||||
on bands up to 432 MHz. A single-channel _MAP65_ system works
|
|
||||||
extremely well for EME on 1296 MHz and higher bands, displaying all
|
|
||||||
signals in a 90 kHz sub-band and decoding all the Q65 and JT65
|
|
||||||
signals.
|
|
||||||
|
@ -263,8 +263,8 @@ which the probability of decoding is 50% or higher.
|
|||||||
|
|
||||||
[[SLOW_TAB]]
|
[[SLOW_TAB]]
|
||||||
.Parameters of Slow Modes
|
.Parameters of Slow Modes
|
||||||
[width="100%",cols="3h,^3,^2,^1,^2,^2,^2,^2,^2,^2",frame=topbot,options="header"]
|
[width="100%",cols="3h,^3,^2,^1,6*^2",frame=topbot,options="header"]
|
||||||
|===============================================================================
|
|===
|
||||||
|Mode |FEC Type |(n,k) | Q|Modulation type|Keying rate (Baud)|Bandwidth (Hz)
|
|Mode |FEC Type |(n,k) | Q|Modulation type|Keying rate (Baud)|Bandwidth (Hz)
|
||||||
|Sync Energy|Tx Duration (s)|S/N Threshold (dB)
|
|Sync Energy|Tx Duration (s)|S/N Threshold (dB)
|
||||||
|FST4-15 |LDPC | (240,101)| 4| 4-GFSK| 16.67 | 66.7 | 0.25| 9.6 | -20.7
|
|FST4-15 |LDPC | (240,101)| 4| 4-GFSK| 16.67 | 66.7 | 0.25| 9.6 | -20.7
|
||||||
@ -289,7 +289,7 @@ which the probability of decoding is 50% or higher.
|
|||||||
|FST4W-300 |LDPC | (240,74)| 4| 4-GFSK| 0.558 | 2.2 | 0.25| 286.7 | -36.8
|
|FST4W-300 |LDPC | (240,74)| 4| 4-GFSK| 0.558 | 2.2 | 0.25| 286.7 | -36.8
|
||||||
|FST4W-900 |LDPC | (240,74)| 4| 4-GFSK| 0.180 | 0.72 | 0.25| 887.5 | -41.7
|
|FST4W-900 |LDPC | (240,74)| 4| 4-GFSK| 0.180 | 0.72 | 0.25| 887.5 | -41.7
|
||||||
|FST4W-1800 |LDPC | (240,74)| 4| 4-GFSK| 0.089 | 0.36 | 0.25| 1792.0| -44.8
|
|FST4W-1800 |LDPC | (240,74)| 4| 4-GFSK| 0.089 | 0.36 | 0.25| 1792.0| -44.8
|
||||||
|===============================================================================
|
|===
|
||||||
|
|
||||||
LDPC = Low Density Parity Check
|
LDPC = Low Density Parity Check
|
||||||
RS = Reed Solomon
|
RS = Reed Solomon
|
||||||
@ -304,7 +304,7 @@ comparable to tone spacing.
|
|||||||
[[SLOW_SUBMODES]]
|
[[SLOW_SUBMODES]]
|
||||||
.Parameters of Slow Submodes JT4, JT9, and JT65 with Selectable Tone Spacings
|
.Parameters of Slow Submodes JT4, JT9, and JT65 with Selectable Tone Spacings
|
||||||
[width="50%",cols="h,3*^",frame=topbot,options="header"]
|
[width="50%",cols="h,3*^",frame=topbot,options="header"]
|
||||||
|=====================================
|
|===
|
||||||
|Mode |Tone Spacing |BW (Hz)|S/N (dB)
|
|Mode |Tone Spacing |BW (Hz)|S/N (dB)
|
||||||
|JT4A |4.375| 17.5 |-23
|
|JT4A |4.375| 17.5 |-23
|
||||||
|JT4B |8.75 | 30.6 |-22
|
|JT4B |8.75 | 30.6 |-22
|
||||||
@ -324,18 +324,18 @@ comparable to tone spacing.
|
|||||||
|JT65A |2.692| 177.6 |-25
|
|JT65A |2.692| 177.6 |-25
|
||||||
|JT65B |5.383| 352.6 |-25
|
|JT65B |5.383| 352.6 |-25
|
||||||
|JT65C |10.767| 702.5 |-25
|
|JT65C |10.767| 702.5 |-25
|
||||||
|=====================================
|
|===
|
||||||
|
|
||||||
.Parameters of Q65 Submodes
|
.Parameters of Q65 Submodes
|
||||||
[width="100%",cols="h,5*^",frame=topbot,options="header"]
|
[width="100%",cols="h,5*^",frame=topbot,options="header"]
|
||||||
|=====================================
|
|===
|
||||||
|T/R Period (s) |A Spacing Width (Hz)|B Spacing Width (Hz)|C Spacing Width (Hz)|D Spacing Width (Hz)|E Spacing Width (Hz)
|
|T/R Period (s) |A Spacing Width (Hz)|B Spacing Width (Hz)|C Spacing Width (Hz)|D Spacing Width (Hz)|E Spacing Width (Hz)
|
||||||
|15|6.67     4.33|13.33     867|26.67     1733|N/A|N/A
|
|15|6.67     4.33|13.33     867|26.67     1733|N/A|N/A
|
||||||
|30|3.33     217|6.67     433|13.33     867| 26.67     1733| N/A
|
|30|3.33     217|6.67     433|13.33     867| 26.67     1733| N/A
|
||||||
|60|1.67     108|3.33     217|6.67     433|13.33     867|26.67     1733
|
|60|1.67     108|3.33     217|6.67     433|13.33     867|26.67     1733
|
||||||
|120|0.75     49|1.50     98|3.00     195|6.00     390| 12.00     780
|
|120|0.75     49|1.50     98|3.00     195|6.00     390| 12.00     780
|
||||||
|300|0.29     19|0.58     38|1.16     75|2.31     150|4.63     301
|
|300|0.29     19|0.58     38|1.16     75|2.31     150|4.63     301
|
||||||
|=====================================
|
|===
|
||||||
|
|
||||||
[[FAST_MODES]]
|
[[FAST_MODES]]
|
||||||
=== Fast Modes
|
=== Fast Modes
|
||||||
@ -390,8 +390,8 @@ and your QSO partner ± 200 Hz.
|
|||||||
==== Summary
|
==== Summary
|
||||||
|
|
||||||
.Parameters of Fast Modes
|
.Parameters of Fast Modes
|
||||||
[width="90%",cols="3h,^3,^2,^1,^2,^2,^2,^2,^2",frame="topbot",options="header"]
|
[width="90%",cols="3h,^3,^2,^1,5*^2",frame="topbot",options="header"]
|
||||||
|=====================================================================
|
|===
|
||||||
|Mode |FEC Type |(n,k) | Q|Modulation Type|Keying rate (Baud)
|
|Mode |FEC Type |(n,k) | Q|Modulation Type|Keying rate (Baud)
|
||||||
|Bandwidth (Hz)|Sync Energy|Tx Duration (s)
|
|Bandwidth (Hz)|Sync Energy|Tx Duration (s)
|
||||||
|JT9E |K=32, r=1/2|(206,72)| 8| 9-FSK| 25.0 | 225 | 0.19| 3.400
|
|JT9E |K=32, r=1/2|(206,72)| 8| 9-FSK| 25.0 | 225 | 0.19| 3.400
|
||||||
@ -400,4 +400,4 @@ and your QSO partner ± 200 Hz.
|
|||||||
|JT9H |K=32, r=1/2|(206,72)| 8| 9-FSK|200.0 | 1800 | 0.19| 0.425
|
|JT9H |K=32, r=1/2|(206,72)| 8| 9-FSK|200.0 | 1800 | 0.19| 0.425
|
||||||
|MSK144 |LDPC |(128,90)| 2| OQPSK| 2000 | 2400 | 0.11| 0.072
|
|MSK144 |LDPC |(128,90)| 2| OQPSK| 2000 | 2400 | 0.11| 0.072
|
||||||
|MSK144 Sh|LDPC |(32,16) | 2| OQPSK| 2000 | 2400 | 0.20| 0.020
|
|MSK144 Sh|LDPC |(32,16) | 2| OQPSK| 2000 | 2400 | 0.20| 0.020
|
||||||
|=====================================================================
|
|===
|
||||||
|
@ -38,15 +38,14 @@ with twice or four times the normal tone spacing. This feature is
|
|||||||
intended for use with specialized LF/MF transmitters that divide
|
intended for use with specialized LF/MF transmitters that divide
|
||||||
generated frequencies by 2 or 4 as part of the transmission process.
|
generated frequencies by 2 or 4 as part of the transmission process.
|
||||||
|
|
||||||
_Special Operating Activity: Generation of FT4, FT8, and MSK144
|
_Special Operating Activity_
|
||||||
messages_
|
|
||||||
|
|
||||||
- Check this box and select the type of activity to enable
|
- Check this box and select the type of activity to enable
|
||||||
auto-generation of special message formats for contesting and
|
auto-generation of special message formats for contesting and
|
||||||
DXpeditions. For *ARRL Field Day*, enter your operating Class and
|
DXpeditions. For *ARRL Field Day*, enter your operating Class and
|
||||||
ARRL/RAC section; for *ARRL RTTY Roundup*, enter your state or province.
|
ARRL/RAC section; for *FT Roundup*, enter your state or province.
|
||||||
Use “DX” for section or state if you are not in the US or Canada. In
|
Use “DX” for section or state if you are not in the US or Canada. In
|
||||||
the RTTY Roundup, Stations in Alaska and Hawaii should enter “DX”.
|
the FT Roundup, Stations in Alaska and Hawaii should enter “DX”.
|
||||||
|
|
||||||
- Check *Fox* if you are a DXpedition station operating in FT8
|
- Check *Fox* if you are a DXpedition station operating in FT8
|
||||||
DXpedition Mode. Check *Hound* if you wish to make QSOs with such a
|
DXpedition Mode. Check *Hound* if you wish to make QSOs with such a
|
||||||
|
@ -10,15 +10,17 @@ preference; you can modify the frequency table as desired.
|
|||||||
image::settings-frequencies.png[align="center",alt="Frequency Screen"]
|
image::settings-frequencies.png[align="center",alt="Frequency Screen"]
|
||||||
|
|
||||||
- To change an existing entry, double-click to edit it, type a desired
|
- To change an existing entry, double-click to edit it, type a desired
|
||||||
frequency in MHz or select from the drop down list of options, then
|
frequency in MHz or select from the drop-down list of options, then
|
||||||
hit *Enter* on the keyboard. The program will format your changed
|
hit *Enter* on the keyboard. You can mark an entry as Preferred,
|
||||||
entry appropriately.
|
provide a descriptive label, and indicate starting and ending dates
|
||||||
|
and times for it to be displayed on the band-select control. The
|
||||||
|
program will format your changed entries appropriately.
|
||||||
|
|
||||||
- To add a new entry, right-click anywhere on the frequency table and
|
- To add a new entry, right-click anywhere on the frequency table and
|
||||||
select *Insert*. Enter a frequency in MHz in the pop-up box and
|
select *Insert*. Enter your desired information and click *OK*. The
|
||||||
select the desired mode (or leave the Mode selection as *All*). Then
|
table may include more than one frequency for a given mode and band.
|
||||||
click *OK*. The table may include more than one frequency for a given
|
|
||||||
band.
|
image::Add_Frequency.png[align="center",alt="Add Frequency window"]
|
||||||
|
|
||||||
- To delete an entry, right-click it and select *Delete*, multiple
|
- To delete an entry, right-click it and select *Delete*, multiple
|
||||||
entries can be deleted in a single operation by selecting them before
|
entries can be deleted in a single operation by selecting them before
|
||||||
|
@ -31,7 +31,7 @@ image::RadioTab.png[align="center",alt="Radio Tab"]
|
|||||||
suitable.
|
suitable.
|
||||||
|
|
||||||
* _CAT Control_: To have _WSJT-X_ control the radio directly rather
|
* _CAT Control_: To have _WSJT-X_ control the radio directly rather
|
||||||
than though another program, make the following settings:
|
than through another program, make the following settings:
|
||||||
|
|
||||||
** Select the *Serial Port* or *Network Server* including the service
|
** Select the *Serial Port* or *Network Server* including the service
|
||||||
port number used to communicate with your radio.
|
port number used to communicate with your radio.
|
||||||
@ -39,7 +39,7 @@ image::RadioTab.png[align="center",alt="Radio Tab"]
|
|||||||
+
|
+
|
||||||
|
|
||||||
NOTE: A special value of *USB* is available for custom USB devices
|
NOTE: A special value of *USB* is available for custom USB devices
|
||||||
like those used by some SDR kits. This is not the same a virtual
|
like those used by some SDR kits. This is not the same as the virtual
|
||||||
serial port provided by USB connected transceivers and CAT
|
serial port provided by USB connected transceivers and CAT
|
||||||
interfaces, for those use the COM or serial port name that
|
interfaces, for those use the COM or serial port name that
|
||||||
refers to them.
|
refers to them.
|
||||||
|
@ -7,8 +7,11 @@ messages such as the examples shown below.
|
|||||||
|
|
||||||
image::tx-macros.png[align="center",alt="Tx Macros Screen"]
|
image::tx-macros.png[align="center",alt="Tx Macros Screen"]
|
||||||
|
|
||||||
- To add a new message to the list, enter the desired text (up to 13
|
- To add a new message to the list, enter the desired text in the
|
||||||
characters) in the entry field at top, then click *Add*.
|
entry field at top, then click *Add*.
|
||||||
|
|
||||||
|
- Remember that a transmitted free-text message is limited to 13
|
||||||
|
characters, including blanks.
|
||||||
|
|
||||||
- To remove an unwanted message, click on the message and then on
|
- To remove an unwanted message, click on the message and then on
|
||||||
*Delete*.
|
*Delete*.
|
||||||
@ -18,3 +21,7 @@ new order will be preserved when _WSJT-X_ is restarted.
|
|||||||
|
|
||||||
- Messages can also be added from the main window's *Tx5*
|
- Messages can also be added from the main window's *Tx5*
|
||||||
field. Simply hit [Enter] after the message has been entered.
|
field. Simply hit [Enter] after the message has been entered.
|
||||||
|
|
||||||
|
- If the first word of a message is $DXCALL (or the shortened form
|
||||||
|
$DX), that word will be replaced on transmission by the base callsign
|
||||||
|
in the *DxCall* field.
|
||||||
|
@ -2,19 +2,17 @@
|
|||||||
|
|
||||||
The best source of help in setting up your station or configuring
|
The best source of help in setting up your station or configuring
|
||||||
_WSJT-X_ is the {wsjtx_group} at email address
|
_WSJT-X_ is the {wsjtx_group} at email address
|
||||||
wsjtx@groups.io. The chances are good that someone with
|
wsjtgroup@groups.io. The chances are good that someone with
|
||||||
similar interests and equipment has already solved your problem and
|
similar interests and equipment has already solved your problem and
|
||||||
will be happy to help. To post messages here you will need to join
|
will be happy to help. To post messages here you will need to
|
||||||
the group.
|
{wsjtx_group2}.
|
||||||
|
|
||||||
=== Bug Reports
|
=== Bug Reports
|
||||||
|
|
||||||
One of your responsibilities as a _WSJT-X_ user is to help the
|
One of your responsibilities as a _WSJT-X_ user is to help the
|
||||||
volunteer programmers to make the program better. Bugs may be
|
volunteer programmers to make the program better. Bugs may be
|
||||||
reported to the WSJTX forum on Groups.io {wsjtgroup_mail} or the WSJT
|
reported preferably to the WSJT Developers email list
|
||||||
Developers list (wsjt-devel@lists.sourceforge.net). Again, you will
|
(wsjt-devel@lists.sourceforge.net). You will need to {wsjt-devel2}.
|
||||||
need to join the group or subscribe to the list. You can register for
|
|
||||||
the list {wsjt-devel}.
|
|
||||||
|
|
||||||
To be useful, bug reports should include at least the following
|
To be useful, bug reports should include at least the following
|
||||||
information:
|
information:
|
||||||
|
16
doc/user_guide/en/tutorial-download-samples.adoc
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
// Status=review
|
||||||
|
|
||||||
|
[[DOWNLOAD_SAMPLES]]
|
||||||
|
=== Download Samples
|
||||||
|
|
||||||
|
The following steps will download sample audio Wave files that were originally recorded
|
||||||
|
by WSJT-X. These files can be read in and processed by WSJT-X to simulate realtime
|
||||||
|
operation.
|
||||||
|
|
||||||
|
- Select *Download samples...* from the *Help* menu.
|
||||||
|
|
||||||
|
- Download some or all of the available sample files using checkboxes
|
||||||
|
on the screen shown below. For this tutorial you will need at least
|
||||||
|
the FT8 files.
|
||||||
|
|
||||||
|
image::download_samples.png[width=400,align="center",alt="Download Samples"]
|
@ -1,121 +0,0 @@
|
|||||||
// Status=review
|
|
||||||
.Main Window:
|
|
||||||
- Select *JT9+JT65* on the *Mode* menu.
|
|
||||||
- Toggle the *Tx mode* button to read *Tx JT65 #*, and set the Tx and Rx
|
|
||||||
frequencies to 1718 Hz.
|
|
||||||
- Double-click on *Erase* to clear both text windows.
|
|
||||||
|
|
||||||
.Wide Graph Settings:
|
|
||||||
|
|
||||||
- *Bins/Pixel* = 7
|
|
||||||
- *JT65 .... JT9* = 2500
|
|
||||||
- Adjust the width of the Wide Graph window so that the upper
|
|
||||||
frequency limit is approximately 4000 Hz.
|
|
||||||
|
|
||||||
.Open a Wave File:
|
|
||||||
|
|
||||||
- Select *File | Open* and navigate to +...\save\samples\JT9+JT65\130610_2343.wav+.
|
|
||||||
The waterfall should look something like this:
|
|
||||||
|
|
||||||
//.130610_2343.wav Decode
|
|
||||||
[[X14]]
|
|
||||||
image::130610_2343-wav-80.png[align="left",alt="Wide Graph Decode 130610_2343"]
|
|
||||||
|
|
||||||
The position of the blue marker on the waterfall scale is
|
|
||||||
set by the spinner control *JT65 nnnn JT9*, where nnnn is an audio
|
|
||||||
frequency in Hz. In *JT9+JT65* mode the program will automatically
|
|
||||||
decode JT9 signals only above this frequency. JT65 signals will be
|
|
||||||
decoded over the full displayed frequency range.
|
|
||||||
|
|
||||||
JT9 signals appear in the *Cumulative* spectrum as nearly rectangular
|
|
||||||
shapes about 16 Hz wide. They have no clearly visible sync tone like
|
|
||||||
the one at the low-frequency edge of all JT65 signals. By convention
|
|
||||||
the nominal frequency of both JT9 and JT65 signals is taken to be that
|
|
||||||
of the lowest tone, at the left edge of its spectrum.
|
|
||||||
|
|
||||||
This sample file contains 17 decodable signals — nine in JT65 mode
|
|
||||||
(flagged with the character # in the decoded text windows), and eight
|
|
||||||
in JT9 mode (flagged with @). On multi-core computers the decoders
|
|
||||||
for JT9 and JT65 modes run simultaneously, so their results will be
|
|
||||||
interspersed. The *Band Activity* window contains all decodes (you
|
|
||||||
might need to scroll back in the window to see some of them). A
|
|
||||||
signal at the frequency specified by the green marker is given
|
|
||||||
decoding priority, and its message is displayed also in the *Rx
|
|
||||||
Frequency* window.
|
|
||||||
|
|
||||||
[[FigDecodes]]
|
|
||||||
image::decodes.png[align="center"]
|
|
||||||
|
|
||||||
- Confirm that mouse-click behavior is similar to that described
|
|
||||||
earlier, in <<TUT_EX1,Example 1>>. _WSJT-X_ automatically determines
|
|
||||||
the mode of each JT9 or JT65 message.
|
|
||||||
|
|
||||||
+
|
|
||||||
|
|
||||||
TIP: When you double-click on a signal in the waterfall it will be
|
|
||||||
properly decoded even if on the "`wrong`" side of the *JT65 nnnn JT9*
|
|
||||||
marker. The Tx mode automatically switches to that of the decoded
|
|
||||||
signal and the Rx and Tx frequency markers on the waterfall scale
|
|
||||||
resize themselves accordingly. When selecting a JT65 signal, click on
|
|
||||||
the sync tone at its left edge.
|
|
||||||
|
|
||||||
- Double-click on the waterfall near 815 Hz: a JT65 message
|
|
||||||
originating from W7VP will be decoded and appear in the *Rx Frequency*
|
|
||||||
window. Between the *UTC* and *Freq* columns on the decoded text line
|
|
||||||
you will find *dB*, the measured signal-to-noise ratio, and *DT*, the
|
|
||||||
signal's time offset in seconds relative to your computer clock.
|
|
||||||
|
|
||||||
[width="80%",align="center",cols="^10,2*^8,2*^10,54",options="header"]
|
|
||||||
|===
|
|
||||||
|UTC|dB|DT|Freq|Mode|Message
|
|
||||||
|+2343+|+-7+|+0.3+|+815+|+#+|+KK4DSD W7VP -16+
|
|
||||||
|===
|
|
||||||
|
|
||||||
- Double-click on the waterfall at 3196 Hz. The program will decode a
|
|
||||||
JT9 message from IZ0MIT:
|
|
||||||
|
|
||||||
[width="80%",align="center",cols="^10,2*^8,2*^10,54",options="header"]
|
|
||||||
|===
|
|
||||||
|UTC|dB|DT|Freq|Mode|Message
|
|
||||||
|+2343+|+-8+|+0.3+|+3196+|+@+|+WB8QPG IZ0MIT -11+
|
|
||||||
|===
|
|
||||||
|
|
||||||
- Scroll back in the *Band Activity* window and double-click on the
|
|
||||||
message `CQ DL7ACA JO40`. The program will set *Tx mode* to JT65 and
|
|
||||||
the Rx frequency to that of DL7ACA, 975 Hz. If you hold down the
|
|
||||||
*Ctrl* key, both Rx and Tx frequencies will be moved. If you had
|
|
||||||
checked *Double-click on call sets Tx Enable* on the *Setup* menu, the
|
|
||||||
program would configure itself to begin a transmission and start a QSO
|
|
||||||
with DL7ACA.
|
|
||||||
|
|
||||||
- Hold *Ctrl* down and double-click on the decoded JT65 message `CQ
|
|
||||||
TA4A KM37`. The program will set Tx mode to JT9 and the Rx and Tx
|
|
||||||
frequencies to 3567 Hz. The program is now configured properly for a
|
|
||||||
JT9 QSO with TA4A.
|
|
||||||
|
|
||||||
.Reopen the First Sample File:
|
|
||||||
- Select *File | Open* and navigate to `...\save\samples\130418_1742.wav`.
|
|
||||||
|
|
||||||
Taking full advantage of the wide-band, dual-mode capability of
|
|
||||||
_WSJT-X_ requires a receiver bandwidth of at least 4 kHz. These
|
|
||||||
data were recorded with a much narrower Rx bandwidth, roughly 200 to
|
|
||||||
2400 Hz. If you have no Rx filter wider than about 2.7 kHz, you will
|
|
||||||
be using data like this. For best viewing, adjust *Bins/Pixel* and the
|
|
||||||
width of the Wide Graph so that only the active part of the spectrum
|
|
||||||
shows, say 200 to 2400 Hz. Re-open the example file after any change of
|
|
||||||
*Bins/Pixel* or Wide Graph width, to refresh the waterfall.
|
|
||||||
|
|
||||||
The signals in this file are all JT9 signals. To decode them
|
|
||||||
automatically in *JT9+JT65* mode you’ll need to move the *JT65 nnnn JT9*
|
|
||||||
delimiter down to 1000 Hz or less.
|
|
||||||
|
|
||||||
.Waterfall Controls
|
|
||||||
|
|
||||||
Now is a good time to experiment with the *Start* control and the
|
|
||||||
sliders controlling gain and zero-point of the waterfall and spectrum
|
|
||||||
plots. *Start* determines the frequency displayed at the left side of
|
|
||||||
the waterfall scale. Sliders set the baseline level and gain for the
|
|
||||||
waterfall and the several types of spectra. Good starting values
|
|
||||||
should be close to mid-scale. You might want to uncheck *Flatten*
|
|
||||||
when adjusting the sliders. Re-open the wave file after each change,
|
|
||||||
to see the new results.
|
|
@ -1,27 +1,92 @@
|
|||||||
// Status=review
|
// Status=review
|
||||||
.Main Window:
|
.Main Window:
|
||||||
- Select *FT8* on the *Mode* menu.
|
- Click the *Stop* button on the main window to halt any data acquisition.
|
||||||
|
- Select *FT8* from the *Mode* menu and *Deep* from the *Decode* menu.
|
||||||
- Double-click on *Erase* to clear both text windows.
|
- Double-click on *Erase* to clear both text windows.
|
||||||
|
|
||||||
.Wide Graph Settings:
|
|
||||||
|
|
||||||
- *Bins/Pixel* = 5, *Start* = 100 Hz, *N Avg* = 2
|
|
||||||
- Adjust the width of the Wide Graph window so that the upper
|
|
||||||
frequency limit is approximately 3300 Hz.
|
|
||||||
|
|
||||||
.Open a Wave File:
|
.Open a Wave File:
|
||||||
|
|
||||||
- Select *File | Open* and navigate to
|
- Select *File | Open log directory* and navigate to
|
||||||
+...\save\samples\FT8\181201_180245.wav+. The waterfall and Band
|
+...\save\samples\FT8\210703_133430.wav+. The waterfall and Band
|
||||||
Activity window should look something like the following screen shots.
|
Activity/Rx Frequency windows should look something like the following screen shots:
|
||||||
(This recording was made during the "FT8 Roundup" contest, so most
|
|
||||||
transmissions happen to be using *RTTY Roundup* message formats.)
|
- You may want to pretend you are K1JT
|
||||||
|
by entering that callsign temporarily as *My Call* on the
|
||||||
|
*Settings | General* tab. Your results should then be identical to
|
||||||
|
those shown in the screen shot below. Don't forget to change *My Call*
|
||||||
|
back to your own call when you are done!
|
||||||
|
|
||||||
[[X15]]
|
[[X15]]
|
||||||
image::FT8_waterfall.png[align="left",alt="Wide Graph Decode 170709_135615"]
|
image::FT8_waterfall.png[align="left",alt="Wide Graph Decode 210703_133430"]
|
||||||
|
|
||||||
image::ft8_decodes.png[align="left"]
|
image::ft8_decodes.png[align="left"]
|
||||||
|
|
||||||
|
|
||||||
|
.Decoding Overview
|
||||||
|
|
||||||
|
Decoding takes place at the end of a receive sequence. With *Decode* set
|
||||||
|
to *Deep*, three decoding passes will be done and the *Decode* button on the
|
||||||
|
mainwindow will illuminate three times, once for each pass.
|
||||||
|
The first decoding attempt in each decoding pass is done at the selected Rx frequency,
|
||||||
|
indicated by the U-shaped green marker on the waterfall frequency
|
||||||
|
scale. All decodes appear in the left (*Band Activity*) window. The right
|
||||||
|
(*Rx Frequency*) text window displays any decodes obtained at the current
|
||||||
|
Rx frequency along with any decodes addressed to *My Call* (K1JT in this case).
|
||||||
|
The red marker on the waterfall scale indicates your
|
||||||
|
Tx frequency.
|
||||||
|
|
||||||
|
Twenty-one FT8 signals are decoded from the example file. The number
|
||||||
|
of decodes is shown in a box at the bottom of the main window.
|
||||||
|
When this file was recorded HA5WA was finishing a QSO with K1JT, and
|
||||||
|
his 73 message is shown in red because it is addressed to *My Call* (in this case K1JT).
|
||||||
|
By default, lines containing `CQ`
|
||||||
|
are highlighted in green, and lines with *My Call* (K1JT)
|
||||||
|
in red. Notice that K1JT has two callers; HA0DU and EA3AGB.
|
||||||
|
|
||||||
|
[[X13]]
|
||||||
|
.Decoding Controls
|
||||||
|
|
||||||
|
To gain some feeling for controls frequently used when making QSOs,
|
||||||
|
try double-clicking with the mouse on the decoded text lines and on the
|
||||||
|
waterfall spectral display. You should be able to confirm the
|
||||||
|
following behavior:
|
||||||
|
|
||||||
|
- Double-click on one of the decoded *CQ* messages highlighted in
|
||||||
|
green. These actions produce the following results:
|
||||||
|
|
||||||
|
** Callsign and locator of the station calling CQ are copied to the *DX
|
||||||
|
Call* and *DX Grid* entry fields.
|
||||||
|
|
||||||
|
** Messages are generated for a standard minimal QSO.
|
||||||
|
|
||||||
|
** The *Tx even* box is checked or cleared appropriately, so that you
|
||||||
|
will transmit in the proper (odd or even) minutes.
|
||||||
|
|
||||||
|
** The Rx frequency marker is moved to the frequency of the CQing
|
||||||
|
station.
|
||||||
|
|
||||||
|
** You can modify the double-click behavior by holding down the
|
||||||
|
*Shift* key to move only the Tx frequency or the *Ctrl* key to move
|
||||||
|
both Rx and Tx frequencies. (On a Mac computer, use the *command* key
|
||||||
|
instead of *Ctrl*).
|
||||||
|
|
||||||
|
** In addition, if *Double-click on call sets Tx enable* is checked on the
|
||||||
|
*Settings | General* tab then *Enable Tx* will be activated
|
||||||
|
so that a transmission will start automatically at the proper time.
|
||||||
|
|
||||||
|
|
||||||
|
+
|
||||||
|
|
||||||
|
NOTE: You can prevent your Tx frequency from being changed by checking the
|
||||||
|
box *Hold Tx Freq*.
|
||||||
|
|
||||||
|
- Double-click on the decoded message `K1JT HA0DU KN07`, highlighted
|
||||||
|
in red. Results will be similar to those in the previous step. The Tx
|
||||||
|
frequency (red marker) is not moved unless *Shift* or *Ctrl* is held
|
||||||
|
down. Messages highlighted in red are usually in response to your own
|
||||||
|
CQ or from a tail-ender, and you probably want your Tx frequency to
|
||||||
|
stay where it was.
|
||||||
|
|
||||||
- Click with the mouse anywhere on the waterfall display. The green Rx
|
- Click with the mouse anywhere on the waterfall display. The green Rx
|
||||||
frequency marker will jump to your selected frequency, and the Rx
|
frequency marker will jump to your selected frequency, and the Rx
|
||||||
frequency control on the main window will be updated accordingly.
|
frequency control on the main window will be updated accordingly.
|
||||||
@ -38,11 +103,12 @@ things just described and also invokes the decoder in a small range
|
|||||||
around the Rx frequency. To decode a particular signal, double-click
|
around the Rx frequency. To decode a particular signal, double-click
|
||||||
near the left edge of its waterfall trace.
|
near the left edge of its waterfall trace.
|
||||||
|
|
||||||
- Now double-click on any of the lines of decoded text in the Band
|
- Ctrl-double-click on a signal to set both Rx and Tx frequencies and
|
||||||
Activity window. Any line will show the same behavior, setting
|
decode at the new frequency.
|
||||||
Rx frequency to that of the selected message and leaving Tx frequency
|
|
||||||
unchanged. To change both Rx and Tx frequencies, hold *Ctrl* down
|
- Click *Erase* to clear the right window.
|
||||||
when double-clicking.
|
|
||||||
|
- Double-click *Erase* to clear both text windows.
|
||||||
|
|
||||||
TIP: To avoid QRM from competing callers, it is usually best
|
TIP: To avoid QRM from competing callers, it is usually best
|
||||||
to answer a CQ on a different frequency from that of the CQing
|
to answer a CQ on a different frequency from that of the CQing
|
||||||
@ -53,6 +119,11 @@ box *Hold Tx Freq*.
|
|||||||
TIP: Keyboard shortcuts *Shift+F11* and *Shift+F12* provide an easy
|
TIP: Keyboard shortcuts *Shift+F11* and *Shift+F12* provide an easy
|
||||||
way to move your Tx frequency down or up in 60 Hz steps.
|
way to move your Tx frequency down or up in 60 Hz steps.
|
||||||
|
|
||||||
|
TIP: Sliders and spinner controls respond to *Arrow* key presses
|
||||||
|
and *Page Up/Down* key presses, with the *Page* keys moving the
|
||||||
|
controls in larger steps. You can also type numbers directly into
|
||||||
|
the spinner controls or use the mouse wheel.
|
||||||
|
|
||||||
TIP: An online {ft8_tips} by ZL2IFB offers many additional tips on
|
TIP: An online {ft8_tips} by ZL2IFB offers many additional tips on
|
||||||
operating procedures.
|
operating procedures.
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ frequency limit is approximately 3300 Hz.
|
|||||||
+...\save\samples\FT4\200514_182053.wav+. The waterfall and Band
|
+...\save\samples\FT4\200514_182053.wav+. The waterfall and Band
|
||||||
Activity window should look something like the following screen shots.
|
Activity window should look something like the following screen shots.
|
||||||
This sample file was recorded during a practice contest test session, so
|
This sample file was recorded during a practice contest test session, so
|
||||||
most of the decoded messages use the *RTTY Roundup* message formats.
|
most of the decoded messages use the *FT Roundup* message formats.
|
||||||
|
|
||||||
[[X16]]
|
[[X16]]
|
||||||
image::ft4_waterfall.png[align="left",alt="Wide Graph Decode FT4"]
|
image::ft4_waterfall.png[align="left",alt="Wide Graph Decode FT4"]
|
||||||
@ -34,7 +34,7 @@ frequency control on the main window will be updated accordingly.
|
|||||||
frequency marker and its associated control on the main window will
|
frequency marker and its associated control on the main window will
|
||||||
follow your frequency selections.
|
follow your frequency selections.
|
||||||
|
|
||||||
- Do the same thing with the *Ctrl* key held down. Now the both colored
|
- Do the same thing with the *Ctrl* key held down. Now both colored
|
||||||
markers and both spinner controls will follow your selections.
|
markers and both spinner controls will follow your selections.
|
||||||
|
|
||||||
- Now double-click on any of the lines of decoded text in the Band
|
- Now double-click on any of the lines of decoded text in the Band
|
||||||
@ -56,7 +56,7 @@ and treat it as if you had double-clicked on that line of decoded
|
|||||||
text. Here "best potential QSO partner" means "New Multiplier" (1st
|
text. Here "best potential QSO partner" means "New Multiplier" (1st
|
||||||
priority) or "New Call on Band" (2nd priority). "New Multiplier" is
|
priority) or "New Call on Band" (2nd priority). "New Multiplier" is
|
||||||
currently interpreted to mean "New DXCC"; a more broadly defined
|
currently interpreted to mean "New DXCC"; a more broadly defined
|
||||||
multiplier category (for the ARRL RTTY Roundup rules) will be
|
multiplier category (for the FT Roundup rules) will be
|
||||||
implemented in due course. We may provide additional priority
|
implemented in due course. We may provide additional priority
|
||||||
rankings, for example “New Grid on Band” (useful for North American
|
rankings, for example “New Grid on Band” (useful for North American
|
||||||
VHF contests), sorting by signal strength, etc.
|
VHF contests), sorting by signal strength, etc.
|
||||||
@ -66,7 +66,7 @@ supposed to mean. This is done by configuring suitable options on the
|
|||||||
*Settings | Colors* tab. Selection and ordering of color-highlighting
|
*Settings | Colors* tab. Selection and ordering of color-highlighting
|
||||||
options determines what potential QSO partners will be chosen by the
|
options determines what potential QSO partners will be chosen by the
|
||||||
"Best S+P" feature. Optimum choices will be different for different
|
"Best S+P" feature. Optimum choices will be different for different
|
||||||
contests. In a contest using RTTY Roundup rules we recommend
|
contests. In a contest using FT Roundup rules we recommend
|
||||||
activating *My Call in message*, *New DXCC*, *New Call on Band*, *CQ
|
activating *My Call in message*, *New DXCC*, *New Call on Band*, *CQ
|
||||||
in message* and *Transmitted message*, reading from top to bottom.
|
in message* and *Transmitted message*, reading from top to bottom.
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@ image::FST4_center.png[align="center"]
|
|||||||
It's best to keep the decoding range fairly small, since QRM and
|
It's best to keep the decoding range fairly small, since QRM and
|
||||||
transmissions in other modes or sequence lengths will slow down the
|
transmissions in other modes or sequence lengths will slow down the
|
||||||
decoding process (and of course will be undecodable). By checking
|
decoding process (and of course will be undecodable). By checking
|
||||||
*Single decode* on the the *File | Settings | General* tab, you can
|
*Single decode* on the *File | Settings | General* tab, you can
|
||||||
further limit the decoding range to the setting of *F Tol* on
|
further limit the decoding range to the setting of *F Tol* on
|
||||||
either side of *Rx Freq*.
|
either side of *Rx Freq*.
|
||||||
|
|
||||||
|
@ -1,25 +0,0 @@
|
|||||||
// Status=review
|
|
||||||
|
|
||||||
- Click the *Stop* button on the main window to halt any data acquisition.
|
|
||||||
|
|
||||||
- Select *JT9* from the *Mode* menu and *Deep* from the *Decode* menu.
|
|
||||||
|
|
||||||
- Set the audio frequencies to *Tx 1224 Hz* and *Rx 1224 Hz*.
|
|
||||||
|
|
||||||
+
|
|
||||||
|
|
||||||
TIP: Sliders and spinner controls respond to *Arrow* key presses
|
|
||||||
and *Page Up/Down* key presses, with the *Page* keys moving the
|
|
||||||
controls in larger steps. You can also type numbers directly into
|
|
||||||
the spinner controls or use the mouse wheel.
|
|
||||||
|
|
||||||
[[DOWNLOAD_SAMPLES]]
|
|
||||||
=== Download Samples
|
|
||||||
|
|
||||||
- Select *Download samples...* from the *Help* menu.
|
|
||||||
|
|
||||||
- Download some or all of the available sample files using checkboxes
|
|
||||||
on the screen shown below. For this tutorial you will need at least
|
|
||||||
the JT9 and JT9+JT65 files.
|
|
||||||
|
|
||||||
image::download_samples.png[align="center",alt="Downlod Samples"]
|
|
@ -1,13 +1,46 @@
|
|||||||
// Status=review
|
// Status=review
|
||||||
|
|
||||||
- *Bins/Pixel* = 4
|
The WSJT-X Wide Graph window displays the frequency spectrum of the received audio. Usually, the
|
||||||
- *Start* = 200 Hz
|
upper portion of the window shows a waterfall plot of the frequency spectrum (a spectrogram) and
|
||||||
- *N Avg* = 5
|
a line plot of the current or average spectrum. Controls at the bottom of the window are used to
|
||||||
- *Palette* = Digipan
|
set up the displayed audio frequency range, color palette, and scaling of the spectrum displays.
|
||||||
- *Flatten* = checked
|
A control on the bottom right of the Wide Graph (displayed as *Spec nn%*) lets you control
|
||||||
- Select *Cumulative* for data display
|
the vertical fraction of the window occupied by the spectrum line plot.
|
||||||
- *Gain* and *Zero* sliders for waterfall and spectrum set near midscale
|
It is important to set appropriate lower and upper
|
||||||
- *Spec* = 25%
|
audio frequency limits for the Wide Graph because these limits define the FT8 decoder's search window.
|
||||||
|
For this tutorial, the limits will be set to cover 100-3300 Hz:
|
||||||
|
|
||||||
|
- Set *Start* = 100 Hz.
|
||||||
|
- Set *Bins/Pixel* = 5. Smaller/larger values make the Wide Graph cover a smaller/larger
|
||||||
|
frequency range.
|
||||||
- Use the mouse to grab the left or right edge of the *Wide Graph*, and
|
- Use the mouse to grab the left or right edge of the *Wide Graph*, and
|
||||||
adjust its width so that the upper frequency limit is about 2400 Hz.
|
adjust its width so that the upper frequency limit is about 3300 Hz.
|
||||||
|
|
||||||
|
The *N Avg* setting controls how many spectra are averaged to produce each line in the spectrogram.
|
||||||
|
Smaller values make the spectrogram update more frequently, resulting in signals being more spread
|
||||||
|
out in the vertical (time) direction.
|
||||||
|
On the other hand, larger values make it easier to detect very weak signals:
|
||||||
|
|
||||||
|
- Set *N Avg* = 2.
|
||||||
|
|
||||||
|
The *Palette* setting controls the color scheme used for the spectrogram:
|
||||||
|
|
||||||
|
- Set *Palette* = Fldigi
|
||||||
|
|
||||||
|
When *Flatten* is checked, WSJT-X attempts to correct for slope or curvature in the receiver's
|
||||||
|
passband shape.
|
||||||
|
|
||||||
|
- *Flatten* = checked
|
||||||
|
|
||||||
|
The line plot can be set to display the current (un-averaged) spectrum or the cumulative (averaged)
|
||||||
|
spectrum:
|
||||||
|
|
||||||
|
- Select *Cumulative* for data display
|
||||||
|
- Set the *Gain* and *Zero* sliders for the waterfall and spectrum to near midscale
|
||||||
|
|
||||||
|
The *Spec nn%* setting determines what fraction of the vertical extent of the Wide Graph will
|
||||||
|
be used for the line plot of the spectrum. Setting *Spec* to 0 will eliminate the line plot and
|
||||||
|
a setting of 100 will eliminate the spectrogram and show only the line plot:
|
||||||
|
|
||||||
|
- Set *Spec* = 50%
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@ on bands above 1.2 GHz.
|
|||||||
|
|
||||||
To activate the VHF-and-up features:
|
To activate the VHF-and-up features:
|
||||||
|
|
||||||
- On the *Settings | General* tab check *Enable VHF/UHF/Microwave
|
- On the *Settings | General* tab check *Enable VHF and submode
|
||||||
features* and *Single decode*.
|
features* and *Single decode*.
|
||||||
|
|
||||||
- For EME, check *Decode after EME delay* to allow for extra path
|
- For EME, check *Decode after EME delay* to allow for extra path
|
||||||
@ -280,37 +280,45 @@ being readable by anyone listening in.
|
|||||||
|
|
||||||
=== Echo Mode
|
=== Echo Mode
|
||||||
|
|
||||||
*Echo* mode allows you to make sensitive measurements of your own
|
*Echo* mode provides tools for two types of measurements: echoes of
|
||||||
lunar echoes even when they are too weak to be heard. Select *Echo*
|
your transmitted signal from the Moon, and broadband noise power
|
||||||
from the *Mode* menu, aim your antenna at the moon, pick a clear
|
received from the Sun, Moon, and possibly other sources including
|
||||||
frequency, and toggle click *Tx Enable*. _WSJT-X_ will then cycle
|
nearby ground. In each case the system noise temperature (noise power
|
||||||
through the following loop every 6 seconds:
|
referred to the antenna terminals, expressed in Kelvin degrees) serves
|
||||||
|
as the reference noise level. Such measurements are widely used for
|
||||||
|
optimizing a station's capabilities for Earth-Moon-Earth (EME)
|
||||||
|
communication.
|
||||||
|
|
||||||
1. Transmit a 1500 Hz fixed tone for 2.3 s
|
For lunar echoes, _WSJT_ generates short fixed-frequency transmissions
|
||||||
2. Wait about 0.2 s for start of the return echo
|
that alternate with reception intervals at the appropriate
|
||||||
3. Record the received signal for 2.3 s
|
Doppler-shifted frequency. Be sure that *Enable VHF and submode
|
||||||
4. Analyze, average, and display the results
|
features* has been checked on the *Settings | General* tab. With
|
||||||
5. Repeat from step 1
|
*Split Operation* set to *Rig* or *Fake It* on the *Settings | Radio*
|
||||||
|
tab, check *Doppler tracking* and *Own Echo* on the Astronomical Data
|
||||||
|
window. Point your antenna at the Moon and click *Enable Tx* on the
|
||||||
|
main window to start a sequence of echo measurements. Each cycle
|
||||||
|
takes 6 seconds. If strong enough, echoes will be visible in the
|
||||||
|
waterfall. Their average spectrum will be displayed in the Echo Graph
|
||||||
|
window, and numerical parameters of the measurements appear in the
|
||||||
|
main window:
|
||||||
|
|
||||||
To make a sequence of echo tests:
|
image::Echo_1296.png[align="center",alt="Echo 144 MHz"]
|
||||||
|
|
||||||
- Select *Echo* from the *Mode* menu.
|
At the end of each echo cycle a line of data in the main text window
|
||||||
|
displays the following information:
|
||||||
|
|
||||||
- Check *Doppler tracking* and *Constant frequency on the Moon* on the
|
UTC Time in hhmmss format
|
||||||
Astronomical Data window.
|
Hour UTC in hours and decimal fraction
|
||||||
|
Level Relative received noise power (dB)
|
||||||
|
Doppler EME Doppler shift at center of lunar disk
|
||||||
|
Width EME Doppler spread over full lunar disk
|
||||||
|
N Number of accumulated echo or monitor cycles
|
||||||
|
Q Estimated quality of averaged data on a 0 – 10 scale
|
||||||
|
DF Offset of spectral peak from 1500 Hz
|
||||||
|
SNR Average signal-to-noise ratio (dB/2500 Hz)
|
||||||
|
dBerr Estimated uncertainty of SNR
|
||||||
|
|
||||||
- Be sure that your rig control has been set up for _Split Operation_,
|
... more to come ...
|
||||||
using either *Rig* or *Fake It* on the *Settings | Radio* tab.
|
|
||||||
|
|
||||||
- Click *Enable Tx* on the main window to start a sequence of 6-second
|
|
||||||
cycles.
|
|
||||||
|
|
||||||
- _WSJT-X_ calculates and compensates for Doppler shift automatically.
|
|
||||||
As shown in the screen shot below, when proper Doppler corrections
|
|
||||||
have been applied your return echo should always appear at the center
|
|
||||||
of the plot area on the Echo Graph window.
|
|
||||||
|
|
||||||
image::echo_144.png[align="center",alt="Echo 144 MHz"]
|
|
||||||
|
|
||||||
=== Tips for EME
|
=== Tips for EME
|
||||||
|
|
||||||
@ -333,6 +341,27 @@ correlation algorithm. JT65 and Q65 offer _a priori_ (AP)
|
|||||||
decoding, which takes advantage of naturally accumulating information
|
decoding, which takes advantage of naturally accumulating information
|
||||||
during a QSO.
|
during a QSO.
|
||||||
|
|
||||||
|
For CW mode on SHF and microwave EME WSJT-X can be used to do Doppler
|
||||||
|
shift correction if desired:
|
||||||
|
|
||||||
|
- Check the *Settings -> Radio -> Mode -> None* option, this stops _WSJT-X_
|
||||||
|
from trying to set the mode of your rig.
|
||||||
|
|
||||||
|
- Put you rig into CW mode as normal.
|
||||||
|
|
||||||
|
- Before transmitting press *Tune* in _WSJT-X_, no tones will be
|
||||||
|
transmitted as the rig is in CW mode, but importantly WSJT-X knows
|
||||||
|
your are transmitting and adjusts the Doppler shift correction as
|
||||||
|
needed for the currently selected Doppler shift correction mode in
|
||||||
|
transmit.
|
||||||
|
|
||||||
|
- When you have finish transmitting CW press *Tune* again to revert to
|
||||||
|
receive mode and the correct Doppler shift correction for receiving.
|
||||||
|
|
||||||
|
NOTE: The above assumes you are already set up for _WSJT-X_
|
||||||
|
<<VHF_SETUP,Doppler shift correction>> with working CAT control, and
|
||||||
|
*Monitor* enabled etc..
|
||||||
|
|
||||||
////
|
////
|
||||||
The following tutorial aims to familiarize you with
|
The following tutorial aims to familiarize you with
|
||||||
these program features, all of which are of special interest for EME
|
these program features, all of which are of special interest for EME
|
||||||
|
@ -141,31 +141,20 @@ include::transceiver-setup.adoc[]
|
|||||||
== Basic Operating Tutorial
|
== Basic Operating Tutorial
|
||||||
|
|
||||||
This section introduces the basic user controls and program behavior
|
This section introduces the basic user controls and program behavior
|
||||||
of _WSJT-X_, with particular emphasis on the JT9, JT65, and FT8 modes.
|
of _WSJT-X_, with particular emphasis on the FT8 mode.
|
||||||
We suggest that new users should go through the full HF-oriented
|
We suggest that new users should go through the full HF-oriented
|
||||||
tutorial, preferably while at your radio. Note that as of late 2018,
|
tutorial, preferably while at your radio.
|
||||||
digital usage on the HF bands has mostly moved from JT65 and JT9 to FT8. So
|
|
||||||
you may wish to pay particular attention to *FT8*, in Section 6.6.
|
|
||||||
|
|
||||||
Subsequent sections cover additional details on <<MAKE_QSOS,Making
|
Subsequent sections cover additional details on <<MAKE_QSOS,Making
|
||||||
QSOs>>, <<WSPR,WSPR mode>> and <<VHF_AND_UP,VHF+ Features>>.
|
QSOs>>, <<WSPR,WSPR mode>> and <<VHF_AND_UP,VHF+ Features>>.
|
||||||
|
|
||||||
[[TUT_MAIN]]
|
[[TUT_SAMPLES]]
|
||||||
=== Main Window Settings
|
include::tutorial-download-samples.adoc[]
|
||||||
include::tutorial-main-window.adoc[]
|
|
||||||
|
|
||||||
[[TUT_WIDE_GRAPH]]
|
[[TUT_WIDE_GRAPH]]
|
||||||
=== Wide Graph Settings
|
=== Wide Graph Settings
|
||||||
include::tutorial-wide-graph-settings.adoc[]
|
include::tutorial-wide-graph-settings.adoc[]
|
||||||
|
|
||||||
[[TUT_EX1]]
|
|
||||||
=== JT9
|
|
||||||
include::tutorial-example1.adoc[]
|
|
||||||
|
|
||||||
[[TUT_EX2]]
|
|
||||||
=== JT9+JT65
|
|
||||||
include::tutorial-example2.adoc[]
|
|
||||||
|
|
||||||
[[TUT_EX3]]
|
[[TUT_EX3]]
|
||||||
=== FT8
|
=== FT8
|
||||||
include::tutorial-example3.adoc[]
|
include::tutorial-example3.adoc[]
|
||||||
|
28
eclipse.txt
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
# Some test dates added for PSKReporter testing#
|
||||||
|
2023-06-10T21:30:00Z
|
||||||
|
2023-06-15T18:00:00Z
|
||||||
|
2023-07-01T18:00:00Z
|
||||||
|
2023-07-15T18:00:00Z
|
||||||
|
2023-08-01T18:00:00Z
|
||||||
|
2023-08-15T18:00:00Z
|
||||||
|
2023-09-01T18:00:00Z
|
||||||
|
2023-09-15T18:00:00Z
|
||||||
|
2023-10-01T18:00:00Z
|
||||||
|
# From https://eclipse.gsfc.nasa.gov/SEdecade/SEdecade2021.html
|
||||||
|
2023-10-14T18:00:40Z
|
||||||
|
2024-04-08T18:18:29Z
|
||||||
|
2024-10-02T18:46:13Z
|
||||||
|
2025-03-29T10:48:36Z
|
||||||
|
2025-09-21T19:43:04Z
|
||||||
|
2026-02-17T12:13:05Z
|
||||||
|
2026-08-12T17:47:05Z
|
||||||
|
2027-02-06T16:00:47Z
|
||||||
|
2027-08-02T10:04:49Z
|
||||||
|
2028-01-26T15:08:58Z
|
||||||
|
2028-07-22T02:56:39Z
|
||||||
|
2029-01-14T17:13:47Z
|
||||||
|
2029-06-12T04:06:13Z
|
||||||
|
2029-07-11T15:37:18Z
|
||||||
|
2029-12-05T15:03:57Z
|
||||||
|
2030-06-01T06:29:13Z
|
||||||
|
2030-11-25T06:51:37Z
|
569
g4wjs.txt
Normal file
@ -0,0 +1,569 @@
|
|||||||
|
Joe Taylor, K1JT:
|
||||||
|
|
||||||
|
I am very sorry to convey the sad news that Bill Somerville,
|
||||||
|
G4WJS, died suddenly and unexpectedly a few days ago. He was only
|
||||||
|
about 65 years old.
|
||||||
|
|
||||||
|
Bill was a dear friend and very close colleague, though (as is often
|
||||||
|
the case with worldwide ham radio friendships) we had met in person
|
||||||
|
only a few times. In 2013 he was the first to join me in forming a
|
||||||
|
core development group for WSJT-X, which at that time was at program
|
||||||
|
version 0.99. Bill has been closely involved with WSJT-X and related
|
||||||
|
software projects ever since.
|
||||||
|
|
||||||
|
Our free, open-source software could not have achieved its extensive
|
||||||
|
worldwide popularity and influence in ham radio without Bill's
|
||||||
|
essential contributions. In addition to writing code for important
|
||||||
|
portions of the Qt-based user interface for WSJT-X, Bill helped to
|
||||||
|
bring the overall program structure more nearly up to professional
|
||||||
|
standards. Moreover, he devoted countless hours to program support,
|
||||||
|
patiently answering user's questions on WSJT-related forums.
|
||||||
|
|
||||||
|
I have only started to think about the many ways in which I will miss
|
||||||
|
Bill -- not no mention how we all will miss his immense and positive
|
||||||
|
impact on WSJT-X and related projects. For more than eight years Bill
|
||||||
|
and I communicated closely and regularly on ham radio topics,
|
||||||
|
sometimes many times per day. Perhaps I will be able to write more
|
||||||
|
about it in the near future.
|
||||||
|
|
||||||
|
Rest in peace, dear friend G4WJS.
|
||||||
|
|
||||||
|
|
||||||
|
Stan Gammons, KM4HQE:
|
||||||
|
|
||||||
|
So sad to hear that Joe. Bill will be greatly missed.
|
||||||
|
|
||||||
|
Prayers for his family and friends.
|
||||||
|
|
||||||
|
Rest in peace Bill
|
||||||
|
|
||||||
|
Colin Haig, VE3MSC:
|
||||||
|
|
||||||
|
Joe, this is truly sad news. Bill has been a wonderful resource and
|
||||||
|
supported all of us. Please pass condolences to his family.
|
||||||
|
|
||||||
|
PA3GCU:
|
||||||
|
|
||||||
|
May he rest in peace.
|
||||||
|
|
||||||
|
Philip Hazelton, G8PJH
|
||||||
|
|
||||||
|
This is shocking news, he was such talent, he will be sorely missed,
|
||||||
|
condolences to his family.
|
||||||
|
|
||||||
|
Philip Rose, GM3ZZA
|
||||||
|
|
||||||
|
You have provided an excellent service to the WSJT-X community. I
|
||||||
|
think your last post was a couple of days ago. We will all miss you,
|
||||||
|
and your incisive resolution of all our problems.
|
||||||
|
|
||||||
|
Requiescat in pace.
|
||||||
|
Dave, AA6YQ:
|
||||||
|
|
||||||
|
A huge loss for all of us. Bill always took the time to provide a
|
||||||
|
friendly, accurate, and helpful answer to any question that came his
|
||||||
|
way. He set one good example after another.
|
||||||
|
|
||||||
|
Reino Talarmo, OH3MA:
|
||||||
|
|
||||||
|
RIP Bill, We will miss your kind advice.
|
||||||
|
|
||||||
|
Tom V. Segalstad, LA4LN:
|
||||||
|
|
||||||
|
The silent key of Bill is very sad news.
|
||||||
|
|
||||||
|
Bill has been extremely helpful for radio amateurs to make WSJT-X fit
|
||||||
|
their different radios and computers. We have seen E-mail answers from
|
||||||
|
him coming at all times during borh day and night. And we wonder if he
|
||||||
|
ever got time to sleep or eat, in-between his good answers and advices
|
||||||
|
to radio amateurs world wide.
|
||||||
|
|
||||||
|
So rest in peace Bill, and thank you very much for all the help you
|
||||||
|
have provided to radio amateurs world wide, for making their digital
|
||||||
|
radio amateur activity very successful.
|
||||||
|
|
||||||
|
John, VE7KKQ:
|
||||||
|
|
||||||
|
So long, Bill, condolences to his family.
|
||||||
|
|
||||||
|
Tom, M0LTE:
|
||||||
|
|
||||||
|
Unreal. Deeply shocking.
|
||||||
|
|
||||||
|
Heartfelt condolences from us all at the Reading club, where Bill was
|
||||||
|
a member.
|
||||||
|
|
||||||
|
Борис Романов (Boris Romanov), UX8IW:
|
||||||
|
|
||||||
|
Sad news. Condolences to Bill's family and friends.
|
||||||
|
|
||||||
|
Ken Cox, WA8OMR:
|
||||||
|
|
||||||
|
Sorry to hear about Bill's passing. I will miss reading his answers to
|
||||||
|
the many questions posted. I have learned a lot from them.Ken WA8OMR.
|
||||||
|
|
||||||
|
Gary Trock:
|
||||||
|
|
||||||
|
Very Sad.
|
||||||
|
I’ve been reading his posts since I joined.
|
||||||
|
RIP.
|
||||||
|
|
||||||
|
Dave Sellars, KB4JB:
|
||||||
|
|
||||||
|
Very sad news indeed. Amateur Radio worldwide has lost a tremendous
|
||||||
|
ham and friend. His contributions to WSJT-X and this group will never
|
||||||
|
be forgotten.
|
||||||
|
|
||||||
|
Lynn Mears, K0CLM:
|
||||||
|
|
||||||
|
Extremely sad news. I haven’t been involved with WSJT that long, but
|
||||||
|
it was obvious that Bill donated a lot of time and effort towards WSJT
|
||||||
|
and helping in many different ways. He will be missed greatly.
|
||||||
|
|
||||||
|
Peter, M0PWX:
|
||||||
|
|
||||||
|
Sad news indeed, Bill was a great resource and font of so much
|
||||||
|
knowledge, as well as having the patience of a saint when dealing with
|
||||||
|
some members / questions
|
||||||
|
|
||||||
|
Will be greatly missed on here
|
||||||
|
|
||||||
|
|
||||||
|
Russ Ravella:
|
||||||
|
|
||||||
|
Incredibly sad news. What a wonderful, valuable and kind man Bill
|
||||||
|
was. How much better the world would be with more Bill’s in it.
|
||||||
|
Thank you and Rest In Peace Bill Somerville.
|
||||||
|
|
||||||
|
Sam Birnbaum, W2JDB:
|
||||||
|
|
||||||
|
So very sorry to hear this sad news. Bill has been very extremely
|
||||||
|
helpful to me in providing the information that allowed me to provide
|
||||||
|
a complimentary program for WSJT-X so that visually impaired/blind
|
||||||
|
hams can also partake in this fantastic program and its modes.
|
||||||
|
|
||||||
|
Rest In Peace Bill, you will be sorely missed by all.
|
||||||
|
|
||||||
|
Jack Trampler, N2JT
|
||||||
|
|
||||||
|
I never worked Bill. Did he even have time to operate? I never met
|
||||||
|
Bill. But I would have liked to. I never sent him an email, either
|
||||||
|
personal or on this group. I wish I had.
|
||||||
|
|
||||||
|
I enjoyed my daily (actually several times a day) reading of the
|
||||||
|
messages posted in this group and his replies. I learned a lot from
|
||||||
|
them. This man had so much knowledge and the fact that he took the
|
||||||
|
time to deal with almost every post in this group and share that
|
||||||
|
knowledge, its truly a testament to this man. I for one will surely
|
||||||
|
miss him.
|
||||||
|
|
||||||
|
I wish I knew him better. Rest in Peace, Bill.
|
||||||
|
|
||||||
|
Pete Smith, N4ZR:
|
||||||
|
|
||||||
|
Terrible news. Though I'm not a great devotee of the digital modes
|
||||||
|
(except CW), without Bill I'm convinced I would not have made a single
|
||||||
|
QSO using WSJT-X. My sympathy to his family and friends.
|
||||||
|
|
||||||
|
Neil Zampella, KN3ILZ:
|
||||||
|
|
||||||
|
I agree. Bill was patient with everyone, even me when I replied to a
|
||||||
|
post and chewed my foot up to the ankle.
|
||||||
|
|
||||||
|
His passing will affect much done within WSJT-X, as well as Hamlib.
|
||||||
|
He was a font of knowledge and 'corporate' memory.
|
||||||
|
|
||||||
|
We may not see his like again.
|
||||||
|
|
||||||
|
Jim Brown, K9YC:
|
||||||
|
|
||||||
|
If Bill had done nothing more than provide what seemed like 24/7
|
||||||
|
support here, his contribution would have been monumental. Thanks
|
||||||
|
Bill, RIP.
|
||||||
|
|
||||||
|
Jeff, K3JRZ:
|
||||||
|
|
||||||
|
Wow. Very sad to hear.
|
||||||
|
|
||||||
|
I had sent many emails to him looking for help with WSJT-X when I
|
||||||
|
first started having my first issues with it when I started with the
|
||||||
|
software and then again after several macOS updates. Always a great
|
||||||
|
guy to get help from. He will surely be missed. My condolences to his
|
||||||
|
family and to all that knew him.
|
||||||
|
|
||||||
|
Lance Collister, W7GJ:
|
||||||
|
|
||||||
|
Our heart-felt condolences to you, Joe, and to all the folks like me
|
||||||
|
whom he so patiently helped over the years. He was an amazing member
|
||||||
|
of the WSJT-X team, and I found myself always amazed at how in the
|
||||||
|
world he was able to answer all the questions posed to him by users of
|
||||||
|
WSJT-X on such a myriad of different rigs with different software. His
|
||||||
|
contributions will be long remembered, and very much appreciated. So
|
||||||
|
sad to see someone go who gave so much so freely to our
|
||||||
|
community. RIP, Bill.
|
||||||
|
|
||||||
|
Klaus Werner, G7RTI:
|
||||||
|
|
||||||
|
Thanks to Bill’s helpful explanations I was able to get going on
|
||||||
|
WSJTX.
|
||||||
|
|
||||||
|
I didn’t know him or anything about him except what has been written
|
||||||
|
in previous comments.
|
||||||
|
|
||||||
|
May he rest in peace.
|
||||||
|
|
||||||
|
Wayne Rash, N4HCR:
|
||||||
|
|
||||||
|
This is so sad. Bill always showed great patience with my dumb
|
||||||
|
questions. He played a big role in making WSJTX a joy to use. Ham
|
||||||
|
radio owes him a huge debt.
|
||||||
|
|
||||||
|
Rest In Peace, Bill.
|
||||||
|
|
||||||
|
Dave:
|
||||||
|
|
||||||
|
Very sad to hear. He will live in our memories and our operating.
|
||||||
|
|
||||||
|
Ed Radlo, AJ6V:
|
||||||
|
|
||||||
|
Bill always answered the various online queries vey quickly, and his
|
||||||
|
vast knowledge helped many of us get on track with all of these new
|
||||||
|
digital modes.
|
||||||
|
|
||||||
|
A great loss to ham radio.
|
||||||
|
|
||||||
|
Bob Bownes: (?)
|
||||||
|
|
||||||
|
Very sad to hear. May his memory be a blessing to his family and all
|
||||||
|
who knew him.
|
||||||
|
|
||||||
|
In the Law Enforcement, Fire and Emergency Medical Services, the
|
||||||
|
passing on of one such is often marked with a 'Last Call' or 'Final
|
||||||
|
Dispatch' in which the departed's call sign is requested thrice for
|
||||||
|
one last time. Usually at a pre-arranged or significant time. Seems
|
||||||
|
appropriate in this case as well. Perhaps you could do that for us
|
||||||
|
Joe.
|
||||||
|
|
||||||
|
Rick, I2BRT:
|
||||||
|
|
||||||
|
Very sad news and a great loss for our cumunity. Thanks for all the
|
||||||
|
effort and friendship Bill. Rest in peace.
|
||||||
|
|
||||||
|
Andy, GD0TEP:
|
||||||
|
|
||||||
|
I never worked Bill. Did he even have time to operate?
|
||||||
|
|
||||||
|
Yes, I worked him on 15m in August just gone, and on 6m back in
|
||||||
|
May. Both on FT8 of course.
|
||||||
|
|
||||||
|
Gwen, KI5PXQ:
|
||||||
|
|
||||||
|
I also worked him, 1600Z on the 24th of October, 15 meters, FT8.
|
||||||
|
|
||||||
|
Ria, N2RJ:
|
||||||
|
|
||||||
|
This is truly awful news. Bill will certainly be missed.
|
||||||
|
|
||||||
|
Walter, OE6IWG:
|
||||||
|
|
||||||
|
VY sad News :-(
|
||||||
|
|
||||||
|
Bill was a GREAT helper - also for me. My condolences to his family
|
||||||
|
and friends.
|
||||||
|
|
||||||
|
Ed Wilson, K0KC:
|
||||||
|
|
||||||
|
This is a tremendous loss to the amateur radio community, but as
|
||||||
|
someone who lost his brother only a few weeks ago, I know that the
|
||||||
|
loss is much greater to his family and close friends...my condolences
|
||||||
|
to each of them. RIP, Bill...
|
||||||
|
|
||||||
|
Amos Sobel, 4X4MF:
|
||||||
|
|
||||||
|
Me and the WSJT-X community mourn the departure of Bill Somerville
|
||||||
|
|
||||||
|
Bob, K4RCG:
|
||||||
|
|
||||||
|
I deeply regret not sending Bill a "personal thank you" e-mail for his
|
||||||
|
support of our hobby. I had planned on doing so, but didn't want to
|
||||||
|
add traffic to his in-box admin! He will be missed, but fondly
|
||||||
|
remembered.
|
||||||
|
|
||||||
|
Hamish, G0GLG:
|
||||||
|
|
||||||
|
Very sad day for amateur radio.
|
||||||
|
|
||||||
|
Paul Welford, G4YKQ:
|
||||||
|
|
||||||
|
A Tribute to my dearest friend Bill Somerville G4WJS.
|
||||||
|
|
||||||
|
I apologize for length of this post. This might answer a few previous
|
||||||
|
posts Knowing Bill he will be still reading all these posts from a
|
||||||
|
better place.
|
||||||
|
|
||||||
|
I thank you for your speedy post Joe.
|
||||||
|
|
||||||
|
Bill G4WJS was one of my dearest friends living just 4 miles apart.We
|
||||||
|
spoke 2/3 times a week and at times several times a day.
|
||||||
|
|
||||||
|
After a 20 year plus break Bill spurred me on to come back into the
|
||||||
|
radio family. I OWE HIM A LOT. Thanks to him my major interest in the
|
||||||
|
last 10 years has been WSJT-X. Bill also had a passion for Photography
|
||||||
|
and me being a Photographer for The Sun Newspaper In London before I
|
||||||
|
retired had another common interest we liked to have a good natter but
|
||||||
|
I often came off the worst.Bill lived on his own so we kept a close
|
||||||
|
eye on each other.
|
||||||
|
|
||||||
|
Bill had a degree in Chemistry but as I understand was self taught in
|
||||||
|
computing and electronics.Please see his QRZ page.
|
||||||
|
|
||||||
|
He was a whizz. He was a great natural teacher and Joe I think this was
|
||||||
|
one of the reasons he got on so well with you and the group.He
|
||||||
|
remarked to me many times "I never mind helping anyone provided they
|
||||||
|
help themselves" At times glaring at me muttering under his breath
|
||||||
|
"Read the notes and the posts" Sometimes it so annoyed him when I
|
||||||
|
could not keep a straight face..we all know the story.Bill always
|
||||||
|
willing to help with a computer grafted to his hand. Over the last
|
||||||
|
ten years he has like others in the group spent hours and hours
|
||||||
|
involved with WSJX-X.He had a great admiration for open source
|
||||||
|
programs.Made many friends within the digital community and a big
|
||||||
|
respect for Dxlabs {Dave] JTalert [Laurie] among others. I was always
|
||||||
|
giving him praise for taking a break and TXing winding up this 4 ele
|
||||||
|
,of late not often[Bill head in PC} every day I would have a crafty
|
||||||
|
check on his PSK. Bill was very much in favour of Using L.O.T.W but
|
||||||
|
never collected awards,but on receiving a trophy for technical
|
||||||
|
achievement announced at Dayton when he told me there was no emotion
|
||||||
|
but I knew Bill just to well he was chuffed !
|
||||||
|
|
||||||
|
Sadly last Friday after never responding to my calls I found Bill
|
||||||
|
seated in his shack at peace surrounded by the things he loved most.
|
||||||
|
|
||||||
|
I am still total shock!!!
|
||||||
|
|
||||||
|
Such a loss of a talented and loyal friend and as I have said he shall
|
||||||
|
be greatly missed by many in our radio family.
|
||||||
|
|
||||||
|
R.I.P.William [Bill ] G4WJS.
|
||||||
|
|
||||||
|
God Bless you and till we meet again 73.................. Cheers mate!
|
||||||
|
|
||||||
|
Ronnie Hull:
|
||||||
|
|
||||||
|
I am greatly saddened to hear this news.
|
||||||
|
|
||||||
|
Keith Wood, W4RPE:
|
||||||
|
|
||||||
|
Great tribute to a wonderful man.
|
||||||
|
|
||||||
|
Carlos, OE3JAG:
|
||||||
|
|
||||||
|
May I also do my sadly condolences to his family and his friends ! He
|
||||||
|
will surely be missed by all the hams. Thanks for got in touch with
|
||||||
|
you, dear Bill.
|
||||||
|
|
||||||
|
Good luck in your new place, Bill, I miss you,
|
||||||
|
|
||||||
|
William Hensley, WG8S:
|
||||||
|
|
||||||
|
A great tribute, Paul! I'm sorry you were the one to find him, yet I
|
||||||
|
sense you would both want it that way. I did not know Bill, but he
|
||||||
|
made a tremendous contribution to the WSJT-X community. He will be
|
||||||
|
missed.
|
||||||
|
|
||||||
|
RIP, Bill. Thank you, Paul.
|
||||||
|
|
||||||
|
Bernd, KB7AK:
|
||||||
|
|
||||||
|
Thank you for your tribute Paul, we will all miss Bill dearly.
|
||||||
|
|
||||||
|
Philip Rose, GM3ZZA:
|
||||||
|
|
||||||
|
As far as I can see we as amateurs who have been helped by Bill,
|
||||||
|
should keep up his good work. I know I can’t alone.
|
||||||
|
|
||||||
|
His advice was definitive. Others not so.
|
||||||
|
|
||||||
|
Jim Brown, K9YC:
|
||||||
|
|
||||||
|
Thanks very much, Paul, for this lovely and loving post. As you and
|
||||||
|
Joe have so eloquently written, Bill exemplified the best of the ham
|
||||||
|
spirit, by giving and sharing far more than he received.
|
||||||
|
|
||||||
|
Erik, VA7QI:
|
||||||
|
|
||||||
|
Very sorry to hear about Bill. I enjoyed reading his comments and
|
||||||
|
very much appreciate his contribution for WSTJ-X.
|
||||||
|
|
||||||
|
His name and callsign will be remembered for a long time as a shining
|
||||||
|
light of the ham radio community.
|
||||||
|
|
||||||
|
73 de va7qi, ....Erik.
|
||||||
|
|
||||||
|
Marco, PY1ZRJ:
|
||||||
|
My God! Whats terrible news is this!
|
||||||
|
|
||||||
|
Bill helped me in many occasions with WSJT-X always with a very pure
|
||||||
|
"ham-spirit" and availability.
|
||||||
|
|
||||||
|
My very sincere condolence to all his family and friends, I will miss
|
||||||
|
him a lot despite I never had the pleasure to meet him.
|
||||||
|
|
||||||
|
Martin Davies, G0HDB:
|
||||||
|
|
||||||
|
That is truly unwelcome and most distressing news, Joe; I'm sure the
|
||||||
|
vast amounts of time and effort that Bill devoted to the development
|
||||||
|
and support of WSJT-X will be very sorely missed by everyone in the
|
||||||
|
community, whether or not they had ever had any direct dealings with
|
||||||
|
Bill.
|
||||||
|
|
||||||
|
Please convey all our sympathies and our deepest condolences to Bill's
|
||||||
|
relatives and friends.
|
||||||
|
|
||||||
|
John Nelson, G4KLA:
|
||||||
|
|
||||||
|
I am saddened to learn of your news. This is blow to the WSJT-X
|
||||||
|
community.
|
||||||
|
|
||||||
|
In the early days of Bill’s involvement with WSJT he often logged into
|
||||||
|
my Macs at home to test his software modifications on a Mac until he
|
||||||
|
got a VM working. He and I had numerous discussions while testing new
|
||||||
|
versions on various Mac OS. He was generous with his time in helping
|
||||||
|
folks with problems either running the codes or attempting to build
|
||||||
|
the software on various platforms. The multitude of emails to the
|
||||||
|
development list is a tribute to his commitment to ensure that the
|
||||||
|
various programs operated flawlessly.
|
||||||
|
|
||||||
|
His involvement with the development of WSJT-X code especially with
|
||||||
|
modernising the structure of the whole program has been immense. I
|
||||||
|
will certainly miss his advice.
|
||||||
|
|
||||||
|
A sad day…
|
||||||
|
|
||||||
|
Alan, G0TLK:
|
||||||
|
|
||||||
|
Shocking and saddening news, he will be greatly missed.
|
||||||
|
|
||||||
|
My condolences to his family and friends, and RIP Bill.
|
||||||
|
|
||||||
|
Robin, G8DQX:
|
||||||
|
|
||||||
|
I only knew Bill through his contributions to the WSJT lists. Those
|
||||||
|
contributions were sharp, radical, and usually encouraging. He was a
|
||||||
|
clearly essential part of a team that is helping Amateur Radio to
|
||||||
|
grow, expand and develop, far beyond what you and I knew when,
|
||||||
|
soldering iron in hand, we first played with radio, all those years
|
||||||
|
ago.
|
||||||
|
|
||||||
|
My condolences to his family and friends. We shall all miss him.
|
||||||
|
|
||||||
|
Robin, G8DQX
|
||||||
|
|
||||||
|
Charlie Suckling, G3WDG/DL3WDG:
|
||||||
|
|
||||||
|
We were also shocked and very sorry to hear of Bill's sudden
|
||||||
|
passing. I never had the pleasure of meeting him in person. Like Bob,
|
||||||
|
he attended the same University and read the same degree.
|
||||||
|
|
||||||
|
We are so grateful for his contributions over many years to
|
||||||
|
WSJT-X. His support for users was first class, and he even joined the
|
||||||
|
EME reflectors to give support to EME users during the roll-out of
|
||||||
|
Q65, despite not being active himself on EME. He was contributing
|
||||||
|
there regularly, and some of his last efforts were to support the use
|
||||||
|
of WSJT-X for Doppler control on CW on the microwave bands.
|
||||||
|
|
||||||
|
He was also a very patient and diligent teacher, tutoring and helping
|
||||||
|
those who wished to make small contributions to the project. I am very
|
||||||
|
grateful for the time he spent in such ways.
|
||||||
|
|
||||||
|
Bill will surely be greatly missed, and sincere condolences to his
|
||||||
|
family and many friends.
|
||||||
|
|
||||||
|
RIP Bill.
|
||||||
|
|
||||||
|
James Shaver, N2ADV:
|
||||||
|
|
||||||
|
I had the pleasure of talking to Bill over Skype a few times during
|
||||||
|
the development of 1.7 and later 1.8 to chase down some CAT control
|
||||||
|
gremlins with several radios I happen to own. His patience and
|
||||||
|
intelligence was incredible. Such a huge loss to us all.
|
||||||
|
|
||||||
|
My sincerest condolences to his family and friends.
|
||||||
|
|
||||||
|
He will definitely be missed but his contributions to the advancement
|
||||||
|
of amateur radio will live on indefinitely.
|
||||||
|
|
||||||
|
Alessandro Gorobey, IK2
|
||||||
|
|
||||||
|
Very sad news and a great loss.
|
||||||
|
|
||||||
|
A great teacher.
|
||||||
|
|
||||||
|
My sincerest condolences to his family and friends.
|
||||||
|
|
||||||
|
Jim Preston, N6VH:
|
||||||
|
|
||||||
|
This is definitely very sad news. Bill was a very important part of
|
||||||
|
the WSJT team. He will be missed very much.
|
||||||
|
|
||||||
|
My condolences to his family.
|
||||||
|
|
||||||
|
Gary Lane, VK4OO
|
||||||
|
|
||||||
|
Very sad news, my condolences to Bills friends and family….
|
||||||
|
|
||||||
|
Bob Atkins, KA1GT:
|
||||||
|
|
||||||
|
I was shocked and saddened by the news of Bill's passing. We chatted
|
||||||
|
on line quite often though we never met in person. He attended the
|
||||||
|
same university as I didn't, reading the same subjects, but was a hear
|
||||||
|
of two behind me, so we never met their either. Bill will be greatly
|
||||||
|
missed and I send my condolences to his friends and family.
|
||||||
|
|
||||||
|
RIP Bill.
|
||||||
|
|
||||||
|
Dave Schmocker, KJ9I:
|
||||||
|
|
||||||
|
This is incredibly sad news. Bill was always so helpful, highly
|
||||||
|
responsive, and on-target with deep technical solutions.
|
||||||
|
|
||||||
|
What a wonderful asset Bill was to the hobby and to all with whom he
|
||||||
|
interfaced.
|
||||||
|
|
||||||
|
Jim, WB4CGS:
|
||||||
|
|
||||||
|
I am very sorry for this loss.
|
||||||
|
|
||||||
|
Conrad Farlow, Jim WB4GCS
|
||||||
|
|
||||||
|
Joe I am absolutely lost for words. What a terrible shock. I cannot
|
||||||
|
imagine him not being there. My condolences to you, Bill's family and
|
||||||
|
well the whole dev team. We will all miss him Most of all I am sorry
|
||||||
|
that you lost such a good friend.
|
||||||
|
|
||||||
|
Sam Jewell, G4DDK:
|
||||||
|
|
||||||
|
So sad to hear this news. One of the team who have revolutionised ham
|
||||||
|
radio operation, popularised digital and helped realise what we
|
||||||
|
thought should be possible.
|
||||||
|
|
||||||
|
Vale Bill.
|
||||||
|
|
||||||
|
|
||||||
|
Nick, NN3Y:
|
||||||
|
|
||||||
|
R I. P. Bill. He'll be missed. My sincere condolences to his family
|
||||||
|
and friends.
|
||||||
|
|
||||||
|
|
||||||
|
Jay, KA9CFD:
|
||||||
|
|
||||||
|
Shocking and very sorry news. RIP Bill.
|
||||||
|
|
||||||
|
Mirek, OK2AQ:
|
||||||
|
|
||||||
|
Very sad news for us WSJT-X users. R.I.P. Bill
|
||||||
|
|
||||||
|
OH6KTL, Lasse:
|
||||||
|
|
||||||
|
ge and sad to hear about Bill
|
||||||
|
|
26
item_delegates/MessageItemDelegate.cpp
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
//
|
||||||
|
// Moved from Configuration.cpp
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "MessageItemDelegate.hpp"
|
||||||
|
|
||||||
|
#include <QLineEdit>
|
||||||
|
#include <QRegExpValidator>
|
||||||
|
|
||||||
|
//
|
||||||
|
// Class MessageItemDelegate
|
||||||
|
//
|
||||||
|
// Item delegate for message entry such as free text message macros.
|
||||||
|
//
|
||||||
|
MessageItemDelegate::MessageItemDelegate(QObject *parent): QStyledItemDelegate{parent}
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
QWidget *MessageItemDelegate::createEditor(QWidget *parent, QStyleOptionViewItem const &, QModelIndex const &) const
|
||||||
|
{
|
||||||
|
QRegularExpression message_alphabet{"[- @A-Za-z0-9+./?#<>;$]*"};
|
||||||
|
auto editor = new QLineEdit{parent};
|
||||||
|
editor->setFrame(false);
|
||||||
|
editor->setValidator(new QRegularExpressionValidator{message_alphabet, editor});
|
||||||
|
return editor;
|
||||||
|
}
|
20
item_delegates/MessageItemDelegate.hpp
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef WSJTX_MESSAGEITEMDELEGATE_H
|
||||||
|
#define WSJTX_MESSAGEITEMDELEGATE_H
|
||||||
|
|
||||||
|
#include <QStyledItemDelegate>
|
||||||
|
|
||||||
|
class MessageItemDelegate: public QStyledItemDelegate
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit MessageItemDelegate(QObject *parent = nullptr);
|
||||||
|
QWidget *createEditor(QWidget *parent, QStyleOptionViewItem const & /* option*/
|
||||||
|
, QModelIndex const & /* index */
|
||||||
|
) const override;
|
||||||
|
};
|
||||||
|
#endif //WSJTX_MESSAGEITEMDELEGATE_H
|
42
lib/77bit/hash22calc.f90
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
program hash22calc
|
||||||
|
! Given a valid callsign, calculate and print its 22-bit hash.
|
||||||
|
|
||||||
|
use packjt77
|
||||||
|
|
||||||
|
character*13 callsign
|
||||||
|
character*1 c
|
||||||
|
character*6 basecall
|
||||||
|
logical cok
|
||||||
|
|
||||||
|
nargs=iargc()
|
||||||
|
if(nargs.ne.1) then
|
||||||
|
print*,'Given a valid callsign, print its 22-bit hash.'
|
||||||
|
print*,'Usage: hash22calc <callsign>'
|
||||||
|
print*,' e.g. hash22calc W9ABC'
|
||||||
|
go to 999
|
||||||
|
endif
|
||||||
|
call getarg(1,callsign)
|
||||||
|
|
||||||
|
! convert to upper case
|
||||||
|
ilen=len(trim(callsign))
|
||||||
|
do i=1, ilen
|
||||||
|
c=callsign(i:i)
|
||||||
|
if(c.ge.'a' .and. c.le.'z') c=char(ichar(c)-32) !Force upper case
|
||||||
|
callsign(i:i)=c
|
||||||
|
enddo
|
||||||
|
|
||||||
|
! check for a valid callsign
|
||||||
|
call chkcall(callsign,basecall,cok)
|
||||||
|
if(.not.cok) then
|
||||||
|
print*,'Invalid callsign'
|
||||||
|
print*,'Usage: hash22calc <callsign>'
|
||||||
|
goto 999
|
||||||
|
endif
|
||||||
|
|
||||||
|
! calculate the hash
|
||||||
|
n22 = ihashcall(callsign,22)
|
||||||
|
write(*,'(a,i7.7)') callsign,n22
|
||||||
|
|
||||||
|
999 end program hash22calc
|
||||||
|
|
||||||
|
include '../chkcall.f90'
|
@ -94,3 +94,7 @@ KA1ABC/VEX 37
|
|||||||
<W3CCX/P> <K1JT> 590001 FN20QI
|
<W3CCX/P> <K1JT> 590001 FN20QI
|
||||||
<W3CCX/P> <K1JT/P> 590001 FN20QI
|
<W3CCX/P> <K1JT/P> 590001 FN20QI
|
||||||
<W3CCX/QRP> <K1JT/QRO> 590001 FN20QI
|
<W3CCX/QRP> <K1JT/QRO> 590001 FN20QI
|
||||||
|
CQ OE21FTDMC
|
||||||
|
K9AN K1JT R-
|
||||||
|
K9AN K1JT R+
|
||||||
|
K1AN K1JT WXY
|
||||||
|