I2C Registers: Difference between revisions

MarcusD (talk | contribs)
MarcusD (talk | contribs)
Documented stuff and cleaned up a bit more
Line 309: Line 309:
| s
| s
| ro
| ro
| Special HID status flags:
| Received interrupt bitmask, see register 0x18 for possible values 
  bit00: power button pressed
If no interrupt was received this register is 0
  bit01: power button pressed long
  bit02: home button pressed
  bit03: home button released
  bit04: wifi slider pressed
  bit05: shell got closed
  bit06: shell got opened
  bit07: ???, sends srv notification 0x20C
  bit08: charger plugged in
  bit09: charger plugged out
  bit11: ???, signals an event
  bit14: ???, sends srv notification 0x210
  bit15: ???, sends srv notification 0x20F
  bit22: volume slider position changed
If nothing has changed this register is 0
|-
|-
| 0x14
| 0x14
Line 350: Line 336:
| s
| s
| rw
| rw
| Interrupt mask (0=enabled,1=disabled)
| Interrupt mask for register 0x10 (0=enabled,1=disabled)
  bit00: Power button press
  bit01: Power button held (the 3DS turns off regardless after a fixed time)
  bit02: HOME button press
  bit03: HOME button release
  bit04: WiFi switch button
  bit05: Shell close
  bit06: Shell open
  bit07: Fatal hardware condition([[Services#Notifications|?]])
  bit08: Charger removed
  bit09: Charger plugged in
  bit10: ??? (Power Management related?)
   bit11: ??? (HID related)
   bit11: ??? (HID related)
   bit12: Accelerometer update
   bit12: HID update
  bit13: Battery dead(?)
  bit14: ??? (Power Management related?)
  bit15: ??? (Power Management related?)
  bit22: Volume slider position change
  bit24: ??? (???)
  bit25: ??? (???)
  bit26: ??? (???)
  bit27: ??? (???)
  bit28: ??? (???)
  bit29: ??? (???)
   bit30: forced off my mcu sysmodule
   bit30: forced off my mcu sysmodule
   bit31: forced off my mcu sysmodule
   bit31: forced off my mcu sysmodule
Line 434: Line 441:
|-
|-
| 0x29
| 0x29
| dynamic / s
| ds(0x64)
| ro / rw
| ro / rw
| Repeat register, any byte written in the first byte gets repeated indefinitely(?, needs confirmation past 0xFF). The rest of the bytes are read-only. Setting the shared byte of this register (via overflow glitches) will also work, confirming that this is a semi-dynamic register as the first byte is stored in the shared register pool, but the rest of the bytes are fake.
| Empty battery pattern holder, repeats all written bytes
|-
|-
| 0x2A
| 0x2A
Line 472: Line 479:
| s
| s
| rw
| rw
| RTC time (system clock). 7 bytes are read from this. The upper nibble of each byte encodes 10s (BCD), so each byte is post-processed with (byte & 0xF) + (10 * (byte >> 4)). Byte 0 encodes seconds, byte 1 minutes, byte 2 hours, byte 3 is either the current day of the week or current week of month (not used by anything though), byte 4 days, byte 5 months and byte 6 years
| RTC time (system clock). 7 bytes are read from this. The upper nibble of each byte encodes 10s (BCD), so each byte is post-processed with (byte & 0xF) + (10 * (byte >> 4)).
  byte 0: seconds
  byte 1: minutes
  byte 2: hours
  byte 3: current day of the week (unused)
  byte 4: days
  byte 5: months
  byte 6: years
  byte 7: leap year counter (unused)
|-
|-
| 0x37
| 0x37
Line 500: Line 515:
| s
| s
| rw
| rw
| ?
| Pedometer state (?)
|-
|-
| 0x41
| 0x41
Line 563: Line 578:
|-
|-
| 0x4F
| 0x4F
| 6(?)
| 0x156
| ro
| ro
| Unkonwn. Reading past the 6th byte is FF-filled, so register size of 6 is assumed.
| ???
|-
|-
| 0x50
| 0x50
| s
| rw
| ???
|-
| 0x51
| s
| rw
| ???
|-
| 0x52
- 0x57
- 0x57
| s
| s
Line 595: Line 620:
|-
|-
| 0x60
| 0x60
| 0x100
| ds(1)
| ro
| ro
first byte is wo
first byte is wo
Line 603: Line 628:
|-
|-
| 0x61
| 0x61
| 0x100
| ds(0x100)
| rw
| rw
| Writing to this register pushes values on top of register 0x60's stack. Reading from this register doesn't advance the stack.
| Writing to this register pushes values on top of register 0x60's stack. Reading from this register doesn't advance the stack.