📄 protocol.c
字号:
*------------------------------------------------------------------------------------------------------------------------------*/
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 + -