doc: add packet structure to README

This commit is contained in:
Xiretza 2022-06-20 13:59:01 +02:00
parent 7bc99720ba
commit cbd72445c0

View file

@ -13,3 +13,91 @@ Because blinkenwall v3 has `64 * 96 = 6144` pixels, driving it at 100 FPS requir
(typically SPI), so this would require coordinating several microcontrollers in parallel. A (typically SPI), so this would require coordinating several microcontrollers in parallel. A
much more integrated solution is to instantiate as many WS2812 drivers as desired in an FPGA, much more integrated solution is to instantiate as many WS2812 drivers as desired in an FPGA,
then point the entire video firehose at the FPGA. then point the entire video firehose at the FPGA.
## Ethernet communication
The controller accepts UDP packets containing image data on port 61437 ("PIXEL"). Each packet
contains color data for one strand of LEDs.
The packet structure is as follows:
<table>
<tr>
<th></th>
<th>00</th>
<th>01</th>
<th>02</th>
<th>03</th>
<th>04</th>
<th>05</th>
<th>06</th>
<th>07</th>
<th>08</th>
<th>09</th>
<th>0a</th>
<th>0b</th>
<th>0c</th>
<th>0d</th>
<th>0e</th>
<th>0f</th>
</tr>
<tr>
<th>00</th>
<td colspan="4">magic (<code>0x5049_584c</code>)</td>
<td colspan="4">strand number</td>
<td colspan="4">frame number</td>
<td>0</td>
<td>px1 R</td>
<td>px1 G</td>
<td>px1 B</td>
</tr>
<tr>
<th>10</th>
<td>0</td>
<td>px2 R</td>
<td>px2 G</td>
<td>px2 B</td>
<td>0</td>
<td>px3 R</td>
<td>px3 G</td>
<td>px3 B</td>
<td>0</td>
<td>px4 R</td>
<td>px4 G</td>
<td>px4 B</td>
<td colspan="4">...</td>
</tr>
</table>
Every packet begins with a magic number `0x5049584c` (ASCII for "PIXL"), followed by the strand
number and the frame number. All numbers are big endian. After the header follows the pixel data,
separated into one 4-byte word per LED.
Once all strands for a given frame number have been received and the video page has been flipped,
the controller answers with a confirmation packet:
<table>
<tr>
<th></th>
<th>00</th>
<th>01</th>
<th>02</th>
<th>03</th>
<th>04</th>
<th>05</th>
<th>06</th>
<th>07</th>
<th>08</th>
<th>09</th>
<th>0a</th>
<th>0b</th>
<th>0c</th>
<th>0d</th>
<th>0e</th>
<th>0f</th>
</tr>
<tr>
<th>00</th>
<td colspan="4">frame number</td>
</tr>
</table>