全部產品
Search
文件中心

:C版本SDK

更新時間:Jul 13, 2024

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