Merge "Add elision support to wpilib's mutex."
diff --git a/frc971/control_loops/state_feedback_loop.h b/frc971/control_loops/state_feedback_loop.h
index 6ebd32e..d1b24a5 100644
--- a/frc971/control_loops/state_feedback_loop.h
+++ b/frc971/control_loops/state_feedback_loop.h
@@ -385,11 +385,11 @@
       CapU();
     }
 
-    UpdateObserver();
+    UpdateObserver(U_);
   }
 
-  void UpdateObserver() {
-    X_hat_ = A() * X_hat() + B() * U();
+  void UpdateObserver(const Eigen::Matrix<double, number_of_inputs, 1> &new_u) {
+    X_hat_ = A() * X_hat() + B() * new_u;
   }
 
   // Sets the current controller to be index, clamped to be within range.
diff --git a/tools/build_rules/fortran.bzl b/tools/build_rules/fortran.bzl
index 9f564d3..0162244 100644
--- a/tools/build_rules/fortran.bzl
+++ b/tools/build_rules/fortran.bzl
@@ -1,7 +1,9 @@
 def _single_fortran_object_impl(ctx):
   toolchain_cflags = (ctx.fragments.cpp.compiler_options([]) +
       ctx.fragments.cpp.c_options +
-      ctx.fragments.cpp.unfiltered_compiler_options([]) + ['-fPIC'])
+      ctx.fragments.cpp.unfiltered_compiler_options([]) +
+      ['-fPIC', '-Wno-maybe-uninitialized', '-Wno-unused-dummy-argument',
+       '-Wno-conversion', '-Wno-unused-variable'])
 
   cmd = toolchain_cflags + ['-c', ctx.file.src.path, '-o', ctx.outputs.pic_o.path]
   filtered_cmd = []
@@ -14,6 +16,7 @@
                    '-Wsign-compare',
                    '-Wformat=2',
                    '-Werror',
+                   '-Wextra',
                    '-Wno-builtin-macro-redefined',
                    '-D__has_feature(x)=0']
 
diff --git a/y2014/BUILD b/y2014/BUILD
index 0d2b618..b0094f8 100644
--- a/y2014/BUILD
+++ b/y2014/BUILD
@@ -1,5 +1,7 @@
 package(default_visibility = ['//visibility:public'])
 
+load('/aos/prime/downloader/downloader', 'aos_downloader')
+
 cc_library(
   name = 'constants',
   srcs = [
@@ -24,6 +26,7 @@
     'joystick_reader.cc',
   ],
   deps = [
+    ':constants',
     '//aos/prime/input:joystick_input',
     '//aos/linux_code:init',
     '//aos/common/logging',
@@ -31,7 +34,6 @@
     '//aos/common/util:log_interval',
     '//aos/common/actions:action_lib',
     '//y2014/control_loops/drivetrain:drivetrain_queue',
-    '//y2014:constants',
     '//frc971/queues:gyro',
     '//frc971/autonomous:auto_queue',
     '//y2014/control_loops/claw:claw_queue',
@@ -39,3 +41,35 @@
     '//y2014/actors:shoot_action_lib',
   ],
 )
