Added hiddbgUpdateControllerColor and hiddbgUpdateDesignInfo.

This commit is contained in:
yellows8 2019-06-26 15:05:11 -04:00
parent a065244e4b
commit e1e2a05a34
No known key found for this signature in database
GPG Key ID: 0AF90DA3F1E60E43
2 changed files with 94 additions and 0 deletions

View File

@ -51,6 +51,12 @@ typedef struct {
Result hiddbgInitialize(void);
void hiddbgExit(void);
/// Writes the input RGB colors to the spi-flash for the specified controller (offset 0x6050 size 0x6). See hidsys.h for UniquePadId. Only available with [3.0.0+].
Result hiddbgUpdateControllerColor(u32 colorBody, u32 colorButtons, u64 UniquePadId);
/// Writes the input RGB colors followed by inval to the spi-flash for the specified controller (offset 0x6050 size 0xD). See hidsys.h for UniquePadId. Only available with [5.0.0+].
Result hiddbgUpdateDesignInfo(u32 colorBody, u32 colorButtons, u32 colorLeftGrip, u32 colorRightGrip, u8 inval, u64 UniquePadId);
/// Reads spi-flash for the specified controller. See hidsys.h for UniquePadId.
/// This doesn't seem to be usable?
Result hiddbgReadSerialFlash(u32 offset, void* buffer, size_t size, u64 UniquePadId);

View File

@ -140,6 +140,94 @@ static Result _hiddbgCmdInU64NoOut(u64 cmd_id, u64 val) {
return rc;
}
Result hiddbgUpdateControllerColor(u32 colorBody, u32 colorButtons, u64 UniquePadId) {
if (hosversionBefore(3,0,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
IpcCommand c;
ipcInitialize(&c);
struct {
u64 magic;
u64 cmd_id;
u32 colorBody;
u32 colorButtons;
u64 UniquePadId;
} *raw;
raw = serviceIpcPrepareHeader(&g_hiddbgSrv, &c, sizeof(*raw));
raw->magic = SFCI_MAGIC;
raw->cmd_id = 221;
raw->colorBody = colorBody;
raw->colorButtons = colorButtons;
raw->UniquePadId = UniquePadId;
Result rc = serviceIpcDispatch(&g_hiddbgSrv);
if (R_SUCCEEDED(rc)) {
IpcParsedCommand r;
struct {
u64 magic;
u64 result;
} *resp;
serviceIpcParse(&g_hiddbgSrv, &r, sizeof(*resp));
resp = r.Raw;
rc = resp->result;
}
return rc;
}
Result hiddbgUpdateDesignInfo(u32 colorBody, u32 colorButtons, u32 colorLeftGrip, u32 colorRightGrip, u8 inval, u64 UniquePadId) {
if (hosversionBefore(5,0,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
IpcCommand c;
ipcInitialize(&c);
struct {
u64 magic;
u64 cmd_id;
u32 colorBody;
u32 colorButtons;
u32 colorLeftGrip;
u32 colorRightGrip;
u8 inval;
u64 UniquePadId;
} *raw;
raw = serviceIpcPrepareHeader(&g_hiddbgSrv, &c, sizeof(*raw));
raw->magic = SFCI_MAGIC;
raw->cmd_id = 224;
raw->colorBody = colorBody;
raw->colorButtons = colorButtons;
raw->colorLeftGrip = colorLeftGrip;
raw->colorRightGrip = colorRightGrip;
raw->inval = inval;
raw->UniquePadId = UniquePadId;
Result rc = serviceIpcDispatch(&g_hiddbgSrv);
if (R_SUCCEEDED(rc)) {
IpcParsedCommand r;
struct {
u64 magic;
u64 result;
} *resp;
serviceIpcParse(&g_hiddbgSrv, &r, sizeof(*resp));
resp = r.Raw;
rc = resp->result;
}
return rc;
}
static Result _hiddbgReadSerialFlash(TransferMemory *tmem, u32 offset, u64 size, u64 UniquePadId) {
IpcCommand c;
ipcInitialize(&c);