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

Commit 55516bc4 authored by Sonny Sasaka's avatar Sonny Sasaka
Browse files

Floss: Refactor le-scan command handler

This refactors le-scan command handler to take advantage of early return
at error to reduce nesting.

Also piggibacking this CL are trivial warning fixups in
socket_manager.rs.

Bug: 254870159
Tag: #floss
Test: Build Floss on Linux

Change-Id: Id705bda6577bd16e757d34b3688d039e0c3adb6e
parent 1be69051
Loading
Loading
Loading
Loading
+51 −49
Original line number Diff line number Diff line
@@ -1115,8 +1115,13 @@ impl CommandHandler {

        match &command[..] {
            "register-scanner" => {
                let scanner_callback_id = self.context.lock().unwrap().scanner_callback_id;
                if let Some(id) = scanner_callback_id {
                let scanner_callback_id = self
                    .context
                    .lock()
                    .unwrap()
                    .scanner_callback_id
                    .ok_or("Cannot register scanner before registering scanner callback")?;

                let uuid = self
                    .context
                    .lock()
@@ -1124,27 +1129,30 @@ impl CommandHandler {
                    .gatt_dbus
                    .as_mut()
                    .unwrap()
                        .register_scanner(id);
                    .register_scanner(scanner_callback_id);

                print_info!("Scanner to be registered with UUID = {}", UuidWrapper(&uuid));
                } else {
                    print_error!("Cannot register scanner before registering scanner callback");
                }
            }
            "unregister-scanner" => {
                let scanner_id = String::from(get_arg(args, 1)?).parse::<u8>();
                let scanner_id = String::from(get_arg(args, 1)?)
                    .parse::<u8>()
                    .or(Err("Failed parsing scanner id"))?;

                if let Ok(id) = scanner_id {
                    self.context.lock().unwrap().gatt_dbus.as_mut().unwrap().unregister_scanner(id);
                } else {
                    return Err("Failed parsing scanner id".into());
                }
                self.context
                    .lock()
                    .unwrap()
                    .gatt_dbus
                    .as_mut()
                    .unwrap()
                    .unregister_scanner(scanner_id);
            }
            "start-scan" => {
                let scanner_id = String::from(get_arg(args, 1)?).parse::<u8>();
                let scanner_id = String::from(get_arg(args, 1)?)
                    .parse::<u8>()
                    .or(Err("Failed parsing scanner id"))?;

                if let Ok(id) = scanner_id {
                self.context.lock().unwrap().gatt_dbus.as_mut().unwrap().start_scan(
                        id,
                    scanner_id,
                    // TODO(b/254870159): Construct real settings and filters depending on
                    // command line options.
                    ScanSettings { interval: 0, window: 0, scan_type: ScanType::Active },
@@ -1153,25 +1161,19 @@ impl CommandHandler {
                        rssi_low_threshold: 0,
                        rssi_low_timeout: 0,
                        rssi_sampling_period: 0,
                            condition: btstack::bluetooth_gatt::ScanFilterCondition::Patterns(
                                vec![],
                            ),
                        condition: btstack::bluetooth_gatt::ScanFilterCondition::Patterns(vec![]),
                    }),
                );
                    self.context.lock().unwrap().active_scanner_ids.insert(id);
                } else {
                    return Err("Failed parsing scanner id".into());
                }

                self.context.lock().unwrap().active_scanner_ids.insert(scanner_id);
            }
            "stop-scan" => {
                let scanner_id = String::from(get_arg(args, 1)?).parse::<u8>();
                let scanner_id = String::from(get_arg(args, 1)?)
                    .parse::<u8>()
                    .or(Err("Failed parsing scanner id"))?;

                if let Ok(id) = scanner_id {
                    self.context.lock().unwrap().gatt_dbus.as_mut().unwrap().stop_scan(id);
                    self.context.lock().unwrap().active_scanner_ids.remove(&id);
                } else {
                    return Err("Failed parsing scanner id".into());
                }
                self.context.lock().unwrap().gatt_dbus.as_mut().unwrap().stop_scan(scanner_id);
                self.context.lock().unwrap().active_scanner_ids.remove(&scanner_id);
            }
            _ => return Err(CommandError::InvalidArgs),
        }
+3 −3
Original line number Diff line number Diff line
@@ -101,7 +101,7 @@ impl BluetoothServerSocket {
        BluetoothServerSocket {
            id: 0,
            sock_type: SocketType::Rfcomm,
            flags: flags,
            flags,
            psm: None,
            channel: Some(DYNAMIC_CHANNEL),
            name: Some(name),
@@ -198,7 +198,7 @@ impl BluetoothSocket {
            id: 0,
            remote_device: device,
            sock_type: SocketType::L2cap,
            flags: flags,
            flags,
            fd: None,
            port: psm,
            uuid: None,
@@ -212,7 +212,7 @@ impl BluetoothSocket {
            id: 0,
            remote_device: device,
            sock_type: SocketType::Rfcomm,
            flags: flags,
            flags,
            fd: None,
            port: -1,
            uuid: Some(uuid),