Repository navigation
Boards: the Echo Dot 3rd gen (donut), and codec state as board data - #1033
Merged
Merged
Conversation
Registers donut (A32DOYMUN6DTXA, read off 41C8, FireOS 6.5.7.5 NS6575) and moves what was still biscuit's inside the drivers into pkg/board, so a board that differs is data, not a branch: - Routes and InputGains: codec.EnsureRoutes writes the board's. biscuit and radar share tlvRoutes/tlvInputGains (moved from the codec package with their measurements); donut's come from its own mixer_paths.xml. - Speaker.AmpSwitch, Speaker.Volume (control, mute, unity) and Speaker.Jack (insert/remove writes): the speaker's Init, Close, jack routing and drift reconcile read them. The TAS2770 has no amp switch and unity at 255; biscuit's 127 there is -64dB. The jack reconcile reads back whatever the board's table writes. - Keys is a list of input devices and a key means its code: biscuit splits action+mute from volume, donut action+volume from mute. Press state is per key and an evdev autorepeat (value 2) is ignored: donut's gpio-keys autorepeats, and the old loop read the first repeat as a release, which would end every hold (pairing is a 7s hold). - Amazon's button service is acebuttond on FireOS 6, so stop both names; radar on FireOS 6 never had it stopped. - Lux reads the IIO "<int>.<micro>" form (tsl2572 reads "3.636000"), held to that shape rather than whatever ParseFloat accepts. donut's mics (TDM_Capture, 4ch S32_LE, loopback on its own DL1_AWB_Record) are not readable by the capture path yet, so the board states no capture. A device with no readable mic now runs as a speaker instead of exiting into start_server.sh's rollback: no "mic" capability, listen_state degraded with the reason in every mode (the controller's em_listen agrees from the missing capability, so controller mode no longer reads as streaming), no voice turn from the button (em_button.NO_MIC: error cue; holds and tap events still go to HA), no listen loop or mic_start, and no wake word runtime install. em_controller.py's size baseline rises by those 22 lines. Checked on 41C8 against an isolated bench controller: every part found by name, DL1 RUNNING at 48k/2048 with mixer, acebuttond and ledcontroller stopped, pin 57 still in its audio function, lux 62 against 62.404, listen reported "degraded — speaker only". Not yet heard, seen or pressed: the speaker, LED orientation, buttons and the jack. Reference: @shortgame11's Dot 3 port (GPIO 444 as an audio pin, the speaker route decided at stream open) and @technotiger's note on #527 that the radio behind /dev/stpbt reads differently; rebuilt to the board model here. Co-authored-by: shortgame11 <35879721+shortgame11@users.noreply.github.com> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BofN7aQbgNvVKNVXdGNR2f
This was referenced Oct 24, 2026
wilbowes
added a commit
that referenced
this pull request
Oct 26, 2026
…icrophones) (#1041) - JOURNAL: the donut's bootloader (199-byte cmdline, ramdisk only in recovery) and the image that boots it; the cache superblock emOS's trail was destroying; the warm-reboot hang traced to the unclaimed ring; the donut hearing its own wake word; its stock sound read and swept; the open no-WiFi-after-emOS fault. - CLAUDE.md: devcheck, so nine emOS off-target checks, in the quickref and the release and CI wording. - device/CLAUDE.md: the capture as board data (MicArray, Loopback opened first, MicMutes, RingLED0), the donut's microphone and ring geometry, and what is still biscuit's inside the drivers. Claude-Session: https://claude.ai/code/session_01XMzTzy1gEcUkKfAD2QDkL5 Co-authored-by: Wil Bowes <wil@presence.run> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The Echo Dot 3rd gen (donut) is now a known board and runs as a speaker; its mics come next. Read off one unit (41C8, stock FireOS 6.5.7.5, NS6575). It is an MT8167 board with its own layout, so what was still biscuit's inside the drivers is now board data in
pkg/board, not branches:mixer_paths.xml.acebuttondthere and was never stopped (radar included). And the light sensor accepts IIO's decimal lux.A board whose mics the firmware can't read runs as a speaker rather than exiting into the start script's rollback. That is the Dot 3 until its 4-channel capture is supported. It announces no
mic, reports listening as degraded ("speaker only") in every mode on both halves, gets no voice turn from the button (an error cue instead; holds and tap events still reach HA), and gets no listen loop or wake word install.em_controller.py's size baseline rises by those 22 lines.The controller shows the board as "Echo Dot Gen 3 (donut)" in Home Assistant.
Rebuilt to this design with reference to @shortgame11's Dot 3 port (GPIO 444 as an audio pin, the speaker route set at stream open), and @technotiger's note on #527 that the radio behind
/dev/stpbtreads differently. Co-authored.Tested
go vet, the ARMserverbuild, the full controller suite (2239). Mutation checks on each new rule.server boardon the emOS Dot 2s, whose part names are the same as VVV's.Next: the Dot 3's capture (4 mics, one per corner, with the playback loopback on its own PCM as the echo reference), then emOS if its bootloader allows it.
🤖 Generated with Claude Code
https://claude.ai/code/session_01BofN7aQbgNvVKNVXdGNR2f