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:
Sat Nov 14 16:42:36 2015 +0000
Revision:
6:5f31ddc17239
Parent:
4:a0f1fba6c2fb
change to unsigned char array

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