添加按键功能
This commit is contained in:
102
app/drivers/pin_io/pin_io.c
Normal file
102
app/drivers/pin_io/pin_io.c
Normal file
@@ -0,0 +1,102 @@
|
||||
#include "pin_io.h"
|
||||
|
||||
/* 配置 */
|
||||
#include "config/board_config.h"
|
||||
#include "config/app_config.h"
|
||||
#include "config/app_log.h"
|
||||
|
||||
#if defined(CONFIG_CAP_LED_STRIP)
|
||||
#include "led_strip/config/led_strip_config.h"
|
||||
#endif
|
||||
|
||||
/* SDK */
|
||||
#include "driver/gpio.h"
|
||||
|
||||
/* 通用模块 */
|
||||
#include "button/button.h"
|
||||
|
||||
#include "os/os.h"
|
||||
|
||||
#define CONFIG_SYS_LOG_LEVEL SYS_LOG_LEVEL_INF
|
||||
#define SYS_LOG_DOMAIN "PIN"
|
||||
#include "sys_log.h"
|
||||
|
||||
/**
|
||||
* @brief IO 基本操作:配置为通用输入
|
||||
*
|
||||
* @param pin 0..n
|
||||
*/
|
||||
void pin_cfg_input(const cfg_board_pin_io_t *pin)
|
||||
{
|
||||
if (GPIO_USED(pin->pin) == false)
|
||||
{
|
||||
SYS_LOG_WRN("pin %d not used", pin->pin);
|
||||
return;
|
||||
}
|
||||
|
||||
gpio_config_t io_conf;
|
||||
io_conf.mode = GPIO_MODE_INPUT;
|
||||
io_conf.pull_up_en = (pin->en_lev == 0 ? GPIO_PULLUP_ENABLE : GPIO_PULLUP_DISABLE);
|
||||
io_conf.pull_down_en = (pin->en_lev ? GPIO_PULLDOWN_ENABLE : GPIO_PULLDOWN_DISABLE);
|
||||
io_conf.pin_bit_mask = 1ULL << pin->pin;
|
||||
io_conf.intr_type = GPIO_INTR_DISABLE;
|
||||
gpio_config(&io_conf);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief IO 基本操作:获取当前输入电平是否为有效的电平
|
||||
*
|
||||
* @param pin 0..n
|
||||
* @retval true 对应预设为有效的电平
|
||||
* @retval false 对应预设为非有效的电平
|
||||
*/
|
||||
bool pin_get_valid(const cfg_board_pin_io_t *pin)
|
||||
{
|
||||
if (GPIO_USED(pin->pin) == false)
|
||||
{
|
||||
SYS_LOG_WRN("pin %d not used", pin->pin);
|
||||
return false;
|
||||
}
|
||||
|
||||
return gpio_get_level(pin->pin) ^ !pin->en_lev;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief IO 基本操作:配置为通用输出
|
||||
*
|
||||
* @param pin 0..n
|
||||
*/
|
||||
void pin_cfg_output(const cfg_board_pin_io_t *pin)
|
||||
{
|
||||
if (GPIO_USED(pin->pin) == false)
|
||||
{
|
||||
SYS_LOG_WRN("pin %d not used", pin->pin);
|
||||
return;
|
||||
}
|
||||
|
||||
gpio_config_t io_conf;
|
||||
io_conf.mode = GPIO_MODE_INPUT_OUTPUT;
|
||||
io_conf.pull_up_en = GPIO_PULLUP_ENABLE;
|
||||
io_conf.pull_down_en = GPIO_PULLDOWN_ENABLE;
|
||||
io_conf.pin_bit_mask = 1ULL << pin->pin;
|
||||
io_conf.intr_type = GPIO_INTR_DISABLE;
|
||||
gpio_config(&io_conf);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief IO 基本操作:设置使输出是否为有效的电平
|
||||
*
|
||||
* @param pin 0..n
|
||||
* @param en false: 使输出为对应预设为非有效的电平; true: 使输出为对应预设为有效的电平
|
||||
*/
|
||||
void pin_set_valid(const cfg_board_pin_io_t *pin, bool en)
|
||||
{
|
||||
if (GPIO_USED(pin->pin) == false)
|
||||
{
|
||||
SYS_LOG_WRN("pin %d not used", pin->pin);
|
||||
return;
|
||||
}
|
||||
|
||||
gpio_set_level((gpio_num_t)pin->pin, !pin->en_lev ^ !!en);
|
||||
}
|
||||
|
||||
23
app/drivers/pin_io/pin_io.h
Normal file
23
app/drivers/pin_io/pin_io.h
Normal file
@@ -0,0 +1,23 @@
|
||||
/**
|
||||
* @file pin_io.h
|
||||
* @author LokLiang
|
||||
* @brief 1. GPIO 的基本驱动, 2. 控制板载电压的开关
|
||||
* @version 0.1
|
||||
* @date 2024-04-16
|
||||
*
|
||||
* @copyright Copyright (c) 2024
|
||||
*
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "sys_types.h"
|
||||
#include "config/board_config.h"
|
||||
|
||||
void pin_cfg_input(const cfg_board_pin_io_t *pin);
|
||||
bool pin_get_valid(const cfg_board_pin_io_t *pin);
|
||||
|
||||
void pin_cfg_output(const cfg_board_pin_io_t *pin);
|
||||
void pin_set_valid(const cfg_board_pin_io_t *pin, bool en);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user