Repository navigation
feat(M4-P0C2B): opt-in triple canonical SV Ethernet TX on one PTP sample grid - #339
Conversation
…compiled SV profile
…shared GPTimer tick
…ng final capability
…point isolation and capture gates
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 3194a18c7f
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| if (consecutive_canonical_tx_failures != 0U) | ||
| g_sv_tx_faults.recovered(); | ||
| consecutive_canonical_tx_failures = 0U; | ||
| last_canonical_tx_error = ESP_OK; |
There was a problem hiding this comment.
Track persistent TX failures per stream or per complete batch
When one MU repeatedly fails transmission while another succeeds, each successful frame resets the shared failure streak and marks the fault recovered. For example, if MU1/MU2 succeed and MU3 fails on every tick, the streak never exceeds one, so the 400-failure group-stop check never fires despite MU3 remaining unavailable indefinitely. This can occur under sustained TX descriptor pressure and defeats the advertised bounded, fail-closed three-stream behavior. Maintain per-stream failure streaks, or reset a batch-level streak only when all three canonical transmissions succeed.
AGENTS.md reference: AGENTS.md:L80-L84
Useful? React with 👍 / 👎.
… deadline overruns
… flash quarter LUT
…ter-sine ROM table
M4-P0C2B — Opt-in three canonical SV frames per existing GPTimer sample tick
Continues #333 and merged P0C1 + P0C2A. Implements a firmware TX preview behind an explicit stopped-only
MULTISV SELECT; legacy single-SV mode remains the default and can be restored viaDESELECT.Code
compiled_profile_adaptercapability gate as legacy V1.smpCntand single existingsmpSynchdecision.M4ThreeSvGridPlannerin the real publisher path to fail closed on common epoch/sample-count mismatch; skip and account for late slots rather than replay old frames.SV-MULTI3-V1capability yet.Not yet complete
No per-MU live SETPOINTS or independent MU START/STOP, no Studio pagination or SCL deploy UX, and no physical board trace to confirm nominal 12k SV fps / phase error / DMA headroom. Scope stays preview. M3.H.3 official stable assets unaffected.
CI: ESP32-P4 firmware compilation, C++ CI, and relevant PTP/Studio checks. Merge only if green.
Optimizations added during review
std::sintable perSvFixedPointSineEnginewith a single ~4KiB static read-only quarter-wave Q30 table shared across three engines. A per-engine instance now holds only the phase accumulator, saving ~48KiB instance RAM in triple-stream firmware (plus avoiding repeated boot-time trig).SV-MULTI3-V1and is opt-in until per-MU live state+GUI and physical packet capture have been completed.