Struct cansat_gps::Gps

source ·
pub struct Gps<Serial, const MAX_NMEA_LEN: usize> { /* private fields */ }
Expand description

Gps driver.

It implements double buffering to ensure that you can always read the latest message received. MAX_NMEA_LEN is a maximum length of an NMEA message including $ and [CR][LF].

Examples

use cansat_gps::Gps;
use heapless::Vec;

let mut gps: Gps<_, 82> = Gps::new(uart);

let msg = loop {
    let (b, is_new_msg) = gps.read_serial().unwrap();
     
    if is_new_msg {
        break gps.last_nmea().unwrap();
    }
};

Implementations§

source§

impl<Serial, const MAX_NMEA_LEN: usize> Gps<Serial, MAX_NMEA_LEN>

source

pub fn new(serial: Serial) -> Self

source

pub fn last_nmea(&self) -> Option<Vec<u8, MAX_NMEA_LEN>>

Reads last received NMEA message.

source§

impl<Serial, const MAX_NMEA_LEN: usize> Gps<Serial, MAX_NMEA_LEN>where Serial: Read,

source

pub fn read_serial(&mut self) -> Result<(u8, bool), Error<Serial::Error>>

Reads a single character from serial in a blocking mode and stores it in an internal buffer. On success, returns the read byte and a flag indicating whether a message was terminated.

source§

impl<Serial, const MAX_NMEA_LEN: usize> Gps<Serial, MAX_NMEA_LEN>where Serial: Write,

source

pub fn send(&mut self, input: &[u8]) -> Result<(), Error<Serial::Error>>

Auto Trait Implementations§

§

impl<Serial, const MAX_NMEA_LEN: usize> RefUnwindSafe for Gps<Serial, MAX_NMEA_LEN>where Serial: RefUnwindSafe,

§

impl<Serial, const MAX_NMEA_LEN: usize> Send for Gps<Serial, MAX_NMEA_LEN>where Serial: Send,

§

impl<Serial, const MAX_NMEA_LEN: usize> Sync for Gps<Serial, MAX_NMEA_LEN>where Serial: Sync,

§

impl<Serial, const MAX_NMEA_LEN: usize> Unpin for Gps<Serial, MAX_NMEA_LEN>where Serial: Unpin,

§

impl<Serial, const MAX_NMEA_LEN: usize> UnwindSafe for Gps<Serial, MAX_NMEA_LEN>where Serial: UnwindSafe,

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.