text:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE eagle SYSTEM "eagle.dtd">
<eagle version="7.5.0">
<drawing>
<settings>
<setting alwaysvectorfont="yes"/>
<setting verticaltext="up"/>
</settings>
<grid distance="0.1" unitdist="inch" unit="inch" style="lines" multiple="1" display="no" altdistance="0.01" altunitdist="inch" altunit="inch"/>
<layers>
<layer number="1" name="Top" color="4" fill="1" visible="no" active="no"/>
<layer number="2" name="Route2" color="1" fill="1" visible="no" active="no"/>
<layer number="3" name="Route3" color="4" fill="3" visible="no" active="no"/>
<layer number="4" name="Route4" color="1" fill="4" visible="no" active="no"/>
<layer number="5" name="Route5" color="4" fill="4" visible="no" active="no"/>
<layer number="6" name="Route6" color="1" fill="8" visible="no" active="no"/>
<layer number="7" name="Route7" color="4" fill="8" visible="no" active="no"/>
<layer number="8" name="Route8" color="1" fill="2" visible="no" active="no"/>
<layer number="9" name="Route9" color="4" fill="2" visible="no" active="no"/>
<layer number="10" name="Route10" color="1" fill="7" visible="no" active="no"/>
<layer number="11" name="Route11" color="4" fill="7" visible="no" active="no"/>
<layer number="12" name="Route12" color="1" fill="5" visible="no" active="no"/>
<layer number="13" name="Route13" color="4" fill="5" visible="no" active="no"/>
<layer number="14" name="Route14" color="1" fill="6" visible="no" active="no"/>
<layer number="15" name="Route15" color="5" fill="1" visible="no" active="no"/>
<layer number="16" name="Bottom" color="1" fill="1" visible="no" active="no"/>
<layer number="17" name="Pads" color="10" fill="1" visible="no" active="no"/>
<layer number="18" name="Vias" color="10" fill="1" visible="no" active="no"/>
<layer number="19" name="Unrouted" color="6" fill="1" visible="no" active="no"/>
<layer number="20" name="Dimension" color="15" fill="1" visible="no" active="no"/>
<layer number="21" name="tPlace" color="6" fill="1" visible="no" active="no"/>
<layer number="22" name="bPlace" color="3" fill="1" visible="no" active="no"/>
<layer number="23" name="tOrigins" color="15" fill="1" visible="no" active="no"/>
<layer number="24" name="bOrigins" color="15" fill="1" visible="no" active="no"/>
<layer number="25" name="tNames" color="11" fill="1" visible="no" active="no"/>
<layer number="26" name="bNames" color="7" fill="1" visible="no" active="no"/>
<layer number="27" name="tValues" color="7" fill="1" visible="no" active="no"/>
<layer number="28" name="bValues" color="7" fill="1" visible="no" active="no"/>
<layer number="29" name="tStop" color="7" fill="3" visible="no" active="no"/>
<layer number="30" name="bStop" color="7" fill="6" visible="no" active="no"/>
<layer number="31" name="tCream" color="7" fill="4" visible="no" active="no"/>
<layer number="32" name="bCream" color="7" fill="5" visible="no" active="no"/>
<layer number="33" name="tFinish" color="6" fill="3" visible="no" active="no"/>
<layer number="34" name="bFinish" color="6" fill="6" visible="no" active="no"/>
<layer number="35" name="tGlue" color="7" fill="4" visible="no" active="no"/>
<layer number="36" name="bGlue" color="7" fill="5" visible="no" active="no"/>
<layer number="37" name="tTest" color="7" fill="1" visible="no" active="no"/>
<layer number="38" name="bTest" color="7" fill="1" visible="no" active="no"/>
<layer number="39" name="tKeepout" color="4" fill="11" visible="no" active="no"/>
<layer number="40" name="bKeepout" color="1" fill="11" visible="no" active="no"/>
<layer number="41" name="tRestrict" color="4" fill="10" visible="no" active="no"/>
<layer number="42" name="bRestrict" color="1" fill="10" visible="no" active="no"/>
<layer number="43" name="vRestrict" color="2" fill="10" visible="no" active="no"/>
<layer number="44" name="Drills" color="7" fill="1" visible="no" active="no"/>
<layer number="45" name="Holes" color="7" fill="1" visible="no" active="no"/>
<layer number="46" name="Milling" color="3" fill="1" visible="no" active="no"/>
<layer number="47" name="Measures" color="7" fill="1" visible="no" active="no"/>
<layer number="48" name="Document" color="7" fill="1" visible="no" active="no"/>
<layer number="49" name="Reference" color="7" fill="1" visible="no" active="no"/>
<layer number="50" name="dxf" color="7" fill="1" visible="no" active="no"/>
<layer number="51" name="tDocu" color="7" fill="1" visible="no" active="no"/>
<layer number="52" name="bDocu" color="7" fill="1" visible="no" active="no"/>
<layer number="53" name="tGND_GNDA" color="7" fill="9" visible="no" active="no"/>
<layer number="54" name="bGND_GNDA" color="1" fill="9" visible="no" active="no"/>
<layer number="56" name="wert" color="7" fill="1" visible="no" active="no"/>
<layer number="57" name="tCAD" color="7" fill="1" visible="no" active="no"/>
<layer number="59" name="tCarbon" color="7" fill="1" visible="no" active="no"/>
<layer number="60" name="bCarbon" color="7" fill="1" visible="no" active="no"/>
<layer number="90" name="Modules" color="5" fill="1" visible="yes" active="yes"/>
<layer number="91" name="Nets" color="2" fill="1" visible="yes" active="yes"/>
<layer number="92" name="Busses" color="1" fill="1" visible="yes" active="yes"/>
<layer number="93" name="Pins" color="2" fill="1" visible="no" active="yes"/>
<layer number="94" name="Symbols" color="4" fill="1" visible="yes" active="yes"/>
<layer number="95" name="Names" color="7" fill="1" visible="yes" active="yes"/>
<layer number="96" name="Values" color="7" fill="1" visible="yes" active="yes"/>
<layer number="97" name="Info" color="7" fill="1" visible="yes" active="yes"/>
<layer number="98" name="Guide" color="6" fill="1" visible="yes" active="yes"/>
<layer number="99" name="SpiceOrder" color="7" fill="1" visible="yes" active="yes"/>
<layer number="100" name="Muster" color="7" fill="1" visible="no" active="no"/>
<layer number="101" name="Patch_Top" color="12" fill="4" visible="yes" active="yes"/>
<layer number="102" name="Vscore" color="7" fill="1" visible="yes" active="yes"/>
<layer number="103" name="tMap" color="7" fill="1" visible="yes" active="yes"/>
<layer number="104" name="Name" color="16" fill="1" visible="yes" active="yes"/>
<layer number="105" name="tPlate" color="7" fill="1" visible="yes" active="yes"/>
<layer number="106" name="bPlate" color="7" fill="1" visible="yes" active="yes"/>
<layer number="107" name="Crop" color="7" fill="1" visible="yes" active="yes"/>
<layer number="108" name="fp8" color="7" fill="1" visible="no" active="yes"/>
<layer number="109" name="fp9" color="7" fill="1" visible="no" active="yes"/>
<layer number="110" name="fp0" color="7" fill="1" visible="no" active="yes"/>
<layer number="111" name="LPC17xx" color="7" fill="1" visible="yes" active="yes"/>
<layer number="112" name="tSilk" color="7" fill="1" visible="yes" active="yes"/>
<layer number="113" name="IDFDebug" color="4" fill="1" visible="yes" active="yes"/>
<layer number="116" name="Patch_BOT" color="9" fill="4" visible="yes" active="yes"/>
<layer number="118" name="Rect_Pads" color="7" fill="1" visible="no" active="no"/>
<layer number="121" name="_tsilk" color="7" fill="1" visible="yes" active="yes"/>
<layer number="122" name="_bsilk" color="7" fill="1" visible="yes" active="yes"/>
<layer number="123" name="tTestmark" color="7" fill="1" visible="no" active="yes"/>
<layer number="124" name="bTestmark" color="7" fill="1" visible="no" active="yes"/>
<layer number="125" name="_tNames" color="7" fill="1" visible="yes" active="yes"/>
<layer number="126" name="_bNames" color="7" fill="1" visible="yes" active="yes"/>
<layer number="127" name="_tValues" color="7" fill="1" visible="yes" active="yes"/>
<layer number="128" name="_bValues" color="7" fill="1" visible="yes" active="yes"/>
<layer number="129" name="Mask" color="7" fill="1" visible="yes" active="yes"/>
<layer number="131" name="tAdjust" color="7" fill="1" visible="no" active="yes"/>
<layer number="132" name="bAdjust" color="7" fill="1" visible="no" active="yes"/>
<layer number="144" name="Drill_legend" color="7" fill="1" visible="yes" active="yes"/>
<layer number="150" name="Notes" color="7" fill="1" visible="no" active="yes"/>
<layer number="151" name="HeatSink" color="7" fill="1" visible="yes" active="yes"/>
<layer number="152" name="_bDocu" color="7" fill="1" visible="yes" active="yes"/>
<layer number="153" name="FabDoc1" color="6" fill="1" visible="no" active="no"/>
<layer number="154" name="FabDoc2" color="2" fill="1" visible="no" active="no"/>
<layer number="155" name="FabDoc3" color="7" fill="15" visible="no" active="no"/>
<layer number="199" name="Contour" color="7" fill="1" visible="yes" active="yes"/>
<layer number="200" name="200bmp" color="1" fill="10" visible="yes" active="yes"/>
<layer number="201" name="201bmp" color="2" fill="10" visible="yes" active="yes"/>
<layer number="202" name="202bmp" color="3" fill="10" visible="yes" active="yes"/>
<layer number="203" name="203bmp" color="4" fill="10" visible="yes" active="yes"/>
<layer number="204" name="204bmp" color="5" fill="10" visible="yes" active="yes"/>
<layer number="205" name="205bmp" color="6" fill="10" visible="yes" active="yes"/>
<layer number="206" name="206bmp" color="7" fill="10" visible="yes" active="yes"/>
<layer number="207" name="207bmp" color="8" fill="10" visible="yes" active="yes"/>
<layer number="208" name="208bmp" color="9" fill="10" visible="yes" active="yes"/>
<layer number="209" name="209bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="210" name="210bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="211" name="211bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="212" name="212bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="213" name="213bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="214" name="214bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="215" name="215bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="216" name="216bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="217" name="217bmp" color="18" fill="1" visible="no" active="no"/>
<layer number="218" name="218bmp" color="19" fill="1" visible="no" active="no"/>
<layer number="219" name="219bmp" color="20" fill="1" visible="no" active="no"/>
<layer number="220" name="220bmp" color="21" fill="1" visible="no" active="no"/>
<layer number="221" name="221bmp" color="22" fill="1" visible="no" active="no"/>
<layer number="222" name="222bmp" color="23" fill="1" visible="no" active="no"/>
<layer number="223" name="223bmp" color="24" fill="1" visible="no" active="no"/>
<layer number="224" name="224bmp" color="25" fill="1" visible="no" active="no"/>
<layer number="225" name="225bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="226" name="226bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="227" name="227bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="228" name="228bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="229" name="229bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="230" name="230bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="231" name="Eagle3D_PG1" color="7" fill="1" visible="no" active="no"/>
<layer number="232" name="Eagle3D_PG2" color="7" fill="1" visible="no" active="no"/>
<layer number="233" name="Eagle3D_PG3" color="7" fill="1" visible="no" active="no"/>
<layer number="248" name="Housing" color="7" fill="1" visible="yes" active="yes"/>
<layer number="249" name="Edge" color="7" fill="1" visible="yes" active="yes"/>
<layer number="250" name="Descript" color="3" fill="1" visible="no" active="no"/>
<layer number="251" name="SMDround" color="12" fill="11" visible="no" active="no"/>
<layer number="254" name="cooling" color="7" fill="1" visible="yes" active="yes"/>
<layer number="255" name="routoute" color="7" fill="1" visible="yes" active="yes"/>
</layers>
<schematic xreflabel="%F%N/%S.%C%R" xrefpart="/%S.%C%R">
<libraries>
<library name="supply1">
<description>Supply Symbols

 GND, VCC, 0V, +5V, -5V, etc.

 Please keep in mind, that these devices are necessary for the
 automatic wiring of the supply signals.

 The pin name defined in the symbol is identical to the net which is to be wired automatically.

 In this library the device names are the same as the pin names of the symbols, therefore the correct signal names appear next to the supply symbols in the schematic.

 <author>Created by librarian@cadsoft.de</author></description>
<packages>
</packages>
<symbols>
<symbol name="GND">
<wire x1="-1.905" y1="0" x2="1.905" y2="0" width="0.254" layer="94"/>
<text x="-2.54" y="-2.54" size="1.778" layer="96">>VALUE</text>
<pin name="GND" x="0" y="2.54" visible="off" length="short" direction="sup" rot="R270"/>
</symbol>
<symbol name="+5V">
<wire x1="1.27" y1="-1.905" x2="0" y2="0" width="0.254" layer="94"/>
<wire x1="0" y1="0" x2="-1.27" y2="-1.905" width="0.254" layer="94"/>
<text x="-2.54" y="-5.08" size="1.778" layer="96" rot="R90">>VALUE</text>
<pin name="+5V" x="0" y="-2.54" visible="off" length="short" direction="sup" rot="R90"/>
</symbol>
<symbol name="+3V3">
<wire x1="1.27" y1="-1.905" x2="0" y2="0" width="0.254" layer="94"/>
<wire x1="0" y1="0" x2="-1.27" y2="-1.905" width="0.254" layer="94"/>
<text x="-2.54" y="-5.08" size="1.778" layer="96" rot="R90">>VALUE</text>
<pin name="+3V3" x="0" y="-2.54" visible="off" length="short" direction="sup" rot="R90"/>
</symbol>
</symbols>
<devicesets>
<deviceset name="GND" prefix="GND">
<description>SUPPLY SYMBOL</description>
<gates>
<gate name="1" symbol="GND" x="0" y="0"/>
</gates>
<devices>
<device name="">
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="+5V" prefix="P+">
<description>SUPPLY SYMBOL</description>
<gates>
<gate name="1" symbol="+5V" x="0" y="0"/>
</gates>
<devices>
<device name="">
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="+3V3" prefix="+3V3">
<description>SUPPLY SYMBOL</description>
<gates>
<gate name="G$1" symbol="+3V3" x="0" y="0"/>
</gates>
<devices>
<device name="">
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
</devicesets>
</library>
<library name="frames">
<description>Frames for Sheet and Layout</description>
<packages>
</packages>
<symbols>
<symbol name="A3L-LOC">
<wire x1="288.29" y1="3.81" x2="342.265" y2="3.81" width="0.1016" layer="94"/>
<wire x1="342.265" y1="3.81" x2="373.38" y2="3.81" width="0.1016" layer="94"/>
<wire x1="373.38" y1="3.81" x2="383.54" y2="3.81" width="0.1016" layer="94"/>
<wire x1="383.54" y1="3.81" x2="383.54" y2="8.89" width="0.1016" layer="94"/>
<wire x1="383.54" y1="8.89" x2="383.54" y2="13.97" width="0.1016" layer="94"/>
<wire x1="383.54" y1="13.97" x2="383.54" y2="19.05" width="0.1016" layer="94"/>
<wire x1="383.54" y1="19.05" x2="383.54" y2="24.13" width="0.1016" layer="94"/>
<wire x1="288.29" y1="3.81" x2="288.29" y2="24.13" width="0.1016" layer="94"/>
<wire x1="288.29" y1="24.13" x2="342.265" y2="24.13" width="0.1016" layer="94"/>
<wire x1="342.265" y1="24.13" x2="383.54" y2="24.13" width="0.1016" layer="94"/>
<wire x1="373.38" y1="3.81" x2="373.38" y2="8.89" width="0.1016" layer="94"/>
<wire x1="373.38" y1="8.89" x2="383.54" y2="8.89" width="0.1016" layer="94"/>
<wire x1="373.38" y1="8.89" x2="342.265" y2="8.89" width="0.1016" layer="94"/>
<wire x1="342.265" y1="8.89" x2="342.265" y2="3.81" width="0.1016" layer="94"/>
<wire x1="342.265" y1="8.89" x2="342.265" y2="13.97" width="0.1016" layer="94"/>
<wire x1="342.265" y1="13.97" x2="383.54" y2="13.97" width="0.1016" layer="94"/>
<wire x1="342.265" y1="13.97" x2="342.265" y2="19.05" width="0.1016" layer="94"/>
<wire x1="342.265" y1="19.05" x2="383.54" y2="19.05" width="0.1016" layer="94"/>
<wire x1="342.265" y1="19.05" x2="342.265" y2="24.13" width="0.1016" layer="94"/>
<text x="344.17" y="15.24" size="2.54" layer="94">>DRAWING_NAME</text>
<text x="344.17" y="10.16" size="2.286" layer="94">>LAST_DATE_TIME</text>
<text x="357.505" y="5.08" size="2.54" layer="94">>SHEET</text>
<text x="343.916" y="4.953" size="2.54" layer="94">Sheet:</text>
<frame x1="0" y1="0" x2="387.35" y2="260.35" columns="8" rows="5" layer="94"/>
</symbol>
<symbol name="A3P-LOC">
<wire x1="256.54" y1="24.13" x2="256.54" y2="19.05" width="0.1016" layer="94"/>
<wire x1="256.54" y1="19.05" x2="256.54" y2="13.97" width="0.1016" layer="94"/>
<wire x1="256.54" y1="13.97" x2="256.54" y2="8.89" width="0.1016" layer="94"/>
<wire x1="256.54" y1="8.89" x2="256.54" y2="3.81" width="0.1016" layer="94"/>
<wire x1="256.54" y1="3.81" x2="246.38" y2="3.81" width="0.1016" layer="94"/>
<wire x1="246.38" y1="3.81" x2="215.265" y2="3.81" width="0.1016" layer="94"/>
<wire x1="215.265" y1="3.81" x2="161.29" y2="3.81" width="0.1016" layer="94"/>
<wire x1="161.29" y1="3.81" x2="161.29" y2="24.13" width="0.1016" layer="94"/>
<wire x1="161.29" y1="24.13" x2="215.265" y2="24.13" width="0.1016" layer="94"/>
<wire x1="215.265" y1="24.13" x2="256.54" y2="24.13" width="0.1016" layer="94"/>
<wire x1="246.38" y1="3.81" x2="246.38" y2="8.89" width="0.1016" layer="94"/>
<wire x1="246.38" y1="8.89" x2="256.54" y2="8.89" width="0.1016" layer="94"/>
<wire x1="246.38" y1="8.89" x2="215.265" y2="8.89" width="0.1016" layer="94"/>
<wire x1="215.265" y1="8.89" x2="215.265" y2="3.81" width="0.1016" layer="94"/>
<wire x1="215.265" y1="8.89" x2="215.265" y2="13.97" width="0.1016" layer="94"/>
<wire x1="215.265" y1="13.97" x2="256.54" y2="13.97" width="0.1016" layer="94"/>
<wire x1="215.265" y1="13.97" x2="215.265" y2="19.05" width="0.1016" layer="94"/>
<wire x1="215.265" y1="19.05" x2="256.54" y2="19.05" width="0.1016" layer="94"/>
<wire x1="215.265" y1="19.05" x2="215.265" y2="24.13" width="0.1016" layer="94"/>
<text x="217.17" y="15.24" size="2.54" layer="94">>DRAWING_NAME</text>
<text x="217.17" y="10.16" size="2.286" layer="94">>LAST_DATE_TIME</text>
<text x="230.505" y="5.08" size="2.54" layer="94">>SHEET</text>
<text x="216.916" y="4.953" size="2.54" layer="94">Sheet:</text>
<frame x1="0" y1="0" x2="260.35" y2="387.35" columns="8" rows="5" layer="94"/>
</symbol>
</symbols>
<devicesets>
<deviceset name="A3L-LOC" prefix="FRAME" uservalue="yes">
<description>FRAME

DIN A3, landscape with location and doc. field</description>
<gates>
<gate name="G$1" symbol="A3L-LOC" x="0" y="0"/>
</gates>
<devices>
<device name="">
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="A3P-LOC" prefix="FRAME" uservalue="yes">
<description>A3 Portrait Location</description>
<gates>
<gate name="G$1" symbol="A3P-LOC" x="0" y="0"/>
</gates>
<devices>
<device name="">
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
</devicesets>
</library>
<library name="DevicesToMerge">
<packages>
<package name="IO_HOLE_2.55MM">
<pad name="P$1" x="0" y="0" drill="2.55" diameter="4"/>
</package>
<package name="IO_HOLE_1.4MM">
<pad name="P$1" x="0" y="0" drill="1.3" diameter="1.5" shape="offset"/>
</package>
<package name="IO_HOLE_3MM">
<pad name="1" x="0" y="0" drill="3" diameter="5" thermals="no"/>
</package>
</packages>
<symbols>
<symbol name="TEST_POINT">
<pin name="TP" x="-5.08" y="0" length="middle"/>
<wire x1="0" y1="1.27" x2="7.62" y2="1.27" width="0.254" layer="94"/>
<wire x1="7.62" y1="1.27" x2="7.62" y2="-1.27" width="0.254" layer="94"/>
<wire x1="7.62" y1="-1.27" x2="0" y2="-1.27" width="0.254" layer="94"/>
<wire x1="0" y1="-1.27" x2="0" y2="1.27" width="0.254" layer="94"/>
</symbol>
</symbols>
<devicesets>
<deviceset name="TEST_POINT">
<gates>
<gate name="G$1" symbol="TEST_POINT" x="0" y="0"/>
</gates>
<devices>
<device name="3MM" package="IO_HOLE_3MM">
<connects>
<connect gate="G$1" pin="TP" pad="1"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="1.4MM" package="IO_HOLE_1.4MM">
<connects>
<connect gate="G$1" pin="TP" pad="P$1"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="2.55MM" package="IO_HOLE_2.55MM">
<connects>
<connect gate="G$1" pin="TP" pad="P$1"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
</devicesets>
</library>
<library name="blinkinlabs">
<description>Library of parts that we use for our Blinkinlabs designs. Some parts copied (and modified) from the excellent
Sparkfun and Adafruit libraries.</description>
<packages>
<package name="2X05-1.27MM-SMD">
<smd name="P$1" x="2.54" y="1.905" dx="2.4" dy="0.74" layer="1" rot="R90"/>
<smd name="P$3" x="1.27" y="1.905" dx="2.4" dy="0.74" layer="1" rot="R90"/>
<smd name="P$5" x="0" y="1.905" dx="2.4" dy="0.74" layer="1" rot="R90"/>
<smd name="P$7" x="-1.27" y="1.905" dx="2.4" dy="0.74" layer="1" rot="R90"/>
<smd name="P$9" x="-2.54" y="1.905" dx="2.4" dy="0.74" layer="1" rot="R90"/>
<smd name="P$10" x="-2.54" y="-1.905" dx="2.4" dy="0.74" layer="1" rot="R90"/>
<smd name="P$8" x="-1.27" y="-1.905" dx="2.4" dy="0.74" layer="1" rot="R90"/>
<smd name="P$6" x="0" y="-1.905" dx="2.4" dy="0.74" layer="1" rot="R90"/>
<smd name="P$4" x="1.27" y="-1.905" dx="2.4" dy="0.74" layer="1" rot="R90"/>
<smd name="P$2" x="2.54" y="-1.905" dx="2.4" dy="0.74" layer="1" rot="R90"/>
<wire x1="-3.175" y1="1.7" x2="3.175" y2="1.7" width="0.127" layer="51"/>
<wire x1="3.175" y1="1.7" x2="3.175" y2="-1.7" width="0.127" layer="51"/>
<wire x1="3.175" y1="-1.7" x2="-3.175" y2="-1.7" width="0.127" layer="51"/>
<wire x1="-3.175" y1="-1.7" x2="-3.175" y2="1.7" width="0.127" layer="51"/>
<wire x1="-3.175" y1="-1.7" x2="-3.175" y2="1.7" width="0.127" layer="21"/>
<wire x1="3.175" y1="1.7" x2="3.175" y2="-1.7" width="0.127" layer="21"/>
<circle x="2.54" y="3.8" radius="0.33015" width="0.127" layer="21"/>
</package>
</packages>
<symbols>
<symbol name="JTAG_ARM_10PIN">
<pin name="VCC" x="10.16" y="7.62" length="middle" direction="pwr" rot="R180"/>
<pin name="GND" x="10.16" y="-7.62" length="middle" direction="pwr" rot="R180"/>
<pin name="RESET" x="10.16" y="-5.08" length="middle" rot="R180"/>
<pin name="TDI" x="10.16" y="-2.54" length="middle" rot="R180"/>
<pin name="TDO" x="10.16" y="0" length="middle" rot="R180"/>
<pin name="TCK" x="10.16" y="2.54" length="middle" rot="R180"/>
<pin name="TMS" x="10.16" y="5.08" length="middle" rot="R180"/>
<wire x1="5.08" y1="10.16" x2="5.08" y2="-10.16" width="0.254" layer="94"/>
<wire x1="5.08" y1="-10.16" x2="-5.08" y2="-10.16" width="0.254" layer="94"/>
<wire x1="-5.08" y1="-10.16" x2="-5.08" y2="10.16" width="0.254" layer="94"/>
<wire x1="-5.08" y1="10.16" x2="5.08" y2="10.16" width="0.254" layer="94"/>
<text x="-5.08" y="10.922" size="1.27" layer="95">>NAME</text>
<text x="-5.08" y="-12.192" size="1.27" layer="96">>VALUE</text>
</symbol>
</symbols>
<devicesets>
<deviceset name="JTAG_ARM_10PIN">
<gates>
<gate name="G$1" symbol="JTAG_ARM_10PIN" x="0" y="0"/>
</gates>
<devices>
<device name="" package="2X05-1.27MM-SMD">
<connects>
<connect gate="G$1" pin="GND" pad="P$3 P$5 P$9"/>
<connect gate="G$1" pin="RESET" pad="P$10"/>
<connect gate="G$1" pin="TCK" pad="P$4"/>
<connect gate="G$1" pin="TDI" pad="P$8"/>
<connect gate="G$1" pin="TDO" pad="P$6"/>
<connect gate="G$1" pin="TMS" pad="P$2"/>
<connect gate="G$1" pin="VCC" pad="P$1"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
</devicesets>
</library>
<library name="SparkFun-Connectors">
<description>
SparkFun Electronics' preferred foot prints

In this library you'll find connectors and sockets- basically anything that can be plugged into or onto.

We've spent an enormous amount of time creating and checking these footprints and parts, but it is the end user's responsibility to ensure correctness and suitablity for a given componet or application. If you enjoy using this library, please buy one of our products at www.sparkfun.com.

