#include #include "driver/gpio.h" #include "esp_check.h" #include "esp_log.h" #include "io_device_control.h" static const char *TAG = "io_device_control"; #define IO_DEVICE_PUMP_GPIO GPIO_NUM_1 #define IO_DEVICE_LIGHT_GPIO GPIO_NUM_0 static bool s_inited = false; static esp_err_t io_device_control_set_level(gpio_num_t pin, bool on) { ESP_RETURN_ON_FALSE(s_inited, ESP_ERR_INVALID_STATE, TAG, "not initialized"); return gpio_set_level(pin, on ? 1 : 0); } esp_err_t io_device_control_init(void) { if (s_inited) { return ESP_OK; } const gpio_config_t out_cfg = { .pin_bit_mask = (1ULL << IO_DEVICE_PUMP_GPIO) | (1ULL << IO_DEVICE_LIGHT_GPIO), .mode = GPIO_MODE_OUTPUT, .pull_up_en = GPIO_PULLUP_DISABLE, .pull_down_en = GPIO_PULLDOWN_DISABLE, .intr_type = GPIO_INTR_DISABLE, }; ESP_RETURN_ON_ERROR(gpio_config(&out_cfg), TAG, "gpio_config failed"); // Active-high outputs; default low keeps devices off at boot. ESP_RETURN_ON_ERROR(gpio_set_level(IO_DEVICE_PUMP_GPIO, 0), TAG, "set pump default failed"); ESP_RETURN_ON_ERROR(gpio_set_level(IO_DEVICE_LIGHT_GPIO, 0), TAG, "set light default failed"); s_inited = true; ESP_LOGI(TAG, "initialized: pump=GPIO%d light=GPIO%d active_high=1", IO_DEVICE_PUMP_GPIO, IO_DEVICE_LIGHT_GPIO); return ESP_OK; } esp_err_t io_device_control_set_pump(bool on) { ESP_RETURN_ON_ERROR(io_device_control_set_level(IO_DEVICE_PUMP_GPIO, on), TAG, "set pump failed"); return ESP_OK; } esp_err_t io_device_control_set_light(bool on) { ESP_RETURN_ON_ERROR(io_device_control_set_level(IO_DEVICE_LIGHT_GPIO, on), TAG, "set light failed"); return ESP_OK; }