mirror of
https://github.com/qmk/qmk_firmware.git
synced 2025-07-16 12:51:47 +00:00
Fix pointer aliasing warning in the Mass Storage demos.
This commit is contained in:
parent
e2e1fe5aad
commit
40631e9fe5
@ -138,8 +138,7 @@ bool SCSI_DecodeSCSICommand(USB_ClassInfo_MS_Device_t* MSInterfaceInfo)
|
|||||||
*/
|
*/
|
||||||
static void SCSI_Command_Inquiry(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) |
|
uint16_t AllocationLength = SwapEndian_16(*(uint32_t*)&MSInterfaceInfo->State.CommandBlock.SCSICommandData[3]);
|
||||||
MSInterfaceInfo->State.CommandBlock.SCSICommandData[4]);
|
|
||||||
uint16_t BytesTransferred = (AllocationLength < sizeof(InquiryData))? AllocationLength :
|
uint16_t BytesTransferred = (AllocationLength < sizeof(InquiryData))? AllocationLength :
|
||||||
sizeof(InquiryData);
|
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]);
|
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) */
|
/* 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 */
|
/* Check if the block address is outside the maximum allowable value for the LUN */
|
||||||
if (BlockAddress >= LUN_MEDIA_BLOCKS)
|
if (BlockAddress >= LUN_MEDIA_BLOCKS)
|
||||||
|
@ -61,7 +61,13 @@
|
|||||||
#define VIRTUAL_MEMORY_BLOCK_SIZE 512
|
#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. */
|
/** 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: */
|
/* Function Prototypes: */
|
||||||
void DataflashManager_WriteBlocks(USB_ClassInfo_MS_Device_t* MSInterfaceInfo, const uint32_t BlockAddress,
|
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)
|
static bool SCSI_Command_Inquiry(USB_ClassInfo_MS_Device_t* MSInterfaceInfo)
|
||||||
{
|
{
|
||||||
uint16_t AllocationLength = (((uint16_t)MSInterfaceInfo->State.CommandBlock.SCSICommandData[3] << 8) |
|
uint16_t AllocationLength = SwapEndian_16(*(uint32_t*)&MSInterfaceInfo->State.CommandBlock.SCSICommandData[3]);
|
||||||
MSInterfaceInfo->State.CommandBlock.SCSICommandData[4]);
|
|
||||||
uint16_t BytesTransferred = (AllocationLength < sizeof(InquiryData))? AllocationLength :
|
uint16_t BytesTransferred = (AllocationLength < sizeof(InquiryData))? AllocationLength :
|
||||||
sizeof(InquiryData);
|
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]);
|
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) */
|
/* 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 */
|
/* Check if the block address is outside the maximum allowable value for the LUN */
|
||||||
if (BlockAddress >= LUN_MEDIA_BLOCKS)
|
if (BlockAddress >= LUN_MEDIA_BLOCKS)
|
||||||
|
@ -75,12 +75,6 @@
|
|||||||
/** LED mask for the library LED driver, to indicate that the USB interface is busy. */
|
/** LED mask for the library LED driver, to indicate that the USB interface is busy. */
|
||||||
#define LEDMASK_USB_BUSY LEDS_LED2
|
#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: */
|
/* Function Prototypes: */
|
||||||
void SetupHardware(void);
|
void SetupHardware(void);
|
||||||
|
|
||||||
|
@ -65,6 +65,14 @@
|
|||||||
*/
|
*/
|
||||||
#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 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: */
|
/* Function Prototypes: */
|
||||||
void DataflashManager_WriteBlocks(const uint32_t BlockAddress, uint16_t TotalBlocks);
|
void DataflashManager_WriteBlocks(const uint32_t BlockAddress, uint16_t TotalBlocks);
|
||||||
void DataflashManager_ReadBlocks(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)
|
static void SCSI_Command_Inquiry(void)
|
||||||
{
|
{
|
||||||
uint16_t AllocationLength = (((uint16_t)CommandBlock.SCSICommandData[3] << 8) |
|
uint16_t AllocationLength = SwapEndian_16(*(uint32_t*)&CommandBlock.SCSICommandData[3]);
|
||||||
CommandBlock.SCSICommandData[4]);
|
|
||||||
uint16_t BytesTransferred = (AllocationLength < sizeof(InquiryData))? AllocationLength :
|
uint16_t BytesTransferred = (AllocationLength < sizeof(InquiryData))? AllocationLength :
|
||||||
sizeof(InquiryData);
|
sizeof(InquiryData);
|
||||||
|
|
||||||
@ -260,7 +259,7 @@ static void SCSI_Command_ReadWrite_10(const bool IsDataRead)
|
|||||||
BlockAddress = SwapEndian_32(*(uint32_t*)&CommandBlock.SCSICommandData[2]);
|
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) */
|
/* 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 */
|
/* Check if the block address is outside the maximum allowable value for the LUN */
|
||||||
if (BlockAddress >= LUN_MEDIA_BLOCKS)
|
if (BlockAddress >= LUN_MEDIA_BLOCKS)
|
||||||
|
@ -60,15 +60,7 @@
|
|||||||
#define REQ_GetMaxLUN 0xFE
|
#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. */
|
/** 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
|
#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)
|
|
||||||
|
|
||||||
/** Magic signature for a Command Block Wrapper used in the Mass Storage Bulk-Only transport protocol. */
|
/** Magic signature for a Command Block Wrapper used in the Mass Storage Bulk-Only transport protocol. */
|
||||||
#define CBW_SIGNATURE 0x43425355UL
|
#define CBW_SIGNATURE 0x43425355UL
|
||||||
|
@ -139,8 +139,7 @@ bool SCSI_DecodeSCSICommand(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo)
|
|||||||
*/
|
*/
|
||||||
static void SCSI_Command_Inquiry(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo)
|
static void SCSI_Command_Inquiry(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo)
|
||||||
{
|
{
|
||||||
uint16_t AllocationLength = (((uint16_t)MSInterfaceInfo->State.CommandBlock.SCSICommandData[3] << 8) |
|
uint16_t AllocationLength = SwapEndian_16(*(uint32_t*)&MSInterfaceInfo->State.CommandBlock.SCSICommandData[3]);
|
||||||
MSInterfaceInfo->State.CommandBlock.SCSICommandData[4]);
|
|
||||||
uint16_t BytesTransferred = (AllocationLength < sizeof(InquiryData))? AllocationLength :
|
uint16_t BytesTransferred = (AllocationLength < sizeof(InquiryData))? AllocationLength :
|
||||||
sizeof(InquiryData);
|
sizeof(InquiryData);
|
||||||
|
|
||||||
@ -258,7 +257,7 @@ static void SCSI_Command_ReadWrite_10(USB_ClassInfo_MS_Device_t* const MSInterfa
|
|||||||
BlockAddress = SwapEndian_32(*(uint32_t*)&MSInterfaceInfo->State.CommandBlock.SCSICommandData[2]);
|
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) */
|
/* 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 */
|
/* Check if the block address is outside the maximum allowable value for the LUN */
|
||||||
if (BlockAddress >= VIRTUAL_MEMORY_BLOCKS)
|
if (BlockAddress >= VIRTUAL_MEMORY_BLOCKS)
|
||||||
|
@ -138,8 +138,7 @@ bool SCSI_DecodeSCSICommand(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo)
|
|||||||
*/
|
*/
|
||||||
static void SCSI_Command_Inquiry(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo)
|
static void SCSI_Command_Inquiry(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo)
|
||||||
{
|
{
|
||||||
uint16_t AllocationLength = (((uint16_t)MSInterfaceInfo->State.CommandBlock.SCSICommandData[3] << 8) |
|
uint16_t AllocationLength = SwapEndian_16(*(uint32_t*)&MSInterfaceInfo->State.CommandBlock.SCSICommandData[3]);
|
||||||
MSInterfaceInfo->State.CommandBlock.SCSICommandData[4]);
|
|
||||||
uint16_t BytesTransferred = (AllocationLength < sizeof(InquiryData))? AllocationLength :
|
uint16_t BytesTransferred = (AllocationLength < sizeof(InquiryData))? AllocationLength :
|
||||||
sizeof(InquiryData);
|
sizeof(InquiryData);
|
||||||
|
|
||||||
@ -257,7 +256,7 @@ static void SCSI_Command_ReadWrite_10(USB_ClassInfo_MS_Device_t* const MSInterfa
|
|||||||
BlockAddress = SwapEndian_32(*(uint32_t*)&MSInterfaceInfo->State.CommandBlock.SCSICommandData[2]);
|
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) */
|
/* 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 */
|
/* Check if the block address is outside the maximum allowable value for the LUN */
|
||||||
if (BlockAddress >= VIRTUAL_MEMORY_BLOCKS)
|
if (BlockAddress >= VIRTUAL_MEMORY_BLOCKS)
|
||||||
|
@ -138,8 +138,7 @@ bool SCSI_DecodeSCSICommand(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo)
|
|||||||
*/
|
*/
|
||||||
static void SCSI_Command_Inquiry(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo)
|
static void SCSI_Command_Inquiry(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo)
|
||||||
{
|
{
|
||||||
uint16_t AllocationLength = (((uint16_t)MSInterfaceInfo->State.CommandBlock.SCSICommandData[3] << 8) |
|
uint16_t AllocationLength = SwapEndian_16(*(uint32_t*)&MSInterfaceInfo->State.CommandBlock.SCSICommandData[3]);
|
||||||
MSInterfaceInfo->State.CommandBlock.SCSICommandData[4]);
|
|
||||||
uint16_t BytesTransferred = (AllocationLength < sizeof(InquiryData))? AllocationLength :
|
uint16_t BytesTransferred = (AllocationLength < sizeof(InquiryData))? AllocationLength :
|
||||||
sizeof(InquiryData);
|
sizeof(InquiryData);
|
||||||
|
|
||||||
@ -257,7 +256,7 @@ static void SCSI_Command_ReadWrite_10(USB_ClassInfo_MS_Device_t* const MSInterfa
|
|||||||
BlockAddress = SwapEndian_32(*(uint32_t*)&MSInterfaceInfo->State.CommandBlock.SCSICommandData[2]);
|
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) */
|
/* 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 */
|
/* Check if the block address is outside the maximum allowable value for the LUN */
|
||||||
if (BlockAddress >= VIRTUAL_MEMORY_BLOCKS)
|
if (BlockAddress >= VIRTUAL_MEMORY_BLOCKS)
|
||||||
|
Loading…
Reference in New Issue
Block a user