diff --git a/Readme.md b/Readme.md
index 31ae7382a..c2a1ffaae 100644
--- a/Readme.md
+++ b/Readme.md
@@ -35,11 +35,12 @@ From version 2 SDRangel can integrate more than one hardware device running conc
Transmission support
-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
diff --git a/debian/changelog b/debian/changelog
index e9e933ad0..a3b390acd 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -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 Sun, 28 Oct 2017 18:14:18 +0200
+
sdrangel (3.7.7-1) unstable; urgency=medium
* PlutoSDR: removed Tx support
- -- Edouard Griffiths, F4EXB Sun, 28 Oct 2017 23:14:18 +0200
+ -- Edouard Griffiths, F4EXB Sat, 27 Oct 2017 23:14:18 +0200
sdrangel (3.7.6-1) unstable; urgency=medium
diff --git a/plugins/samplesink/limesdroutput/limesdroutputplugin.cpp b/plugins/samplesink/limesdroutput/limesdroutputplugin.cpp
index a8501c1fd..86583a99e 100644
--- a/plugins/samplesink/limesdroutput/limesdroutputplugin.cpp
+++ b/plugins/samplesink/limesdroutput/limesdroutputplugin.cpp
@@ -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,
diff --git a/plugins/samplesink/limesdroutput/limesdroutputthread.cpp b/plugins/samplesink/limesdroutput/limesdroutputthread.cpp
index 655428bc0..985c9ecfb 100644
--- a/plugins/samplesink/limesdroutput/limesdroutputthread.cpp
+++ b/plugins/samplesink/limesdroutput/limesdroutputthread.cpp
@@ -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;
diff --git a/plugins/samplesource/limesdrinput/limesdrinputplugin.cpp b/plugins/samplesource/limesdrinput/limesdrinputplugin.cpp
index 91965f4d5..7b9ce3789 100644
--- a/plugins/samplesource/limesdrinput/limesdrinputplugin.cpp
+++ b/plugins/samplesource/limesdrinput/limesdrinputplugin.cpp
@@ -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,
diff --git a/plugins/samplesource/limesdrinput/limesdrinputthread.cpp b/plugins/samplesource/limesdrinput/limesdrinputthread.cpp
index 985c865e4..27e4375f3 100644
--- a/plugins/samplesource/limesdrinput/limesdrinputthread.cpp
+++ b/plugins/samplesource/limesdrinput/limesdrinputthread.cpp
@@ -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;
}