Merge branch 'feat-fst280' of bitbucket.org:k1jt/wsjtx into feat-fst280

This commit is contained in:
Steven Franke 2020-07-04 09:16:01 -05:00
commit 0357af2eb5
7 changed files with 110 additions and 28 deletions

View File

@ -203,7 +203,7 @@ subroutine unpack77(c77,nrx,msg,unpk77_success)
integer ntel(3) integer ntel(3)
character*77 c77 character*77 c77
character*37 msg character*37 msg
character*13 call_1,call_2,call_3 character*13 call_1,call_2,call_3,call_1a
character*13 mycall13_0,dxcall13_0 character*13 mycall13_0,dxcall13_0
character*11 c11 character*11 c11
character*3 crpt,cntx,cpfx character*3 crpt,cntx,cpfx
@ -350,11 +350,11 @@ subroutine unpack77(c77,nrx,msg,unpk77_success)
msg=adjustl(msg) msg=adjustl(msg)
else if(i3.eq.0 .and. n3.eq.6) then else if(i3.eq.0 .and. n3.eq.6) then
read(c77(50:50),'(b1)') j2a read(c77(49:50),'(2b1)') j2a,j2b
j2b=0 itype=2
if(j2a.eq.0) read(c77(49:49),'(b1)') j2b if(j2b.eq.0 .and. j2a.eq.0) itype=1
j2=2*j2a+j2b if(j2b.eq.0 .and. j2a.eq.1) itype=3
if(j2.eq.0) then if(itype.eq.1) then
! WSPR Type 1 ! WSPR Type 1
read(c77,2010) n28,igrid4,idbm read(c77,2010) n28,igrid4,idbm
2010 format(b28.28,b15.15,b5.5) 2010 format(b28.28,b15.15,b5.5)
@ -364,18 +364,10 @@ subroutine unpack77(c77,nrx,msg,unpk77_success)
call to_grid4(igrid4,grid4) call to_grid4(igrid4,grid4)
write(crpt,'(i3)') idbm write(crpt,'(i3)') idbm
msg=trim(call_1)//' '//grid4//' '//trim(adjustl(crpt)) msg=trim(call_1)//' '//grid4//' '//trim(adjustl(crpt))
call save_hash_call(call_1,n10,n12,n22) !### Is this OK here? ###
else if(j2.eq.1) then else if(itype.eq.2) then
! WSPR Type 2 ! WSPR Type 2
read(c77,2030) n28,igrid6
2030 format(b22.22,b25.25)
call unpack28(n28,call_1,unpk28_success)
if(.not.unpk28_success) unpk77_success=.false.
call to_grid6(igrid6,grid6)
msg=trim(call_1)//' '//grid6
else if(j2.eq.2) then
! WSPR Type 3
read(c77,2020) n28,npfx,idbm read(c77,2020) n28,npfx,idbm
2020 format(b28.28,b16.16,b5.5) 2020 format(b28.28,b16.16,b5.5)
idbm=nint(idbm*10.0/3.0) idbm=nint(idbm*10.0/3.0)
@ -391,6 +383,8 @@ subroutine unpack77(c77,nrx,msg,unpk77_success)
if(npfx.eq.0) exit if(npfx.eq.0) exit
enddo enddo
msg=trim(adjustl(cpfx))//'/'//trim(call_1)//' '//trim(adjustl(crpt)) msg=trim(adjustl(cpfx))//'/'//trim(call_1)//' '//trim(adjustl(crpt))
call_1a=trim(adjustl(cpfx))//'/'//trim(call_1)
call save_hash_call(call_1a,n10,n12,n22) !### Is this OK here? ###
else else
! Suffix ! Suffix
npfx=npfx-nzzz npfx=npfx-nzzz
@ -409,8 +403,21 @@ subroutine unpack77(c77,nrx,msg,unpk77_success)
return return
endif endif
msg=trim(call_1)//'/'//trim(adjustl(cpfx))//' '//trim(adjustl(crpt)) msg=trim(call_1)//'/'//trim(adjustl(cpfx))//' '//trim(adjustl(crpt))
call_1a=trim(call_1)//'/'//trim(adjustl(cpfx))
call save_hash_call(call_1a,n10,n12,n22) !### Is this OK here? ###
endif endif
else if(itype.eq.3) then
! WSPR Type 3
read(c77,2030) n22,igrid6
2030 format(b22.22,b25.25)
n28=n22+2063592
call unpack28(n28,call_1,unpk28_success)
if(.not.unpk28_success) unpk77_success=.false.
call to_grid6(igrid6,grid6)
msg=trim(call_1)//' '//grid6
endif endif
else if(i3.eq.1 .or. i3.eq.2) then else if(i3.eq.1 .or. i3.eq.2) then
@ -1032,6 +1039,7 @@ subroutine pack77_06(nwords,w,i3,n3,c77)
i3=0 i3=0
n3=6 n3=6
call pack28(w(1),n28) call pack28(w(1),n28)
n22=n28-2063592
k1=(ichar(grid6(1:1))-ichar('A'))*18*10*10*24*24 k1=(ichar(grid6(1:1))-ichar('A'))*18*10*10*24*24
k2=(ichar(grid6(2:2))-ichar('A'))*10*10*24*24 k2=(ichar(grid6(2:2))-ichar('A'))*10*10*24*24
k3=(ichar(grid6(3:3))-ichar('0'))*10*24*24 k3=(ichar(grid6(3:3))-ichar('0'))*10*24*24
@ -1039,7 +1047,7 @@ subroutine pack77_06(nwords,w,i3,n3,c77)
k5=(ichar(grid6(5:5))-ichar('A'))*24 k5=(ichar(grid6(5:5))-ichar('A'))*24
k6=(ichar(grid6(6:6))-ichar('A')) k6=(ichar(grid6(6:6))-ichar('A'))
igrid6=k1+k2+k3+k4+k5+k6 igrid6=k1+k2+k3+k4+k5+k6
write(c77,1030) n28,igrid6,2,0,n3,i3 write(c77,1030) n22,igrid6,2,0,n3,i3
1030 format(b22.22,b25.25,b3.3,b21.21,2b3.3) 1030 format(b22.22,b25.25,b3.3,b21.21,2b3.3)
endif endif

