blob: 6b078d4fa01fa0e71d1e3725c64a2351d0f67f10 [file] [log] [blame]
Brian Silvermanba3de7e2013-05-08 16:18:15 -07001#include "aos/common/input/driver_station_data.h"
2
3namespace aos {
4namespace input {
5namespace driver_station {
6
7Data::Data() : current_values_(), old_values_() {}
8
9void Data::Update(const NetworkRobotJoysticks &new_values) {
10 old_values_ = current_values_;
11 current_values_ = new_values;
12}
13
14namespace {
15
16bool GetButton(const ButtonLocation location,
17 const NetworkRobotJoysticks &values) {
18 return values.joysticks[location.joystick() - 1].buttons &
19 (1 << (location.number() - 1));
20}
21
22bool GetControlBitValue(const ControlBit bit,
23 const NetworkRobotJoysticks &values) {
24 switch (bit) {
25 case ControlBit::kTestMode:
26 return values.control.test_mode();
27 case ControlBit::kFmsAttached:
28 return values.control.fms_attached();
29 case ControlBit::kAutonomous:
30 return values.control.autonomous();
31 case ControlBit::kEnabled:
32 return values.control.enabled();
Brian Silverman8efe23e2013-07-07 23:31:37 -070033 default:
34 __builtin_unreachable();
Brian Silvermanba3de7e2013-05-08 16:18:15 -070035 }
36}
37
38} // namespace
39
40bool Data::IsPressed(const ButtonLocation location) const {
41 return GetButton(location, current_values_);
42}
43
44bool Data::PosEdge(const ButtonLocation location) const {
45 return !GetButton(location, old_values_) &&
46 GetButton(location, current_values_);
47}
48
49bool Data::NegEdge(const ButtonLocation location) const {
50 return GetButton(location, old_values_) &&
51 !GetButton(location, current_values_);
52}
53
54bool Data::GetControlBit(const ControlBit bit) const {
55 return GetControlBitValue(bit, current_values_);
56}
57
58bool Data::PosEdge(const ControlBit bit) const {
59 return !GetControlBitValue(bit, old_values_) &&
60 GetControlBitValue(bit, current_values_);
61}
62
63bool Data::NegEdge(const ControlBit bit) const {
64 return GetControlBitValue(bit, old_values_) &&
65 !GetControlBitValue(bit, current_values_);
66}
67
68float Data::GetAxis(JoystickAxis axis) const {
69 // TODO(brians): check this math against what our joysticks report as their
70 // logical minimums and maximums
71 return current_values_.joysticks[axis.joystick()].axes[axis.number()] / 127.0;
72}
73
74} // namespace driver_station
75} // namespace input
76} // namespace aos