Vanetza
 
Loading...
Searching...
No Matches
bursty_transmit_rate_control.cpp
1#include <vanetza/common/runtime.hpp>
2#include <vanetza/dcc/bursty_transmit_rate_control.hpp>
3#include <vanetza/dcc/state_machine.hpp>
4#include <stdexcept>
5
6namespace vanetza
7{
8namespace dcc
9{
10
11BurstyTransmitRateControl::BurstyTransmitRateControl(const StateMachine& fsm, const Runtime& rt) :
12 m_burst_budget(rt), m_fsm_budget(fsm, rt), m_fsm(fsm)
13{
14}
15
16Clock::duration BurstyTransmitRateControl::delay(const Transmission& tx)
17{
18 Clock::duration delay = Clock::duration::max();
19
20 switch (tx.profile()) {
21 case Profile::DP0:
22 delay = m_burst_budget.delay();
23 break;
24 case Profile::DP1:
25 case Profile::DP2:
26 case Profile::DP3:
27 delay = m_fsm_budget.delay();
28 break;
29 default:
30 throw std::invalid_argument("Invalid DCC Profile");
31 break;
32 };
33
34 return delay;
35}
36
37Clock::duration BurstyTransmitRateControl::interval(const Transmission& tx)
38{
39 Clock::duration interval = Clock::duration::max();
40
41 switch (tx.profile()) {
42 case Profile::DP0:
43 interval = m_burst_budget.burst_period();
44 break;
45 case Profile::DP1:
46 case Profile::DP2:
47 case Profile::DP3:
48 interval = m_fsm.transmission_interval();
49 break;
50 default:
51 throw std::invalid_argument("Invalid DCC Profile");
52 break;
53 }
54
55 return interval;
56}
57
58void BurstyTransmitRateControl::notify(const Transmission& tx)
59{
60 switch (tx.profile()) {
61 case Profile::DP0:
62 m_burst_budget.notify();
63 break;
64 case Profile::DP1:
65 case Profile::DP2:
66 case Profile::DP3:
67 m_fsm_budget.notify();
68 break;
69 default:
70 throw std::invalid_argument("Invalid DCC Profile");
71 break;
72 };
73}
74
75} // namespace dcc
76} // namespace vanetza