WORD GSM_HttpRead(far char * URL)
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; }