开始更改定时器版本架构

This commit is contained in:
kkkjtr 2026-03-10 17:01:43 +08:00
parent c2b6056b66
commit 71c5dbc702
3 changed files with 40 additions and 23 deletions

View File

@ -139,6 +139,11 @@ typedef struct{
extern sys_sta_t sys_sta; extern sys_sta_t sys_sta;
extern BAT_Message_t BAT_Message; extern BAT_Message_t BAT_Message;
extern uint16_t g_car_ctrl_timer; // 定时时间(单位由平台定义)
extern uint16_t g_car_ctrl_timer; // 剩余时间(单位由平台定义)
extern uint16_t g_car_ctrl_interval; // 本地播报间隔(单位由平台定义)
void control_out_init(void); void control_out_init(void);
#endif //__CONTROL_OUT_H__ #endif //__CONTROL_OUT_H__

View File

@ -268,12 +268,17 @@ static int jt808_BodyParse(void *Prsmsg_body, PrsResult_t *Result){
break; break;
} }
case ID_Car_Ctrl:{// 车辆控制 case ID_Car_Ctrl:{// 车辆控制
if(Result->msg_head.msgbody_attr.msgbodylen == 1){ // 车辆控制 if(Result->msg_head.msgbody_attr.msgbodylen >= 5){ // 车辆控制
jt808_Set_CarStatus(((uint8_t *)Prsmsg_body)[0]); // 设置车辆状态 jt808_Set_CarStatus((uint8_t *)Prsmsg_body); // 设置车辆状态
Result->Rsp_result = Msg_ok; Result->Rsp_result = Msg_ok;
}else if(Result->msg_head.msgbody_attr.msgbodylen == 1) {
JT808_DEBUG("WARN: Received 1-byte car control, consider upgrading platform\n");
uint8_t temp[5] = {((uint8_t *)Prsmsg_body)[0], 0, 0, 0, 0};
jt808_Set_CarStatus(temp);
Result->Rsp_result = Msg_ok;
}else{ }else{
Result->Rsp_result = Msg_invalid; Result->Rsp_result = Msg_invalid;
} }
Result->Rsp_flow_num = Result->msg_head.msg_flow_num; Result->Rsp_flow_num = Result->msg_head.msg_flow_num;
Result->Rsp_msg_id = Result->msg_head.msg_id; Result->Rsp_msg_id = Result->msg_head.msg_id;
jt808_pkg_send(ID_Car_CtrlResp, 0);// 发送车辆控制应答,设置本消息无发送应答 jt808_pkg_send(ID_Car_CtrlResp, 0);// 发送车辆控制应答,设置本消息无发送应答

View File

@ -262,25 +262,32 @@ void update_manager_check_timeout(void) {
osMutexRelease(update_mutex); osMutexRelease(update_mutex);
} }
// 控制车辆状态 // 控制车辆状态参数为5字节数据byte0控制位byte1-2定时时间(大端)byte3-4播报间隔(大端)
void jt808_Set_CarStatus(uint8_t status){ void jt808_Set_CarStatus(const uint8_t status[5]) {
// (void)status; uint8_t ctrl = status[0];
// TODO: 车辆控制状态 uint16_t timer = (status[1] << 8) | status[2];
if(status & 0x80){ // 恢复厂设置 uint16_t interval = (status[3] << 8) | status[4];
jt808_delete_TermParam(); // 删除终端参数文件
jt808_delete_Fence_area(); // 删除围栏区域文件 // 保存定时时间和播报间隔到系统状态需确保sys_sta中有对应成员
local_tts_text_play("即将重启系统",0,0); // 语音播报 sys_sta.timer_value = timer;
osDelay(7000/5); sys_sta.broadcast_interval = interval;
cm_pm_reboot(); // 重启系统
} // 原有控制逻辑基于ctrl字节
if(status & 0x70){ // 重启系统 if(ctrl & 0x80) { // 恢复出厂设置
local_tts_text_play("即将重启系统",0,0); // 语音播报 jt808_delete_TermParam(); // 删除终端参数文件
osDelay(7000/5); jt808_delete_Fence_area(); // 删除围栏区域文件
cm_pm_reboot(); // 重启系统 local_tts_text_play("即将重启系统", 0, 0);
} osDelay(7000 / 5);
sys_sta.O_door_lock = (status & 0x01)? 1 : 0; // 设置电门锁状态 cm_pm_reboot();
sys_sta.PLT_MODE = (status & 0x02)? 1 : 0; // 平台设置的模式 //1:游客模式,0:管理模式 }
// sys_sta.P_Radar_EN = (status & 0x04)? 1 : 0; // 1:雷达使能,0:雷达禁止 if(ctrl & 0x70) { // 重启系统(任意位)
local_tts_text_play("即将重启系统", 0, 0);
osDelay(7000 / 5);
cm_pm_reboot();
}
sys_sta.O_door_lock = (ctrl & 0x01) ? 1 : 0; // 电门锁
sys_sta.PLT_MODE = (ctrl & 0x02) ? 1 : 0; // 平台模式
// sys_sta.P_Radar_EN = (ctrl & 0x04) ? 1 : 0; // 雷达使能(注释未用)
} }
// 获取车辆状态 // 获取车辆状态