# FTTV INTERCOM — Cliente Windows 0.9 beta 1

Versão portátil para Windows 10/11, Intel/AMD x64. O Server continua no Mac. Cliente gratuito; cada conexão ocupa uma vaga simultânea da licença do Server.

## Como abrir

1. Copie o ZIP para o PC e use **Extrair tudo**. Não abra o aplicativo diretamente dentro do ZIP.
2. Abra a pasta extraída e dê dois cliques em **Iniciar FTTV INTERCOM.cmd**.
3. Mantenha as pastas `app` e `runtime` ao lado desse arquivo. Não é necessário instalar Java separadamente.
4. Se não abrir, execute **Diagnostico.cmd** e informe a mensagem. Esta entrega é um beta portátil, sem instalador MSI e sem assinatura comercial do FTTV.

## Conectar

No Server do Mac, crie/habilite seu usuário e defina senha e permissões.

- **Rede local:** digite o IP do Mac Server, porta da central (normalmente **49640**), usuário e senha. Mac e PC precisam conseguir se comunicar nessa rede.
- **Internet:** digite o endereço HTTPS da ponte, porta HTTPS (normalmente **443**), usuário e senha. O acesso remoto deve estar ativo no Server.
- **Importar convite:** permite usar o arquivo de acesso existente.

Use um usuário diferente do que já está conectado em outro aparelho. O beta guarda endereços e preferências, mas não salva a senha nem o convite em disco. Para reconexão durante a mesma execução, mantém a credencial derivada somente em memória.

## Falar e ouvir

Marque os destinos e segure o botão central. Segurar o nome de um canal ou usuário fala diretamente com ele. Dois toques travam o PTT; outro toque no mesmo botão ou **Encerrar transmissão** fecha o microfone. O teclado Espaço opera o botão de PTT que estiver com foco. Os indicadores de usuários mostram quem está falando.

O PTT travado permanece ativo ao minimizar ou ocultar. Ao fechar a janela, o app continua na bandeja do Windows quando essa função está disponível. Use o menu do ícone para mostrar, abrir Configurações, fechar PTT, desconectar ou sair. PTT momentâneo fecha quando a janela perde o foco. Suspensão/hibernação do PC interrompe a comunicação; não equivale a apenas minimizar.

**Auto Connect** tenta recuperar quedas de conexão durante a execução. Depois da reconexão, o PTT fica fechado e os destinos precisam ser selecionados novamente.

## Áudio

Em **Configurações**, escolha microfone e saída/fone. Clique em **Aplicar / reconectar áudio** após mudar dispositivos. Ajuste ganho do microfone, volume geral e, quando conectado, escuta/transmissão por canal.

Use fones no primeiro teste: este beta não incorpora cancelamento de eco acústico. Os dispositivos precisam estar disponíveis ao sistema de áudio do Windows. Não há suporte ASIO direto, modo exclusivo ou separação multicanal por grupo nesta versão. Fones Bluetooth e interfaces USB precisam ser testados fisicamente; não há recuperação automática específica para troca de fone, use Reconectar áudio.

Se o microfone não abrir, confira em Configurações do Windows a permissão de acesso ao microfone para aplicativos de área de trabalho e se outro programa está usando a interface exclusivamente.

## Companion / Loupedeck CT

A CT continua sendo operada pelo Companion. No Cliente FTTV, abra **Configurações → Companion / controle HTTP** e ative o controle. A porta padrão é **49641**. Se o Companion estiver em outro computador, marque **Permitir outros computadores da rede** antes de ativar; use o IP do PC Cliente no Companion. Se o Windows pedir acesso pelo firewall, use a rede privada da produção. Não publique essa porta HTTP na internet.

Na conexão Generic HTTP Requests do Companion, configure a Base URL `http://127.0.0.1:49641` quando estiver no mesmo PC. Copie o token do **Cliente Windows**; ele é diferente do token do Mac e da chave da ponte.

Press action: POST `/control`, Content Type `application/json`, header JSON:

```json
{"Authorization":"Bearer SEU_TOKEN"}
```

Body de Press:

```json
{"action":"press","target":"ptt","source":"ct-ptt"}
```

Body de Release:

```json
{"action":"release","source":"ct-ptt"}
```

Para canal específico: `{"action":"press","target":"group","name":"Câmeras","source":"ct-cameras"}`. Use o mesmo `source` na soltura. Para usuário, `target` é `user`. As ações `latch` e `stop` travam/encerram; GET `/status` retorna o estado. Controle momentâneo remoto sem soltura termina em 60 segundos; latch permanece até encerrar. Os comandos respeitam as permissões do usuário conectado.

O controle HTTP inicia desativado a cada abertura. Não há módulo Companion próprio nem controle de volume por HTTP nesta versão. Atalhos de teclado personalizados/globais ainda não estão incluídos.

## Validação e primeiro teste

Compilação Java 17, inspeção das telas renderizadas e 12 testes automatizados passaram no ambiente macOS, incluindo:

- TLS/PSK compatível com um Server Swift real isolado, login por senha Unicode e convite, rejeição de senha incorreta, permissões e limite de vagas;
- transmissão/retorno de PCM idêntico por rede local e por transporte HTTPS/WSS de teste em loopback;
- PTT com reconhecimento da central, rejeição de reconhecimento atrasado, trava e soltura;
- mixagem, saturação, mute e filas de áudio limitadas;
- autenticação do controle Companion, despacho de comando e rejeição de origem não autorizada.

O runtime Windows x64 foi obtido do Eclipse Temurin e teve seu SHA-256 conferido com o metadado oficial. Não foi executado em Windows neste ambiente. Portanto, abertura no Windows 10/11, microfone, alto-falante, Bluetooth, bandeja e comportamento dos drivers precisam de teste nos PCs reais. O teste da ponte não substitui teste pela internet em produção.

Teste primeiro dois usuários distintos, com fone, na mesma rede. Confira fala/escuta, PTT momentâneo e travado, conversa individual e canal. Depois teste minimizar, desconectar/reconectar rede, Companion e acesso pela internet. Informe Windows/modelo de áudio e a mensagem exibida se houver falha.

## Desenvolvimento

JDK 17 / Gradle 8.11.1. `gradle test jar copyLibraries`. O transporte é compilado diretamente de `../Android/app/src/main/java/com/fttv/intercom/WireClient.java`, para evitar divergência de protocolo.

Os testes de interoperabilidade usam as variáveis `FTTV_ANDROID_FIXTURE`, `FTTV_ANDROID_RELAY_PORT` e `FTTV_ANDROID_TEST_TRUST`, com os fixtures de teste isolados descritos no README Android. Sem essas variáveis, os dois testes de integração são ignorados. Os demais testes são independentes.

`package.py` monta a distribuição usando o runtime oficial em `tools/windows-runtime.zip` e o checksum em `tools/runtime-sha256.txt`. Não empacota fixtures, credenciais, fontes de teste ou chaves de assinatura. Licenças do Temurin ficam em `runtime/legal`; bibliotecas preservam licenças e avisos nos respectivos JARs. Preserve essas pastas ao redistribuir.
