Skip to content

BlueRetro - PlayStation 1 Custom Edition (v0.7.0)

Choose a tag to compare

@Schickacka Schickacka released this 22 Oct 16:42
· 30 commits to master since this release

BlueRetro - PlayStation 1 Custom Edition (v0.7.0)

Firmware customizado de alta precisão para receptores Bluetooth baseados em ESP32 voltado ao console Sony PlayStation 1. Desenvolvido e mantido por Schickacka, baseado no projeto de Jacques Gagnon (BlueRetro).


Novidades e Correções Arquiteturais da Versão 0.7.0:

  1. Garantia de Parada de Rumble sob Pressão de Fila:

    • A função adapter_q_fb() agora retorna confirmação de inserção na fila (bool).
    • Se a fila estiver cheia no momento em que o jogo comanda a parada dos motores, o evento de parada é retido em uma máscara atômica de fallback (fb_rumble_stop_mask) e aplicado diretamente pela tarefa bt_fb_task, garantindo que o controle nunca fique vibrando indefinidamente.
    • O shadow do barramento SPI (rumble_r_val/rumble_l_val) só é atualizado após enfileiramento bem-sucedido, forçando repetição no próximo ciclo se houver descarte.
    • Adicionada ressincronização periódica a cada ~100 ms para recuperar estados de vibração eventualmente perdidos no ar.
  2. Parada Segura de Motores no Reset ou Desconexão do Dispositivo:

    • Em bt_host_reset_dev(), um relatório explícito de parada é enviado antes da liberação de memória e encerramento do driver, evitando que motores permaneçam ligados caso o controle desconecte subitamente enquanto vibrava.
  3. Isolamento de Feedback por Dispositivo (fb_changed_mask):

    • Substituição da variável global fb_changed por uma máscara de bits por dispositivo (fb_changed_mask), evitando que comandos de LED ou rumble direcionados ao Jogador 1 forcem transmissões desnecessárias de pacotes ao Jogador 2.
  4. Eliminação de Ambiguidade no Pulso de Conexão:

    • O pulso háptico de 150 ms na conexão agora utiliza um contador de eventos reais do jogo (game_fb_cnt). Se o jogo enviar comandos de vibração durante a inicialização, o comando do jogo prevalece e o pulso não sobrescreve os dados legítimos.
  5. Higienização de Motores em Comandos de LED:

    • Ao processar eventos de LED (FB_TYPE_PLAYER_LED / FB_TYPE_STATUS_LED), os motores são explicitamente zerados caso o flag de rumble esteja desligado, impedindo que dados residuais no buffer reativem a vibração.
  6. Configuração Unificada de Cores via Kconfig:

    • A opção CONFIG_BR_PS1_LED_DIGITAL_COLOR agora rege oficialmente a cor do DualShock 4 (padrão #949190).
    • Criada a opção CONFIG_BR_PS1_LED_DIGITAL_COLOR_DS5 (padrão 0x000000), permitindo personalização independente mantendo o DualSense com a barra apagada e apenas os pontos de jogador ativos.
  7. Preservação de Rumble Durante Avisos de Bateria:

    • A rotina ps_send_led_only() agora preserva os parâmetros ativos de vibração ao invés de zerar os motores a cada pulso de notificação de bateria baixa.
  8. Retenção de Cor de Jogador Durante Animação de Conexão:

    • Se um comando de LED de jogador chegar enquanto o controle executa a respiração azul inicial, a cor solicitada é registrada como pendente (ps4_set_pending_led) e aplicada imediatamente ao término da animação.
  9. Telemetria e Diagnóstico Avançado:

    • Registro detalhado e legível no log de inicialização do motivo de reset do ESP32 (esp_reset_reason()), facilitando a identificação imediata de subtensão (brownout), panic ou watchdog.
    • Registro do código de motivo nos eventos de desconexão Bluetooth HCI (reason: 0xXX).
    • Registro de transições de vibração e contagem de eventos descartados de fila limitados a 1 linha/segundo para não concorrer com o lock de transmissão.
  10. Proteção Contra Underflow no Parser HID:

    • Validação rígida do comprimento mínimo de pacotes em bt_hid_ps_hdlr(), descartando com segurança pacotes truncados e prevenindo corrupção de memória.

Arquivos Anexos:

  • BlueRetro_hw1_playstation.bin: Binário compilado para atualização direta via OTA Bluetooth ou Web Flasher.
  • BlueRetro_PS1_Custom_v0.7.0_Package.zip: Pacote completo de instalação e atualização para Windows com scripts USB e OTA Bluetooth atualizados.