updates

Dependencies:   BLE_API mbed-dev-bin nRF51822

Fork of microbit-dal-eddystone by Martin Woolley

Files at this revision

API Documentation at this revision

Comitter:
LancasterUniversity
Date:
Wed Jul 13 12:18:43 2016 +0100
Parent:
63:b4372a29994f
Child:
65:f7ebabf23e15
Commit message:
Synchronized with git rev 07b6f7f6
Author: Joe Finney
microbit: CRC check bugfix to MicroBitRadio #150

Integrated @whs-che patch as documented in #150, which prevents packets with a
failed CRC checksum from being processed.

Changed in this revision

source/drivers/MicroBitRadio.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/source/drivers/MicroBitRadio.cpp	Wed Jul 13 12:18:42 2016 +0100
+++ b/source/drivers/MicroBitRadio.cpp	Wed Jul 13 12:18:43 2016 +0100
@@ -59,10 +59,6 @@
 
 extern "C" void RADIO_IRQHandler(void)
 {
-    // Move on to the next buffer, if possible.
-    MicroBitRadio::instance->queueRxBuf();
-    NRF_RADIO->PACKETPTR = (uint32_t) MicroBitRadio::instance->getRxBuf();
-
     if(NRF_RADIO->EVENTS_READY)
     {
         NRF_RADIO->EVENTS_READY = 0;
@@ -74,12 +70,24 @@
     if(NRF_RADIO->EVENTS_END)
     {
         NRF_RADIO->EVENTS_END = 0;
-
         if(NRF_RADIO->CRCSTATUS == 1)
         {
             uint8_t sample = NRF_RADIO->RSSISAMPLE;
 
+            // Associate this packet's rssi value with the data just 
+            // transferred by DMA receive
             MicroBitRadio::instance->setRSSI(sample);
+
+            // Now move on to the next buffer, if possible.
+            // The queued packet will get the rssi value set above.
+            MicroBitRadio::instance->queueRxBuf();
+
+            // Set the new buffer for DMA
+            NRF_RADIO->PACKETPTR = (uint32_t) MicroBitRadio::instance->getRxBuf();
+        }
+        else
+        {
+            MicroBitRadio::instance->setRSSI(0);
         }
 
         // Start listening and wait for the END event