From 4eb1053ffd465e068d50953c0ad527b3c543bf65 Mon Sep 17 00:00:00 2001 From: Dario Date: Tue, 16 May 2023 22:19:08 +0100 Subject: [PATCH] Modified GpioPin to offer PinState reading --- include/sta/gpio_pin.hpp | 7 +++++++ include/sta/raspi/gpio_pin.hpp | 2 ++ src/raspi/gpio_pin.cpp | 15 +++++++++++++-- src/raspi/spi.cpp | 2 +- 4 files changed, 23 insertions(+), 3 deletions(-) diff --git a/include/sta/gpio_pin.hpp b/include/sta/gpio_pin.hpp index c3ef231..9a26f4c 100644 --- a/include/sta/gpio_pin.hpp +++ b/include/sta/gpio_pin.hpp @@ -37,6 +37,13 @@ namespace sta * @param state Output state */ virtual void setState(GpioPinState state) = 0; + + /** + * @brief Get pin input state. + * + * @param state Input state + */ + virtual GpioPinState getState() = 0; }; diff --git a/include/sta/raspi/gpio_pin.hpp b/include/sta/raspi/gpio_pin.hpp index 10aa951..6f64fc7 100644 --- a/include/sta/raspi/gpio_pin.hpp +++ b/include/sta/raspi/gpio_pin.hpp @@ -31,6 +31,8 @@ namespace sta void setState(GpioPinState state) override; + GpioPinState getState() override; + static RaspiGpioPin * DUMMY_GPIO; private: diff --git a/src/raspi/gpio_pin.cpp b/src/raspi/gpio_pin.cpp index a1b8898..af3e210 100644 --- a/src/raspi/gpio_pin.cpp +++ b/src/raspi/gpio_pin.cpp @@ -6,7 +6,7 @@ namespace sta { - RaspiGpioPin::RaspiGpioPin(uint8_t pin, GpioMode mode) : pin_{pin}, mode_{mode} + RaspiGpioPin::RaspiGpioPin(uint8_t pin, GpioMode mode) : pin_{ pin }, mode_{ mode } { pinMode(pin, mode == GpioMode::GPIO_INPUT ? INPUT : OUTPUT); } @@ -16,11 +16,22 @@ namespace sta digitalWrite(pin_, state == GpioPinState::GPIO_LOW ? LOW : HIGH); } - class DummyGpioPin : public RaspiGpioPin { + GpioPinState RaspiGpioPin::getState() + { + return digitalRead(pin_) == LOW ? GpioPinState::GPIO_LOW : GpioPinState::GPIO_HIGH; + } + + class DummyGpioPin : public RaspiGpioPin + { public: DummyGpioPin() : RaspiGpioPin { 0, GpioMode::GPIO_INPUT } {} void setState(GpioPinState state) override {} + + GpioPinState getState() override { + // This should really never be called since the code might rely on the returned value to be accurate. + STA_UNREACHABLE(); + } }; static DummyGpioPin dummyGpio; diff --git a/src/raspi/spi.cpp b/src/raspi/spi.cpp index 600b1cc..1b60e6b 100644 --- a/src/raspi/spi.cpp +++ b/src/raspi/spi.cpp @@ -133,7 +133,7 @@ namespace sta if (result == -1) { printf("Sending failed with error '%s'! \n", strerror(errno)); - } + } STA_DEBUG_IOCTL_SEND(result); }