}\r
void BluetoothModel::BtGapAclStateChangedHandle(gap_acl_state_t state, unsigned int reason, const bd_addr_t &bdAddr)\r
{\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BtGapAclStateChangedHandle reason is %x", reason);\r
bool tag = BluetoothModel::GetInstance()->IsTagScanDeviceClicked();\r
if ((reason == 0x13) || (reason == 0x14) || (reason == 0x15) || (reason == 0x3D) || (reason == 0x08 && (!tag))) { // 连接断开\r
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "蓝牙设备主动断开连接 reason is %x", reason);\r
AddConnedDevicesCase(*info);\r
}\r
}\r
+ else\r
+ {\r
+ ACLConnectionFail(bdAddr);\r
+ }\r
\r
if ((state == GAP_ACL_STATE_CONNECTED) || (state == GAP_ACL_STATE_LE_CONNECTED)) {\r
if (BluetoothModel::GetInstance()->ConnectRemoteCheck(&bdAddr)) {\r
// 回调:ACL连接状态上报\r
void GapAclStateChangedCallback(const bd_addr_t *bdAddr, gap_acl_state_t state, unsigned int reason)\r
{\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "bt GapAclStateChangedCallback state %d, reason %x succ or err", state, reason);\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "addr: %02x%02x%02x%02x%02x%02x",\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bt GapAclStateChangedCallback state %d, reason %x succ or err", state, reason);\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "addr: %02x%02x%02x%02x%02x%02x",\r
bdAddr->addr[5], bdAddr->addr[4], bdAddr->addr[3], /* mac下标 0 1 2 3 4 5 */\r
bdAddr->addr[2], bdAddr->addr[1], bdAddr->addr[0]); /* mac下标 0 1 2 3 4 5 */\r
static bd_addr_t gapAclConnectAddr{0}; /* 连接后保存手机地址,手表清除手机配对后查询不到class比较手机地址 */\r
WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "avrcp_ct_connect ret = 0x%x", ret);\r
PhoneAudioManagerSetDeviceConnState(OUT_BLUETOOTH_A2DP, AUDIO_DEVICE_CONNECTED);\r
GraphicService::GetInstance()->PostGraphicEvent(std::bind(ACLConnectionSuss, *bdAddr));\r
+ int earphoneConnectStatus = 1;\r
+ SendMsgToUIService(HAND_BLUETOOTH_EARPHONE_CONNECT_STATUS_NOTIFY, 0, &earphoneConnectStatus, sizeof(earphoneConnectStatus));\r
}\r
\r
if (connState == PROFILE_STATE_DISCONNECTED) {\r
PhoneAudioManagerSetDeviceConnState(OUT_BLUETOOTH_A2DP, AUDIO_DEVICE_DISCONNECTED);\r
GraphicService::GetInstance()->PostGraphicEvent(std::bind(ACLConnectionFail, *bdAddr));\r
+ int earphoneConnectStatus = 0;\r
+ SendMsgToUIService(HAND_BLUETOOTH_EARPHONE_CONNECT_STATUS_NOTIFY, 0, &earphoneConnectStatus, sizeof(earphoneConnectStatus));\r
/* 实验室测试耳机回连场景,用户根据需要调整策略 */\r
bool ret = gap_br_set_bt_scan_mode(GAP_SCAN_MODE_CONNECTABLE_GENERAL_DISCOVERABLE, 60); // start scan\r
if (!ret) {\r
{
if (BluetoothModel::GetInstance()->GetCase().size() == 0)
{
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "扫描结果为空");
- if (BluetoothModel::GetInstance()->GetScanStatus() == true) // 如果是扫描状态
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "扫描结果为空,%d", BluetoothModel::GetInstance()->GetScanStatus());
+ BluetoothModel::GetInstance()->SetScanStatus(false);
+ ThunderBirdMainView *thunderBirdMainView = ThunderBirdMainView::GetInstance();
+ if (thunderBirdMainView == nullptr)
{
- BluetoothModel::GetInstance()->SetScanStatus(false);
- ThunderBirdMainView *thunderBirdMainView = ThunderBirdMainView::GetInstance();
- if (thunderBirdMainView == nullptr)
- {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "thunderBirdMainView nullptr");
- return;
- }
- int currentView = thunderBirdMainView->GetCurrentView();
- thunderBirdMainView->ChangeView(
- currentView,
- THUNDERBIRD_BLUEVIEW,
- ThunderBirdBlueView::THUNDERBIRD_BULEVIEW_SREACHING_FAILED);
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "thunderBirdMainView nullptr");
+ return;
}
+ int currentView = thunderBirdMainView->GetCurrentView();
+ thunderBirdMainView->ChangeView(
+ currentView,
+ THUNDERBIRD_BLUEVIEW,
+ ThunderBirdBlueView::THUNDERBIRD_BULEVIEW_SREACHING_FAILED);
}
// 扫描结束后关闭屏幕常亮
ScreenAlwaysOnCtr(CANCEL_SCREEN_ALWAYS_ON);
HAND_DIALOGUE_RESPONSE_FINISHED_NOTIFY, // 对话响应finished通知
HAND_VAD_INITIALIZED_NOTIFY, // VAD初始化完成通知
HAND_BLUETOOTH_CONNECT_NOTIFY, // 蓝牙耳机连接通知
+ HAND_BLUETOOTH_EARPHONE_CONNECT_STATUS_NOTIFY, // 蓝牙耳机连接状态通知
MAX_NUM_HANDLER,
} UiServiceMsgId;
// 处理蓝牙耳机连接通知
void HandleBluetoothConnect(const char *bluetoothAddress);
+ // 处理蓝牙耳机断开通知
+ void HandleBluetoothEarphoneConnectStatus(int connectStatus);
// 处理对话响应消息的finished标志
void HandleDialogueResponseFinished(bool finished);
WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "LastDevice addr: %02x%02x%02x%02x%02x%02x is connected",
lastAddr->addr[5], lastAddr->addr[4], lastAddr->addr[3],
lastAddr->addr[2], lastAddr->addr[1], lastAddr->addr[0]);
+ if(lastAddr->addr[5] == selectedDevice->addr[5] &&
+ lastAddr->addr[4] == selectedDevice->addr[4] &&
+ lastAddr->addr[3] == selectedDevice->addr[3] &&
+ lastAddr->addr[2] == selectedDevice->addr[2] &&
+ lastAddr->addr[1] == selectedDevice->addr[1] &&
+ lastAddr->addr[0] == selectedDevice->addr[0])
+ {
+ //如果地址相同,且地址相同不断开连接
+ WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "Same device selected, not disconnect");
+ return;
+ }
BluetoothModel::GetInstance()->DisconnectRemoteDevice();
BluetoothModel::GetInstance()->SetTagConnectNew(true);
}
ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_BLUEVIEW, ThunderBirdBlueView::THUNDERBIRD_BULEVIEW_ENTER);
}
}
+
+ //更新耳机图标
+ void ThunderBirdModel::HandleBluetoothEarphoneConnectStatus(int connectStatus)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleBluetoothEarphoneConnectStatus: 收到蓝牙耳机连接状态通知,connectStatus=%d", connectStatus);
+ if(ThunderBirdMainView::GetInstance()){
+ int currentView = ThunderBirdMainView::GetInstance()->GetCurrentView(); //获取当前视图
+ // ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_BLUEVIEW, ThunderBirdBlueView::THUNDERBIRD_BULEVIEW_EXIT);
+ }
+ }
void ThunderBirdModel::HandleBindAndUnbind(int is_bind)
{
ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_STATUS_SHOW);
break;
case ThunderBirdBlueView::THUNDERBIRD_BULEVIEW_DEVICE_LIST:
- ThunderBirdBlueView::GetInstance()->OnKeyUp();// 音量+键:选择上一个设备
+ // ThunderBirdBlueView::GetInstance()->OnKeyUp();// 音量+键:选择上一个设备
+ //重新搜索设备
+ ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_BLUEVIEW, ThunderBirdBlueView::THUNDERBIRD_BULEVIEW_SREACHING);
break;
case ThunderBirdBlueView::THUNDERBIRD_BULEVIEW_CONNECT_FAILED:
//重新发送连接操作
static void HandDialogueResponseFinishedNotify(Request *request);
static void HandVadInitializedNotify(Request *request);
static void HandBluetoothConnectNotify(Request *request);
+static void HandBluetoothEarphoneConnectStatusNotify(Request *request);
// 消息处理程序项数组(每个消息类型对应一个处理函数,函数名以 Handle 开头)
MsgHandlerEntry msgHandlers[] = {
{HAND_DIALOGUE_RESPONSE_FINISHED_NOTIFY,HandDialogueResponseFinishedNotify},
{HAND_VAD_INITIALIZED_NOTIFY,HandVadInitializedNotify},
{HAND_BLUETOOTH_CONNECT_NOTIFY,HandBluetoothConnectNotify},
+ {HAND_BLUETOOTH_EARPHONE_CONNECT_STATUS_NOTIFY,HandBluetoothEarphoneConnectStatusNotify},
};
/* -------------------------------------------------------------------------- */
void ScreenTurnOn(int32_t timeout)
OHOS::ThunderBirdModel::GetInstance(), "AA:BB:CC:DD:EE:FF"));//要连接的蓝牙设备MAC地址,保留字段,暂时无用
}
+// 通知蓝牙耳机连接状态变化
+void HandBluetoothEarphoneConnectStatusNotify(Request *request)
+{
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_UI_SERVICE, "HandBluetoothEarphoneConnectStatusNotify msg_id = %d", request->msgId);
+ if (request->data && request->len == sizeof(int)) {
+ int connectStatus = *(static_cast<int*>(request->data));
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_UI_SERVICE, "HandBluetoothEarphoneConnectStatusNotify connectStatus = %d", connectStatus);
+ GraphicService::GetInstance()->PostGraphicEvent(
+ std::bind(&OHOS::ThunderBirdModel::HandleBluetoothEarphoneConnectStatus,
+ OHOS::ThunderBirdModel::GetInstance(), connectStatus));
+ }
+}
/* -------------------------------------------------------------------------- */
#ifdef __cplusplus
}