blob: 7d406d06e2b2d4de093c898a707717a3733094a0 [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"
Austin Schuh94f51e92017-10-30 19:25:32 -07009#if defined(WPILIB2017) || defined(WPILIB2018)
Brian Silvermane48dbc12017-02-04 20:06:29 -080010#include "HAL/HAL.h"
11#else
Brian Silverman6f7d5fe2015-01-01 15:45:41 -080012#include "HAL/HAL.hpp"
Brian Silvermane48dbc12017-02-04 20:06:29 -080013#endif
Brian Silvermanda45b6c2014-12-28 11:36:50 -080014
15namespace frc971 {
16namespace wpilib {
17
18void JoystickSender::operator()() {
Austin Schuh3b5b69b2015-10-31 18:55:47 -070019 DriverStation *ds =
20#ifdef WPILIB2015
21 DriverStation::GetInstance();
22#else
23 &DriverStation::GetInstance();
24#endif
Brian Silvermanbd925f92014-12-31 14:28:06 -080025 ::aos::SetCurrentThreadName("DSReader");
Brian Silvermanda45b6c2014-12-28 11:36:50 -080026 uint16_t team_id = ::aos::network::GetTeamNumber();
27
Brian Silvermanbd925f92014-12-31 14:28:06 -080028 ::aos::SetCurrentThreadRealtimePriority(29);
29
Brian Silvermanda45b6c2014-12-28 11:36:50 -080030 while (run_) {
31 ds->WaitForData();
Brian Silverman699f0cb2015-02-05 19:45:01 -050032 auto new_state = ::aos::joystick_state.MakeMessage();
Brian Silvermanda45b6c2014-12-28 11:36:50 -080033
Austin Schuh94f51e92017-10-30 19:25:32 -070034#if defined(WPILIB2017) || defined(WPILIB2018)
Brian Silvermane48dbc12017-02-04 20:06:29 -080035 HAL_ControlWord control_word;
36 HAL_GetControlWord(&control_word);
37#else
Brian Silverman6f7d5fe2015-01-01 15:45:41 -080038 HALControlWord control_word;
39 HALGetControlWord(&control_word);
Brian Silvermane48dbc12017-02-04 20:06:29 -080040#endif
Brian Silverman6f7d5fe2015-01-01 15:45:41 -080041 new_state->test_mode = control_word.test;
42 new_state->fms_attached = control_word.fmsAttached;
43 new_state->enabled = control_word.enabled;
44 new_state->autonomous = control_word.autonomous;
Brian Silvermanda45b6c2014-12-28 11:36:50 -080045 new_state->team_id = team_id;
46 new_state->fake = false;
47
48 for (int i = 0; i < 4; ++i) {
Brian Silverman5e233772015-01-01 13:25:44 -080049 new_state->joysticks[i].buttons = ds->GetStickButtons(i);
Austin Schuh4ee60422017-02-05 16:49:52 -080050 for (int j = 0; j < 6; ++j) {
Brian Silvermanda45b6c2014-12-28 11:36:50 -080051 new_state->joysticks[i].axis[j] = ds->GetStickAxis(i, j);
52 }
Austin Schuhfee2e602015-03-08 18:26:05 -070053 new_state->joysticks[i].pov = ds->GetStickPOV(i, 0);
Brian Silvermanda45b6c2014-12-28 11:36:50 -080054 }
Brian Silverman699f0cb2015-02-05 19:45:01 -050055 LOG_STRUCT(DEBUG, "joystick_state", *new_state);
Brian Silvermanda45b6c2014-12-28 11:36:50 -080056
57 if (!new_state.Send()) {
Brian Silverman699f0cb2015-02-05 19:45:01 -050058 LOG(WARNING, "sending joystick_state failed\n");
Brian Silvermanda45b6c2014-12-28 11:36:50 -080059 }
60 }
61}
62
63} // namespace wpilib
64} // namespace frc971