USB MIDI Host Issue: Squarp Hapax not sending MIDI data to Adafruit Metro M7

Hi everyone,

I’m encountering a persistent issue trying to get my Squarp Hapax to send MIDI data (Notes, Clock, Transport) via its USB Host port to an Adafruit Metro M7 running CircuitPython. I’m hoping someone might have encountered this or has some insights.

Setup:

  • Host: Squarp Hapax (HapaxOS 2.12)
  • Device: Adafruit Metro M7 (running CircuitPython 9.2.7 or 10.0.0-alpha.2)
  • Connection: Hapax USB Host Port ↔ Metro M7 USB Device Port (using various USB cables)
  • CircuitPython Code: Using adafruit_midi library, simplified down to a basic MIDI input test that listens on all channels and blinks the onboard NeoPixel upon receiving NoteOn or Clock messages. (Code similar to the basic examples). usb_midi.enable() is called in boot.py .

The Problem:

  • The Hapax recognizes that a USB device is connected (displays “usb host attached”).
  • The Metro M7 boots correctly and the CircuitPython code successfully initializes the adafruit_midi.MIDI object (confirmed via LED feedback and serial console when connected to a PC).
  • However, absolutely no MIDI data (Notes, Clock, Start/Stop) seems to be received by the Metro M7 from the Hapax. The NeoPixel doesn’t blink for incoming messages, and serial debugging (when possible due to memory constraints) shows no incoming NoteOn or TimingClock objects from the Hapax.

What Works / Troubleshooting Done:

  1. Metro M7 + PC: The Metro M7 works perfectly as a USB MIDI device when connected to a computer. Using Web MIDI testers or DAWs, it receives Notes and Clock signals correctly, and the test code responds as expected. This confirms the M7’s USB MIDI functionality and the CircuitPython code are fundamentally working.
  2. Hapax + Raspberry Pi Pico: The Hapax works perfectly sending MIDI Notes, Clock, and Transport via the same USB Host port to a Raspberry Pi Pico running similar CircuitPython code. This confirms the Hapax configuration (MIDI output enabled for USB Host, Clock/Transport send enabled) is correct.
  3. External Power for M7: Tried powering the Metro M7 via its DC barrel jack with an appropriate external power supply – issue persists.
  4. Different USB Cables: Tried multiple different USB cables – issue persists.
  5. CircuitPython Versions: Tested with both stable 9.2.7 and 10.0.0-alpha.2 versions of CircuitPython – issue persists.
  6. Simplified Code: Reduced the CircuitPython code to the bare minimum (MIDI init, loop with midi.receive() , LED blink) – issue persists.
  7. Memory: Ensured no MemoryError is occurring by removing all non-essential code (like LCD drivers previously attempted). Sufficient memory is reported by gc.mem_free() .

Conclusion & Question:

It seems there’s a specific USB communication incompatibility between the Hapax (as Host) and the Metro M7/CircuitPython (as Device), happening after the initial USB device detection. The MIDI layer doesn’t seem to establish correctly between these two specific devices, even though both work fine with other partners.

Has anyone else experienced similar USB MIDI host/device communication problems specifically between a Squarp Hapax and some other device? Are there any known workarounds, specific CircuitPython versions, or Hapax settings that might help resolve this?

Thanks in advance for any suggestions!

Hi,
Could you post the USB device descriptor of the M7 running your code?