V4.0 testing [was V3.7]

Thanks, yes tried that too, it still got into a loop repeatedly calling the page callback once the setActiveControlSet was called once. It seems to be something to do with the first time it is called after a unit reset. Maybe the new v3.7 internal state logic that remembers which control set is active per page does not handle the “first page load” case somehow ?

Hi @Phommed

I will look at that. There has been changes in that area.

This issue is fixed. I do not think it is related. I will review that though.

This is fixed.

It is going actually rather well :wink: I have received lots of valuable feedback and it led me to reiterating the scope of v3.7. It will be actually released as 4.0. I did not post the latest betas because the recent betas store presets differently (on the device). That means that once you update past 3.7.0g, switching back requires reuploading all presets to the device. The forward going update migrates the data automatically. In the same time I understand that it would be good to have you guys see what I have done - I will finish a few small things and will share it here.

To give you and idea what has been done:

  1. The firmware supports now fully automated updates. Switching to the USB disk mode will not be required. Users will simply press an update button in the web app. (like mk1 users do)
  2. The firmware can now update the bootloader. This means that we will be able to improve the bootloader itself.
  3. Lua has been extended with calls to persists and load a Lua table. This allows a preset to store arbitrary data. The data is stored as a JSON. The sysex calls to upload and fetch the JSON have been added too.
  4. A preset devices can be now overridden by providing a custom device list. That means that users who need to change MIDI ports and channels will not need to make a copy of the preset. The override list can be uploaded / fetched using the sysex (support will be added to the web app). I am currently working on the UI window that allows making the changes on the device.
  5. A “preset window” has been added. It provides access to up to 12 custom preset functions (defined in Lua table) and other preset related actions (sending all preset values, setting all values to defaults, hard randomizing all parameters). I think this was requested by you (in a way).
  6. A “Performance page” has been added. It is an extra page that can host references to controls in the preset. This allows users to make their custom / performance page without modifying the original preset. The performance page definition can be upoaded / fetched with the sysex (support will be added to the web editor)
  1. Snapshots implementation has been reviewed and updated.
  2. A simple Settings window has been added. It allows users to set brightness of the LCD. It is just a starting point for adding more setting options in the future.
  3. I am fixing issues as they get reported.
13 Likes

Lots of very cool things here!

Do you plan on keeping the boot menu with firmware switching and USB drive, or do you feel this will be unnecessary now that things are being automated?

Sorry for the late reply on this, it’s been a strange few weeks.

I tried to test today, upgraded to the newest firmware I saw on the thread (f).

I now see the changes work (I used this link), but sometimes they do not, and then all buttons are unresponsive and I have to reset the Electra to get it to work again.

As a side note, when buttons have been reassigned, this can break the ability to use the top-left + bottom right button to go into the firmware menu. I assume this is unwanted behaviour.

Excited about this! Any chance we might see proper support for macro controls? I did see this thread but it’d be cool if there were something in the editor like the Elektron Analog 4’s Performance knob configuration:

2 Likes

Maybe a preset that doesn’t make use of the different control sets (see my reaper plugin KnobConnector: Control any plugin with your E1 in REAPER 7) could tell that to the E1 OS and instead gain control over the three buttons on the left?

Also, presets that have no use for the snapshot functionality (also true for my plugin) could be allowed to reuse the snapshot button.

1 Like

Did you ever find out more about this? I’m wondering if the slowdowns are happening due to the group drawing (those groups that are drawn between the control rows with thin lines).

yes, I did. I can see that some of the visual changes you run there trigger repaints of all components on the screen. And this is happening several (too many) times for each button press. There is a manual away of resolving that by using Lua function to stop and resume the window repaint processing. That would definitely improve things, I am trying, however, as part of the work on the 3.7/4.0 make changes so that the (lua) preset developers do not need to do this manual control of the repaint process.

The most recent beta will be shared here tomorrow. I just need to finish description of the changes so that you know what has changed and how to use it.

7 Likes

found minor issue with preset loading. I am working on so most likely today :slight_smile:

3 Likes

This is the 4.0.0a beta release.

firmware-4.0.0a.srec.zip (1.7 MB)

There are several changes in this version. I’ll start with an overview and share more details later.

