New beta firmware 4.20 -- Exhibition and teaching modes

70 views
Skip to first unread message

Jürgen

unread,
Dec 6, 2025, 5:14:04 AM (11 days ago) Dec 6
to Enigma touch
As discussed in the threads on Drew's museum mode controller and on the 4.10 beta firmware,  I have added some functionality to the Enigma touch, with exhibition or teaching use in mind. Here's a first version, ready for testing if you are curious!

The new options are all controlled via USB commands only -- to avoid cluttering the UI, and because they are meant to be controlled by a "privileged" user with USB access, while it should not be possible to mess with them from the front panel.

Please see the release notes below for a short description of the new functions.

There is one known potential bug at this time: In a single instance, I got the Enigma touch to lock up when I touched a key to resume from the new screen-saver mode. Power-cycling recovered from that state without loss of information or settings, and I was not able yet to reproduce this behavior. I will continue to try and reproduce this (and to stare at the code...), aiming to fix this glitch.

In the meantime I would love to get your feedback: Do the new features work for you? Anything you would prefer to see implemented differently? Anything missing?

Many thanks!
Jürgen


Firmware 4.20 beta - Release Notes

All new settings are made via commands over a USB serial connection. They are stored permanently and survive power cycling (when powering down via the power switch, automatic timeouts or the new !PO command).

1. Locking the setup modes and power-off button

The setup modes for Model selection and replica settings, Rotor (= Wheel) selection, and Ring settings can be locked. The modes will still be accessible via the front panel buttons to view the current settings, but will not respond to the sliders. A lock icon in the upper left display window indicates when a mode is locked.

!LM, !LW, !LR lock the Model, Rotor (= Wheel) and Ring setup modes, respectively:
!Lx 1 locks access via the front panel button
!Lx 0 unlocks access
?Lx prints access status

!LM also controls access to the Reflector D re-wiring (long press of Modell button) and Diagnostic Mode (very long press). The long-press functions of the Rotor and Ring buttons remain available even if the respective setup modes are locked.

!LP 1 disables the power-off functionality of the power button
!LP 0 re-enables it
?LP prints lock status

When the power-off button is locked, the Enigma touch can only be powered off by (a) removing external power (if no battery installed), (b) an inactivity timeout, or (c) by the new USB command !PO. The power button will still be used to turn the power ON.

2. Control the user interface settings

The following commands control the UI settings. They are mainly meant for use with an external "museum mode controller". As usual, ?Mx can be used to view the current setting.

!MB x Brightness, level x = 1..5
!MV x Volume, level x = 0..3
!ML x Logging format. 1=short/5, 2=short/4, 3=extended/5, 4=extended/4

!ML only supports those settings which keep the USB serial connection active, so you can't lock yourself out. Keyboard mode or completely disabled USB can only be selected from the front panel.

3. Timeout control

Earlier firmware versions had a fixed inactivity timeout (automatic power-off) of 15 minutes in battery-operated mode, and no timeout when operated on an external 5V supply. The new firmware gives you control over these timeouts and adds an optional screen saver -- see the next section.

All times are given in minutes, with valid values from 1..99. Value 0 disables the respective automatic timeout.

!TB x Power-off timeout when battery-operated. Default 15 minutes.
!TP x Power-off timeout when plugged in. Default 0 (disabled).
!TS x Screen saver timeout. Default 10 minutes.

In addition, there is an optional shorter timeout for the setup modes. After a specified inactivity period, the Enigma touch can revert to its regular encryption mode. The timeout period is specified in seconds here:

! TM x Close setup modes after x seconds of inactivity. Default 0 (disabled).

4. Screen saver & demo modes

A simple screen saver mode is now built in. After the timeout specified via !TS, the Enigma starts to "type" random groups of 5 letters. Lamps light up and rotors move, but no sound is played and no USB output logged. You can resume normal operation by touching any key, mode button or slider.

While the rotor positions change in screen saver mode, the Enigma touch remembers the position when screen saver mode kicked in, and reverts to it when you resume operation (or save the current state by powering down). So if you are in the middle of encrypting a message, get called away and the screen saver takes over, you will not lose your position but can resume later.

Alternatively, and external controller can be used to drive the Enigma touch via USB, e.g. to implement smarter demo modes with real messages. In that case, you probably want to disable the internal timeouts and let the external controller manage screen saver/attract mode and optionally power-down via !PO.

To allow an external host to recognize when a user has re-started typing during an externally controlled attract mode: Characters triggered by the user via the touch keyboard are printed via USB in uppercase, while characters generated via USB input are printed in lowercase.
Enigma_touch_FW420.elf

drew.baker

unread,
Dec 6, 2025, 11:29:50 AM (11 days ago) Dec 6
to Enigma touch

I will make some adjustments based off this firmware for the Demo Controller.

If there a command that can be sent to check which firmware version is installed?  ?FW or something, to allow the controller to verify  what features are available?

Thanks.