View File

@ -46,7 +46,7 @@ namespace
{20000000, Modes::FreqCal, IARURegions::ALL}, {20000000, Modes::FreqCal, IARURegions::ALL},
{136000, Modes::WSPR, IARURegions::ALL}, {136000, Modes::WSPR, IARURegions::ALL},
{136000, Modes::FST240W, IARURegions::ALL}, {136200, Modes::FST240W, IARURegions::ALL},
{136130, Modes::JT65, IARURegions::ALL}, {136130, Modes::JT65, IARURegions::ALL},
{136130, Modes::JT9, IARURegions::ALL}, {136130, Modes::JT9, IARURegions::ALL},
{136130, Modes::FST240, IARURegions::ALL}, {136130, Modes::FST240, IARURegions::ALL},
@ -55,9 +55,10 @@ namespace
{474200, Modes::JT9, IARURegions::ALL}, {474200, Modes::JT9, IARURegions::ALL},
{474200, Modes::FST240, IARURegions::ALL}, {474200, Modes::FST240, IARURegions::ALL},
{474200, Modes::WSPR, IARURegions::ALL}, {474200, Modes::WSPR, IARURegions::ALL},
{474200, Modes::FST240W, IARURegions::ALL}, {474400, Modes::FST240W, IARURegions::ALL},
{1836600, Modes::WSPR, IARURegions::ALL}, {1836600, Modes::WSPR, IARURegions::ALL},
{1836800, Modes::FST240W, IARURegions::ALL},
{1838000, Modes::JT65, IARURegions::ALL}, // squeezed allocations {1838000, Modes::JT65, IARURegions::ALL}, // squeezed allocations
{1839000, Modes::JT9, IARURegions::ALL}, {1839000, Modes::JT9, IARURegions::ALL},
{1839000, Modes::FST240, IARURegions::ALL}, {1839000, Modes::FST240, IARURegions::ALL},
@ -95,6 +96,7 @@ namespace
{3572000, Modes::FST240, IARURegions::ALL}, {3572000, Modes::FST240, IARURegions::ALL},
{3573000, Modes::FT8, IARURegions::ALL}, // above as below JT65 is out of DM allocation {3573000, Modes::FT8, IARURegions::ALL}, // above as below JT65 is out of DM allocation
{3568600, Modes::WSPR, IARURegions::ALL}, // needs guard marker and lock out {3568600, Modes::WSPR, IARURegions::ALL}, // needs guard marker and lock out
{3568800, Modes::FST240W, IARURegions::ALL},
{3575000, Modes::FT4, IARURegions::ALL}, // provisional {3575000, Modes::FT4, IARURegions::ALL}, // provisional
{3568000, Modes::FT4, IARURegions::R3}, // provisional {3568000, Modes::FT4, IARURegions::R3}, // provisional
@ -130,6 +132,7 @@ namespace
// 7110 LSB EMCOMM // 7110 LSB EMCOMM
// //
{7038600, Modes::WSPR, IARURegions::ALL}, {7038600, Modes::WSPR, IARURegions::ALL},
{7038800, Modes::FST240W, IARURegions::ALL},
{7074000, Modes::FT8, IARURegions::ALL}, {7074000, Modes::FT8, IARURegions::ALL},
{7076000, Modes::JT65, IARURegions::ALL}, {7076000, Modes::JT65, IARURegions::ALL},
{7078000, Modes::JT9, IARURegions::ALL}, {7078000, Modes::JT9, IARURegions::ALL},
@ -167,6 +170,7 @@ namespace
{10136000, Modes::FT8, IARURegions::ALL}, {10136000, Modes::FT8, IARURegions::ALL},
{10138000, Modes::JT65, IARURegions::ALL}, {10138000, Modes::JT65, IARURegions::ALL},
{10138700, Modes::WSPR, IARURegions::ALL}, {10138700, Modes::WSPR, IARURegions::ALL},
{10138900, Modes::FST240W, IARURegions::ALL},
{10140000, Modes::JT9, IARURegions::ALL}, {10140000, Modes::JT9, IARURegions::ALL},
{10140000, Modes::FST240, IARURegions::ALL}, {10140000, Modes::FST240, IARURegions::ALL},
{10140000, Modes::FT4, IARURegions::ALL}, // provisional {10140000, Modes::FT4, IARURegions::ALL}, // provisional
@ -209,6 +213,7 @@ namespace
// 14106.5 OLIVIA 1000 (main QRG) // 14106.5 OLIVIA 1000 (main QRG)
// //
{14095600, Modes::WSPR, IARURegions::ALL}, {14095600, Modes::WSPR, IARURegions::ALL},
{14095800, Modes::FST240W, IARURegions::ALL},
{14074000, Modes::FT8, IARURegions::ALL}, {14074000, Modes::FT8, IARURegions::ALL},
{14076000, Modes::JT65, IARURegions::ALL}, {14076000, Modes::JT65, IARURegions::ALL},
{14078000, Modes::JT9, IARURegions::ALL}, {14078000, Modes::JT9, IARURegions::ALL},
@ -248,12 +253,14 @@ namespace
{18104000, Modes::FST240, IARURegions::ALL}, {18104000, Modes::FST240, IARURegions::ALL},
{18104000, Modes::FT4, IARURegions::ALL}, // provisional {18104000, Modes::FT4, IARURegions::ALL}, // provisional
{18104600, Modes::WSPR, IARURegions::ALL}, {18104600, Modes::WSPR, IARURegions::ALL},
{18104800, Modes::FST240W, IARURegions::ALL},
{21074000, Modes::FT8, IARURegions::ALL}, {21074000, Modes::FT8, IARURegions::ALL},
{21076000, Modes::JT65, IARURegions::ALL}, {21076000, Modes::JT65, IARURegions::ALL},
{21078000, Modes::JT9, IARURegions::ALL}, {21078000, Modes::JT9, IARURegions::ALL},
{21078000, Modes::FST240, IARURegions::ALL}, {21078000, Modes::FST240, IARURegions::ALL},
{21094600, Modes::WSPR, IARURegions::ALL}, {21094600, Modes::WSPR, IARURegions::ALL},
{21094800, Modes::FST240W, IARURegions::ALL},
{21140000, Modes::FT4, IARURegions::ALL}, {21140000, Modes::FT4, IARURegions::ALL},
{24915000, Modes::FT8, IARURegions::ALL}, {24915000, Modes::FT8, IARURegions::ALL},
@ -262,12 +269,14 @@ namespace
{24919000, Modes::FST240, IARURegions::ALL}, {24919000, Modes::FST240, IARURegions::ALL},
{24919000, Modes::FT4, IARURegions::ALL}, // provisional {24919000, Modes::FT4, IARURegions::ALL}, // provisional
{24924600, Modes::WSPR, IARURegions::ALL}, {24924600, Modes::WSPR, IARURegions::ALL},
{24924800, Modes::FST240W, IARURegions::ALL},
{28074000, Modes::FT8, IARURegions::ALL}, {28074000, Modes::FT8, IARURegions::ALL},
{28076000, Modes::JT65, IARURegions::ALL}, {28076000, Modes::JT65, IARURegions::ALL},
{28078000, Modes::JT9, IARURegions::ALL}, {28078000, Modes::JT9, IARURegions::ALL},
{28078000, Modes::FST240, IARURegions::ALL}, {28078000, Modes::FST240, IARURegions::ALL},
{28124600, Modes::WSPR, IARURegions::ALL}, {28124600, Modes::WSPR, IARURegions::ALL},
{28124800, Modes::FST240W, IARURegions::ALL},
{28180000, Modes::FT4, IARURegions::ALL}, {28180000, Modes::FT4, IARURegions::ALL},
{50200000, Modes::Echo, IARURegions::ALL}, {50200000, Modes::Echo, IARURegions::ALL},
@ -278,6 +287,8 @@ namespace
{50260000, Modes::MSK144, IARURegions::R3}, {50260000, Modes::MSK144, IARURegions::R3},
{50293000, Modes::WSPR, IARURegions::R2}, {50293000, Modes::WSPR, IARURegions::R2},
{50293000, Modes::WSPR, IARURegions::R3}, {50293000, Modes::WSPR, IARURegions::R3},
{50293200, Modes::FST240W, IARURegions::R2},
{50293200, Modes::FST240W, IARURegions::R3},
{50310000, Modes::JT65, IARURegions::ALL}, {50310000, Modes::JT65, IARURegions::ALL},
{50312000, Modes::JT9, IARURegions::ALL}, {50312000, Modes::JT9, IARURegions::ALL},
{50312000, Modes::FST240, IARURegions::ALL}, {50312000, Modes::FST240, IARURegions::ALL},
@ -289,6 +300,7 @@ namespace
{70102000, Modes::JT65, IARURegions::R1}, {70102000, Modes::JT65, IARURegions::R1},
{70104000, Modes::JT9, IARURegions::R1}, {70104000, Modes::JT9, IARURegions::R1},
{70091000, Modes::WSPR, IARURegions::R1}, {70091000, Modes::WSPR, IARURegions::R1},
{70091200, Modes::FST240W, IARURegions::R2},
{70230000, Modes::MSK144, IARURegions::R1}, {70230000, Modes::MSK144, IARURegions::R1},
{144120000, Modes::JT65, IARURegions::ALL}, {144120000, Modes::JT65, IARURegions::ALL},
@ -298,6 +310,7 @@ namespace
{144360000, Modes::MSK144, IARURegions::R1}, {144360000, Modes::MSK144, IARURegions::R1},
{144150000, Modes::MSK144, IARURegions::R2}, {144150000, Modes::MSK144, IARURegions::R2},
{144489000, Modes::WSPR, IARURegions::ALL}, {144489000, Modes::WSPR, IARURegions::ALL},
{144489200, Modes::FST240W, IARURegions::R2},
{144120000, Modes::QRA64, IARURegions::ALL}, {144120000, Modes::QRA64, IARURegions::ALL},
{222065000, Modes::Echo, IARURegions::R2}, {222065000, Modes::Echo, IARURegions::R2},

