XBee API mode library

Committer:
yamaguch
Date:
Thu Mar 21 06:51:31 2013 +0000
Revision:
17:2f728fd13bc0
Parent:
8:776b8dc51932
rewrote to use rtos Semaphore only

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yamaguch 0:0232a97b3883 1 /*
yamaguch 8:776b8dc51932 2 Copyright (c) 2013, Senio Networks, Inc.
yamaguch 0:0232a97b3883 3
yamaguch 0:0232a97b3883 4 Permission is hereby granted, free of charge, to any person obtaining a copy
yamaguch 0:0232a97b3883 5 of this software and associated documentation files (the "Software"), to deal
yamaguch 0:0232a97b3883 6 in the Software without restriction, including without limitation the rights
yamaguch 0:0232a97b3883 7 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
yamaguch 0:0232a97b3883 8 copies of the Software, and to permit persons to whom the Software is
yamaguch 0:0232a97b3883 9 furnished to do so, subject to the following conditions:
yamaguch 0:0232a97b3883 10
yamaguch 0:0232a97b3883 11 The above copyright notice and this permission notice shall be included in
yamaguch 0:0232a97b3883 12 all copies or substantial portions of the Software.
yamaguch 0:0232a97b3883 13
yamaguch 0:0232a97b3883 14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
yamaguch 0:0232a97b3883 15 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
yamaguch 0:0232a97b3883 16 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
yamaguch 0:0232a97b3883 17 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
yamaguch 0:0232a97b3883 18 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
yamaguch 0:0232a97b3883 19 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
yamaguch 0:0232a97b3883 20 THE SOFTWARE.
yamaguch 0:0232a97b3883 21 */
yamaguch 0:0232a97b3883 22
yamaguch 0:0232a97b3883 23 #ifndef XBEE_DATA_TYPES_H
yamaguch 0:0232a97b3883 24 #define XBEE_DATA_TYPES_H
yamaguch 0:0232a97b3883 25
yamaguch 0:0232a97b3883 26 #include "mbed.h"
yamaguch 0:0232a97b3883 27
yamaguch 2:eea7afd6cf08 28 /**
yamaguch 2:eea7afd6cf08 29 * class for XBee 64-bit address data type
yamaguch 2:eea7afd6cf08 30 */
yamaguch 0:0232a97b3883 31 class XBeeAddress64 {
yamaguch 0:0232a97b3883 32 public:
yamaguch 0:0232a97b3883 33 XBeeAddress64();
yamaguch 0:0232a97b3883 34 XBeeAddress64(const char *address);
yamaguch 0:0232a97b3883 35 XBeeAddress64(uint64_t address);
yamaguch 0:0232a97b3883 36 XBeeAddress64(uint32_t high, uint32_t low);
yamaguch 0:0232a97b3883 37
yamaguch 0:0232a97b3883 38 operator uint64_t();
yamaguch 2:eea7afd6cf08 39 bool operator ==(XBeeAddress64& address);
yamaguch 2:eea7afd6cf08 40 bool operator ==(const char* address);
yamaguch 2:eea7afd6cf08 41 bool operator ==(uint64_t address);
yamaguch 0:0232a97b3883 42 operator char *();
yamaguch 0:0232a97b3883 43
yamaguch 0:0232a97b3883 44 char operator [](int index) const {
yamaguch 0:0232a97b3883 45 return address64[index];
yamaguch 0:0232a97b3883 46 };
yamaguch 0:0232a97b3883 47
yamaguch 0:0232a97b3883 48 char& operator [](int index) {
yamaguch 0:0232a97b3883 49 return address64[index];
yamaguch 0:0232a97b3883 50 };
yamaguch 0:0232a97b3883 51
yamaguch 0:0232a97b3883 52 friend class XBee;
yamaguch 0:0232a97b3883 53
yamaguch 0:0232a97b3883 54 private:
yamaguch 0:0232a97b3883 55 char address64[8];
yamaguch 0:0232a97b3883 56 char buf[18];
yamaguch 0:0232a97b3883 57
yamaguch 0:0232a97b3883 58 char *raw_address() { return (char *) address64; }
yamaguch 0:0232a97b3883 59 };
yamaguch 0:0232a97b3883 60
yamaguch 0:0232a97b3883 61 const XBeeAddress64 COORDINATOR(0, 0);
yamaguch 0:0232a97b3883 62 const XBeeAddress64 BROADCAST(0, 0xFFFF);
yamaguch 0:0232a97b3883 63
yamaguch 2:eea7afd6cf08 64 /**
yamaguch 2:eea7afd6cf08 65 * class for XBee 16-bit address data type
yamaguch 2:eea7afd6cf08 66 */
yamaguch 0:0232a97b3883 67 class XBeeAddress16 {
yamaguch 0:0232a97b3883 68 public:
yamaguch 0:0232a97b3883 69 XBeeAddress16();
yamaguch 0:0232a97b3883 70 XBeeAddress16(const char *address);
yamaguch 0:0232a97b3883 71 XBeeAddress16(uint16_t address);
yamaguch 0:0232a97b3883 72 XBeeAddress16(char high, char low);
yamaguch 0:0232a97b3883 73
yamaguch 0:0232a97b3883 74 operator uint16_t();
yamaguch 2:eea7afd6cf08 75 bool operator ==(XBeeAddress16& address);
yamaguch 2:eea7afd6cf08 76 bool operator ==(const char* address);
yamaguch 2:eea7afd6cf08 77 bool operator ==(uint16_t address);
yamaguch 0:0232a97b3883 78 operator char *();
yamaguch 0:0232a97b3883 79
yamaguch 0:0232a97b3883 80 char operator [](int index) const {
yamaguch 0:0232a97b3883 81 return address16[index];
yamaguch 0:0232a97b3883 82 };
yamaguch 0:0232a97b3883 83 char& operator [](int index) {
yamaguch 0:0232a97b3883 84 return address16[index];
yamaguch 0:0232a97b3883 85 };
yamaguch 0:0232a97b3883 86
yamaguch 0:0232a97b3883 87 friend class XBee;
yamaguch 0:0232a97b3883 88
yamaguch 0:0232a97b3883 89 private:
yamaguch 0:0232a97b3883 90 char address16[2];
yamaguch 0:0232a97b3883 91 char buf[5];
yamaguch 0:0232a97b3883 92
yamaguch 0:0232a97b3883 93 char *raw_address() { return (char *) address16; }
yamaguch 0:0232a97b3883 94 };
yamaguch 0:0232a97b3883 95
yamaguch 2:eea7afd6cf08 96 /**
yamaguch 2:eea7afd6cf08 97 * class for XBee data type
yamaguch 2:eea7afd6cf08 98 */
yamaguch 0:0232a97b3883 99 class XBeeData {
yamaguch 0:0232a97b3883 100 public:
yamaguch 0:0232a97b3883 101 XBeeData(int capacity);
yamaguch 0:0232a97b3883 102 ~XBeeData();
yamaguch 0:0232a97b3883 103
yamaguch 0:0232a97b3883 104 int length() {
yamaguch 0:0232a97b3883 105 return size;
yamaguch 0:0232a97b3883 106 }
yamaguch 0:0232a97b3883 107
yamaguch 0:0232a97b3883 108 operator char *() const {
yamaguch 0:0232a97b3883 109 return data;
yamaguch 0:0232a97b3883 110 }
yamaguch 0:0232a97b3883 111
yamaguch 0:0232a97b3883 112 char operator [](int index) const {
yamaguch 0:0232a97b3883 113 return data[index];
yamaguch 0:0232a97b3883 114 };
yamaguch 0:0232a97b3883 115
yamaguch 0:0232a97b3883 116 char& operator [](int index) {
yamaguch 0:0232a97b3883 117 return data[index];
yamaguch 0:0232a97b3883 118 };
yamaguch 0:0232a97b3883 119
yamaguch 0:0232a97b3883 120 friend class XBee;
yamaguch 0:0232a97b3883 121 friend class XBeeCommandData;
yamaguch 0:0232a97b3883 122 friend class XBeeReceivedData;
yamaguch 0:0232a97b3883 123 friend class XBeeRawData;
yamaguch 6:d15800bfa15d 124 friend class XBeeNodeIdentificaion;
yamaguch 0:0232a97b3883 125
yamaguch 0:0232a97b3883 126 private:
yamaguch 0:0232a97b3883 127 char *data;
yamaguch 0:0232a97b3883 128 int capacity;
yamaguch 0:0232a97b3883 129 int size;
yamaguch 0:0232a97b3883 130
yamaguch 0:0232a97b3883 131 char *raw_address() { return (char *) data; }
yamaguch 0:0232a97b3883 132 };
yamaguch 0:0232a97b3883 133
yamaguch 2:eea7afd6cf08 134 /**
yamaguch 2:eea7afd6cf08 135 * class for XBee command data type
yamaguch 2:eea7afd6cf08 136 */
yamaguch 0:0232a97b3883 137 class XBeeCommandData : public XBeeData {
yamaguch 0:0232a97b3883 138 public:
yamaguch 0:0232a97b3883 139 XBeeCommandData(int capacity = 20) : XBeeData(capacity) {}
yamaguch 0:0232a97b3883 140 };
yamaguch 0:0232a97b3883 141
yamaguch 2:eea7afd6cf08 142 /**
yamaguch 2:eea7afd6cf08 143 * class for XBee received data type
yamaguch 2:eea7afd6cf08 144 */
yamaguch 0:0232a97b3883 145 class XBeeReceivedData : public XBeeData {
yamaguch 0:0232a97b3883 146 public:
yamaguch 0:0232a97b3883 147 XBeeReceivedData(int capacity = 128) : XBeeData(capacity) {}
yamaguch 0:0232a97b3883 148 };
yamaguch 0:0232a97b3883 149
yamaguch 2:eea7afd6cf08 150 /**
yamaguch 2:eea7afd6cf08 151 * class for XBee raw data type
yamaguch 2:eea7afd6cf08 152 */
yamaguch 0:0232a97b3883 153 class XBeeRawData : public XBeeData {
yamaguch 0:0232a97b3883 154 public:
yamaguch 0:0232a97b3883 155 XBeeRawData(int capacity = 128) : XBeeData(capacity) {}
yamaguch 0:0232a97b3883 156 };
yamaguch 0:0232a97b3883 157
yamaguch 2:eea7afd6cf08 158 /**
yamaguch 2:eea7afd6cf08 159 * class for XBee AT command data type
yamaguch 2:eea7afd6cf08 160 */
yamaguch 0:0232a97b3883 161 class XBeeATCommand : public XBeeData {
yamaguch 0:0232a97b3883 162 public:
yamaguch 0:0232a97b3883 163 XBeeATCommand() : XBeeData(3) {}
yamaguch 0:0232a97b3883 164 };
yamaguch 0:0232a97b3883 165
yamaguch 2:eea7afd6cf08 166 /**
yamaguch 7:19f03567ec4e 167 * class for XBee Node Identifier
yamaguch 5:b82970ef7fb0 168 */
yamaguch 7:19f03567ec4e 169 class XBeeNodeIdentifier: public XBeeData {
yamaguch 5:b82970ef7fb0 170 public:
yamaguch 7:19f03567ec4e 171 XBeeNodeIdentifier() : XBeeData(20) {}
yamaguch 5:b82970ef7fb0 172 };
yamaguch 5:b82970ef7fb0 173
yamaguch 5:b82970ef7fb0 174 /**
yamaguch 2:eea7afd6cf08 175 * class for bit array data type
yamaguch 2:eea7afd6cf08 176 */
yamaguch 0:0232a97b3883 177 class BitArray {
yamaguch 0:0232a97b3883 178 public:
yamaguch 0:0232a97b3883 179 BitArray(int mask, int values);
yamaguch 0:0232a97b3883 180 int operator [](int i) const;
yamaguch 0:0232a97b3883 181
yamaguch 0:0232a97b3883 182 private:
yamaguch 0:0232a97b3883 183 int mask;
yamaguch 0:0232a97b3883 184 int values;
yamaguch 0:0232a97b3883 185
yamaguch 0:0232a97b3883 186 int valueAt(int i) const;
yamaguch 0:0232a97b3883 187 };
yamaguch 0:0232a97b3883 188
yamaguch 2:eea7afd6cf08 189 /**
yamaguch 2:eea7afd6cf08 190 * class for int array data type
yamaguch 2:eea7afd6cf08 191 */
yamaguch 0:0232a97b3883 192 class IntArray {
yamaguch 0:0232a97b3883 193 public:
yamaguch 0:0232a97b3883 194 IntArray(int mask, const char *value);
yamaguch 0:0232a97b3883 195 int operator [](int i) const;
yamaguch 0:0232a97b3883 196
yamaguch 0:0232a97b3883 197 private:
yamaguch 0:0232a97b3883 198 int mask;
yamaguch 0:0232a97b3883 199 const char *values;
yamaguch 0:0232a97b3883 200
yamaguch 0:0232a97b3883 201 int valueAt(int i) const;
yamaguch 0:0232a97b3883 202 };
yamaguch 0:0232a97b3883 203
yamaguch 2:eea7afd6cf08 204 /**
yamaguch 2:eea7afd6cf08 205 * class for IOSample data type
yamaguch 2:eea7afd6cf08 206 */
yamaguch 0:0232a97b3883 207 class IOSample {
yamaguch 0:0232a97b3883 208 public:
yamaguch 0:0232a97b3883 209 IOSample(const char *data);
yamaguch 0:0232a97b3883 210
yamaguch 0:0232a97b3883 211 operator char *();
yamaguch 0:0232a97b3883 212
yamaguch 0:0232a97b3883 213 BitArray dio;
yamaguch 0:0232a97b3883 214 IntArray ad;
yamaguch 0:0232a97b3883 215 private:
yamaguch 0:0232a97b3883 216 char buf[128];
yamaguch 0:0232a97b3883 217 };
yamaguch 0:0232a97b3883 218
yamaguch 2:eea7afd6cf08 219 /**
yamaguch 2:eea7afd6cf08 220 * class for uint8 data type
yamaguch 2:eea7afd6cf08 221 */
yamaguch 0:0232a97b3883 222 class XBeeUint8 {
yamaguch 0:0232a97b3883 223 public:
yamaguch 0:0232a97b3883 224 XBeeUint8(char data = 0, char base = 10) {
yamaguch 0:0232a97b3883 225 this->data = data;
yamaguch 0:0232a97b3883 226 }
yamaguch 0:0232a97b3883 227
yamaguch 0:0232a97b3883 228 operator int() {
yamaguch 0:0232a97b3883 229 return data;
yamaguch 0:0232a97b3883 230 }
yamaguch 0:0232a97b3883 231
yamaguch 0:0232a97b3883 232 operator char *() {
yamaguch 0:0232a97b3883 233 sprintf(buf, base == 10 ? "%d" : "%02X", data);
yamaguch 0:0232a97b3883 234 return buf;
yamaguch 0:0232a97b3883 235 }
yamaguch 0:0232a97b3883 236
yamaguch 0:0232a97b3883 237 friend class XBee;
yamaguch 0:0232a97b3883 238 friend class XBeeFrameID;
yamaguch 0:0232a97b3883 239 friend class XBeeRetryCount;
yamaguch 0:0232a97b3883 240 friend class XBeeStatus;
yamaguch 0:0232a97b3883 241 friend class XBeeDeliveryStatus;
yamaguch 0:0232a97b3883 242 friend class XBeeDiscoveryStatus;
yamaguch 0:0232a97b3883 243 friend class XBeeReceiveOptions;
yamaguch 5:b82970ef7fb0 244 friend class XBeeDeviceType;
yamaguch 5:b82970ef7fb0 245 friend class XBeeSourceEvent;
yamaguch 0:0232a97b3883 246
yamaguch 0:0232a97b3883 247 private:
yamaguch 0:0232a97b3883 248 char data;
yamaguch 0:0232a97b3883 249 char base;
yamaguch 0:0232a97b3883 250 char buf[4];
yamaguch 0:0232a97b3883 251
yamaguch 0:0232a97b3883 252 char *raw_address() {
yamaguch 0:0232a97b3883 253 return &data;
yamaguch 0:0232a97b3883 254 }
yamaguch 0:0232a97b3883 255 };
yamaguch 0:0232a97b3883 256
yamaguch 2:eea7afd6cf08 257 /**
yamaguch 2:eea7afd6cf08 258 * class for XBee frame ID data type
yamaguch 2:eea7afd6cf08 259 */
yamaguch 0:0232a97b3883 260 class XBeeFrameID : public XBeeUint8 {
yamaguch 0:0232a97b3883 261 public:
yamaguch 0:0232a97b3883 262 XBeeFrameID(char id = 0) : XBeeUint8(id) {}
yamaguch 0:0232a97b3883 263 };
yamaguch 0:0232a97b3883 264
yamaguch 2:eea7afd6cf08 265 /**
yamaguch 2:eea7afd6cf08 266 * class for XBee retry count data type
yamaguch 2:eea7afd6cf08 267 */
yamaguch 0:0232a97b3883 268 class XBeeRetryCount : public XBeeUint8 {
yamaguch 0:0232a97b3883 269 public:
yamaguch 0:0232a97b3883 270 XBeeRetryCount(char count = 0) : XBeeUint8(count) {}
yamaguch 0:0232a97b3883 271 };
yamaguch 0:0232a97b3883 272
yamaguch 2:eea7afd6cf08 273 /**
yamaguch 2:eea7afd6cf08 274 * class for XBee status data type
yamaguch 2:eea7afd6cf08 275 */
yamaguch 0:0232a97b3883 276 class XBeeStatus : public XBeeUint8 {
yamaguch 0:0232a97b3883 277 public:
yamaguch 0:0232a97b3883 278 XBeeStatus(char data = 0) : XBeeUint8(data, 16) {}
yamaguch 0:0232a97b3883 279 };
yamaguch 0:0232a97b3883 280
yamaguch 2:eea7afd6cf08 281 /**
yamaguch 2:eea7afd6cf08 282 * class for XBee delivery status data type
yamaguch 2:eea7afd6cf08 283 */
yamaguch 0:0232a97b3883 284 class XBeeDeliveryStatus : public XBeeUint8 {
yamaguch 0:0232a97b3883 285 public:
yamaguch 0:0232a97b3883 286 XBeeDeliveryStatus(char data = 0) : XBeeUint8(data, 16) {}
yamaguch 0:0232a97b3883 287 };
yamaguch 0:0232a97b3883 288
yamaguch 2:eea7afd6cf08 289 /**
yamaguch 2:eea7afd6cf08 290 * class for XBee discovery status data type
yamaguch 2:eea7afd6cf08 291 */
yamaguch 0:0232a97b3883 292 class XBeeDiscoveryStatus : public XBeeUint8 {
yamaguch 0:0232a97b3883 293 public:
yamaguch 0:0232a97b3883 294 XBeeDiscoveryStatus(char data = 0) : XBeeUint8(data, 16) {}
yamaguch 0:0232a97b3883 295 };
yamaguch 0:0232a97b3883 296
yamaguch 2:eea7afd6cf08 297 /**
yamaguch 2:eea7afd6cf08 298 * class for XBee receive status data type
yamaguch 2:eea7afd6cf08 299 */
yamaguch 0:0232a97b3883 300 class XBeeReceiveOptions : public XBeeUint8 {
yamaguch 0:0232a97b3883 301 public:
yamaguch 0:0232a97b3883 302 XBeeReceiveOptions(char data = 0) : XBeeUint8(data, 16) {}
yamaguch 0:0232a97b3883 303 };
yamaguch 0:0232a97b3883 304
yamaguch 5:b82970ef7fb0 305 /**
yamaguch 5:b82970ef7fb0 306 * class for XBee device type
yamaguch 5:b82970ef7fb0 307 */
yamaguch 5:b82970ef7fb0 308 class XBeeDeviceType : public XBeeUint8 {
yamaguch 5:b82970ef7fb0 309 public:
yamaguch 5:b82970ef7fb0 310 XBeeDeviceType(char data = 0) : XBeeUint8(data, 16) {}
yamaguch 5:b82970ef7fb0 311 };
yamaguch 5:b82970ef7fb0 312
yamaguch 5:b82970ef7fb0 313 /**
yamaguch 5:b82970ef7fb0 314 * class for XBee Source Event
yamaguch 5:b82970ef7fb0 315 */
yamaguch 5:b82970ef7fb0 316 class XBeeSourceEvent : public XBeeUint8 {
yamaguch 5:b82970ef7fb0 317 public:
yamaguch 5:b82970ef7fb0 318 XBeeSourceEvent(char data = 0) : XBeeUint8(data, 16) {}
yamaguch 5:b82970ef7fb0 319 };
yamaguch 0:0232a97b3883 320 #endif