Licensing: CC v3.0 Share-Alike You are welcome to use this library for commercial purposes. For attribution, we ask that when you begin to sell your device using our footprint, you email us with a link to the product being sold. We want bragging rights that we helped (in a very small part) to create your 8th world wonder. We would like the opportunity to feature your device on our homepage.</description>
<packages>
<package name="2X8">
<wire x1="-1.27" y1="-0.635" x2="-0.635" y2="-1.27" width="0.1524" layer="21"/>
<wire x1="0.635" y1="-1.27" x2="1.27" y2="-0.635" width="0.1524" layer="21"/>
<wire x1="1.27" y1="-0.635" x2="1.905" y2="-1.27" width="0.1524" layer="21"/>
<wire x1="3.175" y1="-1.27" x2="3.81" y2="-0.635" width="0.1524" layer="21"/>
<wire x1="3.81" y1="-0.635" x2="4.445" y2="-1.27" width="0.1524" layer="21"/>
<wire x1="5.715" y1="-1.27" x2="6.35" y2="-0.635" width="0.1524" layer="21"/>
<wire x1="6.35" y1="-0.635" x2="6.985" y2="-1.27" width="0.1524" layer="21"/>
<wire x1="8.255" y1="-1.27" x2="8.89" y2="-0.635" width="0.1524" layer="21"/>
<wire x1="8.89" y1="-0.635" x2="9.525" y2="-1.27" width="0.1524" layer="21"/>
<wire x1="10.795" y1="-1.27" x2="11.43" y2="-0.635" width="0.1524" layer="21"/>
<wire x1="11.43" y1="-0.635" x2="12.065" y2="-1.27" width="0.1524" layer="21"/>
<wire x1="13.335" y1="-1.27" x2="13.97" y2="-0.635" width="0.1524" layer="21"/>
<wire x1="-1.27" y1="-0.635" x2="-1.27" y2="3.175" width="0.1524" layer="21"/>
<wire x1="-1.27" y1="3.175" x2="-0.635" y2="3.81" width="0.1524" layer="21"/>
<wire x1="-0.635" y1="3.81" x2="0.635" y2="3.81" width="0.1524" layer="21"/>
<wire x1="0.635" y1="3.81" x2="1.27" y2="3.175" width="0.1524" layer="21"/>
<wire x1="1.27" y1="3.175" x2="1.905" y2="3.81" width="0.1524" layer="21"/>
<wire x1="1.905" y1="3.81" x2="3.175" y2="3.81" width="0.1524" layer="21"/>
<wire x1="3.175" y1="3.81" x2="3.81" y2="3.175" width="0.1524" layer="21"/>
<wire x1="3.81" y1="3.175" x2="4.445" y2="3.81" width="0.1524" layer="21"/>
<wire x1="4.445" y1="3.81" x2="5.715" y2="3.81" width="0.1524" layer="21"/>
<wire x1="5.715" y1="3.81" x2="6.35" y2="3.175" width="0.1524" layer="21"/>
<wire x1="6.35" y1="3.175" x2="6.985" y2="3.81" width="0.1524" layer="21"/>
<wire x1="6.985" y1="3.81" x2="8.255" y2="3.81" width="0.1524" layer="21"/>
<wire x1="8.255" y1="3.81" x2="8.89" y2="3.175" width="0.1524" layer="21"/>
<wire x1="8.89" y1="3.175" x2="9.525" y2="3.81" width="0.1524" layer="21"/>
<wire x1="9.525" y1="3.81" x2="10.795" y2="3.81" width="0.1524" layer="21"/>
<wire x1="10.795" y1="3.81" x2="11.43" y2="3.175" width="0.1524" layer="21"/>
<wire x1="11.43" y1="3.175" x2="12.065" y2="3.81" width="0.1524" layer="21"/>
<wire x1="12.065" y1="3.81" x2="13.335" y2="3.81" width="0.1524" layer="21"/>
<wire x1="13.335" y1="3.81" x2="13.97" y2="3.175" width="0.1524" layer="21"/>
<wire x1="13.97" y1="3.175" x2="14.605" y2="3.81" width="0.1524" layer="21"/>
<wire x1="14.605" y1="3.81" x2="15.875" y2="3.81" width="0.1524" layer="21"/>
<wire x1="15.875" y1="3.81" x2="16.51" y2="3.175" width="0.1524" layer="21"/>
<wire x1="16.51" y1="3.175" x2="17.145" y2="3.81" width="0.1524" layer="21"/>
<wire x1="17.145" y1="3.81" x2="18.415" y2="3.81" width="0.1524" layer="21"/>
<wire x1="18.415" y1="3.81" x2="19.05" y2="3.175" width="0.1524" layer="21"/>
<wire x1="19.05" y1="-0.635" x2="18.415" y2="-1.27" width="0.1524" layer="21"/>
<wire x1="16.51" y1="-0.635" x2="17.145" y2="-1.27" width="0.1524" layer="21"/>
<wire x1="16.51" y1="-0.635" x2="15.875" y2="-1.27" width="0.1524" layer="21"/>
<wire x1="13.97" y1="-0.635" x2="14.605" y2="-1.27" width="0.1524" layer="21"/>
<wire x1="1.27" y1="3.175" x2="1.27" y2="-0.635" width="0.1524" layer="21"/>
<wire x1="3.81" y1="3.175" x2="3.81" y2="-0.635" width="0.1524" layer="21"/>
<wire x1="6.35" y1="3.175" x2="6.35" y2="-0.635" width="0.1524" layer="21"/>
<wire x1="8.89" y1="3.175" x2="8.89" y2="-0.635" width="0.1524" layer="21"/>
<wire x1="11.43" y1="3.175" x2="11.43" y2="-0.635" width="0.1524" layer="21"/>
<wire x1="13.97" y1="3.175" x2="13.97" y2="-0.635" width="0.1524" layer="21"/>
<wire x1="16.51" y1="3.175" x2="16.51" y2="-0.635" width="0.1524" layer="21"/>
<wire x1="19.05" y1="3.175" x2="19.05" y2="-0.635" width="0.1524" layer="21"/>
<wire x1="17.145" y1="-1.27" x2="18.415" y2="-1.27" width="0.1524" layer="21"/>
<wire x1="14.605" y1="-1.27" x2="15.875" y2="-1.27" width="0.1524" layer="21"/>
<wire x1="12.065" y1="-1.27" x2="13.335" y2="-1.27" width="0.1524" layer="21"/>
<wire x1="9.525" y1="-1.27" x2="10.795" y2="-1.27" width="0.1524" layer="21"/>
<wire x1="6.985" y1="-1.27" x2="8.255" y2="-1.27" width="0.1524" layer="21"/>
<wire x1="4.445" y1="-1.27" x2="5.715" y2="-1.27" width="0.1524" layer="21"/>
<wire x1="1.905" y1="-1.27" x2="3.175" y2="-1.27" width="0.1524" layer="21"/>
<wire x1="-0.635" y1="-1.27" x2="0.635" y2="-1.27" width="0.1524" layer="21"/>
<pad name="1" x="0" y="0" drill="1.016" diameter="1.8796" shape="octagon"/>
<pad name="2" x="0" y="2.54" drill="1.016" diameter="1.8796" shape="octagon"/>
<pad name="3" x="2.54" y="0" drill="1.016" diameter="1.8796" shape="octagon"/>
<pad name="4" x="2.54" y="2.54" drill="1.016" diameter="1.8796" shape="octagon"/>
<pad name="5" x="5.08" y="0" drill="1.016" diameter="1.8796" shape="octagon"/>
<pad name="6" x="5.08" y="2.54" drill="1.016" diameter="1.8796" shape="octagon"/>
<pad name="7" x="7.62" y="0" drill="1.016" diameter="1.8796" shape="octagon"/>
<pad name="8" x="7.62" y="2.54" drill="1.016" diameter="1.8796" shape="octagon"/>
<pad name="9" x="10.16" y="0" drill="1.016" diameter="1.8796" shape="octagon"/>
<pad name="10" x="10.16" y="2.54" drill="1.016" diameter="1.8796" shape="octagon"/>
<pad name="11" x="12.7" y="0" drill="1.016" diameter="1.8796" shape="octagon"/>
<pad name="12" x="12.7" y="2.54" drill="1.016" diameter="1.8796" shape="octagon"/>
<pad name="13" x="15.24" y="0" drill="1.016" diameter="1.8796" shape="octagon"/>
<pad name="14" x="15.24" y="2.54" drill="1.016" diameter="1.8796" shape="octagon"/>
<pad name="15" x="17.78" y="0" drill="1.016" diameter="1.8796" shape="octagon"/>
<pad name="16" x="17.78" y="2.54" drill="1.016" diameter="1.8796" shape="octagon"/>
<text x="-1.27" y="4.445" size="1.27" layer="25" ratio="10">>NAME</text>
<text x="-1.27" y="-3.175" size="1.27" layer="27">>VALUE</text>
<rectangle x1="-0.254" y1="-0.254" x2="0.254" y2="0.254" layer="51"/>
<rectangle x1="-0.254" y1="2.286" x2="0.254" y2="2.794" layer="51"/>
<rectangle x1="2.286" y1="2.286" x2="2.794" y2="2.794" layer="51"/>
<rectangle x1="2.286" y1="-0.254" x2="2.794" y2="0.254" layer="51"/>
<rectangle x1="4.826" y1="2.286" x2="5.334" y2="2.794" layer="51"/>
<rectangle x1="4.826" y1="-0.254" x2="5.334" y2="0.254" layer="51"/>
<rectangle x1="7.366" y1="2.286" x2="7.874" y2="2.794" layer="51"/>
<rectangle x1="9.906" y1="2.286" x2="10.414" y2="2.794" layer="51"/>
<rectangle x1="12.446" y1="2.286" x2="12.954" y2="2.794" layer="51"/>
<rectangle x1="7.366" y1="-0.254" x2="7.874" y2="0.254" layer="51"/>
<rectangle x1="9.906" y1="-0.254" x2="10.414" y2="0.254" layer="51"/>
<rectangle x1="12.446" y1="-0.254" x2="12.954" y2="0.254" layer="51"/>
<rectangle x1="14.986" y1="2.286" x2="15.494" y2="2.794" layer="51"/>
<rectangle x1="14.986" y1="-0.254" x2="15.494" y2="0.254" layer="51"/>
<rectangle x1="17.526" y1="2.286" x2="18.034" y2="2.794" layer="51"/>
<rectangle x1="17.526" y1="-0.254" x2="18.034" y2="0.254" layer="51"/>
</package>
</packages>
<symbols>
<symbol name="M2X8">
<wire x1="-1.27" y1="5.08" x2="-2.54" y2="5.08" width="0.6096" layer="94"/>
<wire x1="-1.27" y1="7.62" x2="-2.54" y2="7.62" width="0.6096" layer="94"/>
<wire x1="-1.27" y1="10.16" x2="-2.54" y2="10.16" width="0.6096" layer="94"/>
<wire x1="-3.81" y1="12.7" x2="-3.81" y2="-10.16" width="0.4064" layer="94"/>
<wire x1="-1.27" y1="0" x2="-2.54" y2="0" width="0.6096" layer="94"/>
<wire x1="-1.27" y1="2.54" x2="-2.54" y2="2.54" width="0.6096" layer="94"/>
<wire x1="-1.27" y1="-2.54" x2="-2.54" y2="-2.54" width="0.6096" layer="94"/>
<wire x1="-1.27" y1="-5.08" x2="-2.54" y2="-5.08" width="0.6096" layer="94"/>
<wire x1="-1.27" y1="-7.62" x2="-2.54" y2="-7.62" width="0.6096" layer="94"/>
<wire x1="3.81" y1="-10.16" x2="-3.81" y2="-10.16" width="0.4064" layer="94"/>
<wire x1="1.27" y1="-7.62" x2="2.54" y2="-7.62" width="0.6096" layer="94"/>
<wire x1="3.81" y1="-10.16" x2="3.81" y2="12.7" width="0.4064" layer="94"/>
<wire x1="-3.81" y1="12.7" x2="3.81" y2="12.7" width="0.4064" layer="94"/>
<wire x1="1.27" y1="-2.54" x2="2.54" y2="-2.54" width="0.6096" layer="94"/>
<wire x1="1.27" y1="-5.08" x2="2.54" y2="-5.08" width="0.6096" layer="94"/>
<wire x1="1.27" y1="0" x2="2.54" y2="0" width="0.6096" layer="94"/>
<wire x1="1.27" y1="2.54" x2="2.54" y2="2.54" width="0.6096" layer="94"/>
<wire x1="1.27" y1="5.08" x2="2.54" y2="5.08" width="0.6096" layer="94"/>
<wire x1="1.27" y1="7.62" x2="2.54" y2="7.62" width="0.6096" layer="94"/>
<wire x1="1.27" y1="10.16" x2="2.54" y2="10.16" width="0.6096" layer="94"/>
<text x="-2.54" y="-12.7" size="1.778" layer="96">>VALUE</text>
<text x="-2.54" y="13.97" size="1.778" layer="95">>NAME</text>
<pin name="1" x="-7.62" y="10.16" visible="pad" length="middle" direction="pas" swaplevel="1"/>
<pin name="2" x="7.62" y="10.16" visible="pad" length="middle" direction="pas" swaplevel="1" rot="R180"/>
<pin name="3" x="-7.62" y="7.62" visible="pad" length="middle" direction="pas" swaplevel="1"/>
<pin name="4" x="7.62" y="7.62" visible="pad" length="middle" direction="pas" swaplevel="1" rot="R180"/>
<pin name="5" x="-7.62" y="5.08" visible="pad" length="middle" direction="pas" swaplevel="1"/>
<pin name="6" x="7.62" y="5.08" visible="pad" length="middle" direction="pas" swaplevel="1" rot="R180"/>
<pin name="7" x="-7.62" y="2.54" visible="pad" length="middle" direction="pas" swaplevel="1"/>
<pin name="8" x="7.62" y="2.54" visible="pad" length="middle" direction="pas" swaplevel="1" rot="R180"/>
<pin name="9" x="-7.62" y="0" visible="pad" length="middle" direction="pas" swaplevel="1"/>
<pin name="10" x="7.62" y="0" visible="pad" length="middle" direction="pas" swaplevel="1" rot="R180"/>
<pin name="11" x="-7.62" y="-2.54" visible="pad" length="middle" direction="pas" swaplevel="1"/>
<pin name="12" x="7.62" y="-2.54" visible="pad" length="middle" direction="pas" swaplevel="1" rot="R180"/>
<pin name="13" x="-7.62" y="-5.08" visible="pad" length="middle" direction="pas" swaplevel="1"/>
<pin name="14" x="7.62" y="-5.08" visible="pad" length="middle" direction="pas" swaplevel="1" rot="R180"/>
<pin name="15" x="-7.62" y="-7.62" visible="pad" length="middle" direction="pas" swaplevel="1"/>
<pin name="16" x="7.62" y="-7.62" visible="pad" length="middle" direction="pas" swaplevel="1" rot="R180"/>
</symbol>
</symbols>
<devicesets>
<deviceset name="M08X2">
<description>.1" headers, two rows of 8 each</description>
<gates>
<gate name="G$1" symbol="M2X8" x="0" y="0"/>
</gates>
<devices>
<device name="" package="2X8">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="10" pad="10"/>
<connect gate="G$1" pin="11" pad="11"/>
<connect gate="G$1" pin="12" pad="12"/>
<connect gate="G$1" pin="13" pad="13"/>
<connect gate="G$1" pin="14" pad="14"/>
<connect gate="G$1" pin="15" pad="15"/>
<connect gate="G$1" pin="16" pad="16"/>
<connect gate="G$1" pin="2" pad="2"/>
<connect gate="G$1" pin="3" pad="3"/>
<connect gate="G$1" pin="4" pad="4"/>
<connect gate="G$1" pin="5" pad="5"/>
<connect gate="G$1" pin="6" pad="6"/>
<connect gate="G$1" pin="7" pad="7"/>
<connect gate="G$1" pin="8" pad="8"/>
<connect gate="G$1" pin="9" pad="9"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
</devicesets>
</library>
</libraries>
<attributes>
</attributes>
<variantdefs>
</variantdefs>
<classes>
<class number="0" name="default" width="0.4064" drill="0.35">
</class>
<class number="1" name="power" width="0.4064" drill="0.35">
</class>
</classes>
<parts>
<part name="FRAME2" library="frames" deviceset="A3L-LOC" device=""/>
<part name="FRAME6" library="frames" deviceset="A3P-LOC" device=""/>
<part name="ARM_BOOT" library="DevicesToMerge" deviceset="TEST_POINT" device="1.4MM" value="TEST_POINT1.4MM"/>
<part name="3V7" library="supply1" deviceset="+3V3" device=""/>
<part name="GND44" library="supply1" deviceset="GND" device=""/>
<part name="LED_DATA" library="DevicesToMerge" deviceset="TEST_POINT" device="1.4MM" value="TEST_POINT1.4MM"/>
<part name="LED_CLK" library="DevicesToMerge" deviceset="TEST_POINT" device="1.4MM" value="TEST_POINT1.4MM"/>
<part name="LED_STB" library="DevicesToMerge" deviceset="TEST_POINT" device="1.4MM" value="TEST_POINT1.4MM"/>
<part name="LED_OE" library="DevicesToMerge" deviceset="TEST_POINT" device="1.4MM" value="TEST_POINT1.4MM"/>
<part name="I2C_SDA" library="DevicesToMerge" deviceset="TEST_POINT" device="1.4MM" value="TEST_POINT1.4MM"/>
<part name="I2C_SCL" library="DevicesToMerge" deviceset="TEST_POINT" device="1.4MM" value="TEST_POINT1.4MM"/>
<part name="5V" library="DevicesToMerge" deviceset="TEST_POINT" device="1.4MM" value="TEST_POINT1.4MM"/>
<part name="VBAT" library="DevicesToMerge" deviceset="TEST_POINT" device="1.4MM" value="TEST_POINT1.4MM"/>
<part name="P+6" library="supply1" deviceset="+5V" device=""/>
<part name="ARM_3V3" library="DevicesToMerge" deviceset="TEST_POINT" device="1.4MM" value="TEST_POINT1.4MM"/>
<part name="ARM_TMS" library="DevicesToMerge" deviceset="TEST_POINT" device="1.4MM" value="TEST_POINT1.4MM"/>
<part name="ARM_TCK" library="DevicesToMerge" deviceset="TEST_POINT" device="1.4MM" value="TEST_POINT1.4MM"/>
<part name="ARM_TX" library="DevicesToMerge" deviceset="TEST_POINT" device="1.4MM" value="TEST_POINT1.4MM"/>
<part name="ARM_RX" library="DevicesToMerge" deviceset="TEST_POINT" device="1.4MM" value="TEST_POINT1.4MM"/>
<part name="ARM_RESET" library="DevicesToMerge" deviceset="TEST_POINT" device="1.4MM" value="TEST_POINT1.4MM"/>
<part name="ESP_GPIO0" library="DevicesToMerge" deviceset="TEST_POINT" device="1.4MM" value="TEST_POINT1.4MM"/>
<part name="ESP_RESET" library="DevicesToMerge" deviceset="TEST_POINT" device="1.4MM" value="TEST_POINT1.4MM"/>
<part name="GND_" library="DevicesToMerge" deviceset="TEST_POINT" device="1.4MM" value="TEST_POINT1.4MM"/>
<part name="GND22" library="supply1" deviceset="GND" device=""/>
<part name="ARM_RX1" library="DevicesToMerge" deviceset="TEST_POINT" device="1.4MM" value="TEST_POINT1.4MM"/>
<part name="BOOST_5V" library="DevicesToMerge" deviceset="TEST_POINT" device="1.4MM" value="TEST_POINT1.4MM"/>
<part name="BUTTON" library="DevicesToMerge" deviceset="TEST_POINT" device="1.4MM" value="TEST_POINT1.4MM"/>
<part name="GND" library="DevicesToMerge" deviceset="TEST_POINT" device="2.55MM"/>
<part name="ESP_GPIO5" library="DevicesToMerge" deviceset="TEST_POINT" device="2.55MM"/>
<part name="ESP_GPIO16" library="DevicesToMerge" deviceset="TEST_POINT" device="2.55MM"/>
<part name="+3V3" library="DevicesToMerge" deviceset="TEST_POINT" device="2.55MM"/>
<part name="JTAG" library="blinkinlabs" deviceset="JTAG_ARM_10PIN" device=""/>
<part name="GND1" library="supply1" deviceset="GND" device=""/>
<part name="DIGITAL_TEST" library="SparkFun-Connectors" deviceset="M08X2" device=""/>
<part name="ANALOG_TEST" library="SparkFun-Connectors" deviceset="M08X2" device=""/>
<part name="GND3" library="supply1" deviceset="GND" device=""/>
<part name="GND2" library="supply1" deviceset="GND" device=""/>
</parts>
<sheets>
<sheet>
<plain>
<text x="17.78" y="325.12" size="3.81" layer="91" align="top-left">Revision Notes/Changelog

