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

📄 protocol.c

📁 基于TB板卡的FSK编程,telcobridges fsk develop
💻 C
📖 第 1 页 / 共 2 页
字号:
 *------------------------------------------------------------------------------------------------------------------------------*/
static TBX_RESULT TB640FskRetransmitDataStress
(
  IN		PTB640_FSK_CALL_CONTEXT				in_pCallContext,
  IN		PTB640_FSK_ADAPTER_INFO				in_pAdapterInfo,
  IN		PTB640_FSK_TRUNK_INFO				in_pTrunkInfo,
  IN		PTB640_FSK_TRUNK_RESOURCE_INFO		in_pTrunkResInfo
)
{
	TBX_RESULT result = TBX_RESULT_OK;

	/* Update current state timestamp */
	TB640FskUpdateStateTimestamp( in_pCallContext, TB640_FSK_STRESS_TX_TIMEOUT_SEC );

	/* Retransmit data for current stress test stage */
	switch( in_pTrunkResInfo->StateStressTest )
	{
		case 1:
			result = TB640FskSendTxStressA( in_pCallContext );
			break;
		case 2:
			result = TB640FskSendTxStressB( in_pCallContext );
			break;
		case 3:
			result = TB640FskSendTxStressC( in_pCallContext );
			break;
		case 4:
			result = TB640FskSendTxStressD( in_pCallContext );
			break;
	}

	return result;
}








/*-------------------------------------------------------------------------------------------------------------------------------
 |  TB640FskSendTxStressStart:	This function is called to send a "Tx stress test start" FSK message
 *------------------------------------------------------------------------------------------------------------------------------*/
TB640_FSK_SERVICE_FUNCTION (TB640FskSendTxStressStart)
{
	PTB640_REQ_VP_FSK_TRANSMIT					pReq;
	TBX_UINT32									aun32FSKData[ TB640_FSK_MAX_MESSAGE_LENGTH_DWORD ];
	TBX_UINT32									un32MsgSizeDWord;
	TBX_UINT32									un32SizeToAlloc;
	TBX_UINT32									un32Index;
	TB640_FSK_SERVICE_FUNCTION_VAR()

	TB640_FSK_LOG (TRACE_LEVEL_1, "Sending FSK 'TxA' for tr:ts %d:%d\n",
	in_pCallContext->un32TrunkIndex, in_pCallContext->un32TimeslotIndex);

	/* Fill the message */
	if( in_pCallContext->un32MessageSizeDWord == 0 || in_pCallContext->un32MessageSizeDWord > TB640_FSK_MAX_MESSAGE_LENGTH_DWORD )
	{
		un32MsgSizeDWord = 1 + (rand() % TB640_FSK_MAX_MESSAGE_LENGTH_DWORD);
	}
	else
	{
		un32MsgSizeDWord = in_pCallContext->un32MessageSizeDWord;
	}

	/* Allocate the request */
	if( un32MsgSizeDWord % 1 )
		un32SizeToAlloc = un32MsgSizeDWord + 2 - (un32MsgSizeDWord % 2);
	else
		un32SizeToAlloc = un32MsgSizeDWord;
	un32SizeToAlloc *= sizeof(TBX_UINT32);

	TB640_FSK_SERVICE_FUNCTION_ALLOC (pReq, sizeof(*pReq), TB640_MSG_ID_VP_FSK_TRANSMIT);
	#ifdef TB640_FSK_USE_INTERHOST_SIMULATION
	TBX_MSG_TYPE_SET( pAsyncRequest->hMsg, TBX_MSG_TYPE_EVENT );
	#endif

	/* Build random message data */
	for( un32Index = 0; un32Index < un32MsgSizeDWord; un32Index++ )
	{
		aun32FSKData[ un32Index ] = rand();
	}

	/* Fill the message */
	pReq = TBX_MSG_PAYLOAD_POINTER(pAsyncRequest->hMsg);
	pReq->un32MsgVersion						= 1;
	pReq->hVPResource							= pTrunkResInfo->hVPResource;
	pReq->fMsgEndEvent							= TBX_TRUE;
	pReq->fVoiceFallBack						= TBX_FALSE;
	pReq->fFskRxFallBack						= TBX_FALSE;
	pReq->un8BurstSize							= 1;
	pReq->un8MsgNumber							= 1;
	pReq->FskMsg.Gr30.un8MsgType				= g_AppContext->TxStressTestMsgId;
	pReq->FskMsg.Gr30.un8MsgLength				= (TBX_UINT8)(4*un32MsgSizeDWord);
	pReq->FskMsg.un16PayloadLength				= pReq->FskMsg.Gr30.un8MsgLength + 2;
	pReq->FskMsg.Gr30.Mmb.un8MsgNumber			= 1;
	memcpy
	(
		pReq->FskMsg.Gr30.Mmb.abyData,
		aun32FSKData,
		4*un32MsgSizeDWord
	);

	/* Post the message and exit */
	TB640_FSK_INCREMENT_STATS (un32NbTxPackets, 1);
	TB640_FSK_SERVICE_FUNCTION_POST_EVENT();
}



