1 Zigbee应用程序框架开发指南 - 概述

2 Zigbee应用程序框架开发指南 - 应用程序框架结构

3 Zigbee应用程序框架开发指南 - 应用程序框架目录结构

4 Zigbee应用程序框架开发指南 - 生成应用程序配置文件

5 Zigbee应用程序框架开发指南 - 应用程序框架API

6 Zigbee应用程序框架开发指南 - 应用程序框架Callback接口

7 Zigbee应用程序框架开发指南 - 时间处理

8 Zigbee应用程序框架开发指南 - 事件

9 Zigbee应用程序框架开发指南 - 属性管理

10 Zigbee应用程序框架开发指南 - 命令处理和生成

11 Zigbee应用程序框架开发指南 - 命令行接口(CLI)

12 Zigbee应用程序框架开发指南 - 调试打印接口

13 Zigbee应用程序框架开发指南 - 多网络支持

14 Zigbee应用程序框架开发指南 - 睡眠设备

15 Zigbee应用程序框架开发指南 - 应用程序框架插件

16 Zigbee应用程序框架开发指南 - 扩展ZigBee Cluster Library (ZCL)

17 Zigbee应用程序框架开发指南 - 使用Ember AppBuilder设计应用程序

18 Zigbee应用程序框架开发指南 - 应用框架V6

6 应用程序框架Callback接口

Zigbee应用程序框架回调用于将所有客户代码从Zigbee应用程序框架中移除。如果您的任何应用程序代码需要放到Zigbee应用程序框架中,Silicon Labs认为这是Zigbee应用程序框架的一个缺陷,因为这意味着缺少一个满足您的应用程序需求的回调。在这种情况下,请通过https://www.silabs.com/support的联系人支持链接提交case。

通常,当回调被调用时,Zigbee应用程序框架会首先向应用程序代码发出一些传入消息或请求一些应用程序数据。在回调API中,一些回调返回一个布尔值,指示消息已被处理,不应该进行进一步处理。如果您正在执行的操作与Zigbee应用程序框架对特定消息的处理相冲突,则返回TRUE以指示消息已完成。这确保了Zigbee应用程序框架不会干扰您对消息的处理。

6.1 回调生成

AppBuilder能够为您生成一个存根回调文件。默认情况下,如果AppBuilder发现该文件已经存在于生成目录中,则选择不生成回调存根文件。您必须明确地告诉应用程序重写现有文件。

当您将来重新生成文件时,AppBuilder会询问您是否想要覆盖所生成的回调文件,从而保护您的回调文件不被覆盖。默认情况下,AppBuilder不会覆盖以前创建的任何回调文件。如果您选择覆盖文件,AppBuilder会将以前的版本备份到文件<appname>_callback.bak。

注意:你可以在任何你想要的地方实现你的回调;它们不需要在生成的回调文件中实现。但是,如果在不同的位置实现它们,请将它们从生成的回调文件中清除,这样链接器就不会报错回调函数的重复定义。

6.2 Cluster无关的回调

为了便于使用,回调接口在AppBuilder GUI中划分为多个部分。第一部分,与Cluster无关的回调,由位于tool/appbuilder/callback .xml文档中描述的回调组成。这些回调已经被手动插入到Zigbee应用程序框架代码中,这些代码位于客户希望接收关于Zigbee应用程序框架功能的信息的位置。

所有全局命令都属于这个类别。Zigbee应用程序框架包含全局命令的处理代码。如果任何全局命令回调返回TRUE,这表明该命令已由应用程序处理,不应该进行进一步的命令处理。如果回调返回FALSE,则Zigbee应用程序框架将继续正常处理该命令。

