1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
/*
* OpenHMD - Free and Open Source API and drivers for immersive technology.
* Copyright (C) 2013 Fredrik Hultin.
* Copyright (C) 2013 Jakob Bornecrantz.
* Distributed under the Boost 1.0 licence, see LICENSE for full text.
*/
/* Simple Test */
#include <openhmd.h>
#include <stdio.h>
void ohmd_sleep(double);
// gets float values from the device and prints them
void print_infof(ohmd_device* hmd, const char* name, int len, ohmd_float_value val)
{
float f[len];
ohmd_device_getf(hmd, val, f);
printf("%-20s", name);
for(int i = 0; i < len; i++)
printf("%f ", f[i]);
printf("\n");
}
int main(int argc, char** argv)
{
ohmd_context* ctx = ohmd_ctx_create();
// Probe for devices
int num_devices = ohmd_ctx_probe(ctx);
if(num_devices < 0){
printf("failed to probe devices: %s\n", ohmd_ctx_get_error(ctx));
return -1;
}
printf("num devices: %d\n\n", num_devices);
// Print device information
for(int i = 0; i < num_devices; i++){
printf("device %d\n", i);
printf(" vendor: %s\n", ohmd_list_gets(ctx, i, OHMD_VENDOR));
printf(" product: %s\n", ohmd_list_gets(ctx, i, OHMD_PRODUCT));
printf(" path: %s\n\n", ohmd_list_gets(ctx, i, OHMD_PATH));
}
// Open default device (0)
ohmd_device* hmd = ohmd_list_open_device(ctx, 0);
if(!hmd){
printf("failed to open device: %s\n", ohmd_ctx_get_error(ctx));
return -1;
}
// Print hardware information for the opened device
int ivals[2];
ohmd_device_geti(hmd, OHMD_SCREEN_HORIZONTAL_RESOLUTION, ivals);
ohmd_device_geti(hmd, OHMD_SCREEN_VERTICAL_RESOLUTION, ivals + 1);
printf("resolution: %i x %i\n", ivals[0], ivals[1]);
print_infof(hmd, "hsize:", 1, OHMD_SCREEN_HORIZONTAL_SIZE);
print_infof(hmd, "vsize:", 1, OHMD_SCREEN_VERTICAL_SIZE);
print_infof(hmd, "lens separation:", 1, OHMD_LENS_HORIZONTAL_SEPARATION);
print_infof(hmd, "lens vcenter:", 1, OHMD_LENS_VERTICAL_POSITION);
print_infof(hmd, "left eye fov:", 1, OHMD_LEFT_EYE_FOV);
print_infof(hmd, "right eye fov:", 1, OHMD_RIGHT_EYE_FOV);
print_infof(hmd, "left eye aspect:", 1, OHMD_LEFT_EYE_ASPECT_RATIO);
print_infof(hmd, "right eye aspect:", 1, OHMD_RIGHT_EYE_ASPECT_RATIO);
print_infof(hmd, "distortion k:", 6, OHMD_DISTORTION_K);
printf("\n");
// Ask for n rotation quaternions
for(int i = 0; i < 10000; i++){
ohmd_ctx_update(ctx);
print_infof(hmd, "rotation quat:", 4, OHMD_ROTATION_QUAT);
ohmd_sleep(.01);
}
ohmd_ctx_destroy(ctx);
return 0;
}
|