/****************************************************************************** * @file app_pump.c * @brief 水泵双脚成对控制:PC2 供 5V + PA6 导通,同开同关 * @author cyWu <1917507415@qq.com> * @date 2026.09.09 * @version V1.0.0 * @history * - V1.0.0, 2026.09.09, cyWu, P0 首次发布 * * @note 禁止只开一只脚;上电两脚默认低、绝不自动开泵。本模块不保存"开", * 是否开由上层 app_spray 作业引擎决定(规格书 7.2,app_pump_set 只 * 由 app_spray 调用)。泵无过零/继电器,请求态==实际态。 ******************************************************************************/ #include "system/includes.h" #include "app_pump.h" #include "bsp_hw.h" #include "board_pin.h" #define LOG_TAG_CONST APP #define LOG_TAG "[APP_PUMP]" #define LOG_INFO_ENABLE #include "debug.h" /** 模块状态:on 只被 app_spray 在 20ms 节拍里改写 */ typedef struct { uint8_t initialized; volatile uint8_t on; /**< 1=泵转(两脚都已导通),0=泵停 */ } PumpCtx_t; static PumpCtx_t s_pump; /** * @brief 初始化泵模块(GPIO 成对低已在 bsp_hw_init 完成) * @return APP_PUMP_OK=成功 */ AppPump_Ret_t app_pump_init(void) { if (s_pump.initialized) { return APP_PUMP_OK; } #if BOARD_PUMP_ENABLE bsp_pump_set(0); /* 兜底:两脚都低 */ s_pump.on = 0; s_pump.initialized = 1; #else log_info("pump disabled\n"); #endif return APP_PUMP_OK; } /** * @brief 成对切泵:on=1 两脚同时高,on=0 两脚同时低 * @param on 1=开,0=关 * @return 无 */ void app_pump_set(uint8_t on) { #if BOARD_PUMP_ENABLE if (!s_pump.initialized) { return; } bsp_pump_set(on ? 1 : 0); s_pump.on = on ? 1 : 0; #else (void)on; #endif } /** * @brief 读泵当前态(请求态即实际态) * @return 1=泵转,0=泵停 */ uint8_t app_pump_get(void) { #if BOARD_PUMP_ENABLE return s_pump.on; #else return 0; #endif } /** * @brief 查询模块是否已初始化 * @return APP_PUMP_OK=已初始化,APP_PUMP_ERR_NOT_INIT=未初始化 */ AppPump_Ret_t app_pump_get_status(void) { return s_pump.initialized ? APP_PUMP_OK : APP_PUMP_ERR_NOT_INIT; }