Difference between revisions of "Nsysccr.rpl"
Jump to navigation
Jump to search
NWPlayer123 (talk | contribs) m |
NWPlayer123 (talk | contribs) (Finished core CCR functions, more to come for HID/CDC) |
||
Line 1: | Line 1: | ||
nsysccr is Nintendo System CCR which interfaces with the IOS-PAD part of IOSU through various /dev nodes. See the [[IOSU#IOS-PAD|IOSU]] wiki page for a list. | nsysccr is Nintendo System CCR which interfaces with the IOS-PAD part of IOSU through various /dev nodes. See the [[IOSU#IOS-PAD|IOSU]] wiki page for a list. | ||
==Reverse Engineered (Pseudo)Code== | ==Reverse Engineered (Pseudo)Code== | ||
+ | ===CCR - Misc. Gamepad === | ||
<syntaxhighlight lang="C"> | <syntaxhighlight lang="C"> | ||
− | void CCREnableFwUpdateMode(void) | + | #define CCR_CDC_Handle 0x10000618 |
+ | #define CCR_IPCBufPool 0x10000620 | ||
+ | |||
+ | #define CCR_ERROR_BASE 0xFFEE0000 | ||
+ | #define CCR_ERROR_NO_BUFPOOL (CCR_ERROR_BASE + 2) | ||
+ | |||
+ | int CCR_IPCBufPoolAllocate(void) //020038AC | ||
+ | { | ||
+ | return IPCBufPoolAllocate(&CCR_IPCBufPool, 0x3A4); | ||
+ | } | ||
+ | |||
+ | void CCR_IPCBufPoolFree(int handle) //020038BC | ||
+ | { | ||
+ | return IPCBufPoolFree(&CCR_IPCBufPool, handle); | ||
+ | } | ||
+ | |||
+ | int CCREnableDrhCheck(int value) //02002D14 | ||
+ | { | ||
+ | int handle = CCR_IPCBufPoolAllocate(); | ||
+ | if (!handle) | ||
+ | return CCR_ERROR_NO_BUFPOOL; | ||
+ | handle[0] = value; | ||
+ | handle[0x80/4] = handle; | ||
+ | handle[0x84/4] = 4; | ||
+ | int ret = IOS_Ioctlv(&CCR_CDC_Handle, 0x385, 1, 0, handle + 0x80); | ||
+ | CCR_IPCBufPoolFree(handle); | ||
+ | return ret; | ||
+ | } | ||
+ | |||
+ | int CCREnablePowerButton(int value) //02002D9C | ||
+ | { | ||
+ | int handle = CCR_IPCBufPoolAllocate(); | ||
+ | if (!handle) | ||
+ | return CCR_ERROR_NO_BUFPOOL; | ||
+ | handle[0] = value; | ||
+ | handle[0x80/4] = handle; | ||
+ | handle[0x84/4] = 4; | ||
+ | int ret = IOS_Ioctlv(&CCR_CDC_Handle, 0x386, 1, 0, handle + 0x80); | ||
+ | CCR_IPCBufPoolFree(handle); | ||
+ | return ret; | ||
+ | } | ||
+ | |||
+ | int CCRSetCompatMode(int value) //02002E24 | ||
+ | { | ||
+ | int handle = CCR_IPCBufPoolAllocate(); | ||
+ | if (!handle) | ||
+ | return CCR_ERROR_NO_BUFPOOL; | ||
+ | handle[0] = value; | ||
+ | handle[0x80/4] = handle; | ||
+ | handle[0x84/4] = 4; | ||
+ | int ret = IOS_Ioctlv(&CCR_CDC_Handle, 0x387, 1, 0, handle + 0x80); | ||
+ | CCR_IPCBufPoolFree(handle); | ||
+ | return ret; | ||
+ | } | ||
+ | |||
+ | void CCREnableFwUpdateMode(void) //020038CC | ||
{ | { | ||
if(bspWrite("CCRH", 0, "Reset") == 0) //bspWrite in coreinit, interfaces with IOS-BSP | if(bspWrite("CCRH", 0, "Reset") == 0) //bspWrite in coreinit, interfaces with IOS-BSP | ||
Line 12: | Line 68: | ||
} | } | ||
− | void CCRDisableFwUpdateMode(void) | + | void CCRDisableFwUpdateMode(void) //02003970 |
{ | { | ||
if(bspWrite("CCRH", 0, "Reset") == 0) //bspWrite in coreinit, interfaces with IOS-BSP | if(bspWrite("CCRH", 0, "Reset") == 0) //bspWrite in coreinit, interfaces with IOS-BSP | ||
Line 21: | Line 77: | ||
OSSleepTicks((int64_t)3 * (OSGetSystemInfo()->busClockSpeed / 4)); | OSSleepTicks((int64_t)3 * (OSGetSystemInfo()->busClockSpeed / 4)); | ||
} | } | ||
− | + | </syntaxhighlight> | |
− | void CCRHIDSetup(void) | + | ===CCRHID - Gamepad Human Interface Device API=== |
+ | <syntaxhighlight lang="C"> | ||
+ | void CCRHIDSetup(void) //02000498 | ||
{ | { | ||
COSInfo(6, "%s() depricated, no need to call\n", "CCRHIDSetup"); //Typo in binary | COSInfo(6, "%s() depricated, no need to call\n", "CCRHIDSetup"); //Typo in binary | ||
Line 28: | Line 86: | ||
} | } | ||
− | void CCRHIDTeardown(void) | + | void CCRHIDTeardown(void) //020004D4 |
{ | { | ||
COSInfo(6, "%s() depricated, no need to call\n", "CCRHIDTeardown"); //Typo in binary | COSInfo(6, "%s() depricated, no need to call\n", "CCRHIDTeardown"); //Typo in binary |
Revision as of 03:15, 16 April 2016
nsysccr is Nintendo System CCR which interfaces with the IOS-PAD part of IOSU through various /dev nodes. See the IOSU wiki page for a list.
Reverse Engineered (Pseudo)Code
CCR - Misc. Gamepad
#define CCR_CDC_Handle 0x10000618
#define CCR_IPCBufPool 0x10000620
#define CCR_ERROR_BASE 0xFFEE0000
#define CCR_ERROR_NO_BUFPOOL (CCR_ERROR_BASE + 2)
int CCR_IPCBufPoolAllocate(void) //020038AC
{
return IPCBufPoolAllocate(&CCR_IPCBufPool, 0x3A4);
}
void CCR_IPCBufPoolFree(int handle) //020038BC
{
return IPCBufPoolFree(&CCR_IPCBufPool, handle);
}
int CCREnableDrhCheck(int value) //02002D14
{
int handle = CCR_IPCBufPoolAllocate();
if (!handle)
return CCR_ERROR_NO_BUFPOOL;
handle[0] = value;
handle[0x80/4] = handle;
handle[0x84/4] = 4;
int ret = IOS_Ioctlv(&CCR_CDC_Handle, 0x385, 1, 0, handle + 0x80);
CCR_IPCBufPoolFree(handle);
return ret;
}
int CCREnablePowerButton(int value) //02002D9C
{
int handle = CCR_IPCBufPoolAllocate();
if (!handle)
return CCR_ERROR_NO_BUFPOOL;
handle[0] = value;
handle[0x80/4] = handle;
handle[0x84/4] = 4;
int ret = IOS_Ioctlv(&CCR_CDC_Handle, 0x386, 1, 0, handle + 0x80);
CCR_IPCBufPoolFree(handle);
return ret;
}
int CCRSetCompatMode(int value) //02002E24
{
int handle = CCR_IPCBufPoolAllocate();
if (!handle)
return CCR_ERROR_NO_BUFPOOL;
handle[0] = value;
handle[0x80/4] = handle;
handle[0x84/4] = 4;
int ret = IOS_Ioctlv(&CCR_CDC_Handle, 0x387, 1, 0, handle + 0x80);
CCR_IPCBufPoolFree(handle);
return ret;
}
void CCREnableFwUpdateMode(void) //020038CC
{
if(bspWrite("CCRH", 0, "Reset") == 0) //bspWrite in coreinit, interfaces with IOS-BSP
COSWarn(1, "Successfully reset host and ENabled fw update\n");
else
COSWarn(1, "FAILED to reset host and enable fw update\n");
COSWarn(1, "Wait 3 seconds for HOST to deatach and attach\n"); //Typo in binary
OSSleepTicks((int64_t)3 * (OSGetSystemInfo()->busClockSpeed / 4));
}
void CCRDisableFwUpdateMode(void) //02003970
{
if(bspWrite("CCRH", 0, "Reset") == 0) //bspWrite in coreinit, interfaces with IOS-BSP
COSWarn(1, "Successfully reset host and DISabled fw update\n");
else
COSWarn(1, "FAILED to reset host and disable fw update\n");
COSWarn(1, "Wait 3 seconds for HOST to deatach and attach\n"); //Typo in binary
OSSleepTicks((int64_t)3 * (OSGetSystemInfo()->busClockSpeed / 4));
}
CCRHID - Gamepad Human Interface Device API
void CCRHIDSetup(void) //02000498
{
COSInfo(6, "%s() depricated, no need to call\n", "CCRHIDSetup"); //Typo in binary
return 0;
}
void CCRHIDTeardown(void) //020004D4
{
COSInfo(6, "%s() depricated, no need to call\n", "CCRHIDTeardown"); //Typo in binary
return 0;
}