SYSEX protocol documentation

Is there some official documentation on the SYSEX protocol used by this device?

I was able to find some basics to show text on the display and adjust the lights, which covers most of my needs.

Sadly they only seem to work in DAW mode, which itself doesn’t allow customizing encoder mode (like various relative options in the User profiles) and is fixed to global settings.

1 Like

Though I don’t own this device, I found sysex message outputs in the Midi Control Center for my Beatstep Pro.

With the sysex i found there, I was able to send that specific sysex across several midi and daw, and devices, so that I could actually change one of the device’s settings that could only be changed in the MIDI control center otherwise.

I did it with the Streamdeck and the MIDI plugin for Streamdeck which has a specific choice to send sysex. Of course if you don’t have a Streamdeck you could use Bitfocus Companion.

When I push the streamdeck button, it sends the sysex thru a MIDI to the DAW where I send that MIDI In to the MIDI out to the device. Then the setting changes, despite the daw doesn’t deal with Sysex at all in any way it will still send thru what I sent.

Okay, there’s obviously no official response or support here (or barely any traffic for that matter), this forum seems effectively dead. Disappointing but unsurprising, I’ll just stick to reverse engineering then.

Anyway I’ll leave what I’ve found so far here for other poor souls googling while trying to tinker with this stuff.

General SYSEX: [0xF0, 0x00, 0x20, 0x6B, 0x7F, 0x42, ...<data>, 0xF7]
<data> for:
Memory Request: [0x01, 0x00, 0x40, 0x01] // returns <data>: 

Arturia Test(?): [0x04, 0x01, 0x60, 0x01, 0x31, 0x32, 0x33, 0x00]
Arturia Connect: [0x04, 0x01, 0x60, 0x01, 0x00, 0x02, 0x00]
Arturia Disconnect: [0x04, 0x01, 0x60, 0x0A, 0x0A, 0x5F, 0x51, 0x00] followed by [0x02, 0x02, 0x40, 0x6A, 0x10]

DAW Connect: [0x02, 0x02, 0x40, 0x6A, 0x21]
DAW Disconnect: [0x02, 0x02, 0x40, 0x6A, 0x20]

// r g b = 0-127 
Set Shift-LED: [0x02, 0x02, 0x16, <id>, <r>, <g>, <b>] // persistent: 0x57 Loop, 0x58 Stop, 0x59 Play, 0x5A Record, 0x5B Tap
Set PAD LEDs: [0x04, 0x02, 0x16, 0x00] followed by 8x [<r>, <g>, <b>] for each pad // impermanent, mode or bank switch resets to white

Set Display+Text: [0x04, 0x02, 0x60, ...<mode>, ...<line1>, ...<line2>] where
<mode>: 
  default: [], 
  two lines: [0x1F, 0x02, 0x01, 0x00] // seems identical to default?
  encoder: [0x1F, 0x03, 0x01, <value>, 0x00, 0x00] (value 0-127)
  fader: [0x1F, 0x04, 0x01, <value>, 0x00, 0x00] (value 0-127)
  pressure: [0x1F, 0x05, 0x01, <value>, 0x00, 0x00] (value 0-127)
  leftright: [0x1F, 0x06, 0x01, <???>, <option>, 0x00] // Shows line 2, but not Line1. option 0x00 bottom bar, 0x01 no bar
  icons: [0x1F, 0x07, 0x01, <top_icon>, <bottom_icon>, 0x01, 0x00] // icons are 0: Empty, 1 Heart, 2 Play, 3 Record, 4 Note, 5 Checkmark
<line1>: [0x01, ...<up to 30 chars as bytes>, 0x00] // Zero terminated string? Display seems to show about 19 characters
<line2>: [0x02, ...<up to 30 chars as bytes>, 0x00] // Zero terminated string? Larger font so only 15 characters displayed

// note this is missing the pitchbend/modwheel display modes. DAW mode also has these hardwired to be active on inputs.

Seems like the Display stuff only writes to a buffer that’s displayed in the DAW mode, so this seems to be the default DAW midi map

enum DAW_CC : byte // all on channel 0x00 (aka 1) besides the modwheel
{
    MODWHEEL = 1, // on keyboard channel
    SHIFT = 27, 
    ENC_TURN = 28, ENC_SHIFT_TURN = 29, // always relative around 64+-3
    ENC_CLICK = 118, ENC_SHIFT_CLICK = 119,
    FADER1 = 0x0E, FADER2 = 0x0F, FADER3 = 0x1E, FADER4 = 0x1F,
    ENC1 = 86, ENC2 = 87, ENC3 = 89, ENC4 = 90, // forced absolute mode with device accel
    ENC5 = 110, ENC6 = 111, ENC7 = 116, ENC8 = 117, // forced absolute mode with device accel
    PAD_SHIFTLOOP = 105, PAD_SHIFTSTOP = 106, PAD_SHIFTPLAY = 107, PAD_SHIFTREC = 108, PAD_SHIFTTAP = 109,
}
enum DAW_NOTE : byte // Always on Channel 0x09 (aka 10 percussion)
{
    PADA1 = 36, PADA2 = 37, PADA3 = 38, PADA4 = 39, PADA5 = 40, PADA6 = 41, PADA7 = 42, PADA8 = 43,
    PADB1 = 44, PADB2 = 45, PADB3 = 46, PADB4 = 47, PADB5 = 48, PADB6 = 49, PADB7 = 50, PADB8 = 51,
} 

Very disappointing that there doesn’t seem to be a way to get relative data out of the encoders in DAW mode, otherwise this covers most things needed.
I can obviously calculate my own derivative from the absolute device output (including my own acceleration), but it sadly loses granularity at 0 and 127 where the device just repeats those values.

oh well