原创 【原创】ZigBee学习之11——MAC层API解读2

2010-2-5 16:15 3411 5 5 分类: 通信

好了,今天把MAC的API 剩下的部分解决了吧,呵呵


回调函数事件


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


MAC_MLME_ASSOCIATE_IND<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


当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的组网方式有了一定的了解,起码心里有个底了,知道网络是如何建立的,一个新设备如何加入到一个网络中。


 


 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
5
关闭 站长推荐上一条 /3 下一条