1 #ifndef MARNAV__AIS__MESSAGE_08__HPP
2 #define MARNAV__AIS__MESSAGE_08__HPP
4 #include <marnav/ais/message.hpp>
5 #include <marnav/utils/mmsi.hpp>
11 class binary_001_11
; // forward
12 class binary_200_10
; // forward
14 /// @brief Binary Broadcast Message
15 class message_08
: public message
17 friend class detail::factory
;
20 constexpr static message_id ID
= message_id::binary_broadcast_message
;
21 constexpr static std::size_t SIZE_BITS_HEAD
= 56u;
22 constexpr static std::size_t SIZE_BITS_MAX
= 1008u;
25 message_08(const message_08
&) = default;
26 message_08
& operator=(const message_08
&) = default;
27 message_08(message_08
&&) = default;
28 message_08
& operator=(message_08
&&) = default;
31 message_08(const raw
& bits
);
32 void read_data(const raw
& bits
);
33 virtual raw
get_data() const override
;
37 bitset_value
< 6, 2, uint32_t> repeat_indicator
= 0;
38 bitset_value
< 8, 30, uint32_t> mmsi
= 0;
39 bitset_value
<40, 10, uint32_t> dac
= 0; ///< Designate Area Cod3
40 bitset_value
<50, 6, uint32_t> fid
= 0; ///< Functional ID
43 // unfortuanately std::variant is C++17, therefore we need to store
44 // the binary payload and parse it later.
48 uint32_t get_repeat_indicator() const noexcept
{ return repeat_indicator
; }
49 utils::mmsi
get_mmsi() const noexcept
{ return utils::mmsi
{mmsi
}; }
50 uint32_t get_dac() const noexcept
{ return dac
; }
51 uint32_t get_fid() const noexcept
{ return fid
; }
54 void read_binary(binary_001_11
& m
) const;
55 void read_binary(binary_200_10
& m
) const;
57 void set_repeat_indicator(uint32_t t
) noexcept
{ repeat_indicator
= t
; }
58 void set_mmsi(const utils::mmsi
& t
) noexcept
{ mmsi
= t
; }
59 void set_dac(uint32_t t
) noexcept
{ dac
= t
; }
60 void set_fid(uint32_t t
) noexcept
{ fid
= t
; }
63 void write_binary(const binary_001_11
& m
);
64 void write_binary(const binary_200_10
& m
);