/* ArdOSC 2.1 - OSC Library for Arduino. -------- Lisence ----------------------------------------------------------- ArdOSC The MIT License Copyright (c) 2009 - 2011 recotana( http://recotana.com ) All right reserved */ #ifndef OSCMessage_h #define OSCMessage_h #include "OSCcommon.h" #include "OSCArg.h" #define kTagInt32 'i' #define kTagFloat 'f' #define kTagString 's' #define kTagBlob 'b' #define kTagMidi 'm' #define kTagRgba 'r' #define kTagTrue 'T' #define kTagFalse 'F' class OSCMessage{ private: char *_oscAddress; uint16_t _oscAdrSize; uint16_t _oscAdrAlignmentSize; uint16_t _typeTagAlignmentSize; uint16_t _argsAlignmentSize; uint16_t _argsNum; OSCArg * _args[kMaxAugument]; uint16_t getMessageSize(void); uint16_t getArgAlignmentSize(uint8_t _index); int16_t setArgData( char _type , void *_value , uint8_t _byte, bool _enableAlignment ); void swap(uint8_t *data1, uint8_t *data2); // void get4ByteData(int16_t _index , uint8_t *_data); public: OSCMessage(void); OSCMessage(const char *_oscAddr); ~OSCMessage(void); void flush(void); int16_t setOSCAddress(const char *_addr); char * getOSCAddress(void); int16_t beginMessage( const char *_addr); int16_t getArgsNum(void); char getArgTypeTag(int16_t _index); int16_t addArgInt32(int32_t _value); int32_t getArgInt32(int16_t _index); #ifdef _USE_FLOAT_ int16_t addArgFloat(float _value); float getArgFloat(int16_t _index); #endif #ifdef _USE_STRING_ int16_t addArgString(const char* _value); char* getArgStringData(int16_t _index ); ///< get a pointer to the dataof argument [index]. use together with getArgStringSize(); int16_t getArgString(int16_t _index, char *_rcvstr); int16_t getArgStringSize(int16_t _index); #endif friend class OSCServer; friend class OSCClient; friend class OSCDecoder; friend class OSCEncoder; friend class Pattern; friend class OscMessageSink; }; #endif