fix(core): adjust T2B1 display refresh rate and contrast when displaying QR code

[no changelog]
tychovrahe/trdisplay/qr
tychovrahe 8 months ago
parent 292389bc1d
commit 9869856dfd

@ -160,6 +160,28 @@ STATIC mp_obj_t mod_trezorui_Display_clear_save(mp_obj_t self) {
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorui_Display_clear_save_obj,
mod_trezorui_Display_clear_save);
/// def enter_qr_mode(self) -> None:
/// """
/// Enters display QR mode
/// """
STATIC mp_obj_t mod_trezorui_Display_enter_qr_mode(mp_obj_t self) {
display_enter_qr_mode();
return mp_const_none;
}
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorui_Display_enter_qr_mode_obj,
mod_trezorui_Display_enter_qr_mode);
/// def exit_qr_mode(self) -> None:
/// """
/// Exits display QR mode
/// """
STATIC mp_obj_t mod_trezorui_Display_exit_qr_mode(mp_obj_t self) {
display_exit_qr_mode();
return mp_const_none;
}
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorui_Display_exit_qr_mode_obj,
mod_trezorui_Display_exit_qr_mode);
STATIC const mp_rom_map_elem_t mod_trezorui_Display_locals_dict_table[] = {
{MP_ROM_QSTR(MP_QSTR_clear), MP_ROM_PTR(&mod_trezorui_Display_clear_obj)},
{MP_ROM_QSTR(MP_QSTR_refresh),
@ -172,6 +194,10 @@ STATIC const mp_rom_map_elem_t mod_trezorui_Display_locals_dict_table[] = {
{MP_ROM_QSTR(MP_QSTR_save), MP_ROM_PTR(&mod_trezorui_Display_save_obj)},
{MP_ROM_QSTR(MP_QSTR_clear_save),
MP_ROM_PTR(&mod_trezorui_Display_clear_save_obj)},
{MP_ROM_QSTR(MP_QSTR_enter_qr_mode),
MP_ROM_PTR(&mod_trezorui_Display_enter_qr_mode_obj)},
{MP_ROM_QSTR(MP_QSTR_exit_qr_mode),
MP_ROM_PTR(&mod_trezorui_Display_exit_qr_mode_obj)},
{MP_ROM_QSTR(MP_QSTR_WIDTH), MP_ROM_INT(DISPLAY_RESX)},
{MP_ROM_QSTR(MP_QSTR_HEIGHT), MP_ROM_INT(DISPLAY_RESY)},
{MP_ROM_QSTR(MP_QSTR_FONT_NORMAL), MP_ROM_INT(FONT_NORMAL)},

@ -47,5 +47,7 @@ void display_sync(void);
void display_refresh(void);
const char *display_save(const char *prefix);
void display_clear_save(void);
void display_enter_qr_mode(void);
void display_exit_qr_mode(void);
#endif //_DISPLAY_INTERFACE_H

@ -371,3 +371,5 @@ void display_sync(void) {}
const char *display_save(const char *prefix) { return NULL; }
void display_clear_save(void) {}
void display_enter_qr_mode(void) {}
void display_exit_qr_mode(void) {}

@ -470,3 +470,6 @@ void display_set_big_endian(void) {
const char *display_save(const char *prefix) { return NULL; }
void display_clear_save(void) {}
void display_enter_qr_mode(void) {}
void display_exit_qr_mode(void) {}

@ -371,3 +371,5 @@ void display_reinit(void) {}
const char *display_save(const char *prefix) { return NULL; }
void display_clear_save(void) {}
void display_enter_qr_mode(void) {}
void display_exit_qr_mode(void) {}

@ -141,7 +141,8 @@ static inline void spi_send(const uint8_t *data, int len) {
void display_handle_init(void) {
spi_handle.Instance = OLED_SPI;
spi_handle.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8;
spi_handle.State = HAL_SPI_STATE_READY;
spi_handle.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16;
spi_handle.Init.Direction = SPI_DIRECTION_2LINES;
spi_handle.Init.CLKPhase = SPI_PHASE_1EDGE;
spi_handle.Init.CLKPolarity = SPI_POLARITY_LOW;
@ -241,7 +242,10 @@ void display_init(void) {
display_refresh();
}
void display_reinit(void) { display_handle_init(); }
void display_reinit(void) {
display_handle_init();
HAL_SPI_Init(&spi_handle);
}
static inline uint8_t reverse_byte(uint8_t b) {
b = (b & 0xF0) >> 4 | (b & 0x0F) << 4;
@ -295,3 +299,23 @@ void display_refresh(void) {
const char *display_save(const char *prefix) { return NULL; }
void display_clear_save(void) {}
void display_enter_qr_mode(void) {
static const uint8_t s[] = {OLED_SETDISPLAYCLOCKDIV, 0xF0, OLED_SETCONTRAST,
0xFF, OLED_DISPLAYON};
HAL_GPIO_WritePin(OLED_DC_PORT, OLED_DC_PIN, GPIO_PIN_RESET); // set to CMD
HAL_GPIO_WritePin(OLED_CS_PORT, OLED_CS_PIN, GPIO_PIN_RESET); // SPI select
HAL_Delay(1);
spi_send(s, sizeof(s));
HAL_GPIO_WritePin(OLED_CS_PORT, OLED_CS_PIN, GPIO_PIN_SET); // SPI deselect
}
void display_exit_qr_mode(void) {
static const uint8_t s[] = {OLED_SETDISPLAYCLOCKDIV, 0x80, OLED_SETCONTRAST,
0xCF, OLED_DISPLAYON};
HAL_GPIO_WritePin(OLED_DC_PORT, OLED_DC_PIN, GPIO_PIN_RESET); // set to CMD
HAL_GPIO_WritePin(OLED_CS_PORT, OLED_CS_PIN, GPIO_PIN_RESET); // SPI select
HAL_Delay(1);
spi_send(s, sizeof(s));
HAL_GPIO_WritePin(OLED_CS_PORT, OLED_CS_PIN, GPIO_PIN_SET); // SPI deselect
}

@ -332,3 +332,6 @@ void display_clear_save(void) {
SDL_FreeSurface(PREV_SAVED);
PREV_SAVED = NULL;
}
void display_enter_qr_mode(void) {}
void display_exit_qr_mode(void) {}

@ -57,3 +57,13 @@ class Display:
"""
Clears buffers in display saving.
"""
def enter_qr_mode(self) -> None:
"""
Enters display QR mode
"""
def exit_qr_mode(self) -> None:
"""
Exits display QR mode
"""

@ -513,6 +513,8 @@ async def show_address(
result += " (YOURS)" if i == multisig_index else " (COSIGNER)"
return result
ui.display.enter_qr_mode()
result = await ctx_wait(
RustLayout(
trezorui2.show_address_details(
@ -526,6 +528,9 @@ async def show_address(
)
),
)
ui.display.exit_qr_mode()
# Can only go back from the address details.
assert result is CANCELLED

Loading…
Cancel
Save