(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.
Diff: OSCBundle.h
- Revision:
- 3:f58c63b78853
diff -r 61caa2495215 -r f58c63b78853 OSCBundle.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/OSCBundle.h Sat May 17 12:42:29 2014 +0000 @@ -0,0 +1,172 @@ +/* + Written by Yotam Mann, The Center for New Music and Audio Technologies, + University of California, Berkeley. Copyright (c) 2012, 2013, The Regents of + the University of California (Regents). + + Permission to use, copy, modify, distribute, and distribute modified versions + of this software and its documentation without fee and without a signed + licensing agreement, is hereby granted, provided that the above copyright + notice, this paragraph and the following two paragraphs appear in all copies, + modifications, and distributions. + + IN NO EVENT SHALL REGENTS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, + SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING + OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF REGENTS HAS + BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + REGENTS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE. THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED + HEREUNDER IS PROVIDED "AS IS". REGENTS HAS NO OBLIGATION TO PROVIDE + MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + + + */ + +#ifndef OSCBUNDLE_h +#define OSCBUNDLE_h + +#include "OSCMessage.h" + +class OSCBundle +{ + +private: + +/*============================================================================= + PRIVATE VARIABLES +=============================================================================*/ + + //the array of messages contained in the bundle + OSCMessage ** messages; + + //the number of messages in the array + int numMessages; + + uint64_t timetag; + + //error codes + OSCErrorCode error; + +/*============================================================================= + DECODING INCOMING BYTES + =============================================================================*/ + + //the decoding states for incoming bytes + enum DecodeState { + STANDBY, + HEADER, + TIMETAG, + MESSAGE_SIZE, + MESSAGE, + } decodeState; + + //stores incoming bytes until they can be decoded + uint8_t * incomingBuffer; + int incomingBufferSize; + + //the size of the incoming message + int incomingMessageSize; + + //adds a byte to the buffer + void addToIncomingBuffer(uint8_t); + //clears the incoming buffer + void clearIncomingBuffer(); + + //decoding functions + void decode(uint8_t); + void decodeTimetag(); + void decodeHeader(); + void decodeMessage(uint8_t); + + //just a placeholder while filling + OSCMessage & add(); + + +public: + +/*============================================================================= + CONSTRUCTORS / DESTRUCTOR +=============================================================================*/ + + //default timetag of 1 + OSCBundle(uint64_t = 1); + + //DESTRUCTOR + ~OSCBundle(); + + //clears all of the OSCMessages inside + void empty(); + +/*============================================================================= + SETTERS +=============================================================================*/ + + //start a new OSC Message in the bundle + OSCMessage & add( char * address); + //add with nothing in it produces an invalid osc message + //copies an existing message into the bundle + OSCMessage & add(OSCMessage & msg); + + template <typename T> + void setTimetag(T t){ + timetag = (uint64_t) t; + } + //sets the timetag from a buffer + void setTimetag(uint8_t * buff){ + memcpy(&timetag, buff, 8); + } + +/*============================================================================= + GETTERS + =============================================================================*/ + + //gets the message the matches the address string + //will do regex matching + OSCMessage * getOSCMessage(char * addr); + + //get message by position + OSCMessage * getOSCMessage(int position); + +/*============================================================================= + MATCHING +=============================================================================*/ + + //if the bundle contains a message that matches the pattern, + //call the function callback on that message + bool dispatch(const char * pattern, void (*callback)(OSCMessage&), int = 0); + + //like dispatch, but allows for partial matches + //the address match offset is sent as an argument to the callback + bool route(const char * pattern, void (*callback)(OSCMessage&, int), int = 0); + +/*============================================================================= + SIZE +=============================================================================*/ + //returns the number of messages in the bundle; + int size(); + +/*============================================================================= + ERROR + =============================================================================*/ + + bool hasError(); + + OSCErrorCode getError(); + +/*============================================================================= + SENDING + =============================================================================*/ + + //void send(Print &p); + +/*============================================================================= + FILLING + =============================================================================*/ + + void fill(uint8_t incomingByte); + + void fill(uint8_t * incomingBytes, int length); +}; + +#endif \ No newline at end of file