Shih-Ho Hsieh / Mbed 2 deprecated pololu5mag_with_platform

Dependencies:   mbed

Fork of Motor_XYZ_UI_SPI_I2C_5mag by Shih-Ho Hsieh

Branch:
envelope
Revision:
8:33d34a775873
Parent:
7:ee0569d49c52
--- a/parse_array/envelope.cpp	Fri Dec 08 06:30:58 2017 +0000
+++ b/parse_array/envelope.cpp	Tue Dec 12 08:47:56 2017 +0000
@@ -1,4 +1,5 @@
 #include "envelope.h"
+//#include "mbed.h"
 
 Envelope::Envelope()
 {
@@ -14,7 +15,7 @@
     headerLength = 0;
 
     // Footer
-    hasFooter;
+    hasFooter = false;
     footerIndex = 0;
     footerValue = NULL;
     footerLength = 0;
@@ -27,10 +28,11 @@
     // check xor
     hasCheckXOR = false;
     checkXORIndex = 0;
-    Xor;
 
+    payload = NULL;
+    payloadLength = 0;
     checkSumStart=0;
-
+    envelopeArray = NULL;
 }
 
 Envelope::Envelope(const Envelope &en)
@@ -38,11 +40,10 @@
     *this = en;
 }
 
-Envelope Envelope::setEnvelopeData(const char *buf, int bufLength, int checkSumStart)
+Envelope& Envelope::setEnvelopeData(const char *buf, int bufLength, int checkSumStart)
 {
-    payload = new char [payloadLength];
-    for(int i = 0; i < payloadLength; i++)
-    {
+    if(payload == NULL) payload = new char [payloadLength];
+    for(int i = 0; i < payloadLength; i++) {
         if(i < bufLength) payload[i] = buf[i];
         else payload[i] = 0;
     }
@@ -50,9 +51,10 @@
     return *this;
 }
 
-Envelope Envelope::setEnvelopeDataAdjustFooterIndex(const char *buf, int bufLength, int checkSumStart)
+Envelope& Envelope::setEnvelopeDataAdjustFooterIndex(const char *buf, int bufLength, int checkSumStart)
 {
-    payload=new char [bufLength];
+    if(payload) delete payload;
+    payload = new char [bufLength];
     for(int i = 0; i < bufLength; i++) payload[i] = buf[i];
     this->checkSumStart=checkSumStart;
     return *this;
@@ -63,6 +65,7 @@
     hasHeader = true;
     headerIndex = headerindex;
     headerLength = headervalue.length();
+    if(headerValue) delete headerValue;
     headerValue = new char [headerLength];
     for(int i = 0; i < headerLength; i++) headerValue[i] = headervalue[i];
 }
@@ -72,9 +75,11 @@
     hasFooter = true;
     footerIndex = footerindex;
     footerLength = footervalue.length();
+    if(footerValue) delete footerValue;
     footerValue = new char [footerLength];
     for(int i = 0; i < footerLength; i++) footerValue[i] = footervalue[i];
     payloadLength = footerindex - headerLength;
+    envelopeArray = new char[length()];
 }
 
 void Envelope::enableCheckXOR(int xorIndex)
@@ -86,13 +91,12 @@
 char * Envelope::getEnvelopeArray()
 {
     int envelopeLength = length();
-    char * ret = new char [envelopeLength];
-    int index = 0;
-    if(hasHeader) index = appendData(ret, index, headerValue, headerLength);
-    index = appendData(ret, index, payload, payloadLength);
-    if(hasFooter) index = appendData(ret, index, footerValue, footerLength);
-    if(hasCheckXOR) ret[index] = generateXor(ret, envelopeLength-1);
-    return ret;
+    int i = 0;
+    if(hasHeader) i = appendData(envelopeArray, i, headerValue, headerLength);
+    i = appendData(envelopeArray, i, payload, payloadLength);
+    if(hasFooter) i = appendData(envelopeArray, i, footerValue, footerLength);
+    if(hasCheckXOR) envelopeArray[i] = generateXor(envelopeArray, envelopeLength-1);
+    return envelopeArray;
 }
 
 char Envelope::generateXor(char *input, int length)
@@ -116,9 +120,10 @@
 
 Envelope::~Envelope()
 {
-    if(!headerValue) delete headerValue;
-    if(!footerValue) delete footerValue;
-    if(!payload) delete payload;
+    if(headerValue) delete headerValue;
+    if(footerValue) delete footerValue;
+    if(payload) delete payload;
+    if(envelopeArray) delete envelopeArray;
 }
 
 bool Envelope::getHasHeader() const
@@ -136,24 +141,31 @@
     hasHeader = en.hasHeader;
     headerLength = en.headerLength;
     headerIndex = en.headerIndex;
+    if(headerValue) delete headerValue;
     headerValue = new char[headerLength];
     appendData(headerValue, 0, en.headerValue, headerLength);
+//    printf("header replication pass\n");
 
     hasFooter = en.hasFooter;
     footerLength = en.footerLength;
     footerIndex = en.footerIndex;
+    if(footerValue) delete footerValue;
     footerValue = new char[footerLength];
     appendData(footerValue, 0, en.footerValue, footerLength);
+//    printf("Footer replication pass\n");
 
     hasCheckXOR = en.hasCheckXOR;
     checkCRCIndex = en.checkXORIndex;
     Xor = en.Xor;
 
     payloadLength = en.payloadLength;
+    if(payload) delete payload;
     payload = new char[payloadLength];
     appendData(payload, 0, en.payload, payloadLength);
+//    printf("payload replication pass\n");
 
     checkSumStart = en.checkSumStart;
+    return *this;
 }
 
 int Envelope::getHeaderLength() const