diff --git a/include/arm11/hardware/i2c.h b/include/arm11/hardware/i2c.h index ca34cf6..a9c298b 100644 --- a/include/arm11/hardware/i2c.h +++ b/include/arm11/hardware/i2c.h @@ -97,32 +97,3 @@ * @return Returns true on success and false on failure. */ bool I2C_writeReg(I2cDevice devId, u8 regAddr, u8 data); - - -static inline u8 i2cmcu_readreg_hid_irq(void) -{ - u8 data; - if(!I2C_readRegBuf(I2C_DEV_MCU, 0x10, &data, 1)) return 0; - return data; -} - -static inline u8 i2cmcu_readreg_hid_held(void) -{ - u8 data[19]; - if(!I2C_readRegBuf(I2C_DEV_MCU, 0x7F, data, sizeof(data))) return 0; - return data[18]; -} - -static inline bool i2cmcu_lcd_backlight_poweron(void) -{ - return I2C_writeReg(I2C_DEV_MCU, 0x22, 1<<5 | 1<<3); // bit3 = lower screen, bit5 = upper -} - - -#define MCU_HID_POWER_BUTTON_PRESSED (1u) -#define MCU_HID_POWER_BUTTON_LONG_PRESSED (1u<<1) -#define MCU_HID_HOME_BUTTON_PRESSED (1u<<2) -#define MCU_HID_HOME_BUTTON_RELEASED (1u<<3) -#define MCU_HID_HOME_BUTTON_NOT_HELD (1u<<1) -#define MCU_HID_SHELL_GOT_CLOSED (1u<<5) -#define MCU_HID_SHELL_GOT_OPENED (1u<<6) diff --git a/include/arm11/hardware/mcu.h b/include/arm11/hardware/mcu.h index d4dde5b..53bdbd7 100644 --- a/include/arm11/hardware/mcu.h +++ b/include/arm11/hardware/mcu.h @@ -21,6 +21,15 @@ #include "types.h" +#define MCU_HID_POWER_BUTTON_PRESSED (1u) +#define MCU_HID_POWER_BUTTON_LONG_PRESSED (1u<<1) +#define MCU_HID_HOME_BUTTON_PRESSED (1u<<2) +#define MCU_HID_HOME_BUTTON_RELEASED (1u<<3) +#define MCU_HID_HOME_BUTTON_NOT_HELD (1u<<1) +#define MCU_HID_SHELL_GOT_CLOSED (1u<<5) +#define MCU_HID_SHELL_GOT_OPENED (1u<<6) + + void MCU_init(void); void MCU_disableLEDs(void); @@ -32,3 +41,6 @@ bool MCU_readBatteryChargeState(void); u8 MCU_readSystemModel(void); void MCU_readRTC(void *rtc); +u8 MCU_readReceivedIrqs(void); +u8 MCU_readHidHeld(void); +bool MCU_powerOnLcdBacklights(void); diff --git a/source/arm11/hardware/hid.c b/source/arm11/hardware/hid.c index c192793..1fe9b74 100644 --- a/source/arm11/hardware/hid.c +++ b/source/arm11/hardware/hid.c @@ -23,7 +23,7 @@ #include "types.h" #include "mem_map.h" #include "arm11/hardware/hid.h" -#include "arm11/hardware/i2c.h" +#include "arm11/hardware/mcu.h" #include "arm11/hardware/interrupt.h" #include "arm11/hardware/gpio.h" @@ -55,10 +55,11 @@ static void updateMcuIrqState(void) { + // TODO: We should probably disable IRQs temporarily here. if(!mcuIrq) return; mcuIrq = false; - const u32 state = (u32)i2cmcu_readreg_hid_irq(); + const u32 state = (u32)MCU_readReceivedIrqs(); u32 tmp = powerWifiState; tmp |= state & 3; @@ -92,9 +93,7 @@ bool hidIsHomeButtonHeldRaw(void) { - u8 buf[19]; - if(!I2C_readRegBuf(I2C_DEV_MCU, 0x7F, buf, 19)) return false; - return !(buf[18] & 1u<<1); + return !(MCU_readHidHeld() & 1u<<1); } void hidScanInput(void) diff --git a/source/arm11/hardware/mcu.c b/source/arm11/hardware/mcu.c index 7de6a4c..c1b5093 100644 --- a/source/arm11/hardware/mcu.c +++ b/source/arm11/hardware/mcu.c @@ -114,4 +114,22 @@ I2C_readRegBuf(I2C_DEV_MCU, RegRTC, rtc, 8); } +u8 MCU_readReceivedIrqs(void) +{ + u8 data; + // This reg is actually 4 bytes big but we don't use all of it for now. + if(!I2C_readRegBuf(I2C_DEV_MCU, 0x10, &data, 1)) return 0; + return data; +} +u8 MCU_readHidHeld(void) +{ + u8 data[19]; + if(!I2C_readRegBuf(I2C_DEV_MCU, 0x7F, data, sizeof(data))) return 0xFF; + return data[18]; +} + +bool MCU_powerOnLcdBacklights(void) +{ + return I2C_writeReg(I2C_DEV_MCU, 0x22, 1<<5 | 1<<3); // bit3 = lower screen, bit5 = upper +}