Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: DAQ mbed-rtos mbed
Packet.cpp@2:7f7eb0cc78a4, 2014-04-30 (annotated)
- Committer:
- leysenkobe
- Date:
- Wed Apr 30 11:41:10 2014 +0000
- Revision:
- 2:7f7eb0cc78a4
- Parent:
- 1:fa51edf89e71
kbk;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
leysenkobe | 0:6ee88b4152dc | 1 | #include "Packet.h" |
leysenkobe | 0:6ee88b4152dc | 2 | #include "mbed.h" |
leysenkobe | 0:6ee88b4152dc | 3 | |
leysenkobe | 0:6ee88b4152dc | 4 | Serial pp(USBTX, USBRX); |
leysenkobe | 0:6ee88b4152dc | 5 | |
leysenkobe | 0:6ee88b4152dc | 6 | //Constructor & Destructor |
leysenkobe | 0:6ee88b4152dc | 7 | Packet::Packet(uint8_t ID[2],uint8_t* packet,int length) |
leysenkobe | 0:6ee88b4152dc | 8 | { |
leysenkobe | 0:6ee88b4152dc | 9 | //geheugen in de heap vrij maken |
leysenkobe | 0:6ee88b4152dc | 10 | this->ID = new uint8_t[2]; |
leysenkobe | 0:6ee88b4152dc | 11 | this->RESERVED = new uint8_t[2]; |
leysenkobe | 0:6ee88b4152dc | 12 | this->nBytesFilled = 0; |
leysenkobe | 0:6ee88b4152dc | 13 | |
leysenkobe | 0:6ee88b4152dc | 14 | if(length < 9 || packet[2]!= ID[0] || packet[3] != ID[1]) |
leysenkobe | 0:6ee88b4152dc | 15 | { |
leysenkobe | 0:6ee88b4152dc | 16 | this->TOT_SIZE = 7; |
leysenkobe | 0:6ee88b4152dc | 17 | this->ID[0] = ID[0]; |
leysenkobe | 0:6ee88b4152dc | 18 | this->ID[1] = ID[1]; |
leysenkobe | 0:6ee88b4152dc | 19 | this->CMD = PACKET_ERROR; |
leysenkobe | 0:6ee88b4152dc | 20 | this->CMD_SIZE = 0; |
leysenkobe | 0:6ee88b4152dc | 21 | this->CMD_DATA = NULL; |
leysenkobe | 0:6ee88b4152dc | 22 | this->RESERVED[0] = 0; |
leysenkobe | 0:6ee88b4152dc | 23 | this->RESERVED[1] = 0; |
leysenkobe | 0:6ee88b4152dc | 24 | } |
leysenkobe | 0:6ee88b4152dc | 25 | else |
leysenkobe | 0:6ee88b4152dc | 26 | { |
leysenkobe | 0:6ee88b4152dc | 27 | this->TOT_SIZE = (packet[0] << 8) + packet[1]; |
leysenkobe | 0:6ee88b4152dc | 28 | this->ID[0] = packet[2]; |
leysenkobe | 0:6ee88b4152dc | 29 | this->ID[1] = packet[3]; |
leysenkobe | 0:6ee88b4152dc | 30 | this->CMD = packet[4]; |
leysenkobe | 0:6ee88b4152dc | 31 | this->CMD_SIZE = (packet[5] << 8) + packet[6]; |
leysenkobe | 0:6ee88b4152dc | 32 | this->CMD_DATA = new uint8_t[this->CMD_SIZE]; |
leysenkobe | 0:6ee88b4152dc | 33 | for (int i = 7; i < 7+this->CMD_SIZE; i++) |
leysenkobe | 0:6ee88b4152dc | 34 | { |
leysenkobe | 0:6ee88b4152dc | 35 | this->CMD_DATA[i-7] = packet[i]; |
leysenkobe | 0:6ee88b4152dc | 36 | } |
leysenkobe | 0:6ee88b4152dc | 37 | this->RESERVED[0] = packet[7+this->CMD_SIZE]; |
leysenkobe | 0:6ee88b4152dc | 38 | this->RESERVED[1] = packet[7+this->CMD_SIZE+1]; |
leysenkobe | 0:6ee88b4152dc | 39 | } |
leysenkobe | 0:6ee88b4152dc | 40 | } |
leysenkobe | 0:6ee88b4152dc | 41 | Packet::Packet(uint8_t ID[2]) |
leysenkobe | 0:6ee88b4152dc | 42 | { |
leysenkobe | 0:6ee88b4152dc | 43 | //geheugen in de heap vrij maken |
leysenkobe | 0:6ee88b4152dc | 44 | this->ID = new uint8_t[2]; |
leysenkobe | 0:6ee88b4152dc | 45 | this->RESERVED = new uint8_t[2]; |
leysenkobe | 0:6ee88b4152dc | 46 | this->nBytesFilled = 0; |
leysenkobe | 0:6ee88b4152dc | 47 | |
leysenkobe | 0:6ee88b4152dc | 48 | this->TOT_SIZE = 7; |
leysenkobe | 0:6ee88b4152dc | 49 | this->ID[0] = ID[0]; |
leysenkobe | 0:6ee88b4152dc | 50 | this->ID[1] = ID[1]; |
leysenkobe | 0:6ee88b4152dc | 51 | this->CMD = PACKET_ERROR; |
leysenkobe | 0:6ee88b4152dc | 52 | this->CMD_SIZE = 0; |
leysenkobe | 0:6ee88b4152dc | 53 | this->CMD_DATA = NULL; |
leysenkobe | 0:6ee88b4152dc | 54 | this->RESERVED[0] = 0; |
leysenkobe | 1:fa51edf89e71 | 55 | this->RESERVED[1] = 1; |
leysenkobe | 0:6ee88b4152dc | 56 | } |
leysenkobe | 0:6ee88b4152dc | 57 | Packet::Packet(uint8_t ID[2],uint8_t CMD,uint8_t RESERVED[2]) |
leysenkobe | 0:6ee88b4152dc | 58 | { |
leysenkobe | 0:6ee88b4152dc | 59 | //geheugen in de heap vrij maken |
leysenkobe | 0:6ee88b4152dc | 60 | this->ID = new uint8_t[2]; |
leysenkobe | 0:6ee88b4152dc | 61 | this->RESERVED = new uint8_t[2]; |
leysenkobe | 0:6ee88b4152dc | 62 | this->nBytesFilled = 0; |
leysenkobe | 0:6ee88b4152dc | 63 | |
leysenkobe | 0:6ee88b4152dc | 64 | this->TOT_SIZE = 7; |
leysenkobe | 0:6ee88b4152dc | 65 | this->ID[0] = ID[0]; |
leysenkobe | 0:6ee88b4152dc | 66 | this->ID[1] = ID[1]; |
leysenkobe | 0:6ee88b4152dc | 67 | this->CMD = CMD; |
leysenkobe | 0:6ee88b4152dc | 68 | this->CMD_SIZE = 0; |
leysenkobe | 0:6ee88b4152dc | 69 | this->CMD_DATA = NULL; |
leysenkobe | 0:6ee88b4152dc | 70 | this->RESERVED[0] = RESERVED[0]; |
leysenkobe | 0:6ee88b4152dc | 71 | this->RESERVED[1] = RESERVED[1]; |
leysenkobe | 0:6ee88b4152dc | 72 | } |
leysenkobe | 0:6ee88b4152dc | 73 | Packet::Packet(uint8_t ID[2],uint8_t CMD,uint8_t* data,int datasize,uint8_t RESERVED[2]) |
leysenkobe | 0:6ee88b4152dc | 74 | { |
leysenkobe | 0:6ee88b4152dc | 75 | //geheugen in de heap vrij maken |
leysenkobe | 0:6ee88b4152dc | 76 | this->ID = new uint8_t[2]; |
leysenkobe | 0:6ee88b4152dc | 77 | this->RESERVED = new uint8_t[2]; |
leysenkobe | 0:6ee88b4152dc | 78 | this->nBytesFilled = 0; |
leysenkobe | 0:6ee88b4152dc | 79 | |
leysenkobe | 0:6ee88b4152dc | 80 | this->TOT_SIZE = datasize + 7; |
leysenkobe | 0:6ee88b4152dc | 81 | this->ID[0] = ID[0]; |
leysenkobe | 0:6ee88b4152dc | 82 | this->ID[1] = ID[1]; |
leysenkobe | 0:6ee88b4152dc | 83 | this->CMD = CMD; |
leysenkobe | 0:6ee88b4152dc | 84 | |
leysenkobe | 0:6ee88b4152dc | 85 | this->CMD_SIZE = datasize; |
leysenkobe | 0:6ee88b4152dc | 86 | this->CMD_DATA = data; |
leysenkobe | 0:6ee88b4152dc | 87 | this->RESERVED[0] = RESERVED[0]; |
leysenkobe | 0:6ee88b4152dc | 88 | this->RESERVED[1] = RESERVED[1]; |
leysenkobe | 0:6ee88b4152dc | 89 | } |
leysenkobe | 0:6ee88b4152dc | 90 | //this is a special constructor that makes a data packet, |
leysenkobe | 0:6ee88b4152dc | 91 | //wich can be filled later with measurement data |
leysenkobe | 0:6ee88b4152dc | 92 | Packet::Packet(uint8_t ID[2],unsigned int firstSampleNumber,uint8_t nSamples,uint8_t sampleRate ,int activeChannels,int nActiveChannels,uint8_t RESERVED[2]) |
leysenkobe | 0:6ee88b4152dc | 93 | { |
leysenkobe | 0:6ee88b4152dc | 94 | //geheugen in de heap vrij maken |
leysenkobe | 0:6ee88b4152dc | 95 | this->ID = new uint8_t[2]; |
leysenkobe | 0:6ee88b4152dc | 96 | this->RESERVED = new uint8_t[2]; |
leysenkobe | 0:6ee88b4152dc | 97 | this->nBytesFilled = 8; |
leysenkobe | 0:6ee88b4152dc | 98 | |
leysenkobe | 0:6ee88b4152dc | 99 | this->TOT_SIZE = 15 + nSamples * nActiveChannels * 2; |
leysenkobe | 0:6ee88b4152dc | 100 | this->ID[0] = ID[0]; |
leysenkobe | 0:6ee88b4152dc | 101 | this->ID[1] = ID[1]; |
leysenkobe | 0:6ee88b4152dc | 102 | this->CMD = PACKET_DATA; |
leysenkobe | 0:6ee88b4152dc | 103 | |
leysenkobe | 0:6ee88b4152dc | 104 | this->CMD_SIZE = 8 + nSamples*nActiveChannels * 2; |
leysenkobe | 0:6ee88b4152dc | 105 | this->CMD_DATA = new uint8_t[this->CMD_SIZE]; |
leysenkobe | 0:6ee88b4152dc | 106 | this->CMD_DATA[0] = (firstSampleNumber >> 24) & 0xff; |
leysenkobe | 0:6ee88b4152dc | 107 | this->CMD_DATA[1] = (firstSampleNumber >> 16) & 0xff; |
leysenkobe | 0:6ee88b4152dc | 108 | this->CMD_DATA[2] = (firstSampleNumber >> 8) & 0xff; |
leysenkobe | 0:6ee88b4152dc | 109 | this->CMD_DATA[3] = (firstSampleNumber) & 0xff; |
leysenkobe | 0:6ee88b4152dc | 110 | this->CMD_DATA[4] = nSamples; |
leysenkobe | 0:6ee88b4152dc | 111 | this->CMD_DATA[5] = sampleRate; |
leysenkobe | 0:6ee88b4152dc | 112 | this->CMD_DATA[6] = (activeChannels >> 8) & 0xff; |
leysenkobe | 0:6ee88b4152dc | 113 | this->CMD_DATA[7] = (activeChannels) & 0xff; |
leysenkobe | 0:6ee88b4152dc | 114 | for (int i = 8; i < this->CMD_SIZE; i++) |
leysenkobe | 0:6ee88b4152dc | 115 | { |
leysenkobe | 0:6ee88b4152dc | 116 | this->CMD_DATA[i] = 0; |
leysenkobe | 0:6ee88b4152dc | 117 | } |
leysenkobe | 0:6ee88b4152dc | 118 | this->RESERVED[0] = RESERVED[0]; |
leysenkobe | 0:6ee88b4152dc | 119 | this->RESERVED[1] = RESERVED[1]; |
leysenkobe | 0:6ee88b4152dc | 120 | } |
leysenkobe | 0:6ee88b4152dc | 121 | Packet::~Packet(void) |
leysenkobe | 0:6ee88b4152dc | 122 | { |
leysenkobe | 0:6ee88b4152dc | 123 | delete [] ID; |
leysenkobe | 0:6ee88b4152dc | 124 | delete [] CMD_DATA; |
leysenkobe | 0:6ee88b4152dc | 125 | delete [] RESERVED; |
leysenkobe | 0:6ee88b4152dc | 126 | } |
leysenkobe | 0:6ee88b4152dc | 127 | |
leysenkobe | 0:6ee88b4152dc | 128 | //GETTERS |
leysenkobe | 0:6ee88b4152dc | 129 | int Packet::getTOT_SIZE(void) |
leysenkobe | 0:6ee88b4152dc | 130 | { |
leysenkobe | 0:6ee88b4152dc | 131 | return(this->TOT_SIZE); |
leysenkobe | 0:6ee88b4152dc | 132 | } |
leysenkobe | 0:6ee88b4152dc | 133 | uint8_t* Packet::getID(void) |
leysenkobe | 0:6ee88b4152dc | 134 | { |
leysenkobe | 0:6ee88b4152dc | 135 | return(this->ID); |
leysenkobe | 0:6ee88b4152dc | 136 | } |
leysenkobe | 0:6ee88b4152dc | 137 | uint8_t Packet::getCMD(void) |
leysenkobe | 0:6ee88b4152dc | 138 | { |
leysenkobe | 0:6ee88b4152dc | 139 | return(this->CMD); |
leysenkobe | 0:6ee88b4152dc | 140 | } |
leysenkobe | 0:6ee88b4152dc | 141 | int Packet::getCMD_SIZE(void) |
leysenkobe | 0:6ee88b4152dc | 142 | { |
leysenkobe | 0:6ee88b4152dc | 143 | return(this->CMD_SIZE); |
leysenkobe | 0:6ee88b4152dc | 144 | } |
leysenkobe | 0:6ee88b4152dc | 145 | uint8_t* Packet::getCMD_DATA(void) |
leysenkobe | 0:6ee88b4152dc | 146 | { |
leysenkobe | 0:6ee88b4152dc | 147 | return(this->CMD_DATA); |
leysenkobe | 0:6ee88b4152dc | 148 | } |
leysenkobe | 0:6ee88b4152dc | 149 | uint8_t* Packet::getRESERVED(void) |
leysenkobe | 0:6ee88b4152dc | 150 | { |
leysenkobe | 0:6ee88b4152dc | 151 | return(this->RESERVED); |
leysenkobe | 0:6ee88b4152dc | 152 | } |
leysenkobe | 0:6ee88b4152dc | 153 | int Packet::getBytesFilled(void) |
leysenkobe | 0:6ee88b4152dc | 154 | { |
leysenkobe | 0:6ee88b4152dc | 155 | return(this->nBytesFilled); |
leysenkobe | 0:6ee88b4152dc | 156 | } |
leysenkobe | 0:6ee88b4152dc | 157 | |
leysenkobe | 0:6ee88b4152dc | 158 | //SETTERS |
leysenkobe | 0:6ee88b4152dc | 159 | void Packet::setID(uint8_t ID[2]) |
leysenkobe | 0:6ee88b4152dc | 160 | { |
leysenkobe | 0:6ee88b4152dc | 161 | this->ID[0] = ID[0]; |
leysenkobe | 0:6ee88b4152dc | 162 | this->ID[1] = ID[1]; |
leysenkobe | 0:6ee88b4152dc | 163 | } |
leysenkobe | 0:6ee88b4152dc | 164 | void Packet::setCMD(uint8_t CMD) |
leysenkobe | 0:6ee88b4152dc | 165 | { |
leysenkobe | 0:6ee88b4152dc | 166 | this->CMD = CMD; |
leysenkobe | 0:6ee88b4152dc | 167 | } |
leysenkobe | 0:6ee88b4152dc | 168 | void Packet::setDATA(uint8_t* packetdata,int length) |
leysenkobe | 0:6ee88b4152dc | 169 | { |
leysenkobe | 0:6ee88b4152dc | 170 | delete [] CMD_DATA; |
leysenkobe | 0:6ee88b4152dc | 171 | this->CMD_DATA = new uint8_t[length]; |
leysenkobe | 0:6ee88b4152dc | 172 | for (int i = 0; i < length; i++) |
leysenkobe | 0:6ee88b4152dc | 173 | { |
leysenkobe | 0:6ee88b4152dc | 174 | this->CMD_DATA[i] = packetdata[i]; |
leysenkobe | 0:6ee88b4152dc | 175 | } |
leysenkobe | 0:6ee88b4152dc | 176 | |
leysenkobe | 0:6ee88b4152dc | 177 | this->CMD_SIZE = length; |
leysenkobe | 0:6ee88b4152dc | 178 | this->TOT_SIZE = length+7; |
leysenkobe | 0:6ee88b4152dc | 179 | } |
leysenkobe | 0:6ee88b4152dc | 180 | void Packet::setRESERVED(uint8_t RESERVED[2]) |
leysenkobe | 0:6ee88b4152dc | 181 | { |
leysenkobe | 0:6ee88b4152dc | 182 | this->RESERVED[0] = RESERVED[0]; |
leysenkobe | 0:6ee88b4152dc | 183 | this->RESERVED[1] = RESERVED[1]; |
leysenkobe | 0:6ee88b4152dc | 184 | } |
leysenkobe | 0:6ee88b4152dc | 185 | bool Packet::addMeasurement(Measurement *m) |
leysenkobe | 0:6ee88b4152dc | 186 | { |
leysenkobe | 0:6ee88b4152dc | 187 | if(nBytesFilled!=0) |
leysenkobe | 0:6ee88b4152dc | 188 | { |
leysenkobe | 0:6ee88b4152dc | 189 | if(nBytesFilled<this->CMD_SIZE) |
leysenkobe | 0:6ee88b4152dc | 190 | { |
leysenkobe | 0:6ee88b4152dc | 191 | //de eerste 8 kanalen bekijken.. |
leysenkobe | 0:6ee88b4152dc | 192 | for(int i=7;i>=0;i--) |
leysenkobe | 0:6ee88b4152dc | 193 | { |
leysenkobe | 0:6ee88b4152dc | 194 | if(((this->CMD_DATA[6] >> i) & 0x01) == 1) |
leysenkobe | 0:6ee88b4152dc | 195 | { |
leysenkobe | 0:6ee88b4152dc | 196 | this->CMD_DATA[nBytesFilled] = (m->getPunt(7-i)>>8) & 255; |
leysenkobe | 0:6ee88b4152dc | 197 | this->nBytesFilled++; |
leysenkobe | 0:6ee88b4152dc | 198 | this->CMD_DATA[nBytesFilled] = m->getPunt(7-i) & 255; |
leysenkobe | 0:6ee88b4152dc | 199 | this->nBytesFilled++; |
leysenkobe | 0:6ee88b4152dc | 200 | } |
leysenkobe | 0:6ee88b4152dc | 201 | } |
leysenkobe | 0:6ee88b4152dc | 202 | for(int i=7;i>=0;i--) |
leysenkobe | 0:6ee88b4152dc | 203 | { |
leysenkobe | 0:6ee88b4152dc | 204 | if(((this->CMD_DATA[7] >> i) & 0x01) == 1) |
leysenkobe | 0:6ee88b4152dc | 205 | { |
leysenkobe | 0:6ee88b4152dc | 206 | this->CMD_DATA[nBytesFilled] = (m->getPunt(15-i)>>8) & 255; |
leysenkobe | 0:6ee88b4152dc | 207 | this->nBytesFilled++; |
leysenkobe | 0:6ee88b4152dc | 208 | this->CMD_DATA[nBytesFilled] = m->getPunt(15-i) & 255; |
leysenkobe | 0:6ee88b4152dc | 209 | this->nBytesFilled++; |
leysenkobe | 0:6ee88b4152dc | 210 | } |
leysenkobe | 0:6ee88b4152dc | 211 | } |
leysenkobe | 1:fa51edf89e71 | 212 | //Wordt nu gedelete in meting thread! |
leysenkobe | 1:fa51edf89e71 | 213 | //delete m; |
leysenkobe | 0:6ee88b4152dc | 214 | return(true); |
leysenkobe | 0:6ee88b4152dc | 215 | } |
leysenkobe | 0:6ee88b4152dc | 216 | } |
leysenkobe | 1:fa51edf89e71 | 217 | //Wordt nu gedelete in meting thread! |
leysenkobe | 1:fa51edf89e71 | 218 | //delete m; |
leysenkobe | 0:6ee88b4152dc | 219 | return(false); |
leysenkobe | 0:6ee88b4152dc | 220 | } |