Loading system/gd/rust/hci/src/facade.rs +37 −18 Original line number Diff line number Diff line Loading @@ -10,11 +10,11 @@ use bt_packets::hci; use futures::sink::SinkExt; use gddi::{module, provides, Stoppable}; use grpcio::*; use num_traits::FromPrimitive; use std::sync::Arc; use tokio::runtime::Runtime; use tokio::sync::mpsc::{channel, Receiver, Sender}; use tokio::sync::Mutex; use num_traits::FromPrimitive; module! { facade_module, Loading @@ -26,11 +26,14 @@ module! { #[provides] async fn provide_facade(hci_exports: HciExports, rt: Arc<Runtime>) -> HciLayerFacadeService { let (from_hci_evt_tx, to_grpc_evt_rx) = channel::<hci::EventPacket>(10); let (from_hci_le_evt_tx, to_grpc_le_evt_rx) = channel::<hci::LeMetaEventPacket>(10); HciLayerFacadeService { hci_exports, rt, from_hci_evt_tx, to_grpc_evt_rx: Arc::new(Mutex::new(to_grpc_evt_rx)), from_hci_le_evt_tx, to_grpc_le_evt_rx: Arc::new(Mutex::new(to_grpc_le_evt_rx)), } } Loading @@ -41,6 +44,8 @@ pub struct HciLayerFacadeService { rt: Arc<Runtime>, from_hci_evt_tx: Sender<hci::EventPacket>, to_grpc_evt_rx: Arc<Mutex<Receiver<hci::EventPacket>>>, from_hci_le_evt_tx: Sender<hci::LeMetaEventPacket>, to_grpc_le_evt_rx: Arc<Mutex<Receiver<hci::LeMetaEventPacket>>>, } impl GrpcFacade for HciLayerFacadeService { Loading @@ -56,10 +61,11 @@ impl HciLayerFacade for HciLayerFacadeService { mut data: Data, sink: UnarySink<Empty>, ) { self.rt.block_on( self.hci_exports .send_raw(hci::CommandPacket::parse(&data.take_payload()).unwrap()), ).unwrap(); self.rt .block_on( self.hci_exports.send_raw(hci::CommandPacket::parse(&data.take_payload()).unwrap()), ) .unwrap(); sink.success(Empty::default()); } Loading @@ -69,28 +75,33 @@ impl HciLayerFacade for HciLayerFacadeService { mut data: Data, sink: UnarySink<Empty>, ) { self.rt.block_on( self.hci_exports .send_raw(hci::CommandPacket::parse(&data.take_payload()).unwrap()), ).unwrap(); self.rt .block_on( self.hci_exports.send_raw(hci::CommandPacket::parse(&data.take_payload()).unwrap()), ) .unwrap(); sink.success(Empty::default()); } fn request_event(&mut self, _ctx: RpcContext<'_>, code: EventRequest, sink: UnarySink<Empty>) { self.rt.block_on( self.hci_exports .register_event_handler(hci::EventCode::from_u32(code.get_code()).unwrap(), self.from_hci_evt_tx.clone()), ); self.rt.block_on(self.hci_exports.register_event_handler( hci::EventCode::from_u32(code.get_code()).unwrap(), self.from_hci_evt_tx.clone(), )); sink.success(Empty::default()); } fn request_le_subevent( &mut self, _ctx: RpcContext<'_>, _code: EventRequest, _sink: UnarySink<Empty>, code: EventRequest, sink: UnarySink<Empty>, ) { unimplemented!() self.rt.block_on(self.hci_exports.register_le_event_handler( hci::SubeventCode::from_u32(code.get_code()).unwrap(), self.from_hci_le_evt_tx.clone(), )); sink.success(Empty::default()); } fn send_acl(&mut self, _ctx: RpcContext<'_>, mut packet: Data, sink: UnarySink<Empty>) { Loading Loading @@ -122,9 +133,17 @@ impl HciLayerFacade for HciLayerFacadeService { &mut self, _ctx: RpcContext<'_>, _req: Empty, mut _resp: ServerStreamingSink<Data>, mut resp: ServerStreamingSink<Data>, ) { unimplemented!() let evt_rx = self.to_grpc_le_evt_rx.clone(); self.rt.spawn(async move { while let Some(event) = evt_rx.lock().await.recv().await { let mut evt = LeSubevent::default(); evt.set_payload(event.to_vec()); resp.send((evt, WriteFlags::default())).await.unwrap(); } }); } fn stream_acl( Loading Loading
system/gd/rust/hci/src/facade.rs +37 −18 Original line number Diff line number Diff line Loading @@ -10,11 +10,11 @@ use bt_packets::hci; use futures::sink::SinkExt; use gddi::{module, provides, Stoppable}; use grpcio::*; use num_traits::FromPrimitive; use std::sync::Arc; use tokio::runtime::Runtime; use tokio::sync::mpsc::{channel, Receiver, Sender}; use tokio::sync::Mutex; use num_traits::FromPrimitive; module! { facade_module, Loading @@ -26,11 +26,14 @@ module! { #[provides] async fn provide_facade(hci_exports: HciExports, rt: Arc<Runtime>) -> HciLayerFacadeService { let (from_hci_evt_tx, to_grpc_evt_rx) = channel::<hci::EventPacket>(10); let (from_hci_le_evt_tx, to_grpc_le_evt_rx) = channel::<hci::LeMetaEventPacket>(10); HciLayerFacadeService { hci_exports, rt, from_hci_evt_tx, to_grpc_evt_rx: Arc::new(Mutex::new(to_grpc_evt_rx)), from_hci_le_evt_tx, to_grpc_le_evt_rx: Arc::new(Mutex::new(to_grpc_le_evt_rx)), } } Loading @@ -41,6 +44,8 @@ pub struct HciLayerFacadeService { rt: Arc<Runtime>, from_hci_evt_tx: Sender<hci::EventPacket>, to_grpc_evt_rx: Arc<Mutex<Receiver<hci::EventPacket>>>, from_hci_le_evt_tx: Sender<hci::LeMetaEventPacket>, to_grpc_le_evt_rx: Arc<Mutex<Receiver<hci::LeMetaEventPacket>>>, } impl GrpcFacade for HciLayerFacadeService { Loading @@ -56,10 +61,11 @@ impl HciLayerFacade for HciLayerFacadeService { mut data: Data, sink: UnarySink<Empty>, ) { self.rt.block_on( self.hci_exports .send_raw(hci::CommandPacket::parse(&data.take_payload()).unwrap()), ).unwrap(); self.rt .block_on( self.hci_exports.send_raw(hci::CommandPacket::parse(&data.take_payload()).unwrap()), ) .unwrap(); sink.success(Empty::default()); } Loading @@ -69,28 +75,33 @@ impl HciLayerFacade for HciLayerFacadeService { mut data: Data, sink: UnarySink<Empty>, ) { self.rt.block_on( self.hci_exports .send_raw(hci::CommandPacket::parse(&data.take_payload()).unwrap()), ).unwrap(); self.rt .block_on( self.hci_exports.send_raw(hci::CommandPacket::parse(&data.take_payload()).unwrap()), ) .unwrap(); sink.success(Empty::default()); } fn request_event(&mut self, _ctx: RpcContext<'_>, code: EventRequest, sink: UnarySink<Empty>) { self.rt.block_on( self.hci_exports .register_event_handler(hci::EventCode::from_u32(code.get_code()).unwrap(), self.from_hci_evt_tx.clone()), ); self.rt.block_on(self.hci_exports.register_event_handler( hci::EventCode::from_u32(code.get_code()).unwrap(), self.from_hci_evt_tx.clone(), )); sink.success(Empty::default()); } fn request_le_subevent( &mut self, _ctx: RpcContext<'_>, _code: EventRequest, _sink: UnarySink<Empty>, code: EventRequest, sink: UnarySink<Empty>, ) { unimplemented!() self.rt.block_on(self.hci_exports.register_le_event_handler( hci::SubeventCode::from_u32(code.get_code()).unwrap(), self.from_hci_le_evt_tx.clone(), )); sink.success(Empty::default()); } fn send_acl(&mut self, _ctx: RpcContext<'_>, mut packet: Data, sink: UnarySink<Empty>) { Loading Loading @@ -122,9 +133,17 @@ impl HciLayerFacade for HciLayerFacadeService { &mut self, _ctx: RpcContext<'_>, _req: Empty, mut _resp: ServerStreamingSink<Data>, mut resp: ServerStreamingSink<Data>, ) { unimplemented!() let evt_rx = self.to_grpc_le_evt_rx.clone(); self.rt.spawn(async move { while let Some(event) = evt_rx.lock().await.recv().await { let mut evt = LeSubevent::default(); evt.set_payload(event.to_vec()); resp.send((evt, WriteFlags::default())).await.unwrap(); } }); } fn stream_acl( Loading