📄 motormanloadingorexit.c
字号:
memset(str,0,sizeof(str));
memset(smsSetup.strSIP,0,sizeof(smsSetup.strSIP));
memset(smsSetup.strSoftVer,0,sizeof(smsSetup.strSoftVer));
memset(smsSetup.strHardID,0,sizeof(smsSetup.strHardID));
//副登陆服务器IP
memset(buff_strSIP,0,sizeof(buff_strSIP));
GetOmoveAddr(SETUP_PARAMS,SETUP_PARAMS_COUNT,0x0203,&len,&moveAddr);
W25X32_READ_Semphore(GetAddr(SETUP_PARAMS_SEC,moveAddr),len,buff_strSIP);
if(buff_strSIP[0]!=0x00)
{
for(i=0;i<sizeof(buff_strSIP);i++)
{
char buff[4];
memset(buff,0,sizeof(buff));
sprintf(buff,"%d",buff_strSIP[i]);
strcat(smsSetup.strSIP,buff);
strcat(smsSetup.strSIP,".");
}
smsSetup.strSIP[strlen(smsSetup.strSIP)-1]='\0'; //去掉最后一个"."
}
else
smsSetup.strSIP[0]='\0';
//终端软件版本号
GetOmoveAddr(SETUP_PARAMS,SETUP_PARAMS_COUNT,0x0701,&len,&moveAddr);
W25X32_READ_Semphore(GetAddr(SETUP_PARAMS_SEC,moveAddr),len,(uint8 *)smsSetup.strSoftVer);
GetParamVal_ASCII(0x200,(uint8 *)smsSetup.strSoftVer,(uint32 *)&len);
//生产ID
GetOmoveAddr(SETUP_PARAMS,SETUP_PARAMS_COUNT,0x0702,&len,&moveAddr);
W25X32_READ_Semphore(GetAddr(SETUP_PARAMS_SEC,moveAddr),len,(uint8 *)smsSetup.strHardID);
GetParamVal_ASCII(0x200,(uint8 *)smsSetup.strHardID,(uint32 *)&len);
strcat(str,Communi.strIP);//主登陆服务器IP
strcat(str,",");
strcat(str,smsSetup.strSIP);
strcat(str,",");
strcat(str,Communi.strPort);//设置中心端口号
strcat(str,",");
strcat(str,Communi.strAPN);//APN参数
strcat(str,",");
strcat(str,smsSetup.strSoftVer);
strcat(str,",");
strcat(str,smsSetup.strHardID);
strcat(str,",");
strcat(str,StrTermID); //登陆ID
return TRUE;
}
/****************************************************************************
**函数名:MsgWatchOrSet 短信设置及查看
**入口参数
**
**
**
*****************************************************************************/
void MsgWatchOrSet(uint8 *uiReviceBuf0,uint16 * uiNum)
{
char strNum[14]; //电话号码
char MsgContent[TRANSLEN/2]; //短信内容
uint16 textLen=0;
if (*uiNum>0)
{
//判断短信的PDU格式
char *p=NULL;
char *p2=NULL;
if((p=strstr((char *)uiReviceBuf0,"READ\",\""))!=NULL)
{
//char srv_SMS_Num[128]; ////中心短信发送号码
char MotormanId[DEVICE_LEN]; //驾驶员ID号
char LoadingMotorman[DEVICE_LEN];//驾驶员手机号码
uint8 i=0;
//memset(srv_SMS_Num,sizeof(srv_SMS_Num));
memset(LoadingMotorman,0,sizeof(LoadingMotorman));
//GetParamValue(0x0103,(uint8 *)srv_SMS_Num);
memset(MsgContent,0,sizeof(MsgContent));
memset(strNum,0,sizeof(strNum));
p=p+strlen("READ\",\"");
if((p2=strchr(p,'\"'))!=NULL)
{
memmove(strNum,p,p2-p); //取电话号码
if(strchr(strNum,'+')!=NULL)
{
#if !defined(_TW_)
memmove(strNum,strNum+3,strlen(strNum+3));
strNum[strlen(strNum+3)]='\0';
#else
// +886 for _TW_
memmove(strNum+1,strNum+4,strlen(strNum+4));
strNum[0]='0'; // Format convert: +8869xx-xxx-xxx ==> 09xx-xxx-xxx
strNum[strlen(strNum+4)]='\0';
#endif // end of #if !defined(_TW_)
}
if((p=strstr(p2,"\"\r\n"))!=NULL)
{
p+=strlen("\"\r\n");
if((p2=strstr(p,"\r\n"))!=NULL)
memmove(MsgContent,p,p2-p);
}
}
//取短信内容 +CMGR: "REC READ","+8613451890785","","09/03/22,12:28:55+32"=61
//进行转换为16进制
textLen=strlen(MsgContent)/2;
if((strstr(MsgContent,"*"))!=NULL)
{
char * customMobile[10]={GJ_Mobile1,GJ_Mobile2,GJ_Mobile3,GJ_Mobile4,GJ_Mobile5,GJ_Mobile6,GJ_Mobile7,GJ_Mobile8,GJ_Mobile9}; //厂家自定义查询设置号码
for(i=0;i<10;i++)
{
if((strstr(strNum,customMobile[i]))!=NULL) //自定义查询设置参数的手机号码
{
if((strstr(MsgContent,"*F#"))!=NULL)
{
char str[TRANSLEN/2];
memset(str,0,sizeof(str));
if(GetPara_DemandPara(str))
SendMsg(str,strNum);
}
else if((strstr(MsgContent,"#"))!=NULL)
{
if(SMSSET(MsgContent))
SendMsg(MsgContent,strNum);
}
}
}
}
else if(GetMotormanIdToFlash(0,strNum,MotormanId,LoadingMotorman)==TRUE) //是否符合驾驶员的信息
{
// ChineseMsgCompages(srv_SMS_Num,MsgContent,textLen);
// SendPDUSMS(MsgContent);
memset(G_SMSInfo,0,sizeof(G_SMSInfo));
strcat(G_SMSInfo,MsgContent);
if((FTP_UPGRADE_FLAG==0)&&(Connect_OK==TRUE)&&(ReConnect_OK==2))
{
ParseCode_trans(uiReviceBuf0,uiNum,UPLOAD,U_UploadMobileSMSInfoComm); //上传手机短信息
Send_data(uiReviceBuf0,TRANSINFOLEN,uiNum);
uartWrite(UART2,uiReviceBuf0,*uiNum,NULL);
//uartWrite(UART3,uiReviceBuf0,*uiNum,NULL); //测试
}
}
DelMsg(MsgNum);//删除短信
memset(MsgNum,0,sizeof(MsgNum));
}
}
}
/*********************************************************************
**函数名称:CompareSetId
**函数功能:1.中心设置了驾驶员ID后,将更新的驾驶员ID和已经登陆的驾驶员ID进行对比,查看是否将登陆的驾驶员ID删除
删除则发送消息。没有则不做处理
**入口参数:无
**出口参数:无
**修改时间:20090409
****************************************************************************************************/
//手机调度
//通过协议函数后传进来的转发值*uiReviceBuf0,
void HandsetAttemper (uint8 *uiReviceBuf0,uint16 *uiNum)
{
char str1[TRANSLEN/2]; //拨打电话的驾驶员信息,及PUD短信发送格式的固定格式
char len[4]; //0011000D91 683159614291F8 000800头
ParseCode_trans(uiReviceBuf0,uiNum,UPLOAD,D_SendoutMobileSchedulerInfoComm); //上传手机短信息
Send_data(uiReviceBuf0,TRANSINFOLEN,uiNum);
if((G_DriverLoginMobile[0]>=0x30)&&(G_DriverLoginMobile[0]<0x40))//判断是不是有驾驶员登陆或判断登陆标志位
{
ChineseMsgCompages(G_DriverLoginMobile,str1,0);//表示文本的长度并加上长度所占的一个字节长度
sprintf(len,"%02X",strlen((char*)uiReviceBuf0)/2+1);
strcat(str1,len);
strcat(str1,(char *)uiReviceBuf0);
SendPDUSMS(str1);
}
}
/*****************************************************************
**函数名称:void GetMotormanIdToFlash()
**作用 : 从FLASH中取已经存储的驾驶员信息
和拨打的电话号码进行比较,
**入口参数:SMS_YesNo_Flag 判断是否短信,1:表示短信,0:表示电话
MotormanInformetion 驾驶员信息
CallToTerminal 呼入终端的电话(正在拨打的驾驶员)
**出口参数: LoadingMotorman 已经登陆的驾驶员
MotormanId 驾驶员ID
******************************************************************/
uint8 GetMotormanNumToFlash(void)
{
uint16 iplace=0,iTemp=0;
uint8 ss[ALLDEVICE_LEN];
uint8 Loadinglen=0;
char DriveID[DEVICE_LEN];
uint8 buff[LOGINDEVICE_LEN];
memset(buff,0,sizeof(buff));
memset(ss,0,sizeof(ss));
memset(DriveID,0,sizeof(DriveID));
GetParamValue(0x0707,buff); //得到驾驶员ID
if(buff[0]<DEVICE_LEN)
{
Loadinglen=buff[0]; //将驾驶员的ID长度取出来
for(iplace=1;iplace<Loadinglen+1;iplace++)
DriveID[iplace-1]=buff[iplace];
memset(G_LoadingMotorman,0,sizeof(G_LoadingMotorman));
memcpy(G_LoadingMotorman,DriveID,strlen(DriveID));
}
else
{
memset(G_LoadingMotorman,0,sizeof(G_LoadingMotorman));
return FALSE;
}
iplace=strlen(DriveID)+1;
memset(DriveID,0,sizeof(DriveID));
if(buff[iplace]<DEVICE_LEN)
{
Loadinglen=buff[iplace]; //将驾驶员的ID长度取出来
for(iTemp=1;iTemp<Loadinglen+1;iTemp++)
DriveID[iTemp-1]=buff[iTemp+iplace];
memset(G_DriverLoginMobile,0,sizeof(G_DriverLoginMobile));
memcpy(G_DriverLoginMobile,DriveID,strlen(DriveID));
}
else
{
memset(G_DriverLoginMobile,0,sizeof(G_DriverLoginMobile));
return FALSE;
}
return FALSE;
}
/*********************************************************************
**函数名称:CompareSetId
**函数功能:1.中心设置了驾驶员ID后,将更新的驾驶员ID和已经登陆的驾驶员ID进行对比,查看是否将登陆的驾驶员ID删除
删除则发送消息。没有则不做处理
**入口参数:无
**出口参数:无
**修改时间:20090409
****************************************************************************************************/
uint8 CompareSetId(void)//0409加
{
if((G_DriverLoginMobile[0]>=0x30)&&(G_DriverLoginMobile[0]<0x40)) //表示已登陆的手机号码
{
char LoadingMotorman[DEVICE_LEN]; //已经登陆的驾驶员电话号码
char * SMS_AT[]={"5DF288AB4E2D5FC3522096640021"}; //已被中心删除!
char str2[TRANSLEN/2];
char MsgContent[TRANSLEN/2];
char MotormanId[DEVICE_LEN]; //驾驶员ID号
uint8 bl_rtn=0;
uint8 buff[LOGINDEVICE_LEN];
uint8 i=0;
char len_Str[4];
uint16 len=0;
memset(LoadingMotorman,0,sizeof(LoadingMotorman));
memset(MotormanId,0,sizeof(MotormanId));
memset(MsgContent,0,sizeof(MsgContent));
memset(str2,0,sizeof(str2));
bl_rtn=GetMotormanIdToFlash(0,G_DriverLoginMobile,MotormanId,LoadingMotorman);
//不符合驾驶员的信息,就发送短信
//当中心把驾驶员ID,更换而手机号码没有更换,时候也算退出,所以增加了下面6行
if(strlen(MotormanId)>strlen(G_LoadingMotorman)) //当驾驶员ID设置前是123时候,设置后为1234,时候,需要对设置的长度计算
len=strlen(MotormanId);
else
len=strlen(G_LoadingMotorman);
if(bl_rtn==1)
{
if(memcmp(G_LoadingMotorman,MotormanId,len)==0)
return FALSE;
}
memset(len_Str,0,sizeof(len_Str));
ChineseMsgCompages(G_DriverLoginMobile,MsgContent,0);
for(i=0;i<strlen(G_DriverLoginMobile);i++)
{
char tempbuff[4];
memset(tempbuff,0,sizeof(tempbuff));
strcat(tempbuff,"00");
sprintf(tempbuff+strlen(tempbuff),"%02X",G_DriverLoginMobile[i]);
strcat(str2,tempbuff); //提示登陆成功或退出
}
strcat(str2,SMS_AT[0]);
sprintf(len_Str,"%02X",strlen(str2)/2+1);
strcat(MsgContent,len_Str);
strcat(MsgContent,str2);
SendPDUSMS(MsgContent);
memset(G_DriverLoginMobile,0,sizeof(G_DriverLoginMobile));
memset(G_LoadingMotorman,0,sizeof(G_LoadingMotorman));
memset(buff,0xff,sizeof(buff));//根据协议要求,清除已登陆的驾驶员ID及长度
SaveParamValue(0x0707,buff); //清除已登陆的驾驶员ID
}
return TRUE;
}
uint8 HaveLinkSendLoadingInfo(INT8U *uiReviceBuf0,INT16U *uiNum)
{
if((MotormanLoadSign==1)||(MotormanLoadSign==3)) //盲区或无连接的时候,驾驶员拨打终端电话状态标志,0:表示未处理,1:表示退出,2:表示盲区,3:表示登陆。
{
if((ReConnect_OK==2)&&(Connect_OK==TRUE)&&(bl_powerdown!=1))
{
char CallToTerminal[DEVICE_LEN]; //呼入的电话号码
char MotormanId[DEVICE_LEN]; //驾驶员ID号
uint8 uiReviceBuf0_Driver[TRANSINFOLEN/2];
uint16 uiNum_Driver=0;
ParseCode_trans(uiReviceBuf0,uiNum,UPLOAD,U_UploadDriverInfoComm); //上传驾驶员登陆信息
Send_data(uiReviceBuf0,TRANSINFOLEN,uiNum);
uartWrite(UART2,uiReviceBuf0,*uiNum,NULL);
memset(CallToTerminal,0,sizeof(CallToTerminal));
memset(MotormanId,0,sizeof(MotormanId));
memset(uiReviceBuf0_Driver,0,sizeof(uiReviceBuf0_Driver));
memcpy(MotormanId,G_LoadingMotorman,strlen(G_LoadingMotorman));
memcpy(CallToTerminal,G_DriverLoginMobile,strlen(G_DriverLoginMobile));
BuildMsgBag(MotormanLoadSign,CallToTerminal,MotormanId,uiReviceBuf0_Driver,&uiNum_Driver); ////登陆成功
MotormanLoadSign=0; //驾驶员登陆标志,0:表示未处理
}
}
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -