++V3.0.1版本最大的變化, 在於不強制使用者使用SDK內建的編譯系統, 而是可以按需抽取部分功能點對應的C檔案, 以自己喜歡的任何方式進行編譯++。
V3.0.1
V3.0.1版本在2019年03月發布,相對2018年11月發布的V2.3.0版本有如下更動。
新增支援原始碼方式移植
適用於安裝了
Ubuntu16.04 64位
的主機,或者安裝了Windows XP
,Windows7
,Windows10
的主機進行開發使用者可以通過
make menuconfig
命令(Ubuntu)或者通過點擊config.bat
指令碼(Windows)來選擇功能點選好功能點之後,都可以通過
extract.sh
命令(Ubuntu)或者是通過點擊extract.bat
指令碼(Windows) 來抽取需要的源檔案有了這些源檔案,不論使用者在什麼主機上用什麼方式開發,都可以方便的將這些檔案加入自己的工程中,用自己熟悉的源碼編譯方式進行編譯
在這個過程中所有需要使用者實現的HAL函數介面都被自動整理到一個單獨的檔案中,位於output/eng/wrappers/wrapper.c
, 使用者需要對這些函數進行實現
++這項增強顛覆性的解決了過去如果使用者不能很順利的交叉編譯SDK, 就會卡住無法繼續的問題, 大幅增強SDK的可移植性和易用性++
目錄結構
為增強易用性,V3.0.1版本的SDK採用了扁平化的目錄結構擺放源碼,例如
src/mqtt
下集中擺放所有MQTT上雲功能點的H檔案和C檔案,所有的src/xxxx
目錄都是內聚的。所有源檔案的擺放和SDK的功能點形成一一對應的關係,除了表示基礎的
src/infra
目錄,現在所有的src/xxx
都各自對應一個SDK的功能,幾個src/xxx
,就有幾個功能點,例如:src/dynamic_register
:擺放一型一密/動態註冊相關的所有源檔案src/dev_sign
:擺放裝置簽名相關的所有源檔案src/mqtt
:擺放MQTT連雲相關的所有源檔案src/ota
:擺放OTA韌體下載相關的所有源檔案src/dev_model
:擺放物模型管理/子裝置管理相關的所有源檔案
API介面和HAL介面的呈現方式
過去SDK只有2個全域性的標頭檔iot_import.h
和 iot_export.h
,分別列出SDK對外界需要依賴的 HAL_XXX()
底層介面和列出SDK對外界提供的 IOT_XXX
使用者介面。
我們得到部分使用者的反饋,iot_import.h
中列出的100多個HAL介面使他們誤以為全都需要對接,iot_export.h
中列出的200多個API介面使他們誤以為全部需要學習使用,感到負擔很重。
因此,我們去掉了這種設計
SDK不再有一個整體性的
iot_import.h
和iot_export.h
。也不再有頂級目錄下的
include
。而是將源檔案嚴格按所歸屬的功能點目錄分散排布,我們盡量避免讓使用者看到他其實不需要關注的部分。
++現在++
使用V3.0.1版本的SDK,使用者首先要瞭解SDK提供了哪些功能點(例如MQTT連雲,OTA下載等),並確定自己需要這些功能中的哪一些,並圖形化的配置和選中它們。
其次,通過抽取工具(在Ubuntu主機上是
extract.sh
指令碼,在Windows主機上是extract.bat
)得到output
目錄下這些功能對應的源檔案。接著便可以使用,在使用環節,我們對SDK所有外部介面的呈現方式遵循如下的設計原則。
output/eng/xxx
就對應名為xxx
的功能點,它們從src/xxx
整理而來。output/eng/xxx/xxx_api.h
就對應名為xxx
的功能點提供的API使用者介面,它們從src/xxx/xxx_api.h
整理而來。output/eng/wrappers/wrapper.c
自動產生並列出所有需要使用者根據嵌入式目標平台實現的HAL_XXX()
底層介面。
也就是說
只有您需要的功能點,才需要去看
src/xxx/xxx_api.h
或者output/eng/xxx/xxx_api.h
,所以確保使用者不會看到多餘的API介面聲明。所有您需要實現的函數,都列在
output/eng/wrappers/wrapper.c
中,不需對接的不會包含其中,所以確保使用者不會看到多餘的HAL介面定義。
舉例來說,在最簡單的情形下,使用者只需要SDK中計算MQTT連雲簽名的能力,由於這個能力由src/dev_sign
或者output/eng/dev_sign
提供
使用者只會看到1個API介面,列在
dev_sign_api.h
中使用者不會看到任何HAL介面,甚至也看不到
wrapper.c
,因為這個功能是零依賴的,不需要使用者實現任何C函數即可使用
make.settings 檔案
新增對使用
Windows XP
,Windows 7
或者Windows 10
主機做開發的使用者,也可以用config.bat
工具圖形化的配置所需要的功能,不一定需要Linux主機。FEATURE_XXX
系列的選項名字修改。
曾用名 | 新版名 | 說明 |
|
| WiFi配網功能中的手機熱點配網模式。 |
|
| WiFi配網功能中的路由器配網模式。 |
新增以下選項
FEATURE_AWSS_SUPPORT_SMARTCONFIG_WPS
:WiFi配網功能中的點對點配網模式。FEATURE_AWSS_SUPPORT_DEV_AP
:WiFi配網功能中的裝置熱點配網模式。
MQTT函數介面
不再需要調用
IOT_SetupConnInfo()
,使用者建立MQTT串連只需要知道1個介面IOT_MQTT_Construct()
。不再需要準備入參,調用
IOT_MQTT_Construct()
的時候絕大多數串連參數都可以不填寫,SDK會自動補上預設值而不是報錯返回。
新增的功能點和介面
新增裝置簽名功能點,是SDK的最簡形態。
這個功能點只有1個API,是
IOT_Sign_MQTT()
新增一型一密功能點,用於所有裝置不必燒錄不同裝置認證(ProductKey、DeviceName、DeviceSecret)的情境。
這個功能點只有1個API,是
IOT_Dynamic_Register()
新增裝置重設功能點,可用於裝置告知雲端解除綁定關係,解除子裝置和網關對應關係的情境。
這個功能點只有1個API,是
IOT_DevReset_Report()
新增HTTP2檔案上傳功能點,可用於流式上傳大檔案到雲端的情境。
這個功能點只有3個API,是
IOT_HTTP2_UploadFile_Connect()
,IOT_HTTP2_UploadFile_Request()
和IOT_HTTP2_UploadFile_Disconnect()
去掉的功能
由於使用者已可使用源檔案方式移植或者GNU Make方式移植,我們去掉了基於
cmake
的編譯方式支援。
V2.3.0
V2.3.0版本在2018年11月發布,相對2018年8月31日發布的V2.2.1版本有如下更動。
make.settings 檔案
對使用
Ubuntu16.04
的64位
主機開發的使用者,可以用make menuconfig
命令圖形化編輯make.settings
檔案。FEATURE_XXX
系列的選項名字修改。
曾用名 | 新版名 | 說明 |
|
| 物模型管理(Alink JSON協議)能力開關 |
|
| 物模型管理中的網關能力開關 |
|
| WiFi配網能力開關 |
新增以下選項
FEATURE_DEVICE_BIND_ENABLED
:裝置綁定功能的開關,只有串連飛燕平台的客戶需要關注並開啟這個開關,用於使能公版APP控制裝置FEATURE_ALCS_CLIENT_ENABLED
:本地通訊中的用戶端部分功能開關,只有邊緣網關這類需要控制其他IoT裝置的裝置才需要開啟FEATURE_ALCS_SERVER_ENABLED
:本地通訊中的服務端部分功能開關,需要接受手機app或者邊緣網關區域網路控制的裝置需要開啟FEATURE_AWSS_SUPPORT_SMARTCONFIG
:WiFi配網中的一鍵配網模式FEATURE_AWSS_SUPPORT_ZEROCONFIG
:WiFi配網中的零配模式FEATURE_AWSS_SUPPORT_ROUTER
:WiFi配網中的路由器配網模式FEATURE_AWSS_SUPPORT_PHONEASAP
:WiFi配網中的手機熱點配網模式
刪除以下選項
FEATURE_COAP_DTLS_SUPPORT
:CoAP上雲是否經過DTLS加密,由於總是使能,不再需要使用者配置
全域函數介面
刪除
IOT_OpenLog()
和IOT_CloseLog()
,使用者可以通過IOT_SetLogLevel()
來控制SDK列印日誌的詳細程度或者不列印。刪除
IOT_LOG_EMERG
這個日誌等級,改成IOT_LOG_NONE
, 用於IOT_SetLogLevel(IOT_LOG_NONE)
, 表達日誌功能的整體關閉。刪除
IOT_Linkkit_Ioctl()
,原有功能合并到IOT_Ioctl()
中,所有的參數選項可查看iotx_ioctl_option_t
枚舉定義。增強
IOT_Ioctl()
,新選項IOTX_IOCTL_SET_MQTT_DOMAIN
和IOTX_IOCTL_SET_HTTP_DOMAIN
可用於讓客戶傳入自訂串連的MQTT/HTTP網域名稱,用于海外新網站。
MQTT函數介面
原有基礎版介面及新增介面中,第1個參數
handle
都可以傳NULL
,表示選取預設參數建立串連或使用預設串連,包括IOT_MQTT_Construct
IOT_MQTT_Destroy
IOT_MQTT_Yield
IOT_MQTT_LogPost
IOT_MQTT_CheckStateNormal
IOT_MQTT_Subscribe
IOT_MQTT_Unsubscribe
IOT_MQTT_Publish
IOT_MQTT_Subscribe_Sync
IOT_MQTT_Publish_Simple
刪除結構體
iotx_mqtt_param_t
中的pwrite_buf
成員和pread_buf
成員新增介面
IOT_MQTT_Publish_Simple()
, 可以傳入字串類型的參數表達topic和payloadint IOT_MQTT_Publish_Simple(void *handle, const char *topic_name, int qos, void *data, int len);
新增介面
IOT_MQTT_Subscribe_Sync()
,可以阻塞式的進行同步訂閱,訂閱成功之前函數並不返回int IOT_MQTT_Subscribe_Sync(void *handle, const char *topic_filter, iotx_mqtt_qos_t qos, iotx_mqtt_event_handle_func_fpt topic_handle_func, void *pcontext, int timeout_ms);
最佳化介面
IOT_MQTT_Subscribe()
, 可以在MQTT串連尚未建立的時候就提前做離線的訂閱,C-SDK會在建連成功後立即發送訂閱報文
OTA函數介面
由於MQTT函數介面的第1個參數
handle
可以傳NULL
, 也影響到基礎版OTA函數介面IOT_OTA_Init
的第3個參數可以接受NULL
傳參, 表示使用預設串連void *IOT_OTA_Init(const char *product_key, const char *device_name, void *ch_signal);
去掉的介面
舊版的 linkkit_xxx() 和 linkkit_gateway_xxx() 介面作為編譯時間可選使能,預設不編譯
注1:舊版的linkkit介面仍然可以通過在make.settings
檔案中的如下語句使能,此時新版介面消失,舊版介面重新出現。
FEATURE_DEPRECATED_LINKKIT=y
注2:為了減少裝置端記憶體消耗,當使用者調用SDK的API上傳屬性變化通知、事件通知到雲端時SDK不再檢查資料格式的正確性,因此使用者不再需要從雲端匯出TSL的JSON檔案轉換為C的字串後放到C代碼中。
HAL函數介面
刪除了和已有介面
HAL_Reboot
重複的HAL_Sys_reboot
。