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; -}; -