1
0
mirror of https://github.com/switchbrew/libnx.git synced 2025-07-30 05:22:14 +02:00

Added hidGetControllerColors and HidControllerColors. Changed rightColorbuttons to rightColorButtons in HidControllerHeader. Updated CONTROLLER_P1_AUTO comment.

This commit is contained in:
yellows8 2018-10-16 22:45:44 -04:00
parent 052fb34397
commit 6a9d194fe3
2 changed files with 50 additions and 2 deletions
nx
include/switch/services
source/services

View File

@ -310,7 +310,7 @@ typedef enum
CONTROLLER_PLAYER_8 = 7,
CONTROLLER_HANDHELD = 8,
CONTROLLER_UNKNOWN = 9,
CONTROLLER_P1_AUTO = 10, /// Not an actual HID-sysmodule ID. Only for hidKeys*()/hidJoystickRead(). Automatically uses CONTROLLER_PLAYER_1 when connected, otherwise uses CONTROLLER_HANDHELD.
CONTROLLER_P1_AUTO = 10, /// Not an actual HID-sysmodule ID. Only for hidKeys*()/hidJoystickRead()/hidSixAxisSensorValuesRead()/hidGetControllerType()/hidGetControllerColors(). Automatically uses CONTROLLER_PLAYER_1 when connected, otherwise uses CONTROLLER_HANDHELD.
} HidControllerID;
typedef struct touchPosition
@ -491,10 +491,25 @@ typedef struct HidControllerHeader
u32 leftColorBody;
u32 leftColorButtons;
u32 rightColorBody;
u32 rightColorbuttons;
u32 rightColorButtons;
} HidControllerHeader;
static_assert(sizeof(HidControllerHeader) == 0x28, "Hid controller header structure has incorrect size");
/// Info struct extracted from HidControllerHeader.
/// Color fields are zero when not set. This can happen even when the *Set fields are set to true.
typedef struct HidControllerColors
{
bool singleSet; ///< Set to true when the below fields are valid.
u32 singleColorBody; ///< RGBA Single Body Color
u32 singleColorButtons; ///< RGBA Single Buttons Color
bool splitSet; ///< Set to true when the below fields are valid.
u32 leftColorBody; ///< RGBA Left Body Color
u32 leftColorButtons; ///< RGBA Left Buttons Color
u32 rightColorBody; ///< RGBA Right Body Color
u32 rightColorButtons; ///< RGBA Right Buttons Color
} HidControllerColors;
typedef struct HidControllerLayoutHeader
{
u64 timestampTicks;
@ -607,6 +622,7 @@ void* hidGetSharedmemAddr(void);
void hidSetControllerLayout(HidControllerID id, HidControllerLayoutType layoutType);
HidControllerLayoutType hidGetControllerLayout(HidControllerID id);
HidControllerType hidGetControllerType(HidControllerID id);
void hidGetControllerColors(HidControllerID id, HidControllerColors *colors);
void hidScanInput(void);

View File

@ -302,6 +302,38 @@ HidControllerType hidGetControllerType(HidControllerID id) {
return tmp;
}
void hidGetControllerColors(HidControllerID id, HidControllerColors *colors) {
if (id==CONTROLLER_P1_AUTO) {
hidGetControllerColors(g_controllerP1AutoID, colors);
return;
}
if (id < 0 || id > 9) return;
if (colors == NULL) return;
HidControllerHeader *hdr = &g_controllerHeaders[id];
memset(colors, 0, sizeof(HidControllerColors));
rwlockReadLock(&g_hidLock);
colors->singleSet = (hdr->singleColorsDescriptor & BIT(1)) == 0;
colors->splitSet = (hdr->splitColorsDescriptor & BIT(1)) == 0;
if (colors->singleSet) {
colors->singleColorBody = hdr->singleColorBody;
colors->singleColorButtons = hdr->singleColorButtons;
}
if (colors->splitSet) {
colors->leftColorBody = hdr->leftColorBody;
colors->leftColorButtons = hdr->leftColorButtons;
colors->rightColorBody = hdr->rightColorBody;
colors->rightColorButtons = hdr->rightColorButtons;
}
rwlockReadUnlock(&g_hidLock);
}
u64 hidKeysHeld(HidControllerID id) {
if (id==CONTROLLER_P1_AUTO) return hidKeysHeld(g_controllerP1AutoID);
if (id < 0 || id > 9) return 0;