} else {
//memccpy(buf)
//memset(buf, 0, 1024);
- printf("bk_iis_tx_cb:数据不够!!!!!!!!!!!");
- printf("bk_iis_tx_cb:wlen:%d,len:%d",wlen,len);
+ // printf("bk_iis_tx_cb:数据不够!!!!!!!!!!!");
+ // printf("bk_iis_tx_cb:wlen:%d,len:%d",wlen,len);
alink_set_shn(&iis->alink_parm.ch_cfg[iis->alink_tx_ch], 256);
}
}
-
+extern u8 esco_flag;//=1开启了通话,=0关闭了通话
void open_bt_audio(void)//打开蓝牙通话
{
+ BT_state=1;
+ printf("open_bt_audio");
__set_bt_esco_by_watch(1);
user_emitter_cmd_prepare(USER_CTRL_CONN_SCO,0,NULL);
user_emitter_cmd_prepare(USER_CTRL_HFP_CALL_LAST_NO,0,NULL);
gpio_direction_output(TCFG_AUDIO_DAC_PA_PORT, 0); //
+ int count =100;
+ while(count --)//等待打开完成
+ {
+
+ if(esco_flag == 1 )
+ break;
+ os_time_dly(1);
+ }
}
void close_bt_audio(void)
{
+ printf("close_bt_audio");
user_emitter_cmd_prepare(USER_CTRL_HFP_CALL_HANGUP,0,NULL);
+ int count =100;
+ while(count --)//等待打开完成
+ {
+
+ if(esco_flag == 0 )
+ break;
+ os_time_dly(1);
+ }
}
//extern void uart_demo();
int err = 0;
//return;
- printf("audio_link_demo_open");
+ printf("audio_link_demo_open:%d",bt_connect);
printf("audio_link_demo_open:!!!!!!!!!!!!!\r\n");
printf("audio_link_demo_open:!!!!!!!!!!!!!\r\n");
printf("audio_link_demo_open:!!!!!!!!!!!!!\r\n");
bk_iis_open();
- if(bt_connect){//蓝牙耳机
+
+ if(bt_connect == 2){//蓝牙耳机
if(local_audio_state == 1)//如果连了蓝牙,而且本地录音和音频已经打开,就关闭一次
{
+ printf("关闭本地通道!!!!!!!!!!");
close_local_audio();
local_audio_state = 0;
}
printf("打开蓝牙通道!!!!!!!!!");
printf("打开蓝牙通道!!!!!!!!!");
//sys_timeout_add(NULL,emitter_hfp_call_answer,2000);
- }else{
- BT_state = 0;
- }
+ }else{
+ BT_state = 0;
+
+ }
}else{
if(BT_state == 1)//如果打开了蓝牙耳机通道,关一次通话
local_audio_state = 0;
close_local_audio();
}
+
//close_local_audio();
//audio_adc_mic_close_demo();
}
#include "bk_app.h"
#include "bk_uart.h"
#include "BK_versions.h"
+#include "btstack/avctp_user.h"
int ut=0;
OS_SEM uart_callback;
char read_ack_flag= 0;
return -1;
}
printf("JSON数据: %s\n", json_string);
+ read_ack_flag = 0;
bk_uart_send_smg(BK_UART_WRITE_DATA,json_string,strlen(json_string));
// (ut, json_string, strlen(json_string), 20);
// 释放内存
cJSON_free(json_string);
cJSON_Delete(root);
+ int count = 50;
+ while(count--)
+ {
+ if(read_ack_flag == 1)
+ {
+ break;
+ }
+ os_time_dly(1);
+ }
return 0;
}
extern char userremote_name[32]; //当前连接或者断开的蓝牙名称
return;
}
printf("JSON数据1: %s\n", json_string);
+ read_ack_flag=0;
bk_uart_send_smg(BK_UART_WRITE_DATA,json_string,strlen(json_string));
//(ut, json_string, strlen(json_string), 20);
// 释放内存
printf("JSON数据2: %s\n", json_string);
// uart_send_blocking(ut, json_string, strlen(json_string), 20);
+ read_ack_flag=0;
bk_uart_send_smg(BK_UART_WRITE_DATA,json_string,strlen(json_string));
// 释放内存
cJSON_free(json_string);
cJSON_Delete(root);
}
+ int count = 50;
+ while(count--)
+ {
+ if(read_ack_flag == 1)
+ {
+ break;
+ }
+ os_time_dly(1);
+ }
}
int uart_send_bt_list(u8 *data)
{
}
}
+static u16 auto_call_timerout_id = 0;
extern u8 maddr[6];
-int uart_send_bt_state(u8 bt_state) //蓝牙向4G发送蓝牙耳机的状态
+void auto_switch_local_mic(void) //蓝牙耳机断开和进入通话后自动切换到本地麦克风输出音频播放
{
- if(bt_state == 0){ //断开蓝牙耳机连接
- bk_app_send_smg(AI_CLOSE,NULL,0);
- bk_app_send_smg(AI_OPEN,NULL,0);
- }
-
+ printf("auto_switch_local_mic!!!!!!!!");
+ bk_app_send_smg(BT_State_Change_CB,NULL,0);
+}
+#include "key_event_deal.h"
+int uart_send_bt_state(u8 bt_state) //蓝牙向4G发送蓝牙耳机的状态
+{
printf("uart_send_bt_state:%d %d\n",bt_state,is_need_send_bt_state);
if(!is_need_send_bt_state)
{
}
// 打印JSON字符串
printf("uart_send_bt_state JSON数据: %s\n", json_string);
+ read_ack_flag=0;
bk_uart_send_smg(BK_UART_WRITE_DATA, json_string,strlen(json_string));
// uart_send_blocking(ut, json_string, strlen(json_string), 20);
// 释放内存
cJSON_free(json_string);
cJSON_Delete(root);
+ int count = 50;
+ while(count--)
+ {
+ if(read_ack_flag == 1)
+ {
+ break;
+ }
+ os_time_dly(1);
+ }
return 0;
}
int uart_send_error(void)
void UART_event(void);
int uart_send_bt_state(u8 bt_state);
int uart_send_kws(void);
+void auto_switch_local_mic(void);
#endif
#endif
#include "bk_app.h"
#include "BK_versions.h"
+void BT_State_Change_cb(void);
//获取运行状态,返回0代表在休眠,返回1代表在运行
char get_ai_state(void)
{
break;
case AI_VC_1S_EVENT:
AI_VC_1S_event();
+ break;
+ case OPEN_CALL:
+ open_bt_audio();
+ break;
+ case CLOSE_BT_AUDIO_EVENT:
+ close_bt_audio();
+ break;
+ case BT_State_Change_CB:
+ BT_State_Change_cb();
+ break;
default:
break;
}
os_taskq_post_msg("bk_ALG_task", 3, event,(int)data_tmp, data_len);
}
+extern u8 esco_flag;
+void BT_State_Change_cb(void)
+{
+ os_time_dly(100);
+ if(esco_flag){
+ bk_app_send_smg(CLOSE_BT_AUDIO_EVENT,NULL,0);
+ }
+
+ bk_app_send_smg(AI_CLOSE,NULL,0);
+ bk_app_send_smg(AI_OPEN,NULL,0);
+}
//#include "rtc.h"
//void read_sys_time(struct sys_time *curr_time);
//char vad_data_t[320];
VAD_RUN,
UART_EVENT,
AI_VC_1S_EVENT,
+ CLOSE_BT_AUDIO_EVENT,
+ BT_State_Change_CB,//蓝牙连接状态切换
+ OPEN_CALL
}bk_app_msg_event;
typedef enum
if (scan_state){
return;
}
- user_emitter_cmd_prepare(USER_CTRL_DISCONNECTION_HCI, 0, NULL); //
+ if(bt_connect){
+ user_emitter_cmd_prepare(USER_CTRL_HFP_CALL_HANGUP,0,NULL);
+ user_emitter_cmd_prepare(USER_CTRL_DISCONNECTION_HCI, 0, NULL);
+ }
scan_state = 1;
bt_emitter_start_search_device(); //开始扫描
}
// }
if(conect){ //断开连接
if (bt_connect) { //搜索前断开已连接得蓝牙耳机
+ user_emitter_cmd_prepare(USER_CTRL_HFP_CALL_HANGUP,0,NULL);
user_emitter_cmd_prepare(USER_CTRL_DISCONNECTION_HCI, 0, NULL);
}
return;
if(bt_connect == 2) //已经连上了看看连接的地址是否一致
{
if (memcmp(bt_conn_addr, reversed_mac, 6) != 0){//如果连上了并且和小程序下发得mac地址是一致不需要重新连接
+ user_emitter_cmd_prepare(USER_CTRL_HFP_CALL_HANGUP,0,NULL);
user_emitter_cmd_prepare(USER_CTRL_DISCONNECTION_HCI, 0, NULL); //
emitter_bt_connect(reversed_mac);//连接地址
}
}
/*定频测试的时候tx的mac_addr设置成rx的地址 */
u8 fix_rx_mac_addr[6] = {0xC0, 0xFF, 0x68, 0x7D, 0x16, 0x00};
-
+u8 esco_flag = 0;
/*----------------------------------------------------------------------------*/
/**@brief 蓝牙模式协议栈对应状态处理函数
@param bt:事件
static int bt_connction_status_event_handler(struct bt_event *bt)
{
- log_debug("-----------------------bt_connction_status_event_handler %d", bt->event);
+ log_debug("-----------------------bt_connction_status_event_handler %d %x", bt->event,bt->value);
if (bt_status_event_filter(bt) == false) {
return false;
#endif
bt_status_phone_hangup(bt);
__set_bt_esco_by_watch(0);
+
#if TCFG_UI_ENABLE
if (UI_GET_WINDOW_ID() != ID_WINDOW_PHONE) {//判断手表在来电界面,退出界面
break;
watch_sco_dly_time_del();
}
bt_status_sco_change(bt);
+ if(bt->value != 0xff)
+ {
+ esco_flag = 1;
+ }else
+ {
+ esco_flag = 0;
+ }
break;
case BT_STATUS_CALL_VOL_CHANGE:
log_info(" BT_STATUS_CALL_VOL_CHANGE ");
{
bt_connect = BT_CONN_STATE_CONNECTED;
uart_send_bt_state(bt_connect);
- // connect_bt_cb(bt_connect);
+ auto_switch_local_mic();
sys_auto_sniff_controle(1, NULL);
sys_auto_shut_down_disable();
{
bt_connect = BT_CONN_STATE_INIT;
uart_send_bt_state(bt_connect);
-
+ auto_switch_local_mic();
sys_auto_sniff_controle(0, NULL);
__this->call_flag = 0;
/* log_info("BT_STATUS_DISCONNECT\n"); */