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

📄 motormanloadingorexit.c

📁 C语言源代码及相关资料
💻 C
📖 第 1 页 / 共 3 页
字号:
#include "Config.h"

////////////////////////////////////////////////////////////////////////////
uint8 		gsm_BlindBorough=0;		//GSM盲区标志位 =0非盲区 ;=1盲区
uint8 		gprs_BlindBorough=0;	//GPRS盲区标志位 =0非盲区 ;=1盲区
uint8 MotormanLoadSign=0;	//盲区或无连接的时候,驾驶员拨打终端电话状态标志,0:表示未处理,1:表示退出,2:表示盲区,3:表示登陆。

/***********************************************************************************
*函数名称: BlindBoroughGprsOff()	
*函数作用: 当GPRS连接断开,或者盲区时候有司机打电话后保存拨打司机的信息,并回复短信息
//处于盲区和GPRS连接没有时候给司机发送短信"您的操作已接受,请稍后"
//////////////////////////////////////////////////////////////
*入口参数:  MotomanNum  司机拨打的号码
*出口参数:  无
************************************************************************************/
uint8 BlindBoroughGprsOff(char *MotomanNum)
{
	
  if(gsm_BlindBorough==1)	 return FALSE;
  
  if((ReConnect_OK!=2)||(gprs_BlindBorough==1))  //Connect_OK=0  GPRS没有连接  //gprs_BlindBorough=1 处于GPRS盲区
  {
    
	char len[4];
	char  MsgContent[TRANSLEN/2];
	char	* SMS_AT[]={"60A8768464CD4F5C5DF263A553D7002C8BF77A0D540E"};   //您的操作已接受,请稍后

	memset(MsgContent,0,sizeof(MsgContent));
	
     ChineseMsgCompages(MotomanNum,MsgContent,0);	//0011000D91 683159614291F8 000800头
     sprintf(len,"%02X",strlen(SMS_AT[0])/2+1);
	 strcat(MsgContent,len);	
	 strcat(MsgContent,SMS_AT[0]);
	 SendPDUSMS(MsgContent);
	
	  return TRUE;	
	
  }
 return FALSE;
}