View File

@ -25,8 +25,8 @@ namespace
"FreqCal", "FreqCal",
"FT8", "FT8",
"FT4", "FT4",
"FST280", "FST240",
"FST280W" "FST240W"
}; };
std::size_t constexpr mode_names_size = sizeof (mode_names) / sizeof (mode_names[0]); std::size_t constexpr mode_names_size = sizeof (mode_names) / sizeof (mode_names[0]);
} }

View File

@ -4078,7 +4078,7 @@ void MainWindow::guiUpdate()
//Once per second: //Once per second:
if(nsec != m_sec0) { if(nsec != m_sec0) {
// qDebug() << "onesec" << m_mode; // qDebug() << "onesec" << ui->RoundRobin->currentText();
m_currentBand=m_config.bands()->find(m_freqNominal); m_currentBand=m_config.bands()->find(m_freqNominal);
if( SpecOp::HOUND == m_config.special_op_id() ) { if( SpecOp::HOUND == m_config.special_op_id() ) {
qint32 tHound=QDateTime::currentMSecsSinceEpoch()/1000 - m_tAutoOn; qint32 tHound=QDateTime::currentMSecsSinceEpoch()/1000 - m_tAutoOn;
@ -5574,6 +5574,12 @@ void MainWindow::on_tx6_editingFinished() //tx6 edited
msgtype(t, ui->tx6); msgtype(t, ui->tx6);
} }
void MainWindow::on_RoundRobin_currentTextChanged(QString text)
{
ui->sbTxPercent->setEnabled(text=="Random");
}
void MainWindow::on_dxCallEntry_textChanged (QString const& call) void MainWindow::on_dxCallEntry_textChanged (QString const& call)
{ {
m_hisCall = call; m_hisCall = call;
@ -5842,9 +5848,10 @@ void MainWindow::on_actionFST240W_triggered()
bool bVHF=m_config.enable_VHF_features(); bool bVHF=m_config.enable_VHF_features();
setup_status_bar (bVHF); setup_status_bar (bVHF);
m_TRperiod = ui->sbTR_FST240W->value (); m_TRperiod = ui->sbTR_FST240W->value ();
ui->band_hopping_group_box->setChecked(false);
ui->band_hopping_group_box->setVisible(false); ui->band_hopping_group_box->setVisible(false);
int ntr=m_TRperiod; int ntr=m_TRperiod;
ui->sbTR_FST240W->setMinimum(15); //### 120 ?? ### ui->sbTR_FST240W->setMinimum(15);
ui->sbTR_FST240W->setMaximum(300); ui->sbTR_FST240W->setMaximum(300);
ui->sbTR_FST240W->setValue(120); //### Why is all this necessary? ### ui->sbTR_FST240W->setValue(120); //### Why is all this necessary? ###
ui->sbTR_FST240W->setValue(300); ui->sbTR_FST240W->setValue(300);
@ -6464,6 +6471,8 @@ void MainWindow::WSPR_config(bool b)
ui->logQSOButton->setVisible(!b); ui->logQSOButton->setVisible(!b);
ui->DecodeButton->setEnabled(!b); ui->DecodeButton->setEnabled(!b);
ui->band_hopping_group_box->setVisible(true); ui->band_hopping_group_box->setVisible(true);
ui->RoundRobin->setVisible(m_mode=="FST240W");
ui->RoundRobin->lineEdit()->setAlignment(Qt::AlignCenter);
if(b and m_mode!="Echo" and m_mode!="FST240W") { if(b and m_mode!="Echo" and m_mode!="FST240W") {
QString t="UTC dB DT Freq Drift Call Grid dBm "; QString t="UTC dB DT Freq Drift Call Grid dBm ";
if(m_config.miles()) t += " mi"; if(m_config.miles()) t += " mi";
@ -7899,6 +7908,18 @@ void MainWindow::on_pbTxNext_clicked(bool b)
void MainWindow::WSPR_scheduling () void MainWindow::WSPR_scheduling ()
{ {
QString t=ui->RoundRobin->currentText();
if(m_mode=="FST240W" and t!="Random") {
int i=t.left(1).toInt();
int n=t.right(1).toInt();
qint64 ms = QDateTime::currentMSecsSinceEpoch() % 86400000;
int nsec=ms/1000;
int ntr=m_TRperiod;
int j=(nsec % (n*ntr))/ntr + 1;
m_WSPR_tx_next=(i==j);
return;
}
m_WSPR_tx_next = false; m_WSPR_tx_next = false;
if (m_config.is_transceiver_online () // need working rig control for hopping if (m_config.is_transceiver_online () // need working rig control for hopping
&& !m_config.is_dummy_rig () && !m_config.is_dummy_rig ()

View File

@ -316,6 +316,7 @@ private slots:
void not_GA_warning_message (); void not_GA_warning_message ();
void checkMSK144ContestType(); void checkMSK144ContestType();
void on_pbBestSP_clicked(); void on_pbBestSP_clicked();
void on_RoundRobin_currentTextChanged(QString text);
int setTxMsg(int n); int setTxMsg(int n);
bool stdCall(QString const& w); bool stdCall(QString const& w);
void remote_configure (QString const& mode, quint32 frequency_tolerance, QString const& submode void remote_configure (QString const& mode, quint32 frequency_tolerance, QString const& submode

View File

@ -2631,6 +2631,46 @@ list. The list can be maintained in Settings (F2).</string>
</layout> </layout>
</widget> </widget>
</item> </item>
<item>
<widget class="QComboBox" name="RoundRobin">
<property name="editable">
<bool>true</bool>
</property>
<property name="currentIndex">
<number>0</number>
</property>
<item>
<property name="text">
<string>Random</string>
</property>
</item>
<item>
<property name="text">
<string>1/2</string>
</property>
</item>
<item>
<property name="text">
<string>2/2</string>
</property>
</item>
<item>
<property name="text">
<string>1/3</string>
</property>
</item>
<item>
<property name="text">
<string>2/3</string>
</property>
</item>
<item>
<property name="text">
<string>3/3</string>
</property>
</item>
</widget>
</item>
</layout> </layout>
</item> </item>
<item> <item>
@ -2660,7 +2700,7 @@ list. The list can be maintained in Settings (F2).</string>
<string>6 digit locators cause 2 different messages to be sent, the second contains the full locator but only a hashed callsign, other stations must have decoded the first once before they can decode your call in the second. Check this option to only send 4 digit locators if it will avoid the two message protocol.</string> <string>6 digit locators cause 2 different messages to be sent, the second contains the full locator but only a hashed callsign, other stations must have decoded the first once before they can decode your call in the second. Check this option to only send 4 digit locators if it will avoid the two message protocol.</string>
</property> </property>
<property name="text"> <property name="text">
<string>Prefer type 1 messages</string> <string>Prefer Type 1 messages</string>
</property> </property>
<property name="checked"> <property name="checked">
<bool>true</bool> <bool>true</bool>
@ -2876,7 +2916,6 @@ list. The list can be maintained in Settings (F2).</string>
<addaction name="actionMSK144"/> <addaction name="actionMSK144"/>
<addaction name="separator"/> <addaction name="separator"/>
<addaction name="actionWSPR"/> <addaction name="actionWSPR"/>
<addaction name="actionWSPR_LF"/>
<addaction name="separator"/> <addaction name="separator"/>
<addaction name="actionEcho"/> <addaction name="actionEcho"/>
<addaction name="separator"/> <addaction name="separator"/>

View File

@ -697,7 +697,7 @@ int CPlotter::rxFreq() {return m_rxFreq;} //rxFreq
void CPlotter::mouseReleaseEvent (QMouseEvent * event) void CPlotter::mouseReleaseEvent (QMouseEvent * event)
{ {
if (Qt::LeftButton == event->button ()) { if (Qt::LeftButton == event->button () and m_mode!="FST240W") {
int x=event->x(); int x=event->x();
if(x<0) x=0; if(x<0) x=0;
if(x>m_Size.width()) x=m_Size.width(); if(x>m_Size.width()) x=m_Size.width();