Remove pdp_values queue.
Switch to event loops (kinda)
Change-Id: Ia1334871715321f99f12015a771414a236221cb6
diff --git a/frc971/wpilib/BUILD b/frc971/wpilib/BUILD
index 889c32e..2ef83ce 100644
--- a/frc971/wpilib/BUILD
+++ b/frc971/wpilib/BUILD
@@ -207,6 +207,7 @@
deps = [
":pdp_values",
"//aos:init",
+ "//aos/events:event-loop",
"//aos/logging:queue_logging",
"//aos/util:phased_loop",
"//third_party:wpilib",
diff --git a/frc971/wpilib/pdp_fetcher.cc b/frc971/wpilib/pdp_fetcher.cc
index 81f9fcf..eff53e7 100644
--- a/frc971/wpilib/pdp_fetcher.cc
+++ b/frc971/wpilib/pdp_fetcher.cc
@@ -2,8 +2,9 @@
#include <chrono>
-#include "aos/logging/queue_logging.h"
+#include "aos/events/event-loop.h"
#include "aos/init.h"
+#include "aos/logging/queue_logging.h"
#include "aos/util/phased_loop.h"
#include "frc971/wpilib/ahal/PowerDistributionPanel.h"
#include "frc971/wpilib/pdp_values.q.h"
@@ -19,6 +20,7 @@
::aos::time::PhasedLoop phased_loop(::std::chrono::milliseconds(20),
::std::chrono::milliseconds(4));
+ // TODO(austin): Event loop instead of while loop.
while (true) {
{
const int iterations = phased_loop.SleepUntilNext();
@@ -26,7 +28,7 @@
LOG(DEBUG, "PDPFetcher skipped %d iterations\n", iterations - 1);
}
}
- auto message = pdp_values.MakeMessage();
+ auto message = pdp_values_sender_.MakeMessage();
message->voltage = pdp->GetVoltage();
message->temperature = pdp->GetTemperature();
message->power = pdp->GetTotalPower();
diff --git a/frc971/wpilib/pdp_fetcher.h b/frc971/wpilib/pdp_fetcher.h
index 513f5fc..db783f6 100644
--- a/frc971/wpilib/pdp_fetcher.h
+++ b/frc971/wpilib/pdp_fetcher.h
@@ -4,6 +4,9 @@
#include <atomic>
#include <memory>
+#include "aos/events/event-loop.h"
+#include "frc971/wpilib/pdp_values.q.h"
+
namespace frc971 {
namespace wpilib {
@@ -11,12 +14,21 @@
// separate thread.
class PDPFetcher {
public:
+ PDPFetcher(::aos::EventLoop *event_loop)
+ : event_loop_(event_loop),
+ pdp_values_sender_(event_loop_->MakeSender<::frc971::PDPValues>(
+ ".frc971.pdp_values")) {}
+
void Quit() { run_ = false; }
// To be called by a ::std::thread.
void operator()();
private:
+ ::aos::EventLoop *event_loop_;
+
+ ::aos::Sender<::frc971::PDPValues> pdp_values_sender_;
+
::std::atomic<bool> run_{true};
};
diff --git a/frc971/wpilib/pdp_values.q b/frc971/wpilib/pdp_values.q
index bda1c49..4c326ab 100644
--- a/frc971/wpilib/pdp_values.q
+++ b/frc971/wpilib/pdp_values.q
@@ -1,11 +1,10 @@
package frc971;
// Values retrieved from the PDP.
+// Published on ".frc971.pdp_values"
message PDPValues {
double voltage;
double temperature;
double power;
double[16] currents;
};
-
-queue PDPValues pdp_values;