diff --git a/Cargo.lock b/Cargo.lock index 4c8260336..cb0a9b69b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5236,7 +5236,7 @@ dependencies = [ "can-rs 0.0.0", "color-eyre", "futures", - "orb-messages 0.0.0 (git+https://github.com/worldcoin/orb-messages?rev=3dffed6e01fa4aaca347eca52be87bfc298508eb)", + "orb-messages 0.0.0 (git+https://github.com/worldcoin/orb-messages?rev=c251751145f5376087f99305fbdfba10718e3cdd)", "pin-project", "prost 0.12.6", "thiserror 1.0.65", @@ -5267,7 +5267,7 @@ dependencies = [ [[package]] name = "orb-messages" version = "0.0.0" -source = "git+https://github.com/worldcoin/orb-messages?rev=3dffed6e01fa4aaca347eca52be87bfc298508eb#3dffed6e01fa4aaca347eca52be87bfc298508eb" +source = "git+https://github.com/worldcoin/orb-messages?rev=c251751145f5376087f99305fbdfba10718e3cdd#c251751145f5376087f99305fbdfba10718e3cdd" dependencies = [ "prost 0.12.6", "prost-build 0.12.6", @@ -5475,7 +5475,7 @@ dependencies = [ "hound", "humantime", "orb-build-info 0.0.0", - "orb-messages 0.0.0 (git+https://github.com/worldcoin/orb-messages?rev=3dffed6e01fa4aaca347eca52be87bfc298508eb)", + "orb-messages 0.0.0 (git+https://github.com/worldcoin/orb-messages?rev=c251751145f5376087f99305fbdfba10718e3cdd)", "orb-rgb", "orb-sound", "orb-telemetry", @@ -5574,7 +5574,7 @@ dependencies = [ "jod-thread", "libc", "orb-build-info 0.0.0", - "orb-messages 0.0.0 (git+https://github.com/worldcoin/orb-messages?rev=3dffed6e01fa4aaca347eca52be87bfc298508eb)", + "orb-messages 0.0.0 (git+https://github.com/worldcoin/orb-messages?rev=c251751145f5376087f99305fbdfba10718e3cdd)", "orb-slot-ctrl 0.3.1", "orb-telemetry", "polling 2.5.2", @@ -5638,7 +5638,7 @@ dependencies = [ "eyre", "futures", "orb-build-info 0.0.0", - "orb-messages 0.0.0 (git+https://github.com/worldcoin/orb-messages?rev=3dffed6e01fa4aaca347eca52be87bfc298508eb)", + "orb-messages 0.0.0 (git+https://github.com/worldcoin/orb-messages?rev=c251751145f5376087f99305fbdfba10718e3cdd)", "orb-telemetry", "prost 0.12.6", "quinn", diff --git a/Cargo.toml b/Cargo.toml index 53707c9ac..02e824a8c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -121,7 +121,7 @@ seek-camera.path = "seek-camera/wrapper" [workspace.dependencies.orb-messages] git = "https://github.com/worldcoin/orb-messages" -rev = "3dffed6e01fa4aaca347eca52be87bfc298508eb" +rev = "c251751145f5376087f99305fbdfba10718e3cdd" [workspace.dependencies.nusb] git = "https://github.com/kevinmehall/nusb" diff --git a/mcu-util/src/orb/revision.rs b/mcu-util/src/orb/revision.rs index 0b2786ce5..2c4cfa758 100644 --- a/mcu-util/src/orb/revision.rs +++ b/mcu-util/src/orb/revision.rs @@ -1,28 +1,77 @@ -use std::fmt::{Display, Formatter}; - use orb_mcu_interface::orb_messages; +use std::fmt::{Display, Formatter}; #[derive(Clone, Debug, Default)] pub struct OrbRevision(pub orb_messages::Hardware); +trait OrbVersionFromInt { + fn from_version_i32(value: i32) -> Self; +} +impl OrbVersionFromInt for orb_messages::hardware::OrbVersion { + fn from_version_i32(value: i32) -> Self { + match value { + 1 => orb_messages::hardware::OrbVersion::HwVersionPearlEv1, + 2 => orb_messages::hardware::OrbVersion::HwVersionPearlEv2, + 3 => orb_messages::hardware::OrbVersion::HwVersionPearlEv3, + 4 => orb_messages::hardware::OrbVersion::HwVersionPearlEv4, + 5 => orb_messages::hardware::OrbVersion::HwVersionPearlEv5, + 6 => orb_messages::hardware::OrbVersion::HwVersionDiamondPoc1, + 7 => orb_messages::hardware::OrbVersion::HwVersionDiamondPoc2, + 8 => orb_messages::hardware::OrbVersion::HwVersionDiamondB3, + 9 => orb_messages::hardware::OrbVersion::HwVersionDiamondEvt, + _ => orb_messages::hardware::OrbVersion::HwVersionUnknown, + } + } +} + impl Display for OrbRevision { fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { - if self.0.version - == i32::from(orb_messages::hardware::OrbVersion::HwVersionUnknown) - { - write!(f, "unknown") - } else if self.0.version - < orb_messages::hardware::OrbVersion::HwVersionDiamondPoc1 as i32 - { - write!(f, "EVT{:?}", self.0.version) - } else { - write!( - f, - "Diamond_B{:?}", - self.0.version - - orb_messages::hardware::OrbVersion::HwVersionDiamondPoc1 as i32 - + 1 - ) + match orb_messages::hardware::OrbVersion::from_version_i32(self.0.version) { + orb_messages::hardware::OrbVersion::HwVersionUnknown => { + // from_version_i32 returned unknown but the version might not be 0 + // meaning it's known by the firmware but not by the current binary + if self.0.version + == orb_messages::hardware::OrbVersion::HwVersionUnknown as i32 + { + return write!(f, "unknown"); + } + + tracing::error!( + "A new orb revision might not be implemented by that binary: {:?}.", + self.0.version + ); + + // let's write if it's a pearl or diamond orb, guessing by the version number + if self.0.version + < orb_messages::hardware::OrbVersion::HwVersionDiamondPoc1 as i32 + { + write!(f, "Pearl_unknown") + } else { + write!(f, "Diamond_unknown") + } + } + orb_messages::hardware::OrbVersion::HwVersionPearlEv1 + | orb_messages::hardware::OrbVersion::HwVersionPearlEv2 + | orb_messages::hardware::OrbVersion::HwVersionPearlEv3 + | orb_messages::hardware::OrbVersion::HwVersionPearlEv4 + | orb_messages::hardware::OrbVersion::HwVersionPearlEv5 => { + write!(f, "EVT{:?}", self.0.version) + } + orb_messages::hardware::OrbVersion::HwVersionDiamondPoc1 + | orb_messages::hardware::OrbVersion::HwVersionDiamondPoc2 + | orb_messages::hardware::OrbVersion::HwVersionDiamondB3 => { + write!( + f, + "Diamond_B{:?}", + self.0.version + - orb_messages::hardware::OrbVersion::HwVersionDiamondPoc1 + as i32 + + 1 + ) + } + orb_messages::hardware::OrbVersion::HwVersionDiamondEvt => { + write!(f, "Diamond_EVT") + } } } }