(uncpomplete) port of the cnmat osc library for Arduino/Teensy. Upstream url: https://github.com/CNMAT/OSC

(uncpomplete) port of the cnmat osc library for Arduino/Teensy. Upstream url: https://github.com/CNMAT/OSC

Compiles, but not Tested in any kind. OSCMessage::send(); and OSCBundle::send() don't work/are commented out due to Platform specifics I first have to figure out.

Readme

Committer:
aspeteRakete
Date:
Sat May 17 12:42:29 2014 +0000
Revision:
3:f58c63b78853
init. Compiles, not tested. OSCMessage::send(Print &p) and OSC::Bundle::send(Print &p) commented out

Who changed what in which revision?

UserRevisionLine numberNew contents of line
aspeteRakete 3:f58c63b78853 1 /*
aspeteRakete 3:f58c63b78853 2 Written by Yotam Mann, The Center for New Music and Audio Technologies,
aspeteRakete 3:f58c63b78853 3 University of California, Berkeley. Copyright (c) 2012, The Regents of
aspeteRakete 3:f58c63b78853 4 the University of California (Regents).
aspeteRakete 3:f58c63b78853 5
aspeteRakete 3:f58c63b78853 6 Permission to use, copy, modify, distribute, and distribute modified versions
aspeteRakete 3:f58c63b78853 7 of this software and its documentation without fee and without a signed
aspeteRakete 3:f58c63b78853 8 licensing agreement, is hereby granted, provided that the above copyright
aspeteRakete 3:f58c63b78853 9 notice, this paragraph and the following two paragraphs appear in all copies,
aspeteRakete 3:f58c63b78853 10 modifications, and distributions.
aspeteRakete 3:f58c63b78853 11
aspeteRakete 3:f58c63b78853 12 IN NO EVENT SHALL REGENTS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
aspeteRakete 3:f58c63b78853 13 SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING
aspeteRakete 3:f58c63b78853 14 OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF REGENTS HAS
aspeteRakete 3:f58c63b78853 15 BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
aspeteRakete 3:f58c63b78853 16
aspeteRakete 3:f58c63b78853 17 REGENTS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
aspeteRakete 3:f58c63b78853 18 THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
aspeteRakete 3:f58c63b78853 19 PURPOSE. THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED
aspeteRakete 3:f58c63b78853 20 HEREUNDER IS PROVIDED "AS IS". REGENTS HAS NO OBLIGATION TO PROVIDE
aspeteRakete 3:f58c63b78853 21 MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
aspeteRakete 3:f58c63b78853 22
aspeteRakete 3:f58c63b78853 23 For bug reports and feature requests please email me at yotam@cnmat.berkeley.edu
aspeteRakete 3:f58c63b78853 24 */
aspeteRakete 3:f58c63b78853 25
aspeteRakete 3:f58c63b78853 26 #include "OSCBundle.h"
aspeteRakete 3:f58c63b78853 27 #include <stdlib.h>
aspeteRakete 3:f58c63b78853 28
aspeteRakete 3:f58c63b78853 29 /*=============================================================================
aspeteRakete 3:f58c63b78853 30 CONSTRUCTORS / DESTRUCTOR
aspeteRakete 3:f58c63b78853 31 =============================================================================*/
aspeteRakete 3:f58c63b78853 32
aspeteRakete 3:f58c63b78853 33 OSCBundle::OSCBundle(uint64_t _timetag){
aspeteRakete 3:f58c63b78853 34 setTimetag(_timetag);
aspeteRakete 3:f58c63b78853 35 numMessages = 0;
aspeteRakete 3:f58c63b78853 36 error = OSC_OK;
aspeteRakete 3:f58c63b78853 37 messages = NULL;
aspeteRakete 3:f58c63b78853 38 incomingBuffer = NULL;
aspeteRakete 3:f58c63b78853 39 incomingBufferSize = 0;
aspeteRakete 3:f58c63b78853 40 decodeState = STANDBY;
aspeteRakete 3:f58c63b78853 41 }
aspeteRakete 3:f58c63b78853 42
aspeteRakete 3:f58c63b78853 43 OSCBundle::~OSCBundle(){
aspeteRakete 3:f58c63b78853 44 for (int i = 0; i < numMessages; i++){
aspeteRakete 3:f58c63b78853 45 OSCMessage * msg = getOSCMessage(i);
aspeteRakete 3:f58c63b78853 46 delete msg;
aspeteRakete 3:f58c63b78853 47 }
aspeteRakete 3:f58c63b78853 48 free(messages);
aspeteRakete 3:f58c63b78853 49 free(incomingBuffer);
aspeteRakete 3:f58c63b78853 50 }
aspeteRakete 3:f58c63b78853 51
aspeteRakete 3:f58c63b78853 52 //clears all of the OSCMessages inside
aspeteRakete 3:f58c63b78853 53 void OSCBundle::empty(){
aspeteRakete 3:f58c63b78853 54 error = OSC_OK;
aspeteRakete 3:f58c63b78853 55 for (int i = 0; i < numMessages; i++){
aspeteRakete 3:f58c63b78853 56 OSCMessage * msg = getOSCMessage(i);
aspeteRakete 3:f58c63b78853 57 delete msg;
aspeteRakete 3:f58c63b78853 58 }
aspeteRakete 3:f58c63b78853 59 free(messages);
aspeteRakete 3:f58c63b78853 60 messages = NULL;
aspeteRakete 3:f58c63b78853 61 clearIncomingBuffer();
aspeteRakete 3:f58c63b78853 62 numMessages = 0;
aspeteRakete 3:f58c63b78853 63 }
aspeteRakete 3:f58c63b78853 64
aspeteRakete 3:f58c63b78853 65 /*=============================================================================
aspeteRakete 3:f58c63b78853 66 SETTERS
aspeteRakete 3:f58c63b78853 67 =============================================================================*/
aspeteRakete 3:f58c63b78853 68
aspeteRakete 3:f58c63b78853 69 OSCMessage & OSCBundle::add(char * _address){
aspeteRakete 3:f58c63b78853 70 OSCMessage * msg = new OSCMessage(_address);
aspeteRakete 3:f58c63b78853 71 if (!msg->hasError()){
aspeteRakete 3:f58c63b78853 72 //realloc the array to fit the message
aspeteRakete 3:f58c63b78853 73 OSCMessage ** messageMem = (OSCMessage **) realloc(messages, sizeof(OSCMessage *) * (numMessages + 1));
aspeteRakete 3:f58c63b78853 74 if (messageMem != NULL){
aspeteRakete 3:f58c63b78853 75 messages = messageMem;
aspeteRakete 3:f58c63b78853 76 messages[numMessages] = msg;
aspeteRakete 3:f58c63b78853 77 numMessages++;
aspeteRakete 3:f58c63b78853 78 } else {
aspeteRakete 3:f58c63b78853 79 error = ALLOCFAILED;
aspeteRakete 3:f58c63b78853 80 }
aspeteRakete 3:f58c63b78853 81 }
aspeteRakete 3:f58c63b78853 82 return *msg;
aspeteRakete 3:f58c63b78853 83 }
aspeteRakete 3:f58c63b78853 84
aspeteRakete 3:f58c63b78853 85 OSCMessage & OSCBundle::add(){
aspeteRakete 3:f58c63b78853 86 OSCMessage * msg = new OSCMessage();
aspeteRakete 3:f58c63b78853 87 //realloc the array to fit the message
aspeteRakete 3:f58c63b78853 88 OSCMessage ** messageMem = (OSCMessage **) realloc(messages, sizeof(OSCMessage *) * (numMessages + 1));
aspeteRakete 3:f58c63b78853 89 if (messageMem != NULL){
aspeteRakete 3:f58c63b78853 90 messages = messageMem;
aspeteRakete 3:f58c63b78853 91 messages[numMessages] = msg;
aspeteRakete 3:f58c63b78853 92 numMessages++;
aspeteRakete 3:f58c63b78853 93 } else {
aspeteRakete 3:f58c63b78853 94 error = ALLOCFAILED;
aspeteRakete 3:f58c63b78853 95 }
aspeteRakete 3:f58c63b78853 96 return *msg;
aspeteRakete 3:f58c63b78853 97 }
aspeteRakete 3:f58c63b78853 98
aspeteRakete 3:f58c63b78853 99 OSCMessage & OSCBundle::add(OSCMessage & _msg){
aspeteRakete 3:f58c63b78853 100 OSCMessage * msg = new OSCMessage(_msg);
aspeteRakete 3:f58c63b78853 101 if (!msg->hasError()){
aspeteRakete 3:f58c63b78853 102 //realloc the array to fit the message
aspeteRakete 3:f58c63b78853 103 OSCMessage ** messageMem = (OSCMessage **) realloc(messages, sizeof(OSCMessage *) * (numMessages + 1));
aspeteRakete 3:f58c63b78853 104 if (messageMem != NULL){
aspeteRakete 3:f58c63b78853 105 messages = messageMem;
aspeteRakete 3:f58c63b78853 106 messages[numMessages] = msg;
aspeteRakete 3:f58c63b78853 107 numMessages++;
aspeteRakete 3:f58c63b78853 108 } else {
aspeteRakete 3:f58c63b78853 109 error = ALLOCFAILED;
aspeteRakete 3:f58c63b78853 110 }
aspeteRakete 3:f58c63b78853 111 }
aspeteRakete 3:f58c63b78853 112 return *msg;
aspeteRakete 3:f58c63b78853 113 }
aspeteRakete 3:f58c63b78853 114
aspeteRakete 3:f58c63b78853 115 /*=============================================================================
aspeteRakete 3:f58c63b78853 116 GETTERS
aspeteRakete 3:f58c63b78853 117 =============================================================================*/
aspeteRakete 3:f58c63b78853 118
aspeteRakete 3:f58c63b78853 119 //returns the first fullMatch.
aspeteRakete 3:f58c63b78853 120 OSCMessage * OSCBundle::getOSCMessage( char * addr){
aspeteRakete 3:f58c63b78853 121 for (int i = 0; i < numMessages; i++){
aspeteRakete 3:f58c63b78853 122 OSCMessage * msg = getOSCMessage(i);
aspeteRakete 3:f58c63b78853 123 if (msg->fullMatch(addr)){
aspeteRakete 3:f58c63b78853 124 return msg;
aspeteRakete 3:f58c63b78853 125 }
aspeteRakete 3:f58c63b78853 126 }
aspeteRakete 3:f58c63b78853 127 }
aspeteRakete 3:f58c63b78853 128
aspeteRakete 3:f58c63b78853 129 //the position is the same as the order they were declared in
aspeteRakete 3:f58c63b78853 130 OSCMessage * OSCBundle::getOSCMessage(int pos){
aspeteRakete 3:f58c63b78853 131 if (pos < numMessages){
aspeteRakete 3:f58c63b78853 132 return messages[pos];
aspeteRakete 3:f58c63b78853 133 }
aspeteRakete 3:f58c63b78853 134 }
aspeteRakete 3:f58c63b78853 135
aspeteRakete 3:f58c63b78853 136 /*=============================================================================
aspeteRakete 3:f58c63b78853 137 PATTERN MATCHING
aspeteRakete 3:f58c63b78853 138 =============================================================================*/
aspeteRakete 3:f58c63b78853 139
aspeteRakete 3:f58c63b78853 140
aspeteRakete 3:f58c63b78853 141 bool OSCBundle::dispatch(const char * pattern, void (*callback)(OSCMessage&), int initial_offset){
aspeteRakete 3:f58c63b78853 142 bool called = false;
aspeteRakete 3:f58c63b78853 143 for (int i = 0; i < numMessages; i++){
aspeteRakete 3:f58c63b78853 144 OSCMessage msg = getOSCMessage(i);
aspeteRakete 3:f58c63b78853 145 called |= msg.dispatch(pattern, callback, initial_offset);
aspeteRakete 3:f58c63b78853 146 }
aspeteRakete 3:f58c63b78853 147 return called;
aspeteRakete 3:f58c63b78853 148 }
aspeteRakete 3:f58c63b78853 149
aspeteRakete 3:f58c63b78853 150
aspeteRakete 3:f58c63b78853 151 bool OSCBundle::route(const char * pattern, void (*callback)(OSCMessage&, int), int initial_offset){
aspeteRakete 3:f58c63b78853 152 bool called = false;
aspeteRakete 3:f58c63b78853 153 for (int i = 0; i < numMessages; i++){
aspeteRakete 3:f58c63b78853 154 OSCMessage msg = getOSCMessage(i);
aspeteRakete 3:f58c63b78853 155 called |= msg.route(pattern, callback, initial_offset);
aspeteRakete 3:f58c63b78853 156 }
aspeteRakete 3:f58c63b78853 157 return called;
aspeteRakete 3:f58c63b78853 158 }
aspeteRakete 3:f58c63b78853 159
aspeteRakete 3:f58c63b78853 160 /*=============================================================================
aspeteRakete 3:f58c63b78853 161 SIZE
aspeteRakete 3:f58c63b78853 162 =============================================================================*/
aspeteRakete 3:f58c63b78853 163
aspeteRakete 3:f58c63b78853 164
aspeteRakete 3:f58c63b78853 165 int OSCBundle::size(){
aspeteRakete 3:f58c63b78853 166 return numMessages;
aspeteRakete 3:f58c63b78853 167 }
aspeteRakete 3:f58c63b78853 168
aspeteRakete 3:f58c63b78853 169 /*=============================================================================
aspeteRakete 3:f58c63b78853 170 ERROR HANDLING
aspeteRakete 3:f58c63b78853 171 =============================================================================*/
aspeteRakete 3:f58c63b78853 172
aspeteRakete 3:f58c63b78853 173 bool OSCBundle::hasError(){
aspeteRakete 3:f58c63b78853 174 bool retError = error != OSC_OK;
aspeteRakete 3:f58c63b78853 175 //test each of the data
aspeteRakete 3:f58c63b78853 176 for (int i = 0; i < numMessages; i++){
aspeteRakete 3:f58c63b78853 177 OSCMessage * msg = getOSCMessage(i);
aspeteRakete 3:f58c63b78853 178 retError |= msg->hasError();
aspeteRakete 3:f58c63b78853 179 }
aspeteRakete 3:f58c63b78853 180 return retError;
aspeteRakete 3:f58c63b78853 181 }
aspeteRakete 3:f58c63b78853 182
aspeteRakete 3:f58c63b78853 183 OSCErrorCode OSCBundle::getError(){
aspeteRakete 3:f58c63b78853 184 return error;
aspeteRakete 3:f58c63b78853 185 }
aspeteRakete 3:f58c63b78853 186
aspeteRakete 3:f58c63b78853 187
aspeteRakete 3:f58c63b78853 188 /*=============================================================================
aspeteRakete 3:f58c63b78853 189 SENDING
aspeteRakete 3:f58c63b78853 190 =============================================================================*/
aspeteRakete 3:f58c63b78853 191
aspeteRakete 3:f58c63b78853 192 /*void OSCBundle::send(Print &p){
aspeteRakete 3:f58c63b78853 193 //don't send a bundle with errors
aspeteRakete 3:f58c63b78853 194 if (hasError()){
aspeteRakete 3:f58c63b78853 195 return;
aspeteRakete 3:f58c63b78853 196 }
aspeteRakete 3:f58c63b78853 197 //write the bundle header
aspeteRakete 3:f58c63b78853 198 static uint8_t header[] = {'#', 'b', 'u', 'n', 'd', 'l', 'e', 0};
aspeteRakete 3:f58c63b78853 199 p.write(header, 8);
aspeteRakete 3:f58c63b78853 200 //write the timetag
aspeteRakete 3:f58c63b78853 201 uint64_t t64 = BigEndian(timetag);
aspeteRakete 3:f58c63b78853 202 uint8_t * tptr = (uint8_t *) &t64;
aspeteRakete 3:f58c63b78853 203 p.write(tptr, 8);
aspeteRakete 3:f58c63b78853 204 //send the messages
aspeteRakete 3:f58c63b78853 205 for (int i = 0; i < numMessages; i++){
aspeteRakete 3:f58c63b78853 206 OSCMessage * msg = getOSCMessage(i);
aspeteRakete 3:f58c63b78853 207 int msgSize = msg->bytes();
aspeteRakete 3:f58c63b78853 208 //turn the message size into a pointer
aspeteRakete 3:f58c63b78853 209 uint32_t s32 = BigEndian((uint32_t) msgSize);
aspeteRakete 3:f58c63b78853 210 uint8_t * sptr = (uint8_t *) &s32;
aspeteRakete 3:f58c63b78853 211 //write the messsage size
aspeteRakete 3:f58c63b78853 212 p.write(sptr, 4);
aspeteRakete 3:f58c63b78853 213 msg->send(p);
aspeteRakete 3:f58c63b78853 214 }
aspeteRakete 3:f58c63b78853 215 }*/
aspeteRakete 3:f58c63b78853 216
aspeteRakete 3:f58c63b78853 217 /*=============================================================================
aspeteRakete 3:f58c63b78853 218 FILLING
aspeteRakete 3:f58c63b78853 219 =============================================================================*/
aspeteRakete 3:f58c63b78853 220
aspeteRakete 3:f58c63b78853 221 void OSCBundle::fill(uint8_t incomingByte){
aspeteRakete 3:f58c63b78853 222 decode(incomingByte);
aspeteRakete 3:f58c63b78853 223 }
aspeteRakete 3:f58c63b78853 224
aspeteRakete 3:f58c63b78853 225 void OSCBundle::fill(uint8_t * incomingBytes, int length){
aspeteRakete 3:f58c63b78853 226 while (length--){
aspeteRakete 3:f58c63b78853 227 decode(*incomingBytes++);
aspeteRakete 3:f58c63b78853 228 }
aspeteRakete 3:f58c63b78853 229 }
aspeteRakete 3:f58c63b78853 230
aspeteRakete 3:f58c63b78853 231 /*=============================================================================
aspeteRakete 3:f58c63b78853 232 DECODING
aspeteRakete 3:f58c63b78853 233 =============================================================================*/
aspeteRakete 3:f58c63b78853 234
aspeteRakete 3:f58c63b78853 235 void OSCBundle::decodeTimetag(){
aspeteRakete 3:f58c63b78853 236 //parse the incoming buffer as a uint64
aspeteRakete 3:f58c63b78853 237 setTimetag(incomingBuffer);
aspeteRakete 3:f58c63b78853 238 //make sure the endianness is right
aspeteRakete 3:f58c63b78853 239 timetag = BigEndian(timetag);
aspeteRakete 3:f58c63b78853 240 decodeState = MESSAGE_SIZE;
aspeteRakete 3:f58c63b78853 241 clearIncomingBuffer();
aspeteRakete 3:f58c63b78853 242 }
aspeteRakete 3:f58c63b78853 243
aspeteRakete 3:f58c63b78853 244 void OSCBundle::decodeHeader(){
aspeteRakete 3:f58c63b78853 245 const char * header = "#bundle";
aspeteRakete 3:f58c63b78853 246 if (strcmp(header, (char *) incomingBuffer)!=0){
aspeteRakete 3:f58c63b78853 247 //otherwise go back to the top and wait for a new bundle header
aspeteRakete 3:f58c63b78853 248 decodeState = STANDBY;
aspeteRakete 3:f58c63b78853 249 error = INVALID_OSC;
aspeteRakete 3:f58c63b78853 250 } else {
aspeteRakete 3:f58c63b78853 251 decodeState = TIMETAG;
aspeteRakete 3:f58c63b78853 252 }
aspeteRakete 3:f58c63b78853 253 clearIncomingBuffer();
aspeteRakete 3:f58c63b78853 254 }
aspeteRakete 3:f58c63b78853 255
aspeteRakete 3:f58c63b78853 256 void OSCBundle::decodeMessage(uint8_t incomingByte){
aspeteRakete 3:f58c63b78853 257 //get the current message
aspeteRakete 3:f58c63b78853 258 if (numMessages > 0){
aspeteRakete 3:f58c63b78853 259 OSCMessage * lastMessage = messages[numMessages - 1];
aspeteRakete 3:f58c63b78853 260 //put the bytes in there
aspeteRakete 3:f58c63b78853 261 lastMessage->fill(incomingByte);
aspeteRakete 3:f58c63b78853 262 //if it's all done
aspeteRakete 3:f58c63b78853 263 if (incomingBufferSize == incomingMessageSize){
aspeteRakete 3:f58c63b78853 264 //move onto the next message
aspeteRakete 3:f58c63b78853 265 decodeState = MESSAGE_SIZE;
aspeteRakete 3:f58c63b78853 266 clearIncomingBuffer();
aspeteRakete 3:f58c63b78853 267 } else if (incomingBufferSize > incomingMessageSize){
aspeteRakete 3:f58c63b78853 268 error = INVALID_OSC;
aspeteRakete 3:f58c63b78853 269 }
aspeteRakete 3:f58c63b78853 270 }
aspeteRakete 3:f58c63b78853 271 }
aspeteRakete 3:f58c63b78853 272
aspeteRakete 3:f58c63b78853 273 //does not validate the incoming OSC for correctness
aspeteRakete 3:f58c63b78853 274 void OSCBundle::decode(uint8_t incomingByte){
aspeteRakete 3:f58c63b78853 275 addToIncomingBuffer(incomingByte);
aspeteRakete 3:f58c63b78853 276 switch (decodeState){
aspeteRakete 3:f58c63b78853 277 case STANDBY:
aspeteRakete 3:f58c63b78853 278 if (incomingByte == '#'){
aspeteRakete 3:f58c63b78853 279 decodeState = HEADER;
aspeteRakete 3:f58c63b78853 280 } else if (incomingByte == '/'){
aspeteRakete 3:f58c63b78853 281 decodeState = MESSAGE;
aspeteRakete 3:f58c63b78853 282 }
aspeteRakete 3:f58c63b78853 283 break;
aspeteRakete 3:f58c63b78853 284 case HEADER:
aspeteRakete 3:f58c63b78853 285 if (incomingBufferSize == 8){
aspeteRakete 3:f58c63b78853 286 decodeHeader();
aspeteRakete 3:f58c63b78853 287 decodeState = TIMETAG;
aspeteRakete 3:f58c63b78853 288 }
aspeteRakete 3:f58c63b78853 289 break;
aspeteRakete 3:f58c63b78853 290 case TIMETAG:
aspeteRakete 3:f58c63b78853 291 if (incomingBufferSize == 8){
aspeteRakete 3:f58c63b78853 292 decodeTimetag();
aspeteRakete 3:f58c63b78853 293 decodeState = MESSAGE_SIZE;
aspeteRakete 3:f58c63b78853 294 }
aspeteRakete 3:f58c63b78853 295 break;
aspeteRakete 3:f58c63b78853 296 case MESSAGE_SIZE:
aspeteRakete 3:f58c63b78853 297 if (incomingBufferSize == 4){
aspeteRakete 3:f58c63b78853 298 //make sure the message size is valid
aspeteRakete 3:f58c63b78853 299 int32_t msgSize;
aspeteRakete 3:f58c63b78853 300 memcpy(&msgSize, incomingBuffer, 4);
aspeteRakete 3:f58c63b78853 301 msgSize = BigEndian(msgSize);
aspeteRakete 3:f58c63b78853 302 if (msgSize % 4 != 0 || msgSize == 0){
aspeteRakete 3:f58c63b78853 303 error = INVALID_OSC;
aspeteRakete 3:f58c63b78853 304 } else {
aspeteRakete 3:f58c63b78853 305 //add a message to the buffer
aspeteRakete 3:f58c63b78853 306 decodeState = MESSAGE;
aspeteRakete 3:f58c63b78853 307 incomingMessageSize = msgSize;
aspeteRakete 3:f58c63b78853 308 clearIncomingBuffer();
aspeteRakete 3:f58c63b78853 309 //add a new empty message
aspeteRakete 3:f58c63b78853 310 add();
aspeteRakete 3:f58c63b78853 311 }
aspeteRakete 3:f58c63b78853 312 }
aspeteRakete 3:f58c63b78853 313 break;
aspeteRakete 3:f58c63b78853 314 case MESSAGE:
aspeteRakete 3:f58c63b78853 315 decodeMessage(incomingByte);
aspeteRakete 3:f58c63b78853 316 break;
aspeteRakete 3:f58c63b78853 317 }
aspeteRakete 3:f58c63b78853 318 }
aspeteRakete 3:f58c63b78853 319
aspeteRakete 3:f58c63b78853 320
aspeteRakete 3:f58c63b78853 321 /*=============================================================================
aspeteRakete 3:f58c63b78853 322 INCOMING BUFFER MANAGEMENT
aspeteRakete 3:f58c63b78853 323 =============================================================================*/
aspeteRakete 3:f58c63b78853 324
aspeteRakete 3:f58c63b78853 325 void OSCBundle::addToIncomingBuffer(uint8_t incomingByte){
aspeteRakete 3:f58c63b78853 326 //realloc some space for the new byte and stick it on the end
aspeteRakete 3:f58c63b78853 327 incomingBuffer = (uint8_t *) realloc ( incomingBuffer, incomingBufferSize + 1);
aspeteRakete 3:f58c63b78853 328 if (incomingBuffer != NULL){
aspeteRakete 3:f58c63b78853 329 incomingBuffer[incomingBufferSize++] = incomingByte;
aspeteRakete 3:f58c63b78853 330 } else {
aspeteRakete 3:f58c63b78853 331 error = ALLOCFAILED;
aspeteRakete 3:f58c63b78853 332 }
aspeteRakete 3:f58c63b78853 333 }
aspeteRakete 3:f58c63b78853 334
aspeteRakete 3:f58c63b78853 335 void OSCBundle::clearIncomingBuffer(){
aspeteRakete 3:f58c63b78853 336 incomingBufferSize = 0;
aspeteRakete 3:f58c63b78853 337 free(incomingBuffer);
aspeteRakete 3:f58c63b78853 338 incomingBuffer = NULL;
aspeteRakete 3:f58c63b78853 339 }
aspeteRakete 3:f58c63b78853 340