|
1 | | -use std::fmt::{Display, Formatter}; |
2 | | - |
3 | 1 | use orb_mcu_interface::orb_messages; |
| 2 | +use std::fmt::{Display, Formatter}; |
4 | 3 |
|
5 | 4 | #[derive(Clone, Debug, Default)] |
6 | 5 | pub struct OrbRevision(pub orb_messages::Hardware); |
7 | 6 |
|
| 7 | +trait OrbVersionFromInt { |
| 8 | + fn from_version_i32(value: i32) -> Self; |
| 9 | +} |
| 10 | +impl OrbVersionFromInt for orb_messages::hardware::OrbVersion { |
| 11 | + fn from_version_i32(value: i32) -> Self { |
| 12 | + match value { |
| 13 | + 1 => orb_messages::hardware::OrbVersion::HwVersionPearlEv1, |
| 14 | + 2 => orb_messages::hardware::OrbVersion::HwVersionPearlEv2, |
| 15 | + 3 => orb_messages::hardware::OrbVersion::HwVersionPearlEv3, |
| 16 | + 4 => orb_messages::hardware::OrbVersion::HwVersionPearlEv4, |
| 17 | + 5 => orb_messages::hardware::OrbVersion::HwVersionPearlEv5, |
| 18 | + 6 => orb_messages::hardware::OrbVersion::HwVersionDiamondPoc1, |
| 19 | + 7 => orb_messages::hardware::OrbVersion::HwVersionDiamondPoc2, |
| 20 | + 8 => orb_messages::hardware::OrbVersion::HwVersionDiamondB3, |
| 21 | + 9 => orb_messages::hardware::OrbVersion::HwVersionDiamondEvt, |
| 22 | + _ => orb_messages::hardware::OrbVersion::HwVersionUnknown, |
| 23 | + } |
| 24 | + } |
| 25 | +} |
| 26 | + |
8 | 27 | impl Display for OrbRevision { |
9 | 28 | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { |
10 | | - if self.0.version |
11 | | - == i32::from(orb_messages::hardware::OrbVersion::HwVersionUnknown) |
12 | | - { |
13 | | - write!(f, "unknown") |
14 | | - } else if self.0.version |
15 | | - < orb_messages::hardware::OrbVersion::HwVersionDiamondPoc1 as i32 |
16 | | - { |
17 | | - write!(f, "EVT{:?}", self.0.version) |
18 | | - } else { |
19 | | - write!( |
20 | | - f, |
21 | | - "Diamond_B{:?}", |
22 | | - self.0.version |
23 | | - - orb_messages::hardware::OrbVersion::HwVersionDiamondPoc1 as i32 |
24 | | - + 1 |
25 | | - ) |
| 29 | + match orb_messages::hardware::OrbVersion::from_version_i32(self.0.version) { |
| 30 | + orb_messages::hardware::OrbVersion::HwVersionUnknown => { |
| 31 | + // from_version_i32 returned unknown but the version might not be 0 |
| 32 | + // meaning it's known by the firmware but not by the current binary |
| 33 | + if self.0.version |
| 34 | + == orb_messages::hardware::OrbVersion::HwVersionUnknown as i32 |
| 35 | + { |
| 36 | + return write!(f, "unknown"); |
| 37 | + } |
| 38 | + |
| 39 | + tracing::error!( |
| 40 | + "A new orb revision might not be implemented by that binary: {:?}.", |
| 41 | + self.0.version |
| 42 | + ); |
| 43 | + |
| 44 | + // let's write if it's a pearl or diamond orb, guessing by the version number |
| 45 | + if self.0.version |
| 46 | + < orb_messages::hardware::OrbVersion::HwVersionDiamondPoc1 as i32 |
| 47 | + { |
| 48 | + write!(f, "Pearl_unknown") |
| 49 | + } else { |
| 50 | + write!(f, "Diamond_unknown") |
| 51 | + } |
| 52 | + } |
| 53 | + orb_messages::hardware::OrbVersion::HwVersionPearlEv1 |
| 54 | + | orb_messages::hardware::OrbVersion::HwVersionPearlEv2 |
| 55 | + | orb_messages::hardware::OrbVersion::HwVersionPearlEv3 |
| 56 | + | orb_messages::hardware::OrbVersion::HwVersionPearlEv4 |
| 57 | + | orb_messages::hardware::OrbVersion::HwVersionPearlEv5 => { |
| 58 | + write!(f, "EVT{:?}", self.0.version) |
| 59 | + } |
| 60 | + orb_messages::hardware::OrbVersion::HwVersionDiamondPoc1 |
| 61 | + | orb_messages::hardware::OrbVersion::HwVersionDiamondPoc2 |
| 62 | + | orb_messages::hardware::OrbVersion::HwVersionDiamondB3 => { |
| 63 | + write!( |
| 64 | + f, |
| 65 | + "Diamond_B{:?}", |
| 66 | + self.0.version |
| 67 | + - orb_messages::hardware::OrbVersion::HwVersionDiamondPoc1 |
| 68 | + as i32 |
| 69 | + + 1 |
| 70 | + ) |
| 71 | + } |
| 72 | + orb_messages::hardware::OrbVersion::HwVersionDiamondEvt => { |
| 73 | + write!(f, "Diamond_EVT") |
| 74 | + } |
26 | 75 | } |
27 | 76 | } |
28 | 77 | } |
0 commit comments