Kobuki 1.0.0
C++ API for the Kobuki research robot
Loading...
Searching...
No Matches
event_manager.hpp
Go to the documentation of this file.
1
9/*****************************************************************************
10** Ifdefs
11*****************************************************************************/
12
13#ifndef KOBUKI_CORE_BUTTON_EVENT_HPP_
14#define KOBUKI_CORE_BUTTON_EVENT_HPP_
15
16/*****************************************************************************
17** Includes
18*****************************************************************************/
19
20#include <stdint.h>
21#include <vector>
22#include <ecl/sigslots.hpp>
23
25#include "macros.hpp"
26
27/*****************************************************************************
28** Namespaces
29*****************************************************************************/
30
31namespace kobuki {
32
33/*****************************************************************************
34** Event Structures
35*****************************************************************************/
36
38 enum State {
39 Released,
40 Pressed
41 } state;
42 enum Button {
43 Button0,
44 Button1,
45 Button2
46 } button;
47};
48
50 enum State {
51 Released,
52 Pressed
53 } state;
54 enum Bumper {
55 Left,
56 Center,
57 Right
58 } bumper;
59};
60
61struct CliffEvent {
62 enum State {
63 Floor,
64 Cliff
65 } state;
66 enum Sensor {
67 Left,
68 Center,
69 Right
70 } sensor;
71 uint16_t bottom;
72};
73
74struct WheelEvent {
75 enum State {
76 Raised,
77 Dropped
78 } state;
79 enum Wheel {
80 Left,
81 Right
82 } wheel;
83};
84
85struct PowerEvent {
86 enum Event {
87 Unplugged = 0,
88 PluggedToAdapter = 1,
89 PluggedToDockbase = 2,
90 ChargeCompleted = 3,
91 BatteryLow = 4,
92 BatteryCritical = 5
93 } event;
94};
95
96struct InputEvent {
97 bool values[4];
98};
99
101 enum State {
102 Offline,
103 Online,
104 Unknown // at startup
105 } state;
106};
107
108/*****************************************************************************
109** Interfaces
110*****************************************************************************/
111
112class kobuki_PUBLIC EventManager {
113public:
114 EventManager() {
115 last_state.buttons = 0;
116 last_state.bumper = 0;
117 last_state.cliff = 0;
118 last_state.wheel_drop = 0;
119 last_state.charger = 0;
120 last_state.battery = 0;
121 last_digital_input = 0;
122 last_robot_state = RobotEvent::Unknown;
123 }
124
125 void init(const std::string &sigslots_namespace);
126 void update(const CoreSensors::Data &new_state, const std::vector<uint16_t> &cliff_data);
127 void update(const uint16_t &digital_input);
128 void update(bool is_plugged, bool is_alive);
129
130private:
131 CoreSensors::Data last_state;
132 uint16_t last_digital_input;
133 RobotEvent::State last_robot_state;
134
135 ecl::Signal<const ButtonEvent&> sig_button_event;
136 ecl::Signal<const BumperEvent&> sig_bumper_event;
137 ecl::Signal<const CliffEvent&> sig_cliff_event;
138 ecl::Signal<const WheelEvent&> sig_wheel_event;
139 ecl::Signal<const PowerEvent&> sig_power_event;
140 ecl::Signal<const InputEvent&> sig_input_event;
141 ecl::Signal<const RobotEvent&> sig_robot_event;
142};
143
144
145} // namespace kobuki
146
147#endif /* KOBUKI_CORE_BUTTON_EVENT_HPP_ */
Definition cliff.hpp:36
Definition event_manager.hpp:112
Core sensor packet payloads.
Macros for kobuki_core.
Definition event_manager.hpp:49
Definition event_manager.hpp:37
Definition event_manager.hpp:61
Definition core_sensors.hpp:40
Definition event_manager.hpp:96
bool values[4]
Definition event_manager.hpp:97
Definition event_manager.hpp:85
Definition event_manager.hpp:100
Definition event_manager.hpp:74