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:
Joe Taylor 2014-01-16 18:47:28 +00:00
parent 8422bf21a6
commit fecbe8a7fc
6 changed files with 72 additions and 13 deletions

View File

@ -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>

View File

@ -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();
} }

View File

@ -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
} }

View File

@ -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);

View File

@ -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;
}; };

View File

@ -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>