Vanetza
 
Loading...
Searching...
No Matches
traffic_class.cpp
1#include "traffic_class.hpp"
2#include "serialization.hpp"
3
4namespace vanetza
5{
6namespace geonet
7{
8
9TrafficClass::TrafficClass() : m_tc(0)
10{
11}
12
13TrafficClass::TrafficClass(bool scf, bool ch_offload, BitNumber<unsigned, 6> tc) : m_tc(0)
14{
15 store_carry_forward(scf);
16 channel_offload(ch_offload);
17 tc_id(tc);
18}
19
20TrafficClass::TrafficClass(uint8_t raw) : m_tc(raw)
21{
22}
23
24bool TrafficClass::store_carry_forward() const
25{
26 return (m_tc & scf_mask);
27}
28
29void TrafficClass::store_carry_forward(bool flag)
30{
31 if (flag) {
32 m_tc |= scf_mask;
33 } else {
34 m_tc &= ~scf_mask;
35 }
36}
37
38bool TrafficClass::channel_offload() const
39{
40 return (m_tc & channel_offload_mask);
41}
42
43void TrafficClass::channel_offload(bool flag)
44{
45 if (flag) {
46 m_tc |= channel_offload_mask;
47 } else {
48 m_tc &= ~channel_offload_mask;
49 }
50}
51
52BitNumber<unsigned, 6> TrafficClass::tc_id() const
53{
54 return (m_tc & tc_id_mask);
55}
56
57void TrafficClass::tc_id(BitNumber<unsigned, 6> id)
58{
59 m_tc &= ~tc_id_mask;
60 m_tc |= id.raw() & tc_id_mask;
61}
62
63dcc::Profile map_tc_onto_profile(const TrafficClass& tc)
64{
65 dcc::Profile profile = dcc::Profile::DP3;
66
67 switch (tc.tc_id().raw()) {
68 case 0:
69 profile = dcc::Profile::DP0;
70 break;
71 case 1:
72 profile = dcc::Profile::DP1;
73 break;
74 case 2:
75 profile = dcc::Profile::DP2;
76 break;
77 default:
78 profile = dcc::Profile::DP3;
79 break;
80 }
81
82 return profile;
83}
84
85void serialize(const TrafficClass& tc, OutputArchive& ar)
86{
87 serialize(host_cast(tc.raw()), ar);
88}
89
90void deserialize(TrafficClass& tc, InputArchive& ar)
91{
92 decltype(tc.raw()) tmp;
93 deserialize(tmp, ar);
94 tc = TrafficClass(tmp);
95}
96
97} // namespace geonet
98} // namespace vanetza
99