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.

Dependencies:   BufferedArray

Dependents:   MBEDminiproject

Committer:
yangcq88517
Date:
Mon Oct 26 18:04:12 2015 +0000
Revision:
3:6b205ec8624b
Parent:
1:3dc0ec2f9fd6
Child:
4:a0f1fba6c2fb
bug fix add new functions

Who changed what in which revision?

UserRevisionLine numberNew 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 3:6b205ec8624b 50 Timer timer;
yangcq88517 3:6b205ec8624b 51
yangcq88517 3:6b205ec8624b 52 char waitFrameID;
yangcq88517 0:837e6c48e90d 53
yangcq88517 0:837e6c48e90d 54 APIFrame * msg;
yangcq88517 0:837e6c48e90d 55 XBeeRx64Indicator xBeeRx64Indicator;
yangcq88517 0:837e6c48e90d 56 XBeeRx16Indicator xBeeRx16Indicator;
yangcq88517 0:837e6c48e90d 57 XBeeRx64IOSampleIndicator xBeeRx64IOSampleIndicator;
yangcq88517 0:837e6c48e90d 58 XBeeRx16IOSampleIndicator xBeeRx16IOSampleIndicator;
yangcq88517 0:837e6c48e90d 59 XBeeTxStatusIndicator xBeeTxStatusIndicator;
yangcq88517 0:837e6c48e90d 60 ATCommandIndicator aTCommandIndicator;
yangcq88517 0:837e6c48e90d 61 ModemStatusIndicator modemStatusIndicator;
yangcq88517 0:837e6c48e90d 62 ZigBeeTxStatusIndicator zigBeeTxStatusIndicator;
yangcq88517 0:837e6c48e90d 63 ZigBeeRxIndicator zigBeeRxIndicator;
yangcq88517 0:837e6c48e90d 64 ZigBeeExplicitRxIndicator zigBeeExplicitRxIndicator;
yangcq88517 0:837e6c48e90d 65 ZigBeeIOSampleIndicator zigBeeIOSampleIndicator;
yangcq88517 0:837e6c48e90d 66 SensorReadIndicator sensorReadIndicator;
yangcq88517 0:837e6c48e90d 67 NodeIdentificationIndicator nodeIdentificationIndicator;
yangcq88517 0:837e6c48e90d 68 RemoteCommandIndicator remoteCommandIndicator;
yangcq88517 0:837e6c48e90d 69 RouteRecordIndicator routeRecordIndicator;
yangcq88517 0:837e6c48e90d 70 ManyToOneRouteIndicator manyToOneRouteIndicator;
yangcq88517 0:837e6c48e90d 71
yangcq88517 0:837e6c48e90d 72 protected:
yangcq88517 0:837e6c48e90d 73
yangcq88517 1:3dc0ec2f9fd6 74 /** Read one byte payload, which allready handle the escape char, if less than 0 means error occured
yangcq88517 1:3dc0ec2f9fd6 75 * @returns if less than 0 means error occured.
yangcq88517 1:3dc0ec2f9fd6 76 */
yangcq88517 0:837e6c48e90d 77 int readByte();
yangcq88517 0:837e6c48e90d 78
yangcq88517 1:3dc0ec2f9fd6 79 /** Write one byte to the payload, which allready handle the escape char.
yangcq88517 1:3dc0ec2f9fd6 80 * @param data one byte [0x00-0xFF]
yangcq88517 1:3dc0ec2f9fd6 81 */
yangcq88517 0:837e6c48e90d 82 void writeByte(char data);
yangcq88517 3:6b205ec8624b 83
yangcq88517 1:3dc0ec2f9fd6 84 /// Processing API frame.
yangcq88517 0:837e6c48e90d 85 void packetProcess();
yangcq88517 3:6b205ec8624b 86
yangcq88517 1:3dc0ec2f9fd6 87 /// Get the next avaliable API frame length.
yangcq88517 0:837e6c48e90d 88 int getLength();
yangcq88517 3:6b205ec8624b 89
yangcq88517 1:3dc0ec2f9fd6 90 /// Read the next avaliable API frame data.
yangcq88517 0:837e6c48e90d 91 void readPayLoad(int length);
yangcq88517 0:837e6c48e90d 92
yangcq88517 0:837e6c48e90d 93 public:
yangcq88517 0:837e6c48e90d 94 CoreAPI(ISerial * serial, bool escape);
yangcq88517 0:837e6c48e90d 95
yangcq88517 0:837e6c48e90d 96 ~CoreAPI();
yangcq88517 0:837e6c48e90d 97
yangcq88517 1:3dc0ec2f9fd6 98 /** Set whether to verify checksum during receiving, default is not verify.
yangcq88517 1:3dc0ec2f9fd6 99 *
yangcq88517 1:3dc0ec2f9fd6 100 * @param isCheck true only to process API frame when checksum matches.
yangcq88517 1:3dc0ec2f9fd6 101 * false ignore the checksum.
yangcq88517 1:3dc0ec2f9fd6 102 */
yangcq88517 0:837e6c48e90d 103 void setVerifyChecksum(bool isCheck);
yangcq88517 0:837e6c48e90d 104
yangcq88517 1:3dc0ec2f9fd6 105 /// Start send and process response, must call this method before starting processing data.
yangcq88517 0:837e6c48e90d 106 void start();
yangcq88517 0:837e6c48e90d 107
yangcq88517 1:3dc0ec2f9fd6 108 /// Stop the serial port.
yangcq88517 0:837e6c48e90d 109 void stop();
yangcq88517 0:837e6c48e90d 110
yangcq88517 1:3dc0ec2f9fd6 111 /** A general function to send frame out
yangcq88517 1:3dc0ec2f9fd6 112 *
yangcq88517 1:3dc0ec2f9fd6 113 * @param request any API frame
yangcq88517 1:3dc0ec2f9fd6 114 */
yangcq88517 0:837e6c48e90d 115 void send(APIFrame * request);
yangcq88517 0:837e6c48e90d 116
yangcq88517 1:3dc0ec2f9fd6 117 /** Read the next avaliable API frame, and the type of fram can be retrieved from getFrameType().
yangcq88517 1:3dc0ec2f9fd6 118 *
yangcq88517 1:3dc0ec2f9fd6 119 * @returns a API frame, NULL means data not avaliable.
yangcq88517 1:3dc0ec2f9fd6 120 */
yangcq88517 0:837e6c48e90d 121 APIFrame * getResponse();
yangcq88517 0:837e6c48e90d 122
yangcq88517 1:3dc0ec2f9fd6 123 /** Read the next avaliable API frame.
yangcq88517 1:3dc0ec2f9fd6 124 *
yangcq88517 1:3dc0ec2f9fd6 125 * @returns a API frame, NULL means data not avaliable.
yangcq88517 1:3dc0ec2f9fd6 126 */
yangcq88517 0:837e6c48e90d 127 XBeeRx64Indicator * getXBeeRx64();
yangcq88517 0:837e6c48e90d 128
yangcq88517 1:3dc0ec2f9fd6 129 /** Read the next avaliable API frame.
yangcq88517 1:3dc0ec2f9fd6 130 *
yangcq88517 1:3dc0ec2f9fd6 131 * @returns a API frame, NULL means data not avaliable.
yangcq88517 1:3dc0ec2f9fd6 132 */
yangcq88517 0:837e6c48e90d 133 XBeeRx16Indicator * getXBeeRx16();
yangcq88517 0:837e6c48e90d 134
yangcq88517 1:3dc0ec2f9fd6 135 /** Read the next avaliable API frame.
yangcq88517 1:3dc0ec2f9fd6 136 *
yangcq88517 1:3dc0ec2f9fd6 137 * @returns a API frame, NULL means data not avaliable.
yangcq88517 1:3dc0ec2f9fd6 138 */
yangcq88517 0:837e6c48e90d 139 XBeeRx64IOSampleIndicator * getXBeeRx64IOSample();
yangcq88517 0:837e6c48e90d 140
yangcq88517 1:3dc0ec2f9fd6 141 /** Read the next avaliable API frame.
yangcq88517 1:3dc0ec2f9fd6 142 *
yangcq88517 1:3dc0ec2f9fd6 143 * @returns a API frame, NULL means data not avaliable.
yangcq88517 1:3dc0ec2f9fd6 144 */
yangcq88517 0:837e6c48e90d 145 XBeeRx16IOSampleIndicator * getXBeeRx16IOSample();
yangcq88517 0:837e6c48e90d 146
yangcq88517 1:3dc0ec2f9fd6 147 /** Read the next avaliable API frame.
yangcq88517 1:3dc0ec2f9fd6 148 *
yangcq88517 1:3dc0ec2f9fd6 149 * @returns a API frame, NULL means data not avaliable.
yangcq88517 1:3dc0ec2f9fd6 150 */
yangcq88517 0:837e6c48e90d 151 XBeeTxStatusIndicator * getXBeeTxStatus();
yangcq88517 0:837e6c48e90d 152
yangcq88517 1:3dc0ec2f9fd6 153 /** Read the next avaliable API frame.
yangcq88517 1:3dc0ec2f9fd6 154 *
yangcq88517 1:3dc0ec2f9fd6 155 * @returns a API frame, NULL means data not avaliable.
yangcq88517 1:3dc0ec2f9fd6 156 */
yangcq88517 0:837e6c48e90d 157 ATCommandIndicator * getATCommand();
yangcq88517 3:6b205ec8624b 158
yangcq88517 1:3dc0ec2f9fd6 159 /** Read the next avaliable API frame.
yangcq88517 1:3dc0ec2f9fd6 160 *
yangcq88517 1:3dc0ec2f9fd6 161 * @returns a API frame, NULL means data not avaliable.
yangcq88517 1:3dc0ec2f9fd6 162 */
yangcq88517 0:837e6c48e90d 163 ModemStatusIndicator * getModemStatus();
yangcq88517 3:6b205ec8624b 164
yangcq88517 1:3dc0ec2f9fd6 165 /** Read the next avaliable API frame.
yangcq88517 1:3dc0ec2f9fd6 166 *
yangcq88517 1:3dc0ec2f9fd6 167 * @returns a API frame, NULL means data not avaliable.
yangcq88517 1:3dc0ec2f9fd6 168 */
yangcq88517 0:837e6c48e90d 169 ZigBeeTxStatusIndicator * getZigBeeTxStatus();
yangcq88517 3:6b205ec8624b 170
yangcq88517 1:3dc0ec2f9fd6 171 /** Read the next avaliable API frame.
yangcq88517 1:3dc0ec2f9fd6 172 *
yangcq88517 1:3dc0ec2f9fd6 173 * @returns a API frame, NULL means data not avaliable.
yangcq88517 1:3dc0ec2f9fd6 174 */
yangcq88517 0:837e6c48e90d 175 ZigBeeRxIndicator * getZigBeeRx();
yangcq88517 3:6b205ec8624b 176
yangcq88517 1:3dc0ec2f9fd6 177 /** Read the next avaliable API frame.
yangcq88517 1:3dc0ec2f9fd6 178 *
yangcq88517 1:3dc0ec2f9fd6 179 * @returns a API frame, NULL means data not avaliable.
yangcq88517 1:3dc0ec2f9fd6 180 */
yangcq88517 0:837e6c48e90d 181 ZigBeeExplicitRxIndicator * getZigBeeExplicitRx();
yangcq88517 3:6b205ec8624b 182
yangcq88517 1:3dc0ec2f9fd6 183 /** Read the next avaliable API frame.
yangcq88517 1:3dc0ec2f9fd6 184 *
yangcq88517 1:3dc0ec2f9fd6 185 * @returns a API frame, NULL means data not avaliable.
yangcq88517 1:3dc0ec2f9fd6 186 */
yangcq88517 0:837e6c48e90d 187 ZigBeeIOSampleIndicator * getZigBeeIOSample();
yangcq88517 3:6b205ec8624b 188
yangcq88517 1:3dc0ec2f9fd6 189 /** Read the next avaliable API frame.
yangcq88517 1:3dc0ec2f9fd6 190 *
yangcq88517 1:3dc0ec2f9fd6 191 * @returns a API frame, NULL means data not avaliable.
yangcq88517 1:3dc0ec2f9fd6 192 */
yangcq88517 0:837e6c48e90d 193 SensorReadIndicator * getSensorRead();
yangcq88517 3:6b205ec8624b 194
yangcq88517 1:3dc0ec2f9fd6 195 /** Read the next avaliable API frame.
yangcq88517 1:3dc0ec2f9fd6 196 *
yangcq88517 1:3dc0ec2f9fd6 197 * @returns a API frame, NULL means data not avaliable.
yangcq88517 1:3dc0ec2f9fd6 198 */
yangcq88517 0:837e6c48e90d 199 NodeIdentificationIndicator * getNodeIdentification();
yangcq88517 3:6b205ec8624b 200
yangcq88517 1:3dc0ec2f9fd6 201 /** Read the next avaliable API frame.
yangcq88517 1:3dc0ec2f9fd6 202 *
yangcq88517 1:3dc0ec2f9fd6 203 * @returns a API frame, NULL means data not avaliable.
yangcq88517 1:3dc0ec2f9fd6 204 */
yangcq88517 0:837e6c48e90d 205 RemoteCommandIndicator * getRemoteCommand();
yangcq88517 3:6b205ec8624b 206
yangcq88517 1:3dc0ec2f9fd6 207 /** Read the next avaliable API frame.
yangcq88517 1:3dc0ec2f9fd6 208 *
yangcq88517 1:3dc0ec2f9fd6 209 * @returns a API frame, NULL means data not avaliable.
yangcq88517 1:3dc0ec2f9fd6 210 */
yangcq88517 0:837e6c48e90d 211 RouteRecordIndicator * getRouteRecord();
yangcq88517 3:6b205ec8624b 212
yangcq88517 1:3dc0ec2f9fd6 213 /** Read the next avaliable API frame.
yangcq88517 1:3dc0ec2f9fd6 214 *
yangcq88517 1:3dc0ec2f9fd6 215 * @returns a API frame, NULL means data not avaliable.
yangcq88517 1:3dc0ec2f9fd6 216 */
yangcq88517 0:837e6c48e90d 217 ManyToOneRouteIndicator * getManyToOneRoute();
yangcq88517 3:6b205ec8624b 218
yangcq88517 3:6b205ec8624b 219 XBeeTxStatusIndicator * sendXBeeTx16(Address * remoteAddress, OptionsBase * option, const char * payload, int offset, int length);
yangcq88517 3:6b205ec8624b 220
yangcq88517 3:6b205ec8624b 221 XBeeTxStatusIndicator * sendXBeeTx64(Address * remoteAddress, OptionsBase * option, const char * payload, int offset, int length);
yangcq88517 3:6b205ec8624b 222
yangcq88517 3:6b205ec8624b 223 ATCommandIndicator * sendATCommand(const char * command, bool applyChange, const char * parameter = NULL, int offset = 0, int length = 0);
yangcq88517 3:6b205ec8624b 224
yangcq88517 3:6b205ec8624b 225 RemoteCommandIndicator * sendRemoteATCommand(Address * remoteAddress, const char * command, OptionsBase * transmitOptions, const char * parameter = NULL, int parameterOffset = 0, int parameterLength = 0);
yangcq88517 3:6b205ec8624b 226
yangcq88517 3:6b205ec8624b 227 ZigBeeTxStatusIndicator * sendZigBeeTx(Address * remoteAddress, OptionsBase * option, const char * payload, int offset, int length);
yangcq88517 3:6b205ec8624b 228
yangcq88517 3:6b205ec8624b 229 ZigBeeTxStatusIndicator * sendZigBeeExplicitTx(ExplicitAddress * remoteAddress, OptionsBase * option, const char * payload, int offset, int length);
yangcq88517 3:6b205ec8624b 230
yangcq88517 3:6b205ec8624b 231 /**
yangcq88517 3:6b205ec8624b 232 * @param function
yangcq88517 3:6b205ec8624b 233 *DISABLED = 0x00,
yangcq88517 3:6b205ec8624b 234 *RESERVED_FOR_PIN_SPECIFIC_ALTERNATE_FUNCTIONALITIES = 0x01,
yangcq88517 3:6b205ec8624b 235 *ANALOG_INPUT_SINGLE_ENDED = 0x02,
yangcq88517 3:6b205ec8624b 236 *DIGITAL_INPUT_MONITORED = 0x03,
yangcq88517 3:6b205ec8624b 237 *DIGITAL_OUTPUT_DEFAULT_LOW = 0x04,
yangcq88517 3:6b205ec8624b 238 *DIGITAL_OUTPUT_DEFAULT_HIGH = 0x05,
yangcq88517 3:6b205ec8624b 239 *ALTERNATE_FUNCTIONALITIES_WHERE_APPLICABLE = 0x06//0x06~0x09
yangcq88517 3:6b205ec8624b 240 */
yangcq88517 3:6b205ec8624b 241 ATCommandIndicator * setPinFunction(Pin * pin, char function);
yangcq88517 3:6b205ec8624b 242
yangcq88517 3:6b205ec8624b 243 ATCommandIndicator * setIODetection(Pin * pins, int size);
yangcq88517 3:6b205ec8624b 244
yangcq88517 3:6b205ec8624b 245 /**
yangcq88517 3:6b205ec8624b 246 * @param function
yangcq88517 3:6b205ec8624b 247 *DISABLED = 0x00,
yangcq88517 3:6b205ec8624b 248 *RESERVED_FOR_PIN_SPECIFIC_ALTERNATE_FUNCTIONALITIES = 0x01,
yangcq88517 3:6b205ec8624b 249 *ANALOG_INPUT_SINGLE_ENDED = 0x02,
yangcq88517 3:6b205ec8624b 250 *DIGITAL_INPUT_MONITORED = 0x03,
yangcq88517 3:6b205ec8624b 251 *DIGITAL_OUTPUT_DEFAULT_LOW = 0x04,
yangcq88517 3:6b205ec8624b 252 *DIGITAL_OUTPUT_DEFAULT_HIGH = 0x05,
yangcq88517 3:6b205ec8624b 253 *ALTERNATE_FUNCTIONALITIES_WHERE_APPLICABLE = 0x06//0x06~0x09
yangcq88517 3:6b205ec8624b 254 */
yangcq88517 3:6b205ec8624b 255 RemoteCommandIndicator * setRemotePinFunction(Address * remoteAddress, Pin * pin, char function);
yangcq88517 3:6b205ec8624b 256
yangcq88517 3:6b205ec8624b 257 RemoteCommandIndicator * setRemoteIODetection(Address * remoteAddress, Pin * pins, int size);
yangcq88517 3:6b205ec8624b 258
yangcq88517 3:6b205ec8624b 259 /// <summary>
yangcq88517 3:6b205ec8624b 260 /// The command will immediately return an "OK" response. The data will follow in the normal API format for DIO data event.
yangcq88517 3:6b205ec8624b 261 /// </summary>
yangcq88517 3:6b205ec8624b 262 /// <returns>true if the command is "OK", false if no IO is enabled.</returns>
yangcq88517 3:6b205ec8624b 263 bool forceXBeeLocalIOSample();
yangcq88517 3:6b205ec8624b 264
yangcq88517 3:6b205ec8624b 265 /// <summary>
yangcq88517 3:6b205ec8624b 266 /// Return 1 IO sample from the local module.
yangcq88517 3:6b205ec8624b 267 /// </summary>
yangcq88517 3:6b205ec8624b 268 /// <returns></returns>
yangcq88517 3:6b205ec8624b 269 IOSamples * forceZigBeeLocalIOSample();
yangcq88517 3:6b205ec8624b 270
yangcq88517 3:6b205ec8624b 271 /// <summary>
yangcq88517 3:6b205ec8624b 272 /// Return 1 IO sample only, Samples before TX (IT) does not affect.
yangcq88517 3:6b205ec8624b 273 /// </summary>
yangcq88517 3:6b205ec8624b 274 /// <param name="remote"Remote address of the device></param>
yangcq88517 3:6b205ec8624b 275 /// <returns></returns>
yangcq88517 3:6b205ec8624b 276 IOSamples * forceXBeeRemoteIOSample(Address * remote);
yangcq88517 3:6b205ec8624b 277
yangcq88517 3:6b205ec8624b 278 /// <summary>
yangcq88517 3:6b205ec8624b 279 /// Return 1 IO sample only.
yangcq88517 3:6b205ec8624b 280 /// </summary>
yangcq88517 3:6b205ec8624b 281 /// <param name="remote">Remote address of the device</param>
yangcq88517 3:6b205ec8624b 282 /// <returns></returns>
yangcq88517 3:6b205ec8624b 283 IOSamples * forceZigBeeRemoteIOSample(Address * remote);
yangcq88517 0:837e6c48e90d 284 };
yangcq88517 0:837e6c48e90d 285
yangcq88517 3:6b205ec8624b 286 #endif