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

Commit ce06cd2f authored by Katherine Lai's avatar Katherine Lai Committed by Gerrit Code Review
Browse files

Merge "floss: Add possibility to auto-upgrade advertisement" into main

parents 4b86ebbf 8b4f86aa
Loading
Loading
Loading
Loading
+18 −0
Original line number Diff line number Diff line
@@ -348,6 +348,24 @@ impl AdvertiseData {
    pub fn validate_raw_data(is_legacy: bool, bytes: &Vec<u8>) -> bool {
        bytes.len() <= if is_legacy { LEGACY_ADV_DATA_LEN_MAX } else { EXT_ADV_DATA_LEN_MAX }
    }

    /// Checks if the advertisement can be upgraded to extended.
    pub fn can_upgrade(
        parameters: &mut AdvertisingSetParameters,
        adv_bytes: &Vec<u8>,
        is_le_extended_advertising_supported: bool,
    ) -> bool {
        if parameters.is_legacy
            && is_le_extended_advertising_supported
            && !AdvertiseData::validate_raw_data(true, adv_bytes)
        {
            log::info!("Auto upgrading advertisement to extended");
            parameters.is_legacy = false;
            return true;
        }

        false
    }
}

impl Into<bt_topshim::profiles::gatt::PeriodicAdvertisingParameters>
+13 −3
Original line number Diff line number Diff line
@@ -2115,7 +2115,7 @@ impl IBluetoothGatt for BluetoothGatt {

    fn start_advertising_set(
        &mut self,
        parameters: AdvertisingSetParameters,
        mut parameters: AdvertisingSetParameters,
        advertise_data: AdvertiseData,
        scan_response: Option<AdvertiseData>,
        periodic_parameters: Option<PeriodicAdvertisingParameters>,
@@ -2129,9 +2129,19 @@ impl IBluetoothGatt for BluetoothGatt {
        }

        let device_name = self.get_adapter_name();
        let is_legacy = parameters.is_legacy;
        let params = parameters.into();
        let adv_bytes = advertise_data.make_with(&device_name);
        let is_le_extended_advertising_supported = match &self.adapter {
            Some(adapter) => adapter.lock().unwrap().is_le_extended_advertising_supported(),
            _ => false,
        };
        // TODO(b/311417973): Remove this once we have more robust /device/bluetooth APIs to control extended advertising
        let is_legacy = parameters.is_legacy
            && !AdvertiseData::can_upgrade(
                &mut parameters,
                &adv_bytes,
                is_le_extended_advertising_supported,
            );
        let params = parameters.into();
        if !AdvertiseData::validate_raw_data(is_legacy, &adv_bytes) {
            log::warn!("Failed to start advertising set with invalid advertise data");
            return INVALID_REG_ID;