From b75c0a844d17fdf67d424d8aa85b42dc3a83b7a0 Mon Sep 17 00:00:00 2001 From: tychovrahe Date: Tue, 28 Jan 2025 13:42:29 +0100 Subject: [PATCH] feat(core): set haptic actuator for T3W1 [no changelog] --- .../io/haptic/drv2625/actuators/ld0625bc.h | 37 +++++++++++++++++++ .../io/haptic/drv2625/actuators/vg1040003d.h | 20 ++++++++++ core/embed/io/haptic/drv2625/drv2625.c | 7 ++++ core/embed/io/haptic/drv2625/drv2625.h | 25 +++++++++++-- core/embed/io/haptic/inc/io/haptic.h | 7 +--- .../models/T3W1/boards/trezor_t3w1_revA.h | 2 +- .../models/T3W1/boards/trezor_t3w1_revA0.h | 2 +- .../models/T3W1/boards/trezor_t3w1_revB.h | 2 +- 8 files changed, 90 insertions(+), 12 deletions(-) create mode 100644 core/embed/io/haptic/drv2625/actuators/ld0625bc.h diff --git a/core/embed/io/haptic/drv2625/actuators/ld0625bc.h b/core/embed/io/haptic/drv2625/actuators/ld0625bc.h new file mode 100644 index 0000000000..ea4e69f01f --- /dev/null +++ b/core/embed/io/haptic/drv2625/actuators/ld0625bc.h @@ -0,0 +1,37 @@ +/* + * 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 . + */ + +#pragma once + +#define ACTUATOR_LRA +#define ACTUATOR_CLOSED_LOOP + +#define ACTUATOR_FREQUENCY (260) +#define ACTUATOR_VOLTAGE (0.7) + +#define ACTUATOR_LRA_PERIOD ((int)((1000000 / ACTUATOR_FREQUENCY) / 24.615)) + +// open-loop mode +// V = 21.32 * 10^(-3) * OD_CLAMP * sqrt(1 - fLRA * 800 * 10^(-6)) +#define ACTUATOR_OD_CLAMP (37) + +// closed-loop mode +// V = (20.58 * 10^(-3) * RATED_VOLTAGE) / sqrt (1 - (4 * tSAMPLE_TIME + 300 * +// 10^(-6)) * fLRA) where tSAMPLE_TIME = 300us, by default +#define ACTUATOR_RATED_VOLTAGE (27) diff --git a/core/embed/io/haptic/drv2625/actuators/vg1040003d.h b/core/embed/io/haptic/drv2625/actuators/vg1040003d.h index e18e836aa1..038ca6f696 100644 --- a/core/embed/io/haptic/drv2625/actuators/vg1040003d.h +++ b/core/embed/io/haptic/drv2625/actuators/vg1040003d.h @@ -1,3 +1,23 @@ +/* + * 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 . + */ + +#pragma once #define ACTUATOR_LRA #define ACTUATOR_OPEN_LOOP diff --git a/core/embed/io/haptic/drv2625/drv2625.c b/core/embed/io/haptic/drv2625/drv2625.c index 9da82675d4..fd1e190150 100644 --- a/core/embed/io/haptic/drv2625/drv2625.c +++ b/core/embed/io/haptic/drv2625/drv2625.c @@ -150,10 +150,17 @@ bool haptic_init(void) { goto cleanup; } +#ifdef ACTUATOR_OPEN_LOOP if (!drv2625_set_reg(driver->i2c_bus, DRV2625_REG_OD_CLAMP, ACTUATOR_OD_CLAMP)) { goto cleanup; } +#elif defined ACTUATOR_CLOSED_LOOP + if (!drv2625_set_reg(driver->i2c_bus, DRV2625_REG_RATED_VOLTAGE, + ACTUATOR_RATED_VOLTAGE)) { + goto cleanup; + } +#endif if (!drv2625_set_reg(driver->i2c_bus, DRV2625_REG_LRA_WAVE_SHAPE, DRV2625_REG_LRA_WAVE_SHAPE_SINE)) { diff --git a/core/embed/io/haptic/drv2625/drv2625.h b/core/embed/io/haptic/drv2625/drv2625.h index fe67b2c77f..2c63a9715b 100644 --- a/core/embed/io/haptic/drv2625/drv2625.h +++ b/core/embed/io/haptic/drv2625/drv2625.h @@ -1,5 +1,23 @@ -#ifndef TREZOR_HAL_DRV_2625_H -#define TREZOR_HAL_DRV_2625_H +/* + * 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 . + */ + +#pragma once // I2C address of the DRV2625 on the I2C bus. #define DRV2625_I2C_ADDRESS 0x5A @@ -47,6 +65,7 @@ #define DRV2625_REG_GO_GO 0x01 #define DRV2625_REG_OD_CLAMP 0x20 +#define DRV2625_REG_RATED_VOLTAGE 0x20 #define DRV2625_REG_LRA_WAVE_SHAPE 0x2C #define DRV2625_REG_LRA_WAVE_SHAPE_SINE 0x01 @@ -183,5 +202,3 @@ typedef enum { SMOOTH_HUM_4_40 = 122, SMOOTH_HUM_5_20 = 123, } drv2625_lib_effect_t; - -#endif // TREZOR_HAL_DRV_2625_H diff --git a/core/embed/io/haptic/inc/io/haptic.h b/core/embed/io/haptic/inc/io/haptic.h index b6e1e26e3d..5fd3a51018 100644 --- a/core/embed/io/haptic/inc/io/haptic.h +++ b/core/embed/io/haptic/inc/io/haptic.h @@ -17,15 +17,14 @@ * along with this program. If not, see . */ -#ifndef TREZORHAL_HAPTIC_H -#define TREZORHAL_HAPTIC_H +#pragma once #include typedef enum { // Effect at the start of a button press HAPTIC_BUTTON_PRESS = 0, - // Effect at the and of hold-to-confirm action + // Effect at the end of hold-to-confirm action HAPTIC_HOLD_TO_CONFIRM = 1, } haptic_effect_t; @@ -86,5 +85,3 @@ bool haptic_play(haptic_effect_t effect); // // Returns `true` if the effect was successfully started. bool haptic_play_custom(int8_t amplitude_pct, uint16_t duration_ms); - -#endif // TREZORHAL_HAPTIC_H diff --git a/core/embed/models/T3W1/boards/trezor_t3w1_revA.h b/core/embed/models/T3W1/boards/trezor_t3w1_revA.h index daf289636d..302c0a7a95 100644 --- a/core/embed/models/T3W1/boards/trezor_t3w1_revA.h +++ b/core/embed/models/T3W1/boards/trezor_t3w1_revA.h @@ -121,7 +121,7 @@ #define TOUCH_INT_PIN GPIO_PIN_3 #define DRV2625_I2C_INSTANCE 2 -#define HAPTIC_ACTUATOR "actuators/vg1040003d.h" +#define HAPTIC_ACTUATOR "actuators/ld0625bc.h" #define DRV2625_TRIG_PIN GPIO_PIN_2 #define DRV2625_TRIG_PORT GPIOA #define DRV2625_TRIG_CLK_ENA __HAL_RCC_GPIOA_CLK_ENABLE diff --git a/core/embed/models/T3W1/boards/trezor_t3w1_revA0.h b/core/embed/models/T3W1/boards/trezor_t3w1_revA0.h index 44bdbfb880..fe76438552 100644 --- a/core/embed/models/T3W1/boards/trezor_t3w1_revA0.h +++ b/core/embed/models/T3W1/boards/trezor_t3w1_revA0.h @@ -120,7 +120,7 @@ #define TOUCH_INT_PIN GPIO_PIN_3 #define DRV2625_I2C_INSTANCE 2 -#define HAPTIC_ACTUATOR "actuators/vg1040003d.h" +#define HAPTIC_ACTUATOR "actuators/ld0625bc.h" #define DRV2625_TRIG_PIN GPIO_PIN_2 #define DRV2625_TRIG_PORT GPIOA #define DRV2625_TRIG_CLK_ENA __HAL_RCC_GPIOA_CLK_ENABLE diff --git a/core/embed/models/T3W1/boards/trezor_t3w1_revB.h b/core/embed/models/T3W1/boards/trezor_t3w1_revB.h index d29b67160b..047b7ea02c 100644 --- a/core/embed/models/T3W1/boards/trezor_t3w1_revB.h +++ b/core/embed/models/T3W1/boards/trezor_t3w1_revB.h @@ -121,7 +121,7 @@ #define TOUCH_INT_PIN GPIO_PIN_3 #define DRV2625_I2C_INSTANCE 2 -#define HAPTIC_ACTUATOR "actuators/vg1040003d.h" +#define HAPTIC_ACTUATOR "actuators/ld0625bc.h" #define DRV2625_TRIG_PIN GPIO_PIN_2 #define DRV2625_TRIG_PORT GPIOA #define DRV2625_TRIG_CLK_ENA __HAL_RCC_GPIOA_CLK_ENABLE