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

📄 gprs.c

📁 名厂车载GPS通信终端
💻 C
📖 第 1 页 / 共 4 页
字号:
            At_Cmd_Gprsmode(Init_To_Gprs);
		}
		else {
            if(at_return[_AT_GPRSMODE]==_OK){
#ifdef DEBUG_AT
				Uart1Send("send GPRSMODE SUCC");
#endif
				First_Time = 0;
				Init_Modem_Step++;
				failtime   = 0;
				Start_Timer(Init_Gprs_Timer,5,HMSEL);
            }
            else{
#ifdef DEBUG_AT
				Uart1Send("send GPRSMODE FAIL");
#endif            
				if(failtime!=0xff)failtime++;
				if(failtime<3){
					At_Cmd_Gprsmode(Init_To_Gprs);
				}
				else{
					First_Time      = 0;
					failtime        = 0;
					Init_Modem_Step = 3;
					Start_Timer(Init_Gprs_Timer,5,HMSEL);
				}
            }
		}
		break;
	case 11:
#ifdef DEBUG_AT
		Uart1Send("send APNSERV");
#endif
		Start_Timer(Init_Gprs_Timer,3,SECOND);
		if(First_Time==0){
            First_Time = 1;
            At_Cmd_Apnserv(cur_sim.Apn,_Strlen(cur_sim.Apn,20),Init_To_Gprs);
		}
		else {
            if(at_return[_AT_APNSERV]==_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_Apnserv(cur_sim.Apn,_Strlen(cur_sim.Apn,20),Init_To_Gprs);
				}
				else{
					First_Time      = 0;
					failtime        = 0;
					Init_Modem_Step = 3;
					Start_Timer(Init_Gprs_Timer,5,HMSEL);
				}
            }
		}        
		break;
	case 12:
#ifdef DEBUG_AT
		Uart1Send("send APNUN");
#endif
		Start_Timer(Init_Gprs_Timer,3,SECOND);
		if(First_Time==0){
            First_Time = 1;
            At_Cmd_Apnun(cur_sim.User,_Strlen(cur_sim.User,21),Init_To_Gprs);
		}
		else {
            if(at_return[_AT_APNUN]==_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_Apnun(cur_sim.User,_Strlen(cur_sim.User,21),Init_To_Gprs);
				}
				else{
					First_Time      = 0;
					failtime        = 0;
					Init_Modem_Step = 3;
					Start_Timer(Init_Gprs_Timer,5,HMSEL);
				}
            }
		}
		break;
	case 13:
#ifdef DEBUG_AT
		Uart1Send("send APNPW");
#endif
		Start_Timer(Init_Gprs_Timer,3,SECOND);
		if(First_Time==0){
            First_Time = 1;
            At_Cmd_Apnpw(cur_sim.Password,_Strlen(cur_sim.Password,21),Init_To_Gprs);
		}
		else {
            if(at_return[_AT_APNPW]==_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_Apnpw(cur_sim.Password,_Strlen(cur_sim.Password,21),Init_To_Gprs);
				}
				else{
					First_Time      = 0;
					failtime        = 0;
					Init_Modem_Step = 3;
					Start_Timer(Init_Gprs_Timer,5,HMSEL);
				}
            }
		}
		break;
	case 14:
#ifdef DEBUG_AT
		Uart1Send("send connect");
#endif
		Start_Timer(Init_Gprs_Timer,8,SECOND);
		if(First_Time==0){
            First_Time = 1;
            At_Cmd_Connectionstart(Init_To_Gprs);
		}
		else {
            if(at_return[_AT_CONNECTIONSTART]==_OK)
			{
				First_Time = 0;
				Init_Modem_Step++;
				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);//lxo 121901 for gprs signal
				At_Cmd_Csq();//lxo 121902 for gprs signal
//				Start_Timer(Init_Gprs_Timer,5,SECOND);//lxo 121903 for gprs signal//Removed  0227051
				Start_Timer(Init_Gprs_Timer,1,SECOND);//Added  0227052

            }
            else
			{
#ifdef DEBUG_AT
				if(at_return[_AT_CONNECTIONSTART] == _APN_ERR)
					Uart1Send("CONNECTIONSTART: APN Error!");
				else if(at_return[_AT_CONNECTIONSTART] == _CGATT_ERR)
					Uart1Send("CONNECTIONSTART: CGATT Error!");
				else
					Uart1Send("CONNECTIONSTART: Another Error!");
#endif
				retrysimcardtime++;  //added by leon 050921
				if(retrysimcardtime >2)   //try 3 times
				{
					retrysimcardtime=0;
					if(isgprsnoservice&&(gsc.Gprs_Simcard_bits.card0nosim || gsc.Gprs_Simcard_bits.card1nosim))
					{
#ifdef DEBUG_AT
						Uart1Send("retry simcard time > 3 in CONNECTIONSTART and is grps no service");
						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 CONNECTIONSTART and 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 CONNECTIONSTART and return to SMS mode!");
#endif
							isgprsnoservice =1;
							//gsmstatus.workmode =0;  //note: back to GSM mode
							gsmstatus.mode    |= INIT_OK;
							gsc.Gprs_Simcard_bits.isconnecting =0; //added by leon 050929 
							gsc.Gprs_Simcard_bits.retrycount =0; //added by leon 050926
							if(gsmstatus.isupdate == TRUE) gsmstatus.isupdate = FALSE;
							Store_All_Para();
							Stop_Timer(Init_Gprs_Timer);
							return;
						}
					}
				}
				else
				{
					At_Cmd_Connectionstart(Init_To_Gprs);
				}
            }
         }              
		 break;
      case 15:
