forked from ToyKeeper/anduril
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathREADME.html
2133 lines (2133 loc) · 80.3 KB
/
README.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<meta name="author" content="© Selene ToyKeeper" />
<meta name="dcterms.date" content="2024-08-22" />
<meta name="keywords" content="Anduril, Flashlight" />
<title>Anduril User Manual</title>
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
/* The extra [class] is a hack that increases specificity enough to
override a similar rule in reveal.js */
ul.task-list[class]{list-style: none;}
ul.task-list li input[type="checkbox"] {
font-size: inherit;
width: 0.8em;
margin: 0 0.8em 0.2em -1.6em;
vertical-align: middle;
}
</style>
<link rel="stylesheet" href="styling-benjam.css" />
</head>
<body>
<header id="title-block-header">
<h1 class="title">Anduril User Manual</h1>
<p class="author">© Selene ToyKeeper</p>
<p class="date">2024-08-22</p>
</header>
<nav id="TOC" role="doc-toc">
<ul>
<li><a href="#anduril-flashlight-firmware-fsm-flashlight-ui-toolkit"
id="toc-anduril-flashlight-firmware-fsm-flashlight-ui-toolkit">Anduril
Flashlight Firmware + FSM Flashlight UI Toolkit</a>
<ul>
<li><a href="#table-of-content---anduril-readme"
id="toc-table-of-content---anduril-readme">Table of Content - Anduril
README</a></li>
<li><a href="#using-anduril" id="toc-using-anduril">Using
Anduril</a></li>
<li><a href="#flashing-firmware" id="toc-flashing-firmware">Flashing
Firmware</a></li>
<li><a href="#compiling" id="toc-compiling">Compiling</a>
<ul>
<li><a href="#prerequisites"
id="toc-prerequisites">Prerequisites</a></li>
<li><a href="#building" id="toc-building">Building</a></li>
</ul></li>
<li><a href="#customizing-settings-per-user"
id="toc-customizing-settings-per-user">Customizing Settings Per
User</a></li>
<li><a href="#flashing-programs" id="toc-flashing-programs">Flashing
Programs</a>
<ul>
<li><a href="#avrdude" id="toc-avrdude">AVRdude</a></li>
<li><a href="#pymcuprog" id="toc-pymcuprog">PyMCUprog</a></li>
</ul></li>
<li><a href="#contributing" id="toc-contributing">Contributing</a></li>
</ul></li>
<li><a href="#anduril-user-manual" id="toc-anduril-user-manual">Anduril
User Manual</a>
<ul>
<li><a href="#table-of-content---anduril-manual"
id="toc-table-of-content---anduril-manual">Table of Content - Anduril
MANUAL</a></li>
<li><a href="#quick-start" id="toc-quick-start">Quick Start</a></li>
<li><a href="#button-presses" id="toc-button-presses">Button
presses</a></li>
<li><a href="#factory-reset" id="toc-factory-reset">Factory
Reset</a></li>
<li><a href="#simple-ui" id="toc-simple-ui">Simple UI</a>
<ul>
<li><a href="#simple-ui-diagram" id="toc-simple-ui-diagram">Simple UI
Diagram</a></li>
<li><a href="#usage" id="toc-usage">Usage</a></li>
<li><a href="#extended-simple-ui" id="toc-extended-simple-ui">Extended
Simple UI</a></li>
<li><a href="#configuring-simple-ui"
id="toc-configuring-simple-ui">Configuring Simple UI</a></li>
</ul></li>
<li><a href="#advanced-ui" id="toc-advanced-ui">Advanced UI</a>
<ul>
<li><a href="#advanced-ui-diagram" id="toc-advanced-ui-diagram">Advanced
UI Diagram</a></li>
<li><a href="#ramping-stepped-ramping-modes"
id="toc-ramping-stepped-ramping-modes">Ramping / Stepped Ramping
Modes</a></li>
<li><a href="#sunset-timer" id="toc-sunset-timer">Sunset Timer</a></li>
<li><a href="#other-modes" id="toc-other-modes">Other Modes</a></li>
<li><a href="#lockout-mode" id="toc-lockout-mode">Lockout Mode</a></li>
<li><a href="#blinky-utility-modes" id="toc-blinky-utility-modes">Blinky
/ Utility Modes</a></li>
<li><a href="#strobe-mood-modes" id="toc-strobe-mood-modes">Strobe /
Mood Modes</a></li>
<li><a href="#momentary-mode" id="toc-momentary-mode">Momentary
Mode</a></li>
<li><a href="#tactical-mode" id="toc-tactical-mode">Tactical
Mode</a></li>
<li><a href="#configuration-menus"
id="toc-configuration-menus">Configuration Menus</a></li>
<li><a href="#ramp-config-menu" id="toc-ramp-config-menu">Ramp Config
Menu</a></li>
<li><a href="#version-check-mode" id="toc-version-check-mode">Version
Check Mode</a></li>
<li><a href="#version-check-formats"
id="toc-version-check-formats">Version Check Formats</a></li>
<li><a href="#protection-features"
id="toc-protection-features">Protection Features</a></li>
<li><a href="#aux-leds-button-leds" id="toc-aux-leds-button-leds">Aux
LEDs / Button LEDs</a></li>
<li><a href="#misc-config-menu" id="toc-misc-config-menu">Misc Config
Menu</a></li>
<li><a
href="#channel-modes-a.k.a.-tint-ramping-or-multi-channel-controls"
id="toc-channel-modes-a.k.a.-tint-ramping-or-multi-channel-controls">Channel
Modes (a.k.a. Tint Ramping or Multi Channel controls)</a></li>
<li><a href="#ui-reference-table" id="toc-ui-reference-table">UI
Reference Table</a></li>
</ul></li>
<li><a href="#appendix-a-anduril-2-simple-ui-diagram"
id="toc-appendix-a-anduril-2-simple-ui-diagram">Appendix A: Anduril 2
Simple UI Diagram</a></li>
<li><a href="#appendix-b-anduril-2-advanced-ui-diagram"
id="toc-appendix-b-anduril-2-advanced-ui-diagram">Appendix B: Anduril 2
Advanced UI Diagram</a></li>
</ul></li>
<li><a href="#per-user-configuration"
id="toc-per-user-configuration">Per-User Configuration</a></li>
<li><a href="#how-to-figure-out-which-.hex-file-to-use"
id="toc-how-to-figure-out-which-.hex-file-to-use">How to figure out
which .hex file to use</a></li>
</ul>
</nav>
<h1 id="anduril-flashlight-firmware-fsm-flashlight-ui-toolkit">Anduril
Flashlight Firmware + FSM Flashlight UI Toolkit</h1>
<p>Anduril is a user interface for flashlights. It is written with FSM,
a UI toolkit for flashlights.</p>
<p>What is FSM? The “SM” means “Spaghetti Monster”, and the “F” can be
any F word you like, such as “Flashlight” or whatever suits your mood.
FSM also means “Finite State Machine”, which is the type of abstraction
used for defining user interfaces. It is like a flowchart turned into
executable code.</p>
<h2 id="table-of-content---anduril-readme">Table of Content - Anduril
README</h2>
<!-- MarkdownTOC -->
<ul>
<li><a href="#using-anduril">Using Anduril</a></li>
<li><a href="#flashing-firmware">Flashing Firmware</a></li>
<li><a href="#compiling">Compiling</a>
<ul>
<li><a href="#prerequisites">Prerequisites</a></li>
<li><a href="#building">Building</a></li>
</ul></li>
<li><a href="#customizing-settings-per-user">Customizing Settings Per
User</a></li>
<li><a href="#flashing-programs">Flashing Programs</a>
<ul>
<li><a href="#avrdude">AVRdude</a></li>
<li><a href="#pymcuprog">PyMCUprog</a></li>
</ul></li>
<li><a href="#contributing">Contributing</a></li>
</ul>
<!-- /MarkdownTOC -->
<h2 id="using-anduril">Using Anduril</h2>
<p>Anduril has many features, but the only things a person
<em>really</em> needs to know to use it are:</p>
<ul>
<li>Click for on/off</li>
<li>Hold to change brightness</li>
</ul>
<p>For more in-depth use, read its <a
href="https://github.com/class101/anduril-manual-pdf/tree/trunk/docs/anduril-manual.md">user
manual</a> for full details.</p>
<p>If you want to know what changed recently, check the <a
href="https://github.com/class101/anduril-manual-pdf/tree/trunk/ChangeLog.md">ChangeLog</a>.</p>
<p>For info about hardware-specific features, like what the channel
modes are on multi-channel lights, browse into the <a href="hw/">hw/</a>
directories to find the hardware model and any hardware-specific
documentation.</p>
<h2 id="flashing-firmware">Flashing Firmware</h2>
<p>Get the latest updates by flashing new firmware!</p>
<p>A few things are needed to flash firmware:</p>
<ul>
<li>A firmware “.hex” file. Here’s <a
href="https://github.com/class101/anduril-manual-pdf/tree/trunk/docs/which-hex-file.md">how
to find the right .hex file</a>.</li>
<li>A flashing adapter. The type of adapter depends on which MCU chip
your light uses. It may be an UPDI 3-pin adapter (attiny1616 and newer)
or an AVR ISP 6-pin adapter (attiny85, attiny1634).<br />
<strong>UPDI</strong> typically uses a “pogo pin” adapter, with
spring-loaded pins to hold against copper pads on the driver
circuit.<br />
<strong>AVR ISP</strong> typically has two parts – a USB device (like a
USBASP), and a physical adapter (like a pogo pin adapter or SOIC8 clip).
SOIC8 is the least convenient, and is mostly only used on old models
with attiny85 chips.</li>
<li>A firmware flashing program. A few compatible programs include
<code>avrdude</code>, <code>pymcuprog</code>, and
<code>ZFlasher</code>.</li>
<li>A computer or phone. Almost any modern computer or phone should be
able to do it, as long as you can plug the adapter in and run a flashing
program.</li>
</ul>
<p>One particularly useful guide is at <a href="https://anduril.click/"
class="uri">https://anduril.click/</a></p>
<p>More info about installing flashing programs is below, in <a
href="#flashing-programs">Flashing Programs</a>.</p>
<h2 id="compiling">Compiling</h2>
<p>The firmware can be deeply customized by modifying it and compiling
your own versions, and this is encouraged.</p>
<p>To compile the firmware, it is strongly recommended that you use a
Linux computer, ideally running Debian or Ubuntu (but almost any distro
should work). Virtual machines work well, such as running WSL inside
Windows. There is also a Docker container available (TODO: add link(s)
here), if that is more convenient.</p>
<h3 id="prerequisites">Prerequisites</h3>
<ul>
<li>AVR toolchain packages:<br />
<code>sudo apt install gcc-avr avr-libc binutils-avr</code></li>
<li>Other misc packages:<br />
<code>sudo apt install git wget unzip bash</code></li>
<li>Atmel DFPs (Device Family Packs). A small script is included to
download and install these for you:<br />
<code>./make dfp</code></li>
</ul>
<h3 id="building">Building</h3>
<p>Use the <code>make</code> script included in this repo. Run
<code>./make --help</code> for details about how to use it. In most
cases though, you should be able to just run <code>./make</code> by
itself to compile all available build targets. Or give it a search term
to limit builds to only a few, like <code>./make hank boost</code> to
build all firmwares for Hanklights with optional boost drivers.</p>
<p>The compiled firmware goes into the <code>hex/</code> directory,
ready to be used by any firmware flashing program.</p>
<h2 id="customizing-settings-per-user">Customizing Settings Per
User</h2>
<p>The build can be <a
href="https://github.com/class101/anduril-manual-pdf/tree/trunk/docs/per-user-config.md">customized
per user</a> by placing overrides into the <code>users/myname/</code>
directory and letting the build script know your username. That way,
your favorite settings can be applied automatically without having to
modify the original source files.</p>
<h2 id="flashing-programs">Flashing Programs</h2>
<h3 id="avrdude">AVRdude</h3>
<p>Usually avrdude installs in a single command:<br />
<code>sudo apt install avrdude</code></p>
<h3 id="pymcuprog">PyMCUprog</h3>
<p>If you use <code>pymcuprog</code> to flash firmware, a few extras are
needed:</p>
<div class="sourceCode" id="cb1"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="fu">sudo</span> apt install python3 python3-pip python3-venv</span>
<span id="cb1-2"><a href="#cb1-2" aria-hidden="true" tabindex="-1"></a><span class="ex">python3</span> <span class="at">-m</span> venv .venv</span>
<span id="cb1-3"><a href="#cb1-3" aria-hidden="true" tabindex="-1"></a><span class="bu">source</span> .venv/bin/activate</span>
<span id="cb1-4"><a href="#cb1-4" aria-hidden="true" tabindex="-1"></a><span class="ex">pip</span> install pymcuprog</span></code></pre></div>
<p>You’ll need to <code>source .venv/bin/activate</code> every time you
start a fresh shell, if you want to use pymcuprog. The activation lasts
until the shell is closed or until you run <code>deactivate</code>.</p>
<h2 id="contributing">Contributing</h2>
<p>If you’d like to help, there are several ways…</p>
<ul>
<li>ToyKeeper has a <a href="https://patreon.com/ToyKeeper">Patreon
site</a> for donations, to help figuratively and literally keep the
lights on.</li>
<li>Send pull requests or patches, to improve things directly. These can
be code, documentation, tools, or anything you think is useful.</li>
<li>File bug reports for any problems you find.</li>
<li>Answer people’s questions on public forums. If the same questions
come up a lot, consider adding it to the documentation here.</li>
<li>Ask manufacturers to use this firmware, and to support its
development.</li>
</ul>
<h1 id="anduril-user-manual">Anduril User Manual</h1>
<p>Anduril is an open-source firmware for flashlights, distributed under
the terms of the GPL v3. The sources can be obtained here:</p>
<ul>
<li><a href="https://toykeeper.net/anduril"
class="uri">https://toykeeper.net/anduril</a></li>
</ul>
<p>The URL above redirects to the actual project site. Even if the
project hosting needs to migrate again, it should continue to work. As
of late 2023, this is where it redirects to:</p>
<ul>
<li><a href="https://github.com/ToyKeeper/anduril"
class="uri">https://github.com/ToyKeeper/anduril</a></li>
</ul>
<h2 id="table-of-content---anduril-manual">Table of Content - Anduril
MANUAL</h2>
<!-- MarkdownTOC -->
<ul>
<li><a href="#quick-start">Quick Start</a></li>
<li><a href="#button-presses">Button presses</a></li>
<li><a href="#factory-reset">Factory Reset</a></li>
<li><a href="#simple-ui">Simple UI</a>
<ul>
<li><a href="#simple-ui-diagram">Simple UI Diagram</a></li>
<li><a href="#usage">Usage</a></li>
<li><a href="#extended-simple-ui">Extended Simple UI</a></li>
<li><a href="#configuring-simple-ui">Configuring Simple UI</a></li>
</ul></li>
<li><a href="#advanced-ui">Advanced UI</a>
<ul>
<li><a href="#advanced-ui-diagram">Advanced UI Diagram</a></li>
<li><a href="#ramping--stepped-ramping-modes">Ramping / Stepped Ramping
Modes</a></li>
<li><a href="#sunset-timer">Sunset Timer</a></li>
<li><a href="#other-modes">Other Modes</a></li>
<li><a href="#lockout-mode">Lockout Mode</a></li>
<li><a href="#blinky--utility-modes">Blinky / Utility Modes</a>
<ul>
<li><a href="#battery-check">Battery check</a></li>
<li><a href="#temperature-check">Temperature check</a></li>
<li><a href="#beacon-mode">Beacon mode</a></li>
<li><a href="#sos-mode">SOS mode</a></li>
</ul></li>
<li><a href="#strobe--mood-modes">Strobe / Mood Modes</a></li>
<li><a href="#momentary-mode">Momentary Mode</a></li>
<li><a href="#tactical-mode">Tactical Mode</a></li>
<li><a href="#configuration-menus">Configuration Menus</a></li>
<li><a href="#ramp-config-menu">Ramp Config Menu</a></li>
<li><a href="#version-check-mode">Version Check Mode</a></li>
<li><a href="#version-check-formats">Version Check Formats</a></li>
<li><a href="#protection-features">Protection Features</a></li>
<li><a href="#aux-leds--button-leds">Aux LEDs / Button LEDs</a></li>
<li><a href="#misc-config-menu">Misc Config Menu</a></li>
<li><a
href="#channel-modes-aka-tint-ramping-or-multi-channel-controls">Channel
Modes (a.k.a. Tint Ramping or Multi Channel controls)</a></li>
<li><a href="#ui-reference-table">UI Reference Table</a>
<ul>
<li><a href="#off-mode">“Off” Mode</a></li>
<li><a href="#ramp-mode">Ramp Mode</a></li>
<li><a href="#multi-channel-lights">Multi-channel Lights</a></li>
<li><a href="#lockout-mode-1">Lockout Mode</a></li>
<li><a href="#strobe-group-modes">Strobe Group Modes</a></li>
<li><a href="#blinky-modes">Blinky Modes</a></li>
<li><a href="#momentary-mode-1">Momentary Mode</a></li>
<li><a href="#tactical-mode-1">Tactical Mode</a></li>
<li><a href="#config-menus">Config Menus</a></li>
</ul></li>
</ul></li>
<li><a href="#appendix-a-anduril-2-simple-ui-diagram">Appendix A:
Anduril 2 Simple UI Diagram</a></li>
<li><a href="#appendix-b-anduril-2-advanced-ui-diagram">Appendix B:
Anduril 2 Advanced UI Diagram</a></li>
</ul>
<!-- /MarkdownTOC -->
<h2 id="quick-start">Quick Start</h2>
<p>After putting a battery in the light and tightening the parts
together, the light should quickly blink once to confirm it has power
and is now operational.<br />
After that, basic usage is simple:</p>
<ul>
<li><strong>Click</strong> to turn the light on or off.</li>
<li><strong>Hold</strong> the button to change brightness.</li>
<li><strong>Release and hold again</strong> quickly to change brightness
the other way.</li>
</ul>
<p>That is all the user needs to know for basic use, but there are many
more modes and features available for people who want more.</p>
<p>For a full list of button mappings, scroll down to the <a
href="#ui-reference-table">UI Reference Table</a> at the end of this
file.</p>
<h2 id="button-presses">Button presses</h2>
<p>Button presses are abbreviated using a simple notation:</p>
<ul>
<li><code>1C</code>: <strong>One click.</strong> Press and then quickly
release the button.</li>
<li><code>1H</code>: <strong>Hold.</strong> Press the button, but keep
holding it.</li>
<li><code>2C</code>: <strong>Two clicks.</strong> Press and release
quickly, twice.</li>
<li><code>2H</code>: <strong>Click, hold.</strong> Click two times, but
hold the second press.</li>
<li><code>3C</code>: <strong>Three clicks.</strong> Press and release
quickly, three times.</li>
<li><code>3H</code>: <strong>Click, click, hold.</strong> Click three
times, but hold the final press.</li>
</ul>
<p>The same pattern is used with higher numbers too.<br />
For example, <code>10C</code> means ten clicks… and <code>10H</code>
means ten clicks but hold the final press.</p>
<p>The <em>number</em> is how many times to press the button.<br />
The <em>letter</em> tells whether to release the final press (C) or keep
holding it (H).</p>
<h2 id="factory-reset">Factory Reset</h2>
<p>If you get lost, or if you want to auto-calibrate the temperature
sensor, do a factory reset. This is a good idea to do as soon as you
turn on a new light for the first time, to ensure it has a sane
configuration.</p>
<p>The process for this is:</p>
<ul>
<li><strong>Loosen</strong> tailcap</li>
<li><strong>Hold</strong> button</li>
<li><strong>Tighten</strong> tailcap</li>
<li><strong>Keep holding</strong> button for about 4s</li>
</ul>
<p>Or:</p>
<ul>
<li><code>13H</code> in “Off” mode, and keep holding for about 4s</li>
</ul>
<p>The light should flicker while getting brighter, then briefly burst
to full power. Hold until it reaches full power to do a reset, or let go
of the button early to abort.</p>
<p>On some lights, like products where the tailcap method is impossible,
use <code>13H</code> from Off to do a factory reset. If this is
difficult, try counting it like music to make it easier:</p>
<pre class="text"><code> 1 2 3 4
2 2 3 4
3 2 3 4
HOLD</code></pre>
<p>Simple UI is enabled after each factory reset.</p>
<h2 id="simple-ui">Simple UI</h2>
<p>By default, the light uses a simple UI. This is useful if you lend
the light to someone else, or if you just don’t want to bother with any
crazy disco modes.</p>
<p>Simple UI has all the basic functions needed to work as a flashlight,
but the minimum and maximum brightness are limited by default to make it
safer, and any complex or advanced functions are blocked.</p>
<h3 id="simple-ui-diagram">Simple UI Diagram</h3>
<p>For the Simple UI Diagram of Anduril v2 please check <a
href="#appendix-a-anduril-2-simple-ui-diagram">Appendix A: Anduril 2
Simple UI Diagram</a> at the end of this file.</p>
<h3 id="usage">Usage</h3>
<p>Functions available in Simple UI include:</p>
<ul>
<li><code>1C</code>: On / off</li>
<li><code>1H</code>: Ramp up (or down, if button was released less than
a second ago)</li>
<li><code>2H</code>: - If light is on : ramp down - If light is off:
momentary high mode</li>
<li><code>2C</code>: Double click to go to / from highest safe
level</li>
<li><code>4C</code>: Lockout mode.</li>
</ul>
<p>Some other modes and functions are available too. When the light is
off, these are the options:</p>
<ul>
<li><code>3C</code>: Battery check mode. (displays voltage once, then
turns off)</li>
<li><code>4C</code>: Lockout mode.</li>
<li><code>10H</code>: Switch to Advanced UI.</li>
<li><code>15C</code> or more: Version check.</li>
</ul>
<p>In Lockout mode with Simple UI, there are a few functions:</p>
<ul>
<li><code>1H</code>: Momentary moon</li>
<li><code>2H</code>: Momentary low</li>
<li><code>3C</code>: Unlock and turn off</li>
<li><code>4C</code>: Unlock and turn on</li>
<li><code>4H</code>: Unlock and turn on at low level</li>
<li><code>5C</code>: Unlock and turn on at high level</li>
</ul>
<p>To change between Simple UI and Advanced UI, turn the light off and
then do one of these:</p>
<p>In Simple UI:</p>
<ul>
<li><code>10H</code>: Go to Advanced UI.</li>
</ul>
<p>In Advanced UI:</p>
<ul>
<li><code>10C</code>: Go to Simple UI.</li>
</ul>
<h3 id="extended-simple-ui">Extended Simple UI</h3>
<p>Some lights have additional features enabled in Simple UI, at the
manufacturer’s request. This typically includes:</p>
<ul>
<li><code>Ramp -> 3C</code>: Toggle smooth or stepped ramp
shape.</li>
<li><code>Ramp -> 5H</code>: Sunset timer.</li>
<li><code>Off -> 7C/7H</code>: Change the aux LED pattern.</li>
<li><code>Lockout -> 7C/7H</code>: Change the aux LED pattern.</li>
</ul>
<p>Old versions (before 2024-08) also allowed access to strobe/mood
modes, which can be dangerous, so if you have one of those, <em>think
twice about letting kids use it</em>. Those modes were never intended to
be child-safe, and can reach full power with no thermal regulation.</p>
<h3 id="configuring-simple-ui">Configuring Simple UI</h3>
<p>Simple UI can be configured in several ways, but not while Simple UI
is active. So go to the Advanced UI, configure things, then go back to
Simple UI.</p>
<p>In Advanced UI’s “Off” mode:</p>
<ul>
<li><code>10H</code>: Configure Simple UI.</li>
</ul>
<p>Configurable options include:</p>
<ul>
<li>floor level</li>
<li>ceiling level</li>
<li>number of steps (in stepped ramp)</li>
<li>turbo style</li>
</ul>
<p>Other options are inherited from Advanced UI, so change these options
normally and they will carry over to Simple UI:</p>
<ul>
<li>ramp style (smooth / stepped)</li>
<li>smooth ramp speed</li>
<li>ramp-after-moon style</li>
<li>memory settings</li>
<li>auto-lock settings</li>
<li>aux LED settings</li>
<li>voltage calibration</li>
<li>thermal regulation settings</li>
<li>hardware-specific “misc menu” settings</li>
</ul>
<h2 id="advanced-ui">Advanced UI</h2>
<p>Most of the information below this is for the Advanced UI. Anything
not already noted above is blocked in the Simple UI.</p>
<h3 id="advanced-ui-diagram">Advanced UI Diagram</h3>
<p>For the Advanced UI Diagram of Anduril v2 please check <a
href="#appendix-b-anduril-2-advanced-ui-diagram">Appendix B: Anduril 2
Advanced UI Diagram</a> at the end of this file.</p>
<h3 id="ramping-stepped-ramping-modes">Ramping / Stepped Ramping
Modes</h3>
<p>Anduril’s ramping mode uses a smooth ramp or a stepped ramp,
depending on which style the user prefers.</p>
<p>Each ramp has its own settings – floor (lowest level), ceiling
(highest level), and the stepped ramp can also have a configurable
number of steps.</p>
<p>Additionally, Simple UI has its own ramp settings for floor, ceiling,
and number of steps. The smooth/stepped style is inherited from the
Advanced UI’s ramp.</p>
<p>There are four ways to access ramping mode when the light is off:</p>
<ul>
<li><code>1C</code>: Turn on at the memorized brightness.<br />
(see below for details about what “memorized” means)</li>
<li><code>1H</code>: Turn on at the floor level. Let go after the light
turns on to stay at the floor level, or keep holding to ramp up.</li>
<li><code>2C</code>: Turn on at the ceiling level.</li>
<li><code>2H</code>: Turn on at full power, turn off when released.
(momentary turbo)<br />
(in Simple UI, this uses the ceiling level instead of turbo)</li>
</ul>
<p>While the light is on, a few actions are available:</p>
<ul>
<li><code>1C</code>: Turn off.</li>
<li><code>2C</code>: Go to or from the turbo level.<br />
(or if it has regulated down, “bump” back up to turbo)<br />
(turbo level / behavior is configurable)</li>
<li><code>1H</code>: Change brightness (up).<br />
If the button was released less than a second ago<br />
Or if it’s already at the ceiling, it goes down instead.</li>
<li><code>2H</code>: Change brightness (down).</li>
<li><code>3C</code>: Switch to the other ramp style. (smooth /
stepped)<br />
(or activate the next channel mode, when more than one is enabled)<br />
(then use 6C instead, for smooth / stepped toggle)</li>
<li><code>6C</code>: Switch to the other ramp style. (when
<code>3C</code> is mapped to next channel)</li>
<li><code>3H</code>: Momentary turbo (when current channel has no tint
to ramp).</li>
<li><code>3H</code>: Tint ramping (only when current channel has
adjustable tint).</li>
<li><code>4H</code>: Momentary turbo, when <code>3H</code> is mapped to
tint.</li>
<li><code>4C</code>: Go to lockout mode.</li>
<li><code>5C</code>: Go to momentary mode.</li>
<li><code>5H</code>: Start a sunset timer. Details are below in the
Sunset Timer section.</li>
<li><code>7H</code>: Ramp config menu. - Item 1: Floor level. - Item 2:
Ceiling level. - Item 3:<br />
Stepped ramp: Number of steps. Can be 1 to 150.<br />
Smooth ramp: Ramp speed. - 1 = Full speed, ~2.5s from end to end. - 2 =
Half speed, ~5s from end to end. - 3 = Third speed, ~7.5s. - 4 = Quarter
speed, ~10s.</li>
<li><code>10C</code>: Activate manual memory and save the current
brightness.</li>
<li><code>10H</code>: Ramp extras config menu. - Item 1: Disable manual
memory and go back to automatic memory.<br />
(doesn’t matter what value the user enters at the prompt) - Item 2:
Configure the manual memory timer.<br />
Sets the timer to N minutes, where N is the number of clicks.<br />
A value of 0 (no clicks) turns the timer off. - Item 3: Configure
whether to ramp up after <code>Off -> 1H</code>.<br />
0: Ramp up after moon.<br />
1: Don’t ramp up, just stay at the floor level. - Item 4: Configure
Advanced UI’s turbo style:<br />
0: No turbo, only ceiling.<br />
1: Anduril 1 style. <code>Ramp -> 2C</code> goes to full power.<br />
2: Anduril 2 style. <code>Ramp -> 2C</code> goes to ceiling, or goes
to full power if user ramped up to ceiling first. This value also
affects momentary turbo in Ramp and Off modes. - Item 5: Configure
“smooth steps”.<br />
0: Disable smooth steps.<br />
1: Enable smooth steps.</li>
</ul>
<p>Memory determines which brightness level the light goes to with 1
click from off. There are three types of brightness memory to choose
from:</p>
<ul>
<li>Automatic: Always uses the last-ramped brightness. (does not
memorize levels accessed by a shortcut, like turbo, <code>2C</code> for
ceiling, or <code>1H-from-off</code> for floor)</li>
<li>Manual: Always uses the user’s saved brightness.</li>
<li>Hybrid: Uses the automatic memory brightness if the light was only
off for a short time, or resets to the manual memory level if it was off
for a longer time. The timer for this is configurable from 0 to ~140
minutes.</li>
</ul>
<p>Another way to think of it is: There are three styles of memory for
the last-ramped brightness level…</p>
<ul>
<li>Always remember (automatic)</li>
<li>Remember for N minutes (hybrid)</li>
<li>Never remember (manual)</li>
</ul>
<p>To choose a memory style, set the configuration accordingly:</p>
<table>
<thead>
<tr>
<th>mem type</th>
<th>manual mem</th>
<th>manual mem timer</th>
</tr>
</thead>
<tbody>
<tr>
<td>automatic</td>
<td>off</td>
<td>any</td>
</tr>
<tr>
<td>manual</td>
<td>on</td>
<td>zero</td>
</tr>
<tr>
<td>hybrid</td>
<td>on</td>
<td>non-zero</td>
</tr>
</tbody>
</table>
<p>If “smooth steps” is enabled, the stepped ramp uses a smooth
animation between steps, and turning the light on/off has the edges
smoothed off too. With “smooth steps” turned off, these brightness
changes are immediate.</p>
<h3 id="sunset-timer">Sunset Timer</h3>
<p>In the ramp mode or candle mode, it’s possible to make the light turn
itself off after a while.</p>
<p>To activate the timer, go to the brightness you want and then use a
<code>5H</code> action. Keep holding the button, and the light should
blink once per second. Each blink adds 5 minutes to the timer.</p>
<p>In ramp mode, it slowly dims until it’s at the lowest level, then
shuts off. In candle mode, it stays at the same brightness until the
final minute, at which point it dims and dies out.</p>
<p>The user can change the brightness while the timer is active. If this
happens during the final few minutes, it also “bumps” the timer up to a
minimum of 3 minutes. So if it’s getting really dim and you need a
little more time, you could do a <code>5H</code> to add 5 minutes, or
simply ramp up to the desired brightness.</p>
<h3 id="other-modes">Other Modes</h3>
<p>Anduril has several other modes too. To access these, press the
button more than 2 times when the light is off:</p>
<ul>
<li><code>3C</code>: Blinky / utility modes, starting with battery
check.</li>
<li><code>3H</code>: Strobe modes, starting with the most recently used
strobe.</li>
<li><code>4C</code>: Lockout mode.</li>
<li><code>5C</code>: Momentary mode.</li>
<li><code>6C</code>: Tactical mode.</li>
<li><code>7C</code> / <code>7H</code>: Aux LED configuration.</li>
<li><code>9H</code>: Misc Config menu. (only on some lights)</li>
<li><code>10H</code>: Simple UI configuration menu.</li>
<li><code>13H</code>: Factory reset (on some lights).</li>
<li><code>15C</code> or more: Version check.</li>
</ul>
<h3 id="lockout-mode">Lockout Mode</h3>
<p>Click 4 times from Off to enter Lockout mode. Or 4 times from Ramp.
This makes the light safe to carry in a pocket or a bag or anywhere else
the button might be pressed by accident.</p>
<p>To exit lockout mode, click 4 times. The light should blink briefly
and then turn on at the memorized level. Or hold the final press to turn
on at the floor level instead:</p>
<ul>
<li><code>3C</code>: Unlock and go to “Off” mode</li>
<li><code>4C</code>: Go to ramp mode (memorized level).<br />
(uses manual mem level if there is one)</li>
<li><code>4H</code>: Go to ramp mode (floor level).</li>
<li><code>5C</code>: Go to ramp mode (ceiling level).</li>
</ul>
<p>Lockout mode also doubles as a momentary moon mode, so the user can
do quick tasks without having to unlock the light. The brightness in
lockout mode has two levels:</p>
<ul>
<li><code>1H</code>: Light up at the lowest floor level.</li>
<li><code>2H</code>: Light up at the highest floor level.<br />
(or the manual mem level, if there is one)</li>
<li><code>3H</code>: Next channel mode (if more than one is
enabled).</li>
</ul>
<p>It is also possible to make the light lock itself automatically after
being turned off. To enable this, go to lockout mode and use a
<code>10H</code> action to activate the auto-lock config menu. Release
the button after the first blink. Then at the prompt, click N times to
set the auto-lock timeout to N minutes.</p>
<ul>
<li><code>10H</code>: Auto-lock config menu. Click N times to set
timeout to N minutes.<br />
A value of zero disables the auto-lock feature.<br />
So, to turn off auto-lock, don’t click at all.</li>
</ul>
<p>And on lights which have aux LEDs, there may be additional
functions:</p>
<ul>
<li><code>7C</code> / <code>7H</code>: Change Lockout Mode’s aux LED
pattern. More details on this below, in a separate section.</li>
</ul>
<h3 id="blinky-utility-modes">Blinky / Utility Modes</h3>
<p>Click 3 times from Off to access Anduril’s blinky / utility modes.
This always starts at battery check and the user can proceed to other
blinky modes if Advanced UI is enabled. The sequence is:</p>
<ul>
<li>Battery check.</li>
<li>Temperature check (if light has a temperature sensor).</li>
<li>Beacon mode.</li>
<li>SOS mode (if enabled).</li>
</ul>
<p>In all of these modes, some basic actions are available:</p>
<ul>
<li>Click: Turn off.</li>
<li>2 clicks: Next blinky mode.</li>
</ul>
<p>Additionally, in battery check and temperature check modes:</p>
<ul>
<li><code>7H</code>: Go to the voltage config menu or thermal config
menu.</li>
</ul>
<p>In more detail, this is what each blinky / utility mode does:</p>
<h4 id="battery-check">Battery check</h4>
<p>Blinks out the battery voltage per cell. Full is 4.2V, empty is about
3.0V. The light blinks the whole-number digit first, pauses, then blinks
out the “tenths” digit. Then a longer pause, and it repeats. So for
4.2V, it would be “blink-blink-blink-blink .. blink-blink”.</p>
<p>A “zero” digit is represented by a very quick blink.</p>
<p>On lights with more than one set of LEDs, pressing <code>3C</code>
during batt check mode can select which set of LEDs (which channel mode)
it uses to blink out numbers.</p>
<p>The voltage config menu has these settings:</p>
<ol type="1">
<li>Voltage correction factor. This adjusts the battery measurement
sensor, allowing the user to add or subtract up to 0.30V in 0.05V steps.
Click N times to enter a value: <code>1C</code>: -0.30V<br />
<code>2C</code>: -0.25V<br />
<code>3C</code>: -0.20V<br />
<code>4C</code>: -0.15V<br />
<code>5C</code>: -0.10V<br />
<code>6C</code>: -0.05V<br />
<code>7C</code>: default, 0V<br />
<code>8C</code>: +0.05V<br />
<code>9C</code>: +0.10V<br />
<code>10C</code>: +0.15V<br />
<code>11C</code>: +0.20V<br />
<code>12C</code>: +0.25V<br />
<code>13C</code>: +0.30V</li>
<li>Post-off voltage display timeout. (only on lights with RGB
aux)<br />
This setting determines how many seconds the RGB aux LEDs display the
voltage color after the torch goes to sleep. Click once per desired
second, or zero times to turn this function off.</li>
</ol>
<h4 id="temperature-check">Temperature check</h4>
<p>Blinks out the current temperature in degrees C. This number should
be pretty close to what a real thermometer says. If not, it would be a
good idea to enter the thermal config menu and calibrate the sensor. Or
let the light settle to room temperature, then use factory reset to
auto-calibrate the sensor.</p>
<p>The thermal config menu has two settings:</p>
<ul>
<li><p>Current temperature.<br />
Click once per degree C to calibrate the sensor.<br />
For example, if the ambient temperature is 21 C, then click 21
times.</p></li>
<li><p>Temperature limit.<br />
This sets the maximum temperature the light can reach before it will
start doing thermal regulation to keep itself from overheating.<br />
Click once per degree C above 30.<br />
For example, to set the limit to 50 C, click 20 times.<br />
The default is 45 C, and the highest value it will allow is 70
C.</p></li>
</ul>
<h4 id="beacon-mode">Beacon mode</h4>
<p>Blinks at a slow speed. The light stays on for 100ms, and then stays
off until the next blink. The brightness and the number of seconds
between pulses are configurable:</p>
<ul>
<li>Brightness is the user’s memorized ramp level, so set this in
ramping mode before activating beacon mode.<br />
Follows the same memory rules as ramping – automatic, manual, or
hybrid.</li>
<li>Speed is configured by holding the button.<br />
The light should blink once per second while holding the button.<br />
Release it after the desired amount of time has passed, to set a new
beacon speed.<br />
For example, to do a 10-second alpine beacon, hold the button for 10
seconds.</li>
</ul>
<h4 id="sos-mode">SOS mode</h4>
<p>Blinks out a distress signal. Three short, three long, three short.
Repeats until light is turned off or until battery is low.</p>
<p>The memorized ramp level determines the brightness of SOS Mode.</p>
<h3 id="strobe-mood-modes">Strobe / Mood Modes</h3>
<p>Anduril includes a few extra modes for a variety of purposes:</p>
<ul>
<li>Candle mode</li>
<li>Bike flasher</li>
<li>Party strobe</li>
<li>Tactical strobe</li>
<li>Lightning storm mode</li>
</ul>
<p>Click 3 times from Off to access these, but hold the third click for
a moment.<br />
Click, click, hold.<br />
The last-used strobe mode is remembered, so it will return to whichever
one you used last.</p>
<p>In all of these modes, a few actions are available:</p>
<ul>
<li><code>1C</code>: Turn off.</li>
<li><code>2C</code>: Next strobe / mood mode.</li>
<li><code>1H</code>: Increase brightness, or strobe faster. (except
lightning)</li>
<li><code>2H</code>: Decrease brightness, or strobe slower. (except
lightning)</li>
<li><code>4C</code>: Previous strobe / mood mode.</li>
<li><code>5C</code>: Go to momentary mode, for a momentary strobe.<br />
(this is useful for light painting)</li>
</ul>
<p>Additionally, candle mode has one more action:</p>
<ul>
<li><code>5H</code>: Activate Sunset Timer, and/or add 5 minutes to the
timer.</li>
</ul>
<p>In more detail, here is what each mode does:</p>
<ul>
<li>Candle mode<br />
Brightness changes randomly in a pattern resembling a candle
flame.<br />
If a timer is set, it will run until the timer expires, then get dimmer
for one minute, then sputter and turn itself off.<br />
Without a timer, candle mode runs until the user turns it off.<br />
Brightness is configurable.</li>
<li>Bike flasher<br />
Runs at a medium level, but stutters to a brighter level once per
second.<br />
Designed to be more visible than a normal ramping mode, but otherwise
works mostly the same.<br />
Brightness is configurable.</li>
<li>Party strobe<br />
Motion-freezing strobe light.<br />
Can be used to freeze spinning fans and falling water.Speed is
configurable.</li>
<li>Tactical strobe<br />
Disorienting strobe light.<br />
Can be used to irritate people.<br />
Speed is configurable, and the duty cycle is always 33%. Be careful
about heat in this mode, if using it for a long time.</li>
<li>Police strobe (on some lights)<br />
2-color police style strobe.<br />
Only works on lights with 2 or more colors.</li>
<li>Lightning storm mode<br />
Flashes at random brightness and random speed to simulate lightning
strikes during a busy lightning storm.<br />
Do not look directly at the flashlight when this mode is running,
because it may suddenly go to full power without warning.</li>
</ul>
<h3 id="momentary-mode">Momentary Mode</h3>
<p>Click 5 times from Off to enter Momentary mode. Or 5 times from Ramp,
or 5 times from a strobe mode.</p>
<p>This locks the flashlight into a single-mode interface where the LEDs
are only on when the button is held down.<br />
It is intended for Morse code, light painting, and other tasks where the
light should be on only for a short time and probably in a pattern.</p>
<p>Momentary mode does either a steady brightness level or a strobe,
depending on which was active before going to momentary mode.<br />
To select which one, go to the mode you want to use, adjust the
brightness and speed and other settings, then click 5 times to enter
momentary mode.</p>
<p>In steady mode, brightness is the memorized ramp level, so adjust
that in Ramp Mode before entering momentary mode.</p>
<p>In momentary strobe mode, the settings are copied from the last-used
strobe mode, such as party strobe, tactical strobe, or lightning.</p>
<p><strong>To exit Momentary Mode, physically disconnect power</strong>
by unscrewing the tailcap or battery tube.</p>
<h3 id="tactical-mode">Tactical Mode</h3>
<p>Click 6 times from Off to enter Tactical Mode, or 6 times in Tactical
Mode to exit and go back to “Off”.</p>
<p>Tactical Mode provides instant momentary access to high, low, and
strobe, but each of these is configurable.<br />
The inputs are:</p>
<ul>
<li><code>1H</code>: High</li>
<li><code>2H</code>: Low</li>
<li><code>3H</code>: Strobe</li>
</ul>
<p>Each of these only lasts as long as you hold the button.</p>
<p>Other commands in Tactical Mode are:</p>
<ul>
<li><code>6C</code>: exit (go back to Off Mode)</li>
<li><code>7H</code>: Tactical Mode config menu - 1st blink: configure
tactical slot 1 - 2nd blink: configure tactical slot 2 - 3rd blink:
configure tactical slot 3</li>
</ul>
<p>To change what is in a tactical slot, press <code>7H</code>, then
release the button after the 1st, 2nd, or 3rd blink.<br />
Then enter a number.<br />
Each click adds 1, and each hold adds 10.<br />
The number can be:</p>
<ul>
<li>1 to 150: set the brightness level</li>
<li>0: last-used strobe mode</li>
<li>151+: go directly to a specific strobe mode<br />
151 = party strobe<br />
152 = tactical strobe<br />
153+ = other strobes, in the same order they’re in in the
<code>Off -> 3H</code> strobe group</li>
</ul>
<p>This assumes the light has a ramp 150 levels long.<br />
Strobe modes start at the ramp size plus 1, so it may be different if a
light has a different ramp size.</p>
<h3 id="configuration-menus">Configuration Menus</h3>
<p>Every config menu has the same interface. It has one or more options
the user can configure, and it will go through them in order. For each
menu item, the light follows the same pattern:</p>
<ul>
<li>Blink once, then go to a lower brightness.<br />
The user can keep holding the button to skip this menu item, or release
the button to dive in and enter a new value.</li>
<li>If the user released the button: - Stutter or “buzz” quickly between
two brightness levels for a few seconds.<br />
This indicates that the user can click one or more times to enter a
number.<br />
It will keep buzzing until the user stops clicking, so there is no need
to hurry.<br />
The actions here are: - click: add 1 - hold: add 10 (only in versions
2021-09 or later) - wait: exit</li>
</ul>
<p>After entering a number, or after skipping every menu item, it waits
until the button is released then exits the menu.<br />
It should return to whatever mode the light was in before entering the
config menu.</p>
<h3 id="ramp-config-menu">Ramp Config Menu</h3>
<p>While the light is on in a ramping mode, click 7 times (but hold the
final click) to access the config menu for the current ramp.</p>
<p>Or, to access the ramp config for Simple UI, make sure the Simple UI
is not active, then do a <code>10H</code> action from Off.</p>
<p>For smooth ramping mode, there are three menu options:</p>
<ol type="1">
<li>Floor.<br />
(default = 1/150)</li>
<li>Ceiling.<br />
(default = 120/150)</li>
<li>Ramp speed.<br />
(default = 1, fastest speed)</li>
</ol>
<p>For the stepped ramping mode, there are three menu options:</p>
<ol type="1">
<li>Floor.<br />
(default = 20/150)</li>
<li>Ceiling.<br />
(default = 120/150)</li>
<li>Number of steps.<br />
(default = 7)</li>
</ol>
<p>For the Simple UI mode, there are four menu options. The first three
are the same as stepped ramping mode.</p>
<ol type="1">
<li>Floor.<br />
(default = 20/150)</li>
<li>Ceiling.<br />
(default = 120/150)</li>
<li>Number of steps.<br />
(default = 5)</li>
<li>Turbo style.<br />
(default = 0, no turbo)</li>
</ol>
<p><strong>Default values are different for each model of flashlight.
The numbers above are only examples.</strong></p>
<p>To configure the floor level, click the button equal to the number of
ramp levels (out of 150) at which the floor should be. To set the lowest
possible level, click once.</p>
<p>To configure the ceiling level, each click goes one level lower. So 1
click sets the highest possible level, 2 clicks is the 2nd-highest, 3
clicks is the 3rd-highest level, etc. To set the default of 120/150,
click 31 times.</p>
<p>When configuring the number of steps, the value can be anything from
1 to 150. A value of 1 is a special case. It places the step halfway
between the floor and ceiling levels.</p>
<h3 id="version-check-mode">Version Check Mode</h3>
<p>This allows people to see which version of the firmware is installed
on their light. The format for this is usually a model number and a
date. <code>MODEL.YYYY-MM-DD</code></p>
<ul>
<li><code>MODEL</code>: Model number<br />
(usually <code>BBPP</code> where BB is the brand ID, and PP is the
product ID)</li>
<li><code>YYYY</code>: Year</li>