Add support for varying HID descriptors

Change-Id: I8ee01045d2b4bcc98bedb615f0af1b26ebbd66f7
diff --git a/motors/usb/hid.h b/motors/usb/hid.h
index 37aa86b..019231c 100644
--- a/motors/usb/hid.h
+++ b/motors/usb/hid.h
@@ -23,6 +23,13 @@
   }
   ~HidFunction() override = default;
 
+  // Sets the report descriptor. Must be called at least once.
+  //
+  // May only be called during setup.
+  void set_report_descriptor(const ::std::string &report_descriptor) {
+    report_descriptor_ = report_descriptor;
+  }
+
   void UpdateReport(const void *data, int length,
                     const DisableInterrupts &disable_interrupts) {
     memcpy(report_tx_buffer_to_fill(disable_interrupts), data, length);
@@ -82,6 +89,9 @@
   int in_endpoint_;
 
   const int report_max_size_;
+
+  ::std::string report_descriptor_;
+  UsbDescriptorList hid_descriptor_list_;
 };
 
 }  // namespace teensy