服务端可以向设备端主动下推远程配置信息, 设备端也可以向服务端主动查询远程配置信息,设备离线期间服务端如果发布过远程配置信息, 设备端可以通过后者这种方式来获取到更改后的配置信息。
在与阿里云物联网平台建立连接之前,注册对事件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
无
文档内容是否对您有帮助?