Laser Sensing Display for UI interfaces in the real world

Dependencies:   mbed

Fork of skinGames_forktest by Alvaro Cassinelli

Committer:
mbedalvaro
Date:
Wed Mar 28 14:40:01 2012 +0000
Revision:
0:345b3bc7a0ea
Child:
30:d8af03f01cd4
This version (using rigid frame, base and child classes, etc) works, but the blob is strangely smaller. Need to check this.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbedalvaro 0:345b3bc7a0ea 1 /* mbedOSC.h
mbedalvaro 0:345b3bc7a0ea 2 This is an OSC library for the mbed, created to be compatible with Recotana's OSCClass library (http://recotana.com) for the
mbedalvaro 0:345b3bc7a0ea 3 Arduino with Ethernet shield. I have also used parts of the OSC Transceiver(Sender/Receiver) code by xshige
mbedalvaro 0:345b3bc7a0ea 4 written by: Alvaro Cassinelli, 7.10.2011
mbedalvaro 0:345b3bc7a0ea 5
mbedalvaro 0:345b3bc7a0ea 6 This library is free software; you can redistribute it and/or
mbedalvaro 0:345b3bc7a0ea 7 modify it under the terms of the GNU Lesser General Public
mbedalvaro 0:345b3bc7a0ea 8 License version 2.1 as published by the Free Software Foundation.
mbedalvaro 0:345b3bc7a0ea 9 Open Sound Control http://opensoundcontrol.org/
mbedalvaro 0:345b3bc7a0ea 10
mbedalvaro 0:345b3bc7a0ea 11 mbedOSC version 0.1 Specification (similar to Recotana's OSCClass library)
mbedalvaro 0:345b3bc7a0ea 12
mbedalvaro 0:345b3bc7a0ea 13 ********
mbedalvaro 0:345b3bc7a0ea 14 Address : max 2
mbedalvaro 0:345b3bc7a0ea 15 "/ard"
mbedalvaro 0:345b3bc7a0ea 16 "/ard/output" --address[0]="/ard" :max 15character
mbedalvaro 0:345b3bc7a0ea 17 --address[1]="/output" :max 15character
mbedalvaro 0:345b3bc7a0ea 18
mbedalvaro 0:345b3bc7a0ea 19 *******
mbedalvaro 0:345b3bc7a0ea 20 TypeTag : max 2
mbedalvaro 0:345b3bc7a0ea 21
mbedalvaro 0:345b3bc7a0ea 22 "i" - long or unsigned long
mbedalvaro 0:345b3bc7a0ea 23 "f" - double
mbedalvaro 0:345b3bc7a0ea 24
mbedalvaro 0:345b3bc7a0ea 25 *******
mbedalvaro 0:345b3bc7a0ea 26 arg : max 2
mbedalvaro 0:345b3bc7a0ea 27
mbedalvaro 0:345b3bc7a0ea 28 *******
mbedalvaro 0:345b3bc7a0ea 29 Example of an OSC message: "/mbed/test1, if 50 32.4" (Note: this is not the byte string
mbedalvaro 0:345b3bc7a0ea 30 sent as UDP packet - there are no spaces, and arguments are in binary, BIG ENDIAN)
mbedalvaro 0:345b3bc7a0ea 31 */
mbedalvaro 0:345b3bc7a0ea 32
mbedalvaro 0:345b3bc7a0ea 33 #ifndef mbedOSC_h
mbedalvaro 0:345b3bc7a0ea 34 #define mbedOSC_h
mbedalvaro 0:345b3bc7a0ea 35
mbedalvaro 0:345b3bc7a0ea 36 #include "mbed.h"
mbedalvaro 0:345b3bc7a0ea 37 #include "EthernetNetIf.h"
mbedalvaro 0:345b3bc7a0ea 38 #include "UDPSocket.h"
mbedalvaro 0:345b3bc7a0ea 39
mbedalvaro 0:345b3bc7a0ea 40 // setup IP of destination (computer):
mbedalvaro 0:345b3bc7a0ea 41 #define DEFAULT_SEND_PORT 12000
mbedalvaro 0:345b3bc7a0ea 42 //Host sendHost(IpAddr(10, 0, 0, 1), DEFAULT_SEND_PORT, NULL); // Send Port
mbedalvaro 0:345b3bc7a0ea 43 // set IP of origin of UDP packets - the mbed acts as a SERVER here, and needs to bind the socket to the "client" (the computer)
mbedalvaro 0:345b3bc7a0ea 44 #define DEFAULT_RECEIVE_PORT 57130
mbedalvaro 0:345b3bc7a0ea 45 //Host recHost(IpAddr(10, 0, 0, 1), DEFAULT_RECEIVE_PORT, NULL); // Receive Port
mbedalvaro 0:345b3bc7a0ea 46 //UDPSocket udpRec,udpSend;
mbedalvaro 0:345b3bc7a0ea 47
mbedalvaro 0:345b3bc7a0ea 48
mbedalvaro 0:345b3bc7a0ea 49 #define MAX_ADDRESS 2
mbedalvaro 0:345b3bc7a0ea 50 #define MAX_ARG 2
mbedalvaro 0:345b3bc7a0ea 51
mbedalvaro 0:345b3bc7a0ea 52 #define TYPE_INT 1
mbedalvaro 0:345b3bc7a0ea 53 #define TYPE_FLOAT 2
mbedalvaro 0:345b3bc7a0ea 54 #define TYPE_BLOB 3
mbedalvaro 0:345b3bc7a0ea 55
mbedalvaro 0:345b3bc7a0ea 56
mbedalvaro 0:345b3bc7a0ea 57 /*
mbedalvaro 0:345b3bc7a0ea 58 Container class for OSC messages (receiving or sending)
mbedalvaro 0:345b3bc7a0ea 59 */
mbedalvaro 0:345b3bc7a0ea 60 class OSCMessage{
mbedalvaro 0:345b3bc7a0ea 61
mbedalvaro 0:345b3bc7a0ea 62 private:
mbedalvaro 0:345b3bc7a0ea 63
mbedalvaro 0:345b3bc7a0ea 64 char *address[MAX_ADDRESS]; // these are strings (as char*)
mbedalvaro 0:345b3bc7a0ea 65 uint8_t addressNum; // current number of addresses in the message (ex: "/ard/test" --> the number of the addresses is 2)
mbedalvaro 0:345b3bc7a0ea 66
mbedalvaro 0:345b3bc7a0ea 67 char typeTag[MAX_ARG];
mbedalvaro 0:345b3bc7a0ea 68
mbedalvaro 0:345b3bc7a0ea 69 void *arg[MAX_ARG];
mbedalvaro 0:345b3bc7a0ea 70 uint8_t argNum;
mbedalvaro 0:345b3bc7a0ea 71
mbedalvaro 0:345b3bc7a0ea 72 // Information about the connection:
mbedalvaro 0:345b3bc7a0ea 73 //uint8_t ip[4];
mbedalvaro 0:345b3bc7a0ea 74 //uint16_t port;
mbedalvaro 0:345b3bc7a0ea 75 Host host;
mbedalvaro 0:345b3bc7a0ea 76
mbedalvaro 0:345b3bc7a0ea 77 public:
mbedalvaro 0:345b3bc7a0ea 78
mbedalvaro 0:345b3bc7a0ea 79 OSCMessage();
mbedalvaro 0:345b3bc7a0ea 80
mbedalvaro 0:345b3bc7a0ea 81 const IpAddr& getIp(); // return IpAddr object
mbedalvaro 0:345b3bc7a0ea 82 const int& getPort(); // return port
mbedalvaro 0:345b3bc7a0ea 83
mbedalvaro 0:345b3bc7a0ea 84 //ex. address patern "/adr/test"
mbedalvaro 0:345b3bc7a0ea 85 // address[2]={"/ard" , "/test"}
mbedalvaro 0:345b3bc7a0ea 86 char *getAddress(uint8_t _index); //retturn address
mbedalvaro 0:345b3bc7a0ea 87 char *getTopAddress(); //return address[0] :"/ard"
mbedalvaro 0:345b3bc7a0ea 88 char *getSubAddress(); //return address[1] :"/test"
mbedalvaro 0:345b3bc7a0ea 89 uint8_t getAddressNum(); //return 2
mbedalvaro 0:345b3bc7a0ea 90
mbedalvaro 0:345b3bc7a0ea 91 // 'i': long(int32_t)
mbedalvaro 0:345b3bc7a0ea 92 // 'f': double
mbedalvaro 0:345b3bc7a0ea 93 //ex 'if' 123 54.21
mbedalvaro 0:345b3bc7a0ea 94 char getTypeTag(uint8_t _index); //_index=0 ->'i'
mbedalvaro 0:345b3bc7a0ea 95 //_index=1 ->'f'
mbedalvaro 0:345b3bc7a0ea 96
mbedalvaro 0:345b3bc7a0ea 97 uint8_t getArgNum(); //return 2
mbedalvaro 0:345b3bc7a0ea 98
mbedalvaro 0:345b3bc7a0ea 99 int32_t getArgInt(uint8_t _index); //_index=0 -> 123
mbedalvaro 0:345b3bc7a0ea 100 double getArgFloat(uint8_t _index); //_index=1 -> 54.21
mbedalvaro 0:345b3bc7a0ea 101
mbedalvaro 0:345b3bc7a0ea 102
mbedalvaro 0:345b3bc7a0ea 103 void setTopAddress(char *_address); //set address[0]
mbedalvaro 0:345b3bc7a0ea 104 void setSubAddress(char *_address); //set address[1]
mbedalvaro 0:345b3bc7a0ea 105 void setAddress(char *_topAddress,
mbedalvaro 0:345b3bc7a0ea 106 char *_subAddress);
mbedalvaro 0:345b3bc7a0ea 107 void setAddress(uint8_t _index, //set 0,address[0]
mbedalvaro 0:345b3bc7a0ea 108 char *_address);
mbedalvaro 0:345b3bc7a0ea 109 //set 1,address[1]
mbedalvaro 0:345b3bc7a0ea 110
mbedalvaro 0:345b3bc7a0ea 111 void setIp( uint8_t *_ip ); //set ip
mbedalvaro 0:345b3bc7a0ea 112
mbedalvaro 0:345b3bc7a0ea 113 void setIp(uint8_t _ip1, //set(192,
mbedalvaro 0:345b3bc7a0ea 114 uint8_t _ip2, // 168,
mbedalvaro 0:345b3bc7a0ea 115 uint8_t _ip3, // 0,
mbedalvaro 0:345b3bc7a0ea 116 uint8_t _ip4); // 100)
mbedalvaro 0:345b3bc7a0ea 117
mbedalvaro 0:345b3bc7a0ea 118 void setPort( uint16_t _port );
mbedalvaro 0:345b3bc7a0ea 119
mbedalvaro 0:345b3bc7a0ea 120 //ex. long v1=100
mbedalvaro 0:345b3bc7a0ea 121 // double v2=123.21
mbedalvaro 0:345b3bc7a0ea 122 void setArgs( char *types , ... ); //set ("if",&v1,&v2)
mbedalvaro 0:345b3bc7a0ea 123 void clearArgs(); // clear arguments
mbedalvaro 0:345b3bc7a0ea 124
mbedalvaro 0:345b3bc7a0ea 125 friend class OSCClass;
mbedalvaro 0:345b3bc7a0ea 126
mbedalvaro 0:345b3bc7a0ea 127 };
mbedalvaro 0:345b3bc7a0ea 128
mbedalvaro 0:345b3bc7a0ea 129
mbedalvaro 0:345b3bc7a0ea 130
mbedalvaro 0:345b3bc7a0ea 131 /* ==================================== OSCClass for sending and receiving OSC messages using UDP protocol ===================================== */
mbedalvaro 0:345b3bc7a0ea 132
mbedalvaro 0:345b3bc7a0ea 133 #include "UDPSocket.h"
mbedalvaro 0:345b3bc7a0ea 134
mbedalvaro 0:345b3bc7a0ea 135 class OSCClass {
mbedalvaro 0:345b3bc7a0ea 136
mbedalvaro 0:345b3bc7a0ea 137 private:
mbedalvaro 0:345b3bc7a0ea 138
mbedalvaro 0:345b3bc7a0ea 139 UDPSocket udpRec,udpSend;
mbedalvaro 0:345b3bc7a0ea 140 char rcvBuff[256]; // raw buffer for UDP packets (udpRec.recvfrom( buf, 256, &host ) ))
mbedalvaro 0:345b3bc7a0ea 141 int buflength;
mbedalvaro 0:345b3bc7a0ea 142
mbedalvaro 0:345b3bc7a0ea 143 OSCMessage *receiverMessage;
mbedalvaro 0:345b3bc7a0ea 144 OSCMessage *sendContainer;
mbedalvaro 0:345b3bc7a0ea 145
mbedalvaro 0:345b3bc7a0ea 146 char tempAddress[MAX_ADDRESS][16];
mbedalvaro 0:345b3bc7a0ea 147 uint8_t tempArg[MAX_ARG][4];
mbedalvaro 0:345b3bc7a0ea 148
mbedalvaro 0:345b3bc7a0ea 149 void decodePacket( OSCMessage *_mes); // makes OSC message from packet
mbedalvaro 0:345b3bc7a0ea 150
mbedalvaro 0:345b3bc7a0ea 151 public:
mbedalvaro 0:345b3bc7a0ea 152
mbedalvaro 0:345b3bc7a0ea 153 OSCClass();
mbedalvaro 0:345b3bc7a0ea 154 OSCClass(OSCMessage *_mes); // set the receiver message container
mbedalvaro 0:345b3bc7a0ea 155 void onUDPSocketEvent(UDPSocketEvent e);
mbedalvaro 0:345b3bc7a0ea 156
mbedalvaro 0:345b3bc7a0ea 157 //init osc
mbedalvaro 0:345b3bc7a0ea 158 void begin(void (*fp)(UDPSocketEvent));
mbedalvaro 0:345b3bc7a0ea 159 void begin(uint16_t _recievePort, void (*fp)(UDPSocketEvent));
mbedalvaro 0:345b3bc7a0ea 160 void stop();
mbedalvaro 0:345b3bc7a0ea 161
mbedalvaro 0:345b3bc7a0ea 162 //new OSC data in the receiver message container:
mbedalvaro 0:345b3bc7a0ea 163 bool newMessage;
mbedalvaro 0:345b3bc7a0ea 164
mbedalvaro 0:345b3bc7a0ea 165 void setReceiveMessage( OSCMessage *_mes ); //set receive OSCmessage container (note: the message has a "host" object from which we get the upd packets)
mbedalvaro 0:345b3bc7a0ea 166 OSCMessage *getMessage(); //return received OSCmessage
mbedalvaro 0:345b3bc7a0ea 167
mbedalvaro 0:345b3bc7a0ea 168 //buffer clear
mbedalvaro 0:345b3bc7a0ea 169 //void flush();
mbedalvaro 0:345b3bc7a0ea 170
mbedalvaro 0:345b3bc7a0ea 171 //OSC send
mbedalvaro 0:345b3bc7a0ea 172 void sendOsc( OSCMessage *_mes ); //set&send OSCmessage (note: it will be sent to the host defined in the message container)
mbedalvaro 0:345b3bc7a0ea 173
mbedalvaro 0:345b3bc7a0ea 174 // AND THIS IS BAD, need a better function:
mbedalvaro 0:345b3bc7a0ea 175 void sendOscBlob( uint8_t * myblob, int sizeblob, OSCMessage *_mes );
mbedalvaro 0:345b3bc7a0ea 176 void sendOscString( uint8_t * myblob, int sizeblo, OSCMessage *_mesb );
mbedalvaro 0:345b3bc7a0ea 177 };
mbedalvaro 0:345b3bc7a0ea 178
mbedalvaro 0:345b3bc7a0ea 179 #endif