Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
3f7ec0c
fix: transfer-mode exits — drain USB block I/O before reset, reboot o…
claude Aug 11, 2026
baab46a
sim: fix wasm harness for 16-column 4.0.0 logs + synthetic GPS-fix to…
claude Aug 11, 2026
36b06b8
Merge pull request #141 from TheAngryRaven/claude/transfer-mode-reboo…
TheAngryRaven Aug 12, 2026
7e72726
plan 0006: design record — NeoPixel strip subsystem
claude Aug 13, 2026
991e991
plan 0006: pure LED units — frame/cap, modes, animations, purple dete…
claude Aug 13, 2026
753937b
plan 0006: feature flag, LED settings, sector timer wrappers
claude Aug 13, 2026
819ea62
plan 0006: neopixel module — UICR ensure, compose/cap/show glue, slee…
claude Aug 13, 2026
f1f52fb
plan 0006: CI — Adafruit NeoPixel library + beta-channel flag
claude Aug 13, 2026
eeaa8bc
plan 0006: docs — CLAUDE.md subsystem 16, ARCHITECTURE, CONTRIBUTING …
claude Aug 13, 2026
2c591ed
plan 0006: fix CI — clang-tidy const/rounding findings + auto-prototy…
claude Aug 13, 2026
0edd783
plan 0006: whole-chain mirror — data-in is wired on the physical right
claude Aug 14, 2026
c2b7fbc
Merge pull request #142 from TheAngryRaven/claude/neopixel-strip-cont…
TheAngryRaven Aug 15, 2026
5059fc8
plan 0007: design record — LED rev/temp alerts, search pip, engine-st…
claude Aug 16, 2026
5883292
plan 0007: led_modes — invalidColor tri-state, search pip, generalize…
claude Aug 16, 2026
1dad56d
plan 0007: settings, engine-stopped gate, glue rework, OLED pages
claude Aug 16, 2026
97831e2
plan 0007: docs — CLAUDE.md subsystem 16 + settings, CHANGELOG
claude Aug 16, 2026
d09eeac
plan 0007: OVER REV header means actual overrev only
claude Aug 16, 2026
bb657ca
Added led preview image
TheAngryRaven Aug 16, 2026
7203a49
Update README.md
TheAngryRaven Aug 16, 2026
13b9334
Merge pull request #143 from TheAngryRaven/claude/neopixel-strip-cont…
TheAngryRaven Aug 17, 2026
5c66db6
plan 0008: get BLE download throughput off the floor
claude Aug 16, 2026
a63cdba
Merge pull request #144 from TheAngryRaven/claude/bluetooth-download-…
TheAngryRaven Aug 17, 2026
d2b72c4
Add Back/Cancel rows to the four menus that had no way out
claude Aug 17, 2026
4838cfa
Merge pull request #145 from TheAngryRaven/claude/cancel-buttons-form…
TheAngryRaven Aug 19, 2026
2c9aade
plan 0009: keep one bad ignition edge out of the RPM trace
claude Aug 18, 2026
973b84d
Merge pull request #146 from TheAngryRaven/claude/rpm-calculation-int…
TheAngryRaven Aug 19, 2026
9a61ebc
plan 0010: local timezone offset + LED day/night brightness
claude Aug 21, 2026
9e9d4db
Merge pull request #147 from TheAngryRaven/claude/datalogger-timezone…
TheAngryRaven Aug 22, 2026
e1f8a99
chore: cut v4.1.0 — version stamp, CHANGELOG cut, channel-accurate re…
claude Aug 22, 2026
938e45d
feat: ship the NeoPixel strip in every build — BIRDSEYE_ENABLE_NEOPIX…
claude Aug 22, 2026
9ff7c17
fix: release-review findings for 4.1.0 — BLE settings list, LED rail,…
claude Aug 22, 2026
df98764
Merge pull request #149 from TheAngryRaven/claude/beta-release-prep-7…
TheAngryRaven Aug 23, 2026
3f30b28
Merge pull request #151 from TheAngryRaven/claude/release-4.1.0-revie…
TheAngryRaven Aug 23, 2026
7aca251
feat(beta): main-loop CPU profiling behind BIRDSEYE_ENABLE_PROFILING
TheAngryRaven Aug 23, 2026
56950ca
fix(profiling): bracket updateButtonHoldState into the BTN section
TheAngryRaven Aug 23, 2026
9c4b5df
Merge pull request #152 from TheAngryRaven/claude/5v-profiling-beta-b…
TheAngryRaven Aug 24, 2026
7aaefd8
fix(profiling): stats row clamps hid the finding on the first hardwar…
TheAngryRaven Aug 24, 2026
c218fcd
fix(profiling): close the rollup window on millis(), not the cycle co…
TheAngryRaven Aug 24, 2026
b79e2f5
Merge pull request #153 from TheAngryRaven/claude/5v-profiling-beta-b…
TheAngryRaven Aug 24, 2026
02bb8e9
tach: cylinder count no longer divides RPM (plan 0012)
TheAngryRaven Aug 24, 2026
52d5098
plan 0012: transport-stack deep dive — download throughput regression
claude Aug 24, 2026
d8b9e42
plan 0012: assignable LED status modes, speed bar, lap/sector verdicts
TheAngryRaven Aug 24, 2026
36b6920
ci: the flags-off compile job never compiled anything
TheAngryRaven Aug 24, 2026
066ff31
plan 0012: race-gate the egg scanner; interval + PHY on the transfer …
TheAngryRaven Aug 24, 2026
2b49332
plan 0012: module bodies — race-gated scanner, BLE_SETUP quiesce, pag…
TheAngryRaven Aug 24, 2026
28b0747
plan 0012: bluetooth + display bodies, plan record status
TheAngryRaven Aug 24, 2026
f6adbb6
plan 0012: bluetooth.ino + display_pages.ino bodies
TheAngryRaven Aug 24, 2026
fa75d60
plan 0012: bluetooth.ino — BLE_SETUP scan quiesce + link accessors
TheAngryRaven Aug 24, 2026
b5be5f5
plan 0012: CHANGELOG — race-gated scanner fix + transfer-page link line
TheAngryRaven Aug 24, 2026
d8e0ac4
Merge pull request #156 from TheAngryRaven/claude/download-speed-degr…
TheAngryRaven Aug 24, 2026
c3a832c
Merge branch 'BETA' into claude/led-status-modes-usability-daknhd
TheAngryRaven Aug 24, 2026
0f0a4f6
Merge pull request #155 from TheAngryRaven/claude/led-status-modes-us…
TheAngryRaven Aug 24, 2026
fef5955
Merge branch 'BETA' into claude/tach-rpm-cylinder-config-c1e4ht
TheAngryRaven Aug 24, 2026
0f85200
Merge pull request #154 from TheAngryRaven/claude/tach-rpm-cylinder-c…
TheAngryRaven Aug 24, 2026
f2f6e53
Restructure CHANGELOG: fold post-release-cut merges into 4.1.0, dedup…
claude Aug 24, 2026
8237840
Merge pull request #157 from TheAngryRaven/claude/pr-150-cleanup-zm2j26
TheAngryRaven Aug 24, 2026
265888b
Renumber colliding plan records: the three 0012s become 0012/0013/0014
claude Aug 24, 2026
4b71333
Merge pull request #158 from TheAngryRaven/claude/pr-150-cleanup-zm2j26
TheAngryRaven Aug 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 12 additions & 3 deletions .github/workflows/beta.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ name: beta
# builds you flash from your phone via DovesDataViewer's beta channel while
# wrenching at the track.
#
# Three things differ from release.yml:
# Four things differ from release.yml:
# 1. The image self-reports a beta version. The build injects
# -DFIRMWARE_VERSION_OVERRIDE=<base>-beta.<gitsha> so a flashed unit
# reports its exact commit over BLE (DIS) — you can read the version off
Expand All @@ -23,6 +23,14 @@ name: beta
# from master/release, which default the flag to 0. See project.h for
# the full flag list — anything else defaulted off stays off here too
# (BIRDSEYE_ENABLE_ONBOARD_CHARGING in particular).
# 4. Beta is also the loop-profiling channel: -DBIRDSEYE_ENABLE_PROFILING=1
# turns on the LOOP PROFILE page and the pin-30 scope output (plan
# 0011). That flag TAKES PIN 30 FROM THE NEOPIXEL BOOST EN LINE, so a
# beta image can no longer switch the 5 V rail — including at sleep,
# where the level is retained. A beta unit left asleep on a battery
# with LEDs wired will drain it. That is the accepted cost of getting
# real per-subsystem CPU numbers off the hardware; prod images are
# unaffected. See project.h and BirdsEye/profiling.h.
#
# NOTE: the build steps intentionally mirror release.yml's build job. If the
# BSP version, library list, or asset layout changes there, mirror it here.
Expand Down Expand Up @@ -93,7 +101,8 @@ jobs:
"Adafruit SSD1306" \
"SparkFun u-blox GNSS v3" \
"Seeed Arduino LSM6DS3" \
"ArxTypeTraits"
"ArxTypeTraits" \
"Adafruit NeoPixel"
# Beta builds track the lap-timer library's own BETA branch so the
# two beta channels move together (master/release pin a tag).
arduino-cli lib install --git-url https://github.com/TheAngryRaven/DovesLapTimer.git#BETA
Expand All @@ -103,7 +112,7 @@ jobs:
run: |
arduino-cli compile \
--fqbn "${{ matrix.board.fqbn }}" \
--build-property "compiler.cpp.extra_flags=-D${{ matrix.board.define }} -DFIRMWARE_VERSION_OVERRIDE=${{ steps.ver.outputs.betaver }} -DSERIAL_BUFFER_SIZE=256 -DDOVES_DISABLE_DEBUG -DBIRDSEYE_ENABLE_SENSOREGG=1" \
--build-property "compiler.cpp.extra_flags=-D${{ matrix.board.define }} -DFIRMWARE_VERSION_OVERRIDE=${{ steps.ver.outputs.betaver }} -DSERIAL_BUFFER_SIZE=256 -DDOVES_DISABLE_DEBUG -DBIRDSEYE_ENABLE_SENSOREGG=1 -DBIRDSEYE_ENABLE_NEOPIXEL=1 -DBIRDSEYE_ENABLE_PROFILING=1" \
--output-dir dist \
--warnings none \
BirdsEye
Expand Down
11 changes: 10 additions & 1 deletion .github/workflows/clang-tidy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,4 +41,13 @@ jobs:
BirdsEye/lap_format.cpp \
BirdsEye/tach_filter.cpp \
BirdsEye/camera_fsm.cpp \
BirdsEye/insta360_protocol.cpp
BirdsEye/insta360_protocol.cpp \
BirdsEye/led_frame.cpp \
BirdsEye/led_modes.cpp \
BirdsEye/led_status.cpp \
BirdsEye/led_animations.cpp \
BirdsEye/sector_purple.cpp \
BirdsEye/local_time.cpp \
BirdsEye/setting_parse.cpp \
BirdsEye/ble_stream.cpp \
BirdsEye/loop_profile.cpp
66 changes: 62 additions & 4 deletions .github/workflows/compile-sketch.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,10 +34,15 @@ jobs:
# release tag.
LAPTIMER_REF: ${{ (github.base_ref == 'BETA' || github.head_ref == 'BETA' || github.ref_name == 'BETA') && 'BETA' || 'v4.3.0' }}
# Feature flags for this build (see project.h). BETA enables the
# SensorEgg POC exactly as beta.yml does, so the flag-on build is
# compile-checked on the PR rather than first failing on the publish
# workflow. Everything else builds the master/release defaults (off).
FEATURE_FLAGS: ${{ (github.base_ref == 'BETA' || github.head_ref == 'BETA' || github.ref_name == 'BETA') && '-DBIRDSEYE_ENABLE_SENSOREGG=1' || '' }}
# SensorEgg POC, the NeoPixel strip and loop profiling exactly as
# beta.yml does, so the flag-on build is compile-checked on the PR
# rather than first failing on the publish workflow. Everything else
# builds the project.h defaults — which since 4.1.0 means the
# NeoPixel strip is ON (it is a core feature now; the flag defaults
# to 1) and only the SensorEgg POC and profiling are off. So the
# difference between the two arms is SensorEgg, profiling, and the
# DovesLapTimer ref.
FEATURE_FLAGS: ${{ (github.base_ref == 'BETA' || github.head_ref == 'BETA' || github.ref_name == 'BETA') && '-DBIRDSEYE_ENABLE_SENSOREGG=1 -DBIRDSEYE_ENABLE_NEOPIXEL=1 -DBIRDSEYE_ENABLE_PROFILING=1' || '' }}
# Build both XIAO nRF52840 variants. The Sense board has the onboard
# LSM6DS3 IMU; the plain board does not (accelerometer logging degrades
# gracefully). Same MCU/BLE/bootloader otherwise.
Expand Down Expand Up @@ -77,6 +82,7 @@ jobs:
- name: SparkFun u-blox GNSS v3
- name: Seeed Arduino LSM6DS3
- name: ArxTypeTraits
- name: Adafruit NeoPixel
- source-url: https://github.com/TheAngryRaven/DovesLapTimer.git
version: ${{ env.LAPTIMER_REF }}
sketch-paths: |
Expand Down Expand Up @@ -193,3 +199,55 @@ jobs:
name: size-deltas-${{ matrix.board.name }}
path: sketches-reports
if-no-files-found: ignore

