Replace serial/Wi-Fi driver transport paths with WebSocket bridge client, binary espnow_wire delivery, device announce registry, and restructured espnow-sender (AP + broadcast passthrough). Includes docs and tests. Co-authored-by: Cursor <cursoragent@cursor.com>
63 lines
3.6 KiB
XML
63 lines
3.6 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 720 480" font-family="ui-monospace, monospace">
|
||
<defs>
|
||
<style>
|
||
.layer { stroke: #2c3e50; stroke-width: 2; }
|
||
.ws { fill: #e8f4fc; }
|
||
.esp { fill: #fef9e7; }
|
||
.env { fill: #eafaf1; }
|
||
.lbl { font-family: system-ui, sans-serif; font-size: 14px; font-weight: 700; fill: #111; }
|
||
.byte { font-size: 12px; fill: #333; }
|
||
.title { font-family: system-ui, sans-serif; font-size: 17px; font-weight: 700; }
|
||
</style>
|
||
</defs>
|
||
<text x="360" y="28" text-anchor="middle" class="title">Packet layers (outside ’ inside)</text>
|
||
|
||
<!-- WS layer -->
|
||
<rect class="layer ws" x="60" y="50" width="600" height="70" rx="6"/>
|
||
<text x="80" y="78" class="lbl">WebSocket frame (Pi ” bridge)</text>
|
||
<rect x="80" y="88" width="50" height="24" fill="#fff" stroke="#666"/>
|
||
<text x="105" y="104" text-anchor="middle" class="byte">flags</text>
|
||
<rect x="138" y="88" width="120" height="24" fill="#fff" stroke="#666"/>
|
||
<text x="198" y="104" text-anchor="middle" class="byte">peer MAC ×6</text>
|
||
<rect x="268" y="88" width="380" height="24" fill="#fff" stroke="#666"/>
|
||
<text x="458" y="104" text-anchor="middle" class="byte">ESP-NOW packet (below)</text>
|
||
|
||
<!-- ESP layer -->
|
||
<rect class="layer esp" x="100" y="140" width="520" height="70" rx="6"/>
|
||
<text x="120" y="168" class="lbl">ESP-NOW datagram (d250 bytes)</text>
|
||
<rect x="120" y="178" width="40" height="24" fill="#fff" stroke="#666"/>
|
||
<text x="140" y="194" text-anchor="middle" class="byte">4C</text>
|
||
<rect x="168" y="178" width="50" height="24" fill="#fff" stroke="#666"/>
|
||
<text x="193" y="194" text-anchor="middle" class="byte">type</text>
|
||
<rect x="230" y="178" width="370" height="24" fill="#fff" stroke="#666"/>
|
||
<text x="415" y="194" text-anchor="middle" class="byte">body (ANNOUNCE / GROUPS / CMD / &)</text>
|
||
|
||
<!-- CMD + envelope -->
|
||
<rect class="layer env" x="140" y="230" width="440" height="120" rx="6"/>
|
||
<text x="160" y="258" class="lbl">Inside CMD (0x03) v2 command envelope</text>
|
||
<rect x="160" y="268" width="28" height="22" fill="#fff" stroke="#666"/>
|
||
<text x="174" y="283" text-anchor="middle" class="byte">02</text>
|
||
<rect x="194" y="268" width="28" height="22" fill="#fff" stroke="#666"/>
|
||
<text x="208" y="283" text-anchor="middle" class="byte">br</text>
|
||
<rect x="228" y="268" width="28" height="22" fill="#fff" stroke="#666"/>
|
||
<text x="242" y="283" text-anchor="middle" class="byte">lp</text>
|
||
<rect x="262" y="268" width="28" height="22" fill="#fff" stroke="#666"/>
|
||
<text x="276" y="283" text-anchor="middle" class="byte">ls</text>
|
||
<rect x="296" y="268" width="28" height="22" fill="#fff" stroke="#666"/>
|
||
<text x="310" y="283" text-anchor="middle" class="byte">ld</text>
|
||
<rect x="334" y="268" width="110" height="22" fill="#fff" stroke="#666"/>
|
||
<text x="389" y="283" text-anchor="middle" class="byte">presets</text>
|
||
<rect x="450" y="268" width="60" height="22" fill="#fff" stroke="#666"/>
|
||
<text x="480" y="283" text-anchor="middle" class="byte">select</text>
|
||
<rect x="516" y="268" width="54" height="22" fill="#fff" stroke="#666"/>
|
||
<text x="543" y="283" text-anchor="middle" class="byte">def</text>
|
||
<rect x="160" y="300" width="60" height="22" fill="#ffeaa7" stroke="#666"/>
|
||
<text x="190" y="315" text-anchor="middle" class="byte">save?</text>
|
||
<text x="360" y="335" text-anchor="middle" class="byte" font-family="system-ui">optional 0x01 after envelope</text>
|
||
|
||
<text x="360" y="400" text-anchor="middle" font-family="system-ui" font-size="12" fill="#555">
|
||
Pi REST/UI uses JSON · conversion to binary happens at bridge boundary
|
||
</text>
|
||
</svg>
|