Anduril ... 2?

I did a major rewrite of Anduril. For a long time, I tried to avoid changing the UI much, and stuck to only small changes so it could keep backward compatibility. This was holding it back though, so I finally did all the bigger changes I had been avoiding. The new version is called Anduril 2.

Current status 2020-09-30: Almost done; just finishing up a few little things.

What changed? A lot:

  • Uses a “simple UI” by default. This has only the core functions, like a normal flashlight — on (ramp), off, lockout, and battery check. The rest of the features require switching to advanced mode.
    • Simple mode has no config menus, and no weird blinky modes to get stuck in.
    • Simple mode’s ramp, off/lockout behavior, and thermal regulation settings are configurable… but not while simple mode is active. To configure those things, go to advanced mode to make changes, then return to simple mode.
    • Simple mode is enabled after each factory reset.
  • Made Lockout mode easier to use as a safer alternative to “Off”. Fewer clicks to enter/exit, and direct shortcuts to/from ramp mode. Also, a new auto-lock feature.
  • Changed how config menus work, to make them harder to reach by accident and faster to use.
    • Menus are on 7H or 10H now, instead of 4C.
    • Hold button until desired item is reached, then let go to activate it and get a prompt for entering a number. No need to wait through every option if you only want to change one.
  • Remapped some button presses.
    • Off 2H: Momentary turbo (or, in simple mode, momentary ceiling).
    • Ramp 2C: Ceiling level. Or, if already ramped up to the ceiling, and not in simple mode, it goes to turbo.
    • Ramp 4C: Lockout mode.
    • Ramp 5C: Momentary.
    • Strobe 5C: Momentary strobe.
    • Ramp/Candle 5H: Sunset timer.
    • Aux LED config is on 7C/7H in both Off and Lockout modes, for better consistency.
  • Added more features.
    • Choice of 3 styles of memory for last-ramped brightness: Always remember, never remember, or remember for N minutes. (a.k.a. automatic memory, manual memory, or hybrid memory)
    • Added an auto-lock feature. Can lock the light if you forget, a configurable amount of time after turning the light off.
    • Sunset timer uses 5-minute increments and works in both ramp mode and candle mode. Use “5H” action to activate sunset timer and add time.
    • Voltage calibration function, to keep battery readings more consistent from one light to another.
    • Disco mode. Changes RGB aux LED color randomly, and quickly, while the light is in “off” or “lockout” mode.
  • Misc improvements…
    • Put some space between functions with high click counts, to make it harder to get the wrong one by accident.
    • Lockout mode’s momentary function always uses lowest brightness first.
    • Improved interactions between lockout mode and manual memory… the second momentary press uses the manual memory level if manual mem is enabled, and unlocking goes to manual mem level.
    • Changed order of blinky modes: Batt check, Temp check, Beacon, SOS (if enabled)
    • Beacon mode’s timer is set by simply holding the button, instead of using a menu.
    • Added vendor/product ID info to version check, to help reduce a wide variety of issues related to figuring out which firmware is on a particular light.
    • Reduced the minimum number of stepped ramp steps to 1, so you can configure it as a 1-mode light if you want. (brightness is halfway between floor and ceiling)
    • A wide variety of small bug fixes.
    • Completely refactored the code to make it more organized and easier to maintain.

… and probably some other things which I forgot to mention.

For full details, it’s probably easiest to just read the manual to find out how the new version works.

Original post: (old)

4 Thanks

In more detail, these are the potential changes planned…

Muggle mode rewrite

  • Remove “muggle mode” entirely. It won’t be a separate mode any more. It would work instead like an overlay which blocks access to extra features and limits the brightness range.
  • Rename muggle mode to “normal UI” or “simple UI”. Also rename “exit muggle mode” to “advanced UI” or “full UI” or similar. It shouldn’t sound insulting to use the simplified interface.
  • While off: Allow 1C (on, mem), 1H (on, floor), 2C (on, ceiling), 2H (on, ceiling ramp down), 3C (battcheck), maybe 4C (lockout), 6H (go to advanced UI, button mapping TBD), 15+C (version check)
  • While off: Block all other actions
  • Ramping: Limit floor and ceiling levels, use smooth ramp only, unsure if it should respect manual memory setting
  • While on: Allow 1C (off), 1H (ramp up/down), 2C (ceiling only), 2H (ramp down), 3H (tint ramp). Block turbo, and block all other inputs.
  • Battcheck: Allow 1C (off), but block all other inputs
  • Aux LEDs: In “normal UI”, unsure if user should be able to configure aux LED mode. Could maybe just lock it into voltage mode low (while off) and voltage mode blinking (during lockout).

If I’m lucky, the rewrite might even save space, leaving more room to add other stuff.

