blob: 8b3bc4499f05898a6624958f10ad4ac5646bc856 [file] [log] [blame]
brians343bc112013-02-10 01:53:46 +00001#include "aos/atom_code/input/JoystickInput.h"
2
3#include "aos/aos_core.h"
4#include "aos/common/Configuration.h"
5#include "aos/common/network/ReceiveSocket.h"
6#include "aos/common/messages/RobotState.q.h"
7
8namespace aos {
9
10void JoystickInput::SetupButtons() {
11 for (int i = 0; i < 4; ++i) {
12 old_buttons[i] = buttons[i];
13 }
14 buttons[0] = control_data_.stick0Buttons;
15 buttons[1] = control_data_.stick1Buttons;
16 buttons[2] = control_data_.stick2Buttons;
17 buttons[3] = control_data_.stick3Buttons;
18
19 buttons[0] |= (control_data_.enabled << (ENABLED - 9)) |
20 (control_data_.autonomous << (AUTONOMOUS - 9)) |
brians6591d582013-03-03 05:31:53 +000021 (control_data_.fmsAttached << (FMS_ATTACHED - 9)) |
22 (control_data_.test << (TEST_MODE - 9));
brians343bc112013-02-10 01:53:46 +000023
24 for (int j = 0; j < 4; ++j) {
25 for (int k = 1; k <= 12; ++k) {
26 if (PosEdge(j, k)) {
27 LOG(INFO, "PosEdge(%d, %d)\n", j, k);
28 }
29 if (NegEdge(j, k)) {
30 LOG(INFO, "NegEdge(%d, %d)\n", j, k);
31 }
32 }
33 }
34 if (PosEdge(0, ENABLED)) LOG(INFO, "PosEdge(ENABLED)\n");
35 if (NegEdge(0, ENABLED)) LOG(INFO, "NegEdge(ENABLED)\n");
36 if (PosEdge(0, AUTONOMOUS)) LOG(INFO, "PosEdge(AUTONOMOUS)\n");
37 if (NegEdge(0, AUTONOMOUS)) LOG(INFO, "NegEdge(AUTONOMOUS)\n");
38 if (PosEdge(0, FMS_ATTACHED)) LOG(INFO, "PosEdge(FMS_ATTACHED)\n");
39 if (NegEdge(0, FMS_ATTACHED)) LOG(INFO, "NegEdge(FMS_ATTACHED)\n");
brians6591d582013-03-03 05:31:53 +000040 if (PosEdge(0, TEST_MODE)) LOG(INFO, "PosEdge(TEST_MODE)\n");
41 if (NegEdge(0, TEST_MODE)) LOG(INFO, "NegEdge(TEST_MODE)\n");
brians343bc112013-02-10 01:53:46 +000042}
43
44void JoystickInput::Run() {
45 ReceiveSocket sock(NetworkPort::kDS);
46 while (true) {
47 if (sock.Recv(&control_data_, sizeof(control_data_)) == -1) {
48 LOG(WARNING, "socket receive failed\n");
49 continue;
50 }
51 SetupButtons();
brians6591d582013-03-03 05:31:53 +000052 if (!robot_state.MakeWithBuilder()
53 .enabled(Pressed(0, ENABLED))
54 .autonomous(Pressed(0, AUTONOMOUS))
55 .test_mode(Pressed(0, TEST_MODE))
56 .team_id(ntohs(control_data_.teamID))
57 .Send()) {
brians343bc112013-02-10 01:53:46 +000058 LOG(WARNING, "sending robot_state failed\n");
59 }
60 if (robot_state.FetchLatest()) {
61 char state[1024];
62 robot_state->Print(state, sizeof(state));
63 LOG(DEBUG, "robot_state={%s}\n", state);
64 } else {
65 LOG(WARNING, "fetching robot_state failed\n");
66 }
67 RunIteration();
68 }
69}
70
71} // namespace aos
72