本章為您介紹C版本的SDK使用方法及相關API。Link IoT Edge提供C版本的SDK,名稱為linkedge-thing-access-sdk-c。
C版本開源的SDK源碼請參見開源C庫。
get_properties_callback
/*
* 獲取屬性(對應設備產品物模型屬性定義)的回調函數,需驅動開發者實現獲取屬性業務邏輯。
*
* Link IoT Edge需要獲取某個設備的屬性時,SDK會調用該接口間接獲取到數據并封裝成固定格式后回傳給Link IoT Edge。
* 開發者需要根據設備id和屬性名找到設備,將獲取到的屬性值按照@device_data_t格式填充。
*
* @dev_handle: Link IoT Edge需要獲取屬性的具體某個設備。
* @properties: 屬性值鍵值結構,驅動開發者需要將根據屬性名稱獲取到的屬性值更新到properties中。
* @properties_count: 屬性個數。
* @usr_data: 注冊設備時,用戶傳遞的私有數據。
* 所有屬性均獲取成功則返回LE_SUCCESS,其他則返回錯誤碼(參考le_error.h錯誤碼宏定義)。
* */
typedef int (*get_properties_callback)(device_handle_t dev_handle,
leda_device_data_t properties[],
int properties_count,
void *usr_data);
set_properties_callback
/*
* 設置屬性(對應設備產品物模型屬性定義)的回調函數,需驅動開發者實現設置屬性業務邏輯。
*
* Link IoT Edge需要設置某個設備的屬性時,SDK會調用該接口將具體的屬性值傳遞給應用程序,開發者需要在本回調
* 函數里將屬性設置到設備。
*
* @dev_handle: Link IoT Edge需要設置屬性的具體某個設備。
* @properties: Link IoT Edge需要設置的設備的屬性名稱和值。
* @properties_count: 屬性個數。
* @usr_data: 注冊設備時,用戶傳遞的私有數據。
*
* 若獲取成功則返回LE_SUCCESS,失敗則返回錯誤碼(參考le_error.h錯誤碼宏定義)。
* */
typedef int (*set_properties_callback)(device_handle_t dev_handle,
const leda_device_data_t properties[],
int properties_count,
void *usr_data);
call_service_callback
/*
* 服務(對應設備產品物模型服務定義)調用的回調函數,需要驅動開發者實現服務對應業務邏輯。
*
* Link IoT Edge需要調用某個設備的服務時,SDK會調用該接口將具體的服務參數傳遞給應用程序,開發者需要在本回調
* 函數里調用具體的服務,并將服務返回值按照@device_data_t格式填充到output_data。
*
* @dev_handle: Link IoT Edge需要調用服務的具體某個設備。
* @service_name: Link IoT Edge需要調用的設備的具體某個服務名,名稱與設備產品物模型一致。
* @data: Link IoT Edge需要調用的設備的具體某個服務參數,參數與設備產品物模型保持一致。
* @data_count: Link IoT Edge需要調用的設備的具體某個服務參數個數。
* @output_data: 開發者需要將服務調用的返回值,按照設備產品物模型規定的服務格式返回到output中。
* @usr_data: 注冊設備時,用戶傳遞的私有數據。
*
* 若獲取成功則返回LE_SUCCESS,失敗則返回錯誤碼(參考le_error.h錯誤碼宏定義)。
* */
typedef int (*call_service_callback)(device_handle_t dev_handle,
const char *service_name,
const leda_device_data_t data[],
int data_count,
leda_device_data_t output_data[],
void *usr_data);
leda_report_properties
/*
* 上報屬性,在設備所屬產品物模型中規定了設備的屬性上報能力。
*
* 上報屬性,可以上報一個,也可以多個一起上報。
*
* dev_handle: 設備在Link IoT Edge本地唯一標識。
* properties: @leda_device_data_t,屬性數組。
* properties_count: 本次上報屬性個數。
*
* 阻塞接口,成功返回LE_SUCCESS,失敗返回錯誤碼。
*
*/
int leda_report_properties(device_handle_t dev_handle, const leda_device_data_t properties[], int properties_count);
leda_report_event
/*
* 上報事件,設備具有的事件上報能力在設備產品物模型有規定。
*
*
* dev_handle: 設備在Link IoT Edge本地唯一標識。
* event_name: 事件名稱。
* data: @leda_device_data_t,事件參數數組。
* data_count: 事件參數數組長度。
*
* 阻塞接口,成功返回LE_SUCCESS,失敗返回錯誤碼。
*
*/
int leda_report_event(device_handle_t dev_handle, const char *event_name, const leda_device_data_t data[], int data_count);
leda_offline
/*
* 下線設備,假如設備工作在不正常的狀態或設備退出前,可以先下線設備,這樣Link IoT Edge就不會繼續下發消息到設備側。
*
* dev_handle: 設備在Link IoT Edge本地唯一標識。
*
* 阻塞接口,成功返回LE_SUCCESS,失敗返回錯誤碼。
*
*/
int leda_offline(device_handle_t dev_handle);
leda_online
/*
* 上線設備,設備只有上線后,才能被Link IoT Edge識別。
*
* dev_handle: 設備在Link IoT Edge本地唯一標識。
*
* 阻塞接口,成功返回LE_SUCCESS,失敗返回錯誤碼。
*/
int leda_online(device_handle_t dev_handle);
leda_register_and_online_by_device_name
/*
* 通過已在阿里云物聯網平臺創建的設備device_name,注冊并上線設備,申請設備唯一標識符。
*
* 若需要注冊多個設備,則多次調用該接口即可。
*
* product_key: 在阿里云物聯網平臺創建的產品ProductKey。
* device_name: 在阿里云物聯網平臺創建的設備名稱DeviceName。
* device_cb: 請求調用設備回調函數結構體,詳細描述見@leda_device_callback。
* usr_data: 設備注冊時傳入私有數據,在回調中會傳給設備。
*
* 阻塞接口,返回值設備在Link IoT Edge本地唯一標識,>= 0表示有效,< 0 表示無效。
*
*/
device_handle_t leda_register_and_online_by_device_name(const char *product_key, const char *device_name, leda_device_callback_t *device_cb, void *usr_data);
leda_register_and_online_by_local_name
/*
* 通過本地自定義設備名稱,注冊并上線設備,申請設備唯一標識符。
*
* 若需要注冊多個設備,則多次調用該接口即可。
*
* product_key: 在阿里云物聯網平臺創建的產品ProductKey。
* local_name: 由設備特征值組成的唯一描述信息,必須保證同一個product_key時,每個設備名稱不同。
* device_cb: 請求調用設備回調函數結構體,詳細描述見@leda_device_callback。
* usr_data: 設備注冊時傳入私有數據,在回調中會傳給設備。
*
* 阻塞接口,返回值設備在Link IoT Edge本地唯一標識,>= 0表示有效,< 0 表示無效。
*
* 注:在同一產品ProductKey條件設備注冊,不允許本接口和leda_register_and_online_by_device_name接口同時使用。
* 即每一個產品ProductKey設備注冊必須使用同一接口,否則設備注冊會發生不可控行為。
*/
device_handle_t leda_register_and_online_by_local_name(const char *product_key, const char *local_name, leda_device_callback_t *device_cb, void *usr_data);
leda_init
/*
* 驅動模塊初始化,模塊內部會創建工作線程池,異步執行阿里云物聯網平臺下發的設備操作請求,工作線程數目通過worker_thread_nums配置。
*
* worker_thread_nums: 線程池工作線程數,該數值根據注冊設備數量進行設置。
*
* 阻塞接口,成功返回LE_SUCCESS,失敗返回錯誤碼。
*/
int leda_init(int worker_thread_nums);
leda_exit
/*
* 驅動模塊退出。
*
* 模塊退出前,釋放資源。
*
* 阻塞接口。
*/
void leda_exit(void);
leda_get_driver_info_size
/*
* 獲取驅動信息長度。
*
* 阻塞接口,成功返回驅動信息長度,失敗返回0。
*/
int leda_get_driver_info_size(void);
leda_get_driver_info
/*
* 獲取驅動信息(在物聯網平臺配置的驅動配置)。
*
* driver_info: 驅動信息,需要提前申請好內存傳入。
* size: 驅動信息長度,leda_get_driver_info_size,如果傳入driver_info比實際配置內容長度短,會返回LE_ERROR_INVAILD_PARAM。
*
* 阻塞接口,成功返回LE_SUCCESS,失敗返回錯誤碼。
*
* 配置格式:
{
"json":{
"ip":"127.0.0.1",
"port":54321
},
"kv":[
{
"key":"ip",
"value":"127.0.0.1",
"note":"ip地址"
},
{
"key":"port",
"value":"54321",
"note":"port端口"
}
],
"fileList":[
{
"path":"device_config.json"
}
]
}
*/
int leda_get_driver_info(char *driver_info, int size);
leda_get_device_info_size
/*
* 獲取設備信息長度。
*
* 阻塞接口,成功返回設備信息長度,失敗返回0。
*/
int leda_get_device_info_size(void);
leda_get_device_info
/*
* 獲取設備信息(在物聯網平臺配置的設備配置)。
*
* device_info: 設備信息,需要提前申請好內存傳入。
* size: 設備信息長度,該長度通過leda_get_device_info_size接口獲取,如果傳入device_info比實際配置內容長度短,會返回LE_ERROR_INVAILD_PARAM。
*
* 阻塞接口,成功返回LE_SUCCESS,失敗返回錯誤碼。
*
* 配置格式:
[
{
"custom":{
"port":12345,
"ip":"127.0.0.1"
},
"deviceName":"device1",
"productKey":"a1ccxxeypky"
}
]
*/
int leda_get_device_info(char *device_info, int size);
leda_get_config_size
/*
* 獲取驅動配置長度。
*
* 阻塞接口,成功返回驅動配置長度,失敗返回0。
*/
int leda_get_config_size(void);
leda_get_config
/*
* 獲取驅動所有配置。
*
* config: 驅動配置,需要提前申請好內存傳入。
* size: 驅動配置長度,該長度通過leda_get_config_size接口獲取,如果傳入config比實際配置內容長度短,會返回LE_ERROR_INVAILD_PARAM。
*
* 阻塞接口,成功返回LE_SUCCESS,失敗返回錯誤碼。
*
* 配置格式:
{
"config":{
"json":{
"ip":"127.0.0.1",
"port":54321
},
"kv":[
{
"key":"ip",
"value":"127.0.0.1",
"note":"ip地址"
},
{
"key":"port",
"value":"54321",
"note":"port端口"
}
],
"fileList":[
{
"path":"device_config.json"
}
]
},
"deviceList":[
{
"custom":"{"port":12345,"ip":"127.0.0.1"}",
"deviceName":"device1",
"productKey":"a1ccxxeypky"
}
]
}
*/
int leda_get_config(char *config, int size);
config_changed_callback
/*
* 驅動配置變更回調接口。
*
* config: 配置信息。
*
* 阻塞接口,成功返回LE_SUCCESS,失敗返回錯誤碼。
*/
typedef int (*config_changed_callback)(const char *config);
leda_register_config_changed_callback
/*
* 訂閱驅動配置變更監聽回調。
*
* config_cb: 配置變更通知回調接口。
*
* 阻塞接口,成功返回LE_SUCCESS,失敗返回錯誤碼。
*/
int leda_register_config_changed_callback(config_changed_callback config_cb);
leda_get_tsl_size
/*
* 獲取指定產品ProductKey對應物模型內容長度。
*
* product_key: 產品ProductKey。
*
* 阻塞接口,成功返回product_key對應物模型內容長度,失敗返回0。
*/
int leda_get_tsl_size(const char *product_key);
leda_get_tsl
/*
* 獲取指定產品ProductKey對應物模型內容。
*
* product_key: 產品ProductKey。
* tsl: 物模型內容,需要提前申請好內存傳入。
* size: 物模型內容長度,該長度通過leda_get_tsl_size接口獲取,如果傳入tsl比實際物模型內容長度短,會返回LE_ERROR_INVAILD_PARAM。
*
* 阻塞接口,成功返回LE_SUCCESS,失敗返回錯誤碼。
*/
int leda_get_tsl(const char *product_key, char *tsl, int size);
leda_get_tsl_ext_info_size
/*
* 獲取指定產品ProductKey對應物模型擴展信息內容長度。
*
* product_key: 產品ProductKey。
*
* 阻塞接口,成功返回product_key對應物模型擴展信息內容長度,失敗返回0。
*/
int leda_get_tsl_ext_info_size(const char *product_key);
leda_get_tsl_ext_info
/*
* 獲取指定產品ProductKey對應物模型擴展信息內容。
*
* product_key: 產品ProductKey。
* tsl_ext_info: 物模型擴展信息,需要提前申請好內存傳入。
* size: 物模型擴展信息長度,該長度通過leda_get_tsl_ext_info_size接口獲取,如果傳入tsl_ext_info比實際物模型擴展信息內容長度短,會返回LE_ERROR_INVAILD_PARAM。
*
* 阻塞接口,成功返回LE_SUCCESS,失敗返回錯誤碼。
*/
int leda_get_tsl_ext_info(const char *product_key, char *tsl_ext_info, int size);
leda_get_device_handle
/*
* 獲取設備句柄。
*
* product_key: 產品ProductKey。
* device_name: 設備名稱DeviceName。
*
* 阻塞接口,成功返回device_handle_t,失敗返回小于0數值。
*/
device_handle_t leda_get_device_handle(const char *product_key, const char *device_name);
文檔內容是否對您有幫助?