CM 2026
25
.$api.drawio.bkp
Normal file
@@ -0,0 +1,25 @@
|
||||
<mxfile host="Electron">
|
||||
<diagram name="Page-1" id="H7xYqO0Dmv1XXnkQZzNF">
|
||||
<mxGraphModel dx="2054" dy="1249" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="1mupZNotRLIWGnVzbSHi-1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;" value="API JavaScript<div>robot.js</div>" vertex="1">
|
||||
<mxGeometry height="60" width="120" x="160" y="530" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="1mupZNotRLIWGnVzbSHi-2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;" value="API C++<div>Robot.h</div>" vertex="1">
|
||||
<mxGeometry height="60" width="120" x="640" y="530" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="1mupZNotRLIWGnVzbSHi-3" parent="1" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;" value="Utilisateur 1" vertex="1">
|
||||
<mxGeometry height="60" width="30" x="205" y="380" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="1mupZNotRLIWGnVzbSHi-4" parent="1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fontFamily=Lucida Console;fillColor=#000000;fontColor=#FFFFFF;fontSize=13;" value="1" vertex="1">
|
||||
<mxGeometry height="25" width="25" x="260" y="390" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="1mupZNotRLIWGnVzbSHi-5" parent="1" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;" value="Utilisateur 2" vertex="1">
|
||||
<mxGeometry height="60" width="30" x="600" y="130" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
139
.$architecture.drawio.bkp
Normal file
@@ -0,0 +1,139 @@
|
||||
<mxfile host="Electron" pages="3">
|
||||
<diagram name="Page-1" id="H24PdPBp2qWAAXzihOo2">
|
||||
<mxGraphModel dx="2054" dy="1204" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="TfgVownXPHUy0RqdUbZx-1" parent="1" style="rounded=0;whiteSpace=wrap;html=1;verticalAlign=bottom;labelPosition=center;verticalLabelPosition=top;align=center;fontStyle=1;fontFamily=Lucida Console;fontSize=18;" value="Microcontrôleur" vertex="1">
|
||||
<mxGeometry height="330" width="480" x="120" y="350" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TfgVownXPHUy0RqdUbZx-4" edge="1" parent="1" source="TfgVownXPHUy0RqdUbZx-2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.25;entryY=1;entryDx=0;entryDy=0;fontFamily=Lucida Console;fontSize=18;" target="TfgVownXPHUy0RqdUbZx-1">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TfgVownXPHUy0RqdUbZx-2" parent="1" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;fontFamily=Lucida Console;fontSize=18;" value="Capteurs" vertex="1">
|
||||
<mxGeometry height="60" width="180" x="150" y="740" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TfgVownXPHUy0RqdUbZx-5" edge="1" parent="1" source="TfgVownXPHUy0RqdUbZx-3" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.75;entryY=1;entryDx=0;entryDy=0;fontFamily=Lucida Console;startArrow=classic;startFill=1;endArrow=none;endFill=0;fontSize=18;" target="TfgVownXPHUy0RqdUbZx-1">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TfgVownXPHUy0RqdUbZx-3" parent="1" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;fontFamily=Lucida Console;fontSize=18;" value="Actionneurs" vertex="1">
|
||||
<mxGeometry height="60" width="180" x="390" y="740" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TfgVownXPHUy0RqdUbZx-14" edge="1" parent="1" source="TfgVownXPHUy0RqdUbZx-6" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;startArrow=classic;startFill=1;fontFamily=Lucida Console;fontSize=18;" target="TfgVownXPHUy0RqdUbZx-11">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TfgVownXPHUy0RqdUbZx-19" edge="1" parent="1" source="TfgVownXPHUy0RqdUbZx-6" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;dashed=1;endArrow=none;endFill=0;fontSize=18;" target="TfgVownXPHUy0RqdUbZx-15">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TfgVownXPHUy0RqdUbZx-6" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Lucida Console;fontSize=18;" value="CPU" vertex="1">
|
||||
<mxGeometry height="60" width="120" x="165" y="390" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TfgVownXPHUy0RqdUbZx-11" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Lucida Console;fontSize=18;" value="Flash / RAM" vertex="1">
|
||||
<mxGeometry height="60" width="120" x="435" y="390" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TfgVownXPHUy0RqdUbZx-12" edge="1" parent="1" style="endArrow=none;html=1;rounded=0;exitX=0.083;exitY=0.485;exitDx=0;exitDy=0;exitPerimeter=0;fontFamily=Lucida Console;fontSize=18;" value="Bus">
|
||||
<mxGeometry height="50" relative="1" width="50" as="geometry">
|
||||
<mxPoint x="174.92000000000016" y="499.54999999999995" as="sourcePoint" />
|
||||
<mxPoint x="545.08" y="499.5" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="TfgVownXPHUy0RqdUbZx-13" edge="1" parent="1" style="endArrow=none;html=1;rounded=0;exitX=0.083;exitY=0.485;exitDx=0;exitDy=0;exitPerimeter=0;fontFamily=Lucida Console;fontSize=18;" value="">
|
||||
<mxGeometry height="50" relative="1" width="50" as="geometry">
|
||||
<mxPoint x="175.08" y="509.5" as="sourcePoint" />
|
||||
<mxPoint x="545.08" y="509.5" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="TfgVownXPHUy0RqdUbZx-15" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Lucida Console;fontSize=18;" value="GPIO" vertex="1">
|
||||
<mxGeometry height="80" width="90" x="180" y="560" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TfgVownXPHUy0RqdUbZx-16" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Lucida Console;fontSize=18;" value="PWM" vertex="1">
|
||||
<mxGeometry height="80" width="90" x="270" y="560" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TfgVownXPHUy0RqdUbZx-17" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Lucida Console;fontSize=18;" value="ADC" vertex="1">
|
||||
<mxGeometry height="80" width="90" x="360" y="560" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TfgVownXPHUy0RqdUbZx-18" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Lucida Console;fontSize=18;" value="UART<div>I²C</div><div>SPI</div>" vertex="1">
|
||||
<mxGeometry height="80" width="90" x="450" y="560" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
<diagram id="NPh7eyBVKTpPlYXxW1ib" name="Page-2">
|
||||
<mxGraphModel dx="2054" dy="1204" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="eCsRcLpa0CxYh5-5eHXg-5" edge="1" parent="1" source="eCsRcLpa0CxYh5-5eHXg-1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;startArrow=classic;startFill=1;" target="eCsRcLpa0CxYh5-5eHXg-2">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="eCsRcLpa0CxYh5-5eHXg-1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fontFamily=Lucida Console;fontSize=14;fillColor=#d5e8d4;strokeColor=#82b366;" value="Utilisateur" vertex="1">
|
||||
<mxGeometry height="60" width="120" x="354" y="440" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="eCsRcLpa0CxYh5-5eHXg-6" edge="1" parent="1" source="eCsRcLpa0CxYh5-5eHXg-2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;startArrow=classic;startFill=1;" target="eCsRcLpa0CxYh5-5eHXg-3">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="eCsRcLpa0CxYh5-5eHXg-2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fontFamily=Lucida Console;fontSize=14;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="Applications" vertex="1">
|
||||
<mxGeometry height="60" width="120" x="354" y="530" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="eCsRcLpa0CxYh5-5eHXg-7" edge="1" parent="1" source="eCsRcLpa0CxYh5-5eHXg-3" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;startArrow=classic;startFill=1;" target="eCsRcLpa0CxYh5-5eHXg-4">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="eCsRcLpa0CxYh5-5eHXg-3" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fontFamily=Lucida Console;fontSize=14;" value="Système d'exploitation" vertex="1">
|
||||
<mxGeometry height="60" width="120" x="354" y="620" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="eCsRcLpa0CxYh5-5eHXg-4" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fontFamily=Lucida Console;fontSize=14;fillColor=#f8cecc;strokeColor=#b85450;" value="Matériel" vertex="1">
|
||||
<mxGeometry height="60" width="120" x="354" y="710" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
<diagram name="Copie de Page-2" id="qSMlDmqpKOs5Qo3T-fwt">
|
||||
<mxGraphModel dx="2054" dy="1204" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="Bj1x88DmsSi_koGnZvfM-0" />
|
||||
<mxCell id="Bj1x88DmsSi_koGnZvfM-1" parent="Bj1x88DmsSi_koGnZvfM-0" />
|
||||
<mxCell id="Bj1x88DmsSi_koGnZvfM-2" edge="1" parent="Bj1x88DmsSi_koGnZvfM-1" source="Bj1x88DmsSi_koGnZvfM-3" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;startArrow=classic;startFill=1;fontFamily=Lucida Console;" target="Bj1x88DmsSi_koGnZvfM-5">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Bj1x88DmsSi_koGnZvfM-3" parent="Bj1x88DmsSi_koGnZvfM-1" style="rounded=1;whiteSpace=wrap;html=1;fontFamily=Lucida Console;fontSize=14;fillColor=#d5e8d4;strokeColor=#82b366;" value="Utilisateur" vertex="1">
|
||||
<mxGeometry height="60" width="120" x="354" y="440" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Bj1x88DmsSi_koGnZvfM-4" edge="1" parent="Bj1x88DmsSi_koGnZvfM-1" source="Bj1x88DmsSi_koGnZvfM-5" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;startArrow=classic;startFill=1;fontFamily=Lucida Console;" target="Bj1x88DmsSi_koGnZvfM-7">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="436" y="590" as="sourcePoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="Bj1x88DmsSi_koGnZvfM-5" parent="Bj1x88DmsSi_koGnZvfM-1" style="rounded=1;whiteSpace=wrap;html=1;fontFamily=Lucida Console;fontSize=14;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="Applications" vertex="1">
|
||||
<mxGeometry height="60" width="120" x="354" y="530" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Bj1x88DmsSi_koGnZvfM-6" edge="1" parent="Bj1x88DmsSi_koGnZvfM-1" source="Bj1x88DmsSi_koGnZvfM-7" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;startArrow=classic;startFill=1;fontFamily=Lucida Console;" target="Bj1x88DmsSi_koGnZvfM-8">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Bj1x88DmsSi_koGnZvfM-7" parent="Bj1x88DmsSi_koGnZvfM-1" style="rounded=1;whiteSpace=wrap;html=1;fontFamily=Lucida Console;fontSize=14;" value="" vertex="1">
|
||||
<mxGeometry height="100" width="396" x="216" y="620" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Bj1x88DmsSi_koGnZvfM-8" parent="Bj1x88DmsSi_koGnZvfM-1" style="rounded=1;whiteSpace=wrap;html=1;fontFamily=Lucida Console;fontSize=14;fillColor=#f8cecc;strokeColor=#b85450;" value="Matériel" vertex="1">
|
||||
<mxGeometry height="60" width="120" x="354" y="750" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="M2oPwsjC-JQn1axJBlEC-0" parent="Bj1x88DmsSi_koGnZvfM-1" style="rounded=1;whiteSpace=wrap;html=1;fontFamily=Lucida Console;" value="Ordonnanceur" vertex="1">
|
||||
<mxGeometry height="30" width="120" x="222" y="630" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="M2oPwsjC-JQn1axJBlEC-1" parent="Bj1x88DmsSi_koGnZvfM-1" style="rounded=1;whiteSpace=wrap;html=1;fontFamily=Lucida Console;" value="Pilotes" vertex="1">
|
||||
<mxGeometry height="30" width="120" x="352" y="630" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="M2oPwsjC-JQn1axJBlEC-2" parent="Bj1x88DmsSi_koGnZvfM-1" style="rounded=1;whiteSpace=wrap;html=1;fontFamily=Lucida Console;" value="Mémoire virtuelle" vertex="1">
|
||||
<mxGeometry height="30" width="120" x="482" y="630" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="M2oPwsjC-JQn1axJBlEC-3" parent="Bj1x88DmsSi_koGnZvfM-1" style="rounded=1;whiteSpace=wrap;html=1;fontFamily=Lucida Console;" value="Réseau" vertex="1">
|
||||
<mxGeometry height="30" width="120" x="222" y="680" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="M2oPwsjC-JQn1axJBlEC-4" parent="Bj1x88DmsSi_koGnZvfM-1" style="rounded=1;whiteSpace=wrap;html=1;fontFamily=Lucida Console;" value="Système de fichiers" vertex="1">
|
||||
<mxGeometry height="30" width="120" x="352" y="680" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="M2oPwsjC-JQn1axJBlEC-5" parent="Bj1x88DmsSi_koGnZvfM-1" style="rounded=1;whiteSpace=wrap;html=1;fontFamily=Lucida Console;fillColor=#e1d5e7;strokeColor=#9673a6;" value="Interface unifiée" vertex="1">
|
||||
<mxGeometry height="30" width="120" x="482" y="680" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
103
.$chaine-traitement.drawio.bkp
Normal file
@@ -0,0 +1,103 @@
|
||||
<mxfile host="Electron">
|
||||
<diagram name="Page-1" id="7JzDzjip2TuGe_8uaPaL">
|
||||
<mxGraphModel dx="2054" dy="1249" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="bPvS0FeOd_jefKcGD8Kd-8" edge="1" parent="1" source="bPvS0FeOd_jefKcGD8Kd-6" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;curved=1;dashed=1;dashPattern=12 12;fontFamily=Lucida Console;" target="1qu7PkDasCeL9URAl8fn-25">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="bPvS0FeOd_jefKcGD8Kd-6" parent="1" style="rounded=0;whiteSpace=wrap;html=1;dashed=1;fontSize=14;verticalAlign=top;fontFamily=Lucida Console;" value="Monde" vertex="1">
|
||||
<mxGeometry height="120" width="440" x="200" y="730" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="1qu7PkDasCeL9URAl8fn-15" parent="1" style="rounded=0;whiteSpace=wrap;html=1;dashed=1;fontSize=14;fontFamily=Lucida Console;verticalAlign=bottom;" value="Robot" vertex="1">
|
||||
<mxGeometry height="320" width="440" x="200" y="400" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="1qu7PkDasCeL9URAl8fn-6" edge="1" parent="1" source="1qu7PkDasCeL9URAl8fn-1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fontSize=18;fontFamily=Lucida Console;" target="1qu7PkDasCeL9URAl8fn-3">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="1qu7PkDasCeL9URAl8fn-1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=18;fontFamily=Lucida Console;fontStyle=1" value="Acquisition" vertex="1">
|
||||
<mxGeometry height="60" width="160" x="220" y="590" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="1qu7PkDasCeL9URAl8fn-8" edge="1" parent="1" source="1qu7PkDasCeL9URAl8fn-2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;fontSize=18;fontFamily=Lucida Console;" target="1qu7PkDasCeL9URAl8fn-13">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="540" y="800" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="1qu7PkDasCeL9URAl8fn-2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=18;fontFamily=Lucida Console;fontStyle=1" value="Communication" vertex="1">
|
||||
<mxGeometry height="60" width="160" x="460" y="590" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="1qu7PkDasCeL9URAl8fn-7" edge="1" parent="1" source="1qu7PkDasCeL9URAl8fn-3" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;fontSize=18;fontFamily=Lucida Console;" target="1qu7PkDasCeL9URAl8fn-2">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="1qu7PkDasCeL9URAl8fn-3" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=18;fontFamily=Lucida Console;fontStyle=1" value="Traitement" vertex="1">
|
||||
<mxGeometry height="60" width="120" x="360" y="440" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="1qu7PkDasCeL9URAl8fn-5" edge="1" parent="1" source="1qu7PkDasCeL9URAl8fn-9" style="endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;fontSize=18;fontFamily=Lucida Console;" target="1qu7PkDasCeL9URAl8fn-1" value="">
|
||||
<mxGeometry height="50" relative="1" width="50" as="geometry">
|
||||
<mxPoint x="300" y="760" as="sourcePoint" />
|
||||
<mxPoint x="180" y="370" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="1qu7PkDasCeL9URAl8fn-9" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=18;fontFamily=Lucida Console;" value="Phénomènes physiques" vertex="1">
|
||||
<mxGeometry height="60" width="120" x="240" y="760" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="1qu7PkDasCeL9URAl8fn-13" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=18;fontFamily=Lucida Console;" value="Messages" vertex="1">
|
||||
<mxGeometry height="60" width="120" x="480" y="760" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="bPvS0FeOd_jefKcGD8Kd-4" edge="1" parent="1" source="1qu7PkDasCeL9URAl8fn-17" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;curved=1;dashed=1;dashPattern=12 12;fontFamily=Lucida Console;" target="1qu7PkDasCeL9URAl8fn-28">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="1qu7PkDasCeL9URAl8fn-17" parent="1" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;fillColor=#f5f5f5;strokeColor=#666666;fontSize=18;fontFamily=Lucida Console;fontColor=#333333;dashed=1;dashPattern=12 12;" value="Information" vertex="1">
|
||||
<mxGeometry height="70" width="140" x="580" y="435" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="bPvS0FeOd_jefKcGD8Kd-2" edge="1" parent="1" source="1qu7PkDasCeL9URAl8fn-18" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;curved=1;dashed=1;dashPattern=12 12;fontFamily=Lucida Console;" target="1qu7PkDasCeL9URAl8fn-26">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="190" y="300" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="1qu7PkDasCeL9URAl8fn-18" parent="1" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;fontSize=18;fontFamily=Lucida Console;fillColor=#f5f5f5;fontColor=#333333;strokeColor=#666666;dashed=1;dashPattern=12 12;" value="Données brutes" vertex="1">
|
||||
<mxGeometry height="70" width="140" x="120" y="435" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="1qu7PkDasCeL9URAl8fn-22" edge="1" parent="1" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;fontSize=18;fontFamily=Lucida Console;" value="">
|
||||
<mxGeometry height="50" relative="1" width="50" as="geometry">
|
||||
<mxPoint x="121" y="660" as="sourcePoint" />
|
||||
<mxPoint x="216" y="621" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="1qu7PkDasCeL9URAl8fn-23" edge="1" parent="1" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;fillColor=#f8cecc;strokeColor=#b85450;fontSize=18;fontFamily=Lucida Console;" value="">
|
||||
<mxGeometry height="50" relative="1" width="50" as="geometry">
|
||||
<mxPoint x="420" y="350" as="sourcePoint" />
|
||||
<mxPoint x="420" y="435" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="1qu7PkDasCeL9URAl8fn-24" edge="1" parent="1" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;fillColor=#f8cecc;strokeColor=#b85450;fontSize=18;fontFamily=Lucida Console;" value="">
|
||||
<mxGeometry height="50" relative="1" width="50" as="geometry">
|
||||
<mxPoint x="712" y="655.42" as="sourcePoint" />
|
||||
<mxPoint x="624" y="616" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="1qu7PkDasCeL9URAl8fn-25" parent="1" style="ellipse;whiteSpace=wrap;html=1;shapeInside=1;fontSize=18;fontFamily=Lucida Console;fillColor=#f5f5f5;fontColor=#333333;strokeColor=#666666;fontStyle=2;dashed=1;dashPattern=12 12;" value="Capteurs" vertex="1">
|
||||
<mxGeometry height="80" width="120" x="10" y="650" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="1qu7PkDasCeL9URAl8fn-26" parent="1" style="ellipse;whiteSpace=wrap;html=1;shapeInside=1;fontSize=18;fontFamily=Lucida Console;fillColor=#f5f5f5;fontColor=#333333;strokeColor=#666666;fontStyle=2;dashed=1;dashPattern=12 12;" value="Microcontrôleurs" vertex="1">
|
||||
<mxGeometry height="80" width="210" x="315" y="260" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="bPvS0FeOd_jefKcGD8Kd-10" edge="1" parent="1" source="1qu7PkDasCeL9URAl8fn-28" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;curved=1;dashed=1;dashPattern=12 12;fontFamily=Lucida Console;" target="bPvS0FeOd_jefKcGD8Kd-6">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="1qu7PkDasCeL9URAl8fn-28" parent="1" style="ellipse;whiteSpace=wrap;html=1;shapeInside=1;fontSize=18;fontFamily=Lucida Console;fillColor=#f5f5f5;fontColor=#333333;strokeColor=#666666;fontStyle=2;dashed=1;dashPattern=12 12;" value="Interfaces" vertex="1">
|
||||
<mxGeometry height="80" width="120" x="700" y="650" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="bPvS0FeOd_jefKcGD8Kd-1" edge="1" parent="1" source="1qu7PkDasCeL9URAl8fn-25" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;entryPerimeter=0;curved=1;dashed=1;dashPattern=12 12;fontFamily=Lucida Console;" target="1qu7PkDasCeL9URAl8fn-18">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="bPvS0FeOd_jefKcGD8Kd-3" edge="1" parent="1" source="1qu7PkDasCeL9URAl8fn-26" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;curved=1;dashed=1;dashPattern=12 12;fontFamily=Lucida Console;" target="1qu7PkDasCeL9URAl8fn-17">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
92
.$compilation.drawio.bkp
Normal file
@@ -0,0 +1,92 @@
|
||||
<mxfile host="Electron">
|
||||
<diagram name="Page-1" id="ax6Bn3PDJctrheuzLOC9">
|
||||
<mxGraphModel dx="2054" dy="1249" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="UncVJlxBDFmlAtaXbHPb-2" parent="1" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;fontSize=18;fontFamily=Lucida Console;verticalAlign=bottom;" value="Sources du robot (C++)" vertex="1">
|
||||
<mxGeometry height="120" width="100" x="310" y="240" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="UncVJlxBDFmlAtaXbHPb-5" edge="1" parent="1" source="UncVJlxBDFmlAtaXbHPb-3" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fontSize=16;fontFamily=Lucida Console;dashed=1;" target="UncVJlxBDFmlAtaXbHPb-4" value="compilation croisée">
|
||||
<mxGeometry relative="1" x="0.1429" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="UncVJlxBDFmlAtaXbHPb-3" parent="1" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;fontFamily=Lucida Console;fontSize=18;" value="Processeur du PC (x86_64)" vertex="1">
|
||||
<mxGeometry height="80" width="160" x="220" y="480" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="UncVJlxBDFmlAtaXbHPb-4" parent="1" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;fontFamily=Lucida Console;fontSize=18;" value="Micro-<div>contrôleur<div>(RP2040)</div></div>" vertex="1">
|
||||
<mxGeometry height="80" width="160" x="870" y="480" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="UncVJlxBDFmlAtaXbHPb-8" parent="1" style="rounded=1;whiteSpace=wrap;html=1;dashed=1;fontFamily=Lucida Console;" value="" vertex="1">
|
||||
<mxGeometry height="220" width="400" x="460" y="240" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="UncVJlxBDFmlAtaXbHPb-9" parent="1" style="verticalLabelPosition=bottom;shadow=0;dashed=1;align=center;html=1;verticalAlign=top;strokeWidth=1;shape=mxgraph.mockup.markup.curlyBrace;whiteSpace=wrap;strokeColor=#000000;flipH=0;legacyAnchorPoints=0;flipV=1;fontFamily=Lucida Console;" value="" vertex="1">
|
||||
<mxGeometry height="20" width="400" x="460" y="470" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="UncVJlxBDFmlAtaXbHPb-11" edge="1" parent="1" source="UncVJlxBDFmlAtaXbHPb-10" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;fontFamily=Lucida Console;" target="UncVJlxBDFmlAtaXbHPb-4" value="flash">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="UncVJlxBDFmlAtaXbHPb-10" parent="1" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;fontSize=18;fontFamily=Lucida Console;verticalAlign=bottom;" value="Firmware (.uf2)" vertex="1">
|
||||
<mxGeometry height="120" width="100" x="900" y="240" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="UncVJlxBDFmlAtaXbHPb-22" edge="1" parent="1" source="UncVJlxBDFmlAtaXbHPb-12" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;fontFamily=Lucida Console;" target="UncVJlxBDFmlAtaXbHPb-13">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="595" y="300" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="UncVJlxBDFmlAtaXbHPb-23" edge="1" parent="1" source="UncVJlxBDFmlAtaXbHPb-12" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;fontFamily=Lucida Console;" target="UncVJlxBDFmlAtaXbHPb-15">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="UncVJlxBDFmlAtaXbHPb-12" parent="1" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;fontFamily=Lucida Console;" value="cmake" vertex="1">
|
||||
<mxGeometry height="50" width="85" x="480" y="275" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="UncVJlxBDFmlAtaXbHPb-26" edge="1" parent="1" source="UncVJlxBDFmlAtaXbHPb-13" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;curved=1;dashed=1;dashPattern=8 8;fontFamily=Lucida Console;" target="UncVJlxBDFmlAtaXbHPb-15" value="objets">
|
||||
<mxGeometry relative="1" x="0.5181" y="8" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="UncVJlxBDFmlAtaXbHPb-13" parent="1" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;fontFamily=Lucida Console;horizontal=1;convertToSvg=0;svgWhiteSpace=wrap;" value="compilateur<div>ARM</div>" vertex="1">
|
||||
<mxGeometry height="50" width="110" x="540" y="400" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="UncVJlxBDFmlAtaXbHPb-15" parent="1" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;fontFamily=Lucida Console;" value="éditeur de liens" vertex="1">
|
||||
<mxGeometry height="50" width="110" x="623" y="320" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="UncVJlxBDFmlAtaXbHPb-16" parent="1" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;fontSize=18;fontFamily=Lucida Console;verticalAlign=bottom;" value="Pico SDK (C++)" vertex="1">
|
||||
<mxGeometry height="120" width="100" x="190" y="240" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="UncVJlxBDFmlAtaXbHPb-19" edge="1" parent="1" source="UncVJlxBDFmlAtaXbHPb-18" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;curved=1;fontFamily=Lucida Console;" target="UncVJlxBDFmlAtaXbHPb-3">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="UncVJlxBDFmlAtaXbHPb-18" parent="1" style="verticalLabelPosition=bottom;shadow=0;dashed=0;align=center;html=1;verticalAlign=top;strokeWidth=1;shape=mxgraph.mockup.markup.curlyBrace;whiteSpace=wrap;strokeColor=#000000;flipV=1;legacyAnchorPoints=0;fontFamily=Lucida Console;" value="" vertex="1">
|
||||
<mxGeometry height="20" width="220" x="190" y="370" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="UncVJlxBDFmlAtaXbHPb-21" edge="1" parent="1" source="UncVJlxBDFmlAtaXbHPb-20" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fontFamily=Lucida Console;" target="UncVJlxBDFmlAtaXbHPb-12">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="UncVJlxBDFmlAtaXbHPb-20" parent="1" style="labelPosition=right;align=left;strokeWidth=1;shape=mxgraph.mockup.markup.curlyBrace;html=1;shadow=0;dashed=0;strokeColor=#000000;direction=north;flipH=1;legacyAnchorPoints=0;fontFamily=Lucida Console;" value="" vertex="1">
|
||||
<mxGeometry height="120" width="20" x="420" y="240" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="UncVJlxBDFmlAtaXbHPb-31" edge="1" parent="1" source="UncVJlxBDFmlAtaXbHPb-27" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0;exitDx=60;exitDy=30;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;curved=1;dashed=1;dashPattern=12 12;" target="UncVJlxBDFmlAtaXbHPb-29">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="UncVJlxBDFmlAtaXbHPb-27" parent="1" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;fontFamily=Lucida Console;fontSize=12;verticalAlign=bottom;" value="Firmware (.elf)" vertex="1">
|
||||
<mxGeometry height="70" width="60" x="755" y="380" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="UncVJlxBDFmlAtaXbHPb-28" edge="1" parent="1" source="UncVJlxBDFmlAtaXbHPb-15" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.75;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;curved=1;dashed=1;dashPattern=8 8;fontFamily=Lucida Console;" target="UncVJlxBDFmlAtaXbHPb-27" value="exécutable">
|
||||
<mxGeometry relative="1" x="0.2212" y="-16" as="geometry">
|
||||
<mxPoint x="-6" y="-1" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="UncVJlxBDFmlAtaXbHPb-29" parent="1" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;fontFamily=Lucida Console;" value="picotool" vertex="1">
|
||||
<mxGeometry height="50" width="85" x="760" y="275" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="UncVJlxBDFmlAtaXbHPb-32" edge="1" parent="1" source="UncVJlxBDFmlAtaXbHPb-29" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" target="UncVJlxBDFmlAtaXbHPb-10">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
@@ -1,54 +1,102 @@
|
||||
FROM mcr.microsoft.com/devcontainers/base:ubuntu
|
||||
# syntax=docker/dockerfile:1
|
||||
FROM mcr.microsoft.com/devcontainers/base:ubuntu-24.04
|
||||
|
||||
# Install dependencies for TeX Live installation and usage
|
||||
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \
|
||||
LABEL org.opencontainers.image.title="LaTeX Dev Container" \
|
||||
org.opencontainers.image.description="Full TeX Live + LaTeX Workshop dev container" \
|
||||
org.opencontainers.image.source="https://github.com/khannurien/latex-devcontainer" \
|
||||
org.opencontainers.image.licenses="MIT"
|
||||
|
||||
ARG USERNAME=vscode
|
||||
ARG TEXLIVE_YEAR=2026
|
||||
# Point this at a frozen snapshot (e.g. the TUG historic tlnet-final tree for a
|
||||
# given year) once TEXLIVE_YEAR is no longer the current release.
|
||||
ARG TEXLIVE_REPO="https://mirror.ctan.org/systems/texlive/tlnet"
|
||||
# Docs are what `texdoc` reads; sources are almost never needed.
|
||||
ARG INSTALL_DOCFILES=1
|
||||
ARG INSTALL_SRCFILES=0
|
||||
|
||||
# Runtime dependencies. Note: biber, latexmk, latexindent and chktex all ship
|
||||
# with scheme-full, so they are deliberately NOT installed from apt -- the apt
|
||||
# versions routinely disagree with the TeX Live ones (biblatex/biber in
|
||||
# particular). What apt provides here is what TeX Live cannot: perl itself, the
|
||||
# perl modules latexindent needs, ghostscript for pdfcrop/ps2pdf/epstopdf, and
|
||||
# fontconfig so xelatex/lualatex can see system fonts.
|
||||
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
|
||||
perl \
|
||||
biber \
|
||||
wget \
|
||||
ca-certificates \
|
||||
fontconfig \
|
||||
ghostscript \
|
||||
make \
|
||||
git \
|
||||
curl \
|
||||
python3 \
|
||||
python3-pygments \
|
||||
libyaml-tiny-perl \
|
||||
libfile-homedir-perl \
|
||||
libunicode-linebreak-perl \
|
||||
liblog-log4perl-perl \
|
||||
liblog-dispatch-perl \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Set non-root user provided by Microsoft base image
|
||||
ARG USERNAME=vscode
|
||||
|
||||
# Switch to user home directory
|
||||
USER $USERNAME
|
||||
WORKDIR /home/$USERNAME
|
||||
|
||||
# Set TeX Live paths and update environment
|
||||
ENV TEXLIVE_INSTALL_PREFIX="/usr/local/texlive"
|
||||
ENV TEXLIVE_INSTALL_TEXDIR="${TEXLIVE_INSTALL_PREFIX}/2025"
|
||||
ENV PATH="${TEXLIVE_INSTALL_TEXDIR}/bin/x86_64-linux:${PATH}"
|
||||
ENV TEXLIVE_INSTALL_TEXDIR="${TEXLIVE_INSTALL_PREFIX}/${TEXLIVE_YEAR}"
|
||||
|
||||
# Download and install TeX Live 2025 as root
|
||||
RUN wget -q https://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz && \
|
||||
tar -xzf install-tl-unx.tar.gz && \
|
||||
rm install-tl-unx.tar.gz && \
|
||||
cd install-tl-* && \
|
||||
echo "selected_scheme scheme-full" > texlive.profile && \
|
||||
echo "TEXDIR ${TEXLIVE_INSTALL_TEXDIR}" >> texlive.profile && \
|
||||
echo "TEXMFCONFIG /home/vscode/.texlive2025/texmf-config" >> texlive.profile && \
|
||||
echo "TEXMFVAR /home/vscode/.texlive2025/texmf-var" >> texlive.profile && \
|
||||
echo "instopt_adjustpath 1" >> texlive.profile && \
|
||||
echo "tlpdbopt_autobackup 0" >> texlive.profile && \
|
||||
sudo perl ./install-tl --profile=texlive.profile --no-interaction && \
|
||||
cd .. && rm -rf install-tl-*
|
||||
# Install TeX Live as root. instopt_adjustpath symlinks the binaries into
|
||||
# /usr/local/bin, which keeps the image architecture-agnostic.
|
||||
RUN set -eux; \
|
||||
cd /tmp; \
|
||||
# mirror.ctan.org redirects to a *different* random mirror on every request, so
|
||||
# resolve it once and take the tarball, its checksum and the packages all from
|
||||
# that same host. Retry because individual mirrors have broken TLS or lag sync.
|
||||
for attempt in 1 2 3 4 5; do \
|
||||
rm -f install-tl-unx.tar.gz install-tl-unx.tar.gz.sha512; \
|
||||
resolved="$(curl -fsSL --retry 3 -o install-tl-unx.tar.gz.sha512 \
|
||||
-w '%{url_effective}' "${TEXLIVE_REPO}/install-tl-unx.tar.gz.sha512")" || continue; \
|
||||
base="${resolved%/*}"; \
|
||||
curl -fsSL --retry 3 -o install-tl-unx.tar.gz "${base}/install-tl-unx.tar.gz" || continue; \
|
||||
if sha512sum -c install-tl-unx.tar.gz.sha512; then TL_REPO="${base}"; break; fi; \
|
||||
echo "attempt ${attempt}: checksum mismatch from ${base}, retrying"; \
|
||||
done; \
|
||||
test -n "${TL_REPO:-}"; \
|
||||
echo "using mirror: ${TL_REPO}"; \
|
||||
tar -xzf install-tl-unx.tar.gz; \
|
||||
cd install-tl-*/; \
|
||||
{ \
|
||||
echo "selected_scheme scheme-full"; \
|
||||
echo "TEXDIR ${TEXLIVE_INSTALL_TEXDIR}"; \
|
||||
echo "TEXMFCONFIG /home/${USERNAME}/.texlive${TEXLIVE_YEAR}/texmf-config"; \
|
||||
echo "TEXMFVAR /home/${USERNAME}/.texlive${TEXLIVE_YEAR}/texmf-var"; \
|
||||
echo "TEXMFHOME /home/${USERNAME}/texmf"; \
|
||||
echo "instopt_adjustpath 1"; \
|
||||
echo "tlpdbopt_autobackup 0"; \
|
||||
echo "tlpdbopt_install_docfiles ${INSTALL_DOCFILES}"; \
|
||||
echo "tlpdbopt_install_srcfiles ${INSTALL_SRCFILES}"; \
|
||||
} > texlive.profile; \
|
||||
perl ./install-tl --profile=texlive.profile --no-interaction --repository "${TL_REPO}"; \
|
||||
cd /tmp; rm -rf install-tl-*; \
|
||||
ln -s "$(ls -1 "${TEXLIVE_INSTALL_TEXDIR}/bin" | head -n1)" "${TEXLIVE_INSTALL_TEXDIR}/bin/default"; \
|
||||
mkdir -p "/home/${USERNAME}/.texlive${TEXLIVE_YEAR}/texmf-config" \
|
||||
"/home/${USERNAME}/.texlive${TEXLIVE_YEAR}/texmf-var" \
|
||||
"/home/${USERNAME}/texmf"; \
|
||||
chown -R "${USERNAME}:${USERNAME}" "/home/${USERNAME}/.texlive${TEXLIVE_YEAR}" "/home/${USERNAME}/texmf"
|
||||
|
||||
# User-writeable directories for TeX Live and LuaLaTeX
|
||||
ENV TEXMFCONFIG="/home/vscode/.texlive2025/texmf-config"
|
||||
ENV TEXMFVAR="/home/vscode/.texlive2025/texmf-var"
|
||||
ENV LUAOTFLOAD_HOME="/home/vscode/.texlive2025/texmf-var/luatex-cache"
|
||||
ENV LUAOTFLOAD_DB="/home/vscode/.texlive2025/texmf-var/luatex-cache/database.sqlite"
|
||||
# Stable, architecture-independent path to the engines.
|
||||
ENV PATH="${TEXLIVE_INSTALL_TEXDIR}/bin/default:${PATH}"
|
||||
ENV TEXMFCONFIG="/home/${USERNAME}/.texlive${TEXLIVE_YEAR}/texmf-config"
|
||||
ENV TEXMFVAR="/home/${USERNAME}/.texlive${TEXLIVE_YEAR}/texmf-var"
|
||||
ENV TEXMFHOME="/home/${USERNAME}/texmf"
|
||||
|
||||
# Install latexmk
|
||||
RUN sudo tlmgr option autobackup 0 && \
|
||||
sudo tlmgr install latexmk && \
|
||||
sudo tlmgr path add
|
||||
USER $USERNAME
|
||||
|
||||
# Warm the luaotfload font database so the first lualatex run isn't a minutes-long
|
||||
# font scan, and fail the build early if the toolchain is broken.
|
||||
RUN set -eux; \
|
||||
tlmgr --version; \
|
||||
lualatex --version >/dev/null; \
|
||||
biber --version >/dev/null; \
|
||||
latexmk --version >/dev/null; \
|
||||
latexindent --version >/dev/null; \
|
||||
luaotfload-tool --update --quiet
|
||||
|
||||
# Set the working directory back to a neutral location
|
||||
WORKDIR /workspace
|
||||
|
||||
19
.devcontainer/devcontainer-lock.json
Normal file
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"features": {
|
||||
"ghcr.io/khannurien/devcontainer-features/claude-code:1": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "ghcr.io/khannurien/devcontainer-features/claude-code@sha256:17eb69bfd15ff5206c0bff2945935a4349f7423cabee461a0ba2681d52205db9",
|
||||
"integrity": "sha256:17eb69bfd15ff5206c0bff2945935a4349f7423cabee461a0ba2681d52205db9"
|
||||
},
|
||||
"ghcr.io/khannurien/devcontainer-features/opencode:1": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "ghcr.io/khannurien/devcontainer-features/opencode@sha256:8df3f8c98a104ce7e089ba3e8df39e0d3890753c8dc92e03deb54527d30d3574",
|
||||
"integrity": "sha256:8df3f8c98a104ce7e089ba3e8df39e0d3890753c8dc92e03deb54527d30d3574"
|
||||
},
|
||||
"ghcr.io/khannurien/devcontainer-features/rtk:1": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "ghcr.io/khannurien/devcontainer-features/rtk@sha256:4a60b3a1d1b64904de3d856c61cdf7e5943e3c74d114609787dc88d9db7c788f",
|
||||
"integrity": "sha256:4a60b3a1d1b64904de3d856c61cdf7e5943e3c74d114609787dc88d9db7c788f"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,9 +1,16 @@
|
||||
{
|
||||
"name": "LaTeX Dev Container",
|
||||
"build": {
|
||||
"dockerfile": "Dockerfile",
|
||||
"context": ".."
|
||||
},
|
||||
"image": "ghcr.io/khannurien/latex-devcontainer:2026.08",
|
||||
// "build": {
|
||||
// "dockerfile": "Dockerfile",
|
||||
// "context": ".."
|
||||
// },
|
||||
"remoteUser": "vscode",
|
||||
"updateRemoteUserUID": true,
|
||||
// Local extensions, packaged and installed by the script below:
|
||||
// .devcontainer/overleaf-keymap -- Overleaf's keyboard shortcuts
|
||||
// .devcontainer/paste-figure -- Ctrl+V an image -> figure environment
|
||||
"postCreateCommand": "bash .devcontainer/install-extensions.sh",
|
||||
"customizations": {
|
||||
"vscode": {
|
||||
"settings": {
|
||||
@@ -26,7 +33,18 @@
|
||||
"latex-workshop.intellisense.package.enabled": true,
|
||||
"latex-workshop.intellisense.unimathsymbols.enabled": true,
|
||||
"latex-workshop.intellisense.citation.backend": "biblatex",
|
||||
// Linting and formatting (chktex and latexindent ship with TeX Live)
|
||||
"latex-workshop.chktex.enabled": true,
|
||||
"latex-workshop.chktex.run": "onSave",
|
||||
"latex-workshop.formatting.latex": "latexindent",
|
||||
"[latex]": {
|
||||
"editor.formatOnSave": true
|
||||
},
|
||||
"latex-workshop.latex.outDir": "build",
|
||||
"latex-workshop.latex.clean.subfolder.enabled": true,
|
||||
"search.exclude": {
|
||||
"**/build": true
|
||||
},
|
||||
"latex-workshop.latex.autoBuild.run": "onFileChange",
|
||||
"latex-workshop.latex.autoBuild.interval": 3000,
|
||||
"latex-workshop.synctex.afterBuild.enabled": true,
|
||||
@@ -107,15 +125,17 @@
|
||||
]
|
||||
}
|
||||
],
|
||||
"latex-workshop.latex.recipe.default": "lastUsed"
|
||||
"latex-workshop.latex.recipe.default": "lastUsed",
|
||||
// Overleaf-style image paste, from .devcontainer/paste-figure. Ctrl+V (or a
|
||||
// drag & drop) of an image into a .tex file writes it here and inserts a
|
||||
// figure environment around it; edit "pasteFigure.template" to change the
|
||||
// block that gets inserted.
|
||||
"pasteFigure.directory": "img"
|
||||
},
|
||||
"extensions": [
|
||||
"james-yu.latex-workshop",
|
||||
"wayou.vscode-todo-highlight"
|
||||
"jgclark.vscode-todo-highlight"
|
||||
]
|
||||
}
|
||||
},
|
||||
"remoteUser": "vscode",
|
||||
"updateRemoteUserUID": true,
|
||||
"features": {}
|
||||
}
|
||||
}
|
||||
|
||||
103
.devcontainer/install-extensions.sh
Normal file
@@ -0,0 +1,103 @@
|
||||
#!/usr/bin/env bash
|
||||
# Install this project's local VS Code extensions into the container's VS Code server.
|
||||
#
|
||||
# devcontainer.json has no place for keyboard shortcuts or editor behaviour beyond
|
||||
# settings: customizations.vscode only understands "settings" and "extensions", and
|
||||
# keybindings.json is resolved by the VS Code client, not by the server -- so
|
||||
# dropping a file into ~/.vscode-server/data/User/ does nothing. What *does* travel
|
||||
# with the container is an extension. So each directory listed below is packaged as
|
||||
# a .vsix here and installed; edit those directories to change behaviour, this
|
||||
# script only ships them.
|
||||
set -euo pipefail
|
||||
|
||||
here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
extensions=(
|
||||
overleaf-keymap # Overleaf's keyboard shortcuts
|
||||
paste-figure # Ctrl+V an image -> saved to img/ and wrapped in a figure
|
||||
)
|
||||
|
||||
# The Dev Containers extension installs customizations.vscode.extensions around
|
||||
# the same time postCreateCommand fires, and both writes touch extensions.json.
|
||||
# Wait (bounded) for its marker so we don't interleave with it.
|
||||
marker="$HOME/.vscode-server/data/Machine/.installExtensionsMarker"
|
||||
for _ in $(seq 1 60); do
|
||||
[ -e "$marker" ] && break
|
||||
sleep 1
|
||||
done
|
||||
|
||||
# The remote CLI isn't on PATH during postCreateCommand; find the server binary.
|
||||
code_server="$(ls -1t "$HOME"/.vscode-server/bin/*/bin/code-server 2>/dev/null | head -n1 || true)"
|
||||
if [ -z "$code_server" ]; then
|
||||
echo "install-extensions: no VS Code server found, skipping local extensions." >&2
|
||||
exit 0
|
||||
fi
|
||||
|
||||
build="$(mktemp -d)"
|
||||
trap 'rm -rf "$build"' EXIT
|
||||
|
||||
for name in "${extensions[@]}"; do
|
||||
src="${here}/${name}"
|
||||
vsix="${build}/${name}.vsix"
|
||||
|
||||
python3 - "$src" "$vsix" <<'PY'
|
||||
import json, mimetypes, os, sys, zipfile
|
||||
from xml.sax.saxutils import escape
|
||||
|
||||
src, out = sys.argv[1], sys.argv[2]
|
||||
pkg = json.load(open(f"{src}/package.json"))
|
||||
ident, version, publisher = pkg["name"], pkg["version"], pkg["publisher"]
|
||||
kinds = ",".join(pkg.get("extensionKind", ["workspace"]))
|
||||
|
||||
manifest = f"""<?xml version="1.0" encoding="utf-8"?>
|
||||
<PackageManifest Version="2.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2011">
|
||||
<Metadata>
|
||||
<Identity Language="en-US" Id="{ident}" Version="{version}" Publisher="{publisher}" />
|
||||
<DisplayName>{escape(pkg["displayName"])}</DisplayName>
|
||||
<Description xml:space="preserve">{escape(pkg["description"])}</Description>
|
||||
<Tags>{escape(",".join(pkg.get("categories", [])))}</Tags>
|
||||
<Categories>{escape(",".join(pkg.get("categories", [])))}</Categories>
|
||||
<GalleryFlags>Public</GalleryFlags>
|
||||
<Properties>
|
||||
<Property Id="Microsoft.VisualStudio.Code.Engine" Value="{pkg["engines"]["vscode"]}" />
|
||||
<Property Id="Microsoft.VisualStudio.Code.ExtensionKind" Value="{kinds}" />
|
||||
</Properties>
|
||||
</Metadata>
|
||||
<Installation>
|
||||
<InstallationTarget Id="Microsoft.VisualStudio.Code" />
|
||||
</Installation>
|
||||
<Dependencies />
|
||||
<Assets>
|
||||
<Asset Type="Microsoft.VisualStudio.Code.Manifest" Path="extension/package.json" Addressable="true" />
|
||||
</Assets>
|
||||
</PackageManifest>
|
||||
"""
|
||||
|
||||
# Every file of the extension goes in, so extensions can ship code, not just a manifest.
|
||||
files = []
|
||||
for root, _, names in os.walk(src):
|
||||
for name in sorted(names):
|
||||
path = os.path.join(root, name)
|
||||
files.append((path, os.path.relpath(path, src).replace(os.sep, "/")))
|
||||
|
||||
defaults = {"json": "application/json", "js": "application/javascript",
|
||||
"vsixmanifest": "text/xml", "xml": "text/xml"}
|
||||
for path, _ in files:
|
||||
ext = os.path.splitext(path)[1].lstrip(".").lower()
|
||||
if ext and ext not in defaults:
|
||||
defaults[ext] = mimetypes.guess_type(path)[0] or "application/octet-stream"
|
||||
|
||||
content_types = "\n".join(
|
||||
['<?xml version="1.0" encoding="utf-8"?>',
|
||||
'<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">',
|
||||
*[f' <Default Extension="{ext}" ContentType="{ctype}" />' for ext, ctype in sorted(defaults.items())],
|
||||
'</Types>', ''])
|
||||
|
||||
with zipfile.ZipFile(out, "w", zipfile.ZIP_DEFLATED) as z:
|
||||
z.writestr("extension.vsixmanifest", manifest)
|
||||
z.writestr("[Content_Types].xml", content_types)
|
||||
for path, rel in files:
|
||||
z.write(path, f"extension/{rel}")
|
||||
PY
|
||||
|
||||
"$code_server" --install-extension "$vsix" --force
|
||||
done
|
||||
144
.devcontainer/overleaf-keymap/package.json
Normal file
@@ -0,0 +1,144 @@
|
||||
{
|
||||
"name": "overleaf-keymap",
|
||||
"displayName": "Overleaf Keymap",
|
||||
"description": "Makes VS Code's keyboard shortcuts behave like Overleaf's.",
|
||||
"publisher": "local",
|
||||
"version": "1.0.0",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"vscode": "^1.75.0"
|
||||
},
|
||||
"categories": [
|
||||
"Keymaps"
|
||||
],
|
||||
"extensionKind": [
|
||||
"workspace"
|
||||
],
|
||||
"contributes": {
|
||||
"keybindings": [
|
||||
{
|
||||
"//": "Overleaf: Ctrl+B -> \\textbf{...}. Only inside LaTeX files, so Ctrl+B still toggles the sidebar everywhere else.",
|
||||
"key": "ctrl+b",
|
||||
"mac": "cmd+b",
|
||||
"command": "latex-workshop.shortcut.textbf",
|
||||
"when": "editorTextFocus && !editorReadonly && editorLangId =~ /^latex$|^latex-expl3$|^doctex$|^bibtex$|^rsweave$/"
|
||||
},
|
||||
{
|
||||
"//": "Overleaf: Ctrl+I -> \\textit{...}",
|
||||
"key": "ctrl+i",
|
||||
"mac": "cmd+i",
|
||||
"command": "latex-workshop.shortcut.textit",
|
||||
"when": "editorTextFocus && !editorReadonly && editorLangId =~ /^latex$|^latex-expl3$|^doctex$|^bibtex$|^rsweave$/"
|
||||
},
|
||||
{
|
||||
"//": "Overleaf: Ctrl+Enter -> compile. (Ctrl+S also compiles here, via latex-workshop.latex.autoBuild.run = onFileChange.)",
|
||||
"key": "ctrl+enter",
|
||||
"mac": "cmd+enter",
|
||||
"command": "latex-workshop.build",
|
||||
"when": "editorTextFocus && !virtualWorkspace && editorLangId =~ /^latex$|^latex-expl3$|^doctex$|^bibtex$|^rsweave$/"
|
||||
},
|
||||
{
|
||||
"//": "Overleaf: Ctrl+D -> delete current line (VS Code default: add selection to next find match).",
|
||||
"key": "ctrl+d",
|
||||
"mac": "cmd+d",
|
||||
"command": "editor.action.deleteLines",
|
||||
"when": "textInputFocus && !editorReadonly"
|
||||
},
|
||||
{
|
||||
"//": "Overleaf: Ctrl+Shift+D -> duplicate selection (VS Code default: show Run and Debug).",
|
||||
"key": "ctrl+shift+d",
|
||||
"mac": "cmd+shift+d",
|
||||
"command": "editor.action.duplicateSelection",
|
||||
"when": "textInputFocus && !editorReadonly"
|
||||
},
|
||||
{
|
||||
"//": "Overleaf: Ctrl+U -> uppercase the selection (VS Code default: soft undo of cursor motion).",
|
||||
"key": "ctrl+u",
|
||||
"mac": "ctrl+u",
|
||||
"command": "editor.action.transformToUppercase",
|
||||
"when": "editorTextFocus && !editorReadonly"
|
||||
},
|
||||
{
|
||||
"//": "Overleaf: Ctrl+Shift+U -> lowercase the selection (VS Code default: focus the Output panel).",
|
||||
"key": "ctrl+shift+u",
|
||||
"mac": "ctrl+shift+u",
|
||||
"command": "editor.action.transformToLowercase",
|
||||
"when": "editorTextFocus && !editorReadonly"
|
||||
},
|
||||
{
|
||||
"//": "Overleaf: Ctrl+Shift+L -> go to line number (VS Code default: select all occurrences of selection).",
|
||||
"key": "ctrl+shift+l",
|
||||
"mac": "cmd+shift+l",
|
||||
"command": "workbench.action.gotoLine",
|
||||
"when": "editorTextFocus"
|
||||
},
|
||||
{
|
||||
"//": "Overleaf: Ctrl+G -> find next (VS Code default: go to line).",
|
||||
"key": "ctrl+g",
|
||||
"mac": "cmd+g",
|
||||
"command": "editor.action.nextMatchFindAction",
|
||||
"when": "editorFocus"
|
||||
},
|
||||
{
|
||||
"//": "Overleaf: Ctrl+Shift+G -> find previous (VS Code default: show Source Control).",
|
||||
"key": "ctrl+shift+g",
|
||||
"mac": "cmd+shift+g",
|
||||
"command": "editor.action.previousMatchFindAction",
|
||||
"when": "editorFocus"
|
||||
},
|
||||
{
|
||||
"//": "Overleaf: F2 -> toggle fold (VS Code default: rename symbol, which LaTeX has no use for).",
|
||||
"key": "f2",
|
||||
"mac": "f2",
|
||||
"command": "editor.toggleFold",
|
||||
"when": "editorTextFocus && editorLangId =~ /^latex$|^latex-expl3$|^doctex$|^bibtex$|^rsweave$/"
|
||||
},
|
||||
{
|
||||
"//": "Overleaf: Alt+Shift+0 -> unfold all",
|
||||
"key": "alt+shift+0",
|
||||
"mac": "cmd+alt+0",
|
||||
"command": "editor.unfoldAll",
|
||||
"when": "editorTextFocus"
|
||||
},
|
||||
{
|
||||
"//": "Overleaf: Alt+Shift+1 -> fold all",
|
||||
"key": "alt+shift+1",
|
||||
"mac": "cmd+alt+1",
|
||||
"command": "editor.foldAll",
|
||||
"when": "editorTextFocus"
|
||||
},
|
||||
{
|
||||
"//": "Overleaf: Alt+Left/Right -> start/end of line (VS Code default: navigate back/forward, still on Ctrl+Alt+- and Ctrl+Shift+-).",
|
||||
"key": "alt+left",
|
||||
"mac": "ctrl+a",
|
||||
"command": "cursorHome",
|
||||
"when": "editorTextFocus"
|
||||
},
|
||||
{
|
||||
"key": "alt+right",
|
||||
"mac": "ctrl+e",
|
||||
"command": "cursorEnd",
|
||||
"when": "editorTextFocus"
|
||||
},
|
||||
{
|
||||
"key": "alt+shift+left",
|
||||
"mac": "ctrl+shift+a",
|
||||
"command": "cursorHomeSelect",
|
||||
"when": "editorTextFocus"
|
||||
},
|
||||
{
|
||||
"key": "alt+shift+right",
|
||||
"mac": "ctrl+shift+e",
|
||||
"command": "cursorEndSelect",
|
||||
"when": "editorTextFocus"
|
||||
},
|
||||
{
|
||||
"//": "Overleaf: Alt+Space -> open autocomplete (Ctrl+Space is already the VS Code default).",
|
||||
"key": "alt+space",
|
||||
"mac": "alt+space",
|
||||
"command": "editor.action.triggerSuggest",
|
||||
"when": "editorTextFocus && !editorReadonly && !suggestWidgetVisible"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
196
.devcontainer/paste-figure/extension.js
Normal file
@@ -0,0 +1,196 @@
|
||||
// Overleaf-style image paste for LaTeX: Ctrl+V an image into a .tex file and it
|
||||
// is written into the project and replaced by a \begin{figure} block.
|
||||
//
|
||||
// This has to be a paste *provider* rather than one of the usual "paste image"
|
||||
// extensions (mushan.vscode-paste-image and friends): those shell out to
|
||||
// xclip/pbpaste/powershell on whichever machine runs the extension host, which
|
||||
// for a dev container is the container -- where there is no clipboard. VS Code
|
||||
// serialises the clipboard payload from the client to the provider instead, so
|
||||
// DataTransferItem.asFile() gives us the bytes the user copied on their desktop.
|
||||
|
||||
const vscode = require('vscode')
|
||||
const path = require('path')
|
||||
|
||||
const LANGUAGES = ['latex', 'latex-expl3', 'rsweave', 'doctex']
|
||||
|
||||
// What \includegraphics can actually consume, for payloads that carry a filename.
|
||||
const IMAGE_EXTENSIONS = new Set([
|
||||
'.png', '.jpg', '.jpeg', '.gif', '.webp', '.bmp', '.tif', '.tiff', '.svg', '.pdf', '.eps'
|
||||
])
|
||||
|
||||
// Clipboard bitmaps arrive with a mime type and a placeholder name, so the
|
||||
// extension has to come from the mime instead.
|
||||
const IMAGE_MIMES = new Map([
|
||||
['image/png', '.png'],
|
||||
['image/jpeg', '.jpg'],
|
||||
['image/jpg', '.jpg'],
|
||||
['image/gif', '.gif'],
|
||||
['image/webp', '.webp'],
|
||||
['image/bmp', '.bmp'],
|
||||
['image/tiff', '.tif'],
|
||||
['image/svg+xml', '.svg'],
|
||||
['application/pdf', '.pdf']
|
||||
])
|
||||
|
||||
// 'files' matches any DataTransferItem backed by a file (drag & drop, or a copy
|
||||
// from the OS file manager); the explicit mimes cover clipboard bitmaps.
|
||||
const MIME_HINTS = ['files', ...IMAGE_MIMES.keys()]
|
||||
|
||||
// Names the OS invents for a clipboard bitmap; not worth keeping.
|
||||
const GENERIC_NAMES = new Set(['', 'image', 'images', 'clipboard', 'unnamed', 'untitled', 'download'])
|
||||
|
||||
function settings(document) {
|
||||
return vscode.workspace.getConfiguration('pasteFigure', document)
|
||||
}
|
||||
|
||||
/** First image-ish file in the payload, or undefined -- in which case we let VS Code paste normally. */
|
||||
function findImage(dataTransfer) {
|
||||
const candidates = []
|
||||
dataTransfer.forEach((item, mime) => {
|
||||
const file = item.asFile()
|
||||
if (!file) {
|
||||
return
|
||||
}
|
||||
const named = path.extname(file.name || '').toLowerCase()
|
||||
if (IMAGE_EXTENSIONS.has(named)) {
|
||||
candidates.push({ file, ext: named })
|
||||
return
|
||||
}
|
||||
const byMime = IMAGE_MIMES.get(mime.toLowerCase().split(';')[0].trim())
|
||||
if (byMime) {
|
||||
candidates.push({ file, ext: byMime })
|
||||
}
|
||||
})
|
||||
return candidates[0]
|
||||
}
|
||||
|
||||
function timestamp() {
|
||||
const d = new Date()
|
||||
const pad = n => String(n).padStart(2, '0')
|
||||
return `${d.getFullYear()}${pad(d.getMonth() + 1)}${pad(d.getDate())}-${pad(d.getHours())}${pad(d.getMinutes())}${pad(d.getSeconds())}`
|
||||
}
|
||||
|
||||
/** A filename LaTeX will not choke on: no spaces, no accents, no braces. */
|
||||
function slugify(raw) {
|
||||
return raw
|
||||
.normalize('NFKD')
|
||||
.replace(/[\u0300-\u036f]/g, '') // drop the accents NFKD just split off
|
||||
.toLowerCase()
|
||||
.replace(/[^a-z0-9]+/g, '-')
|
||||
.replace(/^-+|-+$/g, '')
|
||||
}
|
||||
|
||||
function defaultName(file) {
|
||||
const slug = slugify(path.basename(file.name || '', path.extname(file.name || '')))
|
||||
return GENERIC_NAMES.has(slug) ? `pasted-${timestamp()}` : slug
|
||||
}
|
||||
|
||||
/**
|
||||
* Ask for the image name, pre-filled with the generated one so Enter keeps it.
|
||||
* Whatever is typed goes through the same slugify; an extension typed out of habit
|
||||
* is dropped since the real one comes from the payload. undefined means Escape.
|
||||
*/
|
||||
async function askName(file, ext, directory, token) {
|
||||
const fallback = defaultName(file)
|
||||
const resolve = input => {
|
||||
const typed = input.trim()
|
||||
const stem = path.extname(typed).toLowerCase() === ext ? typed.slice(0, -ext.length) : typed
|
||||
return slugify(stem) || fallback
|
||||
}
|
||||
const shown = vscode.workspace.asRelativePath(directory, false)
|
||||
const input = await vscode.window.showInputBox({
|
||||
title: 'Pasted image name',
|
||||
prompt: 'Enter keeps the suggested name, Escape cancels the paste.',
|
||||
value: fallback,
|
||||
validateInput: input => ({
|
||||
message: `Saved as ${shown}/${resolve(input)}${ext}`,
|
||||
severity: vscode.InputBoxValidationSeverity.Info
|
||||
})
|
||||
}, token)
|
||||
return input === undefined ? undefined : resolve(input)
|
||||
}
|
||||
|
||||
/**
|
||||
* Where images live and what \includegraphics paths are relative to. Both are the
|
||||
* workspace folder when there is one -- latexmk runs from there, and the existing
|
||||
* slides use workspace-relative paths like img/logos.png.
|
||||
*/
|
||||
function locate(document) {
|
||||
const folder = vscode.workspace.getWorkspaceFolder(document.uri)
|
||||
const root = folder ? folder.uri : vscode.Uri.joinPath(document.uri, '..')
|
||||
const relative = settings(document).get('directory') || 'img'
|
||||
return { root, directory: vscode.Uri.joinPath(root, ...relative.split('/').filter(Boolean)) }
|
||||
}
|
||||
|
||||
async function freeUri(directory, base, ext) {
|
||||
for (let i = 0; i < 1000; i++) {
|
||||
const uri = vscode.Uri.joinPath(directory, i === 0 ? `${base}${ext}` : `${base}-${i}${ext}`)
|
||||
try {
|
||||
await vscode.workspace.fs.stat(uri)
|
||||
} catch {
|
||||
return uri
|
||||
}
|
||||
}
|
||||
throw new Error(`too many files named ${base}${ext} in ${directory.fsPath}`)
|
||||
}
|
||||
|
||||
/** Save the image next to the document and return the figure snippet to insert. */
|
||||
async function insertFigure(document, dataTransfer, token) {
|
||||
const image = findImage(dataTransfer)
|
||||
if (!image) {
|
||||
return undefined
|
||||
}
|
||||
|
||||
const data = await image.file.data()
|
||||
if (token.isCancellationRequested || data.length === 0) {
|
||||
return undefined
|
||||
}
|
||||
|
||||
const { root, directory } = locate(document)
|
||||
const name = await askName(image.file, image.ext, directory, token)
|
||||
if (name === undefined || token.isCancellationRequested) {
|
||||
return undefined
|
||||
}
|
||||
|
||||
await vscode.workspace.fs.createDirectory(directory)
|
||||
const target = await freeUri(directory, name, image.ext)
|
||||
await vscode.workspace.fs.writeFile(target, data)
|
||||
|
||||
const relative = path.relative(root.fsPath, target.fsPath).split(path.sep).join('/')
|
||||
const template = settings(document).get('template')
|
||||
const body = Array.isArray(template) ? template.join('\n') : String(template)
|
||||
// $ and \ are snippet syntax; the path is slugified but the directory may not be.
|
||||
return new vscode.SnippetString(body.replace(/\$IMAGE/g, relative.replace(/[$\\}]/g, '\\$&')))
|
||||
}
|
||||
|
||||
/** Failures must not swallow the paste: report, then fall back to a normal paste. */
|
||||
async function trySnippet(document, dataTransfer, token) {
|
||||
try {
|
||||
return await insertFigure(document, dataTransfer, token)
|
||||
} catch (err) {
|
||||
vscode.window.showErrorMessage(`Could not insert the pasted image: ${err instanceof Error ? err.message : String(err)}`)
|
||||
return undefined
|
||||
}
|
||||
}
|
||||
|
||||
function activate(context) {
|
||||
const selector = LANGUAGES.map(language => ({ language, scheme: 'file' }))
|
||||
const kind = vscode.DocumentPasteEditKind?.Empty?.append('latex', 'figure')
|
||||
|
||||
context.subscriptions.push(vscode.languages.registerDocumentPasteEditProvider(selector, {
|
||||
async provideDocumentPasteEdits(document, _ranges, dataTransfer, _context, token) {
|
||||
const snippet = await trySnippet(document, dataTransfer, token)
|
||||
return snippet ? [new vscode.DocumentPasteEdit(snippet, 'Insert figure', kind)] : undefined
|
||||
}
|
||||
}, { providedPasteEditKinds: kind ? [kind] : [], pasteMimeTypes: MIME_HINTS }))
|
||||
|
||||
// Same handling for images dragged into the editor.
|
||||
context.subscriptions.push(vscode.languages.registerDocumentDropEditProvider(selector, {
|
||||
async provideDocumentDropEdits(document, _position, dataTransfer, token) {
|
||||
const snippet = await trySnippet(document, dataTransfer, token)
|
||||
return snippet ? new vscode.DocumentDropEdit(snippet, 'Insert figure', kind) : undefined
|
||||
}
|
||||
}, { providedDropEditKinds: kind ? [kind] : [], dropMimeTypes: MIME_HINTS }))
|
||||
}
|
||||
|
||||
module.exports = { activate, deactivate() {} }
|
||||
59
.devcontainer/paste-figure/package.json
Normal file
@@ -0,0 +1,59 @@
|
||||
{
|
||||
"name": "latex-paste-figure",
|
||||
"displayName": "LaTeX Paste Figure",
|
||||
"description": "Overleaf-style Ctrl+V: pasting an image into a .tex file saves it and inserts a figure environment.",
|
||||
"publisher": "local",
|
||||
"version": "1.1.0",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"vscode": "^1.97.0"
|
||||
},
|
||||
"categories": [
|
||||
"Other"
|
||||
],
|
||||
"//": "Must run in the container: the provider writes the image into the workspace.",
|
||||
"extensionKind": [
|
||||
"workspace"
|
||||
],
|
||||
"capabilities": {
|
||||
"untrustedWorkspaces": {
|
||||
"supported": true
|
||||
}
|
||||
},
|
||||
"main": "./extension.js",
|
||||
"activationEvents": [
|
||||
"onLanguage:latex",
|
||||
"onLanguage:latex-expl3",
|
||||
"onLanguage:rsweave",
|
||||
"onLanguage:doctex"
|
||||
],
|
||||
"contributes": {
|
||||
"configuration": {
|
||||
"title": "LaTeX Paste Figure",
|
||||
"properties": {
|
||||
"pasteFigure.directory": {
|
||||
"type": "string",
|
||||
"default": "img",
|
||||
"scope": "resource",
|
||||
"markdownDescription": "Folder the pasted image is written to, relative to the workspace root. Created on demand."
|
||||
},
|
||||
"pasteFigure.template": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"scope": "resource",
|
||||
"default": [
|
||||
"\\begin{figure}",
|
||||
"\t\\centering",
|
||||
"\t\\includegraphics[width=${1:0.8\\linewidth}]{$IMAGE}",
|
||||
"\t\\caption{${2:Enter Caption}}",
|
||||
"\t\\label{fig:${3:enter-label}}",
|
||||
"\\end{figure}"
|
||||
],
|
||||
"markdownDescription": "Lines inserted at the cursor, in [snippet syntax](https://code.visualstudio.com/docs/editor/userdefinedsnippets#_snippet-syntax). `$IMAGE` is replaced by the path of the saved image; `${1:...}` are the tab stops you cycle through with `Tab`."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
3
.gitignore
vendored
@@ -299,3 +299,6 @@ TSWLatexianTemp*
|
||||
# option is specified. Footnotes are the stored in a file with suffix Notes.bib.
|
||||
# Uncomment the next line to have this generated file ignored.
|
||||
#*Notes.bib
|
||||
|
||||
# artifacts directory
|
||||
build/
|
||||
|
||||
1
.vscode/ltex.dictionary.fr.txt
vendored
Normal file
@@ -0,0 +1 @@
|
||||
cyberphysiques
|
||||
33
api.drawio
Normal file
@@ -0,0 +1,33 @@
|
||||
<mxfile host="Electron" pages="2">
|
||||
<diagram id="y0CFL4PUPrZhiSV3peWh" name="Protocole">
|
||||
<mxGraphModel dx="2054" dy="1203" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
<diagram name="Interface" id="H7xYqO0Dmv1XXnkQZzNF">
|
||||
<mxGraphModel dx="1414" dy="963" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="1mupZNotRLIWGnVzbSHi-1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;" value="API JavaScript<div>robot.js</div>" vertex="1">
|
||||
<mxGeometry height="60" width="120" x="160" y="530" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="1mupZNotRLIWGnVzbSHi-2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;" value="API C++<div>Robot.h</div>" vertex="1">
|
||||
<mxGeometry height="60" width="120" x="640" y="530" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="1mupZNotRLIWGnVzbSHi-3" parent="1" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;" value="Utilisateur 1" vertex="1">
|
||||
<mxGeometry height="60" width="30" x="205" y="380" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="1mupZNotRLIWGnVzbSHi-4" parent="1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fontFamily=Lucida Console;fillColor=#000000;fontColor=#FFFFFF;fontSize=13;" value="1" vertex="1">
|
||||
<mxGeometry height="25" width="25" x="260" y="390" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="1mupZNotRLIWGnVzbSHi-5" parent="1" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;" value="Utilisateur 2" vertex="1">
|
||||
<mxGeometry height="60" width="30" x="600" y="130" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
139
architecture.drawio
Normal file
@@ -0,0 +1,139 @@
|
||||
<mxfile host="Electron" pages="3">
|
||||
<diagram name="Page-1" id="H24PdPBp2qWAAXzihOo2">
|
||||
<mxGraphModel dx="2054" dy="1249" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="TfgVownXPHUy0RqdUbZx-1" parent="1" style="rounded=0;whiteSpace=wrap;html=1;verticalAlign=bottom;labelPosition=center;verticalLabelPosition=top;align=center;fontStyle=1;fontFamily=Lucida Console;fontSize=18;" value="Microcontrôleur" vertex="1">
|
||||
<mxGeometry height="330" width="480" x="120" y="350" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TfgVownXPHUy0RqdUbZx-4" edge="1" parent="1" source="TfgVownXPHUy0RqdUbZx-2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.25;entryY=1;entryDx=0;entryDy=0;fontFamily=Lucida Console;fontSize=18;" target="TfgVownXPHUy0RqdUbZx-1">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TfgVownXPHUy0RqdUbZx-2" parent="1" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;fontFamily=Lucida Console;fontSize=18;" value="Capteurs" vertex="1">
|
||||
<mxGeometry height="60" width="180" x="150" y="740" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TfgVownXPHUy0RqdUbZx-5" edge="1" parent="1" source="TfgVownXPHUy0RqdUbZx-3" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.75;entryY=1;entryDx=0;entryDy=0;fontFamily=Lucida Console;startArrow=classic;startFill=1;endArrow=none;endFill=0;fontSize=18;" target="TfgVownXPHUy0RqdUbZx-1">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TfgVownXPHUy0RqdUbZx-3" parent="1" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;fontFamily=Lucida Console;fontSize=18;" value="Actionneurs" vertex="1">
|
||||
<mxGeometry height="60" width="180" x="390" y="740" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TfgVownXPHUy0RqdUbZx-14" edge="1" parent="1" source="TfgVownXPHUy0RqdUbZx-6" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;startArrow=classic;startFill=1;fontFamily=Lucida Console;fontSize=18;" target="TfgVownXPHUy0RqdUbZx-11">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TfgVownXPHUy0RqdUbZx-19" edge="1" parent="1" source="TfgVownXPHUy0RqdUbZx-6" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;dashed=1;endArrow=none;endFill=0;fontSize=18;" target="TfgVownXPHUy0RqdUbZx-15">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TfgVownXPHUy0RqdUbZx-6" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Lucida Console;fontSize=18;" value="CPU" vertex="1">
|
||||
<mxGeometry height="60" width="120" x="165" y="390" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TfgVownXPHUy0RqdUbZx-11" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Lucida Console;fontSize=18;" value="Flash / RAM" vertex="1">
|
||||
<mxGeometry height="60" width="120" x="435" y="390" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TfgVownXPHUy0RqdUbZx-12" edge="1" parent="1" style="endArrow=none;html=1;rounded=0;exitX=0.083;exitY=0.485;exitDx=0;exitDy=0;exitPerimeter=0;fontFamily=Lucida Console;fontSize=18;" value="Bus">
|
||||
<mxGeometry height="50" relative="1" width="50" as="geometry">
|
||||
<mxPoint x="174.92000000000016" y="499.54999999999995" as="sourcePoint" />
|
||||
<mxPoint x="545.08" y="499.5" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="TfgVownXPHUy0RqdUbZx-13" edge="1" parent="1" style="endArrow=none;html=1;rounded=0;exitX=0.083;exitY=0.485;exitDx=0;exitDy=0;exitPerimeter=0;fontFamily=Lucida Console;fontSize=18;" value="">
|
||||
<mxGeometry height="50" relative="1" width="50" as="geometry">
|
||||
<mxPoint x="175.08" y="509.5" as="sourcePoint" />
|
||||
<mxPoint x="545.08" y="509.5" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="TfgVownXPHUy0RqdUbZx-15" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Lucida Console;fontSize=18;" value="GPIO" vertex="1">
|
||||
<mxGeometry height="80" width="90" x="180" y="560" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TfgVownXPHUy0RqdUbZx-16" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Lucida Console;fontSize=18;" value="PWM" vertex="1">
|
||||
<mxGeometry height="80" width="90" x="270" y="560" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TfgVownXPHUy0RqdUbZx-17" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Lucida Console;fontSize=18;" value="ADC" vertex="1">
|
||||
<mxGeometry height="80" width="90" x="360" y="560" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TfgVownXPHUy0RqdUbZx-18" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Lucida Console;fontSize=18;" value="UART<div>I²C</div><div>SPI</div>" vertex="1">
|
||||
<mxGeometry height="80" width="90" x="450" y="560" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
<diagram id="NPh7eyBVKTpPlYXxW1ib" name="Page-2">
|
||||
<mxGraphModel dx="2054" dy="1204" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="eCsRcLpa0CxYh5-5eHXg-5" edge="1" parent="1" source="eCsRcLpa0CxYh5-5eHXg-1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;startArrow=classic;startFill=1;" target="eCsRcLpa0CxYh5-5eHXg-2">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="eCsRcLpa0CxYh5-5eHXg-1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fontFamily=Lucida Console;fontSize=14;fillColor=#d5e8d4;strokeColor=#82b366;" value="Utilisateur" vertex="1">
|
||||
<mxGeometry height="60" width="120" x="354" y="440" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="eCsRcLpa0CxYh5-5eHXg-6" edge="1" parent="1" source="eCsRcLpa0CxYh5-5eHXg-2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;startArrow=classic;startFill=1;" target="eCsRcLpa0CxYh5-5eHXg-3">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="eCsRcLpa0CxYh5-5eHXg-2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fontFamily=Lucida Console;fontSize=14;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="Applications" vertex="1">
|
||||
<mxGeometry height="60" width="120" x="354" y="530" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="eCsRcLpa0CxYh5-5eHXg-7" edge="1" parent="1" source="eCsRcLpa0CxYh5-5eHXg-3" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;startArrow=classic;startFill=1;" target="eCsRcLpa0CxYh5-5eHXg-4">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="eCsRcLpa0CxYh5-5eHXg-3" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fontFamily=Lucida Console;fontSize=14;" value="Système d'exploitation" vertex="1">
|
||||
<mxGeometry height="60" width="120" x="354" y="620" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="eCsRcLpa0CxYh5-5eHXg-4" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fontFamily=Lucida Console;fontSize=14;fillColor=#f8cecc;strokeColor=#b85450;" value="Matériel" vertex="1">
|
||||
<mxGeometry height="60" width="120" x="354" y="710" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
<diagram name="Copie de Page-2" id="qSMlDmqpKOs5Qo3T-fwt">
|
||||
<mxGraphModel dx="2054" dy="1204" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="Bj1x88DmsSi_koGnZvfM-0" />
|
||||
<mxCell id="Bj1x88DmsSi_koGnZvfM-1" parent="Bj1x88DmsSi_koGnZvfM-0" />
|
||||
<mxCell id="Bj1x88DmsSi_koGnZvfM-2" edge="1" parent="Bj1x88DmsSi_koGnZvfM-1" source="Bj1x88DmsSi_koGnZvfM-3" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;startArrow=classic;startFill=1;fontFamily=Lucida Console;" target="Bj1x88DmsSi_koGnZvfM-5">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Bj1x88DmsSi_koGnZvfM-3" parent="Bj1x88DmsSi_koGnZvfM-1" style="rounded=1;whiteSpace=wrap;html=1;fontFamily=Lucida Console;fontSize=14;fillColor=#d5e8d4;strokeColor=#82b366;" value="Utilisateur" vertex="1">
|
||||
<mxGeometry height="60" width="120" x="354" y="440" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Bj1x88DmsSi_koGnZvfM-4" edge="1" parent="Bj1x88DmsSi_koGnZvfM-1" source="Bj1x88DmsSi_koGnZvfM-5" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;startArrow=classic;startFill=1;fontFamily=Lucida Console;" target="Bj1x88DmsSi_koGnZvfM-7">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="436" y="590" as="sourcePoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="Bj1x88DmsSi_koGnZvfM-5" parent="Bj1x88DmsSi_koGnZvfM-1" style="rounded=1;whiteSpace=wrap;html=1;fontFamily=Lucida Console;fontSize=14;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="Applications" vertex="1">
|
||||
<mxGeometry height="60" width="120" x="354" y="530" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Bj1x88DmsSi_koGnZvfM-6" edge="1" parent="Bj1x88DmsSi_koGnZvfM-1" source="Bj1x88DmsSi_koGnZvfM-7" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;startArrow=classic;startFill=1;fontFamily=Lucida Console;" target="Bj1x88DmsSi_koGnZvfM-8">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Bj1x88DmsSi_koGnZvfM-7" parent="Bj1x88DmsSi_koGnZvfM-1" style="rounded=1;whiteSpace=wrap;html=1;fontFamily=Lucida Console;fontSize=14;" value="" vertex="1">
|
||||
<mxGeometry height="100" width="396" x="216" y="620" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Bj1x88DmsSi_koGnZvfM-8" parent="Bj1x88DmsSi_koGnZvfM-1" style="rounded=1;whiteSpace=wrap;html=1;fontFamily=Lucida Console;fontSize=14;fillColor=#f8cecc;strokeColor=#b85450;" value="Matériel" vertex="1">
|
||||
<mxGeometry height="60" width="120" x="354" y="750" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="M2oPwsjC-JQn1axJBlEC-0" parent="Bj1x88DmsSi_koGnZvfM-1" style="rounded=1;whiteSpace=wrap;html=1;fontFamily=Lucida Console;" value="Ordonnanceur" vertex="1">
|
||||
<mxGeometry height="30" width="120" x="222" y="630" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="M2oPwsjC-JQn1axJBlEC-1" parent="Bj1x88DmsSi_koGnZvfM-1" style="rounded=1;whiteSpace=wrap;html=1;fontFamily=Lucida Console;" value="Pilotes" vertex="1">
|
||||
<mxGeometry height="30" width="120" x="352" y="630" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="M2oPwsjC-JQn1axJBlEC-2" parent="Bj1x88DmsSi_koGnZvfM-1" style="rounded=1;whiteSpace=wrap;html=1;fontFamily=Lucida Console;" value="Mémoire virtuelle" vertex="1">
|
||||
<mxGeometry height="30" width="120" x="482" y="630" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="M2oPwsjC-JQn1axJBlEC-3" parent="Bj1x88DmsSi_koGnZvfM-1" style="rounded=1;whiteSpace=wrap;html=1;fontFamily=Lucida Console;" value="Réseau" vertex="1">
|
||||
<mxGeometry height="30" width="120" x="222" y="680" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="M2oPwsjC-JQn1axJBlEC-4" parent="Bj1x88DmsSi_koGnZvfM-1" style="rounded=1;whiteSpace=wrap;html=1;fontFamily=Lucida Console;" value="Système de fichiers" vertex="1">
|
||||
<mxGeometry height="30" width="120" x="352" y="680" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="M2oPwsjC-JQn1axJBlEC-5" parent="Bj1x88DmsSi_koGnZvfM-1" style="rounded=1;whiteSpace=wrap;html=1;fontFamily=Lucida Console;fillColor=#e1d5e7;strokeColor=#9673a6;" value="Interface unifiée" vertex="1">
|
||||
<mxGeometry height="30" width="120" x="482" y="680" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
@@ -19,6 +19,102 @@
|
||||
|
||||
\refsection{0}
|
||||
\datalist[entry]{nty/global//global/global/global}
|
||||
\entry{barrProgrammingEmbeddedSystems2006}{book}{}{}
|
||||
\name{author}{3}{}{%
|
||||
{{hash=1f590f436d602e75c03b0fa9947edc3c}{%
|
||||
family={Barr},
|
||||
familyi={B\bibinitperiod},
|
||||
given={Michael},
|
||||
giveni={M\bibinitperiod}}}%
|
||||
{{hash=bd484e4aca6f877f72c70a316e5125ff}{%
|
||||
family={Massa},
|
||||
familyi={M\bibinitperiod},
|
||||
given={Anthony\bibnamedelima J.},
|
||||
giveni={A\bibinitperiod\bibinitdelim J\bibinitperiod}}}%
|
||||
{{hash=1f590f436d602e75c03b0fa9947edc3c}{%
|
||||
family={Barr},
|
||||
familyi={B\bibinitperiod},
|
||||
given={Michael},
|
||||
giveni={M\bibinitperiod}}}%
|
||||
}
|
||||
\list{location}{1}{%
|
||||
{Beijing ; Sebastopol}%
|
||||
}
|
||||
\list{publisher}{1}{%
|
||||
{O'Reilly}%
|
||||
}
|
||||
\strng{namehash}{0a26d209ca1cae7c5ec3bb9d00259019}
|
||||
\strng{fullhash}{0a26d209ca1cae7c5ec3bb9d00259019}
|
||||
\strng{fullhashraw}{0a26d209ca1cae7c5ec3bb9d00259019}
|
||||
\strng{bibnamehash}{0a26d209ca1cae7c5ec3bb9d00259019}
|
||||
\strng{authorbibnamehash}{0a26d209ca1cae7c5ec3bb9d00259019}
|
||||
\strng{authornamehash}{0a26d209ca1cae7c5ec3bb9d00259019}
|
||||
\strng{authorfullhash}{0a26d209ca1cae7c5ec3bb9d00259019}
|
||||
\strng{authorfullhashraw}{0a26d209ca1cae7c5ec3bb9d00259019}
|
||||
\field{sortinit}{B}
|
||||
\field{sortinithash}{d7095fff47cda75ca2589920aae98399}
|
||||
\field{labelnamesource}{author}
|
||||
\field{labeltitlesource}{shorttitle}
|
||||
\field{edition}{2nd ed}
|
||||
\field{isbn}{978-0-596-00983-0}
|
||||
\field{shorttitle}{Programming Embedded Systems}
|
||||
\field{title}{Programming Embedded Systems: With {{C}} and {{GNU}} Development Tools}
|
||||
\field{year}{2006}
|
||||
\true{nocite}
|
||||
\keyw{C (Computer program language),C++ (Computer program language),Embedded computer systems,Programming}
|
||||
\endentry
|
||||
\entry{hansonArchitecturalApproachAutonomic2004}{inproceedings}{}{}
|
||||
\name{author}{4}{}{%
|
||||
{{hash=4915505c877ffd461c4868a94cb7679e}{%
|
||||
family={Hanson},
|
||||
familyi={H\bibinitperiod},
|
||||
given={James\bibnamedelima E.},
|
||||
giveni={J\bibinitperiod\bibinitdelim E\bibinitperiod}}}%
|
||||
{{hash=4147c55dc56de3d11fe3c4fe16cc86b0}{%
|
||||
family={Whalley},
|
||||
familyi={W\bibinitperiod},
|
||||
given={Ian},
|
||||
giveni={I\bibinitperiod}}}%
|
||||
{{hash=6abf78bc82939db4b1774c03c8c54df3}{%
|
||||
family={Chess},
|
||||
familyi={C\bibinitperiod},
|
||||
given={David\bibnamedelima M.},
|
||||
giveni={D\bibinitperiod\bibinitdelim M\bibinitperiod}}}%
|
||||
{{hash=4561b6ab0ad044c0176daf9d8ad2d79e}{%
|
||||
family={Kephart},
|
||||
familyi={K\bibinitperiod},
|
||||
given={Jeffrey\bibnamedelima O.},
|
||||
giveni={J\bibinitperiod\bibinitdelim O\bibinitperiod}}}%
|
||||
}
|
||||
\list{location}{1}{%
|
||||
{USA}%
|
||||
}
|
||||
\list{publisher}{1}{%
|
||||
{IEEE Computer Society}%
|
||||
}
|
||||
\strng{namehash}{568767d2b19ed559a526df3fd764b238}
|
||||
\strng{fullhash}{c14defffae113d8c7dc0a82e266e9afb}
|
||||
\strng{fullhashraw}{c14defffae113d8c7dc0a82e266e9afb}
|
||||
\strng{bibnamehash}{568767d2b19ed559a526df3fd764b238}
|
||||
\strng{authorbibnamehash}{568767d2b19ed559a526df3fd764b238}
|
||||
\strng{authornamehash}{568767d2b19ed559a526df3fd764b238}
|
||||
\strng{authorfullhash}{c14defffae113d8c7dc0a82e266e9afb}
|
||||
\strng{authorfullhashraw}{c14defffae113d8c7dc0a82e266e9afb}
|
||||
\field{sortinit}{H}
|
||||
\field{sortinithash}{23a3aa7c24e56cfa16945d55545109b5}
|
||||
\field{labelnamesource}{author}
|
||||
\field{labeltitlesource}{title}
|
||||
\field{abstract}{We describe an architectural approach to achieving the goals of autonomic computing. The architecture that we outline describes interfaces and behavioral requirements for individual system components, describes how interactions among components are established, and recommends design patterns that engender the desired system-level properties of self-configuration, self-optimization, self-healing and self-protection. We have validated many of these ideas in two prototype autonomic computing systems.}
|
||||
\field{booktitle}{Proceedings of the {{First International Conference}} on {{Autonomic Computing}}}
|
||||
\field{isbn}{978-0-7695-2114-5}
|
||||
\field{month}{5}
|
||||
\field{series}{{{ICAC}} '04}
|
||||
\field{title}{An {{Architectural Approach}} to {{Autonomic Computing}}}
|
||||
\field{year}{2004}
|
||||
\true{nocite}
|
||||
\field{pages}{2\bibrangedash 9}
|
||||
\range{pages}{8}
|
||||
\endentry
|
||||
\entry{inderwildiImpactIntelligentCyberphysical2020}{article}{}{}
|
||||
\name{author}{4}{}{%
|
||||
{{hash=9f6e3f6f71503f1109985d3b9d96d734}{%
|
||||
@@ -60,12 +156,8 @@
|
||||
\field{langid}{english}
|
||||
\field{number}{3}
|
||||
\field{title}{The Impact of Intelligent Cyber-Physical Systems on the Decarbonization of Energy}
|
||||
\field{urlday}{19}
|
||||
\field{urlmonth}{10}
|
||||
\field{urlyear}{2025}
|
||||
\field{volume}{13}
|
||||
\field{year}{2020}
|
||||
\field{urldateera}{ce}
|
||||
\field{pages}{744\bibrangedash 771}
|
||||
\range{pages}{28}
|
||||
\verb{doi}
|
||||
@@ -103,12 +195,8 @@
|
||||
\field{month}{1}
|
||||
\field{number}{1}
|
||||
\field{title}{The Vision of Autonomic Computing}
|
||||
\field{urlday}{5}
|
||||
\field{urlmonth}{12}
|
||||
\field{urlyear}{2024}
|
||||
\field{volume}{36}
|
||||
\field{year}{2003}
|
||||
\field{urldateera}{ce}
|
||||
\field{pages}{41\bibrangedash 50}
|
||||
\range{pages}{10}
|
||||
\verb{doi}
|
||||
@@ -148,11 +236,7 @@
|
||||
\field{month}{5}
|
||||
\field{shorttitle}{Cyber {{Physical Systems}}}
|
||||
\field{title}{Cyber {{Physical Systems}}: {{Design Challenges}}}
|
||||
\field{urlday}{17}
|
||||
\field{urlmonth}{9}
|
||||
\field{urlyear}{2025}
|
||||
\field{year}{2008}
|
||||
\field{urldateera}{ce}
|
||||
\field{pages}{363\bibrangedash 369}
|
||||
\range{pages}{7}
|
||||
\verb{doi}
|
||||
|
||||
BIN
build/slides.pdf
103
chaine-traitement.drawio
Normal file
@@ -0,0 +1,103 @@
|
||||
<mxfile host="Electron">
|
||||
<diagram name="Page-1" id="7JzDzjip2TuGe_8uaPaL">
|
||||
<mxGraphModel dx="2054" dy="1249" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="bPvS0FeOd_jefKcGD8Kd-8" edge="1" parent="1" source="bPvS0FeOd_jefKcGD8Kd-6" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;curved=1;dashed=1;dashPattern=12 12;fontFamily=Lucida Console;" target="1qu7PkDasCeL9URAl8fn-25">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="bPvS0FeOd_jefKcGD8Kd-6" parent="1" style="rounded=0;whiteSpace=wrap;html=1;dashed=1;fontSize=14;verticalAlign=top;fontFamily=Lucida Console;fontStyle=6" value="Monde" vertex="1">
|
||||
<mxGeometry height="120" width="440" x="200" y="730" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="1qu7PkDasCeL9URAl8fn-15" parent="1" style="rounded=0;whiteSpace=wrap;html=1;dashed=1;fontSize=14;fontFamily=Lucida Console;verticalAlign=bottom;fontStyle=6" value="Robot" vertex="1">
|
||||
<mxGeometry height="320" width="440" x="200" y="400" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="1qu7PkDasCeL9URAl8fn-6" edge="1" parent="1" source="1qu7PkDasCeL9URAl8fn-1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fontSize=18;fontFamily=Lucida Console;" target="1qu7PkDasCeL9URAl8fn-3">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="1qu7PkDasCeL9URAl8fn-1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=18;fontFamily=Lucida Console;fontStyle=1" value="Acquisition" vertex="1">
|
||||
<mxGeometry height="60" width="160" x="220" y="590" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="1qu7PkDasCeL9URAl8fn-8" edge="1" parent="1" source="1qu7PkDasCeL9URAl8fn-2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;fontSize=18;fontFamily=Lucida Console;" target="1qu7PkDasCeL9URAl8fn-13">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="540" y="800" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="1qu7PkDasCeL9URAl8fn-2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=18;fontFamily=Lucida Console;fontStyle=1" value="Communication" vertex="1">
|
||||
<mxGeometry height="60" width="160" x="460" y="590" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="1qu7PkDasCeL9URAl8fn-7" edge="1" parent="1" source="1qu7PkDasCeL9URAl8fn-3" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;fontSize=18;fontFamily=Lucida Console;" target="1qu7PkDasCeL9URAl8fn-2">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="1qu7PkDasCeL9URAl8fn-3" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=18;fontFamily=Lucida Console;fontStyle=1" value="Traitement" vertex="1">
|
||||
<mxGeometry height="60" width="120" x="360" y="440" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="1qu7PkDasCeL9URAl8fn-5" edge="1" parent="1" source="1qu7PkDasCeL9URAl8fn-9" style="endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;fontSize=18;fontFamily=Lucida Console;" target="1qu7PkDasCeL9URAl8fn-1" value="">
|
||||
<mxGeometry height="50" relative="1" width="50" as="geometry">
|
||||
<mxPoint x="300" y="760" as="sourcePoint" />
|
||||
<mxPoint x="180" y="370" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="1qu7PkDasCeL9URAl8fn-9" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=18;fontFamily=Lucida Console;" value="Phénomènes physiques" vertex="1">
|
||||
<mxGeometry height="60" width="120" x="240" y="760" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="1qu7PkDasCeL9URAl8fn-13" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=18;fontFamily=Lucida Console;" value="Messages" vertex="1">
|
||||
<mxGeometry height="60" width="120" x="480" y="760" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="bPvS0FeOd_jefKcGD8Kd-4" edge="1" parent="1" source="1qu7PkDasCeL9URAl8fn-17" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;curved=1;dashed=1;dashPattern=12 12;fontFamily=Lucida Console;" target="1qu7PkDasCeL9URAl8fn-28">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="1qu7PkDasCeL9URAl8fn-17" parent="1" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;fillColor=#f5f5f5;strokeColor=#666666;fontSize=18;fontFamily=Lucida Console;fontColor=#333333;dashed=1;dashPattern=12 12;" value="Information" vertex="1">
|
||||
<mxGeometry height="70" width="140" x="580" y="435" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="bPvS0FeOd_jefKcGD8Kd-2" edge="1" parent="1" source="1qu7PkDasCeL9URAl8fn-18" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;curved=1;dashed=1;dashPattern=12 12;fontFamily=Lucida Console;" target="1qu7PkDasCeL9URAl8fn-26">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="190" y="300" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="1qu7PkDasCeL9URAl8fn-18" parent="1" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;fontSize=18;fontFamily=Lucida Console;fillColor=#f5f5f5;fontColor=#333333;strokeColor=#666666;dashed=1;dashPattern=12 12;" value="Données brutes" vertex="1">
|
||||
<mxGeometry height="70" width="140" x="120" y="435" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="1qu7PkDasCeL9URAl8fn-22" edge="1" parent="1" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;fontSize=18;fontFamily=Lucida Console;" value="">
|
||||
<mxGeometry height="50" relative="1" width="50" as="geometry">
|
||||
<mxPoint x="121" y="660" as="sourcePoint" />
|
||||
<mxPoint x="216" y="621" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="1qu7PkDasCeL9URAl8fn-23" edge="1" parent="1" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;fillColor=#f8cecc;strokeColor=#b85450;fontSize=18;fontFamily=Lucida Console;" value="">
|
||||
<mxGeometry height="50" relative="1" width="50" as="geometry">
|
||||
<mxPoint x="420" y="350" as="sourcePoint" />
|
||||
<mxPoint x="420" y="435" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="1qu7PkDasCeL9URAl8fn-24" edge="1" parent="1" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;fillColor=#f8cecc;strokeColor=#b85450;fontSize=18;fontFamily=Lucida Console;" value="">
|
||||
<mxGeometry height="50" relative="1" width="50" as="geometry">
|
||||
<mxPoint x="712" y="655.42" as="sourcePoint" />
|
||||
<mxPoint x="624" y="616" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="1qu7PkDasCeL9URAl8fn-25" parent="1" style="ellipse;whiteSpace=wrap;html=1;shapeInside=1;fontSize=18;fontFamily=Lucida Console;fillColor=#f5f5f5;fontColor=#333333;strokeColor=#666666;fontStyle=2;dashed=1;dashPattern=12 12;" value="Capteurs" vertex="1">
|
||||
<mxGeometry height="80" width="120" x="10" y="650" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="1qu7PkDasCeL9URAl8fn-26" parent="1" style="ellipse;whiteSpace=wrap;html=1;shapeInside=1;fontSize=18;fontFamily=Lucida Console;fillColor=#f5f5f5;fontColor=#333333;strokeColor=#666666;fontStyle=2;dashed=1;dashPattern=12 12;" value="Microcontrôleurs" vertex="1">
|
||||
<mxGeometry height="80" width="210" x="315" y="260" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="bPvS0FeOd_jefKcGD8Kd-10" edge="1" parent="1" source="1qu7PkDasCeL9URAl8fn-28" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;curved=1;dashed=1;dashPattern=12 12;fontFamily=Lucida Console;" target="bPvS0FeOd_jefKcGD8Kd-6">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="1qu7PkDasCeL9URAl8fn-28" parent="1" style="ellipse;whiteSpace=wrap;html=1;shapeInside=1;fontSize=18;fontFamily=Lucida Console;fillColor=#f5f5f5;fontColor=#333333;strokeColor=#666666;fontStyle=2;dashed=1;dashPattern=12 12;" value="Interfaces" vertex="1">
|
||||
<mxGeometry height="80" width="120" x="700" y="650" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="bPvS0FeOd_jefKcGD8Kd-1" edge="1" parent="1" source="1qu7PkDasCeL9URAl8fn-25" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;entryPerimeter=0;curved=1;dashed=1;dashPattern=12 12;fontFamily=Lucida Console;" target="1qu7PkDasCeL9URAl8fn-18">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="bPvS0FeOd_jefKcGD8Kd-3" edge="1" parent="1" source="1qu7PkDasCeL9URAl8fn-26" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;curved=1;dashed=1;dashPattern=12 12;fontFamily=Lucida Console;" target="1qu7PkDasCeL9URAl8fn-17">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
99
compilation.drawio
Normal file
@@ -0,0 +1,99 @@
|
||||
<mxfile host="Electron">
|
||||
<diagram name="Page-1" id="ax6Bn3PDJctrheuzLOC9">
|
||||
<mxGraphModel dx="2054" dy="1249" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="UncVJlxBDFmlAtaXbHPb-2" parent="1" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;fontSize=18;fontFamily=Lucida Console;verticalAlign=bottom;" value="Sources du robot (C++)" vertex="1">
|
||||
<mxGeometry height="120" width="100" x="310" y="240" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="UncVJlxBDFmlAtaXbHPb-5" edge="1" parent="1" source="UncVJlxBDFmlAtaXbHPb-3" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fontSize=16;fontFamily=Lucida Console;dashed=1;" target="UncVJlxBDFmlAtaXbHPb-4" value="compilation croisée">
|
||||
<mxGeometry relative="1" x="0.1429" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="UncVJlxBDFmlAtaXbHPb-3" parent="1" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;fontFamily=Lucida Console;fontSize=18;" value="Processeur du PC (x86_64)" vertex="1">
|
||||
<mxGeometry height="80" width="160" x="220" y="480" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="UncVJlxBDFmlAtaXbHPb-4" parent="1" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;fontFamily=Lucida Console;fontSize=18;" value="Micro-<div>contrôleur<div>(RP2040)</div></div>" vertex="1">
|
||||
<mxGeometry height="80" width="160" x="870" y="480" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="UncVJlxBDFmlAtaXbHPb-8" parent="1" style="rounded=1;whiteSpace=wrap;html=1;dashed=1;fontFamily=Lucida Console;" value="" vertex="1">
|
||||
<mxGeometry height="220" width="400" x="460" y="240" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="UncVJlxBDFmlAtaXbHPb-9" parent="1" style="verticalLabelPosition=bottom;shadow=0;dashed=1;align=center;html=1;verticalAlign=top;strokeWidth=1;shape=mxgraph.mockup.markup.curlyBrace;whiteSpace=wrap;strokeColor=#000000;flipH=0;legacyAnchorPoints=0;flipV=1;fontFamily=Lucida Console;" value="" vertex="1">
|
||||
<mxGeometry height="20" width="400" x="460" y="470" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="UncVJlxBDFmlAtaXbHPb-11" edge="1" parent="1" source="UncVJlxBDFmlAtaXbHPb-10" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;fontFamily=Lucida Console;" target="UncVJlxBDFmlAtaXbHPb-4" value="flash">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="UncVJlxBDFmlAtaXbHPb-10" parent="1" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;fontSize=18;fontFamily=Lucida Console;verticalAlign=bottom;" value="Firmware (.uf2)" vertex="1">
|
||||
<mxGeometry height="120" width="100" x="900" y="240" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="UncVJlxBDFmlAtaXbHPb-22" edge="1" parent="1" source="UncVJlxBDFmlAtaXbHPb-12" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;fontFamily=Lucida Console;" target="UncVJlxBDFmlAtaXbHPb-13">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="595" y="300" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="UncVJlxBDFmlAtaXbHPb-23" edge="1" parent="1" source="UncVJlxBDFmlAtaXbHPb-12" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;fontFamily=Lucida Console;" target="UncVJlxBDFmlAtaXbHPb-15">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="UncVJlxBDFmlAtaXbHPb-12" parent="1" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;fontFamily=Lucida Console;" value="cmake" vertex="1">
|
||||
<mxGeometry height="50" width="85" x="480" y="275" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="UncVJlxBDFmlAtaXbHPb-26" edge="1" parent="1" source="UncVJlxBDFmlAtaXbHPb-13" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;curved=1;dashed=1;dashPattern=8 8;fontFamily=Lucida Console;" target="UncVJlxBDFmlAtaXbHPb-15" value="objets">
|
||||
<mxGeometry relative="1" x="0.5181" y="8" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="UncVJlxBDFmlAtaXbHPb-13" parent="1" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;fontFamily=Lucida Console;horizontal=1;convertToSvg=0;svgWhiteSpace=wrap;" value="compilateur<div>ARM</div>" vertex="1">
|
||||
<mxGeometry height="50" width="110" x="540" y="400" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="UncVJlxBDFmlAtaXbHPb-15" parent="1" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;fontFamily=Lucida Console;" value="éditeur de liens" vertex="1">
|
||||
<mxGeometry height="50" width="110" x="623" y="320" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="UncVJlxBDFmlAtaXbHPb-16" parent="1" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;fontSize=18;fontFamily=Lucida Console;verticalAlign=bottom;" value="Pico SDK (C++)" vertex="1">
|
||||
<mxGeometry height="120" width="100" x="190" y="240" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="UncVJlxBDFmlAtaXbHPb-19" edge="1" parent="1" source="UncVJlxBDFmlAtaXbHPb-18" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;curved=1;fontFamily=Lucida Console;" target="UncVJlxBDFmlAtaXbHPb-3">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="UncVJlxBDFmlAtaXbHPb-18" parent="1" style="verticalLabelPosition=bottom;shadow=0;dashed=0;align=center;html=1;verticalAlign=top;strokeWidth=1;shape=mxgraph.mockup.markup.curlyBrace;whiteSpace=wrap;strokeColor=#000000;flipV=1;legacyAnchorPoints=0;fontFamily=Lucida Console;" value="" vertex="1">
|
||||
<mxGeometry height="20" width="220" x="190" y="370" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="UncVJlxBDFmlAtaXbHPb-21" edge="1" parent="1" source="UncVJlxBDFmlAtaXbHPb-20" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fontFamily=Lucida Console;" target="UncVJlxBDFmlAtaXbHPb-12">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="UncVJlxBDFmlAtaXbHPb-20" parent="1" style="labelPosition=right;align=left;strokeWidth=1;shape=mxgraph.mockup.markup.curlyBrace;html=1;shadow=0;dashed=0;strokeColor=#000000;direction=north;flipH=1;legacyAnchorPoints=0;fontFamily=Lucida Console;" value="" vertex="1">
|
||||
<mxGeometry height="120" width="20" x="420" y="240" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="UncVJlxBDFmlAtaXbHPb-31" edge="1" parent="1" source="UncVJlxBDFmlAtaXbHPb-27" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0;exitDx=60;exitDy=30;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;curved=1;dashed=1;dashPattern=12 12;" target="UncVJlxBDFmlAtaXbHPb-29">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="850" y="410" />
|
||||
<mxPoint x="850" y="352.5" />
|
||||
<mxPoint x="740" y="352.5" />
|
||||
<mxPoint x="740" y="300" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="UncVJlxBDFmlAtaXbHPb-27" parent="1" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;fontFamily=Lucida Console;fontSize=12;verticalAlign=bottom;" value="Programme (.elf)" vertex="1">
|
||||
<mxGeometry height="70" width="75" x="755" y="380" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="UncVJlxBDFmlAtaXbHPb-28" edge="1" parent="1" source="UncVJlxBDFmlAtaXbHPb-15" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.75;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;curved=1;dashed=1;dashPattern=8 8;fontFamily=Lucida Console;" target="UncVJlxBDFmlAtaXbHPb-27" value="exécutable">
|
||||
<mxGeometry relative="1" x="0.2212" y="-16" as="geometry">
|
||||
<mxPoint x="-6" y="-1" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="UncVJlxBDFmlAtaXbHPb-29" parent="1" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;fontFamily=Lucida Console;" value="picotool" vertex="1">
|
||||
<mxGeometry height="50" width="85" x="760" y="275" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="UncVJlxBDFmlAtaXbHPb-32" edge="1" parent="1" source="UncVJlxBDFmlAtaXbHPb-29" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" target="UncVJlxBDFmlAtaXbHPb-10">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
BIN
img/architecture.png
Normal file
|
After Width: | Height: | Size: 93 KiB |
BIN
img/arducam.png
Normal file
|
After Width: | Height: | Size: 728 KiB |
BIN
img/boston-dynamics-spot.png
Normal file
|
After Width: | Height: | Size: 1.9 MiB |
BIN
img/boston-dynamics-weapon.png
Normal file
|
After Width: | Height: | Size: 825 KiB |
BIN
img/breadboard-power.png
Normal file
|
After Width: | Height: | Size: 594 KiB |
BIN
img/chaine-traitement.png
Normal file
|
After Width: | Height: | Size: 282 KiB |
BIN
img/china-humanoid-robots.png
Normal file
|
After Width: | Height: | Size: 508 KiB |
BIN
img/compilation.png
Normal file
|
After Width: | Height: | Size: 177 KiB |
BIN
img/defenseur-du-temps-1.png
Normal file
|
After Width: | Height: | Size: 1.4 MiB |
BIN
img/defenseur-du-temps.png
Normal file
|
After Width: | Height: | Size: 1.9 MiB |
BIN
img/drones-ukraine.png
Normal file
|
After Width: | Height: | Size: 2.0 MiB |
BIN
img/farrah-satellites.png
Normal file
|
After Width: | Height: | Size: 288 KiB |
BIN
img/fritzing-led.png
Normal file
|
After Width: | Height: | Size: 128 KiB |
BIN
img/goliath.png
Normal file
|
After Width: | Height: | Size: 2.7 MiB |
BIN
img/grove-lcd.png
Normal file
|
After Width: | Height: | Size: 165 KiB |
BIN
img/grove-shield.png
Normal file
|
After Width: | Height: | Size: 308 KiB |
BIN
img/grove-ultrasonic.png
Normal file
|
After Width: | Height: | Size: 173 KiB |
BIN
img/hammond-electric-dog.png
Normal file
|
After Width: | Height: | Size: 783 KiB |
BIN
img/ihm-terminal.png
Normal file
|
After Width: | Height: | Size: 81 KiB |
BIN
img/ihm-web.png
Normal file
|
After Width: | Height: | Size: 126 KiB |
BIN
img/jetson-orin-nano.png
Normal file
|
After Width: | Height: | Size: 749 KiB |
BIN
img/joy-it-sbc-motodriver2.png
Normal file
|
After Width: | Height: | Size: 244 KiB |
BIN
img/metro-paris.png
Normal file
|
After Width: | Height: | Size: 1.8 MiB |
BIN
img/microcontrollers.png
Normal file
|
After Width: | Height: | Size: 1.5 MiB |
BIN
img/missile.png
Normal file
|
After Width: | Height: | Size: 73 KiB |
BIN
img/os-answer.png
Normal file
|
After Width: | Height: | Size: 95 KiB |
BIN
img/os-question.png
Normal file
|
After Width: | Height: | Size: 45 KiB |
BIN
img/pico-bootsel.png
Normal file
|
After Width: | Height: | Size: 173 KiB |
BIN
img/raspberry-pi-pico-wh.png
Normal file
|
After Width: | Height: | Size: 1.3 MiB |
BIN
img/robot-industriel.png
Normal file
|
After Width: | Height: | Size: 368 KiB |
BIN
img/robot-joker.png
Normal file
|
After Width: | Height: | Size: 16 MiB |
BIN
img/rpi-pico-pinout.png
Normal file
|
After Width: | Height: | Size: 359 KiB |
BIN
img/rubo-1.png
Normal file
|
After Width: | Height: | Size: 648 KiB |
BIN
img/rubo.png
Normal file
|
After Width: | Height: | Size: 2.9 MiB |
BIN
img/serinette.png
Normal file
|
After Width: | Height: | Size: 1.2 MiB |
BIN
img/spi.png
Normal file
|
After Width: | Height: | Size: 261 KiB |
BIN
img/stele-liquidateurs-kharkiv.png
Normal file
|
After Width: | Height: | Size: 5.7 MiB |
BIN
img/ts.png
|
Before Width: | Height: | Size: 29 KiB |
BIN
img/usv-ifremer.png
Normal file
|
After Width: | Height: | Size: 205 KiB |
BIN
img/vaucanson-duck.png
Normal file
|
After Width: | Height: | Size: 454 KiB |
BIN
img/vl53l1x-tof.png
Normal file
|
After Width: | Height: | Size: 581 KiB |
74
raspberry-pi-pico.drawio
Normal file
35
slides.bib
@@ -9,7 +9,6 @@
|
||||
publisher = {IEEE},
|
||||
address = {Orlando, FL, USA},
|
||||
doi = {10.1109/ISORC.2008.25},
|
||||
urldate = {2025-09-17},
|
||||
abstract = {Cyber-Physical Systems (CPS) are integrations of computation and physical processes. Embedded computers and networks monitor and control the physical processes, usually with feedback loops where physical processes affect computations and vice versa. The economic and societal potential of such systems is vastly greater than what has been realized, and major investments are being made worldwide to develop the technology. There are considerable challenges, particularly because the physical components of such systems introduce safety and reliability requirements qualitatively different from those in generalpurpose computing. Moreover, physical components are qualitatively different from object-oriented software components. Standard abstractions based on method calls and threads do not work. This paper examines the challenges in designing such systems, and in particular raises the question of whether today's computing and networking technologies provide an adequate foundation for CPS. It concludes that it will not be sufficient to improve design processes, raise the level of abstraction, or verify (formally or otherwise) designs that are built on today's abstractions. To realize the full potential of CPS, we will have to rebuild computing and networking abstractions. These abstractions will have to embrace physical dynamics and computation in a unified way.},
|
||||
isbn = {978-0-7695-3132-8},
|
||||
langid = {english},
|
||||
@@ -25,18 +24,22 @@
|
||||
pages = {744--771},
|
||||
issn = {1754-5692, 1754-5706},
|
||||
doi = {10.1039/C9EE01919G},
|
||||
urldate = {2025-10-19},
|
||||
abstract = {Assessing the impact of digital technologies and artificial intelligence, so-called intelligent cyber-physical systems, on emission reduction in the critical sector of energy provision. , The decarbonisation of energy provision is key to managing global greenhouse gas emissions and hence mitigating climate change. Digital technologies such as big data, machine learning, and the Internet of Things are receiving more and more attention as they can aid the decarbonisation process while requiring limited investments. The orchestration of these novel technologies, so-called cyber-physical systems (CPS), provides further, synergetic effects that increase efficiency of energy provision and industrial production, thereby optimising economic feasibility and environmental impact. This comprehensive review article assesses the current as well as the potential impact of digital technologies within CPS on the decarbonisation of energy systems. Ad hoc calculation for selected applications of CPS and its subsystems estimates not only the economic impact but also the emission reduction potential. This assessment clearly shows that digitalisation of energy systems using CPS completely alters the marginal abatement cost curve (MACC) and creates novel pathways for the transition to a low-carbon energy system. Moreover, the assessment concludes that when CPS are combined with artificial intelligence (AI), decarbonisation could potentially progress at an unforeseeable pace while introducing unpredictable and potentially existential risks. Therefore, the impact of intelligent CPS on systemic resilience and energy security is discussed and policy recommendations are deducted. The assessment shows that the potential benefits clearly outweigh the latent risks as long as these are managed by policy makers.},
|
||||
langid = {english},
|
||||
}
|
||||
|
||||
@techreport{ibmArchitecturalBlueprintAutonomic2006,
|
||||
title = {{An Architectural Blueprint for Autonomic Computing}},
|
||||
author = {{IBM}},
|
||||
year = {2006},
|
||||
month = jun,
|
||||
urldate = {2025-01-21},
|
||||
langid = {english},
|
||||
@inproceedings{hansonArchitecturalApproachAutonomic2004,
|
||||
title = {An {{Architectural Approach}} to {{Autonomic Computing}}},
|
||||
booktitle = {Proceedings of the {{First International Conference}} on {{Autonomic Computing}}},
|
||||
author = {Hanson, James E. and Whalley, Ian and Chess, David M. and Kephart, Jeffrey O.},
|
||||
year = 2004,
|
||||
month = may,
|
||||
series = {{{ICAC}} '04},
|
||||
pages = {2--9},
|
||||
publisher = {IEEE Computer Society},
|
||||
address = {USA},
|
||||
abstract = {We describe an architectural approach to achieving the goals of autonomic computing. The architecture that we outline describes interfaces and behavioral requirements for individual system components, describes how interactions among components are established, and recommends design patterns that engender the desired system-level properties of self-configuration, self-optimization, self-healing and self-protection. We have validated many of these ideas in two prototype autonomic computing systems.},
|
||||
isbn = {978-0-7695-2114-5}
|
||||
}
|
||||
|
||||
@article{kephartVisionAutonomicComputing2003,
|
||||
@@ -50,7 +53,19 @@
|
||||
pages = {41--50},
|
||||
issn = {0018-9162},
|
||||
doi = {10.1109/MC.2003.1160055},
|
||||
urldate = {2024-12-05},
|
||||
copyright = {https://ieeexplore.ieee.org/Xplorehelp/downloads/license-information/IEEE.html},
|
||||
langid = {english},
|
||||
}
|
||||
|
||||
@book{barrProgrammingEmbeddedSystems2006,
|
||||
title = {Programming Embedded Systems: With {{C}} and {{GNU}} Development Tools},
|
||||
shorttitle = {Programming Embedded Systems},
|
||||
author = {Barr, Michael and Massa, Anthony J. and Barr, Michael},
|
||||
year = 2006,
|
||||
edition = {2nd ed},
|
||||
publisher = {O'Reilly},
|
||||
address = {Beijing ; Sebastopol},
|
||||
isbn = {978-0-596-00983-0},
|
||||
lccn = {TK7895.E42 B37 2006},
|
||||
keywords = {C (Computer program language),C++ (Computer program language),Embedded computer systems,Programming},
|
||||
}
|
||||
|
||||
92
slides.cls
@@ -1,6 +1,6 @@
|
||||
\ProvidesClass{slides}[27/01/2025 v1]
|
||||
|
||||
\PassOptionsToPackage{dvipsnames}{xcolor}
|
||||
\PassOptionsToPackage{dvipsnames, table}{xcolor}
|
||||
\PassOptionsToPackage{unicode}{hyperref}
|
||||
\PassOptionsToPackage{naturalnames}{hyperref}
|
||||
\LoadClass[aspectratio=169,10pt]{beamer}
|
||||
@@ -11,11 +11,17 @@
|
||||
|
||||
% listings (should be loaded before csquotes)
|
||||
\RequirePackage{minted}
|
||||
\setmintedinline{
|
||||
breaklines,
|
||||
breakanywhere,
|
||||
breakanywheresymbolpre={}
|
||||
}
|
||||
|
||||
% language and encoding
|
||||
\RequirePackage[french]{babel}
|
||||
\RequirePackage[T1]{fontenc}
|
||||
\RequirePackage{csquotes}
|
||||
\RequirePackage[autostyle]{csquotes}
|
||||
\MakeOuterQuote{"}
|
||||
|
||||
% biblatex for references on slides
|
||||
\RequirePackage[backend=biber]{biblatex}
|
||||
@@ -54,6 +60,8 @@
|
||||
% captions
|
||||
\RequirePackage{caption}
|
||||
\captionsetup{font=scriptsize,labelfont=scriptsize}
|
||||
% do not prepend "Figure X:" in captions
|
||||
\captionsetup[figure]{labelformat=empty}
|
||||
|
||||
% beamer theme
|
||||
\usetheme{moloch}
|
||||
@@ -72,7 +80,8 @@
|
||||
% https://steeven9.github.io/USI-LaTeX/html/packages_hyperref_babel_xcolor3.html
|
||||
% Section 3.2 of:
|
||||
% https://mirror.ibcp.fr/pub/CTAN/macros/latex/contrib/beamer-contrib/themes/moloch/moloch.pdf
|
||||
\definecolor{ubo}{HTML}{8c3759}
|
||||
\definecolor{ubo}{HTML}{5e548e}
|
||||
\definecolor{rowgray}{gray}{0.94}
|
||||
\setbeamercolor{progress bar}{fg=ubo}
|
||||
\setbeamercolor{title separator}{fg=ubo}
|
||||
\setbeamercolor{frametitle}{bg=ubo}
|
||||
@@ -90,6 +99,10 @@
|
||||
\molochset{subsectionpage=progressbar}
|
||||
% table of contents
|
||||
\setbeamertemplate{section in toc}[sections numbered]
|
||||
\makeatletter
|
||||
\patchcmd{\beamer@sectionintoc}{\vskip1.5em}{\vskip0.3em}{}{}
|
||||
\patchcmd{\beamer@subsectionintoc}{\vskip0.75em}{\vskip0.15em}{}{}
|
||||
\makeatother
|
||||
% smaller first-level bullet points
|
||||
\setbeamertemplate{itemize item}{\textbullet}
|
||||
% smaller bibliography entries
|
||||
@@ -107,24 +120,48 @@
|
||||
\end{tikzpicture}
|
||||
}
|
||||
|
||||
% tikz
|
||||
\usetikzlibrary{arrows.meta}
|
||||
% fonts and symbols
|
||||
\RequirePackage{pifont}
|
||||
\newcommand{\cmark}{\color{YellowGreen}\ding{51}}
|
||||
\newcommand{\xmark}{\color{BrickRed}\ding{55}}
|
||||
\RequirePackage{textcomp}
|
||||
\RequirePackage{emoji}
|
||||
% markers
|
||||
% circles
|
||||
\RequirePackage{circledsteps}
|
||||
\pgfkeys{/csteps/inner color=white}
|
||||
\pgfkeys{/csteps/fill color=black}
|
||||
\newcommand{\DONE}{%
|
||||
\CircledParamOpts{inner color=black, outer color=LimeGreen, fill color=LimeGreen}{1}{\textbf{DONE}} %
|
||||
% markers
|
||||
\RequirePackage{pifont}
|
||||
\newcommand{\cmark}{{\color{YellowGreen}\ding{51}}}
|
||||
\newcommand{\xmark}{{\color{BrickRed}\ding{55}}}
|
||||
\newcommand{\imark}{{\color{Orange}\ding{109}}}
|
||||
% pills
|
||||
\RequirePackage{xparse}
|
||||
\NewDocumentCommand{\DONE}{g}{%
|
||||
\IfNoValueTF{#1}{%
|
||||
\CircledParamOpts{inner color=black, outer color=LimeGreen, fill color=LimeGreen}
|
||||
{1}{\textbf{DONE}}%
|
||||
}{%
|
||||
\CircledParamOpts{inner color=black, outer color=LimeGreen, fill color=LimeGreen}
|
||||
{1}{\textbf{DONE --} #1}%
|
||||
}%
|
||||
}
|
||||
\newcommand{\TODO}{%
|
||||
\CircledParamOpts{inner color=black, outer color=Goldenrod, fill color=Goldenrod}{1}{\textbf{TODO}} %
|
||||
\NewDocumentCommand{\TODO}{g}{%
|
||||
\IfNoValueTF{#1}{%
|
||||
\CircledParamOpts{inner color=black, outer color=Goldenrod, fill color=Goldenrod}
|
||||
{1}{\textbf{TODO}}%
|
||||
}{%
|
||||
\CircledParamOpts{inner color=black, outer color=Goldenrod, fill color=Goldenrod}
|
||||
{1}{\textbf{TODO --} #1}%
|
||||
}%
|
||||
}
|
||||
\newcommand{\FIXME}{%
|
||||
\CircledParamOpts{inner color=white, outer color=Red, fill color=Red}{1}{\textbf{FIXME}} %
|
||||
\NewDocumentCommand{\FIXME}{g}{%
|
||||
\IfNoValueTF{#1}{%
|
||||
\CircledParamOpts{inner color=white, outer color=Red, fill color=Red}
|
||||
{1}{\textbf{FIXME}}%
|
||||
}{%
|
||||
\CircledParamOpts{inner color=white, outer color=Red, fill color=Red}
|
||||
{1}{\textbf{FIXME --} #1}%
|
||||
}%
|
||||
}
|
||||
% custom font size for a slide (cf. https://tex.stackexchange.com/a/401409)
|
||||
\RequirePackage{environ}
|
||||
@@ -145,17 +182,21 @@
|
||||
\RequirePackage{graphicx}
|
||||
\RequirePackage{subcaption}
|
||||
% tables
|
||||
\RequirePackage{array}
|
||||
\RequirePackage{tabularx}
|
||||
\RequirePackage{booktabs}
|
||||
% various tabular columns with text wrapping
|
||||
\newcolumntype{L}{>{\arraybackslash}m{\linewidth}}
|
||||
\newcolumntype{M}{>{\centering\arraybackslash}m{0.33\linewidth}}
|
||||
\newcolumntype{Y}{>{\centering\arraybackslash}m{0.15\linewidth}}
|
||||
\newcolumntype{y}{>{\arraybackslash}m{0.15\linewidth}}
|
||||
% generic horizontally centered column with line breaks
|
||||
\newcolumntype{Z}{>{\centering\arraybackslash}X}
|
||||
% vertical centering of text in all tabularx columns
|
||||
\renewcommand\tabularxcolumn[1]{m{#1}}
|
||||
\newcolumntype{F}{>{\arraybackslash}m{\linewidth}}
|
||||
\newcolumntype{L}[1]{>{\raggedright\arraybackslash}m{#1}}
|
||||
\newcolumntype{C}[1]{>{\centering\arraybackslash}m{#1}}
|
||||
\newcolumntype{R}[1]{>{\raggedleft\arraybackslash}m{#1}}
|
||||
% avoid spacing between rules and row background
|
||||
\setlength{\abovetopsep}{0pt}
|
||||
\setlength{\belowrulesep}{0pt}
|
||||
\setlength{\aboverulesep}{0pt}
|
||||
\setlength{\belowbottomsep}{0pt}
|
||||
% vertical row padding
|
||||
\renewcommand{\arraystretch}{1.5} % scales vertical row spacing
|
||||
% links
|
||||
\RequirePackage{hyperref}
|
||||
|
||||
@@ -177,15 +218,6 @@
|
||||
\column{0.4\linewidth}
|
||||
\ifx\beamer@shortauthor\@empty\else\usebeamertemplate*{author}\fi
|
||||
\column{0.4\linewidth}
|
||||
% \begin{table}[]
|
||||
% \begin{flushleft}
|
||||
% \small
|
||||
% \begin{tabular}{ll}
|
||||
% Rapporteur & Blabla \\
|
||||
% Rapporteur & Blabla
|
||||
% \end{tabular}
|
||||
% \end{flushleft}
|
||||
% \end{table}
|
||||
\end{columns}
|
||||
\begin{columns}[b]
|
||||
\column{0.4\linewidth}
|
||||
|
||||