ResUserTimer类型来调用该节点的res_available回调函数。注意,该定时器为单次触发。
【函数参数】ep - 端点数据结构 seconds - 定时时间长度(单位:秒)
【函数原型】void DeleteUserTimer(struct ep_info_t *ep);
【函数说明】删除为端点创建的用户定时器。定时器可以在任何时刻被删除,无论该定时器有没有被创建过或者触发过,函数都不会引起问题。 【函数参数】ep - 端点数据结构
【函数原型】void ModifyRefreshCycle(struct ep_info_t *ep, uint8 seconds);
【函数说明】修改功能的刷新周期。 【函数参数】ep - 端点数据结构 seconds - 新的刷新周期(单位:秒)
3. Z-Stack APP应用框架下节点应用的开发步骤
SAPP_Device相关文件中已经提供了一个基本的节点应用,通常,只需要对其进行修改即可。 a) 功能类型定义
在SAPP_Device.h文件中,以枚举类型的方式定义了系统中使用到的功能的类型值,如果需要增加功能类型,直接在这里增加枚举类型名即可,如图 1 示。
图 1 功能类型枚举定义
同时,这个枚举定义可以复制到网关或上端应用程序代码中,以便可以将无线传感网络中的类型编号与上端应用中的编号统一起来。 b) 定义节点功能列表
某个特定的节点,其功能数量和类型是已知并且确定的。在SAPP_Device 相关文件中,定义了两个非常重要的全局变量:funcList 和funcCount,分别用来存储功能列表和功能数量。funcList 是一个struct ep_info_t 类型的结构体数组,数组中的每一个成员均代表一个功能。而funcCount 是一个整数,表示总的功能数量。
在funcList 数组中根据功能数量和类型,依次添加每一个功能的初始化信息。funcList数组中的每一项功能的端点号从1 开始顺序递增,即: 端点号=该功能在数组中的下标+1
下面是一个添加功能初始化信息的范例:
根据前面描述的ep_info_t 结构体的定义可以知道,“{ TypeCode, ID, Cycle }”用来为ep_info_t 中的function 结构体成员赋值,TypeCode 用来指定该功能的类型,如DevCoordinator 等;ID 用来定义该功能的编号;Cycle 用来指定该功能的刷新周期,单位为秒。有了这三个信息,即可确定该功能的具体类型。
在初始化信息中,NwkStateChangeRoutine、IncomingRoutine、TimeoutRoutine 和ResAvailableRoutine 分别代表四个函数:
NwkStateChangeRoutine(函数名可以任意指定)当节点加入网络完成之后,所有功能的NwkStateChangeRoutine函数都将被调用,如功能不需要在这个时期执行动作,则可以设置为NULL。示例代码如下:
??IncomingRoutine(函数名可以任意指定)。当端点收到数据时,端点对应的
IncomingRoutine函数将被调用,如功能不需要接收数据,,可以将其设置为NULL。一个典型的接收数据的代码如下:
??TimeoutRoutine(函数名可以任意指定)。如果功能的刷新周期不为0,则
每隔刷新周期所代表的时间长度, TimeoutRoutine函数将被调用。通常,在该函数中可以向协调器发送自身的状态信息(如传感器值)。该函数用来实现周期性报告数据的功能。一个典型的超时函数的代码如下:
??ResAvailableRoutine(函数名可以任意指定)。ResAvailableRoutine可以
被用来处理一些系统资源或事件。一个典型的资源处理函数的代码如下:
至此,一个完整的功能即可被添加到节点内。按照同样的方法,可以为节点添加多个功能。
??路由器:在为路由器编写代码时,与上面的过程类似,即,可以为路由器添加一个或多个功能。需要注意的是,由于路由器的特殊性,在其funcList功能列表中,必须包含下面的功能:
也就是说,路由器必须至少具备一个类型为DevRouter的功能,并且该功能对应的四个回调函数已经在SAPP_Framework中定义好,不能随意修改。 该端点的作用是周期发送自身的地址信息给协调器,以便协调器可以维护在线列表。 ??协调器:协调器做为Zigbee网络中最为特殊的,也是独一无二的节点,其funcList不能随意编写,下面给出其典型定义:
作为协调器,其funcList中的第一个功能必须是DevCoordinator,并且其四个回调函数也已经在SAPP_Framework中定义好,不得随意修改。该功能的作用是将其他节点发送至该端点的数据透传至串口。需要注意的是,在Z-Stack APP应用程序框架中提供的SAPP_Device.c和SAPP_Device.h文件中,已经将常见的传感器的功能定义好,在实际使用过程中,针对这些常见传感器,用户只需要修改SAPP_Device.h 文件中的宏定义,即可使能或禁止某个功能,如图 2 所 示。