You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

57 lines
1.7 KiB
C++

#include <tobii/tobii.h>
#include <tobii/tobii_streams.h>
#include <stdio.h>
#include <assert.h>
#include <cstring>
void gaze_point_callback(tobii_gaze_point_t const *gaze_point, void *user_data) {
if (gaze_point->validity == TOBII_VALIDITY_VALID)
printf("Gaze point: %f, %f\n",
gaze_point->position_xy[0],
gaze_point->position_xy[1]);
}
static void url_receiver(char const *url, void *user_data) {
char *buffer = (char *) user_data;
if (*buffer != '\0') return; // only keep first value
if (strlen(url) < 256)
strcpy(buffer, url);
}
int main() {
tobii_api_t *api;
tobii_error_t error = tobii_api_create(&api, NULL, NULL);
assert(error == TOBII_ERROR_NO_ERROR);
char url[256] = {0};
error = tobii_enumerate_local_device_urls(api, url_receiver, url);
assert(error == TOBII_ERROR_NO_ERROR && *url != '\0');
tobii_device_t *device;
error = tobii_device_create(api, url, &device);
assert(error == TOBII_ERROR_NO_ERROR);
error = tobii_gaze_point_subscribe(device, gaze_point_callback, 0);
assert(error == TOBII_ERROR_NO_ERROR);
int is_running = 1000; // in this sample, exit after some iterations
while (--is_running > 0) {
error = tobii_wait_for_callbacks(1, &device);
assert(error == TOBII_ERROR_NO_ERROR || error == TOBII_ERROR_TIMED_OUT);
error = tobii_device_process_callbacks(device);
assert(error == TOBII_ERROR_NO_ERROR);
}
error = tobii_gaze_point_unsubscribe(device);
assert(error == TOBII_ERROR_NO_ERROR);
error = tobii_device_destroy(device);
assert(error == TOBII_ERROR_NO_ERROR);
error = tobii_api_destroy(api);
assert(error == TOBII_ERROR_NO_ERROR);
return 0;
}