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;
diff --git a/y2014/wpilib_interface.cc b/y2014/wpilib_interface.cc
index 7807ebd..3bc5e39 100644
--- a/y2014/wpilib_interface.cc
+++ b/y2014/wpilib_interface.cc
@@ -623,7 +623,7 @@
::frc971::wpilib::JoystickSender joystick_sender(&event_loop);
::std::thread joystick_thread(::std::ref(joystick_sender));
- ::frc971::wpilib::PDPFetcher pdp_fetcher;
+ ::frc971::wpilib::PDPFetcher pdp_fetcher(&event_loop);
::std::thread pdp_fetcher_thread(::std::ref(pdp_fetcher));
SensorReader reader(&event_loop);
diff --git a/y2014_bot3/wpilib_interface.cc b/y2014_bot3/wpilib_interface.cc
index 397fafe..8d7ddb2 100644
--- a/y2014_bot3/wpilib_interface.cc
+++ b/y2014_bot3/wpilib_interface.cc
@@ -279,7 +279,7 @@
JoystickSender joystick_sender(&event_loop);
::std::thread joystick_thread(::std::ref(joystick_sender));
- ::frc971::wpilib::PDPFetcher pdp_fetcher;
+ ::frc971::wpilib::PDPFetcher pdp_fetcher(&event_loop);
::std::thread pdp_fetcher_thread(::std::ref(pdp_fetcher));
// TODO(comran): IO ports are placeholders at the moment, so match them to
diff --git a/y2016/wpilib_interface.cc b/y2016/wpilib_interface.cc
index a6ea697..36f8641 100644
--- a/y2016/wpilib_interface.cc
+++ b/y2016/wpilib_interface.cc
@@ -578,7 +578,7 @@
::frc971::wpilib::JoystickSender joystick_sender(&event_loop);
::std::thread joystick_thread(::std::ref(joystick_sender));
- ::frc971::wpilib::PDPFetcher pdp_fetcher;
+ ::frc971::wpilib::PDPFetcher pdp_fetcher(&event_loop);
::std::thread pdp_fetcher_thread(::std::ref(pdp_fetcher));
SensorReader reader(&event_loop);
diff --git a/y2017/wpilib_interface.cc b/y2017/wpilib_interface.cc
index 49ff30c..5dbf29d 100644
--- a/y2017/wpilib_interface.cc
+++ b/y2017/wpilib_interface.cc
@@ -446,7 +446,7 @@
::frc971::wpilib::JoystickSender joystick_sender(&event_loop);
::std::thread joystick_thread(::std::ref(joystick_sender));
- ::frc971::wpilib::PDPFetcher pdp_fetcher;
+ ::frc971::wpilib::PDPFetcher pdp_fetcher(&event_loop);
::std::thread pdp_fetcher_thread(::std::ref(pdp_fetcher));
SensorReader reader(&event_loop);
diff --git a/y2018/wpilib_interface.cc b/y2018/wpilib_interface.cc
index 6b70ef0..154f9d0 100644
--- a/y2018/wpilib_interface.cc
+++ b/y2018/wpilib_interface.cc
@@ -655,7 +655,7 @@
::frc971::wpilib::JoystickSender joystick_sender(&event_loop);
::std::thread joystick_thread(::std::ref(joystick_sender));
- ::frc971::wpilib::PDPFetcher pdp_fetcher;
+ ::frc971::wpilib::PDPFetcher pdp_fetcher(&event_loop);
::std::thread pdp_fetcher_thread(::std::ref(pdp_fetcher));
SensorReader reader(&event_loop);
diff --git a/y2019/wpilib_interface.cc b/y2019/wpilib_interface.cc
index b910a7f..e08b4b1 100644
--- a/y2019/wpilib_interface.cc
+++ b/y2019/wpilib_interface.cc
@@ -685,7 +685,7 @@
::frc971::wpilib::JoystickSender joystick_sender(&event_loop);
::std::thread joystick_thread(::std::ref(joystick_sender));
- ::frc971::wpilib::PDPFetcher pdp_fetcher;
+ ::frc971::wpilib::PDPFetcher pdp_fetcher(&event_loop);
::std::thread pdp_fetcher_thread(::std::ref(pdp_fetcher));
SensorReader reader(&event_loop);