/*-------------------------------------------------------------------------------------------------------------------------------
 |  TB640FskSendTxStressA:	This function is called to send a "Tx A" FSK message
 *------------------------------------------------------------------------------------------------------------------------------*/
TB640_FSK_SERVICE_FUNCTION (TB640FskSendTxStressA)
{
	PTB640_REQ_VP_FSK_TRANSMIT					pReq;
	TBX_UINT32									aun32FSKData[ TB640_FSK_MAX_MESSAGE_LENGTH_DWORD ];
	TBX_UINT32									un32MsgSizeDWord;
	TBX_UINT32									un32SizeToAlloc;
	TBX_UINT32									un32Index;
	TB640_FSK_SERVICE_FUNCTION_VAR()

	TB640_FSK_LOG (TRACE_LEVEL_1, "Sending FSK 'TxA' for timeslot tr:ts %d:%d\n",
	in_pCallContext->un32TrunkIndex, in_pCallContext->un32TimeslotIndex);

	/* Fill the message */
	if( in_pCallContext->un32MessageSizeDWord == 0 || in_pCallContext->un32MessageSizeDWord > TB640_FSK_MAX_MESSAGE_LENGTH_DWORD )
	{
		un32MsgSizeDWord = 1 + (rand() % TB640_FSK_MAX_MESSAGE_LENGTH_DWORD);
	}
	else
	{
		un32MsgSizeDWord = in_pCallContext->un32MessageSizeDWord;
	}

	/* Allocate the request */
	if( un32MsgSizeDWord % 1 )
		un32SizeToAlloc = un32MsgSizeDWord + 2 - (un32MsgSizeDWord % 2);
	else
		un32SizeToAlloc = un32MsgSizeDWord;
	un32SizeToAlloc *= sizeof(TBX_UINT32);

	TB640_FSK_SERVICE_FUNCTION_ALLOC (pReq, sizeof(*pReq), TB640_MSG_ID_VP_FSK_TRANSMIT);
	#ifdef TB640_FSK_USE_INTERHOST_SIMULATION
	TBX_MSG_TYPE_SET( pAsyncRequest->hMsg, TBX_MSG_TYPE_EVENT );
	#endif

	/* Build random message data */
	for( un32Index = 0; un32Index < un32MsgSizeDWord; un32Index++ )
	{
		aun32FSKData[ un32Index ] = rand();
	}

	/* Fill the message */
	pReq = TBX_MSG_PAYLOAD_POINTER(pAsyncRequest->hMsg);
	pReq->un32MsgVersion						= 1;
	pReq->hVPResource							= pTrunkResInfo->hVPResource;
	pReq->fMsgEndEvent							= TBX_TRUE;
	pReq->fVoiceFallBack						= TBX_FALSE;
	pReq->fFskRxFallBack						= TBX_FALSE;
	pReq->un8BurstSize							= 1;
	pReq->un8MsgNumber							= 1;
	pReq->FskMsg.Gr30.un8MsgType				= g_AppContext->TxAMsgId;
	pReq->FskMsg.Gr30.un8MsgLength				= (TBX_UINT8)(4*un32MsgSizeDWord);
	pReq->FskMsg.un16PayloadLength				= pReq->FskMsg.Gr30.un8MsgLength + 2;
	pReq->FskMsg.Gr30.Mmb.un8MsgNumber			= 1;
	memcpy
	(
		pReq->FskMsg.Gr30.Mmb.abyData,
		aun32FSKData,
		4*un32MsgSizeDWord
	);

	/* Post the message and exit */
	TB640_FSK_INCREMENT_STATS (un32NbTxPackets, 1);
	TB640_FSK_SERVICE_FUNCTION_POST_EVENT();
}

