mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-11-03 13:30:52 -05:00 
			
		
		
		
	Further progress on changes to support the IQ+ XT.
Amplitude and phase adjustments of Tx audio are now working and need to be tested. Still need to implement function of "Tune" button. git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/map65@3640 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
		
							parent
							
								
									8422bf21a6
								
							
						
					
					
						commit
						fecbe8a7fc
					
				@ -17,7 +17,7 @@
 | 
				
			|||||||
   <item>
 | 
					   <item>
 | 
				
			||||||
    <widget class="QTabWidget" name="ioTabWidget">
 | 
					    <widget class="QTabWidget" name="ioTabWidget">
 | 
				
			||||||
     <property name="currentIndex">
 | 
					     <property name="currentIndex">
 | 
				
			||||||
      <number>0</number>
 | 
					      <number>3</number>
 | 
				
			||||||
     </property>
 | 
					     </property>
 | 
				
			||||||
     <widget class="QWidget" name="tab">
 | 
					     <widget class="QWidget" name="tab">
 | 
				
			||||||
      <attribute name="title">
 | 
					      <attribute name="title">
 | 
				
			||||||
@ -1461,7 +1461,7 @@
 | 
				
			|||||||
      <attribute name="title">
 | 
					      <attribute name="title">
 | 
				
			||||||
       <string>Si570 Control</string>
 | 
					       <string>Si570 Control</string>
 | 
				
			||||||
      </attribute>
 | 
					      </attribute>
 | 
				
			||||||
      <widget class="QWidget" name="">
 | 
					      <widget class="QWidget" name="layoutWidget">
 | 
				
			||||||
       <property name="geometry">
 | 
					       <property name="geometry">
 | 
				
			||||||
        <rect>
 | 
					        <rect>
 | 
				
			||||||
         <x>40</x>
 | 
					         <x>40</x>
 | 
				
			||||||
 | 
				
			|||||||
@ -18,6 +18,7 @@ short int iwave[2*60*11025];          //Wave file for Tx audio
 | 
				
			|||||||
int nwave;                            //Length of Tx waveform
 | 
					int nwave;                            //Length of Tx waveform
 | 
				
			||||||
bool btxok;                           //True if OK to transmit
 | 
					bool btxok;                           //True if OK to transmit
 | 
				
			||||||
bool bTune;
 | 
					bool bTune;
 | 
				
			||||||
 | 
					bool bIQxt;
 | 
				
			||||||
double outputLatency;                 //Latency in seconds
 | 
					double outputLatency;                 //Latency in seconds
 | 
				
			||||||
int txPower;
 | 
					int txPower;
 | 
				
			||||||
int iqAmp;
 | 
					int iqAmp;
 | 
				
			||||||
