RF12B.h
- Committer:
- pangsk
- Date:
- 2012-02-28
- Revision:
- 3:e926e54424cb
- Parent:
- 0:66fdbf2cc578
- Child:
- 4:cd581c12a4b9
File content as of revision 3:e926e54424cb:
#ifndef _RF12B_H #define _RF12B_H #include "mbed.h" #define rf12_grp rf12_buf[0] #define rf12_hdr rf12_buf[1] #define rf12_len rf12_buf[2] #define rf12_data (rf12_buf + 3) #define RF12_HDR_CTL 0x80 #define RF12_HDR_DST 0x40 #define RF12_HDR_ACK 0x20 #define RF12_HDR_MASK 0x1F #define RF12_MAXDATA 66 // maximum transmit / receive buffer: 3 header + data + 2 crc bytes #define RF_MAX (RF12_MAXDATA + 5) #define PACKET_LEN 16 // shorthand to simplify sending out the proper ACK when requested #define RF12_WANTS_ACK ((rf12_hdr & RF12_HDR_ACK) && !(rf12_hdr & RF12_HDR_CTL)) #define RF12_ACK_REPLY (rf12_hdr & RF12_HDR_DST ? RF12_HDR_CTL : \ RF12_HDR_CTL | RF12_HDR_DST | (rf12_hdr & RF12_HDR_MASK)) //enum rfmode_t{RX, TX}; class RF12B { public: /* Constructor */ RF12B(PinName SDI, PinName SDO, PinName SCK, PinName NCS, PinName NIRQ); /* Initialises the RF12B module */ void init(uint8_t id, uint8_t band, uint8_t g); /* Returns the packet length if data is available in the receive buffer, 0 otherwise*/ unsigned int available(); void rf12_sendStart (uint8_t hdr, const void* ptr, uint8_t len); void rf12_sendStart2 (uint8_t hdr); uint8_t rf12_recvDone (void); void rf12_recvStart (void); uint16_t check_crc(void); uint8_t length(void); uint8_t* get_data(void); protected: /* SPI module */ SPI spi; /* Other digital pins */ DigitalOut NCS; InterruptIn NIRQ; DigitalIn NIRQ_in; volatile uint16_t rf12_crc; // running crc value volatile unsigned char rf12_buf[RF_MAX]; // recv/xmit buf, including hdr & crc bytes volatile uint8_t nodeid; // address of this node volatile uint8_t group; // network grou volatile uint8_t rxfill; // number of data bytes in rf12_buf volatile int8_t rxstate; // current transceiver state /* Write a command to the RF Module */ unsigned int writeCmd(unsigned int cmd); /* Sends a byte of data across RF */ void send(unsigned char data); /* Interrupt routine for data reception */ void rxISR(); uint16_t _crc16_update(uint16_t crc, uint8_t data); uint16_t rf12_xfer (uint16_t cmd); uint8_t rf12_byte(uint8_t out); }; #endif /* _RF12B_H */