ZigBee学习之11——MACAPI解读2

回调函数事件

呵呵,名字很恐怖,其实就是用来应答请求函数的函数调用而已,不要想的太深奥哦!

MAC_MLME_ASSOCIATE_IND

当MAC从其他器件接收到关联请求时发送给应有。应用在接收到这个事件后必须调用 MAC_MlmeAssociateRsp(),这个事件只发送给FFD应用,且这个FFD的PIB属性MAC_ASSOCIATION_PERMIT为真。

MAC_MLME_ASSOCIATE_CNF

作为对MAC_MlmeAssociateReq()的回应,MAC发送这个事件到应用,此事件指示了关联的状态,如果关联成功且请求了短地址,则短地址将被包含在事件中,否则短地址参数不可用。

MAC_MLME_DISASSOCIATE_IND

指示器件已经解关联

MAC_MLME_DISASSOCIATE_CNF

作为MAC_MlmeDisassociateReq()的回应发送给应用,此事件指示解关联操作的状态。

MAC_MLME_BEACON_NOTIFY_IND

当MAC接收到一个信标帧并且信标帧包含负载数据或者MAC_AUTO_REQUEST属性为FALSE时发送次事件到应有,此事件也包含LQI测量值、信标帧接收时间。

MAC_MLME_ORPHAN_IND

MAC_MLME_SCAN_CNF

MAC_MLME_START_CNF

MAC_MLME_SYNC_LOSS_IND

MAC_MLME_POLL_CNF

MAC_MLME_COMM_STATUS_IND

发送这个事件的原因有多种,比如指示MAC_MlmeAssociateRsp()和MAC_MlmeOrphanRsp()的状态,也可以指示MAC接收到安全帧,但是安全处理出错。

MAC_MLME_POLL_IND

只有在MAC用一系列间接数据配置,设置macCfg.appPendingQueue为真,才能发送这个事件。当从其他设备接收到数据请求命令帧时发送此事件,应用应该调用MAC_McpsDataReq()来发送数据到那个设备,并且配置TX属性为MAC_TXOPTION_NO_RETRANS设置。

扩展接口

提供了一些非802.15.4协议定义的函数,比如电源管理。

通用常量和数据结构

电源模式

MAC_PWR_ON      MAC和无线电电源打开

MAC_PWR_SLEEP_LITE  MAC和无线电部分电源关闭

MAC_PWR_SLEEP_DEEP MAC和无线电完全电源关闭

uint8 MAC_PwrOffReq(uint8 mode)

请求MAC关闭无线电硬件电源并进入睡眠模式,

返回值:

MAC_SUCCESS     操作成功

MAC_DENIED      MAC不能关闭电源

void MAC_PwrOnReq(void)

请求MAC打开无线电硬件电源并唤醒设备

uint8 MAC_PwrMode(void)

返回MAC当前电源模式

uint32 MAC_PwrNextTimeout(void)

返回下一次MAC定时器超时,如果没有定时器运行则返回0

uint8 MAC_RandomByte(void)

从MAC随机数产生器返回一个随机字节

回调接口

void MAC_CbackEvent(macCbackEvent_t *pData)

发送MAC事件到应用,这个函数的执行需要分配一个OSAL消息,然后将事件参数拷贝到消息,然后将消息发送到应用OSAL事件处理函数。这个函数必须从任务或者是中断上下文执行,所以它是可重入的。

参数:

typedef struct

{

uint8 event;

uint8 status;

} macEventHdr_t;

typedef union

{

macEventHdr_t hdr;

macMlmeAssociateInd_t associateInd;

macMlmeAssociateCnf_t associateCnf;

macMlmeDisassociateInd_t disassociateInd;

macMlmeDisassociateCnf_t disassociateCnf;

macMlmeBeaconNotifyInd_t beaconNotifyInd;

macMlmeOrphanInd_t orphanInd;

macMlmeScanCnf_t scanCnf;

macMlmeStartCnf_t startCnf;

macMlmeSyncLossInd_t syncLossInd;

macMlmePollCnf_t pollCnf;

macMlmeCommStatusInd_t commStatusInd;

macMlmePollInd_t pollInd;

macMcpsDataCnf_t dataCnf;

macMcpsDataInd_t dataInd;

macMcpsPurgeCnf_t purgeCnf;

} macCbackEvent_t;

