BrickController2
BrickController2 (imurvai, open source, .NET MAUI) is a phone app that points a game controller at LEGO and third-party hubs over Bluetooth, and it covers more makes of hub than anything else here.
Its source is the fullest public collection of hub Bluetooth protocols anywhere.
Hubs it drives
- LEGO Powered Up — City, BOOST, Technic/Control+, Duplo (one class,
ControlPlusDevice). - SBrick, BuWizz 1/2/3, Circuit Cubes — full BLE packet formats.
- WeDo 2.0 (older service).
- Power Functions via the phone's IR blaster (38 kHz), not BLE.
Key finding: no hub uses auth/handshake — connect, discover, write. A re-implementation on the bridge therefore needs no key exchange and no pairing step.
Mapping architecture
Creation → ControllerProfile → ControllerEvent → ControllerAction. Each input can map to many device channels; contributions on one channel are summed and clamped; per-action deadzone / active-zone / curve (linear·expo·log) / invert / max-output. Inputs and per-hub BLE writes are decoupled (one send-loop per hub), so several hubs run at once. This is the model reused in the bridge.
Links
- Source: github.com/imurvai/brickcontroller2 (device classes in
DeviceManagement/, mapping inBusinessLogic/PlayLogic.cs,BuWizz_protocol.md).
Upstream is abandoned — use the forks
imurvai/brickcontroller2 has had no commits since 14 June 2024 (master since 11 June). Live development moved to vicocz/brickcontroller2 (default branch literally named default) and J0EK3R/brickcontroller2, both active through July–August 2026.
The forks double the hardware list — DeviceType.cs grows from 12 entries to 24, adding TechnicMove, PfxBrick, CaDA_RaceCar, SBrickLight, RemoteControl, the Mould King MK3_8/MK4/MK5/MK6/MK_DIY series and JieStar SCM4/SCM8.
Read the fork sources rather than the 3.4 APK. That build is the last upstream one and predates three whole device families. See Clone hubs (Mould King · CaDA · JieStar) for the BLE-advertising class the forks introduced, which needs the controller to act as an advertiser, not a GATT central — a role no design in this vault currently has.