/******************************************************************************* ** ** Function bta_av_sm_execute ** ** Description State machine event handling function for AV ** ** ** Returns void ** *******************************************************************************/ void bta_av_sm_execute(tBTA_AV_CB *p_cb, UINT16 event, tBTA_AV_DATA *p_data) { tBTA_AV_ST_TBL state_table; UINT8 action; #if (defined(BTA_AV_DEBUG) && BTA_AV_DEBUG == TRUE) APPL_TRACE_EVENT4("AV event=0x%x(%s) state=%d(%s)", event, bta_av_evt_code(event), p_cb->state, bta_av_st_code(p_cb->state)); #else APPL_TRACE_EVENT2("AV event=0x%x state=%d", event, p_cb->state); #endif /* look up the state table for the current state */ state_table = bta_av_st_tbl[p_cb->state]; event &= 0x00FF; /* set next state */ p_cb->state = state_table[event][BTA_AV_NEXT_STATE]; APPL_TRACE_EVENT1("next state=%d", p_cb->state); /* execute action functions */ if ((action = state_table[event][BTA_AV_ACTION_COL]) != BTA_AV_IGNORE) { (*bta_av_action[action])(p_cb, p_data); } }
/******************************************************************************* ** ** Function bta_ma_get_body_length ** ** Description Returns the combined length in characters of the message ** content. ** ** Parameters p_body - pointer to bBody structure. ** ** Returns Length of the body message text. ** *******************************************************************************/ UINT32 bta_ma_get_body_length(tBTA_MA_BMSG_BODY * p_body) { UINT32 length = 0, len=0; tBTA_MA_BMSG_CONTENT * p_content; char * p_text; APPL_TRACE_EVENT0("bta_ma_get_body_length"); p_content = BTA_MaBmsgGetContentFromBody(p_body); while ( p_content ) { p_text= BTA_MaBmsgGetMsgContent(p_content); while ( p_text ) { len = strlen(p_text); length += len; APPL_TRACE_EVENT3("total=%d len=%d text=%s",length, len, p_text); p_text = BTA_MaBmsgGetNextMsgContent(p_content); } p_content = BTA_MaBmsgGetNextContent(p_content); } APPL_TRACE_EVENT1("bta_ma_get_body_length len=%d", length); return( length ); }
/******************************************************************************* ** ** Function bta_av_co_audio_get_sbc_config ** ** Description Retrieves the SBC codec configuration. If the codec in use ** is not SBC, return the default SBC codec configuration. ** ** Returns TRUE if codec is SBC, FALSE otherwise ** *******************************************************************************/ BOOLEAN bta_av_co_audio_get_sbc_config(tA2D_SBC_CIE *p_sbc_config, UINT16 *p_minmtu) { BOOLEAN result = FALSE; UINT8 index, jndex; tBTA_AV_CO_PEER *p_peer; tBTA_AV_CO_SINK *p_sink; APPL_TRACE_EVENT1("bta_av_co_cb.codec_cfg.id : codec 0x%x", bta_av_co_cb.codec_cfg.id); /* Minimum MTU is by default very large */ *p_minmtu = 0xFFFF; GKI_disable(); if (bta_av_co_cb.codec_cfg.id == BTIF_AV_CODEC_SBC) { if (A2D_ParsSbcInfo(p_sbc_config, bta_av_co_cb.codec_cfg.info, FALSE) == A2D_SUCCESS) { for (index = 0; index < BTA_AV_CO_NUM_ELEMENTS(bta_av_co_cb.peers); index++) { p_peer = &bta_av_co_cb.peers[index]; if (p_peer->opened) { if (p_peer->mtu < *p_minmtu) { *p_minmtu = p_peer->mtu; } for (jndex = 0; jndex < p_peer->num_sup_snks; jndex++) { p_sink = &p_peer->snks[jndex]; if (p_sink->codec_type == A2D_MEDIA_CT_SBC) { /* Update the bitpool boundaries of the current config */ p_sbc_config->min_bitpool = BTA_AV_CO_MAX(p_sink->codec_caps[BTA_AV_CO_SBC_MIN_BITPOOL_OFF], p_sbc_config->min_bitpool); p_sbc_config->max_bitpool = BTA_AV_CO_MIN(p_sink->codec_caps[BTA_AV_CO_SBC_MAX_BITPOOL_OFF], p_sbc_config->max_bitpool); APPL_TRACE_EVENT2("bta_av_co_audio_get_sbc_config : sink bitpool min %d, max %d", p_sbc_config->min_bitpool, p_sbc_config->max_bitpool); break; } } } } result = TRUE; } } if (!result) { /* Not SBC, still return the default values */ *p_sbc_config = btif_av_sbc_default_config; } GKI_enable(); return result; }
/****************************************************************************** ** ** Function preload_cb ** ** Description HOST/CONTROLLER LIB CALLBACK API - This function is called ** when the libbt-hci completed stack preload process ** ** Returns None ** ******************************************************************************/ static void preload_cb(TRANSAC transac, bt_hc_preload_result_t result) { APPL_TRACE_EVENT1("HC preload_cb %d [0:SUCCESS 1:FAIL]", result); if (result == BT_HC_PRELOAD_SUCCESS) { preload_stop_wait_timer(); /* notify BTU task that libbt-hci is ready */ GKI_send_event(BTU_TASK, BT_EVT_PRELOAD_CMPL); } }
/******************************************************************************* ** ** Function bta_dm_sm_execute ** ** Description State machine event handling function for DM ** ** ** Returns void ** *******************************************************************************/ BOOLEAN bta_dm_sm_execute(BT_HDR *p_msg) { UINT16 event = p_msg->event & 0x00ff; APPL_TRACE_EVENT1("bta_dm_sm_execute event:0x%x", event); /* execute action functions */ if(event < BTA_DM_NUM_ACTIONS) { (*bta_dm_action[event])( (tBTA_DM_MSG*) p_msg); } return TRUE; }
/****************************************************************************** ** ** Function bte_hci_enable ** ** Description Enable HCI & Vendor modules ** ** Returns None ** ******************************************************************************/ static void bte_hci_enable(void) { APPL_TRACE_DEBUG1("%s", __FUNCTION__); preload_start_wait_timer(); if (bt_hc_if) { int result = bt_hc_if->init(&hc_callbacks, btif_local_bd_addr.address); APPL_TRACE_EVENT1("libbt-hci init returns %d", result); assert(result == BT_HC_STATUS_SUCCESS); if (hci_logging_enabled == TRUE) bt_hc_if->logging(BT_HC_LOGGING_ON, hci_logfile); #if (defined (BT_CLEAN_TURN_ON_DISABLED) && BT_CLEAN_TURN_ON_DISABLED == TRUE) APPL_TRACE_DEBUG1("%s Not Turninig Off the BT before Turninig ON", __FUNCTION__); /* Do not power off the chip before powering on if BT_CLEAN_TURN_ON_DISABLED flag is defined and set to TRUE to avoid below mentioned issue. Wingray kernel driver maintains a combined counter to keep track of BT-Wifi state. Invoking set_power(BT_HC_CHIP_PWR_OFF) when the BT is already in OFF state causes this counter to be incorrectly decremented and results in undesired behavior of the chip. This is only a workaround and when the issue is fixed in the kernel this work around should be removed. */ #else /* toggle chip power to ensure we will reset chip in case a previous stack shutdown wasn't completed gracefully */ bt_hc_if->set_power(BT_HC_CHIP_PWR_OFF); #endif bt_hc_if->set_power(BT_HC_CHIP_PWR_ON); bt_hc_if->preload(NULL); } }
/****************************************************************************** ** ** Function hostwake_ind ** ** Description HOST/CONTROLLER LIB CALLOUT API - This function is called ** from the libbt-hci to indicate the HostWake event ** ** Returns None ** ******************************************************************************/ static void hostwake_ind(bt_hc_low_power_event_t event) { APPL_TRACE_EVENT1("HC hostwake_ind %d", event); }
/****************************************************************************** ** ** Function lpm_cb ** ** Description HOST/CONTROLLER LIB CALLBACK API - This function is called ** back from the libbt-hci to indicate the current LPM state ** ** Returns None ** ******************************************************************************/ static void lpm_cb(bt_hc_lpm_request_result_t result) { APPL_TRACE_EVENT1("HC lpm_result_cb %d", result); lpm_enabled = (result == BT_HC_LPM_ENABLED) ? TRUE : FALSE; }
/****************************************************************************** ** ** Function postload_cb ** ** Description HOST/CONTROLLER LIB CALLBACK API - This function is called ** when the libbt-hci lib completed stack postload process ** ** Returns None ** ******************************************************************************/ static void postload_cb(TRANSAC transac, bt_hc_postload_result_t result) { APPL_TRACE_EVENT1("HC postload_cb %d", result); }