/** * @brief Tcp client disconnect success callback function. * @param arg: contain the ip link information * @retval None */ static void ICACHE_FLASH_ATTR at_upDate_discon_cb(void *arg) { struct espconn *pespconn = (struct espconn *)arg; uint8_t idTemp; // if(pespconn == NULL) // { // return; // } if(pespconn->proto.tcp != NULL) { os_free(pespconn->proto.tcp); } if(pespconn != NULL) { os_free(pespconn); } os_printf("disconnect\r\n"); if(system_upgrade_start(upServer) == false) { // uart0_sendStr("+CIPUPDATE:0/r/n"); at_backError; specialAtState = TRUE; at_state = at_statIdle; } else { uart0_sendStr("+CIPUPDATE:4\r\n"); } }
static void ICACHE_FLASH_ATTR handleUpgrade(uint8_t serverVersion, const char *server_ip, uint16_t port, const char *path) { const char* file; struct upgrade_server_info* update; uint8_t userBin = system_upgrade_userbin_check(); DBG_MSG("UserBIn = %d\r\n", userBin); switch (ROMNUM) { case 1: file = "user2.1024.new.2.bin"; break; case 2: file = "user1.1024.new.2.bin"; break; default: DBG_MSG("[OTA]Invalid userbin number!\r\n"); return; } uint16_t version=1; if (serverVersion <= version) { DBG_MSG("[OTA]No update. Server version:%d, local version %d\r\n", serverVersion, version); return; } DBG_MSG("[OTA]Upgrade available version: %d\r\n", serverVersion); update = (struct upgrade_server_info *)os_zalloc(sizeof(struct upgrade_server_info)); update->pespconn = (struct espconn *)os_zalloc(sizeof(struct espconn)); os_memcpy(update->ip, server_ip, 4); update->port = port; DBG_MSG("[OTA]Server "IPSTR":%d. Path: %s%s\r\n", IP2STR(update->ip), update->port, path, file); update->check_cb = ota_finished_callback; update->check_times = 10000; update->url = (uint8 *)os_zalloc(512); os_sprintf((char*)update->url, "GET %s%s HTTP/1.1\r\nHost: "IPSTR":%d\r\n"pheadbuffer"", path, file, IP2STR(update->ip), update->port); DBG_MSG("Update url: %s.\r\n", update->url); if (system_upgrade_start(update) == false) { DBG_MSG("[OTA]Could not start upgrade\r\n"); os_free(update->pespconn); os_free(update->url); os_free(update); } else { DBG_MSG("[OTA]Upgrading...\r\n"); } }
/****************************************************************************** * FunctionName : user_esp_platform_upgrade_begin * Description : Processing the received data from the server * Parameters : pespconn -- the espconn used to connetion with the host * server -- upgrade param * Returns : none *******************************************************************************/ LOCAL void ICACHE_FLASH_ATTR v_user_esp_platform_upgrade_begin(struct espconn *pespconn, struct upgrade_server_info *server) { uint8 user_bin[9] = {0}; server->pespconn = pespconn; server->port = 80; server->check_cb = v_user_esp_platform_upgrade_rsp; server->check_times = 120000; const char esp_server_ip[4] = {52,68,48,85}; os_memcpy(server->ip, esp_server_ip, 4); if (server->url == NULL) { server->url = (uint8 *)os_zalloc(512); } #if 0 // in general, we need to check user bin here if (system_upgrade_userbin_check() == UPGRADE_FW_BIN1) { os_memcpy(user_bin, "user2.bin", 10); } else if (system_upgrade_userbin_check() == UPGRADE_FW_BIN2) { os_memcpy(user_bin, "user1.bin", 10); } os_sprintf(server->url, "GET /%s HTTP/1.0\r\nHost: "IPSTR":%d\r\n"pheadbuffer"", user_bin, IP2STR(server->ip), 80); #else os_sprintf(server->url, "GET /%s HTTP/1.0\r\nHost: "IPSTR":%d\r\n"pheadbuffer"", "download/file/user1.1024.new.bin", IP2STR(server->ip), 80); //http://192.168.31.229/test/user1.1024.new.2.bin //52.68.48.85/download/file/user1.1024.new.bin #endif if (system_upgrade_start(server) == false) { ESP_DBG("upgrade is already started\n"); } }
static void __attribute__((section(".irom.text"))) upgradeCb(void *arg) { struct espconn *pConn = (struct espconn*)arg; espconn_sent(pConn, (uint8_t *)s_UpgradeMessage, strlen(s_UpgradeMessage)); espconn_disconnect(pConn); upgrade_server_info *pUpgrade = (upgrade_server_info *)pvPortZalloc(sizeof(upgrade_server_info)); pUpgrade->pespconn = pConn; memcpy(pUpgrade->ip, pConn->proto.tcp->remote_ip, 4); pUpgrade->check_cb = ota_finished_callback; pUpgrade->check_times = 60000; pUpgrade->port = 8888; pUpgrade->upgrade_version[0] = '1'; if (system_upgrade_userbin_check() == UPGRADE_FW_BIN1) pUpgrade->url = (uint8_t *)"GET /user2.bin HTTP/1.0\r\nConnection: close\r\n\r\n\r"; else pUpgrade->url = (uint8_t *)"GET /user1.bin HTTP/1.0\r\nConnection: close\r\n\r\n\r"; system_upgrade_start(pUpgrade); }