aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPau Espin Pedrol <pespin@sysmocom.de>2019-07-29 20:14:47 +0200
committerPau Espin Pedrol <pespin@sysmocom.de>2019-07-29 20:42:56 +0200
commit2c673e0f3ec1853ae93afb06c22ff5af9fe3595b (patch)
treea75f1c10ab7d72ce1fe6cf2aeeca1ad883de0c4e
parentb4c749b32bb47e2a7fcc59f2931d4e2e2fd76ad9 (diff)
radioInterface: Clarify how underruns are handled driving a radioDevice
The underrun parameter in radioDevice's readSamples() is not a "Rx Underrun" event, but rather it's used to retrieve a "Tx Underrun" which on some SDRs (like USRP1) seems to be (so far) available only at readSamples() times. Thus, underrun parameter for both readSamples() and writeSamples() is actually flagging the same event, and should be ORed in pushBuffer() as it's already done in pullBuffer(). Otherwise if implementation is setting the underrun pointer to false, it could erase the flag being marked by the counterpart function before isUnderrun() is called (which is the one responsible to clear the flag). Change-Id: Id549489fc1485e0d762818c8e682aaddd5041f1c
-rw-r--r--Transceiver52M/radioInterface.cpp4
1 files changed, 3 insertions, 1 deletions
diff --git a/Transceiver52M/radioInterface.cpp b/Transceiver52M/radioInterface.cpp
index e32848e..0d33f22 100644
--- a/Transceiver52M/radioInterface.cpp
+++ b/Transceiver52M/radioInterface.cpp
@@ -348,6 +348,7 @@ int RadioInterface::pullBuffer()
/* Send timestamped chunk to the device with arbitrary size */
bool RadioInterface::pushBuffer()
{
+ bool local_underrun;
size_t numSent, segmentLen = sendBuffer[0]->getSegmentLen();
if (sendBuffer[0]->getAvailSegments() < 1)
@@ -363,8 +364,9 @@ bool RadioInterface::pushBuffer()
/* Send the all samples in the send buffer */
numSent = mRadio->writeSamples(convertSendBuffer,
segmentLen,
- &underrun,
+ &local_underrun,
writeTimestamp);
+ underrun |= local_underrun;
writeTimestamp += numSent;
return true;