兼容旧版本串口协议 zsxfly20240820
This commit is contained in:
parent
5bb0d06413
commit
33051e8fb3
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
|
@ -9,18 +9,12 @@
|
|||
#include "app_PAD.h"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// void app_otas_txd(uint16_t len, const uint8_t *data){
|
||||
// app_PAD_Sendcmd(OTA_CMD_ID ,OTA_REG_ADDR ,data ,len);
|
||||
// }
|
||||
|
||||
// 用于PAD通信处理
|
||||
PAD_daraframe_t PAD_daraframe;
|
||||
volatile uint8_t Rec_state =0;
|
||||
volatile uint8_t Rec_data_cnt =0;
|
||||
|
||||
/*
|
||||
static void PAD_Data_Hande(void){
|
||||
uint8_t ret_data[MAX_LEN]={0,0};
|
||||
uint8_t length=0;
|
||||
|
@ -153,7 +147,82 @@ static void PAD_Data_Hande(void){
|
|||
PAD_Data_Hande_end:
|
||||
Rec_state =0;//数据处理完要清零,准备接收下一帧数据
|
||||
}
|
||||
*/
|
||||
|
||||
void app_PAD_CheckData(uint8_t *dat , uint8_t len){
|
||||
uint8_t ret_data[MAX_LEN]={0,0};
|
||||
uint8_t length=0;
|
||||
|
||||
PAD_daraframe.header = dat[0] << 8 | dat[1];
|
||||
PAD_daraframe.cmd_id = dat[2];
|
||||
PAD_daraframe.reg_addr = dat[3];
|
||||
PAD_daraframe.length = dat[4];
|
||||
if(PAD_daraframe.length > MAX_LEN){
|
||||
return;
|
||||
}
|
||||
for(uint8_t i=0;i<PAD_daraframe.length;i++){
|
||||
PAD_daraframe.data[i] = dat[5+i];
|
||||
}
|
||||
PAD_daraframe.crc = dat[5+PAD_daraframe.length];
|
||||
|
||||
if(PAD_daraframe.header == FRAME_HEADER){
|
||||
uint8_t CRC =crc8_maxim(dat ,len-1);
|
||||
if(CRC == PAD_daraframe.crc){ //CRC校验通过
|
||||
switch(PAD_daraframe.cmd_id){//cmd_id
|
||||
case 0x01: // 配置系统参数
|
||||
// uint8_t
|
||||
sys_conf.Manager_sLim= PAD_daraframe.data[0];
|
||||
sys_conf.Tourist_sLim= PAD_daraframe.data[1];
|
||||
// uint16_t
|
||||
sys_conf.Brake_DLimit= 100 * PAD_daraframe.data[2];
|
||||
sys_conf.Speed_Cut_DLimit= 100 * PAD_daraframe.data[3];
|
||||
sys_conf.Brake_DLimit_B= 100 * PAD_daraframe.data[4];
|
||||
sys_conf.Speed_Cut_DLimit_B= 100 * PAD_daraframe.data[5];
|
||||
|
||||
sys_conf.VERSION =SOFTWARE_ID; // 软件版本号
|
||||
sys_conf.Modbus_addr =D_Modbus_addr; // MODBUS地址
|
||||
sys_conf.Speed_Cut_sLim =D_Speed_Cut_sLim; // 减速油门极限
|
||||
|
||||
write_cfg(&sys_conf);
|
||||
case 0x02: // 读取系统配置
|
||||
ret_data[length++]=sys_conf.Manager_sLim;
|
||||
ret_data[length++]=sys_conf.Tourist_sLim;
|
||||
|
||||
ret_data[length++]=sys_conf.Brake_DLimit /100;
|
||||
ret_data[length++]=sys_conf.Speed_Cut_DLimit /100;
|
||||
ret_data[length++]=sys_conf.Brake_DLimit_B /100;
|
||||
ret_data[length++]=sys_conf.Speed_Cut_DLimit_B /100;
|
||||
|
||||
// app_PAD_Sendcmd(UART1_PORT,PAD_daraframe.cmd_id,0x01,ret_data,length);
|
||||
break;
|
||||
case 0x03: //写 //0 命令控制进入管理员模式//1 命令控制进入游客模式
|
||||
sys_sta.Manager =PAD_daraframe.data[0];
|
||||
sys_sta.Tourist =PAD_daraframe.data[1];
|
||||
if(1==sys_sta.Tourist && 1==sys_sta.Manager){
|
||||
sys_sta.Tourist =0;
|
||||
sys_sta.Manager =1;
|
||||
}
|
||||
ret_data[length++] =sys_sta.Manager;
|
||||
ret_data[length++] =sys_sta.Tourist;
|
||||
// app_PAD_Sendcmd(UART1_PORT,PAD_daraframe.cmd_id,0x01,PAD_daraframe.data,PAD_daraframe.length);
|
||||
break;
|
||||
case 0x04: //读 系统模式
|
||||
ret_data[length++] =sys_sta.Smode;
|
||||
break;
|
||||
case 0x05: //写 //0 关闭12V输出//1 开启12V输出
|
||||
ret_data[length++] =sys_sta.O_12V;
|
||||
break;
|
||||
case 0x06: //读 //12V输出状态
|
||||
sys_sta.O_12V = PAD_daraframe.data[0] & 0x01;
|
||||
break;
|
||||
}
|
||||
app_PAD_Sendcmd(PAD_daraframe.cmd_id ,0x01 ,ret_data ,length);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
void app_PAD_Receive(uint8_t data){
|
||||
uint8_t *frame = (uint8_t *)&PAD_daraframe;
|
||||
|
||||
|
@ -221,11 +290,10 @@ void app_PAD_Receive(uint8_t data){
|
|||
Rec_state = 7;//数据处理完,需要将状态位归零,才会接收下一帧数据,即:uart1_state =0时。
|
||||
PAD_Data_Hande();
|
||||
Rec_state =0;
|
||||
/*
|
||||
rx handler codes....
|
||||
*/
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
//发送命令
|
||||
void app_PAD_Sendcmd(uint8_t cmd_id ,uint8_t reg_addr ,const uint8_t *data, uint8_t length){
|
||||
|
|
|
@ -29,6 +29,9 @@ typedef struct PAD_daraframe{
|
|||
|
||||
//初始化
|
||||
void app_uart_Init(uint8_t port, uint32_t baudrate, uint8_t io_tx, uint8_t io_rx);
|
||||
|
||||
void app_PAD_CheckData(uint8_t *dat , uint8_t len);
|
||||
|
||||
// 接收数据
|
||||
void app_PAD_Receive(uint8_t data);
|
||||
//发送命令
|
||||
|
|
|
@ -432,10 +432,13 @@ static tmr_tk_t Rx_timeout_handler(tmr_id_t id){
|
|||
MODBUS_ReceCount = app_modbus_Rb_Read(&MODBUS_Rece_BUF[0], MODBUS_MAX_LEN);
|
||||
|
||||
DEBUG("RC:%d\n",MODBUS_ReceCount);
|
||||
// uart_send(UART1_PORT ,MODBUS_ReceCount ,MODBUS_Rece_BUF);
|
||||
|
||||
app_PAD_CheckData(MODBUS_Rece_BUF, MODBUS_ReceCount);//PAD数据解析
|
||||
|
||||
app_modbus_CheckData(MODBUS_Rece_BUF, MODBUS_ReceCount);//modbus数据解析
|
||||
|
||||
app_otas_rxd(MODBUS_ReceCount ,MODBUS_Rece_BUF);//otas数据解析
|
||||
|
||||
while(MODBUS_ReceCount){
|
||||
MODBUS_Rece_BUF[--MODBUS_ReceCount] = 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue