Skip to content

Latest commit

 

History

History
398 lines (245 loc) · 18.4 KB

sysex.md

File metadata and controls

398 lines (245 loc) · 18.4 KB

SysEx message list

All SysEx messages start with the standard MIDI SysEx Start code, and end with the standard MIDI SysEx End code. This is the bare minimum required to represent a SysEx message and for any device to interpret it as such.

F0 ... F7(16)
240 ... 247(10)

Within representations of SysEx messages in this document:

  • <variable> is a single-byte arbitrary value at the discretion of the sender.
  • <variable>... is a variable-length list of single-byte arbitrary values at the discretion of the sender.
  • <variable(n)> is a n-byte arbitrary value.
  • <<variable1> <variable2>> is a group of variables.
  • <<variable1> <variable2>>... is a variable-length list of groups of variables.

Common variables used in SysEx messages in this document include:

  • <XY> refers to the X and Y coordinates of an LED, where X is the row and Y is the column. The value 63(16) 99(10) is used to represent the side LED on the bottom edge of the unit (colloquially refered to as the Mode Light).

  • <color> refers to the color of an LED as if controlled via regular MIDI note velocity. The stock Novation palette is always used to represent the color, except in Performance mode where the user-selected palette is used instead.

  • <R>, <G>, and <B> are the 6-bit red, green, and blue color components, respectively. The value 0(16) 0(10) represents the minimum intensity, and the value 3F(16) 63(10) represents the maximum intensity.

Assume the custom firmware will not respond to any SysEx message, documented here or unknown, unless stated otherwise.

The largest SysEx message that can be received or sent is 320 bytes, including the SysEx Start and End codes.

Standard Identification messages

Identity Request (Device Inquiry)

The Identity Request is an universal SysEx message that is used to determine what kind of device is behind a MIDI port.

Request:

7E 7F 06 01 F7(16)
126 127 6 1 247(10)

Response:

7E 00 06 02 00 20 29 <model> 00 00 00 00 <fw_version(3)>(16)
126 0 6 2 0 32 41 <model> 0 0 0 0 <fw_version(3)>(10)

  • <model> is the model of Launchpad. This value will always be 51(16) 81(10) for the Launchpad Pro.
  • <fw_version(3)> is the firmware version number.

Version Inquiry

The Version Inquiry is a Novation-specific SysEx message that is used to get more information about the Launchpad.

Request:

00 20 29 00 70(16)
0 32 41 0 112(10)

Response:

00 20 29 00 70 00 00 <bl_version(3)> 00 00 <fw_version(3)> <bl_size> 01(16)
0 32 41 0 112 0 0 <bl_version(3)> 0 0 <fw_version(3)> <bl_size> 1(10)

  • <bl_version(3)> is the bootloader version number.
  • <fw_version(3)> is the firmware version number.
  • <bl_size> is the size of the bootloader region in kilobytes.

Reboot to bootloader

Reboots the Launchpad into the bootloader.

00 20 29 00 71 00 51(16)
0 32 41 0 113 0 81(10)

Currently not implemented in the custom firmware (planned)

Supported stock firmware Novation messages

All stock firmware Novation request and response messages begin with the same standard header:

00 20 29 02 10(16)
0 32 41 2 16(10)

Mode selection

Request:

21 <mode>(16)
33 <mode>(10)

<mode> can be:

  • 00(16) 0(10) for Ableton Live mode,
  • 01(16) 1(10) for Standalone mode.

Response if the mode was changed successfully:

2D <mode>(16)
45 <mode>(10)

Standalone layout selection

Request:

2C <layout>(16)
44 <layout>(10)

<layout> can be:

  • 00(16) 0(10) for Note mode,
  • 01(16) 1(10) for Drum mode,
  • 02(16) 2(10) for Fader mode,
  • 03(16) 3(10) for Programmer mode,
  • 04(16) 4(10) for Performance mode,
  • 05(16) 5(10) for Piano mode,
  • 06(16) 6(10) for Chord mode,
  • 07(16) 7(10) through 09(16) 9(10) are reserved for future use,
  • 0A(16) 10(10) through 11(16) 17(10) for Custom modes 1 through 8.

Response if the layout was changed successfully:

2F <layout>(16)
47 <layout>(10)

Ableton Live Control Surface Challenge

Request:

40 <challenge(4)>(16)
64 <challenge(4)>(10)

