Files
Shmingo-HAL/SHAL/Include/Peripheral/GPIO/SHAL_GPIO.h

66 lines
1.1 KiB
C++

//
// Created by Luca on 8/29/2025.
//
#ifndef SHMINGO_HAL_SHAL_GPIO_H
#define SHMINGO_HAL_SHAL_GPIO_H
#include "SHAL_CORE.h"
#include <cassert>
#include "SHAL_GPIO_REG_F072xB.h"
enum class PinMode {
INPUT_MODE,
OUTPUT_MODE,
ALTERNATE_FUNCTION_MODE,
ANALOG_MODE,
INVALID
};
unsigned long getPinMode(PinMode mode);
//Abstraction of GPIO registers
class GPIO{
public:
void toggle();
//TODO replace stupid offset hack from APB
void setHigh();
void setLow();
private:
friend class GPIOManager;
explicit GPIO(GPIO_Key key, PinMode pinMode);
GPIO();
GPIO_Key m_GPIO_KEY = GPIO_Key::INVALID;
PinMode m_pinMode = PinMode::INVALID;
GPIO_TypeDef* p_GPIORegister = nullptr;
unsigned long m_offset = 0;
};
#define initGPIO(GPIO_KEY, PIN_MODE) GPIOManager::get(GPIO_KEY, PIN_MODE)
//Manages instances of GPIO objects
class GPIOManager{
public:
static GPIO* get(GPIO_Key, PinMode pinMode);
GPIOManager() = delete;
private:
inline static GPIO* m_gpios[AVAILABLE_PORTS][PINS_PER_PORT] = {{nullptr}};
};
#endif //SHMINGO_HAL_SHAL_GPIO_H