mirror of
				https://github.com/mfulz/qmk_firmware.git
				synced 2025-10-31 05:12:33 +01:00 
			
		
		
		
	Add symbolic names for USB Device String Descriptors within the demos, applications and bootloaders.
This commit is contained in:
		
							parent
							
								
									0ad234c194
								
							
						
					
					
						commit
						e342ba8f64
					
				| @ -57,8 +57,8 @@ const USB_Descriptor_Device_t DeviceDescriptor = | |||||||
| 	.ProductID              = 0x204A, | 	.ProductID              = 0x204A, | ||||||
| 	.ReleaseNumber          = VERSION_BCD(01.00), | 	.ReleaseNumber          = VERSION_BCD(01.00), | ||||||
| 
 | 
 | ||||||
| 	.ManufacturerStrIndex   = 0x01, | 	.ManufacturerStrIndex   = STRING_ID_Manufacturer, | ||||||
| 	.ProductStrIndex        = 0x02, | 	.ProductStrIndex        = STRING_ID_Product, | ||||||
| 	.SerialNumStrIndex      = NO_DESCRIPTOR, | 	.SerialNumStrIndex      = NO_DESCRIPTOR, | ||||||
| 
 | 
 | ||||||
| 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | ||||||
| @ -234,17 +234,17 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | |||||||
| 			Size    = sizeof(USB_Descriptor_Configuration_t); | 			Size    = sizeof(USB_Descriptor_Configuration_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_String: | 		case DTYPE_String: | ||||||
| 			if (!(DescriptorNumber)) | 			if (DescriptorNumber == STRING_ID_Language) | ||||||
| 			{ | 			{ | ||||||
| 				Address = &LanguageString; | 				Address = &LanguageString; | ||||||
| 				Size    = LanguageString.Header.Size; | 				Size    = LanguageString.Header.Size; | ||||||
| 			} | 			} | ||||||
| 			else if (DescriptorNumber == 0x01) | 			else if (DescriptorNumber == STRING_ID_Manufacturer) | ||||||
| 			{ | 			{ | ||||||
| 				Address = &ManufacturerString; | 				Address = &ManufacturerString; | ||||||
| 				Size    = ManufacturerString.Header.Size; | 				Size    = ManufacturerString.Header.Size; | ||||||
| 			} | 			} | ||||||
| 			else if (DescriptorNumber == 0x02) | 			else if (DescriptorNumber == STRING_ID_Product) | ||||||
| 			{ | 			{ | ||||||
| 				Address = &ProductString; | 				Address = &ProductString; | ||||||
| 				Size    = ProductString.Header.Size; | 				Size    = ProductString.Header.Size; | ||||||
|  | |||||||
| @ -127,6 +127,17 @@ | |||||||
| 			USB_Descriptor_Endpoint_t                CDC_DataInEndpoint; | 			USB_Descriptor_Endpoint_t                CDC_DataInEndpoint; | ||||||
| 		} USB_Descriptor_Configuration_t; | 		} USB_Descriptor_Configuration_t; | ||||||
| 
 | 
 | ||||||
|  | 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 | ||||||
|  | 		 *  have a unique ID index associated with it, which can be used to refer to the string from | ||||||
|  | 		 *  other descriptors. | ||||||
|  | 		 */ | ||||||
|  | 		enum StringDescriptors_t | ||||||
|  | 		{ | ||||||
|  | 		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */ | ||||||
|  | 		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */ | ||||||
|  | 		    STRING_ID_Product       = 2, /**< Product string ID */ | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
| 	/* 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, | ||||||
|  | |||||||
| @ -57,8 +57,8 @@ const USB_Descriptor_Device_t DeviceDescriptor = | |||||||
| 	.ProductID              = PRODUCT_ID_CODE, | 	.ProductID              = PRODUCT_ID_CODE, | ||||||
| 	.ReleaseNumber          = VERSION_BCD(00.00), | 	.ReleaseNumber          = VERSION_BCD(00.00), | ||||||
| 
 | 
 | ||||||
| 	.ManufacturerStrIndex   = 0x01, | 	.ManufacturerStrIndex   = STRING_ID_Manufacturer, | ||||||
| 	.ProductStrIndex        = 0x02, | 	.ProductStrIndex        = STRING_ID_Product, | ||||||
| 	.SerialNumStrIndex      = NO_DESCRIPTOR, | 	.SerialNumStrIndex      = NO_DESCRIPTOR, | ||||||
| 
 | 
 | ||||||
| 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | ||||||
| @ -175,17 +175,17 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | |||||||
| 			Size    = sizeof(USB_Descriptor_Configuration_t); | 			Size    = sizeof(USB_Descriptor_Configuration_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_String: | 		case DTYPE_String: | ||||||
| 			if (!(DescriptorNumber)) | 			if (DescriptorNumber == STRING_ID_Language) | ||||||
| 			{ | 			{ | ||||||
| 				Address = &LanguageString; | 				Address = &LanguageString; | ||||||
| 				Size    = LanguageString.Header.Size; | 				Size    = LanguageString.Header.Size; | ||||||
| 			} | 			} | ||||||
| 			else if (DescriptorNumber == 0x01) | 			else if (DescriptorNumber == STRING_ID_Manufacturer) | ||||||
| 			{ | 			{ | ||||||
| 				Address = &ManufacturerString; | 				Address = &ManufacturerString; | ||||||
| 				Size    = ManufacturerString.Header.Size; | 				Size    = ManufacturerString.Header.Size; | ||||||
| 			} | 			} | ||||||
| 			else if (DescriptorNumber == 0x02) | 			else if (DescriptorNumber == STRING_ID_Product) | ||||||
| 			{ | 			{ | ||||||
| 				Address = &ProductString; | 				Address = &ProductString; | ||||||
| 				Size    = ProductString.Header.Size; | 				Size    = ProductString.Header.Size; | ||||||
|  | |||||||
| @ -164,6 +164,17 @@ | |||||||
| 			USB_Descriptor_DFU_Functional_t       DFU_Functional; | 			USB_Descriptor_DFU_Functional_t       DFU_Functional; | ||||||
| 		} USB_Descriptor_Configuration_t; | 		} USB_Descriptor_Configuration_t; | ||||||
| 
 | 
 | ||||||
|  | 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 | ||||||
|  | 		 *  have a unique ID index associated with it, which can be used to refer to the string from | ||||||
|  | 		 *  other descriptors. | ||||||
|  | 		 */ | ||||||
|  | 		enum StringDescriptors_t | ||||||
|  | 		{ | ||||||
|  | 		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */ | ||||||
|  | 		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */ | ||||||
|  | 		    STRING_ID_Product       = 2, /**< Product string ID */ | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
| 	/* 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, | ||||||
|  | |||||||
| @ -58,8 +58,8 @@ const USB_Descriptor_Device_t DeviceDescriptor = | |||||||
| 	.ProductID              = 0x206B, | 	.ProductID              = 0x206B, | ||||||
| 	.ReleaseNumber          = VERSION_BCD(00.01), | 	.ReleaseNumber          = VERSION_BCD(00.01), | ||||||
| 
 | 
 | ||||||
| 	.ManufacturerStrIndex   = 0x01, | 	.ManufacturerStrIndex   = STRING_ID_Manufacturer, | ||||||
| 	.ProductStrIndex        = 0x02, | 	.ProductStrIndex        = STRING_ID_Product, | ||||||
| 	.SerialNumStrIndex      = NO_DESCRIPTOR, | 	.SerialNumStrIndex      = NO_DESCRIPTOR, | ||||||
| 
 | 
 | ||||||
| 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | ||||||
| @ -186,15 +186,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | |||||||
| 		case DTYPE_String: | 		case DTYPE_String: | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00: | 				case STRING_ID_Language: | ||||||
| 					Address = &LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = LanguageString.Header.Size; | 					Size    = LanguageString.Header.Size; | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01: | 				case STRING_ID_Manufacturer: | ||||||
| 					Address = &ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = ManufacturerString.Header.Size; | 					Size    = ManufacturerString.Header.Size; | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02: | 				case STRING_ID_Product: | ||||||
| 					Address = &ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = ProductString.Header.Size; | 					Size    = ProductString.Header.Size; | ||||||
| 					break; | 					break; | ||||||
|  | |||||||
| @ -66,6 +66,17 @@ | |||||||
| 			USB_Descriptor_Endpoint_t             Printer_DataOutEndpoint; | 			USB_Descriptor_Endpoint_t             Printer_DataOutEndpoint; | ||||||
| 		} USB_Descriptor_Configuration_t; | 		} USB_Descriptor_Configuration_t; | ||||||
| 
 | 
 | ||||||
|  | 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 | ||||||
|  | 		 *  have a unique ID index associated with it, which can be used to refer to the string from | ||||||
|  | 		 *  other descriptors. | ||||||
|  | 		 */ | ||||||
|  | 		enum StringDescriptors_t | ||||||
|  | 		{ | ||||||
|  | 		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */ | ||||||
|  | 		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */ | ||||||
|  | 		    STRING_ID_Product       = 2, /**< Product string ID */ | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
| 	/* 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, | ||||||
|  | |||||||
| @ -57,8 +57,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = | |||||||
| 	.ProductID              = 0x2047, | 	.ProductID              = 0x2047, | ||||||
| 	.ReleaseNumber          = VERSION_BCD(00.02), | 	.ReleaseNumber          = VERSION_BCD(00.02), | ||||||
| 
 | 
 | ||||||
| 	.ManufacturerStrIndex   = 0x01, | 	.ManufacturerStrIndex   = STRING_ID_Manufacturer, | ||||||
| 	.ProductStrIndex        = 0x02, | 	.ProductStrIndex        = STRING_ID_Product, | ||||||
| 	.SerialNumStrIndex      = NO_DESCRIPTOR, | 	.SerialNumStrIndex      = NO_DESCRIPTOR, | ||||||
| 
 | 
 | ||||||
| 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | ||||||
| @ -304,15 +304,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | |||||||
| 		case DTYPE_String: | 		case DTYPE_String: | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00: | 				case STRING_ID_Language: | ||||||
| 					Address = &LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01: | 				case STRING_ID_Manufacturer: | ||||||
| 					Address = &ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02: | 				case STRING_ID_Product: | ||||||
| 					Address = &ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
|  | |||||||
| @ -75,6 +75,17 @@ | |||||||
| 			USB_Audio_Descriptor_StreamEndpoint_Spc_t Audio_StreamEndpoint_SPC; | 			USB_Audio_Descriptor_StreamEndpoint_Spc_t Audio_StreamEndpoint_SPC; | ||||||
| 		} USB_Descriptor_Configuration_t; | 		} USB_Descriptor_Configuration_t; | ||||||
| 
 | 
 | ||||||
|  | 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 | ||||||
|  | 		 *  have a unique ID index associated with it, which can be used to refer to the string from | ||||||
|  | 		 *  other descriptors. | ||||||
|  | 		 */ | ||||||
|  | 		enum StringDescriptors_t | ||||||
|  | 		{ | ||||||
|  | 		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */ | ||||||
|  | 		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */ | ||||||
|  | 		    STRING_ID_Product       = 2, /**< Product string ID */ | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
| 	/* 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, | ||||||
|  | |||||||
| @ -57,8 +57,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = | |||||||
| 	.ProductID              = 0x2046, | 	.ProductID              = 0x2046, | ||||||
| 	.ReleaseNumber          = VERSION_BCD(00.02), | 	.ReleaseNumber          = VERSION_BCD(00.02), | ||||||
| 
 | 
 | ||||||
| 	.ManufacturerStrIndex   = 0x01, | 	.ManufacturerStrIndex   = STRING_ID_Manufacturer, | ||||||
| 	.ProductStrIndex        = 0x02, | 	.ProductStrIndex        = STRING_ID_Product, | ||||||
| 	.SerialNumStrIndex      = NO_DESCRIPTOR, | 	.SerialNumStrIndex      = NO_DESCRIPTOR, | ||||||
| 
 | 
 | ||||||
| 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | ||||||
| @ -304,15 +304,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | |||||||
| 		case DTYPE_String: | 		case DTYPE_String: | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00: | 				case STRING_ID_Language: | ||||||
| 					Address = &LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01: | 				case STRING_ID_Manufacturer: | ||||||
| 					Address = &ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02: | 				case STRING_ID_Product: | ||||||
| 					Address = &ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
|  | |||||||
| @ -75,6 +75,17 @@ | |||||||
| 			USB_Audio_Descriptor_StreamEndpoint_Spc_t Audio_StreamEndpoint_SPC; | 			USB_Audio_Descriptor_StreamEndpoint_Spc_t Audio_StreamEndpoint_SPC; | ||||||
| 		} USB_Descriptor_Configuration_t; | 		} USB_Descriptor_Configuration_t; | ||||||
| 
 | 
 | ||||||
|  | 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 | ||||||
|  | 		 *  have a unique ID index associated with it, which can be used to refer to the string from | ||||||
|  | 		 *  other descriptors. | ||||||
|  | 		 */ | ||||||
|  | 		enum StringDescriptors_t | ||||||
|  | 		{ | ||||||
|  | 		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */ | ||||||
|  | 		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */ | ||||||
|  | 		    STRING_ID_Product       = 2, /**< Product string ID */ | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
| 	/* 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, | ||||||
|  | |||||||
| @ -58,8 +58,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = | |||||||
| 	.ProductID              = 0x204E, | 	.ProductID              = 0x204E, | ||||||
| 	.ReleaseNumber          = VERSION_BCD(00.01), | 	.ReleaseNumber          = VERSION_BCD(00.01), | ||||||
| 
 | 
 | ||||||
| 	.ManufacturerStrIndex   = 0x01, | 	.ManufacturerStrIndex   = STRING_ID_Manufacturer, | ||||||
| 	.ProductStrIndex        = 0x02, | 	.ProductStrIndex        = STRING_ID_Product, | ||||||
| 	.SerialNumStrIndex      = USE_INTERNAL_SERIAL, | 	.SerialNumStrIndex      = USE_INTERNAL_SERIAL, | ||||||
| 
 | 
 | ||||||
| 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | ||||||
| @ -352,15 +352,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | |||||||
| 		case DTYPE_String: | 		case DTYPE_String: | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00: | 				case STRING_ID_Language: | ||||||
| 					Address = &LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01: | 				case STRING_ID_Manufacturer: | ||||||
| 					Address = &ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02: | 				case STRING_ID_Product: | ||||||
| 					Address = &ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
|  | |||||||
| @ -102,6 +102,17 @@ | |||||||
| 			USB_Descriptor_Endpoint_t                CDC2_DataInEndpoint; | 			USB_Descriptor_Endpoint_t                CDC2_DataInEndpoint; | ||||||
| 		} USB_Descriptor_Configuration_t; | 		} USB_Descriptor_Configuration_t; | ||||||
| 
 | 
 | ||||||
|  | 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 | ||||||
|  | 		 *  have a unique ID index associated with it, which can be used to refer to the string from | ||||||
|  | 		 *  other descriptors. | ||||||
|  | 		 */ | ||||||
|  | 		enum StringDescriptors_t | ||||||
|  | 		{ | ||||||
|  | 		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */ | ||||||
|  | 		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */ | ||||||
|  | 		    STRING_ID_Product       = 2, /**< Product string ID */ | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
| 	/* 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, | ||||||
|  | |||||||
| @ -75,8 +75,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = | |||||||
| 	.ProductID              = 0x204F, | 	.ProductID              = 0x204F, | ||||||
| 	.ReleaseNumber          = VERSION_BCD(00.01), | 	.ReleaseNumber          = VERSION_BCD(00.01), | ||||||
| 
 | 
 | ||||||
| 	.ManufacturerStrIndex   = 0x01, | 	.ManufacturerStrIndex   = STRING_ID_Manufacturer, | ||||||
| 	.ProductStrIndex        = 0x02, | 	.ProductStrIndex        = STRING_ID_Product, | ||||||
| 	.SerialNumStrIndex      = NO_DESCRIPTOR, | 	.SerialNumStrIndex      = NO_DESCRIPTOR, | ||||||
| 
 | 
 | ||||||
| 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | ||||||
| @ -204,15 +204,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | |||||||
| 		case DTYPE_String: | 		case DTYPE_String: | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00: | 				case STRING_ID_Language: | ||||||
| 					Address = &LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01: | 				case STRING_ID_Manufacturer: | ||||||
| 					Address = &ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02: | 				case STRING_ID_Product: | ||||||
| 					Address = &ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
|  | |||||||
| @ -40,7 +40,7 @@ | |||||||
| 		#include <avr/pgmspace.h> | 		#include <avr/pgmspace.h> | ||||||
| 
 | 
 | ||||||
| 		#include <LUFA/Drivers/USB/USB.h> | 		#include <LUFA/Drivers/USB/USB.h> | ||||||
| 		 | 
 | ||||||
| 		#include "Config/AppConfig.h" | 		#include "Config/AppConfig.h" | ||||||
| 
 | 
 | ||||||
| 	/* Type Defines: */ | 	/* Type Defines: */ | ||||||
| @ -58,6 +58,17 @@ | |||||||
| 	        USB_Descriptor_Endpoint_t             HID_ReportINEndpoint; | 	        USB_Descriptor_Endpoint_t             HID_ReportINEndpoint; | ||||||
| 		} USB_Descriptor_Configuration_t; | 		} USB_Descriptor_Configuration_t; | ||||||
| 
 | 
 | ||||||
|  | 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 | ||||||
|  | 		 *  have a unique ID index associated with it, which can be used to refer to the string from | ||||||
|  | 		 *  other descriptors. | ||||||
|  | 		 */ | ||||||
|  | 		enum StringDescriptors_t | ||||||
|  | 		{ | ||||||
|  | 		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */ | ||||||
|  | 		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */ | ||||||
|  | 		    STRING_ID_Product       = 2, /**< Product string ID */ | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
| 	/* Macros: */ | 	/* Macros: */ | ||||||
| 		/** Endpoint address of the Generic HID reporting IN endpoint. */ | 		/** Endpoint address of the Generic HID reporting IN endpoint. */ | ||||||
| 		#define GENERIC_IN_EPADDR         (ENDPOINT_DIR_IN | 1) | 		#define GENERIC_IN_EPADDR         (ENDPOINT_DIR_IN | 1) | ||||||
|  | |||||||
| @ -75,8 +75,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = | |||||||
| 	.ProductID              = 0x2043, | 	.ProductID              = 0x2043, | ||||||
| 	.ReleaseNumber          = VERSION_BCD(00.01), | 	.ReleaseNumber          = VERSION_BCD(00.01), | ||||||
| 
 | 
 | ||||||
| 	.ManufacturerStrIndex   = 0x01, | 	.ManufacturerStrIndex   = STRING_ID_Manufacturer, | ||||||
| 	.ProductStrIndex        = 0x02, | 	.ProductStrIndex        = STRING_ID_Product, | ||||||
| 	.SerialNumStrIndex      = NO_DESCRIPTOR, | 	.SerialNumStrIndex      = NO_DESCRIPTOR, | ||||||
| 
 | 
 | ||||||
| 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | ||||||
| @ -204,15 +204,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | |||||||
| 		case DTYPE_String: | 		case DTYPE_String: | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00: | 				case STRING_ID_Language: | ||||||
| 					Address = &LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01: | 				case STRING_ID_Manufacturer: | ||||||
| 					Address = &ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02: | 				case STRING_ID_Product: | ||||||
| 					Address = &ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
|  | |||||||
| @ -56,6 +56,17 @@ | |||||||
| 	        USB_Descriptor_Endpoint_t             HID_ReportINEndpoint; | 	        USB_Descriptor_Endpoint_t             HID_ReportINEndpoint; | ||||||
| 		} USB_Descriptor_Configuration_t; | 		} USB_Descriptor_Configuration_t; | ||||||
| 
 | 
 | ||||||
|  | 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 | ||||||
|  | 		 *  have a unique ID index associated with it, which can be used to refer to the string from | ||||||
|  | 		 *  other descriptors. | ||||||
|  | 		 */ | ||||||
|  | 		enum StringDescriptors_t | ||||||
|  | 		{ | ||||||
|  | 		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */ | ||||||
|  | 		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */ | ||||||
|  | 		    STRING_ID_Product       = 2, /**< Product string ID */ | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
| 	/* Macros: */ | 	/* Macros: */ | ||||||
| 		/** Endpoint address of the Joystick HID reporting IN endpoint. */ | 		/** Endpoint address of the Joystick HID reporting IN endpoint. */ | ||||||
| 		#define JOYSTICK_EPADDR              (ENDPOINT_DIR_IN | 1) | 		#define JOYSTICK_EPADDR              (ENDPOINT_DIR_IN | 1) | ||||||
|  | |||||||
| @ -71,8 +71,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = | |||||||
| 	.ProductID              = 0x2042, | 	.ProductID              = 0x2042, | ||||||
| 	.ReleaseNumber          = VERSION_BCD(00.01), | 	.ReleaseNumber          = VERSION_BCD(00.01), | ||||||
| 
 | 
 | ||||||
| 	.ManufacturerStrIndex   = 0x01, | 	.ManufacturerStrIndex   = STRING_ID_Manufacturer, | ||||||
| 	.ProductStrIndex        = 0x02, | 	.ProductStrIndex        = STRING_ID_Product, | ||||||
| 	.SerialNumStrIndex      = NO_DESCRIPTOR, | 	.SerialNumStrIndex      = NO_DESCRIPTOR, | ||||||
| 
 | 
 | ||||||
| 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | ||||||
| @ -200,15 +200,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | |||||||
| 		case DTYPE_String: | 		case DTYPE_String: | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00: | 				case STRING_ID_Language: | ||||||
| 					Address = &LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01: | 				case STRING_ID_Manufacturer: | ||||||
| 					Address = &ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02: | 				case STRING_ID_Product: | ||||||
| 					Address = &ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
|  | |||||||
| @ -56,6 +56,17 @@ | |||||||
| 	        USB_Descriptor_Endpoint_t             HID_ReportINEndpoint; | 	        USB_Descriptor_Endpoint_t             HID_ReportINEndpoint; | ||||||
| 		} USB_Descriptor_Configuration_t; | 		} USB_Descriptor_Configuration_t; | ||||||
| 
 | 
 | ||||||
|  | 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 | ||||||
|  | 		 *  have a unique ID index associated with it, which can be used to refer to the string from | ||||||
|  | 		 *  other descriptors. | ||||||
|  | 		 */ | ||||||
|  | 		enum StringDescriptors_t | ||||||
|  | 		{ | ||||||
|  | 		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */ | ||||||
|  | 		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */ | ||||||
|  | 		    STRING_ID_Product       = 2, /**< Product string ID */ | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
| 	/* Macros: */ | 	/* Macros: */ | ||||||
| 		/** Endpoint address of the Keyboard HID reporting IN endpoint. */ | 		/** Endpoint address of the Keyboard HID reporting IN endpoint. */ | ||||||
| 		#define KEYBOARD_EPADDR              (ENDPOINT_DIR_IN | 1) | 		#define KEYBOARD_EPADDR              (ENDPOINT_DIR_IN | 1) | ||||||
|  | |||||||
| @ -87,8 +87,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = | |||||||
| 	.ProductID              = 0x204D, | 	.ProductID              = 0x204D, | ||||||
| 	.ReleaseNumber          = VERSION_BCD(00.01), | 	.ReleaseNumber          = VERSION_BCD(00.01), | ||||||
| 
 | 
 | ||||||
| 	.ManufacturerStrIndex   = 0x01, | 	.ManufacturerStrIndex   = STRING_ID_Manufacturer, | ||||||
| 	.ProductStrIndex        = 0x02, | 	.ProductStrIndex        = STRING_ID_Product, | ||||||
| 	.SerialNumStrIndex      = NO_DESCRIPTOR, | 	.SerialNumStrIndex      = NO_DESCRIPTOR, | ||||||
| 
 | 
 | ||||||
| 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | ||||||
| @ -253,15 +253,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | |||||||
| 		case DTYPE_String: | 		case DTYPE_String: | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00: | 				case STRING_ID_Language: | ||||||
| 					Address = &LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01: | 				case STRING_ID_Manufacturer: | ||||||
| 					Address = &ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02: | 				case STRING_ID_Product: | ||||||
| 					Address = &ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
|  | |||||||
| @ -61,6 +61,17 @@ | |||||||
| 			USB_Descriptor_Endpoint_t             HID2_ReportINEndpoint; | 			USB_Descriptor_Endpoint_t             HID2_ReportINEndpoint; | ||||||
| 		} USB_Descriptor_Configuration_t; | 		} USB_Descriptor_Configuration_t; | ||||||
| 
 | 
 | ||||||
|  | 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 | ||||||
|  | 		 *  have a unique ID index associated with it, which can be used to refer to the string from | ||||||
|  | 		 *  other descriptors. | ||||||
|  | 		 */ | ||||||
|  | 		enum StringDescriptors_t | ||||||
|  | 		{ | ||||||
|  | 		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */ | ||||||
|  | 		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */ | ||||||
|  | 		    STRING_ID_Product       = 2, /**< Product string ID */ | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
| 	/* Macros: */ | 	/* Macros: */ | ||||||
| 		/** Endpoint address of the Keyboard HID reporting IN endpoint. */ | 		/** Endpoint address of the Keyboard HID reporting IN endpoint. */ | ||||||
| 		#define KEYBOARD_IN_EPADDR        (ENDPOINT_DIR_IN | 1) | 		#define KEYBOARD_IN_EPADDR        (ENDPOINT_DIR_IN | 1) | ||||||
|  | |||||||
| @ -134,8 +134,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = | |||||||
| 	.ProductID              = 0x2066, | 	.ProductID              = 0x2066, | ||||||
| 	.ReleaseNumber          = VERSION_BCD(00.01), | 	.ReleaseNumber          = VERSION_BCD(00.01), | ||||||
| 
 | 
 | ||||||
| 	.ManufacturerStrIndex   = 0x01, | 	.ManufacturerStrIndex   = STRING_ID_Manufacturer, | ||||||
| 	.ProductStrIndex        = 0x02, | 	.ProductStrIndex        = STRING_ID_Product, | ||||||
| 	.SerialNumStrIndex      = NO_DESCRIPTOR, | 	.SerialNumStrIndex      = NO_DESCRIPTOR, | ||||||
| 
 | 
 | ||||||
| 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | ||||||
| @ -263,15 +263,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | |||||||
| 		case DTYPE_String: | 		case DTYPE_String: | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00: | 				case STRING_ID_Language: | ||||||
| 					Address = &LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01: | 				case STRING_ID_Manufacturer: | ||||||
| 					Address = &ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02: | 				case STRING_ID_Product: | ||||||
| 					Address = &ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
|  | |||||||
| @ -56,6 +56,17 @@ | |||||||
| 			USB_Descriptor_Endpoint_t             HID_ReportINEndpoint; | 			USB_Descriptor_Endpoint_t             HID_ReportINEndpoint; | ||||||
| 		} USB_Descriptor_Configuration_t; | 		} USB_Descriptor_Configuration_t; | ||||||
| 
 | 
 | ||||||
|  | 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 | ||||||
|  | 		 *  have a unique ID index associated with it, which can be used to refer to the string from | ||||||
|  | 		 *  other descriptors. | ||||||
|  | 		 */ | ||||||
|  | 		enum StringDescriptors_t | ||||||
|  | 		{ | ||||||
|  | 		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */ | ||||||
|  | 		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */ | ||||||
|  | 		    STRING_ID_Product       = 2, /**< Product string ID */ | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
| 	/* Macros: */ | 	/* Macros: */ | ||||||
| 		/** Endpoint address of the HID reporting IN endpoint. */ | 		/** Endpoint address of the HID reporting IN endpoint. */ | ||||||
| 		#define HID_IN_EPADDR             (ENDPOINT_DIR_IN | 1) | 		#define HID_IN_EPADDR             (ENDPOINT_DIR_IN | 1) | ||||||
|  | |||||||
| @ -57,8 +57,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = | |||||||
| 	.ProductID              = 0x2048, | 	.ProductID              = 0x2048, | ||||||
| 	.ReleaseNumber          = VERSION_BCD(00.01), | 	.ReleaseNumber          = VERSION_BCD(00.01), | ||||||
| 
 | 
 | ||||||
| 	.ManufacturerStrIndex   = 0x01, | 	.ManufacturerStrIndex   = STRING_ID_Manufacturer, | ||||||
| 	.ProductStrIndex        = 0x02, | 	.ProductStrIndex        = STRING_ID_Product, | ||||||
| 	.SerialNumStrIndex      = NO_DESCRIPTOR, | 	.SerialNumStrIndex      = NO_DESCRIPTOR, | ||||||
| 
 | 
 | ||||||
| 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | ||||||
| @ -306,15 +306,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | |||||||
| 		case DTYPE_String: | 		case DTYPE_String: | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00: | 				case STRING_ID_Language: | ||||||
| 					Address = &LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01: | 				case STRING_ID_Manufacturer: | ||||||
| 					Address = &ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02: | 				case STRING_ID_Product: | ||||||
| 					Address = &ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
|  | |||||||
| @ -77,6 +77,17 @@ | |||||||
| 			USB_MIDI_Descriptor_Jack_Endpoint_t       MIDI_Out_Jack_Endpoint_SPC; | 			USB_MIDI_Descriptor_Jack_Endpoint_t       MIDI_Out_Jack_Endpoint_SPC; | ||||||
| 		} USB_Descriptor_Configuration_t; | 		} USB_Descriptor_Configuration_t; | ||||||
| 
 | 
 | ||||||
