105 lines
3.0 KiB
C
105 lines
3.0 KiB
C
/******************************************************************************
|
|
* @file app_function.h
|
|
* @brief 设备功能开关(DP0)+ 自动玩法(DP1)+ 手动点动(DP2)+ 按键动作
|
|
* @author cyWu <1917507415@qq.com>
|
|
* @date 2026.08.25
|
|
* @version V1.0.0
|
|
* @history
|
|
* - V1.0.0, 2026.08.25, cyWu, 首次发布,实现 DP0 开关、自动玩法、手动点动与按键动作
|
|
*
|
|
* @note 本模块决定“电机现在该不该转、转哪种”,会读电源与 OTA 状态作为
|
|
* 阻塞条件;配对是开机状态上的附加会话,不阻塞运动或按键。也会触发
|
|
* app_led 的一次性提示灯(切模式闪、开机绿灯),但不会被它们反向依赖。
|
|
******************************************************************************/
|
|
|
|
#ifndef __APP_FUNCTION_H__
|
|
#define __APP_FUNCTION_H__
|
|
|
|
#include <stdint.h>
|
|
|
|
/**
|
|
* @brief 初始化功能模块状态(电机停,DP0=1 视调用方而定)
|
|
* @return 无
|
|
*/
|
|
void app_function_init(void);
|
|
|
|
/** CBC4 DP0 写入:排队到业务节拍统一执行。 */
|
|
void app_function_dp_power_write(uint8_t enable);
|
|
|
|
/** CBC4 DP1 写入:支持重复下发当前模式时停止。 */
|
|
void app_function_dp_play_write(uint8_t mode);
|
|
|
|
/**
|
|
* @brief DP2 写入钩子:仅记录第 1 字节,真正执行在 app_function_poll
|
|
* @param cmd 0=停止,1=上部电机探出,2=下部电机探出
|
|
* @return 无
|
|
*/
|
|
void app_function_dp_hand_write(uint8_t cmd);
|
|
|
|
/** CBC4 DP6 震动开机开关。 */
|
|
void app_function_set_shake_wake(uint8_t enable);
|
|
|
|
|
|
/**
|
|
* @brief 跟随 APP 下发的 DP0/DP1,并处理 DP2 手动点动,每个业务 tick 调用一次
|
|
* @return 无
|
|
*/
|
|
void app_function_poll(void);
|
|
|
|
/**
|
|
* @brief 推进当前玩法节拍或手动刹车,每个业务 tick 调用一次
|
|
* @param dt 距上次调用的毫秒数
|
|
* @return 无
|
|
*/
|
|
void app_function_tick_1ms(uint16_t dt);
|
|
|
|
/**
|
|
* @brief 停手动 + 自动模式,并清 DP1(USB 插入 / 请求关机时用)
|
|
* @return 无
|
|
*/
|
|
void app_function_stop_all(void);
|
|
|
|
/**
|
|
* @brief 软关:电机停、DP0=0,等 APP/短按再开(USB 拔出 / APP 关时用)
|
|
* @return 无
|
|
*/
|
|
void app_function_soft_off(void);
|
|
|
|
/**
|
|
* @brief 上电默认开启功能(DP0=1),不带开机灯效提示
|
|
* @return 无
|
|
*/
|
|
void app_function_power_on_silent(void);
|
|
|
|
/**
|
|
* @brief 查询功能开关状态(DP0)
|
|
* @return 1=开,0=关
|
|
*/
|
|
uint8_t app_function_is_power_on(void);
|
|
|
|
/**
|
|
* @brief 查询手动点动是否进行中
|
|
* @return 1=进行中,0=空闲
|
|
*/
|
|
uint8_t app_function_is_hand_busy(void);
|
|
|
|
/**
|
|
* @brief 查询当前自动玩法编号
|
|
* @return 0=停转,1~5=对应玩法
|
|
*/
|
|
uint8_t app_function_play_mode(void);
|
|
|
|
/**
|
|
* @brief 业务层短按回调:由 key_manager 触发(key_manager.h 声明)
|
|
* @return 无
|
|
*/
|
|
void usr_on_key_short(void);
|
|
|
|
/**
|
|
* @brief 业务层长按 3s 回调:由 key_manager 触发(key_manager.h 声明)
|
|
* @return 无
|
|
*/
|
|
void usr_on_key_long(void);
|
|
|
|
#endif /* __APP_FUNCTION_H__ */
|