87 lines
2.8 KiB
C++
87 lines
2.8 KiB
C++
#ifndef _KITELIB_XBEE_H
|
|
#define _KITELIB_XBEE_H
|
|
|
|
#include "ISerial.h"
|
|
#include "TypeDef.h"
|
|
|
|
// API reserved characters
|
|
#define XBEE_API_START 0x7E
|
|
#define XBEE_API_ESCAPE 0x7D
|
|
#define XBEE_API_XON 0x11
|
|
#define XBEE_API_XOFF 0x13
|
|
|
|
// API frame IDs
|
|
#define XBEE_API_FRAME_AT_COMMAND 0x08
|
|
#define XBEE_API_FRAME_AT_COMMAND_QUEUE 0x09
|
|
#define XBEE_API_FRAME_ZIGBEE_TRANSMIT_REQUEST 0x10
|
|
#define XBEE_API_FRAME_ZIGBEE_ADDRESS_EXPLICIT 0x11
|
|
#define XBEE_API_FRAME_REMOTE_COMMAND 0x17
|
|
#define XBEE_API_FRAME_CREATE_SOURCE_ROUTE 0x21
|
|
#define XBEE_API_FRAME_AT_COMMAND_RESPONSE 0x88
|
|
#define XBEE_API_FRAME_MODEM_STATUS 0x8A
|
|
#define XBEE_API_FRAME_ZIGBEE_TRANSMIT_STATUS 0x8B
|
|
#define XBEE_API_FRAME_ZIGBEE_RECEIVE_PACKET 0x90
|
|
#define XBEE_API_FRAME_ZIGBEE_EXPLICIT_RX 0x91
|
|
#define XBEE_API_FRAME_ZIGBEE_IO_DATA_SAMPLE_RX 0x92
|
|
#define XBEE_API_FRAME_SENSOR_READ 0x94
|
|
#define XBEE_API_FRAME_NODE_ID 0x95
|
|
#define XBEE_API_FRAME_REMOTE_COMMAND_RESPONSE 0x97
|
|
#define XBEE_API_FRAME_EXTENDED_MODEM_STATUS 0x98
|
|
#define XBEE_API_FRAME_OTA_FW_UPDATE_STATUS 0xA0
|
|
#define XBEE_API_FRAME_ROUTE_RECORD 0xA1
|
|
#define XBEE_API_FRAME_MANY_TO_ONE_ROUTE_REQUEST 0xA3
|
|
|
|
class XBeeSerial: public ISerial {
|
|
public:
|
|
// constructor
|
|
XBeeSerial(Module* mod);
|
|
|
|
// basic methods
|
|
int16_t begin(long speed);
|
|
void reset();
|
|
|
|
// configuration methods
|
|
int16_t setDestinationAddress(const char* destinationAddressHigh, const char* destinationAddressLow);
|
|
int16_t setPanId(const char* panID);
|
|
|
|
private:
|
|
bool enterCmdMode();
|
|
|
|
};
|
|
|
|
class XBee {
|
|
public:
|
|
// constructor
|
|
XBee(Module* mod);
|
|
|
|
// basic methods
|
|
int16_t begin(long speed);
|
|
void reset();
|
|
int16_t transmit(uint8_t* dest, const char* payload, uint8_t radius = 1);
|
|
int16_t transmit(uint8_t* dest, uint8_t* destNetwork, const char* payload, uint8_t radius = 1);
|
|
size_t available();
|
|
String getPacketSource();
|
|
String getPacketData();
|
|
|
|
// configuration methods
|
|
int16_t setPanId(uint8_t* panID);
|
|
|
|
private:
|
|
Module* _mod;
|
|
uint8_t _frameID;
|
|
size_t _frameLength;
|
|
bool _frameHeaderProcessed;
|
|
|
|
char* _packetData;
|
|
uint8_t _packetSource[8];
|
|
|
|
int16_t confirmChanges();
|
|
|
|
void sendApiFrame(uint8_t type, uint8_t id, const char* data);
|
|
void sendApiFrame(uint8_t type, uint8_t id, uint8_t* data, uint16_t length);
|
|
int16_t readApiFrame(uint8_t frameID, uint8_t codePos, uint16_t timeout = 5000);
|
|
|
|
uint16_t getNumBytes(uint32_t timeout = 10000, size_t minBytes = 10);
|
|
};
|
|
|
|
#endif
|