In addition to the new features introduced in 3.7, version 4.0 is designed to address long-standing challenges:

  • Preset Lua Functions: Presets can now define up to 12 Lua functions linked to the knobs (hardware buttons are not supported yet, but we’re getting there). This is managed through the new Preset Menu window, which acts as an extra window for preset-specific actions and allows developers to customize it.
  • Adjustable Preset Devices: Preset devices (port/channels) can now be adjusted without modifying the original preset. This can be done directly on the controller via the new Device List window or by uploading the device list as a SysEx message.
  • Enhanced Snapshots: Snapshots have been completely reworked to improve reliability and enable parameter morphing/blending between two snapshots.
  • Router Configurations: Most router configurations can now be done directly on the controller using the new Router window.
  • New Performance Page: A new Performance page has been added. It serves as an extra (13th) page that allows references to any control in the preset.
  • Basic Settings Window: A basic Settings window has been introduced. Currently, it supports LCD brightness adjustment.
  • Improved MIDI Forwarding: MIDI message forwarding, including clock messages, has been improved to minimize latency and jitter.

!! IMPORTANT !!

Version 4.0 uses a different file structure to store presets, snapshots, and preset Lua scripts. When upgrading to 4.0 for the first time, the firmware will automatically migrate the data.

However, if you later downgrade to 3.6.1 or an earlier version, those versions will no longer recognize the migrated files. You will need to re-upload your presets.

If you have any valuable data on the controller (e.g., snapshots), it is strongly recommended to back up the SD card using the bootloader before upgrading to 4.0.

As you will notice, there are many changes to the Electra One user interface. I am trying to find ways to make it possible to provide easy routes to different types of functionality. I am also trying to make it so that almost any internal function can be customized and triggered via MIDI using an external MIDI controller. I will be very happy for any type of feedback and suggestions.

I carefully read all it suggestions and bug reports in this thread. If you feel it was not resolved, it is not because I ignore it, I just need a bit of extra time to address that.

10 Likes

Very interested in trying this out. Is there any documentation available for this?

The features:

New windows

As the firmware allows users to completely reconfigure the hardware buttons to their liking, we lost a way to make sure that certain functions are always available and reachable. To resolve this, there are three new actions that can be invoked by swiping the top port of the screen. Not everybody is a fan of swiping the screen, therefore any of these three actions can be mapped to the hardware buttons or an external MIDI command. The swipe is there to make sure, that these three functions are always available no matter what your configuration is.

The swipe-down gesture recognizes three areas in the top part of the screen. Their borders are indicated with subtle dotted lines in the top MIDI port activity bar.

  • Swiping on the left side opens the Preset Menu. A window with actions related to the preset.
  • Swiping at the centre open the Performance Page.
  • Swiping on the right side open the General Menu.

The Preset Menu

Currently, it has a few functions to manipulate control values (to send all out, to reset all to defaults, and to hard randomize everything). It also checks if controller.potFunctions Lua table is present. If it is, it will populate the 12 on-screen knobs accordingly. An example can be found at: Custom pot functions

for @Phommed, the Preset menu is the one that allows you to assign you custom Lua functions to the 12 on-screen buttons / knobs. For your purpose, it might be more useful to assign it to a hardware button by using the “openPresetMenu” as the “primary” command.

The Performance Page
This is basically 13th preset page. It cannot, however, host standard controls like other pages do. Instead it may have a collection of references to controls within the preset. Such a reference will display the referenced control. This way, the performance page allows you to create a customized page without modifying the original preset. The performance page can display groups and I am also planning to add macro controls (a reference to multiple controls) and a data-pipe control (means of receiving data from other presets, such as MIDI LFO).

Currently the performance page definition can be uploaded to the controller only by using a Sysex message. The web editor will be extended after the feature is fully implemented. As with other Electra One Sysex messages, the performance page is defined using the JSON.

An example of a peformance page with one reference and one group:

upload-performance.syx (427 Bytes)

Toggling the Performance page on and off can be done by using “togglePerformancePage” command in hardware button configuration or via the external MIDI control.

The General Menu
The general menu has buttons to reach most of the Electra One functionality. It can be also used to enter the bootloader by hitting the REBOOT button with the right-bottom button pressed.

Please note
The swipe gestures can be improved. I will play around with it. Any window can be closed by pressing any button or repeating the swipe gesture.

This is an example of the configuration file that shows how to map the functions to the hardware buttons and MIDI. You can test it using the sandbox:

