1#![doc(html_logo_url = "https://raw.githubusercontent.com/rtk-rs/.github/master/logos/logo2.jpg")]
2#![doc = include_str!("../README.md")]
3#![cfg_attr(docsrs, feature(doc_cfg))]
4
5mod errors;
15pub use errors::Error;
16
17#[cfg(feature = "gps")]
18mod gps;
19
20#[cfg(feature = "gps")]
21pub use gps::*;
22
23#[cfg(test)]
24mod tests;
25
26#[cfg(feature = "gps")]
32pub(crate) fn twos_complement(value: u32, bits_mask: u32, sign_bit_mask: u32) -> i32 {
33 let value = value & bits_mask;
34
35 let signed = (value & sign_bit_mask) > 0;
36
37 if signed {
38 (value | !bits_mask) as i32
39 } else {
40 value as i32
41 }
42}
43
44#[cfg(test)]
45#[cfg(feature = "gps")]
46mod test {
47 use crate::twos_complement;
48
49 #[test]
50 fn test_twos_complement() {
51 let value = 0x3fff;
52 let parsed = twos_complement(value, 0x3fff, 0x2000);
53 assert_eq!(parsed, 0xffffffffu32 as i32);
54 }
55}