wspr-beacon/src/application/mod.rs

56 lines
1.4 KiB
Rust
Raw Normal View History

2021-04-11 17:23:17 +02:00
use cortex_m::prelude::*;
2021-04-12 00:06:18 +02:00
use embedded_hal::digital::v2::{OutputPin, ToggleableOutputPin};
use nb::{self, block};
use nmea0183::{ParseResult, Parser};
2021-04-11 17:23:17 +02:00
use stm32f1xx_hal::{
delay::Delay,
2021-04-12 00:06:18 +02:00
gpio::{gpiob, gpioc, Alternate, Floating, Input, Output, PushPull},
prelude::*,
serial::Serial,
stm32,
2021-04-11 17:23:17 +02:00
};
mod setup;
//use crate::exit;
pub use setup::setup;
pub struct App {
delay: Delay,
board_led: gpioc::PC13<Output<PushPull>>,
2021-04-12 00:06:18 +02:00
serial: Serial<
stm32::USART3,
(
gpiob::PB10<Alternate<PushPull>>,
gpiob::PB11<Input<Floating>>,
),
>,
2021-04-11 17:23:17 +02:00
}
impl App {
pub fn run(mut self) -> ! {
defmt::info!("Application Startup!");
2021-04-12 00:06:18 +02:00
let mut parser = Parser::new();
2021-04-11 17:23:17 +02:00
2021-04-12 00:06:18 +02:00
loop {
match self.serial.read() {
Ok(byte) => {
self.board_led.toggle().unwrap();
if let Some(result) = parser.parse_from_byte(byte) {
match result {
Ok(ParseResult::GGA(Some(_))) => defmt::info!("Got GGA"), // Got GGA sentence
Ok(_) => {} // Some other sentences..
Err(_) => {} // Got parse error
}
}
}
Err(nb::Error::WouldBlock) => {}
Err(nb::Error::Other(_)) => {}
}
2021-04-11 17:23:17 +02:00
}
//exit();
}
}