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

📄 config.c

📁 基于TB板卡的FSK编程,telcobridges fsk develop
💻 C
📖 第 1 页 / 共 5 页
字号:
				TBX_EXIT_ERROR(TBX_RESULT_FAIL, 0, "Unable to activate trunks");
			}

			/* Allocate trunk resources */
			result = TB640FskAllocateTrunkResources ();
			if (TBX_RESULT_FAILURE (result))
			{
				TBX_EXIT_ERROR(TBX_RESULT_FAIL, 0, "Unable to allocate trunk resources");
			}

			/* Allocate VP resource on each adapters */
			result = TB640FskAllocateVPResources ();
			if (TBX_RESULT_FAILURE (result))
			{
				TBX_EXIT_ERROR(TBX_RESULT_FAIL, 0, "Unable to allocate VP resources");
			}

			/* Connect everything */
			result = TB640FskCreateConnections ();
			if (TBX_RESULT_FAILURE (result))
			{
				TBX_EXIT_ERROR(TBX_RESULT_FAIL, 0, "Unable to connect resources");
			}
		}
		#endif

		/* Allocate the async lib operation contexts */
		result = TB640FskAllocateAsyncOpContexts ();
		if (TBX_RESULT_FAILURE (result))
		{
			TBX_EXIT_ERROR(TBX_RESULT_FAIL, 0, "Unable to create asynchronous operation contexts");
		}

		/* End of the code (skip to cleanup) */
		TBX_EXIT_SUCCESS (TBX_RESULT_OK);
	}

	/*---------------------------------------------------------------------------------------------------------------------------
	 |  Error handling section
	 *--------------------------------------------------------------------------------------------------------------------------*/
	ERROR_HANDLING
	{
		/* Print error message */
		TB640_FSK_LOG (TRACE_LEVEL_ALWAYS, "%s (Result = 0x%08X, %s, line %d)\n", TBX_ERROR_DESCRIPTION, TBX_ERROR_RESULT, __FILE__, TBX_ERROR_LINE);
	}

	/*---------------------------------------------------------------------------------------------------------------------------
	 |  Cleanup section
	 *--------------------------------------------------------------------------------------------------------------------------*/
	CLEANUP
	{

	}

	RETURN;
}


/*-------------------------------------------------------------------------------------------------------------------------------
 |
 |  TB640FskCleanSystem:	This function desallocates and free the trunks, stacks, VP resources and operation librairies
 |							that were (maybe partially) opened by TB640FskConfigureSystem().
 |
 |  ~		        :	No arguments used
 |
 |  Note			:	~
 |
 |  Return          :	TBX_RESULT_OK
 |						TBX_RESULT_FAIL
 |
 *------------------------------------------------------------------------------------------------------------------------------*/
