This topic describes how to use the SDK for C and the related API. Link IoT Edge provides the SDK for C, which is named linkedge-thing-access-sdk-c.

For the source code of the SDK for C, visit Open-source SDK for C.

get_properties_callback

/*
     * The callback function that is used to obtain the device properties that are defined in the device TSL. Driver developers must implement the business logic to obtain the properties.
     * 
     * When Link IoT Edge needs to obtain the properties of a device, the SDK calls this function to obtain the data, parse the data into a fixed format, and then sends it back to Link IoT Edge.
     * Developers must identify the device by using device ID and property names. Then, developers must assign the property values based on the @device_data_t format.
     *
     * @dev_handle: the device from which Link IoT Edge obtains the properties.
     * @properties: the property values. Driver developers must update the value of the properties parameter based on the obtained property values.
     * @properties_count: the number of properties.
     * @usr_data: the private data specified by the user when the device is registered.
     * If all properties are obtained, LE_SUCCESS is returned. If the request fails, an error code is returned. For more information, see the error code macros defined in the le_error.h file.
     * */
typedef int (*get_properties_callback)(device_handle_t dev_handle, 
                                       leda_device_data_t properties[], 
                                       int properties_count, 
                                       void *usr_data);

set_properties_callback

/*
     * The callback function that is used to set properties that are defined in the TSL. Driver developers must implement the business logic.
     * 
     * When Link IoT Edge needs to set the properties of a device, the SDK calls this function and sends the data to the edge application.
     * Developers must use this function to set device properties.
     *
     * @dev_handle: the device for which Link IoT Edge sets the properties.
     * @properties: the new property values to be set for the device.
     * @properties_count: the number of properties.
     * @usr_data: the private data specified by the user when the device is registered.
     * 
     * If the request is successful, LE_SUCCESS is returned. If the request fails, an error code is returned. For more information, see the error code macros defined in the le_error.h file.
     * */
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

/*
     * The callback function that is used to call a service that is based on the service defined in the device TSL. Driver developers must implement the business logic for the service.
     * 
     * When Link IoT Edge needs to call a service of a device, the SDK calls this function to pass specific service parameters to the application.
     * Developers must call the service in the function and assign the return value of the service to the output_data parameter based on the @device_data_t format. 
     *
     * @dev_handle: the specific device from which Link IoT Edge calls the service.
     * @service_name: the name of the service. The service name must be the same as that in the TSL.
     * @data: the parameters of the service. The parameters must be the same as the parameters in the TSL of the device.
     * @data_count: the number of parameters of the service.
     * @output_data: the output data. Developers must set this parameter to the return value of the service based on the format defined in the TSL of the device.
     * @usr_data: the private data specified by the user when the device is registered.
     * 
     * If the request is successful, LE_SUCCESS is returned. If the request fails, an error code is returned. For more information, see the error code macros defined in the le_error.h file.
     * */
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

/*
 * Reports properties. The property reporting capability is specified in the TSL model of the product to which the device belongs.
 *
 * Reports properties. One or more properties can be reported together.
 *
 * dev_handle: the unique identifier of the device in Link IoT Edge.
 * properties: the @leda_device_data_t property array.
 * properties_count: the number of properties.
 *
 * A blocking function. If the request is successful, LE_SUCCESS is returned. If the request fails, an error code is returned.
 *
 */
int leda_report_properties(device_handle_t dev_handle, const leda_device_data_t properties[], int properties_count);

leda_report_event

/*
 * Reports device events defined in the device TSL.
 *
 * 
 * dev_handle: the unique identifier of the device in Link IoT Edge.
 * event_name: the event name.
 * data: the event parameter array @leda_device_data_t.
 * data_count: the length of the event parameter array.
 *
 * A blocking function. If the request is successful, LE_SUCCESS is returned. If the request fails, an error code is returned.
 *
 */
int leda_report_event(device_handle_t dev_handle, const char *event_name, const leda_device_data_t data[], int data_count);

leda_offline

/*
 * Disconnects a device. If a device is malfunctioning or before you shut down a device, you may want to disconnect the device. you can first disconnect the device. After the device is disconnected, Link IoT Edge will not continue to route messages to the device.
 *
 * dev_handle: the unique identifier of the device in Link IoT Edge.
 *
 * A blocking function. If the request is successful, LE_SUCCESS is returned. If the request fails, an error code is returned.
 *
 */
