Vanetza
 
Loading...
Searching...
No Matches
dcc_mco_field.cpp
1#include "dcc_mco_field.hpp"
2#include <algorithm>
3#include <cmath>
4
5namespace vanetza
6{
7namespace geonet
8{
9
10DccMcoField::DccMcoField() :
11 m_cbr_l0_hop(0), m_cbr_l1_hop(0), m_output_power(0)
12{
13}
14
15DccMcoField::DccMcoField(uint32_t field)
16{
17 m_cbr_l0_hop = field >> 24;
18 m_cbr_l1_hop = field >> 16;
19 m_output_power = field >> 11;
20}
21
22DccMcoField::operator uint32_t() const
23{
24 uint32_t field = m_cbr_l0_hop;
25
26 field <<= 8;
27 field |= m_cbr_l1_hop;
28
29 field <<= 5;
30 field |= m_output_power.raw();
31
32 field <<= 11;
33 return field;
34}
35
36void DccMcoField::local_cbr(const ChannelLoad& cbr)
37{
38 m_cbr_l0_hop = std::floor(cbr.value() * 255.0);
39}
40
41dcc::ChannelLoad DccMcoField::local_cbr() const
42{
43 return ChannelLoad(m_cbr_l0_hop / 255.0);
44}
45
46void DccMcoField::neighbour_cbr(const ChannelLoad& cbr)
47{
48 m_cbr_l1_hop = std::floor(cbr.value() * 255.0);
49}
50
51dcc::ChannelLoad DccMcoField::neighbour_cbr() const
52{
53 return ChannelLoad(m_cbr_l1_hop / 255.0);
54}
55
56void DccMcoField::output_power(unsigned dbm)
57{
58 m_output_power = std::min(dbm, 31u);
59}
60
61unsigned DccMcoField::output_power() const
62{
63 return m_output_power.raw();
64}
65
66} // namespace geonet
67} // namespace vanetza