Determinando o Caminho HID para o dispositivo HID USB usando libhid no Linux

StackOverflow https://stackoverflow.com/questions/1060860

  •  21-08-2019
  •  | 
  •  

Pergunta

Estou interessado em usar libhid para acessar um dispositivo HID personalizado que estamos desenvolvendo em um microcontrolador PIC. Eu tenho sido capaz de obter êxito o código test_libhid a prazo. As instruções para a leitura e escrita para os dispositivos que utilizam essa biblioteca são fornecidos como comentários no código test_libhid.

Tentei seguir as técnicas documentadas para ler e escrever, mas até agora, eu não fui para ler ou escrever para o dispositivo com sucesso. Eu suspeito que a razão pode ser que o descritor de relatório para os especificados pelo dispositivo uma matriz de 64 bytes para ambos os relatórios de dados de entrada e saída.

Eu li os detalhes contidos no dispositivo de Definição de Classe para seção HID de usb.org, e eu acho que eu entendo como descritores de trabalho em geral e como elas se traduzem em caminhos HID, mas minhas tentativas de ler e gravar dados para o dispositivo falharam.

Tenho verificado que o dispositivo funciona em Windows, portanto, o meu problema parece estar no lado do Linux. Eu não acho que isso deveria importar, mas Devo observar que eu estou trabalhando atualmente em uma máquina virtual VMWare, carregado com Ubuntu 8.04 servidor

Alguém pode fornecer algumas orientações sobre como especificar ele caminho HID para o seguinte descritor relatório (gerado a partir lsusb -vvv):

Report Descriptor: (length is 29)
    Item(Global): Usage Page, data= [ 0x00 0xff ] 65280 
                        (null)
    Item(Local ): Usage, data= [ 0x01 ] 1
                        (null)
    Item(Main  ): Collection, data= [ 0x01 ] 1
                        Application
    Item(Local ): Usage Minimum, data= [ 0x01 ] 1
                        (null)
    Item(Local ): Usage Maximum, data= [ 0x40 ] 64
                        (null)
    Item(Global): Logical Minimum, data= [ 0x00 ] 0
    Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255
    Item(Global): Report Size, data= [ 0x08 ] 8
    Item(Global): Report Count, data= [ 0x40 ] 64
    Item(Main  ): Input, data= [ 0x02 ] 2
                  Data Variable Absolute No_Wrap Linear
                  Preferred_State No_Null_Position Non_Volatile Bitfield
    Item(Local ): Usage Minimum, data= [ 0x01 ] 1
                        (null)
    Item(Local ): Usage Maximum, data= [ 0x40 ] 64
                        (null)
    Item(Main  ): Output, data= [ 0x02 ] 2
                        Data Variable Absolute No_Wrap Linear
                        Preferred_State No_Null_Position Non_Volatile Bitfield
    Item(Main  ): End Collection, data=none

Além disso, quando eu executar o programa test_libhid, ele despeja a árvore de análise como 64 entradas idênticas que esta aparência:

path: 0xff000001.0x00000000; type: 0x80

Estes são presumivelmente as entradas. Esta lista é seguida por outros 64 entradas que olhar como esta:

path: 0xff000001.0x00000000; type: 0x90

Eu afixei a lista de discussão libhid, mas não tem havido muita atividade lá recentemente, então eu pensei que eu iria trazer a minha pergunta aqui. Se alguém pode fornecer orientações sobre como o caminho HID para este relatório entrada e saída deve ser especificado, seria uma grande ajuda.

Graças.

Foi útil?

Solução

Depois de muita tentativa e erro, eu nunca fui capaz de obter libhid ao trabalho com o descritor relatório para o meu dispositivo de destino. Eu achei que o dispositivo HID Interface (hiddev) funcionou muito bem, e foi realmente muito fácil de entender. Há uma boa PDF de referência para hiddev que eu recomendo. Além disso, a incluir hiddev.h arquivo em / usr / include / linux também foi muito útil. No Ubuntu 8.04, a interface hiddev trabalhou "fora da caixa" com nenhuma configuração adicional necessária.

Esperamos que este vai ser de alguma ajuda para a próxima pessoa que tem problemas de interface seu dispositivo HID para um host Linux.

Nota: O link que eu forneci para o arquivo .PDF acima parece ter desaparecido. Eu postei um cópia do arquivo .PDF aqui . É um serviço de compartilhamento de arquivos gratuito, assim você terá que suportar alguns anúncios, a fim de baixá-lo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top