mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-11-04 05:50:31 -05:00 
			
		
		
		
	Merge branch 'hotfix-2.0.0-rc4' of bitbucket.org:k1jt/wsjtx into hotfix-2.0.0-rc4
This commit is contained in:
		
						commit
						fd0a056726
					
				@ -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
 | 
			
		||||
 | 
			
		||||
@ -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()
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										333
									
								
								Configuration.ui
									
									
									
									
									
								
							
							
						
						
									
										333
									
								
								Configuration.ui
									
									
									
									
									
								
							@ -2414,35 +2414,6 @@ Right click for insert and delete options.</string>
 | 
			
		||||
         </layout>
 | 
			
		||||
        </widget>
 | 
			
		||||
       </item>
 | 
			
		||||
       <item row="2" column="0" colspan="2">
 | 
			
		||||
        <widget class="QGroupBox" name="groupBox_8">
 | 
			
		||||
         <property name="title">
 | 
			
		||||
          <string>FT8 message types</string>
 | 
			
		||||
         </property>
 | 
			
		||||
         <layout class="QHBoxLayout" name="horizontalLayout_15">
 | 
			
		||||
          <item>
 | 
			
		||||
           <widget class="QCheckBox" name="cbGenerate77">
 | 
			
		||||
            <property name="toolTip">
 | 
			
		||||
             <string><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></string>
 | 
			
		||||
            </property>
 | 
			
		||||
            <property name="text">
 | 
			
		||||
             <string>Always generate 77-bit messages</string>
 | 
			
		||||
            </property>
 | 
			
		||||
           </widget>
 | 
			
		||||
          </item>
 | 
			
		||||
          <item>
 | 
			
		||||
           <widget class="QCheckBox" name="cbDecode77">
 | 
			
		||||
            <property name="toolTip">
 | 
			
		||||
             <string><html><head/><body><p>Check this box to ignore FT8 transmissions using the older 75-bit protocol.</p></body></html></string>
 | 
			
		||||
            </property>
 | 
			
		||||
            <property name="text">
 | 
			
		||||
             <string>Decode only 77-bit messages</string>
 | 
			
		||||
            </property>
 | 
			
		||||
           </widget>
 | 
			
		||||
          </item>
 | 
			
		||||
         </layout>
 | 
			
		||||
        </widget>
 | 
			
		||||
       </item>
 | 
			
		||||
       <item row="1" column="0">
 | 
			
		||||
        <widget class="QGroupBox" name="groupBox_7">
 | 
			
		||||
         <property name="title">
 | 
			
		||||
