08b83a069c481c412ba0d72b8cf56831ddbd9869
- Own dataset from config: slave -> class 255, never TimeTransmitter; auto/master -> class 248 with ptp.priority1/2; accuracy 0xFE, variance 0xFFFF, timeSource 0xA0, clockIdentity EUI-64 from MAC. - BMCA: a foreign TimeTransmitter is followed only if its Announce beats our dataset (always for slave-only); if the followed one turns worse we take over; a better one makes us step down. LISTENING -> MASTER after announceReceiptTimeout x our announce interval. - MASTER: Announce (PTP timescale flag) every 2^log_announce, two-step Sync every 2^log_sync (raw frame, HW TX time in Follow_Up), Delay_Resp for each Delay_Req with its HW RX time and logMessageInterval = log_delay_req. Frequency correction kept (holdover). - ptp config applies live (role, priorities, intervals, domain, DSCP). - status.ptp: state MASTER, gm_id = own, TX Sync/Announce intervals, Delay_Req/Resp counters; locked is true as master so AES67 TX keeps running; SDP ts-refclk and SAP follow. - Verified: with ptp4l GM p1 128 the board (auto, p1 250) stays SLAVE; ptp4l stopped -> board MASTER; ptp4l -s --priority1 255 locks to it (s2) in ~4 s, offset within +-320 ns, path delay 10.3 us. Known: Sync send times jitter ~10 ms (FreeRTOS tick); accuracy is not affected (two-step Follow_Up carries the exact HW time). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
aes67-ESP32-P4
AES67 sender for the Waveshare ESP32-P4-ETH (PoE): Spotify Connect and HLS/m3u8 streams out as an AES67 multicast stream, PTP-locked, with a simple web UI for settings and SDP export.
docs/aes67-core-base.md— reusable AES67 core design (PTP, RTP, SDP/SAP, VLAN, syslog, web UI contract)docs/hardware-and-design-notes.md— board details and project-specific designweb/index.html— web UI (served by the device)CLAUDE.md— working rules and build order
Status: design complete, firmware not started. See the build order in CLAUDE.md.
Languages
C
74.9%
HTML
11.9%
C++
7.7%
Python
3.3%
CMake
2.2%