Removed Common
Change-Id: I01ea8f07220375c2ad9bc0092281d4f27c642303
diff --git a/aos/messages/BUILD b/aos/messages/BUILD
new file mode 100644
index 0000000..532a3b6
--- /dev/null
+++ b/aos/messages/BUILD
@@ -0,0 +1,19 @@
+package(default_visibility = ["//visibility:public"])
+
+cc_library(
+ name = "messages",
+ srcs = [
+ "message.cc",
+ ],
+ hdrs = [
+ "message.h",
+ ],
+ compatible_with = [
+ "//tools:armhf-debian",
+ ],
+ deps = [
+ "//aos:byteorder",
+ "//aos:macros",
+ "//aos/time:time",
+ ],
+)
diff --git a/aos/messages/message.cc b/aos/messages/message.cc
new file mode 100644
index 0000000..63e1a71
--- /dev/null
+++ b/aos/messages/message.cc
@@ -0,0 +1,47 @@
+#include "aos/messages/message.h"
+
+#include <inttypes.h>
+#include <chrono>
+
+#include "aos/byteorder.h"
+
+namespace aos {
+
+namespace chrono = ::std::chrono;
+
+void Message::Zero() { sent_time = monotonic_clock::min_time; }
+
+size_t Message::Deserialize(const char *buffer) {
+ int32_t sec;
+ uint32_t nsec;
+ to_host(&buffer[0], &sec);
+ to_host(&buffer[4], &nsec);
+ sent_time = monotonic_clock::time_point(chrono::seconds(sec) +
+ chrono::nanoseconds(nsec));
+ return Size();
+}
+// Serializes the common fields into the buffer.
+size_t Message::Serialize(char *buffer) const {
+ // TODO(aschuh): to_network shouldn't need a pointer.
+ int32_t sec =
+ chrono::duration_cast<chrono::seconds>(sent_time.time_since_epoch())
+ .count();
+ uint32_t nsec = chrono::duration_cast<chrono::nanoseconds>(
+ sent_time.time_since_epoch() - chrono::seconds(sec))
+ .count();
+ to_network(&sec, &buffer[0]);
+ to_network(&nsec, &buffer[4]);
+ return Size();
+}
+
+size_t Message::Print(char *buffer, int length) const {
+ int32_t sec =
+ chrono::duration_cast<chrono::seconds>(sent_time.time_since_epoch())
+ .count();
+ uint32_t nsec = chrono::duration_cast<chrono::nanoseconds>(
+ sent_time.time_since_epoch() - chrono::seconds(sec))
+ .count();
+ return snprintf(buffer, length, "%" PRId32 ".%09" PRIu32 "s", sec, nsec);
+}
+
+} // namespace aos
diff --git a/aos/messages/message.h b/aos/messages/message.h
new file mode 100644
index 0000000..2a8604b
--- /dev/null
+++ b/aos/messages/message.h
@@ -0,0 +1,57 @@
+#ifndef AOS_MESSAGE_H_
+#define AOS_MESSAGE_H_
+
+#include "aos/time/time.h"
+
+namespace aos {
+
+struct MessageType;
+
+// This class is a base class for all messages sent over queues.
+// All of the methods are overloaded in (generated) subclasses to do the same
+// thing for the whole thing.
+class Message {
+ public:
+ // The time that the message was sent at.
+ monotonic_clock::time_point sent_time;
+
+ Message() : sent_time(monotonic_clock::min_time) {}
+
+ // Zeros out the time.
+ void Zero();
+ // Returns the size of the common fields.
+ static size_t Size() { return sizeof(sent_time); }
+
+ // Deserializes the common fields from the buffer.
+ size_t Deserialize(const char *buffer);
+ // Serializes the common fields into the buffer.
+ size_t Serialize(char *buffer) const;
+
+ // Populates sent_time with the current time.
+ void SetTimeToNow() {
+ if (sent_time == monotonic_clock::min_time) {
+ sent_time = monotonic_clock::now();
+ }
+ }
+
+ // Writes the contents of the message to the provided buffer.
+ size_t Print(char *buffer, int length) const;
+
+ // Compares two messages for equality, excluding their sent_time.
+ bool EqualsNoTime(const Message & /*other*/) const { return true; }
+
+ static const MessageType *GetType();
+};
+
+// Specializations for the Builders will be automatically generated in the .q.h
+// header files with all of the handy builder methods.
+template <class T>
+class MessageBuilder {
+ public:
+ typedef T Message;
+ bool Send();
+};
+
+} // namespace aos
+
+#endif // AOS_MESSAGE_H_