burst-link-protocol 1.0.0__tar.gz → 1.0.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. {burst_link_protocol-1.0.0 → burst_link_protocol-1.0.2}/PKG-INFO +29 -40
  2. burst_link_protocol-1.0.2/README.md +57 -0
  3. burst_link_protocol-1.0.2/ROADMAP.md +23 -0
  4. burst_link_protocol-1.0.2/docs/design.drawio +143 -0
  5. burst_link_protocol-1.0.2/docs/design.svg +1 -0
  6. {burst_link_protocol-1.0.0 → burst_link_protocol-1.0.2}/pyproject.toml +1 -1
  7. {burst_link_protocol-1.0.0 → burst_link_protocol-1.0.2}/src/decoder.c +1 -1
  8. burst_link_protocol-1.0.0/README.md +0 -69
  9. {burst_link_protocol-1.0.0 → burst_link_protocol-1.0.2}/.github/dependabot.yml +0 -0
  10. {burst_link_protocol-1.0.0 → burst_link_protocol-1.0.2}/.github/workflows/pip.yml +0 -0
  11. {burst_link_protocol-1.0.0 → burst_link_protocol-1.0.2}/.github/workflows/wheel.yml +0 -0
  12. {burst_link_protocol-1.0.0 → burst_link_protocol-1.0.2}/.gitignore +0 -0
  13. {burst_link_protocol-1.0.0 → burst_link_protocol-1.0.2}/.vscode/c_cpp_properties.json +0 -0
  14. {burst_link_protocol-1.0.0 → burst_link_protocol-1.0.2}/.vscode/launch.json +0 -0
  15. {burst_link_protocol-1.0.0 → burst_link_protocol-1.0.2}/.vscode/settings.json +0 -0
  16. {burst_link_protocol-1.0.0 → burst_link_protocol-1.0.2}/.vscode/tasks.json +0 -0
  17. {burst_link_protocol-1.0.0 → burst_link_protocol-1.0.2}/CMakeLists.txt +0 -0
  18. {burst_link_protocol-1.0.0 → burst_link_protocol-1.0.2}/LICENSE +0 -0
  19. {burst_link_protocol-1.0.0 → burst_link_protocol-1.0.2}/src/burst_interface.h +0 -0
  20. {burst_link_protocol-1.0.0 → burst_link_protocol-1.0.2}/src/burst_link_protocol/__init__.py +0 -0
  21. {burst_link_protocol-1.0.0 → burst_link_protocol-1.0.2}/src/burst_link_protocol/main.py +0 -0
  22. {burst_link_protocol-1.0.0 → burst_link_protocol-1.0.2}/src/crc.c +0 -0
  23. {burst_link_protocol-1.0.0 → burst_link_protocol-1.0.2}/src/crc.h +0 -0
  24. {burst_link_protocol-1.0.0 → burst_link_protocol-1.0.2}/src/encoder.c +0 -0
  25. {burst_link_protocol-1.0.0 → burst_link_protocol-1.0.2}/src/python_bindings.cpp +0 -0
  26. {burst_link_protocol-1.0.0 → burst_link_protocol-1.0.2}/test/test_c_validation.py +0 -0
  27. {burst_link_protocol-1.0.0 → burst_link_protocol-1.0.2}/test/test_python_validation.py +0 -0
  28. {burst_link_protocol-1.0.0 → burst_link_protocol-1.0.2}/test/test_speed.py +0 -0
@@ -1,8 +1,9 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: burst-link-protocol
3
- Version: 1.0.0
3
+ Version: 1.0.2
4
4
  Summary: Binary Utility for Reliable Stream Transfer (BURST) is a library for encoding and decoding binary data streams into and from a byte stream.
5
5
  Author-Email: Floris vernieuwe <floris@vernieuwe.eu>
6
+ License-File: LICENSE
6
7
  Project-URL: Repository, https://github.com/Florioo/burst-link-protocol
7
8
  Requires-Python: <4.0,>=3.10
8
9
  Requires-Dist: cobs<2.0.0,>=1.2.1
@@ -11,30 +12,44 @@ Requires-Dist: crc<8.0.0,>=7.1.0
11
12
  Requires-Dist: pytest<9.0.0,>=8.3.4
12
13
  Requires-Dist: pytest-cov<7.0.0,>=6.0.0
13
14
  Requires-Dist: pytest-benchmark<6.0.0,>=5.1.0
15
+ Provides-Extra: dev
14
16
  Requires-Dist: scikit-build-core[pyproject]<0.11.0,>=0.10.7; extra == "dev"
15
17
  Requires-Dist: nanobind<3.0.0,>=2.5.0; extra == "dev"
16
18
  Requires-Dist: pytest<9.0.0,>=8.3.4; extra == "dev"
17
19
  Requires-Dist: pytest-cov<7.0.0,>=6.0.0; extra == "dev"
18
20
  Requires-Dist: pytest-benchmark<6.0.0,>=5.1.0; extra == "dev"
19
- Provides-Extra: dev
20
21
  Description-Content-Type: text/markdown
21
22
 
22
- # BURST interface
23
- Binary Utility for Reliable Stream Transfer (BURST) is a library for encoding and decoding binary data streams, a packet format.
24
- It combines a 16 bit checksum and cobs encoding to convert packets into a format that can be sent over a stream.
23
+ # BURST link protocol
24
+ Binary Utility for Reliable Stream Transfer (BURST) is a cross-platform library that provides a robust link layer protocol for transmitting binary data over streams (e.g. UART). It ensures data integrity by applying a 16-bit checksum and utilizes COBS (Consistent Overhead Byte Stuffing) encoding to format packets efficiently.
25
+
26
+
27
+ ## Features
28
+ * Multi-language Support: Seamless integration with Python, C, and C++ projects.
29
+ * Reliable Transmission: 16-bit checksum ensures error detection.
30
+ * Efficient Encoding: Uses COBS encoding to convert data into a stream-friendly format.
31
+
32
+ ## Design
33
+ The following diagram illustrates the data flow within the BURST protocol:
25
34
 
26
- This projects is written so it can be used both in python, c and c++ based project
35
+ ![design](docs/design.svg "design")
27
36
 
28
- # Installation instuctions
37
+ # Installation
29
38
 
30
- ## As an user
39
+ ## Prebuilt Wheels
31
40
 
32
- Simple installation
41
+ Prebuilt wheels are available for Windows, Linux and MacOS, they can be installed using pip:
33
42
  ```sh
34
- pip install -e .
43
+ pip install burst-link-protocol
35
44
  ```
36
45
 
37
- ## As a developer
46
+ ## From Source
47
+ Note: You need a valid C++ compiler and Python 3.7+ installed on your system.
48
+
49
+ Basic installation
50
+ ```sh
51
+ pip install -e .
52
+ ```
38
53
 
39
54
  Fast build
40
55
  ```sh
@@ -55,36 +70,10 @@ They are generated automatically buy can also be generated
55
70
  python -m nanobind.stubgen -m nanobind_example_ext
56
71
  ```
57
72
 
58
- # Publishing instructions
59
-
60
- ```
61
-
62
- ```
63
-
64
- # Test
73
+ ### Test
65
74
 
66
75
  ```sh
67
- pytest
76
+ pytest test
68
77
  ```
69
78
 
70
- # BURST protocol
71
- TODO
72
- * STAGE 1
73
- * Convert cpp to c files [OK]
74
- * Formalise naming [OK]
75
- * Add c encode functions [OK]
76
- * Test c encode functions [OK]
77
- * Update README
78
- * Improve poetry.toml [OK]
79
-
80
-
81
- * STAGE 2
82
- * Add CI/CD on github to compile x86
83
- * Fix dependencies once compilation succeeds
84
- * Publish on pypi
85
- * STAGE 3
86
- * Add a way to get C test coverage
87
-
88
-
89
-
90
79
 
