Commit 85e85bef authored by Dean Camera's avatar Dean Camera

More endianness porting of the LUFA device mode class drivers.

Add endianness information to the class driver and core structure definitions.

Move out the unused Ethernet_Frame_Info_t structure definition to the RNDIS device demos where it is needed.
parent 7c7778e3
......@@ -59,7 +59,7 @@ const IP_Address_t ClientIPAddress = {CLIENT_IP_ADDRESS};
void Ethernet_ProcessPacket(Ethernet_Frame_Info_t* const FrameIN,
Ethernet_Frame_Info_t* const FrameOUT)
{
DecodeEthernetFrameHeader(FrameIN);
DecodeEthernetFrameHeader(FrameIN->FrameData);
/* Cast the incoming Ethernet frame to the Ethernet header type */
Ethernet_Frame_Header_t* FrameINHeader = (Ethernet_Frame_Header_t*)&FrameIN->FrameData;
......
......@@ -37,6 +37,9 @@
#ifndef _ETHERNET_PROTOCOLS_H_
#define _ETHERNET_PROTOCOLS_H_
/* Includes: */
#include <LUFA/Drivers/USB/Class/RNDIS.h>
/* Macros: */
#define ETHERTYPE_IPV4 0x0800
#define ETHERTYPE_ARP 0x0806
......@@ -72,6 +75,13 @@
#define PROTOCOL_SCTP 132
/* Type Defines: */
/** Type define for an Ethernet frame buffer data and information structure. */
typedef struct
{
uint8_t FrameData[ETHERNET_FRAME_SIZE_MAX]; /**< Ethernet frame contents. */
uint16_t FrameLength; /**< Length in bytes of the Ethernet frame stored in the buffer. */
} Ethernet_Frame_Info_t;
/** Type define for a protocol IP address of a device on a network. */
typedef struct
{
......
......@@ -51,12 +51,12 @@
/** Decodes an Ethernet frame header and prints its contents to through the USART in a human readable format.
*
* \param[in] FrameINData Pointer to the start of an Ethernet frame information structure
* \param[in] FrameINData Pointer to the start of an Ethernet frame data
*/
void DecodeEthernetFrameHeader(Ethernet_Frame_Info_t* const FrameINData)
void DecodeEthernetFrameHeader(void* InDataStart)
{
#if !defined(NO_DECODE_ETHERNET)
Ethernet_Frame_Header_t* FrameHeader = (Ethernet_Frame_Header_t*)FrameINData->FrameData;
Ethernet_Frame_Header_t* FrameHeader = (Ethernet_Frame_Header_t*)InDataStart;
printf_P(PSTR("\r\n"));
......@@ -84,10 +84,7 @@ void DecodeEthernetFrameHeader(Ethernet_Frame_Info_t* const FrameINData)
FrameHeader->Destination.Octets[4],
FrameHeader->Destination.Octets[5]);
if (SwapEndian_16(FrameINData->FrameLength) > ETHERNET_VER2_MINSIZE)
printf_P(PSTR(" + Protocol: 0x%04x\r\n"), SwapEndian_16(FrameHeader->EtherType));
else
printf_P(PSTR(" + Protocol: UNKNOWN E1\r\n"));
printf_P(PSTR(" + Protocol: 0x%04x\r\n"), SwapEndian_16(FrameHeader->EtherType));
#endif
}
......
......@@ -47,7 +47,7 @@
#include "Ethernet.h"
/* Function Prototypes: */
void DecodeEthernetFrameHeader(Ethernet_Frame_Info_t* const FrameINData);
void DecodeEthernetFrameHeader(void* InDataStart);
void DecodeARPHeader(void* InDataStart);
void DecodeIPHeader(void* InDataStart);
void DecodeICMPHeader(void* InDataStart);
......
......@@ -81,6 +81,13 @@
#define NO_PROCESS -1
/* Type Defines: */
/** Type define for an Ethernet frame buffer data and information structure. */
typedef struct
{
uint8_t FrameData[ETHERNET_FRAME_SIZE_MAX]; /**< Ethernet frame contents. */
uint16_t FrameLength; /**< Length in bytes of the Ethernet frame stored in the buffer. */
} Ethernet_Frame_Info_t;
/** Type define for an Ethernet frame header. */
typedef struct
{
......
......@@ -84,10 +84,7 @@ void DecodeEthernetFrameHeader(void* InDataStart)
FrameHeader->Destination.Octets[4],
FrameHeader->Destination.Octets[5]);
if (SwapEndian_16(FrameIN.FrameLength) > ETHERNET_VER2_MINSIZE)
printf_P(PSTR(" + Protocol: 0x%04x\r\n"), SwapEndian_16(FrameHeader->EtherType));
else
printf_P(PSTR(" + Protocol: UNKNOWN E1\r\n"));
printf_P(PSTR(" + Protocol: 0x%04x\r\n"), SwapEndian_16(FrameHeader->EtherType));
#endif
}
......
......@@ -305,6 +305,8 @@
* a USB endpoint). See the USB Audio specification for more details.
*
* \see \ref USB_Audio_StdDescriptor_InputTerminal_t for the version of this type with standard element names.
*
* \note Regardless of CPU architecture, these values should be stored as little endian.
*/
typedef struct
{
......@@ -333,6 +335,8 @@
*
* \see \ref USB_Audio_Descriptor_InputTerminal_t for the version of this type with non-standard LUFA specific
* element names.
*
* \note Regardless of CPU architecture, these values should be stored as little endian.
*/
typedef struct
{
......@@ -363,6 +367,8 @@
* a USB endpoint). See the USB Audio specification for more details.
*
* \see \ref USB_Audio_StdDescriptor_OutputTerminal_t for the version of this type with standard element names.
*
* \note Regardless of CPU architecture, these values should be stored as little endian.
*/
typedef struct
{
......@@ -389,6 +395,8 @@
*
* \see \ref USB_Audio_Descriptor_OutputTerminal_t for the version of this type with non-standard LUFA specific
* element names.
*
* \note Regardless of CPU architecture, these values should be stored as little endian.
*/
typedef struct
{
......@@ -417,6 +425,8 @@
* details.
*
* \see \ref USB_Audio_StdDescriptor_Interface_AC_t for the version of this type with standard element names.
*
* \note Regardless of CPU architecture, these values should be stored as little endian.
*/
typedef struct
{
......@@ -440,6 +450,8 @@
*
* \see \ref USB_Audio_Descriptor_Interface_AC_t for the version of this type with non-standard LUFA specific
* element names.
*
* \note Regardless of CPU architecture, these values should be stored as little endian.
*/
typedef struct
{
......@@ -466,6 +478,8 @@
* specification for more details.
*
* \see \ref USB_Audio_StdDescriptor_FeatureUnit_t for the version of this type with standard element names.
*
* \note Regardless of CPU architecture, these values should be stored as little endian.
*/
typedef struct
{
......@@ -491,6 +505,8 @@
*
* \see \ref USB_Audio_Descriptor_FeatureUnit_t for the version of this type with non-standard LUFA specific
* element names.
*
* \note Regardless of CPU architecture, these values should be stored as little endian.
*/
typedef struct
{
......@@ -518,6 +534,8 @@
* how audio streams within the device are formatted. See the USB Audio specification for more details.
*
* \see \ref USB_Audio_StdDescriptor_Interface_AS_t for the version of this type with standard element names.
*
* \note Regardless of CPU architecture, these values should be stored as little endian.
*/
typedef struct
{
......@@ -539,6 +557,8 @@
*
* \see \ref USB_Audio_Descriptor_Interface_AS_t for the version of this type with non-standard LUFA specific
* element names.
*
* \note Regardless of CPU architecture, these values should be stored as little endian.
*/
typedef struct
{
......@@ -567,6 +587,8 @@
* the continuous or discrete sample frequencies.
*
* \see \ref USB_Audio_StdDescriptor_Format_t for the version of this type with standard element names.
*
* \note Regardless of CPU architecture, these values should be stored as little endian.
*/
typedef struct
{
......@@ -592,6 +614,8 @@
*
* Type define for a 24bit audio sample frequency structure. As GCC does not contain a built in 24-bit datatype,
* this this structure is used to build up the value instead. Fill this structure with the \ref AUDIO_SAMPLE_FREQ() macro.
*
* \note Regardless of CPU architecture, these values should be stored as little endian.
*/
typedef struct
{
......@@ -611,6 +635,8 @@
*
* \see \ref USB_Audio_Descriptor_Format_t for the version of this type with non-standard LUFA specific
* element names.
*
* \note Regardless of CPU architecture, these values should be stored as little endian.
*/
typedef struct
{
......@@ -642,6 +668,8 @@
* descriptor with a few Audio-class-specific extensions. See the USB Audio specification for more details.
*
* \see \ref USB_Audio_StdDescriptor_StreamEndpoint_Std_t for the version of this type with standard element names.
*
* \note Regardless of CPU architecture, these values should be stored as little endian.
*/
typedef struct
{
......@@ -658,6 +686,8 @@
*
* \see \ref USB_Audio_Descriptor_StreamEndpoint_Std_t for the version of this type with non-standard LUFA specific
* element names.
*
* \note Regardless of CPU architecture, these values should be stored as little endian.
*/
typedef struct
{
......@@ -689,6 +719,8 @@
* class-specific extended endpoint descriptor. See the USB Audio specification for more details.
*
* \see \ref USB_Audio_StdDescriptor_StreamEndpoint_Spc_t for the version of this type with standard element names.
*
* \note Regardless of CPU architecture, these values should be stored as little endian.
*/
typedef struct
{
......@@ -711,6 +743,8 @@
*
* \see \ref USB_Audio_Descriptor_StreamEndpoint_Spc_t for the version of this type with non-standard LUFA specific
* element names.
*
* \note Regardless of CPU architecture, these values should be stored as little endian.
*/
typedef struct
{
......
......@@ -231,6 +231,8 @@
* See the CDC class specification for more details.
*
* \see \ref USB_CDC_StdDescriptor_FunctionalHeader_t for the version of this type with standard element names.
*
* \note Regardless of CPU architecture, these values should be stored as little endian.
*/
typedef struct
{
......@@ -251,6 +253,8 @@
*
* \see \ref USB_CDC_Descriptor_FunctionalHeader_t for the version of this type with non-standard LUFA specific
* element names.
*
* \note Regardless of CPU architecture, these values should be stored as little endian.
*/
typedef struct
{
......@@ -270,6 +274,8 @@
* supports the CDC ACM subclass of the CDC specification. See the CDC class specification for more details.
*
* \see \ref USB_CDC_StdDescriptor_FunctionalACM_t for the version of this type with standard element names.
*
* \note Regardless of CPU architecture, these values should be stored as little endian.
*/
typedef struct
{
......@@ -290,6 +296,8 @@
*
* \see \ref USB_CDC_Descriptor_FunctionalACM_t for the version of this type with non-standard LUFA specific
* element names.
*
* \note Regardless of CPU architecture, these values should be stored as little endian.
*/
typedef struct
{
......@@ -312,6 +320,8 @@
* CDC control and data interfaces are related. See the CDC class specification for more details.
*
* \see \ref USB_CDC_StdDescriptor_FunctionalUnion_t for the version of this type with standard element names.
*
* \note Regardless of CPU architecture, these values should be stored as little endian.
*/
typedef struct
{
......@@ -330,6 +340,8 @@
*
* \see \ref USB_CDC_Descriptor_FunctionalUnion_t for the version of this type with non-standard LUFA specific
* element names.
*
* \note Regardless of CPU architecture, these values should be stored as little endian.
*/
typedef struct
{
......@@ -348,6 +360,8 @@
*
* Type define for a CDC Line Encoding structure, used to hold the various encoding parameters for a virtual
* serial port.
*
* \note Regardless of CPU architecture, these values should be stored as little endian.
*/
typedef struct
{
......
......@@ -574,6 +574,8 @@
* specification for details on the structure elements.
*
* \see \ref USB_HID_StdDescriptor_HID_t for the version of this type with standard element names.
*
* \note Regardless of CPU architecture, these values should be stored as little endian.
*/
typedef struct
{
......@@ -595,6 +597,8 @@
*
* \see \ref USB_HID_Descriptor_HID_t for the version of this type with non-standard LUFA specific
* element names.
*
* \note Regardless of CPU architecture, these values should be stored as little endian.
*/
typedef struct
{
......
......@@ -103,6 +103,8 @@
* See the USB Audio specification for more details.
*
* \see \ref USB_MIDI_StdDescriptor_AudioInterface_AS_t for the version of this type with standard element names.
*
* \note Regardless of CPU architecture, these values should be stored as little endian.
*/
typedef struct
{
......@@ -123,6 +125,8 @@
*
* \see \ref USB_MIDI_Descriptor_AudioInterface_AS_t for the version of this type with non-standard LUFA specific
* element names.
*
* \note Regardless of CPU architecture, these values should be stored as little endian.
*/
typedef struct
{
......@@ -143,6 +147,8 @@
* a physical input jack, or a logical jack (receiving input data internally, or from the host via an endpoint).
*
* \see \ref USB_MIDI_StdDescriptor_InputJack_t for the version of this type with standard element names.
*
* \note Regardless of CPU architecture, these values should be stored as little endian.
*/
typedef struct
{
......@@ -162,6 +168,8 @@
*
* \see \ref USB_MIDI_Descriptor_InputJack_t for the version of this type with non-standard LUFA specific
* element names.
*
* \note Regardless of CPU architecture, these values should be stored as little endian.
*/
typedef struct
{
......@@ -184,6 +192,8 @@
* a physical output jack, or a logical jack (sending output data internally, or to the host via an endpoint).
*
* \see \ref USB_MIDI_StdDescriptor_OutputJack_t for the version of this type with standard element names.
*
* \note Regardless of CPU architecture, these values should be stored as little endian.
*/
typedef struct
{
......@@ -207,6 +217,8 @@
*
* \see \ref USB_MIDI_Descriptor_OutputJack_t for the version of this type with non-standard LUFA specific
* element names.
*
* \note Regardless of CPU architecture, these values should be stored as little endian.
*/
typedef struct
{
......@@ -234,6 +246,8 @@
* class-specific extended MIDI endpoint descriptor. See the USB Audio specification for more details.
*
* \see \ref USB_MIDI_StdDescriptor_Jack_Endpoint_t for the version of this type with standard element names.
*
* \note Regardless of CPU architecture, these values should be stored as little endian.
*/
typedef struct
{
......@@ -252,6 +266,8 @@
*
* \see \ref USB_MIDI_Descriptor_Jack_Endpoint_t for the version of this type with non-standard LUFA specific
* element names.
*
* \note Regardless of CPU architecture, these values should be stored as little endian.
*/
typedef struct
{
......@@ -269,6 +285,8 @@
/** \brief MIDI Class Driver Event Packet.
*
* Type define for a USB MIDI event packet, used to encapsulate sent and received MIDI messages from a USB MIDI interface.
*
* \note Regardless of CPU architecture, these values should be stored as little endian.
*/
typedef struct
{
......
......@@ -256,7 +256,10 @@
/* Type Defines: */
/** \brief Mass Storage Class Command Block Wrapper.
*
* Type define for a Command Block Wrapper, used in the Mass Storage Bulk-Only Transport protocol. */
* Type define for a Command Block Wrapper, used in the Mass Storage Bulk-Only Transport protocol.
*
* \note Regardless of CPU architecture, these values should be stored as little endian.
*/
typedef struct
{
uint32_t Signature; /**< Command block signature, must be \ref MS_CBW_SIGNATURE to indicate a valid Command Block. */
......@@ -271,6 +274,8 @@
/** \brief Mass Storage Class Command Status Wrapper.
*
* Type define for a Command Status Wrapper, used in the Mass Storage Bulk-Only Transport protocol.
*
* \note Regardless of CPU architecture, these values should be stored as little endian.
*/
typedef struct
{
......
......@@ -208,17 +208,6 @@
};
/* Type Defines: */
/** \brief Ethernet Frame Packet Information Structure.
*
* Type define for an Ethernet frame buffer data and information structure. This can be used to conveniently
* store both the size and data in an Ethernet frame.
*/
typedef struct
{
uint8_t FrameData[ETHERNET_FRAME_SIZE_MAX]; /**< Ethernet frame contents. */
uint16_t FrameLength; /**< Length in bytes of the Ethernet frame stored in the buffer. */
} Ethernet_Frame_Info_t;
/** \brief MAC Address Structure.
*
* Type define for a physical MAC address of a device on a network.
......@@ -231,6 +220,8 @@
/** \brief RNDIS Common Message Header Structure.
*
* Type define for a RNDIS message header, sent before RNDIS messages.
*
* \note Regardless of CPU architecture, these values should be stored as little endian.
*/
typedef struct
{
......@@ -241,6 +232,8 @@
/** \brief RNDIS Message Structure.
*
* Type define for a RNDIS packet message, used to encapsulate Ethernet packets sent to and from the adapter.
*
* \note Regardless of CPU architecture, these values should be stored as little endian.
*/
typedef struct
{
......@@ -260,6 +253,8 @@
/** \brief RNDIS Initialization Message Structure.
*
* Type define for a RNDIS Initialize command message.
*
* \note Regardless of CPU architecture, these values should be stored as little endian.
*/
typedef struct
{
......@@ -275,6 +270,8 @@
/** \brief RNDIS Initialize Complete Message Structure.
*
* Type define for a RNDIS Initialize Complete response message.
*
* \note Regardless of CPU architecture, these values should be stored as little endian.
*/
typedef struct
{
......@@ -297,6 +294,8 @@
/** \brief RNDIS Keep Alive Message Structure.
*
* Type define for a RNDIS Keep Alive command message.
*
* \note Regardless of CPU architecture, these values should be stored as little endian.
*/
typedef struct
{
......@@ -308,6 +307,8 @@
/** \brief RNDIS Keep Alive Complete Message Structure.
*
* Type define for a RNDIS Keep Alive Complete response message.
*
* \note Regardless of CPU architecture, these values should be stored as little endian.
*/
typedef struct
{
......@@ -320,6 +321,8 @@
/** \brief RNDIS Reset Complete Message Structure.
*
* Type define for a RNDIS Reset Complete response message.
*
* \note Regardless of CPU architecture, these values should be stored as little endian.
*/
typedef struct
{
......@@ -333,6 +336,8 @@
/** \brief RNDIS OID Property Set Message Structure.
*
* Type define for a RNDIS OID Property Set command message.
*
* \note Regardless of CPU architecture, these values should be stored as little endian.
*/
typedef struct
{
......@@ -349,6 +354,8 @@
/** \brief RNDIS OID Property Set Complete Message Structure.
*
* Type define for a RNDIS OID Property Set Complete response message.
*
* \note Regardless of CPU architecture, these values should be stored as little endian.
*/
typedef struct
{
......@@ -361,6 +368,8 @@
/** \brief RNDIS OID Property Query Message Structure.
*
* Type define for a RNDIS OID Property Query command message.
*
* \note Regardless of CPU architecture, these values should be stored as little endian.
*/
typedef struct
{
......@@ -377,6 +386,8 @@
/** \brief RNDIS OID Property Query Complete Message Structure.
*
* Type define for a RNDIS OID Property Query Complete response message.
*
* \note Regardless of CPU architecture, these values should be stored as little endian.
*/
typedef struct
{
......
......@@ -138,6 +138,8 @@
*
* Type define for a PIMA container, use to send commands and receive responses to and from an
* attached Still Image device.
*
* \note Regardless of CPU architecture, these values should be stored as little endian.
*/
typedef struct
{
......
......@@ -276,9 +276,9 @@ void CDC_Device_SendControlLineStateChange(USB_ClassInfo_CDC_Device_t* const CDC
{
.bmRequestType = (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE),
.bRequest = CDC_NOTIF_SerialState,
.wValue = 0,
.wIndex = 0,
.wLength = sizeof(CDCInterfaceInfo->State.ControlLineStates.DeviceToHost),
.wValue = CPU_TO_LE16(0),
.wIndex = CPU_TO_LE16(0),
.wLength = CPU_TO_LE16(sizeof(CDCInterfaceInfo->State.ControlLineStates.DeviceToHost)),
};
Endpoint_Write_Stream_LE(&Notification, sizeof(USB_Request_Header_t), NULL);
......
......@@ -124,17 +124,15 @@ void MS_Device_USBTask(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo)
if (MSInterfaceInfo->State.CommandBlock.Flags & MS_COMMAND_DIR_DATA_IN)
Endpoint_SelectEndpoint(MSInterfaceInfo->Config.DataINEndpointNumber);
MSInterfaceInfo->State.CommandStatus.Status = CALLBACK_MS_Device_SCSICommandReceived(MSInterfaceInfo) ?
MS_SCSI_COMMAND_Pass : MS_SCSI_COMMAND_Fail;
MSInterfaceInfo->State.CommandStatus.Signature = MS_CSW_SIGNATURE;
bool SCSICommandResult = CALLBACK_MS_Device_SCSICommandReceived(MSInterfaceInfo);
MSInterfaceInfo->State.CommandStatus.Status = (SCSICommandResult) ? MS_SCSI_COMMAND_Pass : MS_SCSI_COMMAND_Fail;
MSInterfaceInfo->State.CommandStatus.Signature = CPU_TO_LE32(MS_CSW_SIGNATURE);
MSInterfaceInfo->State.CommandStatus.Tag = MSInterfaceInfo->State.CommandBlock.Tag;
MSInterfaceInfo->State.CommandStatus.DataTransferResidue = MSInterfaceInfo->State.CommandBlock.DataTransferLength;
if ((MSInterfaceInfo->State.CommandStatus.Status == MS_SCSI_COMMAND_Fail) &&
(MSInterfaceInfo->State.CommandStatus.DataTransferResidue))
{
Endpoint_StallTransaction();
}
if (!(SCSICommandResult) && (le32_to_cpu(MSInterfaceInfo->State.CommandStatus.DataTransferResidue)))
Endpoint_StallTransaction();
MS_Device_ReturnCommandStatus(MSInterfaceInfo);
}
......@@ -167,11 +165,15 @@ static bool MS_Device_ReadInCommandBlock(USB_ClassInfo_MS_Device_t* const MSInte
(sizeof(MS_CommandBlockWrapper_t) - 16), &BytesProcessed) ==
ENDPOINT_RWSTREAM_IncompleteTransfer)
{
#if !defined(INTERRUPT_CONTROL_ENDPOINT)
USB_USBTask();
#endif
if (MSInterfaceInfo->State.IsMassStoreReset)
return false;
}
if ((MSInterfaceInfo->State.CommandBlock.Signature != MS_CBW_SIGNATURE) ||
if ((MSInterfaceInfo->State.CommandBlock.Signature != CPU_TO_LE32(MS_CBW_SIGNATURE)) ||
(MSInterfaceInfo->State.CommandBlock.LUN >= MSInterfaceInfo->Config.TotalLUNs) ||
(MSInterfaceInfo->State.CommandBlock.Flags & 0x1F) ||
(MSInterfaceInfo->State.CommandBlock.SCSICommandLength == 0) ||
......@@ -189,6 +191,10 @@ static bool MS_Device_ReadInCommandBlock(USB_ClassInfo_MS_Device_t* const MSInte
MSInterfaceInfo->State.CommandBlock.SCSICommandLength, &BytesProcessed) ==
ENDPOINT_RWSTREAM_IncompleteTransfer)
{
#if !defined(INTERRUPT_CONTROL_ENDPOINT)
USB_USBTask();
#endif
if (MSInterfaceInfo->State.IsMassStoreReset)
return false;
}
......@@ -229,6 +235,10 @@ static void MS_Device_ReturnCommandStatus(USB_ClassInfo_MS_Device_t* const MSInt
sizeof(MS_CommandStatusWrapper_t), &BytesProcessed) ==
ENDPOINT_RWSTREAM_IncompleteTransfer)
{
#if !defined(INTERRUPT_CONTROL_ENDPOINT)
USB_USBTask();
#endif
if (MSInterfaceInfo->State.IsMassStoreReset)
return;
}
......
This diff is collapsed.
......@@ -254,6 +254,8 @@
* uses LUFA-specific element names to make each element's purpose clearer.
*
* \see \ref USB_StdDescriptor_Header_t for the version of this type with standard element names.
*
* \note Regardless of CPU architecture, these values should be stored as little endian.
*/
typedef struct
{
......@@ -269,6 +271,8 @@
* uses the relevant standard's given element names to ensure compatibility with the standard.
*
* \see \ref USB_Descriptor_Header_t for the version of this type with non-standard LUFA specific element names.
*
* \note Regardless of CPU architecture, these values should be stored as little endian.
*/
typedef struct
{
......@@ -284,6 +288,8 @@
* element's purpose clearer.
*
* \see \ref USB_StdDescriptor_Device_t for the version of this type with standard element names.
*
* \note Regardless of CPU architecture, these values should be stored as little endian.
*/
typedef struct
{
......@@ -333,6 +339,8 @@
* to ensure compatibility with the standard.
*
* \see \ref USB_Descriptor_Device_t for the version of this type with non-standard LUFA specific element names.
*
* \note Regardless of CPU architecture, these values should be stored as little endian.
*/
typedef struct
{
......@@ -381,6 +389,8 @@
* to make each element's purpose clearer.
*
* \see \ref USB_StdDescriptor_Configuration_Header_t for the version of this type with standard element names.
*
* \note Regardless of CPU architecture, these values should be stored as little endian.
*/
typedef struct