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

8 事件

Zigbee应用程序框架及其相关的cluster代码使用Zigbee stack事件机制来调度SoC和主机上的事件。使用Zigbee事件机制可以节省代码和RAM,并且在休眠设备上工作得更好。

在较高的级别上,事件机制提供了一个中心位置,根据用户输入、无线命令或设备初始化,可以激活和停用设备采取的所有定期操作。事件机制优于它所取代的常量滴答机制,因为它允许Zigbee应用程序框架精确地知道下一个操作何时将在设备上发生。这对于睡眠设备来说是非常重要的,因为这些设备需要准确地知道它们什么时候必须醒来采取一些行动—或者更重要的是,它们不能入睡,因为一些事件正在发生。Zigbee应用程序框架有两种类型的事件:自定义事件和cluster事件。自定义事件由Zigbee应用程序框架用户创建,可用于应用程序中的任何目的。cluster事件与Zigbee应用程序框架插件中的cluster实现特别相关。

8.1 创建一个自定义事件

Zigbee应用程序框架使用Zigbee标准事件机制来控制和运行Zigbee应用程序框架内的“自定义”应用程序事件。Stack的事件机制记录在位于stack/include/event.h的event.h头文件中。

Zigbee应用程序框架和AppBuilder为创建和向应用程序添加定制事件提供了一个有用的接口。要在AppBuilder中创建自定义事件,请打开AppBuilder配置文件中的“include”选项卡。在“Event Configuration”部分单击Add new。这将一个事件添加到将由Zigbee应用程序框架运行的事件列表中,以及AppBuilder生成的“callbacks”文件的自定义事件存根。

8.1.1 事件功能和事件控制

自定义事件由两部分组成:事件函数(在事件触发时调用)和EmberEventControl结构(用于调度事件)。框架的事件机制必须知道这些项的每一个,以便它既可以跟踪下一个事件何时发生,以便睡觉,也可以知道当事件触发时调用哪个函数。在位于stack/include/event.h的event.h头文件中提供了关于创建事件的更多文档。

8.1.2 自定义事件示例

Z3Light示例应用程序使用自定义事件来管理其状态。该事件由两部分组成:EmberEventControl结构体(称为commissioningLedEventControl)和event函数(在每次事件触发时调用该函数)。该事件函数称为commitoningledeventhandler。事件和事件控件包含在示例应用程序附带的z3light_callks .c文件中。当基于此示例场景创建新应用程序时,可以在AppBuilder中的“General”选项卡的描述字段中找到Z3Light应用程序的文档。

8.2 怎样创建Cluster事件

每个Cluster都包括一个服务器和一个客户端“tick”回调。AppBuilder为每个endpoint上的每个Cluster服务器或客户机生成一个事件表,其中包含一个事件。实际的事件表被生成到<DeviceName>_endpoint_config.h报头中,该报头包含在Zigbee应用程序框架的事件代码中,并在app/framework/util/af-event.c中使用。

注意:事件表是在编译时创建的,并且是静态的。因此,事件不能在运行时从事件表中随机添加或删除。事件表条目必须存在,然后代码可以管理其日程安排,使其处于活动状态并等待调用,或者处于停用状态并等待激活和调度。

8.3 如何调度Cluster事件

插件或应用程序代码可以通过使用Zigbee应用程序框架的事件管理API来管理事件表中与Cluster相关的事件。这个API由两个函数组成,emberAfScheduleClusterTick和emberAfDeactivateClusterTick。

tick是事件系统中使用的基本时间单位。tick的持续时间取决于正在使用的平台。使用当前的Zigbee平台,1个tick大约等于

其中,MILLISECOND_TICKS_PER_SECOND是每秒时钟滴答的数量。因此,当调用emberAfScheduleClusterTick时,delayMs参数的值为t,该事件将在不小于

的范围内运行,当然,这个值的实际误差取决于时钟源的可靠性。

8.3.1 emberAfScheduleClusterTick

emberAfScheduleClusterTick使用endpoint,、cluster id和客户机/服务器标识来查找事件表中的关联事件。事件表条目由Ember AppBuilder生成到_endpoint_config.h。如果它找不到事件表条目,emberAfScheduleClusterTick将EmberStatus EMBER_BAD_ARGUMENT返回给调用者。如果找到了事件表条目,那么它就按照调用者请求的毫秒数安排事件的发生,并返回EMBER_SUCCESS。

EmberStatus emberAfScheduleClusterTick( int8u endpoint, int16u clusterId, boolean isClient, int32u timeMs, EmberAfEventSleepControl sleepControl);

EmberAfEventSleepControl参数允许调用者指示当事件在事件表中处于活动状态时设备可能执行的操作。此值仅与休眠设备相关;它对不睡觉的设备没有影响。EmberAfEventSleepControl的可能值在app/framework/include/af-types中枚举。h,如下:

  • EMBER_AF_OK_TO_HIBERNATE意味着应用程序可能会进入长时间的深度睡眠状态,直到需要调用事件为止。如果调度代码直到调用事件时都不关心设备做什么,则使用此睡眠控制值。
  • EMBER_AF_OK_TO_NAP意味着设备应该在小睡期间睡眠,并且应该在小睡期间醒来进行轮询,直到调用事件为止。如果调度代码希望设备周期性地轮询,直到调用事件,那么可以使用此睡眠控制值。如果计划的事件是等待来自网络上另一个设备的响应的超时,那么这一点特别有用。如果事件是超时,您不希望设备进入休眠状态,直到调用超时,因为它永远不会听到它正在等待的消息,从而确保将调用超时。
  • EMBER_AF_STAY_AWAKE表示设备不应该处于睡眠状态,而是应该保持清醒状态,直到调用事件为止。如果您正在安排一个非常频繁的事件,并且不希望设备小睡很短的时间,那么可以使用这个事件,因为设备将在每次醒来时进行轮询。如果设备完全处于休眠状态,它将每秒轮询一次。

