diff options
Diffstat (limited to 'components/bluetooth/lib.rs')
-rw-r--r-- | components/bluetooth/lib.rs | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/components/bluetooth/lib.rs b/components/bluetooth/lib.rs index a22e2ba6c91..a5f5f5837d7 100644 --- a/components/bluetooth/lib.rs +++ b/components/bluetooth/lib.rs @@ -256,6 +256,9 @@ impl BluetoothManager { BluetoothRequest::GetAvailability(sender) => { let _ = sender.send(self.get_availability()); }, + BluetoothRequest::MatchesFilter(id, filters, sender) => { + let _ = sender.send(self.device_matches_filter(&id, &filters)); + }, BluetoothRequest::Exit => { break }, @@ -425,6 +428,17 @@ impl BluetoothManager { self.cached_devices.contains_key(device_id) && self.address_to_id.values().any(|v| v == device_id) } + fn device_matches_filter(&mut self, + device_id: &str, + filters: &BluetoothScanfilterSequence) + -> BluetoothResult<bool> { + let mut adapter = try!(self.get_adapter()); + match self.get_device(&mut adapter, device_id) { + Some(ref device) => Ok(matches_filters(device, filters)), + None => Ok(false), + } + } + // Service fn get_and_cache_gatt_services(&mut self, @@ -561,6 +575,9 @@ impl BluetoothManager { -> BluetoothResponseResult { // Step 6. let mut adapter = try!(self.get_adapter()); + + // Step 7. + // Note: There are no requiredServiceUUIDS, we scan for all devices. if let Ok(ref session) = adapter.create_discovery_session() { if session.start_discovery().is_ok() { if !is_mock_adapter(&adapter) { @@ -570,8 +587,6 @@ impl BluetoothManager { let _ = session.stop_discovery(); } - // Step 7. - // Note: There are no requiredServiceUUIDS, we scan for all devices. let mut matched_devices = self.get_and_cache_devices(&mut adapter); // Step 8. @@ -582,8 +597,6 @@ impl BluetoothManager { } // Step 9. - // TODO: After the permission API implementation - // https://w3c.github.io/permissions/#prompt-the-user-to-choose if let Some(address) = self.select_device(matched_devices, &adapter) { let device_id = match self.address_to_id.get(&address) { Some(id) => id.clone(), @@ -602,7 +615,7 @@ impl BluetoothManager { return Ok(BluetoothResponse::RequestDevice(message)); } } - // TODO: Step 10 - 11: Implement the permission API. + // Step 10. return Err(BluetoothError::NotFound); // Step 12: Missing, because it is optional. } |