Sanify the format posedge+negedge values are passed in.

Previously, everything which dealt with them either had to combine the
three separate sources or split them apart, which made no sense.

Change-Id: Ibcd9dc48f83ab7372fe46dc5d0a6483b281a08f0
diff --git a/frc971/control_loops/hall_effect_tracker.h b/frc971/control_loops/hall_effect_tracker.h
index 4e3981e..d1b6efe 100644
--- a/frc971/control_loops/hall_effect_tracker.h
+++ b/frc971/control_loops/hall_effect_tracker.h
@@ -7,7 +7,6 @@
 
 namespace frc971 {
 
-// TODO(brians): Have a Reset() for when the cape resets.
 // TODO(aschuh): Can we filter for 2 cycles instead of just 1?
 class HallEffectTracker {
  public:
@@ -22,10 +21,17 @@
 
   bool value() const { return value_; }
   bool last_value() const { return last_value_; }
+  bool is_posedge() const { return value() && !last_value(); }
+  bool is_negedge() const { return !value() && last_value(); }
+
+  double posedge_value() const { return posedge_value_; }
+  double negedge_value() const { return negedge_value_; }
 
   void Update(const HallEffectStruct &position) {
     last_value_ = value_;
     value_ = position.current;
+    posedge_value_ = position.posedge_value;
+    negedge_value_ = position.negedge_value;
     posedges_.update(position.posedge_count);
     negedges_.update(position.negedge_count);
   }
@@ -35,6 +41,8 @@
     negedges_.Reset(position.negedge_count);
     value_ = position.current;
     last_value_ = position.current;
+    posedge_value_ = position.posedge_value;
+    negedge_value_ = position.negedge_value;
   }
 
  private:
@@ -55,8 +63,11 @@
     int32_t count_ = 0;
     int32_t previous_count_ = 0;
   } posedges_, negedges_;
+
   bool value_ = false;
   bool last_value_ = false;
+
+  double posedge_value_ = 0, negedge_value_ = 0;
 };
 
 }  // namespace frc971