Skip to main content
RKTK API Docs RKTK Home Repo

rktk_drivers_common/trouble/reporter/
mod.rs

1use driver::TroubleReporter;
2use rktk::{drivers::interface::wireless::WirelessReporterDriverBuilder, utils::Channel};
3use trouble_host::{Controller, gap::PeripheralConfig};
4
5mod driver;
6mod server;
7mod task;
8
9enum Report {
10    Keyboard(usbd_hid::descriptor::KeyboardReport),
11    MediaKeyboard(usbd_hid::descriptor::MediaKeyboardReport),
12    Mouse(usbd_hid::descriptor::MouseReport),
13}
14
15static OUTPUT_CHANNEL: Channel<Report, 4> = Channel::new();
16
17pub struct TroubleReporterConfig {
18    pub advertise_name: &'static str,
19    pub peripheral_config: Option<PeripheralConfig<'static>>,
20}
21
22pub struct TroubleReporterBuilder<
23    C: Controller + 'static,
24    const CONNECTIONS_MAX: usize,
25    const L2CAP_CHANNELS_MAX: usize,
26    const L2CAP_MTU: usize,
27> {
28    controller: C,
29    config: TroubleReporterConfig,
30}
31
32impl<
33    C: Controller + 'static,
34    const CONNECTIONS_MAX: usize,
35    const L2CAP_CHANNELS_MAX: usize,
36    const L2CAP_MTU: usize,
37> TroubleReporterBuilder<C, CONNECTIONS_MAX, L2CAP_CHANNELS_MAX, L2CAP_MTU>
38{
39    pub fn new(controller: C, config: TroubleReporterConfig) -> Self {
40        Self { controller, config }
41    }
42}
43
44impl<
45    C: Controller + 'static,
46    const CONNECTIONS_MAX: usize,
47    const L2CAP_CHANNELS_MAX: usize,
48    const L2CAP_MTU: usize,
49> WirelessReporterDriverBuilder
50    for TroubleReporterBuilder<C, CONNECTIONS_MAX, L2CAP_CHANNELS_MAX, L2CAP_MTU>
51{
52    type Output = TroubleReporter;
53
54    type Error = ();
55
56    async fn build(
57        self,
58    ) -> Result<(Self::Output, impl Future<Output = ()> + 'static), Self::Error> {
59        Ok((
60            TroubleReporter { output_tx: OUTPUT_CHANNEL.sender() },
61            task::run::<_, CONNECTIONS_MAX, L2CAP_CHANNELS_MAX, L2CAP_MTU>(
62                self.controller,
63                OUTPUT_CHANNEL.receiver(),
64                self.config,
65            ),
66        ))
67    }
68}