XBee API mode library 1.0

Committer:
yamaguch
Date:
Thu Apr 12 10:20:17 2012 +0000
Revision:
3:48f7780963e2
Parent:
0:ea8459db49ef
1.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yamaguch 0:ea8459db49ef 1 /*
yamaguch 0:ea8459db49ef 2 Copyright (c) 2011, Senio Networks, Inc.
yamaguch 0:ea8459db49ef 3
yamaguch 0:ea8459db49ef 4 Permission is hereby granted, free of charge, to any person obtaining a copy
yamaguch 0:ea8459db49ef 5 of this software and associated documentation files (the "Software"), to deal
yamaguch 0:ea8459db49ef 6 in the Software without restriction, including without limitation the rights
yamaguch 0:ea8459db49ef 7 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
yamaguch 0:ea8459db49ef 8 copies of the Software, and to permit persons to whom the Software is
yamaguch 0:ea8459db49ef 9 furnished to do so, subject to the following conditions:
yamaguch 0:ea8459db49ef 10
yamaguch 0:ea8459db49ef 11 The above copyright notice and this permission notice shall be included in
yamaguch 0:ea8459db49ef 12 all copies or substantial portions of the Software.
yamaguch 0:ea8459db49ef 13
yamaguch 0:ea8459db49ef 14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
yamaguch 0:ea8459db49ef 15 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
yamaguch 0:ea8459db49ef 16 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
yamaguch 0:ea8459db49ef 17 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
yamaguch 0:ea8459db49ef 18 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
yamaguch 0:ea8459db49ef 19 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
yamaguch 0:ea8459db49ef 20 THE SOFTWARE.
yamaguch 0:ea8459db49ef 21 */
yamaguch 0:ea8459db49ef 22
yamaguch 0:ea8459db49ef 23 #include "XBee.h"
yamaguch 0:ea8459db49ef 24 #include <ctype.h>
yamaguch 0:ea8459db49ef 25
yamaguch 0:ea8459db49ef 26 void XBee::dump() {
yamaguch 0:ea8459db49ef 27 if (received != out || (in == out && free != 0))
yamaguch 0:ea8459db49ef 28 return;
yamaguch 0:ea8459db49ef 29
yamaguch 0:ea8459db49ef 30 switch (getFrameType(buf[INDEX(out + 2)])) {
yamaguch 0:ea8459db49ef 31 case ATCommandResponse: {
yamaguch 0:ea8459db49ef 32 char id, name[2], status, data[16];
yamaguch 0:ea8459db49ef 33 int length = 0;
yamaguch 0:ea8459db49ef 34 scan(FrameID, &id);
yamaguch 0:ea8459db49ef 35 scan(ATCommand, name, sizeof(name));
yamaguch 0:ea8459db49ef 36 scan(Status, &status);
yamaguch 0:ea8459db49ef 37 scan(CommandData, data, sizeof(data), &length);
yamaguch 0:ea8459db49ef 38 mon.printf("ATCommandResponse, Id=%d, Nm=%c%c, St=%02X, ", id & 255, name[0], name[1], status);
yamaguch 0:ea8459db49ef 39 if (name[0] == 'I' && name[1] == 'S' && status == 0)
yamaguch 0:ea8459db49ef 40 dumpIOSample(data, length);
yamaguch 0:ea8459db49ef 41 else
yamaguch 0:ea8459db49ef 42 dump(data, length);
yamaguch 0:ea8459db49ef 43 }
yamaguch 0:ea8459db49ef 44 break;
yamaguch 0:ea8459db49ef 45
yamaguch 0:ea8459db49ef 46 case ModemStatus: {
yamaguch 0:ea8459db49ef 47 char status;
yamaguch 0:ea8459db49ef 48 scan(Status, &status);
yamaguch 0:ea8459db49ef 49 mon.printf("ModemStatus, St=%02X\n", status);
yamaguch 0:ea8459db49ef 50 }
yamaguch 0:ea8459db49ef 51 break;
yamaguch 0:ea8459db49ef 52
yamaguch 0:ea8459db49ef 53 case ZigBeeTransmitStatus: {
yamaguch 0:ea8459db49ef 54 char id, address16[2], retry, delivery, discovery;
yamaguch 0:ea8459db49ef 55 scan(FrameID, &id);
yamaguch 0:ea8459db49ef 56 scan(Address16, address16, sizeof(address16));
yamaguch 0:ea8459db49ef 57 scan(RetryCount, &retry);
yamaguch 0:ea8459db49ef 58 scan(DeliveryStatus, &delivery);
yamaguch 0:ea8459db49ef 59 scan(DiscoveryStatus, &discovery);
yamaguch 0:ea8459db49ef 60 mon.printf("ZigBeeTransmitStatus, Id=%d, ad=%02X%02X, Rty=%d, Dlv=%02X, Dsc=%02X\n",
yamaguch 0:ea8459db49ef 61 id & 255, address16[0], address16[1], retry & 255, delivery, discovery);
yamaguch 0:ea8459db49ef 62 }
yamaguch 0:ea8459db49ef 63 break;
yamaguch 0:ea8459db49ef 64
yamaguch 0:ea8459db49ef 65 case ZigBeeReceivePacket: {
yamaguch 0:ea8459db49ef 66 char address64[8], address16[2], options, data[32];
yamaguch 0:ea8459db49ef 67 int length = 0;
yamaguch 0:ea8459db49ef 68 scan(Address64, address64, sizeof(address64));
yamaguch 0:ea8459db49ef 69 scan(Address16, address16, sizeof(address16));
yamaguch 0:ea8459db49ef 70 scan(ReceiveOptions, &options);
yamaguch 0:ea8459db49ef 71 scan(ReceivedData, data, sizeof(data), &length);
yamaguch 0:ea8459db49ef 72 mon.printf("ZigBeeReceivePacket, AD=%02X%02X%02X%02X %02X%02X%02X%02X, ad=%02X%02X, Op=%02X, Length=%d, ",
yamaguch 0:ea8459db49ef 73 address64[0], address64[1], address64[2], address64[3], address64[4], address64[5],
yamaguch 0:ea8459db49ef 74 address64[6], address64[7], address16[0], address16[1], options, length);
yamaguch 0:ea8459db49ef 75 dump(data, min(sizeof(data), length));
yamaguch 0:ea8459db49ef 76 }
yamaguch 0:ea8459db49ef 77 break;
yamaguch 0:ea8459db49ef 78
yamaguch 0:ea8459db49ef 79 case ZigBeeIODataSampleRxIndicator: {
yamaguch 0:ea8459db49ef 80 char address64[8], address16[2], options, data[16];
yamaguch 0:ea8459db49ef 81 int length = 0;
yamaguch 0:ea8459db49ef 82 scan(Address64, address64, sizeof(address64));
yamaguch 0:ea8459db49ef 83 scan(Address16, address16, sizeof(address16));
yamaguch 0:ea8459db49ef 84 scan(ReceiveOptions, &options);
yamaguch 0:ea8459db49ef 85 scan(ReceivedData, data, sizeof(data), &length);
yamaguch 0:ea8459db49ef 86 mon.printf("ZigBeeIODataSampleRxIndicator, AD=%02X%02X%02X%02X %02X%02X%02X%02X, ad=%02X%02X, Op=%02X, ",
yamaguch 0:ea8459db49ef 87 address64[0], address64[1], address64[2], address64[3], address64[4], address64[5],
yamaguch 0:ea8459db49ef 88 address64[6], address64[7], address16[0], address16[1], options);
yamaguch 0:ea8459db49ef 89 dumpIOSample(data, length);
yamaguch 0:ea8459db49ef 90 }
yamaguch 0:ea8459db49ef 91 break;
yamaguch 0:ea8459db49ef 92
yamaguch 0:ea8459db49ef 93 case RemoteCommandResponse: {
yamaguch 0:ea8459db49ef 94 char address64[8], address16[2], id, name[2], status, data[16];
yamaguch 0:ea8459db49ef 95 int length = 0;
yamaguch 0:ea8459db49ef 96 scan(Address64, address64, sizeof(address64));
yamaguch 0:ea8459db49ef 97 scan(Address16, address16, sizeof(address16));
yamaguch 0:ea8459db49ef 98 scan(FrameID, &id);
yamaguch 0:ea8459db49ef 99 scan(ATCommand, name, sizeof(name));
yamaguch 0:ea8459db49ef 100 scan(Status, &status);
yamaguch 0:ea8459db49ef 101 scan(CommandData, data, sizeof(data), &length);
yamaguch 0:ea8459db49ef 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:ea8459db49ef 103 address64[0], address64[1], address64[2], address64[3], address64[4], address64[5],
yamaguch 0:ea8459db49ef 104 address64[6], address64[7], address16[0], address16[1], id & 255, name[0], name[1], status);
yamaguch 0:ea8459db49ef 105 if (name[0] == 'I' && name[1] == 'S' && status == 0)
yamaguch 0:ea8459db49ef 106 dumpIOSample(data, length);
yamaguch 0:ea8459db49ef 107 else
yamaguch 0:ea8459db49ef 108 dump(data, length);
yamaguch 0:ea8459db49ef 109 }
yamaguch 0:ea8459db49ef 110 break;
yamaguch 0:ea8459db49ef 111
yamaguch 0:ea8459db49ef 112 default: {
yamaguch 0:ea8459db49ef 113 char data[32];
yamaguch 0:ea8459db49ef 114 int length = 0;
yamaguch 0:ea8459db49ef 115 scan(RawData, data, sizeof(data), &length);
yamaguch 0:ea8459db49ef 116 mon.printf("Frametype:%02X, Length=%d, Data=", buf[INDEX(out + 2)] & 255, length);
yamaguch 0:ea8459db49ef 117 dump(data, min(sizeof(data), length));
yamaguch 0:ea8459db49ef 118 }
yamaguch 0:ea8459db49ef 119 }
yamaguch 0:ea8459db49ef 120 }
yamaguch 0:ea8459db49ef 121
yamaguch 0:ea8459db49ef 122 void XBee::dumpAll() {
yamaguch 0:ea8459db49ef 123 mon.printf("cur = %04X\n", cur);
yamaguch 0:ea8459db49ef 124 mon.printf("in = %04X\n", in);
yamaguch 0:ea8459db49ef 125 mon.printf("out = %04X\n", out);
yamaguch 0:ea8459db49ef 126 mon.printf("received = %04X\n", received);
yamaguch 0:ea8459db49ef 127 mon.printf("free = %d\n", free);
yamaguch 0:ea8459db49ef 128 for (int i = 0; i < BUFSIZE; i += 16) {
yamaguch 0:ea8459db49ef 129 mon.printf("%04X: ", i);
yamaguch 0:ea8459db49ef 130 dump(buf + i, 16);
yamaguch 0:ea8459db49ef 131 }
yamaguch 0:ea8459db49ef 132 }
yamaguch 0:ea8459db49ef 133
yamaguch 3:48f7780963e2 134 void XBee::dump(const char* data, int length) {
yamaguch 0:ea8459db49ef 135 for (int i = 0; i < length; i++) mon.printf("%02X", data[i]);
yamaguch 0:ea8459db49ef 136 mon.printf(" | ");
yamaguch 0:ea8459db49ef 137 for (int i = 0; i < length; i++) mon.printf("%c", isprint(data[i]) ? data[i] : '.');
yamaguch 0:ea8459db49ef 138 mon.printf("\n");
yamaguch 0:ea8459db49ef 139 }
yamaguch 0:ea8459db49ef 140
yamaguch 3:48f7780963e2 141 void XBee::dumpIOSample(const char* data, int length) {
yamaguch 0:ea8459db49ef 142 if (length > 0) {
yamaguch 0:ea8459db49ef 143 IOSample sample(data);
yamaguch 3:48f7780963e2 144 //sample.print(mon);
yamaguch 3:48f7780963e2 145 mon.printf(sample);
yamaguch 0:ea8459db49ef 146 }
yamaguch 0:ea8459db49ef 147 }