📄 de_encode.c
字号:
}
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),¶mAddr);
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 + -