Files
ESPC3-wireless/app/config/board_config.h

113 lines
4.7 KiB
C
Raw Normal View History

2024-03-28 12:19:52 +08:00
/**
* @file board_config.h
* @author LokLiang
* @brief
* @version 0.1
* @date 2023-11-24
*
* @copyright Copyright (c) 2023
*
*
* 使
* 使
*
*
*
*
*
*/
#pragma once
#define CONFIG_LICENSE_CODE_LENGTH 16 /* 在烧录器设置的保存滚码的字段长度(g_license_code 指向的数据的实际长度) */
#define CONFIG_CFG_BOARD_PARTITION_NAME "bcfg" /* 对应自定义分区表 partitions.csv 中的 Name 字段 */
#define CONFIG_CFG_BOARD_PARTITION_TYPE 0x40 /* 对应自定义分区表 partitions.csv 中的 Type 字段 */
#define CONFIG_CFG_BOARD_PARTITION_SUBTYPE 0x00 /* 对应自定义分区表 partitions.csv 中的 SubType 字段 */
2024-03-28 12:19:52 +08:00
#include "drivers/chip/_hal.h"
2025-02-18 17:41:45 +08:00
#include "sdkconfig.h"
2024-03-28 12:19:52 +08:00
2025-02-18 17:41:45 +08:00
#define GPIO_USED(pin) ((pin) < 255)
#if (CONFIG_IDF_TARGET_ESP32S3) /* 带 OTG 的平台 */
#define CAP_USBOTG 1
#else
#define CAP_USBOTG 0
#endif
2025-02-18 17:41:45 +08:00
typedef struct // 对应 GPIO 单个引脚的输入/输出配置的基础定义
2024-03-28 12:19:52 +08:00
{
uint8_t pin; // 引脚号 (0~254, 255 表示不使用)
2024-03-28 12:19:52 +08:00
uint8_t en_lev; // 触发电平
2025-02-18 17:41:45 +08:00
} cfg_board_pin_io_t;
2024-03-28 12:19:52 +08:00
typedef struct // LED: WS2812
{
hal_id_t spi_id; // 模拟 PWM 用的 SPI
uint8_t strip_pin[4]; // 用于驱动灯带的输出引脚。[0] 为默认脚,[1..3] 为附加的另外几路,非 255 表示有效,程序根据这些脚判断接多少根灯带
uint8_t bat_led_pin; // 用于指示电池电量的 LED 灯,非 255 表示有效
uint8_t rf_status_pin; // 板上用于指示状态的 RGB 灯珠,非 255 表示有效
} cfg_board_led_spi_t;
typedef enum __packed // 用于与飞控通讯的数据接口
{
CFG_BOARD_FC_PORT_UART = 0, // 使用串口与飞控通讯
CFG_BOARD_FC_PORT_USBH, // 使用 USB Host 与飞控通讯
} cfg_board_fc_port_t;
2024-03-28 12:19:52 +08:00
typedef struct // 数据结构一旦定下不可随意变更
{
char firmware_str[7];
char platform_str[13];
char board_name[32];
2024-03-28 12:19:52 +08:00
/* 硬件描述类 */
hal_uart_hdl_t uart_console; // 控制台
hal_uart_hdl_t uart_fc; // 与飞控连接的串口
cfg_board_led_spi_t led_spi; // LED
cfg_board_fc_port_t fc_port_type; // 用于与飞控通讯的数据接口
struct // ISP 控制脚
{
uint8_t nrst; // 复位控制引脚
uint8_t boot0; // boot0 控制引脚
} io_isp;
struct // USB OTG 引脚
{
uint8_t usb_dm;
uint8_t usb_dp;
} io_usb;
cfg_board_pin_io_t detect_usb; // 输入检测:检测飞控 USB 插入,有效电平为插入电平
cfg_board_pin_io_t key_reset; // 按键检测:开机时长安 10 秒恢复出厂设置的按键,有效电平为按下电平
cfg_board_pin_io_t key_led_strip_switch; // 按键检测:切换灯带效果,适用于灯带固件,有效电平为按下电平
cfg_board_pin_io_t key_rf_switch; // 按键检测:切换射频数据接口,适用于固定翼无线 USB 板,有效电平为按下电平
cfg_board_pin_io_t key_9v_switch; // 按键检测9伏电源开关控制适用 F7V4, 有效电平为按下电平
cfg_board_pin_io_t sw_led_strip; // 灯带控制主机的切换控制引脚,有效电平为切换为本模块控制的电平
cfg_board_pin_io_t sw_pwr_9v; // 9V 电源输出控制引脚,有效电平为打开 9V 电源的电平
cfg_board_pin_io_t sw_usb; // USB 切换的模拟开关,有效电平为切换为本模块控制的电平
cfg_board_pin_io_t led_rf_status; // 射频指示灯,单色 LED. 引脚号值为 0 时,射频连接状态通过灯带展示,值为非 0 时,射频连接状态通过这个引脚控制的 LED 展示,有效电平为点亮电平
cfg_board_pin_io_t led_strip_on; // 灯带控制主机切换的指示灯,有效电平为点亮电平
cfg_board_pin_io_t led_bat[4]; // 电池电量指示灯,有效电平为点亮电平
2024-03-28 12:19:52 +08:00
/* 产品功能描述类 */
} cfg_board_t;
extern const uint8_t *g_license_code; // 在烧录器设置的保存滚码的字段,其对应的长度为 CONFIG_LICENSE_CODE_LENGTH
2024-03-28 12:19:52 +08:00
extern const cfg_board_t *g_cfg_board; // 配置数据
int board_cfg_init(void); // 初始化,使 g_cfg_board 指向正确的
int board_license_fresh(const uint8_t license_code[CONFIG_LICENSE_CODE_LENGTH]); // 更新激活码
int board_cfg_fresh(const cfg_board_t *cfg); // 更新设置
int board_cfg_dump(const cfg_board_t *cfg);