
There is a custom (non-USB IF) extension to the USB standard: https://wicg.github.io/webusb/ This specification is published under the W3C Community Contributor Agreement, which in particular allows to implement the specification without any royalties. The specification allows USB gadgets to announce an URL to landing page and describes a Javascript interface for websites to interact with the USB gadget, if the user allows it. It is currently supported by Chromium-based browsers, such as Chrome, Edge and Opera on all major operating systems including Linux. This patch adds optional support for Linux-based USB gadgets wishing to expose such a landing page. During device enumeration, a host recognizes that the announced USB version is at least 2.01, which means, that there are BOS descriptors available. The device than announces WebUSB support using a platform device capability. This includes a vendor code under which the landing page URL can be retrieved using a vendor-specific request. Previously, the BOS descriptors would unconditionally include an LPM related descriptor, as BOS descriptors were only ever sent when the device was LPM capable. As this is no longer the case, this patch puts this descriptor behind a lpm_capable condition. Usage is modeled after os_desc descriptors: echo 1 > webusb/use echo "https://www.kernel.org" > webusb/landingPage lsusb will report the device with the following lines: Platform Device Capability: bLength 24 bDescriptorType 16 bDevCapabilityType 5 bReserved 0 PlatformCapabilityUUID {3408b638-09a9-47a0-8bfd-a0768815b665} WebUSB: bcdVersion 1.00 bVendorCode 0 iLandingPage 1 https://www.kernel.org Signed-off-by: Jó Ágila Bitsch <jgilab@gmail.com> Link: https://lore.kernel.org/r/Y8Crf8P2qAWuuk/F@jo-einhundert Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
4.8 KiB
What: /config/usb-gadget Date: Jun 2013 KernelVersion: 3.11 Description: This group contains sub-groups corresponding to created USB gadgets.
What: /config/usb-gadget/gadget Date: Jun 2013 KernelVersion: 3.11 Description:
The attributes of a gadget:
================ ============================================
UDC bind a gadget to UDC/unbind a gadget;
write UDC's name found in /sys/class/udc/*
to bind a gadget, empty string "" to unbind.
max_speed maximum speed the driver supports. Valid
names are super-speed-plus, super-speed,
high-speed, full-speed, and low-speed.
bDeviceClass USB device class code
bDeviceSubClass USB device subclass code
bDeviceProtocol USB device protocol code
bMaxPacketSize0 maximum endpoint 0 packet size
bcdDevice bcd device release number
bcdUSB bcd USB specification version number
idProduct product ID
idVendor vendor ID
================ ============================================
What: /config/usb-gadget/gadget/configs Date: Jun 2013 KernelVersion: 3.11 Description: This group contains a USB gadget's configurations
What: /config/usb-gadget/gadget/configs/config Date: Jun 2013 KernelVersion: 3.11 Description: The attributes of a configuration:
================ ======================================
bmAttributes configuration characteristics
MaxPower maximum power consumption from the bus
================ ======================================
What: /config/usb-gadget/gadget/configs/config/strings Date: Jun 2013 KernelVersion: 3.11 Description: This group contains subdirectories for language-specific strings for this configuration.
What: /config/usb-gadget/gadget/configs/config/strings/language Date: Jun 2013 KernelVersion: 3.11 Description: The attributes:
================ =========================
configuration configuration description
================ =========================
What: /config/usb-gadget/gadget/functions Date: Jun 2013 KernelVersion: 3.11 Description: This group contains functions available to this USB gadget.
What: /config/usb-gadget/gadget/functions/./interface. Date: May 2014 KernelVersion: 3.16 Description: This group contains "Feature Descriptors" specific for one gadget's USB interface or one interface group described by an IAD.
The attributes:
================= =====================================
compatible_id 8-byte string for "Compatible ID"
sub_compatible_id 8-byte string for "Sub Compatible ID"
================= =====================================
What: /config/usb-gadget/gadget/functions/./interface./ Date: May 2014 KernelVersion: 3.16 Description: This group contains "Extended Property Descriptors" specific for one gadget's USB interface or one interface group described by an IAD.
The attributes:
===== ===============================================
type value 1..7 for interpreting the data
- 1: unicode string
- 2: unicode string with environment variable
- 3: binary
- 4: little-endian 32-bit
- 5: big-endian 32-bit
- 6: unicode string with a symbolic link
- 7: multiple unicode strings
data blob of data to be interpreted depending on
type
===== ===============================================
What: /config/usb-gadget/gadget/strings Date: Jun 2013 KernelVersion: 3.11 Description: This group contains subdirectories for language-specific strings for this gadget.
What: /config/usb-gadget/gadget/strings/language Date: Jun 2013 KernelVersion: 3.11 Description: The attributes:
============ =================================
serialnumber gadget's serial number (string)
product gadget's product description
manufacturer gadget's manufacturer description
============ =================================
What: /config/usb-gadget/gadget/os_desc Date: May 2014 KernelVersion: 3.16 Description: This group contains "OS String" extension handling attributes.
============= ===============================================
use flag turning "OS Descriptors" support on/off
b_vendor_code one-byte value used for custom per-device and
per-interface requests
qw_sign an identifier to be reported as "OS String"
proper
============= ===============================================
What: /config/usb-gadget/gadget/webusb Date: Dec 2022 KernelVersion: 6.3 Description: This group contains "WebUSB" extension handling attributes.
============= ===============================================
use flag turning "WebUSB" support on/off
bcdVersion bcd WebUSB specification version number
bVendorCode one-byte value used for custom per-device
landingPage UTF-8 encoded URL of the device's landing page
============= ===============================================