//////////////////////////////////////////////////////////////
/***********************************************************************************
*函数名称: SaveDriverM()	
*函数作用: 保存已登陆的驾驶员ID,并向flash中写数据
*入口参数:  无
*出口参数:  无
************************************************************************************/
uint8 SaveDriverM(char *MotomanNum,char *MotormanId)
{
		STRU_D_SetupDriverID_Comm	setupDriverID;	////已登陆的驾驶员ID及手机号
		uint8	buff[LOGINDEVICE_LEN];
		uint8	tempLen=0;
		//保存已登陆的驾驶员ID	返回已登陆驾驶的ID,内容长度不定,
		//当该字节为0时,表示无任何驾驶员登陆
		memset(buff,0,sizeof(buff));
	 	
		setupDriverID.pDriverID=(uint8	*)MotormanId;	//已登陆的驾驶员ID
		setupDriverID.driverID_Len=strlen((char *)setupDriverID.pDriverID);//已登陆的驾驶员ID长度
		//根据协议要求,保存已登陆的驾驶员ID及长度
		memcpy(buff,&setupDriverID.driverID_Len,sizeof(setupDriverID.driverID_Len));	//
		tempLen+=sizeof(setupDriverID.driverID_Len);
		memcpy(buff+tempLen,setupDriverID.pDriverID,strlen((char *)setupDriverID.pDriverID));
		tempLen+=strlen((char *)setupDriverID.pDriverID);
		
		setupDriverID.pDriverLoginMobile=(uint8	*)MotomanNum;//已登陆的驾驶员手机号
		setupDriverID.driverLoginMobile_Len=strlen((char *)setupDriverID.pDriverLoginMobile);//已登陆的驾驶员手机号长度
		//根据协议要求,保存已登陆的驾驶员手机号及长度
		memcpy(buff+tempLen,&setupDriverID.driverLoginMobile_Len,sizeof(setupDriverID.driverLoginMobile_Len));	//
		tempLen+=sizeof(setupDriverID.driverLoginMobile_Len);
		memcpy(buff+tempLen,setupDriverID.pDriverLoginMobile,strlen((char *)setupDriverID.pDriverLoginMobile));
		
		SaveParamValue(0x0707,buff);	//保存已登陆的驾驶员ID
		
		return TRUE;
}
//////////////////////////////////////////////////////////////
/***********************************************************************************
*函数名称:SendPDUSMS	
*函数作用:	 发送PDU信息
*入口参数:  MsgContent发送的手机号
*出口参数:  无
************************************************************************************/
void	SendPDUSMS(char *	MsgContent)
{
	char	* SMS_AT[]={"\r\nAT+CMGF=0\r\n","\r\nAT+CMGS=","\x01a","\r\nAT+CMGF=1\r\n"};
	char 	buff[20];
	char	str[4];
	
	memset(buff,0,sizeof(buff));
	memset(str,0,sizeof(str));
	
	memcpy(buff,SMS_AT[1],strlen(SMS_AT[1]));
	sprintf(str,"%d",strlen(MsgContent)/2);
	strcat(buff,str);
	strcat(buff,"\r\n");
	
	uartWrite(UART2,(uint8 *)SMS_AT[0],strlen(SMS_AT[0]),NULL); 	//发送AT+CMGF=0
	OSTimeDlyHMSM(0,0,0,600);			
	
	uartWrite(UART2,(uint8 *)buff,strlen(buff),NULL); 					//发送AT+CMGS=XX,XX表示总长度	
	OSTimeDlyHMSM(0,0,0,300);
	
	strcat(MsgContent,SMS_AT[2]);
	strcat(MsgContent,SMS_AT[2]);
	uartWrite(UART2,(uint8 *)MsgContent,strlen(MsgContent),NULL); 		//发送文本信息
	uartWrite(UART2,(uint8 *)SMS_AT[2],strlen(SMS_AT[2]),NULL); 	//发送AT+CMGF=1		
	OSTimeDlyHMSM(0,0,6,0);		
	
	uartWrite(UART2,(uint8 *)SMS_AT[3],strlen(SMS_AT[3]),NULL); 	//发送AT+CMGF=1		
	OSTimeDlyHMSM(0,0,0,600);
	
				
}
//AT+CMGS=29
// 0011000D91 683159614291F8 000801     0E      4F60 597D 6211 4EEC 5728 6D4B 8BD5
//| 固定长度 |   手机号码   |  固定 |文本长度+1|-----文本内容--------|
/***********************************************************************************
*函数名称: ChineseMsgCompages(char *sss,char *str1)	//中文短信组合
*入口参数:  Num为拨打终端电话的驾驶员电话号码
*出口参数:  str1为内容头  例:0011000D91 683159614291F8 000800(13951624198)头
************************************************************************************/
uint8 ChineseMsgCompages(char * SendNum,char *MsgContent,uint16  textLen)		//中文短信组合
{
	char * 	MsgCompages[]={ "0011000D91","000801",}; 
 	uint8 	i=0;
 	char 	s_Len[2];
 	char 	newNum[14];
 	char 	newNum_TW_[14];
 	char 	SendText[TRANSLEN];
 	
 	memset(s_Len,0,sizeof(s_Len));
 	memset(newNum,0,sizeof(newNum));
 	memset(newNum_TW_,0,sizeof(newNum_TW_));
 	memset(SendText,0,sizeof(SendText));
	
#if !defined(_TW_)
	//电话号码编码
	newNum[0]=0x36;
	newNum[1]=0x38;
 	for(i=0;i<6;i++)
	{
		newNum[i*2+3]=SendNum[i*2];
		if(i==5)
		{	newNum[12]=0x46;
			newNum[13]=SendNum[10];
			i++;
		}
		else
			newNum[i*2+2]=SendNum[i*2+1];
			
	}  
#else
	newNum_TW_[0]=0x38;
	newNum_TW_[1]=0x38;
	newNum_TW_[2]=SendNum[1];
	newNum_TW_[3]=0x36;
	for(i=1;i<=4;i++)
	{
		newNum_TW_[i*2+3]=SendNum[i*2];
		newNum_TW_[i*2+2]=SendNum[i*2+1];
	}

#endif // end of #if defined(_TW_)
 
 	//PDU发送格式编码组成	
 	strcat(SendText,MsgCompages[0]);	//固定的标准的PDU发送格式
 //	
#if !defined(_TW_)
 	strcat(SendText,newNum);
#else
 	strcat(SendText,newNum_TW_);		// 	For TW	//
#endif // end of #if defined(_TW_)	
	
	strcat(SendText,MsgCompages[1]);

	if(textLen!=0)	//为0表示登录无文本内容
	{
		textLen+=1;
		sprintf(s_Len,"%02X",textLen);		
		strcat(SendText,s_Len);
		strcat(SendText,MsgContent);
		memset(MsgContent,0,strlen(SendText)+1);	//
		
	}
	
	memcpy(MsgContent,SendText,strlen(SendText));	////PDU发送格式编码组成
	
	return TRUE;		
	
}
/*****************************************************************
**函数名称:BuildMsgBag(uint8 SendMsg,char * sss,char * str)//建立信息组包
**入口函数:SendMsgflag 判断标志为,主要功能区分(1:退出登陆、 2:已经登录、3:登陆成功)3种状态
**         	MotomanNum     正在拨打车机的司机
			MotormanId		已经登陆的司机ID
******************************************************************/
uint8  BuildMsgBag(uint8 SendMsgflag,char * MotomanNum,char *MotormanId,uint8	 *uiReviceBuf0,uint16 *uiNum)
{
	 static  char * MsgToCall[]={ "\r\nAT+CMGS=",
					   			"767B96466210529F0021" , //登录成功!Ctrl+Z
								"900051FA6210529F0021",  //退出成功!Ctrl+Z
								"5DF25728767B96460021",  //已经登录!Ctrl+Z	
								"767B964659318D250021",   //登录失败!
								"\r\nAT+CMGF=0\r\n",
		          	        	}; 	 
		
		uint8 i=0;
		char len[4];
		char LoadMotorNum[DEVICE_LEN];		    			
		char  str1[TRANSLEN/2];  //拨打电话的驾驶员信息,及PUD短信发送格式的固定格式 
									//0011000D91 683159614291F8 000800头 
		char  str2[TRANSLEN/2];	//str2驾驶员登陆的ID,在短信内容中
		char  str3[20];				//发送AT+CMGS=XX,XX表示总长度	
		uint8 con=0;				//CON求文本信息的总长度(必须要写)
		
		
		memset(LoadMotorNum,0,sizeof(LoadMotorNum));
		memset(str1,0,sizeof(str1));
		ChineseMsgCompages(MotomanNum,str1,0);	//0011000D91 683159614291F8 000800头
		memset(str3,0,sizeof(str3));
		memset(str2,0,sizeof(str2));
		
		if(SendMsgflag==2)
			strcat(str2,MsgToCall[4]);  //登录失败!   090407
			
		if((G_DriverLoginMobile[0]>=0x30)&&(G_DriverLoginMobile[0]<0x40))
		 memcpy(LoadMotorNum,G_DriverLoginMobile,strlen(G_DriverLoginMobile));
		else
		 memcpy(LoadMotorNum,MotomanNum,strlen(MotomanNum));
		 
		//ID号的UNcode码	
		for(i=0;i<strlen(LoadMotorNum);i++)
		{
			char buff[4];
			memset(buff,0,sizeof(buff));
			strcat(buff,"00");
			sprintf(buff+strlen(buff),"%02X",LoadMotorNum[i]);
			strcat(str2,buff);	 		//提示登陆成功或退出
		}
		
		
		if(SendMsgflag==1)		
			strcat(str2,MsgToCall[2]);					//XXX退出成功!Ctrl+Z		
														//CON求文本信息的总长度(必须要写)
		else if(SendMsgflag==2)
			strcat(str2,MsgToCall[3]);					//发送信息"XXX已经登陆"
		else
			strcat(str2,MsgToCall[1]);					//发送信息"XXX登陆成功"
		con=strlen(str2)/2+1;						//表示文本的长度并加上长度所占的一个字节长度
		sprintf(len,"%02X",con);							//将总长度转化为ASCALL码格式。并复制给STR1
		strcat(str1,len);								//
		strcat(str1,str2);								//合并总长度字符串
		
		if(SendMsgflag==3)	//登陆成功信息
		{
			memcpy(G_DriverLoginMobile,MotomanNum,strlen(MotomanNum));
			memcpy(G_LoadingMotorman,MotormanId,strlen(MotomanNum));
			SaveDriverM(MotomanNum,MotormanId);	//保存已登陆的驾驶员ID及手机号码			
		}
		else
		{		
			if(SendMsgflag==1)
			{
				
				uint8	buff[LOGINDEVICE_LEN];
				memset(buff,0xff,sizeof(buff));
				//根据协议要求,清除已登陆的驾驶员ID及长度
				SaveParamValue(0x0707,buff);	//清除已登陆的驾驶员ID
			}
			
		}
		if(G_RestMsg==1)				//是否需要将提示发给司机
		{	
			OSTimeDlyHMSM(0,0,0,300);
			//uartWrite(UART3,(uint8 *)str1,strlen(str1),NULL);
			SendPDUSMS(str1);
			
		}
		return TRUE;
}
/*****************************************************************
**函数名称:void GetMotormanIdToFlash()
**作用	:   从FLASH中取已经存储的驾驶员信息
            和拨打的电话号码进行比较,
**入口参数:SMS_YesNo_Flag			判断是否短信,1:表示短信,0:表示电话 
			MotormanInformetion   驾驶员信息
 			 CallToTerminal        呼入终端的电话(正在拨打的驾驶员)
**出口参数: LoadingMotorman       已经登陆的驾驶员
			MotormanId            驾驶员ID
******************************************************************/
uint8  GetMotormanIdToFlash(uint8	SMS_YesNo_Flag,char *	CallToTerminal,char *	MotormanId,char *	LoadingMotorman)
{
	
	uint16	iplace=0;
	uint8	ss[ALLDEVICE_LEN];
	memset(ss,0,sizeof(ss));
	
	GetParamValue(0x0706,ss);	//设置的驾驶员ID	根据设置驾驶员ID指令内容格式上传

	iplace=0;
	while ((INT16S)(sizeof(ss)-iplace)>0)
	{
		uint8		buff1[DEVICE_LEN];
		uint8		buff2[DEVICE_LEN];
   		STRU_D_SetupDriverID_Comm	temp;
   		
   		memset(buff1,0,sizeof(buff1));
   		memset(buff2,0,sizeof(buff2));
   		
   		temp.driverID_Len=ss[iplace++];
   		temp.pDriverID=buff1;	//驾驶员ID
		memcpy(temp.pDriverID,ss+iplace,temp.driverID_Len); 
		iplace+=temp.driverID_Len;
		
		temp.driverLoginMobile_Len=ss[iplace++];
   		temp.pDriverLoginMobile=buff2;	//驾驶员手机号
		memcpy(temp.pDriverLoginMobile,ss+iplace,temp.driverLoginMobile_Len);
		iplace+=temp.driverLoginMobile_Len;
		
		if(memcmp(CallToTerminal,temp.pDriverLoginMobile,strlen(CallToTerminal))==0)
		{
			
			if((G_DriverLoginMobile[0]>=0x30)&&(G_DriverLoginMobile[0]<0x40))	//表示已登陆的ID
			{   
				if(SMS_YesNo_Flag==0)	//0:表示是有电话进入
				{
					//memcpy(MotormanId,G_LoadingMotorman,strlen((char *)G_LoadingMotorman));
					memcpy(MotormanId,temp.pDriverID,strlen((char *)temp.pDriverID));
					memcpy(LoadingMotorman,G_DriverLoginMobile,strlen((char *)G_DriverLoginMobile));
				}
				return TRUE;
			}
			else
			{
			    memcpy(MotormanId,temp.pDriverID,strlen((char *)temp.pDriverID));
			    memset(LoadingMotorman,0,strlen(LoadingMotorman));
			}
			return TRUE;
		}
		
	}
	return FALSE;
}	



//RING
//    +CLIP: "02552726209",161,,,,0  
/*****************************************************************
**函数名称:void MotormanLoadingOrExit()
			MotormanId            驾驶员ID
			LoadingMotorman       已经登陆的驾驶员电话号码
			CallToTerminal 		拨打终端电话的电话号码 
**入口函数:uiReviceBuf0 判断标志为,主要功能区分有人登陆、退出登陆、已经登陆3种状态
******************************************************************/
uint8  MotormanLoadingOrExit(uint8	 *uiReviceBuf0,uint16 *	uiNum)
{
  
	      			 
	char * p=NULL;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -