commit 95fdc03e2bc94758e2b605be22fdcbc6ee14143d Author: Thomas Klaehn Date: Tue Jun 22 06:46:37 2021 +0200 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..dfa32fc --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,45 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "lldb", + "request": "launch", + "name": "Debug executable 'gps_logger'", + "cargo": { + "args": [ + "build", + "--bin=gps_logger", + "--package=gps_logger" + ], + "filter": { + "name": "gps_logger", + "kind": "bin" + } + }, + "args": [], + "cwd": "${workspaceFolder}" + }, + { + "type": "lldb", + "request": "launch", + "name": "Debug unit tests in executable 'gps_logger'", + "cargo": { + "args": [ + "test", + "--no-run", + "--bin=gps_logger", + "--package=gps_logger" + ], + "filter": { + "name": "gps_logger", + "kind": "bin" + } + }, + "args": [], + "cwd": "${workspaceFolder}" + } + ] +} \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..c0ab748 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,156 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "autocfg" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" + +[[package]] +name = "bitvec" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "470fbd40e959c961f16841fbf96edbbdcff766ead89a1ae2b53d22852be20998" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chrono" +version = "0.4.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" +dependencies = [ + "libc", + "num-integer", + "num-traits", + "time", + "winapi", +] + +[[package]] +name = "funty" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1847abb9cb65d566acd5942e94aea9c8f547ad02c98e1649326fc0e8910b8b1e" + +[[package]] +name = "gps_logger" +version = "0.1.0" +dependencies = [ + "nmea-parser", +] + +[[package]] +name = "libc" +version = "0.2.97" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12b8adadd720df158f4d70dfe7ccc6adb0472d7c55ca83445f6a5ab3e36f8fb6" + +[[package]] +name = "log" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "nmea-parser" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9372421199519a4d565acf65090a2cad7b6c669d55f4acf045998f8dd137625f" +dependencies = [ + "bitvec", + "chrono", + "log", + "num-traits", +] + +[[package]] +name = "num-integer" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +dependencies = [ + "autocfg", +] + +[[package]] +name = "radium" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "643f8f41a8ebc4c5dc4515c82bb8abd397b527fc20fd681b7c011c2aee5d44fb" + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "time" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" +dependencies = [ + "libc", + "wasi", + "winapi", +] + +[[package]] +name = "wasi" +version = "0.10.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "wyz" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85e60b0d1b5f99db2556934e21937020776a5d31520bf169e851ac44e6420214" diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..2c552a0 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "gps_logger" +version = "0.1.0" +edition = "2018" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +nmea-parser = "0.8.0" diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..6b33374 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,60 @@ +use std::io::prelude::*; +use std::io::BufReader; +use std::fs::File; +use nmea_parser::*; + +fn main() -> std::io::Result<()> { + let f = File::open("/dev/ttyACM0")?; + let mut reader = BufReader::new(f); + + let mut line = String::new(); + + let mut parser = NmeaParser::new(); + loop { + let len = reader.read_line(&mut line)?; + if len > 1 { + match parser.parse_sentence(&line) { + Ok(msg) => { + match msg { + ParsedMessage::Gga(gga) => { + println!("Source: {}", gga.source); + println!("Latitude: {:.3}°", gga.latitude.unwrap()); + println!("Longitude: {:.3}°", gga.longitude.unwrap()); + match gga.satellite_count { + Some(sat_count) => { + println!("Satellite count: {}", sat_count); + }, + None => { + println!("No satellites in sight"); + } + } + match gga.timestamp { + Some(timestamp) => { + println!("Timestamp: {}", timestamp); + }, + None => { + println!("No timestamp + ") + } + } + }, + // ParsedMessage::Gsa(gsa) => { + // println!("{}", gsa.mode1_automatic) + // } + _ => { + } + } + }, + Err(_err) => {} + } + } + line.clear(); + } +} + +// $GNRMC,204607.00,A,5222.24380,N,01351.13504,E,0.103,,210621,,,A*62 +// $GNVTG,,T,,M,0.103,N,0.191,K,A*36 +// $GNGGA,204607.00,5222.24380,N,01351.13504,E,1,08,1.29,29.2,M,41.8,M,,*7C +// $GNGSA,A,3,04,09,06,03,07,26,,,,,,,1.90,1.29,1.39*1E +// $GPGSV,4,1,13,02,40,283,19,03,08,126,08,04,39,073,27,06,44,232,31*77 +// $GNGLL,5222.24380,N,01351.13504,E,204607.00,A,A*7F