Line 44: |
Line 44: |
| SerialNumber: SerialNumber | | SerialNumber: SerialNumber |
| | | |
− | The following is the default <code>lsusb -v {...}</code> output when the usbds service wasn't used. The endpoints are configured using [[#GetDsEndpoint]], the total number of endpoints is the number of open [[#IDsEndpoint]] sessions. | + | The following is the default <code>lsusb -v {...}</code> output when the usbds service wasn't used. |
| + | |
| + | The endpoints are configured using [[#GetDsEndpoint]], 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 [[#GetDsInterface]]. |
| | | |
| Bus 003 Device 006: ID 057e:2000 Nintendo Co., Ltd | | Bus 003 Device 006: ID 057e:2000 Nintendo Co., Ltd |
Line 106: |
Line 108: |
| == BindComplex == | | == BindComplex == |
| Takes an u32 ('''complexId'''). [[Manu_Services|Manu]] sends 0x02. | | Takes an u32 ('''complexId'''). [[Manu_Services|Manu]] sends 0x02. |
| + | |
| + | Once this command is used, the USB device will not be listed with <code>lsusb</code> until [[#EnableInterface]] is used. |
| | | |
| == BindClientProcess == | | == BindClientProcess == |
Line 112: |
Line 116: |
| == GetDsInterface == | | == GetDsInterface == |
| Takes 2 type-5 buffers and returns an [[#IDsInterface]]. [[Manu_Services|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. | | Takes 2 type-5 buffers and returns an [[#IDsInterface]]. [[Manu_Services|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. |
| + | |
| + | Structure of the first buffer(this is similar to [http://libusb.sourceforge.net/api-1.0/structlibusb__interface__descriptor.html libusb__interface__descriptor]): |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Offset || Size || Description |
| + | |- |
| + | | 0x0 || 0x1 || bLength |
| + | |- |
| + | | 0x1 || 0x1 || ? |
| + | |- |
| + | | 0x2 || 0x1 || ? |
| + | |- |
| + | | 0x3 || 0x1 || ? |
| + | |- |
| + | | 0x4 || 0x1 || ? |
| + | |- |
| + | | 0x5 || 0x1 || bInterfaceClass |
| + | |- |
| + | | 0x6 || 0x1 || bInterfaceSubClass |
| + | |- |
| + | | 0x7 || 0x1 || bInterfaceProtocol |
| + | |- |
| + | | 0x8 || 0x1 || ? |
| + | |} |
| | | |
| == GetStateChangeEvent == | | == GetStateChangeEvent == |
Line 182: |
Line 210: |
| === EnableInterface === | | === EnableInterface === |
| Takes no arguments. Enables the current interface. | | Takes no arguments. Enables the current interface. |
| + | |
| + | Only one interface can be enabled at time, this indicates which interface is actually used for USB. |
| | | |
| === DisableInterface === | | === DisableInterface === |