Перейти к содержанию
    

USB AudioInput + USB HID в одномфлаконе

Всем привет.

 

Перерыл ветку и прочитал кучу сообщений, но никак не могу описать USB AudioInput + USB HID. После втыкания устройства в USB винда определяет "Составное устройство" и вот тут драйвер уже не устанавливается. А поразнь - всё отлично.

Ткните что не так плииз.

Вот дескриптор в формате LUFA:

USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
{
    .Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},
        
    .USBSpecification       = VERSION_BCD(01.10),
    .Class                  = 0xEF,
    .SubClass               = 0x02,
    .Protocol               = 0x01,
                
    .Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,
        
    .VendorID               = 0x03EB,
    .ProductID              = 0x204D,
    .ReleaseNumber          = 0x0000,
        
    .ManufacturerStrIndex   = 0x01,
    .ProductStrIndex        = 0x02,
    .SerialNumStrIndex      = USE_INTERNAL_SERIAL,
        
    .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
};

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        = 4,
                
            .ConfigurationNumber    = 1,
            .ConfigurationStrIndex  = NO_DESCRIPTOR,
                
            .ConfigAttributes       = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),
            
            .MaxPowerConsumption    = USB_CONFIG_POWER_MA(100)
        },
//HID
         .HID1_GenericInterface = 
        {
            .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},

            .InterfaceNumber        = 0,
            .AlternateSetting       = 0x00,
            
            .TotalEndpoints         = 1,
                
            .Class                  = 0x03,
            .SubClass               = 0x00,
            .Protocol               = HID_NON_BOOT_PROTOCOL,
                
            .InterfaceStrIndex      = 0x03
        },

    .HID1_GenericHID = 
        {
            .Header                 = {.Size = sizeof(USB_HID_Descriptor_t), .Type = DTYPE_HID},
                                     
            .HIDSpec                = VERSION_BCD(01.11),
            .CountryCode            = 0x00,
            .TotalReportDescriptors = 1,
            .HIDReportType          = DTYPE_Report,
            .HIDReportLength        = sizeof(GenericReport)
        },

    .HID1_ReportINEndpoint = 
        {
            .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
                                         
            .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | GENERIC_IN_EPNUM),
            .Attributes             = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
            .EndpointSize           = HID_EPSIZE,
            .PollingIntervalMS      = 0x0A
        },
//Keyboard
    .HID2_KeyboardInterface = 
        {
            .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},

            .InterfaceNumber        = 1,
            .AlternateSetting       = 0x00,
            
            .TotalEndpoints         = 1,
                
            .Class                  = 0x03,
            .SubClass               = 0x01,
            .Protocol               = HID_BOOT_KEYBOARD_PROTOCOL,
                
            .InterfaceStrIndex      = 0x04
        },

    .HID2_KeyboardHID = 
        {  
            .Header                 = {.Size = sizeof(USB_HID_Descriptor_t), .Type = DTYPE_HID},
            
            .HIDSpec                = VERSION_BCD(01.11),
            .CountryCode            = 0x00,
            .TotalReportDescriptors = 1,
            .HIDReportType          = DTYPE_Report,
            .HIDReportLength        = sizeof(KeyboardReport)
        },
        
    .HID2_ReportINEndpoint = 
        {
            .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},

            .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | KEYBOARD_IN_EPNUM),
            .Attributes             = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
            .EndpointSize           = HID_EPSIZE,
            .PollingIntervalMS      = 0x0A
        },
