喷淋器 P0 功能实现
This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
/******************************************************************************
|
||||
* @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;
|
||||
}
|
||||
Reference in New Issue
Block a user