diff --git a/core/embed/lib/display.c b/core/embed/lib/display.c index 572ced367a..6afd2d2dd4 100644 --- a/core/embed/lib/display.c +++ b/core/embed/lib/display.c @@ -155,41 +155,6 @@ void display_text_render_buffer(const char *text, int textlen, int font, } } -// see docs/misc/toif.md for definition of the TOIF format -bool display_toif_info(const uint8_t *data, uint32_t len, uint16_t *out_w, - uint16_t *out_h, toif_format_t *out_format) { - if (len < 12 || memcmp(data, "TOI", 3) != 0) { - return false; - } - toif_format_t format = false; - if (data[3] == 'f') { - format = TOIF_FULL_COLOR_BE; - } else if (data[3] == 'g') { - format = TOIF_GRAYSCALE_OH; - } else if (data[3] == 'F') { - format = TOIF_FULL_COLOR_LE; - } else if (data[3] == 'G') { - format = TOIF_GRAYSCALE_EH; - } else { - return false; - } - - uint16_t w = *(uint16_t *)(data + 4); - uint16_t h = *(uint16_t *)(data + 6); - - uint32_t datalen = *(uint32_t *)(data + 8); - if (datalen != len - 12) { - return false; - } - - if (out_w != NULL && out_h != NULL && out_format != NULL) { - *out_w = w; - *out_h = h; - *out_format = format; - } - return true; -} - #ifdef FRAMEBUFFER static void display_text_render(int x, int y, const char *text, int textlen, int font, uint16_t fgcolor, uint16_t bgcolor) { diff --git a/core/embed/lib/display.h b/core/embed/lib/display.h index d61f9f2fe7..41fe3c58ed 100644 --- a/core/embed/lib/display.h +++ b/core/embed/lib/display.h @@ -30,20 +30,11 @@ #include "display_interface.h" #include "fonts/fonts.h" -typedef enum { - TOIF_FULL_COLOR_BE = 0, // big endian - TOIF_GRAYSCALE_OH = 1, // odd hi - TOIF_FULL_COLOR_LE = 2, // little endian - TOIF_GRAYSCALE_EH = 3, // even hi -} toif_format_t; - // provided by common void display_clear(void); void display_bar(int x, int y, int w, int h, uint16_t c); -bool display_toif_info(const uint8_t *buf, uint32_t len, uint16_t *out_w, - uint16_t *out_h, toif_format_t *out_format); void display_text(int x, int y, const char *text, int textlen, int font, uint16_t fgcolor, uint16_t bgcolor); diff --git a/core/embed/lib/toif.c b/core/embed/lib/toif.c new file mode 100644 index 0000000000..8221f45f20 --- /dev/null +++ b/core/embed/lib/toif.c @@ -0,0 +1,57 @@ +/* + * 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 "toif.h" +#include +#include + +// see docs/misc/toif.md for definition of the TOIF format +bool toif_header_parse(const uint8_t *data, uint32_t len, uint16_t *out_w, + uint16_t *out_h, toif_format_t *out_format) { + if (len < 12 || memcmp(data, "TOI", 3) != 0) { + return false; + } + toif_format_t format = false; + if (data[3] == 'f') { + format = TOIF_FULL_COLOR_BE; + } else if (data[3] == 'g') { + format = TOIF_GRAYSCALE_OH; + } else if (data[3] == 'F') { + format = TOIF_FULL_COLOR_LE; + } else if (data[3] == 'G') { + format = TOIF_GRAYSCALE_EH; + } else { + return false; + } + + uint16_t w = *(uint16_t *)(data + 4); + uint16_t h = *(uint16_t *)(data + 6); + + uint32_t datalen = *(uint32_t *)(data + 8); + if (datalen != len - 12) { + return false; + } + + if (out_w != NULL && out_h != NULL && out_format != NULL) { + *out_w = w; + *out_h = h; + *out_format = format; + } + return true; +} diff --git a/core/embed/lib/toif.h b/core/embed/lib/toif.h new file mode 100644 index 0000000000..ccea6125c8 --- /dev/null +++ b/core/embed/lib/toif.h @@ -0,0 +1,36 @@ +/* + * 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 LIB_TOIF_H +#define LIB_TOIF_H + +#include +#include + +typedef enum { + TOIF_FULL_COLOR_BE = 0, // big endian + TOIF_GRAYSCALE_OH = 1, // odd hi + TOIF_FULL_COLOR_LE = 2, // little endian + TOIF_GRAYSCALE_EH = 3, // even hi +} toif_format_t; + +bool toif_header_parse(const uint8_t *buf, uint32_t len, uint16_t *out_w, + uint16_t *out_h, toif_format_t *out_format); + +#endif // LIB_TOIF_H diff --git a/core/embed/rust/build.rs b/core/embed/rust/build.rs index dd1ea0d6b0..3b0ac6d0f3 100644 --- a/core/embed/rust/build.rs +++ b/core/embed/rust/build.rs @@ -309,7 +309,6 @@ fn generate_trezorhal_bindings() { .allowlist_var("DISPLAY_FRAMEBUFFER_OFFSET_Y") .allowlist_var("DISPLAY_RESX") .allowlist_var("DISPLAY_RESY") - .allowlist_type("toif_format_t") // fonts .allowlist_function("font_height") .allowlist_function("font_max_height") @@ -335,6 +334,8 @@ fn generate_trezorhal_bindings() { // time .allowlist_function("hal_delay") .allowlist_function("hal_ticks_ms") + // toif + .allowlist_type("toif_format_t") // dma2d .allowlist_function("dma2d_setup_const") .allowlist_function("dma2d_setup_4bpp") diff --git a/core/embed/rust/trezorhal.h b/core/embed/rust/trezorhal.h index e34711d70c..aa12b37639 100644 --- a/core/embed/rust/trezorhal.h +++ b/core/embed/rust/trezorhal.h @@ -11,6 +11,7 @@ #include "rgb_led.h" #include "secbool.h" #include "storage.h" +#include "toif.h" #include "touch.h" #include "usb.h"