Update mode

I’m trying to update my Electra One firmware 1.5 to 2.1.0. When pressing the update button (next to the midi connectors), it does not change to the update mode. It seem to the same as when pressing the reset button. I have already read the following documents.

HW 2.0 / Firmware 1.5

1 Like

@cixelsyd has similar issue. I am trying to replicate it and will provide info or a fix for it. I am currently away from the computer. Will do that on Sunday / Monday.

Thanks Martin. I’m happy to be patient for your direction. I understand this is something you’ve not encountered before so replicating the problem could take time.

Please let us know via this thread once you know more.

are you plugging the E1 directly into your computer?

I had the same issue, but I then unplugged it from my hub, plugged into the computer directly and it worked… Im not sure if this was just coincidence, or this helped…

also I wonder if you could use the OLD console app to just place the E1 into update mode?
then do the update from the new console app?

@martin is the sysex call , only in the new firmware 2.1 ?

0xF0 0x00 0x21 0x45 0x7F 0x7F 0xF7
1 Like

yup. I’m plugging my E1 directly into my computer. The E1 won’t go into update mode. With Martin’s help I tried to get the unit to go into update mode using the old console app to no avail. I also tried manually placing it in update mode. The syses call doesn’t work on v1.5 which I am on. I’m hanging on to see if Martin can duplicate the issue.

1 Like

I have connected E1 to iMac Pro (macOS 10.15.7) USB port directly using console app version 1.5 and 2.0b. I also have tried Windows 10 PC. When I send the sysex, E1 doesn’t recognize it.

I’m also having this issue. Never had problems with updating before now. I tried on two computers (a new 2020 mac, and an older 2018 mac, no luck on either), update button and all other suggestions. Hardware v2.0 Build v1.5.

I have installed beta firmware builds before now, I wonder if this could be the differentiating factor?

Yes, thes update mode can be enabled with the sysex message from 2.0 and higher.

This is quite a mystery, I have not been able to reproduce it yet. A bit of background info, maybe it will help us to get somewhere…

When Electra is connected to the computer, it is appears as the Electra Controller device. On Macs this can be verified by opening the About this Mac > System Report > USB

When the hardware update button is pressed (the one on the back panel next to the MIDI DIN connectors), it is switched to the Update mode. In update mode, the knobs, touch, etc. should stop working. The identification of the USB device will change to the “composite device”.

Once, it the controller is in the Update mode, ie. listed as the composite device, both new and old Electra One Console applications will be able to upload firmware file to it.

The difference between the console apps is that the old one use a raw HID USB call while the new version use the MIDI sysex message instead.

this means that when Electra One is running firmware 1.5, update mode can be entered using two ways:

  • the old console all
  • the hardware update button press

What I have seen when I was working @cixelsyd was that Electra controller did not appear to be in the Update mode even after the hardware button was pushed. In the same time, however, it hardware controller stopped reacting - which means that it actually switched to the update mode. I doubt that the bootloader code would get corrupted. It is handled with a dedicated chip and there is no way to overwrite it.

So the question is why the host computer does not see the change of the USB device. Especially, as @scztt said, after he ran quite a few betas already.

Would you, @syncloop, @scztt verify if your Electra change its USB identification after the hardware button is pressed? The USB info (in the System report) can be easily reloaded with CMD+R.

For me:

USB 3.1 Bus:

  Host Controller Driver:	AppleIntelICLUSBXHCI
  PCI Device ID:	0x38ed 
  PCI Revision ID:	0x0010 
  PCI Vendor ID:	0x8086 

Electra Controller:

  Product ID:	0x0477
  Vendor ID:	0x16c0
  Version:	2.13
  Serial Number:	1234123456
  Speed:	Up to 12 Mb/s
  Manufacturer:	electra.one
  Location ID:	0x14100000 / 24
  Current Available (mA):	500
  Current Required (mA):	500
  Extra Operating Current (mA):	0

