Como colocar um dispositivo de teclado específico no modo ascii?

0

Os scanners de código de barras se comportam como um dispositivo de teclado usb e meu caso não foi diferente no começo. Eu abri uma tela nano , pluguei o scanner pela porta usb, li um código de barras e vi a string que está escrita embaixo do código de barras.

Eu não sei como, mas agora não funciona assim. O scanner (o dispositivo semelhante a teclado) envia algum lixo para o sistema.

Eu escrevi um código NodeJS simples que despeja o que é capturado:

data:  <Buffer 04 00 62 60 5b 00 00 00> string:  b'[
data:  <Buffer 00 00 00 00 00 00 00 00> string:  
data:  <Buffer 04 00 62 5f 5b 00 00 00> string:  b_[
data:  <Buffer 00 00 00 00 00 00 00 00> string:  
data:  <Buffer 04 00 62 60 62 00 00 00> string:  b'b
data:  <Buffer 00 00 00 00 00 00 00 00> string:  
data:  <Buffer 04 00 62 5c 5d 00 00 00> string:  b\]
data:  <Buffer 00 00 00 00 00 00 00 00> string:  
data:  <Buffer 04 00 62 5d 5a 00 00 00> string:  b]Z
data:  <Buffer 00 00 00 00 00 00 00 00> string:  
data:  <Buffer 04 00 62 5c 5d 00 00 00> string:  b\]
data:  <Buffer 00 00 00 00 00 00 00 00> string:  
data:  <Buffer 04 00 62 5c 61 00 00 00> string:  b\a
data:  <Buffer 00 00 00 00 00 00 00 00> string:  
data:  <Buffer 00 00 28 00 00 00 00 00> string:  (
data:  <Buffer 00 00 00 00 00 00 00 00> string:  

Eu estava esperando uma string, como SIP-4-1 . ( Aqui é a saída showkey do mesmo código de barras)

O mesmo scanner funciona corretamente no Windows. Eu acho que está relacionado com um modo de teclado ou algo assim. Como posso alterar o modo de um dispositivo de teclado USB específico?

    
por ceremcem 16.09.2017 / 20:02

1 resposta

5

Seu scanner não está enviando lixo. Esses são relatórios de entrada perfeitamente convencionais para um dispositivo de teclado USB HID convencional com o descritor de relatório de "inicialização" convencional de 8 bytes.

Decodificando-os, pode-se ver que seu scanner não está enviando as chaves para "S", "I" e assim por diante diretamente. Em vez disso, ele está simulando inseri-los com a tecla ⎇ Alt . Ele está fazendo várias suposições bastante ruins sobre o sistema operacional ao fazê-lo, qualquer um ou todos os quais poderiam ser facilmente defeituosos.

Por exemplo:

  • O relatório de entrada
    04 00 62 60 5b 00 00 00
    são as chaves com os códigos de uso de USB HID E2 , 62 , 60 e 5B pressionados simultaneamente.
  • E2 , 62 , 60 e 5B são os códigos de uso de USB HID para ⎇ Alt Esquerdo , Ins / 0 , ↑ / 8 e PgDn / 3 .
  • 083 10 é o código para "S".
  • O relatório de entrada
    00 00 00 00 00 00 00 00
    indica que todas essas chaves foram lançadas.

O resto realmente decodifica para "I", "P", "-", "4", "-" e "1", todos digitados desta forma como ⎇ Alt mais três números decimais. (Os dois últimos relatórios de entrada são pressione e solte de ⮠ Return .)

Você pode ver as várias suposições quebradas aqui.

  • O scanner está assumindo que o driver do teclado analisa o relatório de entrada em uma determinada direção. Isso não é garantido, e o scanner deve gerar relatórios individuais para Ins / 0 , ↑ / 8 e PgDn / 3 sendo pressionados. e liberado por sua vez com a tecla modificadora pressionada por toda parte. É confiar em um acidente de implementação, e o que o scanner está realmente enviando é todas as quatro teclas sendo pressionadas e liberadas simultaneamente .
  • O scanner está assumindo que ⎇ Alt esquerdo é a chave a ser usada para isso. Mas em alguns sistemas operacionais e layouts de teclado, ele pode ser ⇮ Alt Gr / ⎇ Alt Direita , que é E6 (codificado como 40 no primeiro byte do O relatório de entrada) não é E2 .

    De fato, o sistema operacional atual, o driver do teclado e o layout do teclado podem não suportar a inserção de caracteres usando códigos como esse. (O emulador de terminal do kernel syscons do FreeBSD faz, por exemplo. O Microsoft Windows também, é claro. Mas o kit de ferramentas do nosh console-fb-realizer , GUIs como o LXDE e XFCE4 , e parece todas as GUIs disponíveis no Ubuntu ; não.)

  • O scanner está assumindo que o NumLock está desativado. Se o NumLock estiver ligado, ele deve estar fingindo que uma das teclas Shift também esteja pressionada, a fim de reverter o sentido da fechadura.

Com alguns scanners, essas coisas podem ser modificadas digitalizando códigos de barras especiais de "controle". Isso é provavelmente o que aconteceu aqui. Você digitalizou um código de barras de "controle" que ligou o scanner a um modo operacional que o sistema operacional, o driver do teclado e o layout do teclado não suportam. Nesse caso, você precisa consultar o manual do seu scanner e encontrar o código de controle que desativa o comportamento.

Por exemplo: Com um scanner da série NLS-HR32, esse é o efeito de colocar o scanner em "modo ALT + teclado 2" ou "modo ALT + teclado 3" e você precisaria voltar para "desativar ALT + Teclado "ou" modo ALT + Teclado 1 ".

    
por 16.09.2017 / 22:34