📄 gprs.c
字号:
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 + -