/****************************************************************************** * @file usr_dengle_sched.h * @brief Dengle 参数定时下发:USB 配置最多 10 条,按周期经 BLE 发出 * @author cyWu <1917507415@qq.com> * @date 2026.07.30 * @version V1.2.0 * @history * - V1.0.0, 2026.07.30, cyWu, 首次发布 * - V1.1.0, 2026.07.30, cyWu, 增加 Flash 断电保存 * - V1.2.0, 2026.07.30, cyWu, USB 连接时暂停定时发送 * - V1.2.1, 2026.07.30, cyWu, 改为 COM(DTR) 开闭控制暂停/恢复 ******************************************************************************/ #ifndef __USR_DENGLE_SCHED_H__ #define __USR_DENGLE_SCHED_H__ #include /*============================================================================*/ /* 宏定义 */ /*============================================================================*/ #define DENGLE_SLOT_MAX (10) /**< 最多定时条目数 */ #define DENGLE_INT_MAX (16) /**< CBCT/CBFD:最多 int32 个数 */ #define DENGLE_BYTES_MAX (64) /**< 其它产品:最多 bytes 长度 */ #define DENGLE_TICK_MS (100) /**< 调度节拍 */ /*============================================================================*/ /* 错误码 */ /*============================================================================*/ typedef enum { DENGLE_OK = 0, DENGLE_ERR_PARAM, DENGLE_ERR_SLOT, DENGLE_ERR_MODE, DENGLE_ERR_NOT_INIT } Dengle_Ret_t; /*============================================================================*/ /* 外部接口 */ /*============================================================================*/ /** * @brief 初始化 Dengle 定时模块(启动 100ms 节拍) * @return Dengle_Ret_t */ Dengle_Ret_t dengle_sched_init(void); /** * @brief USB 设置一条定时任务 * @note payload 格式见 .c 文件头注释 * @param payload USB 帧 payload(不含 55AA/LEN/CMD/SN/CKSUM) * @param payload_len 长度 * @return Dengle_Ret_t */ Dengle_Ret_t dengle_sched_usb_set(const uint8_t *payload, uint16_t payload_len); /** * @brief 清除全部定时任务 * @return Dengle_Ret_t */ Dengle_Ret_t dengle_sched_clear_all(void); /** * @brief 打包单个槽位配置(格式与 0x70 设置 payload 一致) * @param slot_id 槽位 0~9 * @param buf 输出缓冲 * @param max_len 缓冲最大长度 * @return >0 写入字节数;<=0 失败 */ int dengle_sched_pack_slot(uint8_t slot_id, uint8_t *buf, uint16_t max_len); /** * @brief 打包全部槽位配置(连续拼接多个 0x70 风格记录) * @param buf 输出缓冲 * @param max_len 缓冲最大长度 * @return >0 写入字节数;<=0 失败 */ int dengle_sched_pack_all(uint8_t *buf, uint16_t max_len); /** * @brief 获取有效条目数(调试用) * @return 已使能槽位数 */ uint8_t dengle_sched_get_active_count(void); #endif /* __USR_DENGLE_SCHED_H__ */