📄 states.c
字号:
{
TB640_CAS_LOG (TRACE_LEVEL_2, "%s call 0x%08X has closed connection 0x%08X successfully\n", (in_pCallContext->fCallOriginator?"Outgoing":"Incoming"), in_pCallContext->hCall, in_pCallContext->hConnection);
in_pCallContext->fConnected = TBX_FALSE;
}
else
{
TB640_CAS_LOG (TRACE_LEVEL_3, "%s call 0x%08X has NOT closed connection 0x%08X\n", (in_pCallContext->fCallOriginator?"Outgoing":"Incoming"), in_pCallContext->hCall, in_pCallContext->hConnection);
in_pCallContext->fCallSuccessful = TBX_FALSE;
}
/* One less response to receive */
in_pCallContext->hConnection = (TB640_CONNECTION_HANDLE)NULL;
pTrunkResInfo->hConnection = (TB640_CONNECTION_HANDLE)NULL;
in_pCallContext->nDestroyRspExpected--;
/* Wait until all response are received */
if (in_pCallContext->nCreateRspExpected > 0)
{
TB640_CAS_STATE_WAIT;
}
TB640_CAS_CHANGE_STATE (TB640_CAS_CALL_APP_STATE_TEN);
}
TB640_CAS_STATE_RETURN
}
/*-------------------------------------------------------------------------------------------------------------------------------
|
| TB640CasProcessStateTen: CAS processing for call state 'ten'
|
*------------------------------------------------------------------------------------------------------------------------------*/
TB640_CAS_STATE_FUNCTION(TB640CasProcessStateTen)
{
TB640_CAS_STATE_ENTRY(TB640_CAS_CALL_APP_STATE_TEN)
{
TB640_CAS_CHANGE_STATE (TB640_CAS_CALL_APP_STATE_ELEVEN);
}
TB640_CAS_STATE_DECLARE_FIRST_EVENT (TB640_MSG_ID_NOT_USED)
{
TB640_CAS_STATE_WAIT;
}
TB640_CAS_STATE_RETURN
}
/*-------------------------------------------------------------------------------------------------------------------------------
|
| TB640CasProcessStateEleven: CAS processing for call state 'eleven'
|
*------------------------------------------------------------------------------------------------------------------------------*/
TB640_CAS_STATE_FUNCTION(TB640CasProcessStateEleven)
{
TB640_CAS_STATE_ENTRY(TB640_CAS_CALL_APP_STATE_ELEVEN)
{
/* Send the release command */
TB640CasSendReleaseRq (in_pCallContext);
TB640_CAS_CHANGE_STATE (TB640_CAS_CALL_APP_STATE_TWELVE);
}
TB640_CAS_STATE_DECLARE_FIRST_EVENT (TB640_MSG_ID_NOT_USED)
{
TB640_CAS_STATE_WAIT;
}
TB640_CAS_STATE_RETURN
}
/*-------------------------------------------------------------------------------------------------------------------------------
|
| TB640CasProcessStateTwelve: CAS processing for call state 'twelve'
|
*------------------------------------------------------------------------------------------------------------------------------*/
TB640_CAS_STATE_FUNCTION(TB640CasProcessStateTwelve)
{
TB640_CAS_STATE_ENTRY(TB640_CAS_CALL_APP_STATE_TWELVE)
{
TB640_CAS_INCREMENT_STATS (un32NbCallClosingTotal, 1);
if (in_pCallContext->fCallSuccessful)
{
TB640_CAS_INCREMENT_STATS (un32NbCallCompleted, 1);
}
if (pTrunkResInfo->Statistics.State != TB640_CAS_TRUNK_RESOURCE_STATE_CONDEMNED)
{
pTrunkResInfo->Statistics.State = TB640_CAS_TRUNK_RESOURCE_STATE_IDLE;
pTrunkResInfo->Statistics.un32LastIdleTimestamp = TBX_GET_TICK();
}
pTrunkResInfo->hCall = (TB640_CAS_CALL_HANDLE)NULL;
g_fRefreshDisplay |= (TB640_CAS_CLI_REFRESH_DISPLAY);
TB640_CAS_DECREMENT_TRANSIANT_CALL (1);
TB640_CAS_DESTROY_CONTEXT;
}
TB640_CAS_STATE_DECLARE_FIRST_EVENT (TB640_MSG_ID_NOT_USED)
TB640_CAS_STATE_CONTINUE;
TB640_CAS_STATE_RETURN
}
/*-------------------------------------------------------------------------------------------------------------------------------
|
| TB640CasProcessStateThirteen: CAS processing for call state 'thirteen'
|
*------------------------------------------------------------------------------------------------------------------------------*/
TB640_CAS_STATE_FUNCTION(TB640CasProcessStateThirteen)
{
TB640_CAS_STATE_ENTRY(TB640_CAS_CALL_APP_STATE_THIRTEEN)
{
pTrunkResInfo->Statistics.State = TB640_CAS_TRUNK_RESOURCE_STATE_OPENING_OUTGOING;
g_fRefreshDisplay |= (TB640_CAS_CLI_REFRESH_DISPLAY);
TB640_CAS_STATE_WAIT;
}
TB640_CAS_STATE_DECLARE_FIRST_EVENT (TB640_MSG_ID_CAS_CMD_CONNECT_REQUEST)
{
PTB640_RSP_CAS_CMD_CONNECT_REQUEST pReq = (PTB640_RSP_CAS_CMD_CONNECT_REQUEST)in_pMsgPayload;
if (TBX_RESULT_SUCCESS(pReq->Result))
{
/* Timeslot is now in use */
in_pCallContext->hCall = pReq->hCall;
pTrunkResInfo->hCall = in_pCallContext->hCall;
TB640_CAS_LOG (TRACE_LEVEL_1, "Outgoing 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);
TB640_CAS_LOG (TRACE_LEVEL_2, "Calling address is %s\n", in_pCallContext->aun8OutbandCallingAddress);
TB640_CAS_CHANGE_STATE (TB640_CAS_CALL_APP_STATE_FOURTHEEN);
}
else
{
if (pReq->Result == TB640_RESULT_CASMGR_RELEASE_NOT_COMPLETED_RETRY_LATER)
{
TB640_CAS_INCREMENT_STATS (un32NbCallOpeningTimeslotBusy, 1);
}
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 );
}
in_pCallContext->fCasDisconnected = TBX_TRUE;
TB640_CAS_CHANGE_STATE (TB640_CAS_CALL_APP_STATE_TWELVE);
}
}
TB640_CAS_STATE_DECLARE_NEXT_EVENT (TB640_MSG_ID_CAS_TIMEOUT)
{
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_INCREMENT_STATS (un32NbTimeoutOccured, 1);
TB640_CAS_INCREMENT_TRUNK_STATS (un32NbTimeoutOccured, 1);
in_pCallContext->fTimeoutOccured = TBX_TRUE;
in_pCallContext->fCasNeedToDisconnect = TBX_TRUE;
TB640_CAS_CHANGE_STATE (TB640_CAS_CALL_APP_STATE_EIGHT);
}
TB640_CAS_STATE_RETURN
}
/*-------------------------------------------------------------------------------------------------------------------------------
|
| TB640CasProcessStateFourtheen: CAS processing for call state 'fourtheen'
|
*------------------------------------------------------------------------------------------------------------------------------*/
TB640_CAS_STATE_FUNCTION(TB640CasProcessStateFourtheen)
{
TB640_CAS_STATE_ENTRY(TB640_CAS_CALL_APP_STATE_FOURTHEEN)
{
/* Nothing to do */
TB640_CAS_STATE_WAIT;
}
TB640_CAS_STATE_DECLARE_FIRST_EVENT (TB640_MSG_ID_CAS_NOTIF_DISCONNECT_INDICATION)
{
in_pCallContext->fCasDisconnected = 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_ELEVEN);
}
TB640_CAS_STATE_DECLARE_NEXT_EVENT (TB640_MSG_ID_CAS_NOTIF_CONNECT_CONFIRM)
{
if (in_pCallContext->fCasNeedToDisconnect == TBX_FALSE)
{
TB640_CAS_CHANGE_STATE (TB640_CAS_CALL_APP_STATE_FIFTHEEN);
}
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)
{
TBX_UINT32 un32Count;
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 ( (pTrunkInfo->StackConfiguration.CasVariant == TB640_CAS_VARIANT_R2_CHINA) ||
(pTrunkInfo->StackConfiguration.CasVariant == TB640_CAS_VARIANT_R2_KOREA) ||
(pTrunkInfo->StackConfiguration.CasVariant == TB640_CAS_VARIANT_R2_SINGAPORE) ||
(pTrunkInfo->StackConfiguration.CasVariant == TB640_CAS_VARIANT_R2_BANGLADESH) ||
(pTrunkInfo->StackConfiguration.CasVariant == TB640_CAS_VARIANT_R2_GENERIC))
{
/* Is the dialing over ? */
if (pEvent->Event.StatusIndication == TB640_CAS_STATUS_IND_VALUE_CAS_R2_DIALING_DONE)
{
/* Check if there was an error */
if (pEvent->Event.aun8Data [0] == TB640_CAS_R2_DIALING_DONE_RESULT_ERROR)
{
TB640_CAS_INCREMENT_STATS (un32NbCallOpeningFailure, 1);
TB640_CAS_INCREMENT_TRUNK_STATS (un32NbCallOpeningFailure, 1);
TB640_CAS_CHANGE_STATE (TB640_CAS_CALL_APP_STATE_SEVEN);
}
/* Check the meaning of the digit to see if we should disconnect the call */
for (un32Count=0; un32Count<pTrunkInfo->un8R2NbRefusalDigit; un32Count++)
{
if (pEvent->Event.aun8Data [1] == pTrunkInfo->aun8R2PossibleRefuseDigits [un32Count])
{
TB640_CAS_LOG (TRACE_LEVEL_2, "Outgoing call 0x%08X dialing is done with GroupB digit = %c (refusal)\n",
in_pCallContext->hCall,
pEvent->Event.aun8Data [1] );
TB640_CAS_CHANGE_STATE (TB640_CAS_CALL_APP_STATE_SEVEN);
}
}
TB640_CAS_LOG (TRACE_LEVEL_2, "Outgoing call 0x%08X dialing is done with GroupB digit = %c (acceptance)\n",
in_pCallContext->hCall,
pEvent->Event.aun8Data [1] );
}
}
/* For Taiwan modified R1, we need to check the result of the dialing */
else if ( pTrunkInfo->StackConfiguration.CasVariant == TB640_CAS_VARIANT_TAIWAN_R1)
{
/* Is the dialing over ? */
if (pEvent->Event.StatusIndication == TB640_CAS_STATUS_IND_VALUE_CAS_MDR1_DIALING_DONE)
{
/* Check if there was an error */
if (pEvent->Event.aun8Data [0] == TB640_CAS_MDR1_DIALING_DONE_RESULT_ERROR)
{
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_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)
{
TB640_CAS_CHANGE_STATE (TB640_CAS_CALL_APP_STATE_EIGHT);
}
TB640_CAS_STATE_DECLARE_NEXT_EVENT (TB640_MSG_ID_CAS_TIMEOUT)
{
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_INCREMENT_STATS (un32NbTimeoutOccured, 1);
TB640_CAS_INCREMENT_TRUNK_STATS (un32NbTimeoutOccured, 1);
in_pCallContext->fTimeoutOccured = TBX_TRUE;
in_pCallContext->fCasNeedToDisconnect = TBX_TRUE;
TB640_CAS_CHANGE_STATE (TB640_CAS_CALL_APP_STATE_EIGHT);
}
TB640_CAS_STATE_RETURN
}
/*-------------------------------------------------------------------------------------------------------------------------------
|
| TB640CasProcessStateFiftheen: CAS processing for call state 'fiftheen'
|
*------------------------------------------------------------------------------------------------------------------------------*/
TB640_CAS_STATE_FUNCTION(TB640CasProcessStateFiftheen)
{
TB640_CAS_STATE_ENTRY(TB640_CAS_CALL_APP_STATE_FIFTHEEN)
{
if( g_AppContext->fDoConnection )
{
if( g_AppContext->fCTBusConnection == TBX_FALSE )
{
TB640_CAS_LOG (TRACE_LEVEL_2, "Outgoing call 0x%08X using trunk %d, timeslot %d\n", in_pCallContext->hCall, in_pCallContext->un32TrunkIndex, in_pCallContext->un32TimeslotIndex);
/* Create the connection */
TB640CasSendCreateConnection ((TB640_RESOURCE_HANDLE) NULL, pTrunkResInfo->hTrunkResource, in_pCallContext);
in_pCallContext->nCreateRspExpected = 1;
TB640_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -