sra-romi
Dependencies: BufferedSerial Matrix
Revision 2:e27733eaa594, committed 2019-04-11
- Comitter:
- fabiofaria
- Date:
- Thu Apr 11 13:24:08 2019 +0000
- Parent:
- 1:dc87724abce8
- Child:
- 3:0a718d139ed1
- Commit message:
- Changed to Mutex.
Changed in this revision
rplidar/RPlidar.cpp | Show annotated file Show diff for this revision Revisions of this file |
rplidar/rplidar.h | Show annotated file Show diff for this revision Revisions of this file |
--- a/rplidar/RPlidar.cpp Thu Apr 11 09:51:28 2019 +0000 +++ b/rplidar/RPlidar.cpp Thu Apr 11 13:24:08 2019 +0000 @@ -52,10 +52,15 @@ while(1) { + mutex_measurements.lock(); while (IS_OK(pollPoint())) - { + { + + currentMeasurement_fromThread = getCurrentPoint(); + newMeasurement = 1; + - if(!mail_box.full()) + /*if(!mail_box.full()) { struct RPLidarMeasurement current = getCurrentPoint(); struct RPLidarMeasurement *mail = mail_box.alloc(); @@ -95,9 +100,10 @@ } - } + }*/ } - wait(0.02); + mutex_measurements.unlock(); + wait_us(2000); } @@ -109,7 +115,22 @@ */ int32_t RPLidar::pollSensorData(struct RPLidarMeasurement *_data) { - osEvent evt = mail_box.get(); + + mutex_measurements.lock(); + if(newMeasurement) + { + //currentMeasurement_fromThread = getCurrentPoint(); + _data->distance = currentMeasurement_fromThread.distance; + _data->angle = currentMeasurement_fromThread.angle; + _data->quality = currentMeasurement_fromThread.quality; + _data->startBit = currentMeasurement_fromThread.startBit; + newMeasurement = 0; + mutex_measurements.unlock(); + return 0; + } + mutex_measurements.unlock(); + + /*osEvent evt = mail_box.get(); if (evt.status == osEventMail) { struct RPLidarMeasurement *mail = (struct RPLidarMeasurement*)evt.value.p; @@ -123,7 +144,7 @@ - } + }*/ return -1; }
--- a/rplidar/rplidar.h Thu Apr 11 09:51:28 2019 +0000 +++ b/rplidar/rplidar.h Thu Apr 11 13:24:08 2019 +0000 @@ -99,9 +99,13 @@ //Thread *thread_p; Thread thread; - Mail<struct RPLidarMeasurement, 100> mail_box; // + //Mail<struct RPLidarMeasurement, 100> mail_box; // + Mutex mutex_measurements; bool useThread; + struct RPLidarMeasurement currentMeasurement_fromThread; + bool newMeasurement; + u_result pollPoint(); //Serial *pc; protected: