XBee API mode library 1.0

Committer:
yamaguch
Date:
Tue Nov 01 09:04:12 2011 +0000
Revision:
0:ea8459db49ef
Child:
3:48f7780963e2
0.9

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