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

📄 cli.c

📁 基于TB板卡的FSK编程,telcobridges fsk develop
💻 C
📖 第 1 页 / 共 5 页
字号:
				un32NbToken++;
				*out_pun32AdapterNb = atoi (pToken);
			}
			else if (un32NbToken == 1)
			{
				PTBX_CHAR		pSubToken;

				un32NbToken++;

				/* Check which trunk has been selected */
				un32Trunk = atoi (pToken);
				*out_pun32TrunkFirst = un32Trunk;

				/* Parse the next token */
				pSubToken = strchr (pToken, '-');
				if( pSubToken++ )
					un32TrunkTop = atoi (pSubToken);
				else
					un32TrunkTop = un32Trunk;

				un32TrunkCnt = un32TrunkTop - un32Trunk + 1;
				*out_pun32TrunkCnt = un32TrunkCnt;

			}
			else
			{
				un32NbToken++;
				*out_pun32TimeslotNb = atoi (pToken);
			}

			/* Parse the next token */
			pToken = strtok (NULL, ",");
		}

		/* Validate the adapter */
		if (*out_pun32AdapterNb == (TBX_UINT32)-1)
		{
			*out_pun32TrunkFirst	= (TBX_UINT32)-1;
			*out_pun32TrunkCnt		= (TBX_UINT32)1;
			*out_pun32TimeslotNb	= (TBX_UINT32)-1;
			TBX_EXIT_SUCCESS (TBX_RESULT_OK);
		}
		if (*out_pun32AdapterNb >= g_AppContext->un32NbAdapter)
		{
			TB640_FSK_DISPLAY_PRINT ("Invalid adapter selected (%d)\n", *out_pun32AdapterNb);
			TBX_EXIT_ERROR(TBX_RESULT_FAIL, 0, "Invalid selection");
		}
		pAdapterInfo = &(g_AppContext->ahAdapterInfo [*out_pun32AdapterNb]);

		/* Validate the trunk */
		if (*out_pun32TrunkFirst == (TBX_UINT32)-1)
		{
			*out_pun32TrunkCnt		= (TBX_UINT32)1;
			*out_pun32TimeslotNb	= (TBX_UINT32)-1;
			TBX_EXIT_SUCCESS (TBX_RESULT_OK);
		}
		pTrunkInfo = &pAdapterInfo->aTrunkInfo [0];
		while( un32TrunkCnt-- )
		{
			if (un32Trunk >= TB640_FSK_MAX_SUPPORTED_TRUNKS_PER_ADAPTER)
			{
				TB640_FSK_DISPLAY_PRINT ("Invalid trunk selected (%d)\n", un32Trunk);
				TBX_EXIT_ERROR(TBX_RESULT_FAIL, 0, "Invalid selection");

			}
			pTrunkInfo = &pAdapterInfo->aTrunkInfo [un32Trunk];
			if (pTrunkInfo->fActivated == TBX_FALSE)
			{
				TB640_FSK_DISPLAY_PRINT ("Invalid trunk selected (%d)\n", un32Trunk);
				TBX_EXIT_ERROR(TBX_RESULT_FAIL, 0, "Invalid selection");
			}
			un32Trunk++;
		}

		/* Validate the timeslot */
		if (*out_pun32TimeslotNb == (TBX_UINT32)-1)
		{
			TBX_EXIT_SUCCESS (TBX_RESULT_OK);
		}
		if (*out_pun32TimeslotNb >= TB640_FSK_MAX_TIMESLOT_IN_TRUNK)
		{
			TB640_FSK_DISPLAY_PRINT ("Invalid timeslot selected (%d)\n", *out_pun32TimeslotNb);
			TBX_EXIT_ERROR(TBX_RESULT_FAIL, 0, "Invalid selection");

		}
		pTrunkResInfo = &(pTrunkInfo->aResourceInfo [*out_pun32TimeslotNb]);
		if (pTrunkResInfo->hVPResource == (TB640_RESOURCE_HANDLE)NULL)
		{
			TB640_FSK_DISPLAY_PRINT ("Invalid timeslot selected (%d)\n", *out_pun32TimeslotNb);
			TBX_EXIT_ERROR(TBX_RESULT_FAIL, 0, "Invalid selection");
		}

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

	/*---------------------------------------------------------------------------------------------------------------------------
	 |  Error handling section
	 *--------------------------------------------------------------------------------------------------------------------------*/
	ERROR_HANDLING
	{
	}

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

	}

	RETURN;
}


/*-------------------------------------------------------------------------------------------------------------------------------
 |
 |  TB640FskAdapterTrunkTimeslotLaunchAction	:	This function launches an action for specified
 |													adapter/trunk/timeslot.
 |													-1 can be used for "all" adapter, trunk or timeslot.
 |
 |  out_pun32AdapterNb:	Adapter number to display
 |
 |  Note			:	~
 |
 |  Return          :	TBX_RESULT_OK
 |						TBX_RESULT_FAIL
 |
 *------------------------------------------------------------------------------------------------------------------------------*/
