events/ping-pong: clarify error reporting

Without this change, late pong packets look like duplicate pong
packets.

Add a check for duplicates for pong just in case.

Change-Id: I661cc8632ba615d57542ba00710457fc0eb19630
Signed-off-by: James Kuszmaul <james.kuszmaul@bluerivertech.com>
diff --git a/aos/events/ping_lib.cc b/aos/events/ping_lib.cc
index 900ed0d..f9958ff 100644
--- a/aos/events/ping_lib.cc
+++ b/aos/events/ping_lib.cc
@@ -30,6 +30,10 @@
 }
 
 void Ping::SendPing() {
+  if (last_pong_value_ != count_ && (!quiet_ || VLOG_IS_ON(1))) {
+    LOG(WARNING) << "Did not receive response to " << count_ << " within "
+                 << FLAGS_sleep_ms << "ms.";
+  }
   ++count_;
   aos::Sender<examples::Ping>::Builder builder = sender_.MakeBuilder();
   examples::Ping::Builder ping_builder = builder.MakeBuilder<examples::Ping>();
@@ -50,15 +54,17 @@
       monotonic_now - monotonic_send_time;
 
   if (last_pong_value_ + 1 != pong.value() && (!quiet_ || VLOG_IS_ON(1))) {
-    LOG(WARNING) << "Pong message lost";
+    LOG(WARNING) << "Unexpected pong value, wanted " << last_pong_value_ + 1
+                 << ", got " << pong.value();
   }
 
   if (pong.value() == count_) {
     VLOG(1) << "Elapsed time " << round_trip_time.count() << " ns "
             << FlatbufferToJson(&pong);
   } else if (!quiet_ || VLOG_IS_ON(1)) {
-    LOG(WARNING) << "Missmatched pong message, got " << FlatbufferToJson(&pong)
-                 << " expected " << count_;
+    LOG(WARNING) << "Unexpected pong response, got " << FlatbufferToJson(&pong)
+                 << " expected " << count_ << ", elapsed time "
+                 << round_trip_time.count() << " ns ";
   }
 
   last_pong_value_ = pong.value();
diff --git a/aos/events/pong_lib.cc b/aos/events/pong_lib.cc
index 9f1c855..77bd8d9 100644
--- a/aos/events/pong_lib.cc
+++ b/aos/events/pong_lib.cc
@@ -11,6 +11,12 @@
     : event_loop_(event_loop),
       sender_(event_loop_->MakeSender<examples::Pong>("/test")) {
   event_loop_->MakeWatcher("/test", [this](const examples::Ping &ping) {
+    if (last_value_ == ping.value()) {
+      LOG(WARNING) << "Duplicate ping value at " << last_value_
+                   << " time difference " << ping.send_time() - last_send_time_;
+    }
+    last_value_ = ping.value();
+    last_send_time_ = ping.send_time();
     aos::Sender<examples::Pong>::Builder builder = sender_.MakeBuilder();
     examples::Pong::Builder pong_builder =
         builder.MakeBuilder<examples::Pong>();
diff --git a/aos/events/pong_lib.h b/aos/events/pong_lib.h
index 17d779c..0b50599 100644
--- a/aos/events/pong_lib.h
+++ b/aos/events/pong_lib.h
@@ -15,6 +15,8 @@
  private:
   EventLoop *event_loop_;
   aos::Sender<examples::Pong> sender_;
+  int32_t last_value_ = 0;
+  int32_t last_send_time_ = 0;
 };
 
 }  // namespace aos