nRF24L01 driver

Dependents:   Nucleo_IOT1 wireless

Files at this revision

API Documentation at this revision

Comitter:
ianmcc
Date:
Sat Sep 03 12:24:04 2016 +0000
Parent:
3:39e8335cce5d
Child:
5:bb28775120e7
Commit message:
Fix handling of blocking transmit, no need to use the interrupt handler

Changed in this revision

nRF24L01P.cpp Show annotated file Show diff for this revision Revisions of this file
nRF24L01P.h Show annotated file Show diff for this revision Revisions of this file
nRF24L01P_PTX.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/nRF24L01P.cpp	Fri Sep 02 15:51:22 2016 +0000
+++ b/nRF24L01P.cpp	Sat Sep 03 12:24:04 2016 +0000
@@ -274,6 +274,15 @@
 void
 nRF24L01P::set_retransmit_delay(int Delay)
 {
+   char c = this->read_register(NRF24L01P_SETUP_RETR);
+   this->write_register(NRF24L01P_SETUP_RETR, (c & 0x0f) | ((Delay & 0x0f) << 4));
+}
+
+void
+nRF24L01P::set_retransmit_attempts(int Attempts)
+{
+   char c = this->read_register(NRF24L01P_SETUP_RETR);
+   this->write_register(NRF24L01P_SETUP_RETR, (c & 0xf0) | (Attempts & 0x0f));
 }
 
 bool
--- a/nRF24L01P.h	Fri Sep 02 15:51:22 2016 +0000
+++ b/nRF24L01P.h	Sat Sep 03 12:24:04 2016 +0000
@@ -47,7 +47,7 @@
       // set the RF channel, 0 .. 125.
       // The frequency in MHz is 2400 + Channel.
       // In 2Mbps mode, you must use channels at least 2MHz appart to avoid overlap
-      // DEFAULT:
+      // DEFAULT: channel 2
       void set_channel(int Channel);
       
       // PRECONDITION: Mode = Receive.  True if a signal higher than -64bB is detected by the receiver
@@ -59,11 +59,11 @@
 
  
       // enable or disable dynamic payload size on the given pipe
-      // DEFAULT:
+      // DEFAULT: false
       void enable_dynamic_payload(int Pipe, bool Enable);
 
       // Enable including a payload with ACK
-      // DEFAULT:
+      // DEFAULT: false
       void enable_ack_payload(bool Enable);
 
       // enable the write_tx_payload_no_ack() command
@@ -138,11 +138,11 @@
       
       // set the auto-retransmit delay, in units of 250 microseconds.  
       // Valid input is 0,1,...,15 (for 250 .. 4000 us)
-      // DEFAULT:
+      // DEFAULT: 0 (250us)
       void set_retransmit_delay(int Delay);
 
       // set the number of auto-retransmit attempts, 0 .. 15
-      // DEFAULT:
+      // DEFAULT: 3
       void set_retransmit_attempts(int Attempts);
 
       // returns true if we've hit the maximum number of restransmits
@@ -156,11 +156,11 @@
       void set_interrupt_max_rt(bool Enable);
 
       // enable or disable the CRC check.  Auto-acknowledge forces CRC enabled.
-      // DEFAULT:
+      // DEFAULT: true
       void enable_crc(bool Enable);      
       
       // set the CRC width, either 1 byte or 2 bytes
-      // DEFAULT: 
+      // DEFAULT: 1 byte
       void set_crc_width(int width);
 
       // set PWR_UP (move into standby mode)
@@ -198,7 +198,7 @@
        
       // Set the tx address.  Used only for a PTX, set this the same as the rx_address of pipe 0 to enable 
       // auto-acknowledge with Enhanced ShockBurst(TM)
-      // DEFAULT:
+      // DEFAULT: 0xE7E7E7E7E
       void set_tx_address(uint64_t Address);
       
       // commands
--- a/nRF24L01P_PTX.cpp	Fri Sep 02 15:51:22 2016 +0000
+++ b/nRF24L01P_PTX.cpp	Sat Sep 03 12:24:04 2016 +0000
@@ -120,16 +120,29 @@
    while (Status == STATUS_TRANSMITTING)
    {
       wait_us(1);
+      if (Device.is_tx_sent())
+      {
+         // we successfully sent a packet
+         Status = STATUS_PACKET_OK;
+         Device.clear_tx_sent();
+      }
+      else if (Device.is_max_rt())
+      {
+         // we failed to send the packet
+         Status = STATUS_PACKET_MAX_RT;
+         Device.clear_max_rt();
+      }
    }
-   int OldStatus = Status;
-   if (OldStatus == STATUS_PACKET_OK)
+
+   if (Status == STATUS_PACKET_OK)
    {
       Status = STATUS_STANDBY;
       return 0;
    }
-   else if (OldStatus == STATUS_PACKET_MAX_RT)
+   else if (Status == STATUS_PACKET_MAX_RT)
    {
       Status = STATUS_STANDBY;
+      Device.flush_tx_fifo();
       return -1;
    }
    // else the Status isn't what we expected, which
@@ -141,18 +154,6 @@
 void
 nRF24L01P_PTX::IntHandler()
 {
-   if (Device.is_tx_sent())
-   {
-      // we successfully sent a packet
-      Status = STATUS_PACKET_OK;
-      Device.clear_tx_sent();
-   }
-   else if (Device.is_max_rt())
-   {
-      // we failed to send the packet
-      Status = STATUS_PACKET_MAX_RT;
-      Device.clear_max_rt();
-   }
 }
 
 void