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
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
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
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
Ele é enviado sobre UDP
O Dish abre um socket UDP na porta 9876 e chama
sendtodireto 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
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
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
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_RUMBLEouMSG_LIGHTBARde 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:
- Entrada desacoplada. Transmita vídeo para a TV com o Moonlight, segure o seu celular como o controle. O Satellite faz isso parecer nativo.
- Co-op de sofá. Múltiplos clientes Dish pareiam com um Satellite, cada um com seu próprio controle virtual, mesmo quando só um dispositivo está transmitindo o vídeo.
- Sem vídeo nenhum. Muita gente usa o Dish para jogar no PC no mesmo monitor com o celular como controle sem fio. Sem streaming necessário.
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