//Microphone
    .Audio_ControlInterface_IAD =
        {    
            .Header                 = {.Size = sizeof(USB_Descriptor_Interface_Association_t), .Type = DTYPE_InterfaceAssociation},

            .FirstInterfaceIndex    = 2,
            .TotalInterfaces        = 2,

            .Class                  = 0x01,
            .SubClass               = 0x01,
            .Protocol               = 0x00,

            .IADStrIndex            = 0x06
        },

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

            .InterfaceNumber          = 2,
            .AlternateSetting         = 0,
            
            .TotalEndpoints           = 0,

            .Class                    = 0x01,
            .SubClass                 = 0x01,
            .Protocol                 = 0x00,

            .InterfaceStrIndex        = 0x06
        },

    .Audio_ControlInterface_SPC = 
        {
            .Header                   = {.Size = sizeof(USB_Audio_Interface_AC_t), .Type = DTYPE_AudioInterface},
            .Subtype                  = DSUBTYPE_Header,

            .ACSpecification          = VERSION_BCD(01.00),
            .TotalLength              = (sizeof(USB_Audio_Interface_AC_t) +
                                         sizeof(USB_Audio_InputTerminal_t) +
                                         sizeof(USB_Audio_OutputTerminal_t)),
            
            .InCollection             = 1,
            .InterfaceNumbers         = {1},
        },

    .Audio_InputTerminal = 
        {
            .Header                   = {.Size = sizeof(USB_Audio_InputTerminal_t), .Type = DTYPE_AudioInterface},
            .Subtype                  = DSUBTYPE_InputTerminal,

            .TerminalID               = 0x01,
            .TerminalType             = TERMINAL_IN_MIC,
            .AssociatedOutputTerminal = 0x00,

            .TotalChannels            = 1,
            .ChannelConfig            = 0,

            .ChannelStrIndex          = NO_DESCRIPTOR,
            .TerminalStrIndex         = NO_DESCRIPTOR
        },

    .Audio_OutputTerminal = 
        {
            .Header                   = {.Size = sizeof(USB_Audio_OutputTerminal_t), .Type = DTYPE_AudioInterface},
            .Subtype                  = DSUBTYPE_OutputTerminal,

            .TerminalID               = 0x02,
            .TerminalType             = TERMINAL_STREAMING,
            .AssociatedInputTerminal  = 0x00,

            .SourceID                 = 0x01,

            .TerminalStrIndex         = NO_DESCRIPTOR
        },

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

            .InterfaceNumber          = 3,
            .AlternateSetting         = 0,

            .TotalEndpoints           = 0,

            .Class                    = 0x01,
            .SubClass                 = 0x02,
            .Protocol                 = 0x00,

            .InterfaceStrIndex        = NO_DESCRIPTOR
        },

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

            .InterfaceNumber          = 3,
            .AlternateSetting         = 1,

            .TotalEndpoints           = 1,

            .Class                    = 0x01,
            .SubClass                 = 0x02,
            .Protocol                 = 0x00,

            .InterfaceStrIndex        = NO_DESCRIPTOR
        },

    .Audio_StreamInterface_SPC = 
        {
            .Header                   = {.Size = sizeof(USB_Audio_Interface_AS_t), .Type = DTYPE_AudioInterface},
            .Subtype                  = DSUBTYPE_General,

            .TerminalLink             = 0x02,

            .FrameDelay               = 1,
            .AudioFormat              = 0x0001
        },

    .Audio_AudioFormat = 
        {
            .Header                   = {.Size = sizeof(USB_Audio_Format_t), .Type = DTYPE_AudioInterface},
            .Subtype                  = DSUBTYPE_Format,

            .FormatType               = 0x01,
            .Channels                 = 0x01,
            
            .SubFrameSize             = 0x02,
            .BitResolution            = 16,
            .SampleFrequencyType      = AUDIO_TOTAL_SAMPLE_RATES,
        
            .SampleFrequencies        = {AUDIO_SAMPLE_FREQ(AUDIO_SAMPLE_FREQUENCY)}
        },
    
    .Audio_StreamEndpoint = 
        {
            .Endpoint = 
                {
                    .Header              = {.Size = sizeof(USB_Audio_StreamEndpoint_Std_t), .Type = DTYPE_Endpoint},

                    .EndpointAddress     = (ENDPOINT_DESCRIPTOR_DIR_IN | AUDIO_STREAM_EPNUM),
                    .Attributes          = (EP_TYPE_ISOCHRONOUS | ENDPOINT_ATTR_SYNC | ENDPOINT_USAGE_DATA),
                    .EndpointSize        = AUDIO_STREAM_EPSIZE,
                    .PollingIntervalMS   = 1
                },
            
            .Refresh                  = 0,
            .SyncEndpointNumber       = 0
        },
        
    .Audio_StreamEndpoint_SPC = 
        {
            .Header                   = {.Size = sizeof(USB_Audio_StreamEndpoint_Spc_t), .Type = DTYPE_AudioEndpoint},
            .Subtype                  = DSUBTYPE_General,
            
            .Attributes               = 0x00,
            
            .LockDelayUnits           = 0x00,
            .LockDelay                = 0x0000
        }
};

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кому-нибудь удалось запустить на AT91sam7sxxx пример usb-device-composite-cdchid-project? У меня даже прекомпилированный из пакета с примерами не опознаётся... (cdc в одиночестве нормально видится).

После некоторгого колчестав возни сделал общее дерево исходников для конфигураций

 

#CHIP  = at91sam9xe512
#BOARD = at91sam9xe-ek

CHIP  = at91sam7s64
BOARD = at91sam7s-ek

 

на evaluation board с at91sam9xe512 оба устройства опознаются нормально, на устройстве с at91sam7s64 процесс не доходит до конца - и USB composite device висит с вопросиком.

 

Это у меня криво или играет роль та самая ошибка в usb framework про недосылку нулевого пакета после кратного длине допустимого для EP пакета?

Есть ли поправленный вариант usb framework?

Одиночное устройство CDC, композитное usb-device-audio-looprec-project работают нормально.

 

Да, уточняю - используется AT91LIB version 1.9 (11 MB, revision 1.9, updated 12/08) из файла at91lib_20100901_softpack_1_9_v_1_0_svn_v15011

Изменено пользователем Genadi Zawidowski

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...