Now detecting reset using the sensor_generation queue.
diff --git a/aos/common/control_loop/ControlLoop-tmpl.h b/aos/common/control_loop/ControlLoop-tmpl.h
index b5714d5..4e1999c 100644
--- a/aos/common/control_loop/ControlLoop-tmpl.h
+++ b/aos/common/control_loop/ControlLoop-tmpl.h
@@ -5,6 +5,8 @@
#include "aos/common/messages/RobotState.q.h"
#include "aos/common/logging/queue_logging.h"
+#include "bbb/sensor_generation.q.h"
+
namespace aos {
namespace control_loops {
@@ -37,6 +39,21 @@
ZeroOutputs();
return;
}
+
+ ::bbb::sensor_generation.FetchLatest();
+ if (::bbb::sensor_generation.get() == nullptr) {
+ ZeroOutputs();
+ return;
+ }
+ if (!has_sensor_reset_counters_ ||
+ ::bbb::sensor_generation->reader_pid != reader_pid_ ||
+ ::bbb::sensor_generation->cape_resets != cape_resets_) {
+ reader_pid_ = ::bbb::sensor_generation->reader_pid;
+ cape_resets_ = ::bbb::sensor_generation->cape_resets;
+ has_sensor_reset_counters_ = true;
+ reset_ = true;
+ }
+
LOG_STRUCT(DEBUG, "goal", *goal);
// Only pass in a position if we got one this cycle.
@@ -75,12 +92,12 @@
bool outputs_enabled = false;
// Check to see if we got a driver station packet recently.
- if (aos::robot_state.FetchLatest()) {
+ if (::aos::robot_state.FetchLatest()) {
outputs_enabled = true;
- } else if (aos::robot_state.IsNewerThanMS(kDSPacketTimeoutMs)) {
+ } else if (::aos::robot_state.IsNewerThanMS(kDSPacketTimeoutMs)) {
outputs_enabled = true;
} else {
- if (aos::robot_state.get()) {
+ if (::aos::robot_state.get()) {
LOG_INTERVAL(driver_station_old_);
} else {
LOG_INTERVAL(no_driver_station_);