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