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 value63
(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 value0
(16)0
(10) represents the minimum intensity, and the value3F
(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.
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 be51
(16)81
(10) for the Launchpad Pro.<fw_version(3)>
is the firmware version number.
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.
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)
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)
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)
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) through09
(16)9
(10) are reserved for future use,0A
(16)10
(10) through11
(16)17
(10) for Custom modes 1 through 8.
Response if the layout was changed successfully:
2F <layout>
(16)
47 <layout>
(10)
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.
40
(16)
64
(10)
Changes the default mode to Performance mode.
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)
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.
Overrides the color of the specific LED.
0A <<XY> <color>>...
(16)
10 <<XY> <color>>...
(10)
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)
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)
0C <Y> <color>...
(16)
12 <Y> <color>...
(10)
<Y>
is the column number, ranging from 0 to 9.
0D <X> <color>...
(16)
13 <X> <color>...
(10)
<X>
is the row number, ranging from 0 to 9.
0E <color>
(16)
14 <color>
(10)
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)
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.
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) through7F
(16)127
(10) are used to represent standard ASCII characters.01
(16)1
(10) through07
(16)7
(10) are used to represent special characters.
Response after the text has finished scrolling:
15
(16)
21
(10)
Any active text scroll will be cancelled immediately.
14
(16)
20
(10)
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)
Prepares the firmware for accepting a palette.
7B
(16)
123
(10)
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.
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.
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>
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)
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.
Writes the raw custom mode data to the firmware.
3D <data>...
(16)
61 <data>...
(10)
Finalizes the downloaded custom mode.
7D
(16)
125
(10)
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.
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.
6F <<XY> <R> <G> <B>>...
(16)
111 <<XY> <R> <G> <B>>...
(10)
6B <<XY> <R> <G> <B>>...
(16)
107 <<XY> <R> <G> <B>>...
(10)
6C <<XY> <R> <G> <B>>...
(16)
108 <<XY> <R> <G> <B>>...
(10)
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) through63
(16)99
(10) are used to represent individual LEDs, with63
(16)99
(10) representing the side LED. - The values
64
(16)100
(10) through6D
(16)109
(10) are used to represent entire rows. - The values
6E
(16)110
(10) through77
(16)119
(10) are used to represent entire columns. - The values
78
(16)120
(10) through7F
(16)127
(10) are reserved for future use.
- The value