@ -2472,154 +2443,7 @@ Right click for insert and delete options.</string>
 | 
			
		||||
         </layout>
 | 
			
		||||
        </widget>
 | 
			
		||||
       </item>
 | 
			
		||||
       <item row="0" column="1">
 | 
			
		||||
        <widget class="QGroupBox" name="groupBox_5">
 | 
			
		||||
         <property name="title">
 | 
			
		||||
          <string>Miscellaneous</string>
 | 
			
		||||
         </property>
 | 
			
		||||
         <layout class="QFormLayout" name="formLayout_10">
 | 
			
		||||
          <item row="0" column="0">
 | 
			
		||||
           <widget class="QLabel" name="label_3">
 | 
			
		||||
            <property name="text">
 | 
			
		||||
             <string>Degrade S/N of .wav file: </string>
 | 
			
		||||
            </property>
 | 
			
		||||
            <property name="buddy">
 | 
			
		||||
             <cstring>sbDegrade</cstring>
 | 
			
		||||
            </property>
 | 
			
		||||
           </widget>
 | 
			
		||||
          </item>
 | 
			
		||||
          <item row="0" column="1">
 | 
			
		||||
           <widget class="QDoubleSpinBox" name="sbDegrade">
 | 
			
		||||
            <property name="toolTip">
 | 
			
		||||
             <string>For offline sensitivity tests</string>
 | 
			
		||||
            </property>
 | 
			
		||||
            <property name="suffix">
 | 
			
		||||
             <string> dB</string>
 | 
			
		||||
            </property>
 | 
			
		||||
            <property name="decimals">
 | 
			
		||||
             <number>1</number>
 | 
			
		||||
            </property>
 | 
			
		||||
            <property name="singleStep">
 | 
			
		||||
             <double>1.000000000000000</double>
 | 
			
		||||
            </property>
 | 
			
		||||
           </widget>
 | 
			
		||||
          </item>
 | 
			
		||||
          <item row="1" column="0">
 | 
			
		||||
           <widget class="QLabel" name="label_9">
 | 
			
		||||
            <property name="text">
 | 
			
		||||
             <string>Receiver bandwidth:</string>
 | 
			
		||||
            </property>
 | 
			
		||||
            <property name="buddy">
 | 
			
		||||
             <cstring>sbBandwidth</cstring>
 | 
			
		||||
            </property>
 | 
			
		||||
           </widget>
 | 
			
		||||
          </item>
 | 
			
		||||
          <item row="1" column="1">
 | 
			
		||||
           <widget class="QSpinBox" name="sbBandwidth">
 | 
			
		||||
            <property name="toolTip">
 | 
			
		||||
             <string>For offline sensitivity tests</string>
 | 
			
		||||
            </property>
 | 
			
		||||
            <property name="suffix">
 | 
			
		||||
             <string>  Hz</string>
 | 
			
		||||
            </property>
 | 
			
		||||
            <property name="maximum">
 | 
			
		||||
             <number>6000</number>
 | 
			
		||||
            </property>
 | 
			
		||||
            <property name="singleStep">
 | 
			
		||||
             <number>100</number>
 | 
			
		||||
            </property>
 | 
			
		||||
            <property name="value">
 | 
			
		||||
             <number>2500</number>
 | 
			
		||||
            </property>
 | 
			
		||||
           </widget>
 | 
			
		||||
          </item>
 | 
			
		||||
          <item row="2" column="0">
 | 
			
		||||
           <widget class="QLabel" name="label_11">
 | 
			
		||||
            <property name="text">
 | 
			
		||||
             <string>Tx delay:</string>
 | 
			
		||||
            </property>
 | 
			
		||||
            <property name="buddy">
 | 
			
		||||
             <cstring>sbTxDelay</cstring>
 | 
			
		||||
            </property>
 | 
			
		||||
           </widget>
 | 
			
		||||
          </item>
 | 
			
		||||
          <item row="2" column="1">
 | 
			
		||||
           <widget class="QDoubleSpinBox" name="sbTxDelay">
 | 
			
		||||
            <property name="toolTip">
 | 
			
		||||
             <string>Minimum delay between assertion of PTT and start of Tx audio.</string>
 | 
			
		||||
            </property>
 | 
			
		||||
            <property name="suffix">
 | 
			
		||||
             <string>  s</string>
 | 
			
		||||
            </property>
 | 
			
		||||
            <property name="decimals">
 | 
			
		||||
             <number>1</number>
 | 
			
		||||
            </property>
 | 
			
		||||
            <property name="minimum">
 | 
			
		||||
             <double>0.000000000000000</double>
 | 
			
		||||
            </property>
 | 
			
		||||
            <property name="maximum">
 | 
			
		||||
             <double>0.500000000000000</double>
 | 
			
		||||
            </property>
 | 
			
		||||
            <property name="singleStep">
 | 
			
		||||
             <double>0.100000000000000</double>
 | 
			
		||||
            </property>
 | 
			
		||||
           </widget>
 | 
			
		||||
          </item>
 | 
			
		||||
          <item row="3" column="0" colspan="2">
 | 
			
		||||
           <widget class="QGroupBox" name="groupBox_10">
 | 
			
		||||
            <property name="minimumSize">
 | 
			
		||||
             <size>
 | 
			
		||||
              <width>0</width>
 | 
			
		||||
              <height>50</height>
 | 
			
		||||
             </size>
 | 
			
		||||
            </property>
 | 
			
		||||
            <property name="title">
 | 
			
		||||
             <string>Tone spacing</string>
 | 
			
		||||
            </property>
 | 
			
		||||
            <layout class="QHBoxLayout" name="horizontalLayout_19">
 | 
			
		||||
             <item>
 | 
			
		||||
              <widget class="QCheckBox" name="cbx2ToneSpacing">
 | 
			
		||||
               <property name="toolTip">
 | 
			
		||||
                <string><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></string>
 | 
			
		||||
               </property>
 | 
			
		||||
               <property name="text">
 | 
			
		||||
                <string>x 2</string>
 | 
			
		||||
               </property>
 | 
			
		||||
              </widget>
 | 
			
		||||
             </item>
 | 
			
		||||
             <item>
 | 
			
		||||
              <widget class="QCheckBox" name="cbx4ToneSpacing">
 | 
			
		||||
               <property name="enabled">
 | 
			
		||||
                <bool>true</bool>
 | 
			
		||||
               </property>
 | 
			
		||||
               <property name="toolTip">
 | 
			
		||||
                <string><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></string>
 | 
			
		||||
               </property>
 | 
			
		||||
               <property name="text">
 | 
			
		||||
                <string>x 4 </string>
 | 
			
		||||
               </property>
 | 
			
		||||
              </widget>
 | 
			
		||||
             </item>
 | 
			
		||||
            </layout>
 | 
			
		||||
           </widget>
 | 
			
		||||
          </item>
 | 
			
		||||
         </layout>
 | 
			
		||||
        </widget>
 | 
			
		||||
       </item>
 | 
			
		||||
       <item row="4" column="0" colspan="2">
 | 
			
		||||
        <spacer name="verticalSpacer_8">
 | 
			
		||||
         <property name="orientation">
 | 
			
		||||
          <enum>Qt::Vertical</enum>
 | 
			
		||||
         </property>
 | 
			
		||||
         <property name="sizeHint" stdset="0">
 | 
			
		||||
          <size>
 | 
			
		||||
           <width>0</width>
 | 
			
		||||
           <height>0</height>
 | 
			
		||||
          </size>
 | 
			
		||||
         </property>
 | 
			
		||||
        </spacer>
 | 
			
		||||
       </item>
 | 
			
		||||
       <item row="3" column="0" colspan="2">
 | 
			
		||||
       <item row="2" column="0" colspan="2">
 | 
			
		||||
        <widget class="QGroupBox" name="groupBox_9">
 | 
			
		||||
         <property name="title">
 | 
			
		||||
          <string>Special operating activity:  Generation of FT8 and MSK144 messages</string>
 | 
			
		||||
