在TI提供例程中有一个SimpleApp的例程,对于应用开发而言,例程SimpleApp展现了简化的API的使用,减少了一系列的API函数和回调函数,简化了协议栈启动的流程。这里重点介绍这些简化以后的API.
1、Z-Stack Simple API总述
Z-Stack是TI正对CC2430/CC2431等提供的免费协议栈,简称为ZCP,他由以下单元组成:
HAL(硬件抽象层)
OSAL(操作系统抽象层)
Zigbee Stack + IEEE 802.15.4 MAC
User Application (用户应用程序)
MT(moniter test)--通过串口与PC通信,主要用于调试
简单Zigbee API包括以下几个部分:
1 Initialization
zb_SystemReset
zb_StartRequest
2 Configuration
zb_ReadConfiguration
zb_WriteConfiguration
zb_GetDeviceInfo
3 Discovery(device,netword and service discovery)
zb_FindDeviceRequest
zb_BindDeviceRequest
zb_PermitJoinRequest
4 Data transfer
zb_SendDataRequest
zb_ReceiveDataIndication
1.1将一个设备加入网络
作为网络的一部分,每个设备的“network-specific”参数要配置成相同的值。
每个设备的“device-specific”参数可以配置成不同的值,但是ZCD_NV_LOGICAL_TYPE必须被设置成
保证整个网络只有一个协调器设备,所有其他电池供电的设备配置成为终端设备。
在上述两个前提之下,任何设备就可以在任何顺序下启动,协调器被启动后将完成网络的组件,其他设备会
发现该网络并加入该网络。
协调器在启动的时候会执行以下步骤:
信道扫描(ZCD_NV_CHANLIST),挑选一个能量最小的信道;如果有很多信道都是低能量的信道,(低能量就是该信道在被使用)
则协调器将会挑选一个使用量最小的信道。
最后协调器会选择网络ID,这个ID在ZCD_NV_PANID被定义。
路由设备和终端设备会扫描信道(ZCD_NV_CHANLIST),尝试发现网络‘
1.2设备绑定
绑定就是形成在两个设备的应用层之间的一个逻辑链路。在一个设备上可以创建多种绑定,每种绑定由各自的数据包类型。一个绑定也可以由多个目的设备。
一旦在源设备上创建了绑定,应用程序可以不用知道目的设备的地址而发送数据(调用zb_SendDataRequest()函数,无效地址是-0XFFFE可以作为目的地址)。远设备就会在它的绑定列表中查找目的地址。
一个绑定路口可能由一个以上的目的地址,在这种情况下协议会自动复制要传输的数据,把他们发送到各个地址设备中去。
如果NV_RESTORE在会变中被定义的话,绑定列表将被放到非易失性存储设备中,这样在端点和重启后还能保存原先的绑定关系,继而恢复。
当在不知道目的地址的扩展地址的情况下,要建立绑定列表的话,目的设备会处于一种允许绑定的状态,通过函数zb_AllowBindResponse()作为应答。而源设备会通过函数zb_ BindDeviceRequest()发出绑定请求。
绑定表的建立是建立在端点的匹配的前提下的,所谓匹配就是,相同的端点,相同的描述符。
1.3开发一个简单的个人配件(profile)
在这里我们介绍如何通过使用简单API来创建一个应用
(1)在应用里定义所有设备,例如
-e.g. temperature sensor, occupancy sensor, thermostat, heating unit and remote control
-assign a device_id(unique 16bit identifier)to each of them
(2)定义“commands”,这些“commands”命令在设备之间传送,要给他们分配16位的ID,例如:
-temperature reading
-occupancy reading
-thermostat setting object
-heating/cooling unit control object
(3)给每个命令定义相应的设备输入和输出,例如:
-The temperature reading is "output" from the temp sensor and "input" to the thermostat
-The occupancy reading command is "output" from the occupancy sencor device and "input" to the thermostat
(4)给每个设备创建简单描述符结构,包括以下内容:
--分配设备ID,设备版本号
--定义输入输出命令列表
--定义一个profile ID
(5)给每一个命令
--定义消息格式转换函数及其相关解释函数
--例如:temperature value can be exchanged as
?(format)"an 8bit value"
?(interpretation)"0 indicates 0.C and 255 indicates 64.C in steps of 0.25.C"
(6)给每一个设备编写设备应用程序
--设备能够周期性产生数据包或者由外部触发产生
--设备能够解析输入的命令
(7)定义一种绑定策略,使得设备间能够正确的交换数据包
2应用案例
2.1 传感器数据
构建一个传感器数据收集网络,能把遍布的传感器数据收集到一个或多个设备进行进一步操作。这个网络要求能够有以下功能:
l 自动组建网络
l 传感器节点能够绑定到目标节点,并自动加入网络
l 传感器设备必须能够周期性的把数据传递给目标设备,而且这是一种点对点式的应答过程
l 如果传感器设备没有收到目的设备接收数据后的应答,它会解除该项绑定,然后重新组建新的绑定
(1) 设备:两种设备,SimpleSensor和SimpleCollector。前者作为终端设备,后者作为路由或者协调器设备。
(2) 命令:一个简单的命令SENSOR_REPORT_CMD_ID,这个在传感器设备上被定义为输出命令,在收集信息的设备上被定义为输入命令。这个命令有两个字节的负载。第一个字节用来指示传感器的读数类型,第二个字节用来指示传感器的读数值。
(3) 设备发现和绑定:在加入网络之后,传感器设备尝试着发现和绑定到相应的收集设备,如果它发现了一个或者多个可绑定的设备,它将选择第一个应答的设备(其他设备在后续周期中分别绑定)。若果不能实现绑定的话,它将继续周期性搜索。加入网络以后,接收设备将被置于允许绑定的状态,等待回应传感器设备发出的绑定请求。这个功能由设置在接收设备上的按键SW1触发,SW2用来关闭这种状态。
(4) 数据包的传递和接收:在成功绑定以后,传感器设备将会读两种数据类型:温度、电池容量,然后传递这些数到收集设备。数据发送是一种点对点的应答模式。如果没有收到接收设备发送过来的应答信息,传感器设备删除该项绑定然后尝试建立新的绑定。收集设备接收到数据包后将把它发送串口。
(5) 创建这样一个应用:设置一些传感器节点(终端设备),一些收集器节点(其中只有一个协调器,其他都是路由设备)。当设备都上电以后以后按下收集设备的SW1按钮使该设备处于允许绑定状态。这样收集设备能够响应传感器设备的绑定请求并且接收到传感器的数据发送到串口中去。
2.2 应用例程
这个应用由包含在Z-Stack文件夹中,将在ZStacks例程(二)中给予深入分析。这里现不多做介绍了。
3. API参考手册
着一部分将接收以下三个内容
l API Functions
l Callback functions
l Configuration Properties
3.1 API Functions
zb_SystemReset
zb_StartRequest
zb_PermitJoiningRequest
zb_BindDevice
zb_AllowBind
zb_SendDataRequest
zb_ReadConfiguration
zb_WriteConfiguration
zb_GetDeviceInfo
zb_FindDeviceRequest
3.2 回调函数
zb_StartConfirm
zb_BindConfirm
zb_AllowBindConfirm
zb_SendDataConfirm
zb_ReceiveDataIndication
zb_FindDeviceConfirm
zb_HandleKeys
zb_HandleOsalEvent
3.3 Configuration parameters
3.3.1网络参数
ZCD_NV_PANID
ZCD_NV_CHANLIST
ZCD_NV_PRECFGKEY
ZCD_NV_PRECFGKEYS_ENABLE
ZCD_NV_SECURITY_LEVEL
ZCD_NV_BCAST_RETRIES
ZCD_NV_PASSIVE_ACK_TIMEOUT
ZCD_NV_BCAST_DELIVERY_TIME
ZCD_NV_ROUTE_EXPIRY_TIME
3.3.2 设备参数
ZCD_NV_STARTUP_OPTION
ZCD_NV_START_DELAY
ZCD_NV_EXTADDR
ZCD_NV_LOGICAL_TYPE
3.3.3 poll参数
ZCD_NV_POLL_RATE
ZCD_NV_QUEUED_POLL_RATE
ZCD_NV_RESPONSE_POLL_RATE
ZCD_NV_POLL_FAILURE_RETRIES
ZCD_NV_INDIRECT_MSG_TIMEOUT
3.3.4点对点应答参数
ZCD_NV_APS_FRAME_RETRIES
ZCD_NV_APS_ACK_WAIT_DURATION
3.3.5其他
ZCD_NV_BINDING_TIME
ZCD_NV_USERDESC
注:具体定义和用法是见手册
4. 总结
主要介绍了ZStack的简单API,及其相关的应用,包括应用的步骤。