Read AT Command response properly
This commit is contained in:
parent
ad86af1b74
commit
851955e3fc
@ -1,6 +1,10 @@
|
|||||||
|
use alloc::string::String;
|
||||||
|
use alloc::vec::Vec;
|
||||||
use core::fmt::Write;
|
use core::fmt::Write;
|
||||||
use esp_hal::{Blocking, delay::Delay, gpio::Output, uart::Uart};
|
use esp_hal::{Blocking, delay::Delay, gpio::Output, uart::Uart};
|
||||||
|
|
||||||
|
static RESPONSES: [&'static str; 3] = ["OK", "ERROR", "DOWNLOAD"];
|
||||||
|
|
||||||
pub struct ATCommands<'a, 'd> {
|
pub struct ATCommands<'a, 'd> {
|
||||||
pub rst: Output<'a>,
|
pub rst: Output<'a>,
|
||||||
pub pwr_key: Output<'a>,
|
pub pwr_key: Output<'a>,
|
||||||
@ -40,8 +44,33 @@ impl<'a, 'd> ATCommands<'a, 'd> {
|
|||||||
self.uart.flush().unwrap();
|
self.uart.flush().unwrap();
|
||||||
self.delay.delay_millis(500);
|
self.delay.delay_millis(500);
|
||||||
log::info!("Wrote command");
|
log::info!("Wrote command");
|
||||||
|
let response = self.read_response();
|
||||||
|
log::info!("Response: {}", response);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn read_response(&mut self) -> String {
|
||||||
let mut buffer = [0u8; 1024];
|
let mut buffer = [0u8; 1024];
|
||||||
let length = self.uart.read(&mut buffer).unwrap();
|
|
||||||
log::info!("text: {:?}", str::from_utf8(&buffer[..length]));
|
let mut contents = String::new();
|
||||||
|
|
||||||
|
while {
|
||||||
|
let parts: Vec<&str> = contents.split("\r\n").collect();
|
||||||
|
!RESPONSES.iter().any(|r| parts.contains(r))
|
||||||
|
} {
|
||||||
|
let length = self.uart.read(&mut buffer).unwrap();
|
||||||
|
contents += str::from_utf8(&buffer[..length]).unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
|
let parts: Vec<&str> = contents.split("\r\n").collect();
|
||||||
|
let (idx, _) = parts
|
||||||
|
.iter()
|
||||||
|
.enumerate()
|
||||||
|
.find(|(_, part)| RESPONSES.contains(part))
|
||||||
|
.unwrap();
|
||||||
|
parts
|
||||||
|
.into_iter()
|
||||||
|
.take(idx + 1)
|
||||||
|
.collect::<Vec<_>>()
|
||||||
|
.join("\n")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user