⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ztcconfiguration.c

📁 freescale的基于802.15.4的无线通讯例程
💻 C
字号:
/******************************************************************************
* This file handles the request sent to ZTC from test client to configure ZTC 
*
*
* (c) Copyright 2006, Freescale, Inc. All rights reserved.
*
* Freescale Semiconductor Confidential Proprietary
*
* No part of this document must be reproduced in any form - including copied,
* transcribed, printed or by any electronic means - without specific written
* permission from Freescale Semiconductor Danmark A/S.
*
******************************************************************************/
#if ( gZtcIncluded_d == 1  ) 
#include "EmbeddedTypes.h"
#include "ZtcInterface.h"
#include "ZtcConfiguration.h"
#include "ZtcFilter.h"
#include "FunctionLib.h"

/******************************************************************************
*******************************************************************************
* Private macros
*******************************************************************************
******************************************************************************/
#define mNumOfSAPHandler_c            18 /* num of SAPHandlers to monitor */
#define mNumOfSAP_c                   9  /* Total number of SAPs */
#define mHooked                       1  /*  Saps are hooked */
#define mUnhooked                     0	 /* Saps are not hooked */  
#define mMoreThanOneSetOfSapHooked_c  1   

#define  mNumOfBitMapedMCPS_SAPCmd_c  1
#define  mNumOfBitMapedMLME_SAPCmd_c  4
#define  mNumOfBitMapedASP_SAPCmd_c   3
#define  mNumOfBitMapedNLDE_SAPCmd_c  1
#define  mNumOfBitMapedNLME_SAPCmd_c  3
#define  mNumOfBitMapedAPSDE_SAPCmd_c 1
#define  mNumOfBitMapedAPSME_SAPCmd_c 3
#define  mNumOfBitMapedAFDE_SAPCmd_c  3
#define  mNumOfBitMapedZDP_SAPCmd_c   10

#define  mTotalNumOfBitMapedCmd_c \
  mNumOfBitMapedMCPS_SAPCmd_c  +  \
  mNumOfBitMapedMLME_SAPCmd_c  +  \
  mNumOfBitMapedASP_SAPCmd_c   +  \
  mNumOfBitMapedNLDE_SAPCmd_c  +  \
	mNumOfBitMapedNLME_SAPCmd_c  +  \
	mNumOfBitMapedAPSDE_SAPCmd_c +  \
	mNumOfBitMapedAPSME_SAPCmd_c +  \
	mNumOfBitMapedAFDE_SAPCmd_c  +  \
	mNumOfBitMapedZDP_SAPCmd_c


/*  SAPs for diffferent layers  */
enum  {
  mMCPS_SAP_c,
  mMLME_SAP_c,
  mASP_SAP_c,
  mNLDE_SAP_c,
  mNLME_SAP_c,
  mAPSDE_SAP_c,
  mAFDE_SAP_c,
  mAPSME_SAP_c,
  mZDP_SAP_c 
};


#define  mStartingIndexInFilterForMCPSSAP_c   0
#define  mStartingIndexInFilterForMLMESAP_c   1
#define  mStartingIndexInFilterForAPSSAP_c    5
#define  mStartingIndexInFilterForNLDESAP_c   8
#define  mStartingIndexInFilterForNLMESAP_c   9
#define  mStartingIndexInFilterForAPSDESAP_c  12
#define  mStartingIndexInFilterForAFDESAP_c   13
#define  mStartingIndexInFilterForAPSMESAP_c  16
#define  mStartingIndexInFilterForZDPSAP_c    19

#define mNumOfIndexUsedInFilterForMCPSSAP_c		1
#define mNumOfIndexUsedInFilterForMLMESAP_c		4
#define mNumOfIndexUsedInFilterForAPSSAP_c		3
#define mNumOfIndexUsedInFilterForNLDESAP_c		1
#define mNumOfIndexUsedInFilterForNLMESAP_c		3
#define mNumOfIndexUsedInFilterForAPSDESAP_c  1
#define mNumOfIndexUsedInFilterForAFDESAP_c		3
#define mNumOfIndexUsedInFilterForAPSMESAP_c  3
#define mNumOfIndexUsedInFilterForZDPSAP_c		10

