Embed:
(wiki syntax)
Show/hide line numbers
RF12B.h
00001 #ifndef _RF12B_H 00002 #define _RF12B_H 00003 00004 #include "mbed.h" 00005 #define RF12_433MHZ 1 00006 #define RF12_868MHZ 2 00007 #define RF12_915MHZ 3 00008 00009 #define rf12_grp rf12_buf[0] 00010 #define rf12_hdr rf12_buf[1] 00011 #define rf12_len rf12_buf[2] 00012 #define rf12_data (rf12_buf + 3) 00013 00014 #define RF12_HDR_CTL 0x80 00015 #define RF12_HDR_DST 0x40 00016 #define RF12_HDR_ACK 0x20 00017 #define RF12_HDR_MASK 0x1F 00018 00019 #define RF12_MAXDATA 66 00020 // maximum transmit / receive buffer: 3 header + data + 2 crc bytes 00021 #define RF_MAX (RF12_MAXDATA + 5) 00022 #define PACKET_LEN 16 00023 00024 // shorthand to simplify sending out the proper ACK when requested 00025 #define RF12_WANTS_ACK ((rf12_hdr & RF12_HDR_ACK) && !(rf12_hdr & RF12_HDR_CTL)) 00026 #define RF12_ACK_REPLY (rf12_hdr & RF12_HDR_DST ? RF12_HDR_CTL : \ 00027 RF12_HDR_CTL | RF12_HDR_DST | (rf12_hdr & RF12_HDR_MASK)) 00028 00029 // New for mbed 00030 #define RF12_WANTS_ACK_MBED ((radiolink.get_hdr() & RF12_HDR_ACK) && !(radiolink.get_hdr() & RF12_HDR_CTL)) 00031 #define RF12_ACK_REPLY_MBED (radiolink.get_hdr() & RF12_HDR_DST ? RF12_HDR_CTL : \ 00032 RF12_HDR_CTL | RF12_HDR_DST | (radiolink.get_hdr() & RF12_HDR_MASK)) 00033 00034 00035 //enum rfmode_t{RX, TX}; 00036 00037 class RF12B { 00038 public: 00039 /* Constructor */ 00040 RF12B(PinName SDI, 00041 PinName SDO, 00042 PinName SCK, 00043 PinName NCS, 00044 PinName NIRQ); 00045 00046 00047 /* Initialises the RF12B module */ 00048 void init(uint8_t id, uint8_t band, uint8_t g); 00049 00050 00051 /* Returns the packet length if data is available in the receive buffer, 0 otherwise*/ 00052 unsigned int available(); 00053 void rf12_sendStart (uint8_t hdr, const void* ptr, uint8_t len); 00054 void rf12_sendStart2 (uint8_t hdr); 00055 uint8_t rf12_recvDone (void); 00056 void rf12_recvStart (void); 00057 uint16_t check_crc(void); 00058 uint8_t length(void); 00059 uint8_t* get_data(void); 00060 uint8_t get_hdr(void); 00061 00062 protected: 00063 00064 /* SPI module */ 00065 SPI spi; 00066 00067 /* Other digital pins */ 00068 DigitalOut NCS; 00069 InterruptIn NIRQ; 00070 DigitalIn NIRQ_in; 00071 00072 volatile uint16_t rf12_crc; // running crc value 00073 volatile unsigned char rf12_buf[RF_MAX]; // recv/xmit buf, including hdr & crc bytes 00074 volatile uint8_t nodeid; // address of this node 00075 volatile uint8_t group; // network grou 00076 volatile uint8_t rxfill; // number of data bytes in rf12_buf 00077 volatile int8_t rxstate; // current transceiver state 00078 00079 00080 /* Write a command to the RF Module */ 00081 unsigned int writeCmd(unsigned int cmd); 00082 00083 /* Sends a byte of data across RF */ 00084 void send(unsigned char data); 00085 00086 /* Interrupt routine for data reception */ 00087 void rxISR(); 00088 00089 00090 uint16_t _crc16_update(uint16_t crc, uint8_t data); 00091 00092 uint16_t rf12_xfer (uint16_t cmd); 00093 uint8_t rf12_byte(uint8_t out); 00094 }; 00095 00096 #endif /* _RF12B_H */
Generated on Fri Jul 15 2022 11:46:03 by 1.7.2