+#include "freertos/FreeRTOS.h"
+#include "freertos/semphr.h"
+#include "freertos/ringbuf.h"
+#include "esp_log.h"
+#include "usb/usb_host.h"
+#include "usb/cdc_acm_host.h"
+#include "driver/i2c_master.h"
+#include "usb_comms.h"
+#include "usb_tonex_common.h"
+#include "usb_tonex_plug.h"
+#include "control.h"
+#include "display.h"
+#include "wifi_config.h"
+#include "tonex_params.h"
+
+static const char *TAG = "app_TonexPlug";
+
+// preset name is proceeded by this byte sequence:
+static const uint8_t TonePlugPresetByteMarker[] = {0xB9, 0x04, 0xB9, 0x02, 0xBC, 0x21};
+
+// preset index is proceeded by this byte sequence:
+static const uint8_t TonePlugPresetIndexMarker[] = {0xB9, 0x06, 0x01};
+
+// lengths of preset name and drive character
+#define TONEX_ONE_RESP_OFFSET_PRESET_NAME_LEN 32
+#define TONEX_ONE_CDC_INTERFACE_INDEX 0
+
+#define MAX_INPUT_BUFFERS 3
+
+#define MAX_STATE_DATA 512
+
+// credit to https://github.com/vit3k/tonex_controller for some of the below details and implementation
+enum CommsState
+{
+ COMMS_STATE_IDLE,
+ COMMS_STATE_HELLO,
+ COMMS_STATE_READY,
+ COMMS_STATE_GET_STATE
+};
+
+typedef enum Type
+{
+ TYPE_UNKNOWN,
+ TYPE_STATE_UPDATE,
+ TYPE_HELLO,
+ TYPE_STATE_PRESET_DETAILS,
+ TYPE_STATE_PRESET_DETAILS_FULL,
+ TYPE_PARAM_CHANGED,
+ TYPE_CURRENT_PRESET,
+ TYPE_TUNER_FREQ
+} Type;
+
+typedef enum Slot
+{
+ A = 0,
+ B = 1,
+ C = 2
+} Slot;
+
+
+#define TONEX_STATE_OFFSET_START_INPUT_TRIM 15 // 0x000070c1 (-15.0) -> 0x000058c1 (0) -> 0x00007041 (15.0)
+//#define TONEX_STATE_OFFSET_START_STOMP_MODE 19 //?????? // 0x00 - off, 0x01 - on
+#define TONEX_STATE_OFFSET_START_CAB_BYPASS 19 // 0x00 - off, 0x01 - on
+#define TONEX_STATE_OFFSET_START_TUNING_MODE 20 // 0x00 - mute, 0x01 - through
+#define TONEX_STATE_OFFSET_START_COLORS 23
+
+#define TONEX_STATE_OFFSET_END_MIDI_REPEATED_PC 1 // 0x00 - ignore, 0x01 - bypass
+#define TONEX_STATE_OFFSET_END_MIDI_CLOCK 2 // 0x00 - off, 0x01 - Slave Midi, 0x02 - Slave USB, 0x03 - master
+#define TONEX_STATE_OFFSET_END_MIDI_MODE 4 // 0x00 - off, 0x01 - thru, 0x02 - merge
+#define TONEX_STATE_OFFSET_END_BPM 8 // float
+#define TONEX_STATE_OFFSET_END_TEMPO_SOURCE 10 // 00 - GLOBAL, 01 - PRESET
+#define TONEX_STATE_OFFSET_END_DIRECT_MONITOR 11 // 0x00 - off, 0x01 - on
+#define TONEX_STATE_OFFSET_END_TUNING_REF 13 // 2 byte int
+#define TONEX_STATE_OFFSET_END_SLOT_C_PRESET 16
+#define TONEX_STATE_OFFSET_END_SLOT_B_PRESET 18
+#define TONEX_STATE_OFFSET_END_SLOT_A_PRESET 20
+
+
+typedef struct __attribute__ ((packed))
+{
+ Type type;
+ uint16_t size;
+ uint16_t unknown;
+} tHeader;
+
+typedef struct __attribute__ ((packed))
+{
+ // storage for current pedal state data
+ uint8_t StateData[MAX_STATE_DATA];
+ uint16_t StateDataLength;
+
+ // storage for current preset details data (short version)
+ uint8_t PresetData[TONEX_MAX_SHORT_PRESET_DATA];
+ uint16_t PresetDataLength;
+ uint16_t PresetParameterStartOffset;
+} tPedalData;
+
+typedef struct __attribute__ ((packed))
+{
+ tHeader Header;
+ uint8_t SlotAPreset;
+ uint8_t SlotBPreset;
+ uint8_t SlotCPreset;
+ Slot CurrentSlot;
+ tPedalData PedalData;
+ uint8_t CurrentPreset;
+ uint8_t BypassMode;
+} tTonexMessage;
+
+typedef struct __attribute__ ((packed))
+{
+ tTonexMessage Message;
+ uint8_t TonexState;
+} tTonexData;
+
+typedef struct
+{
+ uint8_t Data[TONEX_RX_TEMP_BUFFER_SIZE];
+ uint16_t Length;
+ uint8_t ReadyToRead : 1;
+ uint8_t ReadyToWrite : 1;
+} tInputBufferEntry;
+
+
+
+/*
+** Static vars
+*/
+static cdc_acm_dev_hdl_t cdc_dev;
+static tTonexData* TonexData;
+static char preset_name[TONEX_ONE_RESP_OFFSET_PRESET_NAME_LEN + 1];
+static uint8_t* TxBuffer;
+static uint8_t* FramedBuffer;
+static QueueHandle_t input_queue;
+static uint8_t boot_init_needed = 0;
+static uint8_t boot_global_request = 0;
+static uint8_t boot_preset_request = 0;
+static volatile tInputBufferEntry* InputBuffers;
+
+/*
+** Static function prototypes
+*/
+static TonexStatus usb_tonex_plug_parse(uint8_t* message, uint16_t inlength);
+static esp_err_t usb_tonex_plug_set_active_slot(Slot newSlot);
+static esp_err_t usb_tonex_plug_set_preset_in_slot(uint16_t preset, Slot newSlot, uint8_t selectSlot);
+static esp_err_t usb_tonex_plug_set_ab_slots(uint16_t preset_a, uint16_t preset_b);
+static uint16_t usb_tonex_plug_get_current_active_preset(void);
+
+
+/****************************************************************************
+* NAME:
+* DESCRIPTION:
+* PARAMETERS:
+* RETURN:
+* NOTES:
+*****************************************************************************/
+static esp_err_t usb_tonex_plug_hello(void)
+{
+ uint16_t outlength;
+
+ ESP_LOGI(TAG, "Sending Hello");
+
+ uint8_t request[] = {0xb9, 0x03, 0x00, 0x82, 0x04, 0x00, 0x80, 0x0C, 0x01, 0xb9, 0x02, 0x02, 0x0D};
+
+ // add framing
+ outlength = tonex_common_add_framing(request, sizeof(request), FramedBuffer);
+
+ // send it
+ return tonex_common_transmit(cdc_dev, FramedBuffer, outlength, TONEX_USB_TX_BUFFER_SIZE);
+}
+
+/****************************************************************************
+* NAME:
+* DESCRIPTION:
+* PARAMETERS:
+* RETURN:
+* NOTES:
+*****************************************************************************/
+static esp_err_t usb_tonex_plug_request_state(void)
+{
+ uint16_t outlength;
+
+ uint8_t request[] = {0xb9, 0x03, 0x00, 0x82, 0x06, 0x00, 0x80, 0x0C, 0x03, 0xb9, 0x02, 0x81, 0x04, 0x03, 0x0D};
+
+ ESP_LOGI(TAG, "Requesting State data");
+
+ // add framing
+ outlength = tonex_common_add_framing(request, sizeof(request), FramedBuffer);
+
+ // send it
+ return tonex_common_transmit(cdc_dev, FramedBuffer, outlength, TONEX_USB_TX_BUFFER_SIZE);
+}
+
+/****************************************************************************
+* NAME:
+* DESCRIPTION:
+* PARAMETERS:
+* RETURN:
+* NOTES:
+*****************************************************************************/
+static esp_err_t __attribute__((unused)) usb_tonex_plug_request_preset_details(uint8_t preset_index, uint8_t full_details)
+{
+ uint16_t outlength;
+
+ ESP_LOGI(TAG, "Requesting full preset details for %d", (int)preset_index);
+
+ uint8_t request[] = {0xb9, 0x03, 0x81, 0x00, 0x03, 0x82, 0x06, 0x00, 0x80, 0x0C, 0x03, 0xb9, 0x04, 0x16, 0x01, 0x00, 0x00};
+
+ request[15] = preset_index;
+ request[16] = full_details; // 0x00 = approx 2k byte summary. 0x01 = approx 30k byte full preset details
+
+ // add framing
+ outlength = tonex_common_add_framing(request, sizeof(request), FramedBuffer);
+
+ // debug
+ //ESP_LOG_BUFFER_HEXDUMP(TAG, FramedBuffer, outlength, ESP_LOG_INFO);
+
+ // send it
+ return tonex_common_transmit(cdc_dev, FramedBuffer, outlength, TONEX_USB_TX_BUFFER_SIZE);
+}
+
+/****************************************************************************
+* NAME:
+* DESCRIPTION:
+* PARAMETERS:
+* RETURN:
+* NOTES:
+*****************************************************************************/
+static esp_err_t usb_tonex_plug_send_single_parameter(uint16_t index, float value)
+{
+ uint16_t framed_length;
+
+ // Build message len LSB len MSB
+ uint8_t message[] = {0xb9, 0x03, 0x81, 0x06, 0x03, 0x82, 0x0A, 0x00, 0x80, 0x0C, 0x03};
+
+ // payload unknown param index 4 byte float value
+ uint8_t payload[] = {0xB9, 0x04, 0x02, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00 };
+
+ // set param index
+ payload[4] = index;
+
+ // set param value
+ memcpy((void*)&payload[6], (void*)&value, sizeof(value));
+
+ // build total message
+ memcpy((void*)TxBuffer, (void*)message, sizeof(message));
+ memcpy((void*)&TxBuffer[sizeof(message)], (void*)payload, sizeof(payload));
+
+ // add framing
+ framed_length = tonex_common_add_framing(TxBuffer, sizeof(message) + sizeof(payload), FramedBuffer);
+
+ // debug
+ //ESP_LOG_BUFFER_HEXDUMP(TAG, FramedBuffer, framed_length, ESP_LOG_INFO);
+
+ // send it
+ return tonex_common_transmit(cdc_dev, FramedBuffer, framed_length, TONEX_USB_TX_BUFFER_SIZE);
+}
+
+/****************************************************************************
+* NAME:
+* DESCRIPTION:
+* PARAMETERS:
+* RETURN:
+* NOTES:
+*****************************************************************************/
+static esp_err_t usb_tonex_plug_send_master_volume(float value)
+{
+ uint16_t framed_length;
+
+ // Build message len LSB len MSB
+ uint8_t message[] = {0xb9, 0x03, 0x81, 0x06, 0x03, 0x82, 0x0A, 0x00, 0x80, 0x0C, 0x03};
+
+ // payload unknown param index 4 byte float value
+ uint8_t payload[] = {0xB9, 0x04, 0x03, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00 };
+
+ // set value
+ memcpy((void*)&payload[6], (void*)&value, sizeof(value));
+
+ // build total message
+ memcpy((void*)TxBuffer, (void*)message, sizeof(message));
+ memcpy((void*)&TxBuffer[sizeof(message)], (void*)payload, sizeof(payload));
+
+ // add framing
+ framed_length = tonex_common_add_framing(TxBuffer, sizeof(message) + sizeof(payload), FramedBuffer);
+
+ // debug
+ //ESP_LOG_BUFFER_HEXDUMP(TAG, FramedBuffer, framed_length, ESP_LOG_INFO);
+
+ // send it
+ return tonex_common_transmit(cdc_dev, FramedBuffer, framed_length, TONEX_USB_TX_BUFFER_SIZE);
+}
+
+/****************************************************************************
+* NAME:
+* DESCRIPTION:
+* PARAMETERS:
+* RETURN:
+* NOTES:
+*****************************************************************************/
+static esp_err_t usb_tonex_plug_request_master_volume(void)
+{
+ uint16_t framed_length;
+
+ // Build message len LSB len MSB
+ uint8_t message[] = {0xb9, 0x03, 0x81, 0x0A, 0x03, 0x82, 0x05, 0x00, 0x80, 0x16, 0x03, 0xB9, 0x03, 0x03, 0x00, 0x00 };
+
+ // build total message
+ memcpy((void*)TxBuffer, (void*)message, sizeof(message));
+
+ // add framing
+ framed_length = tonex_common_add_framing(TxBuffer, sizeof(message), FramedBuffer);
+
+ // debug
+ //ESP_LOG_BUFFER_HEXDUMP(TAG, FramedBuffer, framed_length, ESP_LOG_INFO);
+
+ // send it
+ return tonex_common_transmit(cdc_dev, FramedBuffer, framed_length, TONEX_USB_TX_BUFFER_SIZE);
+}
+
+/****************************************************************************
+* NAME:
+* DESCRIPTION:
+* PARAMETERS:
+* RETURN:
+* NOTES:
+*****************************************************************************/
+static esp_err_t usb_tonex_plug_request_tuner(uint8_t state)
+{
+ uint16_t outlength;
+
+ // ! state
+ uint8_t request[] = {0xb9, 0x03, 0x81, 0x0F, 0x03, 0x82, 0x03, 0x00, 0x80, 0x19, 0x03, 0xB9, 0x01, 0x00};
+ request[13] = state;
+
+ ESP_LOGI(TAG, "Requesting Tuner");
+
+ // add framing
+ outlength = tonex_common_add_framing(request, sizeof(request), FramedBuffer);
+
+ // send it
+ return tonex_common_transmit(cdc_dev, FramedBuffer, outlength, TONEX_USB_TX_BUFFER_SIZE);
+}
+
+/****************************************************************************
+* NAME:
+* DESCRIPTION:
+* PARAMETERS:
+* RETURN:
+* NOTES:
+*****************************************************************************/
+static void __attribute__((unused)) usb_tonex_plug_dump_state(void)
+{
+ float InputTrim;
+ float BPM;
+ uint16_t TuningRef;
+
+ memcpy((void*)&BPM, (void*)&TonexData->Message.PedalData.StateData[TonexData->Message.PedalData.StateDataLength - TONEX_STATE_OFFSET_END_BPM], sizeof(float));
+ memcpy((void*)&InputTrim, (void*)&TonexData->Message.PedalData.StateData[TONEX_STATE_OFFSET_START_INPUT_TRIM], sizeof(float));
+ memcpy((void*)&TuningRef, (void*)&TonexData->Message.PedalData.StateData[TonexData->Message.PedalData.StateDataLength - TONEX_STATE_OFFSET_END_TUNING_REF], sizeof(uint16_t));
+
+ ESP_LOGI(TAG, "**** Tonex State Data ****");
+ ESP_LOGI(TAG, "Input Trim: %3.2f", InputTrim);
+
+ ESP_LOGI(TAG, "Cab Sim Bypass: %d.\t\tTuning Mode: %d", (int)TonexData->Message.PedalData.StateData[TONEX_STATE_OFFSET_START_CAB_BYPASS],
+ (int)TonexData->Message.PedalData.StateData[TONEX_STATE_OFFSET_START_TUNING_MODE]);
+
+ ESP_LOGI(TAG, "Slot A Preset: %d,\t\tSlot B Preset: %d", (int)TonexData->Message.PedalData.StateData[TonexData->Message.PedalData.StateDataLength - TONEX_STATE_OFFSET_END_SLOT_A_PRESET],
+ (int)TonexData->Message.PedalData.StateData[TonexData->Message.PedalData.StateDataLength - TONEX_STATE_OFFSET_END_SLOT_B_PRESET]);
+
+ ESP_LOGI(TAG, "Slot C Preset: %d.", (int)TonexData->Message.PedalData.StateData[TonexData->Message.PedalData.StateDataLength - TONEX_STATE_OFFSET_END_SLOT_C_PRESET]);
+
+ ESP_LOGI(TAG, "Tuning Reference: %d.\t\tDirect Monitoring: %d", (int)TuningRef,
+ (int)TonexData->Message.PedalData.StateData[TonexData->Message.PedalData.StateDataLength - TONEX_STATE_OFFSET_END_DIRECT_MONITOR]);
+
+ ESP_LOGI(TAG, "BPM: %3.2f\t\t\tTempo Source: %d", BPM, (int)TonexData->Message.PedalData.StateData[TonexData->Message.PedalData.StateDataLength - TONEX_STATE_OFFSET_END_TEMPO_SOURCE]);
+}
+
+/****************************************************************************
+* NAME:
+* DESCRIPTION:
+* PARAMETERS:
+* RETURN:
+* NOTES:
+*****************************************************************************/
+static esp_err_t __attribute__((unused)) usb_tonex_plug_set_active_slot(Slot newSlot)
+{
+ uint16_t framed_length;
+
+ ESP_LOGI(TAG, "Setting slot %d", (int)newSlot);
+
+ // slot index. 0=A, 1=B, 2=C
+ uint8_t message[] = {0xb9, 0x03, 0x81, 0x0C, 0x03, 0x82, 0x03, 0x00, 0x80, 0x19, 0x03, 0xB9, 0x01, 0x00};
+
+ // save the slot
+ TonexData->Message.CurrentSlot = newSlot;
+
+ // modify the buffer with the new slot
+ message[13] = (uint8_t)newSlot;
+
+ // build total message
+ memcpy((void*)TxBuffer, (void*)message, sizeof(message));
+
+ // add framing
+ framed_length = tonex_common_add_framing(TxBuffer, sizeof(message), FramedBuffer);
+
+ // send it
+ return tonex_common_transmit(cdc_dev, FramedBuffer, framed_length, TONEX_USB_TX_BUFFER_SIZE);
+}
+
+
+/****************************************************************************
+* NAME:
+* DESCRIPTION:
+* PARAMETERS:
+* RETURN:
+* NOTES:
+*****************************************************************************/
+static esp_err_t usb_tonex_plug_set_preset_in_slot(uint16_t preset, Slot newSlot, uint8_t selectSlot)
+{
+ uint16_t framed_length;
+
+ ESP_LOGI(TAG, "Setting preset %d in slot %d", (int)preset, (int)newSlot);
+
+ // Build message, length to 0 for now len LSB len MSB
+ uint8_t message[] = {0xb9, 0x03, 0x81, 0x04, 0x03, 0x82, 0, 0, 0x80, 0x0C, 0x03};
+
+ // set length
+ message[6] = TonexData->Message.PedalData.StateDataLength & 0xFF;
+ message[7] = (TonexData->Message.PedalData.StateDataLength >> 8) & 0xFF;
+
+ switch (control_get_config_item_int(CONFIG_ITEM_SAVE_PRESET_TO_SLOT))
+ {
+ // force pedal to A/B or Stomp mode. 0 here = A/B mode, 1 = stomp mode
+ //todo here: current slot is set by different message usb_tonex_plug_set_active_slot
+ case SAVE_PRESET_SLOT_A:
+ case SAVE_PRESET_SLOT_B:
+ {
+
+ } break;
+
+ case SAVE_PRESET_SLOT_C:
+ {
+
+ } break;
+
+ case SAVE_PRESET_SLOT_CURRENT:
+ {
+ // do nothing
+ } break;
+ }
+
+ // make sure direct monitoring is on so sound not muted from USB connection
+ TonexData->Message.PedalData.StateData[TonexData->Message.PedalData.StateDataLength - TONEX_STATE_OFFSET_END_DIRECT_MONITOR] = 1;
+
+ // check if setting same preset twice will set bypass
+ if (control_get_config_item_int(CONFIG_ITEM_TOGGLE_BYPASS))
+ {
+ if (selectSlot && (TonexData->Message.CurrentSlot == newSlot) && (preset == usb_tonex_plug_get_current_active_preset()))
+ {
+ // are we in bypass mode?
+ if (TonexData->Message.BypassMode == 1)
+ {
+ ESP_LOGI(TAG, "Disabling bypass mode");
+
+ // disable bypass mode
+ TonexData->Message.BypassMode = 0;
+ }
+ else
+ {
+ ESP_LOGI(TAG, "Enabling bypass mode");
+
+ // enable bypass mode
+ TonexData->Message.BypassMode = 1;
+ }
+ }
+ else
+ {
+ // new preset, disable bypass mode to be sure
+ TonexData->Message.BypassMode = 0;
+ }
+
+ //todo transmit bypass state?
+ // is inside set preset message
+ }
+
+ TonexData->Message.CurrentSlot = newSlot;
+
+
+ // set the preset index into the slot position
+ switch (newSlot)
+ {
+ case A:
+ {
+ TonexData->Message.PedalData.StateData[TonexData->Message.PedalData.StateDataLength - TONEX_STATE_OFFSET_END_SLOT_A_PRESET] = preset;
+ } break;
+
+ case B:
+ {
+ TonexData->Message.PedalData.StateData[TonexData->Message.PedalData.StateDataLength - TONEX_STATE_OFFSET_END_SLOT_B_PRESET] = preset;
+ } break;
+
+ case C:
+ {
+ TonexData->Message.PedalData.StateData[TonexData->Message.PedalData.StateDataLength - TONEX_STATE_OFFSET_END_SLOT_C_PRESET] = preset;
+ } break;
+ }
+
+ if (selectSlot)
+ {
+ // modify the buffer with the new slot
+ //todo, needs another message send usb_tonex_plug_set_active_slot
+ }
+
+ // build total message
+ memcpy((void*)TxBuffer, (void*)message, sizeof(message));
+ memcpy((void*)&TxBuffer[sizeof(message)], (void*)TonexData->Message.PedalData.StateData, TonexData->Message.PedalData.StateDataLength);
+
+ // do framing
+ framed_length = tonex_common_add_framing(TxBuffer, sizeof(message) + TonexData->Message.PedalData.StateDataLength, FramedBuffer);
+
+ //ESP_LOGI(TAG, "State Data after changes - framed");
+ //ESP_LOG_BUFFER_HEXDUMP(TAG, FramedBuffer, framed_length, ESP_LOG_INFO);
+
+ // send it
+ return tonex_common_transmit(cdc_dev, FramedBuffer, framed_length, TONEX_USB_TX_BUFFER_SIZE);
+}
+
+/****************************************************************************
+* NAME:
+* DESCRIPTION:
+* PARAMETERS:
+* RETURN:
+* NOTES:
+*****************************************************************************/
+static esp_err_t usb_tonex_plug_set_ab_slots(uint16_t preset_a, uint16_t preset_b)
+{
+ uint16_t framed_length;
+ uint16_t len = TonexData->Message.PedalData.StateDataLength;
+
+ ESP_LOGI(TAG, "Setting AB slots. A: %d B: %d (Double mode, Slot A active)", (int)preset_a, (int)preset_b);
+
+ // Build message, length to 0 for now len LSB len MSB
+ uint8_t message[] = {0xb9, 0x03, 0x81, 0x04, 0x03, 0x82, 0, 0, 0x80, 0x0C, 0x03};
+
+ // set length
+ message[6] = len & 0xFF;
+ message[7] = (len >> 8) & 0xFF;
+
+ // make sure direct monitoring is on so sound not muted from USB connection
+ TonexData->Message.PedalData.StateData[len - TONEX_STATE_OFFSET_END_DIRECT_MONITOR] = 1;
+
+ // set both slot presets
+ TonexData->Message.PedalData.StateData[len - TONEX_STATE_OFFSET_END_SLOT_A_PRESET] = preset_a;
+ TonexData->Message.PedalData.StateData[len - TONEX_STATE_OFFSET_END_SLOT_B_PRESET] = preset_b;
+
+ // make Slot A the active slot
+ TonexData->Message.CurrentSlot = A;
+
+ // update cached slot presets so the active preset reports correctly
+ TonexData->Message.SlotAPreset = preset_a;
+ TonexData->Message.SlotBPreset = preset_b;
+
+ // build total message
+ memcpy((void*)TxBuffer, (void*)message, sizeof(message));
+ memcpy((void*)&TxBuffer[sizeof(message)], (void*)TonexData->Message.PedalData.StateData, len);
+
+ // do framing
+ framed_length = tonex_common_add_framing(TxBuffer, sizeof(message) + len, FramedBuffer);
+
+ // send it
+ if (tonex_common_transmit(cdc_dev, FramedBuffer, framed_length, TONEX_USB_TX_BUFFER_SIZE) != ESP_OK)
+ {
+ return ESP_FAIL;
+ }
+
+ // refresh the display to show Slot A's preset as active
+ return usb_tonex_plug_request_preset_details(preset_a, 0);
+}
+
+/****************************************************************************
+* NAME:
+* DESCRIPTION:
+* PARAMETERS:
+* RETURN:
+* NOTES:
+*****************************************************************************/
+static bool usb_tonex_plug_handle_rx(const uint8_t* data, size_t data_len, void* arg)
+{
+ // debug
+ //ESP_LOGI(TAG, "CDC Data received %d", (int)data_len);
+ //ESP_LOG_BUFFER_HEXDUMP(TAG, data, data_len, ESP_LOG_INFO);
+
+ if (data_len > TONEX_RX_TEMP_BUFFER_SIZE)
+ {
+ ESP_LOGE(TAG, "usb_tonex_plug_handle_rx data too long! %d", (int)data_len);
+ return false;
+ }
+ else
+ {
+ // locate a buffer to put it
+ for (uint8_t loop = 0; loop < MAX_INPUT_BUFFERS; loop++)
+ {
+ if (InputBuffers[loop].ReadyToWrite == 1)
+ {
+ // grab data
+ memcpy((void*)InputBuffers[loop].Data, (void*)data, data_len);
+
+ // set buffer as used
+ InputBuffers[loop].Length = data_len;
+ InputBuffers[loop].ReadyToWrite = 0;
+ InputBuffers[loop].ReadyToRead = 1;
+
+ // debug
+ //ESP_LOGI(TAG, "CDC Data buffered into %d", (int)loop);
+
+ return true;
+ }
+ }
+ }
+
+ ESP_LOGE(TAG, "usb_tonex_plug_handle_rx no available buffers!");
+ return false;
+}
+
+/****************************************************************************
+* NAME:
+* DESCRIPTION:
+* PARAMETERS:
+* RETURN:
+* NOTES:
+*****************************************************************************/
+static esp_err_t usb_tonex_plug_modify_global(uint16_t global_val, float value)
+{
+ esp_err_t res = ESP_FAIL;
+ float scaled_value;
+
+ switch (global_val)
+ {
+ case TONEX_GLOBAL_BPM:
+ {
+ // modify the BPM value in state packet
+ memcpy((void*)&TonexData->Message.PedalData.StateData[TonexData->Message.PedalData.StateDataLength - TONEX_STATE_OFFSET_END_BPM], (void*)&value, sizeof(float));
+ res = ESP_OK;
+ } break;
+
+ case TONEX_GLOBAL_INPUT_TRIM:
+ {
+ // modify the input trim value in state
+ memcpy((void*)&TonexData->Message.PedalData.StateData[TONEX_STATE_OFFSET_START_INPUT_TRIM], (void*)&value, sizeof(float));
+ res = ESP_OK;
+ } break;
+
+ case TONEX_GLOBAL_CABSIM_BYPASS:
+ {
+ // modify the cabsim bypass in state
+ TonexData->Message.PedalData.StateData[TONEX_STATE_OFFSET_START_CAB_BYPASS] = (uint8_t)value;
+ res = ESP_OK;
+ } break;
+
+ case TONEX_GLOBAL_TEMPO_SOURCE:
+ {
+ // modify the tempo source value in state
+ TonexData->Message.PedalData.StateData[TonexData->Message.PedalData.StateDataLength - TONEX_STATE_OFFSET_END_TEMPO_SOURCE] = (uint8_t)value;
+ res = ESP_OK;
+ } break;
+
+ case TONEX_GLOBAL_TUNING_REFERENCE:
+ {
+ // modify the tuning ref value in state packet
+ uint16_t freq = (uint16_t)value;
+ memcpy((void*)&TonexData->Message.PedalData.StateData[TonexData->Message.PedalData.StateDataLength - TONEX_STATE_OFFSET_END_TUNING_REF], (void*)&freq, sizeof(uint16_t));
+ res = ESP_OK;
+ } break;
+
+ case TONEX_GLOBAL_BYPASS:
+ {
+ // modify bypass
+ TonexData->Message.BypassMode = (uint8_t)value;
+
+ //todo send it
+ // is inside the Set Preset command
+ res = ESP_OK;
+ } break;
+
+ case TONEX_GLOBAL_MASTER_VOLUME:
+ {
+ // global volume is sent with a special command
+ // Big Tonex uses values -40 to +3, and One uses values from 0 to 10.
+ // So, scaling the One's values to match the big Tonex
+ scaled_value = ((value + 40.0f) / 43.0f) * 10.0f;
+
+ usb_tonex_plug_send_master_volume(scaled_value);
+
+ // wait a little
+ vTaskDelay(pdMS_TO_TICKS(20));
+
+ // read value back to update the UI
+ usb_tonex_plug_request_master_volume();
+
+ // bit of a hack here. Return fail code, so caller can avoid sending the state data unneccessarily
+ res = ESP_FAIL;
+ } break;
+
+ case TONEX_GLOBAL_DIRECT_MONITOR:
+ {
+ // modify the direct monitor value in state
+ TonexData->Message.PedalData.StateData[TonexData->Message.PedalData.StateDataLength - TONEX_STATE_OFFSET_END_DIRECT_MONITOR] = (uint8_t)value;
+ res = ESP_OK;
+ } break;
+ }
+
+ return res;
+}
+
+/****************************************************************************
+* NAME:
+* DESCRIPTION:
+* PARAMETERS:
+* RETURN:
+* NOTES:
+*****************************************************************************/
+static TonexStatus usb_tonex_plug_parse_state(uint8_t* unframed, uint16_t length, uint16_t index)
+{
+ tModellerParameter* param_ptr;
+
+ TonexData->Message.Header.type = TYPE_STATE_UPDATE;
+
+ TonexData->Message.PedalData.StateDataLength = length - index;
+ memcpy((void*)TonexData->Message.PedalData.StateData, (void*)&unframed[index], TonexData->Message.PedalData.StateDataLength);
+ ESP_LOGI(TAG, "Saved Pedal StateData: %d", TonexData->Message.PedalData.StateDataLength);
+
+ // save preset details
+ TonexData->Message.SlotAPreset = TonexData->Message.PedalData.StateData[TonexData->Message.PedalData.StateDataLength - TONEX_STATE_OFFSET_END_SLOT_A_PRESET];
+ TonexData->Message.SlotBPreset = TonexData->Message.PedalData.StateData[TonexData->Message.PedalData.StateDataLength - TONEX_STATE_OFFSET_END_SLOT_B_PRESET];
+ TonexData->Message.SlotCPreset = TonexData->Message.PedalData.StateData[TonexData->Message.PedalData.StateDataLength - TONEX_STATE_OFFSET_END_SLOT_C_PRESET];
+
+ // update global params
+ if (tonex_params_get_locked_access(¶m_ptr) == ESP_OK)
+ {
+ memcpy((void*)¶m_ptr[TONEX_GLOBAL_BPM].Value, (void*)&TonexData->Message.PedalData.StateData[TonexData->Message.PedalData.StateDataLength - TONEX_STATE_OFFSET_END_BPM], sizeof(float));
+ memcpy((void*)¶m_ptr[TONEX_GLOBAL_INPUT_TRIM].Value, (void*)&TonexData->Message.PedalData.StateData[TONEX_STATE_OFFSET_START_INPUT_TRIM], sizeof(float));
+ param_ptr[TONEX_GLOBAL_CABSIM_BYPASS].Value = (float)TonexData->Message.PedalData.StateData[TONEX_STATE_OFFSET_START_CAB_BYPASS];
+ param_ptr[TONEX_GLOBAL_TEMPO_SOURCE].Value = (float)TonexData->Message.PedalData.StateData[TonexData->Message.PedalData.StateDataLength - TONEX_STATE_OFFSET_END_TEMPO_SOURCE];
+
+ uint16_t freq;
+ memcpy((void*)&freq, (void*)&TonexData->Message.PedalData.StateData[TonexData->Message.PedalData.StateDataLength - TONEX_STATE_OFFSET_END_TUNING_REF], sizeof(uint16_t));
+ param_ptr[TONEX_GLOBAL_TUNING_REFERENCE].Value = (float)freq;
+
+ param_ptr[TONEX_GLOBAL_DIRECT_MONITOR].Value = (float)TonexData->Message.PedalData.StateData[TonexData->Message.PedalData.StateDataLength - TONEX_STATE_OFFSET_END_DIRECT_MONITOR];
+
+ tonex_params_release_locked_access();
+ }
+
+ tTonexPresetColor* color_ptr;
+ // update preset colors
+ if (tonex_params_colors_get_locked_access(&color_ptr) == ESP_OK)
+ {
+ uint8_t data_offset = TONEX_STATE_OFFSET_START_COLORS;
+ data_offset += 2; // skip `ba 14` list header
+ for (uint16_t preset_index = 0; preset_index < MAX_PRESETS_TONEX_PLUG; preset_index++) {
+ data_offset += 2; // skip `b9 03` list header
+
+ color_ptr[preset_index].red = tonex_common_parse_value(TonexData->Message.PedalData.StateData, &data_offset);
+ color_ptr[preset_index].green = tonex_common_parse_value(TonexData->Message.PedalData.StateData, &data_offset);
+ color_ptr[preset_index].blue = tonex_common_parse_value(TonexData->Message.PedalData.StateData, &data_offset);
+ }
+
+ tonex_params_release_locked_access();
+ }
+
+ // debug
+ //ESP_LOG_BUFFER_HEXDUMP(TAG, TonexData->Message.PedalData.StateData, TonexData->Message.PedalData.StateDataLength, ESP_LOG_INFO);
+ //tonex_dump_parameters();
+ //usb_tonex_plug_dump_state();
+
+ ESP_LOGI(TAG, "Slot A: %d. Slot B:%d. Slot C:%d. Current slot: %d", (int)TonexData->Message.SlotAPreset, (int)TonexData->Message.SlotBPreset, (int)TonexData->Message.SlotCPreset, (int)TonexData->Message.CurrentSlot);
+
+ return STATUS_OK;
+}
+
+/****************************************************************************
+* NAME:
+* DESCRIPTION:
+* PARAMETERS:
+* RETURN:
+* NOTES:
+*****************************************************************************/
+static TonexStatus usb_tonex_plug_parse_current_preset(uint8_t* unframed, uint16_t length, uint16_t index)
+{
+ tModellerParameter* param_ptr;
+
+ TonexData->Message.Header.type = TYPE_CURRENT_PRESET;
+
+ TonexData->Message.CurrentPreset = unframed[12];
+ TonexData->Message.CurrentSlot = unframed[20];
+ TonexData->Message.BypassMode = unframed[21];
+
+ // update global param
+ if (tonex_params_get_locked_access(¶m_ptr) == ESP_OK)
+ {
+ param_ptr[TONEX_GLOBAL_BYPASS].Value = (float)TonexData->Message.BypassMode;
+ tonex_params_release_locked_access();
+ }
+
+ // debug
+ //ESP_LOG_BUFFER_HEXDUMP(TAG, unframed, length, ESP_LOG_INFO);
+
+ ESP_LOGI(TAG, "Current preset: %d slot: %d bypass: %d", (int)TonexData->Message.CurrentPreset, (int)TonexData->Message.CurrentSlot, (int)TonexData->Message.BypassMode);
+
+ // request details for the current preset
+ usb_tonex_plug_request_preset_details(TonexData->Message.CurrentPreset, 0);
+
+ return STATUS_OK;
+}
+
+/****************************************************************************
+* NAME:
+* DESCRIPTION:
+* PARAMETERS:
+* RETURN:
+* NOTES:
+*****************************************************************************/
+static TonexStatus usb_tonex_plug_parse_tuner_freq(uint8_t* unframed, uint16_t length, uint16_t index)
+{
+ float tuner_cents;
+ float ref_freq;
+ uint8_t midi_note;
+
+ TonexData->Message.Header.type = TYPE_TUNER_FREQ;
+
+ // tuner cents here is signed float error from pedal's chosen note
+ memcpy((void*)&ref_freq, (void*)&unframed[10], sizeof(float));
+ memcpy((void*)&tuner_cents, (void*)&unframed[15], sizeof(float));
+ midi_note = unframed[19];
+
+ // pass to UI
+ UI_SetTunerFrequencies(tuner_cents, ref_freq, midi_note);
+
+ // debug
+ //ESP_LOG_BUFFER_HEXDUMP(TAG, unframed, length, ESP_LOG_INFO);
+ ESP_LOGI(TAG, "Tuner freq: %3.2f %3.2f", tuner_cents, ref_freq);
+
+ return STATUS_OK;
+}
+
+/****************************************************************************
+* NAME:
+* DESCRIPTION:
+* PARAMETERS:
+* RETURN:
+* NOTES:
+*****************************************************************************/
+static TonexStatus usb_tonex_plug_parse_preset_details(uint8_t* unframed, uint16_t length, uint16_t index)
+{
+ TonexData->Message.Header.type = TYPE_STATE_PRESET_DETAILS;
+
+ TonexData->Message.PedalData.PresetDataLength = length - index;
+ memcpy((void*)TonexData->Message.PedalData.PresetData, (void*)&unframed[index], TonexData->Message.PedalData.PresetDataLength);
+ ESP_LOGI(TAG, "Saved Preset Details: %d", TonexData->Message.PedalData.PresetDataLength);
+
+ // debug
+ //ESP_LOGI(TAG, "Preset Data Rx: %d %d", (int)length, (int)index);
+ //ESP_LOG_BUFFER_HEXDUMP(TAG, TonexData->Message.PedalData.PresetData, TonexData->Message.PedalData.PresetDataLength, ESP_LOG_INFO);
+
+ return STATUS_OK;
+}
+
+/****************************************************************************
+* NAME:
+* DESCRIPTION:
+* PARAMETERS:
+* RETURN:
+* NOTES:
+*****************************************************************************/
+static TonexStatus usb_tonex_plug_parse_param_changed(uint8_t* unframed, uint16_t length, uint16_t index)
+{
+ uint16_t param_index;
+ float value;
+ float scaled_value;
+ tModellerParameter* param_ptr = NULL;
+
+ // note here: globals seem to use marker 1 and rest marker 2
+ uint8_t param_start_marker_1[] = { 0xB9, 0x04, 0x03 };
+ uint8_t param_start_marker_2[] = { 0xB9, 0x04, 0x02 };
+
+ TonexData->Message.Header.type = TYPE_PARAM_CHANGED;
+
+ // try to locate the start of the parameter index
+ // try marker 1
+ uint8_t* temp_ptr = memmem((void*)&unframed[index], length, (void*)param_start_marker_1, sizeof(param_start_marker_1));
+ if (temp_ptr == NULL)
+ {
+ // 1 not found, try marker 2
+ temp_ptr = memmem((void*)&unframed[index], length, (void*)param_start_marker_2, sizeof(param_start_marker_2));
+ }
+
+ // did we find either?
+ if (temp_ptr != NULL)
+ {
+ // skip the start marker
+ temp_ptr += sizeof(param_start_marker_1);
+
+ // next 2 bytes are the param index
+ param_index = *temp_ptr++;
+ param_index |= (*temp_ptr << 8);
+ temp_ptr++;
+
+ // next should be float start marker
+ if (*temp_ptr == 0x88)
+ {
+ // skip it
+ temp_ptr++;
+
+ // get the value
+ memcpy((void*)&value, (void*)temp_ptr, sizeof(float));
+
+ ESP_LOGI(TAG, "Got param change. Index: %d. Value: %3.2f", (int)param_index, value);
+
+ if (param_index == 0x00)
+ {
+ // global volume
+ // Big Tonex uses values -40 to +3, and One uses values from 0 to 10.
+ // So, scaling the One's values to match the big Tonex
+ scaled_value = ((value / 10.0f) * 43.0f) - 40.0f;
+
+ // save it
+ if (tonex_params_get_locked_access(¶m_ptr) == ESP_OK)
+ {
+ param_ptr[TONEX_GLOBAL_MASTER_VOLUME].Value = scaled_value;
+
+ tonex_params_release_locked_access();
+ }
+
+ ESP_LOGI(TAG, "Got global volume: raw:%3.2f scaled:%3.2f", value, scaled_value);
+ }
+ }
+ else
+ {
+ ESP_LOGW(TAG, "usb_tonex_plug_parse_param_changed 0x88 not found");
+ }
+ }
+ else
+ {
+ ESP_LOGW(TAG, "usb_tonex_plug_parse_param_changed start marker not found");
+ ESP_LOG_BUFFER_HEXDUMP(TAG, unframed, length, ESP_LOG_INFO);
+ }
+
+ return STATUS_OK;
+}
+
+/****************************************************************************
+* NAME:
+* DESCRIPTION:
+* PARAMETERS:
+* RETURN:
+* NOTES:
+*****************************************************************************/
+static uint16_t usb_tonex_plug_get_current_active_preset(void)
+{
+ return TonexData->Message.CurrentPreset;
+}
+
+/****************************************************************************
+* NAME:
+* DESCRIPTION:
+* PARAMETERS:
+* RETURN:
+* NOTES:
+*****************************************************************************/
+static Slot usb_tonex_plug_slot_for_saving_preset(void)
+{
+ Slot slot = C;
+ switch (control_get_config_item_int(CONFIG_ITEM_SAVE_PRESET_TO_SLOT))
+ {
+ case SAVE_PRESET_SLOT_CURRENT:
+ {
+ slot = TonexData->Message.CurrentSlot;
+ } break;
+
+ case SAVE_PRESET_SLOT_A:
+ {
+ slot = A;
+ } break;
+
+ case SAVE_PRESET_SLOT_B:
+ {
+ slot = B;
+ } break;
+
+ case SAVE_PRESET_SLOT_C:
+ {
+ slot = C;
+ } break;
+ }
+
+ return slot;
+}
+
+/****************************************************************************
+* NAME:
+* DESCRIPTION:
+* PARAMETERS:
+* RETURN:
+* NOTES:
+*****************************************************************************/
+static void usb_tonex_plug_parse_preset_parameters(uint8_t* raw_data, uint16_t length)
+{
+ uint8_t param_start_marker[] = {0xBA, 0x03, 0xBA, 0x6D};
+ tModellerParameter* param_ptr = NULL;
+
+ ESP_LOGI(TAG, "Parsing Preset parameters");
+
+ // try to locate the start of the first parameter block
+ uint8_t* temp_ptr = memmem((void*)raw_data, length, (void*)param_start_marker, sizeof(param_start_marker));
+ if (temp_ptr != NULL)
+ {
+ // skip the start marker
+ temp_ptr += sizeof(param_start_marker);
+
+ // save the offset where the parameters start
+ TonexData->Message.PedalData.PresetParameterStartOffset = temp_ptr - raw_data;
+ ESP_LOGI(TAG, "Preset parameters offset: %d", (int)TonexData->Message.PedalData.PresetParameterStartOffset);
+
+ if (tonex_params_get_locked_access(¶m_ptr) == ESP_OK)
+ {
+ // params here are start marker of 0x88, followed by a 4-byte float
+ for (uint32_t loop = 0; loop < TONEX_PARAM_LAST; loop++)
+ {
+ if (*temp_ptr == 0x88)
+ {
+ // skip the marker
+ temp_ptr++;
+
+ // get the value
+ memcpy((void*)¶m_ptr[loop].Value, (void*)temp_ptr, sizeof(float));
+
+ // skip the float
+ temp_ptr += sizeof(float);
+ }
+ else
+ {
+ ESP_LOGW(TAG, "Unexpected value during Param parse: %d, %d", (int)loop, (int)*temp_ptr);
+ break;
+ }
+ }
+
+ tonex_params_release_locked_access();
+ }
+
+ ESP_LOGI(TAG, "Parsing Preset parameters complete");
+ }
+ else
+ {
+ ESP_LOGW(TAG, "Parsing Preset parameters failed to find start marker");
+ ESP_LOG_BUFFER_HEXDUMP(TAG, raw_data, length, ESP_LOG_INFO);
+ }
+}
+
+/****************************************************************************
+* NAME:
+* DESCRIPTION:
+* PARAMETERS:
+* RETURN:
+* NOTES:
+*****************************************************************************/
+static TonexStatus usb_tonex_plug_parse(uint8_t* message, uint16_t inlength)
+{
+ uint16_t out_len = 0;
+
+ TonexStatus status = tonex_common_remove_framing(message, inlength, FramedBuffer, &out_len);
+
+ if (status != STATUS_OK)
+ {
+ ESP_LOGE(TAG, "Remove framing failed");
+ return STATUS_INVALID_FRAME;
+ }
+
+ if (out_len < 5)
+ {
+ ESP_LOGE(TAG, "Message too short");
+ return STATUS_INVALID_FRAME;
+ }
+
+ if ((FramedBuffer[0] != 0xB9) || (FramedBuffer[1] != 0x03))
+ {
+ ESP_LOGE(TAG, "Invalid header");
+ return STATUS_INVALID_FRAME;
+ }
+
+ tHeader header;
+ uint8_t index = 2;
+ uint16_t type = tonex_common_parse_value(FramedBuffer, &index);
+
+ // debug
+ //ESP_LOGW(TAG, "Header 0x%04X", type);
+
+ switch (type)
+ {
+ case 0x0306:
+ {
+ header.type = TYPE_PARAM_CHANGED;
+ } break;
+
+ case 0x0304:
+ {
+ // state update
+ header.type = TYPE_STATE_UPDATE;
+ } break;
+
+ case 0x0303:
+ {
+ // preset details in full
+ header.type = TYPE_STATE_PRESET_DETAILS_FULL;
+ } break;
+
+ case 0x0002:
+ {
+ // hello response
+ header.type = TYPE_HELLO;
+ } break;
+
+ case 0x0302:
+ {
+ // preset details summary
+ header.type = TYPE_STATE_PRESET_DETAILS;
+ } break;
+
+ case 0x0309:
+ {
+ header.type = TYPE_PARAM_CHANGED;
+ } break;
+
+ case 0x030E:
+ {
+ header.type = TYPE_CURRENT_PRESET;
+ } break;
+
+ case 0x0006:
+ {
+ //ESP_LOG_BUFFER_HEXDUMP(TAG, FramedBuffer, out_len, ESP_LOG_INFO);
+ // unknown meesage, arrives after preset changed via state data. typically b9 03 06 06 16 b9 02 81 04 03 00
+ header.type = TYPE_UNKNOWN;
+ } break;
+
+ case 0x0310:
+ {
+ header.type = TYPE_TUNER_FREQ;
+ } break;
+
+ default:
+ {
+ ESP_LOGI(TAG, "Unknown type %02X", (int)type);
+ header.type = TYPE_UNKNOWN;
+ } break;
+ };
+
+ header.size = tonex_common_parse_value(FramedBuffer, &index);
+ header.unknown = tonex_common_parse_value(FramedBuffer, &index);
+
+ ESP_LOGI(TAG, "usb_tonex_plug_parse: type: %d size: %d", (int)header.type, (int)header.size);
+
+ if ((out_len - index) != header.size)
+ {
+ ESP_LOGE(TAG, "Invalid message size");
+ return STATUS_INVALID_FRAME;
+ }
+
+ // make sure we don't trip the task watchdog
+ vTaskDelay(pdMS_TO_TICKS(5));
+
+ // check message type
+ switch (header.type)
+ {
+ case TYPE_HELLO:
+ {
+ ESP_LOGI(TAG, "Hello response");
+ memcpy((void*)&TonexData->Message.Header, (void*)&header, sizeof(header));
+ return STATUS_OK;
+ } break;
+
+ case TYPE_STATE_UPDATE:
+ {
+ return usb_tonex_plug_parse_state(FramedBuffer, out_len, index);
+ } break;
+
+ case TYPE_STATE_PRESET_DETAILS:
+ {
+ return usb_tonex_plug_parse_preset_details(FramedBuffer, out_len, index);
+ } break;
+
+ case TYPE_STATE_PRESET_DETAILS_FULL:
+ {
+ // don't need to process this anymore, thanks to IK new parameter comms :)
+ return STATUS_OK;
+ } break;
+
+ case TYPE_PARAM_CHANGED:
+ {
+ return usb_tonex_plug_parse_param_changed(FramedBuffer, out_len, index);
+ } break;
+
+ case TYPE_CURRENT_PRESET:
+ {
+ return usb_tonex_plug_parse_current_preset(FramedBuffer, out_len, index);
+ } break;
+
+ case TYPE_TUNER_FREQ:
+ {
+ return usb_tonex_plug_parse_tuner_freq(FramedBuffer, out_len, index);
+ } break;
+
+ default:
+ {
+ ESP_LOGI(TAG, "Unknown structure. Skipping.");
+ memcpy((void*)&TonexData->Message.Header, (void*)&header, sizeof(header));
+ return STATUS_OK;
+ }
+ };
+}
+
+/****************************************************************************
+* NAME:
+* DESCRIPTION:
+* PARAMETERS:
+* RETURN:
+* NOTES:
+*****************************************************************************/
+static esp_err_t usb_tonex_plug_process_single_message(uint8_t* data, uint16_t length)
+{
+ void* temp_ptr;
+ uint16_t current_preset;
+
+ // check if we got a complete message(s)
+ if ((length >= 2) && (data[0] == 0x7E) && (data[length - 1] == 0x7E))
+ {
+ ESP_LOGI(TAG, "Processing messages len: %d", (int)length);
+ TonexStatus status = usb_tonex_plug_parse(data, length);
+
+ if (status != STATUS_OK)
+ {
+ ESP_LOGE(TAG, "Error parsing message: %d", (int)status);
+ }
+ else
+ {
+ ESP_LOGI(TAG, "Message Header type: %d", (int)TonexData->Message.Header.type);
+
+ // check what we got
+ switch (TonexData->Message.Header.type)
+ {
+ case TYPE_STATE_UPDATE:
+ {
+ current_preset = usb_tonex_plug_get_current_active_preset();
+ ESP_LOGI(TAG, "Received State Update. Current slot: %d. Preset: %d", (int)TonexData->Message.CurrentSlot, (int)current_preset);
+
+ // debug
+ //ESP_LOG_BUFFER_HEXDUMP(TAG, data, length, ESP_LOG_INFO);
+
+ TonexData->TonexState = COMMS_STATE_READY;
+
+ if (boot_init_needed)
+ {
+ // start getting preset names
+ usb_tonex_plug_request_preset_details(boot_preset_request, 0);
+ boot_init_needed = 0;
+ }
+ else
+ {
+ // if we have messages waiting in the queue, it will trigger another
+ // change that will overwrite this one. Skip the UI refresh to save time
+ if (uxQueueMessagesWaiting(input_queue) == 0)
+ {
+ // signal to refresh param UI with Globals
+ UI_RefreshParameterValues();
+
+ // update web UI
+ wifi_request_sync(WIFI_SYNC_TYPE_PARAMS, NULL, NULL);
+
+ // refresh the footswitch leds
+ control_update_footswitch_leds();
+ }
+ }
+ } break;
+
+ case TYPE_STATE_PRESET_DETAILS:
+ {
+ // locate the TonePlugPresetByteMarker[] to get preset name
+ temp_ptr = memmem((void*)data, length, (void*)TonePlugPresetByteMarker, sizeof(TonePlugPresetByteMarker));
+ if (temp_ptr != NULL)
+ {
+ ESP_LOGI(TAG, "Got preset name");
+
+ // grab name
+ memcpy((void*)preset_name, (void*)(temp_ptr + sizeof(TonePlugPresetByteMarker)), TONEX_ONE_RESP_OFFSET_PRESET_NAME_LEN);
+ }
+
+ current_preset = usb_tonex_plug_get_current_active_preset();
+
+ if (boot_preset_request < MAX_PRESETS_TONEX_PLUG)
+ {
+ // find out which preset index this is, so we can't get out of sync
+ temp_ptr = memmem((void*)data, length, (void*)TonePlugPresetIndexMarker, sizeof(TonePlugPresetIndexMarker));
+
+ uint8_t preset_index;
+
+ if (temp_ptr != NULL)
+ {
+ // found index
+ memcpy((void*)&preset_index, (void*)(temp_ptr + sizeof(TonePlugPresetIndexMarker)), sizeof(preset_index));
+ }
+ else
+ {
+ // not found, fall back to the one we should have just requested
+ preset_index = boot_preset_request;
+ }
+
+ // save preset name
+ control_sync_preset_name(preset_index, preset_name);
+
+ if (boot_preset_request == preset_index)
+ {
+ // get next preset name
+ boot_preset_request++;
+ }
+
+ usb_tonex_plug_request_preset_details(boot_preset_request, 0);
+ }
+ else if (boot_preset_request == MAX_PRESETS_TONEX_PLUG)
+ {
+ // all other preset nammes grabbed, get current preset details
+ boot_preset_request++;
+ usb_tonex_plug_request_preset_details(current_preset, 0);
+ }
+ else
+ {
+ ESP_LOGI(TAG, "Received State Update. Current slot: %d. Preset: %d", (int)TonexData->Message.CurrentSlot, (int)current_preset);
+
+ // make sure we are showing the correct preset as active
+ control_sync_preset_details(current_preset, preset_name);
+
+ // read the preset params
+ usb_tonex_plug_parse_preset_parameters(data, length);
+
+ // if we have messages waiting in the queue, it will trigger another
+ // change that will overwrite this one. Skip the UI refresh to save time
+ if (uxQueueMessagesWaiting(input_queue) == 0)
+ {
+ // signal to refresh param UI
+ UI_RefreshParameterValues();
+
+ // update web UI
+ wifi_request_sync(WIFI_SYNC_TYPE_PARAMS, NULL, NULL);
+
+ // refresh the footswitch leds
+ control_update_footswitch_leds();
+ }
+
+ if (boot_global_request)
+ {
+ // request global volume
+ usb_tonex_plug_request_master_volume();
+
+ boot_global_request = 0;
+ }
+
+ control_set_sync_complete();
+
+ // debug dump parameters
+ //tonex_dump_parameters();
+ }
+ } break;
+
+ case TYPE_HELLO:
+ {
+ ESP_LOGI(TAG, "Received Hello");
+
+ // get current state
+ usb_tonex_plug_request_state();
+ TonexData->TonexState = COMMS_STATE_GET_STATE;
+
+ // flag that we need to do the boot init procedure
+ boot_init_needed = 1;
+ boot_global_request = 1;
+ boot_preset_request = 0;
+
+#if CONFIG_TONEX_CONTROLLER_HAS_DISPLAY
+ // show sync message
+ UI_SetPresetLabel(0, "Syncing....");
+#endif
+ } break;
+
+ case TYPE_STATE_PRESET_DETAILS_FULL:
+ {
+ // ignore
+ ESP_LOGI(TAG, "Received Preset details full");
+ } break;
+
+ case TYPE_PARAM_CHANGED:
+ {
+ // signal to refresh param UI
+ UI_RefreshParameterValues();
+
+ // update web UI
+ wifi_request_sync(WIFI_SYNC_TYPE_PARAMS, NULL, NULL);
+
+ // refresh the footswitch leds
+ control_update_footswitch_leds();
+ } break;
+
+ default:
+ {
+ ESP_LOGI(TAG, "Message unknown %d", (int)TonexData->Message.Header.type);
+ } break;
+ }
+ }
+
+ return ESP_OK;
+ }
+ else
+ {
+ ESP_LOGW(TAG, "Missing start or end bytes. %d, %d, %d", (int)length, (int)data[0], (int)data[length - 1]);
+ //ESP_LOG_BUFFER_HEXDUMP(TAG, data, length, ESP_LOG_INFO);
+ return ESP_FAIL;
+ }
+}
+
+/****************************************************************************
+* NAME:
+* DESCRIPTION:
+* PARAMETERS:
+* RETURN:
+* NOTES:
+*****************************************************************************/
+void usb_tonex_plug_handle(class_driver_t* driver_obj)
+{
+ tUSBMessage message;
+ tUSBMessage next_message;
+
+ // check state
+ switch (TonexData->TonexState)
+ {
+ case COMMS_STATE_IDLE:
+ default:
+ {
+ // do the hello
+ if (usb_tonex_plug_hello() == ESP_OK)
+ {
+ TonexData->TonexState = COMMS_STATE_HELLO;
+ }
+ else
+ {
+ ESP_LOGI(TAG, "Send Hello failed");
+ }
+ } break;
+
+ case COMMS_STATE_HELLO:
+ {
+ // waiting for response to arrive
+ } break;
+
+ case COMMS_STATE_READY:
+ {
+ // check for any input messages
+ if (xQueueReceive(input_queue, (void*)&message, 0) == pdPASS)
+ {
+ ESP_LOGI(TAG, "Got Input message: %d. Queue: %d", message.Command, uxQueueMessagesWaiting(input_queue));
+
+ // check if the next commands in the input queue would change the same item as this message.
+ // if so, no point in processing as it will be overwritten shortly.
+ while (uxQueueMessagesWaiting(input_queue) != 0)
+ {
+ // get a copy of the next message without removing it from the queue
+ if (xQueuePeek(input_queue, (void*)&next_message, 0) == pdPASS)
+ {
+ // check what it is
+ if (((next_message.Command == USB_COMMAND_MODIFY_PARAMETER) && (next_message.Payload == message.Payload))
+ || (next_message.Command == USB_COMMAND_SET_PRESET))
+ {
+ // don't send the current mesage. Instead, receive this next one properly and pull it off the queue
+ // so it can be processed (or overwritten again by another message in the queue still)
+ xQueueReceive(input_queue, (void*)&message, 0);
+
+ // debug
+ //ESP_LOGW(TAG, "Input message consumed");
+ }
+ else
+ {
+ // this next message is not the same, exit loop and send it
+ break;
+ }
+ }
+ else
+ {
+ // something went wrong with the Peek, don't get stuck in loop
+ break;
+ }
+ }
+
+ // process it
+ switch (message.Command)
+ {
+ case USB_COMMAND_SET_PRESET:
+ {
+ if (message.Payload < MAX_PRESETS_TONEX_PLUG)
+ {
+ if (usb_tonex_plug_set_preset_in_slot(message.Payload, usb_tonex_plug_slot_for_saving_preset(), 1) != ESP_OK)
+ {
+ // failed return to queue?
+ }
+
+ // set slot active
+ //todo?? usb_tonex_plug_set_active_slot(usb_tonex_plug_slot_for_saving_preset());
+ }
+ } break;
+
+ case USB_COMMAND_LOAD_PRESET_TO_SLOT_A:
+ {
+ if (message.Payload < MAX_PRESETS_TONEX_PLUG)
+ {
+ ESP_LOGI(TAG, "Loading preset %d to Slot A via MIDI CC 120", (int)message.Payload);
+ if (usb_tonex_plug_set_preset_in_slot(message.Payload, A, 0) != ESP_OK)
+ {
+ ESP_LOGE(TAG, "Failed to load preset %d to Slot A", (int)message.Payload);
+ }
+ }
+ else
+ {
+ ESP_LOGW(TAG, "Invalid preset index %d for Slot A (max %d)", (int)message.Payload, MAX_PRESETS_TONEX_PLUG - 1);
+ }
+ } break;
+
+ case USB_COMMAND_LOAD_PRESET_TO_SLOT_B:
+ {
+ if (message.Payload < MAX_PRESETS_TONEX_PLUG)
+ {
+ ESP_LOGI(TAG, "Loading preset %d to Slot B via MIDI CC 121", (int)message.Payload);
+ if (usb_tonex_plug_set_preset_in_slot(message.Payload, B, 0) != ESP_OK)
+ {
+ ESP_LOGE(TAG, "Failed to load preset %d to Slot B", (int)message.Payload);
+ }
+ }
+ else
+ {
+ ESP_LOGW(TAG, "Invalid preset index %d for Slot B (max %d)", (int)message.Payload, MAX_PRESETS_TONEX_PLUG - 1);
+ }
+ } break;
+
+ case USB_COMMAND_SET_AB_SLOTS:
+ {
+ uint16_t preset_a = (message.Payload >> 8) & 0xFF;
+ uint16_t preset_b = message.Payload & 0xFF;
+
+ if ((preset_a < MAX_PRESETS_TONEX_PLUG) && (preset_b < MAX_PRESETS_TONEX_PLUG))
+ {
+ ESP_LOGI(TAG, "Set AB slots via MIDI. A: %d B: %d", (int)preset_a, (int)preset_b);
+ if (usb_tonex_plug_set_ab_slots(preset_a, preset_b) != ESP_OK)
+ {
+ ESP_LOGE(TAG, "Failed to set AB slots A:%d B:%d", (int)preset_a, (int)preset_b);
+ }
+ }
+ else
+ {
+ ESP_LOGW(TAG, "Invalid AB slot presets A:%d B:%d (max %d)", (int)preset_a, (int)preset_b, MAX_PRESETS_TONEX_PLUG - 1);
+ }
+ } break;
+
+ case USB_COMMAND_MODIFY_PARAMETER:
+ {
+ if (message.Payload < TONEX_PARAM_LAST)
+ {
+ // modify the param
+ tonex_common_modify_parameter(message.Payload, message.PayloadFloat);
+
+ // send it
+ usb_tonex_plug_send_single_parameter(message.Payload, message.PayloadFloat);
+ }
+ else if (message.Payload < TONEX_GLOBAL_LAST)
+ {
+ // modify the global
+ if (usb_tonex_plug_modify_global(message.Payload, message.PayloadFloat) == ESP_OK)
+ {
+ // debug
+ //usb_tonex_plug_dump_state(&TonexData->Message.PedalData.TonexStateData);
+
+ // send it by setting the same preset active again, which sends the state data
+ usb_tonex_plug_set_preset_in_slot(usb_tonex_plug_get_current_active_preset(), usb_tonex_plug_slot_for_saving_preset(), 1);
+
+ // set slot active
+ usb_tonex_plug_set_active_slot(usb_tonex_plug_slot_for_saving_preset());
+ }
+ }
+ else
+ {
+ ESP_LOGW(TAG, "Attempt to modify unknown param %d", (int)message.Payload);
+ }
+ } break;
+
+ case USB_COMMAND_SAVE_PRESET:
+ {
+ // Tonex Plug uses auto save, nothing needed
+ } break;
+
+ case USB_COMMAND_REQUEST_TUNER:
+ {
+ usb_tonex_plug_request_tuner((uint8_t)message.Payload);
+ } break;
+ }
+ }
+ } break;
+
+ case COMMS_STATE_GET_STATE:
+ {
+ // waiting for state data
+ } break;
+ }
+
+ // check if we have received anything (via RX interrupt)
+ for (uint8_t loop = 0; loop < MAX_INPUT_BUFFERS; loop++)
+ {
+ if (InputBuffers[loop].ReadyToRead)
+ {
+ ESP_LOGI(TAG, "Got data via CDC %d", InputBuffers[loop].Length);
+
+ // debug
+ //ESP_LOG_BUFFER_HEXDUMP(TAG, InputBuffers[loop].Data, InputBuffers[loop].Length, ESP_LOG_INFO);
+
+ uint16_t end_marker_pos;
+ uint16_t bytes_consumed = 0;
+ uint8_t* rx_entry_ptr = (uint8_t*)InputBuffers[loop].Data;
+ uint16_t rx_entry_length = InputBuffers[loop].Length;
+
+ // process all messages received (may be multiple messages appended)
+ do
+ {
+ // locate the end of the message
+ end_marker_pos = tonex_common_locate_message_end(rx_entry_ptr, rx_entry_length);
+
+ if (end_marker_pos == 0)
+ {
+ ESP_LOGW(TAG, "Missing end marker!");
+ //ESP_LOG_BUFFER_HEXDUMP(TAG, rx_entry_ptr, rx_entry_length, ESP_LOG_INFO);
+ break;
+ }
+ else
+ {
+ ESP_LOGI(TAG, "Found end marker: %d", end_marker_pos);
+ }
+
+ // debug
+ //ESP_LOG_BUFFER_HEXDUMP(TAG, rx_entry_ptr, end_marker_pos + 1, ESP_LOG_INFO);
+
+ // process it
+ if (usb_tonex_plug_process_single_message(rx_entry_ptr, end_marker_pos + 1) != ESP_OK)
+ {
+ break;
+ }
+
+ // skip this message
+ rx_entry_ptr += (end_marker_pos + 1);
+ bytes_consumed += (end_marker_pos + 1);
+
+ //ESP_LOGI(TAG, "After message, pos %d cons %d len %d", (int)end_marker_pos, (int)bytes_consumed, (int)rx_entry_length);
+ } while (bytes_consumed < rx_entry_length);
+
+ // set buffer as available
+ InputBuffers[loop].ReadyToRead = 0;
+ InputBuffers[loop].ReadyToWrite = 1;
+
+ vTaskDelay(pdMS_TO_TICKS(2));
+ }
+ }
+
+ vTaskDelay(pdMS_TO_TICKS(2));
+}
+
+/****************************************************************************
+* NAME:
+* DESCRIPTION:
+* PARAMETERS:
+* RETURN:
+* NOTES:
+*****************************************************************************/
+void usb_tonex_plug_init(class_driver_t* driver_obj, QueueHandle_t comms_queue)
+{
+ // save the queue handle
+ input_queue = comms_queue;
+
+ // allocate RX buffers in PSRAM
+ InputBuffers = heap_caps_malloc(sizeof(tInputBufferEntry) * MAX_INPUT_BUFFERS, MALLOC_CAP_SPIRAM);
+ if (InputBuffers == NULL)
+ {
+ ESP_LOGE(TAG, "Failed to allocate input buffers!");
+ return;
+ }
+
+ // set all buffers as ready for writing
+ for (uint8_t loop = 0; loop < MAX_INPUT_BUFFERS; loop++)
+ {
+ memset((void*)InputBuffers[loop].Data, 0, TONEX_RX_TEMP_BUFFER_SIZE);
+ InputBuffers[loop].ReadyToWrite = 1;
+ InputBuffers[loop].ReadyToRead = 0;
+ }
+
+ // more big buffers in PSRAM
+ TxBuffer = heap_caps_malloc(TONEX_RX_TEMP_BUFFER_SIZE, MALLOC_CAP_SPIRAM);
+ if (TxBuffer == NULL)
+ {
+ ESP_LOGE(TAG, "Failed to allocate TxBuffer buffer!");
+ return;
+ }
+
+ FramedBuffer = heap_caps_malloc(TONEX_RX_TEMP_BUFFER_SIZE, MALLOC_CAP_SPIRAM);
+ if (FramedBuffer == NULL)
+ {
+ ESP_LOGE(TAG, "Failed to allocate FramedBuffer buffer!");
+ return;
+ }
+
+ TonexData = heap_caps_malloc(sizeof(tTonexData), MALLOC_CAP_SPIRAM);
+ if (TonexData == NULL)
+ {
+ ESP_LOGE(TAG, "Failed to allocate TonexData buffer!");
+ return;
+ }
+
+ memset((void*)TonexData, 0, sizeof(tTonexData));
+ TonexData->TonexState = COMMS_STATE_IDLE;
+
+ // code from ESP support forums, work around start. Refer to https://www.esp32.com/viewtopic.php?t=30601
+ // Relates to this:
+ //
+ // Endpoint Descriptor:
+ // ------------------------------
+ // 0x07 bLength
+ // 0x05 bDescriptorType
+ // 0x87 bEndpointAddress (IN endpoint 7)
+ // 0x02 bmAttributes (Transfer: Bulk / Synch: None / Usage: Data)
+ // 0x0040 wMaxPacketSize (64 bytes)
+ // 0x00 bInterval
+ // *** ERROR: Invalid wMaxPacketSize. Must be 512 bytes in high speed mode.
+
+ //Endpoint Descriptor:
+ //------------------------------
+ // 0x07 bLength
+ // 0x05 bDescriptorType
+ // 0x07 bEndpointAddress (OUT endpoint 7)
+ // 0x02 bmAttributes (Transfer: Bulk / Synch: None / Usage: Data)
+ // 0x0200 wMaxPacketSize (512 bytes) <= invalid for full speed mode we are using here
+ // 0x00 bInterval
+ const usb_config_desc_t* config_desc;
+ ESP_ERROR_CHECK(usb_host_get_active_config_descriptor(driver_obj->dev_hdl, &config_desc));
+
+ // fix wMaxPacketSize
+ int off = 0;
+ uint16_t wTotalLength = config_desc->wTotalLength;
+ const usb_standard_desc_t *next_desc = (const usb_standard_desc_t *)config_desc;
+ if (next_desc)
+ {
+ do
+ {
+ if (next_desc->bDescriptorType == USB_B_DESCRIPTOR_TYPE_ENDPOINT)
+ {
+ usb_ep_desc_t *mod_desc = (usb_ep_desc_t *)next_desc;
+ if (mod_desc->wMaxPacketSize > 64)
+ {
+ ESP_LOGW(TAG, "EP 0x%02X with wrong wMaxPacketSize %d - fixed to 64", mod_desc->bEndpointAddress, mod_desc->wMaxPacketSize);
+ mod_desc->wMaxPacketSize = 64;
+ }
+ }
+
+ next_desc = usb_parse_next_descriptor(next_desc, wTotalLength, &off);
+ } while (next_desc != NULL);
+ }
+ // code from forums, work around end
+
+ // install CDC host driver
+ ESP_ERROR_CHECK(cdc_acm_host_install(NULL));
+
+ ESP_LOGI(TAG, "Opening CDC ACM device 0x%04X:0x%04X", IK_MULTIMEDIA_USB_VENDOR, TONEX_PLUG_PRODUCT_ID);
+
+ // set the config
+ const cdc_acm_host_device_config_t dev_config = {
+ .connection_timeout_ms = 1000,
+ .out_buffer_size = TONEX_USB_TX_BUFFER_SIZE,
+ .in_buffer_size = TONEX_RX_TEMP_BUFFER_SIZE,
+ .user_arg = NULL,
+ .event_cb = NULL,
+ .data_cb = usb_tonex_plug_handle_rx
+ };
+
+ // release the reserved large buffers space we malloc'd at boot
+ tonex_common_release_memory();
+
+ // debug
+ //heap_caps_print_heap_info(MALLOC_CAP_DMA);
+
+ // open it
+ ESP_ERROR_CHECK(cdc_acm_host_open(IK_MULTIMEDIA_USB_VENDOR, TONEX_PLUG_PRODUCT_ID, TONEX_ONE_CDC_INTERFACE_INDEX, &dev_config, &cdc_dev));
+ assert(cdc_dev);
+
+ //cdc_acm_host_desc_print(cdc_dev);
+ vTaskDelay(pdMS_TO_TICKS(100));
+
+ ESP_LOGI(TAG, "Setting up line coding");
+
+ cdc_acm_line_coding_t line_coding;
+ ESP_ERROR_CHECK(cdc_acm_host_line_coding_get(cdc_dev, &line_coding));
+ ESP_LOGI(TAG, "Line Get: Rate: %d, Stop bits: %d, Parity: %d, Databits: %d", (int)line_coding.dwDTERate, (int)line_coding.bCharFormat, (int)line_coding.bParityType, (int)line_coding.bDataBits);
+
+ // set line coding
+ ESP_LOGI(TAG, "Set line coding");
+ cdc_acm_line_coding_t new_line_coding = {
+ .dwDTERate = 115200,
+ .bCharFormat = 0,
+ .bParityType = 0,
+ .bDataBits = 8
+ };
+
+ if (cdc_acm_host_line_coding_set(cdc_dev, &new_line_coding) != ESP_OK)
+ {
+ ESP_LOGE(TAG, "Set line coding failed");
+ }
+
+ // disable flow control
+ ESP_LOGI(TAG, "Set line state");
+ if (cdc_acm_host_set_control_line_state(cdc_dev, true, true) != ESP_OK)
+ {
+ ESP_LOGE(TAG, "Set line state failed");
+ }
+
+ // let things finish init and settle
+ vTaskDelay(pdMS_TO_TICKS(250));
+
+ // update UI
+ control_set_usb_status(1);
+}
+
+/****************************************************************************
+* NAME:
+* DESCRIPTION:
+* PARAMETERS:
+* RETURN:
+* NOTES:
+*****************************************************************************/
+void usb_tonex_plug_deinit(void)
+{
+ // close USB
+ cdc_acm_host_close(cdc_dev);
+ vTaskDelay(pdMS_TO_TICKS(200));
+ cdc_dev = NULL;
+ cdc_acm_host_uninstall();
+
+ // dealloc mem
+ free((void*)InputBuffers);
+ InputBuffers = NULL;
+
+ free((void*)TxBuffer);
+ TxBuffer = NULL;
+
+ free((void*)FramedBuffer);
+ FramedBuffer = NULL;
+
+ free((void*)TonexData);
+ TonexData = NULL;
+
+ boot_init_needed = 0;
+ boot_global_request = 0;
+ boot_preset_request = 0;
+
+ // preallocate big memory again, ready for freeing on reconnect
+ tonex_common_preallocate_memory();
+}
diff --git a/source/main/usb_tonex_plug.h b/source/main/usb_tonex_plug.h
new file mode 100644
index 00000000..8969dd79
--- /dev/null
+++ b/source/main/usb_tonex_plug.h
@@ -0,0 +1,41 @@
+/*
+ Copyright (C) 2026 Greg Smith
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+*/
+
+
+#ifndef _USB_TONEX_plug_H
+#define _USB_TONEX_plug_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define MAX_PRESETS_TONEX_PLUG 20
+
+void usb_tonex_plug_handle(class_driver_t* driver_obj);
+void usb_tonex_plug_init(class_driver_t* driver_obj, QueueHandle_t comms_queue);
+void usb_tonex_plug_deinit(void);
+void usb_tonex_plug_preallocate_memory(void);
+
+// MIDI CC slot targeting functions
+esp_err_t usb_tonex_plug_load_preset_to_slot_a(uint16_t preset);
+esp_err_t usb_tonex_plug_load_preset_to_slot_b(uint16_t preset);
+
+#ifdef __cplusplus
+} /*extern "C"*/
+#endif
+
+#endif
\ No newline at end of file
diff --git a/source/main/usb_valeton_gp5.c b/source/main/usb_valeton_gp5.c
index a63db70a..bdaace34 100644
--- a/source/main/usb_valeton_gp5.c
+++ b/source/main/usb_valeton_gp5.c
@@ -2202,6 +2202,11 @@ void usb_valeton_gp5_handle(class_driver_t* driver_obj)
usb_valeton_gp5_save_preset(control_get_current_preset_index(), preset_name);
} break;
+
+ case USB_COMMAND_REQUEST_TUNER:
+ {
+ // not supported
+ } break;
}
}
} break;
diff --git a/source/main/valeton_params.c b/source/main/valeton_params.c
index 561ee26e..c30771a9 100644
--- a/source/main/valeton_params.c
+++ b/source/main/valeton_params.c
@@ -23,7 +23,6 @@ limitations under the License.
#include "esp_log.h"
#include "usb/usb_host.h"
#include "usb/cdc_acm_host.h"
-#include "driver/i2c.h"
#include "usb_comms.h"
#include "control.h"
#include "valeton_params.h"
diff --git a/source/main/web/index.html b/source/main/web/index.html
index 47c99967..68e320ed 100644
--- a/source/main/web/index.html
+++ b/source/main/web/index.html
@@ -63,7 +63,7 @@
- Version V2.0.4.2
+ Version V2.1.0.2
github.com/Builty/TonexOneController
@@ -536,6 +536,10 @@
Global
diff --git a/source/main/web/script.js b/source/main/web/script.js
index 4b8f2cae..ee6eae49 100644
--- a/source/main/web/script.js
+++ b/source/main/web/script.js
@@ -2,6 +2,8 @@ const AMP_MODELLER_NONE = 0;
const AMP_MODELLER_TONEX_ONE = 1;
const AMP_MODELLER_TONEX = 2;
const AMP_MODELLER_VALETON_GP5 = 3;
+const AMP_MODELLER_TONEX_ONE_PLUS = 4;
+const AMP_MODELLER_TONEX_PLUG = 5;
var gateway = `ws://${window.location.hostname}/ws`;
var websocket;
@@ -181,6 +183,7 @@ const TONEX_GLOBAL_TEMPO_SOURCE = 113;
const TONEX_GLOBAL_TUNING_REFERENCE = 114;
const TONEX_GLOBAL_BYPASS = 115;
const TONEX_GLOBAL_MASTER_VOLUME = 116;
+const TONEX_GLOBAL_DIRECT_MONITOR = 117;
// valeton params
const ValetonParameters = {
@@ -956,6 +959,8 @@ function setEffectIcons() {
{
case AMP_MODELLER_TONEX_ONE:
case AMP_MODELLER_TONEX:
+ case AMP_MODELLER_TONEX_ONE_PLUS:
+ case AMP_MODELLER_TONEX_PLUG:
default:
{
// noise gate
@@ -1595,6 +1600,8 @@ function processReturnCmd(data) {
{
case AMP_MODELLER_TONEX_ONE:
case AMP_MODELLER_TONEX:
+ case AMP_MODELLER_TONEX_ONE_PLUS:
+ case AMP_MODELLER_TONEX_PLUG:
default:
{
for (var key in data['PARAMS']) {
@@ -2333,7 +2340,7 @@ function processReturnCmd(data) {
configureParamSwitch("gb_tempos", value);
setParamData("gb_tempos", parseInt(key));
break;
-
+
case TONEX_GLOBAL_TUNING_REFERENCE:
configureParamRange("gb_tref", value, min, max, 1);
setParamData("gb_tref", parseInt(key));
@@ -2348,6 +2355,11 @@ function processReturnCmd(data) {
configureParamRange("gb_vol", value, min, max, 0.1);
setParamData("gb_vol", parseInt(key));
break;
+
+ case TONEX_GLOBAL_DIRECT_MONITOR:
+ configureParamSwitch("gb_dirmon", value);
+ setParamData("gb_dirmon", parseInt(key));
+ break;
}
}
} break;
@@ -3617,12 +3629,16 @@ function processReturnCmd(data) {
// set modeller type
modellerType = data['MODELLER_TYPE'];
+ console.log("Modeller Data: max:", maxPresets, "start:", startPreset, "type:", modellerType);
+
// enable the relevant menu
const menuContainer = document.getElementById('nav-items-list');
switch (modellerType) {
case AMP_MODELLER_TONEX_ONE:
case AMP_MODELLER_TONEX:
+ case AMP_MODELLER_TONEX_ONE_PLUS:
+ case AMP_MODELLER_TONEX_PLUG:
default:
console.log("Setting Tonex menu");
menuContainer.innerHTML = DEVICE_MENUS['tonex'];
@@ -4330,6 +4346,8 @@ function globalTempoTap() {
{
case AMP_MODELLER_TONEX_ONE:
case AMP_MODELLER_TONEX:
+ case AMP_MODELLER_TONEX_ONE_PLUS:
+ case AMP_MODELLER_TONEX_PLUG:
default:
{
let input = document.getElementById("gb_bpm");
@@ -4432,6 +4450,8 @@ function populateExternalFootswitches() {
{
case AMP_MODELLER_TONEX_ONE:
case AMP_MODELLER_TONEX:
+ case AMP_MODELLER_TONEX_ONE_PLUS:
+ case AMP_MODELLER_TONEX_PLUG:
default:
{
midi_map = tonexMidiControlChangeAssociations;
@@ -4475,6 +4495,8 @@ function extFSChanged(fx) {
{
case AMP_MODELLER_TONEX_ONE:
case AMP_MODELLER_TONEX:
+ case AMP_MODELLER_TONEX_ONE_PLUS:
+ case AMP_MODELLER_TONEX_PLUG:
default:
{
midi_map = tonexMidiControlChangeAssociations;
@@ -4557,6 +4579,8 @@ function getExtFSValue(fs, value) {
{
case AMP_MODELLER_TONEX_ONE:
case AMP_MODELLER_TONEX:
+ case AMP_MODELLER_TONEX_ONE_PLUS:
+ case AMP_MODELLER_TONEX_PLUG:
default:
{
midi_map = tonexMidiControlChangeAssociations;
@@ -4594,6 +4618,8 @@ function populateInternalFootswitches() {
{
case AMP_MODELLER_TONEX_ONE:
case AMP_MODELLER_TONEX:
+ case AMP_MODELLER_TONEX_ONE_PLUS:
+ case AMP_MODELLER_TONEX_PLUG:
default:
{
midi_map = tonexMidiControlChangeAssociations;
@@ -4637,6 +4663,8 @@ function getIntFSValue(fs, value) {
{
case AMP_MODELLER_TONEX_ONE:
case AMP_MODELLER_TONEX:
+ case AMP_MODELLER_TONEX_ONE_PLUS:
+ case AMP_MODELLER_TONEX_PLUG:
default:
{
midi_map = tonexMidiControlChangeAssociations;
@@ -4874,6 +4902,8 @@ function updateEffectsChainIcons() {
{
case AMP_MODELLER_TONEX_ONE:
case AMP_MODELLER_TONEX:
+ case AMP_MODELLER_TONEX_ONE_PLUS:
+ case AMP_MODELLER_TONEX_PLUG:
default:
{
const icons = [
diff --git a/source/main/wifi_config.c b/source/main/wifi_config.c
index e89e87b6..d95a4528 100644
--- a/source/main/wifi_config.c
+++ b/source/main/wifi_config.c
@@ -27,7 +27,6 @@ limitations under the License.
#include "esp_check.h"
#include "esp_log.h"
#include "usb/usb_host.h"
-#include "driver/i2c.h"
#include "nvs_flash.h"
#include "esp_vfs.h"
#include "esp_vfs_fat.h"
@@ -229,7 +228,7 @@ static void wifi_send_ws_async(const char* payload)
*****************************************************************************/
static uint8_t process_wifi_command(tWiFiMessage* message)
{
- ESP_LOGI(TAG, "command %d", message->Event);
+ //debug ESP_LOGI(TAG, "command %d", message->Event);
// check what we got
switch (message->Event)
@@ -244,6 +243,9 @@ static uint8_t process_wifi_command(tWiFiMessage* message)
{
// save preset details
memcpy((void*)pWebConfig->PresetNames[message->Value], (void*)message->Text, MAX_PRESET_NAME_LENGTH - 1);
+
+ // debug
+ //ESP_LOGE(TAG, "Preset sync index %d name, %s", message->Value, pWebConfig->PresetNames[message->Value]);
} break;
case EVENT_SYNC_PRESET:
@@ -373,6 +375,8 @@ static void wifi_build_params_json(void)
{
case AMP_MODELLER_TONEX_ONE: // fallthrough
case AMP_MODELLER_TONEX: // fallthrough
+ case AMP_MODELLER_TONEX_ONE_PLUS: // fallthrough
+ case AMP_MODELLER_TONEX_PLUG:
default:
{
// send Tonex params
@@ -2032,10 +2036,13 @@ static void wifi_event_handler(void* arg, esp_event_base_t event_base, int32_t e
*****************************************************************************/
static void wifi_init_sta(void)
{
+ esp_netif_t* sta_netif;
+ char host_name[MAX_MDNS_NAME];
+
ESP_ERROR_CHECK(esp_netif_init());
ESP_ERROR_CHECK(esp_event_loop_create_default());
- esp_netif_create_default_wifi_sta();
+ sta_netif = esp_netif_create_default_wifi_sta();
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
ESP_ERROR_CHECK(esp_wifi_init(&cfg));
@@ -2060,6 +2067,7 @@ static void wifi_init_sta(void)
// However these modes are deprecated and not advisable to be used. Incase your Access point
// doesn't support WPA2, these mode can be enabled by commenting below line
.threshold.authmode = WIFI_AUTH_WPA2_PSK,
+ .scan_method = WIFI_ALL_CHANNEL_SCAN // thanks to user "ft972" for reporting this
},
};
@@ -2067,6 +2075,11 @@ static void wifi_init_sta(void)
control_get_config_item_string(CONFIG_ITEM_WIFI_SSID, pWebConfig->wifi_ssid);
control_get_config_item_string(CONFIG_ITEM_WIFI_PASSWORD, pWebConfig->wifi_password);
+ // use the configured mDNS name as the DHCP hostname as well, so the device
+ // is identifiable in the router instead of appearing as "espressif"
+ control_get_config_item_string(CONFIG_ITEM_MDNS_NAME, host_name);
+ esp_netif_set_hostname(sta_netif, host_name);
+
// set SSID and password
strcpy((char*)wifi_config.sta.ssid, pWebConfig->wifi_ssid);
strcpy((char*)wifi_config.sta.password, pWebConfig->wifi_password);
@@ -2099,7 +2112,6 @@ static void wifi_init_sta(void)
{
ESP_LOGE(TAG, "UNEXPECTED EVENT");
}
- vEventGroupDelete(s_wifi_event_group);
}
/****************************************************************************
diff --git a/ui_design_480x320land/Tonex_Controller_480_320.eez-project b/ui_design_480x320land/Tonex_Controller_480_320.eez-project
index f22b3862..d9be962b 100644
--- a/ui_design_480x320land/Tonex_Controller_480_320.eez-project
+++ b/ui_design_480x320land/Tonex_Controller_480_320.eez-project
@@ -7,7 +7,7 @@
"objID": "fd434352-2277-c4a8-e87e-e96cfcbf2305",
"projectVersion": "v3",
"projectType": "lvgl",
- "lvglVersion": "8.3",
+ "lvglVersion": "8.4.0",
"extensions": [],
"imports": [],
"flowSupport": false,
@@ -20,7 +20,10 @@
"authorLink": "https://github.com/Builty/TonexOneController/tree/main",
"resourceFiles": [],
"hiddenWidgetLines": "dimmed",
- "dimmedLinesOpacity": "20"
+ "dimmedLinesOpacity": "20",
+ "embedBitmaps": true,
+ "embedFonts": true,
+ "cacheFonts": false
},
"build": {
"objID": "72794a43-a0fc-13c2-7eb5-67dd952141a4",
@@ -99,6 +102,7 @@
"fileSystemPath": "",
"lvglInclude": "lvgl.h",
"screensLifetimeSupport": false,
+ "useDockerDesktop": true,
"generateSourceCodeForEezFramework": false,
"compressFlowDefinition": false,
"executionQueueSize": 1000,
@@ -117,6 +121,7 @@
"components": [],
"connectionLines": [],
"localVariables": [],
+ "componentGroups": [],
"userProperties": [],
"name": "NextClicked",
"description": "Next button press handler",
@@ -127,6 +132,7 @@
"components": [],
"connectionLines": [],
"localVariables": [],
+ "componentGroups": [],
"userProperties": [],
"name": "PreviousClicked",
"implementationType": "native"
@@ -136,6 +142,7 @@
"components": [],
"connectionLines": [],
"localVariables": [],
+ "componentGroups": [],
"userProperties": [],
"name": "AmpSkinNext",
"implementationType": "native"
@@ -145,6 +152,7 @@
"components": [],
"connectionLines": [],
"localVariables": [],
+ "componentGroups": [],
"userProperties": [],
"name": "AmpSkinPrevious",
"implementationType": "native"
@@ -154,6 +162,7 @@
"components": [],
"connectionLines": [],
"localVariables": [],
+ "componentGroups": [],
"userProperties": [],
"name": "ParameterChanged",
"implementationType": "native"
@@ -163,6 +172,7 @@
"components": [],
"connectionLines": [],
"localVariables": [],
+ "componentGroups": [],
"userProperties": [],
"name": "CloseSettingsPage"
},
@@ -171,6 +181,7 @@
"components": [],
"connectionLines": [],
"localVariables": [],
+ "componentGroups": [],
"userProperties": [],
"name": "ShowSettingsPage"
},
@@ -179,6 +190,7 @@
"components": [],
"connectionLines": [],
"localVariables": [],
+ "componentGroups": [],
"userProperties": [],
"name": "EnableSkinEdit"
},
@@ -187,6 +199,7 @@
"components": [],
"connectionLines": [],
"localVariables": [],
+ "componentGroups": [],
"userProperties": [],
"name": "SaveSkinEdit"
},
@@ -195,6 +208,7 @@
"components": [],
"connectionLines": [],
"localVariables": [],
+ "componentGroups": [],
"userProperties": [],
"name": "KeyboardOK"
},
@@ -203,6 +217,7 @@
"components": [],
"connectionLines": [],
"localVariables": [],
+ "componentGroups": [],
"userProperties": [],
"name": "PresetDescriptionPressed"
},
@@ -211,6 +226,7 @@
"components": [],
"connectionLines": [],
"localVariables": [],
+ "componentGroups": [],
"userProperties": [],
"name": "EffectIconClicked"
},
@@ -219,6 +235,7 @@
"components": [],
"connectionLines": [],
"localVariables": [],
+ "componentGroups": [],
"userProperties": [],
"name": "Gesture"
},
@@ -227,6 +244,7 @@
"components": [],
"connectionLines": [],
"localVariables": [],
+ "componentGroups": [],
"userProperties": [],
"name": "ValueKeyboardOK"
},
@@ -235,8 +253,36 @@
"components": [],
"connectionLines": [],
"localVariables": [],
+ "componentGroups": [],
"userProperties": [],
"name": "ValueClicked"
+ },
+ {
+ "objID": "dae9d716-343b-4778-86ae-3e33d7345672",
+ "components": [],
+ "connectionLines": [],
+ "localVariables": [],
+ "componentGroups": [],
+ "userProperties": [],
+ "name": "TunerClose"
+ },
+ {
+ "objID": "5db3159a-6f0c-4de9-9773-02376f8318a0",
+ "components": [],
+ "connectionLines": [],
+ "localVariables": [],
+ "componentGroups": [],
+ "userProperties": [],
+ "name": "TunerPressed"
+ },
+ {
+ "objID": "cd72da0d-1ba3-452b-9ef9-f7d14f86ce62",
+ "components": [],
+ "connectionLines": [],
+ "localVariables": [],
+ "componentGroups": [],
+ "userProperties": [],
+ "name": "SliderEvent"
}
],
"userPages": [
@@ -364,7 +410,8 @@
"pivotY": 0,
"zoom": 192,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
},
{
"objID": "9b4cc475-fd14-452f-b60b-31047100feaa",
@@ -463,7 +510,8 @@
"pivotY": 0,
"zoom": 192,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
},
{
"objID": "9366fa7e-f062-410e-9ca6-c96b75d2e595",
@@ -509,7 +557,8 @@
"pivotY": 0,
"zoom": 192,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
},
{
"objID": "31b55091-7bb9-4e42-fb34-f4c1c67ad70d",
@@ -555,7 +604,8 @@
"pivotY": 0,
"zoom": 192,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
},
{
"objID": "3330c110-9659-4ca5-b11a-47b67473744f",
@@ -603,7 +653,8 @@
"pivotY": 0,
"zoom": 192,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
},
{
"objID": "9fd826fe-c690-416b-be55-75d76786a05c",
@@ -651,7 +702,8 @@
"pivotY": 0,
"zoom": 192,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
},
{
"objID": "d0d818da-037c-4a36-bed4-dfbe053713f4",
@@ -699,7 +751,8 @@
"pivotY": 0,
"zoom": 192,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
}
],
"widgetFlags": "CLICK_FOCUSABLE|GESTURE_BUBBLE|PRESS_LOCK|SCROLL_CHAIN_HOR|SCROLL_CHAIN_VER|SCROLL_ELASTIC|SCROLL_MOMENTUM|SCROLL_WITH_ARROW|SNAPPABLE",
@@ -865,7 +918,8 @@
"pivotY": 0,
"zoom": 192,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
}
],
"widgetFlags": "CLICK_FOCUSABLE|GESTURE_BUBBLE|PRESS_LOCK|SCROLL_CHAIN_HOR|SCROLL_CHAIN_VER|SCROLL_ELASTIC|SCROLL_MOMENTUM|SCROLL_WITH_ARROW|SNAPPABLE",
@@ -1219,6 +1273,65 @@
"acceptedCharacters": "",
"maxTextLength": 31
},
+ {
+ "objID": "b1695275-684b-45cc-f45d-f273a96847eb",
+ "type": "LVGLImageWidget",
+ "left": 417,
+ "top": 196,
+ "width": 45,
+ "height": 46,
+ "customInputs": [],
+ "customOutputs": [],
+ "style": {
+ "objID": "dace928e-0e25-4c40-c301-282a499a4f02",
+ "useStyle": "default",
+ "conditionalStyles": [],
+ "childStyles": []
+ },
+ "timeline": [],
+ "eventHandlers": [
+ {
+ "objID": "c49614e7-52e5-44b2-810d-f2720708f248",
+ "eventName": "CLICKED",
+ "handlerType": "action",
+ "action": "TunerPressed",
+ "userData": 0
+ }
+ ],
+ "identifier": "ui_tuner_button",
+ "leftUnit": "px",
+ "topUnit": "px",
+ "widthUnit": "content",
+ "heightUnit": "content",
+ "children": [],
+ "widgetFlags": "ADV_HITTEST|CLICK_FOCUSABLE|GESTURE_BUBBLE|PRESS_LOCK|SCROLLABLE|SCROLL_CHAIN_HOR|SCROLL_CHAIN_VER|SCROLL_ELASTIC|SCROLL_MOMENTUM|SCROLL_WITH_ARROW|SNAPPABLE",
+ "hiddenFlag": true,
+ "hiddenFlagType": "literal",
+ "clickableFlagType": "literal",
+ "flagScrollbarMode": "",
+ "flagScrollDirection": "",
+ "scrollSnapX": "",
+ "scrollSnapY": "",
+ "checkedStateType": "literal",
+ "disabledStateType": "literal",
+ "states": "",
+ "localStyles": {
+ "objID": "7146b608-bccd-4020-a4aa-a176ad8370c2"
+ },
+ "group": "",
+ "groupIndex": 0,
+ "image": "tuner",
+ "setPivot": false,
+ "pivotX": 0,
+ "pivotY": 0,
+ "zoom": 256,
+ "angle": 0,
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL",
+ "value": 0,
+ "valueType": "literal",
+ "previewValue": 0
+ },
{
"objID": "c5acbd04-2a91-4da0-a470-cec66a14bdc7",
"type": "LVGLPanelWidget",
@@ -1297,7 +1410,8 @@
"pivotY": 0,
"zoom": 240,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
},
{
"objID": "2172b98c-7608-4fa7-8a68-a46d5734430c",
@@ -1360,7 +1474,8 @@
"pivotY": 0,
"zoom": 250,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
},
{
"objID": "9807ab9f-0fd5-4881-a58c-5c324e9296a2",
@@ -1423,7 +1538,8 @@
"pivotY": 0,
"zoom": 250,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
},
{
"objID": "1d8e1ffc-0e03-4477-9e44-f55b79bd47bc",
@@ -1486,7 +1602,8 @@
"pivotY": 0,
"zoom": 250,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
},
{
"objID": "c68acabf-e17e-4cdc-e977-5cb2b8ea418f",
@@ -1549,7 +1666,8 @@
"pivotY": 0,
"zoom": 250,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
},
{
"objID": "a23e4bcf-d00d-4bed-8315-9430fdf6b9b5",
@@ -1612,7 +1730,8 @@
"pivotY": 0,
"zoom": 250,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
},
{
"objID": "9dcbbf14-fa95-4049-fe1e-6bdc4a0734b3",
@@ -1675,7 +1794,8 @@
"pivotY": 0,
"zoom": 250,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
},
{
"objID": "9569a6e5-71b0-490d-9a33-149e31d106bc",
@@ -1738,7 +1858,8 @@
"pivotY": 0,
"zoom": 250,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
},
{
"objID": "58dbbe30-3f2f-4ef4-d843-a2027c33f59e",
@@ -1801,7 +1922,8 @@
"pivotY": 0,
"zoom": 250,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
}
],
"widgetFlags": "CLICK_FOCUSABLE|GESTURE_BUBBLE|PRESS_LOCK|SCROLL_CHAIN_HOR|SCROLL_CHAIN_VER|SCROLL_ELASTIC|SCROLL_MOMENTUM|SCROLL_WITH_ARROW|SNAPPABLE",
@@ -1914,7 +2036,8 @@
"pivotY": 0,
"zoom": 200,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
},
{
"objID": "c2c8ec8f-9a92-46c5-cf75-28151ce076d1",
@@ -1977,7 +2100,8 @@
"pivotY": 0,
"zoom": 200,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
},
{
"objID": "15e672e4-961e-49b0-f865-fb8c80107aca",
@@ -2040,7 +2164,8 @@
"pivotY": 0,
"zoom": 200,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
},
{
"objID": "09eaa933-28ee-444f-a89b-9e1eca7d48de",
@@ -2103,7 +2228,8 @@
"pivotY": 0,
"zoom": 200,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
},
{
"objID": "d28ae7ad-cbe5-4edd-e773-4539599b1070",
@@ -2166,7 +2292,8 @@
"pivotY": 0,
"zoom": 200,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
},
{
"objID": "3d6f8a25-5304-4a4f-cfa2-a45e652ed3bf",
@@ -2229,7 +2356,8 @@
"pivotY": 0,
"zoom": 200,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
},
{
"objID": "e49c0875-4ffb-47e3-9dc5-436f392bd11a",
@@ -2293,7 +2421,8 @@
"pivotY": 0,
"zoom": 200,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
},
{
"objID": "f11361fb-4bd5-4539-9590-df8ffb0c5843",
@@ -2356,7 +2485,8 @@
"pivotY": 0,
"zoom": 200,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
},
{
"objID": "4b6a4d40-a574-40bc-8768-916e9f61f953",
@@ -2419,7 +2549,8 @@
"pivotY": 0,
"zoom": 200,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
},
{
"objID": "51617ced-ad02-4a8c-f734-712c263c3a20",
@@ -2482,7 +2613,8 @@
"pivotY": 0,
"zoom": 200,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
},
{
"objID": "3aae370e-65ce-4865-c1c2-64777e2808f8",
@@ -2538,7 +2670,8 @@
"pivotY": 0,
"zoom": 220,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
}
],
"widgetFlags": "CLICK_FOCUSABLE|GESTURE_BUBBLE|PRESS_LOCK|SCROLL_CHAIN_HOR|SCROLL_CHAIN_VER|SCROLL_ELASTIC|SCROLL_MOMENTUM|SCROLL_WITH_ARROW|SNAPPABLE",
@@ -2622,7 +2755,8 @@
"pivotY": 0,
"zoom": 192,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
},
{
"objID": "58bfa162-b377-44c6-97b3-21456f87aed3",
@@ -2679,7 +2813,8 @@
"pivotY": 0,
"zoom": 192,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
},
{
"objID": "e1c9173a-62a2-4cbe-dd94-6265baa09b9f",
@@ -2713,7 +2848,7 @@
"widthUnit": "px",
"heightUnit": "px",
"children": [],
- "widgetFlags": "GESTURE_BUBBLE|PRESS_LOCK|SCROLL_CHAIN_HOR|SCROLL_CHAIN_VER|SCROLL_ELASTIC|SCROLL_MOMENTUM|SCROLL_WITH_ARROW|SNAPPABLE",
+ "widgetFlags": "PRESS_LOCK|SCROLL_CHAIN_HOR|SCROLL_CHAIN_VER|SCROLL_ELASTIC|SCROLL_MOMENTUM|SCROLL_WITH_ARROW|SNAPPABLE",
"hiddenFlag": true,
"hiddenFlagType": "literal",
"clickableFlag": true,
@@ -2796,7 +2931,8 @@
"pivotY": 0,
"zoom": 350,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
}
],
"widgetFlags": "CLICK_FOCUSABLE|PRESS_LOCK|SCROLL_CHAIN_HOR|SCROLL_CHAIN_VER|SCROLL_ELASTIC|SCROLL_MOMENTUM|SCROLL_WITH_ARROW|SNAPPABLE",
@@ -2839,6 +2975,7 @@
],
"connectionLines": [],
"localVariables": [],
+ "componentGroups": [],
"userProperties": [],
"name": "Screen1",
"left": 0,
@@ -3294,7 +3431,14 @@
"objID": "b655d5c6-75ac-42fd-e546-e64dfe8c3f39",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "bee03042-dab6-475e-806e-4ebef7021956",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -3483,7 +3627,14 @@
"objID": "1b170528-e5e2-486c-c123-5a35ad21d65e",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "7260ad24-8d0c-4d8a-ada6-9f5c7af2af0f",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -3672,7 +3823,14 @@
"objID": "d79c6e57-36bf-437e-9a57-e4b710069fdd",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "44885f77-e815-4993-f6a9-7d6346ef6acf",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -4177,7 +4335,14 @@
"objID": "99a26f0c-1e98-4797-9de8-7a729167b8a4",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "8bc1802e-9efb-489b-b9ce-392622440415",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -4366,7 +4531,14 @@
"objID": "569f0244-78f8-4de8-b100-bb882d923b08",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "fc21cc89-8aeb-4652-d1d4-00b889494298",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -4555,7 +4727,14 @@
"objID": "8f9473f7-7b0b-454b-c1f9-8dc9826a186f",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "034da6d3-ddb9-49ca-cef1-ad40dd42c668",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -5100,7 +5279,14 @@
"objID": "84ffca43-1d98-4570-d04a-99055877fd24",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "018994e2-f6e3-4759-b096-6ea6b43fef3d",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -5289,7 +5475,14 @@
"objID": "25f4a152-1b04-4ed4-b77c-1b29fdd92f45",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "bc369ffc-dba7-4451-9769-83a95fa3febe",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -5478,7 +5671,14 @@
"objID": "b80b4e4d-11ab-441e-dd0e-24a5fc8a9801",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "e552c3c5-1c07-494d-bd81-49239c759cc4",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -5667,7 +5867,14 @@
"objID": "0a8af56c-06b2-4e82-dcdd-5df71d90b1f8",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "054403d3-c223-41bd-fe97-82c48678b509",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -6042,7 +6249,14 @@
"objID": "28936262-d38e-4e0f-9776-e0a96a55ef32",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "b71af0a9-54e3-4d89-bdb9-4ffe0e24972d",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -6231,7 +6445,14 @@
"objID": "4f5cea46-c408-460b-8569-122a0484b9d8",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "ea983dbb-75a0-45cc-f775-ea17ef6bc825",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -6420,7 +6641,14 @@
"objID": "a92937fd-ffed-46de-c867-6c4f7c439421",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "7eae8f39-a1ef-4140-d500-3f9b29a7e2c4",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -6609,7 +6837,14 @@
"objID": "a25705bf-a55d-4a2a-ecb0-6af6a13fcab5",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "fdca7822-f165-4063-f6e2-1eb4c1fb9131",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -7519,7 +7754,14 @@
"objID": "e7d75f6a-0b4a-45e2-8f11-5f4e8b02ea4b",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "a33b4d25-fe81-4866-c1a6-b443bc7f8a39",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -7708,7 +7950,14 @@
"objID": "8a15f096-039a-4457-ba16-795faaf56d50",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "162c7253-7f4e-414c-b170-40cfa9a4a760",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -7897,7 +8146,14 @@
"objID": "7083f18e-e118-4ea3-ddaa-3c1fa5316a28",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "73898f10-a9b2-43eb-d178-e479764b6eb8",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -8086,7 +8342,14 @@
"objID": "8c9aac32-35ef-4f1d-cbf6-8f40047f5592",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "2ba68d92-e474-48a1-f218-daa520ff376a",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -8995,7 +9258,14 @@
"objID": "5fbb2a0b-b3fd-4310-8551-107740dbbdaa",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "3fe80c25-5786-449d-816e-0544fc84cbde",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -9306,7 +9576,14 @@
"objID": "d1244ceb-b092-477d-81c6-1ea6daa49730",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "b9a6dfe0-183a-4c51-ded2-e1bab25e9950",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -9496,7 +9773,14 @@
"objID": "f1268c10-6357-4dd2-8661-1a2bdd21c14f",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "8e760448-5271-4d26-855c-638db430ed28",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -10161,7 +10445,14 @@
"objID": "de4feac3-f28e-42ae-d9a2-f0a2d6e2bc19",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "690806f5-c67f-46b7-d0db-9a457c251b80",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -10350,7 +10641,14 @@
"objID": "3c3b762e-7fa7-43b5-f0da-84cae2da4cf2",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "5d1ec159-c8e8-426c-ebc6-b5a18d86a902",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -10539,7 +10837,14 @@
"objID": "ba40fa01-7560-4ab5-97b6-80f57018ff99",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "41fd7c13-730b-4f6c-ecfe-c5e251492402",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -10728,7 +11033,14 @@
"objID": "d443cc19-70fe-4617-cefe-81d5ff9662fe",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "e724c641-8356-4e7f-b1d9-47028fa735b6",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -11152,23 +11464,23 @@
"groupIndex": 0
},
{
- "objID": "f3cd2b3a-ab5c-41af-9ee8-9bf93439752a",
+ "objID": "7b2ee996-9a53-4afc-e0d4-4d67aac2783c",
"type": "LVGLLabelWidget",
"left": 4,
"top": -72,
- "width": 44,
+ "width": 77,
"height": 21,
"customInputs": [],
"customOutputs": [],
"style": {
- "objID": "8ab6e34d-eb08-43f5-ad55-7cdfc564189b",
+ "objID": "35201d50-15a2-4247-aa06-0f63c9679de8",
"useStyle": "default",
"conditionalStyles": [],
"childStyles": []
},
"timeline": [],
"eventHandlers": [],
- "identifier": "ui_BPMLabel",
+ "identifier": "ui_DirectMonitorLabel",
"leftUnit": "px",
"topUnit": "px",
"widthUnit": "content",
@@ -11185,11 +11497,12 @@
"disabledStateType": "literal",
"states": "",
"localStyles": {
- "objID": "42ababce-136c-4da0-e86d-3bdf87963c46",
+ "objID": "51e731c0-d468-4557-a551-178a111af517",
"definition": {
"MAIN": {
"DEFAULT": {
"text_font": "MONTSERRAT_18",
+ "text_align": "AUTO",
"align": "LEFT_MID"
}
}
@@ -11197,22 +11510,22 @@
},
"group": "",
"groupIndex": 0,
- "text": "BPM",
+ "text": "Dir Mon",
"textType": "literal",
"longMode": "WRAP",
"recolor": false
},
{
- "objID": "60e94b33-a2a5-45bf-be50-0ad370b9c330",
- "type": "LVGLSliderWidget",
- "left": 113,
+ "objID": "cfbf41e5-f282-4289-97e8-cf00dafd5ddd",
+ "type": "LVGLSwitchWidget",
+ "left": 106,
"top": -72,
- "width": 290,
- "height": 15,
+ "width": 60,
+ "height": 24,
"customInputs": [],
"customOutputs": [],
"style": {
- "objID": "0ce0cf85-0012-4ea9-cc08-71c65f0ccc00",
+ "objID": "1788178b-d200-4255-ce6d-af4094087260",
"useStyle": "default",
"conditionalStyles": [],
"childStyles": []
@@ -11220,20 +11533,20 @@
"timeline": [],
"eventHandlers": [
{
- "objID": "c8ad1aaf-08f8-436e-df9f-311ac544cebd",
+ "objID": "fc91bcbf-9284-444a-b1ff-55433d571cfd",
"eventName": "RELEASED",
"handlerType": "action",
"action": "ParameterChanged",
"userData": 0
}
],
- "identifier": "ui_BPMSlider",
+ "identifier": "ui_DirectMonitorSwitch",
"leftUnit": "px",
"topUnit": "px",
"widthUnit": "px",
"heightUnit": "px",
"children": [],
- "widgetFlags": "CLICK_FOCUSABLE|GESTURE_BUBBLE|PRESS_LOCK|SCROLL_ELASTIC|SCROLL_MOMENTUM|SCROLL_WITH_ARROW|SNAPPABLE",
+ "widgetFlags": "CHECKABLE|CLICK_FOCUSABLE|GESTURE_BUBBLE|PRESS_LOCK|SCROLL_CHAIN_HOR|SCROLL_CHAIN_VER|SCROLL_ELASTIC|SCROLL_MOMENTUM|SCROLL_ON_FOCUS|SCROLL_WITH_ARROW|SNAPPABLE",
"hiddenFlagType": "literal",
"clickableFlag": true,
"clickableFlagType": "literal",
@@ -11245,33 +11558,162 @@
"disabledStateType": "literal",
"states": "",
"localStyles": {
- "objID": "c4e89c36-7c1a-4dd1-e698-1d7728ea2fe4",
+ "objID": "8cb599a7-c904-49c9-93a6-09812ee3f637",
"definition": {
"MAIN": {
"DEFAULT": {
- "align": "LEFT_MID",
- "bg_color": "424242"
- }
- },
- "INDICATOR": {
- "DEFAULT": {
- "bg_color": "513D2B"
+ "align": "LEFT_MID"
+ },
+ "CHECKED": {
+ "bg_color": "FB9230"
}
},
"KNOB": {
"DEFAULT": {
+ "bg_color": "674D35"
+ },
+ "CHECKED": {
"bg_color": "FB9230"
}
+ },
+ "INDICATOR": {
+ "CHECKED": {
+ "bg_color": "513D2B"
+ }
}
}
},
"group": "",
- "groupIndex": 0,
- "min": 40,
- "minType": "literal",
- "max": 240,
- "maxType": "literal",
- "mode": "NORMAL",
+ "groupIndex": 0
+ },
+ {
+ "objID": "f3cd2b3a-ab5c-41af-9ee8-9bf93439752a",
+ "type": "LVGLLabelWidget",
+ "left": 4,
+ "top": -34,
+ "width": 44,
+ "height": 21,
+ "customInputs": [],
+ "customOutputs": [],
+ "style": {
+ "objID": "8ab6e34d-eb08-43f5-ad55-7cdfc564189b",
+ "useStyle": "default",
+ "conditionalStyles": [],
+ "childStyles": []
+ },
+ "timeline": [],
+ "eventHandlers": [],
+ "identifier": "ui_BPMLabel",
+ "leftUnit": "px",
+ "topUnit": "px",
+ "widthUnit": "content",
+ "heightUnit": "content",
+ "children": [],
+ "widgetFlags": "CLICK_FOCUSABLE|GESTURE_BUBBLE|PRESS_LOCK|SCROLL_CHAIN_HOR|SCROLL_CHAIN_VER|SCROLL_ELASTIC|SCROLL_MOMENTUM|SCROLL_WITH_ARROW|SNAPPABLE",
+ "hiddenFlagType": "literal",
+ "clickableFlagType": "literal",
+ "flagScrollbarMode": "",
+ "flagScrollDirection": "",
+ "scrollSnapX": "",
+ "scrollSnapY": "",
+ "checkedStateType": "literal",
+ "disabledStateType": "literal",
+ "states": "",
+ "localStyles": {
+ "objID": "42ababce-136c-4da0-e86d-3bdf87963c46",
+ "definition": {
+ "MAIN": {
+ "DEFAULT": {
+ "text_font": "MONTSERRAT_18",
+ "align": "LEFT_MID"
+ }
+ }
+ }
+ },
+ "group": "",
+ "groupIndex": 0,
+ "text": "BPM",
+ "textType": "literal",
+ "longMode": "WRAP",
+ "recolor": false
+ },
+ {
+ "objID": "60e94b33-a2a5-45bf-be50-0ad370b9c330",
+ "type": "LVGLSliderWidget",
+ "left": 113,
+ "top": -34,
+ "width": 290,
+ "height": 15,
+ "customInputs": [],
+ "customOutputs": [],
+ "style": {
+ "objID": "0ce0cf85-0012-4ea9-cc08-71c65f0ccc00",
+ "useStyle": "default",
+ "conditionalStyles": [],
+ "childStyles": []
+ },
+ "timeline": [],
+ "eventHandlers": [
+ {
+ "objID": "c8ad1aaf-08f8-436e-df9f-311ac544cebd",
+ "eventName": "RELEASED",
+ "handlerType": "action",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "24ce254a-6e4d-447a-c5a7-d1bb7219f1da",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
+ "userData": 0
+ }
+ ],
+ "identifier": "ui_BPMSlider",
+ "leftUnit": "px",
+ "topUnit": "px",
+ "widthUnit": "px",
+ "heightUnit": "px",
+ "children": [],
+ "widgetFlags": "CLICK_FOCUSABLE|GESTURE_BUBBLE|PRESS_LOCK|SCROLL_ELASTIC|SCROLL_MOMENTUM|SCROLL_WITH_ARROW|SNAPPABLE",
+ "hiddenFlagType": "literal",
+ "clickableFlag": true,
+ "clickableFlagType": "literal",
+ "flagScrollbarMode": "",
+ "flagScrollDirection": "",
+ "scrollSnapX": "",
+ "scrollSnapY": "",
+ "checkedStateType": "literal",
+ "disabledStateType": "literal",
+ "states": "",
+ "localStyles": {
+ "objID": "c4e89c36-7c1a-4dd1-e698-1d7728ea2fe4",
+ "definition": {
+ "MAIN": {
+ "DEFAULT": {
+ "align": "LEFT_MID",
+ "bg_color": "424242"
+ }
+ },
+ "INDICATOR": {
+ "DEFAULT": {
+ "bg_color": "513D2B"
+ }
+ },
+ "KNOB": {
+ "DEFAULT": {
+ "bg_color": "FB9230"
+ }
+ }
+ }
+ },
+ "group": "",
+ "groupIndex": 0,
+ "min": 40,
+ "minType": "literal",
+ "max": 240,
+ "maxType": "literal",
+ "mode": "NORMAL",
"value": 60,
"valueType": "literal",
"previewValue": 25,
@@ -11284,7 +11726,7 @@
"objID": "af40537c-0f39-4ed4-85f2-7e97df0294fe",
"type": "LVGLLabelWidget",
"left": 417,
- "top": -72,
+ "top": -34,
"width": 60,
"height": 16,
"customInputs": [],
@@ -11344,7 +11786,7 @@
"objID": "aa64108c-2481-474d-b621-944ffd0558b3",
"type": "LVGLLabelWidget",
"left": 4,
- "top": -34,
+ "top": 4,
"width": 95,
"height": 21,
"customInputs": [],
@@ -11395,7 +11837,7 @@
"objID": "7cdae175-0941-4048-f00f-7d18d6234cc3",
"type": "LVGLSliderWidget",
"left": 113,
- "top": -34,
+ "top": 4,
"width": 290,
"height": 15,
"customInputs": [],
@@ -11412,7 +11854,14 @@
"objID": "415952ef-0b4a-4bd5-c1d2-4d78d5f3b2db",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "7df4da93-d96d-4f7d-c613-d48ef4036ce2",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -11473,7 +11922,7 @@
"objID": "5157dd93-2913-4dd4-e0d9-4e789eb983cf",
"type": "LVGLLabelWidget",
"left": 417,
- "top": -34,
+ "top": 4,
"width": 60,
"height": 16,
"customInputs": [],
@@ -11533,7 +11982,7 @@
"objID": "6d811ef7-af00-4030-f37b-de6cc1550e3e",
"type": "LVGLLabelWidget",
"left": 4,
- "top": 4,
+ "top": 42,
"width": 98,
"height": 21,
"customInputs": [],
@@ -11584,7 +12033,7 @@
"objID": "a1e6179d-e5bd-44fa-b15e-846ac621e1d3",
"type": "LVGLSliderWidget",
"left": 113,
- "top": 4,
+ "top": 42,
"width": 290,
"height": 15,
"customInputs": [],
@@ -11601,7 +12050,14 @@
"objID": "e4bcf9b4-c2c7-4466-c47f-0a438666ff0f",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "edb9513e-87cb-4d9b-b699-0fdff0462e52",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -11662,7 +12118,7 @@
"objID": "e3c8bf2c-c1b5-40b5-8f61-aa2feabc84cb",
"type": "LVGLLabelWidget",
"left": 417,
- "top": 4,
+ "top": 42,
"width": 60,
"height": 16,
"customInputs": [],
@@ -11722,7 +12178,7 @@
"objID": "97365649-298b-4356-821d-112d8c5527a1",
"type": "LVGLLabelWidget",
"left": 4,
- "top": 42,
+ "top": 80,
"width": 70,
"height": 21,
"customInputs": [],
@@ -11773,7 +12229,7 @@
"objID": "7029b0fa-71ae-4f3d-d22e-3d59f9ee7f3f",
"type": "LVGLSliderWidget",
"left": 113,
- "top": 42,
+ "top": 80,
"width": 290,
"height": 15,
"customInputs": [],
@@ -11790,7 +12246,14 @@
"objID": "6c527ab6-07ca-4dd6-8ccd-024a7dab5138",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "240b8e47-0a09-4fa2-828d-3ecbc67120fc",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -11851,7 +12314,7 @@
"objID": "9e0da4c7-5d3b-4939-fe8c-88a4086f29e5",
"type": "LVGLLabelWidget",
"left": 417,
- "top": 42,
+ "top": 80,
"width": 60,
"height": 16,
"customInputs": [],
@@ -11983,7 +12446,9 @@
"group": "",
"groupIndex": 0,
"tabviewPosition": "TOP",
- "tabviewSize": 60
+ "tabviewSize": 60,
+ "selectedTab": "0",
+ "selectedTabType": "literal"
},
{
"objID": "bae65739-be8c-4cf5-f502-b9b105d36067",
@@ -12038,7 +12503,8 @@
"pivotY": 0,
"zoom": 256,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
},
{
"objID": "36cd410c-608d-4c11-c5ed-8857757e3339",
@@ -12229,6 +12695,7 @@
],
"connectionLines": [],
"localVariables": [],
+ "componentGroups": [],
"userProperties": [],
"name": "Settings",
"left": 0,
@@ -12687,7 +13154,14 @@
"objID": "86ff09e7-97b5-4def-c088-cd1f5bc46505",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "ad5e96de-43dd-47eb-cf7d-658cb0d90c9c",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -12879,7 +13353,14 @@
"objID": "a938abdf-06fe-4954-dfc5-2962860b63bc",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "011b7768-d5f9-43ca-856e-9c3e8bab8d4d",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -13071,7 +13552,14 @@
"objID": "04c25a62-de94-48f3-964a-ee6ee65238dc",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "3a4f523e-02d6-469d-a203-5f2ccf626db3",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -13263,7 +13751,14 @@
"objID": "9fffe7d4-34f5-4ff9-bb13-36d2d06f34b3",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "146cfd39-9a9b-4c1b-a89a-ab666fda291a",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -13455,7 +13950,14 @@
"objID": "77855b13-9f22-4560-f2f0-0fbd15b7d78e",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "668cdfec-3cca-4e78-84b0-ed18acdb641b",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -13969,7 +14471,14 @@
"objID": "095f079d-ac65-47af-d0f6-5d10751382f4",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "122b9ca6-c563-4e87-f5d8-d5eb83b16ed8",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -14161,7 +14670,14 @@
"objID": "b1198f8b-cc0d-4bb3-9d75-749a49306d06",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "ShowSettingsPage",
+ "userData": 0
+ },
+ {
+ "objID": "366043ab-5dba-44a2-f362-5cbe63484ac8",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -14353,7 +14869,14 @@
"objID": "f219549a-d90f-4a06-83da-ab2fe561571b",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "792bd421-2cdf-4217-9ce9-8d59f32b6fb1",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -14545,7 +15068,14 @@
"objID": "996b18ca-0d0b-4a36-d57c-90561a567482",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "c11714f9-4298-4323-b1e4-e4d7e9812a07",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -14737,7 +15267,14 @@
"objID": "7674b886-cfc1-4b5d-cae1-fb04102ab6a3",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "39da6ba5-34e1-4e36-a39e-b0bf6b889011",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -15241,7 +15778,14 @@
"objID": "0b07f131-e8dd-4f90-cb65-8e9b7bcf1d6e",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "2a17304e-547b-49f6-8edf-fffea8e9a3eb",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -15433,7 +15977,14 @@
"objID": "c66d5c87-9d3c-4811-9329-fcc888885427",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "43dd03df-72cc-4924-888a-47d67c1594bc",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -15625,7 +16176,14 @@
"objID": "24932760-50c0-4dd5-d938-061dc230dddf",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "eba210ce-1126-4717-ff14-fa34a7f864c2",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -15817,7 +16375,14 @@
"objID": "1f2e5b8e-be2b-4c0a-d929-ff65c8b15e25",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "c15ed5d5-582c-4a48-c50f-8b3360b89847",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -16009,7 +16574,14 @@
"objID": "f507f01b-28a1-4947-cbe8-e1cd27a7ac1a",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "d8d19fa5-7515-48e3-bdc9-d93e9bbcc396",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -16513,7 +17085,14 @@
"objID": "54a37ce0-8b71-4647-b9d2-e95593d4c9b6",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "feb24140-8bd2-48c6-8a67-5e6b735a01e3",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -16705,7 +17284,14 @@
"objID": "42e293be-4792-4945-9330-7d903eac926a",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "5ef11ce1-f563-43eb-fdc0-ad5757bdb18f",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -16897,7 +17483,14 @@
"objID": "bbdbc8ad-842d-49ae-bb5e-47f23cf55ebf",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "8ad08b17-166c-4c39-bf85-988be215a42b",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -17089,7 +17682,14 @@
"objID": "61513737-9dce-4d1a-a92d-42f98efd6e61",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "4f4d808e-a1c6-4c91-edfd-31e72e7f9d23",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -17281,7 +17881,14 @@
"objID": "30a5bf27-28a5-475d-977e-ba3e52c656b7",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "af8d26e9-6f69-44c3-9598-000c75670cea",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -17785,7 +18392,14 @@
"objID": "bf979fc3-e2d8-4056-c279-10e524e8f988",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "1c270863-fb5c-42a0-8c30-85c75282976f",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -17977,7 +18591,14 @@
"objID": "aeb27b24-b409-4074-f196-6a1014bb5b93",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "12ebd29c-1806-4888-abc3-074c6f8174b9",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -18169,7 +18790,14 @@
"objID": "15963c48-8b11-4b4d-c798-d2bd8e60dfa7",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "f72eb3d9-ed08-403e-87ee-a099536b975f",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -18361,7 +18989,14 @@
"objID": "e21529f9-d973-4648-affa-951b4410e68b",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "4a80796f-aac7-4b27-d05b-26d8a9e2b6ff",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -18553,7 +19188,14 @@
"objID": "c21de9cc-81b9-41c7-d561-e2e1306a5949",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "1d6566a9-7e45-43c8-c4d3-586a4136b85e",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -19057,7 +19699,14 @@
"objID": "c9a850ac-2a79-4fbb-c1d1-5ecacdaa1a51",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "3a27f1fc-9a11-486c-b7c9-b3b3ffab6814",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -19249,7 +19898,14 @@
"objID": "f7c01ade-c1bb-4cae-93c0-a99cc10cf827",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "a6af2351-d5c9-4a15-e377-1ad4acb704c1",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -19441,7 +20097,14 @@
"objID": "d50284c3-55ae-445a-fde8-442420daa930",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "568ba94f-c18f-4e25-b5b0-f9cfcb1378ae",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -19633,7 +20296,14 @@
"objID": "b9c47dc4-7f27-4991-81b8-310795fdb99b",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "d634ba8d-e5a6-413f-f7fb-2062d1b58e70",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -19825,7 +20495,14 @@
"objID": "74993f5c-654a-4226-a72c-fcea6bc7510f",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "eb933066-ed46-496e-df64-7ae31f983cd9",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -20329,7 +21006,14 @@
"objID": "30bd60e2-9a1e-403c-a589-b7c5b68f4e01",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "11e8b0d5-8267-478d-d5ee-a6aa9b580ea1",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -20521,7 +21205,14 @@
"objID": "5913b93f-6d44-48c4-eb97-2028e7277884",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "a2c35798-edff-4559-e7bd-c9780f7e22fb",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -20713,7 +21404,14 @@
"objID": "fc3e2fc1-a622-471f-8335-ce6d8102b8e6",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "328cbf6c-5919-423f-92f4-df68c6c15224",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -20905,7 +21603,14 @@
"objID": "9fb46d51-e9fc-4a70-84be-ed17b893854f",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "c4c80cf5-3317-418f-9c1f-d165cdcd07c1",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -21097,7 +21802,14 @@
"objID": "f875c4f7-b695-4551-b38c-1fe244b0b183",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "707211ba-b85c-4133-8404-2a0961a56c5b",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -21601,7 +22313,14 @@
"objID": "c5e9e4db-1930-48e7-b55f-15d26c6eb0f9",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "5cbac725-1b69-4bb4-cc02-64cffeeb1cbf",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -21793,7 +22512,14 @@
"objID": "a9417b05-14b4-4c5c-ef25-a452195db538",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "b146026b-3f6e-42d2-b7f0-f2bc28d74efb",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -21985,7 +22711,14 @@
"objID": "0c79e159-76c1-467e-b8a5-8d283163b2a7",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "56905863-9b1b-4055-8a24-fda148fc39d2",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -22177,7 +22910,14 @@
"objID": "d1046a00-ddfd-488c-bdea-53f6087f1769",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "7dc1ccb0-3481-4228-83ca-06e545ccea35",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -22369,7 +23109,14 @@
"objID": "f976bd0f-47e3-4df0-9595-054982a8a404",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "e876515f-d8fd-4a4b-ff3d-8a3ad57b4c29",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -22873,7 +23620,14 @@
"objID": "a20c82ab-bd86-48ff-cb4e-0c652e33ce36",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "30af1779-93cb-484f-a6fb-e7ae86dce72f",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -23065,7 +23819,14 @@
"objID": "aea01293-cf09-4e6e-ac1a-04139c1fb3dc",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "0679ddc7-bf38-4c9e-c33c-751aa71af6fb",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -23257,7 +24018,14 @@
"objID": "ae5172fd-060f-495e-f20a-e145be341529",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "577f5674-ce25-4e37-d170-76ce3bbe1f17",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -23449,7 +24217,14 @@
"objID": "4ce8b974-c468-4ba6-8b72-eade17528ee2",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "1ca56aad-521f-42c7-b625-c936a329ab92",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -23641,7 +24416,14 @@
"objID": "34b6a69d-2004-4929-8426-bc191a53130c",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "8527ce31-eca8-47ea-8cd4-34a88ab00d87",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -24145,7 +24927,14 @@
"objID": "0ee500f4-f806-4ab9-e0af-6f0fb6ef85bc",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "fc02cdd5-ce2f-4cfb-95ee-479efc982afc",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -24337,7 +25126,14 @@
"objID": "2e19a174-1a00-4797-87be-69f9e5fc9dfe",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "aecb16a0-e4db-45a1-a1f3-ad564b84ff56",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -24529,7 +25325,14 @@
"objID": "60f21270-4f27-43e3-e7db-ceacd0246d8a",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "dd97a7ba-2d89-4a8e-b917-5a886bc39af0",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -24721,7 +25524,14 @@
"objID": "d60a866b-6512-4bd6-a1f1-5f19e9ab24dd",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "eb0b689a-7ef1-418c-b8a7-fbcd281b1a83",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -24913,7 +25723,14 @@
"objID": "f0538888-3c2f-4506-b9c1-e9618567b9b0",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "ab83faad-0b78-4c82-c311-1fb17c0026bf",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -25286,7 +26103,14 @@
"objID": "96e651dd-466f-451d-ed5f-b4478f46daa7",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "1aa89cf9-e0cb-4b26-9bea-1cb3ab9a46c7",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -25478,7 +26302,14 @@
"objID": "ae161d3b-31f3-4c3e-cf46-6c49a0de97ff",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "687006a1-1e3f-4966-c5fe-dc6d96762ff4",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -25670,7 +26501,14 @@
"objID": "32e8d3c6-1489-40c7-f61a-70f7d2702259",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "7e775da6-1961-4b15-ef12-75b0e6c1f41b",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -25866,7 +26704,9 @@
"group": "",
"groupIndex": 0,
"tabviewPosition": "TOP",
- "tabviewSize": 52
+ "tabviewSize": 52,
+ "selectedTab": "0",
+ "selectedTabType": "literal"
},
{
"objID": "d2793565-3886-41e7-f9ca-9582d42a2fea",
@@ -25921,7 +26761,8 @@
"pivotY": 0,
"zoom": 256,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
},
{
"objID": "4706fbf0-422d-49e9-c46e-e882d02d5541",
@@ -26112,6 +26953,7 @@
],
"connectionLines": [],
"localVariables": [],
+ "componentGroups": [],
"userProperties": [],
"name": "ValSettings",
"left": 0,
@@ -26121,36 +26963,680 @@
"isUsedAsUserWidget": false,
"createAtStart": true,
"deleteOnScreenUnload": false
- }
- ],
- "userWidgets": [],
- "lvglStyles": {
- "objID": "a31bd004-35c5-b3fb-5c8b-78ea5c7693b8",
- "styles": [],
- "defaultStyles": {}
- },
- "lvglGroups": {
- "objID": "f2f79c21-8769-ed90-c624-7405d4136ec9",
- "groups": []
- },
- "fonts": [],
- "bitmaps": [
- {
- "objID": "cacba946-d32d-484f-e32d-81f201edb018",
- "name": "arrow_left",
- "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEQAAABGCAYAAAB12zK5AAAACXBIWXMAAAsTAAALEwEAmpwYAAAFymlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4xLWMwMDEgMTE2LmNhODJhZTQsIDIwMjQvMDIvMjItMjE6NTg6NDEgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCAyNC43IChXaW5kb3dzKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjQtMTAtMjBUMTQ6NTU6MjIrMTE6MDAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMjQtMTAtMjBUMTQ6NTU6MjIrMTE6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDI0LTEwLTIwVDE0OjU1OjIyKzExOjAwIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjQ0YjVjZDBlLTJlZTItZGU0Yy04YWY0LWRjNzk5YTc3ODQ5YyIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjk1ODY2N2Y2LWIyNTAtZmM0OS1iYjI0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",
- "bpp": 32,
- "alwaysBuild": false,
- "lvglBinaryOutputFormat": 3,
- "lvglDither": false
},
{
- "objID": "d8e2a441-f1a8-4e35-aa87-4e45f8a70435",
- "name": "arrow_right",
- "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEQAAABGCAYAAAB12zK5AAAACXBIWXMAAAsTAAALEwEAmpwYAAAFymlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4xLWMwMDEgMTE2LmNhODJhZTQsIDIwMjQvMDIvMjItMjE6NTg6NDEgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCAyNC43IChXaW5kb3dzKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjQtMTAtMjBUMTQ6NTQ6NTcrMTE6MDAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMjQtMTAtMjBUMTQ6NTQ6NTcrMTE6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDI0LTEwLTIwVDE0OjU0OjU3KzExOjAwIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmRlMzYzZGYyLTRjOWQtMzM0Ny04OTc5LWU3MzM0NDExNjM2YyIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjA5NzdhNzcyLTdjODEtYmU0Mi1hMDY5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",
- "bpp": 32,
- "alwaysBuild": false,
- "lvglBinaryOutputFormat": 3,
+ "objID": "db0e96bf-1ee4-49ee-aa90-425886251b1c",
+ "components": [
+ {
+ "objID": "1b8718f7-224b-4c75-ec22-14a90f4e4a34",
+ "type": "LVGLScreenWidget",
+ "left": 0,
+ "top": 0,
+ "width": 480,
+ "height": 320,
+ "customInputs": [],
+ "customOutputs": [],
+ "style": {
+ "objID": "365a92f2-a79e-4573-a000-83475da9e5d9",
+ "useStyle": "default",
+ "conditionalStyles": [],
+ "childStyles": []
+ },
+ "timeline": [],
+ "eventHandlers": [],
+ "leftUnit": "px",
+ "topUnit": "px",
+ "widthUnit": "px",
+ "heightUnit": "px",
+ "children": [
+ {
+ "objID": "d3376d59-bcd5-4ec0-d408-9a773d79b110",
+ "type": "LVGLContainerWidget",
+ "left": 0,
+ "top": 0,
+ "width": 480,
+ "height": 320,
+ "customInputs": [],
+ "customOutputs": [],
+ "style": {
+ "objID": "15cf38e3-baba-4887-bfca-9fbe3851bf74",
+ "useStyle": "default",
+ "conditionalStyles": [],
+ "childStyles": []
+ },
+ "timeline": [],
+ "eventHandlers": [],
+ "identifier": "ui_TunerTouchGestureContainer",
+ "leftUnit": "px",
+ "topUnit": "px",
+ "widthUnit": "px",
+ "heightUnit": "px",
+ "children": [
+ {
+ "objID": "e045cdc8-1cf7-4408-f66a-7de39e88e39a",
+ "type": "LVGLPanelWidget",
+ "left": 0,
+ "top": 0,
+ "width": 480,
+ "height": 39,
+ "customInputs": [],
+ "customOutputs": [],
+ "style": {
+ "objID": "efe3ad7f-96be-49c3-b02e-319875c55d3d",
+ "useStyle": "default",
+ "conditionalStyles": [],
+ "childStyles": []
+ },
+ "timeline": [],
+ "eventHandlers": [],
+ "identifier": "ui_TunerTopPanel",
+ "leftUnit": "px",
+ "topUnit": "px",
+ "widthUnit": "px",
+ "heightUnit": "px",
+ "children": [
+ {
+ "objID": "fee2579e-e85a-4161-d91d-71b3440b71dd",
+ "type": "LVGLLabelWidget",
+ "left": 119,
+ "top": -12,
+ "width": 209,
+ "height": 28,
+ "customInputs": [],
+ "customOutputs": [],
+ "style": {
+ "objID": "be95c385-5748-4f0f-853c-5a68de9931bb",
+ "useStyle": "default",
+ "conditionalStyles": [],
+ "childStyles": []
+ },
+ "hiddenInEditor": false,
+ "timeline": [],
+ "eventHandlers": [],
+ "identifier": "ui_TunerProjectHeadingLabel",
+ "leftUnit": "px",
+ "topUnit": "px",
+ "widthUnit": "px",
+ "heightUnit": "px",
+ "children": [],
+ "widgetFlags": "CLICK_FOCUSABLE|GESTURE_BUBBLE|PRESS_LOCK|SNAPPABLE",
+ "hiddenFlagType": "literal",
+ "clickableFlagType": "literal",
+ "flagScrollbarMode": "",
+ "flagScrollDirection": "",
+ "scrollSnapX": "",
+ "scrollSnapY": "",
+ "checkedStateType": "literal",
+ "disabledStateType": "literal",
+ "states": "",
+ "localStyles": {
+ "objID": "57604824-74b3-41de-8fdc-08321ea5c840",
+ "definition": {
+ "MAIN": {
+ "DEFAULT": {
+ "text_color": "#FFFFFF",
+ "text_font": "MONTSERRAT_22",
+ "text_align": "CENTER"
+ }
+ }
+ }
+ },
+ "group": "",
+ "groupIndex": 0,
+ "text": "TONEX Controller",
+ "textType": "literal",
+ "longMode": "WRAP",
+ "recolor": false
+ },
+ {
+ "objID": "2436cb11-8272-4f6a-9f17-09bd74d962a6",
+ "type": "LVGLImageWidget",
+ "left": -30,
+ "top": -22,
+ "width": 132,
+ "height": 46,
+ "customInputs": [],
+ "customOutputs": [],
+ "style": {
+ "objID": "2ae3e06e-30f6-461a-f130-0bf4932685d3",
+ "useStyle": "default",
+ "conditionalStyles": [],
+ "childStyles": []
+ },
+ "timeline": [],
+ "eventHandlers": [],
+ "identifier": "ui_TunerLogo",
+ "leftUnit": "px",
+ "topUnit": "px",
+ "widthUnit": "content",
+ "heightUnit": "content",
+ "children": [],
+ "widgetFlags": "ADV_HITTEST|CLICK_FOCUSABLE|GESTURE_BUBBLE|PRESS_LOCK|SCROLLABLE|SCROLL_CHAIN_HOR|SCROLL_CHAIN_VER|SCROLL_ELASTIC|SCROLL_MOMENTUM|SCROLL_WITH_ARROW|SNAPPABLE",
+ "hiddenFlagType": "literal",
+ "clickableFlagType": "literal",
+ "flagScrollbarMode": "",
+ "flagScrollDirection": "",
+ "scrollSnapX": "",
+ "scrollSnapY": "",
+ "checkedStateType": "literal",
+ "disabledStateType": "literal",
+ "states": "",
+ "localStyles": {
+ "objID": "5f68afca-29a3-42cf-c925-01ba7f9e2267"
+ },
+ "group": "",
+ "groupIndex": 0,
+ "image": "smythbuilt",
+ "setPivot": false,
+ "pivotX": 0,
+ "pivotY": 0,
+ "zoom": 192,
+ "angle": 0,
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
+ }
+ ],
+ "widgetFlags": "CLICK_FOCUSABLE|GESTURE_BUBBLE|PRESS_LOCK|SCROLL_CHAIN_HOR|SCROLL_CHAIN_VER|SCROLL_ELASTIC|SCROLL_MOMENTUM|SCROLL_WITH_ARROW|SNAPPABLE",
+ "hiddenFlagType": "literal",
+ "clickableFlag": true,
+ "clickableFlagType": "literal",
+ "flagScrollbarMode": "",
+ "flagScrollDirection": "",
+ "scrollSnapX": "",
+ "scrollSnapY": "",
+ "checkedStateType": "literal",
+ "disabledStateType": "literal",
+ "states": "",
+ "localStyles": {
+ "objID": "a6f78cba-c802-4bb9-c6af-9842d0b79fba",
+ "definition": {
+ "MAIN": {
+ "DEFAULT": {
+ "bg_color": "#2A2A2A",
+ "radius": 0
+ }
+ }
+ }
+ },
+ "group": "",
+ "groupIndex": 0
+ },
+ {
+ "objID": "097d4691-0efd-4677-8351-62ab3fc0f814",
+ "type": "LVGLLabelWidget",
+ "left": 3,
+ "top": 42,
+ "width": 474,
+ "height": 38,
+ "customInputs": [],
+ "customOutputs": [],
+ "style": {
+ "objID": "5a00af59-7f59-41f0-e468-48e13651a2e0",
+ "useStyle": "default",
+ "conditionalStyles": [],
+ "childStyles": []
+ },
+ "timeline": [],
+ "eventHandlers": [
+ {
+ "objID": "f6331a7e-62c1-46c7-851d-b54b1c43952a",
+ "eventName": "LONG_PRESSED",
+ "handlerType": "action",
+ "action": "EnableSkinEdit",
+ "userData": 0
+ }
+ ],
+ "identifier": "ui_TunerHeading",
+ "leftUnit": "px",
+ "topUnit": "px",
+ "widthUnit": "px",
+ "heightUnit": "px",
+ "children": [],
+ "widgetFlags": "CLICK_FOCUSABLE|GESTURE_BUBBLE|PRESS_LOCK|SCROLLABLE|SCROLL_CHAIN_HOR|SCROLL_CHAIN_VER|SCROLL_ELASTIC|SCROLL_MOMENTUM|SCROLL_WITH_ARROW|SNAPPABLE",
+ "hiddenFlagType": "literal",
+ "clickableFlag": true,
+ "clickableFlagType": "literal",
+ "flagScrollbarMode": "",
+ "flagScrollDirection": "",
+ "scrollSnapX": "",
+ "scrollSnapY": "",
+ "checkedStateType": "literal",
+ "disabledStateType": "literal",
+ "states": "",
+ "localStyles": {
+ "objID": "72cf5fd3-b135-4367-c6b5-c2388d9c5a27",
+ "definition": {
+ "MAIN": {
+ "SCROLLED": {
+ "text_font": "MONTSERRAT_14"
+ },
+ "DEFAULT": {
+ "text_color": "D1A60C",
+ "text_font": "MONTSERRAT_32",
+ "text_align": "CENTER"
+ }
+ }
+ }
+ },
+ "group": "",
+ "groupIndex": 0,
+ "text": "Tuner",
+ "textType": "literal",
+ "longMode": "DOT",
+ "recolor": false
+ },
+ {
+ "objID": "570b1fed-1d04-4506-87ab-fa92ea9613e4",
+ "type": "LVGLArcWidget",
+ "left": 120,
+ "top": 90,
+ "width": 240,
+ "height": 230,
+ "customInputs": [],
+ "customOutputs": [],
+ "style": {
+ "objID": "899ef91d-a8a8-4d7f-ef76-c27d619fd7fb",
+ "useStyle": "default",
+ "conditionalStyles": [],
+ "childStyles": []
+ },
+ "timeline": [],
+ "eventHandlers": [],
+ "identifier": "ui_TunerArc",
+ "leftUnit": "px",
+ "topUnit": "px",
+ "widthUnit": "px",
+ "heightUnit": "px",
+ "children": [],
+ "widgetFlags": "CLICK_FOCUSABLE|GESTURE_BUBBLE|PRESS_LOCK|SCROLL_ELASTIC|SCROLL_MOMENTUM|SCROLL_WITH_ARROW|SNAPPABLE",
+ "hiddenFlagType": "literal",
+ "clickableFlag": true,
+ "clickableFlagType": "literal",
+ "flagScrollbarMode": "",
+ "flagScrollDirection": "",
+ "scrollSnapX": "",
+ "scrollSnapY": "",
+ "checkedStateType": "literal",
+ "disabledStateType": "literal",
+ "states": "",
+ "localStyles": {
+ "objID": "4a601b36-dfce-41c0-fa45-e760b8eb3045",
+ "definition": {
+ "MAIN": {
+ "DEFAULT": {
+ "arc_width": 18
+ }
+ },
+ "KNOB": {
+ "DEFAULT": {
+ "bg_color": "#0cef1c"
+ }
+ },
+ "INDICATOR": {
+ "DEFAULT": {
+ "arc_color": "513D2B",
+ "arc_width": 18
+ }
+ }
+ }
+ },
+ "group": "",
+ "groupIndex": 0,
+ "useAngle": false,
+ "rangeMin": -50,
+ "rangeMinType": "literal",
+ "rangeMax": 50,
+ "rangeMaxType": "literal",
+ "value": 0,
+ "valueType": "literal",
+ "previewValue": "25",
+ "mode": "SYMMETRICAL",
+ "startAngle": 135,
+ "startAngleType": "literal",
+ "previewStartAngle": "135",
+ "endAngle": 45,
+ "endAngleType": "literal",
+ "previewEndAngle": "45",
+ "bgStartAngle": 135,
+ "bgStartAngleType": "literal",
+ "previewBgStartAngle": "135",
+ "bgEndAngle": 45,
+ "bgEndAngleType": "literal",
+ "previewBgEndAngle": "45",
+ "rotation": 0,
+ "rotationType": "literal",
+ "previewRotation": "0"
+ },
+ {
+ "objID": "dd2aa708-0703-431f-b9b9-808df20f731e",
+ "type": "LVGLLabelWidget",
+ "left": 190,
+ "top": 170,
+ "width": 100,
+ "height": 35,
+ "customInputs": [],
+ "customOutputs": [],
+ "style": {
+ "objID": "5e41cc5f-198d-4963-aa27-5a5221a3b2b0",
+ "useStyle": "default",
+ "conditionalStyles": [],
+ "childStyles": []
+ },
+ "timeline": [],
+ "eventHandlers": [],
+ "identifier": "ui_TunerNoteLabel",
+ "leftUnit": "px",
+ "topUnit": "px",
+ "widthUnit": "px",
+ "heightUnit": "content",
+ "children": [],
+ "widgetFlags": "CLICK_FOCUSABLE|GESTURE_BUBBLE|PRESS_LOCK|SCROLLABLE|SCROLL_CHAIN_HOR|SCROLL_CHAIN_VER|SCROLL_ELASTIC|SCROLL_MOMENTUM|SCROLL_WITH_ARROW|SNAPPABLE",
+ "hiddenFlagType": "literal",
+ "clickableFlagType": "literal",
+ "flagScrollbarMode": "",
+ "flagScrollDirection": "",
+ "scrollSnapX": "",
+ "scrollSnapY": "",
+ "checkedStateType": "literal",
+ "disabledStateType": "literal",
+ "states": "",
+ "localStyles": {
+ "objID": "e65839c5-c8c9-4fa1-e1a7-96d9121dd562",
+ "definition": {
+ "MAIN": {
+ "DEFAULT": {
+ "text_font": "MONTSERRAT_32",
+ "text_align": "CENTER"
+ }
+ }
+ }
+ },
+ "group": "",
+ "groupIndex": 0,
+ "text": "--",
+ "textType": "literal",
+ "longMode": "WRAP",
+ "recolor": false
+ },
+ {
+ "objID": "5daa4ce3-7268-4c42-aeaa-411e15b3f9cc",
+ "type": "LVGLLabelWidget",
+ "left": 12,
+ "top": 255,
+ "width": 92,
+ "height": 21,
+ "customInputs": [],
+ "customOutputs": [],
+ "style": {
+ "objID": "83f3b145-6123-40a5-b26e-65f00ca81c1f",
+ "useStyle": "default",
+ "conditionalStyles": [],
+ "childStyles": []
+ },
+ "timeline": [],
+ "eventHandlers": [],
+ "identifier": "ui_TunerReferenceHeadingLabel",
+ "leftUnit": "px",
+ "topUnit": "px",
+ "widthUnit": "content",
+ "heightUnit": "content",
+ "children": [],
+ "widgetFlags": "CLICK_FOCUSABLE|GESTURE_BUBBLE|PRESS_LOCK|SCROLLABLE|SCROLL_CHAIN_HOR|SCROLL_CHAIN_VER|SCROLL_ELASTIC|SCROLL_MOMENTUM|SCROLL_WITH_ARROW|SNAPPABLE",
+ "hiddenFlagType": "literal",
+ "clickableFlagType": "literal",
+ "flagScrollbarMode": "",
+ "flagScrollDirection": "",
+ "scrollSnapX": "",
+ "scrollSnapY": "",
+ "checkedStateType": "literal",
+ "disabledStateType": "literal",
+ "states": "",
+ "localStyles": {
+ "objID": "bc61ddaa-73c3-4879-fd0c-7f008c0f9ac7",
+ "definition": {
+ "MAIN": {
+ "DEFAULT": {
+ "text_font": "MONTSERRAT_18",
+ "text_color": "D1A60C"
+ }
+ }
+ }
+ },
+ "group": "",
+ "groupIndex": 0,
+ "text": "Reference",
+ "textType": "literal",
+ "longMode": "WRAP",
+ "recolor": false
+ },
+ {
+ "objID": "633105c5-792a-4a32-f2ed-1d66536a5109",
+ "type": "LVGLLabelWidget",
+ "left": 3,
+ "top": 276,
+ "width": 115,
+ "height": 35,
+ "customInputs": [],
+ "customOutputs": [],
+ "style": {
+ "objID": "613121b7-a5c9-4b6d-bfcf-d560e8227594",
+ "useStyle": "default",
+ "conditionalStyles": [],
+ "childStyles": []
+ },
+ "timeline": [],
+ "eventHandlers": [],
+ "identifier": "ui_TunerReferenceLabel",
+ "leftUnit": "px",
+ "topUnit": "px",
+ "widthUnit": "content",
+ "heightUnit": "content",
+ "children": [],
+ "widgetFlags": "CLICK_FOCUSABLE|GESTURE_BUBBLE|PRESS_LOCK|SCROLLABLE|SCROLL_CHAIN_HOR|SCROLL_CHAIN_VER|SCROLL_ELASTIC|SCROLL_MOMENTUM|SCROLL_WITH_ARROW|SNAPPABLE",
+ "hiddenFlagType": "literal",
+ "clickableFlagType": "literal",
+ "flagScrollbarMode": "",
+ "flagScrollDirection": "",
+ "scrollSnapX": "",
+ "scrollSnapY": "",
+ "checkedStateType": "literal",
+ "disabledStateType": "literal",
+ "states": "",
+ "localStyles": {
+ "objID": "61e1986a-fa40-4391-c2d5-f4258133501a",
+ "definition": {
+ "MAIN": {
+ "DEFAULT": {
+ "text_font": "MONTSERRAT_32"
+ }
+ }
+ }
+ },
+ "group": "",
+ "groupIndex": 0,
+ "text": "440 Hz",
+ "textType": "literal",
+ "longMode": "WRAP",
+ "recolor": false
+ },
+ {
+ "objID": "3eea75f0-636d-4ffe-ec77-d3f87751ec85",
+ "type": "LVGLContainerWidget",
+ "left": 373,
+ "top": 255,
+ "width": 106,
+ "height": 65,
+ "customInputs": [],
+ "customOutputs": [],
+ "style": {
+ "objID": "af384d6d-e143-4ca2-a930-144589de2519",
+ "useStyle": "default",
+ "conditionalStyles": [],
+ "childStyles": []
+ },
+ "timeline": [],
+ "eventHandlers": [
+ {
+ "objID": "5e1a117c-c382-437a-efe6-8fbc091d721b",
+ "eventName": "CLICKED",
+ "handlerType": "action",
+ "action": "TunerClose",
+ "userData": 0
+ }
+ ],
+ "identifier": "ui_TunerCloseContainer",
+ "leftUnit": "px",
+ "topUnit": "px",
+ "widthUnit": "px",
+ "heightUnit": "px",
+ "children": [
+ {
+ "objID": "92297841-cda0-4e32-95ca-4259c6d5528a",
+ "type": "LVGLImageWidget",
+ "left": 32,
+ "top": 21,
+ "width": 42,
+ "height": 27,
+ "customInputs": [],
+ "customOutputs": [],
+ "style": {
+ "objID": "a3ecd6d2-89bf-4b4d-ed85-2408ee2b0d5e",
+ "useStyle": "default",
+ "conditionalStyles": [],
+ "childStyles": []
+ },
+ "timeline": [],
+ "eventHandlers": [],
+ "identifier": "ui_TunerOKTick",
+ "leftUnit": "px",
+ "topUnit": "px",
+ "widthUnit": "content",
+ "heightUnit": "content",
+ "children": [],
+ "widgetFlags": "ADV_HITTEST|CLICK_FOCUSABLE|GESTURE_BUBBLE|PRESS_LOCK|SCROLL_CHAIN_HOR|SCROLL_CHAIN_VER|SCROLL_ELASTIC|SCROLL_MOMENTUM|SCROLL_WITH_ARROW|SNAPPABLE",
+ "hiddenFlagType": "literal",
+ "clickableFlag": false,
+ "clickableFlagType": "literal",
+ "flagScrollbarMode": "",
+ "flagScrollDirection": "",
+ "scrollSnapX": "",
+ "scrollSnapY": "",
+ "checkedStateType": "literal",
+ "disabledStateType": "literal",
+ "states": "",
+ "localStyles": {
+ "objID": "3aba2f46-8d03-4f5e-b9f7-e604da3399a6"
+ },
+ "group": "",
+ "groupIndex": 0,
+ "image": "tick",
+ "setPivot": false,
+ "pivotX": 0,
+ "pivotY": 0,
+ "zoom": 256,
+ "angle": 0,
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
+ }
+ ],
+ "widgetFlags": "CLICK_FOCUSABLE|GESTURE_BUBBLE|PRESS_LOCK|SCROLL_CHAIN_HOR|SCROLL_CHAIN_VER|SCROLL_ELASTIC|SCROLL_MOMENTUM|SCROLL_WITH_ARROW|SNAPPABLE",
+ "hiddenFlagType": "literal",
+ "clickableFlag": true,
+ "clickableFlagType": "literal",
+ "flagScrollbarMode": "",
+ "flagScrollDirection": "",
+ "scrollSnapX": "",
+ "scrollSnapY": "",
+ "checkedStateType": "literal",
+ "disabledStateType": "literal",
+ "states": "",
+ "localStyles": {
+ "objID": "06f69aa0-e99e-440f-98bc-9ac537839121"
+ },
+ "group": "",
+ "groupIndex": 0
+ }
+ ],
+ "widgetFlags": "CLICK_FOCUSABLE|GESTURE_BUBBLE|PRESS_LOCK|SCROLL_CHAIN_HOR|SCROLL_CHAIN_VER|SCROLL_ELASTIC|SCROLL_MOMENTUM|SCROLL_WITH_ARROW|SNAPPABLE",
+ "hiddenFlagType": "literal",
+ "clickableFlag": true,
+ "clickableFlagType": "literal",
+ "flagScrollbarMode": "",
+ "flagScrollDirection": "",
+ "scrollSnapX": "",
+ "scrollSnapY": "",
+ "checkedStateType": "literal",
+ "disabledStateType": "literal",
+ "states": "",
+ "localStyles": {
+ "objID": "e0cc11cf-b30b-4d8d-c875-45c004c75fa9"
+ },
+ "group": "",
+ "groupIndex": 0
+ }
+ ],
+ "widgetFlags": "CLICKABLE|PRESS_LOCK|CLICK_FOCUSABLE|GESTURE_BUBBLE|SNAPPABLE|SCROLLABLE|SCROLL_ELASTIC|SCROLL_MOMENTUM|SCROLL_CHAIN_HOR|SCROLL_CHAIN_VER",
+ "hiddenFlagType": "literal",
+ "clickableFlag": true,
+ "clickableFlagType": "literal",
+ "checkedStateType": "literal",
+ "disabledStateType": "literal",
+ "states": "",
+ "localStyles": {
+ "objID": "1451d8b1-3eed-4823-bd47-75f2e30e72e0",
+ "definition": {
+ "MAIN": {
+ "DEFAULT": {
+ "bg_color": "#1F1F1F"
+ }
+ }
+ }
+ },
+ "groupIndex": 0
+ }
+ ],
+ "connectionLines": [],
+ "localVariables": [],
+ "componentGroups": [],
+ "userProperties": [],
+ "name": "Tuner",
+ "left": 0,
+ "top": 0,
+ "width": 480,
+ "height": 320,
+ "isUsedAsUserWidget": false,
+ "createAtStart": true,
+ "deleteOnScreenUnload": false
+ }
+ ],
+ "userWidgets": [],
+ "lvglStyles": {
+ "objID": "a31bd004-35c5-b3fb-5c8b-78ea5c7693b8",
+ "styles": [],
+ "defaultStyles": {}
+ },
+ "lvglGroups": {
+ "objID": "f2f79c21-8769-ed90-c624-7405d4136ec9",
+ "groups": []
+ },
+ "fonts": [],
+ "bitmaps": [
+ {
+ "objID": "cacba946-d32d-484f-e32d-81f201edb018",
+ "name": "arrow_left",
+ "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEQAAABGCAYAAAB12zK5AAAACXBIWXMAAAsTAAALEwEAmpwYAAAFymlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4xLWMwMDEgMTE2LmNhODJhZTQsIDIwMjQvMDIvMjItMjE6NTg6NDEgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCAyNC43IChXaW5kb3dzKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjQtMTAtMjBUMTQ6NTU6MjIrMTE6MDAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMjQtMTAtMjBUMTQ6NTU6MjIrMTE6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDI0LTEwLTIwVDE0OjU1OjIyKzExOjAwIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjQ0YjVjZDBlLTJlZTItZGU0Yy04YWY0LWRjNzk5YTc3ODQ5YyIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjk1ODY2N2Y2LWIyNTAtZmM0OS1iYjI0LWZlNTM5NTk2ZGM2NiIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjExNzEzZDM3LWFmZWItNjU0MS1hZjhkLTgxNGU1NTkyNjUwOCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjExNzEzZDM3LWFmZWItNjU0MS1hZjhkLTgxNGU1NTkyNjUwOCIgc3RFdnQ6d2hlbj0iMjAyNC0xMC0yMFQxNDo1NToyMisxMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDI0LjcgKFdpbmRvd3MpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo0NGI1Y2QwZS0yZWUyLWRlNGMtOGFmNC1kYzc5OWE3Nzg0OWMiIHN0RXZ0OndoZW49IjIwMjQtMTAtMjBUMTQ6NTU6MjIrMTE6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCAyNC43IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6SUn24AAAHnUlEQVR4nO2c23IU1xWGv92n0YxG2KA5xyrkiEMMlKlIAuRKbHBsP0BeIhd5hFTlNnmFXOYVcpObFBBw2TggQdkxdiEkQsVE0z0tGZBGc+ie7p2L2S3EuUeag6zhr5oqqUbq3vrmX3uvvfZSCyklb/RE2qAHsNdkAExMTCCEYLtbtn8vhADgWTe97Gdeda3tsiyLer1esB3npgzDYjqd/vPY2NgfWq1WrMFH9xJC4HkenudtjaMTVavVra+Njn+7SzJNk3q9XiyXywtAESAMw0dBEBAEQezraJpGo9Gg1Wqhabs3/EBCxrIsarVaIYJx+MAIAEIIGX3icV66ruP7ftdgwACAqDApOo5zCyj+9nSRuWMZAOJO70IINE2j2WzieV7XYECfgWwLk5tA4fzUOGdPFlit+7GvEbmj2Wzi+35XYUAfgViWRaPRKEUwPpoaZ+5UAbfaJGzF80avYUAfgEgpMU3zKRjnp8b54FSBStUjaEniLAz9gAF9ABI5Y2WlfAvIX1DOqGw0CVvhnoIBPQZiWRae572zsrJyC2Tu/NQ4504VqFSbhMHeckaknuUhamn9mW07N4HshakM507l2zD2WJhsV0/uoOaMCdu2b4HMXjgy/pOAAT1wiMozJlTSlb1wJMO5k/mt1WQvw4AuAzFNk1qt9o5t2zeBTASjE2cAA4MBXQyZyBkRjI93ACNK3QcFA7rkENM0qVarE47jPAXD6dwZbqvVIggCDGMw+85d3zWC4bruTSDz0VR7AnU24sHQBPhBCMDmZu33tXp9jn5uKSTopik0kKOjo//YFRDLsqhWq4dd150HMnOTB5k7mVdJVzxntEIYGzHbYwuDszLk7G7GtFOFwOPHj38npJQ7KhCpOeOwWk3GP5g8yIfvl1irebT8eBlo++KgI/hxo4EfSjov7+xOhq5BEHLx3zbrfuDtyCGJRILNzc1J27bngfELRzKcPZFjbdOjFTMdjyRDCDQoZUbRhIhdAuiWTENDtEKs7yrgB82OgagMdNK27QXg0G+OZjhzIo9b9QhaQcclPCEAKdlsxCsbdluGAhIq93cERIXJu+VyeR449MnRDLMn1JwRyB3VM/eaYgOxLCsKkwXg4PMwejjKPirW8qYqXe9uwTi2P2FADIeoMPm5CpM2jPf2Jwx4DRDljG0wssy+l9u3MOAVIaNWk6lhggEvcYjKQKccx5kH3v70WJaZIYABL3CIWk2ODCMMeMYhhmGwsbEx5bruDSIYvxgeGLDNIWo1Oao2am9/Fjmjg4LwfpABYFkm1Wr1iOM4N4C3PjueZXrInBFJA6hWN6cdx1kwBW99ejzHL4/n2vWMIYMBCkilUvkTcOBYNs3Hp4u4NQ8ZdLZr3S/SAHK53B+BjUW3ysWvy2RTFpquMYzdVhpAOp2+kc/nZ3zJ+qU7FRbuVMiNJdB0MXRQNADP80in03fz+fwZYP3iHZf574cTytay63keqVRqMZfLzQCPLy4OJ5SnMlXf90mn00v5fH4WBeXG9+5QQXkudfd9n9HR0aV8Pj8DPL60WOHGEDnlOSBSysgpy8opjy4tukMD5YXbfyllNKcsFQqFLSjXhwDKK0uIKnyWC4XCDPDw8hA45bU11WazSSqVulcqlc4AD/e7U2IVmX3fJ5lMPuWU6985+xJK7ENlNaf8R80pP16+u7ovoXR0yq6g3FNOWWtDqZAbG0E3tBc2+P/U1PFRpoJyv1AozNq2vXD5rntISsnZEzlWaxB0ctANSAlCg9ERE2MQZ7umhvBDdDXoHR12R1CKxeJMuVxe+OfS6iGvFfDh+yXcTY+ggwNvoYEpBA/sDWqtsO/N97ouEIGk0e5RMXfcDgFPjjcdx/kaOPCryYP8+nQJt9qM3aF8IGWx9OARf/+m3KU/cXfaVcOMylPuZ7PZWdd1v/ji/sOsoWvtTuWY7VSGBhuq+V/T9X9pmn4dZL/7qTRNCGma5u46iOBJ6UAIMV2pVG5dWV7LIARzJ/O4G02C15QhQwmm3g6U0VTqL4lE4q/1er2nDXfr6+svfa8rn4Tv+4yNjT3QdX26XC7PX1lazQGxoUQKpcwYhrH1j0GD6ELs2h09zyOZTP5QLBZnQKxeWVrl2m2H7FgCPWaeIqUUUkoSiQSmaRKGYbeGF1td/Qh83yeVSj0oFgvTgHt1aZWvIihG/ORtkFC67slGo0EymfyhVCrNAJUrS6tc+9Ymm44PRUo5MChdByKEwPd9EolEFD6Vq8trbSijex9Kz2YttSF8UCoVZwHn6vIa125HTol3xDEIKD2dxj3PI5FIqPARzhOnWB1BCcOwb1B6vq75vs/IyMj/isXCDGBfXV7jy9udQQH6BqUvC30ERZUOyp8vr/Flh06B/kDpW+aj5pQnUO4pKGkL3Yi/Pe41lL6mgipPWWlDEeXP763x1bc240mzo+tEUCzL6jqUvufGqnSwks/npoGVv31T5triasfXCcMQy7K6DmUgD0NQab5dLBbPAOX/rjfab6jUPe4rCAJM08QwjI6eKPEqDeyBKq1Wi2QyuVIqlaY1TSsDCCEO6LpOJy8hBKlUipGRka6UMMV+qIN2U28eufOM3gB5Rv8HgnbLjnBzTLAAAAAASUVORK5CYII=",
+ "bpp": 32,
+ "alwaysBuild": false,
+ "lvglBinaryOutputFormat": 3,
+ "lvglDither": false
+ },
+ {
+ "objID": "d8e2a441-f1a8-4e35-aa87-4e45f8a70435",
+ "name": "arrow_right",
+ "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEQAAABGCAYAAAB12zK5AAAACXBIWXMAAAsTAAALEwEAmpwYAAAFymlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4xLWMwMDEgMTE2LmNhODJhZTQsIDIwMjQvMDIvMjItMjE6NTg6NDEgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCAyNC43IChXaW5kb3dzKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjQtMTAtMjBUMTQ6NTQ6NTcrMTE6MDAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMjQtMTAtMjBUMTQ6NTQ6NTcrMTE6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDI0LTEwLTIwVDE0OjU0OjU3KzExOjAwIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmRlMzYzZGYyLTRjOWQtMzM0Ny04OTc5LWU3MzM0NDExNjM2YyIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjA5NzdhNzcyLTdjODEtYmU0Mi1hMDY5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",
+ "bpp": 32,
+ "alwaysBuild": false,
+ "lvglBinaryOutputFormat": 3,
"lvglDither": false
},
{
@@ -27169,6 +28655,15 @@
"alwaysBuild": false,
"lvglBinaryOutputFormat": 3,
"lvglDither": false
+ },
+ {
+ "objID": "7bb66472-d9ec-44a6-e4c4-c5a773a0884e",
+ "name": "tuner",
+ "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC0AAAAuCAYAAAC8jpA0AAAACXBIWXMAAAsTAAALEwEAmpwYAAAGl2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4xLWMwMDEgMTE2LmNhODJhZTQsIDIwMjQvMDIvMjItMjE6NTg6NDEgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCAyNC43IChXaW5kb3dzKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjYtMDctMzBUMDk6NTU6MTQrMTA6MDAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMjYtMDctMzBUMTU6NDY6NTMrMTA6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDI2LTA3LTMwVDE1OjQ2OjUzKzEwOjAwIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjU4OWRhYjQ1LWYzNGEtNDc0Ni1iMDdkLTc3Y2FhMjg4YTg1NSIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOmFmYmU5N2UxLTJkY2YtZGE0My05YjRiLWVlM2UwZjkyMWJjYyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOmQxZWVkOWRhLTgxNzEtMzk0My05OTllLWIyODc0MmE0ZGZhYSIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmQxZWVkOWRhLTgxNzEtMzk0My05OTllLWIyODc0MmE0ZGZhYSIgc3RFdnQ6d2hlbj0iMjAyNi0wNy0zMFQwOTo1NToxNCsxMDowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDI0LjcgKFdpbmRvd3MpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo5OWE4OWNmNy01MGVkLTNlNDEtOTJiZC1lYzVmOWRkZjUxODMiIHN0RXZ0OndoZW49IjIwMjYtMDctMzBUMDk6NTU6MTQrMTA6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCAyNC43IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NTg5ZGFiNDUtZjM0YS00NzQ2LWIwN2QtNzdjYWEyODhhODU1IiBzdEV2dDp3aGVuPSIyMDI2LTA3LTMwVDE1OjQ2OjUzKzEwOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjQuNyAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+G8BwyAAACPhJREFUaN7tmVtMVlcahtf/g4AnEPEAinLyAAERTzSxYmZM1d60ZYZkbNKL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",
+ "bpp": 32,
+ "alwaysBuild": false,
+ "lvglBinaryOutputFormat": 3,
+ "lvglDither": false
}
],
"colors": [],
diff --git a/ui_design_480x320land/assets/tuner.png b/ui_design_480x320land/assets/tuner.png
new file mode 100644
index 00000000..b2163e64
Binary files /dev/null and b/ui_design_480x320land/assets/tuner.png differ
diff --git a/ui_design_800x480land/Tonex_Controller_800_480land.eez-project b/ui_design_800x480land/Tonex_Controller_800_480land.eez-project
index 88c1bc90..978cf6ed 100644
--- a/ui_design_800x480land/Tonex_Controller_800_480land.eez-project
+++ b/ui_design_800x480land/Tonex_Controller_800_480land.eez-project
@@ -7,7 +7,7 @@
"objID": "fd434352-2277-c4a8-e87e-e96cfcbf2305",
"projectVersion": "v3",
"projectType": "lvgl",
- "lvglVersion": "8.3",
+ "lvglVersion": "8.4.0",
"extensions": [],
"imports": [],
"flowSupport": false,
@@ -20,7 +20,10 @@
"authorLink": "https://github.com/Builty/TonexOneController/tree/main",
"resourceFiles": [],
"hiddenWidgetLines": "dimmed",
- "dimmedLinesOpacity": "20"
+ "dimmedLinesOpacity": "20",
+ "embedBitmaps": true,
+ "embedFonts": true,
+ "cacheFonts": false
},
"build": {
"objID": "72794a43-a0fc-13c2-7eb5-67dd952141a4",
@@ -99,6 +102,7 @@
"fileSystemPath": "",
"lvglInclude": "lvgl.h",
"screensLifetimeSupport": false,
+ "useDockerDesktop": true,
"generateSourceCodeForEezFramework": false,
"compressFlowDefinition": false,
"executionQueueSize": 1000,
@@ -117,6 +121,7 @@
"components": [],
"connectionLines": [],
"localVariables": [],
+ "componentGroups": [],
"userProperties": [],
"name": "NextClicked",
"description": "Next button press handler",
@@ -127,6 +132,7 @@
"components": [],
"connectionLines": [],
"localVariables": [],
+ "componentGroups": [],
"userProperties": [],
"name": "PreviousClicked",
"implementationType": "native"
@@ -136,6 +142,7 @@
"components": [],
"connectionLines": [],
"localVariables": [],
+ "componentGroups": [],
"userProperties": [],
"name": "AmpSkinNext",
"implementationType": "native"
@@ -145,6 +152,7 @@
"components": [],
"connectionLines": [],
"localVariables": [],
+ "componentGroups": [],
"userProperties": [],
"name": "AmpSkinPrevious",
"implementationType": "native"
@@ -154,6 +162,7 @@
"components": [],
"connectionLines": [],
"localVariables": [],
+ "componentGroups": [],
"userProperties": [],
"name": "ParameterChanged",
"implementationType": "native"
@@ -163,6 +172,7 @@
"components": [],
"connectionLines": [],
"localVariables": [],
+ "componentGroups": [],
"userProperties": [],
"name": "CloseSettingsPage"
},
@@ -171,6 +181,7 @@
"components": [],
"connectionLines": [],
"localVariables": [],
+ "componentGroups": [],
"userProperties": [],
"name": "ShowSettingsPage"
},
@@ -179,6 +190,7 @@
"components": [],
"connectionLines": [],
"localVariables": [],
+ "componentGroups": [],
"userProperties": [],
"name": "EnableSkinEdit"
},
@@ -187,6 +199,7 @@
"components": [],
"connectionLines": [],
"localVariables": [],
+ "componentGroups": [],
"userProperties": [],
"name": "SaveSkinEdit"
},
@@ -195,6 +208,7 @@
"components": [],
"connectionLines": [],
"localVariables": [],
+ "componentGroups": [],
"userProperties": [],
"name": "KeyboardOK"
},
@@ -203,6 +217,7 @@
"components": [],
"connectionLines": [],
"localVariables": [],
+ "componentGroups": [],
"userProperties": [],
"name": "PresetDescriptionPressed"
},
@@ -211,6 +226,7 @@
"components": [],
"connectionLines": [],
"localVariables": [],
+ "componentGroups": [],
"userProperties": [],
"name": "EffectIconClicked"
},
@@ -219,6 +235,7 @@
"components": [],
"connectionLines": [],
"localVariables": [],
+ "componentGroups": [],
"userProperties": [],
"name": "Gesture"
},
@@ -227,6 +244,7 @@
"components": [],
"connectionLines": [],
"localVariables": [],
+ "componentGroups": [],
"userProperties": [],
"name": "ValueClicked"
},
@@ -235,8 +253,36 @@
"components": [],
"connectionLines": [],
"localVariables": [],
+ "componentGroups": [],
"userProperties": [],
"name": "ValueKeyboardOK"
+ },
+ {
+ "objID": "36e362b9-db78-4323-95a4-00477de35ada",
+ "components": [],
+ "connectionLines": [],
+ "localVariables": [],
+ "componentGroups": [],
+ "userProperties": [],
+ "name": "TunerPressed"
+ },
+ {
+ "objID": "e20fc07c-baf1-4547-b201-073b6db6dce9",
+ "components": [],
+ "connectionLines": [],
+ "localVariables": [],
+ "componentGroups": [],
+ "userProperties": [],
+ "name": "TunerClose"
+ },
+ {
+ "objID": "4b76e835-9fc3-4d03-8a03-61da8f40a8f9",
+ "components": [],
+ "connectionLines": [],
+ "localVariables": [],
+ "componentGroups": [],
+ "userProperties": [],
+ "name": "SliderEvent"
}
],
"userPages": [
@@ -363,7 +409,8 @@
"pivotY": 0,
"zoom": 256,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
},
{
"objID": "9b4cc475-fd14-452f-b60b-31047100feaa",
@@ -461,7 +508,8 @@
"pivotY": 0,
"zoom": 256,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
},
{
"objID": "9366fa7e-f062-410e-9ca6-c96b75d2e595",
@@ -507,7 +555,8 @@
"pivotY": 0,
"zoom": 256,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
},
{
"objID": "31b55091-7bb9-4e42-fb34-f4c1c67ad70d",
@@ -553,7 +602,8 @@
"pivotY": 0,
"zoom": 256,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
},
{
"objID": "3330c110-9659-4ca5-b11a-47b67473744f",
@@ -601,7 +651,8 @@
"pivotY": 0,
"zoom": 256,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
},
{
"objID": "9fd826fe-c690-416b-be55-75d76786a05c",
@@ -649,7 +700,8 @@
"pivotY": 0,
"zoom": 256,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
},
{
"objID": "d0d818da-037c-4a36-bed4-dfbe053713f4",
@@ -697,7 +749,8 @@
"pivotY": 0,
"zoom": 256,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
}
],
"widgetFlags": "CLICK_FOCUSABLE|GESTURE_BUBBLE|PRESS_LOCK|SCROLL_CHAIN_HOR|SCROLL_CHAIN_VER|SCROLL_ELASTIC|SCROLL_MOMENTUM|SCROLL_WITH_ARROW|SNAPPABLE",
@@ -799,7 +852,8 @@
"pivotY": 0,
"zoom": 256,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
}
],
"widgetFlags": "CLICK_FOCUSABLE|GESTURE_BUBBLE|PRESS_LOCK|SCROLLABLE|SCROLL_CHAIN_HOR|SCROLL_CHAIN_VER|SCROLL_ELASTIC|SCROLL_MOMENTUM|SCROLL_WITH_ARROW|SNAPPABLE",
@@ -957,7 +1011,7 @@
"left": 6,
"top": 124,
"width": 188,
- "height": 129,
+ "height": 86,
"customInputs": [],
"customOutputs": [],
"style": {
@@ -1096,6 +1150,66 @@
"group": "",
"groupIndex": 0
},
+ {
+ "objID": "f129c639-b40d-433d-a3ba-5500ff1538ba",
+ "type": "LVGLImageWidget",
+ "left": 708,
+ "top": 295,
+ "width": 70,
+ "height": 71,
+ "customInputs": [],
+ "customOutputs": [],
+ "style": {
+ "objID": "d8d29940-5304-4175-f904-4ced1dabd3dc",
+ "useStyle": "default",
+ "conditionalStyles": [],
+ "childStyles": []
+ },
+ "timeline": [],
+ "eventHandlers": [
+ {
+ "objID": "6d3f9303-9255-401f-e3a5-c556998c9fb2",
+ "eventName": "CLICKED",
+ "handlerType": "action",
+ "action": "TunerPressed",
+ "userData": 0
+ }
+ ],
+ "identifier": "ui_tuner_button",
+ "leftUnit": "px",
+ "topUnit": "px",
+ "widthUnit": "content",
+ "heightUnit": "content",
+ "children": [],
+ "widgetFlags": "ADV_HITTEST|CLICK_FOCUSABLE|GESTURE_BUBBLE|PRESS_LOCK|SCROLL_CHAIN_HOR|SCROLL_CHAIN_VER|SCROLL_ELASTIC|SCROLL_MOMENTUM|SCROLL_WITH_ARROW|SNAPPABLE",
+ "hiddenFlag": true,
+ "hiddenFlagType": "literal",
+ "clickableFlag": true,
+ "clickableFlagType": "literal",
+ "flagScrollbarMode": "",
+ "flagScrollDirection": "",
+ "scrollSnapX": "",
+ "scrollSnapY": "",
+ "checkedStateType": "literal",
+ "disabledStateType": "literal",
+ "states": "",
+ "localStyles": {
+ "objID": "1f7cec15-1be6-4780-c57c-dae3fab74d21"
+ },
+ "group": "",
+ "groupIndex": 0,
+ "image": "tuner",
+ "setPivot": false,
+ "pivotX": 0,
+ "pivotY": 0,
+ "zoom": 256,
+ "angle": 0,
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL",
+ "value": 0,
+ "valueType": "literal",
+ "previewValue": 0
+ },
{
"objID": "02b57dd5-5be6-4565-81e2-83cc4e3375b7",
"type": "LVGLContainerWidget",
@@ -1369,7 +1483,8 @@
"pivotY": 0,
"zoom": 256,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
},
{
"objID": "2172b98c-7608-4fa7-8a68-a46d5734430c",
@@ -1432,7 +1547,8 @@
"pivotY": 0,
"zoom": 256,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
},
{
"objID": "9807ab9f-0fd5-4881-a58c-5c324e9296a2",
@@ -1495,7 +1611,8 @@
"pivotY": 0,
"zoom": 256,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
},
{
"objID": "1d8e1ffc-0e03-4477-9e44-f55b79bd47bc",
@@ -1558,7 +1675,8 @@
"pivotY": 0,
"zoom": 256,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
},
{
"objID": "c68acabf-e17e-4cdc-e977-5cb2b8ea418f",
@@ -1621,7 +1739,8 @@
"pivotY": 0,
"zoom": 256,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
},
{
"objID": "a23e4bcf-d00d-4bed-8315-9430fdf6b9b5",
@@ -1684,7 +1803,8 @@
"pivotY": 0,
"zoom": 256,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
},
{
"objID": "9dcbbf14-fa95-4049-fe1e-6bdc4a0734b3",
@@ -1747,7 +1867,8 @@
"pivotY": 0,
"zoom": 256,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
},
{
"objID": "9569a6e5-71b0-490d-9a33-149e31d106bc",
@@ -1810,7 +1931,8 @@
"pivotY": 0,
"zoom": 256,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
},
{
"objID": "58dbbe30-3f2f-4ef4-d843-a2027c33f59e",
@@ -1873,7 +1995,8 @@
"pivotY": 0,
"zoom": 256,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
}
],
"widgetFlags": "CLICK_FOCUSABLE|GESTURE_BUBBLE|PRESS_LOCK|SCROLL_CHAIN_HOR|SCROLL_CHAIN_VER|SCROLL_ELASTIC|SCROLL_MOMENTUM|SCROLL_WITH_ARROW|SNAPPABLE",
@@ -1988,7 +2111,8 @@
"pivotY": 0,
"zoom": 256,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
},
{
"objID": "054ef294-8926-487a-e379-a5487d659b99",
@@ -2051,7 +2175,8 @@
"pivotY": 0,
"zoom": 256,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
},
{
"objID": "7e38a5af-d650-436a-b37d-d2cc97b59a7f",
@@ -2114,7 +2239,8 @@
"pivotY": 0,
"zoom": 256,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
},
{
"objID": "6627d130-ae7d-4d86-d3e7-6c43be8c213e",
@@ -2177,7 +2303,8 @@
"pivotY": 0,
"zoom": 256,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
},
{
"objID": "16aab216-9da8-4d68-d215-54e57d33051c",
@@ -2240,7 +2367,8 @@
"pivotY": 0,
"zoom": 256,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
},
{
"objID": "141695e9-fa4e-4eff-ef24-4307e0ca6ca6",
@@ -2303,7 +2431,8 @@
"pivotY": 0,
"zoom": 256,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
},
{
"objID": "0ef561fa-58b0-49d2-b587-a5d7d49a9c56",
@@ -2366,7 +2495,8 @@
"pivotY": 0,
"zoom": 256,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
},
{
"objID": "aa185271-65d3-4edb-d4c2-957693a585ef",
@@ -2429,7 +2559,8 @@
"pivotY": 0,
"zoom": 256,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
},
{
"objID": "5699a557-cc56-4972-9766-b0e5ebe1ea9c",
@@ -2492,7 +2623,8 @@
"pivotY": 0,
"zoom": 256,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
},
{
"objID": "ec059f2d-8a99-4161-8e8c-7218152c883a",
@@ -2555,7 +2687,8 @@
"pivotY": 0,
"zoom": 256,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
},
{
"objID": "07f4e922-4285-4de0-ac9d-be6571ccba7d",
@@ -2611,7 +2744,8 @@
"pivotY": 0,
"zoom": 256,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
}
],
"widgetFlags": "CLICK_FOCUSABLE|GESTURE_BUBBLE|PRESS_LOCK|SCROLL_CHAIN_HOR|SCROLL_CHAIN_VER|SCROLL_ELASTIC|SCROLL_MOMENTUM|SCROLL_WITH_ARROW|SNAPPABLE",
@@ -2695,7 +2829,8 @@
"pivotY": 0,
"zoom": 256,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
},
{
"objID": "58bfa162-b377-44c6-97b3-21456f87aed3",
@@ -2752,7 +2887,8 @@
"pivotY": 0,
"zoom": 256,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
},
{
"objID": "e1c9173a-62a2-4cbe-dd94-6265baa09b9f",
@@ -2786,7 +2922,7 @@
"widthUnit": "px",
"heightUnit": "px",
"children": [],
- "widgetFlags": "GESTURE_BUBBLE|PRESS_LOCK|SCROLLABLE|SCROLL_CHAIN_HOR|SCROLL_CHAIN_VER|SCROLL_ELASTIC|SCROLL_MOMENTUM|SCROLL_WITH_ARROW|SNAPPABLE",
+ "widgetFlags": "PRESS_LOCK|SCROLLABLE|SCROLL_CHAIN_HOR|SCROLL_CHAIN_VER|SCROLL_ELASTIC|SCROLL_MOMENTUM|SCROLL_WITH_ARROW|SNAPPABLE",
"hiddenFlag": true,
"hiddenFlagType": "literal",
"clickableFlag": true,
@@ -2869,7 +3005,8 @@
"pivotY": 0,
"zoom": 256,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
}
],
"widgetFlags": "CLICK_FOCUSABLE|PRESS_LOCK|SCROLL_CHAIN_HOR|SCROLL_CHAIN_VER|SCROLL_ELASTIC|SCROLL_MOMENTUM|SCROLL_WITH_ARROW|SNAPPABLE",
@@ -2912,6 +3049,7 @@
],
"connectionLines": [],
"localVariables": [],
+ "componentGroups": [],
"userProperties": [],
"name": "Screen1",
"left": 0,
@@ -3375,7 +3513,14 @@
"objID": "b655d5c6-75ac-42fd-e546-e64dfe8c3f39",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "0d327c07-d767-4613-d221-9d487e5c1e0a",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -3564,7 +3709,14 @@
"objID": "1b170528-e5e2-486c-c123-5a35ad21d65e",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "187a63e0-74ff-4345-f1c5-1e39e3167c35",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -3753,7 +3905,14 @@
"objID": "d79c6e57-36bf-437e-9a57-e4b710069fdd",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "00a9c9ad-9806-487e-a01a-bdedcf6c9a2d",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -4258,7 +4417,14 @@
"objID": "99a26f0c-1e98-4797-9de8-7a729167b8a4",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "e514a716-307a-43c6-a284-b045358d50a6",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -4447,7 +4613,14 @@
"objID": "569f0244-78f8-4de8-b100-bb882d923b08",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "419fe116-dbb7-4a2f-f53e-723185ae317b",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -4636,7 +4809,14 @@
"objID": "8f9473f7-7b0b-454b-c1f9-8dc9826a186f",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "7ba83797-5bfe-4a7d-d78f-d7f114eb8ae3",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -5181,7 +5361,14 @@
"objID": "84ffca43-1d98-4570-d04a-99055877fd24",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "40116dbd-4ea6-40c6-8966-8eecb2d72149",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -5370,7 +5557,14 @@
"objID": "25f4a152-1b04-4ed4-b77c-1b29fdd92f45",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "578f77d2-9e67-4748-de13-fd6bbbe9b779",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -5559,7 +5753,14 @@
"objID": "b80b4e4d-11ab-441e-dd0e-24a5fc8a9801",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "5ed3e71c-ddc2-4a9b-f787-07e74683507e",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -5748,7 +5949,14 @@
"objID": "0a8af56c-06b2-4e82-dcdd-5df71d90b1f8",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "ac2415e3-f1f2-400c-ff18-e0dcad72205b",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -6123,7 +6331,14 @@
"objID": "28936262-d38e-4e0f-9776-e0a96a55ef32",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "ecebdefe-50ae-4546-f2ab-286f4eb7081e",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -6312,7 +6527,14 @@
"objID": "4f5cea46-c408-460b-8569-122a0484b9d8",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "3a4e1cc0-f241-472b-ea81-1b4474f814be",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -6501,7 +6723,14 @@
"objID": "a92937fd-ffed-46de-c867-6c4f7c439421",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "16ea98c8-9cc2-499d-980b-4cde33cfd3ae",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -6690,7 +6919,14 @@
"objID": "a25705bf-a55d-4a2a-ecb0-6af6a13fcab5",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "38e591c2-39a6-4474-ea91-433315d33b8b",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -7599,7 +7835,14 @@
"objID": "e7d75f6a-0b4a-45e2-8f11-5f4e8b02ea4b",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "613abcb1-d297-4db1-f8a1-bfe4fed73771",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -7788,7 +8031,14 @@
"objID": "8a15f096-039a-4457-ba16-795faaf56d50",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "b593d32e-0ea1-4ac5-9325-e2f408efcb27",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -7977,7 +8227,14 @@
"objID": "7083f18e-e118-4ea3-ddaa-3c1fa5316a28",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "53b8d2fd-8de4-45b2-92e0-efc1a883fd84",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -8166,7 +8423,14 @@
"objID": "8c9aac32-35ef-4f1d-cbf6-8f40047f5592",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "5c8a4ed4-5363-48a6-9b4f-e5a13b820b2a",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -9075,7 +9339,14 @@
"objID": "5fbb2a0b-b3fd-4310-8551-107740dbbdaa",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "730a2d3e-99f8-4337-a016-12f3409525ad",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -9386,7 +9657,14 @@
"objID": "d1244ceb-b092-477d-81c6-1ea6daa49730",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "456821a0-40ea-4f97-e5d9-4bc3f8b20a71",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -9576,7 +9854,14 @@
"objID": "f1268c10-6357-4dd2-8661-1a2bdd21c14f",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "c13900fd-5fbe-4981-c81f-06c249d5404c",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -10241,7 +10526,14 @@
"objID": "de4feac3-f28e-42ae-d9a2-f0a2d6e2bc19",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "8bf17f7e-0dfa-48bd-e997-d1cfc8852331",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -10430,7 +10722,14 @@
"objID": "3c3b762e-7fa7-43b5-f0da-84cae2da4cf2",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "e4b12719-1ba9-4ca3-8b06-4a16fe3ea7f2",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -10619,7 +10918,14 @@
"objID": "ba40fa01-7560-4ab5-97b6-80f57018ff99",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "07c45c88-e7a1-411f-a2e1-0bac4dfed88d",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -10808,7 +11114,14 @@
"objID": "d443cc19-70fe-4617-cefe-81d5ff9662fe",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "a92791e4-52fc-4bde-c0b6-82a4b4ab84e8",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -11232,23 +11545,23 @@
"groupIndex": 0
},
{
- "objID": "f3cd2b3a-ab5c-41af-9ee8-9bf93439752a",
+ "objID": "42aaa386-260a-4f59-f02c-a98ef9806120",
"type": "LVGLLabelWidget",
"left": 13,
"top": -92,
- "width": 58,
+ "width": 138,
"height": 27,
"customInputs": [],
"customOutputs": [],
"style": {
- "objID": "8ab6e34d-eb08-43f5-ad55-7cdfc564189b",
+ "objID": "328c7c60-d14e-4300-f7df-46fd23bb5cc9",
"useStyle": "default",
"conditionalStyles": [],
"childStyles": []
},
"timeline": [],
"eventHandlers": [],
- "identifier": "ui_BPMLabel",
+ "identifier": "ui_DirectMonitorLabel",
"leftUnit": "px",
"topUnit": "px",
"widthUnit": "content",
@@ -11265,11 +11578,12 @@
"disabledStateType": "literal",
"states": "",
"localStyles": {
- "objID": "42ababce-136c-4da0-e86d-3bdf87963c46",
+ "objID": "66fce305-dc73-4b8a-8598-b8a7999831de",
"definition": {
"MAIN": {
"DEFAULT": {
"text_font": "MONTSERRAT_24",
+ "text_align": "AUTO",
"align": "LEFT_MID"
}
}
@@ -11277,22 +11591,22 @@
},
"group": "",
"groupIndex": 0,
- "text": "BPM",
+ "text": "Dir Monitor",
"textType": "literal",
"longMode": "WRAP",
"recolor": false
},
{
- "objID": "60e94b33-a2a5-45bf-be50-0ad370b9c330",
- "type": "LVGLSliderWidget",
+ "objID": "e0a91659-8b2c-4d4f-b3f7-f6d579b33445",
+ "type": "LVGLSwitchWidget",
"left": 168,
"top": -92,
- "width": 500,
- "height": 20,
+ "width": 80,
+ "height": 35,
"customInputs": [],
"customOutputs": [],
"style": {
- "objID": "0ce0cf85-0012-4ea9-cc08-71c65f0ccc00",
+ "objID": "7dc0b775-3e15-4c95-f9e2-407f9446d404",
"useStyle": "default",
"conditionalStyles": [],
"childStyles": []
@@ -11300,20 +11614,20 @@
"timeline": [],
"eventHandlers": [
{
- "objID": "c8ad1aaf-08f8-436e-df9f-311ac544cebd",
+ "objID": "740e9c26-0b84-4989-d9b0-0c3d3de4ab8f",
"eventName": "RELEASED",
"handlerType": "action",
"action": "ParameterChanged",
"userData": 0
}
],
- "identifier": "ui_BPMSlider",
+ "identifier": "ui_DirectMonitorSwitch",
"leftUnit": "px",
"topUnit": "px",
"widthUnit": "px",
"heightUnit": "px",
"children": [],
- "widgetFlags": "CLICK_FOCUSABLE|GESTURE_BUBBLE|PRESS_LOCK|SCROLL_ELASTIC|SCROLL_MOMENTUM|SCROLL_WITH_ARROW|SNAPPABLE",
+ "widgetFlags": "CHECKABLE|CLICK_FOCUSABLE|GESTURE_BUBBLE|PRESS_LOCK|SCROLL_CHAIN_HOR|SCROLL_CHAIN_VER|SCROLL_ELASTIC|SCROLL_MOMENTUM|SCROLL_ON_FOCUS|SCROLL_WITH_ARROW|SNAPPABLE",
"hiddenFlagType": "literal",
"clickableFlag": true,
"clickableFlagType": "literal",
@@ -11325,31 +11639,160 @@
"disabledStateType": "literal",
"states": "",
"localStyles": {
- "objID": "c4e89c36-7c1a-4dd1-e698-1d7728ea2fe4",
+ "objID": "d106e8c1-0b60-4ddb-e3c5-aa9032770c7b",
"definition": {
"MAIN": {
"DEFAULT": {
- "align": "LEFT_MID",
- "bg_color": "424242"
- }
- },
- "INDICATOR": {
- "DEFAULT": {
- "bg_color": "513D2B"
+ "align": "LEFT_MID"
+ },
+ "CHECKED": {
+ "bg_color": "FB9230"
}
},
"KNOB": {
"DEFAULT": {
+ "bg_color": "674D35"
+ },
+ "CHECKED": {
"bg_color": "FB9230"
}
+ },
+ "INDICATOR": {
+ "CHECKED": {
+ "bg_color": "513D2B"
+ }
}
}
},
"group": "",
- "groupIndex": 0,
- "min": 40,
- "minType": "literal",
- "max": 240,
+ "groupIndex": 0
+ },
+ {
+ "objID": "f3cd2b3a-ab5c-41af-9ee8-9bf93439752a",
+ "type": "LVGLLabelWidget",
+ "left": 13,
+ "top": -36,
+ "width": 58,
+ "height": 27,
+ "customInputs": [],
+ "customOutputs": [],
+ "style": {
+ "objID": "8ab6e34d-eb08-43f5-ad55-7cdfc564189b",
+ "useStyle": "default",
+ "conditionalStyles": [],
+ "childStyles": []
+ },
+ "timeline": [],
+ "eventHandlers": [],
+ "identifier": "ui_BPMLabel",
+ "leftUnit": "px",
+ "topUnit": "px",
+ "widthUnit": "content",
+ "heightUnit": "content",
+ "children": [],
+ "widgetFlags": "CLICK_FOCUSABLE|GESTURE_BUBBLE|PRESS_LOCK|SCROLL_CHAIN_HOR|SCROLL_CHAIN_VER|SCROLL_ELASTIC|SCROLL_MOMENTUM|SCROLL_WITH_ARROW|SNAPPABLE",
+ "hiddenFlagType": "literal",
+ "clickableFlagType": "literal",
+ "flagScrollbarMode": "",
+ "flagScrollDirection": "",
+ "scrollSnapX": "",
+ "scrollSnapY": "",
+ "checkedStateType": "literal",
+ "disabledStateType": "literal",
+ "states": "",
+ "localStyles": {
+ "objID": "42ababce-136c-4da0-e86d-3bdf87963c46",
+ "definition": {
+ "MAIN": {
+ "DEFAULT": {
+ "text_font": "MONTSERRAT_24",
+ "align": "LEFT_MID"
+ }
+ }
+ }
+ },
+ "group": "",
+ "groupIndex": 0,
+ "text": "BPM",
+ "textType": "literal",
+ "longMode": "WRAP",
+ "recolor": false
+ },
+ {
+ "objID": "60e94b33-a2a5-45bf-be50-0ad370b9c330",
+ "type": "LVGLSliderWidget",
+ "left": 168,
+ "top": -36,
+ "width": 500,
+ "height": 20,
+ "customInputs": [],
+ "customOutputs": [],
+ "style": {
+ "objID": "0ce0cf85-0012-4ea9-cc08-71c65f0ccc00",
+ "useStyle": "default",
+ "conditionalStyles": [],
+ "childStyles": []
+ },
+ "timeline": [],
+ "eventHandlers": [
+ {
+ "objID": "c8ad1aaf-08f8-436e-df9f-311ac544cebd",
+ "eventName": "RELEASED",
+ "handlerType": "action",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "7c0463e4-fbfc-4c81-d47b-eeaa18bbfd4a",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
+ "userData": 0
+ }
+ ],
+ "identifier": "ui_BPMSlider",
+ "leftUnit": "px",
+ "topUnit": "px",
+ "widthUnit": "px",
+ "heightUnit": "px",
+ "children": [],
+ "widgetFlags": "CLICK_FOCUSABLE|GESTURE_BUBBLE|PRESS_LOCK|SCROLL_ELASTIC|SCROLL_MOMENTUM|SCROLL_WITH_ARROW|SNAPPABLE",
+ "hiddenFlagType": "literal",
+ "clickableFlag": true,
+ "clickableFlagType": "literal",
+ "flagScrollbarMode": "",
+ "flagScrollDirection": "",
+ "scrollSnapX": "",
+ "scrollSnapY": "",
+ "checkedStateType": "literal",
+ "disabledStateType": "literal",
+ "states": "",
+ "localStyles": {
+ "objID": "c4e89c36-7c1a-4dd1-e698-1d7728ea2fe4",
+ "definition": {
+ "MAIN": {
+ "DEFAULT": {
+ "align": "LEFT_MID",
+ "bg_color": "424242"
+ }
+ },
+ "INDICATOR": {
+ "DEFAULT": {
+ "bg_color": "513D2B"
+ }
+ },
+ "KNOB": {
+ "DEFAULT": {
+ "bg_color": "FB9230"
+ }
+ }
+ }
+ },
+ "group": "",
+ "groupIndex": 0,
+ "min": 40,
+ "minType": "literal",
+ "max": 240,
"maxType": "literal",
"mode": "NORMAL",
"value": 60,
@@ -11364,7 +11807,7 @@
"objID": "af40537c-0f39-4ed4-85f2-7e97df0294fe",
"type": "LVGLLabelWidget",
"left": 683,
- "top": -92,
+ "top": -36,
"width": 100,
"height": 27,
"customInputs": [],
@@ -11424,7 +11867,7 @@
"objID": "aa64108c-2481-474d-b621-944ffd0558b3",
"type": "LVGLLabelWidget",
"left": 13,
- "top": -36,
+ "top": 21,
"width": 127,
"height": 27,
"customInputs": [],
@@ -11475,7 +11918,7 @@
"objID": "7cdae175-0941-4048-f00f-7d18d6234cc3",
"type": "LVGLSliderWidget",
"left": 168,
- "top": -36,
+ "top": 21,
"width": 500,
"height": 20,
"customInputs": [],
@@ -11492,7 +11935,14 @@
"objID": "415952ef-0b4a-4bd5-c1d2-4d78d5f3b2db",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "7220f8ec-b0cc-4bb2-f6ef-b4df714ab407",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -11553,7 +12003,7 @@
"objID": "5157dd93-2913-4dd4-e0d9-4e789eb983cf",
"type": "LVGLLabelWidget",
"left": 683,
- "top": -36,
+ "top": 21,
"width": 100,
"height": 27,
"customInputs": [],
@@ -11613,7 +12063,7 @@
"objID": "6d811ef7-af00-4030-f37b-de6cc1550e3e",
"type": "LVGLLabelWidget",
"left": 13,
- "top": 21,
+ "top": 76,
"width": 133,
"height": 27,
"customInputs": [],
@@ -11664,7 +12114,7 @@
"objID": "a1e6179d-e5bd-44fa-b15e-846ac621e1d3",
"type": "LVGLSliderWidget",
"left": 168,
- "top": 21,
+ "top": 76,
"width": 500,
"height": 20,
"customInputs": [],
@@ -11681,7 +12131,14 @@
"objID": "e4bcf9b4-c2c7-4466-c47f-0a438666ff0f",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "388066c6-2d48-463a-f159-a61faa4ac697",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -11742,7 +12199,7 @@
"objID": "e3c8bf2c-c1b5-40b5-8f61-aa2feabc84cb",
"type": "LVGLLabelWidget",
"left": 683,
- "top": 21,
+ "top": 76,
"width": 100,
"height": 27,
"customInputs": [],
@@ -11802,7 +12259,7 @@
"objID": "97365649-298b-4356-821d-112d8c5527a1",
"type": "LVGLLabelWidget",
"left": 13,
- "top": 77,
+ "top": 133,
"width": 94,
"height": 27,
"customInputs": [],
@@ -11853,7 +12310,7 @@
"objID": "7029b0fa-71ae-4f3d-d22e-3d59f9ee7f3f",
"type": "LVGLSliderWidget",
"left": 168,
- "top": 77,
+ "top": 133,
"width": 500,
"height": 20,
"customInputs": [],
@@ -11870,7 +12327,14 @@
"objID": "6c527ab6-07ca-4dd6-8ccd-024a7dab5138",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "2c1c5a6f-e81a-4428-b7f0-cccfb2ddc647",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -11931,7 +12395,7 @@
"objID": "9e0da4c7-5d3b-4939-fe8c-88a4086f29e5",
"type": "LVGLLabelWidget",
"left": 683,
- "top": 76,
+ "top": 133,
"width": 100,
"height": 27,
"customInputs": [],
@@ -12063,7 +12527,9 @@
"group": "",
"groupIndex": 0,
"tabviewPosition": "TOP",
- "tabviewSize": 60
+ "tabviewSize": 60,
+ "selectedTab": "0",
+ "selectedTabType": "literal"
},
{
"objID": "bae65739-be8c-4cf5-f502-b9b105d36067",
@@ -12118,7 +12584,8 @@
"pivotY": 0,
"zoom": 256,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
},
{
"objID": "d377ee44-b808-4bd4-fb3e-72214fd04832",
@@ -12310,6 +12777,7 @@
],
"connectionLines": [],
"localVariables": [],
+ "componentGroups": [],
"userProperties": [],
"name": "Settings",
"left": 0,
@@ -12768,7 +13236,14 @@
"objID": "86ff09e7-97b5-4def-c088-cd1f5bc46505",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "298611ed-b87b-4dc1-a92d-28761aef8058",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -12960,7 +13435,14 @@
"objID": "a938abdf-06fe-4954-dfc5-2962860b63bc",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "51f678a9-5ac9-40cd-8e3a-fb572e386d8b",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -13152,7 +13634,14 @@
"objID": "04c25a62-de94-48f3-964a-ee6ee65238dc",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "4f79bf8a-0169-4434-aa31-455d2a01c3c0",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -13344,7 +13833,14 @@
"objID": "9fffe7d4-34f5-4ff9-bb13-36d2d06f34b3",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "fee14d5d-7842-44d9-b7fe-962fd97db9bd",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -13536,7 +14032,14 @@
"objID": "77855b13-9f22-4560-f2f0-0fbd15b7d78e",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "d650393a-c487-4bf4-b877-0a43bbf2b794",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -14050,7 +14553,14 @@
"objID": "095f079d-ac65-47af-d0f6-5d10751382f4",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "51c04df6-f295-4411-9e6e-41b8f6d3c00f",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -14242,7 +14752,14 @@
"objID": "b1198f8b-cc0d-4bb3-9d75-749a49306d06",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "06e1ac51-0ecf-4726-c12e-6692356bb6f4",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -14434,7 +14951,14 @@
"objID": "f219549a-d90f-4a06-83da-ab2fe561571b",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "d3c1d1d2-c838-40cd-cc20-ef3464e891fc",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -14626,7 +15150,14 @@
"objID": "996b18ca-0d0b-4a36-d57c-90561a567482",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "58f0be4a-2dcd-4e41-99cc-d25b7fa28c14",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -14818,7 +15349,14 @@
"objID": "7674b886-cfc1-4b5d-cae1-fb04102ab6a3",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "c99635ac-773d-4527-f943-2b73e20bcb79",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -15322,7 +15860,14 @@
"objID": "0b07f131-e8dd-4f90-cb65-8e9b7bcf1d6e",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "1d219ea9-19ea-4da8-865b-299e73c89f60",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -15514,7 +16059,14 @@
"objID": "c66d5c87-9d3c-4811-9329-fcc888885427",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "3fa30d57-6c2a-4b50-db52-23dc7b1230cb",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -15706,7 +16258,14 @@
"objID": "24932760-50c0-4dd5-d938-061dc230dddf",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "3f932ce0-1ff0-4f43-98a4-511a9f6724a8",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -15898,7 +16457,14 @@
"objID": "1f2e5b8e-be2b-4c0a-d929-ff65c8b15e25",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "75f147c7-6171-41bf-83df-418594f1ea12",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -16090,7 +16656,14 @@
"objID": "f507f01b-28a1-4947-cbe8-e1cd27a7ac1a",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "23d1f5b2-7291-44b5-b4eb-056e0d2027f8",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -16594,10 +17167,17 @@
"objID": "54a37ce0-8b71-4647-b9d2-e95593d4c9b6",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
"userData": 0
- }
- ],
+ },
+ {
+ "objID": "10d54f47-c149-4323-b6b0-ce34762e6be2",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
+ "userData": 0
+ }
+ ],
"identifier": "ui_ValAmpParam0Slider",
"leftUnit": "px",
"topUnit": "px",
@@ -16786,7 +17366,14 @@
"objID": "42e293be-4792-4945-9330-7d903eac926a",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "81c35375-3322-4cea-9124-94f74ef82e86",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -16978,7 +17565,14 @@
"objID": "bbdbc8ad-842d-49ae-bb5e-47f23cf55ebf",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "045fac7f-dde4-4e0d-ba8f-6e7d91b52bff",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -17170,7 +17764,14 @@
"objID": "61513737-9dce-4d1a-a92d-42f98efd6e61",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "69aa7877-9c06-46df-c2de-f34490f87a26",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -17362,7 +17963,14 @@
"objID": "30a5bf27-28a5-475d-977e-ba3e52c656b7",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "28caddc3-6a59-4f9b-9d51-717016a60d2d",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -17866,7 +18474,14 @@
"objID": "bf979fc3-e2d8-4056-c279-10e524e8f988",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "ac89e60a-a814-4604-f326-b24a49b339b1",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -18058,7 +18673,14 @@
"objID": "aeb27b24-b409-4074-f196-6a1014bb5b93",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "d5daeab8-2257-4a85-a8c6-85bba4409c00",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -18250,7 +18872,14 @@
"objID": "15963c48-8b11-4b4d-c798-d2bd8e60dfa7",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "bff43c13-2f6d-42d6-a40d-2837dd10046e",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -18442,7 +19071,14 @@
"objID": "e21529f9-d973-4648-affa-951b4410e68b",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "0fedfba7-c409-4162-8c85-8e47c06b4a13",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -18634,7 +19270,14 @@
"objID": "c21de9cc-81b9-41c7-d561-e2e1306a5949",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "1ecaa380-6627-4326-af9d-3b1afce0c626",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -19138,7 +19781,14 @@
"objID": "c9a850ac-2a79-4fbb-c1d1-5ecacdaa1a51",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "25b0574e-d454-4bd1-c463-e4280158d14a",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -19330,7 +19980,14 @@
"objID": "f7c01ade-c1bb-4cae-93c0-a99cc10cf827",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "a2e2a4cb-e439-4947-8581-4514de83b8b6",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -19522,7 +20179,14 @@
"objID": "d50284c3-55ae-445a-fde8-442420daa930",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "7264e209-813f-4bf5-ad40-86d3bb451c90",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -19714,7 +20378,14 @@
"objID": "b9c47dc4-7f27-4991-81b8-310795fdb99b",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "a9ff5a22-8524-458f-a1ed-0703994755de",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -19906,7 +20577,14 @@
"objID": "74993f5c-654a-4226-a72c-fcea6bc7510f",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "c39ba4d1-2b09-45ee-d197-ac204eb46eba",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -20410,7 +21088,14 @@
"objID": "30bd60e2-9a1e-403c-a589-b7c5b68f4e01",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "0873c30e-7a52-4235-fc70-bd7e090fb50f",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -20602,7 +21287,14 @@
"objID": "5913b93f-6d44-48c4-eb97-2028e7277884",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "e59d47c0-e3d7-400e-f7c5-2ed7a333ccde",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -20794,7 +21486,14 @@
"objID": "fc3e2fc1-a622-471f-8335-ce6d8102b8e6",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "13d7a33d-f430-42f4-8224-af90610f7c35",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -20986,7 +21685,14 @@
"objID": "9fb46d51-e9fc-4a70-84be-ed17b893854f",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "437719c1-13dc-406d-80bb-4c79d342518c",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -21178,7 +21884,14 @@
"objID": "f875c4f7-b695-4551-b38c-1fe244b0b183",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "becb7f83-5f3a-4066-8eee-50d2de244a86",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -21682,7 +22395,14 @@
"objID": "c5e9e4db-1930-48e7-b55f-15d26c6eb0f9",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "9b85d8ae-3f75-4197-ed1a-2e6cedc13295",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -21874,7 +22594,14 @@
"objID": "a9417b05-14b4-4c5c-ef25-a452195db538",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "25f1eff9-f106-4657-a2a0-ff29938b016a",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -22066,7 +22793,14 @@
"objID": "0c79e159-76c1-467e-b8a5-8d283163b2a7",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "ec11cef5-a968-47d1-a0ac-a598536a2ea7",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -22258,7 +22992,14 @@
"objID": "d1046a00-ddfd-488c-bdea-53f6087f1769",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "fd6070f6-2212-4b18-c5e3-95c8d51056e2",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -22450,7 +23191,14 @@
"objID": "f976bd0f-47e3-4df0-9595-054982a8a404",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "1be19b65-9382-4ea6-9ab8-6f83979521b0",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -22954,7 +23702,14 @@
"objID": "a20c82ab-bd86-48ff-cb4e-0c652e33ce36",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "1e8165cc-a5f9-4223-fb15-3206b33a5fec",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -23146,7 +23901,14 @@
"objID": "aea01293-cf09-4e6e-ac1a-04139c1fb3dc",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "5a8a340a-5f0a-4529-f95b-7aaf830c9089",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -23338,7 +24100,14 @@
"objID": "ae5172fd-060f-495e-f20a-e145be341529",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "c8a5f305-5e64-45ef-abc2-a89dccf88e5c",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -23530,7 +24299,14 @@
"objID": "4ce8b974-c468-4ba6-8b72-eade17528ee2",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "af3b9833-85ca-4e54-b6fa-380ec66a587f",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -23722,7 +24498,14 @@
"objID": "34b6a69d-2004-4929-8426-bc191a53130c",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "820042e1-b656-4080-de6d-7d390fa122a7",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -24226,7 +25009,14 @@
"objID": "0ee500f4-f806-4ab9-e0af-6f0fb6ef85bc",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "bcd303c7-be7d-4efb-c0e2-d9d1c7d8955b",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -24418,7 +25208,14 @@
"objID": "2e19a174-1a00-4797-87be-69f9e5fc9dfe",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "525f346b-62b0-4801-88f2-eb82a08cc9be",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -24610,7 +25407,14 @@
"objID": "60f21270-4f27-43e3-e7db-ceacd0246d8a",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "acd2ef0b-68b2-4e76-8b96-86fad707f641",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -24802,7 +25606,14 @@
"objID": "d60a866b-6512-4bd6-a1f1-5f19e9ab24dd",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "e1b3a64a-4416-48b6-bc3c-313ec83ab06e",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -24994,7 +25805,14 @@
"objID": "f0538888-3c2f-4506-b9c1-e9618567b9b0",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "d4730dfa-994d-4663-f289-1117b6b0a76d",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -25367,7 +26185,14 @@
"objID": "96e651dd-466f-451d-ed5f-b4478f46daa7",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "e3c745de-73f0-42b3-f43e-51eaf901937d",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -25559,7 +26384,14 @@
"objID": "5a638f58-f032-4145-aa85-68c120a15327",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "c804627c-6fa3-41fe-f10a-4ea3df4443c9",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -25751,7 +26583,14 @@
"objID": "b4bb984a-759e-4fc7-9a21-fe2c43c9161d",
"eventName": "RELEASED",
"handlerType": "action",
- "action": "ParameterChanged",
+ "action": "SliderEvent",
+ "userData": 0
+ },
+ {
+ "objID": "02f51639-d8b1-4ba4-802c-061fa22676a7",
+ "eventName": "VALUE_CHANGED",
+ "handlerType": "action",
+ "action": "SliderEvent",
"userData": 0
}
],
@@ -25947,7 +26786,9 @@
"group": "",
"groupIndex": 0,
"tabviewPosition": "TOP",
- "tabviewSize": 60
+ "tabviewSize": 60,
+ "selectedTab": "0",
+ "selectedTabType": "literal"
},
{
"objID": "d2793565-3886-41e7-f9ca-9582d42a2fea",
@@ -26002,7 +26843,8 @@
"pivotY": 0,
"zoom": 256,
"angle": 0,
- "innerAlign": "CENTER"
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
},
{
"objID": "46af83d7-4068-425d-e319-48e291286693",
@@ -26193,6 +27035,7 @@
],
"connectionLines": [],
"localVariables": [],
+ "componentGroups": [],
"userProperties": [],
"name": "ValSettings",
"left": 0,
@@ -26202,35 +27045,639 @@
"isUsedAsUserWidget": false,
"createAtStart": true,
"deleteOnScreenUnload": false
- }
- ],
- "userWidgets": [],
- "lvglStyles": {
- "objID": "a31bd004-35c5-b3fb-5c8b-78ea5c7693b8",
- "styles": [],
- "defaultStyles": {}
- },
- "lvglGroups": {
- "objID": "f2f79c21-8769-ed90-c624-7405d4136ec9",
- "groups": []
- },
- "fonts": [],
- "bitmaps": [
- {
- "objID": "cacba946-d32d-484f-e32d-81f201edb018",
- "name": "arrow_left",
- "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEQAAABGCAYAAAB12zK5AAAACXBIWXMAAAsTAAALEwEAmpwYAAAFymlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4xLWMwMDEgMTE2LmNhODJhZTQsIDIwMjQvMDIvMjItMjE6NTg6NDEgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCAyNC43IChXaW5kb3dzKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjQtMTAtMjBUMTQ6NTU6MjIrMTE6MDAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMjQtMTAtMjBUMTQ6NTU6MjIrMTE6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDI0LTEwLTIwVDE0OjU1OjIyKzExOjAwIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjQ0YjVjZDBlLTJlZTItZGU0Yy04YWY0LWRjNzk5YTc3ODQ5YyIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjk1ODY2N2Y2LWIyNTAtZmM0OS1iYjI0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",
- "bpp": 32,
- "alwaysBuild": false,
- "lvglBinaryOutputFormat": 3,
- "lvglDither": false
},
{
- "objID": "d8e2a441-f1a8-4e35-aa87-4e45f8a70435",
- "name": "arrow_right",
- "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEQAAABGCAYAAAB12zK5AAAACXBIWXMAAAsTAAALEwEAmpwYAAAFymlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4xLWMwMDEgMTE2LmNhODJhZTQsIDIwMjQvMDIvMjItMjE6NTg6NDEgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCAyNC43IChXaW5kb3dzKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjQtMTAtMjBUMTQ6NTQ6NTcrMTE6MDAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMjQtMTAtMjBUMTQ6NTQ6NTcrMTE6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDI0LTEwLTIwVDE0OjU0OjU3KzExOjAwIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmRlMzYzZGYyLTRjOWQtMzM0Ny04OTc5LWU3MzM0NDExNjM2YyIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjA5NzdhNzcyLTdjODEtYmU0Mi1hMDY5LTQ3YjQyMmM1ZTk0YyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOmI2Y2VmOWY4LWI5MWYtNzE0YS05OWY3LTYwNjdmNTY5NjMxOCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmI2Y2VmOWY4LWI5MWYtNzE0YS05OWY3LTYwNjdmNTY5NjMxOCIgc3RFdnQ6d2hlbj0iMjAyNC0xMC0yMFQxNDo1NDo1NysxMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDI0LjcgKFdpbmRvd3MpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpkZTM2M2RmMi00YzlkLTMzNDctODk3OS1lNzMzNDQxMTYzNmMiIHN0RXZ0OndoZW49IjIwMjQtMTAtMjBUMTQ6NTQ6NTcrMTE6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCAyNC43IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5KBONmAAAICElEQVR4nO2cW3PbxhmG313iyIPk2CIOdN2Z2o5dR24ylmTV7sGdJpOb3nSmM7nO/2gv25+T/oKmtZ1OE7sWNdPUjlNbip1RQgCkFDsSCRAEge0FCIqUaBEgQTqm/M7wghKw2Hn47rff7geAMMbwWvuiL7sDPzS9BnJA3FH/zOfzQxtgjEEQBIiiiCAIkl2c47C7u/uXRqPxJ0qpoWnakiRJZqvVOnQsIQS9wzv6Tgjp9mPQcdHfjjom+r61tTW+QwghaDabsG0bjDH4vp/owxjbBYAgCPRKpbLuOE6J4478nSaqVIZMJpNBu92G53nIZDIghMT+gBAGAD+ekwBANwzjnuM4miAIaXQtsVKLIZRStFottFotUJq82esXFvD7t3UAKFlWdd227dLLgJJqUI2guK6bGMqO4+HaZQ2/PnsKANNN01yzbbvE83yaXRyq1GcZSik8z0sMxW8z1Oot/KILBbppmmuO45yeJpSJTLujQCEE8NsBao0OlHP7UJrN5tSgTCwPGRvKooYbIRTNMMzytKBMNDE7CCXKB45SL5TrlyMoTK1UKmXXdc9MOtBOPFPthdKdaoeoC6Xu4vq+U9RKxVhzHOdHk3TKVFL30aEw1Bpur1MUwzDKruue4Xn+UEaaSl9Tb/FFFxoHSj2E8pvzCwCgVCqVsuM4ZyRJSr+fqbd41MUOQImjLpQ9F9cWVdwIoRQNw1y3bTv14TP11e4Apwz1PSGA74dQri+qHaewBcMwyo7jpBpoj1xFjZKCxxGlFL7vo91ugxKyHeecXijXFlUAwO2NbcUwjHVFUa7kcrlvPM8bu29cPp//g+d57weMEQDJ1u9jym157SDwVwHA8wPQIaMoglKtd6AwhtubOwvVanW9WCz+slAoPB4XCtdoNP46VgspqSDzaMf4OQgBgk6gvXZZQ9sP8K+nz4q1Wm2NUvpOLpd7Omg/Ja4IAKfAZ6QbP1XAMgS+P9091gBAlqNQ3pDhMQbEvDxjQIajKOYE/PPzCj59+gwAvtN1fVmW5T4oSTaIOACelKHSpTMnwHgKz5vqqAEB0GYMjaYHFoQOiHVelLzZLfzqbR0Cl8Gtje2ThmGUNU1bzmazIzmFAwCfMXxvt8A4inYc305IcWH0Hu97PrYbwM8XNRBCcPNx7aRpmmuapq2MAuWV32QmhMBvB6juNbH6loLfvrkAAKdM0yzbtn026ZT8ygMBOoHWZ6juuVh9S42gnOxsMv0kCZSZAAIMgHKhCABvmKZZdhznXNyMdmaAAAegXFLwbgdKpVK5Z9v2WVEUh7YxU0CAfihXLyl9Tmk0GkOdMnNAgBc65UQnppwXBOGFi8uZBAIcdkoExbKstXq9fo7n+YFQZhYIMAiKAgDzlmWVG43G+UHDZ6aBAAehFPFe6JT5jlMOQZl5IEA/lJVLShdKtVot27Z9oTdPORZAgAFQLhYBYM6yrHv1ev3NCMqxAQL0Q1m+qODdiwp4gjnLssr1ev0qcMyAABGUcJX83js6LhTzAFCoVqt/Bo4hEMYAkqEoZgXc/I+BR7U6AOwqivJHYMie6qyJMYBmCJSCiPUvq/j4fzUA+F5V1ZVcLrsBHCOH9MF4WMXfQhjPVVW9ms/nN1qtcC/2WDikCyMvovywio8fhTCKxeKKLMubvZtIM++QXmeUv9yHoarq1UKhsNlut/uOn2mH9MF42AdjJZfLbQ7aXpxZh/TCWNuH8UxV1ZV8Pj8QBjCjDjkI4+8dGLqur0iS9NVRG88z55B+GFYfDFmWvxpW2ZsphxyGsQ0A35VKpRVJkp7EKUnMjEP6YHzRhfFM07RlWZafxK35zoRDDsF4HDqjM0wSFateeSCMMWS4DIp5Afe+sPCPfRjdGm/cm3OADhBKCAoyD8ZReFMuZRIAAWNouD5YwBKVMxkDOC6DUzkedx9YuLWxDQA7URnTdd3E/eEAiC0/wBNrD8hQtP3pAmEAeEpwsiDBp0hU/ed4ilPZsPr/WVj93+k44+tRYADhD/SDeMbsdz/Tcf7MCezaw8d7eCsEwUJOwCefG7gTwtjuJF2HYCS6HWJ+fv6DRqPxfgAQMDAkrMCPqYAFbIkF/upe0wMXY85jDKBcGEA//a/ZhVEsFpey2ezWODfLAAD3/PnzjwB8BABzc3NjNZZEQRBAlmU0XffD+t7eKp+hCIZ4NYKh5kXcvW/hk80dIHTGUjab3fI8L1EAHaS+WSbpI2KjKggC8DwPjuPAms1inHO6zsiLuPvAws0wgNZ0XV/OZrNbo8aMg5r6tBvBEEURjDGw8Ga/I3UQRmc22dY0bUmW5W/GHSa9miqQgzDiKAqgxX4Ytc5sksqtmL2aGpABzhh6TuSMEIaJWxs7AFArlUrLkiRtJU264mgqQMaBoXQC6K3NHQCkpmnqFUmSvk3bGZEmDmRcGHfum7gdzibV06dLy6IofjsJZ0SaKJCRYWQiZ0QwSLVU0q8IglBJM4AO0sSW/6M7g0IphM4IhwmsUkm/IknSxGEAE3LIqDAyHIHCC/jsvhklXaau68uSJFXSSLriKHWHjAID2J9N7vTDWJqWM7r9SLOxUWEAwILM498PugHU1HV9SZZlY1KzyYuU2pAJggCCIEAQhERLgGgQ3Hm0ja93mwBgqKq6JMvywLdETFqpAAmCABzHged5+L4f+7ze1D2C0YkZLwUGkAIQxhhEUYQgCGCMxX4+FwjfKkEpPQEAhFJDe4nOiERev4OoXzNThkhL/wcjEeb4y1nZawAAAABJRU5ErkJggg==",
- "bpp": 32,
- "alwaysBuild": false,
+ "objID": "0eeb9dfb-34ec-4f98-bdbf-0138ed759fac",
+ "components": [
+ {
+ "objID": "bc8823cf-5bf1-4a64-f0af-6055d6f03291",
+ "type": "LVGLScreenWidget",
+ "left": 0,
+ "top": 0,
+ "width": 800,
+ "height": 480,
+ "customInputs": [],
+ "customOutputs": [],
+ "style": {
+ "objID": "3e16c93e-94cb-4b5a-c73b-e5a1b07275b1",
+ "useStyle": "default",
+ "conditionalStyles": [],
+ "childStyles": []
+ },
+ "timeline": [],
+ "eventHandlers": [],
+ "leftUnit": "px",
+ "topUnit": "px",
+ "widthUnit": "px",
+ "heightUnit": "px",
+ "children": [
+ {
+ "objID": "46d90a71-b7c4-4129-8d9a-82ffa0daf619",
+ "type": "LVGLContainerWidget",
+ "left": 0,
+ "top": 0,
+ "width": 800,
+ "height": 480,
+ "customInputs": [],
+ "customOutputs": [],
+ "style": {
+ "objID": "bee8943a-3550-4cd8-a6a0-5db874f735ae",
+ "useStyle": "default",
+ "conditionalStyles": [],
+ "childStyles": []
+ },
+ "timeline": [],
+ "eventHandlers": [],
+ "identifier": "ui_TunerTouchGestureContainer",
+ "leftUnit": "px",
+ "topUnit": "px",
+ "widthUnit": "px",
+ "heightUnit": "px",
+ "children": [
+ {
+ "objID": "cf50bd8d-7188-4992-a6ce-27b069f1b0a8",
+ "type": "LVGLPanelWidget",
+ "left": 0,
+ "top": 0,
+ "width": 800,
+ "height": 51,
+ "customInputs": [],
+ "customOutputs": [],
+ "style": {
+ "objID": "42d65699-e8a9-4a0c-b99d-44ff0f0cb254",
+ "useStyle": "default",
+ "conditionalStyles": [],
+ "childStyles": []
+ },
+ "timeline": [],
+ "eventHandlers": [],
+ "identifier": "ui_TunerTopPanel",
+ "leftUnit": "px",
+ "topUnit": "px",
+ "widthUnit": "px",
+ "heightUnit": "px",
+ "children": [
+ {
+ "objID": "eeabf524-ba1b-43e2-ae6d-28a73b856d7d",
+ "type": "LVGLLabelWidget",
+ "left": 110,
+ "top": -15,
+ "width": 508,
+ "height": 38,
+ "customInputs": [],
+ "customOutputs": [],
+ "style": {
+ "objID": "ad97e3da-b712-4c44-dbcb-ede9a98cc5ec",
+ "useStyle": "default",
+ "conditionalStyles": [],
+ "childStyles": []
+ },
+ "timeline": [],
+ "eventHandlers": [],
+ "identifier": "ui_TunerHeadingLabel",
+ "leftUnit": "px",
+ "topUnit": "px",
+ "widthUnit": "px",
+ "heightUnit": "px",
+ "children": [],
+ "widgetFlags": "CLICK_FOCUSABLE|GESTURE_BUBBLE|PRESS_LOCK|SNAPPABLE",
+ "hiddenFlagType": "literal",
+ "clickableFlagType": "literal",
+ "flagScrollbarMode": "",
+ "flagScrollDirection": "",
+ "scrollSnapX": "",
+ "scrollSnapY": "",
+ "checkedStateType": "literal",
+ "disabledStateType": "literal",
+ "states": "",
+ "localStyles": {
+ "objID": "1f5c4f92-ec23-4771-90a9-a285c399aab5",
+ "definition": {
+ "MAIN": {
+ "DEFAULT": {
+ "text_color": "#FFFFFF",
+ "text_font": "MONTSERRAT_34",
+ "text_align": "CENTER"
+ }
+ }
+ }
+ },
+ "group": "",
+ "groupIndex": 0,
+ "text": "Tonex Controller",
+ "textType": "literal",
+ "longMode": "WRAP",
+ "recolor": false
+ },
+ {
+ "objID": "7ec40713-22f4-437f-f496-f7d88b371f6d",
+ "type": "LVGLImageWidget",
+ "left": -22,
+ "top": -17,
+ "width": 132,
+ "height": 46,
+ "customInputs": [],
+ "customOutputs": [],
+ "style": {
+ "objID": "9e377b79-d9d1-4e59-fc5f-95bcc052247d",
+ "useStyle": "default",
+ "conditionalStyles": [],
+ "childStyles": []
+ },
+ "timeline": [],
+ "eventHandlers": [],
+ "identifier": "ui_TunerLogo",
+ "leftUnit": "px",
+ "topUnit": "px",
+ "widthUnit": "content",
+ "heightUnit": "content",
+ "children": [],
+ "widgetFlags": "ADV_HITTEST|CLICK_FOCUSABLE|GESTURE_BUBBLE|PRESS_LOCK|SCROLLABLE|SCROLL_CHAIN_HOR|SCROLL_CHAIN_VER|SCROLL_ELASTIC|SCROLL_MOMENTUM|SCROLL_WITH_ARROW|SNAPPABLE",
+ "hiddenFlagType": "literal",
+ "clickableFlagType": "literal",
+ "flagScrollbarMode": "",
+ "flagScrollDirection": "",
+ "scrollSnapX": "",
+ "scrollSnapY": "",
+ "checkedStateType": "literal",
+ "disabledStateType": "literal",
+ "states": "",
+ "localStyles": {
+ "objID": "2f1ff4b3-9c15-4825-b313-9f6176ed218a"
+ },
+ "group": "",
+ "groupIndex": 0,
+ "image": "smythbuilt",
+ "setPivot": false,
+ "pivotX": 0,
+ "pivotY": 0,
+ "zoom": 256,
+ "angle": 0,
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
+ }
+ ],
+ "widgetFlags": "CLICK_FOCUSABLE|GESTURE_BUBBLE|PRESS_LOCK|SCROLL_CHAIN_HOR|SCROLL_CHAIN_VER|SCROLL_ELASTIC|SCROLL_MOMENTUM|SCROLL_WITH_ARROW|SNAPPABLE",
+ "hiddenFlagType": "literal",
+ "clickableFlag": true,
+ "clickableFlagType": "literal",
+ "flagScrollbarMode": "",
+ "flagScrollDirection": "",
+ "scrollSnapX": "",
+ "scrollSnapY": "",
+ "checkedStateType": "literal",
+ "disabledStateType": "literal",
+ "states": "",
+ "localStyles": {
+ "objID": "a9927532-6d01-4a86-e13e-59436065837c",
+ "definition": {
+ "MAIN": {
+ "DEFAULT": {
+ "bg_color": "#2A2A2A",
+ "radius": 0
+ }
+ }
+ }
+ },
+ "group": "",
+ "groupIndex": 0
+ },
+ {
+ "objID": "a7ce5b96-d153-4a2e-f70a-d10868cd1dd1",
+ "type": "LVGLLabelWidget",
+ "left": 6,
+ "top": 60,
+ "width": 789,
+ "height": 60,
+ "customInputs": [],
+ "customOutputs": [],
+ "style": {
+ "objID": "5dd47c21-2d1b-44ea-e29d-2b37da1d5653",
+ "useStyle": "default",
+ "conditionalStyles": [],
+ "childStyles": []
+ },
+ "timeline": [],
+ "eventHandlers": [
+ {
+ "objID": "ce51feb9-4370-4d1c-fe7e-ed878419489b",
+ "eventName": "LONG_PRESSED",
+ "handlerType": "action",
+ "action": "EnableSkinEdit",
+ "userData": 0
+ }
+ ],
+ "identifier": "ui_TunerHeading",
+ "leftUnit": "px",
+ "topUnit": "px",
+ "widthUnit": "px",
+ "heightUnit": "px",
+ "children": [],
+ "widgetFlags": "CLICK_FOCUSABLE|GESTURE_BUBBLE|PRESS_LOCK|SCROLLABLE|SCROLL_CHAIN_HOR|SCROLL_CHAIN_VER|SCROLL_ELASTIC|SCROLL_MOMENTUM|SCROLL_WITH_ARROW|SNAPPABLE",
+ "hiddenFlagType": "literal",
+ "clickableFlag": true,
+ "clickableFlagType": "literal",
+ "flagScrollbarMode": "",
+ "flagScrollDirection": "",
+ "scrollSnapX": "",
+ "scrollSnapY": "",
+ "checkedStateType": "literal",
+ "disabledStateType": "literal",
+ "states": "",
+ "localStyles": {
+ "objID": "f52e6474-71ea-42ed-a5d5-1864515eb83e",
+ "definition": {
+ "MAIN": {
+ "SCROLLED": {
+ "text_font": "MONTSERRAT_14"
+ },
+ "DEFAULT": {
+ "text_color": "D1A60C",
+ "text_font": "MONTSERRAT_48",
+ "text_align": "CENTER"
+ }
+ }
+ }
+ },
+ "group": "",
+ "groupIndex": 0,
+ "text": "Tuner",
+ "textType": "literal",
+ "longMode": "DOT",
+ "recolor": false
+ },
+ {
+ "objID": "43188d16-a410-4c16-ccf0-5204a35dcd4e",
+ "type": "LVGLArcWidget",
+ "left": 224,
+ "top": 130,
+ "width": 352,
+ "height": 350,
+ "customInputs": [],
+ "customOutputs": [],
+ "style": {
+ "objID": "8803bade-939a-4a4a-9863-c5372373d0ff",
+ "useStyle": "default",
+ "conditionalStyles": [],
+ "childStyles": []
+ },
+ "timeline": [],
+ "eventHandlers": [],
+ "identifier": "ui_TunerArc",
+ "leftUnit": "px",
+ "topUnit": "px",
+ "widthUnit": "px",
+ "heightUnit": "px",
+ "children": [],
+ "widgetFlags": "CLICK_FOCUSABLE|GESTURE_BUBBLE|PRESS_LOCK|SCROLL_ELASTIC|SCROLL_MOMENTUM|SCROLL_WITH_ARROW|SNAPPABLE",
+ "hiddenFlagType": "literal",
+ "clickableFlag": true,
+ "clickableFlagType": "literal",
+ "flagScrollbarMode": "",
+ "flagScrollDirection": "",
+ "scrollSnapX": "",
+ "scrollSnapY": "",
+ "checkedStateType": "literal",
+ "disabledStateType": "literal",
+ "states": "",
+ "localStyles": {
+ "objID": "d69b1ef2-c314-4ce4-aa7d-ceaac6a77a96",
+ "definition": {
+ "MAIN": {
+ "DEFAULT": {
+ "arc_width": 25
+ }
+ },
+ "KNOB": {
+ "DEFAULT": {
+ "bg_color": "#0cef1c"
+ }
+ },
+ "INDICATOR": {
+ "DEFAULT": {
+ "arc_color": "513D2B",
+ "arc_width": 25
+ }
+ }
+ }
+ },
+ "group": "",
+ "groupIndex": 0,
+ "useAngle": false,
+ "rangeMin": -50,
+ "rangeMinType": "literal",
+ "rangeMax": 50,
+ "rangeMaxType": "literal",
+ "value": 0,
+ "valueType": "literal",
+ "previewValue": "25",
+ "mode": "SYMMETRICAL",
+ "startAngle": 135,
+ "startAngleType": "literal",
+ "previewStartAngle": "135",
+ "endAngle": 45,
+ "endAngleType": "literal",
+ "previewEndAngle": "45",
+ "bgStartAngle": 135,
+ "bgStartAngleType": "literal",
+ "previewBgStartAngle": "135",
+ "bgEndAngle": 45,
+ "bgEndAngleType": "literal",
+ "previewBgEndAngle": "45",
+ "rotation": 0,
+ "rotationType": "literal",
+ "previewRotation": "0"
+ },
+ {
+ "objID": "33ac8670-a254-46a5-daba-e60be723a47a",
+ "type": "LVGLLabelWidget",
+ "left": 325,
+ "top": 253,
+ "width": 150,
+ "height": 52,
+ "customInputs": [],
+ "customOutputs": [],
+ "style": {
+ "objID": "579037ac-5570-4a42-bb32-b7c516ec9eb4",
+ "useStyle": "default",
+ "conditionalStyles": [],
+ "childStyles": []
+ },
+ "timeline": [],
+ "eventHandlers": [],
+ "identifier": "ui_TunerNoteLabel",
+ "leftUnit": "px",
+ "topUnit": "px",
+ "widthUnit": "px",
+ "heightUnit": "content",
+ "children": [],
+ "widgetFlags": "CLICK_FOCUSABLE|GESTURE_BUBBLE|PRESS_LOCK|SCROLLABLE|SCROLL_CHAIN_HOR|SCROLL_CHAIN_VER|SCROLL_ELASTIC|SCROLL_MOMENTUM|SCROLL_WITH_ARROW|SNAPPABLE",
+ "hiddenFlagType": "literal",
+ "clickableFlagType": "literal",
+ "flagScrollbarMode": "",
+ "flagScrollDirection": "",
+ "scrollSnapX": "",
+ "scrollSnapY": "",
+ "checkedStateType": "literal",
+ "disabledStateType": "literal",
+ "states": "",
+ "localStyles": {
+ "objID": "90f7fefa-7eda-4477-aff4-b677726fb119",
+ "definition": {
+ "MAIN": {
+ "DEFAULT": {
+ "text_font": "MONTSERRAT_48",
+ "text_align": "CENTER"
+ }
+ }
+ }
+ },
+ "group": "",
+ "groupIndex": 0,
+ "text": "--",
+ "textType": "literal",
+ "longMode": "WRAP",
+ "recolor": false
+ },
+ {
+ "objID": "91428fa1-efdc-40f2-b553-e4805f36c1ee",
+ "type": "LVGLLabelWidget",
+ "left": 17,
+ "top": 387,
+ "width": 125,
+ "height": 27,
+ "customInputs": [],
+ "customOutputs": [],
+ "style": {
+ "objID": "cd9f1f93-f176-4624-869a-e0a76431b0b0",
+ "useStyle": "default",
+ "conditionalStyles": [],
+ "childStyles": []
+ },
+ "timeline": [],
+ "eventHandlers": [],
+ "identifier": "ui_TunerReferenceHeadingLabel",
+ "leftUnit": "px",
+ "topUnit": "px",
+ "widthUnit": "content",
+ "heightUnit": "content",
+ "children": [],
+ "widgetFlags": "CLICK_FOCUSABLE|GESTURE_BUBBLE|PRESS_LOCK|SCROLLABLE|SCROLL_CHAIN_HOR|SCROLL_CHAIN_VER|SCROLL_ELASTIC|SCROLL_MOMENTUM|SCROLL_WITH_ARROW|SNAPPABLE",
+ "hiddenFlagType": "literal",
+ "clickableFlagType": "literal",
+ "flagScrollbarMode": "",
+ "flagScrollDirection": "",
+ "scrollSnapX": "",
+ "scrollSnapY": "",
+ "checkedStateType": "literal",
+ "disabledStateType": "literal",
+ "states": "",
+ "localStyles": {
+ "objID": "258c84b7-dcac-40fa-926d-c0e0811e7b22",
+ "definition": {
+ "MAIN": {
+ "DEFAULT": {
+ "text_font": "MONTSERRAT_24",
+ "text_color": "D1A60C"
+ }
+ }
+ }
+ },
+ "group": "",
+ "groupIndex": 0,
+ "text": "Reference",
+ "textType": "literal",
+ "longMode": "WRAP",
+ "recolor": false
+ },
+ {
+ "objID": "e9d0a893-27f1-4fef-d10a-0b05387611c9",
+ "type": "LVGLLabelWidget",
+ "left": 17,
+ "top": 417,
+ "width": 124,
+ "height": 38,
+ "customInputs": [],
+ "customOutputs": [],
+ "style": {
+ "objID": "f0d1f016-00c9-4213-a565-b57ebe94f2ad",
+ "useStyle": "default",
+ "conditionalStyles": [],
+ "childStyles": []
+ },
+ "timeline": [],
+ "eventHandlers": [],
+ "identifier": "ui_TunerReferenceLabel",
+ "leftUnit": "px",
+ "topUnit": "px",
+ "widthUnit": "content",
+ "heightUnit": "content",
+ "children": [],
+ "widgetFlags": "CLICK_FOCUSABLE|GESTURE_BUBBLE|PRESS_LOCK|SCROLLABLE|SCROLL_CHAIN_HOR|SCROLL_CHAIN_VER|SCROLL_ELASTIC|SCROLL_MOMENTUM|SCROLL_WITH_ARROW|SNAPPABLE",
+ "hiddenFlagType": "literal",
+ "clickableFlagType": "literal",
+ "flagScrollbarMode": "",
+ "flagScrollDirection": "",
+ "scrollSnapX": "",
+ "scrollSnapY": "",
+ "checkedStateType": "literal",
+ "disabledStateType": "literal",
+ "states": "",
+ "localStyles": {
+ "objID": "c614238c-d491-453b-aeaf-1907e52c645e",
+ "definition": {
+ "MAIN": {
+ "DEFAULT": {
+ "text_font": "MONTSERRAT_34"
+ }
+ }
+ }
+ },
+ "group": "",
+ "groupIndex": 0,
+ "text": "440 Hz",
+ "textType": "literal",
+ "longMode": "WRAP",
+ "recolor": false
+ },
+ {
+ "objID": "a9107b25-8e72-4194-de27-df111d0c7d9a",
+ "type": "LVGLImageWidget",
+ "left": 696,
+ "top": 400,
+ "width": 87,
+ "height": 70,
+ "customInputs": [],
+ "customOutputs": [],
+ "style": {
+ "objID": "6c7899c2-639e-4e53-d8de-6161a40d10f6",
+ "useStyle": "default",
+ "conditionalStyles": [],
+ "childStyles": []
+ },
+ "hiddenInEditor": false,
+ "timeline": [],
+ "eventHandlers": [
+ {
+ "objID": "bff50cf5-af45-4940-ccbb-4ea816edef71",
+ "eventName": "PRESSED",
+ "handlerType": "action",
+ "action": "TunerClose",
+ "userData": 0
+ }
+ ],
+ "identifier": "ui_TunerOKTick",
+ "leftUnit": "px",
+ "topUnit": "px",
+ "widthUnit": "content",
+ "heightUnit": "content",
+ "children": [],
+ "widgetFlags": "ADV_HITTEST|CLICK_FOCUSABLE|GESTURE_BUBBLE|PRESS_LOCK|SCROLLABLE|SCROLL_CHAIN_HOR|SCROLL_CHAIN_VER|SCROLL_ELASTIC|SCROLL_MOMENTUM|SCROLL_WITH_ARROW|SNAPPABLE",
+ "hiddenFlag": false,
+ "hiddenFlagType": "literal",
+ "clickableFlag": true,
+ "clickableFlagType": "literal",
+ "flagScrollbarMode": "",
+ "flagScrollDirection": "",
+ "scrollSnapX": "",
+ "scrollSnapY": "",
+ "checkedStateType": "literal",
+ "disabledStateType": "literal",
+ "states": "",
+ "localStyles": {
+ "objID": "8b094a42-303d-40e3-bfb5-f914b84e4979"
+ },
+ "group": "",
+ "groupIndex": 0,
+ "image": "tick",
+ "setPivot": false,
+ "pivotX": 0,
+ "pivotY": 0,
+ "zoom": 256,
+ "angle": 0,
+ "innerAlign": "CENTER",
+ "sizeMode": "VIRTUAL"
+ }
+ ],
+ "widgetFlags": "CLICK_FOCUSABLE|PRESS_LOCK|SCROLL_CHAIN_HOR|SCROLL_CHAIN_VER|SCROLL_ELASTIC|SCROLL_MOMENTUM|SCROLL_WITH_ARROW|SNAPPABLE",
+ "hiddenFlagType": "literal",
+ "clickableFlag": true,
+ "clickableFlagType": "literal",
+ "flagScrollbarMode": "",
+ "flagScrollDirection": "",
+ "scrollSnapX": "",
+ "scrollSnapY": "",
+ "checkedStateType": "literal",
+ "disabledStateType": "literal",
+ "states": "",
+ "localStyles": {
+ "objID": "74d08ed5-7394-4089-b19f-594fbea1bec0"
+ },
+ "group": "",
+ "groupIndex": 0
+ }
+ ],
+ "widgetFlags": "CLICKABLE|PRESS_LOCK|CLICK_FOCUSABLE|GESTURE_BUBBLE|SNAPPABLE|SCROLLABLE|SCROLL_ELASTIC|SCROLL_MOMENTUM|SCROLL_CHAIN_HOR|SCROLL_CHAIN_VER",
+ "hiddenFlagType": "literal",
+ "clickableFlag": true,
+ "clickableFlagType": "literal",
+ "checkedStateType": "literal",
+ "disabledStateType": "literal",
+ "states": "",
+ "localStyles": {
+ "objID": "3a48b3b4-9051-488b-df31-41f8d8ee2544",
+ "definition": {
+ "MAIN": {
+ "DEFAULT": {
+ "bg_color": "#1F1F1F"
+ }
+ }
+ }
+ },
+ "groupIndex": 0
+ }
+ ],
+ "connectionLines": [],
+ "localVariables": [],
+ "componentGroups": [],
+ "userProperties": [],
+ "name": "Tuner",
+ "left": 0,
+ "top": 0,
+ "width": 800,
+ "height": 480,
+ "isUsedAsUserWidget": false,
+ "createAtStart": true,
+ "deleteOnScreenUnload": false
+ }
+ ],
+ "userWidgets": [],
+ "lvglStyles": {
+ "objID": "a31bd004-35c5-b3fb-5c8b-78ea5c7693b8",
+ "styles": [],
+ "defaultStyles": {}
+ },
+ "lvglGroups": {
+ "objID": "f2f79c21-8769-ed90-c624-7405d4136ec9",
+ "groups": []
+ },
+ "fonts": [],
+ "bitmaps": [
+ {
+ "objID": "cacba946-d32d-484f-e32d-81f201edb018",
+ "name": "arrow_left",
+ "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEQAAABGCAYAAAB12zK5AAAACXBIWXMAAAsTAAALEwEAmpwYAAAFymlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4xLWMwMDEgMTE2LmNhODJhZTQsIDIwMjQvMDIvMjItMjE6NTg6NDEgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCAyNC43IChXaW5kb3dzKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjQtMTAtMjBUMTQ6NTU6MjIrMTE6MDAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMjQtMTAtMjBUMTQ6NTU6MjIrMTE6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDI0LTEwLTIwVDE0OjU1OjIyKzExOjAwIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjQ0YjVjZDBlLTJlZTItZGU0Yy04YWY0LWRjNzk5YTc3ODQ5YyIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjk1ODY2N2Y2LWIyNTAtZmM0OS1iYjI0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",
+ "bpp": 32,
+ "alwaysBuild": false,
+ "lvglBinaryOutputFormat": 3,
+ "lvglDither": false
+ },
+ {
+ "objID": "d8e2a441-f1a8-4e35-aa87-4e45f8a70435",
+ "name": "arrow_right",
+ "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEQAAABGCAYAAAB12zK5AAAACXBIWXMAAAsTAAALEwEAmpwYAAAFymlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4xLWMwMDEgMTE2LmNhODJhZTQsIDIwMjQvMDIvMjItMjE6NTg6NDEgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCAyNC43IChXaW5kb3dzKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjQtMTAtMjBUMTQ6NTQ6NTcrMTE6MDAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMjQtMTAtMjBUMTQ6NTQ6NTcrMTE6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDI0LTEwLTIwVDE0OjU0OjU3KzExOjAwIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmRlMzYzZGYyLTRjOWQtMzM0Ny04OTc5LWU3MzM0NDExNjM2YyIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjA5NzdhNzcyLTdjODEtYmU0Mi1hMDY5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",
+ "bpp": 32,
+ "alwaysBuild": false,
"lvglBinaryOutputFormat": 3,
"lvglDither": false
},
@@ -27250,6 +28697,15 @@
"alwaysBuild": false,
"lvglBinaryOutputFormat": 3,
"lvglDither": false
+ },
+ {
+ "objID": "61648175-8afd-4263-b79e-a5cff79c135a",
+ "name": "tuner",
+ "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEYAAABHCAYAAAC6cjEhAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFymlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4xLWMwMDEgMTE2LmNhODJhZTQsIDIwMjQvMDIvMjItMjE6NTg6NDEgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCAyNC43IChXaW5kb3dzKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjYtMDctMzBUMDk6NTU6MTQrMTA6MDAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMjYtMDctMzBUMDk6NTU6MTQrMTA6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDI2LTA3LTMwVDA5OjU1OjE0KzEwOjAwIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjk5YTg5Y2Y3LTUwZWQtM2U0MS05MmJkLWVjNWY5ZGRmNTE4MyIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOmFmYmU5N2UxLTJkY2YtZGE0My05YjRi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",
+ "bpp": 32,
+ "alwaysBuild": false,
+ "lvglBinaryOutputFormat": 3,
+ "lvglDither": false
}
],
"colors": [],
diff --git a/ui_design_800x480land/assets/tuner.png b/ui_design_800x480land/assets/tuner.png
new file mode 100644
index 00000000..74a617e7
Binary files /dev/null and b/ui_design_800x480land/assets/tuner.png differ