+TOC_DATA_TRACK
[reactos.git] / include / ntos / cdrom.h
index 1c6937f..032bf44 100644 (file)
 #define MAXIMUM_NUMBER_TRACKS          100
 #define MAXIMUM_CDROM_SIZE              804
 
+#define TOC_DATA_TRACK 0x04    /* TRACK_DATA.Control */
+#define TOC_LAST_TRACK 0xAA    /* TRACK_DATA.TrackNumber */
+
 typedef struct _TRACK_DATA {
   UCHAR  Reserved;
-  UCHAR  Control : 4;
-  UCHAR  Adr : 4;
-  UCHAR  TrackNumber;
+  UCHAR  Control : 4;  /* bitfield; 0 || TOC_DATA_TRACK */
+  UCHAR  Adr : 4;      /* Q-subchannel info */
+  UCHAR  TrackNumber;  /* CDROM_TOC.FirstTrack or TOC_LAST_TRACK on last+1 track CDROM_TOC.TrackData[CDROM_TOC.LastTrack-1] */
   UCHAR  Reserved1;
-  UCHAR  Address[4];
+  UCHAR  Address[4];   /* big-endian LBA address for TOC_DATA_TRACK; MSF (sometimes BCD-MSF) for audio */
 } TRACK_DATA, *PTRACK_DATA;
 
 typedef struct _CDROM_TOC {
-  UCHAR  Length[2];
-  UCHAR  FirstTrack;
-  UCHAR  LastTrack;
+  UCHAR  Length[2];    /* <='sizeof(CDROM_TOC)-2' or less; it does not count 'Length' itself; little-endian */
+  UCHAR  FirstTrack;   /* based anywhere */
+  UCHAR  LastTrack;    /* last TrackData has TOC_LAST_TRACK; 'LastTrack-FirstTrack+1' is the count */
   TRACK_DATA  TrackData[MAXIMUM_NUMBER_TRACKS];
 } CDROM_TOC, *PCDROM_TOC;