mirror of
https://github.com/switchbrew/libnx.git
synced 2025-06-21 12:32:40 +02:00
hidLa: 11.0 support and fixed the arg_size value.
This commit is contained in:
parent
06d38571b4
commit
c51918a605
@ -10,9 +10,10 @@
|
|||||||
|
|
||||||
/// Mode values for HidLaControllerSupportArgPrivate::mode.
|
/// Mode values for HidLaControllerSupportArgPrivate::mode.
|
||||||
typedef enum {
|
typedef enum {
|
||||||
HidLaControllerSupportMode_ShowControllerSupport = 0, ///< ShowControllerSupport
|
HidLaControllerSupportMode_ShowControllerSupport = 0, ///< ShowControllerSupport
|
||||||
HidLaControllerSupportMode_ShowControllerStrapGuide = 1, ///< [3.0.0+] ShowControllerStrapGuide
|
HidLaControllerSupportMode_ShowControllerStrapGuide = 1, ///< [3.0.0+] ShowControllerStrapGuide
|
||||||
HidLaControllerSupportMode_ShowControllerFirmwareUpdate = 2, ///< [3.0.0+] ShowControllerFirmwareUpdate
|
HidLaControllerSupportMode_ShowControllerFirmwareUpdate = 2, ///< [3.0.0+] ShowControllerFirmwareUpdate
|
||||||
|
HidLaControllerSupportMode_ShowControllerKeyRemappingForSystem = 4, ///< [11.0.0+] ShowControllerKeyRemappingForSystem
|
||||||
} HidLaControllerSupportMode;
|
} HidLaControllerSupportMode;
|
||||||
|
|
||||||
/// ControllerSupportCaller
|
/// ControllerSupportCaller
|
||||||
@ -75,6 +76,13 @@ typedef struct {
|
|||||||
u8 pad[3]; ///< Padding.
|
u8 pad[3]; ///< Padding.
|
||||||
} HidLaControllerFirmwareUpdateArg;
|
} HidLaControllerFirmwareUpdateArg;
|
||||||
|
|
||||||
|
/// ControllerKeyRemappingArg
|
||||||
|
typedef struct {
|
||||||
|
u64 unk_x0; ///< Unknown
|
||||||
|
u32 unk_x8; ///< Unknown
|
||||||
|
u8 pad[0x4]; ///< Padding
|
||||||
|
} HidLaControllerKeyRemappingArg;
|
||||||
|
|
||||||
/// ControllerSupportResultInfo. First 8-bytes from the applet output storage.
|
/// ControllerSupportResultInfo. First 8-bytes from the applet output storage.
|
||||||
typedef struct {
|
typedef struct {
|
||||||
s8 player_count; ///< playerCount.
|
s8 player_count; ///< playerCount.
|
||||||
@ -103,6 +111,13 @@ void hidLaCreateControllerSupportArg(HidLaControllerSupportArg *arg);
|
|||||||
*/
|
*/
|
||||||
void hidLaCreateControllerFirmwareUpdateArg(HidLaControllerFirmwareUpdateArg *arg);
|
void hidLaCreateControllerFirmwareUpdateArg(HidLaControllerFirmwareUpdateArg *arg);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Initializes a \ref HidLaControllerKeyRemappingArg with the defaults.
|
||||||
|
* @note This just uses memset() with the arg.
|
||||||
|
* @param[out] arg \ref HidLaControllerKeyRemappingArg
|
||||||
|
*/
|
||||||
|
void hidLaCreateControllerKeyRemappingArg(HidLaControllerKeyRemappingArg *arg);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Sets the ExplainText for the specified player and \ref HidLaControllerSupportArg.
|
* @brief Sets the ExplainText for the specified player and \ref HidLaControllerSupportArg.
|
||||||
* @note This string is displayed in the UI box for the player.
|
* @note This string is displayed in the UI box for the player.
|
||||||
@ -150,3 +165,11 @@ Result hidLaShowControllerSupportForSystem(HidLaControllerSupportResultInfo *res
|
|||||||
*/
|
*/
|
||||||
Result hidLaShowControllerFirmwareUpdateForSystem(const HidLaControllerFirmwareUpdateArg *arg, HidLaControllerSupportCaller caller);
|
Result hidLaShowControllerFirmwareUpdateForSystem(const HidLaControllerFirmwareUpdateArg *arg, HidLaControllerSupportCaller caller);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Launches the applet for ControllerKeyRemappingForSystem.
|
||||||
|
* @note Only available on [11.0.0+].
|
||||||
|
* @param[in] arg \ref HidLaControllerKeyRemappingArg
|
||||||
|
* @param[in] caller \ref HidLaControllerSupportCaller
|
||||||
|
*/
|
||||||
|
Result hidLaShowControllerKeyRemappingForSystem(const HidLaControllerKeyRemappingArg *arg, HidLaControllerSupportCaller caller);
|
||||||
|
|
||||||
|
@ -9,7 +9,9 @@ static Result _hidLaShow(const HidLaControllerSupportArgPrivate *private_arg, co
|
|||||||
AppletHolder holder;
|
AppletHolder holder;
|
||||||
u32 version=0x3; // [1.0.0+]
|
u32 version=0x3; // [1.0.0+]
|
||||||
|
|
||||||
if (hosversionAtLeast(8,0,0))
|
if (hosversionAtLeast(11,0,0))
|
||||||
|
version = 0x8;
|
||||||
|
else if (hosversionAtLeast(8,0,0))
|
||||||
version = 0x7;
|
version = 0x7;
|
||||||
else if (hosversionAtLeast(6,0,0))
|
else if (hosversionAtLeast(6,0,0))
|
||||||
version = 0x5;
|
version = 0x5;
|
||||||
@ -32,12 +34,19 @@ static Result _hidLaShow(const HidLaControllerSupportArgPrivate *private_arg, co
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static size_t _hidLaGetControllerSupportArgSize(void) {
|
||||||
|
size_t arg_size = sizeof(HidLaControllerSupportArg);
|
||||||
|
if (hosversionBefore(8,0,0)) arg_size = sizeof(HidLaControllerSupportArgV3);
|
||||||
|
|
||||||
|
return arg_size;
|
||||||
|
}
|
||||||
|
|
||||||
static Result _hidLaShowControllerSupportCore(HidLaControllerSupportResultInfo *result_info, const HidLaControllerSupportArg *arg, const HidLaControllerSupportArgPrivate *private_arg) {
|
static Result _hidLaShowControllerSupportCore(HidLaControllerSupportResultInfo *result_info, const HidLaControllerSupportArg *arg, const HidLaControllerSupportArgPrivate *private_arg) {
|
||||||
Result rc=0;
|
Result rc=0;
|
||||||
HidLaControllerSupportResultInfoInternal res={0};
|
HidLaControllerSupportResultInfoInternal res={0};
|
||||||
HidLaControllerSupportArgV3 arg_v3;
|
HidLaControllerSupportArgV3 arg_v3;
|
||||||
const void* arg_ptr = arg;
|
const void* arg_ptr = arg;
|
||||||
size_t arg_size = sizeof(*arg);
|
size_t arg_size = _hidLaGetControllerSupportArgSize();
|
||||||
|
|
||||||
if (private_arg->mode == HidLaControllerSupportMode_ShowControllerFirmwareUpdate)
|
if (private_arg->mode == HidLaControllerSupportMode_ShowControllerFirmwareUpdate)
|
||||||
return MAKERESULT(Module_Libnx, LibnxError_BadInput);
|
return MAKERESULT(Module_Libnx, LibnxError_BadInput);
|
||||||
@ -45,7 +54,6 @@ static Result _hidLaShowControllerSupportCore(HidLaControllerSupportResultInfo *
|
|||||||
if (hosversionBefore(8,0,0)) {
|
if (hosversionBefore(8,0,0)) {
|
||||||
memset(&arg_v3, 0, sizeof(arg_v3));
|
memset(&arg_v3, 0, sizeof(arg_v3));
|
||||||
arg_ptr = &arg_v3;
|
arg_ptr = &arg_v3;
|
||||||
arg_size = sizeof(arg_v3);
|
|
||||||
|
|
||||||
memcpy(&arg_v3.hdr, &arg->hdr, sizeof(arg->hdr));
|
memcpy(&arg_v3.hdr, &arg->hdr, sizeof(arg->hdr));
|
||||||
memcpy(arg_v3.identification_color, arg->identification_color, sizeof(arg_v3.identification_color));
|
memcpy(arg_v3.identification_color, arg->identification_color, sizeof(arg_v3.identification_color));
|
||||||
@ -90,6 +98,25 @@ static Result _hidLaShowControllerFirmwareUpdateCore(const HidLaControllerFirmwa
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Result _hidLaShowControllerKeyRemappingCore(const HidLaControllerKeyRemappingArg *arg, const HidLaControllerSupportArgPrivate *private_arg) {
|
||||||
|
Result rc=0;
|
||||||
|
HidLaControllerSupportResultInfoInternal res={0};
|
||||||
|
|
||||||
|
if (hosversionBefore(11,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
|
||||||
|
|
||||||
|
if (private_arg->mode != HidLaControllerSupportMode_ShowControllerKeyRemappingForSystem)
|
||||||
|
return MAKERESULT(Module_Libnx, LibnxError_BadInput);
|
||||||
|
|
||||||
|
rc = _hidLaShow(private_arg, arg, sizeof(*arg), &res, sizeof(res));
|
||||||
|
if (R_SUCCEEDED(rc)) {
|
||||||
|
if (res.res != 0) {
|
||||||
|
rc = MAKERESULT(Module_Libnx, LibnxError_LibAppletBadExit);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
static Result _hidLaSetupControllerSupportArgPrivate(HidLaControllerSupportArgPrivate *private_arg) {
|
static Result _hidLaSetupControllerSupportArgPrivate(HidLaControllerSupportArgPrivate *private_arg) {
|
||||||
Result rc=0;
|
Result rc=0;
|
||||||
u32 style_set;
|
u32 style_set;
|
||||||
@ -119,6 +146,10 @@ void hidLaCreateControllerFirmwareUpdateArg(HidLaControllerFirmwareUpdateArg *ar
|
|||||||
memset(arg, 0, sizeof(*arg));
|
memset(arg, 0, sizeof(*arg));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void hidLaCreateControllerKeyRemappingArg(HidLaControllerKeyRemappingArg *arg) {
|
||||||
|
memset(arg, 0, sizeof(*arg));
|
||||||
|
}
|
||||||
|
|
||||||
Result hidLaSetExplainText(HidLaControllerSupportArg *arg, const char *str, HidNpadIdType id) {
|
Result hidLaSetExplainText(HidLaControllerSupportArg *arg, const char *str, HidNpadIdType id) {
|
||||||
if (id >= 8)
|
if (id >= 8)
|
||||||
return MAKERESULT(Module_Libnx, LibnxError_BadInput);
|
return MAKERESULT(Module_Libnx, LibnxError_BadInput);
|
||||||
@ -132,7 +163,7 @@ Result hidLaSetExplainText(HidLaControllerSupportArg *arg, const char *str, HidN
|
|||||||
Result hidLaShowControllerSupport(HidLaControllerSupportResultInfo *result_info, const HidLaControllerSupportArg *arg) {
|
Result hidLaShowControllerSupport(HidLaControllerSupportResultInfo *result_info, const HidLaControllerSupportArg *arg) {
|
||||||
Result rc=0;
|
Result rc=0;
|
||||||
HidLaControllerSupportArgPrivate private_arg = {
|
HidLaControllerSupportArgPrivate private_arg = {
|
||||||
.private_size = sizeof(private_arg), .arg_size = sizeof(*arg), .mode = HidLaControllerSupportMode_ShowControllerSupport
|
.private_size = sizeof(private_arg), .arg_size = _hidLaGetControllerSupportArgSize(), .mode = HidLaControllerSupportMode_ShowControllerSupport
|
||||||
};
|
};
|
||||||
|
|
||||||
rc = _hidLaSetupControllerSupportArgPrivate(&private_arg);
|
rc = _hidLaSetupControllerSupportArgPrivate(&private_arg);
|
||||||
@ -146,7 +177,7 @@ Result hidLaShowControllerStrapGuide(void) {
|
|||||||
Result rc=0;
|
Result rc=0;
|
||||||
HidLaControllerSupportArg arg;
|
HidLaControllerSupportArg arg;
|
||||||
HidLaControllerSupportArgPrivate private_arg = {
|
HidLaControllerSupportArgPrivate private_arg = {
|
||||||
.private_size = sizeof(private_arg), .arg_size = sizeof(arg), .mode = HidLaControllerSupportMode_ShowControllerStrapGuide
|
.private_size = sizeof(private_arg), .arg_size = _hidLaGetControllerSupportArgSize(), .mode = HidLaControllerSupportMode_ShowControllerStrapGuide
|
||||||
};
|
};
|
||||||
|
|
||||||
if (hosversionBefore(3,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
|
if (hosversionBefore(3,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
|
||||||
@ -163,7 +194,7 @@ Result hidLaShowControllerStrapGuide(void) {
|
|||||||
Result hidLaShowControllerFirmwareUpdate(const HidLaControllerFirmwareUpdateArg *arg) {
|
Result hidLaShowControllerFirmwareUpdate(const HidLaControllerFirmwareUpdateArg *arg) {
|
||||||
Result rc=0;
|
Result rc=0;
|
||||||
HidLaControllerSupportArgPrivate private_arg = {
|
HidLaControllerSupportArgPrivate private_arg = {
|
||||||
.private_size = sizeof(private_arg), .arg_size = sizeof(*arg), .mode = HidLaControllerSupportMode_ShowControllerFirmwareUpdate
|
.private_size = sizeof(private_arg), .arg_size = _hidLaGetControllerSupportArgSize(), .mode = HidLaControllerSupportMode_ShowControllerFirmwareUpdate
|
||||||
};
|
};
|
||||||
|
|
||||||
rc = _hidLaSetupControllerSupportArgPrivate(&private_arg);
|
rc = _hidLaSetupControllerSupportArgPrivate(&private_arg);
|
||||||
@ -176,7 +207,7 @@ Result hidLaShowControllerFirmwareUpdate(const HidLaControllerFirmwareUpdateArg
|
|||||||
Result hidLaShowControllerSupportForSystem(HidLaControllerSupportResultInfo *result_info, const HidLaControllerSupportArg *arg, bool flag) {
|
Result hidLaShowControllerSupportForSystem(HidLaControllerSupportResultInfo *result_info, const HidLaControllerSupportArg *arg, bool flag) {
|
||||||
Result rc=0;
|
Result rc=0;
|
||||||
HidLaControllerSupportArgPrivate private_arg = {
|
HidLaControllerSupportArgPrivate private_arg = {
|
||||||
.private_size = sizeof(private_arg), .arg_size = sizeof(*arg),
|
.private_size = sizeof(private_arg), .arg_size = _hidLaGetControllerSupportArgSize(),
|
||||||
.flag0 = flag!=0, .flag1 = 1, .mode = HidLaControllerSupportMode_ShowControllerSupport
|
.flag0 = flag!=0, .flag1 = 1, .mode = HidLaControllerSupportMode_ShowControllerSupport
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -196,7 +227,7 @@ Result hidLaShowControllerSupportForSystem(HidLaControllerSupportResultInfo *res
|
|||||||
Result hidLaShowControllerFirmwareUpdateForSystem(const HidLaControllerFirmwareUpdateArg *arg, HidLaControllerSupportCaller caller) {
|
Result hidLaShowControllerFirmwareUpdateForSystem(const HidLaControllerFirmwareUpdateArg *arg, HidLaControllerSupportCaller caller) {
|
||||||
Result rc=0;
|
Result rc=0;
|
||||||
HidLaControllerSupportArgPrivate private_arg = {
|
HidLaControllerSupportArgPrivate private_arg = {
|
||||||
.private_size = sizeof(private_arg), .arg_size = sizeof(*arg),
|
.private_size = sizeof(private_arg), .arg_size = _hidLaGetControllerSupportArgSize(),
|
||||||
.flag1 = 1, .mode = HidLaControllerSupportMode_ShowControllerFirmwareUpdate, .controller_support_caller = caller
|
.flag1 = 1, .mode = HidLaControllerSupportMode_ShowControllerFirmwareUpdate, .controller_support_caller = caller
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -207,3 +238,17 @@ Result hidLaShowControllerFirmwareUpdateForSystem(const HidLaControllerFirmwareU
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Result hidLaShowControllerKeyRemappingForSystem(const HidLaControllerKeyRemappingArg *arg, HidLaControllerSupportCaller caller) {
|
||||||
|
Result rc=0;
|
||||||
|
HidLaControllerSupportArgPrivate private_arg = {
|
||||||
|
.private_size = sizeof(private_arg), .arg_size = _hidLaGetControllerSupportArgSize(),
|
||||||
|
.flag1 = 1, .mode = HidLaControllerSupportMode_ShowControllerKeyRemappingForSystem, .controller_support_caller = caller
|
||||||
|
};
|
||||||
|
|
||||||
|
rc = _hidLaSetupControllerSupportArgPrivate(&private_arg);
|
||||||
|
|
||||||
|
if (R_SUCCEEDED(rc)) rc = _hidLaShowControllerKeyRemappingCore(arg, &private_arg);
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user