123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- #ifndef OSCDATA_h
- #define OSCDATA_h
- #include "Arduino.h"
- #include <stdlib.h>
- #include <stdint.h>
- #include <inttypes.h>
- #include <string.h>
- #include "OSCTiming.h"
- #if (defined(TEENSYDUINO) && defined(USB_SERIAL)) || (!defined(TEENSYDUINO) && defined(__AVR_ATmega32U4__)) || defined(__SAM3X8E__) || (defined(_USB) && defined(_USE_USB_FOR_SERIAL_)) || defined(BOARD_maple_mini)
- #define BOARD_HAS_USB_SERIAL
- #if defined(__SAM3X8E__)
- #define thisBoardsSerialUSB SerialUSB
- #else
- #define thisBoardsSerialUSB Serial
- #endif
- #endif
- #if defined(ESP8266) || defined(ESP32)
- #define ESPxx
- #endif
- typedef enum { OSC_OK = 0,
- BUFFER_FULL, INVALID_OSC, ALLOCFAILED, INDEX_OUT_OF_BOUNDS
- } OSCErrorCode;
- class OSCData
- {
- private:
-
- friend class OSCMessage;
-
-
- OSCData(char t);
- public:
-
- OSCErrorCode error;
-
- int bytes;
-
- int type;
-
- union {
- char * s;
- int32_t i;
- float f;
- double d;
- uint64_t l;
- uint8_t * b;
- osctime_t time;
- } data;
-
- OSCData(const char * s);
- #if defined(__SAM3X8E__)
- OSCData (int16_t);
- #endif
- OSCData (int32_t);
- #ifndef ESPxx
- OSCData (int);
- #endif
- OSCData (unsigned int);
- OSCData (float);
- OSCData (double);
- OSCData (uint8_t *, int);
-
- OSCData (OSCData *);
- OSCData (boolean);
- OSCData (osctime_t);
-
- ~OSCData();
-
- int32_t getInt();
- float getFloat();
- double getDouble();
- int getString(char *);
- int getString(char *, int);
- int getString(char *, int, int, int);
- int getBlob(uint8_t *);
- int getBlob(uint8_t *, int);
- int getBlob(uint8_t *, int, int, int);
- int getBlobLength();
- bool getBoolean();
- osctime_t getTime();
-
- OSCData(char, uint8_t *, int);
-
-
- };
- template<typename T>
- static inline T BigEndian(const T& x)
- {
- const int one = 1;
- const char sig = *(char*)&one;
- if (sig == 0) return x;
- T ret;
- int size = sizeof(T);
- char* src = (char*)&x + sizeof(T) - 1;
- char* dst = (char*)&ret;
- while (size-- > 0){
- *dst++ = *src--;
- }
- return ret;
- }
- #endif
|