喷淋器 P0 功能实现
This commit is contained in:
@@ -13,6 +13,7 @@
|
||||
*/
|
||||
|
||||
#include "jb_product.h"
|
||||
#include "board_pin.h"
|
||||
|
||||
/* ════════════════════════════════════════════════════════════════
|
||||
* 全局变量
|
||||
@@ -36,6 +37,13 @@ void userInit(void)
|
||||
gDevData.current_temp = 0.0f; /* DP5 当前温度 (float) */
|
||||
gDevData.current_humi = 0; /* DP6 当前湿度 */
|
||||
memset(gDevData.spray_config, 0, 8); /* DP7 喷淋配置 */
|
||||
/* 首次上电(VM 无效)DP7 默认 10s × 3 次 + 间隔 3s(规格书 10.1/10.2):
|
||||
* Byte0-1 时长 / Byte2 次数 / Byte3-4 间隔,均大端;5-7 预留置 0 */
|
||||
gDevData.spray_config[0] = (uint8_t)(BOARD_SPRAY_DEFAULT_DUR_S >> 8);
|
||||
gDevData.spray_config[1] = (uint8_t)(BOARD_SPRAY_DEFAULT_DUR_S & 0xFFu);
|
||||
gDevData.spray_config[2] = BOARD_SPRAY_DEFAULT_COUNT;
|
||||
gDevData.spray_config[3] = (uint8_t)(BOARD_SPRAY_DEFAULT_INTERVAL_S >> 8);
|
||||
gDevData.spray_config[4] = (uint8_t)(BOARD_SPRAY_DEFAULT_INTERVAL_S & 0xFFu);
|
||||
gDevData.linkage_delete = 0; /* DP8 联动删除 0=关 1=开 */
|
||||
memset(gDevData.linkage_config, 0, 20); /* DP9 联动配置 */
|
||||
gDevData.spray_plan_en = 0; /* DP10 喷淋计划总开关 0=关 1=开 */
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
* ════════════════════════════════════════════════════════════════ */
|
||||
#define PKT_HEAD_0 0x55
|
||||
#define PKT_HEAD_1 0xAA
|
||||
#define MAX_PACKAGE_LEN 128
|
||||
#define MAX_PACKAGE_LEN 512 /* 512:DP18 run_record 124B 需要;禁止改回 128 */
|
||||
#define JB_OTA_MAX_PAYLOAD 96 /* OTA 单包 Payload 上限(Byte); 须 <= MAX_PACKAGE_LEN - 11(0x32 帧开销) */
|
||||
|
||||
#define DP_COUNT 28
|
||||
|
||||
+108
-16
@@ -1,18 +1,43 @@
|
||||
/******************************************************************************
|
||||
* @file usr_jb_main.c
|
||||
* @brief CBR2 业务组合根:只编排调用顺序(P0 双键/双灯/双脚泵)
|
||||
* @author cyWu <1917507415@qq.com>
|
||||
* @date 2026.09.09
|
||||
* @version V1.0.0
|
||||
* @history
|
||||
* - V1.0.0, 2026.09.09, cyWu, P0 组合根(对齐加热垫框架,删过零/继电器)
|
||||
*
|
||||
* @note jb_product.c 不写业务。20ms tick 禁止写 VM / 切 BLE;
|
||||
* 配对、OTA、落盘在 500ms usr_timer_loop(任务上下文)。
|
||||
* P0 关闭 LINKAGE/TIMER/TH_SCAN/RUNREC/NVM(board_pin.h)。
|
||||
******************************************************************************/
|
||||
|
||||
#include "system/includes.h"
|
||||
#include "app_config.h"
|
||||
#include "app_main.h"
|
||||
#include "app_task.h"
|
||||
#include "user_cfg.h"
|
||||
#include "vm.h"
|
||||
#include "sys_time.h"
|
||||
|
||||
#include "jb_protocol.h"
|
||||
#include "jb_product.h"
|
||||
#include "jb_ringbuffer.h"
|
||||
#include "jb_common.h"
|
||||
#include "usr_le_product.h"
|
||||
#include "usr_le_api.h"
|
||||
#include "bsp_hw.h"
|
||||
#include "app_pair.h"
|
||||
#include "app_function.h"
|
||||
#include "app_led.h"
|
||||
#include "app_pump.h"
|
||||
#include "app_spray.h"
|
||||
#include "key_manager.h"
|
||||
|
||||
/* 向 usr_le_code 库提供产品身份(换产品只改 jb_protocol.h 宏即可) */
|
||||
#define LOG_TAG_CONST APP
|
||||
#define LOG_TAG "[USR_JB]"
|
||||
#define LOG_INFO_ENABLE
|
||||
#include "debug.h"
|
||||
|
||||
/* 向 usr_le_code 提供产品身份(换产品只改 jb_protocol.h 宏即可) */
|
||||
const uint8_t g_usr_le_prodcode[USR_LE_PRODCODE_LEN] = {
|
||||
JB_CATEGORY_CODE[0], JB_CATEGORY_CODE[1],
|
||||
JB_CATEGORY_CODE[2], JB_CATEGORY_CODE[3]
|
||||
@@ -22,28 +47,95 @@ const uint8_t g_usr_le_pcode[USR_LE_PCODE_LEN] = {
|
||||
JB_PRODUCT_CODE[3], JB_PRODUCT_CODE[4], JB_PRODUCT_CODE[5]
|
||||
};
|
||||
|
||||
void usr_timer_1_ms();
|
||||
static int jb_timer_id=0;
|
||||
#define USR_TIMER_IDLE_MS 20 /**< 全局统一节拍(规格书第 3 章) */
|
||||
|
||||
void usr_jb_init()
|
||||
static void usr_timer_tick(void *priv);
|
||||
static void usr_log_boot_version(void);
|
||||
|
||||
/**
|
||||
* @brief 20ms 业务节拍(硬件定时器中断)
|
||||
* @param priv 未使用
|
||||
* @note 禁止写 VM / 切 BLE / 跑联动与计划引擎
|
||||
* @return 无
|
||||
*/
|
||||
static void usr_timer_tick(void *priv)
|
||||
{
|
||||
uint16_t dt = USR_TIMER_IDLE_MS;
|
||||
uint16_t i;
|
||||
|
||||
(void)priv;
|
||||
for (i = 0; i < dt; i++) {
|
||||
jbTimerIrq(); /* 协议 1ms 时基:实际循环 dt 次对齐真实时间 */
|
||||
}
|
||||
|
||||
user_key_scan(dt); /* 双键扫描(内部完成长按分级,只置标志) */
|
||||
user_key_handle(); /* 派发按键回调:喷淋启停 / 配对提示 / OTA 标志 */
|
||||
app_spray_poll(dt); /* 作业引擎:时长/间隔倒数,到点切泵(唯一切泵者) */
|
||||
app_function_poll(); /* 同步 DP1 = 作业态(含间隔等待) */
|
||||
app_led_run(dt); /* 绿=作业态、红=配对态;内部推进配对会话 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 上电打印固件版本与编译时间,方便串口对应当前是哪一包
|
||||
* @return 无
|
||||
*/
|
||||
static void usr_log_boot_version(void)
|
||||
{
|
||||
log_info("sw V%d.%d.%d hw V%d.%d.%d build %s %s\n",
|
||||
JB_MCU_SW_VERSION_MAJOR, JB_MCU_SW_VERSION_MINOR, JB_MCU_SW_VERSION_PATCH,
|
||||
JB_MCU_HW_VERSION_MAJOR, JB_MCU_HW_VERSION_MINOR, JB_MCU_HW_VERSION_PATCH,
|
||||
__DATE__, __TIME__);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 业务初始化(5V 常电上电即开机,无按键等待)
|
||||
* @return 无
|
||||
*/
|
||||
void usr_jb_init(void)
|
||||
{
|
||||
usr_log_boot_version(); /* UART 已在 app_main 起来,最先能看到版本 */
|
||||
|
||||
bsp_hw_init();
|
||||
app_led_init(); /* 先于一切业务:灯效事件表要最先装载 */
|
||||
|
||||
jbInit();
|
||||
userInit();
|
||||
if(jb_timer_id==0)jb_timer_id = sys_s_hi_timer_add(NULL, usr_timer_1_ms, TIMER_PERIOD_MS);
|
||||
userInit(); /* DP7 默认 10s×3+3s 已就位 */
|
||||
|
||||
app_pump_init(); /* 泵两脚低(bsp_hw 已配),状态清零 */
|
||||
app_spray_init(); /* 作业引擎:空闲不喷 */
|
||||
app_function_init();
|
||||
|
||||
user_key_init(); /* 双键:PB1 喷淋短按 / PA0 配网 5s-12s */
|
||||
/* 上电时键若还按着:只锁该键短按(防一上电就开喷),长按 5s/12s 分级照常,
|
||||
* 所以"插电时就按住 PA0 5s 进配对"这一用法仍然成立 */
|
||||
user_key_lock_if_held();
|
||||
|
||||
/* priority=1 常驻注册,永不重挂(5V 常电不需要低功耗) */
|
||||
usr_timer_add(NULL, usr_timer_tick, USR_TIMER_IDLE_MS, 1);
|
||||
|
||||
log_info("sprayer P0 up: led=%d key=%d pump=%d spray=%d\n",
|
||||
BOARD_LED_ENABLE, BOARD_KEY_ENABLE,
|
||||
BOARD_PUMP_ENABLE, BOARD_SPRAY_ENABLE);
|
||||
}
|
||||
|
||||
void usr_timer_1_ms()
|
||||
/**
|
||||
* @brief BLE 收到见宝载荷,送入协议环形缓冲
|
||||
* @param data 载荷指针
|
||||
* @param len 载荷长度,单位字节
|
||||
* @return 无
|
||||
*/
|
||||
void usr_jb_le_recieve_data(u8 *data, u16 len)
|
||||
{
|
||||
jbTimerIrq();
|
||||
jbPutData(data, len);
|
||||
}
|
||||
|
||||
void usr_jb_le_recieve_data(u8* data,u16 len)
|
||||
{
|
||||
jbPutData(data,len);
|
||||
}
|
||||
|
||||
void usr_timer_loop()///500ms
|
||||
/**
|
||||
* @brief 约 500ms:协议周期处理、配对/OTA 落地(任务上下文)
|
||||
* @return 无
|
||||
*/
|
||||
void usr_timer_loop(void)
|
||||
{
|
||||
userHandle();
|
||||
jbProtocolHandle(&gDevData);
|
||||
app_function_loop(); /* 配对/OTA 动作落地(app_defer 消费) */
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user