static i = 0;
int rlen ;
// putchar('s');
- char *tmpbuf = zalloc(len);
- if(tmpbuf)
+ char *single_buf = zalloc(len*2);
+ if(single_buf)
{
- //printf("bk_iis_rx_cb:,len:%d",len);
- //pcm_LR_to_mono((s16*)buf, (s16 *)tmpbuf, len/4);
- // wlen = app_audio_output_write(alink_demo_hdl->tmpbuf,cbuf_len/2);
-
- pcm_dual_to_single(tmpbuf, buf,len*2);
- //rlen = dac_write_pcm((char *)tmpbuf,len/2);
- audio_link_demo_RX_data((char *)tmpbuf,len/2);
-
- free(tmpbuf);
+ // char *dual_buf = zalloc(len*2);
+ // if(dual_buf)
+ {
+ //memcpy(dual_buf,buf,len*2);
+ //pcm_LR_to_mono(dual_buf,single_buf,len/2);
+ //printf("bk_iis_rx_cb1:%x %d",buf,len);
+ //pcm_LR_to_mono((s16*)buf, (s16 *)single_buf, len/4);
+ // wlen = app_audio_output_write(alink_demo_hdl->single_buf,cbuf_len/2);
+
+ pcm_dual_to_single(single_buf, buf,len);
+ //printf("bk_iis_rx_cb2");
+ //rlen = dac_write_pcm((char *)single_buf,len/2);
+ audio_link_demo_RX_data((char *)single_buf,len/2);
+ //free(dual_buf);
+ }
+ free(single_buf);
}else
{
log_info("%s: alloc ERROR!!!!!!",__FUNCTION__);
}
void *c_data = cbuf_write_alloc(dac_cbuffer, &wlen);
if (wlen < len ) {
+ printf("CBUF NO ENOUGH MEMORY!1");
ASSERT(0, "CBUF NO ENOUGH MEMORY!!!");
+ printf("CBUF NO ENOUGH MEMORY!2");
}
//log_info("%s2:len!!!!!!",__FUNCTION__,len);
//pcm_single_to_dual(data, data, len);
#include "bk_uart.h"
#include "BK_versions.h"
#include "btstack/avctp_user.h"
+#define UART_RECV_MAX_COUNT 512 //可更改串口发送数据最大长度
int ut=0;
static u8 uart_send_flag = 0;
static u8 uart_recv_flag = 0;
if(uart_timer_id == 0)//有数据启动定时器
uart_timer_id = sys_timer_add(NULL, uart_timer_cb, 10);
uart_timer_count = 0;
- if(uart_data_len+512>uart_read_buf_len)
+ if(uart_data_len+UART_RECV_MAX_COUNT>uart_read_buf_len)
{
uart_data_len = 0;
}
- int r = uart_recv_blocking(ut, uart_dma_buf, 512, 10);
+ int r = uart_recv_blocking(ut, uart_dma_buf, UART_RECV_MAX_COUNT, 10);
if (r > 0) {
memcpy(uart_data+uart_data_len,(u8 *)uart_dma_buf,r);
//log_info("分段数据!***len:%d uart_data_len:%d*****", r,uart_data_len);
.parity = UART_PARITY_DISABLE,
};
if(uart_dma_buf == NULL)
- uart_dma_buf = dma_malloc(512);
- memset(uart_dma_buf,0,512);
+ uart_dma_buf = dma_malloc(UART_RECV_MAX_COUNT);
+ memset(uart_dma_buf,0,UART_RECV_MAX_COUNT);
if(uart_data == NULL)
{
uart_data = zalloc(uart_read_buf_len);
struct uart_dma_config dma = {
.rx_timeout_thresh = 500,
- .frame_size = 512,
+ .frame_size = UART_RECV_MAX_COUNT,
.event_mask = UART_EVENT_RX_DATA|UART_EVENT_RX_TIMEOUT,
.tx_wait_mutex = 0,
.irq_priority = 6,
}
// 打印JSON字符串
- bk_uart_send_smg(BK_UART_WRITE_DATA,json_string,strlen(json_string));
+ bk_uart_send_smg(BK_UART_WRITE_DATA_ACK,json_string,strlen(json_string));
//bk_uart_send_smg(BK_UART_WRITE_DATA,json_string,strlen(json_string));(ut, json_string, strlen(json_string), 20);
// 释放内存
cJSON_free(json_string);
}
// 打印JSON字符串
- bk_uart_send_smg(BK_UART_WRITE_DATA,json_string,strlen(json_string));
+ bk_uart_send_smg(BK_UART_WRITE_DATA_ACK,json_string,strlen(json_string));
//bk_uart_send_smg(BK_UART_WRITE_DATA,json_string,strlen(json_string));(ut, json_string, strlen(json_string), 20);
// 释放内存
cJSON_free(json_string);
}
printf("JSON数据: %s\n", json_string);
- bk_uart_send_smg(BK_UART_WRITE_DATA,json_string,strlen(json_string));
+ bk_uart_send_smg(BK_UART_WRITE_DATA_ACK,json_string,strlen(json_string));
// (ut, json_string, strlen(json_string), 20);
// 释放内存
cJSON_free(json_string);
u16 len_tmp = 0;
u16 data_flag = 1;
u16 date_len = strlen(data);
- if (date_len >= 512){
+ if (date_len >= UART_RECV_MAX_COUNT){
while (data_flag)
{
//531
- if (date_len >= 512){
+ if (date_len >= UART_RECV_MAX_COUNT){
printf("uart_send_bt_list 1");
- bk_uart_send_smg(BK_UART_WRITE_DATA, data+len_tmp,512);
- // uart_send_blocking(ut, data+len_tmp, 512, 200);
- len_tmp+=512;
+ bk_uart_send_smg(BK_UART_WRITE_DATA, data+len_tmp,UART_RECV_MAX_COUNT);
+ // uart_send_blocking(ut, data+len_tmp, UART_RECV_MAX_COUNT, 200);
+ len_tmp+=UART_RECV_MAX_COUNT;
}else{
if(date_len >= 0){
printf("uart_send_bt_list 2");
break; //最后一包
}
//532
- date_len=date_len-512;
+ date_len=date_len-UART_RECV_MAX_COUNT;
if(date_len <= 0){
data_flag = 0;
break;
}
printf("JSON数据: %s\n", json_string);
- bk_uart_send_smg(BK_UART_WRITE_DATA,json_string,strlen(json_string));
+ bk_uart_send_smg(BK_UART_WRITE_DATA_ACK,json_string,strlen(json_string));
// (ut, json_string, strlen(json_string), 20);
// 释放内存
cJSON_free(json_string);
//清楚蓝牙耳机连接记录
extern u8 *get_cur_connect_emitter_mac_addr(void);
extern void delete_link_key(bd_addr_t *bd_addr, u8 id);
-void clear_earphone_record(void){
- if(bt_connect){
- user_emitter_cmd_prepare(USER_CTRL_DISCONNECTION_HCI, 0, NULL);
+u8 delete_key_flag = 0;
+void send_clear_earphone_key_msg(void)
+{
+ printf("send_clear_earphone_key_ms:%s %d",__func__,delete_key_flag);
+ if(delete_key_flag){
+ bk_app_send_smg(DELETE_BT_KEY,NULL,0);
}
- delete_last_device_from_vm();
- u8 delete_mac[6]={0};
- uart_send_clear_earphoneok();
- printf("删除连接密钥!!!!!!!");
- if(memcmp(bt_conn_addr,"\0\0\0\0\0\0",6) != 0){
- printf("删除连接密钥:%02X:%02X:%02X:%02X:%02X:%02X",bt_conn_addr[5],bt_conn_addr[4],bt_conn_addr[3],bt_conn_addr[2],bt_conn_addr[1],bt_conn_addr[0]);
- for (u8 i = 0; i < 6; i++)
- {
- delete_mac[i]=bt_conn_addr[5-i];
- }
- printf("连接密钥:%02X:%02X:%02X:%02X:%02X:%02X",delete_mac[5],delete_mac[4],delete_mac[3],delete_mac[2],delete_mac[1],delete_mac[0]);
- // delete_link_key((bd_addr_t *)delete_mac,1);
-
+}
+extern void connect_target_mac();//先断开再去连接目标设备
+extern u8 delete_target_mac[6]; //需要删除的目标mac地址key
+u8 ai_delete_key = 0; //通过AI对话删除连接设备key
+u8 reconnect_dev = 0;
+void clear_earphone_key(void) //清除设备key不再回连旧的设备
+{
+ printf("delete_key_flag:%s %d %02X:%02X:%02X:%02X:%02X:%02X",__func__,delete_key_flag,delete_target_mac[0],delete_target_mac[1],\
+ delete_target_mac[2],delete_target_mac[3],delete_target_mac[4],delete_target_mac[5]);
+ if(delete_key_flag){
+ delete_key_flag=0;
+ printf("delete_last_device_from_vm start");
+ reconnect_dev=1;
+ // user_send_cmd_prepare(USER_CTRL_DEL_ALL_REMOTE_INFO, 0, NULL);
+ delete_last_device_from_vm();
+ printf("delete_last_device_from_vm end");
+ }
+ if(!ai_delete_key)
+ {
+ connect_target_mac();
+ }
+ ai_delete_key=0;
+ delete_key_flag=0;
+}
+//通过AI对话删除bt的key标识
+void clear_earphone_record(void){
+ printf("bt_connect:%s %d",__func__,bt_connect);
+ ai_delete_key=0;
+ delete_key_flag=0;
+ if(bt_connect==2){
+ ai_delete_key=1;
+ delete_key_flag=1;
+ user_emitter_cmd_prepare(USER_CTRL_DISCONNECTION_HCI, 0, NULL); //蓝牙耳机连接先断开再删除
+ uart_send_clear_earphoneok();
+ return;
+ }else{
+ ai_delete_key=1;
+ delete_key_flag=1;
+ send_clear_earphone_key_msg();
+ uart_send_clear_earphoneok();
+ return;
}
}
int uart_send_clear_earphoneok(void)
void print_hex(char *data ,int len);
int uart_send_BT_AI_key_even(void);
void bk_uart_recv_smg(bk_uart_msg_event event,char *data,int data_len);
+void clear_earphone_key(void);
+void send_clear_earphone_key_msg(void);
#endif
break;
case RECV_CONNECT_BT:
connect_bt(data,0);//开始连接蓝牙耳机设备
- break;
+ break;
+ case DELETE_BT_KEY:
+ clear_earphone_key();
+ break;
default:
break;
}
BT_SCAN_SWITCH,
BT_GET_IMEI,
RECV_DISCONNECT_BT,
- RECV_CONNECT_BT
+ RECV_CONNECT_BT,
+ DELETE_BT_KEY,
}bk_app_msg_event;
{
return;
}
- scan_state=0;
printf("scan_state:%d",scan_state);
+ scan_state=0;
// if(!scan_state){
// return;
// }
extern u8 bt_connect;
extern u8 bt_conn_addr[6];//蓝牙连接成功的地址
u8 maddr[6]={0}; // 目标数组
+u8 delete_target_mac[6]={0};//需要删除目标的耳机配对信息key
extern u8 is_need_send_bt_state;
+extern u8 delete_key_flag; //删除耳机bt的key标识 1需要删除 0不需要删除
+u8 reversed_mac[6]; // 反序数组
+extern u8 ai_delete_key; //ai对话删除目标bt的key标识
+void connect_target_mac(void) //连接目标耳机mac地址
+{
+ printf("connect_target_mac!!!!!!!");
+ emitter_bt_connect(reversed_mac);//连接地址
+}
void connect_bt(char *json_data,u8 conect){
if(is_bredr_close() == 1) //经典蓝牙关闭能去连蓝牙耳机
{
return;
}
- u8 reversed_mac[6]; // 反序数组
+
memset(reversed_mac,0,6);
memset(maddr,0,6);
printf("mac->valuestring %s\r\n",data->valuestring);
printf("bt_connect:%d bt_conn_addr %x %x %x %x %x %x\r\n",bt_connect,bt_conn_addr[0],bt_conn_addr[1],bt_conn_addr[2],bt_conn_addr[3],bt_conn_addr[4],bt_conn_addr[5]);
printf("maddr %x %x %x %x %x %x\r\n",maddr[0],maddr[1],maddr[2],maddr[3],maddr[4],maddr[5]);
is_need_send_bt_state=1;
- if(bt_connect == 2) //已经连上了看看连接的地址是否一致
+ if(bt_connect==2) //已经连上了看看连接的地址是否一致
{
if (memcmp(bt_conn_addr, reversed_mac, 6) != 0){//如果连上了并且和小程序下发得mac地址是一致不需要重新连接
if(get_call_status() != BT_CALL_HANGUP){ //如果是主动挂断的不需要再重复挂断
user_emitter_cmd_prepare(USER_CTRL_HFP_CALL_HANGUP,0,NULL);
}
+ printf("蓝牙连上指令对话删除耳机记录1!!!!!!!!");
+ delete_key_flag=1;
+ ai_delete_key=0;
user_emitter_cmd_prepare(USER_CTRL_DISCONNECTION_HCI, 0, NULL); //
- emitter_bt_connect(reversed_mac);//连接地址
- }
- else{
-
+ return;
+ }else{
uart_send_bt_state(bt_connect);
is_need_send_bt_state=0;
}
}else{
- emitter_bt_connect(reversed_mac);//连接地址
+ printf("指令对话删除耳机记录5 bt_conn_addr!!!!!!!!!");
+ delete_key_flag=1;
+ ai_delete_key=0;
+ send_clear_earphone_key_msg();
+ return;
}
}
}
extern void emitter_delete_remote_all(void);
extern void clear_dev_list(void);
extern void emitter_bt_connect(u8 *mac);
+extern u8 *emitter_get_last_vm_device(void);
#endif
//协议栈接收到命令是否自动退出sniff
const int config_btstask_auto_exit_sniff = 1;
-
+u8 ble_list_verison_update_dispose = 1;
#if SMART_BOX_EN
#define RCSP_API_LOG 0
#define RCSP_PACKET_LOG 1
break;
case BT_STATUS_RECONN_OR_CONN:
log_info(" BT_STATUS_RECONN_OR_CONN \n");
+ printf("bt->value %d",bt->value);
+ put_buf(bt->args,7);
#if USER_SUPPORT_PROFILE_PBAP_LIST
user_send_cmd_prepare(USER_CTRL_PBAP_CONNECT, 0, NULL);
#endif
extern u8 bt_connect;
extern char userremote_name[32]; //当前连接或者断开的蓝牙名称
extern u8 bt_conn_addr[6];//蓝牙连接成功的地址
+extern u8 reconnect_dev;
/*----------------------------------------------------------------------------*/
/**@brief 蓝牙模式协议栈事件
@param bt:事件
bt_hci_event_page_timeout(bt);
break;
case ERROR_CODE_CONNECTION_TIMEOUT:
- log_info(" ERROR_CODE_CONNECTION_TIMEOUT \n");
- bt_hci_event_connection_timeout(bt);
+ printf("ERROR_CODE_CONNECTION_TIMEOUT %d\n",reconnect_dev);
+ if(!reconnect_dev){//bt.args如果跟4G下发的要连接的蓝牙的mac一致,就执行重连,不一致,就断开
+ put_buf(bt->args,7);
+ printf("ERROR_CODE_CONNECTION_TIMEOUT!!!!!!!!!!!!!\n");
+ bt_hci_event_connection_timeout(bt);
+ }
+ else{
+ bt_hci_event_disconnect(bt);
+ }
break;
case ERROR_CODE_ACL_CONNECTION_ALREADY_EXISTS :
log_info("ERROR_CODE_ACL_CONNECTION_ALREADY_EXISTS \n");
if (bt_user_priv_var.emitter_or_receiver != BT_EMITTER_EN) {
return ;
}
- bt_connect=BT_CONN_STATE_CONNECTING;
+ // bt_connect=BT_CONN_STATE_CONNECTING;
#if 0
while (hci_standard_connect_check() == 0x80) {
//wait profile connect ok;
//reset index
index_flag = 0;
} else if (flag == 2) {
+ return NULL;
//查询是否要开始继续回连尝试pin code。
if (index_flag >= pincode_num) {
//之前已经遍历完了
log_debug_hexdump(remote_addr[i], 6);
}
}
-
+u8 *emitter_get_last_vm_device(void)
+{
+ u8 *last_dev_mac=malloc(6);
+ if(last_dev_mac==NULL)
+ {
+ return NULL;
+ }
+ memset(last_dev_mac, 0, 6);
+ memset(remote_addr, 0, sizeof(remote_addr));
+ u8 flag = restore_remote_device_info_opt(&remote_addr, 1, get_remote_dev_info_index());
+ for (u8 i = 0; i < 1; i++) {
+ printf("emitter_get_last_vm_device ----- \n");
+ // log_debug_hexdump(remote_addr[i], 6);
+ memcpy(last_dev_mac,remote_addr[i],6);
+ log_debug_hexdump(last_dev_mac, 6);
+ }
+ return last_dev_mac;
+}
/*----------------------------------------------------------------------------*/
/**@brief 蓝牙 开关ag_a2dp
@param
/*----------------------------------------------------------------------------*/
/**@brief 蓝牙 开关ag_hfp
+ *
@param
@return
@note
*/
/*----------------------------------------------------------------------------*/
static u8 mac_addr[6]={0};
+extern u8 reconnect_dev;
void bt_status_connect(struct bt_event *bt)
{
+ reconnect_dev=0;
bt_connect = BT_CONN_STATE_CONNECTED;
uart_send_bt_state(bt_connect);
auto_switch_local_mic();
uart_send_bt_state(bt_connect);
auto_switch_local_mic();
sys_auto_sniff_controle(0, NULL);
+ send_clear_earphone_key_msg();
__this->call_flag = 0;
/* log_info("BT_STATUS_DISCONNECT\n"); */
#if (SMART_BOX_EN)
hw_alink_parm->ch_cfg[ch_idx].private_data = priv;
hw_alink_parm->ch_cfg[ch_idx].buf = zalloc(hw_alink_parm->dma_len);
- /* printf(">>> alink_channel_init %x\n", hw_alink_parm->ch_cfg[ch_idx].buf); */
+ printf(">>> alink_channel_init buf:%x len:%d\n", hw_alink_parm->ch_cfg[ch_idx].buf,hw_alink_parm->dma_len);
u32 *buf_addr;
//===================================//