示例:
预命令接收回调(emberAfPreCommandReceivedCallback(EmberAfClusterCommand* cmd, boolean isInterpan)在接收到ZCL命令但尚未被Zigbee应用程序框架的命令处理代码处理之后调用。该命令被解析为一个有用的struct EmberAfClusterCommand,它提供了一种简单的方法来访问关于该命令的相关数据,包括它的EmberApsFrame、消息类型、源、缓冲区、长度以及该命令的任何相关标志。此回调还返回一个布尔值,指示是否已处理该命令。如果回调返回TRUE,则假定应用程序已经处理了该命令,并且没有采取进一步的操作。

6.3 特殊Cluster命令处理回调

与cluster相关的回调由Zigbee应用程序框架生成,以允许接收来自空中的预先解析的命令。通常,ZCL命令和特定于cluster的回调之间存在一对一的关系。

特定于cluster的命令回调都返回一个布尔值。这个返回值允许您使包含在应用程序框架中的命令处理不工作。如果您实现一个特定于cluster的命令回调,并且它返回一个值TRUE到Zigbee应用程序框架,该框架就会假定该命令已经在框架之外处理过,并且任何需要的命令或默认响应都已经发送了。如果特定于cluster的命令返回FALSE,则框架假设应用程序代码不理解该命令,并发送一个状态为“unsupported cluster command”的默认响应。

6.3.1 命令回调上下文

所有与命令相关的回调都是从emberIncomingMessageHandler上下文中调用的。这意味着在该上下文中对应用程序可用的Ember api也可以在处理回调的命令中使用。这些API被列出在位于stack/include/message.h的堆栈API文件中。命令回调中可用的堆栈api被列出在位于stack/include/message.h的堆栈消息头中,包括:

emberGetLastHopLqi()
emberGetLastHopRssi()
emberGetSender()
emberGetSenderEui64()
emberGetBindingIndex()
emberSendReply() (for incoming APS retried unicasts only)
emberSetReplyBinding()
emberNoteSendersBinding()

6.3.2 在命令回调中处理数组

任何包含参数数组的ZigBee消息都作为指向数组开头的int8u*指针传递。即使框架知道数组中的参数可能是另一种类型(比如int16u或int32u),也会执行此操作,因为框架可能在其上运行的各种处理器上存在字节对齐问题。实现回调的开发人员必须解析数组并对其元素进行适当的转换。

6.3.3 全局命令回调

ZigBee全局命令也包含在ZigBee应用程序框架回调接口中。这些回调可以用来接收对全局命令的响应。例如,如果您的设备向另一个设备发送一个全局读属性命令,它可以通过实现emberAfReadAttributesResponseCallback来处理命令响应。

6.2 回调流程

图2显示了如何处理应用程序框架的emberIncomingMessageHandler实现接收到的消息,并通过框架代码流向实现回调的应用程序。

图2接收消息流程

一旦传入消息被确定为传入全局命令,它就被传递给全局命令处理进行处理,如图3所示。

图3 全局命令处理

否则,如果发现它是特定于Cluster的命令,则将其传递给特定于Cluster的命令处理,如图4所示。

图4 特殊Cluster命令处理

6.3 回调引用

注意,这个文档中包含的回调引用已经被删除,取而代之的是文档120-3023-000中提供的引用,Zigbee应用程序框架API引用。该文档中包含的引用是直接从头文件生成的,因此比本文档中提供的引用更新得更快。

6. Zigbee应用程序框架开发指南 - 应用程序框架Callback接口相关推荐

  1. 9. Zigbee应用程序框架开发指南 - 属性管理

    1 Zigbee应用程序框架开发指南 - 概述 2 Zigbee应用程序框架开发指南 - 应用程序框架结构 3 Zigbee应用程序框架开发指南 - 应用程序框架目录结构 4 Zigbee应用程序框架 ...

  2. 程序员开发什么小程序挣钱_作为程序员赚钱的5种独特方式

    程序员开发什么小程序挣钱 1.赚钱报告错误 (1. Make money reporting bugs) You can earn money by helping other companies f ...

  3. 小程序云开发搜索功能的实现正则_码code | 如何借助小程序云开发实现小程序支付功能...

    转载来源:编程小石头 我们在做小程序支付相关的开发时,总会遇到这些难题.小程序调用微信支付时,必须要有自己的服务器,有自己的备案域名,有自己的后台开发.这就导致我们做小程序支付时的成本很大. 本节就来 ...

  4. PHP程序员开发win32应用程序之梦

    相信做纯WEB开发的PHP程序员都会想过,要是PHP能开发windows本地应用程序多好,于是上网一查找出来的很多都是"PHP-GTK"的老文章,这东西好像已经没人维护了,随便看了 ...

  5. 小程序云开发_小程序开发进入云原生时代 加速构建开发者生态

    2019-11-07 16:44 作为Serverless理念大规模落地的最佳实践,"小程序·云开发"正受到越来越多的关注. 11月7日,在腾讯Techo开发者大会"小程 ...

  6. 10行代码实现微信小程序支付功能,使用小程序云开发实现小程序支付功能(含源码

    前面给大家讲过一个借助小程序云开发实现微信支付的,但是那个操作稍微有点繁琐,并且还会经常出现问题,今天就给大家讲一个简单的,并且借助官方支付api实现小程序支付功能. 传送门 借助小程序云开发实现小程 ...

  7. Jdon框架开发指南

    Jdon框架快速开发指南 开发主要步骤如下: JdonFramework6.0以上两步开发见这里. 快速配置指南 新增/查询/修改/删除(CRUD); 批量查询和分页显示 本文Step By Step ...

  8. 「小程序」开发 指南(里面是小程序开发的各种论坛和文档)

    之前研究小程序,看到了一篇小程序的开发帖子,在这分享给大家. 什么是微信小程序? 微信之父张小龙是这样描述小程序的: 小程序是一个不需要下载安装就可使用的应用,它实现了应用触手可及的梦想,用户扫一扫或 ...

  9. 教你用Java7的Fork/Join框架开发高并发程序

    摘要:Fork/Join框架位于J.U.C(java.util.concurrent)中,是Java7中提供的用于执行并行任务的框架,其可以将大任务分割成若干个小任务,最终汇总每个小任务的结果后得到最 ...

  10. 使用AUI框架开发微信小程序

    前言: 之前开发小程序一直都是自己写css代码,这样做极其考验耐性,开发效率又特别的低,于是突发奇想能不能用AUI开发微信小程序.忙碌了近两个小时,也算是小有成效.下面就和大家分享一下. 难点: 1. ...

最新文章

  1. Qomolangma实现篇(七):Qomo的接口机制
  2. 纸上谈兵: 哈希表 (hash table)
  3. Java HashMap 核心源码解读
  4. python手机端自动点赞_python自动点赞功能的实现思路
  5. java项目close wait_java – 排除连接卡在CLOSE_WAIT状态
  6. 如何使用 C# 中的 ValueTask
  7. 初中计算机课教什么时候,初中计算机教学课程教学方法探讨
  8. 双11特刊|购物车实时显示到手价,看云原生内存数据库Tair如何提升用户体验?
  9. 操作系统(8)-存储系统
  10. pearson, kendall 和spearman三种相关分析方法的区别
  11. c++ 正态分布如何根据x求y_knn实战:如何对手写数字进行识别?
  12. 各种接口的硬盘在linux中的文件名
  13. 区块链 什么是RLP编码
  14. GCD and LCM HDU 4497 数论
  15. 开源系统的选择-比较全面的各类开源应用系统列表
  16. 关于校企合作的一些想法和思路
  17. h5截长图(html2canvas保存图片)
  18. 数字人还能设计数字藏品?希加加xQee创作人间十二月
  19. 内存取证之Volatility ——合天网安实验室学习笔记
  20. 风格迁移-风格损失函数(Gram矩阵)理解

热门文章

  1. BCH分叉是一次站队博弈
  2. ipa文件生成扫码安装二维码的方法
  3. python获取代理服务器地址
  4. JasperReport:数据填充和多种类别报表
  5. 初识DNA甲基化芯片
  6. 无人车系统(八):Udacity ‘s无人驾驶仿真环境(python与c++数据接口)
  7. GIT:cherry-pick挑拣提交
  8. 团队合作开发常用git操作
  9. FPGA学习日志——VGA接口项目
  10. 网络爬虫爬取时,被封的原因以及防止被封IP策略