Convert y2014 AutoMode queue to an EventLoop
Change-Id: Ic9d6e80da8c955eb8c61e6b2b2fba220da1b62ec
diff --git a/y2014/actors/autonomous_actor.cc b/y2014/actors/autonomous_actor.cc
index e241d11..d4818e2 100644
--- a/y2014/actors/autonomous_actor.cc
+++ b/y2014/actors/autonomous_actor.cc
@@ -33,6 +33,8 @@
::frc971::autonomous::AutonomousActionQueueGroup *s)
: frc971::autonomous::BaseAutonomousActor(
event_loop, s, control_loops::GetDrivetrainConfig()),
+ auto_mode_fetcher_(event_loop->MakeFetcher<::y2014::sensors::AutoMode>(
+ ".y2014.sensors.auto_mode")),
hot_goal_fetcher_(
event_loop->MakeFetcher<::y2014::HotGoal>(".y2014.hot_goal")) {}
@@ -239,18 +241,17 @@
LOG(INFO, "Handling auto mode\n");
AutoVersion auto_version;
- ::y2014::sensors::auto_mode.FetchLatest();
- if (!::y2014::sensors::auto_mode.get()) {
+ auto_mode_fetcher_.Fetch();
+ if (!auto_mode_fetcher_.get()) {
LOG(WARNING, "not sure which auto mode to use\n");
auto_version = AutoVersion::kStraight;
} else {
static const double kSelectorMin = 0.2, kSelectorMax = 4.4;
const double kSelectorStep = (kSelectorMax - kSelectorMin) / 3.0;
- if (::y2014::sensors::auto_mode->voltage < kSelectorStep + kSelectorMin) {
+ if (auto_mode_fetcher_->voltage < kSelectorStep + kSelectorMin) {
auto_version = AutoVersion::kSingleHot;
- } else if (::y2014::sensors::auto_mode->voltage <
- 2 * kSelectorStep + kSelectorMin) {
+ } else if (auto_mode_fetcher_->voltage < 2 * kSelectorStep + kSelectorMin) {
auto_version = AutoVersion::kStraight;
} else {
auto_version = AutoVersion::kDoubleHot;
diff --git a/y2014/actors/autonomous_actor.h b/y2014/actors/autonomous_actor.h
index 47195b5..8439151 100644
--- a/y2014/actors/autonomous_actor.h
+++ b/y2014/actors/autonomous_actor.h
@@ -9,6 +9,7 @@
#include "frc971/autonomous/base_autonomous_actor.h"
#include "frc971/control_loops/drivetrain/drivetrain.q.h"
#include "frc971/control_loops/drivetrain/drivetrain_config.h"
+#include "y2014/queues/auto_mode.q.h"
#include "y2014/queues/hot_goal.q.h"
namespace y2014 {
@@ -37,6 +38,7 @@
bool WaitUntilClawDone();
+ ::aos::Fetcher<::y2014::sensors::AutoMode> auto_mode_fetcher_;
::aos::Fetcher<::y2014::HotGoal> hot_goal_fetcher_;
};
diff --git a/y2014/queues/auto_mode.q b/y2014/queues/auto_mode.q
index 49c6192..b07f526 100644
--- a/y2014/queues/auto_mode.q
+++ b/y2014/queues/auto_mode.q
@@ -1,6 +1,7 @@
package y2014.sensors;
+// Published on ".y2014.sensors.auto_mode"
message AutoMode {
+ // Voltage of the analog auto selector knob.
double voltage;
};
-queue AutoMode auto_mode;
diff --git a/y2014/wpilib_interface.cc b/y2014/wpilib_interface.cc
index 3bc5e39..c9d15dd 100644
--- a/y2014/wpilib_interface.cc
+++ b/y2014/wpilib_interface.cc
@@ -119,7 +119,9 @@
class SensorReader : public ::frc971::wpilib::SensorReader {
public:
SensorReader(::aos::EventLoop *event_loop)
- : ::frc971::wpilib::SensorReader(event_loop) {
+ : ::frc971::wpilib::SensorReader(event_loop),
+ auto_mode_sender_(event_loop->MakeSender<::y2014::sensors::AutoMode>(
+ ".y2014.sensors.auto_mode")) {
// Set it to filter out anything shorter than 1/4 of the minimum pulse width
// we should ever see.
UpdateMediumEncoderFilterHz(kMaximumEncoderPulsesPerSecond);
@@ -265,9 +267,11 @@
drivetrain_message.Send();
}
- ::y2014::sensors::auto_mode.MakeWithBuilder()
- .voltage(auto_selector_analog_->GetVoltage())
- .Send();
+ {
+ auto auto_mode_message = auto_mode_sender_.MakeMessage();
+ auto_mode_message->voltage = auto_selector_analog_->GetVoltage();
+ auto_mode_message.Send();
+ }
}
void RunDmaIteration() {
@@ -390,6 +394,8 @@
shooter_translate(counter->last_negative_encoder_value());
}
+ ::aos::Sender<::y2014::sensors::AutoMode> auto_mode_sender_;
+
::std::unique_ptr<AnalogInput> auto_selector_analog_;
::std::unique_ptr<AnalogInput> low_left_drive_hall_;