blob: 97bc283b33cdb7b246aff40b0699281cca0f937a [file] [log] [blame]
Brian Silvermanc71537c2016-01-01 13:43:14 -08001#include <stdio.h>
2#include <string.h>
3#include <unistd.h>
4#include <math.h>
5
Austin Schuh3e45c752019-02-02 12:19:11 -08006#include "aos/actions/actions.h"
7#include "aos/events/shm-event-loop.h"
John Park398c74a2018-10-20 21:17:39 -07008#include "aos/init.h"
John Park33858a32018-09-28 23:05:48 -07009#include "aos/input/driver_station_data.h"
Austin Schuh3e45c752019-02-02 12:19:11 -080010#include "aos/input/joystick_input.h"
John Park33858a32018-09-28 23:05:48 -070011#include "aos/logging/logging.h"
12#include "aos/time/time.h"
Brian Silvermanc71537c2016-01-01 13:43:14 -080013
Austin Schuh2a671df2016-11-26 15:00:06 -080014#include "frc971/control_loops/drivetrain/drivetrain.q.h"
Brian Silvermanc71537c2016-01-01 13:43:14 -080015#include "y2012/control_loops/accessories/accessories.q.h"
16
Austin Schuh2a671df2016-11-26 15:00:06 -080017using ::frc971::control_loops::drivetrain_queue;
Brian Silvermanc71537c2016-01-01 13:43:14 -080018
19using ::aos::input::driver_station::ButtonLocation;
20using ::aos::input::driver_station::JoystickAxis;
21using ::aos::input::driver_station::ControlBit;
22
23#define OLD_DS 0
24
25namespace y2012 {
26namespace input {
27namespace joysticks {
28
29const JoystickAxis kSteeringWheel(1, 1), kDriveThrottle(2, 2);
Campbell Crowley5b27f022016-02-20 16:55:35 -080030const ButtonLocation kShiftHigh(2, 3), kShiftLow(2, 1);
Brian Silvermanc71537c2016-01-01 13:43:14 -080031const ButtonLocation kQuickTurn(1, 5);
32
33const ButtonLocation kCatch(3, 10);
34
35#if OLD_DS
36const ButtonLocation kFire(3, 11);
37const ButtonLocation kUnload(1, 4);
38const ButtonLocation kReload(1, 2);
39
40const ButtonLocation kRollersOut(3, 12);
41const ButtonLocation kRollersIn(3, 7);
42
43const ButtonLocation kTuck(3, 9);
44const ButtonLocation kIntakePosition(3, 8);
45const ButtonLocation kIntakeOpenPosition(3, 10);
46const ButtonLocation kVerticalTuck(3, 1);
47const JoystickAxis kFlipRobot(3, 3);
48
49const ButtonLocation kLongShot(3, 5);
50const ButtonLocation kCloseShot(3, 2);
51const ButtonLocation kFenderShot(3, 3);
52const ButtonLocation kTrussShot(2, 11);
53const ButtonLocation kHumanPlayerShot(3, 2);
54#else
55const ButtonLocation kFire(3, 9);
56const ButtonLocation kUnload(1, 4);
57const ButtonLocation kReload(1, 2);
58
59const ButtonLocation kRollersOut(3, 8);
60const ButtonLocation kRollersIn(3, 3);
61
62const ButtonLocation kTuck(3, 4);
63const ButtonLocation kIntakePosition(3, 5);
64const ButtonLocation kIntakeOpenPosition(3, 11);
65const ButtonLocation kVerticalTuck(2, 6);
66const JoystickAxis kFlipRobot(3, 3);
67
68const ButtonLocation kLongShot(3, 7);
69const ButtonLocation kCloseShot(3, 6);
70const ButtonLocation kFenderShot(3, 2);
71const ButtonLocation kTrussShot(2, 11);
72const ButtonLocation kHumanPlayerShot(3, 1);
73#endif
74
75const ButtonLocation kUserLeft(2, 7);
76const ButtonLocation kUserRight(2, 10);
77
78const JoystickAxis kAdjustClawGoal(3, 2);
79const JoystickAxis kAdjustClawSeparation(3, 1);
80
81class Reader : public ::aos::input::JoystickInput {
82 public:
Austin Schuh3e45c752019-02-02 12:19:11 -080083 Reader(::aos::EventLoop *event_loop)
Austin Schuhe4526232019-06-29 16:51:33 -070084 : ::aos::input::JoystickInput(event_loop),
85 accessories_goal_sender_(
86 event_loop
87 ->MakeSender<::y2012::control_loops::AccessoriesQueue::Message>(
88 ".y2012.control_loops.accessories_queue.goal")),
89 is_high_gear_(false) {}
Brian Silvermanc71537c2016-01-01 13:43:14 -080090
91 void RunIteration(const ::aos::input::driver_station::Data &data) override {
92 if (!data.GetControlBit(ControlBit::kAutonomous)) {
93 HandleDrivetrain(data);
94 HandleTeleop(data);
95 }
96 }
97
98 void HandleDrivetrain(const ::aos::input::driver_station::Data &data) {
99 const double wheel = -data.GetAxis(kSteeringWheel);
100 const double throttle = -data.GetAxis(kDriveThrottle);
Campbell Crowley5b27f022016-02-20 16:55:35 -0800101 if (data.PosEdge(kShiftLow)) {
Brian Silvermanc71537c2016-01-01 13:43:14 -0800102 is_high_gear_ = false;
103 }
Campbell Crowley5b27f022016-02-20 16:55:35 -0800104 if (data.PosEdge(kShiftHigh)) {
Brian Silvermanc71537c2016-01-01 13:43:14 -0800105 is_high_gear_ = true;
106 }
107 if (!drivetrain_queue.goal.MakeWithBuilder()
Austin Schuh2b1fce02018-03-02 20:05:20 -0800108 .wheel(wheel)
Brian Silvermanc71537c2016-01-01 13:43:14 -0800109 .throttle(throttle)
110 .highgear(is_high_gear_)
111 .quickturn(data.IsPressed(kQuickTurn))
Brian Silvermanc71537c2016-01-01 13:43:14 -0800112 .Send()) {
113 LOG(WARNING, "sending stick values failed\n");
114 }
115 }
116
117 void HandleTeleop(const ::aos::input::driver_station::Data &data) {
Austin Schuhe4526232019-06-29 16:51:33 -0700118 auto accessories_message = accessories_goal_sender_.MakeMessage();
119 accessories_message->solenoids[0] = data.IsPressed(kLongShot);
120 accessories_message->solenoids[1] = data.IsPressed(kCloseShot);
121 accessories_message->solenoids[2] = data.IsPressed(kFenderShot);
122 accessories_message->sticks[0] = data.GetAxis(kAdjustClawGoal);
123 accessories_message->sticks[1] = data.GetAxis(kAdjustClawSeparation);
124 if (!accessories_message.Send()) {
125 LOG(WARNING, "sending accessories goal failed\n");
Brian Silvermanc71537c2016-01-01 13:43:14 -0800126 }
Brian Silvermanc71537c2016-01-01 13:43:14 -0800127 }
128
129 private:
Austin Schuhe4526232019-06-29 16:51:33 -0700130 ::aos::Sender<::y2012::control_loops::AccessoriesQueue::Message>
131 accessories_goal_sender_;
Brian Silvermanc71537c2016-01-01 13:43:14 -0800132
Austin Schuhe4526232019-06-29 16:51:33 -0700133 bool is_high_gear_;
Brian Silvermanc71537c2016-01-01 13:43:14 -0800134};
135
136} // namespace joysticks
137} // namespace input
138} // namespace y2012
139
140int main() {
Brian Silverman5090c432016-01-02 14:44:26 -0800141 ::aos::Init(-1);
Austin Schuh3e45c752019-02-02 12:19:11 -0800142 ::aos::ShmEventLoop event_loop;
143 ::y2012::input::joysticks::Reader reader(&event_loop);
Brian Silvermanc71537c2016-01-01 13:43:14 -0800144 reader.Run();
145 ::aos::Cleanup();
146}