Conversation
Push3.exe imports four functions the Push 2 bridge does not export: libusb_bulk_transfer (forwarded to the host as one blocking call), libusb_strerror (standard message strings), and the two hotplug functions (stubbed; the vendor's Windows build reports no hotplug support and the helper polls the device list instead). The claim and release guard now accepts interfaces 0 through 255 so the helper can reach the xPort interface alongside the display. setup-prefix.sh scopes the builtin to Push3.exe, matching the Push 2 override. tools/push3usb.c is the host-side probe; a contributor ran it on Push 3 hardware on 2026-08-02 and the display interface passed the claim and cancel tests. A runtime test of Push3.exe with Live is still open, recorded in notes/ABLETON-WINE-PUSH3-USB.md.
The export/ordinal gate froze the 16-entry Push 2 list, so the first build with patch 0065 failed on the four new exports. The list now matches the 20-export bridge, and the block's messages say Push bridge, since the DLL serves Push 2 and Push 3.
…ables Live scans USB in its own process before it starts Push3.exe; the native libusb DLL finds no devices under Wine, so Live never detects a Push 3. All Live 12 libusb imports are bridge exports (patches 0032 and 0065). Requires the 0065 bridge; without it Live fails to load.
… USB MIDI ports Live finds a Push from the Windows device interface path of each MIDI device. Wine answered that message with MMSYSERR_NOTSUPPORTED, and it made the port names from the ALSA client and port. Live therefore did not find a Push 3, and it did not start Push3.exe. The patch answers DRV_QUERYDEVICEINTERFACE and DRV_QUERYDEVICEINTERFACESIZE in winealsa.drv. It makes the path from the USB device that is behind the sound card of the port. It also gives a port on a USB card the Windows name, and it lets midiInMessage accept a device ID, as midiOutMessage does. This changes the name of each USB MIDI port in a prefix. Refer to notes/ABLETON-WINE-PUSH3-USB.md.
The audit fails an artifact when a patch has no fingerprint and no stamp-only reason. Add the two winealsa texts from patch 0066. The winmm part of the patch adds no text, so it has no fingerprint of its own.
Live starts Push3.exe with patch 0066, and the helper reports "Push is go". The Push 3 note now records the detection path, the reason the helper could not use its MIDI ports, the driver changes, the verification, and the limits. USB MIDI ports use the Windows names with patch 0066. The Push 2 rows in README, TROUBLESHOOTING and the Push 2 note therefore change to Ableton Push 2. README gets a Push 3 setup section, and TROUBLESHOOTING gets a Push 3 entry. The comment in setup-prefix.sh no longer says that winealsa.drv refuses the interface message.
The series took 0065 and 0066 while it was written; main shipped a different 0065 (fullscreen normalization) in 2026.08.04.1, and 0066 through 0068 are reserved by PR 124. 0070 through 0072 are claimed by in-flight branches, so the Push 3 patches move to the first free pair: 0065-libusb-1.0-extend-the-host-bridge-for-Push-3.patch -> 0073 0066-winealsa-report-a-device-interface-and-Windows-names -> 0074 Patch contents are unchanged, so the SERIES.sha256 hashes carry over; only the filename column moves. Renamed references in the two Push notes, setup-prefix comments, TROUBLESHOOTING, and the build-audit fingerprints. Documented the 0070-0072 gaps in SERIES_GAPS and brought BASE.txt's series count and patch list up to date.
The MIDI rename affects every USB MIDI device, so the fact moves to one place: the README Hardware intro states the new names and the one-time re-select step, and TROUBLESHOOTING gains an entry for the symptom a user actually sees (a device lost its settings after an update). The Push 3 sections drop the patch number and the helper process name, gain the standalone-model control mode step, and order the checks by what the reader does: update, restart Live with the Push connected, power-cycle after a firmware update.
ClickSentinel
left a comment
There was a problem hiding this comment.
Reviewed at 71894e1, driver and prefix level: no Push hardware here, so the Push 3 path is read rather than run, and 0074's winealsa half is tested before and after against a USB MIDI controller on a runtime built from this branch. patch-check.sh, the 66-patch apply, the build and the audit all pass; the registration arithmetic is right; merging upstream/main is a no-op. No blocking findings.
Should fix
- The Push 2 setup steps rest on an untested prediction. The docs now say to select
Ableton Push 2, which is whichever port lands on seq port 0 — and the note saysWe did not test these names on Push 2 hardware. If that is not the Live Port, the shipped instructions point at the User Port, which the same note warns against. The display helper is unaffected: vid/pid, not names. Fix: one Push 2 launch before merge. - The rename has no off switch. Every USB MIDI port is renamed whether or not the user owns a Push, costing a re-select of devices and control-surface rows. The interface path is additive; only the rename is disruptive. Fix: an env gate that keeps the path and restores the old names.
usb_midi_interface()takes the firstreaddirhit, so&mi_NNis kernel order on a device with more than one MIDIStreaming interface. Neither Push has one, so it does not bite today. Fix: take the lowestbInterfaceNumber.
Comment only
- The note's reason for the Live override warning is wrong. Wine stubs a missing import and aborts only on the call: a stand-in exe importing
libusb_strerrorwithout calling it exits 0 on the installed runtime with the override set.libusb_initis traced and your+libusbsessions logged nothing, so Live never reaches that call — the override is inert, not fatal. It does still put Live on the bridge instead of Ableton's own libusb for no measured benefit. Fix: correct the note; consider keeping only thePush3.exeoverride. timeoutpasses straight to the host call, sotimeout == 0is libusb's unlimited wait, uninterruptible from the Windows side and the bridge's first unbounded blocking call. Fix: cover the zero case in Limits, or clamp it.set_interface_name()returns without writing whencard_usb_ids()fails, leaving the previous path on a re-attach. Fix:dst[0] = 0;at the top.port_display_name()makes its own lookup, so the same miss also drops the re-attach — a Limits line, not a code change.- Stale
SERIES_GAPS[0057]— pre-existing, but this PR edits that map. 0057 is in the series, and the loop only reads the map for numbers that are missing, so it never fails. Fix: drop the line. - Two doc overclaims: the body's
should work with both tethered and standalone modelsagainst the README'sWe have not tested standalone mode, andMove support ETA: Late August 2026.
Verified here: a Launchpad went from Launchpad - Launchpad MIDI 1 / NOTSUPPORTED / INVALHANDLE to Launchpad / NOERROR with \\?\usb#vid_1235&pid_000e#alsa&card4&port0#{6994ad04-…} in both directions, while PipeWire and Midi Through were untouched. The midiIn direction is the winmm half working — before the patch it never reached the driver.
|
We've had conflicting reports about this. One user confirms its working, but via the Nix environment. For others, this branch appears to not yet work. More work required for sure. |
|
I’m Silas ( We got Push 3 working end-to-end with this PR at commit Test environment:
What was required:
The resulting device node was
Host USB probe results: Display cancel test: xPort cancel test returned Successful Push log sequence: Live started Firmware behavior also matched the branch notes: the device was on firmware Two observations that may be useful for the PR:
Overall result: this PR successfully brought up Push 3 display/control-surface support with Live 12.4.3 on Ubuntu, including the full |
|
Push 3 works with these patches rebased onto current BuildBranched from
Hashes match this PR's Why it applies cleanly: Build passed — 170 checks, That Environment
Prefix changes: only the two registry overrides ( Host probe ( ResultLive started Display, pads and encoders all work; Live's Analog is playable from the pads and macro MIDI topology matches the earlier report — the helper holds the Live port (client 129 is the Finding 1 — no firmware update, no power cycleThe note and README describe a first-run firmware update (85 → 91) with the helper restarting Two candidate explanations this run cannot separate: the logged reason (compute module + Either way the README's "switch it off and on once" is not universal — worth a qualifier. Finding 2 — MidiHub errors are continuous, not three per sessionThe note says "occurs three times in each session", "no visible effect". Actual: 14,735 in @silaswester reported the same on Ubuntu (817, then 1,627), so this is two independent Traffic-driven, and it saturatesTimestamped
Background traffic was unchanged across both load windows (Sensing 444 vs 446, sysex 251 vs The slow stretch falls inside the second window, so that window is ~25 s at full rate plus So: not one failure per message. An idle floor of ~13.3/s (800/min) rising to a ceiling of Unexplained:
Limit: failures are logged once a minute, so sub-minute behaviour cannot be resolved; the Costs nothing
Note for anyone comparing with the earlier " It is Ableton's message, not this project'sThe string is compiled into Ableton's own The adjacent symbol is This establishes origin, not cause. The exact string returns nothing on GitHub code search, So this should not be read as Wine-specific. Any Push 3 owner on Windows or macOS could Unrelated
|
|
Thanks everyone, this is supersceded by #254 |
Reference issues shibco#19, shibco#29 and shibco#46, plus PRs shibco#118, shibco#121, shibco#152, shibco#170 and shibco#236. Link patch 0028, the August prototypes, the four test tools and detailed design dc40518.
With gratitude to @Version33 for both the maddening Push 3 testing and the Claude Code cycles (yes, this is an AI disclosure.)
This code has been manually reviewed by me, and modified slightly before acceptance. It should work with both tethered and standalone models. Also should work with NixOS as well as standard environments.
This needs testing and additional eyes where possible, as I do not have a Push 3 to test with.