All USB class drivers are now automatically included when LUFA/Drivers/USB.h is included, and no longer need to be seperately included.
All LowLevel demos changed to use the constants and types defined in the USB class drivers.
This commit is contained in:
parent
8f3bee7d86
commit
b37d77eab3
208 changed files with 589 additions and 2910 deletions
|
|
@ -212,7 +212,7 @@ void WriteNextReport(uint8_t* ReportOUTData,
|
|||
USB_ControlRequest = (USB_Request_Header_t)
|
||||
{
|
||||
.bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE),
|
||||
.bRequest = REQ_SetReport,
|
||||
.bRequest = HID_REQ_SetReport,
|
||||
.wValue = ((ReportType << 8) | ReportIndex),
|
||||
.wIndex = 0,
|
||||
.wLength = ReportLength,
|
||||
|
|
|
|||
|
|
@ -53,9 +53,6 @@
|
|||
#include "ConfigDescriptor.h"
|
||||
|
||||
/* Macros: */
|
||||
/** HID Class specific request to send a HID report to the device. */
|
||||
#define REQ_SetReport 0x09
|
||||
|
||||
/** LED mask for the library LED driver, to indicate that the USB interface is not ready. */
|
||||
#define LEDMASK_USB_NOTREADY LEDS_LED1
|
||||
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ uint8_t ProcessConfigurationDescriptor(void)
|
|||
uint16_t CurrConfigBytesRem;
|
||||
|
||||
USB_Descriptor_Interface_t* HIDInterface = NULL;
|
||||
USB_Descriptor_HID_t* HIDDescriptor = NULL;
|
||||
USB_HID_Descriptor_HID_t* HIDDescriptor = NULL;
|
||||
USB_Descriptor_Endpoint_t* DataINEndpoint = NULL;
|
||||
|
||||
/* Retrieve the entire configuration descriptor into the allocated buffer */
|
||||
|
|
@ -95,7 +95,7 @@ uint8_t ProcessConfigurationDescriptor(void)
|
|||
}
|
||||
|
||||
/* Save the HID descriptor for later use */
|
||||
HIDDescriptor = DESCRIPTOR_PCAST(CurrConfigLocation, USB_Descriptor_HID_t);
|
||||
HIDDescriptor = DESCRIPTOR_PCAST(CurrConfigLocation, USB_HID_Descriptor_HID_t);
|
||||
|
||||
/* Skip the remainder of the loop as we have not found an endpoint yet */
|
||||
continue;
|
||||
|
|
@ -178,7 +178,7 @@ uint8_t DComp_NextJoystickInterfaceDataEndpoint(void* CurrentDescriptor)
|
|||
*/
|
||||
uint8_t DComp_NextHID(void* CurrentDescriptor)
|
||||
{
|
||||
if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_HID)
|
||||
if (DESCRIPTOR_TYPE(CurrentDescriptor) == HID_DTYPE_HID)
|
||||
return DESCRIPTOR_SEARCH_Found;
|
||||
else
|
||||
return DESCRIPTOR_SEARCH_NotFound;
|
||||
|
|
|
|||
|
|
@ -48,12 +48,6 @@
|
|||
/** Interface Protocol value for a Boot Protocol Mouse compliant device. */
|
||||
#define JOYSTICK_PROTOCOL 0x02
|
||||
|
||||
/** Descriptor header type constant for a HID descriptor. */
|
||||
#define DTYPE_HID 0x21
|
||||
|
||||
/** Descriptor header type constant for a HID report descriptor. */
|
||||
#define DTYPE_Report 0x22
|
||||
|
||||
/** Pipe number for the joystick report data pipe. */
|
||||
#define JOYSTICK_DATA_IN_PIPE 1
|
||||
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ uint8_t GetHIDReportData(void)
|
|||
{
|
||||
.bmRequestType = (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_INTERFACE),
|
||||
.bRequest = REQ_GetDescriptor,
|
||||
.wValue = (DTYPE_Report << 8),
|
||||
.wValue = (HID_DTYPE_Report << 8),
|
||||
.wIndex = 0,
|
||||
.wLength = HIDReportSize,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -38,25 +38,24 @@
|
|||
|
||||
/* Includes: */
|
||||
#include <LUFA/Drivers/USB/USB.h>
|
||||
#include <LUFA/Drivers/USB/Class/Host/HIDParser.h>
|
||||
|
||||
#include "JoystickHostWithParser.h"
|
||||
|
||||
|
||||
/* Macros: */
|
||||
/** HID Report Descriptor Usage for a Joystick. */
|
||||
#define USAGE_JOYSTICK 0x04
|
||||
|
||||
/** HID Report Descriptor Usage Page value for a toggle button. */
|
||||
#define USAGE_PAGE_BUTTON 0x09
|
||||
|
||||
/** HID Report Descriptor Usage Page value for a Generic Desktop Control. */
|
||||
#define USAGE_PAGE_GENERIC_DCTRL 0x01
|
||||
|
||||
/** HID Report Descriptor Usage for a Joystick. */
|
||||
#define USAGE_JOYSTICK 0x04
|
||||
|
||||
/** HID Report Descriptor Usage value for a X axis movement. */
|
||||
#define USAGE_X 0x30
|
||||
|
||||
/** HID Report Descriptor Usage value for a Y axis movement. */
|
||||
#define USAGE_Y 0x31
|
||||
#define USAGE_Y 0x31
|
||||
|
||||
/* Enums: */
|
||||
/** Enum for the possible return codes of the \ref GetHIDReportData() function. */
|
||||
|
|
@ -67,21 +66,6 @@
|
|||
ParseControlError = 2, /**< Control error occurred while trying to read the device HID descriptor */
|
||||
};
|
||||
|
||||
/* Type Defines: */
|
||||
/** Type define for a HID descriptor. */
|
||||
typedef struct
|
||||
{
|
||||
USB_Descriptor_Header_t Header; /**< Regular descriptor header containing the descriptor's type and length */
|
||||
|
||||
uint16_t HIDSpec; /**< Implemented HID class specification, in BCD encoded format */
|
||||
uint8_t CountryCode; /**< Country code value for localized hardware */
|
||||
|
||||
uint8_t TotalHIDDescriptors; /**< Total number of HID report descriptors in the current interface */
|
||||
|
||||
uint8_t HIDReportType; /**< HID report type of the first HID report descriptor */
|
||||
uint16_t HIDReportLength; /**< Total size in bytes of the first HID report descriptor */
|
||||
} USB_Descriptor_HID_t;
|
||||
|
||||
/* External Variables: */
|
||||
extern uint16_t HIDReportSize;
|
||||
extern HID_ReportInfo_t HIDReportInfo;
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@
|
|||
|
||||
/** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */
|
||||
#define LEDMASK_USB_ERROR (LEDS_LED1 | LEDS_LED3)
|
||||
|
||||
|
||||
/* Function Prototypes: */
|
||||
void Joystick_HID_Task(void);
|
||||
void SetupHardware(void);
|
||||
|
|
|
|||
|
|
@ -233,7 +233,7 @@ void Keyboard_HID_Task(void)
|
|||
USB_ControlRequest = (USB_Request_Header_t)
|
||||
{
|
||||
.bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE),
|
||||
.bRequest = REQ_SetProtocol,
|
||||
.bRequest = HID_REQ_SetProtocol,
|
||||
.wValue = 0,
|
||||
.wIndex = 0,
|
||||
.wLength = 0,
|
||||
|
|
|
|||
|
|
@ -53,9 +53,6 @@
|
|||
#include "ConfigDescriptor.h"
|
||||
|
||||
/* Macros: */
|
||||
/** HID Class Specific request to set the report protocol mode. */
|
||||
#define REQ_SetProtocol 0x0B
|
||||
|
||||
/** LED mask for the library LED driver, to indicate that the USB interface is not ready. */
|
||||
#define LEDMASK_USB_NOTREADY LEDS_LED1
|
||||
|
||||
|
|
@ -68,15 +65,6 @@
|
|||
/** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */
|
||||
#define LEDMASK_USB_ERROR (LEDS_LED1 | LEDS_LED3)
|
||||
|
||||
/* Type Defines: */
|
||||
/** Type define for a standard Boot Protocol Keyboard report. */
|
||||
typedef struct
|
||||
{
|
||||
uint8_t Modifier; /**< Keyboard modifier byte, indicating pressed modifier keys (such as Shift, Control, etc.) */
|
||||
uint8_t Reserved; /**< Reserved for OEM use, always set to 0 */
|
||||
uint8_t KeyCode[6]; /**< Key codes of the currently pressed keys */
|
||||
} USB_KeyboardReport_Data_t;
|
||||
|
||||
/* Function Prototypes: */
|
||||
void Keyboard_HID_Task(void);
|
||||
void SetupHardware(void);
|
||||
|
|
|
|||
|
|
@ -178,7 +178,7 @@ uint8_t DComp_NextKeyboardInterfaceDataEndpoint(void* CurrentDescriptor)
|
|||
*/
|
||||
uint8_t DComp_NextHID(void* CurrentDescriptor)
|
||||
{
|
||||
if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_HID)
|
||||
if (DESCRIPTOR_TYPE(CurrentDescriptor) == HID_DTYPE_HID)
|
||||
return DESCRIPTOR_SEARCH_Found;
|
||||
else if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Interface)
|
||||
return DESCRIPTOR_SEARCH_Fail;
|
||||
|
|
|
|||
|
|
@ -48,12 +48,6 @@
|
|||
/** Interface Protocol value for a Boot Protocol Keyboard compliant device. */
|
||||
#define KEYBOARD_PROTOCOL 0x01
|
||||
|
||||
/** Descriptor header type constant for a HID descriptor. */
|
||||
#define DTYPE_HID 0x21
|
||||
|
||||
/** Descriptor header type constant for a HID report descriptor. */
|
||||
#define DTYPE_Report 0x22
|
||||
|
||||
/** Pipe number for the keyboard report data pipe. */
|
||||
#define KEYBOARD_DATA_IN_PIPE 1
|
||||
|
||||
|
|
|
|||
|
|
@ -38,14 +38,9 @@
|
|||
|
||||
/* Includes: */
|
||||
#include <LUFA/Drivers/USB/USB.h>
|
||||
#include <LUFA/Drivers/USB/Class/Host/HIDParser.h>
|
||||
|
||||
#include "KeyboardHostWithParser.h"
|
||||
|
||||
/* Macros: */
|
||||
/** HID Report Descriptor Usage Page value for a desktop keyboard. */
|
||||
#define USAGE_PAGE_KEYBOARD 0x07
|
||||
|
||||
/* Enums: */
|
||||
/** Enum for the possible return codes of the \ref GetHIDReportData() function. */
|
||||
enum KeyboardHostWithParser_GetHIDReportDataCodes_t
|
||||
|
|
@ -55,21 +50,6 @@
|
|||
ParseControlError = 2, /**< Control error occurred while trying to read the device HID descriptor */
|
||||
};
|
||||
|
||||
/* Type Defines: */
|
||||
/** Type define for a HID descriptor. */
|
||||
typedef struct
|
||||
{
|
||||
USB_Descriptor_Header_t Header; /**< Regular descriptor header containing the descriptor's type and length */
|
||||
|
||||
uint16_t HIDSpec; /**< Implemented HID class specification, in BCD encoded format */
|
||||
uint8_t CountryCode; /**< Country code value for localized hardware */
|
||||
|
||||
uint8_t TotalHIDDescriptors; /**< Total number of HID report descriptors in the current interface */
|
||||
|
||||
uint8_t HIDReportType; /**< HID report type of the first HID report descriptor */
|
||||
uint16_t HIDReportLength; /**< Total size in bytes of the first HID report descriptor */
|
||||
} USB_Descriptor_HID_t;
|
||||
|
||||
/* External Variables: */
|
||||
extern uint16_t HIDReportSize;
|
||||
extern HID_ReportInfo_t HIDReportInfo;
|
||||
|
|
|
|||
|
|
@ -179,7 +179,7 @@ void MIDI_Host_Task(void)
|
|||
|
||||
if (Pipe_IsINReceived())
|
||||
{
|
||||
USB_MIDI_EventPacket_t MIDIEvent;
|
||||
MIDI_EventPacket_t MIDIEvent;
|
||||
|
||||
Pipe_Read_Stream_LE(&MIDIEvent, sizeof(MIDIEvent));
|
||||
|
||||
|
|
@ -244,7 +244,7 @@ void MIDI_Host_Task(void)
|
|||
/* Check if a MIDI command is to be sent */
|
||||
if (MIDICommand)
|
||||
{
|
||||
USB_MIDI_EventPacket_t MIDIEvent = (USB_MIDI_EventPacket_t)
|
||||
MIDI_EventPacket_t MIDIEvent = (MIDI_EventPacket_t)
|
||||
{
|
||||
.CableNumber = 0,
|
||||
.Command = (MIDICommand >> 4),
|
||||
|
|
|
|||
|
|
@ -55,22 +55,6 @@
|
|||
#include "ConfigDescriptor.h"
|
||||
|
||||
/* Macros: */
|
||||
/** MIDI command for a note on (activation) event. */
|
||||
#define MIDI_COMMAND_NOTE_ON 0x90
|
||||
|
||||
/** MIDI command for a note off (deactivation) event. */
|
||||
#define MIDI_COMMAND_NOTE_OFF 0x80
|
||||
|
||||
/** Standard key press velocity value used for all note events, as no pressure sensor is mounted. */
|
||||
#define MIDI_STANDARD_VELOCITY 64
|
||||
|
||||
/** Convenience macro. MIDI channels are numbered from 1-10 (natural numbers) however the logical channel
|
||||
* addresses are zero-indexed. This converts a natural MIDI channel number into the logical channel address.
|
||||
*
|
||||
* \param[in] channel MIDI channel number to address
|
||||
*/
|
||||
#define MIDI_CHANNEL(channel) (channel - 1)
|
||||
|
||||
/** LED mask for the library LED driver, to indicate that the USB interface is not ready. */
|
||||
#define LEDMASK_USB_NOTREADY LEDS_LED1
|
||||
|
||||
|
|
@ -83,18 +67,6 @@
|
|||
/** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */
|
||||
#define LEDMASK_USB_ERROR (LEDS_LED1 | LEDS_LED3)
|
||||
|
||||
/* Type Defines: */
|
||||
/** Type define for a USB MIDI event packet, used to encapsulate sent and received MIDI messages from a USB MIDI interface. */
|
||||
typedef struct
|
||||
{
|
||||
unsigned char Command : 4; /**< MIDI command being sent or received in the event packet */
|
||||
unsigned char CableNumber : 4; /**< Virtual cable number of the event being sent or received in the given MIDI interface */
|
||||
|
||||
uint8_t Data1; /**< First byte of data in the MIDI event */
|
||||
uint8_t Data2; /**< Second byte of data in the MIDI event */
|
||||
uint8_t Data3; /**< Third byte of data in the MIDI event */
|
||||
} USB_MIDI_EventPacket_t;
|
||||
|
||||
/* Function Prototypes: */
|
||||
void SetupHardware(void);
|
||||
void MIDI_Host_Task(void);
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ static uint32_t MassStore_Tag = 1;
|
|||
*
|
||||
* \return A value from the Pipe_Stream_RW_ErrorCodes_t enum
|
||||
*/
|
||||
static uint8_t MassStore_SendCommand(CommandBlockWrapper_t* const SCSICommandBlock,
|
||||
static uint8_t MassStore_SendCommand(MS_CommandBlockWrapper_t* const SCSICommandBlock,
|
||||
void* BufferPtr)
|
||||
{
|
||||
uint8_t ErrorCode = PIPE_RWSTREAM_NoError;
|
||||
|
|
@ -80,7 +80,7 @@ static uint8_t MassStore_SendCommand(CommandBlockWrapper_t* const SCSICommandBlo
|
|||
Pipe_Unfreeze();
|
||||
|
||||
/* Write the CBW command to the OUT pipe */
|
||||
if ((ErrorCode = Pipe_Write_Stream_LE(SCSICommandBlock, sizeof(CommandBlockWrapper_t))) != PIPE_RWSTREAM_NoError)
|
||||
if ((ErrorCode = Pipe_Write_Stream_LE(SCSICommandBlock, sizeof(MS_CommandBlockWrapper_t))) != PIPE_RWSTREAM_NoError)
|
||||
return ErrorCode;
|
||||
|
||||
/* Send the data in the OUT pipe to the attached device */
|
||||
|
|
@ -182,7 +182,7 @@ static uint8_t MassStore_WaitForDataReceived(void)
|
|||
*
|
||||
* \return A value from the Pipe_Stream_RW_ErrorCodes_t enum
|
||||
*/
|
||||
static uint8_t MassStore_SendReceiveData(CommandBlockWrapper_t* const SCSICommandBlock,
|
||||
static uint8_t MassStore_SendReceiveData(MS_CommandBlockWrapper_t* const SCSICommandBlock,
|
||||
void* BufferPtr)
|
||||
{
|
||||
uint8_t ErrorCode = PIPE_RWSTREAM_NoError;
|
||||
|
|
@ -238,7 +238,7 @@ static uint8_t MassStore_SendReceiveData(CommandBlockWrapper_t* const SCSIComman
|
|||
*
|
||||
* \return A value from the Pipe_Stream_RW_ErrorCodes_t enum, or MASS_STORE_SCSI_COMMAND_FAILED if the SCSI command fails
|
||||
*/
|
||||
static uint8_t MassStore_GetReturnedStatus(CommandStatusWrapper_t* const SCSICommandStatus)
|
||||
static uint8_t MassStore_GetReturnedStatus(MS_CommandStatusWrapper_t* const SCSICommandStatus)
|
||||
{
|
||||
uint8_t ErrorCode = PIPE_RWSTREAM_NoError;
|
||||
|
||||
|
|
@ -251,7 +251,7 @@ static uint8_t MassStore_GetReturnedStatus(CommandStatusWrapper_t* const SCSICom
|
|||
Pipe_Unfreeze();
|
||||
|
||||
/* Load in the CSW from the attached device */
|
||||
if ((ErrorCode = Pipe_Read_Stream_LE(SCSICommandStatus, sizeof(CommandStatusWrapper_t))) != PIPE_RWSTREAM_NoError)
|
||||
if ((ErrorCode = Pipe_Read_Stream_LE(SCSICommandStatus, sizeof(MS_CommandStatusWrapper_t))) != PIPE_RWSTREAM_NoError)
|
||||
return ErrorCode;
|
||||
|
||||
/* Clear the data ready for next reception */
|
||||
|
|
@ -261,7 +261,7 @@ static uint8_t MassStore_GetReturnedStatus(CommandStatusWrapper_t* const SCSICom
|
|||
Pipe_Freeze();
|
||||
|
||||
/* Check to see if command failed */
|
||||
if (SCSICommandStatus->Status != Command_Pass)
|
||||
if (SCSICommandStatus->Status != MS_SCSI_COMMAND_Pass)
|
||||
ErrorCode = MASS_STORE_SCSI_COMMAND_FAILED;
|
||||
|
||||
return ErrorCode;
|
||||
|
|
@ -277,7 +277,7 @@ uint8_t MassStore_MassStorageReset(void)
|
|||
USB_ControlRequest = (USB_Request_Header_t)
|
||||
{
|
||||
.bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE),
|
||||
.bRequest = REQ_MassStorageReset,
|
||||
.bRequest = MS_REQ_MassStorageReset,
|
||||
.wValue = 0,
|
||||
.wIndex = 0,
|
||||
.wLength = 0,
|
||||
|
|
@ -307,7 +307,7 @@ uint8_t MassStore_GetMaxLUN(uint8_t* const MaxLUNIndex)
|
|||
USB_ControlRequest = (USB_Request_Header_t)
|
||||
{
|
||||
.bmRequestType = (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE),
|
||||
.bRequest = REQ_GetMaxLUN,
|
||||
.bRequest = MS_REQ_GetMaxLUN,
|
||||
.wValue = 0,
|
||||
.wIndex = 0,
|
||||
.wLength = 1,
|
||||
|
|
@ -345,7 +345,7 @@ uint8_t MassStore_Inquiry(const uint8_t LUNIndex,
|
|||
uint8_t ErrorCode = PIPE_RWSTREAM_NoError;
|
||||
|
||||
/* Create a CBW with a SCSI command to issue INQUIRY command */
|
||||
CommandBlockWrapper_t SCSICommandBlock = (CommandBlockWrapper_t)
|
||||
MS_CommandBlockWrapper_t SCSICommandBlock = (MS_CommandBlockWrapper_t)
|
||||
{
|
||||
.Signature = CBW_SIGNATURE,
|
||||
.DataTransferLength = sizeof(SCSI_Inquiry_Response_t),
|
||||
|
|
@ -363,7 +363,7 @@ uint8_t MassStore_Inquiry(const uint8_t LUNIndex,
|
|||
}
|
||||
};
|
||||
|
||||
CommandStatusWrapper_t SCSICommandStatus;
|
||||
MS_CommandStatusWrapper_t SCSICommandStatus;
|
||||
|
||||
/* Send the command and any data to the attached device */
|
||||
if ((ErrorCode = MassStore_SendCommand(&SCSICommandBlock, InquiryPtr)) != PIPE_RWSTREAM_NoError)
|
||||
|
|
@ -396,7 +396,7 @@ uint8_t MassStore_RequestSense(const uint8_t LUNIndex,
|
|||
uint8_t ErrorCode = PIPE_RWSTREAM_NoError;
|
||||
|
||||
/* Create a CBW with a SCSI command to issue REQUEST SENSE command */
|
||||
CommandBlockWrapper_t SCSICommandBlock = (CommandBlockWrapper_t)
|
||||
MS_CommandBlockWrapper_t SCSICommandBlock = (MS_CommandBlockWrapper_t)
|
||||
{
|
||||
.Signature = CBW_SIGNATURE,
|
||||
.DataTransferLength = sizeof(SCSI_Request_Sense_Response_t),
|
||||
|
|
@ -414,7 +414,7 @@ uint8_t MassStore_RequestSense(const uint8_t LUNIndex,
|
|||
}
|
||||
};
|
||||
|
||||
CommandStatusWrapper_t SCSICommandStatus;
|
||||
MS_CommandStatusWrapper_t SCSICommandStatus;
|
||||
|
||||
/* Send the command and any data to the attached device */
|
||||
if ((ErrorCode = MassStore_SendCommand(&SCSICommandBlock, SensePtr)) != PIPE_RWSTREAM_NoError)
|
||||
|
|
@ -453,7 +453,7 @@ uint8_t MassStore_ReadDeviceBlock(const uint8_t LUNIndex,
|
|||
uint8_t ErrorCode = PIPE_RWSTREAM_NoError;
|
||||
|
||||
/* Create a CBW with a SCSI command to read in the given blocks from the device */
|
||||
CommandBlockWrapper_t SCSICommandBlock = (CommandBlockWrapper_t)
|
||||
MS_CommandBlockWrapper_t SCSICommandBlock = (MS_CommandBlockWrapper_t)
|
||||
{
|
||||
.Signature = CBW_SIGNATURE,
|
||||
.DataTransferLength = ((uint32_t)Blocks * BlockSize),
|
||||
|
|
@ -475,7 +475,7 @@ uint8_t MassStore_ReadDeviceBlock(const uint8_t LUNIndex,
|
|||
}
|
||||
};
|
||||
|
||||
CommandStatusWrapper_t SCSICommandStatus;
|
||||
MS_CommandStatusWrapper_t SCSICommandStatus;
|
||||
|
||||
/* Send the command and any data to the attached device */
|
||||
if ((ErrorCode = MassStore_SendCommand(&SCSICommandBlock, BufferPtr)) != PIPE_RWSTREAM_NoError)
|
||||
|
|
@ -514,7 +514,7 @@ uint8_t MassStore_WriteDeviceBlock(const uint8_t LUNIndex,
|
|||
uint8_t ErrorCode = PIPE_RWSTREAM_NoError;
|
||||
|
||||
/* Create a CBW with a SCSI command to write the given blocks to the device */
|
||||
CommandBlockWrapper_t SCSICommandBlock = (CommandBlockWrapper_t)
|
||||
MS_CommandBlockWrapper_t SCSICommandBlock = (MS_CommandBlockWrapper_t)
|
||||
{
|
||||
.Signature = CBW_SIGNATURE,
|
||||
.DataTransferLength = ((uint32_t)Blocks * BlockSize),
|
||||
|
|
@ -536,7 +536,7 @@ uint8_t MassStore_WriteDeviceBlock(const uint8_t LUNIndex,
|
|||
}
|
||||
};
|
||||
|
||||
CommandStatusWrapper_t SCSICommandStatus;
|
||||
MS_CommandStatusWrapper_t SCSICommandStatus;
|
||||
|
||||
/* Send the command and any data to the attached device */
|
||||
if ((ErrorCode = MassStore_SendCommand(&SCSICommandBlock, BufferPtr)) != PIPE_RWSTREAM_NoError)
|
||||
|
|
@ -567,7 +567,7 @@ uint8_t MassStore_TestUnitReady(const uint8_t LUNIndex)
|
|||
uint8_t ErrorCode = PIPE_RWSTREAM_NoError;
|
||||
|
||||
/* Create a CBW with a SCSI command to issue TEST UNIT READY command */
|
||||
CommandBlockWrapper_t SCSICommandBlock = (CommandBlockWrapper_t)
|
||||
MS_CommandBlockWrapper_t SCSICommandBlock = (MS_CommandBlockWrapper_t)
|
||||
{
|
||||
.Signature = CBW_SIGNATURE,
|
||||
.DataTransferLength = 0,
|
||||
|
|
@ -585,7 +585,7 @@ uint8_t MassStore_TestUnitReady(const uint8_t LUNIndex)
|
|||
}
|
||||
};
|
||||
|
||||
CommandStatusWrapper_t SCSICommandStatus;
|
||||
MS_CommandStatusWrapper_t SCSICommandStatus;
|
||||
|
||||
/* Send the command and any data to the attached device */
|
||||
if ((ErrorCode = MassStore_SendCommand(&SCSICommandBlock, NULL)) != PIPE_RWSTREAM_NoError)
|
||||
|
|
@ -618,7 +618,7 @@ uint8_t MassStore_ReadCapacity(const uint8_t LUNIndex,
|
|||
uint8_t ErrorCode = PIPE_RWSTREAM_NoError;
|
||||
|
||||
/* Create a CBW with a SCSI command to issue READ CAPACITY command */
|
||||
CommandBlockWrapper_t SCSICommandBlock = (CommandBlockWrapper_t)
|
||||
MS_CommandBlockWrapper_t SCSICommandBlock = (MS_CommandBlockWrapper_t)
|
||||
{
|
||||
.Signature = CBW_SIGNATURE,
|
||||
.DataTransferLength = sizeof(SCSI_Capacity_t),
|
||||
|
|
@ -640,7 +640,7 @@ uint8_t MassStore_ReadCapacity(const uint8_t LUNIndex,
|
|||
}
|
||||
};
|
||||
|
||||
CommandStatusWrapper_t SCSICommandStatus;
|
||||
MS_CommandStatusWrapper_t SCSICommandStatus;
|
||||
|
||||
/* Send the command and any data to the attached device */
|
||||
if ((ErrorCode = MassStore_SendCommand(&SCSICommandBlock, CapacityPtr)) != PIPE_RWSTREAM_NoError)
|
||||
|
|
@ -678,7 +678,7 @@ uint8_t MassStore_PreventAllowMediumRemoval(const uint8_t LUNIndex,
|
|||
uint8_t ErrorCode = PIPE_RWSTREAM_NoError;
|
||||
|
||||
/* Create a CBW with a SCSI command to issue PREVENT ALLOW MEDIUM REMOVAL command */
|
||||
CommandBlockWrapper_t SCSICommandBlock = (CommandBlockWrapper_t)
|
||||
MS_CommandBlockWrapper_t SCSICommandBlock = (MS_CommandBlockWrapper_t)
|
||||
{
|
||||
.Signature = CBW_SIGNATURE,
|
||||
.DataTransferLength = 0,
|
||||
|
|
@ -696,7 +696,7 @@ uint8_t MassStore_PreventAllowMediumRemoval(const uint8_t LUNIndex,
|
|||
}
|
||||
};
|
||||
|
||||
CommandStatusWrapper_t SCSICommandStatus;
|
||||
MS_CommandStatusWrapper_t SCSICommandStatus;
|
||||
|
||||
/* Send the command and any data to the attached device */
|
||||
if ((ErrorCode = MassStore_SendCommand(&SCSICommandBlock, NULL)) != PIPE_RWSTREAM_NoError)
|
||||
|
|
|
|||
|
|
@ -40,151 +40,24 @@
|
|||
#include <avr/io.h>
|
||||
|
||||
#include "MassStorageHost.h"
|
||||
#include "SCSI_Codes.h"
|
||||
|
||||
#include <LUFA/Drivers/USB/USB.h>
|
||||
|
||||
/* Macros: */
|
||||
/** Class specific request to reset the Mass Storage interface of the attached device. */
|
||||
#define REQ_MassStorageReset 0xFF
|
||||
|
||||
/** Class specific request to retrieve the maximum Logical Unit Number (LUN) index of the attached device. */
|
||||
#define REQ_GetMaxLUN 0xFE
|
||||
|
||||
/** Command Block Wrapper signature byte, for verification of valid CBW blocks. */
|
||||
#define CBW_SIGNATURE 0x43425355UL
|
||||
|
||||
/** Command Static Wrapper signature byte, for verification of valid CSW blocks. */
|
||||
#define CSW_SIGNATURE 0x53425355UL
|
||||
|
||||
/** Data direction mask for the Flags field of a CBW, indicating Host-to-Device transfer direction. */
|
||||
#define COMMAND_DIRECTION_DATA_OUT (0 << 7)
|
||||
|
||||
/** Data direction mask for the Flags field of a CBW, indicating Device-to-Host transfer direction. */
|
||||
#define COMMAND_DIRECTION_DATA_IN (1 << 7)
|
||||
|
||||
/** Timeout period between the issuing of a CBW to a device, and the reception of the first packet. */
|
||||
#define COMMAND_DATA_TIMEOUT_MS 10000
|
||||
|
||||
/** Additional error code for Mass Storage functions when a device returns a logical command failure. */
|
||||
#define MASS_STORE_SCSI_COMMAND_FAILED 0xC0
|
||||
|
||||
/* Type Defines: */
|
||||
/** Type define for a Mass Storage class Command Block Wrapper, used to wrap SCSI
|
||||
* commands for transport over the USB bulk endpoints to the device.
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
uint32_t Signature; /**< Command block signature, always equal to CBW_SIGNATURE */
|
||||
uint32_t Tag; /**< Current CBW tag, to positively associate a CBW with a CSW (filled automatically) */
|
||||
uint32_t DataTransferLength; /**< Length of data to transfer, following the CBW */
|
||||
uint8_t Flags; /**< Block flags, equal to one of the COMMAND_DIRECTION_DATA_* macros */
|
||||
uint8_t LUN; /**< Logical Unit Number the CBW is addressed to in the device */
|
||||
uint8_t SCSICommandLength; /**< Length of the SCSI command in the CBW */
|
||||
uint8_t SCSICommandData[16]; /**< SCSI command to issue to the device */
|
||||
} CommandBlockWrapper_t;
|
||||
|
||||
/** Type define for a Mass Storage class Command Status Wrapper, used to wrap SCSI
|
||||
* responses for transport over the USB bulk endpoints from the device.
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
uint32_t Signature; /**< Command status signature, always equal to CSW_SIGNATURE */
|
||||
uint32_t Tag; /**< Current CBW tag, to positively associate a CBW with a CSW */
|
||||
uint32_t DataTransferResidue; /**< Length of data not transferred */
|
||||
uint8_t Status; /**< Command status, a value from the MassStorageHost_CommandStatusCodes_t enum */
|
||||
} CommandStatusWrapper_t;
|
||||
|
||||
/** Type define for a SCSI Sense structure. Structures of this type are filled out by the
|
||||
* device via the \ref MassStore_RequestSense() function, indicating the current sense data of the
|
||||
* device (giving explicit error codes for the last issued command). For details of the
|
||||
* structure contents, refer to the SCSI specifications.
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
uint8_t ResponseCode;
|
||||
|
||||
uint8_t SegmentNumber;
|
||||
|
||||
unsigned char SenseKey : 4;
|
||||
unsigned char Reserved : 1;
|
||||
unsigned char ILI : 1;
|
||||
unsigned char EOM : 1;
|
||||
unsigned char FileMark : 1;
|
||||
|
||||
uint8_t Information[4];
|
||||
uint8_t AdditionalLength;
|
||||
uint8_t CmdSpecificInformation[4];
|
||||
uint8_t AdditionalSenseCode;
|
||||
uint8_t AdditionalSenseQualifier;
|
||||
uint8_t FieldReplaceableUnitCode;
|
||||
uint8_t SenseKeySpecific[3];
|
||||
} SCSI_Request_Sense_Response_t;
|
||||
|
||||
/** Type define for a SCSI Inquiry structure. Structures of this type are filled out by the
|
||||
* device via the \ref MassStore_Inquiry() function, retrieving the attached device's information.
|
||||
* For details of the structure contents, refer to the SCSI specifications.
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
unsigned char DeviceType : 5;
|
||||
unsigned char PeripheralQualifier : 3;
|
||||
|
||||
unsigned char Reserved : 7;
|
||||
unsigned char Removable : 1;
|
||||
|
||||
uint8_t Version;
|
||||
|
||||
unsigned char ResponseDataFormat : 4;
|
||||
unsigned char Reserved2 : 1;
|
||||
unsigned char NormACA : 1;
|
||||
unsigned char TrmTsk : 1;
|
||||
unsigned char AERC : 1;
|
||||
|
||||
uint8_t AdditionalLength;
|
||||
uint8_t Reserved3[2];
|
||||
|
||||
unsigned char SoftReset : 1;
|
||||
unsigned char CmdQue : 1;
|
||||
unsigned char Reserved4 : 1;
|
||||
unsigned char Linked : 1;
|
||||
unsigned char Sync : 1;
|
||||
unsigned char WideBus16Bit : 1;
|
||||
unsigned char WideBus32Bit : 1;
|
||||
unsigned char RelAddr : 1;
|
||||
|
||||
uint8_t VendorID[8];
|
||||
uint8_t ProductID[16];
|
||||
uint8_t RevisionID[4];
|
||||
} SCSI_Inquiry_Response_t;
|
||||
|
||||
/** SCSI capacity structure, to hold the total capacity of the device in both the number
|
||||
* of blocks in the current LUN, and the size of each block. This structure is filled by
|
||||
* the device when the \ref MassStore_ReadCapacity() function is called.
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
uint32_t Blocks; /**< Number of blocks in the addressed LUN of the device */
|
||||
uint32_t BlockSize; /**< Number of bytes in each block in the addressed LUN */
|
||||
} SCSI_Capacity_t;
|
||||
|
||||
/* Enums: */
|
||||
/** CSW status return codes, indicating the overall status of the issued CBW. */
|
||||
enum MassStorageHost_CommandStatusCodes_t
|
||||
{
|
||||
Command_Pass = 0, /**< Command completed successfully */
|
||||
Command_Fail = 1, /**< Command failed to complete successfully */
|
||||
Phase_Error = 2 /**< Phase error while processing the issued command */
|
||||
};
|
||||
|
||||
/* Function Prototypes: */
|
||||
#if defined(INCLUDE_FROM_MASSSTORE_COMMANDS_C)
|
||||
static uint8_t MassStore_SendCommand(CommandBlockWrapper_t* const SCSICommandBlock,
|
||||
static uint8_t MassStore_SendCommand(MS_CommandBlockWrapper_t* const SCSICommandBlock,
|
||||
void* BufferPtr);
|
||||
static uint8_t MassStore_WaitForDataReceived(void);
|
||||
static uint8_t MassStore_SendReceiveData(CommandBlockWrapper_t* const SCSICommandBlock,
|
||||
static uint8_t MassStore_SendReceiveData(MS_CommandBlockWrapper_t* const SCSICommandBlock,
|
||||
void* BufferPtr) ATTR_NON_NULL_PTR_ARG(1);
|
||||
static uint8_t MassStore_GetReturnedStatus(CommandStatusWrapper_t* const SCSICommandStatus) ATTR_NON_NULL_PTR_ARG(1);
|
||||
static uint8_t MassStore_GetReturnedStatus(MS_CommandStatusWrapper_t* const SCSICommandStatus) ATTR_NON_NULL_PTR_ARG(1);
|
||||
#endif
|
||||
|
||||
uint8_t MassStore_MassStorageReset(void);
|
||||
|
|
|
|||
|
|
@ -1,87 +0,0 @@
|
|||
/*
|
||||
LUFA Library
|
||||
Copyright (C) Dean Camera, 2010.
|
||||
|
||||
dean [at] fourwalledcubicle [dot] com
|
||||
www.fourwalledcubicle.com
|
||||
*/
|
||||
|
||||
/*
|
||||
Copyright 2010 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
|
||||
without fee, provided that the above copyright notice appear in
|
||||
all copies and that both that the copyright notice and this
|
||||
permission notice and warranty disclaimer appear in supporting
|
||||
documentation, and that the name of the author not be used in
|
||||
advertising or publicity pertaining to distribution of the
|
||||
software without specific, written prior permission.
|
||||
|
||||
The author disclaim all warranties with regard to this
|
||||
software, including all implied warranties of merchantability
|
||||
and fitness. In no event shall the author be liable for any
|
||||
special, indirect or consequential damages or any damages
|
||||
whatsoever resulting from loss of use, data or profits, whether
|
||||
in an action of contract, negligence or other tortious action,
|
||||
arising out of or in connection with the use or performance of
|
||||
this software.
|
||||
*/
|
||||
|
||||
/** \file
|
||||
*
|
||||
* Header containing macros for possible SCSI commands and SENSE data. Refer to
|
||||
* the SCSI standard documentation for more information on each SCSI command and
|
||||
* the SENSE data.
|
||||
*/
|
||||
|
||||
#ifndef _SCSI_CODES_H_
|
||||
#define _SCSI_CODES_H_
|
||||
|
||||
/* Macros: */
|
||||
#define SCSI_CMD_INQUIRY 0x12
|
||||
#define SCSI_CMD_REQUEST_SENSE 0x03
|
||||
#define SCSI_CMD_TEST_UNIT_READY 0x00
|
||||
#define SCSI_CMD_READ_CAPACITY_10 0x25
|
||||
#define SCSI_CMD_SEND_DIAGNOSTIC 0x1D
|
||||
#define SCSI_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL 0x1E
|
||||
#define SCSI_CMD_WRITE_10 0x2A
|
||||
#define SCSI_CMD_READ_10 0x28
|
||||
#define SCSI_CMD_WRITE_6 0x0A
|
||||
#define SCSI_CMD_READ_6 0x08
|
||||
#define SCSI_CMD_VERIFY_10 0x2F
|
||||
#define SCSI_CMD_MODE_SENSE_6 0x1A
|
||||
#define SCSI_CMD_MODE_SENSE_10 0x5A
|
||||
|
||||
#define SCSI_SENSE_KEY_GOOD 0x00
|
||||
#define SCSI_SENSE_KEY_RECOVERED_ERROR 0x01
|
||||
#define SCSI_SENSE_KEY_NOT_READY 0x02
|
||||
#define SCSI_SENSE_KEY_MEDIUM_ERROR 0x03
|
||||
#define SCSI_SENSE_KEY_HARDWARE_ERROR 0x04
|
||||
#define SCSI_SENSE_KEY_ILLEGAL_REQUEST 0x05
|
||||
#define SCSI_SENSE_KEY_UNIT_ATTENTION 0x06
|
||||
#define SCSI_SENSE_KEY_DATA_PROTECT 0x07
|
||||
#define SCSI_SENSE_KEY_BLANK_CHECK 0x08
|
||||
#define SCSI_SENSE_KEY_VENDOR_SPECIFIC 0x09
|
||||
#define SCSI_SENSE_KEY_COPY_ABORTED 0x0A
|
||||
#define SCSI_SENSE_KEY_ABORTED_COMMAND 0x0B
|
||||
#define SCSI_SENSE_KEY_VOLUME_OVERFLOW 0x0D
|
||||
#define SCSI_SENSE_KEY_MISCOMPARE 0x0E
|
||||
|
||||
#define SCSI_ASENSE_NO_ADDITIONAL_INFORMATION 0x00
|
||||
#define SCSI_ASENSE_LOGICAL_UNIT_NOT_READY 0x04
|
||||
#define SCSI_ASENSE_INVALID_COMMAND 0x20
|
||||
#define SCSI_ASENSE_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE 0x21
|
||||
#define SCSI_ASENSE_INVALID_FIELD_IN_CDB 0x24
|
||||
#define SCSI_ASENSE_WRITE_PROTECTED 0x27
|
||||
#define SCSI_ASENSE_NOT_READY_TO_READY_CHANGE 0x28
|
||||
#define SCSI_ASENSE_FORMAT_ERROR 0x31
|
||||
#define SCSI_ASENSE_MEDIUM_NOT_PRESENT 0x3A
|
||||
|
||||
#define SCSI_ASENSEQ_NO_QUALIFIER 0x00
|
||||
#define SCSI_ASENSEQ_FORMAT_COMMAND_FAILED 0x01
|
||||
#define SCSI_ASENSEQ_INITIALIZING_COMMAND_REQUIRED 0x02
|
||||
#define SCSI_ASENSEQ_OPERATION_IN_PROGRESS 0x07
|
||||
|
||||
#endif
|
||||
|
||||
|
|
@ -235,7 +235,7 @@ void Mouse_HID_Task(void)
|
|||
USB_ControlRequest = (USB_Request_Header_t)
|
||||
{
|
||||
.bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE),
|
||||
.bRequest = REQ_SetProtocol,
|
||||
.bRequest = HID_REQ_SetProtocol,
|
||||
.wValue = 0,
|
||||
.wIndex = 0,
|
||||
.wLength = 0,
|
||||
|
|
|
|||
|
|
@ -53,9 +53,6 @@
|
|||
#include "ConfigDescriptor.h"
|
||||
|
||||
/* Macros: */
|
||||
/** HID Class Specific request to set the report protocol mode. */
|
||||
#define REQ_SetProtocol 0x0B
|
||||
|
||||
/** LED mask for the library LED driver, to indicate that the USB interface is not ready. */
|
||||
#define LEDMASK_USB_NOTREADY LEDS_LED1
|
||||
|
||||
|
|
@ -68,15 +65,6 @@
|
|||
/** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */
|
||||
#define LEDMASK_USB_ERROR (LEDS_LED1 | LEDS_LED3)
|
||||
|
||||
/* Type Defines: */
|
||||
/** Type define for a standard Boot Protocol Mouse report. */
|
||||
typedef struct
|
||||
{
|
||||
uint8_t Button; /**< Button mask for currently pressed buttons in the mouse */
|
||||
int8_t X; /**< Current delta X movement of the mouse */
|
||||
int8_t Y; /**< Current delta Y movement on the mouse */
|
||||
} USB_MouseReport_Data_t;
|
||||
|
||||
/* Function Prototypes: */
|
||||
void Mouse_HID_Task(void);
|
||||
void SetupHardware(void);
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ uint8_t ProcessConfigurationDescriptor(void)
|
|||
uint16_t CurrConfigBytesRem;
|
||||
|
||||
USB_Descriptor_Interface_t* HIDInterface = NULL;
|
||||
USB_Descriptor_HID_t* HIDDescriptor = NULL;
|
||||
USB_HID_Descriptor_HID_t* HIDDescriptor = NULL;
|
||||
USB_Descriptor_Endpoint_t* DataINEndpoint = NULL;
|
||||
|
||||
/* Retrieve the entire configuration descriptor into the allocated buffer */
|
||||
|
|
@ -95,7 +95,7 @@ uint8_t ProcessConfigurationDescriptor(void)
|
|||
}
|
||||
|
||||
/* Save the HID descriptor for later use */
|
||||
HIDDescriptor = DESCRIPTOR_PCAST(CurrConfigLocation, USB_Descriptor_HID_t);
|
||||
HIDDescriptor = DESCRIPTOR_PCAST(CurrConfigLocation, USB_HID_Descriptor_HID_t);
|
||||
|
||||
/* Skip the remainder of the loop as we have not found an endpoint yet */
|
||||
continue;
|
||||
|
|
@ -178,7 +178,7 @@ uint8_t DComp_NextMouseInterfaceDataEndpoint(void* CurrentDescriptor)
|
|||
*/
|
||||
uint8_t DComp_NextHID(void* CurrentDescriptor)
|
||||
{
|
||||
if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_HID)
|
||||
if (DESCRIPTOR_TYPE(CurrentDescriptor) == HID_DTYPE_HID)
|
||||
return DESCRIPTOR_SEARCH_Found;
|
||||
else
|
||||
return DESCRIPTOR_SEARCH_NotFound;
|
||||
|
|
|
|||
|
|
@ -48,12 +48,6 @@
|
|||
/** Interface Protocol value for a Boot Protocol Mouse compliant device. */
|
||||
#define MOUSE_PROTOCOL 0x02
|
||||
|
||||
/** Descriptor header type constant for a HID descriptor. */
|
||||
#define DTYPE_HID 0x21
|
||||
|
||||
/** Descriptor header type constant for a HID report descriptor. */
|
||||
#define DTYPE_Report 0x22
|
||||
|
||||
/** Pipe number for the mouse report data pipe. */
|
||||
#define MOUSE_DATA_IN_PIPE 1
|
||||
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ uint8_t GetHIDReportData(void)
|
|||
{
|
||||
.bmRequestType = (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_INTERFACE),
|
||||
.bRequest = REQ_GetDescriptor,
|
||||
.wValue = (DTYPE_Report << 8),
|
||||
.wValue = (HID_DTYPE_Report << 8),
|
||||
.wIndex = 0,
|
||||
.wLength = HIDReportSize,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -38,7 +38,6 @@
|
|||
|
||||
/* Includes: */
|
||||
#include <LUFA/Drivers/USB/USB.h>
|
||||
#include <LUFA/Drivers/USB/Class/Host/HIDParser.h>
|
||||
|
||||
#include "MouseHostWithParser.h"
|
||||
|
||||
|
|
@ -70,21 +69,6 @@
|
|||
ParseControlError = 2, /**< Control error occurred while trying to read the device HID descriptor */
|
||||
};
|
||||
|
||||
/* Type Defines: */
|
||||
/** Type define for a HID descriptor. */
|
||||
typedef struct
|
||||
{
|
||||
USB_Descriptor_Header_t Header; /**< Regular descriptor header containing the descriptor's type and length */
|
||||
|
||||
uint16_t HIDSpec; /**< Implemented HID class specification, in BCD encoded format */
|
||||
uint8_t CountryCode; /**< Country code value for localized hardware */
|
||||
|
||||
uint8_t TotalHIDDescriptors; /**< Total number of HID report descriptors in the current interface */
|
||||
|
||||
uint8_t HIDReportType; /**< HID report type of the first HID report descriptor */
|
||||
uint16_t HIDReportLength; /**< Total size in bytes of the first HID report descriptor */
|
||||
} USB_Descriptor_HID_t;
|
||||
|
||||
/* External Variables: */
|
||||
extern uint16_t HIDReportSize;
|
||||
extern HID_ReportInfo_t HIDReportInfo;
|
||||
|
|
|
|||
|
|
@ -81,7 +81,7 @@ uint8_t Printer_GetDeviceID(char* DeviceIDString,
|
|||
USB_ControlRequest = (USB_Request_Header_t)
|
||||
{
|
||||
.bmRequestType = (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE),
|
||||
.bRequest = REQ_GetDeviceID,
|
||||
.bRequest = PRNT_REQ_GetDeviceID,
|
||||
.wValue = 0,
|
||||
.wIndex = PrinterInterfaceNumber,
|
||||
.wLength = sizeof(DeviceIDStringLength),
|
||||
|
|
@ -128,7 +128,7 @@ uint8_t Printer_GetPortStatus(uint8_t* const PortStatus)
|
|||
USB_ControlRequest = (USB_Request_Header_t)
|
||||
{
|
||||
.bmRequestType = (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE),
|
||||
.bRequest = REQ_GetPortStatus,
|
||||
.bRequest = PRNT_REQ_GetPortStatus,
|
||||
.wValue = 0,
|
||||
.wIndex = PrinterInterfaceNumber,
|
||||
.wLength = sizeof(uint8_t),
|
||||
|
|
@ -149,7 +149,7 @@ uint8_t Printer_SoftReset(void)
|
|||
USB_ControlRequest = (USB_Request_Header_t)
|
||||
{
|
||||
.bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE),
|
||||
.bRequest = REQ_SoftReset,
|
||||
.bRequest = PRNT_REQ_SoftReset,
|
||||
.wValue = 0,
|
||||
.wIndex = PrinterInterfaceNumber,
|
||||
.wLength = 0,
|
||||
|
|
|
|||
|
|
@ -44,16 +44,6 @@
|
|||
|
||||
#include "../PrinterHost.h"
|
||||
|
||||
/* Macros: */
|
||||
/** Printer class-specific request to retrieve the printer's ID string. */
|
||||
#define REQ_GetDeviceID 0
|
||||
|
||||
/** Printer class-specific request to retrieve the printer's virtual port status flags. */
|
||||
#define REQ_GetPortStatus 1
|
||||
|
||||
/** Printer class-specific request to soft-reset the device. */
|
||||
#define REQ_SoftReset 2
|
||||
|
||||
/* Function Prototypes: */
|
||||
uint8_t Printer_SendData(const void* const PrinterCommands,
|
||||
const uint16_t CommandSize);
|
||||
|
|
|
|||
|
|
@ -42,15 +42,6 @@
|
|||
#include "RNDISEthernetHost.h"
|
||||
|
||||
/* Macros: */
|
||||
/** Interface Class value for the CDC class. */
|
||||
#define CDC_CONTROL_CLASS 0x02
|
||||
|
||||
/** Interface Class value for the CDC Communication Interface subclass. */
|
||||
#define CDC_CONTROL_SUBCLASS 0x02
|
||||
|
||||
/** Interface Class value for the CDC RNDIS vendor specific protocol. */
|
||||
#define CDC_CONTROL_PROTOCOL 0xFF
|
||||
|
||||
/** Interface Class value for the CDC data class. */
|
||||
#define CDC_DATA_CLASS 0x0A
|
||||
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ uint8_t RNDIS_SendEncapsulatedCommand(void* const Buffer,
|
|||
USB_ControlRequest = (USB_Request_Header_t)
|
||||
{
|
||||
.bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE),
|
||||
.bRequest = REQ_SendEncapsulatedCommand,
|
||||
.bRequest = RNDIS_REQ_SendEncapsulatedCommand,
|
||||
.wValue = 0,
|
||||
.wIndex = 0,
|
||||
.wLength = Length,
|
||||
|
|
@ -78,7 +78,7 @@ uint8_t RNDIS_GetEncapsulatedResponse(void* const Buffer,
|
|||
USB_ControlRequest = (USB_Request_Header_t)
|
||||
{
|
||||
.bmRequestType = (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE),
|
||||
.bRequest = REQ_GetEncapsulatedResponse,
|
||||
.bRequest = RNDIS_REQ_GetEncapsulatedResponse,
|
||||
.wValue = 0,
|
||||
.wIndex = 0,
|
||||
.wLength = Length,
|
||||
|
|
|
|||
|
|
@ -43,151 +43,9 @@
|
|||
|
||||
#include <LUFA/Drivers/USB/USB.h>
|
||||
|
||||
#include "RNDISConstants.h"
|
||||
#include "../RNDISEthernetHost.h"
|
||||
|
||||
/* Type Defines: */
|
||||
/** Type define for a RNDIS message header, sent before RNDIS messages. */
|
||||
typedef struct
|
||||
{
|
||||
uint32_t MessageType; /**< RNDIS message type, a REMOTE_NDIS_*_MSG constant */
|
||||
uint32_t MessageLength; /**< Total length of the RNDIS message, in bytes */
|
||||
} RNDIS_Message_Header_t;
|
||||
|
||||
/** Type define for a RNDIS packet message, used to encapsulate Ethernet packets sent to and from the adapter. */
|
||||
typedef struct
|
||||
{
|
||||
uint32_t MessageType;
|
||||
uint32_t MessageLength;
|
||||
uint32_t DataOffset;
|
||||
uint32_t DataLength;
|
||||
uint32_t OOBDataOffset;
|
||||
uint32_t OOBDataLength;
|
||||
uint32_t NumOOBDataElements;
|
||||
uint32_t PerPacketInfoOffset;
|
||||
uint32_t PerPacketInfoLength;
|
||||
uint32_t VcHandle;
|
||||
uint32_t Reserved;
|
||||
} RNDIS_Packet_Message_t;
|
||||
|
||||
/** Type define for a RNDIS Initialize command message. */
|
||||
typedef struct
|
||||
{
|
||||
uint32_t MessageType;
|
||||
uint32_t MessageLength;
|
||||
uint32_t RequestId;
|
||||
|
||||
uint32_t MajorVersion;
|
||||
uint32_t MinorVersion;
|
||||
uint32_t MaxTransferSize;
|
||||
} RNDIS_Initialize_Message_t;
|
||||
|
||||
/** Type define for a RNDIS Initialize complete response message. */
|
||||
typedef struct
|
||||
{
|
||||
uint32_t MessageType;
|
||||
uint32_t MessageLength;
|
||||
uint32_t RequestId;
|
||||
uint32_t Status;
|
||||
|
||||
uint32_t MajorVersion;
|
||||
uint32_t MinorVersion;
|
||||
uint32_t DeviceFlags;
|
||||
uint32_t Medium;
|
||||
uint32_t MaxPacketsPerTransfer;
|
||||
uint32_t MaxTransferSize;
|
||||
uint32_t PacketAlignmentFactor;
|
||||
uint32_t AFListOffset;
|
||||
uint32_t AFListSize;
|
||||
} RNDIS_Initialize_Complete_t;
|
||||
|
||||
/** Type define for a RNDIS Keep-alive command message. */
|
||||
typedef struct
|
||||
{
|
||||
uint32_t MessageType;
|
||||
uint32_t MessageLength;
|
||||
uint32_t RequestId;
|
||||
} RNDIS_KeepAlive_Message_t;
|
||||
|
||||
/** Type define for a RNDIS Keep-alive complete message. */
|
||||
typedef struct
|
||||
{
|
||||
uint32_t MessageType;
|
||||
uint32_t MessageLength;
|
||||
uint32_t RequestId;
|
||||
uint32_t Status;
|
||||
} RNDIS_KeepAlive_Complete_t;
|
||||
|
||||
/** Type define for a RNDIS Reset complete message. */
|
||||
typedef struct
|
||||
{
|
||||
uint32_t MessageType;
|
||||
uint32_t MessageLength;
|
||||
uint32_t Status;
|
||||
|
||||
uint32_t AddressingReset;
|
||||
} RNDIS_Reset_Complete_t;
|
||||
|
||||
/** Type define for a RNDIS Set command message. */
|
||||
typedef struct
|
||||
{
|
||||
uint32_t MessageType;
|
||||
uint32_t MessageLength;
|
||||
uint32_t RequestId;
|
||||
|
||||
uint32_t Oid;
|
||||
uint32_t InformationBufferLength;
|
||||
uint32_t InformationBufferOffset;
|
||||
uint32_t DeviceVcHandle;
|
||||
} RNDIS_Set_Message_t;
|
||||
|
||||
/** Type define for a RNDIS Set complete response message. */
|
||||
typedef struct
|
||||
{
|
||||
uint32_t MessageType;
|
||||
uint32_t MessageLength;
|
||||
uint32_t RequestId;
|
||||
uint32_t Status;
|
||||
} RNDIS_Set_Complete_t;
|
||||
|
||||
/** Type define for a RNDIS Query command message. */
|
||||
typedef struct
|
||||
{
|
||||
uint32_t MessageType;
|
||||
uint32_t MessageLength;
|
||||
uint32_t RequestId;
|
||||
|
||||
uint32_t Oid;
|
||||
uint32_t InformationBufferLength;
|
||||
uint32_t InformationBufferOffset;
|
||||
uint32_t DeviceVcHandle;
|
||||
} RNDIS_Query_Message_t;
|
||||
|
||||
/** Type define for a RNDIS Query complete response message. */
|
||||
typedef struct
|
||||
{
|
||||
uint32_t MessageType;
|
||||
uint32_t MessageLength;
|
||||
uint32_t RequestId;
|
||||
uint32_t Status;
|
||||
|
||||
uint32_t InformationBufferLength;
|
||||
uint32_t InformationBufferOffset;
|
||||
} RNDIS_Query_Complete_t;
|
||||
|
||||
/* Macros: */
|
||||
/** RNDIS request to issue a host-to-device NDIS command. */
|
||||
#define REQ_SendEncapsulatedCommand 0x00
|
||||
|
||||
/** RNDIS request to issue a device-to-host NDIS response. */
|
||||
#define REQ_GetEncapsulatedResponse 0x01
|
||||
|
||||
/** Implemented RNDIS Version Major. */
|
||||
#define REMOTE_NDIS_VERSION_MAJOR 0x01
|
||||
|
||||
/** Implemented RNDIS Version Minor. */
|
||||
#define REMOTE_NDIS_VERSION_MINOR 0x00
|
||||
|
||||
/** Additional error code for RNDIS functions when a device returns a logical command failure. */
|
||||
#define RNDIS_COMMAND_FAILED 0xC0
|
||||
|
||||
|
|
|
|||
|
|
@ -1,113 +0,0 @@
|
|||
/*
|
||||
LUFA Library
|
||||
Copyright (C) Dean Camera, 2010.
|
||||
|
||||
dean [at] fourwalledcubicle [dot] com
|
||||
www.fourwalledcubicle.com
|
||||
*/
|
||||
|
||||
/*
|
||||
Copyright 2010 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
|
||||
without fee, provided that the above copyright notice appear in
|
||||
all copies and that both that the copyright notice and this
|
||||
permission notice and warranty disclaimer appear in supporting
|
||||
documentation, and that the name of the author not be used in
|
||||
advertising or publicity pertaining to distribution of the
|
||||
software without specific, written prior permission.
|
||||
|
||||
The author disclaim all warranties with regard to this
|
||||
software, including all implied warranties of merchantability
|
||||
and fitness. In no event shall the author be liable for any
|
||||
special, indirect or consequential damages or any damages
|
||||
whatsoever resulting from loss of use, data or profits, whether
|
||||
in an action of contract, negligence or other tortious action,
|
||||
arising out of or in connection with the use or performance of
|
||||
this software.
|
||||
*/
|
||||
|
||||
/** \file
|
||||
*
|
||||
* RNDIS specification related constants. For more information on these
|
||||
* constants, please refer to the Microsoft RNDIS specification.
|
||||
*/
|
||||
|
||||
#ifndef _RNDIS_CONSTANTS_DEVICE_H_
|
||||
#define _RNDIS_CONSTANTS_DEVICE_H_
|
||||
|
||||
/* Macros: */
|
||||
#define REMOTE_NDIS_PACKET_MSG 0x00000001UL
|
||||
#define REMOTE_NDIS_INITIALIZE_MSG 0x00000002UL
|
||||
#define REMOTE_NDIS_HALT_MSG 0x00000003UL
|
||||
#define REMOTE_NDIS_QUERY_MSG 0x00000004UL
|
||||
#define REMOTE_NDIS_SET_MSG 0x00000005UL
|
||||
#define REMOTE_NDIS_RESET_MSG 0x00000006UL
|
||||
#define REMOTE_NDIS_INDICATE_STATUS_MSG 0x00000007UL
|
||||
#define REMOTE_NDIS_KEEPALIVE_MSG 0x00000008UL
|
||||
|
||||
#define REMOTE_NDIS_INITIALIZE_CMPLT 0x80000002UL
|
||||
#define REMOTE_NDIS_QUERY_CMPLT 0x80000004UL
|
||||
#define REMOTE_NDIS_SET_CMPLT 0x80000005UL
|
||||
#define REMOTE_NDIS_RESET_CMPLT 0x80000006UL
|
||||
#define REMOTE_NDIS_KEEPALIVE_CMPLT 0x80000008UL
|
||||
|
||||
#define REMOTE_NDIS_STATUS_SUCCESS 0x00000000UL
|
||||
#define REMOTE_NDIS_STATUS_FAILURE 0xC0000001UL
|
||||
#define REMOTE_NDIS_STATUS_INVALID_DATA 0xC0010015UL
|
||||
#define REMOTE_NDIS_STATUS_NOT_SUPPORTED 0xC00000BBUL
|
||||
#define REMOTE_NDIS_STATUS_MEDIA_CONNECT 0x4001000BUL
|
||||
#define REMOTE_NDIS_STATUS_MEDIA_DISCONNECT 0x4001000CUL
|
||||
|
||||
#define REMOTE_NDIS_MEDIA_STATE_CONNECTED 0x00000000UL
|
||||
#define REMOTE_NDIS_MEDIA_STATE_DISCONNECTED 0x00000001UL
|
||||
|
||||
#define REMOTE_NDIS_MEDIUM_802_3 0x00000000UL
|
||||
|
||||
#define REMOTE_NDIS_DF_CONNECTIONLESS 0x00000001UL
|
||||
#define REMOTE_NDIS_DF_CONNECTION_ORIENTED 0x00000002UL
|
||||
|
||||
#define REMOTE_NDIS_PACKET_DIRECTED 0x00000001UL
|
||||
#define REMOTE_NDIS_PACKET_MULTICAST 0x00000002UL
|
||||
#define REMOTE_NDIS_PACKET_ALL_MULTICAST 0x00000004UL
|
||||
#define REMOTE_NDIS_PACKET_BROADCAST 0x00000008UL
|
||||
#define REMOTE_NDIS_PACKET_SOURCE_ROUTING 0x00000010UL
|
||||
#define REMOTE_NDIS_PACKET_PROMISCUOUS 0x00000020UL
|
||||
#define REMOTE_NDIS_PACKET_SMT 0x00000040UL
|
||||
#define REMOTE_NDIS_PACKET_ALL_LOCAL 0x00000080UL
|
||||
#define REMOTE_NDIS_PACKET_GROUP 0x00001000UL
|
||||
#define REMOTE_NDIS_PACKET_ALL_FUNCTIONAL 0x00002000UL
|
||||
#define REMOTE_NDIS_PACKET_FUNCTIONAL 0x00004000UL
|
||||
#define REMOTE_NDIS_PACKET_MAC_FRAME 0x00008000UL
|
||||
|
||||
#define OID_GEN_SUPPORTED_LIST 0x00010101UL
|
||||
#define OID_GEN_HARDWARE_STATUS 0x00010102UL
|
||||
#define OID_GEN_MEDIA_SUPPORTED 0x00010103UL
|
||||
#define OID_GEN_MEDIA_IN_USE 0x00010104UL
|
||||
#define OID_GEN_MAXIMUM_FRAME_SIZE 0x00010106UL
|
||||
#define OID_GEN_MAXIMUM_TOTAL_SIZE 0x00010111UL
|
||||
#define OID_GEN_LINK_SPEED 0x00010107UL
|
||||
#define OID_GEN_TRANSMIT_BLOCK_SIZE 0x0001010AUL
|
||||
#define OID_GEN_RECEIVE_BLOCK_SIZE 0x0001010BUL
|
||||
#define OID_GEN_VENDOR_ID 0x0001010CUL
|
||||
#define OID_GEN_VENDOR_DESCRIPTION 0x0001010DUL
|
||||
#define OID_GEN_CURRENT_PACKET_FILTER 0x0001010EUL
|
||||
#define OID_GEN_MAXIMUM_TOTAL_SIZE 0x00010111UL
|
||||
#define OID_GEN_MEDIA_CONNECT_STATUS 0x00010114UL
|
||||
#define OID_GEN_PHYSICAL_MEDIUM 0x00010202UL
|
||||
#define OID_GEN_XMIT_OK 0x00020101UL
|
||||
#define OID_GEN_RCV_OK 0x00020102UL
|
||||
#define OID_GEN_XMIT_ERROR 0x00020103UL
|
||||
#define OID_GEN_RCV_ERROR 0x00020104UL
|
||||
#define OID_GEN_RCV_NO_BUFFER 0x00020105UL
|
||||
#define OID_802_3_PERMANENT_ADDRESS 0x01010101UL
|
||||
#define OID_802_3_CURRENT_ADDRESS 0x01010102UL
|
||||
#define OID_802_3_MULTICAST_LIST 0x01010103UL
|
||||
#define OID_802_3_MAXIMUM_LIST_SIZE 0x01010104UL
|
||||
#define OID_802_3_RCV_ERROR_ALIGNMENT 0x01020101UL
|
||||
#define OID_802_3_XMIT_ONE_COLLISION 0x01020102UL
|
||||
#define OID_802_3_XMIT_MORE_COLLISIONS 0x01020103UL
|
||||
|
||||
#endif
|
||||
|
||||
|
|
@ -70,19 +70,6 @@
|
|||
/** LED mask for the library LED driver, to indicate that the USB interface is busy. */
|
||||
#define LEDMASK_USB_BUSY LEDS_LED2
|
||||
|
||||
/* Type Defines: */
|
||||
/** Type define for a RNDIS notification message, for transmission to the RNDIS host via the notification
|
||||
* Endpoint.
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
uint8_t bmRequestType; /**< Notification type, a mask of values from SrdRequestType.h */
|
||||
uint8_t bNotification; /**< Notification index, indicating what the RNDIS notification relates to */
|
||||
uint16_t wValue; /**< Two byte notification value parameter */
|
||||
uint16_t wIndex; /**< Two byte notification index parameter */
|
||||
uint16_t wLength; /**< Size of data payload following the notification header */
|
||||
} USB_Notification_t;
|
||||
|
||||
/* Function Prototypes: */
|
||||
void SetupHardware(void);
|
||||
void PrintIncomingPackets(void);
|
||||
|
|
|
|||
|
|
@ -41,12 +41,5 @@
|
|||
#define PIMA_OPERATION_OPENSESSION 0x1002
|
||||
#define PIMA_OPERATION_CLOSESESSION 0x1003
|
||||
|
||||
#define PIMA_RESPONSE_OK 0x2001
|
||||
#define PIMA_RESPONSE_GENERALERROR 0x2002
|
||||
#define PIMA_RESPONSE_SESSIONNOTOPEN 0x2003
|
||||
#define PIMA_RESPONSE_INVALIDTRANSACTIONID 0x2004
|
||||
#define PIMA_RESPONSE_OPERATIONNOTSUPPORTED 0x2005
|
||||
#define PIMA_RESPONSE_PARAMETERNOTSUPPORTED 0x2006
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
|||
|
|
@ -58,7 +58,7 @@ void SImage_SendBlockHeader(void)
|
|||
Pipe_Write_Stream_LE(&PIMA_SendBlock, PIMA_COMMAND_SIZE(0));
|
||||
|
||||
/* If the block type is a command, send its parameters (if any) */
|
||||
if (PIMA_SendBlock.Type == CType_CommandBlock)
|
||||
if (PIMA_SendBlock.Type == PIMA_CONTAINER_CommandBlock)
|
||||
{
|
||||
/* Determine the size of the parameters in the block via the data length attribute */
|
||||
uint8_t ParamBytes = (PIMA_SendBlock.DataLength - PIMA_COMMAND_SIZE(0));
|
||||
|
|
@ -169,7 +169,7 @@ uint8_t SImage_ReceiveBlockHeader(void)
|
|||
Pipe_Read_Stream_LE(&PIMA_ReceivedBlock, PIMA_COMMAND_SIZE(0));
|
||||
|
||||
/* Check if the returned block type is a response block */
|
||||
if (PIMA_ReceivedBlock.Type == CType_ResponseBlock)
|
||||
if (PIMA_ReceivedBlock.Type == PIMA_CONTAINER_ResponseBlock)
|
||||
{
|
||||
/* Determine the size of the parameters in the block via the data length attribute */
|
||||
uint8_t ParamBytes = (PIMA_ReceivedBlock.DataLength - PIMA_COMMAND_SIZE(0));
|
||||
|
|
|
|||
|
|
@ -43,54 +43,9 @@
|
|||
#include "../StillImageHost.h"
|
||||
|
||||
/* Macros: */
|
||||
/** Length in bytes of a given Unicode string's character length.
|
||||
*
|
||||
* \param[in] chars Total number of Unicode characters in the string
|
||||
*/
|
||||
#define UNICODE_STRING_LENGTH(chars) ((chars) << 1)
|
||||
|
||||
/** Timeout period between the issuing of a command to a device, and the reception of the first packet. */
|
||||
#define COMMAND_DATA_TIMEOUT_MS 10000
|
||||
|
||||
/** Used in the DataLength field of a PIMA container, to give the total container size in bytes for
|
||||
* a command container.
|
||||
*
|
||||
* \param[in] params Number of parameters which are to be sent in the Param field of the container
|
||||
*/
|
||||
#define PIMA_COMMAND_SIZE(params) ((sizeof(PIMA_SendBlock) - sizeof(PIMA_SendBlock.Params)) + \
|
||||
((params) * sizeof(PIMA_SendBlock.Params[0])))
|
||||
|
||||
/** Used in the DataLength field of a PIMA container, to give the total container size in bytes for
|
||||
* a data container.
|
||||
*
|
||||
* \param[in] datalen Length in bytes of the data in the container
|
||||
*/
|
||||
#define PIMA_DATA_SIZE(datalen) ((sizeof(PIMA_SendBlock) - sizeof(PIMA_SendBlock.Params)) + datalen)
|
||||
|
||||
/* Type Defines: */
|
||||
/** Type define for a PIMA container, use to send commands and receive responses to and from an
|
||||
* attached Still Image device.
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
uint32_t DataLength; /**< Length of the container and data, in bytes */
|
||||
uint16_t Type; /**< Container type, a value from the PIMA_Container_Types_t enum */
|
||||
uint16_t Code; /**< Command, event or response code of the container */
|
||||
uint32_t TransactionID; /**< Unique container ID to link blocks together */
|
||||
uint32_t Params[3]; /**< Block parameters to be issued along with the block code (command blocks only) */
|
||||
} PIMA_Container_t;
|
||||
|
||||
/* Enums: */
|
||||
/** Enum for the possible PIMA contains types. */
|
||||
enum PIMA_Container_Types_t
|
||||
{
|
||||
CType_Undefined = 0, /**< Undefined container type */
|
||||
CType_CommandBlock = 1, /**< Command Block container type */
|
||||
CType_DataBlock = 2, /**< Data Block container type */
|
||||
CType_ResponseBlock = 3, /**< Response container type */
|
||||
CType_EventBlock = 4, /**< Event Block container type */
|
||||
};
|
||||
|
||||
/* External Variables: */
|
||||
extern PIMA_Container_t PIMA_SendBlock;
|
||||
extern PIMA_Container_t PIMA_ReceivedBlock;
|
||||
|
|
|
|||
|
|
@ -180,7 +180,7 @@ void StillImage_Task(void)
|
|||
PIMA_SendBlock = (PIMA_Container_t)
|
||||
{
|
||||
.DataLength = PIMA_COMMAND_SIZE(0),
|
||||
.Type = CType_CommandBlock,
|
||||
.Type = PIMA_CONTAINER_CommandBlock,
|
||||
.Code = PIMA_OPERATION_GETDEVICEINFO,
|
||||
.TransactionID = 0x00000000,
|
||||
.Params = {},
|
||||
|
|
@ -252,7 +252,7 @@ void StillImage_Task(void)
|
|||
}
|
||||
|
||||
/* Verify that the command completed successfully */
|
||||
if ((PIMA_ReceivedBlock.Type != CType_ResponseBlock) || (PIMA_ReceivedBlock.Code != PIMA_RESPONSE_OK))
|
||||
if ((PIMA_ReceivedBlock.Type != PIMA_CONTAINER_ResponseBlock) || (PIMA_ReceivedBlock.Code != PIMA_RESPONSE_OK))
|
||||
{
|
||||
ShowCommandError(PIMA_ReceivedBlock.Code, true);
|
||||
|
||||
|
|
@ -265,7 +265,7 @@ void StillImage_Task(void)
|
|||
PIMA_SendBlock = (PIMA_Container_t)
|
||||
{
|
||||
.DataLength = PIMA_COMMAND_SIZE(1),
|
||||
.Type = CType_CommandBlock,
|
||||
.Type = PIMA_CONTAINER_CommandBlock,
|
||||
.Code = PIMA_OPERATION_OPENSESSION,
|
||||
.TransactionID = 0x00000000,
|
||||
.Params = {0x00000001},
|
||||
|
|
@ -284,7 +284,7 @@ void StillImage_Task(void)
|
|||
}
|
||||
|
||||
/* Verify that the command completed successfully */
|
||||
if ((PIMA_ReceivedBlock.Type != CType_ResponseBlock) || (PIMA_ReceivedBlock.Code != PIMA_RESPONSE_OK))
|
||||
if ((PIMA_ReceivedBlock.Type != PIMA_CONTAINER_ResponseBlock) || (PIMA_ReceivedBlock.Code != PIMA_RESPONSE_OK))
|
||||
{
|
||||
ShowCommandError(PIMA_ReceivedBlock.Code, true);
|
||||
|
||||
|
|
@ -297,7 +297,7 @@ void StillImage_Task(void)
|
|||
PIMA_SendBlock = (PIMA_Container_t)
|
||||
{
|
||||
.DataLength = PIMA_COMMAND_SIZE(1),
|
||||
.Type = CType_CommandBlock,
|
||||
.Type = PIMA_CONTAINER_CommandBlock,
|
||||
.Code = PIMA_OPERATION_CLOSESESSION,
|
||||
.TransactionID = 0x00000001,
|
||||
.Params = {0x00000001},
|
||||
|
|
@ -316,7 +316,7 @@ void StillImage_Task(void)
|
|||
}
|
||||
|
||||
/* Verify that the command completed successfully */
|
||||
if ((PIMA_ReceivedBlock.Type != CType_ResponseBlock) || (PIMA_ReceivedBlock.Code != PIMA_RESPONSE_OK))
|
||||
if ((PIMA_ReceivedBlock.Type != PIMA_CONTAINER_ResponseBlock) || (PIMA_ReceivedBlock.Code != PIMA_RESPONSE_OK))
|
||||
{
|
||||
ShowCommandError(PIMA_ReceivedBlock.Code, true);
|
||||
|
||||
|
|
|
|||
|
|
@ -45,7 +45,6 @@
|
|||
|
||||
#include "ConfigDescriptor.h"
|
||||
|
||||
#include "Lib/PIMACodes.h"
|
||||
#include "Lib/StillImageCommands.h"
|
||||
|
||||
#include <LUFA/Drivers/Misc/TerminalCodes.h>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue