OTA SDK使用說明

本頁目錄

1. 使用者常式

2. 邏輯控制

3. 適配介面

4. 事件說明

5. 其它說明

如需獲取SDK,或技術支援請填寫企業及專案資訊申請,填寫完成後發送郵件至chenkeyu@cmiot.chinamobile.com

1. 使用者常式

OTA的使用者常式為sample資料夾,在VS工程中對應為OtaSample專案。所涉及的函數有:

函數名功能說明參數與備註
ota_initota上下文初始化函數check_time:檢查升級任務的時間間隔,單位:秒
ota_loopota邏輯控制函數check_now:是否立即檢查升級任務
備註:需要週期性調用
ota_deinitota上下文銷毀函數備註:在結束ota流程後應當調用該函數清除相關記憶體空間

2. 邏輯控制

OTA的邏輯控制函數及相關功能檔為core資料夾,在VS工程中對應為CMIOT-OTA專案。core資料夾中的文件及二級資料夾有:

文件或資料夾名說明
ota_core.c包含ota邏輯控制函數、功能函數
ota_parse.c包含解析報文控制函數
ota_api.hota外部使用標頭檔
ota_internal.hota內部使用標頭檔
cjson/json解析組件
http/http報文解析組件
mbedtls/HMAC簽名加密組件

在ota_core.c檔中,包含了ota的邏輯控制函數及相關的解析功能函數,所涉及的函數有:

函數名功能說明參數與備註
OTA_Pack_Check_Task查詢任務API組包
OTA_Pack_Check_TokenToken檢驗API組包
OTA_Pack_Get_Package獲取文件API組包
OTA_Pack_Report上報狀態API組包
OTA_Pack_Authorization_InfoAuthorization參數計算及組包
OTA_CHECK_DEVICE檢查設備是否具備升級條件備註:每次下載升級包前都應該檢查電量及信號強度是否符合預設條件

3. 適配介面

OTA的適配介面位於adapter資料夾,在VS工程中對應為OtaAdapter專案。介面共分為系統介面和網路介面兩部分,其中系統介面涉及的函數有:

函數名功能說明參數與備註
OTA_Event_Handleota事件觸發函數
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

4. 事件說明

SDK的邏輯控制和使用者資料交互是通過事件觸發實現的,包含在函數OTA_Event_Handle()中。其中所涉及的事件有:

事件名功能說明參數與備註
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銷毀上下文時清空已經保存的升級包資料

5. 其它說明

(1)在win平台運行該工程時,只需要將default_device_id、default_manuf、default_model、default_type、default_version、default_res和default_access_key修改即可運行;

(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事件中根據實際需求選擇直接銷毀上下文。

个搜索结果,搜索内容 “

    0 个搜索结果,搜索内容 “