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"
|
||||
|
||||
/* Globals */
|
||||
uint8_t PrinterProtocol;
|
||||
|
||||
|
||||
|
@ -115,34 +114,10 @@ void USB_Printer_Host(void)
|
|||
switch (USB_HostState)
|
||||
{
|
||||
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"));
|
||||
|
||||
/* Select the control pipe for the request transfer */
|
||||
Pipe_SelectPipe(PIPE_CONTROLPIPE);
|
||||
|
||||
/* Get and process the configuration descriptor data */
|
||||
if ((ErrorCode = ProcessConfigurationDescriptor()) != SuccessfulConfigRead)
|
||||
|
@ -161,16 +136,38 @@ void USB_Printer_Host(void)
|
|||
while (USB_IsConnected);
|
||||
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;
|
||||
break;
|
||||
case HOST_STATE_Ready:
|
||||
/* Indicate device busy via the status LEDs */
|
||||
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 */
|
||||
LEDs_SetAllLEDs(LEDS_LED1);
|
||||
|
@ -179,6 +176,8 @@ void USB_Printer_Host(void)
|
|||
while (USB_IsConnected);
|
||||
break;
|
||||
}
|
||||
|
||||
printf_P(PSTR("Printer Device ID: %s\r\n"), DeviceIDString.String);
|
||||
|
||||
/* Indicate device no longer busy */
|
||||
LEDs_SetAllLEDs(LEDS_LED4);
|
||||
|
@ -189,31 +188,3 @@ void USB_Printer_Host(void)
|
|||
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 "ConfigDescriptor.h"
|
||||
#include "Lib/PrinterCommands.h"
|
||||
|
||||
#include <LUFA/Version.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. */
|
||||
#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: */
|
||||
extern uint8_t PrinterProtocol;
|
||||
|
||||
|
@ -86,6 +74,4 @@
|
|||
|
||||
void USB_Printer_Host(void);
|
||||
|
||||
bool GetDeviceID(void);
|
||||
|
||||
#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.)
|
||||
SRC = $(TARGET).c \
|
||||
ConfigDescriptor.c \
|
||||
Lib/PrinterCommands.c \
|
||||
$(LUFA_PATH)/LUFA/Drivers/Peripheral/SerialStream.c \
|
||||
$(LUFA_PATH)/LUFA/Drivers/Peripheral/Serial.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)
|
||||
EVENT_USB_DeviceUnattached();
|
||||
else
|
||||
EVENT_USB_Disconnect();
|
||||
|
||||
EVENT_USB_Disconnect();
|
||||
}
|
||||
|
||||
EVENT_USB_UIDChange();
|
||||
|
|
|
@ -39,7 +39,7 @@ volatile bool USB_IsInitialized;
|
|||
USB_Request_Header_t USB_ControlRequest;
|
||||
|
||||
#if defined(USB_CAN_BE_HOST)
|
||||
volatile uint8_t USB_HostState;
|
||||
volatile uint8_t USB_HostState;
|
||||
#endif
|
||||
|
||||
void USB_USBTask(void)
|
||||
|
|
|
@ -58,7 +58,7 @@ uint8_t USB_Host_SendControlRequest(void* BufferPtr)
|
|||
|
||||
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;
|
||||
|
||||
Pipe_Freeze();
|
||||
|
@ -76,7 +76,7 @@ uint8_t USB_Host_SendControlRequest(void* BufferPtr)
|
|||
{
|
||||
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;
|
||||
|
||||
if (!(Pipe_BytesInPipe()))
|
||||
|
@ -96,12 +96,12 @@ uint8_t USB_Host_SendControlRequest(void* BufferPtr)
|
|||
Pipe_SetToken(PIPE_TOKEN_OUT);
|
||||
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;
|
||||
|
||||
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;
|
||||
}
|
||||
else
|
||||
|
@ -113,7 +113,7 @@ uint8_t USB_Host_SendControlRequest(void* BufferPtr)
|
|||
|
||||
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;
|
||||
|
||||
while (DataLen && (Pipe_BytesInPipe() < USB_ControlPipeSize))
|
||||
|
@ -125,7 +125,7 @@ uint8_t USB_Host_SendControlRequest(void* BufferPtr)
|
|||
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;
|
||||
|
||||
Pipe_Freeze();
|
||||
|
@ -134,7 +134,7 @@ uint8_t USB_Host_SendControlRequest(void* BufferPtr)
|
|||
Pipe_SetToken(PIPE_TOKEN_IN);
|
||||
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;
|
||||
|
||||
Pipe_ClearIN();
|
||||
|
@ -151,7 +151,7 @@ End_Of_Control_Send:
|
|||
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)
|
||||
uint8_t TimeoutCounter = USB_HOST_TIMEOUT_MS;
|
||||
|
|
|
@ -90,7 +90,7 @@
|
|||
|
||||
/* Function Prototypes: */
|
||||
#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
|
||||
|
||||
|
|
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 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 Host mode to Device mode UID change not causing a USB Disconnect event when a device was connected
|
||||
*
|
||||
*
|
||||
* \section Sec_ChangeLog090605 Version 090605
|
||||
|
|
|
@ -24,7 +24,9 @@
|
|||
* - <b>BOARD</b>, the target board hardware
|
||||
* - <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>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.
|
||||
*
|
||||
|
@ -63,12 +65,23 @@
|
|||
* library components will occur.
|
||||
*
|
||||
* \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
|
||||
* 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
|
||||
* 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 - refer to the library documentation for details on the
|
||||
* configuration parameters.
|
||||
* \section Sec_LUFA_PATH The LUFA_PATH Parameter
|
||||
* As each LUFA program requires the LUFA library source code to compile correctly, the application must know where the LUFA library is located. This
|
||||
* value specifies the path to the LUFA library base relative to the path of the project makefile.
|
||||
*
|
||||
* \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
|
||||
* - 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
|
||||
* - Remove FAST_STREAM_TRANSFERS as they have little effect
|
||||
* - Make Suspend host state suspend USB bus frames
|
||||
* - Add in Stream functions for PROGMEM, EEPROM -- move to templated system
|
||||
* - Debug mode for pipe/endpoint calls
|
||||
* - Test and document new FAST_STREAM_TRANSFERS compile time option
|
||||
* - Demo hardware compatibility table/list
|
||||
*
|
||||
* <b>Targeted for Future Releases:</b>
|
||||
* - Remake AVRStudio project files
|
||||
|
|
Loading…
Reference in New Issue