static void voice_out_cb(tUIPC_CH_ID ch_id, tUIPC_EVENT event) { switch(event) { case UIPC_OPEN_EVT: adpcm_rec_cb.channel_status = TRUE; BTM_TRACE_ERROR1("voice_out_cb:event %d\n",event); break; case UIPC_CLOSE_EVT: adpcm_rec_cb.channel_status = FALSE; BTM_TRACE_ERROR1("voice_out_cb:event %d\n",event); break; case UIPC_RX_DATA_EVT: break; case UIPC_RX_DATA_READY_EVT: break; case UIPC_TX_DATA_READY_EVT: break; default : BTM_TRACE_ERROR1("### SCO-CHANNEL EVENT %d NOT HANDLED ###", event); break; } }
/******************************************************************************* ** ** Function btm_update_dev_to_white_list ** ** Description This function adds a device into white list. *******************************************************************************/ BOOLEAN btm_update_dev_to_white_list(BOOLEAN to_add, BD_ADDR bd_addr, UINT8 attr) { /* look up the sec device record, and find the address */ tBTM_BLE_CB *p_cb = &btm_cb.ble_ctr_cb; BOOLEAN started = FALSE; UINT8 wl_state = p_cb->wl_state; BTM_TRACE_DEBUG3("to_add(%d), attr(%d), wl_state(%d)", to_add, attr, wl_state); if ((to_add && p_cb->num_empty_filter == 0) || (!to_add && p_cb->num_empty_filter == p_cb->max_filter_entries)) { BTM_TRACE_ERROR1("WL full or empty, unable to update to WL. num_entry available: %d", p_cb->num_empty_filter); return started; } btm_suspend_wl_activity(wl_state); /* enq pending WL device operation */ btm_enq_wl_dev_operation(to_add, bd_addr, attr); btm_resume_wl_activity(wl_state); return started; }
void stop_adpcm_voice_rec(void) { BTM_TRACE_ERROR1("%s\n", __FUNCTION__); if (adpcm_rec_cb.adpcm_state != NULL) { adpcm_decode_free(adpcm_rec_cb.adpcm_state); adpcm_rec_cb.adpcm_state = NULL; } stop_work_thread(); }
void start_adpcm_voice_rec(void) { remove(RTK_STORAGE_PCM_FILE); BTM_TRACE_ERROR1("%s\n", __FUNCTION__); if (adpcm_rec_cb.adpcm_state == NULL) { BTM_TRACE_DEBUG0("init the adpcm"); adpcm_rec_cb.adpcm_state = adpcm_decode_alloc(); } adpcm_rec_cb.n_20bytes_pkts = 0; if(!mutex_init) { const pthread_mutexattr_t attr = PTHREAD_MUTEX_RECURSIVE; pthread_mutex_init(&adpcm_rec_cb.mutex, &attr); } memset(&adpcm_voice_data_buffer,0,sizeof(adpcm_voice_data_buffer)); UIPC_Open(UIPC_CH_ID_RTKBT_VR_AUDIO, voice_out_cb); UIPC_Ioctl(UIPC_CH_ID_RTKBT_VR_AUDIO, UIPC_SET_READ_POLL_TMO, 0); start_work_thread(); }
/******************************************************************************* ** ** Function btm_update_dev_to_white_list ** ** Description This function adds a device into white list. *******************************************************************************/ BOOLEAN btm_update_dev_to_white_list(BOOLEAN to_add, BD_ADDR bd_addr, tBLE_ADDR_TYPE addr_type) { /* look up the sec device record, and find the address */ tBTM_BLE_CB *p_cb = &btm_cb.ble_ctr_cb; tBTM_SEC_DEV_REC *p_dev_rec; BD_ADDR dummy_bda = {0}; BOOLEAN started = FALSE, suspend = FALSE; if (btm_cb.btm_inq_vars.inq_active) { suspend = TRUE; btsnd_hcic_ble_set_scan_enable (BTM_BLE_SCAN_DISABLE, BTM_BLE_DUPLICATE_ENABLE); } if ((p_dev_rec = btm_find_dev (bd_addr)) != NULL && p_dev_rec->device_type == BT_DEVICE_TYPE_BLE) { BTM_TRACE_DEBUG0("btm_update_dev_to_white_list 1"); if ((to_add && p_cb->num_empty_filter == 0) || (!to_add && p_cb->num_empty_filter == p_cb->max_filter_entries)) { BTM_TRACE_ERROR1("num_entry available in controller: %d", p_cb->num_empty_filter); return started; } if ( p_dev_rec->ble.ble_addr_type == BLE_ADDR_PUBLIC) { if (to_add) started = btsnd_hcic_ble_add_white_list (BLE_ADDR_PUBLIC, bd_addr); else started = btsnd_hcic_ble_remove_from_white_list (BLE_ADDR_PUBLIC, bd_addr); } else { if (BLE_ADDR_IS_STATIC(bd_addr)) { if (to_add) started = btsnd_hcic_ble_add_white_list (BLE_ADDR_RANDOM, bd_addr); else started = btsnd_hcic_ble_remove_from_white_list (BLE_ADDR_RANDOM, bd_addr); } if (memcmp(p_dev_rec->ble.reconn_addr, dummy_bda, BD_ADDR_LEN) != 0) { if (to_add) started = btsnd_hcic_ble_add_white_list (BLE_ADDR_RANDOM, p_dev_rec->ble.reconn_addr); else started = btsnd_hcic_ble_remove_from_white_list (BLE_ADDR_RANDOM, p_dev_rec->ble.reconn_addr); } } } /* if not a known device, shall we add it? */ else { if (to_add) started = btsnd_hcic_ble_add_white_list (addr_type, bd_addr); else started = btsnd_hcic_ble_remove_from_white_list (addr_type, bd_addr); } if (suspend) { btsnd_hcic_ble_set_scan_enable (BTM_BLE_SCAN_ENABLE, BTM_BLE_DUPLICATE_DISABLE); } return started; }
/******************************************************************************* ** ** Function btm_ble_start_auto_conn ** ** Description This function is to start/stop auto connection procedure. ** ** Parameters start: TRUE to start; FALSE to stop. ** ** Returns void ** *******************************************************************************/ BOOLEAN btm_ble_start_auto_conn(BOOLEAN start) { tBTM_BLE_CB *p_cb = &btm_cb.ble_ctr_cb; BD_ADDR dummy_bda = {0}; BOOLEAN exec = TRUE; UINT8 own_addr_type = BLE_ADDR_PUBLIC; UINT16 scan_int, scan_win; if (start) { if (p_cb->conn_state == BLE_CONN_IDLE && btm_ble_count_unconn_dev_in_whitelist() > 0) { btm_execute_wl_dev_operation(); scan_int = (p_cb->scan_int == BTM_BLE_CONN_PARAM_UNDEF) ? BTM_BLE_SCAN_SLOW_INT_1 : p_cb->scan_int; scan_win = (p_cb->scan_win == BTM_BLE_CONN_PARAM_UNDEF) ? BTM_BLE_SCAN_SLOW_WIN_1 : p_cb->scan_win; if (!btsnd_hcic_ble_create_ll_conn (scan_int, /* UINT16 scan_int */ scan_win, /* UINT16 scan_win */ 0x01, /* UINT8 white_list */ BLE_ADDR_PUBLIC, /* UINT8 addr_type_peer */ dummy_bda, /* BD_ADDR bda_peer */ own_addr_type, /* UINT8 addr_type_own, not allow random address for central */ BTM_BLE_CONN_INT_MIN_DEF, /* UINT16 conn_int_min */ BTM_BLE_CONN_INT_MAX_DEF, /* UINT16 conn_int_max */ BTM_BLE_CONN_SLAVE_LATENCY_DEF, /* UINT16 conn_latency */ BTM_BLE_CONN_TIMEOUT_DEF, /* UINT16 conn_timeout */ 0, /* UINT16 min_len */ 0)) /* UINT16 max_len */ { /* start auto connection failed */ exec = FALSE; } else { #ifdef BLUETOOTH_RTK p_cb->wl_state |= BTM_BLE_WL_INIT; #endif btm_ble_set_conn_st (BLE_BG_CONN); } } else { exec = FALSE; } } else { if (p_cb->conn_state == BLE_BG_CONN) { btsnd_hcic_ble_create_conn_cancel(); btm_ble_set_conn_st (BLE_CONN_CANCEL); } else { #if 0 BTM_TRACE_ERROR1("conn_st = %d, not in auto conn state, can not stop.", p_cb->conn_state); exec = FALSE; #endif } } return exec; }