设备控制

设备与平台成功建立连接后,可接收云平台下发的设备控制指令,如服务调用、属性设置等。这里以属性设置为例描述设备控制流程,包括Topic订阅和Topic消息处理两部分。

以Linux版C语言SDK为例,Topic订阅流程为:
1、新建Topic句柄,用以保存组装好的数据;
2、根据三元组信息,组装属性设置的Topic;
3、调用Subscribe函数向云平台订阅该Topic,并指定该Topic消息的处理函数,若返回OK则订阅成功;
4、释放Topic占用的系统空间;

订阅代码:

  1. char * topic_ptr = NULL;
  2. char * payload_ptr = NULL;
  3. /* Build property set topic. */
  4. if((result = SIL_tslm_btopic_propset(pkey_ptr, devname_ptr, &topic_ptr)) == 0)
  5. {
  6. printf("TSLM: build property set topic success. \n");
  7. }
  8. else
  9. {
  10. printf("TSLM: Build property set topic failure. \n");
  11. goto ERR_EXIT;
  12. }
  13. printf("sub topic : %s\n",topic_ptr);
  14. /* Subscribe topic. */
  15. if((result = SIL_lconn_sub2cloud(fd, topic_ptr, &AEL_lconn_sub_cb)) == 0)
  16. {
  17. printf("LCONN: Subscribe property set topic to cloud success. \n");
  18. }
  19. else
  20. {
  21. printf("LCONN: Subscribe property set topic to cloud failure. \n");
  22. goto ERR_EXIT;
  23. }
  24. ERR_EXIT:
  25. if(topic_ptr != NULL)
  26. {
  27. SIL_tslm_free(topic_ptr);
  28. topic_ptr = NULL;
  29. }

在订阅Topic时,向SDK传递了Topic消息的处理函数,消息到来后在处理函数中的流程为:
1、新建Topic句柄和Payload句柄,用以保存解析好的数据;
2、提取Topic和Payload返回给句柄;
3、将解析好的数据传递给另一Thread进行后续处理;
4、退出该函数,且无需释放Topic和Payload句柄所指向空间;

处理代码:

  1. void AEL_lconn_sub_cb(void *msg_ptr)
  2. {
  3. int result = 0;
  4. char * topic_ptr = NULL;
  5. char * payload_ptr = NULL;
  6. int topic_len = 0;
  7. int payload_len = 0;
  8. /* Get Topic string. */
  9. if((result = SIL_lconn_get_topic(&topic_ptr, &topic_len, msg_ptr)) != 0)
  10. {
  11. printf("Topic Failure: errno = %d. \n", result);
  12. }
  13. /* Get Payload string. */
  14. if((result = SIL_lconn_get_payload(&payload_ptr, &payload_len, msg_ptr)) != 0)
  15. {
  16. printf("Payload Failure: errno = %d. \n", result);
  17. }
  18. /* Give topic and payload to other handle thread. */
  19. }
即刻开始使用

只需完成注册与实名认证,即可体验我们的贴心服务