aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/compile.yml15
-rw-r--r--.gitignore2
-rw-r--r--ChangeLog.md169
-rw-r--r--MODELS154
-rwxr-xr-xbin/build-all.sh140
-rwxr-xr-xbin/build.sh2
-rwxr-xr-xbin/make-release.sh55
-rwxr-xr-xbin/models.py33
-rwxr-xr-xbin/version-string.sh58
-rw-r--r--docs/anduril-manual.md65
-rw-r--r--docs/battery-rainbow.pngbin0 -> 2920 bytes
-rw-r--r--docs/which-hex-file.md42
-rw-r--r--hw/BRANDS6
-rw-r--r--hw/lumintop/fw3x-lume1/README.md5
-rwxr-xr-xmake6
15 files changed, 506 insertions, 246 deletions
diff --git a/.github/workflows/compile.yml b/.github/workflows/compile.yml
index 893eb41..2ba771f 100644
--- a/.github/workflows/compile.yml
+++ b/.github/workflows/compile.yml
@@ -1,10 +1,13 @@
name: build all
on:
- push:
- branches: [ "trunk" ]
- pull_request:
- branches: [ "trunk" ]
+ # all branches:
+ [ push, pull_request ]
+ # trunk only:
+ #push:
+ # branches: [ "trunk" ]
+ #pull_request:
+ # branches: [ "trunk" ]
jobs:
compile:
@@ -14,6 +17,10 @@ jobs:
- name: Checkout
uses: actions/checkout@master
+ # allow 'git describe' to work, by fetching tags and history
+ with:
+ fetch-depth: 0
+ fetch-tags: true
- name: Stop committing version.h
# reject commit if version.h was changed
diff --git a/.gitignore b/.gitignore
index 965a3e3..d420e34 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
+.build/
.env/
.venv/
.*.swo
@@ -7,6 +8,7 @@ env/
hex/
ignore/
old/
+releases/
venv/
*~
*.cpp
diff --git a/ChangeLog.md b/ChangeLog.md
index 0aaa392..a70a398 100644
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -10,10 +10,75 @@ formats:
- Removed
- Changed
- Documented
- - @brand-model: Hardware-specific change (NNNN, NNNN, ...)
+ - &brand-model: Hardware-specific change (NNNN, NNNN, ...)
# Next
+# 2023-12-03
+
+This release is somewhat higher risk than usual, because so many large things
+changed deep in the code. I did major restructuring and refactoring across the
+entire project. It should work fine, but be on the lookout for any weird
+problems.
+
+General:
+
+- Moved from Bzr + Launchpad to **Git + GitHub**, by popular request.
+- **Completely reorganized the project** files. Really, a *massive* amount of
+ restructuring. The flashlight end-user interface is still the same, but
+ expect to have to learn the code layout from scratch. Read the [README.md]
+ for info about getting started with the new project layout.
+- Added support for AVR DD MCUs like **avr32dd20**. This is the recommended
+ MCU to use in new flashlights.
+- Added ability to use turbo in momentary mode.
+- Upgraded **battery voltage resolution** from 0.1V steps to **0.025V** steps.
+ Battery check has an extra digit which can be 0, 2, 5, or 7 (for example, for
+ 3.70V, 3.725V, .3.75V, and 3.775V).
+- Made Battery Check more consistent, so it's less likely to give different
+ values on the 1st and 2nd readout.
+- Re-calibrated timing on each MCU type, so a 1-second beacon flasher should be
+ closer to 1 actual second now... mostly. Timing still varies significantly
+ from one light to another.
+- Fixed default bike flasher brightness on some builds. It was sometimes way
+ too high.
+- Fixed RGB aux turning on during momentary mode sometimes.
+- Converted documentation to markdown format, and rewrote a lot of it.
+- Fixed some build issues with specific compile-time options.
+- Changed the format of **version numbers**. It now uses the most recent
+ release tag instead of the build date, and **may have additional numbers at
+ the end** to indicate distance from the last official release, and whether
+ the repo was clean or dirty. Today's release is `MODEL-2023-12-03`. A
+ derivative built 52 commits later in a dirty repo would look like
+ `MODEL-2023-12-03-52-1`.
+
+New lights:
+
+- Added &thefreeman-avr32dd20-devkit. It's only used for development purposes,
+ but otherwise it's pretty neat. It'll be the basis for many new lights in
+ the future. (model 1632dd20)
+
+Hardware-specific changes:
+
+- Improved idle efficiency on attiny1616, which was spending entirely too much
+ time doing math it didn't actually need.
+- &hank-\*-boost: Fixed flicker while holding button at moon level. Reduced
+ ripple on low modes. (0216, 0253, 0273)
+- &lumintop-blf-gt: Added smooth steps. Removed a couple other things to make
+ room. (0321)
+- &lumintop-fw3x: Multiple fixes and upgrades... (0314, 0315)
+ - Fixed thermal regulation. Also fixed the external temperature sensor.
+ - Made moon much lower, and made ramp much smoother, by upgrading to DSM.
+ - Fixed the aux RGB pinouts because Lumintop got the wiring backward.
+ - Added a second build target for people who fixed the wires manually.
+ - Added red/blue police color strobe.
+ - Made low modes more efficient with underclocking. Moon should run at least
+ 4X as long as it did before.
+ - Fixed party strobe being blurry.
+ - Added documentation for the FW3X's multiple, uh, quirks.
+- &sofirn-lt1s-pro: Disabled manual memory, memory timer, and extended simple
+ UI by default. Simple mode is simpler, and the factory settings should be
+ more consistent with other lights now. (0623)
+
# 2023-10-31
General:
@@ -37,30 +102,30 @@ General:
New lights:
-- @thefreeman-boost21-6a: Added. (1631)
+- &thefreeman-boost21-6a: Added. (1631)
(very nice HDR boost driver which fits into a FW3A)
-- @thefreeman-boost-fwaa: Added. (1632)
+- &thefreeman-boost-fwaa: Added. (1632)
(very nice AA/li-ion HDR boost driver which fits into a FWAA)
Hardware-specific changes:
- Upgraded several builds to use delta-sigma modulation (DSM), for
lower lows and smoother ramping with less flicker or ripple:
- - @blf-lt1 (0621)
- - @blf-lt1-t1616 (0622)
- - @emisar-d4k-3ch (0151)
+ - &blf-lt1 (0621)
+ - &blf-lt1-t1616 (0622)
+ - &emisar-d4k-3ch (0151)
(**dramatically** improves resolution and low modes on its 8-bit channel)
- - @noctigon-dm11-boost (0273)
- - @noctigon-kr4-boost (0216)
- - @noctigon-k1-boost (0253)
- - @noctigon-m44 (0143)
+ - &noctigon-dm11-boost (0273)
+ - &noctigon-kr4-boost (0216)
+ - &noctigon-k1-boost (0253)
+ - &noctigon-m44 (0143)
- Upgraded some builds to use dynamic PWM, for lower lows and smoother ramping:
- - @blf-q8-t1616, @sofirn-sp36-t1616 (0613, 0614)
- - @gchart-fet1-t1616 (1618)
- - @noctigon-k1-sbt90 (0252)
+ - &blf-q8-t1616, &sofirn-sp36-t1616 (0613, 0614)
+ - &gchart-fet1-t1616 (1618)
+ - &noctigon-k1-sbt90 (0252)
-- @wurkkos-ts10, @wurkkos-ts10-rgbaux: Fixed too-high default ceiling. (0713, 0714)
+- &wurkkos-ts10, &wurkkos-ts10-rgbaux: Fixed too-high default ceiling. (0713, 0714)
# 2023-10-01
@@ -75,42 +140,42 @@ General:
- Fixed some minor post-off voltage display bugs.
- Made RGB button brightness update faster in blinky modes.
- Fixed bug: Wrong channel after colored factory reset.
-- @attiny1616, @attiny1634: Partially fixed oscillating aux LED voltage
+- &attiny1616, &attiny1634: Partially fixed oscillating aux LED voltage
colors while off. Better than before, but can still happen in some cases.
-- @attiny1616: Fixed spurious voltage warnings in sleep mode. (it could
+- &attiny1616: Fixed spurious voltage warnings in sleep mode. (it could
sometimes go from Lockout mode to Off mode by itself)
- Lots of internal refactoring.
New lights:
-- @emisar-2ch-fet: Added. (0136)
-- @emisar-d4k-3ch: Added. (0151)
-- @noctigon-m44: Added. (0143)
-- @wurkkos-ts10-rgbaux: Added. (0713)
+- &emisar-2ch-fet: Added. (0136)
+- &emisar-d4k-3ch: Added. (0151)
+- &noctigon-m44: Added. (0143)
+- &wurkkos-ts10-rgbaux: Added. (0713)
Hardware-specific changes:
-- @ff-e01, @ff-pl47, @ff-pl47g2: Enabled smooth steps instead of SOS mode.
+- &ff-e01, &ff-pl47, &ff-pl47g2: Enabled smooth steps instead of SOS mode.
(0421, 0422, 0423, 0441)
-- @emisar-2ch, @noctigon-m44: Added RGB aux channel modes. (0135, 0143)
-- @emisar-2ch-fet, @noctigon-k9.3: New ramps with better-calibrated shape.
+- &emisar-2ch, &noctigon-m44: Added RGB aux channel modes. (0135, 0143)
+- &emisar-2ch-fet, &noctigon-k9.3: New ramps with better-calibrated shape.
(0136, 0261)
-- @emisar-d4v2-nofet: New ramp table. (0115)
-- @emisar-d4sv2-tintramp: Removed / renamed. (0135, 0136)
-- @noctigon-k9.3: Fixed years-old mess. Merged builds, converted to
+- &emisar-d4v2-nofet: New ramp table. (0115)
+- &emisar-d4sv2-tintramp: Removed / renamed. (0135, 0136)
+- &noctigon-k9.3: Fixed years-old mess. Merged builds, converted to
multi-channel, removed old builds, generally got K9.3 working quite a bit
better. (0261, 0262, 0263, 0265, 0266, 0267)
-- @noctigon-m44: Lower moon, and greatly reduced flicker. (0143)
-- @sofirn-lt1s-pro: Allow configuring the blink channel. (0623)
-- @wurkkos: Raised default temperature limit to 50 C. (07xx)
-- @wurkkos-ts10: Better / smoother ramp. (0713, 0714)
+- &noctigon-m44: Lower moon, and greatly reduced flicker. (0143)
+- &sofirn-lt1s-pro: Allow configuring the blink channel. (0623)
+- &wurkkos: Raised default temperature limit to 50 C. (07xx)
+- &wurkkos-ts10: Better / smoother ramp. (0713, 0714)
# 2023-06-29
- Fixed red aux blink on 1st frame of post-off voltage display
- Removed Harry Potter references because its author (J.K. Rowling) spreads
hate
-- @noctigon-kr4: Fixed thermal regulation (0211, 0212, 0213, 0214, 0215, 0216)
+- &noctigon-kr4: Fixed thermal regulation (0211, 0212, 0213, 0214, 0215, 0216)
# 2023-05-30
@@ -126,18 +191,18 @@ Hardware-specific changes:
help ensure it works on all lights.
- Minor code changes with no runtime impact
- Documented new version check format
-- @wurkkos: Added red+blue police strobe (0715, 0716, 0717)
-- @noctigon-kr4: Broke thermal regulation (oops) (0211, 0212, 0213, 0214,
+- &wurkkos: Added red+blue police strobe (0715, 0716, 0717)
+- &noctigon-kr4: Broke thermal regulation (oops) (0211, 0212, 0213, 0214,
0215, 0216)
-- @noctigon-kr4: Use 7 aux channel modes instead of 3 (0211, 0212, 0213, 0214,
+- &noctigon-kr4: Use 7 aux channel modes instead of 3 (0211, 0212, 0213, 0214,
0215, 0216)
-- @emisar-d4v2: Changed number blinks from aux to main LEDs by default (0113,
+- &emisar-d4v2: Changed number blinks from aux to main LEDs by default (0113,
0114, 0115, 0123)
# 2023-05-17
-- @noctigon-dm11-12v: Renamed to noctigon-dm11-boost (0273)
-- @noctigon-dm11-boost: Now supported in multi-channel branch (0273)
+- &noctigon-dm11-12v: Renamed to noctigon-dm11-boost (0273)
+- &noctigon-dm11-boost: Now supported in multi-channel branch (0273)
# 2023-05-02
@@ -160,14 +225,14 @@ Hardware-specific changes:
it to the value it saved, which was wrong)
- Documented ramp 6C, ramp 4C, ramp 4H, lockout 3H, battcheck 3C, and post-off
voltage display config
-- @emisar-d4v2: Added the rest of the aux RGB colors as channel modes, and set
+- &emisar-d4v2: Added the rest of the aux RGB colors as channel modes, and set
aux "white" as the mode it uses to blink out numbers (0113, 0114, 0115,
0123)
-- @wurkkos-ts10: Converted to multi-channel, and gave it a new ramp with
+- &wurkkos-ts10: Converted to multi-channel, and gave it a new ramp with
better low modes (0714)
-- @wurkkos-ts25: Converted to multi-channel, and gave it a smoother ramp
+- &wurkkos-ts25: Converted to multi-channel, and gave it a smoother ramp
(0715)
-- @wurkkos: Added Wurkkos FC13 and TS11 (0716, 0717)
+- &wurkkos: Added Wurkkos FC13 and TS11 (0716, 0717)
# 2023-04-29
@@ -178,13 +243,13 @@ Hardware-specific changes:
- Made 3H+ use mem level instead of lowest moon (this is needed for
making the channel discernible, and also helps make aux LED controls
stand out more)
-- @emisar, @noctigon: Added Extended Simple UI to Hank's config, so a few more
+- &emisar, &noctigon: Added Extended Simple UI to Hank's config, so a few more
features are allowed in simple mode
-- @emisar-d4v2, @noctigon-kr4: Slightly smaller ROM size
-- @emisar-d4sv2: Converted to multi-channel, and updated it to use dynamic PWM
+- &emisar-d4v2, &noctigon-kr4: Slightly smaller ROM size
+- &emisar-d4sv2: Converted to multi-channel, and updated it to use dynamic PWM
for a smoother ramp with lower lows (0133, 0134)
-- @noctigon-kr4: Converted to multi-channel (0211, 0212, 0213, 0214)
-- @noctigon-kr4: Don't blink at top of regulated power (0211, 0213, 0214)
+- &noctigon-kr4: Converted to multi-channel (0211, 0212, 0213, 0214)
+- &noctigon-kr4: Don't blink at top of regulated power (0211, 0213, 0214)
# 2023-04-28
@@ -196,8 +261,8 @@ Hardware-specific changes:
default)
- Changed tactical mode default config: only use 2-color strobe if it's on
main LEDs, not aux LEDs
-- @emisar-d4v2: Smoother ramp (0113, 0114)
-- @emisar-d4v2: Added hidden channel modes for RGB aux LEDs (0113, 0114, 0115)
+- &emisar-d4v2: Smoother ramp (0113, 0114)
+- &emisar-d4v2: Added hidden channel modes for RGB aux LEDs (0113, 0114, 0115)
# 2023-04-27
@@ -207,7 +272,7 @@ Hardware-specific changes:
- Fixed unnecessary flickering when changing channel modes from/to the same
value
- Fixed sleep voltage measurement on attiny1616
-- @noctigon-kr4-tintramp: Converted to multi-channel, renamed to
+- &noctigon-kr4-tintramp: Converted to multi-channel, renamed to
noctigon-kr4-2ch (0215)
# 2023-04-25
@@ -226,15 +291,15 @@ Hardware-specific changes:
(this change was obsoleted soon by a better post-off voltage display)
- Broke sleep voltage measurement on attiny1616 (oops)
- Changed internal details for how gradual ramping works
-- @emisar-d4sv2-tintramp: Converted to multi-channel, renamed to emisar-2ch.
+- &emisar-d4sv2-tintramp: Converted to multi-channel, renamed to emisar-2ch.
(0135)
-- @sofirn-lt1s-pro: Updated to use today's new code internals (0623)
+- &sofirn-lt1s-pro: Updated to use today's new code internals (0623)
# 2023-04-19
- Added stepped tint ramping
- Documented new channel modes system
-- @sofirn-lt1s-pro: Added white-only auto-tint mode (0623)
+- &sofirn-lt1s-pro: Added white-only auto-tint mode (0623)
# Older: TODO
diff --git a/MODELS b/MODELS
index 87987dd..ef280fa 100644
--- a/MODELS
+++ b/MODELS
@@ -1,80 +1,82 @@
-Models: 70
+Models: 72
-Model Name MCU
------ ---- ---
-0111 hank-emisar-d4 attiny85
-0112 hank-emisar-d4-219 attiny85
-0113 hank-emisar-d4v2 attiny1634
-0114 hank-emisar-d4v2-219 attiny1634
-0115 hank-emisar-d4v2-nofet attiny1634
-0121 hank-emisar-d1 attiny85
-0122 hank-emisar-d1s attiny85
-0123 hank-emisar-d1v2-7135-fet attiny1634
-0124 hank-emisar-d1v2-linear-fet attiny1634
-0125 hank-emisar-d1v2-nofet attiny1634
-0131 hank-emisar-d4s attiny85
-0132 hank-emisar-d4s-219 attiny85
-0133 hank-emisar-d4sv2 attiny1634
-0134 hank-emisar-d4sv2-219 attiny1634
-0135 hank-emisar-2ch attiny1634
-0136 hank-emisar-2ch-fet attiny1634
-0141 hank-emisar-d18 attiny85
-0142 hank-emisar-d18-219 attiny85
-0143 hank-noctigon-m44 attiny1634
-0151 hank-emisar-d4k-3ch attiny1634
-0211 hank-noctigon-kr4 attiny1634
-0212 hank-noctigon-kr4-nofet attiny1634
-0213 hank-noctigon-kr4-219 attiny1634
-0214 hank-noctigon-kr4-219b attiny1634
-0215 hank-noctigon-kr4-2ch attiny1634
-0216 hank-noctigon-kr4-boost attiny1634
-0251 hank-noctigon-k1 attiny1634
-0252 hank-noctigon-k1-sbt90 attiny1634
-0253 hank-noctigon-k1-boost attiny1634
-0261 hank-noctigon-k9.3 attiny1634
-0262 hank-noctigon-k9.3-nofet attiny1634
-0263 hank-noctigon-k9.3-219 attiny1634
-0265 noctigon-k9.3-tintramp-nofet attiny1634 (old, use 0262)
-0266 noctigon-k9.3-tintramp-fet attiny1634 (old, use 0261)
-0267 noctigon-k9.3-tintramp-219 attiny1634 (old, use 0263)
-0271 hank-noctigon-dm11 attiny1634
-0272 hank-noctigon-dm11-nofet attiny1634
-0273 hank-noctigon-dm11-boost attiny1634
-0274 hank-noctigon-dm11-sbt90 attiny1634
-0311 lumintop-fw3a attiny85
-0312 lumintop-fw3a-219 attiny85
-0313 lumintop-fw3a-nofet attiny85
-0314 lumintop-fw3x-lume1 attiny1634
-0321 lumintop-blf-gt attiny85
-0322 lumintop-blf-gt-mini attiny85
-0411 fireflies-rot66 attiny85
-0412 fireflies-rot66-219 attiny85
-0413 fireflies-rot66g2 attiny85
-0421 fireflies-pl47 attiny85
-0422 fireflies-pl47-219 attiny85
-0423 fireflies-pl47g2 attiny85
-0441 fireflies-e01 attiny85
-0511 mateminco-mf01s attiny85
-0521 mateminco-mf01-mini attiny85
-0531 mateminco-mt35-mini attiny85
-0611 sofirn-blf-q8 attiny85
-0612 sofirn-sp36 attiny85
-0613 sofirn-blf-q8-t1616 attiny1616
-0614 sofirn-sp36-t1616 attiny1616
-0621 sofirn-blf-lt1 attiny85
-0622 sofirn-blf-lt1-t1616 attiny1616
-0623 sofirn-lt1s-pro attiny1616
-0631 sofirn-sp10-pro attiny1616
-0632 sofirn-sc21-pro attiny1616
-0713 wurkkos-ts10-rgbaux attiny1616
-0714 wurkkos-ts10 attiny1616
-0715 wurkkos-ts25 attiny1616
-0716 wurkkos-fc13 attiny1616
-0717 wurkkos-ts11 attiny1616
-1618 gchart-fet1-t1616 attiny1616
-1630 thefreeman-lin16dac attiny1616
-1631 thefreeman-boost21-6a attiny1616
-1632 thefreeman-boost-fwaa attiny1616
+Model MCU Name
+----- --- ----
+0111 attiny85 hank-emisar-d4
+0112 attiny85 hank-emisar-d4-219
+0113 attiny1634 hank-emisar-d4v2
+0114 attiny1634 hank-emisar-d4v2-219
+0115 attiny1634 hank-emisar-d4v2-nofet
+0121 attiny85 hank-emisar-d1
+0122 attiny85 hank-emisar-d1s
+0123 attiny1634 hank-emisar-d1v2-7135-fet
+0124 attiny1634 hank-emisar-d1v2-linear-fet
+0125 attiny1634 hank-emisar-d1v2-nofet
+0131 attiny85 hank-emisar-d4s
+0132 attiny85 hank-emisar-d4s-219
+0133 attiny1634 hank-emisar-d4sv2
+0134 attiny1634 hank-emisar-d4sv2-219
+0135 attiny1634 hank-emisar-2ch
+0136 attiny1634 hank-emisar-2ch-fet
+0141 attiny85 hank-emisar-d18
+0142 attiny85 hank-emisar-d18-219
+0143 attiny1634 hank-noctigon-m44
+0151 attiny1634 hank-emisar-d4k-3ch
+0211 attiny1634 hank-noctigon-kr4
+0212 attiny1634 hank-noctigon-kr4-nofet
+0213 attiny1634 hank-noctigon-kr4-219
+0214 attiny1634 hank-noctigon-kr4-219b
+0215 attiny1634 hank-noctigon-kr4-2ch
+0216 attiny1634 hank-noctigon-kr4-boost
+0251 attiny1634 hank-noctigon-k1
+0252 attiny1634 hank-noctigon-k1-sbt90
+0253 attiny1634 hank-noctigon-k1-boost
+0261 attiny1634 hank-noctigon-k9.3
+0262 attiny1634 hank-noctigon-k9.3-nofet
+0263 attiny1634 hank-noctigon-k9.3-219
+0265 attiny1634 noctigon-k9.3-tintramp-nofet (old, use 0262)
+0266 attiny1634 noctigon-k9.3-tintramp-fet (old, use 0261)
+0267 attiny1634 noctigon-k9.3-tintramp-219 (old, use 0263)
+0271 attiny1634 hank-noctigon-dm11
+0272 attiny1634 hank-noctigon-dm11-nofet
+0273 attiny1634 hank-noctigon-dm11-boost
+0274 attiny1634 hank-noctigon-dm11-sbt90
+0311 attiny85 lumintop-fw3a
+0312 attiny85 lumintop-fw3a-219
+0313 attiny85 lumintop-fw3a-nofet
+0314 attiny1634 lumintop-fw3x-lume1
+0315 attiny1634 lumintop-fw3x-lume1-rgbswap
+0321 attiny85 lumintop-blf-gt
+0322 attiny85 lumintop-blf-gt-mini
+0411 attiny85 fireflies-rot66
+0412 attiny85 fireflies-rot66-219
+0413 attiny85 fireflies-rot66g2
+0421 attiny85 fireflies-pl47
+0422 attiny85 fireflies-pl47-219
+0423 attiny85 fireflies-pl47g2
+0441 attiny85 fireflies-e01
+0511 attiny85 mateminco-mf01s
+0521 attiny85 mateminco-mf01-mini
+0531 attiny85 mateminco-mt35-mini
+0611 attiny85 sofirn-blf-q8
+0612 attiny85 sofirn-sp36
+0613 attiny1616 sofirn-blf-q8-t1616
+0614 attiny1616 sofirn-sp36-t1616
+0621 attiny85 sofirn-blf-lt1
+0622 attiny1616 sofirn-blf-lt1-t1616
+0623 attiny1616 sofirn-lt1s-pro
+0631 attiny1616 sofirn-sp10-pro
+0632 attiny1616 sofirn-sc21-pro
+0713 attiny1616 wurkkos-ts10-rgbaux
+0714 attiny1616 wurkkos-ts10
+0715 attiny1616 wurkkos-ts25
+0716 attiny1616 wurkkos-fc13
+0717 attiny1616 wurkkos-ts11
+1618 attiny1616 gchart-fet1-t1616
+1630 attiny1616 thefreeman-lin16dac
+1631 attiny1616 thefreeman-boost21-mp3431-hdr-dac-argb
+1632 attiny1616 thefreeman-boost-fwaa-mp3432-hdr-dac-rgb
+1632dd20 avr32dd20 thefreeman-avr32dd20-devkit
Duplicates:
diff --git a/bin/build-all.sh b/bin/build-all.sh
index df72ad5..f2420a7 100755
--- a/bin/build-all.sh
+++ b/bin/build-all.sh
@@ -9,68 +9,82 @@
# enable "**" for recursive glob (requires bash)
shopt -s globstar
-if [ "$#" -gt 0 ]; then
- # multiple search terms with "AND"
- SEARCH=( "$@" )
- # memes
- [ "$1" = "me" ] && shift && shift && echo "Make your own $*." && exit 1
-fi
-
-# TODO: detect UI from $0 and/or $*
-UI=anduril
-
-mkdir -p hex
-
-# TODO: use a git tag for the version, instead of build date
-# TODO: use build/version.h instead of $UI/version.h ?
-date '+#define VERSION_NUMBER "%Y-%m-%d"' > ui/$UI/version.h
-
-PASS=0
-FAIL=0
-PASSED=''
-FAILED=''
-
-# build targets are hw/$vendor/$model/**/$ui.h
-for TARGET in hw/*/*/**/"$UI".h ; do
-
- # friendly name for this build
- NAME=$(echo "$TARGET" | perl -ne 's|/|-|g; /hw-(.*)-'"$UI"'.h/ && print "$1\n";')
-
- # limit builds to searched patterns, if given
- SKIP=0
- if [ ${#SEARCH[@]} -gt 0 ]; then
- for text in "${SEARCH[@]}" ; do
- if ! echo "$NAME $TARGET" | grep -i -- "$text" > /dev/null ; then
- SKIP=1
+function main {
+
+ if [ "$#" -gt 0 ]; then
+ # multiple search terms with "AND"
+ SEARCH=( "$@" )
+ # memes
+ [ "$1" = "me" ] && shift && shift && echo "Make your own $*." && exit 1
+ fi
+
+ # TODO: detect UI from $0 and/or $*
+ UI=anduril
+
+ mkdir -p hex
+
+ make-version-h # generate a version.h file
+
+ PASS=0
+ FAIL=0
+ PASSED=''
+ FAILED=''
+
+ # build targets are hw/$vendor/$model/**/$ui.h
+ for TARGET in hw/*/*/**/"$UI".h ; do
+
+ # friendly name for this build
+ NAME=$(echo "$TARGET" | perl -ne 's|/|-|g; /hw-(.*)-'"$UI"'.h/ && print "$1\n";')
+
+ # limit builds to searched patterns, if given
+ SKIP=0
+ if [ ${#SEARCH[@]} -gt 0 ]; then
+ for text in "${SEARCH[@]}" ; do
+ if ! echo "$NAME $TARGET" | grep -i -- "$text" > /dev/null ; then
+ SKIP=1
+ fi
+ done
fi
+ if [ 1 = $SKIP ]; then continue ; fi
+
+ # announce what we're going to build
+ echo "===== $UI $REV : $NAME ====="
+
+ # try to compile, track result, and rename compiled files
+ if bin/build.sh "$TARGET" ; then
+ HEX_OUT="hex/$UI.$NAME.hex"
+ mv -f "ui/$UI/$UI".hex "$HEX_OUT"
+ MD5=$(md5sum "$HEX_OUT" | cut -d ' ' -f 1)
+ echo " # $MD5"
+ echo " > $HEX_OUT"
+ PASS=$((PASS + 1))
+ PASSED="$PASSED $NAME"
+ else
+ echo "ERROR: build failed"
+ FAIL=$((FAIL + 1))
+ FAILED="$FAILED $NAME"
+ fi
+
done
- fi
- if [ 1 = $SKIP ]; then continue ; fi
-
- # announce what we're going to build
- echo "===== $UI : $NAME ====="
-
- # try to compile, track result, and rename compiled files
- if bin/build.sh "$TARGET" ; then
- HEX_OUT="hex/$UI.$NAME.hex"
- mv -f "ui/$UI/$UI".hex "$HEX_OUT"
- MD5=$(md5sum "$HEX_OUT" | cut -d ' ' -f 1)
- echo " # $MD5"
- echo " > $HEX_OUT"
- PASS=$((PASS + 1))
- PASSED="$PASSED $NAME"
- else
- echo "ERROR: build failed"
- FAIL=$((FAIL + 1))
- FAILED="$FAILED $NAME"
- fi
-
-done
-
-# summary
-echo "===== $PASS builds succeeded, $FAIL failed ====="
-#echo "PASS: $PASSED"
-if [ 0 != $FAIL ]; then
- echo "FAIL:$FAILED"
- exit 1
-fi
+
+ # summary
+ echo "===== $PASS builds succeeded, $FAIL failed ====="
+ #echo "PASS: $PASSED"
+ if [ 0 != $FAIL ]; then
+ echo "FAIL:$FAILED"
+ exit 1
+ fi
+}
+
+function make-version-h {
+ # old: version = build date
+ #date '+#define VERSION_NUMBER "%Y-%m-%d"' > ui/$UI/version.h
+
+ REV=$(bin/version-string.sh c)
+ # save the version name to version.h
+ mkdir -p ".build/$UI"
+ echo '#define VERSION_NUMBER "'"$REV"'"' > ".build/$UI/version.h"
+}
+
+main "$@"
+
diff --git a/bin/build.sh b/bin/build.sh
index 9b4b0b3..d044ca5 100755
--- a/bin/build.sh
+++ b/bin/build.sh
@@ -49,7 +49,7 @@ export CPP=avr-cpp
export OBJCOPY=avr-objcopy
export DFPFLAGS="-B $DFPPATH/gcc/dev/$MCUNAME/ -I $DFPPATH/include/"
# TODO: include $user/ first so it can override other stuff
-INCLUDES="-I ui -I hw -I. -I.. -I../.. -I../../.."
+INCLUDES="-I .build -I ui -I hw -I. -I.. -I../.. -I../../.."
export CFLAGS=" -Wall -g -Os -mmcu=$MCUNAME -c -std=gnu99 -fgnu89-inline -fwhole-program $MCUFLAGS $INCLUDES -fshort-enums $DFPFLAGS"
export CPPFLAGS="-Wall -g -Os -mmcu=$MCUNAME -C -std=gnu99 -fgnu89-inline -fwhole-program $MCUFLAGS $INCLUDES -fshort-enums $DFPFLAGS"
export OFLAGS="-Wall -g -Os -mmcu=$MCUNAME -mrelax $DFPFLAGS"
diff --git a/bin/make-release.sh b/bin/make-release.sh
new file mode 100755
index 0000000..da985d1
--- /dev/null
+++ b/bin/make-release.sh
@@ -0,0 +1,55 @@
+#!/usr/bin/env bash
+# Create a release file for Anduril .hex files.
+# Copyright (C) 2023 Selene ToyKeeper
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+set -e # abort on error
+
+# run from repo root
+REPODIR=$(dirname "$0")/..
+cd "$REPODIR"
+
+# get rid of 1st arg if it's "release" passed from 'make'
+[[ "$1" = "release" ]] && shift
+
+# try to get the repo ready for a release
+# (or not; probably better to do these steps manually)
+#make clean
+#make
+
+# release name
+#REV=$(date +'%Y-%m-%d')
+REV=$(git describe --tags --dirty --match='r2*')
+REV="${REV:1}" # convert 'r2023-...' to '2023-...'
+# allow manually specifying a release name
+[[ -n "$1" ]] && REV="$1"
+
+# releases are named "$project.$revision"
+RELNAME="anduril.$REV"
+
+# release directory
+RELDIR="releases/$RELNAME"
+mkdir -p "$RELDIR" "$RELDIR/hex"
+
+# add documentation and stuff
+cp -a \
+ ChangeLog.md \
+ LICENSE \
+ MODELS \
+ README.md \
+ docs/anduril-manual.md \
+ docs/battery-rainbow.png \
+ docs/which-hex-file.md \
+ "$RELDIR"
+
+# add the .hex files
+rename -f 's|hex/anduril.|'"$RELDIR/hex/$RELNAME"'.|;' hex/*.hex
+
+# make a .zip file
+cd releases
+mkdir -p zip
+ZPATH=zip/"$RELNAME".zip
+zip -q -r "$ZPATH" "$RELNAME"
+cd ..
+ls -l "releases/$ZPATH"
+
diff --git a/bin/models.py b/bin/models.py
index 8e54d1c..1a1152e 100755
--- a/bin/models.py
+++ b/bin/models.py
@@ -24,12 +24,18 @@ def main(args):
foo.sort()
models = [x[-1] for x in foo]
+ colsizes = [
+ max(len(m.model) for m in models),
+ max(len(m.mcu) for m in models),
+ max(len(m.name) for m in models),
+ ]
+
print('Models: %i\n' % len(models))
- fmt = '%s\t%-30s\t%s'
- print(fmt % ('Model', 'Name', 'MCU'))
- print(fmt % ('-----', '----', '---'))
+ fmt = '%%-%is %%-%is %%s' % (colsizes[0], colsizes[1])
+ print(fmt % ('Model', 'MCU', 'Name'))
+ print(fmt % ('-----', '---', '----'))
for m in models:
- print(fmt % (m.model, m.name, m.mcu))
+ print(fmt % (m.model, m.mcu, m.name))
print('\nDuplicates:')
for i, m in enumerate(models):
@@ -56,6 +62,7 @@ def load_model(path):
m.name = path.replace('hw/','').replace('/', '-')
m.mcu = inherit(path, 'arch')
m.model = inherit(path, 'model')
+ if m.model: m.model = model_translate(m.model)
return m
@@ -73,6 +80,24 @@ def inherit(path, field):
return None
+def model_translate(m):
+ """Convert raw ordinal hex codes into human-friendly a-f digits.
+ """
+ m = str(m)
+ replace = {
+ chr(ord('0') + 10): 'a',
+ chr(ord('0') + 11): 'b',
+ chr(ord('0') + 12): 'c',
+ chr(ord('0') + 13): 'd',
+ chr(ord('0') + 14): 'e',
+ chr(ord('0') + 15): 'f',
+ }
+ for s, r in replace.items():
+ m = m.replace(s, r)
+
+ return m
+
+
if __name__ == "__main__":
import sys
main(sys.argv[1:])
diff --git a/bin/version-string.sh b/bin/version-string.sh
new file mode 100755
index 0000000..c1c5155
--- /dev/null
+++ b/bin/version-string.sh
@@ -0,0 +1,58 @@
+#!/usr/bin/env bash
+# Print a version string for the currently-checked-out code.
+# Copyright (C) 2023 Selene ToyKeeper
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+# Usage: version-string.sh [c|git|both]
+# Prints in C or Git format. Defaults to both.
+
+function main {
+ # eat first arg if invoked via 'make'
+ [[ "version" = "$1" ]] && shift
+
+ # default to showing both formats
+ ARGS="$*"
+ [[ -z "$ARGS" ]] && ARGS="both"
+
+ for arg in $ARGS ; do
+ case "$arg" in
+ git|g)
+ git-describe
+ ;;
+ c|C)
+ c-version-string
+ ;;
+ *)
+ echo -n 'C: ' ; c-version-string
+ echo -n 'git: ' ; git-describe
+ ;;
+ esac
+ done
+}
+
+function git-describe {
+ git describe --tags --dirty --match='r2*'
+}
+
+function c-version-string {
+ # version = git tag + revs since + dirty flag
+ REV=$(git-describe)
+ # convert "r2020-01-01-158-g0abcdef-dirty" to "2020-01-01+158#1"
+ REV=$(echo "$REV" |
+ sed -E 's/^r//;
+ s/-dirty/#1/;
+ s/-g[0-9a-f]+//;
+ s/^([0-9]{4}-[0-9]{2}-[0-9]{2})-/\1+/;
+ '
+ )
+ # handle an empty name (can happen during github action runs)
+ if [[ -z "$REV" ]]; then
+ HASH=$(git describe --always)
+ REV="0.$HASH"
+ fi
+ # print the version string
+ echo "$REV"
+}
+
+main "$@"
+
diff --git a/docs/anduril-manual.md b/docs/anduril-manual.md
index 93c6428..68c577c 100644
--- a/docs/anduril-manual.md
+++ b/docs/anduril-manual.md
@@ -728,26 +728,63 @@ Version Check Mode
------------------
This allows people to see which version of the firmware is installed on
-their light. The format for this is (usually) 12 digits -- a model
-number and a date. `BBPP.YYYY-MM-DD`
+their light. The format for this is usually a model number and a date.
+`MODEL.YYYY-MM-DD`
- - `BB`: Brand ID
- - `PP`: Product ID
+ - `MODEL`: Model number
+ (usually `BBPP` where BB is the brand ID, and PP is the product ID)
- `YYYY`: Year
- `MM`: Month
- `DD`: Day
-Versions before 2023-05-30 used `YYYYMMDDBBPP` format.
-Anduril 1 used only `YYYYMMDD` format, or none at all.
+The version number format has changed a few times, so write down the version
+info and check it against the formats below.
-The date is when the firmware was compiled. If the vendor did not set
-this value, it defaults to 1969-07-20, the date of first human contact
-with the moon. However, it might not be a date at all; some vendors may
-specify a completely different type of value here.
+The model number is very important when flashing new firmware. Make sure
+the new firmware has the same model number as the old firmware. More details
+on this are in [Which Hex File](which-hex-file.md). Use the
+[MODELS](../MODELS) file to map a model number to the name of a .hex file.
-The brand/product values are also known as the model number. These are
-hard-coded in the source code for each light's build target, and can be
-looked up in the "MODELS" file or by using the "make models" command.
+## Version Check Formats
+
+The Version Check function should blink out a series of numbers in one of
+several formats:
+
+ - `MODEL-YYYY-MM-DD-SINCE-DIRTY`
+ Anduril 2 from 2023-12 or later. "SINCE" and "DIRTY" may be omitted.
+ Punctuation makes a "buzz" between sections.
+ - `MODEL`: model number
+ - `YYYY-MM-DD`: Year, month, day. This uses the most recent release tag
+ from git, not the build date.
+ - `SINCE`: How many commits since the last official release tag?
+ - `DIRTY`: Adds a "-1" to the end if the repository was locally modified
+ without committing changes.
+
+ - `NNNN-YYYY-MM-DD`
+ Anduril 2 from 2023-05 or later.
+ It's a model number and build date,
+ with "buzz" flashes between sections.
+ - `NNNN`: model number
+ - `YYYY`: year
+ - `MM`: month
+ - `DD`: day
+
+ - `YYYYMMDDNNNN`
+ Anduril 2 from 2023-05 or earlier.
+ It's a build date and model number.
+
+- `YYYYMMDD`
+ This is an old Anduril 1 version. It's just a build date.
+ If the model name isn't obvious, try looking it up in the PRODUCTS file.
+
+- `1969-07-20`
+ The date of first human contact with the moon. This value indicates that
+ the person who built the firmware probably made some sort of error.
+
+If the version doesn't include a model number, you may be able to find
+the model in the PRODUCTS file to see which firmware model it probably uses:
+
+ https://bazaar.launchpad.net/~toykeeper/flashlight-firmware/anduril2/view/head:/PRODUCTS
Protection Features
@@ -811,6 +848,8 @@ In voltage mode, the colors follow the same sequence, in the same order
as a rainbow... with red indicating a low battery and purple indicating
a full battery.
+![battery charge colors](battery-rainbow.png)
+
For lights with a button LED, the button LED typically stays on while
the main emitters are on. Its brightness level is set in a way which
mirrors the main LED -- off, low, or high.
diff --git a/docs/battery-rainbow.png b/docs/battery-rainbow.png
new file mode 100644
index 0000000..499866d
--- /dev/null
+++ b/docs/battery-rainbow.png
Binary files differ
diff --git a/docs/which-hex-file.md b/docs/which-hex-file.md
index d59c6bd..3847217 100644
--- a/docs/which-hex-file.md
+++ b/docs/which-hex-file.md
@@ -1,41 +1,21 @@
# How to figure out which .hex file to use
-1. Use the version check function (15 or more clicks from Off) to find out
+The name of a product is **not** enough information to find the right .hex
+file. Ask the light what firmware it needs!
+
+1. Use the Version Check function (15 or more clicks from Off) to find out
which flavor of the firmware the light has installed.
**WRITE THIS DOWN.**
2. Look up the model number in the [MODELS file](../MODELS),
to get the name and MCU type.
-3. Find the newest firmware for that model.
- https://github.com/ToyKeeper/anduril/releases
- https://toykeeper.net/torches/fsm/anduril2/?C=M;O=D
-
-If the version doesn't include a model number, you may be able to find
-the model in the PRODUCTS file to see which version it probably uses:
-
- https://bazaar.launchpad.net/~toykeeper/flashlight-firmware/anduril2/view/head:/PRODUCTS
-
-
-## Version Check Formats
-
-The Version Check function should blink out a series of numbers in one of
-several formats:
-
- - `NNNN-YYYY-MM-DD`
- Anduril 2 from 2023-05 or later.
- It's a model number and build date,
- with "buzz" flashes between sections.
- - `NNNN`: model number
- - `YYYY`: year
- - `MM`: month
- - `DD`: day
-
- - `YYYYMMDDNNNN`
- Anduril 2 from 2023-05 or earlier.
- It's a build date and model number.
+3. Find (or build) the newest firmware for that model.
+ https://github.com/ToyKeeper/anduril/releases
-- `YYYYMMDD`
- This is an old Anduril 1 version. It's just a build date.
- If the model name isn't obvious, try looking it up in the PRODUCTS file.
+The Version Check format has changed a few times. Use
+[this section of the manual](anduril-manual.md#Version_Check_Formats)
+to learn about those formats and how to use them. In most cases, it should
+have a model number and a date... and you need the model number to find the
+correct .hex file.
diff --git a/hw/BRANDS b/hw/BRANDS
index 059f311..b55c569 100644
--- a/hw/BRANDS
+++ b/hw/BRANDS
@@ -8,4 +8,8 @@ Fireflies 0400 - 0499
Mateminco 0500 - 0599
Sofirn 0600 - 0699
Wurkkos 0700 - 0799
-gChart 1600 - 1699
+...
+gChart 1600 - 1699 (also thefreeman, since he picked 163X)
+...
+reserved 1900 - 2199 (to ensure no overlap between years and model numbers)
+ (assumes this project won't be relevant in the year 2200 or later)
diff --git a/hw/lumintop/fw3x-lume1/README.md b/hw/lumintop/fw3x-lume1/README.md
index 8609c49..190cd0e 100644
--- a/hw/lumintop/fw3x-lume1/README.md
+++ b/hw/lumintop/fw3x-lume1/README.md
@@ -10,6 +10,11 @@ sensor.
LoneOceans sent a fixed driver design to Lumintop, but the new design didn't
get produced. So to flash firmware, swap the wires for those two pins first.
+**Fuses**: Lumintop seems to have shipped the FW3X with the wrong fuse values,
+so it has the MCU severely underclocked and everything runs much slower than it
+should. Use [flash-tiny1634-fuses.sh](../../../bin/flash-tiny1634-fuses.sh) to
+fix those fuse values and get it running at the correct speed.
+
**RGB mixup**: Lumintop seems to have swapped the wires for aux R and aux B.
This was fixed in firmware in 2023-12, but some lights were fixed in hardware
before that, so the firmware fix might cause the colors to be swapped again.
diff --git a/make b/make
index c50219d..ca3a84a 100755
--- a/make
+++ b/make
@@ -27,6 +27,7 @@ Usage: ./make TASK
docs Convert all .md files to .html
models Generate the MODELS file
release Zip up all .hex files to prep for publishing a release
+ version Show the current version string
todo Show tasks noted in source code files
... or TASK can be the partial name of a build target.
@@ -73,7 +74,10 @@ function main() {
cat MODELS
;;
release)
- echo "Not implemented yet."
+ ./bin/make-release.sh "$@"
+ ;;
+ version)
+ ./bin/version-string.sh "$@"
;;
todo)
grep -E 'TODO:|FIXME:' -- **/*.[ch] **/*.md