Difference between revisions of "/dev/uhs"
Marionumber1 (talk | contribs) (→0x11 - UhsQueryInterfaces(): Define UhsQueryInterfaces() input struct) |
Marionumber1 (talk | contribs) (→0x11 - UhsQueryInterfaces(): More detail in input struct) |
||
Line 7: | Line 7: | ||
<syntaxhighlight lang="C"> | <syntaxhighlight lang="C"> | ||
/* Determines which parameters to check */ | /* Determines which parameters to check */ | ||
− | #define | + | #define MATCH_DEV_CLASS 0x10 |
− | #define | + | #define MATCH_IF_CLASS 0x80 |
/* Input buffer */ | /* Input buffer */ | ||
Line 14: | Line 14: | ||
{ | { | ||
uint16_t match_params; /* Bitmask of above flags */ | uint16_t match_params; /* Bitmask of above flags */ | ||
− | char unknown2[0xa - 0x2]; | + | char unknown2[0xa - 0x2]; /* VID and PID presumably here somewhere */ |
− | uint8_t | + | uint8_t dev_class; /* Device class */ |
− | + | uint8_t dev_subclass; /* Device subclass */ | |
− | uint8_t | + | uint8_t dev_protocol; /* Device protocol */ |
− | + | uint8_t if_class; /* Interface class */ | |
+ | uint8_t if_subclass; /* Interface subclass */ | ||
+ | uint8_t if_protocol; /* Interface protocol */ | ||
} UhsInterfaceFilter; | } UhsInterfaceFilter; | ||
</syntaxhighlight> | </syntaxhighlight> |
Revision as of 01:24, 12 April 2015
/dev/uhs is the IOSU device node for USB. It provides an interface for low-level USB device access, which nsysuhs.rpl exposes to the Cafe OS userspace. The interface is opened through /dev/uhs/%d, where %d is an integer representing something (controller number?). Only 0 can be opened, as 1 returns access denied and further values do not exist as device nodes. Once opened, ioctl() requests can be issued to the interface, which are documented below.
ioctl() interface
0x11 - UhsQueryInterfaces()
This function is used to determine which USB device interfaces are plugged in and available. Its input is a 0x10-byte buffer containing a series of parameters to filter the interfaces by, such as class, subclass, vendor ID, and product ID. The output is an array of 0x16c-byte interface descriptors, one for each interface being read. IOS_Ioctl() with this function returns the number of attached USB interfaces permitted by the filter.
/* Determines which parameters to check */
#define MATCH_DEV_CLASS 0x10
#define MATCH_IF_CLASS 0x80
/* Input buffer */
typedef struct
{
uint16_t match_params; /* Bitmask of above flags */
char unknown2[0xa - 0x2]; /* VID and PID presumably here somewhere */
uint8_t dev_class; /* Device class */
uint8_t dev_subclass; /* Device subclass */
uint8_t dev_protocol; /* Device protocol */
uint8_t if_class; /* Interface class */
uint8_t if_subclass; /* Interface subclass */
uint8_t if_protocol; /* Interface protocol */
} UhsInterfaceFilter;