1use 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 pub signature: u16,
31 pub r#type: V5VisionBlockType,
33 pub xoffset: u16,
35 pub yoffset: u16,
37 pub width: u16,
39 pub height: u16,
41 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}