Line 406: |
Line 406: |
| | | |
| == QueryAllInterfaces == | | == QueryAllInterfaces == |
− | Takes a 0x10-byte input struct and a type-0x6 output buffer, returns an output u32 total_entries. | + | Takes an [[#UsbHsInterfaceFilter]] and a type-0x6 output buffer, returns an output u32 total_entries. |
| | | |
| The output buffer contains an array of [[#UsbHsInterface]]. | | The output buffer contains an array of [[#UsbHsInterface]]. |
| | | |
| == QueryAvailableInterfaces == | | == QueryAvailableInterfaces == |
− | Takes a 0x10-byte input struct and a type-0x6 output buffer, returns an output s32 total_entries. | + | Takes an [[#UsbHsInterfaceFilter]] and a type-0x6 output buffer, returns an output s32 total_entries. |
| | | |
| The output buffer contains an array of [[#UsbHsInterface]]. | | The output buffer contains an array of [[#UsbHsInterface]]. |
− |
| |
− | HID-sysmodule uses the following for the input struct: <code>80 00 00 00 00 00 00 00 00 00 00 00 00 03 00 00</code>
| |
| | | |
| == QueryAcquiredInterfaces == | | == QueryAcquiredInterfaces == |
Line 423: |
Line 421: |
| | | |
| == CreateInterfaceAvailableEvent == | | == CreateInterfaceAvailableEvent == |
− | Takes an input u8 and a 0x10-byte struct, and returns an output handle. The input value must be 0..2. This is used as an index in a table. | + | Takes an input u8 and an [[#UsbHsInterfaceFilter]], and returns an output handle. The input value must be 0..2. This is used as an index in a table. |
| | | |
− | The struct is located at +2 from the u8 in IPC rawdata. This struct is the same as the one used for [[#QueryAvailableInterfaces]]. | + | The struct is located at +2 from the u8 in IPC rawdata. |
| | | |
| When signaled, this indicates that the user-process should use [[#QueryAvailableInterfaces]] and [[#AcquireUsbIf]] with the output interfaces (and the rest of interface setup). | | When signaled, this indicates that the user-process should use [[#QueryAvailableInterfaces]] and [[#AcquireUsbIf]] with the output interfaces (and the rest of interface setup). |
Line 631: |
Line 629: |
| | | |
| This is a 0x228-byte struct (unofficial name). | | This is a 0x228-byte struct (unofficial name). |
| + | |
| + | = UsbHsInterfaceFilter = |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Offset || Size || Description |
| + | |- |
| + | | 0x0 || 0x2 || Flags |
| + | |- |
| + | | 0x2 || 0x2 ||idVendor |
| + | |- |
| + | | 0x4 || 0x2 || idProduct |
| + | |- |
| + | | 0x6 || 0x7 || Unused? |
| + | |- |
| + | | 0xD || 0x1 || bInterfaceClass |
| + | |- |
| + | | 0xE || 0x1 || bInterfaceSubClass |
| + | |- |
| + | | 0xF || 0x1 || bInterfaceProtocol |
| + | |} |
| + | |
| + | This is a 0x10-byte struct (unofficial name). |
| + | |
| + | This is used to filter [[#UsbHsInterface]], the query commands will only return the interface when these checks pass. 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. |
| + | |
| + | Flags bits 0..1 use usb_device_descriptor, while 7..9 use usb_interface_descriptor. |
| + | |
| + | Flags bits: |
| + | * 0: idVendor |
| + | * 1: idProduct |
| + | * 7: bInterfaceClass |
| + | * 8: bInterfaceSubClass |
| + | * 9: bInterfaceProtocol |
| + | |
| + | HID-sysmodule uses the following for the input struct: <code>80 00 00 00 00 00 00 00 00 00 00 00 00 03 00 00</code> |
| | | |
| = XferReport = | | = XferReport = |