BOOL GSM_ReadMessage(far char *_GsmReceiveData)

BOOL GSM_ReadMessage(far char *_GsmReceiveData)
{
 WORD wTemp;
 BYTE data;
 static WORD indexRx = 0;

 while((wTemp = UART_GetData(MODEM, &data, 1)) != 0){   if((data == 0xff || data == 0) && indexRx == 0) return FALSE;    _GsmReceiveData[indexRx++] = data; //#if defined(GPRS_HTTP) // if(indexRx >= (MAX_RECEIVE_DATA_GSM - 1)){ // ModemGsm.Signal.Control.RcvMessage = TRUE; // _GsmReceiveData[indexRx] = '\0'; // UART_PutData(GSM_DEBUG, Gsm.ReceiveData, strlen((const char*)Gsm.ReceiveData)); // indexRx = 0; // return TRUE; // } //#endif #if defined(GSM_SMS)   if(ModemGsm.Signal.Control.InsertSms && data == '>'){    ModemGsm.Signal.Control.InsertSms = FALSE;    ModemGsm.Signal.Control.SendSms = FALSE;    _GsmReceiveData[indexRx] = '\0';    UART_PutData(GSM_DEBUG, Gsm.ReceiveData, strlen((const char*)Gsm.ReceiveData));    indexRx = 0; #if defined(EXTENDED_SMS)    UART_PutData(MODEM, Sms.TxBuff[Sms.IndexWriteRx].Message, strlen((const char*)Sms.TxBuff[Sms.IndexWriteRx].Message)); #if defined(DEBUG)    UART_PutData(GSM_DEBUG, Sms.TxBuff[Sms.IndexWriteRx].Message, strlen((const char*)Sms.TxBuff[Sms.IndexWriteRx].Message)); #endif    Sms.IndexWriteRx++;    if(Sms.IndexWriteRx >= MAX_SMS_BUFF_TX_DATA) Sms.IndexWriteRx = 0; #else    UART_PutData(MODEM, Sms.RxBuff[0].Message, strlen((const char*)Sms.RxBuff[0].Message)); #if defined(DEBUG)    UART_PutData(GSM_DEBUG, Sms.RxBuff[0].Message, strlen((const char*)Sms.RxBuff[0].Message)); #endif #endif    return TRUE;   } #endif   if('\r' == data && indexRx != 1 && !ModemGsm.Signal.Control.Results) break;   else if('\r' == data && indexRx == 1 && !ModemGsm.Signal.Control.Results) ModemGsm.Signal.Control.Results = TRUE;   if('\n' == data && ModemGsm.Signal.Control.Results && indexRx != 2){     ModemGsm.Signal.Control.Results = FALSE;     break;   }   if(indexRx >= (MAX_RECEIVE_DATA_GSM - 1)){    indexRx--;   }  }  if(wTemp == 0) return FALSE;  _GsmReceiveData[indexRx] = '\0';  if(GSM_CompareMessage(GSMResponse[mrCMGR])){   while((wTemp = UART_GetData(MODEM, &data, 1)) != 0){     _GsmReceiveData[indexRx++] = data;    if('\n' == data) break;    if(indexRx >= (MAX_RECEIVE_DATA_GSM - 1)){     indexRx = 200;    }   }   if(wTemp == 0) return FALSE;   ModemGsm.Signal.Control.RcvMessage = TRUE;   ModemGsm.Signal.Control.RcvAnswerSms = TRUE;  }  _GsmReceiveData[indexRx] = '\0';  if(GSM_CompareMessage(GSMResponse[mrCMTI])){   ModemGsm.Signal.Control.RcvSms = TRUE;  }  else if(GSM_CompareMessage(GSMResponse[mrCDSI])){   ModemGsm.Signal.Control.RcvDelivery = TRUE;  }  else{   ModemGsm.Signal.Control.RcvMessage = TRUE;  }  if(!GSM_CompareMessage("AT+QSMTPPWD"))   UART_PutData(GSM_DEBUG, Gsm.ReceiveData, strlen((const char*)Gsm.ReceiveData));  indexRx = 0;  return TRUE; }