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