#ifdef DEBUG_AT
		  Uart1Send("send Tcpserv");
#endif
		  Start_Timer(Init_Gprs_Timer,3,SECOND);
		  ParaSet.IPChange=0;	//add lxo 112313 for reconnect after IP&Port change.
		  if(First_Time==0){
			  First_Time = 1;
			  At_Cmd_Tcbserv(cur_sim.IpAddr,_Strlen(cur_sim.IpAddr,16),Init_To_Gprs);
		  }
		  else {
			  if(at_return[_AT_TCPSERV]==_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_Tcbserv(cur_sim.IpAddr,_Strlen(cur_sim.IpAddr,16),Init_To_Gprs);
				  }
				  else{
					  First_Time      = 0;
					  failtime        = 0;
					  Init_Modem_Step = 3;
					  Start_Timer(Init_Gprs_Timer,5,HMSEL);
				  }
			  }
		  }
		  break;
      case 16:
#ifdef DEBUG_AT
		  Uart1Send("send tcpport");
#endif
		  Start_Timer(Init_Gprs_Timer,3,SECOND);
		  if(First_Time==0){
			  First_Time = 1;
			  At_Cmd_Tcbport(cur_sim.SocketPort,_Strlen(cur_sim.SocketPort,6),Init_To_Gprs);
		  }
		  else {
			  if(at_return[_AT_TCPPORT]==_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_Tcbport(cur_sim.SocketPort,_Strlen(cur_sim.SocketPort,6),Init_To_Gprs);
				  }
				  else{
					  First_Time      = 0;
					  failtime        = 0;
					  Init_Modem_Step = 3;
					  Start_Timer(Init_Gprs_Timer,5,HMSEL);
				  }
			  }
		  }
		  break;
      case 17:
#ifdef DEBUG_AT
		  Uart1Send("send otcp");
#endif
		  Start_Timer(Init_Gprs_Timer,5,MINUTE);//add lxo 112431 for reconnect with invalid ip&port 
		  if(First_Time==0)
		  {
			  First_Time = 1;
			  At_Cmd_Otcp(Init_To_Gprs);
		  }
		  else 
		  {
			  if(at_return[_AT_OTCP]==_OK)
			  {
				  First_Time = 0;
				  Init_Modem_Step++;
				  retrysimcardtime =0;   //added by leon 050921
				  failtime   = 0;
				  Start_Timer(Init_Gprs_Timer,1,SECOND);   //modified by leon 050926 from 5s to 1s
			  }
			  else
			  {
#ifdef DEBUG_AT
				  if(at_return[_AT_OTCP]==_ERR)
					  Uart1Send("OTCP: error!");
				  else
					  Uart1Send("OTCP: overtime!");
#endif
				  retrysimcardtime++;   //added by leon 050921
				  if(retrysimcardtime >2)   //try 2 times
				  {
					  retrysimcardtime =0;
					  if(isgprsnoservice&&(gsc.Gprs_Simcard_bits.card0nosim || gsc.Gprs_Simcard_bits.card1nosim))
					  {
#ifdef DEBUG_AT
						  Uart1Send("retry simcard time >3 is gprs no service in OTCP and got return value is ERR");
						  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 OTCP and 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 OTCP and return to SMS mode!");
#endif
							  isgprsnoservice =1;
							  //gsmstatus.workmode =0;  //note: back to GSM mode
							  gsmstatus.mode    |= INIT_OK;
							  gsc.Gprs_Simcard_bits.retrycount =0; 		//added by leon 050926
							  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;
						  }
					  }
				  }
				  else
				  {
					  At_Cmd_Otcp(Init_To_Gprs);
				  }
			  }
         }       
		 break;
      case 18:
  		  Stop_Timer(Init_Gprs_Timer);  //added by leon 050927
		  First_Time      = 0;
		  failtime        = 0;
		  retrysimcardtime =0;   //added by leon 050921
		  //gsmstatus.mode    |= INIT_OK;//Removed by lxo 06090101 for not being able to dial
		  gsmstatus.mode = INIT_OK;//Added by lxo 06090102 for not being able to dial
		  gsmstatus.gprsdata=TRUE;
		  
		  if(gsmstatus.isupdate== TRUE)
	  		  Send_Gprs_Ack(0x1048,0xff);
		  else if(isgprsnoservice)
		      Send_Gpsdata(0x0340,_SMS_SUCCESS,0); //added by leon 050928 GPRS re-connected!
		  else
			  Send_Gpsdata(0x0140,_SMS_SUCCESS,0);  //added by leon 050928
		  SendFixProc();  	 	 //added by leon

		  gsc.Gprs_Simcard_bits.retrycount =0; //added by leon 050926
		  gsc.Gprs_Simcard_bits.currsc = save.basevalue.mode.bit.simid;  //added by leon 050929
		  gsc.Gprs_Simcard_bits.isconnecting =0; //added by leon 050929 
	  	  isgprsnoservice = 0;   //added by leon 050921
		  Init_Modem_Step = 0;

		  Store_All_Para();  //added by leon 050919

