Implement READ PMA command.
This commit is contained in:
@@ -2149,6 +2149,21 @@ cdrom_get_current_subcodeq_playstatus(cdrom_t *dev, uint8_t *b)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
cdrom_read_pma(const cdrom_t *dev, uint8_t *b, const int max_len)
|
||||||
|
{
|
||||||
|
if (max_len < 4)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
// This is exactly what a blank CD-R returns, no PMA, seems only CD-RWs have PMA?
|
||||||
|
b[0] = 0x00; /* PMA Data Length (MSB) */
|
||||||
|
b[1] = 0x02; /* PMA Data Length (LSB) */
|
||||||
|
b[2] = 0x00; /* Reserved */
|
||||||
|
b[3] = 0x00; /* Reserved */
|
||||||
|
|
||||||
|
return 4;
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
cdrom_read_toc(const cdrom_t *dev, uint8_t *b, const int type,
|
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)
|
const uint8_t start_track, const int msf, const int max_len)
|
||||||
|
|||||||
@@ -446,6 +446,7 @@ extern void cdrom_get_current_subcodeq(cdrom_t *dev, uint8_t *b);
|
|||||||
extern uint8_t cdrom_get_current_subcodeq_playstatus(cdrom_t *dev, uint8_t *b);
|
extern uint8_t cdrom_get_current_subcodeq_playstatus(cdrom_t *dev, uint8_t *b);
|
||||||
extern int cdrom_read_toc(const cdrom_t *dev, uint8_t *b, const int type,
|
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);
|
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_toc_sony(const cdrom_t *dev, uint8_t *b, const uint8_t start_track,
|
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);
|
const int msf, const int max_len);
|
||||||
#ifdef USE_CDROM_MITSUMI
|
#ifdef USE_CDROM_MITSUMI
|
||||||
|
|||||||
@@ -2658,6 +2658,11 @@ scsi_cdrom_command(scsi_common_t *sc, const uint8_t *cdb)
|
|||||||
scsi_cdrom_set_buf_len(dev, BufLen, &len);
|
scsi_cdrom_set_buf_len(dev, BufLen, &len);
|
||||||
scsi_cdrom_data_command_finish(dev, len, len, len, 0);
|
scsi_cdrom_data_command_finish(dev, len, len, len, 0);
|
||||||
}
|
}
|
||||||
|
} 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
|
} else
|
||||||
scsi_cdrom_invalid_field(dev, toc_format);
|
scsi_cdrom_invalid_field(dev, toc_format);
|
||||||
break;
|
break;
|
||||||
|
|||||||
Reference in New Issue
Block a user