@@ -0,0 +1,57 @@
1
+ # BURST link protocol
2
+ Binary Utility for Reliable Stream Transfer (BURST) is a cross-platform library that provides a robust link layer protocol for transmitting binary data over streams (e.g. UART). It ensures data integrity by applying a 16-bit checksum and utilizes COBS (Consistent Overhead Byte Stuffing) encoding to format packets efficiently.
3
+
4
+
5
+ ## Features
6
+ * Multi-language Support: Seamless integration with Python, C, and C++ projects.
7
+ * Reliable Transmission: 16-bit checksum ensures error detection.
8
+ * Efficient Encoding: Uses COBS encoding to convert data into a stream-friendly format.
9
+
10
+ ## Design
11
+ The following diagram illustrates the data flow within the BURST protocol:
12
+
13
+ ![design](docs/design.svg "design")
14
+
15
+ # Installation
16
+
17
+ ## Prebuilt Wheels
18
+
19
+ Prebuilt wheels are available for Windows, Linux and MacOS, they can be installed using pip:
20
+ ```sh
21
+ pip install burst-link-protocol
22
+ ```
23
+
24
+ ## From Source
25
+ Note: You need a valid C++ compiler and Python 3.7+ installed on your system.
26
+
27
+ Basic installation
28
+ ```sh
29
+ pip install -e .
30
+ ```
31
+
32
+ Fast build
33
+ ```sh
34
+ pip install --no-build-isolation -ve .
35
+ ```
36
+
37
+ Auto rebuild on run
38
+ ```sh
39
+ pip install --no-build-isolation -Ceditable.rebuild=true -ve .
40
+ ```
41
+
42
+
43
+ ### Python Stub files generation
44
+
45
+ They are generated automatically buy can also be generated
46
+
47
+ ```
48
+ python -m nanobind.stubgen -m nanobind_example_ext
49
+ ```
50
+
51
+ ### Test
52
+
53
+ ```sh
54
+ pytest test
55
+ ```
56
+
57
+
@@ -0,0 +1,23 @@
1
+
2
+ # Roadmap
3
+
4
+ ## STAGE 0 ✅
5
+ - Initial POC
6
+
7
+ ## STAGE 1 ✅
8
+ - ✅ Convert cpp to c files
9
+ - ✅ Formalise naming
10
+ - ✅ Add c encode functions
11
+ - ✅ Test c encode functions
12
+ - ✅ Update README
13
+ - ✅ Improve poetry.toml
14
+
15
+ ## STAGE 2 ✅
16
+ - ✅ Add CI/CD on github to compile x86
17
+ - ✅ Publish on pypi
18
+
19
+ ## STAGE 3
20
+ - ⬜️ Add a way to get C test coverage
21
+ - ⬜️ Add test report as a badge
22
+ - ⬜️ Fix dependencies once compilation succeeds
23
+
@@ -0,0 +1,143 @@
1
+ <mxfile host="65bd71144e" scale="2" border="0">
2
+ <diagram id="Die8snK1uMh-dL0AAzdI" name="Page-1">
3
+ <mxGraphModel dx="635" dy="1936" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
4
+ <root>
5
+ <mxCell id="0"/>
6
+ <mxCell id="1" parent="0"/>
7
+ <mxCell id="39" style="edgeStyle=none;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="2" target="38">
8
+ <mxGeometry relative="1" as="geometry"/>
9
+ </mxCell>
10
+ <mxCell id="2" value="&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;Payload&lt;/span&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;" parent="1" vertex="1">
11
+ <mxGeometry x="280" y="40" width="280" height="40" as="geometry"/>
12
+ </mxCell>
13
+ <mxCell id="3" value="CRC16" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
14
+ <mxGeometry x="560" y="40" width="80" height="40" as="geometry"/>
15
+ </mxCell>
16
+ <mxCell id="4" value="COBS encoded data" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;" parent="1" vertex="1">
17
+ <mxGeometry x="280" y="160" width="360" height="40" as="geometry"/>
18
+ </mxCell>
19
+ <mxCell id="6" value="NULL" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#bac8d3;strokeColor=#23445d;" parent="1" vertex="1">
20
+ <mxGeometry x="640" y="160" width="40" height="40" as="geometry"/>
21
+ </mxCell>
22
+ <mxCell id="35" style="edgeStyle=none;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="33" target="34">
23
+ <mxGeometry relative="1" as="geometry"/>
24
+ </mxCell>
25
+ <mxCell id="33" value="&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;Payload&lt;/span&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;" vertex="1" parent="1">
26
+ <mxGeometry x="280" y="-80" width="280" height="40" as="geometry"/>
27
+ </mxCell>
28
+ <mxCell id="36" style="edgeStyle=none;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="34" target="2">
29
+ <mxGeometry relative="1" as="geometry"/>
30
+ </mxCell>
31
+ <mxCell id="34" value="Calculate CRC" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" vertex="1" parent="1">
32
+ <mxGeometry x="377.5" y="-20" width="85" height="40" as="geometry"/>
33
+ </mxCell>
34
+ <mxCell id="38" value="Encode with COBS" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" vertex="1" parent="1">
35
+ <mxGeometry x="377.5" y="100" width="85" height="40" as="geometry"/>
36
+ </mxCell>
37
+ <mxCell id="40" style="edgeStyle=none;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.391;entryY=0.029;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="38" target="4">
38
+ <mxGeometry relative="1" as="geometry"/>
39
+ </mxCell>
40
+ <mxCell id="RL1159NRFCOyJORJclhe-43" value="" style="endArrow=none;dashed=1;html=1;dashPattern=1 3;strokeWidth=2;" edge="1" parent="1">
41
+ <mxGeometry width="50" height="50" relative="1" as="geometry">
42
+ <mxPoint x="210" y="240" as="sourcePoint"/>
43
+ <mxPoint x="760" y="240" as="targetPoint"/>
44
+ </mxGeometry>
45
+ </mxCell>
46
+ <mxCell id="RL1159NRFCOyJORJclhe-44" value="COBS encoded&amp;nbsp;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;data&lt;/span&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;" vertex="1" parent="1">
47
+ <mxGeometry x="280" y="280" width="360" height="40" as="geometry"/>
48
+ </mxCell>
49
+ <mxCell id="RL1159NRFCOyJORJclhe-45" value="NULL" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#bac8d3;strokeColor=#23445d;" vertex="1" parent="1">
50
+ <mxGeometry x="640" y="280" width="40" height="40" as="geometry"/>
51
+ </mxCell>
52
+ <mxCell id="RL1159NRFCOyJORJclhe-54" style="edgeStyle=none;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="RL1159NRFCOyJORJclhe-46" target="RL1159NRFCOyJORJclhe-52">
53
+ <mxGeometry relative="1" as="geometry"/>
54
+ </mxCell>
55
+ <mxCell id="RL1159NRFCOyJORJclhe-46" value="&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;Payload&lt;/span&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;" vertex="1" parent="1">
56
+ <mxGeometry x="280" y="400" width="280" height="40" as="geometry"/>
57
+ </mxCell>
58
+ <mxCell id="RL1159NRFCOyJORJclhe-47" value="CRC16" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
59
+ <mxGeometry x="560" y="400" width="80" height="40" as="geometry"/>
60
+ </mxCell>
61
+ <mxCell id="RL1159NRFCOyJORJclhe-48" value="&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;Payload&lt;/span&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;" vertex="1" parent="1">
62
+ <mxGeometry x="280" y="520" width="280" height="40" as="geometry"/>
63
+ </mxCell>
64
+ <mxCell id="RL1159NRFCOyJORJclhe-50" style="edgeStyle=none;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="RL1159NRFCOyJORJclhe-49" target="RL1159NRFCOyJORJclhe-46">
65
+ <mxGeometry relative="1" as="geometry"/>
66
+ </mxCell>
67
+ <mxCell id="RL1159NRFCOyJORJclhe-49" value="Decode&amp;nbsp;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;with&lt;/span&gt;&lt;div&gt;COBS&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" vertex="1" parent="1">
68
+ <mxGeometry x="377.5" y="340" width="85" height="40" as="geometry"/>
69
+ </mxCell>
70
+ <mxCell id="RL1159NRFCOyJORJclhe-51" style="edgeStyle=none;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;startArrow=classic;startFill=1;endArrow=none;endFill=0;entryX=0.387;entryY=0.968;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="RL1159NRFCOyJORJclhe-49" target="RL1159NRFCOyJORJclhe-44">
71
+ <mxGeometry relative="1" as="geometry">
72
+ <mxPoint x="419" y="320" as="targetPoint"/>
73
+ </mxGeometry>
74
+ </mxCell>
75
+ <mxCell id="RL1159NRFCOyJORJclhe-53" style="edgeStyle=none;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="RL1159NRFCOyJORJclhe-52" target="RL1159NRFCOyJORJclhe-48">
76
+ <mxGeometry relative="1" as="geometry"/>
77
+ </mxCell>
78
+ <mxCell id="RL1159NRFCOyJORJclhe-52" value="Calculate CRC" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" vertex="1" parent="1">
79
+ <mxGeometry x="377.5" y="460" width="85" height="40" as="geometry"/>
80
+ </mxCell>
81
+ <mxCell id="RL1159NRFCOyJORJclhe-58" value="" style="endArrow=classic;html=1;" edge="1" parent="1">
82
+ <mxGeometry width="50" height="50" relative="1" as="geometry">
83
+ <mxPoint x="419.58" y="210" as="sourcePoint"/>
84
+ <mxPoint x="419.58" y="270" as="targetPoint"/>
85
+ </mxGeometry>
86
+ </mxCell>
87
+ </root>
88
+ </mxGraphModel>
89
+ </diagram>
90
+ <diagram id="spgo_ZM53PilI1epJ_PP" name="Page-2">
91
+ <mxGraphModel dx="835" dy="711" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
92
+ <root>
93
+ <mxCell id="0"/>
94
+ <mxCell id="1" parent="0"/>
95
+ <mxCell id="H-Vw1sji3MmnnZHTfAvp-1" style="edgeStyle=none;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="H-Vw1sji3MmnnZHTfAvp-2" target="H-Vw1sji3MmnnZHTfAvp-8">
96
+ <mxGeometry relative="1" as="geometry"/>
97
+ </mxCell>
98
+ <mxCell id="H-Vw1sji3MmnnZHTfAvp-2" value="" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
99
+ <mxGeometry x="170" y="630" width="100" height="140" as="geometry"/>
100
+ </mxCell>
101
+ <mxCell id="H-Vw1sji3MmnnZHTfAvp-3" value="Cobs&lt;br&gt;Encoding" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
102
+ <mxGeometry x="180" y="720" width="80" height="40" as="geometry"/>
103
+ </mxCell>
104
+ <mxCell id="H-Vw1sji3MmnnZHTfAvp-4" style="edgeStyle=none;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="H-Vw1sji3MmnnZHTfAvp-5" target="H-Vw1sji3MmnnZHTfAvp-7">
105
+ <mxGeometry relative="1" as="geometry"/>
106
+ </mxCell>
107
+ <mxCell id="H-Vw1sji3MmnnZHTfAvp-5" value="list[DATA]|data" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;" vertex="1" parent="1">
108
+ <mxGeometry x="150" y="550" width="140" height="40" as="geometry"/>
109
+ </mxCell>
110
+ <mxCell id="H-Vw1sji3MmnnZHTfAvp-6" style="edgeStyle=none;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="H-Vw1sji3MmnnZHTfAvp-7" target="H-Vw1sji3MmnnZHTfAvp-3">
111
+ <mxGeometry relative="1" as="geometry"/>
112
+ </mxCell>
113
+ <mxCell id="H-Vw1sji3MmnnZHTfAvp-7" value="&lt;div&gt;Add CRC&lt;/div&gt;" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
114
+ <mxGeometry x="180" y="640" width="80" height="40" as="geometry"/>
115
+ </mxCell>
116
+ <mxCell id="H-Vw1sji3MmnnZHTfAvp-8" value="stream" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;" vertex="1" parent="1">
117
+ <mxGeometry x="165" y="810" width="110" height="50" as="geometry"/>
118
+ </mxCell>
119
+ <mxCell id="H-Vw1sji3MmnnZHTfAvp-9" style="edgeStyle=none;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="H-Vw1sji3MmnnZHTfAvp-10" target="H-Vw1sji3MmnnZHTfAvp-12">
120
+ <mxGeometry relative="1" as="geometry"/>
121
+ </mxCell>
122
+ <mxCell id="H-Vw1sji3MmnnZHTfAvp-10" value="stream" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;" vertex="1" parent="1">
123
+ <mxGeometry x="370" y="550" width="110" height="40" as="geometry"/>
124
+ </mxCell>
125
+ <mxCell id="H-Vw1sji3MmnnZHTfAvp-11" style="edgeStyle=none;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="H-Vw1sji3MmnnZHTfAvp-12" target="H-Vw1sji3MmnnZHTfAvp-15">
126
+ <mxGeometry relative="1" as="geometry"/>
127
+ </mxCell>
128
+ <mxCell id="H-Vw1sji3MmnnZHTfAvp-12" value="" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
129
+ <mxGeometry x="372" y="631" width="105" height="130" as="geometry"/>
130
+ </mxCell>
131
+ <mxCell id="H-Vw1sji3MmnnZHTfAvp-13" value="Cobs&lt;br&gt;Encoding" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
132
+ <mxGeometry x="382" y="641" width="80" height="40" as="geometry"/>
133
+ </mxCell>
134
+ <mxCell id="H-Vw1sji3MmnnZHTfAvp-14" value="&lt;div&gt;Add CRC&lt;/div&gt;" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
135
+ <mxGeometry x="384.5" y="711" width="80" height="40" as="geometry"/>
136
+ </mxCell>
137
+ <mxCell id="H-Vw1sji3MmnnZHTfAvp-15" value="list[DATA]" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;" vertex="1" parent="1">
138
+ <mxGeometry x="354.5" y="821" width="140" height="40" as="geometry"/>
139
+ </mxCell>
140
+ </root>
141
+ </mxGraphModel>
142
+ </diagram>
143
+ </mxfile>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" style="background: transparent; background-color: transparent;" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="1106px" height="1282px" viewBox="-0.5 -0.5 1106 1282" content="&lt;mxfile scale=&quot;2&quot; border=&quot;0&quot;&gt;&lt;diagram id=&quot;Die8snK1uMh-dL0AAzdI&quot; name=&quot;Page-1&quot;&gt;7Vpbc9o4FP41zGwfmrEtS9iPDUna6aRNJpmd3T4qtsCeFRZriwD99ZUtyRekAC3YTNOQmdg6un/nfmAEJvP1xxwvki8sJnTkOfF6BK5GnocAFP9LwkYS3BAgSZnlaaxoDeEx/U4U0VHUZRqTojOQM0Z5uugSI5ZlJOIdGs5ztuoOmzLa3XWBZ8QgPEaYmtR/0pgnkhpAp6F/Iuks0Tu7juqZYz1YEYoEx2zVIoHrEZjkjHH5Nl9PCC3B07jIeTcv9NYHy0nGD5kAQnUOvtGXI7G4q2pmLBOPy4TPqWi54pWsU/6veHcuoGp9a/VclSx2dGOjGxnPN61JZfNbu6+ZVrX0PHm08jwv3k6RCrbMIzXKUwKB8xlRo0BQQytkkrA5EduIMTmhmKfP3eWxEo5ZPa7BT7woCO1wqr2fMV2qRUceouIUl8UCZx2c0f/LksmXEaMsH4EP5XFmT39BcQqxjdM831VI6OHibVY+7/GGMhzr5cXB5A6y12BqzpZZTGIF7CpJOXlc4AqyldDRLo+nKaUTeSwxF0xh+VfegefsP9LqQdWnnMEy3qLLT30OC8OeSc7JukUymaN6vUCpijIWvmquGsWrhyQtpdPjjmEnMNg5eZi46KToxpgE08iKbhSQp+lpUIRoL4p9geibIN5dPpaKnUWsRE04AszxKxZZF5loA9QT3MiA++vft7cnRfcJR0EMbOh6wPdhfBoUkb8fRb8vxYcDuMVfc28AWPybP5B/A6ZFfHNwFqG2cPFga/E+GNLDmc7sd4//gG8qiDeUflicHabRUmxDBFlEDzsE1/1pwSVuDMnYJrghGgOMTiOgYDy+gF0R9SzhA+xJQgMD0usqcKi2F7sLWKt44hXgWueJA+Cq1xhK80HodnT/wvHCPfpfte5JnorLkfw4oxCYRmEop/lw67ow/PpwM7nbfL57+BzRhLz3bZ50mx9Z/KGsVjTsiHGR1DLd4k1Jv8dcoJRVFM9pwjNdofB+AjwTlZZEQosv0rSDwVM73LNUbNz4QrfrCw1JlzxVs9p1ja2FxmjPQlIQjIUqXtbXPoK9+7MehOelFcqeioUMe3oJo2Rq9afFUJ4lhuot47ILADQE4Hx52FHYbudhNmz7ysOs0EJ/WM81QMxqFyFk+iw7IEOFtzuP+ZYT9mfPfEtg2FtOaOfy2HRo56uFHgWuWQsdrhhqx9ZMcd406MQaBC0p67BchgMnXGdzW+GBbks6jrO5rdBQuisi6wrHReaO1ED9sOuhrFy8oISSHKfPmiRTh3p0q2eHxv4+ZQ9g+zaqp7KHXTVdA8dfUU1np2oWQiG4zucjiosijTT5JqX10kbSLyiqf7ukEoy7JZUQBcOVVI5U/mOrL/a833fDrmh5w+b9EPwZRh56h/J5qJ9e7DzmK6/H+5avRoc1oLYI9uVqZmP9WlgeKp3nqk0K03Kh76lLIe4WoIeWJ21rjU9lqUSz+QGZHN78DA9c/wA=&lt;/diagram&gt;&lt;diagram id=&quot;spgo_ZM53PilI1epJ_PP&quot; name=&quot;Page-2&quot;&gt;5VhRd5owFP41PLaHECLs0aKbL32ZPdu6t9REyBaIJ0TR/foFSRQKte5MpbX2nJr73VyTfPnuDcGBUbr+IvEiuReEcsdzydqBI8fzQoj0/xLYVEAAQAXEkpEKqgFT9oca0DXokhGaNzoqIbhiiyY4E1lGZ6qBYSlF0ew2F7w56gLHtAVMZ5i30e+MqMQsC7l7fEJZnNiRgWs8KbadDZAnmIiiBsGxAyMphKpa6TqivOTO8lLFfX7Bu5uYpJk6JmBy860A+S8G79Ms+zl5mA9XixvzK7na2AVTotdvzExk+usuUSnXFtBNumbqh267t8hYjzXPqNx11xoba2RKbmpBpflY9+3DtpaNq6ZWzufFFdvpi6Wc0QPL9IxysIypOtAv3O2L1jMVKdXz0XGScqzYqjkPbJQV7/rtydcNw/8/7IWZ5ArzpRmptTlSLDNCiSGoSJii0wXeLr3Q6dfcK/NzVCq6Psxge8U2IDDiNdk7gMYu9rmwU3xSzwPfPRNLsMVSJJ5yxxtwPfTdk9StuGyNs5kgLIv75zBschh4bQ7DDgrPxqD/MXIeHZnzQZ85j1pq5ixXDrobDR+GDho5QUSwwv8n4jnjPBJcyG0snKPyT+O5kuI3rXkG208ZITJVw6vPidIBNdMBoY6S4l8yHwYXyIcT6jo4UtewT10HHWdZVaEJW9kSPSRE94m+Rtanh6q531zlHvg9V+6wxapOYYrTayoPA9TgPAQd5QF0kI7ORfqnj3FcWk5frSvA67Ow2Glecw7A4IgjsisHzlZ4wCXuiacU87EXPoB6FfMbvPLBwGseehC0xeeitvgAPJv63t2dD4bPSPTbJF70yQH4HUp7dw9kMPRvm48Hu9eJvRH76g3uis4l9Jz+0OsoDie6vGlz/3J066u9YYbjvw==&lt;/diagram&gt;&lt;/mxfile&gt;"><defs/><g><g><path d="M 422 320 L 422 347.26" fill="none" stroke="#000000" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 422 357.76 L 415 343.76 L 422 347.26 L 429 343.76 Z" fill="#000000" stroke="#000000" stroke-width="2" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g><rect x="142" y="240" width="560" height="80" fill="#f5f5f5" stroke="#666666" stroke-width="2" pointer-events="all" style="fill: light-dark(rgb(245, 245, 245), rgb(26, 26, 26)); stroke: light-dark(rgb(102, 102, 102), rgb(149, 149, 149));"/></g><g><g transform="translate(-0.5 -0.5)scale(2)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 278px; height: 1px; padding-top: 140px; margin-left: 72px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #333333; "><div style="display: inline-block; font-size: 12px; font-family: &quot;Helvetica&quot;; color: light-dark(#333333, #c1c1c1); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><span style="color: light-dark(rgb(51, 51, 51), rgb(193, 193, 193));">Payload</span></div></div></div></foreignObject><text x="211" y="144" fill="#333333" font-family="&quot;Helvetica&quot;" font-size="12px" text-anchor="middle">Payload</text></switch></g></g><g><rect x="702" y="240" width="160" height="80" fill="#dae8fc" stroke="#6c8ebf" stroke-width="2" pointer-events="all" style="fill: light-dark(rgb(218, 232, 252), rgb(29, 41, 59)); stroke: light-dark(rgb(108, 142, 191), rgb(92, 121, 163));"/></g><g><g transform="translate(-0.5 -0.5)scale(2)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 140px; margin-left: 352px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: &quot;Helvetica&quot;; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">CRC16</div></div></div></foreignObject><text x="391" y="144" fill="light-dark(#000000, #ffffff)" font-family="&quot;Helvetica&quot;" font-size="12px" text-anchor="middle">CRC16</text></switch></g></g><g><rect x="142" y="480" width="720" height="80" fill="#f5f5f5" stroke="#666666" stroke-width="2" pointer-events="all" style="fill: light-dark(rgb(245, 245, 245), rgb(26, 26, 26)); stroke: light-dark(rgb(102, 102, 102), rgb(149, 149, 149));"/></g><g><g transform="translate(-0.5 -0.5)scale(2)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 358px; height: 1px; padding-top: 260px; margin-left: 72px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #333333; "><div style="display: inline-block; font-size: 12px; font-family: &quot;Helvetica&quot;; color: light-dark(#333333, #c1c1c1); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">COBS encoded data</div></div></div></foreignObject><text x="251" y="264" fill="#333333" font-family="&quot;Helvetica&quot;" font-size="12px" text-anchor="middle">COBS encoded data</text></switch></g></g><g><rect x="862" y="480" width="80" height="80" fill="#bac8d3" stroke="#23445d" stroke-width="2" pointer-events="all" style="fill: light-dark(rgb(186, 200, 211), rgb(57, 69, 78)); stroke: light-dark(rgb(35, 68, 93), rgb(160, 188, 210));"/></g><g><g transform="translate(-0.5 -0.5)scale(2)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 260px; margin-left: 432px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: &quot;Helvetica&quot;; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">NULL</div></div></div></foreignObject><text x="451" y="264" fill="light-dark(#000000, #ffffff)" font-family="&quot;Helvetica&quot;" font-size="12px" text-anchor="middle">NULL</text></switch></g></g><g><path d="M 422 80 L 422 107.26" fill="none" stroke="#000000" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 422 117.76 L 415 103.76 L 422 107.26 L 429 103.76 Z" fill="#000000" stroke="#000000" stroke-width="2" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g><rect x="142" y="0" width="560" height="80" fill="#f5f5f5" stroke="#666666" stroke-width="2" pointer-events="all" style="fill: light-dark(rgb(245, 245, 245), rgb(26, 26, 26)); stroke: light-dark(rgb(102, 102, 102), rgb(149, 149, 149));"/></g><g><g transform="translate(-0.5 -0.5)scale(2)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 278px; height: 1px; padding-top: 20px; margin-left: 72px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #333333; "><div style="display: inline-block; font-size: 12px; font-family: &quot;Helvetica&quot;; color: light-dark(#333333, #c1c1c1); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><span style="color: light-dark(rgb(51, 51, 51), rgb(193, 193, 193));">Payload</span></div></div></div></foreignObject><text x="211" y="24" fill="#333333" font-family="&quot;Helvetica&quot;" font-size="12px" text-anchor="middle">Payload</text></switch></g></g><g><path d="M 422 200 L 422 227.26" fill="none" stroke="#000000" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 422 237.76 L 415 223.76 L 422 227.26 L 429 223.76 Z" fill="#000000" stroke="#000000" stroke-width="2" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g><rect x="337" y="120" width="170" height="80" rx="12" ry="12" fill="#e1d5e7" stroke="#9673a6" stroke-width="2" pointer-events="all" style="fill: light-dark(rgb(225, 213, 231), rgb(57, 47, 63)); stroke: light-dark(rgb(150, 115, 166), rgb(149, 119, 163));"/></g><g><g transform="translate(-0.5 -0.5)scale(2)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 83px; height: 1px; padding-top: 80px; margin-left: 170px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: &quot;Helvetica&quot;; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Calculate CRC</div></div></div></foreignObject><text x="211" y="84" fill="light-dark(#000000, #ffffff)" font-family="&quot;Helvetica&quot;" font-size="12px" text-anchor="middle">Calculate CRC</text></switch></g></g><g><rect x="337" y="360" width="170" height="80" rx="12" ry="12" fill="#e1d5e7" stroke="#9673a6" stroke-width="2" pointer-events="all" style="fill: light-dark(rgb(225, 213, 231), rgb(57, 47, 63)); stroke: light-dark(rgb(150, 115, 166), rgb(149, 119, 163));"/></g><g><g transform="translate(-0.5 -0.5)scale(2)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 83px; height: 1px; padding-top: 200px; margin-left: 170px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: &quot;Helvetica&quot;; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Encode with COBS</div></div></div></foreignObject><text x="211" y="204" fill="light-dark(#000000, #ffffff)" font-family="&quot;Helvetica&quot;" font-size="12px" text-anchor="middle">Encode with CO...</text></switch></g></g><g><path d="M 422 440 L 423.06 469.59" fill="none" stroke="#000000" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 423.44 480.09 L 415.94 466.35 L 423.06 469.59 L 429.93 465.84 Z" fill="#000000" stroke="#000000" stroke-width="2" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g><path d="M 2 640 L 1102 640" fill="none" stroke="#000000" stroke-width="4" stroke-miterlimit="10" stroke-dasharray="4 12" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g><rect x="142" y="720" width="720" height="80" fill="#f5f5f5" stroke="#666666" stroke-width="2" pointer-events="all" style="fill: light-dark(rgb(245, 245, 245), rgb(26, 26, 26)); stroke: light-dark(rgb(102, 102, 102), rgb(149, 149, 149));"/></g><g><g transform="translate(-0.5 -0.5)scale(2)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 358px; height: 1px; padding-top: 380px; margin-left: 72px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #333333; "><div style="display: inline-block; font-size: 12px; font-family: &quot;Helvetica&quot;; color: light-dark(#333333, #c1c1c1); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">COBS encoded <span style="color: light-dark(rgb(51, 51, 51), rgb(193, 193, 193));">data</span></div></div></div></foreignObject><text x="251" y="384" fill="#333333" font-family="&quot;Helvetica&quot;" font-size="12px" text-anchor="middle">COBS encoded data</text></switch></g></g><g><rect x="862" y="720" width="80" height="80" fill="#bac8d3" stroke="#23445d" stroke-width="2" pointer-events="all" style="fill: light-dark(rgb(186, 200, 211), rgb(57, 69, 78)); stroke: light-dark(rgb(35, 68, 93), rgb(160, 188, 210));"/></g><g><g transform="translate(-0.5 -0.5)scale(2)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 380px; margin-left: 432px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: &quot;Helvetica&quot;; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">NULL</div></div></div></foreignObject><text x="451" y="384" fill="light-dark(#000000, #ffffff)" font-family="&quot;Helvetica&quot;" font-size="12px" text-anchor="middle">NULL</text></switch></g></g><g><path d="M 422 1040 L 422 1067.26" fill="none" stroke="#000000" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 422 1077.76 L 415 1063.76 L 422 1067.26 L 429 1063.76 Z" fill="#000000" stroke="#000000" stroke-width="2" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g><rect x="142" y="960" width="560" height="80" fill="#f5f5f5" stroke="#666666" stroke-width="2" pointer-events="all" style="fill: light-dark(rgb(245, 245, 245), rgb(26, 26, 26)); stroke: light-dark(rgb(102, 102, 102), rgb(149, 149, 149));"/></g><g><g transform="translate(-0.5 -0.5)scale(2)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 278px; height: 1px; padding-top: 500px; margin-left: 72px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #333333; "><div style="display: inline-block; font-size: 12px; font-family: &quot;Helvetica&quot;; color: light-dark(#333333, #c1c1c1); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><span style="color: light-dark(rgb(51, 51, 51), rgb(193, 193, 193));">Payload</span></div></div></div></foreignObject><text x="211" y="504" fill="#333333" font-family="&quot;Helvetica&quot;" font-size="12px" text-anchor="middle">Payload</text></switch></g></g><g><rect x="702" y="960" width="160" height="80" fill="#dae8fc" stroke="#6c8ebf" stroke-width="2" pointer-events="all" style="fill: light-dark(rgb(218, 232, 252), rgb(29, 41, 59)); stroke: light-dark(rgb(108, 142, 191), rgb(92, 121, 163));"/></g><g><g transform="translate(-0.5 -0.5)scale(2)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 500px; margin-left: 352px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: &quot;Helvetica&quot;; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">CRC16</div></div></div></foreignObject><text x="391" y="504" fill="light-dark(#000000, #ffffff)" font-family="&quot;Helvetica&quot;" font-size="12px" text-anchor="middle">CRC16</text></switch></g></g><g><rect x="142" y="1200" width="560" height="80" fill="#f5f5f5" stroke="#666666" stroke-width="2" pointer-events="all" style="fill: light-dark(rgb(245, 245, 245), rgb(26, 26, 26)); stroke: light-dark(rgb(102, 102, 102), rgb(149, 149, 149));"/></g><g><g transform="translate(-0.5 -0.5)scale(2)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 278px; height: 1px; padding-top: 620px; margin-left: 72px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #333333; "><div style="display: inline-block; font-size: 12px; font-family: &quot;Helvetica&quot;; color: light-dark(#333333, #c1c1c1); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><span style="color: light-dark(rgb(51, 51, 51), rgb(193, 193, 193));">Payload</span></div></div></div></foreignObject><text x="211" y="624" fill="#333333" font-family="&quot;Helvetica&quot;" font-size="12px" text-anchor="middle">Payload</text></switch></g></g><g><path d="M 422 920 L 422 947.26" fill="none" stroke="#000000" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 422 957.76 L 415 943.76 L 422 947.26 L 429 943.76 Z" fill="#000000" stroke="#000000" stroke-width="2" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g><rect x="337" y="840" width="170" height="80" rx="12" ry="12" fill="#e1d5e7" stroke="#9673a6" stroke-width="2" pointer-events="all" style="fill: light-dark(rgb(225, 213, 231), rgb(57, 47, 63)); stroke: light-dark(rgb(150, 115, 166), rgb(149, 119, 163));"/></g><g><g transform="translate(-0.5 -0.5)scale(2)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 83px; height: 1px; padding-top: 440px; margin-left: 170px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: &quot;Helvetica&quot;; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Decode <span style="color: light-dark(rgb(0, 0, 0), rgb(237, 237, 237));">with</span><div>COBS</div></div></div></div></foreignObject><text x="211" y="444" fill="light-dark(#000000, #ffffff)" font-family="&quot;Helvetica&quot;" font-size="12px" text-anchor="middle">Decode with...</text></switch></g></g><g><path d="M 421.59 827.27 L 420.64 797.44" fill="none" stroke="#000000" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 421.93 837.77 L 414.49 824 L 421.59 827.27 L 428.48 823.55 Z" fill="#000000" stroke="#000000" stroke-width="2" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g><path d="M 422 1160 L 422 1187.26" fill="none" stroke="#000000" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 422 1197.76 L 415 1183.76 L 422 1187.26 L 429 1183.76 Z" fill="#000000" stroke="#000000" stroke-width="2" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g><rect x="337" y="1080" width="170" height="80" rx="12" ry="12" fill="#e1d5e7" stroke="#9673a6" stroke-width="2" pointer-events="all" style="fill: light-dark(rgb(225, 213, 231), rgb(57, 47, 63)); stroke: light-dark(rgb(150, 115, 166), rgb(149, 119, 163));"/></g><g><g transform="translate(-0.5 -0.5)scale(2)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 83px; height: 1px; padding-top: 560px; margin-left: 170px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: &quot;Helvetica&quot;; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Calculate CRC</div></div></div></foreignObject><text x="211" y="564" fill="light-dark(#000000, #ffffff)" font-family="&quot;Helvetica&quot;" font-size="12px" text-anchor="middle">Calculate CRC</text></switch></g></g><g><path d="M 421.16 580 L 421.16 687.26" fill="none" stroke="#000000" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 421.16 697.76 L 414.16 683.76 L 421.16 687.26 L 428.16 683.76 Z" fill="#000000" stroke="#000000" stroke-width="2" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.drawio.com/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Text is not SVG - cannot display</text></a></switch></svg>
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "burst-link-protocol"
3
- version = "1.0.0" # Choose one version reference here
3
+ version = "1.0.2" # Choose one version reference here
4
4
  description = "Binary Utility for Reliable Stream Transfer (BURST) is a library for encoding and decoding binary data streams into and from a byte stream."
