Files
xiaozhi-esp32/main/boards/jiuchuan-s3/gpio_manager.h
Hangon66 f2f54ba1fd 添加 jiuchuan-s3 开发板支持 (#775)
* 添加 jiuchuang-s3 开发板支持

* 增加编译指南

* 优开发板支持包文件目录,更新README.md

删除了多余板载文件
[* ]README.md -> 更新了编译指南和烧录指南

* 修改板级支持包名

* 使用乐鑫提供的电源监测

* 修复部分代码格式问题

* 解决合并冲突

* 解决部分合并内容

* 完善合并内容

* 修复电量映射表错误

---------

Co-authored-by: unknown <jake12355>
2025-06-29 05:41:42 +08:00

62 lines
1.9 KiB
C++

#pragma once
#include <mutex>
#include <inttypes.h>
#include <driver/gpio.h>
#include <esp_log.h>
class GpioManager {
public:
enum class GpioMode {
INPUT,
OUTPUT,
INPUT_PULLUP,
INPUT_PULLDOWN
};
static void SetLevel(gpio_num_t gpio, uint32_t level) {
std::lock_guard<std::mutex> lock(mutex_);
ESP_ERROR_CHECK(gpio_set_level(gpio, level));
ESP_LOGD("GpioManager", "Set GPIO %d level: %d", static_cast<int>(gpio), static_cast<int>(level));
}
static int GetLevel(gpio_num_t gpio) {
std::lock_guard<std::mutex> lock(mutex_);
int level = gpio_get_level(gpio);
ESP_LOGD("GpioManager", "Get GPIO %d level: %d", static_cast<int>(gpio), level);
return level;
}
static void Config(gpio_num_t gpio, GpioMode mode) {
std::lock_guard<std::mutex> lock(mutex_);
gpio_config_t config = {};
config.pin_bit_mask = (1ULL << gpio);
switch(mode) {
case GpioMode::INPUT:
config.mode = GPIO_MODE_INPUT;
config.pull_up_en = GPIO_PULLUP_DISABLE;
config.pull_down_en = GPIO_PULLDOWN_DISABLE;
break;
case GpioMode::OUTPUT:
config.mode = GPIO_MODE_OUTPUT;
break;
case GpioMode::INPUT_PULLUP:
config.mode = GPIO_MODE_INPUT;
config.pull_up_en = GPIO_PULLUP_ENABLE;
break;
case GpioMode::INPUT_PULLDOWN:
config.mode = GPIO_MODE_INPUT;
config.pull_down_en = GPIO_PULLDOWN_ENABLE;
break;
}
ESP_ERROR_CHECK(gpio_config(&config));
ESP_LOGI("GpioManager", "Configured GPIO %d mode: %d", gpio, static_cast<int>(mode));
}
private:
static std::mutex mutex_;
};
std::mutex GpioManager::mutex_;