ESP32-S3 firmware acting as BMC for another board, controlling an ATX power supply and providing access to UART. Co-authored with GLM-5
149 lines
3.4 KiB
C
149 lines
3.4 KiB
C
#ifndef GPIO_CONTROLLER_H
|
|
#define GPIO_CONTROLLER_H
|
|
|
|
#include "driver/gpio.h"
|
|
#include "esp_err.h"
|
|
#include "config.h"
|
|
|
|
// ============================================================================
|
|
// GPIO State Structure
|
|
// ============================================================================
|
|
typedef struct {
|
|
gpio_num_t pin;
|
|
const char *name;
|
|
gpio_mode_t mode;
|
|
int value;
|
|
bool inverted;
|
|
bool is_input_only;
|
|
} bmc_gpio_state_t;
|
|
|
|
// ============================================================================
|
|
// Function Declarations
|
|
// ============================================================================
|
|
|
|
/**
|
|
* @brief Initialize the GPIO controller
|
|
*
|
|
* Sets up all GPIOs according to the default configuration.
|
|
*
|
|
* @return ESP_OK on success, error code otherwise
|
|
*/
|
|
esp_err_t gpio_controller_init(void);
|
|
|
|
/**
|
|
* @brief Get the current state of all GPIOs
|
|
*
|
|
* @param states Array to store GPIO states (must be BMC_GPIO_COUNT size)
|
|
* @return ESP_OK on success, error code otherwise
|
|
*/
|
|
esp_err_t gpio_get_all_states(bmc_gpio_state_t *states);
|
|
|
|
/**
|
|
* @brief Get the state of a specific GPIO
|
|
*
|
|
* @param pin GPIO pin number
|
|
* @param state Pointer to store the GPIO state
|
|
* @return ESP_OK on success, ESP_ERR_NOT_FOUND if pin not in config
|
|
*/
|
|
esp_err_t gpio_get_state(gpio_num_t pin, bmc_gpio_state_t *state);
|
|
|
|
/**
|
|
* @brief Read the value of a GPIO
|
|
*
|
|
* @param pin GPIO pin number
|
|
* @return GPIO level (0 or 1), -1 on error
|
|
*/
|
|
int gpio_read(gpio_num_t pin);
|
|
|
|
/**
|
|
* @brief Write a value to a GPIO
|
|
*
|
|
* Handles inverted logic automatically.
|
|
*
|
|
* @param pin GPIO pin number
|
|
* @param value Value to write (0 or 1)
|
|
* @return ESP_OK on success, error code otherwise
|
|
*/
|
|
esp_err_t gpio_write(gpio_num_t pin, int value);
|
|
|
|
/**
|
|
* @brief Configure a GPIO mode
|
|
*
|
|
* @param pin GPIO pin number
|
|
* @param mode GPIO mode (INPUT, OUTPUT, etc.)
|
|
* @return ESP_OK on success, error code otherwise
|
|
*/
|
|
esp_err_t gpio_configure(gpio_num_t pin, gpio_mode_t mode);
|
|
|
|
/**
|
|
* @brief Toggle a GPIO output
|
|
*
|
|
* @param pin GPIO pin number
|
|
* @return ESP_OK on success, error code otherwise
|
|
*/
|
|
esp_err_t gpio_toggle(gpio_num_t pin);
|
|
|
|
/**
|
|
* @brief Find GPIO index by pin number
|
|
*
|
|
* @param pin GPIO pin number
|
|
* @return Index in the GPIO array, or -1 if not found
|
|
*/
|
|
int gpio_find_index(gpio_num_t pin);
|
|
|
|
/**
|
|
* @brief Get GPIO name by pin number
|
|
*
|
|
* @param pin GPIO pin number
|
|
* @return GPIO name string, or NULL if not found
|
|
*/
|
|
const char *gpio_get_name(gpio_num_t pin);
|
|
|
|
// ============================================================================
|
|
// Power Control Functions
|
|
// ============================================================================
|
|
|
|
/**
|
|
* @brief Turn board power on
|
|
*
|
|
* Pulses the POWER_ON GPIO.
|
|
*
|
|
* @return ESP_OK on success, error code otherwise
|
|
*/
|
|
esp_err_t gpio_power_on(void);
|
|
|
|
/**
|
|
* @brief Turn board power off
|
|
*
|
|
* Pulses the POWER_OFF GPIO.
|
|
*
|
|
* @return ESP_OK on success, error code otherwise
|
|
*/
|
|
esp_err_t gpio_power_off(void);
|
|
|
|
/**
|
|
* @brief Reset the board
|
|
*
|
|
* Pulses the RESET GPIO (active-low).
|
|
*
|
|
* @return ESP_OK on success, error code otherwise
|
|
*/
|
|
esp_err_t gpio_reset(void);
|
|
|
|
/**
|
|
* @brief Check if power is good
|
|
*
|
|
* @return true if power good signal is high, false otherwise
|
|
*/
|
|
bool gpio_is_power_good(void);
|
|
|
|
/**
|
|
* @brief Set status LED state
|
|
*
|
|
* @param on true to turn on, false to turn off
|
|
* @return ESP_OK on success, error code otherwise
|
|
*/
|
|
esp_err_t gpio_set_status_led(bool on);
|
|
|
|
#endif // GPIO_CONTROLLER_H
|