Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion core/embed/boardloader/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -264,7 +264,7 @@ static secbool try_bootloader_update(bool do_update, bool auto_reboot) {

if (sectrue != check_image_contents_ADV(NULL, &file_hdr,
boardloader_buf + file_hdr.hdrlen, 0,
file_hdr.codelen))
file_hdr.codelen, true))
return secfalse;

// check header stated size matchs file size
Expand Down
43 changes: 42 additions & 1 deletion core/embed/extmod/modtrezorio/modtrezorio-fingerprint.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
*/

#include "fingerprint.h"
#include "fpsensor_driver.h"
/// package: trezorio.fingerprint

/// class FpError(OSError):
Expand Down Expand Up @@ -252,7 +253,7 @@ STATIC mp_obj_t mod_trezorio_fingerprint_list_template(void) {
STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorio_fingerprint_list_template_obj,
mod_trezorio_fingerprint_list_template);

/// def sleep() -> bool:
/// def sleep() -> bool:
/// """
/// make fingerprint sensor to sleep mode.
/// """
Expand All @@ -267,6 +268,42 @@ STATIC mp_obj_t mod_trezorio_fingerprint_sleep(void) {
STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorio_fingerprint_sleep_obj,
mod_trezorio_fingerprint_sleep);

/// def set_sensitivity_and_area(sensitivity: int, area: int) -> bool:
/// """
/// Set fingerprint sensor sensitivity and area.
/// """

STATIC mp_obj_t mod_trezorio_fingerprint_set_sensitivity_and_area(
mp_obj_t sensitivity, mp_obj_t area) {
uint8_t sensitivity_ = trezor_obj_get_uint8(sensitivity);
uint8_t area_ = trezor_obj_get_uint8(area);
fpsensor_set_config_param(sensitivity_, area_);
return mp_const_true;
}

STATIC MP_DEFINE_CONST_FUN_OBJ_2(
mod_trezorio_fingerprint_set_sensitivity_and_area_obj,
mod_trezorio_fingerprint_set_sensitivity_and_area);

/// def get_sensitivity_and_area() -> tuple[int, int]:
/// """
/// Get fingerprint sensor sensitivity and area.
/// """

STATIC mp_obj_t mod_trezorio_fingerprint_get_sensitivity_and_area(void) {
uint32_t sensitivity;
uint16_t area;
fpsensor_get_config_param(&sensitivity, &area);
mp_obj_tuple_t *tuple = MP_OBJ_TO_PTR(mp_obj_new_tuple(2, NULL));
tuple->items[0] = MP_OBJ_NEW_SMALL_INT(sensitivity);
tuple->items[1] = MP_OBJ_NEW_SMALL_INT(area);
return MP_OBJ_FROM_PTR(tuple);
}

STATIC MP_DEFINE_CONST_FUN_OBJ_0(
mod_trezorio_fingerprint_get_sensitivity_and_area_obj,
mod_trezorio_fingerprint_get_sensitivity_and_area);

STATIC const mp_rom_map_elem_t mod_trezorio_fingerprint_globals_table[] = {
{MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_fingerprint)},

Expand Down Expand Up @@ -295,6 +332,10 @@ STATIC const mp_rom_map_elem_t mod_trezorio_fingerprint_globals_table[] = {
{MP_ROM_QSTR(MP_QSTR_ExtractFeatureFail),
MP_ROM_PTR(&mp_type_ExtractFeatureFail)},
{MP_ROM_QSTR(MP_QSTR_NotMatch), MP_ROM_PTR(&mp_type_NotMatch)},
{MP_ROM_QSTR(MP_QSTR_set_sensitivity_and_area),
MP_ROM_PTR(&mod_trezorio_fingerprint_set_sensitivity_and_area_obj)},
{MP_ROM_QSTR(MP_QSTR_get_sensitivity_and_area),
MP_ROM_PTR(&mod_trezorio_fingerprint_get_sensitivity_and_area_obj)},
};

