From 7ab23ec9a9021ebcc70d83681bf548bae87f44ea Mon Sep 17 00:00:00 2001 From: Sachymetsu Date: Mon, 6 Jul 2026 12:20:08 +0200 Subject: [PATCH] Reorg BLE tasks and methods --- src/ble.rs | 60 +++++++++++++++++++++++++++++------------------------ src/main.rs | 3 +-- 2 files changed, 34 insertions(+), 29 deletions(-) diff --git a/src/ble.rs b/src/ble.rs index 78ac9ce..bd85b11 100644 --- a/src/ble.rs +++ b/src/ble.rs @@ -19,36 +19,18 @@ use crate::{ state::{ADC_MEASUREMENT, SHTC3_MEASUREMENT, START_MEASUREMENTS}, }; -#[embassy_executor::task] -pub async fn mpsl_task(mpsl: &'static MultiprotocolServiceLayer<'static>) -> ! { - mpsl.run().await -} - -pub fn build_sdc<'d, const N: usize>( - p: nrf_sdc::Peripherals<'d>, - rng: &'d mut rng::Rng, - mpsl: &'d MultiprotocolServiceLayer, - mem: &'d mut nrf_sdc::Mem, -) -> Result, nrf_sdc::Error> { - nrf_sdc::Builder::new()? - .support_adv() - .build(p, rng, mpsl, mem) -} - -fn build_addr() -> BdAddr { - let ficr = pac::FICR; - let high = u64::from(ficr.deviceid(1).read()); - let addr = high << 32 | u64::from(ficr.deviceid(0).read()); - let addr = addr | 0x0000_c000_0000_0000; - BdAddr::new(unwrap!(addr.to_le_bytes()[..6].try_into())) -} - type BleResources = HostResources; type BleStack = Stack<'static, nrf_sdc::SoftdeviceController<'static>, DefaultPacketPool>; type BleRunner = Runner<'static, nrf_sdc::SoftdeviceController<'static>, DefaultPacketPool>; #[embassy_executor::task] -pub async fn run(spawner: Spawner, controller: nrf_sdc::SoftdeviceController<'static>) { +pub async fn run( + spawner: Spawner, + controller: nrf_sdc::SoftdeviceController<'static>, + mpsl: &'static MultiprotocolServiceLayer<'static>, +) { + spawner.spawn(unwrap!(mpsl_task(mpsl))); + let addr = build_addr(); info!("Our address = {:?}", &addr); @@ -59,8 +41,8 @@ pub async fn run(spawner: Spawner, controller: nrf_sdc::SoftdeviceController<'st static RESOURCES: StaticCell = StaticCell::new(); static STACK: StaticCell = StaticCell::new(); - let stack = - STACK.init_with(|| trouble_host::new(controller, RESOURCES.init_with(HostResources::new))); + let resources = RESOURCES.init_with(HostResources::new); + let stack = STACK.init_with(|| trouble_host::new(controller, resources)); let Host { mut peripheral, @@ -114,6 +96,11 @@ pub async fn run(spawner: Spawner, controller: nrf_sdc::SoftdeviceController<'st } } +#[embassy_executor::task] +async fn mpsl_task(mpsl: &'static MultiprotocolServiceLayer<'static>) -> ! { + mpsl.run().await +} + #[embassy_executor::task] async fn ble_runner_task(mut runner: BleRunner) { loop { @@ -122,3 +109,22 @@ async fn ble_runner_task(mut runner: BleRunner) { } } } + +pub fn build_sdc<'d, const N: usize>( + p: nrf_sdc::Peripherals<'d>, + rng: &'d mut rng::Rng, + mpsl: &'d MultiprotocolServiceLayer, + mem: &'d mut nrf_sdc::Mem, +) -> Result, nrf_sdc::Error> { + nrf_sdc::Builder::new()? + .support_adv() + .build(p, rng, mpsl, mem) +} + +fn build_addr() -> BdAddr { + let ficr = pac::FICR; + let high = u64::from(ficr.deviceid(1).read()); + let addr = high << 32 | u64::from(ficr.deviceid(0).read()); + let addr = addr | 0x0000_c000_0000_0000; + BdAddr::new(unwrap!(addr.to_le_bytes()[..6].try_into())) +} diff --git a/src/main.rs b/src/main.rs index 1bca00e..0b889ee 100644 --- a/src/main.rs +++ b/src/main.rs @@ -89,8 +89,7 @@ fn main() -> ! { p.SAADC, p.P0_02, p.P0_03, photo_ctrl, p.PWM0, p.P0_05, ))); spawner.spawn(unwrap!(timer::task())); - spawner.spawn(unwrap!(ble::mpsl_task(&*mpsl))); - spawner.spawn(unwrap!(ble::run(spawner, sdc))); + spawner.spawn(unwrap!(ble::run(spawner, sdc, mpsl))); info!("Sachy's Parasite is go!"); }) -- 2.51.2