Revision A:
-Matches Rev D/E/F application versions
-On JTAG, ARM_TX and ARM_RX are swapped
-LED_DAT_0 not connected to digital header

Revision B:
-Put connectors and labels on proper side
-Make test card longer to give space for ribbon cables

TODO:
-Swap ARM_TX and ARM_RX on JTAG
-connect LED_DAT_0 to digital header</text>
<text x="129.54" y="358.14" size="10.16" layer="91" align="bottom-center">EightByEight Test card</text>
<text x="129.54" y="345.44" size="6.4516" layer="91" align="bottom-center">Copyright 2016 Blinkinlabs, LLC</text>
</plain>
<instances>
<instance part="FRAME6" gate="G$1" x="0" y="0"/>
</instances>
<busses>
</busses>
<nets>
</nets>
</sheet>
<sheet>
<plain>
<text x="12.7" y="228.6" size="1.778" layer="91">If shorted during boot, the ARM will go directly
into DFU mode. Useful if the application firmware
becomes unstable. Note that this is a software
feature- it is implemented by the bootloader
firmware.</text>
<text x="12.7" y="243.84" size="2.54" layer="94">ARM boot select</text>
<wire x1="7.62" y1="251.46" x2="88.9" y2="251.46" width="0.4064" layer="94"/>
<wire x1="7.62" y1="172.72" x2="7.62" y2="251.46" width="0.4064" layer="94"/>
<wire x1="88.9" y1="172.72" x2="88.9" y2="251.46" width="0.4064" layer="94"/>
<wire x1="7.62" y1="172.72" x2="88.9" y2="172.72" width="0.4064" layer="94"/>
<text x="12.7" y="154.94" size="1.778" layer="91">Used for automated production testing</text>
<text x="12.7" y="160.02" size="2.54" layer="94">JTAG interface for ARM</text>
<wire x1="7.62" y1="167.64" x2="88.9" y2="167.64" width="0.4064" layer="94"/>
<wire x1="7.62" y1="91.44" x2="7.62" y2="167.64" width="0.4064" layer="94"/>
<wire x1="88.9" y1="91.44" x2="88.9" y2="167.64" width="0.4064" layer="94"/>
<wire x1="7.62" y1="91.44" x2="88.9" y2="91.44" width="0.4064" layer="94"/>
<text x="99.06" y="238.76" size="1.778" layer="91">Unused pins from the ESP8266</text>
<text x="99.06" y="243.84" size="2.54" layer="94">Extra IO</text>
<wire x1="93.98" y1="251.46" x2="152.4" y2="251.46" width="0.4064" layer="94"/>
<wire x1="93.98" y1="172.72" x2="93.98" y2="251.46" width="0.4064" layer="94"/>
<wire x1="93.98" y1="172.72" x2="152.4" y2="172.72" width="0.4064" layer="94"/>
<wire x1="152.4" y1="172.72" x2="152.4" y2="251.46" width="0.4064" layer="94"/>
<text x="99.06" y="149.86" size="1.778" layer="91">Used during automated production testing
Note: RX and TX are available on
the ARM JTAG pins</text>
<text x="99.06" y="160.02" size="2.54" layer="94">ESP test pins</text>
<wire x1="93.98" y1="167.64" x2="170.18" y2="167.64" width="0.4064" layer="94"/>
<wire x1="93.98" y1="91.44" x2="93.98" y2="167.64" width="0.4064" layer="94"/>
<wire x1="170.18" y1="91.44" x2="170.18" y2="167.64" width="0.4064" layer="94"/>
<wire x1="93.98" y1="91.44" x2="170.18" y2="91.44" width="0.4064" layer="94"/>
<text x="261.62" y="132.08" size="1.778" layer="91">Used for automated production testing</text>
<text x="261.62" y="137.16" size="2.54" layer="94">Power supply Test points</text>
<wire x1="256.54" y1="144.78" x2="337.82" y2="144.78" width="0.4064" layer="94"/>
<wire x1="256.54" y1="91.44" x2="256.54" y2="144.78" width="0.4064" layer="94"/>
<wire x1="337.82" y1="91.44" x2="337.82" y2="144.78" width="0.4064" layer="94"/>
<wire x1="256.54" y1="91.44" x2="337.82" y2="91.44" width="0.4064" layer="94"/>
<text x="180.34" y="154.94" size="1.778" layer="91">Used for automated production testing</text>
<text x="180.34" y="160.02" size="2.54" layer="94">LED Test points</text>
<wire x1="175.26" y1="167.64" x2="251.46" y2="167.64" width="0.4064" layer="94"/>
<wire x1="175.26" y1="91.44" x2="175.26" y2="167.64" width="0.4064" layer="94"/>
<wire x1="251.46" y1="91.44" x2="251.46" y2="167.64" width="0.4064" layer="94"/>
<wire x1="175.26" y1="91.44" x2="251.46" y2="91.44" width="0.4064" layer="94"/>
<text x="236.22" y="27.94" size="1.778" layer="91">Note: TX, RX pins have conflicts</text>
</plain>
<instances>
<instance part="FRAME2" gate="G$1" x="0" y="0"/>
<instance part="ARM_BOOT" gate="G$1" x="43.18" y="205.74"/>
<instance part="ARM_3V3" gate="G$1" x="53.34" y="144.78"/>
<instance part="ARM_TMS" gate="G$1" x="53.34" y="139.7"/>
<instance part="ARM_TCK" gate="G$1" x="53.34" y="134.62"/>
<instance part="ARM_TX" gate="G$1" x="53.34" y="129.54"/>
<instance part="ARM_RX" gate="G$1" x="53.34" y="124.46"/>
<instance part="ARM_RESET" gate="G$1" x="53.34" y="119.38"/>
<instance part="GND_" gate="G$1" x="53.34" y="114.3"/>
<instance part="GND22" gate="1" x="48.26" y="109.22"/>
<instance part="3V7" gate="G$1" x="124.46" y="203.2" smashed="yes">
<attribute name="VALUE" x="121.92" y="204.47" size="1.778" layer="96"/>
</instance>
<instance part="GND44" gate="1" x="124.46" y="187.96"/>
<instance part="I2C_SDA" gate="G$1" x="119.38" y="129.54"/>
<instance part="I2C_SCL" gate="G$1" x="119.38" y="124.46"/>
<instance part="ESP_GPIO0" gate="G$1" x="119.38" y="139.7"/>
<instance part="ESP_RESET" gate="G$1" x="119.38" y="134.62"/>
<instance part="ARM_RX1" gate="G$1" x="119.38" y="119.38"/>
<instance part="BUTTON" gate="G$1" x="119.38" y="114.3"/>
<instance part="GND" gate="G$1" x="134.62" y="193.04"/>
<instance part="ESP_GPIO5" gate="G$1" x="134.62" y="226.06"/>
<instance part="ESP_GPIO16" gate="G$1" x="134.62" y="215.9"/>
<instance part="+3V3" gate="G$1" x="134.62" y="198.12"/>
<instance part="5V" gate="G$1" x="281.94" y="121.92"/>
<instance part="VBAT" gate="G$1" x="281.94" y="116.84"/>
<instance part="P+6" gate="1" x="274.32" y="127"/>
<instance part="BOOST_5V" gate="G$1" x="281.94" y="111.76"/>
<instance part="LED_DATA" gate="G$1" x="200.66" y="144.78"/>
<instance part="LED_CLK" gate="G$1" x="200.66" y="139.7"/>
<instance part="LED_STB" gate="G$1" x="200.66" y="134.62"/>
<instance part="LED_OE" gate="G$1" x="200.66" y="129.54"/>
<instance part="JTAG" gate="G$1" x="215.9" y="40.64"/>
<instance part="GND1" gate="1" x="228.6" y="27.94"/>
<instance part="DIGITAL_TEST" gate="G$1" x="50.8" y="40.64"/>
<instance part="ANALOG_TEST" gate="G$1" x="121.92" y="40.64"/>
<instance part="GND3" gate="1" x="63.5" y="25.4"/>
<instance part="GND2" gate="1" x="134.62" y="25.4"/>
</instances>
<busses>
</busses>
<nets>
<net name="GND" class="0">
<segment>
<pinref part="GND_" gate="G$1" pin="TP"/>
<wire x1="48.26" y1="114.3" x2="48.26" y2="111.76" width="0.1524" layer="91"/>
<pinref part="GND22" gate="1" pin="GND"/>
</segment>
<segment>
<wire x1="124.46" y1="193.04" x2="124.46" y2="190.5" width="0.1524" layer="91"/>
<pinref part="GND44" gate="1" pin="GND"/>
<pinref part="GND" gate="G$1" pin="TP"/>
<wire x1="129.54" y1="193.04" x2="124.46" y2="193.04" width="0.1524" layer="91"/>
</segment>
<segment>
<pinref part="JTAG" gate="G$1" pin="GND"/>
<pinref part="GND1" gate="1" pin="GND"/>
<wire x1="226.06" y1="33.02" x2="228.6" y2="33.02" width="0.1524" layer="91"/>
<wire x1="228.6" y1="33.02" x2="228.6" y2="30.48" width="0.1524" layer="91"/>
</segment>
<segment>
<pinref part="DIGITAL_TEST" gate="G$1" pin="16"/>
<wire x1="58.42" y1="33.02" x2="63.5" y2="33.02" width="0.1524" layer="91"/>
<wire x1="63.5" y1="33.02" x2="63.5" y2="27.94" width="0.1524" layer="91"/>
<pinref part="GND3" gate="1" pin="GND"/>
</segment>
<segment>
<pinref part="ANALOG_TEST" gate="G$1" pin="16"/>
<wire x1="129.54" y1="33.02" x2="134.62" y2="33.02" width="0.1524" layer="91"/>
<wire x1="134.62" y1="33.02" x2="134.62" y2="27.94" width="0.1524" layer="91"/>
<pinref part="GND2" gate="1" pin="GND"/>
<pinref part="ANALOG_TEST" gate="G$1" pin="14"/>
<wire x1="129.54" y1="35.56" x2="134.62" y2="35.56" width="0.1524" layer="91"/>
<wire x1="134.62" y1="35.56" x2="134.62" y2="33.02" width="0.1524" layer="91"/>
<pinref part="ANALOG_TEST" gate="G$1" pin="12"/>
<wire x1="129.54" y1="38.1" x2="134.62" y2="38.1" width="0.1524" layer="91"/>
<wire x1="134.62" y1="38.1" x2="134.62" y2="35.56" width="0.1524" layer="91"/>
<pinref part="ANALOG_TEST" gate="G$1" pin="10"/>
<wire x1="129.54" y1="40.64" x2="134.62" y2="40.64" width="0.1524" layer="91"/>
<wire x1="134.62" y1="40.64" x2="134.62" y2="38.1" width="0.1524" layer="91"/>
<pinref part="ANALOG_TEST" gate="G$1" pin="8"/>
<wire x1="129.54" y1="43.18" x2="134.62" y2="43.18" width="0.1524" layer="91"/>
<wire x1="134.62" y1="43.18" x2="134.62" y2="40.64" width="0.1524" layer="91"/>
<pinref part="ANALOG_TEST" gate="G$1" pin="6"/>
<wire x1="129.54" y1="45.72" x2="134.62" y2="45.72" width="0.1524" layer="91"/>
<wire x1="134.62" y1="45.72" x2="134.62" y2="43.18" width="0.1524" layer="91"/>
<pinref part="ANALOG_TEST" gate="G$1" pin="4"/>
<wire x1="129.54" y1="48.26" x2="134.62" y2="48.26" width="0.1524" layer="91"/>
<wire x1="134.62" y1="48.26" x2="134.62" y2="45.72" width="0.1524" layer="91"/>
<pinref part="ANALOG_TEST" gate="G$1" pin="2"/>
<wire x1="129.54" y1="50.8" x2="134.62" y2="50.8" width="0.1524" layer="91"/>
<wire x1="134.62" y1="50.8" x2="134.62" y2="48.26" width="0.1524" layer="91"/>
<junction x="134.62" y="48.26"/>
<junction x="134.62" y="45.72"/>
<junction x="134.62" y="43.18"/>
<junction x="134.62" y="40.64"/>
<junction x="134.62" y="38.1"/>
<junction x="134.62" y="35.56"/>
<junction x="134.62" y="33.02"/>
</segment>
</net>
<net name="ARM_3V3" class="0">
<segment>
<pinref part="ARM_3V3" gate="G$1" pin="TP"/>
<wire x1="48.26" y1="144.78" x2="27.94" y2="144.78" width="0.1524" layer="91"/>

