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