a

Dependents:   IOT_Sockets

Fork of xbee_api by Wiktor Grajkowski

Revision:
8:3ef2044c1302
Parent:
7:8e5855f18ad3
Child:
9:08ccd085662f
--- 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