diff --git a/README.md b/README.md index 262d019734a3447533af0d99d3359aa85eb04a19..82f8280dbf8b5e8662bb382c71c39b804b818c89 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,7 @@ CyanLight Simple `PT4115`-BreakoutBoard, initially designed for my special 490 nm LED but may also be used for generic projects +If you want to know more about `CyanBus`, `CyanLight`'s new animation protocol suite on top of `RS485` just goto [the documentation of SiliconTorch](SiliconTorch/README.md) ! Pinout ------ @@ -106,6 +107,11 @@ Both protocols share the same basic concept: Time critical animation data is sen **[TODO!]** -### The `IrDA` protocol +### ~~The `IrDA` protocol~~ -**[TODO!]** +There won't be any `IrDA` as R&D discovered the following problems: + +- The "classical" low-bandwidth chips for e.g. TV remotes aren't usable for UART communication. At `9600 Baud` there is half text half garbage, at `4800 Baud` we got 2-3 wrong chars per line (~40 chars). +- **ANY** higher-bandwidth `IrDA` chips are either very expensive (8$ for `LT1328` IF you even get one) and the `16 MBaud` ones are completely ungettable and 2-3x more expensive! + +**⇨ `IrDA` is unfeasible!** diff --git a/SiliconTorch/README.md b/SiliconTorch/README.md index fe263b9b0c0772cdaa860e328c771e424ba45026..06f112e4c045e480d04178d7d9a3e927780b6221 100644 --- a/SiliconTorch/README.md +++ b/SiliconTorch/README.md @@ -1,6 +1,27 @@ SiliconTorch ============ -`SiliconTorch` is the `python` reference implementation for the `fxCyanF`-protocol +`SiliconTorch` is: + +- `CyanBus` library for `ESP32` (client) and `Python` (server) +- `fxCyan` animation protocol library for `ESP32` (client) and `Python` (client/server) +- its own adapter to the [Weaponsmith](https://git.c3pb.de/jonsen/weaponsmith) eco system It will be moved to a separate repo when it matures + + +Protocol documentation +---------------------- + +Documentation of the used (network-)protocols inside of `SiliconTorch` + + +### `CyanBus` + +`CyanBus` will be the main working horse of `SiliconTorch`. + +It consists of a `RS485` and a `MQTT` layer, the first for real-time animation data and the second one for signalling. + +`RS485` packets look like below, `CRC` is calculated over payload only. + + diff --git a/SiliconTorch/doc/fxCyan.edn b/SiliconTorch/doc/fxCyan.edn new file mode 100644 index 0000000000000000000000000000000000000000..e63e4e7481e982f2a0cdcbdf0471b4e2bca3288f --- /dev/null +++ b/SiliconTorch/doc/fxCyan.edn @@ -0,0 +1,9 @@ + +;; This is bytefield-svg code to describe the fxCyan packet envelope + +(draw-column-headers) +(draw-box "b'fxCyan'" {:span 6}) +(draw-box "Size" {:span 2}) +(draw-gap "Payload") +(draw-box "CRC-XY" {:span 4}) ;; TODO: Which CRC algorithm exactly??? +(draw-bottom) diff --git a/SiliconTorch/doc/fxCyan.svg b/SiliconTorch/doc/fxCyan.svg new file mode 100644 index 0000000000000000000000000000000000000000..5e4b52a75ab89bdce5ba3942eb01f591ef666178 --- /dev/null +++ b/SiliconTorch/doc/fxCyan.svg @@ -0,0 +1 @@ +<?xml version="1.0" encoding="UTF-8"?><svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.0" width="681" height="146" viewBox="0 0 681 146" ><text x="60" y="8" font-family="Courier New, monospace" font-size="11" dominant-baseline="middle" text-anchor="middle" >0</text><text x="100" y="8" font-family="Courier New, monospace" font-size="11" dominant-baseline="middle" text-anchor="middle" >1</text><text x="140" y="8" font-family="Courier New, monospace" font-size="11" dominant-baseline="middle" text-anchor="middle" >2</text><text x="180" y="8" font-family="Courier New, monospace" font-size="11" dominant-baseline="middle" text-anchor="middle" >3</text><text x="220" y="8" font-family="Courier New, monospace" font-size="11" dominant-baseline="middle" text-anchor="middle" >4</text><text x="260" y="8" font-family="Courier New, monospace" font-size="11" dominant-baseline="middle" text-anchor="middle" >5</text><text x="300" y="8" font-family="Courier New, monospace" font-size="11" dominant-baseline="middle" text-anchor="middle" >6</text><text x="340" y="8" font-family="Courier New, monospace" font-size="11" dominant-baseline="middle" text-anchor="middle" >7</text><text x="380" y="8" font-family="Courier New, monospace" font-size="11" dominant-baseline="middle" text-anchor="middle" >8</text><text x="420" y="8" font-family="Courier New, monospace" font-size="11" dominant-baseline="middle" text-anchor="middle" >9</text><text x="460" y="8" font-family="Courier New, monospace" font-size="11" dominant-baseline="middle" text-anchor="middle" >a</text><text x="500" y="8" font-family="Courier New, monospace" font-size="11" dominant-baseline="middle" text-anchor="middle" >b</text><text x="540" y="8" font-family="Courier New, monospace" font-size="11" dominant-baseline="middle" text-anchor="middle" >c</text><text x="580" y="8" font-family="Courier New, monospace" font-size="11" dominant-baseline="middle" text-anchor="middle" >d</text><text x="620" y="8" font-family="Courier New, monospace" font-size="11" dominant-baseline="middle" text-anchor="middle" >e</text><text x="660" y="8" font-family="Courier New, monospace" font-size="11" dominant-baseline="middle" text-anchor="middle" >f</text><line x1="40" y1="15" x2="280" y2="15" stroke="#000000" stroke-width="1" /><line x1="40" y1="45" x2="280" y2="45" stroke="#000000" stroke-width="1" /><line x1="280" y1="15" x2="280" y2="45" stroke="#000000" stroke-width="1" /><line x1="40" y1="15" x2="40" y2="45" stroke="#000000" stroke-width="1" /><text font-size="18" font-family="Palatino, Georgia, Times New Roman, serif" x="160" y="31" text-anchor="middle" dominant-baseline="middle" >b'fxCyan'</text><line x1="280" y1="15" x2="360" y2="15" stroke="#000000" stroke-width="1" /><line x1="280" y1="45" x2="360" y2="45" stroke="#000000" stroke-width="1" /><line x1="360" y1="15" x2="360" y2="45" stroke="#000000" stroke-width="1" /><line x1="280" y1="15" x2="280" y2="45" stroke="#000000" stroke-width="1" /><text font-size="18" font-family="Palatino, Georgia, Times New Roman, serif" x="320" y="31" text-anchor="middle" dominant-baseline="middle" >Size</text><line x1="360" y1="15" x2="680" y2="15" stroke="#000000" stroke-width="1" /><line x1="680" y1="15" x2="680" y2="45" stroke="#000000" stroke-width="1" /><line x1="360" y1="15" x2="360" y2="45" stroke="#000000" stroke-width="1" /><text font-size="18" font-family="Palatino, Georgia, Times New Roman, serif" x="520" y="31" text-anchor="middle" dominant-baseline="middle" >Payload</text><text font-size="11" font-family="Courier New, monospace" font-style="normal" dominant-baseline="middle" x="35" y="30" text-anchor="end" >00</text><text font-size="11" font-family="Courier New, monospace" font-style="normal" dominant-baseline="middle" x="35" y="60" text-anchor="end" >10</text><line x1="40" y1="45" x2="40" y2="60" stroke="#000000" stroke-width="1" /><line x1="680" y1="45" x2="680" y2="60" stroke="#000000" stroke-width="1" /><line stroke-dasharray="1,1" x1="40" y1="60" x2="680" y2="90" stroke="#000000" stroke-width="1" /><line x1="680" y1="45" x2="680" y2="90" stroke="#000000" stroke-width="1" /><line stroke-dasharray="1,1" x1="40" y1="70" x2="680" y2="100" stroke="#000000" stroke-width="1" /><line x1="40" y1="70" x2="40" y2="100" stroke="#000000" stroke-width="1" /><line x1="40" y1="100" x2="40" y2="115" stroke="#000000" stroke-width="1" /><line x1="680" y1="100" x2="680" y2="115" stroke="#000000" stroke-width="1" /><text font-size="11" font-family="Palatino, Georgia, Times New Roman, serif" font-style="italic" dominant-baseline="middle" x="35" y="130" text-anchor="end" >i+<tspan font-size="11" font-family="Courier New, monospace" font-style="normal" dominant-baseline="middle" >00</tspan></text><line x1="40" y1="115" x2="200" y2="115" stroke="#000000" stroke-width="1" /><line x1="40" y1="145" x2="200" y2="145" stroke="#000000" stroke-width="1" /><line x1="200" y1="115" x2="200" y2="145" stroke="#000000" stroke-width="1" /><line x1="40" y1="115" x2="40" y2="145" stroke="#000000" stroke-width="1" /><text font-size="18" font-family="Palatino, Georgia, Times New Roman, serif" x="120" y="131" text-anchor="middle" dominant-baseline="middle" >CRC-XY</text><line x1="40" y1="115" x2="680" y2="115" stroke="#000000" stroke-width="1" /></svg> \ No newline at end of file