TBX_VOID  TB640FskAdapterTrunkTimeslotLaunchAction (
  IN		PFCT_TB640_FSK_CMDLINE_ACTION	in_pFctAction,
  IN		TBX_UINT32						in_un32FctParam,
  IN		TBX_UINT32						in_pun32AdapterNb,
  IN		TBX_UINT32						in_pun32TrunkNb,
  IN		TBX_UINT32						in_pun32TimeslotNb)
{
	TBX_UINT32	un32Count;
	TBX_UINT32	un32Count2;
	TBX_UINT32	un32Count3;

	PTB640_FSK_ADAPTER_INFO			pAdapterInfo;
	PTB640_FSK_TRUNK_INFO			pTrunkInfo;
	PTB640_FSK_TRUNK_RESOURCE_INFO	pTrunkResInfo;

	for (un32Count=0; un32Count<g_AppContext->un32NbAdapter; un32Count++)
	{
		if( in_pun32AdapterNb == -1 )
			pAdapterInfo = &(g_AppContext->ahAdapterInfo [un32Count]);
		else
			pAdapterInfo = &(g_AppContext->ahAdapterInfo [in_pun32AdapterNb]);

		for (un32Count2=0; un32Count2<pAdapterInfo->un32NbTrunk; un32Count2++)
		{
			if( in_pun32TrunkNb == -1 )
				pTrunkInfo = &(pAdapterInfo->aTrunkInfo [un32Count2]);
			else
				pTrunkInfo = &(pAdapterInfo->aTrunkInfo [in_pun32TrunkNb]);

			for (un32Count3=0; un32Count3<TB640_FSK_MAX_TIMESLOT_IN_TRUNK; un32Count3++)
			{
				if( in_pun32TimeslotNb == -1 )
					pTrunkResInfo = &(pTrunkInfo->aResourceInfo [un32Count3]);
				else
					pTrunkResInfo = &(pTrunkInfo->aResourceInfo [in_pun32TimeslotNb]);

					in_pFctAction
					(
						in_un32FctParam,
						pAdapterInfo - g_AppContext->ahAdapterInfo,
						pTrunkInfo->un8Trunk,
						pTrunkResInfo->un8Timeslot
					);

				if( in_pun32TimeslotNb != -1 ) break;
			}
			if( in_pun32TrunkNb != -1 ) break;
		}
		if( in_pun32AdapterNb != -1 ) break;
	}
}


/*-------------------------------------------------------------------------------------------------------------------------------
 |
 |  TB640FskPrintTimeslotHistory:	This function prints the loggued history of a timeslot
 |
 |	in_un32AdapterIdx:	Adapter index
 |	in_un32TrunkIdx:	Trunk index of the targeted timeslot
 |	in_un32TimeslotIdx:	Timeslot index to print the history of
 |
 |  Note			:	~
 |
 |  Return          :	No return value
 |
 *------------------------------------------------------------------------------------------------------------------------------*/
TBX_VOID
TB640FskPrintTimeslotHistory (
  IN		TBX_UINT32					in_un32AdapterIdx,
  IN		TBX_UINT32					in_un32TrunkIdx,
  IN		TBX_UINT32					in_un32TimeslotIdx)
{
	TBX_UINT32										un32Size;
	TBX_UINT32										un32Count;
	TBX_UINT32										un32HistoryReadIdx;
	TBX_UINT32										un32HistoryWriteIdx;
	PTB640_FSK_ADAPTER_INFO							pAdapterInfo;
	PTB640_FSK_TRUNK_INFO							pTrunkInfo;
	PTB640_FSK_TRUNK_RESOURCE_INFO					pTrunkResInfo;
	PTB640_FSK_HISTORY_ENTRY						paHistoryEntry;
	PTB640_FSK_HISTORY_ENTRY						pEntry;

	/*---------------------------------------------------------------------------------------------------------------------------
	 |  Code section
	 *--------------------------------------------------------------------------------------------------------------------------*/
	CODE
	{
		TB640FskLock( in_un32AdapterIdx, in_un32TrunkIdx );

		/* Initialize local variables */
		pAdapterInfo = &(g_AppContext->ahAdapterInfo [in_un32AdapterIdx]);
		pTrunkInfo = &(pAdapterInfo->aTrunkInfo [in_un32TrunkIdx]);
		pTrunkResInfo = &(pTrunkInfo->aResourceInfo [in_un32TimeslotIdx]);
		paHistoryEntry = NULL;

		/* Allocate a temporary buffer */
		un32Size = sizeof(TB640_FSK_HISTORY_ENTRY) * TB640_FSK_NB_HISTORY_FOR_TIMESLOT;
		paHistoryEntry = malloc (un32Size);
		if (paHistoryEntry == NULL)
		{
			TBX_EXIT_ERROR(TBX_RESULT_OUT_OF_MEMORY, 0, "Unable to allocate memory for temporary buffer");
		}

		/* Copy the log buffer */
		un32HistoryReadIdx = pTrunkResInfo->un32HistoryReadIdx;
		un32HistoryWriteIdx = pTrunkResInfo->un32HistoryWriteIdx;
		memcpy (paHistoryEntry, pTrunkResInfo->aHistoryEntry, un32Size);

		/* Print the state history */
		un32Count = 0;
		TB640_FSK_LOG (TRACE_LEVEL_4, "------------- State history of Adp:%02d Trk:%02d, Ts:%02d ---------------\n", \
			  in_un32AdapterIdx, pTrunkResInfo->un8Trunk, pTrunkResInfo->un8Timeslot);
		while ((un32HistoryReadIdx != un32HistoryWriteIdx) && (un32Count < TB640_FSK_NB_HISTORY_FOR_TIMESLOT))
		{
			/* Print the history entry */
			pEntry = &(paHistoryEntry [un32HistoryReadIdx]);
			TB640_FSK_LOG (TRACE_LEVEL_4, "Timestamp:0x%08X, CurState:0x%04X, Event:0x%08X\n", \
			  pEntry->un32Timestamp, pEntry->CurrentState, pEntry->un32Event);

			/* Go to the next history entry */
			if (++un32HistoryReadIdx >= TB640_FSK_NB_HISTORY_FOR_TIMESLOT)
			{
				un32HistoryReadIdx = 0;
			}
			un32Count++;
		}
		TB640_FSK_LOG (TRACE_LEVEL_4, "------------------------------- Done ------------------------------\n");

		/* 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
	{
		/* Free allocated buffers */
		if (paHistoryEntry != NULL)
		{
			free (paHistoryEntry);
			paHistoryEntry = NULL;
		}
		TB640FskUnlock( in_un32AdapterIdx, in_un32TrunkIdx );
	}

	RETURN_VOID;
}


/*-------------------------------------------------------------------------------------------------------------------------------
 |
 |  TB640FskDisplayAdapterStats:	This function displays the adapter's statistic and state to the screen
 |
 |  in_un32AdapterNb:	Adapter number to display
 |
 |  Note			:	~
 |
 |  Return          :	TBX_RESULT_OK
 |						TBX_RESULT_FAIL
 |
 *------------------------------------------------------------------------------------------------------------------------------*/
TBX_RESULT
TB640FskDisplayAdapterStats (
  IN		TBX_UINT32				in_un32AdapterNb)
{
	TBX_RESULT							Result;
	TBX_CHAR							aszAdapterName [TB640_FSK_CLI_MAX_LINE_SIZE];
	TBX_CHAR							aTimeslotState [TB640_FSK_CLI_COLUMN_SIZE*10];
	TBX_BOOL							fIpAddr0Available;
	TBX_BOOL							fIpAddr1Available;
	TBX_UINT32							un32StringIndex;
	TBX_UINT32							un32TrunkIndex;
	TBX_UINT32							un32TrunkResourceMaxIndex;
	TBX_UINT32							un32TrunkResourceIndex;
	TBX_UINT32							un32TrunkNb;
	TBX_UINT32							un32NbColumn;

	PTB640_FSK_ADAPTER_INFO				pAdapterInfo;
	PTB640_FSK_TRUNK_INFO				pTrunkInfo;
	PTB640_FSK_TRUNK_RESOURCE_INFO		pTrunkResourceInfo;

	#ifdef TB640_FSK_USE_INTERHOST_SIMULATION
		TBX_HOST_INFO		HostInfo;
	#else
		TBX_ADAPTER_INFO	AdapterInfo;
	#endif

	/*---------------------------------------------------------------------------------------------------------------------------
	 |  Code section
	 *--------------------------------------------------------------------------------------------------------------------------*/
	CODE
	{
		/* Initialize local variables */
		pAdapterInfo = &(g_AppContext->ahAdapterInfo [in_un32AdapterNb]);
		un32TrunkNb = 0;

		/* Get the adapter network redundancy state */
		#ifdef TB640_FSK_USE_INTERHOST_SIMULATION
		{
			Result = TBXGetRemoteHostInfo
			(
				g_AppContext->hTbxLib,
				pAdapterInfo->hAdapter,
				&HostInfo
			);
			if( TBX_RESULT_FAILURE( Result ) )
			{
				TBX_EXIT_ERROR(TBX_RESULT_FAIL, 0, "Unable to get remote host info");
			}

			TBXGetNetworkRedundancyState
			(
				g_AppContext->hTbxLib,
				pAdapterInfo->hAdapter,
				NULL,
				&fIpAddr0Available,
				&fIpAddr1Available
			);

			/* Format header line */

⌨️ 快捷键说明

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