Difference between revisions of "USB services"
Line 94: | Line 94: | ||
Each field is an u8, except for offset 0x4-0x5 which is an u16. | Each field is an u8, except for offset 0x4-0x5 which is an u16. | ||
+ | |||
+ | This structure matches [http://libusb.sourceforge.net/api-1.0/structlibusb__endpoint__descriptor.html libusb_endpoint_descriptor]. | ||
=== GetSetupEvent === | === GetSetupEvent === |
Revision as of 06:30, 7 October 2017
One symbol in USB-sysmodule is: "vtable for nn::usb::detail::UsbComplexTegra21x".
usb:ds
Used for Switch<>PC USB comms, aka Switch-as-device. This service is used during factory setup by manu.
This service session is used as an IPC domain. All of these {get-session} commands also return an output u8 and the u32 <domainID>, for using those sessions as domains.
Cmd | Name | Notes |
---|---|---|
0 | #BindComplex | |
1 | #BindClientProcess | |
2 | #GetDsInterface | |
3 | #GetStateChangeEvent | |
4 | No input. Returns an output u32. | |
5 | #SetVidPidBcd |
BindComplex
Takes an u32 (complexId). Manu sends 0x02.
BindClientProcess
Takes 1 copy-handle for the current process (0xFFFF8001).
GetDsInterface
Takes 2 type-5 buffers and returns an #IDsInterface. Manu sends a 0x09-byte command (e.g.: 0x09, 0x04, 0x04, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00) in the first buffer and a string ("usb") in the second buffer.
GetStateChangeEvent
Returns an event handle for state changes.
SetVidPidBcd
Takes a type-5 buffer with 0x66 bytes of USB descriptor data (see manu).
Offset | Size | Description |
---|---|---|
0x0 | 0x2 | VID (idVendor) |
0x2 | 0x2 | PID (idProduct) |
0x4 | 0x2 | bcdUSB |
0x6 | 0x20 | Manufacturer |
0x26 | 0x20 | Product |
0x46 | 0x20 | SerialNumber |
The last 3 blocks are strings. The data following each string is all-zero, for padding to size 0x20.
IDsInterface
Cmd | Name |
---|---|
0 | #GetDsEndpoint |
1 | #GetSetupEvent |
2 | |
3 | #EnableInterface |
4 | #DisableInterface |
5 | |
6 | |
7 | #GetCtrlInCompletionEvent |
8 | |
9 | #GetCtrlOutCompletionEvent |
10 | |
11 |
GetDsEndpoint
Takes a type-5 buffer and returns an #IDsEndpoint. Manu uses this twice for getting two endpoint sessions, with the following 0x7-byte buffer data:
- First endpoint: 0x07, 0x05, 0x80, 0x02, 0x00, 0x02, 0x00.
- Second endpoint: Same as above except byte2 is 0x00.
Each field is an u8, except for offset 0x4-0x5 which is an u16.
This structure matches libusb_endpoint_descriptor.
GetSetupEvent
Returns an event handle for interface setup changes.
EnableInterface
Takes no arguments. Enables the current interface.
DisableInterface
Takes no arguments. Disables the current interface.
GetCtrlInCompletionEvent
Returns an event handle for polling the completion of input control commands.
GetCtrlOutCompletionEvent
Returns an event handle for polling the completion of output control commands.
IDsEndpoint
Cmd | Name |
---|---|
0 | #PostBufferAsync |
1 | |
2 | |
3 | #GetReportData |
4 | |
5 |
PostBufferAsync
Takes an u32 (size) and an u64 (buffer).
GetReportData
Returns 0x84 bytes of report data from the endpoint.
usb:hs
General USB devices usage, used by hid-sysmodule and bsdsockets-sysmodule.
usb:pd
Only system-titles with access to this are PTM and AM.
usb:pd:c
USB-sysmodule symbols for this refer to "Cradle", which is the Dock.
usb:pm
Presumably Power Management, only system-title using this is PTM.