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

📄 gprs.c

📁 名厂车载GPS通信终端
💻 C
📖 第 1 页 / 共 4 页
字号:
	Accept_Ring_Timer    = Create_Timer(Accept_Ring_Proc);   //added by leon 050921
	Hangup_BacktoGPRS_Timer = Create_Timer(Hangup_BacktoGPRS_Proc);  //added by leon 051011
	Recv_Sms_Timer       = Create_Timer(Recv_Sms_Proc);   //added by leon 051019
	gsmstatus.mode       = 0;
	if(save.basevalue.gprs_mode !=2)  		//added by leon 050921 for 06B1 DOUBLE-MODE
	{
		save.basevalue.gprs_mode =2;
		Store_All_Para();
	}
	if(save.basevalue.fixtime != 300)       //added by leon 051104 for holding on-line status
	{
		save.basevalue.fixtime = 300;
		Store_All_Para();
	}
	//save.basevalue.gprs_mode =0;
	gsmstatus.workmode = save.basevalue.gprs_mode;
	gsc.Gprs_Simcard_Char = 0; //added by leon 050926
	gsc.Gprs_Simcard_bits.currsc = save.basevalue.mode.bit.simid; //added by leon 050926
	
	gsmstatus.gprsstatus = _GPRS_NO_LINE;
	gsmstatus.resettime  = 0;
	gsmstatus.tel        = _TEL_IDLE;
	gsmstatus.power      = _GPRS_POWER_ON;
	gsmstatus.wake       = _GPRS_WAKE;
	gsmstatus.gprsdata   = FALSE;
	gsmstatus.isupdate   = FALSE;
	gsmstatus.needupdate = FALSE;
	Start_Timer(Gprs_Service_Timer,5,MINUTE);  //added by leon 050926
}

void InitSmsParamters(void)
{
	BYTE i;
	
	SmBufHead            = 0;
	SmBufTail            = 0;
	gsmstatus.tel        = _TEL_IDLE;
	gsmstatus.talkmode   = _TALK_OFF;
	AutoDial.state       = _IDLE;
	smscount             = 0;
}

void Init_SimInformation(void)
{
	uint i;
	uchar *ptr;
	uchar *bakptr;
	
	bakptr = (uchar *)(save.simcard[save.basevalue.mode.bit.simid].MyNumb);
	ptr    = (uchar *)(cur_sim.MyNumb);
	for(i=0; i<sizeof(_CURRENT_SIMCARD); i++)
	{
		ptr[i] = bakptr[i];
	}
}

void Init_To_Gsm(void)
{
	static uchar failtime   = 0;
	static uchar First_Time = 0;
	static uchar retrysimcardtime = 0; //added by leon 050919
	uchar simid;
	Stop_Timer(Init_Gprs_Timer);
	switch(Init_Modem_Step)
	{
	case 3:                     //发送AT//
#ifdef DEBUG_AT
		Uart1Send("send at");
#endif
		Start_Timer(Init_Gprs_Timer,20,HMSEL);
		if(First_Time==0)
		{
            First_Time = 1;
            At_Cmd_At(Init_To_Gsm);
						failtime=0;//added by lxo 021611 
		}
		else
		{
            if(at_return[_AT_AT]== _OK)
            {
				First_Time = 0;
				Init_Modem_Step++;
				failtime   = 0;
				Start_Timer(Init_Gprs_Timer,5,HMSEL);
            }
            else
            {
            			failtime++;//added by lxo 021612
				if(failtime>10)
				{
#ifdef DEBUG_AT
					Uart1Send("send at failed and reset modem!");
#endif
					failtime=0;
					First_Time=0;
					MODEM_ON       = VOL_HIGH;
					MODULE_ON      = VOL_HIGH;
					Init_Modem_Step=0;
					Start_Timer(Init_Gprs_Timer,5,SECOND);
				}
				else
				{
					At_Cmd_At(Init_To_Gsm);
				}
            
            }
		}
		break;
	case 4:
#ifdef DEBUG_AT
		Uart1Send("send atinit");
#endif
		Start_Timer(Init_Gprs_Timer,2,SECOND);
		if(First_Time==0)
		{
            First_Time =1;
            At_Cmd_Init(Init_To_Gsm);
		}
		else
		{
            if(at_return[_AT_INIT]==_OK)
            {
				First_Time = 0;
				Init_Modem_Step++;
				failtime   = 0;
				retrysimcardtime =0;  //added by leon 050919
				Start_Timer(Init_Gprs_Timer,5,HMSEL);
            }
            else if(at_return[_AT_INIT]==_NOSIM)
            {
				First_Time = 0;
				//Init_Modem_Step++;   //050919
				Set_Char_Bit(&gsmstatus.mode,6);
				retrysimcardtime++;
				if(retrysimcardtime <4)
				{
					save.basevalue.mode.bit.simid = !save.basevalue.mode.bit.simid; //added by leon 050919
					Init_Modem_Step =0; //added by leon 050919
					Start_Timer(Init_Gprs_Timer,5,HMSEL);  //added by leon 050919  Jump Back to Re-Init
				}
				else    //added by leon 050919
				{
					retrysimcardtime =0;
					Init_Modem_Step =0;
					Uart1Send("No SIM Card!!");
				}
            }
            else
            {
				if(failtime!=0xff)failtime++;
				if(failtime<10)
				{
					At_Cmd_Init(Init_To_Gsm);
				}
				else
				{
					failtime   = 0;
					First_Time = 0;
					Init_Modem_Step--;
					Start_Timer(Init_Gprs_Timer,5,HMSEL);
				}
            }
		}
		break;
	case 5:
#ifdef DEBUG_AT
		Uart1Send("init gsm ok");
#endif 
		simid = save.basevalue.mode.bit.simid;  //added by leon 050919
		At_Cmd_Csca(save.phonenumber.MessageServiceNumb[simid],_Strlen(save.phonenumber.MessageServiceNumb[simid],15));
		At_Cmd_Cmgd_All();
		At_Cmd_Csq();//Added by lxo 123004
		gsmstatus.mode    |= INIT_OK;
		gsc.Gprs_Simcard_bits.isconnecting = 0;  //added by leon 050929
		Store_All_Para();    //added by leon 050919
		//Dial(save.phonenumber.ListenNumb[0],11,TRUE,FALSE);
		break;
	}
}

