Skip to content

Bank Settings Data

Sam Spencer edited this page Apr 21, 2023 · 65 revisions

Bank Settings

Any user-configurable setting that can be configured on a bank-by-bank basis is considered to be part of the Bank Settings. Note that whilst the device will always respond with the complete bank settings list, partial global settings may be sent to the device provided it conforms to correct JSON formatting, as well as the formatting detailed below.

Label Values Description
bankName string Displayed name for the bank*
bankId string 32-bit This ID is used to determine if a change to the bank data has occurred for synchronization between the device and the host application

* The length of the bank name string must be less than the maximum name length as given in the target device specifications

Label Values Description
midiClockATempo float (1dp)
- 0 Inherits from previous bank
- 45.0 - 240.0 Valid tempo range
Preset tempo for MIDI Clock A
midiClockBTempo float (1dp)
- 0 Inherits from previous bank
- 45.0 - 240.0 Valid tempo range
Preset tempo for MIDI Clock B*

* Number of MIDI clocks available depends on the device

Footswitch Groups

Label Values Description
switchGroups[m][n]
[m][n].switch int Index of the switch
[m][n].isPrimary bool True: Primary, False: Secondary
[m][n].broadcastMode string
- txRx
- tx
- rx
Mode for broadcasting primary switch events to the group
[m][n].respondTo string
- onOff
- on
- off
Type of group events which the primary side responds to
[m][n].responseType string
- or
- and
- toggle
- on
- off
Response of the primary side to group events

Bank Messages

Label Values Description
bankMesssages Messages sent when entering the bank
numMessages int Number of messages in the bank stack. Cannot exceed the maximum number
messages[i] Message stack for each action type. i = number of messages in the stack
[0]...[i-1].statusByte string 8-bit hex Standard MIDI 1.0 message status byte
[0]...[i-1].dataByte1 string 8-bit hex Standard MIDI 1.0 message data byte 1
[0]...[i-1].dataByte2 string 8-bit hex Standard MIDI 1.0 message data byte 2
[0]...[i-1].outputs.midi0* bool
true
false
MIDI 0 output selection
[0]...[i-1].outputs.flexi1* bool
true
false
Flexiport 1 MIDI output selection
[0]...[i-1].outputs.flexi2* bool
true
false
Flexiport 2 MIDI output selection
[0]...[i-1].outputs.usb* bool
true
false
USB MIDI output selection

* The length of the bank name string must be less than the maximum name length as given in the target device specifications.

Footswitches

