forked from mfulz_github/qmk_firmware
Seperated out parts of the PrinterHost incomplete demo into a seperate Lib subdirectory.
Fixed Host mode to Device mode UID change not causing a USB Disconnect event when a device was connected.
This commit is contained in:
parent
23f3c3deee
commit
a54ed0085b
|
@ -0,0 +1,86 @@
|
||||||
|
/*
|
||||||
|
LUFA Library
|
||||||
|
Copyright (C) Dean Camera, 2009.
|
||||||
|
|
||||||
|
dean [at] fourwalledcubicle [dot] com
|
||||||
|
www.fourwalledcubicle.com
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)
|
||||||
|
|
||||||
|
Permission to use, copy, modify, and distribute this software
|
||||||
|
and its documentation for any purpose and without fee is hereby
|
||||||
|
granted, 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "PrinterCommands.h"
|
||||||
|
|
||||||
|
uint8_t Printer_GetDeviceID(Device_ID_String_t* DeviceIDString)
|
||||||
|
{
|
||||||
|
uint8_t ErrorCode = HOST_SENDCONTROL_Successful;
|
||||||
|
|
||||||
|
USB_ControlRequest = (USB_Request_Header_t)
|
||||||
|
{
|
||||||
|
bmRequestType: (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE),
|
||||||
|
bRequest: GET_DEVICE_ID,
|
||||||
|
wValue: 0,
|
||||||
|
wIndex: 0,
|
||||||
|
wLength: sizeof(DeviceIDString),
|
||||||
|
};
|
||||||
|
|
||||||
|
if ((ErrorCode == USB_Host_SendControlRequest(DeviceIDString)) != HOST_SENDCONTROL_Successful)
|
||||||
|
return ErrorCode;
|
||||||
|
|
||||||
|
DeviceIDString->Length = SwapEndian_16(DeviceIDString->Length);
|
||||||
|
|
||||||
|
/* Protect against overflow for the null terminator if the string length is equal to or larger than the buffer */
|
||||||
|
if (DeviceIDString->Length >= sizeof(DeviceIDString->String))
|
||||||
|
DeviceIDString->Length = sizeof(DeviceIDString->String) - 1;
|
||||||
|
|
||||||
|
DeviceIDString->String[DeviceIDString->Length] = 0x00;
|
||||||
|
|
||||||
|
return HOST_SENDCONTROL_Successful;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t Printer_GetPortStatus(uint8_t* PortStatus)
|
||||||
|
{
|
||||||
|
USB_ControlRequest = (USB_Request_Header_t)
|
||||||
|
{
|
||||||
|
bmRequestType: (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE),
|
||||||
|
bRequest: GET_PORT_STATUS,
|
||||||
|
wValue: 0,
|
||||||
|
wIndex: 0,
|
||||||
|
wLength: sizeof(uint8_t),
|
||||||
|
};
|
||||||
|
|
||||||
|
return USB_Host_SendControlRequest(PortStatus);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t Printer_SoftReset(void)
|
||||||
|
{
|
||||||
|
USB_ControlRequest = (USB_Request_Header_t)
|
||||||
|
{
|
||||||
|
bmRequestType: (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE),
|
||||||
|
bRequest: SOFT_RESET,
|
||||||
|
wValue: 0,
|
||||||
|
wIndex: 0,
|
||||||
|
wLength: 0,
|
||||||
|
};
|
||||||
|
|
||||||
|
return USB_Host_SendControlRequest(NULL);
|
||||||
|
}
|
|
@ -0,0 +1,60 @@
|
||||||
|
/*
|
||||||
|
LUFA Library
|
||||||
|
Copyright (C) Dean Camera, 2009.
|
||||||
|
|
||||||
|
dean [at] fourwalledcubicle [dot] com
|
||||||
|
www.fourwalledcubicle.com
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)
|
||||||
|
|
||||||
|
Permission to use, copy, modify, and distribute this software
|
||||||
|
and its documentation for any purpose and without fee is hereby
|
||||||
|
granted, 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _PRINTER_COMMANDS_H_
|
||||||
|
#define _PRINTER_COMMANDS_H_
|
||||||
|
|
||||||
|
/* Includes: */
|
||||||
|
#include <avr/io.h>
|
||||||
|
|
||||||
|
#include <LUFA/Drivers/USB/USB.h>
|
||||||
|
|
||||||
|
/* Macros: */
|
||||||
|
#define PROTOCOL_UNIDIRECTIONAL 0x01
|
||||||
|
#define PROTOCOL_BIDIRECTIONAL 0x02
|
||||||
|
#define PROTOCOL_IEEE1284 0x03
|
||||||
|
|
||||||
|
#define GET_DEVICE_ID 0
|
||||||
|
#define GET_PORT_STATUS 1
|
||||||
|
#define SOFT_RESET 2
|
||||||
|
|
||||||
|
/* Type Defines: */
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
uint16_t Length;
|
||||||
|
uint8_t String[128];
|
||||||
|
} Device_ID_String_t;
|
||||||
|
|
||||||
|
/* Function Prototypes: */
|
||||||
|
uint8_t Printer_GetDeviceID(Device_ID_String_t* DeviceIDString);
|
||||||
|
uint8_t Printer_GetPortStatus(uint8_t* PortStatus);
|
||||||
|
uint8_t Printer_SoftReset(void);
|
||||||
|
|
||||||
|
#endif
|
|
@ -36,7 +36,6 @@
|
||||||
|
|
||||||
#include "PrinterHost.h"
|
#include "PrinterHost.h"
|
||||||
|
|
||||||
/* Globals */
|
|
||||||
uint8_t PrinterProtocol;
|
uint8_t PrinterProtocol;
|
||||||
|
|
||||||
|
|
||||||
|
@ -115,34 +114,10 @@ void USB_Printer_Host(void)
|
||||||
switch (USB_HostState)
|
switch (USB_HostState)
|
||||||
{
|
{
|
||||||
case HOST_STATE_Addressed:
|
case HOST_STATE_Addressed:
|
||||||
/* Standard request to set the device configuration to configuration 1 */
|
|
||||||
USB_ControlRequest = (USB_Request_Header_t)
|
|
||||||
{
|
|
||||||
bmRequestType: (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE),
|
|
||||||
bRequest: REQ_SetConfiguration,
|
|
||||||
wValue: 1,
|
|
||||||
wIndex: 0,
|
|
||||||
wLength: 0,
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Send the request, display error and wait for device detatch if request fails */
|
|
||||||
if ((ErrorCode = USB_Host_SendControlRequest(NULL)) != HOST_SENDCONTROL_Successful)
|
|
||||||
{
|
|
||||||
puts_P(PSTR("Control Error (Set Configuration).\r\n"));
|
|
||||||
printf_P(PSTR(" -- Error Code: %d\r\n"), ErrorCode);
|
|
||||||
|
|
||||||
/* Indicate error via status LEDs */
|
|
||||||
LEDs_SetAllLEDs(LEDS_LED1);
|
|
||||||
|
|
||||||
/* Wait until USB device disconnected */
|
|
||||||
while (USB_IsConnected);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
USB_HostState = HOST_STATE_Configured;
|
|
||||||
break;
|
|
||||||
case HOST_STATE_Configured:
|
|
||||||
puts_P(PSTR("Getting Config Data.\r\n"));
|
puts_P(PSTR("Getting Config Data.\r\n"));
|
||||||
|
|
||||||
|
/* Select the control pipe for the request transfer */
|
||||||
|
Pipe_SelectPipe(PIPE_CONTROLPIPE);
|
||||||
|
|
||||||
/* Get and process the configuration descriptor data */
|
/* Get and process the configuration descriptor data */
|
||||||
if ((ErrorCode = ProcessConfigurationDescriptor()) != SuccessfulConfigRead)
|
if ((ErrorCode = ProcessConfigurationDescriptor()) != SuccessfulConfigRead)
|
||||||
|
@ -161,16 +136,38 @@ void USB_Printer_Host(void)
|
||||||
while (USB_IsConnected);
|
while (USB_IsConnected);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
puts_P(PSTR("Printer Enumerated.\r\n"));
|
|
||||||
|
|
||||||
|
/* Set the device configuration to the first configuration (rarely do devices use multiple configurations) */
|
||||||
|
if ((ErrorCode = USB_Host_SetDeviceConfiguration(1)) != HOST_SENDCONTROL_Successful)
|
||||||
|
{
|
||||||
|
puts_P(PSTR("Control Error (Set Configuration).\r\n"));
|
||||||
|
printf_P(PSTR(" -- Error Code: %d\r\n"), ErrorCode);
|
||||||
|
|
||||||
|
/* Indicate error via status LEDs */
|
||||||
|
LEDs_SetAllLEDs(LEDS_LED1);
|
||||||
|
|
||||||
|
/* Wait until USB device disconnected */
|
||||||
|
while (USB_IsConnected);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
USB_HostState = HOST_STATE_Configured;
|
||||||
|
break;
|
||||||
|
case HOST_STATE_Configured:
|
||||||
|
puts_P(PSTR("Printer Enumerated.\r\n"));
|
||||||
|
|
||||||
USB_HostState = HOST_STATE_Ready;
|
USB_HostState = HOST_STATE_Ready;
|
||||||
break;
|
break;
|
||||||
case HOST_STATE_Ready:
|
case HOST_STATE_Ready:
|
||||||
/* Indicate device busy via the status LEDs */
|
/* Indicate device busy via the status LEDs */
|
||||||
LEDs_SetAllLEDs(LEDS_LED3 | LEDS_LED4);
|
LEDs_SetAllLEDs(LEDS_LED3 | LEDS_LED4);
|
||||||
|
|
||||||
if (!(GetDeviceID()))
|
printf_P(PSTR("Printer Protocol: %d\r\n"), PrinterProtocol);
|
||||||
|
|
||||||
|
puts_P(PSTR("Retrieving Device ID...\r\n"));
|
||||||
|
|
||||||
|
Device_ID_String_t DeviceIDString;
|
||||||
|
if (Printer_GetDeviceID(&DeviceIDString) != HOST_SENDCONTROL_Successful)
|
||||||
{
|
{
|
||||||
/* Indicate error via status LEDs */
|
/* Indicate error via status LEDs */
|
||||||
LEDs_SetAllLEDs(LEDS_LED1);
|
LEDs_SetAllLEDs(LEDS_LED1);
|
||||||
|
@ -179,6 +176,8 @@ void USB_Printer_Host(void)
|
||||||
while (USB_IsConnected);
|
while (USB_IsConnected);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
printf_P(PSTR("Printer Device ID: %s\r\n"), DeviceIDString.String);
|
||||||
|
|
||||||
/* Indicate device no longer busy */
|
/* Indicate device no longer busy */
|
||||||
LEDs_SetAllLEDs(LEDS_LED4);
|
LEDs_SetAllLEDs(LEDS_LED4);
|
||||||
|
@ -189,31 +188,3 @@ void USB_Printer_Host(void)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GetDeviceID(void)
|
|
||||||
{
|
|
||||||
Device_ID_String_t DeviceIDString;
|
|
||||||
|
|
||||||
/* Request to retrieve the device ID string */
|
|
||||||
USB_ControlRequest = (USB_Request_Header_t)
|
|
||||||
{
|
|
||||||
bmRequestType: (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE),
|
|
||||||
bRequest: GET_DEVICE_ID,
|
|
||||||
wValue: 0,
|
|
||||||
wIndex: 0,
|
|
||||||
wLength: sizeof(DeviceIDString),
|
|
||||||
};
|
|
||||||
|
|
||||||
printf("Error Code: %d", USB_Host_SendControlRequest(&DeviceIDString));
|
|
||||||
|
|
||||||
/* Send the request, display error and wait for device detatch if request fails */
|
|
||||||
if (USB_Host_SendControlRequest(&DeviceIDString) != HOST_SENDCONTROL_Successful)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
/* Reverse the order of the string length as it is sent in big-endian format */
|
|
||||||
DeviceIDString.Length = SwapEndian_16(DeviceIDString.Length);
|
|
||||||
|
|
||||||
printf("%s", DeviceIDString.String);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
|
@ -39,6 +39,7 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
#include "ConfigDescriptor.h"
|
#include "ConfigDescriptor.h"
|
||||||
|
#include "Lib/PrinterCommands.h"
|
||||||
|
|
||||||
#include <LUFA/Version.h>
|
#include <LUFA/Version.h>
|
||||||
#include <LUFA/Drivers/Misc/TerminalCodes.h>
|
#include <LUFA/Drivers/Misc/TerminalCodes.h>
|
||||||
|
@ -58,20 +59,7 @@
|
||||||
|
|
||||||
/** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */
|
/** 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)
|
#define LEDMASK_USB_ERROR (LEDS_LED1 | LEDS_LED3)
|
||||||
|
|
||||||
#define PROTOCOL_UNIDIRECTIONAL 0x01
|
|
||||||
#define PROTOCOL_BIDIRECTIONAL 0x02
|
|
||||||
#define PROTOCOL_IEEE1284 0x03
|
|
||||||
|
|
||||||
#define GET_DEVICE_ID 0
|
|
||||||
|
|
||||||
/* Type Defines: */
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
uint16_t Length;
|
|
||||||
uint8_t String[128];
|
|
||||||
} Device_ID_String_t;
|
|
||||||
|
|
||||||
/* External Variables: */
|
/* External Variables: */
|
||||||
extern uint8_t PrinterProtocol;
|
extern uint8_t PrinterProtocol;
|
||||||
|
|
||||||
|
@ -86,6 +74,4 @@
|
||||||
|
|
||||||
void USB_Printer_Host(void);
|
void USB_Printer_Host(void);
|
||||||
|
|
||||||
bool GetDeviceID(void);
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -132,6 +132,7 @@ LUFA_OPTS += -D USE_STATIC_OPTIONS="(USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"
|
||||||
# List C source files here. (C dependencies are automatically generated.)
|
# List C source files here. (C dependencies are automatically generated.)
|
||||||
SRC = $(TARGET).c \
|
SRC = $(TARGET).c \
|
||||||
ConfigDescriptor.c \
|
ConfigDescriptor.c \
|
||||||
|
Lib/PrinterCommands.c \
|
||||||
$(LUFA_PATH)/LUFA/Drivers/Peripheral/SerialStream.c \
|
$(LUFA_PATH)/LUFA/Drivers/Peripheral/SerialStream.c \
|
||||||
$(LUFA_PATH)/LUFA/Drivers/Peripheral/Serial.c \
|
$(LUFA_PATH)/LUFA/Drivers/Peripheral/Serial.c \
|
||||||
$(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \
|
$(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -243,8 +243,8 @@ ISR(USB_GEN_vect, ISR_BLOCK)
|
||||||
{
|
{
|
||||||
if (USB_CurrentMode == USB_MODE_HOST)
|
if (USB_CurrentMode == USB_MODE_HOST)
|
||||||
EVENT_USB_DeviceUnattached();
|
EVENT_USB_DeviceUnattached();
|
||||||
else
|
|
||||||
EVENT_USB_Disconnect();
|
EVENT_USB_Disconnect();
|
||||||
}
|
}
|
||||||
|
|
||||||
EVENT_USB_UIDChange();
|
EVENT_USB_UIDChange();
|
||||||
|
|
|
@ -39,7 +39,7 @@ volatile bool USB_IsInitialized;
|
||||||
USB_Request_Header_t USB_ControlRequest;
|
USB_Request_Header_t USB_ControlRequest;
|
||||||
|
|
||||||
#if defined(USB_CAN_BE_HOST)
|
#if defined(USB_CAN_BE_HOST)
|
||||||
volatile uint8_t USB_HostState;
|
volatile uint8_t USB_HostState;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void USB_USBTask(void)
|
void USB_USBTask(void)
|
||||||
|
|
|
@ -58,7 +58,7 @@ uint8_t USB_Host_SendControlRequest(void* BufferPtr)
|
||||||
|
|
||||||
Pipe_ClearSETUP();
|
Pipe_ClearSETUP();
|
||||||
|
|
||||||
if ((ReturnStatus = USB_Host_Wait_For_Setup_IOS(USB_HOST_WAITFOR_SetupSent)))
|
if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_SetupSent)))
|
||||||
goto End_Of_Control_Send;
|
goto End_Of_Control_Send;
|
||||||
|
|
||||||
Pipe_Freeze();
|
Pipe_Freeze();
|
||||||
|
@ -76,7 +76,7 @@ uint8_t USB_Host_SendControlRequest(void* BufferPtr)
|
||||||
{
|
{
|
||||||
Pipe_Unfreeze();
|
Pipe_Unfreeze();
|
||||||
|
|
||||||
if ((ReturnStatus = USB_Host_Wait_For_Setup_IOS(USB_HOST_WAITFOR_InReceived)))
|
if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_InReceived)))
|
||||||
goto End_Of_Control_Send;
|
goto End_Of_Control_Send;
|
||||||
|
|
||||||
if (!(Pipe_BytesInPipe()))
|
if (!(Pipe_BytesInPipe()))
|
||||||
|
@ -96,12 +96,12 @@ uint8_t USB_Host_SendControlRequest(void* BufferPtr)
|
||||||
Pipe_SetToken(PIPE_TOKEN_OUT);
|
Pipe_SetToken(PIPE_TOKEN_OUT);
|
||||||
Pipe_Unfreeze();
|
Pipe_Unfreeze();
|
||||||
|
|
||||||
if ((ReturnStatus = USB_Host_Wait_For_Setup_IOS(USB_HOST_WAITFOR_OutReady)))
|
if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_OutReady)))
|
||||||
goto End_Of_Control_Send;
|
goto End_Of_Control_Send;
|
||||||
|
|
||||||
Pipe_ClearOUT();
|
Pipe_ClearOUT();
|
||||||
|
|
||||||
if ((ReturnStatus = USB_Host_Wait_For_Setup_IOS(USB_HOST_WAITFOR_OutReady)))
|
if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_OutReady)))
|
||||||
goto End_Of_Control_Send;
|
goto End_Of_Control_Send;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -113,7 +113,7 @@ uint8_t USB_Host_SendControlRequest(void* BufferPtr)
|
||||||
|
|
||||||
while (DataLen)
|
while (DataLen)
|
||||||
{
|
{
|
||||||
if ((ReturnStatus = USB_Host_Wait_For_Setup_IOS(USB_HOST_WAITFOR_OutReady)))
|
if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_OutReady)))
|
||||||
goto End_Of_Control_Send;
|
goto End_Of_Control_Send;
|
||||||
|
|
||||||
while (DataLen && (Pipe_BytesInPipe() < USB_ControlPipeSize))
|
while (DataLen && (Pipe_BytesInPipe() < USB_ControlPipeSize))
|
||||||
|
@ -125,7 +125,7 @@ uint8_t USB_Host_SendControlRequest(void* BufferPtr)
|
||||||
Pipe_ClearOUT();
|
Pipe_ClearOUT();
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((ReturnStatus = USB_Host_Wait_For_Setup_IOS(USB_HOST_WAITFOR_OutReady)))
|
if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_OutReady)))
|
||||||
goto End_Of_Control_Send;
|
goto End_Of_Control_Send;
|
||||||
|
|
||||||
Pipe_Freeze();
|
Pipe_Freeze();
|
||||||
|
@ -134,7 +134,7 @@ uint8_t USB_Host_SendControlRequest(void* BufferPtr)
|
||||||
Pipe_SetToken(PIPE_TOKEN_IN);
|
Pipe_SetToken(PIPE_TOKEN_IN);
|
||||||
Pipe_Unfreeze();
|
Pipe_Unfreeze();
|
||||||
|
|
||||||
if ((ReturnStatus = USB_Host_Wait_For_Setup_IOS(USB_HOST_WAITFOR_InReceived)))
|
if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_InReceived)))
|
||||||
goto End_Of_Control_Send;
|
goto End_Of_Control_Send;
|
||||||
|
|
||||||
Pipe_ClearIN();
|
Pipe_ClearIN();
|
||||||
|
@ -151,7 +151,7 @@ End_Of_Control_Send:
|
||||||
return ReturnStatus;
|
return ReturnStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint8_t USB_Host_Wait_For_Setup_IOS(const uint8_t WaitType)
|
static uint8_t USB_Host_WaitForIOS(const uint8_t WaitType)
|
||||||
{
|
{
|
||||||
#if (USB_HOST_TIMEOUT_MS < 0xFF)
|
#if (USB_HOST_TIMEOUT_MS < 0xFF)
|
||||||
uint8_t TimeoutCounter = USB_HOST_TIMEOUT_MS;
|
uint8_t TimeoutCounter = USB_HOST_TIMEOUT_MS;
|
||||||
|
|
|
@ -90,7 +90,7 @@
|
||||||
|
|
||||||
/* Function Prototypes: */
|
/* Function Prototypes: */
|
||||||
#if defined(INCLUDE_FROM_HOSTCHAPTER9_C)
|
#if defined(INCLUDE_FROM_HOSTCHAPTER9_C)
|
||||||
static uint8_t USB_Host_Wait_For_Setup_IOS(const uint8_t WaitType);
|
static uint8_t USB_Host_WaitForIOS(const uint8_t WaitType);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 28 KiB |
|
@ -49,6 +49,7 @@
|
||||||
* - Fixed MassStorage demo not clearing the reset flag when a Mass Storage Reset is issued while not processing a command
|
* - Fixed MassStorage demo not clearing the reset flag when a Mass Storage Reset is issued while not processing a command
|
||||||
* - Fixed USB_Host_SendControlRequest() not re-suspending the USB bus when initial device ready-wait fails
|
* - Fixed USB_Host_SendControlRequest() not re-suspending the USB bus when initial device ready-wait fails
|
||||||
* - Fixed USB Pad regulator not being disabled on some AVR models when the USB_OPT_REG_DISABLED option is used
|
* - Fixed USB Pad regulator not being disabled on some AVR models when the USB_OPT_REG_DISABLED option is used
|
||||||
|
* - Fixed Host mode to Device mode UID change not causing a USB Disconnect event when a device was connected
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* \section Sec_ChangeLog090605 Version 090605
|
* \section Sec_ChangeLog090605 Version 090605
|
||||||
|
|
|
@ -24,7 +24,9 @@
|
||||||
* - <b>BOARD</b>, the target board hardware
|
* - <b>BOARD</b>, the target board hardware
|
||||||
* - <b>F_CLOCK</b>, the target raw master clock frequency, before any prescaling is performed
|
* - <b>F_CLOCK</b>, the target raw master clock frequency, before any prescaling is performed
|
||||||
* - <b>F_CPU</b>, the target AVR CPU master clock frequency, after any prescaling
|
* - <b>F_CPU</b>, the target AVR CPU master clock frequency, after any prescaling
|
||||||
* - <b>CDEFS</b>, the C preprocessor defines which configure the source code
|
* - <b>CDEFS</b>, the C preprocessor defines which configure options the source code
|
||||||
|
* - <b>LUFA_PATH</b>, the path to the LUFA library source code
|
||||||
|
* - <b>LUFA_OPTS</b>, the compile time LUFA options which configure the library features
|
||||||
*
|
*
|
||||||
* These values should be changed to reflect the build hardware.
|
* These values should be changed to reflect the build hardware.
|
||||||
*
|
*
|
||||||
|
@ -63,12 +65,23 @@
|
||||||
* library components will occur.
|
* library components will occur.
|
||||||
*
|
*
|
||||||
* \section Sec_CDEFS The CDEFS Parameter
|
* \section Sec_CDEFS The CDEFS Parameter
|
||||||
|
* Many applications have features which can be controlled by the defining of specially named preprocessor tokens at the point of compilation - for example,
|
||||||
|
* an application might use a compile time token to turn on or off optional or mutually exclusive portions of code. Preprocessor tokens can be
|
||||||
|
* defined here by listing each one with the -D command line switch, and each token can optionally be defined to a specific value. When defined in the
|
||||||
|
* project makefile, these behave as if they were defined in every source file via a normal preprocessor define statement.
|
||||||
|
*
|
||||||
* Most applications will actually have multiple CDEF lines, which are concatenated together with the "+=" operator. This ensures that large
|
* Most applications will actually have multiple CDEF lines, which are concatenated together with the "+=" operator. This ensures that large
|
||||||
* numbers of configuration options remain readable by splitting up groups of options into separate lines.
|
* numbers of configuration options remain readable by splitting up groups of options into separate lines.
|
||||||
*
|
*
|
||||||
* Normally, these options do not need to be altered to allow an application to compile and run correctly on a different board or AVR to the
|
* \section Sec_LUFA_PATH The LUFA_PATH Parameter
|
||||||
* current configuration - if the options are incorrect, then the demo is most likely incompatible with the chosen USB AVR model and cannot be
|
* As each LUFA program requires the LUFA library source code to compile correctly, the application must know where the LUFA library is located. This
|
||||||
* made to function through the altering of the makefile settings alone (or at all). Settings such as the USB mode (device, host or both), the USB
|
* value specifies the path to the LUFA library base relative to the path of the project makefile.
|
||||||
* interface speed (Low or Full speed) and other LUFA configuration options can be set here - refer to the library documentation for details on the
|
*
|
||||||
* configuration parameters.
|
* \section Sec_LUFA_OPTS The LUFA_OPTS Parameter
|
||||||
|
* This value is similar to the CDEFS parameter listed elsewhere -- indeed, it is simply a convenient place to group LUFA related tokens away from the
|
||||||
|
* application's compile time tokens. Normally, these options do not need to be altered to allow an application to compile and run correctly on a
|
||||||
|
* different board or AVR to the current configuration - if the options are incorrect, then the demo is most likely incompatible with the chosen USB AVR
|
||||||
|
* model and cannot be made to function through the altering of the makefile settings alone (or at all). Settings such as the USB mode (device, host or both),
|
||||||
|
* the USB interface speed (Low or Full speed) and other LUFA configuration options can be set here - see \ref Page_TokenSummary documentation for details
|
||||||
|
* on the available LUFA compile time configuration options.
|
||||||
*/
|
*/
|
|
@ -21,11 +21,11 @@
|
||||||
* - Add standardized descriptor names to device and host class driver structures
|
* - Add standardized descriptor names to device and host class driver structures
|
||||||
* - Remove USE_NONSTANDARD_DESCRIPTOR_NAMES, make all typedefs unions to allow either naming scheme to be used
|
* - Remove USE_NONSTANDARD_DESCRIPTOR_NAMES, make all typedefs unions to allow either naming scheme to be used
|
||||||
* - Add in INTERRUPT_CONTROL_PIPE to use HSOFI to trigger calls to the host state machine
|
* - Add in INTERRUPT_CONTROL_PIPE to use HSOFI to trigger calls to the host state machine
|
||||||
* - Remove FAST_STREAM_TRANSFERS as they have little effect
|
|
||||||
* - Make Suspend host state suspend USB bus frames
|
* - Make Suspend host state suspend USB bus frames
|
||||||
* - Add in Stream functions for PROGMEM, EEPROM -- move to templated system
|
* - Add in Stream functions for PROGMEM, EEPROM -- move to templated system
|
||||||
* - Debug mode for pipe/endpoint calls
|
* - Debug mode for pipe/endpoint calls
|
||||||
* - Test and document new FAST_STREAM_TRANSFERS compile time option
|
* - Test and document new FAST_STREAM_TRANSFERS compile time option
|
||||||
|
* - Demo hardware compatibility table/list
|
||||||
*
|
*
|
||||||
* <b>Targeted for Future Releases:</b>
|
* <b>Targeted for Future Releases:</b>
|
||||||
* - Remake AVRStudio project files
|
* - Remake AVRStudio project files
|
||||||
|
|
Loading…
Reference in New Issue