diff --git a/src/at_commands.rs b/src/at_commands.rs new file mode 100644 index 0000000..609516c --- /dev/null +++ b/src/at_commands.rs @@ -0,0 +1,47 @@ +use core::fmt::Write; +use esp_hal::{Blocking, delay::Delay, gpio::Output, uart::Uart}; + +pub struct ATCommands<'a, 'd> { + pub rst: Output<'a>, + pub pwr_key: Output<'a>, + pub uart: Uart<'d, Blocking>, + pub delay: Delay, +} + +impl<'a, 'd> ATCommands<'a, 'd> { + pub fn init(&mut self) { + self.pwr_key.set_low(); + self.delay.delay_millis(1_000); + self.pwr_key.set_high(); + self.delay.delay_millis(1_000); + + self.rst.set_low(); + self.delay.delay_millis(1_000); + self.rst.set_high(); + self.delay.delay_millis(1_000); + + self.pwr_key.set_low(); + self.delay.delay_millis(1_000); + self.pwr_key.set_high(); + self.delay.delay_millis(1_000); + + log::info!("ATCommands Ready!"); + self.delay.delay_millis(1_000); + + let mut buffer = [0u8; 1024]; + let length = self.uart.read(&mut buffer).unwrap(); + log::info!("text: {:?}", str::from_utf8(&buffer[..length])); + } + + pub fn test(&mut self) { + self.uart.flush().unwrap(); + self.delay.delay_millis(250); + self.uart.write_str("ATI\r").unwrap(); + self.uart.flush().unwrap(); + self.delay.delay_millis(500); + log::info!("Wrote command"); + let mut buffer = [0u8; 1024]; + let length = self.uart.read(&mut buffer).unwrap(); + log::info!("text: {:?}", str::from_utf8(&buffer[..length])); + } +} diff --git a/src/main.rs b/src/main.rs index bcc49b1..09b98de 100644 --- a/src/main.rs +++ b/src/main.rs @@ -10,6 +10,8 @@ use core::fmt::Write; use alloc::str; +use embedded_hal::delay::DelayNs; +use esp_alloc::export::enumset::EnumSet; use esp_hal::{ clock::CpuClock, delay::Delay, @@ -23,12 +25,14 @@ use esp_hal::{ use esp_backtrace as _; use crate::{ + at_commands::ATCommands, display::{Display, Position, Rgb565, SetAddressMode}, font::FontRenderer, }; extern crate alloc; +mod at_commands; mod display; mod font; @@ -109,30 +113,10 @@ fn main() -> ! { font_renderer.render(&mut display, "Hello World!", Position::new(70, 220)); - let test_delay = Delay::new(); + let sim_rst = Output::new(peripherals.GPIO15, Level::High, OutputConfig::default()); + let sim_pwr_key = Output::new(peripherals.GPIO33, Level::High, OutputConfig::default()); - let mut sim_rst = Output::new(peripherals.GPIO15, Level::High, OutputConfig::default()); - let mut pwr_key = Output::new(peripherals.GPIO33, Level::High, OutputConfig::default()); - - pwr_key.set_low(); - test_delay.delay_millis(1_000); - pwr_key.set_high(); - test_delay.delay_millis(1_000); - - sim_rst.set_low(); - test_delay.delay_millis(1_000); - sim_rst.set_high(); - test_delay.delay_millis(1_000); - - pwr_key.set_low(); - test_delay.delay_millis(1_000); - pwr_key.set_high(); - test_delay.delay_millis(1_000); - - log::info!("Ready!"); - test_delay.delay_millis(1_000); - - let mut uart = Uart::new( + let uart = Uart::new( peripherals.UART2, uart::Config::default() .with_baudrate(115200) @@ -144,25 +128,15 @@ fn main() -> ! { .with_rx(peripherals.GPIO16) .with_tx(peripherals.GPIO17); - uart.flush().unwrap(); - test_delay.delay_millis(250); - uart.write_str("ATI\r").unwrap(); - uart.flush().unwrap(); - test_delay.delay_millis(250); - log::info!("Wrote command"); - let mut buffer = [0u8; 1024]; - let length = uart.read(&mut buffer).unwrap(); - log::info!("text: {:?}", str::from_utf8(&buffer[..length])); + let mut at_commands = ATCommands { + rst: sim_rst, + pwr_key: sim_pwr_key, + uart, + delay: Delay::new(), + }; - uart.flush().unwrap(); - test_delay.delay_millis(250); - uart.write_str("ATI\r").unwrap(); - uart.flush().unwrap(); - test_delay.delay_millis(250); - log::info!("Wrote command"); - let mut buffer = [0u8; 1024]; - let length = uart.read(&mut buffer).unwrap(); - log::info!("text: {:?}", str::from_utf8(&buffer[..length])); + at_commands.init(); + at_commands.test(); loop { let delay_start = Instant::now();