@ -2819,6 +2643,153 @@ Right click for insert and delete options.</string>
 | 
			
		||||
         </layout>
 | 
			
		||||
        </widget>
 | 
			
		||||
       </item>
 | 
			
		||||
       <item row="0" column="1">
 | 
			
		||||
        <widget class="QGroupBox" name="groupBox_5">
 | 
			
		||||
         <property name="title">
 | 
			
		||||
          <string>Miscellaneous</string>
 | 
			
		||||
         </property>
 | 
			
		||||
         <layout class="QFormLayout" name="formLayout_10">
 | 
			
		||||
          <item row="0" column="0">
 | 
			
		||||
           <widget class="QLabel" name="label_3">
 | 
			
		||||
            <property name="text">
 | 
			
		||||
             <string>Degrade S/N of .wav file: </string>
 | 
			
		||||
            </property>
 | 
			
		||||
            <property name="buddy">
 | 
			
		||||
             <cstring>sbDegrade</cstring>
 | 
			
		||||
            </property>
 | 
			
		||||
           </widget>
 | 
			
		||||
          </item>
 | 
			
		||||
          <item row="0" column="1">
 | 
			
		||||
           <widget class="QDoubleSpinBox" name="sbDegrade">
 | 
			
		||||
            <property name="toolTip">
 | 
			
		||||
             <string>For offline sensitivity tests</string>
 | 
			
		||||
            </property>
 | 
			
		||||
            <property name="suffix">
 | 
			
		||||
             <string> dB</string>
 | 
			
		||||
            </property>
 | 
			
		||||
            <property name="decimals">
 | 
			
		||||
             <number>1</number>
 | 
			
		||||
            </property>
 | 
			
		||||
            <property name="singleStep">
 | 
			
		||||
             <double>1.000000000000000</double>
 | 
			
		||||
            </property>
 | 
			
		||||
           </widget>
 | 
			
		||||
          </item>
 | 
			
		||||
          <item row="1" column="0">
 | 
			
		||||
           <widget class="QLabel" name="label_9">
 | 
			
		||||
            <property name="text">
 | 
			
		||||
             <string>Receiver bandwidth:</string>
 | 
			
		||||
            </property>
 | 
			
		||||
            <property name="buddy">
 | 
			
		||||
             <cstring>sbBandwidth</cstring>
 | 
			
		||||
            </property>
 | 
			
		||||
           </widget>
 | 
			
		||||
          </item>
 | 
			
		||||
          <item row="1" column="1">
 | 
			
		||||
           <widget class="QSpinBox" name="sbBandwidth">
 | 
			
		||||
            <property name="toolTip">
 | 
			
		||||
             <string>For offline sensitivity tests</string>
 | 
			
		||||
            </property>
 | 
			
		||||
            <property name="suffix">
 | 
			
		||||
             <string>  Hz</string>
 | 
			
		||||
            </property>
 | 
			
		||||
            <property name="maximum">
 | 
			
		||||
             <number>6000</number>
 | 
			
		||||
            </property>
 | 
			
		||||
            <property name="singleStep">
 | 
			
		||||
             <number>100</number>
 | 
			
		||||
            </property>
 | 
			
		||||
            <property name="value">
 | 
			
		||||
             <number>2500</number>
 | 
			
		||||
            </property>
 | 
			
		||||
           </widget>
 | 
			
		||||
          </item>
 | 
			
		||||
          <item row="2" column="0">
 | 
			
		||||
           <widget class="QLabel" name="label_11">
 | 
			
		||||
            <property name="text">
 | 
			
		||||
             <string>Tx delay:</string>
 | 
			
		||||
            </property>
 | 
			
		||||
            <property name="buddy">
 | 
			
		||||
             <cstring>sbTxDelay</cstring>
 | 
			
		||||
            </property>
 | 
			
		||||
           </widget>
 | 
			
		||||
          </item>
 | 
			
		||||
          <item row="2" column="1">
 | 
			
		||||
           <widget class="QDoubleSpinBox" name="sbTxDelay">
 | 
			
		||||
            <property name="toolTip">
 | 
			
		||||
             <string>Minimum delay between assertion of PTT and start of Tx audio.</string>
 | 
			
		||||
            </property>
 | 
			
		||||
            <property name="suffix">
 | 
			
		||||
             <string>  s</string>
 | 
			
		||||
            </property>
 | 
			
		||||
            <property name="decimals">
 | 
			
		||||
             <number>1</number>
 | 
			
		||||
            </property>
 | 
			
		||||
            <property name="minimum">
 | 
			
		||||
             <double>0.000000000000000</double>
 | 
			
		||||
            </property>
 | 
			
		||||
            <property name="maximum">
 | 
			
		||||
             <double>0.500000000000000</double>
 | 
			
		||||
            </property>
 | 
			
		||||
            <property name="singleStep">
 | 
			
		||||
             <double>0.100000000000000</double>
 | 
			
		||||
            </property>
 | 
			
		||||
           </widget>
 | 
			
		||||
          </item>
 | 
			
		||||
          <item row="3" column="0" colspan="2">
 | 
			
		||||
           <widget class="QGroupBox" name="groupBox_10">
 | 
			
		||||
            <property name="minimumSize">
 | 
			
		||||
             <size>
 | 
			
		||||
              <width>0</width>
 | 
			
		||||
              <height>50</height>
 | 
			
		||||
             </size>
 | 
			
		||||
            </property>
 | 
			
		||||
            <property name="title">
 | 
			
		||||
             <string>Tone spacing</string>
 | 
			
		||||
            </property>
 | 
			
		||||
            <layout class="QHBoxLayout" name="horizontalLayout_19">
 | 
			
		||||
             <item>
 | 
			
		||||
              <widget class="QCheckBox" name="cbx2ToneSpacing">
 | 
			
		||||
               <property name="toolTip">
 | 
			
		||||
                <string><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></string>
 | 
			
		||||
               </property>
 | 
			
		||||
               <property name="text">
 | 
			
		||||
                <string>x 2</string>
 | 
			
		||||
               </property>
 | 
			
		||||
              </widget>
 | 
			
		||||
             </item>
 | 
			
		||||
             <item>
 | 
			
		||||
              <widget class="QCheckBox" name="cbx4ToneSpacing">
 | 
			
		||||
               <property name="enabled">
 | 
			
		||||
                <bool>true</bool>
 | 
			
		||||
               </property>
 | 
			
		||||
               <property name="toolTip">
 | 
			
		||||
                <string><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></string>
 | 
			
		||||
               </property>
 | 
			
		||||
               <property name="text">
 | 
			
		||||
                <string>x 4 </string>
 | 
			
		||||
               </property>
 | 
			
		||||
              </widget>
 | 
			
		||||
             </item>
 | 
			
		||||
            </layout>
 | 
			
		||||
           </widget>
 | 
			
		||||
          </item>
 | 
			
		||||
         </layout>
 | 
			
		||||
        </widget>
 | 
			
		||||
       </item>
 | 
			
		||||
       <item row="3" column="0" colspan="2">
 | 
			
		||||
        <spacer name="verticalSpacer_8">
 | 
			
		||||
         <property name="orientation">
 | 
			
		||||
          <enum>Qt::Vertical</enum>
 | 
			
		||||
         </property>
 | 
			
		||||
         <property name="sizeHint" stdset="0">
 | 
			
		||||
          <size>
 | 
			
		||||
           <width>0</width>
 | 
			
		||||
           <height>0</height>
 | 
			
		||||
          </size>
 | 
			
		||||
         </property>
 | 
			
		||||
        </spacer>
 | 
			
		||||
       </item>
 | 
			
		||||
      </layout>
 | 
			
		||||
     </widget>
 | 
			
		||||
    </widget>
 | 
			
		||||
