Pi Zero como HID: Como controlar o Mouse PC do Pi Zero via USB?

10

Estou perguntando isso porque não encontrei nada claro sobre esse assunto depois de pesquisar por dias. Então, desculpe se a pergunta já existe.

Estou trabalhando em um projeto, apenas por diversão, onde quero controlar o mouse para PC a partir do Raspberry Pi. A entrada do usuário seria feita por qualquer tipo de hardware conectado ao RP, minha principal dúvida é sobre como controlar o envio das instruções de movimento para o PC a partir do RP via USB.

Sei que tenho que ativar o modo OTG para que o PC o reconheça como um dispositivo USB, mas não tenho idéia de como enviar os movimentos do mouse para o PC através do USB e fazer o Windows / Linux entender. Descobri que o "Linux-USB Gadget API Framework" existe, mas não há exemplo sobre como usá-lo e, na verdade, não sei se é a melhor abordagem.

Poderia me dar algumas dicas ou recursos para me ajudar?

Muito obrigado.

Desproposito
fonte
Aqui está um ponto de partida, eu acho: kernel.org/doc/Documentation/usb/gadget_hid.txt Há um hid_gadget_testprograma mencionado lá, eu não tenho um pi à mão, mas você pode verificar apt-file search hid_gadget_test(e apt install apt-fileprimeiro se necessário).
goldilocks
@goldilocks Não, seu link parece bem no local, é definitivamente o lado certo da cerca. Por outro lado, ao vivo motoristas HID regulares comousbkbd.ko
Dmitry Grigoryev 10/10
@goldilocks nah, no Linux, "gadget" sempre significa correr como escravo, não como host.
Hbbs #
@ Hobbs Você está certo - adivinhei lá porque não conseguia me lembrar de qual extremidade g_etheré usada ao conectar o zero como um dispositivo Ethernet (mas é o lado do escravo, o driver do lado do host é o mais genérico usbnet).
goldilocks

Respostas:

6

Tente usar o g_hidmódulo mencionado por @goldilocks:

  1. Adicione uma linha dtoverlay=dwc2ao seu config.txte reinicie
  2. Insira o driver do driver com modprobe g_hid
  3. Corra hid_gadget_test /dev/hidg0 keyboard. Pode ser necessário criar o programa primeiro, usando o código de exemplo fornecido aqui .

Outra maneira mais flexível de conseguir o que você deseja (sem gravar drivers personalizados) é usar o gadgetfs . Conheço pelo menos um projeto que transformou um pequeno computador ARM em teclado / mouse / gamepad USB / Bluetooth usando essa abordagem.

Infelizmente, o status do gadgetfs no Rapsberry Pi é incerto. Este tópico sugere que não funciona, mas não está claro o que o autor tentou fazer exatamente. Eu sugiro tentar, no entanto:

  1. Adicione uma linha dtoverlay=dwc2ao seu config.txte reinicie
  2. Insira o driver FS do gadget com modprobe gadgetfs
  3. Monte o sistema de arquivos do espaço do usuário com mkdir /dev/gadget; mount -t gadgetfs none /dev/gadget/

Se não houver erros neste momento, você poderá usar as bibliotecas de gadgetfs como esta para programar seus dispositivos USB personalizados.

Dmitry Grigoryev
fonte
11
Muito obrigado pela sua resposta! Vou tentar os dois lados e avisá-lo assim que possível.
Desproposito 10/10
11
@Desproposito Você já trabalhou com isso? Eu adoraria uma atualização
Sirens
@ Sirens, desculpe, compre Não consegui fazê-lo funcionar :( Mas tentarei outra abordagem assim que tiver tempo para tentar outras maneiras.
Desproposito
@ Desproposito Você poderia dizer exatamente o que não conseguiu trabalhar? Você conseguiu modprobeos drivers? Você poderia montar gadgetfs? Você poderia construir e executar hid_gadget_test?
Dmitry Grigoryev