Understanding Mackie Control Protocol - Silhm/bcf-scribble-strips GitHub Wiki
Work in progress...
Mackie Control Protocol (MCP) is a protocol to exchange information between the DAW and the control surface. If data transmitted or received is bigger than 3 bytes, the MCP will use SysEx, otherwise it uses standard MIDI messages.
All byte are transmitted in Hex format (something like 0xF0, 0x6C and so one). For readability, all this bytes will be written without the '0x' notation.
This is inspired by Logic Control Manual.
The first 5 bytes transmitted to the controller are something like F0 00 00 66 00 :
- F0 : Start of the SysEx Data
- 00 00 66 : manufacturer id (mackie)
- 00 : product id (I guess)
As describe in the marual, this header will be simplified as in this document.
DAW -> controller
- Every LCD message start with the header followed by the 0x12 byte.
- Then the next byte tells the position to display the text.
- We get the actual text (mostly 6 chars)
- Finally, the SysEx ends with a 0xF7 byte
Example:
F0 00 00 66 00 12 38 ***4C 35 30 52 35 30 20*** FC
<hdr> | \_position \_end of SysEx
LCD message
On a Mackie Control, the LCD screen has 2x56 characters, divided by 8 (8 channels on a BCF2000) equals 7 chars by channel.
Each position on the screen is identified by an offset:
- From 00 to 37 (56 values) for the first line,
- From 38 to 6F (56 values) for the second line
So the LCD screens could be represented like this:
In my example SysEx, the 0x38 byte following the 0x12 one, means that the text will be displayed on the 2nd line, first character.
To display the text, just convert the Hex values to Char according to the ASCII table.
In Arduino code, a simple display.write() will convert Hex value to Char.
So 4C 35 30 52 35 30 20
is L 5 0 R 5 0
So we got a PAN message : L50R50 to display on the second line!