@ -2947,8 +2918,6 @@ Right click for insert and delete options.</string>
 | 
			
		||||
  <tabstop>cbx4ToneSpacing</tabstop>
 | 
			
		||||
  <tabstop>cbFox</tabstop>
 | 
			
		||||
  <tabstop>cbHound</tabstop>
 | 
			
		||||
  <tabstop>cbGenerate77</tabstop>
 | 
			
		||||
  <tabstop>cbDecode77</tabstop>
 | 
			
		||||
  <tabstop>rbNone</tabstop>
 | 
			
		||||
  <tabstop>rbNA_VHF_Contest</tabstop>
 | 
			
		||||
  <tabstop>rbEU_VHF_Contest</tabstop>
 | 
			
		||||
@ -3025,12 +2994,12 @@ Right click for insert and delete options.</string>
 | 
			
		||||
  </connection>
 | 
			
		||||
 </connections>
 | 
			
		||||
 <buttongroups>
 | 
			
		||||
  <buttongroup name="CAT_handshake_button_group"/>
 | 
			
		||||
  <buttongroup name="split_mode_button_group"/>
 | 
			
		||||
  <buttongroup name="TX_mode_button_group"/>
 | 
			
		||||
  <buttongroup name="CAT_data_bits_button_group"/>
 | 
			
		||||
  <buttongroup name="PTT_method_button_group"/>
 | 
			
		||||
  <buttongroup name="CAT_stop_bits_button_group"/>
 | 
			
		||||
  <buttongroup name="CAT_handshake_button_group"/>
 | 
			
		||||
  <buttongroup name="TX_audio_source_button_group"/>
 | 
			
		||||
  <buttongroup name="split_mode_button_group"/>
 | 
			
		||||
  <buttongroup name="CAT_stop_bits_button_group"/>
 | 
			
		||||
 </buttongroups>
 | 
			
		||||
