mirror of
https://github.com/f4exb/sdrangel.git
synced 2024-12-23 01:55:48 -05:00
Open both I and Q channels on plutosdr and change the inputthread accordingly
This commit is contained in:
parent
afd76e274e
commit
7848b01987
@ -41,6 +41,7 @@ DevicePlutoSDRBox::DevicePlutoSDRBox(const std::string& uri) :
|
|||||||
m_devRx(0),
|
m_devRx(0),
|
||||||
m_devTx(0),
|
m_devTx(0),
|
||||||
m_chnRx0(0),
|
m_chnRx0(0),
|
||||||
|
m_chnRxQ(0),
|
||||||
m_chnTx0i(0),
|
m_chnTx0i(0),
|
||||||
m_chnTx0q(0),
|
m_chnTx0q(0),
|
||||||
m_rxBuf(0),
|
m_rxBuf(0),
|
||||||
@ -254,12 +255,14 @@ bool DevicePlutoSDRBox::openRx()
|
|||||||
{
|
{
|
||||||
if (!m_valid) { return false; }
|
if (!m_valid) { return false; }
|
||||||
|
|
||||||
if (!m_chnRx0) {
|
if (!m_chnRx0 || !m_chnRxQ) {
|
||||||
m_chnRx0 = iio_device_find_channel(m_devRx, "voltage0", false);
|
m_chnRx0 = iio_device_find_channel(m_devRx, "voltage0", false);
|
||||||
|
m_chnRxQ = iio_device_find_channel(m_devRx, "voltage1", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_chnRx0) {
|
if (m_chnRx0 && m_chnRxQ) {
|
||||||
iio_channel_enable(m_chnRx0);
|
iio_channel_enable(m_chnRx0);
|
||||||
|
iio_channel_enable(m_chnRxQ);
|
||||||
const struct iio_data_format *df = iio_channel_get_data_format(m_chnRx0);
|
const struct iio_data_format *df = iio_channel_get_data_format(m_chnRx0);
|
||||||
qDebug("DevicePlutoSDRBox::openRx: length: %u bits: %u shift: %u signed: %s be: %s with_scale: %s scale: %lf repeat: %u",
|
qDebug("DevicePlutoSDRBox::openRx: length: %u bits: %u shift: %u signed: %s be: %s with_scale: %s scale: %lf repeat: %u",
|
||||||
df->length,
|
df->length,
|
||||||
|
@ -120,6 +120,7 @@ private:
|
|||||||
struct iio_device *m_devRx;
|
struct iio_device *m_devRx;
|
||||||
struct iio_device *m_devTx;
|
struct iio_device *m_devTx;
|
||||||
struct iio_channel *m_chnRx0;
|
struct iio_channel *m_chnRx0;
|
||||||
|
struct iio_channel* m_chnRxQ;
|
||||||
struct iio_channel *m_chnTx0i;
|
struct iio_channel *m_chnTx0i;
|
||||||
struct iio_channel *m_chnTx0q;
|
struct iio_channel *m_chnTx0q;
|
||||||
struct iio_buffer *m_rxBuf;
|
struct iio_buffer *m_rxBuf;
|
||||||
|
@ -94,7 +94,7 @@ void PlutoSDRInputThread::run()
|
|||||||
// Refill RX buffer
|
// Refill RX buffer
|
||||||
nbytes_rx = m_plutoBox->rxBufferRefill();
|
nbytes_rx = m_plutoBox->rxBufferRefill();
|
||||||
|
|
||||||
if (nbytes_rx != m_blockSizeSamples*2)
|
if (nbytes_rx != m_blockSizeSamples*4)
|
||||||
{
|
{
|
||||||
qWarning("PlutoSDRInputThread::run: error refilling buf (1) %d / %d",(int) nbytes_rx, (int) m_blockSizeSamples*2);
|
qWarning("PlutoSDRInputThread::run: error refilling buf (1) %d / %d",(int) nbytes_rx, (int) m_blockSizeSamples*2);
|
||||||
usleep(200000);
|
usleep(200000);
|
||||||
@ -111,13 +111,14 @@ void PlutoSDRInputThread::run()
|
|||||||
|
|
||||||
for (p_dat = m_plutoBox->rxBufferFirst(); p_dat < p_end; p_dat += p_inc)
|
for (p_dat = m_plutoBox->rxBufferFirst(); p_dat < p_end; p_dat += p_inc)
|
||||||
{
|
{
|
||||||
m_buf[ihs] = *((int16_t *) p_dat);
|
m_buf[ihs++] = *((int16_t *) p_dat);
|
||||||
|
m_buf[ihs++] = *(((int16_t*)p_dat)+1);
|
||||||
// iio_channel_convert(m_plutoBox->getRxChannel0(), (void *) &m_bufConv[ihs], (const void *) &m_buf[ihs]);
|
// iio_channel_convert(m_plutoBox->getRxChannel0(), (void *) &m_bufConv[ihs], (const void *) &m_buf[ihs]);
|
||||||
ihs++;
|
//ihs++;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Refill RX buffer again - we still need twice more samples to complete since they come as I followed by Q
|
// Refill RX buffer again - we still need twice more samples to complete since they come as I followed by Q
|
||||||
nbytes_rx = m_plutoBox->rxBufferRefill();
|
/*nbytes_rx = m_plutoBox->rxBufferRefill();
|
||||||
|
|
||||||
if (nbytes_rx != m_blockSizeSamples*2)
|
if (nbytes_rx != m_blockSizeSamples*2)
|
||||||
{
|
{
|
||||||
@ -139,7 +140,7 @@ void PlutoSDRInputThread::run()
|
|||||||
// iio_channel_convert(m_plutoBox->getRxChannel0(), (void *) &m_bufConv[ihs], (const void *) &m_buf[ihs]);
|
// iio_channel_convert(m_plutoBox->getRxChannel0(), (void *) &m_bufConv[ihs], (const void *) &m_buf[ihs]);
|
||||||
ihs++;
|
ihs++;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
if (m_iqOrder) {
|
if (m_iqOrder) {
|
||||||
convertIQ(m_buf, 2*m_blockSizeSamples); // size given in number of int16_t (I and Q interleaved)
|
convertIQ(m_buf, 2*m_blockSizeSamples); // size given in number of int16_t (I and Q interleaved)
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
Reference in New Issue
Block a user