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

Commit 60732080 authored by Michael Sun's avatar Michael Sun
Browse files

floss: Disable ReadRSSI and ReadTxPower

Intel controllers don't handle ReadRSSI and ReadTxPower correctly but
instead sends back Hardware Error event which crashes Floss daemon.

Ideally Intel firmware should fix this but in the meantime we need to
avoid crash so this patch disables the HCI Read Failed Contact Counter
for Floss targets.

Bug: 258654152
Tag: #floss
Test: Build Floss on Chrome OS and Linux
Change-Id: I60dc89973d834add2034575d8215f3cf30e6a9fb
parent 126e0f38
Loading
Loading
Loading
Loading
+8 −8
Original line number Diff line number Diff line
@@ -1009,6 +1009,13 @@ static bool btif_a2dp_source_enqueue_callback(BT_HDR* p_buf, size_t frames_n,
                                 num_dropped_encoded_frames,
                                 num_dropped_encoded_bytes);

    // Intel controllers don't handle ReadRSSI, ReadFailedContactCounter, and
    // ReadTxPower very well, it sends back Hardware Error event which will
    // crash the daemon. So temporarily disable this for Floss.
    // TODO(b/249876976): Intel controllers to handle this command correctly.
    // And if the need for disabling metrics-related HCI call grows, consider
    // creating a framework to avoid ifdefs.
#ifndef TARGET_FLOSS
    // Request additional debug info if we had to flush buffers
    RawAddress peer_bda = btif_av_source_active_peer();
    tBTM_STATUS status = BTM_ReadRSSI(peer_bda, btm_read_rssi_cb);
@@ -1016,26 +1023,19 @@ static bool btif_a2dp_source_enqueue_callback(BT_HDR* p_buf, size_t frames_n,
      LOG_WARN("%s: Cannot read RSSI: status %d", __func__, status);
    }

    // Intel controllers don't handle ReadFailedContactCounter very well, it
    // sends back Hardware Error event which will crash the daemon. So
    // temporarily disable this for Floss.
    // TODO(b/249876976): Intel controllers to handle this command correctly.
    // And if the need for disabling metrics-related HCI call grows, consider
    // creating a framework to avoid ifdefs.
#ifndef TARGET_FLOSS
    status = BTM_ReadFailedContactCounter(peer_bda,
                                          btm_read_failed_contact_counter_cb);
    if (status != BTM_CMD_STARTED) {
      LOG_WARN("%s: Cannot read Failed Contact Counter: status %d", __func__,
               status);
    }
#endif

    status =
        BTM_ReadTxPower(peer_bda, BT_TRANSPORT_BR_EDR, btm_read_tx_power_cb);
    if (status != BTM_CMD_STARTED) {
      LOG_WARN("%s: Cannot read Tx Power: status %d", __func__, status);
    }
#endif
  }

  /* Update the statistics */