5.3 发送数据 为了执行数据传输,应用首先需要建立一个NWK_DataReq_t类型数据传输请求指明数据的载荷,数据载荷尺寸,设置变量传输参数,并且定义回调函数来执行通知应用程序传输结果。 NWK_DataReq()函数被用来发送数据。注意NWK_DataReq()对于同一NWK_DataReq_t 结构必须被调用一次直到确认回调函数被调用。NWK_DataReq_t结构字段,可以被用户处理,如下表所示:
表5-1 网络数据请求参数 dstEndpoint 目地设备的网络地址 dstEndpoint 目地设备的端点数 srcEndpoint 本地端点数 Options 数据请求选择。它可以是下列内容的组合(使用位或操作符”|”) Data 指向装载数据 Size 装载数扰的长度 Confirm 指向确认回调函数。它应有以下原型: “void confirm(NWK_DataReq_t *req)” Status 这个字段由栈添充并且能被确认回调函数访问。它可以有表5-3的值之一。 Control 这个字段由栈添充并且能被确认回调函数访问。它包含从确认命令帧的控制字段中的值
表5-2 数据请求操作 NWK_OPT_ACK_REQUEST 请求确认 NWK_OPT_ENABLE_SECURITY 加密的有效载荷 NWK_OPT_BROADCAST_PAN_ID 设置目地PAN ID 为0xffff(广播) NWK_OPT_LINK_LOCAL 在网络帧控制字段中设置一个连接本地字段到1 NWK_OPT_MULTICAST 将多播字段设置为1和将消息发送到由dstaddr字段表示 一组 表 5-3 数据请求状态码 NWK_SUCCESS_STATUS 操作成功完成 NWK_ERROR_STATUS 不知道的错误 NWK_OUT_OF_MEMORY_STATUS 缓冲区定位失败 NWK_NO_ACK_STATUS 网络级确认不被接怍 NWK_NO_ROUTE_STATUS 路由到目地地址没有找到 NWK_PHY_CHANNEL_ACCESS_FAILURE_STATUS 无线未能获得信道的访问权限 NWK_PHY_NO_ACK_STATUS 没有收到物理层的确认 发送数据例子: static uint8_t message; static NWK_DataReq_t nwkDataReq; static void appDataConf(NWK_DataReq_t *req) { if (NWK_SUCCESS_STATUS == req->status) // frame was sent successfully else // some error happened } static void sendFrame(void) { nwkDataReq.dstAddr = 0; nwkDataReq.dstEndpoint = 1; nwkDataReq.srcEndpoint = 5; nwkDataReq.options = NWK_OPT_ACK_REQUEST | NWK_OPT_ENABLE_SECURITY; nwkDataReq.data = &message; nwkDataReq.size = sizeof(message); nwkDataReq.confirm = appDataConf; NWK_DataReq(&nwkDataReq); }
|