</ui>
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
  parameter (MAXTEST=75,NTEST=48)
 | 
			
		||||
  character*37 testmsg(MAXTEST)
 | 
			
		||||
  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"/
 | 
			
		||||
       "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 <KH1/KH7Z> -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>",                &
 | 
			
		||||
       "W9XYZ <PJ4/K1ABC> -11",            &
 | 
			
		||||
       "<PJ4/K1ABC> W9XYZ R-09",           &
 | 
			
		||||
       "<W9XYZ> PJ4/K1ABC RRR",            &
 | 
			
		||||
       "PJ4/K1ABC <W9XYZ> 73",             &
 | 
			
		||||
       "CQ W9XYZ EN37",                    & 
 | 
			
		||||
       "<W9XYZ> YW18FIFA",                 &
 | 
			
		||||
       "<YW18FIFA> W9XYZ -11",             &
 | 
			
		||||
       "W9XYZ <YW18FIFA> R-09",            &
 | 
			
		||||
       "YW18FIFA <W9XYZ> RRR",             &
 | 
			
		||||
       "<W9XYZ> YW18FIFA 73",              &
 | 
			
		||||
       "TNX BOB 73 GL",                    &
 | 
			
		||||
       "CQ YW18FIFA",                      &
 | 
			
		||||
       "<YW18FIFA> KA1ABC",                &
 | 
			
		||||
       "KA1ABC <YW18FIFA> -11",            &
 | 
			
		||||
       "<YW18FIFA> KA1ABC R-17",           &
 | 
			
		||||
       "<KA1ABC> YW18FIFA RR73",           &
 | 
			
		||||
       "<YW18FIFA> KA1ABC 73",             &
 | 
			
		||||
       "123456789ABCDEF012"/
 | 
			
		||||
 | 
			
		||||