/*-------------------------------------------------------------------------------------------------------------------------------
 |  TB640FskSendTxStressB:	This function is called to send a "Tx B" FSK message
 *------------------------------------------------------------------------------------------------------------------------------*/
TB640_FSK_SERVICE_FUNCTION (TB640FskSendTxStressB)
{
	PTB640_REQ_VP_FSK_TRANSMIT					pReq;
	TBX_UINT32									aun32FSKData[ TB640_FSK_MAX_MESSAGE_LENGTH_DWORD ];
	TBX_UINT32									un32MsgSizeDWord;
	TBX_UINT32									un32SizeToAlloc;
	TBX_UINT32									un32Index;
	TB640_FSK_SERVICE_FUNCTION_VAR()

	TB640_FSK_LOG (TRACE_LEVEL_1, "Sending FSK 'TxB' for tr:ts %d:%d\n",
	in_pCallContext->un32TrunkIndex, in_pCallContext->un32TimeslotIndex);

	/* Fill the message */
	if( in_pCallContext->un32MessageSizeDWord == 0 || in_pCallContext->un32MessageSizeDWord > TB640_FSK_MAX_MESSAGE_LENGTH_DWORD )
	{
		un32MsgSizeDWord = 1 + (rand() % TB640_FSK_MAX_MESSAGE_LENGTH_DWORD);
	}
	else
	{
		un32MsgSizeDWord = in_pCallContext->un32MessageSizeDWord;
	}

	/* Allocate the request */
	if( un32MsgSizeDWord % 1 )
		un32SizeToAlloc = un32MsgSizeDWord + 2 - (un32MsgSizeDWord % 2);
	else
		un32SizeToAlloc = un32MsgSizeDWord;
	un32SizeToAlloc *= sizeof(TBX_UINT32);

	TB640_FSK_SERVICE_FUNCTION_ALLOC (pReq, sizeof(*pReq), TB640_MSG_ID_VP_FSK_TRANSMIT);
	#ifdef TB640_FSK_USE_INTERHOST_SIMULATION
	TBX_MSG_TYPE_SET( pAsyncRequest->hMsg, TBX_MSG_TYPE_EVENT );
	#endif

	/* Build random message data */
	for( un32Index = 0; un32Index < un32MsgSizeDWord; un32Index++ )
	{
		aun32FSKData[ un32Index ] = rand();
	}

	/* Fill the message */
	pReq = TBX_MSG_PAYLOAD_POINTER(pAsyncRequest->hMsg);
	pReq->un32MsgVersion						= 1;
	pReq->hVPResource							= pTrunkResInfo->hVPResource;
	pReq->fMsgEndEvent							= TBX_TRUE;
	pReq->fVoiceFallBack						= TBX_FALSE;
	pReq->fFskRxFallBack						= TBX_FALSE;
	pReq->un8BurstSize							= 1;
	pReq->un8MsgNumber							= 1;
	pReq->FskMsg.Gr30.un8MsgType				= g_AppContext->TxBMsgId;
	pReq->FskMsg.Gr30.un8MsgLength				= (TBX_UINT8)(4*un32MsgSizeDWord);
	pReq->FskMsg.un16PayloadLength				= pReq->FskMsg.Gr30.un8MsgLength + 2;
	pReq->FskMsg.Gr30.Mmb.un8MsgNumber			= 1;
	memcpy
	(
		pReq->FskMsg.Gr30.Mmb.abyData,
		aun32FSKData,
		4*un32MsgSizeDWord
	);

	/* Post the message and exit */
	TB640_FSK_INCREMENT_STATS (un32NbTxPackets, 1);
	TB640_FSK_SERVICE_FUNCTION_POST_EVENT();
}

