远程配置

服务端可以向设备端主动下推远程配置信息, 设备端也可以向服务端主动查询远程配置信息,设备离线期间服务端如果发布过远程配置信息, 设备端可以通过后者这种方式来获取到更改后的配置信息。

在与阿里云物联网平台建立连接之前,注册对事件ITE_COTA的处理函数,当云端修改配置之后,SDK将会调用用户注册的处理函数,处理函数需要使用IOT_Linkkit_Query来请求COTA数据。

1. 定义COTA事件回调函数及获取配置数据

下面是回调函数的示例代码,其中使用了IOT_Linkkit_Query来请求COTA数据:




static int user_cota_event_handler(int type, const char *config_id, int config_size, const char *get_type,
                                   const char *sign, const char *sign_method, const char *url)
{
    char buffer[128] = {0};
    int buffer_length = 128;
    user_example_ctx_t *user_example_ctx = user_example_get_ctx();

    if (type == 0) {
        EXAMPLE_TRACE("New Config ID: %s", config_id);
        EXAMPLE_TRACE("New Config Size: %d", config_size);
        EXAMPLE_TRACE("New Config Type: %s", get_type);
        EXAMPLE_TRACE("New Config Sign: %s", sign);
        EXAMPLE_TRACE("New Config Sign Method: %s", sign_method);
        EXAMPLE_TRACE("New Config URL: %s", url);

        IOT_Linkkit_Query(user_example_ctx->master_devid, ITM_MSG_QUERY_COTA_DATA, (unsigned char *)buffer, buffer_length);
    }

    return 0;
}               

2. 注册COTA事件回调函数

下面是示例代码:




int main(int argc, char **argv)
{
    char buffer[128] = {0};
    int buffer_length = 128;
    ...

    IOT_RegisterCallback(ITE_COTA, user_cota_event_handler);

    ...

    memset(&master_meta_info, 0, sizeof(iotx_linkkit_dev_meta_info_t));
    memcpy(master_meta_info.product_key, PRODUCT_KEY, strlen(PRODUCT_KEY));
    memcpy(master_meta_info.product_secret, PRODUCT_SECRET, strlen(PRODUCT_SECRET));
    memcpy(master_meta_info.device_name, DEVICE_NAME, strlen(DEVICE_NAME));
    memcpy(master_meta_info.device_secret, DEVICE_SECRET, strlen(DEVICE_SECRET));

    ...

    res = IOT_Linkkit_Connect(user_example_ctx->master_devid);
    if (res < 0) {
        EXAMPLE_TRACE("IOT_Linkkit_Connect Failed\n");
        return -1;
    }

...
}

设备端向服务端主动查询远程配置信息

对于设备端主动请求COTA的情况,用户仍然需要注册COTA事件的回调函数(相关代码见上面的描述)。当设备连接到阿里云物联网平台后,调用IOT_Linkkit_Query来请求云端下发COTA数据。

下面是示例代码:




int main(int argc, char **argv)
{
    ...

    user_example_ctx->master_devid = IOT_Linkkit_Open(IOTX_LINKKIT_DEV_TYPE_MASTER, &master_meta_info);
    if (user_example_ctx->master_devid < 0) {
        EXAMPLE_TRACE("IOT_Linkkit_Open Failed\n");
        return -1;
    }
    res = IOT_Linkkit_Connect(user_example_ctx->master_devid);
    if (res < 0) {
        EXAMPLE_TRACE("IOT_Linkkit_Connect Failed\n");
        return -1;
    }

    /*告知云端推送COTA数据*/
    IOT_Linkkit_Query(user_example_ctx->master_devid, ITM_MSG_REQUEST_COTA, NULL, 0);

   ...
}

远程配置功能API

更多信息,请参见API详解

需要实现的HAL