Make monotonic_now a required parameter to PhasedLoop

This prepares us much better for mocking out time as part of the event
loop conversion.

Change-Id: I57560b97b265ddd41fe7a4e9f74d7b1324d15955
diff --git a/frc971/autonomous/base_autonomous_actor.cc b/frc971/autonomous/base_autonomous_actor.cc
index 40d65c3..4d3f3fc 100644
--- a/frc971/autonomous/base_autonomous_actor.cc
+++ b/frc971/autonomous/base_autonomous_actor.cc
@@ -87,6 +87,7 @@
   }
 
   ::aos::time::PhasedLoop phased_loop(::std::chrono::milliseconds(5),
+                                      event_loop()->monotonic_now(),
                                       ::std::chrono::milliseconds(5) / 2);
   while (true) {
     // Poll the running bit and see if we should cancel.
@@ -99,6 +100,7 @@
 
 bool BaseAutonomousActor::WaitForDriveDone() {
   ::aos::time::PhasedLoop phased_loop(::std::chrono::milliseconds(5),
+                                      event_loop()->monotonic_now(),
                                       ::std::chrono::milliseconds(5) / 2);
 
   while (true) {
@@ -140,6 +142,7 @@
 
 bool BaseAutonomousActor::WaitForAboveAngle(double angle) {
   ::aos::time::PhasedLoop phased_loop(::std::chrono::milliseconds(5),
+                                      event_loop()->monotonic_now(),
                                       ::std::chrono::milliseconds(5) / 2);
   while (true) {
     if (ShouldCancel()) {
@@ -160,6 +163,7 @@
 
 bool BaseAutonomousActor::WaitForBelowAngle(double angle) {
   ::aos::time::PhasedLoop phased_loop(::std::chrono::milliseconds(5),
+                                      event_loop()->monotonic_now(),
                                       ::std::chrono::milliseconds(5) / 2);
   while (true) {
     if (ShouldCancel()) {
@@ -180,6 +184,7 @@
 
 bool BaseAutonomousActor::WaitForMaxBy(double angle) {
   ::aos::time::PhasedLoop phased_loop(::std::chrono::milliseconds(5),
+                                      event_loop()->monotonic_now(),
                                       ::std::chrono::milliseconds(5) / 2);
   double max_angle = -M_PI;
   while (true) {
@@ -204,6 +209,7 @@
 
 bool BaseAutonomousActor::WaitForDriveNear(double distance, double angle) {
   ::aos::time::PhasedLoop phased_loop(::std::chrono::milliseconds(5),
+                                      event_loop()->monotonic_now(),
                                       ::std::chrono::milliseconds(5) / 2);
   constexpr double kPositionTolerance = 0.02;
   constexpr double kProfileTolerance = 0.001;
@@ -272,6 +278,7 @@
 
 bool BaseAutonomousActor::WaitForDriveProfileNear(double tolerance) {
   ::aos::time::PhasedLoop phased_loop(::std::chrono::milliseconds(5),
+                                      event_loop()->monotonic_now(),
                                       ::std::chrono::milliseconds(5) / 2);
   while (true) {
     if (ShouldCancel()) {
@@ -307,6 +314,7 @@
 
 bool BaseAutonomousActor::WaitForTurnProfileNear(double tolerance) {
   ::aos::time::PhasedLoop phased_loop(::std::chrono::milliseconds(5),
+                                      event_loop()->monotonic_now(),
                                       ::std::chrono::milliseconds(5) / 2);
   while (true) {
     if (ShouldCancel()) {
@@ -369,8 +377,10 @@
 }
 bool BaseAutonomousActor::SplineHandle::WaitForSplineDistanceRemaining(
     double distance) {
-  ::aos::time::PhasedLoop phased_loop(::std::chrono::milliseconds(5),
-                                      ::std::chrono::milliseconds(5) / 2);
+  ::aos::time::PhasedLoop phased_loop(
+      ::std::chrono::milliseconds(5),
+      base_autonomous_actor_->event_loop()->monotonic_now(),
+      ::std::chrono::milliseconds(5) / 2);
   while (true) {
     if (base_autonomous_actor_->ShouldCancel()) {
       return false;
@@ -440,8 +450,10 @@
 }
 
 bool BaseAutonomousActor::SplineHandle::WaitForPlan() {
-  ::aos::time::PhasedLoop phased_loop(::std::chrono::milliseconds(5),
-                                      ::std::chrono::milliseconds(5) / 2);
+  ::aos::time::PhasedLoop phased_loop(
+      ::std::chrono::milliseconds(5),
+      base_autonomous_actor_->event_loop()->monotonic_now(),
+      ::std::chrono::milliseconds(5) / 2);
   while (true) {
     if (base_autonomous_actor_->ShouldCancel()) {
       return false;
@@ -488,8 +500,10 @@
 }
 
 bool BaseAutonomousActor::SplineHandle::WaitForDone() {
-  ::aos::time::PhasedLoop phased_loop(::std::chrono::milliseconds(5),
-                                      ::std::chrono::milliseconds(5) / 2);
+  ::aos::time::PhasedLoop phased_loop(
+      ::std::chrono::milliseconds(5),
+      base_autonomous_actor_->event_loop()->monotonic_now(),
+      ::std::chrono::milliseconds(5) / 2);
   while (true) {
     if (base_autonomous_actor_->ShouldCancel()) {
       return false;
diff --git a/frc971/wpilib/gyro_sender.cc b/frc971/wpilib/gyro_sender.cc
index 894e187..99dc735 100644
--- a/frc971/wpilib/gyro_sender.cc
+++ b/frc971/wpilib/gyro_sender.cc
@@ -64,6 +64,7 @@
   ::aos::SetCurrentThreadRealtimePriority(33);
 
   ::aos::time::PhasedLoop phased_loop(::aos::time::FromRate(kReadingRate),
+                                      event_loop_->monotonic_now(),
                                       chrono::milliseconds(4));
   // How many timesteps the next reading represents.
   int number_readings = 0;
diff --git a/frc971/wpilib/pdp_fetcher.cc b/frc971/wpilib/pdp_fetcher.cc
index eff53e7..01c9613 100644
--- a/frc971/wpilib/pdp_fetcher.cc
+++ b/frc971/wpilib/pdp_fetcher.cc
@@ -18,6 +18,7 @@
       new frc::PowerDistributionPanel());
 
   ::aos::time::PhasedLoop phased_loop(::std::chrono::milliseconds(20),
+                                      ::aos::monotonic_clock::now(),
                                       ::std::chrono::milliseconds(4));
 
   // TODO(austin): Event loop instead of while loop.
diff --git a/frc971/wpilib/sensor_reader.cc b/frc971/wpilib/sensor_reader.cc
index ec1e822..2e0cd0a 100644
--- a/frc971/wpilib/sensor_reader.cc
+++ b/frc971/wpilib/sensor_reader.cc
@@ -100,7 +100,7 @@
     LOG(INFO, "Defaulting to open loop pwm synchronization\n");
   }
   ::aos::time::PhasedLoop phased_loop(
-      period,
+      period, ::aos::monotonic_clock::now(),
       pwm_trigger_ ? ::std::chrono::milliseconds(3) : chrono::milliseconds(4));
 
   ::aos::SetCurrentThreadRealtimePriority(40);