本章為您介紹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);