/**************************************************************************** Outcome of the RFCOMM connect request. */ void aghfpHandleRfcommClientConnectCfm(AGHFP *aghfp, CL_RFCOMM_CLIENT_CONNECT_CFM_T* cfm) { if(cfm->status == rfcomm_connect_pending) aghfp->rfcomm_sink = cfm->sink; else aghfpHandleRfcommConnectCfm(aghfp, cfm->status); }
/**************************************************************************** All messages for this profile lib are handled by this function */ void aghfpProfileHandler(Task task, MessageId id, Message message) { AGHFP *aghfp = (AGHFP*)task; aghfp_state profileState = aghfp->state; /*printf("%s - ", stateNames[profileState]);*/ if (id >= AGHFP_INTERNAL_MSG_BASE && id < AGHFP_INTERNAL_MSG_TOP) { handleAghfpMessages(task, id, message); } else { /* Check the message id */ switch (id) { case CL_DM_SYNC_RENEGOTIATE_IND: PRINT(("CL_DM_SYNC_RENEGOTIATE_IND \n" )); break ; /*************************************************************************/ /* SDP Messages */ /*************************************************************************/ case CL_SDP_REGISTER_CFM: PRINT(("CL_SDP_REGISTER_CFM\n")); switch(profileState) { case aghfp_initialising: case aghfp_ready: case aghfp_slc_connecting: /* Handle the register cfm */ aghfpHandleSdpRegisterCfm(aghfp, (CL_SDP_REGISTER_CFM_T *) message); break; default: /* Panic in debug and ignore in release lib variants */ handleUnexpected(aghfpUnexpectedClPrim, profileState, id); break; } break; case CL_SDP_UNREGISTER_CFM: switch(profileState) { case aghfp_initialising: case aghfp_ready: case aghfp_slc_connecting: case aghfp_slc_connected: case aghfp_incoming_call_establish: case aghfp_outgoing_call_establish: case aghfp_active_call: /* Handle the register cfm */ aghfpHandleSdpUnregisterCfm(aghfp, (CL_SDP_UNREGISTER_CFM_T *) message); break; default: /* Panic in debug and ignore in release lib variants */ handleUnexpected(aghfpUnexpectedClPrim, profileState, id); break; } break; case CL_SDP_SERVICE_SEARCH_ATTRIBUTE_CFM: PRINT(("CL_SDP_SERVICE_SEARCH_ATTRIBUTE_CFM\n")); switch(profileState) { case aghfp_slc_connecting: /* Currently we only look for attributes during SLC establishment */ aghfpHandleServiceSearchAttributeCfm(aghfp, (CL_SDP_SERVICE_SEARCH_ATTRIBUTE_CFM_T *) message); break; case aghfp_slc_connected: case aghfp_incoming_call_establish: case aghfp_outgoing_call_establish: case aghfp_active_call: default: /* Panic in debug and ignore in release lib variants */ handleUnexpected(aghfpUnexpectedClPrim, profileState, id); break; } break; /*************************************************************************/ /* RFCOMM Messages */ /*************************************************************************/ case CL_RFCOMM_REGISTER_CFM: PRINT(("CL_RFCOMM_REGISTER_CFM\n")); switch(profileState) { case aghfp_initialising: aghfpHandleRfcommRegisterCfm(aghfp, (CL_RFCOMM_REGISTER_CFM_T *) message); break; default: /* Panic in debug and ignore in release lib variants */ handleUnexpected(aghfpUnexpectedClPrim, profileState, id); break; } break; case CL_RFCOMM_CONNECT_IND: PRINT(("CL_RFCOMM_CONNECT_IND\n")); switch(profileState) { case aghfp_ready: /* Handle the connect indication */ aghfpHandleRfcommConnectInd(aghfp, (CL_RFCOMM_CONNECT_IND_T *) message); break; case aghfp_slc_connecting: case aghfp_slc_connected: case aghfp_incoming_call_establish: case aghfp_outgoing_call_establish: /* Reject the connect request - this shouldn't happen too often as we unregister our service record after we establish an SLC */ aghfpHandleSlcConnectIndReject(aghfp, (CL_RFCOMM_CONNECT_IND_T *) message); break; default: /* Panic in debug and ignore in release lib variants */ handleUnexpected(aghfpUnexpectedClPrim, profileState, id); break; } break; case CL_RFCOMM_CONNECT_CFM: PRINT(("CL_RFCOMM_CONNECT_CFM\n")); switch(profileState) { case aghfp_slc_connecting: /* Handle the connect cfm */ aghfpHandleRfcommConnectCfm(aghfp, (CL_RFCOMM_CONNECT_CFM_T *) message); break; default: /* Panic in debug and ignore in release lib variants */ handleUnexpected(aghfpUnexpectedClPrim, profileState, id); break; } break; case CL_RFCOMM_DISCONNECT_IND: PRINT(("CL_RFCOMM_DISCONNECT_IND\n")); switch(profileState) { case aghfp_ready: case aghfp_slc_connecting: case aghfp_slc_connected: case aghfp_incoming_call_establish: case aghfp_outgoing_call_establish: case aghfp_active_call: aghfpHandleRfcommDisconnectInd(aghfp, (CL_RFCOMM_DISCONNECT_IND_T*) message); break; default: /* Panic in debug and ignore in release lib variants */ handleUnexpected(aghfpUnexpectedClPrim, profileState, id); break; } break; /*************************************************************************/ /* Audio Connection Messages */ /*************************************************************************/ case CL_DM_SYNC_CONNECT_IND: PRINT(("CL_DM_SYNC_CONNECT_IND\n")); switch(profileState) { case aghfp_slc_connected: case aghfp_incoming_call_establish: case aghfp_outgoing_call_establish: case aghfp_active_call: aghfpHandleSyncConnectInd(aghfp, (CL_DM_SYNC_CONNECT_IND_T *)message); break; default: /* Reject request outright because we are in the wrong state */ aghfpHandleSyncConnectIndReject(aghfp, (CL_DM_SYNC_CONNECT_IND_T *)message); break; } break; case CL_DM_SYNC_CONNECT_CFM: PRINT(("CL_DM_SYNC_CONNECT_CFM\n")); switch(profileState) { case aghfp_slc_connected: case aghfp_incoming_call_establish: case aghfp_outgoing_call_establish: case aghfp_active_call: aghfpHandleSyncConnectCfm(aghfp, (CL_DM_SYNC_CONNECT_CFM_T *)message); break; default: /* Panic in debug and ignore in release lib variants */ handleUnexpected(aghfpUnexpectedClPrim, profileState, id); break; } break; case CL_DM_SYNC_DISCONNECT_IND: PRINT(("CL_DM_SYNC_DISCONNECT_IND\n")); switch(profileState) { case aghfp_slc_connected: case aghfp_incoming_call_establish: case aghfp_outgoing_call_establish: case aghfp_active_call: aghfpHandleSyncDisconnectInd(aghfp, (CL_DM_SYNC_DISCONNECT_IND_T *)message); break; default: /* Panic in debug and ignore in release lib variants */ handleUnexpected(aghfpUnexpectedClPrim, profileState, id); break; } break; /*************************************************************************/ /* Misc Other Messages */ /*************************************************************************/ case MESSAGE_MORE_DATA: PRINT(("MESSAGE_MORE_DATA\n")); switch(profileState) { case aghfp_slc_connecting: case aghfp_slc_connected: case aghfp_incoming_call_establish: case aghfp_outgoing_call_establish: case aghfp_active_call: /* We have received more data into the RFCOMM buffer */ aghfpHandleReceivedData(aghfp, ((MessageMoreData *) message)->source); break; default: /* Panic in debug and ignore in release lib variants */ handleUnexpected(aghfpUnexpectedClPrim, profileState, id); break; } break; case CL_DM_SYNC_REGISTER_CFM: PRINT(("CL_DM_SYNC_REGISTER_CFM\n")); switch(profileState) { case aghfp_initialising: case aghfp_ready: case aghfp_slc_connecting: case aghfp_slc_connected: case aghfp_incoming_call_establish: case aghfp_outgoing_call_establish: case aghfp_active_call: /* Registered for Synchronous connection indications */ aghfpHandleSyncRegisterCfm(aghfp); break; default: break; } break; /* Unhandled messages */ case CL_SM_ENCRYPTION_CHANGE_IND: case CL_SM_ENCRYPTION_KEY_REFRESH_IND: case MESSAGE_MORE_SPACE: case MESSAGE_SOURCE_EMPTY: break; default: PRINT(("Unhandled message\n")); /* Received an unhandled message */ handleUnexpected(aghfpUnexpectedMessage, profileState, id); break; } } }
/**************************************************************************** Outcome of the RFCOMM connect response. */ void aghfpHandleRfcommServerConnectCfm(AGHFP *aghfp, CL_RFCOMM_SERVER_CONNECT_CFM_T* cfm) { aghfpHandleRfcommConnectCfm(aghfp, cfm->status); }