+
+aos_downloader(
+  name = 'download',
+  start_srcs = [
+    ':hot_goal_reader',
+    ':joystick_reader',
+    '//y2014/control_loops/drivetrain:drivetrain',
+    '//y2014/control_loops/claw:claw',
+    '//y2014/control_loops/shooter:shooter',
+    '//y2014/autonomous:auto',
+    '//y2014/wpilib:wpilib_interface',
+    '//y2014/actors:binaries',
+    '//aos:prime_start_binaries',
+  ],
+  srcs = [
+    '//aos:prime_binaries',
+  ],
+)
+
+cc_binary(
+  name = 'hot_goal_reader',
+  srcs = [
+    'hot_goal_reader.cc',
+  ],
+  deps = [
+    '//aos/common:time',
+    '//aos/common/logging',
+    '//aos/common/logging:queue_logging',
+    '//aos/linux_code:init',
+    '//y2014/queues:hot_goal',
+  ],
+)
diff --git a/y2014/actors/actors.gyp b/y2014/actors/actors.gyp
deleted file mode 100644
index 48a03d0..0000000
--- a/y2014/actors/actors.gyp
+++ /dev/null
@@ -1,110 +0,0 @@
-{
-  'targets': [
-    {
-      'target_name': 'binaries',
-      'type': 'none',
-      'dependencies': [
-        'drivetrain_action',
-        'shoot_action',
-      ],
-    },
-    {
-      'target_name': 'shoot_action_queue',
-      'type': 'static_library',
-      'sources': ['shoot_action.q'],
-      'variables': {
-        'header_path': 'y2014/actors',
-      },
-      'dependencies': [
-        '<(AOS)/common/actions/actions.gyp:action_queue',
-      ],
-      'export_dependent_settings': [
-        '<(AOS)/common/actions/actions.gyp:action_queue',
-      ],
-      'includes': ['../../aos/build/queues.gypi'],
-    },
-    {
-      'target_name': 'shoot_action_lib',
-      'type': 'static_library',
-      'sources': [
-        'shoot_actor.cc',
-      ],
-      'dependencies': [
-        'shoot_action_queue',
-        '<(AOS)/common/actions/actions.gyp:action_lib',
-        '<(DEPTH)/y2014/queues/queues.gyp:profile_params',
-        '<(AOS)/build/aos.gyp:logging',
-        '<(DEPTH)/y2014/control_loops/shooter/shooter.gyp:shooter_queue',
-        '<(DEPTH)/y2014/control_loops/claw/claw.gyp:claw_queue',
-        '<(DEPTH)/y2014/control_loops/drivetrain/drivetrain.gyp:drivetrain_queue',
-        '<(DEPTH)/y2014/y2014.gyp:constants',
-      ],
-      'export_dependent_settings': [
-        'shoot_action_queue',
-        '<(AOS)/common/actions/actions.gyp:action_lib',
-      ],
-    },
-    {
-      'target_name': 'shoot_action',
-      'type': 'executable',
-      'sources': [
-        'shoot_actor_main.cc',
-      ],
-      'dependencies': [
-        '<(AOS)/linux_code/linux_code.gyp:init',
-        'shoot_action_lib',
-        'shoot_action_queue',
-      ],
-    },
-    {
-      'target_name': 'drivetrain_action_queue',
-      'type': 'static_library',
-      'sources': ['drivetrain_action.q'],
-      'variables': {
-        'header_path': 'y2014/actors',
-      },
-      'dependencies': [
-        '<(AOS)/common/actions/actions.gyp:action_queue',
-      ],
-      'export_dependent_settings': [
-        '<(AOS)/common/actions/actions.gyp:action_queue',
-      ],
-      'includes': ['../../aos/build/queues.gypi'],
-    },
-    {
-      'target_name': 'drivetrain_action_lib',
-      'type': 'static_library',
-      'sources': [
-        'drivetrain_actor.cc',
-      ],
-      'dependencies': [
-        'drivetrain_action_queue',
-        '<(DEPTH)/y2014/y2014.gyp:constants',
-        '<(AOS)/common/common.gyp:time',
-        '<(AOS)/common/util/util.gyp:phased_loop',
-        '<(AOS)/build/aos.gyp:logging',
-        '<(AOS)/common/actions/actions.gyp:action_lib',
-        '<(AOS)/common/logging/logging.gyp:queue_logging',
-        '<(EXTERNALS):eigen',
-        '<(AOS)/common/util/util.gyp:trapezoid_profile',
-        '<(DEPTH)/y2014/control_loops/drivetrain/drivetrain.gyp:drivetrain_queue',
-      ],
-      'export_dependent_settings': [
-        '<(AOS)/common/actions/actions.gyp:action_lib',
-        'drivetrain_action_queue',
-      ],
-    },
-    {
-      'target_name': 'drivetrain_action',
-      'type': 'executable',
-      'sources': [
-        'drivetrain_actor_main.cc',
-      ],
-      'dependencies': [
-        '<(AOS)/linux_code/linux_code.gyp:init',
-        'drivetrain_action_lib',
-        'drivetrain_action_queue',
-      ],
-    },
-  ],
-}
diff --git a/y2014/autonomous/autonomous.gyp b/y2014/autonomous/autonomous.gyp
deleted file mode 100644
index 8efdaec..0000000
--- a/y2014/autonomous/autonomous.gyp
+++ /dev/null
@@ -1,45 +0,0 @@
-{
-  'targets': [
-    {
-      'target_name': 'auto_lib',
-      'type': 'static_library',
-      'sources': [
-        'auto.cc',
-      ],
-      'dependencies': [
-        '<(DEPTH)/frc971/autonomous/autonomous.gyp:auto_queue',
-        '<(AOS)/common/controls/controls.gyp:control_loop',
-        '<(DEPTH)/y2014/control_loops/drivetrain/drivetrain.gyp:drivetrain_queue',
-        '<(DEPTH)/y2014/control_loops/shooter/shooter.gyp:shooter_queue',
-        '<(DEPTH)/y2014/control_loops/claw/claw.gyp:claw_queue',
-        '<(DEPTH)/y2014/y2014.gyp:constants',
-        '<(AOS)/common/common.gyp:time',
-        '<(AOS)/common/util/util.gyp:phased_loop',
-        '<(AOS)/common/util/util.gyp:trapezoid_profile',
-        '<(AOS)/build/aos.gyp:logging',
-        '<(AOS)/common/actions/actions.gyp:action_lib',
-        '<(DEPTH)/y2014/actors/actors.gyp:shoot_action_lib',
-        '<(DEPTH)/y2014/actors/actors.gyp:drivetrain_action_lib',
-        '<(DEPTH)/y2014/queues/queues.gyp:hot_goal',
-        '<(AOS)/common/logging/logging.gyp:queue_logging',
-        '<(DEPTH)/y2014/queues/queues.gyp:profile_params',
-        '<(DEPTH)/y2014/queues/queues.gyp:auto_mode',
-      ],
-      'export_dependent_settings': [
-        '<(AOS)/common/controls/controls.gyp:control_loop',
-      ],
-    },
-    {
-      'target_name': 'auto',
-      'type': 'executable',
-      'sources': [
-        'auto_main.cc',
-      ],
-      'dependencies': [
-        '<(AOS)/linux_code/linux_code.gyp:init',
-        '<(DEPTH)/frc971/autonomous/autonomous.gyp:auto_queue',
-        'auto_lib',
-      ],
-    },
-  ],
-}
diff --git a/y2014/control_loops/claw/claw.gyp b/y2014/control_loops/claw/claw.gyp
deleted file mode 100644
index 8a6a7c5..0000000
--- a/y2014/control_loops/claw/claw.gyp
+++ /dev/null
@@ -1,99 +0,0 @@
-{
-  'targets': [
-    {
-      'target_name': 'replay_claw',
-      'type': 'executable',
-      'variables': {
-        'no_rsync': 1,
-      },
-      'sources': [
-        'replay_claw.cc',
-      ],
-      'dependencies': [
-        'claw_queue',
-        '<(AOS)/common/controls/controls.gyp:replay_control_loop',
-        '<(AOS)/linux_code/linux_code.gyp:init',
-      ],
-    },
-    {
-      'target_name': 'claw_queue',
-      'type': 'static_library',
-      'sources': ['claw.q'],
-      'variables': {
-        'header_path': 'y2014/control_loops/claw',
-      },
-      'dependencies': [
-        '<(AOS)/common/controls/controls.gyp:control_loop_queues',
-        '<(DEPTH)/frc971/control_loops/control_loops.gyp:queues',
-      ],
-      'export_dependent_settings': [
-        '<(AOS)/common/controls/controls.gyp:control_loop_queues',
-        '<(DEPTH)/frc971/control_loops/control_loops.gyp:queues',
-      ],
-      'includes': ['../../../aos/build/queues.gypi'],
-    },
-    {
-      'target_name': 'claw_lib',
-      'type': 'static_library',
-      'sources': [
-        'claw.cc',
-        'claw_motor_plant.cc',
-      ],
-      'dependencies': [
-        'claw_queue',
-        '<(AOS)/common/controls/controls.gyp:control_loop',
-        '<(DEPTH)/y2014/y2014.gyp:constants',
-        '<(DEPTH)/frc971/control_loops/control_loops.gyp:state_feedback_loop',
-        '<(AOS)/common/controls/controls.gyp:polytope',
-        '<(DEPTH)/frc971/control_loops/control_loops.gyp:coerce_goal',
-        '<(AOS)/common/logging/logging.gyp:queue_logging',
-        '<(AOS)/common/logging/logging.gyp:matrix_logging',
-      ],
-      'export_dependent_settings': [
-        'claw_queue',
-        '<(AOS)/common/controls/controls.gyp:control_loop',
-        '<(DEPTH)/frc971/control_loops/control_loops.gyp:state_feedback_loop',
-        '<(AOS)/common/controls/controls.gyp:polytope',
-        '<(DEPTH)/frc971/control_loops/control_loops.gyp:coerce_goal',
-      ],
-    },
-    {
-      'target_name': 'claw_lib_test',
-      'type': 'executable',
-      'sources': [
-        'claw_lib_test.cc',
-      ],
-      'dependencies': [
-        '<(EXTERNALS):gtest',
-        'claw_queue',
-        'claw_lib',
-        '<(DEPTH)/frc971/control_loops/control_loops.gyp:state_feedback_loop',
-        '<(AOS)/common/controls/controls.gyp:control_loop_test',
-      ],
-    },
-    {
-      'target_name': 'claw_calibration',
-      'type': 'executable',
-      'sources': [
-        'claw_calibration.cc',
-      ],
-      'dependencies': [
-        '<(AOS)/linux_code/linux_code.gyp:init',
-        'claw_queue',
-        '<(AOS)/common/controls/controls.gyp:control_loop',
-        '<(DEPTH)/y2014/y2014.gyp:constants',
-      ],
-    },
-    {
-      'target_name': 'claw',
-      'type': 'executable',
-      'sources': [
-        'claw_main.cc',
-      ],
-      'dependencies': [
-        '<(AOS)/linux_code/linux_code.gyp:init',
-        'claw_lib',
-      ],
-    },
-  ],
-}
diff --git a/y2014/control_loops/drivetrain/drivetrain.gyp b/y2014/control_loops/drivetrain/drivetrain.gyp
deleted file mode 100644
index ffe4337..0000000
--- a/y2014/control_loops/drivetrain/drivetrain.gyp
+++ /dev/null
@@ -1,103 +0,0 @@
-{
-  'targets': [
-    {
-      'target_name': 'replay_drivetrain',
-      'type': 'executable',
-      'variables': {
-        'no_rsync': 1,
-      },
-      'sources': [
-        'replay_drivetrain.cc',
-      ],
-      'dependencies': [
-        'drivetrain_queue',
-        '<(AOS)/common/controls/controls.gyp:replay_control_loop',
-        '<(AOS)/linux_code/linux_code.gyp:init',
-      ],
-    },
-    {
-      'target_name': 'drivetrain_queue',
-      'type': 'static_library',
-      'sources': ['drivetrain.q'],
-      'variables': {
-        'header_path': 'y2014/control_loops/drivetrain',
-      },
-      'dependencies': [
-        '<(AOS)/common/controls/controls.gyp:control_loop_queues',
-      ],
-      'export_dependent_settings': [
-        '<(AOS)/common/controls/controls.gyp:control_loop_queues',
-      ],
-      'includes': ['../../../aos/build/queues.gypi'],
-    },
-    {
-      'target_name': 'polydrivetrain_plants',
-      'type': 'static_library',
-      'sources': [
-        'polydrivetrain_dog_motor_plant.cc',
-        'drivetrain_dog_motor_plant.cc',
-      ],
-      'dependencies': [
-        '<(DEPTH)/frc971/control_loops/control_loops.gyp:state_feedback_loop',
-      ],
-      'export_dependent_settings': [
-        '<(DEPTH)/frc971/control_loops/control_loops.gyp:state_feedback_loop',
-      ],
-    },
-    {
-      'target_name': 'drivetrain_lib',
-      'type': 'static_library',
-      'sources': [
-        'drivetrain.cc',
-        'polydrivetrain_cim_plant.cc',
-      ],
-      'dependencies': [
-        'drivetrain_queue',
-        '<(AOS)/common/controls/controls.gyp:control_loop',
-        '<(DEPTH)/y2014/y2014.gyp:constants',
-        '<(AOS)/common/controls/controls.gyp:polytope',
-        '<(DEPTH)/frc971/control_loops/control_loops.gyp:state_feedback_loop',
-        '<(DEPTH)/frc971/control_loops/control_loops.gyp:coerce_goal',
-        '<(DEPTH)/frc971/queues/queues.gyp:gyro',
-        '<(AOS)/common/util/util.gyp:log_interval',
-        '<(AOS)/common/logging/logging.gyp:queue_logging',
-        '<(AOS)/common/logging/logging.gyp:matrix_logging',
-      ],
-      'export_dependent_settings': [
-        '<(AOS)/common/controls/controls.gyp:polytope',
-        '<(DEPTH)/frc971/control_loops/control_loops.gyp:state_feedback_loop',
-        '<(DEPTH)/frc971/control_loops/control_loops.gyp:coerce_goal',
-        '<(AOS)/common/controls/controls.gyp:control_loop',
-        'drivetrain_queue',
-      ],
-    },
-    {
-      'target_name': 'drivetrain_lib_test',
-      'type': 'executable',
-      'sources': [
-        'drivetrain_lib_test.cc',
-      ],
-      'dependencies': [
-        '<(EXTERNALS):gtest',
-        'drivetrain_queue',
-        'drivetrain_lib',
-        '<(AOS)/common/controls/controls.gyp:control_loop_test',
-        '<(DEPTH)/frc971/control_loops/control_loops.gyp:state_feedback_loop',
-        '<(DEPTH)/frc971/queues/queues.gyp:gyro',
-        '<(AOS)/common/common.gyp:queues',
-      ],
-    },
-    {
-      'target_name': 'drivetrain',
-      'type': 'executable',
-      'sources': [
-        'drivetrain_main.cc',
-      ],
-      'dependencies': [
-        '<(AOS)/linux_code/linux_code.gyp:init',
-        'drivetrain_lib',
-        'drivetrain_queue',
-      ],
-    },
-  ],
-}
diff --git a/y2014/control_loops/drivetrain/ssdrivetrain.cc b/y2014/control_loops/drivetrain/ssdrivetrain.cc
index 53cc2dd..2551ddb 100644
--- a/y2014/control_loops/drivetrain/ssdrivetrain.cc
+++ b/y2014/control_loops/drivetrain/ssdrivetrain.cc
@@ -157,7 +157,7 @@
       loop_->mutable_U().setZero();
       loop_->mutable_U_uncapped().setZero();
     }