{
  "version": 2,
  "router": {
    "routes": [
      {
        "srcInterface": "midiUsbHost",
        "srcPort": "port1",
        "srcChannel": 0,
        "destSystem": "midiControl"
      }
    ]
  },
  "midiControl": {
    "enabled": true,
    "mappings": [
      {
        "midiMessage": "noteOn",
        "parameterNumber": 40,
        "command": "openPresetMenu"
      },
      {
        "midiMessage": "noteOff",
        "parameterNumber": 40,
        "command": "closePopupWindow"
      }
    ]
  },
  "hardware": {
    "useDefaultLayout": false,
    "usePotTouchShortcuts": true,
    "buttons": {
      "leftTop": {
        "primary": "switchControlSetPrev"
      },
      "leftMiddle": {
        "primary": "switchControlSetNext"
      },
      "leftBottom": {
        "primary": "openPresetMenu"
      },
      "rightTop": {
        "primary": "togglePerformancePage"
      },
      "rightMiddle": {
        "primary": "openPresetsMenu"
      },
      "rightBottom": {
        "primary": "openPagesMenu"
      }
    }
  }
}
2 Likes

I am working on it. To test it out, check the example JSON I posted a minute ago. It shows how to trigger commands on MIDI and from hardware buttons.

This is the list of commands that can be used now:

"openSnapshots"
"openCaptures"
"openPresetsMenu"
"openUsbHost"
"openSettings"
"openPagesMenu"
"openPresetMenu"
"openMenu"
"togglePerformancePage"
"openDetail"
"closeDetail"
"closePopupWindow"
"requestPatch"
"switchPreset"
"switchPresetNext"
"switchPresetPrev"
"switchPage"
"browsePage"
"switchPageNext"
"switchPagePrev"
"switchControlSet1"
"switchControlSet2"
"switchControlSet3"
"switchControlSetNext"
"switchControlSetPrev"
"switchSnapshotBank"
"togglePotSensitivity"
"setDefaultValue"
"toggleAlt"
"switchHandleNext"
"switchHandlePrev"
"setDefaultValues"
"randomizeParameters"
2 Likes

Hi @martin , awesome work thanks.

The firmware update was smooth. All my presets still appear to be on the device, I tried a couple of them, seemed OK.

I set up some preset controls, worked perfectly as far as I can tell from initial testing (green arrow). As you suggested I mapped the bottom left hand hardware button to openPresetWindow (actually I just used the “hardware” section from the configuration file you posted above, sure will get into my muscle memory quickly.

I added the controller.potFunctions LUA table assignment in the page.onReady() function, not sure if that is necessary? I have run out of time this evening to experiment further. Is it possible to dynamically change the potFunctions table entries (e.g. switch to a different set of preset controls inside the events.onPageChange function for example?)

Somehow I got a stuck “SETTINGS” at the top of the display (red arrow) . It persisted across all page / preset changes until I reset the unit. I think I just playing with the new Settings page. Couldn’t immediately reproduce it.

Update: I also notice that rendered button controls in all my presets appear to have lost their background colour. The border is coloured, but the button background is black.

Thanks again!

Unfortunately, none of the function my REAPER plugin triggers via its custom messaging is listed in there. Guess I’ll have to wait some more update rounds until the entire API can be used via MIDI?

I’m digging the new look of the buttons. Much easier to differentiate the pressed state from the unpressed state!

My controller seems to be unable to perform a downgrade from v4.0.0a. When loading that firmware selection screen and clicking on any firmware (like v3.6.1), the E1 will freeze and nothing happens (been waiting for over 30 minutes). Can you confirm (and warn people as this can be unexpected) or am I doing something wrong here?

Also, there’s a regression with the painting, esp. groups are broken now when changed via script:

Did the speedup make it into the new current v4.0? I’m not noticing any changes there.
My script did use the Lua functions to stop and resume the window repaint process. But because there was no noticeable improvement, I disabled this in the lua script. The script stopped the repaint process when changing parameter names, control visibility, parameter range our group name/order. Should that be enough or should the process be stopped for more changes? I noticed some UI stutter when also stopping the repaint process on incoming value changes, so I tried to be a bit conservative with that function.

@Phommed @Mint-Gecko I will look at the graphic artifacts. It looks like somethings not right with repaint process or things are messed up in the videoram.

That is not expected behavior. Can the bootloader enable the disk mode? I will be away from the computer till early afternoon. I will ping you on the PM when I am available. Do not worry, we will get it running again.

1 Like

Yes, I can enable the disk mode and read/write from/to the SD card.

Fantastic work!

PS: My god that is an Atari ST mouse!! And an ST in the corner!

3 Likes

That mouse caught my attention too! Unfortunately, I’m too young to know that specific mouse but just old enough that I can’t convincingly deny knowing anything about computer mice.

1 Like