TBX_RESULT
TB640FskCleanSystem (void)
{
	TBX_RESULT							result;
	TBX_UINT32							un32AdapIdx;
	TBX_UINT32							un32OpLibIdx;
	PTB640_FSK_ADAPTER_INFO				pAdapterInfo;

	/*---------------------------------------------------------------------------------------------------------------------------
	 |  Code section
	 *--------------------------------------------------------------------------------------------------------------------------*/
	CODE
	{
		/* Initialize local variables */

		/* Check if the TBX library was opened */
		if (g_AppContext->hTbxLib == (TBX_LIB_HANDLE)NULL)
		{
			/* Nothing to do (library hasn't been opened */
			TBX_EXIT_SUCCESS (TBX_RESULT_OK);
		}

		/* Destroy asynchronous operation contexts */
		TB640FskFreeAsyncOpContexts ();

		/* Close the operation libraries */
		for (un32AdapIdx=0; un32AdapIdx<g_AppContext->un32NbAdapter; un32AdapIdx++)
		{
			pAdapterInfo = &(g_AppContext->ahAdapterInfo [un32AdapIdx]);
			for (un32OpLibIdx=0; un32OpLibIdx<pAdapterInfo->un32NbOperationLib; un32OpLibIdx++)
			{
				if (pAdapterInfo->ahOperationLib [un32OpLibIdx] != (TBX_ASYNC_LIB_HANDLE)NULL)
				{
					/* Close the library */
					result = TBXAsyncClose (pAdapterInfo->ahOperationLib [un32OpLibIdx]);
					if (TBX_RESULT_FAILURE (result))
					{
						TBX_EXIT_ERROR(TBX_RESULT_FAIL, 0, "Unable to close operation library");
					}
					pAdapterInfo->ahOperationLib [un32OpLibIdx] = NULL;
				}
			}
		}

		/* Destroy the transiant calls semaphore */
		if( g_AppContext->TransientCallsSem )
		{
			TBX_SEM_DESTROY (&(g_AppContext->TransientCallsSem));
		}
		if (g_AppContext->un32TransientCalls > 0)
		{
			TB640_FSK_LOG (TRACE_LEVEL_4, "%d VP resources were still used when you exited the application.\n", g_AppContext->un32TransientCalls);
			TB640_FSK_LOG (TRACE_LEVEL_4, "This could results in resource leak(s)\n");
		}


		#ifdef TB640_FSK_USE_INTERHOST_SIMULATION
		{
		}
		#else
		{
			/* Destroy connections */
			TB640FskDestroyConnections ();

			/* Free VP resource on each adapters */
			TB640FskFreeVPResources ();

			/* Free trunk resources */
			TB640FskFreeTrunkResources ();

			/* Put trunks in maintenance mode */
			TB640FskMaintenanceTrunks ();

			/* Free trunks */
			TB640FskFreeTrunks ();
		}
		#endif

		/* Closed opened adapters */
		TB640FskCloseAdapters ();

		/* Destroy the operation lib semaphores */
		for (un32AdapIdx=0; un32AdapIdx<g_AppContext->un32NbAdapter; un32AdapIdx++)
		{
			pAdapterInfo = &(g_AppContext->ahAdapterInfo [un32AdapIdx]);
			for (un32OpLibIdx=0; un32OpLibIdx<pAdapterInfo->un32NbOperationLib; un32OpLibIdx++)
			{
				if( pAdapterInfo->Lock.aOperationLibSem[ un32OpLibIdx ] != (TBX_SEM)TBX_HANDLE_INVALID )
				{
					TBX_SEM_DESTROY (&(pAdapterInfo->Lock.aOperationLibSem[ un32OpLibIdx ]));
				}
			}
		}

		/* Close the TBX library */
		TBXCloseLib (g_AppContext->hTbxLib);
		g_AppContext->hTbxLib = (TBX_LIB_HANDLE)TBX_HANDLE_INVALID;

		/* Destroy stress-test statistics semaphore */
		TBX_SEM_DESTROY (&g_StressStatsSem);

		/* End of the code (skip to cleanup) */
		TBX_EXIT_SUCCESS (TBX_RESULT_OK);
	}

	/*---------------------------------------------------------------------------------------------------------------------------
	 |  Error handling section
	 *--------------------------------------------------------------------------------------------------------------------------*/
	ERROR_HANDLING
	{
		/* Print error message */
		TB640_FSK_LOG (TRACE_LEVEL_ALWAYS, "%s (Result = 0x%08X, %s, line %d)\n", TBX_ERROR_DESCRIPTION, TBX_ERROR_RESULT, __FILE__, TBX_ERROR_LINE);
	}

	/*---------------------------------------------------------------------------------------------------------------------------
	 |  Cleanup section
	 *--------------------------------------------------------------------------------------------------------------------------*/
	CLEANUP
	{

	}

	RETURN;
}


/*--------------------------------------------------------------------------------------------------------------------------------
 |  Utility functions
 *------------------------------------------------------------------------------------------------------------------------------*/
static void
TB640FskGetAdapterIpAddresses(
    IN		PTBX_ADAPTER_INFO	in_pAdapterInfo,
	OUT		TBX_CHAR			out_szIpAddresses[ 256 ]
)
{
	out_szIpAddresses [0] = '\0';
	if( in_pAdapterInfo->szIpAddress0[0] != 0 && in_pAdapterInfo->szIpAddress1[0] != '\0' )
	{
		sprintf
		(
			out_szIpAddresses,
			"%s, %s, redundant ethernet",
			in_pAdapterInfo->szIpAddress0,
			in_pAdapterInfo->szIpAddress1
		);
	}
	else if( in_pAdapterInfo->szIpAddress0[0] != 0 )
	{
		sprintf
		(
			out_szIpAddresses,
			"%s",
			in_pAdapterInfo->szIpAddress0
		);
	}
	else if( in_pAdapterInfo->szIpAddress1[0] != 0 )
	{
		sprintf
		(
			out_szIpAddresses,
			"%s",
			in_pAdapterInfo->szIpAddress1
		);
	}

	return;
}

/*-------------------------------------------------------------------------------------------------------------------------------
 |
 |  TB640FskCheckAdapterFeatures:
 |
 |  ~		        :	No arguments used
 |
 |  Note			:	~
 |
 |  Return          :
 |
 *------------------------------------------------------------------------------------------------------------------------------*/
#define SET_FEATURE_MISMATCH_AND_RESULT(featureId, aMismatch, result ) \
    do { \
    aMismatch[featureId] = TBX_TRUE; \
    result = TBX_RESULT_NOT_SUPPORTED_BY_LICENSE; \
    } while(0)
