lidar_utils/ouster/
enums.rs

1//! Useful enums for Ouster sensors.
2
3use crate::common::*;
4
5/// The mode includes number of vertical scans in one revolution and rotation frequency (Hz).
6#[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}