blob: 6aeca4b855f6b5c260e2545d046bc470f4a371b9 [file] [log] [blame]
#include "aos/atom_code/input/JoystickInput.h"
#include "aos/aos_core.h"
#include "aos/common/Configuration.h"
#include "aos/common/network/ReceiveSocket.h"
#include "aos/common/messages/RobotState.q.h"
namespace aos {
void JoystickInput::SetupButtons() {
for (int i = 0; i < 4; ++i) {
old_buttons[i] = buttons[i];
}
buttons[0] = control_data_.stick0Buttons;
buttons[1] = control_data_.stick1Buttons;
buttons[2] = control_data_.stick2Buttons;
buttons[3] = control_data_.stick3Buttons;
buttons[0] |= (control_data_.enabled << (ENABLED - 9)) |
(control_data_.autonomous << (AUTONOMOUS - 9)) |
(control_data_.fmsAttached << (FMS_ATTACHED - 9));
for (int j = 0; j < 4; ++j) {
for (int k = 1; k <= 12; ++k) {
if (PosEdge(j, k)) {
LOG(INFO, "PosEdge(%d, %d)\n", j, k);
}
if (NegEdge(j, k)) {
LOG(INFO, "NegEdge(%d, %d)\n", j, k);
}
}
}
if (PosEdge(0, ENABLED)) LOG(INFO, "PosEdge(ENABLED)\n");
if (NegEdge(0, ENABLED)) LOG(INFO, "NegEdge(ENABLED)\n");
if (PosEdge(0, AUTONOMOUS)) LOG(INFO, "PosEdge(AUTONOMOUS)\n");
if (NegEdge(0, AUTONOMOUS)) LOG(INFO, "NegEdge(AUTONOMOUS)\n");
if (PosEdge(0, FMS_ATTACHED)) LOG(INFO, "PosEdge(FMS_ATTACHED)\n");
if (NegEdge(0, FMS_ATTACHED)) LOG(INFO, "NegEdge(FMS_ATTACHED)\n");
}
void JoystickInput::Run() {
ReceiveSocket sock(NetworkPort::kDS);
while (true) {
if (sock.Recv(&control_data_, sizeof(control_data_)) == -1) {
LOG(WARNING, "socket receive failed\n");
continue;
}
SetupButtons();
if (!robot_state.MakeWithBuilder().enabled(Pressed(0, ENABLED)).
autonomous(Pressed(0, AUTONOMOUS)).
team_id(ntohs(control_data_.teamID)).Send()) {
LOG(WARNING, "sending robot_state failed\n");
}
if (robot_state.FetchLatest()) {
char state[1024];
robot_state->Print(state, sizeof(state));
LOG(DEBUG, "robot_state={%s}\n", state);
} else {
LOG(WARNING, "fetching robot_state failed\n");
}
RunIteration();
}
}
} // namespace aos