Exemple #1
0
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");
}
Exemple #2
0
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);
    }
}