远程配置
服务端可以向设备端主动下推远程配置信息, 设备端也可以向服务端主动查询远程配置信息,设备离线期间服务端如果发布过远程配置信息, 设备端可以通过后者这种方式来获取到更改后的配置信息。
更多COTA相关功能说明可查看远程配置
服务端向设备端主动下推远程配置信息
在与阿里云物联网平台建立连接之前,注册对事件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
函数名 | 说明 |
---|---|
IOT_Linkkit_Open | 创建本地资源, 在进行网络报文交互之前, 必须先调用此接口, 得到一个会话的句柄 |
IOT_Linkkit_Connect | 对主设备/网关来说, 将会建立设备与云端的通信. 对于子设备来说, 将向云端注册该子设备(若需要), 并添加主子设备拓扑关系 |
IOT_Linkkit_Yield | 若SDK占有独立线程, 该函数只将接收到的网络报文分发到用户的回调函数中, 否则表示将CPU交给SDK让其接收网络报文并将消息分发到用户的回调函数中 |
IOT_Linkkit_Close | 若入参中的会话句柄为主设备/网关, 则关闭网络连接并释放SDK为该会话所占用的所有资源 |
IOT_Linkkit_Query | 向云端发送存在云端业务数据下发的查询报文, 包括OTA状态查询/OTA固件下载/子设备拓扑查询/NTP时间查询等各种报文 |
需要实现的HAL
无