diff --git a/core/SConscript.unix b/core/SConscript.unix index ae42ec6722..c7914ad430 100644 --- a/core/SConscript.unix +++ b/core/SConscript.unix @@ -335,6 +335,7 @@ SOURCE_MICROPYTHON = [ ] SOURCE_UNIX = [ + 'embed/unix/alloc_only.c', 'embed/unix/common.c', 'embed/unix/flash.c', 'embed/unix/main.c', diff --git a/core/embed/rust/src/trezorhal/display.rs b/core/embed/rust/src/trezorhal/display.rs index 413c94f460..f863e28636 100644 --- a/core/embed/rust/src/trezorhal/display.rs +++ b/core/embed/rust/src/trezorhal/display.rs @@ -12,6 +12,11 @@ pub fn backlight(val: i32) -> i32 { unsafe { ffi::display_backlight(val) } } +pub fn refresh() { + unsafe { + ffi::display_refresh(); + } +} pub fn orientation(degrees: i32) -> i32 { unsafe { ffi::display_orientation(degrees) } diff --git a/core/embed/rust/src/ui/display.rs b/core/embed/rust/src/ui/display.rs index 3fc4737d51..65c129a45e 100644 --- a/core/embed/rust/src/ui/display.rs +++ b/core/embed/rust/src/ui/display.rs @@ -13,6 +13,10 @@ use crate::{ }; use core::slice; +pub fn refresh() { + display::refresh(); +} + pub fn backlight() -> i32 { display::backlight(-1) } diff --git a/core/embed/rust/src/ui/layout/native.rs b/core/embed/rust/src/ui/layout/native.rs index b6d0186499..ff356456c3 100644 --- a/core/embed/rust/src/ui/layout/native.rs +++ b/core/embed/rust/src/ui/layout/native.rs @@ -156,6 +156,7 @@ impl RustLayout } self.paint_if_requested(); + display::refresh(); } } diff --git a/core/embed/unix/alloc_only.c b/core/embed/unix/alloc_only.c new file mode 100644 index 0000000000..6a007608b0 --- /dev/null +++ b/core/embed/unix/alloc_only.c @@ -0,0 +1,54 @@ +/* + * This file is part of the Trezor project, https://trezor.io/ + * + * Copyright (c) SatoshiLabs + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "alloc_only.h" +#include "common.h" +#include "memzero.h" + +#define MEM_SIZE (37888 / 4) + +uint32_t alloc_memory_mem[MEM_SIZE]; +uint32_t * alloc_memory; + + +void * alloc_only(uint16_t size){ + + void * ptr = NULL; + + size_t aligned_size = size; + if (size % 4 != 0) { + aligned_size++; + } + + if((alloc_memory + aligned_size) <= (alloc_memory_mem + MEM_SIZE)){ + ptr = alloc_memory; + alloc_memory += aligned_size; + } + + return ptr; +} + +void alloc_only_init(bool clear) { + alloc_memory = alloc_memory_mem; + + + if (clear) { + memzero(alloc_memory_mem, sizeof(alloc_memory_mem)); + } +} diff --git a/core/embed/unix/alloc_only.h b/core/embed/unix/alloc_only.h new file mode 100644 index 0000000000..0ad9dbd19d --- /dev/null +++ b/core/embed/unix/alloc_only.h @@ -0,0 +1,34 @@ +/* + * This file is part of the Trezor project, https://trezor.io/ + * + * Copyright (c) SatoshiLabs + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef _ALLOC_H +#define _ALLOC_H + +#include "common.h" +#include "stdbool.h" + + +void * alloc_only(uint16_t size); + +void alloc_only_init(bool clear); + + + + +#endif //_ALLOC_H diff --git a/core/embed/unix/main.c b/core/embed/unix/main.c index 4c797cbea9..dfdf68bf46 100644 --- a/core/embed/unix/main.c +++ b/core/embed/unix/main.c @@ -51,6 +51,9 @@ #include "py/repl.h" #include "py/runtime.h" #include "py/stackctrl.h" +#include "display.h" +#include "alloc_only.h" +#include "rust_ui.h" #include "common.h" @@ -421,6 +424,10 @@ void main_clean_exit(int status) { #define PATHLIST_SEP_CHAR ':' #endif +void rust_eh_personality() { + +} + static int do_import_module(const char *modname) { mp_obj_t import_args[4]; import_args[0] = mp_obj_new_str(modname, strlen(modname)); @@ -483,6 +490,13 @@ MP_NOINLINE int main_(int argc, char **argv) { // Map trezor.flash to memory. flash_init(); + display_init(); + display_backlight(150); + display_refresh(); + alloc_only_init(false); + boot_firmware(); + + #if MICROPY_ENABLE_GC char *heap = malloc(heap_size); gc_init(heap, heap + heap_size);