void printdevice(mapper_db_device dev) { printf(" %s", dev->name); int i=0; const char *key; char type; const void *val; int length; while(!mapper_db_device_property_index(dev, i++, &key, &type, &val, &length)) { die_unless(val!=0, "returned zero value\n"); // already printed this if (strcmp(key, "name")==0) continue; if (strcmp(key, "synced")==0) { // check current time mapper_timetag_t now; mapper_monitor_now(mon, &now); mapper_timetag_t *tt = (mapper_timetag_t *)val; if (tt->sec == 0) printf(", seconds_since_sync=unknown"); else printf(", seconds_since_sync=%f", mapper_timetag_difference(now, *tt)); } else if (length) { printf(", %s=", key); mapper_prop_pp(type, length, val); } } printf("\n"); }
void loop() { int i = 0; printf("Loading devices...\n"); while (i >= 0 && !done) { for (i=0; i<5; i++) mdev_poll(devices[i], 0); lo_timetag_now(&system_time); if (system_time.sec != last_update) { last_update = system_time.sec; if (ready) { for (i=0; i<5; i++) { mdev_timetag_now(devices[i], &device_times[i]); } // calculate standard deviation double mean = 0; for (i=0; i<5; i++) { mean += mapper_timetag_get_double(device_times[i]); } mean /= 5; double difference_aggregate = 0; for (i=0; i<5; i++) { difference_aggregate += powf(mapper_timetag_get_double(device_times[i]) - mean, 2); } // print current system time and device diffs printf("%f", (double)system_time.sec + (double)system_time.frac * 0.00000000023283064365); for (i=0; i<5; i++) { printf(" | %f", mapper_timetag_difference(system_time, device_times[i])); } printf(" | %f", sqrtf(difference_aggregate / 5)); printf("\n"); } else { int count = 0; for (i=0; i<5; i++) { count += mdev_ready(devices[i]); } if (count >= 5) { printf("\nSYSTEM TIME ***** | OFFSETS *****\n"); for (i=0; i<5; i++) { // Give each device clock a random starting offset devices[i]->admin->clock.offset = (rand() % 100) - 50; } ready = 1; } } } usleep(10 * 1000); } }