Label Values Description
footswitches[n] Footswitch data. n = number of footswitches
[0]...[n-1].name string Displayed name of the footswitch
[0]...[n-1].primaryState bool Primary toggle state. Read only.
[0]...[n-1].secondaryState bool Secondary toggle. Read only.
[0]...[n-1].primaryMode string
- toggle
- momentary
- tapTempo
- sequential
- sequentialLinked
- scrolling
- scrollingLinked
Primary mode of the footswitch
[0]...[n-1].secondaryMode string
- doublePressToggle
- holdToggle
- doublePressMomentary
- holdMomentary
Secondary mode of the footswitch
[0]...[n-1].primaryColor string 24-bit hex Primary (left) LED color
[0]...[n-1].secondaryColor string 24-bit hex Secondary (right) LED color
[0]...[n-1].primaryLedMode string
- onOff
- dim
Primary LED mode
[0]...[n-1].secondaryLedMode string
- onOff
- dim
Secondary LED mode
[0]...[n-1].sequentialPattern string
- forward
- reverse
- pendulum
- random
Direction for sequential and scrolling modes
[0]...[n-1].sequentialRepeat string
- all
- last2
- last3
Repeat type for sequential and scrolling modes
[0]...[n-1].sequentialSendMode string
- always
- primary
- secondary
Send action for sequential and scrolling modes
[0]...[n-1].linkedSwitch int Footswitch index to link to for sequential and scrolling linked modes
[0]...[n-1].currentStep int Current step in the sequence. Read only
[0]...[n-1].midiClock int Index of the assigned MIDI clock for Tap Tempo mode. When in Tap Tempo, the corresponding MIDI clock must have this footswitches corresponding index to function correctly. null if not previously configured
[0]...[n-1].toggleOnMessages Toggle on messages
[0]...[n-1].toggleOffMessages Toggle off messages
[0]...[n-1].secondaryToggleOnMessages Secondary Toggle on messages
[0]...[n-1].secondaryToggleOffMessages Secondary Toggle off messages
[0]...[n-1].pressMessages Press messages
[0]...[n-1].releaseMessages Release messages
[0]...[n-1].doublePressMessages Double press messages
[0]...[n-1].holdMessages Hold messages
[0]...[n-1].holdReleaseMessages Hold release messages
[0]...[n-1].sequentialMessages Sequential messages. Note the special properties listed below
[0]...[n-1].scrollingMessages Scrolling messages. Note the special properties listed below
.numMessages int Number of messages in the parent object stack. Cannot exceed the maximum number
.messages[i] Message stack for each action type. i = number of messages in the stack
[0]...[i-1].statusByte string 8-bit hex Standard MIDI 1.0 message status byte
[0]...[i-1].dataByte1 string 8-bit hex Standard MIDI 1.0 message data byte 1
[0]...[i-1].dataByte2 string 8-bit hex Standard MIDI 1.0 message data byte 2
[0]...[i-1].outputs.midi0* bool
true
false
MIDI 0 output selection
[0]...[i-1].outputs.flexi1* bool
true
false
Flexiport 1 MIDI output selection
[0]...[i-1].outputs.flexi2* bool
true
false
Flexiport 2 MIDI output selection
[0]...[i-1].outputs.usb* bool
true
false
USB MIDI output selection
sequentialMessages.numSteps int Number of sequential steps. Sequential messages only
sequentialMessages.steps[numSteps] Data for each step in the sequential stack
sequentialMessages.steps[k].numMessages int Array of integers detailing the number of messages for each step (k)
sequentialMessages.steps[k].label string Labels for each sequential step (k)
sequentialMessages.steps[k].color string 24-bit hex Color for each sequential step (k)
sequentialMessages.steps[k].messages[l] Sequential messags for each step (k)
scrollingMessages.stepInverval int 1-32 Step size. Scrolling messages only
scrollingMessages.minScrollLimit int 0-126*** Minimum value. Scrolling messages only
scrollingMessages.maxScrollLimit int 1-127*** Maximum value. Scrolling messages only
[0]...[n-1].lfo Configuration for the footswitch LFO
.lfo.state bool
- true = running
- false = stopped
- null = not active
Running state of the LFO. Read only
.lfo.frequency string
Free:0.1 - 10
Sync:
- 1/4
- 1/4T
- 1/4.
- 1/8
- 1/8T
- 1/8.
- 1/16
- 1/16T
- 1/16.
Frequency of the LFO. In free running mode, frequency can be stepped in 0.1Hz increments between 0 - 1.0, then between 1 - 10 in 1.0 increments. When synced to a MIDI clock, the frequency is assigned a clock subdivision
.lfo.minLimit int 0-126*** Minimum threshold for value scaling
.lfo.maxLimit int 1-127*** Maximum threshold for value scaling
.lfo.trigger string
- primary
- secondary
Trigger action for LFO
.lfo.waveform string
- sine
- triangle
- saw
- ramp
- square
- random
Waveform of the LFO
.lfo.resolution int
- 1
- 2
- 4
- 8
- 16
- 32
Step size for LFO waveform
.lfo.resetOnStop bool Whether the LFO counter resets to 0 when restarted
.lfo.messages string
- toggleOn
- toggleOff
- press
- release
- doublePress
- hold
- holdRelease
- null
Message stack to modulate with the LFO
.lfo.clock int Index of the MIDI clock source for the LFO, or null for free running

* The exact MIDI port configuration may be different depending on the target device. Standard MIDI outputs are referenced as midi0...midi(n-1), Flexiport MIDI outputs are referenced as flexi1...flexi(n).

** The number of Flexiports may change on different devices, so be sure to check the target device specifications.

*** The minimum limit must be less than the maximum limit.

Aux Switch Messages

Label Values Description
.auxMessages[k] Message stack for each action type. k = corresponding Flexiport index of the aux switch
.auxMessages[k].tip
.auxMessages[k].ring
.auxMessages[k].tipRing
.pressMessages
.holdMessages
.toggleOnMessages
.toggleOffMessages
.numMessages int Number of messages of each type
.messages[i] Message stack for each action type. i = number of messages in the stack
.statusByte string 8-bit hex Standard MIDI 1.0 message status byte
.dataByte1 string 8-bit hex Standard MIDI 1.0 message data byte 1
.dataByte2 string 8-bit hex Standard MIDI 1.0 message data byte 2
.outputs.midi0* bool
true
false
MIDI 0 output selection
.outputs.flexi1* bool
true
false
Flexiport 1 MIDI output selection
.outputs.flexi2* bool
true
false
Flexiport 2 MIDI output selection
.outputs.usb* bool
true
false
USB MIDI output selection

Bank Exp Messages

Label Values Description
expMessages[n] Bank expression pedal message stack. n = number of expression inputs
[0]...[n-1].numMessages int Number of messages in the indexed expression pedal stack
[0]...[n-1].messages[0]...[k-1] Bank expression pedal messages. k = number of messages in the stack
.messages[0]...[k-1].minLimit int 0-126* Minimum threshold for value scaling
.messages[0]...[k-1].maxLimit int 1-127* Maximum threshold for value scaling
.messages[0]...[k-1].statusByte string 8-bit hex Standard MIDI 1.0 message status byte
.messages[0]...[k-1].dataByte1 string 8-bit hex Standard MIDI 1.0 message data byte 1**
.messages[0]...[k-1].sweep string
- linear
- log
- reverseLog
- invLinear
- invLog
- invReverseLog
Sweep shape for the MIDI message value

* The minimum limit must be less than the maximum limit.

** The expression pedal sweeps the value of the MIDI message, so no second data byte is required. In some cases (such as pitch bend), the first data byte is also ignored.

Example Bank Settings

Example packet
{
  "bankName": "My Bank",
  "bankId": "0",
  "bankMessages": {
    "numMessages": 2,
    "messages": [
      {
        "statusByte": "90",
        "dataByte1": "30",
        "dataByte2": "20",
        "outputs": {
          "midi0": true,
          "flexi1": true,
          "flexi2": true,
          "usb": true
        }
      },
      {
        "statusByte": "b0",
        "dataByte1": "35",
        "dataByte2": "22",
        "outputs": {
          "midi0": false,
          "flexi1": true,
          "flexi2": false,
          "usb": false
        }
      }
    ]
  },
  "expMessages": [
    {
      "numMessages": 1,
      "messages": [
        {
          "minLimit": 0,
          "maxLimit": 127,
          "sweep": "linear",
          "statusByte": "b0",
          "dataByte1": "30",
          "dataByte2": "0",
          "outputs": {
            "midi0": true,
            "flexi1": true,
            "flexi2": true,
            "usb": true
          }
        }
      ]
    },
    {
      "numMessages": 0,
      "messages": []
    },
    {
      "numMessages": 2,
      "messages": [
        {
          "minLimit": 0,
          "maxLimit": 127,
          "sweep": "log",
          "statusByte": "b0",
          "dataByte1": "30",
          "dataByte2": "0",
          "outputs": {
            "midi0": true,
            "flexi1": true,
            "flexi2": true,
            "usb": true
          }
        },
        {
          "minLimit": 5,
          "maxLimit": 127,
          "sweep": "linear",
          "statusByte": "b0",
          "dataByte1": "30",
          "dataByte2": "0",
          "outputs": {
            "midi0": true,
            "flexi1": true,
            "flexi2": true,
            "usb": true
          }
        }
      ]
    },
    {
      "numMessages": 0,
      "messages": []
    }
  ],
  "auxMessages": [
    {
      "tip": {
        "pressMessages": {
          "numMessages": 1,
          "messages": [
            {
              "statusByte": "b0",
              "dataByte1": "3f",
              "dataByte2": "64",
              "outputs": {
                "midi0": true,
                "flexi1": true,
                "flexi2": true,
                "usb": false
              }
            }
          ]
        },
        "holdMessages": {
          "numMessages": 0,
          "messages": []
        },
        "toggleOnMessages": {
          "numMessages": 0,
          "messages": []
        },
        "toggleOffMessages": {
          "numMessages": 0,
          "messages": []
        }
      },
      "ring": {
        "pressMessages": {
          "numMessages": 1,
          "messages": [
            {
              "statusByte": "b0",
              "dataByte1": "3e",
              "dataByte2": "29",
              "outputs": {
                "midi0": true,
                "flexi1": true,
                "flexi2": true,
                "usb": false
              }
            }
          ]
        },
        "holdMessages": {
          "numMessages": 0,
          "messages": []
        },
        "toggleOnMessages": {
          "numMessages": 0,
          "messages": []
        },
        "toggleOffMessages": {
          "numMessages": 0,
          "messages": []
        }
      },
      "tipRing": {
        "pressMessages": {
          "numMessages": 1,
          "messages": [
            {
              "statusByte": "b0",
              "dataByte1": "2f",
              "dataByte2": "10",
              "outputs": {
                "midi0": true,
                "flexi1": true,
                "flexi2": true,
                "usb": false
              }
            }
          ]
        },
        "holdMessages": {
          "numMessages": 1,
          "messages": [
            {
              "statusByte": "b0",
              "dataByte1": "1f",
              "dataByte2": "10",
              "outputs": {
                "midi0": true,
                "flexi1": true,
                "flexi2": true,
                "usb": false
              }
            }
          ]
        },
        "toggleOnMessages": {
          "numMessages": 0,
          "messages": []
        },
        "toggleOffMessages": {
          "numMessages": 0,
          "messages": []
        }
      }
    },
    {
      "tip": {
        "pressMessages": {
          "numMessages": 0,
          "messages": []
        },
        "holdMessages": {
          "numMessages": 0,
          "messages": []
        },
        "toggleOnMessages": {
          "numMessages": 0,
          "messages": []
        },
        "toggleOffMessages": {
          "numMessages": 0,
          "messages": []
        }
      },
      "ring": {
        "pressMessages": {
          "numMessages": 0,
          "messages": []
        },
        "holdMessages": {
          "numMessages": 0,
          "messages": []
        },
        "toggleOnMessages": {
          "numMessages": 0,
          "messages": []
        },
        "toggleOffMessages": {
          "numMessages": 0,
          "messages": []
        }
      },
      "tipRing": {
        "pressMessages": {
          "numMessages": 0,
          "messages": []
        },
        "holdMessages": {
          "numMessages": 0,
          "messages": []
        },
        "toggleOnMessages": {
          "numMessages": 0,
          "messages": []
        },
        "toggleOffMessages": {
          "numMessages": 0,
          "messages": []
        }
      }
    }
  ],
  "switchGroups": [
    [
      {
        "switch": 0,
        "isPrimary": true,
        "broadcastMode": "txRx",
        "respondTo": "onOff",
        "responseType": "off"
      },
      {
        "switch": 0,
        "isPrimary": false,
        "broadcastMode": "txRx",
        "respondTo": "onOff",
        "responseType": "off"
      }
    ],
    [],
    [],
    [],
    [],
    [],
    [],
    []
  ],
  "footswitches": [
    {
      "name": "FS 1",
      "primaryState": false,
      "secondaryState": false,
      "primaryMode": "toggle",
      "secondaryMode": "holdToggle",
      "primaryColor": "f08080",
      "secondaryColor": "ffff",
      "primaryLedMode": "onOff",
      "secondaryLedMode": "dim",
      "sequentialPattern": "forward",
      "sequentialRepeat": "all",
      "sequentialSendMode": "always",
      "linkedSwitch": 0,
      "currentStep": 0,
      "midiClock": null,
      "lfo": {
        "state": false,
        "frequency": "1.0",
        "minLimit": 0,
        "maxLimit": 127,
        "trigger": "secondary",
        "messages": "holdRelease",
        "waveform": "sine",
        "resolution": 1,
        "resetOnStop": true,
        "clock": null
      },
      "toggleOnMessages": {
        "numMessages": 2,
        "messages": [
          {
            "statusByte": "90",
            "dataByte1": "3f",
            "dataByte2": "64",
            "outputs": {
              "midi0": true,
              "flexi1": true,
              "flexi2": true,
              "usb": false
            }
          },
          {
            "statusByte": "70",
            "smartType": "switchOn",
            "dataByte1": 0,
            "dataByte2": 0
          }
        ]
      },
      "toggleOffMessages": {
        "numMessages": 1,
        "messages": [
          {
            "statusByte": "80",
            "dataByte1": "3f",
            "dataByte2": "0",
            "outputs": {
              "midi0": true,
              "flexi1": true,
              "flexi2": true,
              "usb": false
            }
          }
        ]
      },
      "pressMessages": {
        "numMessages": 1,
        "messages": [
          {
            "statusByte": "90",
            "dataByte1": "3f",
            "dataByte2": "64",
            "outputs": {
              "midi0": true,
              "flexi1": true,
              "flexi2": true,
              "usb": false
            }
          }
        ]
      },
      "releaseMessages": {
        "numMessages": 1,
        "messages": [
          {
            "statusByte": "80",
            "dataByte1": "3f",
            "dataByte2": "0",
            "outputs": {
              "midi0": true,
              "flexi1": true,
              "flexi2": true,
              "usb": false
            }
          }
        ]
      },
      "doublePressMessages": {
        "numMessages": 1,
        "messages": [
          {
            "statusByte": "90",
            "dataByte1": "3f",
            "dataByte2": "64",
            "outputs": {
              "midi0": true,
              "flexi1": true,
              "flexi2": true,
              "usb": false
            }
          }
        ]
      },
      "holdMessages": {
        "numMessages": 1,
        "messages": [
          {
            "statusByte": "80",
            "dataByte1": "3f",
            "dataByte2": "0",
            "outputs": {
              "midi0": true,
              "flexi1": true,
              "flexi2": true,
              "usb": false
            }
          }
        ]
      },
      "holdReleaseMessages": {
        "numMessages": 1,
        "messages": [
          {
            "statusByte": "80",
            "dataByte1": "3f",
            "dataByte2": "0",
            "outputs": {
              "midi0": true,
              "flexi1": true,
              "flexi2": true,
              "usb": false
            }
          }
        ]
      },
      "secondaryToggleOnMessages": {
        "numMessages": 1,
        "messages": [
          {
            "statusByte": "90",
            "dataByte1": "3f",
            "dataByte2": "64",
            "outputs": {
              "midi0": true,
              "flexi1": true,
              "flexi2": true,
              "usb": false
            }
          }
        ]
      },
      "secondaryToggleOffMessages": {
        "numMessages": 1,
        "messages": [
          {
            "statusByte": "80",
            "dataByte1": "3f",
            "dataByte2": "0",
            "outputs": {
              "midi0": true,
              "flexi1": true,
              "flexi2": true,
              "usb": false
            }
          }
        ]
      },
      "sequentialMessages": {
        "numSteps": 0,
        "steps": []
      },
      "scrollingMesssages": {
        "stepInterval": 1,
        "minScrollLimit": 0,
        "maxScrollLimit": 127,
        "numMessages": 0,
        "messages": []
      }
    },
    {
      "name": "FS 2",
      "primaryState": false,
      "secondaryState": false,
      "primaryMode": "sequential",
      "secondaryMode": "holdToggle",
      "primaryColor": "f08080",
      "secondaryColor": "ffff",
      "primaryLedMode": "onOff",
      "secondaryLedMode": "dim",
      "sequentialPattern": "forward",
      "sequentialRepeat": "all",
      "sequentialSendMode": "always",
      "linkedSwitch": 0,
      "currentStep": 0,
      "midiClock": 0,
      "lfo": {
        "state": null,
        "frequency": "1.0",
        "minLimit": 0,
        "maxLimit": 127,
        "trigger": "primary",
        "messages": null,
        "waveform": "sine",
        "resolution": 1,
        "resetOnStop": true,
        "clock": null
      },
      "toggleOnMessages": {
        "numMessages": 0,
        "messages": []
      },
      "toggleOffMessages": {
        "numMessages": 0,
        "messages": []
      },
      "pressMessages": {
        "numMessages": 1,
        "messages": [
          {
            "statusByte": "90",
            "dataByte1": "3f",
            "dataByte2": "64",
            "outputs": {
              "midi0": true,
              "flexi1": true,
              "flexi2": true,
              "usb": false
            }
          }
        ]
      },
      "releaseMessages": {
        "numMessages": 1,
        "messages": [
          {
            "statusByte": "80",
            "dataByte1": "3f",
            "dataByte2": "0",
            "outputs": {
              "midi0": true,
              "flexi1": true,
              "flexi2": true,
              "usb": false
            }
          }
        ]
      },
      "doublePressMessages": {
        "numMessages": 1,
        "messages": [
          {
            "statusByte": "90",
            "dataByte1": "3f",
            "dataByte2": "64",
            "outputs": {
              "midi0": true,
              "flexi1": true,
              "flexi2": true,
              "usb": false
            }
          }
        ]
      },
      "holdMessages": {
        "numMessages": 1,
        "messages": [
          {
            "statusByte": "80",
            "dataByte1": "3f",
            "dataByte2": "0",
            "outputs": {
              "midi0": true,
              "flexi1": true,
              "flexi2": true,
              "usb": false
            }
          }
        ]
      },
      "holdReleaseMessages": {
        "numMessages": 1,
        "messages": [
          {
            "statusByte": "80",
            "dataByte1": "3f",
            "dataByte2": "0",
            "outputs": {
              "midi0": true,
              "flexi1": true,
              "flexi2": true,
              "usb": false
            }
          }
        ]
      },
      "secondaryToggleOnMessages": {
        "numMessages": 1,
        "messages": [
          {
            "statusByte": "90",
            "dataByte1": "3f",
            "dataByte2": "64",
            "outputs": {
              "midi0": true,
              "flexi1": true,
              "flexi2": true,
              "usb": false
            }
          }
        ]
      },
      "secondaryToggleOffMessages": {
        "numMessages": 1,
        "messages": [
          {
            "statusByte": "80",
            "dataByte1": "3f",
            "dataByte2": "0",
            "outputs": {
              "midi0": true,
              "flexi1": true,
              "flexi2": true,
              "usb": false
            }
          }
        ]
      },
      "sequentialMessages": {
        "numSteps": 3,
        "steps": [
          {
            "numMessages": 1,
            "label": "Guitar1",
            "color": "ed823e",
            "messages": [
              {
                "statusByte": "b0",
                "dataByte1": "1",
                "dataByte2": "7f",
                "outputs": {
                  "midi0": true,
                  "flexi1": true,
                  "flexi2": true,
                  "usb": true
                }
              }
            ]
          },
          {
            "numMessages": 2,
            "label": "Synth",
            "color": "ff00ff",
            "messages": [
              {
                "statusByte": "90",
                "dataByte1": "3f",
                "dataByte2": "12",
                "outputs": {
                  "midi0": true,
                  "flexi1": true,
                  "flexi2": true,
                  "usb": false
                }
              },
              {
                "statusByte": "0",
                "dataByte1": "0",
                "dataByte2": "0",
                "outputs": {
                  "midi0": false,
                  "flexi1": false,
                  "flexi2": false,
                  "usb": false
                }
              }
            ]
          },
          {
            "numMessages": 1,
            "label": "Bass",
            "color": "ad323c",
            "messages": [
              {
                "statusByte": "90",
                "dataByte1": "3f",
                "dataByte2": "61",
                "outputs": {
                  "midi0": true,
                  "flexi1": true,
                  "flexi2": true,
                  "usb": false
                }
              }
            ]
          }
        ]
      },
      "scrollingMesssages": {
        "stepInterval": 1,
        "minScrollLimit": 0,
        "maxScrollLimit": 127,
        "numMessages": 0,
        "messages": []
      }
    },
    {
      "name": "FS 3",
      "primaryState": false,
      "secondaryState": false,
      "primaryMode": "toggle",
      "secondaryMode": "holdToggle",
      "primaryColor": "f08080",
      "secondaryColor": "ffff",
      "primaryLedMode": "onOff",
      "secondaryLedMode": "dim",
      "sequentialPattern": "forward",
      "sequentialRepeat": "all",
      "sequentialSendMode": "always",
      "linkedSwitch": 0,
      "currentStep": 0,
      "midiClock": 0,
      "lfo": {
        "state": false,
        "frequency": "1.0",
        "minLimit": 0,
        "maxLimit": 127,
        "trigger": "secondary",
        "messages": "toggleOn",
        "waveform": "sine",
        "resolution": 1,
        "resetOnStop": true,
        "clock": 0
      },
      "toggleOnMessages": {
        "numMessages": 1,
        "messages": [
          {
            "statusByte": "90",
            "dataByte1": "3f",
            "dataByte2": "64",
            "outputs": {
              "midi0": true,
              "flexi1": true,
              "flexi2": true,
              "usb": false
            }
          }
        ]
      },
      "toggleOffMessages": {
        "numMessages": 1,
        "messages": [
          {
            "statusByte": "80",
            "dataByte1": "3f",
            "dataByte2": "0",
            "outputs": {
              "midi0": true,
              "flexi1": true,
              "flexi2": true,
              "usb": false
            }
          }
        ]
      },
      "pressMessages": {
        "numMessages": 1,
        "messages": [
          {
            "statusByte": "90",
            "dataByte1": "3f",
            "dataByte2": "64",
            "outputs": {
              "midi0": true,
              "flexi1": true,
              "flexi2": true,
              "usb": false
            }
          }
        ]
      },
      "releaseMessages": {
        "numMessages": 1,
        "messages": [
          {
            "statusByte": "80",
            "dataByte1": "3f",
            "dataByte2": "0",
            "outputs": {
              "midi0": true,
              "flexi1": true,
              "flexi2": true,
              "usb": false
            }
          }
        ]
      },
      "doublePressMessages": {
        "numMessages": 0,
        "messages": []
      },
      "holdMessages": {
        "numMessages": 1,
        "messages": [
          {
            "statusByte": "80",
            "dataByte1": "3f",
            "dataByte2": "0",
            "outputs": {
              "midi0": true,
              "flexi1": true,
              "flexi2": true,
              "usb": false
            }
          }
        ]
      },
      "holdReleaseMessages": {
        "numMessages": 1,
        "messages": [
          {
            "statusByte": "80",
            "dataByte1": "3f",
            "dataByte2": "0",
            "outputs": {
              "midi0": true,
              "flexi1": true,
              "flexi2": true,
              "usb": false
            }
          }
        ]
      },
      "secondaryToggleOnMessages": {
        "numMessages": 1,
        "messages": [
          {
            "statusByte": "90",
            "dataByte1": "3f",
            "dataByte2": "64",
            "outputs": {
              "midi0": true,
              "flexi1": true,
              "flexi2": true,
              "usb": false
            }
          }
        ]
      },
      "secondaryToggleOffMessages": {
        "numMessages": 1,
        "messages": [
          {
            "statusByte": "80",
            "dataByte1": "3f",
            "dataByte2": "0",
            "outputs": {
              "midi0": true,
              "flexi1": true,
              "flexi2": true,
              "usb": false
            }
          }
        ]
      },
      "sequentialMessages": {
        "numSteps": 0,
        "steps": []
      },
      "scrollingMesssages": {
        "stepInterval": 1,
        "minScrollLimit": 0,
        "maxScrollLimit": 127,
        "numMessages": 0,
        "messages": []
      }
    },
    {
      "name": "FS 4",
      "primaryState": false,
      "secondaryState": false,
      "primaryMode": "toggle",
      "secondaryMode": "holdToggle",
      "primaryColor": "f08080",
      "secondaryColor": "ffff",
      "primaryLedMode": "onOff",
      "secondaryLedMode": "dim",
      "sequentialPattern": "forward",
      "sequentialRepeat": "all",
      "sequentialSendMode": "always",
      "linkedSwitch": 0,
      "currentStep": 0,
      "midiClock": 0,
      "lfo": {
        "state": null,
        "frequency": "1.0",
        "minLimit": 0,
        "maxLimit": 127,
        "trigger": "primary",
        "messages": null,
        "waveform": "sine",
        "resolution": 1,
        "resetOnStop": true,
        "clock": 0
      },
      "toggleOnMessages": {
        "numMessages": 1,
        "messages": [
          {
            "statusByte": "90",
            "dataByte1": "3f",
            "dataByte2": "64",
            "outputs": {
              "midi0": true,
              "flexi1": true,
              "flexi2": true,
              "usb": false
            }
          }
        ]
      },
      "toggleOffMessages": {
        "numMessages": 1,
        "messages": [
          {
            "statusByte": "80",
            "dataByte1": "3f",
            "dataByte2": "0",
            "outputs": {
              "midi0": true,
              "flexi1": true,
              "flexi2": true,
              "usb": false
            }
          }
        ]
      },
      "pressMessages": {
        "numMessages": 1,
        "messages": [
          {
            "statusByte": "90",
            "dataByte1": "3f",
            "dataByte2": "64",
            "outputs": {
              "midi0": true,
              "flexi1": true,
              "flexi2": true,
              "usb": false
            }
          }
        ]
      },
      "releaseMessages": {
        "numMessages": 1,
        "messages": [
          {
            "statusByte": "80",
            "dataByte1": "3f",
            "dataByte2": "0",
            "outputs": {
              "midi0": true,
              "flexi1": true,
              "flexi2": true,
              "usb": false
            }
          }
        ]
      },
      "doublePressMessages": {
        "numMessages": 0,
        "messages": []
      },
      "holdMessages": {
        "numMessages": 1,
        "messages": [
          {
            "statusByte": "80",
            "dataByte1": "3f",
            "dataByte2": "0",
            "outputs": {
              "midi0": true,
              "flexi1": true,
              "flexi2": true,
              "usb": false
            }
          }
        ]
      },
      "holdReleaseMessages": {
        "numMessages": 1,
        "messages": [
          {
            "statusByte": "80",
            "dataByte1": "3f",
            "dataByte2": "0",
            "outputs": {
              "midi0": true,
              "flexi1": true,
              "flexi2": true,
              "usb": false
            }
          }
        ]
      },
      "secondaryToggleOnMessages": {
        "numMessages": 1,
        "messages": [
          {
            "statusByte": "90",
            "dataByte1": "3f",
            "dataByte2": "64",
            "outputs": {
              "midi0": true,
              "flexi1": true,
              "flexi2": true,
              "usb": false
            }
          }
        ]
      },
      "secondaryToggleOffMessages": {
        "numMessages": 1,
        "messages": [
          {
            "statusByte": "80",
            "dataByte1": "3f",
            "dataByte2": "0",
            "outputs": {
              "midi0": true,
              "flexi1": true,
              "flexi2": true,
              "usb": false
            }
          }
        ]
      },
      "sequentialMessages": {
        "numSteps": 0,
        "steps": []
      },
      "scrollingMesssages": {
        "stepInterval": 1,
        "minScrollLimit": 0,
        "maxScrollLimit": 127,
        "numMessages": 0,
        "messages": []
      }
    }
  ]
}