📄 oil_collection.c
字号:
#include "config.h"
INT16U strEncoder_OilCollection(INT8U * dest ,INT16U *inewlen,uint8 baseCommID_Up)
{
INT16U iplace=0;
INT8U * ss;
STRU_Term2OilCollection temp;
ss=dest;
iplace=0;
temp.startChr=0x98;
ss[iplace++]=temp.startChr;
temp.dataLen=0;
ss[iplace++]=temp.dataLen;
temp.commandID=baseCommID_Up;
ss[iplace++]=temp.commandID;
switch(baseCommID_Up)
{
case Term_StartSend: //0x04: 子板开始发送数据,数据内容为空.。收到此命令后子板开始发送数据,每15s发送一次数据,数据内容包括一路油量数据和两路温度数据,具、体数据格式参加子板发送数据协议。
break;
case Term_StopSend: //0x05: 子板停止发送数据,数据内容为空。收到此指令后子板停止发送数据,释放数据线。
break;
/*
case Term_ReqTemSenID: //0x06: 主机索要两路温度传感器(18B20)ID号(64位)。//(原来:主机设置两个温度传感器的ID.(预留)。)
{
uint8 buff[8];
memset(buff,0,sizeof(buff));
memcpy(ss+iplace,buff,sizeof(buff));
iplace+=sizeof(buff);
break;
}
case Term_CfgTemAlmLmt: //0x07: 主机设置温度传感器的报警阈值,数据内容长度为8个字节,依次为1#传感器高温阈值,低温阈值,2#传感器高温阈值,低温阈值。
{
uint8 buff[8];
memset(buff,0,sizeof(buff));
memcpy(ss+iplace,buff,sizeof(buff));
iplace+=sizeof(buff);
break;
}
case Term_ReqTemValue: //0x08: 主机索取两路度传感器(18B20)温度。温度值为两个字节,表示所设置温度的10倍值。实际中存在负值,所有温度数据采用补码形式。
{
uint8 buff[2];
memset(buff,0,sizeof(buff));
memcpy(ss+iplace,buff,sizeof(buff));
iplace+=sizeof(buff);
break;
}
*/
case Term_SubCommAnswer:
ss[iplace++]=OilCollection_SendData; //目前只收到//0x70命令: 子板发送油量和温度数据。
break;
}
temp.endChr=0x99;
ss[iplace++]=temp.endChr;
*inewlen=iplace;
return TRUE;
}
INT16U strDecode_OilCollection(INT8U * str,INT16U * inewlen)
{
INT8U RTN_FLAG=0;
INT8U * ss;
INT16U iplace=0;
STRU_OilCollection2Term temp;
ss=str;
temp.startChr=ss[iplace++]; //命令头 1 内容固定为 0x01
temp.commandID=ss[iplace++]; //命令ID 1 内容固定为 0x04
temp.dataLen=ss[iplace++]; //后面所剩字符长度 1 从该字节开始到结尾所有字节的长度
temp.dataLen=0x0b; //协议错误,特殊处理
temp.commandType=ss[iplace++]; //0x70指令类型 1 详见说明
if(temp.commandType==OilCollection_SendData)
{
uint8 buff[6];
memset(buff,0,sizeof(buff));
temp.pContext=buff; //数据内容 不定 详见说明
memcpy(temp.pContext,ss+iplace,sizeof(buff));
oilSum =(uint16)(temp.pContext[0]<<8)+(uint16)temp.pContext[1];
temValue1=(uint16)(temp.pContext[2]<<8)+(uint16)temp.pContext[3];
temValue2=(uint16)(temp.pContext[4]<<8)+(uint16)temp.pContext[5];
//RTN_FLAG=MAIN_ANSWER_FLAG;
}
temp.checkSum=ss[iplace++]; //不定 校验和 1 前所有字节异或的结果
temp.endChr=ss[iplace++]; //不定 命令尾 1 内容固定为 0x0A
*inewlen=iplace;
RTN_FLAG=MAIN_ANSWER_FLAG;
return RTN_FLAG;
}
INT16U ParseCode_OilCollection(INT8U * buff,INT16U *inewlen,INT8U updown_flag,uint8 baseCommID_Up)
{
INT16U ret=0;
if(updown_flag==DWLOAD)
{
ret=strDecode_OilCollection(buff,inewlen);
if(ret==MAIN_ANSWER_FLAG)
{
memset(buff,0,TRANSINFOLEN/2);
strEncoder_OilCollection(buff,inewlen,baseCommID_Up);
}
else
return FALSE;
}
else if(updown_flag==UPLOAD)
{
memset(buff,0,TRANSINFOLEN/2);
strEncoder_OilCollection(buff,inewlen,baseCommID_Up);
}
else
return FALSE;
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -