remote_id/data/
basic_id.rs

1use crate::MAX_ID_BYTE_SIZE;
2
3pub const MESSAGE_TYPE: u8 = 0;
4
5#[derive(Debug, Clone, PartialEq)]
6pub struct BasicId {
7    pub id_type: IdType,
8    pub ua_type: UAType,
9    pub uas_id: [u8; MAX_ID_BYTE_SIZE],
10}
11
12#[derive(Debug, Copy, Clone, PartialEq)]
13pub enum IdType {
14    None = 0,
15    /// ANSI/CTA-2063-A
16    SerialNumber = 1,
17    CaaRegistrationId = 2,
18    UtmAssignedId = 3,
19    SpecificSessionId = 4,
20}
21
22impl From<u8> for IdType {
23    fn from(value: u8) -> Self {
24        match value {
25            0 => IdType::None,
26            1 => IdType::SerialNumber,
27            2 => IdType::CaaRegistrationId,
28            3 => IdType::UtmAssignedId,
29            4 => IdType::SpecificSessionId,
30
31            _ => IdType::None,
32        }
33    }
34}
35
36impl From<IdType> for u8 {
37    fn from(val: IdType) -> Self {
38        match val {
39            IdType::None => 0,
40            IdType::SerialNumber => 1,
41            IdType::CaaRegistrationId => 2,
42            IdType::UtmAssignedId => 3,
43            IdType::SpecificSessionId => 4,
44        }
45    }
46}
47
48#[derive(Debug, Copy, Clone, PartialEq)]
49pub enum UAType {
50    None = 0,
51    Aeroplane = 1,
52    HelicopterOrMultirotor = 2,
53    Gyroplane = 3,
54    HybridLift = 4,
55    Ornithopter = 5,
56    Glider = 6,
57    Kite = 7,
58    FreeBalloon = 8,
59    CaptiveBalloon = 9,
60    Airship = 10,
61    FreeFallParachute = 11,
62    Rocket = 12,
63    TetheredPoweredAircraft = 13,
64    GroundObstacle = 14,
65    Other = 15,
66}
67
68impl From<u8> for UAType {
69    fn from(value: u8) -> Self {
70        match value {
71            0 => UAType::None,
72            1 => UAType::Aeroplane,
73            2 => UAType::HelicopterOrMultirotor,
74            3 => UAType::Gyroplane,
75            4 => UAType::HybridLift,
76            5 => UAType::Ornithopter,
77            6 => UAType::Glider,
78            7 => UAType::Kite,
79            8 => UAType::FreeBalloon,
80            9 => UAType::CaptiveBalloon,
81            10 => UAType::Airship,
82            11 => UAType::FreeFallParachute,
83            12 => UAType::Rocket,
84            13 => UAType::TetheredPoweredAircraft,
85            14 => UAType::GroundObstacle,
86            _ => UAType::Other,
87        }
88    }
89}
90
91impl From<UAType> for u8 {
92    fn from(val: UAType) -> Self {
93        match val {
94            UAType::Aeroplane => 1,
95            UAType::HelicopterOrMultirotor => 2,
96            UAType::Gyroplane => 3,
97            UAType::HybridLift => 4,
98            UAType::Ornithopter => 5,
99            UAType::Glider => 6,
100            UAType::Kite => 7,
101            UAType::FreeBalloon => 8,
102            UAType::CaptiveBalloon => 9,
103            UAType::Airship => 10,
104            UAType::FreeFallParachute => 11,
105            UAType::Rocket => 12,
106            UAType::TetheredPoweredAircraft => 13,
107            UAType::GroundObstacle => 14,
108            UAType::Other => 15,
109
110            UAType::None => 0,
111        }
112    }
113}