25 #if defined(ARDUINO) && ARDUINO >= 100
40 #define START_BYTE 0x7e
51 #define MAX_FRAME_DATA_SIZE 110
53 #define BROADCAST_ADDRESS 0xffff
54 #define ZB_BROADCAST_ADDRESS 0xfffe
57 #define ZB_TX_API_LENGTH 12
58 #define TX_16_API_LENGTH 3
59 #define TX_64_API_LENGTH 9
60 #define AT_COMMAND_API_LENGTH 2
61 #define REMOTE_AT_COMMAND_API_LENGTH 13
63 #define PACKET_OVERHEAD_LENGTH 6
65 #define API_ID_INDEX 3
68 #define RX_16_RSSI_OFFSET 2
69 #define RX_64_RSSI_OFFSET 8
71 #define DEFAULT_FRAME_ID 1
72 #define NO_RESPONSE_FRAME_ID 0
76 #define DISABLE_ACK_OPTION 1
77 #define BROADCAST_OPTION 4
80 #define ZB_PACKET_ACKNOWLEDGED 0x01
81 #define ZB_BROADCAST_PACKET 0x02
87 #define TX_64_REQUEST 0x0
88 #define TX_16_REQUEST 0x1
89 #define AT_COMMAND_REQUEST 0x08
90 #define AT_COMMAND_QUEUE_REQUEST 0x09
91 #define REMOTE_AT_REQUEST 0x17
92 #define ZB_TX_REQUEST 0x10
93 #define ZB_EXPLICIT_TX_REQUEST 0x11
94 #define RX_64_RESPONSE 0x80
95 #define RX_16_RESPONSE 0x81
96 #define RX_64_IO_RESPONSE 0x82
97 #define RX_16_IO_RESPONSE 0x83
98 #define AT_RESPONSE 0x88
99 #define TX_STATUS_RESPONSE 0x89
100 #define MODEM_STATUS_RESPONSE 0x8a
101 #define ZB_RX_RESPONSE 0x90
102 #define ZB_EXPLICIT_RX_RESPONSE 0x91
103 #define ZB_TX_STATUS_RESPONSE 0x8b
104 #define ZB_IO_SAMPLE_RESPONSE 0x92
105 #define ZB_IO_NODE_IDENTIFIER_RESPONSE 0x95
106 #define AT_COMMAND_RESPONSE 0x88
107 #define REMOTE_AT_COMMAND_RESPONSE 0x97
114 #define CCA_FAILURE 0x2
115 #define INVALID_DESTINATION_ENDPOINT_SUCCESS 0x15
116 #define NETWORK_ACK_FAILURE 0x21
117 #define NOT_JOINED_TO_NETWORK 0x22
118 #define SELF_ADDRESSED 0x23
119 #define ADDRESS_NOT_FOUND 0x24
120 #define ROUTE_NOT_FOUND 0x25
121 #define PAYLOAD_TOO_LARGE 0x74
124 #define HARDWARE_RESET 0
125 #define WATCHDOG_TIMER_RESET 1
127 #define DISASSOCIATED 3
128 #define SYNCHRONIZATION_LOST 4
129 #define COORDINATOR_REALIGNMENT 5
130 #define COORDINATOR_STARTED 6
132 #define ZB_BROADCAST_RADIUS_MAX_HOPS 0
134 #define ZB_TX_UNICAST 0
135 #define ZB_TX_BROADCAST 8
139 #define AT_INVALID_COMMAND 2
140 #define AT_INVALID_PARAMETER 3
141 #define AT_NO_RESPONSE 4
144 #define CHECKSUM_FAILURE 1
145 #define PACKET_EXCEEDS_BYTE_ARRAY_LENGTH 2
146 #define UNEXPECTED_START_BYTE 3
165 void setApiId(uint8_t apiId);
170 void setMsbLength(uint8_t msbLength);
175 void setLsbLength(uint8_t lsbLength);
180 void setChecksum(uint8_t checksum);
186 void setFrameData(uint8_t* frameDataPtr);
197 void setFrameLength(uint8_t frameLength);
266 void setAvailable(
bool complete);
276 void setErrorCode(uint8_t errorCode);
279 uint8_t* _frameDataPtr;
286 uint8_t _frameLength;
305 void setMsb(uint32_t msb);
306 void setLsb(uint32_t lsb);
328 uint8_t getFrameId();
369 uint16_t getRemoteAddress();
370 uint8_t getTxRetryCount();
371 uint8_t getDeliveryStatus();
372 uint8_t getDiscoveryStatus();
383 uint16_t getRemoteAddress16();
398 bool containsAnalog();
399 bool containsDigital();
418 uint8_t getDigitalMaskMsb();
419 uint8_t getDigitalMaskLsb();
420 uint8_t getAnalogMask();
445 bool isAddressBroadcast();
446 bool isPanBroadcast();
449 virtual uint8_t getRssiOffset() = 0;
458 uint8_t getRssiOffset();
459 uint16_t getRemoteAddress16();
461 uint16_t _remoteAddress;
470 uint8_t getRssiOffset();
486 bool containsAnalog();
487 bool containsDigital();
500 uint16_t
getAnalog(uint8_t pin, uint8_t sample);
506 uint8_t getSampleOffset();
513 uint16_t getRemoteAddress16();
514 uint8_t getRssiOffset();
522 uint8_t getRssiOffset();
649 void setApiId(uint8_t apiId);
689 bool readPacket(
int timeout);
716 uint8_t parseRX16(
BayEOS &client,
int rx_panid);
719 uint8_t getNextFrameId();
720 virtual void i_begin(
long baud) = 0;
721 virtual int i_available() = 0;
722 virtual int read() = 0;
723 virtual void flush() = 0;
724 virtual size_t write(uint8_t val) = 0;
726 void sendByte(uint8_t b,
bool escape);
727 void resetResponse();
734 uint8_t _checksumTotal;
735 uint8_t _nextFrameId;
737 uint8_t _responseFrameData[MAX_FRAME_DATA_SIZE];
742 HardwareSerial* _serial;
750 void setSerial(HardwareSerial &serial){
754 int i_available(
void){
755 return _serial->available();
757 void begin(
long baud){
758 _serial->begin(baud);
760 void i_begin(
long baud){
761 _serial->begin(baud);
767 return _serial->read();
769 size_t write(uint8_t c){
770 return _serial->write(c);
780 PayloadRequest(uint8_t apiId, uint8_t frameId, uint8_t *payload, uint8_t payloadLength);
800 uint8_t* _payloadPtr;
801 uint8_t _payloadLength;
816 Tx16Request(uint16_t addr16, uint8_t option, uint8_t *payload, uint8_t payloadLength, uint8_t frameId);
820 Tx16Request(uint16_t addr16, uint8_t *payload, uint8_t payloadLength);
826 uint16_t getAddress16();
827 void setAddress16(uint16_t addr16);
829 void setOption(uint8_t option);
862 void setOption(uint8_t option);
893 ZBTxRequest(
XBeeAddress64 &addr64, uint16_t addr16, uint8_t broadcastRadius, uint8_t option, uint8_t *payload, uint8_t payloadLength, uint8_t frameId);
900 uint16_t getAddress16();
901 uint8_t getBroadcastRadius();
904 void setAddress16(uint16_t addr16);
905 void setBroadcastRadius(uint8_t broadcastRadius);
906 void setOption(uint8_t option);
914 uint8_t _broadcastRadius;
928 AtCommandRequest(uint8_t *command, uint8_t *commandValue, uint8_t commandValueLength);
931 uint8_t* getCommand();
932 void setCommand(uint8_t* command);
933 uint8_t* getCommandValue();
934 void setCommandValue(uint8_t* command);
935 uint8_t getCommandValueLength();
936 void setCommandValueLength(uint8_t length);
944 uint8_t *_commandValue;
945 uint8_t _commandValueLength;
959 RemoteAtCommandRequest(uint16_t remoteAddress16, uint8_t *command, uint8_t *commandValue, uint8_t commandValueLength);
975 uint16_t getRemoteAddress16();
976 void setRemoteAddress16(uint16_t remoteAddress16);
979 bool getApplyChanges();
980 void setApplyChanges(
bool applyChanges);
987 uint16_t _remoteAddress16;
void clearCommandValue()
Definition: XBee.cpp:1095
uint8_t getFrameData(uint8_t pos)
Definition: XBee.cpp:1084
uint8_t getFrameDataLength()
Definition: XBee.cpp:1104
uint8_t * getCommand()
Definition: XBee.cpp:689
uint8_t getStatus()
Definition: XBee.cpp:693
bool isOk()
Definition: XBee.cpp:710
uint8_t * getValue()
Definition: XBee.cpp:701
uint8_t getValueLength()
Definition: XBee.cpp:697
uint8_t * getPayload()
Definition: XBee.cpp:799
void setPayloadLength(uint8_t payloadLength)
Definition: XBee.cpp:811
void setPayload(uint8_t *payloadPtr)
Definition: XBee.cpp:803
uint8_t getPayloadLength()
Definition: XBee.cpp:807
uint8_t getFrameData(uint8_t pos)
Definition: XBee.cpp:1171
uint8_t getFrameDataLength()
Definition: XBee.cpp:1203
bool isOk()
Definition: XBee.cpp:606
uint16_t getRemoteAddress16()
Definition: XBee.cpp:624
uint8_t * getValue()
Definition: XBee.cpp:615
uint8_t getValueLength()
Definition: XBee.cpp:611
uint8_t * getCommand()
Definition: XBee.cpp:598
XBeeAddress64 & getRemoteAddress64()
Definition: XBee.cpp:628
uint8_t getStatus()
Definition: XBee.cpp:602
virtual uint8_t getDataLength()=0
virtual uint8_t getDataOffset()=0
uint8_t * getData()
Definition: XBee.cpp:654
uint8_t getSampleSize()
Definition: XBee.cpp:303
uint16_t getAnalog(uint8_t pin, uint8_t sample)
Definition: XBee.cpp:423
bool isDigitalEnabled(uint8_t pin)
Definition: XBee.cpp:323
bool isDigitalOn(uint8_t pin, uint8_t sample)
Definition: XBee.cpp:461
bool isAnalogEnabled(uint8_t pin)
Definition: XBee.cpp:319
uint8_t getDataOffset()
Definition: XBee.cpp:557
uint8_t getDataLength()
Definition: XBee.cpp:553
uint8_t getFrameDataLength()
Definition: XBee.cpp:963
Tx16Request()
Definition: XBee.cpp:936
uint8_t getFrameData(uint8_t pos)
Definition: XBee.cpp:950
Tx64Request()
Definition: XBee.cpp:983
uint8_t getFrameDataLength()
Definition: XBee.cpp:1022
uint8_t getFrameData(uint8_t pos)
Definition: XBee.cpp:997
void send(XBeeRequest &request)
Definition: XBee.cpp:1398
void readPacketUntilAvailable()
Definition: XBee.cpp:1260
uint16_t getPANID(void)
Definition: XBee.cpp:1451
XBeeResponse & getResponse()
Definition: XBee.cpp:1245
virtual uint8_t getFrameDataLength()=0
uint8_t getFrameId()
Definition: XBee.cpp:769
uint8_t getApiId()
Definition: XBee.cpp:773
virtual uint8_t getFrameData(uint8_t pos)=0
void setFrameId(uint8_t frameId)
Definition: XBee.cpp:765
XBeeRequest(uint8_t apiId, uint8_t frameId)
Definition: XBee.cpp:760
XBeeResponse()
Definition: XBee.cpp:32
void getZBRxIoSampleResponse(XBeeResponse &response)
Definition: XBee.cpp:257
void getZBTxStatusResponse(XBeeResponse &response)
Definition: XBee.cpp:133
uint16_t getPacketLength()
Definition: XBee.cpp:723
uint8_t getErrorCode()
Definition: XBee.cpp:88
void getTxStatusResponse(XBeeResponse &response)
Definition: XBee.cpp:528
uint8_t getApiId()
Definition: XBee.cpp:36
void getZBRxResponse(XBeeResponse &response)
Definition: XBee.cpp:167
void getAtCommandResponse(XBeeResponse &responses)
Definition: XBee.cpp:714
uint8_t getFrameDataLength()
Definition: XBee.cpp:68
bool isError()
Definition: XBee.cpp:84
void getRx64Response(XBeeResponse &response)
Definition: XBee.cpp:580
void reset()
Definition: XBee.cpp:741
uint8_t getChecksum()
Definition: XBee.cpp:60
uint8_t getMsbLength()
Definition: XBee.cpp:44
bool isAvailable()
Definition: XBee.cpp:76
void getRx16Response(XBeeResponse &response)
Definition: XBee.cpp:565
uint8_t getLsbLength()
Definition: XBee.cpp:52
void getModemStatusResponse(XBeeResponse &response)
Definition: XBee.cpp:675
uint8_t * getFrameData()
Definition: XBee.cpp:727
void getRx64IoSampleResponse(XBeeResponse &response)
Definition: XBee.cpp:506
void getRx16IoSampleResponse(XBeeResponse &response)
Definition: XBee.cpp:486
void init()
Definition: XBee.cpp:735
void getRemoteAtCommandResponse(XBeeResponse &response)
Definition: XBee.cpp:632
bool isDigitalEnabled(uint8_t pin)
Definition: XBee.cpp:211
uint16_t getAnalog(uint8_t pin)
Definition: XBee.cpp:220
bool isDigitalOn(uint8_t pin)
Definition: XBee.cpp:245
bool isAnalogEnabled(uint8_t pin)
Definition: XBee.cpp:207
uint8_t getDataLength()
Definition: XBee.cpp:159
uint8_t getDataOffset()
Definition: XBee.cpp:155
ZBTxRequest()
Definition: XBee.cpp:848
uint8_t getFrameDataLength()
Definition: XBee.cpp:896
uint8_t getFrameData(uint8_t pos)
Definition: XBee.cpp:866