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

Commit d35a71eb authored by Chen Chen's avatar Chen Chen
Browse files

Send Bluetooth call quality report to telephony

Bug: 178232343
Test: manually test the function and check log
tag: #feature

Change-Id: I3ae1db6ab670bacb06380a532f39841f6fa07994
parent 771c552e
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -215,5 +215,9 @@ void invoke_thread_evt_cb(bt_cb_thread_evt event);
void invoke_le_test_mode_cb(bt_status_t status, uint16_t count);
void invoke_energy_info_cb(bt_activity_energy_info energy_info,
                           bt_uid_traffic_t* uid_data);
void invoke_link_quality_report_cb(
    uint64_t timestamp, int report_id, int rssi, int snr,
    int retransmission_count, int packets_not_receive_count,
    int negative_acknowledgement_count);

#endif /* BTIF_COMMON_H */
+19 −0
Original line number Diff line number Diff line
@@ -768,3 +768,22 @@ void invoke_energy_info_cb(bt_activity_energy_info energy_info,
          },
          energy_info, uid_data));
}

void invoke_link_quality_report_cb(
    uint64_t timestamp, int report_id, int rssi, int snr,
    int retransmission_count, int packets_not_receive_count,
    int negative_acknowledgement_count) {
  do_in_jni_thread(
      FROM_HERE,
      base::BindOnce(
          [](uint64_t timestamp, int report_id, int rssi, int snr,
             int retransmission_count, int packets_not_receive_count,
             int negative_acknowledgement_count) {
            HAL_CBACK(bt_hal_cbacks, link_quality_report_cb,
                      timestamp, report_id, rssi, snr, retransmission_count,
                      packets_not_receive_count,
                      negative_acknowledgement_count);
          },
          timestamp, report_id, rssi, snr, retransmission_count,
          packets_not_receive_count, negative_acknowledgement_count));
}
+11 −0
Original line number Diff line number Diff line
@@ -22,8 +22,10 @@
#include <sys/stat.h>

#include "btif_bqr.h"
#include "btif_common.h"
#include "btm_api.h"
#include "common/leaky_bonded_queue.h"
#include "common/time_util.h"
#include "osi/include/properties.h"

namespace bluetooth {
@@ -384,6 +386,15 @@ void AddLinkQualityEventToQueue(uint8_t length, uint8_t* p_link_quality_event) {
  p_bqr_event->ParseBqrLinkQualityEvt(length, p_link_quality_event);

  LOG(WARNING) << *p_bqr_event;
  invoke_link_quality_report_cb(
      bluetooth::common::time_get_os_boottime_ms(),
      p_bqr_event->bqr_link_quality_event_.quality_report_id,
      p_bqr_event->bqr_link_quality_event_.rssi,
      p_bqr_event->bqr_link_quality_event_.snr,
      p_bqr_event->bqr_link_quality_event_.retransmission_count,
      p_bqr_event->bqr_link_quality_event_.no_rx_count,
      p_bqr_event->bqr_link_quality_event_.nak_count);

  int ret = android::util::stats_write(
      android::util::BLUETOOTH_QUALITY_REPORT_REPORTED,
      p_bqr_event->bqr_link_quality_event_.quality_report_id,
+7 −0
Original line number Diff line number Diff line
@@ -425,6 +425,12 @@ typedef void (*acl_state_changed_callback)(bt_status_t status,
                                           RawAddress* remote_bd_addr,
                                           bt_acl_state_t state);

/** Bluetooth link quality report callback */
typedef void (*link_quality_report_callback)(
    uint64_t timestamp, int report_id, int rssi, int snr,
    int retransmission_count, int packets_not_receive_count,
    int negative_acknowledgement_count);

typedef enum { ASSOCIATE_JVM, DISASSOCIATE_JVM } bt_cb_thread_evt;

/** Thread Associate/Disassociate JVM Callback */
@@ -475,6 +481,7 @@ typedef struct {
  dut_mode_recv_callback dut_mode_recv_cb;
  le_test_mode_callback le_test_mode_cb;
  energy_info_callback energy_info_cb;
  link_quality_report_callback link_quality_report_cb;
} bt_callbacks_t;

typedef void (*alarm_cb)(void* data);
+27 −1
Original line number Diff line number Diff line
@@ -192,6 +192,23 @@ int ReleaseWakeLockCallout(const char* /* lock_name */) {
  return BT_STATUS_SUCCESS;
}

void LinkQualityReportCallback(uint64_t timestamp, int report_id, int rssi,
    int snr, int retransmission_count, int packets_not_receive_count,
    int negative_acknowledgement_count) {
  shared_lock<shared_mutex_impl> lock(g_instance_lock);
  VERIFY_INTERFACE_OR_RETURN();
  LOG(WARNING) << __func__ << " - timestamp: " << timestamp
               << " - report_id: " << report_id << " - rssi: " << rssi
               << " - snr: " << snr
               << " - retransmission_count: " << retransmission_count
               << " - packets_not_receive_count: " << packets_not_receive_count
               << " - negative_acknowledgement_count: "
               << negative_acknowledgement_count;
  FOR_EACH_BLUETOOTH_OBSERVER(LinkQualityReportCallback(
      timestamp, report_id, rssi, snr, retransmission_count,
      packets_not_receive_count, negative_acknowledgement_count));
}

// The HAL Bluetooth DM callbacks.
bt_callbacks_t bt_callbacks = {
    sizeof(bt_callbacks_t),
@@ -207,7 +224,8 @@ bt_callbacks_t bt_callbacks = {
    ThreadEventCallback,
    nullptr, /* dut_mode_recv_cb */
    nullptr, /* le_test_mode_cb */
    nullptr  /* energy_info_cb */
    nullptr, /* energy_info_cb */
    LinkQualityReportCallback
};

bt_os_callouts_t bt_os_callouts = {sizeof(bt_os_callouts_t),
@@ -350,6 +368,14 @@ void BluetoothInterface::Observer::AclStateChangedCallback(
  // Do nothing.
}

void BluetoothInterface::Observer::LinkQualityReportCallback(
    uint64_t /* timestamp */, int /* report_id */, int /* rssi */,
    int /* snr */, int /* retransmission_count */,
    int /* packets_not_receive_count */,
    int /* negative_acknowledgement_count */) {
  // Do nothing.
}

// static
bool BluetoothInterface::Initialize() {
  unique_lock<shared_mutex_impl> lock(g_instance_lock);
Loading