|  | 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 | ||||||
|  | 		 *  have a unique ID index associated with it, which can be used to refer to the string from | ||||||
|  | 		 *  other descriptors. | ||||||
|  | 		 */ | ||||||
|  | 		enum StringDescriptors_t | ||||||
|  | 		{ | ||||||
|  | 		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */ | ||||||
|  | 		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */ | ||||||
|  | 		    STRING_ID_Product       = 2, /**< Product string ID */ | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
| 	/* 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, | ||||||
|  | |||||||
| @ -58,8 +58,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = | |||||||
| 	.ProductID              = 0x2045, | 	.ProductID              = 0x2045, | ||||||
| 	.ReleaseNumber          = VERSION_BCD(00.01), | 	.ReleaseNumber          = VERSION_BCD(00.01), | ||||||
| 
 | 
 | ||||||
| 	.ManufacturerStrIndex   = 0x01, | 	.ManufacturerStrIndex   = STRING_ID_Manufacturer, | ||||||
| 	.ProductStrIndex        = 0x02, | 	.ProductStrIndex        = STRING_ID_Product, | ||||||
| 	.SerialNumStrIndex      = USE_INTERNAL_SERIAL, | 	.SerialNumStrIndex      = USE_INTERNAL_SERIAL, | ||||||
| 
 | 
 | ||||||
| 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | ||||||
| @ -186,15 +186,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | |||||||
| 		case DTYPE_String: | 		case DTYPE_String: | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00: | 				case STRING_ID_Language: | ||||||
| 					Address = &LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01: | 				case STRING_ID_Manufacturer: | ||||||
| 					Address = &ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02: | 				case STRING_ID_Product: | ||||||
| 					Address = &ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
|  | |||||||
| @ -42,7 +42,7 @@ | |||||||
| 		#include <LUFA/Drivers/USB/USB.h> | 		#include <LUFA/Drivers/USB/USB.h> | ||||||
| 
 | 
 | ||||||
| 		#include "Config/AppConfig.h" | 		#include "Config/AppConfig.h" | ||||||
| 		 | 
 | ||||||
| 	/* Macros: */ | 	/* Macros: */ | ||||||
| 		/** Endpoint address of the Mass Storage device-to-host data IN endpoint. */ | 		/** Endpoint address of the Mass Storage device-to-host data IN endpoint. */ | ||||||
| 		#define MASS_STORAGE_IN_EPADDR         (ENDPOINT_DIR_IN  | 3) | 		#define MASS_STORAGE_IN_EPADDR         (ENDPOINT_DIR_IN  | 3) | ||||||
| @ -68,6 +68,17 @@ | |||||||
| 			USB_Descriptor_Endpoint_t             MS_DataOutEndpoint; | 			USB_Descriptor_Endpoint_t             MS_DataOutEndpoint; | ||||||
| 		} USB_Descriptor_Configuration_t; | 		} USB_Descriptor_Configuration_t; | ||||||
| 
 | 
 | ||||||