STATIC MP_DEFINE_CONST_DICT(mod_trezorio_fingerprint_globals,
Expand Down
5 changes: 5 additions & 0 deletions core/embed/extmod/modtrezorutils/modtrezorutils.c
Original file line number Diff line number Diff line change
Expand Up @@ -632,6 +632,11 @@ STATIC const mp_rom_map_elem_t mp_module_trezorutils_globals_table[] = {
#else
{MP_ROM_QSTR(MP_QSTR_EMULATOR), mp_const_false},
#endif
#if PRODUCTION
{MP_ROM_QSTR(MP_QSTR_PRODUCTION), mp_const_true},
#else
{MP_ROM_QSTR(MP_QSTR_PRODUCTION), mp_const_false},
#endif
#if BITCOIN_ONLY
{MP_ROM_QSTR(MP_QSTR_BITCOIN_ONLY), mp_const_true},
#else
Expand Down
2 changes: 1 addition & 1 deletion core/embed/fp_sensor_wrapper/fingerprint.c
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ void fingerprint_init(void)
ensure_ex(fpsensor_hard_reset(), FPSENSOR_OK, "fpsensor_hard_reset failed");
ensure_ex(fpsensor_init(), FPSENSOR_OK, "fpsensor_init failed");
ensure_ex(fpsensor_adc_init(18, 13, 4, 3), FPSENSOR_OK, "fpsensor_adc_init failed");
ensure_ex(fpsensor_set_config_param(0xC0, 10), FPSENSOR_OK, "fpsensor_set_config_param failed");
ensure_ex(fpsensor_set_config_param(0xC0, 8), FPSENSOR_OK, "fpsensor_set_config_param failed");
if ( FpAlgorithmInit(TEMPLATE_ADDR_START) == FPSENSOR_OK )
{
fingerprint_module_status = true;
Expand Down
6 changes: 6 additions & 0 deletions core/embed/fp_sensor_wrapper/fpsensor_common.c
Original file line number Diff line number Diff line change
Expand Up @@ -205,3 +205,9 @@ uint8_t fpsensor_set_config_param(uint32_t u32FingerStatusThres, uint16_t u16Fin

return FPSENSOR_OK;
}

void fpsensor_get_config_param(uint32_t* u32FingerStatusThres, uint16_t* u16FingerArea)
{
*u32FingerStatusThres = g_u32FPStatusThres;
*u16FingerArea = g_u16FingerArea;
}
1 change: 1 addition & 0 deletions core/embed/fp_sensor_wrapper/fpsensor_driver.h
Original file line number Diff line number Diff line change
Expand Up @@ -260,5 +260,6 @@ uint8_t fpsesor_read_testpattern(uint8_t* pu8bufimage, uint32_t length, uint8_t
* Others: 无
*/
uint8_t fpsensor_set_config_param(uint32_t u32FingerStatusThres, uint16_t u16FingerArea);
void fpsensor_get_config_param(uint32_t* u32FingerStatusThres, uint16_t* u16FingerArea);

#endif
19 changes: 18 additions & 1 deletion core/mocks/generated/trezorio/fingerprint.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,24 @@ def list_template() -> tuple[int | None] | None:
List fingerprints.
returns: tuple of fingerprint ids
"""
def sleep() -> bool:


# extmod/modtrezorio/modtrezorio-fingerprint.h
def sleep() -> bool:
"""
make fingerprint sensor to sleep mode.
"""


# extmod/modtrezorio/modtrezorio-fingerprint.h
def set_sensitivity_and_area(sensitivity: int, area: int) -> bool:
"""
Set fingerprint sensor sensitivity and area.
"""


# extmod/modtrezorio/modtrezorio-fingerprint.h
def get_sensitivity_and_area() -> tuple[int, int]:
"""
Get fingerprint sensor sensitivity and area.
"""
126 changes: 126 additions & 0 deletions core/src/trezor/lvglui/scrs/homescreen.py
Original file line number Diff line number Diff line change
Expand Up @@ -1552,6 +1552,11 @@ def __init__(self, prev_scr=None):
_(i18n_keys.ITEM__ABOUT_DEVICE),
left_img_src="A:/res/about.png",
)
if not utils.PRODUCTION:
self.fp_test = ListItemBtn(
self.container,
"指纹测试",
)
self.container.add_event_cb(self.on_click, lv.EVENT.CLICKED, None)

def refresh_text(self):
Expand Down Expand Up @@ -1589,6 +1594,8 @@ def on_click(self, event_obj):
AirGapSetting(self)
elif target == self.fido_keys:
FidoKeysSetting(self)
elif not utils.PRODUCTION and target == self.fp_test:
FingerprintTest(self)


class ConnectWalletWays(Screen):
Expand Down Expand Up @@ -2721,6 +2728,125 @@ def on_value_changed(self, event_obj):
self.percent5.set_text(f"{value} ms")


class FingerprintTest(Screen):
def __init__(self, prev_scr=None):
if not hasattr(self, "_init"):
self._init = True
kwargs = {
"prev_scr": prev_scr,
"nav_back": True,
}
super().__init__(**kwargs)
else:
return

from trezorio import fingerprint

sensitivity, area = fingerprint.get_sensitivity_and_area()

self.sensitivity = sensitivity
self.area = area

# region
self.app_drawer_up = lv.label(self.content_area)
self.app_drawer_up.set_size(456, lv.SIZE.CONTENT)
self.app_drawer_up.add_style(
StyleWrapper()
.pad_all(12)
.text_font(font_GeistRegular30)
.text_color(lv_colors.WHITE),
0,
)
self.app_drawer_up.set_text("按压阈值:")
self.app_drawer_up.align_to(self.nav_back, lv.ALIGN.OUT_BOTTOM_LEFT, 12, 20)

self.slider = lv.slider(self.content_area)
self.slider.set_size(456, 80)
self.slider.set_ext_click_area(20)
self.slider.set_range(20, 250)
self.slider.set_value(self.sensitivity, lv.ANIM.OFF)
self.slider.align_to(self.app_drawer_up, lv.ALIGN.OUT_BOTTOM_LEFT, 0, 20)

self.slider.add_style(
StyleWrapper().border_width(0).radius(40).bg_color(lv_colors.GRAY_1), 0
)
self.slider.add_style(
StyleWrapper().bg_color(lv_colors.WHITE).pad_all(-50), lv.PART.KNOB
)
self.slider.add_style(
StyleWrapper().radius(0).bg_color(lv_colors.WHITE), lv.PART.INDICATOR
)
self.percent = lv.label(self.slider)
self.percent.align(lv.ALIGN.CENTER, 0, 0)
self.percent.add_style(
StyleWrapper().text_font(font_GeistRegular30).text_color(lv_colors.RED),
0,
)
self.percent.set_text(f"{self.sensitivity}")
self.slider.clear_flag(lv.obj.FLAG.GESTURE_BUBBLE)
self.slider.add_flag(lv.obj.FLAG.EVENT_BUBBLE)

self.app_drawer_up_delay = lv.label(self.content_area)
self.app_drawer_up_delay.set_size(456, lv.SIZE.CONTENT)
self.app_drawer_up_delay.add_style(
StyleWrapper()
.pad_all(12)
.text_font(font_GeistRegular30)
.text_color(lv_colors.WHITE),
0,
)
self.app_drawer_up_delay.set_text("面积:")
self.app_drawer_up_delay.align_to(self.slider, lv.ALIGN.OUT_BOTTOM_LEFT, 0, 20)

self.slider1 = lv.slider(self.content_area)
self.slider1.set_size(456, 80)
self.slider1.set_ext_click_area(20)
self.slider1.set_range(1, 12)
self.slider1.set_value(self.area, lv.ANIM.OFF)
self.slider1.align_to(self.app_drawer_up_delay, lv.ALIGN.OUT_BOTTOM_LEFT, 0, 20)

self.slider1.add_style(
StyleWrapper().border_width(0).radius(40).bg_color(lv_colors.GRAY_1), 0
)
self.slider1.add_style(
StyleWrapper().bg_color(lv_colors.WHITE).pad_all(-50), lv.PART.KNOB
)
self.slider1.add_style(
StyleWrapper().radius(0).bg_color(lv_colors.WHITE), lv.PART.INDICATOR
)
self.percent1 = lv.label(self.slider1)
self.percent1.align(lv.ALIGN.CENTER, 0, 0)
self.percent1.add_style(
StyleWrapper().text_font(font_GeistRegular30).text_color(lv_colors.RED),
0,
)
self.percent1.set_text(f"{self.area}")
self.slider1.clear_flag(lv.obj.FLAG.GESTURE_BUBBLE)
self.slider1.add_flag(lv.obj.FLAG.EVENT_BUBBLE)
# endregion

self.add_event_cb(self.on_value_changed, lv.EVENT.VALUE_CHANGED, None)
# self.add_event_cb(self.on_click, lv.EVENT.CLICKED, None)

def on_nav_back(self, event_obj):
pass

def on_value_changed(self, event_obj):
from trezorio import fingerprint

target = event_obj.get_target()
if target == self.slider:
value = target.get_value()
self.sensitivity = value
self.percent.set_text(f"{value}")
fingerprint.set_sensitivity_and_area(value, self.area)
elif target == self.slider1:
value = target.get_value()
self.area = value
self.percent1.set_text(f"{value}")
fingerprint.set_sensitivity_and_area(self.sensitivity, value)


class GeneralScreen(AnimScreen):
cur_language = ""

Expand Down
1 change: 1 addition & 0 deletions core/src/trezor/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
BW_STANDARD,
BW_URL,
BW_MINIMAL,
PRODUCTION,
consteq,
firmware_hash,
firmware_vendor,
Expand Down
Loading