| /* usb_descriptor.h - header for common device descriptor */ |
| |
| /* |
| * Copyright (c) 2017 PHYTEC Messtechnik GmbH |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| #ifndef __USB_DESCRIPTOR_H__ |
| #define __USB_DESCRIPTOR_H__ |
| |
| /* |
| * The USB Unicode bString is encoded in UTF16LE, which means it takes up |
| * twice the amount of bytes than the same string encoded in ASCII7. |
| * Use this macro to determine the length of the bString array. |
| * |
| * bString length without null character: |
| * bString_length = (sizeof(initializer_string) - 1) * 2 |
| * or: |
| * bString_length = sizeof(initializer_string) * 2 - 2 |
| */ |
| #define USB_BSTRING_LENGTH(s) (sizeof(s) * 2 - 2) |
| |
| /* |
| * The length of the string descriptor (bLength) is calculated from the |
| * size of the two octets bLength and bDescriptorType plus the |
| * length of the UTF16LE string: |
| * |
| * bLength = 2 + bString_length |
| * bLength = 2 + sizeof(initializer_string) * 2 - 2 |
| * bLength = sizeof(initializer_string) * 2 |
| * Use this macro to determine the bLength of the string descriptor. |
| */ |
| #define USB_STRING_DESCRIPTOR_LENGTH(s) (sizeof(s) * 2) |
| |
| /* Automatic endpoint assignment */ |
| #define AUTO_EP_IN 0x80 |
| #define AUTO_EP_OUT 0x00 |
| |
| /* Common part of device data */ |
| struct usb_dev_data { |
| const struct device *dev; |
| sys_snode_t node; |
| }; |
| |
| struct usb_dev_data *usb_get_dev_data_by_cfg(sys_slist_t *list, |
| struct usb_cfg_data *cfg); |
| struct usb_dev_data *usb_get_dev_data_by_iface(sys_slist_t *list, |
| uint8_t iface_num); |
| struct usb_dev_data *usb_get_dev_data_by_ep(sys_slist_t *list, uint8_t ep); |
| |
| int usb_get_str_descriptor_idx(void *ptr); |
| |
| uint8_t *usb_update_sn_string_descriptor(void); |
| uint8_t *usb_get_device_descriptor(void); |
| |
| #endif /* __USB_DESCRIPTOR_H__ */ |