WORD GSM_AttachGprs(char * apn, char * login, char * password)

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; }