Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fc9f3ae3 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "Hearing Aid: Add clear conn_id and close ctrl UIPC when BT turn off"

parents 8045f87f 28991645
Loading
Loading
Loading
Loading
+16 −21
Original line number Original line Diff line number Diff line
@@ -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);


@@ -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;
@@ -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:
@@ -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);
@@ -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;
};
};


+5 −2
Original line number Original line Diff line number Diff line
@@ -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();
+1 −1
Original line number Original line Diff line number Diff line
@@ -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);


+1 −1
Original line number Original line Diff line number Diff line
@@ -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));