In memory of Ben “bushing” Byer, who passed away on Monday, February 8th, 2016.

Nsysccr.rpl

From WiiUBrew
Revision as of 03:15, 16 April 2016 by NWPlayer123 (talk | contribs) (Finished core CCR functions, more to come for HID/CDC)
Jump to navigation Jump to search

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;
}