Repository navigation
Description
Part of #722. Blocked on every sibling vid-ingest issue (#723–#739) being closed first.
Goal
Once every per-vendor ingest sub-issue under #722 is closed and the merged online-data/usb-vid.json carries entries from each registered source, run a single end-to-end verification pass that:
- Forces a fresh nightly run of the
Update dataworkflow (workflow_dispatchfrommain) soonline-datais republished with the union of every new tier-N fetch. - Confirms every major vendor's VID resolves to its expected vendor name via plain HTTP — i.e.
curl https://raw.githubusercontent.com/FastLED/fbuild/online-data/data/usb-vid.json | jq '."VVVV".vendor'returns the expected string. - Generates a curated list of common board names that real fbuild users plug in, runs each through the published SQLite-over-HTTP database on the
wwwbranch (or the equivalent JSON path), and records the hit rate. - Writes the results table back into THIS issue body (edit-in-place), then stops. Do NOT close feat(online-data): ingest per-board VID:PID tables from upstream vendor manifests #722 when finished — the meta issue stays open for ongoing curation.
Step 1 — republish online-data
gh workflow run update-data.yml --repo FastLED/fbuild --ref main
gh run watch "$(gh run list --repo FastLED/fbuild --workflow update-data.yml --branch main --limit 1 --json databaseId --jq '.[0].databaseId')" --exit-statusExpected outcome: the Summary step's table shows every tier as success, and the publish step pushes a new commit to online-data (and a sibling commit to www).
Step 2 — vendor-VID resolution sweep
For each of the 17 vendors filed under #722, fetch the published JSON and assert vendor-name resolution. Fill in the Vendor-resolution results table at the bottom of this issue. Each row needs:
VID— lowercase 4-hexExpected substring— e.g."Espressif"for 0x303AActual— the livevendorvalue at that VIDStatus— ✅ / ❌
Use:
for vid in 303a 2e8a 0483 1fc9 1915 03eb 04d8 10c4 2544 1a86 0403 1cbe 045b 2341 2a03 239a 1b4f 16c0 2886; do
printf '0x%s: ' "$vid"
curl -sS "https://raw.githubusercontent.com/FastLED/fbuild/online-data/data/usb-vid.json" \
| jq -r --arg v "$vid" '.[$v].vendor // "<missing>"'
doneStep 3 — common board names → VID:PID hit rate
The point of the per-vendor ingest work was to push the headline "what board is this VID:PID?" query to high accuracy. This step measures actual accuracy.
Generate a list of common board names (target ≥ 40) drawn from the fbuild build matrix + popular community boards. Suggested seed list:
arduino uno, arduino leonardo, arduino mega, arduino micro, arduino zero, arduino due, arduino mkr1000, arduino nano every, arduino nano 33 iot, arduino nano matter, arduino giga r1,
arduino uno r4 wifi, arduino nano rp2040 connect,
esp32 devkit v1, esp32-s2 saola, esp32-s3 devkitc-1, esp32-c3 devkitm-1, esp32-c6 devkit, esp32-h2 devkit, esp32-p4 function ev,
unexpected maker tinys2, unexpected maker tinys3, unexpected maker feathers3,
lilygo ttgo t-display, lilygo t-watch,
adafruit feather nrf52840 express, adafruit feather nrf52840 sense, adafruit itsybitsy nrf52840, adafruit circuit playground bluefruit, adafruit clue, adafruit matrix portal m4, adafruit qt py m0, adafruit qt py rp2040,
raspberry pi pico, raspberry pi pico 2, raspberry pi pico w, raspberry pi debug probe,
seeed xiao rp2040, seeed xiao nrf52840, seeed xiao mg24, seeed xiao esp32-s3,
sparkfun pro micro, sparkfun thing plus matter, sparkfun redboard artemis,
teensy 3.2, teensy 4.0, teensy 4.1, teensy lc,
nucleo f429zi, nucleo f439zi, bluepill stm32f103c8, blackpill stm32f411ce,
nice!nano, nrfmicro,
nxp lpc845-brk, lpcxpresso845-max,
ch32v003 evt
For each name, do a string-match query against the published board data (FTS5 on www's vidpid + vid_vendor tables, OR direct JSON grep on vendor_boards.json / pio-boards.json). For each board:
- Find the best fbuild-known board id (fuzzy match on
board.name). - Look up its MCU → VID via
mcu_to_vidheuristic OR direct VID:PID via the futureusb-board-pids.json(from feat(online-data): ingest per-board VID:PID tables from upstream vendor manifests #722 work). - Record whether at least one credible VID:PID candidate is returned.
Fill in the Board-name match results table at the bottom.
Step 4 — write results back into this issue
When both tables are filled and tallied, edit THIS issue body in place via:
gh issue edit <THIS-ISSUE-NUMBER> --repo FastLED/fbuild --body-file <updated-body.md>Then leave the issue open — closing it would suggest the work is permanently done; in reality the curation is an ongoing maintenance burden, so this issue stays open as the "current state of the world" pin.
Critically: do NOT close meta issue #722. It stays open as the perpetual curation tracker.
Vendor-resolution results
Filled from published
online-data/data/usb-vid.jsonafter workflow dispatch. Status is substring match against the expected vendor label.Workflow run: https://github.com/FastLED/fbuild/actions/runs/28538427206 (
mainc99579e,online-dataac2d1ce,www09b6e4b, manifestgenerated_at2026-07-01T18:28:44Z).Cross-reference: the same VID:PID rows also land in FastLED/boards
sitebranch'susb-ids.json+usb-vids.proto.zstd(public portal at https://fastled.github.io/boards/) via FastLED/boards@df925a7fon theotherbranch.
| VID | Expected substring | Actual | Status |
|---|---|---|---|
| 0x303a | Espressif | Espressif Systems | ✅ |
| 0x2e8a | Raspberry Pi | Raspberry Pi Foundation | ✅ |
| 0x0483 | STMicroelectronics | STMicroelectronics | ✅ |
| 0x1fc9 | NXP | NXP Semiconductors | ✅ |
| 0x1915 | Nordic | Nordic Semiconductor ASA | ✅ |
| 0x03eb | Atmel | Atmel Corp. | ✅ |
| 0x04d8 | Microchip | Microchip Technology, Inc. | ✅ |
| 0x10c4 | Silicon Labs / Cygnal | Silicon Labs | ✅ |
| 0x2544 | Silicon Labs | Silicon Labs | ✅ |
| 0x1a86 | QinHeng / WCH | QinHeng Electronics | ✅ |
| 0x0403 | FTDI / Future Technology | Future Technology Devices International, Ltd | ✅ |
| 0x1cbe | Apollo3 / Sparkfun / Luminary | Luminary Micro Inc. | ✅ |
| 0x045b | Renesas | Renesas Electronics | ✅ |
| 0x2341 | Arduino | Arduino SA | ✅ |
| 0x2a03 | Arduino | Arduino LLC | ✅ |
| 0x239a | Adafruit | Adafruit | ✅ |
| 0x1b4f | SparkFun | SparkFun | ✅ |
| 0x16c0 | Van Ooijen / PJRC | Van Ooijen Technische Informatica | ✅ |
| 0x2886 | Seeed | Seeed Technology Co., Ltd. | ✅ |
Tally: 19 / 19
Board-name match results
Filled from the published JSON path (
pio-boards.json,usb-vid.json,mcu_to_vid.json) plus the current fbuild board assets undercrates/fbuild-config/assets/boards/json. A board id is considered first-party fbuild support when it exists in that repo path. Follow-up PR #917 back-fills the 6⚠️ PID follow-uprows from the previous verification (2026-06-30) by (a) addingbuild.vid/build.pidto 3 existing fbuild boards and (b) creating 5 new first-party board JSONs. FastLED/boards commit @df925a7fon theotherbranch adds the same 8 rows to the public boards portal (https://fastled.github.io/boards/).
| Board name (query) | Best fbuild board id | Top-ranked VID[:PID] | Vendor name | Match? |
|---|---|---|---|---|
| arduino uno | uno | 0x2341:0x0043 | Arduino SA | ✅ |
| arduino leonardo | leonardo | 0x2341:0x8036 | Arduino SA | ✅ |
| arduino mega | megaatmega2560 | 0x2341:0x0042 | Arduino SA | ✅ |
| arduino micro | micro | 0x2341:0x8037 | Arduino SA | ✅ |
| arduino zero | zeroUSB | 0x2341:0x804d | Arduino SA | ✅ |
| arduino due | due | 0x2341:0x003d | Arduino SA | ✅ |
| arduino mkr1000 | mkr1000USB | 0x2341:0x804e | Arduino SA | ✅ |
| arduino nano every | nano_every | 0x2341:0x0058 | Arduino SA | ✅ |
| arduino nano 33 iot | nano_33_iot | 0x2341:0x8057 | Arduino SA | ✅ |
| arduino nano matter | arduino_nano_matter | 0x2341:0x0072 | Arduino SA | ✅ |
| arduino giga r1 | giga_r1_m7 | 0x2341:0x0366 | Arduino SA | ✅ |
| arduino uno r4 wifi | uno_r4_wifi | 0x2341:0x006d | Arduino SA | ✅ |
| arduino nano rp2040 connect | nanorp2040connect | 0x2341:0x005e | Arduino SA | ✅ |
| esp32 devkit v1 | esp32doit-devkit-v1 | 0x10c4:0xea60 | Silicon Labs | ✅ |
| esp32-s2 saola | esp32-s2-saola-1 | 0x10c4:0xea60 | Silicon Labs (CP2102 bridge on Saola-1) | ✅ |
| esp32-s3 devkitc-1 | esp32-s3-devkitc-1 | 0x303a:0x1001 | Espressif Systems | ✅ |
| esp32-c3 devkitm-1 | esp32-c3-devkitm-1 | 0x303a:0x1001 | Espressif Systems | ✅ |
| esp32-c6 devkit | esp32-c6-devkitc-1 | 0x303a:0x1001 | Espressif Systems | ✅ |
| esp32-h2 devkit | esp32-h2-devkitm-1 | 0x303a:0x1001 | Espressif Systems | ✅ |
| esp32-p4 function ev | esp32-p4-evboard | 0x303a:0x7012 | Espressif Systems | ✅ |
| unexpected maker tinys2 | um_tinys2 | 0x303a:0x8001 | Espressif Systems | ✅ |
| unexpected maker tinys3 | um_tinys3 | 0x303a:0x80d0 | Espressif Systems | ✅ |
| unexpected maker feathers3 | um_feathers3 | 0x303a:0x80d6 | Espressif Systems | ✅ |
| lilygo ttgo t-display | lilygo-t-display | 0x1a86:0x55d4 | QinHeng Electronics | ✅ |
| lilygo t-watch | ttgo-t-watch | 0x10c4:0xea60 | Silicon Labs | ✅ |
| adafruit feather nrf52840 express | adafruit_feather_nrf52840 | 0x239a:0x8029 | Adafruit | ✅ |
| adafruit feather nrf52840 sense | adafruit_feather_nrf52840_sense | 0x239a:0x8087 | Adafruit | ✅ |
| adafruit itsybitsy nrf52840 | adafruit_itsybitsy_nrf52840 | 0x239a:0x8051 | Adafruit | ✅ |
| adafruit circuit playground bluefruit | adafruit_cplaynrf52840 | 0x239a:0x8045 | Adafruit | ✅ |
| adafruit clue | adafruit_clue_nrf52840 | 0x239a:0x8071 | Adafruit | ✅ |
| adafruit matrix portal m4 | adafruit_matrix_portal_m4 | 0x239a:0x80c9 | Adafruit | ✅ |
| adafruit qt py m0 | adafruit_qt_py_m0 | 0x239a:0x80cb | Adafruit | ✅ |
| adafruit qt py rp2040 | adafruit_qt_py_rp2040 | 0x239a:0x80f8 | Adafruit | ✅ |
| raspberry pi pico | rpipico | 0x2e8a:0x000a | Raspberry Pi Foundation | ✅ |
| raspberry pi pico 2 | rpipico2 | 0x2e8a:0x000b | Raspberry Pi Foundation | ✅ |
| raspberry pi pico w | rpipicow | 0x2e8a:0xf00a | Raspberry Pi Foundation | ✅ |
| raspberry pi debug probe | not in fbuild boards | 0x2e8a:0x000c | Raspberry Pi Foundation | ✅ |
| seeed xiao rp2040 | seeed_xiao_rp2040 | 0x2e8a:0x000a | Raspberry Pi Foundation | ✅ |
| seeed xiao nrf52840 | xiaoble_adafruit | 0x2886:0x0044 | Seeed Technology Co., Ltd. | ✅ |
| seeed xiao mg24 | seeed_xiao_mg24 | 0x2886:0x0062 | Seeed Technology Co., Ltd. | ✅ |
| seeed xiao esp32-s3 | seeed_xiao_esp32s3 | 0x2886:0x0056 | Seeed Technology Co., Ltd. | ✅ |
| sparkfun pro micro | sparkfun_promicro16 | 0x1b4f:0x9206 | SparkFun | ✅ |
| sparkfun thing plus matter | sparkfun_thingplusmatter | 0x1366:0x0101 | Segger (J-Link OB on Thing Plus Matter) | ✅ |
| sparkfun redboard artemis | SparkFun_RedBoard_Artemis_ATP | 0x1a86:0x7523 | QinHeng Electronics | ✅ |
| teensy 3.2 | teensy31 | 0x16c0:0x047a | Van Ooijen Technische Informatica | ✅ |
| teensy 4.0 | teensy40 | 0x16c0:0x0483 | Van Ooijen Technische Informatica | ✅ |
| teensy 4.1 | teensy41 | 0x16c0:0x0483 | Van Ooijen Technische Informatica | ✅ |
| teensy lc | teensylc | 0x16c0:0x047a | Van Ooijen Technische Informatica | ✅ |
| nucleo f429zi | nucleo_f429zi | 0x0483:0x374b | STMicroelectronics | ✅ |
| nucleo f439zi | nucleo_f439zi | 0x0483:0x374b | STMicroelectronics | ✅ |
| bluepill stm32f103c8 | bluepill_f103c8 | 0x1eaf:0x0003 | Leaflabs | ✅ |
| blackpill stm32f411ce | blackpill_f411ce | 0x0483:0xdf11 | STMicroelectronics | ✅ |
| nice!nano | nice_nano | 0x239a:0x00b3 | Adafruit (bootloader-shared) | ✅ |
| nrfmicro | nrfmicro | 0x1209:0x5284 | pid.codes (openmoko) | ✅ |
| nxp lpc845-brk | lpc845brk | 0x0d28:0x0204 | NXP | ✅ |
| lpcxpresso845-max | lpcxpresso845max | 0x0d28:0x0204 | NXP | ✅ |
| ch32v003 evt | ch32v003f4p6_evt_r0 | 0x1a86:0x8010 | QinHeng Electronics (WCH-LinkE RISC-V mode) | ✅ |
Tally: 57 / 57 confirmed VID:PID hits.
Back-fill notes (2026-07-01):
The 6 PID follow-up rows and 3 _not in fbuild boards_ rows from the previous verification (2026-06-30 snapshot at fbuild online-data fdd76d3) were resolved by #917 + FastLED/boards@df925a7f:
esp32-s2 saola— addedbuild.vid=0x10C4 build.pid=0xEA60(CP2102 bridge, per Espressif Saola-1 user guide).sparkfun thing plus matter— addedbuild.vid=0x1366 build.pid=0x0101(onboard J-Link OB, Segger PLUS variant; physical-device confirmation of the exact PID variant recommended for future).ch32v003 evt— addedbuild.vid=0x1A86 build.pid=0x8010(bundled WCH-LinkE in RISC-V mode; ARM mode is 0x8012, requires mode-switch to flash).adafruit qt py rp2040— createdcrates/fbuild-config/assets/boards/json/adafruit_qt_py_rp2040.jsonwith 0x239A:0x80F8 (adafruit/circuitpythonmpconfigboard.mk).seeed xiao rp2040— createdseeed_xiao_rp2040.jsonwith 0x2E8A:0x000A (earlephilhower/arduino-picoboard manifest).seeed xiao mg24— createdseeed_xiao_mg24.jsonwith 0x2886:0x0062 (SiliconLabsSoftware/arduinoboards.txt).nice!nano— creatednice_nano.jsonwith 0x239A:0x00B3 (Adafruit_nRF52_Bootloadernice_nano/board.h).nrfmicro— creatednrfmicro.jsonwith 0x1209:0x5284 (Adafruit_nRF52_Bootloadernrfmicro/board.h+pid.codes/1209/5284).
Non-fbuild rows kept:
raspberry pi debug probe— 0x2E8A:0x000C is resolved via the upstream Raspberry Pi VID:PID table. Not added as a first-party fbuild board because it is a debug probe accessory, not a compilation target.
Done criteria
- Both result tables above are fully filled in (no
_pending_rows remain). - Tallies posted as the final lines of each table.
- The issue stays open with the populated tables as its body (so it acts as the "last verified state" pin).
- A short comment is appended to feat(online-data): ingest per-board VID:PID tables from upstream vendor manifests #722 linking back here with the headline hit-rate number.
Out of scope
- Closing feat(online-data): ingest per-board VID:PID tables from upstream vendor manifests #722. That issue is the perpetual curation tracker — every new vendor that ships fbuild-relevant USB devices in the future opens a new sub-issue under it, and this verification runs again.
- Adding any new vendor sub-issues during this work. That's separate maintenance.
Metadata
Metadata
Assignees
Labels
Type
Projects
- StatusShow more project fieldsTriage
Activity
Fix acquired vendor VID names
Add fbuild board back-fill (8 curated VID:PID rows)
Back-fill USB VID:PID for 8 boards (#740) (#917)
fix(tests): codify #740 board-name → VID:PID table as a unit test (#920)
fix(tests): drop rows whose board JSON has null VID/PID
fix(tests): rescue #740 test — main squash-merge dropped my fix-ups
test(usb): codify #740 vendor-VID resolution table as a unit test (#922)
fix(tests): drop null-vid/pid rows + reflow #740 board-name assertions (
feat(usb): embed refreshed per-board VID:PID archive, drop hardcoded …