#define SET_TRUNK_MISMATCH_AND_RESULT(featureId, aMismatch, result, fTrunkMismatch ) \
    do { \
    aMismatch[featureId] = TBX_TRUE; \
    result = TBX_RESULT_NOT_SUPPORTED_BY_LICENSE; \
    fTrunkMismatch = TBX_TRUE; \
    } while(0)
#define STR_TOKEN_SIZE          20
#define STR_TOKEN_LINE_SIZE     80
/* This size should be sufficient for to log adapter info and Licence features unmatching configuration (max 40 lignes de 80 char. */
#define STR_LOG_BUFFER_LICENSE_FEATURE_SIZE     (40*80)
/* This size should be sufficient for to log Trunk configuration unmatching license features (max 70 ligne de 80 char.) */
#define STR_LOG_BUFFER_TRUNK_CONFIG_SIZE        (80*80)
TBX_UINT32      g_au32TrunkTypeToFeatureId[TB640_TRUNK_TYPE_LAST] = {
                        (TBX_UINT32)NULL,
                        TBX_FEATURE_TYPE_TRUNK_E1,
                        TBX_FEATURE_TYPE_TRUNK_T1,
                        TBX_FEATURE_TYPE_TRUNK_J1 };

PTBX_CHAR        g_apszTrunkTypeString[TB640_TRUNK_TYPE_LAST] = { NULL, "E1", "T1", "J1" };

TBX_RESULT
TB640FskCheckAdapterFeatures (
    IN          PTB640_FSK_ADAPTER_INFO			pAdapterInfo)
{
    TBX_RESULT_API          apiResult = TBX_RESULT_API_OK;
    TBX_RESULT		        result = TBX_RESULT_OK;
    TBX_UINT32		        un32AdapIdx = 0;
    TBX_UINT32		        un32FeatureId = 0;
	TBX_UINT32				u32NbTrunkPrint = 0;
    TBX_BOOL                fTrunkMismatch = TBX_FALSE;
    PTB640_FSK_TRUNK_INFO   pTrunkInfo;
    PTBX_CHAR               pszToken;
    TBX_CHAR                szTrunkLine[STR_TOKEN_LINE_SIZE];
    TBX_CHAR	            szAdapterIPAddresses[256];
    PTBX_CHAR               pszLogBufferLicenseFeature = NULL;
    PTBX_CHAR               pszLogBufferTrunkConfig = NULL;
    TBX_BOOL                af32FeatureMismatch[TBX_FEATURE_TYPE_LAST];
    TBX_UINT32              aun32TrunkCount[TB640_TRUNK_TYPE_LAST];
    TBX_UINT32              un32NbChannel = 0;


    /*---------------------------------------------------------------------------------------------------------------------------
	 |  Code section
	 *--------------------------------------------------------------------------------------------------------------------------*/
	CODE
	{
        /*---------------------------------------------------------------------------------------------------------------------------
    	 |  Initialize af32FeatureMismatch and aun32TrunkCount
    	 *--------------------------------------------------------------------------------------------------------------------------*/
        memset(af32FeatureMismatch, TBX_FALSE, sizeof(af32FeatureMismatch));
        memset(aun32TrunkCount, 0, sizeof(aun32TrunkCount));

        /*---------------------------------------------------------------------------------------------------------------------------
    	 |  Allocate pszLogBuffer
    	 *--------------------------------------------------------------------------------------------------------------------------*/
    	 pszLogBufferLicenseFeature = (PTBX_CHAR)calloc( STR_LOG_BUFFER_LICENSE_FEATURE_SIZE, sizeof(TBX_CHAR) );
    	 if( !pszLogBufferLicenseFeature )
    	 {
    	    TBX_EXIT_ERROR(TBX_RESULT_OUT_OF_MEMORY, 0, "Failed to allocate the licence feature log buffer");
    	 }

    	 pszLogBufferTrunkConfig = (PTBX_CHAR)calloc( STR_LOG_BUFFER_TRUNK_CONFIG_SIZE, sizeof(TBX_CHAR) );
    	 if( !pszLogBufferTrunkConfig )
    	 {
    	    TBX_EXIT_ERROR(TBX_RESULT_OUT_OF_MEMORY, 0, "Failed to allocate the trunk config log buffer");
    	 }

	    /*---------------------------------------------------------------------------------------------------------------------------
    	 |  Retreive Active Features and adapter info
    	 *--------------------------------------------------------------------------------------------------------------------------*/
        if( pAdapterInfo->hAdapter != (TBX_ADAPTER_HANDLE)NULL )
        {
            /* Retreive the list of active feature from adapter */
            apiResult = RetrieveActiveFeatures(     NULL,

⌨️ 快捷键说明

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