Delete old HID API 🦀🦀

This commit is contained in:
fincs 2020-12-20 01:38:18 +01:00
parent c8fdae9189
commit 637dd12b2d
No known key found for this signature in database
GPG Key ID: 62C7609ADA219C60
2 changed files with 7 additions and 784 deletions

View File

@ -11,9 +11,6 @@
#include "../services/btdrv_types.h" #include "../services/btdrv_types.h"
#include "../sf/service.h" #include "../sf/service.h"
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
// Begin enums and output structs // Begin enums and output structs
/// HidDebugPadButton /// HidDebugPadButton
@ -64,184 +61,6 @@ typedef enum {
HidKeyboardModifier_Hiragana = BIT(12), HidKeyboardModifier_Hiragana = BIT(12),
} HidKeyboardModifier; } HidKeyboardModifier;
/// HidKeyboardScancode \deprecated
typedef enum DEPRECATED {
KBD_NONE = 0x00,
KBD_ERR_OVF = 0x01,
KBD_A = 0x04,
KBD_B = 0x05,
KBD_C = 0x06,
KBD_D = 0x07,
KBD_E = 0x08,
KBD_F = 0x09,
KBD_G = 0x0a,
KBD_H = 0x0b,
KBD_I = 0x0c,
KBD_J = 0x0d,
KBD_K = 0x0e,
KBD_L = 0x0f,
KBD_M = 0x10,
KBD_N = 0x11,
KBD_O = 0x12,
KBD_P = 0x13,
KBD_Q = 0x14,
KBD_R = 0x15,
KBD_S = 0x16,
KBD_T = 0x17,
KBD_U = 0x18,
KBD_V = 0x19,
KBD_W = 0x1a,
KBD_X = 0x1b,
KBD_Y = 0x1c,
KBD_Z = 0x1d,
KBD_1 = 0x1e,
KBD_2 = 0x1f,
KBD_3 = 0x20,
KBD_4 = 0x21,
KBD_5 = 0x22,
KBD_6 = 0x23,
KBD_7 = 0x24,
KBD_8 = 0x25,
KBD_9 = 0x26,
KBD_0 = 0x27,
KBD_ENTER = 0x28,
KBD_ESC = 0x29,
KBD_BACKSPACE = 0x2a,
KBD_TAB = 0x2b,
KBD_SPACE = 0x2c,
KBD_MINUS = 0x2d,
KBD_EQUAL = 0x2e,
KBD_LEFTBRACE = 0x2f,
KBD_RIGHTBRACE = 0x30,
KBD_BACKSLASH = 0x31,
KBD_HASHTILDE = 0x32,
KBD_SEMICOLON = 0x33,
KBD_APOSTROPHE = 0x34,
KBD_GRAVE = 0x35,
KBD_COMMA = 0x36,
KBD_DOT = 0x37,
KBD_SLASH = 0x38,
KBD_CAPSLOCK = 0x39,
KBD_F1 = 0x3a,
KBD_F2 = 0x3b,
KBD_F3 = 0x3c,
KBD_F4 = 0x3d,
KBD_F5 = 0x3e,
KBD_F6 = 0x3f,
KBD_F7 = 0x40,
KBD_F8 = 0x41,
KBD_F9 = 0x42,
KBD_F10 = 0x43,
KBD_F11 = 0x44,
KBD_F12 = 0x45,
KBD_SYSRQ = 0x46,
KBD_SCROLLLOCK = 0x47,
KBD_PAUSE = 0x48,
KBD_INSERT = 0x49,
KBD_HOME = 0x4a,
KBD_PAGEUP = 0x4b,
KBD_DELETE = 0x4c,
KBD_END = 0x4d,
KBD_PAGEDOWN = 0x4e,
KBD_RIGHT = 0x4f,
KBD_LEFT = 0x50,
KBD_DOWN = 0x51,
KBD_UP = 0x52,
KBD_NUMLOCK = 0x53,
KBD_KPSLASH = 0x54,
KBD_KPASTERISK = 0x55,
KBD_KPMINUS = 0x56,
KBD_KPPLUS = 0x57,
KBD_KPENTER = 0x58,
KBD_KP1 = 0x59,
KBD_KP2 = 0x5a,
KBD_KP3 = 0x5b,
KBD_KP4 = 0x5c,
KBD_KP5 = 0x5d,
KBD_KP6 = 0x5e,
KBD_KP7 = 0x5f,
KBD_KP8 = 0x60,
KBD_KP9 = 0x61,
KBD_KP0 = 0x62,
KBD_KPDOT = 0x63,
KBD_102ND = 0x64,
KBD_COMPOSE = 0x65,
KBD_POWER = 0x66,
KBD_KPEQUAL = 0x67,
KBD_F13 = 0x68,
KBD_F14 = 0x69,
KBD_F15 = 0x6a,
KBD_F16 = 0x6b,
KBD_F17 = 0x6c,
KBD_F18 = 0x6d,
KBD_F19 = 0x6e,
KBD_F20 = 0x6f,
KBD_F21 = 0x70,
KBD_F22 = 0x71,
KBD_F23 = 0x72,
KBD_F24 = 0x73,
KBD_OPEN = 0x74,
KBD_HELP = 0x75,
KBD_PROPS = 0x76,
KBD_FRONT = 0x77,
KBD_STOP = 0x78,
KBD_AGAIN = 0x79,
KBD_UNDO = 0x7a,
KBD_CUT = 0x7b,
KBD_COPY = 0x7c,
KBD_PASTE = 0x7d,
KBD_FIND = 0x7e,
KBD_MUTE = 0x7f,
KBD_VOLUMEUP = 0x80,
KBD_VOLUMEDOWN = 0x81,
KBD_CAPSLOCK_ACTIVE = 0x82 ,
KBD_NUMLOCK_ACTIVE = 0x83 ,
KBD_SCROLLLOCK_ACTIVE = 0x84 ,
KBD_KPCOMMA = 0x85,
KBD_KPLEFTPAREN = 0xb6,
KBD_KPRIGHTPAREN = 0xb7,
KBD_LEFTCTRL = 0xe0,
KBD_LEFTSHIFT = 0xe1,
KBD_LEFTALT = 0xe2,
KBD_LEFTMETA = 0xe3,
KBD_RIGHTCTRL = 0xe4,
KBD_RIGHTSHIFT = 0xe5,
KBD_RIGHTALT = 0xe6,
KBD_RIGHTMETA = 0xe7,
KBD_MEDIA_PLAYPAUSE = 0xe8,
KBD_MEDIA_STOPCD = 0xe9,
KBD_MEDIA_PREVIOUSSONG = 0xea,
KBD_MEDIA_NEXTSONG = 0xeb,
KBD_MEDIA_EJECTCD = 0xec,
KBD_MEDIA_VOLUMEUP = 0xed,
KBD_MEDIA_VOLUMEDOWN = 0xee,
KBD_MEDIA_MUTE = 0xef,
KBD_MEDIA_WWW = 0xf0,
KBD_MEDIA_BACK = 0xf1,
KBD_MEDIA_FORWARD = 0xf2,
KBD_MEDIA_STOP = 0xf3,
KBD_MEDIA_FIND = 0xf4,
KBD_MEDIA_SCROLLUP = 0xf5,
KBD_MEDIA_SCROLLDOWN = 0xf6,
KBD_MEDIA_EDIT = 0xf7,
KBD_MEDIA_SLEEP = 0xf8,
KBD_MEDIA_COFFEE = 0xf9,
KBD_MEDIA_REFRESH = 0xfa,
KBD_MEDIA_CALC = 0xfb
} HidKeyboardScancode;
/// KeyboardLockKeyEvent /// KeyboardLockKeyEvent
typedef enum { typedef enum {
HidKeyboardLockKeyEvent_NumLockOn = BIT(0), ///< NumLockOn HidKeyboardLockKeyEvent_NumLockOn = BIT(0), ///< NumLockOn
@ -338,63 +157,6 @@ typedef enum {
HidNpadButton_AnySR = HidNpadButton_LeftSR | HidNpadButton_RightSR, ///< Bitmask containing SR buttons on both Joy-Cons (Left/Right) HidNpadButton_AnySR = HidNpadButton_LeftSR | HidNpadButton_RightSR, ///< Bitmask containing SR buttons on both Joy-Cons (Left/Right)
} HidNpadButton; } HidNpadButton;
/// HidControllerKeys \deprecated
typedef enum DEPRECATED {
KEY_A = HidNpadButton_A,
KEY_B = HidNpadButton_B,
KEY_X = HidNpadButton_X,
KEY_Y = HidNpadButton_Y,
KEY_LSTICK = HidNpadButton_StickL,
KEY_RSTICK = HidNpadButton_StickR,
KEY_L = HidNpadButton_L,
KEY_R = HidNpadButton_R,
KEY_ZL = HidNpadButton_ZL,
KEY_ZR = HidNpadButton_ZR,
KEY_PLUS = HidNpadButton_Plus,
KEY_MINUS = HidNpadButton_Minus,
KEY_DLEFT = HidNpadButton_Left,
KEY_DUP = HidNpadButton_Up,
KEY_DRIGHT = HidNpadButton_Right,
KEY_DDOWN = HidNpadButton_Down,
KEY_LSTICK_LEFT = HidNpadButton_StickLLeft,
KEY_LSTICK_UP = HidNpadButton_StickLUp,
KEY_LSTICK_RIGHT = HidNpadButton_StickLRight,
KEY_LSTICK_DOWN = HidNpadButton_StickLDown,
KEY_RSTICK_LEFT = HidNpadButton_StickRLeft,
KEY_RSTICK_UP = HidNpadButton_StickRUp,
KEY_RSTICK_RIGHT = HidNpadButton_StickRRight,
KEY_RSTICK_DOWN = HidNpadButton_StickRDown,
KEY_SL_LEFT = HidNpadButton_LeftSL,
KEY_SR_LEFT = HidNpadButton_LeftSR,
KEY_SL_RIGHT = HidNpadButton_RightSL,
KEY_SR_RIGHT = HidNpadButton_RightSR,
KEY_NES_HANDHELD_LEFT_B = HidNpadButton_HandheldLeftB,
KEY_HOME = BIT(18), ///< HOME button, only available for use with HiddbgHdlsState::buttons.
KEY_CAPTURE = BIT(19), ///< Capture button, only available for use with HiddbgHdlsState::buttons.
KEY_TOUCH = BIT(28), ///< Pseudo-key for at least one finger on the touch screen
KEY_JOYCON_RIGHT = HidNpadButton_A,
KEY_JOYCON_DOWN = HidNpadButton_B,
KEY_JOYCON_UP = HidNpadButton_X,
KEY_JOYCON_LEFT = HidNpadButton_Y,
KEY_UP = HidNpadButton_AnyUp,
KEY_DOWN = HidNpadButton_AnyDown,
KEY_LEFT = HidNpadButton_AnyLeft,
KEY_RIGHT = HidNpadButton_AnyRight,
KEY_SL = HidNpadButton_AnySL,
KEY_SR = HidNpadButton_AnySR,
} HidControllerKeys;
/// HidControllerJoystick \deprecated
typedef enum DEPRECATED {
JOYSTICK_LEFT = 0,
JOYSTICK_RIGHT = 1,
JOYSTICK_NUM_STICKS = 2,
} HidControllerJoystick;
/// HidDebugPadAttribute /// HidDebugPadAttribute
typedef enum { typedef enum {
HidDebugPadAttribute_IsConnected = BIT(0), ///< IsConnected HidDebugPadAttribute_IsConnected = BIT(0), ///< IsConnected
@ -457,21 +219,6 @@ typedef enum {
HidGestureType_Rotate = 9, ///< Rotate HidGestureType_Rotate = 9, ///< Rotate
} HidGestureType; } HidGestureType;
/// HidControllerID \deprecated
typedef enum DEPRECATED {
CONTROLLER_PLAYER_1 = 0,
CONTROLLER_PLAYER_2 = 1,
CONTROLLER_PLAYER_3 = 2,
CONTROLLER_PLAYER_4 = 3,
CONTROLLER_PLAYER_5 = 4,
CONTROLLER_PLAYER_6 = 5,
CONTROLLER_PLAYER_7 = 6,
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()/hidIsControllerConnected(). Automatically uses CONTROLLER_PLAYER_1 when connected, otherwise uses CONTROLLER_HANDHELD.
} HidControllerID;
/// GyroscopeZeroDriftMode /// GyroscopeZeroDriftMode
typedef enum { typedef enum {
HidGyroscopeZeroDriftMode_Loose = 0, ///< Loose HidGyroscopeZeroDriftMode_Loose = 0, ///< Loose
@ -673,38 +420,12 @@ typedef enum {
HidPalmaFeature_MuteSwitch = BIT(3), ///< MuteSwitch HidPalmaFeature_MuteSwitch = BIT(3), ///< MuteSwitch
} HidPalmaFeature; } HidPalmaFeature;
/// touchPosition \deprecated
typedef struct DEPRECATED touchPosition {
u32 id;
u32 px;
u32 py;
u32 dx;
u32 dy;
u32 angle;
} touchPosition;
/// HidAnalogStickState /// HidAnalogStickState
typedef struct HidAnalogStickState { typedef struct HidAnalogStickState {
s32 x; ///< X s32 x; ///< X
s32 y; ///< Y s32 y; ///< Y
} HidAnalogStickState; } HidAnalogStickState;
/// JoystickPosition \deprecated
typedef struct DEPRECATED JoystickPosition {
s32 dx;
s32 dy;
} JoystickPosition;
/// MousePosition \deprecated
typedef struct DEPRECATED MousePosition {
s32 x;
s32 y;
s32 velocityX;
s32 velocityY;
s32 scrollVelocityX;
s32 scrollVelocityY;
} MousePosition;
/// HidVector /// HidVector
typedef struct HidVector { typedef struct HidVector {
float x; float x;
@ -717,14 +438,6 @@ typedef struct HidDirectionState {
float direction[3][3]; ///< 3x3 matrix float direction[3][3]; ///< 3x3 matrix
} HidDirectionState; } HidDirectionState;
/// SixAxisSensorValues \deprecated DEPRECATED
typedef struct DEPRECATED SixAxisSensorValues {
HidVector accelerometer;
HidVector gyroscope;
HidVector unk;
HidVector orientation[3];
} SixAxisSensorValues;
#define JOYSTICK_MAX (0x7FFF) #define JOYSTICK_MAX (0x7FFF)
#define JOYSTICK_MIN (-0x7FFF) #define JOYSTICK_MIN (-0x7FFF)
@ -1300,34 +1013,18 @@ typedef struct HidPalmaActivityEntry {
u16 wave_index; ///< WaveIndex u16 wave_index; ///< WaveIndex
} HidPalmaActivityEntry; } HidPalmaActivityEntry;
static inline HidNpadIdType hidControllerIDToNpadIdType(HidControllerID id) {
if (id <= CONTROLLER_PLAYER_8) return (HidNpadIdType)id;
if (id == CONTROLLER_HANDHELD) return HidNpadIdType_Handheld;
return HidNpadIdType_Other;//For CONTROLLER_UNKNOWN and invalid values return this.
}
static inline HidControllerID hidControllerIDFromNpadIdType(HidNpadIdType id) {
if (id <= HidNpadIdType_No8) return (HidControllerID)id;
if (id == HidNpadIdType_Handheld) return CONTROLLER_HANDHELD;
return CONTROLLER_UNKNOWN;
}
/// Initialize hid. Called automatically during app startup. /// Initialize hid. Called automatically during app startup.
Result hidInitialize(void); Result hidInitialize(void);
/// Exit hid. Called automatically during app exit. /// Exit hid. Called automatically during app exit.
void hidExit(void); void hidExit(void);
void DEPRECATED hidReset(void); ///< \deprecated
/// Gets the Service object for the actual hid service session. /// Gets the Service object for the actual hid service session.
Service* hidGetServiceSession(void); Service* hidGetServiceSession(void);
/// Gets the address of the SharedMemory. /// Gets the address of the SharedMemory.
void* hidGetSharedmemAddr(void); void* hidGetSharedmemAddr(void);
void DEPRECATED hidScanInput(void); ///< \deprecated
///@name TouchScreen ///@name TouchScreen
///@{ ///@{
@ -1586,39 +1283,6 @@ size_t hidGetGestureStates(HidGestureState *states, size_t count);
///@} ///@}
bool DEPRECATED hidIsControllerConnected(HidControllerID id); ///< \deprecated
u64 DEPRECATED hidKeysHeld(HidControllerID id); ///< \deprecated
u64 DEPRECATED hidKeysDown(HidControllerID id); ///< \deprecated
u64 DEPRECATED hidKeysUp(HidControllerID id); ///< \deprecated
u64 DEPRECATED hidMouseButtonsHeld(void); ///< \deprecated
u64 DEPRECATED hidMouseButtonsDown(void); ///< \deprecated
u64 DEPRECATED hidMouseButtonsUp(void); ///< \deprecated
void DEPRECATED hidMouseRead(MousePosition *pos); ///< \deprecated
u32 DEPRECATED hidMouseMultiRead(MousePosition *entries, u32 num_entries); ///< \deprecated
bool DEPRECATED hidKeyboardModifierHeld(HidKeyboardModifier modifier); ///< \deprecated
bool DEPRECATED hidKeyboardModifierDown(HidKeyboardModifier modifier); ///< \deprecated
bool DEPRECATED hidKeyboardModifierUp(HidKeyboardModifier modifier); ///< \deprecated
bool DEPRECATED hidKeyboardHeld(HidKeyboardScancode key); ///< \deprecated
bool DEPRECATED hidKeyboardDown(HidKeyboardScancode key); ///< \deprecated
bool DEPRECATED hidKeyboardUp(HidKeyboardScancode key); ///< \deprecated
u32 DEPRECATED hidTouchCount(void); ///< \deprecated
void DEPRECATED hidTouchRead(touchPosition *pos, u32 point_id); ///< \deprecated
void DEPRECATED hidJoystickRead(JoystickPosition *pos, HidControllerID id, HidControllerJoystick stick); ///< \deprecated
u32 DEPRECATED hidSixAxisSensorValuesRead(SixAxisSensorValues *values, HidControllerID id, u32 num_entries); ///< \deprecated
/**
* @brief This can be used to check what CONTROLLER_P1_AUTO uses.
* @return 0 when CONTROLLER_PLAYER_1 is connected, otherwise returns 1 for handheld-mode.
* @deprecated
*/
bool DEPRECATED hidGetHandheldMode(void);
/** /**
* @brief SendKeyboardLockKeyEvent * @brief SendKeyboardLockKeyEvent
* @note Same as \ref hidsysSendKeyboardLockKeyEvent. * @note Same as \ref hidsysSendKeyboardLockKeyEvent.
@ -2354,5 +2018,3 @@ Result hidSetTouchScreenConfiguration(const HidTouchScreenConfigurationForNx *co
* @param[out] out Output flag. * @param[out] out Output flag.
*/ */
Result hidIsFirmwareUpdateNeededForNotification(bool *out); Result hidIsFirmwareUpdateNeededForNotification(bool *out);
#pragma GCC diagnostic pop

View File

@ -22,21 +22,6 @@ static u8* g_sevenSixAxisSensorBuffer;
static TransferMemory g_sevenSixAxisSensorTmem0; static TransferMemory g_sevenSixAxisSensorTmem0;
static TransferMemory g_sevenSixAxisSensorTmem1; static TransferMemory g_sevenSixAxisSensorTmem1;
static bool g_scanInputInitialized;
static RwLock g_hidLock;
static HidTouchScreenState g_touchScreenState;
static HidMouseState g_mouseState;
static HidKeyboardState g_keyboardState;
static HidNpadCommonState g_controllerEntries[10];
static u64 g_mouseOld, g_mouseHeld, g_mouseDown, g_mouseUp;
static u64 g_keyboardModOld, g_keyboardModHeld, g_keyboardModDown, g_keyboardModUp;
static u64 g_keyboardOld[4], g_keyboardHeld[4], g_keyboardDown[4], g_keyboardUp[4];
static u64 g_controllerOld[10], g_controllerHeld[10], g_controllerDown[10], g_controllerUp[10];
static HidControllerID g_controllerP1AutoID;
static Result _hidCreateAppletResource(Service* srv, Service* srv_out); static Result _hidCreateAppletResource(Service* srv, Service* srv_out);
static Result _hidGetSharedMemoryHandle(Service* srv, Handle* handle_out); static Result _hidGetSharedMemoryHandle(Service* srv, Handle* handle_out);
@ -46,8 +31,6 @@ static Result _hidActivateKeyboard(void);
static Result _hidActivateNpad(void); static Result _hidActivateNpad(void);
static Result _hidActivateGesture(void); static Result _hidActivateGesture(void);
static Result _hidSetDualModeAll(void);
static Result _hidGetVibrationDeviceHandles(HidVibrationDeviceHandle *handles, s32 total_handles, HidNpadIdType id, HidNpadStyleTag style); static Result _hidGetVibrationDeviceHandles(HidVibrationDeviceHandle *handles, s32 total_handles, HidNpadIdType id, HidNpadStyleTag style);
static Result _hidCreateActiveVibrationDeviceList(Service* srv_out); static Result _hidCreateActiveVibrationDeviceList(Service* srv_out);
@ -86,36 +69,12 @@ void _hidCleanup(void) {
if (g_sevenSixAxisSensorBuffer != NULL) if (g_sevenSixAxisSensorBuffer != NULL)
diagAbortWithResult(MAKERESULT(Module_Libnx, LibnxError_ShouldNotHappen)); diagAbortWithResult(MAKERESULT(Module_Libnx, LibnxError_ShouldNotHappen));
g_scanInputInitialized = false;
serviceClose(&g_hidIActiveVibrationDeviceList); serviceClose(&g_hidIActiveVibrationDeviceList);
shmemClose(&g_hidSharedmem); shmemClose(&g_hidSharedmem);
serviceClose(&g_hidIAppletResource); serviceClose(&g_hidIAppletResource);
serviceClose(&g_hidSrv); serviceClose(&g_hidSrv);
} }
static void _hidReset(void) {
// Reset internal state
memset(&g_touchScreenState, 0, sizeof(HidTouchScreenState));
memset(&g_mouseState, 0, sizeof(HidMouseState));
memset(&g_keyboardState, 0, sizeof(HidKeyboardState));
memset(g_controllerEntries, 0, sizeof(g_controllerEntries));
g_mouseOld = g_mouseHeld = g_mouseDown = g_mouseUp = 0;
g_keyboardModOld = g_keyboardModHeld = g_keyboardModDown = g_keyboardModUp = 0;
for (u32 i = 0; i < 4; i++)
g_keyboardOld[i] = g_keyboardHeld[i] = g_keyboardDown[i] = g_keyboardUp[i] = 0;
for (u32 i = 0; i < 10; i++)
g_controllerOld[i] = g_controllerHeld[i] = g_controllerDown[i] = g_controllerUp[i] = 0;
g_controllerP1AutoID = CONTROLLER_HANDHELD;
}
void hidReset(void) {
rwlockWriteLock(&g_hidLock);
_hidReset();
rwlockWriteUnlock(&g_hidLock);
}
Service* hidGetServiceSession(void) { Service* hidGetServiceSession(void) {
return &g_hidSrv; return &g_hidSrv;
} }
@ -124,156 +83,6 @@ void* hidGetSharedmemAddr(void) {
return shmemGetAddr(&g_hidSharedmem); return shmemGetAddr(&g_hidSharedmem);
} }
void hidScanInput(void) {
rwlockWriteLock(&g_hidLock);
if (!g_scanInputInitialized) {
Result rc;
hidInitializeNpad();
hidInitializeTouchScreen();
hidInitializeKeyboard();
hidInitializeMouse();
_hidReset();
rc = hidSetSupportedNpadStyleSet(HidNpadStyleSet_NpadStandard | HidNpadStyleTag_NpadSystemExt | HidNpadStyleTag_NpadSystem);
if (R_FAILED(rc)) diagAbortWithResult(rc);
static const HidNpadIdType idbuf[] = {
HidNpadIdType_No1,
HidNpadIdType_No2,
HidNpadIdType_No3,
HidNpadIdType_No4,
HidNpadIdType_No5,
HidNpadIdType_No6,
HidNpadIdType_No7,
HidNpadIdType_No8,
HidNpadIdType_Handheld,
};
rc = hidSetSupportedNpadIdType(idbuf, sizeof(idbuf)/sizeof(*idbuf));
if (R_FAILED(rc)) diagAbortWithResult(rc);
rc = _hidSetDualModeAll();
if (R_FAILED(rc)) diagAbortWithResult(rc);
rc = hidSetNpadJoyHoldType(HidNpadJoyHoldType_Vertical);
if (R_FAILED(rc)) diagAbortWithResult(rc);
g_scanInputInitialized = true;
}
g_mouseOld = g_mouseHeld;
g_keyboardModOld = g_keyboardModHeld;
memcpy(g_keyboardOld, g_keyboardHeld, sizeof(g_keyboardOld));
memcpy(g_controllerOld, g_controllerHeld, sizeof(g_controllerOld));
g_mouseHeld = 0;
g_keyboardModHeld = 0;
memset(g_keyboardHeld, 0, sizeof(g_keyboardHeld));
memset(g_controllerHeld, 0, sizeof(g_controllerHeld));
memset(&g_touchScreenState, 0, sizeof(HidTouchScreenState));
memset(&g_mouseState, 0, sizeof(HidMouseState));
memset(&g_keyboardState, 0, sizeof(HidKeyboardState));
memset(g_controllerEntries, 0, sizeof(g_controllerEntries));
if (hidGetTouchScreenStates(&g_touchScreenState, 1)) {
if (g_touchScreenState.count >= 1)
g_controllerHeld[CONTROLLER_HANDHELD] |= KEY_TOUCH;
}
if (hidGetMouseStates(&g_mouseState, 1)) {
g_mouseHeld = g_mouseState.buttons;
g_mouseDown = (~g_mouseOld) & g_mouseHeld;
g_mouseUp = g_mouseOld & (~g_mouseHeld);
}
if (hidGetKeyboardStates(&g_keyboardState, 1)) {
g_keyboardModHeld = g_keyboardState.modifiers;
for (u32 i = 0; i < 4; i++) {
g_keyboardHeld[i] = g_keyboardState.keys[i];
}
g_keyboardModDown = (~g_keyboardModOld) & g_keyboardModHeld;
g_keyboardModUp = g_keyboardModOld & (~g_keyboardModHeld);
for (u32 i = 0; i < 4; i++) {
g_keyboardDown[i] = (~g_keyboardOld[i]) & g_keyboardHeld[i];
g_keyboardUp[i] = g_keyboardOld[i] & (~g_keyboardHeld[i]);
}
}
for (u32 i = 0; i < 10; i++) {
HidNpadIdType id = hidControllerIDToNpadIdType(i);
u32 style_set = hidGetNpadStyleSet(id);
size_t total_out=0;
if (style_set & HidNpadStyleTag_NpadSystemExt) {
HidNpadSystemExtState state={0};
total_out = hidGetNpadStatesSystemExt(id, &state, 1);
if (total_out) {
g_controllerHeld[i] |= state.buttons;
memcpy(&g_controllerEntries[i], &state, sizeof(state));
}
}
else if (style_set & HidNpadStyleTag_NpadSystem) {
HidNpadSystemState state={0};
total_out = hidGetNpadStatesSystem(id, &state, 1);
if (total_out) {
g_controllerHeld[i] |= state.buttons;
memcpy(&g_controllerEntries[i], &state, sizeof(state));
}
}
else if (style_set & HidNpadStyleTag_NpadFullKey) {
HidNpadFullKeyState state={0};
total_out = hidGetNpadStatesFullKey(id, &state, 1);
if (total_out) {
g_controllerHeld[i] |= state.buttons;
memcpy(&g_controllerEntries[i], &state, sizeof(state));
}
}
else if (style_set & HidNpadStyleTag_NpadHandheld) {
HidNpadHandheldState state={0};
total_out = hidGetNpadStatesHandheld(id, &state, 1);
if (total_out) {
g_controllerHeld[i] |= state.buttons;
memcpy(&g_controllerEntries[i], &state, sizeof(state));
}
}
else if (style_set & HidNpadStyleTag_NpadJoyDual) {
HidNpadJoyDualState state={0};
total_out = hidGetNpadStatesJoyDual(id, &state, 1);
if (total_out) {
g_controllerHeld[i] |= state.buttons;
memcpy(&g_controllerEntries[i], &state, sizeof(state));
}
}
else if (style_set & HidNpadStyleTag_NpadJoyLeft) {
HidNpadJoyLeftState state={0};
total_out = hidGetNpadStatesJoyLeft(id, &state, 1);
if (total_out) {
g_controllerHeld[i] |= state.buttons;
memcpy(&g_controllerEntries[i], &state, sizeof(state));
}
}
else if (style_set & HidNpadStyleTag_NpadJoyRight) {
HidNpadJoyRightState state={0};
total_out = hidGetNpadStatesJoyRight(id, &state, 1);
if (total_out) {
g_controllerHeld[i] |= state.buttons;
memcpy(&g_controllerEntries[i], &state, sizeof(state));
}
}
g_controllerDown[i] = (~g_controllerOld[i]) & g_controllerHeld[i];
g_controllerUp[i] = g_controllerOld[i] & (~g_controllerHeld[i]);
}
g_controllerP1AutoID = CONTROLLER_HANDHELD;
if (g_controllerEntries[CONTROLLER_PLAYER_1].attributes & HidNpadAttribute_IsConnected)
g_controllerP1AutoID = CONTROLLER_PLAYER_1;
rwlockWriteUnlock(&g_hidLock);
}
static HidNpadInternalState* _hidGetNpadInternalState(HidNpadIdType id) { static HidNpadInternalState* _hidGetNpadInternalState(HidNpadIdType id) {
HidSharedMemory *sharedmem = (HidSharedMemory*)hidGetSharedmemAddr(); HidSharedMemory *sharedmem = (HidSharedMemory*)hidGetSharedmemAddr();
if (sharedmem == NULL) if (sharedmem == NULL)
@ -647,13 +456,13 @@ size_t hidGetNpadStatesSystem(HidNpadIdType id, HidNpadSystemState *states, size
u64 buttons = states[i].buttons; u64 buttons = states[i].buttons;
u64 new_buttons = 0; u64 new_buttons = 0;
if (buttons & KEY_LEFT) new_buttons |= KEY_DLEFT; if (buttons & HidNpadButton_AnyLeft) new_buttons |= HidNpadButton_Left;
if (buttons & KEY_UP) new_buttons |= KEY_DUP; if (buttons & HidNpadButton_AnyUp) new_buttons |= HidNpadButton_Up;
if (buttons & KEY_RIGHT) new_buttons |= KEY_DRIGHT; if (buttons & HidNpadButton_AnyRight) new_buttons |= HidNpadButton_Right;
if (buttons & KEY_DOWN) new_buttons |= KEY_DDOWN; if (buttons & HidNpadButton_AnyDown) new_buttons |= HidNpadButton_Down;
if (buttons & (KEY_L|KEY_ZL)) new_buttons |= KEY_L; // sdknso would mask out this button on the else condition for both of these, but it was already clear anyway. if (buttons & (HidNpadButton_L|HidNpadButton_ZL)) new_buttons |= HidNpadButton_L; // sdknso would mask out this button on the else condition for both of these, but it was already clear anyway.
if (buttons & (KEY_R|KEY_ZR)) new_buttons |= KEY_R; if (buttons & (HidNpadButton_R|HidNpadButton_ZR)) new_buttons |= HidNpadButton_R;
buttons = new_buttons | (buttons & (KEY_A|KEY_B|KEY_X|KEY_Y)); buttons = new_buttons | (buttons & (HidNpadButton_A|HidNpadButton_B|HidNpadButton_X|HidNpadButton_Y));
// sdknso would handle button-bitmasking with ControlPadRestriction here. // sdknso would handle button-bitmasking with ControlPadRestriction here.
@ -719,251 +528,6 @@ size_t hidGetGestureStates(HidGestureState *states, size_t count) {
return total; return total;
} }
bool hidIsControllerConnected(HidControllerID id) {
if (id==CONTROLLER_P1_AUTO)
return hidIsControllerConnected(g_controllerP1AutoID);
if (id < 0 || id > 9) return 0;
rwlockReadLock(&g_hidLock);
bool flag = (g_controllerEntries[id].attributes & HidNpadAttribute_IsConnected) != 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;
rwlockReadLock(&g_hidLock);
u64 tmp = g_controllerHeld[id];
rwlockReadUnlock(&g_hidLock);
return tmp;
}
u64 hidKeysDown(HidControllerID id) {
if (id==CONTROLLER_P1_AUTO) return hidKeysDown(g_controllerP1AutoID);
if (id < 0 || id > 9) return 0;
rwlockReadLock(&g_hidLock);
u64 tmp = g_controllerDown[id];
rwlockReadUnlock(&g_hidLock);
return tmp;
}
u64 hidKeysUp(HidControllerID id) {
if (id==CONTROLLER_P1_AUTO) return hidKeysUp(g_controllerP1AutoID);
if (id < 0 || id > 9) return 0;
rwlockReadLock(&g_hidLock);
u64 tmp = g_controllerUp[id];
rwlockReadUnlock(&g_hidLock);
return tmp;
}
u64 hidMouseButtonsHeld(void) {
rwlockReadLock(&g_hidLock);
u64 tmp = g_mouseHeld;
rwlockReadUnlock(&g_hidLock);
return tmp;
}
u64 hidMouseButtonsDown(void) {
rwlockReadLock(&g_hidLock);
u64 tmp = g_mouseDown;
rwlockReadUnlock(&g_hidLock);
return tmp;
}
u64 hidMouseButtonsUp(void) {
rwlockReadLock(&g_hidLock);
u64 tmp = g_mouseUp;
rwlockReadUnlock(&g_hidLock);
return tmp;
}
void hidMouseRead(MousePosition *pos) {
rwlockReadLock(&g_hidLock);
pos->x = g_mouseState.x;
pos->y = g_mouseState.y;
pos->velocityX = g_mouseState.delta_x;
pos->velocityY = g_mouseState.delta_y;
pos->scrollVelocityX = g_mouseState.wheel_delta_x;
pos->scrollVelocityY = g_mouseState.wheel_delta_y;
rwlockReadUnlock(&g_hidLock);
}
u32 hidMouseMultiRead(MousePosition *entries, u32 num_entries) {
HidMouseState temp_states[17];
if (!entries || !num_entries) return 0;
if (num_entries > 17) num_entries = 17;
memset(entries, 0, sizeof(MousePosition) * num_entries);
size_t total = hidGetMouseStates(temp_states, num_entries);
for (size_t i=0; i<total; i++) {
entries[i].x = temp_states[i].x;
entries[i].y = temp_states[i].y;
entries[i].velocityX = temp_states[i].delta_x;
entries[i].velocityY = temp_states[i].delta_y;
entries[i].scrollVelocityX = temp_states[i].wheel_delta_x;
entries[i].scrollVelocityY = temp_states[i].wheel_delta_y;
}
return total;
}
bool hidKeyboardModifierHeld(HidKeyboardModifier modifier) {
rwlockReadLock(&g_hidLock);
bool tmp = g_keyboardModHeld & modifier;
rwlockReadUnlock(&g_hidLock);
return tmp;
}
bool hidKeyboardModifierDown(HidKeyboardModifier modifier) {
rwlockReadLock(&g_hidLock);
bool tmp = g_keyboardModDown & modifier;
rwlockReadUnlock(&g_hidLock);
return tmp;
}
bool hidKeyboardModifierUp(HidKeyboardModifier modifier) {
rwlockReadLock(&g_hidLock);
bool tmp = g_keyboardModUp & modifier;
rwlockReadUnlock(&g_hidLock);
return tmp;
}
bool hidKeyboardHeld(HidKeyboardScancode key) {
rwlockReadLock(&g_hidLock);
bool tmp = g_keyboardHeld[key / 64] & (UINT64_C(1) << (key % 64));
rwlockReadUnlock(&g_hidLock);
return tmp;
}
bool hidKeyboardDown(HidKeyboardScancode key) {
rwlockReadLock(&g_hidLock);
bool tmp = g_keyboardDown[key / 64] & (UINT64_C(1) << (key % 64));
rwlockReadUnlock(&g_hidLock);
return tmp;
}
bool hidKeyboardUp(HidKeyboardScancode key) {
rwlockReadLock(&g_hidLock);
bool tmp = g_keyboardUp[key / 64] & (UINT64_C(1) << (key % 64));
rwlockReadUnlock(&g_hidLock);
return tmp;
}
u32 hidTouchCount(void) {
return g_touchScreenState.count;
}
void hidTouchRead(touchPosition *pos, u32 point_id) {
if (pos) {
if (point_id >= g_touchScreenState.count) {
memset(pos, 0, sizeof(touchPosition));
return;
}
pos->id = g_touchScreenState.touches[point_id].finger_id;
pos->px = g_touchScreenState.touches[point_id].x;
pos->py = g_touchScreenState.touches[point_id].y;
pos->dx = g_touchScreenState.touches[point_id].diameter_x;
pos->dy = g_touchScreenState.touches[point_id].diameter_y;
pos->angle = g_touchScreenState.touches[point_id].rotation_angle;
}
}
void hidJoystickRead(JoystickPosition *pos, HidControllerID id, HidControllerJoystick stick) {
if (id == CONTROLLER_P1_AUTO) return hidJoystickRead(pos, g_controllerP1AutoID, stick);
if (pos) {
if (id < 0 || id > 9 || stick >= JOYSTICK_NUM_STICKS) {
memset(pos, 0, sizeof(*pos));
return;
}
rwlockReadLock(&g_hidLock);
memcpy(pos, stick==JOYSTICK_LEFT ? &g_controllerEntries[id].analog_stick_l : &g_controllerEntries[id].analog_stick_r, sizeof(HidAnalogStickState));
rwlockReadUnlock(&g_hidLock);
}
}
u32 hidSixAxisSensorValuesRead(SixAxisSensorValues *values, HidControllerID id, u32 num_entries) {
HidSixAxisSensorState temp_states[17];
if (!values || !num_entries) return 0;
if (id == CONTROLLER_P1_AUTO) id = g_controllerP1AutoID;
memset(values, 0, sizeof(SixAxisSensorValues) * num_entries);
if (id < 0 || id > 9) return 0;
if (num_entries > 17) num_entries = 17;
HidNpadIdType npad_id = hidControllerIDToNpadIdType(id);
u32 style_set = hidGetNpadStyleSet(npad_id);
size_t num_handles = 1;
size_t handle_idx = 0;
style_set &= -style_set; // retrieve least significant set bit
if (style_set == HidNpadStyleTag_NpadJoyDual) {
u32 device_type = hidGetNpadDeviceType(npad_id);
num_handles = 2;
if (device_type & HidDeviceTypeBits_JoyLeft)
handle_idx = 0;
else if (device_type & HidDeviceTypeBits_JoyRight)
handle_idx = 1;
else
return 0;
}
HidSixAxisSensorHandle handles[2];
Result rc = hidGetSixAxisSensorHandles(handles, num_handles, npad_id, style_set);
if (R_FAILED(rc))
return 0;
size_t total = hidGetSixAxisSensorStates(handles[handle_idx], temp_states, num_entries);
for (size_t i=0; i<total; i++) {
values[i].accelerometer = temp_states[i].acceleration;
values[i].gyroscope = temp_states[i].angular_velocity;
values[i].unk = temp_states[i].angle;
memcpy(values[i].orientation, &temp_states[i].direction, sizeof(temp_states[i].direction));
}
return total;
}
bool hidGetHandheldMode(void) {
return g_controllerP1AutoID == CONTROLLER_HANDHELD;
}
static Result _hidSetDualModeAll(void) {
Result rc = 0;
int i;
for (i=0; i<8; i++) {
rc = hidSetNpadJoyAssignmentModeDual(i);
if (R_FAILED(rc)) break;
}
return rc;
}
static Result _hidCmdNoIO(Service* srv, u32 cmd_id) { static Result _hidCmdNoIO(Service* srv, u32 cmd_id) {
return serviceDispatch(srv, cmd_id); return serviceDispatch(srv, cmd_id);
} }
@ -1211,7 +775,6 @@ Result hidSendKeyboardLockKeyEvent(u32 events) {
} }
Result hidGetSixAxisSensorHandles(HidSixAxisSensorHandle *handles, s32 total_handles, HidNpadIdType id, HidNpadStyleTag style) { Result hidGetSixAxisSensorHandles(HidSixAxisSensorHandle *handles, s32 total_handles, HidNpadIdType id, HidNpadStyleTag style) {
if (id == (HidNpadIdType)CONTROLLER_HANDHELD) id = HidNpadIdType_Handheld; // Correct enum value for old users passing HidControllerID instead (avoids a hid sysmodule fatal later on)
return _hidGetSixAxisSensorHandles(handles, total_handles, id, style); return _hidGetSixAxisSensorHandles(handles, total_handles, id, style);
} }
@ -1498,8 +1061,6 @@ Result hidInitializeVibrationDevices(HidVibrationDeviceHandle *handles, s32 tota
Result rc=0; Result rc=0;
s32 i; s32 i;
if (id == (HidNpadIdType)CONTROLLER_HANDHELD) id = HidNpadIdType_Handheld; // Correct enum value for old users passing HidControllerID instead (avoids a hid sysmodule fatal later on)
rc = _hidGetVibrationDeviceHandles(handles, total_handles, id, style); rc = _hidGetVibrationDeviceHandles(handles, total_handles, id, style);
if (R_FAILED(rc)) return rc; if (R_FAILED(rc)) return rc;