/**************************************************************************** NAME handleClInitCfm DESCRIPTION Handles the CL library initialisation result. */ static void handleClInitCfm(const CL_INIT_CFM_T *cfm) { mvdAppState app_state = the_app->app_state; switch (app_state) { case AppStateInitialising: { if (cfm->status == success) { /* Configure Mode4 Security Settings */ ConnectionSmSecModeConfig(&the_app->task, cl_sm_wae_acl_owner_none, FALSE, TRUE); /* Turn off all SDP security */ ConnectionSmSetSecurityLevel(protocol_l2cap, 1, ssp_secl4_l0, TRUE, FALSE, FALSE); if (cfm->version == bluetooth2_1) { /* EIR inquiry mode */ ConnectionWriteInquiryMode(&the_app->task, inquiry_mode_eir); } /* Set default role switch policy */ ConnectionSetRoleSwitchParams(NULL); initProfile(); } else { DEBUG_CL((" App failed to init CL\n")); Panic(); } break; } default: { unexpectedClMessage(app_state, CL_INIT_CFM); break; } } }
/**************************************************************************** NAME sinkInitComplete DESCRIPTION Sink device initialisation has completed. RETURNS void */ void sinkInitComplete( const HFP_INIT_CFM_T *cfm ) { uint8 i; /* Make sure the profile instance initialisation succeeded. */ if (cfm->status == hfp_init_success) { /* initialise connection status for this instance */ for(i=0;i<2;i++) { theSink.profile_data[i].status.list_id = INVALID_LIST_ID; theSink.a2dp_link_data->list_id[i] = INVALID_LIST_ID; } /* Disable SDP security */ ConnectionSmSetSecurityLevel(protocol_l2cap,1,ssp_secl4_l0,TRUE,FALSE,FALSE); /* WAE - no ACL, Debug keys - off, Legacy pair key missing - on */ ConnectionSmSecModeConfig(&theSink.task, cl_sm_wae_acl_none, FALSE, TRUE); /* Require MITM on the MUX (incomming and outgoing)*/ if(theSink.features.ManInTheMiddle) { ConnectionSmSetSecurityLevel(0,3,ssp_secl4_l3,TRUE,TRUE,FALSE); } RegisterDeviceIdServiceRecord(); #ifdef ENABLE_PEER RegisterPeerDeviceServiceRecord(); peerInitPeerStatus(); #endif /* Initialise Inquiry Data to NULL */ theSink.inquiry.results = NULL; #ifdef ENABLE_AVRCP /* initialise the AVRCP library */ sinkAvrcpInit(); #endif #ifdef ENABLE_SUBWOOFER /* Initialise the swat the library - Use library default service record - Library does not auto handles messages */ if ( (theSink.rundata->subwoofer.esco_params.tx_bandwidth == 0) && (theSink.rundata->subwoofer.esco_params.rx_bandwidth == 0) && (theSink.rundata->subwoofer.esco_params.max_latency == 0) ) { /* Use library default eSCO parameters */ SwatInit(&theSink.task, SW_MAX_REMOTE_DEVICES, swat_role_source, FALSE, 0, 0, NULL); } else { /* Use custom eSCO parameters from configuration data */ SwatInit(&theSink.task, SW_MAX_REMOTE_DEVICES, swat_role_source, FALSE, 0, 0, &theSink.rundata->subwoofer.esco_params); } #endif /* No audio sources are gated at startup */ theSink.gated_audio = 0; /*if we receive the init message in the correct state*/ if ( stateManagerGetState() == deviceLimbo ) { #ifdef ENABLE_PBAP /* If hfp has been initialised successfully, start initialising PBAP */ INIT_DEBUG(("INIT: PBAP Init start\n")); initPbap(); #else /*init the configurable parameters*/ InitUserFeatures(); #endif } /* try to get a power table entry from ps if one exists after having read the user features as A2DP enable state is used to determine size of power table entry */ SetupPowerTable(); #ifdef ENABLE_MAPC /* if the map feature is enabled, start the map notification service at initialisation time */ initMap(); #endif /* disable automatic mic bias control as this is handled by the audio plugins */ AudioPluginSetMicPio(theSink.conf1->PIOIO.digital.mic_a, FALSE); AudioPluginSetMicPio(theSink.conf1->PIOIO.digital.mic_b, FALSE); } else /* If the profile initialisation has failed then things are bad so panic. */ Panic(); /* initialisation is complete */ theSink.SinkInitialising = FALSE; }