/** * @file * @brief Wrapper for STM32 GPIO pins. */ #ifndef STA_STM32_GPIO_PIN_HPP #define STA_STM32_GPIO_PIN_HPP /** * @defgroup stm32GPIO GPIO * @ingroup stm32 * @brief STM32 GPIO module. */ #ifdef DOXYGEN /** * @def STA_STM32_GPIO_ENABLE * @brief Enable module. * * @ingroup stm32BuildConfig */ # define STA_STM32_GPIO_ENABLE #endif // DOXYGEN #include #ifdef STA_STM32_GPIO_ENABLE #include #include namespace sta { /** * @brief Container for STM GPIO Pin data. * * @ingroup stm32GPIO */ class STM32GpioPin : public GpioPin { public: /** * @param port GPIO port * @param pin Pin index */ STM32GpioPin(GPIO_TypeDef * port, uint16_t pin); void setState(GpioPinState state) override; /** * @brief Get GPIO port for pin. * * @return GPIO port */ GPIO_TypeDef * getPort() const; /** * @brief Get pin index for pin. * * @return Pin index */ uint16_t getPin() const; /** * @brief Get GPIO port index for pin. * * @return GPIO port index */ uint8_t getPortIndex() const; private: GPIO_TypeDef * port_; /**< GPIO port */ uint16_t pin_; /**< GPIO pin */ }; /** * @brief Interrupt trigger edge. */ enum class InterruptEdge { RISING, /**< Rising edge */ FALLING, /**< Falling edge */ BOTH /**< Rising and falling edge */ }; /** * @brief Check pin EXIT pin configuration. * * @param pin GPIO pin * @param edge Interrupt trigger edge * @return True if EXIT pin and trigger edge matches */ bool isInterruptEdge(const STM32GpioPin & pin, InterruptEdge edge); } // namespace sta /** * @brief Create STM32GpioPin object from pin label. * * @param label Pin label * * @ingroup stm32GPIO */ #define STA_STM32_GPIO_PIN(label) sta::STM32GpioPin{label##_GPIO_Port, label##_Pin} #endif // STA_STM32_GPIO_ENABLE #endif // STA_STM32_GPIO_PIN_HPP