Hardware calibration: Difference between revisions
Jump to navigation
Jump to search
m forgot to link this |
No edit summary |
||
| Line 97: | Line 97: | ||
! Size | ! Size | ||
! Description | ! Description | ||
|- | |||
| 0x14 | |||
| 0x08 | |||
| [[#Circle_pad|Circle pad]] | |||
|- | |- | ||
| 0x30 | | 0x30 | ||
| Line 104: | Line 108: | ||
| 0x218 | | 0x218 | ||
| 0x06 | | 0x06 | ||
| Programmable | | Programmable Infrared Transmitter (PIT) | ||
|- | |||
| 0x220 | |||
| 0x214 | |||
| [[#3D filters|3D filters]] | |||
|- | |||
| 0x4E0 | |||
| 0x18 | |||
| [[#Circle_pad_extra|Circle pad extra]] | |||
|- | |- | ||
| 0x540 | | 0x540 | ||
| Line 112: | Line 124: | ||
| 0x550 | | 0x550 | ||
| 0x04 | | 0x04 | ||
| 3D screen (ULCD) delay | | [[#ULCD_delay|3D screen (ULCD) delay]] | ||
|- | |- | ||
| 0x560 | | 0x560 | ||
| 0x0A | | 0x0A | ||
| Microphone echo | | [[#Microphone echo cancel|Microphone echo cancellation]] | ||
|- | |- | ||
| 0x570 | | 0x570 | ||
| 0x10E | | 0x10E | ||
| Power saving mode (ABL) extra | | [[#ABL|Power saving mode (ABL) extra]] | ||
|- | |- | ||
| 0x680 | | 0x680 | ||
| Line 132: | Line 144: | ||
=Data block formats= | =Data block formats= | ||
==Circle pad== | |||
{| class="wikitable" border="1" | |||
! Offset | |||
! Description | |||
|- | |||
| 0x00 | |||
| s16 CenterX | |||
|- | |||
| 0x02 | |||
| s16 CenterY | |||
|} | |||
==Camera position== | ==Camera position== | ||
| Line 197: | Line 221: | ||
| 0x88 | | 0x88 | ||
| s16 ccmPosition | | s16 ccmPosition | ||
|} | |||
==3D filters== | |||
{| class="wikitable" border="1" | |||
! Offset | |||
! Description | |||
|- | |||
| 0x00 | |||
| u16 SpecialFilter[0x100] | |||
|- | |||
| 0x200 | |||
| u32 IIRSurroundFilter[5] | |||
|} | |||
==Circle pad extra== | |||
{| class="wikitable" border="1" | |||
! Offset | |||
! Description | |||
|- | |||
| 0x00 | |||
| float ScaleX | |||
|- | |||
| 0x04 | |||
| float ScaleY | |||
|- | |||
| 0x08 | |||
| s16 MaxX | |||
|- | |||
| 0x0A | |||
| s16 MinX | |||
|- | |||
| 0x0C | |||
| s16 MaxY | |||
|- | |||
| 0x0E | |||
| s16 MinY | |||
|- | |||
| 0x10 | |||
| s16 type | |||
|- | |||
| 0x12 | |||
| u8 unknown_padding[6] | |||
|} | |||
==ULCD delay== | |||
{| class="wikitable" border="1" | |||
! Offset | |||
! Description | |||
|- | |||
| 0x00 | |||
| u8 To2D | |||
|- | |||
| 0x01 | |||
| u8 To3D | |||
|} | |||
==Microphone echo cancel== | |||
{| class="wikitable" border="1" | |||
! Offset | |||
! Description | |||
|- | |||
| 0x00 | |||
| s8 params[8] | |||
|} | |||
==ABL== | |||
{| class="wikitable" border="1" | |||
! Offset | |||
! Description | |||
|- | |||
| 0x00 | |||
| u8 MaxInertia | |||
|- | |||
| 0x01 | |||
| u8 pad | |||
|- | |||
| 0x02 | |||
| u16 PWM_CNT_EX | |||
|- | |||
| 0x04 | |||
| u32 Histogram1 | |||
|- | |||
| 0x08 | |||
| u32 Histogram2 | |||
|- | |||
| 0x0C | |||
| u32 adjust[0x40] | |||
|} | |} | ||
Revision as of 02:40, 24 September 2017
File format
The file consists out of a 0x200 big header (though the actual header is only 0x30 bytes, the rest is zerofilled), plus data whose size is indicated in the header.
Header
| Offset | Size | Description |
|---|---|---|
| 0x0 | 0x4 | Magic "CCAL" |
| 0x4 | 0x4 | Version |
| 0x8 | 0x4 | Data size, always 0x7D0 |
| 0xC | 0x2? | ??? |
| 0xE | 0x2 | Bitmask of successful Aging tests |
| 0x10 | 0x20 | On devunits and if 0x1FF81006 is 3 or 4 or 7 or 8 or 9 then SHA256,
otherwise HMACSHA256 signature of the data section |
| 0x30 | 0x1D0 | Zerofilled |
Aging masks
| Bit | Description |
|---|---|
| 0 | FCRAM |
| 1 | LCD flicker (always successful) |
| 2 | Camera |
| 3 | Touch panel (always successful) |
| 4 | Circle pad (analog stick) |
| 5 | Codec |
| 6 | Gyroscope |
| 7 | RTC |
| 8 | Accelerometer |
| 9 | Surround |
| A | Power saving mode (ABL) |
| B | 3D screen (ULCD) |
| C | Backlight PWM |
| D | Analog stick A (???) |
| E | Camera extensions |
| F | Power saving mode (ABL) in legacy (DSi/GBA) mode |
Data blocks
| Offset | Size | Description |
|---|---|---|
| 0x14 | 0x08 | Circle pad |
| 0x30 | 0x8C | Camera position |
| 0x218 | 0x06 | Programmable Infrared Transmitter (PIT) |
| 0x220 | 0x214 | 3D filters |
| 0x4E0 | 0x18 | Circle pad extra |
| 0x540 | 0x0A | MCU |
| 0x550 | 0x04 | 3D screen (ULCD) delay |
| 0x560 | 0x0A | Microphone echo cancellation |
| 0x570 | 0x10E | Power saving mode (ABL) extra |
| 0x680 | 0x0A | CStick (Right stick) |
| 0x690 | 0x1A | Q Tracking Module (QTM) |
Data block formats
Circle pad
| Offset | Description |
|---|---|
| 0x00 | s16 CenterX |
| 0x02 | s16 CenterY |
Camera position
| Offset | Description |
|---|---|
| 0x00 | u32 flags |
| 0x04 | float scale |
| 0x08 | float RotationZ |
| 0x0C | float TranslationX |
| 0x10 | float TranslationY |
| 0x14 | float RotationX |
| 0x18 | float RotationY |
| 0x1C | float ViewAngleRight |
| 0x20 | float ViewAngleLeft |
| 0x24 | float ChartDistance(???) |
| 0x28 | float CameraDistance |
| 0x2C | s16 ImageWidth |
| 0x2E | s16 ImageHeight |
| 0x30 | u8 reserved[0x10] |
| 0x40 | u8 ???[0x40] |
| 0x80 | s16 aeBaseTarget(???) |
| 0x82 | s16 kRL |
| 0x84 | s16 kGL |
| 0x86 | s16 kBL |
| 0x88 | s16 ccmPosition |
3D filters
| Offset | Description |
|---|---|
| 0x00 | u16 SpecialFilter[0x100] |
| 0x200 | u32 IIRSurroundFilter[5] |
Circle pad extra
| Offset | Description |
|---|---|
| 0x00 | float ScaleX |
| 0x04 | float ScaleY |
| 0x08 | s16 MaxX |
| 0x0A | s16 MinX |
| 0x0C | s16 MaxY |
| 0x0E | s16 MinY |
| 0x10 | s16 type |
| 0x12 | u8 unknown_padding[6] |
ULCD delay
| Offset | Description |
|---|---|
| 0x00 | u8 To2D |
| 0x01 | u8 To3D |
Microphone echo cancel
| Offset | Description |
|---|---|
| 0x00 | s8 params[8] |
ABL
| Offset | Description |
|---|---|
| 0x00 | u8 MaxInertia |
| 0x01 | u8 pad |
| 0x02 | u16 PWM_CNT_EX |
| 0x04 | u32 Histogram1 |
| 0x08 | u32 Histogram2 |
| 0x0C | u32 adjust[0x40] |
Reading
If 0x1FF81006 is 3 or 4 or 7 or 8 or 9 then the callibration data is read from the EEPROM using the i2c:EEP service command 0x001000C0, using offset 0x000 for HWCAL0, and offset 0x800 for HWCAL1.
Otherwise attempt is made to read CTRNAND:/ro/sys/HWCAL(0|1).dat instead.