summaryrefslogtreecommitdiff
path: root/src/drivers/gpios.cpp
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2023-08-18 15:40:24 +1000
committerjacqueline <me@jacqueline.id.au>2023-08-18 15:40:24 +1000
commitcad70605401e8fa30811e8c68a0cc5c014438942 (patch)
tree42307c27b01ce80b1e9038dea6dca2d4aa94eae1 /src/drivers/gpios.cpp
parent697ec3c5843c66253f73572c26b9b4885680d56c (diff)
downloadtangara-fw-cad70605401e8fa30811e8c68a0cc5c014438942.tar.gz
Add interrupts for samd changes
Diffstat (limited to 'src/drivers/gpios.cpp')
-rw-r--r--src/drivers/gpios.cpp15
1 files changed, 8 insertions, 7 deletions
diff --git a/src/drivers/gpios.cpp b/src/drivers/gpios.cpp
index f6293697..412c091f 100644
--- a/src/drivers/gpios.cpp
+++ b/src/drivers/gpios.cpp
@@ -58,7 +58,9 @@ constexpr std::pair<uint8_t, uint8_t> unpack(uint16_t ba) {
return std::pair((uint8_t)ba, (uint8_t)(ba >> 8));
}
-void interrupt_isr(void* arg) {
+SemaphoreHandle_t Gpios::sReadPending;
+
+static void interrupt_isr(void* arg) {
SemaphoreHandle_t sem = reinterpret_cast<SemaphoreHandle_t>(arg);
xSemaphoreGive(sem);
}
@@ -73,10 +75,7 @@ auto Gpios::Create() -> Gpios* {
return instance;
}
-Gpios::Gpios()
- : ports_(pack(kPortADefault, kPortBDefault)),
- inputs_(0),
- read_pending_(xSemaphoreCreateBinary()) {
+Gpios::Gpios() : ports_(pack(kPortADefault, kPortBDefault)), inputs_(0) {
gpio_config_t config{
.pin_bit_mask = static_cast<uint64_t>(1) << GPIO_NUM_34,
.mode = GPIO_MODE_INPUT,
@@ -87,6 +86,7 @@ Gpios::Gpios()
gpio_config(&config);
gpio_install_isr_service(ESP_INTR_FLAG_LOWMED | ESP_INTR_FLAG_SHARED |
ESP_INTR_FLAG_IRAM);
+ gpio_isr_handler_add(GPIO_NUM_34, &interrupt_isr, sReadPending);
}
Gpios::~Gpios() {
@@ -141,8 +141,9 @@ auto Gpios::Read() -> bool {
return true;
}
-auto Gpios::InstallReadPendingISR() -> void {
- gpio_isr_handler_add(GPIO_NUM_34, &interrupt_isr, read_pending_);
+auto Gpios::CreateReadPending() -> SemaphoreHandle_t {
+ sReadPending = xSemaphoreCreateBinary();
+ return sReadPending;
}
} // namespace drivers