/******************************************************************************
* Formulates the frame to send to the Test client
*
* Interface assumptions:
*   None
*
* The routine limitations.
*   None
*
* Return value:
*   Status
*
* Effects on global data.
*   None
*
* Source of algorithm used.
*   None
*
* Revison history:
*
*   date    Author   Comments
*   ------  ------   --------
*   240306  LS,      Updated
******************************************************************************/ 

#define ZTCConfigure_SendConf( pConfigureMsg, opCodeGrpId, length  ) \
  ZTCQueue_QueueToTestClient( pConfigureMsg, gOpCodeGrpForZTCConf_c, \
  opCodeGrpId,length );

/******************************************************************************
*******************************************************************************
* Private prototypes
*******************************************************************************
******************************************************************************/

/******************************************************************************
* This function checks whether hooking of the SAPS are valid.At a time only
* one layer SAP can be hooked
*
* Interface assumptions:
*   None
*
* The routine limitations.
*   None
*
* Return value:
*   Status
*
* Effects on global data.
*   None
*
* Source of algorithm used.
*   None
*
* Revison history:
*
*   date    Author   Comments
*   ------  ------   --------
*   240306    LS,      Updated
******************************************************************************/ 
static bool_t ZTCConfigure_ValidateHookSetting
  (
  const ZTCMessage_t *const  /* IN: Pointer to the data */ 
  );

/******************************************************************************
*******************************************************************************
* Private type definitions
*******************************************************************************
******************************************************************************/
/* None */

/******************************************************************************
*******************************************************************************
* Private memory declarations
*******************************************************************************
******************************************************************************/
/* None */

/******************************************************************************
*******************************************************************************
* Public memory declarations
*******************************************************************************
******************************************************************************/
/* This array will store the index from where the filter information for a
particular SAP starts.*/
const gSAPIdTofilterDetails_t gaSAPIdToFilterIndex[ mNumOfSAP_c ] =  { 
  { mStartingIndexInFilterForMCPSSAP_c, mNumOfIndexUsedInFilterForMCPSSAP_c },
  { mStartingIndexInFilterForMLMESAP_c, mNumOfIndexUsedInFilterForMLMESAP_c },
  { mStartingIndexInFilterForAPSSAP_c,  mNumOfIndexUsedInFilterForAPSSAP_c  },
  { mStartingIndexInFilterForNLDESAP_c, mNumOfIndexUsedInFilterForNLDESAP_c },
  { mStartingIndexInFilterForNLMESAP_c, mNumOfIndexUsedInFilterForNLMESAP_c },
  { mStartingIndexInFilterForAPSDESAP_c,mNumOfIndexUsedInFilterForAPSDESAP_c},
  { mStartingIndexInFilterForAFDESAP_c, mNumOfIndexUsedInFilterForAFDESAP_c },
  { mStartingIndexInFilterForAPSMESAP_c,mNumOfIndexUsedInFilterForAPSMESAP_c},
  { mStartingIndexInFilterForZDPSAP_c,  mNumOfIndexUsedInFilterForZDPSAP_c  }
};

/* Stores the SAP Modes */
 uint8_t gaZTC_SAPMode[ mNumOfSAPHandler_c ] = {
  gDefaultMCPS_SAPMode_c  , gDefaultMCPS_SAPMode_c  ,
  gDefaultMLME_SAPMode_c  , gDefaultMLME_SAPMode_c  ,
  gDefaultAPS_SAPMode_c   , gDefaultAPS_SAPMode_c   ,
  gDefaultNLDE_SAPMode_c  , gDefaultNLDE_SAPMode_c  , 
  gDefaultNLME_SAPMode_c  , gDefaultNLME_SAPMode_c  ,
  gDefaultAPSDE_SAPMode_c , gDefaultAPSDE_SAPMode_c , 
  gDefaultAPSME_SAPMode_c , gDefaultAPSME_SAPMode_c , 
  gDefaultAFDE_SAPMode_c  , gDefaultAFDE_SAPMode_c  , 
  gDefaultZDP_SAPMode_c   , gDefaultZDP_SAPMode_c
};

