mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2025-08-02 22:22:33 -04:00
WIP on SuperFox transmit capability.
This commit is contained in:
parent
ed248eb702
commit
05dd89c552
@ -430,6 +430,7 @@ set (wsjt_FSRCS
|
|||||||
lib/ft8/foxgen.f90
|
lib/ft8/foxgen.f90
|
||||||
lib/superfox/foxgen2.f90
|
lib/superfox/foxgen2.f90
|
||||||
lib/superfox/sfox_assemble.f90
|
lib/superfox/sfox_assemble.f90
|
||||||
|
lib/superfox/sfox_wave.f90
|
||||||
lib/ft8/foxgen_wrap.f90
|
lib/ft8/foxgen_wrap.f90
|
||||||
lib/freqcal.f90
|
lib/freqcal.f90
|
||||||
lib/ft8/ft8apset.f90
|
lib/ft8/ft8apset.f90
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
subroutine foxgen(bSuperFox,cmnd)
|
subroutine foxgen(bSuperFox,data_dir)
|
||||||
|
|
||||||
! Called from MainWindow::foxTxSequencer() to generate the Tx waveform in
|
! Called from MainWindow::foxTxSequencer() to generate the Tx waveform in
|
||||||
! FT8 Fox mode. The Tx message can contain up to 5 "slots", each carrying
|
! FT8 Fox mode. The Tx message can contain up to 5 "slots", each carrying
|
||||||
@ -18,7 +18,7 @@ subroutine foxgen(bSuperFox,cmnd)
|
|||||||
parameter (NWAVE=(160+2)*134400*4) !the biggest waveform we generate (FST4-1800 at 48kHz)
|
parameter (NWAVE=(160+2)*134400*4) !the biggest waveform we generate (FST4-1800 at 48kHz)
|
||||||
parameter (NFFT=614400,NH=NFFT/2)
|
parameter (NFFT=614400,NH=NFFT/2)
|
||||||
logical*1 bSuperFox
|
logical*1 bSuperFox
|
||||||
character*120 cmnd
|
character*(*) data_dir
|
||||||
character*40 cmsg
|
character*40 cmsg
|
||||||
character*37 msg,msgsent
|
character*37 msg,msgsent
|
||||||
integer itone(79)
|
integer itone(79)
|
||||||
@ -32,7 +32,10 @@ subroutine foxgen(bSuperFox,cmnd)
|
|||||||
equivalence (x,cx),(y,cy)
|
equivalence (x,cx),(y,cy)
|
||||||
|
|
||||||
if(bSuperFox) then
|
if(bSuperFox) then
|
||||||
call foxgen2(nslots,cmsg,cmnd)
|
! call foxgen2(nslots,cmsg,cmnd)
|
||||||
|
open(25,file=data_dir,status='unknown')
|
||||||
|
write(25,'(a40)') cmsg(1:nslots)
|
||||||
|
close(25)
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
@ -1,9 +1,23 @@
|
|||||||
program sfox_tx
|
program sfox_tx
|
||||||
|
|
||||||
character*120 line
|
character*120 fname
|
||||||
|
character*40 cmsg(5)
|
||||||
|
integer itone(151)
|
||||||
|
|
||||||
|
call getarg(1,fname)
|
||||||
|
open(25,file=trim(fname),status='unknown')
|
||||||
|
do i=1,5
|
||||||
|
read(25,1000,end=10) cmsg(i)
|
||||||
|
1000 format(a40)
|
||||||
|
! write(*,1000) cmsg(i)
|
||||||
|
enddo
|
||||||
|
|
||||||
|
10 rewind(25)
|
||||||
|
do i=1,151
|
||||||
|
itone(i)=i-1
|
||||||
|
enddo
|
||||||
|
write(25,1100) itone
|
||||||
|
1100 format(20i4)
|
||||||
|
close(25)
|
||||||
|
|
||||||
call getarg(1,line)
|
|
||||||
write(*,1000) trim(line)
|
|
||||||
1000 format(a)
|
|
||||||
|
|
||||||
end program sfox_tx
|
end program sfox_tx
|
||||||
|
35
lib/superfox/sfox_wave.f90
Normal file
35
lib/superfox/sfox_wave.f90
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
subroutine sfox_wave(fname)
|
||||||
|
|
||||||
|
parameter (NWAVE=(160+2)*134400*4) !Max WSJT-X waveform (FST4-1800 at 48kHz)
|
||||||
|
parameter (NN=151,NSPS=1024)
|
||||||
|
character*(*) fname
|
||||||
|
integer itone(151)
|
||||||
|
real*8 dt,twopi,f0,baud,phi,dphi
|
||||||
|
|
||||||
|
common/foxcom/wave(NWAVE)
|
||||||
|
|
||||||
|
open(25,file=trim(fname),status='unknown')
|
||||||
|
read(25,'(20i4)') itone
|
||||||
|
close(25)
|
||||||
|
|
||||||
|
! Generate the SuperFox waveform.
|
||||||
|
|
||||||
|
dt=1.d0/48000.d0
|
||||||
|
twopi=8.d0*atan(1.d0)
|
||||||
|
f0=750.0d0
|
||||||
|
phi=0.d0
|
||||||
|
baud=12000.d0/NSPS
|
||||||
|
k=0
|
||||||
|
do j=1,NN
|
||||||
|
f=f0 + baud*itone(j)
|
||||||
|
dphi=twopi*f*dt
|
||||||
|
do ii=1,NSPS
|
||||||
|
k=k+1
|
||||||
|
phi=phi+dphi
|
||||||
|
xphi=phi
|
||||||
|
wave(k)=wave(k)+sin(xphi)
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
|
||||||
|
return
|
||||||
|
end subroutine sfox_wave
|
@ -176,7 +176,9 @@ extern "C" {
|
|||||||
void calibrate_(char const * data_dir, int* iz, double* a, double* b, double* rms,
|
void calibrate_(char const * data_dir, int* iz, double* a, double* b, double* rms,
|
||||||
double* sigmaa, double* sigmab, int* irc, fortran_charlen_t);
|
double* sigmaa, double* sigmab, int* irc, fortran_charlen_t);
|
||||||
|
|
||||||
void foxgen_(bool* bSuperFox, char* cmnd, fortran_charlen_t);
|
void foxgen_(bool* bSuperFox, char const * fname, FCL len);
|
||||||
|
|
||||||
|
void sfox_wave_(char const * fname, FCL len);
|
||||||
|
|
||||||
void plotsave_(float swide[], int* m_w , int* m_h1, int* irow);
|
void plotsave_(float swide[], int* m_w , int* m_h1, int* irow);
|
||||||
|
|
||||||
@ -4824,12 +4826,9 @@ void MainWindow::guiUpdate()
|
|||||||
QString foxCall=m_config.my_callsign() + " ";
|
QString foxCall=m_config.my_callsign() + " ";
|
||||||
::memcpy(foxcom_.mycall, foxCall.toLatin1(), sizeof foxcom_.mycall); //Copy Fox callsign into foxcom_
|
::memcpy(foxcom_.mycall, foxCall.toLatin1(), sizeof foxcom_.mycall); //Copy Fox callsign into foxcom_
|
||||||
bool bSuperFox=m_config.superFox();
|
bool bSuperFox=m_config.superFox();
|
||||||
char cmnd[120];
|
auto fname {QDir::toNativeSeparators(m_config.writeable_data_dir().absoluteFilePath("sfox.dat")).toLocal8Bit()};
|
||||||
foxgen_(&bSuperFox, cmnd, 120);
|
foxgen_(&bSuperFox, fname.constData(), (FCL)fname.size());
|
||||||
if(bSuperFox) {
|
if(bSuperFox) sfox_tx();
|
||||||
QString t=QString::fromLatin1(cmnd).trimmed();
|
|
||||||
sfox_tx(t);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -10304,13 +10303,9 @@ Transmit:
|
|||||||
QString foxCall=m_config.my_callsign() + " ";
|
QString foxCall=m_config.my_callsign() + " ";
|
||||||
::memcpy(foxcom_.mycall, foxCall.toLatin1(),sizeof foxcom_.mycall); //Copy Fox callsign into foxcom_
|
::memcpy(foxcom_.mycall, foxCall.toLatin1(),sizeof foxcom_.mycall); //Copy Fox callsign into foxcom_
|
||||||
bool bSuperFox=m_config.superFox();
|
bool bSuperFox=m_config.superFox();
|
||||||
// qDebug() << "bb" << foxcom_.nslots << foxcom_.mycall << foxcom_.cmsg[0];
|
auto fname {QDir::toNativeSeparators(m_config.writeable_data_dir().absoluteFilePath("sfox.dat")).toLocal8Bit()};
|
||||||
char cmnd[120];
|
foxgen_(&bSuperFox, fname.constData(), (FCL)fname.size());
|
||||||
foxgen_(&bSuperFox, cmnd, 120);
|
if(bSuperFox) sfox_tx();
|
||||||
if(bSuperFox) {
|
|
||||||
QString t=QString::fromLatin1(cmnd).trimmed();
|
|
||||||
sfox_tx(t);
|
|
||||||
}
|
|
||||||
m_tFoxTxSinceCQ++;
|
m_tFoxTxSinceCQ++;
|
||||||
|
|
||||||
for(QString hc: m_foxQSO.keys()) { //Check for strikeout or timeout
|
for(QString hc: m_foxQSO.keys()) { //Check for strikeout or timeout
|
||||||
@ -10886,30 +10881,12 @@ void MainWindow::on_jt65Button_clicked()
|
|||||||
on_actionJT65_triggered();
|
on_actionJT65_triggered();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::sfox_tx(QString t)
|
void MainWindow::sfox_tx()
|
||||||
{
|
{
|
||||||
// qint64 ms0 = QDateTime::currentMSecsSinceEpoch();
|
// qint64 ms0 = QDateTime::currentMSecsSinceEpoch();
|
||||||
p2.start("sfox_tx", QStringList {t});
|
auto fname {QDir::toNativeSeparators(m_config.writeable_data_dir().absoluteFilePath("sfox.dat")).toLocal8Bit()};
|
||||||
|
p2.start("sfox_tx", QStringList {fname});
|
||||||
p2.waitForFinished();
|
p2.waitForFinished();
|
||||||
QString t2=p2.readAllStandardOutput();
|
sfox_wave_(fname.constData(), (FCL)fname.size());
|
||||||
t2=t2.left(t2.length()-2);
|
// qDebug() << "cc" << QDateTime::currentMSecsSinceEpoch() - ms0;
|
||||||
// qDebug() << "aa" << QDateTime::currentMSecsSinceEpoch() - ms0 << t2;
|
|
||||||
// qDebug() << "aa" << t2;
|
|
||||||
p4.start("sfox_tx2",QStringList {""});
|
|
||||||
p4.waitForStarted();
|
|
||||||
QString t0;
|
|
||||||
for(int i=0; i<foxcom_.nslots; i++) {
|
|
||||||
foxcom_.cmsg[i][39]=0;
|
|
||||||
t0=t0.asprintf("%s\n",foxcom_.cmsg[i]).trimmed();
|
|
||||||
// qDebug() << i << t0;
|
|
||||||
p4.write(t0.toLatin1());
|
|
||||||
}
|
|
||||||
p4.closeWriteChannel();
|
|
||||||
p4.waitForFinished();
|
|
||||||
QString t4;
|
|
||||||
t4=p4.readAllStandardOutput();
|
|
||||||
// for(int i=0; i<foxcom_.nslots; i++) {
|
|
||||||
// t4=p4.readLine();
|
|
||||||
// t4=t4.left(t2.length()-2);
|
|
||||||
qDebug() << "bb" << t4;
|
|
||||||
}
|
}
|
||||||
|
@ -379,7 +379,7 @@ private:
|
|||||||
bool elide_tx1_not_allowed () const;
|
bool elide_tx1_not_allowed () const;
|
||||||
void readWidebandDecodes();
|
void readWidebandDecodes();
|
||||||
void configActiveStations();
|
void configActiveStations();
|
||||||
void sfox_tx(QString t);
|
void sfox_tx();
|
||||||
|
|
||||||
QProcessEnvironment const& m_env;
|
QProcessEnvironment const& m_env;
|
||||||
NetworkAccessManager m_network_manager;
|
NetworkAccessManager m_network_manager;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user