Files
exploring-christmas-lights/command-sweep.md
T
2026-07-20 03:05:31 -06:00

178 lines
8.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 7-bit command sweep notes
## Revised protocol (after sweep)
Layout: `PPP M BGR` (7 bits, MSB first). Same pulse timing as before.
| Field | Bits | Meaning |
| ------- | ------ | --------- |
| PPP | 3 | Pattern (8 modes — not 4) |
| M | 1 | Palette / multi flag |
| BGR | 3 | Color or palette select |
The old write-up treated this as `0 PP M BGR` (leading bit always 0 + 2 pattern bits). The leading bit is actually **pattern bit 2**; the app simply never used patterns `100``111`.
### Patterns (`PPP`)
| PPP | Name (working) | Behavior |
| ----- | ---------------- | ---------- |
| `000` | Steady | Solid color / palette |
| `001` | Fade | Fade (OEM “Fade”) |
| `010` | Sparkle | Sparkle to white (OEM) |
| `011` | Firefly | Firefly (OEM) |
| `100` | Twinkle | Mostly off; random bulbs flash on in color (colored sparkles on dark) |
| `101` | Fast sparkle | Like Sparkle but faster |
| `110` | Anti-sparkle | Base color on; sparkles turn bulbs **off** (black sparkles) |
| `111` | Fast twinkle | Faster version of Twinkle (`100`) |
### Color / palette (`M` + `BGR`)
When `M=0`, `BGR` is a normal solid color (same as before):
| BGR | Color |
| ----- | ------- |
| `000` | Off |
| `001` | Red |
| `010` | Green |
| `011` | Yellow |
| `100` | Blue |
| `101` | Magenta |
| `110` | Cyan |
| `111` | White |
When `M=1`, `BGR` selects a **palette** (not a single RGB mix):
| BGR | Palette |
| ----- | --------- |
| `000` | Classic multi (per-bulb random across colors) |
| `001` | Christmas — red / white / green |
| `010` | July 4th — red / white / blue |
| `011` | Same as classic multi (indistinguishable from `000` in testing) |
| `100``111` | Often **off** or pattern-dependent (see tables; Fade/Firefly sometimes treat these as solid B/M/C/W) |
Palette behavior depends on pattern (e.g. Steady+Multi+`1xx` → off; Fade+Multi+`1xx` → solid colors; Sparkle+Multi+`1xx` → dark with white sparkles).
### OEM / app subset
The phone app only used `PPP` in `000``011` with either solid colors (`M=0`) or Multi (`M=1`, `BGR=000`). Hidden: palettes `001`/`010`/`011` and patterns `100``111`.
---
## Known (skipped by early sweep sketch)
- `PPP` `000``011`, `M=0`, any `BGR` → published Steady/Fade/Sparkle/Firefly × colors
- `PPP` `000``011`, `M=1`, `BGR=000` → Multi with those patterns
---
## Sweep results
### A) Multi + nonzero BGR (`PPP` `000``011`, `M=1`, `BGR≠000`)
| Dec | Binary `PPP M BGR` | PPP | M | BGR | Observed |
| ----: | -------------------- | ----- | --- | ----- | ---------- |
| 9 | `000 1 001` | Steady | 1 | 001 | red/white/green |
| 10 | `000 1 010` | Steady | 1 | 010 | red/white/blue |
| 11 | `000 1 011` | Steady | 1 | 011 | classic multi (same as `000`) |
| 12 | `000 1 100` | Steady | 1 | 100 | off |
| 13 | `000 1 101` | Steady | 1 | 101 | off |
| 14 | `000 1 110` | Steady | 1 | 110 | off |
| 15 | `000 1 111` | Steady | 1 | 111 | off |
| 25 | `001 1 001` | Fade | 1 | 001 | red/white/green |
| 26 | `001 1 010` | Fade | 1 | 010 | red/white/blue |
| 27 | `001 1 011` | Fade | 1 | 011 | classic multi (same as `000`) |
| 28 | `001 1 100` | Fade | 1 | 100 | blue |
| 29 | `001 1 101` | Fade | 1 | 101 | magenta |
| 30 | `001 1 110` | Fade | 1 | 110 | cyan |
| 31 | `001 1 111` | Fade | 1 | 111 | white |
| 41 | `010 1 001` | Sparkle | 1 | 001 | red/white/green |
| 42 | `010 1 010` | Sparkle | 1 | 010 | red/white/blue |
| 43 | `010 1 011` | Sparkle | 1 | 011 | classic multi (same as `000`) |
| 44 | `010 1 100` | Sparkle | 1 | 100 | all off but still white sparkle |
| 45 | `010 1 101` | Sparkle | 1 | 101 | ditto |
| 46 | `010 1 110` | Sparkle | 1 | 110 | ditto |
| 47 | `010 1 111` | Sparkle | 1 | 111 | ditto |
| 57 | `011 1 001` | Firefly | 1 | 001 | red/white/green |
| 58 | `011 1 010` | Firefly | 1 | 010 | red/white/blue |
| 59 | `011 1 011` | Firefly | 1 | 011 | classic multi (same as `000`) |
| 60 | `011 1 100` | Firefly | 1 | 100 | blue |
| 61 | `011 1 101` | Firefly | 1 | 101 | magenta |
| 62 | `011 1 110` | Firefly | 1 | 110 | cyan |
| 63 | `011 1 111` | Firefly | 1 | 111 | white |
### B) Alternate patterns (`PPP` `100``111`)
| Dec | Binary `PPP M BGR` | PPP | M | BGR | Observed |
| ----: | -------------------- | ----- | --- | ----- | ---------- |
| 64 | `100 0 000` | Twinkle | 0 | 000 | off |
| 65 | `100 0 001` | Twinkle | 0 | 001 | all off but red sparkle |
| 66 | `100 0 010` | Twinkle | 0 | 010 | ditto but green sparkle |
| 67 | `100 0 011` | Twinkle | 0 | 011 | ditto but yellow |
| 68 | `100 0 100` | Twinkle | 0 | 100 | ditto blue |
| 69 | `100 0 101` | Twinkle | 0 | 101 | ditto magenta |
| 70 | `100 0 110` | Twinkle | 0 | 110 | ditto cyan |
| 71 | `100 0 111` | Twinkle | 0 | 111 | ditto white |
| 72 | `100 1 000` | Twinkle | 1 | 000 | ditto but the sparkles are multi |
| 73 | `100 1 001` | Twinkle | 1 | 001 | ditto but sparkles are red/white/green |
| 74 | `100 1 010` | Twinkle | 1 | 010 | ditto but red/white/blue |
| 75 | `100 1 011` | Twinkle | 1 | 011 | ditto classic multi (same as `000`) |
| 76 | `100 1 100` | Twinkle | 1 | 100 | off |
| 77 | `100 1 101` | Twinkle | 1 | 101 | off |
| 78 | `100 1 110` | Twinkle | 1 | 110 | off |
| 79 | `100 1 111` | Twinkle | 1 | 111 | off |
| 80 | `101 0 000` | Fast sparkle | 0 | 000 | all off but fast white sparkles |
| 81 | `101 0 001` | Fast sparkle | 0 | 001 | red and fast white sparkles |
| 82 | `101 0 010` | Fast sparkle | 0 | 010 | ditto green |
| 83 | `101 0 011` | Fast sparkle | 0 | 011 | ditto yellow |
| 84 | `101 0 100` | Fast sparkle | 0 | 100 | ditto blue |
| 85 | `101 0 101` | Fast sparkle | 0 | 101 | ditto magenta |
| 86 | `101 0 110` | Fast sparkle | 0 | 110 | ditto cyan |
| 87 | `101 0 111` | Fast sparkle | 0 | 111 | ditto but white (normal white is slightly dim and sparkles are brighter) |
| 88 | `101 1 000` | Fast sparkle | 1 | 000 | multi and fast sparkles |
| 89 | `101 1 001` | Fast sparkle | 1 | 001 | red/white/green and fast sparkles |
| 90 | `101 1 010` | Fast sparkle | 1 | 010 | ditto red/white/blue |
| 91 | `101 1 011` | Fast sparkle | 1 | 011 | classic multi and fast sparkles (same as `000`) |
| 92 | `101 1 100` | Fast sparkle | 1 | 100 | off and fast sparkles |
| 93 | `101 1 101` | Fast sparkle | 1 | 101 | ditto |
| 94 | `101 1 110` | Fast sparkle | 1 | 110 | ditto |
| 95 | `101 1 111` | Fast sparkle | 1 | 111 | ditto |
| 96 | `110 0 000` | Anti-sparkle | 0 | 000 | off |
| 97 | `110 0 001` | Anti-sparkle | 0 | 001 | red and anti-sparkles (black sparkles) |
| 98 | `110 0 010` | Anti-sparkle | 0 | 010 | ditto green |
| 99 | `110 0 011` | Anti-sparkle | 0 | 011 | ditto yellow |
| 100 | `110 0 100` | Anti-sparkle | 0 | 100 | ditto blue |
| 101 | `110 0 101` | Anti-sparkle | 0 | 101 | ditto magenta |
| 102 | `110 0 110` | Anti-sparkle | 0 | 110 | ditto cyan |
| 103 | `110 0 111` | Anti-sparkle | 0 | 111 | ditto white |
| 104 | `110 1 000` | Anti-sparkle | 1 | 000 | ditto multi |
| 105 | `110 1 001` | Anti-sparkle | 1 | 001 | ditto red/white/green |
| 106 | `110 1 010` | Anti-sparkle | 1 | 010 | ditto red/white/blue |
| 107 | `110 1 011` | Anti-sparkle | 1 | 011 | ditto classic multi (same as `000`) |
| 108 | `110 1 100` | Anti-sparkle | 1 | 100 | off |
| 109 | `110 1 101` | Anti-sparkle | 1 | 101 | off |
| 110 | `110 1 110` | Anti-sparkle | 1 | 110 | off |
| 111 | `110 1 111` | Anti-sparkle | 1 | 111 | off |
| 112 | `111 0 000` | Fast twinkle | 0 | 000 | off |
| 113 | `111 0 001` | Fast twinkle | 0 | 001 | all off but fast red sparkles |
| 114 | `111 0 010` | Fast twinkle | 0 | 010 | ditto green |
| 115 | `111 0 011` | Fast twinkle | 0 | 011 | ditto yellow |
| 116 | `111 0 100` | Fast twinkle | 0 | 100 | ditto blue |
| 117 | `111 0 101` | Fast twinkle | 0 | 101 | ditto magenta |
| 118 | `111 0 110` | Fast twinkle | 0 | 110 | ditto cyan |
| 119 | `111 0 111` | Fast twinkle | 0 | 111 | ditto white |
| 120 | `111 1 000` | Fast twinkle | 1 | 000 | ditto multi |
| 121 | `111 1 001` | Fast twinkle | 1 | 001 | ditto red/white/green |
| 122 | `111 1 010` | Fast twinkle | 1 | 010 | ditto red/white/blue |
| 123 | `111 1 011` | Fast twinkle | 1 | 011 | ditto classic multi (same as `000`) |
| 124 | `111 1 100` | Fast twinkle | 1 | 100 | off |
| 125 | `111 1 101` | Fast twinkle | 1 | 101 | off |
| 126 | `111 1 110` | Fast twinkle | 1 | 110 | off |
| 127 | `111 1 111` | Fast twinkle | 1 | 111 | off |
## Summary
- **8 patterns**, not 4 — high bit selects the alternate set (twinkle / fast sparkle / anti-sparkle / fast twinkle).
- **`M=1` is palette mode**: `000`/`011` classic multi, `001` Christmas R/W/G, `010` July 4th R/W/B; `1xx` is pattern-dependent (often off).
- Fade/Firefly + Multi + `1xx` oddly map to solid B/M/C/W — possible alias or shared decode path.
- Names above (Twinkle, Fast sparkle, etc.) are working labels from observation, not OEM names.