Преглед изворни кода

Support READ DEFECT DATA command

Michael McMaster пре 6 година
родитељ
комит
7bd433897b
1 измењених фајлова са 14 додато и 4 уклоњено
  1. 14 4
      lib/SCSI2SD/src/firmware/disk.c

+ 14 - 4
lib/SCSI2SD/src/firmware/disk.c

@@ -524,11 +524,21 @@ int scsiDiskCommand()
 	else if (unlikely(command == 0x37))
 	{
 		// READ DEFECT DATA
-		scsiDev.status = CHECK_CONDITION;
-		scsiDev.target->sense.code = NO_SENSE;
-		scsiDev.target->sense.asc = DEFECT_LIST_NOT_FOUND;
-		scsiDev.phase = STATUS;
+		uint32_t allocLength = (((uint16_t)scsiDev.cdb[7]) << 8) |
+			scsiDev.cdb[8];
+
+		scsiDev.data[0] = 0;
+		scsiDev.data[1] = scsiDev.cdb[1];
+		scsiDev.data[2] = 0;
+		scsiDev.data[3] = 0;
+		scsiDev.dataLen = 4;
 
+		if (scsiDev.dataLen > allocLength)
+		{
+			scsiDev.dataLen = allocLength;
+		}
+
+		scsiDev.phase = DATA_IN;
 	}
 	else
 	{