MCUHWC:ReadRegister

Request

Index Word Description
0 Header code [0x00010082]
1 u8 register
2 size
3 Descriptor for mapping a write-only buffer in the target process
4 data pointer

Response

Index Word Description
0 Header code
1 Result code

Description

This is just a wrapper for I2C command 0x001200C2 with DeviceID 3

Registers

ID Info Description
0x04

0x05

size=1, rw Top/bottom screen flicker
0x08 size=1, ro Raw 3D slider state
0x09 size=1, ro Volume slider state (0x00 - 0x3F)

This is the same value returned by MCUHWC:GetSoundVolume

0x0B size=1, ro Battery percentage
0x0D size=1, ro System voltage
0x0F size=1, ro Flags (it changes when plugging/unplugging charger)
0x20 size=1, wo(?) MCU power register (0xFF is instant depower, 0x01 is poweroff, 0x02 is reboot)
0x22 size=1, rw LCD (power?) related register, AND'd with 0x3C
0x27 size=1, ro Raw volume slider state
0x28 size=1, ro 3D slider state(?) (0xFF if 3D is not enabled(?))
0x29 size=dynamic(?), rw Repeat register, any byte written here gets repeated indefinitely(?)
0x2A size=1, rw Wifi LED state, non-0 value turns on the Wifi LED, AND'd with 0x0F
0x2B size=1, rw Camera LED state, 0, 3, 6-0xF = off, 1 = slowly blinking, 2 = constantly on, 4 = flash once, 5 = delay before changing to 2
0x2C size=1, rw 3D LED state, always AND'd with 0x0F
0x2D size=??, ro(?) ???
0x30 size=6(?), rw Hexadecimal RTC (0x30 is seconds, 0x31 is minutes, 0x32 is most likely hours)
0x3D

(bugs out reg. 0x3E)

size=2, ro RTC tick counter (resets to 0 when the seconds increase)
0x3F size=1, rw Peripheral power related? bit0 seems to depower everything, and pressing the power key instantly turns the 3DS off
0x46 size=1, ro Gyro Y(?) axis rotation (0x00 = flat, 0x40 = 3DS standing on right side, 0xBE = 3DS standing on left side)
0x48 size=1, ro Gyro Z(?) axis rotation (0x00 = flat, 0x40 = 3DS standing vertically, 0xBE = 3DS base is vertically upside-down)
0x4A size=1, ro Gyro X(?) axis rotation (0x00 = 3DS standing vertically, 0x40 = face-down flat, 0xBE = flat)
0x4F size=6(?), ?? ??? (reading past 6th byte is FF-filled)
0x60 size=0x100, ro (first byte is wo) Looping queue register

Writing to first byte resets the queue position to the nth element Reading from this register causes the values to shift up by one byte, and returns read-1 bytes from the bottom of the stack

0x61 size=dynamic(?), rw Writing to this register pushes values on top of reg. 0x60's stack (most likely in byte order(?))
0x7F size=19(?), ro(?) ???

byte 06: battery related? (seems to decrase while charging and increase while discharging)

byte 10: power LED related? 0 is off, 1 is red

byte 13: RGB LED red factor

byte 14: RGB LED green factor

byte 15: RGB LED blue factor

byte 17: Wifi LED brightness

byte 18:

 bit0: unset while power button is held,
 bit1: unset while home button is held,
 bit2: unset while Wifi slider is held,
 bit4: unset when charger is plugged in,
 bit6: unset when charging LED is active
 
 this byte is reset to 0 before an svcBreak takes effect