USB services: Difference between revisions
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
USB provides services for interacting with the USB stack. | USB provides services for interacting with the USB stack. | ||
= usb:ds = | = usb:ds = | ||
Line 816: | Line 746: | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
| 0 || GetPowerEvent | | 0 || [[#GetPowerEvent|GetPowerEvent]] | ||
|- | |- | ||
| 1 || GetPowerState | | 1 || [[#GetPowerState|GetPowerState]] | ||
|- | |- | ||
| 2 || GetDataEvent | | 2 || [[#GetDataEvent|GetDataEvent]] | ||
|- | |- | ||
| 3 || GetDataRole | | 3 || [[#GetDataRole|GetDataRole]] | ||
|- | |- | ||
| 4 || SetDiagData | | 4 || [[#SetDiagData|SetDiagData]] | ||
|- | |- | ||
| 5 || GetDiagData | | 5 || [[#GetDiagData|GetDiagData]] | ||
|} | |} | ||
USB Port Manager, only system-title using this is [[PTM_services|ptm]]. | USB Port Manager, only system-title using this is [[PTM_services|ptm]]. | ||
== GetPowerEvent == | |||
No input. Returns an output Event handle. | |||
== GetPowerState == | |||
Takes a type-0x6 output buffer containing an [[#UsbPowerState]]. No output. | |||
== GetDataEvent == | |||
No input. Returns an output Event handle. | |||
== GetDataRole == | |||
No input. Returns an output [[#UsbDataRole]]. | |||
== SetDiagData == | |||
Takes two input u32s. No output. | |||
[8.0.0+] Stubbed, just returns 0. | |||
== GetDiagData == | |||
Takes an input u32. Returns an output u32. | |||
[8.0.0+] Stubbed, just returns 0. | |||
= usb:qdb = | = usb:qdb = | ||
Line 1,087: | Line 1,039: | ||
| 0xF || 0x1 || bInterfaceProtocol | | 0xF || 0x1 || bInterfaceProtocol | ||
|} | |} | ||
This is used to filter [[#InterfaceQueryOutput]], the query commands will only return the interface when these checks pass. This is also used for events with [[#CreateInterfaceAvailableEvent]]. When a bit in Flags is set, the associated descriptor field and the field in this struct are compared, on mismatch the interface will be filtered out. Passing Flags=0 is equivalent to disabling filtering since none of these checks will run. | This is used to filter [[#InterfaceQueryOutput]], the query commands will only return the interface when these checks pass. This is also used for events with [[#CreateInterfaceAvailableEvent]]. When a bit in Flags is set, the associated descriptor field and the field in this struct are compared, on mismatch the interface will be filtered out. Passing Flags=0 is equivalent to disabling filtering since none of these checks will run. | ||
Line 1,252: | Line 1,202: | ||
|- | |- | ||
| 3 || Busy | | 3 || Busy | ||
|} | |||
= UsbPowerState = | |||
This is "nn::usb::UsbPowerState". | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset || Size || Description | |||
|- | |||
| 0x0 || 0x4 || [[#UsbPowerRole|UsbPowerRole]] | |||
|- | |||
| 0x4 || 0x4 || [[#UsbChargerType|UsbChargerType]] | |||
|- | |||
| 0x8 || 0x4 || Voltage | |||
|- | |||
| 0xC || 0x4 || Current | |||
|- | |||
| 0x10 || 0x4 || [[#Pdo|Pdo]] | |||
|- | |||
| 0x14 || 0x4 || [[#Rdo|Rdo]] | |||
|} | |||
= UsbPowerRole = | |||
This is "nn::usb::UsbPowerRole". | |||
{| class="wikitable" border="1" | |||
|- | |||
! Value || Name | |||
|- | |||
| 0 || Unknown | |||
|- | |||
| 1 || Sink | |||
|- | |||
| 2 || Source | |||
|} | |||
= UsbChargerType = | |||
This is "nn::usb::UsbChargerType". | |||
{| class="wikitable" border="1" | |||
|- | |||
! Value || Name | |||
|- | |||
| 0 || Unknown | |||
|- | |||
| 1 || Pd | |||
|- | |||
| 2 || TypeC15 | |||
|- | |||
| 3 || TypeC30 | |||
|- | |||
| 4 || Dcp | |||
|- | |||
| 5 || Cdp | |||
|- | |||
| 6 || Sdp | |||
|- | |||
| 7 || Apple500 | |||
|- | |||
| 8 || Apple1000 | |||
|- | |||
| 9 || Apple2000 | |||
|} | |||
= SupplyType = | |||
{| class="wikitable" border="1" | |||
|- | |||
! Value || Name | |||
|- | |||
| 0 || Fixed | |||
|- | |||
| 1 || Battery | |||
|- | |||
| 2 || Variable | |||
|} | |||
= Pdo = | |||
When [[#SupplyType|SupplyType]] is Fixed this is: | |||
{| class="wikitable" border="1" | |||
! Bits | |||
! Description | |||
|- | |||
| 0-9 | |||
| MaximumCurrent | |||
|- | |||
| 10-19 | |||
| Voltage | |||
|- | |||
| 20-21 | |||
| PeakCurrent | |||
|- | |||
| 22-24 | |||
| Reserved | |||
|- | |||
| 25 | |||
| DataRoleSwap | |||
|- | |||
| 26 | |||
| UsbCommunicationsCapable | |||
|- | |||
| 27 | |||
| ExternallyPowered | |||
|- | |||
| 28 | |||
| UsbSuspendSupported | |||
|- | |||
| 29 | |||
| DualRolePower | |||
|- | |||
| 30-31 | |||
| [[#SupplyType|SupplyType]] | |||
|} | |||
When [[#SupplyType|SupplyType]] is Battery this is: | |||
{| class="wikitable" border="1" | |||
! Bits | |||
! Description | |||
|- | |||
| 0-9 | |||
| MaximumAllowablePower | |||
|- | |||
| 10-19 | |||
| MinimumVoltage | |||
|- | |||
| 20-29 | |||
| MaximumVoltage | |||
|- | |||
| 30-31 | |||
| [[#SupplyType|SupplyType]] | |||
|} | |||
When [[#SupplyType|SupplyType]] is Variable this is: | |||
{| class="wikitable" border="1" | |||
! Bits | |||
! Description | |||
|- | |||
| 0-9 | |||
| MaximumCurrent | |||
|- | |||
| 10-19 | |||
| MinimumVoltage | |||
|- | |||
| 20-29 | |||
| MaximumVoltage | |||
|- | |||
| 30-31 | |||
| [[#SupplyType|SupplyType]] | |||
|} | |||
= Rdo = | |||
When Pdo's [[#SupplyType|SupplyType]] is Fixed or Variable this is: | |||
{| class="wikitable" border="1" | |||
! Bits | |||
! Description | |||
|- | |||
| 0-9 | |||
| MaximumOperatingCurrent (GiveBackFlag is true) or MinimumOperatingCurrent (GiveBackFlag is false) | |||
|- | |||
| 10-19 | |||
| OperatingCurrent | |||
|- | |||
| 20-23 | |||
| Reserved | |||
|- | |||
| 24 | |||
| NoUsbSuspend | |||
|- | |||
| 25 | |||
| UsbCommunicationsCapable | |||
|- | |||
| 26 | |||
| CapabilityMismatch | |||
|- | |||
| 27 | |||
| GiveBackFlag | |||
|- | |||
| 28-30 | |||
| ObjectPosition | |||
|- | |||
| 31 | |||
| Reserved | |||
|} | |||
When Pdo's [[#SupplyType|SupplyType]] is Battery this is: | |||
{| class="wikitable" border="1" | |||
! Bits | |||
! Description | |||
|- | |||
| 0-9 | |||
| MaximumOperatingPower (GiveBackFlag is true) or MinimumOperatingPower (GiveBackFlag is false) | |||
|- | |||
| 10-19 | |||
| OperatingPower | |||
|- | |||
| 20-23 | |||
| Reserved | |||
|- | |||
| 24 | |||
| NoUsbSuspend | |||
|- | |||
| 25 | |||
| UsbCommunicationsCapable | |||
|- | |||
| 26 | |||
| CapabilityMismatch | |||
|- | |||
| 27 | |||
| GiveBackFlag | |||
|- | |||
| 28-30 | |||
| ObjectPosition | |||
|- | |||
| 31 | |||
| Reserved | |||
|} | |||
= UsbDataRole = | |||
This is "nn::usb::UsbDataRole". | |||
{| class="wikitable" border="1" | |||
|- | |||
! Value || Name | |||
|- | |||
| 0 || Unknown | |||
|- | |||
| 1 || DFP | |||
|- | |||
| 2 || UFP | |||
|} | |} | ||
Line 1,276: | Line 1,454: | ||
** vid "0F0D", where pid is "0200" - "022F". | ** vid "0F0D", where pid is "0200" - "022F". | ||
** vid "33DD", where pid is "0001" - "000B". | ** vid "33DD", where pid is "0001" - "000B". | ||
= Configuration = | |||
The following is the default USB config strings, while the usbds service isn't being used. All of the below configuration will reset to the defaults when all usbds-related sessions are closed. These can be set with [[#SetVidPidBcd]]. The default string for Product is loaded from [[Settings_services|settings]] config. The default is referred to by usb-sysmodule as "Dummy". | |||
Product: Nintendo Switch | |||
Manufacturer: Nintendo | |||
SerialNumber: SerialNumber | |||
The following is the default <code>lsusb -v {...}</code> output when the usbds service wasn't used. | |||
pre-5.0.0: The endpoints are configured using [[#RegisterEndpoint]], the total number of endpoints is the number of open [[#IDsEndpoint]] sessions. bInterfaceNumber is {0-based index for the enabled [[#IDsInterface]] session.} Some of the interface fields are configured using [[#RegisterInterface]]. | |||
When usbds is in use where [[#SetVidPidBcd]] wasn't used, the VID/PID is 057e:3000. | |||
Bus 003 Device 006: ID 057e:2000 Nintendo Co., Ltd | |||
Couldn't open device, some information will be missing | |||
Device Descriptor: | |||
bLength 18 | |||
bDescriptorType 1 | |||
bcdUSB 2.00 | |||
bDeviceClass 0 (Defined at Interface level) | |||
bDeviceSubClass 0 | |||
bDeviceProtocol 0 | |||
bMaxPacketSize0 64 | |||
idVendor 0x057e Nintendo Co., Ltd | |||
idProduct 0x2000 | |||
bcdDevice 1.00 | |||
iManufacturer 1 | |||
iProduct 2 | |||
iSerial 3 | |||
bNumConfigurations 1 | |||
Configuration Descriptor: | |||
bLength 9 | |||
bDescriptorType 2 | |||
wTotalLength 34 | |||
bNumInterfaces 1 | |||
bConfigurationValue 1 | |||
iConfiguration 0 | |||
bmAttributes 0xc0 | |||
Self Powered | |||
MaxPower {...} | |||
Interface Descriptor: | |||
bLength 9 | |||
bDescriptorType 4 | |||
bInterfaceNumber 0 | |||
bAlternateSetting 0 | |||
bNumEndpoints 1 | |||
bInterfaceClass 3 Human Interface Device | |||
bInterfaceSubClass 0 No Subclass | |||
bInterfaceProtocol 0 None | |||
iInterface 0 | |||
HID Device Descriptor: | |||
bLength 9 | |||
bDescriptorType 33 | |||
bcdHID 2.00 | |||
bCountryCode 0 Not supported | |||
bNumDescriptors 1 | |||
bDescriptorType 34 Report | |||
wDescriptorLength 26 | |||
Report Descriptors: | |||
** UNAVAILABLE ** | |||
Endpoint Descriptor: | |||
bLength 7 | |||
bDescriptorType 5 | |||
bEndpointAddress 0x81 EP 1 IN | |||
bmAttributes 3 | |||
Transfer Type Interrupt | |||
Synch Type None | |||
Usage Type Data | |||
wMaxPacketSize 0x0001 1x 1 bytes | |||
bInterval 16 | |||
[[Category:Services]] | [[Category:Services]] |