Jürgen

unread,
Dec 6, 2025, 12:06:10 PM (11 days ago) Dec 6
to Enigma touch

If there a command that can be sent to check which firmware version is installed?  ?FW or something, to allow the controller to verify  what features are available?

 
Good point. At the moment there isn't; only the startup message gives the firmware version. But I will add ?FW in 4.21.

One more caveat which I just realized: When using !LP to stop the user from powering off the replica, pushing the power button will still put the processor through a reset cycle. It will briefly drop the USB connection, forcing a re-enumeration, then comes back -- I probably can't avoid that. So if you want to use that mode, the external host would need to automatically reconnect when the expected serial port comes back online.

Regards,
Jürgen

drew.baker

unread,
Dec 8, 2025, 8:08:42 AM (9 days ago) Dec 8
to Enigma touch
Good point. At the moment there isn't; only the startup message gives the firmware version. But I will add ?FW in 4.21.

This will make it easy to quickly determine if the Enigma Touch is compatible. Likely will aim for a 4.21 min, to simplify the code base. 
 
One more caveat which I just realized: When using !LP to stop the user from powering off the replica, pushing the power button will still put the processor through a reset cycle. It will briefly drop the USB connection, forcing a re-enumeration, then comes back -- I probably can't avoid that. So if you want to use that mode, the external host would need to automatically reconnect when the expected serial port comes back online.

As it stands the demo controller will recover in a few seconds if turned off, unplugged or is reset. It doesn't recover "clean" and continue where it left off, but it will restart re-configuring and sending a new demo message.  Recovering cleanly would IMHO be rather complex. we would have to track everything, and then query the Enigma Touch state before each step increasing the complexity ALOT.  I would suggest any Enigma Touch units that are installed in a public hands on exhibits have power button physically  blocked off, moved, or soldered on backwards. Kids will always find a way to "Chaos Test" anything with blinking lights within their reach.



 

Jürgen

unread,
Dec 8, 2025, 11:05:13 AM (9 days ago) Dec 8
to Enigma touch
This will make it easy to quickly determine if the Enigma Touch is compatible. Likely will aim for a 4.21 min, to simplify the code base. 

Coming up... I have implemented "?FW"; it responds with a simple "Firmware 421". If it's alright with you, I will wait a couple more days whether there are further bug reports or suggestions from you or others -- don't want to create a flood of firmware versions. Ok?
 
 As it stands the demo controller will recover in a few seconds if turned off, unplugged or is reset. It doesn't recover "clean" and continue where it left off, but it will restart re-configuring and sending a new demo message.  Recovering cleanly would IMHO be rather complex. we would have to track everything, and then query the Enigma Touch state before each step increasing the complexity ALOT.  I would suggest any Enigma Touch units that are installed in a public hands on exhibits have power button physically  blocked off, moved, or soldered on backwards. Kids will always find a way to "Chaos Test" anything with blinking lights within their reach.

If it's any help, the Enigma touch will automatically recover its internal state (machine type, key settings, rotor positions) after a power cycle, whether completed or attempted. It's just the brief drop of the USB connection which I cannot avoid: When the processor goes through a reset, it switches all outputs to high impedance, no questions asked. And that unfortunately includes the output signal which pulls up the USB D+ line; the resulting brief drop forces a USB re-enumeration.

I agree, physically protecting the reset/power button is always a safe option, and probably the way to go for a dedicated exhibition unit. I was thinking of "hybrid" uses, e.g. where a unit is sometimes pulled from the exhibition stand and used for interactive demos, teaching etc.; hence would like to provide some chaos-proofing without the need for hardware modifications. 

Regards, Jürgen

drew.baker

unread,
Dec 9, 2025, 7:46:49 AM (8 days ago) Dec 9
to Enigma touch

Coming up... I have implemented "?FW"; it responds with a simple "Firmware 421". If it's alright with you, I will wait a couple more days whether there are further bug reports or suggestions from you or others -- don't want to create a flood of firmware versions. Ok? 

No worries, I would do the same. Both of Enigma Touch's locked up ONCE, after I flashed the 4.20 firmware.  They both did it very shortly after flashing but have not had it happen since. They both behaved the same way, the "Moddell" light was illuminated and required power cycling to clear. 

 
If it's any help, the Enigma touch will automatically recover its internal state (machine type, key settings, rotor positions) after a power cycle, whether completed or attempted. It's just the brief drop of the USB connection which I cannot avoid: When the processor goes through a reset, it switches all outputs to high impedance, no questions asked. And that unfortunately includes the output signal which pulls up the USB D+ line; the resulting brief drop forces a USB re-enumeration.

I'll look into how to handle this.

 

 

drew.baker

unread,
Dec 9, 2025, 10:41:17 AM (8 days ago) Dec 9
to Enigma touch
On Saturday, December 6, 2025 at 5:14:04 AM UTC-5 Jürgen wrote:

