Contexto
Um amigo e eu estamos jogando um jogo onde a otimização para jogar um determinado personagem no jogo é manter dois botões pressionados ao mesmo tempo, ou seja, as teclas Qe E. Isso significaria que, dentro do jogo, as duas habilidades vinculadas a essas teclas disparariam alternadamente.
Ou seja, ao segurar Qe E:Q E Q E Q E Q E Q E
Problema
O problema surge porque não consigo replicar o que meu amigo fez quando pressiono as teclas Q e E. O que recebo é:
ou seja. ao segurar Qe E: Q E E E E E E E E E
ou E Q Q Q Q Q Q Q Q
(dependendo de qual chave é detectada primeiro)
Depois de discutir com meu amigo, ele diz que seu rollover n-key, além de anti-ghosting, permite que isso funcione.
No entanto, uma vez que nós dois começamos a olhar mais profundamente para isso, fez cada vez menos sentido, já que ambos os nossos teclados têm os recursos mencionados acima. Ambos os nossos teclados estão listados abaixo se fornecer contexto adicional.
- Meus amigos: GMMK Full Brown Switch
- Meu teclado: Razer Hunstman Elite
O que estou tentando descobrir agora é o que permite que o teclado dele funcione da maneira que funciona, enquanto o meu não pode fazer o mesmo.
O anti-ghosting só entra em ação quando pelo menos três teclas são pressionadas - é irrelevante para apenas duas, então não importa aqui.
E para teclados USB, o comportamento de repetição de teclas depende do software, não do teclado . O teclado simplesmente informa ao computador todas as teclas que estão pressionadas no momento (até o limite de "rollover" suportado pelo teclado) e avisa o computador sempre que esse estado mudar. É o SO responsável por comparar a lista de teclas retidas com o estado anterior e gerar os eventos apropriados de "tecla pressionada" e "tecla liberada", e é o SO responsável por perceber quando uma tecla foi pressionada por um determinado período de tempo e gerando eventos extras, se apropriado.
Todos os sistemas que eu já vi se comportam da maneira que você descreve o comportamento do seu sistema - o typematic só gera repetições para a última tecla que foi pressionada, e apenas enquanto ela estiver pressionada (se você soltar essa tecla, mas ainda manter pressionadas outras teclas que foram pressionados anteriormente, não há repetições). Mas como o comportamento é definido por software, deve ser possível substituí-lo no software, desde que o teclado seja pelo menos 2KRO (o que basicamente todos os teclados são; 1KRO tornaria a digitação proficiente basicamente impossível).
Para responder a essa pergunta, é preciso entender como funcionam os teclados.
Se você olhar para os teclados anteriores, perceberá que o plugue tem apenas alguns pinos, não o mesmo número de pinos que as teclas do teclado.
Dito isto, se você pressionar uma tecla no teclado, ela ainda será instantaneamente transferida para o computador sem nenhum atraso. Então, como isso é possível?
Um teclado funciona com uma matriz de sinais horizontais e verticais. Todas as teclas são dispostas em uma grade, conforme mostrado em seu teclado. Quando você pressiona uma tecla, ela não diz apenas que a tecla "x" foi pressionada, mas sim que a tecla na coluna 3 e a linha 5 foram pressionadas. Isso significa que, no final, a quantidade de linhas de dados não é o número de chaves, mas apenas o número de linhas e colunas (otimizado).
O problema agora diminui quando você pressiona várias teclas ao mesmo tempo, a matriz agora pode vir em um estado em que não pode saber com certeza qual tecla é pressionada, e é por isso que alguns teclados podem pressionar apenas 2 teclas de uma só vez e uma terceira tecla é ignorado.
Para combater isso, a matriz foi redesenhada para evitar que isso aconteça, e é por isso que alguns teclados afirmam que você pode pressionar 4 ou 5 teclas, mas se você encontrar a combinação mágica, reduz para 2 novamente, mas acontece muito menos frequentemente devido a muitas tentativas e erros.
Como isso acabou se tornando um problema, outros métodos foram usados para realmente suportar vários pressionamentos de tecla, conhecidos como anti-ghosting. O problema aqui é que isso pode ser alcançado de várias maneiras, e é por isso que alguns teclados dão QEQEQE, outros QEEEE ou EQQQQQ.
Para encurtar a história, em uma tentativa de permitir que várias teclas sejam pressionadas ao mesmo tempo, dependendo de quanto orçamento de desenvolvimento e qual método foi usado, o comportamento de pressionar várias teclas ao mesmo tempo é diferente para diferentes modelos.
Teclados orientados para jogos mais recentes enviarão todas as teclas pressionadas muito rapidamente para o computador, para o driver via USB, que pode informar ao software quais teclas são pressionadas, o que mostra QEQEQEQE, enquanto as teclas mais antigas ainda usam uma matriz e usam teclas de hardware, que mostram apenas QEEEEEEE ou EQQQQQQ .
Com um teclado USB, esse tipo de comportamento de “repetição automática de duas teclas ao mesmo tempo” ocorre no Windows se o teclado enviar os eventos de pressionamento de tecla para ambas as teclas no mesmo relatório de entrada HID. Até testei isso com uma modificação personalizada no firmware do teclado QMK , onde posso controlar exatamente quais relatórios de entrada HID são enviados por USB. Outros sistemas operacionais podem não ter esse comportamento (por exemplo, o Linux sempre escolhe apenas uma chave para repetição automática).
Quanto ao motivo pelo qual teclados diferentes têm comportamento diferente em relação a esse recurso, pode haver várias explicações:
Cronometrar os pressionamentos de tecla para que eles sejam relatados no mesmo relatório de entrada HID pode ser mais difícil com uma taxa de varredura mais alta (assim, em um teclado mais antigo com a taxa de 250 Hz, acionar a repetição automática dupla pode ser mais fácil do que em um teclado mais novo com a taxa de 1000 Hz avaliar).
Embora a maioria dos teclados de "jogos" hoje em dia anuncie "taxa de 1000 Hz" (portanto, as teclas pressionadas com mais de 1 ms devem ser relatadas em relatórios de entrada separados), esse tipo de publicidade nem sempre é 100% honesto - em particular, alguns debounce algoritmos podem fazer com que os pressionamentos de tecla relatados sejam sincronizados mesmo quando os pressionamentos de tecla físicos foram detectados com mais de 1 ms de intervalo.
Alguns teclados podem estar executando um processamento especial no firmware (por exemplo, relacionado ao suporte a macros), o que resulta na geração de relatórios de entrada HID separados para cada alteração de estado de tecla - se o firmware do teclado for escrito dessa maneira, obtendo a "repetição automática dupla" de seria impossível mesmo com o tempo de pressionamento de tecla mais preciso.
Uma possível solução alternativa é que alguns teclados suportam macros para que você possa programar uma macro para fazer QE e depois repeti-la enquanto a tecla macro estiver pressionada. Eu costumava fazer isso no Diablo 2 ou 3 no meu antigo Razer Blackwidow. O aplicativo de controle Razor tinha um editor de macro que me permitia escolher enviar a sequência apenas uma vez ou repeti-la até que eu parasse de manter a tecla pressionada. Se você não tiver teclas de macro dedicadas, você pode simplesmente definir a macro para uma tecla que não é usada no jogo (talvez uma tecla de função ou backtick ou algo parecido).