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

Commit 5ead08af authored by Zach Johnson's avatar Zach Johnson
Browse files

rusty-gd: forward ACL channels in HciExports, expose over facades

Bug: 171749953
Tag: #gd-refactor
Test: gd/cert/run --rhost
Change-Id: I448e8ee990fefe480c6e6541157565c399374be6
parent 81b51825
Loading
Loading
Loading
Loading
+16 −4
Original line number Diff line number Diff line
@@ -91,8 +91,12 @@ impl HciLayerFacade for HciLayerFacadeService {
        unimplemented!()
    }

    fn send_acl(&mut self, _ctx: RpcContext<'_>, _data: AclPacket, _sink: UnarySink<Empty>) {
        unimplemented!()
    fn send_acl(&mut self, _ctx: RpcContext<'_>, mut packet: AclPacket, sink: UnarySink<Empty>) {
        self.hci_exports
            .acl_tx
            .send(packet.take_data().into())
            .unwrap();
        sink.success(Empty::default());
    }

    fn stream_events(
@@ -125,8 +129,16 @@ impl HciLayerFacade for HciLayerFacadeService {
        &mut self,
        _ctx: RpcContext<'_>,
        _req: Empty,
        mut _resp: ServerStreamingSink<AclPacket>,
        mut resp: ServerStreamingSink<AclPacket>,
    ) {
        unimplemented!()
        let acl_rx = self.hci_exports.acl_rx.clone();

        self.rt.spawn(async move {
            while let Some(data) = acl_rx.lock().await.recv().await {
                let mut packet = AclPacket::default();
                packet.set_data(data.to_vec());
                resp.send((packet, WriteFlags::default())).await.unwrap();
            }
        });
    }
}
+7 −2
Original line number Diff line number Diff line
@@ -7,7 +7,7 @@ pub mod error;
pub mod facade;

use bt_hal::HalExports;
use bt_packet::{HciCommand, HciEvent};
use bt_packet::{HciCommand, HciEvent, RawPacket};
use error::Result;
use facade::facade_module;
use gddi::{module, provides};
@@ -43,6 +43,8 @@ async fn provide_hci(hal_exports: HalExports, rt: Arc<Runtime>) -> HciExports {
    HciExports {
        cmd_tx,
        evt_handlers,
        acl_tx: hal_exports.acl_tx,
        acl_rx: hal_exports.acl_rx,
    }
}

@@ -64,9 +66,12 @@ struct PendingCommand {
/// HCI interface
#[derive(Clone)]
pub struct HciExports {
    /// Transmit end of a channel used to send HCI commands
    cmd_tx: Sender<Command>,
    evt_handlers: Arc<Mutex<HashMap<u8, Sender<HciEvent>>>>,
    /// Transmit end of a channel used to send ACL data
    pub acl_tx: UnboundedSender<RawPacket>,
    /// Receive end of a channel used to receive ACL data
    pub acl_rx: Arc<Mutex<UnboundedReceiver<RawPacket>>>,
}

impl HciExports {