forked from mfulz_github/qmk_firmware
		
	Added HOST_STATE_AS_GPIOR1 and DEVICE_STATE_AS_GPIOR0 compile time options, the latter of which is used in the bootloaders, to reduce code size.
This commit is contained in:
		
							parent
							
								
									23c1653efe
								
							
						
					
					
						commit
						c1be307393
					
				@ -117,6 +117,7 @@ LUFA_PATH = ../..
 | 
			
		||||
# LUFA library compile-time options
 | 
			
		||||
LUFA_OPTS  = -D USB_DEVICE_ONLY
 | 
			
		||||
LUFA_OPTS += -D USE_NONSTANDARD_DESCRIPTOR_NAMES
 | 
			
		||||
LUFA_OPTS += -D DEVICE_STATE_AS_GPIOR0
 | 
			
		||||
LUFA_OPTS += -D FIXED_CONTROL_ENDPOINT_SIZE=8
 | 
			
		||||
LUFA_OPTS += -D TOTAL_NUM_CONFIGURATIONS=1
 | 
			
		||||
LUFA_OPTS += -D USE_RAM_DESCRIPTORS
 | 
			
		||||
 | 
			
		||||
@ -117,6 +117,7 @@ LUFA_PATH = ../..
 | 
			
		||||
# LUFA library compile-time options
 | 
			
		||||
LUFA_OPTS  = -D USB_DEVICE_ONLY
 | 
			
		||||
LUFA_OPTS += -D USE_NONSTANDARD_DESCRIPTOR_NAMES
 | 
			
		||||
LUFA_OPTS += -D DEVICE_STATE_AS_GPIOR0
 | 
			
		||||
LUFA_OPTS += -D CONTROL_ONLY_DEVICE
 | 
			
		||||
LUFA_OPTS += -D FIXED_CONTROL_ENDPOINT_SIZE=32
 | 
			
		||||
LUFA_OPTS += -D TOTAL_NUM_CONFIGURATIONS=1
 | 
			
		||||
 | 
			
		||||
@ -118,6 +118,7 @@ LUFA_PATH = ../..
 | 
			
		||||
LUFA_OPTS  = -D USB_DEVICE_ONLY
 | 
			
		||||
LUFA_OPTS += -D USE_NONSTANDARD_DESCRIPTOR_NAMES
 | 
			
		||||
LUFA_OPTS += -D CONTROL_ONLY_DEVICE
 | 
			
		||||
LUFA_OPTS += -D DEVICE_STATE_AS_GPIOR0
 | 
			
		||||
LUFA_OPTS += -D FIXED_CONTROL_ENDPOINT_SIZE=8
 | 
			
		||||
LUFA_OPTS += -D TOTAL_NUM_CONFIGURATIONS=1
 | 
			
		||||
LUFA_OPTS += -D USE_RAM_DESCRIPTORS
 | 
			
		||||
 | 
			
		||||
@ -36,11 +36,11 @@
 | 
			
		||||
volatile bool        USB_IsInitialized;
 | 
			
		||||
USB_Request_Header_t USB_ControlRequest;
 | 
			
		||||
 | 
			
		||||
#if defined(USB_CAN_BE_HOST)
 | 
			
		||||
#if defined(USB_CAN_BE_HOST) && !defined(HOST_STATE_AS_GPIOR1)
 | 
			
		||||
volatile uint8_t     USB_HostState;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(USB_CAN_BE_DEVICE)
 | 
			
		||||
#if defined(USB_CAN_BE_DEVICE) && !defined(DEVICE_STATE_AS_GPIOR0)
 | 
			
		||||
