-
Notifications
You must be signed in to change notification settings - Fork 1.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
RP2040 MIDI Host #1627
base: master
Are you sure you want to change the base?
RP2040 MIDI Host #1627
Conversation
About my above comments, since there wasn't an example included in this PR, I took the previous PR's examples/host/midi and tried compiling it. |
Still having problems compiling this. include ../../../tools/top.mk
include ../../make.mk
INC += \
src \
$(TOP)/hw \
# Example source
EXAMPLE_SOURCE += $(wildcard src/*.c)
SRC_C += $(addprefix $(CURRENT_PATH)/, $(EXAMPLE_SOURCE))
include ../../rules.mk And then I could follow the standard tinyusb build steps but with this PR. Specifically I did: git clone https://github.com/hathach/tinyusb tinyusb-testmidihost
cd tinyusb-testmidihost
gh pr checkout 1627
git submodule update --init lib
cd examples/host/midi_rx
make BOARD=raspberry_pi_pico get-deps
make BOARD=raspberry_pi_pico all This fails because all of the unused variables in make BOARD=raspberry_pi_pico clean && make BOARD=raspberry_pi_pico LOG=1 all and get the error: [...]
Scanning dependencies of target midi_rx
make[3]: Leaving directory '/Users/tod/projects/tinyusb/tinyusb-testmidihost/examples/host/midi_rx/_build/raspberry_pi_pico'
make[3]: Entering directory '/Users/tod/projects/tinyusb/tinyusb-testmidihost/examples/host/midi_rx/_build/raspberry_pi_pico'
[ 16%] Building C object CMakeFiles/midi_rx.dir/src/main.c.obj
<command-line>: error: no macro name given in #define directive
compilation terminated due to -Wfatal-errors.
make[3]: *** [CMakeFiles/midi_rx.dir/build.make:76: CMakeFiles/midi_rx.dir/src/main.c.obj] Error 1 Any clues as to what I'm doing wrong? |
Thanks for being persistent on this one. I'm new at this and was not even aware of the standard way to build TinyUSB. |
Do you have a specific recommended build process for this PR? I have tried both using standard Pico build process inside of cd tinyusb-testmidihost/examples/host/midi_rx
mkdir build
cd build
cmake .. And I have tried: cd pico_examples
cp -a ../tinyusb-testmidihost/examples/host/midi_rx .
echo "add_subdirectory(midi_rx)" >> CMakeLists.txt
mkdir build
cd build
cmake .. |
Generally I'm following this guide: https://datasheets.raspberrypi.com/pico/getting-started-with-pico.pdf and building from CLion IDE, but the commands it's running are:
(I ommited the env variables specifying the paths to compilers for the second command) For any other example it would be as simple as: But the TinyUSB examples are pulled in from outside of project root and I don't know where to look for CMake outputs of those. |
Seems odd to me you're not following standard |
In the meantime (while waiting for #1434 to be merged) I started on adding a nice-looking MIDI API. Turns out the simplest way is to reuse https://github.com/FortySevenEffects/arduino_midi_library. Fortunately it does not depend on Arduino itself and has a transport plug-in architecture. I wrote a TinyUSB based tramsport plugin for it: https://github.com/atoktoto/pico-midi-usb-transport void onNote(Channel channel, byte note, byte velocity) {
printf("Note ON ch=%d, note=%d, vel=%d\n", channel, note, velocity);
}
MIDI.setHandleNoteOn(onNote); |
@todbot On my machine (Windows, under WSL2) the example now builds with I also verified that the example works as intended when the resulting uf2 is dropped onto RP2040. I did not get the |
@atoktoto, I also can get it to compile now (with similar Makefile and changes as your commits, though I had to also fix casts on int -> uint conversion errors The pico-midi-usb-transport library is great! The 47effects MIDI library is wonderful. The CMake files of
Where does the |
That's a naming inconsistency on my side. The key fact here is the name of the project is not important. AFAIK |
I am keen to get this in the master branch so I can use it properly - is this stuck somehow, and can I help? Seems a failure on this:
I can't really tell why it converts two uint8_t into an int, but wouldn't this fix it?
|
@atoktoto I found a fix for hubs not working with this. I made the error in my original pull request. Would you consider adding this change to your pull request?
|
Sure, I will to that tonight.
|
Hi @atoktoto, The last update from @rppicomidi fixed the enumeration problems but there are still data transfer problems, this fixes it:
|
Great work fixing issues! I am working on an application you might find useful. It's not done yet, but I made the repo public now |
checking in on this one |
@raveslave I wrote a USB MIDI host application driver for TinyUSB in the usb_midi_host project. You might find that helpful. I have tested it on the RP2040 on a Raspberry Pi Pico board and a Pico W board. |
thanks!! |
What are the steps holding this back from being merged? |
This pull request replaces the previous draft: #1605
This PR adds MIDI host support for RP2040 boards based on work done by @rppicomidi here: https://github.com/rppicomidi/tinyusb/tree/pio-midihost and @Skyler84 in #1434.
It seems to work pretty OK and has no issue with hot-plugging (re-plugging) the device that #1605 had.