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

Commit 8724f10f authored by Jakub Pawlowski's avatar Jakub Pawlowski
Browse files

GD: LE Extended Advertisement parser fixes

Report parsing in shim was broken. We were unable to notice that with
Extended Advertisements disabled.

Test: enable Extended Advertisement Report and start scan
Tag: #gd-refactor
Bug: 139080884
Change-Id: I9b8832f2f7803ce1baca0fc125650ccbd9b3abe9
parent 80958822
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -4366,8 +4366,9 @@ struct LeExtendedAdvertisingReport {
  scannable : 1,
  directed : 1,
  scan_response : 1,
  legacy : 1,
  data_status : DataStatus,
  _reserved_ : 10,
  _reserved_ : 9,
  address_type : DirectAdvertisingAddressType,
  address : Address,
  primary_phy : PrimaryPhyType,
+14 −3
Original line number Diff line number Diff line
@@ -70,17 +70,28 @@ class DirectedLeReport : public LeReport {
class ExtendedLeReport : public DirectedLeReport {
 public:
  explicit ExtendedLeReport(const LeExtendedAdvertisingReport& advertisement)
      : DirectedLeReport(advertisement), connectable_(advertisement.connectable_), scannable_(advertisement.scannable_),
        directed_(advertisement.directed_), scan_response_(advertisement.scan_response_),
      : DirectedLeReport(advertisement),
        connectable_(advertisement.connectable_),
        scannable_(advertisement.scannable_),
        directed_(advertisement.directed_),
        scan_response_(advertisement.scan_response_),
        legacy_(advertisement.legacy_),
        complete_(advertisement.data_status_ == DataStatus::COMPLETE),
        truncated_(advertisement.data_status_ == DataStatus::TRUNCATED) {}
        truncated_(advertisement.data_status_ == DataStatus::TRUNCATED),
        primary_phy_(static_cast<uint8_t>(advertisement.primary_phy_)),
        secondary_phy_(static_cast<uint8_t>(advertisement.secondary_phy_)),
        tx_power_(advertisement.tx_power_) {}

  // Extended
  bool connectable_;
  bool scannable_;
  bool directed_;
  bool scan_response_;
  bool legacy_;
  bool complete_;
  bool truncated_;
  uint8_t primary_phy_;
  uint8_t secondary_phy_;
  int8_t tx_power_;
};
}  // namespace bluetooth::hci
 No newline at end of file
+5 −4
Original line number Diff line number Diff line
@@ -234,7 +234,7 @@ void Btm::ScanningCallbacks::on_advertisements(
             .scannable = extended_le_report->scannable_,
             .directed = extended_le_report->directed_,
             .scan_response = extended_le_report->scan_response_,
             .legacy = false,
             .legacy = extended_le_report->legacy_,
             .continuing = !extended_le_report->complete_,
             .truncated = extended_le_report->truncated_});
        RawAddress raw_address = ToRawAddress(le_report->address_);
@@ -242,9 +242,10 @@ void Btm::ScanningCallbacks::on_advertisements(
          btm_ble_process_adv_addr(raw_address, &address_type);
        }
        btm_ble_process_adv_pkt_cont(
            extended_event_type, address_type, raw_address, kPhyConnectionLe1M,
            kPhyConnectionNone, kAdvDataInfoNotPresent,
            kTxPowerInformationNotPresent, le_report->rssi_,
            extended_event_type, address_type, raw_address,
            extended_le_report->primary_phy_,
            extended_le_report->secondary_phy_, kAdvDataInfoNotPresent,
            extended_le_report->tx_power_, extended_le_report->rssi_,
            kNotPeriodicAdvertisement, report_len, report_data);
        store_le_address_type(raw_address, address_type);
      } break;