コード例 #1
0
ファイル: hid.c プロジェクト: DavHer/3DS_ARM9_BOOT
u32 InputWait() {
    static u64 delay = 0;
    u32 pad_state_old = HID_STATE;
    delay = (delay) ? 72 : 128;
    timer_start();
    while (true) {
        u32 pad_state = HID_STATE;
        if (!(pad_state & BUTTON_ANY)) { // no buttons pressed
            u32 special_key = i2cReadRegister(I2C_DEV_MCU, 0x10);
            if (special_key == 0x01)
                return pad_state | BUTTON_POWER;
            else if (special_key == 0x04)
                return pad_state | BUTTON_HOME;
            pad_state_old = pad_state;
            delay = 0;
            continue;
        }
        if ((pad_state == pad_state_old) &&
            (!(pad_state & BUTTON_ARROW) ||
            (delay && (timer_msec() < delay))))
            continue;
        // make sure the key is pressed
        u32 t_pressed = 0;
        for(; (t_pressed < 0x13000) && (pad_state == HID_STATE); t_pressed++);
        if (t_pressed >= 0x13000)
            return pad_state;
    }
}
コード例 #2
0
ファイル: interrupts.c プロジェクト: Nasty35/gbaemu4DS
//---------------------------------------------------------------------------------
void i2cIRQHandler() {
//---------------------------------------------------------------------------------
    int cause = (i2cReadRegister(I2C_PM, I2CREGPM_PWRIF) & 0x3) | (i2cReadRegister(I2C_GPIO, 0x02)<<2);

    switch (cause & 3) {
    case 1:
        if (__powerbuttonCB) {
            __powerbuttonCB();
        } else {
            i2cWriteRegister(I2C_PM, I2CREGPM_RESETFLAG, 1);
            i2cWriteRegister(I2C_PM, I2CREGPM_PWRCNT, 1);
        }
        break;
    case 2:
        writePowerManagement(PM_CONTROL_REG,PM_SYSTEM_PWR);
        break;
    }
}
コード例 #3
0
ファイル: utils.c プロジェクト: FrankenMan/Luma3DS
u32 waitInput(bool isMenu)
{
    static u64 dPadDelay = 0ULL;
    u64 initialValue = 0ULL;
    u32 key,
        oldKey = HID_PAD;

    if(isMenu)
    {
        dPadDelay = dPadDelay > 0ULL ? 87ULL : 143ULL;
        startChrono();
        initialValue = chrono();
    }

    while(true)
    {
        key = HID_PAD;

        if(!key)
        {
            if((i2cReadRegister(I2C_DEV_MCU, 0x10) & 1)== 1) mcuPowerOff();
            oldKey = 0;
            dPadDelay = 0;
            continue;
        }

        if(key == oldKey && (!isMenu || (!(key & DPAD_BUTTONS) || chrono() - initialValue < dPadDelay))) continue;

        //Make sure the key is pressed
        u32 i;
        for(i = 0; i < 0x13000 && key == HID_PAD; i++);
        if(i == 0x13000) break;
    }

    return key;
}