1use core::ffi::c_double;
4
5use crate::{map_jump_table, 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
38map_jump_table! {
39 0x528 => pub fn vexDeviceOpticalHueGet(device: V5_DeviceT) -> c_double,
40 0x52c => pub fn vexDeviceOpticalSatGet(device: V5_DeviceT) -> c_double,
41 0x530 => pub fn vexDeviceOpticalBrightnessGet(device: V5_DeviceT) -> c_double,
42 0x534 => pub fn vexDeviceOpticalProximityGet(device: V5_DeviceT) -> i32,
43 0x538 => pub fn vexDeviceOpticalRgbGet(device: V5_DeviceT, data: *mut V5_DeviceOpticalRgb),
44 0x53c => pub fn vexDeviceOpticalLedPwmSet(device: V5_DeviceT, value: i32),
45 0x540 => pub fn vexDeviceOpticalLedPwmGet(device: V5_DeviceT) -> i32,
46 0x544 => pub fn vexDeviceOpticalStatusGet(device: V5_DeviceT) -> u32,
47 0x548 => pub fn vexDeviceOpticalRawGet(device: V5_DeviceT, data: *mut V5_DeviceOpticalRaw),
48 0x550 => pub fn vexDeviceOpticalModeSet(device: V5_DeviceT, mode: u32),
49 0x554 => pub fn vexDeviceOpticalModeGet(device: V5_DeviceT) -> u32,
50 0x558 => pub fn vexDeviceOpticalGestureGet(device: V5_DeviceT, pData: *mut V5_DeviceOpticalGesture) -> u32,
51 0x55c => pub fn vexDeviceOpticalGestureEnable(device: V5_DeviceT),
52 0x560 => pub fn vexDeviceOpticalGestureDisable(device: V5_DeviceT),
53 0x564 => pub fn vexDeviceOpticalProximityThreshold(device: V5_DeviceT, value: i32),
54 0xb40 => pub fn vexDeviceOpticalIntegrationTimeSet(device: V5_DeviceT, timeMs: c_double),
55 0xb44 => pub fn vexDeviceOpticalIntegrationTimeGet(device: V5_DeviceT) -> c_double,
56}