diff --git a/Readme.md b/Readme.md
index 21148831d..3d54e7e05 100644
--- a/Readme.md
+++ b/Readme.md
@@ -30,7 +30,7 @@ From version 2 SDRangel can integrate more than one hardware device running conc
From version 3 transmission or signal generation is supported for BladeRF and HackRF (since version 3.1) using a sample sink plugin. These plugins are:
- - [BladeRF output plugin](https://github.com/f4exb/sdrangel/tree/dev/plugins/samplesink/bladerfoutput)
+ - [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)
- [File output or file sink plugin](https://github.com/f4exb/sdrangel/tree/dev/plugins/samplesink/filesink)
diff --git a/plugins/samplesink/bladerfoutput/readme.md b/plugins/samplesink/bladerfoutput/readme.md
index 9c20967ce..30c7bbe4a 100644
--- a/plugins/samplesink/bladerfoutput/readme.md
+++ b/plugins/samplesink/bladerfoutput/readme.md
@@ -4,6 +4,8 @@
This output sample sink plugin sends its samples to a [BladeRF device](https://www.nuand.com/).
+Warning to Windows users: concurrent use of Rx and Tx does not work correctly hence full duplex is not fully operational. For best results use BladeRF as a half duplex device like HackRF i.e. do not run Tx and Rx concurrently.
+
Build
The plugin will be built only if the [BladeRF host library](https://github.com/Nuand/bladeRF) is installed in your system. If you build it from source and install it in a custom location say: `/opt/install/libbladeRF` you will have to add `-DLIBBLADERF_INCLUDE_DIR=/opt/install/libbladeRF/include -DLIBBLADERF_LIBRARIES=/opt/install/libbladeRF/lib/libbladeRF.so` to the cmake command line.
diff --git a/plugins/samplesink/hackrfoutput/hackrfoutputthread.cpp b/plugins/samplesink/hackrfoutput/hackrfoutputthread.cpp
index 9b2e7f0d1..a5d4b050d 100644
--- a/plugins/samplesink/hackrfoutput/hackrfoutputthread.cpp
+++ b/plugins/samplesink/hackrfoutput/hackrfoutputthread.cpp
@@ -67,11 +67,11 @@ void HackRFOutputThread::run()
{
hackrf_error rc;
- m_running = true;
- m_startWaiter.wakeAll();
-
rc = (hackrf_error) hackrf_start_tx(m_dev, tx_callback, this);
+ m_running = true;
+ m_startWaiter.wakeAll();
+
if (rc != HACKRF_SUCCESS)
{
qCritical("HackRFOutputThread::run: failed to start HackRF Tx: %s", hackrf_error_name(rc));
diff --git a/plugins/samplesource/hackrfinput/hackrfinputthread.cpp b/plugins/samplesource/hackrfinput/hackrfinputthread.cpp
index 02373277a..6b1d37a68 100644
--- a/plugins/samplesource/hackrfinput/hackrfinputthread.cpp
+++ b/plugins/samplesource/hackrfinput/hackrfinputthread.cpp
@@ -41,13 +41,11 @@ HackRFInputThread::~HackRFInputThread()
void HackRFInputThread::startWork()
{
- //m_startWaitMutex.lock();
- m_running = true;
+ m_startWaitMutex.lock();
start();
- /*
while(!m_running)
m_startWaiter.wait(&m_startWaitMutex, 100);
- m_startWaitMutex.unlock();*/
+ m_startWaitMutex.unlock();
}
void HackRFInputThread::stopWork()
@@ -76,11 +74,11 @@ void HackRFInputThread::run()
{
hackrf_error rc;
- //m_running = true;
- m_startWaiter.wakeAll();
-
rc = (hackrf_error) hackrf_start_rx(m_dev, rx_callback, this);
+ m_running = true;
+ m_startWaiter.wakeAll();
+
if (rc != HACKRF_SUCCESS)
{
qCritical("HackRFThread::run: failed to start HackRF Rx: %s", hackrf_error_name(rc));
@@ -104,7 +102,7 @@ void HackRFInputThread::run()
qDebug("HackRFThread::run: failed to stop HackRF Rx: %s", hackrf_error_name(rc));
}
- //m_running = false;
+ m_running = false;
}
// Decimate according to specified log2 (ex: log2=4 => decim=16)