1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
#![feature(rustc_private)] #![no_std] #[macro_use] extern crate nb; mod buffer; pub mod client; mod error; mod parser; mod traits; pub mod utils; pub type MaxCommandLen = heapless::consts::U60; pub type MaxResponseLen = heapless::consts::U60; pub type MaxResponseLines = heapless::consts::U8; pub use self::buffer::Buffer; pub use self::error::Error; pub use self::parser::ATParser; pub use self::traits::{ATCommandInterface, ATInterface}; #[cfg(test)] mod tests; use embedded_hal::{serial, timer::CountDown}; use heapless::{consts, spsc::Queue}; type CmdQueue<C> = Queue<C, consts::U10, u8>; type RespQueue<R> = Queue<Result<R, error::Error>, consts::U10, u8>; pub fn new<Serial, C, R, T>( queues: (&'static mut CmdQueue<C>, &'static mut RespQueue<R>), serial: Serial, timer: T, default_timeout: u32, ) -> (client::ATClient<T, C, R>, parser::ATParser<Serial, C, R>) where Serial: serial::Write<u8> + serial::Read<u8>, C: ATCommandInterface<R>, R: core::fmt::Debug, T: CountDown, { let (wifi_cmd_p, wifi_cmd_c) = queues.0.split(); let (wifi_resp_p, wifi_resp_c) = queues.1.split(); let client = client::ATClient::new((wifi_cmd_p, wifi_resp_c), default_timeout, timer); let parser = ATParser::new(serial, (wifi_cmd_c, wifi_resp_p)); (client, parser) }