linux-yocto/Documentation/ABI/testing/configfs-usb-gadget
Jó Ágila Bitsch 93c473948c usb: gadget: add WebUSB landing page support
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>
2023-01-19 14:14:44 +01:00

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
	=============	===============================================