mirror of
https://github.com/trezor/trezor-firmware.git
synced 2024-12-18 04:18:10 +00:00
feat(core): added button support for Model R
This commit is contained in:
parent
7804893179
commit
936c84bac6
@ -99,7 +99,6 @@ SOURCE_TREZORHAL = [
|
||||
'embed/trezorhal/rng.c',
|
||||
'embed/trezorhal/stm32.c',
|
||||
'embed/trezorhal/systick.c',
|
||||
'embed/trezorhal/touch.c',
|
||||
'embed/trezorhal/usb.c',
|
||||
'embed/trezorhal/usbd_conf.c',
|
||||
'embed/trezorhal/usbd_core.c',
|
||||
@ -109,6 +108,12 @@ SOURCE_TREZORHAL = [
|
||||
'embed/trezorhal/vectortable.s',
|
||||
]
|
||||
|
||||
if TREZOR_MODEL in ['1', 'R']:
|
||||
SOURCE_TREZORHAL.append('embed/trezorhal/button.c')
|
||||
if TREZOR_MODEL in ('T',):
|
||||
SOURCE_TREZORHAL.append('embed/trezorhal/touch.c')
|
||||
|
||||
|
||||
env = Environment(ENV=os.environ, CFLAGS='%s -DPRODUCTION=%s' % (ARGUMENTS.get('CFLAGS', ''), ARGUMENTS.get('PRODUCTION', '0')))
|
||||
|
||||
env.Replace(
|
||||
|
@ -25,7 +25,9 @@
|
||||
#include "flash.h"
|
||||
#include "image.h"
|
||||
#include "rng.h"
|
||||
#ifdef TREZOR_MODEL_T
|
||||
#include "sdcard.h"
|
||||
#endif
|
||||
|
||||
#include "lowlevel.h"
|
||||
#include "version.h"
|
||||
@ -50,6 +52,7 @@ static const uint8_t * const BOARDLOADER_KEYS[] = {
|
||||
extern uint32_t sram_start[];
|
||||
#define sdcard_buf sram_start
|
||||
|
||||
#if defined TREZOR_MODEL_T
|
||||
static uint32_t check_sdcard(void) {
|
||||
if (sectrue != sdcard_power_on()) {
|
||||
return 0;
|
||||
@ -165,6 +168,7 @@ static secbool copy_sdcard(void) {
|
||||
|
||||
return sectrue;
|
||||
}
|
||||
#endif
|
||||
|
||||
int main(void) {
|
||||
reset_flags_reset();
|
||||
@ -184,11 +188,14 @@ int main(void) {
|
||||
clear_otg_hs_memory();
|
||||
|
||||
display_init();
|
||||
|
||||
#if defined TREZOR_MODEL_T
|
||||
sdcard_init();
|
||||
|
||||
if (check_sdcard()) {
|
||||
return copy_sdcard() == sectrue ? 0 : 3;
|
||||
}
|
||||
#endif
|
||||
|
||||
image_header hdr;
|
||||
|
||||
|
@ -32,9 +32,16 @@
|
||||
#include "icon_welcome.h"
|
||||
#include "icon_wipe.h"
|
||||
#include "mini_printf.h"
|
||||
#include "touch.h"
|
||||
#include "version.h"
|
||||
|
||||
#if defined TREZOR_MODEL_T
|
||||
#include "touch.h"
|
||||
#elif defined TREZOR_MODEL_R
|
||||
#include "button.h"
|
||||
#else
|
||||
#error Unknown Trezor model
|
||||
#endif
|
||||
|
||||
#define BACKLIGHT_NORMAL 150
|
||||
|
||||
#define COLOR_BL_BG COLOR_WHITE // background
|
||||
@ -342,6 +349,7 @@ void ui_fadeout(void) {
|
||||
|
||||
int ui_user_input(int zones) {
|
||||
for (;;) {
|
||||
#if defined TREZOR_MODEL_T
|
||||
uint32_t evt = touch_click();
|
||||
uint16_t x = touch_unpack_x(evt);
|
||||
uint16_t y = touch_unpack_y(evt);
|
||||
@ -365,5 +373,16 @@ int ui_user_input(int zones) {
|
||||
y < 54 + 32) {
|
||||
return INPUT_INFO;
|
||||
}
|
||||
#elif defined TREZOR_MODEL_R
|
||||
uint32_t evt = button_read();
|
||||
if (evt == (BTN_LEFT | BTN_EVT_DOWN)) {
|
||||
return INPUT_CANCEL;
|
||||
}
|
||||
if (evt == (BTN_RIGHT | BTN_EVT_DOWN)) {
|
||||
return INPUT_CONFIRM;
|
||||
}
|
||||
#else
|
||||
#error Unknown Trezor model
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
@ -29,7 +29,12 @@
|
||||
#include "mpu.h"
|
||||
#include "random_delays.h"
|
||||
#include "secbool.h"
|
||||
#ifdef TREZOR_MODEL_T
|
||||
#include "touch.h"
|
||||
#endif
|
||||
#if defined TREZOR_MODEL_R
|
||||
#include "button.h"
|
||||
#endif
|
||||
#include "usb.h"
|
||||
#include "version.h"
|
||||
|
||||
@ -239,8 +244,14 @@ static void check_bootloader_version(void) {
|
||||
int main(void) {
|
||||
random_delays_init();
|
||||
// display_init_seq();
|
||||
#if defined TREZOR_MODEL_T
|
||||
touch_init();
|
||||
touch_power_on();
|
||||
#endif
|
||||
|
||||
#if defined TREZOR_MODEL_R
|
||||
button_init();
|
||||
#endif
|
||||
|
||||
mpu_config_bootloader();
|
||||
|
||||
@ -252,6 +263,7 @@ int main(void) {
|
||||
|
||||
// delay to detect touch
|
||||
uint32_t touched = 0;
|
||||
#if defined TREZOR_MODEL_T
|
||||
for (int i = 0; i < 100; i++) {
|
||||
touched = touch_is_detected() | touch_read();
|
||||
if (touched) {
|
||||
@ -259,6 +271,12 @@ int main(void) {
|
||||
}
|
||||
hal_delay(1);
|
||||
}
|
||||
#elif defined TREZOR_MODEL_R
|
||||
button_read();
|
||||
if (button_state_left() == 1) {
|
||||
touched = 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
vendor_header vhdr;
|
||||
image_header hdr;
|
||||
@ -359,7 +377,24 @@ int main(void) {
|
||||
|
||||
if ((vhdr.vtrust & VTRUST_CLICK) == 0) {
|
||||
ui_screen_boot_click();
|
||||
#if defined TREZOR_MODEL_T
|
||||
touch_click();
|
||||
#elif defined TREZOR_MODEL_R
|
||||
for (;;) {
|
||||
button_read();
|
||||
if (button_state_left() != 0 && button_state_right() != 0) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
for (;;) {
|
||||
button_read();
|
||||
if (button_state_left() != 1 && button_state_right() != 1) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
#else
|
||||
#error Unknown Trezor model
|
||||
#endif
|
||||
}
|
||||
|
||||
ui_fadeout();
|
||||
|
@ -1,25 +1,45 @@
|
||||
#include STM32_HAL_H
|
||||
#include "button.h"
|
||||
|
||||
#define BTN_PIN_LEFT GPIO_PIN_5
|
||||
#define BTN_PIN_RIGHT GPIO_PIN_2
|
||||
#if defined TREZOR_MODEL_1
|
||||
#define BTN_LEFT_PIN GPIO_PIN_5
|
||||
#define BTN_LEFT_PORT GPIOC
|
||||
#define BTN_LEFT_CLK_ENA __HAL_RCC_GPIOC_CLK_ENABLE
|
||||
#define BTN_RIGHT_PIN GPIO_PIN_2
|
||||
#define BTN_RIGHT_PORT GPIOC
|
||||
#define BTN_RIGHT_CLK_ENA __HAL_RCC_GPIOC_CLK_ENABLE
|
||||
#elif defined TREZOR_MODEL_R
|
||||
#define BTN_LEFT_PIN GPIO_PIN_0
|
||||
#define BTN_LEFT_PORT GPIOA
|
||||
#define BTN_LEFT_CLK_ENA __HAL_RCC_GPIOA_CLK_ENABLE
|
||||
#define BTN_RIGHT_PIN GPIO_PIN_15
|
||||
#define BTN_RIGHT_PORT GPIOE
|
||||
#define BTN_RIGHT_CLK_ENA __HAL_RCC_GPIOE_CLK_ENABLE
|
||||
#else
|
||||
#error Unknown Trezor model
|
||||
#endif
|
||||
|
||||
static char last_left = 0, last_right = 0;
|
||||
|
||||
void button_init(void) {
|
||||
__HAL_RCC_GPIOC_CLK_ENABLE();
|
||||
BTN_LEFT_CLK_ENA();
|
||||
BTN_RIGHT_CLK_ENA();
|
||||
|
||||
GPIO_InitTypeDef GPIO_InitStructure;
|
||||
|
||||
GPIO_InitStructure.Mode = GPIO_MODE_INPUT;
|
||||
GPIO_InitStructure.Pull = GPIO_PULLUP;
|
||||
GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_LOW;
|
||||
GPIO_InitStructure.Pin = BTN_PIN_LEFT | BTN_PIN_RIGHT;
|
||||
HAL_GPIO_Init(GPIOC, &GPIO_InitStructure);
|
||||
GPIO_InitStructure.Pin = BTN_LEFT_PIN;
|
||||
HAL_GPIO_Init(BTN_LEFT_PORT, &GPIO_InitStructure);
|
||||
GPIO_InitStructure.Pin = BTN_RIGHT_PIN;
|
||||
HAL_GPIO_Init(BTN_RIGHT_PORT, &GPIO_InitStructure);
|
||||
}
|
||||
|
||||
uint32_t button_read(void) {
|
||||
static char last_left = 0, last_right = 0;
|
||||
char left = (GPIO_PIN_RESET == HAL_GPIO_ReadPin(GPIOC, BTN_PIN_LEFT));
|
||||
char right = (GPIO_PIN_RESET == HAL_GPIO_ReadPin(GPIOC, BTN_PIN_RIGHT));
|
||||
char left = (GPIO_PIN_RESET == HAL_GPIO_ReadPin(BTN_LEFT_PORT, BTN_LEFT_PIN));
|
||||
char right =
|
||||
(GPIO_PIN_RESET == HAL_GPIO_ReadPin(BTN_RIGHT_PORT, BTN_RIGHT_PIN));
|
||||
if (last_left != left) {
|
||||
last_left = left;
|
||||
if (left) {
|
||||
@ -38,3 +58,7 @@ uint32_t button_read(void) {
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
char button_state_left(void) { return last_left; }
|
||||
|
||||
char button_state_right(void) { return last_right; }
|
||||
|
@ -30,5 +30,7 @@
|
||||
|
||||
void button_init(void);
|
||||
uint32_t button_read(void);
|
||||
char button_state_left(void);
|
||||
char button_state_right(void);
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user