Files
ESPC3-wireless/components/lib/spbelib_interface.h

195 lines
8.5 KiB
C
Raw Normal View History

/**
* @file spbelib_interface.h
* @author LokLiang
* @brief 线
* @version 0.1
* @date 2025-03-14
*
* @copyright Copyright (c) 2025
*
*/
#pragma once
#include "sys_types.h"
typedef enum
{
SBLIB_INIT_WIRE_TUNE = 0, // 初始化为无线调参功能
SBLIB_INIT_ADAPTER, // 初始化为 静态库 功能
} sblib_init_t;
/**
* @brief
*/
void sblib_init(sblib_init_t init_type);
/*************************************************************************************************/
/**** 事件操作部分 ********************************************************************************/
/*************************************************************************************************/
/**
* @brief
*
* lib_notify_event() sblib_notify_datastream()
*/
typedef void (*lib_notify_cb)(void);
typedef enum __packed // 静态库功能控制命令
{
LIB_CONTROL_FCPORT_OFF, // 关闭飞控数据接口
LIB_CONTROL_FCPORT_UART, // 使用 UART 连接飞控
LIB_CONTROL_FCPORT_OTG, // 使用 OTG 连接飞控
LIB_CONTROL_RF_OFF, // 关闭射频连接
LIB_CONTROL_RF_BLE, // 打开 BLE
LIB_CONTROL_RF_AP, // 打开 WIFI(AP)
LIB_CONTROL_RF_STA, // 打开 WIFI(STA)
} lib_control_t;
typedef enum __packed // 通知的事件类型
{
LIB_EVENT_NONE = 0,
LIB_EVENT_FC_PORT_OFF, // 飞控数据接口关闭。参数:无
LIB_EVENT_FC_PORT_UART, // 飞控数据接口为串口。参数:无
LIB_EVENT_FC_PORT_OTG, // 飞控数据接口为 USBH。参数
LIB_EVENT_USBH_NO_START, // USBH 接口未启动。参数:无
LIB_EVENT_USBH_CDC, // USBH 接口已连接 CDC 设备。参数:无
LIB_EVENT_USBH_DFU, // USBH 接口已连接 DFU 设备。参数:无
LIB_EVENT_USBH_MSC, // USBH 接口已连接 MSC 设备。参数:无
LIB_EVENT_USBH_UNKNOW_DEVICE, // USBH 接口已连接未知设备。参数:无
LIB_EVENT_RF_OFF, // 无线连接已关闭。参数:无
LIB_EVENT_RF_CHANGE_MODE, // 提示模式切换已就绪。参数:无
LIB_EVENT_RF_BLE_IDLE, // 蓝牙模式未连接。参数:无
LIB_EVENT_RF_BLE_CONNECTED, // 蓝牙模式已连接。参数:无
LIB_EVENT_RF_AP_IDLE, // WIFI AP 模式未连接。参数:无
LIB_EVENT_RF_AP_CONNECTED, // WIFI AP 模式已连接。参数:无
LIB_EVENT_RF_STA_IDLE, // WIFI STA 模式未连接。参数:无
LIB_EVENT_RF_STA_CONNECTED, // WIFI STA 模式已连接。参数:已连接设备的 MAC 地址
LIB_EVENT_BLE_NAME_SET, // BLE 名称已设置。参数:无
LIB_EVENT_BLE_PASSWD_SET, // BLE 密码已设置。参数:无
LIB_EVENT_WIFI_AP_SSID_SET, // WIFI AP SSID 已设置。参数:无
LIB_EVENT_WIFI_AP_PASSWD_SET, // WIFI AP 密码已设置。参数:无
LIB_EVENT_WIFI_STA_SSID_SET, // WIFI STA SSID 已设置。参数:无
LIB_EVENT_WIFI_STA_PASSWD_SET, // WIFI STA 密码已设置。参数:无
LIB_EVENT_MAX
} lib_event_type_t;
typedef struct // 静态库通知的事件数据
{
lib_event_type_t type; // 事件类型
uint8_t len; // data[] 有效数据长度
uint8_t data[6]; // 事件数据
} lib_event_t;
/**
* @brief
*
* @param control
* @retval 0 -1
*/
int sblib_control(lib_control_t control);
/**
* @brief
*
* 32
* 使 sblib_get_event()
*
* @param cb
*/
void sblib_regist_notify_event(lib_notify_cb cb);
/**
* @brief 线
*
* @return lib_event_t
*/
lib_event_t sblib_get_event(void);
/**
* @brief
* 32
* sblib_regist_notify_event()
* @param type
* @param len 0..6
* @param data
*/
void sblib_send_event(lib_event_type_t type, uint8_t len, const uint8_t data[]);
/*************************************************************************************************/
/**** 通过无线接口与 APP 通讯部分 ******************************************************************/
/*************************************************************************************************/
/**
* @brief 线 APP
* @param port port
* @param cmd cmd
* @param payload
* @param size
*/
typedef void (*cmd_func_cb)(uint8_t port, uint8_t cmd, const void *payload, uint16_t size);
typedef enum
{
SBLIB_CMD_PORT_DEBUG = 0, // 保留的端口,用于 debug 等
SBLIB_CMD_PORT_ADAPTER, // 无线调参扩展命令集
SBLIB_CMD_PORT_FINDTAG, // 寻机命令集
SBLIB_CMD_PORT_JOYSTICK, // 遥控器命令集
SBLIB_CMD_PORT_ELRS, // 接收机命令集
} sblib_cmd_port_t;
typedef struct // 注册命令的结构体
{
uint8_t cmd; // 命令代号
cmd_func_cb cb; // 命令处理函数
} sblib_cmd_t;
typedef enum // 返回的发送状态
{
SBLIB_SEND_STATUS_OK = 0, // 当前等发送数据已缓存到待发送区中,数据将会被发送
SBLIB_SEND_STATUS_NO_SPACE, // 当前没有缓存空间,数据不会被处理
SBLIB_SEND_STATUS_NO_CONNECT, // 当前没有连接,数据不会被处理
} sblib_cmd_send_status_t;
/**
* @brief 线 APP
* APP cmd_struct port cmd
* sblib_send_event() APP
*
*
* @param port 使
* @param cmd_struct port APP cmd_struct port cmd
* @param struct_size 使 sizeof()
* @retval 0
* @retval -1
*/
int sblib_register_cmd(sblib_cmd_port_t port, const sblib_cmd_t *cmd_struct, uint32_t struct_size);
/**
* @brief 线 APP
* APP sblib_get_cmd_sned_buf()
*
* @param port 使
* @param cmd
* @param data
* @param length 1460
* @return
* SBLIB_SEND_STATUS_OK
* SBLIB_SEND_STATUS_NO_SPACE
* SBLIB_SEND_STATUS_NO_CONNECT
*/
sblib_cmd_send_status_t sblib_cmd_send(sblib_cmd_port_t port, uint8_t cmd, const void *data, uint16_t length);
/**
* @brief
*
* @return uint32_t
*/
uint32_t sblib_get_cmd_sned_buf(void);