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.

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