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

Commit 38921f3f authored by Qasim Javed's avatar Qasim Javed
Browse files

rusty-gd: Add missing GAP data types and fix EIR length

Devices with EIR containing Gap data type 0x10 were not showing up in
the pairing list.

Tested using Pixel Buds. They now show up in the pairing dialog. When
tapped, pairing still fails.

Bug: 171749953
Tag: #gd-refactor
Test: gd/cert/run --rhost DirectHciTest

Change-Id: I00c90b6ca4ab0bb5eca97202f7652f35260197c4
parent 7eaa1219
Loading
Loading
Loading
Loading
+32 −0
Original line number Original line Diff line number Diff line
@@ -22,10 +22,38 @@ enum GapDataType : 8 {
  COMPLETE_LOCAL_NAME = 0x09,
  COMPLETE_LOCAL_NAME = 0x09,
  TX_POWER_LEVEL = 0x0A,
  TX_POWER_LEVEL = 0x0A,
  CLASS_OF_DEVICE = 0x0D,
  CLASS_OF_DEVICE = 0x0D,
  SIMPLE_PAIRING_HASH_C = 0x0E,
  SIMPLE_PAIRING_RANDOMIZER_R = 0x0F,
  DEVICE_ID = 0x10,
  SECURITY_MANAGER_OOB_FLAGS = 0x11,
  SLAVE_CONNECTION_INTERVAL_RANGE = 0x12,
  LIST_16BIT_SERVICE_SOLICITATION_UUIDS = 0x14,
  LIST_128BIT_SERVICE_SOLICITATION_UUIDS = 0x15,
  SERVICE_DATA_16_BIT_UUIDS = 0x16,
  SERVICE_DATA_16_BIT_UUIDS = 0x16,
  PUBLIC_TARGET_ADDRESS = 0x17,
  RANDOM_TARGET_ADDRESS = 0x18,
  APPEARANCE = 0x19,
  APPEARANCE = 0x19,
  ADVERTISING_INTERVAL = 0x1A,
  LE_BLUETOOTH_DEVICE_ADDRESS = 0x1B,
  LE_ROLE = 0x1C,
  SIMPLE_PAIRING_HASH_C_256 = 0x1D,
  SIMPLE_PAIRING_RANDOMIZER_R_256 = 0x1E,
  LIST_32BIT_SERVICE_SOLICITATION_UUIDS = 0x1F,
  SERVICE_DATA_32_BIT_UUIDS = 0x20,
  SERVICE_DATA_32_BIT_UUIDS = 0x20,
  SERVICE_DATA_128_BIT_UUIDS = 0x21,
  SERVICE_DATA_128_BIT_UUIDS = 0x21,
  LE_SECURE_CONNECTIONS_CONFIRMATION_VALUE = 0x22,
  LE_SECURE_CONNECTIONS_RANDOM_VALUE = 0x23,
  URI = 0x24,
  INDOOR_POSITIONING = 0x25,
  TRANSPORT_DISCOVERY_DATA = 0x26,
  LE_SUPPORTED_FEATURES = 0x27,
  CHANNEL_MAP_UPDATE_INDICATION = 0x28,
  MESH_PB_ADV = 0x29,
  MESH_MESSAGE = 0x2A,
  MESH_BEACON = 0x2B,
  BIG_INFO = 0x2C,
  BROADCAST_CODE = 0x2D,
  THREE_D_INFORMATION_DATA = 0x3D,
  MANUFACTURER_SPECIFIC_DATA = 0xFF,
  MANUFACTURER_SPECIFIC_DATA = 0xFF,
}
}


@@ -4817,6 +4845,10 @@ packet ExtendedInquiryResult : Event (event_code = EXTENDED_INQUIRY_RESULT) {
  _reserved_ : 1,
  _reserved_ : 1,
  rssi : 8,
  rssi : 8,
  extended_inquiry_response : GapData[],
  extended_inquiry_response : GapData[],
  // Extended inquiry Result is always 255 bytes long
  // padded with zeroes as necessary
  // Refer to BLUETOOTH CORE SPECIFICATION Version 5.2 | Vol 3, Part C Section 8 on page 1340
  _padding_[255],
}
}


packet EncryptionKeyRefreshComplete : Event (event_code = ENCRYPTION_KEY_REFRESH_COMPLETE){
packet EncryptionKeyRefreshComplete : Event (event_code = ENCRYPTION_KEY_REFRESH_COMPLETE){
+3 −0
Original line number Original line Diff line number Diff line
@@ -133,6 +133,9 @@ bool PacketField::GenRustNameAndType(std::ostream& s) const {


void PacketField::GenBoundsCheck(std::ostream& s, Size start_offset, Size, std::string context) const {
void PacketField::GenBoundsCheck(std::ostream& s, Size start_offset, Size, std::string context) const {
  Size size = GetSize();
  Size size = GetSize();
  if (size.bits() < 8) {
    return;
  }
  s << "if bytes.len() < " << start_offset.bytes() + size.bytes() << " {";
  s << "if bytes.len() < " << start_offset.bytes() + size.bytes() << " {";
  s << " return Err(Error::InvalidLengthError{";
  s << " return Err(Error::InvalidLengthError{";
  s << "    obj: \"" << context << "\".to_string(),";
  s << "    obj: \"" << context << "\".to_string(),";