hdr.event域为下面一些值

MAC_MLME_ASSOCIATE_IND Associate indication.

MAC_MLME_ASSOCIATE_CNF Associate confirm.

MAC_MLME_DISASSOCIATE_IND Disassociate indication.

MAC_MLME_DISASSOCIATE_CNF Disassociate confirm.

MAC_MLME_BEACON_NOTIFY_IND Beacon notify indication.

MAC_MLME_ORPHAN_IND Orphan indication.

MAC_MLME_SCAN_CNF Scan confirm.

MAC_MLME_START_CNF Start confirm.

MAC_MLME_SYNC_LOSS_IND Sync loss indication.

MAC_MLME_POLL_CNF Poll confirm.

MAC_MLME_COMM_STATUS_IND Communication status indication.

MAC_MLME_POLL_IND Poll indication.

MAC_MCPS_DATA_CNF Data confirm.

MAC_MCPS_DATA_IND Data indication.

MAC_MCPS_PURGE_CNF Purge confirm.

MAC_PWR_ON_CNF Power on confirm.

uint8 MAC_CbackCheckPending(void)

返回应用中的间接消息队列

配置

配置常量

MAC用数据结构来包含多种用户配置参数。这个数据结构叫macCfg在mac_cfg.c中定义

typedef struct

{

uint8 txDataMax;

uint8 txMax;

uint8 rxMax;

uint8 dataIndOffset;

bool appPendingQueue;

} macCfg_t;

txDataMax   传输数据队列中的最大数据帧队列数目,范围:1-255,默认值:   2

txMax       传输数据队列中的最大帧队列数目,范围:1-255,默认值:  5

rxMax       接收数据队列中的数据帧队列数目,范围:1-255,默认值:  2

dataIndOffset   为应用定义的头发配额外的数据字节,范围:0-127,默认值: 0

appPendingQueue当设置为真时,在从其他设备接收到数据请求帧将发送MAC_MLME_POLL_IND,默认值为FALSE

编译时配置

MAC源码有一些编译时配置的参数。

MAC_NO_PARAM_CHECK      设置为FALSE,则会检测API函数的参数是否符合IEEE规范。设置为TRUE则可以减少代码量,默认为FALSE

MACNODEBUG          如果定义了这个宏,则允许MAC_ASSERT()进行运行时检测。不定义这个宏可以优化代码量

MAC_RX_ONOFF_DEBUG_LED  如果为TRUE,LED将会随着接收的开关而开关。

在文档的最后画出了如果用API函数构建网络,进行通信的梯形图,呵呵早知道有这个,就直接看这个了,不细心阿!不过看来这个文档之后对ZigBee的组网方式有了一定的了解,起码心里有个底了,知道网络是如何建立的,一个新设备如何加入到一个网络中。

