vex_sdk/
optical.rs

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