/******************************************************************************* ** ** Function btm_update_bg_conn_list ** ** Description This function update the local background connection device list. *******************************************************************************/ BOOLEAN btm_update_bg_conn_list(BOOLEAN to_add, BD_ADDR bd_addr) { tBTM_BLE_CB *p_cb = &btm_cb.ble_ctr_cb; UINT8 i; BD_ADDR dummy_bda = {0}; BTM_TRACE_EVENT0 ("btm_update_bg_conn_list"); if ((to_add && (p_cb->bg_conn_dev_num == BTM_BLE_MAX_BG_CONN_DEV_NUM || p_cb->num_empty_filter == 0)) || (!to_add && p_cb->num_empty_filter == p_cb->max_filter_entries)) { BTM_TRACE_DEBUG1("num_empty_filter = %d", p_cb->num_empty_filter); return FALSE; } for (i = 0; i < BTM_BLE_MAX_BG_CONN_DEV_NUM && i < p_cb->max_filter_entries; i ++) { /* to add */ if (memcmp(p_cb->bg_conn_dev_list[i], dummy_bda, BD_ADDR_LEN) == 0 && to_add) { memcpy(p_cb->bg_conn_dev_list[i], bd_addr, BD_ADDR_LEN); p_cb->bg_conn_dev_num ++; return TRUE; } /* to remove */ if (!to_add && memcmp(p_cb->bg_conn_dev_list[i], bd_addr, BD_ADDR_LEN) == 0) { memset(p_cb->bg_conn_dev_list[i], 0, BD_ADDR_LEN); p_cb->bg_conn_dev_num --; return TRUE; } } return FALSE; }
/******************************************************************************* ** ** Function btm_update_bg_conn_list ** ** Description This function update the local background connection device list. *******************************************************************************/ BOOLEAN btm_update_bg_conn_list(BOOLEAN to_add, BD_ADDR bd_addr, UINT8 *p_attr_tag) { tBTM_BLE_CB *p_cb = &btm_cb.ble_ctr_cb; tBTM_LE_BG_CONN_DEV *p_bg_dev = &p_cb->bg_dev_list[0], *p_next, *p_cur; UINT8 i, j; BOOLEAN ret = FALSE; BTM_TRACE_EVENT0 ("btm_update_bg_conn_list"); if ((to_add && (p_cb->bg_dev_num == BTM_BLE_MAX_BG_CONN_DEV_NUM || p_cb->num_empty_filter == 0))) { BTM_TRACE_DEBUG1("num_empty_filter = %d", p_cb->num_empty_filter); return ret; } for (i = 0; i < BTM_BLE_MAX_BG_CONN_DEV_NUM; i ++, p_bg_dev ++) { if (p_bg_dev->in_use && memcmp(p_bg_dev->bd_addr, bd_addr, BD_ADDR_LEN) == 0) { if (!to_add) { memset(p_bg_dev, 0, sizeof(tBTM_LE_BG_CONN_DEV)); p_cb->bg_dev_num --; p_cur = p_bg_dev; p_next = p_bg_dev + 1; for (j = i + 1 ;j < BTM_BLE_MAX_BG_CONN_DEV_NUM && p_next->in_use ; j ++, p_cur ++, p_next ++ ) memcpy(p_cur, p_next, sizeof(tBTM_LE_BG_CONN_DEV)); } ret = TRUE; break; } else if (!p_bg_dev->in_use && to_add) { BTM_TRACE_DEBUG0("add new WL entry in bg_dev_list"); memcpy(p_bg_dev->bd_addr, bd_addr, BD_ADDR_LEN); p_bg_dev->in_use = TRUE; p_cb->bg_dev_num ++; ret = TRUE; break; } } return ret; }
BOOLEAN adpcm_voice_encode(tBTA_ATT_HSDATA *att_data) { //BTM_TRACE_DEBUG0("adpcm_voice_encode"); uint8_t buffer[MAX_FRAME_SIZE]; int size; int frame_size; UINT8 *p = NULL; FILE *fp; fp = fopen (RTK_STORAGE_PCM_FILE, "a+"); if (fp == NULL) { BTM_TRACE_WARNING0("open file failed\n"); return FALSE; } p = (UINT8*)(att_data->data+3); size = att_data->data_len - 3; /* we must receive 12 20-bytes packets followed by a 19-bytes packet */ switch (size) { case 20: adpcm_rec_cb.n_20bytes_pkts++; if (adpcm_rec_cb.n_20bytes_pkts > 12){ BTM_TRACE_DEBUG0("20bytes pkt is exceed 12"); adpcm_rec_cb.n_20bytes_pkts = 1; memcpy(adpcm_rec_cb.buffer + (adpcm_rec_cb.n_20bytes_pkts - 1) * 20,p, 20); } else { memcpy(adpcm_rec_cb.buffer + (adpcm_rec_cb.n_20bytes_pkts - 1) * 20,p, 20); } break; case 19: if (adpcm_rec_cb.n_20bytes_pkts != 12) { BTM_TRACE_DEBUG0("20bytes pkt!=12,discard the frame"); adpcm_rec_cb.n_20bytes_pkts = 0; } else { memcpy(adpcm_rec_cb.buffer + adpcm_rec_cb.n_20bytes_pkts * 20, p, 19); adpcm_rec_cb.n_20bytes_pkts = 0; frame_size = adpcm_decode(adpcm_rec_cb.adpcm_state, buffer, adpcm_rec_cb.buffer,ADPCM_ENCODED_FRAME_SIZE); BTM_TRACE_DEBUG1("frame size= %d",frame_size); if(frame_size == 1020) { fwrite(buffer, frame_size, 1, fp); if(adpcm_rec_cb.channel_status) { if(isEmpty()) { BTM_TRACE_DEBUG0("the buffer empty,send data to socket"); VOHOG_LOCK(); if(!UIPC_RTKBT_VR_Send_noblock(UIPC_CH_ID_RTKBT_VR_AUDIO, 0, buffer, frame_size)) { BTM_TRACE_WARNING0("send data fail, save data to buffer"); saveDATAtobuffer(buffer, frame_size); } VOHOG_UNLOCK(); } else { BTM_TRACE_DEBUG0("the buffer is not empty, save data to buffer"); saveDATAtobuffer(buffer, frame_size); } } else { if(!adpcm_rec_cb.channel_status) { BTM_TRACE_DEBUG0("socket is close"); } saveDATAtobuffer(buffer, frame_size); } }else { BTM_TRACE_DEBUG0("frame_size is error"); } } break; default: BTM_TRACE_DEBUG0("size is error"); } //BTM_TRACE_DEBUG1("20bytes pkt= %d",adpcm_rec_cb.n_20bytes_pkts); free(att_data); //fseek(fp,0,SEEK_END); //int lSize = ftell(fp); //BTM_TRACE_WARNING1("file length %d\n",lSize); fclose(fp); return TRUE; }