diff --git a/libctru/include/3ds/services/mcuhwc.h b/libctru/include/3ds/services/mcuhwc.h index d56039e..fc42aed 100644 --- a/libctru/include/3ds/services/mcuhwc.h +++ b/libctru/include/3ds/services/mcuhwc.h @@ -26,7 +26,7 @@ void mcuHwcExit(void); * @param data Pointer to write the data to. * @param size Size of data to be read */ -Result mcuHwcReadRegister(u8 reg, void *data, u32 size); +Result MCUHWC_ReadRegister(u8 reg, void *data, u32 size); /** * @brief Writes data to a i2c device3 register @@ -34,40 +34,52 @@ Result mcuHwcReadRegister(u8 reg, void *data, u32 size); * @param data Pointer to write the data to. * @param size Size of data to be written */ -Result mcuHwcWriteRegister(u8 reg, const void *data, u32 size); +Result MCUHWC_WriteRegister(u8 reg, const void *data, u32 size); /** * @brief Gets the battery voltage * @param voltage Pointer to write the battery voltage to. */ -Result mcuHwcGetBatteryVoltage(u8 *voltage); +Result MCUHWC_GetBatteryVoltage(u8 *voltage); /** * @brief Gets the battery level * @param level Pointer to write the current battery level to. */ -Result mcuHwcGetBatteryLevel(u8 *level); +Result MCUHWC_GetBatteryLevel(u8 *level); /** * @brief Gets the sound slider level * @param level Pointer to write the slider level to. */ -Result mcuHwcGetSoundSliderLevel(u8 *level); +Result MCUHWC_GetSoundSliderLevel(u8 *level); /** * @brief Sets Wifi LED state * @param state State of Wifi LED. (True/False) */ -Result mcuHwcSetWifiLedState(bool state); +Result MCUHWC_SetWifiLedState(bool state); /** * @brief Sets Power LED state * @param state powerLedState State of power LED. */ -Result mcuHwcSetPowerLedState(powerLedState state); +Result MCUHWC_SetPowerLedState(powerLedState state); /** * @brief Gets 3d slider level * @param level Pointer to write 3D slider level to. */ -Result mcuHwcGet3dSliderLevel(u8 *level); +Result MCUHWC_Get3dSliderLevel(u8 *level); + +/** + * @brief Gets the major MCU firmware version + * @param out Pointer to write the major firmware version to. + */ +Result MCUHWC_GetFwVerHigh(u8 *out); + +/** + * @brief Gets the minor MCU firmware version + * @param out Pointer to write the minor firmware version to. + */ +Result MCUHWC_GetFwVerLow(u8 *out); diff --git a/libctru/source/services/mcuhwc.c b/libctru/source/services/mcuhwc.c index 50d29ac..4e5ba67 100644 --- a/libctru/source/services/mcuhwc.c +++ b/libctru/source/services/mcuhwc.c @@ -18,7 +18,7 @@ void mcuHwcExit(void) svcCloseHandle(mcuHwcHandle); } -Result mcuHwcReadRegister(u8 reg, void* data, u32 size) +Result MCUHWC_ReadRegister(u8 reg, void* data, u32 size) { Result ret = 0; u32 *cmdbuf = getThreadCommandBuffer(); @@ -34,7 +34,7 @@ Result mcuHwcReadRegister(u8 reg, void* data, u32 size) return (Result)cmdbuf[1]; } -Result mcuHwcWriteRegister(u8 reg, const void *data, u32 size) +Result MCUHWC_WriteRegister(u8 reg, const void *data, u32 size) { Result ret = 0; u32 *cmdbuf = getThreadCommandBuffer(); @@ -50,7 +50,7 @@ Result mcuHwcWriteRegister(u8 reg, const void *data, u32 size) return (Result)cmdbuf[1]; } -Result mcuHwcGetBatteryVoltage(u8 *voltage) +Result MCUHWC_GetBatteryVoltage(u8 *voltage) { Result ret = 0; u32 *cmdbuf = getThreadCommandBuffer(); @@ -64,7 +64,7 @@ Result mcuHwcGetBatteryVoltage(u8 *voltage) return (Result)cmdbuf[1]; } -Result mcuHwcGetBatteryLevel(u8 *level) +Result MCUHWC_GetBatteryLevel(u8 *level) { Result ret = 0; u32 *cmdbuf = getThreadCommandBuffer(); @@ -78,7 +78,7 @@ Result mcuHwcGetBatteryLevel(u8 *level) return (Result)cmdbuf[1]; } -Result mcuHwcSetPowerLedState(powerLedState state) +Result MCUHWC_SetPowerLedState(powerLedState state) { Result ret = 0; u32 *cmdbuf = getThreadCommandBuffer(); @@ -91,7 +91,7 @@ Result mcuHwcSetPowerLedState(powerLedState state) return (Result)cmdbuf[1]; } -Result mcuHwcSetWifiLedState(bool state) +Result MCUHWC_SetWifiLedState(bool state) { Result ret = 0; u32 *cmdbuf = getThreadCommandBuffer(); @@ -104,7 +104,7 @@ Result mcuHwcSetWifiLedState(bool state) return (Result)cmdbuf[1]; } -Result mcuHwcGetSoundSliderLevel(u8 *level) +Result MCUHWC_GetSoundSliderLevel(u8 *level) { Result ret = 0; u32 *cmdbuf = getThreadCommandBuffer(); @@ -118,7 +118,35 @@ Result mcuHwcGetSoundSliderLevel(u8 *level) return (Result)cmdbuf[1]; } -Result mcuHwcGet3dSliderLevel(u8 *level) +Result MCUHWC_Get3dSliderLevel(u8 *level) { - return mcuHwcReadRegister(8, &level, 1); -} \ No newline at end of file + return MCUHWC_ReadRegister(8, &level, 1); +} + +Result MCUHWC_GetFwVerHigh(u8 *out) +{ + Result ret = 0; + u32 *cmdbuf = getThreadCommandBuffer(); + + cmdbuf[0] = IPC_MakeHeader(0x10,0,0); // 0x100000 + + if(R_FAILED(ret = svcSendSyncRequest(mcuHwcHandle)))return ret; + + *out = cmdbuf[2]; + + return (Result)cmdbuf[1]; +} + +Result MCUHWC_GetFwVerLow(u8 *out) +{ + Result ret = 0; + u32 *cmdbuf = getThreadCommandBuffer(); + + cmdbuf[0] = IPC_MakeHeader(0x11,0,0); // 0x110000 + + if(R_FAILED(ret = svcSendSyncRequest(mcuHwcHandle)))return ret; + + *out = cmdbuf[2]; + + return (Result)cmdbuf[1]; +}