ZigBee学习之11——MAC层API解读2相关推荐

  1. ZigBee学习之10——MAC层API解读

    ZigBee学习之10--MAC层API解读 其实也算不上什么解读拉,基本上是把官方的文档翻译了一下.在Zigbee中,是分层结构 的,这样做有很多的好处,每一层只负责自己的东西,数据传输更加透明和有 ...

  2. ZigBee学习之7——OSAL(操作系统抽象层)API解读

    根据Z-Stack1.4.3-1.2.0中OSAL API_F8W-2003-0002_.pdf文档翻译. Z-Stack1.4.3及以后的版本中引入了一个OS的概念,把应用层和堆栈层进行了分离,但是 ...

  3. 802.11 MAC层帧解析

    注1:本文STA为station简称,AP为access piont简称. 注2:本文属于个人理解,存在错误望见谅和指正. 1.MAC帧格式 对应的数据结构如下: typedef struct _rt ...

  4. zigbee学习参考(1~42 )

    [原创]ZigBee学习之1--SPI&LCD - 小组 - EDN China [原创]ZigBee学习之2--SPI&LCD - 小组 - EDN China ZigBee学习之3 ...

  5. Zigbee学习笔记

    作为一个硬件从业人员,虽然不是从事物理网行业的,但是多少得了解一些,以下是笔者最近学习Zigbee的笔记,包含了Zigbee基本知识,正确的学习方法. Zigbee无线传感网络 先搞清楚IEEE802 ...

  6. 第三章:zigbee学习笔记之物理层和mac层帧格式分析

    本文原地址:https://blog.csdn.net/tainjau/article/details/81634681 IEEE802.15.4工作组致力于无线个人区域网络(wireless per ...

  7. zigbee NWK层API解析

    NWK   层为更高层提供了如下功能:· ·   网络管理 ·   地址管理 ·   网络参数与功能函数 除了管理功能,NWK 还提供了应用程序没有的数据服务.应用程序可以通过 AF数据接口[AF_D ...

  8. ZigBee MAC层(上)

    1. 介绍 ZigBee MAC层,即IEEE 802.15.4 MAC层,这里主要介绍了802.15.4-2003版本 MAC层处理所有对物理无线信道的访问控制,并负责下面的任务 - 为协调器生成网 ...

  9. CC2530-Zstack 协议栈MAC层中的mac_rx.c程序解读

    Zstack 协议栈中,MAC层最重要的一个文件是mac_rx.c,里面包含了Zstack中mac层是怎么处理接收到的数据帧的.我把我自己对MAC层接收过程的中文解读加在代码的注释里了. 主要的几个函 ...

最新文章

  1. 如何制作linux文件系统,linux文件系统制作(一)
  2. 网络应用优化——时延与带宽
  3. java的栈图形演示
  4. 只用一个marker 替换 高德_Android基于高德地图完全自定义Marker的实现方法
  5. switch case穿透Java_Java switch的用法与case的穿透现象举例详解
  6. 企业邮箱怎么注册流程?企业邮箱域名怎么注册?
  7. 传奇世界私服务器端制作,传奇世界单机版一键端带服务器附带安装教程。(可局域网)...
  8. Java基本语法(初学者必看,值得收藏)
  9. [Xcode]自己常用的Code Snippets、Xcode插件、文件目录
  10. “我怎么就被一张照片出卖了?”
  11. 职场中最重要的情商,是管理情绪
  12. Weston 纹理倒置(render-gl)
  13. 最干净的U盘启动工具:微PE
  14. 支付公司如何预防和治理重复出款的风险
  15. 既生synchronized,何生volatile (synchronized与volatile的区别)
  16. 四个人三人真一人假c语言,C语言程序设计第4章选择结构.pptx-资源下载在线文库www.lddoc.cn...
  17. 朱洪教育c语言课程,诚恳呼吁多给学科教育类研究生攻读教育学博士的机会
  18. 有个码龄5年的程序员跟我说:“他连wifi从来不用密码”
  19. 如何使用for循环打印直角三角形
  20. 编辑-发布-开发分离: 静态API设计

热门文章

  1. Liv555简单移植
  2. RRT_star MATLAB
  3. JetBrains的注册
  4. HCNA之华为ensp基本操作总结
  5. 彻底分清机器学习中的上采样、下采样、过采样、欠采样【总结】
  6. elastica php yii,shuliangfu
  7. linux获取p12证书信息,微信公众号现金红包——.p12证书linux部署如何使用
  8. 什么是过拟合?过拟合的10个解决办法都有哪些?
  9. PostgreSQL 14 pageinspect新增gist索引支持
  10. InnoSetup教程