forked from xiaozhi/xiaozhi-esp32
* 添加 jiuchuang-s3 开发板支持 * 增加编译指南 * 优开发板支持包文件目录,更新README.md 删除了多余板载文件 [* ]README.md -> 更新了编译指南和烧录指南 * 修改板级支持包名 * 使用乐鑫提供的电源监测 * 修复部分代码格式问题 * 解决合并冲突 * 解决部分合并内容 * 完善合并内容 * 修复电量映射表错误 --------- Co-authored-by: unknown <jake12355>
62 lines
1.9 KiB
C++
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_; |