mirror of
				https://github.com/mfulz/qmk_firmware.git
				synced 2025-10-31 05:12:33 +01:00 
			
		
		
		
	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
					
				| @ -203,33 +203,33 @@ USB_Descriptor_String_t ProductString = | |||||||
|  */ |  */ | ||||||
| uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
|                                     const uint8_t wIndex, |                                     const uint8_t wIndex, | ||||||
|                                     void** const DescriptorAddress) |                                     const void** const DescriptorAddress) | ||||||
| { | { | ||||||
| 	const uint8_t  DescriptorType   = (wValue >> 8); | 	const uint8_t  DescriptorType   = (wValue >> 8); | ||||||
| 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | ||||||
| 
 | 
 | ||||||
| 	void*    Address = NULL; | 	const void* Address = NULL; | ||||||
| 	uint16_t Size    = NO_DESCRIPTOR; | 	uint16_t    Size    = NO_DESCRIPTOR; | ||||||
| 
 | 
 | ||||||
| 	switch (DescriptorType) | 	switch (DescriptorType) | ||||||
| 	{ | 	{ | ||||||
| 		case DTYPE_Device: | 		case DTYPE_Device: | ||||||
| 			Address = (void*)&DeviceDescriptor; | 			Address = &DeviceDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Device_t); | 			Size    = sizeof(USB_Descriptor_Device_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_Configuration: | 		case DTYPE_Configuration: | ||||||
| 			Address = (void*)&ConfigurationDescriptor; | 			Address = &ConfigurationDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Configuration_t); | 			Size    = sizeof(USB_Descriptor_Configuration_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_String: | 		case DTYPE_String: | ||||||
| 			if (!(DescriptorNumber)) | 			if (!(DescriptorNumber)) | ||||||
| 			{ | 			{ | ||||||
| 				Address = (void*)&LanguageString; | 				Address = &LanguageString; | ||||||
| 				Size    = LanguageString.Header.Size; | 				Size    = LanguageString.Header.Size; | ||||||
| 			} | 			} | ||||||
| 			else | 			else | ||||||
| 			{ | 			{ | ||||||
| 				Address = (void*)&ProductString; | 				Address = &ProductString; | ||||||
| 				Size    = ProductString.Header.Size; | 				Size    = ProductString.Header.Size; | ||||||
| 			} | 			} | ||||||
| 			 | 			 | ||||||
|  | |||||||
| @ -142,6 +142,7 @@ | |||||||
| 	/* Function Prototypes: */ | 	/* Function Prototypes: */ | ||||||
| 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
| 		                                    const uint8_t wIndex, | 		                                    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 | #endif | ||||||
|  | |||||||
| @ -145,13 +145,13 @@ USB_Descriptor_String_t ProductString = | |||||||
|  */ |  */ | ||||||
| uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
|                                     const uint8_t wIndex, |                                     const uint8_t wIndex, | ||||||
|                                     void** const DescriptorAddress) |                                     const void** const DescriptorAddress) | ||||||
| { | { | ||||||
| 	const uint8_t  DescriptorType   = (wValue >> 8); | 	const uint8_t  DescriptorType   = (wValue >> 8); | ||||||
| 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | ||||||
| 
 | 
 | ||||||
| 	void*    Address = NULL; | 	const void* Address = NULL; | ||||||
| 	uint16_t Size    = NO_DESCRIPTOR; | 	uint16_t    Size    = NO_DESCRIPTOR; | ||||||
| 
 | 
 | ||||||
| 	switch (DescriptorType) | 	switch (DescriptorType) | ||||||
| 	{ | 	{ | ||||||
|  | |||||||
| @ -168,6 +168,7 @@ | |||||||
| 	/* Function Prototypes: */ | 	/* Function Prototypes: */ | ||||||
| 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
| 		                                    const uint8_t wIndex, | 		                                    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 | #endif | ||||||
|  | |||||||
| @ -273,37 +273,37 @@ USB_Descriptor_String_t PROGMEM ProductString = | |||||||
|  */ |  */ | ||||||
| uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
|                                     const uint8_t wIndex, |                                     const uint8_t wIndex, | ||||||
|                                     void** const DescriptorAddress) |                                     const void** const DescriptorAddress) | ||||||
| { | { | ||||||
| 	const uint8_t  DescriptorType   = (wValue >> 8); | 	const uint8_t  DescriptorType   = (wValue >> 8); | ||||||
| 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | ||||||
| 
 | 
 | ||||||
| 	void*    Address = NULL; | 	const void* Address = NULL; | ||||||
| 	uint16_t Size    = NO_DESCRIPTOR; | 	uint16_t    Size    = NO_DESCRIPTOR; | ||||||
| 
 | 
 | ||||||
| 	switch (DescriptorType) | 	switch (DescriptorType) | ||||||
| 	{ | 	{ | ||||||
| 		case DTYPE_Device: | 		case DTYPE_Device: | ||||||
| 			Address = (void*)&DeviceDescriptor; | 			Address = &DeviceDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Device_t); | 			Size    = sizeof(USB_Descriptor_Device_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_Configuration:  | 		case DTYPE_Configuration:  | ||||||
| 			Address = (void*)&ConfigurationDescriptor; | 			Address = &ConfigurationDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Configuration_t); | 			Size    = sizeof(USB_Descriptor_Configuration_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_String:  | 		case DTYPE_String:  | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00:  | 				case 0x00:  | ||||||
| 					Address = (void*)&LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01:  | 				case 0x01:  | ||||||
| 					Address = (void*)&ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02:  | 				case 0x02:  | ||||||
| 					Address = (void*)&ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 			} | 			} | ||||||
|  | |||||||
| @ -78,6 +78,7 @@ | |||||||
| 	/* Function Prototypes: */ | 	/* Function Prototypes: */ | ||||||
| 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
| 		                                    const uint8_t wIndex, | 		                                    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 | #endif | ||||||
|  | |||||||
| @ -273,37 +273,37 @@ USB_Descriptor_String_t PROGMEM ProductString = | |||||||
|  */ |  */ | ||||||
| uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
|                                     const uint8_t wIndex, |                                     const uint8_t wIndex, | ||||||
|                                     void** const DescriptorAddress) |                                     const void** const DescriptorAddress) | ||||||
| { | { | ||||||
| 	const uint8_t  DescriptorType   = (wValue >> 8); | 	const uint8_t  DescriptorType   = (wValue >> 8); | ||||||
| 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | ||||||
| 
 | 
 | ||||||
| 	void*    Address = NULL; | 	const void* Address = NULL; | ||||||
| 	uint16_t Size    = NO_DESCRIPTOR; | 	uint16_t    Size    = NO_DESCRIPTOR; | ||||||
| 
 | 
 | ||||||
| 	switch (DescriptorType) | 	switch (DescriptorType) | ||||||
| 	{ | 	{ | ||||||
| 		case DTYPE_Device: | 		case DTYPE_Device: | ||||||
| 			Address = (void*)&DeviceDescriptor; | 			Address = &DeviceDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Device_t); | 			Size    = sizeof(USB_Descriptor_Device_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_Configuration: | 		case DTYPE_Configuration: | ||||||
| 			Address = (void*)&ConfigurationDescriptor; | 			Address = &ConfigurationDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Configuration_t); | 			Size    = sizeof(USB_Descriptor_Configuration_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_String:  | 		case DTYPE_String:  | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00: | 				case 0x00: | ||||||
| 					Address = (void*)&LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01:  | 				case 0x01:  | ||||||
| 					Address = (void*)&ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02:  | 				case 0x02:  | ||||||
| 					Address = (void*)&ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 			} | 			} | ||||||
|  | |||||||
| @ -78,6 +78,7 @@ | |||||||
| 	/* Function Prototypes: */ | 	/* Function Prototypes: */ | ||||||
| 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
| 		                                    const uint8_t wIndex, | 		                                    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 | #endif | ||||||
|  | |||||||
| @ -340,37 +340,37 @@ USB_Descriptor_String_t PROGMEM ProductString = | |||||||
|  */ |  */ | ||||||
| uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
|                                     const uint8_t wIndex, |                                     const uint8_t wIndex, | ||||||
|                                     void** const DescriptorAddress) |                                     const void** const DescriptorAddress) | ||||||
| { | { | ||||||
| 	const uint8_t  DescriptorType   = (wValue >> 8); | 	const uint8_t  DescriptorType   = (wValue >> 8); | ||||||
| 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | ||||||
| 
 | 
 | ||||||
| 	void*    Address = NULL; | 	const void* Address = NULL; | ||||||
| 	uint16_t Size    = NO_DESCRIPTOR; | 	uint16_t    Size    = NO_DESCRIPTOR; | ||||||
| 
 | 
 | ||||||
| 	switch (DescriptorType) | 	switch (DescriptorType) | ||||||
| 	{ | 	{ | ||||||
| 		case DTYPE_Device: | 		case DTYPE_Device: | ||||||
| 			Address = (void*)&DeviceDescriptor; | 			Address = &DeviceDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Device_t); | 			Size    = sizeof(USB_Descriptor_Device_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_Configuration:  | 		case DTYPE_Configuration:  | ||||||
| 			Address = (void*)&ConfigurationDescriptor; | 			Address = &ConfigurationDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Configuration_t); | 			Size    = sizeof(USB_Descriptor_Configuration_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_String:  | 		case DTYPE_String:  | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00:  | 				case 0x00:  | ||||||
| 					Address = (void*)&LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01:  | 				case 0x01:  | ||||||
| 					Address = (void*)&ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02:  | 				case 0x02:  | ||||||
| 					Address = (void*)&ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 			} | 			} | ||||||
|  | |||||||
| @ -98,6 +98,7 @@ | |||||||
| 	/* Function Prototypes: */ | 	/* Function Prototypes: */ | ||||||
| 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
| 		                                    const uint8_t wIndex, | 		                                    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 | #endif | ||||||
|  | |||||||
| @ -191,48 +191,48 @@ USB_Descriptor_String_t PROGMEM ProductString = | |||||||
|  */ |  */ | ||||||
| uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
|                                     const uint8_t wIndex, |                                     const uint8_t wIndex, | ||||||
|                                     void** const DescriptorAddress) |                                     const void** const DescriptorAddress) | ||||||
| { | { | ||||||
| 	const uint8_t  DescriptorType   = (wValue >> 8); | 	const uint8_t  DescriptorType   = (wValue >> 8); | ||||||
| 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | ||||||
| 
 | 
 | ||||||
| 	void*    Address = NULL; | 	const void* Address = NULL; | ||||||
| 	uint16_t Size    = NO_DESCRIPTOR; | 	uint16_t    Size    = NO_DESCRIPTOR; | ||||||
| 
 | 
 | ||||||
| 	switch (DescriptorType) | 	switch (DescriptorType) | ||||||
| 	{ | 	{ | ||||||
| 		case DTYPE_Device: | 		case DTYPE_Device: | ||||||
| 			Address = (void*)&DeviceDescriptor; | 			Address = &DeviceDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Device_t); | 			Size    = sizeof(USB_Descriptor_Device_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_Configuration:  | 		case DTYPE_Configuration:  | ||||||
| 			Address = (void*)&ConfigurationDescriptor; | 			Address = &ConfigurationDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Configuration_t); | 			Size    = sizeof(USB_Descriptor_Configuration_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_String:  | 		case DTYPE_String:  | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00:  | 				case 0x00:  | ||||||
| 					Address = (void*)&LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01:  | 				case 0x01:  | ||||||
| 					Address = (void*)&ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02:  | 				case 0x02:  | ||||||
| 					Address = (void*)&ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 			} | 			} | ||||||
| 			 | 			 | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_HID:  | 		case DTYPE_HID:  | ||||||
| 			Address = (void*)&ConfigurationDescriptor.HID_GenericHID; | 			Address = &ConfigurationDescriptor.HID_GenericHID; | ||||||
| 			Size    = sizeof(USB_HID_Descriptor_t); | 			Size    = sizeof(USB_HID_Descriptor_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_Report:  | 		case DTYPE_Report:  | ||||||
| 			Address = (void*)&GenericReport; | 			Address = &GenericReport; | ||||||
| 			Size    = sizeof(GenericReport); | 			Size    = sizeof(GenericReport); | ||||||
| 			break; | 			break; | ||||||
| 	} | 	} | ||||||
|  | |||||||
| @ -68,6 +68,7 @@ | |||||||
| 	/* Function Prototypes: */ | 	/* Function Prototypes: */ | ||||||
| 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
| 		                                    const uint8_t wIndex, | 		                                    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 | #endif | ||||||
|  | |||||||
| @ -201,48 +201,48 @@ USB_Descriptor_String_t PROGMEM ProductString = | |||||||
|  */ |  */ | ||||||
| uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
|                                     const uint8_t wIndex, |                                     const uint8_t wIndex, | ||||||
|                                     void** const DescriptorAddress) |                                     const void** const DescriptorAddress) | ||||||
| { | { | ||||||
| 	const uint8_t  DescriptorType   = (wValue >> 8); | 	const uint8_t  DescriptorType   = (wValue >> 8); | ||||||
| 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | ||||||
| 
 | 
 | ||||||
| 	void*    Address = NULL; | 	const void* Address = NULL; | ||||||
| 	uint16_t Size    = NO_DESCRIPTOR; | 	uint16_t    Size    = NO_DESCRIPTOR; | ||||||
| 
 | 
 | ||||||
| 	switch (DescriptorType) | 	switch (DescriptorType) | ||||||
| 	{ | 	{ | ||||||
| 		case DTYPE_Device: | 		case DTYPE_Device: | ||||||
| 			Address = (void*)&DeviceDescriptor; | 			Address = &DeviceDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Device_t); | 			Size    = sizeof(USB_Descriptor_Device_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_Configuration:  | 		case DTYPE_Configuration:  | ||||||
| 			Address = (void*)&ConfigurationDescriptor; | 			Address = &ConfigurationDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Configuration_t); | 			Size    = sizeof(USB_Descriptor_Configuration_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_String:  | 		case DTYPE_String:  | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00:  | 				case 0x00:  | ||||||
| 					Address = (void*)&LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01:  | 				case 0x01:  | ||||||
| 					Address = (void*)&ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02:  | 				case 0x02:  | ||||||
| 					Address = (void*)&ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 			} | 			} | ||||||
| 			 | 			 | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_HID:  | 		case DTYPE_HID:  | ||||||
| 			Address = (void*)&ConfigurationDescriptor.HID_JoystickHID; | 			Address = &ConfigurationDescriptor.HID_JoystickHID; | ||||||
| 			Size    = sizeof(USB_HID_Descriptor_t); | 			Size    = sizeof(USB_HID_Descriptor_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_Report:  | 		case DTYPE_Report:  | ||||||
| 			Address = (void*)&JoystickReport; | 			Address = &JoystickReport; | ||||||
| 			Size    = sizeof(JoystickReport); | 			Size    = sizeof(JoystickReport); | ||||||
| 			break; | 			break; | ||||||
| 	} | 	} | ||||||
|  | |||||||
| @ -65,7 +65,7 @@ | |||||||
| 	/* Function Prototypes: */ | 	/* Function Prototypes: */ | ||||||
| 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
| 		                                    const uint8_t wIndex, | 		                                    const uint8_t wIndex, | ||||||
| 		                                    void** const DescriptorAddress) | 		                                    const void** const DescriptorAddress) | ||||||
| 		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); | 		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); | ||||||
| 
 | 
 | ||||||
