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

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?

UserRevisionLine numberNew 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