X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/50390867e761f9cd92882d9f43db8593600fa61a..b9f3ff39a41c5dea00a651b7efe75f0f15a71ed1:/Bootloaders/CDC/Descriptors.c diff --git a/Bootloaders/CDC/Descriptors.c b/Bootloaders/CDC/Descriptors.c index 273dc6f3b..b99df6fdc 100644 --- a/Bootloaders/CDC/Descriptors.c +++ b/Bootloaders/CDC/Descriptors.c @@ -1,13 +1,13 @@ /* LUFA Library - Copyright (C) Dean Camera, 2010. + Copyright (C) Dean Camera, 2012. dean [at] fourwalledcubicle [dot] com www.lufa-lib.org */ /* - Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com) + Copyright 2012 Dean Camera (dean [at] fourwalledcubicle [dot] com) Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted @@ -42,7 +42,7 @@ * number of device configurations. The descriptor is read out by the USB host when the enumeration * process begins. */ -USB_Descriptor_Device_t DeviceDescriptor = +const USB_Descriptor_Device_t DeviceDescriptor = { .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device}, @@ -55,10 +55,10 @@ USB_Descriptor_Device_t DeviceDescriptor = .VendorID = 0x03EB, .ProductID = 0x204A, - .ReleaseNumber = VERSION_BCD(00.01), + .ReleaseNumber = VERSION_BCD(01.00), - .ManufacturerStrIndex = NO_DESCRIPTOR, - .ProductStrIndex = 0x01, + .ManufacturerStrIndex = 0x01, + .ProductStrIndex = 0x02, .SerialNumStrIndex = NO_DESCRIPTOR, .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS @@ -69,7 +69,7 @@ USB_Descriptor_Device_t DeviceDescriptor = * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting * a configuration so that the host may correctly communicate with the USB device. */ -USB_Descriptor_Configuration_t ConfigurationDescriptor = +const USB_Descriptor_Configuration_t ConfigurationDescriptor = { .Config = { @@ -81,7 +81,7 @@ USB_Descriptor_Configuration_t ConfigurationDescriptor = .ConfigurationNumber = 1, .ConfigurationStrIndex = NO_DESCRIPTOR, - .ConfigAttributes = USB_CONFIG_ATTR_BUSPOWERED, + .ConfigAttributes = USB_CONFIG_ATTR_RESERVED, .MaxPowerConsumption = USB_CONFIG_POWER_MA(100) }, @@ -104,7 +104,7 @@ USB_Descriptor_Configuration_t ConfigurationDescriptor = .CDC_Functional_Header = { - .Header = {.Size = sizeof(USB_Descriptor_CDC_FunctionalHeader_t), .Type = DTYPE_CSInterface}, + .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalHeader_t), .Type = DTYPE_CSInterface}, .Subtype = 0x00, .CDCSpecification = VERSION_BCD(01.10), @@ -112,15 +112,15 @@ USB_Descriptor_Configuration_t ConfigurationDescriptor = .CDC_Functional_ACM = { - .Header = {.Size = sizeof(USB_Descriptor_CDC_FunctionalACM_t), .Type = DTYPE_CSInterface}, + .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalACM_t), .Type = DTYPE_CSInterface}, .Subtype = 0x02, - .Capabilities = 0x04, + .Capabilities = 0x00, }, .CDC_Functional_Union = { - .Header = {.Size = sizeof(USB_Descriptor_CDC_FunctionalUnion_t), .Type = DTYPE_CSInterface}, + .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalUnion_t), .Type = DTYPE_CSInterface}, .Subtype = 0x06, .MasterInterfaceNumber = 0, @@ -131,7 +131,7 @@ USB_Descriptor_Configuration_t ConfigurationDescriptor = { .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, - .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC_NOTIFICATION_EPNUM), + .EndpointAddress = CDC_NOTIFICATION_EPADDR, .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), .EndpointSize = CDC_NOTIFICATION_EPSIZE, .PollingIntervalMS = 0xFF @@ -157,20 +157,20 @@ USB_Descriptor_Configuration_t ConfigurationDescriptor = { .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, - .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_OUT | CDC_RX_EPNUM), + .EndpointAddress = CDC_RX_EPADDR, .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), .EndpointSize = CDC_TXRX_EPSIZE, - .PollingIntervalMS = 0x0A + .PollingIntervalMS = 0x05 }, .CDC_DataInEndpoint = { .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, - .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC_TX_EPNUM), + .EndpointAddress = CDC_TX_EPADDR, .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), .EndpointSize = CDC_TXRX_EPSIZE, - .PollingIntervalMS = 0x0A + .PollingIntervalMS = 0x05 } }; @@ -178,22 +178,33 @@ USB_Descriptor_Configuration_t ConfigurationDescriptor = * the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate * via the language ID table available at USB.org what languages the device supports for its string descriptors. */ -USB_Descriptor_String_t LanguageString = +const USB_Descriptor_String_t LanguageString = { .Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String}, .UnicodeString = {LANGUAGE_ID_ENG} }; +/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable + * form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device + * Descriptor. + */ +const USB_Descriptor_String_t PROGMEM ManufacturerString = +{ + .Header = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String}, + + .UnicodeString = L"Dean Camera" +}; + /** Product descriptor string. This is a Unicode string containing the product's details in human readable form, * and is read out upon request by the host when the appropriate string ID is requested, listed in the Device * Descriptor. */ -USB_Descriptor_String_t ProductString = +const USB_Descriptor_String_t ProductString = { - .Header = {.Size = USB_STRING_LEN(18), .Type = DTYPE_String}, + .Header = {.Size = USB_STRING_LEN(19), .Type = DTYPE_String}, - .UnicodeString = L"AVR CDC Bootloader" + .UnicodeString = L"LUFA CDC Bootloader" }; /** This function is called by the library when in device mode, and must be overridden (see LUFA library "USB Descriptors" @@ -228,7 +239,12 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, Address = &LanguageString; Size = LanguageString.Header.Size; } - else + else if (DescriptorNumber == 0x01) + { + Address = &ManufacturerString; + Size = ManufacturerString.Header.Size; + } + else if (DescriptorNumber == 0x02) { Address = &ProductString; Size = ProductString.Header.Size;