Radio communication with NRF24
ssRadio.h@0:9f5a444886a8, 2017-10-06 (annotated)
- Committer:
- gume
- Date:
- Fri Oct 06 20:17:36 2017 +0000
- Revision:
- 0:9f5a444886a8
Initial release
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
gume | 0:9f5a444886a8 | 1 | #ifndef __SSRADIO_H__ |
gume | 0:9f5a444886a8 | 2 | #define __SSRADIO_H__ |
gume | 0:9f5a444886a8 | 3 | |
gume | 0:9f5a444886a8 | 4 | //#define SERIAL_DEBUG 1 |
gume | 0:9f5a444886a8 | 5 | |
gume | 0:9f5a444886a8 | 6 | #include "RF24.h" |
gume | 0:9f5a444886a8 | 7 | #include "NodeConfig.h" |
gume | 0:9f5a444886a8 | 8 | |
gume | 0:9f5a444886a8 | 9 | #define QUEUELEN 3 |
gume | 0:9f5a444886a8 | 10 | |
gume | 0:9f5a444886a8 | 11 | typedef union _Packet { |
gume | 0:9f5a444886a8 | 12 | struct __attribute__((packed)) { |
gume | 0:9f5a444886a8 | 13 | uint16_t address; // Source address |
gume | 0:9f5a444886a8 | 14 | uint8_t type; // Type. MSB signals extended type (+1 byte). Not implemented yet. |
gume | 0:9f5a444886a8 | 15 | uint8_t counter; // Packet counter |
gume | 0:9f5a444886a8 | 16 | uint8_t payload[28]; |
gume | 0:9f5a444886a8 | 17 | } fields; |
gume | 0:9f5a444886a8 | 18 | uint8_t raw[32]; |
gume | 0:9f5a444886a8 | 19 | } Packet; |
gume | 0:9f5a444886a8 | 20 | |
gume | 0:9f5a444886a8 | 21 | class SSRadio { |
gume | 0:9f5a444886a8 | 22 | |
gume | 0:9f5a444886a8 | 23 | protected: |
gume | 0:9f5a444886a8 | 24 | NodeConfig *config; |
gume | 0:9f5a444886a8 | 25 | RF24 rf24; |
gume | 0:9f5a444886a8 | 26 | |
gume | 0:9f5a444886a8 | 27 | void (*onReceiveData)(uint8_t *data, uint16_t type, uint8_t len); |
gume | 0:9f5a444886a8 | 28 | void (*onConnect)(); |
gume | 0:9f5a444886a8 | 29 | void (*onDisconnect)(); |
gume | 0:9f5a444886a8 | 30 | |
gume | 0:9f5a444886a8 | 31 | uint16_t txCounter; |
gume | 0:9f5a444886a8 | 32 | uint16_t rxCounter; |
gume | 0:9f5a444886a8 | 33 | |
gume | 0:9f5a444886a8 | 34 | uint8_t packetRx[32]; |
gume | 0:9f5a444886a8 | 35 | long lastSync; // millis when the last Sync was received |
gume | 0:9f5a444886a8 | 36 | int8_t sendSlot; // Transmission slot, when synced |
gume | 0:9f5a444886a8 | 37 | int8_t freeSlot; // Free (for everyone) slot, when synced |
gume | 0:9f5a444886a8 | 38 | uint8_t slot_ms; // Slot size in ms |
gume | 0:9f5a444886a8 | 39 | |
gume | 0:9f5a444886a8 | 40 | void receiveSyncFrame(uint8_t *frame, uint8_t size); |
gume | 0:9f5a444886a8 | 41 | void receiveDataFrame(uint8_t *frame, uint8_t size); |
gume | 0:9f5a444886a8 | 42 | |
gume | 0:9f5a444886a8 | 43 | uint16_t myAddress; |
gume | 0:9f5a444886a8 | 44 | uint64_t gatewayAddress; |
gume | 0:9f5a444886a8 | 45 | |
gume | 0:9f5a444886a8 | 46 | uint8_t txQueue[QUEUELEN * 30]; // 1 length + 1 type + 28 payload |
gume | 0:9f5a444886a8 | 47 | uint8_t rxQueue[QUEUELEN * 30]; |
gume | 0:9f5a444886a8 | 48 | uint8_t txQueueLength; |
gume | 0:9f5a444886a8 | 49 | uint8_t rxQueueLength; |
gume | 0:9f5a444886a8 | 50 | |
gume | 0:9f5a444886a8 | 51 | public: |
gume | 0:9f5a444886a8 | 52 | SSRadio(SPI *spi, NodeConfig *nc); |
gume | 0:9f5a444886a8 | 53 | |
gume | 0:9f5a444886a8 | 54 | void init(); |
gume | 0:9f5a444886a8 | 55 | void loop(); |
gume | 0:9f5a444886a8 | 56 | |
gume | 0:9f5a444886a8 | 57 | void useIRQ(uint16_t irqPin); |
gume | 0:9f5a444886a8 | 58 | |
gume | 0:9f5a444886a8 | 59 | bool isRunning(); // RF24 is connected or not |
gume | 0:9f5a444886a8 | 60 | bool isConnected(); // There is a GW nearby |
gume | 0:9f5a444886a8 | 61 | bool isScheduled(); // Sending is scheduled by the GW |
gume | 0:9f5a444886a8 | 62 | bool isAvailableData(); // Available data |
gume | 0:9f5a444886a8 | 63 | |
gume | 0:9f5a444886a8 | 64 | bool sendData(uint8_t *data, uint16_t type, uint8_t len); // Send data to GW |
gume | 0:9f5a444886a8 | 65 | bool instantData(uint8_t *data, uint16_t type, uint8_t len); // Send data to GW immediately |
gume | 0:9f5a444886a8 | 66 | bool receiveData(uint8_t *data, uint16_t &type, uint8_t &len); // Receive data from GW |
gume | 0:9f5a444886a8 | 67 | void setSlotSize(uint8_t slot_ms); |
gume | 0:9f5a444886a8 | 68 | |
gume | 0:9f5a444886a8 | 69 | // Callbacks |
gume | 0:9f5a444886a8 | 70 | void setOnReceiveData(void (*onReceiveData)(uint8_t *data, uint16_t type, uint8_t len)); |
gume | 0:9f5a444886a8 | 71 | void setOnConnect(void (*onConnect)()); |
gume | 0:9f5a444886a8 | 72 | void setOnDisconnect(void (*onDisconnect)()); |
gume | 0:9f5a444886a8 | 73 | }; |
gume | 0:9f5a444886a8 | 74 | |
gume | 0:9f5a444886a8 | 75 | #endif // __SSRADIO_H__ |