Changed the signature of the CALLBACK_USB_GetDescriptor() callback function so that the descriptor pointer is const, to remove the need for extra casting inside the callback (thanks to Jonathan Kollasch).
This commit is contained in:
		
							parent
							
								
									ed8ad18f26
								
							
						
					
					
						commit
						092f82e06f
					
				
					 88 changed files with 460 additions and 409 deletions
				
			
		| 
						 | 
				
			
			@ -273,37 +273,37 @@ USB_Descriptor_String_t PROGMEM ProductString =
 | 
			
		|||
 */
 | 
			
		||||
uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
                                    const uint8_t wIndex,
 | 
			
		||||
                                    void** const DescriptorAddress)
 | 
			
		||||
                                    const void** const DescriptorAddress)
 | 
			
		||||
{
 | 
			
		||||
	const uint8_t  DescriptorType   = (wValue >> 8);
 | 
			
		||||
	const uint8_t  DescriptorNumber = (wValue & 0xFF);
 | 
			
		||||
 | 
			
		||||
	void*    Address = NULL;
 | 
			
		||||
	uint16_t Size    = NO_DESCRIPTOR;
 | 
			
		||||
	const void* Address = NULL;
 | 
			
		||||
	uint16_t    Size    = NO_DESCRIPTOR;
 | 
			
		||||
 | 
			
		||||
	switch (DescriptorType)
 | 
			
		||||
	{
 | 
			
		||||
		case DTYPE_Device:
 | 
			
		||||
			Address = (void*)&DeviceDescriptor;
 | 
			
		||||
			Address = &DeviceDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Device_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_Configuration: 
 | 
			
		||||
			Address = (void*)&ConfigurationDescriptor;
 | 
			
		||||
			Address = &ConfigurationDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Configuration_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_String: 
 | 
			
		||||
			switch (DescriptorNumber)
 | 
			
		||||
			{
 | 
			
		||||
				case 0x00: 
 | 
			
		||||
					Address = (void*)&LanguageString;
 | 
			
		||||
					Address = &LanguageString;
 | 
			
		||||
					Size    = pgm_read_byte(&LanguageString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x01: 
 | 
			
		||||
					Address = (void*)&ManufacturerString;
 | 
			
		||||
					Address = &ManufacturerString;
 | 
			
		||||
					Size    = pgm_read_byte(&ManufacturerString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x02: 
 | 
			
		||||
					Address = (void*)&ProductString;
 | 
			
		||||
					Address = &ProductString;
 | 
			
		||||
					Size    = pgm_read_byte(&ProductString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -78,6 +78,7 @@
 | 
			
		|||
	/* Function Prototypes: */
 | 
			
		||||
		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
		                                    const uint8_t wIndex,
 | 
			
		||||
		                                    void** const DescriptorAddress) ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
		                                    const void** const DescriptorAddress)
 | 
			
		||||
		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -273,37 +273,37 @@ USB_Descriptor_String_t PROGMEM ProductString =
 | 
			
		|||
 */
 | 
			
		||||
uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
                                    const uint8_t wIndex,
 | 
			
		||||
                                    void** const DescriptorAddress)
 | 
			
		||||
                                    const void** const DescriptorAddress)
 | 
			
		||||
{
 | 
			
		||||
	const uint8_t  DescriptorType   = (wValue >> 8);
 | 
			
		||||
	const uint8_t  DescriptorNumber = (wValue & 0xFF);
 | 
			
		||||
 | 
			
		||||
	void*    Address = NULL;
 | 
			
		||||
	uint16_t Size    = NO_DESCRIPTOR;
 | 
			
		||||
	const void* Address = NULL;
 | 
			
		||||
	uint16_t    Size    = NO_DESCRIPTOR;
 | 
			
		||||
 | 
			
		||||
	switch (DescriptorType)
 | 
			
		||||
	{
 | 
			
		||||
		case DTYPE_Device:
 | 
			
		||||
			Address = (void*)&DeviceDescriptor;
 | 
			
		||||
			Address = &DeviceDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Device_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_Configuration:
 | 
			
		||||
			Address = (void*)&ConfigurationDescriptor;
 | 
			
		||||
			Address = &ConfigurationDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Configuration_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_String: 
 | 
			
		||||
			switch (DescriptorNumber)
 | 
			
		||||
			{
 | 
			
		||||
				case 0x00:
 | 
			
		||||
					Address = (void*)&LanguageString;
 | 
			
		||||
					Address = &LanguageString;
 | 
			
		||||
					Size    = pgm_read_byte(&LanguageString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x01: 
 | 
			
		||||
					Address = (void*)&ManufacturerString;
 | 
			
		||||
					Address = &ManufacturerString;
 | 
			
		||||
					Size    = pgm_read_byte(&ManufacturerString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x02: 
 | 
			
		||||
					Address = (void*)&ProductString;
 | 
			
		||||
					Address = &ProductString;
 | 
			
		||||
					Size    = pgm_read_byte(&ProductString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -78,6 +78,7 @@
 | 
			
		|||
	/* Function Prototypes: */
 | 
			
		||||
		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
		                                    const uint8_t wIndex,
 | 
			
		||||
		                                    void** const DescriptorAddress) ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
		                                    const void** const DescriptorAddress)
 | 
			
		||||
		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -340,37 +340,37 @@ USB_Descriptor_String_t PROGMEM ProductString =
 | 
			
		|||
 */
 | 
			
		||||
uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
                                    const uint8_t wIndex,
 | 
			
		||||
                                    void** const DescriptorAddress)
 | 
			
		||||
                                    const void** const DescriptorAddress)
 | 
			
		||||
{
 | 
			
		||||
	const uint8_t  DescriptorType   = (wValue >> 8);
 | 
			
		||||
	const uint8_t  DescriptorNumber = (wValue & 0xFF);
 | 
			
		||||
 | 
			
		||||
	void*    Address = NULL;
 | 
			
		||||
	uint16_t Size    = NO_DESCRIPTOR;
 | 
			
		||||
	const void* Address = NULL;
 | 
			
		||||
	uint16_t    Size    = NO_DESCRIPTOR;
 | 
			
		||||
 | 
			
		||||
	switch (DescriptorType)
 | 
			
		||||
	{
 | 
			
		||||
		case DTYPE_Device:
 | 
			
		||||
			Address = (void*)&DeviceDescriptor;
 | 
			
		||||
			Address = &DeviceDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Device_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_Configuration: 
 | 
			
		||||
			Address = (void*)&ConfigurationDescriptor;
 | 
			
		||||
			Address = &ConfigurationDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Configuration_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_String: 
 | 
			
		||||
			switch (DescriptorNumber)
 | 
			
		||||
			{
 | 
			
		||||
				case 0x00: 
 | 
			
		||||
					Address = (void*)&LanguageString;
 | 
			
		||||
					Address = &LanguageString;
 | 
			
		||||
					Size    = pgm_read_byte(&LanguageString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x01: 
 | 
			
		||||
					Address = (void*)&ManufacturerString;
 | 
			
		||||
					Address = &ManufacturerString;
 | 
			
		||||
					Size    = pgm_read_byte(&ManufacturerString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x02: 
 | 
			
		||||
					Address = (void*)&ProductString;
 | 
			
		||||
					Address = &ProductString;
 | 
			
		||||
					Size    = pgm_read_byte(&ProductString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -98,6 +98,7 @@
 | 
			
		|||
	/* Function Prototypes: */
 | 
			
		||||
		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
		                                    const uint8_t wIndex,
 | 
			
		||||
		                                    void** const DescriptorAddress) ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
		                                    const void** const DescriptorAddress)
 | 
			
		||||
		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -191,48 +191,48 @@ USB_Descriptor_String_t PROGMEM ProductString =
 | 
			
		|||
 */
 | 
			
		||||
uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
                                    const uint8_t wIndex,
 | 
			
		||||
                                    void** const DescriptorAddress)
 | 
			
		||||
                                    const void** const DescriptorAddress)
 | 
			
		||||
{
 | 
			
		||||
	const uint8_t  DescriptorType   = (wValue >> 8);
 | 
			
		||||
	const uint8_t  DescriptorNumber = (wValue & 0xFF);
 | 
			
		||||
 | 
			
		||||
	void*    Address = NULL;
 | 
			
		||||
	uint16_t Size    = NO_DESCRIPTOR;
 | 
			
		||||
	const void* Address = NULL;
 | 
			
		||||
	uint16_t    Size    = NO_DESCRIPTOR;
 | 
			
		||||
 | 
			
		||||
	switch (DescriptorType)
 | 
			
		||||
	{
 | 
			
		||||
		case DTYPE_Device:
 | 
			
		||||
			Address = (void*)&DeviceDescriptor;
 | 
			
		||||
			Address = &DeviceDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Device_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_Configuration: 
 | 
			
		||||
			Address = (void*)&ConfigurationDescriptor;
 | 
			
		||||
			Address = &ConfigurationDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Configuration_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_String: 
 | 
			
		||||
			switch (DescriptorNumber)
 | 
			
		||||
			{
 | 
			
		||||
				case 0x00: 
 | 
			
		||||
					Address = (void*)&LanguageString;
 | 
			
		||||
					Address = &LanguageString;
 | 
			
		||||
					Size    = pgm_read_byte(&LanguageString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x01: 
 | 
			
		||||
					Address = (void*)&ManufacturerString;
 | 
			
		||||
					Address = &ManufacturerString;
 | 
			
		||||
					Size    = pgm_read_byte(&ManufacturerString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x02: 
 | 
			
		||||
					Address = (void*)&ProductString;
 | 
			
		||||
					Address = &ProductString;
 | 
			
		||||
					Size    = pgm_read_byte(&ProductString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_HID: 
 | 
			
		||||
			Address = (void*)&ConfigurationDescriptor.HID_GenericHID;
 | 
			
		||||
			Address = &ConfigurationDescriptor.HID_GenericHID;
 | 
			
		||||
			Size    = sizeof(USB_HID_Descriptor_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_Report: 
 | 
			
		||||
			Address = (void*)&GenericReport;
 | 
			
		||||
			Address = &GenericReport;
 | 
			
		||||
			Size    = sizeof(GenericReport);
 | 
			
		||||
			break;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -68,6 +68,7 @@
 | 
			
		|||
	/* Function Prototypes: */
 | 
			
		||||
		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
		                                    const uint8_t wIndex,
 | 
			
		||||
		                                    void** const DescriptorAddress) ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
		                                    const void** const DescriptorAddress)
 | 
			
		||||
		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
											
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -201,48 +201,48 @@ USB_Descriptor_String_t PROGMEM ProductString =
 | 
			
		|||
 */
 | 
			
		||||
uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
                                    const uint8_t wIndex,
 | 
			
		||||
                                    void** const DescriptorAddress)
 | 
			
		||||
                                    const void** const DescriptorAddress)
 | 
			
		||||
{
 | 
			
		||||
	const uint8_t  DescriptorType   = (wValue >> 8);
 | 
			
		||||
	const uint8_t  DescriptorNumber = (wValue & 0xFF);
 | 
			
		||||
 | 
			
		||||
	void*    Address = NULL;
 | 
			
		||||
	uint16_t Size    = NO_DESCRIPTOR;
 | 
			
		||||
	const void* Address = NULL;
 | 
			
		||||
	uint16_t    Size    = NO_DESCRIPTOR;
 | 
			
		||||
 | 
			
		||||
	switch (DescriptorType)
 | 
			
		||||
	{
 | 
			
		||||
		case DTYPE_Device:
 | 
			
		||||
			Address = (void*)&DeviceDescriptor;
 | 
			
		||||
			Address = &DeviceDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Device_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_Configuration: 
 | 
			
		||||
			Address = (void*)&ConfigurationDescriptor;
 | 
			
		||||
			Address = &ConfigurationDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Configuration_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_String: 
 | 
			
		||||
			switch (DescriptorNumber)
 | 
			
		||||
			{
 | 
			
		||||
				case 0x00: 
 | 
			
		||||
					Address = (void*)&LanguageString;
 | 
			
		||||
					Address = &LanguageString;
 | 
			
		||||
					Size    = pgm_read_byte(&LanguageString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x01: 
 | 
			
		||||
					Address = (void*)&ManufacturerString;
 | 
			
		||||
					Address = &ManufacturerString;
 | 
			
		||||
					Size    = pgm_read_byte(&ManufacturerString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x02: 
 | 
			
		||||
					Address = (void*)&ProductString;
 | 
			
		||||
					Address = &ProductString;
 | 
			
		||||
					Size    = pgm_read_byte(&ProductString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_HID: 
 | 
			
		||||
			Address = (void*)&ConfigurationDescriptor.HID_JoystickHID;
 | 
			
		||||
			Address = &ConfigurationDescriptor.HID_JoystickHID;
 | 
			
		||||
			Size    = sizeof(USB_HID_Descriptor_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_Report: 
 | 
			
		||||
			Address = (void*)&JoystickReport;
 | 
			
		||||
			Address = &JoystickReport;
 | 
			
		||||
			Size    = sizeof(JoystickReport);
 | 
			
		||||
			break;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -65,7 +65,7 @@
 | 
			
		|||
	/* Function Prototypes: */
 | 
			
		||||
		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
		                                    const uint8_t wIndex,
 | 
			
		||||
		                                    void** const DescriptorAddress)
 | 
			
		||||
		                                    const void** const DescriptorAddress)
 | 
			
		||||
		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -205,48 +205,50 @@ USB_Descriptor_String_t PROGMEM ProductString =
 | 
			
		|||
 *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the
 | 
			
		||||
 *  USB host.
 | 
			
		||||
 */
 | 
			
		||||
uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)
 | 
			
		||||
uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
                                    const uint8_t wIndex,
 | 
			
		||||
                                    const void** const DescriptorAddress)
 | 
			
		||||
{
 | 
			
		||||
	const uint8_t  DescriptorType   = (wValue >> 8);
 | 
			
		||||
	const uint8_t  DescriptorNumber = (wValue & 0xFF);
 | 
			
		||||
 | 
			
		||||
	void*    Address = NULL;
 | 
			
		||||
	uint16_t Size    = NO_DESCRIPTOR;
 | 
			
		||||
	const void* Address = NULL;
 | 
			
		||||
	uint16_t    Size    = NO_DESCRIPTOR;
 | 
			
		||||
 | 
			
		||||
	switch (DescriptorType)
 | 
			
		||||
	{
 | 
			
		||||
		case DTYPE_Device: 
 | 
			
		||||
			Address = (void*)&DeviceDescriptor;
 | 
			
		||||
			Address = &DeviceDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Device_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_Configuration: 
 | 
			
		||||
			Address = (void*)&ConfigurationDescriptor;
 | 
			
		||||
			Address = &ConfigurationDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Configuration_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_String: 
 | 
			
		||||
			switch (DescriptorNumber)
 | 
			
		||||
			{
 | 
			
		||||
				case 0x00: 
 | 
			
		||||
					Address = (void*)&LanguageString;
 | 
			
		||||
					Address = &LanguageString;
 | 
			
		||||
					Size    = pgm_read_byte(&LanguageString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x01: 
 | 
			
		||||
					Address = (void*)&ManufacturerString;
 | 
			
		||||
					Address = &ManufacturerString;
 | 
			
		||||
					Size    = pgm_read_byte(&ManufacturerString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x02: 
 | 
			
		||||
					Address = (void*)&ProductString;
 | 
			
		||||
					Address = &ProductString;
 | 
			
		||||
					Size    = pgm_read_byte(&ProductString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_HID: 
 | 
			
		||||
			Address = (void*)&ConfigurationDescriptor.HID_KeyboardHID;
 | 
			
		||||
			Address = &ConfigurationDescriptor.HID_KeyboardHID;
 | 
			
		||||
			Size    = sizeof(USB_HID_Descriptor_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_Report: 
 | 
			
		||||
			Address = (void*)&KeyboardReport;
 | 
			
		||||
			Address = &KeyboardReport;
 | 
			
		||||
			Size    = sizeof(KeyboardReport);
 | 
			
		||||
			break;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -65,6 +65,7 @@
 | 
			
		|||
	/* Function Prototypes: */
 | 
			
		||||
		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
		                                    const uint8_t wIndex,
 | 
			
		||||
		                                    void** const DescriptorAddress) ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
		                                    const void** const DescriptorAddress)
 | 
			
		||||
		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -277,37 +277,37 @@ USB_Descriptor_String_t PROGMEM ProductString =
 | 
			
		|||
 */
 | 
			
		||||
uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
                                    const uint8_t wIndex,
 | 
			
		||||
                                    void** const DescriptorAddress)
 | 
			
		||||
                                    const void** const DescriptorAddress)
 | 
			
		||||
{
 | 
			
		||||
	const uint8_t  DescriptorType   = (wValue >> 8);
 | 
			
		||||
	const uint8_t  DescriptorNumber = (wValue & 0xFF);
 | 
			
		||||
 | 
			
		||||
	void*    Address = NULL;
 | 
			
		||||
	uint16_t Size    = NO_DESCRIPTOR;
 | 
			
		||||
	const void* Address = NULL;
 | 
			
		||||
	uint16_t    Size    = NO_DESCRIPTOR;
 | 
			
		||||
 | 
			
		||||
	switch (DescriptorType)
 | 
			
		||||
	{
 | 
			
		||||
		case DTYPE_Device: 
 | 
			
		||||
			Address = (void*)&DeviceDescriptor;
 | 
			
		||||
			Address = &DeviceDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Device_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_Configuration: 
 | 
			
		||||
			Address = (void*)&ConfigurationDescriptor;
 | 
			
		||||
			Address = &ConfigurationDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Configuration_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_String: 
 | 
			
		||||
			switch (DescriptorNumber)
 | 
			
		||||
			{
 | 
			
		||||
				case 0x00: 
 | 
			
		||||
					Address = (void*)&LanguageString;
 | 
			
		||||
					Address = &LanguageString;
 | 
			
		||||
					Size    = pgm_read_byte(&LanguageString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x01: 
 | 
			
		||||
					Address = (void*)&ManufacturerString;
 | 
			
		||||
					Address = &ManufacturerString;
 | 
			
		||||
					Size    = pgm_read_byte(&ManufacturerString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x02: 
 | 
			
		||||
					Address = (void*)&ProductString;
 | 
			
		||||
					Address = &ProductString;
 | 
			
		||||
					Size    = pgm_read_byte(&ProductString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			@ -316,24 +316,24 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		|||
		case DTYPE_HID: 
 | 
			
		||||
			if (!(wIndex))
 | 
			
		||||
			{
 | 
			
		||||
				Address = (void*)&ConfigurationDescriptor.HID1_KeyboardHID;
 | 
			
		||||
				Address = &ConfigurationDescriptor.HID1_KeyboardHID;
 | 
			
		||||
				Size    = sizeof(USB_HID_Descriptor_t);
 | 
			
		||||
			}
 | 
			
		||||
			else
 | 
			
		||||
			{
 | 
			
		||||
				Address = (void*)&ConfigurationDescriptor.HID2_MouseHID;
 | 
			
		||||
				Address = &ConfigurationDescriptor.HID2_MouseHID;
 | 
			
		||||
				Size    = sizeof(USB_HID_Descriptor_t);			
 | 
			
		||||
			}
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_Report: 
 | 
			
		||||
			if (!(wIndex))
 | 
			
		||||
			{
 | 
			
		||||
				Address = (void*)&KeyboardReport;
 | 
			
		||||
				Address = &KeyboardReport;
 | 
			
		||||
				Size    = sizeof(KeyboardReport);
 | 
			
		||||
			}
 | 
			
		||||
			else
 | 
			
		||||
			{			
 | 
			
		||||
				Address = (void*)&MouseReport;
 | 
			
		||||
				Address = &MouseReport;
 | 
			
		||||
				Size    = sizeof(MouseReport);
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -71,6 +71,7 @@
 | 
			
		|||
	/* Function Prototypes: */
 | 
			
		||||
		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
		                                    const uint8_t wIndex,
 | 
			
		||||
		                                    void** const DescriptorAddress) ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
		                                    const void** const DescriptorAddress)
 | 
			
		||||
		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -285,37 +285,37 @@ USB_Descriptor_String_t PROGMEM ProductString =
 | 
			
		|||
 */
 | 
			
		||||
uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
                                    const uint8_t wIndex,
 | 
			
		||||
                                    void** const DescriptorAddress)
 | 
			
		||||
                                    const void** const DescriptorAddress)
 | 
			
		||||
{
 | 
			
		||||
	const uint8_t  DescriptorType   = (wValue >> 8);
 | 
			
		||||
	const uint8_t  DescriptorNumber = (wValue & 0xFF);
 | 
			
		||||
 | 
			
		||||
	void*    Address = NULL;
 | 
			
		||||
	uint16_t Size    = NO_DESCRIPTOR;
 | 
			
		||||
	const void* Address = NULL;
 | 
			
		||||
	uint16_t    Size    = NO_DESCRIPTOR;
 | 
			
		||||
 | 
			
		||||
	switch (DescriptorType)
 | 
			
		||||
	{
 | 
			
		||||
		case DTYPE_Device: 
 | 
			
		||||
			Address = (void*)&DeviceDescriptor;
 | 
			
		||||
			Address = &DeviceDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Device_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_Configuration: 
 | 
			
		||||
			Address = (void*)&ConfigurationDescriptor;
 | 
			
		||||
			Address = &ConfigurationDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Configuration_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_String: 
 | 
			
		||||
			switch (DescriptorNumber)
 | 
			
		||||
			{
 | 
			
		||||
				case 0x00: 
 | 
			
		||||
					Address = (void*)&LanguageString;
 | 
			
		||||
					Address = &LanguageString;
 | 
			
		||||
					Size    = pgm_read_byte(&LanguageString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x01: 
 | 
			
		||||
					Address = (void*)&ManufacturerString;
 | 
			
		||||
					Address = &ManufacturerString;
 | 
			
		||||
					Size    = pgm_read_byte(&ManufacturerString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x02: 
 | 
			
		||||
					Address = (void*)&ProductString;
 | 
			
		||||
					Address = &ProductString;
 | 
			
		||||
					Size    = pgm_read_byte(&ProductString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -77,6 +77,7 @@
 | 
			
		|||
	/* Function Prototypes: */
 | 
			
		||||
		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
		                                    const uint8_t wIndex,
 | 
			
		||||
		                                    void** const DescriptorAddress) ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
		                                    const void** const DescriptorAddress)
 | 
			
		||||
		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -176,37 +176,37 @@ USB_Descriptor_String_t PROGMEM ProductString =
 | 
			
		|||
 */
 | 
			
		||||
uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
                                    const uint8_t wIndex,
 | 
			
		||||
                                    void** const DescriptorAddress)
 | 
			
		||||
                                    const void** const DescriptorAddress)
 | 
			
		||||
{
 | 
			
		||||
	const uint8_t  DescriptorType   = (wValue >> 8);
 | 
			
		||||
	const uint8_t  DescriptorNumber = (wValue & 0xFF);
 | 
			
		||||
 | 
			
		||||
	void*    Address = NULL;
 | 
			
		||||
	uint16_t Size    = NO_DESCRIPTOR;
 | 
			
		||||
	const void* Address = NULL;
 | 
			
		||||
	uint16_t    Size    = NO_DESCRIPTOR;
 | 
			
		||||
 | 
			
		||||
	switch (DescriptorType)
 | 
			
		||||
	{
 | 
			
		||||
		case DTYPE_Device: 
 | 
			
		||||
			Address = (void*)&DeviceDescriptor;
 | 
			
		||||
			Address = &DeviceDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Device_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_Configuration: 
 | 
			
		||||
			Address = (void*)&ConfigurationDescriptor;
 | 
			
		||||
			Address = &ConfigurationDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Configuration_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_String: 
 | 
			
		||||
			switch (DescriptorNumber)
 | 
			
		||||
			{
 | 
			
		||||
				case 0x00: 
 | 
			
		||||
					Address = (void*)&LanguageString;
 | 
			
		||||
					Address = &LanguageString;
 | 
			
		||||
					Size    = pgm_read_byte(&LanguageString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x01: 
 | 
			
		||||
					Address = (void*)&ManufacturerString;
 | 
			
		||||
					Address = &ManufacturerString;
 | 
			
		||||
					Size    = pgm_read_byte(&ManufacturerString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x02: 
 | 
			
		||||
					Address = (void*)&ProductString;
 | 
			
		||||
					Address = &ProductString;
 | 
			
		||||
					Size    = pgm_read_byte(&ProductString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -68,6 +68,7 @@
 | 
			
		|||
	/* Function Prototypes: */
 | 
			
		||||
		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
		                                    const uint8_t wIndex,
 | 
			
		||||
		                                    void** const DescriptorAddress) ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
		                                    const void** const DescriptorAddress)
 | 
			
		||||
		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -256,48 +256,48 @@ USB_Descriptor_String_t PROGMEM ProductString =
 | 
			
		|||
 */
 | 
			
		||||
uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
                                    const uint8_t wIndex,
 | 
			
		||||
                                    void** const DescriptorAddress)
 | 
			
		||||
                                    const void** const DescriptorAddress)
 | 
			
		||||
{
 | 
			
		||||
	const uint8_t  DescriptorType   = (wValue >> 8);
 | 
			
		||||
	const uint8_t  DescriptorNumber = (wValue & 0xFF);
 | 
			
		||||
 | 
			
		||||
	void*    Address = NULL;
 | 
			
		||||
	uint16_t Size    = NO_DESCRIPTOR;
 | 
			
		||||
	const void* Address = NULL;
 | 
			
		||||
	uint16_t    Size    = NO_DESCRIPTOR;
 | 
			
		||||
 | 
			
		||||
	switch (DescriptorType)
 | 
			
		||||
	{
 | 
			
		||||
		case DTYPE_Device: 
 | 
			
		||||
			Address = (void*)&DeviceDescriptor;
 | 
			
		||||
			Address = &DeviceDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Device_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_Configuration: 
 | 
			
		||||
			Address = (void*)&ConfigurationDescriptor;
 | 
			
		||||
			Address = &ConfigurationDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Configuration_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_String: 
 | 
			
		||||
			switch (DescriptorNumber)
 | 
			
		||||
			{
 | 
			
		||||
				case 0x00: 
 | 
			
		||||
					Address = (void*)&LanguageString;
 | 
			
		||||
					Address = &LanguageString;
 | 
			
		||||
					Size    = pgm_read_byte(&LanguageString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x01: 
 | 
			
		||||
					Address = (void*)&ManufacturerString;
 | 
			
		||||
					Address = &ManufacturerString;
 | 
			
		||||
					Size    = pgm_read_byte(&ManufacturerString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x02: 
 | 
			
		||||
					Address = (void*)&ProductString;
 | 
			
		||||
					Address = &ProductString;
 | 
			
		||||
					Size    = pgm_read_byte(&ProductString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_HID:
 | 
			
		||||
			Address = (void*)&ConfigurationDescriptor.HID_KeyboardHID;
 | 
			
		||||
			Address = &ConfigurationDescriptor.HID_KeyboardHID;
 | 
			
		||||
			Size    = sizeof(USB_HID_Descriptor_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_Report:
 | 
			
		||||
			Address = (void*)&KeyboardReport;
 | 
			
		||||
			Address = &KeyboardReport;
 | 
			
		||||
			Size    = sizeof(KeyboardReport);
 | 
			
		||||
			break;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -79,6 +79,7 @@
 | 
			
		|||
	/* Function Prototypes: */
 | 
			
		||||
		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
		                                    const uint8_t wIndex,
 | 
			
		||||
		                                    void** const DescriptorAddress) ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
		                                    const void** const DescriptorAddress)
 | 
			
		||||
		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -201,48 +201,48 @@ USB_Descriptor_String_t PROGMEM ProductString =
 | 
			
		|||
 */
 | 
			
		||||
uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
                                    const uint8_t wIndex,
 | 
			
		||||
                                    void** const DescriptorAddress)
 | 
			
		||||
                                    const void** const DescriptorAddress)
 | 
			
		||||
{
 | 
			
		||||
	const uint8_t  DescriptorType   = (wValue >> 8);
 | 
			
		||||
	const uint8_t  DescriptorNumber = (wValue & 0xFF);
 | 
			
		||||
 | 
			
		||||
	void*    Address = NULL;
 | 
			
		||||
	uint16_t Size    = NO_DESCRIPTOR;
 | 
			
		||||
	const void* Address = NULL;
 | 
			
		||||
	uint16_t    Size    = NO_DESCRIPTOR;
 | 
			
		||||
 | 
			
		||||
	switch (DescriptorType)
 | 
			
		||||
	{
 | 
			
		||||
		case DTYPE_Device:
 | 
			
		||||
			Address = (void*)&DeviceDescriptor;
 | 
			
		||||
			Address = &DeviceDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Device_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_Configuration:
 | 
			
		||||
			Address = (void*)&ConfigurationDescriptor;
 | 
			
		||||
			Address = &ConfigurationDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Configuration_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_String:
 | 
			
		||||
			switch (DescriptorNumber)
 | 
			
		||||
			{
 | 
			
		||||
				case 0x00:
 | 
			
		||||
					Address = (void*)&LanguageString;
 | 
			
		||||
					Address = &LanguageString;
 | 
			
		||||
					Size    = pgm_read_byte(&LanguageString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x01:
 | 
			
		||||
					Address = (void*)&ManufacturerString;
 | 
			
		||||
					Address = &ManufacturerString;
 | 
			
		||||
					Size    = pgm_read_byte(&ManufacturerString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x02:
 | 
			
		||||
					Address = (void*)&ProductString;
 | 
			
		||||
					Address = &ProductString;
 | 
			
		||||
					Size    = pgm_read_byte(&ProductString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_HID: 
 | 
			
		||||
			Address = (void*)&ConfigurationDescriptor.HID_MouseHID;
 | 
			
		||||
			Address = &ConfigurationDescriptor.HID_MouseHID;
 | 
			
		||||
			Size    = sizeof(USB_HID_Descriptor_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_Report: 
 | 
			
		||||
			Address = (void*)&MouseReport;
 | 
			
		||||
			Address = &MouseReport;
 | 
			
		||||
			Size    = sizeof(MouseReport);
 | 
			
		||||
			break;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -65,6 +65,7 @@
 | 
			
		|||
	/* Function Prototypes: */
 | 
			
		||||
		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
		                                    const uint8_t wIndex,
 | 
			
		||||
		                                    void** const DescriptorAddress) ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
		                                    const void** const DescriptorAddress)
 | 
			
		||||
		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -214,37 +214,37 @@ USB_Descriptor_String_t PROGMEM ProductString =
 | 
			
		|||
 */
 | 
			
		||||
uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
                                    const uint8_t wIndex,
 | 
			
		||||
                                    void** const DescriptorAddress)
 | 
			
		||||
                                    const void** const DescriptorAddress)
 | 
			
		||||
{
 | 
			
		||||
	const uint8_t  DescriptorType   = (wValue >> 8);
 | 
			
		||||
	const uint8_t  DescriptorNumber = (wValue & 0xFF);
 | 
			
		||||
 | 
			
		||||
	void*    Address = NULL;
 | 
			
		||||
	uint16_t Size    = NO_DESCRIPTOR;
 | 
			
		||||
	const void* Address = NULL;
 | 
			
		||||
	uint16_t    Size    = NO_DESCRIPTOR;
 | 
			
		||||
 | 
			
		||||
	switch (DescriptorType)
 | 
			
		||||
	{
 | 
			
		||||
		case DTYPE_Device:
 | 
			
		||||
			Address = (void*)&DeviceDescriptor;
 | 
			
		||||
			Address = &DeviceDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Device_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_Configuration: 
 | 
			
		||||
			Address = (void*)&ConfigurationDescriptor;
 | 
			
		||||
			Address = &ConfigurationDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Configuration_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_String:
 | 
			
		||||
			switch (DescriptorNumber)
 | 
			
		||||
			{
 | 
			
		||||
				case 0x00:
 | 
			
		||||
					Address = (void*)&LanguageString;
 | 
			
		||||
					Address = &LanguageString;
 | 
			
		||||
					Size    = pgm_read_byte(&LanguageString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x01:
 | 
			
		||||
					Address = (void*)&ManufacturerString;
 | 
			
		||||
					Address = &ManufacturerString;
 | 
			
		||||
					Size    = pgm_read_byte(&ManufacturerString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x02:
 | 
			
		||||
					Address = (void*)&ProductString;
 | 
			
		||||
					Address = &ProductString;
 | 
			
		||||
					Size    = pgm_read_byte(&ProductString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -79,6 +79,7 @@
 | 
			
		|||
	/* Function Prototypes: */
 | 
			
		||||
		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
		                                    const uint8_t wIndex,
 | 
			
		||||
		                                    void** const DescriptorAddress) ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
		                                    const void** const DescriptorAddress)
 | 
			
		||||
		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -226,37 +226,37 @@ USB_Descriptor_String_t PROGMEM ProductString =
 | 
			
		|||
 */
 | 
			
		||||
uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
                                    const uint8_t wIndex,
 | 
			
		||||
                                    void** const DescriptorAddress)
 | 
			
		||||
                                    const void** const DescriptorAddress)
 | 
			
		||||
{
 | 
			
		||||
	const uint8_t  DescriptorType   = (wValue >> 8);
 | 
			
		||||
	const uint8_t  DescriptorNumber = (wValue & 0xFF);
 | 
			
		||||
 | 
			
		||||
	void*          Address = NULL;
 | 
			
		||||
	uint16_t       Size    = NO_DESCRIPTOR;
 | 
			
		||||
	const void* Address = NULL;
 | 
			
		||||
	uint16_t    Size    = NO_DESCRIPTOR;
 | 
			
		||||
 | 
			
		||||
	switch (DescriptorType)
 | 
			
		||||
	{
 | 
			
		||||
		case DTYPE_Device:
 | 
			
		||||
			Address = (void*)&DeviceDescriptor;
 | 
			
		||||
			Address = &DeviceDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Device_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_Configuration: 
 | 
			
		||||
			Address = (void*)&ConfigurationDescriptor;
 | 
			
		||||
			Address = &ConfigurationDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Configuration_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_String: 
 | 
			
		||||
			switch (DescriptorNumber)
 | 
			
		||||
			{
 | 
			
		||||
				case 0x00: 
 | 
			
		||||
					Address = (void*)&LanguageString;
 | 
			
		||||
					Address = &LanguageString;
 | 
			
		||||
					Size    = pgm_read_byte(&LanguageString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x01: 
 | 
			
		||||
					Address = (void*)&ManufacturerString;
 | 
			
		||||
					Address = &ManufacturerString;
 | 
			
		||||
					Size    = pgm_read_byte(&ManufacturerString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x02: 
 | 
			
		||||
					Address = (void*)&ProductString;
 | 
			
		||||
					Address = &ProductString;
 | 
			
		||||
					Size    = pgm_read_byte(&ProductString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -79,6 +79,7 @@
 | 
			
		|||
	/* Function Prototypes: */
 | 
			
		||||
		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
		                                    const uint8_t wIndex,
 | 
			
		||||
		                                    void** const DescriptorAddress) ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
		                                    const void** const DescriptorAddress)
 | 
			
		||||
		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -313,48 +313,48 @@ USB_Descriptor_String_t PROGMEM ProductString =
 | 
			
		|||
 */
 | 
			
		||||
uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
                                    const uint8_t wIndex,
 | 
			
		||||
                                    void** const DescriptorAddress)
 | 
			
		||||
                                    const void** const DescriptorAddress)
 | 
			
		||||
{
 | 
			
		||||
	const uint8_t  DescriptorType   = (wValue >> 8);
 | 
			
		||||
	const uint8_t  DescriptorNumber = (wValue & 0xFF);
 | 
			
		||||
 | 
			
		||||
	void*          Address = NULL;
 | 
			
		||||
	uint16_t       Size    = NO_DESCRIPTOR;
 | 
			
		||||
	const void* Address = NULL;
 | 
			
		||||
	uint16_t    Size    = NO_DESCRIPTOR;
 | 
			
		||||
 | 
			
		||||
	switch (DescriptorType)
 | 
			
		||||
	{
 | 
			
		||||
		case DTYPE_Device:
 | 
			
		||||
			Address = (void*)&DeviceDescriptor;
 | 
			
		||||
			Address = &DeviceDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Device_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_Configuration: 
 | 
			
		||||
			Address = (void*)&ConfigurationDescriptor;
 | 
			
		||||
			Address = &ConfigurationDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Configuration_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_String: 
 | 
			
		||||
			switch (DescriptorNumber)
 | 
			
		||||
			{
 | 
			
		||||
				case 0x00: 
 | 
			
		||||
					Address = (void*)&LanguageString;
 | 
			
		||||
					Address = &LanguageString;
 | 
			
		||||
					Size    = pgm_read_byte(&LanguageString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x01: 
 | 
			
		||||
					Address = (void*)&ManufacturerString;
 | 
			
		||||
					Address = &ManufacturerString;
 | 
			
		||||
					Size    = pgm_read_byte(&ManufacturerString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x02: 
 | 
			
		||||
					Address = (void*)&ProductString;
 | 
			
		||||
					Address = &ProductString;
 | 
			
		||||
					Size    = pgm_read_byte(&ProductString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_HID: 
 | 
			
		||||
			Address = (void*)&ConfigurationDescriptor.HID_MouseHID;
 | 
			
		||||
			Address = &ConfigurationDescriptor.HID_MouseHID;
 | 
			
		||||
			Size    = sizeof(USB_HID_Descriptor_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_Report: 
 | 
			
		||||
			Address = (void*)&MouseReport;
 | 
			
		||||
			Address = &MouseReport;
 | 
			
		||||
			Size    = sizeof(MouseReport);
 | 
			
		||||
			break;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -90,6 +90,7 @@
 | 
			
		|||
	/* Function Prototypes: */
 | 
			
		||||
		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
		                                    const uint8_t wIndex,
 | 
			
		||||
		                                    void** const DescriptorAddress) ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
		                                    const void** const DescriptorAddress)
 | 
			
		||||
		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -156,48 +156,48 @@ USB_OSCompatibleIDDescriptor_t PROGMEM DevCompatIDs =
 | 
			
		|||
 | 
			
		||||
uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
                                    const uint8_t wIndex,
 | 
			
		||||
                                    void** const DescriptorAddress)
 | 
			
		||||
                                    const void** const DescriptorAddress)
 | 
			
		||||
{
 | 
			
		||||
	const uint8_t  DescriptorType   = (wValue >> 8);
 | 
			
		||||
	const uint8_t  DescriptorNumber = (wValue & 0xFF);
 | 
			
		||||
 | 
			
		||||
	void*    Address = NULL;
 | 
			
		||||
	uint16_t Size    = NO_DESCRIPTOR;
 | 
			
		||||
	const void* Address = NULL;
 | 
			
		||||
	uint16_t    Size    = NO_DESCRIPTOR;
 | 
			
		||||
 | 
			
		||||
	switch (DescriptorType)
 | 
			
		||||
	{
 | 
			
		||||
		case DTYPE_Device:
 | 
			
		||||
			Address = (void*)&DeviceDescriptor;
 | 
			
		||||
			Address = &DeviceDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Device_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_Configuration:
 | 
			
		||||
			Address = (void*)&ConfigurationDescriptor;
 | 
			
		||||
			Address = &ConfigurationDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Configuration_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_String:
 | 
			
		||||
			switch (DescriptorNumber)
 | 
			
		||||
			{
 | 
			
		||||
				case 0x00:
 | 
			
		||||
					Address = (void*)&LanguageString;
 | 
			
		||||
					Address = &LanguageString;
 | 
			
		||||
					Size    = pgm_read_byte(&LanguageString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x01:
 | 
			
		||||
					Address = (void*)&ManufacturerString;
 | 
			
		||||
					Address = &ManufacturerString;
 | 
			
		||||
					Size    = pgm_read_byte(&ManufacturerString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x02:
 | 
			
		||||
					Address = (void*)&ProductString;
 | 
			
		||||
					Address = &ProductString;
 | 
			
		||||
					Size    = pgm_read_byte(&ProductString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x03:
 | 
			
		||||
					Address = (void*)&SerialNumberString;
 | 
			
		||||
					Address = &SerialNumberString;
 | 
			
		||||
					Size    = pgm_read_byte(&SerialNumberString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0xEE:
 | 
			
		||||
					/* A Microsoft-proprietary extension. String address 0xEE is used by Windows for
 | 
			
		||||
					   "OS Descriptors", which in this case allows us to indicate that our device is
 | 
			
		||||
					   Sideshow compatible regardless of VID/PID values. */
 | 
			
		||||
					Address = (void*)&OSDescriptorString;
 | 
			
		||||
					Address = &OSDescriptorString;
 | 
			
		||||
					Size    = pgm_read_byte(&OSDescriptorString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			@ -211,7 +211,7 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		|||
 | 
			
		||||
uint16_t USB_GetOSFeatureDescriptor(const uint16_t wValue,
 | 
			
		||||
                                    const uint8_t wIndex,
 | 
			
		||||
                                    void** const DescriptorAddress)
 | 
			
		||||
                                    const void** const DescriptorAddress)
 | 
			
		||||
{
 | 
			
		||||
	void*    Address = NULL;
 | 
			
		||||
	uint16_t Size    = NO_DESCRIPTOR;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -87,10 +87,12 @@
 | 
			
		|||
	/* Function Prototypes: */
 | 
			
		||||
		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
		                                    const uint8_t wIndex,
 | 
			
		||||
		                                    void** const DescriptorAddress) ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
		                                    const void** const DescriptorAddress)
 | 
			
		||||
		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
 | 
			
		||||
		uint16_t USB_GetOSFeatureDescriptor(const uint16_t wValue,
 | 
			
		||||
		                                    const uint8_t wIndex,
 | 
			
		||||
		                                    void** const DescriptorAddress) ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
		                                    const void** const DescriptorAddress)
 | 
			
		||||
		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -187,37 +187,37 @@ USB_Descriptor_String_t PROGMEM ProductString =
 | 
			
		|||
 */
 | 
			
		||||
uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
                                    const uint8_t wIndex,
 | 
			
		||||
                                    void** const DescriptorAddress)
 | 
			
		||||
                                    const void** const DescriptorAddress)
 | 
			
		||||
{
 | 
			
		||||
	const uint8_t  DescriptorType   = (wValue >> 8);
 | 
			
		||||
	const uint8_t  DescriptorNumber = (wValue & 0xFF);
 | 
			
		||||
 | 
			
		||||
	void*          Address = NULL;
 | 
			
		||||
	uint16_t       Size    = NO_DESCRIPTOR;
 | 
			
		||||
	const void* Address = NULL;
 | 
			
		||||
	uint16_t    Size    = NO_DESCRIPTOR;
 | 
			
		||||
 | 
			
		||||
	switch (DescriptorType)
 | 
			
		||||
	{
 | 
			
		||||
		case DTYPE_Device:
 | 
			
		||||
			Address = (void*)&DeviceDescriptor;
 | 
			
		||||
			Address = &DeviceDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Device_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_Configuration: 
 | 
			
		||||
			Address = (void*)&ConfigurationDescriptor;
 | 
			
		||||
			Address = &ConfigurationDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Configuration_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_String: 
 | 
			
		||||
			switch (DescriptorNumber)
 | 
			
		||||
			{
 | 
			
		||||
				case 0x00: 
 | 
			
		||||
					Address = (void*)&LanguageString;
 | 
			
		||||
					Address = &LanguageString;
 | 
			
		||||
					Size    = pgm_read_byte(&LanguageString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x01: 
 | 
			
		||||
					Address = (void*)&ManufacturerString;
 | 
			
		||||
					Address = &ManufacturerString;
 | 
			
		||||
					Size    = pgm_read_byte(&ManufacturerString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x02: 
 | 
			
		||||
					Address = (void*)&ProductString;
 | 
			
		||||
					Address = &ProductString;
 | 
			
		||||
					Size    = pgm_read_byte(&ProductString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -75,6 +75,7 @@
 | 
			
		|||
	/* Function Prototypes: */
 | 
			
		||||
		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
		                                    const uint8_t wIndex,
 | 
			
		||||
		                                    void** const DescriptorAddress) ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
		                                    const void** const DescriptorAddress)
 | 
			
		||||
		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -274,37 +274,37 @@ USB_Descriptor_String_t PROGMEM ProductString =
 | 
			
		|||
 */
 | 
			
		||||
uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
                                    const uint8_t wIndex,
 | 
			
		||||
                                    void** const DescriptorAddress)
 | 
			
		||||
                                    const void** const DescriptorAddress)
 | 
			
		||||
{
 | 
			
		||||
	const uint8_t  DescriptorType   = (wValue >> 8);
 | 
			
		||||
	const uint8_t  DescriptorNumber = (wValue & 0xFF);
 | 
			
		||||
 | 
			
		||||
	void*    Address = NULL;
 | 
			
		||||
	uint16_t Size    = NO_DESCRIPTOR;
 | 
			
		||||
	const void* Address = NULL;
 | 
			
		||||
	uint16_t    Size    = NO_DESCRIPTOR;
 | 
			
		||||
 | 
			
		||||
	switch (DescriptorType)
 | 
			
		||||
	{
 | 
			
		||||
		case DTYPE_Device:
 | 
			
		||||
			Address = (void*)&DeviceDescriptor;
 | 
			
		||||
			Address = &DeviceDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Device_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_Configuration: 
 | 
			
		||||
			Address = (void*)&ConfigurationDescriptor;
 | 
			
		||||
			Address = &ConfigurationDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Configuration_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_String: 
 | 
			
		||||
			switch (DescriptorNumber)
 | 
			
		||||
			{
 | 
			
		||||
				case 0x00: 
 | 
			
		||||
					Address = (void*)&LanguageString;
 | 
			
		||||
					Address = &LanguageString;
 | 
			
		||||
					Size    = pgm_read_byte(&LanguageString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x01: 
 | 
			
		||||
					Address = (void*)&ManufacturerString;
 | 
			
		||||
					Address = &ManufacturerString;
 | 
			
		||||
					Size    = pgm_read_byte(&ManufacturerString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x02: 
 | 
			
		||||
					Address = (void*)&ProductString;
 | 
			
		||||
					Address = &ProductString;
 | 
			
		||||
					Size    = pgm_read_byte(&ProductString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -314,6 +314,7 @@
 | 
			
		|||
	/* Function Prototypes: */
 | 
			
		||||
		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
		                                    const uint8_t wIndex,
 | 
			
		||||
		                                    void** const DescriptorAddress) ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
		                                    const void** const DescriptorAddress)
 | 
			
		||||
		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -274,37 +274,37 @@ USB_Descriptor_String_t PROGMEM ProductString =
 | 
			
		|||
 */
 | 
			
		||||
uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
                                    const uint8_t wIndex,
 | 
			
		||||
                                    void** const DescriptorAddress)
 | 
			
		||||
                                    const void** const DescriptorAddress)
 | 
			
		||||
{
 | 
			
		||||
	const uint8_t  DescriptorType   = (wValue >> 8);
 | 
			
		||||
	const uint8_t  DescriptorNumber = (wValue & 0xFF);
 | 
			
		||||
 | 
			
		||||
	void*    Address = NULL;
 | 
			
		||||
	uint16_t Size    = NO_DESCRIPTOR;
 | 
			
		||||
	const void* Address = NULL;
 | 
			
		||||
	uint16_t    Size    = NO_DESCRIPTOR;
 | 
			
		||||
 | 
			
		||||
	switch (DescriptorType)
 | 
			
		||||
	{
 | 
			
		||||
		case DTYPE_Device:
 | 
			
		||||
			Address = (void*)&DeviceDescriptor;
 | 
			
		||||
			Address = &DeviceDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Device_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_Configuration:
 | 
			
		||||
			Address = (void*)&ConfigurationDescriptor;
 | 
			
		||||
			Address = &ConfigurationDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Configuration_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_String: 
 | 
			
		||||
			switch (DescriptorNumber)
 | 
			
		||||
			{
 | 
			
		||||
				case 0x00:
 | 
			
		||||
					Address = (void*)&LanguageString;
 | 
			
		||||
					Address = &LanguageString;
 | 
			
		||||
					Size    = pgm_read_byte(&LanguageString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x01: 
 | 
			
		||||
					Address = (void*)&ManufacturerString;
 | 
			
		||||
					Address = &ManufacturerString;
 | 
			
		||||
					Size    = pgm_read_byte(&ManufacturerString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x02: 
 | 
			
		||||
					Address = (void*)&ProductString;
 | 
			
		||||
					Address = &ProductString;
 | 
			
		||||
					Size    = pgm_read_byte(&ProductString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -314,6 +314,7 @@
 | 
			
		|||
	/* Function Prototypes: */
 | 
			
		||||
		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
		                                    const uint8_t wIndex,
 | 
			
		||||
		                                    void** const DescriptorAddress) ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
		                                    const void** const DescriptorAddress)
 | 
			
		||||
		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -340,37 +340,37 @@ USB_Descriptor_String_t PROGMEM ProductString =
 | 
			
		|||
 */
 | 
			
		||||
uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
                                    const uint8_t wIndex,
 | 
			
		||||
                                    void** const DescriptorAddress)
 | 
			
		||||
                                    const void** const DescriptorAddress)
 | 
			
		||||
{
 | 
			
		||||
	const uint8_t  DescriptorType   = (wValue >> 8);
 | 
			
		||||
	const uint8_t  DescriptorNumber = (wValue & 0xFF);
 | 
			
		||||
 | 
			
		||||
	void*    Address = NULL;
 | 
			
		||||
	uint16_t Size    = NO_DESCRIPTOR;
 | 
			
		||||
 | 
			
		||||
	const void* Address = NULL;
 | 
			
		||||
	uint16_t    Size    = NO_DESCRIPTOR;
 | 
			
		||||
	
 | 
			
		||||
	switch (DescriptorType)
 | 
			
		||||
	{
 | 
			
		||||
		case DTYPE_Device:
 | 
			
		||||
			Address = (void*)&DeviceDescriptor;
 | 
			
		||||
			Address = &DeviceDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Device_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_Configuration: 
 | 
			
		||||
			Address = (void*)&ConfigurationDescriptor;
 | 
			
		||||
			Address = &ConfigurationDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Configuration_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_String: 
 | 
			
		||||
			switch (DescriptorNumber)
 | 
			
		||||
			{
 | 
			
		||||
				case 0x00: 
 | 
			
		||||
					Address = (void*)&LanguageString;
 | 
			
		||||
					Address = &LanguageString;
 | 
			
		||||
					Size    = pgm_read_byte(&LanguageString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x01: 
 | 
			
		||||
					Address = (void*)&ManufacturerString;
 | 
			
		||||
					Address = &ManufacturerString;
 | 
			
		||||
					Size    = pgm_read_byte(&ManufacturerString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x02: 
 | 
			
		||||
					Address = (void*)&ProductString;
 | 
			
		||||
					Address = &ProductString;
 | 
			
		||||
					Size    = pgm_read_byte(&ProductString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -112,6 +112,7 @@
 | 
			
		|||
	/* Function Prototypes: */
 | 
			
		||||
		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
		                                    const uint8_t wIndex,
 | 
			
		||||
		                                    void** const DescriptorAddress) ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
		                                    const void** const DescriptorAddress)
 | 
			
		||||
		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -201,48 +201,48 @@ USB_Descriptor_String_t PROGMEM ProductString =
 | 
			
		|||
 */
 | 
			
		||||
uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
                                    const uint8_t wIndex,
 | 
			
		||||
                                    void** const DescriptorAddress)
 | 
			
		||||
                                    const void** const DescriptorAddress)
 | 
			
		||||
{
 | 
			
		||||
	const uint8_t  DescriptorType   = (wValue >> 8);
 | 
			
		||||
	const uint8_t  DescriptorNumber = (wValue & 0xFF);
 | 
			
		||||
 | 
			
		||||
	void*    Address = NULL;
 | 
			
		||||
	uint16_t Size    = NO_DESCRIPTOR;
 | 
			
		||||
	const void* Address = NULL;
 | 
			
		||||
	uint16_t    Size    = NO_DESCRIPTOR;
 | 
			
		||||
 | 
			
		||||
	switch (DescriptorType)
 | 
			
		||||
	{
 | 
			
		||||
		case DTYPE_Device:
 | 
			
		||||
			Address = (void*)&DeviceDescriptor;
 | 
			
		||||
			Address = &DeviceDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Device_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_Configuration: 
 | 
			
		||||
			Address = (void*)&ConfigurationDescriptor;
 | 
			
		||||
			Address = &ConfigurationDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Configuration_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_String: 
 | 
			
		||||
			switch (DescriptorNumber)
 | 
			
		||||
			{
 | 
			
		||||
				case 0x00: 
 | 
			
		||||
					Address = (void*)&LanguageString;
 | 
			
		||||
					Address = &LanguageString;
 | 
			
		||||
					Size    = pgm_read_byte(&LanguageString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x01: 
 | 
			
		||||
					Address = (void*)&ManufacturerString;
 | 
			
		||||
					Address = &ManufacturerString;
 | 
			
		||||
					Size    = pgm_read_byte(&ManufacturerString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x02: 
 | 
			
		||||
					Address = (void*)&ProductString;
 | 
			
		||||
					Address = &ProductString;
 | 
			
		||||
					Size    = pgm_read_byte(&ProductString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_HID: 
 | 
			
		||||
			Address = (void*)&ConfigurationDescriptor.HID_GenericHID;
 | 
			
		||||
			Address = &ConfigurationDescriptor.HID_GenericHID;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_HID_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_Report: 
 | 
			
		||||
			Address = (void*)&GenericReport;
 | 
			
		||||
			Address = &GenericReport;
 | 
			
		||||
			Size    = sizeof(GenericReport);
 | 
			
		||||
			break;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -96,6 +96,7 @@
 | 
			
		|||
	/* Function Prototypes: */
 | 
			
		||||
		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
		                                    const uint8_t wIndex,
 | 
			
		||||
		                                    void** const DescriptorAddress) ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
		                                    const void** const DescriptorAddress)
 | 
			
		||||
		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -201,48 +201,48 @@ USB_Descriptor_String_t PROGMEM ProductString =
 | 
			
		|||
 */
 | 
			
		||||
uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
                                    const uint8_t wIndex,
 | 
			
		||||
                                    void** const DescriptorAddress)
 | 
			
		||||
                                    const void** const DescriptorAddress)
 | 
			
		||||
{
 | 
			
		||||
	const uint8_t  DescriptorType   = (wValue >> 8);
 | 
			
		||||
	const uint8_t  DescriptorNumber = (wValue & 0xFF);
 | 
			
		||||
 | 
			
		||||
	void*    Address = NULL;
 | 
			
		||||
	uint16_t Size    = NO_DESCRIPTOR;
 | 
			
		||||
	const void* Address = NULL;
 | 
			
		||||
	uint16_t    Size    = NO_DESCRIPTOR;
 | 
			
		||||
 | 
			
		||||
	switch (DescriptorType)
 | 
			
		||||
	{
 | 
			
		||||
		case DTYPE_Device:
 | 
			
		||||
			Address = (void*)&DeviceDescriptor;
 | 
			
		||||
			Address = &DeviceDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Device_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_Configuration: 
 | 
			
		||||
			Address = (void*)&ConfigurationDescriptor;
 | 
			
		||||
			Address = &ConfigurationDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Configuration_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_String: 
 | 
			
		||||
			switch (DescriptorNumber)
 | 
			
		||||
			{
 | 
			
		||||
				case 0x00: 
 | 
			
		||||
					Address = (void*)&LanguageString;
 | 
			
		||||
					Address = &LanguageString;
 | 
			
		||||
					Size    = pgm_read_byte(&LanguageString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x01: 
 | 
			
		||||
					Address = (void*)&ManufacturerString;
 | 
			
		||||
					Address = &ManufacturerString;
 | 
			
		||||
					Size    = pgm_read_byte(&ManufacturerString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x02: 
 | 
			
		||||
					Address = (void*)&ProductString;
 | 
			
		||||
					Address = &ProductString;
 | 
			
		||||
					Size    = pgm_read_byte(&ProductString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_HID: 
 | 
			
		||||
			Address = (void*)&ConfigurationDescriptor.HID_JoystickHID;
 | 
			
		||||
			Address = &ConfigurationDescriptor.HID_JoystickHID;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_HID_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_Report: 
 | 
			
		||||
			Address = (void*)&JoystickReport;
 | 
			
		||||
			Address = &JoystickReport;
 | 
			
		||||
			Size    = sizeof(JoystickReport);
 | 
			
		||||
			break;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -89,6 +89,7 @@
 | 
			
		|||
	/* Function Prototypes: */
 | 
			
		||||
		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
		                                    const uint8_t wIndex,
 | 
			
		||||
		                                    void** const DescriptorAddress) ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
		                                    const void** const DescriptorAddress)
 | 
			
		||||
		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -218,48 +218,48 @@ USB_Descriptor_String_t PROGMEM ProductString =
 | 
			
		|||
 */
 | 
			
		||||
uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
                                    const uint8_t wIndex,
 | 
			
		||||
                                    void** const DescriptorAddress)
 | 
			
		||||
                                    const void** const DescriptorAddress)
 | 
			
		||||
{
 | 
			
		||||
	const uint8_t  DescriptorType   = (wValue >> 8);
 | 
			
		||||
	const uint8_t  DescriptorNumber = (wValue & 0xFF);
 | 
			
		||||
 | 
			
		||||
	void*    Address = NULL;
 | 
			
		||||
	uint16_t Size    = NO_DESCRIPTOR;
 | 
			
		||||
	const void* Address = NULL;
 | 
			
		||||
	uint16_t    Size    = NO_DESCRIPTOR;
 | 
			
		||||
 | 
			
		||||
	switch (DescriptorType)
 | 
			
		||||
	{
 | 
			
		||||
		case DTYPE_Device: 
 | 
			
		||||
			Address = (void*)&DeviceDescriptor;
 | 
			
		||||
			Address = &DeviceDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Device_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_Configuration: 
 | 
			
		||||
			Address = (void*)&ConfigurationDescriptor;
 | 
			
		||||
			Address = &ConfigurationDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Configuration_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_String: 
 | 
			
		||||
			switch (DescriptorNumber)
 | 
			
		||||
			{
 | 
			
		||||
				case 0x00: 
 | 
			
		||||
					Address = (void*)&LanguageString;
 | 
			
		||||
					Address = &LanguageString;
 | 
			
		||||
					Size    = pgm_read_byte(&LanguageString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x01: 
 | 
			
		||||
					Address = (void*)&ManufacturerString;
 | 
			
		||||
					Address = &ManufacturerString;
 | 
			
		||||
					Size    = pgm_read_byte(&ManufacturerString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x02: 
 | 
			
		||||
					Address = (void*)&ProductString;
 | 
			
		||||
					Address = &ProductString;
 | 
			
		||||
					Size    = pgm_read_byte(&ProductString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_HID: 
 | 
			
		||||
			Address = (void*)&ConfigurationDescriptor.HID_KeyboardHID;
 | 
			
		||||
			Address = &ConfigurationDescriptor.HID_KeyboardHID;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_HID_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_Report: 
 | 
			
		||||
			Address = (void*)&KeyboardReport;
 | 
			
		||||
			Address = &KeyboardReport;
 | 
			
		||||
			Size    = sizeof(KeyboardReport);
 | 
			
		||||
			break;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -94,6 +94,7 @@
 | 
			
		|||
	/* Function Prototypes: */
 | 
			
		||||
		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
		                                    const uint8_t wIndex,
 | 
			
		||||
		                                    void** const DescriptorAddress) ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
		                                    const void** const DescriptorAddress)
 | 
			
		||||
		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -288,37 +288,37 @@ USB_Descriptor_String_t PROGMEM ProductString =
 | 
			
		|||
 */
 | 
			
		||||
uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
                                    const uint8_t wIndex,
 | 
			
		||||
                                    void** const DescriptorAddress)
 | 
			
		||||
                                    const void** const DescriptorAddress)
 | 
			
		||||
{
 | 
			
		||||
	const uint8_t  DescriptorType   = (wValue >> 8);
 | 
			
		||||
	const uint8_t  DescriptorNumber = (wValue & 0xFF);
 | 
			
		||||
 | 
			
		||||
	void*    Address = NULL;
 | 
			
		||||
	uint16_t Size    = NO_DESCRIPTOR;
 | 
			
		||||
	const void* Address = NULL;
 | 
			
		||||
	uint16_t    Size    = NO_DESCRIPTOR;
 | 
			
		||||
 | 
			
		||||
	switch (DescriptorType)
 | 
			
		||||
	{
 | 
			
		||||
		case DTYPE_Device: 
 | 
			
		||||
			Address = (void*)&DeviceDescriptor;
 | 
			
		||||
			Address = &DeviceDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Device_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_Configuration: 
 | 
			
		||||
			Address = (void*)&ConfigurationDescriptor;
 | 
			
		||||
			Address = &ConfigurationDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Configuration_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_String: 
 | 
			
		||||
			switch (DescriptorNumber)
 | 
			
		||||
			{
 | 
			
		||||
				case 0x00: 
 | 
			
		||||
					Address = (void*)&LanguageString;
 | 
			
		||||
					Address = &LanguageString;
 | 
			
		||||
					Size    = pgm_read_byte(&LanguageString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x01: 
 | 
			
		||||
					Address = (void*)&ManufacturerString;
 | 
			
		||||
					Address = &ManufacturerString;
 | 
			
		||||
					Size    = pgm_read_byte(&ManufacturerString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x02: 
 | 
			
		||||
					Address = (void*)&ProductString;
 | 
			
		||||
					Address = &ProductString;
 | 
			
		||||
					Size    = pgm_read_byte(&ProductString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			@ -327,24 +327,24 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		|||
		case DTYPE_HID: 
 | 
			
		||||
			if (!(wIndex))
 | 
			
		||||
			{
 | 
			
		||||
				Address = (void*)&ConfigurationDescriptor.HID1_KeyboardHID;
 | 
			
		||||
				Address = &ConfigurationDescriptor.HID1_KeyboardHID;
 | 
			
		||||
				Size    = sizeof(USB_Descriptor_HID_t);
 | 
			
		||||
			}
 | 
			
		||||
			else
 | 
			
		||||
			{
 | 
			
		||||
				Address = (void*)&ConfigurationDescriptor.HID2_MouseHID;
 | 
			
		||||
				Address = &ConfigurationDescriptor.HID2_MouseHID;
 | 
			
		||||
				Size    = sizeof(USB_Descriptor_HID_t);			
 | 
			
		||||
			}
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_Report: 
 | 
			
		||||
			if (!(wIndex))
 | 
			
		||||
			{
 | 
			
		||||
				Address = (void*)&KeyboardReport;
 | 
			
		||||
				Address = &KeyboardReport;
 | 
			
		||||
				Size    = sizeof(KeyboardReport);
 | 
			
		||||
			}
 | 
			
		||||
			else
 | 
			
		||||
			{			
 | 
			
		||||
				Address = (void*)&MouseReport;
 | 
			
		||||
				Address = &MouseReport;
 | 
			
		||||
				Size    = sizeof(MouseReport);
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -100,6 +100,7 @@
 | 
			
		|||
	/* Function Prototypes: */
 | 
			
		||||
		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
		                                    const uint8_t wIndex,
 | 
			
		||||
		                                    void** const DescriptorAddress) ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
		                                    const void** const DescriptorAddress)
 | 
			
		||||
		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -285,37 +285,37 @@ USB_Descriptor_String_t PROGMEM ProductString =
 | 
			
		|||
 */
 | 
			
		||||
uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
                                    const uint8_t wIndex,
 | 
			
		||||
                                    void** const DescriptorAddress)
 | 
			
		||||
                                    const void** const DescriptorAddress)
 | 
			
		||||
{
 | 
			
		||||
	const uint8_t  DescriptorType   = (wValue >> 8);
 | 
			
		||||
	const uint8_t  DescriptorNumber = (wValue & 0xFF);
 | 
			
		||||
 | 
			
		||||
	void*    Address = NULL;
 | 
			
		||||
	uint16_t Size    = NO_DESCRIPTOR;
 | 
			
		||||
	const void* Address = NULL;
 | 
			
		||||
	uint16_t    Size    = NO_DESCRIPTOR;
 | 
			
		||||
 | 
			
		||||
	switch (DescriptorType)
 | 
			
		||||
	{
 | 
			
		||||
		case DTYPE_Device: 
 | 
			
		||||
			Address = (void*)&DeviceDescriptor;
 | 
			
		||||
			Address = &DeviceDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Device_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_Configuration: 
 | 
			
		||||
			Address = (void*)&ConfigurationDescriptor;
 | 
			
		||||
			Address = &ConfigurationDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Configuration_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_String: 
 | 
			
		||||
			switch (DescriptorNumber)
 | 
			
		||||
			{
 | 
			
		||||
				case 0x00: 
 | 
			
		||||
					Address = (void*)&LanguageString;
 | 
			
		||||
					Address = &LanguageString;
 | 
			
		||||
					Size    = pgm_read_byte(&LanguageString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x01: 
 | 
			
		||||
					Address = (void*)&ManufacturerString;
 | 
			
		||||
					Address = &ManufacturerString;
 | 
			
		||||
					Size    = pgm_read_byte(&ManufacturerString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x02: 
 | 
			
		||||
					Address = (void*)&ProductString;
 | 
			
		||||
					Address = &ProductString;
 | 
			
		||||
					Size    = pgm_read_byte(&ProductString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -185,6 +185,7 @@
 | 
			
		|||
	/* Function Prototypes: */
 | 
			
		||||
		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
		                                    const uint8_t wIndex,
 | 
			
		||||
		                                    void** const DescriptorAddress) ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
		                                    const void** const DescriptorAddress)
 | 
			
		||||
		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -176,37 +176,37 @@ USB_Descriptor_String_t PROGMEM ProductString =
 | 
			
		|||
 */
 | 
			
		||||
uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
                                    const uint8_t wIndex,
 | 
			
		||||
                                    void** const DescriptorAddress)
 | 
			
		||||
                                    const void** const DescriptorAddress)
 | 
			
		||||
{
 | 
			
		||||
	const uint8_t  DescriptorType   = (wValue >> 8);
 | 
			
		||||
	const uint8_t  DescriptorNumber = (wValue & 0xFF);
 | 
			
		||||
 | 
			
		||||
	void*    Address = NULL;
 | 
			
		||||
	uint16_t Size    = NO_DESCRIPTOR;
 | 
			
		||||
	const void* Address = NULL;
 | 
			
		||||
	uint16_t    Size    = NO_DESCRIPTOR;
 | 
			
		||||
 | 
			
		||||
	switch (DescriptorType)
 | 
			
		||||
	{
 | 
			
		||||
		case DTYPE_Device: 
 | 
			
		||||
			Address = (void*)&DeviceDescriptor;
 | 
			
		||||
			Address = &DeviceDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Device_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_Configuration: 
 | 
			
		||||
			Address = (void*)&ConfigurationDescriptor;
 | 
			
		||||
			Address = &ConfigurationDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Configuration_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_String: 
 | 
			
		||||
			switch (DescriptorNumber)
 | 
			
		||||
			{
 | 
			
		||||
				case 0x00: 
 | 
			
		||||
					Address = (void*)&LanguageString;
 | 
			
		||||
					Address = &LanguageString;
 | 
			
		||||
					Size    = pgm_read_byte(&LanguageString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x01: 
 | 
			
		||||
					Address = (void*)&ManufacturerString;
 | 
			
		||||
					Address = &ManufacturerString;
 | 
			
		||||
					Size    = pgm_read_byte(&ManufacturerString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x02: 
 | 
			
		||||
					Address = (void*)&ProductString;
 | 
			
		||||
					Address = &ProductString;
 | 
			
		||||
					Size    = pgm_read_byte(&ProductString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -67,6 +67,7 @@
 | 
			
		|||
	/* Function Prototypes: */
 | 
			
		||||
		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
		                                    const uint8_t wIndex,
 | 
			
		||||
		                                    void** const DescriptorAddress) ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
		                                    const void** const DescriptorAddress)
 | 
			
		||||
		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -201,37 +201,37 @@ USB_Descriptor_String_t PROGMEM ProductString =
 | 
			
		|||
 */
 | 
			
		||||
uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
                                    const uint8_t wIndex,
 | 
			
		||||
                                    void** const DescriptorAddress)
 | 
			
		||||
                                    const void** const DescriptorAddress)
 | 
			
		||||
{
 | 
			
		||||
	const uint8_t  DescriptorType   = (wValue >> 8);
 | 
			
		||||
	const uint8_t  DescriptorNumber = (wValue & 0xFF);
 | 
			
		||||
 | 
			
		||||
	void*    Address = NULL;
 | 
			
		||||
	uint16_t Size    = NO_DESCRIPTOR;
 | 
			
		||||
	const void* Address = NULL;
 | 
			
		||||
	uint16_t    Size    = NO_DESCRIPTOR;
 | 
			
		||||
 | 
			
		||||
	switch (DescriptorType)
 | 
			
		||||
	{
 | 
			
		||||
		case DTYPE_Device:
 | 
			
		||||
			Address = (void*)&DeviceDescriptor;
 | 
			
		||||
			Address = &DeviceDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Device_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_Configuration:
 | 
			
		||||
			Address = (void*)&ConfigurationDescriptor;
 | 
			
		||||
			Address = &ConfigurationDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Configuration_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_String:
 | 
			
		||||
			switch (DescriptorNumber)
 | 
			
		||||
			{
 | 
			
		||||
				case 0x00:
 | 
			
		||||
					Address = (void*)&LanguageString;
 | 
			
		||||
					Address = &LanguageString;
 | 
			
		||||
					Size    = pgm_read_byte(&LanguageString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x01:
 | 
			
		||||
					Address = (void*)&ManufacturerString;
 | 
			
		||||
					Address = &ManufacturerString;
 | 
			
		||||
					Size    = pgm_read_byte(&ManufacturerString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x02:
 | 
			
		||||
					Address = (void*)&ProductString;
 | 
			
		||||
					Address = &ProductString;
 | 
			
		||||
					Size    = pgm_read_byte(&ProductString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -89,6 +89,7 @@
 | 
			
		|||
	/* Function Prototypes: */
 | 
			
		||||
		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
		                                    const uint8_t wIndex,
 | 
			
		||||
		                                    void** const DescriptorAddress) ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
		                                    const void** const DescriptorAddress)
 | 
			
		||||
		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -214,37 +214,37 @@ USB_Descriptor_String_t PROGMEM ProductString =
 | 
			
		|||
 */
 | 
			
		||||
uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
                                    const uint8_t wIndex,
 | 
			
		||||
                                    void** const DescriptorAddress)
 | 
			
		||||
                                    const void** const DescriptorAddress)
 | 
			
		||||
{
 | 
			
		||||
	const uint8_t  DescriptorType   = (wValue >> 8);
 | 
			
		||||
	const uint8_t  DescriptorNumber = (wValue & 0xFF);
 | 
			
		||||
 | 
			
		||||
	void*    Address = NULL;
 | 
			
		||||
	uint16_t Size    = NO_DESCRIPTOR;
 | 
			
		||||
	const void* Address = NULL;
 | 
			
		||||
	uint16_t    Size    = NO_DESCRIPTOR;
 | 
			
		||||
 | 
			
		||||
	switch (DescriptorType)
 | 
			
		||||
	{
 | 
			
		||||
		case DTYPE_Device:
 | 
			
		||||
			Address = (void*)&DeviceDescriptor;
 | 
			
		||||
			Address = &DeviceDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Device_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_Configuration: 
 | 
			
		||||
			Address = (void*)&ConfigurationDescriptor;
 | 
			
		||||
			Address = &ConfigurationDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Configuration_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_String:
 | 
			
		||||
			switch (DescriptorNumber)
 | 
			
		||||
			{
 | 
			
		||||
				case 0x00:
 | 
			
		||||
					Address = (void*)&LanguageString;
 | 
			
		||||
					Address = &LanguageString;
 | 
			
		||||
					Size    = pgm_read_byte(&LanguageString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x01:
 | 
			
		||||
					Address = (void*)&ManufacturerString;
 | 
			
		||||
					Address = &ManufacturerString;
 | 
			
		||||
					Size    = pgm_read_byte(&ManufacturerString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x02:
 | 
			
		||||
					Address = (void*)&ProductString;
 | 
			
		||||
					Address = &ProductString;
 | 
			
		||||
					Size    = pgm_read_byte(&ProductString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -93,6 +93,7 @@
 | 
			
		|||
	/* Function Prototypes: */
 | 
			
		||||
		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
		                                    const uint8_t wIndex,
 | 
			
		||||
		                                    void** const DescriptorAddress) ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
		                                    const void** const DescriptorAddress)
 | 
			
		||||
		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -226,37 +226,37 @@ USB_Descriptor_String_t PROGMEM ProductString =
 | 
			
		|||
 */
 | 
			
		||||
uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
                                    const uint8_t wIndex,
 | 
			
		||||
                                    void** const DescriptorAddress)
 | 
			
		||||
                                    const void** const DescriptorAddress)
 | 
			
		||||
{
 | 
			
		||||
	const uint8_t  DescriptorType   = (wValue >> 8);
 | 
			
		||||
	const uint8_t  DescriptorNumber = (wValue & 0xFF);
 | 
			
		||||
 | 
			
		||||
	void*          Address = NULL;
 | 
			
		||||
	uint16_t       Size    = NO_DESCRIPTOR;
 | 
			
		||||
	const void* Address = NULL;
 | 
			
		||||
	uint16_t    Size    = NO_DESCRIPTOR;
 | 
			
		||||
 | 
			
		||||
	switch (DescriptorType)
 | 
			
		||||
	{
 | 
			
		||||
		case DTYPE_Device:
 | 
			
		||||
			Address = (void*)&DeviceDescriptor;
 | 
			
		||||
			Address = &DeviceDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Device_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_Configuration: 
 | 
			
		||||
			Address = (void*)&ConfigurationDescriptor;
 | 
			
		||||
			Address = &ConfigurationDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Configuration_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_String: 
 | 
			
		||||
			switch (DescriptorNumber)
 | 
			
		||||
			{
 | 
			
		||||
				case 0x00: 
 | 
			
		||||
					Address = (void*)&LanguageString;
 | 
			
		||||
					Address = &LanguageString;
 | 
			
		||||
					Size    = pgm_read_byte(&LanguageString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x01: 
 | 
			
		||||
					Address = (void*)&ManufacturerString;
 | 
			
		||||
					Address = &ManufacturerString;
 | 
			
		||||
					Size    = pgm_read_byte(&ManufacturerString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x02: 
 | 
			
		||||
					Address = (void*)&ProductString;
 | 
			
		||||
					Address = &ProductString;
 | 
			
		||||
					Size    = pgm_read_byte(&ProductString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -93,6 +93,7 @@
 | 
			
		|||
	/* Function Prototypes: */
 | 
			
		||||
		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
		                                    const uint8_t wIndex,
 | 
			
		||||
		                                    void** const DescriptorAddress) ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
		                                    const void** const DescriptorAddress)
 | 
			
		||||
		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -201,48 +201,48 @@ USB_Descriptor_String_t PROGMEM ProductString =
 | 
			
		|||
 */
 | 
			
		||||
uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
                                    const uint8_t wIndex,
 | 
			
		||||
                                    void** const DescriptorAddress)
 | 
			
		||||
                                    const void** const DescriptorAddress)
 | 
			
		||||
{
 | 
			
		||||
	const uint8_t  DescriptorType   = (wValue >> 8);
 | 
			
		||||
	const uint8_t  DescriptorNumber = (wValue & 0xFF);
 | 
			
		||||
 | 
			
		||||
	void*    Address = NULL;
 | 
			
		||||
	uint16_t Size    = NO_DESCRIPTOR;
 | 
			
		||||
	const void* Address = NULL;
 | 
			
		||||
	uint16_t    Size    = NO_DESCRIPTOR;
 | 
			
		||||
 | 
			
		||||
	switch (DescriptorType)
 | 
			
		||||
	{
 | 
			
		||||
		case DTYPE_Device:
 | 
			
		||||
			Address = (void*)&DeviceDescriptor;
 | 
			
		||||
			Address = &DeviceDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Device_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_Configuration:
 | 
			
		||||
			Address = (void*)&ConfigurationDescriptor;
 | 
			
		||||
			Address = &ConfigurationDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Configuration_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_String:
 | 
			
		||||
			switch (DescriptorNumber)
 | 
			
		||||
			{
 | 
			
		||||
				case 0x00:
 | 
			
		||||
					Address = (void*)&LanguageString;
 | 
			
		||||
					Address = &LanguageString;
 | 
			
		||||
					Size    = pgm_read_byte(&LanguageString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x01:
 | 
			
		||||
					Address = (void*)&ManufacturerString;
 | 
			
		||||
					Address = &ManufacturerString;
 | 
			
		||||
					Size    = pgm_read_byte(&ManufacturerString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x02:
 | 
			
		||||
					Address = (void*)&ProductString;
 | 
			
		||||
					Address = &ProductString;
 | 
			
		||||
					Size    = pgm_read_byte(&ProductString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_HID: 
 | 
			
		||||
			Address = (void*)&ConfigurationDescriptor.HID_MouseHID;
 | 
			
		||||
			Address = &ConfigurationDescriptor.HID_MouseHID;
 | 
			
		||||
			Size    = sizeof(USB_HID_Descriptor_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_Report: 
 | 
			
		||||
			Address = (void*)&MouseReport;
 | 
			
		||||
			Address = &MouseReport;
 | 
			
		||||
			Size    = sizeof(MouseReport);
 | 
			
		||||
			break;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -65,6 +65,7 @@
 | 
			
		|||
	/* Function Prototypes: */
 | 
			
		||||
		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
		                                    const uint8_t wIndex,
 | 
			
		||||
		                                    void** const DescriptorAddress) ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
		                                    const void** const DescriptorAddress)
 | 
			
		||||
		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue