Choosing a (MIDI) control surface protocol

Hello,

I've made a couple Arduino MIDI controllers in the past few years, but they all used a normal Control Change or Note On/Off message per fader or button. This works perfectly fine, since most audio software lets you map these MIDI events to controls on the screen.

However, I'd like to be able to connect some LEDs and maybe a display to my controller as well. This was not possible, because most DAWs and other software don't let you map controls to outgoing MIDI messages. (E.g. if the user clicks the mute button on the screen, the software should send a MIDI message to the controller, so that it can turn on the appropriate LED.)

This is only possible when using one of the 'Control Surfaces' presets that are available. The problem is that they use mostly proprietary protocols (although some reverse-engineered specs are available online).

My question is: what protocol would be best?
On the MIDI side, there seems to be mostly the Mackie Control Protocol (propr.), and some older ones use Mackie HUI, the Behringer BCF2000 seems to have different operation modes, including Mackie Control mode, and some other brands like Frontier or PreSonus seem to use a protocol similar to Mackie Control as well.

But nowadays, most DAWs support OSC (Open Sound Control) too, a controller protocol using UDP/IP.
This seems a slightly more modern/future-proof technology, however, a lot harder to implement,
because it requires an internet connection. I have some ESP8266s laying around, so that could work, and the Teensyduino plugin has a OSC library that claims to support SLIP (Serial Line IP) to use it over USB.
But it seems to be quite complicated to get that working. The advantage of MIDI is that it is much easier to connect, and pretty much all Arduinos support it.

Any ideas on what protocol to choose? Things to watch out for, pros, cons, feasibility?

Thanks in advance,
Pieter

I would use OSC, I think you have a lot of misconceptions about it.

however, a lot harder to implement, because it requires an internet connection.

No it doesn't. This here are two projects I built some time ago that uses OSC through the serial port.
http://www.thebox.myzen.co.uk/Hardware/Mini_Monome.html

http://www.thebox.myzen.co.uk/Hardware/Hexome.html

Edit OK three
http://www.thebox.myzen.co.uk/Hardware/Econo_Monome.html

Thank you for your reply!
I took a look at OSC, and got a mute button and LED working with Reaper and an ESP8266, it's a simple protocol indeed.

However ...

The first thing I noticed, is that there doesn't seem to be any predefined standard for the use with control surfaces:
Reaper's site tells us:

For two devices to work together (such as REAPER an and OSC control surface device), the user must configure one or both devices to send and receive messages that have meaning for the other device.
...
In order to use REAPER with any OSC device, you can either create a custom pattern config file so that REAPER sends and receives messages the OSC device understands, or configure the OSC device to send and receive messages that REAPER understands ...

Not exactly user-friendly, and even less "Plug'n'Play".
Agreed, it is possible to create a plain text config file where you add a line for every possible button, but it would be much easier if there was some kind of official documentation/implementation as a reference.

Thanks
Pieter

Next concern: connectivity: just plugging in a USB cable would be many times easier than connecting to the same network, trying to match IP addresses and ports etc. I didn't get the SLIP to work yet. And you could indeed run a small program to connect to the Arduino using serial, but that just adds a next layer of devious complexity.

Also, since it uses UDP, does it have measures against packet loss? At first sight, it doesn't, since you can read the messages straight from the UDP buffer. This may have dramatic consequences when using 'toggle' messages for buttons or LEDs, or corrupt text when trying to display track names for example.

Finally, if my device doesn't have a numeric keypad, how can I set the IP address of my computer?

Did I miss something obvious here? Is there an easy way around all this?
Has anyone experience with using OSC over the network? Using either the LAN or over Serial Line (SLIP).

Did I miss something obvious here?

Did you miss the bit about not needing a network or SLIP?

just plugging in a USB cable would be many times easier

Yes that is what you can do.

Not exactly user-friendly, and even less "Plug'n'Play".

True but it is flexible.