LineLedControl

Dependencies:   LPD8806 mbed

Fork of LPD8806_Test by Jelmer Tiete

Committer:
sfjmt
Date:
Mon Aug 19 12:14:37 2013 +0000
Revision:
3:b0a1b4b24d3c
LPD8806 control

Who changed what in which revision?

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