/*-------------------------------------------------------------------------------------------------------------------------------
 |  TB640FskSendTxStressC:	This function is called to send a "Tx C" FSK message
 *------------------------------------------------------------------------------------------------------------------------------*/
TB640_FSK_SERVICE_FUNCTION (TB640FskSendTxStressC)
{
	PTB640_REQ_VP_FSK_TRANSMIT					pReq;
	TBX_UINT32									aun32FSKData[ TB640_FSK_MAX_MESSAGE_LENGTH_DWORD ];
	TBX_UINT32									un32MsgSizeDWord;
	TBX_UINT32									un32SizeToAlloc;
	TBX_UINT32									un32Index;
	TB640_FSK_SERVICE_FUNCTION_VAR()

	TB640_FSK_LOG (TRACE_LEVEL_1, "Sending FSK 'TxC' for tr:ts %d:%d\n",
	in_pCallContext->un32TrunkIndex, in_pCallContext->un32TimeslotIndex);

	/* Fill the message */
	if( in_pCallContext->un32MessageSizeDWord == 0 || in_pCallContext->un32MessageSizeDWord > TB640_FSK_MAX_MESSAGE_LENGTH_DWORD )
	{
		un32MsgSizeDWord = 1 + (rand() % TB640_FSK_MAX_MESSAGE_LENGTH_DWORD);
	}
	else
	{
		un32MsgSizeDWord = in_pCallContext->un32MessageSizeDWord;
	}

	/* Allocate the request */
	if( un32MsgSizeDWord % 1 )
		un32SizeToAlloc = un32MsgSizeDWord + 2 - (un32MsgSizeDWord % 2);
	else
		un32SizeToAlloc = un32MsgSizeDWord;
	un32SizeToAlloc *= sizeof(TBX_UINT32);

	TB640_FSK_SERVICE_FUNCTION_ALLOC (pReq, sizeof(*pReq), TB640_MSG_ID_VP_FSK_TRANSMIT);
	#ifdef TB640_FSK_USE_INTERHOST_SIMULATION
	TBX_MSG_TYPE_SET( pAsyncRequest->hMsg, TBX_MSG_TYPE_EVENT );
	#endif

	/* Build random message data */
	for( un32Index = 0; un32Index < un32MsgSizeDWord; un32Index++ )
	{
		aun32FSKData[ un32Index ] = rand();
	}

	/* Fill the message */
	pReq = TBX_MSG_PAYLOAD_POINTER(pAsyncRequest->hMsg);
	pReq->un32MsgVersion						= 1;
	pReq->hVPResource							= pTrunkResInfo->hVPResource;
	pReq->fMsgEndEvent							= TBX_TRUE;
	pReq->fVoiceFallBack						= TBX_FALSE;
	pReq->fFskRxFallBack						= TBX_FALSE;
	pReq->un8BurstSize							= 1;
	pReq->un8MsgNumber							= 1;
	pReq->FskMsg.Gr30.un8MsgType				= g_AppContext->TxCMsgId;
	pReq->FskMsg.Gr30.un8MsgLength				= (TBX_UINT8)(4*un32MsgSizeDWord);
	pReq->FskMsg.un16PayloadLength				= pReq->FskMsg.Gr30.un8MsgLength + 2;
	pReq->FskMsg.Gr30.Mmb.un8MsgNumber			= 1;
	memcpy
	(
		pReq->FskMsg.Gr30.Mmb.abyData,
		aun32FSKData,
		4*un32MsgSizeDWord
	);

	/* Post the message and exit */
	TB640_FSK_INCREMENT_STATS (un32NbTxPackets, 1);
	TB640_FSK_SERVICE_FUNCTION_POST_EVENT();
}

