blob: 00a126e568c91bbcc9b3a9d0ce9c1e2f6bb3a011 [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
Brian Silverman699f0cb2015-02-05 19:45:01 -05009void Data::Update(const JoystickState &new_values) {
Brian Silvermanba3de7e2013-05-08 16:18:15 -070010 old_values_ = current_values_;
11 current_values_ = new_values;
12}
13
14namespace {
15
16bool GetButton(const ButtonLocation location,
Brian Silverman699f0cb2015-02-05 19:45:01 -050017 const JoystickState &values) {
Brian Silvermanba3de7e2013-05-08 16:18:15 -070018 return values.joysticks[location.joystick() - 1].buttons &
19 (1 << (location.number() - 1));
20}
21
Austin Schuhfee2e602015-03-08 18:26:05 -070022bool GetPOV(const POVLocation location, const JoystickState &values) {
23 return values.joysticks[location.joystick() - 1].pov == location.number();
24}
25
Brian Silvermanba3de7e2013-05-08 16:18:15 -070026bool GetControlBitValue(const ControlBit bit,
Brian Silverman699f0cb2015-02-05 19:45:01 -050027 const JoystickState &values) {
Brian Silvermanba3de7e2013-05-08 16:18:15 -070028 switch (bit) {
29 case ControlBit::kTestMode:
Austin Schuh374fd172014-10-25 17:57:54 -070030 return values.test_mode;
Brian Silvermanba3de7e2013-05-08 16:18:15 -070031 case ControlBit::kFmsAttached:
Austin Schuh374fd172014-10-25 17:57:54 -070032 return values.fms_attached;
Brian Silvermanba3de7e2013-05-08 16:18:15 -070033 case ControlBit::kAutonomous:
Austin Schuh374fd172014-10-25 17:57:54 -070034 return values.autonomous;
Brian Silvermanba3de7e2013-05-08 16:18:15 -070035 case ControlBit::kEnabled:
Austin Schuh374fd172014-10-25 17:57:54 -070036 return values.enabled;
Brian Silverman8efe23e2013-07-07 23:31:37 -070037 default:
38 __builtin_unreachable();
Brian Silvermanba3de7e2013-05-08 16:18:15 -070039 }
40}
41
42} // namespace
43
44bool Data::IsPressed(const ButtonLocation location) const {
45 return GetButton(location, current_values_);
46}
47
48bool Data::PosEdge(const ButtonLocation location) const {
49 return !GetButton(location, old_values_) &&
50 GetButton(location, current_values_);
51}
52
53bool Data::NegEdge(const ButtonLocation location) const {
54 return GetButton(location, old_values_) &&
55 !GetButton(location, current_values_);
56}
57
Austin Schuhfee2e602015-03-08 18:26:05 -070058bool Data::IsPressed(const POVLocation location) const {
59 return GetPOV(location, current_values_);
60}
61
62bool Data::PosEdge(const POVLocation location) const {
63 return !GetPOV(location, old_values_) && GetPOV(location, current_values_);
64}
65
66bool Data::NegEdge(const POVLocation location) const {
67 return GetPOV(location, old_values_) && !GetPOV(location, current_values_);
68}
69
Brian Silvermanba3de7e2013-05-08 16:18:15 -070070bool Data::GetControlBit(const ControlBit bit) const {
71 return GetControlBitValue(bit, current_values_);
72}
73
74bool Data::PosEdge(const ControlBit bit) const {
75 return !GetControlBitValue(bit, old_values_) &&
76 GetControlBitValue(bit, current_values_);
77}
78
79bool Data::NegEdge(const ControlBit bit) const {
80 return GetControlBitValue(bit, old_values_) &&
81 !GetControlBitValue(bit, current_values_);
82}
83
84float Data::GetAxis(JoystickAxis axis) const {
Austin Schuh374fd172014-10-25 17:57:54 -070085 return current_values_.joysticks[axis.joystick() - 1].axis[axis.number() - 1];
Brian Silvermanba3de7e2013-05-08 16:18:15 -070086}
87
88} // namespace driver_station
89} // namespace input
90} // namespace aos