When I start upgrade i saw:
system_upgrade_start
upgrade_connect 33656
upgrade_connect_cb
GET /user2.bin HTTP/1.1
Host: 192.168.0.84:80
Connection: keep-alive
HEAD /user2.bin HTTP/1.1
Host: 192.168.0.84:80
Connection: close
pusrdata = HTTP/1.1 200 OK
Server: nginx/1.2.1
Date: Tue, 22 Dec 2015 13:02:09 GMT
Content-Type: application/octet-stream
Content-Length: 241536
Last-Modified: Tue, 22 Dec 2015 13:01:57 GMT
Connection: close
Accept-Ranges: bytes
sumlength = 241536
sec_block 59
...........................................................upgrade_get_sum_disconcb 31336
erase sector=129 ok
….............................. (other sectors)
erase sector=187 ok
ALL=59 sectors erase ok!
upgrade_connect_cb
GET /user2.bin HTTP/1.1
Host: 192.168.0.84:80
Connection: keep-alive
HEAD /user2.bin HTTP/1.1
Host: 192.168.0.84:80
Connection: close
sumlength = 241536
upgrade file download start.
please check the bin file
totallen = 2687
totallen = 4147
upgrade_check
user_esp_platform_upgrade_failed
I restarting chip for updare because of glitches and even freezing when I call it from my application based on esphttpd project.
The code I use (enter point is initUpgradeTimer):
Code: Select all
LOCAL os_timer_t upgradeTimer;
#define pheadbuffer "Connection: keep-alive\r\n\
Cache-Control: no-cache\r\n\
User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36 \r\n\
Accept: */*\r\n\
Accept-Encoding: gzip,deflate,sdch\r\n\
Accept-Language: zh-CN,zh;q=0.8\r\n\r\n"
LOCAL void ICACHE_FLASH_ATTR
user_esp_platform_upgrade_begin(struct espconn *pespconn, struct upgrade_server_info *server)
{
uint8 user_bin[32] = {0}, i, j, pos;
char esp_server_ip[4];
char * curNum;
server->pespconn = pespconn;
server->port = 80;
server->check_cb = user_esp_platform_upgrade_rsp;
server->check_times = 1000000;//120000;
esp_server_ip[0] = 192;
esp_server_ip[1] = 168;
esp_server_ip[2] = 0;
esp_server_ip[3] = 84;
os_memcpy(server->ip, esp_server_ip, 4);
server->url = (uint8 *)os_malloc(512);
if (system_upgrade_userbin_check() == UPGRADE_FW_BIN1) {
os_memcpy(user_bin, "user2.bin", 18);
} else if (system_upgrade_userbin_check() == UPGRADE_FW_BIN2) {
os_memcpy(user_bin, "user1.bin", 18);
}
os_printf("user bin is %s \r\n",user_bin);
os_sprintf((char*)server->url,
"GET /%s HTTP/1.1\r\n"
"Host: "IPSTR":%d\r\n"
//"Connection: close\r\n"
"Connection: keep-alive\r\n"
"\r\n",
user_bin, IP2STR(server->ip), server->port);
if (system_upgrade_start(server) == false) {
os_printf("upgrade is already started\n");
}
}
void ICACHE_FLASH_ATTR upgradeTimercb(void *arg)
{
struct ip_info ipconfig;
os_timer_disarm(&upgradeTimer);
wifi_get_ip_info(STATION_IF, &ipconfig);
if (ipconfig.ip.addr != 0) {
struct espconn *pespconn = NULL;
struct upgrade_server_info *server = NULL;
server = (struct upgrade_server_info *)os_malloc(sizeof(struct upgrade_server_info));
//os_printf("call start upgrade \n\r");
user_esp_platform_upgrade_begin(pespconn , server);
} else {
os_timer_setfn(&upgradeTimer, (os_timer_func_t *)upgradeTimercb, NULL);
os_timer_arm(&upgradeTimer, 500, 0);
}
}
LOCAL void ICACHE_FLASH_ATTR
user_esp_platform_upgrade_rsp(void *arg)
{
struct upgrade_server_info *server = arg;
if (server->upgrade_flag == true) {
os_printf("user_esp_platform_upgrade_successful\n");
} else {
os_printf("user_esp_platform_upgrade_failed\n");
}
os_free(server->url);
server->url = NULL;
os_free(server);
server = NULL;
system_upgrade_reboot();
}
void ICACHE_FLASH_ATTR
initUpgradeTimer(void){
os_timer_disarm(&upgradeTimer);
os_timer_setfn(&upgradeTimer, (os_timer_func_t *)upgradeTimercb, (void *)0);
os_timer_arm(&upgradeTimer, 5000, 1);
}