aboutsummaryrefslogtreecommitdiffstats
path: root/Transceiver52M/DriveLoop.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Transceiver52M/DriveLoop.cpp')
-rw-r--r--Transceiver52M/DriveLoop.cpp25
1 files changed, 15 insertions, 10 deletions
diff --git a/Transceiver52M/DriveLoop.cpp b/Transceiver52M/DriveLoop.cpp
index 7e250f8..cbd2993 100644
--- a/Transceiver52M/DriveLoop.cpp
+++ b/Transceiver52M/DriveLoop.cpp
@@ -69,8 +69,12 @@ DriveLoop::DriveLoop(int wSamplesPerSymbol,
DriveLoop::~DriveLoop()
{
- if (mRadioDriveLoopThread)
- delete mRadioDriveLoopThread;
+ if (mOn) {
+ mOn = false;
+
+ if (mRadioDriveLoopThread)
+ delete mRadioDriveLoopThread;
+ }
delete gsmPulse;
sigProcLibDestroy();
@@ -78,6 +82,9 @@ DriveLoop::~DriveLoop()
void DriveLoop::start()
{
+ if (mOn)
+ return;
+
mOn = true;
mRadioDriveLoopThread = new Thread(32768);
mRadioDriveLoopThread->start((void * (*)(void*))RadioDriveLoopAdapter, (void*) this);
@@ -236,9 +243,6 @@ void DriveLoop::driveTransmitFIFO()
{
int i;
- if (!mOn)
- return;
-
RadioClock *radioClock = (mRadioInterface->getClock());
while (radioClock->get() + mTransmitLatency > mTransmitDeadlineClock) {
pushRadioVector(mTransmitDeadlineClock);
@@ -250,14 +254,15 @@ void DriveLoop::driveTransmitFIFO()
//else radioClock->wait();
}
-void *RadioDriveLoopAdapter(DriveLoop *transceiver)
+void *RadioDriveLoopAdapter(DriveLoop *drive)
{
- transceiver->setPriority();
+ drive->setPriority();
- while (1) {
- transceiver->driveReceiveFIFO();
- transceiver->driveTransmitFIFO();
+ while (drive->on()) {
+ drive->driveReceiveFIFO();
+ drive->driveTransmitFIFO();
pthread_testcancel();
}
+
return NULL;
}