RKTK API Docs RKTK Home Repo

rktk_drivers_nrf/softdevice/ble/
mod.rs

1use nrf_softdevice::{Softdevice, raw};
2
3use rktk::{
4    drivers::interface::wireless::WirelessReporterDriverBuilder,
5    utils::{Channel, Signal},
6};
7pub use server::Server;
8pub use services::device_information::DeviceInformation;
9use usbd_hid::descriptor::{KeyboardReport, MediaKeyboardReport, MouseReport};
10
11use super::flash::SharedFlash;
12
13mod bonder;
14mod constant;
15mod driver;
16mod server;
17mod services;
18mod task;
19
20#[derive(Debug)]
21pub enum InputReport {
22    Keyboard(KeyboardReport),
23    MediaKeyboard(MediaKeyboardReport),
24    Mouse(MouseReport),
25}
26
27// Channel for input (device to host) report
28static INPUT_REPORT_CHAN: Channel<InputReport, 8> = Channel::new();
29// Channel for keyboard output report (only leds field)
30static KB_OUTPUT_LED_SIGNAL: Signal<u8> = Signal::new();
31
32pub fn init_ble_server(sd: &mut Softdevice, device_info: DeviceInformation) -> Server {
33    unsafe {
34        raw::sd_ble_gap_appearance_set(raw::BLE_APPEARANCE_HID_KEYBOARD as u16);
35    }
36
37    server::Server::new(sd, device_info).unwrap()
38}
39
40pub struct SoftdeviceBleReporterBuilder {
41    sd: &'static Softdevice,
42    server: Server,
43    name: &'static str,
44    flash: &'static SharedFlash,
45}
46
47impl SoftdeviceBleReporterBuilder {
48    pub fn new(
49        sd: &'static Softdevice,
50        server: Server,
51        name: &'static str,
52        flash: &'static SharedFlash,
53    ) -> Self {
54        Self {
55            sd,
56            server,
57            name,
58            flash,
59        }
60    }
61}
62
63impl WirelessReporterDriverBuilder for SoftdeviceBleReporterBuilder {
64    type Output = driver::SoftdeviceBleReporterDriver;
65
66    type Error = ();
67
68    async fn build(self) -> Result<(Self::Output, impl Future<Output = ()>), Self::Error> {
69        Ok((
70            driver::SoftdeviceBleReporterDriver {},
71            task::softdevice_task(self.sd, self.server, self.name, self.flash),
72        ))
73    }
74}