WORD GSM_Process(void)

WORD GSM_Process(void)
{
 WORD_VAL	wvTemp, wvTemp2;
 WORD i;
 BYTE type_message, data;
 char *p;
 char *end;

 if(!ModemGsm.Signal.Control.ModemReady && (TickGetDiff(TickGet(), OsSocket.TickTask[RTX_MODEM]) >= (8*TICKS_PER_SECOND))){   ModemGsm.Signal.Control.ModemReady = TRUE;  }  if(ModemGsm.Signal.Control.ModemReady){   if(!GSM_SetPin((char*)"0000")){ #if defined(GSM_CALL)    Gsm.State = SET_CALL;   }   if(!ModemGsm.Signal.Control.Process && Call.Flag){    Call.Flag = 0;    Gsm.State = TERMINATE_CALL;   }   i = GSM_Call();   if(i == 3) return ERR_OK;   else if(i == 0) Gsm.State = SET_SMS;   else if(i == 2){ #if defined(GPRS_HTTP)    if(ModemGsm.Semaphore.Control.enable_web || ModemGsm.Semaphore.Control.enable_email) Gsm.State = TCP_DISABLE_MUX;    else if(!ModemGsm.Semaphore.Control.enable_web && !ModemGsm.Semaphore.Control.enable_email){     Gsm.State = NONE;     ModemGsm.Signal.Control.Process = FALSE;    } #else    Gsm.State = NONE;    ModemGsm.Signal.Control.Process = FALSE; #endif   } #else #if defined(GSM_SMS)    Gsm.State = SET_SMS; #else    Gsm.State = SIGNAL; #endif   } #endif #if defined(GSM_SMS)   if(!GSM_SmsConfigure()) Gsm.State = REG_NETWORK;   if(!GSM_SmsReceive()) Gsm.State = NONE;   if(!GSM_SmsSend()) Gsm.State = NONE; #endif   if(!GSM_RegNetwork()){ #if defined(GSM_CALL)    DelayMs(250);    Gsm.State = GET_CREDIT;   }   if(GSM_Call() == 3) return ERR_OK; #else #if defined(GPRS_HTTP)   if(ModemGsm.Semaphore.Control.enable_web || ModemGsm.Semaphore.Control.enable_email) Gsm.State = TCP_DISABLE_MUX;   else if(!ModemGsm.Semaphore.Control.enable_web && !ModemGsm.Semaphore.Control.enable_email){    Gsm.State = NONE;    ModemGsm.Signal.Control.Process = FALSE;   } #else   Gsm.State = NONE;   ModemGsm.Signal.Control.Process = FALSE; #endif   } #endif #if defined(GSM_GPRS) // if(!GSM_GprsGetAPN()){ // Gsm.State = TCP_DISABLE_MUX; // }   if(!GSM_AttachGprs((char*)"internet", 0, 0)){    GSM_AppInitGprs(); #if defined(GPRS_SMTP)    if(ModemGsm.Semaphore.Control.enable_email) Gsm.State = SMTP_SERVER; //GPRS_ACTIVATE;    else{     ModemGsm.Signal.Control.Process = FALSE;     Gsm.State = NONE;    } #else    ModemGsm.Signal.Control.Process = FALSE;    Gsm.State = NONE; #endif   }   i = GSM_ActivateGprs();   if(i == 2){    Gsm.State = TCP_SET_APN;    ModemGsm.Signal.Control.Process = TRUE;   }   else if(i == 0){    Gsm.State = NONE;    ModemGsm.Signal.Control.Process = FALSE;   } #if defined(GPRS_HTTP)   if(!GSM_HttpRead(Gprs.Message)){    Gsm.State = NONE;    GSM_AppInitHttp();   } #endif   if(!GSM_DeactivateGprs()) Gsm.State = NONE; #endif #if defined(GPRS_SMTP)   if(!GSM_SmtpConfigure()){    ModemGsm.Signal.Control.Process = FALSE;    Gsm.State = NONE;   }   if(!GSM_SmtpSend(0, 0, Gprs.Message)) Gsm.State = NONE; #endif   if(ModemGsm.Signal.Control.RcvMessage && GSM_CompareMessage(GSMResponse[mrERROR])){    ModemGsm.Signal.Control.CommandOK = TRUE;    ModemGsm.Signal.Control.SmsProcess = FALSE;    ModemGsm.Signal.Control.Process = FALSE;   }   ModemGsm.Signal.Control.RcvMessage = FALSE; #if defined(GPRS_HTTP)   if(ModemGsm.Semaphore.Control.SendHttp && ModemGsm.Semaphore.Control.GprsRegister && !ModemGsm.Semaphore.Control.GprsAttach && !ModemGsm.Signal.Control.Process && ModemGsm.Signal.Control.RegOk){    Gsm.State = GPRS_ACTIVATE;    ModemGsm.Signal.Control.Process = TRUE;   }   else if(!ModemGsm.Semaphore.Control.GprsRegister && !ModemGsm.Semaphore.Control.GprsAttach && ModemGsm.Semaphore.Control.enable_web && !ModemGsm.Signal.Control.Process && ModemGsm.Signal.Control.RegOk && Gsm.Operator != 0xff){    Gsm.State = TCP_DISABLE_MUX;    ModemGsm.Signal.Control.Process = TRUE;   } #endif  }  GSM_InitReady();  if(!ModemGsm.Signal.Control.RcvMessage && !ModemGsm.Signal.Control.RcvDelivery && !ModemGsm.Signal.Control.RcvSms){ // precitanie odpovede alebo udalosti z modemu   GSM_ReadMessage(Gsm.ReceiveData);  } #if defined(GSM_SMS) #if defined(GSM_SMS_LONG)  if(ModemGsm.Signal.Control.RegOk && !ModemGsm.Signal.Control.Process && !ModemGsm.Signal.Control.SmsProcess && (TickGetDiff(TickGet(), OsSocket.TickTask[RTX_LONG_SMS]) >= (10*TICKS_PER_SECOND))){ #else  if(ModemGsm.Signal.Control.RegOk && !ModemGsm.Signal.Control.Process && !ModemGsm.Signal.Control.SmsProcess){ #endif   for(i=0; i<MAX_RECEIVE_SMS; i++){    if(Sms.NumRcvSms[i] == REC_SMS){     ModemGsm.Signal.Control.SmsProcess = TRUE;     ModemGsm.Signal.Control.Process = TRUE;     Sms.State = READ_SMS;     Sms.IndexReadRx = i;     break;    }   }  } #endif  if(ModemGsm.Signal.Control.CommandOK){ //ak bol predosly prikaz uspesne ukonceny spracuje dalsi #if defined(GSM_SMS) #if defined(EXTENDED_SMS)       if(Sms.IndexWriteTx != Sms.IndexWriteRx && !ModemGsm.Signal.Control.Process){          ModemGsm.Signal.Control.SendCommand = TRUE;          ModemGsm.Signal.Control.SendSms = TRUE;          ModemGsm.Signal.Control.Process = TRUE;       }       else if(Sms.IndexWriteTx == Sms.IndexWriteRx && ModemGsm.Semaphore.Control.alarm_call && !ModemGsm.Signal.Control.Process){          if(Call.IndexWrite != Call.IndexRead){             ModemGsm.Signal.Control.Process = TRUE;             Gsm.State = VOICE_CALL;             Call.IndexRead++;             if(Call.IndexRead == MAX_CALL_BUFFER) Call.IndexRead = 0;          }          else ModemGsm.Semaphore.Control.alarm_call = FALSE;    // ModemGsm.Signal.Control.SendCommand = TRUE;    // strcpy(Gsm.CommandData,GSMCommand[mcCMGS]);    // Gsm.ActualCommand = mcCMGS;       } #else       if(ModemGsm.Semaphore.Control.alarm_call && !ModemGsm.Signal.Control.Process){          if(Call.IndexWrite != Call.IndexRead){             ModemGsm.Signal.Control.Process = TRUE;             Gsm.State = VOICE_CALL;             Call.IndexRead++;             if(Call.IndexRead == MAX_CALL_BUFFER) Call.IndexRead = 0;          }          else ModemGsm.Semaphore.Control.alarm_call = FALSE;       } #endif #endif   if(ModemGsm.Signal.Control.SendCommand){    ModemGsm.Signal.Control.CommandOK = FALSE; #if defined(GSM_SMS)    if( ModemGsm.Signal.Control.SendSms){ #if defined(EXTENDED_SMS)     strcpy(Gsm.CommandData,GSMCommand[mcCMGS]);     Gsm.ActualCommand = mcCMGS;     strcat(Gsm.CommandData, "\"");     SmsTxBuffControll.Write = strlen((const char*)Sms.TxBuff[Sms.IndexWriteRx].Tel) + 1;     SmsTxBuffControll.Read = 0;     CYCLIC_BUFFER_Read( bTemp, strlen((const char*)Sms.TxBuff[Sms.IndexWriteRx].Tel) + 1, &SmsTxBuffControll, Sms.TxBuff[Sms.IndexWriteRx].Tel, GSM_SMS_TEL_BUFFER );     strcat(Gsm.CommandData, bTemp);     strcat(Gsm.CommandData, "\"\r"); #endif     ModemGsm.Signal.Control.InsertSms = TRUE;    } #endif    ModemGsm.Signal.Control.SendCommand = FALSE;    UART_PutData(MODEM, (char*)Gsm.CommandData, strlen((char*)Gsm.CommandData)); #if defined(DEBUG)    UART_PutData(GSM_DEBUG, Gsm.CommandData, strlen(Gsm.CommandData)); #endif   } #if defined(GSM_GPRS) #if defined(GPRS_HTTP) && defined(GPRS_SMTP)   else if((ModemGsm.Semaphore.Control.SendHttp || ModemGsm.Semaphore.Control.SendSmtp) && ModemGsm.Semaphore.Control.GprsAttach && ModemGsm.Signal.Control.RegOk && !ModemGsm.Signal.Control.SendSms && !ModemGsm.Signal.Control.Process){    ModemGsm.Signal.Control.Process = TRUE;    GprsTxBuffControll.Read = Gprs.IndexReadTx;    GprsTxBuffControll.Write = Gprs.IndexWriteTx;    CYCLIC_BUFFER_Read( bTemp, 3, &GprsTxBuffControll, Gprs.TxBuff, MAX_GPRS_BUFFER );    type_message = bTemp[0];    wvTemp.byte.HB = bTemp[1];    wvTemp.byte.LB = bTemp[2];    wvTemp.Val -= 3;    CYCLIC_BUFFER_Read( Gprs.Message, wvTemp.Val, &GprsTxBuffControll, Gprs.TxBuff, MAX_GPRS_BUFFER );    if((i = CYCLIC_BUFFER_GetFreeSpace( &GprsTxBuffControll, MAX_GPRS_BUFFER )) == (MAX_GPRS_BUFFER - 1)){     ModemGsm.Semaphore.Control.SendHttp = FALSE;     ModemGsm.Semaphore.Control.SendSmtp = FALSE;    }    Gprs.IndexReadTx = GprsTxBuffControll.Read;    Gprs.IndexWriteTx = GprsTxBuffControll.Write;    for(i=0; i<MAX_COMMAND_DATA_GSM; i++) Gsm.CommandData[i] = Gprs.Message[i];    if((p = (char*)strstr((const char*)Gsm.CommandData, "answer")) != NULL){ #if defined(SENSOR_HISTORY)     if(strtol (p + 7, &end, 0) == AC_SENSOR_HISTORY_GET_VALUE){      SensorFlag.bits.DataHistory = TRUE; // SensorFlag.bits.DataHistorySend = FALSE; // SensorFlag.bits.DataHistorySend2 = FALSE; // SensorFlag.bits.DataHistorySend3 = FALSE;     } #endif    }    if(type_message == MESSAGE_TYPE_HTTP){     Gsm.State = HTTP_URL;    }    else if(type_message == MESSAGE_TYPE_SMTP){     Gsm.State = SMTP_RECIPIENT;    }   } #elif !defined(GPRS_HTTP) && defined(GPRS_SMTP)   else if(ModemGsm.Semaphore.Control.SendSmtp && ModemGsm.Semaphore.Control.GprsAttach && ModemGsm.Signal.Control.RegOk && !ModemGsm.Signal.Control.SendSms && !ModemGsm.Signal.Control.Process){    ModemGsm.Signal.Control.Process = TRUE;    GprsTxBuffControll.Read = Gprs.IndexReadTx;    GprsTxBuffControll.Write = Gprs.IndexWriteTx;    CYCLIC_BUFFER_Read( bTemp, 3, &GprsTxBuffControll, Gprs.TxBuff, MAX_GPRS_BUFFER );    type_message = bTemp[0];    wvTemp.byte.HB = bTemp[1];    wvTemp.byte.LB = bTemp[2];    wvTemp.Val -= 3;    CYCLIC_BUFFER_Read( Gprs.Message, wvTemp.Val, &GprsTxBuffControll, Gprs.TxBuff, MAX_GPRS_BUFFER );    if(CYCLIC_BUFFER_GetFreeSpace( &GprsTxBuffControll, MAX_GPRS_BUFFER ) == (MAX_GPRS_BUFFER - 1)){     ModemGsm.Semaphore.Control.SendSmtp = FALSE;    }    Gprs.IndexReadTx = GprsTxBuffControll.Read;    Gprs.IndexWriteTx = GprsTxBuffControll.Write;    for(i=0; i<MAX_COMMAND_DATA_GSM; i++) Gsm.CommandData[i] = Gprs.Message[i];    if((p = (char*)strstr((const char*)Gsm.CommandData, "answer")) != NULL){ #if defined(SENSOR_HISTORY)     if(strtol (p + 7, &end, 0) == AC_SENSOR_HISTORY_GET_VALUE){      SensorFlag.bits.DataHistory = TRUE; // SensorFlag.bits.DataHistorySend = FALSE; // SensorFlag.bits.DataHistorySend2 = FALSE; // SensorFlag.bits.DataHistorySend3 = FALSE;     } #endif    }    if(type_message == MESSAGE_TYPE_SMTP){     Gsm.State = SMTP_RECIPIENT;    }   } #elif defined(GPRS_HTTP) && !defined(GPRS_SMTP)   else if(ModemGsm.Semaphore.Control.SendHttp && ModemGsm.Semaphore.Control.GprsAttach && ModemGsm.Signal.Control.RegOk && !ModemGsm.Signal.Control.SendSms && !ModemGsm.Signal.Control.Process){    ModemGsm.Signal.Control.Process = TRUE;    GprsTxBuffControll.Read = Gprs.IndexReadTx;    GprsTxBuffControll.Write = Gprs.IndexWriteTx;    CYCLIC_BUFFER_Read( bTemp, 3, &GprsTxBuffControll, Gprs.TxBuff, MAX_GPRS_BUFFER );    type_message = bTemp[0];    wvTemp.byte.HB = bTemp[1];    wvTemp.byte.LB = bTemp[2];    wvTemp.Val -= 3;    CYCLIC_BUFFER_Read( Gprs.Message, wvTemp.Val, &GprsTxBuffControll, Gprs.TxBuff, MAX_GPRS_BUFFER );    if(CYCLIC_BUFFER_GetFreeSpace( &GprsTxBuffControll, MAX_GPRS_BUFFER ) == (MAX_GPRS_BUFFER - 1)){     ModemGsm.Semaphore.Control.SendHttp = FALSE;    }    Gprs.IndexReadTx = GprsTxBuffControll.Read;    Gprs.IndexWriteTx = GprsTxBuffControll.Write;    for(i=0; i<MAX_COMMAND_DATA_GSM; i++) Gsm.CommandData[i] = Gprs.Message[i];    if((p = (char*)strstr((const char*)Gsm.CommandData, "answer")) != NULL){ #if defined(SENSOR_HISTORY)     if(strtol (p + 7, &end, 0) == AC_SENSOR_HISTORY_GET_VALUE){      SensorFlag.bits.DataHistory = TRUE; // SensorFlag.bits.DataHistorySend = FALSE; // SensorFlag.bits.DataHistorySend2 = FALSE; // SensorFlag.bits.DataHistorySend3 = FALSE;     } #endif    }    if(type_message == MESSAGE_TYPE_HTTP){     Gsm.State = HTTP_URL;    }   } #endif #endif //GSM_GPRS  }  return ERR_OK; }