全部产品
云市场

旧版本物模型开发文档

更新时间:2018-11-22 16:02:00

物模型管理旧版API

函数名 说明
linkkit_start] 启动 linkkit 服务, 与云端建立连接并安装回调函数
linkkit_end 停止 linkkit 服务, 与云端断开连接并回收资源
linkkit_dispatch 事件分发函数, 触发 linkkit_start安装的回调
linkkit_yield linkkit 主循环函数, 内含了心跳的维持, 服务器下行报文的收取等; 如果允许多线程, 请不要调用此函数
linkkit_set_value 根据identifier设置物对象的 TSL 属性
linkkit_get_value 根据identifier获取物对象的 TSL 属性
linkkit_set_tsl 从本地读取 TSL 文件,生成物的对象并添加到 linkkit 中
linkkit_answer_service 对云端服务请求进行回应
linkkit_invoke_raw_service 向云端发送裸数据
linkkit_trigger_event 上报设备事件到云端
linkkit_fota_init 初始化 OTA-fota 服务, 并安装回调函数(需编译设置宏 OTA_ENABLED)
linkkit_invoke_fota_service 执行fota服务
linkkit_cota_init 初始化 OTA-cota 服务, 并安装回调函数(需编译设置宏 OTA_ENABLED)
linkkit_invoke_cota_get_config 设备请求远程配置
linkkit_invoke_cota_service 执行cota服务
linkkit_post_property 上报设备属性到云端
linkkit_set_opt 设置设备属性和服务上报参数
linkkit_try_leave 设置linkkit离开标志
linkkit_is_try_leave 获取linkkit离开标志
linkkit_is_end 获取linkkit结束标志
linkkit_trigger_extended_info_operate 设备拓展信息上报或删除
linkkit_ntp_time_request 设备通过NTP协议从云端获取NTP时间

1. 用户只需要调用linkkit_start()便可以完成linkkit的初始化, 并与云端建立连接

用户可配置是否从云端拉取TSL, 将 get_tsl_from_cloud 设置为 1 即可

  1. int get_tsl_from_cloud = 0; /* the param of whether it is get tsl from cloud */
  2. linkkit_ops_t linkkit_ops = {
  3. .on_connect = on_connect, /* connect handler */
  4. .on_disconnect = on_disconnect, /* disconnect handler */
  5. .raw_data_arrived = raw_data_arrived, /* receive raw data handler */
  6. .thing_create = thing_create, /* thing created handler */
  7. .thing_enable = thing_enable, /* thing enabled handler */
  8. .thing_disable = thing_disable, /* thing disabled handler */
  9. .thing_call_service = thing_call_service, /* self-defined service handler */
  10. .thing_prop_changed = thing_prop_changed, /* property set handler */
  11. .linkit_data_arrived = linkit_data_arrived, /* transparent transmission data handler */
  12. };
  13. EXAMPLE_TRACE("linkkit start");
  14. if (-1 == linkkit_start(16, get_tsl_from_cloud, linkkit_loglevel_debug, &linkkit_ops, linkkit_cloud_domain_shanghai,
  15. &sample_ctx)) {
  16. EXAMPLE_TRACE("linkkit start fail");
  17. return -1;
  18. }

2. 对于本地预置TSL的情况, 需要调用linkkit_set_tsl()导入TSL文件

  1. if (!get_tsl_from_cloud) {
  2. /*
  3. * if get_tsl_from_cloud = 0, set default tsl [TSL_STRING]
  4. * please modify TSL_STRING by the TSL's defined.
  5. */
  6. linkkit_set_tsl(TSL_STRING, strlen(TSL_STRING));
  7. }

3. 若需要使用FOTA和COTA功能, 可紧接在linkkit_start()后进行初始化

  1. linkkit_cota_init(linkkit_cota_callback);
  2. linkkit_fota_init(linkkit_fota_callback);

4. 在单线程场景下, while循环中会包含linkkit_dispatch()linkkit_yield()两个函数. 分别用于消息的处理分发和服务器下行数据的收取, 心跳的维持

  1. while (1) {
  2. /*
  3. * if linkkit is support Multi-thread, the linkkit_dispatch and linkkit_yield with callback by linkkit,
  4. * else it need user to call these function to received data.
  5. */
  6. #if (CONFIG_SDK_THREAD_COST == 0)
  7. linkkit_dispatch();
  8. #endif
  9. now = uptime_sec();
  10. if (prev_sec == now) {
  11. #if (CONFIG_SDK_THREAD_COST == 0)
  12. linkkit_yield(100);
  13. #else
  14. HAL_SleepMs(100);
  15. #endif /* CONFIG_SDK_THREAD_COST */
  16. continue;
  17. }
  18. ...
  19. }

5. 如下代码段, 属性的上报可以通过linkkit_set_value(), linkkit_post_property()这两个函数的组合来完成, 云端返回的应答可在post_property_cb()中得到处理

  1. linkkit_set_value(linkkit_method_set_property_value, sample_ctx->thing, "WIFI_Band", band, NULL);
  2. linkkit_post_property(sample_ctx->thing,"WIFI_Band",post_property_cb);
  3. linkkit_set_value(linkkit_method_set_property_value, sample_ctx->thing, "WIFI_Channel", &channel, NULL);
  4. linkkit_post_property(sample_ctx->thing,"WIFI_Channel",post_property_cb);
  5. linkkit_set_value(linkkit_method_set_property_value, sample_ctx->thing, "WiFI_RSSI", &rssi, NULL);
  6. linkkit_post_property(sample_ctx->thing,"WiFI_RSSI",post_property_cb);
  7. linkkit_set_value(linkkit_method_set_property_value, sample_ctx->thing, "WiFI_SNR", &snr, NULL);
  8. linkkit_post_property(sample_ctx->thing,"WiFI_SNR",post_property_cb);

6. 事件的上报可以通过linkkit_set_value(), linkkit_trigger_event()这两个函数的组合来完成, 云端返回的应答可在post_property_cb()中得到处理

  1. int trigger_event(sample_context_t *sample)
  2. {
  3. char event_output_identifier[64];
  4. snprintf(event_output_identifier, sizeof(event_output_identifier), "%s.%s", EVENT_ERROR_IDENTIFIER, EVENT_ERROR_OUTPUT_INFO_IDENTIFIER);
  5. int errorCode = 0;
  6. linkkit_set_value(linkkit_method_set_event_output_value,
  7. sample->thing,
  8. event_output_identifier,
  9. &errorCode, NULL);
  10. return linkkit_trigger_event(sample->thing, EVENT_ERROR_IDENTIFIER, post_property_cb);
  11. }

7. 设备可以通过linkkit_ntp_time_request从云端获取NTP时间, 该操作是一个异步操作, 用户通过该API告知Linkkit从云端获取NTP时间, 该API就会返回了. 等到Linkkit成功从云端获取NTP时间后, 再通过回调函数告知用户. 另外, 该API只有在设备和云端成功连接连接后才可以使用.

  1. int linkkit_ntp_time_request(void (*ntp_reply)(const char *ntp_offset_time_ms));
  2. void ntp_reply(const char *ntp_offset_time_ms)
  3. {
  4. printf("ntp offset time:%s\n", ntp_offset_time_ms); //相对于1900年1月1日 00:00:00的偏移时间, 以ms为单位
  5. }