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:
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?

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 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