Ableton Live's Control Surface challenges the Launchpad Pro to prove it is a genuine Novation device. This is done to prevent counterfeit/unauthorized devices from interfacing with Ableton Live.

As this algorithm is implemented in the Launchpad Pro's bootloader, the custom firmware does not reimplement it and instead calls the function in the bootloader to generate the response.

Response:

40 <response(2)>(16)
64 <response(2)>(10)

The Launchpad Pro responds with the correct response to this challenge in order to be recognized by Ableton Live and in order for Control Surface functionality to be enabled.

Ableton Live Quit Message

40(16)
64(10)

Changes the default mode to Performance mode.

Ableton Live Layout selection

Request:

22 <layout>(16)
34 <layout>(10)

<layout> can be:

  • 00(16) 0(10) for Session mode,
  • 01(16) 1(10) for Drum Rack mode,
  • 02(16) 2(10) for Chromatic Note mode,
  • 03(16) 3(10) for User (Drum) mode,
  • 04(16) 4(10) for Audio (Blank) mode,
  • 05(16) 5(10) for Fader mode,
  • 06(16) 6(10) for Record Arm (Session) mode,
  • 07(16) 7(10) for Track Select (Session) mode,
  • 08(16) 8(10) for Mute (Session) mode,
  • 09(16) 9(10) for Solo (Session) mode,
  • 0A(16) 10(10) for Volume (Fader) mode,
  • 0B(16) 11(10) for Pan (Fader) mode,
  • 0C(16) 12(10) for Sends (Fader) mode,
  • 0D(16) 13(10) for Stop Clip (Session) mode.

Response if the layout was changed successfully:

2E <layout>(16)
46 <layout>(10)

Fader Setup

This message can only be called while in Standalone Fader mode, or one of the four available Ableton Live Fader modes.

2B <<N> <type> <color> <initial>>...(16)
43 <<N> <type> <color> <initial>>...(10)

  • <N> is the number of fader to be configured, ranging from 0 to 7.
  • <type> can be:
    • 00(16) 0(10) for a volume fader,
    • 01(16) 1(10) for a pan fader.
  • <color> is the color of the fader.
  • <initial> is the initial value of the fader.

Light one or more LEDs

Overrides the color of the specific LED.

0A <<XY> <color>>...(16)
10 <<XY> <color>>...(10)

Flash one or more LEDs

The Launchpad supports flashing between its current color and the flash color. Flashing happens in time with the MIDI beat clock.

Overrides the flash color of the specific LED.

23 <<XY> <color>>...(16)
35 <<XY> <color>>...(10)

Pulse one or more LEDs

The Launchpad supports rhythmically pulsing a LED between 100% brightness and 25% brightness of a color. Pulsing happens in time with the MIDI beat clock.

Overrides the pulse color of the specific LED.

28 <<XY> <color>>...(16)
40 <<XY> <color>>...(10)

Light a column of LEDs

0C <Y> <color>...(16)
12 <Y> <color>...(10)

<Y> is the column number, ranging from 0 to 9.

Light a row of LEDs

0D <X> <color>...(16)
13 <X> <color>...(10)

<X> is the row number, ranging from 0 to 9.

Light all LEDs

0E <color>(16)
14 <color>(10)

Light one or more LEDs (RGB)

The brightness of the individual red, green and blue color channels of the LED can be controlled to create any color.

0B <<XY> <R> <G> <B>>...(16)
11 <<XY> <R> <G> <B>>...(10)

Light a grid of LEDs (RGB)

A more efficient solution to updating the entire display, or just the central square pad core in a single message.

0F <type> <<R> <G> <B>>...(16)
15 <type> <<R> <G> <B>>...(10)

  • <type> can be:
    • 00(16) 0(10) for the entire 10 by 10 grid,
    • 01(16) 1(10) for the square 8 by 8 grid.
  • LEDs are assumed in sequence starting from the bottom-most left LED and the <R> <G> <B> values are repeated for each LED.

Text Scrolling

Switches the Launchpad to a special text scrolling mode, like an intermission.

Request:

14 <color> <loop> <char>...(16)
20 <color> <loop> <char>...(10)

  • <color> is the color of the text.
  • <loop> can be:
    • 00(16) 0(10) to scroll the text once,
    • 01(16) 1(10) to loop the text until the user presses any button.
  • <char>... is the string to be displayed.
    • 20(16) 32(10) through 7F(16) 127(10) are used to represent standard ASCII characters.
    • 01(16) 1(10) through 07(16) 7(10) are used to represent special characters.

Response after the text has finished scrolling:

15(16)
21(10)

Stop Text Scrolling

Any active text scroll will be cancelled immediately.

14(16)
20(10)

Custom palette data messages

This set of messages receives and stores a palette from the Launchpad Firmware Utility. All request and response messages begin with the same standard header:

52 45 54 49 4E 41(16)
82 69 84 73 78 65(10)

Start download

Prepares the firmware for accepting a palette.

7B(16)
123(10)

Write

Writes RGB colors to indexes in the palette.

3D <<color> <R> <G> <B>>...(16)
61 <<color> <R> <G> <B>>...(10)

  • <color> is the index of the color in the palette, ranging from 0 to 127.

End download

Applies the downloaded palette to the desired slot.

7D <slot>(16)
125 <slot>(10)

<slot> is the desired palette slot to store the palette in, ranging from 0 to 3.

Upload

Multiple of these messages are sent from the Launchpad to the host* when the user presses the upload button while editing a palette slot.

<color> <R> <G> <B>

Custom mode data messages

This set of messages receives and stores a custom mode from the Launchpad Firmware Utility. All request and response messages begin with the same standard header:

43 55 53 54 4F 4D(16)
67 85 83 84 79 77(10)

Start download

Prepares the firmware for accepting a custom mode in the desired slot.

7B <slot>(16)
123 <slot>(10)

<slot> is the desired custom mode slot to store the custom mode in, ranging from 0 to 7.

Write

Writes the raw custom mode data to the firmware.

3D <data>...(16)
61 <data>...(10)

End download

Finalizes the downloaded custom mode.

7D(16)
125(10)

Upload

Multiple of these messages are sent from the Launchpad to the host when the user presses the upload button while in a custom mode.

<size[2]> <data>...

<size[2]> is the size of the custom mode data in bytes, in big-endian format, and is only sent for the first chunk of data. For subsequent chunks, this variable is omitted.

Custom fast LED messages

These custom messages are intended to be used when the quickest possible processing time is required, usually due to a large amount of data being sent (for example, raw Apollo Studio light effects).

They do not have an additional header apart from the standard SysEx Start code.

Light one or more LEDs (RGB)

6F <<XY> <R> <G> <B>>...(16)
111 <<XY> <R> <G> <B>>...(10)

Flash one or more LEDs (RGB)

6B <<XY> <R> <G> <B>>...(16)
107 <<XY> <R> <G> <B>>...(10)

Pulse one or more LEDs (RGB)

6C <<XY> <R> <G> <B>>...(16)
108 <<XY> <R> <G> <B>>...(10)

Light LEDs via repeatable compressed message (Apollo Studio - Heaven renderer)

5F <<R> <G> <B> <N> <X>...>...(16)
95 <<R> <G> <B> <N> <X>...>...(10)

Stock firmware RGB LED set messages use the format <<XY> <R> <G> <B>>.... With this format and the 320 byte message size limit, it's impossible to pack a full screen update.

The grid update message can be used, but it requires you do a full screen update every time when you sometimes want to leave certain LEDs untouched, and also doesn't support updating the side LED.

The compressed message format is as follows:

  • <R> <G> <B> are the 6-bit RGB color components for this compressed update, respectively.

  • <N> is the number of <X> that follow.

  • If <N> is less than 8, an additional byte can be saved by using the 7th bits of <R> <G> <B> bytes to encode the value of <N> in big-endian format. This means that the 7th bit of <R> is the most significant bit, and the 7th bit of <B> is the least significant bit. In this case, <N> should be omitted from the message. If <N> is 8 or greater, <N> is sent as a separate byte.

  • <X>... represent all the groups of LEDs that will be updated to the same color:

    • The value 0(16) 0(10) is used to represent the entire grid of LEDs.
    • The values 1(16) 1(10) through 63(16) 99(10) are used to represent individual LEDs, with 63(16) 99(10) representing the side LED.
    • The values 64(16) 100(10) through 6D(16) 109(10) are used to represent entire rows.
    • The values 6E(16) 110(10) through 77(16) 119(10) are used to represent entire columns.
    • The values 78(16) 120(10) through 7F(16) 127(10) are reserved for future use.