XBee and XBee-PRO ZigBee RF modules provide cost-effective wireless connectivity to electronic devices. They are interoperable with other ZigBee PRO feature set devices, including devices from other vendors.
Core/CoreAPI.h@1:3dc0ec2f9fd6, 2015-10-22 (annotated)
- Committer:
- yangcq88517
- Date:
- Thu Oct 22 20:02:11 2015 +0000
- Revision:
- 1:3dc0ec2f9fd6
- Parent:
- 0:837e6c48e90d
- Child:
- 3:6b205ec8624b
bug fix
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
yangcq88517 | 0:837e6c48e90d | 1 | #ifndef UK_AC_HERTS_SMARTLAB_XBEE_CoreAPI |
yangcq88517 | 0:837e6c48e90d | 2 | #define UK_AC_HERTS_SMARTLAB_XBEE_CoreAPI |
yangcq88517 | 0:837e6c48e90d | 3 | |
yangcq88517 | 0:837e6c48e90d | 4 | #include "APIFrame.h" |
yangcq88517 | 0:837e6c48e90d | 5 | #include "ISerial.h" |
yangcq88517 | 0:837e6c48e90d | 6 | |
yangcq88517 | 0:837e6c48e90d | 7 | #include "ATCommandRequest.h" |
yangcq88517 | 0:837e6c48e90d | 8 | #include "CreateSourceRouteRequest.h" |
yangcq88517 | 0:837e6c48e90d | 9 | #include "IOCDetectionConfigRequest.h" |
yangcq88517 | 0:837e6c48e90d | 10 | #include "PinConfigurationRequest.h" |
yangcq88517 | 0:837e6c48e90d | 11 | #include "RemoteATCommandRequest.h" |
yangcq88517 | 0:837e6c48e90d | 12 | #include "RemoteIODetectionConfigRequest.h" |
yangcq88517 | 0:837e6c48e90d | 13 | #include "RemotePinConfigurationRequest.h" |
yangcq88517 | 0:837e6c48e90d | 14 | #include "XBeeTx16Request.h" |
yangcq88517 | 0:837e6c48e90d | 15 | #include "XBeeTx64Request.h" |
yangcq88517 | 0:837e6c48e90d | 16 | #include "ZigBeeExplicitTxRequest.h" |
yangcq88517 | 0:837e6c48e90d | 17 | #include "ZigBeeTxRequest.h" |
yangcq88517 | 0:837e6c48e90d | 18 | |
yangcq88517 | 0:837e6c48e90d | 19 | #include "XBeeRx64Indicator.h" |
yangcq88517 | 0:837e6c48e90d | 20 | #include "XBeeRx16Indicator.h" |
yangcq88517 | 0:837e6c48e90d | 21 | #include "XBeeRx64IOSampleIndicator.h" |
yangcq88517 | 0:837e6c48e90d | 22 | #include "XBeeRx16IOSampleIndicator.h" |
yangcq88517 | 0:837e6c48e90d | 23 | #include "XBeeTxStatusIndicator.h" |
yangcq88517 | 0:837e6c48e90d | 24 | #include "ATCommandIndicator.h" |
yangcq88517 | 0:837e6c48e90d | 25 | #include "ModemStatusIndicator.h" |
yangcq88517 | 0:837e6c48e90d | 26 | #include "ZigBeeTxStatusIndicator.h" |
yangcq88517 | 0:837e6c48e90d | 27 | #include "ZigBeeRxIndicator.h" |
yangcq88517 | 0:837e6c48e90d | 28 | #include "ZigBeeExplicitRxIndicator.h" |
yangcq88517 | 0:837e6c48e90d | 29 | #include "ZigBeeIOSampleIndicator.h" |
yangcq88517 | 0:837e6c48e90d | 30 | #include "SensorReadIndicator.h" |
yangcq88517 | 0:837e6c48e90d | 31 | #include "NodeIdentificationIndicator.h" |
yangcq88517 | 0:837e6c48e90d | 32 | #include "RemoteCommandIndicator.h" |
yangcq88517 | 0:837e6c48e90d | 33 | #include "RouteRecordIndicator.h" |
yangcq88517 | 0:837e6c48e90d | 34 | #include "ManyToOneRouteIndicator.h" |
yangcq88517 | 0:837e6c48e90d | 35 | |
yangcq88517 | 1:3dc0ec2f9fd6 | 36 | /// The core API class which responseable for processing frame data, but not the serial operation. |
yangcq88517 | 0:837e6c48e90d | 37 | class CoreAPI |
yangcq88517 | 0:837e6c48e90d | 38 | { |
yangcq88517 | 0:837e6c48e90d | 39 | private: |
yangcq88517 | 0:837e6c48e90d | 40 | static const char KEY = 0x7E; |
yangcq88517 | 0:837e6c48e90d | 41 | static const char ESCAPED = 0x7D; |
yangcq88517 | 0:837e6c48e90d | 42 | static const char XON = 0x11; |
yangcq88517 | 0:837e6c48e90d | 43 | static const char XOFF = 0x13; |
yangcq88517 | 0:837e6c48e90d | 44 | static const int INITIAL_FRAME_LENGTH = 100; |
yangcq88517 | 0:837e6c48e90d | 45 | |
yangcq88517 | 0:837e6c48e90d | 46 | ISerial * serial; |
yangcq88517 | 0:837e6c48e90d | 47 | bool isEscapeMode; |
yangcq88517 | 0:837e6c48e90d | 48 | bool isRunning; |
yangcq88517 | 0:837e6c48e90d | 49 | bool isChecksum; |
yangcq88517 | 0:837e6c48e90d | 50 | |
yangcq88517 | 0:837e6c48e90d | 51 | APIFrame * msg; |
yangcq88517 | 0:837e6c48e90d | 52 | XBeeRx64Indicator xBeeRx64Indicator; |
yangcq88517 | 0:837e6c48e90d | 53 | XBeeRx16Indicator xBeeRx16Indicator; |
yangcq88517 | 0:837e6c48e90d | 54 | XBeeRx64IOSampleIndicator xBeeRx64IOSampleIndicator; |
yangcq88517 | 0:837e6c48e90d | 55 | XBeeRx16IOSampleIndicator xBeeRx16IOSampleIndicator; |
yangcq88517 | 0:837e6c48e90d | 56 | XBeeTxStatusIndicator xBeeTxStatusIndicator; |
yangcq88517 | 0:837e6c48e90d | 57 | ATCommandIndicator aTCommandIndicator; |
yangcq88517 | 0:837e6c48e90d | 58 | ModemStatusIndicator modemStatusIndicator; |
yangcq88517 | 0:837e6c48e90d | 59 | ZigBeeTxStatusIndicator zigBeeTxStatusIndicator; |
yangcq88517 | 0:837e6c48e90d | 60 | ZigBeeRxIndicator zigBeeRxIndicator; |
yangcq88517 | 0:837e6c48e90d | 61 | ZigBeeExplicitRxIndicator zigBeeExplicitRxIndicator; |
yangcq88517 | 0:837e6c48e90d | 62 | ZigBeeIOSampleIndicator zigBeeIOSampleIndicator; |
yangcq88517 | 0:837e6c48e90d | 63 | SensorReadIndicator sensorReadIndicator; |
yangcq88517 | 0:837e6c48e90d | 64 | NodeIdentificationIndicator nodeIdentificationIndicator; |
yangcq88517 | 0:837e6c48e90d | 65 | RemoteCommandIndicator remoteCommandIndicator; |
yangcq88517 | 0:837e6c48e90d | 66 | RouteRecordIndicator routeRecordIndicator; |
yangcq88517 | 0:837e6c48e90d | 67 | ManyToOneRouteIndicator manyToOneRouteIndicator; |
yangcq88517 | 0:837e6c48e90d | 68 | |
yangcq88517 | 0:837e6c48e90d | 69 | protected: |
yangcq88517 | 0:837e6c48e90d | 70 | |
yangcq88517 | 1:3dc0ec2f9fd6 | 71 | /** Read one byte payload, which allready handle the escape char, if less than 0 means error occured |
yangcq88517 | 1:3dc0ec2f9fd6 | 72 | * @returns if less than 0 means error occured. |
yangcq88517 | 1:3dc0ec2f9fd6 | 73 | */ |
yangcq88517 | 0:837e6c48e90d | 74 | int readByte(); |
yangcq88517 | 0:837e6c48e90d | 75 | |
yangcq88517 | 1:3dc0ec2f9fd6 | 76 | /** Write one byte to the payload, which allready handle the escape char. |
yangcq88517 | 1:3dc0ec2f9fd6 | 77 | * @param data one byte [0x00-0xFF] |
yangcq88517 | 1:3dc0ec2f9fd6 | 78 | */ |
yangcq88517 | 0:837e6c48e90d | 79 | void writeByte(char data); |
yangcq88517 | 1:3dc0ec2f9fd6 | 80 | |
yangcq88517 | 1:3dc0ec2f9fd6 | 81 | /// Processing API frame. |
yangcq88517 | 0:837e6c48e90d | 82 | void packetProcess(); |
yangcq88517 | 1:3dc0ec2f9fd6 | 83 | |
yangcq88517 | 1:3dc0ec2f9fd6 | 84 | /// Get the next avaliable API frame length. |
yangcq88517 | 0:837e6c48e90d | 85 | int getLength(); |
yangcq88517 | 1:3dc0ec2f9fd6 | 86 | |
yangcq88517 | 1:3dc0ec2f9fd6 | 87 | /// Read the next avaliable API frame data. |
yangcq88517 | 0:837e6c48e90d | 88 | void readPayLoad(int length); |
yangcq88517 | 0:837e6c48e90d | 89 | |
yangcq88517 | 0:837e6c48e90d | 90 | public: |
yangcq88517 | 0:837e6c48e90d | 91 | CoreAPI(ISerial * serial, bool escape); |
yangcq88517 | 0:837e6c48e90d | 92 | |
yangcq88517 | 0:837e6c48e90d | 93 | ~CoreAPI(); |
yangcq88517 | 0:837e6c48e90d | 94 | |
yangcq88517 | 1:3dc0ec2f9fd6 | 95 | /** Set whether to verify checksum during receiving, default is not verify. |
yangcq88517 | 1:3dc0ec2f9fd6 | 96 | * |
yangcq88517 | 1:3dc0ec2f9fd6 | 97 | * @param isCheck true only to process API frame when checksum matches. |
yangcq88517 | 1:3dc0ec2f9fd6 | 98 | * false ignore the checksum. |
yangcq88517 | 1:3dc0ec2f9fd6 | 99 | */ |
yangcq88517 | 0:837e6c48e90d | 100 | void setVerifyChecksum(bool isCheck); |
yangcq88517 | 0:837e6c48e90d | 101 | |
yangcq88517 | 1:3dc0ec2f9fd6 | 102 | /// Start send and process response, must call this method before starting processing data. |
yangcq88517 | 0:837e6c48e90d | 103 | void start(); |
yangcq88517 | 0:837e6c48e90d | 104 | |
yangcq88517 | 1:3dc0ec2f9fd6 | 105 | /// Stop the serial port. |
yangcq88517 | 0:837e6c48e90d | 106 | void stop(); |
yangcq88517 | 0:837e6c48e90d | 107 | |
yangcq88517 | 1:3dc0ec2f9fd6 | 108 | /** A general function to send frame out |
yangcq88517 | 1:3dc0ec2f9fd6 | 109 | * |
yangcq88517 | 1:3dc0ec2f9fd6 | 110 | * @param request any API frame |
yangcq88517 | 1:3dc0ec2f9fd6 | 111 | */ |
yangcq88517 | 0:837e6c48e90d | 112 | void send(APIFrame * request); |
yangcq88517 | 0:837e6c48e90d | 113 | |
yangcq88517 | 1:3dc0ec2f9fd6 | 114 | /** Read the next avaliable API frame, and the type of fram can be retrieved from getFrameType(). |
yangcq88517 | 1:3dc0ec2f9fd6 | 115 | * |
yangcq88517 | 1:3dc0ec2f9fd6 | 116 | * @returns a API frame, NULL means data not avaliable. |
yangcq88517 | 1:3dc0ec2f9fd6 | 117 | */ |
yangcq88517 | 0:837e6c48e90d | 118 | APIFrame * getResponse(); |
yangcq88517 | 0:837e6c48e90d | 119 | |
yangcq88517 | 1:3dc0ec2f9fd6 | 120 | /** Read the next avaliable API frame. |
yangcq88517 | 1:3dc0ec2f9fd6 | 121 | * |
yangcq88517 | 1:3dc0ec2f9fd6 | 122 | * @returns a API frame, NULL means data not avaliable. |
yangcq88517 | 1:3dc0ec2f9fd6 | 123 | */ |
yangcq88517 | 0:837e6c48e90d | 124 | XBeeRx64Indicator * getXBeeRx64(); |
yangcq88517 | 0:837e6c48e90d | 125 | |
yangcq88517 | 1:3dc0ec2f9fd6 | 126 | /** Read the next avaliable API frame. |
yangcq88517 | 1:3dc0ec2f9fd6 | 127 | * |
yangcq88517 | 1:3dc0ec2f9fd6 | 128 | * @returns a API frame, NULL means data not avaliable. |
yangcq88517 | 1:3dc0ec2f9fd6 | 129 | */ |
yangcq88517 | 0:837e6c48e90d | 130 | XBeeRx16Indicator * getXBeeRx16(); |
yangcq88517 | 0:837e6c48e90d | 131 | |
yangcq88517 | 1:3dc0ec2f9fd6 | 132 | /** Read the next avaliable API frame. |
yangcq88517 | 1:3dc0ec2f9fd6 | 133 | * |
yangcq88517 | 1:3dc0ec2f9fd6 | 134 | * @returns a API frame, NULL means data not avaliable. |
yangcq88517 | 1:3dc0ec2f9fd6 | 135 | */ |
yangcq88517 | 0:837e6c48e90d | 136 | XBeeRx64IOSampleIndicator * getXBeeRx64IOSample(); |
yangcq88517 | 0:837e6c48e90d | 137 | |
yangcq88517 | 1:3dc0ec2f9fd6 | 138 | /** Read the next avaliable API frame. |
yangcq88517 | 1:3dc0ec2f9fd6 | 139 | * |
yangcq88517 | 1:3dc0ec2f9fd6 | 140 | * @returns a API frame, NULL means data not avaliable. |
yangcq88517 | 1:3dc0ec2f9fd6 | 141 | */ |
yangcq88517 | 0:837e6c48e90d | 142 | XBeeRx16IOSampleIndicator * getXBeeRx16IOSample(); |
yangcq88517 | 0:837e6c48e90d | 143 | |
yangcq88517 | 1:3dc0ec2f9fd6 | 144 | /** Read the next avaliable API frame. |
yangcq88517 | 1:3dc0ec2f9fd6 | 145 | * |
yangcq88517 | 1:3dc0ec2f9fd6 | 146 | * @returns a API frame, NULL means data not avaliable. |
yangcq88517 | 1:3dc0ec2f9fd6 | 147 | */ |
yangcq88517 | 0:837e6c48e90d | 148 | XBeeTxStatusIndicator * getXBeeTxStatus(); |
yangcq88517 | 0:837e6c48e90d | 149 | |
yangcq88517 | 1:3dc0ec2f9fd6 | 150 | /** Read the next avaliable API frame. |
yangcq88517 | 1:3dc0ec2f9fd6 | 151 | * |
yangcq88517 | 1:3dc0ec2f9fd6 | 152 | * @returns a API frame, NULL means data not avaliable. |
yangcq88517 | 1:3dc0ec2f9fd6 | 153 | */ |
yangcq88517 | 0:837e6c48e90d | 154 | ATCommandIndicator * getATCommand(); |
yangcq88517 | 0:837e6c48e90d | 155 | |
yangcq88517 | 1:3dc0ec2f9fd6 | 156 | /** Read the next avaliable API frame. |
yangcq88517 | 1:3dc0ec2f9fd6 | 157 | * |
yangcq88517 | 1:3dc0ec2f9fd6 | 158 | * @returns a API frame, NULL means data not avaliable. |
yangcq88517 | 1:3dc0ec2f9fd6 | 159 | */ |
yangcq88517 | 0:837e6c48e90d | 160 | ModemStatusIndicator * getModemStatus(); |
yangcq88517 | 0:837e6c48e90d | 161 | |
yangcq88517 | 1:3dc0ec2f9fd6 | 162 | /** Read the next avaliable API frame. |
yangcq88517 | 1:3dc0ec2f9fd6 | 163 | * |
yangcq88517 | 1:3dc0ec2f9fd6 | 164 | * @returns a API frame, NULL means data not avaliable. |
yangcq88517 | 1:3dc0ec2f9fd6 | 165 | */ |
yangcq88517 | 0:837e6c48e90d | 166 | ZigBeeTxStatusIndicator * getZigBeeTxStatus(); |
yangcq88517 | 0:837e6c48e90d | 167 | |
yangcq88517 | 1:3dc0ec2f9fd6 | 168 | /** Read the next avaliable API frame. |
yangcq88517 | 1:3dc0ec2f9fd6 | 169 | * |
yangcq88517 | 1:3dc0ec2f9fd6 | 170 | * @returns a API frame, NULL means data not avaliable. |
yangcq88517 | 1:3dc0ec2f9fd6 | 171 | */ |
yangcq88517 | 0:837e6c48e90d | 172 | ZigBeeRxIndicator * getZigBeeRx(); |
yangcq88517 | 0:837e6c48e90d | 173 | |
yangcq88517 | 1:3dc0ec2f9fd6 | 174 | /** Read the next avaliable API frame. |
yangcq88517 | 1:3dc0ec2f9fd6 | 175 | * |
yangcq88517 | 1:3dc0ec2f9fd6 | 176 | * @returns a API frame, NULL means data not avaliable. |
yangcq88517 | 1:3dc0ec2f9fd6 | 177 | */ |
yangcq88517 | 0:837e6c48e90d | 178 | ZigBeeExplicitRxIndicator * getZigBeeExplicitRx(); |
yangcq88517 | 0:837e6c48e90d | 179 | |
yangcq88517 | 1:3dc0ec2f9fd6 | 180 | /** Read the next avaliable API frame. |
yangcq88517 | 1:3dc0ec2f9fd6 | 181 | * |
yangcq88517 | 1:3dc0ec2f9fd6 | 182 | * @returns a API frame, NULL means data not avaliable. |
yangcq88517 | 1:3dc0ec2f9fd6 | 183 | */ |
yangcq88517 | 0:837e6c48e90d | 184 | ZigBeeIOSampleIndicator * getZigBeeIOSample(); |
yangcq88517 | 0:837e6c48e90d | 185 | |
yangcq88517 | 1:3dc0ec2f9fd6 | 186 | /** Read the next avaliable API frame. |
yangcq88517 | 1:3dc0ec2f9fd6 | 187 | * |
yangcq88517 | 1:3dc0ec2f9fd6 | 188 | * @returns a API frame, NULL means data not avaliable. |
yangcq88517 | 1:3dc0ec2f9fd6 | 189 | */ |
yangcq88517 | 0:837e6c48e90d | 190 | SensorReadIndicator * getSensorRead(); |
yangcq88517 | 0:837e6c48e90d | 191 | |
yangcq88517 | 1:3dc0ec2f9fd6 | 192 | /** Read the next avaliable API frame. |
yangcq88517 | 1:3dc0ec2f9fd6 | 193 | * |
yangcq88517 | 1:3dc0ec2f9fd6 | 194 | * @returns a API frame, NULL means data not avaliable. |
yangcq88517 | 1:3dc0ec2f9fd6 | 195 | */ |
yangcq88517 | 0:837e6c48e90d | 196 | NodeIdentificationIndicator * getNodeIdentification(); |
yangcq88517 | 0:837e6c48e90d | 197 | |
yangcq88517 | 1:3dc0ec2f9fd6 | 198 | /** Read the next avaliable API frame. |
yangcq88517 | 1:3dc0ec2f9fd6 | 199 | * |
yangcq88517 | 1:3dc0ec2f9fd6 | 200 | * @returns a API frame, NULL means data not avaliable. |
yangcq88517 | 1:3dc0ec2f9fd6 | 201 | */ |
yangcq88517 | 0:837e6c48e90d | 202 | RemoteCommandIndicator * getRemoteCommand(); |
yangcq88517 | 0:837e6c48e90d | 203 | |
yangcq88517 | 1:3dc0ec2f9fd6 | 204 | /** Read the next avaliable API frame. |
yangcq88517 | 1:3dc0ec2f9fd6 | 205 | * |
yangcq88517 | 1:3dc0ec2f9fd6 | 206 | * @returns a API frame, NULL means data not avaliable. |
yangcq88517 | 1:3dc0ec2f9fd6 | 207 | */ |
yangcq88517 | 0:837e6c48e90d | 208 | RouteRecordIndicator * getRouteRecord(); |
yangcq88517 | 0:837e6c48e90d | 209 | |
yangcq88517 | 1:3dc0ec2f9fd6 | 210 | /** Read the next avaliable API frame. |
yangcq88517 | 1:3dc0ec2f9fd6 | 211 | * |
yangcq88517 | 1:3dc0ec2f9fd6 | 212 | * @returns a API frame, NULL means data not avaliable. |
yangcq88517 | 1:3dc0ec2f9fd6 | 213 | */ |
yangcq88517 | 0:837e6c48e90d | 214 | ManyToOneRouteIndicator * getManyToOneRoute(); |
yangcq88517 | 0:837e6c48e90d | 215 | }; |
yangcq88517 | 0:837e6c48e90d | 216 | |
yangcq88517 | 0:837e6c48e90d | 217 | |
yangcq88517 | 0:837e6c48e90d | 218 | |
yangcq88517 | 0:837e6c48e90d | 219 | |
yangcq88517 | 0:837e6c48e90d | 220 | |
yangcq88517 | 0:837e6c48e90d | 221 | |
yangcq88517 | 0:837e6c48e90d | 222 | |
yangcq88517 | 0:837e6c48e90d | 223 | |
yangcq88517 | 0:837e6c48e90d | 224 | |
yangcq88517 | 0:837e6c48e90d | 225 | |
yangcq88517 | 0:837e6c48e90d | 226 | |
yangcq88517 | 0:837e6c48e90d | 227 | |
yangcq88517 | 0:837e6c48e90d | 228 | |
yangcq88517 | 0:837e6c48e90d | 229 | |
yangcq88517 | 0:837e6c48e90d | 230 | |
yangcq88517 | 0:837e6c48e90d | 231 | |
yangcq88517 | 0:837e6c48e90d | 232 | |
yangcq88517 | 0:837e6c48e90d | 233 | |
yangcq88517 | 0:837e6c48e90d | 234 | |
yangcq88517 | 0:837e6c48e90d | 235 | |
yangcq88517 | 0:837e6c48e90d | 236 | #endif |