Isso provavelmente levará várias etapas / iterações, e o formato de perguntas e respostas não é uma boa opção. Por favor, atualize sua pergunta com mais informações, se você está preso, e ping me em um comentário para esta resposta. Vou editar minha resposta então.
A partir da descrição, parece que o mapeamento de teclas especiais para os principais eventos é feito no teclado, portanto, a programação deve acontecer no teclado e não em um driver.
Existem vários sniffer USB de código aberto para o Windows, por exemplo, usbpcap ou o usbsnoop mais antigo, o Google provavelmente encontrará mais e tutoriais sobre como usá-los.
Em princípio, você precisará gravar a comunicação enquanto programa diferentes teclas especiais com sequências de teclas diferentes com o software de programação. Então olhe os pacotes, compare-os e veja quais bytes mudam para diferentes teclas especiais ou seqüências programadas. Adivinhe o protocolo, reproduza-o em um programa auto-escrito usando libusb
no Linux.
Como o seu teclado é HID e o HID é altamente padronizado, temos um pouco de ajuda. Familiarize-se com a documentação da HID (ou pelo menos procure as partes que você precisa). Cada dispositivo HID vem com um descritor, e o descritor descreve toda a interação possível com o dispositivo de acordo com o padrão HID. Se é assim que o teclado é programado, e se não houver muitos campos "específicos do fornecedor", podemos adivinhar o protocolo diretamente.
Você pode ler o descritor de duas maneiras.
(1) Se o seu kernel tem debugfs
habilitado, como root
mount -t debugfs none /sys/kernel/debug
cat /sys/kernel/debug/hid/device_id/rdesc
onde device_id
é o id do seu teclado. Isso mostrará o descritor bruto como hexadecimais e como o kernel o analisa. Se a análise do kernel não for suficiente, tente hidrd para converter o descritor bruto.
(2) Emita HIDIOCGRDESCSIZE
e HIDIOCGRDESC
ioctls no dispositivo hidraw
(procure em dmesg
para encontrá-lo no seu teclado). O samples/hidraw/hid-example.c
na fonte do kernel Linux explica como fazer isso, ou usa uma ferramenta pronta como usbhid-dump .
O ideal é que você veja algumas das características ou saída que estão relacionadas à programação. Talvez você ainda precise espionar as ferramentas de software se muitos dos campos descritos não estiverem claros ou marcados como "específicos do fornecedor".