summaryrefslogtreecommitdiffstats
path: root/ble/src/ble.rs
diff options
context:
space:
mode:
authorBrian Cully <bjc@kublai.com>2019-08-15 20:44:51 -0400
committerBrian Cully <bjc@kublai.com>2019-08-15 20:44:51 -0400
commitda405029113f9c188313b9477f4dc13aa3ab52f9 (patch)
tree058dcca7068d597e572112f0c182fd3b701a9d59 /ble/src/ble.rs
parent101a0859612cbf40364d198eea60b9ae934f721a (diff)
downloadbleusb-da405029113f9c188313b9477f4dc13aa3ab52f9.tar.gz
bleusb-da405029113f9c188313b9477f4dc13aa3ab52f9.zip
More WIP for btle comms.
Diffstat (limited to 'ble/src/ble.rs')
-rw-r--r--ble/src/ble.rs28
1 files changed, 28 insertions, 0 deletions
diff --git a/ble/src/ble.rs b/ble/src/ble.rs
new file mode 100644
index 0000000..e5f16cb
--- /dev/null
+++ b/ble/src/ble.rs
@@ -0,0 +1,28 @@
+use nrf52840_hal::target::{FICR, RADIO, TIMER0};
+use rubble::link::{AddressKind, DeviceAddress, HardwareInterface, LinkLayer, MIN_PDU_BUF};
+use rubble_nrf52::{radio::BleRadio, timer::BleTimer};
+
+struct NRF52840 {}
+impl HardwareInterface for NRF52840 {
+ type Timer = BleTimer<TIMER0>;
+ type Tx = BleRadio;
+}
+
+pub fn setup(radio: RADIO, timer: TIMER0, ficr: FICR) {
+ // make sure hfclock is started for timer0 to work at the right
+ // resolution.
+ let ble_timer = BleTimer::init(timer);
+ let mut devaddr = [0u8; 6];
+ let devaddr_lo = ficr.deviceaddr[0].read().bits();
+ let devaddr_hi = ficr.deviceaddr[1].read().bits();
+ devaddr[..4].clone_from_slice(&devaddr_lo.to_le_bytes());
+ devaddr[4..].clone_from_slice(&devaddr_hi.to_le_bytes());
+
+ let addrkind = if ficr.deviceaddrtype.read().deviceaddrtype().is_public() {
+ AddressKind::Public
+ } else {
+ AddressKind::Random
+ };
+ let addr = DeviceAddress::new(devaddr, addrkind);
+ let mut _ll = LinkLayer::<NRF52840>::new(addr, ble_timer);
+}