XBee API mode library

Committer:
yamaguch
Date:
Thu Jul 26 10:33:11 2012 +0000
Revision:
0:0232a97b3883
Child:
1:482216f3f6ee
[mbed] converted /XBeeExamples/XBee

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yamaguch 0:0232a97b3883 1 /*
yamaguch 0:0232a97b3883 2 Copyright (c) 2011, 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 "XBee.h"
yamaguch 0:0232a97b3883 24 #include <ctype.h>
yamaguch 0:0232a97b3883 25
yamaguch 0:0232a97b3883 26 void XBee::dump() {
yamaguch 0:0232a97b3883 27 if (received != out || (in == out && free != 0))
yamaguch 0:0232a97b3883 28 return;
yamaguch 0:0232a97b3883 29
yamaguch 0:0232a97b3883 30 switch (getFrameType(buf[INDEX(out + 2)])) {
yamaguch 0:0232a97b3883 31 case ATCommandResponse: {
yamaguch 0:0232a97b3883 32 char id, name[2], status, data[16];
yamaguch 0:0232a97b3883 33 int length = 0;
yamaguch 0:0232a97b3883 34 scan(FrameID, &id);
yamaguch 0:0232a97b3883 35 scan(ATCommand, name, sizeof(name));
yamaguch 0:0232a97b3883 36 scan(Status, &status);
yamaguch 0:0232a97b3883 37 scan(CommandData, data, sizeof(data), &length);
yamaguch 0:0232a97b3883 38 mon.printf("ATCommandResponse, Id=%d, Nm=%c%c, St=%02X, ", id & 255, name[0], name[1], status);
yamaguch 0:0232a97b3883 39 if (name[0] == 'I' && name[1] == 'S' && status == 0)
yamaguch 0:0232a97b3883 40 dumpIOSample(data, length);
yamaguch 0:0232a97b3883 41 else
yamaguch 0:0232a97b3883 42 dump(data, length);
yamaguch 0:0232a97b3883 43 }
yamaguch 0:0232a97b3883 44 break;
yamaguch 0:0232a97b3883 45
yamaguch 0:0232a97b3883 46 case ModemStatus: {
yamaguch 0:0232a97b3883 47 char status;
yamaguch 0:0232a97b3883 48 scan(Status, &status);
yamaguch 0:0232a97b3883 49 mon.printf("ModemStatus, St=%02X\n", status);
yamaguch 0:0232a97b3883 50 }
yamaguch 0:0232a97b3883 51 break;
yamaguch 0:0232a97b3883 52
yamaguch 0:0232a97b3883 53 case ZigBeeTransmitStatus: {
yamaguch 0:0232a97b3883 54 char id, address16[2], retry, delivery, discovery;
yamaguch 0:0232a97b3883 55 scan(FrameID, &id);
yamaguch 0:0232a97b3883 56 scan(Address16, address16, sizeof(address16));
yamaguch 0:0232a97b3883 57 scan(RetryCount, &retry);
yamaguch 0:0232a97b3883 58 scan(DeliveryStatus, &delivery);
yamaguch 0:0232a97b3883 59 scan(DiscoveryStatus, &discovery);
yamaguch 0:0232a97b3883 60 mon.printf("ZigBeeTransmitStatus, Id=%d, ad=%02X%02X, Rty=%d, Dlv=%02X, Dsc=%02X\n",
yamaguch 0:0232a97b3883 61 id & 255, address16[0], address16[1], retry & 255, delivery, discovery);
yamaguch 0:0232a97b3883 62 }
yamaguch 0:0232a97b3883 63 break;
yamaguch 0:0232a97b3883 64
yamaguch 0:0232a97b3883 65 case ZigBeeReceivePacket: {
yamaguch 0:0232a97b3883 66 char address64[8], address16[2], options, data[32];
yamaguch 0:0232a97b3883 67 int length = 0;
yamaguch 0:0232a97b3883 68 scan(Address64, address64, sizeof(address64));
yamaguch 0:0232a97b3883 69 scan(Address16, address16, sizeof(address16));
yamaguch 0:0232a97b3883 70 scan(ReceiveOptions, &options);
yamaguch 0:0232a97b3883 71 scan(ReceivedData, data, sizeof(data), &length);
yamaguch 0:0232a97b3883 72 mon.printf("ZigBeeReceivePacket, AD=%02X%02X%02X%02X %02X%02X%02X%02X, ad=%02X%02X, Op=%02X, Length=%d, ",
yamaguch 0:0232a97b3883 73 address64[0], address64[1], address64[2], address64[3], address64[4], address64[5],
yamaguch 0:0232a97b3883 74 address64[6], address64[7], address16[0], address16[1], options, length);
yamaguch 0:0232a97b3883 75 dump(data, min(sizeof(data), length));
yamaguch 0:0232a97b3883 76 }
yamaguch 0:0232a97b3883 77 break;
yamaguch 0:0232a97b3883 78
yamaguch 0:0232a97b3883 79 case ZigBeeIODataSampleRxIndicator: {
yamaguch 0:0232a97b3883 80 char address64[8], address16[2], options, data[16];
yamaguch 0:0232a97b3883 81 int length = 0;
yamaguch 0:0232a97b3883 82 scan(Address64, address64, sizeof(address64));
yamaguch 0:0232a97b3883 83 scan(Address16, address16, sizeof(address16));
yamaguch 0:0232a97b3883 84 scan(ReceiveOptions, &options);
yamaguch 0:0232a97b3883 85 scan(ReceivedData, data, sizeof(data), &length);
yamaguch 0:0232a97b3883 86 mon.printf("ZigBeeIODataSampleRxIndicator, AD=%02X%02X%02X%02X %02X%02X%02X%02X, ad=%02X%02X, Op=%02X, ",
yamaguch 0:0232a97b3883 87 address64[0], address64[1], address64[2], address64[3], address64[4], address64[5],
yamaguch 0:0232a97b3883 88 address64[6], address64[7], address16[0], address16[1], options);
yamaguch 0:0232a97b3883 89 dumpIOSample(data, length);
yamaguch 0:0232a97b3883 90 }
yamaguch 0:0232a97b3883 91 break;
yamaguch 0:0232a97b3883 92
yamaguch 0:0232a97b3883 93 case RemoteCommandResponse: {
yamaguch 0:0232a97b3883 94 char address64[8], address16[2], id, name[2], status, data[16];
yamaguch 0:0232a97b3883 95 int length = 0;
yamaguch 0:0232a97b3883 96 scan(Address64, address64, sizeof(address64));
yamaguch 0:0232a97b3883 97 scan(Address16, address16, sizeof(address16));
yamaguch 0:0232a97b3883 98 scan(FrameID, &id);
yamaguch 0:0232a97b3883 99 scan(ATCommand, name, sizeof(name));
yamaguch 0:0232a97b3883 100 scan(Status, &status);
yamaguch 0:0232a97b3883 101 scan(CommandData, data, sizeof(data), &length);
yamaguch 0:0232a97b3883 102 mon.printf("RemoteCommandResponse, AD=%02X%02X%02X%02X %02X%02X%02X%02X, ad=%02X%02X, Id=%d, Nm=%c%c, St=%02X, ",
yamaguch 0:0232a97b3883 103 address64[0], address64[1], address64[2], address64[3], address64[4], address64[5],
yamaguch 0:0232a97b3883 104 address64[6], address64[7], address16[0], address16[1], id & 255, name[0], name[1], status);
yamaguch 0:0232a97b3883 105 if (name[0] == 'I' && name[1] == 'S' && status == 0)
yamaguch 0:0232a97b3883 106 dumpIOSample(data, length);
yamaguch 0:0232a97b3883 107 else
yamaguch 0:0232a97b3883 108 dump(data, length);
yamaguch 0:0232a97b3883 109 }
yamaguch 0:0232a97b3883 110 break;
yamaguch 0:0232a97b3883 111
yamaguch 0:0232a97b3883 112 default: {
yamaguch 0:0232a97b3883 113 char data[32];
yamaguch 0:0232a97b3883 114 int length = 0;
yamaguch 0:0232a97b3883 115 scan(RawData, data, sizeof(data), &length);
yamaguch 0:0232a97b3883 116 mon.printf("Frametype:%02X, Length=%d, Data=", buf[INDEX(out + 2)] & 255, length);
yamaguch 0:0232a97b3883 117 dump(data, min(sizeof(data), length));
yamaguch 0:0232a97b3883 118 }
yamaguch 0:0232a97b3883 119 }
yamaguch 0:0232a97b3883 120 }
yamaguch 0:0232a97b3883 121
yamaguch 0:0232a97b3883 122 void XBee::dumpAll() {
yamaguch 0:0232a97b3883 123 mon.printf("cur = %04X\n", cur);
yamaguch 0:0232a97b3883 124 mon.printf("in = %04X\n", in);
yamaguch 0:0232a97b3883 125 mon.printf("out = %04X\n", out);
yamaguch 0:0232a97b3883 126 mon.printf("received = %04X\n", received);
yamaguch 0:0232a97b3883 127 mon.printf("free = %d\n", free);
yamaguch 0:0232a97b3883 128 for (int i = 0; i < BUFSIZE; i += 16) {
yamaguch 0:0232a97b3883 129 mon.printf("%04X: ", i);
yamaguch 0:0232a97b3883 130 dump(buf + i, 16);
yamaguch 0:0232a97b3883 131 }
yamaguch 0:0232a97b3883 132 }
yamaguch 0:0232a97b3883 133
yamaguch 0:0232a97b3883 134 void XBee::dump(const char* data, int length) {
yamaguch 0:0232a97b3883 135 for (int i = 0; i < length; i++) mon.printf("%02X", data[i]);
yamaguch 0:0232a97b3883 136 mon.printf(" | ");
yamaguch 0:0232a97b3883 137 for (int i = 0; i < length; i++) mon.printf("%c", isprint(data[i]) ? data[i] : '.');
yamaguch 0:0232a97b3883 138 mon.printf("\n");
yamaguch 0:0232a97b3883 139 }
yamaguch 0:0232a97b3883 140
yamaguch 0:0232a97b3883 141 void XBee::dumpIOSample(const char* data, int length) {
yamaguch 0:0232a97b3883 142 if (length > 0) {
yamaguch 0:0232a97b3883 143 IOSample sample(data);
yamaguch 0:0232a97b3883 144 //sample.print(mon);
yamaguch 0:0232a97b3883 145 mon.printf(sample);
yamaguch 0:0232a97b3883 146 }
yamaguch 0:0232a97b3883 147 }