/* Stores the filter information of all the primitives. An array to 
  accommodate all the primitives(bit maped) for filter information */
 uint8_t gaFilter[ mTotalNumOfBitMapedCmd_c ] = {
  gDefaultMCPSFilterSettingCmd_c,
  gDefaultMLMEJoinAndLeaveCmd_c,
  gDefaultMLMESynchronousCallCmd_c,
  gDefaultMLMESyncAndGTSCmd_c,
  gDefaultMLMEScanAndStartCmd_c,
  gDefaultASPToAppDirectionPrimitiveCmd_c,
  gDefaultAppToASPDirectionPrimitiveCmdSet1_c,
  gDefaultAppToASPDirectionPrimitiveCmdSet2_c,
  gDefaultNLDE_SAPCmd_c,
  gDefaultNLMENwkDiscoveryCmd_c,
  gDefaultNLMENwkJoinAndLeaveCmd_c,
  gDefaultNLMENwkSyncAndIBMaintainanceCmd_c,
  gDefaultAPSDE_SAPCmd_c,
  gDefaultAPSME_SAPCmd_c,
  gDefaultAPSMEEstablishAndTransportKeyCmd_c,
  gDefaultAPSMEDeviceAndKeyMaintainanceCmd_c,
  gDefaultAFDERegAndDeRegCmd_c,
  gDefaultAFDEDataTranmissionCmd_c,
  gDefaultAFDE_ZDPInterfaceCmd_c,
  gDefaultZDPDescriptorCmd_c,
  gDefaultZDPBindCmd_c,
  gDefaultZDPMgmtTableRequestCmd_c,
  gDefaultZDPMgmtNwkCmd_c,
  gDefaultZDPDeviceDiscoveryCmd_c,
  gDefaultZDPEpsDetailCmd_c,
  gDefaultZDPSecDetailCmdSet1_c,
  gDefaultZDPSecDetailCmdSet2_c,
  gDefaultZDPNwkDetailCmdSet1_c,
  gDefaultZDPNwkDetailCmdSet2_c
}; 

/******************************************************************************
*******************************************************************************
* Public functions
*******************************************************************************
******************************************************************************/

