📄 ztcconfiguration.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 + -