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

📄 do_m22.c

📁 车载GPS监控终端的完整代码,与监控中心的通讯采用GPRS.
💻 C
📖 第 1 页 / 共 5 页
字号:
		if( 	(gTimer_CSQ>5)
			  &&((gPhone_Status==ACTIVE_HANDLE)||(gPhone_Status==ACTIVE_MONITOR)) )
		{
			if( gTimer_GSM_AT>200 )
			{
				Send_COM0_String((unsigned char *)AT_CLCC,sizeof(AT_CLCC));
				gInternal_Flag|=GSM_ONEAT_SUCCESS_1;
				gTimer_GSM_AT=0;
				gTimer_CSQ=0;
				gGSM_OTHER_Step=5;
			}
			else Check_GSM();
		}
		/********************************************************\
		A,1,无电话业务,2,处于GSM工作方式下。3。GSM信号查询时间到
		\********************************************************/
	    else if((gPhone_Status==READY)&&(gM22_Status==GSM_WORK)&&(gTimer_CSQ>GSM_CHECKCSQ_TIME) )
		{
			if( gTimer_GSM_AT>200 )
			{
				Send_COM0_String((unsigned char *)AT_CSQ,sizeof(AT_CSQ));
				gInternal_Flag|=GSM_ONEAT_SUCCESS_1;
				gTimer_GSM_AT=0;
				gTimer_CSQ=0;
				gGSM_OTHER_Step=2;
			}
			else Check_GSM();
		}
		/********************************************************\
		B,1,无电话业务,2,处于TCP挂起的工作方式下。4,GSM信号查询时间到
		\********************************************************/
		else if((gPhone_Status==READY)&&(gM22_Status==TCP_HANG_WORK)&&(gTimer_CSQ>TCP_CHECKCSQ_TIME))
		{
			if( gTimer_GSM_AT>200 )
			{
				Send_COM0_String((unsigned char *)AT_CSQ,sizeof(AT_CSQ));
				gInternal_Flag|=GSM_ONEAT_SUCCESS_1;
				gTimer_GSM_AT=0;
				gTimer_CSQ=0;
				gGSM_OTHER_Step=2;
			}
			else Check_GSM();
		}
		else	Case2_OTHER_Out();
	}
	/********************************************************\
	AB-1:查询信号的模块返回
	\********************************************************/
	else if(gGSM_OTHER_Step==2)
	{
		if(Check_GSM()!=0)
		{
			gInternal_Flag&=~GSM_ONEAT_SUCCESS_1;
			if(Compare_String(gGeneral_Buffer,(unsigned char *)String_CSQ,sizeof(String_CSQ)))
			{
				if(gGeneral_Buffer[9]==',')
				{
					gSignal=(gGeneral_Buffer[7]-0x30)*10+(gGeneral_Buffer[8]-0x30);
				}
				else if(gGeneral_Buffer[7]==',')
				{
					gSignal=gGeneral_Buffer[6]-0x30;
				}
				else if(gGeneral_Buffer[8]==',')
				{
					gSignal=(gGeneral_Buffer[6]-0x30)*10+(gGeneral_Buffer[7]-0x30);
				}
				if(gSignal>31)
				{
					gSignal=0;
					CSQ_Single_Error++;
					if(CSQ_Single_Error>20)
					{
						CSQ_Single_Error=0;
						gGeneral_Flag|=OFF_M22_F_1;
						gOFF_Power_S=1;
						gPhone_Status=READY;
						gM22_ReturnER_SIM_Count=0;
						gStatus1_Flag&=~PHONE_ONLINE_F_1;
						return;
					}
				}
				else
				{
					CSQ_Single_Error=0;
				}
				gGSM_OTHER_Step=3;
				gTimer_GSM_AT=0;
				gTimer_CSQ=0;
			}
			else if(Compare_String(gGeneral_Buffer,(unsigned char *)String_ER,sizeof(String_ER)))
			{
				gGSM_OTHER_Step=3;
				gTimer_GSM_AT=0;
				gTimer_CSQ=0;
			}
			else if(Compare_String(gGeneral_Buffer,(unsigned char *)String_OK,sizeof(String_OK)))
			{
				gGSM_OTHER_Step=3;
				gTimer_GSM_AT=0;
				gTimer_CSQ=0;
			}
		}
		else
		{
			if(gTimer_GSM_AT>10000)
			{
				Case_OverTime_Return();
			}
		}
	}
	//查询SIM卡的状态是否正常
	else if(gGSM_OTHER_Step==3)
	{
		if(gTimer_GSM_AT>200)
		{
			Send_COM0_String((unsigned char *)AT_CSCA_C,sizeof(AT_CSCA_C));
			gInternal_Flag|=GSM_ONEAT_SUCCESS_1;
			gTimer_GSM_AT=0;
			gGSM_OTHER_Step=4;
		}
		else	Check_GSM();
	}
	else if(gGSM_OTHER_Step==4)
	{
		if(Check_GSM()!=0)
		{
			gInternal_Flag&=~GSM_ONEAT_SUCCESS_1;gTimer_GSM_AT=0;gTimer_CSQ=0;
		    if(Compare_String(gGeneral_Buffer,(unsigned char *)String_CSCA,sizeof(String_CSCA))!=0)
		    {

	    		if(	 ((gInternal_Flag&CENTER_NUM_VAILD_F_1)==0)
					&&(gInternal_Flag&SET_CSCA_F_1)	)
	    		{
			    	if(gGeneral_Buffer[7]=='"')
			    	{
			    		i=8;
						while(1)
						{
							if(gGeneral_Buffer[i]=='"') break;
							i++;if(i>8+18) {gReset_M22_On_Setp=1;return;}		//非法长度,则退出
						}
						if(i>8+1)
						{
							Load_SMS_CenterNum(i);
							Send_COM1_String( (unsigned char *)CENTER_RELOAD,sizeof(CENTER_RELOAD) );
							gInternal_Flag|=CENTER_NUM_VAILD_F_1;
							gInternal_Flag&=~SET_CSCA_F_1;
						}
						else
						{
							gInternal_Flag&=~CENTER_NUM_VAILD_F_1;
							gInternal_Flag|=SET_CSCA_F_1;
						}
					}
	    		}
	    		//表示已经找到SIM卡的网络
	    		gM22_ReturnER_SIM_Count=0;
				if(gM22_Status==TCP_HANG_WORK)
				{
					//进入TCP的在线状态
					gGSM_OTHER_Step=0;
					gGSM_Oper_Type=LAND_TCP_OPER;
					gLand_GPRS_Step=0;
					gGeneral_Flag|=TCP_STATUS_F_1;
				}
				else
				{
					Case2_OTHER_Out();
				}
				SRAM_Init();
				SRAM_Write(SHANDLE_DATA_VAILD+0,VAILD_2);
				SRAM_Write(SHANDLE_DATA_VAILD+1,0x24);
				SRAM_Write(SHANDLE_DATA_VAILD+2,0x06);
				SRAM_Write(SHANDLE_DATA_VAILD+3,MAIN_SEND_STATUS);
				SRAM_Write(SHANDLE_DATA_VAILD+4,gStatus1_Flag);
				SRAM_Write(SHANDLE_DATA_VAILD+5,gStatus2_Flag);
				SRAM_Write(SHANDLE_DATA_VAILD+6,0x0d);
			}
			else if(Compare_String(gGeneral_Buffer,(unsigned char *)String_ER,sizeof(String_ER))!=0)
			{
				//表示还没有找到SIM卡的网络
    			gM22_ReturnER_SIM_Count++;
    			if(gM22_ReturnER_SIM_Count>20)
    			{
					gGeneral_Flag|=OFF_M22_F_1;
					gOFF_Power_S=1;
					gPhone_Status=READY;
					gM22_ReturnER_SIM_Count=0;
					gStatus1_Flag&=~PHONE_ONLINE_F_1;
					return;
    			}
    			else
    			{
					if(gM22_Status==TCP_HANG_WORK)
					{
						//进入TCP的在线状态
						gGSM_OTHER_Step=0;
						gGSM_Oper_Type=LAND_TCP_OPER;
						gLand_GPRS_Step=0;
						gGeneral_Flag|=TCP_STATUS_F_1;
					}
					else
					{
						Case2_OTHER_Out();
					}
					gTimer_CSQ=0;
    			}
			}
		}
		else
		{
			if(gTimer_GSM_AT>10000)
			{
				Case_OverTime_Return();
			}
		}
	}
	/********************************************************\
	CLCC查询返回
	\********************************************************/
	else if(gGSM_OTHER_Step==5)
	{
		if(Check_GSM()!=0)
		{
			gInternal_Flag&=~GSM_ONEAT_SUCCESS_1;gTimer_GSM_AT=0;gTimer_CSQ=0;
		    if(Compare_String(gGeneral_Buffer,(unsigned char *)String_CLCC,sizeof(String_CLCC))!=0)
		    {
		    	Case2_OTHER_Out();
		    }
			else if(Compare_String(gGeneral_Buffer,(unsigned char *)String_OK,sizeof(String_OK)))
			{
				SRAM_Init();
				SRAM_Write(PHONE_AT_2+0,VAILD_2);
				SRAM_Write(PHONE_AT_2+1,H_HUNGUP);
				SRAM_Write(PHONE_AT_2+2,0);
				Send_COM3_Load(4,MAIN_HANG_UP,0);
				gSys_Handle=MAIN_HANG_UP;
				Case2_OTHER_Out();
			}
		    else if(Compare_String(gGeneral_Buffer,(unsigned char *)String_ER,sizeof(String_ER))!=0)
		    {
		    	Case2_OTHER_Out();
		    }
		}
		else
		{
			if(gTimer_GSM_AT>10000)
			{
				Case2_OTHER_Out();
			}
		}
	}
}
/********************************************************\
*	函数名:Case2_OTHER_Out
	作用域:本地文件调用
*	功能:	将CASE2中处理的出口
*	参数:
*	返回值:
*	创建人:
*
*	修改历史:(每条详述)
\********************************************************/
void Case2_OTHER_Out(void)
{
	gGSM_Oper_Type=GSM_SMS_IN;
	gGSM_OTHER_Step=0;gPhone_Step=0;
	gTimer_GSM_AT=0;
	Check_GSM();
	gInternal_Flag&=~GSM_ONEAT_SUCCESS_1;
	OperateSPIEnd();
}
/********************************************************\
*	函数名:Case3_GSM_SMS_IN
	作用域:本地文件调用
*	功能:
*	参数:
*	返回值:
*	创建人:
*
*	修改历史:(每条详述)
	补充说明:

\********************************************************/
void Case3_GSM_SMS_IN(void)
{
	Check_GSM();
	Case3_SMSIN_Out();
}
/********************************************************\
*	函数名:Case3_SMSIN_Out
	作用域:本地文件调用
*	功能:	将CASE3中处理的出口
*	参数:
*	返回值:
*	创建人:
*
*	修改历史:(每条详述)
\********************************************************/
void Case3_SMSIN_Out(void)
{
	gGSM_Oper_Type=GSM_SMS_OUT;
	gSMS_OUT_Step=0;
	gTimer_GSM_AT=0;
	Check_GSM();
	gInternal_Flag&=~GSM_ONEAT_SUCCESS_1;
	OperateSPIEnd();
}
/********************************************************\
*	函数名:Case4_GSM_SMS_OUT
	作用域:本地文件调用
*	功能:
*	参数:
*	返回值:
*	创建人:
*
*	修改历史:(每条详述)
	2004年12月15日
	补充说明:
\********************************************************/
void Case4_GSM_SMS_OUT(void)
{
	unsigned int i=0,j=0,k=0,x=0,y=0;
	unsigned char nTemp_Length=0;
	unsigned int  iLength=0;
	//1,手柄正在拨号,2,监听正在拨号,3有电话打入
	if( (gGeneral_Flag&RING_F_1)||(gGeneral_Flag&DAILING_UP_F_1)||(gGeneral_Flag&MONITOR_ON_F_1) )
	{
		Case4_SMSOUT_Out();
		return;
	}
	//2,如果目标号码无效,则不能进行SMS的发送操作
	if( (gGeneral_Flag&NUM1_VAILD_F_1)==0 )
	{
		Case4_SMSOUT_Out();
		return;
	}
	//3,如果短消息中心号码无效,则不能 SMS的发送操作
	if( (gInternal_Flag&CENTER_NUM_VAILD_F_1)==0)
	{
		Case4_SMSOUT_Out();
		return;
	}
	//4,否则的可以进行下面的操作
	if(gSMS_OUT_Step==0)	 gSMS_OUT_Step=1;

	else if(gSMS_OUT_Step==1)
	{
		gSend_Type1=0;
		SRAM_Init();
		i=SRAM_Read(ECHO_SMS_2);
		j=SRAM_Read(OTHER_SMS_2);
		//第一类的数据发送
		if( (i!=NULL_2)&&(gInternal_Flag&ALLOW_DATA_F_1) )
		{
			gSMS_OUT_Step=7;gTimer_GSM_AT=0;
			#ifdef Debug_GSM_COM1
          	Send_COM1_Byte('2');
			Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
			#endif
			gSend_Type1=1;
		}
		else if( (j!=NULL_2)&&(gInternal_Flag&ALLOW_DATA_F_1) )
		{
			gSMS_OUT_Step=7;gTimer_GSM_AT=0;
			#ifdef Debug_GSM_COM1
          	Send_COM1_Byte('3');
			Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
			#endif
			gSend_Type1=2;
		}
		//第二类数据的发送
		else if( (gInternal_Flag&SEND_CIRCLE_F_1)&&(gInternal_Flag&ALLOW_DATA_F_1) )
		{
			gInternal_Flag&=~SEND_CIRCLE_F_1;
			gInternal_Flag&=~ALLOW_DATA_F_1;
			gGSM_Work_Count=0;gCheck_Data=0;
			gSMS_OUT_Step=17;
			gTimer_GSM_AT=0;
			#ifdef Debug_GSM_COM1
          	Send_COM1_Byte('4');
			Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
			#endif
			if(gCycle_Send_Status==WATCH_DATA)
			{
				if(gWatch_Count>0)	gWatch_Count--;
			}

		}
		/**************************************************************************************\
		第三类数据的TCP发送(外接部件的大量数据-存储在外部SRAM中)
		\**************************************************************************************/
		else if( (gOther_Flag&ALLOW_SEND_RECORD_F_1)&&(gInternal_Flag&ALLOW_DATA_F_1) )
		{
			SRAM_Init();
			if( SRAM_Read(SRAM_SEND_VAILD)==VAILD_2 )
			{
				//判断长度
				j = SRAM_Read(SRAM_SEND_LENGTH_H);
				j <<= 8;
				j += SRAM_Read(SRAM_SEND_LENGTH_L);
				if(j>120)
				{
					gOther_Flag&=~RECORD_DATA_F_1;
					gOther_Flag&=~ALLOW_SEND_RECORD_F_1;
					SRAM_Init();
					SRAM_Write(SRAM_SEND_VAILD,NULL_2);
					SRAM_Write(SRAM_SEND_LENGTH_H,0);
					SRAM_Write(SRAM_SEND_LENGTH_L,0);
				}
				else
				{
					gSMS_OUT_Step=22;
					gTimer_GSM_AT=0;
					#ifdef Debug_GSM_COM1
					Send_COM1_Byte('F');Send_COM1_String((unsigned char *)TYPE,sizeof(TYPE));
					#endif
				}
			}
			else
			{
				gOther_Flag&=~RECORD_DATA_F_1;
				gOther_Flag&=~ALLOW_SEND_RECORD_F_1;
				SRAM_Init();
				SRAM_Write(SRAM_SEND_VAILD,NULL_2);
				SRAM_Write(SRAM_SEND_LENGTH_H,0);
				SRAM_Write(SRAM_SEND_LENGTH_L,0);
				Case4_SMSOUT_Out();
			}
		}
		else
		{
			Case4_SMSOUT_Out();
		}
	}
	/********************************************************\
	第一类GSM数据的发送:
	1-1:
		0x7B	存储表示这个区域的SMS是否处理,为1则表示后面还有未处理的SMS,为0则表示已经处理完了SMS
		0x7C	存储数据包的命令字在这里则为nCommand
		0x7D	存储数据包的ACK的值ACK
		0x7E	存储后面数据包的长度(但注意没有存储CHK(MSB),CHK(LSB),EOT,这三个字节)
		0x7F  	从这开始存储数据包

⌨️ 快捷键说明

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