📄 headset_threewaycall.c
字号:
/****************************************************************************Copyright (C) Cambridge Silicon Radio Ltd. 2004-2006Part of BlueLab 3.6.2-releaseFILE NAME headset_threewaycall.c DESCRIPTION three way call handling functions */#include "headset_private.h"#include "headset_threewaycall.h"#ifdef DEBUG_THREEWAY#define TWC_DEBUG(x) DEBUG(x)#else#define TWC_DEBUG(x) #endif void headsetHandleThreeCallWaitingCfm (hsTaskData * pApp , HFP_CALL_WAITING_ENABLE_CFM_T * pCfm ){ TWC_DEBUG(("TWC: Call waiting cfm \n")) ;} void headsetHandleThreeCallWaitingInd (hsTaskData * pApp , HFP_CALL_WAITING_IND_T * pInd ){ TWC_DEBUG(("TWC: call waiting ind\n")) ; /*change state accordingly*/ stateManagerEnterThreeWayCallWaitingState ( pApp ) ;}void headsetHandleThreeReleaseHeldRejectWaitingCfm (hsTaskData * pApp , HFP_RELEASE_HELD_REJECT_WAITING_CALL_CFM_T * pCfm){ TWC_DEBUG(("TWC: release held reject waiting cfm \n ")) ; if (pCfm->status == hfp_success) { stateManagerEnterActiveCallState ( pApp ) ; }}void headsetHandleThreeReleaseActiveAcceptOtherCfm ( hsTaskData * pApp , HFP_RELEASE_ACTIVE_ACCEPT_OTHER_CALL_CFM_T * pCfm){ TWC_DEBUG(("TWC: Release active accept other cfm \n")) ; if (pCfm->status == hfp_success) { stateManagerEnterActiveCallState ( pApp ) ; } }void headsetHandleThreeHoldActiveAcceptOtherCfm (hsTaskData * pApp , HFP_HOLD_ACTIVE_ACCEPT_OTHER_CALL_CFM_T* pCfm){ TWC_DEBUG(("TWC: hold active accpet other cfm \n")) ; if (pCfm->status == hfp_success) { stateManagerEnterThreeWayCallOnHoldState ( pApp ) ; }}void headsetHandleThreeAddCall (hsTaskData * pApp , HFP_ADD_HELD_CALL_CFM_T* pCfm){ TWC_DEBUG(("TWC: add call cfm \n")) ; if (pCfm->status == hfp_success) { stateManagerEnterThreeWayMulticallState ( pApp ) ; }}void headsetHandleThreeExplicitTransfer ( hsTaskData * pApp , HFP_EXPLICIT_CALL_TRANSFER_CFM_T * pCfm){ TWC_DEBUG(("TWC: 7")) ; if (pCfm->status == hfp_success) { if ( stateManagerGetState() != headsetConnected ) { stateManagerEnterConnectedState ( pApp ) ; } }}void headsetHandleThreeCallSetupInd ( hsTaskData * pApp , HFP_CALL_SETUP_IND_T * pInd ) { TWC_DEBUG(("TWC: Call SetupInd [%d] [%d]\n", pInd->call_setup , stateManagerGetState() )) ; switch (pInd->call_setup) { case hfp_no_call_setup: switch (stateManagerGetState () ) { case headsetThreeWayCallWaiting: stateManagerEnterActiveCallState (pApp) ; break; case headsetThreeWayCallOnHold: case headsetThreeWayMulticall: default: break ; } break; case hfp_incoming_call_setup: case hfp_outgoing_call_setup : case hfp_outgoing_call_alerting_setup: default: TWC_DEBUG(("unhandled state [%d]", pInd->call_setup)) ; break ; }}void headsetHandleThreeCallInd ( hsTaskData * pApp , HFP_CALL_IND_T * pInd ) { TWC_DEBUG(("TWC: Call Ind [%d] [%d]\n", pInd->call , stateManagerGetState() )) ; switch( pInd->call ) { case (0): { stateManagerEnterConnectedState ( pApp) ; } break; case (1): TWC_DEBUG(("TWC: Call Ind call active\n")) ; /*end of call detected*/ switch ( stateManagerGetState() ) { case headsetThreeWayCallWaiting: stateManagerEnterActiveCallState (pApp) ; break ; case headsetThreeWayCallOnHold: MessageSend ( &pApp->task , EventEndOfCall , 0 ) ; stateManagerEnterActiveCallState (pApp) ; break ; case headsetThreeWayMulticall: MessageSend ( &pApp->task , EventEndOfCall , 0 ) ; stateManagerEnterActiveCallState (pApp) ; break ; default: break ; } break; default: break ; }}void headsetHandleCurrentCallsInd ( hsTaskData * pApp , HFP_CURRENT_CALLS_IND_T * pInd ) { headsetState pState = stateManagerGetState() ; TWC_DEBUG(("TWC: HFP_CURRENT_CALLS_IND id[%d] mult[%d] status[%d] STATE[%d]\n" , pInd->call_idx , pInd->multiparty , pInd->status , pState)) ; switch (pState ) { case headsetConnected: switch (pInd->status) { case hfp_call_active: /*! Call is currently active.*/ stateManagerEnterActiveCallState (pApp); break; case hfp_call_held: /*! Call is currently held.*/ stateManagerEnterIncomingCallOnHoldState (pApp); break; case hfp_call_dialling: /*! Call is being dialled - mobile originated only.*/ case hfp_call_alerting: /*! Call is alerting - mobile originated only.*/ stateManagerEnterOutgoingCallEstablishState(pApp); break; case hfp_call_incoming: /*! Call is incoming - mobile terminated only.*/ case hfp_call_waiting: /*! Call is waiting - mobile terminated only.*/ stateManagerEnterIncomingCallEstablishState( pApp) ; break ; default: break ; } break ; case headsetIncomingCallEstablish: switch (pInd->status) { case hfp_call_active: /*! Call is currently active.*/ stateManagerEnterThreeWayCallWaitingState (pApp); break; case hfp_call_held: /*! Call is currently held.*/ stateManagerEnterThreeWayCallOnHoldState (pApp); break; default: break ; } break; case headsetActiveCall: switch (pInd->status) { case hfp_call_incoming: /*! Call is currently incoming.*/ case hfp_call_waiting: /*! Call is waiting - mobile terminated only.*/ stateManagerEnterThreeWayCallWaitingState (pApp); break; case hfp_call_held: /*! Call is currently held.*/ stateManagerEnterThreeWayCallOnHoldState (pApp); break; default: break ; } break; case headsetOutgoingCallEstablish: switch (pInd->status) { case hfp_call_active: /*! Call is currently active.*/ stateManagerEnterThreeWayCallWaitingState (pApp); break; case hfp_call_held: /*! Call is currently held.*/ stateManagerEnterThreeWayCallOnHoldState (pApp); break; default: break ; } break; case headsetIncomingCallOnHold: switch (pInd->status) { case hfp_call_active: /*! Call is currently active.*/ stateManagerEnterThreeWayCallOnHoldState (pApp); break; case hfp_call_held: /*! Call is currently held.*/ stateManagerEnterThreeWayCallOnHoldState (pApp); break; default: break ; } break; /*we are now in one of the TWC states - make no more changes*/ case headsetThreeWayCallWaiting: case headsetThreeWayCallOnHold: case headsetThreeWayMulticall: default: break ; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -