Tuner desktop conectado ao Garage — sync de tunes funcionando
Pistonix Tuner ganhou simulador de ECU sem hardware, MapEditor com multi-seleção e undo, datalog viewer, e agora sincroniza tunes com o Garage via tokens por dispositivo. Garage por baixo: armazenamento híbrido R2 + MinIO.
Enquanto o firmware da ECU avança em CI sem hardware, o Pistonix Tuner desktop também evoluiu de “esqueleto vazio” pra ferramenta usável de verdade. E o Garage finalmente faz mais que receber email da lista de espera — começou a guardar tunes do usuário com tokens próprios por dispositivo.
Tuner desktop — o que mudou
- Simulador de ECU embutido — sem precisar de Proteus pra desenvolver UI, o backend Tauri faz papel da ECU: gera RPM, MAP, AFR, ECT, IAT, TPS com ruído determinístico (LCG seedado) e warm-up exponencial de ECT. Live-data flui a 100Hz.
- MapEditor sério — seleção múltipla de células (click + shift+click), preenchimento em range (Ctrl+Enter), undo/redo via stack local. Quem tunou em FuelTech reconhece o padrão.
- Basemap I/O completo — schema TOML versionado (schema_version=1), validação Rust-side (axes ascendentes, dimensões coerentes, safety thresholds em ordem), open/save via diálogo nativo do OS.
- Datalog viewer — abre CSVs de log e mostra os canais em tabela. Plot temporal vem na fase 6 quando integrar com a ECU real.
- Connection state machine — disconnected → connecting → connected → streaming → connection_lost. Heartbeat conta reads consecutivos: 3 falhas viram “connection_lost”, 8 caem pra “disconnected” com botão de retry.
- Settings rico — edita engine geometry, injector, cold-start e safety thresholds direto no app, sem ter que abrir o TOML no editor.
Garage — extensões de produção
- Tokens por dispositivo — cada Tuner install agora se registra com
um nome (“Henrique’s MacBook”, “Garage workstation”) e ganha um token
próprio. Server guarda só
sha256(token). Plaintext aparece uma vez na resposta de registro — caller copia e guarda. Permite múltiplas instalações sem compartilhar oPISTONIX_API_TOKENmestre. - Armazenamento híbrido (ADR-009) — tunes públicos e firmware
binários vão pro Cloudflare R2 (egress free, CDN global em
cdn.pistonix.com.br); telemetria e datalogs privados ficam no MinIO rodando na mesma VPS (LGPD: dado pessoal não cruza fronteira). Mesmo cliente S3-compat dos dois lados (@aws-sdk/client-s3). - Endpoint público —
GET /public/basemaps/by-model/:familylista basemapsis_public = truesem precisar de auth. O site institucional consome em build time pra mostrar “N basemaps disponíveis” por motor na página/compatibilidade.
Sync end-to-end
Settings do Tuner ganhou seção Pistonix Garage: configura API base,
registra device (mostra plaintext token uma vez com botão Copy), faz
push do tune carregado (POST primeira vez, PUT em saves seguintes), lista
tunes remotos, baixa um pra editar, lista devices e revoga quando
quiser. CORS já permite tauri://localhost no backend, então não
precisou de Rust shim.
O que vem agora
- Smoke test de R2 em produção (subir um firmware fake, listar via
/public/basemaps, baixar via CDN). - Migração do token do Tuner pra OS keychain via
tauri-plugin-strongholdpré-launch (localStorage é OK pra MVP, mas não é ideal). - Push automático de tune ao salvar (debounced) em vez de manual.
- Versionamento de tune (cada save vira revision com diff visualizável no Garage).