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
extern crate libc;
use libc::{c_char, c_int, c_float, c_void};
#[repr(C)]
pub struct ohmd_context {
    __private: c_void
}
#[repr(C)]
pub struct ohmd_device {
    __private: c_void
}

#[repr(C)]
#[allow(non_camel_case_types)]
#[derive(Clone, Copy)]
pub enum ohmd_float_value{
    OHMD_ROTATION_QUAT = 1,
    OHMD_LEFT_EYE_GL_MODELVIEW_MATRIX = 2,
    OHMD_RIGHT_EYE_GL_MODELVIEW_MATRIX = 3,
    OHMD_LEFT_EYE_GL_PROJECTION_MATRIX = 4,
    OHMD_RIGHT_EYE_GL_PROJECTION_MATRIX = 5,
    OHMD_POSITION_VECTOR = 6,
    OHMD_SCREEN_HORIZONTAL_SIZE = 7,
    OHMD_SCREEN_VERTICAL_SIZE = 8,
    OHMD_LENS_HORIZONTAL_SEPARATION = 9,
    OHMD_LENS_VERTICAL_POSITION = 10,
    OHMD_LEFT_EYE_FOV = 11,
    OHMD_LEFT_EYE_ASPECT_RATIO = 12,
    OHMD_RIGHT_EYE_FOV = 13,
    OHMD_RIGHT_EYE_ASPECT_RATIO = 14,
    OHMD_EYE_IPD = 15,
    OHMD_PROJECTION_ZFAR = 16,
    OHMD_PROJECTION_ZNEAR = 17,
    OHMD_DISTORTION_K = 18
}

#[repr(C)]
#[allow(non_camel_case_types)]
#[derive(Clone, Copy)]
pub enum ohmd_string_value{
    OHMD_VENDOR = 0,
    OHMD_PRODUCT = 1,
    OHMD_PATH = 2
}

#[repr(C)]
#[allow(non_camel_case_types)]
#[derive(Clone, Copy)]
pub enum ohmd_int_value{
    OHMD_SCREEN_HORIZONTAL_RESOLUTION = 0,
    OHMD_SCREEN_VERTICAL_RESOLUTION = 1
}
#[link(name = "openhmd")]
extern {
    pub fn ohmd_ctx_create() -> &'static ohmd_context;
    pub fn ohmd_ctx_destroy(ctx: &ohmd_context);
    pub fn ohmd_ctx_get_error(ctx: &ohmd_context) -> *const c_char;
    pub fn ohmd_ctx_probe(ctx: &ohmd_context) -> c_int;
    pub fn ohmd_ctx_update(ctx: &ohmd_context);
    pub fn ohmd_device_getf(device: &ohmd_device, otype: ohmd_float_value, out: &mut [c_float; 16]) -> c_int;
    pub fn ohmd_device_setf(device: &ohmd_device, otype: ohmd_float_value, float: &[c_float; 16]) -> c_int;
    pub fn ohmd_list_open_device(ctx: &ohmd_context, index: c_int) -> &'static ohmd_device;
    pub fn ohmd_list_gets(ctx: &ohmd_context, index: c_int, otype: ohmd_string_value) -> *const c_char;
    pub fn ohmd_device_geti(device: &ohmd_device, otype: ohmd_int_value, out: &mut [c_int; 1]) -> c_int;
    pub fn ohmd_close_device(device: &ohmd_device) -> c_int;
}