|
|
@ -45,22 +45,22 @@
|
|
|
|
USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
|
|
|
|
USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
|
|
|
|
{
|
|
|
|
{
|
|
|
|
.Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},
|
|
|
|
.Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},
|
|
|
|
|
|
|
|
|
|
|
|
.USBSpecification = VERSION_BCD(01.10),
|
|
|
|
.USBSpecification = VERSION_BCD(01.10),
|
|
|
|
.Class = 0xEF,
|
|
|
|
.Class = 0xEF,
|
|
|
|
.SubClass = 0x02,
|
|
|
|
.SubClass = 0x02,
|
|
|
|
.Protocol = 0x01,
|
|
|
|
.Protocol = 0x01,
|
|
|
|
|
|
|
|
|
|
|
|
.Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE,
|
|
|
|
.Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE,
|
|
|
|
|
|
|
|
|
|
|
|
.VendorID = 0x03EB,
|
|
|
|
.VendorID = 0x03EB,
|
|
|
|
.ProductID = 0x204E,
|
|
|
|
.ProductID = 0x204E,
|
|
|
|
.ReleaseNumber = 0x0000,
|
|
|
|
.ReleaseNumber = 0x0000,
|
|
|
|
|
|
|
|
|
|
|
|
.ManufacturerStrIndex = 0x01,
|
|
|
|
.ManufacturerStrIndex = 0x01,
|
|
|
|
.ProductStrIndex = 0x02,
|
|
|
|
.ProductStrIndex = 0x02,
|
|
|
|
.SerialNumStrIndex = NO_DESCRIPTOR,
|
|
|
|
.SerialNumStrIndex = NO_DESCRIPTOR,
|
|
|
|
|
|
|
|
|
|
|
|
.NumberOfConfigurations = 1
|
|
|
|
.NumberOfConfigurations = 1
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
@ -77,10 +77,10 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
|
|
|
|
|
|
|
|
|
|
|
|
.TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),
|
|
|
|
.TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),
|
|
|
|
.TotalInterfaces = 4,
|
|
|
|
.TotalInterfaces = 4,
|
|
|
|
|
|
|
|
|
|
|
|
.ConfigurationNumber = 1,
|
|
|
|
.ConfigurationNumber = 1,
|
|
|
|
.ConfigurationStrIndex = NO_DESCRIPTOR,
|
|
|
|
.ConfigurationStrIndex = NO_DESCRIPTOR,
|
|
|
|
|
|
|
|
|
|
|
|
.ConfigAttributes = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),
|
|
|
|
.ConfigAttributes = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),
|
|
|
|
|
|
|
|
|
|
|
|
.MaxPowerConsumption = USB_CONFIG_POWER_MA(100)
|
|
|
|
.MaxPowerConsumption = USB_CONFIG_POWER_MA(100)
|
|
|
@ -108,11 +108,11 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
|
|
|
|
.AlternateSetting = 0,
|
|
|
|
.AlternateSetting = 0,
|
|
|
|
|
|
|
|
|
|
|
|
.TotalEndpoints = 1,
|
|
|
|
.TotalEndpoints = 1,
|
|
|
|
|
|
|
|
|
|
|
|
.Class = 0x02,
|
|
|
|
.Class = 0x02,
|
|
|
|
.SubClass = 0x02,
|
|
|
|
.SubClass = 0x02,
|
|
|
|
.Protocol = 0x01,
|
|
|
|
.Protocol = 0x01,
|
|
|
|
|
|
|
|
|
|
|
|
.InterfaceStrIndex = NO_DESCRIPTOR
|
|
|
|
.InterfaceStrIndex = NO_DESCRIPTOR
|
|
|
|
},
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
@ -151,7 +151,7 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
|
|
|
|
.CDC1_ManagementEndpoint =
|
|
|
|
.CDC1_ManagementEndpoint =
|
|
|
|
{
|
|
|
|
{
|
|
|
|
.Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
|
|
|
|
.Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
|
|
|
|
|
|
|
|
|
|
|
|
.EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC1_NOTIFICATION_EPNUM),
|
|
|
|
.EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC1_NOTIFICATION_EPNUM),
|
|
|
|
.Attributes = EP_TYPE_INTERRUPT,
|
|
|
|
.Attributes = EP_TYPE_INTERRUPT,
|
|
|
|
.EndpointSize = CDC_NOTIFICATION_EPSIZE,
|
|
|
|
.EndpointSize = CDC_NOTIFICATION_EPSIZE,
|
|
|
@ -166,18 +166,18 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
|
|
|
|
.AlternateSetting = 0,
|
|
|
|
.AlternateSetting = 0,
|
|
|
|
|
|
|
|
|
|
|
|
.TotalEndpoints = 2,
|
|
|
|
.TotalEndpoints = 2,
|
|
|
|
|
|
|
|
|
|
|
|
.Class = 0x0A,
|
|
|
|
.Class = 0x0A,
|
|
|
|
.SubClass = 0x00,
|
|
|
|
.SubClass = 0x00,
|
|
|
|
.Protocol = 0x00,
|
|
|
|
.Protocol = 0x00,
|
|
|
|
|
|
|
|
|
|
|
|
.InterfaceStrIndex = NO_DESCRIPTOR
|
|
|
|
.InterfaceStrIndex = NO_DESCRIPTOR
|
|
|
|
},
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
.CDC1_DataOutEndpoint =
|
|
|
|
.CDC1_DataOutEndpoint =
|
|
|
|
{
|
|
|
|
{
|
|
|
|
.Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
|
|
|
|
.Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
|
|
|
|
|
|
|
|
|
|
|
|
.EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_OUT | CDC1_RX_EPNUM),
|
|
|
|
.EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_OUT | CDC1_RX_EPNUM),
|
|
|
|
.Attributes = EP_TYPE_BULK,
|
|
|
|
.Attributes = EP_TYPE_BULK,
|
|
|
|
.EndpointSize = CDC_TXRX_EPSIZE,
|
|
|
|
.EndpointSize = CDC_TXRX_EPSIZE,
|
|
|
@ -187,7 +187,7 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
|
|
|
|
.CDC1_DataInEndpoint =
|
|
|
|
.CDC1_DataInEndpoint =
|
|
|
|
{
|
|
|
|
{
|
|
|
|
.Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
|
|
|
|
.Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
|
|
|
|
|
|
|
|
|
|
|
|
.EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC1_TX_EPNUM),
|
|
|
|
.EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC1_TX_EPNUM),
|
|
|
|
.Attributes = EP_TYPE_BULK,
|
|
|
|
.Attributes = EP_TYPE_BULK,
|
|
|
|
.EndpointSize = CDC_TXRX_EPSIZE,
|
|
|
|
.EndpointSize = CDC_TXRX_EPSIZE,
|
|
|
@ -216,11 +216,11 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
|
|
|
|
.AlternateSetting = 0,
|
|
|
|
.AlternateSetting = 0,
|
|
|
|
|
|
|
|
|
|
|
|
.TotalEndpoints = 1,
|
|
|
|
.TotalEndpoints = 1,
|
|
|
|
|
|
|
|
|
|
|
|
.Class = 0x02,
|
|
|
|
.Class = 0x02,
|
|
|
|
.SubClass = 0x02,
|
|
|
|
.SubClass = 0x02,
|
|
|
|
.Protocol = 0x01,
|
|
|
|
.Protocol = 0x01,
|
|
|
|
|
|
|
|
|
|
|
|
.InterfaceStrIndex = NO_DESCRIPTOR
|
|
|
|
.InterfaceStrIndex = NO_DESCRIPTOR
|
|
|
|
},
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
@ -259,7 +259,7 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
|
|
|
|
.CDC2_ManagementEndpoint =
|
|
|
|
.CDC2_ManagementEndpoint =
|
|
|
|
{
|
|
|
|
{
|
|
|
|
.Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
|
|
|
|
.Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
|
|
|
|
|
|
|
|
|
|
|
|
.EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC2_NOTIFICATION_EPNUM),
|
|
|
|
.EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC2_NOTIFICATION_EPNUM),
|
|
|
|
.Attributes = EP_TYPE_INTERRUPT,
|
|
|
|
.Attributes = EP_TYPE_INTERRUPT,
|
|
|
|
.EndpointSize = CDC_NOTIFICATION_EPSIZE,
|
|
|
|
.EndpointSize = CDC_NOTIFICATION_EPSIZE,
|
|
|
@ -285,7 +285,7 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
|
|
|
|
.CDC2_DataOutEndpoint =
|
|
|
|
.CDC2_DataOutEndpoint =
|
|
|
|
{
|
|
|
|
{
|
|
|
|
.Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
|
|
|
|
.Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
|
|
|
|
|
|
|
|
|
|
|
|
.EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_OUT | CDC2_RX_EPNUM),
|
|
|
|
.EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_OUT | CDC2_RX_EPNUM),
|
|
|
|
.Attributes = EP_TYPE_BULK,
|
|
|
|
.Attributes = EP_TYPE_BULK,
|
|
|
|
.EndpointSize = CDC_TXRX_EPSIZE,
|
|
|
|
.EndpointSize = CDC_TXRX_EPSIZE,
|
|
|
@ -295,7 +295,7 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
|
|
|
|
.CDC2_DataInEndpoint =
|
|
|
|
.CDC2_DataInEndpoint =
|
|
|
|
{
|
|
|
|
{
|
|
|
|
.Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
|
|
|
|
.Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
|
|
|
|
|
|
|
|
|
|
|
|
.EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC2_TX_EPNUM),
|
|
|
|
.EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC2_TX_EPNUM),
|
|
|
|
.Attributes = EP_TYPE_BULK,
|
|
|
|
.Attributes = EP_TYPE_BULK,
|
|
|
|
.EndpointSize = CDC_TXRX_EPSIZE,
|
|
|
|
.EndpointSize = CDC_TXRX_EPSIZE,
|
|
|
@ -310,7 +310,7 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
|
|
|
|
USB_Descriptor_String_t PROGMEM LanguageString =
|
|
|
|
USB_Descriptor_String_t PROGMEM LanguageString =
|
|
|
|
{
|
|
|
|
{
|
|
|
|
.Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},
|
|
|
|
.Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},
|
|
|
|
|
|
|
|
|
|
|
|
.UnicodeString = {LANGUAGE_ID_ENG}
|
|
|
|
.UnicodeString = {LANGUAGE_ID_ENG}
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
@ -321,7 +321,7 @@ USB_Descriptor_String_t PROGMEM LanguageString =
|
|
|
|
USB_Descriptor_String_t PROGMEM ManufacturerString =
|
|
|
|
USB_Descriptor_String_t PROGMEM ManufacturerString =
|
|
|
|
{
|
|
|
|
{
|
|
|
|
.Header = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},
|
|
|
|
.Header = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},
|
|
|
|
|
|
|
|
|
|
|
|
.UnicodeString = L"Dean Camera"
|
|
|
|
.UnicodeString = L"Dean Camera"
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
@ -332,7 +332,7 @@ USB_Descriptor_String_t PROGMEM ManufacturerString =
|
|
|
|
USB_Descriptor_String_t PROGMEM ProductString =
|
|
|
|
USB_Descriptor_String_t PROGMEM ProductString =
|
|
|
|
{
|
|
|
|
{
|
|
|
|
.Header = {.Size = USB_STRING_LEN(13), .Type = DTYPE_String},
|
|
|
|
.Header = {.Size = USB_STRING_LEN(13), .Type = DTYPE_String},
|
|
|
|
|
|
|
|
|
|
|
|
.UnicodeString = L"LUFA Dual CDC Demo"
|
|
|
|
.UnicodeString = L"LUFA Dual CDC Demo"
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
@ -380,6 +380,6 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex,
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
*DescriptorAddress = Address;
|
|
|
|
*DescriptorAddress = Address;
|
|
|
|
return Size;
|
|
|
|
return Size;
|
|
|
|
}
|
|
|
|
}
|
|
|
|