diff --git a/CMakeLists.txt b/CMakeLists.txt index fe79eb3aa..6d347e6e7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -58,7 +58,7 @@ set (PROJECT_MANUAL wsjtx-main) set (PROJECT_MANUAL_DIRECTORY_URL http://www.physics.princeton.edu/pulsar/K1JT/wsjtx-doc/) set (PROJECT_SAMPLES_URL http://downloads.sourceforge.net/project/wsjt/) set (PROJECT_SAMPLES_UPLOAD_DEST frs.sourceforge.net:/home/frs/project/wsjt/) -set (PROJECT_SUMMARY_DESCRIPTION "${PROJECT_NAME} - Digital Modes for Weak Signal Communicaitons in Amateur Radio.") +set (PROJECT_SUMMARY_DESCRIPTION "${PROJECT_NAME} - Digital Modes for Weak Signal Communications in Amateur Radio.") set (PROJECT_DESCRIPTION "${PROJECT_SUMMARY_DESCRIPTION} ${PROJECT_NAME} is a computer program designed to facilitate basic amateur radio communication using very weak signals. The first four letters in @@ -1306,9 +1306,6 @@ target_link_libraries (jt4code wsjt_fort wsjt_cxx) add_executable (msk144code lib/msk144code.f90 wsjtx.rc) target_link_libraries (msk144code wsjt_fort wsjt_cxx) -add_executable (jt65 lib/jt65.f90 lib/jt65_test.f90 wsjtx.rc) -target_link_libraries (jt65 wsjt_fort wsjt_cxx) - add_executable (ft8code lib/ft8/ft8code.f90 wsjtx.rc) target_link_libraries (ft8code wsjt_fort wsjt_cxx) @@ -1627,6 +1624,7 @@ if (NOT is_debug_build) ${QT_PLUGINS_DIR}/audio ${QT_PLUGINS_DIR}/accessible ${QT_PLUGINS_DIR}/imageformats + ${QT_PLUGINS_DIR}/styles DESTINATION ${WSJT_PLUGIN_DESTINATION} CONFIGURATIONS Release MinSizeRel #COMPONENT runtime diff --git a/NEWS b/NEWS index 4fb665223..fee190bdc 100644 --- a/NEWS +++ b/NEWS @@ -13,6 +13,66 @@ Copyright 2001 - 2019 by Joe Taylor, K1JT. + Release: WSJT-X 2.2.0-rc2 + May 25, 2020 + ------------------------- + +WSJT-X 2.2.0-rc2 is a release candidate for WSJT-X 2.2.0. The +following bugs present in the -rc1 version have been fixed: + + - Missing blank line between some decode sequences. + - Improper functioning of "Start new period decodes at top". + - Font selection caused crash on some macOS systems. + - Mouse action in band selector box not right in some macOS systems. + - Incorrect recall of Tx power setting in WSPR mode. + - Many fixes to hamlib library and executables (rigctld, etc.). + - Some regional settings did not allow WSJT-X to start. + - Main window "looked like old Windows" in macOS. + - Crash when "Ref Spec" is selected and no refspec.dat available. + - Improper decoding of some FT4 messages with hashed "MyCall". + - Crash after warning message about double-clicking in ISCAT mode. + +In addition, we have made the following improvements: + + - Updated some figures and text in User Guide. + - Corrected some formatting issues in the pdf version of User Guide. + - Added some new sample files. + - Improved shape and position of "green goal post" in Wide Graph. + - Significantly reduced the rate of false decodes in FT4 and FT8. + - Allow FT4 to use NA VHF Contest message formats. + - Hold Tx frequency no longer cleared when switching between modes. + - Added capability for translations of the user interface into + languages other than English. First working example (special + thanks to Xavi Perez, EA3W!), is Catalan. Spanish will be next. + - Performance improvements to decode highlighting via UDP messages. + +And finally: + +Increasing FT8 usage on the popular bands 40, 30, and 20m means that +the default 3 kHz sub-bands are often wall-to-wall with signals. +Overcrowding encourages some to turn on their amplifiers, which only +makes things worse. We are trying to coordinate the suggested +frequencies in WSJT-X with updated band plans being considered by +IARU, ARRL, and other amateur radio societies. + +On a trial basis, and in response to numerous suggestions from around +the world, we have added a second set of suggested dial frequencies +for FT8 on three HF bands and also on 6 meters. The new suggested dial +frequencies are 7.071, 10.133, 14.071, and 50.310 MHz. These +frequencies will appear in your drop-down band-selector list after you +go to the "Settings | Frequencies" tab, right-click on the frequency +table, and select "Reset". Alternatively, you can add the new FT8 +frequencies manually. + +When the conventional FT8 sub-band on 6, 20, 30, or 40 m seems too +full, please try moving your dial frequency down 3 kHz! Be aware that +as currently implemented, WSJT-X will set your dial to the lowest +frequency for the selected mode and band, when you switch bands. + +See the next section for a list of other program improvements since +WSJT-X 2.1.2. + + Release: WSJT-X 2.2.0-rc1 May 10, 2020 ------------------------- diff --git a/Network/NetworkMessage.hpp b/Network/NetworkMessage.hpp index d01a3475e..8055e2a49 100644 --- a/Network/NetworkMessage.hpp +++ b/Network/NetworkMessage.hpp @@ -447,16 +447,20 @@ * The server may send this message at any time. The message * specifies the background and foreground color that will be * used to highlight the specified callsign in the decoded - * messages printed in the Band Activity panel. The WSJT-X + * messages printed in the Band Activity panel. The WSJT-X * clients maintain a list of such instructions and apply them to * all decoded messages in the band activity window. To clear - * highlighting send an invalid QColor value for either or both - * of the background and foreground fields. + * and cancel highlighting send an invalid QColor value for + * either or both of the background and foreground fields. When + * using this mode the total number of callsign highlighting + * requests should be limited otherwise the performance of WSJT-X + * decoding may be impacted. A rough rule of thumb might be too + * limit the number of active highlighting requests to no more + * than 100. * * The "Highlight last" field allows the sender to request that - * the last instance only instead of all instances of the - * specified call be highlighted or have it's highlighting - * cleared. + * all instances of "Callsign" in the last period only, instead + * of all instances in all periods, be highlighted. * * * SwitchConfiguration In 14 quint32 diff --git a/Release_Notes.txt b/Release_Notes.txt index 240960a43..8a1d8fdeb 100644 --- a/Release_Notes.txt +++ b/Release_Notes.txt @@ -12,6 +12,65 @@ Copyright 2001 - 2020 by Joe Taylor, K1JT. + Release: WSJT-X 2.2.0-rc2 + May 25, 2020 + ------------------------- + +WSJT-X 2.2.0-rc2 is a release candidate for WSJT-X 2.2.0. The +following bugs present in the -rc1 version have been fixed: + + - Missing blank line between some decode sequences. + - Improper functioning of "Start new period decodes at top". + - Font selection caused crash on some macOS systems. + - Mouse action in band selector box not right in some macOS systems. + - Incorrect recall of Tx power setting in WSPR mode. + - Many fixes to hamlib library and executables (rigctld, etc.). + - Some regional settings did not allow WSJT-X to start. + - Main window "looked like old Windows" in macOS. + - Crash when "Ref Spec" is selected and no refspec.dat available. + - Improper decoding of some FT4 messages with hashed "MyCall". + - Crash after warning message about double-clicking in ISCAT mode. + +In addition, we have made the following improvements: + + - Updated some figures and text in User Guide. + - Corrected some formatting issues in the pdf version of User Guide. + - Added some new sample files. + - Improved shape and position of "green goal post" in Wide Graph. + - Significantly reduced the rate of false decodes in FT4 and FT8. + - Allow FT4 to use NA VHF Contest message formats. + - Hold Tx frequency no longer cleared when switching between modes. + - Added capability for translations of the user interface into + languages other than English. First working example (special + thanks to Xavi Perez, EA3W!), is Catalan. Spanish will be next. + - Performance improvements to decode highlighting via UDP messages. + +And finally: + +Increasing FT8 usage on the popular bands 40, 30, and 20m means that +the default 3 kHz sub-bands are often wall-to-wall with signals. +Overcrowding encourages some to turn on their amplifiers, which only +makes things worse. We are trying to coordinate the suggested +frequencies in WSJT-X with updated band plans being considered by +IARU, ARRL, and other amateur radio societies. + +On a trial basis, and in response to numerous suggestions from around +the world, we have added a second set of suggested dial frequencies +for FT8 on three HF bands and also on 6 meters. The new suggested dial +frequencies are 7.071, 10.133, 14.071, and 50.310 MHz. These +frequencies will appear in your drop-down band-selector list after you +go to the "Settings | Frequencies" tab, right-click on the frequency +table, and select "Reset". Alternatively, you can add the new FT8 +frequencies manually. + +When the conventional FT8 sub-band on 6, 20, 30, or 40 m seems too +full, please try moving your dial frequency down 3 kHz! Be aware that +as currently implemented, WSJT-X will set your dial to the lowest +frequency for the selected mode and band, when you switch bands. + +See the next section for a list of other program improvements since +WSJT-X 2.1.2. + Release: WSJT-X 2.2.0-rc1 May 10, 2020 diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt index 30113f1b2..91b4d9875 100644 --- a/doc/CMakeLists.txt +++ b/doc/CMakeLists.txt @@ -125,7 +125,7 @@ set (UG_IMGS images/VHF_controls.png images/view-menu.png images/wide-graph-controls.png - + images/Windows_Dark.png ) find_program (ASCIIDOCTOR_EXECUTABLE NAMES asciidoctor) diff --git a/doc/common/license.adoc b/doc/common/license.adoc index 9334b8edb..bc62060c7 100755 --- a/doc/common/license.adoc +++ b/doc/common/license.adoc @@ -29,7 +29,7 @@ the following copyright notice prominently: *The algorithms, source code, look-and-feel of _{prog}_ and related programs, and protocol specifications for the modes FSK441, FT4, FT8, JT4, JT6M, JT9, JT65, JTMS, QRA64, ISCAT, and MSK144 are Copyright (C) -2001-2019 by one or more of the following authors: Joseph Taylor, +2001-2020 by one or more of the following authors: Joseph Taylor, K1JT; Bill Somerville, G4WJS; Steven Franke, K9AN; Nico Palermo, IV3NWV; Greg Beam, KI7MT; Michael Black, W9MDB; Edson Pereira, PY2SDR; Philip Karn, KA9Q; and other members of the WSJT Development Group.* diff --git a/doc/common/links.adoc b/doc/common/links.adoc index 7cf3b8218..5b7296b2c 100644 --- a/doc/common/links.adoc +++ b/doc/common/links.adoc @@ -68,6 +68,7 @@ d). Edit lines as needed. Keeping them in alphabetic order help see dupes. :fmt_k5cm: http://www.k5cm.com/[FMT Event Info] :fmt_wspr: http://www.physics.princeton.edu/pulsar/K1JT/FMT_User.pdf[Accurate Frequency Measurements with your WSPR Setup] :ft4_protocol: http://physics.princeton.edu/pulsar/k1jt/FT4_Protocol.pdf[The FT4 Protocol for Digital Contesting] +:ft4_ft8_protocols: http://physics.princeton.edu/pulsar/k1jt/FT4_FT8_QEX.pdf[The FT4 and FT8 Communication Protocols] :ft8_tips: http://www.g4ifb.com/FT8_Hinson_tips_for_HF_DXers.pdf[FT8 Operating Guide] :ft8_DXped: http://physics.princeton.edu/pulsar/k1jt/FT8_DXpedition_Mode.pdf[FT8 DXpedition Mode] :gnu_gpl: http://www.gnu.org/licenses/gpl-3.0.txt[GNU General Public License] @@ -75,7 +76,7 @@ d). Edit lines as needed. Keeping them in alphabetic order help see dupes. :hrd: http://www.hrdsoftwarellc.com/[Ham Radio Deluxe] :jt4eme: http://physics.princeton.edu/pulsar/K1JT/WSJT-X_1.6.0_for_JT4_v7.pdf[Using WSJT-X for JT4 EME Operation] :jt65protocol: http://physics.princeton.edu/pulsar/K1JT/JT65.pdf[QEX] -:jtalert: http://hamapps.com/[JT-Alert] +:jtalert: http://hamapps.com/[JTAlert] :launchpadki7mt: https://launchpad.net/~ki7mt[KI7MT PPA's] :log4om: http://www.log4om.com[Log4OM] :lunarEchoes: http://physics.princeton.edu/pulsar/K1JT/LunarEchoes_QEX.pdf[QEX] diff --git a/doc/user_guide/en/acknowledgements.adoc b/doc/user_guide/en/acknowledgements.adoc index 2afa8e7a5..a5ab8b7c7 100644 --- a/doc/user_guide/en/acknowledgements.adoc +++ b/doc/user_guide/en/acknowledgements.adoc @@ -1,19 +1,21 @@ // Status=review -The _WSJT_ project was started in 2001. Since 2005 it has been an -Open Source project, and it now includes programs _WSJT_, _MAP65_, -_WSPR_, _WSJT-X_, and _WSPR-X_. All code is licensed under the -GNU Public License (GPL). Many users of these programs, too numerous -to mention here individually, have contributed suggestions and advice -that have greatly aided the development of _WSJT_ and its sister -programs. +The _WSJT_ project was started by *K1JT* in 2001. Since 2005 it has +been an Open Source project, which now includes the programs _WSJT_, +_MAP65_, _WSPR_, _WSJT-X_, and _WSPR-X_. *G4WJS* (since 2013) and +*K9AN* (since 2015) have made major contributions to _WSJT-X_. +Together with K1JT they now form the core development team. -For _WSJT-X_ in particular, we acknowledge contributions from *AC6SL, -AE4JY, DJ0OT, G3WDG, G4KLA, G4WJS, IV3NWV, IW3RAB, K3WYC, K9AN, -KA6MAL, KA9Q, KB1ZMX, KD6EKQ, KI7MT, KK1D, ND0B, PY2SDR, VE1SKY, VK3ACF, -VK4BDJ, VK7MO, W4TI, W4TV, and W9MDB*. Each of these amateurs has helped to -bring the program’s design, code, testing, and/or documentation to -its present state. +All code in the _WSJT_ project is licensed under the GNU Public +License (GPL). Many users of these programs, too numerous to mention +here individually, have contributed suggestions and advice that have +greatly aided the development of _WSJT_ and its sister programs. For +_WSJT-X_ in particular, we acknowledge contributions from *AC6SL, +AE4JY, DJ0OT, G3WDG, G4KLA, IV3NWV, IW3RAB, K3WYC, KA6MAL, KA9Q, +KB1ZMX, KD6EKQ, KI7MT, KK1D, ND0B, PY2SDR, VE1SKY, VK3ACF, VK4BDJ, +VK7MO, W4TI, W4TV, and W9MDB*. Each of these amateurs has helped to +bring the program’s design, code, testing, and/or documentation to its +present state. Most of the color palettes for the _WSJT-X_ waterfall were copied from the excellent, well documented, open-source program _fldigi_, by *W1HKJ* diff --git a/doc/user_guide/en/controls-functions-main-window.adoc b/doc/user_guide/en/controls-functions-main-window.adoc index 0b09f2d9c..2ea894351 100644 --- a/doc/user_guide/en/controls-functions-main-window.adoc +++ b/doc/user_guide/en/controls-functions-main-window.adoc @@ -1,4 +1,4 @@ -// Status=review The following controls appear just under the decoded +The following controls appear just under the decoded text windows on the main screen. Some controls appear only in certain operating modes. diff --git a/doc/user_guide/en/controls-functions-menus.adoc b/doc/user_guide/en/controls-functions-menus.adoc index dc43b0fa1..d069a9614 100644 --- a/doc/user_guide/en/controls-functions-menus.adoc +++ b/doc/user_guide/en/controls-functions-menus.adoc @@ -20,11 +20,18 @@ image::file-menu.png[align="left",alt="File Menu"] ==== Configuration Menu image::config-menu.png[align="left",alt="File Menu"] -Many users prefer to create and use entries on the *Configurations* -menu for switching between modes. Simply *Clone* the *Default* entry, -*Rename* it as desired, and then make all desired settings for that -configuration. These settings will be restored whenever you select -that configuration. +Most users of more than one mode prefer to create and use entries on +the *Configurations* menu for switching between modes. You can +*Clone* the configuration currently in use, *Rename* the clone as +desired, and then make all desired settings for the new configuration. +The easiest way is to start with a working setup for some mode, say +*FT8*. *Clone* it, then select *Configurations | FT8 - Copy | Rename +...*, enter a new name, say *FT4*, and click *OK*. Then select the +new name from the *Configurations* menu and choose *Switch To*. When +the new configuration comes up you can change any desired settings: +for example, select *FT4* from the *Mode* menu. Configurations save +all settings that are normally restored after a program restart, +including which of the defined configurations is currently active. As well as switching between configurations while running _WSJT-X_ you can also start the application from the command line in any desired diff --git a/doc/user_guide/en/controls-functions-wide-graph.adoc b/doc/user_guide/en/controls-functions-wide-graph.adoc index 747d08347..e269df826 100644 --- a/doc/user_guide/en/controls-functions-wide-graph.adoc +++ b/doc/user_guide/en/controls-functions-wide-graph.adoc @@ -98,5 +98,5 @@ color and line width for the plots. Most windows can be resized as desired. If you are short of screen space you can make the Main Window and Wide Graph smaller by hiding some controls and labels. To enable this feature uncheck the box -labales *Controls* at top left of the *Wide Graph* window, or the box +labeled *Controls* at top left of the *Wide Graph* window, or the box *Menus* to the right of the *Tune* button on the Main Window. diff --git a/doc/user_guide/en/decoder_notes.adoc b/doc/user_guide/en/decoder_notes.adoc index 89428c216..4227b408c 100644 --- a/doc/user_guide/en/decoder_notes.adoc +++ b/doc/user_guide/en/decoder_notes.adoc @@ -26,7 +26,7 @@ hypothetically known information. [[FT8_AP_INFO_TABLE]] .FT4 and FT8 AP information types -[width="35%",cols="h10,>. -Additional features are provided for *Contest* and *Fox* logging. -(more to come, here ...) diff --git a/doc/user_guide/en/make-qso.adoc b/doc/user_guide/en/make-qso.adoc index 81df8b826..03f02fd46 100644 --- a/doc/user_guide/en/make-qso.adoc +++ b/doc/user_guide/en/make-qso.adoc @@ -93,7 +93,7 @@ tab. Model QSOs then proceed as follows, for each event type: *NA VHF Contest* - CQ K1ABC FN42 + CQ TEST K1ABC FN42 K1ABC W9XYZ EN37 W9XYZ K1ABC R FN42 K1ABC W9XYZ RRR @@ -134,7 +134,7 @@ to upgrade _WSJT-X_ if you will use *EU VHF Contest* messages. *WW Digi Contest* - CQ K1ABC FN42 + CQ WW K1ABC FN42 K1ABC S52XYZ JN76 S52XYZ K1ABC R FN42 K1ABC S52XYZ RR73 diff --git a/doc/user_guide/en/measurement_tools.adoc b/doc/user_guide/en/measurement_tools.adoc index 04e2d9109..766939e7c 100644 --- a/doc/user_guide/en/measurement_tools.adoc +++ b/doc/user_guide/en/measurement_tools.adoc @@ -104,9 +104,9 @@ shape of your receiver's passband. Disconnect your antenna or tune to a quiet frequency with no signals. With _WSJT-X_ running in one of the slow modes, select *Measure reference spectrum* from the *Tools* menu. Wait for about a minute and then hit the *Stop* button. A file -named `refspec.dat` will appear in your log directory. - - [ ... more to come ... ] +named `refspec.dat` will appear in your log directory. When you check +*Ref Spec* on the *Wide Graph*, the recorded reference spectrum will +then be used to flatten your overall effective passband. === Phase Equalization diff --git a/doc/user_guide/en/new_features.adoc b/doc/user_guide/en/new_features.adoc index 14a2c576c..c653379f1 100644 --- a/doc/user_guide/en/new_features.adoc +++ b/doc/user_guide/en/new_features.adoc @@ -48,7 +48,7 @@ Tx3 messages -- those conveying signal report, serial number, and 6-character locator -- now use hashcodes for both callsigns. This change is *not* backward compatible with earlier versions of _WSJT-X_, so all users of *EU VHF Contest* messages should be sure to upgrade to -versiion 2.2.0. See <> for details. +version 2.2.0. See <> for details. *Minor enhancements and bug fixes* @@ -83,14 +83,25 @@ overlooked. IMPORTANT: *Warnings* about usage that could lead to undesired consequences. +=== User Interface in Other Languages + +Thanks to Xavi Perez, EA3W, in cooperation with G4WJS, the _WSJT-X_ +user interface is now available the Catalan language. Spanish will +follow soon, and other languages when translations are made. When a +translated user interface is available for the computer's default +System Language, it will appear automatically on program startup. + === How You Can Contribute _WSJT-X_ is part of an open-source project released under the {gnu_gpl} (GPLv3). If you have programming or documentation skills or would like to contribute to the project in other ways, please make -your interests known to the development team. The project's -source-code repository can be found at {devrepo}, and communication -among the developers takes place on the email reflector {devmail}. -Bug reports and suggestions for new features, improvements to the -_WSJT-X_ User Guide, etc., may be sent there as well. You must join -the group before posting to the email list. +your interests known to the development team. We especially encourage +those with translation skills to volunteer their help, either for +this _User Guide_ or for the program's user interface. + +The project's source-code repository can be found at {devrepo}, and +communication among the developers takes place on the email reflector +{devmail}. Bug reports and suggestions for new features, improvements +to the _WSJT-X_ User Guide, etc., may be sent there as well. You must +join the group before posting to the email list. diff --git a/doc/user_guide/en/platform-dependencies.adoc b/doc/user_guide/en/platform-dependencies.adoc index 384ec3dda..f47f6173c 100644 --- a/doc/user_guide/en/platform-dependencies.adoc +++ b/doc/user_guide/en/platform-dependencies.adoc @@ -3,7 +3,8 @@ A few _WSJT-X_ features behave differently in Windows, Linux, or OS X, or may not be relevant to all operating platforms. -.File locations +=== File locations + * *Windows* - *Settings:* %LOCALAPPDATA%\WSJT-X\WSJT-X.ini diff --git a/doc/user_guide/en/protocols.adoc b/doc/user_guide/en/protocols.adoc index 2c0c18ea6..625f63511 100644 --- a/doc/user_guide/en/protocols.adoc +++ b/doc/user_guide/en/protocols.adoc @@ -52,10 +52,10 @@ were the callsigns `E9AA` through `E9ZZ`. Upon reception they are converted back to the form `CQ AA` through `CQ ZZ`, for display to the user. -The new FT4, FT8, and MSK144 protocols use a different lossless -compression algorithm with features to generate and recognize the -special messages used for contesting and the like. (More to come, -here ...) +The FT4, FT8, and MSK144 protocols use different lossless compression +algorithms with features that generate and recognize special messages +used for contesting and other special purposes. Full details have +been published in QEX, see {ft4_ft8_protocols}. To be useful on channels with low signal-to-noise ratio, this kind of lossless message compression requires use of a strong forward error diff --git a/doc/user_guide/en/settings-advanced.adoc b/doc/user_guide/en/settings-advanced.adoc index f22dd13c4..d8d095278 100644 --- a/doc/user_guide/en/settings-advanced.adoc +++ b/doc/user_guide/en/settings-advanced.adoc @@ -1,6 +1,6 @@ image::settings-advanced.png[align="center",alt="Settings Advanced"] -_JT65 decoding parameters_ +_JT65 VHF/UHF/Microwave decoding parameters_ - *Random erasure patterns* logarithmically scales the number of pseudo-random trials used by the Franke-Taylor JT65 decoder. Larger diff --git a/doc/user_guide/en/settings-audio.adoc b/doc/user_guide/en/settings-audio.adoc index 921602ef9..5779b8d27 100644 --- a/doc/user_guide/en/settings-audio.adoc +++ b/doc/user_guide/en/settings-audio.adoc @@ -1,9 +1,9 @@ // Status=review -image::settings-audio.png[align="center",alt="_WSJT-X_ Audio Configuration Screen"] - Select the *Audio* tab to configure your sound system. +image::settings-audio.png[align="center",alt="_WSJT-X_ Audio Configuration Screen"] + * _Soundcard_: Select the audio devices to be used for *Input* and *Output*. Usually the *Mono* settings will suffice, but in special cases you can choose *Left*, *Right*, or *Both* stereo channels. @@ -19,7 +19,7 @@ to prevent inadvertently transmitting them over the air. + -NOTE: Windows Vista and later may configure audio devices using +NOTE: Windows 7 and later may configure audio devices using the Texas Instruments PCM2900 series CODEC for microphone input rather line input. (This chip is used in many radios with built-in USB CODECs, as well as various other audio interfaces.) If you are using diff --git a/doc/user_guide/en/settings-frequencies.adoc b/doc/user_guide/en/settings-frequencies.adoc index a0d1015c1..52e20c58c 100644 --- a/doc/user_guide/en/settings-frequencies.adoc +++ b/doc/user_guide/en/settings-frequencies.adoc @@ -1,12 +1,13 @@ // Status=review [[FIG_BAND_SETTINGS]] -image::settings-frequencies.png[align="center",alt="Frequency Screen"] -_Working Frequencies_: By default, the *Working Frequencies* table -contains a list of frequencies conventionally used for modes FT8, JT4, -JT9, JT65, MSK144, WSPR, and Echo. Conventions may change with time -or by user preference; you can modify the frequency table as desired. +_By default, the *Working Frequencies* table contains a list of +frequencies conventionally used for modes FT8, JT4, JT9, JT65, MSK144, +WSPR, and Echo. Conventions may change with time or by user +preference; you can modify the frequency table as desired. + +image::settings-frequencies.png[align="center",alt="Frequency Screen"] - 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 diff --git a/doc/user_guide/en/settings-general.adoc b/doc/user_guide/en/settings-general.adoc index 9ae1621ff..bffa94f9a 100644 --- a/doc/user_guide/en/settings-general.adoc +++ b/doc/user_guide/en/settings-general.adoc @@ -1,6 +1,5 @@ // Status=review [[FIG_CONFIG_STATION]] -image::settings-general.png[align="center",alt="Settings Window"] Select the *General* tab on the *Settings* window. Under _Station Details_ enter your callsign, grid locator (preferably the 6-character @@ -9,6 +8,8 @@ Middle East, and Northern Asia; Region 2 the Americas; and Region 3 Southern Asia and the Pacific. This information will be sufficient for initial tests. +image::settings-general.png[align="center",alt="Settings Window"] + Meanings of remaining options on the *General* tab should be self-explanatory after you have made some QSOs using _WSJT-X_. You may return to set these options to your preferences later. diff --git a/doc/user_guide/en/settings-radio.adoc b/doc/user_guide/en/settings-radio.adoc index 720ec0f06..e61d0998b 100644 --- a/doc/user_guide/en/settings-radio.adoc +++ b/doc/user_guide/en/settings-radio.adoc @@ -1,11 +1,11 @@ // Status=review -image::RadioTab.png[align="center",alt="Radio Tab"] - _WSJT-X_ offers CAT (Computer Aided Transceiver) control of relevant features of most modern transceivers. To configure the program for your radio, select the *Radio* tab. +image::RadioTab.png[align="center",alt="Radio Tab"] + * Select your radio type from the drop-down list labeled *Rig*, or *None* if you do not wish to use CAT control. @@ -26,8 +26,6 @@ your radio, select the *Radio* tab. + -NOTE: _Omni-Rig_ is available only under Windows. - * Set *Poll Interval* to the desired interval for _WSJT-X_ to query your radio. For most radios a small number (say, 1 – 3 s) is suitable. diff --git a/doc/user_guide/en/settings-txmacros.adoc b/doc/user_guide/en/settings-txmacros.adoc index 0f31cb823..fb23d5344 100644 --- a/doc/user_guide/en/settings-txmacros.adoc +++ b/doc/user_guide/en/settings-txmacros.adoc @@ -1,11 +1,12 @@ // Status=review [[FigTxMacros]] -image::tx-macros.png[align="center",alt="Tx Macros Screen"] *Tx Macros* are an aid for sending brief, frequently used free-text messages such as the examples shown above. +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 characters) in the entry field at top, then click *Add*. diff --git a/doc/user_guide/en/transceiver-setup.adoc b/doc/user_guide/en/transceiver-setup.adoc index b281c4b9b..d0d53ba53 100644 --- a/doc/user_guide/en/transceiver-setup.adoc +++ b/doc/user_guide/en/transceiver-setup.adoc @@ -39,12 +39,6 @@ TIP: The PC audio mixer normally has two sliders, one for each frequency setting, on HF bands you can display the full sub-band generally used for one mode. -- Of course, you might prefer to concentrate on one mode at a time, - setting your dial frequency to (say) 14.074 for FT8, 14.076 for - JT65, or 14.078 for JT9. Present conventions have the nominal JT9 - dial frequency 2 kHz higher than the JT65 dial frequency on most - bands, and the FT8 frequency 2 kHz lower. - .Transmitter Audio Level * Click the *Tune* button on the main screen to switch the radio into diff --git a/doc/user_guide/en/tutorial-example3.adoc b/doc/user_guide/en/tutorial-example3.adoc index 704aa2170..1669f18df 100644 --- a/doc/user_guide/en/tutorial-example3.adoc +++ b/doc/user_guide/en/tutorial-example3.adoc @@ -1,14 +1,13 @@ // Status=review .Main Window: - Select *FT8* on the *Mode* menu. -- Set Tx frequency to 1600 Hz, Rx to 1442 Hz. - Double-click on *Erase* to clear both text windows. .Wide Graph Settings: -- *Bins/Pixel* = 4, *Start* = 200 Hz, *N Avg* = 2 +- *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 2600 Hz. +frequency limit is approximately 3300 Hz. .Open a Wave File: @@ -31,7 +30,7 @@ frequency control on the main window will be updated accordingly. frequency marker and its associated control on the main window will 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. - Double-clicking at any frequency on the waterfall does all the @@ -45,7 +44,7 @@ Rx frequency to that of the selected message and leaving Tx frequency unchanged. To change both Rx and Tx frequencies, hold *Ctrl* down when double-clicking. -TIP: To avoid QRM from competing callers, it is frequently desirable +TIP: To avoid QRM from competing callers, it is usually best to answer a CQ on a different frequency from that of the CQing station. The same is true when you tail-end another QSO. Choose a Tx frequency that appears to be not in use. You might want to check the @@ -54,7 +53,7 @@ box *Hold Tx Freq*. TIP: Keyboard shortcuts *Shift+F11* and *Shift+F12* provide an easy way to move your Tx frequency down or up in 60 Hz steps. -TIP: An online {ft8_tips} by ZL2IFB offers many helpful tips on +TIP: An online {ft8_tips} by ZL2IFB offers many additional tips on operating procedures. .FT8 DXpedition Mode: diff --git a/doc/user_guide/en/tutorial-example4.adoc b/doc/user_guide/en/tutorial-example4.adoc index cc15caf53..22785896a 100644 --- a/doc/user_guide/en/tutorial-example4.adoc +++ b/doc/user_guide/en/tutorial-example4.adoc @@ -1,6 +1,7 @@ -FT4 is designed for contesting, particularly on the HF bands. -Compared with FT8 it is 3.5 dB less sensitive and requires 1.6 times -the bandwidth, but it offers the potential for twice the QSO rate. +FT4 is designed for contesting, particularly on the HF bands and 6 +meters. Compared with FT8 it is 3.5 dB less sensitive and requires +1.6 times the bandwidth, but it offers the potential for twice the QSO +rate. .Main Window: - Select *FT4* on the *Mode* menu. @@ -8,14 +9,14 @@ the bandwidth, but it offers the potential for twice the QSO rate. .Wide Graph Settings: -- *Bins/Pixel* = 7, *Start* = 100 Hz, *N Avg* = 1 +- *Bins/Pixel* = 5, *Start* = 100 Hz, *N Avg* = 1 - Adjust the width of the Wide Graph window so that the upper -frequency limit is approximately 4000 Hz. +frequency limit is approximately 3300 Hz. .Open a Wave File: - Select *File | Open* and navigate to -+...\save\samples\FT4\000000_000002.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. This sample file was recorded during a practice contest test session, so most of the decoded messages use the *RTTY Roundup* message formats. diff --git a/doc/user_guide/en/vhf-features.adoc b/doc/user_guide/en/vhf-features.adoc index cc47ae4a7..96433eef0 100644 --- a/doc/user_guide/en/vhf-features.adoc +++ b/doc/user_guide/en/vhf-features.adoc @@ -343,7 +343,7 @@ MHz. On higher microwave bands typical choices are JT65C or one of the wider QRA64 or JT4 submodes, depending on the expected amount of Doppler spread. JT4 and JT65 offer message *Averaging* -- the summation of subsequent transmissions that convey the same message -- -to enable decodes at signal-to-noise ratios several dB below below the +to enable decodes at signal-to-noise ratios several dB below the threshold for single transmissions. These modes also allow *Deep Search* decoding, in which the decoder hypothesizes messages containing known or previously decoded callsigns and tests them for @@ -412,7 +412,7 @@ image::EME_Deep_1.png[align="center",alt="EME_Deep_1"] The message `CQ K1ABC FN42` appears in the _Average Decodes_ panel, flagged with the <> `f3`. The label means that decoding was accomplished with the Franke-Taylor -algorithm, using the average or 3 transmissions. +algorithm, using the average of 3 transmissions. The _Message Averaging_ window now looks like this: @@ -436,4 +436,6 @@ Decoding>>), and is based on the average of 2 transmissions. You might wish to experiment with other combinations of entries for *My Call*, *DX Call*, and *DX Grid*, and with toggling the various -options of the *Decode* menu on and off. +options of the *Decode* menu on and off. For best sensitivity, most +users will want to use *Deep* decoding with *Enable averaging*, +*Enable deep search*, and *Enable AP* all turned on. diff --git a/doc/user_guide/en/wsjtx-main.adoc b/doc/user_guide/en/wsjtx-main.adoc index a3cea81e0..b04291136 100644 --- a/doc/user_guide/en/wsjtx-main.adoc +++ b/doc/user_guide/en/wsjtx-main.adoc @@ -68,8 +68,7 @@ include::install-from-source.adoc[] Select *Settings* from the *File* menu or by typing *F2*. (On Macintosh select *Preferences* from the _WSJT-X_ menu, or use the keyboard shortcut *Cmd+,*). The following sections describe setup -options available on each of eight tabs selectable near the top of the -window. +options available on eight tabs selectable near the top of the window. [[GENERAL]] === General @@ -103,6 +102,25 @@ include::settings-colors.adoc[] === Advanced include::settings-advanced.adoc[] +[[DARK_STYLE]] +=== Dark Style + +An optional *Dark* style is available. To make it effective you will +probably want to redefine your color settings. In Windows or Linux, +start the program from a command-prompt window using the following +command, or modify the _WSJT-X_ desktop shortcut accordingly: + + wsjtx --stylesheet :/qdarkstyle/style.qss + +In macOS, enter the following command from a terminal: + + open /Applications/wsjtx.app --args -stylesheet :/qdarkstyle/style.qss + +Depending on your operating system, the main _WSJT-X_ window will look +something like this: + +image::Windows_Dark.png[align="center"] + [[TRANSCEIVER]] == Transceiver Setup include::transceiver-setup.adoc[] diff --git a/lib/77bit/packjt77.f90 b/lib/77bit/packjt77.f90 index 4d51e421a..c5a663ccd 100644 --- a/lib/77bit/packjt77.f90 +++ b/lib/77bit/packjt77.f90 @@ -533,7 +533,12 @@ subroutine unpack77(c77,nrx,msg,unpk77_success) ! EU VHF contest read(c77,1060) n12,n22,ir,irpt,iserial,igrid6 1060 format(b12,b22,b1,b3,b11,b25) + if(igrid6.lt.0 .or. igrid6.gt.18662399) then + unpk77_success=.false. + return + endif call hash12(n12,call_1) + if(n12.eq.hashmy12) call_1='<'//trim(mycall13)//'>' call hash22(n22,call_2) nrs=52+irpt write(cexch,1022) nrs,iserial @@ -545,7 +550,7 @@ subroutine unpack77(c77,nrx,msg,unpk77_success) else if(i3.ge.6) then ! i3 values 6 and 7 are not yet defined unpk77_success=.false. endif -! if(msg(1:4).eq.'CQ <') unpk77_success=.false. + if(msg(1:4).eq.'CQ <') unpk77_success=.false. return end subroutine unpack77 diff --git a/lib/ft8/encode174_91_nocrc.f90 b/lib/ft8/encode174_91_nocrc.f90 index 371e83170..82d1669db 100644 --- a/lib/ft8/encode174_91_nocrc.f90 +++ b/lib/ft8/encode174_91_nocrc.f90 @@ -7,12 +7,10 @@ subroutine encode174_91_nocrc(message,codeword) use crc integer, parameter:: N=174, K=91, M=N-K - character*91 tmpchar integer*1 codeword(N) integer*1 gen(M,K) integer*1 message(K) integer*1 pchecks(M) - integer*1, target :: i1MsgBytes(12) include "ldpc_174_91_c_generator.f90" logical first data first/.true./ diff --git a/lib/ft8/ft8b.f90 b/lib/ft8/ft8b.f90 index b92bde34c..e6a3e8d34 100644 --- a/lib/ft8/ft8b.f90 +++ b/lib/ft8/ft8b.f90 @@ -454,7 +454,7 @@ subroutine ft8b(dd0,newdat,nQSOProgress,nfqso,nftx,ndepth,nzhsym,lapon, & if(.not.nagain) then xsnr=xsnr2 endif - if(nsync.le.7 .and. xsnr.lt.-24.0) then !bail out, likely false decode + if(nsync.le.10 .and. xsnr.lt.-24.0) then !bail out, likely false decode nbadcrc=1 return endif diff --git a/lib/ft8/osd174_91.f90 b/lib/ft8/osd174_91.f90 index d9584f56e..89677ebe8 100644 --- a/lib/ft8/osd174_91.f90 +++ b/lib/ft8/osd174_91.f90 @@ -167,7 +167,7 @@ subroutine osd174_91(llr,k,apmask,ndeep,message91,cw,nhardmin,dmin) nt=40 ntheta=12 ntau=15 - elseif(ndeep.eq.6) then + else !ndeep=6 nord=4 npre1=1 npre2=1 diff --git a/lib/jt49sim.f90 b/lib/jt49sim.f90 index e8aff69da..7c4c75051 100644 --- a/lib/jt49sim.f90 +++ b/lib/jt49sim.f90 @@ -61,6 +61,7 @@ program jt49sim nsym=0 dnsps=0. baud=0. + sig=0. if(imode.eq.4) then nsym=206 !Number of channel symbols (JT4) diff --git a/lib/refspectrum.f90 b/lib/refspectrum.f90 index fdd302ae5..68b514f95 100644 --- a/lib/refspectrum.f90 +++ b/lib/refspectrum.f90 @@ -124,12 +124,12 @@ subroutine refspectrum(id2,bclear,brefspec,buseref,fname) if(buseref) then if(blastuse.neqv.buseref) then !just enabled so read filter fil=1.0 - open(16,file=fname,status='old',err=110) - read(16,1003,err=20,end=100) ndummy,ndummy,nterms,a + open(16,file=fname,status='old',err=999) + read(16,1003,err=20,end=999) ndummy,ndummy,nterms,a goto 30 20 rewind(16) !allow for old style refspec.dat with no header 30 do i=1,NH - read(16,1005,err=100,end=100) freq,s(i),ref(i),fil(i),filter(i) + read(16,1005,err=999,end=999) freq,s(i),ref(i),fil(i),filter(i) enddo ! Make the filter causal for overlap and add. cx(0)=0.0 @@ -139,8 +139,7 @@ subroutine refspectrum(id2,bclear,brefspec,buseref,fname) x(800:NH)=0.0 call four2a(cx,NFFT,1,-1,0) cfil=cx -100 close(16) -110 continue + close(16) endif ! Use overlap and add method to apply causal reference filter. x(0:NH-1)=id2(1:NH) @@ -154,6 +153,6 @@ subroutine refspectrum(id2,bclear,brefspec,buseref,fname) id2(1:NH)=nint(x(0:NH-1)) endif blastuse=buseref - - return + +999 return end subroutine refspectrum diff --git a/lib/wsprd/wsprd_utils.c b/lib/wsprd/wsprd_utils.c index 5a1d49741..64e809f8f 100644 --- a/lib/wsprd/wsprd_utils.c +++ b/lib/wsprd/wsprd_utils.c @@ -243,7 +243,7 @@ int floatcomp(const void* elem1, const void* elem2) int unpk_(signed char *message, char *hashtab, char *loctab, char *call_loc_pow, char *callsign) { int n1,n2,n3,ndbm,ihash,nadd,noprint=0; - char grid[5],grid6[7],cdbm[3]; + char grid[5],grid6[7],cdbm[4]; unpack50(message,&n1,&n2); if( !unpackcall(n1,callsign) ) return 1; diff --git a/models/FrequencyList.cpp b/models/FrequencyList.cpp index c0170a499..fbfcddcf4 100644 --- a/models/FrequencyList.cpp +++ b/models/FrequencyList.cpp @@ -124,6 +124,7 @@ namespace // 7110 LSB EMCOMM // {7038600, Modes::WSPR, IARURegions::ALL}, + {7071000, Modes::FT8, IARURegions::ALL}, {7074000, Modes::FT8, IARURegions::ALL}, {7076000, Modes::JT65, IARURegions::ALL}, {7078000, Modes::JT9, IARURegions::ALL}, @@ -157,6 +158,7 @@ namespace // 10142.25 OLIVIA, Contestia, etc. // 10143.25 OLIVIA, Contestia, etc. (main QRQ) // + {10133000, Modes::FT8, IARURegions::ALL}, {10136000, Modes::FT8, IARURegions::ALL}, {10138000, Modes::JT65, IARURegions::ALL}, {10138700, Modes::WSPR, IARURegions::ALL}, @@ -201,6 +203,7 @@ namespace // 14106.5 OLIVIA 1000 (main QRG) // {14095600, Modes::WSPR, IARURegions::ALL}, + {14071000, Modes::FT8, IARURegions::ALL}, {14074000, Modes::FT8, IARURegions::ALL}, {14076000, Modes::JT65, IARURegions::ALL}, {14078000, Modes::JT9, IARURegions::ALL}, @@ -267,6 +270,7 @@ namespace {50293000, Modes::WSPR, IARURegions::R3}, {50310000, Modes::JT65, IARURegions::ALL}, {50312000, Modes::JT9, IARURegions::ALL}, + {50310000, Modes::FT8, IARURegions::ALL}, {50313000, Modes::FT8, IARURegions::ALL}, {50318000, Modes::FT4, IARURegions::ALL}, // provisional {50323000, Modes::FT8, IARURegions::ALL}, diff --git a/shortcuts.txt b/shortcuts.txt index c858f0639..d74f860fd 100644 --- a/shortcuts.txt +++ b/shortcuts.txt @@ -37,8 +37,9 @@ Ctrl+O Open a .wav file Alt+O Change operator Alt+Q Log QSO - Ctrl+R Set Tx4 message to RRR + Ctrl+R Set Tx4 message to RRR (not in FT4) Alt+R Set Tx4 message to RR73 Alt+S Stop monitoring - Alt+T Tune + Alt+T Toggle Tune status + Alt+Z Clear hung decoder status diff --git a/widgets/displaytext.cpp b/widgets/displaytext.cpp index db00e2587..b3ccf8eb2 100644 --- a/widgets/displaytext.cpp +++ b/widgets/displaytext.cpp @@ -497,60 +497,92 @@ namespace { void update_selection (QTextCursor& cursor, QColor const& bg, QColor const& fg) { - if (!cursor.isNull ()) + QTextCharFormat format {cursor.charFormat ()}; + if (bg.isValid ()) { - QTextCharFormat format {cursor.charFormat ()}; - if (bg.isValid ()) - { - format.setBackground (bg); - } - else - { - format.clearBackground (); - } - if (fg.isValid ()) - { - format.setForeground (fg); - } - else - { - format.clearForeground (); - } - cursor.mergeCharFormat (format); + format.setBackground (bg); } + else + { + format.clearBackground (); + } + if (fg.isValid ()) + { + format.setForeground (fg); + } + else + { + format.clearForeground (); + } + cursor.mergeCharFormat (format); } void reset_selection (QTextCursor& cursor) { - if (!cursor.isNull ()) + // restore previous text format, we rely on the text + // char format at he start of the selection being the + // old one which should be the case + auto c2 = cursor; + c2.setPosition (c2.selectionStart ()); + cursor.setCharFormat (c2.charFormat ()); + } +} + +namespace +{ + QString get_timestamp (QTextCursor& cursor) + { + QString timestamp; + if (cursor.movePosition (QTextCursor::PreviousCharacter) + && cursor.movePosition (QTextCursor::StartOfLine) + && cursor.movePosition (QTextCursor::EndOfWord, QTextCursor::KeepAnchor) + && cursor.hasSelection ()) { - // restore previous text format, we rely on the text - // char format at he start of the selection being the - // old one which should be the case - auto c2 = cursor; - c2.setPosition (c2.selectionStart ()); - cursor.setCharFormat (c2.charFormat ()); + timestamp = cursor.selectedText (); + cursor.movePosition (QTextCursor::StartOfLine); } + return timestamp; } } void DisplayText::highlight_callsign (QString const& callsign, QColor const& bg, - QColor const& fg, bool last_only) + QColor const& fg, bool last_period_only) { + // qDebug () << "DisplayText::highlight_callsign: callsign:" << callsign << "last period:" << last_period_only; + if (!callsign.size ()) + { + return; + } + QRegularExpression target {QString {"?"}, QRegularExpression::DontCaptureOption}; QTextCharFormat old_format {currentCharFormat ()}; QTextCursor cursor {document ()}; - if (last_only) + if (last_period_only) { + // highlight each instance of the given callsign (word) in the + // current period cursor.movePosition (QTextCursor::End); - cursor = document ()->find (callsign, cursor - , QTextDocument::FindBackward | QTextDocument::FindWholeWords); - if (bg.isValid () || fg.isValid ()) + QTextCursor period_start {cursor}; + QTextCursor prior {cursor}; + auto period_timestamp = get_timestamp (period_start); + while (period_timestamp.size () && period_timestamp == get_timestamp (prior)) { - update_selection (cursor, bg, fg); + period_start = prior; } - else + while (!cursor.isNull () && cursor > period_start) { - reset_selection (cursor); + cursor = document ()->find (target, cursor + , QTextDocument::FindBackward | QTextDocument::FindWholeWords); + if (!cursor.isNull () && cursor.hasSelection ()) + { + if (bg.isValid () || fg.isValid ()) + { + update_selection (cursor, bg, fg); + } + else + { + reset_selection (cursor); + } + } } } else @@ -569,8 +601,11 @@ void DisplayText::highlight_callsign (QString const& callsign, QColor const& bg, } while (!cursor.isNull ()) { - cursor = document ()->find (callsign, cursor, QTextDocument::FindWholeWords); - update_selection (cursor, bg, fg); + cursor = document ()->find (target, cursor, QTextDocument::FindWholeWords); + if (!cursor.isNull () && cursor.hasSelection ()) + { + update_selection (cursor, bg, fg); + } } } else if (pos != highlighted_calls_.end ()) @@ -579,8 +614,11 @@ void DisplayText::highlight_callsign (QString const& callsign, QColor const& bg, QTextCursor cursor {document ()}; while (!cursor.isNull ()) { - cursor = document ()->find (callsign, cursor, QTextDocument::FindWholeWords); - reset_selection (cursor); + cursor = document ()->find (target, cursor, QTextDocument::FindWholeWords); + if (!cursor.isNull () && cursor.hasSelection ()) + { + reset_selection (cursor); + } } } } diff --git a/widgets/displaytext.h b/widgets/displaytext.h index 5aa8c7103..fb8bb6134 100644 --- a/widgets/displaytext.h +++ b/widgets/displaytext.h @@ -43,7 +43,7 @@ public: Q_SLOT void appendText (QString const& text, QColor bg = QColor {}, QColor fg = QColor {} , QString const& call1 = QString {}, QString const& call2 = QString {}); Q_SLOT void erase (); - Q_SLOT void highlight_callsign (QString const& callsign, QColor const& bg, QColor const& fg, bool last_only); + Q_SLOT void highlight_callsign (QString const& callsign, QColor const& bg, QColor const& fg, bool last_period_only); private: void mouseDoubleClickEvent (QMouseEvent *) override; diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 29d55e028..6b01c4841 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -801,8 +801,6 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, SLOT(setFreq4(int,int))); decodeBusy(false); - QString t1[19]={"1 mW","2 mW","5 mW","10 mW","20 mW","50 mW","100 mW","200 mW","500 mW", - "1 W","2 W","5 W","10 W","20 W","50 W","100 W","200 W","500 W","1 kW"}; m_msg[0][0]=0; ui->labDXped->setVisible(false); @@ -811,13 +809,10 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, ui->labNextCall->setVisible(false); ui->labNextCall->setToolTip(""); //### Possibly temporary ? ### - for(int i=0; i<19; i++) { //Initialize dBm values - float dbm=(10.0*i)/3.0; - int ndbm=int(dbm+0.5); - QString t; - t = t.asprintf("%d dBm ",ndbm); - t+=t1[i]; - ui->TxPowerComboBox->addItem(t); + char const * const power[] = {"1 mW","2 mW","5 mW","10 mW","20 mW","50 mW","100 mW","200 mW","500 mW", + "1 W","2 W","5 W","10 W","20 W","50 W","100 W","200 W","500 W","1 kW"}; + for(auto i = 0u; i < sizeof power / sizeof power[0]; ++i) { //Initialize dBm values + ui->TxPowerComboBox->addItem (QString {"%1 dBm %2"}.arg (int (10. * i / 3.)).arg (power[i])); } m_dateTimeRcvdRR73=QDateTime::currentDateTimeUtc(); @@ -935,7 +930,7 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, m_saveDecoded=ui->actionSave_decoded->isChecked(); m_saveAll=ui->actionSave_all->isChecked(); ui->sbTxPercent->setValue(m_pctx); - ui->TxPowerComboBox->setCurrentIndex(int(0.3*m_dBm+0.2)); + ui->TxPowerComboBox->setCurrentIndex(int(.3 * m_dBm + .2)); ui->cbUploadWSPR_Spots->setChecked(m_uploadSpots); if((m_ndepth&7)==1) ui->actionQuickDecode->setChecked(true); if((m_ndepth&7)==2) ui->actionMediumDecode->setChecked(true); @@ -1199,7 +1194,7 @@ void MainWindow::readSettings() m_ndepth=m_settings->value("NDepth",3).toInt(); m_pctx=m_settings->value("PctTx",20).toInt(); m_dBm=m_settings->value("dBm",37).toInt(); - m_send_RR73=m_settings->value("RR73",37).toBool(); + m_send_RR73=m_settings->value("RR73",false).toBool(); if(m_send_RR73) { m_send_RR73=false; on_txrb4_doubleClicked(); @@ -1428,11 +1423,6 @@ void MainWindow::dataSink(qint64 frames) } } - /* - if(m_ihsym==m_hsymStop or (m_mode=="FT8" and m_ihsym==m_earlyDecode and !m_diskData) or - (m_mode=="FT8" and m_ihsym==m_earlyDecode2 and !m_diskData)) { - */ - bool bCallDecoder=false; if(m_ihsym==m_hsymStop) bCallDecoder=true; if(m_mode=="FT8" and !m_diskData) { @@ -2296,10 +2286,13 @@ void MainWindow::setup_status_bar (bool vhf) mode_label.setStyleSheet ("QLabel{background-color: #99ff33}"); } else if ("MSK144" == m_mode) { mode_label.setStyleSheet ("QLabel{background-color: #ff6666}"); + } else if ("FT4" == m_mode) { + mode_label.setStyleSheet ("QLabel{background-color: #ff0099}"); } else if ("FT8" == m_mode) { mode_label.setStyleSheet ("QLabel{background-color: #6699ff}"); } else if ("FreqCal" == m_mode) { - mode_label.setStyleSheet ("QLabel{background-color: #ff9933}"); } + mode_label.setStyleSheet ("QLabel{background-color: #ff9933}"); + } last_tx_label.setText (QString {}); if (m_mode.contains (QRegularExpression {R"(^(Echo|ISCAT))"})) { if (band_hopping_label.isVisible ()) statusBar ()->removeWidget (&band_hopping_label); @@ -3173,13 +3166,16 @@ void MainWindow::readFromStdout() //readFromStdout write_all("Rx",line_read.trimmed()); int ntime=6; if(m_TRperiod>=60) ntime=4; - if (m_config.insert_blank () && (line_read.left(ntime)!=m_tBlankLine) && - SpecOp::FOX != m_config.special_op_id()) { - QString band; - if((QDateTime::currentMSecsSinceEpoch() / 1000 - m_secBandChanged) > 4*int(m_TRperiod)/4) { - band = ' ' + m_config.bands ()->find (m_freqNominal); - } - ui->decodedTextBrowser->insertLineSpacer (band.rightJustified (40, '-')); + if (line_read.left(ntime) != m_tBlankLine) { + ui->decodedTextBrowser->new_period (); + if (m_config.insert_blank () + && SpecOp::FOX != m_config.special_op_id()) { + QString band; + if((QDateTime::currentMSecsSinceEpoch() / 1000 - m_secBandChanged) > 4*int(m_TRperiod)/4) { + band = ' ' + m_config.bands ()->find (m_freqNominal); + } + ui->decodedTextBrowser->insertLineSpacer (band.rightJustified (40, '-')); + } m_tBlankLine = line_read.left(ntime); } @@ -3498,11 +3494,6 @@ void MainWindow::decodeBusy(bool b) //decodeBusy() { if (!b) { m_optimizingProgress.reset (); - } else { - if (!m_decoderBusy) - { - ui->decodedTextBrowser->new_period (); - } } m_decoderBusy=b; ui->DecodeButton->setEnabled(!b); @@ -4444,6 +4435,7 @@ void MainWindow::doubleClickOnCall(Qt::KeyboardModifiers modifiers) if(m_mode=="ISCAT") { MessageBox::information_message (this, "Double-click not available for ISCAT mode"); + return; } if(m_decodedText2) { cursor=ui->decodedTextBrowser->textCursor(); @@ -5140,7 +5132,7 @@ void MainWindow::genStdMsgs(QString rpt, bool unconditional) } if(SpecOp::EU_VHF==m_config.special_op_id()) { QString a; - t="<" + t0.split(" ").at(0) + "> <" + t0.split(" ").at(1) + "> "; + t="<" + t0s.split(" ").at(0) + "> <" + t0s.split(" ").at(1) + "> "; a = a.asprintf("%4.4d ",ui->sbSerialNumber->value()); sent=rs + a + m_config.my_grid(); } @@ -5226,7 +5218,8 @@ void MainWindow::genStdMsgs(QString rpt, bool unconditional) case Configuration::type_2_msg_1_full: msgtype(t + my_grid, ui->tx1); if (!eme_short_codes) { - if((m_mode=="MSK144" || m_mode=="FT8") && SpecOp::NA_VHF == m_config.special_op_id()) { + if((m_mode=="MSK144" || m_mode=="FT8" || m_mode=="FT4") && + SpecOp::NA_VHF == m_config.special_op_id()) { msgtype(t + "R " + my_grid, ui->tx3); } else { msgtype(t + "R" + rpt, ui->tx3); @@ -5238,7 +5231,8 @@ void MainWindow::genStdMsgs(QString rpt, bool unconditional) break; case Configuration::type_2_msg_3_full: - if ((m_mode=="MSK144" || m_mode=="FT8") && SpecOp::NA_VHF == m_config.special_op_id()) { + if ((m_mode=="MSK144" || m_mode=="FT8" || m_mode=="FT4") && + SpecOp::NA_VHF == m_config.special_op_id()) { msgtype(t + "R " + my_grid, ui->tx3); msgtype(t + "RRR", ui->tx4); } else { @@ -5253,7 +5247,8 @@ void MainWindow::genStdMsgs(QString rpt, bool unconditional) case Configuration::type_2_msg_5_only: msgtype(t00 + my_grid, ui->tx1); if (!eme_short_codes) { - if ((m_mode=="MSK144" || m_mode=="FT8") && SpecOp::NA_VHF == m_config.special_op_id()) { + if ((m_mode=="MSK144" || m_mode=="FT8" || m_mode=="FT4") && + SpecOp::NA_VHF == m_config.special_op_id()) { msgtype(t + "R " + my_grid, ui->tx3); msgtype(t + "RRR", ui->tx4); } else { @@ -5467,7 +5462,8 @@ void MainWindow::msgtype(QString t, QLineEdit* tx) //msgtype() //### Check this stuff ### if(itype==7 and m_config.enable_VHF_features() and m_mode=="JT65") shortMsg=true; if(m_mode=="MSK144" and t.mid(0,1)=="<") text=false; - if((m_mode=="MSK144" or m_mode=="FT8") and SpecOp::NA_VHF==m_config.special_op_id()) { + if((m_mode=="MSK144" or m_mode=="FT8" or m_mode=="FT4") and + SpecOp::NA_VHF==m_config.special_op_id()) { int i0=t.trimmed().length()-7; if(t.mid(i0,3)==" R ") text=false; } @@ -5727,7 +5723,6 @@ void MainWindow::displayWidgets(qint64 n) if(i==12) ui->pbR2T->setVisible(b); if(i==13) ui->pbT2R->setVisible(b); if(i==14) ui->cbHoldTxFreq->setVisible(b); - if(i==14 and (!b)) ui->cbHoldTxFreq->setChecked(false); if(i==15) ui->sbSubmode->setVisible(b); if(i==16) ui->syncSpinBox->setVisible(b); if(i==17) ui->WSPR_controls_widget->setVisible(b); @@ -7702,11 +7697,14 @@ void MainWindow::p1ReadFromStdout() //p1readFromStdout rxLine += t1; } - if (m_config.insert_blank () && (rxLine.left(4)!=m_tBlankLine)) { - QString band; - Frequency f=1000000.0*rxFields.at(3).toDouble()+0.5; - band = ' ' + m_config.bands ()->find (f); - ui->decodedTextBrowser->appendText(band.rightJustified (71, '-')); + if (rxLine.left (4) != m_tBlankLine) { + ui->decodedTextBrowser->new_period (); + if (m_config.insert_blank ()) { + QString band; + Frequency f=1000000.0*rxFields.at(3).toDouble()+0.5; + band = ' ' + m_config.bands ()->find (f); + ui->decodedTextBrowser->appendText(band.rightJustified (71, '-')); + } m_tBlankLine = rxLine.left(4); } m_nWSPRdecodes += 1; diff --git a/widgets/plotter.cpp b/widgets/plotter.cpp index b4aecbde5..c5ade99a5 100644 --- a/widgets/plotter.cpp +++ b/widgets/plotter.cpp @@ -488,6 +488,9 @@ void CPlotter::DrawOverlay() //DrawOverlay() painter0.drawLine(x1,24,x1,30); } + int yh=5; + int yTxTop=12; + int yRxBottom=yTxTop + 2*yh + 4; if(m_mode=="JT9" or m_mode=="JT65" or m_mode=="JT9+JT65" or m_mode=="QRA64" or m_mode=="FT8" or m_mode=="FT4") { @@ -513,12 +516,14 @@ void CPlotter::DrawOverlay() //DrawOverlay() painter0.drawLine(x6,24,x6,30); } else { + // Draw the green "goal post" painter0.setPen(penGreen); x1=XfromFreq(m_rxFreq); x2=XfromFreq(m_rxFreq+bw); - painter0.drawLine(x1,24,x1,30); - painter0.drawLine(x1,28,x2,28); - painter0.drawLine(x2,24,x2,30); + painter0.drawLine(x1,yRxBottom-yh,x1,yRxBottom); + painter0.drawLine(x1,yRxBottom,x2,yRxBottom); + painter0.drawLine(x2,yRxBottom-yh,x2,yRxBottom); + } } @@ -538,9 +543,10 @@ void CPlotter::DrawOverlay() //DrawOverlay() x1=XfromFreq(m_txFreq-0.5*bw); x2=XfromFreq(m_txFreq+0.5*bw); } - painter0.drawLine(x1,17,x1,21); - painter0.drawLine(x1,17,x2,17); - painter0.drawLine(x2,17,x2,21); + // Draw the red "goal post" + painter0.drawLine(x1,yTxTop,x1,yTxTop+yh); + painter0.drawLine(x1,yTxTop,x2,yTxTop); + painter0.drawLine(x2,yTxTop,x2,yTxTop+yh); } if(m_mode=="JT9+JT65") { diff --git a/widgets/widegraph.ui b/widgets/widegraph.ui index d302fac6b..fce5f1072 100644 --- a/widgets/widegraph.ui +++ b/widgets/widegraph.ui @@ -157,6 +157,9 @@ Adjust... + + false + diff --git a/widgets/widgets.pri b/widgets/widgets.pri index 3c2cb2444..4ff058c66 100644 --- a/widgets/widgets.pri +++ b/widgets/widgets.pri @@ -9,8 +9,8 @@ SOURCES += \ widgets/colorhighlighting.cpp widgets/ExportCabrillo.cpp \ widgets/AbstractLogWindow.cpp \ widgets/FrequencyLineEdit.cpp widgets/FrequencyDeltaLineEdit.cpp \ - widgets/FoxLogWindow.cpp widgets/CabrilloLogWindow.cpp - + widgets/FoxLogWindow.cpp widgets/CabrilloLogWindow.cpp \ + widgets/HelpTextWindow.cpp HEADERS += \ widgets/mainwindow.h widgets/plotter.h \ widgets/about.h widgets/widegraph.h \ @@ -21,7 +21,7 @@ HEADERS += \ widgets/fastplot.h widgets/MessageBox.hpp widgets/colorhighlighting.h \ widgets/ExportCabrillo.h widgets/AbstractLogWindow.hpp \ widgets/FoxLogWindow.hpp widgets/CabrilloLogWindow.hpp \ - widgets/DateTimeEdit.hpp + widgets/DateTimeEdit.hpp widgets/HelpTextWindow.hpp FORMS += \ widgets/mainwindow.ui widgets/about.ui \