Commit a9980005 authored by Benoit Rat's avatar Benoit Rat

doc: update channel mode in doc

- new image with changes in channel
- move new image to img/ folder
- add graphml source image
parent 1e340375
<?xml version="1.0"?><svg width="637.79773" height="337.57849" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Oscilloscope-CW</title>
<defs>
<linearGradient id="linearGradient48363">
<stop stop-color="#b3b3b3" id="stop48365" offset="0"/>
<stop stop-color="#666666" id="stop48367" offset="1"/>
</linearGradient>
<linearGradient y2="0.634148" x2="1.003575" y1="-0.312812" x1="0.133198" id="linearGradient49174" xlink:href="#linearGradient48363"/>
</defs>
<metadata id="metadata47336">image/svg+xmlOscilloscopeOscilloscopeelectronic equipmentscientific equipmentmothinator2009-11-02</metadata>
<g>
<title>Layer 1</title>
<rect fill="url(#linearGradient49174)" stroke="#4d4d4d" stroke-width="16" transform="matrix(0, 1, -1, 0, 0, 0)" ry="60.035645" y="-629.79774" x="7.99995" height="621.79773" width="321.57849" id="rect47341"/>
<rect fill="#008080" stroke="#333333" stroke-width="8.237989" id="rect48116" width="318.20496" height="245.96449" x="39.154156" y="33.86382" ry="11.534249"/>
<g transform="matrix(0.771548, 0, 0, 0.587796, 97.5802, 153.855)" id="g13468">
<path fill="none" stroke="#000000" stroke-width="2" d="m29.606449,-195.290573l0,400" id="path13470"/>
<path fill="none" stroke="#000000" stroke-width="2" d="m129.606445,-195.290573l0,400" id="path13472"/>
<path fill="none" stroke="#000000" stroke-width="2" d="m229.606445,-195.290573l0,400" id="path13474"/>
</g>
<g transform="matrix(0.771548, 0, 0, 0.587796, 97.5802, 153.855)" id="g13476">
<path fill="none" stroke="#000000" stroke-width="2" d="m-70.393547,-95.290573l399.999992,0" id="path13478"/>
<path fill="none" stroke="#000000" stroke-width="2" d="m-70.393547,4.70943l399.999992,0" id="path13480"/>
<path fill="none" stroke="#000000" stroke-width="2" d="m-70.393547,104.709427l399.999992,0" id="path13482"/>
</g>
<rect transform="matrix(0.771548, 0, 0, 0.587796, 97.5802, 153.855)" fill="none" stroke="#000000" stroke-width="3.009044" ry="7.9579" width="400.45462" height="402.57559" y="-194.192606" x="-70.389574" id="rect13494"/>
<g transform="matrix(0.771548, 0, 0, 0.587796, 97.5802, 153.855)" id="g13484">
<path fill="none" stroke="#000000" d="m-20.393551,-195.290573l0,400" id="path13486"/>
<path fill="none" stroke="#000000" d="m79.606453,-195.290573l0,400" id="path13488"/>
<path fill="none" stroke="#000000" d="m179.606445,-195.290573l0,400" id="path13490"/>
<path fill="none" stroke="#000000" d="m279.606445,-195.290573l0,400" id="path13492"/>
</g>
<g id="g2969">
<path fill="#4d4d4d" stroke="#333333" stroke-width="6.784148" d="m412.249817,58.431919l162.53949,0c7.923279,0 14.451782,12.034107 14.638,26.982258l0.87915,70.582664c0.186157,14.948181 -6.042603,26.9823 -13.96582,26.9823l-162.53949,0c-7.923218,0 -14.451721,-12.034119 -14.637939,-26.9823l-0.87915,-70.582664c-0.186218,-14.948151 6.042542,-26.982258 13.965759,-26.982258z" id="rect48383"/>
<g id="g2943">
<rect fill="#cccccc" stroke="#333333" stroke-width="0.834242" id="rect48387" width="20.809734" height="13.088612" x="415.388478" y="73.276472" ry="2.755498" transform="matrix(1, 0, -0.0101036, 0.999949, 0, 0)"/>
<use fill="#cccccc" stroke="#333333" height="1052.3622" width="744.09448" id="use48607" xlink:href="#rect48387" y="26.589399" x="0.000002"/>
<use fill="#cccccc" stroke="#333333" height="1052.3622" width="744.09448" id="use48609" xlink:href="#rect48387" y="53.178699" x="0.000002"/>
<use fill="#cccccc" stroke="#333333" height="1052.3622" width="744.09448" id="use48611" xlink:href="#rect48387" y="0.000001" x="44.698486"/>
<use fill="#cccccc" stroke="#333333" height="1052.3622" width="744.09448" id="use48613" xlink:href="#rect48387" y="26.589399" x="44.698486"/>
<use fill="#cccccc" stroke="#333333" height="1052.3622" width="744.09448" id="use48615" xlink:href="#rect48387" y="53.178699" x="44.698486"/>
<use fill="#cccccc" stroke="#333333" height="1052.3622" width="744.09448" id="use48617" xlink:href="#rect48387" y="0.000001" x="89.39711"/>
<use fill="#cccccc" stroke="#333333" height="1052.3622" width="744.09448" id="use48619" xlink:href="#rect48387" y="26.589399" x="89.39711"/>
<use fill="#cccccc" stroke="#333333" height="1052.3622" width="744.09448" id="use48623" xlink:href="#rect48387" y="0.000001" x="134.096008"/>
<use fill="#cccccc" stroke="#333333" height="1052.3622" width="744.09448" id="use48625" xlink:href="#rect48387" y="26.589399" x="134.096008"/>
<use fill="#cccccc" stroke="#333333" height="1052.3622" width="744.09448" id="use48619-9" xlink:href="#rect48387" y="52.419678" x="89.832214"/>
<use fill="#cccccc" stroke="#333333" height="1052.3622" width="744.09448" id="use48625-7" xlink:href="#rect48387" y="52.419678" x="134.531006"/>
<use fill="#cccccc" stroke="#333333" height="1052.3622" width="744.09448" id="use48609-0" xlink:href="#rect48387" y="79.169403" x="0.622102"/>
<use fill="#cccccc" stroke="#333333" height="1052.3622" width="744.09448" id="use48615-2" xlink:href="#rect48387" y="79.169403" x="45.320702"/>
<use fill="#cccccc" stroke="#333333" height="1052.3622" width="744.09448" id="use48619-9-2" xlink:href="#rect48387" y="78.4104" x="90.454285"/>
<use fill="#cccccc" stroke="#333333" height="1052.3622" width="744.09448" id="use48625-7-3" xlink:href="#rect48387" y="78.4104" x="135.153015"/>
</g>
</g>
<g id="g3125-9">
<g id="g2982-8-0">
<path fill="#cccccc" fill-rule="nonzero" stroke="#4d4d4d" stroke-width="1.891105" stroke-miterlimit="4" stroke-dashoffset="0" d="m482.076782,227.80307c-19.445709,-0.536743 -30.167328,28.624756 -15.448517,42.361053c12.662109,14.296509 38.398285,4.786224 39.307953,-15.137634c1.503784,-14.222748 -10.287781,-28.201691 -23.859436,-27.223419z" id="path47347-2-4-0"/>
</g>
<g fill="#999999" id="g2982-7-2">
<path fill="#999999" stroke="#000000" stroke-width="1px" d="m502.008179,252.728928c0,10.544388 -8.547974,19.0923 -19.092285,19.0923c-10.544434,0 -19.092407,-8.547913 -19.092407,-19.0923c0,-10.544403 8.547974,-19.092316 19.092407,-19.092316c10.544312,0 19.092285,8.547913 19.092285,19.092316" id="path3035-2"/>
</g>
<g fill="#f2f2f2" id="g2982-7-4-6" transform="matrix(0.765081, 0, 0, 0.765081, 333.094, 132.522)">
<path fill="#f2f2f2" stroke="#000000" stroke-width="1px" d="m214.916138,157.066483c0,10.544403 -8.547913,19.092316 -19.092285,19.092316c-10.544434,0 -19.092407,-8.547913 -19.092407,-19.092316c0,-10.544403 8.547974,-19.092331 19.092407,-19.092331c10.544373,0 19.092285,8.547928 19.092285,19.092331z" id="path3035-1-9"/>
</g>
<path fill="#000000" stroke="#000000" id="path3123-0" d="m486.772644,252.648468c0,2.13031 -1.726929,3.857239 -3.857178,3.857239c-2.130371,0 -3.8573,-1.726929 -3.8573,-3.857239c0,-2.13028 1.726929,-3.857239 3.8573,-3.857239c2.130249,0 3.857178,1.726959 3.857178,3.857239z"/>
</g>
<g transform="matrix(0.769281, 0, 0, 0.882181, -455.343, 73.985)" id="g2939-2"/>
<g id="g3125">
<g id="g2982-8">
<path fill="#cccccc" fill-rule="nonzero" stroke="#4d4d4d" stroke-width="1.891105" stroke-miterlimit="4" stroke-dashoffset="0" d="m405.454834,227.80307c-19.44574,-0.536743 -30.167358,28.624756 -15.448547,42.361053c12.662109,14.296509 38.398285,4.786224 39.307922,-15.137634c1.503815,-14.222748 -10.28772,-28.201691 -23.859375,-27.223419z" id="path47347-2-4"/>
</g>
<g fill="#999999" id="g2982-7">
<path fill="#999999" stroke="#000000" stroke-width="1px" d="m425.386108,252.728928c0,10.544388 -8.547852,19.0923 -19.092285,19.0923c-10.544434,0 -19.092285,-8.547913 -19.092285,-19.0923c0,-10.544403 8.547852,-19.092316 19.092285,-19.092316c10.544434,0 19.092285,8.547913 19.092285,19.092316" id="path3035"/>
</g>
<g fill="#f2f2f2" id="g2982-7-4" transform="matrix(0.765081, 0, 0, 0.765081, 333.094, 132.522)">
<path fill="#f2f2f2" stroke="#000000" stroke-width="1px" d="m114.767326,157.066483c0,10.544403 -8.547905,19.092316 -19.092278,19.092316c-10.544426,0 -19.092407,-8.547913 -19.092407,-19.092316c0,-10.544403 8.547981,-19.092331 19.092407,-19.092331c10.544373,0 19.092278,8.547928 19.092278,19.092331z" id="path3035-1"/>
</g>
<path fill="#000000" stroke="#000000" id="path3123" d="m410.150696,252.648468c0,2.13031 -1.726959,3.857239 -3.857239,3.857239c-2.13031,0 -3.857239,-1.726929 -3.857239,-3.857239c0,-2.13028 1.726929,-3.857239 3.857239,-3.857239c2.13028,0 3.857239,1.726959 3.857239,3.857239z"/>
</g>
<g id="g3125-9-3">
<g id="g2982-8-0-7">
<path fill="#cccccc" fill-rule="nonzero" stroke="#4d4d4d" stroke-width="1.891105" stroke-miterlimit="4" stroke-dashoffset="0" d="m558.699768,227.760971c-19.44574,-0.536743 -30.167297,28.624741 -15.448547,42.361069c12.662109,14.296509 38.398315,4.786224 39.307983,-15.13765c1.503784,-14.222748 -10.287781,-28.201691 -23.859436,-27.223419z" id="path47347-2-4-0-3"/>
</g>
<g fill="#999999" id="g2982-7-2-5">
<path fill="#999999" stroke="#000000" stroke-width="1px" d="m578.631104,252.686844c0,10.544388 -8.547852,19.0923 -19.092285,19.0923c-10.544434,0 -19.092285,-8.547913 -19.092285,-19.0923c0,-10.544403 8.547852,-19.092346 19.092285,-19.092346c10.544434,0 19.092285,8.547943 19.092285,19.092346" id="path3035-2-5"/>
</g>
<g fill="#f2f2f2" id="g2982-7-4-6-1" transform="matrix(0.765081, 0, 0, 0.765081, 333.094, 132.522)">
<path fill="#f2f2f2" stroke="#000000" stroke-width="1px" d="m315.066406,157.011459c0,10.544403 -8.547913,19.092316 -19.092285,19.092316c-10.544434,0 -19.092407,-8.547913 -19.092407,-19.092316c0,-10.544403 8.547974,-19.092346 19.092407,-19.092346c10.544373,0 19.092285,8.547943 19.092285,19.092346z" id="path3035-1-9-8"/>
</g>
<path fill="#000000" stroke="#000000" id="path3123-0-1" d="m563.395691,252.606384c0,2.13028 -1.72699,3.857239 -3.8573,3.857239c-2.130249,0 -3.857178,-1.726959 -3.857178,-3.857239c0,-2.13031 1.726929,-3.857239 3.857178,-3.857239c2.13031,0 3.8573,1.726929 3.8573,3.857239z"/>
</g>
<line id="svg_1" y2="218.421509" x2="350.202271" y1="215.421509" x1="46.202271" stroke-linecap="round" stroke-linejoin="round" stroke-width="5.471832" stroke="#c8ab37" fill="none" opacity="0.5"/>
<line id="svg_2" y2="214.421509" x2="84.202271" y1="98.421509" x1="84.202271" stroke-linecap="round" stroke-linejoin="round" stroke-width="5.471832" stroke="#c8ab37" fill="none"/>
<line id="svg_4" y2="216.421509" x2="314.202271" y1="100.421509" x1="314.202271" stroke-linecap="round" stroke-linejoin="round" stroke-width="5.471832" stroke="#c8ab37" fill="none"/>
</g>
</svg>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd">
<!--Created by yFiles for Java 2.10-->
<key for="graphml" id="d0" yfiles.type="resources"/>
<key for="port" id="d1" yfiles.type="portgraphics"/>
<key for="port" id="d2" yfiles.type="portgeometry"/>
<key for="port" id="d3" yfiles.type="portuserdata"/>
<key attr.name="url" attr.type="string" for="node" id="d4"/>
<key attr.name="description" attr.type="string" for="node" id="d5"/>
<key for="node" id="d6" yfiles.type="nodegraphics"/>
<key attr.name="Description" attr.type="string" for="graph" id="d7"/>
<key attr.name="url" attr.type="string" for="edge" id="d8"/>
<key attr.name="description" attr.type="string" for="edge" id="d9"/>
<key for="edge" id="d10" yfiles.type="edgegraphics"/>
<graph edgedefault="directed" id="G">
<data key="d7"/>
<node id="n0">
<data key="d5"/>
<data key="d6">
<y:ShapeNode>
<y:Geometry height="431.0" width="400.0" x="2.5" y="245.0"/>
<y:Fill hasColor="false" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="2.0"/>
<y:NodeLabel alignment="right" autoSizePolicy="content" fontFamily="Dialog" fontSize="30" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="73.84375" modelName="internal" modelPosition="tr" textColor="#000000" visible="true" width="100.2548828125" x="295.7451171875" y="4.0">
PC </y:NodeLabel>
<y:Shape type="roundrectangle"/>
</y:ShapeNode>
</data>
</node>
<node id="n1">
<data key="d5"/>
<data key="d6">
<y:ShapeNode>
<y:Geometry height="279.0" width="58.0" x="121.0" y="356.5"/>
<y:Fill hasColor="false" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="2.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="custom" textColor="#000000" visible="true" width="4.0" x="27.0" y="137.5">
<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:Shape type="roundrectangle"/>
</y:ShapeNode>
</data>
</node>
<node id="n2">
<data key="d5"/>
<data key="d6">
<y:ShapeNode>
<y:Geometry height="279.0" width="58.0" x="37.84375" y="356.5"/>
<y:Fill hasColor="false" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="2.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="custom" textColor="#000000" visible="true" width="4.0" x="27.0" y="137.5">
<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:Shape type="roundrectangle"/>
</y:ShapeNode>
</data>
</node>
<node id="n3">
<data key="d5"/>
<data key="d6">
<y:ShapeNode>
<y:Geometry height="30.0" width="30.0" x="51.0625" y="645.0"/>
<y:Fill hasColor="false" transparent="false"/>
<y:BorderStyle hasColor="false" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="31.9375" modelName="custom" textColor="#000000" visible="true" width="57.390625" x="-13.6953125" y="-0.96875">wr0
id: 05:00<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:Shape type="rectangle"/>
</y:ShapeNode>
</data>
</node>
<node id="n4">
<data key="d5"/>
<data key="d6">
<y:ShapeNode>
<y:Geometry height="30.0" width="30.0" x="134.21875" y="645.0"/>
<y:Fill hasColor="false" transparent="false"/>
<y:BorderStyle hasColor="false" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="31.9375" modelName="custom" textColor="#000000" visible="true" width="57.373046875" x="-13.6865234375" y="-0.96875">wr1
id: 0b:00<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:Shape type="rectangle"/>
</y:ShapeNode>
</data>
</node>
<node id="n5">
<data key="d5"/>
<data key="d6">
<y:ShapeNode>
<y:Geometry height="30.0" width="30.875" x="133.78125" y="445.5"/>
<y:Fill hasColor="false" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" configuration="CroppingLabel" fontFamily="Dialog" fontSize="16" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="25.625" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="17.1796875" x="6.84765625" y="2.1875">1</y:NodeLabel>
<y:Shape type="ellipse"/>
</y:ShapeNode>
</data>
</node>
<node id="n6">
<data key="d5"/>
<data key="d6">
<y:ShapeNode>
<y:Geometry height="30.0" width="30.875" x="133.78125" y="481.0"/>
<y:Fill hasColor="false" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" configuration="CroppingLabel" fontFamily="Dialog" fontSize="16" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="25.625" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="17.1796875" x="6.84765625" y="2.1875">2</y:NodeLabel>
<y:Shape type="ellipse"/>
</y:ShapeNode>
</data>
</node>
<node id="n7">
<data key="d5"/>
<data key="d6">
<y:ShapeNode>
<y:Geometry height="30.0" width="30.875" x="133.78125" y="516.5"/>
<y:Fill hasColor="false" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" configuration="CroppingLabel" fontFamily="Dialog" fontSize="16" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="25.625" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="17.1796875" x="6.84765625" y="2.1875">3</y:NodeLabel>
<y:Shape type="ellipse"/>
</y:ShapeNode>
</data>
</node>
<node id="n8">
<data key="d5"/>
<data key="d6">
<y:ShapeNode>
<y:Geometry height="30.0" width="30.875" x="133.78125" y="552.0"/>
<y:Fill hasColor="false" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" configuration="CroppingLabel" fontFamily="Dialog" fontSize="16" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="25.625" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="17.1796875" x="6.84765625" y="2.1875">4</y:NodeLabel>
<y:Shape type="ellipse"/>
</y:ShapeNode>
</data>
</node>
<node id="n9">
<data key="d5"/>
<data key="d6">
<y:ShapeNode>
<y:Geometry height="30.0" width="30.875" x="133.78125" y="587.5"/>
<y:Fill hasColor="false" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" configuration="CroppingLabel" fontFamily="Dialog" fontSize="16" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="25.625" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="17.1796875" x="6.84765625" y="2.1875">5</y:NodeLabel>
<y:Shape type="ellipse"/>
</y:ShapeNode>
</data>
</node>
<node id="n10">
<data key="d5"/>
<data key="d6">
<y:ShapeNode>
<y:Geometry height="30.0" width="30.875" x="50.625" y="445.5"/>
<y:Fill hasColor="false" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" configuration="CroppingLabel" fontFamily="Dialog" fontSize="16" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="25.625" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="17.1796875" x="6.84765625" y="2.1875">1</y:NodeLabel>
<y:Shape type="ellipse"/>
</y:ShapeNode>
</data>
</node>
<node id="n11">
<data key="d5"/>
<data key="d6">
<y:ShapeNode>
<y:Geometry height="30.0" width="30.875" x="50.625" y="481.0"/>
<y:Fill hasColor="false" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" configuration="CroppingLabel" fontFamily="Dialog" fontSize="16" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="25.625" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="17.1796875" x="6.84765625" y="2.1875">2</y:NodeLabel>
<y:Shape type="ellipse"/>
</y:ShapeNode>
</data>
</node>
<node id="n12">
<data key="d5"/>
<data key="d6">
<y:ShapeNode>
<y:Geometry height="30.0" width="30.875" x="50.625" y="516.5"/>
<y:Fill hasColor="false" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" configuration="CroppingLabel" fontFamily="Dialog" fontSize="16" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="25.625" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="17.1796875" x="6.84765625" y="2.1875">3</y:NodeLabel>
<y:Shape type="ellipse"/>
</y:ShapeNode>
</data>
</node>
<node id="n13">
<data key="d5"/>
<data key="d6">
<y:ShapeNode>
<y:Geometry height="30.0" width="30.875" x="50.625" y="552.0"/>
<y:Fill hasColor="false" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" configuration="CroppingLabel" fontFamily="Dialog" fontSize="16" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="25.625" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="17.1796875" x="6.84765625" y="2.1875">4</y:NodeLabel>
<y:Shape type="ellipse"/>
</y:ShapeNode>
</data>
</node>
<node id="n14">
<data key="d5"/>
<data key="d6">
<y:ShapeNode>
<y:Geometry height="30.0" width="30.875" x="50.625" y="587.5"/>
<y:Fill hasColor="false" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" configuration="CroppingLabel" fontFamily="Dialog" fontSize="16" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="25.625" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="17.1796875" x="6.84765625" y="2.1875">5</y:NodeLabel>
<y:Shape type="ellipse"/>
</y:ShapeNode>
</data>
</node>
<node id="n15">
<data key="d5"/>
<data key="d6">
<y:ShapeNode>
<y:Geometry height="44.331896551724135" width="46.75" x="42.6875" y="366.5"/>
<y:Fill color="#FCFCFC" transparent="false"/>
<y:BorderStyle color="#800080" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="31.9375" modelName="custom" textColor="#000000" visible="true" width="45.7421875" x="0.50390625" y="6.1971982758620925">SFP
(down)<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:Shape type="rectangle"/>
</y:ShapeNode>
</data>
</node>
<node id="n16">
<data key="d5"/>
<data key="d6">
<y:ShapeNode>
<y:Geometry height="44.331896551724135" width="46.75" x="125.84375" y="366.5"/>
<y:Fill color="#FCFCFC" transparent="false"/>
<y:BorderStyle color="#3366FF" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="31.9375" modelName="custom" textColor="#000000" visible="true" width="28.5859375" x="9.08203125" y="6.1971982758620925">SFP
(up)<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:Shape type="rectangle"/>
</y:ShapeNode>
</data>
</node>
<edge id="e0" source="n0" target="n0">
<data key="d10">
<y:ArcEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="202.5" y="460.5"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:Arc height="0.0" ratio="1.0" type="fixedRatio"/>
</y:ArcEdge>
</data>
</edge>
<edge id="e1" source="n10" target="n10">
<data key="d10">
<y:QuadCurveEdge straightness="0.1">
<y:Path sx="0.0" sy="-10.5" tx="-6.0625" ty="-10.5"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
</y:QuadCurveEdge>
</data>
</edge>
<edge id="e2" source="n15" target="n0">
<data key="d10">
<y:QuadCurveEdge straightness="0.1">
<y:Path sx="0.0" sy="-22.165948275862092" tx="-53.16666666666691" ty="-71.50053333333324">
<y:Point x="107.69791666666654" y="366.5"/>
<y:Point x="107.69791666666654" y="388.99946666666676"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
</y:QuadCurveEdge>
</data>
</edge>
<edge id="e3" source="n15" target="n16">
<data key="d10">
<y:QuadCurveEdge straightness="0.1">
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="-22.165948275862092">
<y:Point x="46.84375" y="341.6659482758621"/>
<y:Point x="90.0" y="210.0"/>
<y:Point x="300.0" y="210.0"/>
<y:Point x="271.6900969157621" y="300.0"/>
</y:Path>
<y:LineStyle color="#FFCC00" type="line" width="3.0"/>
<y:Arrows source="short" target="short"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="80.37109375" x="97.82549285888672" y="-165.46072387695312">Optical Fiber<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="center" ratio="0.5" segment="2"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
</y:QuadCurveEdge>
</data>
</edge>
<edge id="e4" source="n11" target="n12">
<data key="d10">
<y:QuadCurveEdge straightness="0.1">
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="-30.0" y="461.0"/>
<y:Point x="-30.0" y="540.0"/>
<y:Point x="30.0" y="523.9999999999999"/>
</y:Path>
<y:LineStyle color="#993300" type="line" width="2.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" backgroundColor="#FFFFFF" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasLineColor="false" height="17.96875" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="38.06640625" x="-100.6409912109375" y="0.782135009765625">LEMO<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="center" ratio="0.5" segment="1"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
</y:QuadCurveEdge>
</data>
</edge>
<edge id="e5" source="n14" target="n0">
<data key="d10">
<y:QuadCurveEdge straightness="0.1">
<y:Path sx="0.0" sy="0.0" tx="-136.4375" ty="169.5"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
</y:QuadCurveEdge>
</data>
</edge>
<edge id="e6" source="n14" target="n2">
<data key="d10">
<y:QuadCurveEdge straightness="0.1">
<y:Path sx="0.0" sy="0.0" tx="-0.78125" ty="53.25"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
</y:QuadCurveEdge>
</data>
</edge>
<edge id="e7" source="n14" target="n2">
<data key="d10">
<y:QuadCurveEdge straightness="0.1">
<y:Path sx="0.0" sy="0.0" tx="-0.78125" ty="53.25"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
</y:QuadCurveEdge>
</data>
</edge>
<edge id="e8" source="n14" target="n0">
<data key="d10">
<y:QuadCurveEdge straightness="0.1">
<y:Path sx="0.0" sy="0.0" tx="-93.859375" ty="142.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
</y:QuadCurveEdge>
</data>
</edge>
<edge id="e9" source="n14" target="n8">
<data key="d10">
<y:QuadCurveEdge straightness="0.1">
<y:Path sx="0.0" sy="0.0" tx="15.4375" ty="0.0">
<y:Point x="107.00000000000006" y="642.0"/>
<y:Point x="202.5" y="642.0"/>
<y:Point x="240.0" y="600.0"/>
</y:Path>
<y:LineStyle color="#993300" type="line" width="2.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" backgroundColor="#FFFFFF" configuration="AutoFlippingLabel" distance="0.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" height="17.96875" lineColor="#FFFFFF" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="38.06640625" x="125.20021057128906" y="-1.05377197265625">LEMO<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="10.0" distanceToCenter="false" position="center" ratio="0.5" segment="2"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
</y:QuadCurveEdge>
</data>
</edge>
</graph>
<data key="d0">
<y:Resources/>
</data>
</graphml>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd">
<!--Created by yFiles for Java 2.10-->
<key for="graphml" id="d0" yfiles.type="resources"/>
<key for="port" id="d1" yfiles.type="portgraphics"/>
<key for="port" id="d2" yfiles.type="portgeometry"/>
<key for="port" id="d3" yfiles.type="portuserdata"/>
<key attr.name="url" attr.type="string" for="node" id="d4"/>
<key attr.name="description" attr.type="string" for="node" id="d5"/>
<key for="node" id="d6" yfiles.type="nodegraphics"/>
<key attr.name="Description" attr.type="string" for="graph" id="d7"/>
<key attr.name="url" attr.type="string" for="edge" id="d8"/>
<key attr.name="description" attr.type="string" for="edge" id="d9"/>
<key for="edge" id="d10" yfiles.type="edgegraphics"/>
<graph edgedefault="directed" id="G">
<data key="d7"/>
<node id="n0">
<data key="d5"/>
<data key="d6">
<y:SVGNode>
<y:Geometry height="191.5784912109375" width="361.9553078620906" x="449.0223460689547" y="255.4215087890625"/>
<y:Fill color="#CCCCFF" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="sandwich" modelPosition="s" textColor="#000000" visible="true" width="4.0" x="178.97765393104532" y="195.5784912109375"/>
<y:SVGNodeProperties usingVisualBounds="true"/>
<y:SVGModel svgBoundsPolicy="0">
<y:SVGContent refid="1"/>
</y:SVGModel>
</y:SVGNode>
</data>
</node>
<node id="n1">
<data key="d5"/>
<data key="d6">
<y:ShapeNode>
<y:Geometry height="431.0" width="400.0" x="2.5" y="245.0"/>
<y:Fill hasColor="false" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="2.0"/>
<y:NodeLabel alignment="right" autoSizePolicy="content" fontFamily="Dialog" fontSize="30" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="73.84375" modelName="internal" modelPosition="tr" textColor="#000000" visible="true" width="100.2548828125" x="295.7451171875" y="4.0">
PC </y:NodeLabel>
<y:Shape type="roundrectangle"/>
</y:ShapeNode>
</data>
</node>
<node id="n2">
<data key="d5"/>
<data key="d6">
<y:ShapeNode>
<y:Geometry height="279.0" width="58.0" x="121.0" y="356.5"/>
<y:Fill hasColor="false" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="2.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="custom" textColor="#000000" visible="true" width="4.0" x="27.0" y="137.5">
<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:Shape type="roundrectangle"/>
</y:ShapeNode>
</data>
</node>
<node id="n3">
<data key="d5"/>
<data key="d6">
<y:ShapeNode>
<y:Geometry height="279.0" width="58.0" x="37.84375" y="356.5"/>
<y:Fill hasColor="false" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="2.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="custom" textColor="#000000" visible="true" width="4.0" x="27.0" y="137.5">
<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:Shape type="roundrectangle"/>
</y:ShapeNode>
</data>
</node>
<node id="n4">
<data key="d5"/>
<data key="d6">
<y:ShapeNode>
<y:Geometry height="30.0" width="30.0" x="51.0625" y="645.0"/>
<y:Fill hasColor="false" transparent="false"/>
<y:BorderStyle hasColor="false" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="31.9375" modelName="custom" textColor="#000000" visible="true" width="57.390625" x="-13.6953125" y="-0.96875">wr0
id: 05:00<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:Shape type="rectangle"/>
</y:ShapeNode>
</data>
</node>
<node id="n5">
<data key="d5"/>
<data key="d6">
<y:ShapeNode>
<y:Geometry height="30.0" width="30.0" x="134.21875" y="645.0"/>
<y:Fill hasColor="false" transparent="false"/>
<y:BorderStyle hasColor="false" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="31.9375" modelName="custom" textColor="#000000" visible="true" width="57.373046875" x="-13.6865234375" y="-0.96875">wr1
id: 0b:00<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:Shape type="rectangle"/>
</y:ShapeNode>
</data>
</node>
<node id="n6">
<data key="d5"/>
<data key="d6">
<y:ShapeNode>
<y:Geometry height="30.0" width="30.875" x="133.78125" y="445.5"/>
<y:Fill hasColor="false" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" configuration="CroppingLabel" fontFamily="Dialog" fontSize="16" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="25.625" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="17.1796875" x="6.84765625" y="2.1875">1</y:NodeLabel>
<y:Shape type="ellipse"/>
</y:ShapeNode>
</data>
</node>
<node id="n7">
<data key="d5"/>
<data key="d6">
<y:ShapeNode>
<y:Geometry height="30.0" width="30.875" x="133.78125" y="481.0"/>
<y:Fill hasColor="false" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" configuration="CroppingLabel" fontFamily="Dialog" fontSize="16" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="25.625" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="17.1796875" x="6.84765625" y="2.1875">2</y:NodeLabel>
<y:Shape type="ellipse"/>
</y:ShapeNode>
</data>
</node>
<node id="n8">
<data key="d5"/>
<data key="d6">
<y:ShapeNode>
<y:Geometry height="30.0" width="30.875" x="133.78125" y="516.5"/>
<y:Fill hasColor="false" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" configuration="CroppingLabel" fontFamily="Dialog" fontSize="16" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="25.625" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="17.1796875" x="6.84765625" y="2.1875">3</y:NodeLabel>
<y:Shape type="ellipse"/>
</y:ShapeNode>
</data>
</node>
<node id="n9">
<data key="d5"/>
<data key="d6">
<y:ShapeNode>
<y:Geometry height="30.0" width="30.875" x="133.78125" y="552.0"/>
<y:Fill hasColor="false" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" configuration="CroppingLabel" fontFamily="Dialog" fontSize="16" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="25.625" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="17.1796875" x="6.84765625" y="2.1875">4</y:NodeLabel>
<y:Shape type="ellipse"/>
</y:ShapeNode>
</data>
</node>
<node id="n10">
<data key="d5"/>
<data key="d6">
<y:ShapeNode>
<y:Geometry height="30.0" width="30.875" x="133.78125" y="587.5"/>
<y:Fill hasColor="false" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" configuration="CroppingLabel" fontFamily="Dialog" fontSize="16" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="25.625" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="17.1796875" x="6.84765625" y="2.1875">5</y:NodeLabel>
<y:Shape type="ellipse"/>
</y:ShapeNode>
</data>
</node>
<node id="n11">
<data key="d5"/>
<data key="d6">
<y:ShapeNode>
<y:Geometry height="30.0" width="30.875" x="50.625" y="445.5"/>
<y:Fill hasColor="false" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" configuration="CroppingLabel" fontFamily="Dialog" fontSize="16" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="25.625" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="17.1796875" x="6.84765625" y="2.1875">1</y:NodeLabel>
<y:Shape type="ellipse"/>
</y:ShapeNode>
</data>
</node>
<node id="n12">
<data key="d5"/>
<data key="d6">
<y:ShapeNode>
<y:Geometry height="30.0" width="30.875" x="50.625" y="481.0"/>
<y:Fill hasColor="false" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" configuration="CroppingLabel" fontFamily="Dialog" fontSize="16" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="25.625" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="17.1796875" x="6.84765625" y="2.1875">2</y:NodeLabel>
<y:Shape type="ellipse"/>
</y:ShapeNode>
</data>
</node>
<node id="n13">
<data key="d5"/>
<data key="d6">
<y:ShapeNode>
<y:Geometry height="30.0" width="30.875" x="50.625" y="516.5"/>
<y:Fill hasColor="false" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" configuration="CroppingLabel" fontFamily="Dialog" fontSize="16" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="25.625" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="17.1796875" x="6.84765625" y="2.1875">3</y:NodeLabel>
<y:Shape type="ellipse"/>
</y:ShapeNode>
</data>
</node>
<node id="n14">
<data key="d5"/>
<data key="d6">
<y:ShapeNode>
<y:Geometry height="30.0" width="30.875" x="50.625" y="552.0"/>
<y:Fill hasColor="false" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" configuration="CroppingLabel" fontFamily="Dialog" fontSize="16" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="25.625" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="17.1796875" x="6.84765625" y="2.1875">4</y:NodeLabel>
<y:Shape type="ellipse"/>
</y:ShapeNode>
</data>
</node>
<node id="n15">
<data key="d5"/>
<data key="d6">
<y:ShapeNode>
<y:Geometry height="30.0" width="30.875" x="50.625" y="587.5"/>
<y:Fill hasColor="false" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" configuration="CroppingLabel" fontFamily="Dialog" fontSize="16" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="25.625" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="17.1796875" x="6.84765625" y="2.1875">5</y:NodeLabel>
<y:Shape type="ellipse"/>
</y:ShapeNode>
</data>
</node>
<node id="n16">
<data key="d5"/>
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.onPageReference">
<y:Geometry height="5.5708149759999515" width="14.362855424000031" x="760.0405447030482" y="395.1392977920001"/>
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="custom" textColor="#000000" visible="true" width="4.0" x="5.181427711999959" y="0.7854074879999757">
<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n17">
<data key="d5"/>
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.onPageReference">
<y:Geometry height="5.5708149759999515" width="14.362855424000031" x="671.9227099510484" y="395.18768588800003"/>
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="custom" textColor="#000000" visible="true" width="4.0" x="5.181427711999959" y="0.7854074879999757">
<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n18">
<data key="d5"/>
<data key="d6">
<y:ShapeNode>
<y:Geometry height="44.331896551724135" width="46.75" x="42.6875" y="366.5"/>
<y:Fill color="#FCFCFC" transparent="false"/>
<y:BorderStyle color="#800080" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="31.9375" modelName="custom" textColor="#000000" visible="true" width="45.7421875" x="0.50390625" y="6.1971982758620925">SFP
(down)<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:Shape type="rectangle"/>
</y:ShapeNode>
</data>
</node>
<node id="n19">
<data key="d5"/>
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.onPageReference">
<y:Geometry height="5.5708149759999515" width="14.362855424000031" x="716.2855653750485" y="395.18768588800003"/>
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="custom" textColor="#000000" visible="true" width="4.0" x="5.181427711999959" y="0.7854074879999757">
<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n20">
<data key="d5"/>
<data key="d6">
<y:ShapeNode>
<y:Geometry height="44.331896551724135" width="46.75" x="125.84375" y="366.5"/>
<y:Fill color="#FCFCFC" transparent="false"/>
<y:BorderStyle color="#3366FF" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="31.9375" modelName="custom" textColor="#000000" visible="true" width="28.5859375" x="9.08203125" y="6.1971982758620925">SFP
(up)<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:Shape type="rectangle"/>
</y:ShapeNode>
</data>
</node>
<edge id="e0" source="n1" target="n1">
<data key="d10">
<y:ArcEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="202.5" y="460.5"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:Arc height="0.0" ratio="1.0" type="fixedRatio"/>
</y:ArcEdge>
</data>
</edge>
<edge id="e1" source="n0" target="n0">
<data key="d10">
<y:QuadCurveEdge straightness="0.1">
<y:Path sx="0.0" sy="-25.21075439453125" tx="180.0" ty="-25.21075439453125"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
</y:QuadCurveEdge>
</data>
</edge>
<edge id="e2" source="n19" target="n11">
<data key="d10">
<y:QuadCurveEdge straightness="0.1">
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="-4.5">
<y:Point x="729.0375530870485" y="432.349506688"/>
<y:Point x="758.8564330870486" y="468.349506688"/>
<y:Point x="707.8564330870486" y="540.0"/>
<y:Point x="374.9999999999999" y="510.0"/>
<y:Point x="252.0" y="600.0"/>
<y:Point x="100.84375" y="672.0"/>
<y:Point x="110.84375" y="490.5"/>
<y:Point x="86.78047040897027" y="456.0"/>
</y:Path>
<y:LineStyle color="#993300" type="line" width="2.0"/>
<y:Arrows source="standard" target="none"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="38.06640625" x="-372.4797778992119" y="140.76149541876873">LEMO<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="left" ratio="0.1808626270029538" segment="4"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
</y:QuadCurveEdge>
</data>
</edge>
<edge id="e3" source="n11" target="n11">
<data key="d10">
<y:QuadCurveEdge straightness="0.1">
<y:Path sx="0.0" sy="-10.5" tx="-6.0625" ty="-10.5"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
</y:QuadCurveEdge>
</data>
</edge>
<edge id="e4" source="n6" target="n17">
<data key="d10">
<y:QuadCurveEdge straightness="0.1">
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="414.16144383152425" y="460.5"/>
<y:Point x="414.16144383152425" y="390.0"/>
<y:Point x="300.0" y="390.0"/>
<y:Point x="300.0" y="429.236546688"/>
<y:Point x="679.1041376630485" y="429.236546688"/>
</y:Path>
<y:LineStyle color="#993300" type="line" width="2.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="31.9375" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="38.06640625" x="41.719393790762126" y="-15.96875">
LEMO
<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="center" ratio="0.162855677442243" segment="0"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
</y:QuadCurveEdge>
</data>
</edge>
<edge id="e5" source="n18" target="n1">
<data key="d10">
<y:QuadCurveEdge straightness="0.1">
<y:Path sx="0.0" sy="-22.165948275862092" tx="-53.16666666666691" ty="-71.50053333333324">
<y:Point x="107.69791666666654" y="366.5"/>
<y:Point x="107.69791666666654" y="388.99946666666676"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
</y:QuadCurveEdge>
</data>
</edge>
<edge id="e6" source="n18" target="n20">
<data key="d10">
<y:QuadCurveEdge straightness="0.1">
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="-22.165948275862092">
<y:Point x="46.84375" y="341.6659482758621"/>
<y:Point x="90.0" y="210.0"/>
<y:Point x="300.0" y="210.0"/>
<y:Point x="271.6900969157621" y="300.0"/>
</y:Path>
<y:LineStyle color="#FFCC00" type="line" width="3.0"/>
<y:Arrows source="short" target="short"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="80.37109375" x="97.82549285888672" y="-165.46072387695312">Optical Fiber<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="center" ratio="0.5" segment="2"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
</y:QuadCurveEdge>
</data>
</edge>
</graph>
<data key="d0">
<y:Resources>
<y:Resource id="1">&lt;?xml version="1.0"?&gt;&lt;svg width="637.79773" height="337.57849" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"&gt;
&lt;title&gt;Oscilloscope-CW&lt;/title&gt;
&lt;defs&gt;
&lt;linearGradient id="linearGradient48363"&gt;
&lt;stop stop-color="#b3b3b3" id="stop48365" offset="0"/&gt;
&lt;stop stop-color="#666666" id="stop48367" offset="1"/&gt;
&lt;/linearGradient&gt;
&lt;linearGradient y2="0.634148" x2="1.003575" y1="-0.312812" x1="0.133198" id="linearGradient49174" xlink:href="#linearGradient48363"/&gt;
&lt;/defs&gt;
&lt;metadata id="metadata47336"&gt;image/svg+xmlOscilloscopeOscilloscopeelectronic equipmentscientific equipmentmothinator2009-11-02&lt;/metadata&gt;
&lt;g&gt;
&lt;title&gt;Layer 1&lt;/title&gt;
&lt;rect fill="url(#linearGradient49174)" stroke="#4d4d4d" stroke-width="16" transform="matrix(0, 1, -1, 0, 0, 0)" ry="60.035645" y="-629.79774" x="7.99995" height="621.79773" width="321.57849" id="rect47341"/&gt;
&lt;rect fill="#008080" stroke="#333333" stroke-width="8.237989" id="rect48116" width="318.20496" height="245.96449" x="39.154156" y="33.86382" ry="11.534249"/&gt;
&lt;g transform="matrix(0.771548, 0, 0, 0.587796, 97.5802, 153.855)" id="g13468"&gt;
&lt;path fill="none" stroke="#000000" stroke-width="2" d="m29.606449,-195.290573l0,400" id="path13470"/&gt;
&lt;path fill="none" stroke="#000000" stroke-width="2" d="m129.606445,-195.290573l0,400" id="path13472"/&gt;
&lt;path fill="none" stroke="#000000" stroke-width="2" d="m229.606445,-195.290573l0,400" id="path13474"/&gt;
&lt;/g&gt;
&lt;g transform="matrix(0.771548, 0, 0, 0.587796, 97.5802, 153.855)" id="g13476"&gt;
&lt;path fill="none" stroke="#000000" stroke-width="2" d="m-70.393547,-95.290573l399.999992,0" id="path13478"/&gt;
&lt;path fill="none" stroke="#000000" stroke-width="2" d="m-70.393547,4.70943l399.999992,0" id="path13480"/&gt;
&lt;path fill="none" stroke="#000000" stroke-width="2" d="m-70.393547,104.709427l399.999992,0" id="path13482"/&gt;
&lt;/g&gt;
&lt;rect transform="matrix(0.771548, 0, 0, 0.587796, 97.5802, 153.855)" fill="none" stroke="#000000" stroke-width="3.009044" ry="7.9579" width="400.45462" height="402.57559" y="-194.192606" x="-70.389574" id="rect13494"/&gt;
&lt;g transform="matrix(0.771548, 0, 0, 0.587796, 97.5802, 153.855)" id="g13484"&gt;
&lt;path fill="none" stroke="#000000" d="m-20.393551,-195.290573l0,400" id="path13486"/&gt;
&lt;path fill="none" stroke="#000000" d="m79.606453,-195.290573l0,400" id="path13488"/&gt;
&lt;path fill="none" stroke="#000000" d="m179.606445,-195.290573l0,400" id="path13490"/&gt;
&lt;path fill="none" stroke="#000000" d="m279.606445,-195.290573l0,400" id="path13492"/&gt;
&lt;/g&gt;
&lt;g id="g2969"&gt;
&lt;path fill="#4d4d4d" stroke="#333333" stroke-width="6.784148" d="m412.249817,58.431919l162.53949,0c7.923279,0 14.451782,12.034107 14.638,26.982258l0.87915,70.582664c0.186157,14.948181 -6.042603,26.9823 -13.96582,26.9823l-162.53949,0c-7.923218,0 -14.451721,-12.034119 -14.637939,-26.9823l-0.87915,-70.582664c-0.186218,-14.948151 6.042542,-26.982258 13.965759,-26.982258z" id="rect48383"/&gt;
&lt;g id="g2943"&gt;
&lt;rect fill="#cccccc" stroke="#333333" stroke-width="0.834242" id="rect48387" width="20.809734" height="13.088612" x="415.388478" y="73.276472" ry="2.755498" transform="matrix(1, 0, -0.0101036, 0.999949, 0, 0)"/&gt;
&lt;use fill="#cccccc" stroke="#333333" height="1052.3622" width="744.09448" id="use48607" xlink:href="#rect48387" y="26.589399" x="0.000002"/&gt;
&lt;use fill="#cccccc" stroke="#333333" height="1052.3622" width="744.09448" id="use48609" xlink:href="#rect48387" y="53.178699" x="0.000002"/&gt;
&lt;use fill="#cccccc" stroke="#333333" height="1052.3622" width="744.09448" id="use48611" xlink:href="#rect48387" y="0.000001" x="44.698486"/&gt;
&lt;use fill="#cccccc" stroke="#333333" height="1052.3622" width="744.09448" id="use48613" xlink:href="#rect48387" y="26.589399" x="44.698486"/&gt;
&lt;use fill="#cccccc" stroke="#333333" height="1052.3622" width="744.09448" id="use48615" xlink:href="#rect48387" y="53.178699" x="44.698486"/&gt;
&lt;use fill="#cccccc" stroke="#333333" height="1052.3622" width="744.09448" id="use48617" xlink:href="#rect48387" y="0.000001" x="89.39711"/&gt;
&lt;use fill="#cccccc" stroke="#333333" height="1052.3622" width="744.09448" id="use48619" xlink:href="#rect48387" y="26.589399" x="89.39711"/&gt;
&lt;use fill="#cccccc" stroke="#333333" height="1052.3622" width="744.09448" id="use48623" xlink:href="#rect48387" y="0.000001" x="134.096008"/&gt;
&lt;use fill="#cccccc" stroke="#333333" height="1052.3622" width="744.09448" id="use48625" xlink:href="#rect48387" y="26.589399" x="134.096008"/&gt;
&lt;use fill="#cccccc" stroke="#333333" height="1052.3622" width="744.09448" id="use48619-9" xlink:href="#rect48387" y="52.419678" x="89.832214"/&gt;
&lt;use fill="#cccccc" stroke="#333333" height="1052.3622" width="744.09448" id="use48625-7" xlink:href="#rect48387" y="52.419678" x="134.531006"/&gt;
&lt;use fill="#cccccc" stroke="#333333" height="1052.3622" width="744.09448" id="use48609-0" xlink:href="#rect48387" y="79.169403" x="0.622102"/&gt;
&lt;use fill="#cccccc" stroke="#333333" height="1052.3622" width="744.09448" id="use48615-2" xlink:href="#rect48387" y="79.169403" x="45.320702"/&gt;
&lt;use fill="#cccccc" stroke="#333333" height="1052.3622" width="744.09448" id="use48619-9-2" xlink:href="#rect48387" y="78.4104" x="90.454285"/&gt;
&lt;use fill="#cccccc" stroke="#333333" height="1052.3622" width="744.09448" id="use48625-7-3" xlink:href="#rect48387" y="78.4104" x="135.153015"/&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;g id="g3125-9"&gt;
&lt;g id="g2982-8-0"&gt;
&lt;path fill="#cccccc" fill-rule="nonzero" stroke="#4d4d4d" stroke-width="1.891105" stroke-miterlimit="4" stroke-dashoffset="0" d="m482.076782,227.80307c-19.445709,-0.536743 -30.167328,28.624756 -15.448517,42.361053c12.662109,14.296509 38.398285,4.786224 39.307953,-15.137634c1.503784,-14.222748 -10.287781,-28.201691 -23.859436,-27.223419z" id="path47347-2-4-0"/&gt;
&lt;/g&gt;
&lt;g fill="#999999" id="g2982-7-2"&gt;
&lt;path fill="#999999" stroke="#000000" stroke-width="1px" d="m502.008179,252.728928c0,10.544388 -8.547974,19.0923 -19.092285,19.0923c-10.544434,0 -19.092407,-8.547913 -19.092407,-19.0923c0,-10.544403 8.547974,-19.092316 19.092407,-19.092316c10.544312,0 19.092285,8.547913 19.092285,19.092316" id="path3035-2"/&gt;
&lt;/g&gt;
&lt;g fill="#f2f2f2" id="g2982-7-4-6" transform="matrix(0.765081, 0, 0, 0.765081, 333.094, 132.522)"&gt;
&lt;path fill="#f2f2f2" stroke="#000000" stroke-width="1px" d="m214.916138,157.066483c0,10.544403 -8.547913,19.092316 -19.092285,19.092316c-10.544434,0 -19.092407,-8.547913 -19.092407,-19.092316c0,-10.544403 8.547974,-19.092331 19.092407,-19.092331c10.544373,0 19.092285,8.547928 19.092285,19.092331z" id="path3035-1-9"/&gt;
&lt;/g&gt;
&lt;path fill="#000000" stroke="#000000" id="path3123-0" d="m486.772644,252.648468c0,2.13031 -1.726929,3.857239 -3.857178,3.857239c-2.130371,0 -3.8573,-1.726929 -3.8573,-3.857239c0,-2.13028 1.726929,-3.857239 3.8573,-3.857239c2.130249,0 3.857178,1.726959 3.857178,3.857239z"/&gt;
&lt;/g&gt;
&lt;g transform="matrix(0.769281, 0, 0, 0.882181, -455.343, 73.985)" id="g2939-2"/&gt;
&lt;g id="g3125"&gt;
&lt;g id="g2982-8"&gt;
&lt;path fill="#cccccc" fill-rule="nonzero" stroke="#4d4d4d" stroke-width="1.891105" stroke-miterlimit="4" stroke-dashoffset="0" d="m405.454834,227.80307c-19.44574,-0.536743 -30.167358,28.624756 -15.448547,42.361053c12.662109,14.296509 38.398285,4.786224 39.307922,-15.137634c1.503815,-14.222748 -10.28772,-28.201691 -23.859375,-27.223419z" id="path47347-2-4"/&gt;
&lt;/g&gt;
&lt;g fill="#999999" id="g2982-7"&gt;
&lt;path fill="#999999" stroke="#000000" stroke-width="1px" d="m425.386108,252.728928c0,10.544388 -8.547852,19.0923 -19.092285,19.0923c-10.544434,0 -19.092285,-8.547913 -19.092285,-19.0923c0,-10.544403 8.547852,-19.092316 19.092285,-19.092316c10.544434,0 19.092285,8.547913 19.092285,19.092316" id="path3035"/&gt;
&lt;/g&gt;
&lt;g fill="#f2f2f2" id="g2982-7-4" transform="matrix(0.765081, 0, 0, 0.765081, 333.094, 132.522)"&gt;
&lt;path fill="#f2f2f2" stroke="#000000" stroke-width="1px" d="m114.767326,157.066483c0,10.544403 -8.547905,19.092316 -19.092278,19.092316c-10.544426,0 -19.092407,-8.547913 -19.092407,-19.092316c0,-10.544403 8.547981,-19.092331 19.092407,-19.092331c10.544373,0 19.092278,8.547928 19.092278,19.092331z" id="path3035-1"/&gt;
&lt;/g&gt;
&lt;path fill="#000000" stroke="#000000" id="path3123" d="m410.150696,252.648468c0,2.13031 -1.726959,3.857239 -3.857239,3.857239c-2.13031,0 -3.857239,-1.726929 -3.857239,-3.857239c0,-2.13028 1.726929,-3.857239 3.857239,-3.857239c2.13028,0 3.857239,1.726959 3.857239,3.857239z"/&gt;
&lt;/g&gt;
&lt;g id="g3125-9-3"&gt;
&lt;g id="g2982-8-0-7"&gt;
&lt;path fill="#cccccc" fill-rule="nonzero" stroke="#4d4d4d" stroke-width="1.891105" stroke-miterlimit="4" stroke-dashoffset="0" d="m558.699768,227.760971c-19.44574,-0.536743 -30.167297,28.624741 -15.448547,42.361069c12.662109,14.296509 38.398315,4.786224 39.307983,-15.13765c1.503784,-14.222748 -10.287781,-28.201691 -23.859436,-27.223419z" id="path47347-2-4-0-3"/&gt;
&lt;/g&gt;
&lt;g fill="#999999" id="g2982-7-2-5"&gt;
&lt;path fill="#999999" stroke="#000000" stroke-width="1px" d="m578.631104,252.686844c0,10.544388 -8.547852,19.0923 -19.092285,19.0923c-10.544434,0 -19.092285,-8.547913 -19.092285,-19.0923c0,-10.544403 8.547852,-19.092346 19.092285,-19.092346c10.544434,0 19.092285,8.547943 19.092285,19.092346" id="path3035-2-5"/&gt;
&lt;/g&gt;
&lt;g fill="#f2f2f2" id="g2982-7-4-6-1" transform="matrix(0.765081, 0, 0, 0.765081, 333.094, 132.522)"&gt;
&lt;path fill="#f2f2f2" stroke="#000000" stroke-width="1px" d="m315.066406,157.011459c0,10.544403 -8.547913,19.092316 -19.092285,19.092316c-10.544434,0 -19.092407,-8.547913 -19.092407,-19.092316c0,-10.544403 8.547974,-19.092346 19.092407,-19.092346c10.544373,0 19.092285,8.547943 19.092285,19.092346z" id="path3035-1-9-8"/&gt;
&lt;/g&gt;
&lt;path fill="#000000" stroke="#000000" id="path3123-0-1" d="m563.395691,252.606384c0,2.13028 -1.72699,3.857239 -3.8573,3.857239c-2.130249,0 -3.857178,-1.726959 -3.857178,-3.857239c0,-2.13031 1.726929,-3.857239 3.857178,-3.857239c2.13031,0 3.8573,1.726929 3.8573,3.857239z"/&gt;
&lt;/g&gt;
&lt;line id="svg_1" y2="218.421509" x2="350.202271" y1="215.421509" x1="46.202271" stroke-linecap="round" stroke-linejoin="round" stroke-width="5.471832" stroke="#c8ab37" fill="none" opacity="0.5"/&gt;
&lt;line id="svg_2" y2="214.421509" x2="84.202271" y1="98.421509" x1="84.202271" stroke-linecap="round" stroke-linejoin="round" stroke-width="5.471832" stroke="#c8ab37" fill="none"/&gt;
&lt;line id="svg_4" y2="216.421509" x2="314.202271" y1="100.421509" x1="314.202271" stroke-linecap="round" stroke-linejoin="round" stroke-width="5.471832" stroke="#c8ab37" fill="none"/&gt;
&lt;/g&gt;
&lt;/svg&gt;</y:Resource>
</y:Resources>
</data>
</graphml>
......@@ -389,51 +389,161 @@ Once you have the file you need to install them to your system in order to make
>:$ sudo cp -v firmware/*.bin /lib/firmware/fmc
~~~~~~~~~~~~~
### Automatic installation
You can also use the script `wr-ssk-get` in `wr-starting-kit/scripts` folder
to ease the installation. `sudo` is required
~~~~{.sh}
## Fetch and install the firmware
>:$ scripts/wr-ssk-get --all
~~~~~~~~~~~~~~
[^version]: The HDL binaries (gateware) came from other project, you can find in
the [Developers Section](#quick-start-guide-for-developers) where to obtain them and
how to compile them.
[^version]: The HDL binaries (gateware) came from other project, you can find in
the [Developers Section](#quick-start-guide-for-developers) where to obtain them and
how to compile them.
Loading the driver
------------------------
------------------------
To enable the wr-nic you should execute the modprobe[^errmodprobe] command to load everything
~~~~{.sh}
>:$ sudo modprobe spec
>:$ sudo modprobe wr-nic
~~~~~~~~
[^errmodprobe]: We have found a problem in some distribution with `modprobe` command.
[^errmodprobe]: We have found a problem in some distribution with `modprobe` command.
You should use `insmod` instead and look at the [Known Bugs sections](#known-bugs).
You should expect to obtain one (or two) new interface(s):
You should expect to obtain two (or one) new interface(s):
~~~~{.sh}
>:$ ifconfig -a | grep wr
wr0 Link encap:Ethernet HWaddr XX:XX:XX:XX:XX:XX
wr0 Link encap:Ethernet HWaddr XX:XX:XX:XX:XX:XX
~~~~~~~~~~~~
If it is not the case you might have an empty EEPROM that need to be
written with proper value as explained in the next section.
Creating Valid EEPROM
----------------------
> ***Notes***: If you already have the new interfaces wrX while doing
`ifconfig`, this mean that you can **skip** this section.
On older manufactured [FMC-DIO] (before 2014), the EEPROM was not
configured with the proper information
which is now needed by the fmc-bus to identify properly which [FMC] has been plugged
into the [SPEC].
Therefore if you try to load the kernel driver
~~~~~{.sh}
>:$ sudo modprobe spec
~~~~~~~~~~
you might obtain the following warning on `dmesg`:
~~~~~{.sh}
>:$ dmesg
...
spec 0000:05:00.0: FPGA programming successful
spec 0000:05:00.0: mezzanine 0
EEPROM has no FRU information
~~~~~~~~~~
This information, called the FRU, contains the type of FMC board, its serial number, etc.
You can generate in two different way:
### Automatic
A small script has been created for this procedure and thus you just need to call it as below:
scripts/wr-ssk-get -w
Then the script will detect if you have one or more [FMC-DIO] with empty
eeprom. If it is the case it will ask to enter a S/N.
> ***Tip***: The S/N is labeled on the back side of the
[FMC-DIO] board.
If for instance you have one with the label `7S-FMCDIO5ch-v1.0-S3-058` and
you can't read the label on the second one, we suggest you to fill the input as below:
Found 2 FMC board(s) with empty EEPROM
Enter S/N for board fmc-0500 in the format xx-XXX (or 0) : 03-058
...
Enter S/N for board fmc-0b00 in the format xx-XXX (or 0) : 0
Be aware that the order in the bus "normally" respect the order that
the board are plugged into the PCIe of the mother-board (From up to down).
### Manual
If you prefer to perform these steps manually you can try the
following procedure:
~~~~~{.sh}
##First you need to go in the fru-generator folder
>:$ cd spec-sw/fmc-bus/tools/
## And compile the library
>:$ make
## Then, find out on which bus id you have the boards
>:$ ls /sys/bus/fmc/devices/
fmc-0500 fmc-0b00
### Enter root mode in the terminal
>:$ sudo bash
## Write the eeprom for fmc-0500: the first/the top one fmc board.
>:# FRU_VENDOR="CERN" FRU_NAME="FmcDio5cha" FRU_PART="EDA-02408-V2-0" \
./fru-generator -s 7S-DIO-v2-S03-058 > /sys/bus/fmc/devices/fmc-0500/eeprom
## Write the eeprom for fmc-0b00: the 2nd/the bottom one fmc board.
>:# FRU_VENDOR="CERN" FRU_NAME="FmcDio5cha" FRU_PART="EDA-02408-V2-0" \
./fru-generator -s 7S-DIO-v2-S00-000 > /sys/bus/fmc/devices/fmc-0b00/eeprom
## Finally, Go back to user and starting-kit root directory
>:# exit
>:$ cd -
~~~~~~~~~~
Don't forget to modify the bus id: `fmc-XXXX` and the S/N
`7S-DIO-v2-Sxx-XXX` with your specific devices setup.
### Reload the kernel driver
Once you have correctly written (Auto or Manual) the EEPROM of the [FMC-DIO], you need
to reload the kernel driver by doing this
~~~~{.sh}
>:$ sudo rmmod spec
>:$ sudo modprobe spec
~~~~~~~~~~
you should now obtain something like this on `dmesg`:
~~~~~{.sh}
...
[269290.520027] spec 0000:05:00.0: mezzanine 0
[269290.520035] Manufacturer: CERN
[269290.520038] Product name: FmcDio5cha
...
[269291.086221] spec 0000:0b:00.0: mezzanine 0
[269291.086228] Manufacturer: CERN
[269291.086230] Product name: FmcDio5cha
...
~~~~~~~~
Setting Master & Slave using White Rabbit Core
=============================================
A "[SPEC+FMCDIO]" board is considered as a slave node, however in a standard
White Rabbit network the synchronization is done using a master such
White Rabbit network the synchronization is done using a master such
as a White Rabbit Switch [WRS].
In order to enable the synchronization capabilities we need to set up one board in master mode
In order to enable the synchronization capabilities we need to set up one board in master mode
(faking to be a [WRS]) and the other one in slave mode (default mode). This is done through the
shell of White Rabbit Core that allows this functionality among others.
......@@ -441,45 +551,45 @@ shell of White Rabbit Core that allows this functionality among others.
Connect to the UARTs
-----------------------
### Physical UART
To configure the [SPEC] board in master/slave mode you need to access to the White Rabbit Core (WRC) through the UART (virtual or physical).
To configure the [SPEC] board in master/slave mode you need to access to the White Rabbit Core (WRC) through the UART (virtual or physical).
### Physical UART
To access to the physical, you first need to connect the mini-USB of the [SPEC] to your PC. Then, you need to run
a terminal emulator[^sudomc] (such as minicom) on the device created while plug-in the USB cable.
a terminal emulator[^sudomc] (such as minicom) on the device created while plug-in the USB cable.
~~~~~{.sh}
>:$ sudo minicom --device=/dev/ttyUSB0 -b 115200
>:$ sudo minicom --device=/dev/ttyUSB1 -b 115200
~~~~~~~~~~
>:$ sudo minicom --device=/dev/ttyUSB0 -b 115200
>:$ sudo minicom --device=/dev/ttyUSB1 -b 115200
~~~~~~~~~~
> ***Notes:*** ttyUSB0 might not correspond to your first board, and ttyUSB1 to the second one.
> ***Notes:*** ttyUSB0 might not correspond to your first board, and ttyUSB1 to the second one.
This depends on how you have plugged the USB cable to your USB of your machine.
### Virtual UART
An easier way to perform this operation is to access to the virtual
An easier way to perform this operation is to access to the virtual
UART of the [SPEC] board by using the spec-vuart tool.
You first need to know the ***bus_id*** of your board
You first need to know the `bus_id` of your board
> ***Notes:*** The VUART can not work if the USB is already connected as the Physical UART
has the priority.
~~~~~{.sh}
>:$ lspci | grep CERN
05:00.0 Non-VGA unclassified device: CERN/ECP/EDU Device 018d (rev 03)
0b:00.0 Non-VGA unclassified device: CERN/ECP/EDU Device 018d (rev 03)
~~~~~~~~~~
This means that your first board (wr0) is at **05*:00.0 and the second one (wr1) is at **0b**:00.0
This means that your first board (wr0) is at **05**:00.0 and the second one (wr1) is at **0b**:00.0
Thus, for each board you can open a terminal and run the following command:
~~~~~{.sh}
>:$ sudo ./tools/spec-vuart -b 05 #For the first SPEC board
>:$ sudo ./tools/spec-vuart -b 0b #For the second SPEC board
~~~~~~~~~~
Be aware that if you try to remove the spec kernel modules with the virtual UART
> ***Warning:*** Be aware that if you try to remove the spec kernel modules with the virtual UART
activated, your PC will hangs and thus you will need to reboot. You must close
the virtual UART before doing this kind of operation.
......@@ -493,7 +603,7 @@ The White Rabbit Core Shell
----------------------------
Once you are in the UART you should obtain the White Rabit Core console (`wrc#`).
A complete reference of the shell commands is included in the [wrpc.pdf] manual or
A complete reference of the shell commands is included in the [wrpc.pdf] manual or
you can read them in the [Wiki](http://www.ohwr.org/projects/wr-cores/wiki/Wrpc_shell)
The most useful commands are repeated here for your convenience
......@@ -504,10 +614,10 @@ The most useful commands are repeated here for your convenience
* `ptp stop`
* `ptp start`
For the tutorial we will use the following names:
For the tutorial we will use the following names:
* `wrc1#` for `wrc#` console of the main board (wr0/busID=0x0200)
* `wrc2#` for `wrc#` console of the second board (wr1/busID=0x0300)
* `wrc1#` for `wrc#` console of the main board (wr0/busID=0x0500)
* `wrc2#` for `wrc#` console of the second board (wr1/busID=0x0b00)
Configure in slave & master mode
......@@ -520,20 +630,20 @@ Now we can perform the following operation:
~~~~~{.sh}
wrc1# sfp detect
AXGE-3454-0531 #purple
wrc1# sfp match
SFP matched, dTx=46407, dRx=167843, alpha=-73622176
wrc1# sfp match
SFP matched, dTx=46407, dRx=167843, alpha=-73622176
~~~~~~~
~~~~~{.sh}
wrc2# sfp detect
AXGE-1254-0531 #blue
wrc1# sfp match
SFP matched, dTx=46407, dRx=167843, alpha=73622176
wrc1# sfp match
SFP matched, dTx=46407, dRx=167843, alpha=73622176
~~~~~~~
[^sfpdetectbug]: If you obtain an error such as **Could not match to DB** you
might add your own SFP parameters. List your actual sfp database with `sfp show`
and check the [wrpc.pdf] that explain how to add SFPs parameters.
[^sfpdetectbug]: If you obtain an error such as **Could not match to DB** you
might add your own SFP parameters. List your actual sfp database with `sfp show`
and check the [Calibration Section](#calibration) that explain how to add SFPs parameters.
* Setup one board in master (the one with the purple SFP)
......@@ -543,7 +653,7 @@ SPLL_Init: running as Free-running Master, 1 ref channels, 2 out channels
Locking PLL...
~~~~~~~
* And let the other one in slave mode (since slave mode is the default
* And let the other one in slave mode (since slave mode is the default
mode, this should not be necessary but you might have set it before in master mode)
~~~~~{.sh}
......@@ -572,7 +682,7 @@ And you should obtain the following message on the slave board:
Adjust: counter = nanoseconds [+343914800]
servo:busy
Finally you can run the WRC shell in `gui` mode to obtain more information
Finally you can run the WRC shell in `gui` mode to obtain more information
~~~~~{.sh}
wrc2# gui
......@@ -584,14 +694,14 @@ Esc = exit
TAI Time: Thu, Jan 1, 1970, 0:30:15
wru1: Link up (RX: 766, TX: 340), mode: WR Slave Locked Calibrated
wru1: Link up (RX: 766, TX: 340), mode: WR Slave Locked Calibrated
Synchronization status:
Servo state: TRACK_PHASE
Phase tracking: ON
Synchronization source: wru1
Aux clock status:
Aux clock status:
Timing parameters:
......@@ -602,19 +712,19 @@ Slave PHY delays: TX: 46407 ps, RX: 167843 ps
Total link asymmetry: 7237 ps
Cable rtt delay: 262857 ps
Clock offset: 2 ps
Phase setpoint: 7268 ps
Skew: 2 ps
Manual phase adjustment: 0 ps
Update counter: 117
Phase setpoint: 7268 ps
Skew: 2 ps
Manual phase adjustment: 0 ps
Update counter: 117
--
~~~~~~~~~~~~~~~~~~
You can see that the slave node is locked, calibrated and that the phase tracking is enabled.
> ***Notes: *** We also recommand you to set up an init script if you do not want to repeat these operations at each
reboot. You can look at the [wrpc.pdf] for more information or use the `init show` command to check the
one you have running.
> ***Notes:*** We also recommand you to set up an init script if you do not want to repeat these operations at each
reboot. You can look at the [wrpc.pdf] for more information or use the `init show` command to check the
one you have running.
......@@ -633,14 +743,14 @@ In order to do this you should just execute:
And then check if they are mounted by doing
~~~~{.sh}
>:$ sudo ifconfig | grep wr
wr0 Link encap:Ethernet HWaddr 08:00:30:0d:e8:6b
wr1 Link encap:Ethernet HWaddr 08:00:30:0d:e4:cd
>:$ sudo ifconfig | grep wr
wr0 Link encap:Ethernet HWaddr 08:00:30:0d:e8:6b
wr1 Link encap:Ethernet HWaddr 08:00:30:0d:e4:cd
~~~~~~~~~~~~
> ***Notes:*** On the distributions that use gnome desktop (i.e, Ubuntu), the interfaces are automatically mounted by *gnome
network manager*, so you might not need to perform the last step.
> ***Notes:*** On the distributions that use gnome desktop (i.e, Ubuntu), the interfaces are automatically mounted by *gnome
network manager*, so you might not need to perform the last step.
Some Illustrative Experiments
......@@ -649,13 +759,13 @@ Some Illustrative Experiments
To perform the experiments we recommend you to plug the LEMO cable to your
oscilloscope by using the LEMO-BNC adapter provided in your package.
It is also recommended to follow the order of the tutorial since the
concepts that are intended to be described and tested are explained in
It is also recommended to follow the order of the tutorial since the
concepts that are intended to be described and tested are explained in
the same order as the experiments.
> **Notes:** Before each experiment you should make sure that you set
> **Notes:** Before each experiment you should make sure that you set
up your boards in *master/slave* mode and that the PTP daemons are running on both.
You cand find how to do it in subsection [4.3](#configure-in-slave-master-mode).
You cand find how to do it in subsection [4.3](#configure-in-slave-master-mode).
A basic explanation is included in [Frequently Added Questions](#frequently-added-questions) section (first one).
......@@ -663,12 +773,12 @@ Playing with the DIO channels
----------------------------------------------------------------------------------------
The first step to perform is to check if the [FMCDIO] channels are accessible using the installed driver.
In the `tools` subdirectory you will you find the `wr-dio-cmd` program,
In the `tools` subdirectory you will you find the `wr-dio-cmd` program,
that let you quickly test the I/O features of the [FMCDIO] boards
This is the general syntax of the command[^sudo]: `wr-dio-cmd <ifname> <cmd> [<arg> ...]`
The main commands correspond to: `mode, pulse & stamp`, and you can
The main commands correspond to: `mode, pulse & stamp`, and you can
find an extended description of
them in the [spec-sw.pdf:6.7][spec-sw.pdf] document.
......@@ -677,8 +787,8 @@ find an extended description of
### Setting the mode
The first thing is to set the correct mode for each channel; you can use a command that set the
mode for a specific channel[^dionum] or for all of them at the same
The first thing is to set the correct mode for each channel; you can use a command that set the
mode for a specific channel[^dionum] or for all of them at the same
time.
mode <channel> <mode> [<channel> <mode> ...]
......@@ -686,13 +796,17 @@ time.
The available modes are:
* `I/i`: Input
* `I/i`: Input
* `0/1`: Output, steady state fixed at `0` low or `1` high.
* `D/d`: DIO core output
* `P/p`: Output PPS (Pulse Per Second) Generator from PTP core
* `C/c`: Clock Input to PTP core: (only for channel 4, allow to input a high frequency signal without interruption throwing)
* `P/p` (Channel 0): Output PPS (Pulse Per Second) Generator from PTP core.
* `C/c` (Channel 4): Clock Input to PTP core: allow to input a high frequency signal without interruption throwing
>> ***Note:*** If the Letter is capitalized the I/O channel is connected to 50-ohm termination resistor, otherwise it is not. i.e, The `I` is input with 50-ohm termination resistor and `i` is without it.
> ***Note:*** The first channel (channel 0) has been modified and now support only the P/p as output
mode. You will not be able to use D,d,1,0 modes.
>> Notes: If the Letter is capitalized the I/O channel is connected to 50-ohm termination resistor, otherwise it is not. i.e, The `I` is input with 50-ohm termination resistor and `i` is without it.
For example you can set it up like this
......@@ -700,50 +814,38 @@ For example you can set it up like this
## Configure channel 0 as input with termination, 1 as input, 4 as fixed low
>:$ sudo ./tools/wr-dio-cmd wr0 mode Ii--0
~~~~~~~~~~~~~~~~
> ***Notes:*** please note that the `pulse` command activates the [FMCDIO] mode (without changing the termination)
### Default Mode
After reprogramming/rebooting the FGPA, the channels are set up by default as:
#. Channel 0 (connector #1) low state: `0`.
#. Channel 1 (connector #2) same as ch0: low state: `0`.
#. Channel 2 (connector #3) output a PPS signal: `P/p`.
#. Channel 3 (connector #4) is configured as input with termination impedance: `P/p`.
#. Channel 0 (connector #1) output a PPS signal: `p`
#. Channel 1 (connector #2) low state: `0`.
#. Channel 2 (connector #3) same as ch1: low state: `0`
#. Channel 3 (connector #4) is configured as input with termination impedance: `i`.
#. Channel 4 (connector #5) is in Clock Mode with termination: `C`.
To reset to the default mode you can reset/reprogram the FPGA or set it back with:
~~~~~{.sh}
## Revert back to default mode
>:$ sudo ./tools/wr-dio-cmd wr0 mode 00PIC
~~~~~~~~~~~~~~~~
### Disabling PPS on channel 2
> ***Important:*** For the following experiments we recommend to disable PPS mode on channel 2
this can easily be done by setting it on another working mode.
~~~~~{.sh}
## Disable PPS on channel 2
>:$ sudo ./tools/wr-dio-cmd wr0 mode 2 0
>:$ sudo ./tools/wr-dio-cmd wr0 mode p00ic.
~~~~~~~~~~~~~~~~
### Generating pulse
### Generating pulse
The command is used in the following formats:
pulse <channel> <duration> <when> [<period> <count>]
You should plug the LEMO cable in the connector #5 (channel 4), and connect the BNC adapter to your oscilloscope.
![Connecting LEMO on connector #5 (channel 4)](ssk_lemo.jpg)
Finally you need to active a trigger pulse in your oscilloscope. Then you can try the following commands:
Finally you need to active a trigger pulse in your oscilloscope. Then you can try the following commands:
~~~~~{.sh}
## Set channel 4 as Input
......@@ -757,10 +859,11 @@ Finally you need to active a trigger pulse in your oscilloscope. Then you can tr
## Pulse for 1ms at 17:00 today
## Set the datetime of the next event (60 seconds from now)
## NOTE: this only work if the date is correctly set in the master SPEC,
## NOTE: this only work if the date is correctly set in the master SPEC,
>:$ sudo ./tools/wr-dio-cmd wr0 pulse 4 .001 $(date +%s --date 17:00)
~~~~~~~~
> ***Note:*** please note that the `pulse` command activates the [FMCDIO] mode (without changing the termination)
### Time stamping output
......@@ -780,25 +883,25 @@ ch 4, 534.500000000
ch 4, 542.500000000
~~~~~~~~
> ***Notes:*** If you see other timestampings messages coming from channel 2 this mean you don't
> ***Notes:*** If you see other timestampings messages coming from channel 2 this mean you don't
have disable the PPS mode. Check [Disabling PPS](#disabling-pps-on-channel-2) section.
### Time stamping input & output.
The idea here, is to create a pulse from one [FMCDIO] and to timestamp it as local
and remote input. Then we can compare both time stamps and measure the
The idea here, is to create a pulse from one [FMCDIO] and to timestamp it as local
and remote input. Then we can compare both time stamps and measure the
interval between generation and reception of the pulse.
The configuration is done as indicated in the figure below:
![Time-stamping configuration](ssk_playdio.png)
![Time-stamping configuration](img/ssk_playdio.png)
~~~~~{.sh}
## Configure 1 & 5 as ouput and channel 3 as input with termination on wr0.
>:$ sudo ./tools/wr-dio-cmd wr0 mode D-I-D
## Configure channel 2 as input on wr1
>:$ sudo ./tools/wr-dio-cmd wr1 mode 2 I
## Configure #2 & #5 (ch1 & ch4) as ouput and #3 (ch2) as input with termination on wr0.
>:$ sudo ./tools/wr-dio-cmd wr0 mode -DI-D
## Configure #4 (ch3) as input on wr1
>:$ sudo ./tools/wr-dio-cmd wr1 mode 3 I
## Then flush the previous timestamp
>:$ sudo ./tools/wr-dio-cmd wr0 stamp &> /dev/null
......@@ -806,89 +909,77 @@ The configuration is done as indicated in the figure below:
## Schedule the pulse to the next common event on two outputs
>:$ sudo ./tools/wr-dio-cmd wr0 pulse 0 .00001 +2
>:$ sudo ./tools/wr-dio-cmd wr0 pulse 1 .00001 +2
>:$ sudo ./tools/wr-dio-cmd wr0 pulse 4 .00001 +2
## Then (after 60s), you should run stamp on the wr0
>:$ sudo ./tools/wr-dio-cmd wr0 stamp
ch 0, 2267.500000000
ch 1, 2267.500000000
ch 2, 2267.500000008
ch 4, 2270.500000000
>:$ sudo ./tools/wr-dio-cmd wr1 stamp
ch 2, 2270.500000008
ch 3, 2270.500000008
~~~~~~~~~~~~~~~~~
We observe that locally (ouput=>ch0, input=>ch2) and remotely (output=>ch4, input=>ch2),
We observe that locally (ouput=>ch1, input=>ch2) and remotely (output=>ch4, input=>ch2),
the timestamp between sending a pulse and receiving is of 8 nanoseconds[^8ns] for both.
This is a very simple example to show how the two [SPEC]s are synchronized.
[^dionum]: The connector on the [FMC-DIO] panel are enumerated from #1 to #5 and correspond to the channel 0 to 4 on the `wr-dio-cmd`.
[^8ns]: The DIO core work at a frequency of 125Mhz, therefore the minimum difference between two timestamped events is of 8ns.
[^dionum]: The connector on the [FMC-DIO] panel are enumerated from #1 to #5 and correspond to the channel 0 to 4 on the `wr-dio-cmd`.
[^8ns]: The DIO core work at a frequency of 125Mhz, therefore the minimum difference between two timestamped events is of 8ns.
However with the next experiment you will find out that the synchronization is better.
Synchronization of PPS
----------------------------------------------------------------------------------------
This corresponds to the experiment from [spec-sw.pdf:6.8][spec-sw.pdf] document.
This corresponds to the experiment from [spec-sw.pdf:6.8][spec-sw.pdf] document.
Here we want to synchronize the PPS of the master and slave boards using WR protocol on a fiber.
### Setup
In order to perform a more illustrative experiment, this example should
In order to perform a more illustrative experiment, this example should
be done with two [SPEC+FMCDIO] boards separated by a 5km fiber
on two different PCs. However to simplify the experiments we are using 2m fiber cable and the two boards connected to the same PC. One channel of each board (channel 4 & 0) is connected to the oscilloscope using LEMO cable & adapter.
on two different PCs.
However to simplify the experiments we are using 2m fiber cable and the two boards connected to the same PC.
The first connector (ch 0) of each board output the PPS and is connected to the oscilloscope using LEMO cable & BNC adapter.
![Setup for the PPS synchronization](ssk_pps-setup.png)
![Setup for the PPS synchronization](img/ssk_pps-setup.png)
### Run PPS command
Once the synchronization is enabled, you just need to run the PPS from the command line
This program just fires a 1ms-long *pps* pulse on one of the output
channels.
Once the synchronization is enabled, you can see the PPS on channel 0
of both boards.
> ***Notes:*** To generate a PPS signal the PLL has to be lock. See "I can't generate a PPS signal" on [Frequently Added Questions](#frequently-added-questions) .
If you don't see this pulse, you might want to force the pulse mode:
~~~~~~{.sh}
## run pps on channel 4 of the default SPEC card
>:$ sudo ./tools/wr-dio-cmd wr0 mode 4 P
## run pps on channel 0 of the "first" card
>:$ sudo ./tools/wr-dio-cmd wr0 mode 0 p
## run pps on channel 0 of the "second" card
>:$ sudo ./tools/wr-dio-cmd wr1 mode 0 P
>:$ sudo ./tools/wr-dio-cmd wr1 mode 0 p
~~~~~~~~~~
### Result
The following two figures show the *pulse-per-second* signals
retrieved from two different *simple-DIO* cards.
retrieved from two different *simple-DIO* cards.
![Synchronization of the two PPS (5ns/div)](ssk_pps-res.jpg)
To avoid the unstable signal after the pps go high you can
To avoid the unstable signal after the pps go high you can
add a 50-ohm resistor termination if the oscilloscope allows it.
To stop the PPS you need to set the channel in any other mode. For instance, in output mode (low/high)
~~~~~{.sh}
sudo ./tools/wr-dio-cmd wr0 mode 4 0
sudo ./tools/wr-dio-cmd wr1 mode 0 0
~~~~~~~~
> ***Notes:*** In some cases, it
may happen that the leading edges differ by almost exactly 8ns; this
happens because in the *simple-DIO* all times are quantized by
8ns-long clock ticks. The differences in internal delays (which depend
on the carrier, the mezzanine and the FPGA binary), are not
self-measured and calibrated in this simple design and may appear in
the output after quantization.
The Network Interface Card (NIC) Synchronization
---------------------------------------
### Introduction
The *wr-nic* driver registers a Linux network interface card for
......@@ -900,9 +991,9 @@ addition to the PTP frames of *White Rabbit*, that remain
invisible to the host computer.
> ***Notes:*** If a user wants to use the WR-NIC on a real network to transfer
data he should assign an Interface address. However the *White Rabbit* synchronization happens at Ethernet
layer therefore no IP address is needed. Moreover if you want to communicate two WR-NIC boards that are on the same
computer you should not use an IP protocol because the data will never
data he should assign an Interface address. However the *White Rabbit* synchronization happens at Ethernet
layer therefore no IP address is needed. Moreover if you want to communicate two WR-NIC boards that are on the same
computer you should not use an IP protocol because the data will never
be put on the fiber since the computer knows
that the two IPs are on the same machine.
......@@ -911,7 +1002,7 @@ that the two IPs are on the same machine.
The [SPEC] Ethernet interface
supports hardware timestamping for user frames through the
standard Linux mechanisms. Time stamps are currently reported with
a resolution of 8ns only (*White Rabbit* does much better, but the code
a resolution of 8ns only (*White Rabbit* does much better, but the code
to illustrate this is not developed for this simple demo, yet).
Unfortunately the Linux mechanisms are not trivial: the application must
......@@ -921,7 +1012,7 @@ commands. Moreover, timestamps are returned to user space using the
*recvmsg* system call, which is more difficult to deal with than the
normal *send* or *recv* commands.
To simplify use of timestamps for Ethernet frames,
To simplify use of timestamps for Ethernet frames,
this package includes the `stamp-frame` program in the
`tools` directory. The program is a minimal implementation of the basic
time-synchronization protocols (like NTP and PTP), but excluding the
......@@ -991,8 +1082,8 @@ computer. For this reason, in order
to communicate the TX timestamp of a frame to your peer, you will need to
send another message which carries the departure time of the previous
frame. This further message is usually called *follow-up*,
and `stamp-frame` respects this tradition.
and `stamp-frame` respects this tradition.
......@@ -1005,38 +1096,38 @@ This experiment merges the concepts seen before with the [FMCDIO] channels and t
A typical application for *White Rabbit* (or any time
synchronization system) is being able to generate output signals at the
same time in different output boards; (in the framework of a
same time in different output boards; (in the framework of a
distributed instrumentation facility); another typical application is
time stamping input events.
Thus in these experiments we are going to transmit an external frequency in
Thus in these experiments we are going to transmit an external frequency in
the 100Hz range using the starting kit:
* The user supplies a ~100Hz square wave on the channel 0 of the master card.
* The **dio-ruler** on master host reads the UTC time of the rising edge of the external pulse upon IRQ.
* The user supplies a ~100Hz square wave on the channel 0 of the master card.
* The **dio-ruler** on master host reads the UTC time of the rising edge of the external pulse upon IRQ.
* Then the **dio-ruler** forwards it (as an **ioctl** structure) to its local and remote selected outputs.
* At the slave workstation the **dio-agent** waits to receive
* At the slave workstation the **dio-agent** waits to receive
timestamped **ioctl** order and passes it to the *DIO* driver.
* The DIO will generate a *1ms* pulse at the programmed time.
* The DIO will generate a *1ms* pulse at the programmed time.
* On the screen of the oscilloscope we should see a constant time offset between the two pulses.
The figure below illustrates how the connection must be done between the different components:
![Setup to transmit a 100Hz signal](ssk_100Hz.png)
### How does it work?
The example is made up of two programs: `wr-dio-agent` and `wr-dio-ruler`: the ruler rules and the agent acts only.
These programs transmit using raw Ethernet frames to force the optical fiber transmission when two boards are on the same machine.
It also transmits using broadcast addresses to avoid complication on
selecting to who it should be transmitted.
It also transmits using broadcast addresses to avoid complication on
selecting to who it should be transmitted.
The simplification adopted above, however, most likely prevents the programs from working within a more complex
network topology.
network topology.
> ***Notes:*** By using an IP protocol (i.e, UDP) the data will never enter the optical fiber between the two boards
> ***Notes:*** By using an IP protocol (i.e, UDP) the data will never enter the optical fiber between the two boards
because the OS see that the destination is local and therefore routes them directly to the receiver without using the sender.
The *agent* is a "dumb" agent in charge of forwarding *WR* packet to the *DIO* core.
......@@ -1045,8 +1136,8 @@ The *ruler* waits for timestamps to appear on a specific input channel;
when a positive-going edge occurs the *ruler* notifies it or replicates the edge on one or more outputs.
Each output can be local or remote, and can use a different delay from the input pulse.
For further details (deeper studies) the user is recommended to read the [spec-sw.pdf:6.8][spec-sw.pdf] document
and to also take a look at the source code of `wr-dio-agent` and `wr-dio-ruler`
For further details (deeper studies) the user is recommended to read the [spec-sw.pdf:6.8][spec-sw.pdf] document
and to also take a look at the source code of `wr-dio-agent` and `wr-dio-ruler`
> ***Notes:*** All pulses generation are driven by
......@@ -1057,9 +1148,9 @@ processing power of your computer and the load introduced by other
processes. For remote connections, you must also count the overhead
of network communication as well as transmission delays over
the fiber (a 10km fiber introduces a
delay of 50 microseconds).
delay of 50 microseconds).
[^loopback]:
[^loopback]:
### The setup
......@@ -1069,7 +1160,7 @@ Then we should run the "dumb" agent on the slave board in charge of forwarding *
>:$ sudo ./tool/wr-dio-agent wr1 &
~~~~~~~~~~
Then you need to connect the output of the generator[^fake100hz] to channel 0 of the master [SPEC+FMCDIO] board.
Then you need to connect the output of the generator[^fake100hz] to channel 1 of the master [SPEC+FMCDIO] board.
The generated waveform should be a 0-5V pulse at ~100Hz (5ms at 5V then 5ms at 0V)
......@@ -1085,7 +1176,7 @@ You should setup the channel 0 as input and check if the 100Hz signal is correct
>:$ sudo ./tools/wr-dio-cmd wr0 mode I-0--
## Retrieved the time stamped value
>:$ sudo ./tools/wr-dio-cmd wr0 stamp
>:$ sudo ./tools/wr-dio-cmd wr0 stamp
ch 0, 3573.281851462
ch 0, 3573.291851460
ch 0, 3573.301851460
......@@ -1098,17 +1189,17 @@ ch 0, 3573.341851454
Here we can see that we have correctly timestamped each 10ms (+/- 10ns)[^10ns].
[^10ns]: The 10 nanoseconds jitter is due to our waveform generators used in the experiments.
[^10ns]: The 10 nanoseconds jitter is due to our waveform generators used in the experiments.
This should disappear by using a good quality waveform generator.
Once you know that your input is correct, you need to capture each
Once you know that your input is correct, you need to capture each
event on channel 0 and replicate them with a delay of 1ms
on both the local (channel 3) and the remote card (channel 1)
on both the local (channel 3) and the remote card (channel 1)
~~~~~~{.sh}
## Set local3 as Output
>:$ sudo ./tools/wr-dio-cmd wr0 mode 3 D
>:$ sudo ./tools/wr-dio-cmd wr0 mode 3 D
## Set remote1 as Output (and disable 2)
>:$ sudo ./tools/wr-dio-cmd wr1 mode -D0--
......@@ -1154,17 +1245,17 @@ reprograms all output triggers at each input event. The output pulse is fixed at
### Two PCs example
This experiment is taken from the spec-sw document;
This experiment is taken from the spec-sw document;
we verified the tools and we think this is a good explanation of how to use them.
It shows how to use the *ruler* and *agent* on
two hosts, called `spusa` and `tornado`. It is pretty the same thing as the previous
experiment only that the board are now both named `wr0`.
experiment only that the board are now both named `wr0`.
![Transmit PPS between two PCs](ssk_txpps.png)
The input events on `spusa` are replicated to one local channel and two remote channels,
with a delay of 1ms. The input events in this case are from a *pulse-per-second* signal from
with a delay of 1ms. The input events in this case are from a *pulse-per-second* signal from
channel 0.
~~~~~{.sh}
......@@ -1197,11 +1288,131 @@ channel 0.
ch 4, 388.001000000
~~~~~~~~~~~~
Advanced used
==================
<!--TODO: Heat & Auto-calibration chapter -->
Connect to the WRS
----------------------
Improve calibration
-----------------------
http://www.ohwr.org/projects/white-rabbit/wiki/Calibration
SPEC+DIO as grandmaster
------------------------
In basic configuration your Master [SPEC] can use its internal
free-running oscillator as a time reference. However, you can also
discipline your Master [SPEC] with external 10 MHz and 1-PPS signal by
connecting them to the appropriate LEMO connectors of [FMC-DIO] board:
![Grandmaster setup](ssk_grandmaster.png)
The requirement for the applied signals are:
* ~[1.5V to 3V][^aroundval] without termination
* ~[2.5V to 4V] with 50Ohm termination.
* PPS pulse width must be at least one 10MHz period (>100ns).
[^aroundval]: These values are given on an indicative basis because they depend on the source and
connection you are using.
An example of typical signal generated for GM mode is displayed below:
* Green signal is PPS.
* Pink signal is 10MHz.
![Grandmaster signals](ssk_gm_signals.png)
Then in the wrc console just execute the following commands:
~~~~~~{.sh}
wrc# mode grandmaster
wrc# ptp start
~~~~~~~~~~~~~
And you should obtained:
~~~~~~{.sh}
SPLL_Init: running as GrandMaster, 1 ref channels, 2 out channels
PLL locking .................. LOCKED
~~~~~~~~~~~~~
For more information about grandmaster mode you can take a look at: [wr_external_reference.pdf].
This document has been written for the WR switch, but timing/accuracy/stability requirements are
similar for the SPECs.
By default the SPEC+DIO should be configured to be run in GM setup, but if you are not sure please
reset the default value. See [Default Mode](#default-mode) Section.
Run in standalone modes
----------------------------
You can also run GM in a full standalone mode in order to transmit WR clock without the need of a PC.
First you need to flash the SPEC with the latest bitstream you can find the package:
http://www.sevensols.com/dl/wr-nic/bin/latest_stable.tar.gz
To do so you need to generate a MSC file as follow:
Create PROM Files > SPI Flash > Single FPGA > 32M > MCS
And then, when asking for SPI/BPI, just add the `.msc` file and select
the corresponding SPI flash memory: `M25P32`.
Then:
* The setup of the cable is exactly the same as above, and you do not need to setup the mode because it is
correctly configured for GM by default at power up.
* Then you need to run grandmaster mode from wrc console, as above.
* (Optional) Finally, if you need to keep this configuration at power up, you can write a small script
on the EEPROM to boot in grandmaster mode.
~~~~~~{.sh}
wrc# init erase
wrc# init add ptp stop
wrc# init add sfp detect
wrc# init add sfp match
wrc# init add mode gm
wrc# init add ptp start
~~~~~~
Please refer to *Writing EEPROM and calibration* Section of the [wrpc.pdf] document.
Manage standalone node using etherbone
----------------------------------------
You can also use SPEC card in standalone mode as we have seen before but... how can you configure spec card if you
do not use drivers? In wr-nic project, Etherbone core has been added to design and it allows to you configure
memory map with UDP/TCP packets. To ease this function, we have added a eb-mem script in scripts folder. This tool
uses Etherbone tools to connect with device and perform read/write operations.
~~~~~~{.sh}
## It shows you Device memory map
eb-mem.sh --scan --ip 10.10.10.10
## Read a memory address
eb-mem.sh --read --ip 10.10.10.10 --address 0x62000
## Write a memory address
eb-mem.sh --write --ip 10.10.10.10 --address 0x62000 --value 0x01
## Show help
eb-mem.sh --help
~~~~~~~~~~~~~
TALK ABOUT CALOE
Quick Start Guide For Developers
=================================
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment