Home Homebrew WavePhoenix: il ritorno open-source del controller WaveBird su console Nintendo Switch

WavePhoenix: il ritorno open-source del controller WaveBird su console Nintendo Switch

94
0

WavePhoenix è un’implementazione open-source del protocollo utilizzato dai controller Nintendo WaveBird, progettata per funzionare con i SoC Wireless Gecko di Silicon Labs.

Questo progetto nasce dalla volontà del suo sviluppatore di riportare in vita una tecnologia ormai rara: il controller WaveBird, famoso per la sua eccellente autonomia, comodità e per essere stato il primo ad adottare la comunicazione radio a frequenza (RF) su console, è da anni fuori produzione, rendendo sempre più difficile reperire soprattutto i ricevitori.

L’autore ha deciso di ricreare da zero un ricevitore compatibile, sia dal punto di vista software che hardware. La parte firmware è divisa in diversi moduli:

  • libwavebird – Implementazione del protocollo WaveBird.
  • libsi – Implementazione del protocollo SI, utilizzato dai controller per comunicare con le console GameCube/Wii.
  • receiver – Implementazione di riferimento del firmware per un ricevitore WaveBird.
  • bootloader – Bootloader per l’aggiornamento del firmware dell’applicazione tramite Bluetooth.

Sul lato hardware, viene fornito un progetto completo per un ricevitore compatto, facile da assemblare e poco costoso, con tanto di file Gerber, PCB per KiCad e case stampabile in 3D.

Il protocollo WaveBird è stato in parte documentato grazie a un precedente lavoro di reverse engineering, che ha fornito la base per interpretare correttamente i pacchetti radio trasmessi dal controller.

Dopo una lunga ricerca, l’autore ha individuato nei SoC EFR32FG1 (e più tardi negli EFR32xG22, più moderni e convenienti) i componenti ideali per gestire il particolare tipo di modulazione DSSS a 15 chip usata dal WaveBird.

Una volta configurato correttamente il modulo radio, è stato possibile ricevere i pacchetti trasmessi dal controller, decodificarli e ottenere in tempo reale lo stato dei pulsanti e degli stick analogici.

Un’ulteriore fase del progetto ha riguardato la comunicazione tra ricevitore e console. Attraverso il bus SI, il ricevitore trasmette alla console GameCube i dati di input provenienti dal controller.

Tutto ciò avviene sfruttando le periferiche hardware dei SoC per evitare il carico diretto sulla CPU. Il ricevitore è in grado di rispondere ai comandi del sistema, come la richiesta dello stato dei pulsanti, informazioni sul controller o dati di calibrazione iniziale (origin message).

Per evitare interferenze tra più controller sulla stessa frequenza, viene implementato un meccanismo di “ID pinning” che fissa la comunicazione al primo controller rilevato su un dato canale.

Inoltre, è supportata anche una modalità di pairing semplificata tramite pulsante, che permette al ricevitore di rilevare automaticamente un controller in base alla combinazione di tasti premuti.

Uno degli aspetti più complessi è stato l’ottimizzazione della ricezione radio. Dopo lunghi test e regolazioni, il ricevitore è arrivato a gestire oltre 230 pacchetti al secondo a circa cinque metri di distanza, un risultato molto vicino alle prestazioni dell’hardware originale.

WavePhoenix è ancora in evoluzione, ma già promette molto: future espansioni potrebbero includere un firmware per trasmettere come controller WaveBird (non solo ricevere), un ricevitore per Nintendo 64, o una versione USB HID compatibile con PC e emulatori come Dolphin o RetroArch.

Changelog

  • Corretto un bug per cui il ricevitore richiedeva un nuovo abbinamento a ogni riavvio sull’hardware GameCube DOL-001 (e su alcuni DOL-101).
  • Incrementato il numero di versione interno.

Bootloader

Download: wavephoenix-bootloader-v0.9.2-efr32xg22e.hex – 186 KB

Download: wavephoenix-bootloader-v0.9.2-rf-bm-bg22c3.hex – 186 KB

Receiver Firmware

Download: wavephoenix-receiver-v0.9.2-efr32xg22e.gbl – 55.9 KB

Download: wavephoenix-receiver-v0.9.2-efr32xg22e.hex – 157 KB

Download: wavephoenix-receiver-v0.9.2-rf-bm-bg22c3.gbl – 55.9 KB

Download: wavephoenix-receiver-v0.9.2-rf-bm-bg22c3.hex – 157 KB

Codice sorgente

Download: Source code WavePhoenix v0.9.2

Fonte: github.com