1 #ifndef __MARNAV__IO__SEATALK_READER__HPP__
2 #define __MARNAV__IO__SEATALK_READER__HPP__
4 #include <marnav/io/device.hpp>
5 #include <marnav/seatalk/message.hpp>
11 /// This class reads SeaTalk messages from a device. Normally this would
12 /// be a serial character device (e.g. /dev/ttyS0 or /dev/ttyUSB0).
14 /// In order to use this SeaTalk reader, it must be subclassed.
16 /// @example read_seatalk.cpp
20 virtual ~seatalk_reader();
22 seatalk_reader() = delete;
23 seatalk_reader(std::unique_ptr
<device
> && dev
);
24 seatalk_reader(const seatalk_reader
&) = delete;
25 seatalk_reader(seatalk_reader
&&) = default;
27 seatalk_reader
& operator=(const seatalk_reader
&) = delete;
28 seatalk_reader
& operator=(seatalk_reader
&&) = default;
32 uint32_t get_collisions() const { return ctx
.collisions
; }
35 virtual void process_message(const seatalk::raw
&) = 0;
38 enum class State
{ READ
, ESCAPE
, PARITY
};
44 uint8_t data
[seatalk::MAX_MESSAGE_SIZE
];
52 uint8_t parity(uint8_t a
) const;
53 void write_cmd(uint8_t c
);
54 void write_data(uint8_t c
);
55 void process_seatalk();
59 std::unique_ptr
<device
> dev
; ///< Device to read data from.