vex_sdk/
vision.rs

1//! V5 Vision Sensor
2
3use crate::V5_DeviceT;
4
5#[repr(transparent)]
6#[derive(Default, Debug, Copy, Clone, Eq, PartialEq)]
7pub struct V5VisionMode(pub core::ffi::c_uchar);
8
9impl V5VisionMode {
10    pub const kVisionModeNormal: Self = Self(0);
11    pub const kVisionModeMixed: Self = Self(1);
12    pub const kVisionModeLineDetect: Self = Self(2);
13    pub const kVisionTypeTest: Self = Self(3);
14}
15
16#[repr(transparent)]
17#[derive(Default, Debug, Copy, Clone, Eq, PartialEq)]
18pub struct V5VisionBlockType(pub core::ffi::c_uchar);
19
20impl V5VisionBlockType {
21    pub const kVisionTypeNormal: Self = Self(0);
22    pub const kVisionTypeColorCode: Self = Self(1);
23    pub const kVisionTypeLineDetect: Self = Self(2);
24}
25
26#[repr(C, packed)]
27#[derive(Default, Debug, Copy, Clone, Eq, PartialEq)]
28pub struct V5_DeviceVisionObject {
29    /// block signature
30    pub signature: u16,
31    /// block type
32    pub r#type: V5VisionBlockType,
33    /// left side of block
34    pub xoffset: u16,
35    /// top of block
36    pub yoffset: u16,
37    /// width of block
38    pub width: u16,
39    /// height of block
40    pub height: u16,
41    /// angle of CC block in 0.1 deg units
42    pub angle: u16,
43}
44
45#[repr(C, packed)]
46#[derive(Default, Debug, Copy, Clone, PartialEq)]
47pub struct V5_DeviceVisionSignature {
48    pub id: u8,
49    pub flags: u8,
50    pub pad: [u8; 2],
51    pub range: f32,
52    pub uMin: i32,
53    pub uMax: i32,
54    pub uMean: i32,
55    pub vMin: i32,
56    pub vMax: i32,
57    pub vMean: i32,
58    pub mRgb: u32,
59    pub mType: u32,
60}
61
62#[repr(transparent)]
63#[derive(Default, Debug, Copy, Clone, Eq, PartialEq)]
64pub struct V5VisionWBMode(pub core::ffi::c_uchar);
65
66impl V5VisionWBMode {
67    pub const kVisionWBNormal: Self = Self(0);
68    pub const kVisionWBStart: Self = Self(1);
69    pub const kVisionWBManual: Self = Self(2);
70}
71
72#[repr(C, packed)]
73#[derive(Default, Debug, Copy, Clone, Eq, PartialEq)]
74pub struct V5_DeviceVisionRgb {
75    pub red: u8,
76    pub green: u8,
77    pub blue: u8,
78    pub brightness: u8,
79}
80
81#[repr(transparent)]
82#[derive(Default, Debug, Copy, Clone, Eq, PartialEq)]
83pub struct V5VisionLedMode(pub core::ffi::c_uchar);
84
85impl V5VisionLedMode {
86    pub const kVisionLedModeAuto: Self = Self(0);
87    pub const kVisionLedModeManual: Self = Self(1);
88}
89
90#[repr(transparent)]
91#[derive(Default, Debug, Copy, Clone, Eq, PartialEq)]
92pub struct V5VisionWifiMode(pub core::ffi::c_uchar);
93
94impl V5VisionWifiMode {
95    pub const kVisionWifiModeOff: Self = Self(0);
96    pub const kVisionWifiModeOn: Self = Self(1);
97}
98
99unsafe extern "system" {
100    pub fn vexDeviceVisionModeSet(device: V5_DeviceT, mode: V5VisionMode);
101    pub fn vexDeviceVisionModeGet(device: V5_DeviceT) -> V5VisionMode;
102    pub fn vexDeviceVisionObjectCountGet(device: V5_DeviceT) -> i32;
103    pub fn vexDeviceVisionObjectGet(
104        device: V5_DeviceT,
105        index: u32,
106        object: *mut V5_DeviceVisionObject,
107    ) -> i32;
108    pub fn vexDeviceVisionSignatureSet(
109        device: V5_DeviceT,
110        signature: *mut V5_DeviceVisionSignature,
111    );
112    pub fn vexDeviceVisionSignatureGet(
113        device: V5_DeviceT,
114        id: u32,
115        signature: *mut V5_DeviceVisionSignature,
116    ) -> bool;
117    pub fn vexDeviceVisionBrightnessSet(device: V5_DeviceT, percent: u8);
118    pub fn vexDeviceVisionBrightnessGet(device: V5_DeviceT) -> u8;
119    pub fn vexDeviceVisionWhiteBalanceModeSet(device: V5_DeviceT, mode: V5VisionWBMode);
120    pub fn vexDeviceVisionWhiteBalanceModeGet(device: V5_DeviceT) -> V5VisionWBMode;
121    pub fn vexDeviceVisionWhiteBalanceSet(device: V5_DeviceT, color: V5_DeviceVisionRgb);
122    pub fn vexDeviceVisionWhiteBalanceGet(device: V5_DeviceT) -> V5_DeviceVisionRgb;
123    pub fn vexDeviceVisionLedModeSet(device: V5_DeviceT, mode: V5VisionLedMode);
124    pub fn vexDeviceVisionLedModeGet(device: V5_DeviceT) -> V5VisionLedMode;
125    pub fn vexDeviceVisionLedBrigntnessSet(device: V5_DeviceT, percent: u8);
126    pub fn vexDeviceVisionLedBrigntnessGet(device: V5_DeviceT) -> u8;
127    pub fn vexDeviceVisionLedColorSet(device: V5_DeviceT, color: V5_DeviceVisionRgb);
128    pub fn vexDeviceVisionLedColorGet(device: V5_DeviceT) -> V5_DeviceVisionRgb;
129    pub fn vexDeviceVisionWifiModeSet(device: V5_DeviceT, mode: V5VisionWifiMode);
130    pub fn vexDeviceVisionWifiModeGet(device: V5_DeviceT) -> V5VisionWifiMode;
131}