Other changes

  • Add 4H from lockout to ramp floor, to go from lockout to “on” without turning off first
  • Add 5C from strobe to momentary
  • Make the aux LED config mappings consistent, instead of using 7C/7H sometimes and 3C/3H other times (and perhaps re-think how aux LEDs are configured in general)
  • Maybe make button LED and aux LEDs configurable separately, on lights where they use different MCU pins?
  • Move config modes from 4C to … um, maybe 6C? (TBD)
  • Move sunset mode into the main ramp, and make brightness+time configurable. For example, ramp to the desired brightness, press a button sequence of some sort, and suddenly it has an dim-to-off timer. Perhaps repeat the button presses to add more time to the timer, like in candle mode.
  • Whatever UI is used for configuring sunset mode, candle mode should probably do the same thing.
  • In lockout mode, perhaps make the 2-level momentary always do the lower of two levels first? (previously, it would do the current ramp floor first, and other ramp floor second… unsure if lowest-first is better)
  • Remove beacon config mode, and instead configure the timing by simply holding the button
  • Maybe don’t allow turbo if already at the temperature limit? (or otherwise somehow make it harder to intentionally cause the light to bake itself)
  • Add an option for the light to lock itself after it has been off for a few minutes?
  • Maybe increase the frame rate of candle mode, to make it smoother?

… and possibly more. This is an incomplete list of things which might be worth doing.

I’ll most likely need to produce a separate UI diagram for the simple UI, but here’s an early rough draft which simply greys out anything it wouldn’t allow:

This isn’t a great way to show it though, so I’ve been trying to re-do the diagrams for Anduril 2. Here’s an attempt to show the Simple UI in a manner which is more, um, simple:

Cool idea!

What about Anduril Pro or just Anduril 2.0.
You have created a master piece Toykeeper.
I thank you for all your effort you have devoted to making flashlights great again. :+1:

OMG, that’s exactly what I’ve been waiting for! 8 clicks and Hold to get into config would be perfect! My kids love to keep clicking on/off/on/off/on/off… on some of my flashlights. This way there’s no way someone can accidentally enter config.

Also I would still love to have a way to get directly to turbo from off. Double click to turbo or maybe double click to top of ramp and triple click to turbo.

I don't have any advice, but I appreciate your great work, ToyKeeper!

Awesome! This will be greatly appreciated by many.

It would be cool if changes made in Advanced/Unlocked Mode (normal) could be persistent in Lite/Simple Mode. E.G. If you set aux to blue they stay blue. Otherwise I agree, voltage should be default.

RE: config modes, when I first started using Anduril, I found properly entering the right config (specifically for aux mode + brightness) to be the most obnoxious/difficult, counting between 4-6 clicks while being distracted by the flashes etc. I don’t have a suggestion per se, except maybe to eliminate how close they are to one another (ie config aux brightness with 4C, aux mode with 6C, 5C = nothing).

Lastly, and I suggest this now while you’re still in the planning phases of A2.0, it would be really neat to offer custom shortcuts (or even just one)—>
Leave a click combo open to be set by the user for a custom action.
For example, 3H could be reserved for whatever the user configures it to be in Advanced/Unlocked Mode. In my case it would be changing aux brightness from low to high. I don’t want to have to cycle through off and blinking every time.

For others it could be a particular strobe mode, beacon, or whatever. Maybe toggling between two particular tints.

Offering the ability to customize the actual user interface (with custom shortcuts like this) would set 2.0 apart as a truly major upgrade, not just UI refinement to make the firmware easier to swallow for the masses. jm2c

I like everything you’ve proposed. Is the intent to have it be fully functional on ATtiny85 equipped lights already out on the market?

The “Simple UI” out of the box is a great idea, and that UI flowchart makes a ton of sense for just anyone getting the light for the first time. Like muggle mode currently, the ability to go back and forth between the Simple UI would be beneficial for if one would want to lend someone a light, but wouldn’t want to completely reset it. Using the same keybind, like 6H or whatever is determined to be the choice, would make it easy to switch between the two.

A timeout autolock function would be good for touchy lights like the FWxx series, but having the ability to toggle it as an option on device that would remain until factory reset would be excellent for times when you don’t want to have the light lock out. Perhaps have it set as a long sequence while locked out? Like 8H so there’s minimal chance that it can be accidentally toggled while the light is actually locked out.

Momentary on lockout should absolutely start with the lower of two ramps imo*

Aggressive throttling on repeated turbo use could be good, or some way to functionally limit total power delivered dependent on a pre-determined temperature threshold.

Minor suggestions for compile-time options for anyone wanting to flash themselves or alter options to their liking:

- The ability to have Simple UI off after initial boot/reset but still retain the functionality and option to enter that mode. Just an ease of use function for power users.

