SysEx Documentation for External Applications
Work in progress
It is possible to interact with our MIDI controllers via SysEx messages, which allows you to update preset and bank parameters, or retrieve data from the controller like Preset Names etc.
- 1 Saving or Temporary Override
- 2 SysEx Message Structure
- 2.1 Message Payload
- 2.2 Transaction ID
- 2.3 CheckSum
- 3 Return Codes
- 4 Functions
- 4.1 [op2: 00h] Controller Functions
- 4.2 [op2: 01h] Update Preset Short Name
- 4.3 [op2: 02h] Update Preset Toggle Name
- 4.4 [op2: 03h] Update Preset Long Name
- 4.5 [op2: 04h] Update Preset Message
- 4.5.1 Message Types
- 4.5.1.1 [op5: 01h] Program Change
- 4.5.1.2 [op5: 02h] Control Change
- 4.5.1 Message Types
- 4.6 [op2: 05h] Other Data Preset
- 4.7 [op2: 10h] Update Current Bank Name
- 4.8 [op2: 11h] Display message on LCD
- 4.9 [op2: 21h] Get Preset Short Name
- 4.10 [op2: 22h] Get Preset Toggle Name
- 4.11 [op2: 23h] Get Preset Long Name
- 4.12 [op2: 30h] Get Current Bank Name
- 4.13 [op2: 31h] Get Toggle State of all Presets in current Bank
- 4.14 [op2: 32h] Get Controller Information
- 5 Glossary
Saving or Temporary Override
In most functions, there will be an option to save by sending 7F
for a specific Opcode. If override is chosen instead (by using any other value), the values will just be written temporarily, and will revert back to the original values when the bank is changed.
For example, if you update the Preset Short Name from Empty
to Preset 1
and do not save, when sending the SysEx string to update the Preset Short Name, the controller will display the Preset Name as Preset 1
. However, when you change banks and go back to the same bank again, the Preset Name will show Empty
.
SysEx Message Structure
For this API, Op1 is fixed at 0x70
.
F0 -- SysEx Start
00 -- Manufacturer ID 1
21 -- Manufacturer ID 2
24 -- Manufacturer ID 3
04 -- Device Model ID
00 -- Ignore
70 -- Opcode 1
00 -- Opcode 2
00 -- Opcode 3
00 -- Opcode 4
00 -- Opcode 5
00 -- Opcode 6
00 -- Opcode 7
xx -- Transaction ID
00 -- Ignore
00 -- Ignore
pp -- Payload Start
pp
pp
pp
yy -- CheckSum
F7 -- SysEx End
Message Payload
The message payload, which always starts at Pointer 17
, contains the data for the intended function, and can be of any length. For example, if you want to update the Preset Name, the name will be in the Payload in ASCII code.
Transaction ID
The Transaction ID
is used as an identifier for you to know which SysEx command the controller is responding to when it returns a SysEx message. For example, if you sent a request for a Preset Short Name with a Txn ID of 45
, the controller will send a response with a Txn ID of 45
as well, so you know it is responding to that specific request.
If there is no intention to use it, just leave it as 00
CheckSum
The CheckSum is used to verify the message integrity. The calculation will be done on the sender’s end, and then when the SysEx message is received by the Controller, it will calculate the CheckSum of the message and then compare it to the sender’s CheckSum. If it does not match, the message is ignored.
The CheckSum can be calculated like this:
First, take the first value as F0
, which is the start of the SysEx message.
Next, XOR the value with the next value.
Continue this until you reach n-2
.
AND
the value with 0x7F
, which will give you a value of between 0 - 127.
Here is a sample code in C++:
int calculateChecksum(uint16_t len, uint8_t *ptr) {
uint8_t cSum = *(ptr);
for (int i = 1; i < len - 2; i++) {
cSum ^= *(ptr + i);
}
cSum &= 0x7F;
return cSum;
}
Return Codes
If there is any error in the received SysEx message, the Controller will return you a error message.
F0 -- SysEx Start
00 -- Manufacturer ID 1
21 -- Manufacturer ID 2
24 -- Manufacturer ID 3
xx -- Device Model ID
00 -- Ignore
70 -- Opcode 1
7F -- Opcode 2
xx -- Ack Code
00 -- Opcode 4
00 -- Opcode 5
00 -- Opcode 6
00 -- Opcode 7
xx -- Transaction ID
00 -- Ignore
00 -- Ignore
yy -- CheckSum
F7 -- SysEx End
where Ack Code
is
Functions
This section describes the various functions as specified using Opcode 2.
[op2: 00h] Controller Functions
Using 00h
for Op2 lets you access the Controller functions. The specific functions are selected using Op3.
[op3: 00h]Controller Bank Up
[op3: 01h]Controller Bank Down
[op3: 02h]Controller Toggle Page
[op2: 01h] Update Preset Short Name
[op2: 02h] Update Preset Toggle Name
[op2: 03h] Update Preset Long Name
[op2: 04h] Update Preset Message
Message Types
The required payload will depend on the type of message selected with Opcode 5
[op5: 01h] Program Change
Required Payload
[op5: 02h] Control Change
Required Payload
[op2: 05h] Other Data Preset
[op2: 10h] Update Current Bank Name
[op2: 11h] Display message on LCD
Displays a custom message of up to 20 characters in the controller’s LCD.
Â
[op2: 21h] Get Preset Short Name
Return SysEx
[op2: 22h] Get Preset Toggle Name
Return SysEx
[op2: 23h] Get Preset Long Name
Return SysEx
[op2: 30h] Get Current Bank Name
Return SysEx
[op2: 31h] Get Toggle State of all Presets in current Bank
Return SysEx
where each Payload value contains the toggle state of each preset. 7f
= Toggled
Payload
[op2: 32h] Get Controller Information
Retrieve information like Model ID, firmware version etc.
Return SysEx
Glossary
Device Model ID
Action Types
This section specifies the Action IDs required when programming Preset Messages
Message Types
This section specifies the Message Type IDs required when programming Preset Messages
Preset Message Toggle Types
This section specifies the Message Type IDs required when programming Preset Messages