Add sending SMS

This commit is contained in:
Sofia 2026-05-15 18:03:15 +03:00
parent 1ca3a3acc4
commit 325d707685
2 changed files with 38 additions and 5 deletions

View File

@ -48,6 +48,23 @@ impl<'a, 'd> ATCommands<'a, 'd> {
self.read_response() self.read_response()
} }
pub fn raw_two_part_command(&mut self, command: String, additional: String) -> String {
self.flush_rx();
self.uart.flush().unwrap();
self.delay.delay_millis(250);
self.uart.write_str(&(command.clone() + "\r")).unwrap();
self.uart.flush().unwrap();
self.delay.delay_millis(500);
log::info!("Wrote command {}", command);
log::info!("{}", self.flush_rx());
self.uart.write_str(&(additional.clone() + "\x1A")).unwrap();
self.uart.flush().unwrap();
self.read_response()
}
fn read_response(&mut self) -> String { fn read_response(&mut self) -> String {
let mut buffer = [0u8; 1024]; let mut buffer = [0u8; 1024];
@ -55,17 +72,20 @@ impl<'a, 'd> ATCommands<'a, 'd> {
while { while {
let parts: Vec<&str> = contents.split("\r\n").collect(); let parts: Vec<&str> = contents.split("\r\n").collect();
!RESPONSES.iter().any(|r| parts.contains(r)) !RESPONSES
.iter()
.any(|r| parts.iter().any(|p| p.contains(r)))
} { } {
let length = self.uart.read(&mut buffer).unwrap(); let length = self.uart.read(&mut buffer).unwrap();
contents += str::from_utf8(&buffer[..length]).unwrap(); contents += str::from_utf8(&buffer[..length]).unwrap();
log::info!("Contents so far: {}", contents);
} }
let parts: Vec<&str> = contents.split("\r\n").collect(); let parts: Vec<&str> = contents.split("\r\n").collect();
let (idx, _) = parts let (idx, _) = parts
.iter() .iter()
.enumerate() .enumerate()
.find(|(_, part)| RESPONSES.contains(part)) .find(|(_, part)| RESPONSES.iter().any(|r| part.contains(r)))
.unwrap(); .unwrap();
parts parts
.into_iter() .into_iter()
@ -74,7 +94,7 @@ impl<'a, 'd> ATCommands<'a, 'd> {
.join("\n") .join("\n")
} }
fn flush_rx(&mut self) -> String { pub fn flush_rx(&mut self) -> String {
let mut buffer = [0u8; 1024]; let mut buffer = [0u8; 1024];
let mut contents = String::new(); let mut contents = String::new();

View File

@ -135,8 +135,21 @@ fn main() -> ! {
delay: Delay::new(), delay: Delay::new(),
}; };
at_commands.init(); // at_commands.init();
log::info!("{}", at_commands.raw_command("ATI".to_owned())); // log::info!("{}", at_commands.raw_command("ATI".to_owned()));
// log::info!("{}", at_commands.raw_command("AT+CMGF?".to_owned()));
// log::info!("{}", at_commands.raw_command("AT+CPIN=1234".to_owned()));
// log::info!("{}", at_commands.raw_command("AT+CPIN?".to_owned()));
// log::info!("{}", at_commands.raw_command("AT+CMGF=1".to_owned()));
// log::info!("{}", at_commands.raw_command("AT+CSCS=?".to_owned()));
// log::info!(
// "{}",
// at_commands.raw_two_part_command(
// "AT+CMGS=\"number\"".to_owned(),
// "hello".to_owned()
// )
// );
loop { loop {
let delay_start = Instant::now(); let delay_start = Instant::now();