use std::time::Duration; pub struct Command { pub text: String, pub timeout: Duration, pub contains: Option, } impl Command { pub fn modem_info() -> Command { Command { text: "ATI".to_string(), timeout: Duration::from_millis(6000), contains: Some("+CIEV".to_string()), } } pub fn fw_revision() -> Command { Command { text: "AT+CGMR".to_string(), timeout: Duration::from_millis(3000), contains: Some("OK".to_string()), } } pub fn battery() -> Command { Command { text: "AT+CBC".to_string(), timeout: Duration::from_millis(3000), contains: Some("OK".to_string()), } } pub fn scan() -> Command { Command { text: "AT+COPS=?".to_string(), timeout: Duration::from_millis(60000), contains: Some("OK".to_string()), } } pub fn network() -> Command { Command { text: "AT+COPS?".to_string(), timeout: Duration::from_millis(3000), contains: Some("OK".to_string()), } } pub fn signal() -> Command { Command { text: "AT+CSQ".to_string(), timeout: Duration::from_millis(3000), contains: Some("OK".to_string()), } } pub fn check_reg() -> Command { Command { text: "AT+CREG?".to_string(), timeout: Duration::from_millis(3000), contains: None, } } pub fn gprs_init() -> Command { Command { text: "AT+SAPBR=3,1,\"Contype\",\"GPRS\"".to_string(), timeout: Duration::from_millis(3000), contains: Some("OK".to_string()), } } pub fn gprs_open() -> Command { Command { text: "AT+SAPBR=1,1".to_string(), timeout: Duration::from_millis(3000), contains: Some("OK".to_string()), } } pub fn gprs_set_apn(apn: &str) -> Command { Command { text: format!("AT+SAPBR=3,1,\"APN\",\"{}\"", apn), timeout: Duration::from_millis(3000), contains: Some("OK".to_string()), } } pub fn gprs_set_user(user: &str) -> Command { Command { text: format!("AT+SAPBR=3,1,\"USER\",\"{}\"", user), timeout: Duration::from_millis(3000), contains: Some("OK".to_string()), } } pub fn gprs_set_pwd(password: &str) -> Command { Command { text: format!("AT+SAPBR=3,1,\"PWD\",\"{}\"", password), timeout: Duration::from_millis(3000), contains: Some("OK".to_string()), } } pub fn getbear() -> Command { Command { text: "AT+SAPBR=2,1".to_string(), timeout: Duration::from_millis(3000), contains: Some("OK".to_string()), } } pub fn get_local_ip_addr() -> Command { Command { text: "AT+CIFSR".to_string(), timeout: Duration::from_millis(3000), contains: Some("OK".to_string()), } } pub fn ping(domain: &str) -> Command { Command { text: format!("AT+CIPPING=\"{}\"", domain), timeout: Duration::from_millis(3000), contains: Some("OK".to_string()), } } pub fn http_init() -> Command { Command { text: "AT+HTTPINIT".to_string(), timeout: Duration::from_millis(3000), contains: Some("OK".to_string()), } } pub fn http_set() -> Command { Command { text: "AT+HTTPPARA=\"CID\",1".to_string(), timeout: Duration::from_millis(3000), contains: Some("OK".to_string()), } } pub fn http_enable_ssl() -> Command { Command { text: "AT+HTTPSSL=1".to_string(), timeout: Duration::from_millis(3000), contains: Some("OK".to_string()), } } pub fn http_disable_ssl() -> Command { Command { text: "AT+HTTPSSL=0".to_string(), timeout: Duration::from_millis(3000), contains: Some("OK".to_string()), } } pub fn http_init_url() -> Command { Command { text: "AT+HTTPPARA=\"URL\",\"{}\"".to_string(), timeout: Duration::from_millis(3000), contains: Some("OK".to_string()), } } pub fn http_get() -> Command { Command { text: "AT+HTTPACTION=0".to_string(), timeout: Duration::from_millis(3000), contains: Some("+HTTPACTION".to_string()), } } pub fn http_set_content() -> Command { Command { text: "AT+HTTPPARA=\"CONTENT\",\"{}\"".to_string(), timeout: Duration::from_millis(3000), contains: Some("OK".to_string()), } } pub fn http_post_len() -> Command { Command { text: "AT+HTTPDATA={}5000".to_string(), timeout: Duration::from_millis(3000), contains: Some("DOWNLOAD".to_string()), } } pub fn http_post() -> Command { Command { text: "AT+HTTPACTION=1".to_string(), timeout: Duration::from_millis(3000), contains: Some("+HTTPACTION".to_string()), } } pub fn http_get_data() -> Command { Command { text: "AT+HTTPREAD".to_string(), timeout: Duration::from_millis(3000), contains: Some("OK".to_string()), } } pub fn closehttp() -> Command { Command { text: "AT+HTTPTERM".to_string(), timeout: Duration::from_millis(3000), contains: Some("OK".to_string()), } } pub fn closebear() -> Command { Command { text: "AT+SAPBR=0,1".to_string(), timeout: Duration::from_millis(3000), contains: Some("OK".to_string()), } } pub fn probe() -> Command { Command { text: "AT".to_string(), timeout: Duration::from_millis(3000), contains: Some("+CIEV".to_string()), } } pub fn is_gprs_attached() -> Command { Command { text: "AT+CGATT?".to_string(), timeout: Duration::from_millis(1000), contains: Some("OK".to_string()), } } pub fn tcp_ssl_set(enabled: bool) -> Command { Command { text: format!("AT+CIPSSL={}", if enabled { 1 } else { 0 }), timeout: Duration::from_millis(3000), contains: Some("OK".to_string()), } } pub fn tcp_ssl_enable() -> Command { Command { text: "AT+CIPSSL=1".to_string(), timeout: Duration::from_millis(3000), contains: Some("OK".to_string()), } } pub fn tcp_ssl_check() -> Command { Command { text: "AT+CIPSSL=?".to_string(), timeout: Duration::from_millis(3000), contains: Some("OK".to_string()), } } pub fn tcp_connect(addr: &str, port: u16) -> Command { Command { text: format!("AT+CIPSTART=\"TCP\",\"{}\",\"{}\"", addr, port), timeout: Duration::from_millis(5000), contains: Some("CONNECT OK".to_string()), } } pub fn tcp_send_size(size: usize) -> Command { Command { text: format!("AT+CIPSEND={}", size), timeout: Duration::from_millis(3000), contains: Some("OK".to_string()), } } pub fn tcp_transparent_mode() -> Command { Command { text: "AT+CIPMODE=1".to_string(), timeout: Duration::from_millis(3000), contains: Some("OK".to_string()), } } pub fn tcp_exit_data_mode() -> Command { Command { text: "ATO".to_string(), timeout: Duration::from_millis(3000), contains: Some("CLOSED".to_string()), } } pub fn tcp_send() -> Command { Command { text: "AT+CIPSEND".to_string(), timeout: Duration::from_millis(3000), contains: Some(">".to_string()), } } pub fn tcp_set_quick_mode(quick_mode: bool) -> Command { Command { text: format!("AT+CIPQSEND={}", quick_mode as u8), timeout: Duration::from_millis(3000), contains: Some("OK".to_string()), } } pub fn tcp_receive(size: usize) -> Command { Command { text: format!("AT+CIPRXGET=2,{}", size), timeout: Duration::from_millis(3000), contains: Some("OK".to_string()), } } pub fn tcp_receive_reply_len() -> Command { Command { text: "AT+CIPRXGET=4".to_string(), timeout: Duration::from_millis(3000), contains: Some("OK".to_string()), } } pub fn tcp_set_manual_receive() -> Command { Command { text: "AT+CIPRXGET=1".to_string(), timeout: Duration::from_millis(3000), contains: Some("OK".to_string()), } } pub fn tcp_close() -> Command { Command { text: "AT+CIPCLOSE=0".to_string(), timeout: Duration::from_millis(3000), contains: Some("CLOSE OK".to_string()), } } }