【2017年整理】MAC层API解读

上传人:爱****1 文档编号:990835 上传时间:2017-05-24 格式:DOCX 页数:15 大小:28.23KB
返回 下载 相关 举报
【2017年整理】MAC层API解读_第1页
第1页 / 共15页
【2017年整理】MAC层API解读_第2页
第2页 / 共15页
【2017年整理】MAC层API解读_第3页
第3页 / 共15页
【2017年整理】MAC层API解读_第4页
第4页 / 共15页
【2017年整理】MAC层API解读_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《【2017年整理】MAC层API解读》由会员分享,可在线阅读,更多相关《【2017年整理】MAC层API解读(15页珍藏版)》请在金锄头文库上搜索。

1、其实也算不上什么解读拉,基本上是把官方的文档翻译了一下。在 Zigbee 中,是分层结构的,这样做有很多的好处,每一层只负责自己的东西,数据传输更加透明和有效,好了闲话不说,我们开始解读 MAC 层 API,当然是针对 Z-Stack 的,呵呵 MAC API【802.15.4 MAC API _F8W-2005-1503_.pdf】 常量和结构体 typedef uint8 sAddrExt_t【8】; typedef struct union uint16 shortAddr; sAddrExt_t extAddr; addr; uint8 addrMode; sAddr_t; short

2、Addr - 16 位 MAC 短地址 extAddr - 64 位 MAC 扩展地址 addrMode - 地址模式 SADDR_MODE_NONE - 地址不存在 SADDR_MODE_SHORT - 使用 16 位短地址 SADDR_MODE_EXT - 使用 64 位扩展地址 状态值 标准状态值 MAC_SUCCESS 操作成功 MAC_BEACON_LOSS 同步请求中丢失信标 MAC_CHANNEL_ACCESS_FAILURE 由于通道活跃,数据请求失败 MAC_COUNTER_ERROR 接收到的帧的发送源的帧计数器不可用 MAC_DENIED MAC 不能进入低功耗模式 MA

3、C_FRAME_TOO_LONG 接收到的帧或者操作产生的帧或数据请求太长 MAC_IMPROPER_KEY_TYPE 接收到的帧的发送源的 KEY 不可用 MAC_IMPROPER_SECURITY_LEVEL 接收到的帧的发送源安全等级和最低等级不匹配 MAC_INVALID_ADDRESS 由于没有源地址或目的地址,数据请求失败 MAC_INVALID_HANDLE 清除请求包含不可用的处理 MAC_INVALID_PARAMETER API 函数参数超出范围 MAC_LIMIT_REACHED 由于 PAN 描述储存达到界限,扫描中止 MAC_NO_ACK 由于没有收到应答,操作或数据

4、请求失败 MAC_NO_BEACON 由于没有收到信标,扫描请求失败 MAC_NO_DATA 由于没有收到关联应答,关联请求失败 MAC_NO_SHORT_ADDRESS 开始请求的短地址错误 MAC_PAN_ID_CONFLICT 检测到一个 PAN ID 冲突 MAC_READ_ONLY 拥有只读标记的请求 MAC_REALIGNMENT 接收到协调器重排列 MAC_SCAN_IN_PROGRESS 扫描正在进行,新的扫描请求失败 MAC_SECURITY_ERROR 接收到的安全帧密码处理失败 MAC_SUPERFRAME_OVERLAP 信标开始时间超出协调器传输时间 MAC_TRAC

5、KING_OFF 没有找到其协调器的信标,开始请求失败 MAC_TRANSACTION_EXPIRED 关联应答,解关联请求,间接数据传输失败 MAC_TRANSACTION_OVERFLOW 数据缓存溢出,操作失败 MAC_UNAVAILABLE_KEY 安全密钥不可用 MAC_UNSUPPORTED_ATTRIBUTE 由于不支持的特性指令或请求失败 MAC_UNSUPPORTED_LEGACY 不支持的安全方式 MAC_UNSUPPORTED_SECURITY 接收到的帧的安全方式不支持 私有状态值 MAC_UNSUPPORTED 当前配置不支持的操作 MAC_BAD_STATE 当前状

6、态不支持的操作 MAC_NO_RESOURCES 内存资源不足 MAC 时间值 aBaseSuperframeDuration 构成超帧的符号周期 960 15.36ms(2.4G) aUnitBackoffPeriod 构成 CSMA-CA 算法的时间周期的符号周期 20 320us(2.4G) 初始化接口 初始化接口函数都是直接执行函数 void MAC_Init(void) 初始化 MAC 子系统 void MAC_InitDevice(void) 初始化 MAC 关联到一个非信标网络,使用此函数初始化一个 RFD 设备,如果使用此函数,要在调用其它数据和管理 API 之前调用 void

7、 MAC_InitCoord(void) 初始化 MAC 能进行协调器的操作。此函数用来初始化一个 FFD 设备,要在调用其它数据和管理 API 之前调用 void MAC_InitSecurity(void) 使 MAC 能使用安全功能,要在调用其它数据和管理 API 之前调用 void MAC_InitBeaconCoord(void) 初始化 MAC 在信标网络中能进行协调器的操作。此函数要在调用其它数据和管理 API 之前调用 void MAC_InitBeaconDevice(void) 初始化 MAC 能关联到一个信标网络,此函数要在调用其它数据和管理 API 之前调用 提供一些

