Loading system/bta/hearing_aid/hearing_aid.cc +16 −21 Original line number Original line Diff line number Diff line Loading @@ -1195,26 +1195,15 @@ class HearingAidImpl : public HearingAid { VLOG(2) << __func__ << ": " << address; VLOG(2) << __func__ << ": " << address; bool connected = hearingDevice->accepting_audio; bool connected = hearingDevice->accepting_audio; hearingDevice->accepting_audio = false; LOG(INFO) << "GAP_EVT_CONN_CLOSED: " << hearingDevice->address LOG(INFO) << "GAP_EVT_CONN_CLOSED: " << hearingDevice->address << ", playback_started=" << hearingDevice->playback_started; << ", playback_started=" << hearingDevice->playback_started; hearingDevice->playback_started = false; if (hearingDevice->connecting_actively) { if (hearingDevice->connecting_actively) { // cancel pending direct connect // cancel pending direct connect BTA_GATTC_CancelOpen(gatt_if, address, true); BTA_GATTC_CancelOpen(gatt_if, address, true); } } if (hearingDevice->conn_id) { BTA_GATTC_Close(hearingDevice->conn_id); } if (hearingDevice->gap_handle) { GAP_ConnClose(hearingDevice->gap_handle); hearingDevice->gap_handle = 0; } // cancel autoconnect // cancel autoconnect BTA_GATTC_CancelOpen(gatt_if, address, false); BTA_GATTC_CancelOpen(gatt_if, address, false); Loading Loading @@ -1253,10 +1242,18 @@ class HearingAidImpl : public HearingAid { hearingDevice->connection_update_status = NONE; hearingDevice->connection_update_status = NONE; } } if (hearingDevice->conn_id) { BtaGattQueue::Clean(hearingDevice->conn_id); BtaGattQueue::Clean(hearingDevice->conn_id); BTA_GATTC_Close(hearingDevice->conn_id); hearingDevice->conn_id = 0; } if (hearingDevice->gap_handle) { GAP_ConnClose(hearingDevice->gap_handle); hearingDevice->gap_handle = 0; } hearingDevice->accepting_audio = false; hearingDevice->accepting_audio = false; hearingDevice->conn_id = 0; LOG(INFO) << __func__ << ": device=" << hearingDevice->address LOG(INFO) << __func__ << ": device=" << hearingDevice->address << ", playback_started=" << hearingDevice->playback_started; << ", playback_started=" << hearingDevice->playback_started; hearingDevice->playback_started = false; hearingDevice->playback_started = false; Loading @@ -1278,14 +1275,10 @@ class HearingAidImpl : public HearingAid { void CleanUp() { void CleanUp() { BTA_GATTC_AppDeregister(gatt_if); BTA_GATTC_AppDeregister(gatt_if); for (HearingDevice& device : hearingDevices.devices) { for (HearingDevice& device : hearingDevices.devices) { if (!device.gap_handle) continue; DoDisconnectCleanUp(&device); GAP_ConnClose(device.gap_handle); device.gap_handle = 0; } } hearingDevices.devices.clear(); hearingDevices.devices.clear(); HearingAidAudioSource::Stop(); } } private: private: Loading Loading @@ -1390,7 +1383,7 @@ void HearingAid::Initialize( HearingAidAudioSource::Initialize(); HearingAidAudioSource::Initialize(); } } bool HearingAid::IsInitialized() { return instance; } bool HearingAid::IsHearingAidRunning() { return instance; } HearingAid* HearingAid::Get() { HearingAid* HearingAid::Get() { CHECK(instance); CHECK(instance); Loading Loading @@ -1426,11 +1419,13 @@ void HearingAid::CleanUp() { // Must stop audio source to make sure it doesn't call any of callbacks on our // Must stop audio source to make sure it doesn't call any of callbacks on our // soon to be null instance // soon to be null instance HearingAidAudioSource::Stop(); HearingAidAudioSource::Stop(); HearingAidAudioSource::CleanUp(); instance->CleanUp(); HearingAidImpl* ptr = instance; HearingAidImpl* ptr = instance; instance = nullptr; instance = nullptr; HearingAidAudioSource::CleanUp(); ptr->CleanUp(); delete ptr; delete ptr; }; }; Loading system/bta/hearing_aid/hearing_aid_audio_source.cc +5 −2 Original line number Original line Diff line number Diff line Loading @@ -306,8 +306,11 @@ void hearing_aid_ctrl_cb(tUIPC_CH_ID, tUIPC_EVENT event) { case UIPC_OPEN_EVT: case UIPC_OPEN_EVT: break; break; case UIPC_CLOSE_EVT: case UIPC_CLOSE_EVT: /* restart ctrl server unless we are shutting down */ if (HearingAid::IsHearingAidRunning()) { UIPC_Open(*uipc_hearing_aid, UIPC_CH_ID_AV_CTRL, hearing_aid_ctrl_cb, UIPC_Open(*uipc_hearing_aid, UIPC_CH_ID_AV_CTRL, hearing_aid_ctrl_cb, HEARING_AID_CTRL_PATH); HEARING_AID_CTRL_PATH); } break; break; case UIPC_RX_DATA_READY_EVT: case UIPC_RX_DATA_READY_EVT: hearing_aid_recv_ctrl_data(); hearing_aid_recv_ctrl_data(); Loading system/bta/include/bta_hearing_aid_api.h +1 −1 Original line number Original line Diff line number Diff line Loading @@ -41,7 +41,7 @@ class HearingAid { static void Initialize(bluetooth::hearing_aid::HearingAidCallbacks* callbacks, static void Initialize(bluetooth::hearing_aid::HearingAidCallbacks* callbacks, base::Closure initCb); base::Closure initCb); static void CleanUp(); static void CleanUp(); static bool IsInitialized(); static bool IsHearingAidRunning(); static HearingAid* Get(); static HearingAid* Get(); static void DebugDump(int fd); static void DebugDump(int fd); Loading system/btif/src/btif_hearing_aid.cc +1 −1 Original line number Original line Diff line number Diff line Loading @@ -106,7 +106,7 @@ class HearingAidInterfaceImpl DVLOG(2) << __func__ << " address: " << address; DVLOG(2) << __func__ << " address: " << address; // RemoveDevice can be called on devices that don't have HA enabled // RemoveDevice can be called on devices that don't have HA enabled if (HearingAid::IsInitialized()) { if (HearingAid::IsHearingAidRunning()) { do_in_main_thread(FROM_HERE, do_in_main_thread(FROM_HERE, Bind(&HearingAid::Disconnect, Bind(&HearingAid::Disconnect, Unretained(HearingAid::Get()), address)); Unretained(HearingAid::Get()), address)); Loading Loading
system/bta/hearing_aid/hearing_aid.cc +16 −21 Original line number Original line Diff line number Diff line Loading @@ -1195,26 +1195,15 @@ class HearingAidImpl : public HearingAid { VLOG(2) << __func__ << ": " << address; VLOG(2) << __func__ << ": " << address; bool connected = hearingDevice->accepting_audio; bool connected = hearingDevice->accepting_audio; hearingDevice->accepting_audio = false; LOG(INFO) << "GAP_EVT_CONN_CLOSED: " << hearingDevice->address LOG(INFO) << "GAP_EVT_CONN_CLOSED: " << hearingDevice->address << ", playback_started=" << hearingDevice->playback_started; << ", playback_started=" << hearingDevice->playback_started; hearingDevice->playback_started = false; if (hearingDevice->connecting_actively) { if (hearingDevice->connecting_actively) { // cancel pending direct connect // cancel pending direct connect BTA_GATTC_CancelOpen(gatt_if, address, true); BTA_GATTC_CancelOpen(gatt_if, address, true); } } if (hearingDevice->conn_id) { BTA_GATTC_Close(hearingDevice->conn_id); } if (hearingDevice->gap_handle) { GAP_ConnClose(hearingDevice->gap_handle); hearingDevice->gap_handle = 0; } // cancel autoconnect // cancel autoconnect BTA_GATTC_CancelOpen(gatt_if, address, false); BTA_GATTC_CancelOpen(gatt_if, address, false); Loading Loading @@ -1253,10 +1242,18 @@ class HearingAidImpl : public HearingAid { hearingDevice->connection_update_status = NONE; hearingDevice->connection_update_status = NONE; } } if (hearingDevice->conn_id) { BtaGattQueue::Clean(hearingDevice->conn_id); BtaGattQueue::Clean(hearingDevice->conn_id); BTA_GATTC_Close(hearingDevice->conn_id); hearingDevice->conn_id = 0; } if (hearingDevice->gap_handle) { GAP_ConnClose(hearingDevice->gap_handle); hearingDevice->gap_handle = 0; } hearingDevice->accepting_audio = false; hearingDevice->accepting_audio = false; hearingDevice->conn_id = 0; LOG(INFO) << __func__ << ": device=" << hearingDevice->address LOG(INFO) << __func__ << ": device=" << hearingDevice->address << ", playback_started=" << hearingDevice->playback_started; << ", playback_started=" << hearingDevice->playback_started; hearingDevice->playback_started = false; hearingDevice->playback_started = false; Loading @@ -1278,14 +1275,10 @@ class HearingAidImpl : public HearingAid { void CleanUp() { void CleanUp() { BTA_GATTC_AppDeregister(gatt_if); BTA_GATTC_AppDeregister(gatt_if); for (HearingDevice& device : hearingDevices.devices) { for (HearingDevice& device : hearingDevices.devices) { if (!device.gap_handle) continue; DoDisconnectCleanUp(&device); GAP_ConnClose(device.gap_handle); device.gap_handle = 0; } } hearingDevices.devices.clear(); hearingDevices.devices.clear(); HearingAidAudioSource::Stop(); } } private: private: Loading Loading @@ -1390,7 +1383,7 @@ void HearingAid::Initialize( HearingAidAudioSource::Initialize(); HearingAidAudioSource::Initialize(); } } bool HearingAid::IsInitialized() { return instance; } bool HearingAid::IsHearingAidRunning() { return instance; } HearingAid* HearingAid::Get() { HearingAid* HearingAid::Get() { CHECK(instance); CHECK(instance); Loading Loading @@ -1426,11 +1419,13 @@ void HearingAid::CleanUp() { // Must stop audio source to make sure it doesn't call any of callbacks on our // Must stop audio source to make sure it doesn't call any of callbacks on our // soon to be null instance // soon to be null instance HearingAidAudioSource::Stop(); HearingAidAudioSource::Stop(); HearingAidAudioSource::CleanUp(); instance->CleanUp(); HearingAidImpl* ptr = instance; HearingAidImpl* ptr = instance; instance = nullptr; instance = nullptr; HearingAidAudioSource::CleanUp(); ptr->CleanUp(); delete ptr; delete ptr; }; }; Loading
system/bta/hearing_aid/hearing_aid_audio_source.cc +5 −2 Original line number Original line Diff line number Diff line Loading @@ -306,8 +306,11 @@ void hearing_aid_ctrl_cb(tUIPC_CH_ID, tUIPC_EVENT event) { case UIPC_OPEN_EVT: case UIPC_OPEN_EVT: break; break; case UIPC_CLOSE_EVT: case UIPC_CLOSE_EVT: /* restart ctrl server unless we are shutting down */ if (HearingAid::IsHearingAidRunning()) { UIPC_Open(*uipc_hearing_aid, UIPC_CH_ID_AV_CTRL, hearing_aid_ctrl_cb, UIPC_Open(*uipc_hearing_aid, UIPC_CH_ID_AV_CTRL, hearing_aid_ctrl_cb, HEARING_AID_CTRL_PATH); HEARING_AID_CTRL_PATH); } break; break; case UIPC_RX_DATA_READY_EVT: case UIPC_RX_DATA_READY_EVT: hearing_aid_recv_ctrl_data(); hearing_aid_recv_ctrl_data(); Loading
system/bta/include/bta_hearing_aid_api.h +1 −1 Original line number Original line Diff line number Diff line Loading @@ -41,7 +41,7 @@ class HearingAid { static void Initialize(bluetooth::hearing_aid::HearingAidCallbacks* callbacks, static void Initialize(bluetooth::hearing_aid::HearingAidCallbacks* callbacks, base::Closure initCb); base::Closure initCb); static void CleanUp(); static void CleanUp(); static bool IsInitialized(); static bool IsHearingAidRunning(); static HearingAid* Get(); static HearingAid* Get(); static void DebugDump(int fd); static void DebugDump(int fd); Loading
system/btif/src/btif_hearing_aid.cc +1 −1 Original line number Original line Diff line number Diff line Loading @@ -106,7 +106,7 @@ class HearingAidInterfaceImpl DVLOG(2) << __func__ << " address: " << address; DVLOG(2) << __func__ << " address: " << address; // RemoveDevice can be called on devices that don't have HA enabled // RemoveDevice can be called on devices that don't have HA enabled if (HearingAid::IsInitialized()) { if (HearingAid::IsHearingAidRunning()) { do_in_main_thread(FROM_HERE, do_in_main_thread(FROM_HERE, Bind(&HearingAid::Disconnect, Bind(&HearingAid::Disconnect, Unretained(HearingAid::Get()), address)); Unretained(HearingAid::Get()), address)); Loading