After pushing the button, it restarts but the controller is fully functional and the USB information is exactly the same. By all appearances, the “update” button (next to MIDI ports) is just restarting (I’ve tried both buttons just to be sure, no difference with the other).

I tried with an older Console app, but I believe this one is too old to connect to the device at all. Is there a copy online of a more recent <2.0 console app I could try?

1 Like

You can get it at: Electra One Console MacOS X

This app sends a HID USB call to the switch Electra (with firmware < 2.0) to the update mode. On newer MacOS X version, you might need to allow the app to do such a call.

I tested with the older console app on a Catalina machine (I’ve updated with this machine before, and in general it’s less likely to see weird permissions issues on Catalina vs Big Sur). Observations:

  1. With the old console app. “Reset” only occasionally works. Sometimes it will show an error (“Failed to reboot board”) and nothing will happen. Other times, it appears to successfully reboot, but “Failed to reboot board” still appears.
  2. “Update” with the 1.5 firmware appears to lock the device and hang indefinitely. There are no log items shown, and the system info doesn’t appear to show a “composite” device. I’ve waited ~30-40 minutes, so I believe it’s not recovering.
  3. With the new console app, same behavior as my Big Sur machine: App will not update, single press of update button is not effective. I tried the “reset firmware” procedure of holding the update button down while starting the device and it also does nothing (device starts normally).
  4. I checked all app permissions - the console apps are not shown in any of the lists of apps requesting specific permissions. I am able to manually drag the new Console app to the permissions lists, but it has no effect.

A final clue - when I do the force reset (e.g. holding the update button), when my device comes online the old console app immediately crashes. This seems to indicate that SOMETHING is happening when I do a force update. The force update procedure does nothing with the new app.

(I can post the full crash log, but discourse is limiting my character count and there’s nothing interesting in it anyway - this looks like a coincidental QT related crash)

Crash log
Process:               ElectraOneConsole [62397]
Path:                  /Applications/ElectraOneConsole.app/Contents/MacOS/ElectraOneConsole
Identifier:            ???
Version:               ??? (???)
Code Type:             X86-64 (Native)
Parent Process:        ??? [1]
Responsible:           ElectraOneConsole [62397]
User ID:               501

Date/Time:             2021-07-27 17:24:01.810 +0200
OS Version:            Mac OS X 10.14.6 (18G103)
Report Version:        12
Bridge OS Version:     3.0 (14Y904)
Anonymous UUID:        6609A00E-9D46-81C9-3465-2FFB59DAC9DF

Sleep/Wake UUID:       694C021C-9753-4E7D-BB2F-9CBDD35654BF

Time Awake Since Boot: 2500000 seconds

System Integrity Protection: enabled

Crashed Thread:        0  Dispatch queue: com.apple.main-thread

Exception Type:        EXC_BAD_ACCESS (SIGSEGV)
Exception Codes:       KERN_INVALID_ADDRESS at 0x0000000000000110
Exception Note:        EXC_CORPSE_NOTIFY

Termination Signal:    Segmentation fault: 11
Termination Reason:    Namespace SIGNAL, Code 0xb
Terminating Process:   exc handler [62397]