- *Option to toggle momentary on lockout be either lower of the two or how it functions currently, if such a thing is easily done and if folks like how it functions currently. No reason to toggle on device.

Thanks again for all the awesome work you’ve done for the community!

Great ideas, TK. I didn’t see stepped mode explicitly mentioned. Please keep that around. It’s my primary mode.

I agree with pretty much everything, especially that 2-level momentary should default to the lower setting, config mode should be harder to access, and auto lock is a great idea.

Thanks, again, for Anduril and everything you contribute to this hobby.

First thing that comes to mind is more sensitive thermal sensor. Realtime if possible. Would be useful for keeping hotrods safer from self destruction.

Like reducing current very quickly (within 1 sec, disable turbo, etc) until it’s under the set thermal limit.

I like the idea of default mode being a “simple” or “standard” UI with the option to switch to “advanced” by some longer sequence of clicks; 8H is likely to be virtually impossible to hit in error.

Because this would be a big change I would like a distictive name, at least to Anduril2 or something totally new. I have no suggestion off hand.

I really like the momentary lockout where we can select ML or the slightly higher floor level with a single or double click-hold when locked out.

Brimir is a more general word for the sword in mythology.

How about naming it with ‘Ringil’ since it doesnt backward compatibility.
Cant hardly wait to buy FL with this new firmware.

Anduril LITE for my kids sounds great!

I like it, it’s similar to how the ex11 is but worth a few extras. Ramping with battery check and lockout. Perfect. You could hide the ramping vs step in the advanced menu and save in eeprom. I think most here want just ramping or stepped ramp, not both. So in theory you would set that, the temp limits and calibration, and never be required to go to the advanced menu again.

My suggestion would be to make 2H from lockout activate memory mode of current ramp option. I can see how that could pose problems if manual memory isn’t enabled but maybe have it only do so if enabled, or have a toggle in the settings if there’s space?

The one thing that’s tough for me is deciding whether to set stepped ramping to a level low enough for regular use, or have it higher so my second lockout level is bright enough for what I want.

Every other change is fantastic, including making lockout always use the lower of the two settings for 1H.

The battery voltage readout on some of my lights is off by over 0.1 volts.

A voltage calibration function similar to the existing temperature calibration function would be a welcome addition to Anduril.

I am prepared to unlearn and relearn ….

ToyKeeper, I like your plans to improve/upgrade Andúril.

Here are some of my thoughts:

Thermal configuration

Accessing pre-selectable, user-defined step down temperatures would make it easier to toggle between a safe, conservative and a high performance setting. At least two temperature thresholds to choose of and that the user can define by the known click series would be fantastic. It would enable the user to operate the light with all features but also with the option to easily switch between something like 45°C and 65°C as the stepdown threshold. As an alternative you could also wipe the entire thermal configuration click series and only offer selectable, fixed thresholds to choose like 40°C, 45°C, 50°C, 55°C, ... up to something like 'no stepdown at all' or maybe 80°C.

I also agree that aggressive throttling on repeated Turbo runs might be a good idea. But it should go in line with user-defined step down temperatures, i.e. with safe settings in place it should not step down as aggressively.

IntelliBeam® feature

I like the idea that Surefire pursued with their IntelliBeam® feature ("IntelliBeam® automatically and seamlessly adjusts output to the optimal setting"), i.e. the driver will immediately step down when placing something in front of the flashlight, like a hand or if you put it onto a table. This will add some extra safety to new flashlights but it will require some hardware add ons in new flashlights. With the aid of a sensor (black rod) in the reflector the back-reflected light is measured. If it exceeds a certain value the driver automatically reduces the light intensity in a fraction of a second. Maybe it's worth to have something similar in more flashlights other than Surefire.

Submenu for manufacturer custom modes

With many new flashlights coming, maybe it's worth to leave some room for a submenu that each manufacturer can fill with their own customizations, e.g. for operating multi-emitter lights with different LEDs, colors etc.. I have lots of ideas on my mind like an auxiliary red LED in addition to white light that the user can operate separately.

Concerning new names for this firmware...

Well, if we stick to the Tolkien universe it might become difficult to find another sword that is as glorious as Narsil or its successor Andúril. ;-)

With that said, maybe we can name this one Galadriel (a.k.a. the Lady of Light). Galad is a derived word for "light" in Sindarin (one of the most important languages in Middle-Earth). Galadriel was one of the greatest of the Elves in Middle-Earth, surpassing nearly all others in beauty, knowledge, and power.

I think this is a fantastic idea. I agree that the name should be distinct with this many changes, but am ambivalent on whether it should be “Andúril 2”/”Andúril One X”/”Andúril Infinite”/”Andúril 12 Pro Max” (if the ‘brand recognition’ of Andúril is significant enough), or if it should have a different Tolkienian name.