XBee API mode library 1.0

Committer:
yamaguch
Date:
Thu Apr 12 10:27:28 2012 +0000
Revision:
4:4a11f50ffb64
Parent:
3:48f7780963e2
updated API documents

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
yamaguch 0:ea8459db49ef 25 bool XBee::scan(ValueType type, char *value, int maxlength, int *length) {
yamaguch 0:ea8459db49ef 26 if (received != out || (in == out && free != 0))
yamaguch 0:ea8459db49ef 27 return false;
yamaguch 0:ea8459db49ef 28
yamaguch 0:ea8459db49ef 29 return scan(out, type, value, maxlength, length);
yamaguch 0:ea8459db49ef 30 }
yamaguch 0:ea8459db49ef 31
yamaguch 0:ea8459db49ef 32 bool XBee::scan(int index, ValueType type, char *value, int maxlength, int *length) {
yamaguch 0:ea8459db49ef 33 int from = 0;
yamaguch 0:ea8459db49ef 34 int len = 1;
yamaguch 0:ea8459db49ef 35 FrameType frameType = getFrameType(buf[INDEX(index + 2)]);
yamaguch 0:ea8459db49ef 36
yamaguch 0:ea8459db49ef 37 if (frameType == (FrameType) None)
yamaguch 0:ea8459db49ef 38 return false;
yamaguch 0:ea8459db49ef 39
yamaguch 0:ea8459db49ef 40 switch (type) {
yamaguch 0:ea8459db49ef 41 case FrameID:
yamaguch 0:ea8459db49ef 42 from = 1;
yamaguch 0:ea8459db49ef 43 break;
yamaguch 0:ea8459db49ef 44 case ATCommand:
yamaguch 0:ea8459db49ef 45 switch (frameType) {
yamaguch 0:ea8459db49ef 46 case ATCommandResponse:
yamaguch 0:ea8459db49ef 47 from = 2;
yamaguch 0:ea8459db49ef 48 break;
yamaguch 0:ea8459db49ef 49 case RemoteCommandResponse:
yamaguch 0:ea8459db49ef 50 from = 12;
yamaguch 0:ea8459db49ef 51 break;
yamaguch 0:ea8459db49ef 52 }
yamaguch 0:ea8459db49ef 53 len = 2;
yamaguch 0:ea8459db49ef 54 break;
yamaguch 0:ea8459db49ef 55 case Status:
yamaguch 0:ea8459db49ef 56 switch (frameType) {
yamaguch 0:ea8459db49ef 57 case ATCommandResponse:
yamaguch 0:ea8459db49ef 58 from = 4;
yamaguch 0:ea8459db49ef 59 break;
yamaguch 0:ea8459db49ef 60 case ModemStatus:
yamaguch 0:ea8459db49ef 61 from = 1;
yamaguch 0:ea8459db49ef 62 break;
yamaguch 0:ea8459db49ef 63 case RemoteCommandResponse:
yamaguch 0:ea8459db49ef 64 from = 14;
yamaguch 0:ea8459db49ef 65 break;
yamaguch 0:ea8459db49ef 66 }
yamaguch 0:ea8459db49ef 67 break;
yamaguch 0:ea8459db49ef 68 case CommandData:
yamaguch 0:ea8459db49ef 69 switch (frameType) {
yamaguch 0:ea8459db49ef 70 case ATCommandResponse:
yamaguch 0:ea8459db49ef 71 from = 5;
yamaguch 0:ea8459db49ef 72 len = SIZE(buf, index) - 5;
yamaguch 0:ea8459db49ef 73 break;
yamaguch 0:ea8459db49ef 74 case RemoteCommandResponse:
yamaguch 0:ea8459db49ef 75 from = 15;
yamaguch 0:ea8459db49ef 76 len = SIZE(buf, index) - 15;
yamaguch 0:ea8459db49ef 77 break;
yamaguch 0:ea8459db49ef 78 }
yamaguch 0:ea8459db49ef 79 break;
yamaguch 0:ea8459db49ef 80 case Address16:
yamaguch 0:ea8459db49ef 81 switch (frameType) {
yamaguch 0:ea8459db49ef 82 case ZigBeeTransmitStatus:
yamaguch 0:ea8459db49ef 83 from = 4;
yamaguch 0:ea8459db49ef 84 break;
yamaguch 0:ea8459db49ef 85 case ZigBeeReceivePacket:
yamaguch 0:ea8459db49ef 86 case ZigBeeIODataSampleRxIndicator:
yamaguch 0:ea8459db49ef 87 from = 9;
yamaguch 0:ea8459db49ef 88 break;
yamaguch 0:ea8459db49ef 89 case RemoteCommandResponse:
yamaguch 0:ea8459db49ef 90 from = 10;
yamaguch 0:ea8459db49ef 91 break;
yamaguch 0:ea8459db49ef 92 }
yamaguch 0:ea8459db49ef 93 len = 2;
yamaguch 0:ea8459db49ef 94 break;
yamaguch 0:ea8459db49ef 95 case Address64:
yamaguch 0:ea8459db49ef 96 switch (frameType) {
yamaguch 0:ea8459db49ef 97 case ZigBeeReceivePacket:
yamaguch 0:ea8459db49ef 98 case ZigBeeIODataSampleRxIndicator:
yamaguch 0:ea8459db49ef 99 from = 1;
yamaguch 0:ea8459db49ef 100 break;
yamaguch 0:ea8459db49ef 101 case RemoteCommandResponse:
yamaguch 0:ea8459db49ef 102 from = 2;
yamaguch 0:ea8459db49ef 103 break;
yamaguch 0:ea8459db49ef 104 }
yamaguch 0:ea8459db49ef 105 len = 8;
yamaguch 0:ea8459db49ef 106 break;
yamaguch 0:ea8459db49ef 107 case RetryCount:
yamaguch 0:ea8459db49ef 108 from = 4;
yamaguch 0:ea8459db49ef 109 break;
yamaguch 0:ea8459db49ef 110 case DeliveryStatus:
yamaguch 0:ea8459db49ef 111 from = 5;
yamaguch 0:ea8459db49ef 112 break;
yamaguch 0:ea8459db49ef 113 case DiscoveryStatus:
yamaguch 0:ea8459db49ef 114 from = 6;
yamaguch 0:ea8459db49ef 115 break;
yamaguch 0:ea8459db49ef 116 case ReceiveOptions:
yamaguch 0:ea8459db49ef 117 from = 11;
yamaguch 0:ea8459db49ef 118 break;
yamaguch 0:ea8459db49ef 119 case ReceivedData:
yamaguch 0:ea8459db49ef 120 from = 12;
yamaguch 0:ea8459db49ef 121 len = SIZE(buf, index) - 12;
yamaguch 0:ea8459db49ef 122 break;
yamaguch 0:ea8459db49ef 123 case RawData:
yamaguch 0:ea8459db49ef 124 from = 1;
yamaguch 0:ea8459db49ef 125 len = SIZE(buf, index) - 1;
yamaguch 0:ea8459db49ef 126 break;
yamaguch 0:ea8459db49ef 127 }
yamaguch 0:ea8459db49ef 128
yamaguch 0:ea8459db49ef 129 if (from > 0) {
yamaguch 0:ea8459db49ef 130 copy(value, INDEX(index + 2 + from), min(len, maxlength));
yamaguch 0:ea8459db49ef 131 if (length) *length = len;
yamaguch 0:ea8459db49ef 132 return true;
yamaguch 0:ea8459db49ef 133 } else
yamaguch 0:ea8459db49ef 134 return false;
yamaguch 0:ea8459db49ef 135 }