Committer:
xiaxia686
Date:
Wed Mar 14 17:05:15 2012 +0000
Revision:
0:1e4910aeb884
RF + SRF05 libray

Who changed what in which revision?

UserRevisionLine numberNew contents of line
xiaxia686 0:1e4910aeb884 1 #ifndef _RF12B_H
xiaxia686 0:1e4910aeb884 2 #define _RF12B_H
xiaxia686 0:1e4910aeb884 3
xiaxia686 0:1e4910aeb884 4 #include "mbed.h"
xiaxia686 0:1e4910aeb884 5 #include <queue>
xiaxia686 0:1e4910aeb884 6
xiaxia686 0:1e4910aeb884 7 enum rfmode_t{RX, TX};
xiaxia686 0:1e4910aeb884 8
xiaxia686 0:1e4910aeb884 9 class RF12B {
xiaxia686 0:1e4910aeb884 10 public:
xiaxia686 0:1e4910aeb884 11 /* Constructor */
xiaxia686 0:1e4910aeb884 12 RF12B(PinName SDI,
xiaxia686 0:1e4910aeb884 13 PinName SDO,
xiaxia686 0:1e4910aeb884 14 PinName SCK,
xiaxia686 0:1e4910aeb884 15 PinName NCS,
xiaxia686 0:1e4910aeb884 16 PinName NIRQ);
xiaxia686 0:1e4910aeb884 17
xiaxia686 0:1e4910aeb884 18
xiaxia686 0:1e4910aeb884 19
xiaxia686 0:1e4910aeb884 20 /* Reads a packet of data. Returns false if read failed. Use available() to check how much space to allocate for buffer */
xiaxia686 0:1e4910aeb884 21 bool read(unsigned char* data, unsigned int size);
xiaxia686 0:1e4910aeb884 22
xiaxia686 0:1e4910aeb884 23 /* Reads a byte of data from the receive buffer
xiaxia686 0:1e4910aeb884 24 Returns 0xFF if there is no data */
xiaxia686 0:1e4910aeb884 25 unsigned char read();
xiaxia686 0:1e4910aeb884 26
xiaxia686 0:1e4910aeb884 27 /* Transmits a packet of data */
xiaxia686 0:1e4910aeb884 28 void write(unsigned char* data, unsigned char length);
xiaxia686 0:1e4910aeb884 29 void write(unsigned char data); /* 1-byte packet */
xiaxia686 0:1e4910aeb884 30 void write(queue<char> &data, int length = -1); /* sends a whole queue */
xiaxia686 0:1e4910aeb884 31
xiaxia686 0:1e4910aeb884 32 /* Returns the packet length if data is available in the receive buffer, 0 otherwise*/
xiaxia686 0:1e4910aeb884 33 unsigned int available();
xiaxia686 0:1e4910aeb884 34
xiaxia686 0:1e4910aeb884 35 protected:
xiaxia686 0:1e4910aeb884 36 /* Receive FIFO buffer */
xiaxia686 0:1e4910aeb884 37 queue<unsigned char> fifo;
xiaxia686 0:1e4910aeb884 38
xiaxia686 0:1e4910aeb884 39 /* SPI module */
xiaxia686 0:1e4910aeb884 40 SPI spi;
xiaxia686 0:1e4910aeb884 41
xiaxia686 0:1e4910aeb884 42 /* Other digital pins */
xiaxia686 0:1e4910aeb884 43 DigitalOut NCS;
xiaxia686 0:1e4910aeb884 44 InterruptIn NIRQ;
xiaxia686 0:1e4910aeb884 45 DigitalIn NIRQ_in;
xiaxia686 0:1e4910aeb884 46 DigitalOut rfled;
xiaxia686 0:1e4910aeb884 47
xiaxia686 0:1e4910aeb884 48 rfmode_t mode;
xiaxia686 0:1e4910aeb884 49
xiaxia686 0:1e4910aeb884 50 /* Initialises the RF12B module */
xiaxia686 0:1e4910aeb884 51 void init();
xiaxia686 0:1e4910aeb884 52
xiaxia686 0:1e4910aeb884 53 /* Write a command to the RF Module */
xiaxia686 0:1e4910aeb884 54 unsigned int writeCmd(unsigned int cmd);
xiaxia686 0:1e4910aeb884 55
xiaxia686 0:1e4910aeb884 56 /* Sends a byte of data across RF */
xiaxia686 0:1e4910aeb884 57 void send(unsigned char data);
xiaxia686 0:1e4910aeb884 58
xiaxia686 0:1e4910aeb884 59 /* Switch module between receive and transmit modes */
xiaxia686 0:1e4910aeb884 60 void changeMode(rfmode_t mode);
xiaxia686 0:1e4910aeb884 61
xiaxia686 0:1e4910aeb884 62 /* Interrupt routine for data reception */
xiaxia686 0:1e4910aeb884 63 void rxISR();
xiaxia686 0:1e4910aeb884 64
xiaxia686 0:1e4910aeb884 65 /* Tell the RF Module this packet is received and wait for the next */
xiaxia686 0:1e4910aeb884 66 void resetRX();
xiaxia686 0:1e4910aeb884 67
xiaxia686 0:1e4910aeb884 68 /* Return the RF Module Status word */
xiaxia686 0:1e4910aeb884 69 unsigned int status();
xiaxia686 0:1e4910aeb884 70
xiaxia686 0:1e4910aeb884 71 /* Calculate CRC8 */
xiaxia686 0:1e4910aeb884 72 unsigned char crc8(unsigned char crc, unsigned char data);
xiaxia686 0:1e4910aeb884 73 };
xiaxia686 0:1e4910aeb884 74
xiaxia686 0:1e4910aeb884 75 #endif /* _RF12B_H */