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.cpp@4:a0f1fba6c2fb, 2015-10-30 (annotated)
- Committer:
- yangcq88517
- Date:
- Fri Oct 30 00:38:40 2015 +0000
- Revision:
- 4:a0f1fba6c2fb
- Parent:
- 3:6b205ec8624b
- Child:
- 6:5f31ddc17239
bug fix
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
yangcq88517 | 0:837e6c48e90d | 1 | #include "CoreAPI.h" |
yangcq88517 | 0:837e6c48e90d | 2 | |
yangcq88517 | 0:837e6c48e90d | 3 | CoreAPI::CoreAPI(ISerial * serial, bool escape) |
yangcq88517 | 0:837e6c48e90d | 4 | :xBeeRx64Indicator(NULL),xBeeRx16Indicator(NULL),xBeeRx64IOSampleIndicator(NULL),xBeeRx16IOSampleIndicator(NULL),xBeeTxStatusIndicator(NULL), |
yangcq88517 | 0:837e6c48e90d | 5 | aTCommandIndicator(NULL),modemStatusIndicator(NULL),zigBeeTxStatusIndicator(NULL),zigBeeRxIndicator(NULL), |
yangcq88517 | 0:837e6c48e90d | 6 | zigBeeExplicitRxIndicator(NULL),zigBeeIOSampleIndicator(NULL),sensorReadIndicator(NULL),nodeIdentificationIndicator(NULL), |
yangcq88517 | 0:837e6c48e90d | 7 | remoteCommandIndicator(NULL),routeRecordIndicator(NULL),manyToOneRouteIndicator(NULL) |
yangcq88517 | 0:837e6c48e90d | 8 | { |
yangcq88517 | 0:837e6c48e90d | 9 | this->serial = serial; |
yangcq88517 | 0:837e6c48e90d | 10 | isEscapeMode = escape; |
yangcq88517 | 0:837e6c48e90d | 11 | msg = new APIFrame(INITIAL_FRAME_LENGTH); |
yangcq88517 | 1:3dc0ec2f9fd6 | 12 | isChecksum = false; |
yangcq88517 | 0:837e6c48e90d | 13 | isRunning = false; |
yangcq88517 | 0:837e6c48e90d | 14 | } |
yangcq88517 | 0:837e6c48e90d | 15 | |
yangcq88517 | 0:837e6c48e90d | 16 | CoreAPI::~CoreAPI() |
yangcq88517 | 0:837e6c48e90d | 17 | { |
yangcq88517 | 1:3dc0ec2f9fd6 | 18 | if (msg != NULL) |
yangcq88517 | 1:3dc0ec2f9fd6 | 19 | delete msg; |
yangcq88517 | 0:837e6c48e90d | 20 | |
yangcq88517 | 1:3dc0ec2f9fd6 | 21 | if (serial != NULL) |
yangcq88517 | 1:3dc0ec2f9fd6 | 22 | delete serial; |
yangcq88517 | 0:837e6c48e90d | 23 | } |
yangcq88517 | 0:837e6c48e90d | 24 | |
yangcq88517 | 0:837e6c48e90d | 25 | void CoreAPI::start() |
yangcq88517 | 0:837e6c48e90d | 26 | { |
yangcq88517 | 0:837e6c48e90d | 27 | if (!isRunning) { |
yangcq88517 | 0:837e6c48e90d | 28 | isRunning = true; |
yangcq88517 | 0:837e6c48e90d | 29 | |
yangcq88517 | 0:837e6c48e90d | 30 | if (!serial->isOpen()) |
yangcq88517 | 0:837e6c48e90d | 31 | serial->open(); |
yangcq88517 | 0:837e6c48e90d | 32 | } |
yangcq88517 | 0:837e6c48e90d | 33 | } |
yangcq88517 | 0:837e6c48e90d | 34 | |
yangcq88517 | 0:837e6c48e90d | 35 | void CoreAPI::stop() |
yangcq88517 | 0:837e6c48e90d | 36 | { |
yangcq88517 | 0:837e6c48e90d | 37 | if (isRunning) { |
yangcq88517 | 0:837e6c48e90d | 38 | isRunning = false; |
yangcq88517 | 0:837e6c48e90d | 39 | serial->close(); |
yangcq88517 | 0:837e6c48e90d | 40 | } |
yangcq88517 | 0:837e6c48e90d | 41 | } |
yangcq88517 | 0:837e6c48e90d | 42 | |
yangcq88517 | 1:3dc0ec2f9fd6 | 43 | void CoreAPI::setVerifyChecksum(bool isCheck) |
yangcq88517 | 1:3dc0ec2f9fd6 | 44 | { |
yangcq88517 | 1:3dc0ec2f9fd6 | 45 | isChecksum = isCheck; |
yangcq88517 | 1:3dc0ec2f9fd6 | 46 | } |
yangcq88517 | 1:3dc0ec2f9fd6 | 47 | |
yangcq88517 | 0:837e6c48e90d | 48 | void CoreAPI::send(APIFrame * request) |
yangcq88517 | 0:837e6c48e90d | 49 | { |
yangcq88517 | 0:837e6c48e90d | 50 | if (!isRunning) |
yangcq88517 | 0:837e6c48e90d | 51 | return; |
yangcq88517 | 0:837e6c48e90d | 52 | |
yangcq88517 | 0:837e6c48e90d | 53 | request->calculateChecksum(); |
yangcq88517 | 0:837e6c48e90d | 54 | int size = request->getPosition(); |
yangcq88517 | 0:837e6c48e90d | 55 | |
yangcq88517 | 0:837e6c48e90d | 56 | serial->writeByte(KEY); |
yangcq88517 | 0:837e6c48e90d | 57 | |
yangcq88517 | 0:837e6c48e90d | 58 | writeByte(size >> 8); |
yangcq88517 | 0:837e6c48e90d | 59 | writeByte(size); |
yangcq88517 | 0:837e6c48e90d | 60 | |
yangcq88517 | 0:837e6c48e90d | 61 | for (int i = 0; i < size; i++) |
yangcq88517 | 0:837e6c48e90d | 62 | writeByte(request->get(i)); |
yangcq88517 | 0:837e6c48e90d | 63 | |
yangcq88517 | 0:837e6c48e90d | 64 | writeByte(request->getCheckSum()); |
yangcq88517 | 0:837e6c48e90d | 65 | } |
yangcq88517 | 0:837e6c48e90d | 66 | |
yangcq88517 | 0:837e6c48e90d | 67 | int CoreAPI::readByte() |
yangcq88517 | 0:837e6c48e90d | 68 | { |
yangcq88517 | 0:837e6c48e90d | 69 | int value = serial->readByte(); |
yangcq88517 | 0:837e6c48e90d | 70 | |
yangcq88517 | 1:3dc0ec2f9fd6 | 71 | if (isEscapeMode && value == ESCAPED) |
yangcq88517 | 0:837e6c48e90d | 72 | return serial->readByte() ^ 0x20; |
yangcq88517 | 0:837e6c48e90d | 73 | |
yangcq88517 | 0:837e6c48e90d | 74 | return value; |
yangcq88517 | 0:837e6c48e90d | 75 | } |
yangcq88517 | 0:837e6c48e90d | 76 | |
yangcq88517 | 0:837e6c48e90d | 77 | void CoreAPI::writeByte(char data) |
yangcq88517 | 0:837e6c48e90d | 78 | { |
yangcq88517 | 0:837e6c48e90d | 79 | if (isEscapeMode) { |
yangcq88517 | 0:837e6c48e90d | 80 | if (data == KEY || data == ESCAPED || data == XON || data == XOFF) { |
yangcq88517 | 0:837e6c48e90d | 81 | serial->writeByte(ESCAPED); |
yangcq88517 | 0:837e6c48e90d | 82 | serial->writeByte(data ^ 0x20); |
yangcq88517 | 0:837e6c48e90d | 83 | return; |
yangcq88517 | 0:837e6c48e90d | 84 | } |
yangcq88517 | 0:837e6c48e90d | 85 | } |
yangcq88517 | 0:837e6c48e90d | 86 | |
yangcq88517 | 0:837e6c48e90d | 87 | serial->writeByte(data); |
yangcq88517 | 0:837e6c48e90d | 88 | } |
yangcq88517 | 0:837e6c48e90d | 89 | |
yangcq88517 | 0:837e6c48e90d | 90 | APIFrame * CoreAPI::getResponse() |
yangcq88517 | 0:837e6c48e90d | 91 | { |
yangcq88517 | 1:3dc0ec2f9fd6 | 92 | if (!isRunning) |
yangcq88517 | 0:837e6c48e90d | 93 | return NULL; |
yangcq88517 | 0:837e6c48e90d | 94 | |
yangcq88517 | 1:3dc0ec2f9fd6 | 95 | if (!serial->peek()) |
yangcq88517 | 1:3dc0ec2f9fd6 | 96 | return NULL; |
yangcq88517 | 1:3dc0ec2f9fd6 | 97 | |
yangcq88517 | 1:3dc0ec2f9fd6 | 98 | while (serial->readByte() != KEY); |
yangcq88517 | 1:3dc0ec2f9fd6 | 99 | |
yangcq88517 | 0:837e6c48e90d | 100 | int length = getLength(); |
yangcq88517 | 0:837e6c48e90d | 101 | |
yangcq88517 | 0:837e6c48e90d | 102 | msg->allocate(length); |
yangcq88517 | 0:837e6c48e90d | 103 | |
yangcq88517 | 0:837e6c48e90d | 104 | readPayLoad(length); |
yangcq88517 | 0:837e6c48e90d | 105 | |
yangcq88517 | 0:837e6c48e90d | 106 | if (isChecksum) { |
yangcq88517 | 0:837e6c48e90d | 107 | if (msg->verifyChecksum()) |
yangcq88517 | 0:837e6c48e90d | 108 | return msg; |
yangcq88517 | 0:837e6c48e90d | 109 | else |
yangcq88517 | 0:837e6c48e90d | 110 | return NULL; |
yangcq88517 | 0:837e6c48e90d | 111 | } else return msg; |
yangcq88517 | 0:837e6c48e90d | 112 | } |
yangcq88517 | 0:837e6c48e90d | 113 | |
yangcq88517 | 0:837e6c48e90d | 114 | int CoreAPI::getLength() |
yangcq88517 | 0:837e6c48e90d | 115 | { |
yangcq88517 | 0:837e6c48e90d | 116 | int msb = readByte(); |
yangcq88517 | 0:837e6c48e90d | 117 | |
yangcq88517 | 0:837e6c48e90d | 118 | int lsb = readByte(); |
yangcq88517 | 0:837e6c48e90d | 119 | |
yangcq88517 | 0:837e6c48e90d | 120 | return (msb << 8) | lsb; |
yangcq88517 | 0:837e6c48e90d | 121 | } |
yangcq88517 | 0:837e6c48e90d | 122 | |
yangcq88517 | 0:837e6c48e90d | 123 | void CoreAPI::readPayLoad(int length) |
yangcq88517 | 0:837e6c48e90d | 124 | { |
yangcq88517 | 0:837e6c48e90d | 125 | for (int i = 0; i < length; i++) |
yangcq88517 | 0:837e6c48e90d | 126 | msg->set(readByte()); |
yangcq88517 | 0:837e6c48e90d | 127 | |
yangcq88517 | 0:837e6c48e90d | 128 | msg->setCheckSum(readByte()); |
yangcq88517 | 0:837e6c48e90d | 129 | } |
yangcq88517 | 0:837e6c48e90d | 130 | |
yangcq88517 | 0:837e6c48e90d | 131 | XBeeRx64Indicator * CoreAPI::getXBeeRx64() |
yangcq88517 | 0:837e6c48e90d | 132 | { |
yangcq88517 | 0:837e6c48e90d | 133 | if (getResponse() == NULL) |
yangcq88517 | 0:837e6c48e90d | 134 | return NULL; |
yangcq88517 | 0:837e6c48e90d | 135 | |
yangcq88517 | 0:837e6c48e90d | 136 | if (xBeeRx64Indicator.convert(msg)) |
yangcq88517 | 0:837e6c48e90d | 137 | return &xBeeRx64Indicator; |
yangcq88517 | 0:837e6c48e90d | 138 | else return NULL; |
yangcq88517 | 0:837e6c48e90d | 139 | } |
yangcq88517 | 0:837e6c48e90d | 140 | |
yangcq88517 | 0:837e6c48e90d | 141 | XBeeRx16Indicator * CoreAPI::getXBeeRx16() |
yangcq88517 | 0:837e6c48e90d | 142 | { |
yangcq88517 | 0:837e6c48e90d | 143 | if (getResponse() == NULL) |
yangcq88517 | 0:837e6c48e90d | 144 | return NULL; |
yangcq88517 | 0:837e6c48e90d | 145 | |
yangcq88517 | 0:837e6c48e90d | 146 | if (xBeeRx16Indicator.convert(msg)) |
yangcq88517 | 0:837e6c48e90d | 147 | return &xBeeRx16Indicator; |
yangcq88517 | 0:837e6c48e90d | 148 | else return NULL; |
yangcq88517 | 0:837e6c48e90d | 149 | } |
yangcq88517 | 0:837e6c48e90d | 150 | |
yangcq88517 | 0:837e6c48e90d | 151 | XBeeRx64IOSampleIndicator * CoreAPI::getXBeeRx64IOSample() |
yangcq88517 | 0:837e6c48e90d | 152 | { |
yangcq88517 | 0:837e6c48e90d | 153 | if (getResponse() == NULL) |
yangcq88517 | 0:837e6c48e90d | 154 | return NULL; |
yangcq88517 | 0:837e6c48e90d | 155 | |
yangcq88517 | 0:837e6c48e90d | 156 | if (xBeeRx64IOSampleIndicator.convert(msg)) |
yangcq88517 | 0:837e6c48e90d | 157 | return &xBeeRx64IOSampleIndicator; |
yangcq88517 | 0:837e6c48e90d | 158 | else return NULL; |
yangcq88517 | 0:837e6c48e90d | 159 | } |
yangcq88517 | 0:837e6c48e90d | 160 | |
yangcq88517 | 0:837e6c48e90d | 161 | XBeeRx16IOSampleIndicator * CoreAPI::getXBeeRx16IOSample() |
yangcq88517 | 0:837e6c48e90d | 162 | { |
yangcq88517 | 0:837e6c48e90d | 163 | if (getResponse() == NULL) |
yangcq88517 | 0:837e6c48e90d | 164 | return NULL; |
yangcq88517 | 0:837e6c48e90d | 165 | |
yangcq88517 | 0:837e6c48e90d | 166 | if (xBeeRx16IOSampleIndicator.convert(msg)) |
yangcq88517 | 0:837e6c48e90d | 167 | return &xBeeRx16IOSampleIndicator; |
yangcq88517 | 0:837e6c48e90d | 168 | else return NULL; |
yangcq88517 | 0:837e6c48e90d | 169 | } |
yangcq88517 | 0:837e6c48e90d | 170 | |
yangcq88517 | 0:837e6c48e90d | 171 | XBeeTxStatusIndicator * CoreAPI::getXBeeTxStatus() |
yangcq88517 | 0:837e6c48e90d | 172 | { |
yangcq88517 | 0:837e6c48e90d | 173 | if (getResponse() == NULL) |
yangcq88517 | 0:837e6c48e90d | 174 | return NULL; |
yangcq88517 | 0:837e6c48e90d | 175 | |
yangcq88517 | 0:837e6c48e90d | 176 | if (xBeeTxStatusIndicator.convert(msg)) |
yangcq88517 | 0:837e6c48e90d | 177 | return &xBeeTxStatusIndicator; |
yangcq88517 | 0:837e6c48e90d | 178 | else return NULL; |
yangcq88517 | 0:837e6c48e90d | 179 | } |
yangcq88517 | 0:837e6c48e90d | 180 | |
yangcq88517 | 0:837e6c48e90d | 181 | ATCommandIndicator * CoreAPI::getATCommand() |
yangcq88517 | 0:837e6c48e90d | 182 | { |
yangcq88517 | 0:837e6c48e90d | 183 | if (getResponse() == NULL) |
yangcq88517 | 0:837e6c48e90d | 184 | return NULL; |
yangcq88517 | 0:837e6c48e90d | 185 | |
yangcq88517 | 0:837e6c48e90d | 186 | if (aTCommandIndicator.convert(msg)) |
yangcq88517 | 0:837e6c48e90d | 187 | return &aTCommandIndicator; |
yangcq88517 | 0:837e6c48e90d | 188 | else return NULL; |
yangcq88517 | 0:837e6c48e90d | 189 | } |
yangcq88517 | 0:837e6c48e90d | 190 | |
yangcq88517 | 0:837e6c48e90d | 191 | ModemStatusIndicator * CoreAPI::getModemStatus() |
yangcq88517 | 0:837e6c48e90d | 192 | { |
yangcq88517 | 0:837e6c48e90d | 193 | if (getResponse() == NULL) |
yangcq88517 | 0:837e6c48e90d | 194 | return NULL; |
yangcq88517 | 0:837e6c48e90d | 195 | |
yangcq88517 | 0:837e6c48e90d | 196 | if (modemStatusIndicator.convert(msg)) |
yangcq88517 | 0:837e6c48e90d | 197 | return &modemStatusIndicator; |
yangcq88517 | 0:837e6c48e90d | 198 | else return NULL; |
yangcq88517 | 0:837e6c48e90d | 199 | } |
yangcq88517 | 0:837e6c48e90d | 200 | |
yangcq88517 | 0:837e6c48e90d | 201 | ZigBeeTxStatusIndicator * CoreAPI::getZigBeeTxStatus() |
yangcq88517 | 0:837e6c48e90d | 202 | { |
yangcq88517 | 0:837e6c48e90d | 203 | if (getResponse() == NULL) |
yangcq88517 | 0:837e6c48e90d | 204 | return NULL; |
yangcq88517 | 0:837e6c48e90d | 205 | |
yangcq88517 | 0:837e6c48e90d | 206 | if (zigBeeTxStatusIndicator.convert(msg)) |
yangcq88517 | 0:837e6c48e90d | 207 | return &zigBeeTxStatusIndicator; |
yangcq88517 | 0:837e6c48e90d | 208 | else return NULL; |
yangcq88517 | 0:837e6c48e90d | 209 | } |
yangcq88517 | 0:837e6c48e90d | 210 | |
yangcq88517 | 0:837e6c48e90d | 211 | ZigBeeRxIndicator * CoreAPI::getZigBeeRx() |
yangcq88517 | 0:837e6c48e90d | 212 | { |
yangcq88517 | 0:837e6c48e90d | 213 | if (getResponse() == NULL) |
yangcq88517 | 0:837e6c48e90d | 214 | return NULL; |
yangcq88517 | 0:837e6c48e90d | 215 | |
yangcq88517 | 0:837e6c48e90d | 216 | if (zigBeeRxIndicator.convert(msg)) |
yangcq88517 | 0:837e6c48e90d | 217 | return &zigBeeRxIndicator; |
yangcq88517 | 0:837e6c48e90d | 218 | else return NULL; |
yangcq88517 | 0:837e6c48e90d | 219 | } |
yangcq88517 | 0:837e6c48e90d | 220 | |
yangcq88517 | 0:837e6c48e90d | 221 | ZigBeeExplicitRxIndicator * CoreAPI::getZigBeeExplicitRx() |
yangcq88517 | 0:837e6c48e90d | 222 | { |
yangcq88517 | 0:837e6c48e90d | 223 | if (getResponse() == NULL) |
yangcq88517 | 0:837e6c48e90d | 224 | return NULL; |
yangcq88517 | 0:837e6c48e90d | 225 | |
yangcq88517 | 0:837e6c48e90d | 226 | if (zigBeeExplicitRxIndicator.convert(msg)) |
yangcq88517 | 0:837e6c48e90d | 227 | return &zigBeeExplicitRxIndicator; |
yangcq88517 | 0:837e6c48e90d | 228 | else return NULL; |
yangcq88517 | 0:837e6c48e90d | 229 | } |
yangcq88517 | 0:837e6c48e90d | 230 | |
yangcq88517 | 0:837e6c48e90d | 231 | ZigBeeIOSampleIndicator * CoreAPI::getZigBeeIOSample() |
yangcq88517 | 0:837e6c48e90d | 232 | { |
yangcq88517 | 0:837e6c48e90d | 233 | if (getResponse() == NULL) |
yangcq88517 | 0:837e6c48e90d | 234 | return NULL; |
yangcq88517 | 0:837e6c48e90d | 235 | |
yangcq88517 | 0:837e6c48e90d | 236 | if (zigBeeIOSampleIndicator.convert(msg)) |
yangcq88517 | 0:837e6c48e90d | 237 | return &zigBeeIOSampleIndicator; |
yangcq88517 | 0:837e6c48e90d | 238 | else return NULL; |
yangcq88517 | 0:837e6c48e90d | 239 | } |
yangcq88517 | 0:837e6c48e90d | 240 | |
yangcq88517 | 0:837e6c48e90d | 241 | SensorReadIndicator * CoreAPI::getSensorRead() |
yangcq88517 | 0:837e6c48e90d | 242 | { |
yangcq88517 | 0:837e6c48e90d | 243 | if (getResponse() == NULL) |
yangcq88517 | 0:837e6c48e90d | 244 | return NULL; |
yangcq88517 | 0:837e6c48e90d | 245 | |
yangcq88517 | 0:837e6c48e90d | 246 | if (sensorReadIndicator.convert(msg)) |
yangcq88517 | 0:837e6c48e90d | 247 | return &sensorReadIndicator; |
yangcq88517 | 0:837e6c48e90d | 248 | else return NULL; |
yangcq88517 | 0:837e6c48e90d | 249 | } |
yangcq88517 | 0:837e6c48e90d | 250 | |
yangcq88517 | 0:837e6c48e90d | 251 | NodeIdentificationIndicator * CoreAPI::getNodeIdentification() |
yangcq88517 | 0:837e6c48e90d | 252 | { |
yangcq88517 | 0:837e6c48e90d | 253 | if (getResponse() == NULL) |
yangcq88517 | 0:837e6c48e90d | 254 | return NULL; |
yangcq88517 | 0:837e6c48e90d | 255 | |
yangcq88517 | 0:837e6c48e90d | 256 | if (nodeIdentificationIndicator.convert(msg)) |
yangcq88517 | 0:837e6c48e90d | 257 | return &nodeIdentificationIndicator; |
yangcq88517 | 0:837e6c48e90d | 258 | else return NULL; |
yangcq88517 | 0:837e6c48e90d | 259 | } |
yangcq88517 | 0:837e6c48e90d | 260 | |
yangcq88517 | 0:837e6c48e90d | 261 | RemoteCommandIndicator * CoreAPI::getRemoteCommand() |
yangcq88517 | 0:837e6c48e90d | 262 | { |
yangcq88517 | 0:837e6c48e90d | 263 | if (getResponse() == NULL) |
yangcq88517 | 0:837e6c48e90d | 264 | return NULL; |
yangcq88517 | 0:837e6c48e90d | 265 | |
yangcq88517 | 0:837e6c48e90d | 266 | if (remoteCommandIndicator.convert(msg)) |
yangcq88517 | 0:837e6c48e90d | 267 | return &remoteCommandIndicator; |
yangcq88517 | 0:837e6c48e90d | 268 | else return NULL; |
yangcq88517 | 0:837e6c48e90d | 269 | } |
yangcq88517 | 0:837e6c48e90d | 270 | |
yangcq88517 | 0:837e6c48e90d | 271 | RouteRecordIndicator * CoreAPI::getRouteRecord() |
yangcq88517 | 0:837e6c48e90d | 272 | { |
yangcq88517 | 0:837e6c48e90d | 273 | if (getResponse() == NULL) |
yangcq88517 | 0:837e6c48e90d | 274 | return NULL; |
yangcq88517 | 0:837e6c48e90d | 275 | |
yangcq88517 | 0:837e6c48e90d | 276 | if (routeRecordIndicator.convert(msg)) |
yangcq88517 | 0:837e6c48e90d | 277 | return &routeRecordIndicator; |
yangcq88517 | 0:837e6c48e90d | 278 | else return NULL; |
yangcq88517 | 0:837e6c48e90d | 279 | } |
yangcq88517 | 0:837e6c48e90d | 280 | |
yangcq88517 | 0:837e6c48e90d | 281 | ManyToOneRouteIndicator * CoreAPI::getManyToOneRoute() |
yangcq88517 | 0:837e6c48e90d | 282 | { |
yangcq88517 | 0:837e6c48e90d | 283 | if (getResponse() == NULL) |
yangcq88517 | 0:837e6c48e90d | 284 | return NULL; |
yangcq88517 | 0:837e6c48e90d | 285 | |
yangcq88517 | 0:837e6c48e90d | 286 | if (manyToOneRouteIndicator.convert(msg)) |
yangcq88517 | 0:837e6c48e90d | 287 | return &manyToOneRouteIndicator; |
yangcq88517 | 0:837e6c48e90d | 288 | else return NULL; |
yangcq88517 | 3:6b205ec8624b | 289 | } |
yangcq88517 | 3:6b205ec8624b | 290 | |
yangcq88517 | 3:6b205ec8624b | 291 | XBeeTxStatusIndicator * CoreAPI::sendXBeeTx16(Address * remoteAddress, OptionsBase * option, const char * payload, int offset, int length) |
yangcq88517 | 3:6b205ec8624b | 292 | { |
yangcq88517 | 3:6b205ec8624b | 293 | if (!isRunning) |
yangcq88517 | 3:6b205ec8624b | 294 | return NULL; |
yangcq88517 | 3:6b205ec8624b | 295 | |
yangcq88517 | 3:6b205ec8624b | 296 | waitFrameID++; |
yangcq88517 | 3:6b205ec8624b | 297 | if (waitFrameID == 0) |
yangcq88517 | 3:6b205ec8624b | 298 | waitFrameID = 0x01; |
yangcq88517 | 3:6b205ec8624b | 299 | |
yangcq88517 | 3:6b205ec8624b | 300 | msg->rewind(); |
yangcq88517 | 3:6b205ec8624b | 301 | msg->set(APIFrame::Tx16_Request); |
yangcq88517 | 3:6b205ec8624b | 302 | msg->set(waitFrameID); |
yangcq88517 | 3:6b205ec8624b | 303 | msg->set(remoteAddress->getNetworkAddress() >> 8); |
yangcq88517 | 3:6b205ec8624b | 304 | msg->set(remoteAddress->getNetworkAddress()); |
yangcq88517 | 3:6b205ec8624b | 305 | msg->set(option->getValue()); |
yangcq88517 | 3:6b205ec8624b | 306 | msg->sets(payload, offset, length); |
yangcq88517 | 3:6b205ec8624b | 307 | |
yangcq88517 | 3:6b205ec8624b | 308 | send(msg); |
yangcq88517 | 3:6b205ec8624b | 309 | |
yangcq88517 | 3:6b205ec8624b | 310 | timer.start(); |
yangcq88517 | 3:6b205ec8624b | 311 | for (int i = 0; i < 3; i++) { |
yangcq88517 | 3:6b205ec8624b | 312 | timer.reset(); |
yangcq88517 | 3:6b205ec8624b | 313 | while (!serial->peek()) { |
yangcq88517 | 3:6b205ec8624b | 314 | if (timer.read_ms() > 1000) { |
yangcq88517 | 3:6b205ec8624b | 315 | timer.stop(); |
yangcq88517 | 3:6b205ec8624b | 316 | return NULL; |
yangcq88517 | 3:6b205ec8624b | 317 | } |
yangcq88517 | 3:6b205ec8624b | 318 | } |
yangcq88517 | 3:6b205ec8624b | 319 | |
yangcq88517 | 3:6b205ec8624b | 320 | getResponse(); |
yangcq88517 | 3:6b205ec8624b | 321 | |
yangcq88517 | 3:6b205ec8624b | 322 | if (xBeeTxStatusIndicator.convert(msg) && xBeeTxStatusIndicator.getFrameID() == waitFrameID) { |
yangcq88517 | 3:6b205ec8624b | 323 | timer.stop(); |
yangcq88517 | 3:6b205ec8624b | 324 | return &xBeeTxStatusIndicator; |
yangcq88517 | 3:6b205ec8624b | 325 | } |
yangcq88517 | 3:6b205ec8624b | 326 | } |
yangcq88517 | 3:6b205ec8624b | 327 | timer.stop(); |
yangcq88517 | 3:6b205ec8624b | 328 | return NULL; |
yangcq88517 | 3:6b205ec8624b | 329 | } |
yangcq88517 | 3:6b205ec8624b | 330 | |
yangcq88517 | 3:6b205ec8624b | 331 | XBeeTxStatusIndicator * CoreAPI::sendXBeeTx64(Address * remoteAddress, OptionsBase * option, const char * payload, int offset, int length) |
yangcq88517 | 3:6b205ec8624b | 332 | { |
yangcq88517 | 3:6b205ec8624b | 333 | if (!isRunning) |
yangcq88517 | 3:6b205ec8624b | 334 | return NULL; |
yangcq88517 | 3:6b205ec8624b | 335 | |
yangcq88517 | 3:6b205ec8624b | 336 | waitFrameID++; |
yangcq88517 | 3:6b205ec8624b | 337 | if (waitFrameID == 0) |
yangcq88517 | 3:6b205ec8624b | 338 | waitFrameID = 0x01; |
yangcq88517 | 3:6b205ec8624b | 339 | |
yangcq88517 | 3:6b205ec8624b | 340 | msg->rewind(); |
yangcq88517 | 3:6b205ec8624b | 341 | msg->set(APIFrame::Tx64_Request); |
yangcq88517 | 3:6b205ec8624b | 342 | msg->set(waitFrameID); |
yangcq88517 | 3:6b205ec8624b | 343 | msg->sets(remoteAddress->getAddressValue(), 0, 8); |
yangcq88517 | 3:6b205ec8624b | 344 | msg->set(option->getValue()); |
yangcq88517 | 3:6b205ec8624b | 345 | msg->sets(payload, offset, length); |
yangcq88517 | 3:6b205ec8624b | 346 | |
yangcq88517 | 3:6b205ec8624b | 347 | send(msg); |
yangcq88517 | 3:6b205ec8624b | 348 | |
yangcq88517 | 3:6b205ec8624b | 349 | timer.start(); |
yangcq88517 | 3:6b205ec8624b | 350 | for (int i = 0; i < 3; i++) { |
yangcq88517 | 3:6b205ec8624b | 351 | timer.reset(); |
yangcq88517 | 3:6b205ec8624b | 352 | while (!serial->peek()) { |
yangcq88517 | 3:6b205ec8624b | 353 | if (timer.read_ms() > 1000) { |
yangcq88517 | 3:6b205ec8624b | 354 | timer.stop(); |
yangcq88517 | 3:6b205ec8624b | 355 | return NULL; |
yangcq88517 | 3:6b205ec8624b | 356 | } |
yangcq88517 | 3:6b205ec8624b | 357 | } |
yangcq88517 | 3:6b205ec8624b | 358 | |
yangcq88517 | 3:6b205ec8624b | 359 | getResponse(); |
yangcq88517 | 3:6b205ec8624b | 360 | |
yangcq88517 | 3:6b205ec8624b | 361 | if (xBeeTxStatusIndicator.convert(msg) && xBeeTxStatusIndicator.getFrameID() == waitFrameID) { |
yangcq88517 | 3:6b205ec8624b | 362 | timer.stop(); |
yangcq88517 | 3:6b205ec8624b | 363 | return &xBeeTxStatusIndicator; |
yangcq88517 | 3:6b205ec8624b | 364 | } |
yangcq88517 | 3:6b205ec8624b | 365 | } |
yangcq88517 | 3:6b205ec8624b | 366 | timer.stop(); |
yangcq88517 | 3:6b205ec8624b | 367 | return NULL; |
yangcq88517 | 3:6b205ec8624b | 368 | } |
yangcq88517 | 3:6b205ec8624b | 369 | |
yangcq88517 | 3:6b205ec8624b | 370 | ATCommandIndicator * CoreAPI::sendATCommand(const char * command, bool applyChange, const char * parameter, int offset, int length) |
yangcq88517 | 3:6b205ec8624b | 371 | { |
yangcq88517 | 3:6b205ec8624b | 372 | waitFrameID++; |
yangcq88517 | 3:6b205ec8624b | 373 | if (waitFrameID == 0) |
yangcq88517 | 3:6b205ec8624b | 374 | waitFrameID = 0x01; |
yangcq88517 | 3:6b205ec8624b | 375 | |
yangcq88517 | 3:6b205ec8624b | 376 | msg->rewind(); |
yangcq88517 | 3:6b205ec8624b | 377 | if (applyChange) |
yangcq88517 | 3:6b205ec8624b | 378 | msg->set(APIFrame::AT_Command); |
yangcq88517 | 3:6b205ec8624b | 379 | else msg->set(APIFrame::AT_Command_Queue_Parameter_Value); |
yangcq88517 | 3:6b205ec8624b | 380 | msg->set(waitFrameID); |
yangcq88517 | 3:6b205ec8624b | 381 | msg->sets(command, 0 , 2); |
yangcq88517 | 3:6b205ec8624b | 382 | if (parameter != NULL) |
yangcq88517 | 3:6b205ec8624b | 383 | msg->sets(parameter, offset, length); |
yangcq88517 | 3:6b205ec8624b | 384 | |
yangcq88517 | 3:6b205ec8624b | 385 | send(msg); |
yangcq88517 | 3:6b205ec8624b | 386 | |
yangcq88517 | 3:6b205ec8624b | 387 | timer.start(); |
yangcq88517 | 3:6b205ec8624b | 388 | for (int i = 0; i < 3; i++) { |
yangcq88517 | 3:6b205ec8624b | 389 | timer.reset(); |
yangcq88517 | 3:6b205ec8624b | 390 | while (!serial->peek()) { |
yangcq88517 | 3:6b205ec8624b | 391 | if (timer.read_ms() > 1000) { |
yangcq88517 | 3:6b205ec8624b | 392 | timer.stop(); |
yangcq88517 | 3:6b205ec8624b | 393 | return NULL; |
yangcq88517 | 3:6b205ec8624b | 394 | } |
yangcq88517 | 3:6b205ec8624b | 395 | } |
yangcq88517 | 3:6b205ec8624b | 396 | |
yangcq88517 | 3:6b205ec8624b | 397 | getResponse(); |
yangcq88517 | 3:6b205ec8624b | 398 | |
yangcq88517 | 3:6b205ec8624b | 399 | if (aTCommandIndicator.convert(msg) && aTCommandIndicator.getFrameID() == waitFrameID) { |
yangcq88517 | 3:6b205ec8624b | 400 | timer.stop(); |
yangcq88517 | 3:6b205ec8624b | 401 | return &aTCommandIndicator; |
yangcq88517 | 3:6b205ec8624b | 402 | } |
yangcq88517 | 3:6b205ec8624b | 403 | } |
yangcq88517 | 3:6b205ec8624b | 404 | timer.stop(); |
yangcq88517 | 3:6b205ec8624b | 405 | return NULL; |
yangcq88517 | 3:6b205ec8624b | 406 | } |
yangcq88517 | 3:6b205ec8624b | 407 | |
yangcq88517 | 3:6b205ec8624b | 408 | RemoteCommandIndicator * CoreAPI::sendRemoteATCommand(Address * remoteAddress, const char * command, OptionsBase * transmitOptions, const char * parameter, int parameterOffset, int parameterLength) |
yangcq88517 | 3:6b205ec8624b | 409 | { |
yangcq88517 | 3:6b205ec8624b | 410 | waitFrameID++; |
yangcq88517 | 3:6b205ec8624b | 411 | if (waitFrameID == 0) |
yangcq88517 | 3:6b205ec8624b | 412 | waitFrameID = 0x01; |
yangcq88517 | 3:6b205ec8624b | 413 | |
yangcq88517 | 3:6b205ec8624b | 414 | msg->rewind(); |
yangcq88517 | 3:6b205ec8624b | 415 | msg->set(APIFrame::Remote_Command_Request); |
yangcq88517 | 3:6b205ec8624b | 416 | msg->set(waitFrameID); |
yangcq88517 | 3:6b205ec8624b | 417 | |
yangcq88517 | 3:6b205ec8624b | 418 | msg->sets(remoteAddress->getAddressValue(), 0, 10); |
yangcq88517 | 3:6b205ec8624b | 419 | msg->set(transmitOptions->getValue()); |
yangcq88517 | 3:6b205ec8624b | 420 | msg->sets(command, 0, 2); |
yangcq88517 | 3:6b205ec8624b | 421 | |
yangcq88517 | 3:6b205ec8624b | 422 | if (parameter != NULL) |
yangcq88517 | 3:6b205ec8624b | 423 | msg->sets(parameter, parameterOffset, parameterLength); |
yangcq88517 | 3:6b205ec8624b | 424 | |
yangcq88517 | 3:6b205ec8624b | 425 | send(msg); |
yangcq88517 | 3:6b205ec8624b | 426 | |
yangcq88517 | 3:6b205ec8624b | 427 | timer.start(); |
yangcq88517 | 3:6b205ec8624b | 428 | for (int i = 0; i < 3; i++) { |
yangcq88517 | 3:6b205ec8624b | 429 | timer.reset(); |
yangcq88517 | 3:6b205ec8624b | 430 | while (!serial->peek()) { |
yangcq88517 | 3:6b205ec8624b | 431 | if (timer.read_ms() > 1000) { |
yangcq88517 | 3:6b205ec8624b | 432 | timer.stop(); |
yangcq88517 | 3:6b205ec8624b | 433 | return NULL; |
yangcq88517 | 3:6b205ec8624b | 434 | } |
yangcq88517 | 3:6b205ec8624b | 435 | } |
yangcq88517 | 3:6b205ec8624b | 436 | |
yangcq88517 | 3:6b205ec8624b | 437 | getResponse(); |
yangcq88517 | 3:6b205ec8624b | 438 | |
yangcq88517 | 3:6b205ec8624b | 439 | if (remoteCommandIndicator.convert(msg) && remoteCommandIndicator.getFrameID() == waitFrameID) { |
yangcq88517 | 3:6b205ec8624b | 440 | timer.stop(); |
yangcq88517 | 3:6b205ec8624b | 441 | return &remoteCommandIndicator; |
yangcq88517 | 3:6b205ec8624b | 442 | } |
yangcq88517 | 3:6b205ec8624b | 443 | } |
yangcq88517 | 3:6b205ec8624b | 444 | timer.stop(); |
yangcq88517 | 3:6b205ec8624b | 445 | return NULL; |
yangcq88517 | 3:6b205ec8624b | 446 | } |
yangcq88517 | 3:6b205ec8624b | 447 | |
yangcq88517 | 3:6b205ec8624b | 448 | ZigBeeTxStatusIndicator * CoreAPI::sendZigBeeTx(Address * remoteAddress, OptionsBase * option, const char * payload, int offset, int length) |
yangcq88517 | 3:6b205ec8624b | 449 | { |
yangcq88517 | 3:6b205ec8624b | 450 | waitFrameID++; |
yangcq88517 | 3:6b205ec8624b | 451 | if (waitFrameID == 0) |
yangcq88517 | 3:6b205ec8624b | 452 | waitFrameID = 0x01; |
yangcq88517 | 3:6b205ec8624b | 453 | |
yangcq88517 | 3:6b205ec8624b | 454 | msg->rewind(); |
yangcq88517 | 3:6b205ec8624b | 455 | msg->set(APIFrame::ZigBee_Transmit_Request); |
yangcq88517 | 3:6b205ec8624b | 456 | msg->set(waitFrameID); |
yangcq88517 | 3:6b205ec8624b | 457 | msg->sets(remoteAddress->getAddressValue(), 0, 10); |
yangcq88517 | 3:6b205ec8624b | 458 | msg->set(0x00); |
yangcq88517 | 3:6b205ec8624b | 459 | msg->set(option->getValue()); |
yangcq88517 | 3:6b205ec8624b | 460 | msg->sets(payload, offset, length); |
yangcq88517 | 3:6b205ec8624b | 461 | |
yangcq88517 | 3:6b205ec8624b | 462 | send(msg); |
yangcq88517 | 3:6b205ec8624b | 463 | |
yangcq88517 | 3:6b205ec8624b | 464 | timer.start(); |
yangcq88517 | 3:6b205ec8624b | 465 | for (int i = 0; i < 3; i++) { |
yangcq88517 | 3:6b205ec8624b | 466 | timer.reset(); |
yangcq88517 | 3:6b205ec8624b | 467 | while (!serial->peek()) { |
yangcq88517 | 3:6b205ec8624b | 468 | if (timer.read_ms() > 1000) { |
yangcq88517 | 3:6b205ec8624b | 469 | timer.stop(); |
yangcq88517 | 3:6b205ec8624b | 470 | return NULL; |
yangcq88517 | 3:6b205ec8624b | 471 | } |
yangcq88517 | 3:6b205ec8624b | 472 | } |
yangcq88517 | 3:6b205ec8624b | 473 | |
yangcq88517 | 3:6b205ec8624b | 474 | getResponse(); |
yangcq88517 | 3:6b205ec8624b | 475 | |
yangcq88517 | 3:6b205ec8624b | 476 | if (zigBeeTxStatusIndicator.convert(msg) && zigBeeTxStatusIndicator.getFrameID() == waitFrameID) { |
yangcq88517 | 3:6b205ec8624b | 477 | timer.stop(); |
yangcq88517 | 3:6b205ec8624b | 478 | return &zigBeeTxStatusIndicator; |
yangcq88517 | 3:6b205ec8624b | 479 | } |
yangcq88517 | 3:6b205ec8624b | 480 | } |
yangcq88517 | 3:6b205ec8624b | 481 | timer.stop(); |
yangcq88517 | 3:6b205ec8624b | 482 | return NULL; |
yangcq88517 | 3:6b205ec8624b | 483 | } |
yangcq88517 | 3:6b205ec8624b | 484 | |
yangcq88517 | 3:6b205ec8624b | 485 | ZigBeeTxStatusIndicator * CoreAPI::sendZigBeeExplicitTx(ExplicitAddress * remoteAddress, OptionsBase * option, const char * payload, int offset, int length) |
yangcq88517 | 3:6b205ec8624b | 486 | { |
yangcq88517 | 3:6b205ec8624b | 487 | waitFrameID++; |
yangcq88517 | 3:6b205ec8624b | 488 | if (waitFrameID == 0) |
yangcq88517 | 3:6b205ec8624b | 489 | waitFrameID = 0x01; |
yangcq88517 | 3:6b205ec8624b | 490 | |
yangcq88517 | 3:6b205ec8624b | 491 | msg->rewind(); |
yangcq88517 | 3:6b205ec8624b | 492 | msg->set(APIFrame::Explicit_Addressing_ZigBee_Command_Frame); |
yangcq88517 | 3:6b205ec8624b | 493 | msg->set(waitFrameID); |
yangcq88517 | 3:6b205ec8624b | 494 | msg->sets(remoteAddress->getAddressValue(), 0, 10); |
yangcq88517 | 3:6b205ec8624b | 495 | msg->sets(remoteAddress->getExplicitValue(), 0 , 6); |
yangcq88517 | 3:6b205ec8624b | 496 | msg->set(0x00); |
yangcq88517 | 3:6b205ec8624b | 497 | msg->set(option->getValue()); |
yangcq88517 | 3:6b205ec8624b | 498 | msg->sets(payload, offset, length); |
yangcq88517 | 3:6b205ec8624b | 499 | |
yangcq88517 | 3:6b205ec8624b | 500 | send(msg); |
yangcq88517 | 3:6b205ec8624b | 501 | |
yangcq88517 | 3:6b205ec8624b | 502 | timer.start(); |
yangcq88517 | 3:6b205ec8624b | 503 | for (int i = 0; i < 3; i++) { |
yangcq88517 | 3:6b205ec8624b | 504 | timer.reset(); |
yangcq88517 | 3:6b205ec8624b | 505 | while (!serial->peek()) { |
yangcq88517 | 3:6b205ec8624b | 506 | if (timer.read_ms() > 1000) { |
yangcq88517 | 3:6b205ec8624b | 507 | timer.stop(); |
yangcq88517 | 3:6b205ec8624b | 508 | return NULL; |
yangcq88517 | 3:6b205ec8624b | 509 | } |
yangcq88517 | 3:6b205ec8624b | 510 | } |
yangcq88517 | 3:6b205ec8624b | 511 | |
yangcq88517 | 3:6b205ec8624b | 512 | getResponse(); |
yangcq88517 | 3:6b205ec8624b | 513 | |
yangcq88517 | 3:6b205ec8624b | 514 | if (zigBeeTxStatusIndicator.convert(msg) && zigBeeTxStatusIndicator.getFrameID() == waitFrameID) { |
yangcq88517 | 3:6b205ec8624b | 515 | timer.stop(); |
yangcq88517 | 3:6b205ec8624b | 516 | return &zigBeeTxStatusIndicator; |
yangcq88517 | 3:6b205ec8624b | 517 | } |
yangcq88517 | 3:6b205ec8624b | 518 | } |
yangcq88517 | 3:6b205ec8624b | 519 | timer.stop(); |
yangcq88517 | 3:6b205ec8624b | 520 | return NULL; |
yangcq88517 | 3:6b205ec8624b | 521 | } |
yangcq88517 | 3:6b205ec8624b | 522 | |
yangcq88517 | 3:6b205ec8624b | 523 | ATCommandIndicator * CoreAPI::setPinFunction(Pin * pin, char function) |
yangcq88517 | 3:6b205ec8624b | 524 | { |
yangcq88517 | 3:6b205ec8624b | 525 | return sendATCommand(pin->getCommand(), true, &function, 0 , 1); |
yangcq88517 | 3:6b205ec8624b | 526 | } |
yangcq88517 | 3:6b205ec8624b | 527 | |
yangcq88517 | 4:a0f1fba6c2fb | 528 | ATCommandIndicator * CoreAPI::setIODetection(Pin ** pins, int size) |
yangcq88517 | 3:6b205ec8624b | 529 | { |
yangcq88517 | 3:6b205ec8624b | 530 | return sendATCommand(ATCommands::Digital_IO_Change_Detection, true, Pin::IOChangeDetectionConfiguration(pins, size)); |
yangcq88517 | 3:6b205ec8624b | 531 | } |
yangcq88517 | 3:6b205ec8624b | 532 | |
yangcq88517 | 3:6b205ec8624b | 533 | RemoteCommandIndicator * CoreAPI::setRemotePinFunction(Address * remoteAddress, Pin * pin, char function) |
yangcq88517 | 3:6b205ec8624b | 534 | { |
yangcq88517 | 4:a0f1fba6c2fb | 535 | return sendRemoteATCommand(remoteAddress, pin->getCommand(), RemoteCommandOptions::ApplyChanges, &function, 0 , 1); |
yangcq88517 | 3:6b205ec8624b | 536 | } |
yangcq88517 | 3:6b205ec8624b | 537 | |
yangcq88517 | 4:a0f1fba6c2fb | 538 | RemoteCommandIndicator * CoreAPI::setRemoteIODetection(Address * remoteAddress, Pin ** pins, int size) |
yangcq88517 | 3:6b205ec8624b | 539 | { |
yangcq88517 | 4:a0f1fba6c2fb | 540 | return sendRemoteATCommand(remoteAddress, ATCommands::Digital_IO_Change_Detection, RemoteCommandOptions::ApplyChanges, Pin::IOChangeDetectionConfiguration(pins, size), 0, 2); |
yangcq88517 | 3:6b205ec8624b | 541 | } |
yangcq88517 | 3:6b205ec8624b | 542 | |
yangcq88517 | 3:6b205ec8624b | 543 | bool CoreAPI::forceXBeeLocalIOSample() |
yangcq88517 | 3:6b205ec8624b | 544 | { |
yangcq88517 | 3:6b205ec8624b | 545 | ATCommandIndicator * re = sendATCommand(ATCommands::Force_Sample, true); |
yangcq88517 | 3:6b205ec8624b | 546 | |
yangcq88517 | 3:6b205ec8624b | 547 | if (re == NULL) |
yangcq88517 | 3:6b205ec8624b | 548 | return false; |
yangcq88517 | 3:6b205ec8624b | 549 | |
yangcq88517 | 3:6b205ec8624b | 550 | if (re->getCommandStatus() != 0x00) |
yangcq88517 | 3:6b205ec8624b | 551 | return false; |
yangcq88517 | 3:6b205ec8624b | 552 | |
yangcq88517 | 3:6b205ec8624b | 553 | return true; |
yangcq88517 | 3:6b205ec8624b | 554 | } |
yangcq88517 | 3:6b205ec8624b | 555 | |
yangcq88517 | 3:6b205ec8624b | 556 | IOSamples * CoreAPI::forceZigBeeLocalIOSample() |
yangcq88517 | 3:6b205ec8624b | 557 | { |
yangcq88517 | 3:6b205ec8624b | 558 | ATCommandIndicator * re = sendATCommand(ATCommands::Force_Sample, true); |
yangcq88517 | 3:6b205ec8624b | 559 | |
yangcq88517 | 3:6b205ec8624b | 560 | if (re == NULL) |
yangcq88517 | 3:6b205ec8624b | 561 | return NULL; |
yangcq88517 | 3:6b205ec8624b | 562 | |
yangcq88517 | 3:6b205ec8624b | 563 | return IOSampleDecoder::ZigBeeSamplesParse(re->getParameter()); |
yangcq88517 | 3:6b205ec8624b | 564 | } |
yangcq88517 | 3:6b205ec8624b | 565 | |
yangcq88517 | 3:6b205ec8624b | 566 | IOSamples * CoreAPI::forceXBeeRemoteIOSample(Address * remote) |
yangcq88517 | 3:6b205ec8624b | 567 | { |
yangcq88517 | 4:a0f1fba6c2fb | 568 | RemoteCommandIndicator * re = sendRemoteATCommand(remote, ATCommands::Force_Sample, OptionsBase::DEFAULT); |
yangcq88517 | 3:6b205ec8624b | 569 | |
yangcq88517 | 3:6b205ec8624b | 570 | return IOSampleDecoder::XBeeSamplesParse(re->getParameter()); |
yangcq88517 | 3:6b205ec8624b | 571 | } |
yangcq88517 | 3:6b205ec8624b | 572 | |
yangcq88517 | 3:6b205ec8624b | 573 | IOSamples * CoreAPI::forceZigBeeRemoteIOSample(Address * remote) |
yangcq88517 | 3:6b205ec8624b | 574 | { |
yangcq88517 | 4:a0f1fba6c2fb | 575 | RemoteCommandIndicator * re = sendRemoteATCommand(remote, ATCommands::Force_Sample, OptionsBase::DEFAULT); |
yangcq88517 | 3:6b205ec8624b | 576 | |
yangcq88517 | 3:6b205ec8624b | 577 | return IOSampleDecoder::ZigBeeSamplesParse(re->getParameter()); |
yangcq88517 | 3:6b205ec8624b | 578 | } |
yangcq88517 | 3:6b205ec8624b | 579 |