5
5
  requires-python = ">=3.10,<4.0"
6
6
  authors = [
@@ -145,6 +145,6 @@ burst_packet_t burst_decoder_get_packet(burst_decoder_t *ctx)
145
145
 
146
146
  burst_packet_t packet;
147
147
  packet.data = ctx->buffer;
148
- packet.size = ctx->out_head;
148
+ packet.size = ctx->out_head-1;
149
149
  return packet;
150
150
  }
@@ -1,69 +0,0 @@
1
- # BURST interface
2
- Binary Utility for Reliable Stream Transfer (BURST) is a library for encoding and decoding binary data streams, a packet format.
3
- It combines a 16 bit checksum and cobs encoding to convert packets into a format that can be sent over a stream.
4
-
5
- This projects is written so it can be used both in python, c and c++ based project
6
-
7
- # Installation instuctions
8
-
9
- ## As an user
10
-
11
- Simple installation
12
- ```sh
13
- pip install -e .
14
- ```
15
-
16
- ## As a developer
17
-
18
- Fast build
19
- ```sh
20
- pip install --no-build-isolation -ve .
21
- ```
22
-
23
- Auto rebuild on run
24
- ```sh
25
- pip install --no-build-isolation -Ceditable.rebuild=true -ve .
26
- ```
27
-
28
-
29
- ### Python Stub files generation
30
-
31
- They are generated automatically buy can also be generated
32
-
33
- ```
34
- python -m nanobind.stubgen -m nanobind_example_ext
35
- ```
36
-
37
- # Publishing instructions
38
-
39
- ```
40
-
41
- ```
42
-
43
- # Test
44
-
45
- ```sh
46
- pytest
47
- ```
48
-
49
- # BURST protocol
50
- TODO
51
- * STAGE 1
52
- * Convert cpp to c files [OK]
53
- * Formalise naming [OK]
54
- * Add c encode functions [OK]
55
- * Test c encode functions [OK]
56
- * Update README
57
- * Improve poetry.toml [OK]
58
-
59
-
60
- * STAGE 2
61
- * Add CI/CD on github to compile x86
62
- * Fix dependencies once compilation succeeds
63
- * Publish on pypi
64
- * STAGE 3
65
- * Add a way to get C test coverage
66
-
67
-
68
-
69
-