pcecd: send status immediately after receiving an invalid command

* pcecd: fix command SAPEP (stop cdda when mode=0)

* pcecd: send status immediately after receiving an invalid command
This commit is contained in:
Sergey Dvodnenko
2020-06-01 20:49:48 +03:00
committed by GitHub
parent e6045bc77e
commit 63182d5ccb
2 changed files with 12 additions and 1 deletions

View File

@@ -82,6 +82,7 @@ public:
int GetStatus(uint8_t* buf);
int SetCommand(uint8_t* buf);
void PendStatus(uint8_t status, uint8_t message);
void SendStatus(uint8_t status, uint8_t message);
private:
toc_t toc;

View File

@@ -721,7 +721,7 @@ void pcecdd_t::CommandExec() {
default:
CommandError(SENSEKEY_ILLEGAL_REQUEST, NSE_INVALID_COMMAND, 0, 0);
PendStatus(PCECD_STATUS_CHECK_COND, 0);
SendStatus(PCECD_STATUS_CHECK_COND, 0);
printf("\x1b[32mPCECD: Command undefined, [0] = %02X, [1] = %02X, [2] = %02X, [3] = %02X, [4] = %02X, [5] = %02X\n\x1b[0m", comm[0], comm[1], comm[2], comm[3], comm[4], comm[5]);
break;
@@ -744,6 +744,16 @@ void pcecdd_t::PendStatus(uint8_t status, uint8_t message) {
has_status = 1;
}
void pcecdd_t::SendStatus(uint8_t status, uint8_t message) {
uint16_t s = ((uint16_t)message << 8) | status;
spi_uio_cmd_cont(UIO_CD_SET);
spi_w(s);
spi_w(0);
DisableIO();
}
void pcecdd_t::LBAToMSF(int lba, msf_t* msf) {
msf->m = (lba / 75) / 60;
msf->s = (lba / 75) % 60;