本系列主要目的在于记录腾讯云物联网设备端的学习笔记,并且对设备端SDK进行补充说明。
简介
广播功能是较为简单的功能,设备端订阅主题后,服务器通过云API(PublishBroadcastMessage)下发消息,设备端即可收到广播消息。
下面主要以广播功能为例子,介绍下如何基于iot-hub-device-c-sdk 实现该功能。
实现
模块添加
在services/hub/broadcast/新增模块,需要实现
- src:模块源码,提供sdk外部接口
- inc:模块内部使用头文件,本功能中无
- sample:示例代码,调用接口的示例
- test:单元测试用例编写
- CMakeLists.txt:cmake脚本,简单设置下源码和头文件路径,添加示例和单元测试即可
广播功能主要实现两个接口:
- IOT_Broadcast_Init :订阅广播主题,并注册用户回调用作处理广播消息
- IOT_Broadcast_Deinit :取消订阅广播主题
源码实现(见broadcast.c),以下简单说明下设计思路:
- IOT_Broadcast_Init :主要分为两部分:
- 构建topic:topic通常由固定字段和设备唯一标识(product id device name)构成
- 订阅主题:根据topici调用IOT_MQTT_Subscribe订阅主题,在IOT_MQTT_Yield中接收SUBACK根据
IOT_MQTT_IsSubReady的结果进行多次重试
- IOT_Broadcast_Uninit :根据topici调用IOT_MQTT_Unsubscribe取消订阅主题
- 用户回调(OnBroadcastArrivedCallback):用户一般只需对消息的payload部分进行处理,所以sdk中可以注册主题的消息处理回调,然后获取payload传递给用户回调,详见_broadcast_message_cb
对外头文件添加
在include/services/hub中添加对外头文件qcloud_iot_broadcast.h,主要提供对外接口
编译添加
在config/settings/iot_hub_setting.cmake中添加模块编译,简单将对应目录添加到编译即可,会自动检测目录下的CMakeLists.txt
代码语言:javascript复制add_subdirectory(${PROJECT_SOURCE_DIR}/services/hub/broadcast)