mirror of https://github.com/saitohirga/WSJT-X.git
Now able to generate 72-bit or 77-bit messages.
This commit is contained in:
parent
dba85595bd
commit
c5d61f4cf4
|
@ -547,6 +547,7 @@ set (wsjt_FSRCS
|
||||||
lib/ft8/osd174_91.f90
|
lib/ft8/osd174_91.f90
|
||||||
lib/fsk4hf/osd300.f90
|
lib/fsk4hf/osd300.f90
|
||||||
lib/fsk4hf/osd204.f90
|
lib/fsk4hf/osd204.f90
|
||||||
|
lib/77bit/parse77.f90
|
||||||
lib/pctile.f90
|
lib/pctile.f90
|
||||||
lib/peakdt9.f90
|
lib/peakdt9.f90
|
||||||
lib/peakup.f90
|
lib/peakup.f90
|
||||||
|
|
|
@ -20,8 +20,8 @@ i3 n3 isync Operating activity, Message Type
|
||||||
A. Required GUI Additions (after July 3):
|
A. Required GUI Additions (after July 3):
|
||||||
|
|
||||||
1. Entry widgets for fixed parts of contest exchanges: comboBoxes
|
1. Entry widgets for fixed parts of contest exchanges: comboBoxes
|
||||||
for ARRL section, US State/Canadian Province, Field Day
|
for ARRL section, US State/Canadian Province, number of
|
||||||
#transmitters and Class.
|
transmitters and entry Class for Field Day.
|
||||||
|
|
||||||
2. Spinner control for serial numbers: used for EU_VHF_Contest,
|
2. Spinner control for serial numbers: used for EU_VHF_Contest,
|
||||||
and for DX stations in RTTYroundup.
|
and for DX stations in RTTYroundup.
|
||||||
|
@ -41,7 +41,7 @@ C. Code just before calling genft8_():
|
||||||
3. if msg is not an old-style standard msg, see if it's valid
|
3. if msg is not an old-style standard msg, see if it's valid
|
||||||
as a 77-bit msg
|
as a 77-bit msg
|
||||||
4. if NO: transmit as Free Text
|
4. if NO: transmit as Free Text
|
||||||
if YES: set i3 and n3 accordingly
|
if YES: set i3, n3, and isync=2
|
||||||
|
|
||||||
D. Auto-sequencer code
|
D. Auto-sequencer code
|
||||||
|
|
||||||
|
|
|
@ -63,3 +63,8 @@ W9XYZ K1ABC -11
|
||||||
K1ABC W9XYZ R-09
|
K1ABC W9XYZ R-09
|
||||||
W9XYZ <PJ4/K1ABC> RRR
|
W9XYZ <PJ4/K1ABC> RRR
|
||||||
<PJ4/K1ABC> W9XYZ 73
|
<PJ4/K1ABC> W9XYZ 73
|
||||||
|
9. Other stuff
|
||||||
|
-----------------------------------------------------------
|
||||||
|
TNX BOB 73 GL
|
||||||
|
free text msg
|
||||||
|
123456789ABCD
|
||||||
|
|
|
@ -959,6 +959,7 @@ subroutine pack77_3(nwords,w,i3,n3,c77)
|
||||||
if(trim(w(1)).eq.'TU;') i1=2
|
if(trim(w(1)).eq.'TU;') i1=2
|
||||||
call chkcall(w(i1),bcall_1,ok1)
|
call chkcall(w(i1),bcall_1,ok1)
|
||||||
call chkcall(w(i1+1),bcall_2,ok2)
|
call chkcall(w(i1+1),bcall_2,ok2)
|
||||||
|
if(.not.ok1 .or. .not.ok2) go to 900
|
||||||
crpt=w(nwords-1)(1:3)
|
crpt=w(nwords-1)(1:3)
|
||||||
if(crpt(1:1).eq.'5' .and. crpt(2:2).ge.'2' .and. crpt(2:2).le.'9' .and. &
|
if(crpt(1:1).eq.'5' .and. crpt(2:2).ge.'2' .and. crpt(2:2).le.'9' .and. &
|
||||||
crpt(3:3).eq.'9') then
|
crpt(3:3).eq.'9') then
|
||||||
|
@ -999,7 +1000,7 @@ subroutine pack77_3(nwords,w,i3,n3,c77)
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
return
|
900 return
|
||||||
end subroutine pack77_3
|
end subroutine pack77_3
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
subroutine parse77(msg,i3,n3)
|
||||||
|
|
||||||
|
use packjt77
|
||||||
|
character msg*37,c77*77
|
||||||
|
call pack77(msg,i3,n3,c77)
|
||||||
|
|
||||||
|
return
|
||||||
|
end subroutine parse77
|
|
@ -75,12 +75,13 @@ extern "C" {
|
||||||
float s[], int* jh, float *pxmax, float *rmsNoGain, char line[], char mygrid[],
|
float s[], int* jh, float *pxmax, float *rmsNoGain, char line[], char mygrid[],
|
||||||
fortran_charlen_t, fortran_charlen_t, fortran_charlen_t, fortran_charlen_t,
|
fortran_charlen_t, fortran_charlen_t, fortran_charlen_t, fortran_charlen_t,
|
||||||
fortran_charlen_t);
|
fortran_charlen_t);
|
||||||
// float s[], int* jh, char line[], char mygrid[],
|
|
||||||
|
|
||||||
void genft8_(char* msg, char* MyGrid, bool* bcontest, int* i3, int* n3, int* isync, char* msgsent,
|
void genft8_(char* msg, char* MyGrid, bool* bcontest, int* i3, int* n3, int* isync, char* msgsent,
|
||||||
char ft8msgbits[], int itone[], fortran_charlen_t, fortran_charlen_t,
|
char ft8msgbits[], int itone[], fortran_charlen_t, fortran_charlen_t,
|
||||||
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[],
|
void gen4_(char* msg, int* ichk, char* msgsent, int itone[],
|
||||||
int* itext, fortran_charlen_t, fortran_charlen_t);
|
int* itext, fortran_charlen_t, fortran_charlen_t);
|
||||||
|
|
||||||
|
@ -163,7 +164,7 @@ QVector<QColor> g_ColorTbl;
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
Radio::Frequency constexpr default_frequency {14076000};
|
Radio::Frequency constexpr default_frequency {14076000};
|
||||||
QRegExp message_alphabet {"[- @A-Za-z0-9+./?#<>]*"};
|
QRegExp message_alphabet {"[- @A-Za-z0-9+./?#<>;]*"};
|
||||||
// grid exact match excluding RR73
|
// grid exact match excluding RR73
|
||||||
QRegularExpression grid_regexp {"\\A(?![Rr]{2}73)[A-Ra-r]{2}[0-9]{2}([A-Xa-x]{2}){0,1}\\z"};
|
QRegularExpression grid_regexp {"\\A(?![Rr]{2}73)[A-Ra-r]{2}[0-9]{2}([A-Xa-x]{2}){0,1}\\z"};
|
||||||
|
|
||||||
|
@ -3187,8 +3188,8 @@ void MainWindow::decodeBusy(bool b) //decodeBusy()
|
||||||
//------------------------------------------------------------- //guiUpdate()
|
//------------------------------------------------------------- //guiUpdate()
|
||||||
void MainWindow::guiUpdate()
|
void MainWindow::guiUpdate()
|
||||||
{
|
{
|
||||||
static char message[29];
|
static char message[38];
|
||||||
static char msgsent[29];
|
static char msgsent[38];
|
||||||
double txDuration;
|
double txDuration;
|
||||||
QString rt;
|
QString rt;
|
||||||
|
|
||||||
|
@ -3481,19 +3482,29 @@ void MainWindow::guiUpdate()
|
||||||
if(m_config.bFox() and ui->tabWidget->currentIndex()==2) {
|
if(m_config.bFox() and ui->tabWidget->currentIndex()==2) {
|
||||||
foxTxSequencer();
|
foxTxSequencer();
|
||||||
} else {
|
} else {
|
||||||
m_i3=0; // Temporary!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
parse77_(message, &m_i3, &m_n3, 37);
|
||||||
m_n3=0;
|
int ichk=1,itype=-1;
|
||||||
|
gen65_(message,&ichk,msgsent,const_cast<int *>(itone),&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;
|
m_isync=1;
|
||||||
// if(m_config.bGenerate77()) m_isync=2;
|
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;
|
||||||
|
qDebug() << "itype=" << itype << "i3, n3:"<< m_i3 << m_n3 << "isync="<< m_isync << ui->tx6->text();
|
||||||
char ft8msgbits[75 + 12]; //packed 75 bit ft8 message plus 12-bit CRC
|
char ft8msgbits[75 + 12]; //packed 75 bit ft8 message plus 12-bit CRC
|
||||||
// TEMPORARY - for now, just copy 22-bit message to 37-bit messageft8
|
genft8_(message, MyGrid, &bcontest, &m_i3, &m_n3, &m_isync, msgsent,
|
||||||
char messageft8[38];
|
|
||||||
char msgsentft8[38]; // Only need to send the first 37 chars to Fortran, right?
|
|
||||||
strncpy(&messageft8[0],&message[0],22);
|
|
||||||
genft8_(messageft8, MyGrid, &bcontest, &m_i3, &m_n3, &m_isync, msgsentft8,
|
|
||||||
const_cast<char *> (ft8msgbits), const_cast<int *> (itone), 37, 6, 37);
|
const_cast<char *> (ft8msgbits), const_cast<int *> (itone), 37, 6, 37);
|
||||||
strncpy(&msgsent[0],&msgsentft8[0],22);
|
|
||||||
if(m_config.bFox()) {
|
if(m_config.bFox()) {
|
||||||
|
//Fox must generate the full Tx waveform, not just an itone[] array.
|
||||||
QString fm = QString::fromStdString(message).trimmed();
|
QString fm = QString::fromStdString(message).trimmed();
|
||||||
foxGenWaveform(0,fm);
|
foxGenWaveform(0,fm);
|
||||||
foxcom_.nslots=1;
|
foxcom_.nslots=1;
|
||||||
|
@ -3506,7 +3517,8 @@ void MainWindow::guiUpdate()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
msgsent[22]=0;
|
if(m_isync==1) msgsent[22]=0;
|
||||||
|
if(m_isync==2) msgsent[37]=0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3611,9 +3623,6 @@ void MainWindow::guiUpdate()
|
||||||
m_QSOProgress = CALLING;
|
m_QSOProgress = CALLING;
|
||||||
m_gen_message_is_cq = true;
|
m_gen_message_is_cq = true;
|
||||||
ui->rbGenMsg->setChecked(true);
|
ui->rbGenMsg->setChecked(true);
|
||||||
} else {
|
|
||||||
//JHT 11/29/2015 m_ntx=6;
|
|
||||||
// ui->txrb6->setChecked(true);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3834,14 +3843,14 @@ void MainWindow::stopTx2()
|
||||||
void MainWindow::ba2msg(QByteArray ba, char message[]) //ba2msg()
|
void MainWindow::ba2msg(QByteArray ba, char message[]) //ba2msg()
|
||||||
{
|
{
|
||||||
int iz=ba.length();
|
int iz=ba.length();
|
||||||
for(int i=0;i<28; i++) {
|
for(int i=0; i<37; i++) {
|
||||||
if(i<iz) {
|
if(i<iz) {
|
||||||
message[i]=ba[i];
|
message[i]=ba[i];
|
||||||
} else {
|
} else {
|
||||||
message[i]=32;
|
message[i]=32;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
message[28]=0;
|
message[37]=0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::on_txFirstCheckBox_stateChanged(int nstate) //TxFirst
|
void MainWindow::on_txFirstCheckBox_stateChanged(int nstate) //TxFirst
|
||||||
|
@ -4804,14 +4813,14 @@ void MainWindow::on_addButton_clicked() //Add button
|
||||||
|
|
||||||
void MainWindow::msgtype(QString t, QLineEdit* tx) //msgtype()
|
void MainWindow::msgtype(QString t, QLineEdit* tx) //msgtype()
|
||||||
{
|
{
|
||||||
char message[29];
|
// Set background colors of the Tx message boxes, depending on message type
|
||||||
char msgsent[29];
|
char message[38];
|
||||||
|
char msgsent[38];
|
||||||
int itone0[NUM_ISCAT_SYMBOLS]; //Dummy array, data not used
|
int itone0[NUM_ISCAT_SYMBOLS]; //Dummy array, data not used
|
||||||
int len1=22;
|
|
||||||
QByteArray s=t.toUpper().toLocal8Bit();
|
QByteArray s=t.toUpper().toLocal8Bit();
|
||||||
ba2msg(s,message);
|
ba2msg(s,message);
|
||||||
int ichk=1,itype=0;
|
int ichk=1,itype=0;
|
||||||
gen65_(message,&ichk,msgsent,itone0,&itype,len1,len1);
|
gen65_(message,&ichk,msgsent,itone0,&itype,22,22);
|
||||||
msgsent[22]=0;
|
msgsent[22]=0;
|
||||||
bool text=false;
|
bool text=false;
|
||||||
bool shortMsg=false;
|
bool shortMsg=false;
|
||||||
|
|
Loading…
Reference in New Issue