void connect_signals() { char source_name[1024], destination_name[1024]; printf("%s\n", mdev_name(source)); printf("%s\n", mdev_name(destination)); lo_address a = lo_address_new_from_url("osc.udp://224.0.1.3:7570"); lo_address_set_ttl(a, 1); lo_send(a, "/link", "ss", mdev_name(source), mdev_name(destination)); int j = 50; while (j >= 0) { mdev_poll(source, 10); mdev_poll(destination, 10); j--; } msig_full_name(sendsig, source_name, 1024); msig_full_name(recvsig, destination_name, 1024); lo_send(a, "/connect", "ss", source_name, destination_name); lo_address_free(a); }
void loop() { printf("-------------------- GO ! --------------------\n"); int i = 0; if (automate) { char source_name[1024], destination_name[1024]; printf("%s\n", mdev_name(source)); printf("%s\n", mdev_name(destination)); lo_address a = lo_address_new_from_url("osc.udp://224.0.1.3:7570"); lo_address_set_ttl(a, 1); lo_send(a, "/link", "ss", mdev_name(source), mdev_name(destination)); msig_full_name(sendsig, source_name, 1024); msig_full_name(recvsig, destination_name, 1024); lo_send(a, "/connect", "ssss", source_name, destination_name, "@mode", "reverse"); lo_address_free(a); } while (i >= 0 && !done) { msig_update_float(recvsig, ((i % 10) * 1.0f)); printf("\ndestination value updated to %f -->\n", (i % 10) * 1.0f); mdev_poll(destination, 1); mdev_poll(source, 100); i++; } }
void connect_signals() { char source_name[1024], destination_name[1024]; printf("%s\n", mdev_name(source)); printf("%s\n", mdev_name(destination)); lo_address a = lo_address_new_from_url("osc.udp://224.0.1.3:7570"); lo_address_set_ttl(a, 1); lo_send(a, "/link", "ss", mdev_name(source), mdev_name(destination)); // wait for link to be processed int j = 50; while (j >= 0) { mdev_poll(source, 10); mdev_poll(destination, 10); j--; } msig_full_name(sendsig, source_name, 1024); msig_full_name(recvsig, destination_name, 1024); lo_send(a, "/connect", "ssssss", source_name, destination_name, "@mode", "expression", "@expression", "y=y{-1}+1"); lo_address_free(a); // wait for connection to be processed j = 50; while (j >= 0) { mdev_poll(source, 10); mdev_poll(destination, 10); j--; } }
void test_multicast(lo_server_thread st) { /* test multicast server and sender */ /* message is sent from st otherwise reply doesn't work */ lo_server ms = lo_server_new_multicast("224.0.1.1", "15432", error); lo_address ma = lo_address_new("224.0.1.1", "15432"); lo_address_set_ttl(ma, 1); lo_server_add_method(ms, "/foo/bar", "fi", foo_handler, ms); lo_server_add_method(ms, "/reply", "s", reply_handler, NULL); if (lo_send_from(ma, lo_server_thread_get_server(st), LO_TT_IMMEDIATE, "/foo/bar", "ff", 0.12345678f, 23.0f) == -1) { printf("multicast send error %d: %s\n", lo_address_errno(ma), lo_address_errstr(ma)); exit(1); } TEST(lo_server_recv(ms)==24); lo_server_free(ms); lo_address_free(ma); }
void loop() { printf("-------------------- GO ! --------------------\n"); int i = 0, j = 0, count; if (automate) { char source_name[1024], destination_name[1024]; printf("%s\n", mdev_name(source)); printf("%s\n", mdev_name(destination)); lo_address a = lo_address_new_from_url("osc.udp://224.0.1.3:7570"); lo_address_set_ttl(a, 1); lo_send(a, "/link", "ss", mdev_name(source), mdev_name(destination)); for (int i = 0; i < 4; i++) { msig_full_name(sendsig[i], source_name, 1024); msig_full_name(recvsig[i], destination_name, 1024); lo_send(a, "/connect", "ss", source_name, destination_name); } lo_address_free(a); } while (i >= 0 && !done) { for (j = 0; j < 4; j++) { msig_update_float(recvsig[j], ((i % 10) * 1.0f)); } printf("\ndestination values updated to %d -->\n", i % 10); for (j = 0; j < 4; j++) { count = msig_query_remote(sendsig[j], dummysig[j]); printf("Sent %i queries for sendsig[%i]\n", count, j); } mdev_poll(destination, 100); mdev_poll(source, 0); i++; usleep(500 * 1000); } }
void loop() { printf("-------------------- GO ! --------------------\n"); int i = 0; if (automate) { char source_name_1[1024], destination_name_1[1024]; char source_name_2[1024], destination_name_2[1024]; printf("%s\n", mdev_name(source)); printf("%s\n", mdev_name(destination)); lo_address a = lo_address_new_from_url("osc.udp://224.0.1.3:7570"); lo_address_set_ttl(a, 1); lo_send(a, "/link", "ss", mdev_name(source), mdev_name(destination)); msig_full_name(sendsig_1, source_name_1, 1024); msig_full_name(recvsig_1, destination_name_1, 1024); lo_send(a, "/connect", "ss", source_name_1, destination_name_1); msig_full_name(sendsig_2, source_name_2, 1024); msig_full_name(recvsig_2, destination_name_2, 1024); lo_send(a, "/connect", "ss", source_name_2, destination_name_2); lo_address_free(a); } while (i >= 0 && !done) { mdev_poll(source, 0); msig_update_float(source->outputs[0], ((i % 10) * 1.0f)); msig_update_float(source->outputs[1], ((i % 10) * 1.0f)); printf("source value updated to %d -->\n", i % 10); printf("Received %i messages.\n\n", mdev_poll(destination, 100)); i++; } }
// ********************************************************* // -(new)--------------------------------------------------- void *oscmulticast_new(t_symbol *s, int argc, t_atom *argv) { t_oscmulticast *x = NULL; int i, got_port = 0; char address[64]; #ifdef MAXMSP if ((x = object_alloc(oscmulticast_class))) { x->outlet3 = listout((t_object *)x); x->outlet2 = listout((t_object *)x); x->outlet1 = listout((t_object *)x); #else if (x = (t_oscmulticast *) pd_new(oscmulticast_class)) { x->outlet1 = outlet_new(&x->ob, gensym("list")); x->outlet2 = outlet_new(&x->ob, gensym("list")); x->outlet3 = outlet_new(&x->ob, gensym("list")); #endif x->group = NULL; x->iface = NULL; if (argc < 4) { post("oscmulticast: not enough arguments!\n"); return NULL; } for (i = 0; i < argc; i++) { if(strcmp(maxpd_atom_get_string(argv+i), "@group") == 0) { if ((argv+i+1)->a_type == A_SYM) { x->group = strdup(maxpd_atom_get_string(argv+i+1)); i++; } } else if (strcmp(maxpd_atom_get_string(argv+i), "@port") == 0) { if ((argv+i+1)->a_type == A_FLOAT) { snprintf(x->port, 10, "%i", (int)maxpd_atom_get_float(argv+i+1)); got_port = 1; i++; } #ifdef MAXMSP else if ((argv+i+1)->a_type == A_LONG) { snprintf(x->port, 10, "%i", (int)atom_getlong(argv+i+1)); got_port = 1; i++; } #endif } else if(strcmp(maxpd_atom_get_string(argv+i), "@interface") == 0) { if ((argv+i+1)->a_type == A_SYM) { x->iface = strdup(maxpd_atom_get_string(argv+i+1)); i++; } } } if (!x->group || !got_port) { post("oscmulticast: need to specify group and port!"); return NULL; } /* Open address */ snprintf(address, 64, "osc.udp://%s:%s", x->group, x->port); x->address = lo_address_new_from_url(address); if (!x->address) { post("oscmulticast: could not create lo_address."); return NULL; } /* Set TTL for packet to 1 -> local subnet */ lo_address_set_ttl(x->address, 1); /* Specify the interface to use for multicasting */ if (x->iface) { if (lo_address_set_iface(x->address, x->iface, 0)) { post("oscmulticast: could not create lo_address."); return NULL; } x->server = lo_server_new_multicast_iface(x->group, x->port, x->iface, 0, 0); } else { x->server = lo_server_new_multicast(x->group, x->port, 0); } if (!x->server) { post("oscmulticast: could not create lo_server"); lo_address_free(x->address); return NULL; } // Disable liblo message queueing lo_server_enable_queue(x->server, 0, 1); if (x->iface) post("oscmulticast: using interface %s", lo_address_get_iface(x->address)); else post("oscmulticast: using default interface"); lo_server_add_method(x->server, NULL, NULL, oscmulticast_handler, x); #ifdef MAXMSP x->clock = clock_new(x, (method)oscmulticast_poll); // Create the timing clock #else x->clock = clock_new(x, (t_method)oscmulticast_poll); #endif clock_delay(x->clock, INTERVAL); // Set clock to go off after delay } return (x); } // ********************************************************* // -(free)-------------------------------------------------- void oscmulticast_free(t_oscmulticast *x) { if (x->clock) { clock_unset(x->clock); // Remove clock routine from the scheduler clock_free(x->clock); // Frees memory used by clock } if (x->server) { lo_server_free(x->server); } if (x->address) { lo_address_free(x->address); } if (x->iface) { free(x->iface); } if (x->group) { free(x->group); } } // ********************************************************* // -(inlet/outlet assist - maxmsp only)--------------------- #ifdef MAXMSP void oscmulticast_assist(t_oscmulticast *x, void *b, long m, long a, char *s) { if (m == ASSIST_INLET) { // inlet sprintf(s, "OSC to be sent to multicast bus"); } else { // outlet sprintf(s, "OSC from multicast bus"); } } #endif // ********************************************************* // -(interface)--------------------------------------------- static void oscmulticast_interface(t_oscmulticast *x, t_symbol *s, int argc, t_atom *argv) { const char *iface = 0; if (argc < 1) return; if (argv->a_type != A_SYM) return; iface = maxpd_atom_get_string(argv); if (lo_address_set_iface(x->address, iface, 0)) { post("oscmulticast: could not create lo_address."); return; } if (x->server) lo_server_free(x->server); x->server = lo_server_new_multicast_iface(x->group, x->port, iface, 0, 0); if (!x->server) { post("oscmulticast: could not create lo_server"); return; } post("oscmulticast: using interface %s", lo_address_get_iface(x->address)); lo_server_add_method(x->server, NULL, NULL, oscmulticast_handler, x); } // ********************************************************* // -(anything)---------------------------------------------- void oscmulticast_anything(t_oscmulticast *x, t_symbol *s, int argc, t_atom *argv) { lo_message m = lo_message_new(); if (!m) { post("lo_message_new() error"); return; } int i; for (i=0; i<argc; i++) { switch ((argv + i)->a_type) { case A_FLOAT: lo_message_add_float(m, atom_getfloat(argv + i)); break; #ifdef MAXMSP case A_LONG: lo_message_add_int32(m, (int)atom_getlong(argv + i)); break; #endif case A_SYM: lo_message_add_string(m, maxpd_atom_get_string(argv + i)); break; } } //set timetag? lo_send_message(x->address, s->s_name, m); lo_message_free(m); }