1use core::ffi::c_double;
4
5use crate::V5_DeviceT;
6
7#[repr(C)]
8#[derive(Default, Debug, Copy, Clone, Eq, PartialEq)]
9pub struct V5_DeviceOpticalRaw {
10 pub clear: u16,
11 pub red: u16,
12 pub green: u16,
13 pub blue: u16,
14}
15
16#[repr(C)]
17#[derive(Default, Debug, Copy, Clone, PartialEq)]
18pub struct V5_DeviceOpticalRgb {
19 pub red: c_double,
20 pub green: c_double,
21 pub blue: c_double,
22 pub brightness: c_double,
23}
24
25#[repr(C)]
26#[derive(Default, Debug, Copy, Clone, Eq, PartialEq)]
27pub struct V5_DeviceOpticalGesture {
28 pub udata: u8,
29 pub ddata: u8,
30 pub ldata: u8,
31 pub rdata: u8,
32 pub gesture_type: u8,
33 pub padding: u8,
34 pub count: u16,
35 pub time: u32,
36}
37
38unsafe extern "system" {
39 pub fn vexDeviceOpticalHueGet(device: V5_DeviceT) -> c_double;
40 pub fn vexDeviceOpticalSatGet(device: V5_DeviceT) -> c_double;
41 pub fn vexDeviceOpticalBrightnessGet(device: V5_DeviceT) -> c_double;
42 pub fn vexDeviceOpticalProximityGet(device: V5_DeviceT) -> i32;
43 pub fn vexDeviceOpticalRgbGet(device: V5_DeviceT, data: *mut V5_DeviceOpticalRgb);
44 pub fn vexDeviceOpticalLedPwmSet(device: V5_DeviceT, value: i32);
45 pub fn vexDeviceOpticalLedPwmGet(device: V5_DeviceT) -> i32;
46 pub fn vexDeviceOpticalStatusGet(device: V5_DeviceT) -> u32;
47 pub fn vexDeviceOpticalRawGet(device: V5_DeviceT, data: *mut V5_DeviceOpticalRaw);
48 pub fn vexDeviceOpticalModeSet(device: V5_DeviceT, mode: u32);
49 pub fn vexDeviceOpticalModeGet(device: V5_DeviceT) -> u32;
50 pub fn vexDeviceOpticalGestureGet(
51 device: V5_DeviceT,
52 pData: *mut V5_DeviceOpticalGesture,
53 ) -> u32;
54 pub fn vexDeviceOpticalGestureEnable(device: V5_DeviceT);
55 pub fn vexDeviceOpticalGestureDisable(device: V5_DeviceT);
56 pub fn vexDeviceOpticalProximityThreshold(device: V5_DeviceT, value: i32);
57 pub fn vexDeviceOpticalIntegrationTimeSet(device: V5_DeviceT, timeMs: c_double);
58 pub fn vexDeviceOpticalIntegrationTimeGet(device: V5_DeviceT) -> c_double;
59}