WORD GSM_SmsReceive(void)

WORD GSM_SmsReceive(void)
{
 WORD i, k;
 static BYTE SmsGetFlag = 0;
 if(ModemGsm.Signal.Control.RcvSms){
  ModemGsm.Signal.Control.RcvSms = FALSE;
  for(i=0; i<strlen((char*)Gsm.ReceiveData); i++){
   if(Gsm.ReceiveData[i] == ',')	break;
  }
  if(Gsm.ReceiveData[i+2] == '\r'){
   bTemp[0] = Gsm.ReceiveData[i+1];
   bTemp[1] = '\0';
  }
  else{
   bTemp[0] = Gsm.ReceiveData[i+1];
   bTemp[1] = Gsm.ReceiveData[i+2];
   bTemp[2] = '\0';
  }
  i = atoi(bTemp);
  Sms.NumRcvSms[i] = Sms.NumRcvSms[i] | REC_SMS;
#if defined(GSM_SMS_LONG)
  OsSocket.TickTask[RTX_LONG_SMS] = TickGet();
#endif
 }
 if(ModemGsm.Signal.Control.RcvDelivery){
  ModemGsm.Signal.Control.RcvDelivery = FALSE; 
 }  if(ModemGsm.Signal.Control.RcvMessage){   if(GSM_CompareMessage(GSMResponse[mrCMGR])){    Gsm.ActualCommand = mcCMGR;    Sms.State = PARSE_MESSAGE;    ModemGsm.Signal.Control.RcvMessage = FALSE;   }   else if(GSM_CompareMessage(GSMResponse[mrOK])){    switch(Gsm.ActualCommand){     case mcCMGR:      Gsm.ActualCommand = 0;      ModemGsm.Signal.Control.CommandOK = TRUE;      if(ModemGsm.Signal.Control.RcvAnswerSms) ModemGsm.Signal.Control.RcvAnswerSms = FALSE;      else Sms.State = DELETE_MESSAGE;      ModemGsm.Signal.Control.RcvMessage = FALSE;      break;     case mcCMGD:      Gsm.ActualCommand = 0;      ModemGsm.Signal.Control.CommandOK = TRUE;      Sms.NumRcvSms[Sms.IndexReadRx] = Sms.NumRcvSms[Sms.IndexReadRx] & ~DEL_SMS;      Sms.NumRcvSms[Sms.IndexReadRx] = Sms.NumRcvSms[Sms.IndexReadRx] & ~REC_SMS;      ModemGsm.Signal.Control.SmsProcess = FALSE;      ModemGsm.Signal.Control.Process = FALSE;      SmsGetFlag = 0;      ModemGsm.Signal.Control.RcvMessage = FALSE;      break;    }   }   else if(GSM_CompareMessage(GSMResponse[mrERROR])){ //chyba    switch(Gsm.ActualCommand){     case mcCMGR:      Gsm.ActualCommand = 0;      ModemGsm.Signal.Control.CommandOK = TRUE;      ModemGsm.Signal.Control.RcvAnswerSms = FALSE;      Sms.State = DELETE_MESSAGE;      ModemGsm.Signal.Control.RcvMessage = FALSE;      break;     case mcCMGD:      Gsm.ActualCommand = 0;      ModemGsm.Signal.Control.CommandOK = TRUE;      ModemGsm.Signal.Control.RcvMessage = FALSE;      SmsGetFlag++;      if(SmsGetFlag == 3){       Sms.NumRcvSms[Sms.IndexReadRx] = Sms.NumRcvSms[Sms.IndexReadRx] & ~DEL_SMS;       Sms.NumRcvSms[Sms.IndexReadRx] = Sms.NumRcvSms[Sms.IndexReadRx] & ~REC_SMS;       ModemGsm.Signal.Control.SmsProcess = FALSE;       ModemGsm.Signal.Control.Process = FALSE;       SmsGetFlag = 0;      }      else Sms.State = DELETE_MESSAGE;      ModemGsm.Signal.Control.RcvMessage = FALSE;      break;    }   }  }  switch(Sms.State){   case READ_SMS:    strcpy((char*)Gsm.CommandData, GSMCommand[mcCMGR]);    ui_to_a(Sms.IndexReadRx, bTemp);    strcat((char*)Gsm.CommandData, bTemp);    strcat((char*)Gsm.CommandData, "\r");    Gsm.ActualCommand = mcCMGR;    ModemGsm.Signal.Control.SendCommand = TRUE;    Sms.State = NONE;    break;   case PARSE_MESSAGE:    for(i=23, k=0; i<strlen((char*)Gsm.ReceiveData); i++, k++){     if(Gsm.ReceiveData[i] == '"'){      Sms.RxBuff[0].Tel[k] = '\0';      break;     }     Sms.RxBuff[0].Tel[k] = Gsm.ReceiveData[i];    }    for(; i<strlen((char*)Gsm.ReceiveData); i++){ // datum dorucenia     if(Gsm.ReceiveData[i] == '\n'){      i++;      break;     }    }    for(k=0; i<strlen((char*)Gsm.ReceiveData); i++, k++){ // text SMS     if(Gsm.ReceiveData[i] == '\r' || k == (MAX_SMS_DATA - 1)){      Sms.RxBuff[0].Message[k] = '\0';      break;     }     Sms.RxBuff[0].Message[k] = Gsm.ReceiveData[i];    }    Sms.NumRcvSms[Sms.IndexReadRx] = Sms.NumRcvSms[Sms.IndexReadRx] | DEL_SMS;    Sms.State = EXECUTE_MESSAGE;    break;   case EXECUTE_MESSAGE:    i = GSM_SendSmsToData((GSM*)&Gsm);    if(i == ERR_GSM_SendSmsToData_PACKET){     break;    }    else if(i == ERR_GSM_SendSmsToData_TEL || i == ERR_GSM_SendSmsToData_FORMAT || i == ERR_GSM_SendSmsToData_ACCESS){     Sms.State = DELETE_MESSAGE;     break;    }    Sms.State = NONE;    break;   case DELETE_MESSAGE:    strcpy((char*)Gsm.CommandData, GSMCommand[mcCMGD]);    ui_to_a(Sms.IndexReadRx, bTemp);    strcat((char*)Gsm.CommandData, bTemp);    strcat((char*)Gsm.CommandData, "\r");    Gsm.ActualCommand = mcCMGD;    ModemGsm.Signal.Control.SendCommand = TRUE;    Sms.State = NONE;    break;  }  return 1; }