From c890b34cd527c7f58dc7e1caa9be58f8e10f3365 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9a=20Saviot?= Date: Thu, 29 Mar 2018 16:10:34 +0200 Subject: [PATCH] [usb] Microsoft OS String Descriptor v1 Change-Id: I7f77656b714f8c1bbe5f0b6d535d8df1cf3d36bb --- ion/src/device/usb/Makefile | 1 + ion/src/device/usb/calculator.cpp | 5 ++++ ion/src/device/usb/calculator.h | 4 +++ .../stack/microsoft_os_string_descriptor.cpp | 19 ++++++++++++ .../stack/microsoft_os_string_descriptor.h | 30 +++++++++++++++++++ .../device/usb/stack/os_string_descriptor.h | 16 ---------- 6 files changed, 59 insertions(+), 16 deletions(-) create mode 100644 ion/src/device/usb/stack/microsoft_os_string_descriptor.cpp create mode 100644 ion/src/device/usb/stack/microsoft_os_string_descriptor.h delete mode 100644 ion/src/device/usb/stack/os_string_descriptor.h diff --git a/ion/src/device/usb/Makefile b/ion/src/device/usb/Makefile index 7021537ae..586f6d2d6 100644 --- a/ion/src/device/usb/Makefile +++ b/ion/src/device/usb/Makefile @@ -17,6 +17,7 @@ usb_objs += $(addprefix ion/src/device/usb/stack/, \ dfu_functional_descriptor.o\ interface_descriptor.o\ language_id_string_descriptor.o \ + microsoft_os_string_descriptor.o\ platform_device_capability_descriptor.o\ streamable.o\ string_descriptor.o\ diff --git a/ion/src/device/usb/calculator.cpp b/ion/src/device/usb/calculator.cpp index 5307b32ef..402b28884 100644 --- a/ion/src/device/usb/calculator.cpp +++ b/ion/src/device/usb/calculator.cpp @@ -25,6 +25,11 @@ void Calculator::Poll() { } Descriptor * Calculator::descriptor(uint8_t type, uint8_t index) { + /* Special case: Microsoft OS String Descriptor should be returned when + * searching for string descriptor at index 0xEE. */ + if (type == m_microsoftOSStringDescriptor.type() && index == 0xEE) { + return &m_microsoftOSStringDescriptor; + } int typeCount = 0; for (size_t i=0; ipush(m_bMSVendorCode); + c->push(m_bPad); +} + +uint8_t MicrosoftOSStringDescriptor::bLength() const { + return StringDescriptor::bLength() + 2 * sizeof(uint8_t); +} + +} +} +} diff --git a/ion/src/device/usb/stack/microsoft_os_string_descriptor.h b/ion/src/device/usb/stack/microsoft_os_string_descriptor.h new file mode 100644 index 000000000..9bf2295b6 --- /dev/null +++ b/ion/src/device/usb/stack/microsoft_os_string_descriptor.h @@ -0,0 +1,30 @@ +#ifndef ION_DEVICE_USB_STACK_MICROSOFT_OS_STRING_DESCRIPTOR_H +#define ION_DEVICE_USB_STACK_MICROSOFT_OS_STRING_DESCRIPTOR_H + +#include "string_descriptor.h" + +namespace Ion { +namespace USB { +namespace Device { + +class MicrosoftOSStringDescriptor : public StringDescriptor { +public: + constexpr MicrosoftOSStringDescriptor(uint8_t bMSVendorCode) : + StringDescriptor("MSFT100"), + m_bMSVendorCode(bMSVendorCode), + m_bPad(0) + { + } +protected: + void push(Channel * c) const override; + virtual uint8_t bLength() const override; +private: + uint8_t m_bMSVendorCode; + uint8_t m_bPad; +}; + +} +} +} + +#endif diff --git a/ion/src/device/usb/stack/os_string_descriptor.h b/ion/src/device/usb/stack/os_string_descriptor.h deleted file mode 100644 index 7a466bcb3..000000000 --- a/ion/src/device/usb/stack/os_string_descriptor.h +++ /dev/null @@ -1,16 +0,0 @@ -class OSStringDescriptor : public Descriptor { -public: - StringDescriptor(const char * string); - void copy(void * target) override { - memcpy(this, target, sizeof(Descriptor)); - // Ensuite, on veut pousser le compat ID et les extended properties - ; - } -private: - uint8_t bLength; - uint8_t bDescriptorType; - uint8_t qwSignature[14]; - uint8_t bMS_VendorCode; - uint8_t bPad; -}; -