</segment>
<segment>
<pinref part="JTAG" gate="G$1" pin="VCC"/>
<wire x1="226.06" y1="48.26" x2="246.38" y2="48.26" width="0.1524" layer="91"/>

</segment>
<segment>
<pinref part="ANALOG_TEST" gate="G$1" pin="9"/>
<wire x1="114.3" y1="40.64" x2="99.06" y2="40.64" width="0.1524" layer="91"/>

</segment>
</net>
<net name="ARM_TCK" class="0">
<segment>
<pinref part="ARM_TCK" gate="G$1" pin="TP"/>
<wire x1="48.26" y1="134.62" x2="27.94" y2="134.62" width="0.1524" layer="91"/>

</segment>
<segment>
<pinref part="JTAG" gate="G$1" pin="TCK"/>
<wire x1="226.06" y1="43.18" x2="246.38" y2="43.18" width="0.1524" layer="91"/>

</segment>
</net>
<net name="ARM_TMS" class="0">
<segment>
<pinref part="ARM_TMS" gate="G$1" pin="TP"/>
<wire x1="48.26" y1="139.7" x2="27.94" y2="139.7" width="0.1524" layer="91"/>

</segment>
<segment>
<pinref part="JTAG" gate="G$1" pin="TMS"/>
<wire x1="226.06" y1="45.72" x2="246.38" y2="45.72" width="0.1524" layer="91"/>

</segment>
</net>
<net name="ARM_RESET" class="0">
<segment>
<pinref part="ARM_RESET" gate="G$1" pin="TP"/>
<wire x1="48.26" y1="119.38" x2="27.94" y2="119.38" width="0.1524" layer="91"/>

</segment>
<segment>
<pinref part="JTAG" gate="G$1" pin="RESET"/>
<wire x1="226.06" y1="35.56" x2="246.38" y2="35.56" width="0.1524" layer="91"/>

</segment>
</net>
<net name="ARM_TX" class="0">
<segment>
<pinref part="ARM_TX" gate="G$1" pin="TP"/>
<wire x1="48.26" y1="129.54" x2="27.94" y2="129.54" width="0.1524" layer="91"/>

</segment>
<segment>
<pinref part="JTAG" gate="G$1" pin="TDO"/>
<wire x1="226.06" y1="40.64" x2="246.38" y2="40.64" width="0.1524" layer="91"/>

</segment>
</net>
<net name="ARM_RX" class="0">
<segment>
<pinref part="ARM_RX" gate="G$1" pin="TP"/>
<wire x1="48.26" y1="124.46" x2="27.94" y2="124.46" width="0.1524" layer="91"/>

</segment>
<segment>
<pinref part="JTAG" gate="G$1" pin="TDI"/>
<wire x1="246.38" y1="38.1" x2="226.06" y2="38.1" width="0.1524" layer="91"/>

</segment>
</net>
<net name="ARM_BOOTLOADER" class="0">
<segment>
<pinref part="ARM_BOOT" gate="G$1" pin="TP"/>
<wire x1="38.1" y1="205.74" x2="15.24" y2="205.74" width="0.1524" layer="91"/>

</segment>
<segment>
<pinref part="DIGITAL_TEST" gate="G$1" pin="1"/>
<wire x1="43.18" y1="50.8" x2="15.24" y2="50.8" width="0.1524" layer="91"/>

</segment>
</net>
<net name="+3V3" class="0">
<segment>
<wire x1="124.46" y1="198.12" x2="124.46" y2="200.66" width="0.1524" layer="91"/>
<pinref part="3V7" gate="G$1" pin="+3V3"/>
<pinref part="+3V3" gate="G$1" pin="TP"/>
<wire x1="129.54" y1="198.12" x2="124.46" y2="198.12" width="0.1524" layer="91"/>
</segment>
<segment>
<pinref part="ANALOG_TEST" gate="G$1" pin="7"/>
<wire x1="114.3" y1="43.18" x2="99.06" y2="43.18" width="0.1524" layer="91"/>

</segment>
</net>
<net name="I2C_SCL" class="0">
<segment>
<pinref part="I2C_SCL" gate="G$1" pin="TP"/>
<wire x1="101.6" y1="124.46" x2="114.3" y2="124.46" width="0.1524" layer="91"/>

</segment>
<segment>
<pinref part="DIGITAL_TEST" gate="G$1" pin="8"/>
<wire x1="81.28" y1="43.18" x2="58.42" y2="43.18" width="0.1524" layer="91"/>

</segment>
</net>
<net name="ARM_RX1" class="0">
<segment>
<pinref part="ARM_RX1" gate="G$1" pin="TP"/>
<wire x1="114.3" y1="119.38" x2="101.6" y2="119.38" width="0.1524" layer="91"/>

</segment>
<segment>
<pinref part="DIGITAL_TEST" gate="G$1" pin="3"/>
<wire x1="43.18" y1="48.26" x2="15.24" y2="48.26" width="0.1524" layer="91"/>

</segment>
</net>
<net name="ESP_GPIO0" class="0">
<segment>
<pinref part="ESP_GPIO0" gate="G$1" pin="TP"/>
<wire x1="114.3" y1="139.7" x2="101.6" y2="139.7" width="0.1524" layer="91"/>

</segment>
<segment>
<pinref part="DIGITAL_TEST" gate="G$1" pin="2"/>
<wire x1="58.42" y1="50.8" x2="81.28" y2="50.8" width="0.1524" layer="91"/>

</segment>
</net>
<net name="BUTTON" class="0">
<segment>
<pinref part="BUTTON" gate="G$1" pin="TP"/>
<wire x1="114.3" y1="114.3" x2="101.6" y2="114.3" width="0.1524" layer="91"/>

</segment>
<segment>
<pinref part="DIGITAL_TEST" gate="G$1" pin="10"/>
<wire x1="58.42" y1="40.64" x2="81.28" y2="40.64" width="0.1524" layer="91"/>

</segment>
</net>
<net name="ESP_RESET" class="0">
<segment>
<pinref part="ESP_RESET" gate="G$1" pin="TP"/>
<wire x1="114.3" y1="134.62" x2="101.6" y2="134.62" width="0.1524" layer="91"/>

</segment>
<segment>
<pinref part="DIGITAL_TEST" gate="G$1" pin="4"/>
<wire x1="81.28" y1="48.26" x2="58.42" y2="48.26" width="0.1524" layer="91"/>

</segment>
</net>
<net name="ESP_GPIO16" class="0">
<segment>
<wire x1="129.54" y1="215.9" x2="106.68" y2="215.9" width="0.1524" layer="91"/>

<pinref part="ESP_GPIO16" gate="G$1" pin="TP"/>
</segment>
<segment>
<pinref part="DIGITAL_TEST" gate="G$1" pin="5"/>
<wire x1="43.18" y1="45.72" x2="15.24" y2="45.72" width="0.1524" layer="91"/>

</segment>
</net>
<net name="I2C_SDA" class="0">
<segment>
<pinref part="I2C_SDA" gate="G$1" pin="TP"/>
<wire x1="114.3" y1="129.54" x2="101.6" y2="129.54" width="0.1524" layer="91"/>

</segment>
<segment>
<pinref part="DIGITAL_TEST" gate="G$1" pin="6"/>
<wire x1="58.42" y1="45.72" x2="81.28" y2="45.72" width="0.1524" layer="91"/>

</segment>
</net>
<net name="VBAT" class="0">
<segment>
<pinref part="VBAT" gate="G$1" pin="TP"/>
<wire x1="276.86" y1="116.84" x2="264.16" y2="116.84" width="0.1524" layer="91"/>

</segment>
<segment>
<pinref part="ANALOG_TEST" gate="G$1" pin="3"/>
<wire x1="99.06" y1="48.26" x2="114.3" y2="48.26" width="0.1524" layer="91"/>

</segment>
</net>
<net name="BOOST_5V" class="0">
<segment>
<pinref part="BOOST_5V" gate="G$1" pin="TP"/>
<wire x1="276.86" y1="111.76" x2="264.16" y2="111.76" width="0.1524" layer="91"/>

</segment>
<segment>
<pinref part="ANALOG_TEST" gate="G$1" pin="1"/>
<wire x1="114.3" y1="50.8" x2="99.06" y2="50.8" width="0.1524" layer="91"/>

</segment>
</net>
<net name="+5V" class="0">
<segment>
<pinref part="5V" gate="G$1" pin="TP"/>
<wire x1="276.86" y1="121.92" x2="274.32" y2="121.92" width="0.1524" layer="91"/>
<wire x1="274.32" y1="121.92" x2="274.32" y2="124.46" width="0.1524" layer="91"/>
<pinref part="P+6" gate="1" pin="+5V"/>
</segment>
<segment>
<pinref part="ANALOG_TEST" gate="G$1" pin="5"/>
<wire x1="114.3" y1="45.72" x2="99.06" y2="45.72" width="0.1524" layer="91"/>

</segment>
</net>
<net name="LED_STB" class="0">
<segment>
<pinref part="LED_STB" gate="G$1" pin="TP"/>
<wire x1="195.58" y1="134.62" x2="182.88" y2="134.62" width="0.1524" layer="91"/>

</segment>
<segment>
<pinref part="DIGITAL_TEST" gate="G$1" pin="11"/>
<wire x1="43.18" y1="38.1" x2="15.24" y2="38.1" width="0.1524" layer="91"/>

</segment>
</net>
<net name="LED_CLK" class="0">
<segment>
<pinref part="LED_CLK" gate="G$1" pin="TP"/>
<wire x1="195.58" y1="139.7" x2="182.88" y2="139.7" width="0.1524" layer="91"/>

</segment>
<segment>
<pinref part="DIGITAL_TEST" gate="G$1" pin="9"/>
<wire x1="15.24" y1="40.64" x2="43.18" y2="40.64" width="0.1524" layer="91"/>

</segment>
</net>
<net name="LED_DAT_0" class="0">
<segment>
<pinref part="LED_DATA" gate="G$1" pin="TP"/>
<wire x1="195.58" y1="144.78" x2="182.88" y2="144.78" width="0.1524" layer="91"/>

</segment>
<segment>
<pinref part="DIGITAL_TEST" gate="G$1" pin="7"/>
<wire x1="43.18" y1="43.18" x2="15.24" y2="43.18" width="0.1524" layer="91"/>

</segment>
</net>
<net name="LED_OE" class="0">
<segment>
<pinref part="LED_OE" gate="G$1" pin="TP"/>
<wire x1="195.58" y1="129.54" x2="182.88" y2="129.54" width="0.1524" layer="91"/>

</segment>
<segment>
<pinref part="DIGITAL_TEST" gate="G$1" pin="13"/>
<wire x1="15.24" y1="35.56" x2="43.18" y2="35.56" width="0.1524" layer="91"/>

</segment>
</net>
<net name="ESP_GPIO5" class="0">
<segment>
<pinref part="DIGITAL_TEST" gate="G$1" pin="12"/>
<wire x1="81.28" y1="38.1" x2="58.42" y2="38.1" width="0.1524" layer="91"/>

</segment>
<segment>

<pinref part="ESP_GPIO5" gate="G$1" pin="TP"/>
<wire x1="129.54" y1="226.06" x2="106.68" y2="226.06" width="0.1524" layer="91"/>
</segment>
</net>
</nets>
</sheet>
</sheets>
</schematic>
</drawing>
<compatibility>
<note version="6.3" minversion="6.2.2" severity="warning">
Since Version 6.2.2 text objects can contain more than one line,
which will not be processed correctly with this version.
</note>
</compatibility>
</eagle>

repository: Blinkinlabs/EightByEight

repo_name: Blinkinlabs/EightByEight

gha_language: Eagle


text:
// This tool dumps EXIF information from images.
//
// Example command-line:
//
//   exif-read-tool -filepath <file-path>
//
// Example Output:
//
//   IFD=[IfdIdentity<PARENT-NAME=[] NAME=[IFD]>] ID=(0x010f) NAME=[Make] COUNT=(6) TYPE=[ASCII] VALUE=[Canon]
//   IFD=[IfdIdentity<PARENT-NAME=[] NAME=[IFD]>] ID=(0x0110) NAME=[Model] COUNT=(22) TYPE=[ASCII] VALUE=[Canon EOS 5D Mark III]
//   IFD=[IfdIdentity<PARENT-NAME=[] NAME=[IFD]>] ID=(0x0112) NAME=[Orientation] COUNT=(1) TYPE=[SHORT] VALUE=[1]
//   IFD=[IfdIdentity<PARENT-NAME=[] NAME=[IFD]>] ID=(0x011a) NAME=[XResolution] COUNT=(1) TYPE=[RATIONAL] VALUE=[72/1]
//   ...
package main

import (
	"fmt"
	"os"

	"encoding/json"
	"io/ioutil"

	"github.com/dsoprea/go-logging"
	"github.com/jessevdk/go-flags"

	"github.com/dsoprea/go-exif/v3"
	"github.com/dsoprea/go-exif/v3/common"
)

const (
	thumbnailFilenameIndexPlaceholder = "<index>"
)

var (
	mainLogger = log.NewLogger("main.main")
)

// IfdEntry is a JSON model for representing a single tag.
type IfdEntry struct {
	IfdPath     string                      `json:"ifd_path"`
	FqIfdPath   string                      `json:"fq_ifd_path"`
	IfdIndex    int                         `json:"ifd_index"`
	TagId       uint16                      `json:"tag_id"`
	TagName     string                      `json:"tag_name"`
	TagTypeId   exifcommon.TagTypePrimitive `json:"tag_type_id"`
	TagTypeName string                      `json:"tag_type_name"`
	UnitCount   uint32                      `json:"unit_count"`
	Value       interface{}                 `json:"value"`
	ValueString string                      `json:"value_string"`
}