# Flag-OFF compile, for BETA-targeted work only.
#
# The `compile` job above picks ONE flag set per PR: BETA-targeted work
# builds with SensorEgg + profiling ON, everything else with them off.
# That means code inside a `#else` arm of one of those flags reaches
# master having never been through a compiler — and plan 0013 added
# several (the DOVEX row/header shapes and the settings defaults now
# differ by channel). This job closes that hole from the BETA side.
#
# One board is enough: the two arms here differ only in feature flags,
# and the sense/non-sense split is already covered above.
# LAPTIMER_REF deliberately stays BETA so the flags are the ONLY
# variable — pinning the release tag as well would fail on BETA-era
# library APIs and tell us nothing about the flags.
compile-stock-arm:
name: xiao-nrf52840-sense (flags off)
if: >-
github.base_ref == 'BETA' || github.head_ref == 'BETA' ||
github.ref_name == 'BETA'
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Install adafruit-nrfutil
run: pip install --user adafruit-nrfutil

- name: Compile sketch with the feature flags off
uses: arduino/compile-sketches@v1
with:
fqbn: Seeeduino:nrf52:xiaonRF52840Sense
platforms: |
- name: Seeeduino:nrf52
source-url: https://files.seeedstudio.com/arduino/package_seeeduino_boards_index.json
libraries: |
- name: ArduinoJson
- name: SdFat - Adafruit Fork
- name: Adafruit GFX Library
- name: Adafruit SH110X
- name: Adafruit SSD1306
- name: SparkFun u-blox GNSS v3
- name: Seeed Arduino LSM6DS3
- name: ArxTypeTraits
- name: Adafruit NeoPixel
- source-url: https://github.com/TheAngryRaven/DovesLapTimer.git
version: BETA
sketch-paths: |
- BirdsEye
cli-compile-flags: |
- --build-property
- compiler.cpp.extra_flags=-DBIRDSEYE_BOARD_SENSE -DSERIAL_BUFFER_SIZE=256 -DDOVES_DISABLE_DEBUG
3 changes: 2 additions & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,8 @@ jobs:
"Adafruit SSD1306" \
"SparkFun u-blox GNSS v3" \
"Seeed Arduino LSM6DS3" \
"ArxTypeTraits"
"ArxTypeTraits" \
"Adafruit NeoPixel"
# Release builds pin the lap-timer library to a known-good tag —
# bump deliberately. (Beta builds track its BETA branch instead.)
arduino-cli lib install --git-url https://github.com/TheAngryRaven/DovesLapTimer.git#v4.3.0
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
# Host unit-test build (also covered by tests/.gitignore)
build/
tests/build/
# Sim wasm build (emcmake; CI uploads its dist/ as the artifact)
build-wasm/

# Coverage artifacts generated by the coverage workflow / local runs
public-badges/
Expand Down
Loading
Loading