ソースを参照

Implement Send Diagnostic

Eric Helgeson 3 年 前
コミット
906b8be9aa
1 ファイル変更24 行追加0 行削除
  1. 24 0
      src/BlueSCSI.cpp

+ 24 - 0
src/BlueSCSI.cpp

@@ -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;