vex_sdk/
vision.rs

1//! V5 Vision Sensor
2
3use crate::{map_jump_table, 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
99map_jump_table! {
100    0x398 => pub fn vexDeviceVisionModeSet(device: V5_DeviceT, mode: V5VisionMode),
101    0x39c => pub fn vexDeviceVisionModeGet(device: V5_DeviceT) -> V5VisionMode,
102    0x3a0 => pub fn vexDeviceVisionObjectCountGet(device: V5_DeviceT) -> i32,
103    0x3a4 => pub fn vexDeviceVisionObjectGet(device: V5_DeviceT, index: u32, object: *mut V5_DeviceVisionObject) -> i32,
104    0x3a8 => pub fn vexDeviceVisionSignatureSet(device: V5_DeviceT, signature: *mut V5_DeviceVisionSignature),
105    0x3ac => pub fn vexDeviceVisionSignatureGet(device: V5_DeviceT, id: u32, signature: *mut V5_DeviceVisionSignature) -> bool,
106    0x3c0 => pub fn vexDeviceVisionBrightnessSet(device: V5_DeviceT, percent: u8),
107    0x3c4 => pub fn vexDeviceVisionBrightnessGet(device: V5_DeviceT) -> u8,
108    0x3c8 => pub fn vexDeviceVisionWhiteBalanceModeSet(device: V5_DeviceT, mode: V5VisionWBMode),
109    0x3cc => pub fn vexDeviceVisionWhiteBalanceModeGet(device: V5_DeviceT) -> V5VisionWBMode,
110    0x3c0 => pub fn vexDeviceVisionWhiteBalanceSet(device: V5_DeviceT, color: V5_DeviceVisionRgb),
111    0x3c4 => pub fn vexDeviceVisionWhiteBalanceGet(device: V5_DeviceT) -> V5_DeviceVisionRgb,
112    0x3c8 => pub fn vexDeviceVisionLedModeSet(device: V5_DeviceT, mode: V5VisionLedMode),
113    0x3cc => pub fn vexDeviceVisionLedModeGet(device: V5_DeviceT) -> V5VisionLedMode,
114    0x3d0 => pub fn vexDeviceVisionLedBrigntnessSet(device: V5_DeviceT, percent: u8),
115    0x3d4 => pub fn vexDeviceVisionLedBrigntnessGet(device: V5_DeviceT) -> u8,
116    0x3d8 => pub fn vexDeviceVisionLedColorSet(device: V5_DeviceT, color: V5_DeviceVisionRgb),
117    0x3dc => pub fn vexDeviceVisionLedColorGet(device: V5_DeviceT) -> V5_DeviceVisionRgb,
118    0x3e0 => pub fn vexDeviceVisionWifiModeSet(device: V5_DeviceT, mode: V5VisionWifiMode),
119    0x3e4 => pub fn vexDeviceVisionWifiModeGet(device: V5_DeviceT) -> V5VisionWifiMode,
120}