X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/9f7883fa2b78fd7907162987fc65b71d3c6b19fa..77a9df36a77d2523dd2bc24fa17f9f04c6c175c5:/Demos/Device/LowLevel/MassStorage/Lib/SCSI.c?ds=sidebyside diff --git a/Demos/Device/LowLevel/MassStorage/Lib/SCSI.c b/Demos/Device/LowLevel/MassStorage/Lib/SCSI.c index 63f1ec3b4..432678612 100644 --- a/Demos/Device/LowLevel/MassStorage/Lib/SCSI.c +++ b/Demos/Device/LowLevel/MassStorage/Lib/SCSI.c @@ -1,13 +1,13 @@ /* LUFA Library - Copyright (C) Dean Camera, 2010. + Copyright (C) Dean Camera, 2011. dean [at] fourwalledcubicle [dot] com www.lufa-lib.org */ /* - Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com) + Copyright 2011 Dean Camera (dean [at] fourwalledcubicle [dot] com) Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted @@ -41,7 +41,7 @@ /** Structure to hold the SCSI response data to a SCSI INQUIRY command. This gives information about the device's * features and capabilities. */ -SCSI_Inquiry_Response_t InquiryData = +static const SCSI_Inquiry_Response_t InquiryData = { .DeviceType = DEVICE_TYPE_BLOCK, .PeripheralQualifier = 0, @@ -73,7 +73,7 @@ SCSI_Inquiry_Response_t InquiryData = /** Structure to hold the sense data for the last issued SCSI command, which is returned to the host after a SCSI REQUEST SENSE * command is issued. This gives information on exactly why the last command failed to complete. */ -SCSI_Request_Sense_Response_t SenseData = +static SCSI_Request_Sense_Response_t SenseData = { .ResponseCode = 0x70, .AdditionalLength = 0x0A, @@ -150,8 +150,7 @@ bool SCSI_DecodeSCSICommand(void) static bool SCSI_Command_Inquiry(void) { uint16_t AllocationLength = SwapEndian_16(*(uint16_t*)&CommandBlock.SCSICommandData[3]); - uint16_t BytesTransferred = (AllocationLength < sizeof(InquiryData))? AllocationLength : - sizeof(InquiryData); + uint16_t BytesTransferred = MIN(AllocationLength, sizeof(InquiryData)); /* Only the standard INQUIRY data is supported, check if any optional INQUIRY bits set */ if ((CommandBlock.SCSICommandData[1] & ((1 << 0) | (1 << 1))) || @@ -166,12 +165,10 @@ static bool SCSI_Command_Inquiry(void) } /* Write the INQUIRY data to the endpoint */ - Endpoint_Write_Stream_LE(&InquiryData, BytesTransferred, StreamCallback_AbortOnMassStoreReset); - - uint8_t PadBytes[AllocationLength - BytesTransferred]; + Endpoint_Write_Stream_LE(&InquiryData, BytesTransferred, NULL); /* Pad out remaining bytes with 0x00 */ - Endpoint_Write_Stream_LE(&PadBytes, sizeof(PadBytes), StreamCallback_AbortOnMassStoreReset); + Endpoint_Null_Stream((AllocationLength - BytesTransferred), NULL); /* Finalize the stream transfer to send the last packet */ Endpoint_ClearIN(); @@ -190,15 +187,13 @@ static bool SCSI_Command_Inquiry(void) static bool SCSI_Command_Request_Sense(void) { uint8_t AllocationLength = CommandBlock.SCSICommandData[4]; - uint8_t BytesTransferred = (AllocationLength < sizeof(SenseData))? AllocationLength : sizeof(SenseData); + uint8_t BytesTransferred = MIN(AllocationLength, sizeof(SenseData)); /* Send the SENSE data - this indicates to the host the status of the last command */ - Endpoint_Write_Stream_LE(&SenseData, BytesTransferred, StreamCallback_AbortOnMassStoreReset); - - uint8_t PadBytes[AllocationLength - BytesTransferred]; + Endpoint_Write_Stream_LE(&SenseData, BytesTransferred, NULL); /* Pad out remaining bytes with 0x00 */ - Endpoint_Write_Stream_LE(&PadBytes, sizeof(PadBytes), StreamCallback_AbortOnMassStoreReset); + Endpoint_Null_Stream((AllocationLength - BytesTransferred), NULL); /* Finalize the stream transfer to send the last packet */ Endpoint_ClearIN(); @@ -217,10 +212,10 @@ static bool SCSI_Command_Request_Sense(void) static bool SCSI_Command_Read_Capacity_10(void) { /* Send the total number of logical blocks in the current LUN */ - Endpoint_Write_DWord_BE(LUN_MEDIA_BLOCKS - 1); + Endpoint_Write_32_BE(LUN_MEDIA_BLOCKS - 1); /* Send the logical block size of the device (must be 512 bytes) */ - Endpoint_Write_DWord_BE(VIRTUAL_MEMORY_BLOCK_SIZE); + Endpoint_Write_32_BE(VIRTUAL_MEMORY_BLOCK_SIZE); /* Check if the current command is being aborted by the host */ if (IsMassStoreReset) @@ -334,10 +329,10 @@ static bool SCSI_Command_ReadWrite_10(const bool IsDataRead) static bool SCSI_Command_ModeSense_6(void) { /* Send an empty header response with the Write Protect flag status */ - Endpoint_Write_Byte(0x00); - Endpoint_Write_Byte(0x00); - Endpoint_Write_Byte(DISK_READ_ONLY ? 0x80 : 0x00); - Endpoint_Write_Byte(0x00); + Endpoint_Write_8(0x00); + Endpoint_Write_8(0x00); + Endpoint_Write_8(DISK_READ_ONLY ? 0x80 : 0x00); + Endpoint_Write_8(0x00); Endpoint_ClearIN(); /* Update the bytes transferred counter and succeed the command */