/*-------------------------------------------------------------------------------------------------------------------------------
 |  TB640FskSendTxStressD:	This function is called to send a "Tx D" FSK message
 *------------------------------------------------------------------------------------------------------------------------------*/
TB640_FSK_SERVICE_FUNCTION (TB640FskSendTxStressD)
{
	PTB640_REQ_VP_FSK_TRANSMIT					pReq;
	TBX_UINT32									aun32FSKData[ TB640_FSK_MAX_MESSAGE_LENGTH_DWORD ];
	TBX_UINT32									un32MsgSizeDWord;
	TBX_UINT32									un32SizeToAlloc;
	TBX_UINT32									un32Index;
	TB640_FSK_SERVICE_FUNCTION_VAR()

	TB640_FSK_LOG (TRACE_LEVEL_1, "Sending FSK 'TxD' for tr:ts %d:%d\n",
	in_pCallContext->un32TrunkIndex, in_pCallContext->un32TimeslotIndex);

	/* Fill the message */
	if( in_pCallContext->un32MessageSizeDWord == 0 || in_pCallContext->un32MessageSizeDWord > TB640_FSK_MAX_MESSAGE_LENGTH_DWORD )
	{
		un32MsgSizeDWord = 1 + (rand() % TB640_FSK_MAX_MESSAGE_LENGTH_DWORD);
	}
	else
	{
		un32MsgSizeDWord = in_pCallContext->un32MessageSizeDWord;
	}

	/* Allocate the request */
	if( un32MsgSizeDWord % 1 )
		un32SizeToAlloc = un32MsgSizeDWord + 2 - (un32MsgSizeDWord % 2);
	else
		un32SizeToAlloc = un32MsgSizeDWord;
	un32SizeToAlloc *= sizeof(TBX_UINT32);

	TB640_FSK_SERVICE_FUNCTION_ALLOC (pReq, sizeof(*pReq), TB640_MSG_ID_VP_FSK_TRANSMIT);
	#ifdef TB640_FSK_USE_INTERHOST_SIMULATION
	TBX_MSG_TYPE_SET( pAsyncRequest->hMsg, TBX_MSG_TYPE_EVENT );
	#endif

	/* Build random message data */
	for( un32Index = 0; un32Index < un32MsgSizeDWord; un32Index++ )
	{
		aun32FSKData[ un32Index ] = rand();
	}

	/* Fill the message */
	pReq = TBX_MSG_PAYLOAD_POINTER(pAsyncRequest->hMsg);
	pReq->un32MsgVersion						= 1;
	pReq->hVPResource							= pTrunkResInfo->hVPResource;
	pReq->fMsgEndEvent							= TBX_TRUE;
	pReq->fVoiceFallBack						= TBX_FALSE;
	pReq->fFskRxFallBack						= TBX_FALSE;
	pReq->un8BurstSize							= 1;
	pReq->un8MsgNumber							= 1;
	pReq->FskMsg.Gr30.un8MsgType				= g_AppContext->TxDMsgId;
	pReq->FskMsg.Gr30.un8MsgLength				= (TBX_UINT8)(4*un32MsgSizeDWord);
	pReq->FskMsg.un16PayloadLength				= pReq->FskMsg.Gr30.un8MsgLength + 2;
	pReq->FskMsg.Gr30.Mmb.un8MsgNumber			= 1;
	memcpy
	(
		pReq->FskMsg.Gr30.Mmb.abyData,
		aun32FSKData,
		4*un32MsgSizeDWord
	);

	/* Post the message and exit */
	TB640_FSK_INCREMENT_STATS (un32NbTxPackets, 1);
	TB640_FSK_SERVICE_FUNCTION_POST_EVENT();
}

⌨️ 快捷键说明

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