void ZTCConfigure_Configure
  (
  const ZTCMessage_t *const pMsg  /*  IN: Message recived from Test client */
  )
{
  uint8_t status = gZTCSucess_c;
  uint8_t sap; 
  uint8_t length;
  uint8_t iZTC_SAPMode;
  uint8_t iReceivedData;
  uint8_t aZTC_SAPModeData[ mNumOfSAP_c ];
  uint8_t opCodeGrpId = pMsg->opCodeId;
  uint8_t *pFilter;
  uint8_t *pConfigureMsg = NULL;

  switch( opCodeGrpId ) {
    /*  SAPs can be configured for one of the three available modes.
     The available modes are Disable, Monitor and Hook. */
    case gModeConfigure_c:
     
      status = ZTCConfigure_ValidateHookSetting( pMsg );
      if( gZTCSucess_c == status )  {
        for( iZTC_SAPMode = iReceivedData = 0;
        iReceivedData < mNumOfSAP_c; iReceivedData++,iZTC_SAPMode++ ) {
          gaZTC_SAPMode[ iZTC_SAPMode++ ] = pMsg -> data[ iReceivedData ];
          gaZTC_SAPMode[ iZTC_SAPMode ] = pMsg -> data[ iReceivedData ]; 
        }
      }
      length = sizeof( uint8_t ); 
      pConfigureMsg = &status;
      break; 
    
    /* This module stores the filter information set by the
      user (filter status) */
    case  gFilterConfigure_c:
      /* Which SAP filter information is to be updated is stored in sap */
      sap = (uint8_t)(( pMsg -> data ) );
      
      /* Starting address of the filter information sent by the test client is 
      stored in pFilter. Only the filter information for the particular SAP 
      mentioned will be stored in the ZTC filter information base */    
      pFilter = (( pMsg->data + 1 ) + 
        ( gaSAPIdToFilterIndex[( sap )].startIndex ));
      /* Calls to set the filter information for the particular SAP */ 
      ZTCFilter_SetFilterForSAP( sap, pFilter );
      length = sizeof( uint8_t );      
      pConfigureMsg = &status;
      break;
    
    /*  Gives recent filter settings on Test client */
    case  gGetFilterSettings_c:
      pConfigureMsg = gaFilter;
      length = sizeof( gaFilter );
      break;
    
    /*  Gives recent Mode settings on Test client */
    case  gGetSAPMode_c:
      for( iZTC_SAPMode = iReceivedData = 0;
      iReceivedData < mNumOfSAP_c; iReceivedData++, iZTC_SAPMode++ ) {
        aZTC_SAPModeData[ iReceivedData ] = gaZTC_SAPMode[ iZTC_SAPMode++ ];
      }
      pConfigureMsg = aZTC_SAPModeData;
      length = sizeof( aZTC_SAPModeData );
      break;
    
    default:
      break;
  }
  
  ( void )ZTCConfigure_SendConf(( uint8_t * )pConfigureMsg,
    opCodeGrpId, length );
}

/******************************************************************************
*******************************************************************************
* Private functions
*******************************************************************************
******************************************************************************/
static bool_t ZTCConfigure_ValidateHookSetting
  (
  const ZTCMessage_t *const pFilter  /*  IN: Pointer to the data */ 
  )
{
  uint8_t status = gZTCSucess_c;
  uint8_t moreThanOneSapHooked_c = 1;
   
  /* MCPS, MLME and ASP Saps can be hooked simultaneously */  
  uint8_t value = ( pFilter->data[ mMCPS_SAP_c ] == gZTC_ModeHook_c || 
    pFilter->data[ mMLME_SAP_c ] == gZTC_ModeHook_c || 
    pFilter->data[ mASP_SAP_c ] == gZTC_ModeHook_c  ) ? mHooked : mUnhooked; 
    
  /* NLDE ,NLME SAPS can be hooked simultaneously */
  value += ( pFilter->data[ mNLDE_SAP_c ] == gZTC_ModeHook_c || 
    pFilter->data[ mNLME_SAP_c ] == gZTC_ModeHook_c ) ? mHooked : mUnhooked;
  
  /* APSDE and APSME SAPS can be hooked simultaneously */  
  value += ( pFilter->data[ mAPSDE_SAP_c ] == gZTC_ModeHook_c || 
    pFilter->data[ mAPSME_SAP_c ] == gZTC_ModeHook_c )  ? mHooked : mUnhooked;
  
  /* AFDE SAP can be hooked and ZDP SAP can be hooked */    
  value += ( pFilter->data[ mAFDE_SAP_c ] == gZTC_ModeHook_c ) ||  
    ( pFilter->data[ mZDP_SAP_c ] == gZTC_ModeHook_c ) ? mHooked : mUnhooked;                                      
  
  if( value > mMoreThanOneSetOfSapHooked_c )  {
    status = gZTCInvalidRequest_c;
  } 
  return status; 
}
/******************************************************************************
*******************************************************************************
* Private Debug stuff
*******************************************************************************
******************************************************************************/
/*  None  */


#endif /* ( gZtcIncluded_d == 1  )  */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -