diff options
| author | jacqueline <me@jacqueline.id.au> | 2024-04-19 16:52:33 +1000 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2024-04-19 16:52:33 +1000 |
| commit | 5b99267cb9f0344e519956096867aea5468ecf9f (patch) | |
| tree | 9a6fd47602c4a4971434b1ed30142fd383ca8cdb /src/drivers/include | |
| parent | 8e113ea9ae595b1bc37e7a567b0bc6b90ec81c05 (diff) | |
| parent | 7c075cf5b776feaed2065f936dff0c176635b89d (diff) | |
| download | tangara-fw-5b99267cb9f0344e519956096867aea5468ecf9f.tar.gz | |
Merge branch 'main' of codeberg.org:cool-tech-zone/tangara-fw
Diffstat (limited to 'src/drivers/include')
| -rw-r--r-- | src/drivers/include/haptics.hpp | 50 | ||||
| -rw-r--r-- | src/drivers/include/nvs.hpp | 6 |
2 files changed, 38 insertions, 18 deletions
diff --git a/src/drivers/include/haptics.hpp b/src/drivers/include/haptics.hpp index 6cfcbb0d..940c3c6d 100644 --- a/src/drivers/include/haptics.hpp +++ b/src/drivers/include/haptics.hpp @@ -11,13 +11,24 @@ #include <mutex> #include <optional> #include <string> +#include <variant> namespace drivers { +typedef std::monostate ErmMotor; +struct LraMotor { + // TODO: fill out with calibration data from https://www.ti.com/lit/ds/symlink/drv2605l.pdf + bool hi; +}; + class Haptics { public: - static auto Create() -> Haptics* { return new Haptics(); } - Haptics(); + static auto Create(const std::variant<ErmMotor, LraMotor>& motor) + -> Haptics* { + return new Haptics(motor); + } + + Haptics(const std::variant<ErmMotor, LraMotor>& motor); ~Haptics(); // Not copyable or movable. @@ -169,11 +180,12 @@ class Haptics { B = 2, // 3V, Rise: 40-60ms, Brake: 5-15ms C = 3, // 3V, Rise: 60-80ms, Brake: 10-20ms D = 4, // 3V, Rise: 100-140ms, Brake: 15-25ms - E = 5 // 3V, Rise: >140ms, Brake: >30ms - // 6 is LRA-only, 7 is 4.5V+ + E = 5, // 3V, Rise: >140ms, Brake: >30ms + LRA = 6 + // 7 is 4.5V+ }; - static constexpr Library kDefaultLibrary = Library::C; + static constexpr Library kDefaultErmLibrary = Library::C; auto PowerDown() -> void; auto Reset() -> void; @@ -214,10 +226,12 @@ class Haptics { }; struct ControlMask { - // Control1 + // FeedbackControl static constexpr uint8_t kNErmLra = 0b10000000; + // Control3 static constexpr uint8_t kErmOpenLoop = 0b00100000; + static constexpr uint8_t kLraOpenLoop = 0b00000001; }; // ยง8.6 Register Map @@ -257,12 +271,12 @@ class Haptics { // A bunch of different options, not grouped // in any particular sensible way - kControl1 = 0x1A, - kControl2 = 0x1B, - kControl3 = 0x1C, - kControl4 = 0x1D, - kControl5 = 0x1E, - kControl6 = 0x1F, + kFeedbackControl = 0x1A, + kControl1 = 0x1B, + kControl2 = 0x1C, + kControl3 = 0x1D, + kControl4 = 0x1E, + kControl5 = 0x1F, kSupplyVoltageMonitor = 0x21, // "VBAT" kLraResonancePeriod = 0x22, @@ -295,12 +309,12 @@ class Haptics { kOverdriveClampVoltage = 0x8C, kAutoCalibrationCompensationResult = 0x0C, kAutoCalibrationBackEmfResult = 0x6C, - kControl1 = 0x36, - kControl2 = 0x93, - kControl3 = 0xF5, - kControl4 = 0xA0, - kControl5 = 0x20, - kControl6 = 0x80, + kFeedbackControl = 0x36, + kControl1 = 0x93, + kControl2 = 0xF5, + kControl3 = 0xA0, + kControl4 = 0x20, + kControl5 = 0x80, kSupplyVoltageMonitor = 0, kLraResonancePeriod = 0, }; diff --git a/src/drivers/include/nvs.hpp b/src/drivers/include/nvs.hpp index 25396622..7c74ceb0 100644 --- a/src/drivers/include/nvs.hpp +++ b/src/drivers/include/nvs.hpp @@ -68,6 +68,7 @@ class NvsStorage { auto Read() -> void; auto Write() -> bool; + // Hardware Compatibility auto LockPolarity() -> bool; auto LockPolarity(bool) -> void; @@ -76,6 +77,10 @@ class NvsStorage { auto DisplaySize(std::pair<std::optional<uint16_t>, std::optional<uint16_t>>) -> void; + auto HapticMotorIsErm() -> bool; + auto HapticMotorIsErm(bool) -> void; + // /Hardware Compatibility + auto PreferredBluetoothDevice() -> std::optional<bluetooth::MacAndName>; auto PreferredBluetoothDevice(std::optional<bluetooth::MacAndName>) -> void; @@ -130,6 +135,7 @@ class NvsStorage { Setting<uint8_t> lock_polarity_; Setting<uint16_t> display_cols_; Setting<uint16_t> display_rows_; + Setting<uint8_t> haptic_motor_type_; Setting<uint8_t> brightness_; Setting<uint8_t> sensitivity_; |
