Módulo MIDI Linux Gadget (g_midi) com iPad em Raspberry Pi

1

Estou tentando usar o MIDI Linux Gadget Module (g_midi) para transformar um Raspberry Pi Zero em um dispositivo USB MIDI. Eu habilitei o g_midi usando os seguintes comandos:

echo "dtoverlay=dwc2" | sudo tee -a /boot/config.txt
echo "dwc2" | sudo tee -a /etc/modules
echo "g_midi" | sudo tee -a /etc/modules
reboot

E agora um dispositivo MIDI aparece na lista quando eu executo sudo amidi -l .

Quando conecto o Pi Zero a um computador via USB, o computador detecta um novo dispositivo MIDI e posso enviar mensagens MIDI entre o Pi e o computador. Eu posso conectar e desconectar o dispositivo quantas vezes eu quiser, e o computador sempre reconhece o Pi.

No entanto, isso não é o mesmo usando um iPad. Quando eu conecto o cabo USB de dados Pi no Kit de Conexão da Câmera (com o Pi Zero também sendo conectado com o PWR USB), posso conectar o Kit de Conexão da Câmera ao iPad e ele reconhecerá o Pi como um dispositivo MIDI. No entanto, se eu desconectar e reconectar o Kit de Conexão da Câmera, o iPad não reconhecerá o Pi novamente.

Conectar o Pi USB de volta a um computador faz com que o Pi seja reconhecido novamente naquele computador, mas não no iPad. Se eu desconectar o Pi e ligá-lo novamente, posso fazer com que ele reconheça bem novamente, mas apenas na primeira vez que eu o conecto.

Eu dei uma olhada usando dmesg -wH e a saída é a seguinte:

Pi Zero sendo conectado inicialmente ao computador:

[May27 11:58] dwc2 20980000.usb: new device is high-speed
[  +0.012000] dwc2 20980000.usb: new address 25
[  +0.008198] MIDI Gadget gadget: high-speed config #1: MIDI Gadget

Pi Zero está sendo conectado ao computador:

[May27 11:59] dwc2 20980000.usb: new device is high-speed
[  +0.010505] dwc2 20980000.usb: new address 26
[  +0.006452] MIDI Gadget gadget: high-speed config #1: MIDI Gadget

Pi Zero sendo plugado inicialmente no iPad:

[ +23.850688] dwc2 20980000.usb: new device is low-speed
[  +0.158771] dwc2 20980000.usb: new device is high-speed
[  +0.015806] dwc2 20980000.usb: new address 1
[  +0.007635] MIDI Gadget gadget: high-speed config #1: MIDI Gadget

Pi Zero está sendo plugado novamente no iPad:

[  +5.517874] dwc2 20980000.usb: new device is low-speed

Eu tenho (muito ocasionalmente) conseguido fazer com que o Pi Zero seja reconhecido pela segunda vez no iPad, desconectando e reconectando muitas e muitas vezes, enquanto aguardo entre replugs. Eu cronometrei quando desconectei e recarreguei, mas esses tempos não são reproduzíveis. O que eu notei nas raras ocasiões em que o Pi Zero foi reconhecido pela segunda vez foi que a mensagem de dmesg -wH era:

[May27 11:52] dwc2 20980000.usb: new device is low-speed
[  +0.158547] dwc2 20980000.usb: new device is high-speed
[  +0.015820] dwc2 20980000.usb: new address 1
[  +0.008327] MIDI Gadget gadget: high-speed config #1: MIDI Gadget

e a parte estranha era que o new address ainda era 1, enquanto no computador o endereço era incrementado em um a cada vez que eu conectava o Pi Zero.

Não sabendo nada sobre MIDI, USB ou Linux Gadget Modules, eu não tenho certeza se isso é significativo, mas até onde eu sei, é a única coisa diferente entre quando eu faço o Pi Zero reconhecer em um computador comparado a um iPad.

Alguém já teve alguma experiência em trabalhar com o MIDI Linux Gadget Module e um iPad, que sabe o que há de errado aqui? Eu gostaria de receber ajuda com isso.

    
por user2370460 13.08.2016 / 13:44

1 resposta

1

Isso pode acontecer porque, por padrão, o gadget g_midi (que é obsoleto BTW) usa o VBus Draw de 250 mV, o que significa que ele espera que o dispositivo host envie 250 mV para o dispositivo. Não sei se o iPad faz isso.

Isso não é um bug no g_midi porque é uma configuração genérica. Você pode alterar isso ao compilar o kernel alterando o CONFIG_USB_GADGET_VBUS_DRAW flag para um mV * 2 , conforme especificado pela especificação USB.

Exemplo, para exigir apenas 13mV:

CONFIG_USB_GADGET_VBUS_DRAW=26

Além disso, tente usar a versão mais recente do kernel do Linux disponível para você, talvez esse bug tenha sido corrigido.

    
por 21.11.2016 / 16:32

Tags