1use crate::common::*;
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
7pub enum LidarMode {
8 #[serde(rename = "512x10")]
9 Mode512x10,
10 #[serde(rename = "512x20")]
11 Mode512x20,
12 #[serde(rename = "1024x10")]
13 Mode1024x10,
14 #[serde(rename = "1024x20")]
15 Mode1024x20,
16 #[serde(rename = "2048x10")]
17 Mode2048x10,
18}
19
20impl LidarMode {
21 pub fn columns_per_revolution(&self) -> u16 {
22 use LidarMode::*;
23 match self {
24 Mode512x10 | Mode512x20 => 512,
25 Mode1024x10 | Mode1024x20 => 1024,
26 Mode2048x10 => 2048,
27 }
28 }
29}
30
31impl Display for LidarMode {
32 fn fmt(&self, formatter: &mut Formatter<'_>) -> fmt::Result {
33 use LidarMode::*;
34 let text = match self {
35 Mode512x10 => "512x10",
36 Mode512x20 => "512x20",
37 Mode1024x10 => "1024x10",
38 Mode1024x20 => "1024x20",
39 Mode2048x10 => "2048x10",
40 };
41 write!(formatter, "{}", text)
42 }
43}
44
45#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
46pub enum MultipurposeIoMode {
47 #[serde(rename = "OUTPUT_FROM_INTERNAL_OSC")]
48 OutputFromInternalOsc,
49 #[serde(rename = "OUTPUT_FROM_SYNC_PULSE_IN")]
50 OutputFromSyncPulseIn,
51 #[serde(rename = "OUTPUT_FROM_PTP_1588")]
52 OutputFromPtp1588,
53 #[serde(rename = "OFF")]
54 Off,
55}
56
57impl Display for MultipurposeIoMode {
58 fn fmt(&self, formatter: &mut Formatter<'_>) -> fmt::Result {
59 use MultipurposeIoMode::*;
60 let text = match self {
61 OutputFromInternalOsc => "OUTPUT_FROM_INTERNAL_OSC",
62 OutputFromSyncPulseIn => "OUTPUT_FROM_SYNC_PULSE_IN",
63 OutputFromPtp1588 => "OUTPUT_FROM_PTP1588",
64 Off => "OFF",
65 };
66 write!(formatter, "{}", text)
67 }
68}
69
70#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
71pub enum TimestampMode {
72 #[serde(rename = "TIME_FROM_INTERNAL_OSC")]
73 TimeFromInternalOsc,
74 #[serde(rename = "TIME_FROM_PTP_1588")]
75 TimeFromPtp1588,
76 #[serde(rename = "TIME_FROM_SYNC_PULSE_IN")]
77 TimeFromSyncPulseIn,
78}
79
80impl Display for TimestampMode {
81 fn fmt(&self, formatter: &mut Formatter<'_>) -> fmt::Result {
82 use TimestampMode::*;
83 let text = match self {
84 TimeFromInternalOsc => "TIME_FROM_INTERNAL_OSC",
85 TimeFromPtp1588 => "TIME_FROM_PTP1588",
86 TimeFromSyncPulseIn => "TIME_FROM_SYNC_PULSE_IN",
87 };
88 write!(formatter, "{}", text)
89 }
90}
91
92#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
93pub enum Polarity {
94 #[serde(rename = "ACTIVE_HIGH")]
95 ActiveHigh,
96 #[serde(rename = "ACTIVE_LOW")]
97 ActiveLow,
98}
99
100impl Display for Polarity {
101 fn fmt(&self, formatter: &mut Formatter<'_>) -> fmt::Result {
102 use Polarity::*;
103 let text = match self {
104 ActiveHigh => "ACTIVE_HIGH",
105 ActiveLow => "ACTIVE_LOW",
106 };
107 write!(formatter, "{}", text)
108 }
109}
110
111#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
112pub enum OnOffMode {
113 #[serde(rename = "ON")]
114 On,
115 #[serde(rename = "OFF")]
116 Off,
117}
118
119impl Display for OnOffMode {
120 fn fmt(&self, formatter: &mut Formatter<'_>) -> fmt::Result {
121 use OnOffMode::*;
122 let text = match self {
123 On => "ON",
124 Off => "OFF",
125 };
126 write!(formatter, "{}", text)
127 }
128}
129
130#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
131pub enum NmeaBaudRate {
132 #[serde(rename = "BAUD_9600")]
133 Baud9600,
134 #[serde(rename = "BAUD_115200")]
135 Baud115200,
136}
137
138impl Display for NmeaBaudRate {
139 fn fmt(&self, formatter: &mut Formatter<'_>) -> fmt::Result {
140 use NmeaBaudRate::*;
141 let text = match self {
142 Baud9600 => "BAUD_9600",
143 Baud115200 => "BAUD_115200",
144 };
145 write!(formatter, "{}", text)
146 }
147}