Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Erik Strand
lufa
Commits
40631e9f
Commit
40631e9f
authored
Jul 15, 2010
by
Dean Camera
Browse files
Fix pointer aliasing warning in the Mass Storage demos.
parent
e2e1fe5a
Changes
10
Hide whitespace changes
Inline
Side-by-side
Demos/Device/ClassDriver/MassStorage/Lib/SCSI.c
View file @
40631e9f
...
...
@@ -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
(
*
(
uint
16
_t
*
)
&
MSInterfaceInfo
->
State
.
CommandBlock
.
SCSICommandData
[
7
]);
TotalBlocks
=
SwapEndian_16
(
*
(
uint
32
_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
)
...
...
Demos/Device/ClassDriver/MassStorageKeyboard/Lib/DataflashManager.h
View file @
40631e9f
...
...
@@ -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
,
...
...
Demos/Device/ClassDriver/MassStorageKeyboard/Lib/SCSI.c
View file @
40631e9f
...
...
@@ -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
(
*
(
uint
16
_t
*
)
&
MSInterfaceInfo
->
State
.
CommandBlock
.
SCSICommandData
[
7
]);
TotalBlocks
=
SwapEndian_16
(
*
(
uint
32
_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
)
...
...
Demos/Device/ClassDriver/MassStorageKeyboard/MassStorageKeyboard.h
View file @
40631e9f
...
...
@@ -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
);
...
...
Demos/Device/LowLevel/MassStorage/Lib/DataflashManager.h
View file @
40631e9f
...
...
@@ -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
);
...
...
Demos/Device/LowLevel/MassStorage/Lib/SCSI.c
View file @
40631e9f
...
...
@@ -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
(
*
(
uint
16
_t
*
)
&
CommandBlock
.
SCSICommandData
[
7
]);
TotalBlocks
=
SwapEndian_16
(
*
(
uint
32
_t
*
)
&
CommandBlock
.
SCSICommandData
[
7
]);
/* Check if the block address is outside the maximum allowable value for the LUN */
if
(
BlockAddress
>=
LUN_MEDIA_BLOCKS
)
...
...
Demos/Device/LowLevel/MassStorage/MassStorage.h
View file @
40631e9f
...
...
@@ -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
...
...
Projects/Incomplete/StandaloneProgrammer/Lib/SCSI.c
View file @
40631e9f
...
...
@@ -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
)
{
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
);
...
...
@@ -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
]);
/* Load in the 16-bit total blocks (SCSI uses big-endian, so have to reverse the byte order) */
TotalBlocks
=
SwapEndian_16
(
*
(
uint
16
_t
*
)
&
MSInterfaceInfo
->
State
.
CommandBlock
.
SCSICommandData
[
7
]);
TotalBlocks
=
SwapEndian_16
(
*
(
uint
32
_t
*
)
&
MSInterfaceInfo
->
State
.
CommandBlock
.
SCSICommandData
[
7
]);
/* Check if the block address is outside the maximum allowable value for the LUN */
if
(
BlockAddress
>=
VIRTUAL_MEMORY_BLOCKS
)
...
...
Projects/TempDataLogger/Lib/SCSI.c
View file @
40631e9f
...
...
@@ -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
)
{
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* const MSInterfa
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
(
*
(
uint
16
_t
*
)
&
MSInterfaceInfo
->
State
.
CommandBlock
.
SCSICommandData
[
7
]);
TotalBlocks
=
SwapEndian_16
(
*
(
uint
32
_t
*
)
&
MSInterfaceInfo
->
State
.
CommandBlock
.
SCSICommandData
[
7
]);
/* Check if the block address is outside the maximum allowable value for the LUN */
if
(
BlockAddress
>=
VIRTUAL_MEMORY_BLOCKS
)
...
...
Projects/Webserver/Lib/SCSI.c
View file @
40631e9f
...
...
@@ -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
)
{
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* const MSInterfa
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
(
*
(
uint
16
_t
*
)
&
MSInterfaceInfo
->
State
.
CommandBlock
.
SCSICommandData
[
7
]);
TotalBlocks
=
SwapEndian_16
(
*
(
uint
32
_t
*
)
&
MSInterfaceInfo
->
State
.
CommandBlock
.
SCSICommandData
[
7
]);
/* Check if the block address is outside the maximum allowable value for the LUN */
if
(
BlockAddress
>=
VIRTUAL_MEMORY_BLOCKS
)
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment