WORD GSM_HttpRead(far char * URL)
{
WORD wTemp;
static BYTE HttpGetFlag = 0;
static BYTE HttpUrlFlag = 0;
static BYTE HttpReadFlag = 0;
static BYTE HttpElement = 255;
static BYTE update = 0;
char *p;
BYTE i, buf[4];
char PN[25];
if(ModemGsm.Signal.Control.RcvMessage){
if(GSM_CompareMessage("CONNECT") && Gsm.ActualCommand == mcQHTTPURL){
UART_PutData(MODEM, URL, strlen((const char*)URL));
UART_PutData(GSM_DEBUG, URL, strlen((const char*)URL));
#if defined(SENSOR_HISTORY)
if(SensorFlag.bits.DataHistory){
if(strstr((const char*)URL, ".00.") != NULL) HttpElement = 0;
else if(strstr((const char*)URL, ".1E.") != NULL) HttpElement = 30;
else if(strstr((const char*)URL, ".1F.") != NULL) HttpElement = 31;
}
#endif
Gsm.State = NONE;
ModemGsm.Signal.Control.RcvMessage = FALSE;
}
else if(GSM_CompareMessage("ANSWER OK") && Gsm.ActualCommand == mcQHTTPREAD){
// precitaj odpoved, dopisat kod
Gsm.State = NONE;
ModemGsm.Signal.Control.RcvMessage = FALSE;
}
else if(GSM_CompareMessage("NORMAL POWER DOWN") && Gsm.ActualCommand == mcQPOWD){
UM_G_LedOn(0);
DelayMs(3000);
UM_G_LedOn(1);
DelayMs(1000);
UM_G_LedOn(0);
DelayMs(1000);
#if defined(UART_5)
if(bEPPflags.bits.usb_connect) disconnect_USB();
#endif
UM_G_LedOn(1);
DelayMs(1000);
UM_G_LedOn(0);
DelayMs(1000);
UM_G_LedOn(1);
DelayMs(1000);
Reset();
}
else if(GSM_CompareMessage("flash") && Gsm.ActualCommand == mcQHTTPREAD){
Gsm.State = NONE;
ModemGsm.Signal.Control.RcvMessage = FALSE;
VERSION_GetUDN(PN, 0);
if((p = (char*)strchr(PN,'.')) != NULL) (*p) = 0;
VERSION_GetSwVersion(bTemp);
if(!GSM_CompareMessage(bTemp) && GSM_CompareMessage(PN)){
bTemp[6] = 0;
if(OsSocket.status.semaphore.update_save && GSM_CompareMessage(bTemp)){
if(CORE_SaveBackup()){
#if defined(FIREBOX)
INTERNAL_EEPROM_WriteByte( 0x3fe, 0x82 );
#else
INTERNAL_EEPROM_WriteByte( 0x3fe, 0x81 );
#endif
goto _UPDATE_PROCESS;
}
}
else{
#if defined(FIREBOX)
INTERNAL_EEPROM_WriteByte( 0x3fe, 0x42 );
#else
INTERNAL_EEPROM_WriteByte( 0x3fe, 0x41 );
#endif _UPDATE_PROCESS:
wTemp = 0x3c8;
for(i=0; i < strlen((const char*)TableApnSettingGPRS[Gsm.Operator].APN); i++){
if((wTemp + (WORD)i) == 0x3fd) goto _END_CONFIGURE_APN;
INTERNAL_EEPROM_WriteByte( wTemp + (WORD)i, TableApnSettingGPRS[Gsm.Operator].APN[i] );
}
INTERNAL_EEPROM_WriteByte( wTemp + (WORD)i, 0 );
INTERNAL_EEPROM_WriteByte( wTemp + (WORD)i + 1, 0 );
wTemp += (strlen((const char*)TableApnSettingGPRS[Gsm.Operator].APN) + 1);
for(i=0; i < strlen((const char*)TableApnSettingGPRS[Gsm.Operator].Name); i++){
if((wTemp + (WORD)i) == 0x3fd) goto _END_CONFIGURE_APN;
INTERNAL_EEPROM_WriteByte( wTemp + (WORD)i, TableApnSettingGPRS[Gsm.Operator].Name[i] );
}
INTERNAL_EEPROM_WriteByte( wTemp + (WORD)i, 0 );
INTERNAL_EEPROM_WriteByte( wTemp + (WORD)i + 1, 0 );
wTemp += (strlen((const char*)TableApnSettingGPRS[Gsm.Operator].Name) + 1);
for(i=0; i < strlen((const char*)TableApnSettingGPRS[Gsm.Operator].Password); i++){
if((wTemp + (WORD)i) == 0x3fd) break;
INTERNAL_EEPROM_WriteByte( wTemp + (WORD)i, TableApnSettingGPRS[Gsm.Operator].Password[i] );
}
_END_CONFIGURE_APN:
INTERNAL_EEPROM_WriteByte( wTemp + (WORD)i, 0 );
#if defined(FIREBOX) && !defined(INTERCOM)
EA_DOGM132X_5_ClrDisplay();
strcpy((char*)dog_chars_buffer, "UPDATE ");
strcat((char*)dog_chars_buffer, "FIRMWARE");
AppFlag.bits.actualy_display = TRUE;
dog_index = 0;
#if defined(BACK_LIGHT_DISPLAY)
EA_DOGM132X_5_BackLightDisplay( 1 );
#endif
#endif
#if defined(DISPLAY)
EA_DOGM132X_5_ClrDisplay();
strcpy((char*)dog_chars_buffer, "UPDATE ");
strcat((char*)dog_chars_buffer, "FIRMWARE");
AppFlag.bits.actualy_display = TRUE;
dog_index = 0;
#if defined(BACK_LIGHT_DISPLAY)
EA_DOGM132X_5_BackLightDisplay( 1 );
#endif
#endif
#if defined(LED_DISPLAY)
buf[0] = 'U';
buf[1] = 'P';
buf[2] = 'D';
buf[3] = 'F';
I2C_SEG8B4A036A_SetSleep(0, SET_ADDR, 0);
I2C_SEG8B4A036A_Print(0, SET_ADDR, buf);
#if defined(FILIP)
DelayMs(1000);
POWER_MANAGEMENT_Buzzer(0);
DelayMs(500);
POWER_MANAGEMENT_Buzzer(1);
DelayMs(100);
POWER_MANAGEMENT_Buzzer(0);
DelayMs(500);
POWER_MANAGEMENT_Buzzer(1);
DelayMs(100);
POWER_MANAGEMENT_Buzzer(0);
DelayMs(500);
POWER_MANAGEMENT_Buzzer(1);
DelayMs(100);
POWER_MANAGEMENT_Buzzer(0);
DelayMs(500);
#else
DelayMs(3000);
#endif
#endif
INTERNAL_EEPROM_WriteByte( 0x3ff, 0x55 );
update = 1;
}
}
}
else if(GSM_CompareMessage(GSMResponse[mrOK])){ //prikaz bol uspesne vykonany
switch(Gsm.ActualCommand){
case mcQHTTPURL:
ModemGsm.Signal.Control.CommandOK = TRUE;
Gsm.State = HTTP_GET;
HttpUrlFlag = 0;
ModemGsm.Signal.Control.RcvMessage = FALSE;
break;
case mcQHTTPGET:
ModemGsm.Signal.Control.CommandOK = TRUE;
Gsm.State = HTTP_READ;
HttpGetFlag = 0;
ModemGsm.Signal.Control.RcvMessage = FALSE;
break;
case mcQHTTPREAD:
ModemGsm.Signal.Control.CommandOK = TRUE;
HttpReadFlag = 0;
if(update){
Gsm.State = MODEM_DISCONNECT;
update = 0;
goto _MODEM_DISCONNECT;
}
else Gsm.State = NONE;
ModemGsm.Signal.Control.Process = FALSE;
#if defined(SENSOR_HISTORY)
if(SensorFlag.bits.DataHistory){
if(HttpElement == 0)
SensorFlag.bits.DataHistorySend = TRUE;
else if(HttpElement == 30)
SensorFlag.bits.DataHistorySend2 = TRUE;
else if(HttpElement == 31)
SensorFlag.bits.DataHistorySend3 = TRUE;
}
#endif
ModemGsm.Signal.Control.RcvMessage = FALSE;
return 0;
}
}
else if(GSM_CompareMessage(GSMResponse[mrERROR])){
switch(Gsm.ActualCommand){
case mcQHTTPURL:
case mcQHTTPREAD:
case mcQHTTPGET:
ModemGsm.Semaphore.Control.watchdog = FALSE;
ModemGsm.Signal.Control.CommandOK = TRUE;
Gsm.State = NONE;
if(Gsm.ActualCommand == mcQHTTPURL) HttpUrlFlag++;
else if(Gsm.ActualCommand == mcQHTTPREAD) HttpReadFlag++;
else if(Gsm.ActualCommand == mcQHTTPGET) HttpGetFlag++;
if(HttpGetFlag == 3 || HttpUrlFlag == 3 || HttpReadFlag == 3 || !ModemGsm.Semaphore.Control.GprsAttach){
ModemGsm.Signal.Control.Process = FALSE;
#if defined(SENSOR_HISTORY)
if(SensorFlag.bits.DataHistory){
if(HttpElement == 0)
SensorFlag.bits.DataHistorySend = FALSE;
else if(HttpElement == 30)
SensorFlag.bits.DataHistorySend2 = FALSE;
else if(HttpElement == 31)
SensorFlag.bits.DataHistorySend3 = FALSE;
}
#endif
HttpGetFlag = 0; HttpUrlFlag = 0; HttpReadFlag = 0;
ModemGsm.Signal.Control.RcvMessage = FALSE;
return 0;
}
else{
Gsm.State = HTTP_URL;
}
ModemGsm.Signal.Control.RcvMessage = FALSE;
break;
}
}
}
_MODEM_DISCONNECT:
switch(Gsm.State){
case HTTP_URL:
Gsm.State = NONE;
strcpy((char*)Gsm.CommandData, GSMCommand[mcQHTTPURL]);
wTemp = strlen((const char*)URL);
ui_to_a(wTemp, bTemp);
strcat((char*)Gsm.CommandData, bTemp);
strcat((char*)Gsm.CommandData, ",30\r");
Gsm.ActualCommand = mcQHTTPURL;
ModemGsm.Signal.Control.SendCommand = TRUE;
break;
case HTTP_GET:
Gsm.State = NONE;
strcpy((char*)Gsm.CommandData, GSMCommand[mcQHTTPGET]);
strcat((char*)Gsm.CommandData, "30,20\r");
Gsm.ActualCommand = mcQHTTPGET;
ModemGsm.Signal.Control.SendCommand = TRUE;
break;
case HTTP_READ:
Gsm.State = NONE;
strcpy((char*)Gsm.CommandData, GSMCommand[mcQHTTPREAD]);
strcat((char*)Gsm.CommandData, "30\r");
Gsm.ActualCommand = mcQHTTPREAD;
ModemGsm.Signal.Control.SendCommand = TRUE;
break;
case MODEM_DISCONNECT:
Gsm.State = NONE;
strcpy((char*)Gsm.CommandData, GSMCommand[mcQPOWD]);
Gsm.ActualCommand = mcQPOWD;
ModemGsm.Signal.Control.SendCommand = TRUE;
break;
}
return 1;
}