blob: 3984d703bc834a760922e85a0a4d6d977e6210d5 [file] [log] [blame]
Brian Silvermanda45b6c2014-12-28 11:36:50 -08001#include "frc971/wpilib/joystick_sender.h"
2
John Park33858a32018-09-28 23:05:48 -07003#include "aos/robot_state/robot_state.q.h"
John Park398c74a2018-10-20 21:17:39 -07004#include "aos/init.h"
John Park33858a32018-09-28 23:05:48 -07005#include "aos/network/team_number.h"
6#include "aos/logging/queue_logging.h"
Brian Silvermanda45b6c2014-12-28 11:36:50 -08007
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
Brian Silvermane48dbc12017-02-04 20:06:29 -080034 HAL_ControlWord control_word;
35 HAL_GetControlWord(&control_word);
Austin Schuhc231df42018-03-21 20:43:24 -070036 HAL_MatchInfo match_info;
37 auto status = HAL_GetMatchInfo(&match_info);
38 if (status == 0) {
39 new_state->switch_left = match_info.gameSpecificMessage[0] == 'L' ||
40 match_info.gameSpecificMessage[0] == 'l';
41 new_state->scale_left = match_info.gameSpecificMessage[1] == 'L' ||
42 match_info.gameSpecificMessage[1] == 'l';
43 }
44 HAL_FreeMatchInfo(&match_info);
45
Brian Silverman6f7d5fe2015-01-01 15:45:41 -080046 new_state->test_mode = control_word.test;
47 new_state->fms_attached = control_word.fmsAttached;
48 new_state->enabled = control_word.enabled;
49 new_state->autonomous = control_word.autonomous;
Brian Silvermanda45b6c2014-12-28 11:36:50 -080050 new_state->team_id = team_id;
51 new_state->fake = false;
52
53 for (int i = 0; i < 4; ++i) {
Brian Silverman5e233772015-01-01 13:25:44 -080054 new_state->joysticks[i].buttons = ds->GetStickButtons(i);
Austin Schuh4ee60422017-02-05 16:49:52 -080055 for (int j = 0; j < 6; ++j) {
Brian Silvermanda45b6c2014-12-28 11:36:50 -080056 new_state->joysticks[i].axis[j] = ds->GetStickAxis(i, j);
57 }
Austin Schuhfee2e602015-03-08 18:26:05 -070058 new_state->joysticks[i].pov = ds->GetStickPOV(i, 0);
Brian Silvermanda45b6c2014-12-28 11:36:50 -080059 }
Brian Silverman699f0cb2015-02-05 19:45:01 -050060 LOG_STRUCT(DEBUG, "joystick_state", *new_state);
Brian Silvermanda45b6c2014-12-28 11:36:50 -080061
62 if (!new_state.Send()) {
Brian Silverman699f0cb2015-02-05 19:45:01 -050063 LOG(WARNING, "sending joystick_state failed\n");
Brian Silvermanda45b6c2014-12-28 11:36:50 -080064 }
65 }
66}
67
68} // namespace wpilib
69} // namespace frc971