int leda_offline(device_handle_t dev_handle);

leda_online

/*
 * Connects the device to IoT Platform. The device can be recognized by Link IoT Edge only after the device is connected to IoT Platform.
 *
 * dev_handle: the unique identifier of the device in Link IoT Edge.
 *
 * A blocking function. If the request is successful, LE_SUCCESS is returned. If the request fails, an error code is returned.
 */
int leda_online(device_handle_t dev_handle);

leda_register_and_online_by_device_name

/*
 * Uses the device_name that has been created in the Alibaba Cloud IoT Platform to register, activate, and generate a unique identifier for the device.
 *
 * If you want to register multiple devices, you can call this function multiple times.
 *
 * product_key: the ProductKey of the product created in Alibaba Cloud IoT Platform.
 * device_name: the device name (DeviceName) that is created in the Alibaba Cloud IoT Platform.
 * device_cb: the device callback struct. For more information, see @leda_device_callback.
 * @usr_data: the private data specified by the user when the device is registered. The data is sent to the device during the callback.
 *
 * A blocking function. The unique identifier of the device in Link IoT Edge is returned. A value of 0 indicates that the device is valid and a value that is less than 0 indicates that it is invalid.
 *
 */
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

/*
 * Uses an on-premises custom device_name to register, activate, and generate a unique identifier for the device.
 *
 * If you want to register multiple devices, you can call this function multiple times.
 *
 * product_key: the ProductKey of the product created in Alibaba Cloud IoT Platform.
 * local_name: the name of the device. The names of products under the same product must be unique.
 * device_cb: the device callback struct. For more information, see @leda_device_callback.
 * @usr_data: the private data specified by the user when the device is registered. The data is sent to the device during the callback.
 *
 * A blocking function. The unique identifier of the device in Link IoT Edge is returned. A value of 0 indicates that the device is valid and a value that is less than 0 indicates that it is invalid.
 *
 * Note: You cannot use this function and the eda_register_and_online_by_device_name function at the same time. 
 * All devices of the same ProductKey must use the same function for device registration. Otherwise, the registration may result in errors.
 */
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

/*
 * Initializes the driver module. During the initialization, a worker thread pool is created in the module to asynchronously process device operation requests from IoT Platform. You can set the number of worker threads by specifying the worker_thread_nums parameter.
 *
 * worker_thread_nums: the number of threads in the thread pool. This value is set based on the number of registered devices.
 *
 * A blocking function. If the request is successful, LE_SUCCESS is returned. If the request fails, an error code is returned.
 */
int leda_init(int worker_thread_nums);

leda_exit

/*
 * Terminates the driver module.
 *
 * Before the module exits, the resources are released.
 *
 * A blocking function.
 */
void leda_exit(void);

leda_get_driver_info_size

/*
 * Obtains the length of the driver information.
 *
 * A blocking function. If the length of the driver information is obtained, LE_SUCCESS is returned. If the request fails, 0 is returned.
 */
int leda_get_driver_info_size(void);

leda_get_driver_info

/*
 * Obtains the information of the driver that is configured on IoT Platform.
 *
 * driver_info: the driver information. You must allocate the memory in advance.
 * size: the driver information length. If the size of the driver_info is larger than the size parameter, LE_ERROR_INVAILD_PARAM is returned.
 *  
 * A blocking function. If the request is successful, LE_SUCCESS is returned. If the request fails, an error code is returned.
 * 
 * The configuration format:
    {
        "json":{
            "ip":"127.0.0.1",
            "port":54321
        },
        "kv":[
            {
                "key":"ip",
                "value":"127.0.0.1",
                "note":"IP address"
            },
            {
                "key":"port",
                "value":"54321",
                "note":"Port number"
            }
        ],
        "fileList":[
            {
                "path":"device_config.json"
            }
        ]
    }
 */
int leda_get_driver_info(char *driver_info, int size);

leda_get_device_info_size

/*
 * Obtains the length of the device information.
 *
 * A blocking function. If the length of the device information is obtained, LE_SUCCESS is returned. If the request fails, 0 is returned.
 */
int leda_get_device_info_size(void);

leda_get_device_info

