diff options
-rw-r--r-- | system/gd/rust/stack/src/hci/controller_facade.rs | 39 |
1 files changed, 28 insertions, 11 deletions
diff --git a/system/gd/rust/stack/src/hci/controller_facade.rs b/system/gd/rust/stack/src/hci/controller_facade.rs index 7f0dd665fc..775af8e284 100644 --- a/system/gd/rust/stack/src/hci/controller_facade.rs +++ b/system/gd/rust/stack/src/hci/controller_facade.rs @@ -7,9 +7,10 @@ use bt_facade_proto::common::BluetoothAddress; use bt_facade_proto::controller_facade::{NameMsg, OpCodeMsg, SingleValueMsg, SupportedMsg}; use bt_facade_proto::controller_facade_grpc::{create_controller_facade, ControllerFacade}; use bt_facade_proto::empty::Empty; -use bt_packets::hci::{ReadLocalNameBuilder, WriteLocalNameBuilder}; +use bt_packets::hci::{OpCode, ReadLocalNameBuilder, WriteLocalNameBuilder}; use gddi::{module, provides, Stoppable}; use grpcio::*; +use num_traits::FromPrimitive; use std::sync::Arc; module! { @@ -78,20 +79,31 @@ impl ControllerFacade for ControllerFacadeService { fn is_supported_command( &mut self, - _: RpcContext<'_>, - _: OpCodeMsg, - _: UnarySink<SupportedMsg>, + ctx: RpcContext<'_>, + op_code_msg: OpCodeMsg, + sink: UnarySink<SupportedMsg>, ) { - todo!() + let clone = self.clone(); + let opcode = OpCode::from_u32(op_code_msg.get_op_code()).unwrap(); + ctx.spawn(async move { + let mut supported_msg = SupportedMsg::new(); + supported_msg.set_supported(clone.exports.commands.is_supported(opcode)); + sink.success(supported_msg).await.unwrap(); + }); } fn get_le_number_of_supported_advertising_sets( &mut self, - _: RpcContext<'_>, + ctx: RpcContext<'_>, _: Empty, - _: UnarySink<SingleValueMsg>, + sink: UnarySink<SingleValueMsg>, ) { - todo!() + let clone = self.clone(); + ctx.spawn(async move { + let mut msg = SingleValueMsg::new(); + msg.set_value(clone.exports.le_supported_advertising_sets.into()); + sink.success(msg).await.unwrap(); + }); } fn supports_simple_pairing(&mut self, _: RpcContext<'_>, _: Empty, _: UnarySink<SupportedMsg>) { @@ -324,11 +336,16 @@ impl ControllerFacade for ControllerFacadeService { } fn supports_ble_extended_advertising( &mut self, - _: RpcContext<'_>, + ctx: RpcContext<'_>, _: Empty, - _: UnarySink<SupportedMsg>, + sink: UnarySink<SupportedMsg>, ) { - todo!() + let clone = self.clone(); + ctx.spawn(async move { + let mut supported_msg = SupportedMsg::new(); + supported_msg.set_supported(clone.exports.le_features.extended_advertising); + sink.success(supported_msg).await.unwrap(); + }); } fn supports_ble_periodic_advertising( &mut self, |