?? 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 + -