ZStack間接panid通信設置(將zigbee改裝成點對點通信的方法)

雖然這種改裝違背了zigbee這個協議本身的初衷,但是依然可以滿足某種特定的通信需求,我的項目中用到了,貼出來給大家看看,是一師兄整理的資料,在此分享給大家

間接panId通信的優點:同一信道下面的所有節點在其通信範圍內都可以進行通信。

設置節點進行間接panid通信的方法:

1、  首先在預編譯裏面添加:INTER_PAN

2、  OSAL_GenericApp.c文件中,先添加#include "stub_aps.h"頭文件,然後分別在tasksArr數組裏面的最後添加StubAPS_ProcessEvent,在osalInitTasks方法中最後添加StubAPS_Init(taskID);具體如下面代碼塊:(紅色部分爲添加部分)

const pTaskEventHandlerFn tasksArr[] = {

  macEventLoop,

  nwk_event_loop,

  Hal_ProcessEvent,

#if defined( MT_TASK )

  MT_ProcessEvent,

#endif

  APS_event_loop,

#if defined ( ZIGBEE_FRAGMENTATION )

  APSF_ProcessEvent,

#endif

  ZDApp_event_loop,

#if defined ( ZIGBEE_FREQ_AGILITY ) || defined ( ZIGBEE_PANID_CONFLICT )

  ZDNwkMgr_event_loop,

#endif

  GenericApp_ProcessEvent,

  StubAPS_ProcessEvent

};

void osalInitTasks( void )

{

  uint8 taskID = 0;

  tasksEvents = (uint16 *)osal_mem_alloc( sizeof( uint16 ) * tasksCnt);

  osal_memset( tasksEvents, 0, (sizeof( uint16 ) * tasksCnt));

  macTaskInit( taskID++ );

  nwk_init( taskID++ );

  Hal_Init( taskID++ );

#if defined( MT_TASK )

  MT_TaskInit( taskID++ );//初始化串口

#endif

  APS_Init( taskID++ );

#if defined ( ZIGBEE_FRAGMENTATION )

  APSF_Init( taskID++ );

#endif

  ZDApp_Init( taskID++ );

#if defined ( ZIGBEE_FREQ_AGILITY ) || defined ( ZIGBEE_PANID_CONFLICT )

  ZDNwkMgr_Init( taskID++ );

#endif

  GenericApp_Init( taskID++);

  StubAPS_Init(taskID);

}

3、  GenericApp.c文件中GenericApp_Init( uint8 task_id )方法中分別添加如下部分:GenericApp_DstAddr.endPoint = STUBAPS_INTER_PAN_EP; //間接panid端點描述符

GenericApp_epDesc.endPoint = STUBAPS_INTER_PAN_EP;//間接panid端點描述符

StubAPS_SetInterPanChannel(0x0B);//設置間接通信的信道爲11信道

StubAPS_RegisterApp( &GenericApp_epDesc );//註冊端點描述符

4、  無線通信時需要添加的內容:

GenericApp.c文件中的GenericApp_SendTheMessage方法中需要設置目的地址的panid,(例如GenericApp_DstAddr.panId=0x0003;  //目的panid0XFFFF表示同一信道中的所有panid)。

如果將GenericApp_DstAddr.panId=0xFFFF,那麼表示該節點將廣播信息;

如果將GenericApp_DstAddr.panId設置爲固定的值即在0X0000~0X3FFF任意一個,表示該節點與指定的panid進行通信,可以認爲是單播通信。

設置固定panid的步驟如下

1、  首先在f8wConfig.cfg中找到-DZDAPP_CONFIG_PAN_ID,將這個值設置爲固定的panid值(例如-DZDAPP_CONFIG_PAN_ID=0x0001,表示該節點的panid0x0001)。

2、  ZDOApp.c中的ZDApp_NwkDescListProcessing方法中,需要修改這段代碼:修改此處紅色部分,這個值就是在第一步中設置的panid的值

      if ( zgConfigPANID != 0x0001)

      {

        // PAN Id is preconfigured. check if it matches

        if ( pNwkDesc->panId != zgConfigPANID )

          continue;

      }

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章