Loading system/gd/rust/linux/stack/src/bluetooth_adv.rs +35 −16 Original line number Diff line number Diff line Loading @@ -7,7 +7,6 @@ use itertools::Itertools; use log::warn; use num_traits::clamp; use std::collections::HashMap; use std::sync::atomic::{AtomicIsize, Ordering}; use tokio::sync::mpsc::Sender; use crate::callbacks::Callbacks; Loading Loading @@ -375,9 +374,6 @@ impl Into<bt_topshim::profiles::gatt::PeriodicAdvertisingParameters> } } /// Monotonically increasing counter for reg_id. static REG_ID_COUNTER: AtomicIsize = AtomicIsize::new(0); // Keeps information of an advertising set. #[derive(Debug, PartialEq, Copy, Clone)] pub(crate) struct AdvertisingSetInfo { Loading Loading @@ -418,11 +414,8 @@ impl AdvertisingSetInfo { adv_timeout: u16, adv_events: u8, legacy: bool, reg_id: RegId, ) -> Self { let mut reg_id = REG_ID_COUNTER.fetch_add(1, Ordering::SeqCst) as RegId; if reg_id == INVALID_REG_ID { reg_id = REG_ID_COUNTER.fetch_add(1, Ordering::SeqCst) as RegId; } AdvertisingSetInfo { adv_id: None, callback_id, Loading Loading @@ -519,6 +512,13 @@ impl Advertisers { } } // Returns the minimum unoccupied register ID from 0. pub(crate) fn new_reg_id(&mut self) -> RegId { (0..) .find(|id| !self.sets.contains_key(id)) .expect("There must be an unoccupied register ID") } /// Adds an advertising set. pub(crate) fn add(&mut self, s: AdvertisingSetInfo) { if let Some(old) = self.sets.insert(s.reg_id(), s) { Loading Loading @@ -667,7 +667,6 @@ impl Advertisers { #[cfg(test)] mod tests { use super::*; use std::collections::HashSet; use std::iter::FromIterator; #[test] Loading @@ -694,12 +693,31 @@ mod tests { } #[test] fn test_new_advising_set_info() { let mut uniq = HashSet::new(); for callback_id in 0..256 { let s = AdvertisingSetInfo::new(callback_id, 0, 0, false); assert_eq!(s.callback_id(), callback_id); assert_eq!(uniq.insert(s.reg_id()), true); fn test_add_remove_advising_set_info() { let (tx, _rx) = crate::Stack::create_channel(); let mut advertisers = Advertisers::new(tx.clone()); for i in 0..35 { let reg_id = i * 2 as RegId; let s = AdvertisingSetInfo::new(0 as CallbackId, 0, 0, false, reg_id); advertisers.add(s); } for i in 0..35 { let expected_reg_id = i * 2 + 1 as RegId; let reg_id = advertisers.new_reg_id(); assert_eq!(reg_id, expected_reg_id); let s = AdvertisingSetInfo::new(0 as CallbackId, 0, 0, false, reg_id); advertisers.add(s); } for i in 0..35 { let reg_id = i * 2 as RegId; assert!(advertisers.remove_by_reg_id(reg_id).is_some()); } for i in 0..35 { let expected_reg_id = i * 2 as RegId; let reg_id = advertisers.new_reg_id(); assert_eq!(reg_id, expected_reg_id); let s = AdvertisingSetInfo::new(0 as CallbackId, 0, 0, false, reg_id); advertisers.add(s); } } Loading @@ -712,7 +730,8 @@ mod tests { for i in 0..size { let callback_id: CallbackId = i as CallbackId; let adv_id: AdvertiserId = i as AdvertiserId; let mut s = AdvertisingSetInfo::new(callback_id, 0, 0, false); let reg_id = advertisers.new_reg_id(); let mut s = AdvertisingSetInfo::new(callback_id, 0, 0, false, reg_id); s.set_adv_id(Some(adv_id)); advertisers.add(s); } Loading system/gd/rust/linux/stack/src/bluetooth_gatt.rs +2 −2 Original line number Diff line number Diff line Loading @@ -2042,8 +2042,8 @@ impl IBluetoothGatt for BluetoothGatt { let adv_timeout = clamp(duration, 0, 0xffff) as u16; let adv_events = clamp(max_ext_adv_events, 0, 0xff) as u8; let s = AdvertisingSetInfo::new(callback_id, adv_timeout, adv_events, is_legacy); let reg_id = s.reg_id(); let reg_id = self.advertisers.new_reg_id(); let s = AdvertisingSetInfo::new(callback_id, adv_timeout, adv_events, is_legacy, reg_id); self.advertisers.add(s); self.gatt.as_ref().unwrap().lock().unwrap().advertiser.start_advertising_set( Loading Loading
system/gd/rust/linux/stack/src/bluetooth_adv.rs +35 −16 Original line number Diff line number Diff line Loading @@ -7,7 +7,6 @@ use itertools::Itertools; use log::warn; use num_traits::clamp; use std::collections::HashMap; use std::sync::atomic::{AtomicIsize, Ordering}; use tokio::sync::mpsc::Sender; use crate::callbacks::Callbacks; Loading Loading @@ -375,9 +374,6 @@ impl Into<bt_topshim::profiles::gatt::PeriodicAdvertisingParameters> } } /// Monotonically increasing counter for reg_id. static REG_ID_COUNTER: AtomicIsize = AtomicIsize::new(0); // Keeps information of an advertising set. #[derive(Debug, PartialEq, Copy, Clone)] pub(crate) struct AdvertisingSetInfo { Loading Loading @@ -418,11 +414,8 @@ impl AdvertisingSetInfo { adv_timeout: u16, adv_events: u8, legacy: bool, reg_id: RegId, ) -> Self { let mut reg_id = REG_ID_COUNTER.fetch_add(1, Ordering::SeqCst) as RegId; if reg_id == INVALID_REG_ID { reg_id = REG_ID_COUNTER.fetch_add(1, Ordering::SeqCst) as RegId; } AdvertisingSetInfo { adv_id: None, callback_id, Loading Loading @@ -519,6 +512,13 @@ impl Advertisers { } } // Returns the minimum unoccupied register ID from 0. pub(crate) fn new_reg_id(&mut self) -> RegId { (0..) .find(|id| !self.sets.contains_key(id)) .expect("There must be an unoccupied register ID") } /// Adds an advertising set. pub(crate) fn add(&mut self, s: AdvertisingSetInfo) { if let Some(old) = self.sets.insert(s.reg_id(), s) { Loading Loading @@ -667,7 +667,6 @@ impl Advertisers { #[cfg(test)] mod tests { use super::*; use std::collections::HashSet; use std::iter::FromIterator; #[test] Loading @@ -694,12 +693,31 @@ mod tests { } #[test] fn test_new_advising_set_info() { let mut uniq = HashSet::new(); for callback_id in 0..256 { let s = AdvertisingSetInfo::new(callback_id, 0, 0, false); assert_eq!(s.callback_id(), callback_id); assert_eq!(uniq.insert(s.reg_id()), true); fn test_add_remove_advising_set_info() { let (tx, _rx) = crate::Stack::create_channel(); let mut advertisers = Advertisers::new(tx.clone()); for i in 0..35 { let reg_id = i * 2 as RegId; let s = AdvertisingSetInfo::new(0 as CallbackId, 0, 0, false, reg_id); advertisers.add(s); } for i in 0..35 { let expected_reg_id = i * 2 + 1 as RegId; let reg_id = advertisers.new_reg_id(); assert_eq!(reg_id, expected_reg_id); let s = AdvertisingSetInfo::new(0 as CallbackId, 0, 0, false, reg_id); advertisers.add(s); } for i in 0..35 { let reg_id = i * 2 as RegId; assert!(advertisers.remove_by_reg_id(reg_id).is_some()); } for i in 0..35 { let expected_reg_id = i * 2 as RegId; let reg_id = advertisers.new_reg_id(); assert_eq!(reg_id, expected_reg_id); let s = AdvertisingSetInfo::new(0 as CallbackId, 0, 0, false, reg_id); advertisers.add(s); } } Loading @@ -712,7 +730,8 @@ mod tests { for i in 0..size { let callback_id: CallbackId = i as CallbackId; let adv_id: AdvertiserId = i as AdvertiserId; let mut s = AdvertisingSetInfo::new(callback_id, 0, 0, false); let reg_id = advertisers.new_reg_id(); let mut s = AdvertisingSetInfo::new(callback_id, 0, 0, false, reg_id); s.set_adv_id(Some(adv_id)); advertisers.add(s); } Loading
system/gd/rust/linux/stack/src/bluetooth_gatt.rs +2 −2 Original line number Diff line number Diff line Loading @@ -2042,8 +2042,8 @@ impl IBluetoothGatt for BluetoothGatt { let adv_timeout = clamp(duration, 0, 0xffff) as u16; let adv_events = clamp(max_ext_adv_events, 0, 0xff) as u8; let s = AdvertisingSetInfo::new(callback_id, adv_timeout, adv_events, is_legacy); let reg_id = s.reg_id(); let reg_id = self.advertisers.new_reg_id(); let s = AdvertisingSetInfo::new(callback_id, adv_timeout, adv_events, is_legacy, reg_id); self.advertisers.add(s); self.gatt.as_ref().unwrap().lock().unwrap().advertiser.start_advertising_set( Loading