void Init_To_Gprs(void)
{
	static uchar failtime   = 0;
	static uchar First_Time = 0;
	static uchar retrysimcardtime = 0; //added by leon 050919
	uchar simid;   //added by leon 050919
	Stop_Timer(Init_Gprs_Timer);
	switch(Init_Modem_Step)
	{
	case 3:                     //发送AT//
#ifdef DEBUG_AT
		Uart1Send("send at");
#endif
		Start_Timer(Init_Gprs_Timer,20,HMSEL);
		//Write_To_Send(CENTER_RELEASE);
		if(First_Time==0)
		{
            First_Time = 1;
            At_Cmd_At(Init_To_Gprs);
			failtime=0;//added by lxo 021601 
		}
		else
		{
            if(at_return[_AT_AT]== _OK)
            {
				First_Time = 0;
				Init_Modem_Step++;
				failtime   = 0;
				Start_Timer(Init_Gprs_Timer,5,HMSEL);
            }
            else
            {
            			failtime++;//added by lxo 021602
				if(failtime>10)
				{
#ifdef DEBUG_AT
					Uart1Send("send at failed and reset modem!");
#endif
					failtime=0;
					First_Time=0;
					MODEM_ON       = VOL_HIGH;
					MODULE_ON      = VOL_HIGH;
					Init_Modem_Step=0;
					Start_Timer(Init_Gprs_Timer,5,SECOND);
				}
				else
				{
					At_Cmd_At(Init_To_Gprs);
				}
            }
		}
		break;
	case 4:
#ifdef DEBUG_AT
		Uart1Send("send atinit");
#endif
		Start_Timer(Init_Gprs_Timer,2,SECOND);
		if(First_Time==0)
		{
            First_Time =1;
            At_Cmd_Init(Init_To_Gprs);
		}
		else
		{
            if(at_return[_AT_INIT]==_OK)
            {
				First_Time = 0;
				Init_Modem_Step++;
				failtime   = 0;
				retrysimcardtime =0;
				simid = save.basevalue.mode.bit.simid; //added by leon 050919
				At_Cmd_Csca(save.phonenumber.MessageServiceNumb[simid],_Strlen(save.phonenumber.MessageServiceNumb[simid],15));
				At_Cmd_Csq();//lxo 120711 for gprs signal
//				Start_Timer(Init_Gprs_Timer,50,HMSEL);//lxo 120712 for gprs signal
				Start_Timer(Init_Gprs_Timer,5,SECOND);//lxo 120713 for gprs signal
            }
            else if(at_return[_AT_INIT]==_NOSIM)
            {
				First_Time = 0;
				//Init_Modem_Step++;  //050919
				Set_Char_Bit(&gsmstatus.mode,6);
				retrysimcardtime++;
				if(retrysimcardtime >1)   //added by leon 050919 just retry 2 times.
				{
					retrysimcardtime =0;
					if(save.basevalue.mode.bit.simid)  //added by leon 050926 if is card 1
					{
						gsc.Gprs_Simcard_bits.card1nosim =1;
					}
					else                                             //added by leon 050926 if is card 0
					{
						gsc.Gprs_Simcard_bits.card0nosim =1;
					}
					if(!gsc.Gprs_Simcard_bits.card0nosim || !gsc.Gprs_Simcard_bits.card1nosim)
					{
						save.basevalue.mode.bit.simid = !save.basevalue.mode.bit.simid;
						Init_Modem_Step =0; //added by leon 050919
						Start_Timer(Init_Gprs_Timer,5,HMSEL);  //added by leon 050919  Jump Back to Re-Init
					}
					else
					{
						Stop_Timer(Init_Gprs_Timer);
						gsc.Gprs_Simcard_bits.isconnecting =0; //added by leon 050929 
						Uart1Send("NO SIM Card!!");
					}
				}
            }
            else
            {
				if(failtime!=0xff)failtime++;
				if(failtime<10){
					At_Cmd_Init(Init_To_Gprs);
				}
				else
				{
					First_Time = 0;
					failtime   = 0;
					Init_Modem_Step=3;
					Start_Timer(Init_Gprs_Timer,5,HMSEL);
				}
            }
		}
		break;
	case 5:
#ifdef DEBUG_AT
		Uart1Send("send wopen");
#endif
		Start_Timer(Init_Gprs_Timer,3,SECOND);
		if(First_Time==0){
            First_Time = 1;
            At_Cmd_Wopen(Init_To_Gprs);
		}
		else {
            if(at_return[_AT_WOPEN]==_OK){
				First_Time = 0;
				Init_Modem_Step++;
				failtime   = 0;
				Start_Timer(Init_Gprs_Timer,5,HMSEL);
            }
            else{
				if(failtime!=0xff)failtime++;
				if(failtime<3){
					At_Cmd_Wopen(Init_To_Gprs);
				}
				else{
					First_Time      = 0;
					failtime        = 0;
					Init_Modem_Step = 3;
					Start_Timer(Init_Gprs_Timer,5,HMSEL);
				}
            }
		} 
		break;
	case 6:
#ifdef DEBUG_AT
		Uart1Send("send dleMODE");
#endif
		Start_Timer(Init_Gprs_Timer,3,SECOND);
		if(First_Time==0){
            First_Time = 1;
            At_Cmd_Dlmode(Init_To_Gprs);
		}
		else {
            if(at_return[_AT_DLMODE]==_OK){
				First_Time = 0;
				Init_Modem_Step++;
				failtime   = 0;
				Start_Timer(Init_Gprs_Timer,5,HMSEL);
            }
            else{
				if(failtime!=0xff)failtime++;
				if(failtime<3){
					At_Cmd_Dlmode(Init_To_Gprs);
				}
				else{
					First_Time      = 0;
					failtime        = 0;
					Init_Modem_Step = 3;
					Start_Timer(Init_Gprs_Timer,5,HMSEL);
				}
            }
		}
		break;
	case 7:  //added by leon 050928
#ifdef DEBUG_AT
		Uart1Send("send CGREG");
#endif
		Start_Timer(Init_Gprs_Timer,3,SECOND);
		if(First_Time==0){
            First_Time = 1;
            At_Cmd_CGREG(Init_To_Gprs);
		}
		else {
            if(at_return[_AT_CGREG]==_OK){
				First_Time = 0;
				Init_Modem_Step++;
				failtime   = 0;
				Start_Timer(Init_Gprs_Timer,5,HMSEL);
            }
            else{
				if(failtime!=0xff)failtime++;
				if(failtime<3){
					At_Cmd_CGREG(Init_To_Gprs);
				}
				else{
					First_Time      = 0;
					failtime        = 0;
					Init_Modem_Step = 3;
					Start_Timer(Init_Gprs_Timer,5,HMSEL);
				}
            }
		}
		break;
	case 8:
#ifdef DEBUG_AT
		Uart1Send("send CGATT?");
#endif
		gsc.Gprs_Simcard_bits.isconnecting =1;  //added by leon 050929 
		Start_Timer(Init_Gprs_Timer,3,SECOND);  //modified by leon 050926 from 8s to 3s
		if(First_Time==0){
            First_Time = 1;
            At_Cmd_Cgatt1(Init_To_Gprs);
		}
		else {
            if(at_return[_AT_CGATT1]==_OK){
				First_Time = 0;
				Init_Modem_Step +=2 ;
				if(isgprsnoservice)    Init_Modem_Step = 11; //added by leon 051008
				failtime   = 0;
				retrysimcardtime =0;  //added by leon 050921
				//gsc.Gprs_Simcard_bits.retrycount =0; //added by leon 050926
				Start_Timer(Init_Gprs_Timer,5,HMSEL);
            }
            else
			{
				First_Time = 0;
				Init_Modem_Step++;
				failtime   = 0;
#ifdef DEBUG_AT
				if(at_return[_AT_CGATT1] == _CGATT_ERR)
					Uart1Send("CGATT?: CGATT Attach Failed then go to next step");
				else
					Uart1Send("CGATT?: CGATT Error!");
#endif
				retrysimcardtime++;  //added by leon 050921
				if(retrysimcardtime > 2)  //added by leon 050921
				{
					retrysimcardtime =0;
					if(isgprsnoservice && (gsc.Gprs_Simcard_bits.card0nosim || gsc.Gprs_Simcard_bits.card1nosim))
					{
#ifdef DEBUG_AT
						Uart1Send("retry simcard time > 3 and is gprs no serive in CGATT?");
  					    Uart1Word(gsc.Gprs_Simcard_bits.card0nosim);
						Uart1Word(gsc.Gprs_Simcard_bits.card1nosim);
#endif
						gsc.Gprs_Simcard_bits.isconnecting =0; //added by leon 050929 
						gsmstatus.mode    |= INIT_OK;
						if(gsmstatus.isupdate == TRUE) gsmstatus.isupdate = FALSE;
						Store_All_Para();
						Stop_Timer(Init_Gprs_Timer);
						return;
					}
					else
					{
						if((save.basevalue.mode.bit.simid && !gsc.Gprs_Simcard_bits.card0nosim)
							||
							(save.basevalue.mode.bit.simid ==0 && !gsc.Gprs_Simcard_bits.card1nosim)) 
						{
#ifdef DEBUG_AT
							Uart1Send("retry simcard time > 3 in CGATT? then begin to re-init");
#endif
							if(gsc.Gprs_Simcard_bits.retrycount==1)
							{
								gsc.Gprs_Simcard_bits.retrycount =0;
								isgprsnoservice =1;
								save.basevalue.mode.bit.simid =gsc.Gprs_Simcard_bits.currsc; 
							    gsmstatus.workmode =0;  //note: back to GSM mode
							}
							else
							{
								gsc.Gprs_Simcard_bits.retrycount =1;
								save.basevalue.mode.bit.simid = !save.basevalue.mode.bit.simid;											
							}
							if(gsmstatus.isupdate == TRUE) gsmstatus.isupdate = FALSE;
							Init_Modem_Step =0;
							Start_Timer(Init_Gprs_Timer,5,HMSEL);
							return;
						}
						if((save.basevalue.mode.bit.simid && gsc.Gprs_Simcard_bits.card0nosim)
							||
							(save.basevalue.mode.bit.simid ==0 && gsc.Gprs_Simcard_bits.card1nosim)) 
						{
#ifdef DEBUG_AT
							Uart1Send("retry simcard time > 3 in CGATT? and return to SMS mode!");
#endif
							isgprsnoservice =1;
							gsc.Gprs_Simcard_bits.retrycount =0; //added by leon 050926
							//gsmstatus.workmode =0;  //note: back to GSM mode
							gsmstatus.mode    |= INIT_OK;
							gsc.Gprs_Simcard_bits.isconnecting =0; //added by leon 050929 
							if(gsmstatus.isupdate == TRUE) gsmstatus.isupdate = FALSE;
							Store_All_Para();
							Stop_Timer(Init_Gprs_Timer);
							return;
						}
					}
				}
            }
		}         
		break;
	case 9:
#ifdef DEBUG_AT
		Uart1Send("send CGATT");
#endif
		Start_Timer(Init_Gprs_Timer,8,SECOND);
		if(First_Time==0){
            First_Time = 1;
            At_Cmd_Cgatt(Init_To_Gprs);
		}
		else {
            if(at_return[_AT_CGATT]==_OK){
				First_Time = 0;
				Init_Modem_Step--;
				failtime   = 0;
				Start_Timer(Init_Gprs_Timer,5,HMSEL);
            }
            else
			{
				/*if(failtime!=0xff)failtime++;
				if(failtime<3){
					At_Cmd_Cgatt(Init_To_Gprs);
				}
				else{
					First_Time      = 0;
					failtime        = 0;
					Init_Modem_Step--;   //modified by leon 050926 from Init_Modem_Step=3 to Init_Modem_Step--;
					Start_Timer(Init_Gprs_Timer,5,HMSEL);
				}*/
				First_Time      = 0;
				failtime        = 0;
				Init_Modem_Step--;   //modified by leon 050926 from Init_Modem_Step=3 to Init_Modem_Step--;
				Start_Timer(Init_Gprs_Timer,5,HMSEL);
            }
		}     
		break;
	case 10:
#ifdef DEBUG_AT
		Uart1Send("send GPRSMODE");
#endif
		Start_Timer(Init_Gprs_Timer,3,SECOND);
		if(First_Time==0){
            First_Time = 1;

⌨️ 快捷键说明

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