Z-Stack内部API 小结

Z-Stack是TI推出的全功能ZigBee协议栈,通过了ZigBee联盟的兼容性平台测试,包含如下几个组件。

1. HAL,硬件抽象层

2. OSAL,操作系统抽象层

3. ZigBee Stack和IEEE 802.15.4

4. User App

5. MT,通过串口与PC进行通讯的demo

API主要有以下几个方面:

初始化

zb_SystemReset    
复位设备,一般在写入新配置后,重启设备来启用更新的信息

zb_StartRequest :  
启动ZigBee协议栈与zb_StartConfirm形成回调关系,回调就是StartRequest请求发出后,处理结果的函数在StartConfirm函数里面。

配置

zb_ReadConfiguration : 从非易失性存储器中获得指定的配置信息

zb_WriteConfiguration:往非易失性存储器中写配置信息

zb_GetDeviceInfo :获得设备相关信息

发现

zb_FindDeviceRequest

zb_BindDevice:   建立或者移除一个绑定条目

zb_AllowBind:    
设置为一段指定时间(永久、不允许、一段时间)的允许绑定模式,与zb_BindDevice配合使用。

zb_PermitJoiningRequest 用来控制设备加入请求

数据传输

zb_SendDataRequest 发送数据

zb_SendDataConfirm  响应数据的回调函数

如果要求ACK回应,但是没有收到ACK回应的话,设备会移除它已经创建的绑定表,尝试着重新绑定。

zb_ReceiveDataIndication:当应用层收到数据时,被此函数异步通知调用

绑定


在ZigBee中,绑定是在两个设备应用层之间的一个逻辑链路,一个设备可以为每个数据包分布建立绑定关系,除此之外,绑定可以有多于一个的目的地。以灯泡控制为例子,每个开关可以控制一个或者多个灯泡。这种情况下,每个开关就要建立一个绑定,这允许应用发送数据包,而不需要知道实际目的地址。

zb_SendDataRequest这个函数的第一个参数为目的地址,一般目的地址为0~0xFFFD,绑定关系的发送目的地址为0xFFFE,广播发送地址为0xFFFF.

当以绑定模式发送数据时,实际的目的地址是在内部绑定表中查找获得的。当在绑定表中有多个目的地址时,协议会自动发送一份数据拷贝给指定的目标。

如何配置设备的绑定状态呢?

1.如果目标设备的MAC地址已知,那么zb_BindDevice可被用来创建一个绑定项

2.如果目标设备MAC地址未知,待绑定的目标设备执行zb_AllowBindResponse来使其处于响应匹配请求的状态,要求绑定的设备执行zb_AllowBind来设置为允许绑定请求状态。

两个绑定设备之间需要有相同的ClusterID,不同的Cluster方向才能完匹配。

NV_RESTORE编译选项:从字面上可以猜测到,这个宏用来恢复已经存储的信息,既然是恢复,那么肯定是比较重要的、掉电不能丢失的信息,比如网络信息、绑定表信息等等。

Z-Stack内部API 小结,布布扣,bubuko.com

时间: 2024-10-22 00:00:59

Z-Stack内部API 小结的相关文章

Zigbee Z‐STACK协议栈和TinyOS

ZigBee 和 Tinyos 关于ZigBee和TinyOS ZigBee的基础是IEEE 802.15.4.但IEEE仅处理低级MAC层和物理层协议,因此Zigbee联盟扩展了IEEE,对其网络层协议和API进行了标准化,这就是Z‐STACK,Z‐STACK协议栈是TI公司研发,通过ZigBee联盟认证的免费协议栈,协议内部包括了WSN(无线传感器网络)的OS的模型,协议栈具有国际化,标准化的特点,协议栈已提供十几种应用场景,可以非常轻松的让用户开发出满足国际标准的产品. TinyOS是一个

Android 内部API (com.android.internal)和隐藏API(@hide)概述

内部API和隐藏代码的例子 在翻阅Android源码的时候有时会遇到一些奇怪的代码,例如下面这个: //注:这段代码在源码android/provider/Telephony.java中. import android.util.Patterns; import com.android.internal.telephony.SmsApplication; import java.util.HashSet; //-- 还有这种(下面这段摘自同一文件):         /**          *

cordova 内部API 用ssl https,报错

环境:node6.10.1 cordova 6.x, ionic 2.2.1 用cordova/ionic 建立的app我们的api 地址要用https,做了安全加密之后,按照正常的流程,打包,然后跑到iOS真机上. 然后请求登录,会发现报错: NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9824) 解决思路: 检查app的根目录下的config.xml文件. 有一项配置: p.p1 { mar

[MEAN Stack] First API with Node.js, Express and MongoDB

Learn how to import data into your MongoDB and then use Express to serve a simple Node.js API. Import data into MongoDB: For exmaple, you have an data.json file and contains some data. 1. Start Mongod service: //in the cmd $ mongod 2. Open a new Tab,

[MEAN Stack] First API -- 7. Using Route Files to Structure Server Side API

Currently, the server.js is going way too long. In the real world application, it is likely that we are going to deal with more routers, whichi means it growing even longer. A single file which has too many lines of code whcih means code small. We ar

安卓开发数据库,调用谷歌内部API指令

使用这种方式调用数据库,比常规方式好在,简洁且具有返回值,可以判断是否成功 add: SQLiteDatabase db=myOpenHelper.getWritableDatabase(); ContentValues values=new ContentValues(); values.put("username", "wangwu"); values.put("password", "110"); long insert

[MEAN Stack] First API -- 2

The app structure: Front-end: app.js /** * Created by Answer1215 on 12/9/2014. */ 'use strict'; function MainCtrl(PeopleService) { var vm = this; vm.people = []; vm.selectedPerson = {}; vm.getPeople = PeopleService.getPeople().then(function(response)

jQuery基本API小结

一.JQuery基础选择器 1.基本选择器(CSS选择器) 2.$()中的()不一定是指定元素,也可能是函数. 3.“*”号选择器,它的功能是获取页面中的全部元素:$(“*”). 由于使用*选择器获取的是全部元素,因此,有些浏览器将会比较缓慢,这个选择器也需要谨慎使用. 4.sele1,sele2,seleN选择器,同时选中多个元素. 5.层次选择器 ①.$("ance desc")其中ance desc是使用空格隔开的两个参数.ance参数(ancestor祖先的简写)表示父元素:d

使用Activiti内部Api手动创建作业(Job)

很多时候,我们想像Activiti定时开始事件一样,加入一些自己的定时流程.但定时开始事件有很大的局限性,比如时间.循环次数.循环间隔是必须要指定的,这对于一些根据实际状况,计算时间并启动的流程是无法处理的. 通过一系列的源码分析,最终找到了手动建立Job的方式方法,代码如下: // 时间计算 Date now = new Date(); // delay为相较当前时间,延时的时间变量 Date target = new Date(now.getTime() + delay * 60 * 100