blob: eb8c787c76ce4d7ccf5c400c5727f89dc3b0980d [file] [log] [blame]
Brian Silvermanc71537c2016-01-01 13:43:14 -08001#include <unistd.h>
Brian Silvermanc71537c2016-01-01 13:43:14 -08002
Tyler Chatowbf0609c2021-07-31 16:13:27 -07003#include <cmath>
4#include <cstdio>
5#include <cstring>
6
Austin Schuh3e45c752019-02-02 12:19:11 -08007#include "aos/actions/actions.h"
Alex Perrycb7da4b2019-08-28 19:35:56 -07008#include "aos/events/shm_event_loop.h"
John Park398c74a2018-10-20 21:17:39 -07009#include "aos/init.h"
John Park33858a32018-09-28 23:05:48 -070010#include "aos/logging/logging.h"
11#include "aos/time/time.h"
Alex Perrycb7da4b2019-08-28 19:35:56 -070012#include "frc971/control_loops/drivetrain/drivetrain_goal_generated.h"
James Kuszmaul7077d342021-06-09 20:23:58 -070013#include "frc971/input/driver_station_data.h"
14#include "frc971/input/joystick_input.h"
Alex Perrycb7da4b2019-08-28 19:35:56 -070015#include "y2012/control_loops/accessories/accessories_generated.h"
Brian Silvermanc71537c2016-01-01 13:43:14 -080016
James Kuszmaul7077d342021-06-09 20:23:58 -070017using ::frc971::input::driver_station::ButtonLocation;
18using ::frc971::input::driver_station::ControlBit;
19using ::frc971::input::driver_station::JoystickAxis;
Brian Silvermanc71537c2016-01-01 13:43:14 -080020
21#define OLD_DS 0
22
23namespace y2012 {
24namespace input {
25namespace joysticks {
26
27const JoystickAxis kSteeringWheel(1, 1), kDriveThrottle(2, 2);
Campbell Crowley5b27f022016-02-20 16:55:35 -080028const ButtonLocation kShiftHigh(2, 3), kShiftLow(2, 1);
Brian Silvermanc71537c2016-01-01 13:43:14 -080029const ButtonLocation kQuickTurn(1, 5);
30
31const ButtonLocation kCatch(3, 10);
32
33#if OLD_DS
34const ButtonLocation kFire(3, 11);
35const ButtonLocation kUnload(1, 4);
36const ButtonLocation kReload(1, 2);
37
38const ButtonLocation kRollersOut(3, 12);
39const ButtonLocation kRollersIn(3, 7);
40
41const ButtonLocation kTuck(3, 9);
42const ButtonLocation kIntakePosition(3, 8);
43const ButtonLocation kIntakeOpenPosition(3, 10);
44const ButtonLocation kVerticalTuck(3, 1);
45const JoystickAxis kFlipRobot(3, 3);
46
47const ButtonLocation kLongShot(3, 5);
48const ButtonLocation kCloseShot(3, 2);
49const ButtonLocation kFenderShot(3, 3);
50const ButtonLocation kTrussShot(2, 11);
51const ButtonLocation kHumanPlayerShot(3, 2);
52#else
53const ButtonLocation kFire(3, 9);
54const ButtonLocation kUnload(1, 4);
55const ButtonLocation kReload(1, 2);
56
57const ButtonLocation kRollersOut(3, 8);
58const ButtonLocation kRollersIn(3, 3);
59
60const ButtonLocation kTuck(3, 4);
61const ButtonLocation kIntakePosition(3, 5);
62const ButtonLocation kIntakeOpenPosition(3, 11);
63const ButtonLocation kVerticalTuck(2, 6);
64const JoystickAxis kFlipRobot(3, 3);
65
66const ButtonLocation kLongShot(3, 7);
67const ButtonLocation kCloseShot(3, 6);
68const ButtonLocation kFenderShot(3, 2);
69const ButtonLocation kTrussShot(2, 11);
70const ButtonLocation kHumanPlayerShot(3, 1);
71#endif
72
73const ButtonLocation kUserLeft(2, 7);
74const ButtonLocation kUserRight(2, 10);
75
76const JoystickAxis kAdjustClawGoal(3, 2);
77const JoystickAxis kAdjustClawSeparation(3, 1);
78
James Kuszmaul7077d342021-06-09 20:23:58 -070079class Reader : public ::frc971::input::JoystickInput {
Brian Silvermanc71537c2016-01-01 13:43:14 -080080 public:
Austin Schuh3e45c752019-02-02 12:19:11 -080081 Reader(::aos::EventLoop *event_loop)
James Kuszmaul7077d342021-06-09 20:23:58 -070082 : ::frc971::input::JoystickInput(event_loop),
Austin Schuhbd0a40f2019-06-30 14:56:31 -070083 drivetrain_goal_sender_(
Alex Perrycb7da4b2019-08-28 19:35:56 -070084 event_loop->MakeSender<::frc971::control_loops::drivetrain::Goal>(
85 "/drivetrain")),
Austin Schuhe4526232019-06-29 16:51:33 -070086 accessories_goal_sender_(
87 event_loop
Alex Perrycb7da4b2019-08-28 19:35:56 -070088 ->MakeSender<::y2012::control_loops::accessories::Message>(
89 "/accessories")),
Austin Schuhe4526232019-06-29 16:51:33 -070090 is_high_gear_(false) {}
Brian Silvermanc71537c2016-01-01 13:43:14 -080091
James Kuszmaul7077d342021-06-09 20:23:58 -070092 void RunIteration(
93 const ::frc971::input::driver_station::Data &data) override {
Brian Silvermanc71537c2016-01-01 13:43:14 -080094 if (!data.GetControlBit(ControlBit::kAutonomous)) {
95 HandleDrivetrain(data);
96 HandleTeleop(data);
97 }
98 }
99
James Kuszmaul7077d342021-06-09 20:23:58 -0700100 void HandleDrivetrain(const ::frc971::input::driver_station::Data &data) {
Brian Silvermanc71537c2016-01-01 13:43:14 -0800101 const double wheel = -data.GetAxis(kSteeringWheel);
102 const double throttle = -data.GetAxis(kDriveThrottle);
Campbell Crowley5b27f022016-02-20 16:55:35 -0800103 if (data.PosEdge(kShiftLow)) {
Brian Silvermanc71537c2016-01-01 13:43:14 -0800104 is_high_gear_ = false;
105 }
Campbell Crowley5b27f022016-02-20 16:55:35 -0800106 if (data.PosEdge(kShiftHigh)) {
Brian Silvermanc71537c2016-01-01 13:43:14 -0800107 is_high_gear_ = true;
108 }
Alex Perrycb7da4b2019-08-28 19:35:56 -0700109 auto builder = drivetrain_goal_sender_.MakeBuilder();
110 frc971::control_loops::drivetrain::Goal::Builder goal_builder =
111 builder.MakeBuilder<frc971::control_loops::drivetrain::Goal>();
112 goal_builder.add_wheel(wheel);
113 goal_builder.add_throttle(throttle);
114 goal_builder.add_highgear(is_high_gear_);
115 goal_builder.add_quickturn(data.IsPressed(kQuickTurn));
Austin Schuhbd0a40f2019-06-30 14:56:31 -0700116
Alex Perrycb7da4b2019-08-28 19:35:56 -0700117 if (!builder.Send(goal_builder.Finish())) {
Austin Schuhf257f3c2019-10-27 21:00:43 -0700118 AOS_LOG(WARNING, "sending stick values failed\n");
Brian Silvermanc71537c2016-01-01 13:43:14 -0800119 }
120 }
121
James Kuszmaul7077d342021-06-09 20:23:58 -0700122 void HandleTeleop(const ::frc971::input::driver_station::Data &data) {
Alex Perrycb7da4b2019-08-28 19:35:56 -0700123 auto builder = accessories_goal_sender_.MakeBuilder();
124 flatbuffers::Offset<flatbuffers::Vector<uint8_t>> solenoids_offset =
125 builder.fbb()->CreateVector<uint8_t>({data.IsPressed(kLongShot),
James Kuszmaul7077d342021-06-09 20:23:58 -0700126 data.IsPressed(kCloseShot),
127 data.IsPressed(kFenderShot)});
Alex Perrycb7da4b2019-08-28 19:35:56 -0700128
129 flatbuffers::Offset<flatbuffers::Vector<double>> sticks_offset =
James Kuszmaul7077d342021-06-09 20:23:58 -0700130 builder.fbb()->CreateVector<double>(
131 {data.GetAxis(kAdjustClawGoal),
132 data.GetAxis(kAdjustClawSeparation)});
Alex Perrycb7da4b2019-08-28 19:35:56 -0700133
134 y2012::control_loops::accessories::Message::Builder message_builder =
135 builder.MakeBuilder<y2012::control_loops::accessories::Message>();
136 message_builder.add_solenoids(solenoids_offset);
137 message_builder.add_sticks(sticks_offset);
138 if (!builder.Send(message_builder.Finish())) {
Austin Schuhf257f3c2019-10-27 21:00:43 -0700139 AOS_LOG(WARNING, "sending accessories goal failed\n");
Brian Silvermanc71537c2016-01-01 13:43:14 -0800140 }
Brian Silvermanc71537c2016-01-01 13:43:14 -0800141 }
142
143 private:
Alex Perrycb7da4b2019-08-28 19:35:56 -0700144 ::aos::Sender<::frc971::control_loops::drivetrain::Goal>
Austin Schuhbd0a40f2019-06-30 14:56:31 -0700145 drivetrain_goal_sender_;
Alex Perrycb7da4b2019-08-28 19:35:56 -0700146 ::aos::Sender<::y2012::control_loops::accessories::Message>
Austin Schuhe4526232019-06-29 16:51:33 -0700147 accessories_goal_sender_;
Brian Silvermanc71537c2016-01-01 13:43:14 -0800148
Austin Schuhe4526232019-06-29 16:51:33 -0700149 bool is_high_gear_;
Brian Silvermanc71537c2016-01-01 13:43:14 -0800150};
151
152} // namespace joysticks
153} // namespace input
154} // namespace y2012
155
Austin Schuh094d09b2020-11-20 23:26:52 -0800156int main(int argc, char **argv) {
157 ::aos::InitGoogle(&argc, &argv);
Austin Schuh9fe68f72019-08-10 19:32:03 -0700158
Alex Perrycb7da4b2019-08-28 19:35:56 -0700159 aos::FlatbufferDetachedBuffer<aos::Configuration> config =
160 aos::configuration::ReadConfig("config.json");
161
162 ::aos::ShmEventLoop event_loop(&config.message());
Austin Schuh3e45c752019-02-02 12:19:11 -0800163 ::y2012::input::joysticks::Reader reader(&event_loop);
Austin Schuh9fe68f72019-08-10 19:32:03 -0700164
165 event_loop.Run();
166
Austin Schuhae87e312020-08-01 16:15:01 -0700167 return 0;
Brian Silvermanc71537c2016-01-01 13:43:14 -0800168}