@ -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 <KH1/KH7Z> -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)
 | 
			
		||||
     i3=-1
 | 
			
		||||
     n3=-1
 | 
			
		||||
     call genft8_174_91(msg,i3,n3,msgsent,msgbits,itone)
 | 
			
		||||
     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)
 | 
			
		||||
     else
 | 
			
		||||
        call foxgen_wrap(msg,msgbits,itone)
 | 
			
		||||
        i3bit=1
 | 
			
		||||
     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 
 | 
			
		||||
     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
 | 
			
		||||
     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(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)
 | 
			
		||||
     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
 | 
			
		||||
        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)
 | 
			
		||||
        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
 | 
			
		||||
 | 
			
		||||
  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
 | 
			
		||||
 | 
			
		||||
@ -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*,'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 "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*,'          ft8sim "WA9XYZ/R KA1ABC/R FN42" 1500.0 0.0  0.1 1.0   0     10   -18'
 | 
			
		||||
     print*,'          ft8sim "K1ABC RR73; W9XYZ <KH1/KH7Z> -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,66 +62,38 @@ 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 
 | 
			
		||||
     c0=0.0
 | 
			
		||||
     do j=1,NN                             !Generate complex waveform
 | 
			
		||||
        dphi=twopi*(f0*dt+itone(j)/real(NSPS))
 | 
			
		||||
        do i=1,NSPS
 | 
			
		||||
@ -130,8 +103,8 @@ program ft8sim
 | 
			
		||||
        enddo
 | 
			
		||||
     enddo
 | 
			
		||||
     if(fspread.ne.0.0 .or. delay.ne.0.0) call watterson(c0,NMAX,fs,delay,fspread)
 | 
			
		||||
        c=c+sig*c0
 | 
			
		||||
     enddo
 | 
			
		||||
     c=sig*c0
 | 
			
		||||
  
 | 
			
		||||
     ib=k
 | 
			
		||||
     wave=real(c)
 | 
			
		||||
     peak=maxval(abs(wave(ia:ib)))
 | 
			
		||||
