WORD GSM_RegNetwork(void)

WORD GSM_RegNetwork(void)
{
 WORD i, j;
 BYTE k;
 int temp;
 DWORD_VAL dwvTemp;

 if(ModemGsm.Signal.Control.RcvMessage){   if(GSM_CompareMessage(GSMResponse[mrCREG])){ //je zaregistrovany v sieti    if(GSM_CompareMessage("+CREG: 1")) ModemGsm.Signal.Control.RegOk = TRUE;    else if(GSM_CompareMessage("+CREG: 2")) ModemGsm.Signal.Control.RegOk = FALSE;    else if(GSM_CompareMessage("+CREG: 3")) ModemGsm.Signal.Control.RegOk = FALSE;    else if(GSM_CompareMessage("+CREG: 4")) ModemGsm.Signal.Control.RegOk = FALSE;    else if(GSM_CompareMessage("+CREG: 5")) ModemGsm.Signal.Control.RegOk = TRUE;    else if(GSM_CompareMessage("+CREG: 0")) ModemGsm.Signal.Control.RegOk = FALSE;    else ModemGsm.Signal.Control.RegOk = FALSE;    if(ModemGsm.Signal.Control.RegOk){     Gsm.ProcessState = NONE;    } // else{ // ModemGsm.Signal.Control.SendCommand = FALSE; // ModemGsm.Signal.Control.SendSms = FALSE; // ModemGsm.Signal.Control.Process = FALSE; // ModemGsm.Signal.Control.CommandOK = TRUE; // ModemGsm.Signal.Control.SmsProcessProcess = FALSE; // }    ModemGsm.Signal.Control.RcvMessage = FALSE;   }   else if(GSM_CompareMessage(GSMResponse[mrQNITZ])){    for(i=0; i<strlen((char*)Gsm.ReceiveData); i++){     if(Gsm.ReceiveData[i] == ':'){      i+=3; break;     }    }    GSM_TimeSynch(i);    ModemGsm.Signal.Control.RcvMessage = FALSE;   } #if defined(GSM_GPRS)   else if(GSM_CompareMessage(GSMResponse[mrCCLK])){    for(i=0; i<strlen((char*)Gsm.ReceiveData); i++){     if(Gsm.ReceiveData[i] == ':'){      i+=3; break;     }    }    if(TableNtpSettingGPRS[0].TimeZone >= 0) Gsm.ReceiveData[i+17] = '+';    else Gsm.ReceiveData[i+17] = '-';    temp = (int)abs(TableNtpSettingGPRS[0].TimeZone * 4);    ui_to_a((WORD)temp, bTemp);    if(temp < 10){     Gsm.ReceiveData[i+18] = '0';     Gsm.ReceiveData[i+19] = bTemp[0];    }    else{     Gsm.ReceiveData[i+18] = bTemp[0];     Gsm.ReceiveData[i+19] = bTemp[1];    }    GSM_TimeSynch(i);    ModemGsm.Signal.Control.RcvMessage = FALSE;   } #endif   else if(GSM_CompareMessage(GSMResponse[mrCSQ])){    for(i=0; i<strlen((char*)Gsm.ReceiveData); i++){     if(Gsm.ReceiveData[i] == ':'){      i+=2; break;     }    }    if(Gsm.ReceiveData[(i+1)] == ',') Gsm.SignalQuality = Gsm.ReceiveData[i] - 0x2f;    else Gsm.SignalQuality = (Gsm.ReceiveData[i] - 0x30)*10 + Gsm.ReceiveData[i+1] - 0x2f;    if(Gsm.SignalQuality == 99) Gsm.SignalQuality = 0;    Gsm.State = NONE;    ModemGsm.Signal.Control.RcvMessage = FALSE;   }   else if(GSM_CompareMessage(GSMResponse[mrQTONEDET])){   // API_PutEvent(INTERCOM_ELEMENT, AE_GSM_VOICE_CALL, 0, 0);    dwvTemp.byte.MB = 0;    dwvTemp.byte.UB = 0;    dwvTemp.byte.HB = 0x1b;    dwvTemp.byte.LB = 0x58;    dwvTemp.Val = dwvTemp.Val/1000 * TICK_RTCC_SECOND;    OsSocket.TickTask[RTX_TIMER1] = TickRtccGet();    OsSocket.TickInterval[RTX_TIMER1] = dwvTemp.Val;    OsSocket.status.semaphore.timer_1 = FALSE;    OsSocket.event.signal.timer_1 = TRUE;    OsSocket.event.signal.timer = TRUE;    BINARY_OUTPUT_On(0x02);    Gsm.State = NONE;    ModemGsm.Signal.Control.RcvMessage = FALSE;   } #if defined(GSM_GPRS)   else if((GSM_CompareMessage("+COPS: 0,") || GSM_CompareMessage("+COPS: 1,") || GSM_CompareMessage("+COPS: 2,") || GSM_CompareMessage("+COPS: 3,") || GSM_CompareMessage("+COPS: 4,")) && Gsm.ActualCommand == mcCOPS){    for(k = 1; k < MAX_GPRS_APN; k++){     if(GSM_CompareMessage(TableApnSettingGPRS[k].Operator)){      Gsm.Operator = k;    // Gprs.APN = k;      break;     }    }    if( k == MAX_GPRS_APN) Gsm.Operator = 0;    Gsm.State = NONE;    ModemGsm.Signal.Control.RcvMessage = FALSE;   }   else if((GSM_CompareMessage("+COPS: 0") || GSM_CompareMessage("+COPS: 1") || GSM_CompareMessage("+COPS: 2") || GSM_CompareMessage("+COPS: 3") || GSM_CompareMessage("+COPS: 4")) && Gsm.ActualCommand == mcCOPS){    Gsm.Operator = 0xff;    Gsm.State = NONE;    ModemGsm.Signal.Control.RcvMessage = FALSE;   } #endif   else if(GSM_CompareMessage(GSMResponse[mrOK])){ //prikaz bol uspesne vykonany    switch(Gsm.ActualCommand){     case mcCOPS:      ModemGsm.Signal.Control.CommandOK = TRUE;      ModemGsm.Signal.Control.RcvMessage = FALSE;      if(Gsm.Operator == 0xff) Gsm.State = GET_OPERATOR;      else{       Gsm.State = GET_CREDIT;       return 0;      }      break;     case mcCUSD:      ModemGsm.Signal.Control.CommandOK = TRUE;      Gsm.State = GET_OPERATOR;      ModemGsm.Signal.Control.RcvMessage = FALSE;      break;     case mcCSQ:      ModemGsm.Signal.Control.CommandOK = TRUE;      Gsm.State = SET_DTMF;      ModemGsm.Signal.Control.RcvMessage = FALSE;      break;     case mcQTONEDET:      ModemGsm.Signal.Control.CommandOK = TRUE;      Gsm.State = SET_CREDIT;      ModemGsm.Signal.Control.RcvMessage = FALSE;      break;     case mcCREG:      ModemGsm.Signal.Control.CommandOK = TRUE;      if(InternalRtccFlag.bits.ntp && ModemGsm.Semaphore.Control.enable_web) Gsm.State = SIGNAL;      else Gsm.State = NETWORK_TIME_SYNCH;      ModemGsm.Signal.Control.RcvMessage = FALSE;      break;     case mcQNITZ:      ModemGsm.Signal.Control.CommandOK = TRUE;      Gsm.State = SIGNAL;      ModemGsm.Signal.Control.RcvMessage = FALSE;      break;    }   }   else if(GSM_CompareMessage(GSMResponse[mrERROR])){    switch(Gsm.ActualCommand){ // case mcATD: // ModemGsm.Signal.Control.CommandOK = TRUE; // Gsm.State = NONE; // ModemGsm.Signal.Control.RcvMessage = FALSE; // return 0;     case mcCOPS:     case mcCUSD:      ModemGsm.Signal.Control.CommandOK = TRUE;      Gsm.State = GET_OPERATOR;      ModemGsm.Signal.Control.RcvMessage = FALSE;      break;     case mcCSQ:      ModemGsm.Signal.Control.CommandOK = TRUE;      Gsm.State = SET_DTMF;      ModemGsm.Signal.Control.RcvMessage = FALSE;      break;     case mcQTONEDET:      ModemGsm.Signal.Control.CommandOK = TRUE;      Gsm.State = SET_CREDIT;      ModemGsm.Signal.Control.RcvMessage = FALSE;      break;     case mcCREG:      ModemGsm.Signal.Control.CommandOK = TRUE;      if(InternalRtccFlag.bits.ntp && ModemGsm.Semaphore.Control.enable_web) Gsm.State = SIGNAL;      else Gsm.State = NETWORK_TIME_SYNCH;      ModemGsm.Signal.Control.RcvMessage = FALSE;      break;     case mcQNITZ:      ModemGsm.Signal.Control.CommandOK = TRUE;      Gsm.State = SIGNAL;      ModemGsm.Signal.Control.RcvMessage = FALSE;      break;    }   }  }  switch(Gsm.State){   case REG_NETWORK:    strcpy((char*)Gsm.CommandData, GSMCommand[mcCREG]);    Gsm.ActualCommand = mcCREG;    Gsm.ProcessState = NONE;    ModemGsm.Signal.Control.SendCommand = TRUE;    Gsm.State = NONE;    break;   case NETWORK_TIME_SYNCH:    strcpy((char*)Gsm.CommandData, GSMCommand[mcQNITZ]);    Gsm.ActualCommand = mcQNITZ;    Gsm.ProcessState = NONE;    ModemGsm.Signal.Control.SendCommand = TRUE;    Gsm.State = NONE;    break;   case SIGNAL:    strcpy((char*)Gsm.CommandData, GSMCommand[mcCSQ]);    Gsm.ActualCommand = mcCSQ;    ModemGsm.Signal.Control.SendCommand = TRUE;    Gsm.State = NONE;    break;   case SET_DTMF:    strcpy((char*)Gsm.CommandData, GSMCommand[mcQTONEDET]);    Gsm.ActualCommand = mcQTONEDET;    ModemGsm.Signal.Control.SendCommand = TRUE;    Gsm.State = NONE;    break;   case SET_CREDIT:    strcpy((char*)Gsm.CommandData, GSMCommand[mcCUSD]);    Gsm.ActualCommand = mcCUSD;    ModemGsm.Signal.Control.SendCommand = TRUE;    Gsm.State = NONE;    break;   case GET_OPERATOR:    strcpy((char*)Gsm.CommandData, GSMCommand[mcCOPS]);    Gsm.ActualCommand = mcCOPS;  // Gsm.Operator = 0xff;  // Gprs.APN = 0xff;    ModemGsm.Signal.Control.SendCommand = TRUE;    Gsm.State = NONE;    break;  }  return 1; }