I made my own controller!

This commit is contained in:
Jesse Smick
2026-07-20 03:05:31 -06:00
parent 3394c880e2
commit c667858460
3 changed files with 334 additions and 49 deletions
+177
View File
@@ -0,0 +1,177 @@
# 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.