Class to communicate with ELV(R) MAX! wireless devices with RFM22B-Modules. Based on Library RF22. Initial version unable to send! Only receive! See http://mbed.org/users/charly/notebook/reading-a-max-wireless-window-sensor-with-rfm22-an/
Dependents: RF22_MAX_test_Send
RF22Max.h@0:565a81d6f278, 2013-09-15 (annotated)
- Committer:
- charly
- Date:
- Sun Sep 15 19:33:56 2013 +0000
- Revision:
- 0:565a81d6f278
- Child:
- 1:6321e6784ada
Initial version of RF22Max. Library for communicating with ELV(R) MAX! wireless modules. Based on RF22-Library.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
charly | 0:565a81d6f278 | 1 | #ifndef RF22Max_h |
charly | 0:565a81d6f278 | 2 | #define RF22Max_h |
charly | 0:565a81d6f278 | 3 | |
charly | 0:565a81d6f278 | 4 | #include "mbed.h" |
charly | 0:565a81d6f278 | 5 | #include <RF22.h> |
charly | 0:565a81d6f278 | 6 | |
charly | 0:565a81d6f278 | 7 | // define DEBUG if you want to see bufer-output on pc (defined in main) |
charly | 0:565a81d6f278 | 8 | #ifdef DEBUG |
charly | 0:565a81d6f278 | 9 | extern Serial pc; |
charly | 0:565a81d6f278 | 10 | #endif |
charly | 0:565a81d6f278 | 11 | |
charly | 0:565a81d6f278 | 12 | #define lengthof(x) (sizeof(x) / sizeof(*x)) |
charly | 0:565a81d6f278 | 13 | |
charly | 0:565a81d6f278 | 14 | class RF22Max : public RF22 |
charly | 0:565a81d6f278 | 15 | { |
charly | 0:565a81d6f278 | 16 | public: |
charly | 0:565a81d6f278 | 17 | // a message from the max!-Device |
charly | 0:565a81d6f278 | 18 | typedef struct { |
charly | 0:565a81d6f278 | 19 | uint8_t len; //message-length |
charly | 0:565a81d6f278 | 20 | uint8_t cnt; //message-counter |
charly | 0:565a81d6f278 | 21 | uint8_t flags; // ?? |
charly | 0:565a81d6f278 | 22 | uint8_t type; //message-type |
charly | 0:565a81d6f278 | 23 | char type_str[50]; // type in text |
charly | 0:565a81d6f278 | 24 | uint32_t frm_adr; // unique address of device |
charly | 0:565a81d6f278 | 25 | uint32_t to_adr; // unique address of device |
charly | 0:565a81d6f278 | 26 | uint8_t groupid; //groupid |
charly | 0:565a81d6f278 | 27 | uint8_t payload[50]; // data |
charly | 0:565a81d6f278 | 28 | uint16_t crc; // crc fro the message |
charly | 0:565a81d6f278 | 29 | char state[50]; // state of the device: open, closed, auto, eco,... |
charly | 0:565a81d6f278 | 30 | char battery_state[50]; // Battery-state of the device : good, low |
charly | 0:565a81d6f278 | 31 | } max_message; |
charly | 0:565a81d6f278 | 32 | |
charly | 0:565a81d6f278 | 33 | RF22Max(PinName slaveSelectPin, PinName mosi, PinName miso, PinName sclk, PinName interrupt); |
charly | 0:565a81d6f278 | 34 | |
charly | 0:565a81d6f278 | 35 | boolean init(); |
charly | 0:565a81d6f278 | 36 | |
charly | 0:565a81d6f278 | 37 | boolean recv(uint8_t* buf, uint8_t* len); |
charly | 0:565a81d6f278 | 38 | |
charly | 0:565a81d6f278 | 39 | boolean recv_max(RF22Max::max_message* message); |
charly | 0:565a81d6f278 | 40 | |
charly | 0:565a81d6f278 | 41 | private: |
charly | 0:565a81d6f278 | 42 | |
charly | 0:565a81d6f278 | 43 | #ifdef DEBUG |
charly | 0:565a81d6f278 | 44 | void printHex(uint8_t *buf, size_t len, bool nl); |
charly | 0:565a81d6f278 | 45 | #endif |
charly | 0:565a81d6f278 | 46 | |
charly | 0:565a81d6f278 | 47 | uint16_t calc_crc_step(uint8_t crcData, uint16_t crcReg); |
charly | 0:565a81d6f278 | 48 | |
charly | 0:565a81d6f278 | 49 | uint16_t calc_crc(uint8_t *buf, size_t len); |
charly | 0:565a81d6f278 | 50 | |
charly | 0:565a81d6f278 | 51 | |
charly | 0:565a81d6f278 | 52 | }; // end class RF22Max |
charly | 0:565a81d6f278 | 53 | |
charly | 0:565a81d6f278 | 54 | #endif |