X-Git-Url: http://git.code-monkey.de/?p=gps-watch.git;a=blobdiff_plain;f=src%2Fcommon%2Fgps.rs;h=178e55198879edffbd1fb2dec11947579320daa6;hp=64772c775189526e06bec8cb8b604e8e7055c427;hb=2c21f04d5a34595ced62860d8273dec306f6a4d6;hpb=22de17136c8c5692e83d5d15ce09528d9afd3e13 diff --git a/src/common/gps.rs b/src/common/gps.rs index 64772c7..178e551 100644 --- a/src/common/gps.rs +++ b/src/common/gps.rs @@ -21,7 +21,6 @@ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -use ringbuf::Ringbuf; use systick; enum ParseState { @@ -63,20 +62,6 @@ fn to_lower(c: u8) -> u8 { c | 0x20 } -fn try_read() -> Option { - extern { - static mut uart0_rx_buf: Ringbuf; - } - - unsafe { - if uart0_rx_buf.is_empty() { - None - } else { - Some(uart0_rx_buf.read()) - } - } -} - fn parse_coordinate(s: &[u8]) -> i32 { // Find the position of the decimal separator for the minutes. let dot_position = s.iter().enumerate().find(|(_, &c)| { @@ -205,10 +190,12 @@ impl Gps { } } - pub fn update(&mut self, tap: &mut TimeAndPos) -> bool { + pub fn update(&mut self, tap: &mut TimeAndPos, mut read_func: F) -> bool + where F: FnMut() -> Option + { let hexdigits = b"0123456789abcdef"; - while let Some(received) = try_read() { + while let Some(received) = read_func() { if received == b'$' { self.state = ParseState::InPacket; self.offset = 0;