type parameters struct {
	Filepath                string `short:"f" long:"filepath" required:"true" description:"File-path of image"`
	PrintAsJson             bool   `short:"j" long:"json" description:"Print out as JSON"`
	IsVerbose               bool   `short:"v" long:"verbose" description:"Print logging"`
	ThumbnailOutputFilepath string `short:"t" long:"thumbnail-output-filepath" description:"File-path to write thumbnail to (if present)"`
	DoNotPrintTags          bool   `short:"n" long:"no-tags" description:"Do not actually print tags. Good for auditing the logs or merely checking the EXIF structure for errors."`
	SkipBlocks              int    `short:"s" long:"skip" description:"Skip this many EXIF blocks before returning"`
	DoUniversalTagSearch    bool   `short:"u" long:"universal-tags" description:"If tags not found in known mapped IFDs, fallback to trying all IFDs."`
}

var (
	arguments = new(parameters)
)

func main() {
	defer func() {
		if errRaw := recover(); errRaw != nil {
			err := errRaw.(error)
			log.PrintError(err)

			os.Exit(-2)
		}
	}()

	_, err := flags.Parse(arguments)
	if err != nil {
		os.Exit(-1)
	}

	if arguments.IsVerbose == true {
		cla := log.NewConsoleLogAdapter()
		log.AddAdapter("console", cla)

		scp := log.NewStaticConfigurationProvider()
		scp.SetLevelName(log.LevelNameDebug)

		log.LoadConfiguration(scp)
	}

	f, err := os.Open(arguments.Filepath)
	log.PanicIf(err)

	data, err := ioutil.ReadAll(f)
	log.PanicIf(err)

	rawExif, err := exif.SearchAndExtractExifN(data, arguments.SkipBlocks)
	if err != nil {
		if err == exif.ErrNoExif {
			fmt.Printf("No EXIF data.\n")
			os.Exit(1)
		}

		log.Panic(err)
	}

	mainLogger.Debugf(nil, "EXIF blob is (%d) bytes.", len(rawExif))

	// Run the parse.

	entries, _, err := exif.GetFlatExifDataUniversalSearch(rawExif, nil, arguments.DoUniversalTagSearch)
	if err != nil {
		if arguments.SkipBlocks > 0 {
			mainLogger.Warningf(nil, "Encountered an error. This might be related to the request to skip EXIF blocks.")
		}

		log.Panic(err)
	}

	// Write the thumbnail is requested and present.

	thumbnailOutputFilepath := arguments.ThumbnailOutputFilepath
	if thumbnailOutputFilepath != "" {
		im, err := exifcommon.NewIfdMappingWithStandard()
		log.PanicIf(err)

		ti := exif.NewTagIndex()

		_, index, err := exif.Collect(im, ti, rawExif)
		log.PanicIf(err)

		var thumbnail []byte
		if ifd, found := index.Lookup[exif.ThumbnailFqIfdPath]; found == true {
			thumbnail, err = ifd.Thumbnail()
			if err != nil && err != exif.ErrNoThumbnail {
				log.Panic(err)
			}
		}

		if thumbnail == nil {
			mainLogger.Debugf(nil, "No thumbnails found.")
		} else {
			if arguments.PrintAsJson == false {
				fmt.Printf("Writing (%d) bytes for thumbnail: [%s]\n", len(thumbnail), thumbnailOutputFilepath)
				fmt.Printf("\n")
			}

			err := ioutil.WriteFile(thumbnailOutputFilepath, thumbnail, 0644)
			log.PanicIf(err)
		}
	}

	if arguments.DoNotPrintTags == false {
		if arguments.PrintAsJson == true {
			data, err := json.MarshalIndent(entries, "", "    ")
			log.PanicIf(err)

			fmt.Println(string(data))
		} else {
			thumbnailTags := 0
			for _, entry := range entries {
				fmt.Printf("IFD-PATH=[%s] ID=(0x%04x) NAME=[%s] COUNT=(%d) TYPE=[%s] VALUE=[%s]\n", entry.IfdPath, entry.TagId, entry.TagName, entry.UnitCount, entry.TagTypeName, entry.Formatted)
			}

			fmt.Printf("\n")

			if thumbnailTags == 2 {
				fmt.Printf("There is a thumbnail.\n")
				fmt.Printf("\n")
			}
		}
	}
}

license: MIT

repository: dsoprea/go-exif

license_type: permissive

repo_name: dsoprea/go-exif

branch_name: refs/heads/master

gha_license_id: MIT

gha_language: Go

extension: go


text:
// Copyright (c) 2012 The 'objc' Package Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package core

import "github.com/progrium/macdriver/objc"

type NSThread struct {
	objc.Object
}

var NSThread_ = objc.Get("NSThread")

func NSThread_IsMainThread() bool {
	return NSThread_.Send("isMainThread") != nil
}

repository: kyleparisi/macdriver

repo_name: kyleparisi/macdriver

branch_name: refs/heads/main


text:
set(CMAKE_TOOLCHAIN_FILE ${PX4_SOURCE_DIR}/cmake/toolchains/Toolchain-native.cmake)

set(config_module_list
	#drivers/barometer
	drivers/differential_pressure
	drivers/distance_sensor
	#drivers/telemetry

	drivers/batt_smbus
	drivers/camera_trigger
	drivers/gps
	drivers/linux_gpio
	drivers/pwm_out_sim
	drivers/vmount

	modules/sensors

	platforms/posix/drivers/tonealrmsim

	#
	# System commands
	#
	#systemcmds/bl_update
	#systemcmds/config
	#systemcmds/dumpfile
	systemcmds/esc_calib
	systemcmds/led_control
	systemcmds/mixer
	systemcmds/motor_ramp
	#systemcmds/mtd
	#systemcmds/nshterm
	systemcmds/param
	systemcmds/perf
	systemcmds/pwm
	systemcmds/reboot
	systemcmds/shutdown
	systemcmds/sd_bench
	systemcmds/top
	systemcmds/topic_listener
	systemcmds/tune_control
	systemcmds/ver

	#
	# Testing
	#
	drivers/distance_sensor/sf0x/sf0x_tests
	#drivers/test_ppm
	lib/rc/rc_tests
	modules/commander/commander_tests
	lib/controllib/controllib_test
	modules/mavlink/mavlink_tests
	modules/uORB/uORB_tests
	systemcmds/tests

	platforms/posix/tests/hello
	platforms/posix/tests/hrt_test
	platforms/posix/tests/vcdev_test

	#
	# General system control
	#
	modules/camera_feedback
	modules/commander
	modules/events
	#modules/gpio_led
	modules/land_detector
	modules/load_mon
	modules/mavlink
	modules/navigator
	modules/replay
	modules/simulator
	#modules/uavcan

	#
	# Estimation modules
	#
	modules/attitude_estimator_q
	modules/ekf2
	modules/local_position_estimator
	modules/position_estimator_inav
	modules/wind_estimator

	#
	# Vehicle Control
	#
	modules/fw_att_control
	modules/fw_pos_control_l1
	modules/gnd_att_control
	modules/gnd_pos_control
	modules/mc_att_control
	modules/mc_pos_control
	modules/vtol_att_control

	#
	# Logging
	#
	modules/logger

	#
	# Library modules
	#
	modules/dataman
	modules/landing_target_estimator

	#
	# OBC challenge
	#
	examples/bottle_drop

	#
	# Rover apps
	#
	examples/rover_steering_control

	#
	# HippoCampus example (AUV from TUHH)
	#
	examples/uuv_example_app

	#
	# Segway
	#
	examples/segway

	#
	# Demo apps
	#

	# Tutorial code from
	# https://px4.io/dev/px4_simple_app
	examples/px4_simple_app

	# Tutorial code from
	# https://px4.io/dev/debug_values
	examples/px4_mavlink_debug

	# Tutorial code from
	# https://px4.io/dev/example_fixedwing_control
	examples/fixedwing_control

	# Template Module
	templates/module

	# Hardware test
	#examples/hwtest
)

set(config_sitl_viewer jmavsim CACHE STRING "viewer for sitl")
set_property(CACHE config_sitl_viewer PROPERTY STRINGS "jmavsim;none")

set(config_sitl_debugger disable CACHE STRING "debugger for sitl")
set_property(CACHE config_sitl_debugger PROPERTY STRINGS "disable;gdb;lldb")

# If the environment variable 'replay' is defined, we are building with replay
# support. In this case, we enable the orb publisher rules.
set(REPLAY_FILE "$ENV{replay}")
if(REPLAY_FILE)
	message("Building with uorb publisher rules support")
	add_definitions(-DORB_USE_PUBLISHER_RULES)
endif()

repository: airmind/OpenMindPX

repo_name: airmind/OpenMindPX

extension: cmake


