ToolActToolAct

Teste de Comando

Teste botões, sticks, gatilhos, D-pad e vibração do comando no navegador

Nenhum comando detetado
Ligue um comando e prima qualquer botão para o ativar
LBRBYXBA

Stick esquerdo

X: 0.00Y: 0.00
Centrado

Stick direito

X: 0.00Y: 0.00
Centrado

Gatilhos

LT
0.00
RT
0.00

Teste de vibração

Este comando ou navegador não suporta vibração.

Histórico de eventos

Prima um botão do comando para iniciar o teste...

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

  1. Ligue o comando por USB ou Bluetooth
  2. Prima qualquer botão do comando para o ativar
  3. Observe o layout no ecrã acender ao premir botões ou mover os sticks
  4. Utilize os botões de vibração para testar os motores
  5. 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

Diagnosticar botões sem resposta ou com duplo acionamentoPrima uma vez cada botão facial, bumper e direção do D-pad e observe o layout no ecrã acender a partir do estado real do botão. O histórico de eventos regista cada premir e soltar, pelo que um switch que dispare duas vezes numa única pressão ou que não registe de todo fica imediatamente visível em comparação com um botão bom.
Detetar drift do stick analógicoDeixe ambos os sticks centrados e leia os valores X/Y em tempo real. Um stick em bom estado repousa perto de 0.00; o aviso de drift fica laranja quando um stick reporta mais de 0.12 em repouso, o sintoma clássico de módulos de stick gastos que puxam a personagem ou cursor por si.
Verificar linearidade dos gatilhosCarregue lentamente em LT e RT e veja o valor subir de 0.00 para 1.00 nas barras de gatilho. Um gatilho que salte, atinja o máximo cedo demais ou nunca chegue ao valor total tem um potenciómetro gasto - útil de confirmar antes de culpar a sensação do acelerador num jogo de corrida.
Testar os motores de vibração de forma independenteOs botões de vibração fraca, forte e dupla acionam separadamente os motores de alta e baixa frequência através da API GamepadHapticActuator. Se apenas uma intensidade disparar, um motor está morto; se nada acontecer, ou o comando ou o navegador não suporta vibração e a página mostra isso explicitamente.
Identificar e trocar entre vários comandosO painel de estado mostra a string de ID do fabricante de cada comando, o tipo de mapeamento (padrão vs não padrão), o índice do slot e o número de botões e eixos. Quando estão vários comandos emparelhados, os chips de slot permitem alternar entre eles sem religar - útil para verificar um conjunto completo de comandos antes de uma sessão multijogador local.

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.0

Empurrar o stick esquerdo

Stick esquerdo para cima-direita -> axes[0] = 0.71, axes[1] = -0.68

Carregar 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.