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

📄 de_encode.c

📁 C语言源代码及相关资料
💻 C
📖 第 1 页 / 共 5 页
字号:
						
						
						
					}
					
					pcur_IPMAINDATA->ipDataLength=iplace;
					for(iTemp=0;iTemp<sizeof(pcur_IPMAINDATA->ipDataLength);iTemp++)
						ss[iTemp]=(INT8U)((pcur_IPMAINDATA->ipDataLength)>>(8*(sizeof(pcur_IPMAINDATA->ipDataLength)-iTemp-1)));
					
					*inewlen=iplace;
					
					FREE(p);
				}
				break;
			}
			
			default:
			{	//U_RtnAnswComm:		//4.3.2.5 定位终端命令应答(命令ID:0105H)	29
				if(pcur_IPMAINDATA->answerFlag==MAIN_ANSWER_FLAG)
				{
					STRU_U_RtnAnsw_Comm	rtnAnsw;
					
			
					rtnAnsw.srv_CommNum=pcur_IPMAINDATA->commandNumber;   //命令序号
					rtnAnsw.srv_CommID=pcur_IPMAINDATA->commandID; //命令ID
					rtnAnsw.exec_Result_Flag=0;    // 0:成功       1:失败

					
					iplace=0;
					pcur_IPMAINDATA->answerFlag=MAIN_UNANSWER_FLAG;  //应答标志,00:不需要应答,01:需要应答
					iplace+=sizeof(pcur_IPMAINDATA->ipDataLength);
					pcur_IPMAINDATA->commandNumber=commandNum++;
					pcur_IPMAINDATA->commandID=U_RtnAnswComm;	//4.3.2.5 定位终端命令应答(命令ID:0105H)	29
					ss[iplace++]=pcur_IPMAINDATA->protocolVersion;  //
					ss[iplace++]=pcur_IPMAINDATA->answerFlag;  //
					for(iTemp=0;iTemp<sizeof(pcur_IPMAINDATA->terminalID);iTemp++)
						ss[iplace++]=pcur_IPMAINDATA->terminalID[iTemp];
					for(iTemp=0;iTemp<sizeof(pcur_IPMAINDATA->serverID);iTemp++)
						ss[iplace++]=(INT8U)((pcur_IPMAINDATA->serverID)>>(8*(sizeof(pcur_IPMAINDATA->serverID)-iTemp-1)));
					for(iTemp=0;iTemp<sizeof(pcur_IPMAINDATA->commandNumber);iTemp++)
						ss[iplace++]=(INT8U)((pcur_IPMAINDATA->commandNumber)>>(8*(sizeof(pcur_IPMAINDATA->commandNumber)-iTemp-1)));
					for(iTemp=0;iTemp<sizeof(pcur_IPMAINDATA->commandID);iTemp++)
						ss[iplace++]=(INT8U)((pcur_IPMAINDATA->commandID)>>(8*(sizeof(pcur_IPMAINDATA->commandID)-iTemp-1)));
					
					//pcur_IPMAINDATA->ipDataLength=iplace+sizeof(rtnAnsw);
					//for(iTemp=0;iTemp<sizeof(pcur_IPMAINDATA->ipDataLength);iTemp++)
					//	ss[iTemp]=(INT8U)((pcur_IPMAINDATA->ipDataLength)>>(8*(sizeof(pcur_IPMAINDATA->ipDataLength)-iTemp-1)));
					
					for(iTemp=0;iTemp<sizeof(rtnAnsw.srv_CommNum);iTemp++)
						ss[iplace++]=(INT8U)((rtnAnsw.srv_CommNum)>>(8*(sizeof(rtnAnsw.srv_CommNum)-iTemp-1)));
					for(iTemp=0;iTemp<sizeof(rtnAnsw.srv_CommID);iTemp++)
						ss[iplace++]=(INT8U)((rtnAnsw.srv_CommID)>>(8*(sizeof(rtnAnsw.srv_CommID)-iTemp-1)));
					ss[iplace++]=rtnAnsw.exec_Result_Flag;    // 0:成功       1:失败
					
					pcur_IPMAINDATA->ipDataLength=iplace;
					for(iTemp=0;iTemp<sizeof(pcur_IPMAINDATA->ipDataLength);iTemp++)
						ss[iTemp]=(INT8U)((pcur_IPMAINDATA->ipDataLength)>>(8*(sizeof(pcur_IPMAINDATA->ipDataLength)-iTemp-1)));
					

					*inewlen=iplace;

				 }
			}
			break;
		}

		return TRUE;
	}
	else
	{
		IPMAINDATA		cur_IPMAINDATA;

		pcur_IPMAINDATA=&cur_IPMAINDATA;
		pcur_IPMAINDATA->pDataContext=NULL;

		
		iplace=0;
		pcur_IPMAINDATA->ipDataLength=iplace;
		for(iTemp=0;iTemp<sizeof(pcur_IPMAINDATA->ipDataLength);iTemp++)
			ss[iplace++]=(INT8U)((pcur_IPMAINDATA->ipDataLength)>>(8*(sizeof(pcur_IPMAINDATA->ipDataLength)-iTemp-1)));
		pcur_IPMAINDATA->protocolVersion=ProtocolVersion;  //协议版本号   版本号为2
		ss[iplace++]=pcur_IPMAINDATA->protocolVersion;  //
		pcur_IPMAINDATA->answerFlag=0x01;  //本条消息是否需要应答。00:不需要应答01:需要应答
		ss[iplace++]=pcur_IPMAINDATA->answerFlag;  //应答标志
		//memset(pcur_IPMAINDATA->terminalID,0,sizeof(pcur_IPMAINDATA->terminalID));
		memcpy(pcur_IPMAINDATA->terminalID,TERM_ID,sizeof(TERM_ID));//从GPRS模块取值
		memmove(ss+iplace,pcur_IPMAINDATA->terminalID,sizeof(pcur_IPMAINDATA->terminalID));
		iplace+=sizeof(pcur_IPMAINDATA->terminalID);
		pcur_IPMAINDATA->serverID=0x0000; ////控制源ID,定位终端主动向中心上行的数据中此值为0
		for(iTemp=0;iTemp<sizeof(pcur_IPMAINDATA->serverID);iTemp++)
			ss[iplace++]=(INT8U)((pcur_IPMAINDATA->serverID)>>(8*(sizeof(pcur_IPMAINDATA->serverID)-iTemp-1)));
		pcur_IPMAINDATA->commandNumber=commandNum++;	//命令序号
		for(iTemp=0;iTemp<sizeof(pcur_IPMAINDATA->commandNumber);iTemp++)
			ss[iplace++]=(INT8U)((pcur_IPMAINDATA->commandNumber)>>(8*(sizeof(pcur_IPMAINDATA->commandNumber)-iTemp-1)));
		pcur_IPMAINDATA->commandID=baseCommID_Up;	//命令ID
		for(iTemp=0;iTemp<sizeof(pcur_IPMAINDATA->commandID);iTemp++)
			ss[iplace++]=(INT8U)((pcur_IPMAINDATA->commandID)>>(8*(sizeof(pcur_IPMAINDATA->commandID)-iTemp-1)));
		
		switch(baseCommID_Up)
		{
			case U_GetSrvParamsComm:		//4.3.2.1 获取中心服务器通讯参数指令(命令ID:0101H)	26
			case U_LoginComm:				//4.3.2.2 定位终端登录(命令ID:0102H)	27
			case U_DormancyComm:			//4.3.2.3 定位终端休眠(命令ID:0103H)	27
			case U_ShutComm:				//4.3.2.4 定位终端关机(命令ID:0104H)	28
			case U_UploadPlaceComm:			//4.3.2.6 上传位置信息(命令ID:0106H)	29
			{
				STRU_U_StatusBit_FORM		statusBit_Form;
				
				GetStatusBitForm(ss,&iplace,&statusBit_Form);
				if(U_UploadPlaceComm==baseCommID_Up)
				{
					pcur_IPMAINDATA->answerFlag=0x00;  //本条消息是否需要应答。00:不需要应答01:需要应答
					ss[sizeof(pcur_IPMAINDATA->ipDataLength)+sizeof(pcur_IPMAINDATA->protocolVersion)]=pcur_IPMAINDATA->answerFlag;  //应答标志
				}
				if(baseCommID_Up==U_GetSrvParamsComm)
					ReConnect_OK=0;	//获取新通讯参数
				
				break;
				
			}
			//case U_RtnAnswComm:		//4.3.2.5 定位终端命令应答(命令ID:0105H)	29
			//break;					//strEncoder_trans函数内default:处理
			
			case U_UploadPegMenuRtnComm:	//4.3.2.7 上传固定菜单返回信息(命令ID:0107H)	31
			{
				STRU_U_UploadPegMenuRtn_Comm	uploadPegMenuRtn;
				INT8U	tempbuff[40];
				
				ss[iplace++]=uploadPegMenuRtn.menu_ID;			//驾驶员所选择的菜单ID
				ss[iplace++]=uploadPegMenuRtn.menuInfo_Len;		//固定菜单内容长度
				uploadPegMenuRtn.pMenu_Info=tempbuff;		//固定菜单内容小于40个字节
				memmove(ss+iplace,uploadPegMenuRtn.pMenu_Info,uploadPegMenuRtn.menuInfo_Len);
				iplace+=uploadPegMenuRtn.menuInfo_Len;
				
				break;
			}
			case U_UploadMenuRtnComm:		//4.3.2.8 上传带菜单的调度信息的反馈信息(命令ID:0108H)	31
			break;
			//case U_UploadParam:				//4.3.2.9 上传定位终端参数(命令ID:0109H)	32
			//break;							//strEncoder_trans函数内D_paramQueryComm对U_UploadParam:处理			
			case U_UploadUpdFirmwareStaComm:		//4.3.2.10 上传定位终端升级固件状态指令(命令ID:010AH)	32
			ss[iplace++]=0;		//0:升级成功  1:升级失败
			break;
			case U_UploadAlarmComm:			//4.3.2.11 上传报警指令(命令ID:010BH)	32
			{
				
				STRU_U_StatusBit_FORM		statusBit_Form;
				
				ss[iplace++]=CUR_ALARM_ID;	//alarm_Type;
				GetStatusBitForm(ss,&iplace,&statusBit_Form);
				
				GetCfgWorkParamItem_All(ss,&iplace);	//得到实际设置的需要上传的所有工作参数ID及参数值,并放入SS
				
				
				break;
			}
			
			/*
			case	U_UploadPhoto1Comm:			//=0x0501,		//4.4.2.1 上传照片一(命令ID:0501H)	41
			break;
			case	U_UploadPhoto2Comm:			//=0x0502,		//4.4.2.2 上传照片二(命令ID:0502H)	43
			break;
			case	U_UploadBillInfoComm:		//=0x0503,		//4.4.2.3 上传表单信息(命令ID:0503H)	44
			break;
			*/
			case	U_UploadWorkParamComm:		//=0x0504,		//4.4.2.4 上传定位终端工作参数(命令ID:0504H)	46
			{
				INT16U		* pTemp=NULL;
				INT16U		tempPlace=0;
				STRU_U_StatusBit_FORM		statusBit_Form;
				
				
				GetStatusBitForm(ss,&iplace,&statusBit_Form);	//按照协议命令体,添加位置信息
				
				tempPlace=iplace;	//记录存放ID的开始位置
				GetCurCfgWorkParamID(&cfg_WorkParam);	//得到设置的工作参数ID
				*inewlen=iplace;
				*inewlen+=cfg_WorkParam.cfg_WorkParamID_cou*2;
				
				pTemp=(INT16U	*)cfg_WorkParam.cfg_WorkParamID;
				
				while((INT16S)(*inewlen-tempPlace)>0)
				{
					INT16U		paramAddr=0;
					STRU_U_WorkParam_Form		uploadParam;
					
					uploadParam.workParam_ID=*pTemp;            //2个字节
					pTemp+=1;
					tempPlace+=2;
					
					for(iTemp=0;iTemp<sizeof(uploadParam.workParam_ID);iTemp++)	
						ss[iplace++]=(uint8)(uploadParam.workParam_ID>>(8*(sizeof(uploadParam.workParam_ID)-iTemp-1)));
					GetOmoveAddr(WORK_PARAMS,WORK_PARAMS_COUNT,uploadParam.workParam_ID,(uint16	*)&(uploadParam.workParam_ValueLen),&paramAddr);
					if((iplace+uploadParam.workParam_ValueLen)>GPRSINFOLEN)		//
					{
						iplace-=(1+sizeof(uploadParam.workParam_ID));
						break;
					}
					ss[iplace++]=uploadParam.workParam_ValueLen;
					GetCurCfgWorkParamValue(uploadParam.workParam_ID,uploadParam.workParam_ValueLen,ss+iplace);
					
					//GetParamVal_ASCII(uploadParam.workParam_ID,ss+iplace,(uint32 *)&uploadParam.workParam_ValueLen);
					//ss[iplace-1]=uploadParam.workParam_ValueLen;//重新将参数长度值赋值。
					
					iplace+=uploadParam.workParam_ValueLen;
					
				}
				
				for(iTemp=0;iTemp<sizeof(iplace);iTemp++)
					ss[iTemp]=(INT8U)(iplace>>(8*(sizeof(iplace)-iTemp-1)));
				
				*inewlen=iplace;
				
				break;
			}
			case	U_UploadLogInfoComm:		//=0x0505			//4.4.2.5 上传日志信息(命令ID:0505H)	49
			{
				
				STRU_U_UploadLogInfo_Comm	uploadLogInfo;
				STRU_U_StatusBit_FORM	statusBit_Form;
				STRU_DataSegment		dataSegment;
				
				GetStatusBitForm(ss,&iplace,&statusBit_Form);
				ss[iplace++]=uploadLogInfo.data_CommID;	//需上传数据的命令ID。
				uploadLogInfo.pSTRU_U_StatusBit_FORM=&statusBit_Form;	//同定位终端状态位结构体
				ss[iplace++]=uploadLogInfo.data_SegmentCou;	//数据总条数
				uploadLogInfo.pSTRU_DataSegment=&dataSegment;
				while(TRANSLEN-iplace>0)
				{
					ss[iplace++]=dataSegment.dataSegment_Len;	//数据段的长度
					memcpy(ss+iplace,dataSegment.pDataSegmentInfo,dataSegment.dataSegment_Len);	//内容是该数据的全部信息内容。
					iplace+=dataSegment.dataSegment_Len;
					if(iplace>GPRSINFOLEN)
					{
						iplace-=(dataSegment.dataSegment_Len+1);
						break;
					}
					
				}
				
				break;
			}
			//case	U_PassInAndOut_RouteAlarmComm:		//=0x0901,		//4.5.2.1 进出区域/路线报警指令(命令ID:0901H)	59
			//break;
			case	U_UploadCompressRevertComm:			//=0x0902,		//4.5.2.2 上传压缩回传信息(命令ID:0902H)	60
			{
				
				
				STRU_U_StatusBit_FORM		statusBit_Form;
				STRUCT_CompressPointStatusBit_Form	compressPointStatusBit;
				
				INT16U	tempPlace=0;	
				
				if(cur_DatumMark_Falg==0)	//当前压缩--0:基准点未确定,1:基准点已确定
				{
					
					cur_DatumMark_Falg=1;	//基准点已确定
					
					if(setupCompressRevert.compressRevertData==0x01)	// 需压缩回传的数据.  00:表示定位数据.01:表示带工作参数的定位数据
					{
						ss[iplace++]=(uint8)(U_UploadWorkParamComm>>8);	//表示带工作参数的定位数据
						ss[iplace++]=(uint8)(U_UploadWorkParamComm);
					}
					else
					{
						ss[iplace++]=(uint8)(U_UploadPlaceComm>>8);	
						ss[iplace++]=(uint8)U_UploadPlaceComm;
					}
					ss[iplace++]=setupCompressRevert.accIn_CompressTimeSlot;		//压缩的时间间隔(ACC开).单位秒,最小为1秒。  该值与中心下发的设定压缩回传参数中的值相等
					ss[iplace++]=setupCompressRevert.accOut_CompressTimeSlot;	//压缩的时间间隔(ACC关).单位秒,最小为1秒。
					
					/////----------------基准点数据---------------//
					tempPlace=iplace;//基准点数据长度--在SS中位置
					iplace++;//基准点数据长度,后面赋值
					GetStatusBitForm(ss,&iplace,&statusBit_Form);
					if(setupCompressRevert.compressRevertData==0x01)	// 01:表示带工作参数的定位数据
						GetCfgWorkParamItem_All(ss,&iplace);	//得到实际设置的需要上传的所有工作参数ID及参数值,并放入SS;	//基准点工作参数	不定	如果设置工作数据,需上传
					ss[tempPlace]=iplace-tempPlace-1;//基准点数据长度	1
					
					/////----------------基准点数据---------------//
					
					*inewlen=iplace;	//基准点长度
					
				}
				else	//1:基准点已确定
				{
					
					iplace=*inewlen;	//得到上次压缩位置的数据包长度
					/////----------------压缩点数据---------------//
					tempPlace=iplace;//压缩点数据长度--在SS中位置
					iplace++;//压缩点数据长度,后面赋值
					GetCompressPointStatusBitForm(ss,&iplace,&compressPointStatusBit);	//得到压缩点定位信息
					if(setupCompressRevert.compressRevertData==0x01)	//压缩点1工作参数	不定	如果设置工作数据,需上传
						GetCfgWorkParamItem_All(ss,&iplace);
					ss[tempPlace]=iplace-tempPlace-1;	//压缩点1数据长度	1
					
					/////----------------压缩点数据---------------//
					if(iplace>(GPRSINFOLEN-50))		//50为盲区回传消息头预留空间//总长度超过缓冲区大小,后面的压缩包不放入数据包
					{
						iplace=*inewlen;
						setupCompressRevert.compress_PlaceCou=cur_Compress_PlaceCou;	//此后已满足缓冲区大小的压缩包数目来压缩回传
					}
					*inewlen=iplace;	//基准点,前面各压缩点以及本次压缩点的总长度
				}
				
				break;
				
			}
			case	U_UploadDriverInfoComm:				//=0x0903,		//4.5.2.3 上传驾驶员信息(命令ID:0903H)	63
			{
				STRU_U_StatusBit_FORM		statusBit_Form;
				
				GetStatusBitForm(ss,&iplace,&statusBit_Form);
				ss[iplace++]=strlen((char *)G_LoadingMotorman);
				memcpy(ss+iplace,G_LoadingMotorman,strlen((char *)G_LoadingMotorman));
				iplace+=strlen((char *)G_LoadingMotorman);
				ss[iplace++]=Motorman_LoginStau;	//驾驶员状态登陆状态
				
				break;
			}
			case	U_UploadMobileSMSInfoComm:			//=0x0904,		//4.5.2.4 上传手机短信信息(命令ID:0904H)	64
			{	
				STRU_U_StatusBit_FORM		statusBit_Form;
				
				GetStatusBitForm(ss,&iplace,&statusBit_Form);
				ss[iplace++]=strlen(G_LoadingMotorman);	//ID
				memcpy(ss+iplace,G_LoadingMotorman,strlen(G_LoadingMotorman));
				iplace+=strlen(G_LoadingMotorman);
				ss[iplace++]=strlen(G_DriverLoginMobile);	//驾驶员手机号码
				memcpy(ss+iplace,G_DriverLoginMobile,strlen(G_DriverLoginMobile));
				iplace+=strlen(G_LoadingMotorman);
				memcpy(ss+iplace,G_SMSInfo,strlen(G_SMSInfo));
				
				break;
			}
			case	U_BlindSectionRepairComm:			//=0x0905		//4.5.2.5 盲区补偿(命令ID:0905H)	65
			{
				
				STRU_U_UploadLogInfo_Comm	uploadLogInfo;	//同STRU_U_BlindSectionRepair_Comm
				STRU_U_StatusBit_FORM	statusBit_Form;
				uint16	tempPlace=0;	//记录数据总条数的位置
				
				if(((uint8)BlindSection_Cfg&0x0f)==(0x01<<0))//((BlindSection_Cfg&(0x01<<0))>0)
					uploadLogInfo.data_CommID=U_UploadPlaceComm;
				else	if(((uint8)BlindSection_Cfg&0x0f)==(0x01<<1))//((BlindSection_Cfg&(0x01<<1))>0)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -