From 5d1fef1b53b10e656be667b733b66edd53af1737 Mon Sep 17 00:00:00 2001 From: dario Date: Fri, 9 Feb 2024 20:34:18 +0100 Subject: [PATCH] Fixed gpio pin implementation and SPI chip select --- include/sta/bus/spi/settings.hpp | 3 +-- include/sta/devices/arduino/bus/spi.hpp | 4 +++- include/sta/devices/arduino/gpio_pin.hpp | 17 ++++++++++++++--- include/sta/gpio_pin.hpp | 1 - src/devices/arduino/bus/spi.cpp | 10 ++++++++++ src/devices/arduino/gpio_pin.cpp | 6 +++++- 6 files changed, 33 insertions(+), 8 deletions(-) diff --git a/include/sta/bus/spi/settings.hpp b/include/sta/bus/spi/settings.hpp index 7118938..94ec06d 100644 --- a/include/sta/bus/spi/settings.hpp +++ b/include/sta/bus/spi/settings.hpp @@ -24,8 +24,7 @@ namespace sta * @ingroup sta_core_spi * @{ */ - - + /** * @brief %SPI clock polarity. */ diff --git a/include/sta/devices/arduino/bus/spi.hpp b/include/sta/devices/arduino/bus/spi.hpp index 9353863..903ba13 100644 --- a/include/sta/devices/arduino/bus/spi.hpp +++ b/include/sta/devices/arduino/bus/spi.hpp @@ -7,6 +7,8 @@ #include #include +#include + namespace sta { class ArduinoSPI : public SPI @@ -31,7 +33,7 @@ namespace sta class ArduinoSPIDevice : public SPIDevice { public: - ArduinoSPIDevice(ArduinoSPI * intf); + ArduinoSPIDevice(ArduinoSPI * intf, ArduinoGpioPin * csPin); }; } // namespace sta diff --git a/include/sta/devices/arduino/gpio_pin.hpp b/include/sta/devices/arduino/gpio_pin.hpp index 239ec93..64f90da 100644 --- a/include/sta/devices/arduino/gpio_pin.hpp +++ b/include/sta/devices/arduino/gpio_pin.hpp @@ -16,6 +16,16 @@ namespace sta { + /** + * @brief Describes the pin mode of the GPIO pin. + * + */ + enum class PinMode + { + GPIO_INPUT, + GPIO_OUTPUT + }; + /** * @brief A wrapper class for Arduino GPIO pins. * @@ -24,10 +34,11 @@ namespace sta class ArduinoGpioPin : public GpioPin { public: - /** - * @param pin Pin index + /** + * @param pin Pin index + * @param pinMode The pin mode */ - ArduinoGpioPin(uint16_t pin); + ArduinoGpioPin(uint16_t pin, PinMode mode); void setState(GpioPinState state) override; diff --git a/include/sta/gpio_pin.hpp b/include/sta/gpio_pin.hpp index 9a26f4c..6e06c64 100644 --- a/include/sta/gpio_pin.hpp +++ b/include/sta/gpio_pin.hpp @@ -15,7 +15,6 @@ namespace sta * @{ */ - /** * @brief GPIO pin state. */ diff --git a/src/devices/arduino/bus/spi.cpp b/src/devices/arduino/bus/spi.cpp index 23eb7e0..1d27e2a 100644 --- a/src/devices/arduino/bus/spi.cpp +++ b/src/devices/arduino/bus/spi.cpp @@ -54,6 +54,8 @@ namespace sta void ArduinoSPI::acquire() { + SPI::acquire(); + const SPISettings & set = settings(); uint8_t dataMode; @@ -98,5 +100,13 @@ namespace sta void ArduinoSPI::release() { SPIClass::endTransaction(); + + SPI::release(); + } + + ArduinoSPIDevice::ArduinoSPIDevice(ArduinoSPI * intf, ArduinoGpioPin * csPin) + : SPIDevice{intf, csPin} + { + csPin->setState(GpioPinState::GPIO_HIGH); } } // namespace sta diff --git a/src/devices/arduino/gpio_pin.cpp b/src/devices/arduino/gpio_pin.cpp index 1d3b232..970c353 100644 --- a/src/devices/arduino/gpio_pin.cpp +++ b/src/devices/arduino/gpio_pin.cpp @@ -6,7 +6,11 @@ namespace sta { - ArduinoGpioPin::ArduinoGpioPin(uint16_t pin) : pin_{pin} { } + ArduinoGpioPin::ArduinoGpioPin(uint16_t pin, PinMode mode) + : pin_{pin} + { + pinMode(pin, (mode == PinMode::GPIO_OUTPUT) ? OUTPUT : INPUT); + } void ArduinoGpioPin::setState(GpioPinState state) {