++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的可移植性和易用性++
*注: 原有的編譯系統和使用方式仍然存在, 詳情可見文檔: *基于Make的編譯系統說明
目錄結構
為增強易用性,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()
詳見文檔: HTTP2文件上傳編程指南
去掉的功能
由于用戶已可使用源文件方式移植或者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函數接口
更多信息,請參見API詳解。
去掉的接口
舊版的 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
。