XBee API mode library

Committer:
yamaguch
Date:
Thu Sep 20 10:50:00 2012 +0000
Revision:
3:8453df14bd30
Parent:
2:eea7afd6cf08
Child:
5:b82970ef7fb0
fixed confirm transmit status bug

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yamaguch 0:0232a97b3883 1 /*
yamaguch 0:0232a97b3883 2 Copyright (c) 2012, 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 0:0232a97b3883 124
yamaguch 0:0232a97b3883 125 private:
yamaguch 0:0232a97b3883 126 char *data;
yamaguch 0:0232a97b3883 127 int capacity;
yamaguch 0:0232a97b3883 128 int size;
yamaguch 0:0232a97b3883 129
yamaguch 0:0232a97b3883 130 char *raw_address() { return (char *) data; }
yamaguch 0:0232a97b3883 131 };
yamaguch 0:0232a97b3883 132
yamaguch 2:eea7afd6cf08 133 /**
yamaguch 2:eea7afd6cf08 134 * class for XBee command data type
yamaguch 2:eea7afd6cf08 135 */
yamaguch 0:0232a97b3883 136 class XBeeCommandData : public XBeeData {
yamaguch 0:0232a97b3883 137 public:
yamaguch 0:0232a97b3883 138 XBeeCommandData(int capacity = 20) : XBeeData(capacity) {}
yamaguch 0:0232a97b3883 139 };
yamaguch 0:0232a97b3883 140
yamaguch 2:eea7afd6cf08 141 /**
yamaguch 2:eea7afd6cf08 142 * class for XBee received data type
yamaguch 2:eea7afd6cf08 143 */
yamaguch 0:0232a97b3883 144 class XBeeReceivedData : public XBeeData {
yamaguch 0:0232a97b3883 145 public:
yamaguch 0:0232a97b3883 146 XBeeReceivedData(int capacity = 128) : XBeeData(capacity) {}
yamaguch 0:0232a97b3883 147 };
yamaguch 0:0232a97b3883 148
yamaguch 2:eea7afd6cf08 149 /**
yamaguch 2:eea7afd6cf08 150 * class for XBee raw data type
yamaguch 2:eea7afd6cf08 151 */
yamaguch 0:0232a97b3883 152 class XBeeRawData : public XBeeData {
yamaguch 0:0232a97b3883 153 public:
yamaguch 0:0232a97b3883 154 XBeeRawData(int capacity = 128) : XBeeData(capacity) {}
yamaguch 0:0232a97b3883 155 };
yamaguch 0:0232a97b3883 156
yamaguch 2:eea7afd6cf08 157 /**
yamaguch 2:eea7afd6cf08 158 * class for XBee AT command data type
yamaguch 2:eea7afd6cf08 159 */
yamaguch 0:0232a97b3883 160 class XBeeATCommand : public XBeeData {
yamaguch 0:0232a97b3883 161 public:
yamaguch 0:0232a97b3883 162 XBeeATCommand() : XBeeData(3) {}
yamaguch 0:0232a97b3883 163 };
yamaguch 0:0232a97b3883 164
yamaguch 2:eea7afd6cf08 165 /**
yamaguch 2:eea7afd6cf08 166 * class for bit array data type
yamaguch 2:eea7afd6cf08 167 */
yamaguch 0:0232a97b3883 168 class BitArray {
yamaguch 0:0232a97b3883 169 public:
yamaguch 0:0232a97b3883 170 BitArray(int mask, int values);
yamaguch 0:0232a97b3883 171 int operator [](int i) const;
yamaguch 0:0232a97b3883 172
yamaguch 0:0232a97b3883 173 private:
yamaguch 0:0232a97b3883 174 int mask;
yamaguch 0:0232a97b3883 175 int values;
yamaguch 0:0232a97b3883 176
yamaguch 0:0232a97b3883 177 int valueAt(int i) const;
yamaguch 0:0232a97b3883 178 };
yamaguch 0:0232a97b3883 179
yamaguch 2:eea7afd6cf08 180 /**
yamaguch 2:eea7afd6cf08 181 * class for int array data type
yamaguch 2:eea7afd6cf08 182 */
yamaguch 0:0232a97b3883 183 class IntArray {
yamaguch 0:0232a97b3883 184 public:
yamaguch 0:0232a97b3883 185 IntArray(int mask, const char *value);
yamaguch 0:0232a97b3883 186 int operator [](int i) const;
yamaguch 0:0232a97b3883 187
yamaguch 0:0232a97b3883 188 private:
yamaguch 0:0232a97b3883 189 int mask;
yamaguch 0:0232a97b3883 190 const char *values;
yamaguch 0:0232a97b3883 191
yamaguch 0:0232a97b3883 192 int valueAt(int i) const;
yamaguch 0:0232a97b3883 193 };
yamaguch 0:0232a97b3883 194
yamaguch 2:eea7afd6cf08 195 /**
yamaguch 2:eea7afd6cf08 196 * class for IOSample data type
yamaguch 2:eea7afd6cf08 197 */
yamaguch 0:0232a97b3883 198 class IOSample {
yamaguch 0:0232a97b3883 199 public:
yamaguch 0:0232a97b3883 200 IOSample(const char *data);
yamaguch 0:0232a97b3883 201
yamaguch 0:0232a97b3883 202 operator char *();
yamaguch 0:0232a97b3883 203
yamaguch 0:0232a97b3883 204 BitArray dio;
yamaguch 0:0232a97b3883 205 IntArray ad;
yamaguch 0:0232a97b3883 206 private:
yamaguch 0:0232a97b3883 207 char buf[128];
yamaguch 0:0232a97b3883 208 };
yamaguch 0:0232a97b3883 209
yamaguch 2:eea7afd6cf08 210 /**
yamaguch 2:eea7afd6cf08 211 * class for uint8 data type
yamaguch 2:eea7afd6cf08 212 */
yamaguch 0:0232a97b3883 213 class XBeeUint8 {
yamaguch 0:0232a97b3883 214 public:
yamaguch 0:0232a97b3883 215 XBeeUint8(char data = 0, char base = 10) {
yamaguch 0:0232a97b3883 216 this->data = data;
yamaguch 0:0232a97b3883 217 }
yamaguch 0:0232a97b3883 218
yamaguch 0:0232a97b3883 219 operator int() {
yamaguch 0:0232a97b3883 220 return data;
yamaguch 0:0232a97b3883 221 }
yamaguch 0:0232a97b3883 222
yamaguch 0:0232a97b3883 223 operator char *() {
yamaguch 0:0232a97b3883 224 sprintf(buf, base == 10 ? "%d" : "%02X", data);
yamaguch 0:0232a97b3883 225 return buf;
yamaguch 0:0232a97b3883 226 }
yamaguch 0:0232a97b3883 227
yamaguch 0:0232a97b3883 228 friend class XBee;
yamaguch 0:0232a97b3883 229 friend class XBeeFrameID;
yamaguch 0:0232a97b3883 230 friend class XBeeRetryCount;
yamaguch 0:0232a97b3883 231 friend class XBeeStatus;
yamaguch 0:0232a97b3883 232 friend class XBeeDeliveryStatus;
yamaguch 0:0232a97b3883 233 friend class XBeeDiscoveryStatus;
yamaguch 0:0232a97b3883 234 friend class XBeeReceiveOptions;
yamaguch 0:0232a97b3883 235
yamaguch 0:0232a97b3883 236 private:
yamaguch 0:0232a97b3883 237 char data;
yamaguch 0:0232a97b3883 238 char base;
yamaguch 0:0232a97b3883 239 char buf[4];
yamaguch 0:0232a97b3883 240
yamaguch 0:0232a97b3883 241 char *raw_address() {
yamaguch 0:0232a97b3883 242 return &data;
yamaguch 0:0232a97b3883 243 }
yamaguch 0:0232a97b3883 244 };
yamaguch 0:0232a97b3883 245
yamaguch 2:eea7afd6cf08 246 /**
yamaguch 2:eea7afd6cf08 247 * class for XBee frame ID data type
yamaguch 2:eea7afd6cf08 248 */
yamaguch 0:0232a97b3883 249 class XBeeFrameID : public XBeeUint8 {
yamaguch 0:0232a97b3883 250 public:
yamaguch 0:0232a97b3883 251 XBeeFrameID(char id = 0) : XBeeUint8(id) {}
yamaguch 0:0232a97b3883 252 };
yamaguch 0:0232a97b3883 253
yamaguch 2:eea7afd6cf08 254 /**
yamaguch 2:eea7afd6cf08 255 * class for XBee retry count data type
yamaguch 2:eea7afd6cf08 256 */
yamaguch 0:0232a97b3883 257 class XBeeRetryCount : public XBeeUint8 {
yamaguch 0:0232a97b3883 258 public:
yamaguch 0:0232a97b3883 259 XBeeRetryCount(char count = 0) : XBeeUint8(count) {}
yamaguch 0:0232a97b3883 260 };
yamaguch 0:0232a97b3883 261
yamaguch 2:eea7afd6cf08 262 /**
yamaguch 2:eea7afd6cf08 263 * class for XBee status data type
yamaguch 2:eea7afd6cf08 264 */
yamaguch 0:0232a97b3883 265 class XBeeStatus : public XBeeUint8 {
yamaguch 0:0232a97b3883 266 public:
yamaguch 0:0232a97b3883 267 XBeeStatus(char data = 0) : XBeeUint8(data, 16) {}
yamaguch 0:0232a97b3883 268 };
yamaguch 0:0232a97b3883 269
yamaguch 2:eea7afd6cf08 270 /**
yamaguch 2:eea7afd6cf08 271 * class for XBee delivery status data type
yamaguch 2:eea7afd6cf08 272 */
yamaguch 0:0232a97b3883 273 class XBeeDeliveryStatus : public XBeeUint8 {
yamaguch 0:0232a97b3883 274 public:
yamaguch 0:0232a97b3883 275 XBeeDeliveryStatus(char data = 0) : XBeeUint8(data, 16) {}
yamaguch 0:0232a97b3883 276 };
yamaguch 0:0232a97b3883 277
yamaguch 2:eea7afd6cf08 278 /**
yamaguch 2:eea7afd6cf08 279 * class for XBee discovery status data type
yamaguch 2:eea7afd6cf08 280 */
yamaguch 0:0232a97b3883 281 class XBeeDiscoveryStatus : public XBeeUint8 {
yamaguch 0:0232a97b3883 282 public:
yamaguch 0:0232a97b3883 283 XBeeDiscoveryStatus(char data = 0) : XBeeUint8(data, 16) {}
yamaguch 0:0232a97b3883 284 };
yamaguch 0:0232a97b3883 285
yamaguch 2:eea7afd6cf08 286 /**
yamaguch 2:eea7afd6cf08 287 * class for XBee receive status data type
yamaguch 2:eea7afd6cf08 288 */
yamaguch 0:0232a97b3883 289 class XBeeReceiveOptions : public XBeeUint8 {
yamaguch 0:0232a97b3883 290 public:
yamaguch 0:0232a97b3883 291 XBeeReceiveOptions(char data = 0) : XBeeUint8(data, 16) {}
yamaguch 0:0232a97b3883 292 };
yamaguch 0:0232a97b3883 293
yamaguch 0:0232a97b3883 294 #endif