Simplicitiプロトコルスタック移植ノート2(グループネットワークの実現)

3544 ワード

この章では,プロトコルスタックグループネットワークの部分とその実現方法について主に詳しく述べ,ここで自分も振り返る.現在、ブロガーは公式のプロトコルスタックに基づいて簡単なプロトコルスタックを書き換えており、後で説明して共有します.
文章はブロガーが自分で書いたもので、問題を見つけたら、指摘してください.
転記は出典を明記してください.ありがとうございます. http://blog.csdn.net/libin55/article/details/52795997
一、概要
このネットワークはTCP/IP内のサーバとクライアントの概念に似ており,プライマリノードAPは長電力供給装置である.彼は常にネットワーク全体(サーバサーバサーバと理解できる)を監視しており、各ノードデバイスED(クライアントClientと理解できる)は監視されている.このネットワークに参加するには、APとの接続を確立するには、まず3回握手しなければなりません.
握手チェックが通過すると、APは、通信リンクの識別子として使用される一意のID番号をEDに割り当てます.
二、コード実装
一、APマスターノード:
CC 2530プロジェクトを開くと、前の章で述べました.mian関数の表示
BSP_Init();//     
SMPL_Init(sCB); //        simpliciti    

SMPLについて重点的にお話ししますInitという関数は、まずソースコードを貼って(自分で注釈をつけた)、nwk_api.cファイルの下
/***********************************************************************************
 * @fn          SMPL_Init
 *
 * @brief       Initialize the SimpliciTI stack.
 *
 * input parameters
 * @param   f  - Pointer to call back function. Function called by NWK when
 *               user application frame received. The callback is done in the
 *               ISR thread. Argument is Link ID associated with frame. Function
 *               returns 0 if frame is to be kept by NWK, otherwise 1. Frame
 *               should be kept if application will do a SMPL_Receive() in the
 *               user thread (recommended). Pointer may be NULL.
 *
 * output parameters
 *
 * @return   Status of operation:
 *             SMPL_SUCCESS
 *             SMPL_NO_JOIN     No Join reply. AP possibly not yet up.
 *             SMPL_NO_CHANNEL  Only if Frequency Agility enabled. Channel scan
 *                              failed. AP possibly not yet up.
 */
smplStatus_t SMPL_Init(uint8_t (*f)(linkID_t))
{
  smplStatus_t rc;

  if (!sInit_done)//       
  {
    /* set up radio. */
    MRFI_Init();//     

    /* initialize network */
    if ((rc=nwk_nwkInit(f)) != SMPL_SUCCESS)//       
    {
      return rc;
    }

    MRFI_WakeUp();//  RF  
#if defined( FREQUENCY_AGILITY )//    
    {
      freqEntry_t chan;

      chan.logicalChan = 0;
      /* ok to set default channel explicitly now that MRFI initialized. */
      nwk_setChannel(&chan);
    }
#endif
    /* don't turn Rx on if we're an end device that isn't always on. */
    /* but do turn the radio on for PLL operations */
#if !defined( END_DEVICE ) || defined( NWK_PLL )//    
    MRFI_RxOn();
#endif

#if defined( END_DEVICE )//          
    /* All except End Devices are in promiscuous mode */
    MRFI_SetRxAddrFilter((uint8_t *)nwk_getMyAddress());
    MRFI_EnableRxAddrFilter();
#endif
  }
  sInit_done = 1;

#ifdef NWK_PLL//    ,     
  /* If the PLL is enabled then it must get running before the join
   * request or the system may lock up in the join request becuase
   * PLL is not locked in.
   */
  // turn on the PLL
  SMPL_Ioctl(IOCTL_OBJ_PLL, IOCTL_ACT_ON, NULL);
  // reference clocks are by definition always locked.
  #ifndef NWK_PLL_REFERENCE_CLOCK
    // wait for a 5ms failure rate to be achieved
    while( nwk_pllIsLocked( 0 ) == false )
      nwk_pllBackgrounder( false );
  #endif
#endif

  /* Join. if no AP or Join fails that status is returned. */
  rc = nwk_join();

  return rc;
}

MRFI_Init();無線周波数初期化インタフェースのため、TIはインタフェースの下で自分の無線周波数駆動を書き終え、他の映画に移植する必要がある場合は、このインタフェースの下で変更することができます.
MRFI_RxOn();受信が開始されると、APマスターノードは、ネットワークを常時傍受するため、通信以外の時間は受信モードになる.
注意:TI無線周波数チップ通信は半二重に属するため、すなわち受信または送信状態(Zigbeeとは異なる)にあるのみである.
nwk_join();ここではプライマリノードAPが構成されているので、このインタフェースはすべて処理されません.