WORD GSM_AttachGprs(char * apn, char * login, char * password)
{
WORD i;
if(ModemGsm.Signal.Control.RcvMessage){
if(GSM_CompareMessage(GSMResponse[mrCONNECT_OK])){
Gsm.State = NONE;
ModemGsm.Signal.Control.RcvMessage = FALSE;
}
else if(GSM_CompareMessage(GSMResponse[mrIP])){
Gsm.State = TCP_SET_CONTEXT;
ModemGsm.Signal.Control.RcvMessage = FALSE;
}
else if(GSM_CompareMessage(GSMResponse[mrCONNECT_FAIL])){
Gsm.State = NONE;
ModemGsm.Signal.Control.RcvMessage = FALSE;
}
else if(GSM_CompareMessage(GSMResponse[mrPDP])){
Gsm.State = NONE;
ModemGsm.Semaphore.Control.GprsAttach = FALSE;
ModemGsm.Signal.Control.RcvMessage = FALSE;
}
else if(GSM_CompareMessage(GSMResponse[mrQNTP])){
for(i=0; i<strlen((char*)Gsm.ReceiveData); i++){
if(Gsm.ReceiveData[i] == ':'){
i+=2; break;
}
}
if(Gsm.ReceiveData[(i)] == '0'){
Gsm.State = GET_CCLK;
ModemGsm.Signal.Control.RcvMessage = FALSE;
}
else{
Gsm.State = NONE;
ModemGsm.Semaphore.Control.GprsAttach = TRUE;
ModemGsm.Semaphore.Control.GprsRegister = TRUE;
ModemGsm.Signal.Control.RcvMessage = FALSE;
return 0;
}
}
else if(GSM_CompareMessage(GSMResponse[mrOK])){ //prikaz bol uspesne vykonany
switch(Gsm.ActualCommand){
case mcQIMUX:
ModemGsm.Signal.Control.CommandOK = TRUE;
Gsm.State = TCP_MODE;
ModemGsm.Signal.Control.RcvMessage = FALSE;
break;
case mcQIMODE:
ModemGsm.Signal.Control.CommandOK = TRUE;
Gsm.State = TCP_SET_CONTEXT; //TCP_GETIP;
ModemGsm.Signal.Control.RcvMessage = FALSE;
break;
case mcQIDNSGIP:
ModemGsm.Signal.Control.CommandOK = TRUE;
Gsm.State = NONE;
ModemGsm.Signal.Control.RcvMessage = FALSE;
break;
case mcQIFGCNT:
ModemGsm.Signal.Control.CommandOK = TRUE;
Gsm.State = TCP_DNS_IP;
ModemGsm.Signal.Control.RcvMessage = FALSE;
break;
case mcQIDNSIP:
DelayMs(250);
ModemGsm.Signal.Control.CommandOK = TRUE;
Gsm.State = TCP_SET_APN;
ModemGsm.Signal.Control.RcvMessage = FALSE;
break;
case mcQICSGP:
ModemGsm.Signal.Control.CommandOK = TRUE;
ModemGsm.Signal.Control.RcvMessage = FALSE;
if(InternalRtccFlag.bits.ntp) Gsm.State = TCP_SET_NTP; //TCP_REG_APP;
else{
Gsm.State = NONE;
ModemGsm.Semaphore.Control.GprsAttach = TRUE;
ModemGsm.Semaphore.Control.GprsRegister = TRUE;
return 0;
}
break;
case mcQISTAT:
ModemGsm.Signal.Control.CommandOK = TRUE;
ModemGsm.Signal.Control.RcvMessage = FALSE;
if(InternalRtccFlag.bits.ntp) Gsm.State = TCP_SET_NTP;
else{
Gsm.State = NONE;
ModemGsm.Semaphore.Control.GprsAttach = TRUE;
ModemGsm.Semaphore.Control.GprsRegister = TRUE;
return 0;
}
break;
case mcQIACTinit:
ModemGsm.Signal.Control.CommandOK = TRUE;
ModemGsm.Signal.Control.RcvMessage = FALSE;
if(InternalRtccFlag.bits.ntp) Gsm.State = TCP_SET_NTP;
else{
Gsm.State = NONE;
ModemGsm.Semaphore.Control.GprsAttach = TRUE;
ModemGsm.Semaphore.Control.GprsRegister = TRUE;
return 0;
}
break;
case mcQNTP_S:
ModemGsm.Signal.Control.CommandOK = TRUE;
Gsm.State = NONE; //TCP_SET_RTC_NTP;
ModemGsm.Signal.Control.RcvMessage = FALSE;
break;
case mcQIREGAPP:
ModemGsm.Signal.Control.CommandOK = TRUE;
Gsm.State = GPRS_ACTIVATE;
ModemGsm.Signal.Control.RcvMessage = FALSE;
break;
case mcCCLK:
ModemGsm.Signal.Control.CommandOK = TRUE;
Gsm.State = NONE;
ModemGsm.Semaphore.Control.GprsAttach = TRUE;
ModemGsm.Semaphore.Control.GprsRegister = TRUE;
ModemGsm.Signal.Control.RcvMessage = FALSE;
return 0;
}
}
else if(GSM_CompareMessage(GSMResponse[mrERROR])){ //chyba
switch(Gsm.ActualCommand){
case mcQICSGP:
ModemGsm.Signal.Control.CommandOK = TRUE;
Gsm.State = NONE;
ModemGsm.Semaphore.Control.GprsAttach = FALSE;
ModemGsm.Signal.Control.Process = FALSE;
ModemGsm.Signal.Control.RcvMessage = FALSE;
return 1;
case mcQNTP_S:
case mcCCLK:
ModemGsm.Signal.Control.CommandOK = TRUE;
Gsm.State = NONE;
ModemGsm.Semaphore.Control.GprsAttach = TRUE;
ModemGsm.Semaphore.Control.GprsRegister = TRUE;
ModemGsm.Signal.Control.RcvMessage = FALSE;
return 1;
case mcQIMUX:
ModemGsm.Signal.Control.CommandOK = TRUE;
Gsm.State = TCP_MODE;
ModemGsm.Signal.Control.RcvMessage = FALSE;
break;
case mcQIMODE:
ModemGsm.Signal.Control.CommandOK = TRUE;
Gsm.State = TCP_SET_CONTEXT; //TCP_GETIP;
ModemGsm.Signal.Control.RcvMessage = FALSE;
break;
case mcQIDNSGIP:
case mcQIFGCNT:
ModemGsm.Signal.Control.CommandOK = TRUE;
Gsm.State = TCP_DNS_IP;
ModemGsm.Signal.Control.RcvMessage = FALSE;
break;
case mcQIDNSIP:
DelayMs(250);
ModemGsm.Signal.Control.CommandOK = TRUE;
Gsm.State = TCP_SET_APN;
ModemGsm.Signal.Control.RcvMessage = FALSE;
break;
case mcQISTAT:
case mcQIREGAPP:
case mcQIACTinit:
ModemGsm.Signal.Control.CommandOK = TRUE;
Gsm.State = NONE;
ModemGsm.Signal.Control.RcvMessage = FALSE;
break;
}
}
}
switch(Gsm.State){
case TCP_DISABLE_MUX:
Gsm.State = NONE;
strcpy((char*)Gsm.CommandData, GSMCommand[mcQIMUX]);
Gsm.ActualCommand = mcQIMUX;
ModemGsm.Signal.Control.SendCommand = TRUE;
break;
case TCP_MODE:
Gsm.State = NONE;
strcpy((char*)Gsm.CommandData, GSMCommand[mcQIMODE]);
Gsm.ActualCommand = mcQIMODE;
ModemGsm.Signal.Control.SendCommand = TRUE;
break;
case TCP_DNS_IP:
Gsm.State = NONE;
strcpy((char*)Gsm.CommandData, GSMCommand[mcQIDNSIP]);
Gsm.ActualCommand = mcQIDNSIP;
ModemGsm.Signal.Control.SendCommand = TRUE;
break;
case TCP_GETIP:
Gsm.State = NONE;
strcpy((char*)Gsm.CommandData, GSMCommand[mcQIDNSGIP]);
Gsm.ActualCommand = mcQIDNSGIP;
ModemGsm.Signal.Control.SendCommand = TRUE;
break;
case TCP_SET_CONTEXT:
Gsm.State = NONE;
strcpy((char*)Gsm.CommandData, GSMCommand[mcQIFGCNT]);
Gsm.ActualCommand = mcQIFGCNT;
ModemGsm.Signal.Control.SendCommand = TRUE;
break;
case TCP_SET_APN:
Gsm.State = NONE;
strcpy((char*)Gsm.CommandData, GSMCommand[mcQICSGP]);
strcat((char*)Gsm.CommandData, "1,\"");
strcat((char*)Gsm.CommandData, TableApnSettingGPRS[Gsm.Operator].APN);
if(strlen((const char*)TableApnSettingGPRS[Gsm.Operator].Name) != 0){
strcat((char*)Gsm.CommandData, "\",\"");
strcat((char*)Gsm.CommandData, TableApnSettingGPRS[Gsm.Operator].Name);
}
if(strlen((const char*)TableApnSettingGPRS[Gsm.Operator].Password) != 0){
strcat((char*)Gsm.CommandData, "\",\"");
strcat((char*)Gsm.CommandData, TableApnSettingGPRS[Gsm.Operator].Password);
}
strcat((char*)Gsm.CommandData, "\"\r");
Gsm.ActualCommand = mcQICSGP;
ModemGsm.Signal.Control.SendCommand = TRUE;
break;
case TCP_REG_APP:
Gsm.State = NONE;
strcpy((char*)Gsm.CommandData, GSMCommand[mcQIREGAPP]);
Gsm.ActualCommand = mcQIREGAPP;
ModemGsm.Signal.Control.SendCommand = TRUE;
break;
case TCP_SET_NTP:
Gsm.State = NONE;
strcpy((char*)Gsm.CommandData, GSMCommand[mcQNTP_S]);
strcat((char*)Gsm.CommandData, "\"");
strcat((char*)Gsm.CommandData, TableNtpSettingGPRS[0].NtpServer);
strcat((char*)Gsm.CommandData, "\",123\r");
Gsm.ActualCommand = mcQNTP_S;
ModemGsm.Signal.Control.SendCommand = TRUE;
break;
case GPRS_STATUS:
Gsm.State = NONE;
strcpy((char*)Gsm.CommandData, GSMCommand[mcQISTAT]);
Gsm.ActualCommand = mcQISTAT;
ModemGsm.Signal.Control.SendCommand = TRUE;
break;
case GPRS_ACTIVATE_INIT:
Gsm.State = NONE;
strcpy((char*)Gsm.CommandData, GSMCommand[mcQIACTinit]);
Gsm.ActualCommand = mcQIACTinit;
ModemGsm.Signal.Control.SendCommand = TRUE;
break;
case GET_CCLK:
Gsm.State = NONE;
strcpy((char*)Gsm.CommandData, GSMCommand[mcCCLK]);
Gsm.ActualCommand = mcCCLK;
ModemGsm.Signal.Control.SendCommand = TRUE;
break;
}
return 1;
}