//Added by lxo 06081117 for none-signal-region-supplement condition compile
#if SUPPLEMENT == SUPPLEMENTENABLE
		  Resend_proc();//added by lxo 1227071
#endif		  
#ifdef DEBUG_AT
		  Uart1Send("INIT GPRS OK!");
#endif 
		  break;
      default:
#ifdef DEBUG_AT
		  Uart1Send("INIT GPRS ERR");
#endif 
		  break;
   }
}

void Init_Gprs_Proc(void)
{
	switch(Init_Modem_Step)
	{
	case 0:
#ifdef DEBUG_AT
		Uart1Send("start to change sim card and power on:");
		Uart1Word(save.basevalue.mode.bit.simid);
		Uart1Word(save.basevalue.gprs_mode);
#endif
		gsc.Gprs_Simcard_bits.isconnecting =1; //added by leon 050929 
		gsmstatus.mode = 0;//Added by lxo 123003
		Simcard_Sel(save.basevalue.mode.bit.simid);
		MODEM_ON        = VOL_LOW;
		MODULE_ON       = VOL_LOW;
		Init_Modem_Step = 1;
		Start_Timer(Init_Gprs_Timer,1,SECOND);
		break;
	case 1:                                     //复位//
#ifdef DEBUG_AT
		Uart1Send("reset1");
#endif
		Init_Modem_Step = 2;
		MODULE_RESET    = VOL_HIGH;
		Start_Timer(Init_Gprs_Timer,1,SECOND);
		break;
	case 2:                                     //复位//
#ifdef DEBUG_AT
		Uart1Send("reset2");
#endif      
		Init_Modem_Step = 3;
		MODULE_RESET    = VOL_LOW;
		Reset_GsmUart();
		InitSmsParamters();
		Init_SimInformation();
		Start_Timer(Init_Gprs_Timer,3,SECOND);   //modified by leon 050919 from 13s to 3s
		break;
	default:
		if(Init_Modem_Step>=3)
		{
            if(gsmstatus.workmode==0)
            {
				Init_To_Gsm();    //初始化为gsm模式//
            }
            else if(gsmstatus.workmode==1||gsmstatus.workmode==2)
            {
				Init_To_Gprs();   //初始化为gprs模式//
            }
		}
		break;
	}
}

void Start_Init_Proc(uchar step,uchar mode)  //初始化入口函数//
{
	Informproc=NULL;//Added by lxo 0227043
	Init_Modem_Step    = step;
	if(mode<3)
	{
		gsmstatus.workmode = mode;
	}
	Init_Gprs_Proc();
}

void Reset_Gprs_Proc(void)
{
	switch(rst_modem_step)
	{
	case 0:
		At_Cmd_Cpof();
		rst_modem_step = 1;
		Start_Timer(Reset_Gprs_Timer,40,HMSEL);
		break;
	case 1:
		gsmstatus.mode = 0;
		InitSmsParamters();
		Simcard_Sel(1);
		MODEM_ON       = VOL_HIGH;
		MODULE_ON      = VOL_HIGH;
		rst_modem_step = 2;
		Start_Timer(Reset_Gprs_Timer,8,SECOND);
		break;
	case 2:
		if(gsmstatus.power==_GPRS_POWER_ON)
			Start_Init_Proc(0,0xff);
		break;
	}
}

void Reset_Gprs(void)
{
	gsmstatus.mode = 0;
	rst_modem_step = 0;
	Reset_Gprs_Proc();
}

void SwitchToAtCmd(void)
{
	uchar buf[2];
#ifdef DEBUG_AT
    Uart1Send("Enter SwitchToATCmd\r\n");
#endif
	if(gsmstatus.power== _GPRS_POWER_OFF)return;
	if(gsmstatus.gprsdata==FALSE)return;
#ifdef DEBUG_AT
    Uart1Send("NOW Switch To AT Cmd!\r\n");
#endif
	buf[0] = 0x03;
	//gsmstatus.workmode = 2;  //modified by leon 050921
	Uart2Tx(buf,1);

⌨️ 快捷键说明

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