blob: 2df98bea161b279494e1dde34f9a0d8504186d6c [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
Brian Silverman7b9ab672015-03-14 23:41:41 -070022bool DoGetPOV(const POVLocation location, const JoystickState &values) {
Austin Schuhfee2e602015-03-08 18:26:05 -070023 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 {
Brian Silverman7b9ab672015-03-14 23:41:41 -070059 return DoGetPOV(location, current_values_);
Austin Schuhfee2e602015-03-08 18:26:05 -070060}
61
62bool Data::PosEdge(const POVLocation location) const {
Brian Silverman7b9ab672015-03-14 23:41:41 -070063 return !DoGetPOV(location, old_values_) &&
64 DoGetPOV(location, current_values_);
Austin Schuhfee2e602015-03-08 18:26:05 -070065}
66
67bool Data::NegEdge(const POVLocation location) const {
Brian Silverman7b9ab672015-03-14 23:41:41 -070068 return DoGetPOV(location, old_values_) &&
69 !DoGetPOV(location, current_values_);
70}
71
72int32_t Data::GetPOV(int joystick) const {
73 return current_values_.joysticks[joystick - 1].pov;
74}
75
76int32_t Data::GetOldPOV(int joystick) const {
77 return old_values_.joysticks[joystick - 1].pov;
Austin Schuhfee2e602015-03-08 18:26:05 -070078}
79
Brian Silvermanba3de7e2013-05-08 16:18:15 -070080bool Data::GetControlBit(const ControlBit bit) const {
81 return GetControlBitValue(bit, current_values_);
82}
83
84bool Data::PosEdge(const ControlBit bit) const {
85 return !GetControlBitValue(bit, old_values_) &&
86 GetControlBitValue(bit, current_values_);
87}
88
89bool Data::NegEdge(const ControlBit bit) const {
90 return GetControlBitValue(bit, old_values_) &&
91 !GetControlBitValue(bit, current_values_);
92}
93
94float Data::GetAxis(JoystickAxis axis) const {
Austin Schuh374fd172014-10-25 17:57:54 -070095 return current_values_.joysticks[axis.joystick() - 1].axis[axis.number() - 1];
Brian Silvermanba3de7e2013-05-08 16:18:15 -070096}
97
98} // namespace driver_station
99} // namespace input
100} // namespace aos