added mappings from C types to their queue type IDs
diff --git a/aos/build/queues/queue_primitives.rb b/aos/build/queues/queue_primitives.rb
new file mode 100644
index 0000000..bd91191
--- /dev/null
+++ b/aos/build/queues/queue_primitives.rb
@@ -0,0 +1,52 @@
+require File.dirname(__FILE__) + '/load.rb'
+
+require 'fileutils'
+
+TypeNames = [8, 16, 32, 64].collect do |size|
+  ["uint#{size}_t", "int#{size}_t"]
+end.flatten + ['bool', 'float', 'char', 'double']
+
+FileUtils.mkdir_p(File.dirname(ARGV[0]))
+WriteIffChanged.open(ARGV[0]) do |output|
+  output.puts <<END
+// This file is generated by #{File.expand_path(__FILE__)}.
+// DO NOT EDIT BY HAND!
+
+#include <stdint.h>
+
+namespace aos {
+
+enum class QueuePrimitiveTypes : uint32_t {
+#{TypeNames.collect do |name|
+  message_element = Target::MessageElement.new(name, 'value')
+  statement = MessageElementStmt.new(name, 'value')
+  message_element.size = statement.size
+  next <<END2
+  #{name}_p = #{message_element.getTypeID()},
+END2
+end.join('')}
+};
+
+// A class for mapping an actual type to a type ID.
+// There are specializations for all of the actual primitive types.
+template<typename T>
+class TypeID {
+ public:
+  static const uint32_t id;
+};
+
+#{TypeNames.collect do |name|
+  message_element = Target::MessageElement.new(name, 'value')
+  statement = MessageElementStmt.new(name, 'value')
+  message_element.size = statement.size
+  next <<END2
+template<>
+class TypeID<#{name}> {
+ public:
+  static const uint32_t id = #{message_element.getTypeID()};
+};
+END2
+end.join('')}
+}  // namespace aos
+END
+end
diff --git a/aos/common/common.gyp b/aos/common/common.gyp
index 088c882..c0ab74d 100644
--- a/aos/common/common.gyp
+++ b/aos/common/common.gyp
@@ -46,10 +46,12 @@
       'type': 'static_library',
       'variables': {
         'print_field_cc': '<(SHARED_INTERMEDIATE_DIR)/print_field.cc',
+        'queue_primitives_h': '<(SHARED_INTERMEDIATE_DIR)/aos/queue_primitives.h',
       },
       'sources': [
         'queue_types.cc',
         '<(print_field_cc)',
+        '<(queue_primitives_h)',
       ],
       'dependencies': [
         '<(AOS)/build/aos.gyp:logging_interface',
@@ -73,7 +75,23 @@
           'action': ['ruby', '<(script)', '<(print_field_cc)'],
           'message': 'Generating print_field.cc',
         },
+        {
+          'variables': {
+            'script': '<(AOS)/build/queues/queue_primitives.rb',
+          },
+          'action_name': 'gen_queue_primitives',
+          'inputs': [
+            '<(script)',
+            '<!@(find <(AOS)/build/queues/ -name *.rb)',
+          ],
+          'outputs': [
+            '<(queue_primitives_h)',
+          ],
+          'action': ['ruby', '<(script)', '<(queue_primitives_h)'],
+          'message': 'Generating queue_primitives.h',
+        },
       ],
+      'hard_dependency': 1,
     },
     {
       'target_name': 'queue_types_test',