Chris Dick / nRF2401A

Dependents:   nRF2401A_Hello_World nRF2401A_Wireless_Accelerometer_joypad nRF2401A_Gameduino_Invaders

Revision:
5:18ce8a56b248
Parent:
4:e8523ef6e472
Child:
6:ad8242a1379a
--- a/nRF2401A.h	Sun Oct 06 16:17:32 2013 +0000
+++ b/nRF2401A.h	Sat Oct 19 11:10:47 2013 +0000
@@ -53,19 +53,30 @@
  * #include "mbed.h"
  * #include "nRF2401A.h"
  * 
- * // comment these out depending on the job of the mbed. If your only using one mbed leave both uncommented.
- * #define TX
+ * /* comment these out depending on the job of the mbed. If your only using one mbed leave both uncommented. */
+ * //#define TX
  * #define RX
  * 
+ * /* If using the FRDM-KL25Z uncomment this line */
+ * //#define FRDMKL25Z
+ * 
  * Serial pc(USBTX, USBRX);
  * DigitalOut  myled(LED1);
  * 
  * #ifdef TX
+ * #ifdef FRDMKL25Z
+ * nRF2401A    rf1(PTD0, PTD5, PTA13, PTC12, PTC13);
+ * #else
  * nRF2401A    rf1(p10, p11, p12, p13, p14);
  * #endif
+ * #endif
  * 
  * #ifdef RX
- * nRF2401A    rf2(p21, p22, p23, p24, p25);
+ * #ifdef FRDMKL25Z
+ * nRF2401A    rf2(PTD0, PTD5, PTA13, PTC12, PTC13);
+ * #else
+ * nRF2401A    rf2(p10, p11, p12, p13, p14);
+ * #endif
  * 
  * bool rx_recieved = false;
  * 
@@ -79,7 +90,8 @@
  *     wait(0.005);
  *     pc.printf("Hello nRF2401A\n\r");
  *     
- * #ifdef TX    
+ * #ifdef TX  
+ *     /* initialise the nRF2401A with payload size, address, CRC, bit rate and channel */   
  *     rf1.setDataPayloadLength(4 << 3)
  *        .setAddress(0x0, 0x0, 0xa6, 0xa6, 0xa6, 3 << 3)
  *        .setCRCMode(nRF2401A::NO_CRC)
@@ -89,12 +101,14 @@
  *     rf1.printControlPacket(pc);
  *     rf1.flushControlPacket();
  *     
+ *     /* initialise variables to use for tranmission */
  *     nRF2401A::address_t rf2_addr = {0x0, 0x0, 0x53, 0x53, 0x53};
  *     uint8_t msg[] = {0x01, 0x01, 0x01, 0x01};
  *     uint32_t *msg32 = (uint32_t *) msg;
  * #endif
  * 
  * #ifdef RX   
+ *     /* initialise the nRF2401A with payload size, address, CRC, bit rate and channel */   
  *     rf2.setDataPayloadLength(4 << 3)
  *        .setAddress(0x0, 0x0, 0x53, 0x53, 0x53, 3 << 3)
  *        .setCRCMode(nRF2401A::NO_CRC)
@@ -103,34 +117,56 @@
  *        
  *     rf2.printControlPacket(pc);
  *     rf2.flushControlPacket();   
+ *     
+ *     /* attach receive callback */
  *     rf2.attachRXHandler(&nRF2401A_rx, 0);
  * #endif
- *      
+ *       
  *     while(1) 
  *     {
  *     
- * #ifdef TX             
+ * #ifdef TX  
+ *         myled = 0;
+ *         wait(0.25);  
+ *         
+ *         /* send the message to the nRF2401A */         
  *         rf1.sendMsg(rf2_addr, 3 << 3, msg, 4 << 3);
  *         *msg32 += 1;
+ *         
+ *         myled = 1;
+ *         wait(0.25);
  * #endif
  * 
- *         myled = 1;
- *         wait(0.25);
  *         
  * #ifdef RX  
  *         if (rx_recieved)
  *         {      
+ *             /* send the read buffer directly to the serial port */
  *             rf2.printDataPacket(pc);
+ *             
+ *             /* send a single byte from the read buffer to the serial port */
+ *             uint8_t rx_msg = 0;
+ *             rf2.readMsg_byte(&rx_msg,  0 );
+ *             pc.printf("\n\r%d\n\r", rx_msg);
+ *             
+ *             /* read the read buffer , then send to the serial port */
+ *             uint8_t rx_buffer[32] = {0};
+ *             rf2.readMsg( &rx_buffer[0], 32);
+ *             for(int i = 0; i < sizeof(rx_buffer); i++)
+ *             {
+ *                 pc.printf("%02x ", rx_buffer[i]);
+ *             }
+ *             pc.printf("\r\n");
+ *             
+ *             /* clear flags and flash the led */
  *             rx_recieved = false;
+ *             myled = !myled;
  *         }
  * #endif 
  *       
- *         myled = 0;
- *         wait(0.25);
  *     }
  * }
  * 
- * 
  * @endcode
  */
 
@@ -145,7 +181,7 @@
 /** Class constructor.
  * The constructor assigns the specified pinout, attatch the
  * DR1 to a pin interrupt and sets up inmutable control packet
- * fields.
+ * fields. for the KL25Z, the Data Ready pin must be on ports A or C
  * @param ce Chip Enable (CE) pin of the nRF2401A.
  * @param c2 Chip Select (CS) pin of the nRF2401A.
  * @param dr1 Data Ready 1 (DR1) pin of the nRF2401A.
@@ -205,7 +241,7 @@
             CRC_8 = 0x1,    /**< Use a 8-bit CRC. */
             CRC_16 = 0x3    /**< Use a 16-bit CRC. */
         } CRC_T;
-        
+        typedef uint8_t read_msg;
 /** Set CRC use.
  * Set the CRC mode field of the control packet.
  * @param mode The CRC mode of choise.
@@ -264,7 +300,25 @@
  *
  */
         typedef uint8_t address_t[5];
-        
+
+/** Read a message.
+ * This routine will transfer the data from the receive buffer to the buffer
+ *  supplied. It will transfer a number of Bytes equal to the specified length.
+ * @param msg_buf Message buffer.
+ * @param msg_len Length of message,  in bits.
+ * @return Reference to the invoked object (for chaining operations).
+ */
+        nRF2401A& readMsg( uint8_t *msg_buf, uint8_t msg_len );
+
+/** Read a byte from message.
+ * This routine will transfer the data from the receive buffer to the buffer
+ *  supplied. It will transfer one Bytes at index buf_index.
+ * @param msg_buf Message body.
+ * @param buf_index index of byte to be read.
+ * @return Reference to the invoked object (for chaining operations).
+ */
+        nRF2401A& readMsg_byte( uint8_t *msg_buf, uint8_t buf_index );
+         
 /** Send a message.
  * This routine will transfer the data from the supplied buffer and send
  * it to the specified address using the current control packet settings.
@@ -336,7 +390,7 @@
         
         uint8_t         *_ctrl_packet;  /**< */
         
-        uint8_t         _data_buf[32];  /**< */        
+        uint8_t         _data_buf[32];  /**< */       
         
         nRF2401A_rx_handler_t   _rx_handler;        /**< */
         void                    *_rx_handler_arg;   /**< */