8、ZigBee 的配置事例,其他的网络配置请看 TI 的文档 ZigBee 节点设备 ZigBee 路由器 ZigBee 协调器 MAC_InitDevice(); MAC_InitDevice(); MAC_InitCoord(); MAC_InitCoord(); 数据接口 MAC 层用来发送和接收数据的 API 数据结构 typedef struct uint8 *p; uint8 len; sData_t; p 指向数据 len 数据的字节长度 数据常量 MAC_MAX_FRAME_SIZE 102 不包含安全域的最大数据长度 MAC_DATA_OFFSET 24 MAC 头要求的数据偏

9、移 MAC_ENC_OFFSET 5 加密头要求的数据偏移 MAC_MIC_32_LEN 4 32 位认证代码要求的长度 MAC_MIC_64_LEN 8 64 位认证代码要求的长度 MAC_MIC_128_LEN 16 128 位认证代码要求的长度 void MAC_McpsDataReq(macMcpsDataReq_t *pData) 将应用数据发送到 MAC。若 MAC 拥堵或者不能接受数据请求则发送状态为MAC_TRANSACTION_OVERFLOW 的 MAC_MCPS_DATA_CNF,最终 MAC 将变得不拥堵并且为一个缓存的请求发送 MAC_MCPS_DATA_CNF。所以

10、应用能在任何时候发送数据,只是数据将被队列。 应用必须分配一定字节的缓存,数目是:MAC_DATA_OFFSET+MAC_ENC_OFFSET(如果使用加密安全) 。可用使用MAC_McpsDataAlloc()来方便准确的分配这个缓存。最大的数据帧长度为MAC_MAX_FRAME_SIZE,如果使用加密安全,则还要减去 MAC_ENC_OFFSET 及其相关的加密代码区域:比如使用 AES-MIC128,则最大的数据帧长度为:max = MAC_MAX_FRAME_SIZE - MAC_ENC_OFFSET MAC_MIC_128_LEN; 参数: typedef struct sAddr_

11、t dstAddr; uint16 dstPanId; uint8 srcAddrMode; uint8 mdsuHandle; uint8 txOptions; uint8 channel; uint8 power; macDataReq_t; typedef struct macEventHdr_t hdr; sData_t msdu; macTxIntData_t internal; macSec_t sec; macDataReq_t mac; macMcpsDataReq_t; hdr 和 internal 是内部使用的,mac.mdsuHandle 是应用定义的关于数据请求的句柄值

12、,mac.txOptions 为 TX 参数位掩码,有以下一些值,其他的都很好理解了。 MAC_TXOPTION_ACK 应答传输。如果没有收到应答将重传 MAC_TXOPTION_GTS GTS 传输(unused). MAC_TXOPTION_INDIRECT 间接传输。MAC 将队列数据等待目标设备请求此数据。只有协调器才可用这种方式 MAC_TXOPTION_NO_RETRANS 无中继传输。 MAC_TXOPTION_NO_CNF 无确认。这将阻止为此帧发送 MAC_MCPS_DATA_CNF 事件 MAC_TXOPTION_ALT_BE Use PIB value MAC_ALT_

13、BE for the minimum backoff exponent. MAC_TXOPTION_PWR_CHAN 用 macDataReq_t 结构中的电源和通道值而不用 PIB 中的值来传输 void MAC_McpsPurgeReq(uint8 msduHandle) 从 MAC 数据队列中清空并丢弃数据请求,当完成操作后 MAC 发送MAC_MCPS_PURGE_CNF macMcpsDataReq_t *MAC_McpsDataAlloc(uint8 len, uint8 securityLevel, uint8 keyIdMode) 如果用此函数分配了 MAC_McpsDataR

14、eq()所需的数据缓存,在收到MAC_MCPS_DATA_CNF 后要通过 osal_msg_deallocate(pBuffer)来释放。若不使用安全则设置 securityLevel 和 keyIdMode 为 MAC_SEC_LEVEL_NONE 和MAC_KEY_ID_MODE_NONE 回调函数事件 这些回调函数由应用调用,用来将事件或者数据从 MAC 传到应用。 MAC_MCPS_DATA_IND 从 MAC 发送数据到应用。这个事件的参数指向一个动态分配的缓存,当应用用完数据后必须调用 osal_msg_deallocate(pData)来释放缓存。MAC 还能为应用定义的数据分

15、配额外的空间,应用定义的数据的大小由 MAC_MlmeSetReq()的属性MAC_DATA_IND_OFFSET 设置。 参数: typedef struct sAddr_t srcAddr; sAddr_t dstAddr; uint32 timestamp; uint16 timestamp2; uint16 srcPanId; uint16 dstPanId; uint8 mpduLinkQuality; uint8 correlation; uint8 rssi; uint8 dsn; macDataInd_t; typedef struct macEventHdr_t hdr; s

16、Data_t msdu; macRxIntData_t internal; macSec_t sec; macDataInd_t mac; macMcpsDataInd_t; mac.timestamp 接收到帧的时间,单位为 aUnitBackoffPeriod mac.timestamp2 接收到帧的时间,单位为内部 MAC 定时器单元 mac.correlation The raw correlation value of the received data frame. This value depends on the radio. See the chip data sheet for details. dsn 接收到的帧的数据序列 MAC_MCPS_DATA_CNF 每当调用 MAC_McpsDataReq()时就会向应用发送这个事件,这个事件返回数据请求的状态这个事件同样返回指向数据缓存的指针,应用能利用这个指针来释放空间

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号