/* ******************************************************************************* * USB-MIDI dump utility * Copyright (C) 2013-2017 Yuuichi Akagawa * * for use with USB Host Shield 2.0 from Circuitsathome.com * https://github.com/felis/USB_Host_Shield_2.0 * * This is sample program. Do not expect perfect behavior. ******************************************************************************* */ #include #include // Satisfy the IDE, which needs to see the include statment in the ino too. #ifdef dobogusinclude #include #endif #include USB Usb; //USBHub Hub(&Usb); USBH_MIDI Midi(&Usb); void MIDI_poll(); void doDelay(uint32_t t1, uint32_t t2, uint32_t delayTime); boolean bFirst; uint16_t pid, vid; void setup() { bFirst = true; vid = pid = 0; Serial.begin(115200); if (Usb.Init() == -1) { while (1); //halt }//if (Usb.Init() == -1... delay( 200 ); } void loop() { Usb.Task(); //uint32_t t1 = (uint32_t)micros(); if ( Usb.getUsbTaskState() == USB_STATE_RUNNING ) { MIDI_poll(); } //delay(1ms) //doDelay(t1, (uint32_t)micros(), 1000); } // Poll USB MIDI Controler and send to serial MIDI void MIDI_poll() { char buf[20]; uint8_t bufMidi[64]; uint16_t rcvd; if (Midi.vid != vid || Midi.pid != pid) { sprintf(buf, "VID:%04X, PID:%04X", Midi.vid, Midi.pid); Serial.println(buf); vid = Midi.vid; pid = Midi.pid; } if (Midi.RecvData( &rcvd, bufMidi) == 0 ) { uint32_t time = (uint32_t)millis(); sprintf(buf, "%04X%04X: ", (uint16_t)(time >> 16), (uint16_t)(time & 0xFFFF)); // Split variable to prevent warnings on the ESP8266 platform Serial.print(buf); Serial.print(rcvd); Serial.print(':'); for (int i = 0; i < 64; i++) { sprintf(buf, " %02X", bufMidi[i]); Serial.print(buf); } Serial.println(""); } } // Delay time (max 16383 us) void doDelay(uint32_t t1, uint32_t t2, uint32_t delayTime) { uint32_t t3; if ( t1 > t2 ) { t3 = (0xFFFFFFFF - t1 + t2); } else { t3 = t2 - t1; } if ( t3 < delayTime ) { delayMicroseconds(delayTime - t3); } }