VM Regions Near 0x110:
    __TEXT                 000000010dff3000-000000010ec73000 [ 12.5M] r-x/rwx SM=COW  /Applications/ElectraOneConsole.app/Contents/MacOS/ElectraOneConsole

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0                                 	0x000000010e540868 QTextCursorPrivate::QTextCursorPrivate(QTextCursorPrivate const&) + 88
1                                 	0x000000010e5443a8 QTextCursor::movePosition(QTextCursor::MoveOperation, QTextCursor::MoveMode, int) + 72
2                                 	0x000000010e2923d1 QWidgetTextControl::moveCursor(QTextCursor::MoveOperation, QTextCursor::MoveMode) + 65
3                                 	0x000000010e033c78 UpdaterWindow::tryToEnableSerial(std::__1::shared_ptr<Board>) + 152
4                                 	0x000000010e032b48 UpdaterWindow::changeCurrentBoard(Board*) + 856
5                                 	0x000000010e03201b UpdaterWindow::currentChanged(int) + 75
6                                 	0x000000010e0379a8 QtPrivate::FunctorCall<QtPrivate::IndexesList<0>, QtPrivate::List<int>, void, void (UpdaterWindow::*)(int)>::call(void (UpdaterWindow::*)(int), UpdaterWindow*, void**) + 136
7                                 	0x000000010e0378f3 void QtPrivate::FunctionPointer<void (UpdaterWindow::*)(int)>::call<QtPrivate::List<int>, void>(void (UpdaterWindow::*)(int), UpdaterWindow*, void**) + 99
8                                 	0x000000010e037806 QtPrivate::QSlotObject<void (UpdaterWindow::*)(int), QtPrivate::List<int>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) + 166
9                                 	0x000000010e8a8bf9 QMetaObject::activate(QObject*, int, int, void**) + 1417
10                                	0x000000010e1bda0d QComboBoxPrivate::_q_emitCurrentIndexChanged(QModelIndex const&) + 189
11                                	0x000000010e1c234f QComboBoxPrivate::setCurrentIndex(QModelIndex const&) + 607
12                                	0x000000010e1c1268 QComboBoxPrivate::_q_rowsInserted(QModelIndex const&, int, int) + 376
13                                	0x000000010e8a8f6a QMetaObject::activate(QObject*, int, int, void**) + 2298
14                                	0x000000010e8445e8 QAbstractItemModel::endInsertRows() + 296
15                                	0x000000010e8a8f6a QMetaObject::activate(QObject*, int, int, void**) + 2298
16                                	0x000000010e8445e8 QAbstractItemModel::endInsertRows() + 296
17                                	0x000000010e01d797 Monitor::handleAddedEvent(ty_board*) + 1223
18                                	0x000000010e01b021 Monitor::handleEvent(ty_board*, ty_monitor_event, void*) + 81
19                                	0x000000010e04f214 change_board_status + 340
20                                	0x000000010e04e8cd add_interface_for_device + 157
21                                	0x000000010e04dc06 device_callback + 86
22                                	0x000000010e03d71e _hs_monitor_add + 174
23                                	0x000000010e042b78 attached_callback + 104
24                                	0x000000010e040f8c process_iterator_devices + 156
25                                	0x000000010e0417a1 darwin_devices_attached + 49
26  com.apple.framework.IOKit     	0x00007fff5103d6ec IODispatchCalloutFromCFMessage + 181
27                                	0x000000010e041c01 hs_monitor_refresh + 545
28                                	0x000000010e04e247 ty_monitor_refresh + 375
29                                	0x000000010e01babc Monitor::refresh(int) + 28
30                                	0x000000010e0201a8 QtPrivate::FunctorCall<QtPrivate::IndexesList<0>, QtPrivate::List<int>, void, void (Monitor::*)(int)>::call(void (Monitor::*)(int), Monitor*, void**) + 136
31                                	0x000000010e0200f3 void QtPrivate::FunctionPointer<void (Monitor::*)(int)>::call<QtPrivate::List<int>, void>(void (Monitor::*)(int), Monitor*, void**) + 99
32                                	0x000000010e020006 QtPrivate::QSlotObject<void (Monitor::*)(int), QtPrivate::List<int>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) + 166
33                                	0x000000010e8a8bf9 QMetaObject::activate(QObject*, int, int, void**) + 1417
34                                	0x000000010e039ce6 DescriptorNotifier::activated(int) + 70
35                                	0x000000010e0106c8 QtPrivate::FunctorCall<QtPrivate::IndexesList<0>, QtPrivate::List<int>, void, void (DescriptorNotifier::*)(int)>::call(void (DescriptorNotifier::*)(int), DescriptorNotifier*, void**) + 136
36                                	0x000000010e010613 void QtPrivate::FunctionPointer<void (DescriptorNotifier::*)(int)>::call<QtPrivate::List<int>, void>(void (DescriptorNotifier::*)(int), DescriptorNotifier*, void**) + 99
37                                	0x000000010e010526 QtPrivate::QSlotObject<void (DescriptorNotifier::*)(int), QtPrivate::List<int>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) + 166
38                                	0x000000010e8a8bf9 QMetaObject::activate(QObject*, int, int, void**) + 1417
39                                	0x000000010e8ae76f QSocketNotifier::event(QEvent*) + 671
40                                	0x000000010e0c413f QApplicationPrivate::notify_helper(QObject*, QEvent*) + 271
41                                	0x000000010e0c5426 QApplication::notify(QObject*, QEvent*) + 390
42                                	0x000000010e882914 QCoreApplication::notifyInternal2(QObject*, QEvent*) + 212
43                                	0x000000010e8c1b6b qt_mac_socket_callback(__CFSocket*, unsigned long, __CFData const*, void const*, void*) + 171
44  com.apple.CoreFoundation      	0x00007fff4e7ebb36 __CFSocketPerformV0 + 976
45  com.apple.CoreFoundation      	0x00007fff4e752de3 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
46  com.apple.CoreFoundation      	0x00007fff4e752d89 __CFRunLoopDoSource0 + 108
47  com.apple.CoreFoundation      	0x00007fff4e73674b __CFRunLoopDoSources0 + 195
48  com.apple.CoreFoundation      	0x00007fff4e735d15 __CFRunLoopRun + 1189
49  com.apple.CoreFoundation      	0x00007fff4e73561e CFRunLoopRunSpecific + 455
50  com.apple.HIToolbox           	0x00007fff4d9941ab RunCurrentEventLoopInMode + 292
51  com.apple.HIToolbox           	0x00007fff4d993ee5 ReceiveNextEventCommon + 603
52  com.apple.HIToolbox           	0x00007fff4d993c76 _BlockUntilNextEventMatchingListInModeWithFilter + 64
53  com.apple.AppKit              	0x00007fff4bd2c77d _DPSNextEvent + 1135
54  com.apple.AppKit              	0x00007fff4bd2b46b -[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] + 1361
55  com.apple.AppKit              	0x00007fff4bd25588 -[NSApplication run] + 699
56                                	0x000000010e0719b6 QCocoaEventDispatcher::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) + 2998
57                                	0x000000010e87e0bf QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) + 431
58                                	0x000000010e883071 QCoreApplication::exec() + 369
59                                	0x000000010e02b417 TyUpdater::run() + 583
60                                	0x000000010e02b1a1 TyUpdater::exec() + 17
61                                	0x000000010e02b63b main + 155
62  libdyld.dylib                 	0x00007fff7a6b73d5 start + 1

Model: MacBookPro13,2, BootROM, 2 processors, Intel Core i7, 3.3 GHz, 16 GB, SMC 2.37f20
Graphics: kHW_IntelIrisGraphics550Item, Intel Iris Graphics 550, spdisplays_builtin
Memory Module: BANK 0/DIMM0, 8 GB, LPDDR3, 2133 MHz, 0x802C, 0x4D5435324C31473332443450472D30393320
Memory Module: BANK 1/DIMM0, 8 GB, LPDDR3, 2133 MHz, 0x802C, 0x4D5435324C31473332443450472D30393320
AirPort: spairport_wireless_card_type_airport_extreme (0x14E4, 0x157), Broadcom BCM43xx 1.0 ( AirPortDriverBrcmNIC-1305.8)
Bluetooth: Version 6.0.14d3, 3 services, 18 devices, 1 incoming serial ports
Network Service: Wi-Fi, AirPort, en0
USB Device: USB 3.0 Bus
USB Device: Electra Controller
USB Device: Traktor Kontrol S8
USB Device: My Passport 25E2
USB Device: Apple T1 Controller
Thunderbolt Bus: MacBook Pro, Apple Inc., 41.1
Thunderbolt Bus: MacBook Pro, Apple Inc., 41.1