Implement READ ATIP command.
This commit is contained in:
@@ -2164,6 +2164,50 @@ cdrom_read_pma(const cdrom_t *dev, uint8_t *b, const int max_len)
|
||||
return 4;
|
||||
}
|
||||
|
||||
int
|
||||
cdrom_read_atip(const cdrom_t *dev, uint8_t *b, const int max_len)
|
||||
{
|
||||
if (max_len < 28)
|
||||
return -1;
|
||||
|
||||
b[ 0] = 0x00; /* ATIP Data Length (MSB) */
|
||||
b[ 1] = 0x1a; /* ATIP Data Length (LSB) */
|
||||
b[ 2] = 0x00; /* Reserved */
|
||||
b[ 3] = 0x00; /* Reserved */
|
||||
// Special Information 1
|
||||
b[ 4] = 0xd0; /* Indicative Target Writing Power, Reference Speed */
|
||||
b[ 5] = 0x00; /* URU */
|
||||
b[ 6] = 0x98; /* 1, Disc Type, Disc Sub-Type, A1 Valid, A2 Valid, A3 Valid*/
|
||||
b[ 7] = 0x00; /* Reserved*/
|
||||
// Special Information 2
|
||||
b[ 8] = 0x61; /* ATIP Start Time of Lead-in (Min) */
|
||||
b[ 9] = 0x1a; /* ATIP Start Time of Lead-in (Sec) */
|
||||
b[10] = 0x42; /* ATIP Start Time of Lead-in (Frame) */
|
||||
b[11] = 0x00; /* Reserved */
|
||||
// Special Information 3
|
||||
b[12] = 0x4f; /* ATIP Last Possible Start of Lead-out (Min) */
|
||||
b[13] = 0x3b; /* ATIP Last Possible Start of Lead-out (Sec) */
|
||||
b[14] = 0x47; /* ATIP Last Possible Start of Lead-out (Frame) */
|
||||
b[15] = 0x00; /* Reserved */
|
||||
// Additional Information 1
|
||||
b[16] = 0x00; /* A1 Values */
|
||||
b[17] = 0x00; /* A1 Values */
|
||||
b[18] = 0x80; /* A1 Values */
|
||||
b[19] = 0x00; /* Reserved */
|
||||
// Additional Information 2
|
||||
b[20] = 0x00; /* A2 Values */
|
||||
b[21] = 0x80; /* A2 Values */
|
||||
b[22] = 0x00; /* A2 Values */
|
||||
b[23] = 0x00; /* Reserved */
|
||||
// Additional Information 3
|
||||
b[24] = 0x00; /* A3 Values */
|
||||
b[25] = 0x80; /* A3 Values */
|
||||
b[26] = 0x80; /* A3 Values */
|
||||
b[27] = 0x00; /* Reserved */
|
||||
|
||||
return 28;
|
||||
}
|
||||
|
||||
int
|
||||
cdrom_read_toc(const cdrom_t *dev, uint8_t *b, const int type,
|
||||
const uint8_t start_track, const int msf, const int max_len)
|
||||
|
||||
@@ -447,6 +447,7 @@ extern uint8_t cdrom_get_current_subcodeq_playstatus(cdrom_t *dev, uint8
|
||||
extern int cdrom_read_toc(const cdrom_t *dev, uint8_t *b, const int type,
|
||||
const uint8_t start_track, const int msf, const int max_len);
|
||||
extern int cdrom_read_pma(const cdrom_t *dev, uint8_t *b, const int max_len);
|
||||
extern int cdrom_read_atip(const cdrom_t *dev, uint8_t *b, const int max_len);
|
||||
extern int cdrom_read_toc_sony(const cdrom_t *dev, uint8_t *b, const uint8_t start_track,
|
||||
const int msf, const int max_len);
|
||||
#ifdef USE_CDROM_MITSUMI
|
||||
|
||||
@@ -2661,6 +2661,11 @@ scsi_cdrom_command(scsi_common_t *sc, const uint8_t *cdb)
|
||||
} else if (toc_format == 3 && dev->drv->cd_status == CD_STATUS_BLANK_CDR) {
|
||||
len = cdrom_read_pma(dev->drv, dev->buffer, max_len);
|
||||
|
||||
scsi_cdrom_set_buf_len(dev, BufLen, &len);
|
||||
scsi_cdrom_data_command_finish(dev, len, len, len, 0);
|
||||
} else if (toc_format == 4 && dev->drv->cd_status == CD_STATUS_BLANK_CDR) {
|
||||
len = cdrom_read_atip(dev->drv, dev->buffer, max_len);
|
||||
|
||||
scsi_cdrom_set_buf_len(dev, BufLen, &len);
|
||||
scsi_cdrom_data_command_finish(dev, len, len, len, 0);
|
||||
} else
|
||||
|
||||
Reference in New Issue
Block a user