Convert joystick_reader over to event loops.

Change-Id: I97b78254b0fc96853f162b66ef75ec97a6c9c50b
diff --git a/y2018/joystick_reader.cc b/y2018/joystick_reader.cc
index 41efc00..41b4d14 100644
--- a/y2018/joystick_reader.cc
+++ b/y2018/joystick_reader.cc
@@ -87,7 +87,8 @@
 
 class Reader : public ::aos::input::JoystickInput {
  public:
-  Reader() {
+  Reader(::aos::EventLoop *event_loop)
+      : ::aos::input::JoystickInput(event_loop) {
     const uint16_t team = ::aos::network::GetTeamNumber();
 
     drivetrain_input_reader_ = DrivetrainInputReader::Make(
@@ -370,9 +371,8 @@
       LOG(WARNING, "no auto mode values\n");
       params.mode = 0;
     }
-    // TODO(austin): use the mode later if we care.  We don't care right now.
-    params.mode = static_cast<int>(::aos::joystick_state->switch_left) |
-                  (static_cast<int>(::aos::joystick_state->scale_left) << 1);
+    // Low bit is switch, high bit is scale.  1 means left, 0 means right.
+    params.mode = mode();
     action_queue_.EnqueueAction(
         ::frc971::autonomous::MakeAutonomousAction(params));
   }
@@ -408,7 +408,8 @@
 
 int main() {
   ::aos::Init(-1);
-  ::y2018::input::joysticks::Reader reader;
+  ::aos::ShmEventLoop event_loop;
+  ::y2018::input::joysticks::Reader reader(&event_loop);
   reader.Run();
   ::aos::Cleanup();
 }