From be0f3579c6fdcf52a4884487921cc429ad6f7b61 Mon Sep 17 00:00:00 2001 From: Joey Yakimowich-Payne Date: Sun, 6 Sep 2026 13:31:28 -0600 Subject: [PATCH] docs: apply scheduling research to native transport investigation --- SWITCH_FAMILY_HD_RUMBLE_PLAN.md | 84 +++++++++++++++++++++++++++++++-- 1 file changed, 81 insertions(+), 3 deletions(-) diff --git a/SWITCH_FAMILY_HD_RUMBLE_PLAN.md b/SWITCH_FAMILY_HD_RUMBLE_PLAN.md index 25d383a..fb0ab52 100644 --- a/SWITCH_FAMILY_HD_RUMBLE_PLAN.md +++ b/SWITCH_FAMILY_HD_RUMBLE_PLAN.md @@ -161,9 +161,39 @@ completion state. OUT payload `` supports: - handle `0xffff` + value 2/3 to set incoming-credit batching threshold; - handle `0xffff` + value `0x101`/`0x102`/`0x104` to set receive bound 1/2/4. -No link policy changes automatically. The prepared comparison matrix uses -active Pro policy, tests `(receive, credit)` pairs `(1,2), (2,2), (4,2), -(4,3), (2,3), (1,3), (1,2)`, and restores baseline controls afterward. +The interrupted active-policy matrix is invalid across its reconnect. HCI +recorded reason `0x22` (LMP response timeout) about 32.9 seconds after the +active-mode transition; this is correlation, not proof of cause. Tests now +abort on Pro connection-generation changes, changed link fingerprints, USB +errors, or a changed/stopped DualSense native run. + +A subsequent same-boot **normal-policy** matrix completed with stable +connections. All cases received 513 commands per controller, but all failed +the no-loss criterion: + +| Receive bound | Credit threshold | Pro completed / dropped | DS skips | +|---:|---:|---:|---:| +| 1 | 2 | 174 / 338 | 38 | +| 2 | 2 | 195 / 317 | 31 | +| 4 | 2 | 207 / 305 | 19 | +| 4 | 3 | 204 / 309 | 21 | +| 2 | 3 | 196 / 316 | 26 | +| 1 | 3 | 183 / 329 | 37 | +| 1 | 2, repeated baseline | 177 / 335 | 40 | + +All but the `(4,3)` trial coalesced one command. Threshold 3 reduced incoming +credit-return command traffic, but did not materially improve delivery. + +Temporary sniff negotiation controls also support Pro handle + `0x200 | N`, +where N is 8/12/16/24 slots of 0.625 ms. Attempt/timeout were 4/1. The Pro +re-entered 15 ms sniff before deferred and immediate re-entry requests ran; +those attempts received Command Disallowed. Briefly gating automatic sniff, +requesting interval 12, then restoring policy 5 successfully negotiated +7.5 ms, but no healthy mixed-stream throughput result was obtained: the +DualSense stream was in can-send timeout. Original interval 24 / policy 5 +were restored and the connected DualSense native stream was re-armed. +Do not promote interval-only tuning from command acceptance. + Keep approvals/bonds/profiles unchanged. Remove diagnostic hooks and restore or qualify settings before publishing another production build. @@ -172,6 +202,54 @@ output traffic and uses input-report-aware throttling. This is corroborating timing evidence, not code incorporated into this project: https://github.com/torvalds/linux/blob/master/drivers/hid/hid-nintendo.c +## Scheduling literature: applicable principles, not a drop-in port + +User-supplied paper: Moonbeom Kim and Jeongyeup Paek, +[Multiconnection Scheduling With Fair Resource Management for Scalable +Bluetooth Low-Energy Networks](https://ieeexplore.ieee.org/document/11275955) +(EMBLEM, IEEE IoT Journal, 2026; online December 2025). + +The full text was reviewed. EMBLEM operates in a modified central **BLE link +layer** on nRF52840/Mynewt/NimBLE, using Bluetooth 5.3 connection subrating, +anchor placement, event preemption/extension, measured event durations and +guard resources. Our Pro/DualSense links are **Bluetooth Classic BR/EDR**; +Classic sniff/subrating is not LE connection subrating. The CYW43439 firmware +owns radio scheduling, and the HCI APIs used here do not expose equivalent +anchor placement or event preemption. Its results therefore do not establish +our achievable capacity or justify copying its BLE constants. + +Useful next experiments/design directions: + +- Treat both native outputs as clients of one host-side admission scheduler. + Use deadlines/age plus bounded per-link service, not independent writers + consuming credits opportunistically. This cannot guarantee on-air scheduling. +- Budget measured queue/credit occupancy and estimated exchange cost, not + payload bytes alone. HCI completion delay is a proxy, not measured airtime. +- Examine window duration and phase as well as interval. For Classic sniff, + attempt/timeout and negotiated interval matter together; shortening only + the interval can reserve too much service time for one link. +- Retain guard margin for measured jitter/retransmissions. Exclude reconnects, + stopped streams, and coalesced holds from inappropriate rate/latency estimates. +- Adapt slowly using smoothed demand and hysteresis, rather than issuing + radio-parameter updates on every 8 ms rumble change. EMBLEM's illustrated + adaptation takes about four seconds, not a per-haptic-frame response. +- The application output periods share a **64 ms hyperperiod**: eight 8 ms + Pro updates and three 64-frame/3-kHz DualSense reports. A small deadline/phase + analysis is sufficient; the paper's 1,023-node bitmap tree is unnecessary + for four slots. This application calendar is not a Bluetooth radio calendar. + +Related sources: + +- [RT-BLE: Real-time Multi-Connection Scheduling for Bluetooth Low + Energy](https://ieeexplore.ieee.org/document/10229006/) models retransmission + latency and allocates connection resources; its + [implementation](https://github.com/sada45/RT-BLE) modifies NimBLE/RIOT on + nRF52840. Abstract and implementation requirements reviewed, not full paper. +- [Efficient polling schemes for Bluetooth picocells](https://ieeexplore.ieee.org/document/936938) + is directly about Classic master-controlled polling/TDD. Abstract/introduction + reviewed; useful direction for service-time-aware polling and fairness, + not evidence that its radio scheduler can be installed above HCI here. + ## Read these code paths first | Area | Files / symbols | Relevant facts |