|  | 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 | ||||||
|  | 		 *  have a unique ID index associated with it, which can be used to refer to the string from | ||||||
|  | 		 *  other descriptors. | ||||||
|  | 		 */ | ||||||
|  | 		enum StringDescriptors_t | ||||||
|  | 		{ | ||||||
|  | 		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */ | ||||||
|  | 		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */ | ||||||
|  | 		    STRING_ID_Product       = 2, /**< Product string ID */ | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
| 	/* 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, | ||||||
|  | |||||||
| @ -73,8 +73,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = | |||||||
| 	.ProductID              = 0x2061, | 	.ProductID              = 0x2061, | ||||||
| 	.ReleaseNumber          = VERSION_BCD(00.01), | 	.ReleaseNumber          = VERSION_BCD(00.01), | ||||||
| 
 | 
 | ||||||
| 	.ManufacturerStrIndex   = 0x01, | 	.ManufacturerStrIndex   = STRING_ID_Manufacturer, | ||||||
| 	.ProductStrIndex        = 0x02, | 	.ProductStrIndex        = STRING_ID_Product, | ||||||
| 	.SerialNumStrIndex      = USE_INTERNAL_SERIAL, | 	.SerialNumStrIndex      = USE_INTERNAL_SERIAL, | ||||||
| 
 | 
 | ||||||
| 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | ||||||
| @ -238,15 +238,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | |||||||
| 		case DTYPE_String: | 		case DTYPE_String: | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00: | 				case STRING_ID_Language: | ||||||
| 					Address = &LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01: | 				case STRING_ID_Manufacturer: | ||||||
| 					Address = &ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02: | 				case STRING_ID_Product: | ||||||
| 					Address = &ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
|  | |||||||
| @ -43,7 +43,7 @@ | |||||||
| 		#include <LUFA/Drivers/USB/USB.h> | 		#include <LUFA/Drivers/USB/USB.h> | ||||||
| 
 | 
 | ||||||
| 		#include "Config/AppConfig.h" | 		#include "Config/AppConfig.h" | ||||||
| 		 | 
 | ||||||
| 	/* Macros: */ | 	/* Macros: */ | ||||||
| 		/** Endpoint address of the Keyboard HID reporting IN endpoint. */ | 		/** Endpoint address of the Keyboard HID reporting IN endpoint. */ | ||||||
| 		#define KEYBOARD_EPADDR              (ENDPOINT_DIR_IN  | 1) | 		#define KEYBOARD_EPADDR              (ENDPOINT_DIR_IN  | 1) | ||||||
| @ -80,6 +80,17 @@ | |||||||
| 	        USB_Descriptor_Endpoint_t             HID_ReportINEndpoint; | 	        USB_Descriptor_Endpoint_t             HID_ReportINEndpoint; | ||||||
| 		} USB_Descriptor_Configuration_t; | 		} USB_Descriptor_Configuration_t; | ||||||
| 
 | 
 | ||||||
|  | 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 | ||||||
|  | 		 *  have a unique ID index associated with it, which can be used to refer to the string from | ||||||
|  | 		 *  other descriptors. | ||||||
|  | 		 */ | ||||||
|  | 		enum StringDescriptors_t | ||||||
|  | 		{ | ||||||
|  | 		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */ | ||||||
|  | 		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */ | ||||||
|  | 		    STRING_ID_Product       = 2, /**< Product string ID */ | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
| 	/* 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, | ||||||
|  | |||||||
| @ -76,8 +76,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = | |||||||
| 	.ProductID              = 0x2041, | 	.ProductID              = 0x2041, | ||||||
| 	.ReleaseNumber          = VERSION_BCD(00.01), | 	.ReleaseNumber          = VERSION_BCD(00.01), | ||||||
| 
 | 
 | ||||||
| 	.ManufacturerStrIndex   = 0x01, | 	.ManufacturerStrIndex   = STRING_ID_Manufacturer, | ||||||
| 	.ProductStrIndex        = 0x02, | 	.ProductStrIndex        = STRING_ID_Product, | ||||||
| 	.SerialNumStrIndex      = NO_DESCRIPTOR, | 	.SerialNumStrIndex      = NO_DESCRIPTOR, | ||||||
| 
 | 
 | ||||||
| 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | ||||||
| @ -205,15 +205,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | |||||||
| 		case DTYPE_String: | 		case DTYPE_String: | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00: | 				case STRING_ID_Language: | ||||||
| 					Address = &LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01: | 				case STRING_ID_Manufacturer: | ||||||
| 					Address = &ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02: | 				case STRING_ID_Product: | ||||||
| 					Address = &ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
|  | |||||||
| @ -63,6 +63,17 @@ | |||||||
| 	        USB_Descriptor_Endpoint_t             HID_ReportINEndpoint; | 	        USB_Descriptor_Endpoint_t             HID_ReportINEndpoint; | ||||||
| 		} USB_Descriptor_Configuration_t; | 		} USB_Descriptor_Configuration_t; | ||||||
| 
 | 
 | ||||||
|  | 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 | ||||||
|  | 		 *  have a unique ID index associated with it, which can be used to refer to the string from | ||||||
|  | 		 *  other descriptors. | ||||||
|  | 		 */ | ||||||
|  | 		enum StringDescriptors_t | ||||||
|  | 		{ | ||||||
|  | 		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */ | ||||||
|  | 		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */ | ||||||
|  | 		    STRING_ID_Product       = 2, /**< Product string ID */ | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
| 	/* 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, | ||||||
|  | |||||||
| @ -57,8 +57,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = | |||||||
| 	.ProductID              = 0x204C, | 	.ProductID              = 0x204C, | ||||||
| 	.ReleaseNumber          = VERSION_BCD(00.01), | 	.ReleaseNumber          = VERSION_BCD(00.01), | ||||||
| 
 | 
 | ||||||
| 	.ManufacturerStrIndex   = 0x01, | 	.ManufacturerStrIndex   = STRING_ID_Manufacturer, | ||||||
| 	.ProductStrIndex        = 0x02, | 	.ProductStrIndex        = STRING_ID_Product, | ||||||
| 	.SerialNumStrIndex      = NO_DESCRIPTOR, | 	.SerialNumStrIndex      = NO_DESCRIPTOR, | ||||||
| 
 | 
 | ||||||
| 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | ||||||
| @ -236,15 +236,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | |||||||
| 		case DTYPE_String: | 		case DTYPE_String: | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00: | 				case STRING_ID_Language: | ||||||
| 					Address = &LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01: | 				case STRING_ID_Manufacturer: | ||||||
| 					Address = &ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02: | 				case STRING_ID_Product: | ||||||
| 					Address = &ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
|  | |||||||
| @ -42,7 +42,7 @@ | |||||||
| 		#include <avr/pgmspace.h> | 		#include <avr/pgmspace.h> | ||||||
| 
 | 
 | ||||||
| 		#include "Config/AppConfig.h" | 		#include "Config/AppConfig.h" | ||||||
| 		 | 
 | ||||||
| 	/* Macros: */ | 	/* Macros: */ | ||||||
| 		/** Endpoint address of the CDC device-to-host notification IN endpoint. */ | 		/** Endpoint address of the CDC device-to-host notification IN endpoint. */ | ||||||
| 		#define CDC_NOTIFICATION_EPADDR        (ENDPOINT_DIR_IN  | 3) | 		#define CDC_NOTIFICATION_EPADDR        (ENDPOINT_DIR_IN  | 3) | ||||||
| @ -81,6 +81,17 @@ | |||||||
| 			USB_Descriptor_Endpoint_t             RNDIS_DataInEndpoint; | 			USB_Descriptor_Endpoint_t             RNDIS_DataInEndpoint; | ||||||
| 		} USB_Descriptor_Configuration_t; | 		} USB_Descriptor_Configuration_t; | ||||||
| 
 | 
 | ||||||
