|
|
@@ -1468,6 +1468,27 @@ byte onReadBuffer(byte mode, uint32_t allocLength)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+/*
|
|
|
+ * On Send Diagnostic
|
|
|
+ */
|
|
|
+byte onSendDiagnostic(byte flags)
|
|
|
+{
|
|
|
+ int self_test = flags & 0x4;
|
|
|
+ LOGN("-SendDiagnostic");
|
|
|
+ LOGHEXN(flags);
|
|
|
+ if(self_test)
|
|
|
+ {
|
|
|
+ // Don't actually do a test, we're good.
|
|
|
+ return SCSI_STATUS_GOOD;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ m_senseKey = SCSI_SENSE_ILLEGAL_REQUEST;
|
|
|
+ m_addition_sense = SCSI_ASC_INVALID_FIELD_IN_CDB;
|
|
|
+ return SCSI_STATUS_CHECK_CONDITION;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
/*
|
|
|
* MsgIn2.
|
|
|
*/
|
|
|
@@ -1718,6 +1739,9 @@ void loop()
|
|
|
LOGN("[ReadBuffer]");
|
|
|
m_sts |= onReadBuffer(cmd[1] & 7, ((uint32_t)cmd[6] << 16) | ((uint32_t)cmd[7] << 8) | cmd[8]);
|
|
|
break;
|
|
|
+ case SCSI_SEND_DIAG:
|
|
|
+ m_sts |= onSendDiagnostic(cmd[1]);
|
|
|
+ break;
|
|
|
default:
|
|
|
LOGN("[*Unknown]");
|
|
|
m_sts |= SCSI_STATUS_CHECK_CONDITION;
|