Commit graph

188 commits

Author SHA1 Message Date
e2f9e1f211 Add UART link statistics and drop host-side gyro zeroing
STATS command (0xAA 0xFE 0x08 0x02 'STATS') returns frames accepted/rejected,
bytes discarded, RX FIFO overruns and motion frame/sample counters;
controller-uart-bridge --debug-uart prints them beside host send counts.
The bridge no longer zeroes the gyro from its first 200 samples: like the
AIO's Bluepad32 path, controller-calibrated values are forwarded unchanged.
2026-09-22 17:25:52 -06:00
6c27e601d9 Consume UART motion samples once per USB report like the AIO
The bridge now forwards each SDL sensor sample once instead of re-sending
its last window at 500 Hz, and the firmware pools pending samples per slot
until a USB report retires them. A stalled or slow sensor stream can no
longer be re-integrated as continuous rotation in quaternion mode.
--debug-imu reports the sample rate, |a| in g and bias lock state.
2026-09-22 16:56:45 -06:00
8db720fb9a Accept USB BOOTSEL reboot on the UART firmware
The regular firmware now answers the EP0 vendor INFO and BOOTSEL reboot
requests with the AIO wire protocol, so switch-pico-config reboot bootsel
works when the Pico's USB side is on a PC. Wire constants move to
usb_management_protocol.h; other operations stall.
2026-09-22 10:59:29 -06:00
6e0676d9df Add UART BOOTSEL reboot command to the regular firmware
The bridge sends 0xAA 0xFE 0x08 0x01 'BOOTSEL' ck; the firmware verifies
checksum and magic and calls reset_usb_boot(). Exposed as
controller-uart-bridge --reboot-bootsel PORT and build.py --uart-port PORT,
which waits for the ROM loader before running picotool.
2026-09-22 10:41:51 -06:00
b6a017eb06 Emulate up to four controllers on the UART firmware
UART protocol v3 adds a slot byte to input frames (v2 still accepted as
slot 0) and slot-tagged BB 03 rumble frames. The regular firmware exposes
SWITCH_PICO_UART_CONTROLLERS (default 4) Switch Pro interfaces like the
AIO build. The bridge shares one serial port across controllers, maps
index:port[:slot], and demuxes rumble by slot.
2026-09-22 10:25:30 -06:00
883eba193c Add --rumble-gain/--rumble-curve shaping to UART bridge 2026-09-22 08:42:20 -06:00
8d9bb74c7d Add --debug-rumble frame tracing to UART bridge 2026-09-22 08:21:03 -06:00
b7b2041e3d Fix wake beacon serial latency and pretty-print JSON 2026-09-19 22:18:51 -06:00
57c0b3606b Add UART bridge serial port listing option 2026-09-19 22:04:42 -06:00
bed71f77f1 feat(wake): add controller-free USB serial wake beacon
Add a standalone Pico2W image reusing the configured nonconnectable wake
burst without Bluepad32, controller-host profiles, Classic/LE-central
roles, connection pools, pairing or writable TLV storage. Explicitly
disable and verify Classic inquiry/page scan before declaring readiness.
Keep the original controller firmware and captured wake identity unchanged.

Expose bounded SPWB1 CDC commands with exactly-once request IDs, explicit
failures and radio progress independent of serial backpressure. Add the
cross-platform switch-pico-wake script with strict preflight, bounded I/O,
no automatic rebroadcast, status-only mode and preserved uncertain-outcome
metadata. Standard USB serial requires no WinUSB/Zadig binding.

Add isolated --wake-only build/publication selection and document setup,
backup and physical-BOOTSEL recovery. Validate776 tests, focused framing
and lifecycle cases, ELF isolation and actual CDC operation on only the
new board. One burst completed in2.095s; malformed/status/reconnect input
and same-ID replay caused no additional broadcast. Original Pico untouched.
Private firmware images, console configuration and backups are excluded.
2026-09-19 22:03:17 -06:00
e277d34c20 Fix Windows wake discovery for unsupported USB interfaces 2026-09-19 20:48:41 -06:00
19358a0fff feat(wake): add USB-triggered Switch 2 wake with Windows interface support
Queue correlated, volatile wake requests for the BTstack owner and expose
read-only completion state. Keep the controller chord, captured identity,
pairings, profiles, HD settings and existing wake burst unchanged.

Add Python API and wake CLI with bounded waits, explicit failure outcomes
and no automatic broadcast retries. Avoid importing SDL just to obtain
fixed sensor IDs so USB automation has clean output and no SDL dependency.

Windows libusb cannot control hub roots. Expose only INFO/WAKE on each
native child's existing vendor Interface 1 with isolated control state;
retain hub/HID drivers, descriptors and identities. Add safe sibling-aware
Windows discovery and a packaged Windows libusb runtime. Document manual
WinUSB binding to Interface 1 only and migrate examples to find_wake_pico.

Validate with 713 tests, 10 firmware/probe builds, Windows x64 wheel
resolution on Python 3.9/3.11, and a real child-interface wake burst on
Linux (2.03 s, no controller, no failures). Device/configuration descriptors,
serials and persistent state matched before/after. Physical Windows
hardware/driver operation remains unverified on this Linux workstation.
2026-09-19 20:19:46 -06:00
80b788099b feat(native-usb): add 32-frame HD gameplay rumble and USB flight diagnostics
Preserve native frequency/amplitude timelines for DualSense PCM output,
remove the unsupported 64-frame path, and retain compatibility rumble for
other controllers. Use the validated 300 MHz sampling phase and restrict
non-bondable Classic discovery autoconnect to previously paired peers.

Buffer native-hub UART stdout and release USB IRQs around port-reset
callbacks. Add observer liveness and pre-SETUP root-response observations
without changing recovery behavior. Cover transport and haptics boundaries.

Record the user-accepted 0.108 trial: controls remained responsive and
rumble felt fine. Instrumentation changes timing; the disconnect root
cause and long-term reliability remain unqualified.

Validation: 624 tests, 11 affected firmware/probe builds, and on-device
concurrent USB and HD-auto-start checks. Private captures, generated
images, and unrelated working-tree files are intentionally excluded.
2026-09-19 17:03:46 -06:00
ae1ca51b9a feat(native-usb): route gameplay rumble and attach only after startup readiness 2026-09-19 08:20:47 -06:00
9f8678af96 fix(native-usb): isolate two-pair transport and hand off read status in IRQ 2026-09-17 20:24:32 -06:00
c26ea25f93 feat(studio): redesign editor with Tailwind and fix connection feedback 2026-09-15 22:04:49 -06:00
d15b0ec711 feat(profiles): add solo Joy-Con layouts and digital stick mappings
Add per-profile native solo routing, stick/click swapping, SL/SR output mappings, and digital left-stick directions with analog priority. Extend both codecs to schema 11 while preserving legacy profiles, expose the controls and preview in Studio, and carry rail outputs through Pro emulation. Verified with 541 tests, firmware builds, editor checks, and saved-profile preservation during native 0.89 deployment.
2026-09-15 17:33:31 -06:00
d424fe0f4a fix(native-usb): service masked completions and trace startup stalls
Keep native backend locking IRQ-permitting and service USB hardware from SRAM during BOOTSEL sampling. Add bounded input/control flight recording, root IN and EP0 snapshots, and masked-window handoff coverage. Record PC qualification and the remaining Switch stability limitations.
2026-09-14 13:55:35 -06:00
a699a6920b fix(native-usb): prevent transmit-bank starvation and retain battery telemetry 2026-09-13 21:00:17 -06:00
a407e84a39 Correct USB power reporting for translated native controllers 2026-09-13 09:28:46 -06:00
dd69f3d487 Restore profile editor management on the native Joy-Con hub 2026-09-13 08:35:10 -06:00
26a25a66af Start Wii motion immediately and track residual bias in background 2026-09-13 00:00:53 -06:00
a17ca603aa Support Bluepad32 gamepads as native Joy-Con pair sources 2026-09-12 23:03:15 -06:00
ab70536fdf Add DualSense native pair and Wii-only IMU settling 2026-09-12 22:06:50 -06:00
1748910316 Add stock-USB native Joy-Con R/L hub bridge 2026-09-12 15:28:58 -06:00
9f6dddb790 WIP: checkpoint Wii native IMU and upstream IR bridge
Pause Wii pointing work with firmware 0.33-wii-trace installed. Preserve the pinned libogc IR pipeline, calibrated native IMU, software BOOTSEL, and standard camera sensitivity trial.

Tracking instability, tracking loss, and ineffective vertical movement remain unresolved. Level-2 camera filtering is not hardware-qualified. Nine targeted regression tests pass; firmware and persistent storage were verified after flashing.
2026-09-11 17:05:54 -06:00
3040c9d294 Add verified Joy-Con 2 USB bridge with native mouse support
Implement the standalone USB protocol probe and Bluetooth-backed right Joy-Con bridge with its own persistent virtual pairing identity. Preserve complete ordered native reports, including opaque motion data, and match the console feature set. Relay built-in vibration cues only after genuine source acknowledgement and expose safe BOOTSEL pairing control. Include native capture diagnostics and focused protocol, packet-lifecycle, and cue regressions. Native mouse operation confirmed on Switch with bridge 0.24; private captures and firmware backups remain outside the commit.
2026-09-10 17:46:03 -06:00
485ad39709 Add Nunchuk and combined motion gestures with button or macro actions 2026-09-10 09:27:52 -06:00
4cbe8348ee Rearm Wii swing gestures between continuous strokes 2026-09-10 08:17:44 -06:00
9927e439b7 Add configurable accelerometer swing gestures for Wii Remotes 2026-09-10 08:01:24 -06:00
c7261c9338 Move adapter-wide controls into a settings dialog 2026-09-10 07:58:35 -06:00
5ecfca105a Add selectable Wii IR aiming and DolphinBar keepalive 2026-09-09 17:13:27 -06:00
e2c8e0d860 Consolidate firmware variants and publish AIO radio-mode builds 2026-09-09 11:53:14 -06:00
595518fe3d Add selectable BLE-only and Classic-only radio modes 2026-09-09 11:40:51 -06:00
7c1c37a84e Improve Bluetooth credit handling and Switch 2 connection timing 2026-09-09 10:40:25 -06:00
fa38123873 Add Wii MotionPlus support and calibrated Nunchuk controls 2026-09-08 12:39:44 -06:00
46f42a26dc Fix DualSense native audio initialization and default to accepted 32-frame format 2026-09-08 10:15:07 -06:00
79a72d811d fix: keep Joy-Con links fast and stop idle rumble writes 2026-09-07 20:35:02 -06:00
ed8f3a7c7f fix: reserve Classic reconnect airtime with two Switch 2 links 2026-09-07 18:39:30 -06:00
b0a896997b fix: retain the lower player slot when joining Joy-Cons 2026-09-07 18:07:31 -06:00
06a89b5ae1 feat: select Joy-Con player modes and join pairs with a shortcut 2026-09-07 17:42:33 -06:00
34f8a50c19 feat: give Joy-Con pairs independent persistent profile banks 2026-09-07 15:41:06 -06:00
8451b1eec9 feat: add model-aware Controller Studio artwork and topology 2026-09-07 12:57:33 -06:00
8dd11c17a6 fix: reconnect Joy-Con mates and balance mixed Bluetooth links 2026-09-07 12:04:41 -06:00
006b573ee8 feat: preserve native HD rumble on Switch 2 controllers 2026-09-07 08:19:53 -06:00
a87917bf0b feat: support Switch 2 controllers and expanded profiles 2026-09-06 23:17:26 -06:00
4e48b7a9e7 feat: add Xbox impulse-trigger rumble mapping 2026-09-06 16:14:11 -06:00
dcc97e05ba feat: coordinate native rumble with deadline-aware scheduling 2026-09-06 15:12:06 -06:00
be0f3579c6 docs: apply scheduling research to native transport investigation 2026-09-06 13:31:28 -06:00
309a0a4fc7 docs: checkpoint reversible transport comparison controls 2026-09-06 10:26:18 -06:00