implement commands and turn everything on

Turn the modem on by setting appropriate pins to high/low.

Implemented all commands from
https://github.com/pythings/Drivers/blob/master/SIM800L.py#L116-L143 in Rust.

Moved AP values to a config module. Maybe create a build environment for this
later on, we'll need to support multiple telecom providers for sure ...

Fix the write/read implementation for the Serial. Match on end and handle the
timeout properly for every command.
This commit is contained in:
Vladan Popovic 2022-06-16 01:06:32 +02:00
parent 737e29f108
commit 43424ba997
4 changed files with 354 additions and 98 deletions

219
src/command.rs Normal file
View file

@ -0,0 +1,219 @@
#[allow(dead_code)]
use std::time::Duration;
pub struct Command {
pub text: String,
pub timeout: Duration,
pub ends_with: Option<String>,
}
impl Command {
pub fn initgprs() -> Command {
Command {
text: "AT+SAPBR=3,1,\"Contype\",\"GPRS\"".to_owned(),
timeout: Duration::from_millis(3),
ends_with: Some("OK".to_owned()),
}
}
pub fn modeminfo() -> Command {
Command {
text: "ATI".to_owned(),
timeout: Duration::from_millis(3),
ends_with: Some("OK".to_owned()),
}
}
pub fn fwrevision() -> Command {
Command {
text: "AT+CGMR".to_owned(),
timeout: Duration::from_millis(3),
ends_with: Some("OK".to_owned()),
}
}
pub fn battery() -> Command {
Command {
text: "AT+CBC".to_owned(),
timeout: Duration::from_millis(3),
ends_with: Some("OK".to_owned()),
}
}
pub fn scan() -> Command {
Command {
text: "AT+COPS=?".to_owned(),
timeout: Duration::from_millis(60),
ends_with: Some("OK".to_owned()),
}
}
pub fn network() -> Command {
Command {
text: "AT+COPS?".to_owned(),
timeout: Duration::from_millis(3),
ends_with: Some("OK".to_owned()),
}
}
pub fn signal() -> Command {
Command {
text: "AT+CSQ".to_owned(),
timeout: Duration::from_millis(3),
ends_with: Some("OK".to_owned()),
}
}
pub fn checkreg() -> Command {
Command {
text: "AT+CREG?".to_owned(),
timeout: Duration::from_millis(3),
ends_with: None,
}
}
pub fn opengprs() -> Command {
Command {
text: "AT+SAPBR=1,1".to_owned(),
timeout: Duration::from_millis(3),
ends_with: Some("OK".to_owned()),
}
}
pub fn getbear() -> Command {
Command {
text: "AT+SAPBR=2,1".to_owned(),
timeout: Duration::from_millis(3),
ends_with: Some("OK".to_owned()),
}
}
pub fn inithttp() -> Command {
Command {
text: "AT+HTTPINIT".to_owned(),
timeout: Duration::from_millis(3),
ends_with: Some("OK".to_owned()),
}
}
pub fn sethttp() -> Command {
Command {
text: "AT+HTTPPARA=\"CID\",1".to_owned(),
timeout: Duration::from_millis(3),
ends_with: Some("OK".to_owned()),
}
}
pub fn checkssl() -> Command {
Command {
text: "AT+CIPSSL=?".to_owned(),
timeout: Duration::from_millis(3),
ends_with: Some("OK".to_owned()),
}
}
pub fn enablessl() -> Command {
Command {
text: "AT+HTTPSSL=1".to_owned(),
timeout: Duration::from_millis(3),
ends_with: Some("OK".to_owned()),
}
}
pub fn disablessl() -> Command {
Command {
text: "AT+HTTPSSL=0".to_owned(),
timeout: Duration::from_millis(3),
ends_with: Some("OK".to_owned()),
}
}
pub fn initurl() -> Command {
Command {
text: "AT+HTTPPARA=\"URL\",\"{}\"".to_owned(),
timeout: Duration::from_millis(3),
ends_with: Some("OK".to_owned()),
}
}
pub fn doget() -> Command {
Command {
text: "AT+HTTPACTION=0".to_owned(),
timeout: Duration::from_millis(3),
ends_with: Some("+HTTPACTION".to_owned()),
}
}
pub fn setcontent() -> Command {
Command {
text: "AT+HTTPPARA=\"CONTENT\",\"{}\"".to_owned(),
timeout: Duration::from_millis(3),
ends_with: Some("OK".to_owned()),
}
}
pub fn postlen() -> Command {
Command {
text: "AT+HTTPDATA={}5000".to_owned(),
timeout: Duration::from_millis(3),
ends_with: Some("DOWNLOAD".to_owned()),
}
}
pub fn dopost() -> Command {
Command {
text: "AT+HTTPACTION=1".to_owned(),
timeout: Duration::from_millis(3),
ends_with: Some("+HTTPACTION".to_owned()),
}
}
pub fn getdata() -> Command {
Command {
text: "AT+HTTPREAD".to_owned(),
timeout: Duration::from_millis(3),
ends_with: Some("OK".to_owned()),
}
}
pub fn closehttp() -> Command {
Command {
text: "AT+HTTPTERM".to_owned(),
timeout: Duration::from_millis(3),
ends_with: Some("OK".to_owned()),
}
}
pub fn closebear() -> Command {
Command {
text: "AT+SAPBR=0,1".to_owned(),
timeout: Duration::from_millis(3),
ends_with: Some("OK".to_owned()),
}
}
pub fn setapn(apn: &str) -> Command {
Command {
text: format!("AT+SAPBR=3,1,\"APN\",\"{}\"", apn),
timeout: Duration::from_millis(3),
ends_with: Some("OK".to_owned()),
}
}
pub fn setuser(user: &str) -> Command {
Command {
text: format!("AT+SAPBR=3,1,\"USER\",\"{}\"", user),
timeout: Duration::from_millis(3),
ends_with: Some("OK".to_owned()),
}
}
pub fn setpwd(password: &str) -> Command {
Command {
text: format!("AT+SAPBR=3,1,\"PWD\",\"{}\"", password),
timeout: Duration::from_millis(3),
ends_with: Some("OK".to_owned()),
}
}
}