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 小结的更多相关文章

  1. Atitit.常用语言的常用内部api 以及API兼容性对源码级别可移植的重要性 总结

    Atitit.常用语言的常用内部api 以及API兼容性对源码级别可移植的重要性 总结 1.1. 要兼容的重要语言api1 1.2. 常用基础api分类 core api1 1.3. 比较常用的扩展库 ...

  2. 【翻译】内部API的价值

    内部api的设计,主要是为了简化软件的开发,简化系统和操作过程.目前绝大多数用例是这样的. 内部api经常被忽略,因为它们是针对内部开发人员的.这种类型的api通常使用于特定公司及其部门的专用数据.尽 ...

  3. Java中日期时间API小结

    Java中为处理日期和时间提供了大量的API,确实有把一件简单的事情搞复杂的嫌疑,各种类:Date Time Timestamp Calendar...,但是如果能够看到时间处理的本质就可以轻松hol ...

  4. cordova 内部API 用ssl https,报错

    环境:node6.10.1 cordova 6.x, ionic 2.2.1 用cordova/ionic 建立的app我们的api 地址要用https,做了安全加密之后,按照正常的流程,打包,然后跑 ...

  5. JDBC常用API小结

    建立数据库链接的三种方式: package com.victor_01; import java.sql.Connection; import java.sql.Driver; import java ...

  6. [MEAN Stack] First API -- 3. Select by ID with Mongoose and Express

    Mongoose allows you to easily select resources by ID from your MongoDB. This is an important aspect ...

  7. [MEAN Stack] First API -- 1. 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. Impor ...

  8. canvas的api小结

    HTML <canvas id="canvas"></canvas> Javascript var canvas=document.getElementBy ...

  9. jquery 常用api 小结2

    *一)jQuery常用方法API实战 (1)DOM简述与分类 A)DOM是一种标准,它独立于平台,语言,浏览器. B)如果项目中,你完全按照DOM标准写代码,你就能在各大主流的浏览器中操作标准控件. ...

随机推荐

  1. ListView删除选中的多项目

    //ListView删除选中的多项目function DeleteMultSelItems(ListView:TListView):Boolean;var  I: Integer;begin  Res ...

  2. android152 笔记 2

    27.谈谈UI中, Padding和Margin有什么区别? Padding 文字对边框, margin是控件对父窗体. 28. widget相对位置的完成在activity的哪个生命周期阶段实现.控 ...

  3. 哈夫曼(Huffman)编码

    哈夫曼编码(Huffman Coding)是一种非常经典的编码方式,属于可变字长编码(VLC)的一种,通过构造带权路径长度最小的最优二叉树以达到数据压缩的目的.哈弗曼编码实现起来也非常简单,在实际的笔 ...

  4. PAT 1002

    1002. A+B for Polynomials (25) This time, you are supposed to find A+B where A and B are two polynom ...

  5. Debian下MySQL配置

    1 安装 $ apt-get install mysql-server $ apt-get install mysql-client 2 修改MySQL的口令 一般上一步会让你输入root密码,如果没 ...

  6. HTTP 缓存策略

    浏览器一般缓存图片.CSS.JS等静态文件,因为这些文件的更新频率相对来说比较低,合理利用浏览器的缓存对网站的性能提升有很大帮助.HTTP缓存分为两部分,分别是本地缓存和缓存协商,当本地缓存不生效时会 ...

  7. Jfinal学习笔记

    实习期间,公司使用jfinal做开发,所以就学习了这个框架 Jfinal作为一个极速ORM,使用上非常方便,核心源代码1万多行,压缩后只有200多KB. 从入口开始 作为一个web项目,首先解读web ...

  8. Java基础知识强化102:线程间共享数据

    一.每个线程执行的代码相同: 若每个线程执行的代码相同,共享数据就比较方便.可以使用同一个Runnable对象,这个Runnable对象中就有那个共享数据. public class MultiThr ...

  9. ie6双边距bug及其解决办法

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. ASP.NET MVC and jqGrid 学习笔记 2-如何从本地获得数据

    上回说到jqgrid的基本配置,同时演示了显示数据的一种方法——datatype: "local".这种方法是从本地获取的,确切地说是在前端页面的javascript里写的硬编码. ...