mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-26 02:20:20 -04:00 
			
		
		
		
	Many changes toward GUI support for JT65B2 and JT65C2 sub-modes.
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/map65@2547 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
		
							parent
							
								
									025a4a3473
								
							
						
					
					
						commit
						fce75f9d07
					
				| @ -6,9 +6,9 @@ | ||||
| 
 | ||||
| extern qint16 id[4*60*96000]; | ||||
| 
 | ||||
| void getfile(QString fname, bool xpol, int dbDgrd) | ||||
| void getfile(QString fname, bool xpol, int dbDgrd, int nfast) | ||||
| { | ||||
|   int npts=2*52*96000; | ||||
|   int npts=2*52*96000/nfast; | ||||
|   if(xpol) npts=2*npts; | ||||
| 
 | ||||
| // Degrade S/N by dbDgrd dB -- for tests only!!
 | ||||
| @ -52,9 +52,9 @@ void getfile(QString fname, bool xpol, int dbDgrd) | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| void savetf2(QString fname, bool xpol) | ||||
| void savetf2(QString fname, bool xpol, int nfast) | ||||
| { | ||||
|   int npts=2*52*96000; | ||||
|   int npts=2*52*96000/nfast; | ||||
|   if(xpol) npts=2*npts; | ||||
| 
 | ||||
|   qint16* buf=(qint16*)malloc(2*npts); | ||||
|  | ||||
| @ -5,8 +5,8 @@ | ||||
| #include <QDebug> | ||||
| #include "commons.h" | ||||
| 
 | ||||
| void getfile(QString fname, bool xpol, int dbDgrd); | ||||
| void savetf2(QString fname, bool xpol); | ||||
| void getfile(QString fname, bool xpol, int dbDgrd, int nfast); | ||||
| void savetf2(QString fname, bool xpol, int nfast); | ||||
| float gran(); | ||||
| 
 | ||||
| #endif // GETFILE_H
 | ||||
|  | ||||
| @ -53,6 +53,7 @@ program mapsim | ||||
|   if(mode(1:1).eq.'C') mode65=4 | ||||
|   nfast=1 | ||||
|   if(mode(2:2).eq.'2') nfast=2 | ||||
|   npts=NMAX/nfast | ||||
|   open(12,file='msgs.txt',status='old') | ||||
| 
 | ||||
|   write(*,1000) | ||||
| @ -67,7 +68,7 @@ program mapsim | ||||
|      open(10,file=fname//'.iq',access='stream',status='unknown') | ||||
|      open(11,file=fname//'.tf2',access='stream',status='unknown') | ||||
| 
 | ||||
|      call noisegen(d4,NMAX)                      !Generate Gaussuian noise | ||||
|      call noisegen(d4,npts)                      !Generate Gaussuian noise | ||||
| 
 | ||||
|      if(msg0.ne.'                      ') then | ||||
|         call cgen65(message,mode65,nfast,samfac,nsendingsh,msgsent,cwave,nwave) | ||||
| @ -113,7 +114,7 @@ program mapsim | ||||
|         enddo | ||||
|      enddo | ||||
| 
 | ||||
|      do i=1,NMAX | ||||
|      do i=1,npts | ||||
|         id4(1,i)=nint(rms*d4(1,i)) | ||||
|         id4(2,i)=nint(rms*d4(2,i)) | ||||
|         id4(3,i)=nint(rms*d4(3,i)) | ||||
| @ -122,8 +123,8 @@ program mapsim | ||||
|         id2(2,i)=id4(2,i) | ||||
|      enddo | ||||
| 
 | ||||
|      write(10) fcenter,id2 | ||||
|      write(11) fcenter,id4 | ||||
|      write(10) fcenter,id2(1:2,1:npts) | ||||
|      write(11) fcenter,id4(1:4,1:npts) | ||||
|      close(10) | ||||
|      close(11) | ||||
|   enddo | ||||
|  | ||||
| @ -57,6 +57,8 @@ MainWindow::MainWindow(QWidget *parent) : | ||||
|   ui->actionJT65A->setActionGroup(modeGroup); | ||||
|   ui->actionJT65B->setActionGroup(modeGroup); | ||||
|   ui->actionJT65C->setActionGroup(modeGroup); | ||||
|   ui->actionJT65B2->setActionGroup(modeGroup); | ||||
|   ui->actionJT65C2->setActionGroup(modeGroup); | ||||
| 
 | ||||
|   QActionGroup* saveGroup = new QActionGroup(this); | ||||
|   ui->actionSave_all->setActionGroup(saveGroup); | ||||
| @ -199,6 +201,8 @@ MainWindow::MainWindow(QWidget *parent) : | ||||
|   if(m_mode=="JT65A") on_actionJT65A_triggered(); | ||||
|   if(m_mode=="JT65B") on_actionJT65B_triggered(); | ||||
|   if(m_mode=="JT65C") on_actionJT65C_triggered(); | ||||
|   if(m_mode=="JT65B2") on_actionJT65B2_triggered(); | ||||
|   if(m_mode=="JT65C2") on_actionJT65C2_triggered(); | ||||
| 
 | ||||
|   future1 = new QFuture<void>; | ||||
|   watcher1 = new QFutureWatcher<void>; | ||||
| @ -461,7 +465,7 @@ void MainWindow::dataSink(int k) | ||||
|   static int n=0; | ||||
|   static int ihsym=0; | ||||
|   static int nzap=0; | ||||
|   static int n60z=0; | ||||
|   static int ntrz=0; | ||||
|   static int nkhz; | ||||
|   static int nfsample=96000; | ||||
|   static int nxpol=0; | ||||
| @ -536,27 +540,34 @@ void MainWindow::dataSink(int k) | ||||
| 
 | ||||
| // Time according to this computer
 | ||||
|     qint64 ms = QDateTime::currentMSecsSinceEpoch() % 86400000; | ||||
|     int n60 = (ms/1000) % 60; | ||||
|     if((m_diskData && ihsym <= m_waterfallAvg) || (!m_diskData && n60<n60z)) { | ||||
|     int ntr = (ms/1000) % m_TRperiod; | ||||
|     if((m_diskData && ihsym <= m_waterfallAvg) || (!m_diskData && ntr<ntrz)) { | ||||
|       for (int i=0; i<NFFT; i++) { | ||||
|         splot[i] = 1.e30; | ||||
|       } | ||||
|     } | ||||
|     n60z=n60; | ||||
|     ntrz=ntr; | ||||
|     n=0; | ||||
|   } | ||||
|   if(ihsym == 279) { | ||||
|   if(ihsym == 279/m_nfast) { | ||||
|     datcom_.newdat=1; | ||||
|     datcom_.nagain=0; | ||||
|     QDateTime t = QDateTime::currentDateTimeUtc(); | ||||
|     m_dateTime=t.toString("yyyy-MMM-dd hh:mm"); | ||||
|     decode();                                           //Start the decoder
 | ||||
|     if(m_saveAll) { | ||||
|     if(m_saveAll and !m_diskData) { | ||||
|       QString fname=m_saveDir + "/" + t.date().toString("yyMMdd") + "_" + | ||||
|           t.time().toString("hhmm"); | ||||
|       if(m_nfast==2) { | ||||
|         if(t.time().second() < 30) { | ||||
|           fname += "00"; | ||||
|         } else { | ||||
|           fname += "30"; | ||||
|         } | ||||
|       } | ||||
|       if(m_xpol) fname += ".tf2"; | ||||
|       if(!m_xpol) fname += ".iq"; | ||||
|       *future2 = QtConcurrent::run(savetf2, fname, m_xpol); | ||||
|       *future2 = QtConcurrent::run(savetf2, fname, m_xpol, m_nfast); | ||||
|       watcher2->setFuture(*future2); | ||||
|     } | ||||
|   } | ||||
| @ -970,7 +981,7 @@ void MainWindow::on_actionOpen_triggered()                     //Open File | ||||
|     m_diskData=true; | ||||
|     int dbDgrd=0; | ||||
|     if(m_myCall=="K1JT" and m_idInt<0) dbDgrd=m_idInt; | ||||
|     *future1 = QtConcurrent::run(getfile, fname, m_xpol, dbDgrd); | ||||
|     *future1 = QtConcurrent::run(getfile, fname, m_xpol, dbDgrd, m_nfast); | ||||
|     watcher1->setFuture(*future1); | ||||
|   } | ||||
| } | ||||
| @ -1005,7 +1016,7 @@ void MainWindow::on_actionOpen_next_in_directory_triggered()   //Open Next | ||||
|       m_diskData=true; | ||||
|       int dbDgrd=0; | ||||
|       if(m_myCall=="K1JT" and m_idInt<0) dbDgrd=m_idInt; | ||||
|       *future1 = QtConcurrent::run(getfile, fname, m_xpol, dbDgrd); | ||||
|       *future1 = QtConcurrent::run(getfile, fname, m_xpol, dbDgrd, m_nfast); | ||||
|       watcher1->setFuture(*future1); | ||||
|       return; | ||||
|     } | ||||
| @ -1027,7 +1038,7 @@ void MainWindow::diskDat()                                   //diskDat() | ||||
| 
 | ||||
|   if(m_fs96000) hsym=2048.0*96000.0/11025.0;   //Samples per JT65 half-symbol
 | ||||
|   if(!m_fs96000) hsym=2048.0*95238.1/11025.0; | ||||
|   for(int i=0; i<281; i++) {              // Do the half-symbol FFTs
 | ||||
|   for(int i=0; i<282/m_nfast; i++) {           // Do the half-symbol FFTs
 | ||||
|     int k = i*hsym + 2048.5; | ||||
|     dataSink(k); | ||||
|     if(i%10 == 0) qApp->processEvents();       //Keep the GUI responsive
 | ||||
| @ -1133,8 +1144,11 @@ void MainWindow::on_actionAvailable_suffixes_and_add_on_prefixes_triggered() | ||||
| 
 | ||||
| void MainWindow::on_DecodeButton_clicked()                    //Decode request
 | ||||
| { | ||||
|   int n=m_sec0%60; | ||||
|   int n=m_sec0%m_TRperiod; | ||||
|   if(m_nfast==1) { | ||||
|     if(m_monitoring and n>47 and (n<52 or m_decoderBusy)) return; | ||||
|   } else { | ||||
|     if(m_monitoring and n>21 and (n<26 or m_decoderBusy)) return;  } | ||||
|   if(!m_decoderBusy) { | ||||
|     datcom_.newdat=0; | ||||
|     datcom_.nagain=1; | ||||
| @ -1343,8 +1357,8 @@ void MainWindow::guiUpdate() | ||||
|   double tx2=126.0*4096.0/11025.0 + 1.8;          //### depend on TxDelay? ###
 | ||||
| 
 | ||||
|   if(!m_txFirst) { | ||||
|     tx1 += 60.0; | ||||
|     tx2 += 60.0; | ||||
|     tx1 += m_TRperiod; | ||||
|     tx2 += m_TRperiod; | ||||
|   } | ||||
|   qint64 ms = QDateTime::currentMSecsSinceEpoch() % 86400000; | ||||
|   int nsec=ms/1000; | ||||
| @ -1900,7 +1914,7 @@ void MainWindow::on_logQSOButton_clicked()                 //Log QSO button | ||||
|   QDateTime t = QDateTime::currentDateTimeUtc(); | ||||
|   QString logEntry=t.date().toString("yyyy-MMM-dd,") + | ||||
|       t.time().toString("hh:mm,") + m_hisCall + "," + m_hisGrid + "," + | ||||
|       QString::number(nMHz) + ",JT65B\n"; | ||||
|       QString::number(nMHz) + "," + m_mode; | ||||
|   QFile f("wsjt.log"); | ||||
|   if(!f.open(QFile::Append)) { | ||||
|     msgBox("Cannot open file \"wsjt.log\"."); | ||||
| @ -1937,6 +1951,9 @@ void MainWindow::on_actionJT65A_triggered() | ||||
| { | ||||
|   m_mode="JT65A"; | ||||
|   m_mode65=1; | ||||
|   m_nfast=1; | ||||
|   m_TRperiod=60; | ||||
|   soundInThread.setPeriod(m_TRperiod); | ||||
|   g_pWideGraph->setMode65(m_mode65); | ||||
|   lab5->setText(m_mode); | ||||
|   ui->actionJT65A->setChecked(true); | ||||
| @ -1946,6 +1963,9 @@ void MainWindow::on_actionJT65B_triggered() | ||||
| { | ||||
|   m_mode="JT65B"; | ||||
|   m_mode65=2; | ||||
|   m_nfast=1; | ||||
|   m_TRperiod=60; | ||||
|   soundInThread.setPeriod(m_TRperiod); | ||||
|   g_pWideGraph->setMode65(m_mode65); | ||||
|   lab5->setText(m_mode); | ||||
|   ui->actionJT65B->setChecked(true); | ||||
| @ -1955,11 +1975,38 @@ void MainWindow::on_actionJT65C_triggered() | ||||
| { | ||||
|   m_mode="JT65C"; | ||||
|   m_mode65=4; | ||||
|   m_nfast=1; | ||||
|   m_TRperiod=60; | ||||
|   soundInThread.setPeriod(m_TRperiod); | ||||
|   g_pWideGraph->setMode65(m_mode65); | ||||
|   lab5->setText(m_mode); | ||||
|   ui->actionJT65C->setChecked(true); | ||||
| } | ||||
| 
 | ||||
| void MainWindow::on_actionJT65B2_triggered() | ||||
| { | ||||
|   m_mode="JT65B2"; | ||||
|   m_mode65=2; | ||||
|   m_nfast=2; | ||||
|   m_TRperiod=30; | ||||
|   soundInThread.setPeriod(m_TRperiod); | ||||
|   g_pWideGraph->setMode65(m_mode65); | ||||
|   lab5->setText(m_mode); | ||||
|   ui->actionJT65B2->setChecked(true); | ||||
| } | ||||
| 
 | ||||
| void MainWindow::on_actionJT65C2_triggered() | ||||
| { | ||||
|   m_mode="JT65C2"; | ||||
|   m_mode65=4; | ||||
|   m_nfast=2; | ||||
|   m_TRperiod=30; | ||||
|   soundInThread.setPeriod(m_TRperiod); | ||||
|   g_pWideGraph->setMode65(m_mode65); | ||||
|   lab5->setText(m_mode); | ||||
|   ui->actionJT65C2->setChecked(true); | ||||
| } | ||||
| 
 | ||||
| void MainWindow::on_NBcheckBox_toggled(bool checked) | ||||
| { | ||||
|   m_NB=checked; | ||||
|  | ||||
| @ -5,6 +5,7 @@ | ||||
| #include <QTimer> | ||||
| #include <QDateTime> | ||||
| #include <QHash> | ||||
| #include "getfile.h" | ||||
| #include "soundin.h" | ||||
| #include "soundout.h" | ||||
| #include "commons.h" | ||||
| @ -123,6 +124,10 @@ private slots: | ||||
| 
 | ||||
|   void on_actionFUNcube_Dongle_triggered(); | ||||
| 
 | ||||
|   void on_actionJT65B2_triggered(); | ||||
| 
 | ||||
|   void on_actionJT65C2_triggered(); | ||||
| 
 | ||||
| private: | ||||
|     Ui::MainWindow *ui; | ||||
|     qint32  m_nDevIn; | ||||
| @ -157,6 +162,7 @@ private: | ||||
|     qint32  m_nfast; | ||||
|     qint32  m_nsum; | ||||
|     qint32  m_nsave; | ||||
|     qint32  m_TRperiod; | ||||
| 
 | ||||
|     double  m_fAdd; | ||||
|     double  m_IQamp; | ||||
|  | ||||
| @ -1225,6 +1225,8 @@ p, li { white-space: pre-wrap; } | ||||
|     <addaction name="actionJT65A"/> | ||||
|     <addaction name="actionJT65B"/> | ||||
|     <addaction name="actionJT65C"/> | ||||
|     <addaction name="actionJT65B2"/> | ||||
|     <addaction name="actionJT65C2"/> | ||||
|    </widget> | ||||
|    <addaction name="menuFile"/> | ||||
|    <addaction name="menuSetup"/> | ||||
| @ -1568,6 +1570,22 @@ p, li { white-space: pre-wrap; } | ||||
|     <string>FUNcube Dongle Settings</string> | ||||
|    </property> | ||||
|   </action> | ||||
|   <action name="actionJT65B2"> | ||||
|    <property name="checkable"> | ||||
|     <bool>true</bool> | ||||
|    </property> | ||||
|    <property name="text"> | ||||
|     <string>JT65B2</string> | ||||
|    </property> | ||||
|   </action> | ||||
|   <action name="actionJT65C2"> | ||||
|    <property name="checkable"> | ||||
|     <bool>true</bool> | ||||
|    </property> | ||||
|    <property name="text"> | ||||
|     <string>JT65C2</string> | ||||
|    </property> | ||||
|   </action> | ||||
|  </widget> | ||||
|  <layoutdefault spacing="6" margin="11"/> | ||||
|  <customwidgets> | ||||
|  | ||||
							
								
								
									
										25
									
								
								soundin.cpp
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								soundin.cpp
									
									
									
									
									
								
							| @ -187,10 +187,10 @@ void SoundInThread::run()                           //SoundInThread::run() | ||||
| //  const PaStreamInfo* p=Pa_GetStreamInfo(inStream);
 | ||||
| 
 | ||||
|   bool qe = quitExecution; | ||||
|   int n60z=99; | ||||
|   int ntrz=99; | ||||
|   int k=0; | ||||
|   int nsec; | ||||
|   int n60; | ||||
|   int ntr; | ||||
|   int nBusy=0; | ||||
|   int nhsym0=0; | ||||
| 
 | ||||
| @ -200,10 +200,10 @@ void SoundInThread::run()                           //SoundInThread::run() | ||||
|     if (qe) break; | ||||
|     qint64 ms = QDateTime::currentMSecsSinceEpoch() % 86400000; | ||||
|     nsec = ms/1000;             // Time according to this computer
 | ||||
|     n60 = nsec % 60; | ||||
|     ntr = nsec % m_TRperiod; | ||||
| 
 | ||||
| // Reset buffer pointer and symbol number at start of minute
 | ||||
|     if(n60 < n60z or !m_monitoring) { | ||||
|     if(ntr < ntrz or !m_monitoring) { | ||||
|       nhsym0=0; | ||||
|       udata.bzero=true; | ||||
|     } | ||||
| @ -228,7 +228,7 @@ void SoundInThread::run()                           //SoundInThread::run() | ||||
|       } | ||||
|     } | ||||
|     msleep(100); | ||||
|     n60z=n60; | ||||
|     ntrz=ntr; | ||||
|   } | ||||
|   Pa_StopStream(inStream); | ||||
|   Pa_CloseStream(inStream); | ||||
| @ -314,6 +314,11 @@ int SoundInThread::mhsym() | ||||
|   return m_hsym; | ||||
| } | ||||
| 
 | ||||
| void SoundInThread::setPeriod(int n) | ||||
| { | ||||
|   m_TRperiod=n; | ||||
| } | ||||
| 
 | ||||
| //--------------------------------------------------------------- inputUDP()
 | ||||
| void SoundInThread::inputUDP() | ||||
| { | ||||
| @ -341,10 +346,10 @@ void SoundInThread::inputUDP() | ||||
|     double d8[174]; | ||||
|   } b; | ||||
| 
 | ||||
|   int n60z=99; | ||||
|   int ntrz=99; | ||||
|   int k=0; | ||||
|   int nsec; | ||||
|   int n60; | ||||
|   int ntr; | ||||
|   int nhsym0=0; | ||||
|   int iz=174; | ||||
|   int nBusy=0; | ||||
| @ -361,14 +366,14 @@ void SoundInThread::inputUDP() | ||||
| 
 | ||||
|       qint64 ms = QDateTime::currentMSecsSinceEpoch() % 86400000; | ||||
|       nsec = ms/1000;             // Time according to this computer
 | ||||
|       n60 = nsec % 60; | ||||
|       ntr = nsec % m_TRperiod; | ||||
| 
 | ||||
| // Reset buffer pointer and symbol number at start of minute
 | ||||
|       if(n60 < n60z) { | ||||
|       if(ntr < ntrz) { | ||||
|         k=0; | ||||
|         nhsym0=0; | ||||
|       } | ||||
|       n60z=n60; | ||||
|       ntrz=ntr; | ||||
| 
 | ||||
|       if(m_monitoring) { | ||||
|         m_nrx=b.nrx; | ||||
|  | ||||
| @ -47,6 +47,7 @@ public: | ||||
|   void setNrx(int n); | ||||
|   void setForceCenterFreqBool(bool b); | ||||
|   void setForceCenterFreqMHz(double d); | ||||
|   void setPeriod(int n); | ||||
|   int  nrx(); | ||||
|   int  mhsym(); | ||||
| 
 | ||||
| @ -73,6 +74,7 @@ private: | ||||
|   qint32 m_hsym; | ||||
|   qint32 m_nDevIn; | ||||
|   qint32 m_udpPort; | ||||
|   qint32 m_TRperiod; | ||||
| 
 | ||||
|   QUdpSocket *udpSocket; | ||||
| }; | ||||
|  | ||||
							
								
								
									
										49
									
								
								soundout.cpp
									
									
									
									
									
								
							
							
						
						
									
										49
									
								
								soundout.cpp
									
									
									
									
									
								
							| @ -15,7 +15,7 @@ extern double outputLatency; | ||||
| 
 | ||||
| typedef struct   //Parameters sent to or received from callback function | ||||
| { | ||||
|   int dummy; | ||||
|   int nTRperiod; | ||||
| } paUserData; | ||||
| 
 | ||||
| //--------------------------------------------------------------- d2aCallback
 | ||||
| @ -29,14 +29,11 @@ extern "C" int d2aCallback(const void *inputBuffer, void *outputBuffer, | ||||
|   short *wptr = (short*)outputBuffer; | ||||
|   unsigned int i,n; | ||||
|   static int ic=0; | ||||
| //  static int ic0=0;
 | ||||
| //  static int nsec0=-99;
 | ||||
|   static bool btxok0=false; | ||||
|   static int nminStart=0; | ||||
| //  static t0,t1;
 | ||||
|   double tsec,tstart; | ||||
| 
 | ||||
|   int nsec; | ||||
|   int nTRperiod=udata->nTRperiod; | ||||
| 
 | ||||
|   // Get System time
 | ||||
|   qint64 ms = QDateTime::currentMSecsSinceEpoch() % 86400000; | ||||
| @ -44,46 +41,21 @@ extern "C" int d2aCallback(const void *inputBuffer, void *outputBuffer, | ||||
|   nsec = ms/1000; | ||||
| 
 | ||||
|   if(btxok and !btxok0) {       //Start (or re-start) a transmission
 | ||||
|     n=nsec/60; | ||||
|     tstart=tsec - n*60.0 - 1.0; | ||||
|     n=nsec/nTRperiod; | ||||
|     tstart=tsec - n*nTRperiod - 1.0; | ||||
| 
 | ||||
|     if(tstart<1.0) { | ||||
|       ic=0;                      //Start of minute, set starting index to 0
 | ||||
| //      ic0=ic;
 | ||||
|       nminStart=n; | ||||
| //      t0=timeInfo->currentTime;
 | ||||
|     } else { | ||||
|       if(n != nminStart) { //Late start in new minute: compute starting index
 | ||||
|         ic=(int)(tstart*11025.0); | ||||
| //        ic0=ic;
 | ||||
| //        t0=timeInfo->currentTime;
 | ||||
| //        qDebug() << "B" << t0 << ic0;
 | ||||
|         nminStart=n; | ||||
|       } | ||||
|     } | ||||
|     /*
 | ||||
|     qDebug() << "A" << n << ic | ||||
|              << QString::number( tsec, 'f', 3 ) | ||||
|              << QString::number( tstart, 'f', 3 ) | ||||
|              << QString::number( timeInfo->currentTime, 'f', 3 ) | ||||
|              << QString::number( timeInfo->outputBufferDacTime, 'f', 3 ) | ||||
|              << QString::number( timeInfo->outputBufferDacTime - | ||||
|                                  timeInfo->currentTime, 'f', 3 ) | ||||
|              << QString::number( timeInfo->currentTime - tsec, 'f', 3 ); | ||||
|     */ | ||||
|   } | ||||
|   btxok0=btxok; | ||||
| 
 | ||||
|   /*
 | ||||
|   if(nsec!=nsec0) { | ||||
|     double txt=timeInfo->currentTime - t0; | ||||
|     double r=0.0; | ||||
|     if(txt>0.0) r=(ic-ic0)/txt; | ||||
|     qDebug() << "C" << txt << ic-ic0 << r; | ||||
|     nsec0=nsec; | ||||
|   } | ||||
|   */ | ||||
| 
 | ||||
|   if(btxok) { | ||||
|     for(i=0 ; i<framesToProcess; i++ )  { | ||||
|       short int i2=iwave[ic]; | ||||
| @ -122,6 +94,8 @@ void SoundOutThread::run() | ||||
|   outParam.suggestedLatency=0.05; | ||||
|   outParam.hostApiSpecificStreamInfo=NULL; | ||||
| 
 | ||||
|   udata.nTRperiod=m_TRperiod; | ||||
| 
 | ||||
|   paerr=Pa_IsFormatSupported(NULL,&outParam,11025.0); | ||||
|   if(paerr<0) { | ||||
|     qDebug() << "PortAudio says requested output format not supported."; | ||||
| @ -129,9 +103,6 @@ void SoundOutThread::run() | ||||
|     return; | ||||
|   } | ||||
| 
 | ||||
| //  udata.nwave=m_nwave;
 | ||||
| //  udata.btxok=false;
 | ||||
| 
 | ||||
|   paerr=Pa_OpenStream(&outStream,           //Output stream
 | ||||
|         NULL,                               //No input parameters
 | ||||
|         &outParam,                          //Output parameters
 | ||||
| @ -154,9 +125,6 @@ void SoundOutThread::run() | ||||
|   while (!qe) { | ||||
|     qe = quitExecution; | ||||
|     if (qe) break; | ||||
| //    udata.nwave=m_nwave;
 | ||||
| //    if(m_txOK) udata.btxok=1;
 | ||||
| //    if(!m_txOK) udata.btxok=0;
 | ||||
|     msleep(100); | ||||
|   } | ||||
|   Pa_StopStream(outStream); | ||||
| @ -168,3 +136,8 @@ void SoundOutThread::setOutputDevice(int n)      //setOutputDevice() | ||||
|   if (isRunning()) return; | ||||
|   this->m_nDevOut=n; | ||||
| } | ||||
| 
 | ||||
| void SoundOutThread::setPeriod(int n) | ||||
| { | ||||
|   m_TRperiod=n; | ||||
| } | ||||
|  | ||||
| @ -27,6 +27,7 @@ public: | ||||
| 
 | ||||
| public: | ||||
|   void setOutputDevice(qint32 n); | ||||
|   void setPeriod(int n); | ||||
|   bool quitExecution;           //If true, thread exits gracefully
 | ||||
| 
 | ||||
| 
 | ||||
| @ -35,6 +36,7 @@ private: | ||||
|   double  m_rate;               //Sample rate
 | ||||
|   qint32  m_nDevOut;            //Output device number
 | ||||
|   qint32  m_nwave;              //Length of wave file
 | ||||
|   qint32  m_TRperiod;           //T/R period (30 or 60 s)
 | ||||
|   bool    m_txOK;               //Enable Tx audio
 | ||||
|   bool    m_txMute;             //Mute temporarily
 | ||||
| }; | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user