XBee API mode library

Committer:
yamaguch
Date:
Thu Sep 20 02:28:35 2012 +0000
Revision:
1:482216f3f6ee
Parent:
0:0232a97b3883
Child:
3:8453df14bd30
fixed dump iosample 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 $Id: XBeeDataTypes.cpp,v 1.3 2012/03/23 09:05:19 yamaguchi Exp yamaguchi $
yamaguch 0:0232a97b3883 23 */
yamaguch 0:0232a97b3883 24
yamaguch 0:0232a97b3883 25 #include "XBeeDataTypes.h"
yamaguch 0:0232a97b3883 26
yamaguch 0:0232a97b3883 27 XBeeAddress64::XBeeAddress64() : address64() {
yamaguch 0:0232a97b3883 28 }
yamaguch 0:0232a97b3883 29
yamaguch 0:0232a97b3883 30 XBeeAddress64::XBeeAddress64(const char *address) {
yamaguch 0:0232a97b3883 31 memcpy(address64, address, 8);
yamaguch 0:0232a97b3883 32 }
yamaguch 0:0232a97b3883 33
yamaguch 0:0232a97b3883 34 XBeeAddress64::XBeeAddress64(uint64_t address) {
yamaguch 0:0232a97b3883 35 uint64_t a = address;
yamaguch 0:0232a97b3883 36 for (int i = 0; i < 8; i++, a >>= 8)
yamaguch 0:0232a97b3883 37 address64[7 - i] = a & 255;
yamaguch 0:0232a97b3883 38 }
yamaguch 0:0232a97b3883 39
yamaguch 0:0232a97b3883 40 XBeeAddress64::XBeeAddress64(uint32_t high, uint32_t low) {
yamaguch 0:0232a97b3883 41 uint64_t a = uint64_t(high) << 32 | uint64_t(low);
yamaguch 0:0232a97b3883 42 for (int i = 0; i < 8; i++, a >>= 8)
yamaguch 0:0232a97b3883 43 address64[7 - i] = a & 255;
yamaguch 0:0232a97b3883 44 }
yamaguch 0:0232a97b3883 45
yamaguch 0:0232a97b3883 46 XBeeAddress64::operator uint64_t() {
yamaguch 0:0232a97b3883 47 uint64_t a = address64[0];
yamaguch 0:0232a97b3883 48 for (int i = 1; i < 8; i++) {
yamaguch 0:0232a97b3883 49 a <<= 8;
yamaguch 0:0232a97b3883 50 a |= address64[i];
yamaguch 0:0232a97b3883 51 }
yamaguch 0:0232a97b3883 52 return a;
yamaguch 0:0232a97b3883 53 }
yamaguch 0:0232a97b3883 54
yamaguch 0:0232a97b3883 55 bool XBeeAddress64::operator ==(XBeeAddress64& addr) {
yamaguch 0:0232a97b3883 56 return *(uint64_t *) address64 == *(uint64_t *) (addr.address64);
yamaguch 0:0232a97b3883 57 }
yamaguch 0:0232a97b3883 58
yamaguch 0:0232a97b3883 59 bool XBeeAddress64::operator ==(const char* addr) {
yamaguch 0:0232a97b3883 60 return *(uint64_t *) address64 == *(uint64_t *) addr;
yamaguch 0:0232a97b3883 61 }
yamaguch 0:0232a97b3883 62
yamaguch 0:0232a97b3883 63 bool XBeeAddress64::operator ==(uint64_t addr) {
yamaguch 0:0232a97b3883 64 return *(uint64_t *) address64 == addr;
yamaguch 0:0232a97b3883 65 }
yamaguch 0:0232a97b3883 66
yamaguch 0:0232a97b3883 67 XBeeAddress64::operator char *() {
yamaguch 0:0232a97b3883 68 sprintf(buf, "%02X%02X%02X%02X %02X%02X%02X%02X",
yamaguch 0:0232a97b3883 69 address64[0], address64[1], address64[2], address64[3],
yamaguch 0:0232a97b3883 70 address64[4], address64[5], address64[6], address64[7]);
yamaguch 0:0232a97b3883 71
yamaguch 0:0232a97b3883 72 return buf;
yamaguch 0:0232a97b3883 73 }
yamaguch 0:0232a97b3883 74
yamaguch 0:0232a97b3883 75 XBeeAddress16::XBeeAddress16() : address16() {
yamaguch 0:0232a97b3883 76 }
yamaguch 0:0232a97b3883 77
yamaguch 0:0232a97b3883 78 XBeeAddress16::XBeeAddress16(const char *address) {
yamaguch 0:0232a97b3883 79 memcpy(address16, address, 2);
yamaguch 0:0232a97b3883 80 }
yamaguch 0:0232a97b3883 81
yamaguch 0:0232a97b3883 82 XBeeAddress16::XBeeAddress16(uint16_t address) {
yamaguch 0:0232a97b3883 83 address16[0] = (address >> 8) & 255;
yamaguch 0:0232a97b3883 84 address16[1] = address & 255;
yamaguch 0:0232a97b3883 85 }
yamaguch 0:0232a97b3883 86
yamaguch 0:0232a97b3883 87 XBeeAddress16::XBeeAddress16(char high, char low) {
yamaguch 0:0232a97b3883 88 address16[0] = high;
yamaguch 0:0232a97b3883 89 address16[1] = low;
yamaguch 0:0232a97b3883 90 }
yamaguch 0:0232a97b3883 91
yamaguch 0:0232a97b3883 92 XBeeAddress16::operator uint16_t() {
yamaguch 0:0232a97b3883 93 return uint16_t(address16[0]) << 8 | uint16_t(address16[0]);
yamaguch 0:0232a97b3883 94 }
yamaguch 0:0232a97b3883 95
yamaguch 0:0232a97b3883 96 bool XBeeAddress16::operator ==(XBeeAddress16& addr) {
yamaguch 0:0232a97b3883 97 return *(uint16_t *) address16 == *(uint16_t *) (addr.address16);
yamaguch 0:0232a97b3883 98 }
yamaguch 0:0232a97b3883 99
yamaguch 0:0232a97b3883 100 bool XBeeAddress16::operator ==(const char* addr) {
yamaguch 0:0232a97b3883 101 return *(uint16_t *) address16 == *(uint16_t *) addr;
yamaguch 0:0232a97b3883 102 }
yamaguch 0:0232a97b3883 103
yamaguch 0:0232a97b3883 104 bool XBeeAddress16::operator ==(uint16_t addr) {
yamaguch 0:0232a97b3883 105 return *(uint16_t *) address16 == addr;
yamaguch 0:0232a97b3883 106 }
yamaguch 0:0232a97b3883 107
yamaguch 0:0232a97b3883 108 XBeeAddress16::operator char *() {
yamaguch 0:0232a97b3883 109 sprintf(buf, "%02X%02X", address16[0], address16[1]);
yamaguch 0:0232a97b3883 110 return buf;
yamaguch 0:0232a97b3883 111 }
yamaguch 0:0232a97b3883 112
yamaguch 0:0232a97b3883 113 XBeeData::XBeeData(int capacity) : capacity(capacity), size(0) {
yamaguch 0:0232a97b3883 114 data = new char[capacity]();
yamaguch 0:0232a97b3883 115 }
yamaguch 0:0232a97b3883 116
yamaguch 0:0232a97b3883 117 XBeeData::~XBeeData() {
yamaguch 0:0232a97b3883 118 delete[] data;
yamaguch 0:0232a97b3883 119 }
yamaguch 0:0232a97b3883 120
yamaguch 0:0232a97b3883 121 BitArray::BitArray(int mask, int values) : mask(mask), values(values) {
yamaguch 0:0232a97b3883 122 }
yamaguch 0:0232a97b3883 123
yamaguch 0:0232a97b3883 124 int BitArray::operator [](int i) const {
yamaguch 0:0232a97b3883 125 return valueAt(i);
yamaguch 0:0232a97b3883 126 }
yamaguch 0:0232a97b3883 127
yamaguch 0:0232a97b3883 128 int BitArray::valueAt(int i) const {
yamaguch 0:0232a97b3883 129 return (mask & 1 << i) ? (values >> i) & 1 : -1;
yamaguch 0:0232a97b3883 130 }
yamaguch 0:0232a97b3883 131
yamaguch 1:482216f3f6ee 132 IntArray::IntArray(int mask, const char *values) : mask(mask), values(values) {
yamaguch 0:0232a97b3883 133 }
yamaguch 0:0232a97b3883 134
yamaguch 0:0232a97b3883 135 int IntArray::operator [](int i) const {
yamaguch 0:0232a97b3883 136 return valueAt(i);
yamaguch 0:0232a97b3883 137 }
yamaguch 0:0232a97b3883 138
yamaguch 0:0232a97b3883 139 int IntArray::valueAt(int i) const {
yamaguch 0:0232a97b3883 140 if (mask & 1 << i) {
yamaguch 0:0232a97b3883 141 int count = 0;
yamaguch 0:0232a97b3883 142 for (int j = 0; j < i; j++) {
yamaguch 0:0232a97b3883 143 if (mask & 1 << j) count++;
yamaguch 0:0232a97b3883 144 }
yamaguch 0:0232a97b3883 145 const char *p = values + 2 * count;
yamaguch 0:0232a97b3883 146 return (p[0] << 8) | p[1];
yamaguch 0:0232a97b3883 147 } else {
yamaguch 0:0232a97b3883 148 return -1;
yamaguch 0:0232a97b3883 149 }
yamaguch 0:0232a97b3883 150 }
yamaguch 0:0232a97b3883 151
yamaguch 0:0232a97b3883 152 IOSample::IOSample(const char *data)
yamaguch 0:0232a97b3883 153 : dio((data[1] << 8 | data[2]), (data[1] << 8 | data[2]) ? (data[4] << 8 | data[5]) : 0),
yamaguch 0:0232a97b3883 154 ad(data[3], (data[1] << 8 | data[2]) ? data + 6 : data + 4) {
yamaguch 0:0232a97b3883 155 }
yamaguch 0:0232a97b3883 156
yamaguch 0:0232a97b3883 157 IOSample::operator char *() {
yamaguch 0:0232a97b3883 158 bool first = true;
yamaguch 0:0232a97b3883 159 char *p = buf;
yamaguch 0:0232a97b3883 160
yamaguch 0:0232a97b3883 161 for (int i = 0; i < 16; i++) {
yamaguch 0:0232a97b3883 162 if (dio[i] != -1) {
yamaguch 0:0232a97b3883 163 if (first) {
yamaguch 0:0232a97b3883 164 first = false;
yamaguch 0:0232a97b3883 165 p += sprintf(p, "DIO%d=%d", i, dio[i]);
yamaguch 0:0232a97b3883 166 } else {
yamaguch 0:0232a97b3883 167 p += sprintf(p, ", DIO%d=%d", i, dio[i]);
yamaguch 0:0232a97b3883 168 }
yamaguch 0:0232a97b3883 169 }
yamaguch 0:0232a97b3883 170 }
yamaguch 0:0232a97b3883 171
yamaguch 0:0232a97b3883 172 for (int i = 0; i < 8; i++) {
yamaguch 0:0232a97b3883 173 if (ad[i] != -1) {
yamaguch 0:0232a97b3883 174 if (first) {
yamaguch 0:0232a97b3883 175 first = false;
yamaguch 0:0232a97b3883 176 p += sprintf(p, "AD%d=%d", i, ad[i]);
yamaguch 0:0232a97b3883 177 } else {
yamaguch 0:0232a97b3883 178 p += sprintf(p, ", AD%d=%d", i, ad[i]);
yamaguch 0:0232a97b3883 179 }
yamaguch 0:0232a97b3883 180 }
yamaguch 0:0232a97b3883 181 }
yamaguch 0:0232a97b3883 182 return buf;
yamaguch 0:0232a97b3883 183 }