diff options
author | Dario Nieuwenhuis <dirbaio@dirbaio.net> | 2020-09-14 00:03:38 +0200 |
---|---|---|
committer | Dario Nieuwenhuis <dirbaio@dirbaio.net> | 2020-09-14 00:03:38 +0200 |
commit | 96bd2e80aa737fd00ed49a045b107a3a3676f659 (patch) | |
tree | 8c01e076d030734528881e964ecfe1da463eedaa /nrf-softdevice/src/events.rs | |
parent | 52329d22febd6f19a63ab398de1dbc2a228ee3d9 (diff) | |
download | nrf-softdevice-96bd2e80aa737fd00ed49a045b107a3a3676f659.zip |
Add Softdevice struct. makes API safer.
Diffstat (limited to 'nrf-softdevice/src/events.rs')
-rw-r--r-- | nrf-softdevice/src/events.rs | 50 |
1 files changed, 27 insertions, 23 deletions
diff --git a/nrf-softdevice/src/events.rs b/nrf-softdevice/src/events.rs index aa0196f..22a932a 100644 --- a/nrf-softdevice/src/events.rs +++ b/nrf-softdevice/src/events.rs @@ -2,9 +2,9 @@ use core::convert::TryFrom; use core::mem::MaybeUninit; use num_enum::{IntoPrimitive, TryFromPrimitive}; -use crate::error::Error; use crate::util::*; use crate::{interrupt, raw}; +use crate::{Error, Softdevice}; static SWI2_SIGNAL: Signal<()> = Signal::new(); @@ -46,37 +46,41 @@ fn on_soc_evt(evt: u32) { // TODO actually derive this from the headers + the ATT_MTU const BLE_EVT_MAX_SIZE: u16 = 128; -pub async fn run() { - loop { - SWI2_SIGNAL.wait().await; +impl Softdevice { + pub async fn run(&self) { + loop { + SWI2_SIGNAL.wait().await; - unsafe { - let mut evt: u32 = 0; - loop { - match Error::convert(raw::sd_evt_get(&mut evt as _)) { - Ok(()) => on_soc_evt(evt), - Err(Error::NotFound) => break, - Err(err) => depanic!("sd_evt_get err {:?}", err), + unsafe { + let mut evt: u32 = 0; + loop { + match Error::convert(raw::sd_evt_get(&mut evt as _)) { + Ok(()) => on_soc_evt(evt), + Err(Error::NotFound) => break, + Err(err) => depanic!("sd_evt_get err {:?}", err), + } } - } - // Using u32 since the buffer has to be aligned to 4 - let mut evt: MaybeUninit<[u32; BLE_EVT_MAX_SIZE as usize / 4]> = MaybeUninit::uninit(); + // Using u32 since the buffer has to be aligned to 4 + let mut evt: MaybeUninit<[u32; BLE_EVT_MAX_SIZE as usize / 4]> = + MaybeUninit::uninit(); - loop { - let mut len: u16 = BLE_EVT_MAX_SIZE; - let ret = raw::sd_ble_evt_get(evt.as_mut_ptr() as *mut u8, &mut len as _); - match Error::convert(ret) { - Ok(()) => crate::ble::on_evt(evt.as_ptr() as *const raw::ble_evt_t), - Err(Error::NotFound) => break, - Err(Error::BleNotEnabled) => break, - Err(Error::NoMem) => depanic!("BUG: BLE_EVT_MAX_SIZE is too low"), - Err(err) => depanic!("sd_ble_evt_get err {:?}", err), + loop { + let mut len: u16 = BLE_EVT_MAX_SIZE; + let ret = raw::sd_ble_evt_get(evt.as_mut_ptr() as *mut u8, &mut len as _); + match Error::convert(ret) { + Ok(()) => crate::ble::on_evt(evt.as_ptr() as *const raw::ble_evt_t), + Err(Error::NotFound) => break, + Err(Error::BleNotEnabled) => break, + Err(Error::NoMem) => depanic!("BUG: BLE_EVT_MAX_SIZE is too low"), + Err(err) => depanic!("sd_ble_evt_get err {:?}", err), + } } } } } } + #[cfg(feature = "nrf52810")] #[interrupt] unsafe fn SWI2() { |