mirror of
https://github.com/trezor/trezor-firmware.git
synced 2024-12-18 20:38:10 +00:00
feat(core): allow T3T1 to start without touch during testing
[no changelog]
This commit is contained in:
parent
5e827e09c4
commit
a80959e50f
@ -419,16 +419,28 @@ int bootloader_main(void) {
|
|||||||
i2c_init();
|
i2c_init();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USE_TOUCH
|
display_reinit();
|
||||||
touch_power_on();
|
|
||||||
touch_init();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef USE_DMA2D
|
#ifdef USE_DMA2D
|
||||||
dma2d_init();
|
dma2d_init();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
display_reinit();
|
unit_variant_init();
|
||||||
|
|
||||||
|
#ifdef USE_TOUCH
|
||||||
|
touch_power_on();
|
||||||
|
#ifdef TREZOR_MODEL_T3T1
|
||||||
|
// on T3T1, tester needs to run without touch, so making an exception
|
||||||
|
// until unit variant is written in OTP
|
||||||
|
if (unit_variant_present()) {
|
||||||
|
ensure(touch_init(), "Touch screen panel was not loaded properly.");
|
||||||
|
} else {
|
||||||
|
touch_init();
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
ensure(touch_init(), "Touch screen panel was not loaded properly.");
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef STM32U5
|
#ifdef STM32U5
|
||||||
ensure(secret_ensure_initialized(), "secret reinitialized");
|
ensure(secret_ensure_initialized(), "secret reinitialized");
|
||||||
@ -508,8 +520,6 @@ int bootloader_main(void) {
|
|||||||
rgb_led_init();
|
rgb_led_init();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
unit_variant_init();
|
|
||||||
|
|
||||||
#if PRODUCTION && !defined STM32U5
|
#if PRODUCTION && !defined STM32U5
|
||||||
// for STM32U5, this check is moved to boardloader
|
// for STM32U5, this check is moved to boardloader
|
||||||
check_bootloader_version();
|
check_bootloader_version();
|
||||||
|
@ -107,7 +107,7 @@ static void touch_active_pin_state(void) {
|
|||||||
HAL_Delay(5);
|
HAL_Delay(5);
|
||||||
}
|
}
|
||||||
|
|
||||||
void touch_set_mode(void) {
|
secbool touch_set_mode(void) {
|
||||||
// set register 0xA4 G_MODE to interrupt trigger mode (0x01). basically, CTPM
|
// set register 0xA4 G_MODE to interrupt trigger mode (0x01). basically, CTPM
|
||||||
// generates a pulse when new data is available
|
// generates a pulse when new data is available
|
||||||
uint8_t touch_panel_config[] = {0xA4, 0x01};
|
uint8_t touch_panel_config[] = {0xA4, 0x01};
|
||||||
@ -115,12 +115,12 @@ void touch_set_mode(void) {
|
|||||||
if (HAL_OK == i2c_transmit(TOUCH_I2C_INSTANCE, TOUCH_ADDRESS,
|
if (HAL_OK == i2c_transmit(TOUCH_I2C_INSTANCE, TOUCH_ADDRESS,
|
||||||
touch_panel_config, sizeof(touch_panel_config),
|
touch_panel_config, sizeof(touch_panel_config),
|
||||||
10)) {
|
10)) {
|
||||||
return;
|
return sectrue;
|
||||||
}
|
}
|
||||||
i2c_cycle(TOUCH_I2C_INSTANCE);
|
i2c_cycle(TOUCH_I2C_INSTANCE);
|
||||||
}
|
}
|
||||||
|
|
||||||
ensure(secfalse, "Touch screen panel was not loaded properly.");
|
return secfalse;
|
||||||
}
|
}
|
||||||
|
|
||||||
void touch_power_on(void) {
|
void touch_power_on(void) {
|
||||||
@ -136,7 +136,7 @@ void touch_power_off(void) {
|
|||||||
touch_default_pin_state();
|
touch_default_pin_state();
|
||||||
}
|
}
|
||||||
|
|
||||||
void touch_init(void) {
|
secbool touch_init(void) {
|
||||||
GPIO_InitTypeDef GPIO_InitStructure;
|
GPIO_InitTypeDef GPIO_InitStructure;
|
||||||
|
|
||||||
// PC4 capacitive touch panel module (CTPM) interrupt (INT) input
|
// PC4 capacitive touch panel module (CTPM) interrupt (INT) input
|
||||||
@ -147,8 +147,10 @@ void touch_init(void) {
|
|||||||
HAL_GPIO_Init(TOUCH_INT_PORT, &GPIO_InitStructure);
|
HAL_GPIO_Init(TOUCH_INT_PORT, &GPIO_InitStructure);
|
||||||
__HAL_GPIO_EXTI_CLEAR_FLAG(TOUCH_INT_PIN);
|
__HAL_GPIO_EXTI_CLEAR_FLAG(TOUCH_INT_PIN);
|
||||||
|
|
||||||
touch_set_mode();
|
if (sectrue != touch_set_mode()) {
|
||||||
touch_sensitivity(TOUCH_SENSITIVITY);
|
return secfalse;
|
||||||
|
}
|
||||||
|
return touch_sensitivity(TOUCH_SENSITIVITY);
|
||||||
}
|
}
|
||||||
|
|
||||||
void touch_wait_until_ready(void) {
|
void touch_wait_until_ready(void) {
|
||||||
@ -158,19 +160,19 @@ void touch_wait_until_ready(void) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void touch_sensitivity(uint8_t value) {
|
secbool touch_sensitivity(uint8_t value) {
|
||||||
// set panel threshold (TH_GROUP) - default value is 0x12
|
// set panel threshold (TH_GROUP) - default value is 0x12
|
||||||
uint8_t touch_panel_threshold[] = {0x80, value};
|
uint8_t touch_panel_threshold[] = {0x80, value};
|
||||||
for (int i = 0; i < 3; i++) {
|
for (int i = 0; i < 3; i++) {
|
||||||
if (HAL_OK == i2c_transmit(TOUCH_I2C_INSTANCE, TOUCH_ADDRESS,
|
if (HAL_OK == i2c_transmit(TOUCH_I2C_INSTANCE, TOUCH_ADDRESS,
|
||||||
touch_panel_threshold,
|
touch_panel_threshold,
|
||||||
sizeof(touch_panel_threshold), 10)) {
|
sizeof(touch_panel_threshold), 10)) {
|
||||||
return;
|
return sectrue;
|
||||||
}
|
}
|
||||||
i2c_cycle(TOUCH_I2C_INSTANCE);
|
i2c_cycle(TOUCH_I2C_INSTANCE);
|
||||||
}
|
}
|
||||||
|
|
||||||
ensure(secfalse, "Touch screen panel was not loaded properly.");
|
return secfalse;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t touch_is_detected(void) {
|
uint32_t touch_is_detected(void) {
|
||||||
|
@ -470,7 +470,7 @@ void stmpe811_Reset() {
|
|||||||
IOE_Delay(2);
|
IOE_Delay(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
void touch_init(void) {
|
secbool touch_init(void) {
|
||||||
GPIO_InitTypeDef GPIO_InitStructure;
|
GPIO_InitTypeDef GPIO_InitStructure;
|
||||||
|
|
||||||
__HAL_RCC_GPIOA_CLK_ENABLE();
|
__HAL_RCC_GPIOA_CLK_ENABLE();
|
||||||
@ -486,9 +486,11 @@ void touch_init(void) {
|
|||||||
stmpe811_Reset();
|
stmpe811_Reset();
|
||||||
touch_set_mode();
|
touch_set_mode();
|
||||||
touch_sensitivity(0x06);
|
touch_sensitivity(0x06);
|
||||||
|
|
||||||
|
return sectrue;
|
||||||
}
|
}
|
||||||
|
|
||||||
void touch_sensitivity(uint8_t value) {
|
secbool touch_sensitivity(uint8_t value) {
|
||||||
// set panel threshold (TH_GROUP) - default value is 0x12
|
// set panel threshold (TH_GROUP) - default value is 0x12
|
||||||
// uint8_t touch_panel_threshold[] = {0x80, value};
|
// uint8_t touch_panel_threshold[] = {0x80, value};
|
||||||
// ensure(sectrue *
|
// ensure(sectrue *
|
||||||
@ -496,6 +498,7 @@ void touch_sensitivity(uint8_t value) {
|
|||||||
// &I2c_handle, TOUCH_ADDRESS, touch_panel_threshold,
|
// &I2c_handle, TOUCH_ADDRESS, touch_panel_threshold,
|
||||||
// sizeof(touch_panel_threshold), 10)),
|
// sizeof(touch_panel_threshold), 10)),
|
||||||
// NULL);
|
// NULL);
|
||||||
|
return sectrue;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t touch_is_detected(void) {
|
uint32_t touch_is_detected(void) {
|
||||||
|
@ -49,6 +49,8 @@ uint32_t systick_val_copy = 0;
|
|||||||
extern void shutdown_privileged(void);
|
extern void shutdown_privileged(void);
|
||||||
|
|
||||||
void __attribute__((noreturn)) trezor_shutdown(void) {
|
void __attribute__((noreturn)) trezor_shutdown(void) {
|
||||||
|
display_finish_actions();
|
||||||
|
|
||||||
__HAL_RCC_SAES_CLK_DISABLE();
|
__HAL_RCC_SAES_CLK_DISABLE();
|
||||||
// Erase all secrets
|
// Erase all secrets
|
||||||
TAMP->CR2 |= TAMP_CR2_BKERASE;
|
TAMP->CR2 |= TAMP_CR2_BKERASE;
|
||||||
|
@ -1135,7 +1135,7 @@ static int32_t SITRONIX_Probe(uint32_t Instance) {
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "touch.h"
|
#include "touch.h"
|
||||||
|
|
||||||
void touch_init(void) {
|
secbool touch_init(void) {
|
||||||
TS_Init_t TsInit;
|
TS_Init_t TsInit;
|
||||||
|
|
||||||
/* Initialize the TouchScreen */
|
/* Initialize the TouchScreen */
|
||||||
@ -1145,10 +1145,12 @@ void touch_init(void) {
|
|||||||
TsInit.Accuracy = 10;
|
TsInit.Accuracy = 10;
|
||||||
|
|
||||||
BSP_TS_Init(0, &TsInit);
|
BSP_TS_Init(0, &TsInit);
|
||||||
|
|
||||||
|
return sectrue;
|
||||||
}
|
}
|
||||||
void touch_power_on(void) {}
|
void touch_power_on(void) {}
|
||||||
void touch_power_off(void) {}
|
void touch_power_off(void) {}
|
||||||
void touch_sensitivity(uint8_t value) {}
|
secbool touch_sensitivity(uint8_t value) { return sectrue; }
|
||||||
|
|
||||||
uint32_t touch_is_detected(void) { return sitronix_touching != 0; }
|
uint32_t touch_is_detected(void) { return sitronix_touching != 0; }
|
||||||
|
|
||||||
|
@ -2,17 +2,18 @@
|
|||||||
#define _TOUCH_H
|
#define _TOUCH_H
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include "secbool.h"
|
||||||
|
|
||||||
#define TOUCH_START (1U << 24)
|
#define TOUCH_START (1U << 24)
|
||||||
#define TOUCH_MOVE (1U << 25)
|
#define TOUCH_MOVE (1U << 25)
|
||||||
#define TOUCH_END (1U << 26)
|
#define TOUCH_END (1U << 26)
|
||||||
|
|
||||||
void touch_init(void);
|
secbool touch_init(void);
|
||||||
void touch_power_on(void);
|
void touch_power_on(void);
|
||||||
void touch_power_off(void);
|
void touch_power_off(void);
|
||||||
void touch_wait_until_ready(void);
|
void touch_wait_until_ready(void);
|
||||||
|
|
||||||
void touch_sensitivity(uint8_t value);
|
secbool touch_sensitivity(uint8_t value);
|
||||||
uint32_t touch_read(void);
|
uint32_t touch_read(void);
|
||||||
uint32_t touch_click(void);
|
uint32_t touch_click(void);
|
||||||
uint32_t touch_is_detected(void);
|
uint32_t touch_is_detected(void);
|
||||||
|
@ -217,7 +217,7 @@ uint32_t touch_read(void) {
|
|||||||
return ev_type | touch_pack_xy(ev_x, ev_y);
|
return ev_type | touch_pack_xy(ev_x, ev_y);
|
||||||
}
|
}
|
||||||
|
|
||||||
void touch_init(void) {}
|
secbool touch_init(void) { return sectrue; }
|
||||||
void touch_power_on(void) {}
|
void touch_power_on(void) {}
|
||||||
void touch_wait_until_ready(void) {}
|
void touch_wait_until_ready(void) {}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user