Repository navigation
KSCR Daemon 1.9.1
Core Changes
Rename: midi_inject to midi_bridge.
Mechanism: Replaced the invasive inline trampoline hook with a non-invasive multi-queue reader.
Implementation: Claims spare slots in OA's transmit queues via atomic increments; drains them from its own cursors without patching .text.
Data Stream & Performance
Generic Tap: Produces one destination-agnostic stream (Shared performance + all per-port data).
Efficiency: Captures everything the Kronos transmits once; excludes q0 (active-sensing/realtime).
Best-Effort: Reader skips forward if lagging, ensuring a slow TCP client never throttles OA's hardware output.
Throughput: 64 KB drain ring served directly to userspace (no bounce buffer) for multi-MB dumps.
Technical Improvements
Reduced Overhead: Removes JMP patches, relocated trampolines, x86 length decoders, and producer-side spinlock hazards.
Context: Runs in midi_tcp process context on /proc/.midi_ring read (no timers or shared workqueues).
Robustness: Dynamic address resolution with safe fallback for uncatalogued builds; hardware-validated on Kronos 2.
Updates & Maintenance
SysEx Fix: kscr_client.recv_sysex now skips real-time bytes ($\ge$0xF8) to prevent clock/sensing interference during reassembly.
Documentation: Updated api.md (Section 8.2) to reflect the single generic feed and removed old de-duplication logic requirements.
Version Bump: Suite version 1.8.1 to 1.9.0/1.9.1; renamed throughout all build files, source, and docs.