-    loop_->UpdateObserver();
+    loop_->UpdateObserver(loop_->U());
   }
   ::Eigen::Matrix<double, 4, 1> E = loop_->R() - loop_->X_hat();
   LOG_MATRIX(DEBUG, "E", E);
diff --git a/y2014/control_loops/shooter/shooter.gyp b/y2014/control_loops/shooter/shooter.gyp
deleted file mode 100644
index e96b592..0000000
--- a/y2014/control_loops/shooter/shooter.gyp
+++ /dev/null
@@ -1,82 +0,0 @@
-{
-  'targets': [
-    {
-      'target_name': 'replay_shooter',
-      'type': 'executable',
-      'variables': {
-        'no_rsync': 1,
-      },
-      'sources': [
-        'replay_shooter.cc',
-      ],
-      'dependencies': [
-        'shooter_queue',
-        '<(AOS)/common/controls/controls.gyp:replay_control_loop',
-        '<(AOS)/linux_code/linux_code.gyp:init',
-      ],
-    },
-    {
-      'target_name': 'shooter_queue',
-      'type': 'static_library',
-      'sources': ['shooter.q'],
-      'variables': {
-        'header_path': 'y2014/control_loops/shooter',
-      },
-      'dependencies': [
-        '<(AOS)/common/controls/controls.gyp:control_loop_queues',
-        '<(DEPTH)/frc971/control_loops/control_loops.gyp:queues',
-      ],
-      'export_dependent_settings': [
-        '<(AOS)/common/controls/controls.gyp:control_loop_queues',
-        '<(DEPTH)/frc971/control_loops/control_loops.gyp:queues',
-      ],
-      'includes': ['../../../aos/build/queues.gypi'],
-    },
-    {
-      'target_name': 'shooter_lib',
-      'type': 'static_library',
-      'sources': [
-        'shooter.cc',
-        'shooter_motor_plant.cc',
-        'unaugmented_shooter_motor_plant.cc',
-      ],
-      'dependencies': [
-        'shooter_queue',
-        '<(AOS)/common/controls/controls.gyp:control_loop',
-        '<(DEPTH)/y2014/y2014.gyp:constants',
-        '<(DEPTH)/frc971/control_loops/control_loops.gyp:state_feedback_loop',
-        '<(AOS)/common/logging/logging.gyp:queue_logging',
-      ],
-      'export_dependent_settings': [
-        'shooter_queue',
-        '<(AOS)/common/controls/controls.gyp:control_loop',
-        '<(DEPTH)/frc971/control_loops/control_loops.gyp:state_feedback_loop',
-      ],
-    },
-    {
-      'target_name': 'shooter_lib_test',
-      'type': 'executable',
-      'sources': [
-        'shooter_lib_test.cc',
-      ],
-      'dependencies': [
-        '<(EXTERNALS):gtest',
-        'shooter_queue',
-        'shooter_lib',
-        '<(AOS)/common/controls/controls.gyp:control_loop_test',
-        '<(DEPTH)/frc971/control_loops/control_loops.gyp:state_feedback_loop',
-      ],
-    },
-    {
-      'target_name': 'shooter',
-      'type': 'executable',
-      'sources': [
-        'shooter_main.cc',
-      ],
-      'dependencies': [
-        '<(AOS)/linux_code/linux_code.gyp:init',
-        'shooter_lib',
-      ],
-    },
-  ],
-}
diff --git a/y2014/control_loops/update_arm.sh b/y2014/control_loops/update_arm.sh
deleted file mode 100755
index c941db9..0000000
--- a/y2014/control_loops/update_arm.sh
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/bash
-#
-# Updates the arm controllers (for both robots).
-
-export PYTHONPATH=../../frc971/control_loops/python
-
-cd $(dirname $0)
-
-./python/arm.py fridge/arm_motor_plant.cc \
-    fridge/arm_motor_plant.h \
-    fridge/integral_arm_plant.cc \
-    fridge/integral_arm_plant.h
diff --git a/y2014/control_loops/update_claw.sh b/y2014/control_loops/update_claw.sh
deleted file mode 100755
index 18ffc4c..0000000
--- a/y2014/control_loops/update_claw.sh
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/bash
-#
-# Updates the claw controllers.
-
-export PYTHONPATH=../../frc971/control_loops/python
-
-cd $(dirname $0)
-
-./python/claw.py claw/claw_motor_plant.h \
-    claw/claw_motor_plant.cc
diff --git a/y2014/control_loops/update_drivetrain.sh b/y2014/control_loops/update_drivetrain.sh
deleted file mode 100755
index f783939..0000000
--- a/y2014/control_loops/update_drivetrain.sh
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/bash
-#
-# Updates the drivetrain controllers (for both robots).
-
-export PYTHONPATH=../../frc971/control_loops/python
-
-cd $(dirname $0)
-
-./python/drivetrain.py drivetrain/drivetrain_dog_motor_plant.h \
-    drivetrain/drivetrain_dog_motor_plant.cc \
-    drivetrain/drivetrain_clutch_motor_plant.h \
-    drivetrain/drivetrain_clutch_motor_plant.cc
diff --git a/y2014/control_loops/update_polydrivetrain.sh b/y2014/control_loops/update_polydrivetrain.sh
deleted file mode 100755
index 6cc3e56..0000000
--- a/y2014/control_loops/update_polydrivetrain.sh
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/bash
-#
-# Updates the polydrivetrain controllers (for both robots) and CIM models.
-
-export PYTHONPATH=../../frc971/control_loops/python
-
-cd $(dirname $0)
-
-./python/polydrivetrain.py drivetrain/polydrivetrain_dog_motor_plant.h \
-    drivetrain/polydrivetrain_dog_motor_plant.cc \
-    drivetrain/polydrivetrain_cim_plant.h \
-    drivetrain/polydrivetrain_cim_plant.cc
diff --git a/y2014/control_loops/update_shooter.sh b/y2014/control_loops/update_shooter.sh
deleted file mode 100755
index 6dbf5f5..0000000
--- a/y2014/control_loops/update_shooter.sh
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/bash
-#
-# Updates the shooter controller.
-
-cd $(dirname $0)
-
-export PYTHONPATH=../../frc971/control_loops/python
-
-./python/shooter.py shooter/shooter_motor_plant.h \
-    shooter/shooter_motor_plant.cc \
-    shooter/unaugmented_shooter_motor_plant.h \
-    shooter/unaugmented_shooter_motor_plant.cc
diff --git a/y2014/prime/hot_goal_reader.cc b/y2014/hot_goal_reader.cc
similarity index 100%
rename from y2014/prime/hot_goal_reader.cc
rename to y2014/hot_goal_reader.cc
diff --git a/y2014/prime/BUILD b/y2014/prime/BUILD
deleted file mode 100644
index f504aba..0000000
--- a/y2014/prime/BUILD
+++ /dev/null
@@ -1,35 +0,0 @@
-package(default_visibility = ['//visibility:public'])
-
-load('/aos/prime/downloader/downloader', 'aos_downloader')
-
-aos_downloader(
-  name = 'download',
-  start_srcs = [
-    '//y2014/control_loops/drivetrain:drivetrain',
-    '//y2014/control_loops/claw:claw',
-    '//y2014/control_loops/shooter:shooter',
-    '//y2014/autonomous:auto',
-    '//y2014/wpilib:wpilib_interface',
-    '//y2014:joystick_reader',
-    '//y2014/actors:binaries',
-    ':hot_goal_reader',
-    '//aos:prime_start_binaries',
-  ],
-  srcs = [
-    '//aos:prime_binaries',
-  ],
-)
-
-cc_binary(
-  name = 'hot_goal_reader',
-  srcs = [
-    'hot_goal_reader.cc',
-  ],
-  deps = [
-    '//aos/common:time',
-    '//aos/common/logging',
-    '//aos/common/logging:queue_logging',
-    '//aos/linux_code:init',
-    '//y2014/queues:hot_goal',
-  ],
-)
diff --git a/y2014/prime/build.sh b/y2014/prime/build.sh
deleted file mode 100755
index f83d9f4..0000000
--- a/y2014/prime/build.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/bash
-
-cd $(dirname $0)
-
-exec ../../aos/build/build.py $0 prime y2014 prime.gyp "$@"
diff --git a/y2014/prime/compile_loop.sh b/y2014/prime/compile_loop.sh
deleted file mode 100755
index de6b0d3..0000000
--- a/y2014/prime/compile_loop.sh
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/bin/bash
-
-# Runs `build.sh all` and then waits for a file to be modified in a loop.
-# Useful for making changes to the code while continuously making sure they
-# compile.
-# Requires the util-linux and inotify-tools packages.
-
-chrt -i -p 0 $$
-ionice -c 3 -p $$
-
-while true; do
-	$(dirname $0)/build.sh all
-	echo 'compile_loop.sh: Waiting for a file modification...' 1>&2
-	inotifywait -e close_write -r aos frc971 bbb_cape
-	echo 'compile_loop.sh: Done waiting for a file modification' 1>&2
-done
diff --git a/y2014/prime/prime.gyp b/y2014/prime/prime.gyp
deleted file mode 100644
index a64fc1c..0000000
--- a/y2014/prime/prime.gyp
+++ /dev/null
@@ -1,55 +0,0 @@
-{
-  'targets': [
-    {
-      'target_name': 'All',
-      'type': 'none',
-      'dependencies': [
-        '../../frc971/frc971.gyp:All',
-
-        '../control_loops/drivetrain/drivetrain.gyp:drivetrain',
-        '../control_loops/drivetrain/drivetrain.gyp:drivetrain_lib_test',
-        '../control_loops/drivetrain/drivetrain.gyp:replay_drivetrain',
-        '../control_loops/claw/claw.gyp:claw',
-        '../control_loops/claw/claw.gyp:claw_calibration',
-        '../control_loops/claw/claw.gyp:claw_lib_test',
-        '../control_loops/claw/claw.gyp:replay_claw',
-        '../control_loops/shooter/shooter.gyp:shooter',
-        '../control_loops/shooter/shooter.gyp:shooter_lib_test',
-        '../control_loops/shooter/shooter.gyp:replay_shooter',
-        '../autonomous/autonomous.gyp:auto',
-        '../y2014.gyp:joystick_reader',
-        '../actors/actors.gyp:binaries',
-        'hot_goal_reader',
-      ],
-      'copies': [
-        {
-          'destination': '<(rsync_dir)',
-          'files': [
-            'start_list.txt',
-          ],
-        },
-      ],
-      'conditions': [
-        ['ARCHITECTURE=="arm_frc"', {
-          'dependencies': [
-            '../wpilib/wpilib.gyp:wpilib_interface',
-          ],
-        }],
-      ],
-    },
-    {
-      'target_name': 'hot_goal_reader',
-      'type': 'executable',
-      'sources': [
-        'hot_goal_reader.cc',
-      ],
-      'dependencies': [
-        '<(AOS)/common/common.gyp:time',
-        '<(AOS)/build/aos.gyp:logging',
-        '<(AOS)/common/logging/logging.gyp:queue_logging',
-        '<(AOS)/linux_code/linux_code.gyp:init',
-        '<(DEPTH)/y2014/queues/queues.gyp:hot_goal'
-      ],
-    },
-  ],
-}
diff --git a/y2014/queues/queues.gyp b/y2014/queues/queues.gyp
deleted file mode 100644
index 1325384..0000000
--- a/y2014/queues/queues.gyp
+++ /dev/null
@@ -1,37 +0,0 @@
-{
-  'targets': [
-    {
-      'target_name': 'profile_params',
-      'type': 'static_library',
-      'sources': [
-        'profile_params.q',
-      ],
-      'variables': {
-        'header_path': 'y2014/queues',
-      },
-      'includes': ['../../aos/build/queues.gypi'],
-    },
-    {
-      'target_name': 'hot_goal',
-      'type': 'static_library',
-      'sources': [
-        'hot_goal.q',
-      ],
-      'variables': {
-        'header_path': 'y2014/queues',
-      },
-      'includes': ['../../aos/build/queues.gypi'],
-    },
-    {
-      'target_name': 'auto_mode',
-      'type': 'static_library',
-      'sources': [
-        'auto_mode.q',
-      ],
-      'variables': {
-        'header_path': 'y2014/queues',
-      },
-      'includes': ['../../aos/build/queues.gypi'],
-    },
-  ],
-}
diff --git a/y2014/wpilib/wpilib.gyp b/y2014/wpilib/wpilib.gyp
deleted file mode 100644
index 798ff76..0000000
--- a/y2014/wpilib/wpilib.gyp
+++ /dev/null
@@ -1,39 +0,0 @@
-{
-  'targets': [
-    {
-      'target_name': 'wpilib_interface',
-      'type': 'executable',
-      'sources': [
-        'wpilib_interface.cc'
-      ],
-      'dependencies': [
-        '<(AOS)/linux_code/linux_code.gyp:init',
-        '<(AOS)/common/common.gyp:stl_mutex',
-        '<(AOS)/build/aos.gyp:logging',
-        '<(EXTERNALS):WPILib',
-        '<(DEPTH)/y2014/y2014.gyp:constants',
-        '<(DEPTH)/y2014/queues/queues.gyp:auto_mode',
-        '<(DEPTH)/y2014/control_loops/drivetrain/drivetrain.gyp:drivetrain_queue',
-        '<(DEPTH)/y2014/control_loops/shooter/shooter.gyp:shooter_queue',
-        '<(DEPTH)/y2014/control_loops/claw/claw.gyp:claw_queue',
-        '<(AOS)/common/controls/controls.gyp:control_loop',
-        '<(AOS)/common/util/util.gyp:log_interval',
-        '<(AOS)/common/common.gyp:time',
-        '<(AOS)/common/logging/logging.gyp:queue_logging',
-        '<(AOS)/common/messages/messages.gyp:robot_state',
-        '<(AOS)/common/util/util.gyp:phased_loop',
-        '<(AOS)/common/messages/messages.gyp:robot_state',
-        '<(DEPTH)/frc971/wpilib/wpilib.gyp:hall_effect',
-        '<(DEPTH)/frc971/wpilib/wpilib.gyp:joystick_sender',
-        '<(DEPTH)/frc971/wpilib/wpilib.gyp:loop_output_handler',
-        '<(DEPTH)/frc971/wpilib/wpilib.gyp:buffered_pcm',
-        '<(DEPTH)/frc971/wpilib/wpilib.gyp:gyro_sender',
-        '<(DEPTH)/frc971/wpilib/wpilib.gyp:dma_edge_counting',
-        '<(DEPTH)/frc971/wpilib/wpilib.gyp:interrupt_edge_counting',
-        '<(DEPTH)/frc971/wpilib/wpilib.gyp:encoder_and_potentiometer',
-        '<(DEPTH)/frc971/control_loops/control_loops.gyp:queues',
-        '<(DEPTH)/frc971/wpilib/wpilib.gyp:logging_queue',
-      ],
-    },
-  ],
-}
diff --git a/y2014/y2014.gyp b/y2014/y2014.gyp
deleted file mode 100644
index 8787a9a..0000000
--- a/y2014/y2014.gyp
+++ /dev/null
@@ -1,44 +0,0 @@
-{
-  'targets': [
-    {
-      'target_name': 'constants',
-      'type': 'static_library',
-      'sources': [
-        'constants.cc',
-      ],
-      'dependencies': [
-        '<(AOS)/build/aos.gyp:logging',
-        '<(AOS)/common/common.gyp:once',
-        '<(AOS)/common/network/network.gyp:team_number',
-        '<(DEPTH)/frc971/control_loops/control_loops.gyp:state_feedback_loop',
-        '<(DEPTH)/y2014/control_loops/drivetrain/drivetrain.gyp:polydrivetrain_plants',
-      ],
-      'export_dependent_settings': [
-        '<(DEPTH)/frc971/control_loops/control_loops.gyp:state_feedback_loop',
-      ],
-    },
-    {
-      'target_name': 'joystick_reader',
-      'type': 'executable',
-      'sources': [
-        'joystick_reader.cc',
-      ],
-      'dependencies': [
-        '<(AOS)/prime/input/input.gyp:joystick_input',
-        '<(AOS)/linux_code/linux_code.gyp:init',
-        '<(AOS)/build/aos.gyp:logging',
-        '<(AOS)/common/common.gyp:time',
-        '<(AOS)/common/util/util.gyp:log_interval',
-        '<(AOS)/common/actions/actions.gyp:action_lib',
-
-        '<(DEPTH)/y2014/control_loops/drivetrain/drivetrain.gyp:drivetrain_queue',
-        '<(DEPTH)/y2014/y2014.gyp:constants',
-        '<(DEPTH)/frc971/queues/queues.gyp:gyro',
-        '<(DEPTH)/frc971/autonomous/autonomous.gyp:auto_queue',
-        '<(DEPTH)/y2014/control_loops/claw/claw.gyp:claw_queue',
-        '<(DEPTH)/y2014/control_loops/shooter/shooter.gyp:shooter_queue',
-        '<(DEPTH)/y2014/actors/actors.gyp:shoot_action_lib',
-      ],
-    },
-  ],
-}
diff --git a/y2014_bot3/control_loops/drivetrain/drivetrain.cc b/y2014_bot3/control_loops/drivetrain/drivetrain.cc
index 047cb71..8f26161 100644
--- a/y2014_bot3/control_loops/drivetrain/drivetrain.cc
+++ b/y2014_bot3/control_loops/drivetrain/drivetrain.cc
@@ -183,7 +183,7 @@
         loop_->mutable_U().setZero();
         loop_->mutable_U_uncapped().setZero();
       }
