Loading system/btif/include/btif_common.h +4 −0 Original line number Diff line number Diff line Loading @@ -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 */ system/btif/src/bluetooth.cc +19 −0 Original line number Diff line number Diff line Loading @@ -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)); } system/btif/src/btif_bqr.cc +11 −0 Original line number Diff line number Diff line Loading @@ -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 { Loading Loading @@ -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, Loading system/include/hardware/bluetooth.h +7 −0 Original line number Diff line number Diff line Loading @@ -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 */ Loading Loading @@ -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); Loading system/service/hal/bluetooth_interface.cc +27 −1 Original line number Diff line number Diff line Loading @@ -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), Loading @@ -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), Loading Loading @@ -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 Loading
system/btif/include/btif_common.h +4 −0 Original line number Diff line number Diff line Loading @@ -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 */
system/btif/src/bluetooth.cc +19 −0 Original line number Diff line number Diff line Loading @@ -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)); }
system/btif/src/btif_bqr.cc +11 −0 Original line number Diff line number Diff line Loading @@ -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 { Loading Loading @@ -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, Loading
system/include/hardware/bluetooth.h +7 −0 Original line number Diff line number Diff line Loading @@ -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 */ Loading Loading @@ -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); Loading
system/service/hal/bluetooth_interface.cc +27 −1 Original line number Diff line number Diff line Loading @@ -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), Loading @@ -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), Loading Loading @@ -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