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
|
|
|
|
|
|
|
2025-02-21 10:30:22 +08:00
|
|
|
|
#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)
|
|
|
|
|
|
|
2025-02-21 10:30:22 +08:00
|
|
|
|
#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
|
|
|
|
{
|
2025-02-21 10:30:22 +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
|
|
|
|
|
2025-02-21 10:30:22 +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 // 数据结构一旦定下不可随意变更
|
|
|
|
|
|
{
|
2025-02-21 10:30:22 +08:00
|
|
|
|
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; // 控制台
|
2025-02-21 10:30:22 +08:00
|
|
|
|
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;
|
|
|
|
|
|
|
2025-02-21 10:30:22 +08:00
|
|
|
|
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; // 配置数据
|
2025-02-21 10:30:22 +08:00
|
|
|
|
|
|
|
|
|
|
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);
|