@ -160,7 +133,4 @@ program ft8sim
 | 
			
		||||
     write(*,1110) ifile,xdt,f0,snrdb,fname
 | 
			
		||||
1110 format(i4,f7.2,f8.2,f7.1,2x,a17)
 | 
			
		||||
  enddo    
 | 
			
		||||
       
 | 
			
		||||
999 end program ft8sim
 | 
			
		||||
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										47
									
								
								lib/msk144_testmsg.f90
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								lib/msk144_testmsg.f90
									
									
									
									
									
										Normal file
									
								
							@ -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>",                &
 | 
			
		||||
       "W9XYZ <PJ4/K1ABC> -11",            &
 | 
			
		||||
       "<PJ4/K1ABC> W9XYZ R-09",           &
 | 
			
		||||
       "<W9XYZ> PJ4/K1ABC RRR",            &
 | 
			
		||||
       "PJ4/K1ABC <W9XYZ> 73",             &
 | 
			
		||||
       "CQ W9XYZ EN37",                    & 
 | 
			
		||||
       "<W9XYZ> YW18FIFA",                 &
 | 
			
		||||
       "<YW18FIFA> W9XYZ -11",             &
 | 
			
		||||
       "W9XYZ <YW18FIFA> R-09",            &
 | 
			
		||||
       "YW18FIFA <W9XYZ> RRR",             &
 | 
			
		||||
       "<W9XYZ> YW18FIFA 73",              &
 | 
			
		||||
       "TNX BOB 73 GL",                    &
 | 
			
		||||
       "CQ YW18FIFA",                      &
 | 
			
		||||
       "<YW18FIFA> KA1ABC",                &
 | 
			
		||||
       "KA1ABC <YW18FIFA> -11",            &
 | 
			
		||||
       "<YW18FIFA> KA1ABC R-17",           &
 | 
			
		||||
       "<KA1ABC> YW18FIFA RR73",           &
 | 
			
		||||
       "<YW18FIFA> KA1ABC 73",             &
 | 
			
		||||
       "123456789ABCDEF012",               &
 | 
			
		||||
       "<KA1ABC WB9XYZ> -03",              &
 | 
			
		||||
       "<KA1ABC WB9XYZ> R+03",             &
 | 
			
		||||
       "<KA1ABC WB9XYZ> RRR",              &
 | 
			
		||||
       "<KA1ABC WB9XYZ> 73"/
 | 
			
		||||
 | 
			
		||||
@ -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)="<KA1ABC WB9XYZ> -03"
 | 
			
		||||
     testmsg(NTEST+2)="<KA1ABC WB9XYZ> R+03" 
 | 
			
		||||
     testmsg(NTEST+3)="<KA1ABC WB9XYZ> RRR" 
 | 
			
		||||
     testmsg(NTEST+4)="<KA1ABC WB9XYZ> 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
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -41,8 +41,12 @@ program msk144sim
 | 
			
		||||
  write(*,*) 'Requested message: ',msg
 | 
			
		||||
  write(*,*) 'Message sent     : ',msgsent
 | 
			
		||||
  write(*,*) 'Tones: '
 | 
			
		||||
  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
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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) {
 | 
			
		||||
    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<int *>(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<char *> (ft8msgbits), const_cast<int *> (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 + "> ";
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  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";
 | 
			
		||||
 | 
			
		||||
@ -1,5 +1,5 @@
 | 
			
		||||
<table cellspacing=1>
 | 
			
		||||
  <tr><td><b>Esc      </b></td><td>Stop transmitting</td></tr>
 | 
			
		||||
  <tr><td><b>Esc      </b></td><td>Stop Tx, abort QSO, clear next-call queue</td></tr>
 | 
			
		||||
  <tr><td><b>F1       </b></td><td>Online User's Guide</td></tr>
 | 
			
		||||
  <tr><td><b>Shift+F1  </b></td><td>Copyright Notice</td></tr>
 | 
			
		||||
  <tr><td><b>Ctrl+F1  </b></td><td>About WSJT-X</td></tr>
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user