-      loop_->UpdateObserver();
+      loop_->UpdateObserver(loop_->U());
     }
     ::Eigen::Matrix<double, 4, 1> E = loop_->R() - loop_->X_hat();
     LOG_MATRIX(DEBUG, "E", E);
diff --git a/y2014_bot3/wpilib/wpilib_interface.cc b/y2014_bot3/wpilib/wpilib_interface.cc
index 089b1ab..4dc421d 100644
--- a/y2014_bot3/wpilib/wpilib_interface.cc
+++ b/y2014_bot3/wpilib/wpilib_interface.cc
@@ -17,6 +17,7 @@
 #include "dma.h"
 #include "ControllerPower.h"
 #include "DigitalInput.h"
+#undef ERROR
 
 #include "aos/common/logging/logging.h"
 #include "aos/common/logging/queue_logging.h"
@@ -81,7 +82,12 @@
     LOG(INFO, "In sensor reader thread\n");
 
     my_pid_ = getpid();
-    ds_ = DriverStation::GetInstance();
+    ds_ =
+#ifdef WPILIB2015
+        DriverStation::GetInstance();
+#else
+        &DriverStation::GetInstance();
+#endif
 
     LOG(INFO, "Things are now started\n");
 
diff --git a/y2015/control_loops/drivetrain/drivetrain.cc b/y2015/control_loops/drivetrain/drivetrain.cc
index 22a5d48..9ed927a 100644
--- a/y2015/control_loops/drivetrain/drivetrain.cc
+++ b/y2015/control_loops/drivetrain/drivetrain.cc
@@ -192,7 +192,7 @@
         loop_->mutable_U().setZero();
         loop_->mutable_U_uncapped().setZero();
       }
-      loop_->UpdateObserver();
+      loop_->UpdateObserver(loop_->U());
     }
     ::Eigen::Matrix<double, 4, 1> E = loop_->R() - loop_->X_hat();
     LOG_MATRIX(DEBUG, "E", E);
diff --git a/y2015_bot3/control_loops/drivetrain/drivetrain.cc b/y2015_bot3/control_loops/drivetrain/drivetrain.cc
index b126ad2..f7e039e 100644
--- a/y2015_bot3/control_loops/drivetrain/drivetrain.cc
+++ b/y2015_bot3/control_loops/drivetrain/drivetrain.cc
@@ -187,7 +187,7 @@
         loop_->mutable_U().setZero();
         loop_->mutable_U_uncapped().setZero();
       }
-      loop_->UpdateObserver();
+      loop_->UpdateObserver(loop_->U());
     }
     ::Eigen::Matrix<double, 4, 1> E = loop_->R() - loop_->X_hat();
     LOG_MATRIX(DEBUG, "E", E);