/dev/odm
< /dev
/dev/odm can be used to communicate with the disc drive. Once opened, ioctl() requests can be issued to the interface, which are documented below.
ioctl() interface
0x00 - Unknown
Calls odmMethodStartStopUnit.
0x01 - Unknown
Calls odmMethodStartStopUnit in a loop.
0x02 - ODMAwakeMotor()
0x03 - Unknown
0x04 - ODMGetDriveState()
| Value | ODM State |
|---|---|
| 0 | NONE |
| 1 | INITIAL |
| 2 | AUTHENTICATION |
| 3 | WAIT_FOR_DISC_READY |
| 4 | CAFE_DISC |
| 5 | RVL_DISC |
| 6 | CLEANING_DISC |
| 8 | INVALID_DISC |
| 9 | DIRTY_DISC |
| 10 | NO_DISC |
| 11 | INVALID_DRIVE |
| 12 | FATAL |
| 13 | HARD_FATAL |
| 14 | SHUTDOWN |
0x05 - ODMControlMotor(buffer_io[0] = command)
command: 1 = MOTOR_START; 2 = MOTOR_STOP;
0x06 - ODMGetDiscUniqueCode(buffer_io[0] = type)
type: 1 = Disc serial ID; 2 = UNKNOWN;
0x07 - ODMGetRvlDiscRegion()
0x08 - ODMFrecRead()
Reads "Frec" data from the disc. Used by "カラオケJOYSOUND for Wii U" for trial discs.
IOCTL Response
| Start | Length | Description |
|---|---|---|
| 0x00 | 4 | Slot/section 0 status. |
| 0x04 | 4 | Slot/section 1 status. |
| 0x08 | 4 | Slot/section 2 status. |
| 0x0C | 4 | Slot/section 3 status. |
| 0x10 | 1 | Slot/section 0 data. |
| 0x11 | 1 | Slot/section 1 data. |
| 0x12 | 1 | Slot/section 2 data. |
| 0x13 | 1 | Slot/section 3 data. |
| 0x14 | 0xC | Padding |
0x09 - ODMFrecWriteOneSection()
Writes an 8-bit value to a slot/section (first free?) of the disc's "Frec" data. Used by "カラオケJOYSOUND for Wii U" to mark trial discs.