📄 motormanloadingorexit.c
字号:
if((p=strstr((char *)uiReviceBuf0,"+CLIP: \""))!=NULL)
{
char CallToTerminal[20]; //呼入的电话号码
char * p2=NULL;
memset(CallToTerminal,0,sizeof(CallToTerminal));
RING_COU++;
//取电话号码
p=p+strlen("+CLIP: \"");
if((p2=strchr(p,'\"'))==NULL) return FALSE;
memmove(CallToTerminal,p,p2-p); //取电话号码
if(strchr(CallToTerminal,'+')!=NULL)
{
#if !defined(_TW_)
memmove(CallToTerminal,CallToTerminal+3,strlen(CallToTerminal+3));
CallToTerminal[strlen(CallToTerminal+3)]='\0';
#else
// +886 for _TW_
memmove(CallToTerminal+1,CallToTerminal+4,strlen(CallToTerminal+4));
CallToTerminal[0]='0'; // Format convert: +8869xx-xxx-xxx ==> 09xx-xxx-xxx
CallToTerminal[strlen(CallToTerminal+4)]='\0';
#endif // end of #if defined(_TW_)
}
uartWrite(UART3,(uint8 *)CallToTerminal,strlen(CallToTerminal),NULL); //测试
if(RING_COU>=3) //三次铃声后,挂断电话,并复位。
{
char RestNum[20]; //复位号码
char MotormanId[DEVICE_LEN]; //驾驶员ID号
char LoadingMotorman[DEVICE_LEN]; //已经登陆的驾驶员电话号码
static char * GPRS_cmd="\r\nATH\r\n\0";
memset(RestNum,0,sizeof(RestNum));
memset(MotormanId,0,sizeof(MotormanId));
memset(LoadingMotorman,0,sizeof(LoadingMotorman));
RING_COU=0;
uartWrite(UART2,(uint8 *)(GPRS_cmd),strlen(GPRS_cmd),NULL);
{
__DBG0_printf1(GPRS_cmd);
}
OSTimeDlyHMSM(0,0,1,300);
// Chad
//LoadUart2(UART2,uiReviceBuf0,uiNum);
{
char szOut[64];
unsigned short shBufSize=63;
GPRSLoadData(UART2, (uint8 *)szOut, &shBufSize, 2);
szOut[shBufSize]='\0';
__DBG0_printf1(szOut);
}
GetParamValue(0x0101,(uint8 *)RestNum); //取得复位的电话号码
if(strlen(CallToTerminal)>0 && memcmp(RestNum,CallToTerminal,strlen(CallToTerminal))==0) //判断是不是复位的电话号码
{
//Reset();//系统复位
WDTC = 0x0;
}
else if(GetMotormanIdToFlash(0,CallToTerminal,MotormanId,LoadingMotorman)!=0) //是否符合驾驶员的信息
{ //判断是不是符合flash中存储的驾驶员数据信息
if(MotormanLoadSign==0)//判断是不是有驾驶员在盲区或GPRS无连接的时候的时候拨打过电话,
{
if(memcmp(LoadingMotorman,CallToTerminal,sizeof(CallToTerminal))==0)//判断是不是已经有驾驶员登陆
{
Motorman_LoginStau=1; //1:表示请求退出
if(BlindBoroughGprsOff(CallToTerminal)) //0407日加 盲区和GPRS连接状态函数)
{
if(ReConnect_OK!=2)
MotormanLoadSign=1; //根据协议要求,清除已登陆的驾驶员ID及长度
if(gsm_BlindBorough==1||gprs_BlindBorough==1)
MotormanLoadSign=2;
memcpy(G_LoadingMotorman,MotormanId,strlen(MotormanId));
memcpy(G_DriverLoginMobile,CallToTerminal,strlen(CallToTerminal));
}
//GPRS和盲区登陆标志.当连接正常或者非盲区时判断这个标志来给司机发送登陆成功或退出信息
else
{
if((FTP_UPGRADE_FLAG==0)&&(Connect_OK==TRUE)&&(ReConnect_OK==2))
{
ParseCode_trans(uiReviceBuf0,uiNum,UPLOAD,U_UploadDriverInfoComm); //上传驾驶员登陆信息
Send_data(uiReviceBuf0,TRANSINFOLEN,uiNum);
uartWrite(UART2,uiReviceBuf0,*uiNum,NULL);
// Chad
//uartWrite(UART3,uiReviceBuf0,*uiNum,NULL); //测试
__DBG2_printf2(uiReviceBuf0,*uiNum);
}
BuildMsgBag(1,CallToTerminal,MotormanId,uiReviceBuf0,uiNum); //XXX已经退出
memset(G_LoadingMotorman,0,sizeof(G_LoadingMotorman));
memset(G_DriverLoginMobile,0,sizeof(G_DriverLoginMobile));
}
}
else
{
if((LoadingMotorman[0]>=0x30)&&(LoadingMotorman[0]<0x70)) //判断是不是已经有人登陆
{
char LoadingMotormanId[DEVICE_LEN];
memset(LoadingMotormanId,0,sizeof(LoadingMotormanId));
Motorman_LoginStau=2; //2:表示登陆失败
if((FTP_UPGRADE_FLAG==0)&&(Connect_OK==TRUE)&&(ReConnect_OK==2))
{
memcpy(LoadingMotormanId,G_LoadingMotorman,strlen(G_LoadingMotorman));
memset(G_LoadingMotorman,0,sizeof(G_LoadingMotorman));
memcpy(G_LoadingMotorman,MotormanId,strlen(MotormanId));
ParseCode_trans(uiReviceBuf0,uiNum,UPLOAD,U_UploadDriverInfoComm); //上传驾驶员登陆信息
Send_data(uiReviceBuf0,TRANSINFOLEN,uiNum);
uartWrite(UART2,uiReviceBuf0,*uiNum,NULL);
memcpy(G_LoadingMotorman,LoadingMotormanId,strlen(LoadingMotormanId));
// Chad
//uartWrite(UART3,uiReviceBuf0,*uiNum,NULL); //测试
__DBG2_printf2(uiReviceBuf0,*uiNum);
}
BuildMsgBag(2,CallToTerminal,MotormanId,uiReviceBuf0,uiNum); //XXX已经登陆
}
else
{
Motorman_LoginStau=0; //0:表示请求登陆
if(BlindBoroughGprsOff(CallToTerminal)) //0407日加 盲区和GPRS连接状态函数)
{
if(ReConnect_OK!=2)
MotormanLoadSign=3;
if(gsm_BlindBorough==1||gprs_BlindBorough==1)
MotormanLoadSign=2;
memset(G_LoadingMotorman,0,sizeof(G_LoadingMotorman));
memset(G_DriverLoginMobile,0,sizeof(G_DriverLoginMobile));
memcpy(G_LoadingMotorman,MotormanId,strlen(MotormanId));
memcpy(G_DriverLoginMobile,CallToTerminal,strlen(CallToTerminal));
SaveDriverM(G_DriverLoginMobile,G_LoadingMotorman);//0409日加 保存已经登陆的驾驶员信息,flash中写数据
}
//GPRS和盲区登陆标志.当连接正常或者非盲区时判断这个标志来给司机发送登陆成功或退出信息
else
{
BuildMsgBag(3,CallToTerminal,MotormanId,uiReviceBuf0,uiNum); ////登陆成功
if((FTP_UPGRADE_FLAG==0)&&(Connect_OK==TRUE)&&(ReConnect_OK==2))
{
ParseCode_trans(uiReviceBuf0,uiNum,UPLOAD,U_UploadDriverInfoComm); //上传驾驶员登陆信息
Send_data(uiReviceBuf0,TRANSINFOLEN,uiNum);
uartWrite(UART2,uiReviceBuf0,*uiNum,NULL);
// Chad
//uartWrite(UART3,uiReviceBuf0,*uiNum,NULL); //测试
__DBG2_printf2(uiReviceBuf0,*uiNum);
}
}
}
}
}
}
/*
else //测试。可直接删除 (您好,我的SIM卡正在测试,晚上10点后联系)
{
char * GPRS_cmd[]={ "4F60597D00216211768400530049004D57286D4B8BD5665A0031003070B9540E80547CFB0021"};
char len[4];
char str1[200];
memset(len,0,sizeof(len));
memset(str1,0,sizeof(str1));
ChineseMsgCompages(CallToTerminal,str1,0);
sprintf(len,"%02X",strlen(GPRS_cmd[0])/2+1);
strcat(str1,len);
strcat(str1,GPRS_cmd[0]);
SendPDUSMS(str1);
}
*/
}
}
return TRUE;
}
/****************************************************************************
** SendMsg 发送短信
**
**str3 : 要发送的短信内容
**dataa : 目的手机号码
**
*****************************************************************************/
void SendMsg(char *str3,char *dataa)
{
char * GPRS_cmd[]={ "\r\nAT+CMGS=",
"\r\n\0",
};
char EndMsg[TRANSLEN/2];
uartWrite(UART2,(uint8 *)("\r\nAT+CMGF=1\r\n\0"),strlen("\r\nAT+CMGF=1\r\n\0"),NULL);
OSTimeDlyHMSM(0,0,0,300);
memset(EndMsg,0,sizeof(EndMsg));
strcat(EndMsg,GPRS_cmd[0]);
strcat(EndMsg,"\"");
strcat(EndMsg,dataa);
strcat(EndMsg,"\"\r\n\0");
uartWrite(UART2,(uint8 *)EndMsg,strlen(EndMsg),NULL); //测试
OSTimeDlyHMSM(0,0,0,300);
memset(EndMsg,0,sizeof(EndMsg));
strcat(EndMsg,str3);
strcat(EndMsg,"\x01a");
strcat(EndMsg,"\x01a");
uartWrite(UART2,(uint8 *)EndMsg,strlen(EndMsg),NULL); //测试
OSTimeDlyHMSM(0,0,3,0);
}
void DelMsg(char * msgNum)
{
char delMsg[20];
static char * GPRS_cmd[]={ "\r\n\0","\r\nAT+CMGD=",};
memset(delMsg,0,sizeof(delMsg));
strcat(delMsg,GPRS_cmd[1]);
if(atoi(msgNum)==0||atoi(msgNum)>=5)
strcat(delMsg,"1,4");
else
strcat(delMsg,msgNum);
strcat(delMsg,GPRS_cmd[0]);
uartWrite(UART2,(uint8 *)delMsg,strlen(delMsg),NULL); //测试
OSTimeDlyHMSM(0,0,5,0);
}
uint8 SMSSET(char *MsgContent_Rec)
{
char * p=NULL;
//判断收到的短信内容各标志位是否合法
//*SM&www.gttgps.cn:9987<CMNET>#
if((p=strstr(MsgContent_Rec,"*SM&"))!=NULL)//数据标志位合法继续处理
{
char strIP[30];
char strPort[6];
char strAPN[40];
char strID[128];
uint16 uint16Port=0;
uint8 port[2];
char * n=NULL;
char buff[50];
memset(strIP,0,sizeof(strIP));
memset(strPort,0,sizeof(strPort));
memset(strAPN,0,sizeof(strAPN));
memset(strID,0,sizeof(strID));
p+=strlen("*SM&"); //去掉消息头
if((n=strstr(p,":"))==NULL) return FALSE; //不合法
memmove(strIP,p,n-p); //主域名
n+=strlen(":");
if((p=strstr(n,"<"))==NULL) return FALSE; //不合法
memmove(strPort,n,p-n); //Port端口号
uint16Port=(uint16)atoi(strPort); //Port端口号的值(16进制)
port[0]=(uint8)(uint16Port>>8);
port[1]=(uint8)uint16Port;
p+=strlen("<");
if((n=strstr(p,">"))==NULL) return FALSE; //不合法
memmove(strAPN,p,n-p); //APN
n+=strlen(">");
if((p=strstr(n,"#"))==NULL) return FALSE; //不合法
if(p-n>1) //ID,预留
memmove(strID,p,p-n);//
p+=strlen("#");
OSMemQuery(IntBuffer_Big,&MemInfo);
if(MemInfo.OSNFree > (uint8)(SETUP_PARAMS_DATASIZE/BlockSize_Big))
{
INT16U len=0,moveAddr=0;
const uint8 pageLen=0xff;
uint8 itemp=0;
uint8 * tempbuff=NULL;
tempbuff=(INT8U *)OSMemGet(IntBuffer_Big,&err);
W25X32_READ_Semphore(GetAddr(SETUP_PARAMS_SEC,0),SETUP_PARAMS_DATASIZE,tempbuff);
GetOmoveAddr(SETUP_PARAMS,SETUP_PARAMS_COUNT,0x0200,&len,&moveAddr);
memcpy(tempbuff+moveAddr,(uint8 *)strAPN,strlen(strAPN));
GetOmoveAddr(SETUP_PARAMS,SETUP_PARAMS_COUNT,0x0202,&len,&moveAddr);
memcpy(tempbuff+moveAddr,(uint8 *)strIP,strlen(strIP));
GetOmoveAddr(SETUP_PARAMS,SETUP_PARAMS_COUNT,0x0205,&len,&moveAddr);
memcpy(tempbuff+moveAddr,port,sizeof(port));
////////////////////////////////////////////////////////
W25X32_Erase_Semphore(SETUP_PARAMS_SEC, SETUP_PARAMS_SEC);
for(itemp=0;itemp<SETUP_PARAMS_DATASIZE/pageLen;itemp++)
{
W25X32_WR(GetAddr(SETUP_PARAMS_SEC,itemp*pageLen),tempbuff+itemp*pageLen,pageLen);
OSTimeDly(3);
}
if(SETUP_PARAMS_DATASIZE%pageLen>0)
{
OSTimeDly(3);
W25X32_WR(GetAddr(SETUP_PARAMS_SEC,itemp*pageLen),tempbuff+itemp*pageLen,SETUP_PARAMS_DATASIZE%pageLen);
}
OSMemPut(IntBuffer_Big,tempbuff);
}
if(Reconn_Flag!=1&&First_Run_Flag==0)
{
T1MAT_Init(Fpclk*((uint32)120), 0, 1, 0, 0, 1); // 120秒钟定时
Reconn_Flag=1; //将修改通讯参数标志置位
}
memset(buff,0,sizeof(buff));
memmove(buff,MsgContent_Rec,1);
memmove(buff+1,"Y",1); //生成回复短信内容
memmove(buff+1+1,MsgContent_Rec+1,strlen(MsgContent_Rec+1));
memcpy(MsgContent_Rec,buff,strlen(buff));
}
else
return FALSE;
return TRUE;
}
/*******************************************************************************
*功能:获得参数查询指令所需的相关参数
*******************************************************************************/
uint8 GetPara_DemandPara(char * str)
{
typedef struct
{
char strSIP[30];
char strSoftVer[128];
char strHardID[128];
}SMSSetup_Stru;
SMSSetup_Stru smsSetup;
INT16U i=0,len=0,moveAddr=0;
INT8U buff_strSIP[4]; //副通讯IP地址,例如:10.120.37.19表示为0x0A 0x78 0x25 0x13。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -