#author("2022-11-15T13:51:27+08:00","default:Admin","Admin") #author("2022-11-22T15:44:17+08:00","default:Admin","Admin") [[+Zigbee30+EmberZnet]] &color(red){※This article is based on EmberZnet SDK 6.7.5.0 and EFR32MG Series}; #contents * 概要 [#t0a80d52] Zigbee应用程序框架及其相关的cluster代码使用Zigbee stack事件机制来调度SoC和主机上的事件。使用Zigbee事件机制可以节省代码和RAM,并且在休眠设备上工作得更好。 在较高的级别上,事件机制提供了一个中心位置,根据用户输入、无线命令或设备初始化,可以激活和停用设备采取的所有定期操作。 事件机制优于它所取代的常量滴答机制,因为它允许Zigbee应用程序框架精确地知道下一个操作何时将在设备上发生。这对于睡眠设备来说是非常重要的,因为这些设备需要准确地知道它们什么时候必须醒来采取一些行动—或者更重要的是,它们不能入睡,因为一些事件正在发生。 Zigbee应用程序框架有两种类型的事件:自定义事件和cluster事件。自定义事件由Zigbee应用程序框架用户创建,可用于应用程序中的任何目的。cluster事件与Zigbee应用程序框架插件中的cluster实现特别相关。 * API [#hc110989] control 参数是:事件控制结构体名 ** 激活事件 [#mba5507e] emberEventControlSetActive(control) 如要激活上面建的事件 注意这个函数只是激活事件但是没有指定事件下次执行的的时间,所以他会以最快的周期执行事件 ** 将已激活的事件置回到未激活的状态 [#m52a9809] emberEventControlSetInactive(control) 将已激活的事件置回到未激活的状态,那么事件将不再执行,直到再次激活该事件 ** 获取事件的状态 [#w0e0e80e] emberEventControlGetActive(control) 获取事件的状态,知道事件是否激活 ** delay ms以后激活事件 [#o4eca7ef] emberEventControlSetDelayMS(control, delay) 该函数也用于激活事件但是它有指定多少ms以后执行事件 emberEventControlSetDelayMS(customEventControl,100) //表示100ms后执行事件 ** delay 1/4s以后激活事件 [#s50fa5ca] emberEventControlSetDelayQS(control, delay) 该函数同上一个函数类似,只是时间单位为1/4s emberEventControlSetDelayQS(customEventControl,100) //表示25s后执行事件 ** delay 分钟以后激活事件 [#b5acd033] emberEventControlSetDelayMinutes(control, delay) 该函数同上一个函数类似,只是时间单位为分钟 emberEventControlSetDelayMinutes(customEventControl,100) //表示100分钟后执行事件 ** 获取事件的执行还需要等待的时间 [#q812c2bb] emberEventControlGetRemainingMS(control) 该函数用于获取事件的执行还需要等待的时间 **用法举例 [#h1de3366] 一个时间每100ms执行一次,如下: #codeprettify{{ //首先在初始化中激活该事件,通常初始化在emberAfMainInitCallback中进行: void emberAfMainInitCallback(void) { ... 省略 ... //激活事件 emberEventControlSetActive(customEventControl); } //在事件函数: void customEventFunction(void) { ... 省略 ... //设置下次执行的时间为100ms以后,需要注意的是如果在这里你不设置下次执行的时间那么它会以最快的周期执行 emberEventControlSetDelayMS(customEventControl,100); } }} &ref(ZigBee.png); #hr(); Comment: #comment_kcaptcha