SDKV1.6.0中网关产品示例代码

发布时间:2024-12-29 05:56

阅读并理解代码示例,模仿编写 #生活技巧# #数码产品使用技巧# #编程入门指南#

请您根据需求下载生活物联网平台SDK。详细下载地址请参见获取SDK。

包含AliOS Things的SDK,网关参考应用程序位于Products/example/linkkit_gateway/,代码文件如下。

gateway_cmds.c gateway_cmds.h gateway_entry.c gateway_entry.h gateway_main.c gateway_main.h gateway_ut.c gateway_ut.h gateway_api.c gateway_api.h

无AliOS Things的SDK,网关参考应用程序位于examples/linkkit/gateway/,代码文件如下。

gateway_entry.c gateway_entry.h gateway_main.c gateway_main.h gateway_ut.c gateway_ut.h gateway_api.c gateway_api.h

说明

:此处相比于包含AliOS Things版本的SDK,源代码少了gateway_cmds.c与gateway_cmds.h文件,其他代码一样。

下面详细介绍网关参考应用的文件。

gateway_entry.c

gateway_entry.c为应用程序主入口文件。

说明

本文中,四元组分别指的是ProductKey、ProductSecret、DeviceName和DeviceSecret。

int application_start(int argc, char **argv) { ... ... ... ... ... ... ... ... ... 设置默认的日志级别 #ifdef DEFAULT_LOG_LEVEL_DEBUG IOT_SetLogLevel(IOT_LOG_DEBUG); #else #ifdef CSP_LINUXHOST IOT_SetLogLevel(IOT_LOG_DEBUG); #else IOT_SetLogLevel(IOT_LOG_INFO); #endif #endif 加载四元组信息,用户需要实现该函数 load_device_meta_info(); ... ... ... ... ... ... ... ... ... 注册连云成功回调函数,执行ota初始化 IOT_RegisterCallback(ITE_MQTT_CONNECT_SUCC, mqtt_connected_event_handler); 注册串口命令,代码在gateway_cmds.c中 #ifdef CONFIG_AOS_CLI gateway_register_cmds(); #endif ... ... ... ... ... ... ... ... ... main函数的loop循环 aos_loop_run(); return 0; }

gateway_main.c

由于子设备的某些入网操作是同步阻塞式的,该文件里已创建了如下两个线程。

user_dispatch_yield线程:执行Link Kit SDK代码及注册的用户回调函数。

gateway_main主线程:调用Link Kit SDK接口,以及处理与子设备间的通信。

gateway_cmds.c

此文件主要包括命令行相关的功能代码,方便测试和调试操作。

gateway_ut.c

此文件为用户测试代码,例如kv模拟子设备信息、get topo list之后上线子设备、permit join的时候模拟添加子设备等。

gateway_api.c

此文件是对子设备操作的SDK接口函数的封装,支持的功能有添加子设备、删除子设备、复位子设备、查询子设备ID等操作,您可以直接使用该接口函数。

添加一个子设备

添加一个子设备需要对SDK进行三次接口调用。

调用IOT_Linkkit_Open:将子设备添加到网关本地的数据结构。

调用IOT_Linkkit_Connect:将子设备注册并添加拓扑关系到云端。

调用IOT_Linkkit_Report:告诉云端子设备上线了。

GATEWAY_API int gateway_add_subdev(iotx_linkkit_dev_meta_info_t *subdev_mate) { ... ... ... ... ... ... ... ... ... devid = IOT_Linkkit_Open(IOTX_LINKKIT_DEV_TYPE_SLAVE, subdev_mate); ... ... ... ... ... ... ... ... ... res = IOT_Linkkit_Connect(devid); ... ... ... ... ... ... ... ... ... res = IOT_Linkkit_Report(devid, ITM_MSG_LOGIN, NULL, 0); ... ... ... ... ... ... ... ... ... }

批量添加子设备

通过IOT_Linkkit_Report( ... ITM_MSG_CONNECT_SUBDEV ...)支持最多一次批量添加五个子设备。

如果批量添加成功就调用IOT_Linkkit_Report(subdev_id, ITM_MSG_LOGIN, NULL, 0)上线对应的子设备。

GATEWAY_API int gateway_add_multi_subdev(int master_devid, iotx_linkkit_dev_meta_info_t *subdev_list, int subdev_num) { ... ... ... ... ... ... ... ... ... connect_times = subdev_num / GATEWAY_SUBDEV_ONE_TIME_CONNECT_MAX_NUM + (((subdev_num % GATEWAY_SUBDEV_ONE_TIME_CONNECT_MAX_NUM) == 0) ? 0 : 1); for (index = 0; index < connect_times; index++) { ... ... ... ... ... ... ... ... ... res = IOT_Linkkit_Report(master_devid, ITM_MSG_CONNECT_SUBDEV, (unsigned char *)p_cur_subdev, sizeof(iotx_linkkit_dev_meta_info_t) * cur_subdev_num); if (res == SUCCESS_RETURN) { 批量上线子设备 res = IOT_Linkkit_Report(subdev_id, ITM_MSG_BATCH_LOGIN, (unsigned char *)p_cur_subdev, sizeof(iotx_linkkit_dev_meta_info_t) * cur_subdev_num); ... ... ... ... ... ... ... ... ... } } return res; }

删除一个子设备

调用函数IOT_Linkkit_Report(subdev_id, ITM_MSG_DELETE_TOPO, (unsigned char *)subdev_mate, sizeof(iotx_linkkit_dev_meta_info_t))删除一个子设备和网关的拓扑关系,同时会释放网关中子设备的资源。

说明

删除子设备时,优先根据子设备的ProductKey和DeviceName查找子设备,找到就直接删除;如果找不到子设备,则根据第一个参数subdev_id继续查找。

GATEWAY_API int gateway_del_subdev(iotx_linkkit_dev_meta_info_t *subdev_mate) { ... ... ... ... ... ... ... ... ... //Here pk and dn of subdev is priorior than subdev id ret = IOT_Linkkit_Report(subdev_id, ITM_MSG_DELETE_TOPO, (unsigned char *)subdev_mate, sizeof(iotx_linkkit_dev_meta_info_t)); ... ... ... ... ... ... ... ... ... }

复位一个子设备

调用函数IOT_Linkkit_Report(subdev_id, ITM_MSG_SUBDEV_RESET, (unsigned char *)subdev_mate, sizeof(iotx_linkkit_dev_meta_info_t))复位一个子设备,复位子设备除了会删除和网关的拓扑关系之外,还会删除子设备和手机用户账号的绑定关系,同时会释放网关中子设备的资源。

说明

复位子设备时,优先根据子设备的ProductKey和DeviceName查找子设备,找到就直接复位;如果找不到子设备,则根据第一个参数subdev_id继续查找。

GATEWAY_API int gateway_reset_subdev(iotx_linkkit_dev_meta_info_t *subdev_mate) { ... ... ... ... ... ... ... ... ... //Here pk and dn of subdev is priorior than subdev id ret = IOT_Linkkit_Report(subdev_id, ITM_MSG_SUBDEV_RESET, (unsigned char *)subdev_mate, sizeof(iotx_linkkit_dev_meta_info_t)); ... ... ... ... ... ... ... ... ... }

查询一个子设备的DeviceID

调用函数IOT_Linkkit_Query(master_devid, ITM_MSG_QUERY_SUBDEV_ID, (unsigned char *)subdev_mate, sizeof(iotx_linkkit_dev_meta_info_t));根据子设备的ProductKey和DeviceName信息查询一个子设备的DeviceID(数据结构索引,为大于0的整数)。

GATEWAY_API int gateway_query_subdev_id(int master_devid, iotx_linkkit_dev_meta_info_t *subdev_mate) { ... ... ... ... ... ... ... ... ... subdev_id = IOT_Linkkit_Query(master_devid, ITM_MSG_QUERY_SUBDEV_ID, (unsigned char *)subdev_mate, sizeof(iotx_linkkit_dev_meta_info_t)); ... ... ... ... ... ... ... ... ... }

批量上线子设备接口

该接口函数会将输入的子设备数组拆分成五个一组进行批量上线。

GATEWAY_API int gateway_batch_login(int master_devid, iotx_linkkit_dev_meta_info_t *subdev_list, int subdev_num) { ... ... ... ... ... ... ... ... ... for (index = 0; index < connect_times; index++) { ... ... ... ... ... ... ... ... ... res = IOT_Linkkit_Report(subdev_id, ITM_MSG_BATCH_LOGIN, (unsigned char *)p_cur_subdev, sizeof(iotx_linkkit_dev_meta_info_t) * cur_subdev_num); ... ... ... ... ... ... ... ... ... return res; }

批量下线子设备接口

该接口函数会将输入的子设备数组拆分成五个一组进行批量下线。

GATEWAY_API int gateway_batch_logout(int master_devid, iotx_linkkit_dev_meta_info_t *subdev_list, int subdev_num) { ... ... ... ... ... ... ... ... ... for (index = 0; index < connect_times; index++) { ... ... ... ... ... ... ... ... ... res = IOT_Linkkit_Report(subdev_id, ITM_MSG_BATCH_LOGOUT, (unsigned char *)p_cur_subdev, sizeof(iotx_linkkit_dev_meta_info_t) * cur_subdev_num); ... ... ... ... ... ... ... ... ... } return res; }

网址:SDKV1.6.0中网关产品示例代码 https://www.yuejiaxmz.com/news/view/597658

相关内容

端午节相关庆祝代码的示例资源
Python模拟简易版淘宝客服机器人的示例代码
京东商城优惠券,京东数码产品代金券,数码产品每满2000
数码产品:
数码产品照片
现代人最常用的数码产品有哪些 – PingCode
flask框架二手电子产品交易网(毕设源码+论文)
竞争激烈换代迅速数码产品终身维修难
从代码到哲学:编程中的启示与人生思考
电子数码产品(数码电子产品该怎么保养)

随便看看