vex_sdk/
optical.rs

1//! V5 Optical Sensor
2
3use 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}