如需獲取SDK,或技術支援請填寫企業及專案資訊申請,填寫完成後發送郵件至chenkeyu@cmiot.chinamobile.com
函數名 | 功能說明 | 參數與備註 |
---|---|---|
ota_init | ota上下文初始化函數 | check_time:檢查升級任務的時間間隔,單位:秒 |
ota_loop | ota邏輯控制函數 | check_now:是否立即檢查升級任務 備註:需要週期性調用 |
ota_deinit | ota上下文銷毀函數 | 備註:在結束ota流程後應當調用該函數清除相關記憶體空間 |
文件或資料夾名 | 說明 |
---|---|
ota_core.c | 包含ota邏輯控制函數、功能函數 |
ota_parse.c | 包含解析報文控制函數 |
ota_api.h | ota外部使用標頭檔 |
ota_internal.h | ota內部使用標頭檔 |
cjson/ | json解析組件 |
http/ | http報文解析組件 |
mbedtls/ | HMAC簽名加密組件 |
在ota_core.c檔中,包含了ota的邏輯控制函數及相關的解析功能函數,所涉及的函數有:
函數名 | 功能說明 | 參數與備註 |
---|---|---|
OTA_Pack_Check_Task | 查詢任務API組包 | 無 |
OTA_Pack_Check_Token | Token檢驗API組包 | 無 |
OTA_Pack_Get_Package | 獲取文件API組包 | 無 |
OTA_Pack_Report | 上報狀態API組包 | 無 |
OTA_Pack_Authorization_Info | Authorization參數計算及組包 | 無 |
OTA_CHECK_DEVICE | 檢查設備是否具備升級條件 | 備註:每次下載升級包前都應該檢查電量及信號強度是否符合預設條件 |
函數名 | 功能說明 | 參數與備註 |
---|---|---|
OTA_Event_Handle | ota事件觸發函數 | 無 |
ota_log_printf | 日誌列印 | 無 |
ota_atoi | 字串轉整形 | 無 |
ota_itoa_decimal | 十進位整數轉字串 | 無 |
ota_hex2str | 十六進位轉字串 | 備註:將md5計算結果轉成字串用於比較 |
ota_malloc | 記憶體申請 | 無 |
ota_free | 記憶體釋放 | 無 |
ota_get_tick | 獲取系統執行時間 | 備註:用於計時 |
ota_get_deviceID | 獲取設備ID | 無 |
ota_get_manuf | 獲取廠商編號 | 無 |
ota_get_model | 獲取模組編號 | 無 |
ota_get_type | 獲取升級type | 備註:1為fota任務,2為sota任務 |
ota_get_version | 獲取當前版本 | 無 |
ota_get_signals | 獲取信號強度 | 無 |
ota_get_powers | 獲取電池電量 | 無 |
ota_get_auth_version | 獲取鑒權版本 | 備註:當前鑒權版本固定為”2018-10-31” |
ota_get_auth_res | 獲取res | 備註:在當前SDK中,既為獲取產品ID |
ota_get_auth_et | 獲取鑒權過期時間 | 備註:UNIX時間 |
ota_get_auth_method | 獲取簽名計算方式 | 備註:當前支持sha1/sha256/md5(全為小寫) |
ota_get_auth_accesskey | 獲取accesskey | 無 |
ota_read_flash | 從flash中恢復ota狀態 | 無 |
ota_save_flash | 將ota狀態保存至flash | 無 |
ota_calculate_range | 計算下次獲取升級包的範圍(range) | 無 |
其中網路介面涉及的函數有:
函數名 | 功能說明 | 參數與備註 |
---|---|---|
ota_net_init | 網路連接初始化 | 無 |
ota_net_send | 發送函數 | 無 |
ota_get_host_by_name | 功能變數名稱解析 | 備註:若不支援功能變數名稱解析可以直接返回固定IP |
事件名 | 功能說明 | 參數與備註 |
---|---|---|
OTA_EVENT_TASK_ManufOrModel_ERROR | 檢測任務失敗,廠商編號或模組編號不一致 | 無 |
OTA_EVENT_TASK_Ver_ERROR | 檢測任務失敗,差分包的初始版本號不一致 | 無 |
OTA_EVENT_TASK_STATE_ERROR | 檢測任務失敗,任務狀態失效 | 無 |
OTA_EVENT_TASK_NO_TASK | 檢測任務失敗,沒有對應的任務存在 | 無 |
OTA_EVENT_TASK_OTHER_ERROR | 檢測任務失敗,由於其它原因失敗 | 備註:其它原因包括OneNET內部錯誤、任務暫停等原因 |
OTA_EVENT_TASK_SUCCESS | 檢測任務成功 | 備註:檢測任務成功後應當將上下文的state參數更新為下載狀態 |
OTA_EVENT_TOKEN_OK | 校驗token成功 | 備註:token校驗完畢後可以進行檔的獲取 |
OTA_EVENT_TOKEN_INTERNAL_ERROR | 校驗token失敗,OneNET內部錯誤 | 無 |
OTA_EVENT_TOKEN_EXPIRED_ERROR | 校驗token失敗,token過期 | 備註:應當結束OTA本次流程,並銷毀上下文 |
OTA_EVENT_TOKEN_RETRIEVE_ERROR | 校驗token失敗,token過期 | 備註:可以重新檢測一次任務,更新到最新的token |
OTA_EVENT_TOKEN_CHECK_ERROR | 校驗token失敗,token錯誤 | 備註:應當結束OTA本次流程,並銷毀上下文 |
OTA_EVENT_TOKEN_PAUSED_ERROR | 校驗token失敗,任務已暫停 | 備註:根據重試時間進行重試,但是不消耗重試次數 |
OTA_EVENT_TOKEN_TASK_EXPIRED_ERROR | 校驗token失敗,任務已結束 | 備註:應當結束OTA本次流程,並銷毀上下文 |
OTA_EVENT_TOKEN_TERMINATE_ERROR | 校驗token失敗,任務已取消 | 備註:應當結束OTA本次流程,並銷毀上下文 |
OTA_EVENT_TOKEN_OTHER_ERROR | 校驗token失敗,由於其它原因失敗 | 無 |
OTA_EVENT_REPORT_DOWNLOAD_SUCCESS | 開始上報下載成功狀態 | 無 |
OTA_EVENT_REPORT_LOW_POWER | 開始上報下載失敗狀態,原因為電量低 | 無 |
OTA_EVENT_REPORT_BAD_SIGNAL | 開始上報下載失敗狀態,原因為信號不良 | 無 |
OTA_EVENT_REPORT_UNKNOWN_ERROR | 開始上報下載失敗狀態,其它原因 | 備註:其它原因包括重試次數消耗完畢、伺服器未找到資源、檔大小不一致、token無效等原因 |
OTA_EVENT_REPORT_UPDATE_SUCCESS | 開始上報升級成功狀態 | 無 |
OTA_EVENT_REPORT_MD5_ERROR | 開始上報升級失敗狀態,原因為md5校驗失敗 | 無 |
OTA_EVENT_REPORT_SUCCESS | 上報狀態成功 | 備註:上報狀態成功後,若是上報的下載成功,則可以開始進行升級, 若為其它上報狀態,則應當結束OTA本次流程,並銷毀上下文 |
OTA_EVENT_REPORT_FAILED | 上報狀態失敗,由其它原因造成 | 備註:其它原因包括token失效、上傳錯誤的狀態碼、升級任務已取消、升級任務已完成、無效操作等原因, 其中若升級任務已取消或者已完成,建議結束OTA本次流程,並銷毀上下文 |
OTA_EVENT_custom_retry_download | 開始下載重試 | 備註:由於收到的位元組數與contentlength不相等,故開始重試計時 |
OTA_EVENT_custom_save_packet | ||
OTA_EVENT_custom_ready_update | 開始升級 | 無 |
OTA_EVENT_custom_save_task_info | 保存任務資訊至flash | 備註:將接收到的文件保存成文件 |
OTA_EVENT_custom_report_error_clear | 由於上報失敗結束OTA流程 | 備註:當由於升級任務已取消、升級任務已完成導致上報狀態失敗時,建議結束OTA本次流程,並銷毀上下文 |
OTA_EVENT_custom_delete_package | 銷毀上下文時清空已經保存的升級包資料 | 無 |
(2)在事件OTA_EVENT_custom_ready_update中,應當增加其它方式判斷升級成功與否(例如通過比對升級前後的version等),再上報升級狀態;
(3)在函數OTA_Pack_Authorization_Info()中會將簽名加密的計算結果保存至上下文中的encrypt_result變數中。在OTA_EVENT_custom_save_task_info事件中可以將其保存至flash中或者下次恢復狀態時重新計算;
(4)若超過一定時間未收到資料應當標記為重試(ctx_net_state重置為NET_STATE_NULL , isRetry置為DownLoadRetry_True);
(5)檢測任務API中,如果設置了cdn為true可以返回升級包的下載IP;
(6)在函數ota_save_flash中,若需要將某些資料存入flash用作恢復時,應當保存檢測任務成功時返回的token、信號要求、電量要求、重試次數、重試時間間隔、升級包大小、已下載升級包大小、升級包md5資訊等,且當每次獲取分片包成功並據存儲完畢後,應當將已下載升級包大小更新到flash中;
(7)每次拉取檔的分片範圍在函數ota_calculate_range()中計算,可以根據實際需要自由設計計算方式;
(8)下載升級包時若因為電量低或者信號差,可以選擇在回檔事件中將isRetry置為重試狀態;
(9)如果需要升級包的檔案名,可以在Content-Disposition中獲取;
(10)每次獲取分片包的最小範圍限制為2個位元組;
(11)上報狀態時,若OneNET收到了狀態碼但是因某些原因(例如網路原因)導致sdk沒收到回應,可以在OTA_EVENT_REPORT_FAILED事件中根據實際需求選擇直接銷毀上下文。