Como funciona

De um botão apertado a um controle virtual.

Você não precisa ler nada disso para usar o Dish. Ele simplesmente funciona. Mas se você quer saber o que o seu input está fazendo entre o seu polegar e o jogo, esse é o trajeto inteiro: entrada, criptografia, transporte, injeção e o caminho de volta.

  1. 1

    Você aperta um botão no Dish

    Talvez seja um toque no overlay de toque do Dish para Android. Talvez seja um L1 do DualSense pareado por Bluetooth ao seu celular e encaminhado pelo Dish. De qualquer jeito o Dish pega o evento de entrada do SO no momento em que ele dispara. Não no próximo vsync, não no próximo frame. Agora.

  2. 2

    O Dish monta um relatório XUSB de 12 bytes

    O estado do controle vai para o formato de fio compacto do Satellite: dois bytes de botões, um byte por gatilho, dois bytes por eixo de stick analógico. Doze bytes no total. Binariamente compatível com o relatório XINPUT do Windows, então o receptor não precisa traduzir nada.

  3. 3

    Ele criptografa o pacote

    O Dish prefixa um token de sessão de 4 bytes e um contador de 4 bytes, e então sela o payload com ChaCha20-Poly1305 IETF usando a chave simétrica de 32 bytes que os dois lados derivaram da troca de chaves X25519 no pareamento. O contador serve como nonce e como defesa contra replay; o token é autenticado como AAD então não pode ser alterado.

  4. 4

    Ele é enviado sobre UDP

    O Dish abre um socket UDP na porta 9876 e chama sendto direto da thread de entrada. Sem fila, sem runtime assíncrono, sem ring buffer. O pacote é marcado DSCP EF (Expedited Forwarding, 0xB8), então qualquer roteador ou AP com suporte a QoS na sua LAN o coloca à frente do tráfego em massa.

  5. 5

    O Satellite recebe e verifica

    No seu PC gamer Windows, o Satellite está parado em seu socket UDP em uma thread de tempo crítico esperando. No instante em que um pacote chega, ele é verificado por MAC, descriptografado e checado contra o maior contador que já aceitamos nessa conexão. Qualquer coisa velha, forjada ou adulterada é descartada silenciosamente, então o seu jogo nunca vê um input corrompido.

  6. 6

    O Satellite injeta um controle virtual

    O Satellite entrega o relatório ao driver de kernel ViGEmBus em uma única chamada DeviceIoControl. Você escolhe por controle se vai plugar um Xbox 360 ou um DualShock 4. O DS4 ganha a superfície completa: movimento, dedos do touchpad, lightbar e bateria, todos reportados de volta ao jogo.

  7. 7

    O jogo responde, e responde de volta

    O jogo lê o novo estado do controle em seu próximo polling de entrada, normalmente dentro de um frame a 60 fps. Quando o jogo escreve vibração de volta, ou pinta a lightbar com uma nova cor, o Satellite criptografa e envia MSG_RUMBLE ou MSG_LIGHTBAR de volta para o Dish certo, que aciona haptics e LED na sua mão. Latência total dedo a pixel: alguns milissegundos mais o que o frame time do seu monitor adiciona.

O pareamento acontece uma vez

Da primeira vez que um Dish encontra um Satellite novo, você toca em "Gerar PIN" no menu de bandeja ou na UI web do Satellite. O Satellite mostra um código de 4 dígitos que dura 5 minutos. O Dish posta sua chave pública X25519 mais esse PIN em https://<seu-pc>:9443/api/pair. O Satellite verifica o PIN, calcula o segredo compartilhado, retorna sua chave pública, e os dois lados guardam em cache a chave simétrica de 32 bytes resultante. Daí em diante o controle reconecta silenciosamente: sem PIN, sem UI, sem precisar pensar.

"Mas e o Sunshine e o Moonlight?"

Sunshine e Moonlight continuam sendo o padrão ouro para transmitir vídeo do seu PC gamer para outra tela, como a sua TV, um celular ou um Steam Deck. Eles incluem encaminhamento de controle, mas isso assume que o controle e a tela vivem no mesmo dispositivo. O Dish lida com um modelo diferente:

Os nomes acenam para a mesma linhagem. Veja por que "Dish" e "Satellite".

Experimente você mesmo.

Cinco minutos da instalação ao primeiro input.

Baixar Dish