USB Host not receiving messages (error allocating data transfer)

Salchicha

Active member
I've attached the USB host cable to the USB Host pins on the Teensy 4.1, my midi controller comes on when plugged into it and I've created this simple sketch to print out the CC number of any messages received, however it's not printing anything. This code has been cobbled together from bits I've found on this forum, not sure if its correct or not but it compiles ok....

C++:
#include <USBHost_t36.h>
#include <MIDI.h>

USBHost myusb;

  void myNoteOn(byte channel, byte note, byte velocity) {}
  void myNoteOff(byte channel, byte note, byte velocity) {}
  void myAfterTouchPoly(byte channel, byte note, byte velocity) {}
  void myControlChange(byte channel, byte control, byte value) {
    Serial.println("CC Received");
    byte type = usbMIDI.getType();
    if (type == midi::ControlChange) {
      byte channel = usbMIDI.getChannel();
      byte ccNumber = usbMIDI.getData1();
      Serial.print("Received CC number: ");
      Serial.println(ccNumber);
    }
  }
  void myProgramChange(byte channel, byte program) {}
  void myAfterTouch(byte channel, byte pressure) {}
  void myPitchChange(byte channel, int pitch) {}
  void mySystemExclusiveChunk(const byte *data, uint16_t length, bool last) {}
  void mySystemExclusive(byte *data, unsigned int length) {}
  void myTimeCodeQuarterFrame(byte data) {}
  void mySongPosition(uint16_t beats) {}
  void mySongSelect(byte songNumber) {}
  void myTuneRequest() {}
  void myClock() {}
  void myStart() {}
  void myContinue() {}
  void myStop() {}
  void myActiveSensing() {}
  void mySystemReset() {}
  void myRealTimeSystem(byte realtimebyte) {}


void setup() {

  usbMIDI.setHandleNoteOff(myNoteOff);
  usbMIDI.setHandleNoteOn(myNoteOn);
  usbMIDI.setHandleAfterTouchPoly(myAfterTouchPoly);
  usbMIDI.setHandleControlChange(myControlChange);
  usbMIDI.setHandleProgramChange(myProgramChange);
  usbMIDI.setHandleAfterTouch(myAfterTouch);
  usbMIDI.setHandlePitchChange(myPitchChange);
  usbMIDI.setHandleSystemExclusive(mySystemExclusiveChunk);
  usbMIDI.setHandleTimeCodeQuarterFrame(myTimeCodeQuarterFrame);
  usbMIDI.setHandleSongPosition(mySongPosition);
  usbMIDI.setHandleSongSelect(mySongSelect);
  usbMIDI.setHandleTuneRequest(myTuneRequest);
  usbMIDI.setHandleClock(myClock);
  usbMIDI.setHandleStart(myStart);
  usbMIDI.setHandleContinue(myContinue);
  usbMIDI.setHandleStop(myStop);
  usbMIDI.setHandleActiveSensing(myActiveSensing);
  usbMIDI.setHandleSystemReset(mySystemReset);
  usbMIDI.setHandleRealTimeSystem(myRealTimeSystem);

  myusb.begin();
}

void loop() {
  myusb.Task();
  usbMIDI.read();
  //Serial.println("Reading MIDI...");

  delay(10);

}
 
I enabled debugging output in USBHost_t36 and get the following error:

Code:
USB2 PLL running
 reset waited 6
USBHS_ASYNCLISTADDR = 0
USBHS_PERIODICLISTBASE = 20002000
periodictable = 20002000
Setup complete.
port change: 10001803
    connect
  begin reset
port change: 10001005
  port enabled
  end recovery
new_Device: 12 Mbit/sec
new_Pipe
enumeration:
enumeration:
  error allocating data transfer
 
Back
Top