@ -1515,6 +1516,7 @@ void MainWindow::guiUpdate()
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if(nsec != m_sec0) {                                     //Once per second
 | 
					  if(nsec != m_sec0) {                                     //Once per second
 | 
				
			||||||
 | 
					//    qDebug() << txPower << iqAmp << iqPhase;
 | 
				
			||||||
    soundInThread.setForceCenterFreqMHz(g_pWideGraph->m_dForceCenterFreq);
 | 
					    soundInThread.setForceCenterFreqMHz(g_pWideGraph->m_dForceCenterFreq);
 | 
				
			||||||
    soundInThread.setForceCenterFreqBool(g_pWideGraph->m_bForceCenterFreq);
 | 
					    soundInThread.setForceCenterFreqBool(g_pWideGraph->m_bForceCenterFreq);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1578,6 +1580,7 @@ void MainWindow::guiUpdate()
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
  iptt0=iptt;
 | 
					  iptt0=iptt;
 | 
				
			||||||
  btxok0=btxok;
 | 
					  btxok0=btxok;
 | 
				
			||||||
 | 
					  bIQxt=m_bIQxt;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void MainWindow::ba2msg(QByteArray ba, char message[])             //ba2msg()
 | 
					void MainWindow::ba2msg(QByteArray ba, char message[])             //ba2msg()
 | 
				
			||||||
@ -2121,5 +2124,6 @@ void MainWindow::on_actionTx_Tune_triggered()
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
  g_pTxTune->set_iqAmp(iqAmp);
 | 
					  g_pTxTune->set_iqAmp(iqAmp);
 | 
				
			||||||
  g_pTxTune->set_iqPhase(iqPhase);
 | 
					  g_pTxTune->set_iqPhase(iqPhase);
 | 
				
			||||||
 | 
					  g_pTxTune->set_txPower(txPower);
 | 
				
			||||||
  g_pTxTune->show();
 | 
					  g_pTxTune->show();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										18
									
								
								soundout.cpp
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								soundout.cpp
									
									
									
									
									
								
							@ -12,12 +12,12 @@ extern short int iwave[2*60*11025];   //Wave file for Tx audio
 | 
				
			|||||||
extern int nwave;
 | 
					extern int nwave;
 | 
				
			||||||
extern bool btxok;
 | 
					extern bool btxok;
 | 
				
			||||||
extern bool bTune;
 | 
					extern bool bTune;
 | 
				
			||||||
 | 
					extern bool bIQxt;
 | 
				
			||||||
extern int iqAmp;
 | 
					extern int iqAmp;
 | 
				
			||||||
extern int iqPhase;
 | 
					extern int iqPhase;
 | 
				
			||||||
extern int txPower;
 | 
					extern int txPower;
 | 
				
			||||||
extern double outputLatency;
 | 
					extern double outputLatency;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
typedef struct   //Parameters sent to or received from callback function
 | 
					typedef struct   //Parameters sent to or received from callback function
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  int nTRperiod;
 | 
					  int nTRperiod;
 | 
				
			||||||
@ -41,15 +41,18 @@ extern "C" int d2aCallback(const void *inputBuffer, void *outputBuffer,
 | 
				
			|||||||
  int nsec;
 | 
					  int nsec;
 | 
				
			||||||
  int nTRperiod=udata->nTRperiod;
 | 
					  int nTRperiod=udata->nTRperiod;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Get System time
 | 
					  // Get System time
 | 
				
			||||||
  qint64 ms = QDateTime::currentMSecsSinceEpoch() % 86400000;
 | 
					  qint64 ms = QDateTime::currentMSecsSinceEpoch() % 86400000;
 | 
				
			||||||
  tsec = 0.001*ms;
 | 
					  tsec = 0.001*ms;
 | 
				
			||||||
  nsec = ms/1000;
 | 
					  nsec = ms/1000;
 | 
				
			||||||
 | 
					  qreal dPhase=iqPhase/5729.57795131;
 | 
				
			||||||
 | 
					  qreal amp=1.0 + 0.0001*iqAmp;
 | 
				
			||||||
 | 
					  qreal xAmp=txPower*295.00*qSqrt(2.0 - amp*amp);
 | 
				
			||||||
 | 
					  qreal yAmp=txPower*295.00*amp;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static int nsec0=0;
 | 
					  static int nsec0=0;
 | 
				
			||||||
  if(nsec!=nsec0) {
 | 
					  if(nsec!=nsec0) {
 | 
				
			||||||
    qDebug() << txPower << iqAmp << iqPhase << bTune;
 | 
					//    qDebug() << txPower << iqAmp << iqPhase << amp << xAmp << yAmp << dPhase << bTune;
 | 
				
			||||||
    nsec0=nsec;
 | 
					    nsec0=nsec;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -76,6 +79,15 @@ extern "C" int d2aCallback(const void *inputBuffer, void *outputBuffer,
 | 
				
			|||||||
        short int i2b=iwave[ic++];
 | 
					        short int i2b=iwave[ic++];
 | 
				
			||||||
      if(ic > nwave) {i2a=0; i2b=0;}
 | 
					      if(ic > nwave) {i2a=0; i2b=0;}
 | 
				
			||||||
//      i2 = 500.0*(i2/32767.0 + 5.0*gran());      //Add noise (tests only!)
 | 
					//      i2 = 500.0*(i2/32767.0 + 5.0*gran());      //Add noise (tests only!)
 | 
				
			||||||
 | 
					//    if(bIQxt) {
 | 
				
			||||||
 | 
					      if(1) {
 | 
				
			||||||
 | 
					        qreal phi=qAtan2(qreal(i2a),qreal(i2b)) + dPhase;
 | 
				
			||||||
 | 
					        i2a=xAmp*qCos(phi);
 | 
				
			||||||
 | 
					        i2b=yAmp*qSin(phi);
 | 
				
			||||||
 | 
					//        qDebug() << xAmp << yAmp << phi << i2a << i2b;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					//      i2a=0.01*txPower*i2a;
 | 
				
			||||||
 | 
					//      i2b=0.01*txPower*i2b;
 | 
				
			||||||
      *wptr++ = i2a;                     //left
 | 
					      *wptr++ = i2a;                     //left
 | 
				
			||||||
      *wptr++ = i2b;                     //right
 | 
					      *wptr++ = i2b;                     //right
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										26
									
								
								txtune.cpp
									
									
									
									
									
								
							
							
						
						
									
										26
									
								
								txtune.cpp
									
									
									
									
									
								
							@ -19,9 +19,25 @@ TxTune::~TxTune()
 | 
				
			|||||||
    delete ui;
 | 
					    delete ui;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void TxTune::accept()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  QDialog::accept();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void TxTune::reject()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  set_iqAmp(m_saveAmp);
 | 
				
			||||||
 | 
					  set_iqPhase(m_savePha);
 | 
				
			||||||
 | 
					  set_txPower(m_saveTxPower);
 | 
				
			||||||
 | 
					  QDialog::reject();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void TxTune::on_pwrSlider_valueChanged(int n)
 | 
					void TxTune::on_pwrSlider_valueChanged(int n)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  txPower=0.01*n;
 | 
					  txPower=n;
 | 
				
			||||||
 | 
					  QString t;
 | 
				
			||||||
 | 
					  t.sprintf("%d \%",n);
 | 
				
			||||||
 | 
					  ui->labPower->setText(t);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void TxTune::on_ampSlider_valueChanged(int n)
 | 
					void TxTune::on_ampSlider_valueChanged(int n)
 | 
				
			||||||
@ -61,6 +77,7 @@ void TxTune::on_finePhaSlider_valueChanged(int n)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void TxTune::set_iqAmp(int n)
 | 
					void TxTune::set_iqAmp(int n)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					  m_saveAmp=n;
 | 
				
			||||||
  m_iqAmp1=n/10;
 | 
					  m_iqAmp1=n/10;
 | 
				
			||||||
  m_iqAmp2=n%10;
 | 
					  m_iqAmp2=n%10;
 | 
				
			||||||
  ui->ampSlider->setValue(m_iqAmp1);
 | 
					  ui->ampSlider->setValue(m_iqAmp1);
 | 
				
			||||||
@ -69,12 +86,19 @@ void TxTune::set_iqAmp(int n)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void TxTune::set_iqPhase(int n)
 | 
					void TxTune::set_iqPhase(int n)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					  m_savePha=n;
 | 
				
			||||||
  m_iqPha1=n/10;
 | 
					  m_iqPha1=n/10;
 | 
				
			||||||
  m_iqPha2=n%10;
 | 
					  m_iqPha2=n%10;
 | 
				
			||||||
  ui->phaSlider->setValue(m_iqPha1);
 | 
					  ui->phaSlider->setValue(m_iqPha1);
 | 
				
			||||||
  ui->finePhaSlider->setValue(m_iqPha2);
 | 
					  ui->finePhaSlider->setValue(m_iqPha2);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void TxTune::set_txPower(int n)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  m_saveTxPower=n;
 | 
				
			||||||
 | 
					  ui->pwrSlider->setValue(n);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void TxTune::on_cbTxImage_toggled(bool b)
 | 
					void TxTune::on_cbTxImage_toggled(bool b)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  ui->ampSlider->setEnabled(b);
 | 
					  ui->ampSlider->setEnabled(b);
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										9
									
								
								txtune.h
									
									
									
									
									
								
							
							
						
						
									
										9
									
								
								txtune.h
									
									
									
									
									
								
							@ -15,6 +15,10 @@ public:
 | 
				
			|||||||
    explicit TxTune(QWidget *parent = 0);
 | 
					    explicit TxTune(QWidget *parent = 0);
 | 
				
			||||||
    ~TxTune();
 | 
					    ~TxTune();
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					public slots:
 | 
				
			||||||
 | 
					  void accept();
 | 
				
			||||||
 | 
					  void reject();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
private slots:
 | 
					private slots:
 | 
				
			||||||
  void on_pwrSlider_valueChanged(int n);
 | 
					  void on_pwrSlider_valueChanged(int n);
 | 
				
			||||||
  void on_ampSlider_valueChanged(int n);
 | 
					  void on_ampSlider_valueChanged(int n);
 | 
				
			||||||
@ -27,12 +31,17 @@ private slots:
 | 
				
			|||||||
public:
 | 
					public:
 | 
				
			||||||
  void set_iqAmp(int n);
 | 
					  void set_iqAmp(int n);
 | 
				
			||||||
  void set_iqPhase(int n);
 | 
					  void set_iqPhase(int n);
 | 
				
			||||||
 | 
					  void set_txPower(int n);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
  qint32  m_iqAmp1;
 | 
					  qint32  m_iqAmp1;
 | 
				
			||||||
  qint32  m_iqAmp2;
 | 
					  qint32  m_iqAmp2;
 | 
				
			||||||
  qint32  m_iqPha1;
 | 
					  qint32  m_iqPha1;
 | 
				
			||||||
  qint32  m_iqPha2;
 | 
					  qint32  m_iqPha2;
 | 
				
			||||||
 | 
					  qint32  m_saveAmp;
 | 
				
			||||||
 | 
					  qint32  m_savePha;
 | 
				
			||||||
 | 
					  qint32  m_saveTxPower;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Ui::TxTune *ui;
 | 
					  Ui::TxTune *ui;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										24
									
								
								txtune.ui
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								txtune.ui
									
									
									
									
									
								
							@ -74,13 +74,6 @@
 | 
				
			|||||||
      </property>
 | 
					      </property>
 | 
				
			||||||
     </widget>
 | 
					     </widget>
 | 
				
			||||||
    </item>
 | 
					    </item>
 | 
				
			||||||
    <item row="0" column="2">
 | 
					 | 
				
			||||||
     <widget class="QPushButton" name="pbTune">
 | 
					 | 
				
			||||||
      <property name="text">
 | 
					 | 
				
			||||||
       <string>Tune</string>
 | 
					 | 
				
			||||||
      </property>
 | 
					 | 
				
			||||||
     </widget>
 | 
					 | 
				
			||||||
    </item>
 | 
					 | 
				
			||||||
    <item row="1" column="0" colspan="2">
 | 
					    <item row="1" column="0" colspan="2">
 | 
				
			||||||
     <widget class="QCheckBox" name="cbTxImage">
 | 
					     <widget class="QCheckBox" name="cbTxImage">
 | 
				
			||||||
      <property name="text">
 | 
					      <property name="text">
 | 
				
			||||||
@ -251,6 +244,23 @@
 | 
				
			|||||||
      </property>
 | 
					      </property>
 | 
				
			||||||
     </widget>
 | 
					     </widget>
 | 
				
			||||||
    </item>
 | 
					    </item>
 | 
				
			||||||
 | 
					    <item row="1" column="2">
 | 
				
			||||||
 | 
					     <widget class="QPushButton" name="pbTune">
 | 
				
			||||||
 | 
					      <property name="text">
 | 
				
			||||||
 | 
					       <string>Tune</string>
 | 
				
			||||||
 | 
					      </property>
 | 
				
			||||||
 | 
					     </widget>
 | 
				
			||||||
 | 
					    </item>
 | 
				
			||||||
 | 
					    <item row="0" column="2">
 | 
				
			||||||
 | 
					     <widget class="QLabel" name="labPower">
 | 
				
			||||||
 | 
					      <property name="text">
 | 
				
			||||||
 | 
					       <string>100 %</string>
 | 
				
			||||||
 | 
					      </property>
 | 
				
			||||||
 | 
					      <property name="alignment">
 | 
				
			||||||
 | 
					       <set>Qt::AlignCenter</set>
 | 
				
			||||||
 | 
					      </property>
 | 
				
			||||||
 | 
					     </widget>
 | 
				
			||||||
 | 
					    </item>
 | 
				
			||||||
   </layout>
 | 
					   </layout>
 | 
				
			||||||
  </widget>
 | 
					  </widget>
 | 
				
			||||||
 </widget>
 | 
					 </widget>
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user