8.3.2 emberAfDeactivateClusterTick

Deactivate函数用于关闭事件。在调用调度事件时应调用此函数,以确保事件代码不会继续调用该事件。如果事件不再需要,也可以在调用事件之前调用它。

注意:在Ember应用程序框架中,emberAfDeactivateClusterTick在事件触发之前被自动调用,以确保事件不会在每次触发时都被继续调用。您可以在Ember AppBuilder 2.1.50版本生成的事件表输出中看到对emberAfDeactivateClusterTick的调用。

DeactivateClusterTick类似于ScheduleClusterTick,因为它接受大多数相同的参数,因为它还必须在关闭事件表之前找到clusterTick。

EmberStatus emberAfDeactivateClusterTick(int8u endpoint, int16u clusterId, boolean isClient);

8. Zigbee应用程序框架开发指南 - 事件相关推荐

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

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

  2. 王者级微信小程序开发实战教学 从零到高手搭建微信小程序框架开发教程

    王者级微信小程序开发实战教学 从零到高手搭建微信小程序框架开发教程 小程序进阶 王者级微信小程序开发实战教学课程,讲师手把手对同学们进行微信小程序开发的进阶实战,从零开始搭建,从本地到云端开始系统化的 ...

  3. 开发跨端微信小程序框架选型指南

    多端框架uni-app和Taro选型对比 一. 背景 小程序原生开发有不少槽点: 1.原生wxml开发对Node.预编译器.webpack支持不好,影响开发效率和工程构建流程.所以大公司都会用框架开发 ...

  4. Jdon框架开发指南

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

  5. 使用Taro小程序框架开发一个学习、刷题、论坛、聊天交流的微信小程序

    本项目小程序端采用Taro技术框架,可将React代码编译为微信小程序.安卓APP.IOS程序.H5页面等,管理端采用React Hook + TypeScript来进行开发 项目介绍 当代大学生上课 ...

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

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

  7. 《Boost程序完全开发指南》

    1.3开发环境 由于Boost大量使用了C++高级特性(如模板偏特化.ADL),因此不是所有的编译器都 能够很好地支持Boost. 在VC集成环境中使用嵌入工程编译的方式需要定义宏BOOST_ALL_ ...

  8. 程序员开发指南!金三银四Android面试的一些感受,这原因我服了

    前言 前几年移动互联网创业的风口,如今渐渐消失,移动互联网被巨头公司瓜分,一些创业公司倒闭了,Android 开发需求慢慢趋近于饱和.而当初移动互联网处于风口时,自学.转行以及培训机构出来了大量 An ...

  9. 程序员开发指南!半路出家Android程序员看我轻松逆袭!实战篇

    前言 不清楚你是不是知道,咱们中国有相当大的一部分软件公司,他们的软件开发团队都小的可怜,甚至只有1-3个人,连一个项目小组都算不上,而这样的团队却要承担一个软件公司所有的软件开发任务,在软件上线和开 ...

  10. 程序员开发指南!java面试常问问题

    正文 如果你参加过一些大厂面试,肯定会遇到一些开放性的问题: 1. 写一段程序,让其运行时的表现为触发了5次Young GC.3次Full GC.然后3次Young GC: 2. 如果一个Java进程 ...

最新文章

  1. 基本运算符与if while详解:
  2. VError - Found 0 matching services的根源分析
  3. MySQL视图的应用
  4. Codeforces Round #346 (Div. 2) D. Bicycle Race 叉积
  5. djano 字段不重复_硬不硬你说了算!近 40 张图解被问千百遍的 TCP 3 次握手和 4 次挥手面试题...
  6. 【成长之路】【python】python基础2
  7. Directed Minimum Spanning Tree: Chu-Liu/Edmonds Algorithm
  8. 防止他人复制网站内容
  9. 热烈祝贺龙芯Loongarch OpenJDK8开源,已编译完成
  10. 【进阶修炼】——改善C#程序质量(4)
  11. fusioncharts 嵌套饼图_仙桃酸洗钝化20#无缝管图
  12. 浅析R语言单因素方差分析中的多重比较
  13. 车盲普及贴系列.一.到底什么样车才安全
  14. 计算机笔记本有wife但显示未连接怎么办,电脑无线网络显示未连接怎么办
  15. (PTA)数据结构(作业)3、链表
  16. 小学生计算题软件产品设计
  17. android 地球坐标 火星坐标系,IOS开发入门之iOS开发火星坐标系与地球坐标系解析...
  18. 图解域名解析成IP的全过程(你浏览器摁下一个网址后发生了啥?)
  19. TSINGSEE车载监控平台的城市渣土车监管解决方案
  20. CSS之标签选择器、ID选择器、类选择器

热门文章

  1. 计算机应用基础的知识探索,计算机应用基础的知识探索
  2. 设置虚拟机dns服务器域名,域名服务器DNS的设置实验
  3. zblogphp 广告联盟_zblog模板添加广告位置的方法
  4. 全国大学生大数据技能竞赛比赛心得以及相关资料
  5. jsp手机h5页面出现了 微信链接带打开何新浪uc打开格式都显示css起作用,但是用谷歌浏览器显示css没起作用
  6. 以DMA方式开启DAC输出正弦波
  7. basler恢复出厂设置_bios恢复出厂设置
  8. 如何给自己的照片制作水印
  9. python可能实现办公自动化吗,让工作化繁为简:用Python实现办公自动化
  10. 十大经典排序算法(动图演示)