Shih-Ho Hsieh / Mbed 2 deprecated pololu5mag_with_platform

Dependencies:   mbed

Fork of Motor_XYZ_UI_SPI_I2C_5mag by Shih-Ho Hsieh

Committer:
hober
Date:
Fri Dec 08 06:30:58 2017 +0000
Revision:
7:ee0569d49c52
Child:
8:33d34a775873
20171208 stable version before envelope tracker

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hober 7:ee0569d49c52 1 #include "envelope.h"
hober 7:ee0569d49c52 2
hober 7:ee0569d49c52 3 Envelope::Envelope()
hober 7:ee0569d49c52 4 {
hober 7:ee0569d49c52 5 hasCheckXOR = false;
hober 7:ee0569d49c52 6 hasCRC = false;
hober 7:ee0569d49c52 7 hasFooter = false;
hober 7:ee0569d49c52 8 hasHeader = false;
hober 7:ee0569d49c52 9 payload = NULL;
hober 7:ee0569d49c52 10 //header
hober 7:ee0569d49c52 11 hasHeader = false;
hober 7:ee0569d49c52 12 headerIndex = 0;
hober 7:ee0569d49c52 13 headerValue = NULL;
hober 7:ee0569d49c52 14 headerLength = 0;
hober 7:ee0569d49c52 15
hober 7:ee0569d49c52 16 // Footer
hober 7:ee0569d49c52 17 hasFooter;
hober 7:ee0569d49c52 18 footerIndex = 0;
hober 7:ee0569d49c52 19 footerValue = NULL;
hober 7:ee0569d49c52 20 footerLength = 0;
hober 7:ee0569d49c52 21
hober 7:ee0569d49c52 22 // check
hober 7:ee0569d49c52 23 // CRC
hober 7:ee0569d49c52 24 hasCRC = false;
hober 7:ee0569d49c52 25 checkCRCIndex = 0;
hober 7:ee0569d49c52 26 checkCRCLength = 0;
hober 7:ee0569d49c52 27 // check xor
hober 7:ee0569d49c52 28 hasCheckXOR = false;
hober 7:ee0569d49c52 29 checkXORIndex = 0;
hober 7:ee0569d49c52 30 Xor;
hober 7:ee0569d49c52 31
hober 7:ee0569d49c52 32 checkSumStart=0;
hober 7:ee0569d49c52 33
hober 7:ee0569d49c52 34 }
hober 7:ee0569d49c52 35
hober 7:ee0569d49c52 36 Envelope::Envelope(const Envelope &en)
hober 7:ee0569d49c52 37 {
hober 7:ee0569d49c52 38 *this = en;
hober 7:ee0569d49c52 39 }
hober 7:ee0569d49c52 40
hober 7:ee0569d49c52 41 Envelope Envelope::setEnvelopeData(const char *buf, int bufLength, int checkSumStart)
hober 7:ee0569d49c52 42 {
hober 7:ee0569d49c52 43 payload = new char [payloadLength];
hober 7:ee0569d49c52 44 for(int i = 0; i < payloadLength; i++)
hober 7:ee0569d49c52 45 {
hober 7:ee0569d49c52 46 if(i < bufLength) payload[i] = buf[i];
hober 7:ee0569d49c52 47 else payload[i] = 0;
hober 7:ee0569d49c52 48 }
hober 7:ee0569d49c52 49 this->checkSumStart=checkSumStart;
hober 7:ee0569d49c52 50 return *this;
hober 7:ee0569d49c52 51 }
hober 7:ee0569d49c52 52
hober 7:ee0569d49c52 53 Envelope Envelope::setEnvelopeDataAdjustFooterIndex(const char *buf, int bufLength, int checkSumStart)
hober 7:ee0569d49c52 54 {
hober 7:ee0569d49c52 55 payload=new char [bufLength];
hober 7:ee0569d49c52 56 for(int i = 0; i < bufLength; i++) payload[i] = buf[i];
hober 7:ee0569d49c52 57 this->checkSumStart=checkSumStart;
hober 7:ee0569d49c52 58 return *this;
hober 7:ee0569d49c52 59 }
hober 7:ee0569d49c52 60
hober 7:ee0569d49c52 61 void Envelope::enableHeader(std::string headervalue, int headerindex)
hober 7:ee0569d49c52 62 {
hober 7:ee0569d49c52 63 hasHeader = true;
hober 7:ee0569d49c52 64 headerIndex = headerindex;
hober 7:ee0569d49c52 65 headerLength = headervalue.length();
hober 7:ee0569d49c52 66 headerValue = new char [headerLength];
hober 7:ee0569d49c52 67 for(int i = 0; i < headerLength; i++) headerValue[i] = headervalue[i];
hober 7:ee0569d49c52 68 }
hober 7:ee0569d49c52 69
hober 7:ee0569d49c52 70 void Envelope::enableFooter(std::string footervalue, int footerindex)
hober 7:ee0569d49c52 71 {
hober 7:ee0569d49c52 72 hasFooter = true;
hober 7:ee0569d49c52 73 footerIndex = footerindex;
hober 7:ee0569d49c52 74 footerLength = footervalue.length();
hober 7:ee0569d49c52 75 footerValue = new char [footerLength];
hober 7:ee0569d49c52 76 for(int i = 0; i < footerLength; i++) footerValue[i] = footervalue[i];
hober 7:ee0569d49c52 77 payloadLength = footerindex - headerLength;
hober 7:ee0569d49c52 78 }
hober 7:ee0569d49c52 79
hober 7:ee0569d49c52 80 void Envelope::enableCheckXOR(int xorIndex)
hober 7:ee0569d49c52 81 {
hober 7:ee0569d49c52 82 hasCheckXOR = true;
hober 7:ee0569d49c52 83 checkXORIndex = xorIndex;
hober 7:ee0569d49c52 84 }
hober 7:ee0569d49c52 85
hober 7:ee0569d49c52 86 char * Envelope::getEnvelopeArray()
hober 7:ee0569d49c52 87 {
hober 7:ee0569d49c52 88 int envelopeLength = length();
hober 7:ee0569d49c52 89 char * ret = new char [envelopeLength];
hober 7:ee0569d49c52 90 int index = 0;
hober 7:ee0569d49c52 91 if(hasHeader) index = appendData(ret, index, headerValue, headerLength);
hober 7:ee0569d49c52 92 index = appendData(ret, index, payload, payloadLength);
hober 7:ee0569d49c52 93 if(hasFooter) index = appendData(ret, index, footerValue, footerLength);
hober 7:ee0569d49c52 94 if(hasCheckXOR) ret[index] = generateXor(ret, envelopeLength-1);
hober 7:ee0569d49c52 95 return ret;
hober 7:ee0569d49c52 96 }
hober 7:ee0569d49c52 97
hober 7:ee0569d49c52 98 char Envelope::generateXor(char *input, int length)
hober 7:ee0569d49c52 99 {
hober 7:ee0569d49c52 100 Xor = 0;
hober 7:ee0569d49c52 101 for(int i = checkSumStart; i < length; i++) Xor ^= input[i];
hober 7:ee0569d49c52 102 return Xor;
hober 7:ee0569d49c52 103 }
hober 7:ee0569d49c52 104
hober 7:ee0569d49c52 105 int Envelope::appendData(char *toAppend, int startIndex, char *data, int dataLength)
hober 7:ee0569d49c52 106 {
hober 7:ee0569d49c52 107 if(toAppend == NULL || data == NULL) return -1; // error
hober 7:ee0569d49c52 108 for(int i = 0; i < dataLength; i++) toAppend[ i + startIndex ] = data[i];
hober 7:ee0569d49c52 109 return startIndex + dataLength;
hober 7:ee0569d49c52 110 }
hober 7:ee0569d49c52 111
hober 7:ee0569d49c52 112 bool Envelope::getHasFooter() const
hober 7:ee0569d49c52 113 {
hober 7:ee0569d49c52 114 return hasFooter;
hober 7:ee0569d49c52 115 }
hober 7:ee0569d49c52 116
hober 7:ee0569d49c52 117 Envelope::~Envelope()
hober 7:ee0569d49c52 118 {
hober 7:ee0569d49c52 119 if(!headerValue) delete headerValue;
hober 7:ee0569d49c52 120 if(!footerValue) delete footerValue;
hober 7:ee0569d49c52 121 if(!payload) delete payload;
hober 7:ee0569d49c52 122 }
hober 7:ee0569d49c52 123
hober 7:ee0569d49c52 124 bool Envelope::getHasHeader() const
hober 7:ee0569d49c52 125 {
hober 7:ee0569d49c52 126 return hasHeader;
hober 7:ee0569d49c52 127 }
hober 7:ee0569d49c52 128
hober 7:ee0569d49c52 129 int Envelope::getFooterLength() const
hober 7:ee0569d49c52 130 {
hober 7:ee0569d49c52 131 return footerLength;
hober 7:ee0569d49c52 132 }
hober 7:ee0569d49c52 133
hober 7:ee0569d49c52 134 Envelope &Envelope::operator=(const Envelope & en)
hober 7:ee0569d49c52 135 {
hober 7:ee0569d49c52 136 hasHeader = en.hasHeader;
hober 7:ee0569d49c52 137 headerLength = en.headerLength;
hober 7:ee0569d49c52 138 headerIndex = en.headerIndex;
hober 7:ee0569d49c52 139 headerValue = new char[headerLength];
hober 7:ee0569d49c52 140 appendData(headerValue, 0, en.headerValue, headerLength);
hober 7:ee0569d49c52 141
hober 7:ee0569d49c52 142 hasFooter = en.hasFooter;
hober 7:ee0569d49c52 143 footerLength = en.footerLength;
hober 7:ee0569d49c52 144 footerIndex = en.footerIndex;
hober 7:ee0569d49c52 145 footerValue = new char[footerLength];
hober 7:ee0569d49c52 146 appendData(footerValue, 0, en.footerValue, footerLength);
hober 7:ee0569d49c52 147
hober 7:ee0569d49c52 148 hasCheckXOR = en.hasCheckXOR;
hober 7:ee0569d49c52 149 checkCRCIndex = en.checkXORIndex;
hober 7:ee0569d49c52 150 Xor = en.Xor;
hober 7:ee0569d49c52 151
hober 7:ee0569d49c52 152 payloadLength = en.payloadLength;
hober 7:ee0569d49c52 153 payload = new char[payloadLength];
hober 7:ee0569d49c52 154 appendData(payload, 0, en.payload, payloadLength);
hober 7:ee0569d49c52 155
hober 7:ee0569d49c52 156 checkSumStart = en.checkSumStart;
hober 7:ee0569d49c52 157 }
hober 7:ee0569d49c52 158
hober 7:ee0569d49c52 159 int Envelope::getHeaderLength() const
hober 7:ee0569d49c52 160 {
hober 7:ee0569d49c52 161 return headerLength;
hober 7:ee0569d49c52 162 }
hober 7:ee0569d49c52 163
hober 7:ee0569d49c52 164 int Envelope::getPayloadLength() const
hober 7:ee0569d49c52 165 {
hober 7:ee0569d49c52 166 return payloadLength;
hober 7:ee0569d49c52 167 }
hober 7:ee0569d49c52 168
hober 7:ee0569d49c52 169 char * Envelope::getPayload() const
hober 7:ee0569d49c52 170 {
hober 7:ee0569d49c52 171 return payload;
hober 7:ee0569d49c52 172 }
hober 7:ee0569d49c52 173
hober 7:ee0569d49c52 174 int Envelope::length() const
hober 7:ee0569d49c52 175 {
hober 7:ee0569d49c52 176 int envelopeLength = payloadLength;
hober 7:ee0569d49c52 177 if(hasHeader) envelopeLength += headerLength;
hober 7:ee0569d49c52 178 if(hasFooter) envelopeLength += footerLength;
hober 7:ee0569d49c52 179 if(hasCheckXOR) envelopeLength++;
hober 7:ee0569d49c52 180 return envelopeLength;
hober 7:ee0569d49c52 181 }
hober 7:ee0569d49c52 182
hober 7:ee0569d49c52 183 bool Envelope::checkXOR() const
hober 7:ee0569d49c52 184 {
hober 7:ee0569d49c52 185 return hasCheckXOR;
hober 7:ee0569d49c52 186 }
hober 7:ee0569d49c52 187
hober 7:ee0569d49c52 188 int Envelope::getFooterIndex() const
hober 7:ee0569d49c52 189 {
hober 7:ee0569d49c52 190 return footerIndex;
hober 7:ee0569d49c52 191 }
hober 7:ee0569d49c52 192
hober 7:ee0569d49c52 193 int Envelope::getHeaderIndex() const
hober 7:ee0569d49c52 194 {
hober 7:ee0569d49c52 195 return headerIndex;
hober 7:ee0569d49c52 196 }
hober 7:ee0569d49c52 197
hober 7:ee0569d49c52 198 char * Envelope::getFooter() const
hober 7:ee0569d49c52 199 {
hober 7:ee0569d49c52 200 return footerValue;
hober 7:ee0569d49c52 201 }
hober 7:ee0569d49c52 202
hober 7:ee0569d49c52 203 char * Envelope::getHeader() const
hober 7:ee0569d49c52 204 {
hober 7:ee0569d49c52 205 return headerValue;
hober 7:ee0569d49c52 206 }
hober 7:ee0569d49c52 207