libs
libuavcan
libuavcan
test
protocol
dynamic_node_id_server
event_tracer.hpp
Go to the documentation of this file.
1
/*
2
* Copyright (C) 2015 Pavel Kirienko <pavel.kirienko@gmail.com>
3
*/
4
5
#pragma once
6
7
#include <iostream>
8
#include <string>
9
#include <list>
10
#include <
uavcan/protocol/dynamic_node_id_server/event.hpp
>
11
#include <
uavcan/time.hpp
>
12
#include "../../clock.hpp"
13
14
15
class
EventTracer
:
public
uavcan::dynamic_node_id_server::IEventTracer
16
{
17
struct
EventLogEntry
18
{
19
const
uavcan::dynamic_node_id_server::TraceCode
code
;
20
const
uavcan::int64_t
argument
;
21
22
EventLogEntry
(uavcan::dynamic_node_id_server::TraceCode arg_code,
uavcan::int64_t
arg_argument)
23
:
code
(arg_code)
24
,
argument
(arg_argument)
25
{ }
26
};
27
28
const
std::string
id_
;
29
const
uavcan::MonotonicTime
startup_ts_
;
30
std::list<EventLogEntry>
event_log_
;
31
32
public
:
33
EventTracer
() :
34
startup_ts_
(
SystemClockDriver
().
getMonotonic
())
35
{ }
36
37
EventTracer
(
const
std::string&
id
) :
38
id_
(id),
39
startup_ts_
(
SystemClockDriver
().
getMonotonic
())
40
{ }
41
42
virtual
void
onEvent
(uavcan::dynamic_node_id_server::TraceCode code,
uavcan::int64_t
argument)
43
{
44
const
uavcan::MonotonicDuration
ts =
SystemClockDriver
().
getMonotonic
() -
startup_ts_
;
45
std::cout <<
"EVENT ["
<<
id_
<<
"]\t"
<< ts.
toString
() <<
"\t"
46
<<
int
(code) <<
"\t"
<< getEventName(code) <<
"\t"
<< argument << std::endl;
47
event_log_
.push_back(
EventLogEntry
(code, argument));
48
}
49
50
unsigned
countEvents
(
const
uavcan::dynamic_node_id_server::TraceCode code)
const
51
{
52
unsigned
count = 0;
53
for
(std::list<EventLogEntry>::const_iterator it =
event_log_
.begin(); it !=
event_log_
.end(); ++it)
54
{
55
count += (it->code == code) ? 1U : 0U;
56
}
57
return
count;
58
}
59
60
uavcan::int64_t
getLastEventArgumentOrFail
(
const
uavcan::dynamic_node_id_server::TraceCode code)
const
61
{
62
for
(std::list<EventLogEntry>::const_reverse_iterator it =
event_log_
.rbegin(); it !=
event_log_
.rend(); ++it)
63
{
64
if
(it->code == code)
65
{
66
return
it->argument;
67
}
68
}
69
70
std::cout <<
"No such event in the event log, code "
<<
int
(code) <<
", log length "
<<
event_log_
.size()
71
<< std::endl;
72
73
throw
std::runtime_error(
"EventTracer::getLastEventArgumentOrFail()"
);
74
}
75
76
unsigned
getNumEvents
()
const
{
return
static_cast<
unsigned
>
(
event_log_
.size()); }
77
};
EventTracer::onEvent
virtual void onEvent(uavcan::dynamic_node_id_server::TraceCode code, uavcan::int64_t argument)
Definition:
event_tracer.hpp:42
SystemClockDriver::getMonotonic
virtual uavcan::MonotonicTime getMonotonic() const
Definition:
libuavcan/libuavcan/test/clock.hpp:67
EventTracer::countEvents
unsigned countEvents(const uavcan::dynamic_node_id_server::TraceCode code) const
Definition:
event_tracer.hpp:50
event.hpp
EventTracer::id_
const std::string id_
Definition:
event_tracer.hpp:28
uavcan::int64_t
std::int64_t int64_t
Definition:
std.hpp:32
uavcan::MonotonicDuration
Definition:
time.hpp:182
EventTracer::EventLogEntry::code
const uavcan::dynamic_node_id_server::TraceCode code
Definition:
event_tracer.hpp:19
EventTracer::EventLogEntry::EventLogEntry
EventLogEntry(uavcan::dynamic_node_id_server::TraceCode arg_code, uavcan::int64_t arg_argument)
Definition:
event_tracer.hpp:22
EventTracer::getNumEvents
unsigned getNumEvents() const
Definition:
event_tracer.hpp:76
EventTracer::getLastEventArgumentOrFail
uavcan::int64_t getLastEventArgumentOrFail(const uavcan::dynamic_node_id_server::TraceCode code) const
Definition:
event_tracer.hpp:60
EventTracer::startup_ts_
const uavcan::MonotonicTime startup_ts_
Definition:
event_tracer.hpp:29
uavcan_kinetis::clock::getMonotonic
uavcan::MonotonicTime getMonotonic()
Definition:
clock.cpp:83
int
int
Definition:
libstubs.cpp:120
EventTracer::EventLogEntry
Definition:
event_tracer.hpp:17
uavcan::DurationBase::toString
void toString(char buf[StringBufSize]) const
Prints time in seconds with microsecond resolution.
Definition:
time.hpp:224
EventTracer::EventLogEntry::argument
const uavcan::int64_t argument
Definition:
event_tracer.hpp:20
uavcan::dynamic_node_id_server::IEventTracer
Definition:
event.hpp:90
SystemClockDriver
Definition:
libuavcan/libuavcan/test/clock.hpp:62
uavcan::MonotonicTime
Definition:
time.hpp:184
time.hpp
EventTracer::EventTracer
EventTracer(const std::string &id)
Definition:
event_tracer.hpp:37
EventTracer
Definition:
event_tracer.hpp:15
EventTracer::event_log_
std::list< EventLogEntry > event_log_
Definition:
event_tracer.hpp:30
EventTracer::EventTracer
EventTracer()
Definition:
event_tracer.hpp:33
uavcan_communicator
Author(s):
autogenerated on Fri Dec 13 2024 03:10:02