a
Fork of xbee_api by
Diff: xbeeFrame.cpp
- Revision:
- 8:3ef2044c1302
- Parent:
- 7:8e5855f18ad3
- Child:
- 9:08ccd085662f
diff -r 8e5855f18ad3 -r 3ef2044c1302 xbeeFrame.cpp --- a/xbeeFrame.cpp Sat Jan 25 16:29:44 2014 +0000 +++ b/xbeeFrame.cpp Sat Jan 25 21:20:41 2014 +0000 @@ -51,7 +51,7 @@ for(i=0; i<8; i++) _apiFrame[cnt++] = _destAddr[i]; // put destination address _apiFrame[cnt++] = _options; // put other options - unsigned char* p = _payload; + char* p = _payload; while(*p) _apiFrame[cnt++] = *p++; // put payload _apiFrame[cnt++] = CalculateChecksum(); //put checksum @@ -71,7 +71,8 @@ int xbeeFrame::CalculateLength(void) { int cnt = 0; // holds payload size - while(*_payload++) + char* p = _payload; + while(*p++) cnt++; cnt+=11; // frame type, frame id, 8 destination address bytes and options _length[0] = (cnt >> 8) & 0xff; @@ -85,13 +86,18 @@ return len; } -void xbeeFrame::SetDestination(char* dest) +void xbeeFrame::SetDestination(unsigned char* dest) { char i; for(i=0; i<8; i++) _destAddr[i] = *dest++; } +void xbeeFrame::SetPayload(char* payload) +{ + _payload = payload; +} + void xbeeFrame::ParseFrame(void) { char cnt = 3; @@ -106,9 +112,10 @@ _rssi = _apiFrame[cnt++]; _options = _apiFrame[cnt++]; _payload = &(_apiFrame[cnt]); + char* p = _rfData; for(i=0; i<GetLength()-11; i++) - _rfData[i] = _apiFrame[cnt++]; - _rfData[i] = '\0'; + *p++ = _apiFrame[cnt++]; + *p = '\0'; _checksum = _apiFrame[cnt++]; break; } @@ -124,9 +131,9 @@ void xbeeFrame::PrintData(void) { - printf("Frame received"); - printf("Length: %u\n", GetLength()); - printf("Frame Type: %X\n", _frameType); + printf("\rFrame received\n\r"); + printf("Length: %u\n\r", GetLength()); + printf("Frame Type: %X\n\r", _frameType); switch(_frameType) { case RX_PACKET_64: @@ -135,28 +142,29 @@ char i; for(i=0; i<8; i++) printf("%X", _sourceAddr[i]); - printf("\n"); - printf("RSSI: %u\n", _rssi); - printf("Options: %X\n", _options); - printf("RF Data: %s\n", _rfData); + printf("\n\r"); + printf("RSSI: %u\n\r", _rssi); + printf("Options: %X\n\r", _options); + printf("RF Data: %s\n\r", _rfData); break; } case TX_STATUS: { - printf("Frame ID: %X\n", _frameID); - printf("Status: %X\n", _status); + printf("Frame ID: %X\n\r", _frameID); + printf("Status: %X\n\r", _status); break; } default : - printf("co jest kurwa?!\n"); + printf("co jest kurwa?!\n\r"); } - printf("Checksum: %X\n", _checksum); + printf("Checksum: %X\n\r", _checksum); } //todo add timeout -void xbeeFrame::ReceiveFrame(void) +void xbeeFrame::ReceiveFrame(char* buf) { - int cnt = 0;; //byte counter + _rfData = buf; + int cnt = 0; //byte counter char c; unsigned int len = 0; //frame length + Startbyte char receivingFrame = 0; @@ -188,4 +196,24 @@ } } } +} + +char* xbeeFrame::GetFramePointer() +{ + return &_apiFrame[0]; +} + +void xbeeFrame::PrintPayload() +{ + char* p = _payload; + while(*p != '\0') + printf("%c", *p++); +} + +void xbeeFrame::SendFrame(void) +{ + Serial DATA(_tx, _rx); + int i; + for (i=0; i<GetLength()+4; i++) + DATA.printf("%c", _apiFrame[i]); } \ No newline at end of file