mirror of
https://github.com/aaru-dps/Aaru.Server.git
synced 2025-12-16 19:24:27 +00:00
Refactor: Formatting.
This commit is contained in:
@@ -14,26 +14,26 @@
|
||||
|
||||
void ScsiReport(int fd, xmlTextWriterPtr xmlWriter)
|
||||
{
|
||||
unsigned char *sense = NULL;
|
||||
unsigned char *buffer = NULL;
|
||||
int error;
|
||||
int page_len;
|
||||
int removable = FALSE;
|
||||
char user_response = ' ';
|
||||
unsigned char* tmpString;
|
||||
const int testSize512[] = {514,
|
||||
unsigned char *sense = NULL;
|
||||
unsigned char *buffer = NULL;
|
||||
int error;
|
||||
int page_len;
|
||||
int removable = FALSE;
|
||||
char user_response = ' ';
|
||||
unsigned char *tmpString;
|
||||
const int testSize512[] = {514,
|
||||
// Long sector sizes for SuperDisk
|
||||
536, 558,
|
||||
536, 558,
|
||||
// Long sector sizes for 512-byte magneto-opticals
|
||||
600, 610, 630};
|
||||
const int testSize1024[] = {
|
||||
600, 610, 630};
|
||||
const int testSize1024[] = {
|
||||
// Long sector sizes for floppies
|
||||
1026,
|
||||
// Long sector sizes for 1024-byte magneto-opticals
|
||||
1200};
|
||||
const int testSize2048[] = {2380};
|
||||
const int testSize4096[] = {4760};
|
||||
const int testSize8192[] = {9424};
|
||||
const int testSize2048[] = {2380};
|
||||
const int testSize4096[] = {4760};
|
||||
const int testSize8192[] = {9424};
|
||||
|
||||
printf("Querying SCSI INQUIRY...\n");
|
||||
|
||||
@@ -59,13 +59,14 @@ void ScsiReport(int fd, xmlTextWriterPtr xmlWriter)
|
||||
printf("Is the media removable from the reading/writing elements (flash memories ARE NOT removable)? (Y/N): ");
|
||||
scanf("%c", &user_response);
|
||||
printf("\n");
|
||||
} while(user_response != 'Y' && user_response != 'y' && user_response != 'N' && user_response != 'n');
|
||||
}while(user_response != 'Y' && user_response != 'y' && user_response != 'N' && user_response != 'n');
|
||||
|
||||
removable = (user_response == 'Y' || user_response == 'y');
|
||||
}
|
||||
|
||||
xmlTextWriterStartElement(xmlWriter, BAD_CAST DIC_SCSI_INQUIRY_ELEMENT); // <Inquiry>
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "AccessControlCoordinator", "%s", inquiry->ACC ? "true" : "false");
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "AccessControlCoordinator", "%s",
|
||||
inquiry->ACC ? "true" : "false");
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "ACKRequests", "%s", inquiry->ACKREQQ ? "true" : "false");
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "Address16", "%s", inquiry->Addr16 ? "true" : "false");
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "Address32", "%s", inquiry->Addr32 ? "true" : "false");
|
||||
@@ -83,8 +84,10 @@ void ScsiReport(int fd, xmlTextWriterPtr xmlWriter)
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "MediumChanger", "%s", inquiry->MChngr ? "true" : "false");
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "MultiPortDevice", "%s", inquiry->MultiP ? "true" : "false");
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "NormalACA", "%s", inquiry->NormACA ? "true" : "false");
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "PeripheralDeviceType", "%s", DecodePeripheralDeviceType(inquiry->PeripheralDeviceType));
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "PeripheralQualifier", "%s", DecodePeripheralQualifier(inquiry->PeripheralQualifier));
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "PeripheralDeviceType", "%s",
|
||||
DecodePeripheralDeviceType(inquiry->PeripheralDeviceType));
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "PeripheralQualifier", "%s",
|
||||
DecodePeripheralQualifier(inquiry->PeripheralQualifier));
|
||||
tmpString = malloc(17);
|
||||
memset(tmpString, 0, 17);
|
||||
memcpy(tmpString, inquiry->ProductIdentification, 16);
|
||||
@@ -97,15 +100,18 @@ void ScsiReport(int fd, xmlTextWriterPtr xmlWriter)
|
||||
free(tmpString);
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "Protection", "%s", inquiry->Protect ? "true" : "false");
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "QAS", "%s", inquiry->QAS ? "true" : "false");
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "RelativeAddressing", "%s", inquiry->RelAddr ? "true" : "false");
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "RelativeAddressing", "%s",
|
||||
inquiry->RelAddr ? "true" : "false");
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "Removable", "%s", inquiry->RMB ? "true" : "false");
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "ResponseDataFormat", "%d", inquiry->ResponseDataFormat);
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "SoftReset", "%s", inquiry->SftRe ? "true" : "false");
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "SPIClocking", "%s", DecodeSPIClocking(inquiry->Clocking));
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "StorageArrayController", "%s", inquiry->SCCS ? "true" : "false");
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "StorageArrayController", "%s",
|
||||
inquiry->SCCS ? "true" : "false");
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "SyncTransfer", "%s", inquiry->Sync ? "true" : "false");
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "TaggedCommandQueue", "%s", inquiry->CmdQue ? "true" : "false");
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "TerminateTaskSupported", "%s", inquiry->TrmTsk ? "true" : "false");
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "TerminateTaskSupported", "%s",
|
||||
inquiry->TrmTsk ? "true" : "false");
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "ThirdPartyCopy", "%s", inquiry->ThreePC ? "true" : "false");
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "TranferDisable", "%s", inquiry->TranDis ? "true" : "false");
|
||||
tmpString = malloc(9);
|
||||
@@ -140,11 +146,11 @@ void ScsiReport(int fd, xmlTextWriterPtr xmlWriter)
|
||||
scanf("%c");
|
||||
}
|
||||
|
||||
int supportsMode6 = FALSE;
|
||||
int supportsMode10 = FALSE;
|
||||
int supportsModeSubpages = FALSE;
|
||||
unsigned char* mode6Response = NULL;
|
||||
unsigned char* mode10Response = NULL;
|
||||
int supportsMode6 = FALSE;
|
||||
int supportsMode10 = FALSE;
|
||||
int supportsModeSubpages = FALSE;
|
||||
unsigned char *mode6Response = NULL;
|
||||
unsigned char *mode10Response = NULL;
|
||||
|
||||
printf("Querying all mode pages and subpages using SCSI MODE SENSE (10)...\n");
|
||||
error = ModeSense10(fd, &mode10Response, &sense, FALSE, TRUE, MODE_PAGE_DEFAULT, 0x3F, 0xFF);
|
||||
@@ -152,13 +158,13 @@ void ScsiReport(int fd, xmlTextWriterPtr xmlWriter)
|
||||
if(error)
|
||||
{
|
||||
printf("Querying all mode pages using SCSI MODE SENSE (10)...\n");
|
||||
error = ModeSense10(fd, &mode10Response, &sense, FALSE, TRUE, MODE_PAGE_DEFAULT, 0x3F, 0x00);
|
||||
error = ModeSense10(fd, &mode10Response, &sense, FALSE, TRUE, MODE_PAGE_DEFAULT, 0x3F, 0x00);
|
||||
if(!error)
|
||||
supportsMode10 = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
supportsMode10 = TRUE;
|
||||
supportsMode10 = TRUE;
|
||||
supportsModeSubpages = TRUE;
|
||||
}
|
||||
|
||||
@@ -171,7 +177,7 @@ void ScsiReport(int fd, xmlTextWriterPtr xmlWriter)
|
||||
if(error)
|
||||
{
|
||||
printf("Querying SCSI MODE SENSE (6)...\n");
|
||||
error = ModeSense6(fd, &mode6Response, &sense, FALSE, MODE_PAGE_DEFAULT, 0x00, 0x00);
|
||||
error = ModeSense6(fd, &mode6Response, &sense, FALSE, MODE_PAGE_DEFAULT, 0x00, 0x00);
|
||||
if(!error)
|
||||
supportsMode6 = TRUE;
|
||||
}
|
||||
@@ -180,13 +186,14 @@ void ScsiReport(int fd, xmlTextWriterPtr xmlWriter)
|
||||
}
|
||||
else
|
||||
{
|
||||
supportsMode6 = TRUE;
|
||||
supportsMode6 = TRUE;
|
||||
supportsModeSubpages = TRUE;
|
||||
}
|
||||
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "SupportsModeSense6", "%s", supportsMode6 ? "true" : "false");
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "SupportsModeSense10", "%s", supportsMode10 ? "true" : "false");
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "SupportsModeSubpages", "%s", supportsModeSubpages ? "true" : "false");
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "SupportsModeSubpages", "%s",
|
||||
supportsModeSubpages ? "true" : "false");
|
||||
|
||||
if(supportsMode6)
|
||||
{
|
||||
@@ -198,12 +205,13 @@ void ScsiReport(int fd, xmlTextWriterPtr xmlWriter)
|
||||
if(supportsMode10)
|
||||
{
|
||||
xmlTextWriterStartElement(xmlWriter, BAD_CAST "ModeSense10Data");
|
||||
xmlTextWriterWriteBase64(xmlWriter, mode10Response, 0, (*(mode10Response + 0) << 8) + *(mode10Response + 1) + 2);
|
||||
xmlTextWriterWriteBase64(xmlWriter, mode10Response, 0,
|
||||
(*(mode10Response + 0) << 8) + *(mode10Response + 1) + 2);
|
||||
xmlTextWriterEndElement(xmlWriter);
|
||||
}
|
||||
|
||||
DecodedMode *decMode = NULL;
|
||||
unsigned char* cdromMode = NULL;
|
||||
DecodedMode *decMode = NULL;
|
||||
unsigned char *cdromMode = NULL;
|
||||
|
||||
if(supportsMode10)
|
||||
decMode = DecodeMode10(mode10Response, inquiry->PeripheralDeviceType);
|
||||
@@ -215,12 +223,16 @@ void ScsiReport(int fd, xmlTextWriterPtr xmlWriter)
|
||||
int page, subpage;
|
||||
|
||||
xmlTextWriterStartElement(xmlWriter, BAD_CAST "ModeSense"); // <ModeSense>
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "BlankCheckEnabled", "%s", decMode->Header.EBC ? "true" : "false");
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "DPOandFUA", "%s", decMode->Header.DPOFUA ? "true" : "false");
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "WriteProtected", "%s", decMode->Header.WriteProtected ? "true" : "false");
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "BlankCheckEnabled", "%s",
|
||||
decMode->Header.EBC ? "true" : "false");
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "DPOandFUA", "%s",
|
||||
decMode->Header.DPOFUA ? "true" : "false");
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "WriteProtected", "%s",
|
||||
decMode->Header.WriteProtected ? "true" : "false");
|
||||
|
||||
if(decMode->Header.BufferedMode > 0)
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "BlankCheckEnabled", "%d", decMode->Header.BufferedMode);
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "BlankCheckEnabled", "%d",
|
||||
decMode->Header.BufferedMode);
|
||||
if(decMode->Header.Speed > 0)
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "Speed", "%d", decMode->Header.Speed);
|
||||
|
||||
@@ -233,7 +245,8 @@ void ScsiReport(int fd, xmlTextWriterPtr xmlWriter)
|
||||
xmlTextWriterStartElement(xmlWriter, BAD_CAST "modePageType");
|
||||
xmlTextWriterWriteFormatAttribute(xmlWriter, BAD_CAST "page", "%d", page);
|
||||
xmlTextWriterWriteFormatAttribute(xmlWriter, BAD_CAST "subpage", "%d", subpage);
|
||||
xmlTextWriterWriteBase64(xmlWriter, decMode->Pages[page][subpage], 0, decMode->pageSizes[page][subpage]);
|
||||
xmlTextWriterWriteBase64(xmlWriter, decMode->Pages[page][subpage], 0,
|
||||
decMode->pageSizes[page][subpage]);
|
||||
xmlTextWriterEndElement(xmlWriter);
|
||||
|
||||
if(page == 0x2A && subpage == 0x00)
|
||||
@@ -268,7 +281,7 @@ void ScsiReport(int fd, xmlTextWriterPtr xmlWriter)
|
||||
printf("Do you have media that you can insert in the drive? (Y/N): ");
|
||||
scanf("%c", &user_response);
|
||||
printf("\n");
|
||||
} while(user_response != 'Y' && user_response != 'y' && user_response != 'N' && user_response != 'n');
|
||||
}while(user_response != 'Y' && user_response != 'y' && user_response != 'N' && user_response != 'n');
|
||||
|
||||
if(user_response == 'Y' || user_response == 'y')
|
||||
{
|
||||
@@ -285,7 +298,7 @@ void ScsiReport(int fd, xmlTextWriterPtr xmlWriter)
|
||||
|
||||
error = TestUnitReady(fd, &sense);
|
||||
int mediaRecognized = TRUE;
|
||||
int leftRetries = 20;
|
||||
int leftRetries = 20;
|
||||
|
||||
if(error)
|
||||
{
|
||||
@@ -319,14 +332,15 @@ void ScsiReport(int fd, xmlTextWriterPtr xmlWriter)
|
||||
|
||||
xmlTextWriterStartElement(xmlWriter, BAD_CAST "testedMediaType"); // <testedMediaType>
|
||||
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "MediaIsRecognized", "%s", mediaRecognized ? "true" : "false");
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "MediaIsRecognized", "%s",
|
||||
mediaRecognized ? "true" : "false");
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "Manufacturer", "%s", mediaManufacturer);
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "MediumTypeName", "%s",mediaName);
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "MediumTypeName", "%s", mediaName);
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "Model", "%s", mediaModel);
|
||||
|
||||
if(mediaRecognized)
|
||||
{
|
||||
uint64_t blocks = 0;
|
||||
uint64_t blocks = 0;
|
||||
uint32_t blockSize = 0;
|
||||
|
||||
printf("Querying SCSI READ CAPACITY...\n");
|
||||
@@ -334,8 +348,10 @@ void ScsiReport(int fd, xmlTextWriterPtr xmlWriter)
|
||||
if(!error)
|
||||
{
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "SupportsReadCapacity", "%s", "true");
|
||||
blocks = (uint64_t)(buffer[0] << 24) + (buffer[1] << 16) + (buffer[2] << 8) + (buffer[3]) + 1;
|
||||
blockSize = (uint32_t)((buffer[4] << 24) + (buffer[5] << 16) + (buffer[6] << 8) + (buffer[7]));
|
||||
blocks = (uint64_t)(buffer[0] << 24) + (buffer[1] << 16) + (buffer[2] << 8) + (buffer[3]) +
|
||||
1;
|
||||
blockSize = (uint32_t)((buffer[4] << 24) + (buffer[5] << 16) + (buffer[6] << 8) +
|
||||
(buffer[7]));
|
||||
}
|
||||
|
||||
printf("Querying SCSI READ CAPACITY (16)...\n");
|
||||
@@ -347,7 +363,8 @@ void ScsiReport(int fd, xmlTextWriterPtr xmlWriter)
|
||||
blocks <<= 32;
|
||||
blocks += (buffer[4] << 24) + (buffer[5] << 16) + (buffer[6] << 8) + (buffer[7]);
|
||||
blocks++;
|
||||
blockSize = (uint32_t)((buffer[8] << 24) + (buffer[9] << 16) + (buffer[10] << 8) + (buffer[11]));
|
||||
blockSize = (uint32_t)((buffer[8] << 24) + (buffer[9] << 16) + (buffer[10] << 8) +
|
||||
(buffer[11]));
|
||||
}
|
||||
|
||||
if(blocks != 0)
|
||||
@@ -361,18 +378,21 @@ void ScsiReport(int fd, xmlTextWriterPtr xmlWriter)
|
||||
|
||||
printf("Querying SCSI MODE SENSE (10)...\n");
|
||||
error = ModeSense10(fd, &mode10Response, &sense, FALSE, TRUE, MODE_PAGE_DEFAULT, 0x3F, 0x00);
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "SupportsModeSense10", "%s", !error ? "true" : "false");
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "SupportsModeSense10", "%s",
|
||||
!error ? "true" : "false");
|
||||
if(!error)
|
||||
{
|
||||
xmlTextWriterStartElement(xmlWriter, BAD_CAST "ModeSense10Data");
|
||||
xmlTextWriterWriteBase64(xmlWriter, mode10Response, 0, (*(mode10Response + 0) << 8) + *(mode10Response + 1) + 2);
|
||||
xmlTextWriterWriteBase64(xmlWriter, mode10Response, 0,
|
||||
(*(mode10Response + 0) << 8) + *(mode10Response + 1) + 2);
|
||||
xmlTextWriterEndElement(xmlWriter);
|
||||
decMode = DecodeMode10(mode10Response, inquiry->PeripheralDeviceType);
|
||||
}
|
||||
|
||||
printf("Querying SCSI MODE SENSE (6)...\n");
|
||||
error = ModeSense6(fd, &mode6Response, &sense, FALSE, MODE_PAGE_DEFAULT, 0x00, 0x00);
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "SupportsModeSense6", "%s", !error ? "true" : "false");
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "SupportsModeSense6", "%s",
|
||||
!error ? "true" : "false");
|
||||
if(!error)
|
||||
{
|
||||
xmlTextWriterStartElement(xmlWriter, BAD_CAST "ModeSense6Data");
|
||||
@@ -384,22 +404,32 @@ void ScsiReport(int fd, xmlTextWriterPtr xmlWriter)
|
||||
|
||||
if(decMode->decoded)
|
||||
{
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "MediumType", "%d", decMode->Header.MediumType);
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "MediumType", "%d",
|
||||
decMode->Header.MediumType);
|
||||
if(decMode->Header.descriptorsLength > 0)
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "Density", "%d", decMode->Header.BlockDescriptors[0].Density);
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "Density", "%d",
|
||||
decMode->Header.BlockDescriptors[0].Density);
|
||||
}
|
||||
|
||||
printf("Trying SCSI READ (6)...\n");
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "SupportsRead", "%s", !Read6(fd, &buffer, &sense, 0, blockSize, 1) ? "true" : "false");
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "SupportsRead", "%s",
|
||||
!Read6(fd, &buffer, &sense, 0, blockSize, 1) ? "true"
|
||||
: "false");
|
||||
|
||||
printf("Trying SCSI READ (10)...\n");
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "SupportsRead10", "%s", !Read10(fd, &buffer, &sense, 0, FALSE, TRUE, FALSE, FALSE, 0, blockSize, 0, 1) ? "true" : "false");
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "SupportsRead10", "%s",
|
||||
!Read10(fd, &buffer, &sense, 0, FALSE, TRUE, FALSE, FALSE, 0,
|
||||
blockSize, 0, 1) ? "true" : "false");
|
||||
|
||||
printf("Trying SCSI READ (12)...\n");
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "SupportsRead12", "%s", !Read12(fd, &buffer, &sense, 0, FALSE, TRUE, FALSE, FALSE, 0, blockSize, 0, 1, FALSE) ? "true" : "false");
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "SupportsRead12", "%s",
|
||||
!Read12(fd, &buffer, &sense, 0, FALSE, TRUE, FALSE, FALSE, 0,
|
||||
blockSize, 0, 1, FALSE) ? "true" : "false");
|
||||
|
||||
printf("Trying SCSI READ (16)...\n");
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "SupportsRead16", "%s", !Read16(fd, &buffer, &sense, 0, FALSE, TRUE, FALSE, 0, blockSize, 0, 1, FALSE) ? "true" : "false");
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "SupportsRead16", "%s",
|
||||
!Read16(fd, &buffer, &sense, 0, FALSE, TRUE, FALSE, 0,
|
||||
blockSize, 0, 1, FALSE) ? "true" : "false");
|
||||
|
||||
uint32_t longBlockSize = blockSize;
|
||||
|
||||
@@ -407,21 +437,24 @@ void ScsiReport(int fd, xmlTextWriterPtr xmlWriter)
|
||||
|
||||
printf("Trying SCSI READ LONG (10)...\n");
|
||||
ReadLong10(fd, &buffer, &sense, FALSE, FALSE, 0, 0xFFFF);
|
||||
if((sense[0] == 0x70 || sense[0] == 0x71) && (sense[2] & 0x0F) == 0x05 && sense[12] == 0x24 && sense[13] == 0x00)
|
||||
if((sense[0] == 0x70 || sense[0] == 0x71) && (sense[2] & 0x0F) == 0x05 && sense[12] == 0x24 &&
|
||||
sense[13] == 0x00)
|
||||
{
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "SupportsReadLong", "%s", "true");
|
||||
supportsReadLong10 = TRUE;
|
||||
if(sense[0] & 0x80 && sense[2] & 0x20)
|
||||
{
|
||||
uint32_t information = (sense[3] << 24) + (sense[4] << 16) + (sense[5] << 8) + sense[6];
|
||||
longBlockSize = 0xFFFF - (information & 0xFFFF);
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "LongBlockSize", "%d", longBlockSize);
|
||||
longBlockSize = 0xFFFF - (information & 0xFFFF);
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "LongBlockSize", "%d",
|
||||
longBlockSize);
|
||||
}
|
||||
}
|
||||
|
||||
printf("Trying SCSI READ LONG (16)...\n");
|
||||
ReadLong16(fd, &buffer, &sense, FALSE, 0, 0xFFFF);
|
||||
if((sense[0] == 0x70 || sense[0] == 0x71) && (sense[2] & 0x0F) == 0x05 && sense[12] == 0x24 && sense[13] == 0x00)
|
||||
if((sense[0] == 0x70 || sense[0] == 0x71) && (sense[2] & 0x0F) == 0x05 && sense[12] == 0x24 &&
|
||||
sense[13] == 0x00)
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "SupportsReadLong16", "%s", "true");
|
||||
|
||||
int i;
|
||||
@@ -498,7 +531,8 @@ void ScsiReport(int fd, xmlTextWriterPtr xmlWriter)
|
||||
printf("Drive supports SCSI READ LONG but I cannot find the correct size. Do you want me to try? (This can take hours) (Y/N): ");
|
||||
scanf("%c", &user_response);
|
||||
printf("\n");
|
||||
} while(user_response != 'Y' && user_response != 'y' && user_response != 'N' && user_response != 'n');
|
||||
}while(user_response != 'Y' && user_response != 'y' && user_response != 'N' &&
|
||||
user_response != 'n');
|
||||
|
||||
if(user_response == 'Y' || user_response == 'y')
|
||||
{
|
||||
@@ -535,7 +569,7 @@ void ScsiReport(int fd, xmlTextWriterPtr xmlWriter)
|
||||
}
|
||||
else
|
||||
{
|
||||
uint64_t blocks = 0;
|
||||
uint64_t blocks = 0;
|
||||
uint32_t blockSize = 0;
|
||||
|
||||
xmlTextWriterStartElement(xmlWriter, BAD_CAST "ReadCapabilities"); // <ReadCapabilities>
|
||||
@@ -545,7 +579,7 @@ void ScsiReport(int fd, xmlTextWriterPtr xmlWriter)
|
||||
if(!error)
|
||||
{
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "SupportsReadCapacity", "%s", "true");
|
||||
blocks = (uint64_t)(buffer[0] << 24) + (buffer[1] << 16) + (buffer[2] << 8) + (buffer[3]) + 1;
|
||||
blocks = (uint64_t)(buffer[0] << 24) + (buffer[1] << 16) + (buffer[2] << 8) + (buffer[3]) + 1;
|
||||
blockSize = (uint32_t)((buffer[4] << 24) + (buffer[5] << 16) + (buffer[6] << 8) + (buffer[7]));
|
||||
}
|
||||
|
||||
@@ -571,7 +605,8 @@ void ScsiReport(int fd, xmlTextWriterPtr xmlWriter)
|
||||
{
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "SupportsModeSense10", "%s", "true");
|
||||
xmlTextWriterStartElement(xmlWriter, BAD_CAST "ModeSense10Data");
|
||||
xmlTextWriterWriteBase64(xmlWriter, mode10Response, 0, (*(mode10Response + 0) << 8) + *(mode10Response + 1) + 2);
|
||||
xmlTextWriterWriteBase64(xmlWriter, mode10Response, 0,
|
||||
(*(mode10Response + 0) << 8) + *(mode10Response + 1) + 2);
|
||||
xmlTextWriterEndElement(xmlWriter);
|
||||
}
|
||||
|
||||
@@ -587,20 +622,28 @@ void ScsiReport(int fd, xmlTextWriterPtr xmlWriter)
|
||||
{
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "MediumType", "%d", decMode->Header.MediumType);
|
||||
if(decMode->Header.descriptorsLength > 0)
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "Density", "%d", decMode->Header.BlockDescriptors[0].Density);
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "Density", "%d",
|
||||
decMode->Header.BlockDescriptors[0].Density);
|
||||
}
|
||||
|
||||
printf("Trying SCSI READ (6)...\n");
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "SupportsRead", "%s", !Read6(fd, &buffer, &sense, 0, blockSize, 1) ? "true" : "false");
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "SupportsRead", "%s",
|
||||
!Read6(fd, &buffer, &sense, 0, blockSize, 1) ? "true" : "false");
|
||||
|
||||
printf("Trying SCSI READ (10)...\n");
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "SupportsRead10", "%s", !Read10(fd, &buffer, &sense, 0, FALSE, TRUE, FALSE, FALSE, 0, blockSize, 0, 1) ? "true" : "false");
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "SupportsRead10", "%s",
|
||||
!Read10(fd, &buffer, &sense, 0, FALSE, TRUE, FALSE, FALSE, 0, blockSize, 0,
|
||||
1) ? "true" : "false");
|
||||
|
||||
printf("Trying SCSI READ (12)...\n");
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "SupportsRead12", "%s", !Read12(fd, &buffer, &sense, 0, FALSE, TRUE, FALSE, FALSE, 0, blockSize, 0, 1, FALSE) ? "true" : "false");
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "SupportsRead12", "%s",
|
||||
!Read12(fd, &buffer, &sense, 0, FALSE, TRUE, FALSE, FALSE, 0, blockSize, 0,
|
||||
1, FALSE) ? "true" : "false");
|
||||
|
||||
printf("Trying SCSI READ (16)...\n");
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "SupportsRead16", "%s", !Read16(fd, &buffer, &sense, 0, FALSE, TRUE, FALSE, 0, blockSize, 0, 1, FALSE) ? "true" : "false");
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "SupportsRead16", "%s",
|
||||
!Read16(fd, &buffer, &sense, 0, FALSE, TRUE, FALSE, 0, blockSize, 0, 1,
|
||||
FALSE) ? "true" : "false");
|
||||
|
||||
uint32_t longBlockSize = blockSize;
|
||||
|
||||
@@ -608,21 +651,23 @@ void ScsiReport(int fd, xmlTextWriterPtr xmlWriter)
|
||||
|
||||
printf("Trying SCSI READ LONG (10)...\n");
|
||||
ReadLong10(fd, &buffer, &sense, FALSE, FALSE, 0, 0xFFFF);
|
||||
if((sense[0] == 0x70 || sense[0] == 0x71) && (sense[2] & 0x0F) == 0x05 && sense[12] == 0x24 && sense[13] == 0x00)
|
||||
if((sense[0] == 0x70 || sense[0] == 0x71) && (sense[2] & 0x0F) == 0x05 && sense[12] == 0x24 &&
|
||||
sense[13] == 0x00)
|
||||
{
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "SupportsReadLong", "%s", "true");
|
||||
supportsReadLong10 = TRUE;
|
||||
if(sense[0] & 0x80 && sense[2] & 0x20)
|
||||
{
|
||||
uint32_t information = (sense[3] << 24) + (sense[4] << 16) + (sense[5] << 8) + sense[6];
|
||||
longBlockSize = 0xFFFF - (information & 0xFFFF);
|
||||
longBlockSize = 0xFFFF - (information & 0xFFFF);
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "LongBlockSize", "%d", longBlockSize);
|
||||
}
|
||||
}
|
||||
|
||||
printf("Trying SCSI READ LONG (16)...\n");
|
||||
ReadLong16(fd, &buffer, &sense, FALSE, 0, 0xFFFF);
|
||||
if((sense[0] == 0x70 || sense[0] == 0x71) && (sense[2] & 0x0F) == 0x05 && sense[12] == 0x24 && sense[13] == 0x00)
|
||||
if((sense[0] == 0x70 || sense[0] == 0x71) && (sense[2] & 0x0F) == 0x05 && sense[12] == 0x24 &&
|
||||
sense[13] == 0x00)
|
||||
xmlTextWriterWriteFormatElement(xmlWriter, BAD_CAST "SupportsReadLong16", "%s", "true");
|
||||
|
||||
int i;
|
||||
@@ -699,7 +744,7 @@ void ScsiReport(int fd, xmlTextWriterPtr xmlWriter)
|
||||
printf("Drive supports SCSI READ LONG but I cannot find the correct size. Do you want me to try? (This can take hours) (Y/N): ");
|
||||
scanf("%c", &user_response);
|
||||
printf("\n");
|
||||
} while(user_response != 'Y' && user_response != 'y' && user_response != 'N' && user_response != 'n');
|
||||
}while(user_response != 'Y' && user_response != 'y' && user_response != 'N' && user_response != 'n');
|
||||
|
||||
if(user_response == 'Y' || user_response == 'y')
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user