blob: 4942eaa40fd8e5ef14f5f1d37e65ec2c9039f7a9 [file] [log] [blame]
Brian Silvermanda45b6c2014-12-28 11:36:50 -08001#include "frc971/wpilib/joystick_sender.h"
2
3#include "aos/common/messages/robot_state.q.h"
4#include "aos/linux_code/init.h"
5#include "aos/common/network/team_number.h"
6#include "aos/common/logging/queue_logging.h"
7
8#include "DriverStation.h"
Brian Silverman6f7d5fe2015-01-01 15:45:41 -08009#include "HAL/HAL.hpp"
Brian Silvermanda45b6c2014-12-28 11:36:50 -080010
11namespace frc971 {
12namespace wpilib {
13
14void JoystickSender::operator()() {
Austin Schuh3b5b69b2015-10-31 18:55:47 -070015 DriverStation *ds =
16#ifdef WPILIB2015
17 DriverStation::GetInstance();
18#else
19 &DriverStation::GetInstance();
20#endif
Brian Silvermanbd925f92014-12-31 14:28:06 -080021 ::aos::SetCurrentThreadName("DSReader");
Brian Silvermanda45b6c2014-12-28 11:36:50 -080022 uint16_t team_id = ::aos::network::GetTeamNumber();
23
Brian Silvermanbd925f92014-12-31 14:28:06 -080024 ::aos::SetCurrentThreadRealtimePriority(29);
25
Brian Silvermanda45b6c2014-12-28 11:36:50 -080026 while (run_) {
27 ds->WaitForData();
Brian Silverman699f0cb2015-02-05 19:45:01 -050028 auto new_state = ::aos::joystick_state.MakeMessage();
Brian Silvermanda45b6c2014-12-28 11:36:50 -080029
Brian Silverman6f7d5fe2015-01-01 15:45:41 -080030 HALControlWord control_word;
31 HALGetControlWord(&control_word);
32 new_state->test_mode = control_word.test;
33 new_state->fms_attached = control_word.fmsAttached;
34 new_state->enabled = control_word.enabled;
35 new_state->autonomous = control_word.autonomous;
Brian Silvermanda45b6c2014-12-28 11:36:50 -080036 new_state->team_id = team_id;
37 new_state->fake = false;
38
39 for (int i = 0; i < 4; ++i) {
Brian Silverman5e233772015-01-01 13:25:44 -080040 new_state->joysticks[i].buttons = ds->GetStickButtons(i);
Brian Silvermanda45b6c2014-12-28 11:36:50 -080041 for (int j = 0; j < 4; ++j) {
42 new_state->joysticks[i].axis[j] = ds->GetStickAxis(i, j);
43 }
Austin Schuhfee2e602015-03-08 18:26:05 -070044 new_state->joysticks[i].pov = ds->GetStickPOV(i, 0);
Brian Silvermanda45b6c2014-12-28 11:36:50 -080045 }
Brian Silverman699f0cb2015-02-05 19:45:01 -050046 LOG_STRUCT(DEBUG, "joystick_state", *new_state);
Brian Silvermanda45b6c2014-12-28 11:36:50 -080047
48 if (!new_state.Send()) {
Brian Silverman699f0cb2015-02-05 19:45:01 -050049 LOG(WARNING, "sending joystick_state failed\n");
Brian Silvermanda45b6c2014-12-28 11:36:50 -080050 }
51 }
52}
53
54} // namespace wpilib
55} // namespace frc971