Drop the brightness control, survive and explain a frozen mic

- Remove RGB brightness: firmware 2.1.2 stores the value but the LEDs
  never change, so the control did nothing. PROTOCOL.md notes why.
- Lock the device per transaction (flock) so the CLI and the web
  service can't interleave and steal each other's replies.
- Detect a mic that is plugged in but no longer answering and tell the
  user to replug it (a USB reset is not enough; settings survive).
  Seen when hardware buttons are held while settings are being written.
- Web page keeps the last known value when a poll comes back partial,
  instead of drawing unanswered settings as off.
- New screenshot.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-08 10:45:18 -05:00
co-authored by Claude Opus 5.5
parent 66d159b0d2
commit 1fcf73ed9d
7 changed files with 50 additions and 15 deletions
+6 -3
View File
@@ -9,7 +9,6 @@ this covers the same settings with a local web page and a command-line tool.
- Vocal enhancement
- Hear yourself (headphone monitoring)
- Mute, kept in sync with the mic's touch pad
- RGB ring brightness
- Factory reset
Pure Python, no dependencies. Nothing leaves your machine: the page is served from your own
@@ -80,7 +79,7 @@ keeps its current settings.
dgm20-web --open # open the control page (http://localhost:8720)
dgm20ctl # show current settings
dgm20ctl set nc on nc-level 80
dgm20ctl set monitor off enhance on brightness 40
dgm20ctl set monitor off enhance on
dgm20ctl watch # print changes made on the mic itself
dgm20ctl info # model and firmware
dgm20ctl factory-reset --yes
@@ -93,7 +92,6 @@ dgm20ctl factory-reset --yes
| `nc-level` | 0-100: noise cancellation strength |
| `enhance` | on, off: vocal enhancement |
| `monitor` | on, off: hear yourself in headphones plugged into the mic |
| `brightness` | 0-100: RGB ring |
Settings are stored on the mic, so they stay the same after a replug and on other computers.
@@ -124,6 +122,11 @@ model that isn't supported yet (see above).
**`dgm20-web: cannot listen on 127.0.0.1:8720`**: it's already running, for example as the
service. Open http://localhost:8720, or pick another port with `--port`.
**"the mic is connected but has stopped answering"**: the mic's settings channel froze. This can
happen if you hold or tap the mic's buttons while settings are being changed from the computer.
Unplug the mic and plug it back in; its settings are kept. A software USB reset is not enough,
the mic needs to lose power.
**Commands not found after installing**: `~/.local/bin` isn't on your `PATH`. Add
`export PATH="$HOME/.local/bin:$PATH"` to your shell profile.