| #endif | #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 |  *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the | ||||||
|  *  USB host. |  *  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  DescriptorType   = (wValue >> 8); | ||||||
| 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | ||||||
| 
 | 
 | ||||||
| 	void*    Address = NULL; | 	const void* Address = NULL; | ||||||
| 	uint16_t Size    = NO_DESCRIPTOR; | 	uint16_t    Size    = NO_DESCRIPTOR; | ||||||
| 
 | 
 | ||||||
| 	switch (DescriptorType) | 	switch (DescriptorType) | ||||||
| 	{ | 	{ | ||||||
| 		case DTYPE_Device:  | 		case DTYPE_Device:  | ||||||
| 			Address = (void*)&DeviceDescriptor; | 			Address = &DeviceDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Device_t); | 			Size    = sizeof(USB_Descriptor_Device_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_Configuration:  | 		case DTYPE_Configuration:  | ||||||
| 			Address = (void*)&ConfigurationDescriptor; | 			Address = &ConfigurationDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Configuration_t); | 			Size    = sizeof(USB_Descriptor_Configuration_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_String:  | 		case DTYPE_String:  | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00:  | 				case 0x00:  | ||||||
| 					Address = (void*)&LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01:  | 				case 0x01:  | ||||||
| 					Address = (void*)&ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02:  | 				case 0x02:  | ||||||
| 					Address = (void*)&ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 			} | 			} | ||||||
| 			 | 			 | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_HID:  | 		case DTYPE_HID:  | ||||||
| 			Address = (void*)&ConfigurationDescriptor.HID_KeyboardHID; | 			Address = &ConfigurationDescriptor.HID_KeyboardHID; | ||||||
| 			Size    = sizeof(USB_HID_Descriptor_t); | 			Size    = sizeof(USB_HID_Descriptor_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_Report:  | 		case DTYPE_Report:  | ||||||
| 			Address = (void*)&KeyboardReport; | 			Address = &KeyboardReport; | ||||||
| 			Size    = sizeof(KeyboardReport); | 			Size    = sizeof(KeyboardReport); | ||||||
| 			break; | 			break; | ||||||
| 	} | 	} | ||||||
|  | |||||||
| @ -65,6 +65,7 @@ | |||||||
| 	/* Function Prototypes: */ | 	/* Function Prototypes: */ | ||||||
| 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
| 		                                    const uint8_t wIndex, | 		                                    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 | #endif | ||||||
|  | |||||||
| @ -277,37 +277,37 @@ USB_Descriptor_String_t PROGMEM ProductString = | |||||||
|  */ |  */ | ||||||
| uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
|                                     const uint8_t wIndex, |                                     const uint8_t wIndex, | ||||||
|                                     void** const DescriptorAddress) |                                     const void** const DescriptorAddress) | ||||||
| { | { | ||||||
| 	const uint8_t  DescriptorType   = (wValue >> 8); | 	const uint8_t  DescriptorType   = (wValue >> 8); | ||||||
| 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | ||||||
| 
 | 
 | ||||||
| 	void*    Address = NULL; | 	const void* Address = NULL; | ||||||
| 	uint16_t Size    = NO_DESCRIPTOR; | 	uint16_t    Size    = NO_DESCRIPTOR; | ||||||
| 
 | 
 | ||||||
| 	switch (DescriptorType) | 	switch (DescriptorType) | ||||||
| 	{ | 	{ | ||||||
| 		case DTYPE_Device:  | 		case DTYPE_Device:  | ||||||
| 			Address = (void*)&DeviceDescriptor; | 			Address = &DeviceDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Device_t); | 			Size    = sizeof(USB_Descriptor_Device_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_Configuration:  | 		case DTYPE_Configuration:  | ||||||
| 			Address = (void*)&ConfigurationDescriptor; | 			Address = &ConfigurationDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Configuration_t); | 			Size    = sizeof(USB_Descriptor_Configuration_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_String:  | 		case DTYPE_String:  | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00:  | 				case 0x00:  | ||||||
| 					Address = (void*)&LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01:  | 				case 0x01:  | ||||||
| 					Address = (void*)&ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02:  | 				case 0x02:  | ||||||
| 					Address = (void*)&ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 			} | 			} | ||||||
| @ -316,24 +316,24 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | |||||||
| 		case DTYPE_HID:  | 		case DTYPE_HID:  | ||||||
| 			if (!(wIndex)) | 			if (!(wIndex)) | ||||||
| 			{ | 			{ | ||||||
| 				Address = (void*)&ConfigurationDescriptor.HID1_KeyboardHID; | 				Address = &ConfigurationDescriptor.HID1_KeyboardHID; | ||||||
| 				Size    = sizeof(USB_HID_Descriptor_t); | 				Size    = sizeof(USB_HID_Descriptor_t); | ||||||
| 			} | 			} | ||||||
| 			else | 			else | ||||||
| 			{ | 			{ | ||||||
| 				Address = (void*)&ConfigurationDescriptor.HID2_MouseHID; | 				Address = &ConfigurationDescriptor.HID2_MouseHID; | ||||||
| 				Size    = sizeof(USB_HID_Descriptor_t);			 | 				Size    = sizeof(USB_HID_Descriptor_t);			 | ||||||
| 			} | 			} | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_Report:  | 		case DTYPE_Report:  | ||||||
| 			if (!(wIndex)) | 			if (!(wIndex)) | ||||||
| 			{ | 			{ | ||||||
| 				Address = (void*)&KeyboardReport; | 				Address = &KeyboardReport; | ||||||
| 				Size    = sizeof(KeyboardReport); | 				Size    = sizeof(KeyboardReport); | ||||||
| 			} | 			} | ||||||
| 			else | 			else | ||||||
| 			{			 | 			{			 | ||||||
| 				Address = (void*)&MouseReport; | 				Address = &MouseReport; | ||||||
| 				Size    = sizeof(MouseReport); | 				Size    = sizeof(MouseReport); | ||||||
| 			} | 			} | ||||||
| 			 | 			 | ||||||
|  | |||||||
| @ -71,6 +71,7 @@ | |||||||
| 	/* Function Prototypes: */ | 	/* Function Prototypes: */ | ||||||
| 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
| 		                                    const uint8_t wIndex, | 		                                    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 | #endif | ||||||
|  | |||||||
| @ -285,37 +285,37 @@ USB_Descriptor_String_t PROGMEM ProductString = | |||||||
|  */ |  */ | ||||||
| uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
|                                     const uint8_t wIndex, |                                     const uint8_t wIndex, | ||||||
|                                     void** const DescriptorAddress) |                                     const void** const DescriptorAddress) | ||||||
| { | { | ||||||
| 	const uint8_t  DescriptorType   = (wValue >> 8); | 	const uint8_t  DescriptorType   = (wValue >> 8); | ||||||
| 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | ||||||
| 
 | 
 | ||||||
| 	void*    Address = NULL; | 	const void* Address = NULL; | ||||||
| 	uint16_t Size    = NO_DESCRIPTOR; | 	uint16_t    Size    = NO_DESCRIPTOR; | ||||||
| 
 | 
 | ||||||
| 	switch (DescriptorType) | 	switch (DescriptorType) | ||||||
| 	{ | 	{ | ||||||
| 		case DTYPE_Device:  | 		case DTYPE_Device:  | ||||||
| 			Address = (void*)&DeviceDescriptor; | 			Address = &DeviceDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Device_t); | 			Size    = sizeof(USB_Descriptor_Device_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_Configuration:  | 		case DTYPE_Configuration:  | ||||||
| 			Address = (void*)&ConfigurationDescriptor; | 			Address = &ConfigurationDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Configuration_t); | 			Size    = sizeof(USB_Descriptor_Configuration_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_String:  | 		case DTYPE_String:  | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00:  | 				case 0x00:  | ||||||
| 					Address = (void*)&LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01:  | 				case 0x01:  | ||||||
| 					Address = (void*)&ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02:  | 				case 0x02:  | ||||||
| 					Address = (void*)&ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 			} | 			} | ||||||
|  | |||||||
| @ -77,6 +77,7 @@ | |||||||
| 	/* Function Prototypes: */ | 	/* Function Prototypes: */ | ||||||
| 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
| 		                                    const uint8_t wIndex, | 		                                    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 | #endif | ||||||
|  | |||||||
| @ -176,37 +176,37 @@ USB_Descriptor_String_t PROGMEM ProductString = | |||||||
|  */ |  */ | ||||||
| uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
|                                     const uint8_t wIndex, |                                     const uint8_t wIndex, | ||||||
|                                     void** const DescriptorAddress) |                                     const void** const DescriptorAddress) | ||||||
| { | { | ||||||
| 	const uint8_t  DescriptorType   = (wValue >> 8); | 	const uint8_t  DescriptorType   = (wValue >> 8); | ||||||
| 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | ||||||
| 
 | 
 | ||||||
| 	void*    Address = NULL; | 	const void* Address = NULL; | ||||||
| 	uint16_t Size    = NO_DESCRIPTOR; | 	uint16_t    Size    = NO_DESCRIPTOR; | ||||||
| 
 | 
 | ||||||
| 	switch (DescriptorType) | 	switch (DescriptorType) | ||||||
| 	{ | 	{ | ||||||
| 		case DTYPE_Device:  | 		case DTYPE_Device:  | ||||||
| 			Address = (void*)&DeviceDescriptor; | 			Address = &DeviceDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Device_t); | 			Size    = sizeof(USB_Descriptor_Device_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_Configuration:  | 		case DTYPE_Configuration:  | ||||||
| 			Address = (void*)&ConfigurationDescriptor; | 			Address = &ConfigurationDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Configuration_t); | 			Size    = sizeof(USB_Descriptor_Configuration_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_String:  | 		case DTYPE_String:  | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00:  | 				case 0x00:  | ||||||
| 					Address = (void*)&LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01:  | 				case 0x01:  | ||||||
| 					Address = (void*)&ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02:  | 				case 0x02:  | ||||||
| 					Address = (void*)&ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 			} | 			} | ||||||
|  | |||||||
| @ -68,6 +68,7 @@ | |||||||
| 	/* Function Prototypes: */ | 	/* Function Prototypes: */ | ||||||
| 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
| 		                                    const uint8_t wIndex, | 		                                    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 | #endif | ||||||
|  | |||||||
| @ -256,48 +256,48 @@ USB_Descriptor_String_t PROGMEM ProductString = | |||||||
|  */ |  */ | ||||||
| uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
|                                     const uint8_t wIndex, |                                     const uint8_t wIndex, | ||||||
|                                     void** const DescriptorAddress) |                                     const void** const DescriptorAddress) | ||||||
| { | { | ||||||
| 	const uint8_t  DescriptorType   = (wValue >> 8); | 	const uint8_t  DescriptorType   = (wValue >> 8); | ||||||
| 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | ||||||
| 
 | 
 | ||||||
| 	void*    Address = NULL; | 	const void* Address = NULL; | ||||||
| 	uint16_t Size    = NO_DESCRIPTOR; | 	uint16_t    Size    = NO_DESCRIPTOR; | ||||||
| 
 | 
 | ||||||
| 	switch (DescriptorType) | 	switch (DescriptorType) | ||||||
| 	{ | 	{ | ||||||
| 		case DTYPE_Device:  | 		case DTYPE_Device:  | ||||||
| 			Address = (void*)&DeviceDescriptor; | 			Address = &DeviceDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Device_t); | 			Size    = sizeof(USB_Descriptor_Device_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_Configuration:  | 		case DTYPE_Configuration:  | ||||||
| 			Address = (void*)&ConfigurationDescriptor; | 			Address = &ConfigurationDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Configuration_t); | 			Size    = sizeof(USB_Descriptor_Configuration_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_String:  | 		case DTYPE_String:  | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00:  | 				case 0x00:  | ||||||
| 					Address = (void*)&LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01:  | 				case 0x01:  | ||||||
| 					Address = (void*)&ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02:  | 				case 0x02:  | ||||||
| 					Address = (void*)&ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 			} | 			} | ||||||
| 			 | 			 | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_HID: | 		case DTYPE_HID: | ||||||
| 			Address = (void*)&ConfigurationDescriptor.HID_KeyboardHID; | 			Address = &ConfigurationDescriptor.HID_KeyboardHID; | ||||||
| 			Size    = sizeof(USB_HID_Descriptor_t); | 			Size    = sizeof(USB_HID_Descriptor_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_Report: | 		case DTYPE_Report: | ||||||
| 			Address = (void*)&KeyboardReport; | 			Address = &KeyboardReport; | ||||||
| 			Size    = sizeof(KeyboardReport); | 			Size    = sizeof(KeyboardReport); | ||||||
| 			break; | 			break; | ||||||
| 	} | 	} | ||||||
|  | |||||||
| @ -79,6 +79,7 @@ | |||||||
| 	/* Function Prototypes: */ | 	/* Function Prototypes: */ | ||||||
| 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
| 		                                    const uint8_t wIndex, | 		                                    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 | #endif | ||||||
|  | |||||||
| @ -201,48 +201,48 @@ USB_Descriptor_String_t PROGMEM ProductString = | |||||||
|  */ |  */ | ||||||
| uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
|                                     const uint8_t wIndex, |                                     const uint8_t wIndex, | ||||||
|                                     void** const DescriptorAddress) |                                     const void** const DescriptorAddress) | ||||||
| { | { | ||||||
| 	const uint8_t  DescriptorType   = (wValue >> 8); | 	const uint8_t  DescriptorType   = (wValue >> 8); | ||||||
| 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | ||||||
| 
 | 
 | ||||||
| 	void*    Address = NULL; | 	const void* Address = NULL; | ||||||
| 	uint16_t Size    = NO_DESCRIPTOR; | 	uint16_t    Size    = NO_DESCRIPTOR; | ||||||
| 
 | 
 | ||||||
| 	switch (DescriptorType) | 	switch (DescriptorType) | ||||||
| 	{ | 	{ | ||||||
| 		case DTYPE_Device: | 		case DTYPE_Device: | ||||||
| 			Address = (void*)&DeviceDescriptor; | 			Address = &DeviceDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Device_t); | 			Size    = sizeof(USB_Descriptor_Device_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_Configuration: | 		case DTYPE_Configuration: | ||||||
| 			Address = (void*)&ConfigurationDescriptor; | 			Address = &ConfigurationDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Configuration_t); | 			Size    = sizeof(USB_Descriptor_Configuration_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_String: | 		case DTYPE_String: | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00: | 				case 0x00: | ||||||
| 					Address = (void*)&LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01: | 				case 0x01: | ||||||
| 					Address = (void*)&ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02: | 				case 0x02: | ||||||
| 					Address = (void*)&ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 			} | 			} | ||||||
| 			 | 			 | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_HID:  | 		case DTYPE_HID:  | ||||||
| 			Address = (void*)&ConfigurationDescriptor.HID_MouseHID; | 			Address = &ConfigurationDescriptor.HID_MouseHID; | ||||||
| 			Size    = sizeof(USB_HID_Descriptor_t); | 			Size    = sizeof(USB_HID_Descriptor_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_Report:  | 		case DTYPE_Report:  | ||||||
| 			Address = (void*)&MouseReport; | 			Address = &MouseReport; | ||||||
| 			Size    = sizeof(MouseReport); | 			Size    = sizeof(MouseReport); | ||||||
| 			break; | 			break; | ||||||
| 	} | 	} | ||||||
|  | |||||||
| @ -65,6 +65,7 @@ | |||||||
| 	/* Function Prototypes: */ | 	/* Function Prototypes: */ | ||||||
| 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
| 		                                    const uint8_t wIndex, | 		                                    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 | #endif | ||||||
|  | |||||||
| @ -214,37 +214,37 @@ USB_Descriptor_String_t PROGMEM ProductString = | |||||||
|  */ |  */ | ||||||
| uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
|                                     const uint8_t wIndex, |                                     const uint8_t wIndex, | ||||||
|                                     void** const DescriptorAddress) |                                     const void** const DescriptorAddress) | ||||||
| { | { | ||||||
| 	const uint8_t  DescriptorType   = (wValue >> 8); | 	const uint8_t  DescriptorType   = (wValue >> 8); | ||||||
| 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | ||||||
| 
 | 
 | ||||||
| 	void*    Address = NULL; | 	const void* Address = NULL; | ||||||
| 	uint16_t Size    = NO_DESCRIPTOR; | 	uint16_t    Size    = NO_DESCRIPTOR; | ||||||
| 
 | 
 | ||||||
| 	switch (DescriptorType) | 	switch (DescriptorType) | ||||||
| 	{ | 	{ | ||||||
| 		case DTYPE_Device: | 		case DTYPE_Device: | ||||||
| 			Address = (void*)&DeviceDescriptor; | 			Address = &DeviceDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Device_t); | 			Size    = sizeof(USB_Descriptor_Device_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_Configuration:  | 		case DTYPE_Configuration:  | ||||||
| 			Address = (void*)&ConfigurationDescriptor; | 			Address = &ConfigurationDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Configuration_t); | 			Size    = sizeof(USB_Descriptor_Configuration_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_String: | 		case DTYPE_String: | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00: | 				case 0x00: | ||||||
| 					Address = (void*)&LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01: | 				case 0x01: | ||||||
| 					Address = (void*)&ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02: | 				case 0x02: | ||||||
| 					Address = (void*)&ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 			} | 			} | ||||||
|  | |||||||
| @ -79,6 +79,7 @@ | |||||||
| 	/* Function Prototypes: */ | 	/* Function Prototypes: */ | ||||||
| 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
| 		                                    const uint8_t wIndex, | 		                                    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 | #endif | ||||||
|  | |||||||
| @ -226,37 +226,37 @@ USB_Descriptor_String_t PROGMEM ProductString = | |||||||
|  */ |  */ | ||||||
| uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
|                                     const uint8_t wIndex, |                                     const uint8_t wIndex, | ||||||
|                                     void** const DescriptorAddress) |                                     const void** const DescriptorAddress) | ||||||
| { | { | ||||||
| 	const uint8_t  DescriptorType   = (wValue >> 8); | 	const uint8_t  DescriptorType   = (wValue >> 8); | ||||||
| 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | ||||||
| 
 | 
 | ||||||
| 	void*          Address = NULL; | 	const void* Address = NULL; | ||||||
| 	uint16_t       Size    = NO_DESCRIPTOR; | 	uint16_t    Size    = NO_DESCRIPTOR; | ||||||
| 
 | 
 | ||||||
| 	switch (DescriptorType) | 	switch (DescriptorType) | ||||||
| 	{ | 	{ | ||||||
| 		case DTYPE_Device: | 		case DTYPE_Device: | ||||||
| 			Address = (void*)&DeviceDescriptor; | 			Address = &DeviceDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Device_t); | 			Size    = sizeof(USB_Descriptor_Device_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_Configuration:  | 		case DTYPE_Configuration:  | ||||||
| 			Address = (void*)&ConfigurationDescriptor; | 			Address = &ConfigurationDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Configuration_t); | 			Size    = sizeof(USB_Descriptor_Configuration_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_String:  | 		case DTYPE_String:  | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00:  | 				case 0x00:  | ||||||
| 					Address = (void*)&LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01:  | 				case 0x01:  | ||||||
| 					Address = (void*)&ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02:  | 				case 0x02:  | ||||||
| 					Address = (void*)&ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 			} | 			} | ||||||
|  | |||||||
| @ -79,6 +79,7 @@ | |||||||
| 	/* Function Prototypes: */ | 	/* Function Prototypes: */ | ||||||
| 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
| 		                                    const uint8_t wIndex, | 		                                    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 | #endif | ||||||
|  | |||||||
| @ -313,48 +313,48 @@ USB_Descriptor_String_t PROGMEM ProductString = | |||||||
|  */ |  */ | ||||||
| uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
|                                     const uint8_t wIndex, |                                     const uint8_t wIndex, | ||||||
|                                     void** const DescriptorAddress) |                                     const void** const DescriptorAddress) | ||||||
| { | { | ||||||
| 	const uint8_t  DescriptorType   = (wValue >> 8); | 	const uint8_t  DescriptorType   = (wValue >> 8); | ||||||
| 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | ||||||
| 
 | 
 | ||||||
| 	void*          Address = NULL; | 	const void* Address = NULL; | ||||||
| 	uint16_t       Size    = NO_DESCRIPTOR; | 	uint16_t    Size    = NO_DESCRIPTOR; | ||||||
| 
 | 
 | ||||||
| 	switch (DescriptorType) | 	switch (DescriptorType) | ||||||
| 	{ | 	{ | ||||||
| 		case DTYPE_Device: | 		case DTYPE_Device: | ||||||
| 			Address = (void*)&DeviceDescriptor; | 			Address = &DeviceDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Device_t); | 			Size    = sizeof(USB_Descriptor_Device_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_Configuration:  | 		case DTYPE_Configuration:  | ||||||
| 			Address = (void*)&ConfigurationDescriptor; | 			Address = &ConfigurationDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Configuration_t); | 			Size    = sizeof(USB_Descriptor_Configuration_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_String:  | 		case DTYPE_String:  | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00:  | 				case 0x00:  | ||||||
| 					Address = (void*)&LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01:  | 				case 0x01:  | ||||||
| 					Address = (void*)&ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02:  | 				case 0x02:  | ||||||
| 					Address = (void*)&ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 			} | 			} | ||||||
| 			 | 			 | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_HID:  | 		case DTYPE_HID:  | ||||||
| 			Address = (void*)&ConfigurationDescriptor.HID_MouseHID; | 			Address = &ConfigurationDescriptor.HID_MouseHID; | ||||||
| 			Size    = sizeof(USB_HID_Descriptor_t); | 			Size    = sizeof(USB_HID_Descriptor_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_Report:  | 		case DTYPE_Report:  | ||||||
| 			Address = (void*)&MouseReport; | 			Address = &MouseReport; | ||||||
| 			Size    = sizeof(MouseReport); | 			Size    = sizeof(MouseReport); | ||||||
| 			break; | 			break; | ||||||
| 	} | 	} | ||||||
|  | |||||||
| @ -90,6 +90,7 @@ | |||||||
| 	/* Function Prototypes: */ | 	/* Function Prototypes: */ | ||||||
| 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
| 		                                    const uint8_t wIndex, | 		                                    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 | #endif | ||||||
|  | |||||||
| @ -156,48 +156,48 @@ USB_OSCompatibleIDDescriptor_t PROGMEM DevCompatIDs = | |||||||
| 
 | 
 | ||||||
| uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
|                                     const uint8_t wIndex, |                                     const uint8_t wIndex, | ||||||
|                                     void** const DescriptorAddress) |                                     const void** const DescriptorAddress) | ||||||
| { | { | ||||||
| 	const uint8_t  DescriptorType   = (wValue >> 8); | 	const uint8_t  DescriptorType   = (wValue >> 8); | ||||||
| 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | ||||||
| 
 | 
 | ||||||
| 	void*    Address = NULL; | 	const void* Address = NULL; | ||||||
| 	uint16_t Size    = NO_DESCRIPTOR; | 	uint16_t    Size    = NO_DESCRIPTOR; | ||||||
| 
 | 
 | ||||||
| 	switch (DescriptorType) | 	switch (DescriptorType) | ||||||
| 	{ | 	{ | ||||||
| 		case DTYPE_Device: | 		case DTYPE_Device: | ||||||
| 			Address = (void*)&DeviceDescriptor; | 			Address = &DeviceDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Device_t); | 			Size    = sizeof(USB_Descriptor_Device_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_Configuration: | 		case DTYPE_Configuration: | ||||||
| 			Address = (void*)&ConfigurationDescriptor; | 			Address = &ConfigurationDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Configuration_t); | 			Size    = sizeof(USB_Descriptor_Configuration_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_String: | 		case DTYPE_String: | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00: | 				case 0x00: | ||||||
| 					Address = (void*)&LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01: | 				case 0x01: | ||||||
| 					Address = (void*)&ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02: | 				case 0x02: | ||||||
| 					Address = (void*)&ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x03: | 				case 0x03: | ||||||
| 					Address = (void*)&SerialNumberString; | 					Address = &SerialNumberString; | ||||||
| 					Size    = pgm_read_byte(&SerialNumberString.Header.Size); | 					Size    = pgm_read_byte(&SerialNumberString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0xEE: | 				case 0xEE: | ||||||
| 					/* A Microsoft-proprietary extension. String address 0xEE is used by Windows for
 | 					/* 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 | 					   "OS Descriptors", which in this case allows us to indicate that our device is | ||||||
| 					   Sideshow compatible regardless of VID/PID values. */ | 					   Sideshow compatible regardless of VID/PID values. */ | ||||||
| 					Address = (void*)&OSDescriptorString; | 					Address = &OSDescriptorString; | ||||||
| 					Size    = pgm_read_byte(&OSDescriptorString.Header.Size); | 					Size    = pgm_read_byte(&OSDescriptorString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 			} | 			} | ||||||
| @ -211,7 +211,7 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | |||||||
| 
 | 
 | ||||||
| uint16_t USB_GetOSFeatureDescriptor(const uint16_t wValue, | uint16_t USB_GetOSFeatureDescriptor(const uint16_t wValue, | ||||||
|                                     const uint8_t wIndex, |                                     const uint8_t wIndex, | ||||||
|                                     void** const DescriptorAddress) |                                     const void** const DescriptorAddress) | ||||||
| { | { | ||||||
| 	void*    Address = NULL; | 	void*    Address = NULL; | ||||||
| 	uint16_t Size    = NO_DESCRIPTOR; | 	uint16_t Size    = NO_DESCRIPTOR; | ||||||
|  | |||||||
| @ -87,10 +87,12 @@ | |||||||
| 	/* Function Prototypes: */ | 	/* Function Prototypes: */ | ||||||
| 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
| 		                                    const uint8_t wIndex, | 		                                    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, | 		uint16_t USB_GetOSFeatureDescriptor(const uint16_t wValue, | ||||||
| 		                                    const uint8_t wIndex, | 		                                    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 | #endif | ||||||
|  | |||||||
| @ -187,37 +187,37 @@ USB_Descriptor_String_t PROGMEM ProductString = | |||||||
|  */ |  */ | ||||||
| uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
|                                     const uint8_t wIndex, |                                     const uint8_t wIndex, | ||||||
|                                     void** const DescriptorAddress) |                                     const void** const DescriptorAddress) | ||||||
| { | { | ||||||
| 	const uint8_t  DescriptorType   = (wValue >> 8); | 	const uint8_t  DescriptorType   = (wValue >> 8); | ||||||
| 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | ||||||
| 
 | 
 | ||||||
| 	void*          Address = NULL; | 	const void* Address = NULL; | ||||||
| 	uint16_t       Size    = NO_DESCRIPTOR; | 	uint16_t    Size    = NO_DESCRIPTOR; | ||||||
| 
 | 
 | ||||||
| 	switch (DescriptorType) | 	switch (DescriptorType) | ||||||
| 	{ | 	{ | ||||||
| 		case DTYPE_Device: | 		case DTYPE_Device: | ||||||
| 			Address = (void*)&DeviceDescriptor; | 			Address = &DeviceDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Device_t); | 			Size    = sizeof(USB_Descriptor_Device_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_Configuration:  | 		case DTYPE_Configuration:  | ||||||
| 			Address = (void*)&ConfigurationDescriptor; | 			Address = &ConfigurationDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Configuration_t); | 			Size    = sizeof(USB_Descriptor_Configuration_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_String:  | 		case DTYPE_String:  | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00:  | 				case 0x00:  | ||||||
| 					Address = (void*)&LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01:  | 				case 0x01:  | ||||||
| 					Address = (void*)&ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02:  | 				case 0x02:  | ||||||
| 					Address = (void*)&ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 			} | 			} | ||||||
|  | |||||||
| @ -75,6 +75,7 @@ | |||||||
| 	/* Function Prototypes: */ | 	/* Function Prototypes: */ | ||||||
| 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
| 		                                    const uint8_t wIndex, | 		                                    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 | #endif | ||||||
|  | |||||||
| @ -274,37 +274,37 @@ USB_Descriptor_String_t PROGMEM ProductString = | |||||||
|  */ |  */ | ||||||
| uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
|                                     const uint8_t wIndex, |                                     const uint8_t wIndex, | ||||||
|                                     void** const DescriptorAddress) |                                     const void** const DescriptorAddress) | ||||||
| { | { | ||||||
| 	const uint8_t  DescriptorType   = (wValue >> 8); | 	const uint8_t  DescriptorType   = (wValue >> 8); | ||||||
| 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | ||||||
| 
 | 
 | ||||||
| 	void*    Address = NULL; | 	const void* Address = NULL; | ||||||
| 	uint16_t Size    = NO_DESCRIPTOR; | 	uint16_t    Size    = NO_DESCRIPTOR; | ||||||
| 
 | 
 | ||||||
| 	switch (DescriptorType) | 	switch (DescriptorType) | ||||||
| 	{ | 	{ | ||||||
| 		case DTYPE_Device: | 		case DTYPE_Device: | ||||||
| 			Address = (void*)&DeviceDescriptor; | 			Address = &DeviceDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Device_t); | 			Size    = sizeof(USB_Descriptor_Device_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_Configuration:  | 		case DTYPE_Configuration:  | ||||||
| 			Address = (void*)&ConfigurationDescriptor; | 			Address = &ConfigurationDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Configuration_t); | 			Size    = sizeof(USB_Descriptor_Configuration_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_String:  | 		case DTYPE_String:  | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00:  | 				case 0x00:  | ||||||
| 					Address = (void*)&LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01:  | 				case 0x01:  | ||||||
| 					Address = (void*)&ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02:  | 				case 0x02:  | ||||||
| 					Address = (void*)&ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 			} | 			} | ||||||
|  | |||||||
| @ -314,6 +314,7 @@ | |||||||
| 	/* Function Prototypes: */ | 	/* Function Prototypes: */ | ||||||
| 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
| 		                                    const uint8_t wIndex, | 		                                    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 | #endif | ||||||
|  | |||||||
| @ -274,37 +274,37 @@ USB_Descriptor_String_t PROGMEM ProductString = | |||||||
|  */ |  */ | ||||||
| uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
|                                     const uint8_t wIndex, |                                     const uint8_t wIndex, | ||||||
|                                     void** const DescriptorAddress) |                                     const void** const DescriptorAddress) | ||||||
| { | { | ||||||
| 	const uint8_t  DescriptorType   = (wValue >> 8); | 	const uint8_t  DescriptorType   = (wValue >> 8); | ||||||
| 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | ||||||
| 
 | 
 | ||||||
| 	void*    Address = NULL; | 	const void* Address = NULL; | ||||||
| 	uint16_t Size    = NO_DESCRIPTOR; | 	uint16_t    Size    = NO_DESCRIPTOR; | ||||||
| 
 | 
 | ||||||
| 	switch (DescriptorType) | 	switch (DescriptorType) | ||||||
| 	{ | 	{ | ||||||
| 		case DTYPE_Device: | 		case DTYPE_Device: | ||||||
| 			Address = (void*)&DeviceDescriptor; | 			Address = &DeviceDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Device_t); | 			Size    = sizeof(USB_Descriptor_Device_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_Configuration: | 		case DTYPE_Configuration: | ||||||
| 			Address = (void*)&ConfigurationDescriptor; | 			Address = &ConfigurationDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Configuration_t); | 			Size    = sizeof(USB_Descriptor_Configuration_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_String:  | 		case DTYPE_String:  | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00: | 				case 0x00: | ||||||
| 					Address = (void*)&LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01:  | 				case 0x01:  | ||||||
| 					Address = (void*)&ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02:  | 				case 0x02:  | ||||||
| 					Address = (void*)&ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 			} | 			} | ||||||
|  | |||||||
| @ -314,6 +314,7 @@ | |||||||
| 	/* Function Prototypes: */ | 	/* Function Prototypes: */ | ||||||
| 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
| 		                                    const uint8_t wIndex, | 		                                    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 | #endif | ||||||
|  | |||||||
| @ -340,37 +340,37 @@ USB_Descriptor_String_t PROGMEM ProductString = | |||||||
|  */ |  */ | ||||||
| uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
|                                     const uint8_t wIndex, |                                     const uint8_t wIndex, | ||||||
|                                     void** const DescriptorAddress) |                                     const void** const DescriptorAddress) | ||||||
| { | { | ||||||
| 	const uint8_t  DescriptorType   = (wValue >> 8); | 	const uint8_t  DescriptorType   = (wValue >> 8); | ||||||
| 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | ||||||
| 
 | 
 | ||||||
| 	void*    Address = NULL; | 	const void* Address = NULL; | ||||||
| 	uint16_t Size    = NO_DESCRIPTOR; | 	uint16_t    Size    = NO_DESCRIPTOR; | ||||||
| 
 | 	 | ||||||
| 	switch (DescriptorType) | 	switch (DescriptorType) | ||||||
| 	{ | 	{ | ||||||
| 		case DTYPE_Device: | 		case DTYPE_Device: | ||||||
| 			Address = (void*)&DeviceDescriptor; | 			Address = &DeviceDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Device_t); | 			Size    = sizeof(USB_Descriptor_Device_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_Configuration:  | 		case DTYPE_Configuration:  | ||||||
| 			Address = (void*)&ConfigurationDescriptor; | 			Address = &ConfigurationDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Configuration_t); | 			Size    = sizeof(USB_Descriptor_Configuration_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_String:  | 		case DTYPE_String:  | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00:  | 				case 0x00:  | ||||||
| 					Address = (void*)&LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01:  | 				case 0x01:  | ||||||
| 					Address = (void*)&ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02:  | 				case 0x02:  | ||||||
| 					Address = (void*)&ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 			} | 			} | ||||||
|  | |||||||
| @ -112,6 +112,7 @@ | |||||||
| 	/* Function Prototypes: */ | 	/* Function Prototypes: */ | ||||||
| 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
| 		                                    const uint8_t wIndex, | 		                                    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 | #endif | ||||||
|  | |||||||
| @ -201,48 +201,48 @@ USB_Descriptor_String_t PROGMEM ProductString = | |||||||
|  */ |  */ | ||||||
| uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
|                                     const uint8_t wIndex, |                                     const uint8_t wIndex, | ||||||
|                                     void** const DescriptorAddress) |                                     const void** const DescriptorAddress) | ||||||
| { | { | ||||||
| 	const uint8_t  DescriptorType   = (wValue >> 8); | 	const uint8_t  DescriptorType   = (wValue >> 8); | ||||||
| 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | ||||||
| 
 | 
 | ||||||
| 	void*    Address = NULL; | 	const void* Address = NULL; | ||||||
| 	uint16_t Size    = NO_DESCRIPTOR; | 	uint16_t    Size    = NO_DESCRIPTOR; | ||||||
| 
 | 
 | ||||||
| 	switch (DescriptorType) | 	switch (DescriptorType) | ||||||
| 	{ | 	{ | ||||||
| 		case DTYPE_Device: | 		case DTYPE_Device: | ||||||
| 			Address = (void*)&DeviceDescriptor; | 			Address = &DeviceDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Device_t); | 			Size    = sizeof(USB_Descriptor_Device_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_Configuration:  | 		case DTYPE_Configuration:  | ||||||
| 			Address = (void*)&ConfigurationDescriptor; | 			Address = &ConfigurationDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Configuration_t); | 			Size    = sizeof(USB_Descriptor_Configuration_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_String:  | 		case DTYPE_String:  | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00:  | 				case 0x00:  | ||||||
| 					Address = (void*)&LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01:  | 				case 0x01:  | ||||||
| 					Address = (void*)&ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02:  | 				case 0x02:  | ||||||
| 					Address = (void*)&ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 			} | 			} | ||||||
| 			 | 			 | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_HID:  | 		case DTYPE_HID:  | ||||||
| 			Address = (void*)&ConfigurationDescriptor.HID_GenericHID; | 			Address = &ConfigurationDescriptor.HID_GenericHID; | ||||||
| 			Size    = sizeof(USB_Descriptor_HID_t); | 			Size    = sizeof(USB_Descriptor_HID_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_Report:  | 		case DTYPE_Report:  | ||||||
| 			Address = (void*)&GenericReport; | 			Address = &GenericReport; | ||||||
| 			Size    = sizeof(GenericReport); | 			Size    = sizeof(GenericReport); | ||||||
| 			break; | 			break; | ||||||
| 	} | 	} | ||||||
|  | |||||||
| @ -96,6 +96,7 @@ | |||||||
| 	/* Function Prototypes: */ | 	/* Function Prototypes: */ | ||||||
| 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
| 		                                    const uint8_t wIndex, | 		                                    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 | #endif | ||||||
|  | |||||||
| @ -201,48 +201,48 @@ USB_Descriptor_String_t PROGMEM ProductString = | |||||||
|  */ |  */ | ||||||
| uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
|                                     const uint8_t wIndex, |                                     const uint8_t wIndex, | ||||||
|                                     void** const DescriptorAddress) |                                     const void** const DescriptorAddress) | ||||||
| { | { | ||||||
| 	const uint8_t  DescriptorType   = (wValue >> 8); | 	const uint8_t  DescriptorType   = (wValue >> 8); | ||||||
| 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | ||||||
| 
 | 
 | ||||||
| 	void*    Address = NULL; | 	const void* Address = NULL; | ||||||
| 	uint16_t Size    = NO_DESCRIPTOR; | 	uint16_t    Size    = NO_DESCRIPTOR; | ||||||
| 
 | 
 | ||||||
| 	switch (DescriptorType) | 	switch (DescriptorType) | ||||||
| 	{ | 	{ | ||||||
| 		case DTYPE_Device: | 		case DTYPE_Device: | ||||||
| 			Address = (void*)&DeviceDescriptor; | 			Address = &DeviceDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Device_t); | 			Size    = sizeof(USB_Descriptor_Device_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_Configuration:  | 		case DTYPE_Configuration:  | ||||||
| 			Address = (void*)&ConfigurationDescriptor; | 			Address = &ConfigurationDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Configuration_t); | 			Size    = sizeof(USB_Descriptor_Configuration_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_String:  | 		case DTYPE_String:  | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00:  | 				case 0x00:  | ||||||
| 					Address = (void*)&LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01:  | 				case 0x01:  | ||||||
| 					Address = (void*)&ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02:  | 				case 0x02:  | ||||||
| 					Address = (void*)&ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 			} | 			} | ||||||
| 			 | 			 | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_HID:  | 		case DTYPE_HID:  | ||||||
| 			Address = (void*)&ConfigurationDescriptor.HID_JoystickHID; | 			Address = &ConfigurationDescriptor.HID_JoystickHID; | ||||||
| 			Size    = sizeof(USB_Descriptor_HID_t); | 			Size    = sizeof(USB_Descriptor_HID_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_Report:  | 		case DTYPE_Report:  | ||||||
| 			Address = (void*)&JoystickReport; | 			Address = &JoystickReport; | ||||||
| 			Size    = sizeof(JoystickReport); | 			Size    = sizeof(JoystickReport); | ||||||
| 			break; | 			break; | ||||||
| 	} | 	} | ||||||
|  | |||||||
| @ -89,6 +89,7 @@ | |||||||
| 	/* Function Prototypes: */ | 	/* Function Prototypes: */ | ||||||
| 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
| 		                                    const uint8_t wIndex, | 		                                    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 | #endif | ||||||
|  | |||||||
| @ -218,48 +218,48 @@ USB_Descriptor_String_t PROGMEM ProductString = | |||||||
|  */ |  */ | ||||||
| uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
|                                     const uint8_t wIndex, |                                     const uint8_t wIndex, | ||||||
|                                     void** const DescriptorAddress) |                                     const void** const DescriptorAddress) | ||||||
| { | { | ||||||
| 	const uint8_t  DescriptorType   = (wValue >> 8); | 	const uint8_t  DescriptorType   = (wValue >> 8); | ||||||
| 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | ||||||
| 
 | 
 | ||||||
| 	void*    Address = NULL; | 	const void* Address = NULL; | ||||||
| 	uint16_t Size    = NO_DESCRIPTOR; | 	uint16_t    Size    = NO_DESCRIPTOR; | ||||||
| 
 | 
 | ||||||
| 	switch (DescriptorType) | 	switch (DescriptorType) | ||||||
| 	{ | 	{ | ||||||
| 		case DTYPE_Device:  | 		case DTYPE_Device:  | ||||||
| 			Address = (void*)&DeviceDescriptor; | 			Address = &DeviceDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Device_t); | 			Size    = sizeof(USB_Descriptor_Device_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_Configuration:  | 		case DTYPE_Configuration:  | ||||||
| 			Address = (void*)&ConfigurationDescriptor; | 			Address = &ConfigurationDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Configuration_t); | 			Size    = sizeof(USB_Descriptor_Configuration_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_String:  | 		case DTYPE_String:  | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00:  | 				case 0x00:  | ||||||
| 					Address = (void*)&LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01:  | 				case 0x01:  | ||||||
| 					Address = (void*)&ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02:  | 				case 0x02:  | ||||||
| 					Address = (void*)&ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 			} | 			} | ||||||
| 			 | 			 | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_HID:  | 		case DTYPE_HID:  | ||||||
| 			Address = (void*)&ConfigurationDescriptor.HID_KeyboardHID; | 			Address = &ConfigurationDescriptor.HID_KeyboardHID; | ||||||
| 			Size    = sizeof(USB_Descriptor_HID_t); | 			Size    = sizeof(USB_Descriptor_HID_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_Report:  | 		case DTYPE_Report:  | ||||||
| 			Address = (void*)&KeyboardReport; | 			Address = &KeyboardReport; | ||||||
| 			Size    = sizeof(KeyboardReport); | 			Size    = sizeof(KeyboardReport); | ||||||
| 			break; | 			break; | ||||||
| 	} | 	} | ||||||
|  | |||||||
| @ -94,6 +94,7 @@ | |||||||
| 	/* Function Prototypes: */ | 	/* Function Prototypes: */ | ||||||
| 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
| 		                                    const uint8_t wIndex, | 		                                    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 | #endif | ||||||
|  | |||||||
| @ -288,37 +288,37 @@ USB_Descriptor_String_t PROGMEM ProductString = | |||||||
|  */ |  */ | ||||||
| uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
|                                     const uint8_t wIndex, |                                     const uint8_t wIndex, | ||||||
|                                     void** const DescriptorAddress) |                                     const void** const DescriptorAddress) | ||||||
| { | { | ||||||
| 	const uint8_t  DescriptorType   = (wValue >> 8); | 	const uint8_t  DescriptorType   = (wValue >> 8); | ||||||
| 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | ||||||
| 
 | 
 | ||||||
| 	void*    Address = NULL; | 	const void* Address = NULL; | ||||||
| 	uint16_t Size    = NO_DESCRIPTOR; | 	uint16_t    Size    = NO_DESCRIPTOR; | ||||||
| 
 | 
 | ||||||
| 	switch (DescriptorType) | 	switch (DescriptorType) | ||||||
| 	{ | 	{ | ||||||
| 		case DTYPE_Device:  | 		case DTYPE_Device:  | ||||||
| 			Address = (void*)&DeviceDescriptor; | 			Address = &DeviceDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Device_t); | 			Size    = sizeof(USB_Descriptor_Device_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_Configuration:  | 		case DTYPE_Configuration:  | ||||||
| 			Address = (void*)&ConfigurationDescriptor; | 			Address = &ConfigurationDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Configuration_t); | 			Size    = sizeof(USB_Descriptor_Configuration_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_String:  | 		case DTYPE_String:  | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00:  | 				case 0x00:  | ||||||
| 					Address = (void*)&LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01:  | 				case 0x01:  | ||||||
| 					Address = (void*)&ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02:  | 				case 0x02:  | ||||||
| 					Address = (void*)&ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 			} | 			} | ||||||
| @ -327,24 +327,24 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | |||||||
| 		case DTYPE_HID:  | 		case DTYPE_HID:  | ||||||
| 			if (!(wIndex)) | 			if (!(wIndex)) | ||||||
| 			{ | 			{ | ||||||
| 				Address = (void*)&ConfigurationDescriptor.HID1_KeyboardHID; | 				Address = &ConfigurationDescriptor.HID1_KeyboardHID; | ||||||
| 				Size    = sizeof(USB_Descriptor_HID_t); | 				Size    = sizeof(USB_Descriptor_HID_t); | ||||||
| 			} | 			} | ||||||
| 			else | 			else | ||||||
| 			{ | 			{ | ||||||
| 				Address = (void*)&ConfigurationDescriptor.HID2_MouseHID; | 				Address = &ConfigurationDescriptor.HID2_MouseHID; | ||||||
| 				Size    = sizeof(USB_Descriptor_HID_t);			 | 				Size    = sizeof(USB_Descriptor_HID_t);			 | ||||||
| 			} | 			} | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_Report:  | 		case DTYPE_Report:  | ||||||
| 			if (!(wIndex)) | 			if (!(wIndex)) | ||||||
| 			{ | 			{ | ||||||
| 				Address = (void*)&KeyboardReport; | 				Address = &KeyboardReport; | ||||||
| 				Size    = sizeof(KeyboardReport); | 				Size    = sizeof(KeyboardReport); | ||||||
| 			} | 			} | ||||||
| 			else | 			else | ||||||
| 			{			 | 			{			 | ||||||
| 				Address = (void*)&MouseReport; | 				Address = &MouseReport; | ||||||
| 				Size    = sizeof(MouseReport); | 				Size    = sizeof(MouseReport); | ||||||
| 			} | 			} | ||||||
| 			 | 			 | ||||||
|  | |||||||
| @ -100,6 +100,7 @@ | |||||||
| 	/* Function Prototypes: */ | 	/* Function Prototypes: */ | ||||||
| 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
| 		                                    const uint8_t wIndex, | 		                                    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 | #endif | ||||||
|  | |||||||
| @ -285,37 +285,37 @@ USB_Descriptor_String_t PROGMEM ProductString = | |||||||
|  */ |  */ | ||||||
| uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
|                                     const uint8_t wIndex, |                                     const uint8_t wIndex, | ||||||
|                                     void** const DescriptorAddress) |                                     const void** const DescriptorAddress) | ||||||
| { | { | ||||||
| 	const uint8_t  DescriptorType   = (wValue >> 8); | 	const uint8_t  DescriptorType   = (wValue >> 8); | ||||||
| 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | ||||||
| 
 | 
 | ||||||
| 	void*    Address = NULL; | 	const void* Address = NULL; | ||||||
| 	uint16_t Size    = NO_DESCRIPTOR; | 	uint16_t    Size    = NO_DESCRIPTOR; | ||||||
| 
 | 
 | ||||||
| 	switch (DescriptorType) | 	switch (DescriptorType) | ||||||
| 	{ | 	{ | ||||||
| 		case DTYPE_Device:  | 		case DTYPE_Device:  | ||||||
| 			Address = (void*)&DeviceDescriptor; | 			Address = &DeviceDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Device_t); | 			Size    = sizeof(USB_Descriptor_Device_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_Configuration:  | 		case DTYPE_Configuration:  | ||||||
| 			Address = (void*)&ConfigurationDescriptor; | 			Address = &ConfigurationDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Configuration_t); | 			Size    = sizeof(USB_Descriptor_Configuration_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_String:  | 		case DTYPE_String:  | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00:  | 				case 0x00:  | ||||||
| 					Address = (void*)&LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01:  | 				case 0x01:  | ||||||
| 					Address = (void*)&ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02:  | 				case 0x02:  | ||||||
| 					Address = (void*)&ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 			} | 			} | ||||||
|  | |||||||
| @ -185,6 +185,7 @@ | |||||||
| 	/* Function Prototypes: */ | 	/* Function Prototypes: */ | ||||||
| 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
| 		                                    const uint8_t wIndex, | 		                                    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 | #endif | ||||||
|  | |||||||
| @ -176,37 +176,37 @@ USB_Descriptor_String_t PROGMEM ProductString = | |||||||
|  */ |  */ | ||||||
| uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
|                                     const uint8_t wIndex, |                                     const uint8_t wIndex, | ||||||
|                                     void** const DescriptorAddress) |                                     const void** const DescriptorAddress) | ||||||
| { | { | ||||||
| 	const uint8_t  DescriptorType   = (wValue >> 8); | 	const uint8_t  DescriptorType   = (wValue >> 8); | ||||||
| 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | ||||||
| 
 | 
 | ||||||
| 	void*    Address = NULL; | 	const void* Address = NULL; | ||||||
| 	uint16_t Size    = NO_DESCRIPTOR; | 	uint16_t    Size    = NO_DESCRIPTOR; | ||||||
| 
 | 
 | ||||||
| 	switch (DescriptorType) | 	switch (DescriptorType) | ||||||
| 	{ | 	{ | ||||||
| 		case DTYPE_Device:  | 		case DTYPE_Device:  | ||||||
| 			Address = (void*)&DeviceDescriptor; | 			Address = &DeviceDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Device_t); | 			Size    = sizeof(USB_Descriptor_Device_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_Configuration:  | 		case DTYPE_Configuration:  | ||||||
| 			Address = (void*)&ConfigurationDescriptor; | 			Address = &ConfigurationDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Configuration_t); | 			Size    = sizeof(USB_Descriptor_Configuration_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_String:  | 		case DTYPE_String:  | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00:  | 				case 0x00:  | ||||||
| 					Address = (void*)&LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01:  | 				case 0x01:  | ||||||
| 					Address = (void*)&ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02:  | 				case 0x02:  | ||||||
| 					Address = (void*)&ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 			} | 			} | ||||||
|  | |||||||
| @ -67,6 +67,7 @@ | |||||||
| 	/* Function Prototypes: */ | 	/* Function Prototypes: */ | ||||||
| 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
| 		                                    const uint8_t wIndex, | 		                                    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 | #endif | ||||||
|  | |||||||
| @ -201,37 +201,37 @@ USB_Descriptor_String_t PROGMEM ProductString = | |||||||
|  */ |  */ | ||||||
| uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
|                                     const uint8_t wIndex, |                                     const uint8_t wIndex, | ||||||
|                                     void** const DescriptorAddress) |                                     const void** const DescriptorAddress) | ||||||
| { | { | ||||||
| 	const uint8_t  DescriptorType   = (wValue >> 8); | 	const uint8_t  DescriptorType   = (wValue >> 8); | ||||||
| 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | ||||||
| 
 | 
 | ||||||
| 	void*    Address = NULL; | 	const void* Address = NULL; | ||||||
| 	uint16_t Size    = NO_DESCRIPTOR; | 	uint16_t    Size    = NO_DESCRIPTOR; | ||||||
| 
 | 
 | ||||||
| 	switch (DescriptorType) | 	switch (DescriptorType) | ||||||
| 	{ | 	{ | ||||||
| 		case DTYPE_Device: | 		case DTYPE_Device: | ||||||
| 			Address = (void*)&DeviceDescriptor; | 			Address = &DeviceDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Device_t); | 			Size    = sizeof(USB_Descriptor_Device_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_Configuration: | 		case DTYPE_Configuration: | ||||||
| 			Address = (void*)&ConfigurationDescriptor; | 			Address = &ConfigurationDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Configuration_t); | 			Size    = sizeof(USB_Descriptor_Configuration_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_String: | 		case DTYPE_String: | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00: | 				case 0x00: | ||||||
| 					Address = (void*)&LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01: | 				case 0x01: | ||||||
| 					Address = (void*)&ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02: | 				case 0x02: | ||||||
| 					Address = (void*)&ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 			} | 			} | ||||||
|  | |||||||
| @ -89,6 +89,7 @@ | |||||||
| 	/* Function Prototypes: */ | 	/* Function Prototypes: */ | ||||||
| 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
| 		                                    const uint8_t wIndex, | 		                                    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 | #endif | ||||||
|  | |||||||
| @ -214,37 +214,37 @@ USB_Descriptor_String_t PROGMEM ProductString = | |||||||
|  */ |  */ | ||||||
| uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
|                                     const uint8_t wIndex, |                                     const uint8_t wIndex, | ||||||
|                                     void** const DescriptorAddress) |                                     const void** const DescriptorAddress) | ||||||
| { | { | ||||||
| 	const uint8_t  DescriptorType   = (wValue >> 8); | 	const uint8_t  DescriptorType   = (wValue >> 8); | ||||||
| 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | ||||||
| 
 | 
 | ||||||
| 	void*    Address = NULL; | 	const void* Address = NULL; | ||||||
| 	uint16_t Size    = NO_DESCRIPTOR; | 	uint16_t    Size    = NO_DESCRIPTOR; | ||||||
| 
 | 
 | ||||||
| 	switch (DescriptorType) | 	switch (DescriptorType) | ||||||
| 	{ | 	{ | ||||||
| 		case DTYPE_Device: | 		case DTYPE_Device: | ||||||
| 			Address = (void*)&DeviceDescriptor; | 			Address = &DeviceDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Device_t); | 			Size    = sizeof(USB_Descriptor_Device_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_Configuration:  | 		case DTYPE_Configuration:  | ||||||
| 			Address = (void*)&ConfigurationDescriptor; | 			Address = &ConfigurationDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Configuration_t); | 			Size    = sizeof(USB_Descriptor_Configuration_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_String: | 		case DTYPE_String: | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00: | 				case 0x00: | ||||||
| 					Address = (void*)&LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01: | 				case 0x01: | ||||||
| 					Address = (void*)&ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02: | 				case 0x02: | ||||||
| 					Address = (void*)&ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 			} | 			} | ||||||
|  | |||||||
| @ -93,6 +93,7 @@ | |||||||
| 	/* Function Prototypes: */ | 	/* Function Prototypes: */ | ||||||
| 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
| 		                                    const uint8_t wIndex, | 		                                    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 | #endif | ||||||
|  | |||||||
| @ -226,37 +226,37 @@ USB_Descriptor_String_t PROGMEM ProductString = | |||||||
|  */ |  */ | ||||||
| uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
|                                     const uint8_t wIndex, |                                     const uint8_t wIndex, | ||||||
|                                     void** const DescriptorAddress) |                                     const void** const DescriptorAddress) | ||||||
| { | { | ||||||
| 	const uint8_t  DescriptorType   = (wValue >> 8); | 	const uint8_t  DescriptorType   = (wValue >> 8); | ||||||
| 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | ||||||
| 
 | 
 | ||||||
| 	void*          Address = NULL; | 	const void* Address = NULL; | ||||||
| 	uint16_t       Size    = NO_DESCRIPTOR; | 	uint16_t    Size    = NO_DESCRIPTOR; | ||||||
| 
 | 
 | ||||||
| 	switch (DescriptorType) | 	switch (DescriptorType) | ||||||
| 	{ | 	{ | ||||||
| 		case DTYPE_Device: | 		case DTYPE_Device: | ||||||
| 			Address = (void*)&DeviceDescriptor; | 			Address = &DeviceDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Device_t); | 			Size    = sizeof(USB_Descriptor_Device_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_Configuration:  | 		case DTYPE_Configuration:  | ||||||
| 			Address = (void*)&ConfigurationDescriptor; | 			Address = &ConfigurationDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Configuration_t); | 			Size    = sizeof(USB_Descriptor_Configuration_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_String:  | 		case DTYPE_String:  | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00:  | 				case 0x00:  | ||||||
| 					Address = (void*)&LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01:  | 				case 0x01:  | ||||||
| 					Address = (void*)&ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02:  | 				case 0x02:  | ||||||
| 					Address = (void*)&ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 			} | 			} | ||||||
|  | |||||||
| @ -93,6 +93,7 @@ | |||||||
| 	/* Function Prototypes: */ | 	/* Function Prototypes: */ | ||||||
| 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
| 		                                    const uint8_t wIndex, | 		                                    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 | #endif | ||||||
|  | |||||||
| @ -201,48 +201,48 @@ USB_Descriptor_String_t PROGMEM ProductString = | |||||||
|  */ |  */ | ||||||
| uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
|                                     const uint8_t wIndex, |                                     const uint8_t wIndex, | ||||||
|                                     void** const DescriptorAddress) |                                     const void** const DescriptorAddress) | ||||||
| { | { | ||||||
| 	const uint8_t  DescriptorType   = (wValue >> 8); | 	const uint8_t  DescriptorType   = (wValue >> 8); | ||||||
| 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | ||||||
| 
 | 
 | ||||||
| 	void*    Address = NULL; | 	const void* Address = NULL; | ||||||
| 	uint16_t Size    = NO_DESCRIPTOR; | 	uint16_t    Size    = NO_DESCRIPTOR; | ||||||
| 
 | 
 | ||||||
| 	switch (DescriptorType) | 	switch (DescriptorType) | ||||||
| 	{ | 	{ | ||||||
| 		case DTYPE_Device: | 		case DTYPE_Device: | ||||||
| 			Address = (void*)&DeviceDescriptor; | 			Address = &DeviceDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Device_t); | 			Size    = sizeof(USB_Descriptor_Device_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_Configuration: | 		case DTYPE_Configuration: | ||||||
| 			Address = (void*)&ConfigurationDescriptor; | 			Address = &ConfigurationDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Configuration_t); | 			Size    = sizeof(USB_Descriptor_Configuration_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_String: | 		case DTYPE_String: | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00: | 				case 0x00: | ||||||
| 					Address = (void*)&LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01: | 				case 0x01: | ||||||
| 					Address = (void*)&ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02: | 				case 0x02: | ||||||
| 					Address = (void*)&ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 			} | 			} | ||||||
| 			 | 			 | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_HID:  | 		case DTYPE_HID:  | ||||||
| 			Address = (void*)&ConfigurationDescriptor.HID_MouseHID; | 			Address = &ConfigurationDescriptor.HID_MouseHID; | ||||||
| 			Size    = sizeof(USB_HID_Descriptor_t); | 			Size    = sizeof(USB_HID_Descriptor_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_Report:  | 		case DTYPE_Report:  | ||||||
| 			Address = (void*)&MouseReport; | 			Address = &MouseReport; | ||||||
| 			Size    = sizeof(MouseReport); | 			Size    = sizeof(MouseReport); | ||||||
| 			break; | 			break; | ||||||
| 	} | 	} | ||||||
|  | |||||||
| @ -65,6 +65,7 @@ | |||||||
| 	/* Function Prototypes: */ | 	/* Function Prototypes: */ | ||||||
| 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
| 		                                    const uint8_t wIndex, | 		                                    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 | #endif | ||||||
|  | |||||||
| @ -254,8 +254,8 @@ static void USB_Device_GetInternalSerialDescriptor(void) | |||||||
| 
 | 
 | ||||||
| static void USB_Device_GetDescriptor(void) | static void USB_Device_GetDescriptor(void) | ||||||
| { | { | ||||||
| 	void*    DescriptorPointer; | 	const void* DescriptorPointer; | ||||||
| 	uint16_t DescriptorSize; | 	uint16_t    DescriptorSize; | ||||||
| 	 | 	 | ||||||
| 	#if !defined(USE_FLASH_DESCRIPTORS) && !defined(USE_EEPROM_DESCRIPTORS) && !defined(USE_RAM_DESCRIPTORS) | 	#if !defined(USE_FLASH_DESCRIPTORS) && !defined(USE_EEPROM_DESCRIPTORS) && !defined(USE_RAM_DESCRIPTORS) | ||||||
| 	uint8_t  DescriptorAddressSpace; | 	uint8_t  DescriptorAddressSpace; | ||||||
|  | |||||||
| @ -187,7 +187,7 @@ | |||||||
| 			 */ | 			 */ | ||||||
| 			uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | 			uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
| 			                                    const uint8_t wIndex, | 			                                    const uint8_t wIndex, | ||||||
| 			                                    void** const DescriptorAddress | 			                                    const void** const DescriptorAddress | ||||||
| 			#if !defined(USE_FLASH_DESCRIPTORS) && !defined(USE_EEPROM_DESCRIPTORS) && !defined(USE_RAM_DESCRIPTORS) | 			#if !defined(USE_FLASH_DESCRIPTORS) && !defined(USE_EEPROM_DESCRIPTORS) && !defined(USE_RAM_DESCRIPTORS) | ||||||
| 			                                    , uint8_t* MemoryAddressSpace | 			                                    , uint8_t* MemoryAddressSpace | ||||||
| 			#endif | 			#endif | ||||||
|  | |||||||
| @ -24,6 +24,8 @@ | |||||||
|   *  - Changed all Device mode LowLevel demos and Device Class drivers so that the control request is acknowledged and any data |   *  - Changed all Device mode LowLevel demos and Device Class drivers so that the control request is acknowledged and any data | ||||||
|   *    transferred as quickly as possible without any processing inbetween sections, so that long callbacks or event handlers will |   *    transferred as quickly as possible without any processing inbetween sections, so that long callbacks or event handlers will | ||||||
|   *    not break communications with the host by exceeding the maximum control request stage timeout period |   *    not break communications with the host by exceeding the maximum control request stage timeout period | ||||||
|  |   *  - 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) | ||||||
|   * |   * | ||||||
|   *  <b>Fixed:</b> |   *  <b>Fixed:</b> | ||||||
|   *  - Fixed USB_GetHIDReportItemInfo() function modifying the given report item's data when the report item does not exist |   *  - Fixed USB_GetHIDReportItemInfo() function modifying the given report item's data when the report item does not exist | ||||||
|  | |||||||
| @ -18,6 +18,11 @@ | |||||||
|  *    - A new USB driver source file, Drivers/USB/HighLevel/PipeStream.c now exists. This source file should be added to all |  *    - A new USB driver source file, Drivers/USB/HighLevel/PipeStream.c now exists. This source file should be added to all | ||||||
|  *      project makefiles using the USB driver of LUFA, or the makefile should be updated to use the new module source variables. |  *      project makefiles using the USB driver of LUFA, or the makefile should be updated to use the new module source variables. | ||||||
|  * |  * | ||||||
|  |  *  <b>Device Mode</b> | ||||||
|  |  *    - The signature for the CALLBACK_USB_GetDescriptor() callback has changed, the "void** const DescriptorAddress" parameter is | ||||||
|  |  *      now "const void** const DescriptorAddress". Existing applications should update their callback signatures to match this, and | ||||||
|  |  *      eliminate any casting of descriptor pointers to a non-const pointer. | ||||||
|  |  * | ||||||
|  * \section Sec_Migration100807 Migrating from 100513 to 100807 |  * \section Sec_Migration100807 Migrating from 100513 to 100807 | ||||||
|  * |  * | ||||||
|  *  <b>Non-USB Library Components</b> |  *  <b>Non-USB Library Components</b> | ||||||
|  | |||||||
| @ -174,41 +174,41 @@ USB_Descriptor_String_t PROGMEM SerialString = | |||||||
|  */ |  */ | ||||||
| uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
|                                     const uint8_t wIndex, |                                     const uint8_t wIndex, | ||||||
|                                     void** const DescriptorAddress) |                                     const void** const DescriptorAddress) | ||||||
| { | { | ||||||
| 	const uint8_t  DescriptorType   = (wValue >> 8); | 	const uint8_t  DescriptorType   = (wValue >> 8); | ||||||
| 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | ||||||
| 
 | 
 | ||||||
| 	void*    Address = NULL; | 	const void* Address = NULL; | ||||||
| 	uint16_t Size    = NO_DESCRIPTOR; | 	uint16_t    Size    = NO_DESCRIPTOR; | ||||||
| 	 | 	 | ||||||
| 	switch (DescriptorType) | 	switch (DescriptorType) | ||||||
| 	{ | 	{ | ||||||
| 		case DTYPE_Device:  | 		case DTYPE_Device:  | ||||||
| 			Address = (void*)&DeviceDescriptor; | 			Address = &DeviceDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Device_t); | 			Size    = sizeof(USB_Descriptor_Device_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_Configuration:  | 		case DTYPE_Configuration:  | ||||||
| 			Address = (void*)&ConfigurationDescriptor; | 			Address = &ConfigurationDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Configuration_t); | 			Size    = sizeof(USB_Descriptor_Configuration_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_String:  | 		case DTYPE_String:  | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00:  | 				case 0x00:  | ||||||
| 					Address = (void*)&LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01:  | 				case 0x01:  | ||||||
| 					Address = (void*)&ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02:  | 				case 0x02:  | ||||||
| 					Address = (void*)&ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x03: | 				case 0x03: | ||||||
| 					Address = (void*)&SerialString; | 					Address = &SerialString; | ||||||
| 					Size    = pgm_read_byte(&SerialString.Header.Size); | 					Size    = pgm_read_byte(&SerialString.Header.Size); | ||||||
| 					break;					 | 					break;					 | ||||||
| 			} | 			} | ||||||
|  | |||||||
| @ -75,6 +75,7 @@ | |||||||
| 	/* Function Prototypes: */ | 	/* Function Prototypes: */ | ||||||
| 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
| 		                                    const uint8_t wIndex, | 		                                    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 | #endif | ||||||
|  | |||||||
| @ -214,37 +214,37 @@ USB_Descriptor_String_t PROGMEM ProductString = | |||||||
|  */ |  */ | ||||||
| uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
|                                     const uint8_t wIndex, |                                     const uint8_t wIndex, | ||||||
|                                     void** const DescriptorAddress) |                                     const void** const DescriptorAddress) | ||||||
| { | { | ||||||
| 	const uint8_t  DescriptorType   = (wValue >> 8); | 	const uint8_t  DescriptorType   = (wValue >> 8); | ||||||
| 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | ||||||
| 
 | 
 | ||||||
| 	void*    Address = NULL; | 	const void* Address = NULL; | ||||||
| 	uint16_t Size    = NO_DESCRIPTOR; | 	uint16_t    Size    = NO_DESCRIPTOR; | ||||||
| 
 | 
 | ||||||
| 	switch (DescriptorType) | 	switch (DescriptorType) | ||||||
| 	{ | 	{ | ||||||
| 		case DTYPE_Device:  | 		case DTYPE_Device:  | ||||||
| 			Address = (void*)&DeviceDescriptor; | 			Address = &DeviceDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Device_t); | 			Size    = sizeof(USB_Descriptor_Device_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_Configuration:  | 		case DTYPE_Configuration:  | ||||||
| 			Address = (void*)&ConfigurationDescriptor; | 			Address = &ConfigurationDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Configuration_t); | 			Size    = sizeof(USB_Descriptor_Configuration_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_String:  | 		case DTYPE_String:  | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00:  | 				case 0x00:  | ||||||
| 					Address = (void*)&LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01:  | 				case 0x01:  | ||||||
| 					Address = (void*)&ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02:  | 				case 0x02:  | ||||||
| 					Address = (void*)&ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 			} | 			} | ||||||
|  | |||||||
| @ -79,6 +79,7 @@ | |||||||
| 	/* Function Prototypes: */ | 	/* Function Prototypes: */ | ||||||
| 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
| 		                                    const uint8_t wIndex, | 		                                    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 | #endif | ||||||
|  | |||||||
| @ -285,37 +285,37 @@ USB_Descriptor_String_t PROGMEM ProductString = | |||||||
|  */ |  */ | ||||||
| uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
|                                     const uint8_t wIndex, |                                     const uint8_t wIndex, | ||||||
|                                     void** const DescriptorAddress) |                                     const void** const DescriptorAddress) | ||||||
| { | { | ||||||
| 	const uint8_t  DescriptorType   = (wValue >> 8); | 	const uint8_t  DescriptorType   = (wValue >> 8); | ||||||
| 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | ||||||
| 
 | 
 | ||||||
| 	void*    Address = NULL; | 	const void* Address = NULL; | ||||||
| 	uint16_t Size    = NO_DESCRIPTOR; | 	uint16_t    Size    = NO_DESCRIPTOR; | ||||||
| 
 | 
 | ||||||
| 	switch (DescriptorType) | 	switch (DescriptorType) | ||||||
| 	{ | 	{ | ||||||
| 		case DTYPE_Device:  | 		case DTYPE_Device:  | ||||||
| 			Address = (void*)&DeviceDescriptor; | 			Address = &DeviceDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Device_t); | 			Size    = sizeof(USB_Descriptor_Device_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_Configuration:  | 		case DTYPE_Configuration:  | ||||||
| 			Address = (void*)&ConfigurationDescriptor; | 			Address = &ConfigurationDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Configuration_t); | 			Size    = sizeof(USB_Descriptor_Configuration_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_String:  | 		case DTYPE_String:  | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00:  | 				case 0x00:  | ||||||
| 					Address = (void*)&LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01:  | 				case 0x01:  | ||||||
| 					Address = (void*)&ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02:  | 				case 0x02:  | ||||||
| 					Address = (void*)&ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 			} | 			} | ||||||
|  | |||||||
| @ -77,6 +77,7 @@ | |||||||
| 	/* Function Prototypes: */ | 	/* Function Prototypes: */ | ||||||
| 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
| 		                                    const uint8_t wIndex, | 		                                    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 | #endif | ||||||
|  | |||||||
| @ -178,37 +178,37 @@ USB_Descriptor_String_t PROGMEM ProductString = | |||||||
|  */ |  */ | ||||||
| uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
|                                     const uint8_t wIndex, |                                     const uint8_t wIndex, | ||||||
|                                     void** const DescriptorAddress) |                                     const void** const DescriptorAddress) | ||||||
| { | { | ||||||
| 	const uint8_t  DescriptorType   = (wValue >> 8); | 	const uint8_t  DescriptorType   = (wValue >> 8); | ||||||
| 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | ||||||
| 
 | 
 | ||||||
| 	void*    Address = NULL; | 	const void* Address = NULL; | ||||||
| 	uint16_t Size    = NO_DESCRIPTOR; | 	uint16_t    Size    = NO_DESCRIPTOR; | ||||||
| 
 | 
 | ||||||
| 	switch (DescriptorType) | 	switch (DescriptorType) | ||||||
| 	{ | 	{ | ||||||
| 		case DTYPE_Device:  | 		case DTYPE_Device:  | ||||||
| 			Address = (void*)&DeviceDescriptor; | 			Address = &DeviceDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Device_t); | 			Size    = sizeof(USB_Descriptor_Device_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_Configuration:  | 		case DTYPE_Configuration:  | ||||||
| 			Address = (void*)&ConfigurationDescriptor; | 			Address = &ConfigurationDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Configuration_t); | 			Size    = sizeof(USB_Descriptor_Configuration_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_String:  | 		case DTYPE_String:  | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00:  | 				case 0x00:  | ||||||
| 					Address = (void*)&LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01:  | 				case 0x01:  | ||||||
| 					Address = (void*)&ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02:  | 				case 0x02:  | ||||||
| 					Address = (void*)&ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 			} | 			} | ||||||
|  | |||||||
| @ -84,6 +84,7 @@ | |||||||
| 	/* Function Prototypes: */ | 	/* Function Prototypes: */ | ||||||
| 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
| 		                                    const uint8_t wIndex, | 		                                    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 | #endif | ||||||
|  | |||||||
| @ -226,37 +226,37 @@ USB_Descriptor_String_t PROGMEM ProductString = | |||||||
|  */ |  */ | ||||||
| uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
|                                     const uint8_t wIndex, |                                     const uint8_t wIndex, | ||||||
|                                     void** const DescriptorAddress) |                                     const void** const DescriptorAddress) | ||||||
| { | { | ||||||
| 	const uint8_t  DescriptorType   = (wValue >> 8); | 	const uint8_t  DescriptorType   = (wValue >> 8); | ||||||
| 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | ||||||
| 
 | 
 | ||||||
| 	void*          Address = NULL; | 	const void* Address = NULL; | ||||||
| 	uint16_t       Size    = NO_DESCRIPTOR; | 	uint16_t    Size    = NO_DESCRIPTOR; | ||||||
| 
 | 
 | ||||||
| 	switch (DescriptorType) | 	switch (DescriptorType) | ||||||
| 	{ | 	{ | ||||||
| 		case DTYPE_Device: | 		case DTYPE_Device: | ||||||
| 			Address = (void*)&DeviceDescriptor; | 			Address = &DeviceDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Device_t); | 			Size    = sizeof(USB_Descriptor_Device_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_Configuration:  | 		case DTYPE_Configuration:  | ||||||
| 			Address = (void*)&ConfigurationDescriptor; | 			Address = &ConfigurationDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Configuration_t); | 			Size    = sizeof(USB_Descriptor_Configuration_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_String:  | 		case DTYPE_String:  | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00:  | 				case 0x00:  | ||||||
| 					Address = (void*)&LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01:  | 				case 0x01:  | ||||||
| 					Address = (void*)&ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02:  | 				case 0x02:  | ||||||
| 					Address = (void*)&ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 			} | 			} | ||||||
|  | |||||||
| @ -79,6 +79,7 @@ | |||||||
| 	/* Function Prototypes: */ | 	/* Function Prototypes: */ | ||||||
| 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
| 		                                    const uint8_t wIndex, | 		                                    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 | #endif | ||||||
|  | |||||||
| @ -198,48 +198,48 @@ USB_Descriptor_String_t PROGMEM ProductString = | |||||||
|  */ |  */ | ||||||
| uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
|                                     const uint8_t wIndex, |                                     const uint8_t wIndex, | ||||||
|                                     void** const DescriptorAddress) |                                     const void** const DescriptorAddress) | ||||||
| { | { | ||||||
| 	const uint8_t  DescriptorType   = (wValue >> 8); | 	const uint8_t  DescriptorType   = (wValue >> 8); | ||||||
| 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | ||||||
| 
 | 
 | ||||||
| 	void*    Address = NULL; | 	const void* Address = NULL; | ||||||
| 	uint16_t Size    = NO_DESCRIPTOR; | 	uint16_t    Size    = NO_DESCRIPTOR; | ||||||
| 
 | 
 | ||||||
| 	switch (DescriptorType) | 	switch (DescriptorType) | ||||||
| 	{ | 	{ | ||||||
| 		case DTYPE_Device: | 		case DTYPE_Device: | ||||||
| 			Address = (void*)&DeviceDescriptor; | 			Address = &DeviceDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Device_t); | 			Size    = sizeof(USB_Descriptor_Device_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_Configuration: | 		case DTYPE_Configuration: | ||||||
| 			Address = (void*)&ConfigurationDescriptor; | 			Address = &ConfigurationDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Configuration_t); | 			Size    = sizeof(USB_Descriptor_Configuration_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_String: | 		case DTYPE_String: | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00: | 				case 0x00: | ||||||
| 					Address = (void*)&LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01: | 				case 0x01: | ||||||
| 					Address = (void*)&ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02: | 				case 0x02: | ||||||
| 					Address = (void*)&ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 			} | 			} | ||||||
| 			 | 			 | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_HID: | 		case DTYPE_HID: | ||||||
| 			Address = (void*)&ConfigurationDescriptor.HID_KeyboardHID; | 			Address = &ConfigurationDescriptor.HID_KeyboardHID; | ||||||
| 			Size    = sizeof(USB_HID_Descriptor_t); | 			Size    = sizeof(USB_HID_Descriptor_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_Report: | 		case DTYPE_Report: | ||||||
| 			Address = (void*)&KeyboardReport; | 			Address = &KeyboardReport; | ||||||
| 			Size    = sizeof(KeyboardReport); | 			Size    = sizeof(KeyboardReport); | ||||||
| 			break; | 			break; | ||||||
| 	} | 	} | ||||||
|  | |||||||
| @ -66,6 +66,7 @@ | |||||||
| 	/* Function Prototypes: */ | 	/* Function Prototypes: */ | ||||||
| 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
| 		                                    const uint8_t wIndex, | 		                                    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 | #endif | ||||||
|  | |||||||
| @ -155,41 +155,41 @@ USB_Descriptor_String_t PROGMEM RelayBoard_SerialString = | |||||||
|  */ |  */ | ||||||
| uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
|                                     const uint8_t wIndex, |                                     const uint8_t wIndex, | ||||||
|                                     void** const DescriptorAddress) |                                     const void** const DescriptorAddress) | ||||||
| { | { | ||||||
| 	const uint8_t  DescriptorType   = (wValue >> 8); | 	const uint8_t  DescriptorType   = (wValue >> 8); | ||||||
| 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | ||||||
| 
 | 
 | ||||||
| 	void*    Address = NULL; | 	const void* Address = NULL; | ||||||
| 	uint16_t Size    = NO_DESCRIPTOR; | 	uint16_t    Size    = NO_DESCRIPTOR; | ||||||
| 
 | 
 | ||||||
| 	switch (DescriptorType) | 	switch (DescriptorType) | ||||||
| 	{ | 	{ | ||||||
| 		case DTYPE_Device: | 		case DTYPE_Device: | ||||||
| 			Address = (void*)&RelayBoard_DeviceDescriptor; | 			Address = &RelayBoard_DeviceDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Device_t); | 			Size    = sizeof(USB_Descriptor_Device_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_Configuration: | 		case DTYPE_Configuration: | ||||||
| 			Address = (void*)&RelayBoard_ConfigurationDescriptor; | 			Address = &RelayBoard_ConfigurationDescriptor; | ||||||
| 			Size    = sizeof(RelayBoard_USB_Descriptor_Configuration_t); | 			Size    = sizeof(RelayBoard_USB_Descriptor_Configuration_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_String: | 		case DTYPE_String: | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00: | 				case 0x00: | ||||||
| 					Address = (void*)&RelayBoard_LanguageString; | 					Address = &RelayBoard_LanguageString; | ||||||
| 					Size    = pgm_read_byte(&RelayBoard_LanguageString.Header.Size); | 					Size    = pgm_read_byte(&RelayBoard_LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01: | 				case 0x01: | ||||||
| 					Address = (void*)&RelayBoard_ManufacturerString; | 					Address = &RelayBoard_ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&RelayBoard_ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&RelayBoard_ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02: | 				case 0x02: | ||||||
| 					Address = (void*)&RelayBoard_ProductString; | 					Address = &RelayBoard_ProductString; | ||||||
| 					Size    = pgm_read_byte(&RelayBoard_ProductString.Header.Size); | 					Size    = pgm_read_byte(&RelayBoard_ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x03: | 				case 0x03: | ||||||
| 					Address = (void*)&RelayBoard_SerialString; | 					Address = &RelayBoard_SerialString; | ||||||
| 					Size    = pgm_read_byte(&RelayBoard_SerialString.Header.Size); | 					Size    = pgm_read_byte(&RelayBoard_SerialString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 			} | 			} | ||||||
|  | |||||||
| @ -41,7 +41,6 @@ | |||||||
| 		#include <avr/pgmspace.h> | 		#include <avr/pgmspace.h> | ||||||
| 		#include <LUFA/Drivers/USB/USB.h> | 		#include <LUFA/Drivers/USB/USB.h> | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| 	/* Type Defines: */ | 	/* Type Defines: */ | ||||||
| 		/** Type define for the device configuration descriptor structure. This must be defined in the
 | 		/** Type define for the device configuration descriptor structure. This must be defined in the
 | ||||||
| 		 *  application code, as the configuration descriptor contains several sub-descriptors which | 		 *  application code, as the configuration descriptor contains several sub-descriptors which | ||||||
| @ -56,6 +55,6 @@ | |||||||
| 	/* Function Prototypes: */ | 	/* Function Prototypes: */ | ||||||
| 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
| 		                                    const uint8_t wIndex, | 		                                    const uint8_t wIndex, | ||||||
| 		                                    void** const DescriptorAddress); | 		                                    const void** const DescriptorAddress) | ||||||
| 
 | 		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); | ||||||
| #endif | #endif | ||||||
|  | |||||||
| @ -239,48 +239,48 @@ USB_Descriptor_String_t PROGMEM ProductString = | |||||||
|  */ |  */ | ||||||
| uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
|                                     const uint8_t wIndex, |                                     const uint8_t wIndex, | ||||||
|                                     void** const DescriptorAddress) |                                     const void** const DescriptorAddress) | ||||||
| { | { | ||||||
| 	const uint8_t  DescriptorType   = (wValue >> 8); | 	const uint8_t  DescriptorType   = (wValue >> 8); | ||||||
| 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | ||||||
| 
 | 
 | ||||||
| 	void*    Address = NULL; | 	const void* Address = NULL; | ||||||
| 	uint16_t Size    = NO_DESCRIPTOR; | 	uint16_t    Size    = NO_DESCRIPTOR; | ||||||
| 
 | 
 | ||||||
| 	switch (DescriptorType) | 	switch (DescriptorType) | ||||||
| 	{ | 	{ | ||||||
| 		case DTYPE_Device:  | 		case DTYPE_Device:  | ||||||
| 			Address = (void*)&DeviceDescriptor; | 			Address = &DeviceDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Device_t); | 			Size    = sizeof(USB_Descriptor_Device_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_Configuration:  | 		case DTYPE_Configuration:  | ||||||
| 			Address = (void*)&ConfigurationDescriptor; | 			Address = &ConfigurationDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Configuration_t); | 			Size    = sizeof(USB_Descriptor_Configuration_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_String:  | 		case DTYPE_String:  | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00:  | 				case 0x00:  | ||||||
| 					Address = (void*)&LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01:  | 				case 0x01:  | ||||||
| 					Address = (void*)&ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02:  | 				case 0x02:  | ||||||
| 					Address = (void*)&ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 			} | 			} | ||||||
| 			 | 			 | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_HID:  | 		case DTYPE_HID:  | ||||||
| 			Address = (void*)&ConfigurationDescriptor.HID_GenericHID; | 			Address = &ConfigurationDescriptor.HID_GenericHID; | ||||||
| 			Size    = sizeof(USB_HID_Descriptor_t); | 			Size    = sizeof(USB_HID_Descriptor_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_Report:  | 		case DTYPE_Report:  | ||||||
| 			Address = (void*)&GenericReport; | 			Address = &GenericReport; | ||||||
| 			Size    = sizeof(GenericReport); | 			Size    = sizeof(GenericReport); | ||||||
| 			break; | 			break; | ||||||
| 	} | 	} | ||||||
|  | |||||||
| @ -56,6 +56,7 @@ | |||||||
| 	/* Function Prototypes: */ | 	/* Function Prototypes: */ | ||||||
| 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
| 		                                    const uint8_t wIndex, | 		                                    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 | #endif | ||||||
|  | |||||||
| @ -226,37 +226,37 @@ USB_Descriptor_String_t PROGMEM ProductString = | |||||||
|  */ |  */ | ||||||
| uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
|                                     const uint8_t wIndex, |                                     const uint8_t wIndex, | ||||||
|                                     void** const DescriptorAddress) |                                     const void** const DescriptorAddress) | ||||||
| { | { | ||||||
| 	const uint8_t  DescriptorType   = (wValue >> 8); | 	const uint8_t  DescriptorType   = (wValue >> 8); | ||||||
| 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | ||||||
| 
 | 
 | ||||||
| 	void*    Address = NULL; | 	const void* Address = NULL; | ||||||
| 	uint16_t Size    = NO_DESCRIPTOR; | 	uint16_t    Size    = NO_DESCRIPTOR; | ||||||
| 
 | 
 | ||||||
| 	switch (DescriptorType) | 	switch (DescriptorType) | ||||||
| 	{ | 	{ | ||||||
| 		case DTYPE_Device:  | 		case DTYPE_Device:  | ||||||
| 			Address = (void*)&DeviceDescriptor; | 			Address = &DeviceDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Device_t); | 			Size    = sizeof(USB_Descriptor_Device_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_Configuration:  | 		case DTYPE_Configuration:  | ||||||
| 			Address = (void*)&ConfigurationDescriptor; | 			Address = &ConfigurationDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Configuration_t); | 			Size    = sizeof(USB_Descriptor_Configuration_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_String:  | 		case DTYPE_String:  | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00:  | 				case 0x00:  | ||||||
| 					Address = (void*)&LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01:  | 				case 0x01:  | ||||||
| 					Address = (void*)&ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02:  | 				case 0x02:  | ||||||
| 					Address = (void*)&ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 			} | 			} | ||||||
|  | |||||||
| @ -79,6 +79,7 @@ | |||||||
| 	/* Function Prototypes: */ | 	/* Function Prototypes: */ | ||||||
| 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
| 		                                    const uint8_t wIndex, | 		                                    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 | #endif | ||||||
|  | |||||||
| @ -174,37 +174,39 @@ 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 |  *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the | ||||||
|  *  USB host. |  *  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  DescriptorType   = (wValue >> 8); | ||||||
| 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | ||||||
| 
 | 
 | ||||||
| 	void*    Address = NULL; | 	const void* Address = NULL; | ||||||
| 	uint16_t Size    = NO_DESCRIPTOR; | 	uint16_t    Size    = NO_DESCRIPTOR; | ||||||
| 
 | 
 | ||||||
| 	switch (DescriptorType) | 	switch (DescriptorType) | ||||||
| 	{ | 	{ | ||||||
| 		case DTYPE_Device:  | 		case DTYPE_Device:  | ||||||
| 			Address = (void*)&DeviceDescriptor; | 			Address = &DeviceDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Device_t); | 			Size    = sizeof(USB_Descriptor_Device_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_Configuration:  | 		case DTYPE_Configuration:  | ||||||
| 			Address = (void*)&ConfigurationDescriptor; | 			Address = &ConfigurationDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Configuration_t); | 			Size    = sizeof(USB_Descriptor_Configuration_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_String:  | 		case DTYPE_String:  | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00:  | 				case 0x00:  | ||||||
| 					Address = (void*)&LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01:  | 				case 0x01:  | ||||||
| 					Address = (void*)&ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02:  | 				case 0x02:  | ||||||
| 					Address = (void*)&ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 			} | 			} | ||||||
|  | |||||||
| @ -68,6 +68,7 @@ | |||||||
| 	/* Function Prototypes: */ | 	/* Function Prototypes: */ | ||||||
| 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
| 		                                    const uint8_t wIndex, | 		                                    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 | #endif | ||||||
|  | |||||||
| @ -249,7 +249,7 @@ void EVENT_CDC_Device_LineEncodingChanged(USB_ClassInfo_CDC_Device_t* const CDCI | |||||||
|  */ |  */ | ||||||
| uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
|                                     const uint8_t wIndex, |                                     const uint8_t wIndex, | ||||||
|                                     void** const DescriptorAddress) |                                     const void** const DescriptorAddress) | ||||||
| { | { | ||||||
| 	/* Return the correct descriptors based on the selected mode */ | 	/* Return the correct descriptors based on the selected mode */ | ||||||
| 	if (CurrentFirmwareMode == MODE_USART_BRIDGE) | 	if (CurrentFirmwareMode == MODE_USART_BRIDGE) | ||||||
|  | |||||||
| @ -95,6 +95,7 @@ | |||||||
| 
 | 
 | ||||||
| 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
| 		                                    const uint8_t wIndex, | 		                                    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 | #endif | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Dean Camera
						Dean Camera