Change GPIO input to polling (#484)

* add code to attach timer isr

* call timer ISR every 100 ms

* implement gpio input logic

* do not attach ISR for general input PINs

* add debounce code

* execute lock actions on GPIO input

* only register timer ISR if input PINs are configured

* remove gpio2go lib
This commit is contained in:
Jan-Ole Schümann
2024-10-13 23:01:04 +07:00
committed by GitHub
parent 3f0ef34c9e
commit fed5f95490
12 changed files with 166 additions and 582 deletions

View File

@@ -43,7 +43,8 @@ enum class GpioAction
DeactivateRtoCm,
DeactivateRTO,
DeactivateCM,
GeneralInput
GeneralInput,
None
};
struct PinEntry
@@ -70,7 +71,8 @@ public:
const std::vector<int> getDisabledPins() const;
const PinRole getPinRole(const int& pin) const;
String getRoleDescription(PinRole role) const;
String getRoleDescription(const PinRole& role) const;
void getConfigurationText(String& text, const std::vector<PinEntry>& pinConfiguration, const String& linebreak = "\n") const;
const std::vector<PinRole>& getAllRoles() const;
@@ -79,7 +81,9 @@ public:
private:
void IRAM_ATTR notify(const GpioAction& action, const int& pin);
static void inputCallback(const int & pin);
void IRAM_ATTR onTimer();
bool IRAM_ATTR isTriggered(const PinEntry& pinEntry);
GpioAction IRAM_ATTR getGpioAction(const PinRole& role) const;
#if defined(CONFIG_IDF_TARGET_ESP32C3)
//Based on https://docs.espressif.com/projects/esp-idf/en/stable/esp32c3/api-reference/peripherals/gpio.html and https://www.espressif.com/sites/default/files/documentation/esp32-c3_datasheet_en.pdf
@@ -125,22 +129,14 @@ private:
std::vector<PinEntry> _pinConfiguration;
static const uint _debounceTime;
static void IRAM_ATTR isrLock();
static void IRAM_ATTR isrUnlock();
static void IRAM_ATTR isrUnlatch();
static void IRAM_ATTR isrLockNgo();
static void IRAM_ATTR isrLockNgoUnlatch();
static void IRAM_ATTR isrElectricStrikeActuation();
static void IRAM_ATTR isrActivateRTO();
static void IRAM_ATTR isrActivateCM();
static void IRAM_ATTR isrDeactivateRtoCm();
static void IRAM_ATTR isrDeactivateRTO();
static void IRAM_ATTR isrDeactivateCM();
static void IRAM_ATTR isrOnTimer();
std::vector<std::function<void(const GpioAction&, const int&)>> _callbacks;
static Gpio* _inst;
static int64_t _debounceTs;
std::vector<int8_t> _triggerCount;
hw_timer_t* timer = nullptr;
Preferences* _preferences = nullptr;
};