diff --git a/libctru/include/3ds/services/mcuhwc.h b/libctru/include/3ds/services/mcuhwc.h index 86ae53d..d56039e 100644 --- a/libctru/include/3ds/services/mcuhwc.h +++ b/libctru/include/3ds/services/mcuhwc.h @@ -4,6 +4,16 @@ */ #pragma once +typedef enum +{ + LED_NORMAL = 1, ///< The normal mode of the led + LED_SLEEP_MODE, ///< The led pulses slowly as it does in the sleep mode + LED_OFF, ///< Switch off power led + LED_RED, ///< Red state of the led + LED_BLUE, ///< Blue state of the led + LED_BLINK_RED, ///< Blinking red state of power led and notification led +}powerLedState; + /// Initializes mcuHwc. Result mcuHwcInit(void); @@ -11,7 +21,7 @@ Result mcuHwcInit(void); void mcuHwcExit(void); /** - * @brief Reads data from a mcuHwc Register + * @brief Reads data from an i2c device3 register * @param reg Register number. See https://www.3dbrew.org/wiki/I2C_Registers#Device_3 for more info * @param data Pointer to write the data to. * @param size Size of data to be read @@ -19,7 +29,7 @@ void mcuHwcExit(void); Result mcuHwcReadRegister(u8 reg, void *data, u32 size); /** - * @brief Writes data to a mcuHwc Register + * @brief Writes data to a i2c device3 register * @param reg Register number. See https://www.3dbrew.org/wiki/I2C_Registers#Device_3 for more info * @param data Pointer to write the data to. * @param size Size of data to be written @@ -43,3 +53,21 @@ Result mcuHwcGetBatteryLevel(u8 *level); * @param level Pointer to write the slider level to. */ Result mcuHwcGetSoundSliderLevel(u8 *level); + +/** + * @brief Sets Wifi LED state + * @param state State of Wifi LED. (True/False) + */ +Result mcuHwcSetWifiLedState(bool state); + +/** + * @brief Sets Power LED state + * @param state powerLedState State of power LED. + */ +Result mcuHwcSetPowerLedState(powerLedState state); + +/** + * @brief Gets 3d slider level + * @param level Pointer to write 3D slider level to. + */ +Result mcuHwcGet3dSliderLevel(u8 *level); diff --git a/libctru/source/services/mcuhwc.c b/libctru/source/services/mcuhwc.c index dc7550f..50d29ac 100644 --- a/libctru/source/services/mcuhwc.c +++ b/libctru/source/services/mcuhwc.c @@ -78,6 +78,32 @@ Result mcuHwcGetBatteryLevel(u8 *level) return (Result)cmdbuf[1]; } +Result mcuHwcSetPowerLedState(powerLedState state) +{ + Result ret = 0; + u32 *cmdbuf = getThreadCommandBuffer(); + + cmdbuf[0] = IPC_MakeHeader(0x6,2,0); // 0x60040 + cmdbuf[1] = state; + + if(R_FAILED(ret = svcSendSyncRequest(mcuHwcHandle)))return ret; + + return (Result)cmdbuf[1]; +} + +Result mcuHwcSetWifiLedState(bool state) +{ + Result ret = 0; + u32 *cmdbuf = getThreadCommandBuffer(); + + cmdbuf[0] = IPC_MakeHeader(0x7,0,0); // 0x70000 + cmdbuf[1] = state; + + if(R_FAILED(ret = svcSendSyncRequest(mcuHwcHandle)))return ret; + + return (Result)cmdbuf[1]; +} + Result mcuHwcGetSoundSliderLevel(u8 *level) { Result ret = 0; @@ -90,4 +116,9 @@ Result mcuHwcGetSoundSliderLevel(u8 *level) *level = cmdbuf[2]; return (Result)cmdbuf[1]; +} + +Result mcuHwcGet3dSliderLevel(u8 *level) +{ + return mcuHwcReadRegister(8, &level, 1); } \ No newline at end of file