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

Commit 28004d7c authored by Henri Chataing's avatar Henri Chataing Committed by Gerrit Code Review
Browse files

Merge "gd/hci/controller: Rewrite dumpsys using std::format" into main

parents abcd2c15 461aa062
Loading
Loading
Loading
Loading
+0 −4
Original line number Diff line number Diff line
@@ -640,7 +640,6 @@ genrule {
    srcs: [
        "dumpsys_data.fbs",
        "hci/hci_acl_manager.fbs",
        "hci/hci_controller.fbs",
        "module_unittest.fbs",
        "os/wakelock_manager.fbs",
        "shim/dumpsys.fbs",
@@ -649,7 +648,6 @@ genrule {
        "dumpsys.bfbs",
        "dumpsys_data.bfbs",
        "hci_acl_manager.bfbs",
        "hci_controller.bfbs",
        "wakelock_manager.bfbs",
    ],
}
@@ -663,7 +661,6 @@ genrule {
    srcs: [
        "dumpsys_data.fbs",
        "hci/hci_acl_manager.fbs",
        "hci/hci_controller.fbs",
        "module_unittest.fbs",
        "os/wakelock_manager.fbs",
        "shim/dumpsys.fbs",
@@ -672,7 +669,6 @@ genrule {
        "dumpsys_data_generated.h",
        "dumpsys_generated.h",
        "hci_acl_manager_generated.h",
        "hci_controller_generated.h",
        "wakelock_manager_generated.h",
    ],
}
+0 −2
Original line number Diff line number Diff line
@@ -82,7 +82,6 @@ flatbuffer("BluetoothGeneratedDumpsysDataSchema_h") {
  sources = [
    "dumpsys_data.fbs",
    "hci/hci_acl_manager.fbs",
    "hci/hci_controller.fbs",
    "os/wakelock_manager.fbs",
    "shim/dumpsys.fbs",
  ]
@@ -92,7 +91,6 @@ bt_flatc_binary_schema("BluetoothGeneratedDumpsysBinarySchema_bfbs") {
  sources = [
    "dumpsys_data.fbs",
    "hci/hci_acl_manager.fbs",
    "hci/hci_controller.fbs",
    "os/wakelock_manager.fbs",
    "shim/dumpsys.fbs",
  ]
+0 −2
Original line number Diff line number Diff line
@@ -10,7 +10,6 @@


include "hci/hci_acl_manager.fbs";
include "hci/hci_controller.fbs";
include "module_unittest.fbs";
include "os/wakelock_manager.fbs";
include "shim/dumpsys.fbs";
@@ -24,7 +23,6 @@ table DumpsysData {
    wakelock_manager_data:bluetooth.os.WakelockManagerData (privacy:"Any");
    shim_dumpsys_data:bluetooth.shim.DumpsysModuleData (privacy:"Any");
    hci_acl_manager_dumpsys_data:bluetooth.hci.AclManagerData (privacy:"Any");
    hci_controller_dumpsys_data:bluetooth.hci.ControllerData (privacy:"Any");
    module_unittest_data:bluetooth.ModuleUnitTestData; // private
}

+105 −85
Original line number Diff line number Diff line
@@ -29,7 +29,6 @@
#include "hci/controller_interface.h"
#include "hci/event_checkers.h"
#include "hci/hci_layer.h"
#include "hci_controller_generated.h"
#include "os/metrics.h"
#include "os/system_properties.h"
#include "stack/include/hcidefs.h"
@@ -868,9 +867,6 @@ struct Controller::impl {
    return supported;                                                             \
  }

  void Dump(std::promise<flatbuffers::Offset<ControllerData>> promise,
            flatbuffers::FlatBufferBuilder* fb_builder) const;

  bool is_supported(OpCode op_code) {
    switch (op_code) {
      OP_CODE_MAPPING(INQUIRY)
@@ -1236,6 +1232,9 @@ struct Controller::impl {
  }
#undef OP_CODE_MAPPING

  template <typename OutputT>
  void dump(OutputT&& out) const;

  Controller& module_;

  HciLayer* hci_;
@@ -1559,44 +1558,102 @@ void Controller::Stop() { impl_->Stop(); }

std::string Controller::ToString() const { return "Controller"; }

void Controller::impl::Dump(std::promise<flatbuffers::Offset<ControllerData>> promise,
                            flatbuffers::FlatBufferBuilder* fb_builder) const {
  ASSERT(fb_builder != nullptr);
  auto title = fb_builder->CreateString("----- Hci Controller Dumpsys -----");

  auto local_version_information_data = CreateLocalVersionInformationData(
          *fb_builder,
          fb_builder->CreateString(HciVersionText(local_version_information_.hci_version_)),
template <typename OutputT>
void Controller::impl::dump(OutputT&& out) const {
  fmt::format_to(out, "\nHCI Controller Dumpsys:\n");

  fmt::format_to(out,
                 "    local_version_information:\n"
                 "        hci_version: {}\n"
                 "        hci_revision: 0x{:x}\n"
                 "        lmp_version: {}\n"
                 "        lmp_subversion: 0x{:x}\n"
                 "        manufacturer_name: {}\n",
                 HciVersionText(local_version_information_.hci_version_),
                 local_version_information_.hci_revision_,
          fb_builder->CreateString(LmpVersionText(local_version_information_.lmp_version_)),
          local_version_information_.manufacturer_name_,
          local_version_information_.lmp_subversion_);

  auto acl_buffer_size_data = BufferSizeData(acl_buffer_length_, acl_buffers_);

  auto sco_buffer_size_data = BufferSizeData(sco_buffer_length_, sco_buffers_);

  auto le_buffer_size_data = BufferSizeData(le_buffer_size_.le_data_packet_length_,
                                            le_buffer_size_.total_num_le_packets_);

  auto iso_buffer_size_data = BufferSizeData(iso_buffer_size_.le_data_packet_length_,
                                             iso_buffer_size_.total_num_le_packets_);

  auto le_maximum_data_length_data =
          LeMaximumDataLengthData(le_maximum_data_length_.supported_max_tx_octets_,
                 LmpVersionText(local_version_information_.lmp_version_),
                 local_version_information_.lmp_subversion_,
                 local_version_information_.manufacturer_name_);

  fmt::format_to(out,
                 "    buffer_size:\n"
                 "        acl_data_packet_length: {}\n"
                 "        total_num_acl_data_packets: {}\n"
                 "        sco_data_packet_length: {}\n"
                 "        total_num_sco_data_packets: {}\n",
                 acl_buffer_length_, acl_buffers_, sco_buffer_length_, sco_buffers_);

  fmt::format_to(out,
                 "    le_buffer_size:\n"
                 "        le_acl_data_packet_length: {}\n"
                 "        total_num_le_acl_data_packets: {}\n"
                 "        iso_data_packet_length: {}\n"
                 "        total_num_iso_data_packets: {}\n",
                 le_buffer_size_.le_data_packet_length_, le_buffer_size_.total_num_le_packets_,
                 iso_buffer_size_.le_data_packet_length_, iso_buffer_size_.total_num_le_packets_);

  fmt::format_to(out,
                 "    le_maximum_data_length:\n"
                 "        supported_max_tx_octets: {}\n"
                 "        supported_max_tx_time: {}\n"
                 "        supported_max_rx_octets: {}\n"
                 "        supported_max_rx_time: {}\n",
                 le_maximum_data_length_.supported_max_tx_octets_,
                 le_maximum_data_length_.supported_max_tx_time_,
                 le_maximum_data_length_.supported_max_rx_octets_,
                 le_maximum_data_length_.supported_max_rx_time_);

  std::vector<LocalSupportedCommandsData> local_supported_commands_vector;
  for (uint8_t index = 0; index < local_supported_commands_.size(); index++) {
    local_supported_commands_vector.push_back(
            LocalSupportedCommandsData(index, local_supported_commands_[index]));
  }
  auto local_supported_commands_data =
          fb_builder->CreateVectorOfStructs(local_supported_commands_vector);

  auto vendor_capabilities_data = VendorCapabilitiesData(
  fmt::format_to(out,
                 "    le_accept_list_size: {}\n"
                 "    le_resolving_list_size: {}\n"
                 "    le_maximum_advertising_data_length: {}\n"
                 "    le_suggested_default_data_length: {}\n"
                 "    le_number_supported_advertising_sets: {}\n"
                 "    le_periodic_advertiser_list_size: {}\n"
                 "    le_supported_states: 0x{:016x}\n",
                 le_accept_list_size_, le_resolving_list_size_, le_maximum_advertising_data_length_,
                 le_suggested_default_data_length_, le_number_supported_advertising_sets_,
                 le_periodic_advertiser_list_size_, le_supported_states_);

  fmt::format_to(out,
                 "    local_supported_features:\n"
                 "        page0: 0x{:016x}\n"
                 "        page1: 0x{:016x}\n"
                 "        page2: 0x{:016x}\n"
                 "    le_local_supported_features:\n"
                 "        page0: 0x{:016x}\n",
                 extended_lmp_features_array_[0], extended_lmp_features_array_[1],
                 extended_lmp_features_array_[2], le_local_supported_features_);

  fmt::format_to(out, "    local_supported_commands: [");
  for (size_t i = 0; i < local_supported_commands_.size(); i++) {
    if ((i % 8) == 0) {
      fmt::format_to(out, "\n       ");
    }
    fmt::format_to(out, " 0x{:02x},", local_supported_commands_[i]);
  }
  fmt::format_to(out, "\n    ]\n");

  fmt::format_to(
          out,
          "    vendor_capabilities:\n"
          "        is_supported: {}\n"
          "        max_adv_instances: {}\n"
          "        offloaded_resolution_of_private_addresses: {}\n"
          "        total_scan_result_storage: {}\n"
          "        max_irk_list_size: {}\n"
          "        filtering_support: {}\n"
          "        max_filter: {}\n"
          "        activity_energy_info_support: {}\n"
          "        version_supported: {}\n"
          "        total_num_of_advt_tracked: {}\n"
          "        extended_scan_support: {}\n"
          "        debug_logging_supported: {}\n"
          "        le_address_generation_offloading_support: {}\n"
          "        a2dp_source_offload_capability_mask: {}\n"
          "        bluetooth_quality_report_support: {}\n"
          "        dynamic_audio_buffer_support: {}\n"
          "        a2dp_offload_v2_support: {}\n",
          vendor_capabilities_.is_supported_, vendor_capabilities_.max_advt_instances_,
          vendor_capabilities_.offloaded_resolution_of_private_address_,
          vendor_capabilities_.total_scan_results_storage_, vendor_capabilities_.max_irk_list_sz_,
@@ -1607,52 +1664,15 @@ void Controller::impl::Dump(std::promise<flatbuffers::Offset<ControllerData>> pr
          vendor_capabilities_.debug_logging_supported_,
          vendor_capabilities_.le_address_generation_offloading_support_,
          vendor_capabilities_.a2dp_source_offload_capability_mask_,
          vendor_capabilities_.bluetooth_quality_report_support_);

  auto extended_lmp_features_vector = fb_builder->CreateVector(extended_lmp_features_array_);

  // Create the root table
  ControllerDataBuilder builder(*fb_builder);

  builder.add_title(title);
  builder.add_local_version_information(local_version_information_data);

  builder.add_acl_buffer_size(&acl_buffer_size_data);
  builder.add_sco_buffer_size(&sco_buffer_size_data);
  builder.add_iso_buffer_size(&iso_buffer_size_data);
  builder.add_le_buffer_size(&le_buffer_size_data);

  builder.add_le_accept_list_size(le_accept_list_size_);
  builder.add_le_resolving_list_size(le_resolving_list_size_);

  builder.add_le_maximum_data_length(&le_maximum_data_length_data);
  builder.add_le_maximum_advertising_data_length(le_maximum_advertising_data_length_);
  builder.add_le_suggested_default_data_length(le_suggested_default_data_length_);
  builder.add_le_number_supported_advertising_sets(le_number_supported_advertising_sets_);
  builder.add_le_periodic_advertiser_list_size(le_periodic_advertiser_list_size_);

  builder.add_local_supported_commands(local_supported_commands_data);
  builder.add_extended_lmp_features_array(extended_lmp_features_vector);
  builder.add_le_local_supported_features(le_local_supported_features_);
  builder.add_le_supported_states(le_supported_states_);
  builder.add_vendor_capabilities(&vendor_capabilities_data);

  flatbuffers::Offset<ControllerData> dumpsys_data = builder.Finish();
  promise.set_value(dumpsys_data);
          vendor_capabilities_.bluetooth_quality_report_support_,
          vendor_capabilities_.dynamic_audio_buffer_support_,
          vendor_capabilities_.a2dp_offload_v2_support_);
}

DumpsysDataFinisher Controller::GetDumpsysData(flatbuffers::FlatBufferBuilder* fb_builder) const {
  ASSERT(fb_builder != nullptr);

  std::promise<flatbuffers::Offset<ControllerData>> promise;
  auto future = promise.get_future();
  impl_->Dump(std::move(promise), fb_builder);

  auto dumpsys_data = future.get();

  return [dumpsys_data](DumpsysDataBuilder* dumpsys_builder) {
    dumpsys_builder->add_hci_controller_dumpsys_data(dumpsys_data);
  };
void Controller::Dump(int fd) const {
  std::string out;
  impl_->dump(std::back_inserter(out));
  dprintf(fd, "%s", out.c_str());
}

}  // namespace hci
+2 −3
Original line number Diff line number Diff line
@@ -36,6 +36,8 @@ public:
  Controller(const Controller&) = delete;
  Controller& operator=(const Controller&) = delete;

  void Dump(int fd) const override;

  virtual ~Controller();

  virtual void RegisterCompletedAclPacketsCallback(CompletedAclPacketsCallback cb) override;
@@ -224,9 +226,6 @@ protected:

  std::string ToString() const override;

  DumpsysDataFinisher GetDumpsysData(
          flatbuffers::FlatBufferBuilder* builder) const override;  // Module

private:
  virtual uint64_t GetLocalFeatures(uint8_t page_number) const;
  virtual uint64_t GetLocalLeFeatures() const;
Loading