From 193a53f22b83ae26bae4d3e7404b1c2f35f18e9a Mon Sep 17 00:00:00 2001 From: matejcik Date: Fri, 29 Sep 2023 12:42:39 +0200 Subject: [PATCH] feat(core/rust): use MODEL_FULL_NAME from build system [no changelog] --- core/embed/rust/build.rs | 4 ++++ core/embed/rust/src/trezorhal/mod.rs | 1 + core/embed/rust/src/trezorhal/model.rs | 14 ++++++++++++++ core/embed/rust/src/ui/model_tr/constant.rs | 2 -- core/embed/rust/src/ui/model_tr/layout.rs | 5 +++-- .../src/ui/model_tt/component/welcome_screen.rs | 6 +++--- core/embed/rust/src/ui/model_tt/constant.rs | 2 -- core/embed/rust/src/ui/model_tt/layout.rs | 5 +++-- core/embed/rust/trezorhal.h | 1 + 9 files changed, 29 insertions(+), 11 deletions(-) create mode 100644 core/embed/rust/src/trezorhal/model.rs diff --git a/core/embed/rust/build.rs b/core/embed/rust/build.rs index e7e25f32fb..357211d8de 100644 --- a/core/embed/rust/build.rs +++ b/core/embed/rust/build.rs @@ -84,6 +84,7 @@ fn prepare_bindings() -> bindgen::Builder { "-I../../vendor/micropython/lib/uzlib", "-I../lib", "-I../trezorhal", + "-I../models", format!("-D{}", mcu_type()).as_str(), format!("-DTREZOR_MODEL_{}", model()).as_str(), format!("-DTREZOR_BOARD=\"{}\"", board()).as_str(), @@ -259,6 +260,9 @@ fn generate_trezorhal_bindings() { let bindings = prepare_bindings() .header("trezorhal.h") + // model + .allowlist_var("MODEL_INTERNAL_NAME") + .allowlist_var("MODEL_FULL_NAME") // common .allowlist_var("HW_ENTROPY_DATA") // secbool diff --git a/core/embed/rust/src/trezorhal/mod.rs b/core/embed/rust/src/trezorhal/mod.rs index 8a55becbb9..86fe0a76be 100644 --- a/core/embed/rust/src/trezorhal/mod.rs +++ b/core/embed/rust/src/trezorhal/mod.rs @@ -8,6 +8,7 @@ pub mod display; pub mod dma2d; mod ffi; pub mod io; +pub mod model; pub mod random; #[cfg(feature = "rgb_led")] pub mod rgb_led; diff --git a/core/embed/rust/src/trezorhal/model.rs b/core/embed/rust/src/trezorhal/model.rs new file mode 100644 index 0000000000..f21bad771e --- /dev/null +++ b/core/embed/rust/src/trezorhal/model.rs @@ -0,0 +1,14 @@ +use super::ffi::{MODEL_FULL_NAME, MODEL_INTERNAL_NAME}; + +// TODO: get bindgen to do this for us more safely +// https://github.com/rust-lang/rust-bindgen/issues/1401 + +const unsafe fn ascii_const_to_str_unchecked(s: &[u8]) -> &str { + unsafe { + let strip_nul = core::slice::from_raw_parts(s.as_ptr(), s.len() - 1); + core::str::from_utf8_unchecked(strip_nul) + } +} + +pub const FULL_NAME: &str = unsafe { ascii_const_to_str_unchecked(MODEL_FULL_NAME) }; +pub const INTERNAL_NAME: &str = unsafe { ascii_const_to_str_unchecked(MODEL_INTERNAL_NAME) }; diff --git a/core/embed/rust/src/ui/model_tr/constant.rs b/core/embed/rust/src/ui/model_tr/constant.rs index 2e3c4434cd..7b7eb01193 100644 --- a/core/embed/rust/src/ui/model_tr/constant.rs +++ b/core/embed/rust/src/ui/model_tr/constant.rs @@ -11,8 +11,6 @@ pub const LOADER_OUTER: i16 = 32; pub const LOADER_INNER: i16 = 18; pub const LOADER_ICON_MAX_SIZE: i16 = 8; -pub const MODEL_NAME: &str = "Trezor Model R"; - pub const fn size() -> Offset { Offset::new(WIDTH, HEIGHT) } diff --git a/core/embed/rust/src/ui/model_tr/layout.rs b/core/embed/rust/src/ui/model_tr/layout.rs index a013fc8eb2..24e8b29324 100644 --- a/core/embed/rust/src/ui/model_tr/layout.rs +++ b/core/embed/rust/src/ui/model_tr/layout.rs @@ -17,6 +17,7 @@ use crate::{ util, }, strutil::StringType, + trezorhal::model, ui::{ component::{ base::Component, @@ -1548,7 +1549,7 @@ extern "C" fn new_show_homescreen(n_args: usize, args: *const Obj, kwargs: *mut let label: StrBuffer = kwargs .get(Qstr::MP_QSTR_label)? .try_into_option()? - .unwrap_or_else(|| constant::MODEL_NAME.into()); + .unwrap_or_else(|| model::FULL_NAME.into()); let notification: Option = kwargs.get(Qstr::MP_QSTR_notification)?.try_into_option()?; let notification_level: u8 = kwargs.get_or(Qstr::MP_QSTR_notification_level, 0)?; @@ -1569,7 +1570,7 @@ extern "C" fn new_show_lockscreen(n_args: usize, args: *const Obj, kwargs: *mut let label: StrBuffer = kwargs .get(Qstr::MP_QSTR_label)? .try_into_option()? - .unwrap_or_else(|| constant::MODEL_NAME.into()); + .unwrap_or_else(|| model::FULL_NAME.into()); let bootscreen: bool = kwargs.get(Qstr::MP_QSTR_bootscreen)?.try_into()?; let skip_first_paint: bool = kwargs.get(Qstr::MP_QSTR_skip_first_paint)?.try_into()?; diff --git a/core/embed/rust/src/ui/model_tt/component/welcome_screen.rs b/core/embed/rust/src/ui/model_tt/component/welcome_screen.rs index bc167a95b7..482dd53e2d 100644 --- a/core/embed/rust/src/ui/model_tt/component/welcome_screen.rs +++ b/core/embed/rust/src/ui/model_tt/component/welcome_screen.rs @@ -11,7 +11,7 @@ const ICON_TOP_MARGIN: i16 = 48; #[cfg(not(feature = "bootloader"))] const MODEL_NAME_FONT: display::Font = display::Font::DEMIBOLD; #[cfg(not(feature = "bootloader"))] -use crate::ui::{constant::MODEL_NAME, display}; +use crate::{trezorhal::model, ui::display}; pub struct WelcomeScreen { area: Rect, @@ -54,7 +54,7 @@ impl Component for WelcomeScreen { #[cfg(not(feature = "bootloader"))] display::text_center( self.area.bottom_center() - Offset::y(TEXT_BOTTOM_MARGIN), - MODEL_NAME, + model::FULL_NAME, MODEL_NAME_FONT, theme::FG, theme::BG, @@ -74,6 +74,6 @@ impl crate::trace::Trace for WelcomeScreen { fn trace(&self, t: &mut dyn crate::trace::Tracer) { t.component("WelcomeScreen"); #[cfg(not(feature = "bootloader"))] - t.string("model", MODEL_NAME); + t.string("model", model::FULL_NAME); } } diff --git a/core/embed/rust/src/ui/model_tt/constant.rs b/core/embed/rust/src/ui/model_tt/constant.rs index f84b97cf39..3d4f7005bc 100644 --- a/core/embed/rust/src/ui/model_tt/constant.rs +++ b/core/embed/rust/src/ui/model_tt/constant.rs @@ -11,8 +11,6 @@ pub const LOADER_OUTER: i16 = 60; pub const LOADER_INNER: i16 = 42; pub const LOADER_ICON_MAX_SIZE: i16 = 64; -pub const MODEL_NAME: &str = "Trezor Model T"; - pub const fn size() -> Offset { Offset::new(WIDTH, HEIGHT) } diff --git a/core/embed/rust/src/ui/model_tt/layout.rs b/core/embed/rust/src/ui/model_tt/layout.rs index d88f8ef9cf..1f1539f211 100644 --- a/core/embed/rust/src/ui/model_tt/layout.rs +++ b/core/embed/rust/src/ui/model_tt/layout.rs @@ -15,6 +15,7 @@ use crate::{ util, }, strutil::StringType, + trezorhal::model, ui::{ component::{ base::ComponentExt, @@ -1596,7 +1597,7 @@ extern "C" fn new_show_homescreen(n_args: usize, args: *const Obj, kwargs: *mut let label: StrBuffer = kwargs .get(Qstr::MP_QSTR_label)? .try_into_option()? - .unwrap_or_else(|| constant::MODEL_NAME.into()); + .unwrap_or_else(|| model::FULL_NAME.into()); let notification: Option = kwargs.get(Qstr::MP_QSTR_notification)?.try_into_option()?; let notification_level: u8 = kwargs.get_or(Qstr::MP_QSTR_notification_level, 0)?; @@ -1618,7 +1619,7 @@ extern "C" fn new_show_lockscreen(n_args: usize, args: *const Obj, kwargs: *mut let label: StrBuffer = kwargs .get(Qstr::MP_QSTR_label)? .try_into_option()? - .unwrap_or_else(|| constant::MODEL_NAME.into()); + .unwrap_or_else(|| model::FULL_NAME.into()); let bootscreen: bool = kwargs.get(Qstr::MP_QSTR_bootscreen)?.try_into()?; let skip_first_paint: bool = kwargs.get(Qstr::MP_QSTR_skip_first_paint)?.try_into()?; diff --git a/core/embed/rust/trezorhal.h b/core/embed/rust/trezorhal.h index f8bb797a94..e34711d70c 100644 --- a/core/embed/rust/trezorhal.h +++ b/core/embed/rust/trezorhal.h @@ -7,6 +7,7 @@ #include "dma2d.h" #include "flash.h" #include "fonts/fonts.h" +#include "model.h" #include "rgb_led.h" #include "secbool.h" #include "storage.h"