volatile uint8_t     USB_DeviceState;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -52,7 +52,7 @@
 | 
			
		||||
		#if defined(__cplusplus)
 | 
			
		||||
			extern "C" {
 | 
			
		||||
		#endif
 | 
			
		||||
 | 
			
		||||
		
 | 
			
		||||
	/* Public Interface - May be used in end-application: */
 | 
			
		||||
		/* Global Variables: */
 | 
			
		||||
			/** Indicates if the USB interface is currently initialized but not necessarily connected to a host
 | 
			
		||||
@ -74,40 +74,58 @@
 | 
			
		||||
			 extern USB_Request_Header_t USB_ControlRequest;
 | 
			
		||||
			
 | 
			
		||||
			#if defined(USB_CAN_BE_HOST) || defined(__DOXYGEN__)
 | 
			
		||||
			/** Indicates the current host state machine state. When in host mode, this indicates the state
 | 
			
		||||
			 *  via one of the values of the \ref USB_Host_States_t enum values.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  This value may be altered by the user application to implement the \ref HOST_STATE_Addressed,
 | 
			
		||||
			 *  \ref HOST_STATE_Configured and \ref HOST_STATE_Suspended states which are not implemented by
 | 
			
		||||
			 *  the library.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \note This global is only present if the user application can be a USB host.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \see \ref USB_Host_States_t for a list of possible device states
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \ingroup Group_Host
 | 
			
		||||
			 */
 | 
			
		||||
			extern volatile uint8_t USB_HostState;
 | 
			
		||||
				#if !defined(HOST_STATE_AS_GPIOR1) || defined(__DOXYGEN__)
 | 
			
		||||
					/** Indicates the current host state machine state. When in host mode, this indicates the state
 | 
			
		||||
					 *  via one of the values of the \ref USB_Host_States_t enum values.
 | 
			
		||||
					 *
 | 
			
		||||
					 *  This value may be altered by the user application to implement the \ref HOST_STATE_Addressed,
 | 
			
		||||
					 *  \ref HOST_STATE_Configured and \ref HOST_STATE_Suspended states which are not implemented by
 | 
			
		||||
					 *  the library.
 | 
			
		||||
					 *
 | 
			
		||||
					 *  To reduce program size and speed up checks of this global, it can be placed into the AVR's GPIOR1
 | 
			
		||||
					 *  hardware register instead of RAM by defining the HOST_STATE_AS_GPIOR1 token in the project
 | 
			
		||||
					 *  makefile and passing it to the compiler via the -D switch. When defined, the GPIOR1 register should
 | 
			
		||||
					 *  not be used in the user application except implicitly via the library APIs.
 | 
			
		||||
					 *
 | 
			
		||||
					 *  \note This global is only present if the user application can be a USB host.
 | 
			
		||||
					 *
 | 
			
		||||
					 *  \see \ref USB_Host_States_t for a list of possible device states
 | 
			
		||||
					 *
 | 
			
		||||
					 *  \ingroup Group_Host
 | 
			
		||||
					 */
 | 
			
		||||
					extern volatile uint8_t USB_HostState;
 | 
			
		||||
				#else
 | 
			
		||||
					#define USB_HostState GPIOR1
 | 
			
		||||
				#endif
 | 
			
		||||
			#endif
 | 
			
		||||
 | 
			
		||||
			#if defined(USB_CAN_BE_DEVICE) || defined(__DOXYGEN__)
 | 
			
		||||
			/** Indicates the current device state machine state. When in device mode, this indicates the state
 | 
			
		||||
			 *  via one of the values of the \ref USB_Device_States_t enum values.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  This value should not be altered by the user application as it is handled automatically by the
 | 
			
		||||
			 *  library. The only exception to this rule is if the NO_LIMITED_CONTROLLER_CONNECT token is used
 | 
			
		||||
			 *  (see \ref EVENT_USB_Connect() and \ref EVENT_USB_Disconnect() events).
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \note This global is only present if the user application can be a USB device.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \note This variable should be treated as read-only in the user application, and never manually
 | 
			
		||||
			 *        changed in value except in the circumstances outlined above.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \see \ref USB_Device_States_t for a list of possible device states
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \ingroup Group_Device
 | 
			
		||||
			 */
 | 
			
		||||
			extern volatile uint8_t USB_DeviceState;
 | 
			
		||||
				#if !defined(DEVICE_STATE_AS_GPIOR0) || defined(__DOXYGEN__)
 | 
			
		||||
					/** Indicates the current device state machine state. When in device mode, this indicates the state
 | 
			
		||||
					 *  via one of the values of the \ref USB_Device_States_t enum values.
 | 
			
		||||
					 *
 | 
			
		||||
					 *  This value should not be altered by the user application as it is handled automatically by the
 | 
			
		||||
					 *  library. The only exception to this rule is if the NO_LIMITED_CONTROLLER_CONNECT token is used
 | 
			
		||||
					 *  (see \ref EVENT_USB_Connect() and \ref EVENT_USB_Disconnect() events).
 | 
			
		||||
					 *
 | 
			
		||||
					 *  To reduce program size and speed up checks of this global, it can be placed into the AVR's GPIOR0
 | 
			
		||||
					 *  hardware register instead of RAM by defining the DEVICE_STATE_AS_GPIOR0 token in the project
 | 
			
		||||
					 *  makefile and passing it to the compiler via the -D switch. When defined, the GPIOR0 register should
 | 
			
		||||
					 *  not be used in the user application except implicitly via the library APIs.
 | 
			
		||||
					 *
 | 
			
		||||
					 *  \note This global is only present if the user application can be a USB device.
 | 
			
		||||
					 *
 | 
			
		||||
					 *  \note This variable should be treated as read-only in the user application, and never manually
 | 
			
		||||
					 *        changed in value except in the circumstances outlined above.
 | 
			
		||||
					 *
 | 
			
		||||
					 *  \see \ref USB_Device_States_t for a list of possible device states
 | 
			
		||||
					 *
 | 
			
		||||
					 *  \ingroup Group_Device
 | 
			
		||||
					 */
 | 
			
		||||
					extern volatile uint8_t USB_DeviceState;
 | 
			
		||||
				#else
 | 
			
		||||
					#define USB_DeviceState GPIOR0
 | 
			
		||||
				#endif
 | 
			
		||||
			#endif
 | 
			
		||||
 | 
			
		||||
		/* Function Prototypes: */
 | 
			
		||||
 | 
			
		||||
@ -34,6 +34,7 @@
 | 
			
		||||
  *  - Added new Benito Arduino Programmer project
 | 
			
		||||
  *  - Added new LEDs_ToggleLEDs() function to the LEDs driver
 | 
			
		||||
  *  - Added new Pipe_BoundEndpointNumber() and Pipe_IsEndpointBound() functions
 | 
			
		||||
  *  - Added new DEVICE_STATE_AS_GPIOR0 and DEVICE_STATE_AS_GPIOR1 compile time options
 | 
			
		||||
  *  
 | 
			
		||||
  *  <b>Changed:</b>
 | 
			
		||||
  *  - Deprecated psuedo-scheduler and removed dynamic memory allocator from the library (first no longer needed and second unused)
 | 
			
		||||
 | 
			
		||||
@ -95,6 +95,18 @@
 | 
			
		||||
 *  defined to a non-zero value instead to give the size in bytes of the control endpoint, to reduce the size of the compiled
 | 
			
		||||
 *  binary.
 | 
			
		||||
 *
 | 
			
		||||
 *  <b>DEVICE_STATE_AS_GPIOR0</b> - ( \ref Group_Device ) \n
 | 
			
		||||
 *  One of the most frequenty used global variables in the stack is the USB_DeviceState global, which indicates the current state of
 | 
			
		||||
 *  the Device State Machine. To reduce the amount of code and time required to access and modify this global in an application, this token
 | 
			
		||||
 *  make be defined to fix the state variable into one of the three general purpose IO registers inside the AVR reserved for application
 | 
			
		||||
 *  use. When defined, the GPIOR0 register should not be used within the user application except implicitly via the library APIs.
 | 
			
		||||
 *
 | 
			
		||||
 *  <b>HOST_STATE_AS_GPIOR1</b> - ( \ref Group_Host ) \n
 | 
			
		||||
 *  One of the most frequenty used global variables in the stack is the USB_HostState global, which indicates the current state of
 | 
			
		||||
 *  the Host State Machine. To reduce the amount of code and time required to access and modify this global in an application, this token
 | 
			
		||||
 *  make be defined to fix the state variable into one of the three general purpose IO registers inside the AVR reserved for application
 | 
			
		||||
 *  use. When defined, the GPIOR1 register should not be used within the user application except implicitly via the library APIs.
 | 
			
		||||
 *
 | 
			
		||||
 *  <b>TOTAL_NUM_CONFIGURATIONS</b> - ( \ref Group_Device ) \n
 | 
			
		||||
 *  By default, the library determines the number of configurations a USB device supports by reading the device descriptor. This reduces
 | 
			
		||||
 *  the amount of configuration required to set up the library, and allows the value to change dynamically (if descriptors are stored in
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user