void OSCBundle::send(Print &p){ //don't send a bundle with errors if (hasError()){ return; } //write the bundle header static uint8_t header[] = {'#', 'b', 'u', 'n', 'd', 'l', 'e', 0}; p.write(header, 8); //write the timetag { osctime_t time = timetag; uint32_t d = BigEndian(time.seconds); uint8_t * ptr = (uint8_t *) &d; p.write(ptr, 4); d = BigEndian(time.fractionofseconds); ptr = (uint8_t *) &d; p.write(ptr, 4); } //send the messages for (int i = 0; i < numMessages; i++){ OSCMessage * msg = getOSCMessage(i); int msgSize = msg->bytes(); //turn the message size into a pointer uint32_t s32 = BigEndian((uint32_t) msgSize); uint8_t * sptr = (uint8_t *) &s32; //write the messsage size p.write(sptr, 4); msg->send(p); } }
void setLED(OSCMessage &msg){ msg.send(dump); slip.sendMessage(dump.buffer, dump.length, serial); }
int main(int argc, char* argv[]) { uint32_t seconds = 0; char udpPacketIn[256]; //uint8_t osc_packet_in[256]; uint8_t i = 0; int len = 0; UdpSocket udpSock(4001); udpSock.setDestination(4000, "localhost"); Serial serial; SLIPEncodedSerial slip; SimpleWriter dump; OSCMessage msgIn; printf("cool\n"); // make an osc object // the message wants an OSC address as first argument OSCMessage msg("/sys/renumber"); // msg.add(888); // this just dumps it into the simple writer dump msg.send(dump); printf("\n msg is %d bytes\n", dump.length); // print it out for (i = 0; i < dump.length; i++){ printf("%x ", dump.buffer[i]); } // UDP send udpSock.writeBuffer(dump.buffer, dump.length); // serial send slip.sendMessage(dump.buffer, dump.length, serial); printf("\ndone, now gonna receive\n"); // full udp -> serial -> serial -> udp for (;;){ // receive udp, send to serial len = udpSock.readBuffer(udpPacketIn, 256, 0); if (len > 0){ for (i = 0; i < len; i++){ msgIn.fill(udpPacketIn[i]); } if(!msgIn.hasError()){ msgIn.dispatch("/thing/test", gotone, 0); // send it along msgIn.send(dump); slip.sendMessage(dump.buffer, dump.length, serial); } else { printf("bad message"); } msgIn.empty(); } // receive serial, send udp if(slip.recvMessage(serial)) { udpSock.writeBuffer(slip.decodedBuf, slip.decodedLength); } // sleep for 1ms usleep(1000); } // for;; }