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

📄 motormanloadingorexit.c

📁 C语言源代码及相关资料
💻 C
📖 第 1 页 / 共 3 页
字号:

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