XBee and XBee-PRO ZigBee RF modules provide cost-effective wireless connectivity to electronic devices. They are interoperable with other ZigBee PRO feature set devices, including devices from other vendors.

Dependencies:   BufferedArray

Dependents:   MBEDminiproject

Committer:
yangcq88517
Date:
Thu Oct 22 12:28:26 2015 +0000
Revision:
0:837e6c48e90d
Child:
1:3dc0ec2f9fd6
initial upload

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yangcq88517 0:837e6c48e90d 1 #include "APIFrame.h"
yangcq88517 0:837e6c48e90d 2
yangcq88517 0:837e6c48e90d 3 APIFrame::APIFrame(int payloadLength)
yangcq88517 0:837e6c48e90d 4 :BufferedArray(payloadLength)
yangcq88517 0:837e6c48e90d 5 {}
yangcq88517 0:837e6c48e90d 6
yangcq88517 0:837e6c48e90d 7 APIFrame::APIFrame(APIFrame * frame)
yangcq88517 0:837e6c48e90d 8 :BufferedArray(frame)
yangcq88517 0:837e6c48e90d 9 {
yangcq88517 0:837e6c48e90d 10 this->checkSum = frame->checkSum;
yangcq88517 0:837e6c48e90d 11 this->isVerify = frame->isVerify;
yangcq88517 0:837e6c48e90d 12 }
yangcq88517 0:837e6c48e90d 13
yangcq88517 0:837e6c48e90d 14 char APIFrame::getFrameType()
yangcq88517 0:837e6c48e90d 15 {
yangcq88517 0:837e6c48e90d 16 return data[0];
yangcq88517 0:837e6c48e90d 17 }
yangcq88517 0:837e6c48e90d 18
yangcq88517 0:837e6c48e90d 19 void APIFrame::setFrameType(char identifier) {}
yangcq88517 0:837e6c48e90d 20
yangcq88517 0:837e6c48e90d 21 void APIFrame::allocate(int length)
yangcq88517 0:837e6c48e90d 22 {
yangcq88517 0:837e6c48e90d 23 BufferedArray::allocate(length);
yangcq88517 0:837e6c48e90d 24 isVerify = false;
yangcq88517 0:837e6c48e90d 25 }
yangcq88517 0:837e6c48e90d 26
yangcq88517 0:837e6c48e90d 27 void APIFrame::rewind()
yangcq88517 0:837e6c48e90d 28 {
yangcq88517 0:837e6c48e90d 29 BufferedArray::rewind();
yangcq88517 0:837e6c48e90d 30 isVerify = false;
yangcq88517 0:837e6c48e90d 31 }
yangcq88517 0:837e6c48e90d 32
yangcq88517 0:837e6c48e90d 33 bool APIFrame::convert(APIFrame * frame)
yangcq88517 0:837e6c48e90d 34 {
yangcq88517 0:837e6c48e90d 35 if (frame == NULL)
yangcq88517 0:837e6c48e90d 36 return false;
yangcq88517 0:837e6c48e90d 37
yangcq88517 0:837e6c48e90d 38 this->data = frame->data;
yangcq88517 0:837e6c48e90d 39 this->index = frame->index;
yangcq88517 0:837e6c48e90d 40 this->max = frame->max;
yangcq88517 0:837e6c48e90d 41 this->checkSum = frame->checkSum;
yangcq88517 0:837e6c48e90d 42 this->isVerify = frame->isVerify;
yangcq88517 0:837e6c48e90d 43 return true;
yangcq88517 0:837e6c48e90d 44 }
yangcq88517 0:837e6c48e90d 45
yangcq88517 0:837e6c48e90d 46 void APIFrame::set(char value)
yangcq88517 0:837e6c48e90d 47 {
yangcq88517 0:837e6c48e90d 48 BufferedArray::set(value);
yangcq88517 0:837e6c48e90d 49 isVerify = false;
yangcq88517 0:837e6c48e90d 50 }
yangcq88517 0:837e6c48e90d 51
yangcq88517 0:837e6c48e90d 52 void APIFrame::sets(const char * value, int offset, int length)
yangcq88517 0:837e6c48e90d 53 {
yangcq88517 0:837e6c48e90d 54 BufferedArray::sets(value, offset, length);
yangcq88517 0:837e6c48e90d 55 isVerify = false;
yangcq88517 0:837e6c48e90d 56 }
yangcq88517 0:837e6c48e90d 57
yangcq88517 0:837e6c48e90d 58 void APIFrame::set(int position, char value)
yangcq88517 0:837e6c48e90d 59 {
yangcq88517 0:837e6c48e90d 60 BufferedArray::set(position, value);
yangcq88517 0:837e6c48e90d 61 isVerify = false;
yangcq88517 0:837e6c48e90d 62 }
yangcq88517 0:837e6c48e90d 63
yangcq88517 0:837e6c48e90d 64 void APIFrame::sets(int position, const char * value, int offset, int length)
yangcq88517 0:837e6c48e90d 65 {
yangcq88517 0:837e6c48e90d 66 BufferedArray::sets(position, value, offset, length);
yangcq88517 0:837e6c48e90d 67 isVerify = false;
yangcq88517 0:837e6c48e90d 68 }
yangcq88517 0:837e6c48e90d 69
yangcq88517 0:837e6c48e90d 70 char APIFrame::getCheckSum()
yangcq88517 0:837e6c48e90d 71 {
yangcq88517 0:837e6c48e90d 72 return checkSum;
yangcq88517 0:837e6c48e90d 73 }
yangcq88517 0:837e6c48e90d 74
yangcq88517 0:837e6c48e90d 75 void APIFrame::setCheckSum(char value)
yangcq88517 0:837e6c48e90d 76 {
yangcq88517 0:837e6c48e90d 77 checkSum = value;
yangcq88517 0:837e6c48e90d 78 }
yangcq88517 0:837e6c48e90d 79
yangcq88517 0:837e6c48e90d 80 bool APIFrame::verifyChecksum()
yangcq88517 0:837e6c48e90d 81 {
yangcq88517 0:837e6c48e90d 82 if (isVerify)
yangcq88517 0:837e6c48e90d 83 return true;
yangcq88517 0:837e6c48e90d 84
yangcq88517 0:837e6c48e90d 85 char temp = 0x00;
yangcq88517 0:837e6c48e90d 86 for (int i = 0; i < index; i++)
yangcq88517 0:837e6c48e90d 87 temp += data[i];
yangcq88517 0:837e6c48e90d 88 if (temp + checkSum == 0xFF)
yangcq88517 0:837e6c48e90d 89 isVerify = true;
yangcq88517 0:837e6c48e90d 90 else
yangcq88517 0:837e6c48e90d 91 isVerify = false;
yangcq88517 0:837e6c48e90d 92
yangcq88517 0:837e6c48e90d 93 return isVerify;
yangcq88517 0:837e6c48e90d 94 }
yangcq88517 0:837e6c48e90d 95
yangcq88517 0:837e6c48e90d 96 void APIFrame::calculateChecksum()
yangcq88517 0:837e6c48e90d 97 {
yangcq88517 0:837e6c48e90d 98 if (isVerify)
yangcq88517 0:837e6c48e90d 99 return;
yangcq88517 0:837e6c48e90d 100
yangcq88517 0:837e6c48e90d 101 char CS = 0x00;
yangcq88517 0:837e6c48e90d 102 for (int i = 0; i < index; i++)
yangcq88517 0:837e6c48e90d 103 CS += data[i];
yangcq88517 0:837e6c48e90d 104 checkSum = 0xFF - CS;
yangcq88517 0:837e6c48e90d 105 isVerify = true;
yangcq88517 0:837e6c48e90d 106 }