mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2025-05-31 05:42:26 -04: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