Teste de Comando
Teste botões, sticks, gatilhos, D-pad e vibração do comando no navegador
Stick esquerdo
Stick direito
Gatilhos
Teste de vibração
Histórico de eventos
O que é o Teste de Comando?
Um teste de comando lê os sinais que o controlador envia ao navegador através da Gamepad API do W3C e mostra-os em tempo real: cada premir de botão, posição do stick analógico, profundidade do gatilho, direção do D-pad e motor de vibração. É a forma mais rápida de confirmar se um comando funciona antes de um jogo, diagnosticar um botão facial colado, detetar drift do stick num comando antigo ou verificar se ambos os motores de vibração disparam. A página realça cada entrada num layout ao estilo Xbox no ecrã, apresenta os valores brutos dos eixos e gatilhos e mantém um breve registo de eventos. Como a Gamepad API só expõe um controlador depois de premir um botão nele, a página pede-lhe que prima qualquer tecla primeiro - é uma regra de segurança do navegador, não um defeito do comando. Tudo corre localmente no navegador; nenhum dado de entrada sai do seu dispositivo.
Como usar
Como usar
- Ligue o comando por USB ou Bluetooth
- Prima qualquer botão do comando para o ativar
- Observe o layout no ecrã acender ao premir botões ou mover os sticks
- Utilize os botões de vibração para testar os motores
- Consulte o histórico de eventos para confirmar que cada premir foi registado
Dicas
- O realce verde significa que a entrada está a chegar ao navegador corretamente
- Um controlador só aparece depois de premir um botão nele - é uma regra de segurança do navegador
- O suporte de vibração depende do navegador e do comando; o Firefox tem o suporte mais alargado
- Se um stick apresentar um valor não zero em repouso, o aviso de drift alerta-o para drift do stick
- Vários comandos ligados podem ser trocados através dos chips de slot
Casos de uso
Princípio técnico
O navegador expõe comandos através da Gamepad API do W3C. Um controlador é representado por um objeto Gamepad obtido de navigator.getGamepads(), que devolve até quatro slots. Cada comando transporta uma string id (fabricante e produto), um campo mapping ('standard' para dispositivos com layout Xbox, vazio caso contrário), um array buttons e um array axes. No mapeamento padrão, buttons tem 17 entradas: quatro botões faciais (A/B/X/Y), dois bumpers (LB/RB), dois gatilhos analógicos (LT/RT), Select/Start, dois cliques de stick (L3/R3), quatro direções do D-pad e o botão Home/Guide. Cada botão expõe .pressed (booleano) e .value (0 a 1 - gatilhos são analógicos, botões digitais são 0 ou 1). O array axes guarda quatro valores no intervalo -1 a 1: X/Y do stick esquerdo, depois X/Y do stick direito. A API é baseada em polling, não em eventos, pelo que a página corre um ciclo requestAnimationFrame e lê um snapshot novo a cada frame. Para evitar re-renderizações inúteis com o comando em repouso, só atualiza o estado quando gamepad.timestamp muda - esse timestamp avança a cada novo relatório de entrada. A ligação e desligação chegam como eventos gamepadconnected e gamepaddisconnected da window. Por segurança, um objeto gamepad mantém-se null até o utilizador premir um botão nele, pelo que a página não consegue ler silenciosamente um comando recém-ligado. A vibração é opcional: se existir gamepad.vibrationActuator, chamar playEffect('dual-rumble', { duration, weakMagnitude, strongMagnitude }) aciona os dois motores; o Safari e algumas builds Chromium não a implementam, pelo que a página faz deteção de funcionalidades e desativa os botões caso contrário.
- navigator.getGamepads() devolve até quatro slots; um comando só fica não null depois de premir um botão nele.
- Mapeamento padrão: buttons[0-3] faciais, [4-5] bumpers, [6-7] gatilhos analógicos, [8-9] Select/Start, [10-11] L3/R3, [12-15] D-pad, [16] Home.
- axes[0-1] é o stick esquerdo (X, Y), axes[2-3] o stick direito, cada um no intervalo -1 a 1.
- Modelo de polling: um ciclo requestAnimationFrame lê snapshots; gamepad.timestamp controla as atualizações para que frames em repouso não façam nada.
- Vibração via gamepad.vibrationActuator.playEffect('dual-rumble', ...) - com deteção de funcionalidades, nem todos os navegadores suportam.
- Eventos gamepadconnected / gamepaddisconnected sinalizam ligação e desligação; o .index do comando identifica o slot.
Exemplos
Premir um botão facial
Premir A -> buttons[0].pressed = true, value = 1.0Empurrar o stick esquerdo
Stick esquerdo para cima-direita -> axes[0] = 0.71, axes[1] = -0.68Carregar num gatilho
Carregar RT até meio -> buttons[7].value = 0.50, pressed = false (abaixo do limite)Perguntas frequentes
Porque é que o meu comando não aparece depois de o ligar?
A Gamepad API mantém um controlador oculto até premir um botão nele, para impedir que as páginas façam fingerprinting silencioso dos dispositivos ligados. Ligue o comando por USB ou Bluetooth, foque este separador e prima qualquer botão - o painel de estado muda para Ligado. Este passo de ativação é uma regra de segurança do navegador, não um defeito.
Que controladores são suportados?
Qualquer controlador que o navegador exponha com o mapeamento padrão: comandos Xbox One/Series, DualShock 4 e DualSense (que a maioria dos sistemas mapeia como padrão) e a maioria dos comandos USB genéricos. Por Bluetooth ou USB, o navegador normaliza-os para o mesmo layout de 17 botões e 4 eixos. Comandos não padrão ainda funcionam, mas a ordem dos botões pode não corresponder aos rótulos no ecrã.
Porque é que a vibração não funciona?
O suporte de vibração varia. O Firefox tem o suporte mais alargado; o Chrome e o Edge suportam-no em versões recentes; o Safari não o implementa. O próprio comando também tem de expor gamepad.vibrationActuator. A página deteta isto e mostra um aviso explícito de 'não suportado' em vez de falhar silenciosamente, pelo que uma vibração em falta é um limite do navegador ou do hardware, não um bug aqui.
O meu stick mostra um valor quando não o toco - está avariado?
Um valor pequeno perto de 0 é ruído normal da zona morta. Se um stick repousa acima de cerca de 0.12 em qualquer eixo, o aviso de drift fica laranja - é drift clássico do stick, causado por módulos de potenciómetro gastos. É um problema de hardware que costuma piorar com o tempo; a ferramenta permite confirmá-lo antes de culpar o jogo.
É enviado algum dado para um servidor?
Não. A Gamepad API é lida inteiramente no seu navegador. Pressões de botões, posições dos sticks e instruções de vibração nunca saem do seu dispositivo. Nada é registado ou transmitido.
Consegue testar os gatilhos adaptativos do DualSense, o touchpad ou o giroscópio?
Não. A Gamepad API padrão só expõe botões, eixos e vibração básica. Os gatilhos adaptativos do DualSense, o touchpad capacitivo e os sensores de movimento não fazem parte do padrão web (alguns estão em extensões experimentais com suporte fraco nos navegadores), pelo que não podem ser testados de forma fiável a partir do navegador.