Loading system/gd/rust/linux/client/src/bt_adv.rs +17 −4 Original line number Diff line number Diff line Loading @@ -15,6 +15,9 @@ pub(crate) struct AdvSet { /// Advertising data. pub(crate) data: AdvertiseData, /// Scan response data. pub(crate) scan_rsp: AdvertiseData, } impl AdvSet { Loading @@ -33,21 +36,31 @@ impl AdvSet { }; let data = AdvertiseData { service_uuids: Vec::new(), solicit_uuids: Vec::new(), transport_discovery_data: Vec::new(), manufacturer_data: HashMap::from([(0, vec![0, 1, 2])]), service_data: HashMap::new(), include_tx_power_level: true, include_device_name: true, }; let scan_rsp = AdvertiseData { service_uuids: vec![Uuid::from([ 0x00, 0x00, 0xfe, 0xf3, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 0x00, 0x80, 0x5f, 0x9b, 0x34, 0xfb, ])], solicit_uuids: Vec::new(), transport_discovery_data: Vec::new(), manufacturer_data: HashMap::from([(0, vec![0, 1, 2])]), manufacturer_data: HashMap::new(), service_data: HashMap::from([( "0000fef3-0000-1000-8000-00805f9b34fb".to_string(), vec![0x0a, 0x0b], )]), include_tx_power_level: true, include_device_name: true, include_tx_power_level: false, include_device_name: false, }; AdvSet { adv_id: None, params, data } AdvSet { adv_id: None, params, data, scan_rsp } } } system/gd/rust/linux/client/src/command_handler.rs +36 −2 Original line number Diff line number Diff line Loading @@ -164,7 +164,11 @@ fn build_commands() -> HashMap<String, CommandOption> { command_options.insert( String::from("advertise"), CommandOption { rules: vec![String::from("advertise <on|off|set-interval>")], rules: vec![ String::from("advertise <on|off>"), String::from("advertise set-interval <ms>"), String::from("advertise set-scan-rsp <enable|disable>"), ], description: String::from("Advertising utilities."), function_pointer: CommandHandler::cmd_advertise, }, Loading Loading @@ -947,7 +951,8 @@ impl CommandHandler { } let callback_id = self.context.lock().unwrap().advertiser_callback_id.clone().unwrap(); enforce_arg_len(args, 1, "advertise <on|off|set-interval>", || match &args[0][0..] { let cmd_usage = "advertise <on|off|set-interval|set-scan-rsp>"; enforce_arg_len(args, 1, cmd_usage, || match &args[0][0..] { "on" => { let mut context = self.context.lock().unwrap(); Loading Loading @@ -1004,6 +1009,35 @@ impl CommandHandler { context.gatt_dbus.as_mut().unwrap().set_advertising_parameters(adv_id, params); } } "set-scan-rsp" => { if args.len() < 2 { println!("usage: advertise set-scan-rsp <enable|disable>"); return; } let enable = match &args[1][0..] { "enable" => true, "disable" => false, _ => false, }; let mut context = self.context.lock().unwrap(); context.adv_sets.iter_mut().for_each(|(_, s)| s.params.scannable = enable); let advs: Vec<(_, _, _)> = context .adv_sets .iter() .filter_map(|(_, s)| { s.adv_id .map(|adv_id| (adv_id.clone(), s.params.clone(), s.scan_rsp.clone())) }) .collect(); for (adv_id, params, scan_rsp) in advs { print_info!("Setting scan response data for {}", adv_id); context.gatt_dbus.as_mut().unwrap().set_scan_response_data(adv_id, scan_rsp); print_info!("Setting parameters for {}", adv_id); context.gatt_dbus.as_mut().unwrap().set_advertising_parameters(adv_id, params); } } _ => { println!("Invalid argument '{}'", args[0]); } Loading Loading
system/gd/rust/linux/client/src/bt_adv.rs +17 −4 Original line number Diff line number Diff line Loading @@ -15,6 +15,9 @@ pub(crate) struct AdvSet { /// Advertising data. pub(crate) data: AdvertiseData, /// Scan response data. pub(crate) scan_rsp: AdvertiseData, } impl AdvSet { Loading @@ -33,21 +36,31 @@ impl AdvSet { }; let data = AdvertiseData { service_uuids: Vec::new(), solicit_uuids: Vec::new(), transport_discovery_data: Vec::new(), manufacturer_data: HashMap::from([(0, vec![0, 1, 2])]), service_data: HashMap::new(), include_tx_power_level: true, include_device_name: true, }; let scan_rsp = AdvertiseData { service_uuids: vec![Uuid::from([ 0x00, 0x00, 0xfe, 0xf3, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 0x00, 0x80, 0x5f, 0x9b, 0x34, 0xfb, ])], solicit_uuids: Vec::new(), transport_discovery_data: Vec::new(), manufacturer_data: HashMap::from([(0, vec![0, 1, 2])]), manufacturer_data: HashMap::new(), service_data: HashMap::from([( "0000fef3-0000-1000-8000-00805f9b34fb".to_string(), vec![0x0a, 0x0b], )]), include_tx_power_level: true, include_device_name: true, include_tx_power_level: false, include_device_name: false, }; AdvSet { adv_id: None, params, data } AdvSet { adv_id: None, params, data, scan_rsp } } }
system/gd/rust/linux/client/src/command_handler.rs +36 −2 Original line number Diff line number Diff line Loading @@ -164,7 +164,11 @@ fn build_commands() -> HashMap<String, CommandOption> { command_options.insert( String::from("advertise"), CommandOption { rules: vec![String::from("advertise <on|off|set-interval>")], rules: vec![ String::from("advertise <on|off>"), String::from("advertise set-interval <ms>"), String::from("advertise set-scan-rsp <enable|disable>"), ], description: String::from("Advertising utilities."), function_pointer: CommandHandler::cmd_advertise, }, Loading Loading @@ -947,7 +951,8 @@ impl CommandHandler { } let callback_id = self.context.lock().unwrap().advertiser_callback_id.clone().unwrap(); enforce_arg_len(args, 1, "advertise <on|off|set-interval>", || match &args[0][0..] { let cmd_usage = "advertise <on|off|set-interval|set-scan-rsp>"; enforce_arg_len(args, 1, cmd_usage, || match &args[0][0..] { "on" => { let mut context = self.context.lock().unwrap(); Loading Loading @@ -1004,6 +1009,35 @@ impl CommandHandler { context.gatt_dbus.as_mut().unwrap().set_advertising_parameters(adv_id, params); } } "set-scan-rsp" => { if args.len() < 2 { println!("usage: advertise set-scan-rsp <enable|disable>"); return; } let enable = match &args[1][0..] { "enable" => true, "disable" => false, _ => false, }; let mut context = self.context.lock().unwrap(); context.adv_sets.iter_mut().for_each(|(_, s)| s.params.scannable = enable); let advs: Vec<(_, _, _)> = context .adv_sets .iter() .filter_map(|(_, s)| { s.adv_id .map(|adv_id| (adv_id.clone(), s.params.clone(), s.scan_rsp.clone())) }) .collect(); for (adv_id, params, scan_rsp) in advs { print_info!("Setting scan response data for {}", adv_id); context.gatt_dbus.as_mut().unwrap().set_scan_response_data(adv_id, scan_rsp); print_info!("Setting parameters for {}", adv_id); context.gatt_dbus.as_mut().unwrap().set_advertising_parameters(adv_id, params); } } _ => { println!("Invalid argument '{}'", args[0]); } Loading