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);