text:
@article{mateescu_unsteady_1994,
  title = {Unsteady {{Annular Viscous Flows Between Oscillating Cylinders}}. {{Part I}}: {{Computational Solutions Based}} on a {{Time}}-{{Integration Method}}},
  shorttitle = {Unsteady {{Annular Viscous Flows Between Oscillating Cylinders}}. {{Part I}}},
  author = {Mateescu, D. and Pa{\"{\i}}doussis, M.P. and Belanger, F.},
  year = {1994},
  month = jul,
  volume = {8},
  pages = {489--507},
  issn = {08899746},
  doi = {10.1006/jfls.1994.1024},
  journal = {Journal of Fluids and Structures},
  language = {en},
  number = {5}
}

url: https://raw.githubusercontent.com/retorquere/bibtex-parser/05fd68b215b96634dea5a7e6ea5e1be187caf3ed/test/better-bibtex/export/Regression in export to better biblatex #1491.bibtex

repository: retorquere/bibtex-parser

repo_name: retorquere/bibtex-parser

gha_language: TeX

extension: bibtex


text:
DESCRIPTION = "Qt4 demo descriptions for Matrix v2"
HOMEPAGE = "https://gforge.ti.com/gf/project/matrixguiv2apps/"
LICENSE = "CC-BY-SA"

inherit allarch

SRC_URI = "https://gforge.ti.com/gf/download/frsrelease/608/5036/qt4demos_1.0.tar.gz"

S = ${WORKDIR}/qt4demos

require matrix-gui-apps.inc

# Make sure qt4 submenu has been installed
RDEPENDS +=  matrix-gui-submenus-qt4

FILES_${PN} += "${MATRIX_BASE_DIR}/*"

SRC_URI[md5sum] = "49b65c4af67117ba70e0ddabfe486abe"
SRC_URI[sha256sum] = "8367c539caf6902961db4b8f38b0fb1f05b7b105d5e7fd143c9503ca0c8a1df2"

repository: kergoth/meta-ti

repo_name: kergoth/meta-ti

extension: bb


text:
/*
 * SPDX-FileCopyrightText: 2020 SAP SE or an SAP affiliate company <deborah.cholmeley-jones@sap.com>
 *
 * SPDX-License-Identifier: Apache-2.0
 */
import { Component } from '@angular/core';
import { OrderDetailItemsComponent, OrderDetailsService, PromotionService } from '@spartacus/storefront';

@Component({
  selector: 'cx-order-details-items',
  templateUrl: './tma-order-detail-items.component.html',
})
export class TmaOrderDetailItemsComponent extends OrderDetailItemsComponent {

  constructor(
    orderDetailsService: OrderDetailsService,
    promotionService?: PromotionService
  ) {
    super(orderDetailsService, promotionService);
  }
}

repository: skhasgiw-SPA/spartacus-tua

repo_name: skhasgiw-SPA/spartacus-tua

extension: ts


text:
package sensors

import "github.com/tinogoehlert/gobuki/utils"

type DockingSignal struct {
	None       bool
	FarLeft    bool
	FarCenter  bool
	FarRight   bool
	NearLeft   bool
	NearCenter bool
	NearRight  bool
}

func (ds *DockingSignal) FromByte(val byte) {
	ds.NearLeft = utils.BitHas(val, 0x01)
	ds.NearCenter = utils.BitHas(val, 0x02)
	ds.NearRight = utils.BitHas(val, 0x04)
	ds.FarCenter = utils.BitHas(val, 0x08)
	ds.NearLeft = utils.BitHas(val, 0x10)
	ds.NearRight = utils.BitHas(val, 0x20)
	ds.None = (val == 0x00)
}

//DockingIR Collection of Docking IR Signals for Right, Center and Left
type DockingIR struct {
	Left   DockingSignal
	Center DockingSignal
	Right  DockingSignal
}

//NewDockingIRFromBytes generates a new DockingIR Objects from bytes
func NewDockingIRFromBytes(p []byte) (*DockingIR, error) {
	dockIR := DockingIR{}
	dockIR.Right.FromByte(p[0])
	dockIR.Center.FromByte(p[1])
	dockIR.Left.FromByte(p[2])

	return &dockIR, nil
}

func (ds *DockingSignal) equalsSignal(v *DockingSignal) bool {
	if ds.FarCenter != v.FarCenter ||
		ds.FarLeft != v.FarLeft ||
		ds.FarRight != v.FarRight ||
		ds.NearCenter != v.NearCenter ||
		ds.NearLeft != v.NearLeft ||
		ds.NearRight != v.NearRight ||
		ds.None != v.None {
		return true
	}
	return false
}

// Equals compares current object with argument
func (d *DockingIR) Equals(v *DockingIR) bool {
	if v == nil {
		return true
	}
	if d.Center.equalsSignal(&v.Center) &&
		d.Right.equalsSignal(&v.Right) &&
		d.Left.equalsSignal(&v.Left) {
		return true
	}
	return false
}

// GetID Gets the Name of the SubPacket
func (d *DockingIR) GetID() byte {
	return 0x03
}

// GetName Gets the Name of the SubPacket
func (d *DockingIR) GetName() string {
	return "DockingIR"
}

repository: tinogoehlert/gobuki

repo_name: tinogoehlert/gobuki


text:
DESCRIPTION = "This is a small collection of power management \
    test and investigation tools"
HOMEPAGE = "http://lesswatts.org/projects/acpi"
LICENSE = "GPL-2.0-or-later"
LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3"

PV = "20130209+git${SRCPV}"

SRC_URI = "git://github.com/anyc/pmtools.git;branch=master;protocol=https \
    file://pmtools-switch-to-dynamic-buffer-for-huge-ACPI-table.patch \
"
SRCREV = "3ebe0e54c54061b4c627236cbe35d820de2e1168"

COMPATIBLE_HOST = "(i.86|x86_64).*-linux"

S = "${WORKDIR}/git"

inherit update-alternatives

ALTERNATIVE_PRIORITY = "90"
ALTERNATIVE:${PN} = "acpixtract acpidump"

do_configure[noexec] = "1"
do_compile() {
    oe_runmake
}

do_install() {
    install -d ${D}${bindir} ${D}${docdir}
    install -m 755 ${S}/acpidump/acpidump ${D}${bindir}
    install -m 755 ${S}/acpixtract/acpixtract ${D}${bindir}
    install -m 755 ${S}/madt/madt ${D}${bindir}
    install -m 644 ${S}/README ${D}${docdir}
}

repository: openembedded/meta-openembedded

repo_name: openembedded/meta-openembedded

gha_language: BitBake


text:
package api

import (
	"io"
	"net/http"

	"github.com/thetogi/YReserve2/api/wrapper"
)

func (a *API) InitHealthCheck() {
	a.Router.APIRoot.Handle("/healthCheck", a.requestHandler(a.HealthCheck))
}

// HealthCheck func is used to check health check status
func (a *API) HealthCheck(c *wrapper.RequestContext, w http.ResponseWriter, r *http.Request) {
	// Check for status of DB or cache (Redis) in future
	io.WriteString(w, `{"alive": true}`)
}


text:
// Code generated by smithy-go-codegen DO NOT EDIT.

package wafregional

import (
	"context"
	awsmiddleware "github.com/aws/aws-sdk-go-v2/aws/middleware"
	"github.com/aws/aws-sdk-go-v2/aws/signer/v4"
	"github.com/aws/aws-sdk-go-v2/service/wafregional/types"
	"github.com/aws/smithy-go/middleware"
	smithyhttp "github.com/aws/smithy-go/transport/http"
)

// This is AWS WAF Classic documentation. For more information, see AWS WAF Classic
// (https://docs.aws.amazon.com/waf/latest/developerguide/classic-waf-chapter.html)
// in the developer guide. For the latest version of AWS WAF, use the AWS WAFV2 API
// and see the AWS WAF Developer Guide
// (https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html). With
// the latest version, AWS WAF has a single set of endpoints for regional and
// global use. Inserts or deletes Predicate objects in a rule and updates the
// RateLimit in the rule. Each Predicate object identifies a predicate, such as a
// ByteMatchSet or an IPSet, that specifies the web requests that you want to block
// or count. The RateLimit specifies the number of requests every five minutes that
// triggers the rule. If you add more than one predicate to a RateBasedRule, a
// request must match all the predicates and exceed the RateLimit to be counted or
// blocked. For example, suppose you add the following to a RateBasedRule:
//
// * An
// IPSet that matches the IP address 192.0.2.44/32
//
// * A ByteMatchSet that matches
// BadBot in the User-Agent header
//
// Further, you specify a RateLimit of 1,000. You
// then add the RateBasedRule to a WebACL and specify that you want to block
// requests that satisfy the rule. For a request to be blocked, it must come from
// the IP address 192.0.2.44 and the User-Agent header in the request must contain
// the value BadBot. Further, requests that match these two conditions much be
// received at a rate of more than 1,000 every five minutes. If the rate drops
// below this limit, AWS WAF no longer blocks the requests. As a second example,
// suppose you want to limit requests to a particular page on your site. To do
// this, you could add the following to a RateBasedRule:
//
// * A ByteMatchSet with
// FieldToMatch of URI
//
// * A PositionalConstraint of STARTS_WITH
//
// * A TargetString
// of login
//
// Further, you specify a RateLimit of 1,000. By adding this
// RateBasedRule to a WebACL, you could limit requests to your login page without
// affecting the rest of your site.
func (c *Client) UpdateRateBasedRule(ctx context.Context, params *UpdateRateBasedRuleInput, optFns ...func(*Options)) (*UpdateRateBasedRuleOutput, error) {
	if params == nil {
		params = &UpdateRateBasedRuleInput{}
	}

	result, metadata, err := c.invokeOperation(ctx, "UpdateRateBasedRule", params, optFns, addOperationUpdateRateBasedRuleMiddlewares)
	if err != nil {
		return nil, err
	}

	out := result.(*UpdateRateBasedRuleOutput)
	out.ResultMetadata = metadata
	return out, nil
}

type UpdateRateBasedRuleInput struct {

	// The value returned by the most recent call to GetChangeToken.
	//
	// This member is required.
	ChangeToken *string

	// The maximum number of requests, which have an identical value in the field
	// specified by the RateKey, allowed in a five-minute period. If the number of
	// requests exceeds the RateLimit and the other predicates specified in the rule
	// are also met, AWS WAF triggers the action that is specified for this rule.
	//
	// This member is required.
	RateLimit int64

	// The RuleId of the RateBasedRule that you want to update. RuleId is returned by
	// CreateRateBasedRule and by ListRateBasedRules.
	//
	// This member is required.
	RuleId *string

	// An array of RuleUpdate objects that you want to insert into or delete from a
	// RateBasedRule.
	//
	// This member is required.
	Updates []types.RuleUpdate
}

type UpdateRateBasedRuleOutput struct {

	// The ChangeToken that you used to submit the UpdateRateBasedRule request. You can
	// also use this value to query the status of the request. For more information,
	// see GetChangeTokenStatus.
	ChangeToken *string

	// Metadata pertaining to the operation's result.
	ResultMetadata middleware.Metadata
}

func addOperationUpdateRateBasedRuleMiddlewares(stack *middleware.Stack, options Options) (err error) {
	err = stack.Serialize.Add(&awsAwsjson11_serializeOpUpdateRateBasedRule{}, middleware.After)
	if err != nil {
		return err
	}
	err = stack.Deserialize.Add(&awsAwsjson11_deserializeOpUpdateRateBasedRule{}, middleware.After)
	if err != nil {
		return err
	}
	if err = addSetLoggerMiddleware(stack, options); err != nil {
		return err
	}
	if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil {
		return err
	}
	if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil {
		return err
	}
	if err = addResolveEndpointMiddleware(stack, options); err != nil {
		return err
	}
	if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil {
		return err
	}
	if err = addRetryMiddlewares(stack, options); err != nil {
		return err
	}
	if err = addHTTPSignerV4Middleware(stack, options); err != nil {
		return err
	}
	if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil {
		return err
	}
	if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil {
		return err
	}
	if err = addClientUserAgent(stack); err != nil {
		return err
	}
	if err = smithyhttp.AddErrorCloseResponseBodyMiddleware(stack); err != nil {
		return err
	}
	if err = smithyhttp.AddCloseResponseBodyMiddleware(stack); err != nil {
		return err
	}
	if err = addOpUpdateRateBasedRuleValidationMiddleware(stack); err != nil {
		return err
	}
	if err = stack.Initialize.Add(newServiceMetadataMiddleware_opUpdateRateBasedRule(options.Region), middleware.Before); err != nil {
		return err
	}
	if err = addRequestIDRetrieverMiddleware(stack); err != nil {
		return err
	}
	if err = addResponseErrorMiddleware(stack); err != nil {
		return err
	}
	if err = addRequestResponseLogging(stack, options); err != nil {
		return err
	}
	return nil
}

func newServiceMetadataMiddleware_opUpdateRateBasedRule(region string) *awsmiddleware.RegisterServiceMetadata {
	return &awsmiddleware.RegisterServiceMetadata{
		Region:        region,
		ServiceID:     ServiceID,
		SigningName:   "waf-regional",
		OperationName: "UpdateRateBasedRule",
	}
}


text:
import { Method } from '../types/RokulRunnings';
import { IncomingHttpHeaders } from 'http';
import axios from 'axios';
import * as FormData from 'form-data';

/** Function to generate auth headers */
export async function generateHeaders({
  method,
  address,
  formData,
}: {
  method: Method;
  address: string;
  formData?: FormData;
}): Promise<IncomingHttpHeaders> {
  /** If executing a GET */
  if (method === 'GET') {
    return generateGetHeaders(address);
  } else {
    /** If executing a POST */
    return generatePostHeaders({
      address,
      formData: formData,
    });
  }
}

/** Function to return headers for a GET request */
async function generateGetHeaders(url: string): Promise<IncomingHttpHeaders> {
  try {
    const result = await axios.get(url);
    return result.headers;
  } catch (error) {
    if (error.response) {
      if (error.response.status !== 401) console.error(error);
      else return error.response.headers;
    }
  }
}

/** Function to return headers for a POST request */
async function generatePostHeaders({
  address,
  formData,
}: {
  address: string;
  formData: FormData;
}): Promise<IncomingHttpHeaders> {
  try {
    const result = await axios.post(address, formData, {
      headers: formData.getHeaders(),
    });
    return result.headers;
  } catch (error) {
    if (error.response) {
      if (error.response.status !== 401) throw error;
      else {
        return error.response.headers;
      }
    }
  }
}

repository: willowtreeapps/rokul-runnings

repo_name: willowtreeapps/rokul-runnings

gha_language: TypeScript


text:
/* W. H. Bell
** A simple container.
*/

#ifndef BAG_H
#define BAG_H

class Bag {
public:
  /** Default constructor */
  Bag();

  /** Constructor with specified bag volume */
  Bag(double volume);

  /** A function to return the volume */
  double getVolume(void);

  /** A function to set the volume */
  void setVolume(double volume);

private:
  /** A data member to store the volume */
  double m_volume;
};

#endif

repository: williamhbell/HepCppIntro

repo_name: williamhbell/HepCppIntro

extension: h


text:
package properties

import (
	"context"
	"fmt"
	"io/ioutil"
	"net/http"
	"sync/atomic"

	log "github.com/sirupsen/logrus"
)

type reqSender struct {
	client      *http.Client
	requests    chan *http.Request
	workerCount uint
	ctx         context.Context

	RunningWorkers         int64
	TotalRequestsStarted   int64
	TotalRequestsCompleted int64
	TotalRequestsFailed    int64
}

func newReqSender(ctx context.Context, client *http.Client, workerCount uint) *reqSender {
	return &reqSender{
		client: client,
		// Unbuffered so that it blocks clients
		requests:    make(chan *http.Request),
		workerCount: workerCount,
		ctx:         ctx,
	}
}

// Not thread-safe
func (rs *reqSender) send(req *http.Request) {
	// Slight optimization to avoid spinning up unnecessary workers if there
	// aren't ever that many dim updates. Once workers start, they remain for the
	// duration of the agent.
	select {
	case rs.requests <- req:
		return
	default:
		if atomic.LoadInt64(&rs.RunningWorkers) < int64(rs.workerCount) {
			go rs.processRequests(rs.ctx)
		}

		// Block until we can get through a request
		rs.requests <- req
	}
}

//nolint: gochecknoglobals
type writerKey int

//nolint: gochecknoglobals
var reqDoneCallbackKeyVar writerKey

func (rs *reqSender) processRequests(ctx context.Context) {
	atomic.AddInt64(&rs.RunningWorkers, int64(1))
	defer atomic.AddInt64(&rs.RunningWorkers, int64(-1))

	for {
		select {
		case <-ctx.Done():
			return
		case req := <-rs.requests:
			atomic.AddInt64(&rs.TotalRequestsStarted, int64(1))
			if err := sendRequest(rs.client, req); err != nil {
				atomic.AddInt64(&rs.TotalRequestsFailed, int64(1))
				log.WithError(err).WithField("url", req.URL.String()).Error("Unable to update dimension")
				continue
			}
			atomic.AddInt64(&rs.TotalRequestsCompleted, int64(1))

			if cb := req.Context().Value(reqDoneCallbackKeyVar); cb != nil {
				cb.(func())()
			}
		}
	}
}

func sendRequest(client *http.Client, req *http.Request) error {
	resp, err := client.Do(req)

	if err != nil {
		return err
	}
	defer resp.Body.Close()

	if resp.StatusCode != 200 {
		body, _ := ioutil.ReadAll(resp.Body)
		return fmt.Errorf("unexpected status code %d on response %s", resp.StatusCode, string(body))
	}

	return nil
}

repository: selatotal/signalfx-agent

repo_name: selatotal/signalfx-agent


text:
package main

import (
	"fmt"
	"time"
)

func main() {
	// To count the number of units in a Duration, divide:
	second := time.Second
	fmt.Println(int64(second / time.Millisecond)) // prints 1000

	// To convert an integer number of units to a Duration, multiply:
	seconds := 10
	fmt.Println(time.Duration(seconds) * time.Second)      // prints 10s
	fmt.Println(time.Duration(seconds) * time.Millisecond) // prints 10ms

	// Sleep pauses the current goroutine for at least the duration d.
	// A negative or zero duration causes Sleep to return immediately.
	fmt.Println("Sleeping ...")
	time.Sleep(100 * time.Millisecond)

	// time duration calculation
	startTime := time.Now()
	time.Sleep(100)
	endTime := time.Now()
	fmt.Printf("The call took %v to run.\n", endTime.Sub(startTime))

	// Parsing time units string
	m, _ := time.ParseDuration("1m30s")
	fmt.Printf("Take off in t-%.0f seconds.\n", m.Seconds())

	t1 := time.Date(2019, time.December, 15, 0, 9, 0, 0, time.UTC)
	t2 := time.Date(2021, time.October, 16, 0, 32, 4, 0, time.UTC)
	fmt.Println(t2.Sub(t1).String()) // 16104h23m4s

	d := time.Date(2000, 2, 1, 12, 30, 0, 0, time.UTC)
	year, month, day := d.Date()

	fmt.Printf("year = %v\n", year)
	fmt.Printf("month = %v\n", month)
	fmt.Printf("day = %v\n", day)

	fmt.Printf(`year = %v month = %v day = %v`,
		year, month, day)

}

repository: udhayprakash/GoLangMaterial

repo_name: udhayprakash/GoLangMaterial


text:
import { RequestHandler } from 'express';

import config from '../config/config';
import { WrongAuthenticationTokenError, AuthenticationTokenMissingError } from '../errors';
import User from '../models/User';
import { IAuthenticateRequest } from '../interfaces/request';
import { JWT } from '../services/jwt';

const JWTService = new JWT(config);

const authMiddleware: RequestHandler = async (req: IAuthenticateRequest, res, next) => {
  const cookies = req.cookies;
  const headers = req.headers;

  const bearerToken: string = cookies?.Authorization ?? headers?.authorization;
  if (bearerToken) {
    try {
      const [, token] = bearerToken.split(' ');
      const data = (await JWTService.verifyToken(token)) as { [key: string]: string };
      if (data) {
        const user = await User.findById(data.id);
        if (!user) {
          next(new WrongAuthenticationTokenError());
        }
        req.user = user;
        next();
      } else {
        next(new WrongAuthenticationTokenError());
      }
    } catch (error) {
      next(new WrongAuthenticationTokenError());
    }
  } else {
    next(new AuthenticationTokenMissingError());
  }
};

export default authMiddleware;


text:
// Copyright 2015 Apcera Inc. All rights reserved.

package main

import (
	"flag"
	"fmt"
	"io/ioutil"
	"log"
	"strings"
	"sync"
	"time"

	"math/rand"

	"github.com/nats-io/go-nats-streaming"
	"github.com/nats-io/nats"
	"github.com/nats-io/nats/bench"
)

// Some sane defaults
const (
	DefaultNumMsgs            = 100000
	DefaultNumPubs            = 1
	DefaultNumSubs            = 0
	DefaultNumConns           = -1
	DefaultAsync              = false
	DefaultMessageSize        = 128
	DefaultIgnoreOld          = false
	DefaultMaxPubAcksInflight = 1000
	DefaultClientID           = "scale"
	DefaultConnectWait        = 120 * time.Second
)

func usage() {
	log.Fatalf("Usage: stan-scale [-s server (%s)] [--tls] [-id CLIENT_ID] [-np NUM_PUBLISHERS] [-ns NUM_SUBSCRIBERS] [-n NUM_MSGS] [-ms MESSAGE_SIZE] [-nc NUMCONNS] [-csv csvfile] [-mpa MAX_NUMBER_OF_PUBLISHED_ACKS_INFLIGHT] [-io] [-a] <subject>\n", nats.DefaultURL)
}

func disconnectedHandler(nc *nats.Conn) {
	if nc.LastError() != nil {
		log.Fatalf("connection %q has been disconnected: %v",
			nc.Opts.Name, nc.LastError())
	}
}

func reconnectedHandler(nc *nats.Conn) {
	log.Fatalf("connection %q reconnected to NATS Server at %q",
		nc.Opts.Name, nc.ConnectedUrl())
}

func closedHandler(nc *nats.Conn) {
	log.Fatalf("connection %q has been closed", nc.Opts.Name)
}

func errorHandler(nc *nats.Conn, sub *nats.Subscription, err error) {
	log.Fatalf("asynchronous error on connection %s, subject %s: %s",
		nc.Opts.Name, sub.Subject, err)
}

type subTrack struct {
	sync.Mutex
	subsMap map[string]int
}

func newSubTrack() *subTrack {
	newst := &subTrack{}
	newst.subsMap = make(map[string]int)
	return newst
}

// global subscription tracker
var st *subTrack

func (s *subTrack) initSubscriber(subject string) {
	s.Lock()
	defer s.Unlock()
	// for future recycling
	if _, ok := s.subsMap[subject]; ok {
		s.subsMap[subject]++
	} else {
		s.subsMap[subject] = 1
	}
}

func (s *subTrack) completeSubscriber(subject string) {
	s.Lock()
	defer s.Unlock()

	if _, ok := s.subsMap[subject]; ok {
		s.subsMap[subject]--
		if s.subsMap[subject] == 0 {
			delete(s.subsMap, subject)
		}
	}
}

func (s *subTrack) printUnfinishedCount() bool {
	s.Lock()
	defer s.Unlock()

	log.Printf("Remaining Subscribers (%d)\n", len(s.subsMap))

	return len(s.subsMap) == 0
}

func (s *subTrack) printUnfinishedDetail(max int) {

	i := 0
	for subj, remaining := range s.subsMap {
		log.Printf("    %s;%d", subj, remaining)
		i++
		if i == max {
			break
		}
	}
}

var conns []*nats.Conn

func buildConns(count int, opts *nats.Options) error {
	var err error
	conns = nil
	err = nil

	// make a conn pool to use
	if count < 0 {
		return nil
	}
	conns = make([]*nats.Conn, count)
	for i := 0; i < count; i++ {
		opts.Name = "conn-" + string(i)
		conns[i], err = opts.Connect()
	}
	return err
}

var currentConn int
var connLock sync.Mutex

func getNextNatsConn() *nats.Conn {
	connLock.Lock()

	if conns == nil {
		connLock.Unlock()
		return nil
	}
	if currentConn == len(conns) {
		currentConn = 0
	}
	nc := conns[currentConn]
	currentConn++

	connLock.Unlock()

	return nc
}

var currentSubjCount int
var useUniqueSubjects bool

func resetSubjects() {
	currentSubjCount = 0
}

// TODO:  is recycling subjects necessary?
func getNextSubject(baseSubject string, max int) string {
	if !useUniqueSubjects {
		return baseSubject
	}
	rv := fmt.Sprintf("%s.%d", baseSubject, currentSubjCount)
	currentSubjCount++
	if currentSubjCount == max {
		currentSubjCount = 0
	}

	return rv
}

var benchmark *bench.Benchmark
var verbose bool

func main() {
	var urls = flag.String("s", nats.DefaultURL, "The nats server URLs (separated by comma)")
	var tls = flag.Bool("tls", false, "Use TLS Secure Connection")
	var numConns = flag.Int("nc", DefaultNumConns, "Number of connections to use (default is publishers+subscribers)")
	var numPubs = flag.Int("np", DefaultNumPubs, "Number of Concurrent Publishers")
	var numSubs = flag.Int("ns", DefaultNumSubs, "Number of Concurrent Subscribers")
	var numMsgs = flag.Int("n", DefaultNumMsgs, "Number of Messages to Publish")
	var async = flag.Bool("a", DefaultAsync, "Async Message Publishing")
	var messageSize = flag.Int("ms", DefaultMessageSize, "Message Size in bytes.")
	var ignoreOld = flag.Bool("io", DefaultIgnoreOld, "Subscribers Ignore Old Messages")
	var maxPubAcks = flag.Int("mpa", DefaultMaxPubAcksInflight, "Max number of published acks in flight")
	var clientID = flag.String("id", DefaultClientID, "Benchmark process base client ID.")
	var csvFile = flag.String("csv", "", "Save bench data to csv file")
	var uniqueSubjs = flag.Bool("us", false, "Use unique subjects")
	var vb = flag.Bool("v", false, "Verbose")

	log.SetFlags(0)
	flag.Usage = usage
	flag.Parse()

	args := flag.Args()
	if len(args) != 1 {
		usage()
	}

	useUniqueSubjects = *uniqueSubjs
	verbose = *vb

	st = newSubTrack()

	// Setup the option block
	opts := nats.DefaultOptions
	opts.Servers = strings.Split(*urls, ",")
	for i, s := range opts.Servers {
		opts.Servers[i] = strings.Trim(s, " ")
	}

	opts.Secure = *tls
	opts.AsyncErrorCB = errorHandler
	opts.DisconnectedCB = disconnectedHandler
	opts.ReconnectedCB = reconnectedHandler
	opts.ClosedCB = closedHandler

	if err := buildConns(*numConns, &opts); err != nil {
		log.Fatalf("Unable to create connections: %v", err)
	}

	benchmark = bench.NewBenchmark("NATS Streaming", *numSubs, *numPubs)

	var startwg sync.WaitGroup
	var pubwg sync.WaitGroup
	var subwg sync.WaitGroup

	subwg.Add(*numSubs)
	pubwg.Add(*numPubs)

	// Run Subscribers first
	startwg.Add(*numSubs)
	for i := 0; i < *numSubs; i++ {
		subID := fmt.Sprintf("%s-sub-%d", *clientID, i)
		go runSubscriber(&startwg, &subwg, opts, *numMsgs, *messageSize, *ignoreOld, subID, getNextSubject(args[0], *numSubs))
	}
	startwg.Wait()

	log.Printf("Starting scaling test [msgs=%d, msgsize=%d, pubs=%d, subs=%d]\n", *numMsgs, *messageSize, *numPubs, *numSubs)
	// Now Publishers
	startwg.Add(*numPubs)
	pubCounts := bench.MsgsPerClient(*numMsgs, *numPubs)
	for i := 0; i < *numPubs; i++ {
		pubID := fmt.Sprintf("%s-pub-%d", *clientID, i)
		go runPublisher(&startwg, &pubwg, opts, pubCounts[i], *messageSize, *async, pubID, *maxPubAcks, args[0], *numSubs)
	}

	startwg.Wait()
	pubwg.Wait()

	log.Println("Done publishing.")

	isFinished := st.printUnfinishedCount()
	// 10 mins is a long time to wait, but for stress tests see if they recover.
	for i := 0; i < 600 && !isFinished; i++ {
		st.printUnfinishedDetail(5)
		time.Sleep(1 * time.Second)
		isFinished = st.printUnfinishedCount()
	}

	subwg.Wait()
	benchmark.Close()
	fmt.Print(benchmark.Report())

	if len(*csvFile) > 0 {
		csv := benchmark.CSV()
		ioutil.WriteFile(*csvFile, []byte(csv), 0644)
		fmt.Printf("Saved metric data in csv file %s\n", *csvFile)
	}
}

func publishMsgs(snc stan.Conn, msg []byte, async bool, numMsgs int, subj string) {
	var published int

	if async {
		ch := make(chan bool)
		acb := func(lguid string, err error) {
			if err != nil {
				log.Fatalf("Publish error: %v\n", err)
			}
			published++
			if published >= numMsgs {
				ch <- true
			}
		}
		for i := 0; i < numMsgs; i++ {
			_, err := snc.PublishAsync(subj, msg, acb)
			if err != nil {
				log.Fatal(err)
			}
		}
		<-ch
	} else {
		for i := 0; i < numMsgs; i++ {
			err := snc.Publish(subj, msg)
			if err != nil {
				log.Fatal(err)
			}
			published++
		}
	}
}

// publishUniqueMsgs distributes messages evenly across subjects
func publishMsgsOnUniqueSubjects(snc stan.Conn, msg []byte, async bool, numMsgs int, subj string, numSubs int) {
	var published int

	ch := make(chan bool)
	acb := func(lguid string, err error) {
		if err != nil {
			log.Fatalf("Publish error: %v\n", err)
		}
		published++
		if published >= numMsgs {
			ch <- true
		}
	}

	for i := 0; i < numMsgs; i++ {
		resetSubjects()
		for j := 0; j < numSubs; j++ {
			sub := getNextSubject(subj, numSubs)
			if async {
				_, err := snc.PublishAsync(sub, msg, acb)
				if err != nil {
					log.Fatalf("Publish error: %v\n", err)
				}
			} else {
				err := snc.Publish(sub, msg)
				if err != nil {
					log.Fatalf("Publish error: %v\n", err)
				}
				published++
			}
		}
	}

	// wait for publishers
	if async {
		<-ch
	}
}

func runPublisher(startwg, donewg *sync.WaitGroup, opts nats.Options, numMsgs int, msgSize int, async bool, pubID string, maxPubAcksInflight int, subj string, numSubs int) {

	var snc stan.Conn
	var err error

	nc := getNextNatsConn()
	if nc == nil {
		snc, err = stan.Connect("test-cluster", pubID, stan.MaxPubAcksInflight(maxPubAcksInflight), stan.ConnectWait(DefaultConnectWait))
	} else {
		snc, err = stan.Connect("test-cluster", pubID,
			stan.MaxPubAcksInflight(maxPubAcksInflight), stan.NatsConn(nc), stan.ConnectWait(DefaultConnectWait))
	}
	if err != nil {
		log.Fatalf("Publisher %s can't connect: %v\n", pubID, err)
	}

	startwg.Done()

	var msg []byte
	if msgSize > 0 {
		msg = make([]byte, msgSize)
	}

	start := time.Now()

	if useUniqueSubjects {
		publishMsgsOnUniqueSubjects(snc, msg, async, numMsgs, subj, numSubs)
	} else {
		publishMsgs(snc, msg, async, numMsgs, subj)
	}

	benchmark.AddPubSample(bench.NewSample(numMsgs, msgSize, start, time.Now(), snc.NatsConn()))
	snc.Close()
	donewg.Done()
}

func runSubscriber(startwg, donewg *sync.WaitGroup, opts nats.Options, numMsgs int, msgSize int, ignoreOld bool, subID, subj string) {
	var snc stan.Conn
	var err error

	nc := getNextNatsConn()
	if nc == nil {
		snc, err = stan.Connect("test-cluster", subID, stan.ConnectWait(DefaultConnectWait))
	} else {
		snc, err = stan.Connect("test-cluster", subID, stan.NatsConn(nc), stan.ConnectWait(DefaultConnectWait))
	}
	if err != nil {
		log.Fatalf("Subscriber %s can't connect: %v\n", subID, err)
	}

	time.Sleep(time.Duration(rand.Intn(10000)) * time.Millisecond)

	ch := make(chan bool)
	start := time.Now()

	st.initSubscriber(subj)
	received := 0
	mcb := func(msg *stan.Msg) {
		received++
		if received >= numMsgs {
			/*f verbose {
				log.Printf("Done receiving on %s.\n", msg.Subject)
			}*/
			st.completeSubscriber(subj)
			ch <- true
		}
	}

	if ignoreOld {
		snc.Subscribe(subj, mcb, stan.AckWait(time.Second*120))
	} else {
		snc.Subscribe(subj, mcb, stan.DeliverAllAvailable(), stan.AckWait(time.Second*120))
	}
	startwg.Done()

	<-ch
	benchmark.AddSubSample(bench.NewSample(numMsgs, msgSize, start, time.Now(), snc.NatsConn()))
	snc.Close()
	donewg.Done()
}


text:
SECTION = "devel/chicken"
DESCRIPTION = "Computes CRC checksum"
LICENSE = "BSD"
LIC_FILES_CHKSUM = "file://crc.meta;md5=b755905047653c3fcf95eccfe50f374e"
DEPENDS_append_class-cross = " chicken-egg-setup-helper-cross"
DEPENDS_append_class-crosssdk = " chicken-egg-setup-helper-crosssdk"
DEPENDS_append_class-nativesdk = " nativesdk-chicken-egg-setup-helper chicken-egg-setup-helper-crosssdk"
DEPENDS = " chicken-egg-setup-helper chicken-egg-setup-helper-cross"
RDEPENDS_${PN} = " chicken-egg-setup-helper"

SRC_URI = "http://code.call-cc.org/egg-tarballs/4/crc/crc-${PV}.tar.gz"

SRC_URI[md5sum] = "5d30701b84dcb975d01056960f2a671d"
SRC_URI[sha256sum] = "94ea5a2ece1338b2bf5f241d43cfdc175cdc6841fc49f50101d0b1d25d26aec4"

S = "${WORKDIR}/crc-${PV}"

inherit chicken_install

BBCLASSEXTEND = "cross crosssdk nativesdk"

repository: OSSystems/meta-chicken

repo_name: OSSystems/meta-chicken


text:
#ifndef __ASSEMBLED_ACTION__
#define __ASSEMBLED_ACTION__

#include <ros/ros.h>
#include <sarafun_tree/ExecuteAction.h>
#include <sarafun_msgs/AssembledKeyframeAction.h>

namespace sarafun {
class AssembledAction
    : ExecuteAction<sarafun_msgs::AssembledKeyframeAction,
                    sarafun_msgs::AssembledKeyframeGoal> {
public:
  AssembledAction(std::string node_name, std::string action_name,
                        std::string bt_name)
      : ExecuteAction<
            sarafun_msgs::AssembledKeyframeAction,
            sarafun_msgs::AssembledKeyframeGoal>::ExecuteAction(node_name,
                                                               action_name,
                                                               bt_name),
        node_name_(node_name), bt_name_(bt_name) {
    node_handle_ = ros::NodeHandle(node_name);
  }
  ~AssembledAction() {}

  bool fillGoal(sarafun_msgs::AssembledKeyframeGoal &goal);
  double getTimeoutValue();

private:
  ros::NodeHandle node_handle_;
  std::string node_name_;
  std::string bt_name_;
};
}
#endif