mirror of
https://github.com/f4exb/sdrangel.git
synced 2024-12-22 17:45:48 -05:00
LimeSDR: fixed lockup problem by moving start/stop stream from thread run method to start/stop work methods
This commit is contained in:
parent
c7e7bf3480
commit
e8fb70096c
@ -35,11 +35,12 @@ From version 2 SDRangel can integrate more than one hardware device running conc
|
||||
|
||||
<h2>Transmission support</h2>
|
||||
|
||||
From version 3 transmission or signal generation is supported for BladeRF, HackRF (since version 3.1) and LimeSDR (since version 3.4) using a sample sink plugin. These plugins are:
|
||||
From version 3 transmission or signal generation is supported for BladeRF, HackRF (since version 3.1), LimeSDR (since version 3.4) and PlutoSDR (since version 3.7.8) using a sample sink plugin. These plugins are:
|
||||
|
||||
- [BladeRF output plugin](https://github.com/f4exb/sdrangel/tree/dev/plugins/samplesink/bladerfoutput) limited support in Windows
|
||||
- [HackRF output plugin](https://github.com/f4exb/sdrangel/tree/dev/plugins/samplesink/hackrfoutput)
|
||||
- [LimeSDR output plugin](https://github.com/f4exb/sdrangel/tree/dev/plugins/samplesink/limesdroutput)
|
||||
- [PlutoSDR output plugin](https://github.com/f4exb/sdrangel/tree/dev/plugins/samplesink/plutosdroutput)
|
||||
- [File output or file sink plugin](https://github.com/f4exb/sdrangel/tree/dev/plugins/samplesink/filesink)
|
||||
- [Remote device via Network with SDRdaemon](https://github.com/f4exb/sdrangel/tree/dev/plugins/samplesink/sdrdaemonsink) Linux only
|
||||
|
||||
|
9
debian/changelog
vendored
9
debian/changelog
vendored
@ -1,8 +1,15 @@
|
||||
sdrangel (3.7.8-1) unstable; urgency=medium
|
||||
|
||||
* PlutoSDR: restored and fixed Tx support
|
||||
* LimeSDR: reworked the start/stop stream so it does not need the workaround delay
|
||||
|
||||
-- Edouard Griffiths, F4EXB <f4exb06@gmail.com> Sun, 28 Oct 2017 18:14:18 +0200
|
||||
|
||||
sdrangel (3.7.7-1) unstable; urgency=medium
|
||||
|
||||
* PlutoSDR: removed Tx support
|
||||
|
||||
-- Edouard Griffiths, F4EXB <f4exb06@gmail.com> Sun, 28 Oct 2017 23:14:18 +0200
|
||||
-- Edouard Griffiths, F4EXB <f4exb06@gmail.com> Sat, 27 Oct 2017 23:14:18 +0200
|
||||
|
||||
sdrangel (3.7.6-1) unstable; urgency=medium
|
||||
|
||||
|
@ -30,7 +30,7 @@
|
||||
|
||||
const PluginDescriptor LimeSDROutputPlugin::m_pluginDescriptor = {
|
||||
QString("LimeSDR Output"),
|
||||
QString("3.7.6"),
|
||||
QString("3.7.8"),
|
||||
QString("(c) Edouard Griffiths, F4EXB"),
|
||||
QString("https://github.com/f4exb/sdrangel"),
|
||||
true,
|
||||
|
@ -38,6 +38,12 @@ void LimeSDROutputThread::startWork()
|
||||
{
|
||||
if (m_running) return; // return if running already
|
||||
|
||||
if (LMS_StartStream(m_stream) < 0) {
|
||||
qCritical("LimeSDROutputThread::startWork: could not start stream");
|
||||
} else {
|
||||
qDebug("LimeSDROutputThread::startWork: stream started");
|
||||
}
|
||||
|
||||
m_startWaitMutex.lock();
|
||||
start();
|
||||
while(!m_running)
|
||||
@ -51,6 +57,12 @@ void LimeSDROutputThread::stopWork()
|
||||
|
||||
m_running = false;
|
||||
wait();
|
||||
|
||||
if (LMS_StopStream(m_stream) < 0) {
|
||||
qCritical("LimeSDROutputThread::stopWork: could not stop stream");
|
||||
} else {
|
||||
qDebug("LimeSDROutputThread::stopWork: stream stopped");
|
||||
}
|
||||
}
|
||||
|
||||
void LimeSDROutputThread::setLog2Interpolation(unsigned int log2_interp)
|
||||
@ -65,9 +77,7 @@ void LimeSDROutputThread::setFcPos(int fcPos)
|
||||
|
||||
void LimeSDROutputThread::run()
|
||||
{
|
||||
//int count, msleep, mdelta;
|
||||
int res;
|
||||
//lms_stream_status_t streamStatus;
|
||||
|
||||
lms_stream_meta_t metadata; //Use metadata for additional control over sample receive function behaviour
|
||||
metadata.flushPartialPacket = false; //Do not discard data remainder when read size differs from packet size
|
||||
@ -76,13 +86,6 @@ void LimeSDROutputThread::run()
|
||||
m_running = true;
|
||||
m_startWaiter.wakeAll();
|
||||
|
||||
if (LMS_StartStream(m_stream) < 0) {
|
||||
qCritical("LimeSDROutputThread::run: could not start stream");
|
||||
} else {
|
||||
usleep(100000);
|
||||
qDebug("LimeSDROutputThread::run: stream started");
|
||||
}
|
||||
|
||||
while (m_running)
|
||||
{
|
||||
callback(m_buf, LIMESDROUTPUT_BLOCKSIZE);
|
||||
@ -98,33 +101,6 @@ void LimeSDROutputThread::run()
|
||||
{
|
||||
qDebug("LimeSDROutputThread::run written %d/%d samples", res, LIMESDROUTPUT_BLOCKSIZE);
|
||||
}
|
||||
|
||||
// usleep(msleep);
|
||||
//
|
||||
// if (count < 10)
|
||||
// {
|
||||
// count++;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// if (LMS_GetStreamStatus(m_stream, &streamStatus) == 0)
|
||||
// {
|
||||
// if (streamStatus.fifoFilledCount < (4*streamStatus.fifoSize)/5) { // FIFO at 80%
|
||||
// msleep -= mdelta;
|
||||
// } else {
|
||||
// msleep += mdelta;
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// count = 0;
|
||||
// }
|
||||
}
|
||||
|
||||
if (LMS_StopStream(m_stream) < 0) {
|
||||
qCritical("LimeSDROutputThread::run: could not stop stream");
|
||||
} else {
|
||||
usleep(100000);
|
||||
qDebug("LimeSDROutputThread::run: stream stopped");
|
||||
}
|
||||
|
||||
m_running = false;
|
||||
|
@ -31,7 +31,7 @@
|
||||
|
||||
const PluginDescriptor LimeSDRInputPlugin::m_pluginDescriptor = {
|
||||
QString("LimeSDR Input"),
|
||||
QString("3.7.6"),
|
||||
QString("3.7.8"),
|
||||
QString("(c) Edouard Griffiths, F4EXB"),
|
||||
QString("https://github.com/f4exb/sdrangel"),
|
||||
true,
|
||||
|
@ -39,6 +39,12 @@ void LimeSDRInputThread::startWork()
|
||||
{
|
||||
if (m_running) return; // return if running already
|
||||
|
||||
if (LMS_StartStream(m_stream) < 0) {
|
||||
qCritical("LimeSDRInputThread::startWork: could not start stream");
|
||||
} else {
|
||||
qDebug("LimeSDRInputThread::startWork: stream started");
|
||||
}
|
||||
|
||||
m_startWaitMutex.lock();
|
||||
start();
|
||||
while(!m_running)
|
||||
@ -52,6 +58,12 @@ void LimeSDRInputThread::stopWork()
|
||||
|
||||
m_running = false;
|
||||
wait();
|
||||
|
||||
if (LMS_StopStream(m_stream) < 0) {
|
||||
qCritical("LimeSDRInputThread::stopWork: could not stop stream");
|
||||
} else {
|
||||
qDebug("LimeSDRInputThread::stopWork: stream stopped");
|
||||
}
|
||||
}
|
||||
|
||||
void LimeSDRInputThread::setLog2Decimation(unsigned int log2_decim)
|
||||
@ -75,13 +87,6 @@ void LimeSDRInputThread::run()
|
||||
m_running = true;
|
||||
m_startWaiter.wakeAll();
|
||||
|
||||
if (LMS_StartStream(m_stream) < 0) {
|
||||
qCritical("LimeSDRInputThread::run: could not start stream");
|
||||
} else {
|
||||
usleep(100000);
|
||||
qDebug("LimeSDRInputThread::run: stream started");
|
||||
}
|
||||
|
||||
while (m_running)
|
||||
{
|
||||
if ((res = LMS_RecvStream(m_stream, (void *) m_buf, LIMESDR_BLOCKSIZE, &metadata, 1000)) < 0)
|
||||
@ -93,14 +98,6 @@ void LimeSDRInputThread::run()
|
||||
callback(m_buf, 2 * res);
|
||||
}
|
||||
|
||||
|
||||
if (LMS_StopStream(m_stream) < 0) {
|
||||
qCritical("LimeSDRInputThread::run: could not stop stream");
|
||||
} else {
|
||||
usleep(100000);
|
||||
qDebug("LimeSDRInputThread::run: stream stopped");
|
||||
}
|
||||
|
||||
m_running = false;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user