Add 1209:4665 ferros (Nick Spiker) - #1208
Conversation
pid.codes PR #1208 (pidcodes/pidcodes.github.com#1208) assigns 1209:4665 to ferros. Bridge firmware now enumerates as that pair instead of the 1209:000c generic test PID. Confirmed on device: $ lsusb | grep 1209 Bus 001 Device 010: ID 1209:4665 Generic pipe-bridge-rp2040 ferros_hal_m1 still spoofs 0x1838:0xFE01 (Samsung VID) for Pixel 8 / M1 fastboot compatibility — that's a separate question (whether to use a ferros-owned PID once nothing relies on the Samsung-spoof anymore). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
I really don't quite understand what this is. For a project to be eligible for a PID code, it needs to have a embodiment. For instance schematic + board files, or if a commercial board custom firmware is loaded on an actual board. |
|
The embodiment is custom firmware on a real board. ferros is a bare-metal OS (Rust, no Android/Linux underneath) and it brings up the SoC's USB device controller itself and enumerates as a vendor-specific bulk device for its host tooling. It's currently running on a Pixel 8 Pro (Tensor G3) today. lsusb -v from a machine it's plugged into right now: Bus 003 Device 012: ID 1209:4665 Nick Spiker ferros The USB device stack is open (Apache-2.0), in Rust — the descriptor definitions and DWC3 device-mode driver are in the repo; happy to link the exact files. So it's "commercial board + custom firmware that enumerates," per the eligibility note. Let me know if you'd like anything else like a full descriptor tree, the driver source, or a photo of the device enumerated. |
|
To clarify I meant it needs to have a hardware embodiment. It sounds like your embodiment is a Pixel 8 Pro? And your software is the kernel and stack for the phone? |
|
Yes to both. Hardware embodiment: a Google Pixel 8 Pro (Tensor G3). Bootloader unlocked, ferros flashed to the boot partition and running in place of Android, with no Linux underneath. An Apple M1 MacBook Air (booted through m1n1) is the second target, currently in bring-up. Software: ferros is the whole stack on the phone: a bare-metal Rust kernel that owns the USB device controller directly. It initialises the Tensor G3 eUSB2 PHY, drives the Synopsys DWC3 core in device mode, builds the descriptors and services EP0 plus the two bulk endpoints itself. That is the code presenting 1209:4665:
On the software-only question from the howto: the PID identifies the OS itself, the same way the Cupkee and PunchBOOT entries do. Every device running ferros enumerates with it and the host tooling matches on it. End users install ferros onto a phone; they don't build a USB device, so per-user PIDs wouldn't fit. I've updated the PID page in this PR to spell out the hardware embodiment and the USB stack. Happy to add a photo of the enumerated device or a full descriptor dump if that helps. |
Adds:
org/nickspiker/— organization page1209/4665/— ferros (open-source mobile OS in Rust)ferros is licensed under Apache-2.0, with the LICENSE file in the source repository.
PID
0x4665is the ASCII encoding of "Fe" — the chemical symbol for iron, etymological root of the project name, and a human-readable identifier in USB descriptor hex dumps.