In the meantime I would love to get your feedback: Do the new features work for you? Anything you would prefer to see implemented differently? Anything missing?

Many thanks!
Jürgen



Possible bug,  The demo mode appears to engage after specified time, even when USB mode is in use, timer does not appear to reset when USB commands are sent.


 

Jürgen

unread,
Dec 9, 2025, 11:37:31 AM (8 days ago) Dec 9
to Enigma touch
Both of Enigma Touch's locked up ONCE, after I flashed the 4.20 firmware.  They both did it very shortly after flashing but have not had it happen since. They both behaved the same way, the "Moddell" light was illuminated and required power cycling to clear.

Hmm... There was a change in the data layout stored in flash (to accommodate the new timeout and lock setting), but there's a magic number header incl. version information, so the firmware should handle that. (And start with default values for all UI-related settings.) Any specific action that might have triggered the lock-up? 
 
 Possible bug,  The demo mode appears to engage after specified time, even when USB mode is in use, timer does not appear to reset when USB commands are sent.
 
That's by design; only front panel interactions reset the timeout. (Unchanged from the fixed power-down-on-battery timeout in the earlier versions.) I had assumed that a remote controller would disable all timeouts anyway and take control. 

But you are right, I will change that and let USB input re-trigger the timers as well. It might also be a user controlling the Enigma touch interactively via USB, in which case a sudden power-down or the screen saver kicking in would definitely be undesirable.

Ronald Wells

unread,
Dec 9, 2025, 1:16:42 PM (8 days ago) Dec 9
to Enigma touch
I got a lock up as well, but for me the Ring light was lit. power cycle brought it back.

Jürgen

unread,
Dec 9, 2025, 2:05:21 PM (8 days ago) Dec 9
to Enigma touch
I got a lock up as well, but for me the Ring light was lit. power cycle brought it back.

Did that happen on startup, or when you tried to end screen-saver mode by touching a key? (Or at some other point?)
 
I still have not figured out what race condition has caused my lock-up event, and have not been able to reproduce it. Maybe it was just a coincidence that it happened to me during screen-saver mode, so I am looking in the wrong place? But if both of you have seen similar issues, there's obviously something that needs to be fixed. Any further evidence is most welcome!

drew.baker

unread,
Dec 9, 2025, 3:53:31 PM (7 days ago) Dec 9
to Enigma touch
I reverted back to v1.12.  Ran it awhile, upgraded to v1.20.  I didn't get it to lockup. Been playing with it all day while playing with changes to the host controller, so far no lockups.  I'll keep trying.  Wrapping up my day going to run it overnight on the controller to see if there are any issues (on either my side or the Touch side).  If I see anything or have a lockup I'll report on it.  Non-reproducable bugs are not fun.

Ronald Wells

unread,
Dec 9, 2025, 3:57:24 PM (7 days ago) Dec 9
to Enigma touch
happened when exiting screen saver mode with a key touch

Jürgen

unread,
Dec 9, 2025, 6:03:57 PM (7 days ago) Dec 9
to Enigma touch
happened when exiting screen saver mode with a key touch

Thanks! That's when I saw the issue in mine as well. I have been suspecting the display scrolling: When the displays are just moving to a new position in response to a screen saver-generated character, and at that time the user touches a key and the Enigma wants to revert to the rotor positions prior to screen saver mode. But the code looks like it can safely change the target position mid-flight, and I have not been able to force the error by trying to type something just at that time. Puzzling...
 

drew.baker

unread,
Dec 10, 2025, 12:18:59 PM (7 days ago) Dec 10
to Enigma touch
It happened this morning, I picked up the Enigma while it was in screen saver mode hitting one or more of the keys in lower right (J,K,N,M,L likely) with my thumb, and it locked up.

drew.baker

unread,
Dec 11, 2025, 7:47:55 AM (6 days ago) Dec 11
to Enigma touch
Just an update. I have been running V4.20 (I just realized I've been saying V1.20 not v4.20 in all these threads) with the host controller for 31 hours straight with no issues.  
- Screen saver has been disabled.
- Modell, Rotor and Ring Locked
- Randomly switching between Models  I, G1, M3,  with random Rotor and Ring settings changing every 90 seconds. 

No issues, no lockups on the unit I've been testing the host controller with.


Jürgen

unread,
Dec 11, 2025, 2:37:36 PM (6 days ago) Dec 11
to Enigma touch
I am a bit stumped regarding the "locks up when screen saver mode is ended by a keypress" bug. 

I have not been able to reproduce it manually at all. I have also added test code to simulate a user key press during the specific time interval which I thought might be problematic (namely while the rotors are moving in response to a screen saver character) -- doesn't cause a problem. But I know that it's not a unit-specific issue where my test Enigma happens to be immune, because I have seen it happen once, before I posted 4.20 here. 

If it should happen to one of you again, I would really appreciate any further observations about the boundary conditions!

Reply all
Reply to author
Forward
0 new messages