1. 程式人生 > >esp8266 OTA升級system_upgrade_start函式

esp8266 OTA升級system_upgrade_start函式

其實WiFi模組自主升級和外掛升級,都是用 OTA(Over The Air)技術,基本上是相通的。

Esp8266 的SDK給出了bool system_upgrade_start (struct upgrade_server_info *server)
這個介面來實現OTA升級。基本上就是設定該函式的引數server。

這個引數的基本結構從原始碼可知:

struct upgrade_server_info {
    uint8 ip[4];
    uint16 port;


    uint8 upgrade_flag;


    uint8

pre_version[16];
    uint8 upgrade_version[16];


    uint32 check_times;
    uint8 *url;


    upgrade_states_check_callback check_cb;
    struct espconn *pespconn;
};

必須要填的有:

1、一個伺服器的埠和IP地址 ip port

2、韌體下載完成的回撥函式check_cb

3、url http請求報文,包含起始行和首部

4、pespconn 結構體。

返回值: true:開始升級  false:已經在升級中,無法再開始升級

筆者用的是1.5.4SDK    ESP8266已搞成庫了。只能從串列埠輸出抓到一些資訊。

參見更老的SDK,弄清升級的流程。

第一步:建立TCP連線--->發出HEAD請求--->獲得bin檔案的頭資訊

--->斷開TCP連線--->建立TCP新連線--->發出GET 分段獲取--->儲存-->檢查資訊(即檢索下載的bin檔案是否是所要求的)---->設定啟動標誌位--->重新啟動。


分段獲取----->好奇的很??


在老的SDK中的處理接收到的TCP報文,呼叫

user_esp_platform_data_process(&client_param,pusrdata,ret);

user_esp_platform_data_process(struct client_conn_param *pclient_param, char *pusrdata, unsigned shortlength)

中pclient_param  指向socketID相關的結構體

pusrdata 是接收到的資料,如果是NULL,則連線將斷開

length 是接收到資料的長度

解析JSON資料包,其中對於系統升級指令 呼叫

user_esp_platform_upgrade_begin(pclient_param, server); 且包括server結構體引數的設定。

LOCAL void  
user_esp_platform_upgrade_begin(struct client_conn_param *pclient_param, struct upgrade_server_info *server) 

處理從伺服器收到的資料----升級引數設定

引數設定很關鍵。