Print sendtime of messsages.
Change-Id: I42579bce6133a536df61da9355aed763a0b2e614
diff --git a/aos/build/queues/output/message_dec.rb b/aos/build/queues/output/message_dec.rb
index 20a0c9d..0f5694a 100644
--- a/aos/build/queues/output/message_dec.rb
+++ b/aos/build/queues/output/message_dec.rb
@@ -335,7 +335,7 @@
args.push(["AOS_TIME_ARGS(static_cast<int32_t>(",
"::std::chrono::duration_cast<::std::chrono::seconds>(",
"#{parent}#{this_name}.time_since_epoch()).count()), ",
- "static_cast<int32_t>(::std::chrono::duration_cast<::std::chrono::nanoseconds>(",
+ "static_cast<uint32_t>(::std::chrono::duration_cast<::std::chrono::nanoseconds>(",
"#{parent}#{this_name}.time_since_epoch() - ",
"::std::chrono::duration_cast<::std::chrono::seconds>(",
"#{parent}#{this_name}.time_since_epoch())).count()))"].join(''))
diff --git a/aos/build/queues/print_field.rb b/aos/build/queues/print_field.rb
index 0e27bf0..65837ee 100644
--- a/aos/build/queues/print_field.rb
+++ b/aos/build/queues/print_field.rb
@@ -1,7 +1,8 @@
require_relative 'load.rb'
# TODO(brians): Special-case Time too and float/double if we can find a good way to do it.
-GenericTypeNames = ['float', 'double', 'char', '::aos::monotonic_clock::time_point']
+GenericTypeNames = ['float', 'double', 'char']
+TimeTypeNames = ['::aos::monotonic_clock::time_point']
IntegerSizes = [8, 16, 32, 64]
WriteIffChanged.open(ARGV[0]) do |output|
@@ -47,6 +48,32 @@
}
END2
end.join('')}
+#{TimeTypeNames.collect do |name|
+ message_element = Target::MessageElement.new(name, 'value')
+ statement = MessageElementStmt.new(name, 'value')
+ message_element.size = statement.size
+ print_args = []
+ message_element.fetchPrintArgs(print_args)
+ next <<END2
+ case #{message_element.getTypeID()}:
+ {
+ if (*input_bytes < #{statement.size}) return false;
+ *input_bytes -= #{statement.size};
+ int32_t upper;
+ uint32_t lower;
+ to_host(static_cast<const char *>(input), &upper);
+ to_host(static_cast<const char *>(input) + 4, &lower);
+ #{name} value(::std::chrono::seconds(upper) + ::std::chrono::nanoseconds(lower));
+ int ret = snprintf(output, *output_bytes,
+ "#{statement.toPrintFormat()}",
+ #{print_args[0]});
+ if (ret < 0) return false;
+ if (static_cast<unsigned int>(ret) >= *output_bytes) return false;
+ *output_bytes -= ret;
+ return true;
+ }
+END2
+end.join('')}
#{IntegerSizes.collect do |size|
[true, false].collect do |signed|
size_bytes = size / 8