/*
 * Obtains the information of the device that is configured on IoT Platform.
 *
 * driver_info: the device information. You must allocate the memory in advance.
 * size: the device information length. You can obtain the length by calling the leda_get_device_info_size method. If the size of the device_info is larger than the size parameter, LE_ERROR_INVAILD_PARAM is returned.
 *  
 * A blocking function. If the request is successful, LE_SUCCESS is returned. If the request fails, an error code is returned.
 * 
 * The configuration format:
    [
        {
            "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

/*
 * Obtains the length of the driver configuration information.
 *
 * A blocking function. If the length of the driver configuration is obtained, LE_SUCCESS is returned. If the request fails, 0 is returned.
 */
int leda_get_config_size(void);

leda_get_config

/*
 * Obtains all driver configurations.
 *
 * config: the driver configuration. You must allocate the memory in advance.
 * size: the device information length. You can obtain the length by calling the leda_get_config_size method. If the size of the device_info is larger than the size parameter, LE_ERROR_INVAILD_PARAM is returned.
 *  
 * A blocking function. If the request is successful, LE_SUCCESS is returned. If the request fails, an error code is returned.
 * 
 * The configuration format:
    {
        "config":{
            "json":{
                "ip":"127.0.0.1",
                "port":54321
            },
            "kv":[
                {
                    "key":"ip",
                    "value":"127.0.0.1",
                    "note":"IP address"
                },
                {
                    "key":"port",
                    "value":"54321",
                    "note":"Port number"
                }
            ],
            "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

/*
 * The callback method that is used to modify driver configurations.
 *
 * config: the configuration information.
 *
 * A blocking function. If the request is successful, LE_SUCCESS is returned. If the request fails, an error code is returned.
 */
typedef int (*config_changed_callback)(const char *config);

leda_register_config_changed_callback

/*
 * Configure the subscription-driven configuration change listener for callbacks.
 *
 * config_cb: the callback function that is used to notify configuration changes.
 *
 * A blocking function. If the request is successful, LE_SUCCESS is returned. If the request fails, an error code is returned.
 */
int leda_register_config_changed_callback(config_changed_callback config_cb);

leda_get_tsl_size

/*
 * Obtains the length of the TSL based on the ProductKey.
 *
 * product_key: the ProductKey of the product.
 *
 * A blocking function. If the length of the TSL is obtained, LE_SUCCESS is returned. If the request fails, 0 is returned.
 */
int leda_get_tsl_size(const char *product_key);

leda_get_tsl

/*
 * Obtains the TSL information of a product based on the ProductKey.
 *
 * product_key: the ProductKey of the product.
 * tsl: the content of the TSL model. You need to apply for memory resources in advance to upload the data.
 * size: the TSL content size. You can obtain the size by calling the leda_get_tsl_size method. If the size of the tsl parameter is larger than the size parameter, LE_ERROR_INVAILD_PARAM is returned.
 *  
 * A blocking function. If the request is successful, LE_SUCCESS is returned. If the request fails, an error code is returned.
 */
int leda_get_tsl(const char *product_key, char *tsl, int size);

leda_get_tsl_ext_info_size

/*
 * Obtains the extended TSL information length of a product based on the ProductKey.
 *
 * product_key: the ProductKey of the product.
 *
 * A blocking function. If the request is successful, the length of the extended TSL information is returned. If the request fails, 0 is returned.
 */
int leda_get_tsl_ext_info_size(const char *product_key);

leda_get_tsl_ext_info

/*
 * Obtains the extended TSL information of a product based on the ProductKey.
 *
 * product_key: the ProductKey of the product.
 * tsl_ext_info: the extended TSL information. You need to request memory information in advance.
 * size: the length of the extended TSL information. You can obtain the length by calling the leda_get_tsl_ext_info_size method. If the size of the device_info is larger than the size parameter, LE_ERROR_INVAILD_PARAM is returned.
 *  
 * A blocking function. If the request is successful, LE_SUCCESS is returned. If the request fails, an error code is returned.
 */
int leda_get_tsl_ext_info(const char *product_key, char *tsl_ext_info, int size);

leda_get_device_handle

/*
 * Obtains the device handle.
 *
 * product_key: the ProductKey of the product.
 * device_name: the device name (DeviceName).
 *
 * A blocking function. If the request is successful, a device handle is returned. If the request fails, a number that is less than 0 is returned.
 */
device_handle_t leda_get_device_handle(const char *product_key, const char *device_name);