Fix pointer aliasing warning in the Mass Storage demos.
This commit is contained in:
		
							parent
							
								
									e2e1fe5aad
								
							
						
					
					
						commit
						40631e9fe5
					
				
					 10 changed files with 28 additions and 34 deletions
				
			
		| 
						 | 
				
			
			@ -138,8 +138,7 @@ bool SCSI_DecodeSCSICommand(USB_ClassInfo_MS_Device_t* MSInterfaceInfo)
 | 
			
		|||
 */
 | 
			
		||||
static void SCSI_Command_Inquiry(USB_ClassInfo_MS_Device_t* MSInterfaceInfo)
 | 
			
		||||
{
 | 
			
		||||
	uint16_t AllocationLength  = (((uint16_t)MSInterfaceInfo->State.CommandBlock.SCSICommandData[3] << 8) |
 | 
			
		||||
	                                         MSInterfaceInfo->State.CommandBlock.SCSICommandData[4]);
 | 
			
		||||
	uint16_t AllocationLength  = SwapEndian_16(*(uint32_t*)&MSInterfaceInfo->State.CommandBlock.SCSICommandData[3]);
 | 
			
		||||
	uint16_t BytesTransferred  = (AllocationLength < sizeof(InquiryData))? AllocationLength :
 | 
			
		||||
	                                                                       sizeof(InquiryData);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -257,7 +256,7 @@ static void SCSI_Command_ReadWrite_10(USB_ClassInfo_MS_Device_t* MSInterfaceInfo
 | 
			
		|||
	BlockAddress = SwapEndian_32(*(uint32_t*)&MSInterfaceInfo->State.CommandBlock.SCSICommandData[2]);
 | 
			
		||||
 | 
			
		||||
	/* Load in the 16-bit total blocks (SCSI uses big-endian, so have to reverse the byte order) */
 | 
			
		||||
	TotalBlocks  = SwapEndian_16(*(uint16_t*)&MSInterfaceInfo->State.CommandBlock.SCSICommandData[7]);
 | 
			
		||||
	TotalBlocks  = SwapEndian_16(*(uint32_t*)&MSInterfaceInfo->State.CommandBlock.SCSICommandData[7]);
 | 
			
		||||
	
 | 
			
		||||
	/* Check if the block address is outside the maximum allowable value for the LUN */
 | 
			
		||||
	if (BlockAddress >= LUN_MEDIA_BLOCKS)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -61,7 +61,13 @@
 | 
			
		|||
		#define VIRTUAL_MEMORY_BLOCK_SIZE           512
 | 
			
		||||
		
 | 
			
		||||
		/** Total number of blocks of the virtual memory for reporting to the host as the device's total capacity. */
 | 
			
		||||
		#define VIRTUAL_MEMORY_BLOCKS               (VIRTUAL_MEMORY_BYTES / VIRTUAL_MEMORY_BLOCK_SIZE)
 | 
			
		||||
		#define VIRTUAL_MEMORY_BLOCKS              (VIRTUAL_MEMORY_BYTES / VIRTUAL_MEMORY_BLOCK_SIZE)
 | 
			
		||||
		
 | 
			
		||||
		/** Total number of logical drives within the device - must be non-zero. */
 | 
			
		||||
		#define TOTAL_LUNS                          1
 | 
			
		||||
		
 | 
			
		||||
		/** Blocks in each LUN, calculated from the total capacity divided by the total number of Logical Units in the device. */
 | 
			
		||||
		#define LUN_MEDIA_BLOCKS                   (VIRTUAL_MEMORY_BLOCKS / TOTAL_LUNS)
 | 
			
		||||
		
 | 
			
		||||
	/* Function Prototypes: */
 | 
			
		||||
		void DataflashManager_WriteBlocks(USB_ClassInfo_MS_Device_t* MSInterfaceInfo, const uint32_t BlockAddress,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -148,8 +148,7 @@ bool SCSI_DecodeSCSICommand(USB_ClassInfo_MS_Device_t* MSInterfaceInfo)
 | 
			
		|||
 */
 | 
			
		||||
static bool SCSI_Command_Inquiry(USB_ClassInfo_MS_Device_t* MSInterfaceInfo)
 | 
			
		||||
{
 | 
			
		||||
	uint16_t AllocationLength  = (((uint16_t)MSInterfaceInfo->State.CommandBlock.SCSICommandData[3] << 8) |
 | 
			
		||||
	                                         MSInterfaceInfo->State.CommandBlock.SCSICommandData[4]);
 | 
			
		||||
	uint16_t AllocationLength  = SwapEndian_16(*(uint32_t*)&MSInterfaceInfo->State.CommandBlock.SCSICommandData[3]);
 | 
			
		||||
	uint16_t BytesTransferred  = (AllocationLength < sizeof(InquiryData))? AllocationLength :
 | 
			
		||||
	                                                                       sizeof(InquiryData);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -310,7 +309,7 @@ static bool SCSI_Command_ReadWrite_10(USB_ClassInfo_MS_Device_t* MSInterfaceInfo
 | 
			
		|||
	BlockAddress = SwapEndian_32(*(uint32_t*)&MSInterfaceInfo->State.CommandBlock.SCSICommandData[2]);
 | 
			
		||||
 | 
			
		||||
	/* Load in the 16-bit total blocks (SCSI uses big-endian, so have to reverse the byte order) */
 | 
			
		||||
	TotalBlocks  = SwapEndian_16(*(uint16_t*)&MSInterfaceInfo->State.CommandBlock.SCSICommandData[7]);
 | 
			
		||||
	TotalBlocks  = SwapEndian_16(*(uint32_t*)&MSInterfaceInfo->State.CommandBlock.SCSICommandData[7]);
 | 
			
		||||
	
 | 
			
		||||
	/* Check if the block address is outside the maximum allowable value for the LUN */
 | 
			
		||||
	if (BlockAddress >= LUN_MEDIA_BLOCKS)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -75,12 +75,6 @@
 | 
			
		|||
		/** LED mask for the library LED driver, to indicate that the USB interface is busy. */
 | 
			
		||||
		#define LEDMASK_USB_BUSY         LEDS_LED2
 | 
			
		||||
		
 | 
			
		||||
		/** Total number of logical drives within the device - must be non-zero. */
 | 
			
		||||
		#define TOTAL_LUNS               1
 | 
			
		||||
		
 | 
			
		||||
		/** Blocks in each LUN, calculated from the total capacity divided by the total number of Logical Units in the device. */
 | 
			
		||||
		#define LUN_MEDIA_BLOCKS         (VIRTUAL_MEMORY_BLOCKS / TOTAL_LUNS)
 | 
			
		||||
		
 | 
			
		||||
	/* Function Prototypes: */
 | 
			
		||||
		void SetupHardware(void);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -65,6 +65,14 @@
 | 
			
		|||
		 */
 | 
			
		||||
		#define VIRTUAL_MEMORY_BLOCKS               (VIRTUAL_MEMORY_BYTES / VIRTUAL_MEMORY_BLOCK_SIZE)
 | 
			
		||||
		
 | 
			
		||||
		/** Total number of Logical Units (drives) in the device. The total device capacity is shared equally between
 | 
			
		||||
		 *  each drive - this can be set to any positive non-zero amount.
 | 
			
		||||
		 */
 | 
			
		||||
		#define TOTAL_LUNS                           1
 | 
			
		||||
		
 | 
			
		||||
		/** Blocks in each LUN, calculated from the total capacity divided by the total number of Logical Units in the device. */
 | 
			
		||||
		#define LUN_MEDIA_BLOCKS                    (VIRTUAL_MEMORY_BLOCKS / TOTAL_LUNS)   
 | 
			
		||||
		
 | 
			
		||||
	/* Function Prototypes: */
 | 
			
		||||
		void DataflashManager_WriteBlocks(const uint32_t BlockAddress, uint16_t TotalBlocks);
 | 
			
		||||
		void DataflashManager_ReadBlocks(const uint32_t BlockAddress, uint16_t TotalBlocks);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -136,8 +136,7 @@ bool SCSI_DecodeSCSICommand(void)
 | 
			
		|||
 */
 | 
			
		||||
static void SCSI_Command_Inquiry(void)
 | 
			
		||||
{
 | 
			
		||||
	uint16_t AllocationLength  = (((uint16_t)CommandBlock.SCSICommandData[3] << 8) |
 | 
			
		||||
	                                         CommandBlock.SCSICommandData[4]);
 | 
			
		||||
	uint16_t AllocationLength  = SwapEndian_16(*(uint32_t*)&CommandBlock.SCSICommandData[3]);
 | 
			
		||||
	uint16_t BytesTransferred  = (AllocationLength < sizeof(InquiryData))? AllocationLength :
 | 
			
		||||
	                                                                       sizeof(InquiryData);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -260,7 +259,7 @@ static void SCSI_Command_ReadWrite_10(const bool IsDataRead)
 | 
			
		|||
	BlockAddress = SwapEndian_32(*(uint32_t*)&CommandBlock.SCSICommandData[2]);
 | 
			
		||||
 | 
			
		||||
	/* Load in the 16-bit total blocks (SCSI uses big-endian, so have to reverse the byte order) */
 | 
			
		||||
	TotalBlocks  = SwapEndian_16(*(uint16_t*)&CommandBlock.SCSICommandData[7]);
 | 
			
		||||
	TotalBlocks  = SwapEndian_16(*(uint32_t*)&CommandBlock.SCSICommandData[7]);
 | 
			
		||||
 | 
			
		||||
	/* Check if the block address is outside the maximum allowable value for the LUN */
 | 
			
		||||
	if (BlockAddress >= LUN_MEDIA_BLOCKS)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -60,15 +60,7 @@
 | 
			
		|||
		#define REQ_GetMaxLUN              0xFE
 | 
			
		||||
 | 
			
		||||
		/** Maximum length of a SCSI command which can be issued by the device or host in a Mass Storage bulk wrapper. */
 | 
			
		||||
		#define MAX_SCSI_COMMAND_LENGTH    16
 | 
			
		||||
		
 | 
			
		||||
		/** Total number of Logical Units (drives) in the device. The total device capacity is shared equally between
 | 
			
		||||
		 *  each drive - this can be set to any positive non-zero amount.
 | 
			
		||||
		 */
 | 
			
		||||
		#define TOTAL_LUNS                 1
 | 
			
		||||
		
 | 
			
		||||
		/** Blocks in each LUN, calculated from the total capacity divided by the total number of Logical Units in the device. */
 | 
			
		||||
		#define LUN_MEDIA_BLOCKS           (VIRTUAL_MEMORY_BLOCKS / TOTAL_LUNS)    
 | 
			
		||||
		#define MAX_SCSI_COMMAND_LENGTH    16 
 | 
			
		||||
		
 | 
			
		||||
		/** Magic signature for a Command Block Wrapper used in the Mass Storage Bulk-Only transport protocol. */
 | 
			
		||||
		#define CBW_SIGNATURE              0x43425355UL
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue