📄 states.c
字号:
else
{
TB640_CAS_INCREMENT_STATS (un32NbCallOpeningFailure, 1);
TB640_CAS_INCREMENT_TRUNK_STATS (un32NbCallOpeningFailure, 1);
TB640_CAS_LOG (TRACE_LEVEL_3, "Detected opening failure on call 0x%08X (trunk %d, timeslot %d)\n",
in_pCallContext->hCall,
in_pCallContext->un32TrunkIndex,
in_pCallContext->un32TimeslotIndex );
TB640_CAS_CHANGE_STATE (TB640_CAS_CALL_APP_STATE_SEVEN);
}
}
TB640_CAS_STATE_DECLARE_NEXT_EVENT (TB640_MSG_ID_CAS_NOTIF_STATUS_INDICATION)
{
PTB640_MSG_CAS_NOTIF_STATUS_INDICATION pEvent = (PTB640_MSG_CAS_NOTIF_STATUS_INDICATION)in_pMsgPayload;
/* For R2, we need to check the result of the dialing */
if (pEvent->Event.StatusIndication == TB640_CAS_STATUS_IND_VALUE_CAS_R2_DIALING_DONE)
{
/* Check if the register signaling is over */
if (pEvent->Event.aun8Data [0] == TB640_CAS_R2_DIALING_DONE_RESULT_BACKWARD_SIG_DONE)
{
TB640_CAS_CHANGE_STATE (TB640_CAS_CALL_APP_STATE_TWO);
}
else
{
TB640_CAS_INCREMENT_STATS (un32NbCallOpeningFailure, 1);
TB640_CAS_INCREMENT_TRUNK_STATS (un32NbCallOpeningFailure, 1);
TB640_CAS_LOG (TRACE_LEVEL_3, "Detected opening failure (R2) on call 0x%08X (trunk %d, timeslot %d)\n",
in_pCallContext->hCall,
in_pCallContext->un32TrunkIndex,
in_pCallContext->un32TimeslotIndex );
TB640_CAS_CHANGE_STATE (TB640_CAS_CALL_APP_STATE_SEVEN);
}
}
/* Ignore the message */
TB640_CAS_STATE_WAIT;
}
TB640_CAS_STATE_DECLARE_NEXT_EVENT (TB640_MSG_ID_CAS_TIMEOUT)
{
in_pCallContext->fTimeoutOccured = TBX_TRUE;
in_pCallContext->fCasNeedToDisconnect = TBX_TRUE;
TB640_CAS_INCREMENT_STATS (un32NbTimeoutOccured, 1);
TB640_CAS_INCREMENT_TRUNK_STATS (un32NbTimeoutOccured, 1);
TB640_CAS_CHANGE_STATE (TB640_CAS_CALL_APP_STATE_SEVEN);
}
TB640_CAS_STATE_DECLARE_NEXT_EVENT (TB640_MSG_ID_CAS_DROP_CALL)
{
/* In case the user wants to force call shutdown */
TB640_CAS_INCREMENT_STATS (un32NbCallOpeningFailure, 1);
TB640_CAS_INCREMENT_TRUNK_STATS (un32NbCallOpeningFailure, 1);
TB640_CAS_LOG (TRACE_LEVEL_3, "Detected opening failure on call 0x%08X (trunk %d, timeslot %d)\n",
in_pCallContext->hCall,
in_pCallContext->un32TrunkIndex,
in_pCallContext->un32TimeslotIndex );
TB640_CAS_CHANGE_STATE (TB640_CAS_CALL_APP_STATE_SEVEN);
}
TB640_CAS_STATE_DECLARE_NEXT_EVENT (TB640_MSG_ID_CAS_RESTART)
{
TB640_CAS_CHANGE_STATE (TB640_CAS_CALL_APP_STATE_EIGHT);
}
TB640_CAS_STATE_RETURN
}
/*-------------------------------------------------------------------------------------------------------------------------------
|
| TB640CasProcessStateTwo: CAS processing for call state 'two'
|
*------------------------------------------------------------------------------------------------------------------------------*/
TB640_CAS_STATE_FUNCTION(TB640CasProcessStateTwo)
{
TB640_CAS_STATE_ENTRY(TB640_CAS_CALL_APP_STATE_TWO)
{
if( g_AppContext->fDoConnection )
{
if( g_AppContext->fCTBusConnection == TBX_FALSE )
{
TB640_CAS_LOG (TRACE_LEVEL_1, "Incoming call 0x%08X using trunk %d, timeslot %d\n", in_pCallContext->hCall, in_pCallContext->un32TrunkIndex, in_pCallContext->un32TimeslotIndex);
TB640_CAS_LOG (TRACE_LEVEL_1, "Called address is %s\n", in_pCallContext->aun8OutbandCalledAddress);
if (strlen (in_pCallContext->aun8OutbandCallingAddress) > 0)
{
TB640_CAS_LOG (TRACE_LEVEL_2, "Calling address is %s\n", in_pCallContext->aun8OutbandCallingAddress);
}
else
{
TB640_CAS_LOG (TRACE_LEVEL_2, "Calling address is not available\n");
}
/* Do the connection */
TB640CasSendCreateConnection (
(TB640_RESOURCE_HANDLE) NULL,
pTrunkResInfo->hTrunkResource,
in_pCallContext);
in_pCallContext->nCreateRspExpected = 1;
TB640_CAS_LOG (TRACE_LEVEL_0, "Incoming call 0x%08X tries to connect trunk resource 0x%08X\n", in_pCallContext->hCall, pTrunkResInfo->hTrunkResource);
}
else
{
TB640_CAS_LOG (TRACE_LEVEL_1, "Incoming call 0x%08X using trunk %d, timeslot %d, CTBUS %d:%d\n", in_pCallContext->hCall, in_pCallContext->un32TrunkIndex, in_pCallContext->un32TimeslotIndex, pCtbusInfo->un8CtbusStream, pCtbusInfo->un8CtbusTimeslot);
TB640_CAS_LOG (TRACE_LEVEL_1, "Called address is %s\n", in_pCallContext->aun8OutbandCalledAddress);
if (strlen (in_pCallContext->aun8OutbandCallingAddress) > 0)
{
TB640_CAS_LOG (TRACE_LEVEL_2, "Calling address is %s\n", in_pCallContext->aun8OutbandCallingAddress);
}
else
{
TB640_CAS_LOG (TRACE_LEVEL_2, "Calling address is not available\n");
}
/* Do the connection */
TB640CasSendCreateConnection (
pCtbusInfo->hCtbusResource,
pTrunkResInfo->hTrunkResource,
in_pCallContext);
in_pCallContext->nCreateRspExpected = 1;
TB640_CAS_LOG (TRACE_LEVEL_0, "Incoming call 0x%08X tries to connect trunk resource 0x%08X and CtBus resource 0x%08X\n", in_pCallContext->hCall, pTrunkResInfo->hTrunkResource, pCtbusInfo->hCtbusResource);
}
pTrunkResInfo->Statistics.State = TB640_CAS_TRUNK_RESOURCE_STATE_CONNECTING;
g_fRefreshDisplay |= (TB640_CAS_CLI_REFRESH_DISPLAY);
TB640_CAS_STATE_WAIT;
}
else
{
TB640_CAS_LOG (TRACE_LEVEL_2, "No connection will be made\n" );
TB640_CAS_CHANGE_STATE (TB640_CAS_CALL_APP_STATE_THREE);
}
}
TB640_CAS_STATE_DECLARE_FIRST_EVENT (TB640_MSG_ID_CAS_NOTIF_DISCONNECT_INDICATION)
{
in_pCallContext->fCasDisconnected = TBX_TRUE;
TB640_CAS_STATE_WAIT;
}
TB640_CAS_STATE_DECLARE_NEXT_EVENT (TB640_MSG_ID_CONN_OP_CREATE)
{
PTB640_RSP_CONN_OP_CREATE pRsp = (PTB640_RSP_CONN_OP_CREATE)in_pMsgPayload;
/* One less response to obtain */
in_pCallContext->nCreateRspExpected--;
/* Was the connection successful ? */
if (TBX_RESULT_SUCCESS(pRsp->Result))
{
in_pCallContext->fConnected = TBX_TRUE;
in_pCallContext->hConnection = pRsp->hConn;
pTrunkResInfo->hConnection = pRsp->hConn;
TB640_CAS_LOG (TRACE_LEVEL_2, "Incoming call 0x%08X connected with handle 0x%08X\n", in_pCallContext->hCall, in_pCallContext->hConnection);
/* Force a restart ? */
if (in_pCallContext->fNeedToRestart != TBX_FALSE)
{
TB640_CAS_CHANGE_STATE (TB640_CAS_CALL_APP_STATE_EIGHT);
}
}
else
{
TB640_CAS_LOG (TRACE_LEVEL_3, "Incoming call 0x%08X had an error while connecting resources (trunk %d, timeslot %d)\n",
in_pCallContext->hCall,
in_pCallContext->un32TrunkIndex,
in_pCallContext->un32TimeslotIndex );
TB640_CAS_INCREMENT_STATS (un32NbCallOpeningFailure, 1);
TB640_CAS_INCREMENT_TRUNK_STATS (un32NbCallOpeningFailure, 1);
TB640_CAS_LOG (TRACE_LEVEL_3, "Detected opening failure on call 0x%08X (trunk %d, timeslot %d)\n",
in_pCallContext->hCall,
in_pCallContext->un32TrunkIndex,
in_pCallContext->un32TimeslotIndex );
/* Force a restart ? */
if (in_pCallContext->fNeedToRestart != TBX_FALSE)
{
TB640_CAS_CHANGE_STATE (TB640_CAS_CALL_APP_STATE_EIGHT);
}
else
{
TB640_CAS_CHANGE_STATE (TB640_CAS_CALL_APP_STATE_FIVE);
}
}
/* Were we disconnected on our CAS channel */
if ((in_pCallContext->fCasDisconnected == TBX_TRUE) || (in_pCallContext->fCasNeedToDisconnect == TBX_TRUE))
{
TB640_CAS_INCREMENT_STATS (un32NbCallOpeningFailure, 1);
TB640_CAS_INCREMENT_TRUNK_STATS (un32NbCallOpeningFailure, 1);
TB640_CAS_LOG (TRACE_LEVEL_3, "Detected opening failure on call 0x%08X (trunk %d, timeslot %d)\n",
in_pCallContext->hCall,
in_pCallContext->un32TrunkIndex,
in_pCallContext->un32TimeslotIndex );
TB640_CAS_CHANGE_STATE (TB640_CAS_CALL_APP_STATE_FOUR);
}
TB640_CAS_CHANGE_STATE (TB640_CAS_CALL_APP_STATE_THREE);
}
TB640_CAS_STATE_DECLARE_NEXT_EVENT (TB640_MSG_ID_CAS_DROP_CALL)
{
/* In case the user wants to force call shutdown */
in_pCallContext->fCasNeedToDisconnect = TBX_TRUE;
TB640_CAS_STATE_WAIT;
}
TB640_CAS_STATE_DECLARE_NEXT_EVENT (TB640_MSG_ID_CAS_RESTART)
{
in_pCallContext->fNeedToRestart = TBX_TRUE;
TB640_CAS_STATE_WAIT;
}
TB640_CAS_STATE_DECLARE_NEXT_EVENT (TB640_MSG_ID_CAS_TIMEOUT)
{
in_pCallContext->fTimeoutOccured = TBX_TRUE;
in_pCallContext->fCasNeedToDisconnect = TBX_TRUE;
TB640_CAS_INCREMENT_STATS (un32NbTimeoutOccured, 1);
TB640_CAS_INCREMENT_TRUNK_STATS (un32NbTimeoutOccured, 1);
TB640_CAS_STATE_WAIT;
}
TB640_CAS_STATE_RETURN
}
/*-------------------------------------------------------------------------------------------------------------------------------
|
| TB640CasProcessStateThree: CAS processing for call state 'three'
|
*------------------------------------------------------------------------------------------------------------------------------*/
TB640_CAS_STATE_FUNCTION(TB640CasProcessStateThree)
{
TB640_CAS_STATE_ENTRY(TB640_CAS_CALL_APP_STATE_THREE)
{
TBX_UINT32 un32CallDuration;
pTrunkResInfo->Statistics.State = TB640_CAS_TRUNK_RESOURCE_STATE_ACTIVE;
g_fRefreshDisplay |= (TB640_CAS_CLI_REFRESH_DISPLAY);
TB640_CAS_INCREMENT_STATS (un32NbCallOpeningSuccess, 1);
in_pCallContext->fCallSuccessful = TBX_TRUE;
/* Do we need to do a random call duration */
if (in_pCallContext->un32MinCallDuration == in_pCallContext->un32MaxCallDuration)
{
if (in_pCallContext->un32MinCallDuration == (TBX_UINT32)-1)
{
TB640_CAS_LOG (TRACE_LEVEL_2, "%s call 0x%08X has an infinite call duration\n", (in_pCallContext->fCallOriginator?"Outgoing":"Incoming"), in_pCallContext->hCall);
}
else
{
TB640_CAS_LOG (TRACE_LEVEL_2, "%s call 0x%08X has a %d second call duration\n", (in_pCallContext->fCallOriginator?"Outgoing":"Incoming"), in_pCallContext->hCall, in_pCallContext->un32MinCallDuration);
}
/* Fixed call duration */
un32CallDuration = in_pCallContext->un32MinCallDuration;
}
else
{
/* Random call generation */
un32CallDuration = (in_pCallContext->un32MaxCallDuration - in_pCallContext->un32MinCallDuration);
un32CallDuration = (un32CallDuration * rand()) / RAND_MAX;
un32CallDuration += in_pCallContext->un32MinCallDuration;
TB640_CAS_LOG (TRACE_LEVEL_2, "%s call 0x%08X has a %d second call duration (random)\n", (in_pCallContext->fCallOriginator?"Outgoing":"Incoming"), in_pCallContext->hCall, un32CallDuration);
}
/* Set the timeout on the call */
if (un32CallDuration > 0)
{
/* Call duration of x second on the call */
TB640_CAS_SET_TIMEOUT (un32CallDuration);
}
else
{
/* Call needs to be disconnected immediately */
TB640_CAS_CHANGE_STATE (TB640_CAS_CALL_APP_STATE_FOUR);
}
TB640_CAS_DECREMENT_TRANSIANT_CALL (1);
TB640_CAS_STATE_WAIT;
}
TB640_CAS_STATE_DECLARE_FIRST_EVENT (TB640_MSG_ID_CAS_NOTIF_DISCONNECT_INDICATION)
{
TB640_CAS_INCREMENT_TRANSIANT_CALL (1);
in_pCallContext->fCasDisconnected = TBX_TRUE;
TB640_CAS_CHANGE_STATE (TB640_CAS_CALL_APP_STATE_FOUR);
}
TB640_CAS_STATE_DECLARE_NEXT_EVENT (TB640_MSG_ID_CAS_DROP_CALL)
{
TB640_CAS_INCREMENT_TRANSIANT_CALL (1);
/* The user wants to drop a call */
TB640_CAS_CHANGE_STATE (TB640_CAS_CALL_APP_STATE_FOUR);
}
TB640_CAS_STATE_DECLARE_NEXT_EVENT (TB640_MSG_ID_CAS_TIMEOUT)
{
TB640_CAS_INCREMENT_TRANSIANT_CALL (1);
in_pCallContext->fTimeoutOccured = TBX_TRUE;
TB640_CAS_CHANGE_STATE (TB640_CAS_CALL_APP_STATE_FOUR);
}
TB640_CAS_STATE_DECLARE_NEXT_EVENT (TB640_MSG_ID_CAS_RESTART)
{
TB640_CAS_INCREMENT_TRANSIANT_CALL (1);
TB640_CAS_CHANGE_STATE (TB640_CAS_CALL_APP_STATE_EIGHT);
}
TB640_CAS_STATE_RETURN
}
/*-------------------------------------------------------------------------------------------------------------------------------
|
| TB640CasProcessStateFour: CAS processing for call state 'four'
|
*------------------------------------------------------------------------------------------------------------------------------*/
TB640_CAS_STATE_FUNCTION(TB640CasProcessStateFour)
{
TB640_CAS_STATE_ENTRY(TB640_CAS_CALL_APP_STATE_FOUR)
{
in_pCallContext->nDestroyRspExpected = 0;
/* The call is disconnecting -> set a maximum timeout */
TB640_CAS_SET_TIMEOUT (TB640_CAS_CALL_DISCONNECT_MAX_DURATION_SEC);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -