diff options
| author | jacqueline <me@jacqueline.id.au> | 2024-03-20 11:43:33 +1100 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2024-03-20 11:43:33 +1100 |
| commit | a05d93a1e26181237a76da5ce398c6b08497d591 (patch) | |
| tree | 3c71ba717dbb04b398ef3f19ad1ac0e0eaab3f98 /src/drivers/gpios.cpp | |
| parent | 46e67437717975c10c62775a3f40bec84ac4f44c (diff) | |
| download | tangara-fw-a05d93a1e26181237a76da5ce398c6b08497d591.tar.gz | |
Start using the lock switch polarity bit in nvs
Diffstat (limited to 'src/drivers/gpios.cpp')
| -rw-r--r-- | src/drivers/gpios.cpp | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/src/drivers/gpios.cpp b/src/drivers/gpios.cpp index 5c255204..aab932a7 100644 --- a/src/drivers/gpios.cpp +++ b/src/drivers/gpios.cpp @@ -63,8 +63,8 @@ constexpr std::pair<uint8_t, uint8_t> unpack(uint16_t ba) { static constexpr gpio_num_t kIntPin = GPIO_NUM_34; -auto Gpios::Create() -> Gpios* { - Gpios* instance = new Gpios(); +auto Gpios::Create(bool invert_lock) -> Gpios* { + Gpios* instance = new Gpios(invert_lock); // Read and write initial values on initialisation so that we do not have a // strange partially-initialised state. if (!instance->Flush() || !instance->Read()) { @@ -73,7 +73,10 @@ auto Gpios::Create() -> Gpios* { return instance; } -Gpios::Gpios() : ports_(pack(kPortADefault, kPortBDefault)), inputs_(0) { +Gpios::Gpios(bool invert_lock) + : ports_(pack(kPortADefault, kPortBDefault)), + inputs_(0), + invert_lock_switch_(invert_lock) { gpio_set_direction(kIntPin, GPIO_MODE_INPUT); } @@ -108,6 +111,15 @@ auto Gpios::Get(Pin pin) const -> bool { return (inputs_ & (1 << static_cast<int>(pin))) > 0; } +auto Gpios::IsLocked() const -> bool { + bool pin = Get(Pin::kKeyLock); + if (invert_lock_switch_) { + return pin; + } else { + return !pin; + } +} + auto Gpios::Read() -> bool { uint8_t input_a, input_b; |
