mirror of
https://github.com/switchbrew/libnx.git
synced 2025-06-21 12:32:40 +02:00
hid: Introduce HidNpadIdType, see details:
- Replaced most usages of HidControllerID with HidNpadIdType - HidControllerID still exists for now, and the following functions keep accepting it for compatibility with most homebrew: - hidIsControllerConnected - hidKeysHeld/Down/Up - hidJoystickRead - hidSixAxisSensorValuesRead - hidControllerIDTo/FromOfficial renamed to ToNpadIdType/FromNpadIdType - Updated some comments that were left untouched during previous hid refactoring - Partial internal refactor of hidGetNpadStates*
This commit is contained in:
parent
40e5b08f70
commit
0640c9da76
@ -79,7 +79,7 @@ typedef struct {
|
||||
typedef struct {
|
||||
s8 player_count; ///< playerCount.
|
||||
u8 pad[3]; ///< Padding.
|
||||
u32 selected_id; ///< \ref HidControllerID, selectedId.
|
||||
u32 selected_id; ///< \ref HidNpadIdType, selectedId.
|
||||
} HidLaControllerSupportResultInfo;
|
||||
|
||||
/// Struct for the applet output storage.
|
||||
@ -111,7 +111,7 @@ void hidLaCreateControllerFirmwareUpdateArg(HidLaControllerFirmwareUpdateArg *ar
|
||||
* @param[in] str Input ExplainText UTF-8 string, max length is 0x80 excluding NUL-terminator.
|
||||
+ @oaram[in] id Player controller, must be <8.
|
||||
*/
|
||||
Result hidLaSetExplainText(HidLaControllerSupportArg *arg, const char *str, HidControllerID id);
|
||||
Result hidLaSetExplainText(HidLaControllerSupportArg *arg, const char *str, HidNpadIdType id);
|
||||
|
||||
/**
|
||||
* @brief Launches the applet for ControllerSupport.
|
||||
|
@ -74,9 +74,9 @@ typedef struct {
|
||||
/**
|
||||
* @brief Creates a \ref RingCon object, and handles the various initialization for it.
|
||||
* @param c \ref RingCon
|
||||
* @param[in] id \ref HidControllerID. A Ring-Con must be attached to this controller.
|
||||
* @param[in] id \ref HidNpadIdType. A Ring-Con must be attached to this controller.
|
||||
*/
|
||||
Result ringconCreate(RingCon *c, HidControllerID id);
|
||||
Result ringconCreate(RingCon *c, HidNpadIdType id);
|
||||
|
||||
/**
|
||||
* @brief Close a \ref RingCon.
|
||||
|
@ -214,6 +214,20 @@ typedef enum {
|
||||
KBD_MEDIA_CALC = 0xfb
|
||||
} HidKeyboardScancode;
|
||||
|
||||
/// HID controller IDs
|
||||
typedef enum {
|
||||
HidNpadIdType_No1 = 0, ///< Player 1 controller
|
||||
HidNpadIdType_No2 = 1, ///< Player 2 controller
|
||||
HidNpadIdType_No3 = 2, ///< Player 3 controller
|
||||
HidNpadIdType_No4 = 3, ///< Player 4 controller
|
||||
HidNpadIdType_No5 = 4, ///< Player 5 controller
|
||||
HidNpadIdType_No6 = 5, ///< Player 6 controller
|
||||
HidNpadIdType_No7 = 6, ///< Player 7 controller
|
||||
HidNpadIdType_No8 = 7, ///< Player 8 controller
|
||||
HidNpadIdType_Other = 0x10, ///< Other controller
|
||||
HidNpadIdType_Handheld = 0x20, ///< Handheld mode controls
|
||||
} HidNpadIdType;
|
||||
|
||||
/// HID controller styles
|
||||
typedef enum {
|
||||
HidNpadStyleTag_NpadFullKey = BIT(0), ///< Pro Controller
|
||||
@ -808,15 +822,15 @@ typedef struct HidVibrationValue {
|
||||
float freq_high; ///< High Band frequency in Hz.
|
||||
} HidVibrationValue;
|
||||
|
||||
static inline u32 hidControllerIDToOfficial(HidControllerID id) {
|
||||
if (id < CONTROLLER_HANDHELD) return id;
|
||||
if (id == CONTROLLER_HANDHELD) return 0x20;
|
||||
return 0x10;//For CONTROLLER_UNKNOWN and invalid values return this.
|
||||
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 hidControllerIDFromOfficial(u32 id) {
|
||||
if (id < 8) return (HidControllerID)id;
|
||||
if (id == 0x20) return CONTROLLER_HANDHELD;
|
||||
static inline HidControllerID hidControllerIDFromNpadIdType(HidNpadIdType id) {
|
||||
if (id <= HidNpadIdType_No8) return (HidControllerID)id;
|
||||
if (id == HidNpadIdType_Handheld) return CONTROLLER_HANDHELD;
|
||||
return CONTROLLER_UNKNOWN;
|
||||
}
|
||||
|
||||
@ -837,52 +851,52 @@ void* hidGetSharedmemAddr(void);
|
||||
void hidScanInput(void);
|
||||
|
||||
/// Gets a bitfield of \ref HidNpadStyleTag for the specified controller.
|
||||
u32 hidGetNpadStyleSet(u32 id);
|
||||
u32 hidGetNpadStyleSet(HidNpadIdType id);
|
||||
|
||||
/// Gets the \ref HidNpadJoyAssignmentMode for the specified controller.
|
||||
HidNpadJoyAssignmentMode hidGetNpadJoyAssignment(u32 id);
|
||||
HidNpadJoyAssignmentMode hidGetNpadJoyAssignment(HidNpadIdType id);
|
||||
|
||||
/// Gets the main \ref HidNpadControllerColor for the specified controller.
|
||||
Result hidGetNpadControllerColorSingle(u32 id, HidNpadControllerColor *color);
|
||||
Result hidGetNpadControllerColorSingle(HidNpadIdType id, HidNpadControllerColor *color);
|
||||
|
||||
/// Gets the left/right \ref HidNpadControllerColor for the specified controller (Joy-Con pair in dual mode).
|
||||
Result hidGetNpadControllerColorSplit(u32 id, HidNpadControllerColor *color_left, HidNpadControllerColor *color_right);
|
||||
Result hidGetNpadControllerColorSplit(HidNpadIdType id, HidNpadControllerColor *color_left, HidNpadControllerColor *color_right);
|
||||
|
||||
/// Gets the \ref HidDeviceTypeBits for the specified controller.
|
||||
u32 hidGetNpadDeviceType(u32 id);
|
||||
u32 hidGetNpadDeviceType(HidNpadIdType id);
|
||||
|
||||
/// Gets the \ref HidNpadSystemProperties for the specified controller.
|
||||
void hidGetNpadSystemProperties(u32 id, HidNpadSystemProperties *out);
|
||||
void hidGetNpadSystemProperties(HidNpadIdType id, HidNpadSystemProperties *out);
|
||||
|
||||
/// Gets the \ref HidNpadSystemButtonProperties for the specified controller.
|
||||
void hidGetNpadSystemButtonProperties(u32 id, HidNpadSystemButtonProperties *out);
|
||||
void hidGetNpadSystemButtonProperties(HidNpadIdType id, HidNpadSystemButtonProperties *out);
|
||||
|
||||
/// Gets the main \ref HidPowerInfo for the specified controller.
|
||||
void hidGetNpadPowerInfoSingle(u32 id, HidPowerInfo *info);
|
||||
void hidGetNpadPowerInfoSingle(HidNpadIdType id, HidPowerInfo *info);
|
||||
|
||||
/// Gets the left/right \ref HidPowerInfo for the specified controller (Joy-Con pair in dual mode).
|
||||
void hidGetNpadPowerInfoSplit(u32 id, HidPowerInfo *info_left, HidPowerInfo *info_right);
|
||||
void hidGetNpadPowerInfoSplit(HidNpadIdType id, HidPowerInfo *info_left, HidPowerInfo *info_right);
|
||||
|
||||
/// Gets a bitfield of AppletFooterUiAttributes for the specified Npad.
|
||||
/// Only available on [9.0.0+].
|
||||
u32 hidGetAppletFooterUiAttributesSet(u32 id);
|
||||
u32 hidGetAppletFooterUiAttributesSet(HidNpadIdType id);
|
||||
|
||||
/// Gets AppletFooterUiTypes for the specified Npad.
|
||||
/// Only available on [9.0.0+].
|
||||
u8 hidGetAppletFooterUiTypes(u32 id);
|
||||
u8 hidGetAppletFooterUiTypes(HidNpadIdType id);
|
||||
|
||||
void hidGetNpadStatesFullKey(u32 id, HidNpadFullKeyState *states, size_t count, size_t *total_out);
|
||||
void hidGetNpadStatesHandheld(u32 id, HidNpadHandheldState *states, size_t count, size_t *total_out);
|
||||
void hidGetNpadStatesJoyDual(u32 id, HidNpadJoyDualState *states, size_t count, size_t *total_out);
|
||||
void hidGetNpadStatesJoyLeft(u32 id, HidNpadJoyLeftState *states, size_t count, size_t *total_out);
|
||||
void hidGetNpadStatesJoyRight(u32 id, HidNpadJoyRightState *states, size_t count, size_t *total_out);
|
||||
void hidGetNpadStatesGc(u32 id, HidNpadGcState *states, size_t count, size_t *total_out);
|
||||
void hidGetNpadStatesPalma(u32 id, HidNpadPalmaState *states, size_t count, size_t *total_out);
|
||||
void hidGetNpadStatesLark(u32 id, HidNpadLarkState *states, size_t count, size_t *total_out);
|
||||
void hidGetNpadStatesHandheldLark(u32 id, HidNpadHandheldLarkState *states, size_t count, size_t *total_out);
|
||||
void hidGetNpadStatesLucia(u32 id, HidNpadLuciaState *states, size_t count, size_t *total_out);
|
||||
void hidGetNpadStatesSystemExt(u32 id, HidNpadSystemExtState *states, size_t count, size_t *total_out);
|
||||
void hidGetNpadStatesSystem(u32 id, HidNpadSystemState *states, size_t count, size_t *total_out);
|
||||
void hidGetNpadStatesFullKey(HidNpadIdType id, HidNpadFullKeyState *states, size_t count, size_t *total_out);
|
||||
void hidGetNpadStatesHandheld(HidNpadIdType id, HidNpadHandheldState *states, size_t count, size_t *total_out);
|
||||
void hidGetNpadStatesJoyDual(HidNpadIdType id, HidNpadJoyDualState *states, size_t count, size_t *total_out);
|
||||
void hidGetNpadStatesJoyLeft(HidNpadIdType id, HidNpadJoyLeftState *states, size_t count, size_t *total_out);
|
||||
void hidGetNpadStatesJoyRight(HidNpadIdType id, HidNpadJoyRightState *states, size_t count, size_t *total_out);
|
||||
void hidGetNpadStatesGc(HidNpadIdType id, HidNpadGcState *states, size_t count, size_t *total_out);
|
||||
void hidGetNpadStatesPalma(HidNpadIdType id, HidNpadPalmaState *states, size_t count, size_t *total_out);
|
||||
void hidGetNpadStatesLark(HidNpadIdType id, HidNpadLarkState *states, size_t count, size_t *total_out);
|
||||
void hidGetNpadStatesHandheldLark(HidNpadIdType id, HidNpadHandheldLarkState *states, size_t count, size_t *total_out);
|
||||
void hidGetNpadStatesLucia(HidNpadIdType id, HidNpadLuciaState *states, size_t count, size_t *total_out);
|
||||
void hidGetNpadStatesSystemExt(HidNpadIdType id, HidNpadSystemExtState *states, size_t count, size_t *total_out);
|
||||
void hidGetNpadStatesSystem(HidNpadIdType id, HidNpadSystemState *states, size_t count, size_t *total_out);
|
||||
|
||||
bool hidIsControllerConnected(HidControllerID id);
|
||||
|
||||
@ -938,14 +952,14 @@ Result hidSetSupportedNpadStyleSet(u32 style_set);
|
||||
/// Gets which controller styles are supported, bitfield of \ref HidNpadStyleTag.
|
||||
Result hidGetSupportedNpadStyleSet(u32 *style_set);
|
||||
|
||||
/// This is automatically called with CONTROLLER_PLAYER_{1-8} and CONTROLLER_HANDHELD in \ref hidInitialize.
|
||||
/// count must be <=10. Each entry in buf must be CONTROLLER_PLAYER_{1-8} or CONTROLLER_HANDHELD.
|
||||
Result hidSetSupportedNpadIdType(const HidControllerID *buf, size_t count);
|
||||
/// This is automatically called with HidNpadIdType_No{1-8} and HidNpadIdType_Handheld in \ref hidInitialize.
|
||||
/// count must be <=10. Each entry in buf must be HidNpadIdType_No{1-8} or HidNpadIdType_Handheld.
|
||||
Result hidSetSupportedNpadIdType(const HidNpadIdType *buf, size_t count);
|
||||
|
||||
/// Gets an event with the specified autoclear for the input controller.
|
||||
/// The user *must* close the event when finished with it / before the app exits.
|
||||
/// This is signaled when the \ref hidGetControllerType output is updated for the controller.
|
||||
Result hidAcquireNpadStyleSetUpdateEventHandle(HidControllerID id, Event* out_event, bool autoclear);
|
||||
/// This is signaled when the \ref hidGetNpadStyleSet output is updated for the controller.
|
||||
Result hidAcquireNpadStyleSetUpdateEventHandle(HidNpadIdType id, Event* out_event, bool autoclear);
|
||||
|
||||
/// Sets the hold-type, see \ref HidJoyHoldType.
|
||||
Result hidSetNpadJoyHoldType(HidJoyHoldType type);
|
||||
@ -953,23 +967,23 @@ Result hidSetNpadJoyHoldType(HidJoyHoldType type);
|
||||
/// Gets the hold-type, see \ref HidJoyHoldType.
|
||||
Result hidGetNpadJoyHoldType(HidJoyHoldType *type);
|
||||
|
||||
/// Use this if you want to use a single joy-con as a dedicated CONTROLLER_PLAYER_*.
|
||||
/// When used, both joy-cons in a pair should be used with this (CONTROLLER_PLAYER_1 and CONTROLLER_PLAYER_2 for example).
|
||||
/// id must be CONTROLLER_PLAYER_*.
|
||||
Result hidSetNpadJoyAssignmentModeSingleByDefault(HidControllerID id);
|
||||
/// Use this if you want to use a single joy-con as a dedicated HidNpadIdType_No*.
|
||||
/// When used, both joy-cons in a pair should be used with this (HidNpadIdType_No1 and HidNpadIdType_No2 for example).
|
||||
/// id must be HidNpadIdType_No*.
|
||||
Result hidSetNpadJoyAssignmentModeSingleByDefault(HidNpadIdType id);
|
||||
|
||||
/// Use this if you want to use a pair of joy-cons as a single CONTROLLER_PLAYER_*. Only necessary if you want to use this mode in your application after \ref hidSetNpadJoyAssignmentModeSingleByDefault was used with this pair of joy-cons.
|
||||
/// Use this if you want to use a pair of joy-cons as a single HidNpadIdType_No*. Only necessary if you want to use this mode in your application after \ref hidSetNpadJoyAssignmentModeSingleByDefault was used with this pair of joy-cons.
|
||||
/// Used automatically during app startup/exit for all controllers.
|
||||
/// When used, both joy-cons in a pair should be used with this (CONTROLLER_PLAYER_1 and CONTROLLER_PLAYER_2 for example).
|
||||
/// id must be CONTROLLER_PLAYER_*.
|
||||
Result hidSetNpadJoyAssignmentModeDual(HidControllerID id);
|
||||
/// When used, both joy-cons in a pair should be used with this (HidNpadIdType_No1 and HidNpadIdType_No2 for example).
|
||||
/// id must be HidNpadIdType_No*.
|
||||
Result hidSetNpadJoyAssignmentModeDual(HidNpadIdType id);
|
||||
|
||||
/// Merge two single joy-cons into a dual-mode controller. Use this after \ref hidSetNpadJoyAssignmentModeDual, when \ref hidSetNpadJoyAssignmentModeSingleByDefault was previously used (this includes using this manually at application exit).
|
||||
/// To be successful, id0/id1 must correspond to controller types TYPE_JOYCON_LEFT/TYPE_JOYCON_RIGHT, or TYPE_JOYCON_RIGHT/TYPE_JOYCON_LEFT.
|
||||
/// To be successful, id0/id1 must correspond to controllers supporting styles HidNpadStyleTag_NpadJoyLeft/Right, or HidNpadStyleTag_NpadJoyRight/Left.
|
||||
/// If successful, the id of the resulting dual controller is set to id0.
|
||||
Result hidMergeSingleJoyAsDualJoy(HidControllerID id0, HidControllerID id1);
|
||||
Result hidMergeSingleJoyAsDualJoy(HidNpadIdType id0, HidNpadIdType id1);
|
||||
|
||||
Result hidInitializeVibrationDevices(u32 *VibrationDeviceHandles, s32 total_handles, HidControllerID id, HidNpadStyleTag style);
|
||||
Result hidInitializeVibrationDevices(u32 *VibrationDeviceHandles, s32 total_handles, HidNpadIdType id, HidNpadStyleTag style);
|
||||
|
||||
/// Gets HidVibrationDeviceInfo for the specified VibrationDeviceHandle.
|
||||
Result hidGetVibrationDeviceInfo(const u32 *VibrationDeviceHandle, HidVibrationDeviceInfo *VibrationDeviceInfo);
|
||||
@ -993,7 +1007,7 @@ Result hidSendVibrationValues(const u32 *VibrationDeviceHandles, HidVibrationVal
|
||||
Result hidIsVibrationDeviceMounted(const u32 *VibrationDeviceHandle, bool *flag);
|
||||
|
||||
/// Gets SixAxisSensorHandles. total_handles==2 can only be used with ::HidNpadStyleTag_NpadJoyDual.
|
||||
Result hidGetSixAxisSensorHandles(u32 *SixAxisSensorHandles, s32 total_handles, HidControllerID id, HidNpadStyleTag style);
|
||||
Result hidGetSixAxisSensorHandles(u32 *SixAxisSensorHandles, s32 total_handles, HidNpadIdType id, HidNpadStyleTag style);
|
||||
|
||||
/// Starts the SixAxisSensor for the specified handle.
|
||||
Result hidStartSixAxisSensor(u32 SixAxisSensorHandle);
|
||||
@ -1036,5 +1050,5 @@ Result hidGetGyroBias(UtilFloat3 *out);
|
||||
|
||||
/// Gets the \ref HidNpadInterfaceType for the specified controller.
|
||||
/// Only available on [4.0.0+].
|
||||
Result hidGetNpadInterfaceType(HidControllerID id, u8 *out);
|
||||
Result hidGetNpadInterfaceType(HidNpadIdType id, u8 *out);
|
||||
|
||||
|
@ -154,10 +154,10 @@ void* hidbusGetSharedmemAddr(void);
|
||||
* @brief GetBusHandle
|
||||
* @param[out] handle \ref HidbusBusHandle
|
||||
* @param[out] flag Output flag indicating whether the handle is valid.
|
||||
* @param[in] id \ref HidControllerID
|
||||
* @param[in] id \ref HidNpadIdType
|
||||
* @param[in] bus_type \ref HidbusBusType
|
||||
*/
|
||||
Result hidbusGetBusHandle(HidbusBusHandle *handle, bool *flag, HidControllerID id, HidbusBusType bus_type);
|
||||
Result hidbusGetBusHandle(HidbusBusHandle *handle, bool *flag, HidNpadIdType id, HidbusBusType bus_type);
|
||||
|
||||
/**
|
||||
* @brief Initialize
|
||||
|
@ -170,7 +170,7 @@ Result hidsysGetSupportedNpadStyleSetOfCallerApplet(u32 *out);
|
||||
* @param Max number of entries for the UniquePadIds array.
|
||||
* @param total_entries Total output array entries. Optional, can be NULL.
|
||||
*/
|
||||
Result hidsysGetUniquePadsFromNpad(HidControllerID id, u64 *UniquePadIds, s32 count, s32 *total_entries);
|
||||
Result hidsysGetUniquePadsFromNpad(HidNpadIdType id, u64 *UniquePadIds, s32 count, s32 *total_entries);
|
||||
|
||||
/**
|
||||
* @brief EnableAppletToGetInput
|
||||
|
@ -391,7 +391,7 @@ Service* irsGetServiceSession(void);
|
||||
void* irsGetSharedmemAddr(void);
|
||||
|
||||
/// Gets the \ref IrsIrCameraHandle for the specified controller.
|
||||
Result irsGetIrCameraHandle(IrsIrCameraHandle *handle, HidControllerID id);
|
||||
Result irsGetIrCameraHandle(IrsIrCameraHandle *handle, HidNpadIdType id);
|
||||
|
||||
/// GetIrCameraStatus
|
||||
Result irsGetIrCameraStatus(IrsIrCameraHandle handle, IrsIrCameraStatus *out);
|
||||
|
@ -60,7 +60,7 @@ static Result _hidLaShowControllerSupportCore(HidLaControllerSupportResultInfo *
|
||||
if (R_SUCCEEDED(rc)) {
|
||||
if (result_info) {
|
||||
*result_info = res.info;
|
||||
result_info->selected_id = hidControllerIDFromOfficial(result_info->selected_id);
|
||||
result_info->selected_id = result_info->selected_id;
|
||||
}
|
||||
|
||||
if (res.res != 0) {
|
||||
@ -119,7 +119,7 @@ void hidLaCreateControllerFirmwareUpdateArg(HidLaControllerFirmwareUpdateArg *ar
|
||||
memset(arg, 0, sizeof(*arg));
|
||||
}
|
||||
|
||||
Result hidLaSetExplainText(HidLaControllerSupportArg *arg, const char *str, HidControllerID id) {
|
||||
Result hidLaSetExplainText(HidLaControllerSupportArg *arg, const char *str, HidNpadIdType id) {
|
||||
if (id >= 8)
|
||||
return MAKERESULT(Module_Libnx, LibnxError_BadInput);
|
||||
|
||||
|
@ -52,11 +52,11 @@ static void _ringconSetErrorFlag(RingCon *c, RingConErrorFlag flag, bool value)
|
||||
c->error_flags &= ~BIT(flag);
|
||||
}
|
||||
|
||||
Result ringconCreate(RingCon *c, HidControllerID id) {
|
||||
Result ringconCreate(RingCon *c, HidNpadIdType id) {
|
||||
Result rc=0;
|
||||
bool handleflag=0;
|
||||
HidbusBusType bus_type;
|
||||
u32 style_set = hidGetNpadStyleSet(hidControllerIDToOfficial(id));
|
||||
u32 style_set = hidGetNpadStyleSet(id);
|
||||
u32 cmd = 0x00020101;
|
||||
|
||||
memset(c, 0, sizeof(*c));
|
||||
|
@ -50,16 +50,17 @@ static Result _hidSetDualModeAll(void);
|
||||
NX_GENERATE_SERVICE_GUARD(hid);
|
||||
|
||||
Result _hidInitialize(void) {
|
||||
HidControllerID idbuf[9] = {
|
||||
CONTROLLER_PLAYER_1,
|
||||
CONTROLLER_PLAYER_2,
|
||||
CONTROLLER_PLAYER_3,
|
||||
CONTROLLER_PLAYER_4,
|
||||
CONTROLLER_PLAYER_5,
|
||||
CONTROLLER_PLAYER_6,
|
||||
CONTROLLER_PLAYER_7,
|
||||
CONTROLLER_PLAYER_8,
|
||||
CONTROLLER_HANDHELD};
|
||||
static const HidNpadIdType idbuf[9] = {
|
||||
HidNpadIdType_No1,
|
||||
HidNpadIdType_No2,
|
||||
HidNpadIdType_No3,
|
||||
HidNpadIdType_No4,
|
||||
HidNpadIdType_No5,
|
||||
HidNpadIdType_No6,
|
||||
HidNpadIdType_No7,
|
||||
HidNpadIdType_No8,
|
||||
HidNpadIdType_Handheld,
|
||||
};
|
||||
|
||||
Result rc=0;
|
||||
Handle sharedmem_handle;
|
||||
@ -86,7 +87,7 @@ Result _hidInitialize(void) {
|
||||
rc = hidSetSupportedNpadStyleSet(HidNpadStyleTag_NpadFullKey | HidNpadStyleTag_NpadHandheld | HidNpadStyleTag_NpadJoyDual | HidNpadStyleTag_NpadJoyLeft | HidNpadStyleTag_NpadJoyRight | HidNpadStyleTag_NpadSystemExt | HidNpadStyleTag_NpadSystem);
|
||||
|
||||
if (R_SUCCEEDED(rc))
|
||||
rc = hidSetSupportedNpadIdType(idbuf, 9);
|
||||
rc = hidSetSupportedNpadIdType(idbuf, sizeof(idbuf)/sizeof(*idbuf));
|
||||
|
||||
if (R_SUCCEEDED(rc))
|
||||
rc = _hidSetDualModeAll();
|
||||
@ -209,7 +210,7 @@ void hidScanInput(void) {
|
||||
}
|
||||
|
||||
for (u32 i = 0; i < 10; i++) {
|
||||
u32 id = hidControllerIDToOfficial(i);
|
||||
HidNpadIdType id = hidControllerIDToNpadIdType(i);
|
||||
u32 style_set = hidGetNpadStyleSet(id);
|
||||
size_t total_out=0;
|
||||
|
||||
@ -308,142 +309,112 @@ void hidScanInput(void) {
|
||||
rwlockWriteUnlock(&g_hidLock);
|
||||
}
|
||||
|
||||
static Result _hidVerifyNpadIdType(u32 id) {
|
||||
if (id >= 0x8 && (id!=0x10 && id!=0x20))
|
||||
return MAKERESULT(Module_Libnx, LibnxError_BadInput);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static HidNpad *_hidNpadSharedmemGetInternalState(u32 id) {
|
||||
if (id >= 0x8) id = id==0x10 ? 0x9 : 0x8;
|
||||
|
||||
static Result _hidGetNpadInternalState(HidNpadIdType id, HidNpad **npad) {
|
||||
HidSharedMemory *sharedmem = (HidSharedMemory*)hidGetSharedmemAddr();
|
||||
if (sharedmem == NULL) return NULL;
|
||||
return &sharedmem->npad[id];
|
||||
}
|
||||
if (sharedmem == NULL)
|
||||
return MAKERESULT(Module_Libnx, LibnxError_NotInitialized);
|
||||
|
||||
u32 hidGetNpadStyleSet(u32 id) {
|
||||
Result rc = _hidVerifyNpadIdType(id);
|
||||
u32 tmp=0;
|
||||
|
||||
if (R_SUCCEEDED(rc)) {
|
||||
HidNpad *npad = _hidNpadSharedmemGetInternalState(id);
|
||||
if (npad == NULL)
|
||||
rc = MAKERESULT(Module_Libnx, LibnxError_NotInitialized);
|
||||
else
|
||||
tmp = atomic_load_explicit(&npad->header.style_set, memory_order_acquire);
|
||||
if (id <= HidNpadIdType_No8) {
|
||||
*npad = &sharedmem->npad[id];
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (R_FAILED(rc)) diagAbortWithResult(rc);
|
||||
return tmp;
|
||||
else if (id == HidNpadIdType_Handheld) {
|
||||
*npad = &sharedmem->npad[8];
|
||||
return 0;
|
||||
}
|
||||
else if (id == HidNpadIdType_Other) {
|
||||
*npad = &sharedmem->npad[9];
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
return MAKERESULT(Module_Libnx, LibnxError_BadInput);
|
||||
}
|
||||
|
||||
HidNpadJoyAssignmentMode hidGetNpadJoyAssignment(u32 id) {
|
||||
Result rc = _hidVerifyNpadIdType(id);
|
||||
u32 hidGetNpadStyleSet(HidNpadIdType id) {
|
||||
HidNpad *npad = NULL;
|
||||
Result rc = _hidGetNpadInternalState(id, &npad);
|
||||
if (R_FAILED(rc))
|
||||
diagAbortWithResult(rc);
|
||||
|
||||
return atomic_load_explicit(&npad->header.style_set, memory_order_acquire);
|
||||
}
|
||||
|
||||
HidNpadJoyAssignmentMode hidGetNpadJoyAssignment(HidNpadIdType id) {
|
||||
HidNpad *npad = NULL;
|
||||
Result rc = _hidGetNpadInternalState(id, &npad);
|
||||
HidNpadJoyAssignmentMode tmp=0;
|
||||
|
||||
if (R_SUCCEEDED(rc)) {
|
||||
HidNpad *npad = _hidNpadSharedmemGetInternalState(id);
|
||||
if (npad == NULL)
|
||||
rc = MAKERESULT(Module_Libnx, LibnxError_NotInitialized);
|
||||
else {
|
||||
tmp = atomic_load_explicit(&npad->header.npad_joy_assignment_mode, memory_order_acquire);
|
||||
if (tmp != HidNpadJoyAssignmentMode_Dual && tmp != HidNpadJoyAssignmentMode_Single)
|
||||
rc = MAKERESULT(Module_Libnx, LibnxError_ShouldNotHappen);
|
||||
}
|
||||
tmp = atomic_load_explicit(&npad->header.npad_joy_assignment_mode, memory_order_acquire);
|
||||
if (tmp != HidNpadJoyAssignmentMode_Dual && tmp != HidNpadJoyAssignmentMode_Single)
|
||||
rc = MAKERESULT(Module_Libnx, LibnxError_ShouldNotHappen);
|
||||
}
|
||||
|
||||
if (R_FAILED(rc)) diagAbortWithResult(rc);
|
||||
return tmp;
|
||||
}
|
||||
|
||||
Result hidGetNpadControllerColorSingle(u32 id, HidNpadControllerColor *color) {
|
||||
Result rc = _hidVerifyNpadIdType(id);
|
||||
Result hidGetNpadControllerColorSingle(HidNpadIdType id, HidNpadControllerColor *color) {
|
||||
HidNpad *npad = NULL;
|
||||
Result rc = _hidGetNpadInternalState(id, &npad);
|
||||
|
||||
if (R_SUCCEEDED(rc)) {
|
||||
HidNpad *npad = _hidNpadSharedmemGetInternalState(id);
|
||||
if (npad == NULL)
|
||||
rc = MAKERESULT(Module_Libnx, LibnxError_NotInitialized);
|
||||
else {
|
||||
u32 tmp = npad->header.single_colors_descriptor;
|
||||
if (tmp==2) rc = MAKERESULT(202, 604);
|
||||
else if (tmp==1) rc = MAKERESULT(202, 603);
|
||||
else if (tmp!=0) diagAbortWithResult(MAKERESULT(Module_Libnx, LibnxError_ShouldNotHappen));
|
||||
u32 tmp = npad->header.single_colors_descriptor;
|
||||
if (tmp==2) rc = MAKERESULT(202, 604);
|
||||
else if (tmp==1) rc = MAKERESULT(202, 603);
|
||||
else if (tmp!=0) diagAbortWithResult(MAKERESULT(Module_Libnx, LibnxError_ShouldNotHappen));
|
||||
|
||||
if (R_SUCCEEDED(rc))
|
||||
*color = npad->header.single_colors;
|
||||
if (R_SUCCEEDED(rc))
|
||||
*color = npad->header.single_colors;
|
||||
}
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
Result hidGetNpadControllerColorSplit(HidNpadIdType id, HidNpadControllerColor *color_left, HidNpadControllerColor *color_right) {
|
||||
HidNpad *npad = NULL;
|
||||
Result rc = _hidGetNpadInternalState(id, &npad);
|
||||
|
||||
if (R_SUCCEEDED(rc)) {
|
||||
u32 tmp = npad->header.split_colors_descriptor;
|
||||
if (tmp==2) rc = MAKERESULT(202, 604);
|
||||
else if (tmp==1) rc = MAKERESULT(202, 603);
|
||||
else if (tmp!=0) diagAbortWithResult(MAKERESULT(Module_Libnx, LibnxError_ShouldNotHappen));
|
||||
|
||||
if (R_SUCCEEDED(rc)) {
|
||||
*color_left = npad->header.left_colors;
|
||||
*color_right = npad->header.right_colors;
|
||||
}
|
||||
}
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
Result hidGetNpadControllerColorSplit(u32 id, HidNpadControllerColor *color_left, HidNpadControllerColor *color_right) {
|
||||
Result rc = _hidVerifyNpadIdType(id);
|
||||
u32 hidGetNpadDeviceType(HidNpadIdType id) {
|
||||
HidNpad *npad = NULL;
|
||||
Result rc = _hidGetNpadInternalState(id, &npad);
|
||||
if (R_FAILED(rc))
|
||||
diagAbortWithResult(rc);
|
||||
|
||||
if (R_SUCCEEDED(rc)) {
|
||||
HidNpad *npad = _hidNpadSharedmemGetInternalState(id);
|
||||
if (npad == NULL)
|
||||
rc = MAKERESULT(Module_Libnx, LibnxError_NotInitialized);
|
||||
else {
|
||||
u32 tmp = npad->header.split_colors_descriptor;
|
||||
if (tmp==2) rc = MAKERESULT(202, 604);
|
||||
else if (tmp==1) rc = MAKERESULT(202, 603);
|
||||
else if (tmp!=0) diagAbortWithResult(MAKERESULT(Module_Libnx, LibnxError_ShouldNotHappen));
|
||||
|
||||
if (R_SUCCEEDED(rc)) {
|
||||
*color_left = npad->header.left_colors;
|
||||
*color_right = npad->header.right_colors;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return rc;
|
||||
return atomic_load_explicit(&npad->deviceType, memory_order_acquire);
|
||||
}
|
||||
|
||||
u32 hidGetNpadDeviceType(u32 id) {
|
||||
Result rc = _hidVerifyNpadIdType(id);
|
||||
u32 tmp=0;
|
||||
void hidGetNpadSystemProperties(HidNpadIdType id, HidNpadSystemProperties *out) {
|
||||
HidNpad *npad = NULL;
|
||||
Result rc = _hidGetNpadInternalState(id, &npad);
|
||||
if (R_FAILED(rc))
|
||||
diagAbortWithResult(rc);
|
||||
|
||||
if (R_SUCCEEDED(rc)) {
|
||||
HidNpad *npad = _hidNpadSharedmemGetInternalState(id);
|
||||
if (npad == NULL)
|
||||
rc = MAKERESULT(Module_Libnx, LibnxError_NotInitialized);
|
||||
else
|
||||
tmp = atomic_load_explicit(&npad->deviceType, memory_order_acquire);
|
||||
}
|
||||
|
||||
if (R_FAILED(rc)) diagAbortWithResult(rc);
|
||||
return tmp;
|
||||
*out = atomic_load_explicit(&npad->system_properties, memory_order_acquire);
|
||||
}
|
||||
|
||||
void hidGetNpadSystemProperties(u32 id, HidNpadSystemProperties *out) {
|
||||
Result rc = _hidVerifyNpadIdType(id);
|
||||
void hidGetNpadSystemButtonProperties(HidNpadIdType id, HidNpadSystemButtonProperties *out) {
|
||||
HidNpad *npad = NULL;
|
||||
Result rc = _hidGetNpadInternalState(id, &npad);
|
||||
if (R_FAILED(rc))
|
||||
diagAbortWithResult(rc);
|
||||
|
||||
if (R_SUCCEEDED(rc)) {
|
||||
HidNpad *npad = _hidNpadSharedmemGetInternalState(id);
|
||||
if (npad == NULL)
|
||||
rc = MAKERESULT(Module_Libnx, LibnxError_NotInitialized);
|
||||
else
|
||||
*out = atomic_load_explicit(&npad->system_properties, memory_order_acquire);
|
||||
}
|
||||
|
||||
if (R_FAILED(rc)) diagAbortWithResult(rc);
|
||||
}
|
||||
|
||||
void hidGetNpadSystemButtonProperties(u32 id, HidNpadSystemButtonProperties *out) {
|
||||
Result rc = _hidVerifyNpadIdType(id);
|
||||
|
||||
if (R_SUCCEEDED(rc)) {
|
||||
HidNpad *npad = _hidNpadSharedmemGetInternalState(id);
|
||||
if (npad == NULL)
|
||||
rc = MAKERESULT(Module_Libnx, LibnxError_NotInitialized);
|
||||
else
|
||||
*out = atomic_load_explicit(&npad->system_button_properties, memory_order_acquire);
|
||||
}
|
||||
|
||||
if (R_FAILED(rc)) diagAbortWithResult(rc);
|
||||
*out = atomic_load_explicit(&npad->system_button_properties, memory_order_acquire);
|
||||
}
|
||||
|
||||
static void _hidGetNpadPowerInfo(HidNpad *npad, HidPowerInfo *info, u32 powerInfo, u32 i) {
|
||||
@ -454,73 +425,47 @@ static void _hidGetNpadPowerInfo(HidNpad *npad, HidPowerInfo *info, u32 powerInf
|
||||
info->powerConnected = (powerInfo & BIT(i+3)) != 0;
|
||||
}
|
||||
|
||||
void hidGetNpadPowerInfoSingle(u32 id, HidPowerInfo *info) {
|
||||
Result rc = _hidVerifyNpadIdType(id);
|
||||
void hidGetNpadPowerInfoSingle(HidNpadIdType id, HidPowerInfo *info) {
|
||||
HidNpad *npad = NULL;
|
||||
Result rc = _hidGetNpadInternalState(id, &npad);
|
||||
if (R_FAILED(rc))
|
||||
diagAbortWithResult(rc);
|
||||
|
||||
if (R_SUCCEEDED(rc)) {
|
||||
HidNpad *npad = _hidNpadSharedmemGetInternalState(id);
|
||||
if (npad == NULL)
|
||||
rc = MAKERESULT(Module_Libnx, LibnxError_NotInitialized);
|
||||
else {
|
||||
HidNpadSystemProperties properties;
|
||||
properties = atomic_load_explicit(&npad->system_properties, memory_order_acquire);
|
||||
HidNpadSystemProperties properties;
|
||||
properties = atomic_load_explicit(&npad->system_properties, memory_order_acquire);
|
||||
|
||||
_hidGetNpadPowerInfo(npad, info, properties.powerInfo, 0);
|
||||
}
|
||||
}
|
||||
|
||||
if (R_FAILED(rc)) diagAbortWithResult(rc);
|
||||
_hidGetNpadPowerInfo(npad, info, properties.powerInfo, 0);
|
||||
}
|
||||
|
||||
void hidGetNpadPowerInfoSplit(u32 id, HidPowerInfo *info_left, HidPowerInfo *info_right) {
|
||||
Result rc = _hidVerifyNpadIdType(id);
|
||||
void hidGetNpadPowerInfoSplit(HidNpadIdType id, HidPowerInfo *info_left, HidPowerInfo *info_right) {
|
||||
HidNpad *npad = NULL;
|
||||
Result rc = _hidGetNpadInternalState(id, &npad);
|
||||
if (R_FAILED(rc))
|
||||
diagAbortWithResult(rc);
|
||||
|
||||
if (R_SUCCEEDED(rc)) {
|
||||
HidNpad *npad = _hidNpadSharedmemGetInternalState(id);
|
||||
if (npad == NULL)
|
||||
rc = MAKERESULT(Module_Libnx, LibnxError_NotInitialized);
|
||||
else {
|
||||
HidNpadSystemProperties properties;
|
||||
properties = atomic_load_explicit(&npad->system_properties, memory_order_acquire);
|
||||
HidNpadSystemProperties properties;
|
||||
properties = atomic_load_explicit(&npad->system_properties, memory_order_acquire);
|
||||
|
||||
_hidGetNpadPowerInfo(npad, info_left, properties.powerInfo, 1);
|
||||
_hidGetNpadPowerInfo(npad, info_right, properties.powerInfo, 2);
|
||||
}
|
||||
}
|
||||
|
||||
if (R_FAILED(rc)) diagAbortWithResult(rc);
|
||||
_hidGetNpadPowerInfo(npad, info_left, properties.powerInfo, 1);
|
||||
_hidGetNpadPowerInfo(npad, info_right, properties.powerInfo, 2);
|
||||
}
|
||||
|
||||
u32 hidGetAppletFooterUiAttributesSet(u32 id) {
|
||||
Result rc = _hidVerifyNpadIdType(id);
|
||||
u32 tmp=0;
|
||||
u32 hidGetAppletFooterUiAttributesSet(HidNpadIdType id) {
|
||||
HidNpad *npad = NULL;
|
||||
Result rc = _hidGetNpadInternalState(id, &npad);
|
||||
if (R_FAILED(rc))
|
||||
diagAbortWithResult(rc);
|
||||
|
||||
if (R_SUCCEEDED(rc)) {
|
||||
HidNpad *npad = _hidNpadSharedmemGetInternalState(id);
|
||||
if (npad == NULL)
|
||||
rc = MAKERESULT(Module_Libnx, LibnxError_NotInitialized);
|
||||
else
|
||||
tmp = atomic_load_explicit(&npad->applet_footer_ui_attribute, memory_order_acquire);
|
||||
}
|
||||
|
||||
if (R_FAILED(rc)) diagAbortWithResult(rc);
|
||||
return tmp;
|
||||
return atomic_load_explicit(&npad->applet_footer_ui_attribute, memory_order_acquire);
|
||||
}
|
||||
|
||||
u8 hidGetAppletFooterUiTypes(u32 id) {
|
||||
Result rc = _hidVerifyNpadIdType(id);
|
||||
u32 tmp=0;
|
||||
u8 hidGetAppletFooterUiTypes(HidNpadIdType id) {
|
||||
HidNpad *npad = NULL;
|
||||
Result rc = _hidGetNpadInternalState(id, &npad);
|
||||
if (R_FAILED(rc))
|
||||
diagAbortWithResult(rc);
|
||||
|
||||
if (R_SUCCEEDED(rc)) {
|
||||
HidNpad *npad = _hidNpadSharedmemGetInternalState(id);
|
||||
if (npad == NULL)
|
||||
rc = MAKERESULT(Module_Libnx, LibnxError_NotInitialized);
|
||||
else
|
||||
tmp = atomic_load_explicit(&npad->applet_footer_ui_type, memory_order_acquire);
|
||||
}
|
||||
|
||||
if (R_FAILED(rc)) diagAbortWithResult(rc);
|
||||
return tmp;
|
||||
return atomic_load_explicit(&npad->applet_footer_ui_type, memory_order_acquire);
|
||||
}
|
||||
|
||||
static Result _hidGetStates(HidCommonStateHeader *header, void* in_states, void* states, size_t entrysize, size_t count, size_t *total_out) {
|
||||
@ -558,57 +503,54 @@ static Result _hidGetStates(HidCommonStateHeader *header, void* in_states, void*
|
||||
return 0;
|
||||
}
|
||||
|
||||
static Result _hidGetNpadStates(u32 id, u32 layout, HidNpadStateEntry *states, size_t count, size_t *total_out) {
|
||||
static Result _hidGetNpadStates(HidNpadIdType id, u32 layout, HidNpadStateEntry *states, size_t count, size_t *total_out) {
|
||||
if (total_out) *total_out = 0;
|
||||
|
||||
Result rc = _hidVerifyNpadIdType(id);
|
||||
if (R_FAILED(rc)) return rc;
|
||||
|
||||
HidNpad *npad = _hidNpadSharedmemGetInternalState(id);
|
||||
if (npad == NULL)
|
||||
return MAKERESULT(Module_Libnx, LibnxError_NotInitialized);
|
||||
HidNpad *npad = NULL;
|
||||
Result rc = _hidGetNpadInternalState(id, &npad);
|
||||
if (R_FAILED(rc))
|
||||
return rc;
|
||||
|
||||
HidControllerLayout *states_buf = &npad->layouts[layout];
|
||||
|
||||
return _hidGetStates(&states_buf->header, states_buf->entries, states, sizeof(HidNpadStateEntry), count, total_out);
|
||||
}
|
||||
|
||||
void hidGetNpadStatesFullKey(u32 id, HidNpadFullKeyState *states, size_t count, size_t *total_out) {
|
||||
void hidGetNpadStatesFullKey(HidNpadIdType id, HidNpadFullKeyState *states, size_t count, size_t *total_out) {
|
||||
Result rc = _hidGetNpadStates(id, 0, states, count, total_out);
|
||||
if (R_FAILED(rc)) diagAbortWithResult(rc);
|
||||
|
||||
// sdknso would handle button-bitmasking with ControlPadRestriction here.
|
||||
}
|
||||
|
||||
void hidGetNpadStatesHandheld(u32 id, HidNpadHandheldState *states, size_t count, size_t *total_out) {
|
||||
void hidGetNpadStatesHandheld(HidNpadIdType id, HidNpadHandheldState *states, size_t count, size_t *total_out) {
|
||||
Result rc = _hidGetNpadStates(id, 1, states, count, total_out);
|
||||
if (R_FAILED(rc)) diagAbortWithResult(rc);
|
||||
|
||||
// sdknso would handle button-bitmasking with ControlPadRestriction here.
|
||||
}
|
||||
|
||||
void hidGetNpadStatesJoyDual(u32 id, HidNpadJoyDualState *states, size_t count, size_t *total_out) {
|
||||
void hidGetNpadStatesJoyDual(HidNpadIdType id, HidNpadJoyDualState *states, size_t count, size_t *total_out) {
|
||||
Result rc = _hidGetNpadStates(id, 2, states, count, total_out);
|
||||
if (R_FAILED(rc)) diagAbortWithResult(rc);
|
||||
|
||||
// sdknso would handle button-bitmasking with ControlPadRestriction here.
|
||||
}
|
||||
|
||||
void hidGetNpadStatesJoyLeft(u32 id, HidNpadJoyLeftState *states, size_t count, size_t *total_out) {
|
||||
void hidGetNpadStatesJoyLeft(HidNpadIdType id, HidNpadJoyLeftState *states, size_t count, size_t *total_out) {
|
||||
Result rc = _hidGetNpadStates(id, 3, states, count, total_out);
|
||||
if (R_FAILED(rc)) diagAbortWithResult(rc);
|
||||
|
||||
// sdknso would handle button-bitmasking with ControlPadRestriction here.
|
||||
}
|
||||
|
||||
void hidGetNpadStatesJoyRight(u32 id, HidNpadJoyRightState *states, size_t count, size_t *total_out) {
|
||||
void hidGetNpadStatesJoyRight(HidNpadIdType id, HidNpadJoyRightState *states, size_t count, size_t *total_out) {
|
||||
Result rc = _hidGetNpadStates(id, 4, states, count, total_out);
|
||||
if (R_FAILED(rc)) diagAbortWithResult(rc);
|
||||
|
||||
// sdknso would handle button-bitmasking with ControlPadRestriction here.
|
||||
}
|
||||
|
||||
void hidGetNpadStatesGc(u32 id, HidNpadGcState *states, size_t count, size_t *total_out) {
|
||||
void hidGetNpadStatesGc(HidNpadIdType id, HidNpadGcState *states, size_t count, size_t *total_out) {
|
||||
HidNpadStateEntry tmp_entries[17]={0};
|
||||
HidNpadGcTriggerState tmp_entries_trigger[17]={0};
|
||||
|
||||
@ -618,13 +560,10 @@ void hidGetNpadStatesGc(u32 id, HidNpadGcState *states, size_t count, size_t *to
|
||||
Result rc = _hidGetNpadStates(id, 0, tmp_entries, count, &tmp_out);
|
||||
if (R_FAILED(rc)) diagAbortWithResult(rc);
|
||||
|
||||
rc = _hidVerifyNpadIdType(id);
|
||||
HidNpad *npad = NULL;
|
||||
rc = _hidGetNpadInternalState(id, &npad);
|
||||
if (R_FAILED(rc)) diagAbortWithResult(rc);
|
||||
|
||||
HidNpad *npad = _hidNpadSharedmemGetInternalState(id);
|
||||
if (npad == NULL)
|
||||
diagAbortWithResult(MAKERESULT(Module_Libnx, LibnxError_NotInitialized));
|
||||
|
||||
size_t tmp_out2=0;
|
||||
rc = _hidGetStates(&npad->npad_gc_trigger_header, npad->npad_gc_trigger_state, tmp_entries_trigger, sizeof(HidNpadGcTriggerState), count, &tmp_out2);
|
||||
if (R_FAILED(rc)) diagAbortWithResult(rc);
|
||||
@ -648,14 +587,14 @@ void hidGetNpadStatesGc(u32 id, HidNpadGcState *states, size_t count, size_t *to
|
||||
}
|
||||
}
|
||||
|
||||
void hidGetNpadStatesPalma(u32 id, HidNpadPalmaState *states, size_t count, size_t *total_out) {
|
||||
void hidGetNpadStatesPalma(HidNpadIdType id, HidNpadPalmaState *states, size_t count, size_t *total_out) {
|
||||
Result rc = _hidGetNpadStates(id, 5, states, count, total_out);
|
||||
if (R_FAILED(rc)) diagAbortWithResult(rc);
|
||||
|
||||
// sdknso doesn't handle ControlPadRestriction with this.
|
||||
}
|
||||
|
||||
void hidGetNpadStatesLark(u32 id, HidNpadLarkState *states, size_t count, size_t *total_out) {
|
||||
void hidGetNpadStatesLark(HidNpadIdType id, HidNpadLarkState *states, size_t count, size_t *total_out) {
|
||||
HidNpadStateEntry tmp_entries[17]={0};
|
||||
|
||||
if (total_out) *total_out = 0;
|
||||
@ -666,9 +605,9 @@ void hidGetNpadStatesLark(u32 id, HidNpadLarkState *states, size_t count, size_t
|
||||
|
||||
memset(states, 0, sizeof(HidNpadLarkState) * tmp_out);
|
||||
|
||||
HidNpad *npad = _hidNpadSharedmemGetInternalState(id);
|
||||
if (npad == NULL)
|
||||
diagAbortWithResult(MAKERESULT(Module_Libnx, LibnxError_NotInitialized));
|
||||
HidNpad *npad = NULL;
|
||||
rc = _hidGetNpadInternalState(id, &npad);
|
||||
if (R_FAILED(rc)) diagAbortWithResult(rc);
|
||||
|
||||
u32 unk = atomic_load_explicit(&npad->unk_x43E0, memory_order_acquire);
|
||||
if (!(unk>=1 && unk<=4)) unk = 0;
|
||||
@ -689,7 +628,7 @@ void hidGetNpadStatesLark(u32 id, HidNpadLarkState *states, size_t count, size_t
|
||||
}
|
||||
}
|
||||
|
||||
void hidGetNpadStatesHandheldLark(u32 id, HidNpadHandheldLarkState *states, size_t count, size_t *total_out) {
|
||||
void hidGetNpadStatesHandheldLark(HidNpadIdType id, HidNpadHandheldLarkState *states, size_t count, size_t *total_out) {
|
||||
HidNpadStateEntry tmp_entries[17]={0};
|
||||
|
||||
if (total_out) *total_out = 0;
|
||||
@ -700,9 +639,9 @@ void hidGetNpadStatesHandheldLark(u32 id, HidNpadHandheldLarkState *states, size
|
||||
|
||||
memset(states, 0, sizeof(HidNpadHandheldLarkState) * tmp_out);
|
||||
|
||||
HidNpad *npad = _hidNpadSharedmemGetInternalState(id);
|
||||
if (npad == NULL)
|
||||
diagAbortWithResult(MAKERESULT(Module_Libnx, LibnxError_NotInitialized));
|
||||
HidNpad *npad = NULL;
|
||||
rc = _hidGetNpadInternalState(id, &npad);
|
||||
if (R_FAILED(rc)) diagAbortWithResult(rc);
|
||||
|
||||
u32 unk0 = atomic_load_explicit(&npad->unk_x43E0, memory_order_acquire);
|
||||
if (!(unk0>=1 && unk0<=4)) unk0 = 0;
|
||||
@ -726,7 +665,7 @@ void hidGetNpadStatesHandheldLark(u32 id, HidNpadHandheldLarkState *states, size
|
||||
}
|
||||
}
|
||||
|
||||
void hidGetNpadStatesLucia(u32 id, HidNpadLuciaState *states, size_t count, size_t *total_out) {
|
||||
void hidGetNpadStatesLucia(HidNpadIdType id, HidNpadLuciaState *states, size_t count, size_t *total_out) {
|
||||
HidNpadStateEntry tmp_entries[17]={0};
|
||||
|
||||
if (total_out) *total_out = 0;
|
||||
@ -737,9 +676,9 @@ void hidGetNpadStatesLucia(u32 id, HidNpadLuciaState *states, size_t count, size
|
||||
|
||||
memset(states, 0, sizeof(HidNpadLuciaState) * tmp_out);
|
||||
|
||||
HidNpad *npad = _hidNpadSharedmemGetInternalState(id);
|
||||
if (npad == NULL)
|
||||
diagAbortWithResult(MAKERESULT(Module_Libnx, LibnxError_NotInitialized));
|
||||
HidNpad *npad = NULL;
|
||||
rc = _hidGetNpadInternalState(id, &npad);
|
||||
if (R_FAILED(rc)) diagAbortWithResult(rc);
|
||||
|
||||
u32 unk = atomic_load_explicit(&npad->unk_x43E8, memory_order_acquire);
|
||||
if (!(unk>=1 && unk<=3)) unk = 0;
|
||||
@ -760,14 +699,14 @@ void hidGetNpadStatesLucia(u32 id, HidNpadLuciaState *states, size_t count, size
|
||||
}
|
||||
}
|
||||
|
||||
void hidGetNpadStatesSystemExt(u32 id, HidNpadSystemExtState *states, size_t count, size_t *total_out) {
|
||||
void hidGetNpadStatesSystemExt(HidNpadIdType id, HidNpadSystemExtState *states, size_t count, size_t *total_out) {
|
||||
Result rc = _hidGetNpadStates(id, 6, states, count, total_out);
|
||||
if (R_FAILED(rc)) diagAbortWithResult(rc);
|
||||
|
||||
// sdknso would handle button-bitmasking with ControlPadRestriction here.
|
||||
}
|
||||
|
||||
void hidGetNpadStatesSystem(u32 id, HidNpadSystemState *states, size_t count, size_t *total_out) {
|
||||
void hidGetNpadStatesSystem(HidNpadIdType id, HidNpadSystemState *states, size_t count, size_t *total_out) {
|
||||
if (total_out) *total_out = 0;
|
||||
size_t tmp_out=0;
|
||||
Result rc = _hidGetNpadStates(id, 6, states, count, &tmp_out);
|
||||
@ -1226,31 +1165,12 @@ Result hidGetSupportedNpadStyleSet(u32 *style_set) {
|
||||
return rc;
|
||||
}
|
||||
|
||||
Result hidSetSupportedNpadIdType(const HidControllerID *buf, size_t count) {
|
||||
Result hidSetSupportedNpadIdType(const HidNpadIdType *buf, size_t count) {
|
||||
u64 AppletResourceUserId = appletGetAppletResourceUserId();
|
||||
size_t i;
|
||||
u32 tmpval=0;
|
||||
u32 tmpbuf[10];
|
||||
|
||||
if (count > 10)
|
||||
return MAKERESULT(Module_Libnx, LibnxError_OutOfMemory);
|
||||
|
||||
memset(tmpbuf, 0, sizeof(tmpbuf));
|
||||
for (i=0; i<count; i++) {
|
||||
tmpval = buf[i];
|
||||
if (tmpval == CONTROLLER_HANDHELD) {
|
||||
tmpval = 0x20;
|
||||
}
|
||||
else if (tmpval >= CONTROLLER_UNKNOWN) {
|
||||
return MAKERESULT(Module_Libnx, LibnxError_BadInput);
|
||||
}
|
||||
|
||||
tmpbuf[i] = tmpval;
|
||||
}
|
||||
|
||||
return serviceDispatchIn(&g_hidSrv, 102, AppletResourceUserId,
|
||||
.buffer_attrs = { SfBufferAttr_HipcPointer | SfBufferAttr_In },
|
||||
.buffers = { { tmpbuf, count*sizeof(u32) } },
|
||||
.buffers = { { buf, count*sizeof(HidNpadIdType) } },
|
||||
.in_send_pid = true,
|
||||
);
|
||||
}
|
||||
@ -1274,7 +1194,7 @@ static Result _hidDeactivateNpad(void) {
|
||||
return _hidCmdWithNoInput(104);
|
||||
}
|
||||
|
||||
Result hidAcquireNpadStyleSetUpdateEventHandle(HidControllerID id, Event* out_event, bool autoclear) {
|
||||
Result hidAcquireNpadStyleSetUpdateEventHandle(HidNpadIdType id, Event* out_event, bool autoclear) {
|
||||
Result rc;
|
||||
Handle tmp_handle = INVALID_HANDLE;
|
||||
|
||||
@ -1283,7 +1203,7 @@ Result hidAcquireNpadStyleSetUpdateEventHandle(HidControllerID id, Event* out_ev
|
||||
u32 pad;
|
||||
u64 AppletResourceUserId;
|
||||
u64 event_ptr; // Official sw sets this to a ptr, which the sysmodule doesn't seem to use.
|
||||
} in = { hidControllerIDToOfficial(id), 0, appletGetAppletResourceUserId(), 0 };
|
||||
} in = { id, 0, appletGetAppletResourceUserId(), 0 };
|
||||
|
||||
rc = serviceDispatchIn(&g_hidSrv, 106, in,
|
||||
.in_send_pid = true,
|
||||
@ -1305,19 +1225,19 @@ Result hidGetNpadJoyHoldType(HidJoyHoldType *type) {
|
||||
return rc;
|
||||
}
|
||||
|
||||
Result hidSetNpadJoyAssignmentModeSingleByDefault(HidControllerID id) {
|
||||
return _hidCmdWithInputU32(hidControllerIDToOfficial(id), 122);
|
||||
Result hidSetNpadJoyAssignmentModeSingleByDefault(HidNpadIdType id) {
|
||||
return _hidCmdWithInputU32(id, 122);
|
||||
}
|
||||
|
||||
Result hidSetNpadJoyAssignmentModeDual(HidControllerID id) {
|
||||
return _hidCmdWithInputU32(hidControllerIDToOfficial(id), 124);
|
||||
Result hidSetNpadJoyAssignmentModeDual(HidNpadIdType id) {
|
||||
return _hidCmdWithInputU32(id, 124);
|
||||
}
|
||||
|
||||
Result hidMergeSingleJoyAsDualJoy(HidControllerID id0, HidControllerID id1) {
|
||||
Result hidMergeSingleJoyAsDualJoy(HidNpadIdType id0, HidNpadIdType id1) {
|
||||
const struct {
|
||||
u32 id0, id1;
|
||||
u64 AppletResourceUserId;
|
||||
} in = { hidControllerIDToOfficial(id0), hidControllerIDToOfficial(id1), appletGetAppletResourceUserId() };
|
||||
} in = { id0, id1, appletGetAppletResourceUserId() };
|
||||
|
||||
return serviceDispatchIn(&g_hidSrv, 125, in,
|
||||
.in_send_pid = true,
|
||||
@ -1402,16 +1322,13 @@ Result hidIsVibrationDeviceMounted(const u32 *VibrationDeviceHandle, bool *flag)
|
||||
return rc;
|
||||
}
|
||||
|
||||
static Result _hidGetDeviceHandles(u32 devicetype, u32 *DeviceHandles, s32 total_handles, HidControllerID id, HidNpadStyleTag style) {
|
||||
static Result _hidGetDeviceHandles(u32 devicetype, u32 *DeviceHandles, s32 total_handles, HidNpadIdType id, HidNpadStyleTag style) {
|
||||
Result rc=0;
|
||||
u32 tmp_type=0;
|
||||
u32 tmp_id=0;
|
||||
|
||||
if (total_handles <= 0 || total_handles > 2 || devicetype > 1)
|
||||
return MAKERESULT(Module_Libnx, LibnxError_BadInput);
|
||||
|
||||
tmp_id = hidControllerIDToOfficial(id);
|
||||
|
||||
if (style & HidNpadStyleTag_NpadFullKey) {
|
||||
tmp_type = 3;
|
||||
}
|
||||
@ -1462,7 +1379,7 @@ static Result _hidGetDeviceHandles(u32 devicetype, u32 *DeviceHandles, s32 total
|
||||
return MAKERESULT(Module_Libnx, LibnxError_BadInput);
|
||||
}
|
||||
|
||||
DeviceHandles[0] = tmp_type | (tmp_id & 0xff)<<8;
|
||||
DeviceHandles[0] = tmp_type | (id & 0xff)<<8;
|
||||
|
||||
if (devicetype==1 && (tmp_type==3 || tmp_type==4))
|
||||
DeviceHandles[0] |= 0x020000;
|
||||
@ -1483,7 +1400,7 @@ static Result _hidGetDeviceHandles(u32 devicetype, u32 *DeviceHandles, s32 total
|
||||
return rc;
|
||||
}
|
||||
|
||||
Result hidInitializeVibrationDevices(u32 *VibrationDeviceHandles, s32 total_handles, HidControllerID id, HidNpadStyleTag style) {
|
||||
Result hidInitializeVibrationDevices(u32 *VibrationDeviceHandles, s32 total_handles, HidNpadIdType id, HidNpadStyleTag style) {
|
||||
Result rc=0;
|
||||
s32 i;
|
||||
|
||||
@ -1507,7 +1424,7 @@ Result hidInitializeVibrationDevices(u32 *VibrationDeviceHandles, s32 total_hand
|
||||
return rc;
|
||||
}
|
||||
|
||||
Result hidGetSixAxisSensorHandles(u32 *SixAxisSensorHandles, s32 total_handles, HidControllerID id, HidNpadStyleTag style) {
|
||||
Result hidGetSixAxisSensorHandles(u32 *SixAxisSensorHandles, s32 total_handles, HidNpadIdType id, HidNpadStyleTag style) {
|
||||
return _hidGetDeviceHandles(1, SixAxisSensorHandles, total_handles, id, style);
|
||||
}
|
||||
|
||||
@ -1730,11 +1647,11 @@ Result hidGetGyroBias(UtilFloat3 *out) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
Result hidGetNpadInterfaceType(HidControllerID id, u8 *out) {
|
||||
Result hidGetNpadInterfaceType(HidNpadIdType id, u8 *out) {
|
||||
if (hosversionBefore(4,0,0))
|
||||
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
|
||||
|
||||
u32 tmp = hidControllerIDToOfficial(id);
|
||||
u32 tmp = id;
|
||||
return serviceDispatchInOut(&g_hidSrv, 405, tmp, *out);
|
||||
}
|
||||
|
||||
|
@ -42,7 +42,7 @@ static Result _hidbusCmdGetHandle(Service* srv, Handle* handle_out, u32 cmd_id)
|
||||
);
|
||||
}
|
||||
|
||||
static Result _hidbusGetBusHandle(Service* srv, u32 id, u64 bus_type, bool *flag, HidbusBusHandle *handle) {
|
||||
static Result _hidbusGetBusHandle(Service* srv, HidNpadIdType id, u64 bus_type, bool *flag, HidbusBusHandle *handle) {
|
||||
const struct {
|
||||
u32 id;
|
||||
u32 pad;
|
||||
@ -204,7 +204,7 @@ static HidbusJoyPollingMode _hidbusGetStatusManagerEntryPollingMode(u8 internal_
|
||||
return atomic_load_explicit(&_hidbusGetStatusManagerEntryCommon(internal_index)->polling_mode, memory_order_acquire);
|
||||
}
|
||||
|
||||
Result hidbusGetBusHandle(HidbusBusHandle *handle, bool *flag, HidControllerID id, HidbusBusType bus_type) {
|
||||
Result hidbusGetBusHandle(HidbusBusHandle *handle, bool *flag, HidNpadIdType id, HidbusBusType bus_type) {
|
||||
Service srv={0};
|
||||
Result rc = hidbusGetServiceSession(&srv);
|
||||
*flag = 0;
|
||||
@ -212,7 +212,7 @@ Result hidbusGetBusHandle(HidbusBusHandle *handle, bool *flag, HidControllerID i
|
||||
|
||||
HidbusBusHandle tmphandle={0};
|
||||
bool tmpflag=0;
|
||||
rc = _hidbusGetBusHandle(&srv, hidControllerIDToOfficial(id), bus_type, &tmpflag, &tmphandle);
|
||||
rc = _hidbusGetBusHandle(&srv, id, bus_type, &tmpflag, &tmphandle);
|
||||
if (R_SUCCEEDED(rc)) {
|
||||
if (!tmpflag) *flag = tmpflag;
|
||||
else {
|
||||
|
@ -181,11 +181,11 @@ Result hidsysGetSupportedNpadStyleSetOfCallerApplet(u32 *out) {
|
||||
return _hidsysGetMaskedSupportedNpadStyleSet(AppletResourceUserId, out);
|
||||
}
|
||||
|
||||
Result hidsysGetUniquePadsFromNpad(HidControllerID id, u64 *UniquePadIds, s32 count, s32 *total_entries) {
|
||||
Result hidsysGetUniquePadsFromNpad(HidNpadIdType id, u64 *UniquePadIds, s32 count, s32 *total_entries) {
|
||||
if (hosversionBefore(3,0,0))
|
||||
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
|
||||
|
||||
u32 tmp=hidControllerIDToOfficial(id);
|
||||
u32 tmp=id;
|
||||
s64 out=0;
|
||||
Result rc = serviceDispatchInOut(&g_hidsysSrv, 321, tmp, out,
|
||||
.buffer_attrs = { SfBufferAttr_HipcPointer | SfBufferAttr_Out },
|
||||
|
@ -277,8 +277,8 @@ static Result _irsCheckInternalStatus(IrsIrCameraHandle handle) {
|
||||
return rc;
|
||||
}
|
||||
|
||||
Result irsGetIrCameraHandle(IrsIrCameraHandle *handle, HidControllerID id) {
|
||||
u32 tmp = hidControllerIDToOfficial(id);
|
||||
Result irsGetIrCameraHandle(IrsIrCameraHandle *handle, HidNpadIdType id) {
|
||||
u32 tmp = id;
|
||||
return serviceDispatchInOut(&g_irsSrv, 311, tmp, *handle);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user