服務端可以向設備端主動下推遠程配置信息, 設備端也可以向服務端主動查詢遠程配置信息,設備離線期間服務端如果發布過遠程配置信息, 設備端可以通過后者這種方式來獲取到更改后的配置信息。
在與阿里云物聯網平臺建立連接之前,注冊對事件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
無
文檔內容是否對您有幫助?