|  | 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 | ||||||
|  | 		 *  have a unique ID index associated with it, which can be used to refer to the string from | ||||||
|  | 		 *  other descriptors. | ||||||
|  | 		 */ | ||||||
|  | 		enum StringDescriptors_t | ||||||
|  | 		{ | ||||||
|  | 		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */ | ||||||
|  | 		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */ | ||||||
|  | 		    STRING_ID_Product       = 2, /**< Product string ID */ | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
| 	/* 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, | ||||||
|  | |||||||
| @ -58,8 +58,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = | |||||||
| 	.ProductID              = 0x2044, | 	.ProductID              = 0x2044, | ||||||
| 	.ReleaseNumber          = VERSION_BCD(00.01), | 	.ReleaseNumber          = VERSION_BCD(00.01), | ||||||
| 
 | 
 | ||||||
| 	.ManufacturerStrIndex   = 0x01, | 	.ManufacturerStrIndex   = STRING_ID_Manufacturer, | ||||||
| 	.ProductStrIndex        = 0x02, | 	.ProductStrIndex        = STRING_ID_Product, | ||||||
| 	.SerialNumStrIndex      = USE_INTERNAL_SERIAL, | 	.SerialNumStrIndex      = USE_INTERNAL_SERIAL, | ||||||
| 
 | 
 | ||||||
| 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | ||||||
| @ -237,15 +237,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | |||||||
| 		case DTYPE_String: | 		case DTYPE_String: | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00: | 				case STRING_ID_Language: | ||||||
| 					Address = &LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01: | 				case STRING_ID_Manufacturer: | ||||||
| 					Address = &ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02: | 				case STRING_ID_Product: | ||||||
| 					Address = &ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
|  | |||||||
| @ -79,6 +79,17 @@ | |||||||
| 			USB_Descriptor_Endpoint_t                CDC_DataInEndpoint; | 			USB_Descriptor_Endpoint_t                CDC_DataInEndpoint; | ||||||
| 		} USB_Descriptor_Configuration_t; | 		} USB_Descriptor_Configuration_t; | ||||||
| 
 | 
 | ||||||
|  | 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 | ||||||
|  | 		 *  have a unique ID index associated with it, which can be used to refer to the string from | ||||||
|  | 		 *  other descriptors. | ||||||
|  | 		 */ | ||||||
|  | 		enum StringDescriptors_t | ||||||
|  | 		{ | ||||||
|  | 		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */ | ||||||
|  | 		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */ | ||||||
|  | 		    STRING_ID_Product       = 2, /**< Product string ID */ | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
| 	/* 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, | ||||||
|  | |||||||
| @ -58,8 +58,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = | |||||||
| 	.ProductID              = 0x2068, | 	.ProductID              = 0x2068, | ||||||
| 	.ReleaseNumber          = VERSION_BCD(00.01), | 	.ReleaseNumber          = VERSION_BCD(00.01), | ||||||
| 
 | 
 | ||||||
| 	.ManufacturerStrIndex   = 0x01, | 	.ManufacturerStrIndex   = STRING_ID_Manufacturer, | ||||||
| 	.ProductStrIndex        = 0x02, | 	.ProductStrIndex        = STRING_ID_Product, | ||||||
| 	.SerialNumStrIndex      = USE_INTERNAL_SERIAL, | 	.SerialNumStrIndex      = USE_INTERNAL_SERIAL, | ||||||
| 
 | 
 | ||||||
| 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | ||||||
| @ -287,15 +287,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | |||||||
| 		case DTYPE_String: | 		case DTYPE_String: | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00: | 				case STRING_ID_Language: | ||||||
| 					Address = &LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01: | 				case STRING_ID_Manufacturer: | ||||||
| 					Address = &ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02: | 				case STRING_ID_Product: | ||||||
| 					Address = &ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
|  | |||||||
| @ -96,6 +96,17 @@ | |||||||
| 			USB_Descriptor_Endpoint_t                MS_DataOutEndpoint; | 			USB_Descriptor_Endpoint_t                MS_DataOutEndpoint; | ||||||
| 		} USB_Descriptor_Configuration_t; | 		} USB_Descriptor_Configuration_t; | ||||||
| 
 | 
 | ||||||
|  | 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 | ||||||
|  | 		 *  have a unique ID index associated with it, which can be used to refer to the string from | ||||||
|  | 		 *  other descriptors. | ||||||
|  | 		 */ | ||||||
|  | 		enum StringDescriptors_t | ||||||
|  | 		{ | ||||||
|  | 		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */ | ||||||
|  | 		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */ | ||||||
|  | 		    STRING_ID_Product       = 2, /**< Product string ID */ | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
| 	/* 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, | ||||||
|  | |||||||
| @ -77,8 +77,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = | |||||||
| 	.ProductID              = 0x2062, | 	.ProductID              = 0x2062, | ||||||
| 	.ReleaseNumber          = VERSION_BCD(00.01), | 	.ReleaseNumber          = VERSION_BCD(00.01), | ||||||
| 
 | 
 | ||||||
| 	.ManufacturerStrIndex   = 0x01, | 	.ManufacturerStrIndex   = STRING_ID_Manufacturer, | ||||||
| 	.ProductStrIndex        = 0x02, | 	.ProductStrIndex        = STRING_ID_Product, | ||||||
| 	.SerialNumStrIndex      = USE_INTERNAL_SERIAL, | 	.SerialNumStrIndex      = USE_INTERNAL_SERIAL, | ||||||
| 
 | 
 | ||||||
| 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | ||||||
| @ -307,15 +307,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | |||||||
| 		case DTYPE_String: | 		case DTYPE_String: | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00: | 				case STRING_ID_Language: | ||||||
| 					Address = &LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01: | 				case STRING_ID_Manufacturer: | ||||||
| 					Address = &ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02: | 				case STRING_ID_Product: | ||||||
| 					Address = &ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
|  | |||||||
| @ -91,6 +91,17 @@ | |||||||
| 	        USB_Descriptor_Endpoint_t                HID_ReportINEndpoint; | 	        USB_Descriptor_Endpoint_t                HID_ReportINEndpoint; | ||||||
| 		} USB_Descriptor_Configuration_t; | 		} USB_Descriptor_Configuration_t; | ||||||
| 
 | 
 | ||||||
|  | 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 | ||||||
|  | 		 *  have a unique ID index associated with it, which can be used to refer to the string from | ||||||
|  | 		 *  other descriptors. | ||||||
|  | 		 */ | ||||||
|  | 		enum StringDescriptors_t | ||||||
|  | 		{ | ||||||
|  | 		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */ | ||||||
|  | 		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */ | ||||||
|  | 		    STRING_ID_Product       = 2, /**< Product string ID */ | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
| 	/* 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, | ||||||
|  | |||||||
| @ -59,8 +59,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = | |||||||
| 	.ProductID              = 0x2065, | 	.ProductID              = 0x2065, | ||||||
| 	.ReleaseNumber          = VERSION_BCD(00.01), | 	.ReleaseNumber          = VERSION_BCD(00.01), | ||||||
| 
 | 
 | ||||||
| 	.ManufacturerStrIndex   = 0x01, | 	.ManufacturerStrIndex   = STRING_ID_Manufacturer, | ||||||
| 	.ProductStrIndex        = 0x02, | 	.ProductStrIndex        = STRING_ID_Product, | ||||||
| 	.SerialNumStrIndex      = USE_INTERNAL_SERIAL, | 	.SerialNumStrIndex      = USE_INTERNAL_SERIAL, | ||||||
| 
 | 
 | ||||||
| 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | ||||||
| @ -197,15 +197,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | |||||||
| 		case DTYPE_String: | 		case DTYPE_String: | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00: | 				case STRING_ID_Language: | ||||||
| 					Address = &LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01: | 				case STRING_ID_Manufacturer: | ||||||
| 					Address = &ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02: | 				case STRING_ID_Product: | ||||||
| 					Address = &ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
|  | |||||||
| @ -1,7 +1,7 @@ | |||||||
| /*
 | /*
 | ||||||
|              LUFA Library |              LUFA Library | ||||||
|      Copyright (C) Dean Camera, 2013. |      Copyright (C) Dean Camera, 2013. | ||||||
|                | 
 | ||||||
|   dean [at] fourwalledcubicle [dot] com |   dean [at] fourwalledcubicle [dot] com | ||||||
|            www.lufa-lib.org |            www.lufa-lib.org | ||||||
| */ | */ | ||||||
| @ -10,13 +10,13 @@ | |||||||
|   Copyright 2013  Dean Camera (dean [at] fourwalledcubicle [dot] com) |   Copyright 2013  Dean Camera (dean [at] fourwalledcubicle [dot] com) | ||||||
|   Copyright 2010  Peter Lawrence (majbthrd [at] gmail [dot] com) |   Copyright 2010  Peter Lawrence (majbthrd [at] gmail [dot] com) | ||||||
| 
 | 
 | ||||||
|   Permission to use, copy, modify, distribute, and sell this  |   Permission to use, copy, modify, distribute, and sell this | ||||||
|   software and its documentation for any purpose is hereby granted |   software and its documentation for any purpose is hereby granted | ||||||
|   without fee, provided that the above copyright notice appear in  |   without fee, provided that the above copyright notice appear in | ||||||
|   all copies and that both that the copyright notice and this |   all copies and that both that the copyright notice and this | ||||||
|   permission notice and warranty disclaimer appear in supporting  |   permission notice and warranty disclaimer appear in supporting | ||||||
|   documentation, and that the name of the author not be used in  |   documentation, and that the name of the author not be used in | ||||||
|   advertising or publicity pertaining to distribution of the  |   advertising or publicity pertaining to distribution of the | ||||||
|   software without specific, written prior permission. |   software without specific, written prior permission. | ||||||
| 
 | 
 | ||||||
|   The author disclaims all warranties with regard to this |   The author disclaims all warranties with regard to this | ||||||
| @ -33,7 +33,7 @@ | |||||||
|  * |  * | ||||||
|  *  Header file for Descriptors.c. |  *  Header file for Descriptors.c. | ||||||
|  */ |  */ | ||||||
|   | 
 | ||||||
| #ifndef _DESCRIPTORS_H_ | #ifndef _DESCRIPTORS_H_ | ||||||
| #define _DESCRIPTORS_H_ | #define _DESCRIPTORS_H_ | ||||||
| 
 | 
 | ||||||
| @ -66,7 +66,7 @@ | |||||||
| 		typedef struct | 		typedef struct | ||||||
| 		{ | 		{ | ||||||
| 			USB_Descriptor_Configuration_Header_t Config; | 			USB_Descriptor_Configuration_Header_t Config; | ||||||
| 			 | 
 | ||||||
| 			// Test and Measurement Interface
 | 			// Test and Measurement Interface
 | ||||||
| 			USB_Descriptor_Interface_t            TM_Interface; | 			USB_Descriptor_Interface_t            TM_Interface; | ||||||
| 			USB_Descriptor_Endpoint_t             TM_DataOutEndpoint; | 			USB_Descriptor_Endpoint_t             TM_DataOutEndpoint; | ||||||
| @ -74,6 +74,17 @@ | |||||||
| 			USB_Descriptor_Endpoint_t             TM_NotificationEndpoint; | 			USB_Descriptor_Endpoint_t             TM_NotificationEndpoint; | ||||||
| 		} USB_Descriptor_Configuration_t; | 		} USB_Descriptor_Configuration_t; | ||||||
| 
 | 
 | ||||||
|  | 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 | ||||||
|  | 		 *  have a unique ID index associated with it, which can be used to refer to the string from | ||||||
|  | 		 *  other descriptors. | ||||||
|  | 		 */ | ||||||
|  | 		enum StringDescriptors_t | ||||||
|  | 		{ | ||||||
|  | 		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */ | ||||||
|  | 		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */ | ||||||
|  | 		    STRING_ID_Product       = 2, /**< Product string ID */ | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
| 	/* 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, | ||||||
|  | |||||||
| @ -57,8 +57,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = | |||||||
| 	.ProductID              = 0x2047, | 	.ProductID              = 0x2047, | ||||||
| 	.ReleaseNumber          = VERSION_BCD(00.02), | 	.ReleaseNumber          = VERSION_BCD(00.02), | ||||||
| 
 | 
 | ||||||
| 	.ManufacturerStrIndex   = 0x01, | 	.ManufacturerStrIndex   = STRING_ID_Manufacturer, | ||||||
| 	.ProductStrIndex        = 0x02, | 	.ProductStrIndex        = STRING_ID_Product, | ||||||
| 	.SerialNumStrIndex      = NO_DESCRIPTOR, | 	.SerialNumStrIndex      = NO_DESCRIPTOR, | ||||||
| 
 | 
 | ||||||
| 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | ||||||
| @ -304,15 +304,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | |||||||
| 		case DTYPE_String: | 		case DTYPE_String: | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00: | 				case STRING_ID_Language: | ||||||
| 					Address = &LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01: | 				case STRING_ID_Manufacturer: | ||||||
| 					Address = &ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02: | 				case STRING_ID_Product: | ||||||
| 					Address = &ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
|  | |||||||
| @ -42,7 +42,7 @@ | |||||||
| 		#include <avr/pgmspace.h> | 		#include <avr/pgmspace.h> | ||||||
| 
 | 
 | ||||||
| 		#include "Config/AppConfig.h" | 		#include "Config/AppConfig.h" | ||||||
| 		 | 
 | ||||||
| 	/* Macros: */ | 	/* Macros: */ | ||||||
| 		/** Endpoint address of the Audio isochronous streaming data IN endpoint. */ | 		/** Endpoint address of the Audio isochronous streaming data IN endpoint. */ | ||||||
| 		#define AUDIO_STREAM_EPADDR          (ENDPOINT_DIR_IN | 1) | 		#define AUDIO_STREAM_EPADDR          (ENDPOINT_DIR_IN | 1) | ||||||
| @ -75,6 +75,17 @@ | |||||||
| 			USB_Audio_Descriptor_StreamEndpoint_Spc_t Audio_StreamEndpoint_SPC; | 			USB_Audio_Descriptor_StreamEndpoint_Spc_t Audio_StreamEndpoint_SPC; | ||||||
| 		} USB_Descriptor_Configuration_t; | 		} USB_Descriptor_Configuration_t; | ||||||
| 
 | 
 | ||||||
|  | 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 | ||||||
|  | 		 *  have a unique ID index associated with it, which can be used to refer to the string from | ||||||
|  | 		 *  other descriptors. | ||||||
|  | 		 */ | ||||||
|  | 		enum StringDescriptors_t | ||||||
|  | 		{ | ||||||
|  | 		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */ | ||||||
|  | 		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */ | ||||||
|  | 		    STRING_ID_Product       = 2, /**< Product string ID */ | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
| 	/* 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, | ||||||
|  | |||||||
| @ -57,8 +57,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = | |||||||
| 	.ProductID              = 0x2046, | 	.ProductID              = 0x2046, | ||||||
| 	.ReleaseNumber          = VERSION_BCD(00.02), | 	.ReleaseNumber          = VERSION_BCD(00.02), | ||||||
| 
 | 
 | ||||||
| 	.ManufacturerStrIndex   = 0x01, | 	.ManufacturerStrIndex   = STRING_ID_Manufacturer, | ||||||
| 	.ProductStrIndex        = 0x02, | 	.ProductStrIndex        = STRING_ID_Product, | ||||||
| 	.SerialNumStrIndex      = NO_DESCRIPTOR, | 	.SerialNumStrIndex      = NO_DESCRIPTOR, | ||||||
| 
 | 
 | ||||||
| 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | ||||||
| @ -304,15 +304,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | |||||||
| 		case DTYPE_String: | 		case DTYPE_String: | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00: | 				case STRING_ID_Language: | ||||||
| 					Address = &LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01: | 				case STRING_ID_Manufacturer: | ||||||
| 					Address = &ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02: | 				case STRING_ID_Product: | ||||||
| 					Address = &ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
|  | |||||||
| @ -75,6 +75,17 @@ | |||||||
| 			USB_Audio_Descriptor_StreamEndpoint_Spc_t Audio_StreamEndpoint_SPC; | 			USB_Audio_Descriptor_StreamEndpoint_Spc_t Audio_StreamEndpoint_SPC; | ||||||
| 		} USB_Descriptor_Configuration_t; | 		} USB_Descriptor_Configuration_t; | ||||||
| 
 | 
 | ||||||
|  | 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 | ||||||
|  | 		 *  have a unique ID index associated with it, which can be used to refer to the string from | ||||||
|  | 		 *  other descriptors. | ||||||
|  | 		 */ | ||||||
|  | 		enum StringDescriptors_t | ||||||
|  | 		{ | ||||||
|  | 		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */ | ||||||
|  | 		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */ | ||||||
|  | 		    STRING_ID_Product       = 2, /**< Product string ID */ | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
| 	/* 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, | ||||||
|  | |||||||
| @ -58,8 +58,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = | |||||||
| 	.ProductID              = 0x204E, | 	.ProductID              = 0x204E, | ||||||
| 	.ReleaseNumber          = VERSION_BCD(00.01), | 	.ReleaseNumber          = VERSION_BCD(00.01), | ||||||
| 
 | 
 | ||||||
| 	.ManufacturerStrIndex   = 0x01, | 	.ManufacturerStrIndex   = STRING_ID_Manufacturer, | ||||||
| 	.ProductStrIndex        = 0x02, | 	.ProductStrIndex        = STRING_ID_Product, | ||||||
| 	.SerialNumStrIndex      = USE_INTERNAL_SERIAL, | 	.SerialNumStrIndex      = USE_INTERNAL_SERIAL, | ||||||
| 
 | 
 | ||||||
| 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | ||||||
| @ -352,15 +352,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | |||||||
| 		case DTYPE_String: | 		case DTYPE_String: | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00: | 				case STRING_ID_Language: | ||||||
| 					Address = &LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01: | 				case STRING_ID_Manufacturer: | ||||||
| 					Address = &ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02: | 				case STRING_ID_Product: | ||||||
| 					Address = &ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
|  | |||||||
| @ -102,6 +102,17 @@ | |||||||
| 			USB_Descriptor_Endpoint_t                CDC2_DataInEndpoint; | 			USB_Descriptor_Endpoint_t                CDC2_DataInEndpoint; | ||||||
| 		} USB_Descriptor_Configuration_t; | 		} USB_Descriptor_Configuration_t; | ||||||
| 
 | 
 | ||||||
|  | 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 | ||||||
|  | 		 *  have a unique ID index associated with it, which can be used to refer to the string from | ||||||
|  | 		 *  other descriptors. | ||||||
|  | 		 */ | ||||||
|  | 		enum StringDescriptors_t | ||||||
|  | 		{ | ||||||
|  | 		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */ | ||||||
|  | 		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */ | ||||||
|  | 		    STRING_ID_Product       = 2, /**< Product string ID */ | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
| 	/* 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, | ||||||
|  | |||||||
| @ -83,8 +83,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = | |||||||
| 	.ProductID              = 0x204F, | 	.ProductID              = 0x204F, | ||||||
| 	.ReleaseNumber          = VERSION_BCD(00.01), | 	.ReleaseNumber          = VERSION_BCD(00.01), | ||||||
| 
 | 
 | ||||||
| 	.ManufacturerStrIndex   = 0x01, | 	.ManufacturerStrIndex   = STRING_ID_Manufacturer, | ||||||
| 	.ProductStrIndex        = 0x02, | 	.ProductStrIndex        = STRING_ID_Product, | ||||||
| 	.SerialNumStrIndex      = NO_DESCRIPTOR, | 	.SerialNumStrIndex      = NO_DESCRIPTOR, | ||||||
| 
 | 
 | ||||||
| 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | ||||||
| @ -222,15 +222,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | |||||||
| 		case DTYPE_String: | 		case DTYPE_String: | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00: | 				case STRING_ID_Language: | ||||||
| 					Address = &LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01: | 				case STRING_ID_Manufacturer: | ||||||
| 					Address = &ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02: | 				case STRING_ID_Product: | ||||||
| 					Address = &ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
|  | |||||||
| @ -42,7 +42,7 @@ | |||||||
| 		#include <avr/pgmspace.h> | 		#include <avr/pgmspace.h> | ||||||
| 
 | 
 | ||||||
| 		#include "Config/AppConfig.h" | 		#include "Config/AppConfig.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 | ||||||
| @ -59,6 +59,17 @@ | |||||||
| 	        USB_Descriptor_Endpoint_t             HID_ReportOUTEndpoint; | 	        USB_Descriptor_Endpoint_t             HID_ReportOUTEndpoint; | ||||||
| 		} USB_Descriptor_Configuration_t; | 		} USB_Descriptor_Configuration_t; | ||||||
| 
 | 
 | ||||||
|  | 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 | ||||||
|  | 		 *  have a unique ID index associated with it, which can be used to refer to the string from | ||||||
|  | 		 *  other descriptors. | ||||||
|  | 		 */ | ||||||
|  | 		enum StringDescriptors_t | ||||||
|  | 		{ | ||||||
|  | 		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */ | ||||||
|  | 		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */ | ||||||
|  | 		    STRING_ID_Product       = 2, /**< Product string ID */ | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
| 	/* Macros: */ | 	/* Macros: */ | ||||||
| 		/** Endpoint address of the Generic HID reporting IN endpoint. */ | 		/** Endpoint address of the Generic HID reporting IN endpoint. */ | ||||||
| 		#define GENERIC_IN_EPADDR         (ENDPOINT_DIR_IN  | 1) | 		#define GENERIC_IN_EPADDR         (ENDPOINT_DIR_IN  | 1) | ||||||
|  | |||||||
| @ -95,8 +95,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = | |||||||
| 	.ProductID              = 0x2043, | 	.ProductID              = 0x2043, | ||||||
| 	.ReleaseNumber          = VERSION_BCD(00.01), | 	.ReleaseNumber          = VERSION_BCD(00.01), | ||||||
| 
 | 
 | ||||||
| 	.ManufacturerStrIndex   = 0x01, | 	.ManufacturerStrIndex   = STRING_ID_Manufacturer, | ||||||
| 	.ProductStrIndex        = 0x02, | 	.ProductStrIndex        = STRING_ID_Product, | ||||||
| 	.SerialNumStrIndex      = NO_DESCRIPTOR, | 	.SerialNumStrIndex      = NO_DESCRIPTOR, | ||||||
| 
 | 
 | ||||||
| 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | ||||||
| @ -224,15 +224,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | |||||||
| 		case DTYPE_String: | 		case DTYPE_String: | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00: | 				case STRING_ID_Language: | ||||||
| 					Address = &LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01: | 				case STRING_ID_Manufacturer: | ||||||
| 					Address = &ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02: | 				case STRING_ID_Product: | ||||||
| 					Address = &ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
|  | |||||||
| @ -56,6 +56,17 @@ | |||||||
| 	        USB_Descriptor_Endpoint_t             HID_ReportINEndpoint; | 	        USB_Descriptor_Endpoint_t             HID_ReportINEndpoint; | ||||||
| 		} USB_Descriptor_Configuration_t; | 		} USB_Descriptor_Configuration_t; | ||||||
| 
 | 
 | ||||||
|  | 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 | ||||||
|  | 		 *  have a unique ID index associated with it, which can be used to refer to the string from | ||||||
|  | 		 *  other descriptors. | ||||||
|  | 		 */ | ||||||
|  | 		enum StringDescriptors_t | ||||||
|  | 		{ | ||||||
|  | 		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */ | ||||||
|  | 		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */ | ||||||
|  | 		    STRING_ID_Product       = 2, /**< Product string ID */ | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
| 	/* Macros: */ | 	/* Macros: */ | ||||||
| 		/** Endpoint address of the Joystick HID reporting IN endpoint. */ | 		/** Endpoint address of the Joystick HID reporting IN endpoint. */ | ||||||
| 		#define JOYSTICK_EPADDR           (ENDPOINT_DIR_IN | 1) | 		#define JOYSTICK_EPADDR           (ENDPOINT_DIR_IN | 1) | ||||||
|  | |||||||
| @ -100,8 +100,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = | |||||||
| 	.ProductID              = 0x2042, | 	.ProductID              = 0x2042, | ||||||
| 	.ReleaseNumber          = VERSION_BCD(00.01), | 	.ReleaseNumber          = VERSION_BCD(00.01), | ||||||
| 
 | 
 | ||||||
| 	.ManufacturerStrIndex   = 0x01, | 	.ManufacturerStrIndex   = STRING_ID_Manufacturer, | ||||||
| 	.ProductStrIndex        = 0x02, | 	.ProductStrIndex        = STRING_ID_Product, | ||||||
| 	.SerialNumStrIndex      = NO_DESCRIPTOR, | 	.SerialNumStrIndex      = NO_DESCRIPTOR, | ||||||
| 
 | 
 | ||||||
| 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | ||||||
| @ -239,15 +239,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | |||||||
| 		case DTYPE_String: | 		case DTYPE_String: | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00: | 				case STRING_ID_Language: | ||||||
| 					Address = &LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01: | 				case STRING_ID_Manufacturer: | ||||||
| 					Address = &ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02: | 				case STRING_ID_Product: | ||||||
| 					Address = &ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
|  | |||||||
| @ -58,6 +58,17 @@ | |||||||
| 	        USB_Descriptor_Endpoint_t             HID_ReportOUTEndpoint; | 	        USB_Descriptor_Endpoint_t             HID_ReportOUTEndpoint; | ||||||
| 		} USB_Descriptor_Configuration_t; | 		} USB_Descriptor_Configuration_t; | ||||||
| 
 | 
 | ||||||
|  | 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 | ||||||
|  | 		 *  have a unique ID index associated with it, which can be used to refer to the string from | ||||||
|  | 		 *  other descriptors. | ||||||
|  | 		 */ | ||||||
|  | 		enum StringDescriptors_t | ||||||
|  | 		{ | ||||||
|  | 		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */ | ||||||
|  | 		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */ | ||||||
|  | 		    STRING_ID_Product       = 2, /**< Product string ID */ | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
| 	/* Macros: */ | 	/* Macros: */ | ||||||
| 		/** Endpoint address of the Keyboard HID reporting IN endpoint. */ | 		/** Endpoint address of the Keyboard HID reporting IN endpoint. */ | ||||||
| 		#define KEYBOARD_IN_EPADDR        (ENDPOINT_DIR_IN  | 1) | 		#define KEYBOARD_IN_EPADDR        (ENDPOINT_DIR_IN  | 1) | ||||||
|  | |||||||
| @ -135,8 +135,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = | |||||||
| 	.ProductID              = 0x204D, | 	.ProductID              = 0x204D, | ||||||
| 	.ReleaseNumber          = VERSION_BCD(00.01), | 	.ReleaseNumber          = VERSION_BCD(00.01), | ||||||
| 
 | 
 | ||||||
| 	.ManufacturerStrIndex   = 0x01, | 	.ManufacturerStrIndex   = STRING_ID_Manufacturer, | ||||||
| 	.ProductStrIndex        = 0x02, | 	.ProductStrIndex        = STRING_ID_Product, | ||||||
| 	.SerialNumStrIndex      = NO_DESCRIPTOR, | 	.SerialNumStrIndex      = NO_DESCRIPTOR, | ||||||
| 
 | 
 | ||||||
| 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | ||||||
| @ -311,15 +311,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | |||||||
| 		case DTYPE_String: | 		case DTYPE_String: | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00: | 				case STRING_ID_Language: | ||||||
| 					Address = &LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01: | 				case STRING_ID_Manufacturer: | ||||||
| 					Address = &ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02: | 				case STRING_ID_Product: | ||||||
| 					Address = &ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
|  | |||||||
| @ -63,6 +63,17 @@ | |||||||
| 			USB_Descriptor_Endpoint_t             HID2_ReportINEndpoint; | 			USB_Descriptor_Endpoint_t             HID2_ReportINEndpoint; | ||||||
| 		} USB_Descriptor_Configuration_t; | 		} USB_Descriptor_Configuration_t; | ||||||
| 
 | 
 | ||||||
|  | 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 | ||||||
|  | 		 *  have a unique ID index associated with it, which can be used to refer to the string from | ||||||
|  | 		 *  other descriptors. | ||||||
|  | 		 */ | ||||||
|  | 		enum StringDescriptors_t | ||||||
|  | 		{ | ||||||
|  | 		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */ | ||||||
|  | 		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */ | ||||||
|  | 		    STRING_ID_Product       = 2, /**< Product string ID */ | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
| 	/* Macros: */ | 	/* Macros: */ | ||||||
| 		/** Endpoint address of the Keyboard HID reporting IN endpoint. */ | 		/** Endpoint address of the Keyboard HID reporting IN endpoint. */ | ||||||
| 		#define KEYBOARD_IN_EPADDR        (ENDPOINT_DIR_IN  | 1) | 		#define KEYBOARD_IN_EPADDR        (ENDPOINT_DIR_IN  | 1) | ||||||
|  | |||||||
| @ -57,8 +57,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = | |||||||
| 	.ProductID              = 0x2048, | 	.ProductID              = 0x2048, | ||||||
| 	.ReleaseNumber          = VERSION_BCD(00.01), | 	.ReleaseNumber          = VERSION_BCD(00.01), | ||||||
| 
 | 
 | ||||||
| 	.ManufacturerStrIndex   = 0x01, | 	.ManufacturerStrIndex   = STRING_ID_Manufacturer, | ||||||
| 	.ProductStrIndex        = 0x02, | 	.ProductStrIndex        = STRING_ID_Product, | ||||||
| 	.SerialNumStrIndex      = NO_DESCRIPTOR, | 	.SerialNumStrIndex      = NO_DESCRIPTOR, | ||||||
| 
 | 
 | ||||||
| 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | ||||||
| @ -306,15 +306,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | |||||||
| 		case DTYPE_String: | 		case DTYPE_String: | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00: | 				case STRING_ID_Language: | ||||||
| 					Address = &LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01: | 				case STRING_ID_Manufacturer: | ||||||
| 					Address = &ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02: | 				case STRING_ID_Product: | ||||||
| 					Address = &ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
|  | |||||||
| @ -77,6 +77,17 @@ | |||||||
| 			USB_MIDI_Descriptor_Jack_Endpoint_t       MIDI_Out_Jack_Endpoint_SPC; | 			USB_MIDI_Descriptor_Jack_Endpoint_t       MIDI_Out_Jack_Endpoint_SPC; | ||||||
| 		} USB_Descriptor_Configuration_t; | 		} USB_Descriptor_Configuration_t; | ||||||
| 
 | 
 | ||||||
|  | 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 | ||||||
|  | 		 *  have a unique ID index associated with it, which can be used to refer to the string from | ||||||
|  | 		 *  other descriptors. | ||||||
|  | 		 */ | ||||||
|  | 		enum StringDescriptors_t | ||||||
|  | 		{ | ||||||
|  | 		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */ | ||||||
|  | 		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */ | ||||||
|  | 		    STRING_ID_Product       = 2, /**< Product string ID */ | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
| 	/* 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, | ||||||
|  | |||||||
| @ -58,8 +58,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = | |||||||
| 	.ProductID              = 0x2045, | 	.ProductID              = 0x2045, | ||||||
| 	.ReleaseNumber          = VERSION_BCD(00.01), | 	.ReleaseNumber          = VERSION_BCD(00.01), | ||||||
| 
 | 
 | ||||||
| 	.ManufacturerStrIndex   = 0x01, | 	.ManufacturerStrIndex   = STRING_ID_Manufacturer, | ||||||
| 	.ProductStrIndex        = 0x02, | 	.ProductStrIndex        = STRING_ID_Product, | ||||||
| 	.SerialNumStrIndex      = USE_INTERNAL_SERIAL, | 	.SerialNumStrIndex      = USE_INTERNAL_SERIAL, | ||||||
| 
 | 
 | ||||||
| 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | ||||||
| @ -186,15 +186,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | |||||||
| 		case DTYPE_String: | 		case DTYPE_String: | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00: | 				case STRING_ID_Language: | ||||||
| 					Address = &LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01: | 				case STRING_ID_Manufacturer: | ||||||
| 					Address = &ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02: | 				case STRING_ID_Product: | ||||||
| 					Address = &ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
|  | |||||||
| @ -68,6 +68,17 @@ | |||||||
| 			USB_Descriptor_Endpoint_t             MS_DataOutEndpoint; | 			USB_Descriptor_Endpoint_t             MS_DataOutEndpoint; | ||||||
| 		} USB_Descriptor_Configuration_t; | 		} USB_Descriptor_Configuration_t; | ||||||
| 
 | 
 | ||||||
|  | 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 | ||||||
|  | 		 *  have a unique ID index associated with it, which can be used to refer to the string from | ||||||
|  | 		 *  other descriptors. | ||||||
|  | 		 */ | ||||||
|  | 		enum StringDescriptors_t | ||||||
|  | 		{ | ||||||
|  | 		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */ | ||||||
|  | 		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */ | ||||||
|  | 		    STRING_ID_Product       = 2, /**< Product string ID */ | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
| 	/* 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, | ||||||
|  | |||||||
| @ -95,8 +95,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = | |||||||
| 	.ProductID              = 0x2041, | 	.ProductID              = 0x2041, | ||||||
| 	.ReleaseNumber          = VERSION_BCD(00.01), | 	.ReleaseNumber          = VERSION_BCD(00.01), | ||||||
| 
 | 
 | ||||||
| 	.ManufacturerStrIndex   = 0x01, | 	.ManufacturerStrIndex   = STRING_ID_Manufacturer, | ||||||
| 	.ProductStrIndex        = 0x02, | 	.ProductStrIndex        = STRING_ID_Product, | ||||||
| 	.SerialNumStrIndex      = NO_DESCRIPTOR, | 	.SerialNumStrIndex      = NO_DESCRIPTOR, | ||||||
| 
 | 
 | ||||||
| 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | ||||||
| @ -224,15 +224,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | |||||||
| 		case DTYPE_String: | 		case DTYPE_String: | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00: | 				case STRING_ID_Language: | ||||||
| 					Address = &LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01: | 				case STRING_ID_Manufacturer: | ||||||
| 					Address = &ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02: | 				case STRING_ID_Product: | ||||||
| 					Address = &ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
|  | |||||||
| @ -63,6 +63,17 @@ | |||||||
| 	        USB_Descriptor_Endpoint_t             HID_ReportINEndpoint; | 	        USB_Descriptor_Endpoint_t             HID_ReportINEndpoint; | ||||||
| 		} USB_Descriptor_Configuration_t; | 		} USB_Descriptor_Configuration_t; | ||||||
| 
 | 
 | ||||||
|  | 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 | ||||||
|  | 		 *  have a unique ID index associated with it, which can be used to refer to the string from | ||||||
|  | 		 *  other descriptors. | ||||||
|  | 		 */ | ||||||
|  | 		enum StringDescriptors_t | ||||||
|  | 		{ | ||||||
|  | 		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */ | ||||||
|  | 		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */ | ||||||
|  | 		    STRING_ID_Product       = 2, /**< Product string ID */ | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
| 	/* 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, | ||||||
|  | |||||||
| @ -57,8 +57,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = | |||||||
| 	.ProductID              = 0x204C, | 	.ProductID              = 0x204C, | ||||||
| 	.ReleaseNumber          = VERSION_BCD(00.01), | 	.ReleaseNumber          = VERSION_BCD(00.01), | ||||||
| 
 | 
 | ||||||
| 	.ManufacturerStrIndex   = 0x01, | 	.ManufacturerStrIndex   = STRING_ID_Manufacturer, | ||||||
| 	.ProductStrIndex        = 0x02, | 	.ProductStrIndex        = STRING_ID_Product, | ||||||
| 	.SerialNumStrIndex      = NO_DESCRIPTOR, | 	.SerialNumStrIndex      = NO_DESCRIPTOR, | ||||||
| 
 | 
 | ||||||
| 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | ||||||
| @ -236,15 +236,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | |||||||
| 		case DTYPE_String: | 		case DTYPE_String: | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00: | 				case STRING_ID_Language: | ||||||
| 					Address = &LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01: | 				case STRING_ID_Manufacturer: | ||||||
| 					Address = &ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02: | 				case STRING_ID_Product: | ||||||
| 					Address = &ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
|  | |||||||
| @ -81,6 +81,17 @@ | |||||||
| 			USB_Descriptor_Endpoint_t             RNDIS_DataInEndpoint; | 			USB_Descriptor_Endpoint_t             RNDIS_DataInEndpoint; | ||||||
| 		} USB_Descriptor_Configuration_t; | 		} USB_Descriptor_Configuration_t; | ||||||
| 
 | 
 | ||||||
|  | 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 | ||||||
|  | 		 *  have a unique ID index associated with it, which can be used to refer to the string from | ||||||
|  | 		 *  other descriptors. | ||||||
|  | 		 */ | ||||||
|  | 		enum StringDescriptors_t | ||||||
|  | 		{ | ||||||
|  | 		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */ | ||||||
|  | 		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */ | ||||||
|  | 		    STRING_ID_Product       = 2, /**< Product string ID */ | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
| 	/* 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, | ||||||
|  | |||||||
| @ -58,8 +58,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = | |||||||
| 	.ProductID              = 0x2044, | 	.ProductID              = 0x2044, | ||||||
| 	.ReleaseNumber          = VERSION_BCD(00.01), | 	.ReleaseNumber          = VERSION_BCD(00.01), | ||||||
| 
 | 
 | ||||||
| 	.ManufacturerStrIndex   = 0x01, | 	.ManufacturerStrIndex   = STRING_ID_Manufacturer, | ||||||
| 	.ProductStrIndex        = 0x02, | 	.ProductStrIndex        = STRING_ID_Product, | ||||||
| 	.SerialNumStrIndex      = USE_INTERNAL_SERIAL, | 	.SerialNumStrIndex      = USE_INTERNAL_SERIAL, | ||||||
| 
 | 
 | ||||||
| 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | ||||||
| @ -237,15 +237,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | |||||||
| 		case DTYPE_String: | 		case DTYPE_String: | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00: | 				case STRING_ID_Language: | ||||||
| 					Address = &LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01: | 				case STRING_ID_Manufacturer: | ||||||
| 					Address = &ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02: | 				case STRING_ID_Product: | ||||||
| 					Address = &ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
|  | |||||||
| @ -79,6 +79,17 @@ | |||||||
| 			USB_Descriptor_Endpoint_t                CDC_DataInEndpoint; | 			USB_Descriptor_Endpoint_t                CDC_DataInEndpoint; | ||||||
| 		} USB_Descriptor_Configuration_t; | 		} USB_Descriptor_Configuration_t; | ||||||
| 
 | 
 | ||||||
|  | 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 | ||||||
|  | 		 *  have a unique ID index associated with it, which can be used to refer to the string from | ||||||
|  | 		 *  other descriptors. | ||||||
|  | 		 */ | ||||||
|  | 		enum StringDescriptors_t | ||||||
|  | 		{ | ||||||
|  | 		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */ | ||||||
|  | 		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */ | ||||||
|  | 		    STRING_ID_Product       = 2, /**< Product string ID */ | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
| 	/* 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, | ||||||
|  | |||||||
| @ -76,8 +76,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = | |||||||
| 	.ProductID              = 0x2041, | 	.ProductID              = 0x2041, | ||||||
| 	.ReleaseNumber          = 0x0000, | 	.ReleaseNumber          = 0x0000, | ||||||
| 
 | 
 | ||||||
| 	.ManufacturerStrIndex   = 0x01, | 	.ManufacturerStrIndex   = STRING_ID_Manufacturer, | ||||||
| 	.ProductStrIndex        = 0x02, | 	.ProductStrIndex        = STRING_ID_Product, | ||||||
| 	.SerialNumStrIndex      = NO_DESCRIPTOR, | 	.SerialNumStrIndex      = NO_DESCRIPTOR, | ||||||
| 
 | 
 | ||||||
| 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | ||||||
| @ -205,15 +205,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | |||||||
| 		case DTYPE_String: | 		case DTYPE_String: | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00: | 				case STRING_ID_Language: | ||||||
| 					Address = &LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01: | 				case STRING_ID_Manufacturer: | ||||||
| 					Address = &ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02: | 				case STRING_ID_Product: | ||||||
| 					Address = &ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
|  | |||||||
| @ -56,6 +56,17 @@ | |||||||
| 	        USB_Descriptor_Endpoint_t             HID_ReportINEndpoint; | 	        USB_Descriptor_Endpoint_t             HID_ReportINEndpoint; | ||||||
| 		} USB_Descriptor_Configuration_t; | 		} USB_Descriptor_Configuration_t; | ||||||
| 
 | 
 | ||||||
|  | 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 | ||||||
|  | 		 *  have a unique ID index associated with it, which can be used to refer to the string from | ||||||
|  | 		 *  other descriptors. | ||||||
|  | 		 */ | ||||||
|  | 		enum StringDescriptors_t | ||||||
|  | 		{ | ||||||
|  | 		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */ | ||||||
|  | 		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */ | ||||||
|  | 		    STRING_ID_Product       = 2, /**< Product string ID */ | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
| 	/* Macros: */ | 	/* Macros: */ | ||||||
| 		/** Endpoint address of the Mouse HID reporting IN endpoint. */ | 		/** Endpoint address of the Mouse HID reporting IN endpoint. */ | ||||||
| 		#define MOUSE_EPADDR              (ENDPOINT_DIR_IN | 1) | 		#define MOUSE_EPADDR              (ENDPOINT_DIR_IN | 1) | ||||||
|  | |||||||
| @ -43,7 +43,7 @@ | |||||||
| 
 | 
 | ||||||
| 	/** Current AVRISP data IN endpoint address. */ | 	/** Current AVRISP data IN endpoint address. */ | ||||||
| 	uint8_t AVRISP_CurrDataINEndpointAddress; | 	uint8_t AVRISP_CurrDataINEndpointAddress; | ||||||
| 	 | 
 | ||||||
| 	/** Saved AVRISP data IN endpoint address in EEPROM. */ | 	/** Saved AVRISP data IN endpoint address in EEPROM. */ | ||||||
| 	uint8_t AVRISP_CurrDataINEndpointAddress_EEPROM EEMEM; | 	uint8_t AVRISP_CurrDataINEndpointAddress_EEPROM EEMEM; | ||||||
| #endif | #endif | ||||||
| @ -68,9 +68,9 @@ const USB_Descriptor_Device_t PROGMEM AVRISP_DeviceDescriptor = | |||||||
| 	.ProductID              = 0x2104, | 	.ProductID              = 0x2104, | ||||||
| 	.ReleaseNumber          = VERSION_BCD(02.00), | 	.ReleaseNumber          = VERSION_BCD(02.00), | ||||||
| 
 | 
 | ||||||
| 	.ManufacturerStrIndex   = 0x01, | 	.ManufacturerStrIndex   = STRING_ID_Manufacturer, | ||||||
| 	.ProductStrIndex        = 0x02, | 	.ProductStrIndex        = STRING_ID_Product, | ||||||
| 	.SerialNumStrIndex      = 0x03, | 	.SerialNumStrIndex      = STRING_ID_Serial, | ||||||
| 
 | 
 | ||||||
| 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | ||||||
| }; | }; | ||||||
| @ -177,7 +177,7 @@ const USB_Descriptor_String_t PROGMEM AVRISP_ProductString = | |||||||
| USB_Descriptor_String_t AVRISP_SerialString = | USB_Descriptor_String_t AVRISP_SerialString = | ||||||
| { | { | ||||||
| 	.Header                 = {.Size = USB_STRING_LEN(13), .Type = DTYPE_String}, | 	.Header                 = {.Size = USB_STRING_LEN(13), .Type = DTYPE_String}, | ||||||
| 	 | 
 | ||||||
| 	.UnicodeString          = L"000200012345\0" // Note: Real AVRISP-MKII has the embedded NUL byte, bug in firmware?
 | 	.UnicodeString          = L"000200012345\0" // Note: Real AVRISP-MKII has the embedded NUL byte, bug in firmware?
 | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| @ -199,7 +199,7 @@ uint16_t AVRISP_GetDescriptor(const uint16_t wValue, | |||||||
| 	uint16_t    Size    = NO_DESCRIPTOR; | 	uint16_t    Size    = NO_DESCRIPTOR; | ||||||
| 
 | 
 | ||||||
| 	*DescriptorMemorySpace = MEMSPACE_FLASH; | 	*DescriptorMemorySpace = MEMSPACE_FLASH; | ||||||
| 	 | 
 | ||||||
| 	switch (DescriptorType) | 	switch (DescriptorType) | ||||||
| 	{ | 	{ | ||||||
| 		case DTYPE_Device: | 		case DTYPE_Device: | ||||||
| @ -219,25 +219,25 @@ uint16_t AVRISP_GetDescriptor(const uint16_t wValue, | |||||||
| 		case DTYPE_String: | 		case DTYPE_String: | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00: | 				case STRING_ID_Language: | ||||||
| 					Address = &AVRISP_LanguageString; | 					Address = &AVRISP_LanguageString; | ||||||
| 					Size    = pgm_read_byte(&AVRISP_LanguageString.Header.Size); | 					Size    = pgm_read_byte(&AVRISP_LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01: | 				case STRING_ID_Manufacturer: | ||||||
| 					Address = &AVRISP_ManufacturerString; | 					Address = &AVRISP_ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&AVRISP_ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&AVRISP_ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02: | 				case STRING_ID_Product: | ||||||
| 					Address = &AVRISP_ProductString; | 					Address = &AVRISP_ProductString; | ||||||
| 					Size    = pgm_read_byte(&AVRISP_ProductString.Header.Size); | 					Size    = pgm_read_byte(&AVRISP_ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x03: | 				case STRING_ID_Serial: | ||||||
| 					Address = &AVRISP_SerialString; | 					Address = &AVRISP_SerialString; | ||||||
| 					Size    = AVRISP_SerialString.Header.Size; | 					Size    = AVRISP_SerialString.Header.Size; | ||||||
| 					 | 
 | ||||||
| 					/* Update serial number to have a different serial based on the current endpoint address */ | 					/* Update serial number to have a different serial based on the current endpoint address */ | ||||||
| 					((uint16_t*)&AVRISP_SerialString.UnicodeString)[6] = cpu_to_le16('0' + (AVRISP_DATA_IN_EPADDR & ENDPOINT_EPNUM_MASK)); | 					((uint16_t*)&AVRISP_SerialString.UnicodeString)[6] = cpu_to_le16('0' + (AVRISP_DATA_IN_EPADDR & ENDPOINT_EPNUM_MASK)); | ||||||
| 					 | 
 | ||||||
| 					*DescriptorMemorySpace = MEMSPACE_RAM; | 					*DescriptorMemorySpace = MEMSPACE_RAM; | ||||||
| 					break; | 					break; | ||||||
| 			} | 			} | ||||||
| @ -259,7 +259,7 @@ uint16_t AVRISP_GetDescriptor(const uint16_t wValue, | |||||||
|  *  change. |  *  change. | ||||||
|  */ |  */ | ||||||
| void CheckExternalReset(void) | void CheckExternalReset(void) | ||||||
| {	 | { | ||||||
| 	/* If an external reset occurred, we need to change compatibility mode */ | 	/* If an external reset occurred, we need to change compatibility mode */ | ||||||
| 	AVRISP_NeedCompatibilitySwitch = (MCUSR == (1 << EXTRF)); | 	AVRISP_NeedCompatibilitySwitch = (MCUSR == (1 << EXTRF)); | ||||||
| 
 | 
 | ||||||
| @ -277,7 +277,7 @@ void UpdateCurrentCompatibilityMode(void) | |||||||
| { | { | ||||||
| 	/* Load the current IN endpoint address stored in EEPROM */ | 	/* Load the current IN endpoint address stored in EEPROM */ | ||||||
| 	AVRISP_CurrDataINEndpointAddress = eeprom_read_byte(&AVRISP_CurrDataINEndpointAddress_EEPROM); | 	AVRISP_CurrDataINEndpointAddress = eeprom_read_byte(&AVRISP_CurrDataINEndpointAddress_EEPROM); | ||||||
| 	 | 
 | ||||||
| 	/* Check if we need to switch compatibility modes */ | 	/* Check if we need to switch compatibility modes */ | ||||||
| 	if (AVRISP_NeedCompatibilitySwitch) | 	if (AVRISP_NeedCompatibilitySwitch) | ||||||
| 	{ | 	{ | ||||||
| @ -303,7 +303,7 @@ void UpdateCurrentCompatibilityMode(void) | |||||||
| 			{ | 			{ | ||||||
| 				LEDs_ToggleLEDs(LEDS_ALL_LEDS); | 				LEDs_ToggleLEDs(LEDS_ALL_LEDS); | ||||||
| 				Delay_MS(100); | 				Delay_MS(100); | ||||||
| 			}		 | 			} | ||||||
| 			break; | 			break; | ||||||
| 		case AVRISP_DATA_IN_EPADDR_LIBUSB: | 		case AVRISP_DATA_IN_EPADDR_LIBUSB: | ||||||
| 			/* Five flashes for libUSB compatibility mode */ | 			/* Five flashes for libUSB compatibility mode */ | ||||||
| @ -314,7 +314,7 @@ void UpdateCurrentCompatibilityMode(void) | |||||||
| 			} | 			} | ||||||
| 			break; | 			break; | ||||||
| 	} | 	} | ||||||
| 	 | 
 | ||||||
| 	Delay_MS(500); | 	Delay_MS(500); | ||||||
| } | } | ||||||
| #endif | #endif | ||||||
|  | |||||||
| @ -41,7 +41,7 @@ | |||||||
| 
 | 
 | ||||||
| 		#include <LUFA/Drivers/USB/USB.h> | 		#include <LUFA/Drivers/USB/USB.h> | ||||||
| 		#include <LUFA/Drivers/Board/LEDs.h> | 		#include <LUFA/Drivers/Board/LEDs.h> | ||||||
| 		 | 
 | ||||||
| 		#include "Config/AppConfig.h" | 		#include "Config/AppConfig.h" | ||||||
| 
 | 
 | ||||||
| 	/* Preprocessor Checks: */ | 	/* Preprocessor Checks: */ | ||||||
| @ -67,7 +67,7 @@ | |||||||
| 			/** Endpoint address of the AVRISP data IN endpoint. */ | 			/** Endpoint address of the AVRISP data IN endpoint. */ | ||||||
| 			#define AVRISP_DATA_IN_EPADDR      AVRISP_DATA_IN_EPADDR_JUNGO | 			#define AVRISP_DATA_IN_EPADDR      AVRISP_DATA_IN_EPADDR_JUNGO | ||||||
| 		#endif | 		#endif | ||||||
| 		 | 
 | ||||||
| 		/** Size in bytes of the AVRISP data endpoint. */ | 		/** Size in bytes of the AVRISP data endpoint. */ | ||||||
| 		#define AVRISP_DATA_EPSIZE             64 | 		#define AVRISP_DATA_EPSIZE             64 | ||||||
| 
 | 
 | ||||||
| @ -86,11 +86,23 @@ | |||||||
| 			USB_Descriptor_Endpoint_t                AVRISP_DataOutEndpoint; | 			USB_Descriptor_Endpoint_t                AVRISP_DataOutEndpoint; | ||||||
| 		} AVRISP_USB_Descriptor_Configuration_t; | 		} AVRISP_USB_Descriptor_Configuration_t; | ||||||
| 
 | 
 | ||||||
|  | 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 | ||||||
|  | 		 *  have a unique ID index associated with it, which can be used to refer to the string from | ||||||
|  | 		 *  other descriptors. | ||||||
|  | 		 */ | ||||||
|  | 		enum StringDescriptors_t | ||||||
|  | 		{ | ||||||
|  | 		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */ | ||||||
|  | 		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */ | ||||||
|  | 		    STRING_ID_Product       = 2, /**< Product string ID */ | ||||||
|  | 		    STRING_ID_Serial        = 3, /**< Serial number string ID */ | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
| 	/* External Variables: */ | 	/* External Variables: */ | ||||||
| 		#if defined(RESET_TOGGLES_LIBUSB_COMPAT) | 		#if defined(RESET_TOGGLES_LIBUSB_COMPAT) | ||||||
| 			extern uint8_t AVRISP_CurrDataINEndpointAddress; | 			extern uint8_t AVRISP_CurrDataINEndpointAddress; | ||||||
| 		#endif | 		#endif | ||||||
| 		 | 
 | ||||||
| 	/* Function Prototypes: */ | 	/* Function Prototypes: */ | ||||||
| 		uint16_t AVRISP_GetDescriptor(const uint16_t wValue, | 		uint16_t AVRISP_GetDescriptor(const uint16_t wValue, | ||||||
| 		                              const uint8_t wIndex, | 		                              const uint8_t wIndex, | ||||||
|  | |||||||
| @ -57,8 +57,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = | |||||||
| 	.ProductID              = 0x2060, | 	.ProductID              = 0x2060, | ||||||
| 	.ReleaseNumber          = VERSION_BCD(00.01), | 	.ReleaseNumber          = VERSION_BCD(00.01), | ||||||
| 
 | 
 | ||||||
| 	.ManufacturerStrIndex   = 0x01, | 	.ManufacturerStrIndex   = STRING_ID_Manufacturer, | ||||||
| 	.ProductStrIndex        = 0x02, | 	.ProductStrIndex        = STRING_ID_Product, | ||||||
| 	.SerialNumStrIndex      = USE_INTERNAL_SERIAL, | 	.SerialNumStrIndex      = USE_INTERNAL_SERIAL, | ||||||
| 
 | 
 | ||||||
| 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | ||||||
| @ -236,15 +236,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | |||||||
| 		case DTYPE_String: | 		case DTYPE_String: | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00: | 				case STRING_ID_Language: | ||||||
| 					Address = &LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01: | 				case STRING_ID_Manufacturer: | ||||||
| 					Address = &ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02: | 				case STRING_ID_Product: | ||||||
| 					Address = &ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
|  | |||||||
| @ -81,6 +81,17 @@ | |||||||
| 			USB_Descriptor_Endpoint_t                CDC_DataInEndpoint; | 			USB_Descriptor_Endpoint_t                CDC_DataInEndpoint; | ||||||
| 		} USB_Descriptor_Configuration_t; | 		} USB_Descriptor_Configuration_t; | ||||||
| 
 | 
 | ||||||
|  | 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 | ||||||
|  | 		 *  have a unique ID index associated with it, which can be used to refer to the string from | ||||||
|  | 		 *  other descriptors. | ||||||
|  | 		 */ | ||||||
|  | 		enum StringDescriptors_t | ||||||
|  | 		{ | ||||||
|  | 		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */ | ||||||
|  | 		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */ | ||||||
|  | 		    STRING_ID_Product       = 2, /**< Product string ID */ | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
| 	/* 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, | ||||||
|  | |||||||
| @ -58,8 +58,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = | |||||||
| 	.ProductID              = 0x2044, | 	.ProductID              = 0x2044, | ||||||
| 	.ReleaseNumber          = VERSION_BCD(00.01), | 	.ReleaseNumber          = VERSION_BCD(00.01), | ||||||
| 
 | 
 | ||||||
| 	.ManufacturerStrIndex   = 0x01, | 	.ManufacturerStrIndex   = STRING_ID_Manufacturer, | ||||||
| 	.ProductStrIndex        = 0x02, | 	.ProductStrIndex        = STRING_ID_Product, | ||||||
| 	.SerialNumStrIndex      = USE_INTERNAL_SERIAL, | 	.SerialNumStrIndex      = USE_INTERNAL_SERIAL, | ||||||
| 
 | 
 | ||||||
| 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | ||||||
| @ -237,15 +237,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | |||||||
| 		case DTYPE_String: | 		case DTYPE_String: | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00: | 				case STRING_ID_Language: | ||||||
| 					Address = &LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01: | 				case STRING_ID_Manufacturer: | ||||||
| 					Address = &ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02: | 				case STRING_ID_Product: | ||||||
| 					Address = &ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
|  | |||||||
| @ -79,6 +79,17 @@ | |||||||
| 			USB_Descriptor_Endpoint_t                CDC_DataInEndpoint; | 			USB_Descriptor_Endpoint_t                CDC_DataInEndpoint; | ||||||
| 		} USB_Descriptor_Configuration_t; | 		} USB_Descriptor_Configuration_t; | ||||||
| 
 | 
 | ||||||
|  | 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 | ||||||
|  | 		 *  have a unique ID index associated with it, which can be used to refer to the string from | ||||||
|  | 		 *  other descriptors. | ||||||
|  | 		 */ | ||||||
|  | 		enum StringDescriptors_t | ||||||
|  | 		{ | ||||||
|  | 		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */ | ||||||
|  | 		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */ | ||||||
|  | 		    STRING_ID_Product       = 2, /**< Product string ID */ | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
| 	/* 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, | ||||||
|  | |||||||
| @ -57,8 +57,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = | |||||||
| 	.ProductID              = 0x2048, | 	.ProductID              = 0x2048, | ||||||
| 	.ReleaseNumber          = VERSION_BCD(00.01), | 	.ReleaseNumber          = VERSION_BCD(00.01), | ||||||
| 
 | 
 | ||||||
| 	.ManufacturerStrIndex   = 0x01, | 	.ManufacturerStrIndex   = STRING_ID_Manufacturer, | ||||||
| 	.ProductStrIndex        = 0x02, | 	.ProductStrIndex        = STRING_ID_Product, | ||||||
| 	.SerialNumStrIndex      = NO_DESCRIPTOR, | 	.SerialNumStrIndex      = NO_DESCRIPTOR, | ||||||
| 
 | 
 | ||||||
| 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | ||||||
| @ -306,15 +306,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | |||||||
| 		case DTYPE_String: | 		case DTYPE_String: | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00: | 				case STRING_ID_Language: | ||||||
| 					Address = &LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01: | 				case STRING_ID_Manufacturer: | ||||||
| 					Address = &ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02: | 				case STRING_ID_Product: | ||||||
| 					Address = &ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
|  | |||||||
| @ -79,6 +79,17 @@ | |||||||
| 			USB_MIDI_Descriptor_Jack_Endpoint_t       MIDI_Out_Jack_Endpoint_SPC; | 			USB_MIDI_Descriptor_Jack_Endpoint_t       MIDI_Out_Jack_Endpoint_SPC; | ||||||
| 		} USB_Descriptor_Configuration_t; | 		} USB_Descriptor_Configuration_t; | ||||||
| 
 | 
 | ||||||
|  | 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 | ||||||
|  | 		 *  have a unique ID index associated with it, which can be used to refer to the string from | ||||||
|  | 		 *  other descriptors. | ||||||
|  | 		 */ | ||||||
|  | 		enum StringDescriptors_t | ||||||
|  | 		{ | ||||||
|  | 		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */ | ||||||
|  | 		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */ | ||||||
|  | 		    STRING_ID_Product       = 2, /**< Product string ID */ | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
| 	/* 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, | ||||||
|  | |||||||
| @ -72,8 +72,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = | |||||||
| 	.ProductID              = 0x2042, | 	.ProductID              = 0x2042, | ||||||
| 	.ReleaseNumber          = VERSION_BCD(00.01), | 	.ReleaseNumber          = VERSION_BCD(00.01), | ||||||
| 
 | 
 | ||||||
| 	.ManufacturerStrIndex   = 0x01, | 	.ManufacturerStrIndex   = STRING_ID_Manufacturer, | ||||||
| 	.ProductStrIndex        = 0x02, | 	.ProductStrIndex        = STRING_ID_Product, | ||||||
| 	.SerialNumStrIndex      = USE_INTERNAL_SERIAL, | 	.SerialNumStrIndex      = USE_INTERNAL_SERIAL, | ||||||
| 
 | 
 | ||||||
| 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | ||||||
| @ -200,15 +200,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | |||||||
| 		case DTYPE_String: | 		case DTYPE_String: | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00: | 				case STRING_ID_Language: | ||||||
| 					Address = &LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01: | 				case STRING_ID_Manufacturer: | ||||||
| 					Address = &ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02: | 				case STRING_ID_Product: | ||||||
| 					Address = &ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
|  | |||||||
| @ -59,6 +59,17 @@ | |||||||
| 	        USB_Descriptor_Endpoint_t             HID_ReportINEndpoint; /**< Keyboard key report endpoint descriptor */ | 	        USB_Descriptor_Endpoint_t             HID_ReportINEndpoint; /**< Keyboard key report endpoint descriptor */ | ||||||
| 		} USB_Descriptor_Configuration_t; | 		} USB_Descriptor_Configuration_t; | ||||||
| 
 | 
 | ||||||
|  | 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 | ||||||
|  | 		 *  have a unique ID index associated with it, which can be used to refer to the string from | ||||||
|  | 		 *  other descriptors. | ||||||
|  | 		 */ | ||||||
|  | 		enum StringDescriptors_t | ||||||
|  | 		{ | ||||||
|  | 		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */ | ||||||
|  | 		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */ | ||||||
|  | 		    STRING_ID_Product       = 2, /**< Product string ID */ | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
| 	/* Macros: */ | 	/* Macros: */ | ||||||
| 		/** Endpoint address of the keyboard key press reporting endpoint. */ | 		/** Endpoint address of the keyboard key press reporting endpoint. */ | ||||||
| 		#define KEYBOARD_EPADDR              (ENDPOINT_DIR_IN | 1) | 		#define KEYBOARD_EPADDR              (ENDPOINT_DIR_IN | 1) | ||||||
|  | |||||||
| @ -89,8 +89,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = | |||||||
| 	.ProductID              = 0x206A, | 	.ProductID              = 0x206A, | ||||||
| 	.ReleaseNumber          = VERSION_BCD(00.01), | 	.ReleaseNumber          = VERSION_BCD(00.01), | ||||||
| 
 | 
 | ||||||
| 	.ManufacturerStrIndex   = 0x01, | 	.ManufacturerStrIndex   = STRING_ID_Manufacturer, | ||||||
| 	.ProductStrIndex        = 0x02, | 	.ProductStrIndex        = STRING_ID_Product, | ||||||
| 	.SerialNumStrIndex      = NO_DESCRIPTOR, | 	.SerialNumStrIndex      = NO_DESCRIPTOR, | ||||||
| 
 | 
 | ||||||
| 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | ||||||
| @ -218,15 +218,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | |||||||
| 		case DTYPE_String: | 		case DTYPE_String: | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00: | 				case STRING_ID_Language: | ||||||
| 					Address = &LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01: | 				case STRING_ID_Manufacturer: | ||||||
| 					Address = &ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02: | 				case STRING_ID_Product: | ||||||
| 					Address = &ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
|  | |||||||
| @ -56,6 +56,17 @@ | |||||||
| 	        USB_Descriptor_Endpoint_t             HID_ReportINEndpoint; | 	        USB_Descriptor_Endpoint_t             HID_ReportINEndpoint; | ||||||
| 		} USB_Descriptor_Configuration_t; | 		} USB_Descriptor_Configuration_t; | ||||||
| 
 | 
 | ||||||
|  | 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 | ||||||
|  | 		 *  have a unique ID index associated with it, which can be used to refer to the string from | ||||||
|  | 		 *  other descriptors. | ||||||
|  | 		 */ | ||||||
|  | 		enum StringDescriptors_t | ||||||
|  | 		{ | ||||||
|  | 		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */ | ||||||
|  | 		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */ | ||||||
|  | 		    STRING_ID_Product       = 2, /**< Product string ID */ | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
| 	/* Macros: */ | 	/* Macros: */ | ||||||
| 		/** Endpoint address of the Media Control HID reporting IN endpoint. */ | 		/** Endpoint address of the Media Control HID reporting IN endpoint. */ | ||||||
| 		#define MEDIACONTROL_HID_EPADDR           (ENDPOINT_DIR_IN | 1) | 		#define MEDIACONTROL_HID_EPADDR           (ENDPOINT_DIR_IN | 1) | ||||||
|  | |||||||
| @ -58,9 +58,9 @@ const USB_Descriptor_Device_t PROGMEM RelayBoard_DeviceDescriptor = | |||||||
| 	.ProductID              = 0xFD11, | 	.ProductID              = 0xFD11, | ||||||
| 	.ReleaseNumber          = VERSION_BCD(02.00), | 	.ReleaseNumber          = VERSION_BCD(02.00), | ||||||
| 
 | 
 | ||||||
| 	.ManufacturerStrIndex   = 0x01, | 	.ManufacturerStrIndex   = STRING_ID_Manufacturer, | ||||||
| 	.ProductStrIndex        = 0x02, | 	.ProductStrIndex        = STRING_ID_Product, | ||||||
| 	.SerialNumStrIndex      = 0x03, | 	.SerialNumStrIndex      = STRING_ID_Serial, | ||||||
| 
 | 
 | ||||||
| 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | ||||||
| }; | }; | ||||||
| @ -176,19 +176,19 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | |||||||
| 		case DTYPE_String: | 		case DTYPE_String: | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00: | 				case STRING_ID_Language: | ||||||
| 					Address = &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 STRING_ID_Manufacturer: | ||||||
| 					Address = &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 STRING_ID_Product: | ||||||
| 					Address = &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 STRING_ID_Serial: | ||||||
| 					Address = &RelayBoard_SerialString; | 					Address = &RelayBoard_SerialString; | ||||||
| 					Size    = pgm_read_byte(&RelayBoard_SerialString.Header.Size); | 					Size    = pgm_read_byte(&RelayBoard_SerialString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
|  | |||||||
| @ -54,6 +54,18 @@ | |||||||
| 			USB_Descriptor_Interface_t            RelayBoardInterface; | 			USB_Descriptor_Interface_t            RelayBoardInterface; | ||||||
| 		} USB_Descriptor_Configuration_t; | 		} USB_Descriptor_Configuration_t; | ||||||
| 
 | 
 | ||||||
|  | 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 | ||||||
|  | 		 *  have a unique ID index associated with it, which can be used to refer to the string from | ||||||
|  | 		 *  other descriptors. | ||||||
|  | 		 */ | ||||||
|  | 		enum StringDescriptors_t | ||||||
|  | 		{ | ||||||
|  | 		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */ | ||||||
|  | 		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */ | ||||||
|  | 		    STRING_ID_Product       = 2, /**< Product string ID */ | ||||||
|  | 		    STRING_ID_Serial        = 3, /**< Serial number string ID */ | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
| 	/* 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, | ||||||
|  | |||||||
| @ -70,8 +70,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = | |||||||
| 	.ProductID              = 0x204B, | 	.ProductID              = 0x204B, | ||||||
| 	.ReleaseNumber          = VERSION_BCD(00.01), | 	.ReleaseNumber          = VERSION_BCD(00.01), | ||||||
| 
 | 
 | ||||||
| 	.ManufacturerStrIndex   = 0x01, | 	.ManufacturerStrIndex   = STRING_ID_Manufacturer, | ||||||
| 	.ProductStrIndex        = 0x02, | 	.ProductStrIndex        = STRING_ID_Product, | ||||||
| 	.SerialNumStrIndex      = USE_INTERNAL_SERIAL, | 	.SerialNumStrIndex      = USE_INTERNAL_SERIAL, | ||||||
| 
 | 
 | ||||||
| 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | ||||||
| @ -249,15 +249,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | |||||||
| 		case DTYPE_String: | 		case DTYPE_String: | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00: | 				case STRING_ID_Language: | ||||||
| 					Address = &LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01: | 				case STRING_ID_Manufacturer: | ||||||
| 					Address = &ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02: | 				case STRING_ID_Product: | ||||||
| 					Address = &ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
|  | |||||||
| @ -80,6 +80,17 @@ | |||||||
| 			USB_Descriptor_Endpoint_t                CDC_DataInEndpoint; | 			USB_Descriptor_Endpoint_t                CDC_DataInEndpoint; | ||||||
| 		} USB_Descriptor_Configuration_t; | 		} USB_Descriptor_Configuration_t; | ||||||
| 
 | 
 | ||||||
|  | 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 | ||||||
|  | 		 *  have a unique ID index associated with it, which can be used to refer to the string from | ||||||
|  | 		 *  other descriptors. | ||||||
|  | 		 */ | ||||||
|  | 		enum StringDescriptors_t | ||||||
|  | 		{ | ||||||
|  | 		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */ | ||||||
|  | 		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */ | ||||||
|  | 		    STRING_ID_Product       = 2, /**< Product string ID */ | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
| 	/* 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, | ||||||
|  | |||||||
| @ -76,8 +76,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = | |||||||
| 	.ProductID              = 0x2063, | 	.ProductID              = 0x2063, | ||||||
| 	.ReleaseNumber          = VERSION_BCD(00.01), | 	.ReleaseNumber          = VERSION_BCD(00.01), | ||||||
| 
 | 
 | ||||||
| 	.ManufacturerStrIndex   = 0x01, | 	.ManufacturerStrIndex   = STRING_ID_Manufacturer, | ||||||
| 	.ProductStrIndex        = 0x02, | 	.ProductStrIndex        = STRING_ID_Product, | ||||||
| 	.SerialNumStrIndex      = USE_INTERNAL_SERIAL, | 	.SerialNumStrIndex      = USE_INTERNAL_SERIAL, | ||||||
| 
 | 
 | ||||||
| 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | ||||||
| @ -241,15 +241,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | |||||||
| 		case DTYPE_String: | 		case DTYPE_String: | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00: | 				case STRING_ID_Language: | ||||||
| 					Address = &LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01: | 				case STRING_ID_Manufacturer: | ||||||
| 					Address = &ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02: | 				case STRING_ID_Product: | ||||||
| 					Address = &ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
|  | |||||||
| @ -56,6 +56,17 @@ | |||||||
| 			USB_Descriptor_Endpoint_t             HID_ReportINEndpoint; | 			USB_Descriptor_Endpoint_t             HID_ReportINEndpoint; | ||||||
| 		} USB_Descriptor_Configuration_t; | 		} USB_Descriptor_Configuration_t; | ||||||
| 
 | 
 | ||||||
|  | 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 | ||||||
|  | 		 *  have a unique ID index associated with it, which can be used to refer to the string from | ||||||
|  | 		 *  other descriptors. | ||||||
|  | 		 */ | ||||||
|  | 		enum StringDescriptors_t | ||||||
|  | 		{ | ||||||
|  | 		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */ | ||||||
|  | 		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */ | ||||||
|  | 		    STRING_ID_Product       = 2, /**< Product string ID */ | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
| 	/* 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, | ||||||
|  | |||||||
| @ -58,8 +58,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = | |||||||
| 	.ProductID              = 0x204B, | 	.ProductID              = 0x204B, | ||||||
| 	.ReleaseNumber          = VERSION_BCD(00.01), | 	.ReleaseNumber          = VERSION_BCD(00.01), | ||||||
| 
 | 
 | ||||||
| 	.ManufacturerStrIndex   = 0x01, | 	.ManufacturerStrIndex   = STRING_ID_Manufacturer, | ||||||
| 	.ProductStrIndex        = 0x02, | 	.ProductStrIndex        = STRING_ID_Product, | ||||||
| 	.SerialNumStrIndex      = USE_INTERNAL_SERIAL, | 	.SerialNumStrIndex      = USE_INTERNAL_SERIAL, | ||||||
| 
 | 
 | ||||||
| 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | ||||||
| @ -237,15 +237,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | |||||||
| 		case DTYPE_String: | 		case DTYPE_String: | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00: | 				case STRING_ID_Language: | ||||||
| 					Address = &LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01: | 				case STRING_ID_Manufacturer: | ||||||
| 					Address = &ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02: | 				case STRING_ID_Product: | ||||||
| 					Address = &ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
|  | |||||||
| @ -79,6 +79,17 @@ | |||||||
| 			USB_Descriptor_Endpoint_t                CDC_DataInEndpoint; | 			USB_Descriptor_Endpoint_t                CDC_DataInEndpoint; | ||||||
| 		} USB_Descriptor_Configuration_t; | 		} USB_Descriptor_Configuration_t; | ||||||
| 
 | 
 | ||||||
|  | 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 | ||||||
|  | 		 *  have a unique ID index associated with it, which can be used to refer to the string from | ||||||
|  | 		 *  other descriptors. | ||||||
|  | 		 */ | ||||||
|  | 		enum StringDescriptors_t | ||||||
|  | 		{ | ||||||
|  | 		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */ | ||||||
|  | 		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */ | ||||||
|  | 		    STRING_ID_Product       = 2, /**< Product string ID */ | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
| 	/* 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, | ||||||
|  | |||||||
| @ -58,8 +58,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = | |||||||
| 	.ProductID              = 0x2069, | 	.ProductID              = 0x2069, | ||||||
| 	.ReleaseNumber          = VERSION_BCD(00.01), | 	.ReleaseNumber          = VERSION_BCD(00.01), | ||||||
| 
 | 
 | ||||||
| 	.ManufacturerStrIndex   = 0x01, | 	.ManufacturerStrIndex   = STRING_ID_Manufacturer, | ||||||
| 	.ProductStrIndex        = 0x02, | 	.ProductStrIndex        = STRING_ID_Product, | ||||||
| 	.SerialNumStrIndex      = USE_INTERNAL_SERIAL, | 	.SerialNumStrIndex      = USE_INTERNAL_SERIAL, | ||||||
| 
 | 
 | ||||||
| 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | ||||||
| @ -287,15 +287,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | |||||||
| 		case DTYPE_String: | 		case DTYPE_String: | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00: | 				case STRING_ID_Language: | ||||||
| 					Address = &LanguageString; | 					Address = &LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01: | 				case STRING_ID_Manufacturer: | ||||||
| 					Address = &ManufacturerString; | 					Address = &ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02: | 				case STRING_ID_Product: | ||||||
| 					Address = &ProductString; | 					Address = &ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
|  | |||||||
| @ -42,7 +42,7 @@ | |||||||
| 		#include <LUFA/Drivers/USB/USB.h> | 		#include <LUFA/Drivers/USB/USB.h> | ||||||
| 
 | 
 | ||||||
| 		#include "Config/AppConfig.h" | 		#include "Config/AppConfig.h" | ||||||
| 		 | 
 | ||||||
| 	/* Macros: */ | 	/* Macros: */ | ||||||
| 		/** Endpoint address of the Mass Storage device-to-host data IN endpoint. */ | 		/** Endpoint address of the Mass Storage device-to-host data IN endpoint. */ | ||||||
| 		#define MASS_STORAGE_IN_EPADDR         (ENDPOINT_DIR_IN  | 3) | 		#define MASS_STORAGE_IN_EPADDR         (ENDPOINT_DIR_IN  | 3) | ||||||
| @ -96,6 +96,17 @@ | |||||||
| 			USB_Descriptor_Endpoint_t              MS_DataOutEndpoint; | 			USB_Descriptor_Endpoint_t              MS_DataOutEndpoint; | ||||||
| 		} USB_Descriptor_Configuration_t; | 		} USB_Descriptor_Configuration_t; | ||||||
| 
 | 
 | ||||||
|  | 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 | ||||||
|  | 		 *  have a unique ID index associated with it, which can be used to refer to the string from | ||||||
|  | 		 *  other descriptors. | ||||||
|  | 		 */ | ||||||
|  | 		enum StringDescriptors_t | ||||||
|  | 		{ | ||||||
|  | 		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */ | ||||||
|  | 		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */ | ||||||
|  | 		    STRING_ID_Product       = 2, /**< Product string ID */ | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
| 	/* 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, | ||||||
|  | |||||||
| @ -58,8 +58,8 @@ const USB_Descriptor_Device_t PROGMEM USART_DeviceDescriptor = | |||||||
| 	.ProductID              = 0x204B, | 	.ProductID              = 0x204B, | ||||||
| 	.ReleaseNumber          = VERSION_BCD(00.01), | 	.ReleaseNumber          = VERSION_BCD(00.01), | ||||||
| 
 | 
 | ||||||
| 	.ManufacturerStrIndex   = 0x01, | 	.ManufacturerStrIndex   = STRING_ID_Manufacturer, | ||||||
| 	.ProductStrIndex        = 0x02, | 	.ProductStrIndex        = STRING_ID_Product, | ||||||
| 	.SerialNumStrIndex      = USE_INTERNAL_SERIAL, | 	.SerialNumStrIndex      = USE_INTERNAL_SERIAL, | ||||||
| 
 | 
 | ||||||
| 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | ||||||
| @ -223,7 +223,7 @@ uint16_t USART_GetDescriptor(const uint16_t wValue, | |||||||
| 	uint16_t    Size    = NO_DESCRIPTOR; | 	uint16_t    Size    = NO_DESCRIPTOR; | ||||||
| 
 | 
 | ||||||
| 	*DescriptorMemorySpace = MEMSPACE_FLASH; | 	*DescriptorMemorySpace = MEMSPACE_FLASH; | ||||||
| 	 | 
 | ||||||
| 	switch (DescriptorType) | 	switch (DescriptorType) | ||||||
| 	{ | 	{ | ||||||
| 		case DTYPE_Device: | 		case DTYPE_Device: | ||||||
| @ -237,15 +237,15 @@ uint16_t USART_GetDescriptor(const uint16_t wValue, | |||||||
| 		case DTYPE_String: | 		case DTYPE_String: | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00: | 				case STRING_ID_Language: | ||||||
| 					Address = &USART_LanguageString; | 					Address = &USART_LanguageString; | ||||||
| 					Size    = pgm_read_byte(&USART_LanguageString.Header.Size); | 					Size    = pgm_read_byte(&USART_LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01: | 				case STRING_ID_Manufacturer: | ||||||
| 					Address = &USART_ManufacturerString; | 					Address = &USART_ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&USART_ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&USART_ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02: | 				case STRING_ID_Product: | ||||||
| 					Address = &USART_ProductString; | 					Address = &USART_ProductString; | ||||||
| 					Size    = pgm_read_byte(&USART_ProductString.Header.Size); | 					Size    = pgm_read_byte(&USART_ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
|  | |||||||
| @ -81,6 +81,17 @@ | |||||||
| 			USB_Descriptor_Endpoint_t                CDC_DataInEndpoint; | 			USB_Descriptor_Endpoint_t                CDC_DataInEndpoint; | ||||||
| 		} USART_USB_Descriptor_Configuration_t; | 		} USART_USB_Descriptor_Configuration_t; | ||||||
| 
 | 
 | ||||||
|  | 		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
 | ||||||
|  | 		 *  have a unique ID index associated with it, which can be used to refer to the string from | ||||||
|  | 		 *  other descriptors. | ||||||
|  | 		 */ | ||||||
|  | 		enum StringDescriptors_t | ||||||
|  | 		{ | ||||||
|  | 		    STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */ | ||||||
|  | 		    STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */ | ||||||
|  | 		    STRING_ID_Product       = 2, /**< Product string ID */ | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
| 	/* Function Prototypes: */ | 	/* Function Prototypes: */ | ||||||
| 		uint16_t USART_GetDescriptor(const uint16_t wValue, | 		uint16_t USART_GetDescriptor(const uint16_t wValue, | ||||||
| 		                             const uint8_t wIndex, | 		                             const uint8_t wIndex, | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Dean Camera
						Dean Camera