zoukankan      html  css  js  c++  java
  • 根据MAC地址获取网络地址及ZDP_NwkAddrReq函数的用法

    1..对于设备需要获取本设备的网络地址和MAC地址:

    NLME_GetShortAddr()——返回本设备的16位网络地址
    NLME_GetExtAddr()——  返回本设备的64位扩展地址
    2.使用下面的函数获取该设备的父亲设备的地址:
    NLME_GetCoordShortAddr()——返回本设备的父亲设备的16位网络地址
    NLME_GetCoordExtAddr()——  返回本设备的父亲设备的64位扩展地址

    3.利用ZDP_NwkAddrReq函数获取任意节点的网络地址,这个函数启用的是无线广播的形式

    函数原型;afStatus_t ZDP_NwkAddrReq( uint8 *IEEEAddress,  byte ReqType, byte StartIndex,  byte SecurityEnable )

     byte ReqType:返回设备的类型  (1):ZDP_NWKADDR_REQTYPE_SINGLE :只返回当前设备的短地址和扩展地址

                                                         (2):ZDP_NWKADDR_REQTYPE_SINGLE:返回所有相关联设备的短地址和长地址

      具体的用法如下:A发送 nwk address req 给B, B会自动发回nwk address response.

    要处理nwk address response命令获取B的地址需要做如下事情在A端:
    1. 在XXX_init() 函数中添加 ZDO_RegisterForZDOMsg( zclSampleSw_TaskID, NWK_addr_rsp );//底层的一些事件消息引入到应用层的方法

    2.(1)首先这个消息是一个ZDO层的命令,那么这个response消息会从底层传到ZDO层,

     首先在数据的传输流程上,NWK_addr_rsp消息首先收到的是在物理层,然后到MAC,再到网络层,再到AF层,AF会根据数据的end point来分发数据。

    所有ZDO的数据的end point规定都是0,所以AF层把这个数据交给ZDO层来处理,数据首先来到了ZDApp_event_loop( uint8 task_id, UINT16 events )函数中

    的ZDApp_ProcessOSALMsg( (osal_event_hdr_t *)msg_ptr )进行处理。在这个函数进入以后,首先数据被判断为是一个AF的数据,那么进入ZDP_IncomingData( (afIncomingMSGPacket_t *)msgPtr );进行处理,进入这个函数以后会调用到ZDO_SendMsgCBs( &inMsg ); 在这个函数里面,会把ZDO_CB_MSG发送给所有注册了对应处理ZDO消息的callback函数的task中。 那么这边在ZDO层,这个消息是默认注册的,所以会有一个ZDO_CB_MSG发送给ZDO层自己,会发送到ZDApp_event_loop里面,这个时候处理的变成了ZDApp_ProcessMsgCBs( (zdoIncomingMsg_t *)msgPtr );,这个函数就可以对具体的ZDO的消息进行处理了,比方说处理NWK_addr_rsp。 (2)..如果应用层也想得到这个消息另外有些用户不希望在ZDO层做很多代码的改动,直接希望能够在应用层处理这个ZDO_CB_MSG消息,所以需要在应用层初始化的时候,通过 ZDO_RegisterForZDOMsg( sapi_TaskID, NWK_addr_rsp ); 这样完成注册以后,直接在应用层的event loop里面就可以收到ZDO_CB_MSG,然后同样的方式可以通过switch case的办法去直接处理NWK_addr_rsp消息了。

    这个函数里面你可以去做处理了,那么处理的方法,先把数据进行解析,类似于下面的过程。

    //解析地址函数的原型:ZDO_NwkIEEEAddrResp_t      *ZDO_ParseAddrRsp( zdoIncomingMsg_t *inMsg );

    ZDO_NwkIEEEAddrResp_t *pAddrRsp;

    pAddrRsp = ZDO_ParseAddrRsp( inMsg );//拿到pAddrRsp就可以了     parse:解析的意思
    if ( pAddrRsp )
    {
    if ( pAddrRsp->status == ZSuccess )
    {
    ZDO_UpdateAddrManager( pAddrRsp->nwkAddr, pAddrRsp->extAddr );  //把长短地址都存放在了地址管理器中
    }

     上面的是两种方法,都可行的。下面是相关的帖子和文库

    重邮的应用实列:http://www.doc88.com/p-7973315994736.html

    e2e上的帖子:https://e2echina.ti.com/question_answer/wireless_connectivity/zigbee/f/104/t/91221

     

  • 相关阅读:
    设置N秒后执行某个方法或函数
    3D Touch的简单使用
    iOS app 上架的流程与注意点
    使用ueditor时候修改图片路径及其相关信息
    给某个view增加颜色渐变图层
    文字冒泡效果
    iOS获取设备型号、设备类型等信息
    “匿名内部类”的使用场合举例
    TreeSet之用外部比较器实现自定义有序(重要)
    TreeSet的运用之使用内部比较器实现自定义有序(重要)
  • 原文地址:https://www.cnblogs.com/F-beifeng/p/9707278.html
Copyright © 2011-2022 走看看