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