Send MIDI Data via RS-232

Overview

Most MIDI messages are sequences of 2-3 8-bit bytes. The largest hurdle when integrating the DecaBox with Crestron / AMX / Control4 equipment is properly formatting these messages. An excellent, detailed description of their syntax can be found here:

In our documentation, we use this format to describe raw byte data: $AA $BB $CCThe $ sign signifies hexadecimal values, which means that AA, BB, etc are in the range [00 FF] hex, which maps to [0 255] decimal. Spaces are inserted between bytes in this documentation merely for convenience in reading.

MIDI messages are zero based and generally bytes 2 and 3 have a maximum value of $7F, or 127 decimal. A simple online decimal <-> hex converter can be found at https://www.binaryhexconverter.com/decimal-to-hex-converter

Here are sample MIDI messages:

$90 $01 $7F   Note on, MIDI channel 1, note #2, full velocity 
$8F $07 $40   Note off, MIDI channel 16, note #8, 50% velocity
$B1 $03 $10   MIDI CC #4 (foot controller), ~30% intensity, MIDI channel 2
$F0 $01 $02 $03 $04 $05 $06 $F7   A short MIDI sysex message. These are framed by [F0 F7] always.

(The MIDI channel is the lower nibble of the first byte. That is, $BX means MIDI CC message and X can vary between [$0 $F].  Hex $0 means MIDI channel 1, $1 means MIDI channel 2, etc. $F is channel 16.)

\xF0\x01\x02\x03\x04\x05\x06\xF7

 

Sending MIDI to Data to the Decabox

Once the 2-3 byte MIDI messages have been correctly formatted, the next step is to send them to the DecaBox. That syntax looks like this:

M $AA $BB $CC...$FF[cr]

- The command starts with a capital M.
- It is followed by single space character ' '.
- Then hex values written as strings in ASCII format.
- Command terminates with a carriage return.

Examples, using the same commands listed above:

M $90 $01 $7F[cr]   Note on, MIDI channel 1, note #2, full velocity 
M $8F $07 $40[cr]   Note off, MIDI channel 16, note #8, 50% velocity
M $B1 $03 $10[cr]   MIDI CC #4 (foot controller), ~30% intensity, MIDI channel 2
M $F0 $01 $02 $03 $04 $05 $06 $F7[cr]   A short MIDI sysex message. These are framed by [F0 F7] always.

Each of these commands are sent as ASCII STRINGS, whose length varies between 13 and ~30 characters.


Screenshot. Green is text sent to the box, yellow are replies.

midi-send.png