⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 oil_collection.c

📁 C语言源代码及相关资料
💻 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 + -