diff --git a/nx/include/switch/services/hid.h b/nx/include/switch/services/hid.h index 4d487038..40d7a32d 100644 --- a/nx/include/switch/services/hid.h +++ b/nx/include/switch/services/hid.h @@ -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()/hidSixAxisSensorValuesRead()/hidGetControllerType()/hidGetControllerColors(). 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()/hidGetControllerConnected(). Automatically uses CONTROLLER_PLAYER_1 when connected, otherwise uses CONTROLLER_HANDHELD. } HidControllerID; typedef struct touchPosition @@ -623,6 +623,7 @@ void hidSetControllerLayout(HidControllerID id, HidControllerLayoutType layoutTy HidControllerLayoutType hidGetControllerLayout(HidControllerID id); HidControllerType hidGetControllerType(HidControllerID id); void hidGetControllerColors(HidControllerID id, HidControllerColors *colors); +bool hidGetControllerConnected(HidControllerID id); void hidScanInput(void); diff --git a/nx/source/services/hid.c b/nx/source/services/hid.c index 13148a01..ab1c74fa 100644 --- a/nx/source/services/hid.c +++ b/nx/source/services/hid.c @@ -334,6 +334,17 @@ void hidGetControllerColors(HidControllerID id, HidControllerColors *colors) { rwlockReadUnlock(&g_hidLock); } +bool hidGetControllerConnected(HidControllerID id) { + if (id==CONTROLLER_P1_AUTO) + return hidGetControllerConnected(g_controllerP1AutoID); + if (id < 0 || id > 9) return 0; + + rwlockReadLock(&g_hidLock); + bool flag = (g_controllerEntries[id].connectionState & CONTROLLER_STATE_CONNECTED) != 0; + rwlockReadUnlock(&g_hidLock); + return flag; +} + u64 hidKeysHeld(HidControllerID id) { if (id==CONTROLLER_P1_AUTO) return hidKeysHeld(g_controllerP1AutoID); if (id < 0 || id > 9) return 0;