diff --git a/CMakeLists.txt b/CMakeLists.txt index 786864bf2..ab92873b3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -456,7 +456,6 @@ set (wsjt_FSRCS lib/ft8/ft8code.f90 lib/ft8/ft8_downsample.f90 lib/ft8/ft8sim.f90 - lib/ft8/ft8sim2.f90 lib/gen4.f90 lib/gen65.f90 lib/gen9.f90 @@ -497,7 +496,7 @@ set (wsjt_FSRCS lib/moondopjpl.f90 lib/morse.f90 lib/move.f90 - lib/msk144d2.f90 + lib/msk144d.f90 lib/msk40decodeframe.f90 lib/msk144decodeframe.f90 lib/msk144sd.f90 @@ -515,7 +514,6 @@ set (wsjt_FSRCS lib/ft8/osd174.f90 lib/wsprd/osdwspr.f90 lib/ft8/osd174_91.f90 - lib/77bit/parse77.f90 lib/pctile.f90 lib/peakdt9.f90 lib/peakup.f90 @@ -1250,17 +1248,14 @@ target_link_libraries (ft8code wsjt_fort wsjt_cxx) add_executable (ft8sim lib/ft8/ft8sim.f90 wsjtx.rc) target_link_libraries (ft8sim wsjt_fort wsjt_cxx) -add_executable (ft8sim2 lib/ft8/ft8sim2.f90 wsjtx.rc) -target_link_libraries (ft8sim2 wsjt_fort wsjt_cxx) - add_executable (msk144sd lib/msk144sd.f90 wsjtx.rc) target_link_libraries (msk144sd wsjt_fort wsjt_cxx) add_executable (msk144sim lib/msk144sim.f90 wsjtx.rc) target_link_libraries (msk144sim wsjt_fort wsjt_cxx) -add_executable (msk144d2 lib/msk144d2.f90 wsjtx.rc) -target_link_libraries (msk144d2 wsjt_fort wsjt_cxx) +add_executable (msk144d lib/msk144d.f90 wsjtx.rc) +target_link_libraries (msk144d wsjt_fort wsjt_cxx) endif(WSJT_BUILD_UTILS) # build the main application diff --git a/Configuration.cpp b/Configuration.cpp index d24c32f66..0b43de344 100644 --- a/Configuration.cpp +++ b/Configuration.cpp @@ -414,7 +414,6 @@ private: void delete_stations (); void insert_station (); - void chk77(); Q_SLOT void on_font_push_button_clicked (); Q_SLOT void on_decoded_text_font_push_button_clicked (); @@ -451,7 +450,6 @@ private: Q_SLOT void on_cbHound_clicked (bool); Q_SLOT void on_cbx2ToneSpacing_clicked(bool); Q_SLOT void on_cbx4ToneSpacing_clicked(bool); - Q_SLOT void on_rbNone_toggled(bool); Q_SLOT void on_rbFieldDay_toggled(); Q_SLOT void on_rbRTTYroundup_toggled(); Q_SLOT void on_FieldDay_Exchange_textChanged(); @@ -579,8 +577,6 @@ private: bool twoPass_; bool bFox_; bool bHound_; - bool bGenerate77_; - bool bDecode77_; bool bNoSpecial_; bool bFieldDay_; bool bRTTYroundup_; @@ -679,8 +675,6 @@ bool Configuration::single_decode () const {return m_->single_decode_;} bool Configuration::twoPass() const {return m_->twoPass_;} bool Configuration::bFox() const {return m_->bFox_;} bool Configuration::bHound() const {return m_->bHound_;} -bool Configuration::bGenerate77() const {return m_->bGenerate77_;} -bool Configuration::bDecode77() const {return m_->bDecode77_;} bool Configuration::bNoSpecial() const {return m_->bNoSpecial_;} bool Configuration::bFieldDay() const {return m_->bFieldDay_;} bool Configuration::bRTTYroundup() const {return m_->bRTTYroundup_;} @@ -835,7 +829,6 @@ void Configuration::setEU_VHF_Contest() { m_->bEU_VHF_Contest_ = true; m_->ui_->rbEU_VHF_Contest->setChecked(m_->bEU_VHF_Contest_); - m_->ui_->cbGenerate77->setChecked(true); m_->write_settings(); } @@ -925,7 +918,6 @@ Configuration::impl::impl (Configuration * self, QNetworkAccessManager * network , default_audio_output_device_selected_ {false} { ui_->setupUi (this); -// ui_->groupBox_6->setVisible(false); //### Temporary ??? ### { // Find a suitable data file location @@ -1208,8 +1200,6 @@ void Configuration::impl::initialize_models () ui_->cbTwoPass->setChecked(twoPass_); ui_->cbFox->setChecked(bFox_); ui_->cbHound->setChecked(bHound_); - ui_->cbGenerate77->setChecked(bGenerate77_); - ui_->cbDecode77->setChecked(bDecode77_); ui_->rbNone->setChecked(bNoSpecial_); ui_->rbFieldDay->setChecked(bFieldDay_); ui_->rbRTTYroundup->setChecked(bRTTYroundup_); @@ -1256,7 +1246,6 @@ void Configuration::impl::initialize_models () ui_->udpWindowRestore->setChecked(udpWindowRestore_); ui_->calibration_intercept_spin_box->setValue (calibration_.intercept); ui_->calibration_slope_ppm_spin_box->setValue (calibration_.slope_ppm); - chk77(); if (rig_params_.ptt_port.isEmpty ()) { @@ -1461,8 +1450,6 @@ void Configuration::impl::read_settings () twoPass_ = settings_->value("TwoPass",true).toBool (); bFox_ = settings_->value("Fox",false).toBool (); bHound_ = settings_->value("Hound",false).toBool (); - bGenerate77_ = settings_->value("Generate77",false).toBool (); - bDecode77_ = settings_->value("Decode77",false).toBool (); bNoSpecial_ = settings_->value("NoSpecial",false).toBool (); bFieldDay_ = settings_->value("FieldDay",false).toBool (); bRTTYroundup_ = settings_->value("RTTYroundup",false).toBool (); @@ -1573,8 +1560,6 @@ void Configuration::impl::write_settings () settings_->setValue ("TwoPass", twoPass_); settings_->setValue ("Fox", bFox_); settings_->setValue ("Hound", bHound_); - settings_->setValue ("Generate77", bGenerate77_); - settings_->setValue ("Decode77", bDecode77_); settings_->setValue ("NoSpecial", bNoSpecial_); settings_->setValue ("FieldDay", bFieldDay_); settings_->setValue ("RTTYroundup", bRTTYroundup_); @@ -1983,8 +1968,6 @@ void Configuration::impl::accept () bFox_ = ui_->cbFox->isChecked (); bHound_ = ui_->cbHound->isChecked (); if(bFox_ or bHound_) ui_->rbNone->setChecked(true); //### - bGenerate77_ = ui_->cbGenerate77->isChecked(); - bDecode77_ = ui_->cbDecode77->isChecked(); bNoSpecial_ = ui_->rbNone->isChecked (); bFieldDay_ = ui_->rbFieldDay->isChecked (); bRTTYroundup_ = ui_->rbRTTYroundup->isChecked (); @@ -2474,7 +2457,6 @@ void Configuration::impl::on_cbFox_clicked (bool checked) ui_->cbHound->setChecked (false); ui_->rbNone->setChecked(true); } - chk77(); } void Configuration::impl::on_cbHound_clicked (bool checked) @@ -2483,22 +2465,6 @@ void Configuration::impl::on_cbHound_clicked (bool checked) ui_->cbFox->setChecked (false); ui_->rbNone->setChecked(true); } - chk77(); -} - -void Configuration::impl::chk77() -{ - bool b77OK = !ui_->cbFox->isChecked() and !ui_->cbHound->isChecked(); - ui_->groupBox_9->setEnabled(b77OK); - if(!b77OK) { - ui_->cbGenerate77->setChecked(true); - ui_->cbDecode77->setChecked(true); - } -} - -void Configuration::impl::on_rbNone_toggled(bool b) -{ - if(!b) ui_->cbGenerate77->setChecked(true); } void Configuration::impl::on_rbFieldDay_toggled() diff --git a/Configuration.ui b/Configuration.ui index 38aedf125..7902529fc 100644 --- a/Configuration.ui +++ b/Configuration.ui @@ -2414,35 +2414,6 @@ Right click for insert and delete options. - - - - FT8 message types - - - - - - <html><head/><body><p>By default, early candidate releases of WSJT-X 2.0 generate 75-bit messages if the message content allows it.</p></body></html> - - - Always generate 77-bit messages - - - - - - - <html><head/><body><p>Check this box to ignore FT8 transmissions using the older 75-bit protocol.</p></body></html> - - - Decode only 77-bit messages - - - - - - @@ -2472,154 +2443,7 @@ Right click for insert and delete options. - - - - Miscellaneous - - - - - - Degrade S/N of .wav file: - - - sbDegrade - - - - - - - For offline sensitivity tests - - - dB - - - 1 - - - 1.000000000000000 - - - - - - - Receiver bandwidth: - - - sbBandwidth - - - - - - - For offline sensitivity tests - - - Hz - - - 6000 - - - 100 - - - 2500 - - - - - - - Tx delay: - - - sbTxDelay - - - - - - - Minimum delay between assertion of PTT and start of Tx audio. - - - s - - - 1 - - - 0.000000000000000 - - - 0.500000000000000 - - - 0.100000000000000 - - - - - - - - 0 - 50 - - - - Tone spacing - - - - - - <html><head/><body><p>Generate Tx audio with twice the normal tone spacing. Intended for special LF/MF transmitters that use a divide-by-2 before generating RF.</p></body></html> - - - x 2 - - - - - - - true - - - <html><head/><body><p>Generate Tx audio with four times the normal tone spacing. Intended for special LF/MF transmitters that use a divide-by-4 before generating RF.</p></body></html> - - - x 4 - - - - - - - - - - - - - Qt::Vertical - - - - 0 - 0 - - - - - + Special operating activity: Generation of FT8 and MSK144 messages @@ -2819,6 +2643,153 @@ Right click for insert and delete options. + + + + Miscellaneous + + + + + + Degrade S/N of .wav file: + + + sbDegrade + + + + + + + For offline sensitivity tests + + + dB + + + 1 + + + 1.000000000000000 + + + + + + + Receiver bandwidth: + + + sbBandwidth + + + + + + + For offline sensitivity tests + + + Hz + + + 6000 + + + 100 + + + 2500 + + + + + + + Tx delay: + + + sbTxDelay + + + + + + + Minimum delay between assertion of PTT and start of Tx audio. + + + s + + + 1 + + + 0.000000000000000 + + + 0.500000000000000 + + + 0.100000000000000 + + + + + + + + 0 + 50 + + + + Tone spacing + + + + + + <html><head/><body><p>Generate Tx audio with twice the normal tone spacing. Intended for special LF/MF transmitters that use a divide-by-2 before generating RF.</p></body></html> + + + x 2 + + + + + + + true + + + <html><head/><body><p>Generate Tx audio with four times the normal tone spacing. Intended for special LF/MF transmitters that use a divide-by-4 before generating RF.</p></body></html> + + + x 4 + + + + + + + + + + + + + Qt::Vertical + + + + 0 + 0 + + + + @@ -2947,8 +2918,6 @@ Right click for insert and delete options. cbx4ToneSpacing cbFox cbHound - cbGenerate77 - cbDecode77 rbNone rbNA_VHF_Contest rbEU_VHF_Contest @@ -3025,12 +2994,12 @@ Right click for insert and delete options. - - - + + + diff --git a/lib/ft8/ft8_testmsg.f90 b/lib/ft8/ft8_testmsg.f90 index aac3ad93c..2a1bf8f9e 100644 --- a/lib/ft8/ft8_testmsg.f90 +++ b/lib/ft8/ft8_testmsg.f90 @@ -1,145 +1,51 @@ - parameter (MAXTEST=75,NTEST=68) - character*40 testmsg(MAXTEST) - character*40 testmsgchk(MAXTEST) - ! Test msgs should include the extremes for the different types - ! See pfx.f90 - ! Type 1 P & A - ! Type 1 1A & E5 - data testmsg(1:NTEST)/ & - "CQ WB9XYZ EN34", & - "CQ DX WB9XYZ EN34", & - "QRZ WB9XYZ EN34", & - "KA1ABC WB9XYZ EN34", & - "KA1ABC WB9XYZ RO", & - "KA1ABC WB9XYZ -21", & - "KA1ABC WB9XYZ R-19", & - "KA1ABC WB9XYZ RRR", & - "KA1ABC WB9XYZ 73", & - "KA1ABC WB9XYZ", & - "CQ 000 WB9XYZ EN34", & - "CQ 999 WB9XYZ EN34", & - "CQ EU WB9XYZ EN34", & - "CQ WY WB9XYZ EN34", & - "1A/KA1ABC WB9XYZ", & - "E5/KA1ABC WB9XYZ", & - "KA1ABC 1A/WB9XYZ", & - "KA1ABC E5/WB9XYZ", & - "KA1ABC/P WB9XYZ", & - "KA1ABC/A WB9XYZ", & - "KA1ABC WB9XYZ/P", & - "KA1ABC WB9XYZ/A", & - "CQ KA1ABC/P", & - "CQ WB9XYZ/A", & - "QRZ KA1ABC/P", & - "QRZ WB9XYZ/A", & - "DE KA1ABC/P", & - "DE WB9XYZ/A", & - "CQ 1A/KA1ABC", & - "CQ E5/KA1ABC", & - "DE 1A/KA1ABC", & - "DE E5/KA1ABC", & - "QRZ 1A/KA1ABC", & - "QRZ E5/KA1ABC", & - "CQ WB9XYZ/1A", & - "CQ WB9XYZ/E5", & - "QRZ WB9XYZ/1A", & - "QRZ WB9XYZ/E5", & - "DE WB9XYZ/1A", & - "DE WB9XYZ/E5", & - "CQ A000/KA1ABC FM07", & - "CQ ZZZZ/KA1ABC FM07", & - "QRZ W4/KA1ABC FM07", & - "DE W4/KA1ABC FM07", & - "CQ W4/KA1ABC -22", & - "DE W4/KA1ABC -22", & - "QRZ W4/KA1ABC -22", & - "CQ W4/KA1ABC R-22", & - "DE W4/KA1ABC R-22", & - "QRZ W4/KA1ABC R-22", & - "DE W4/KA1ABC 73", & - "CQ KA1ABC FM07", & - "QRZ KA1ABC FM07", & - "DE KA1ABC/VE6 FM07", & - "CQ KA1ABC/VE6 -22", & - "DE KA1ABC/VE6 -22", & - "QRZ KA1ABC/VE6 -22", & - "CQ KA1ABC/VE6 R-22", & - "DE KA1ABC/VE6 R-22", & - "QRZ KA1ABC/VE6 R-22", & - "DE KA1ABC 73", & - "HELLO WORLD", & - "ZL4/KA1ABC 73", & - "KA1ABC XL/WB9XYZ", & - "KA1ABC WB9XYZ/W4", & - "DE KA1ABC/QRP 2W", & - "KA1ABC/1 WB9XYZ/1", & - "123456789ABCDEFGH"/ - data testmsgchk(1:NTEST)/ & - "CQ WB9XYZ EN34", & - "CQ DX WB9XYZ EN34", & - "QRZ WB9XYZ EN34", & - "KA1ABC WB9XYZ EN34", & - "KA1ABC WB9XYZ RO", & - "KA1ABC WB9XYZ -21", & - "KA1ABC WB9XYZ R-19", & - "KA1ABC WB9XYZ RRR", & - "KA1ABC WB9XYZ 73", & - "KA1ABC WB9XYZ", & - "CQ 000 WB9XYZ EN34", & - "CQ 999 WB9XYZ EN34", & - "CQ EU WB9XYZ EN34", & - "CQ WY WB9XYZ EN34", & - "1A/KA1ABC WB9XYZ", & - "E5/KA1ABC WB9XYZ", & - "KA1ABC 1A/WB9XYZ", & - "KA1ABC E5/WB9XYZ", & - "KA1ABC/P WB9XYZ", & - "KA1ABC/A WB9XYZ", & - "KA1ABC WB9XYZ/P", & - "KA1ABC WB9XYZ/A", & - "CQ KA1ABC/P", & - "CQ WB9XYZ/A", & - "QRZ KA1ABC/P", & - "QRZ WB9XYZ/A", & - "DE KA1ABC/P", & - "DE WB9XYZ/A", & - "CQ 1A/KA1ABC", & - "CQ E5/KA1ABC", & - "DE 1A/KA1ABC", & - "DE E5/KA1ABC", & - "QRZ 1A/KA1ABC", & - "QRZ E5/KA1ABC", & - "CQ WB9XYZ/1A", & - "CQ WB9XYZ/E5", & - "QRZ WB9XYZ/1A", & - "QRZ WB9XYZ/E5", & - "DE WB9XYZ/1A", & - "DE WB9XYZ/E5", & - "CQ A000/KA1ABC FM07", & - "CQ ZZZZ/KA1ABC FM07", & - "QRZ W4/KA1ABC FM07", & - "DE W4/KA1ABC FM07", & - "CQ W4/KA1ABC -22", & - "DE W4/KA1ABC -22", & - "QRZ W4/KA1ABC -22", & - "CQ W4/KA1ABC R-22", & - "DE W4/KA1ABC R-22", & - "QRZ W4/KA1ABC R-22", & - "DE W4/KA1ABC 73", & - "CQ KA1ABC FM07", & - "QRZ KA1ABC FM07", & - "DE KA1ABC/VE6 FM07", & - "CQ KA1ABC/VE6 -22", & - "DE KA1ABC/VE6 -22", & - "QRZ KA1ABC/VE6 -22", & - "CQ KA1ABC/VE6 R-22", & - "DE KA1ABC/VE6 R-22", & - "QRZ KA1ABC/VE6 R-22", & - "DE KA1ABC 73", & - "HELLO WORLD", & - "ZL4/KA1ABC 73", & - "KA1ABC XL/WB9", & - "KA1ABC WB9XYZ", & - "DE KA1ABC/QRP", & - "KA1ABC/1 WB9X", & - "123456789ABCD"/ + parameter (MAXTEST=75,NTEST=48) + character*37 testmsg(MAXTEST) + data testmsg(1:NTEST)/ & + "CQ K1ABC FN42", & + "K1ABC W9XYZ EN37", & + "W9XYZ K1ABC -11", & + "K1ABC W9XYZ R-09", & + "W9XYZ K1ABC RRR", & + "K1ABC W9XYZ 73", & + "K1ABC W9XYZ RR73", & + "CQ KH1/KH7Z", & + "K1ABC RR73; W9XYZ -08", & + "CQ FD K1ABC FN42", & + "K1ABC W9XYZ 6A WI", & + "W9XYZ K1ABC R 2B EMA", & + "CQ TEST K1ABC/R FN42", & + "K1ABC/R W9XYZ EN37", & + "W9XYZ K1ABC/R R FN42", & + "K1ABC/R W9XYZ RR73", & + "CQ TEST K1ABC FN42", & + "K1ABC W9XYZ 579 WI", & + "W9XYZ K1ABC R 589 MA", & + "K1ABC KA0DEF 559 MO", & + "TU; KA0DEF K1ABC R 569 MA", & + "KA1ABC G3AAA 529 0013", & + "TU; G3AAA K1ABC R 559 MA", & + "CQ G4ABC/P IO91", & + "G4ABC/P PA9XYZ JO22", & + "PA9XYZ 590003 IO91NP", & + "G4ABC/P R 570007 JO22DB", & + "PA9XYZ G4ABC/P RR73", & + "CQ PJ4/K1ABC", & + "PJ4/K1ABC ", & + "W9XYZ -11", & + " W9XYZ R-09", & + " PJ4/K1ABC RRR", & + "PJ4/K1ABC 73", & + "CQ W9XYZ EN37", & + " YW18FIFA", & + " W9XYZ -11", & + "W9XYZ R-09", & + "YW18FIFA RRR", & + " YW18FIFA 73", & + "TNX BOB 73 GL", & + "CQ YW18FIFA", & + " KA1ABC", & + "KA1ABC -11", & + " KA1ABC R-17", & + " YW18FIFA RR73", & + " KA1ABC 73", & + "123456789ABCDEF012"/ diff --git a/lib/ft8/ft8code.f90 b/lib/ft8/ft8code.f90 index 3a1057238..2aed02bf2 100644 --- a/lib/ft8/ft8code.f90 +++ b/lib/ft8/ft8code.f90 @@ -1,31 +1,28 @@ program ft8code -! Provides examples of message packing, LDPC(144,87) encoding, bit and +! Provides examples of message packing, LDPC(174,91) encoding, bit and ! symbol ordering, and other details of the FT8 protocol. - use packjt - use crc + use packjt77 include 'ft8_params.f90' !Set various constants include 'ft8_testmsg.f90' parameter (NWAVE=NN*NSPS) - - character*40 msg,msgchk - character*37 msg37 - character*6 c1,c2 + + character*77 c77 + character*37 msg,msgsent character*9 comment - character*22 msgsent,message - character bad*1,msgtype*10 - character*87 cbits + character bad*1,msgtype*16 + character*91 cbits integer itone(NN) - integer dgen(12) - integer*1 msgbits(KK),decoded(KK),decoded0(KK) + integer*1 msgbits(77) + logical unpk77_success ! Get command-line argument(s) nargs=iargc() if(nargs.ne.1 .and. nargs.ne.3) then print* print*,'Program ft8code: Provides examples of message packing, ', & - 'LDPC(174,87) encoding,' + 'LDPC(174,91) encoding,' print*,'bit and symbol ordering, and other details of the FT8 protocol.' print* print*,'Usage: ft8code [-c grid] "message" # Results for specified message' @@ -35,89 +32,55 @@ program ft8code call getarg(1,msg) !Message to be transmitted if(len(trim(msg)).eq.2 .and. msg(1:2).eq.'-t') then - testmsg(NTEST+1)='KA1ABC RR73; WB9XYZ -11' - nmsg=NTEST+1 + nmsg=NTEST else - msgchk=msg - call fmtmsg(msgchk,iz) !To upper case; collapse multiple blanks + call fmtmsg(msg,iz) !To upper case; collapse multiple blanks nmsg=1 endif write(*,1010) -1010 format(" Message Decoded Err? Type"/76("-")) +1010 format(4x,'Message',31x,'Decoded',29x,'Err i3.n3'/100('-')) do imsg=1,nmsg if(nmsg.gt.1) msg=testmsg(imsg) - call fmtmsg(msg,iz) !To upper case, collapse multiple blanks - msgchk=msg ! Generate msgsent, msgbits, and itone - if(index(msg,';').le.0) then - call packmsg(msg(1:22),dgen,itype) - msgtype="" - if(itype.eq.1) msgtype="Std Msg" - if(itype.eq.2) msgtype="Type 1 pfx" - if(itype.eq.3) msgtype="Type 1 sfx" - if(itype.eq.4) msgtype="Type 2 pfx" - if(itype.eq.5) msgtype="Type 2 sfx" - if(itype.eq.6) msgtype="Free text" - i3bit=0 - call genft8(msg(1:22),i3bit,msgsent,msgbits,itone) + i3=-1 + n3=-1 + call genft8_174_91(msg,i3,n3,msgsent,msgbits,itone) + msgtype="" + if(i3.eq.0) then + if(n3.eq.0) msgtype="Free text" + if(n3.eq.1) msgtype="DXpedition mode" + if(n3.eq.2) msgtype="EU VHF Contest" + if(n3.eq.3) msgtype="ARRL Field Day" + if(n3.eq.4) msgtype="ARRL Field Day" + if(n3.eq.5) msgtype="Telemetry" + if(n3.ge.6) msgtype="Undefined type" + endif + if(i3.eq.1) msgtype="Standard msg" + if(i3.eq.2) msgtype="EU VHF Contest" + if(i3.eq.3) msgtype="ARRL RTTY Roundup" + if(i3.eq.4) msgtype="Nonstandard calls" + if(i3.ge.5) msgtype="Undefined msg type" + if(i3.ge.1) n3=-1 + bad=" " + comment=' ' + if(msg.ne.msgsent) bad="*" + if(n3.ge.0) then + write(*,1020) imsg,msg,msgsent,bad,i3,n3,msgtype,comment +1020 format(i2,'.',1x,a37,1x,a37,1x,a1,2x,i1,'.',i1,1x,a16,1x,a9) else - call foxgen_wrap(msg,msgbits,itone) - i3bit=1 + write(*,1022) imsg,msg,msgsent,bad,i3,msgtype,comment +1022 format(i2,'.',1x,a37,1x,a37,1x,a1,2x,i1,'.',1x,1x,a16,1x,a9) endif - decoded=msgbits - i3bit=4*decoded(73) + 2*decoded(74) + decoded(75) - iFreeText=decoded(57) - decoded0=decoded - if(i3bit.eq.1) decoded(57:)=0 - call extractmessage174(decoded,message,ncrcflag) - decoded=decoded0 - - if(i3bit.eq.0) then - bad=" " - comment=' ' - if(itype.ne.6 .and. message.ne.msgchk) bad="*" - if(itype.eq.6 .and. message(1:13).ne.msgchk(1:13)) bad="*" - if(itype.eq.6 .and. len(trim(msgchk)).gt.13) comment='truncated' - write(*,1020) imsg,msgchk,message,bad,i3bit,itype,msgtype,comment -1020 format(i2,'.',1x,a22,1x,a22,1x,a1,2i2,1x,a10,1x,a9) - else - write(cbits,1001) decoded -1001 format(87i1) - read(cbits,1002) nrpt -1002 format(66x,b6) - irpt=nrpt-30 - i1=index(message,' ') - i2=index(message(i1+1:),' ') + i1 - c1=message(1:i1)//' ' - c2=message(i1+1:i2)//' ' - msg37=c1//' RR73; '//c2//' <...> ' - write(msg37(35:37),1003) irpt -1003 format(i3.2) - if(msg37(35:35).ne.'-') msg37(35:35)='+' - iz=len(trim(msg37)) - do iter=1,10 !Collapse multiple blanks into one - ib2=index(msg37(1:iz),' ') - if(ib2.lt.1) exit - msg37=msg37(1:ib2)//msg37(ib2+2:) - iz=iz-1 - enddo - - write(*,1021) imsg,msgchk,msg37 -1021 format(i2,'.',1x,a40,1x,a37) - endif - enddo if(nmsg.eq.1) then - write(*,1030) msgbits(1:56) -1030 format(/'Call1: ',28i1,' Call2: ',28i1) - write(*,1032) msgbits(57:72),msgbits(73:75),msgbits(76:87) -1032 format('Grid: ',16i1,' 3Bit: ',3i1,' CRC12: ',12i1) + write(*,1030) msgbits +1030 format(/'Message bits: ',/77i1) write(*,1034) itone -1034 format(/'Channel symbols:'/79i1) +1034 format(/'Channel symbols (tones):'/79i1) endif 999 end program ft8code diff --git a/lib/ft8/ft8sim.f90 b/lib/ft8/ft8sim.f90 index f753128dc..84884c5e2 100644 --- a/lib/ft8/ft8sim.f90 +++ b/lib/ft8/ft8sim.f90 @@ -1,14 +1,16 @@ program ft8sim -! Generate simulated data for a 15-second HF/6m mode using 8-FSK. +! Generate simulated "type 2" ft8 files ! Output is saved to a *.wav file. use wavhdr + use packjt77 include 'ft8_params.f90' !Set various constants parameter (NWAVE=NN*NSPS) type(hdr) h !Header for .wav file character arg*12,fname*17 - character msg*37,msgsent*37,msg0*37 + character msg37*37,msgsent37*37,msg40*40 + character c77*77 complex c0(0:NMAX-1) complex c(0:NMAX-1) real wave(NMAX) @@ -19,14 +21,13 @@ program ft8sim ! Get command-line argument(s) nargs=iargc() if(nargs.ne.8) then - print*,'Usage: ft8sim "message" nsig|f0 DT fdop del width nfiles snr' - print*,'Examples: ft8sim "K1ABC W9XYZ EN37" 1500.0 0.0 0.1 1.0 0 10 -18' - print*,' ft8sim "K1ABC W9XYZ EN37" 10 0.0 0.1 1.0 25 10 -18' - print*,' ft8sim "K1ABC W9XYZ EN37" 25 0.0 0.1 1.0 25 10 -18' + print*,'Usage: ft8sim "message" f0 DT fdop del width nfiles snr' + print*,'Examples: ft8sim "K1ABC W9XYZ EN37" 1500.0 0.0 0.1 1.0 0 10 -18' + print*,' ft8sim "WA9XYZ/R KA1ABC/R FN42" 1500.0 0.0 0.1 1.0 0 10 -18' print*,' ft8sim "K1ABC RR73; W9XYZ -11" 300 0 0 0 25 1 -10' go to 999 endif - call getarg(1,msg) !Message to be transmitted + call getarg(1,msg37) !Message to be transmitted call getarg(2,arg) read(arg,*) f0 !Frequency (only used for single-signal) call getarg(3,arg) @@ -61,84 +62,56 @@ program ft8sim if(snrdb.gt.90.0) sig=1.0 txt=NN*NSPS/12000.0 -! Source-encode, then get itone() - if(index(msg,';').le.0) then - i3bit=0 - call genft8(msg,i3bit,0,1,msgsent,msgbits,itone) - write(*,1000) f0,xdt,txt,snrdb,bw,msgsent -1000 format('f0:',f9.3,' DT:',f6.2,' TxT:',f6.1,' SNR:',f6.1, & - ' BW:',f4.1,2x,a22) - else - call foxgen_wrap(msg,msgbits,itone) - write(*,1001) f0,xdt,txt,snrdb,bw,msg -1001 format('f0:',f9.3,' DT:',f6.2,' TxT:',f6.1,' SNR:',f6.1, & - ' BW:',f4.1,2x,a37) - endif + ! Source-encode, then get itone() + i3=-1 + n3=-1 + call pack77(msg37,i3,n3,c77) + call genft8_174_91(msg37,i3,n3,msgsent37,msgbits,itone) - write(*,1030) msgbits(1:56) -1030 format(/'Call1: ',28i1,' Call2: ',28i1) - write(*,1032) msgbits(57:72),msgbits(73:75) -1032 format('Grid: ',16i1,' 3Bit: ',3i1) - write(*,1034) itone -1034 format(/'Channel symbols:'/79i1/) + write(*,*) + write(*,'(a23,a37,3x,a7,i1,a1,i1)') 'New Style FT8 Message: ',msgsent37,'i3.n3: ',i3,'.',n3 + write(*,1000) f0,xdt,txt,snrdb,bw +1000 format('f0:',f9.3,' DT:',f6.2,' TxT:',f6.1,' SNR:',f6.1, & + ' BW:',f4.1) + write(*,*) + if(i3.eq.1) then + write(*,*) ' mycall hiscall hisgrid' + write(*,'(28i1,1x,i1,1x,28i1,1x,i1,1x,i1,1x,15i1,1x,3i1)') msgbits(1:77) + else + write(*,'(a14)') 'Message bits: ' + write(*,'(77i1)') msgbits + endif + write(*,*) + write(*,'(a17)') 'Channel symbols: ' + write(*,'(79i1)') itone + write(*,*) call sgran() msg0=msg do ifile=1,nfiles - c=0. - do isig=1,nsig - c0=0. - if(nsig.eq.2) then - if(index(msg,'R-').gt.0) f0=500 - i1=index(msg,' ') - msg(i1+4:i1+4)=char(ichar('A')+isig-1) - if(isig.eq.2) then - f0=f0+100 - endif - call genft8(msg,i3bit,msgsent,msgbits,itone) - endif - if(nsig.eq.25) then - f0=(isig+2)*100.0 - else if(nsig.eq.50) then - msg=msg0 - f0=1000.0 + (isig-1)*60.0 - i1=index(msg,' ') - i2=index(msg(i1+1:),' ') + i1 - msg(i1+2:i1+2)=char(ichar('0')+mod(isig-1,10)) - msg(i1+3:i1+3)=char(ichar('A')+mod(isig-1,26)) - msg(i1+4:i1+4)=char(ichar('A')+mod(isig-1,26)) - msg(i1+5:i1+5)=char(ichar('A')+mod(isig-1,26)) - write(msg(i2+3:i2+4),'(i2.2)') isig-1 - if(ifile.ge.2 .and. isig.eq.ifile-1) then - write(msg(i2+1:i2+4),1002) -isig -1002 format('R',i3.2) - f0=600.0 + mod(isig-1,5)*60.0 - endif - call genft8(msg,i3bit,msgsent,msgbits,itone) - endif -! k=nint((xdt+0.5+0.01*gran())/dt) - k=nint((xdt+0.5)/dt) - ia=k - phi=0.0 - do j=1,NN !Generate complex waveform - dphi=twopi*(f0*dt+itone(j)/real(NSPS)) - do i=1,NSPS - if(k.ge.0 .and. k.lt.NMAX) c0(k)=cmplx(cos(phi),sin(phi)) - k=k+1 - phi=mod(phi+dphi,twopi) - enddo + k=nint((xdt+0.5)/dt) + ia=k + phi=0.0 + c0=0.0 + do j=1,NN !Generate complex waveform + dphi=twopi*(f0*dt+itone(j)/real(NSPS)) + do i=1,NSPS + if(k.ge.0 .and. k.lt.NMAX) c0(k)=cmplx(cos(phi),sin(phi)) + k=k+1 + phi=mod(phi+dphi,twopi) enddo - if(fspread.ne.0.0 .or. delay.ne.0.0) call watterson(c0,NMAX,fs,delay,fspread) - c=c+sig*c0 enddo + if(fspread.ne.0.0 .or. delay.ne.0.0) call watterson(c0,NMAX,fs,delay,fspread) + c=sig*c0 + ib=k wave=real(c) peak=maxval(abs(wave(ia:ib))) rms=sqrt(dot_product(wave(ia:ib),wave(ia:ib))/NWAVE) nslots=1 if(width.gt.0.0) call filt8(f0,nslots,width,wave) - + if(snrdb.lt.90) then do i=1,NMAX !Add gaussian noise at specified SNR xnoise=gran() @@ -159,8 +132,5 @@ program ft8sim close(10) write(*,1110) ifile,xdt,f0,snrdb,fname 1110 format(i4,f7.2,f8.2,f7.1,2x,a17) - enddo - + enddo 999 end program ft8sim - - diff --git a/lib/msk144_testmsg.f90 b/lib/msk144_testmsg.f90 new file mode 100644 index 000000000..e1cff1314 --- /dev/null +++ b/lib/msk144_testmsg.f90 @@ -0,0 +1,47 @@ + parameter (MAXTEST=75,NTEST=43) + character*37 testmsg(MAXTEST) + data testmsg(1:NTEST)/ & + "CQ K1ABC FN42", & + "K1ABC W9XYZ EN37", & + "W9XYZ K1ABC -11", & + "K1ABC W9XYZ R-09", & + "W9XYZ K1ABC RRR", & + "K1ABC W9XYZ 73", & + "K1ABC W9XYZ RR73", & + "CQ KH1/KH7Z", & + "CQ TEST K1ABC/R FN42", & + "K1ABC/R W9XYZ EN37", & + "W9XYZ K1ABC/R R FN42", & + "K1ABC/R W9XYZ RR73", & + "CQ TEST K1ABC FN42", & + "K1ABC/R W9XYZ/R R FN42", & + "CQ G4ABC/P IO91", & + "G4ABC/P PA9XYZ JO22", & + "PA9XYZ 590003 IO91NP", & + "G4ABC/P R 570007 JO22DB", & + "PA9XYZ G4ABC/P RR73", & + "CQ PJ4/K1ABC", & + "PJ4/K1ABC ", & + "W9XYZ -11", & + " W9XYZ R-09", & + " PJ4/K1ABC RRR", & + "PJ4/K1ABC 73", & + "CQ W9XYZ EN37", & + " YW18FIFA", & + " W9XYZ -11", & + "W9XYZ R-09", & + "YW18FIFA RRR", & + " YW18FIFA 73", & + "TNX BOB 73 GL", & + "CQ YW18FIFA", & + " KA1ABC", & + "KA1ABC -11", & + " KA1ABC R-17", & + " YW18FIFA RR73", & + " KA1ABC 73", & + "123456789ABCDEF012", & + " -03", & + " R+03", & + " RRR", & + " 73"/ + diff --git a/lib/msk144code.f90 b/lib/msk144code.f90 index d92fee082..6c8963d01 100644 --- a/lib/msk144code.f90 +++ b/lib/msk144code.f90 @@ -3,11 +3,11 @@ program msk144code ! Provides examples of message packing, bit and symbol ordering, ! LDPC encoding, and other necessary details of the MSK144 protocol. - use packjt - character msg*37,msgsent*37,decoded,bad*1,msgtype*13 + use packjt77 + character*77 c77 + character msg*37,msgsent*37,decoded,bad*1,msgtype*16 integer*4 i4tone(144) - logical*1 bcontest - include 'testmsg.f90' + include 'msk144_testmsg.f90' nargs=iargc() if(nargs.ne.1) then @@ -24,44 +24,57 @@ program msk144code call getarg(1,msg) nmsg=1 if(msg(1:2).eq."-t") then - testmsg(NTEST+1)=" -03" - testmsg(NTEST+2)=" R+03" - testmsg(NTEST+3)=" RRR" - testmsg(NTEST+4)=" 73" - testmsg(NTEST+5)="KA1ABC WB9XYZ R EN37" - nmsg=NTEST+5 + nmsg=NTEST endif write(*,1010) -1010 format(" Message Decoded Err? Type"/ & - 74("-")) +1010 format(4x,"Message",31x,"Decoded",29x,"Err i3.n3"/100("-")) + do imsg=1,nmsg if(nmsg.gt.1) msg=testmsg(imsg) call fmtmsg(msg,iz) !To upper case, collapse multiple blanks - i1=len(trim(msg))-5 - bcontest=.false. - if(msg(i1:i1+1).eq.'R ') bcontest=.true. - ichk=0 - call genmsk_128_90(msg,ichk,bcontest,msgsent,i4tone,itype) - + call genmsk_128_90(msg,ichk,msgsent,i4tone,itype) + i3=-1 + n3=-1 + call pack77(msg,i3,n3,c77) msgtype="" - if(itype.eq.1) msgtype="Std Msg" - if(itype.eq.2) msgtype="Type 1 prefix" - if(itype.eq.3) msgtype="Type 1 suffix" - if(itype.eq.4) msgtype="Type 2 prefix" - if(itype.eq.5) msgtype="Type 2 suffix" - if(itype.eq.6) msgtype="Free text" - if(itype.eq.7) msgtype="Hashed calls" - + if(i3.eq.0) then + if(n3.eq.0) msgtype="Free text" + if(n3.eq.1) msgtype="DXpedition mode" + if(n3.eq.2) msgtype="EU VHF Contest" + if(n3.eq.3) msgtype="ARRL Field Day" + if(n3.eq.4) msgtype="ARRL Field Day" + if(n3.eq.5) msgtype="Telemetry" + if(n3.ge.6) msgtype="Undefined type" + endif + if(i3.eq.1) msgtype="Standard msg" + if(i3.eq.2) msgtype="EU VHF Contest" + if(i3.eq.3) msgtype="ARRL RTTY Roundup" + if(i3.eq.4) msgtype="Nonstandard calls" + if(i3.ge.5) msgtype="Undefined msg type" + if(i3.ge.1) n3=-1 + if(i4tone(41).lt.0) then + msgtype="Sh msg" + i3=-1 + endif bad=" " - if(msgsent.ne.msg) bad="*" - write(*,1020) imsg,msg,msgsent,bad,itype,msgtype -1020 format(i2,'.',2x,a37,2x,a37,3x,a1,i3,": ",a13) + if(msg.ne.msgsent) bad="*" + if(i3.eq.0.and.n3.ge.0) then + write(*,1020) imsg,msg,msgsent,bad,i3,n3,msgtype +1020 format(i2,'.',1x,a37,1x,a37,1x,a1,2x,i1,'.',i1,1x,a16) + elseif(i3.ge.1) then + write(*,1022) imsg,msg,msgsent,bad,i3,msgtype +1022 format(i2,'.',1x,a37,1x,a37,1x,a1,2x,i1,'.',1x,1x,a16) + elseif(i3.lt.0) then + write(*,1024) imsg,msg,msgsent,bad,msgtype +1024 format(i2,'.',1x,a37,1x,a37,1x,a1,6x,a16) + endif + enddo if(nmsg.eq.1) then n=144 - if(msg(1:1).eq."<") n=40 + if(i4tone(41).lt.0) n=40 write(*,1030) i4tone(1:n) 1030 format(/'Channel symbols'/(72i1)) endif diff --git a/lib/msk144d2.f90 b/lib/msk144d.f90 similarity index 96% rename from lib/msk144d2.f90 rename to lib/msk144d.f90 index 47eb43b68..60c8b0c1d 100644 --- a/lib/msk144d2.f90 +++ b/lib/msk144d.f90 @@ -1,4 +1,4 @@ -program msk144d2 +program msk144d ! Test the msk144 decoder for WSJT-X @@ -17,7 +17,6 @@ program msk144d2 logical :: display_help=.false. logical*1 bShMsgs - logical*1 bcontest logical*1 btrain logical*1 bswl @@ -47,7 +46,6 @@ program msk144d2 mygrid='EN50WC' hiscall='' bShMsgs=.false. - bcontest=.false. btrain=.false. bswl=.false. datadir='.' @@ -116,7 +114,7 @@ program msk144d2 tt=sum(float(abs(id2(i:i+7*512-1)))) if( tt .ne. 0.0 ) then call mskrtd(ichunk,nutc,tsec,ntol,nrxfreq,ndepth,mycall,mygrid,hiscall,bShMsgs, & - bcontest,btrain,pcoeffs,bswl,datadir,line) + btrain,pcoeffs,bswl,datadir,line) if( index(line,"&") .ne. 0 .or. & index(line,"^") .ne. 0 .or. & index(line,"!") .ne. 0 .or. & @@ -135,4 +133,4 @@ program msk144d2 print*,infile 999 continue -end program msk144d2 +end program msk144d diff --git a/lib/msk144signalquality.f90 b/lib/msk144signalquality.f90 index 417328a35..3caaa349f 100644 --- a/lib/msk144signalquality.f90 +++ b/lib/msk144signalquality.f90 @@ -22,7 +22,6 @@ subroutine msk144signalquality(cframe,snr,freq,t0,softbits,msg,dxcall, & integer msgbits(144) integer values(8) - logical*1 bcontest logical*1 btrain logical*1 first logical*1 currently_training @@ -91,7 +90,6 @@ subroutine msk144signalquality(cframe,snr,freq,t0,softbits,msg,dxcall, & ! generate tones from decoded message ichk=0 - bcontest=.false. call genmsk_128_90(msg,ichk,msgsent,i4tone,itype) ! reconstruct message bits from tones diff --git a/lib/msk144sim.f90 b/lib/msk144sim.f90 index fe2959cea..75c6a1e64 100644 --- a/lib/msk144sim.f90 +++ b/lib/msk144sim.f90 @@ -41,8 +41,12 @@ program msk144sim write(*,*) 'Requested message: ',msg write(*,*) 'Message sent : ',msgsent write(*,*) 'Tones: ' - write(*,'(1x,72i1)') itone(1:72) - write(*,'(1x,72i1)') itone(73:144) + if(itone(41).ge.0) then + write(*,'(1x,72i1)') itone(1:72) + write(*,'(1x,72i1)') itone(73:144) + else + write(*,'(1x,40i1)') itone(1:40) + endif twopi=8.d0*atan(1.d0) nsym=144 diff --git a/lib/mskrtd.f90 b/lib/mskrtd.f90 index 025cfda21..622c05f38 100644 --- a/lib/mskrtd.f90 +++ b/lib/mskrtd.f90 @@ -123,9 +123,11 @@ subroutine mskrtd(id2,nutc0,tsec,ntol,nrxfreq,ndepth,mycall,mygrid,hiscall, & np=8*NSPM call msk144spd(cdat,np,ntol,ndecodesuccess,msgreceived,fc,fest,tdec,navg,ct, & softbits) + bshdecode=.false. if(ndecodesuccess.eq.0 .and. (bshmsg.or.bswl)) then call msk40spd(cdat,np,ntol,mycall,hiscall,bswl,nhasharray, & ndecodesuccess,msgreceived,fc,fest,tdec,navg) + if(ndecodesuccess .ge.1) bshdecode=.true. endif if( ndecodesuccess .ge. 1 ) then tdec=tsec+tdec @@ -187,14 +189,6 @@ subroutine mskrtd(id2,nutc0,tsec,ntol,nrxfreq,ndepth,mycall,mygrid,hiscall, & endif nsnr=nint(snr0) - bshdecode=.false. - if( msgreceived(1:1) .eq. '<' ) then - i2=index(msgreceived,'>') - i1=0 - if(i2.gt.0) i1=index(msgreceived(1:i2),' ') - if(i1.gt.0) bshdecode=.true. - endif - if(.not. bshdecode) then call msk144signalquality(ct,snr0,fest,tdec,softbits,msgreceived,hiscall, & btrain,datadir,ncorrected,eyeopening,pcoeffs) @@ -221,15 +215,6 @@ subroutine mskrtd(id2,nutc0,tsec,ntol,nrxfreq,ndepth,mycall,mygrid,hiscall, & endif write(line,1021) nutc0,nsnr,tdec,nint(fest),decsym,msgreceived,char(0) 1021 format(i6.6,i4,f5.1,i5,a4,a37,a1) -! if( .not.bshdecode ) then -! write(line,1020) nutc0,nsnr,tdec,nint(fest),decsym,msgreceived(1:22), & -! navg,ncorrected,eyeopening,char(0) -!1020 format(i6.6,i4,f5.1,i5,a4,a22,i2,i3,f5.1,a1) -! else -! write(line,1022) nutc0,nsnr,tdec,nint(fest),decsym,msgreceived(1:22), & -! navg,char(0) -!1022 format(i6.6,i4,f5.1,i5,a4,a22,i2,a1) -! endif elseif(bswl .and. ndecodesuccess.ge.2) then seenb4=.false. do i=1,nshmem @@ -245,8 +230,6 @@ subroutine mskrtd(id2,nutc0,tsec,ntol,nrxfreq,ndepth,mycall,mygrid,hiscall, & msglastswl=msgreceived nsnrlastswl=nsnr write(line,1021) nutc0,nsnr,tdec,nint(fest),decsym,msgreceived,char(0) -! write(line,1022) nutc0,nsnr,tdec,nint(fest),decsym,msgreceived, & -! navg,char(0) endif endif 999 tsec0=tsec diff --git a/mainwindow.cpp b/mainwindow.cpp index 23c7c8e80..345287092 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -82,8 +82,6 @@ extern "C" { void genft8_(char* msg, int* i3, int* n3, int* isync, char* msgsent, char ft8msgbits[], int itone[], fortran_charlen_t, fortran_charlen_t); - void parse77_(char* msg, int* i3, int* n3, fortran_charlen_t); - void gen4_(char* msg, int* ichk, char* msgsent, int itone[], int* itext, fortran_charlen_t, fortran_charlen_t); @@ -1811,9 +1809,6 @@ void MainWindow::keyPressEvent (QKeyEvent * e) } } break; - case Qt::Key_Escape: - on_stopTxButton_clicked(); - return; case Qt::Key_F1: on_actionOnline_User_Guide_triggered(); return; @@ -1867,11 +1862,13 @@ void MainWindow::keyPressEvent (QKeyEvent * e) } } return; - case Qt::Key_A: - if(e->modifiers() & Qt::ControlModifier) { - abortQSO(); - return; - } + case Qt::Key_Escape: + m_nextCall=""; + ui->labNextCall->setStyleSheet(""); + ui->labNextCall->setText(""); + on_stopTxButton_clicked(); + abortQSO(); + return; case Qt::Key_X: if(e->modifiers() & Qt::AltModifier) { foxTest(); @@ -2746,7 +2743,7 @@ void MainWindow::decode() //decode() dec_data.params.nexp_decode=m_nContest; if(m_config.single_decode()) dec_data.params.nexp_decode += 32; if(m_config.enable_VHF_features()) dec_data.params.nexp_decode += 64; - dec_data.params.ldecode77 = m_config.bDecode77(); + dec_data.params.ldecode77 = true; strncpy(dec_data.params.datetime, m_dateTime.toLatin1(), 20); strncpy(dec_data.params.mycall, (m_config.my_callsign()+" ").toLatin1(),12); @@ -3536,24 +3533,8 @@ void MainWindow::guiUpdate() if(m_config.bFox() and ui->tabWidget->currentIndex()==2) { foxTxSequencer(); } else { - parse77_(message, &m_i3, &m_n3, 37); - int ichk=1,itype=-1; - gen65_(message,&ichk,msgsent,const_cast(itone0),&itype,22,22); - /* - * itype: - * 1 Std msg - * 2 Type 1 prefix - * 3 Type 1 suffix - * 4 Type 2 prefix - * 5 Type 2 suffix - * 6 Free Text - * 7 Hashed calls (MSK144 short format) - */ - - m_isync=1; - if(!m_config.bGenerate77() and itype == 6 and (m_i3>0 or m_n3>0)) m_isync=2; - if(m_config.bGenerate77()) m_isync=2; - if(m_isync==1) m_i3=0; + m_isync=2; + m_i3=0; char ft8msgbits[77]; genft8_(message, &m_i3, &m_n3, &m_isync, msgsent, const_cast (ft8msgbits), const_cast (itone), 37, 37); @@ -4743,22 +4724,18 @@ void MainWindow::genStdMsgs(QString rpt, bool unconditional) bool bMyCall=stdCall(my_callsign); bool bHisCall=stdCall(hisCall); - bool b77=(m_mode=="MSK144" or m_mode=="FT8") and - (!bMyCall or !bHisCall or m_config.bGenerate77()); QString t0=hisBase + " " + m_baseCall + " "; QString t0s=hisCall + " " + my_callsign + " "; QString t0a,t0b; - if(b77) { - if(bHisCall and bMyCall) t0=hisCall + " " + my_callsign + " "; - t0a="<"+hisCall + "> " + my_callsign + " "; - t0b=hisCall + " <" + my_callsign + "> "; - } + + if(bHisCall and bMyCall) t0=hisCall + " " + my_callsign + " "; + t0a="<"+hisCall + "> " + my_callsign + " "; + t0b=hisCall + " <" + my_callsign + "> "; QString t00=t0; QString t {t0 + my_grid}; -// if(b77 and (!bMyCall or !bHisCall)) t=t0a; - if(b77 and (!bMyCall)) t=t0a; + if(!bMyCall) t=t0a; msgtype(t, ui->tx1); if (eme_short_codes) { t=t+" OOO"; @@ -4780,9 +4757,14 @@ void MainWindow::genStdMsgs(QString rpt, bool unconditional) rst.sprintf("5%1d9 ",nn); rs=rst.mid(0,2); t=t0; - if(b77 and !bMyCall) t=t0b; - if(b77 and !bHisCall) t=t0a; - if(b77 and (t!=t0)) msgtype(t, ui->tx1); + if(!bMyCall) { + t=t0b; + msgtype(t0a, ui->tx1); + } + if(!bHisCall) { + t=t0a; + msgtype(t0a, ui->tx1); + } if(m_config.bNA_VHF_Contest()) sent=my_grid; if(m_config.bFieldDay()) sent=m_config.FieldDayExchange(); if(m_config.bRTTYroundup()) { @@ -4856,7 +4838,7 @@ void MainWindow::genStdMsgs(QString rpt, bool unconditional) } } - if(m_config.bGenerate77() or "MSK144" == m_mode) return; + if(m_mode=="FT8" or m_mode=="MSK144") return; if (is_compound) { if (is_type_one) { @@ -5113,7 +5095,7 @@ void MainWindow::msgtype(QString t, QLineEdit* tx) //msgtype() int i0=t.trimmed().length()-7; if(t.mid(i0,3)==" R ") text=false; } - if(m_config.bGenerate77()) text=false; + text=false; //### ... to here ... @@ -5467,7 +5449,7 @@ void MainWindow::on_actionFT8_triggered() if(!m_config.bFox() and !m_config.bHound()) { QString t0=""; - if(m_config.bGenerate77()) t0=" Tx2.0 "; + t0=" Tx2.0 "; if(m_config.bNA_VHF_Contest()) t0+="NA VHF"; if(m_config.bEU_VHF_Contest()) t0+="EU VHF"; if(m_config.bFieldDay()) t0+="Field Day"; diff --git a/shortcuts.txt b/shortcuts.txt index 892f13790..14a9cd73a 100644 --- a/shortcuts.txt +++ b/shortcuts.txt @@ -1,5 +1,5 @@ - +
Esc Stop transmitting
Esc Stop Tx, abort QSO, clear next-call queue
F1 Online User's Guide
Shift+F1 Copyright Notice
Ctrl+F1 About WSJT-X