Composte device on LPC1765

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Composte device on LPC1765

685 Views
lpcware
NXP Employee
NXP Employee
Content originally posted in LPCWare by kempsun on Sun Jul 22 00:54:29 MST 2012
Hi all,

  I composted a HID keyboard and CDC in the descriptor,and enumeration seems work find on WIN7 64bit.
  But I can only receive from the PC, send to HOST is not working, both HID and CDC bulk in.

  EP macros:
#define KEYBOARD_EPNUM                 1

/** Endpoint number of the CDC device-to-host notification IN endpoint. */
#define CDC_NOTIFICATION_EPNUM         2

/** Endpoint number of the CDC device-to-host data IN endpoint. */
#define CDC_TX_EPNUM                   3

/** Endpoint number of the CDC host-to-device data OUT endpoint. */
#define CDC_RX_EPNUM                   4

  Descriptor:

  const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
{
.Config =
{
.Header                 = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},

.TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),
.TotalInterfaces        = 3,

.ConfigurationNumber    = 1,
.ConfigurationStrIndex  = NO_DESCRIPTOR,

.ConfigAttributes       = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),

.MaxPowerConsumption    = USB_CONFIG_POWER_MA(100)
},

.HID_Interface =
{
.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},

.InterfaceNumber        = 0x00,
.AlternateSetting       = 0x00,

.TotalEndpoints         = 1,

.Class                  = HID_CSCP_HIDClass,
.SubClass               = HID_CSCP_BootSubclass,
.Protocol               = HID_CSCP_KeyboardBootProtocol,

.InterfaceStrIndex      = NO_DESCRIPTOR
},

.HID_KeyboardHID =
{
.Header                 = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID},

.HIDSpec                = VERSION_BCD(01.11),
.CountryCode            = 0x00,
.TotalReportDescriptors = 1,
.HIDReportType          = HID_DTYPE_Report,
.HIDReportLength        = sizeof(KeyboardReport)
},

.HID_ReportINEndpoint =
{
.Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},

.EndpointAddress        = (ENDPOINT_DIR_IN | KEYBOARD_EPNUM),
.Attributes             = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
.EndpointSize           = KEYBOARD_EPSIZE,
.PollingIntervalMS      = 0x10
},

.IAD =
{
.Header                  = {.Size = sizeof(USB_Descriptor_Interface_Association_t), .Type = DTYPE_InterfaceAssociation},

.FirstInterfaceIndex     = 1,
.TotalInterfaces         = 2,

.Class                   = 0x02,
.SubClass                = 0x02,
.Protocol                = 0x00,
.IADStrIndex             = NO_DESCRIPTOR
},

.CDC_CCI_Interface =
{
.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},

.InterfaceNumber        = 1,
.AlternateSetting       = 0,

.TotalEndpoints         = 1,

.Class                  = CDC_CSCP_CDCClass,
.SubClass               = CDC_CSCP_ACMSubclass,
.Protocol               = CDC_CSCP_ATCommandProtocol,

.InterfaceStrIndex      = NO_DESCRIPTOR
},

.CDC_Functional_Header =
{
.Header                 = {.Size = sizeof(USB_CDC_Descriptor_FunctionalHeader_t), .Type = DTYPE_CSInterface},
.Subtype                = CDC_DSUBTYPE_CSInterface_Header,

.CDCSpecification       = VERSION_BCD(01.10),
},

.CDC_Functional_ACM =
{
.Header                 = {.Size = sizeof(USB_CDC_Descriptor_FunctionalACM_t), .Type = DTYPE_CSInterface},
.Subtype                = CDC_DSUBTYPE_CSInterface_ACM,

.Capabilities           = 0x06,
},

.CDC_Functional_Union =
{
.Header                 = {.Size = sizeof(USB_CDC_Descriptor_FunctionalUnion_t), .Type = DTYPE_CSInterface},
.Subtype                = CDC_DSUBTYPE_CSInterface_Union,

.MasterInterfaceNumber  = 1,
.SlaveInterfaceNumber   = 2,
},

.CDC_NotificationEndpoint =
{
.Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},

//.EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC_NOTIFICATION_EPNUM),
.EndpointAddress        = (ENDPOINT_DIR_IN | CDC_NOTIFICATION_EPNUM),
.Attributes             = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
.EndpointSize           = CDC_NOTIFICATION_EPSIZE,
.PollingIntervalMS      = 0xFF
},

.CDC_DCI_Interface =
{
.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},

.InterfaceNumber        = 2,
.AlternateSetting       = 0,

.TotalEndpoints         = 2,

.Class                  = CDC_CSCP_CDCDataClass,
.SubClass               = CDC_CSCP_NoDataSubclass,
.Protocol               = CDC_CSCP_NoDataProtocol,

.InterfaceStrIndex      = NO_DESCRIPTOR
},

.CDC_DataOutEndpoint =
{
.Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},

//.EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_OUT | CDC_RX_EPNUM),
.EndpointAddress        = (ENDPOINT_DIR_OUT | CDC_RX_EPNUM),
.Attributes             = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
.EndpointSize           = CDC_TXRX_EPSIZE,
.PollingIntervalMS      = 0x01
},

.CDC_DataInEndpoint =
{
.Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},

//.EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC_TX_EPNUM),
.EndpointAddress        = (ENDPOINT_DIR_IN | CDC_TX_EPNUM),
.Attributes             = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
.EndpointSize           = CDC_TXRX_EPSIZE,
.PollingIntervalMS      = 0x01
}
};

 
  Anyone has any idea?

  I'm blandly new of embed development. Thanks for help.
Labels (1)
0 Kudos
4 Replies

643 Views
lpcware
NXP Employee
NXP Employee
Content originally posted in LPCWare by nxpUSBlib team on Wed Aug 01 12:48:16 MST 2012
I don't see a report descriptor in your listing. Do you have one?

Do the individual keyboard and CDC drivers work for you?
0 Kudos

643 Views
lpcware
NXP Employee
NXP Employee
Content originally posted in LPCWare by nxpUSBlib team on Wed Aug 01 12:42:06 MST 2012
Yes it does, but we have not produced a composite example yet. This is on our list.
0 Kudos

643 Views
lpcware
NXP Employee
NXP Employee
Content originally posted in LPCWare by kempsun on Thu Jul 26 04:44:29 MST 2012
YES,  it's simple, just join  all descriptors together.  in windows, you will see an composite device.

There are few demos is using composite device, such as MassStorageCDC...
0 Kudos

643 Views
lpcware
NXP Employee
NXP Employee
Content originally posted in LPCWare by Cusko on Tue Jul 24 06:37:30 MST 2012
I have just a follow-up question.
Do nxpUSBlib even supports a composite USB device?
0 Kudos