added analog sensors and cleaned up the sensor data structure a bit
diff --git a/frc971/input/usb_receiver.cc b/frc971/input/usb_receiver.cc
index 545e197..bd2e665 100644
--- a/frc971/input/usb_receiver.cc
+++ b/frc971/input/usb_receiver.cc
@@ -18,8 +18,8 @@
Reset();
} else {
const ::aos::time::Time received_time = ::aos::time::Time::Now();
- if (phase_locker_.IsCurrentPacketGood(received_time, sequence_.count())) {
- LOG(DEBUG, "processing data\n");
+ if (phase_locker_.IsCurrentPacketGood(received_time, sequence_)) {
+ LOG(DEBUG, "processing data %" PRIu32 "\n", sequence_);
ProcessData();
}
}
@@ -28,7 +28,7 @@
void USBReceiver::PhaseLocker::Reset() {
LOG(INFO, "resetting\n");
last_good_packet_time_ = ::aos::time::Time(0, 0);
- last_good_sequence_ = -1;
+ last_good_sequence_ = 0;
good_phase_ = guess_phase_ = kUnknownPhase;
guess_phase_good_ = guess_phase_bad_ = 0;
good_phase_early_ = good_phase_late_ = 0;
@@ -36,18 +36,23 @@
bool USBReceiver::PhaseLocker::IsCurrentPacketGood(
const ::aos::time::Time &received_time,
- int32_t sequence) {
+ uint32_t sequence) {
if (last_good_packet_time_ != ::aos::time::Time(0, 0) &&
received_time - last_good_packet_time_ > kResetTime) {
LOG(WARNING, "no good packet received in too long\n");
Reset();
return false;
}
- if (last_good_sequence_ != -1 && sequence - last_good_sequence_ > 100) {
+ if (last_good_sequence_ != 0 && sequence - last_good_sequence_ > 100) {
LOG(WARNING, "skipped too many packets\n");
Reset();
return false;
}
+ if (sequence < last_good_sequence_) {
+ LOG(WARNING, "sequence went down. gyro board reset?\n");
+ Reset();
+ return false;
+ }
using ::aos::control_loops::kLoopFrequency;
// How often we (should) receive packets.
@@ -194,13 +199,13 @@
memcpy(data(), completed_transfer_->data(),
sizeof(GyroBoardData));
- int32_t count_before = sequence_.count();
- sequence_.Update(data()->sequence);
- if (count_before == 0) {
- LOG(INFO, "count starting at %" PRId32 "\n", sequence_.count());
- } else if (sequence_.count() - count_before != 1) {
- LOG(WARNING, "count went from %" PRId32" to %" PRId32 "\n",
- count_before, sequence_.count());
+ uint32_t sequence_before = sequence_;
+ sequence_ = data()->sequence;
+ if (sequence_before == 0) {
+ LOG(INFO, "count starting at %" PRIu32 "\n", sequence_);
+ } else if (sequence_ - sequence_before != 1) {
+ LOG(WARNING, "count went from %" PRIu32" to %" PRIu32 "\n",
+ sequence_before, sequence_);
}
return false;
@@ -225,7 +230,7 @@
c->Submit();
}
- sequence_.Reset();
+ sequence_ = 0;
phase_locker_.Reset();
}