summaryrefslogtreecommitdiff
path: root/nrf-softdevice/src/events.rs
diff options
context:
space:
mode:
authorDario Nieuwenhuis <dirbaio@dirbaio.net>2020-09-14 00:03:38 +0200
committerDario Nieuwenhuis <dirbaio@dirbaio.net>2020-09-14 00:03:38 +0200
commit96bd2e80aa737fd00ed49a045b107a3a3676f659 (patch)
tree8c01e076d030734528881e964ecfe1da463eedaa /nrf-softdevice/src/events.rs
parent52329d22febd6f19a63ab398de1dbc2a228ee3d9 (diff)
downloadnrf-softdevice-96bd2e80aa737fd00ed49a045b107a3a3676f659.zip
Add Softdevice struct. makes API safer.
Diffstat (limited to 'nrf-softdevice/src/events.rs')
-rw-r--r--nrf-softdevice/src/events.rs50
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() {