summaryrefslogtreecommitdiffstats
path: root/ble/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'ble/src/main.rs')
-rw-r--r--ble/src/main.rs53
1 files changed, 46 insertions, 7 deletions
diff --git a/ble/src/main.rs b/ble/src/main.rs
index 2da6de9..3c98b7e 100644
--- a/ble/src/main.rs
+++ b/ble/src/main.rs
@@ -7,13 +7,13 @@ mod i2c;
mod logger;
mod macros;
mod rtc;
+mod uarte1;
use clint::HandlerArray;
-use core::fmt::Write;
use core::mem;
use cortex_m::asm::wfi;
use cortex_m_rt::{entry, exception, ExceptionFrame};
-use log::{info, trace, LevelFilter};
+use log::{info, LevelFilter};
#[allow(unused_imports)]
extern crate panic_semihosting;
@@ -33,7 +33,6 @@ const I2C_ADDR: u8 = 4;
// TODO:
// * set up serial reader for trinket
-// * set up i²c interface for keyboard reports
// * and, finally, bluetooth
// Interrupt handler table.
@@ -53,7 +52,7 @@ fn main() -> ! {
let mut nvic = nrf52.NVIC;
let mut rtc_handler = rtc::setup(Rtc::new(nrf52.RTC0), Clocks::new(nrf52.CLOCK));
- let mut twis_handler = i2c::setup(Twis::new(
+ let (mut twis_reader, mut twis_handler) = i2c::setup(Twis::new(
I2C_ADDR,
nrf52.TWIS0,
twis::Pins {
@@ -68,27 +67,62 @@ fn main() -> ! {
.into_push_pull_output(Level::High)
.degrade();
let rxp = nrf52.pins.P0_25.into_floating_input().degrade();
- let mut uarte1 = uarte1(nrf52.UARTE1, txp, rxp);
+ let uarte1 = uarte1(nrf52.UARTE1, txp, rxp);
+ let (mut uarte1_reader, mut uarte1_handler) = uarte1::setup(uarte1);
HANDLERS.with_overrides(|hs| {
hs.register(0, &mut rtc_handler);
nvic.enable(Interrupt::RTC0);
hs.register(1, &mut twis_handler);
nvic.enable(Interrupt::SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0);
+ hs.register(2, &mut uarte1_handler);
+ nvic.enable(Interrupt::UARTE1);
info!("Bootstrap complete.");
let mut last_tick = rtc::millis();
last_tick -= last_tick % 1024;
+ let mut buf: [u8; 256] = [0; 256];
loop {
let tick = rtc::millis();
if tick >= last_tick + 1024 {
last_tick = tick;
last_tick -= last_tick % 1024;
- trace!(".");
- write!(uarte1, "!").expect("uarte1 write");
}
+ if !twis_reader.is_empty() {
+ let mut i = 0;
+ for b in &mut twis_reader {
+ if i == buf.len() {
+ info!("i²c data: {:?}", &buf[0..i]);
+ i = 0;
+ }
+ buf[i] = b;
+ i += 1;
+ }
+ info!("i²c data: {:?}", &buf[0..i]);
+ }
+
+ if !uarte1_reader.is_empty() {
+ let mut i = 0;
+ for b in &mut uarte1_reader {
+ if i == buf.len() {
+ info!(
+ "serial - {}: {}",
+ i,
+ core::str::from_utf8(&buf[0..i]).expect("utf8conv")
+ );
+ i = 0;
+ }
+ buf[i] = b;
+ i += 1;
+ }
+ info!(
+ "serial - {}: {}",
+ i,
+ core::str::from_utf8(&buf[0..i]).expect("utf8conv")
+ );
+ }
wfi();
}
});
@@ -132,3 +166,8 @@ fn RTC0() {
fn SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0() {
HANDLERS.call(1);
}
+
+#[interrupt]
+fn UARTE1() {
+ HANDLERS.call(2);
+}