copied over all of the custom pcb stuff and switched connectors + added PWM headers to the power board
git-svn-id: https://robotics.mvla.net/svn/frc971/2013/trunk/src@4029 f308d9b7-e957-4cde-b6ac-9a88185e7312
diff --git a/gyro_board/docs/12V 5A switching regulator webench.pdf b/gyro_board/docs/12V 5A switching regulator webench.pdf
new file mode 100644
index 0000000..060104e
--- /dev/null
+++ b/gyro_board/docs/12V 5A switching regulator webench.pdf
Binary files differ
diff --git a/gyro_board/docs/219.pdf b/gyro_board/docs/219.pdf
new file mode 100644
index 0000000..146bab1
--- /dev/null
+++ b/gyro_board/docs/219.pdf
Binary files differ
diff --git a/gyro_board/docs/387207202_sd.pdf b/gyro_board/docs/387207202_sd.pdf
new file mode 100644
index 0000000..302d0f1
--- /dev/null
+++ b/gyro_board/docs/387207202_sd.pdf
Binary files differ
diff --git a/gyro_board/docs/5v 1A switcher webench.pdf b/gyro_board/docs/5v 1A switcher webench.pdf
new file mode 100644
index 0000000..ee96104
--- /dev/null
+++ b/gyro_board/docs/5v 1A switcher webench.pdf
Binary files differ
diff --git a/gyro_board/docs/85510-5019.pdf b/gyro_board/docs/85510-5019.pdf
new file mode 100644
index 0000000..abfcf39
--- /dev/null
+++ b/gyro_board/docs/85510-5019.pdf
Binary files differ
diff --git a/gyro_board/docs/ADXRS450.pdf b/gyro_board/docs/ADXRS450.pdf
new file mode 100644
index 0000000..3421ddf
--- /dev/null
+++ b/gyro_board/docs/ADXRS450.pdf
Binary files differ
diff --git a/gyro_board/docs/ADuM3160.pdf b/gyro_board/docs/ADuM3160.pdf
new file mode 100644
index 0000000..5cd5793
--- /dev/null
+++ b/gyro_board/docs/ADuM3160.pdf
Binary files differ
diff --git a/gyro_board/docs/LM3481.pdf b/gyro_board/docs/LM3481.pdf
new file mode 100644
index 0000000..c4624b4
--- /dev/null
+++ b/gyro_board/docs/LM3481.pdf
Binary files differ
diff --git a/gyro_board/docs/M701-330442.PDF b/gyro_board/docs/M701-330442.PDF
new file mode 100644
index 0000000..d93dc98
--- /dev/null
+++ b/gyro_board/docs/M701-330442.PDF
Binary files differ
diff --git a/gyro_board/docs/NUF6406MN-D.PDF b/gyro_board/docs/NUF6406MN-D.PDF
new file mode 100644
index 0000000..063a422
--- /dev/null
+++ b/gyro_board/docs/NUF6406MN-D.PDF
Binary files differ
diff --git a/gyro_board/docs/tl974.pdf b/gyro_board/docs/tl974.pdf
new file mode 100644
index 0000000..94ac685
--- /dev/null
+++ b/gyro_board/docs/tl974.pdf
Binary files differ
diff --git a/gyro_board/docs/user.manual.lpc17xx.pdf b/gyro_board/docs/user.manual.lpc17xx.pdf
new file mode 100644
index 0000000..7f28454
--- /dev/null
+++ b/gyro_board/docs/user.manual.lpc17xx.pdf
Binary files differ
diff --git a/gyro_board/schematic/custom_parts.lbr b/gyro_board/schematic/custom_parts.lbr
new file mode 100644
index 0000000..e4b2623
--- /dev/null
+++ b/gyro_board/schematic/custom_parts.lbr
@@ -0,0 +1,5001 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE eagle SYSTEM "eagle.dtd">
+<eagle version="6.4">
+<drawing>
+<settings>
+<setting alwaysvectorfont="no"/>
+<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="yes" active="yes"/>
+<layer number="2" name="Route2" color="1" fill="3" 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="4" fill="6" visible="no" active="no"/>
+<layer number="16" name="Bottom" color="1" fill="1" visible="yes" active="yes"/>
+<layer number="17" name="Pads" color="2" fill="1" visible="yes" active="yes"/>
+<layer number="18" name="Vias" color="2" fill="1" visible="yes" active="yes"/>
+<layer number="19" name="Unrouted" color="6" fill="1" visible="yes" active="yes"/>
+<layer number="20" name="Dimension" color="15" fill="1" visible="yes" active="yes"/>
+<layer number="21" name="tPlace" color="7" fill="1" visible="yes" active="yes"/>
+<layer number="22" name="bPlace" color="7" fill="1" visible="yes" active="yes"/>
+<layer number="23" name="tOrigins" color="15" fill="1" visible="yes" active="yes"/>
+<layer number="24" name="bOrigins" color="15" fill="1" visible="yes" active="yes"/>
+<layer number="25" name="tNames" color="7" fill="1" visible="yes" active="yes"/>
+<layer number="26" name="bNames" color="7" fill="1" visible="yes" active="yes"/>
+<layer number="27" name="tValues" color="7" fill="1" visible="yes" active="yes"/>
+<layer number="28" name="bValues" color="7" fill="1" visible="yes" active="yes"/>
+<layer number="29" name="tStop" color="7" fill="3" visible="yes" active="yes"/>
+<layer number="30" name="bStop" color="7" fill="6" visible="yes" active="yes"/>
+<layer number="31" name="tCream" color="7" fill="4" visible="yes" active="yes"/>
+<layer number="32" name="bCream" color="7" fill="5" visible="yes" active="yes"/>
+<layer number="33" name="tFinish" color="6" fill="3" visible="yes" active="yes"/>
+<layer number="34" name="bFinish" color="6" fill="6" visible="yes" active="yes"/>
+<layer number="35" name="tGlue" color="7" fill="4" visible="yes" active="yes"/>
+<layer number="36" name="bGlue" color="7" fill="5" visible="yes" active="yes"/>
+<layer number="37" name="tTest" color="7" fill="1" visible="yes" active="yes"/>
+<layer number="38" name="bTest" color="7" fill="1" visible="yes" active="yes"/>
+<layer number="39" name="tKeepout" color="4" fill="11" visible="yes" active="yes"/>
+<layer number="40" name="bKeepout" color="1" fill="11" visible="yes" active="yes"/>
+<layer number="41" name="tRestrict" color="4" fill="10" visible="yes" active="yes"/>
+<layer number="42" name="bRestrict" color="1" fill="10" visible="yes" active="yes"/>
+<layer number="43" name="vRestrict" color="2" fill="10" visible="yes" active="yes"/>
+<layer number="44" name="Drills" color="7" fill="1" visible="yes" active="yes"/>
+<layer number="45" name="Holes" color="7" fill="1" visible="yes" active="yes"/>
+<layer number="46" name="Milling" color="3" fill="1" visible="yes" active="yes"/>
+<layer number="47" name="Measures" color="7" fill="1" visible="yes" active="yes"/>
+<layer number="48" name="Document" color="7" fill="1" visible="yes" active="yes"/>
+<layer number="49" name="Reference" color="7" fill="1" visible="yes" active="yes"/>
+<layer number="50" name="dxf" color="7" fill="1" visible="no" active="yes"/>
+<layer number="51" name="tDocu" color="7" fill="1" visible="yes" active="yes"/>
+<layer number="52" name="bDocu" color="7" fill="1" visible="yes" active="yes"/>
+<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="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="yes" 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="100" name="Muster" color="7" fill="1" visible="no" active="no"/>
+<layer number="101" name="Patch_Top" color="12" fill="4" visible="no" active="yes"/>
+<layer number="102" name="Vscore" color="7" fill="1" visible="no" active="yes"/>
+<layer number="103" name="tMap" color="7" fill="1" visible="no" active="yes"/>
+<layer number="104" name="Name" color="16" fill="1" visible="no" active="yes"/>
+<layer number="105" name="tPlate" color="7" fill="1" visible="no" active="yes"/>
+<layer number="106" name="bPlate" color="7" fill="1" visible="no" active="yes"/>
+<layer number="107" name="Crop" color="7" fill="1" visible="no" active="yes"/>
+<layer number="116" name="Patch_BOT" color="9" fill="4" visible="no" active="yes"/>
+<layer number="121" name="_tsilk" color="7" fill="1" visible="no" active="yes"/>
+<layer number="122" name="_bsilk" color="7" fill="1" visible="no" active="yes"/>
+<layer number="125" name="_tNames" color="7" fill="1" visible="no" active="yes"/>
+<layer number="144" name="Drill_legend" color="7" fill="1" visible="no" active="yes"/>
+<layer number="151" name="HeatSink" color="7" fill="1" visible="no" active="yes"/>
+<layer number="200" name="200bmp" color="1" fill="10" visible="no" active="yes"/>
+<layer number="201" name="201bmp" color="2" fill="10" visible="no" active="yes"/>
+<layer number="202" name="202bmp" color="3" fill="10" visible="no" active="yes"/>
+<layer number="203" name="203bmp" color="4" fill="10" visible="no" active="yes"/>
+<layer number="204" name="204bmp" color="5" fill="10" visible="no" active="yes"/>
+<layer number="205" name="205bmp" color="6" fill="10" visible="no" active="yes"/>
+<layer number="206" name="206bmp" color="7" fill="10" visible="no" active="yes"/>
+<layer number="207" name="207bmp" color="8" fill="10" visible="no" active="yes"/>
+<layer number="208" name="208bmp" color="9" fill="10" visible="no" active="yes"/>
+<layer number="209" name="209bmp" color="7" fill="1" visible="no" active="yes"/>
+<layer number="210" name="210bmp" color="7" fill="1" visible="no" active="yes"/>
+<layer number="211" name="211bmp" color="7" fill="1" visible="no" active="yes"/>
+<layer number="212" name="212bmp" color="7" fill="1" visible="no" active="yes"/>
+<layer number="213" name="213bmp" color="7" fill="1" visible="no" active="yes"/>
+<layer number="214" name="214bmp" color="7" fill="1" visible="no" active="yes"/>
+<layer number="215" name="215bmp" color="7" fill="1" visible="no" active="yes"/>
+<layer number="216" name="216bmp" color="7" fill="1" visible="no" 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="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="no" active="yes"/>
+</layers>
+<library>
+<description>Parts that we have to create eagle models of.</description>
+<packages>
+<package name="219-4LPST">
+<description><b>4 position dip switch</b><br>
+from <a href="http://www.mouser.com/ProductDetail/CTS-Electronic-Components/219-4LPST/?qs=sGAEpiMZZMv%2f%252b2JhlA6ysGbG22VYatTYq6uUsyqguGg%3d">http://www.mouser.com/ProductDetail/CTS-Electronic-Components/219-4LPST/?qs=sGAEpiMZZMv%2f%252b2JhlA6ysGbG22VYatTYq6uUsyqguGg%3d</a></description>
+<wire x1="-5.97" y1="6" x2="5.97" y2="6" width="0.127" layer="21"/>
+<wire x1="5.97" y1="6" x2="5.97" y2="-6" width="0.127" layer="21"/>
+<wire x1="5.97" y1="-6" x2="-5.97" y2="-6" width="0.127" layer="21"/>
+<wire x1="-5.97" y1="-6" x2="-5.97" y2="6" width="0.127" layer="21"/>
+<smd name="2A" x="-1.27" y="4.3" dx="2.54" dy="1.27" layer="1" rot="R90"/>
+<smd name="3A" x="1.27" y="4.3" dx="2.54" dy="1.27" layer="1" rot="R90"/>
+<smd name="3B" x="1.27" y="-4.3" dx="2.54" dy="1.27" layer="1" rot="R90"/>
+<smd name="2B" x="-1.27" y="-4.3" dx="2.54" dy="1.27" layer="1" rot="R90"/>
+<smd name="1A" x="-3.81" y="4.3" dx="2.54" dy="1.27" layer="1" rot="R90"/>
+<smd name="4A" x="3.81" y="4.3" dx="2.54" dy="1.27" layer="1" rot="R90"/>
+<smd name="4B" x="3.81" y="-4.3" dx="2.54" dy="1.27" layer="1" rot="R90"/>
+<smd name="1B" x="-3.81" y="-4.3" dx="2.54" dy="1.27" layer="1" rot="R90"/>
+<text x="-3" y="6" size="1.778" layer="25" font="vector" ratio="10">>NAME</text>
+<text x="-3" y="-8" size="1.778" layer="27" font="vector" ratio="10">>VALUE</text>
+<text x="-6.35" y="6.08" size="1.27" layer="21" font="vector">1A</text>
+<text x="5.08" y="6.08" size="1.27" layer="21" font="vector">4A</text>
+<text x="-6.35" y="-7.35" size="1.27" layer="21" font="vector">1B</text>
+<text x="5.08" y="-6.08" size="1.27" layer="21" font="vector">4B</text>
+<rectangle x1="-5.97" y1="-5" x2="5.97" y2="5" layer="39"/>
+</package>
+<package name="85510-5019">
+<description><b>rj16 connector</b> (6 slots 6 connectors)<br>
+from <a href="http://www.mouser.com/ProductDetail/Molex/85510-5019/?qs=sGAEpiMZZMvQhAhQbXdbBsK4oSVSRxQMQtyAf8Fqgr8%3d">http://www.mouser.com/ProductDetail/Molex/85510-5019/?qs=sGAEpiMZZMvQhAhQbXdbBsK4oSVSRxQMQtyAf8Fqgr8%3d</a> (drawings at <a href="http://www.molex.com/pdm_docs/sd/855105019_sd.pdf">http://www.molex.com/pdm_docs/sd/855105019_sd.pdf</a>)</description>
+<wire x1="-6.61" y1="-7.54" x2="-3.77" y2="-7.54" width="0.127" layer="21"/>
+<wire x1="-6.61" y1="-7.54" x2="-6.61" y2="7.54" width="0.127" layer="21"/>
+<wire x1="-6.61" y1="7.54" x2="-6.39" y2="7.54" width="0.127" layer="21"/>
+<wire x1="-3.55" y1="7.54" x2="3.55" y2="7.54" width="0.127" layer="21"/>
+<wire x1="6.39" y1="7.54" x2="6.61" y2="7.54" width="0.127" layer="21"/>
+<wire x1="6.61" y1="7.54" x2="6.61" y2="-7.54" width="0.127" layer="21"/>
+<wire x1="6.61" y1="-7.54" x2="3.77" y2="-7.54" width="0.127" layer="21"/>
+<smd name="4" x="-0.635" y="-8.135" dx="5.15" dy="0.76" layer="1" rot="R90"/>
+<smd name="3" x="0.635" y="-8.135" dx="5.15" dy="0.76" layer="1" rot="R90"/>
+<smd name="2" x="1.905" y="-8.135" dx="5.15" dy="0.76" layer="1" rot="R90"/>
+<smd name="1" x="3.175" y="-8.135" dx="5.15" dy="0.76" layer="1" rot="R90"/>
+<smd name="5" x="-1.905" y="-8.135" dx="5.15" dy="0.76" layer="1" rot="R90"/>
+<smd name="6" x="-3.175" y="-8.135" dx="5.15" dy="0.76" layer="1" rot="R90"/>
+<smd name="P$1" x="-4.975" y="8.44" dx="3.95" dy="2.45" layer="1" rot="R90"/>
+<smd name="P$0" x="4.975" y="8.44" dx="3.95" dy="2.45" layer="1" rot="R90"/>
+<text x="-4" y="1" size="1.778" layer="25" font="vector" ratio="10">>NAME</text>
+<text x="-5" y="-2" size="1.778" layer="27" font="vector" ratio="10">>VALUE</text>
+<rectangle x1="-6.61" y1="-7.54" x2="6.61" y2="7.54" layer="39"/>
+</package>
+<package name="SOIC_CAV">
+<description><b>SMALL OUTLINE INTEGRATED CIRCUIT Plastic Cavity Package</b></description>
+<wire x1="-5.15" y1="5.61" x2="5.15" y2="5.61" width="0.1998" layer="39"/>
+<wire x1="5.15" y1="-5.61" x2="-5.15" y2="-5.61" width="0.1998" layer="39"/>
+<wire x1="-5.15" y1="-5.61" x2="-5.15" y2="5.61" width="0.1998" layer="39"/>
+<wire x1="5.15" y1="-3.9" x2="-5.15" y2="-3.9" width="0.2032" layer="51"/>
+<wire x1="-5.15" y1="-3.9" x2="-5.15" y2="3.9" width="0.2032" layer="51"/>
+<wire x1="-5.15" y1="3.9" x2="5.15" y2="3.9" width="0.2032" layer="51"/>
+<wire x1="5.15" y1="3.9" x2="5.15" y2="-3.9" width="0.2032" layer="51"/>
+<wire x1="5.15" y1="5.61" x2="5.15" y2="-5.61" width="0.1998" layer="39"/>
+<circle x="-4.6" y="-3.3" radius="0.2794" width="0.508" layer="21"/>
+<smd name="2" x="-3.175" y="-4.7705" dx="0.572" dy="1.691" layer="1"/>
+<smd name="13" x="-0.635" y="4.7705" dx="0.572" dy="1.691" layer="1"/>
+<smd name="1" x="-4.445" y="-4.7705" dx="0.572" dy="1.691" layer="1"/>
+<smd name="3" x="-1.905" y="-4.7705" dx="0.572" dy="1.691" layer="1"/>
+<smd name="4" x="-0.635" y="-4.7705" dx="0.572" dy="1.691" layer="1"/>
+<smd name="14" x="-1.905" y="4.7705" dx="0.572" dy="1.691" layer="1"/>
+<smd name="12" x="0.635" y="4.7705" dx="0.572" dy="1.691" layer="1"/>
+<smd name="11" x="1.905" y="4.7705" dx="0.572" dy="1.691" layer="1"/>
+<smd name="6" x="1.905" y="-4.7705" dx="0.572" dy="1.691" layer="1"/>
+<smd name="9" x="4.445" y="4.7705" dx="0.572" dy="1.691" layer="1"/>
+<smd name="5" x="0.635" y="-4.7705" dx="0.572" dy="1.691" layer="1"/>
+<smd name="7" x="3.175" y="-4.7705" dx="0.572" dy="1.691" layer="1"/>
+<smd name="10" x="3.175" y="4.7705" dx="0.572" dy="1.691" layer="1"/>
+<smd name="8" x="4.445" y="-4.7705" dx="0.572" dy="1.691" layer="1"/>
+<smd name="15" x="-3.175" y="4.7705" dx="0.572" dy="1.691" layer="1"/>
+<smd name="16" x="-4.445" y="4.7705" dx="0.572" dy="1.691" layer="1"/>
+<text x="-3.445" y="1.27" size="1.27" layer="25" font="vector">>NAME</text>
+<text x="-3.445" y="-2.54" size="1.27" layer="27" font="vector">>VALUE</text>
+</package>
+<package name="M701-330442">
+<description><b>Vertical USB Standard B Connector</b><br>
+from <a href="http://www.mouser.com/ProductDetail/Harwin/M701-330442/?qs=x6EjVpvqMVOIQFAB0splYQ%3d%3d">http://www.mouser.com/ProductDetail/Harwin/M701-330442/?qs=x6EjVpvqMVOIQFAB0splYQ%3d%3d</a> (drawings at <a href="http://www.harwin.com/include/downloads/drawings/M701-330442.PDF">http://www.harwin.com/include/downloads/drawings/M701-330442.PDF</a>)</description>
+<wire x1="6.02" y1="-1.02" x2="6.02" y2="2.38" width="0.127" layer="40" curve="-180"/>
+<wire x1="7.375" y1="-1.02" x2="7.375" y2="2.38" width="0.127" layer="40" curve="180"/>
+<wire x1="7.375" y1="2.38" x2="6.02" y2="2.38" width="0.127" layer="40"/>
+<wire x1="7.375" y1="-1.02" x2="6.02" y2="-1.02" width="0.127" layer="40"/>
+<wire x1="-7.375" y1="-1.02" x2="-7.375" y2="2.38" width="0.127" layer="40" curve="-180"/>
+<wire x1="-6.02" y1="-1.02" x2="-7.375" y2="-1.02" width="0.127" layer="40"/>
+<wire x1="-6.02" y1="-1.02" x2="-6.02" y2="2.38" width="0.127" layer="40" curve="180"/>
+<wire x1="-6.02" y1="2.38" x2="-7.375" y2="2.38" width="0.127" layer="40"/>
+<pad name="GND" x="-1.25" y="1.625" drill="0.92" shape="square"/>
+<pad name="D+" x="1.25" y="1.625" drill="0.92" shape="square"/>
+<pad name="D-" x="1.25" y="-1.625" drill="0.92" shape="square"/>
+<pad name="VCC" x="-1.25" y="-1.625" drill="0.92" shape="square"/>
+<pad name="P$0" x="-6.02" y="0.675" drill="2.3" shape="square"/>
+<pad name="P$1" x="6.02" y="0.675" drill="2.3" shape="square"/>
+<rectangle x1="-6.12" y1="-5.4" x2="6.12" y2="5.4" layer="39"/>
+</package>
+<package name="SOIC_W">
+<description><b>JDEC MS-013-AA</b><br>
+basically just copied from one in ref-packages.lbr (should be correct)</description>
+<wire x1="-5.395" y1="5.9" x2="5.395" y2="5.9" width="0.1998" layer="39"/>
+<wire x1="5.395" y1="-5.9" x2="-5.395" y2="-5.9" width="0.1998" layer="39"/>
+<wire x1="-5.395" y1="-5.9" x2="-5.395" y2="5.9" width="0.1998" layer="39"/>
+<wire x1="5.19" y1="-3.7" x2="-5.19" y2="-3.7" width="0.2032" layer="51"/>
+<wire x1="-5.19" y1="-3.7" x2="-5.19" y2="-3.2" width="0.2032" layer="51"/>
+<wire x1="-5.19" y1="-3.2" x2="-5.19" y2="3.7" width="0.2032" layer="51"/>
+<wire x1="-5.19" y1="3.7" x2="5.19" y2="3.7" width="0.2032" layer="51"/>
+<wire x1="5.19" y1="3.7" x2="5.19" y2="-3.2" width="0.2032" layer="51"/>
+<wire x1="5.19" y1="-3.2" x2="5.19" y2="-3.7" width="0.2032" layer="51"/>
+<wire x1="5.395" y1="5.9" x2="5.395" y2="-5.9" width="0.1998" layer="39"/>
+<circle x="-4.5" y="-2.5" radius="0.3048" width="0.762" layer="21"/>
+<smd name="2" x="-3.175" y="-4.6" dx="0.6" dy="2.2" layer="1"/>
+<smd name="13" x="-0.635" y="4.6" dx="0.6" dy="2.2" layer="1"/>
+<smd name="1" x="-4.445" y="-4.6" dx="0.6" dy="2.2" layer="1"/>
+<smd name="3" x="-1.905" y="-4.6" dx="0.6" dy="2.2" layer="1"/>
+<smd name="4" x="-0.635" y="-4.6" dx="0.6" dy="2.2" layer="1"/>
+<smd name="14" x="-1.905" y="4.6" dx="0.6" dy="2.2" layer="1"/>
+<smd name="12" x="0.635" y="4.6" dx="0.6" dy="2.2" layer="1"/>
+<smd name="11" x="1.905" y="4.6" dx="0.6" dy="2.2" layer="1"/>
+<smd name="6" x="1.905" y="-4.6" dx="0.6" dy="2.2" layer="1"/>
+<smd name="9" x="4.445" y="4.6" dx="0.6" dy="2.2" layer="1"/>
+<smd name="5" x="0.635" y="-4.6" dx="0.6" dy="2.2" layer="1"/>
+<smd name="7" x="3.175" y="-4.6" dx="0.6" dy="2.2" layer="1"/>
+<smd name="10" x="3.175" y="4.6" dx="0.6" dy="2.2" layer="1"/>
+<smd name="8" x="4.445" y="-4.6" dx="0.6" dy="2.2" layer="1"/>
+<smd name="15" x="-3.175" y="4.6" dx="0.6" dy="2.2" layer="1"/>
+<smd name="16" x="-4.445" y="4.6" dx="0.6" dy="2.2" layer="1"/>
+<text x="-3.445" y="1.27" size="1.27" layer="25" font="vector">>NAME</text>
+<text x="-3.445" y="-1.54" size="1.27" layer="27" font="vector">>VALUE</text>
+<rectangle x1="-4.6901" y1="-5.32" x2="-4.1999" y2="-3.8001" layer="51"/>
+<rectangle x1="-3.4201" y1="-5.32" x2="-2.9299" y2="-3.8001" layer="51"/>
+<rectangle x1="-2.1501" y1="-5.32" x2="-1.6599" y2="-3.8001" layer="51"/>
+<rectangle x1="-0.8801" y1="-5.32" x2="-0.3899" y2="-3.8001" layer="51"/>
+<rectangle x1="0.3899" y1="-5.32" x2="0.8801" y2="-3.8001" layer="51"/>
+<rectangle x1="1.6599" y1="-5.32" x2="2.1501" y2="-3.8001" layer="51"/>
+<rectangle x1="2.9299" y1="-5.32" x2="3.4201" y2="-3.8001" layer="51"/>
+<rectangle x1="4.1999" y1="-5.32" x2="4.6901" y2="-3.8001" layer="51"/>
+<rectangle x1="4.1999" y1="3.8001" x2="4.6901" y2="5.32" layer="51"/>
+<rectangle x1="2.9299" y1="3.8001" x2="3.4201" y2="5.32" layer="51"/>
+<rectangle x1="1.6599" y1="3.8001" x2="2.1501" y2="5.32" layer="51"/>
+<rectangle x1="0.3899" y1="3.8001" x2="0.8801" y2="5.32" layer="51"/>
+<rectangle x1="-0.8801" y1="3.8001" x2="-0.3899" y2="5.32" layer="51"/>
+<rectangle x1="-2.1501" y1="3.8001" x2="-1.6599" y2="5.32" layer="51"/>
+<rectangle x1="-3.4201" y1="3.8001" x2="-2.9299" y2="5.32" layer="51"/>
+<rectangle x1="-4.6901" y1="3.8001" x2="-4.1999" y2="5.32" layer="51"/>
+</package>
+<package name="MSOP10">
+<description><b>10-Lead Mini Small Outline Package [MSOP]</b> (RM-10)<p>
+Source: http://www.analog.com/UploadedFiles/Data_Sheets/35641221898805SSM2167_b.pdf<br>
+COMPLIANT TO JEDEC STANDARDS MO-187BA</description>
+<wire x1="-1.4" y1="1.4" x2="1.4" y2="1.4" width="0.2032" layer="21"/>
+<wire x1="1.4" y1="1.4" x2="1.4" y2="-1.4" width="0.2032" layer="21"/>
+<wire x1="1.4" y1="-1.4" x2="-1.4" y2="-1.4" width="0.2032" layer="21"/>
+<wire x1="-1.4" y1="-1.4" x2="-1.4" y2="1.4" width="0.2032" layer="21"/>
+<wire x1="-0.8" y1="-1.1" x2="-0.8" y2="-0.5" width="0.2032" layer="21" curve="-180"/>
+<wire x1="-0.8" y1="-0.5" x2="-0.8" y2="-1.1" width="0.2032" layer="21"/>
+<smd name="1" x="-1" y="-2.1131" dx="0.25" dy="1" layer="1"/>
+<smd name="2" x="-0.5" y="-2.1131" dx="0.25" dy="1" layer="1"/>
+<smd name="3" x="0" y="-2.1131" dx="0.25" dy="1" layer="1"/>
+<smd name="4" x="0.5" y="-2.1131" dx="0.25" dy="1" layer="1"/>
+<smd name="5" x="1" y="-2.1131" dx="0.25" dy="1" layer="1"/>
+<smd name="6" x="1" y="2.1131" dx="0.25" dy="1" layer="1" rot="R180"/>
+<smd name="7" x="0.5" y="2.1131" dx="0.25" dy="1" layer="1" rot="R180"/>
+<smd name="8" x="0" y="2.1131" dx="0.25" dy="1" layer="1" rot="R180"/>
+<smd name="9" x="-0.5" y="2.1131" dx="0.25" dy="1" layer="1" rot="R180"/>
+<smd name="10" x="-1" y="2.1131" dx="0.25" dy="1" layer="1" rot="R180"/>
+<text x="-2.032" y="-2.54" size="1.27" layer="25" ratio="10" rot="R90">>NAME</text>
+<text x="3.302" y="-2.54" size="1.27" layer="27" ratio="10" rot="R90">>VALUE</text>
+<rectangle x1="-1.1244" y1="-2.5" x2="-0.8744" y2="-1.5" layer="51"/>
+<rectangle x1="-0.6244" y1="-2.5" x2="-0.3744" y2="-1.5" layer="51"/>
+<rectangle x1="-0.1244" y1="-2.5" x2="0.1256" y2="-1.5" layer="51"/>
+<rectangle x1="0.3756" y1="-2.5" x2="0.6256" y2="-1.5" layer="51"/>
+<rectangle x1="0.8756" y1="-2.5" x2="1.1256" y2="-1.5" layer="51"/>
+<rectangle x1="0.8744" y1="1.5" x2="1.1244" y2="2.5" layer="51" rot="R180"/>
+<rectangle x1="0.3744" y1="1.5" x2="0.6244" y2="2.5" layer="51" rot="R180"/>
+<rectangle x1="-0.1256" y1="1.5" x2="0.1244" y2="2.5" layer="51" rot="R180"/>
+<rectangle x1="-0.6256" y1="1.5" x2="-0.3756" y2="2.5" layer="51" rot="R180"/>
+<rectangle x1="-1.1256" y1="1.5" x2="-0.8756" y2="2.5" layer="51" rot="R180"/>
+</package>
+<package name="1060-152">
+<description><b>coilcraft inductor</b><br>
+drawings at <a href="http://www.coilcraft.com/pdf_viewer/showpdf.cfm?f=pdf_store:xal1060_.pdf">http://www.coilcraft.com/pdf_viewer/showpdf.cfm?f=pdf_store:xal1060_.pdf</a></description>
+<smd name="P$1" x="-3.325" y="0" dx="2.39" dy="9.5" layer="1"/>
+<smd name="P$2" x="3.325" y="0" dx="2.39" dy="9.5" layer="1"/>
+<rectangle x1="-5" y1="-5.65" x2="5" y2="5.65" layer="39"/>
+</package>
+<package name="L2012C">
+<description><b>INDUCTOR</b><p>
+chip</description>
+<wire x1="-1.973" y1="0.983" x2="1.973" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="1.973" y1="-0.983" x2="-1.973" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="-1.973" y1="-0.983" x2="-1.973" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="-0.864" y1="0.54" x2="0.864" y2="0.54" width="0.1016" layer="51"/>
+<wire x1="-0.864" y1="-0.553" x2="0.864" y2="-0.553" width="0.1016" layer="51"/>
+<wire x1="1.973" y1="0.983" x2="1.973" y2="-0.983" width="0.0508" layer="39"/>
+<smd name="1" x="-1" y="0" dx="1" dy="1" layer="1"/>
+<smd name="2" x="1" y="0" dx="1" dy="1" layer="1"/>
+<text x="-1.016" y="0.889" size="1.27" layer="25">>NAME</text>
+<text x="-1.016" y="-2.159" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-1.143" y1="-0.6096" x2="-0.843" y2="0.5903" layer="51"/>
+<rectangle x1="0.8382" y1="-0.6096" x2="1.1382" y2="0.5903" layer="51"/>
+<rectangle x1="-0.3" y1="-0.4001" x2="0.3" y2="0.4001" layer="35"/>
+</package>
+<package name="L2825P">
+<description><b>INDUCTOR</b><p>
+precision wire wound</description>
+<wire x1="-2.473" y1="1.483" x2="2.473" y2="1.483" width="0.0508" layer="39"/>
+<wire x1="2.473" y1="-1.483" x2="-2.473" y2="-1.483" width="0.0508" layer="39"/>
+<wire x1="-2.473" y1="-1.483" x2="-2.473" y2="1.483" width="0.0508" layer="39"/>
+<wire x1="-0.762" y1="1.2" x2="0.762" y2="1.2" width="0.1016" layer="51"/>
+<wire x1="-0.762" y1="-1.213" x2="0.762" y2="-1.213" width="0.1016" layer="51"/>
+<wire x1="2.473" y1="1.483" x2="2.473" y2="-1.483" width="0.0508" layer="39"/>
+<wire x1="1.34" y1="-0.965" x2="1.34" y2="0.965" width="0.1016" layer="51"/>
+<wire x1="-1.34" y1="0.965" x2="-1.34" y2="-0.965" width="0.1016" layer="51"/>
+<circle x="0" y="0" radius="0.6604" width="0.1524" layer="51"/>
+<smd name="1" x="-1.2" y="0" dx="1.4" dy="2.4" layer="1"/>
+<smd name="2" x="1.2" y="0" dx="1.4" dy="2.4" layer="1"/>
+<text x="-1.27" y="1.524" size="1.27" layer="25">>NAME</text>
+<text x="-1.27" y="-2.794" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="0.7366" y1="-1.27" x2="1.3208" y2="1.27" layer="51"/>
+<rectangle x1="-1.3208" y1="-1.27" x2="-0.7366" y2="1.27" layer="51"/>
+<rectangle x1="-0.3" y1="-0.7" x2="0.3" y2="0.7" layer="35"/>
+</package>
+<package name="L3216C">
+<description><b>INDUCTOR</b><p>
+chip</description>
+<wire x1="-2.473" y1="1.483" x2="2.473" y2="1.483" width="0.0508" layer="39"/>
+<wire x1="2.473" y1="-1.483" x2="-2.473" y2="-1.483" width="0.0508" layer="39"/>
+<wire x1="-2.473" y1="-1.483" x2="-2.473" y2="1.483" width="0.0508" layer="39"/>
+<wire x1="-1.27" y1="0.896" x2="1.27" y2="0.896" width="0.1016" layer="51"/>
+<wire x1="-1.27" y1="-0.883" x2="1.27" y2="-0.883" width="0.1016" layer="51"/>
+<wire x1="2.473" y1="1.483" x2="2.473" y2="-1.483" width="0.0508" layer="39"/>
+<wire x1="-0.762" y1="0.896" x2="0.762" y2="0.896" width="0.1016" layer="21"/>
+<wire x1="-0.762" y1="-0.883" x2="0.762" y2="-0.883" width="0.1016" layer="21"/>
+<smd name="1" x="-1.5" y="0" dx="1.2" dy="1.6" layer="1"/>
+<smd name="2" x="1.5" y="0" dx="1.2" dy="1.6" layer="1"/>
+<text x="-1.524" y="1.143" size="1.27" layer="25">>NAME</text>
+<text x="-1.524" y="-2.413" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-1.7526" y1="-0.9525" x2="-1.2525" y2="0.9474" layer="51"/>
+<rectangle x1="1.2446" y1="-0.9525" x2="1.7447" y2="0.9474" layer="51"/>
+<rectangle x1="-0.4001" y1="-0.5999" x2="0.4001" y2="0.5999" layer="35"/>
+</package>
+<package name="L3225M">
+<description><b>INDUCTOR</b><p>
+molded</description>
+<wire x1="-2.473" y1="1.483" x2="2.473" y2="1.483" width="0.0508" layer="39"/>
+<wire x1="2.473" y1="-1.483" x2="-2.473" y2="-1.483" width="0.0508" layer="39"/>
+<wire x1="-2.473" y1="-1.483" x2="-2.473" y2="1.483" width="0.0508" layer="39"/>
+<wire x1="2.473" y1="1.483" x2="2.473" y2="-1.483" width="0.0508" layer="39"/>
+<wire x1="-1.575" y1="1.27" x2="1.575" y2="1.27" width="0.1524" layer="21"/>
+<wire x1="1.575" y1="1.27" x2="1.575" y2="-1.27" width="0.1524" layer="51"/>
+<wire x1="1.575" y1="-1.27" x2="-1.575" y2="-1.27" width="0.1524" layer="21"/>
+<wire x1="-1.575" y1="-1.27" x2="-1.575" y2="1.27" width="0.1524" layer="51"/>
+<wire x1="-1.651" y1="0.94" x2="-1.651" y2="-0.94" width="0.1524" layer="51"/>
+<wire x1="1.651" y1="0.94" x2="1.651" y2="-0.94" width="0.1524" layer="51"/>
+<smd name="1" x="-1.4" y="0" dx="1.6" dy="2.2" layer="1"/>
+<smd name="2" x="1.4" y="0" dx="1.6" dy="2.2" layer="1"/>
+<text x="-1.397" y="1.524" size="1.27" layer="25">>NAME</text>
+<text x="-1.397" y="-2.794" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-0.3" y1="-1" x2="0.3" y2="1" layer="35"/>
+</package>
+<package name="L3225P">
+<description><b>INDUCTOR</b><p>
+precision wire wound</description>
+<wire x1="-2.473" y1="1.483" x2="2.473" y2="1.483" width="0.0508" layer="39"/>
+<wire x1="2.473" y1="-1.483" x2="-2.473" y2="-1.483" width="0.0508" layer="39"/>
+<wire x1="-2.473" y1="-1.483" x2="-2.473" y2="1.483" width="0.0508" layer="39"/>
+<wire x1="-1.676" y1="0.845" x2="1.676" y2="0.845" width="0.1524" layer="51"/>
+<wire x1="2.473" y1="1.483" x2="2.473" y2="-1.483" width="0.0508" layer="39"/>
+<wire x1="-1.676" y1="0.838" x2="-1.676" y2="-0.838" width="0.1524" layer="51"/>
+<wire x1="-1.168" y1="0.838" x2="-1.168" y2="-0.838" width="0.1524" layer="51"/>
+<wire x1="1.168" y1="0.838" x2="1.168" y2="-0.838" width="0.1524" layer="51"/>
+<wire x1="1.676" y1="0.838" x2="1.676" y2="-0.838" width="0.1524" layer="51"/>
+<wire x1="1.676" y1="-0.845" x2="-1.676" y2="-0.845" width="0.1524" layer="51"/>
+<circle x="0" y="0" radius="0.7117" width="0.1524" layer="51"/>
+<smd name="1" x="-1.4" y="0" dx="1.8" dy="2" layer="1"/>
+<smd name="2" x="1.4" y="0" dx="1.8" dy="2" layer="1"/>
+<text x="-1.397" y="1.27" size="1.27" layer="25">>NAME</text>
+<text x="-1.397" y="-2.54" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-0.3" y1="-0.7" x2="0.3" y2="0.7" layer="35"/>
+</package>
+<package name="L3230M">
+<description><b>INDUCTOR</b><p>
+molded</description>
+<wire x1="-2.473" y1="1.483" x2="2.473" y2="1.483" width="0.0508" layer="39"/>
+<wire x1="2.473" y1="-1.483" x2="-2.473" y2="-1.483" width="0.0508" layer="39"/>
+<wire x1="-2.473" y1="-1.483" x2="-2.473" y2="1.483" width="0.0508" layer="39"/>
+<wire x1="2.473" y1="1.483" x2="2.473" y2="-1.483" width="0.0508" layer="39"/>
+<wire x1="-1.575" y1="1.27" x2="1.575" y2="1.27" width="0.1524" layer="21"/>
+<wire x1="1.575" y1="1.27" x2="1.575" y2="-1.27" width="0.1524" layer="51"/>
+<wire x1="1.575" y1="-1.27" x2="-1.575" y2="-1.27" width="0.1524" layer="21"/>
+<wire x1="-1.575" y1="-1.27" x2="-1.575" y2="1.27" width="0.1524" layer="51"/>
+<wire x1="-1.651" y1="0.94" x2="-1.651" y2="-0.94" width="0.1524" layer="51"/>
+<wire x1="1.651" y1="0.94" x2="1.651" y2="-0.94" width="0.1524" layer="51"/>
+<smd name="1" x="-1.4" y="0" dx="1.6" dy="2.2" layer="1"/>
+<smd name="2" x="1.4" y="0" dx="1.6" dy="2.2" layer="1"/>
+<text x="-1.397" y="1.651" size="1.27" layer="25">>NAME</text>
+<text x="-1.397" y="-2.921" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-0.3" y1="-1" x2="0.3" y2="1" layer="35"/>
+</package>
+<package name="L4035M">
+<description><b>INDUCTOR</b><p>
+molded</description>
+<wire x1="-2.973" y1="1.983" x2="2.973" y2="1.983" width="0.0508" layer="39"/>
+<wire x1="2.973" y1="-1.983" x2="-2.973" y2="-1.983" width="0.0508" layer="39"/>
+<wire x1="-2.973" y1="-1.983" x2="-2.973" y2="1.983" width="0.0508" layer="39"/>
+<wire x1="2.973" y1="1.983" x2="2.973" y2="-1.983" width="0.0508" layer="39"/>
+<wire x1="-2.083" y1="0.686" x2="-2.083" y2="-0.686" width="0.1524" layer="51"/>
+<wire x1="2.083" y1="0.686" x2="2.083" y2="-0.686" width="0.1524" layer="51"/>
+<wire x1="-1.981" y1="1.524" x2="-1.981" y2="-1.524" width="0.1524" layer="51"/>
+<wire x1="-1.981" y1="-1.524" x2="1.981" y2="-1.524" width="0.1524" layer="21"/>
+<wire x1="1.981" y1="-1.524" x2="1.981" y2="1.524" width="0.1524" layer="51"/>
+<wire x1="1.981" y1="1.524" x2="-1.981" y2="1.524" width="0.1524" layer="21"/>
+<smd name="1" x="-1.6" y="0" dx="2.2" dy="1.4" layer="1"/>
+<smd name="2" x="1.6" y="0" dx="2.2" dy="1.4" layer="1"/>
+<text x="-1.651" y="1.905" size="1.27" layer="25">>NAME</text>
+<text x="-1.651" y="-3.048" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-0.3" y1="-0.7" x2="0.3" y2="0.7" layer="35"/>
+</package>
+<package name="L4516C">
+<description><b>INDUCTOR</b><p>
+chip</description>
+<wire x1="-2.973" y1="0.983" x2="2.973" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="2.973" y1="-0.983" x2="-2.973" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="-2.973" y1="-0.983" x2="-2.973" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="-1.626" y1="0.54" x2="1.626" y2="0.54" width="0.1016" layer="51"/>
+<wire x1="-1.626" y1="-0.527" x2="1.626" y2="-0.527" width="0.1016" layer="51"/>
+<wire x1="2.973" y1="0.983" x2="2.973" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="-1.372" y1="0.54" x2="1.372" y2="0.54" width="0.1016" layer="21"/>
+<wire x1="-1.372" y1="-0.527" x2="1.372" y2="-0.527" width="0.1016" layer="21"/>
+<smd name="1" x="-2.1" y="0" dx="1" dy="1.6" layer="1"/>
+<smd name="2" x="2.1" y="0" dx="1" dy="1.6" layer="1"/>
+<text x="-2.032" y="1.016" size="1.27" layer="25">>NAME</text>
+<text x="-2.032" y="-2.286" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-2.4003" y1="-0.5969" x2="-1.6002" y2="0.603" layer="51"/>
+<rectangle x1="1.6002" y1="-0.603" x2="2.4003" y2="0.5969" layer="51"/>
+<rectangle x1="-0.7" y1="-0.3" x2="0.7" y2="0.3" layer="35"/>
+</package>
+<package name="L4532M">
+<description><b>INDUCTOR</b><p>
+molded</description>
+<wire x1="-3.473" y1="1.983" x2="3.473" y2="1.983" width="0.0508" layer="39"/>
+<wire x1="3.473" y1="-1.983" x2="-3.473" y2="-1.983" width="0.0508" layer="39"/>
+<wire x1="-3.473" y1="-1.983" x2="-3.473" y2="1.983" width="0.0508" layer="39"/>
+<wire x1="3.473" y1="1.983" x2="3.473" y2="-1.983" width="0.0508" layer="39"/>
+<wire x1="-2.21" y1="-1.626" x2="2.21" y2="-1.626" width="0.1524" layer="21"/>
+<wire x1="2.21" y1="1.626" x2="-2.21" y2="1.626" width="0.1524" layer="21"/>
+<wire x1="-2.337" y1="1.041" x2="-2.337" y2="-1.041" width="0.1524" layer="51"/>
+<wire x1="2.337" y1="1.041" x2="2.337" y2="-1.041" width="0.1524" layer="51"/>
+<wire x1="-2.21" y1="1.626" x2="-2.21" y2="-1.626" width="0.1524" layer="51"/>
+<wire x1="2.21" y1="1.626" x2="2.21" y2="-1.626" width="0.1524" layer="51"/>
+<smd name="1" x="-1.9" y="0" dx="2" dy="2.4" layer="1"/>
+<smd name="2" x="1.9" y="0" dx="2" dy="2.4" layer="1"/>
+<text x="-1.905" y="2.032" size="1.27" layer="25">>NAME</text>
+<text x="-1.905" y="-3.302" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-0.5001" y1="-1" x2="0.5001" y2="1" layer="35"/>
+</package>
+<package name="L4532P">
+<description><b>INDUCTOR</b><p>
+precision wire wound</description>
+<wire x1="-2.973" y1="1.983" x2="2.973" y2="1.983" width="0.0508" layer="39"/>
+<wire x1="2.973" y1="-1.983" x2="-2.973" y2="-1.983" width="0.0508" layer="39"/>
+<wire x1="-2.973" y1="-1.983" x2="-2.973" y2="1.983" width="0.0508" layer="39"/>
+<wire x1="-2.311" y1="1.675" x2="2.311" y2="1.675" width="0.1524" layer="51"/>
+<wire x1="2.973" y1="1.983" x2="2.973" y2="-1.983" width="0.0508" layer="39"/>
+<wire x1="-2.311" y1="-1.653" x2="2.311" y2="-1.653" width="0.1524" layer="51"/>
+<wire x1="-2.311" y1="1.626" x2="-2.311" y2="-1.626" width="0.1524" layer="51"/>
+<wire x1="2.311" y1="1.675" x2="2.311" y2="-1.626" width="0.1524" layer="51"/>
+<wire x1="-1.448" y1="1.651" x2="-1.448" y2="-1.626" width="0.1524" layer="51"/>
+<wire x1="1.448" y1="1.626" x2="1.448" y2="-1.626" width="0.1524" layer="51"/>
+<wire x1="-0.66" y1="1.675" x2="0.66" y2="1.675" width="0.1524" layer="21"/>
+<wire x1="-0.66" y1="-1.653" x2="0.66" y2="-1.653" width="0.1524" layer="21"/>
+<circle x="0" y="0" radius="1.3211" width="0.1524" layer="51"/>
+<smd name="1" x="-2" y="0" dx="1.8" dy="3.6" layer="1"/>
+<smd name="2" x="2" y="0" dx="1.8" dy="3.6" layer="1"/>
+<text x="-1.905" y="2.032" size="1.27" layer="25">>NAME</text>
+<text x="-1.905" y="-3.302" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-0.5001" y1="-1" x2="0.5001" y2="1" layer="35"/>
+</package>
+<package name="L5038P">
+<description><b>INDUCTOR</b> <p>
+precision wire wound</description>
+<wire x1="-2.973" y1="1.983" x2="2.973" y2="1.983" width="0.0508" layer="39"/>
+<wire x1="2.973" y1="-1.983" x2="-2.973" y2="-1.983" width="0.0508" layer="39"/>
+<wire x1="-2.973" y1="-1.983" x2="-2.973" y2="1.983" width="0.0508" layer="39"/>
+<wire x1="-2.286" y1="1.853" x2="2.311" y2="1.853" width="0.1016" layer="21"/>
+<wire x1="2.973" y1="1.983" x2="2.973" y2="-1.983" width="0.0508" layer="39"/>
+<wire x1="-2.286" y1="-1.856" x2="2.311" y2="-1.856" width="0.1016" layer="21"/>
+<wire x1="2.389" y1="-1.27" x2="2.389" y2="1.27" width="0.1016" layer="51"/>
+<wire x1="-2.386" y1="-1.27" x2="-2.386" y2="1.27" width="0.1016" layer="51"/>
+<wire x1="1.602" y1="-1.854" x2="1.602" y2="1.854" width="0.1016" layer="51"/>
+<wire x1="-1.624" y1="-1.854" x2="-1.624" y2="1.854" width="0.1016" layer="51"/>
+<wire x1="-2.31" y1="-1.854" x2="-2.31" y2="1.854" width="0.1016" layer="51"/>
+<wire x1="2.313" y1="-1.854" x2="2.313" y2="1.854" width="0.1016" layer="51"/>
+<circle x="0" y="0" radius="1.4732" width="0.1524" layer="51"/>
+<smd name="1" x="-2.2" y="0" dx="1.4" dy="2.8" layer="1"/>
+<smd name="2" x="2.2" y="0" dx="1.4" dy="2.8" layer="1"/>
+<text x="-2.159" y="2.159" size="1.27" layer="25">>NAME</text>
+<text x="-2.159" y="-3.429" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-0.5001" y1="-1" x2="0.5001" y2="1" layer="35"/>
+</package>
+<package name="L5650M">
+<description><b>INDUCTOR</b> <p>
+molded</description>
+<wire x1="-3.973" y1="2.983" x2="3.973" y2="2.983" width="0.0508" layer="39"/>
+<wire x1="3.973" y1="-2.983" x2="-3.973" y2="-2.983" width="0.0508" layer="39"/>
+<wire x1="-3.973" y1="-2.983" x2="-3.973" y2="2.983" width="0.0508" layer="39"/>
+<wire x1="3.973" y1="2.983" x2="3.973" y2="-2.983" width="0.0508" layer="39"/>
+<wire x1="-2.108" y1="-2.591" x2="2.083" y2="-2.591" width="0.1524" layer="21"/>
+<wire x1="2.083" y1="2.591" x2="-2.108" y2="2.591" width="0.1524" layer="21"/>
+<wire x1="2.184" y1="2.032" x2="2.184" y2="-2.032" width="0.1524" layer="51"/>
+<wire x1="-2.21" y1="2.032" x2="-2.21" y2="-2.032" width="0.1524" layer="51"/>
+<wire x1="-2.108" y1="2.591" x2="-2.108" y2="-2.591" width="0.1524" layer="51"/>
+<wire x1="2.083" y1="2.591" x2="2.083" y2="-2.591" width="0.1524" layer="51"/>
+<smd name="1" x="-2.5" y="0" dx="1.8" dy="4" layer="1"/>
+<smd name="2" x="2.5" y="0" dx="1.8" dy="4" layer="1"/>
+<text x="-2.54" y="2.921" size="1.27" layer="25">>NAME</text>
+<text x="-2.54" y="-4.191" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-0.5001" y1="-1" x2="0.5001" y2="1" layer="35"/>
+</package>
+<package name="L8530M">
+<description><b>INDUCTOR</b> <p>
+molded</description>
+<wire x1="-5.473" y1="1.983" x2="5.473" y2="1.983" width="0.0508" layer="39"/>
+<wire x1="5.473" y1="-1.983" x2="-5.473" y2="-1.983" width="0.0508" layer="39"/>
+<wire x1="-5.473" y1="-1.983" x2="-5.473" y2="1.983" width="0.0508" layer="39"/>
+<wire x1="5.473" y1="1.983" x2="5.473" y2="-1.983" width="0.0508" layer="39"/>
+<wire x1="-4.191" y1="-1.524" x2="-4.191" y2="1.524" width="0.1524" layer="51"/>
+<wire x1="4.191" y1="1.524" x2="-4.191" y2="1.524" width="0.1524" layer="21"/>
+<wire x1="4.191" y1="-1.524" x2="-4.191" y2="-1.524" width="0.1524" layer="21"/>
+<wire x1="-4.293" y1="-0.66" x2="-4.293" y2="0.66" width="0.1524" layer="51"/>
+<wire x1="4.293" y1="-0.66" x2="4.293" y2="0.66" width="0.1524" layer="51"/>
+<wire x1="4.191" y1="-1.524" x2="4.191" y2="1.524" width="0.1524" layer="51"/>
+<smd name="1" x="-3.7" y="0" dx="2.4" dy="1.4" layer="1"/>
+<smd name="2" x="3.7" y="0" dx="2.4" dy="1.4" layer="1"/>
+<text x="-3.683" y="1.778" size="1.27" layer="25">>NAME</text>
+<text x="-3.683" y="-3.048" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-0.5001" y1="-1" x2="0.5001" y2="1" layer="35"/>
+</package>
+<package name="0204/5">
+<description><b>RESISTOR</b><p>
+type 0204, grid 5 mm</description>
+<wire x1="2.54" y1="0" x2="2.032" y2="0" width="0.508" layer="51"/>
+<wire x1="-2.54" y1="0" x2="-2.032" y2="0" width="0.508" layer="51"/>
+<wire x1="-1.778" y1="0.635" x2="-1.524" y2="0.889" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-1.778" y1="-0.635" x2="-1.524" y2="-0.889" width="0.1524" layer="21" curve="90"/>
+<wire x1="1.524" y1="-0.889" x2="1.778" y2="-0.635" width="0.1524" layer="21" curve="90"/>
+<wire x1="1.524" y1="0.889" x2="1.778" y2="0.635" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-1.778" y1="-0.635" x2="-1.778" y2="0.635" width="0.1524" layer="51"/>
+<wire x1="-1.524" y1="0.889" x2="-1.27" y2="0.889" width="0.1524" layer="21"/>
+<wire x1="-1.143" y1="0.762" x2="-1.27" y2="0.889" width="0.1524" layer="21"/>
+<wire x1="-1.524" y1="-0.889" x2="-1.27" y2="-0.889" width="0.1524" layer="21"/>
+<wire x1="-1.143" y1="-0.762" x2="-1.27" y2="-0.889" width="0.1524" layer="21"/>
+<wire x1="1.143" y1="0.762" x2="1.27" y2="0.889" width="0.1524" layer="21"/>
+<wire x1="1.143" y1="0.762" x2="-1.143" y2="0.762" width="0.1524" layer="21"/>
+<wire x1="1.143" y1="-0.762" x2="1.27" y2="-0.889" width="0.1524" layer="21"/>
+<wire x1="1.143" y1="-0.762" x2="-1.143" y2="-0.762" width="0.1524" layer="21"/>
+<wire x1="1.524" y1="0.889" x2="1.27" y2="0.889" width="0.1524" layer="21"/>
+<wire x1="1.524" y1="-0.889" x2="1.27" y2="-0.889" width="0.1524" layer="21"/>
+<wire x1="1.778" y1="-0.635" x2="1.778" y2="0.635" width="0.1524" layer="51"/>
+<pad name="1" x="-2.54" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="2.54" y="0" drill="0.8128" shape="octagon"/>
+<text x="-2.0066" y="1.1684" size="0.9906" layer="25" ratio="10">>NAME</text>
+<text x="-2.1336" y="-2.3114" size="0.9906" layer="27" ratio="10">>VALUE</text>
+<rectangle x1="-2.032" y1="-0.254" x2="-1.778" y2="0.254" layer="51"/>
+<rectangle x1="1.778" y1="-0.254" x2="2.032" y2="0.254" layer="51"/>
+</package>
+<package name="0204/7">
+<description><b>RESISTOR</b><p>
+type 0204, grid 7.5 mm</description>
+<wire x1="3.81" y1="0" x2="2.921" y2="0" width="0.508" layer="51"/>
+<wire x1="-3.81" y1="0" x2="-2.921" y2="0" width="0.508" layer="51"/>
+<wire x1="-2.54" y1="0.762" x2="-2.286" y2="1.016" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-2.54" y1="-0.762" x2="-2.286" y2="-1.016" width="0.1524" layer="21" curve="90"/>
+<wire x1="2.286" y1="-1.016" x2="2.54" y2="-0.762" width="0.1524" layer="21" curve="90"/>
+<wire x1="2.286" y1="1.016" x2="2.54" y2="0.762" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-2.54" y1="-0.762" x2="-2.54" y2="0.762" width="0.1524" layer="21"/>
+<wire x1="-2.286" y1="1.016" x2="-1.905" y2="1.016" width="0.1524" layer="21"/>
+<wire x1="-1.778" y1="0.889" x2="-1.905" y2="1.016" width="0.1524" layer="21"/>
+<wire x1="-2.286" y1="-1.016" x2="-1.905" y2="-1.016" width="0.1524" layer="21"/>
+<wire x1="-1.778" y1="-0.889" x2="-1.905" y2="-1.016" width="0.1524" layer="21"/>
+<wire x1="1.778" y1="0.889" x2="1.905" y2="1.016" width="0.1524" layer="21"/>
+<wire x1="1.778" y1="0.889" x2="-1.778" y2="0.889" width="0.1524" layer="21"/>
+<wire x1="1.778" y1="-0.889" x2="1.905" y2="-1.016" width="0.1524" layer="21"/>
+<wire x1="1.778" y1="-0.889" x2="-1.778" y2="-0.889" width="0.1524" layer="21"/>
+<wire x1="2.286" y1="1.016" x2="1.905" y2="1.016" width="0.1524" layer="21"/>
+<wire x1="2.286" y1="-1.016" x2="1.905" y2="-1.016" width="0.1524" layer="21"/>
+<wire x1="2.54" y1="-0.762" x2="2.54" y2="0.762" width="0.1524" layer="21"/>
+<pad name="1" x="-3.81" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="3.81" y="0" drill="0.8128" shape="octagon"/>
+<text x="-2.54" y="1.2954" size="0.9906" layer="25" ratio="10">>NAME</text>
+<text x="-1.6256" y="-0.4826" size="0.9906" layer="27" ratio="10">>VALUE</text>
+<rectangle x1="2.54" y1="-0.254" x2="2.921" y2="0.254" layer="21"/>
+<rectangle x1="-2.921" y1="-0.254" x2="-2.54" y2="0.254" layer="21"/>
+</package>
+<package name="0204V">
+<description><b>RESISTOR</b><p>
+type 0204, grid 2.5 mm</description>
+<wire x1="-1.27" y1="0" x2="1.27" y2="0" width="0.508" layer="51"/>
+<wire x1="-0.127" y1="0" x2="0.127" y2="0" width="0.508" layer="21"/>
+<circle x="-1.27" y="0" radius="0.889" width="0.1524" layer="51"/>
+<circle x="-1.27" y="0" radius="0.635" width="0.0508" layer="51"/>
+<pad name="1" x="-1.27" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="1.27" y="0" drill="0.8128" shape="octagon"/>
+<text x="-2.1336" y="1.1684" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-2.1336" y="-2.3114" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="0207/10">
+<description><b>RESISTOR</b><p>
+type 0207, grid 10 mm</description>
+<wire x1="5.08" y1="0" x2="4.064" y2="0" width="0.6096" layer="51"/>
+<wire x1="-5.08" y1="0" x2="-4.064" y2="0" width="0.6096" layer="51"/>
+<wire x1="-3.175" y1="0.889" x2="-2.921" y2="1.143" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-3.175" y1="-0.889" x2="-2.921" y2="-1.143" width="0.1524" layer="21" curve="90"/>
+<wire x1="2.921" y1="-1.143" x2="3.175" y2="-0.889" width="0.1524" layer="21" curve="90"/>
+<wire x1="2.921" y1="1.143" x2="3.175" y2="0.889" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-3.175" y1="-0.889" x2="-3.175" y2="0.889" width="0.1524" layer="21"/>
+<wire x1="-2.921" y1="1.143" x2="-2.54" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="-2.413" y1="1.016" x2="-2.54" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="-2.921" y1="-1.143" x2="-2.54" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="-2.413" y1="-1.016" x2="-2.54" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="1.016" x2="2.54" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="1.016" x2="-2.413" y2="1.016" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="-1.016" x2="2.54" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="-1.016" x2="-2.413" y2="-1.016" width="0.1524" layer="21"/>
+<wire x1="2.921" y1="1.143" x2="2.54" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="2.921" y1="-1.143" x2="2.54" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="3.175" y1="-0.889" x2="3.175" y2="0.889" width="0.1524" layer="21"/>
+<pad name="1" x="-5.08" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="5.08" y="0" drill="0.8128" shape="octagon"/>
+<text x="-3.048" y="1.524" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-2.2606" y="-0.635" size="1.27" layer="27" ratio="10">>VALUE</text>
+<rectangle x1="3.175" y1="-0.3048" x2="4.0386" y2="0.3048" layer="21"/>
+<rectangle x1="-4.0386" y1="-0.3048" x2="-3.175" y2="0.3048" layer="21"/>
+</package>
+<package name="0207/12">
+<description><b>RESISTOR</b><p>
+type 0207, grid 12 mm</description>
+<wire x1="6.35" y1="0" x2="5.334" y2="0" width="0.6096" layer="51"/>
+<wire x1="-6.35" y1="0" x2="-5.334" y2="0" width="0.6096" layer="51"/>
+<wire x1="-3.175" y1="0.889" x2="-2.921" y2="1.143" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-3.175" y1="-0.889" x2="-2.921" y2="-1.143" width="0.1524" layer="21" curve="90"/>
+<wire x1="2.921" y1="-1.143" x2="3.175" y2="-0.889" width="0.1524" layer="21" curve="90"/>
+<wire x1="2.921" y1="1.143" x2="3.175" y2="0.889" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-3.175" y1="-0.889" x2="-3.175" y2="0.889" width="0.1524" layer="21"/>
+<wire x1="-2.921" y1="1.143" x2="-2.54" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="-2.413" y1="1.016" x2="-2.54" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="-2.921" y1="-1.143" x2="-2.54" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="-2.413" y1="-1.016" x2="-2.54" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="1.016" x2="2.54" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="1.016" x2="-2.413" y2="1.016" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="-1.016" x2="2.54" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="-1.016" x2="-2.413" y2="-1.016" width="0.1524" layer="21"/>
+<wire x1="2.921" y1="1.143" x2="2.54" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="2.921" y1="-1.143" x2="2.54" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="3.175" y1="-0.889" x2="3.175" y2="0.889" width="0.1524" layer="21"/>
+<wire x1="4.445" y1="0" x2="4.064" y2="0" width="0.6096" layer="21"/>
+<wire x1="-4.445" y1="0" x2="-4.064" y2="0" width="0.6096" layer="21"/>
+<pad name="1" x="-6.35" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="6.35" y="0" drill="0.8128" shape="octagon"/>
+<text x="-3.175" y="1.397" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-2.286" y="-0.6858" size="1.27" layer="27" ratio="10">>VALUE</text>
+<rectangle x1="3.175" y1="-0.3048" x2="4.0386" y2="0.3048" layer="21"/>
+<rectangle x1="-4.0386" y1="-0.3048" x2="-3.175" y2="0.3048" layer="21"/>
+<rectangle x1="4.445" y1="-0.3048" x2="5.3086" y2="0.3048" layer="21"/>
+<rectangle x1="-5.3086" y1="-0.3048" x2="-4.445" y2="0.3048" layer="21"/>
+</package>
+<package name="0207/15">
+<description><b>RESISTOR</b><p>
+type 0207, grid 15mm</description>
+<wire x1="7.62" y1="0" x2="6.604" y2="0" width="0.6096" layer="51"/>
+<wire x1="-7.62" y1="0" x2="-6.604" y2="0" width="0.6096" layer="51"/>
+<wire x1="-3.175" y1="0.889" x2="-2.921" y2="1.143" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-3.175" y1="-0.889" x2="-2.921" y2="-1.143" width="0.1524" layer="21" curve="90"/>
+<wire x1="2.921" y1="-1.143" x2="3.175" y2="-0.889" width="0.1524" layer="21" curve="90"/>
+<wire x1="2.921" y1="1.143" x2="3.175" y2="0.889" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-3.175" y1="-0.889" x2="-3.175" y2="0.889" width="0.1524" layer="21"/>
+<wire x1="-2.921" y1="1.143" x2="-2.54" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="-2.413" y1="1.016" x2="-2.54" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="-2.921" y1="-1.143" x2="-2.54" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="-2.413" y1="-1.016" x2="-2.54" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="1.016" x2="2.54" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="1.016" x2="-2.413" y2="1.016" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="-1.016" x2="2.54" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="-1.016" x2="-2.413" y2="-1.016" width="0.1524" layer="21"/>
+<wire x1="2.921" y1="1.143" x2="2.54" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="2.921" y1="-1.143" x2="2.54" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="3.175" y1="-0.889" x2="3.175" y2="0.889" width="0.1524" layer="21"/>
+<wire x1="5.715" y1="0" x2="4.064" y2="0" width="0.6096" layer="21"/>
+<wire x1="-5.715" y1="0" x2="-4.064" y2="0" width="0.6096" layer="21"/>
+<pad name="1" x="-7.62" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="7.62" y="0" drill="0.8128" shape="octagon"/>
+<text x="-3.175" y="1.397" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-2.286" y="-0.6858" size="1.27" layer="27" ratio="10">>VALUE</text>
+<rectangle x1="3.175" y1="-0.3048" x2="4.0386" y2="0.3048" layer="21"/>
+<rectangle x1="-4.0386" y1="-0.3048" x2="-3.175" y2="0.3048" layer="21"/>
+<rectangle x1="5.715" y1="-0.3048" x2="6.5786" y2="0.3048" layer="21"/>
+<rectangle x1="-6.5786" y1="-0.3048" x2="-5.715" y2="0.3048" layer="21"/>
+</package>
+<package name="0207/2V">
+<description><b>RESISTOR</b><p>
+type 0207, grid 2.5 mm</description>
+<wire x1="-1.27" y1="0" x2="-0.381" y2="0" width="0.6096" layer="51"/>
+<wire x1="-0.254" y1="0" x2="0.254" y2="0" width="0.6096" layer="21"/>
+<wire x1="0.381" y1="0" x2="1.27" y2="0" width="0.6096" layer="51"/>
+<circle x="-1.27" y="0" radius="1.27" width="0.1524" layer="21"/>
+<circle x="-1.27" y="0" radius="1.016" width="0.1524" layer="51"/>
+<pad name="1" x="-1.27" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="1.27" y="0" drill="0.8128" shape="octagon"/>
+<text x="-0.0508" y="1.016" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-0.0508" y="-2.2352" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="0207/5V">
+<description><b>RESISTOR</b><p>
+type 0207, grid 5 mm</description>
+<wire x1="-2.54" y1="0" x2="-0.889" y2="0" width="0.6096" layer="51"/>
+<wire x1="-0.762" y1="0" x2="0.762" y2="0" width="0.6096" layer="21"/>
+<wire x1="0.889" y1="0" x2="2.54" y2="0" width="0.6096" layer="51"/>
+<circle x="-2.54" y="0" radius="1.27" width="0.1016" layer="21"/>
+<circle x="-2.54" y="0" radius="1.016" width="0.1524" layer="51"/>
+<pad name="1" x="-2.54" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="2.54" y="0" drill="0.8128" shape="octagon"/>
+<text x="-1.143" y="0.889" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-1.143" y="-2.159" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="0207/7">
+<description><b>RESISTOR</b><p>
+type 0207, grid 7.5 mm</description>
+<wire x1="-3.81" y1="0" x2="-3.429" y2="0" width="0.6096" layer="51"/>
+<wire x1="-3.175" y1="0.889" x2="-2.921" y2="1.143" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-3.175" y1="-0.889" x2="-2.921" y2="-1.143" width="0.1524" layer="21" curve="90"/>
+<wire x1="2.921" y1="-1.143" x2="3.175" y2="-0.889" width="0.1524" layer="21" curve="90"/>
+<wire x1="2.921" y1="1.143" x2="3.175" y2="0.889" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-3.175" y1="-0.889" x2="-3.175" y2="0.889" width="0.1524" layer="51"/>
+<wire x1="-2.921" y1="1.143" x2="-2.54" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="-2.413" y1="1.016" x2="-2.54" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="-2.921" y1="-1.143" x2="-2.54" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="-2.413" y1="-1.016" x2="-2.54" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="1.016" x2="2.54" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="1.016" x2="-2.413" y2="1.016" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="-1.016" x2="2.54" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="-1.016" x2="-2.413" y2="-1.016" width="0.1524" layer="21"/>
+<wire x1="2.921" y1="1.143" x2="2.54" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="2.921" y1="-1.143" x2="2.54" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="3.175" y1="-0.889" x2="3.175" y2="0.889" width="0.1524" layer="51"/>
+<wire x1="3.429" y1="0" x2="3.81" y2="0" width="0.6096" layer="51"/>
+<pad name="1" x="-3.81" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="3.81" y="0" drill="0.8128" shape="octagon"/>
+<text x="-2.54" y="1.397" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-2.286" y="-0.5588" size="1.27" layer="27" ratio="10">>VALUE</text>
+<rectangle x1="-3.429" y1="-0.3048" x2="-3.175" y2="0.3048" layer="51"/>
+<rectangle x1="3.175" y1="-0.3048" x2="3.429" y2="0.3048" layer="51"/>
+</package>
+<package name="L1812">
+<description><b>INDUCTOR</b><p>
+chip</description>
+<wire x1="-1.4732" y1="1.6002" x2="1.4732" y2="1.6002" width="0.1016" layer="51"/>
+<wire x1="-1.4478" y1="-1.6002" x2="1.4732" y2="-1.6002" width="0.1016" layer="51"/>
+<smd name="1" x="-1.95" y="0" dx="1.9" dy="3.4" layer="1"/>
+<smd name="2" x="1.95" y="0" dx="1.9" dy="3.4" layer="1"/>
+<text x="-1.905" y="1.905" size="1.27" layer="25">>NAME</text>
+<text x="-1.905" y="-3.175" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-2.3876" y1="-1.651" x2="-1.4376" y2="1.649" layer="51"/>
+<rectangle x1="1.4478" y1="-1.651" x2="2.3978" y2="1.649" layer="51"/>
+</package>
+<package name="TJ3-U1">
+<description><b>Inductor</b><p>
+Source: TJ-Serie Vishay.pdf</description>
+<wire x1="-3.65" y1="8.15" x2="3.65" y2="8.15" width="0.2032" layer="21"/>
+<wire x1="3.65" y1="-8.15" x2="-3.65" y2="-8.15" width="0.2032" layer="21"/>
+<wire x1="-3.65" y1="-8.15" x2="-3.65" y2="-1.1" width="0.2032" layer="21"/>
+<wire x1="-3.65" y1="-1.1" x2="-3.65" y2="1.1" width="0.2032" layer="51"/>
+<wire x1="-3.65" y1="1.1" x2="-3.65" y2="8.15" width="0.2032" layer="21"/>
+<wire x1="3.65" y1="8.15" x2="3.65" y2="1.1" width="0.2032" layer="21"/>
+<wire x1="3.65" y1="1.1" x2="3.65" y2="-1.1" width="0.2032" layer="51"/>
+<wire x1="3.65" y1="-1.1" x2="3.65" y2="-8.15" width="0.2032" layer="21"/>
+<pad name="1" x="-3.3" y="0" drill="0.9"/>
+<pad name="2" x="3.3" y="0" drill="0.9"/>
+<text x="-0.635" y="-5.08" size="1.27" layer="25" rot="R90">>NAME</text>
+<text x="1.905" y="-5.08" size="1.27" layer="27" rot="R90">>VALUE</text>
+</package>
+<package name="TJ3-U2">
+<description><b>Inductor</b><p>
+Source: TJ-Serie Vishay.pdf</description>
+<circle x="0" y="0" radius="8.3" width="0.2032" layer="27"/>
+<pad name="1" x="-7.35" y="0" drill="0.9"/>
+<pad name="2" x="7.35" y="0" drill="0.9"/>
+<text x="-5.08" y="0.635" size="1.27" layer="25">>NAME</text>
+<text x="-5.08" y="-1.905" size="1.27" layer="27">>VALUE</text>
+</package>
+<package name="TJ4-U1">
+<description><b>Inductor</b><p>
+Source: TJ-Serie Vishay.pdf</description>
+<wire x1="-4.95" y1="11.05" x2="4.95" y2="11.05" width="0.2032" layer="21"/>
+<wire x1="4.95" y1="11.05" x2="4.95" y2="-11.05" width="0.2032" layer="21"/>
+<wire x1="4.95" y1="-11.05" x2="-4.95" y2="-11.05" width="0.2032" layer="21"/>
+<wire x1="-4.95" y1="-11.05" x2="-4.95" y2="11.05" width="0.2032" layer="21"/>
+<pad name="1" x="-3.935" y="0" drill="0.9"/>
+<pad name="2" x="3.935" y="0" drill="0.9"/>
+<text x="-0.635" y="-5.08" size="1.27" layer="25" rot="R90">>NAME</text>
+<text x="1.905" y="-5.08" size="1.27" layer="27" rot="R90">>VALUE</text>
+</package>
+<package name="TJ4-U2">
+<description><b>Inductor</b><p>
+Source: TJ-Serie Vishay.pdf</description>
+<circle x="0" y="0" radius="11.1" width="0.2032" layer="27"/>
+<pad name="1" x="-9.9" y="0" drill="0.9"/>
+<pad name="2" x="9.9" y="0" drill="0.9"/>
+<text x="-5.08" y="0.635" size="1.27" layer="25">>NAME</text>
+<text x="-5.08" y="-1.905" size="1.27" layer="27">>VALUE</text>
+</package>
+<package name="TJ5-U1">
+<description><b>Inductor</b><p>
+Source: TJ-Serie Vishay.pdf</description>
+<wire x1="-5.55" y1="12.55" x2="5.55" y2="12.55" width="0.2032" layer="21"/>
+<wire x1="5.55" y1="12.55" x2="5.55" y2="-12.55" width="0.2032" layer="21"/>
+<wire x1="5.55" y1="-12.55" x2="-5.55" y2="-12.55" width="0.2032" layer="21"/>
+<wire x1="-5.55" y1="-12.55" x2="-5.55" y2="12.55" width="0.2032" layer="21"/>
+<pad name="1" x="-4.7" y="0" drill="0.9"/>
+<pad name="2" x="4.7" y="0" drill="0.9"/>
+<text x="-0.635" y="-5.08" size="1.27" layer="25" rot="R90">>NAME</text>
+<text x="1.905" y="-5.08" size="1.27" layer="27" rot="R90">>VALUE</text>
+</package>
+<package name="TJ5-U2">
+<description><b>Inductor</b><p>
+Source: TJ-Serie Vishay.pdf</description>
+<circle x="0" y="0" radius="12.6" width="0.2032" layer="27"/>
+<pad name="1" x="-11.45" y="0" drill="0.9"/>
+<pad name="2" x="11.45" y="0" drill="0.9"/>
+<text x="-5.08" y="0.635" size="1.27" layer="25">>NAME</text>
+<text x="-5.08" y="-1.905" size="1.27" layer="27">>VALUE</text>
+</package>
+<package name="TJ6-U1">
+<description><b>Inductor</b><p>
+Source: TJ-Serie Vishay.pdf</description>
+<wire x1="-10.95" y1="17.45" x2="10.95" y2="17.45" width="0.2032" layer="21"/>
+<wire x1="10.95" y1="17.45" x2="10.95" y2="-17.45" width="0.2032" layer="21"/>
+<wire x1="10.95" y1="-17.45" x2="-10.95" y2="-17.45" width="0.2032" layer="21"/>
+<wire x1="-10.95" y1="-17.45" x2="-10.95" y2="17.45" width="0.2032" layer="21"/>
+<pad name="1" x="-9.25" y="0" drill="1.3"/>
+<pad name="2" x="9.25" y="0" drill="1.3"/>
+<text x="-0.635" y="-5.08" size="1.27" layer="25" rot="R90">>NAME</text>
+<text x="1.905" y="-5.08" size="1.27" layer="27" rot="R90">>VALUE</text>
+</package>
+<package name="TJ6-U2">
+<description><b>Inductor</b><p>
+Source: TJ-Serie Vishay.pdf</description>
+<circle x="0" y="0" radius="17.5" width="0.2032" layer="27"/>
+<pad name="1" x="-15.5" y="0" drill="1.3"/>
+<pad name="2" x="15.5" y="0" drill="1.3"/>
+<text x="-5.08" y="0.635" size="1.27" layer="25">>NAME</text>
+<text x="-5.08" y="-1.905" size="1.27" layer="27">>VALUE</text>
+</package>
+<package name="TJ7-U1">
+<description><b>Inductor</b><p>
+Source: TJ-Serie Vishay.pdf</description>
+<wire x1="-9.45" y1="20.85" x2="9.43" y2="20.85" width="0.2032" layer="21"/>
+<wire x1="9.43" y1="20.85" x2="9.45" y2="-20.85" width="0.2032" layer="21"/>
+<wire x1="9.45" y1="-20.85" x2="-9.45" y2="-20.85" width="0.2032" layer="21"/>
+<wire x1="-9.45" y1="-20.85" x2="-9.45" y2="20.85" width="0.2032" layer="21"/>
+<pad name="1" x="-7.9" y="0" drill="1.3"/>
+<pad name="2" x="7.9" y="0" drill="1.3"/>
+<text x="-0.635" y="-5.08" size="1.27" layer="25" rot="R90">>NAME</text>
+<text x="1.905" y="-5.08" size="1.27" layer="27" rot="R90">>VALUE</text>
+</package>
+<package name="TJ7-U2">
+<description><b>Inductor</b><p>
+Source: TJ-Serie Vishay.pdf</description>
+<circle x="0" y="0" radius="20.9" width="0.2032" layer="27"/>
+<pad name="1" x="-18.8" y="0" drill="1.3"/>
+<pad name="2" x="18.8" y="0" drill="1.3"/>
+<text x="-5.08" y="0.635" size="1.27" layer="25">>NAME</text>
+<text x="-5.08" y="-1.905" size="1.27" layer="27">>VALUE</text>
+</package>
+<package name="TJ8-U1">
+<description><b>Inductor</b><p>
+Source: TJ-Serie Vishay.pdf</description>
+<wire x1="-12.55" y1="24.25" x2="12.55" y2="24.25" width="0.2032" layer="21"/>
+<wire x1="12.55" y1="24.25" x2="12.55" y2="-24.25" width="0.2032" layer="21"/>
+<wire x1="12.55" y1="-24.25" x2="-12.55" y2="-24.25" width="0.2032" layer="21"/>
+<wire x1="-12.55" y1="-24.25" x2="-12.55" y2="24.25" width="0.2032" layer="21"/>
+<pad name="1" x="-10.4" y="0" drill="1.5"/>
+<pad name="2" x="10.4" y="0" drill="1.5"/>
+<text x="-0.635" y="-5.08" size="1.27" layer="25" rot="R90">>NAME</text>
+<text x="1.905" y="-5.08" size="1.27" layer="27" rot="R90">>VALUE</text>
+</package>
+<package name="TJ8-U2">
+<description><b>Inductor</b><p>
+Source: TJ-Serie Vishay.pdf</description>
+<circle x="0" y="0" radius="24.6" width="0.2032" layer="27"/>
+<pad name="1" x="-22.35" y="0" drill="1.5"/>
+<pad name="2" x="22.35" y="0" drill="1.5"/>
+<text x="-5.08" y="0.635" size="1.27" layer="25">>NAME</text>
+<text x="-5.08" y="-1.905" size="1.27" layer="27">>VALUE</text>
+</package>
+<package name="TJ9-U1">
+<description><b>Inductor</b><p>
+Source: TJ-Serie Vishay.pdf</description>
+<wire x1="-17.95" y1="33.75" x2="17.95" y2="33.75" width="0.2032" layer="21"/>
+<wire x1="17.95" y1="33.75" x2="17.95" y2="-33.75" width="0.2032" layer="21"/>
+<wire x1="17.95" y1="-33.75" x2="-17.95" y2="-33.75" width="0.2032" layer="21"/>
+<wire x1="-17.95" y1="-33.75" x2="-17.95" y2="33.75" width="0.2032" layer="21"/>
+<pad name="1" x="-15.9" y="0" drill="1.8"/>
+<pad name="2" x="15.9" y="0" drill="1.8"/>
+<text x="-0.635" y="-5.08" size="1.27" layer="25" rot="R90">>NAME</text>
+<text x="1.905" y="-5.08" size="1.27" layer="27" rot="R90">>VALUE</text>
+</package>
+<package name="TJ9-U2">
+<description><b>Inductor</b><p>
+Source: TJ-Serie Vishay.pdf</description>
+<circle x="0" y="0" radius="34.5" width="0.2032" layer="27"/>
+<pad name="1" x="-31.6" y="0" drill="1.8"/>
+<pad name="2" x="31.6" y="0" drill="1.8"/>
+<text x="-5.08" y="0.635" size="1.27" layer="25">>NAME</text>
+<text x="-5.08" y="-1.905" size="1.27" layer="27">>VALUE</text>
+</package>
+<package name="POWER-CHOKE_WE-TPC">
+<description><b>POWER-CHOKE WE-TPC</b><p>
+Würth Elektronik, Partnumber: 744053220<br>
+Source: WE-TPC 744053220.pdf</description>
+<wire x1="-2.8" y1="2.3" x2="-2.3" y2="2.8" width="0.2" layer="51" curve="-90"/>
+<wire x1="-2.3" y1="2.8" x2="2.3" y2="2.8" width="0.2" layer="51"/>
+<wire x1="2.3" y1="2.8" x2="2.8" y2="2.3" width="0.2" layer="51" curve="-90"/>
+<wire x1="2.8" y1="2.3" x2="2.8" y2="-2.3" width="0.2" layer="51"/>
+<wire x1="2.8" y1="-2.3" x2="2.3" y2="-2.8" width="0.2" layer="51" curve="-90"/>
+<wire x1="2.3" y1="-2.8" x2="-2.3" y2="-2.8" width="0.2" layer="51"/>
+<wire x1="-2.3" y1="-2.8" x2="-2.8" y2="-2.3" width="0.2" layer="51" curve="-90"/>
+<wire x1="-2.8" y1="-2.3" x2="-2.8" y2="2.3" width="0.2" layer="51"/>
+<wire x1="-2.8" y1="0.65" x2="-2.8" y2="-0.65" width="0.2" layer="21"/>
+<wire x1="-2" y1="0.65" x2="-2" y2="-0.65" width="0.2" layer="21" curve="36.008323"/>
+<wire x1="2.8" y1="-0.65" x2="2.8" y2="0.65" width="0.2" layer="21"/>
+<wire x1="2" y1="-0.65" x2="2" y2="0.65" width="0.2" layer="21" curve="36.008323"/>
+<circle x="0" y="0" radius="2.1" width="0.2" layer="51"/>
+<smd name="1" x="0" y="2.05" dx="6.3" dy="2.2" layer="1" roundness="25"/>
+<smd name="2" x="0" y="-2.05" dx="6.3" dy="2.2" layer="1" roundness="25" rot="R180"/>
+<text x="-3.5" y="3.5" size="1.778" layer="25">>NAME</text>
+<text x="-3.5" y="-5.3" size="1.778" layer="27">>VALUE</text>
+</package>
+<package name="CEP125">
+<description><b>POWER INDUCTORS</b> (SMT Type)<p>
+Source: www.sumida.com/products/pdf/CEP125.pdf</description>
+<wire x1="-1.5796" y1="6.3448" x2="-1.5533" y2="6.3448" width="0.2032" layer="21"/>
+<wire x1="-1.5533" y1="6.3448" x2="-1.29" y2="6.0815" width="0.2032" layer="21"/>
+<wire x1="-1.29" y1="6.0815" x2="-1.1584" y2="6.0816" width="0.2032" layer="21"/>
+<wire x1="-1.1584" y1="6.0816" x2="-1.1584" y2="6.2922" width="0.2032" layer="21"/>
+<wire x1="-1.1584" y1="6.2922" x2="-1.1583" y2="6.2922" width="0.2032" layer="21"/>
+<wire x1="-1.1583" y1="6.2922" x2="-1.1057" y2="6.3448" width="0.2032" layer="21"/>
+<wire x1="-1.1057" y1="6.3448" x2="1.1057" y2="6.3448" width="0.2032" layer="21"/>
+<wire x1="1.1057" y1="6.3448" x2="1.1057" y2="6.0815" width="0.2032" layer="21"/>
+<wire x1="1.1057" y1="6.0815" x2="1.211" y2="6.0815" width="0.2032" layer="21"/>
+<wire x1="1.211" y1="6.0815" x2="1.4217" y2="6.3448" width="0.2032" layer="21"/>
+<wire x1="1.4217" y1="6.3448" x2="6.1079" y2="6.3448" width="0.2032" layer="51"/>
+<wire x1="6.1079" y1="6.3448" x2="6.3448" y2="6.1079" width="0.2032" layer="21" curve="-96.645912"/>
+<wire x1="6.3448" y1="6.1079" x2="6.3448" y2="1.8166" width="0.2032" layer="21"/>
+<wire x1="6.3448" y1="1.8166" x2="6.2658" y2="1.7376" width="0.2032" layer="21"/>
+<wire x1="6.2658" y1="1.7376" x2="6.2658" y2="-1.7376" width="0.2032" layer="21"/>
+<wire x1="6.2658" y1="-1.7376" x2="6.3448" y2="-1.8166" width="0.2032" layer="21"/>
+<wire x1="6.3448" y1="-1.8166" x2="6.3448" y2="-6.0289" width="0.2032" layer="21"/>
+<wire x1="6.3448" y1="-6.0289" x2="6.0289" y2="-6.3448" width="0.2032" layer="21" curve="-91.024745"/>
+<wire x1="6.0289" y1="-6.3448" x2="-6.0289" y2="-6.3448" width="0.2032" layer="51"/>
+<wire x1="-6.3448" y1="-6.0289" x2="-6.3448" y2="6.1342" width="0.2032" layer="21"/>
+<wire x1="-6.3448" y1="6.1342" x2="-6.1342" y2="6.3448" width="0.2032" layer="21" curve="-83.297108"/>
+<wire x1="-6.1342" y1="6.3448" x2="-1.5533" y2="6.3448" width="0.2032" layer="51"/>
+<wire x1="-6.2395" y1="5.7393" x2="-2.0535" y2="5.7393" width="0.2032" layer="51"/>
+<wire x1="-2.0535" y1="5.7393" x2="-1.5534" y2="3.9754" width="0.2032" layer="51"/>
+<wire x1="-1.5534" y1="3.9754" x2="1.527" y2="3.9754" width="0.2032" layer="21"/>
+<wire x1="1.527" y1="3.9754" x2="2.0535" y2="5.7393" width="0.2032" layer="51"/>
+<wire x1="2.0535" y1="5.7393" x2="6.2395" y2="5.7393" width="0.2032" layer="51"/>
+<wire x1="6.2395" y1="-3.4752" x2="-6.2658" y2="-3.4752" width="0.2032" layer="21"/>
+<wire x1="-5.6077" y1="-3.5805" x2="-5.6077" y2="-6.2395" width="0.2032" layer="21"/>
+<wire x1="-4.8968" y1="-6.2395" x2="-4.8968" y2="-3.5805" width="0.2032" layer="21"/>
+<wire x1="-4.7915" y1="-6.0552" x2="-2.2115" y2="-6.0552" width="0.2032" layer="21"/>
+<wire x1="-2.9486" y1="-5.9499" x2="-2.9223" y2="-5.9499" width="0.2032" layer="21"/>
+<wire x1="-2.9223" y1="-5.9499" x2="-2.9223" y2="-3.5805" width="0.2032" layer="21"/>
+<wire x1="-2.1588" y1="-6.2395" x2="-2.1588" y2="-3.8701" width="0.2032" layer="21"/>
+<wire x1="2.1325" y1="-6.2395" x2="2.1325" y2="-3.8701" width="0.2032" layer="21"/>
+<wire x1="2.2378" y1="-6.0289" x2="4.8968" y2="-6.0289" width="0.2032" layer="21"/>
+<wire x1="4.8968" y1="-3.5805" x2="4.8968" y2="-6.2395" width="0.2032" layer="21"/>
+<wire x1="2.9486" y1="-5.9236" x2="2.9486" y2="-3.5805" width="0.2032" layer="21"/>
+<wire x1="5.5813" y1="-6.2395" x2="5.5813" y2="-3.5805" width="0.2032" layer="21"/>
+<wire x1="2.5011" y1="-3.5805" x2="-2.4747" y2="-3.5805" width="0.2032" layer="51" curve="-63.906637"/>
+<wire x1="1.1057" y1="6.0815" x2="-1.1584" y2="6.0815" width="0.2032" layer="21"/>
+<wire x1="-1.7902" y1="5.1601" x2="1.7376" y2="5.1863" width="0.2032" layer="21" curve="-37.134171"/>
+<wire x1="-6.0289" y1="-6.3448" x2="-6.3448" y2="-6.0289" width="0.2032" layer="21" curve="-90.91408"/>
+<smd name="1" x="-3.5" y="5.375" dx="3" dy="2.75" layer="1"/>
+<smd name="2" x="3.5" y="5.375" dx="3" dy="2.75" layer="1"/>
+<smd name="3" x="0" y="-5.48" dx="3" dy="2.55" layer="1"/>
+<text x="-5.08" y="1.27" size="1.27" layer="25">>NAME</text>
+<text x="-5.08" y="-1.27" size="1.27" layer="27">>VALUE</text>
+</package>
+<package name="1010-153">
+<description><b>coilcraft inductor</b><br>
+drawings at <a href="http://www.coilcraft.com/pdf_viewer/showpdf.cfm?f=pdf_store:xal1010_.pdf">http://www.coilcraft.com/pdf_viewer/showpdf.cfm?f=pdf_store:xal1010_.pdf</a></description>
+<smd name="P$1" x="-3.325" y="0" dx="2.38" dy="8.71" layer="1"/>
+<smd name="P$2" x="3.325" y="0" dx="2.38" dy="8.71" layer="1"/>
+<rectangle x1="-5" y1="-5.65" x2="5" y2="5.65" layer="39"/>
+</package>
+<package name="PG-TSDSON8">
+<description><b>infineon mosfet package</b><br>
+created from drawings at <a href="http://www.infineon.com/dgdl/Recommendations+for+Board+Assembly_T(S)DSON.pdf?folderId=db3a304313b8b5a60113cee8763b02d7&fileId=db3a30432239cccd0122c1581cb45996">http://www.infineon.com/dgdl/Recommendations+for+Board+Assembly_T(S)DSON.pdf?folderId=db3a304313b8b5a60113cee8763b02d7&fileId=db3a30432239cccd0122c1581cb45996</a> (page 13 and TSDSON is Shrink SuperSO8)</description>
+<smd name="S$1" x="-0.325" y="-1.5" dx="0.8" dy="0.34" layer="1" rot="R90"/>
+<smd name="S$2" x="0.325" y="-1.5" dx="0.8" dy="0.34" layer="1" rot="R90"/>
+<smd name="G" x="0.975" y="-1.5" dx="0.8" dy="0.34" layer="1" rot="R90"/>
+<smd name="S$0" x="-0.975" y="-1.5" dx="0.8" dy="0.34" layer="1" rot="R90"/>
+<smd name="D$1" x="-0.975" y="1.25" dx="0.34" dy="1.3" layer="1"/>
+<smd name="D$2" x="-0.325" y="1.25" dx="0.34" dy="1.3" layer="1"/>
+<smd name="D$3" x="0.325" y="1.25" dx="0.34" dy="1.3" layer="1"/>
+<smd name="D$4" x="0.975" y="1.25" dx="0.34" dy="1.3" layer="1"/>
+<smd name="D$0" x="0" y="0.395" dx="2.29" dy="1.71" layer="1"/>
+<rectangle x1="-1.6" y1="-1.9" x2="1.6" y2="1.9" layer="39"/>
+</package>
+<package name="PG-TSDSON8_SIMPLE">
+<description><b>infineon mosfet package</b><br>
+created from drawings at <a href="http://www.infineon.com/dgdl/Recommendations+for+Board+Assembly_T(S)DSON.pdf?folderId=db3a304313b8b5a60113cee8763b02d7&fileId=db3a30432239cccd0122c1581cb45996">http://www.infineon.com/dgdl/Recommendations+for+Board+Assembly_T(S)DSON.pdf?folderId=db3a304313b8b5a60113cee8763b02d7&fileId=db3a30432239cccd0122c1581cb45996</a> (page 13 and TSDSON is Shrink SuperSO8)<br>
+simplified from the recommendations by making the common pads big rectangles so that it works better in eagle (they appear to only be there to help with alignment during reflow soldering)</description>
+<smd name="S" x="-0.325" y="-1.5" dx="0.8" dy="1.64" layer="1" rot="R90"/>
+<smd name="G" x="0.975" y="-1.5" dx="0.8" dy="0.34" layer="1" rot="R90"/>
+<smd name="D" x="0" y="0.72" dx="2.29" dy="2.36" layer="1"/>
+<rectangle x1="-1.6" y1="-1.9" x2="1.6" y2="1.9" layer="39"/>
+</package>
+<package name="DFN12">
+<circle x="-0.75" y="1.75" radius="0.25" width="0.127" layer="51"/>
+<smd name="1" x="-0.614" y="1.25" dx="0.479" dy="0.265" layer="1"/>
+<smd name="3" x="-0.614" y="0.25" dx="0.479" dy="0.265" layer="1"/>
+<smd name="5" x="-0.614" y="-0.75" dx="0.479" dy="0.265" layer="1"/>
+<smd name="6" x="-0.614" y="-1.25" dx="0.479" dy="0.265" layer="1"/>
+<smd name="4" x="-0.614" y="-0.25" dx="0.479" dy="0.265" layer="1"/>
+<smd name="2" x="-0.614" y="0.75" dx="0.479" dy="0.265" layer="1"/>
+<smd name="12" x="0.614" y="1.25" dx="0.479" dy="0.265" layer="1"/>
+<smd name="11" x="0.614" y="0.75" dx="0.479" dy="0.265" layer="1"/>
+<smd name="10" x="0.614" y="0.25" dx="0.479" dy="0.265" layer="1"/>
+<smd name="9" x="0.614" y="-0.25" dx="0.479" dy="0.265" layer="1"/>
+<smd name="8" x="0.614" y="-0.75" dx="0.479" dy="0.265" layer="1"/>
+<smd name="7" x="0.614" y="-1.25" dx="0.479" dy="0.265" layer="1"/>
+<smd name="GND" x="0" y="0" dx="0.351" dy="2.352" layer="1"/>
+</package>
+<package name="C0402">
+<description><b>CAPACITOR</b><p>
+chip</description>
+<wire x1="-0.245" y1="0.224" x2="0.245" y2="0.224" width="0.1524" layer="51"/>
+<wire x1="0.245" y1="-0.224" x2="-0.245" y2="-0.224" width="0.1524" layer="51"/>
+<wire x1="-1.473" y1="0.483" x2="1.473" y2="0.483" width="0.0508" layer="39"/>
+<wire x1="1.473" y1="0.483" x2="1.473" y2="-0.483" width="0.0508" layer="39"/>
+<wire x1="1.473" y1="-0.483" x2="-1.473" y2="-0.483" width="0.0508" layer="39"/>
+<wire x1="-1.473" y1="-0.483" x2="-1.473" y2="0.483" width="0.0508" layer="39"/>
+<smd name="1" x="-0.65" y="0" dx="0.7" dy="0.9" layer="1"/>
+<smd name="2" x="0.65" y="0" dx="0.7" dy="0.9" layer="1"/>
+<text x="-0.635" y="0.762" size="1.27" layer="25">>NAME</text>
+<text x="-0.635" y="-1.905" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-0.554" y1="-0.3048" x2="-0.254" y2="0.2951" layer="51"/>
+<rectangle x1="0.2588" y1="-0.3048" x2="0.5588" y2="0.2951" layer="51"/>
+<rectangle x1="-0.1999" y1="-0.3" x2="0.1999" y2="0.3" layer="35"/>
+</package>
+<package name="C0504">
+<description><b>CAPACITOR</b><p>
+chip</description>
+<wire x1="-1.473" y1="0.983" x2="1.473" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="1.473" y1="0.983" x2="1.473" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="1.473" y1="-0.983" x2="-1.473" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="-1.473" y1="-0.983" x2="-1.473" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="-0.294" y1="0.559" x2="0.294" y2="0.559" width="0.1016" layer="51"/>
+<wire x1="-0.294" y1="-0.559" x2="0.294" y2="-0.559" width="0.1016" layer="51"/>
+<smd name="1" x="-0.7" y="0" dx="1" dy="1.3" layer="1"/>
+<smd name="2" x="0.7" y="0" dx="1" dy="1.3" layer="1"/>
+<text x="-0.635" y="0.889" size="1.27" layer="25">>NAME</text>
+<text x="-0.635" y="-2.159" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-0.6604" y1="-0.6223" x2="-0.2804" y2="0.6276" layer="51"/>
+<rectangle x1="0.2794" y1="-0.6223" x2="0.6594" y2="0.6276" layer="51"/>
+<rectangle x1="-0.1001" y1="-0.4001" x2="0.1001" y2="0.4001" layer="35"/>
+</package>
+<package name="C0603">
+<description><b>CAPACITOR</b><p>
+chip</description>
+<wire x1="-1.473" y1="0.983" x2="1.473" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="1.473" y1="0.983" x2="1.473" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="1.473" y1="-0.983" x2="-1.473" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="-0.356" y1="0.432" x2="0.356" y2="0.432" width="0.1016" layer="51"/>
+<wire x1="-0.356" y1="-0.419" x2="0.356" y2="-0.419" width="0.1016" layer="51"/>
+<smd name="1" x="-0.85" y="0" dx="1.1" dy="1" layer="1"/>
+<smd name="2" x="0.85" y="0" dx="1.1" dy="1" layer="1"/>
+<text x="-0.889" y="0.762" size="1.27" layer="25">>NAME</text>
+<text x="-0.889" y="-2.032" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-0.8382" y1="-0.4699" x2="-0.3381" y2="0.4801" layer="51"/>
+<rectangle x1="0.3302" y1="-0.4699" x2="0.8303" y2="0.4801" layer="51"/>
+<rectangle x1="-0.1999" y1="-0.3" x2="0.1999" y2="0.3" layer="35"/>
+</package>
+<package name="C0805">
+<description><b>CAPACITOR</b><p>
+chip</description>
+<wire x1="-1.973" y1="0.983" x2="1.973" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="1.973" y1="-0.983" x2="-1.973" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="-1.973" y1="-0.983" x2="-1.973" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="-0.381" y1="0.66" x2="0.381" y2="0.66" width="0.1016" layer="51"/>
+<wire x1="-0.356" y1="-0.66" x2="0.381" y2="-0.66" width="0.1016" layer="51"/>
+<wire x1="1.973" y1="0.983" x2="1.973" y2="-0.983" width="0.0508" layer="39"/>
+<smd name="1" x="-0.85" y="0" dx="1.3" dy="1.5" layer="1"/>
+<smd name="2" x="0.85" y="0" dx="1.3" dy="1.5" layer="1"/>
+<text x="-0.889" y="1.016" size="1.27" layer="25">>NAME</text>
+<text x="-0.889" y="-2.286" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-1.0922" y1="-0.7239" x2="-0.3421" y2="0.7262" layer="51"/>
+<rectangle x1="0.3556" y1="-0.7239" x2="1.1057" y2="0.7262" layer="51"/>
+<rectangle x1="-0.1001" y1="-0.4001" x2="0.1001" y2="0.4001" layer="35"/>
+</package>
+<package name="C1005">
+<description><b>CAPACITOR</b><p>
+chip</description>
+<wire x1="-0.245" y1="0.224" x2="0.245" y2="0.224" width="0.1524" layer="51"/>
+<wire x1="0.245" y1="-0.224" x2="-0.245" y2="-0.224" width="0.1524" layer="51"/>
+<wire x1="-1.473" y1="0.483" x2="1.473" y2="0.483" width="0.0508" layer="39"/>
+<wire x1="1.473" y1="0.483" x2="1.473" y2="-0.483" width="0.0508" layer="39"/>
+<wire x1="1.473" y1="-0.483" x2="-1.473" y2="-0.483" width="0.0508" layer="39"/>
+<wire x1="-1.473" y1="-0.483" x2="-1.473" y2="0.483" width="0.0508" layer="39"/>
+<smd name="1" x="-0.65" y="0" dx="0.7" dy="0.9" layer="1"/>
+<smd name="2" x="0.65" y="0" dx="0.7" dy="0.9" layer="1"/>
+<text x="-0.635" y="0.762" size="1.27" layer="25">>NAME</text>
+<text x="-0.635" y="-1.905" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-0.554" y1="-0.3048" x2="-0.254" y2="0.2951" layer="51"/>
+<rectangle x1="0.2588" y1="-0.3048" x2="0.5588" y2="0.2951" layer="51"/>
+<rectangle x1="-0.1999" y1="-0.3" x2="0.1999" y2="0.3" layer="35"/>
+</package>
+<package name="C1206">
+<description><b>CAPACITOR</b><p>
+chip</description>
+<wire x1="-2.473" y1="0.983" x2="2.473" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="2.473" y1="-0.983" x2="-2.473" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="-2.473" y1="-0.983" x2="-2.473" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="2.473" y1="0.983" x2="2.473" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="-0.965" y1="0.787" x2="0.965" y2="0.787" width="0.1016" layer="51"/>
+<wire x1="-0.965" y1="-0.787" x2="0.965" y2="-0.787" width="0.1016" layer="51"/>
+<smd name="1" x="-1.4" y="0" dx="1.6" dy="1.8" layer="1"/>
+<smd name="2" x="1.4" y="0" dx="1.6" dy="1.8" layer="1"/>
+<text x="-1.27" y="1.143" size="1.27" layer="25">>NAME</text>
+<text x="-1.27" y="-2.413" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-1.7018" y1="-0.8509" x2="-0.9517" y2="0.8491" layer="51"/>
+<rectangle x1="0.9517" y1="-0.8491" x2="1.7018" y2="0.8509" layer="51"/>
+<rectangle x1="-0.1999" y1="-0.4001" x2="0.1999" y2="0.4001" layer="35"/>
+</package>
+<package name="C1210">
+<description><b>CAPACITOR</b><p>
+chip</description>
+<wire x1="-2.473" y1="1.483" x2="2.473" y2="1.483" width="0.0508" layer="39"/>
+<wire x1="2.473" y1="-1.483" x2="-2.473" y2="-1.483" width="0.0508" layer="39"/>
+<wire x1="-2.473" y1="-1.483" x2="-2.473" y2="1.483" width="0.0508" layer="39"/>
+<wire x1="-0.9652" y1="1.2446" x2="0.9652" y2="1.2446" width="0.1016" layer="51"/>
+<wire x1="-0.9652" y1="-1.2446" x2="0.9652" y2="-1.2446" width="0.1016" layer="51"/>
+<wire x1="2.473" y1="1.483" x2="2.473" y2="-1.483" width="0.0508" layer="39"/>
+<smd name="1" x="-1.4" y="0" dx="1.6" dy="2.7" layer="1"/>
+<smd name="2" x="1.4" y="0" dx="1.6" dy="2.7" layer="1"/>
+<text x="-1.397" y="1.651" size="1.27" layer="25">>NAME</text>
+<text x="-1.397" y="-2.921" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-1.7018" y1="-1.2954" x2="-0.9517" y2="1.3045" layer="51"/>
+<rectangle x1="0.9517" y1="-1.3045" x2="1.7018" y2="1.2954" layer="51"/>
+<rectangle x1="-0.1999" y1="-0.4001" x2="0.1999" y2="0.4001" layer="35"/>
+</package>
+<package name="C1310">
+<description><b>CAPACITOR</b><p>
+chip</description>
+<wire x1="-1.473" y1="0.983" x2="1.473" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="1.473" y1="0.983" x2="1.473" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="1.473" y1="-0.983" x2="-1.473" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="-1.473" y1="-0.983" x2="-1.473" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="-0.294" y1="0.559" x2="0.294" y2="0.559" width="0.1016" layer="51"/>
+<wire x1="-0.294" y1="-0.559" x2="0.294" y2="-0.559" width="0.1016" layer="51"/>
+<smd name="1" x="-0.7" y="0" dx="1" dy="1.3" layer="1"/>
+<smd name="2" x="0.7" y="0" dx="1" dy="1.3" layer="1"/>
+<text x="-0.635" y="0.889" size="1.27" layer="25">>NAME</text>
+<text x="-0.635" y="-2.159" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-0.6604" y1="-0.6223" x2="-0.2804" y2="0.6276" layer="51"/>
+<rectangle x1="0.2794" y1="-0.6223" x2="0.6594" y2="0.6276" layer="51"/>
+<rectangle x1="-0.1001" y1="-0.3" x2="0.1001" y2="0.3" layer="35"/>
+</package>
+<package name="C1608">
+<description><b>CAPACITOR</b><p>
+chip</description>
+<wire x1="-1.473" y1="0.983" x2="1.473" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="1.473" y1="0.983" x2="1.473" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="1.473" y1="-0.983" x2="-1.473" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="-1.473" y1="-0.983" x2="-1.473" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="-0.356" y1="0.432" x2="0.356" y2="0.432" width="0.1016" layer="51"/>
+<wire x1="-0.356" y1="-0.419" x2="0.356" y2="-0.419" width="0.1016" layer="51"/>
+<smd name="1" x="-0.85" y="0" dx="1.1" dy="1" layer="1"/>
+<smd name="2" x="0.85" y="0" dx="1.1" dy="1" layer="1"/>
+<text x="-0.635" y="0.762" size="1.27" layer="25">>NAME</text>
+<text x="-0.635" y="-2.032" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-0.8382" y1="-0.4699" x2="-0.3381" y2="0.4801" layer="51"/>
+<rectangle x1="0.3302" y1="-0.4699" x2="0.8303" y2="0.4801" layer="51"/>
+<rectangle x1="-0.1999" y1="-0.3" x2="0.1999" y2="0.3" layer="35"/>
+</package>
+<package name="C1812">
+<description><b>CAPACITOR</b><p>
+chip</description>
+<wire x1="-2.973" y1="1.983" x2="2.973" y2="1.983" width="0.0508" layer="39"/>
+<wire x1="2.973" y1="-1.983" x2="-2.973" y2="-1.983" width="0.0508" layer="39"/>
+<wire x1="-2.973" y1="-1.983" x2="-2.973" y2="1.983" width="0.0508" layer="39"/>
+<wire x1="-1.4732" y1="1.6002" x2="1.4732" y2="1.6002" width="0.1016" layer="51"/>
+<wire x1="-1.4478" y1="-1.6002" x2="1.4732" y2="-1.6002" width="0.1016" layer="51"/>
+<wire x1="2.973" y1="1.983" x2="2.973" y2="-1.983" width="0.0508" layer="39"/>
+<smd name="1" x="-1.95" y="0" dx="1.9" dy="3.4" layer="1"/>
+<smd name="2" x="1.95" y="0" dx="1.9" dy="3.4" layer="1"/>
+<text x="-1.905" y="1.905" size="1.27" layer="25">>NAME</text>
+<text x="-1.905" y="-3.175" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-2.3876" y1="-1.651" x2="-1.4376" y2="1.649" layer="51"/>
+<rectangle x1="1.4478" y1="-1.651" x2="2.3978" y2="1.649" layer="51"/>
+<rectangle x1="-0.3" y1="-0.4001" x2="0.3" y2="0.4001" layer="35"/>
+</package>
+<package name="C1825">
+<description><b>CAPACITOR</b><p>
+chip</description>
+<wire x1="-2.973" y1="3.483" x2="2.973" y2="3.483" width="0.0508" layer="39"/>
+<wire x1="2.973" y1="-3.483" x2="-2.973" y2="-3.483" width="0.0508" layer="39"/>
+<wire x1="-2.973" y1="-3.483" x2="-2.973" y2="3.483" width="0.0508" layer="39"/>
+<wire x1="-1.4986" y1="3.2766" x2="1.4732" y2="3.2766" width="0.1016" layer="51"/>
+<wire x1="-1.4732" y1="-3.2766" x2="1.4986" y2="-3.2766" width="0.1016" layer="51"/>
+<wire x1="2.973" y1="3.483" x2="2.973" y2="-3.483" width="0.0508" layer="39"/>
+<smd name="1" x="-1.95" y="0" dx="1.9" dy="6.8" layer="1"/>
+<smd name="2" x="1.95" y="0" dx="1.9" dy="6.8" layer="1"/>
+<text x="-1.905" y="3.683" size="1.27" layer="25">>NAME</text>
+<text x="-1.905" y="-4.826" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-2.413" y1="-3.3528" x2="-1.463" y2="3.3472" layer="51"/>
+<rectangle x1="1.4478" y1="-3.3528" x2="2.3978" y2="3.3472" layer="51"/>
+<rectangle x1="-0.7" y1="-0.7" x2="0.7" y2="0.7" layer="35"/>
+</package>
+<package name="C2012">
+<description><b>CAPACITOR</b><p>
+chip</description>
+<wire x1="-1.973" y1="0.983" x2="1.973" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="1.973" y1="0.983" x2="1.973" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="1.973" y1="-0.983" x2="-1.973" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="-1.973" y1="-0.983" x2="-1.973" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="-0.381" y1="0.66" x2="0.381" y2="0.66" width="0.1016" layer="51"/>
+<wire x1="-0.356" y1="-0.66" x2="0.381" y2="-0.66" width="0.1016" layer="51"/>
+<smd name="1" x="-0.85" y="0" dx="1.3" dy="1.5" layer="1"/>
+<smd name="2" x="0.85" y="0" dx="1.3" dy="1.5" layer="1"/>
+<text x="-0.889" y="1.016" size="1.27" layer="25">>NAME</text>
+<text x="-0.889" y="-2.286" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-1.0922" y1="-0.7239" x2="-0.3421" y2="0.7262" layer="51"/>
+<rectangle x1="0.3556" y1="-0.7239" x2="1.1057" y2="0.7262" layer="51"/>
+<rectangle x1="-0.1001" y1="-0.4001" x2="0.1001" y2="0.4001" layer="35"/>
+</package>
+<package name="C3216">
+<description><b>CAPACITOR</b><p>
+chip</description>
+<wire x1="-2.473" y1="0.983" x2="2.473" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="2.473" y1="-0.983" x2="-2.473" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="-2.473" y1="-0.983" x2="-2.473" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="2.473" y1="0.983" x2="2.473" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="-0.965" y1="0.787" x2="0.965" y2="0.787" width="0.1016" layer="51"/>
+<wire x1="-0.965" y1="-0.787" x2="0.965" y2="-0.787" width="0.1016" layer="51"/>
+<smd name="1" x="-1.4" y="0" dx="1.6" dy="1.8" layer="1"/>
+<smd name="2" x="1.4" y="0" dx="1.6" dy="1.8" layer="1"/>
+<text x="-1.27" y="1.143" size="1.27" layer="25">>NAME</text>
+<text x="-1.27" y="-2.413" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-1.7018" y1="-0.8509" x2="-0.9517" y2="0.8491" layer="51"/>
+<rectangle x1="0.9517" y1="-0.8491" x2="1.7018" y2="0.8509" layer="51"/>
+<rectangle x1="-0.3" y1="-0.5001" x2="0.3" y2="0.5001" layer="35"/>
+</package>
+<package name="C3225">
+<description><b>CAPACITOR</b><p>
+chip</description>
+<wire x1="-2.473" y1="1.483" x2="2.473" y2="1.483" width="0.0508" layer="39"/>
+<wire x1="2.473" y1="-1.483" x2="-2.473" y2="-1.483" width="0.0508" layer="39"/>
+<wire x1="-2.473" y1="-1.483" x2="-2.473" y2="1.483" width="0.0508" layer="39"/>
+<wire x1="-0.9652" y1="1.2446" x2="0.9652" y2="1.2446" width="0.1016" layer="51"/>
+<wire x1="-0.9652" y1="-1.2446" x2="0.9652" y2="-1.2446" width="0.1016" layer="51"/>
+<wire x1="2.473" y1="1.483" x2="2.473" y2="-1.483" width="0.0508" layer="39"/>
+<smd name="1" x="-1.4" y="0" dx="1.6" dy="2.7" layer="1"/>
+<smd name="2" x="1.4" y="0" dx="1.6" dy="2.7" layer="1"/>
+<text x="-1.397" y="1.651" size="1.27" layer="25">>NAME</text>
+<text x="-1.397" y="-2.921" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-1.7018" y1="-1.2954" x2="-0.9517" y2="1.3045" layer="51"/>
+<rectangle x1="0.9517" y1="-1.3045" x2="1.7018" y2="1.2954" layer="51"/>
+<rectangle x1="-0.1999" y1="-0.5001" x2="0.1999" y2="0.5001" layer="35"/>
+</package>
+<package name="C4532">
+<description><b>CAPACITOR</b><p>
+chip</description>
+<wire x1="-2.973" y1="1.983" x2="2.973" y2="1.983" width="0.0508" layer="39"/>
+<wire x1="2.973" y1="-1.983" x2="-2.973" y2="-1.983" width="0.0508" layer="39"/>
+<wire x1="-2.973" y1="-1.983" x2="-2.973" y2="1.983" width="0.0508" layer="39"/>
+<wire x1="-1.4732" y1="1.6002" x2="1.4732" y2="1.6002" width="0.1016" layer="51"/>
+<wire x1="-1.4478" y1="-1.6002" x2="1.4732" y2="-1.6002" width="0.1016" layer="51"/>
+<wire x1="2.973" y1="1.983" x2="2.973" y2="-1.983" width="0.0508" layer="39"/>
+<smd name="1" x="-1.95" y="0" dx="1.9" dy="3.4" layer="1"/>
+<smd name="2" x="1.95" y="0" dx="1.9" dy="3.4" layer="1"/>
+<text x="-1.905" y="2.032" size="1.27" layer="25">>NAME</text>
+<text x="-1.905" y="-3.175" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-2.3876" y1="-1.651" x2="-1.4376" y2="1.649" layer="51"/>
+<rectangle x1="1.4478" y1="-1.651" x2="2.3978" y2="1.649" layer="51"/>
+<rectangle x1="-0.4001" y1="-0.7" x2="0.4001" y2="0.7" layer="35"/>
+</package>
+<package name="C4564">
+<description><b>CAPACITOR</b><p>
+chip</description>
+<wire x1="-2.973" y1="3.483" x2="2.973" y2="3.483" width="0.0508" layer="39"/>
+<wire x1="2.973" y1="-3.483" x2="-2.973" y2="-3.483" width="0.0508" layer="39"/>
+<wire x1="-2.973" y1="-3.483" x2="-2.973" y2="3.483" width="0.0508" layer="39"/>
+<wire x1="-1.4986" y1="3.2766" x2="1.4732" y2="3.2766" width="0.1016" layer="51"/>
+<wire x1="-1.4732" y1="-3.2766" x2="1.4986" y2="-3.2766" width="0.1016" layer="51"/>
+<wire x1="2.973" y1="3.483" x2="2.973" y2="-3.483" width="0.0508" layer="39"/>
+<smd name="1" x="-1.95" y="0" dx="1.9" dy="6.8" layer="1"/>
+<smd name="2" x="1.95" y="0" dx="1.9" dy="6.8" layer="1"/>
+<text x="-1.905" y="3.683" size="1.27" layer="25">>NAME</text>
+<text x="-1.905" y="-4.826" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-2.413" y1="-3.3528" x2="-1.463" y2="3.3472" layer="51"/>
+<rectangle x1="1.4478" y1="-3.3528" x2="2.3978" y2="3.3472" layer="51"/>
+<rectangle x1="-0.5001" y1="-1" x2="0.5001" y2="1" layer="35"/>
+</package>
+<package name="C025-024X044">
+<description><b>CAPACITOR</b><p>
+grid 2.5 mm, outline 2.4 x 4.4 mm</description>
+<wire x1="-2.159" y1="-0.635" x2="-2.159" y2="0.635" width="0.1524" layer="21"/>
+<wire x1="-2.159" y1="0.635" x2="-1.651" y2="1.143" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-2.159" y1="-0.635" x2="-1.651" y2="-1.143" width="0.1524" layer="21" curve="90"/>
+<wire x1="1.651" y1="1.143" x2="-1.651" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="-0.635" x2="2.159" y2="0.635" width="0.1524" layer="21"/>
+<wire x1="1.651" y1="-1.143" x2="-1.651" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="1.651" y1="1.143" x2="2.159" y2="0.635" width="0.1524" layer="21" curve="-90"/>
+<wire x1="1.651" y1="-1.143" x2="2.159" y2="-0.635" width="0.1524" layer="21" curve="90"/>
+<wire x1="-0.3048" y1="0.762" x2="-0.3048" y2="-0.762" width="0.3048" layer="21"/>
+<wire x1="0.3302" y1="0.762" x2="0.3302" y2="-0.762" width="0.3048" layer="21"/>
+<wire x1="1.27" y1="0" x2="0.3302" y2="0" width="0.1524" layer="51"/>
+<wire x1="-1.27" y1="0" x2="-0.3048" y2="0" width="0.1524" layer="51"/>
+<pad name="1" x="-1.27" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="1.27" y="0" drill="0.8128" shape="octagon"/>
+<text x="-1.778" y="1.397" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-1.778" y="-2.667" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C025-025X050">
+<description><b>CAPACITOR</b><p>
+grid 2.5 mm, outline 2.5 x 5 mm</description>
+<wire x1="-2.159" y1="1.27" x2="2.159" y2="1.27" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="-1.27" x2="-2.159" y2="-1.27" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="1.016" x2="2.413" y2="-1.016" width="0.1524" layer="21"/>
+<wire x1="-2.413" y1="1.016" x2="-2.413" y2="-1.016" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="1.27" x2="2.413" y2="1.016" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-2.413" y1="1.016" x2="-2.159" y2="1.27" width="0.1524" layer="21" curve="-90"/>
+<wire x1="2.159" y1="-1.27" x2="2.413" y2="-1.016" width="0.1524" layer="21" curve="90"/>
+<wire x1="-2.413" y1="-1.016" x2="-2.159" y2="-1.27" width="0.1524" layer="21" curve="90"/>
+<wire x1="0.762" y1="0" x2="0.381" y2="0" width="0.1524" layer="51"/>
+<wire x1="0.381" y1="0" x2="0.254" y2="0" width="0.1524" layer="21"/>
+<wire x1="0.254" y1="0" x2="0.254" y2="0.762" width="0.254" layer="21"/>
+<wire x1="0.254" y1="0" x2="0.254" y2="-0.762" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0.762" x2="-0.254" y2="0" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0" x2="-0.254" y2="-0.762" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0" x2="-0.381" y2="0" width="0.1524" layer="21"/>
+<wire x1="-0.381" y1="0" x2="-0.762" y2="0" width="0.1524" layer="51"/>
+<pad name="1" x="-1.27" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="1.27" y="0" drill="0.8128" shape="octagon"/>
+<text x="-2.286" y="1.524" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-2.286" y="-2.794" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C025-030X050">
+<description><b>CAPACITOR</b><p>
+grid 2.5 mm, outline 3 x 5 mm</description>
+<wire x1="-2.159" y1="1.524" x2="2.159" y2="1.524" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="-1.524" x2="-2.159" y2="-1.524" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="1.27" x2="2.413" y2="-1.27" width="0.1524" layer="21"/>
+<wire x1="-2.413" y1="1.27" x2="-2.413" y2="-1.27" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="1.524" x2="2.413" y2="1.27" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-2.413" y1="1.27" x2="-2.159" y2="1.524" width="0.1524" layer="21" curve="-90"/>
+<wire x1="2.159" y1="-1.524" x2="2.413" y2="-1.27" width="0.1524" layer="21" curve="90"/>
+<wire x1="-2.413" y1="-1.27" x2="-2.159" y2="-1.524" width="0.1524" layer="21" curve="90"/>
+<wire x1="0.762" y1="0" x2="0.381" y2="0" width="0.1524" layer="51"/>
+<wire x1="0.381" y1="0" x2="0.254" y2="0" width="0.1524" layer="21"/>
+<wire x1="0.254" y1="0" x2="0.254" y2="0.762" width="0.254" layer="21"/>
+<wire x1="0.254" y1="0" x2="0.254" y2="-0.762" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0.762" x2="-0.254" y2="0" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0" x2="-0.254" y2="-0.762" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0" x2="-0.381" y2="0" width="0.1524" layer="21"/>
+<wire x1="-0.381" y1="0" x2="-0.762" y2="0" width="0.1524" layer="51"/>
+<pad name="1" x="-1.27" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="1.27" y="0" drill="0.8128" shape="octagon"/>
+<text x="-2.286" y="1.905" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-2.286" y="-3.048" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C025-040X050">
+<description><b>CAPACITOR</b><p>
+grid 2.5 mm, outline 4 x 5 mm</description>
+<wire x1="-2.159" y1="1.905" x2="2.159" y2="1.905" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="-1.905" x2="-2.159" y2="-1.905" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="1.651" x2="2.413" y2="-1.651" width="0.1524" layer="21"/>
+<wire x1="-2.413" y1="1.651" x2="-2.413" y2="-1.651" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="1.905" x2="2.413" y2="1.651" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-2.413" y1="1.651" x2="-2.159" y2="1.905" width="0.1524" layer="21" curve="-90"/>
+<wire x1="2.159" y1="-1.905" x2="2.413" y2="-1.651" width="0.1524" layer="21" curve="90"/>
+<wire x1="-2.413" y1="-1.651" x2="-2.159" y2="-1.905" width="0.1524" layer="21" curve="90"/>
+<wire x1="0.762" y1="0" x2="0.381" y2="0" width="0.1524" layer="51"/>
+<wire x1="0.381" y1="0" x2="0.254" y2="0" width="0.1524" layer="21"/>
+<wire x1="0.254" y1="0" x2="0.254" y2="0.762" width="0.254" layer="21"/>
+<wire x1="0.254" y1="0" x2="0.254" y2="-0.762" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0.762" x2="-0.254" y2="0" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0" x2="-0.254" y2="-0.762" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0" x2="-0.381" y2="0" width="0.1524" layer="21"/>
+<wire x1="-0.381" y1="0" x2="-0.762" y2="0" width="0.1524" layer="51"/>
+<pad name="1" x="-1.27" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="1.27" y="0" drill="0.8128" shape="octagon"/>
+<text x="-2.286" y="2.159" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-2.286" y="-3.429" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C025-050X050">
+<description><b>CAPACITOR</b><p>
+grid 2.5 mm, outline 5 x 5 mm</description>
+<wire x1="-2.159" y1="2.286" x2="2.159" y2="2.286" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="-2.286" x2="-2.159" y2="-2.286" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="2.032" x2="2.413" y2="-2.032" width="0.1524" layer="21"/>
+<wire x1="-2.413" y1="2.032" x2="-2.413" y2="-2.032" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="2.286" x2="2.413" y2="2.032" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-2.413" y1="2.032" x2="-2.159" y2="2.286" width="0.1524" layer="21" curve="-90"/>
+<wire x1="2.159" y1="-2.286" x2="2.413" y2="-2.032" width="0.1524" layer="21" curve="90"/>
+<wire x1="-2.413" y1="-2.032" x2="-2.159" y2="-2.286" width="0.1524" layer="21" curve="90"/>
+<wire x1="0.762" y1="0" x2="0.381" y2="0" width="0.1524" layer="51"/>
+<wire x1="0.381" y1="0" x2="0.254" y2="0" width="0.1524" layer="21"/>
+<wire x1="0.254" y1="0" x2="0.254" y2="0.762" width="0.254" layer="21"/>
+<wire x1="0.254" y1="0" x2="0.254" y2="-0.762" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0.762" x2="-0.254" y2="0" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0" x2="-0.254" y2="-0.762" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0" x2="-0.381" y2="0" width="0.1524" layer="21"/>
+<wire x1="-0.381" y1="0" x2="-0.762" y2="0" width="0.1524" layer="51"/>
+<pad name="1" x="-1.27" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="1.27" y="0" drill="0.8128" shape="octagon"/>
+<text x="-2.286" y="2.54" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-2.286" y="-3.81" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C025-060X050">
+<description><b>CAPACITOR</b><p>
+grid 2.5 mm, outline 6 x 5 mm</description>
+<wire x1="-2.159" y1="2.794" x2="2.159" y2="2.794" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="-2.794" x2="-2.159" y2="-2.794" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="2.54" x2="2.413" y2="-2.54" width="0.1524" layer="21"/>
+<wire x1="-2.413" y1="2.54" x2="-2.413" y2="-2.54" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="2.794" x2="2.413" y2="2.54" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-2.413" y1="2.54" x2="-2.159" y2="2.794" width="0.1524" layer="21" curve="-90"/>
+<wire x1="2.159" y1="-2.794" x2="2.413" y2="-2.54" width="0.1524" layer="21" curve="90"/>
+<wire x1="-2.413" y1="-2.54" x2="-2.159" y2="-2.794" width="0.1524" layer="21" curve="90"/>
+<wire x1="0.762" y1="0" x2="0.381" y2="0" width="0.1524" layer="51"/>
+<wire x1="0.381" y1="0" x2="0.254" y2="0" width="0.1524" layer="21"/>
+<wire x1="0.254" y1="0" x2="0.254" y2="0.762" width="0.254" layer="21"/>
+<wire x1="0.254" y1="0" x2="0.254" y2="-0.762" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0.762" x2="-0.254" y2="0" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0" x2="-0.254" y2="-0.762" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0" x2="-0.381" y2="0" width="0.1524" layer="21"/>
+<wire x1="-0.381" y1="0" x2="-0.762" y2="0" width="0.1524" layer="51"/>
+<pad name="1" x="-1.27" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="1.27" y="0" drill="0.8128" shape="octagon"/>
+<text x="-2.286" y="3.048" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-2.032" y="-2.413" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C025_050-024X070">
+<description><b>CAPACITOR</b><p>
+grid 2.5 mm + 5 mm, outline 2.4 x 7 mm</description>
+<wire x1="-2.159" y1="-0.635" x2="-2.159" y2="0.635" width="0.1524" layer="51"/>
+<wire x1="-2.159" y1="0.635" x2="-1.651" y2="1.143" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-2.159" y1="-0.635" x2="-1.651" y2="-1.143" width="0.1524" layer="21" curve="90"/>
+<wire x1="1.651" y1="1.143" x2="-1.651" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="-0.635" x2="2.159" y2="0.635" width="0.1524" layer="51"/>
+<wire x1="1.651" y1="-1.143" x2="-1.651" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="1.651" y1="1.143" x2="2.159" y2="0.635" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-4.191" y1="-1.143" x2="-3.9624" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="-4.191" y1="1.143" x2="-3.9624" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="-4.699" y1="-0.635" x2="-4.191" y2="-1.143" width="0.1524" layer="21" curve="90"/>
+<wire x1="1.651" y1="-1.143" x2="2.159" y2="-0.635" width="0.1524" layer="21" curve="90"/>
+<wire x1="-4.699" y1="0.635" x2="-4.191" y2="1.143" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-4.699" y1="-0.635" x2="-4.699" y2="0.635" width="0.1524" layer="21"/>
+<wire x1="-3.429" y1="1.143" x2="-2.5654" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="-3.429" y1="-1.143" x2="-2.5654" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="-0.3048" y1="0.762" x2="-0.3048" y2="-0.762" width="0.3048" layer="21"/>
+<wire x1="0.3302" y1="0.762" x2="0.3302" y2="-0.762" width="0.3048" layer="21"/>
+<wire x1="1.27" y1="0" x2="0.3302" y2="0" width="0.1524" layer="51"/>
+<wire x1="-1.27" y1="0" x2="-0.3048" y2="0" width="0.1524" layer="51"/>
+<pad name="1" x="-3.81" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="-1.27" y="0" drill="0.8128" shape="octagon"/>
+<pad name="3" x="1.27" y="0" drill="0.8128" shape="octagon"/>
+<text x="-3.81" y="1.397" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-3.81" y="-2.667" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C025_050-025X075">
+<description><b>CAPACITOR</b><p>
+grid 2.5 + 5 mm, outline 2.5 x 7.5 mm</description>
+<wire x1="-2.159" y1="1.27" x2="2.159" y2="1.27" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="-1.27" x2="-2.159" y2="-1.27" width="0.1524" layer="21"/>
+<wire x1="-2.413" y1="1.016" x2="-2.413" y2="-1.016" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="1.27" x2="2.413" y2="1.016" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-2.413" y1="1.016" x2="-2.159" y2="1.27" width="0.1524" layer="21" curve="-90"/>
+<wire x1="2.159" y1="-1.27" x2="2.413" y2="-1.016" width="0.1524" layer="21" curve="90"/>
+<wire x1="-2.413" y1="-1.016" x2="-2.159" y2="-1.27" width="0.1524" layer="21" curve="90"/>
+<wire x1="0.381" y1="0" x2="0.254" y2="0" width="0.1524" layer="21"/>
+<wire x1="0.254" y1="0" x2="0.254" y2="0.762" width="0.254" layer="21"/>
+<wire x1="0.254" y1="0" x2="0.254" y2="-0.762" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0.762" x2="-0.254" y2="0" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0" x2="-0.254" y2="-0.762" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0" x2="-0.381" y2="0" width="0.1524" layer="21"/>
+<wire x1="-0.381" y1="0" x2="-0.762" y2="0" width="0.1524" layer="51"/>
+<wire x1="4.953" y1="1.016" x2="4.953" y2="-1.016" width="0.1524" layer="21"/>
+<wire x1="4.699" y1="1.27" x2="4.953" y2="1.016" width="0.1524" layer="21" curve="-90"/>
+<wire x1="4.699" y1="-1.27" x2="4.953" y2="-1.016" width="0.1524" layer="21" curve="90"/>
+<wire x1="2.794" y1="1.27" x2="4.699" y2="1.27" width="0.1524" layer="21"/>
+<wire x1="4.699" y1="-1.27" x2="2.794" y2="-1.27" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="1.016" x2="2.413" y2="0.762" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="-0.762" x2="2.413" y2="-1.016" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="0.254" x2="2.413" y2="-0.254" width="0.1524" layer="21"/>
+<wire x1="1.778" y1="0" x2="2.286" y2="0" width="0.1524" layer="51"/>
+<wire x1="2.286" y1="0" x2="2.794" y2="0" width="0.1524" layer="21"/>
+<wire x1="2.794" y1="0" x2="3.302" y2="0" width="0.1524" layer="51"/>
+<wire x1="0.762" y1="0" x2="0.381" y2="0" width="0.1524" layer="51"/>
+<pad name="1" x="-1.27" y="0" drill="0.8128" shape="octagon"/>
+<pad name="3" x="3.81" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="1.27" y="0" drill="0.8128" shape="octagon"/>
+<text x="-2.159" y="1.651" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-2.159" y="-2.794" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C025_050-035X075">
+<description><b>CAPACITOR</b><p>
+grid 2.5 + 5 mm, outline 3.5 x 7.5 mm</description>
+<wire x1="-2.159" y1="1.778" x2="2.159" y2="1.778" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="-1.778" x2="-2.159" y2="-1.778" width="0.1524" layer="21"/>
+<wire x1="-2.413" y1="1.524" x2="-2.413" y2="-1.524" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="1.778" x2="2.413" y2="1.524" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-2.413" y1="1.524" x2="-2.159" y2="1.778" width="0.1524" layer="21" curve="-90"/>
+<wire x1="2.159" y1="-1.778" x2="2.413" y2="-1.524" width="0.1524" layer="21" curve="90"/>
+<wire x1="-2.413" y1="-1.524" x2="-2.159" y2="-1.778" width="0.1524" layer="21" curve="90"/>
+<wire x1="0.381" y1="0" x2="0.254" y2="0" width="0.1524" layer="21"/>
+<wire x1="0.254" y1="0" x2="0.254" y2="0.762" width="0.254" layer="21"/>
+<wire x1="0.254" y1="0" x2="0.254" y2="-0.762" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0.762" x2="-0.254" y2="0" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0" x2="-0.254" y2="-0.762" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0" x2="-0.381" y2="0" width="0.1524" layer="21"/>
+<wire x1="-0.381" y1="0" x2="-0.762" y2="0" width="0.1524" layer="51"/>
+<wire x1="4.953" y1="1.524" x2="4.953" y2="-1.524" width="0.1524" layer="21"/>
+<wire x1="4.699" y1="1.778" x2="4.953" y2="1.524" width="0.1524" layer="21" curve="-90"/>
+<wire x1="4.699" y1="-1.778" x2="4.953" y2="-1.524" width="0.1524" layer="21" curve="90"/>
+<wire x1="2.794" y1="1.778" x2="4.699" y2="1.778" width="0.1524" layer="21"/>
+<wire x1="4.699" y1="-1.778" x2="2.794" y2="-1.778" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="1.524" x2="2.413" y2="1.016" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="-1.016" x2="2.413" y2="-1.524" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="0.508" x2="2.413" y2="-0.508" width="0.1524" layer="21"/>
+<wire x1="0.381" y1="0" x2="0.762" y2="0" width="0.1524" layer="51"/>
+<wire x1="2.286" y1="0" x2="2.794" y2="0" width="0.1524" layer="21"/>
+<wire x1="2.794" y1="0" x2="3.302" y2="0" width="0.1524" layer="51"/>
+<wire x1="2.286" y1="0" x2="1.778" y2="0" width="0.1524" layer="51"/>
+<pad name="1" x="-1.27" y="0" drill="0.8128" shape="octagon"/>
+<pad name="3" x="3.81" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="1.27" y="0" drill="0.8128" shape="octagon"/>
+<text x="-2.286" y="2.159" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-2.286" y="-3.302" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C025_050-045X075">
+<description><b>CAPACITOR</b><p>
+grid 2.5 + 5 mm, outline 4.5 x 7.5 mm</description>
+<wire x1="-2.159" y1="2.286" x2="2.159" y2="2.286" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="-2.286" x2="-2.159" y2="-2.286" width="0.1524" layer="21"/>
+<wire x1="-2.413" y1="2.032" x2="-2.413" y2="-2.032" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="2.286" x2="2.413" y2="2.032" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-2.413" y1="2.032" x2="-2.159" y2="2.286" width="0.1524" layer="21" curve="-90"/>
+<wire x1="2.159" y1="-2.286" x2="2.413" y2="-2.032" width="0.1524" layer="21" curve="90"/>
+<wire x1="-2.413" y1="-2.032" x2="-2.159" y2="-2.286" width="0.1524" layer="21" curve="90"/>
+<wire x1="0.381" y1="0" x2="0.254" y2="0" width="0.1524" layer="21"/>
+<wire x1="0.254" y1="0" x2="0.254" y2="0.762" width="0.254" layer="21"/>
+<wire x1="0.254" y1="0" x2="0.254" y2="-0.762" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0.762" x2="-0.254" y2="0" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0" x2="-0.254" y2="-0.762" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0" x2="-0.381" y2="0" width="0.1524" layer="21"/>
+<wire x1="-0.381" y1="0" x2="-0.762" y2="0" width="0.1524" layer="51"/>
+<wire x1="4.953" y1="2.032" x2="4.953" y2="-2.032" width="0.1524" layer="21"/>
+<wire x1="4.699" y1="2.286" x2="4.953" y2="2.032" width="0.1524" layer="21" curve="-90"/>
+<wire x1="4.699" y1="-2.286" x2="4.953" y2="-2.032" width="0.1524" layer="21" curve="90"/>
+<wire x1="2.794" y1="2.286" x2="4.699" y2="2.286" width="0.1524" layer="21"/>
+<wire x1="4.699" y1="-2.286" x2="2.794" y2="-2.286" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="2.032" x2="2.413" y2="1.397" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="-1.397" x2="2.413" y2="-2.032" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="0.762" x2="2.413" y2="-0.762" width="0.1524" layer="21"/>
+<wire x1="2.286" y1="0" x2="2.794" y2="0" width="0.1524" layer="21"/>
+<wire x1="2.794" y1="0" x2="3.302" y2="0" width="0.1524" layer="51"/>
+<wire x1="0.381" y1="0" x2="0.762" y2="0" width="0.1524" layer="51"/>
+<wire x1="2.286" y1="0" x2="1.778" y2="0" width="0.1524" layer="51"/>
+<pad name="1" x="-1.27" y="0" drill="0.8128" shape="octagon"/>
+<pad name="3" x="3.81" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="1.27" y="0" drill="0.8128" shape="octagon"/>
+<text x="-2.286" y="2.667" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-2.286" y="-3.81" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C025_050-055X075">
+<description><b>CAPACITOR</b><p>
+grid 2.5 + 5 mm, outline 5.5 x 7.5 mm</description>
+<wire x1="-2.159" y1="2.794" x2="2.159" y2="2.794" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="-2.794" x2="-2.159" y2="-2.794" width="0.1524" layer="21"/>
+<wire x1="-2.413" y1="2.54" x2="-2.413" y2="-2.54" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="2.794" x2="2.413" y2="2.54" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-2.413" y1="2.54" x2="-2.159" y2="2.794" width="0.1524" layer="21" curve="-90"/>
+<wire x1="2.159" y1="-2.794" x2="2.413" y2="-2.54" width="0.1524" layer="21" curve="90"/>
+<wire x1="-2.413" y1="-2.54" x2="-2.159" y2="-2.794" width="0.1524" layer="21" curve="90"/>
+<wire x1="0.381" y1="0" x2="0.254" y2="0" width="0.1524" layer="21"/>
+<wire x1="0.254" y1="0" x2="0.254" y2="0.762" width="0.254" layer="21"/>
+<wire x1="0.254" y1="0" x2="0.254" y2="-0.762" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0.762" x2="-0.254" y2="0" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0" x2="-0.254" y2="-0.762" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0" x2="-0.381" y2="0" width="0.1524" layer="21"/>
+<wire x1="-0.381" y1="0" x2="-0.762" y2="0" width="0.1524" layer="51"/>
+<wire x1="4.953" y1="2.54" x2="4.953" y2="-2.54" width="0.1524" layer="21"/>
+<wire x1="4.699" y1="2.794" x2="4.953" y2="2.54" width="0.1524" layer="21" curve="-90"/>
+<wire x1="4.699" y1="-2.794" x2="4.953" y2="-2.54" width="0.1524" layer="21" curve="90"/>
+<wire x1="2.794" y1="2.794" x2="4.699" y2="2.794" width="0.1524" layer="21"/>
+<wire x1="4.699" y1="-2.794" x2="2.794" y2="-2.794" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="2.54" x2="2.413" y2="2.032" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="-2.032" x2="2.413" y2="-2.54" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="0.762" x2="2.413" y2="-0.762" width="0.1524" layer="21"/>
+<wire x1="1.778" y1="0" x2="2.286" y2="0" width="0.1524" layer="51"/>
+<wire x1="2.286" y1="0" x2="2.794" y2="0" width="0.1524" layer="21"/>
+<wire x1="2.794" y1="0" x2="3.302" y2="0" width="0.1524" layer="51"/>
+<wire x1="0.381" y1="0" x2="0.762" y2="0" width="0.1524" layer="51"/>
+<pad name="1" x="-1.27" y="0" drill="0.8128" shape="octagon"/>
+<pad name="3" x="3.81" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="1.27" y="0" drill="0.8128" shape="octagon"/>
+<text x="-2.286" y="3.175" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-2.032" y="-2.286" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C050-024X044">
+<description><b>CAPACITOR</b><p>
+grid 5 mm, outline 2.4 x 4.4 mm</description>
+<wire x1="-2.159" y1="-0.635" x2="-2.159" y2="0.635" width="0.1524" layer="51"/>
+<wire x1="-2.159" y1="0.635" x2="-1.651" y2="1.143" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-2.159" y1="-0.635" x2="-1.651" y2="-1.143" width="0.1524" layer="21" curve="90"/>
+<wire x1="1.651" y1="1.143" x2="-1.651" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="-0.635" x2="2.159" y2="0.635" width="0.1524" layer="51"/>
+<wire x1="1.651" y1="-1.143" x2="-1.651" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="1.651" y1="1.143" x2="2.159" y2="0.635" width="0.1524" layer="21" curve="-90"/>
+<wire x1="1.651" y1="-1.143" x2="2.159" y2="-0.635" width="0.1524" layer="21" curve="90"/>
+<wire x1="-0.3048" y1="0.762" x2="-0.3048" y2="0" width="0.3048" layer="21"/>
+<wire x1="-0.3048" y1="0" x2="-0.3048" y2="-0.762" width="0.3048" layer="21"/>
+<wire x1="0.3302" y1="0.762" x2="0.3302" y2="0" width="0.3048" layer="21"/>
+<wire x1="0.3302" y1="0" x2="0.3302" y2="-0.762" width="0.3048" layer="21"/>
+<wire x1="1.27" y1="0" x2="0.3302" y2="0" width="0.1524" layer="21"/>
+<wire x1="-1.27" y1="0" x2="-0.3048" y2="0" width="0.1524" layer="21"/>
+<pad name="1" x="-2.54" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="2.54" y="0" drill="0.8128" shape="octagon"/>
+<text x="-2.159" y="1.397" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-2.159" y="-2.667" size="1.27" layer="27" ratio="10">>VALUE</text>
+<rectangle x1="2.159" y1="-0.381" x2="2.54" y2="0.381" layer="51"/>
+<rectangle x1="-2.54" y1="-0.381" x2="-2.159" y2="0.381" layer="51"/>
+</package>
+<package name="C050-025X075">
+<description><b>CAPACITOR</b><p>
+grid 5 mm, outline 2.5 x 7.5 mm</description>
+<wire x1="-0.3048" y1="0.635" x2="-0.3048" y2="0" width="0.3048" layer="21"/>
+<wire x1="-0.3048" y1="0" x2="-0.3048" y2="-0.635" width="0.3048" layer="21"/>
+<wire x1="-0.3048" y1="0" x2="-1.524" y2="0" width="0.1524" layer="21"/>
+<wire x1="0.3302" y1="0.635" x2="0.3302" y2="0" width="0.3048" layer="21"/>
+<wire x1="0.3302" y1="0" x2="0.3302" y2="-0.635" width="0.3048" layer="21"/>
+<wire x1="0.3302" y1="0" x2="1.524" y2="0" width="0.1524" layer="21"/>
+<wire x1="-3.683" y1="1.016" x2="-3.683" y2="-1.016" width="0.1524" layer="21"/>
+<wire x1="-3.429" y1="-1.27" x2="3.429" y2="-1.27" width="0.1524" layer="21"/>
+<wire x1="3.683" y1="-1.016" x2="3.683" y2="1.016" width="0.1524" layer="21"/>
+<wire x1="3.429" y1="1.27" x2="-3.429" y2="1.27" width="0.1524" layer="21"/>
+<wire x1="3.429" y1="1.27" x2="3.683" y2="1.016" width="0.1524" layer="21" curve="-90"/>
+<wire x1="3.429" y1="-1.27" x2="3.683" y2="-1.016" width="0.1524" layer="21" curve="90"/>
+<wire x1="-3.683" y1="-1.016" x2="-3.429" y2="-1.27" width="0.1524" layer="21" curve="90"/>
+<wire x1="-3.683" y1="1.016" x2="-3.429" y2="1.27" width="0.1524" layer="21" curve="-90"/>
+<pad name="1" x="-2.54" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="2.54" y="0" drill="0.8128" shape="octagon"/>
+<text x="-3.429" y="1.651" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-3.429" y="-2.794" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C050-045X075">
+<description><b>CAPACITOR</b><p>
+grid 5 mm, outline 4.5 x 7.5 mm</description>
+<wire x1="-0.3048" y1="0.635" x2="-0.3048" y2="0" width="0.3048" layer="21"/>
+<wire x1="-0.3048" y1="0" x2="-0.3048" y2="-0.635" width="0.3048" layer="21"/>
+<wire x1="-0.3048" y1="0" x2="-1.524" y2="0" width="0.1524" layer="21"/>
+<wire x1="0.3302" y1="0.635" x2="0.3302" y2="0" width="0.3048" layer="21"/>
+<wire x1="0.3302" y1="0" x2="0.3302" y2="-0.635" width="0.3048" layer="21"/>
+<wire x1="0.3302" y1="0" x2="1.524" y2="0" width="0.1524" layer="21"/>
+<wire x1="-3.683" y1="2.032" x2="-3.683" y2="-2.032" width="0.1524" layer="21"/>
+<wire x1="-3.429" y1="-2.286" x2="3.429" y2="-2.286" width="0.1524" layer="21"/>
+<wire x1="3.683" y1="-2.032" x2="3.683" y2="2.032" width="0.1524" layer="21"/>
+<wire x1="3.429" y1="2.286" x2="-3.429" y2="2.286" width="0.1524" layer="21"/>
+<wire x1="3.429" y1="2.286" x2="3.683" y2="2.032" width="0.1524" layer="21" curve="-90"/>
+<wire x1="3.429" y1="-2.286" x2="3.683" y2="-2.032" width="0.1524" layer="21" curve="90"/>
+<wire x1="-3.683" y1="-2.032" x2="-3.429" y2="-2.286" width="0.1524" layer="21" curve="90"/>
+<wire x1="-3.683" y1="2.032" x2="-3.429" y2="2.286" width="0.1524" layer="21" curve="-90"/>
+<pad name="1" x="-2.54" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="2.54" y="0" drill="0.8128" shape="octagon"/>
+<text x="-3.556" y="2.667" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-3.556" y="-3.81" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C050-030X075">
+<description><b>CAPACITOR</b><p>
+grid 5 mm, outline 3 x 7.5 mm</description>
+<wire x1="-0.3048" y1="0.635" x2="-0.3048" y2="0" width="0.3048" layer="21"/>
+<wire x1="-0.3048" y1="0" x2="-0.3048" y2="-0.635" width="0.3048" layer="21"/>
+<wire x1="-0.3048" y1="0" x2="-1.524" y2="0" width="0.1524" layer="21"/>
+<wire x1="0.3302" y1="0.635" x2="0.3302" y2="0" width="0.3048" layer="21"/>
+<wire x1="0.3302" y1="0" x2="0.3302" y2="-0.635" width="0.3048" layer="21"/>
+<wire x1="0.3302" y1="0" x2="1.524" y2="0" width="0.1524" layer="21"/>
+<wire x1="-3.683" y1="1.27" x2="-3.683" y2="-1.27" width="0.1524" layer="21"/>
+<wire x1="-3.429" y1="-1.524" x2="3.429" y2="-1.524" width="0.1524" layer="21"/>
+<wire x1="3.683" y1="-1.27" x2="3.683" y2="1.27" width="0.1524" layer="21"/>
+<wire x1="3.429" y1="1.524" x2="-3.429" y2="1.524" width="0.1524" layer="21"/>
+<wire x1="3.429" y1="1.524" x2="3.683" y2="1.27" width="0.1524" layer="21" curve="-90"/>
+<wire x1="3.429" y1="-1.524" x2="3.683" y2="-1.27" width="0.1524" layer="21" curve="90"/>
+<wire x1="-3.683" y1="-1.27" x2="-3.429" y2="-1.524" width="0.1524" layer="21" curve="90"/>
+<wire x1="-3.683" y1="1.27" x2="-3.429" y2="1.524" width="0.1524" layer="21" curve="-90"/>
+<pad name="1" x="-2.54" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="2.54" y="0" drill="0.8128" shape="octagon"/>
+<text x="-3.556" y="1.905" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-3.556" y="-3.048" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C050-050X075">
+<description><b>CAPACITOR</b><p>
+grid 5 mm, outline 5 x 7.5 mm</description>
+<wire x1="-0.3048" y1="0.635" x2="-0.3048" y2="0" width="0.3048" layer="21"/>
+<wire x1="-0.3048" y1="0" x2="-0.3048" y2="-0.635" width="0.3048" layer="21"/>
+<wire x1="-0.3048" y1="0" x2="-1.524" y2="0" width="0.1524" layer="21"/>
+<wire x1="0.3302" y1="0.635" x2="0.3302" y2="0" width="0.3048" layer="21"/>
+<wire x1="0.3302" y1="0" x2="0.3302" y2="-0.635" width="0.3048" layer="21"/>
+<wire x1="0.3302" y1="0" x2="1.524" y2="0" width="0.1524" layer="21"/>
+<wire x1="-3.683" y1="2.286" x2="-3.683" y2="-2.286" width="0.1524" layer="21"/>
+<wire x1="-3.429" y1="-2.54" x2="3.429" y2="-2.54" width="0.1524" layer="21"/>
+<wire x1="3.683" y1="-2.286" x2="3.683" y2="2.286" width="0.1524" layer="21"/>
+<wire x1="3.429" y1="2.54" x2="-3.429" y2="2.54" width="0.1524" layer="21"/>
+<wire x1="3.429" y1="2.54" x2="3.683" y2="2.286" width="0.1524" layer="21" curve="-90"/>
+<wire x1="3.429" y1="-2.54" x2="3.683" y2="-2.286" width="0.1524" layer="21" curve="90"/>
+<wire x1="-3.683" y1="-2.286" x2="-3.429" y2="-2.54" width="0.1524" layer="21" curve="90"/>
+<wire x1="-3.683" y1="2.286" x2="-3.429" y2="2.54" width="0.1524" layer="21" curve="-90"/>
+<pad name="1" x="-2.54" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="2.54" y="0" drill="0.8128" shape="octagon"/>
+<text x="-3.429" y="2.921" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-3.175" y="-2.159" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C050-055X075">
+<description><b>CAPACITOR</b><p>
+grid 5 mm, outline 5.5 x 7.5 mm</description>
+<wire x1="-0.3048" y1="0.635" x2="-0.3048" y2="0" width="0.3048" layer="21"/>
+<wire x1="-0.3048" y1="0" x2="-0.3048" y2="-0.635" width="0.3048" layer="21"/>
+<wire x1="-0.3048" y1="0" x2="-1.524" y2="0" width="0.1524" layer="21"/>
+<wire x1="0.3302" y1="0.635" x2="0.3302" y2="0" width="0.3048" layer="21"/>
+<wire x1="0.3302" y1="0" x2="0.3302" y2="-0.635" width="0.3048" layer="21"/>
+<wire x1="0.3302" y1="0" x2="1.524" y2="0" width="0.1524" layer="21"/>
+<wire x1="-3.683" y1="2.54" x2="-3.683" y2="-2.54" width="0.1524" layer="21"/>
+<wire x1="-3.429" y1="-2.794" x2="3.429" y2="-2.794" width="0.1524" layer="21"/>
+<wire x1="3.683" y1="-2.54" x2="3.683" y2="2.54" width="0.1524" layer="21"/>
+<wire x1="3.429" y1="2.794" x2="-3.429" y2="2.794" width="0.1524" layer="21"/>
+<wire x1="3.429" y1="2.794" x2="3.683" y2="2.54" width="0.1524" layer="21" curve="-90"/>
+<wire x1="3.429" y1="-2.794" x2="3.683" y2="-2.54" width="0.1524" layer="21" curve="90"/>
+<wire x1="-3.683" y1="-2.54" x2="-3.429" y2="-2.794" width="0.1524" layer="21" curve="90"/>
+<wire x1="-3.683" y1="2.54" x2="-3.429" y2="2.794" width="0.1524" layer="21" curve="-90"/>
+<pad name="1" x="-2.54" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="2.54" y="0" drill="0.8128" shape="octagon"/>
+<text x="-3.429" y="3.175" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-3.302" y="-2.286" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C050-075X075">
+<description><b>CAPACITOR</b><p>
+grid 5 mm, outline 7.5 x 7.5 mm</description>
+<wire x1="-1.524" y1="0" x2="-0.4572" y2="0" width="0.1524" layer="21"/>
+<wire x1="-0.4572" y1="0" x2="-0.4572" y2="0.762" width="0.4064" layer="21"/>
+<wire x1="-0.4572" y1="0" x2="-0.4572" y2="-0.762" width="0.4064" layer="21"/>
+<wire x1="0.4318" y1="0.762" x2="0.4318" y2="0" width="0.4064" layer="21"/>
+<wire x1="0.4318" y1="0" x2="1.524" y2="0" width="0.1524" layer="21"/>
+<wire x1="0.4318" y1="0" x2="0.4318" y2="-0.762" width="0.4064" layer="21"/>
+<wire x1="-3.683" y1="3.429" x2="-3.683" y2="-3.429" width="0.1524" layer="21"/>
+<wire x1="-3.429" y1="-3.683" x2="3.429" y2="-3.683" width="0.1524" layer="21"/>
+<wire x1="3.683" y1="-3.429" x2="3.683" y2="3.429" width="0.1524" layer="21"/>
+<wire x1="3.429" y1="3.683" x2="-3.429" y2="3.683" width="0.1524" layer="21"/>
+<wire x1="3.429" y1="3.683" x2="3.683" y2="3.429" width="0.1524" layer="21" curve="-90"/>
+<wire x1="3.429" y1="-3.683" x2="3.683" y2="-3.429" width="0.1524" layer="21" curve="90"/>
+<wire x1="-3.683" y1="-3.429" x2="-3.429" y2="-3.683" width="0.1524" layer="21" curve="90"/>
+<wire x1="-3.683" y1="3.429" x2="-3.429" y2="3.683" width="0.1524" layer="21" curve="-90"/>
+<pad name="1" x="-2.54" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="2.54" y="0" drill="0.8128" shape="octagon"/>
+<text x="-3.429" y="4.064" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-3.175" y="-2.921" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C050H075X075">
+<description><b>CAPACITOR</b><p>
+Horizontal, grid 5 mm, outline 7.5 x 7.5 mm</description>
+<wire x1="-3.683" y1="7.112" x2="-3.683" y2="0.508" width="0.1524" layer="21"/>
+<wire x1="-3.683" y1="0.508" x2="-3.302" y2="0.508" width="0.1524" layer="21"/>
+<wire x1="-3.302" y1="0.508" x2="-1.778" y2="0.508" width="0.1524" layer="51"/>
+<wire x1="-1.778" y1="0.508" x2="1.778" y2="0.508" width="0.1524" layer="21"/>
+<wire x1="1.778" y1="0.508" x2="3.302" y2="0.508" width="0.1524" layer="51"/>
+<wire x1="3.302" y1="0.508" x2="3.683" y2="0.508" width="0.1524" layer="21"/>
+<wire x1="3.683" y1="0.508" x2="3.683" y2="7.112" width="0.1524" layer="21"/>
+<wire x1="3.175" y1="7.62" x2="-3.175" y2="7.62" width="0.1524" layer="21"/>
+<wire x1="-0.3048" y1="2.413" x2="-0.3048" y2="1.778" width="0.3048" layer="21"/>
+<wire x1="-0.3048" y1="1.778" x2="-0.3048" y2="1.143" width="0.3048" layer="21"/>
+<wire x1="-0.3048" y1="1.778" x2="-1.651" y2="1.778" width="0.1524" layer="21"/>
+<wire x1="0.3302" y1="2.413" x2="0.3302" y2="1.778" width="0.3048" layer="21"/>
+<wire x1="0.3302" y1="1.778" x2="0.3302" y2="1.143" width="0.3048" layer="21"/>
+<wire x1="0.3302" y1="1.778" x2="1.651" y2="1.778" width="0.1524" layer="21"/>
+<wire x1="-3.683" y1="7.112" x2="-3.175" y2="7.62" width="0.1524" layer="21" curve="-90"/>
+<wire x1="3.175" y1="7.62" x2="3.683" y2="7.112" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-2.54" y1="0" x2="-2.54" y2="0.254" width="0.508" layer="51"/>
+<wire x1="2.54" y1="0" x2="2.54" y2="0.254" width="0.508" layer="51"/>
+<pad name="1" x="-2.54" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="2.54" y="0" drill="0.8128" shape="octagon"/>
+<text x="-3.302" y="8.001" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-3.175" y="3.175" size="1.27" layer="27" ratio="10">>VALUE</text>
+<rectangle x1="-2.794" y1="0.127" x2="-2.286" y2="0.508" layer="51"/>
+<rectangle x1="2.286" y1="0.127" x2="2.794" y2="0.508" layer="51"/>
+</package>
+<package name="C075-032X103">
+<description><b>CAPACITOR</b><p>
+grid 7.5 mm, outline 3.2 x 10.3 mm</description>
+<wire x1="4.826" y1="1.524" x2="-4.826" y2="1.524" width="0.1524" layer="21"/>
+<wire x1="-5.08" y1="1.27" x2="-5.08" y2="-1.27" width="0.1524" layer="21"/>
+<wire x1="-4.826" y1="-1.524" x2="4.826" y2="-1.524" width="0.1524" layer="21"/>
+<wire x1="5.08" y1="-1.27" x2="5.08" y2="1.27" width="0.1524" layer="21"/>
+<wire x1="4.826" y1="1.524" x2="5.08" y2="1.27" width="0.1524" layer="21" curve="-90"/>
+<wire x1="4.826" y1="-1.524" x2="5.08" y2="-1.27" width="0.1524" layer="21" curve="90"/>
+<wire x1="-5.08" y1="-1.27" x2="-4.826" y2="-1.524" width="0.1524" layer="21" curve="90"/>
+<wire x1="-5.08" y1="1.27" x2="-4.826" y2="1.524" width="0.1524" layer="21" curve="-90"/>
+<wire x1="0.508" y1="0" x2="2.54" y2="0" width="0.1524" layer="21"/>
+<wire x1="-2.54" y1="0" x2="-0.508" y2="0" width="0.1524" layer="21"/>
+<wire x1="-0.508" y1="0.889" x2="-0.508" y2="0" width="0.4064" layer="21"/>
+<wire x1="-0.508" y1="0" x2="-0.508" y2="-0.889" width="0.4064" layer="21"/>
+<wire x1="0.508" y1="0.889" x2="0.508" y2="0" width="0.4064" layer="21"/>
+<wire x1="0.508" y1="0" x2="0.508" y2="-0.889" width="0.4064" layer="21"/>
+<pad name="1" x="-3.81" y="0" drill="0.9144" shape="octagon"/>
+<pad name="2" x="3.81" y="0" drill="0.9144" shape="octagon"/>
+<text x="-4.826" y="1.905" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-4.826" y="-3.048" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C075-042X103">
+<description><b>CAPACITOR</b><p>
+grid 7.5 mm, outline 4.2 x 10.3 mm</description>
+<wire x1="4.826" y1="2.032" x2="-4.826" y2="2.032" width="0.1524" layer="21"/>
+<wire x1="-5.08" y1="1.778" x2="-5.08" y2="-1.778" width="0.1524" layer="21"/>
+<wire x1="-4.826" y1="-2.032" x2="4.826" y2="-2.032" width="0.1524" layer="21"/>
+<wire x1="5.08" y1="-1.778" x2="5.08" y2="1.778" width="0.1524" layer="21"/>
+<wire x1="4.826" y1="2.032" x2="5.08" y2="1.778" width="0.1524" layer="21" curve="-90"/>
+<wire x1="4.826" y1="-2.032" x2="5.08" y2="-1.778" width="0.1524" layer="21" curve="90"/>
+<wire x1="-5.08" y1="-1.778" x2="-4.826" y2="-2.032" width="0.1524" layer="21" curve="90"/>
+<wire x1="-5.08" y1="1.778" x2="-4.826" y2="2.032" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-1.27" y1="0" x2="2.667" y2="0" width="0.1524" layer="21"/>
+<wire x1="-2.667" y1="0" x2="-2.159" y2="0" width="0.1524" layer="21"/>
+<wire x1="-2.159" y1="1.27" x2="-2.159" y2="0" width="0.4064" layer="21"/>
+<wire x1="-2.159" y1="0" x2="-2.159" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-1.27" y1="1.27" x2="-1.27" y2="0" width="0.4064" layer="21"/>
+<wire x1="-1.27" y1="0" x2="-1.27" y2="-1.27" width="0.4064" layer="21"/>
+<pad name="1" x="-3.81" y="0" drill="0.9144" shape="octagon"/>
+<pad name="2" x="3.81" y="0" drill="0.9144" shape="octagon"/>
+<text x="-4.699" y="2.413" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-0.635" y="-1.651" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C075-052X106">
+<description><b>CAPACITOR</b><p>
+grid 7.5 mm, outline 5.2 x 10.6 mm</description>
+<wire x1="4.953" y1="2.54" x2="-4.953" y2="2.54" width="0.1524" layer="21"/>
+<wire x1="-5.207" y1="2.286" x2="-5.207" y2="-2.286" width="0.1524" layer="21"/>
+<wire x1="-4.953" y1="-2.54" x2="4.953" y2="-2.54" width="0.1524" layer="21"/>
+<wire x1="5.207" y1="-2.286" x2="5.207" y2="2.286" width="0.1524" layer="21"/>
+<wire x1="4.953" y1="2.54" x2="5.207" y2="2.286" width="0.1524" layer="21" curve="-90"/>
+<wire x1="4.953" y1="-2.54" x2="5.207" y2="-2.286" width="0.1524" layer="21" curve="90"/>
+<wire x1="-5.207" y1="-2.286" x2="-4.953" y2="-2.54" width="0.1524" layer="21" curve="90"/>
+<wire x1="-5.207" y1="2.286" x2="-4.953" y2="2.54" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-1.27" y1="0" x2="2.667" y2="0" width="0.1524" layer="21"/>
+<wire x1="-2.667" y1="0" x2="-2.159" y2="0" width="0.1524" layer="21"/>
+<wire x1="-2.159" y1="1.27" x2="-2.159" y2="0" width="0.4064" layer="21"/>
+<wire x1="-2.159" y1="0" x2="-2.159" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-1.27" y1="1.27" x2="-1.27" y2="0" width="0.4064" layer="21"/>
+<wire x1="-1.27" y1="0" x2="-1.27" y2="-1.27" width="0.4064" layer="21"/>
+<pad name="1" x="-3.81" y="0" drill="0.9144" shape="octagon"/>
+<pad name="2" x="3.81" y="0" drill="0.9144" shape="octagon"/>
+<text x="-4.826" y="2.921" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-0.635" y="-2.032" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C102-043X133">
+<description><b>CAPACITOR</b><p>
+grid 10.2 mm, outline 4.3 x 13.3 mm</description>
+<wire x1="-3.175" y1="1.27" x2="-3.175" y2="0" width="0.4064" layer="21"/>
+<wire x1="-2.286" y1="1.27" x2="-2.286" y2="0" width="0.4064" layer="21"/>
+<wire x1="3.81" y1="0" x2="-2.286" y2="0" width="0.1524" layer="21"/>
+<wire x1="-2.286" y1="0" x2="-2.286" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-3.81" y1="0" x2="-3.175" y2="0" width="0.1524" layer="21"/>
+<wire x1="-3.175" y1="0" x2="-3.175" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-6.096" y1="2.032" x2="6.096" y2="2.032" width="0.1524" layer="21"/>
+<wire x1="6.604" y1="1.524" x2="6.604" y2="-1.524" width="0.1524" layer="21"/>
+<wire x1="6.096" y1="-2.032" x2="-6.096" y2="-2.032" width="0.1524" layer="21"/>
+<wire x1="-6.604" y1="-1.524" x2="-6.604" y2="1.524" width="0.1524" layer="21"/>
+<wire x1="6.096" y1="2.032" x2="6.604" y2="1.524" width="0.1524" layer="21" curve="-90"/>
+<wire x1="6.096" y1="-2.032" x2="6.604" y2="-1.524" width="0.1524" layer="21" curve="90"/>
+<wire x1="-6.604" y1="-1.524" x2="-6.096" y2="-2.032" width="0.1524" layer="21" curve="90"/>
+<wire x1="-6.604" y1="1.524" x2="-6.096" y2="2.032" width="0.1524" layer="21" curve="-90"/>
+<pad name="1" x="-5.08" y="0" drill="1.016" shape="octagon"/>
+<pad name="2" x="5.08" y="0" drill="1.016" shape="octagon"/>
+<text x="-6.096" y="2.413" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-1.524" y="-1.651" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C102-054X133">
+<description><b>CAPACITOR</b><p>
+grid 10.2 mm, outline 5.4 x 13.3 mm</description>
+<wire x1="-3.175" y1="1.27" x2="-3.175" y2="0" width="0.4064" layer="21"/>
+<wire x1="-2.286" y1="1.27" x2="-2.286" y2="0" width="0.4064" layer="21"/>
+<wire x1="3.81" y1="0" x2="-2.286" y2="0" width="0.1524" layer="21"/>
+<wire x1="-2.286" y1="0" x2="-2.286" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-3.81" y1="0" x2="-3.175" y2="0" width="0.1524" layer="21"/>
+<wire x1="-3.175" y1="0" x2="-3.175" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-6.096" y1="2.54" x2="6.096" y2="2.54" width="0.1524" layer="21"/>
+<wire x1="6.604" y1="2.032" x2="6.604" y2="-2.032" width="0.1524" layer="21"/>
+<wire x1="6.096" y1="-2.54" x2="-6.096" y2="-2.54" width="0.1524" layer="21"/>
+<wire x1="-6.604" y1="-2.032" x2="-6.604" y2="2.032" width="0.1524" layer="21"/>
+<wire x1="6.096" y1="2.54" x2="6.604" y2="2.032" width="0.1524" layer="21" curve="-90"/>
+<wire x1="6.096" y1="-2.54" x2="6.604" y2="-2.032" width="0.1524" layer="21" curve="90"/>
+<wire x1="-6.604" y1="-2.032" x2="-6.096" y2="-2.54" width="0.1524" layer="21" curve="90"/>
+<wire x1="-6.604" y1="2.032" x2="-6.096" y2="2.54" width="0.1524" layer="21" curve="-90"/>
+<pad name="1" x="-5.08" y="0" drill="1.016" shape="octagon"/>
+<pad name="2" x="5.08" y="0" drill="1.016" shape="octagon"/>
+<text x="-6.096" y="2.921" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-1.524" y="-1.905" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C102-064X133">
+<description><b>CAPACITOR</b><p>
+grid 10.2 mm, outline 6.4 x 13.3 mm</description>
+<wire x1="-3.175" y1="1.27" x2="-3.175" y2="0" width="0.4064" layer="21"/>
+<wire x1="-2.286" y1="1.27" x2="-2.286" y2="0" width="0.4064" layer="21"/>
+<wire x1="3.81" y1="0" x2="-2.286" y2="0" width="0.1524" layer="21"/>
+<wire x1="-2.286" y1="0" x2="-2.286" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-3.81" y1="0" x2="-3.175" y2="0" width="0.1524" layer="21"/>
+<wire x1="-3.175" y1="0" x2="-3.175" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-6.096" y1="3.048" x2="6.096" y2="3.048" width="0.1524" layer="21"/>
+<wire x1="6.604" y1="2.54" x2="6.604" y2="-2.54" width="0.1524" layer="21"/>
+<wire x1="6.096" y1="-3.048" x2="-6.096" y2="-3.048" width="0.1524" layer="21"/>
+<wire x1="-6.604" y1="-2.54" x2="-6.604" y2="2.54" width="0.1524" layer="21"/>
+<wire x1="6.096" y1="3.048" x2="6.604" y2="2.54" width="0.1524" layer="21" curve="-90"/>
+<wire x1="6.096" y1="-3.048" x2="6.604" y2="-2.54" width="0.1524" layer="21" curve="90"/>
+<wire x1="-6.604" y1="-2.54" x2="-6.096" y2="-3.048" width="0.1524" layer="21" curve="90"/>
+<wire x1="-6.604" y1="2.54" x2="-6.096" y2="3.048" width="0.1524" layer="21" curve="-90"/>
+<pad name="1" x="-5.08" y="0" drill="1.016" shape="octagon"/>
+<pad name="2" x="5.08" y="0" drill="1.016" shape="octagon"/>
+<text x="-6.096" y="3.429" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-1.524" y="-2.032" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C102_152-062X184">
+<description><b>CAPACITOR</b><p>
+grid 10.2 mm + 15.2 mm, outline 6.2 x 18.4 mm</description>
+<wire x1="-2.286" y1="1.27" x2="-2.286" y2="0" width="0.4064" layer="21"/>
+<wire x1="-2.286" y1="0" x2="-2.286" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-3.175" y1="1.27" x2="-3.175" y2="0" width="0.4064" layer="21"/>
+<wire x1="-3.175" y1="0" x2="-3.175" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-3.683" y1="0" x2="-3.175" y2="0" width="0.1524" layer="21"/>
+<wire x1="-2.286" y1="0" x2="3.683" y2="0" width="0.1524" layer="21"/>
+<wire x1="6.477" y1="0" x2="8.636" y2="0" width="0.1524" layer="21"/>
+<wire x1="-6.096" y1="3.048" x2="6.223" y2="3.048" width="0.1524" layer="21"/>
+<wire x1="6.223" y1="-3.048" x2="-6.096" y2="-3.048" width="0.1524" layer="21"/>
+<wire x1="-6.604" y1="-2.54" x2="-6.604" y2="2.54" width="0.1524" layer="21"/>
+<wire x1="6.223" y1="3.048" x2="6.731" y2="2.54" width="0.1524" layer="21" curve="-90"/>
+<wire x1="6.223" y1="-3.048" x2="6.731" y2="-2.54" width="0.1524" layer="21" curve="90"/>
+<wire x1="-6.604" y1="-2.54" x2="-6.096" y2="-3.048" width="0.1524" layer="21" curve="90"/>
+<wire x1="-6.604" y1="2.54" x2="-6.096" y2="3.048" width="0.1524" layer="21" curve="-90"/>
+<wire x1="6.731" y1="2.54" x2="6.731" y2="-2.54" width="0.1524" layer="21"/>
+<wire x1="11.176" y1="3.048" x2="11.684" y2="2.54" width="0.1524" layer="21" curve="-90"/>
+<wire x1="11.176" y1="-3.048" x2="11.684" y2="-2.54" width="0.1524" layer="21" curve="90"/>
+<wire x1="11.176" y1="-3.048" x2="7.112" y2="-3.048" width="0.1524" layer="21"/>
+<wire x1="7.112" y1="3.048" x2="11.176" y2="3.048" width="0.1524" layer="21"/>
+<wire x1="11.684" y1="2.54" x2="11.684" y2="-2.54" width="0.1524" layer="21"/>
+<pad name="1" x="-5.08" y="0" drill="1.016" shape="octagon"/>
+<pad name="2" x="5.08" y="0" drill="1.016" shape="octagon"/>
+<pad name="3" x="10.033" y="0" drill="1.016" shape="octagon"/>
+<text x="-5.969" y="3.429" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-1.524" y="-2.286" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C150-054X183">
+<description><b>CAPACITOR</b><p>
+grid 15 mm, outline 5.4 x 18.3 mm</description>
+<wire x1="-5.08" y1="1.27" x2="-5.08" y2="0" width="0.4064" layer="21"/>
+<wire x1="-5.08" y1="0" x2="-5.08" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-4.191" y1="1.27" x2="-4.191" y2="0" width="0.4064" layer="21"/>
+<wire x1="-4.191" y1="0" x2="-4.191" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-4.191" y1="0" x2="6.096" y2="0" width="0.1524" layer="21"/>
+<wire x1="-5.08" y1="0" x2="-6.096" y2="0" width="0.1524" layer="21"/>
+<wire x1="9.017" y1="2.032" x2="9.017" y2="-2.032" width="0.1524" layer="21"/>
+<wire x1="8.509" y1="-2.54" x2="-8.509" y2="-2.54" width="0.1524" layer="21"/>
+<wire x1="-9.017" y1="-2.032" x2="-9.017" y2="2.032" width="0.1524" layer="21"/>
+<wire x1="-8.509" y1="2.54" x2="8.509" y2="2.54" width="0.1524" layer="21"/>
+<wire x1="8.509" y1="2.54" x2="9.017" y2="2.032" width="0.1524" layer="21" curve="-90"/>
+<wire x1="8.509" y1="-2.54" x2="9.017" y2="-2.032" width="0.1524" layer="21" curve="90"/>
+<wire x1="-9.017" y1="-2.032" x2="-8.509" y2="-2.54" width="0.1524" layer="21" curve="90"/>
+<wire x1="-9.017" y1="2.032" x2="-8.509" y2="2.54" width="0.1524" layer="21" curve="-90"/>
+<pad name="1" x="-7.493" y="0" drill="1.016" shape="octagon"/>
+<pad name="2" x="7.493" y="0" drill="1.016" shape="octagon"/>
+<text x="-8.382" y="2.921" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-3.429" y="-2.032" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C150-064X183">
+<description><b>CAPACITOR</b><p>
+grid 15 mm, outline 6.4 x 18.3 mm</description>
+<wire x1="-5.08" y1="1.27" x2="-5.08" y2="0" width="0.4064" layer="21"/>
+<wire x1="-5.08" y1="0" x2="-5.08" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-4.191" y1="1.27" x2="-4.191" y2="0" width="0.4064" layer="21"/>
+<wire x1="-4.191" y1="0" x2="-4.191" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-4.191" y1="0" x2="6.096" y2="0" width="0.1524" layer="21"/>
+<wire x1="-5.08" y1="0" x2="-6.096" y2="0" width="0.1524" layer="21"/>
+<wire x1="9.017" y1="2.54" x2="9.017" y2="-2.54" width="0.1524" layer="21"/>
+<wire x1="8.509" y1="-3.048" x2="-8.509" y2="-3.048" width="0.1524" layer="21"/>
+<wire x1="-9.017" y1="-2.54" x2="-9.017" y2="2.54" width="0.1524" layer="21"/>
+<wire x1="-8.509" y1="3.048" x2="8.509" y2="3.048" width="0.1524" layer="21"/>
+<wire x1="8.509" y1="3.048" x2="9.017" y2="2.54" width="0.1524" layer="21" curve="-90"/>
+<wire x1="8.509" y1="-3.048" x2="9.017" y2="-2.54" width="0.1524" layer="21" curve="90"/>
+<wire x1="-9.017" y1="-2.54" x2="-8.509" y2="-3.048" width="0.1524" layer="21" curve="90"/>
+<wire x1="-9.017" y1="2.54" x2="-8.509" y2="3.048" width="0.1524" layer="21" curve="-90"/>
+<pad name="1" x="-7.493" y="0" drill="1.016" shape="octagon"/>
+<pad name="2" x="7.493" y="0" drill="1.016" shape="octagon"/>
+<text x="-8.509" y="3.429" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-3.429" y="-2.032" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C150-072X183">
+<description><b>CAPACITOR</b><p>
+grid 15 mm, outline 7.2 x 18.3 mm</description>
+<wire x1="-5.08" y1="1.27" x2="-5.08" y2="0" width="0.4064" layer="21"/>
+<wire x1="-5.08" y1="0" x2="-5.08" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-4.191" y1="1.27" x2="-4.191" y2="0" width="0.4064" layer="21"/>
+<wire x1="-4.191" y1="0" x2="-4.191" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-4.191" y1="0" x2="6.096" y2="0" width="0.1524" layer="21"/>
+<wire x1="-5.08" y1="0" x2="-6.096" y2="0" width="0.1524" layer="21"/>
+<wire x1="9.017" y1="3.048" x2="9.017" y2="-3.048" width="0.1524" layer="21"/>
+<wire x1="8.509" y1="-3.556" x2="-8.509" y2="-3.556" width="0.1524" layer="21"/>
+<wire x1="-9.017" y1="-3.048" x2="-9.017" y2="3.048" width="0.1524" layer="21"/>
+<wire x1="-8.509" y1="3.556" x2="8.509" y2="3.556" width="0.1524" layer="21"/>
+<wire x1="8.509" y1="3.556" x2="9.017" y2="3.048" width="0.1524" layer="21" curve="-90"/>
+<wire x1="8.509" y1="-3.556" x2="9.017" y2="-3.048" width="0.1524" layer="21" curve="90"/>
+<wire x1="-9.017" y1="-3.048" x2="-8.509" y2="-3.556" width="0.1524" layer="21" curve="90"/>
+<wire x1="-9.017" y1="3.048" x2="-8.509" y2="3.556" width="0.1524" layer="21" curve="-90"/>
+<pad name="1" x="-7.493" y="0" drill="1.016" shape="octagon"/>
+<pad name="2" x="7.493" y="0" drill="1.016" shape="octagon"/>
+<text x="-8.509" y="3.937" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-3.429" y="-2.286" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C150-084X183">
+<description><b>CAPACITOR</b><p>
+grid 15 mm, outline 8.4 x 18.3 mm</description>
+<wire x1="-5.08" y1="1.27" x2="-5.08" y2="0" width="0.4064" layer="21"/>
+<wire x1="-5.08" y1="0" x2="-5.08" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-4.191" y1="1.27" x2="-4.191" y2="0" width="0.4064" layer="21"/>
+<wire x1="-4.191" y1="0" x2="-4.191" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-4.191" y1="0" x2="6.096" y2="0" width="0.1524" layer="21"/>
+<wire x1="-5.08" y1="0" x2="-6.096" y2="0" width="0.1524" layer="21"/>
+<wire x1="9.017" y1="3.556" x2="9.017" y2="-3.556" width="0.1524" layer="21"/>
+<wire x1="8.509" y1="-4.064" x2="-8.509" y2="-4.064" width="0.1524" layer="21"/>
+<wire x1="-9.017" y1="-3.556" x2="-9.017" y2="3.556" width="0.1524" layer="21"/>
+<wire x1="-8.509" y1="4.064" x2="8.509" y2="4.064" width="0.1524" layer="21"/>
+<wire x1="8.509" y1="4.064" x2="9.017" y2="3.556" width="0.1524" layer="21" curve="-90"/>
+<wire x1="8.509" y1="-4.064" x2="9.017" y2="-3.556" width="0.1524" layer="21" curve="90"/>
+<wire x1="-9.017" y1="-3.556" x2="-8.509" y2="-4.064" width="0.1524" layer="21" curve="90"/>
+<wire x1="-9.017" y1="3.556" x2="-8.509" y2="4.064" width="0.1524" layer="21" curve="-90"/>
+<pad name="1" x="-7.493" y="0" drill="1.016" shape="octagon"/>
+<pad name="2" x="7.493" y="0" drill="1.016" shape="octagon"/>
+<text x="-8.509" y="4.445" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-3.429" y="-2.54" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C150-091X182">
+<description><b>CAPACITOR</b><p>
+grid 15 mm, outline 9.1 x 18.2 mm</description>
+<wire x1="-5.08" y1="1.27" x2="-5.08" y2="0" width="0.4064" layer="21"/>
+<wire x1="-5.08" y1="0" x2="-5.08" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-4.191" y1="1.27" x2="-4.191" y2="0" width="0.4064" layer="21"/>
+<wire x1="-4.191" y1="0" x2="-4.191" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-4.191" y1="0" x2="6.096" y2="0" width="0.1524" layer="21"/>
+<wire x1="-5.08" y1="0" x2="-6.096" y2="0" width="0.1524" layer="21"/>
+<wire x1="9.017" y1="3.937" x2="9.017" y2="-3.937" width="0.1524" layer="21"/>
+<wire x1="8.509" y1="-4.445" x2="-8.509" y2="-4.445" width="0.1524" layer="21"/>
+<wire x1="-9.017" y1="-3.937" x2="-9.017" y2="3.937" width="0.1524" layer="21"/>
+<wire x1="-8.509" y1="4.445" x2="8.509" y2="4.445" width="0.1524" layer="21"/>
+<wire x1="8.509" y1="4.445" x2="9.017" y2="3.937" width="0.1524" layer="21" curve="-90"/>
+<wire x1="8.509" y1="-4.445" x2="9.017" y2="-3.937" width="0.1524" layer="21" curve="90"/>
+<wire x1="-9.017" y1="-3.937" x2="-8.509" y2="-4.445" width="0.1524" layer="21" curve="90"/>
+<wire x1="-9.017" y1="3.937" x2="-8.509" y2="4.445" width="0.1524" layer="21" curve="-90"/>
+<pad name="1" x="-7.493" y="0" drill="1.016" shape="octagon"/>
+<pad name="2" x="7.493" y="0" drill="1.016" shape="octagon"/>
+<text x="-8.509" y="4.826" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-3.429" y="-2.54" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C225-062X268">
+<description><b>CAPACITOR</b><p>
+grid 22.5 mm, outline 6.2 x 26.8 mm</description>
+<wire x1="-12.827" y1="3.048" x2="12.827" y2="3.048" width="0.1524" layer="21"/>
+<wire x1="13.335" y1="2.54" x2="13.335" y2="-2.54" width="0.1524" layer="21"/>
+<wire x1="12.827" y1="-3.048" x2="-12.827" y2="-3.048" width="0.1524" layer="21"/>
+<wire x1="-13.335" y1="-2.54" x2="-13.335" y2="2.54" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="1.905" x2="-6.731" y2="0" width="0.4064" layer="21"/>
+<wire x1="-6.731" y1="0" x2="-6.731" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="1.905" x2="-7.62" y2="0" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="0" x2="-7.62" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="12.827" y1="3.048" x2="13.335" y2="2.54" width="0.1524" layer="21" curve="-90"/>
+<wire x1="12.827" y1="-3.048" x2="13.335" y2="-2.54" width="0.1524" layer="21" curve="90"/>
+<wire x1="-13.335" y1="-2.54" x2="-12.827" y2="-3.048" width="0.1524" layer="21" curve="90"/>
+<wire x1="-13.335" y1="2.54" x2="-12.827" y2="3.048" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-9.652" y1="0" x2="-7.62" y2="0" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="0" x2="9.652" y2="0" width="0.1524" layer="21"/>
+<pad name="1" x="-11.303" y="0" drill="1.016" shape="octagon"/>
+<pad name="2" x="11.303" y="0" drill="1.016" shape="octagon"/>
+<text x="-12.7" y="3.429" size="1.778" layer="25" ratio="10">>NAME</text>
+<text x="-5.08" y="-2.54" size="1.778" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C225-074X268">
+<description><b>CAPACITOR</b><p>
+grid 22.5 mm, outline 7.4 x 26.8 mm</description>
+<wire x1="-12.827" y1="3.556" x2="12.827" y2="3.556" width="0.1524" layer="21"/>
+<wire x1="13.335" y1="3.048" x2="13.335" y2="-3.048" width="0.1524" layer="21"/>
+<wire x1="12.827" y1="-3.556" x2="-12.827" y2="-3.556" width="0.1524" layer="21"/>
+<wire x1="-13.335" y1="-3.048" x2="-13.335" y2="3.048" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="1.905" x2="-6.731" y2="0" width="0.4064" layer="21"/>
+<wire x1="-6.731" y1="0" x2="-6.731" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="1.905" x2="-7.62" y2="0" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="0" x2="-7.62" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="12.827" y1="3.556" x2="13.335" y2="3.048" width="0.1524" layer="21" curve="-90"/>
+<wire x1="12.827" y1="-3.556" x2="13.335" y2="-3.048" width="0.1524" layer="21" curve="90"/>
+<wire x1="-13.335" y1="-3.048" x2="-12.827" y2="-3.556" width="0.1524" layer="21" curve="90"/>
+<wire x1="-13.335" y1="3.048" x2="-12.827" y2="3.556" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-9.652" y1="0" x2="-7.62" y2="0" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="0" x2="9.652" y2="0" width="0.1524" layer="21"/>
+<pad name="1" x="-11.303" y="0" drill="1.016" shape="octagon"/>
+<pad name="2" x="11.303" y="0" drill="1.016" shape="octagon"/>
+<text x="-12.827" y="3.937" size="1.778" layer="25" ratio="10">>NAME</text>
+<text x="-5.08" y="-2.54" size="1.778" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C225-087X268">
+<description><b>CAPACITOR</b><p>
+grid 22.5 mm, outline 8.7 x 26.8 mm</description>
+<wire x1="-12.827" y1="4.318" x2="12.827" y2="4.318" width="0.1524" layer="21"/>
+<wire x1="13.335" y1="3.81" x2="13.335" y2="-3.81" width="0.1524" layer="21"/>
+<wire x1="12.827" y1="-4.318" x2="-12.827" y2="-4.318" width="0.1524" layer="21"/>
+<wire x1="-13.335" y1="-3.81" x2="-13.335" y2="3.81" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="1.905" x2="-6.731" y2="0" width="0.4064" layer="21"/>
+<wire x1="-6.731" y1="0" x2="-6.731" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="1.905" x2="-7.62" y2="0" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="0" x2="-7.62" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="12.827" y1="4.318" x2="13.335" y2="3.81" width="0.1524" layer="21" curve="-90"/>
+<wire x1="12.827" y1="-4.318" x2="13.335" y2="-3.81" width="0.1524" layer="21" curve="90"/>
+<wire x1="-13.335" y1="-3.81" x2="-12.827" y2="-4.318" width="0.1524" layer="21" curve="90"/>
+<wire x1="-13.335" y1="3.81" x2="-12.827" y2="4.318" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-9.652" y1="0" x2="-7.62" y2="0" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="0" x2="9.652" y2="0" width="0.1524" layer="21"/>
+<pad name="1" x="-11.303" y="0" drill="1.016" shape="octagon"/>
+<pad name="2" x="11.303" y="0" drill="1.016" shape="octagon"/>
+<text x="-12.827" y="4.699" size="1.778" layer="25" ratio="10">>NAME</text>
+<text x="-5.08" y="-2.54" size="1.778" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C225-108X268">
+<description><b>CAPACITOR</b><p>
+grid 22.5 mm, outline 10.8 x 26.8 mm</description>
+<wire x1="-12.827" y1="5.334" x2="12.827" y2="5.334" width="0.1524" layer="21"/>
+<wire x1="13.335" y1="4.826" x2="13.335" y2="-4.826" width="0.1524" layer="21"/>
+<wire x1="12.827" y1="-5.334" x2="-12.827" y2="-5.334" width="0.1524" layer="21"/>
+<wire x1="-13.335" y1="-4.826" x2="-13.335" y2="4.826" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="1.905" x2="-6.731" y2="0" width="0.4064" layer="21"/>
+<wire x1="-6.731" y1="0" x2="-6.731" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="1.905" x2="-7.62" y2="0" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="0" x2="-7.62" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="12.827" y1="5.334" x2="13.335" y2="4.826" width="0.1524" layer="21" curve="-90"/>
+<wire x1="12.827" y1="-5.334" x2="13.335" y2="-4.826" width="0.1524" layer="21" curve="90"/>
+<wire x1="-13.335" y1="-4.826" x2="-12.827" y2="-5.334" width="0.1524" layer="21" curve="90"/>
+<wire x1="-13.335" y1="4.826" x2="-12.827" y2="5.334" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-9.652" y1="0" x2="-7.62" y2="0" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="0" x2="9.652" y2="0" width="0.1524" layer="21"/>
+<pad name="1" x="-11.303" y="0" drill="1.016" shape="octagon"/>
+<pad name="2" x="11.303" y="0" drill="1.016" shape="octagon"/>
+<text x="-12.954" y="5.715" size="1.778" layer="25" ratio="10">>NAME</text>
+<text x="-5.08" y="-2.54" size="1.778" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C225-113X268">
+<description><b>CAPACITOR</b><p>
+grid 22.5 mm, outline 11.3 x 26.8 mm</description>
+<wire x1="-12.827" y1="5.588" x2="12.827" y2="5.588" width="0.1524" layer="21"/>
+<wire x1="13.335" y1="5.08" x2="13.335" y2="-5.08" width="0.1524" layer="21"/>
+<wire x1="12.827" y1="-5.588" x2="-12.827" y2="-5.588" width="0.1524" layer="21"/>
+<wire x1="-13.335" y1="-5.08" x2="-13.335" y2="5.08" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="1.905" x2="-6.731" y2="0" width="0.4064" layer="21"/>
+<wire x1="-6.731" y1="0" x2="-6.731" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="1.905" x2="-7.62" y2="0" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="0" x2="-7.62" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="12.827" y1="5.588" x2="13.335" y2="5.08" width="0.1524" layer="21" curve="-90"/>
+<wire x1="12.827" y1="-5.588" x2="13.335" y2="-5.08" width="0.1524" layer="21" curve="90"/>
+<wire x1="-13.335" y1="-5.08" x2="-12.827" y2="-5.588" width="0.1524" layer="21" curve="90"/>
+<wire x1="-13.335" y1="5.08" x2="-12.827" y2="5.588" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-9.652" y1="0" x2="-7.62" y2="0" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="0" x2="9.652" y2="0" width="0.1524" layer="21"/>
+<pad name="1" x="-11.303" y="0" drill="1.016" shape="octagon"/>
+<pad name="2" x="11.303" y="0" drill="1.016" shape="octagon"/>
+<text x="-12.954" y="5.969" size="1.778" layer="25" ratio="10">>NAME</text>
+<text x="-5.08" y="-2.54" size="1.778" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C275-093X316">
+<description><b>CAPACITOR</b><p>
+grid 27.5 mm, outline 9.3 x 31.6 mm</description>
+<wire x1="-15.24" y1="4.572" x2="15.24" y2="4.572" width="0.1524" layer="21"/>
+<wire x1="15.748" y1="4.064" x2="15.748" y2="-4.064" width="0.1524" layer="21"/>
+<wire x1="15.24" y1="-4.572" x2="-15.24" y2="-4.572" width="0.1524" layer="21"/>
+<wire x1="-15.748" y1="-4.064" x2="-15.748" y2="4.064" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="1.905" x2="-6.731" y2="0" width="0.4064" layer="21"/>
+<wire x1="-6.731" y1="0" x2="-6.731" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="1.905" x2="-7.62" y2="0" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="0" x2="-7.62" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="15.24" y1="4.572" x2="15.748" y2="4.064" width="0.1524" layer="21" curve="-90"/>
+<wire x1="15.24" y1="-4.572" x2="15.748" y2="-4.064" width="0.1524" layer="21" curve="90"/>
+<wire x1="-15.748" y1="-4.064" x2="-15.24" y2="-4.572" width="0.1524" layer="21" curve="90"/>
+<wire x1="-15.748" y1="4.064" x2="-15.24" y2="4.572" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-11.557" y1="0" x2="-7.62" y2="0" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="0" x2="11.557" y2="0" width="0.1524" layer="21"/>
+<pad name="1" x="-13.716" y="0" drill="1.1938" shape="octagon"/>
+<pad name="2" x="13.716" y="0" drill="1.1938" shape="octagon"/>
+<text x="-15.24" y="4.953" size="1.778" layer="25" ratio="10">>NAME</text>
+<text x="-5.08" y="-2.54" size="1.778" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C275-113X316">
+<description><b>CAPACITOR</b><p>
+grid 27.5 mm, outline 11.3 x 31.6 mm</description>
+<wire x1="-15.24" y1="5.588" x2="15.24" y2="5.588" width="0.1524" layer="21"/>
+<wire x1="15.748" y1="5.08" x2="15.748" y2="-5.08" width="0.1524" layer="21"/>
+<wire x1="15.24" y1="-5.588" x2="-15.24" y2="-5.588" width="0.1524" layer="21"/>
+<wire x1="-15.748" y1="-5.08" x2="-15.748" y2="5.08" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="1.905" x2="-6.731" y2="0" width="0.4064" layer="21"/>
+<wire x1="-6.731" y1="0" x2="-6.731" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="1.905" x2="-7.62" y2="0" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="0" x2="-7.62" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="15.24" y1="5.588" x2="15.748" y2="5.08" width="0.1524" layer="21" curve="-90"/>
+<wire x1="15.24" y1="-5.588" x2="15.748" y2="-5.08" width="0.1524" layer="21" curve="90"/>
+<wire x1="-15.748" y1="-5.08" x2="-15.24" y2="-5.588" width="0.1524" layer="21" curve="90"/>
+<wire x1="-15.748" y1="5.08" x2="-15.24" y2="5.588" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-11.557" y1="0" x2="-7.62" y2="0" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="0" x2="11.557" y2="0" width="0.1524" layer="21"/>
+<pad name="1" x="-13.716" y="0" drill="1.1938" shape="octagon"/>
+<pad name="2" x="13.716" y="0" drill="1.1938" shape="octagon"/>
+<text x="-15.24" y="5.969" size="1.778" layer="25" ratio="10">>NAME</text>
+<text x="-5.08" y="-2.54" size="1.778" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C275-134X316">
+<description><b>CAPACITOR</b><p>
+grid 27.5 mm, outline 13.4 x 31.6 mm</description>
+<wire x1="-15.24" y1="6.604" x2="15.24" y2="6.604" width="0.1524" layer="21"/>
+<wire x1="15.748" y1="6.096" x2="15.748" y2="-6.096" width="0.1524" layer="21"/>
+<wire x1="15.24" y1="-6.604" x2="-15.24" y2="-6.604" width="0.1524" layer="21"/>
+<wire x1="-15.748" y1="-6.096" x2="-15.748" y2="6.096" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="1.905" x2="-6.731" y2="0" width="0.4064" layer="21"/>
+<wire x1="-6.731" y1="0" x2="-6.731" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="1.905" x2="-7.62" y2="0" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="0" x2="-7.62" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="15.24" y1="6.604" x2="15.748" y2="6.096" width="0.1524" layer="21" curve="-90"/>
+<wire x1="15.24" y1="-6.604" x2="15.748" y2="-6.096" width="0.1524" layer="21" curve="90"/>
+<wire x1="-15.748" y1="-6.096" x2="-15.24" y2="-6.604" width="0.1524" layer="21" curve="90"/>
+<wire x1="-15.748" y1="6.096" x2="-15.24" y2="6.604" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-11.557" y1="0" x2="-7.62" y2="0" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="0" x2="11.557" y2="0" width="0.1524" layer="21"/>
+<pad name="1" x="-13.716" y="0" drill="1.1938" shape="octagon"/>
+<pad name="2" x="13.716" y="0" drill="1.1938" shape="octagon"/>
+<text x="-15.24" y="6.985" size="1.778" layer="25" ratio="10">>NAME</text>
+<text x="-5.08" y="-2.54" size="1.778" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C275-205X316">
+<description><b>CAPACITOR</b><p>
+grid 27.5 mm, outline 20.5 x 31.6 mm</description>
+<wire x1="-15.24" y1="10.16" x2="15.24" y2="10.16" width="0.1524" layer="21"/>
+<wire x1="15.748" y1="9.652" x2="15.748" y2="-9.652" width="0.1524" layer="21"/>
+<wire x1="15.24" y1="-10.16" x2="-15.24" y2="-10.16" width="0.1524" layer="21"/>
+<wire x1="-15.748" y1="-9.652" x2="-15.748" y2="9.652" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="1.905" x2="-6.731" y2="0" width="0.4064" layer="21"/>
+<wire x1="-6.731" y1="0" x2="-6.731" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="1.905" x2="-7.62" y2="0" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="0" x2="-7.62" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="15.24" y1="10.16" x2="15.748" y2="9.652" width="0.1524" layer="21" curve="-90"/>
+<wire x1="15.24" y1="-10.16" x2="15.748" y2="-9.652" width="0.1524" layer="21" curve="90"/>
+<wire x1="-15.748" y1="-9.652" x2="-15.24" y2="-10.16" width="0.1524" layer="21" curve="90"/>
+<wire x1="-15.748" y1="9.652" x2="-15.24" y2="10.16" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-11.557" y1="0" x2="-7.62" y2="0" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="0" x2="11.557" y2="0" width="0.1524" layer="21"/>
+<pad name="1" x="-13.716" y="0" drill="1.1938" shape="octagon"/>
+<pad name="2" x="13.716" y="0" drill="1.1938" shape="octagon"/>
+<text x="-15.24" y="10.541" size="1.778" layer="25" ratio="10">>NAME</text>
+<text x="-5.08" y="-4.318" size="1.778" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C325-137X374">
+<description><b>CAPACITOR</b><p>
+grid 32.5 mm, outline 13.7 x 37.4 mm</description>
+<wire x1="-14.2748" y1="0" x2="-12.7" y2="0" width="0.1524" layer="21"/>
+<wire x1="-12.7" y1="1.905" x2="-12.7" y2="0" width="0.4064" layer="21"/>
+<wire x1="-11.811" y1="1.905" x2="-11.811" y2="0" width="0.4064" layer="21"/>
+<wire x1="-11.811" y1="0" x2="14.2748" y2="0" width="0.1524" layer="21"/>
+<wire x1="-11.811" y1="0" x2="-11.811" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="-12.7" y1="0" x2="-12.7" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="18.542" y1="6.731" x2="18.542" y2="-6.731" width="0.1524" layer="21"/>
+<wire x1="-18.542" y1="6.731" x2="-18.542" y2="-6.731" width="0.1524" layer="21"/>
+<wire x1="-18.542" y1="-6.731" x2="18.542" y2="-6.731" width="0.1524" layer="21"/>
+<wire x1="18.542" y1="6.731" x2="-18.542" y2="6.731" width="0.1524" layer="21"/>
+<pad name="1" x="-16.256" y="0" drill="1.1938" shape="octagon"/>
+<pad name="2" x="16.256" y="0" drill="1.1938" shape="octagon"/>
+<text x="-18.2372" y="7.0612" size="1.778" layer="25" ratio="10">>NAME</text>
+<text x="-10.8458" y="-2.8702" size="1.778" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C325-162X374">
+<description><b>CAPACITOR</b><p>
+grid 32.5 mm, outline 16.2 x 37.4 mm</description>
+<wire x1="-14.2748" y1="0" x2="-12.7" y2="0" width="0.1524" layer="21"/>
+<wire x1="-12.7" y1="1.905" x2="-12.7" y2="0" width="0.4064" layer="21"/>
+<wire x1="-11.811" y1="1.905" x2="-11.811" y2="0" width="0.4064" layer="21"/>
+<wire x1="-11.811" y1="0" x2="14.2748" y2="0" width="0.1524" layer="21"/>
+<wire x1="-11.811" y1="0" x2="-11.811" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="-12.7" y1="0" x2="-12.7" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="18.542" y1="8.001" x2="18.542" y2="-8.001" width="0.1524" layer="21"/>
+<wire x1="-18.542" y1="8.001" x2="-18.542" y2="-8.001" width="0.1524" layer="21"/>
+<wire x1="-18.542" y1="-8.001" x2="18.542" y2="-8.001" width="0.1524" layer="21"/>
+<wire x1="18.542" y1="8.001" x2="-18.542" y2="8.001" width="0.1524" layer="21"/>
+<pad name="1" x="-16.256" y="0" drill="1.1938" shape="octagon"/>
+<pad name="2" x="16.256" y="0" drill="1.1938" shape="octagon"/>
+<text x="-18.3642" y="8.3312" size="1.778" layer="25" ratio="10">>NAME</text>
+<text x="-10.8458" y="-2.8702" size="1.778" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C325-182X374">
+<description><b>CAPACITOR</b><p>
+grid 32.5 mm, outline 18.2 x 37.4 mm</description>
+<wire x1="-14.2748" y1="0" x2="-12.7" y2="0" width="0.1524" layer="21"/>
+<wire x1="-12.7" y1="1.905" x2="-12.7" y2="0" width="0.4064" layer="21"/>
+<wire x1="-11.811" y1="1.905" x2="-11.811" y2="0" width="0.4064" layer="21"/>
+<wire x1="-11.811" y1="0" x2="14.2748" y2="0" width="0.1524" layer="21"/>
+<wire x1="-11.811" y1="0" x2="-11.811" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="-12.7" y1="0" x2="-12.7" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="18.542" y1="9.017" x2="18.542" y2="-9.017" width="0.1524" layer="21"/>
+<wire x1="-18.542" y1="9.017" x2="-18.542" y2="-9.017" width="0.1524" layer="21"/>
+<wire x1="-18.542" y1="-9.017" x2="18.542" y2="-9.017" width="0.1524" layer="21"/>
+<wire x1="18.542" y1="9.017" x2="-18.542" y2="9.017" width="0.1524" layer="21"/>
+<pad name="1" x="-16.256" y="0" drill="1.1938" shape="octagon"/>
+<pad name="2" x="16.256" y="0" drill="1.1938" shape="octagon"/>
+<text x="-18.3642" y="9.3472" size="1.778" layer="25" ratio="10">>NAME</text>
+<text x="-10.8458" y="-2.8702" size="1.778" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C375-192X418">
+<description><b>CAPACITOR</b><p>
+grid 37.5 mm, outline 19.2 x 41.8 mm</description>
+<wire x1="-20.32" y1="8.509" x2="20.32" y2="8.509" width="0.1524" layer="21"/>
+<wire x1="20.828" y1="8.001" x2="20.828" y2="-8.001" width="0.1524" layer="21"/>
+<wire x1="20.32" y1="-8.509" x2="-20.32" y2="-8.509" width="0.1524" layer="21"/>
+<wire x1="-20.828" y1="-8.001" x2="-20.828" y2="8.001" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="1.905" x2="-6.731" y2="0" width="0.4064" layer="21"/>
+<wire x1="-6.731" y1="0" x2="-6.731" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="1.905" x2="-7.62" y2="0" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="0" x2="-7.62" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="20.32" y1="8.509" x2="20.828" y2="8.001" width="0.1524" layer="21" curve="-90"/>
+<wire x1="20.32" y1="-8.509" x2="20.828" y2="-8.001" width="0.1524" layer="21" curve="90"/>
+<wire x1="-20.828" y1="-8.001" x2="-20.32" y2="-8.509" width="0.1524" layer="21" curve="90"/>
+<wire x1="-20.828" y1="8.001" x2="-20.32" y2="8.509" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-16.002" y1="0" x2="-7.62" y2="0" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="0" x2="16.002" y2="0" width="0.1524" layer="21"/>
+<pad name="1" x="-18.796" y="0" drill="1.3208" shape="octagon"/>
+<pad name="2" x="18.796" y="0" drill="1.3208" shape="octagon"/>
+<text x="-20.447" y="8.89" size="1.778" layer="25" ratio="10">>NAME</text>
+<text x="-5.08" y="-2.54" size="1.778" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C375-203X418">
+<description><b>CAPACITOR</b><p>
+grid 37.5 mm, outline 20.3 x 41.8 mm</description>
+<wire x1="-20.32" y1="10.16" x2="20.32" y2="10.16" width="0.1524" layer="21"/>
+<wire x1="20.828" y1="9.652" x2="20.828" y2="-9.652" width="0.1524" layer="21"/>
+<wire x1="20.32" y1="-10.16" x2="-20.32" y2="-10.16" width="0.1524" layer="21"/>
+<wire x1="-20.828" y1="-9.652" x2="-20.828" y2="9.652" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="1.905" x2="-6.731" y2="0" width="0.4064" layer="21"/>
+<wire x1="-6.731" y1="0" x2="-6.731" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="1.905" x2="-7.62" y2="0" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="0" x2="-7.62" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="20.32" y1="10.16" x2="20.828" y2="9.652" width="0.1524" layer="21" curve="-90"/>
+<wire x1="20.32" y1="-10.16" x2="20.828" y2="-9.652" width="0.1524" layer="21" curve="90"/>
+<wire x1="-20.828" y1="-9.652" x2="-20.32" y2="-10.16" width="0.1524" layer="21" curve="90"/>
+<wire x1="-20.828" y1="9.652" x2="-20.32" y2="10.16" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-16.002" y1="0" x2="-7.62" y2="0" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="0" x2="16.002" y2="0" width="0.1524" layer="21"/>
+<pad name="1" x="-18.796" y="0" drill="1.3208" shape="octagon"/>
+<pad name="2" x="18.796" y="0" drill="1.3208" shape="octagon"/>
+<text x="-20.32" y="10.541" size="1.778" layer="25" ratio="10">>NAME</text>
+<text x="-5.08" y="-2.54" size="1.778" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C050-035X075">
+<description><b>CAPACITOR</b><p>
+grid 5 mm, outline 3.5 x 7.5 mm</description>
+<wire x1="-0.3048" y1="0.635" x2="-0.3048" y2="0" width="0.3048" layer="21"/>
+<wire x1="-0.3048" y1="0" x2="-0.3048" y2="-0.635" width="0.3048" layer="21"/>
+<wire x1="-0.3048" y1="0" x2="-1.524" y2="0" width="0.1524" layer="21"/>
+<wire x1="0.3302" y1="0.635" x2="0.3302" y2="0" width="0.3048" layer="21"/>
+<wire x1="0.3302" y1="0" x2="0.3302" y2="-0.635" width="0.3048" layer="21"/>
+<wire x1="0.3302" y1="0" x2="1.524" y2="0" width="0.1524" layer="21"/>
+<wire x1="-3.683" y1="1.524" x2="-3.683" y2="-1.524" width="0.1524" layer="21"/>
+<wire x1="-3.429" y1="-1.778" x2="3.429" y2="-1.778" width="0.1524" layer="21"/>
+<wire x1="3.683" y1="-1.524" x2="3.683" y2="1.524" width="0.1524" layer="21"/>
+<wire x1="3.429" y1="1.778" x2="-3.429" y2="1.778" width="0.1524" layer="21"/>
+<wire x1="3.429" y1="1.778" x2="3.683" y2="1.524" width="0.1524" layer="21" curve="-90"/>
+<wire x1="3.429" y1="-1.778" x2="3.683" y2="-1.524" width="0.1524" layer="21" curve="90"/>
+<wire x1="-3.683" y1="-1.524" x2="-3.429" y2="-1.778" width="0.1524" layer="21" curve="90"/>
+<wire x1="-3.683" y1="1.524" x2="-3.429" y2="1.778" width="0.1524" layer="21" curve="-90"/>
+<pad name="1" x="-2.54" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="2.54" y="0" drill="0.8128" shape="octagon"/>
+<text x="-3.556" y="2.159" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-3.556" y="-3.429" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C375-155X418">
+<description><b>CAPACITOR</b><p>
+grid 37.5 mm, outline 15.5 x 41.8 mm</description>
+<wire x1="-20.32" y1="7.62" x2="20.32" y2="7.62" width="0.1524" layer="21"/>
+<wire x1="20.828" y1="7.112" x2="20.828" y2="-7.112" width="0.1524" layer="21"/>
+<wire x1="20.32" y1="-7.62" x2="-20.32" y2="-7.62" width="0.1524" layer="21"/>
+<wire x1="-20.828" y1="-7.112" x2="-20.828" y2="7.112" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="1.905" x2="-6.731" y2="0" width="0.4064" layer="21"/>
+<wire x1="-6.731" y1="0" x2="-6.731" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="1.905" x2="-7.62" y2="0" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="0" x2="-7.62" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="20.32" y1="7.62" x2="20.828" y2="7.112" width="0.1524" layer="21" curve="-90"/>
+<wire x1="20.32" y1="-7.62" x2="20.828" y2="-7.112" width="0.1524" layer="21" curve="90"/>
+<wire x1="-20.828" y1="-7.112" x2="-20.32" y2="-7.62" width="0.1524" layer="21" curve="90"/>
+<wire x1="-20.828" y1="7.112" x2="-20.32" y2="7.62" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-16.002" y1="0" x2="-7.62" y2="0" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="0" x2="16.002" y2="0" width="0.1524" layer="21"/>
+<pad name="1" x="-18.796" y="0" drill="1.3208" shape="octagon"/>
+<pad name="2" x="18.796" y="0" drill="1.3208" shape="octagon"/>
+<text x="-20.447" y="8.001" size="1.778" layer="25" ratio="10">>NAME</text>
+<text x="-5.08" y="-2.54" size="1.778" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C075-063X106">
+<description><b>CAPACITOR</b><p>
+grid 7.5 mm, outline 6.3 x 10.6 mm</description>
+<wire x1="4.953" y1="3.048" x2="-4.953" y2="3.048" width="0.1524" layer="21"/>
+<wire x1="-5.207" y1="2.794" x2="-5.207" y2="-2.794" width="0.1524" layer="21"/>
+<wire x1="-4.953" y1="-3.048" x2="4.953" y2="-3.048" width="0.1524" layer="21"/>
+<wire x1="5.207" y1="-2.794" x2="5.207" y2="2.794" width="0.1524" layer="21"/>
+<wire x1="4.953" y1="3.048" x2="5.207" y2="2.794" width="0.1524" layer="21" curve="-90"/>
+<wire x1="4.953" y1="-3.048" x2="5.207" y2="-2.794" width="0.1524" layer="21" curve="90"/>
+<wire x1="-5.207" y1="-2.794" x2="-4.953" y2="-3.048" width="0.1524" layer="21" curve="90"/>
+<wire x1="-5.207" y1="2.794" x2="-4.953" y2="3.048" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-1.27" y1="0" x2="2.667" y2="0" width="0.1524" layer="21"/>
+<wire x1="-2.667" y1="0" x2="-2.159" y2="0" width="0.1524" layer="21"/>
+<wire x1="-2.159" y1="1.27" x2="-2.159" y2="0" width="0.4064" layer="21"/>
+<wire x1="-2.159" y1="0" x2="-2.159" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-1.27" y1="1.27" x2="-1.27" y2="0" width="0.4064" layer="21"/>
+<wire x1="-1.27" y1="0" x2="-1.27" y2="-1.27" width="0.4064" layer="21"/>
+<pad name="1" x="-3.81" y="0" drill="0.9144" shape="octagon"/>
+<pad name="2" x="3.81" y="0" drill="0.9144" shape="octagon"/>
+<text x="-4.826" y="3.429" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-0.635" y="-2.54" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C275-154X316">
+<description><b>CAPACITOR</b><p>
+grid 27.5 mm, outline 15.4 x 31.6 mm</description>
+<wire x1="-15.24" y1="7.62" x2="15.24" y2="7.62" width="0.1524" layer="21"/>
+<wire x1="15.748" y1="7.112" x2="15.748" y2="-7.112" width="0.1524" layer="21"/>
+<wire x1="15.24" y1="-7.62" x2="-15.24" y2="-7.62" width="0.1524" layer="21"/>
+<wire x1="-15.748" y1="-7.112" x2="-15.748" y2="7.112" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="1.905" x2="-6.731" y2="0" width="0.4064" layer="21"/>
+<wire x1="-6.731" y1="0" x2="-6.731" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="1.905" x2="-7.62" y2="0" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="0" x2="-7.62" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="15.24" y1="7.62" x2="15.748" y2="7.112" width="0.1524" layer="21" curve="-90"/>
+<wire x1="15.24" y1="-7.62" x2="15.748" y2="-7.112" width="0.1524" layer="21" curve="90"/>
+<wire x1="-15.748" y1="-7.112" x2="-15.24" y2="-7.62" width="0.1524" layer="21" curve="90"/>
+<wire x1="-15.748" y1="7.112" x2="-15.24" y2="7.62" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-11.557" y1="0" x2="-7.62" y2="0" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="0" x2="11.557" y2="0" width="0.1524" layer="21"/>
+<pad name="1" x="-13.716" y="0" drill="1.1938" shape="octagon"/>
+<pad name="2" x="13.716" y="0" drill="1.1938" shape="octagon"/>
+<text x="-15.24" y="8.001" size="1.778" layer="25" ratio="10">>NAME</text>
+<text x="-5.08" y="-2.54" size="1.778" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C275-173X316">
+<description><b>CAPACITOR</b><p>
+grid 27.5 mm, outline 17.3 x 31.6 mm</description>
+<wire x1="-15.24" y1="8.509" x2="15.24" y2="8.509" width="0.1524" layer="21"/>
+<wire x1="15.748" y1="8.001" x2="15.748" y2="-8.001" width="0.1524" layer="21"/>
+<wire x1="15.24" y1="-8.509" x2="-15.24" y2="-8.509" width="0.1524" layer="21"/>
+<wire x1="-15.748" y1="-8.001" x2="-15.748" y2="8.001" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="1.905" x2="-6.731" y2="0" width="0.4064" layer="21"/>
+<wire x1="-6.731" y1="0" x2="-6.731" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="1.905" x2="-7.62" y2="0" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="0" x2="-7.62" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="15.24" y1="8.509" x2="15.748" y2="8.001" width="0.1524" layer="21" curve="-90"/>
+<wire x1="15.24" y1="-8.509" x2="15.748" y2="-8.001" width="0.1524" layer="21" curve="90"/>
+<wire x1="-15.748" y1="-8.001" x2="-15.24" y2="-8.509" width="0.1524" layer="21" curve="90"/>
+<wire x1="-15.748" y1="8.001" x2="-15.24" y2="8.509" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-11.557" y1="0" x2="-7.62" y2="0" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="0" x2="11.557" y2="0" width="0.1524" layer="21"/>
+<pad name="1" x="-13.716" y="0" drill="1.1938" shape="octagon"/>
+<pad name="2" x="13.716" y="0" drill="1.1938" shape="octagon"/>
+<text x="-15.24" y="8.89" size="1.778" layer="25" ratio="10">>NAME</text>
+<text x="-5.08" y="-2.54" size="1.778" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C0402K">
+<description><b>Ceramic Chip Capacitor KEMET 0204 Reflow solder</b><p>
+Metric Code Size 1005</description>
+<wire x1="-0.425" y1="0.2" x2="0.425" y2="0.2" width="0.1016" layer="51"/>
+<wire x1="0.425" y1="-0.2" x2="-0.425" y2="-0.2" width="0.1016" layer="51"/>
+<smd name="1" x="-0.6" y="0" dx="0.925" dy="0.74" layer="1"/>
+<smd name="2" x="0.6" y="0" dx="0.925" dy="0.74" layer="1"/>
+<text x="-0.5" y="0.425" size="1.016" layer="25">>NAME</text>
+<text x="-0.5" y="-1.45" size="1.016" layer="27">>VALUE</text>
+<rectangle x1="-0.5" y1="-0.25" x2="-0.225" y2="0.25" layer="51"/>
+<rectangle x1="0.225" y1="-0.25" x2="0.5" y2="0.25" layer="51"/>
+</package>
+<package name="C0603K">
+<description><b>Ceramic Chip Capacitor KEMET 0603 Reflow solder</b><p>
+Metric Code Size 1608</description>
+<wire x1="-0.725" y1="0.35" x2="0.725" y2="0.35" width="0.1016" layer="51"/>
+<wire x1="0.725" y1="-0.35" x2="-0.725" y2="-0.35" width="0.1016" layer="51"/>
+<smd name="1" x="-0.875" y="0" dx="1.05" dy="1.08" layer="1"/>
+<smd name="2" x="0.875" y="0" dx="1.05" dy="1.08" layer="1"/>
+<text x="-0.8" y="0.65" size="1.016" layer="25">>NAME</text>
+<text x="-0.8" y="-1.65" size="1.016" layer="27">>VALUE</text>
+<rectangle x1="-0.8" y1="-0.4" x2="-0.45" y2="0.4" layer="51"/>
+<rectangle x1="0.45" y1="-0.4" x2="0.8" y2="0.4" layer="51"/>
+</package>
+<package name="C0805K">
+<description><b>Ceramic Chip Capacitor KEMET 0805 Reflow solder</b><p>
+Metric Code Size 2012</description>
+<wire x1="-0.925" y1="0.6" x2="0.925" y2="0.6" width="0.1016" layer="51"/>
+<wire x1="0.925" y1="-0.6" x2="-0.925" y2="-0.6" width="0.1016" layer="51"/>
+<smd name="1" x="-1" y="0" dx="1.3" dy="1.6" layer="1"/>
+<smd name="2" x="1" y="0" dx="1.3" dy="1.6" layer="1"/>
+<text x="-1" y="0.875" size="1.016" layer="25">>NAME</text>
+<text x="-1" y="-1.9" size="1.016" layer="27">>VALUE</text>
+<rectangle x1="-1" y1="-0.65" x2="-0.5" y2="0.65" layer="51"/>
+<rectangle x1="0.5" y1="-0.65" x2="1" y2="0.65" layer="51"/>
+</package>
+<package name="C1206K">
+<description><b>Ceramic Chip Capacitor KEMET 1206 Reflow solder</b><p>
+Metric Code Size 3216</description>
+<wire x1="-1.525" y1="0.75" x2="1.525" y2="0.75" width="0.1016" layer="51"/>
+<wire x1="1.525" y1="-0.75" x2="-1.525" y2="-0.75" width="0.1016" layer="51"/>
+<smd name="1" x="-1.5" y="0" dx="1.5" dy="2" layer="1"/>
+<smd name="2" x="1.5" y="0" dx="1.5" dy="2" layer="1"/>
+<text x="-1.6" y="1.1" size="1.016" layer="25">>NAME</text>
+<text x="-1.6" y="-2.1" size="1.016" layer="27">>VALUE</text>
+<rectangle x1="-1.6" y1="-0.8" x2="-1.1" y2="0.8" layer="51"/>
+<rectangle x1="1.1" y1="-0.8" x2="1.6" y2="0.8" layer="51"/>
+</package>
+<package name="C1210K">
+<description><b>Ceramic Chip Capacitor KEMET 1210 Reflow solder</b><p>
+Metric Code Size 3225</description>
+<wire x1="-1.525" y1="1.175" x2="1.525" y2="1.175" width="0.1016" layer="51"/>
+<wire x1="1.525" y1="-1.175" x2="-1.525" y2="-1.175" width="0.1016" layer="51"/>
+<smd name="1" x="-1.5" y="0" dx="1.5" dy="2.9" layer="1"/>
+<smd name="2" x="1.5" y="0" dx="1.5" dy="2.9" layer="1"/>
+<text x="-1.6" y="1.55" size="1.016" layer="25">>NAME</text>
+<text x="-1.6" y="-2.575" size="1.016" layer="27">>VALUE</text>
+<rectangle x1="-1.6" y1="-1.25" x2="-1.1" y2="1.25" layer="51"/>
+<rectangle x1="1.1" y1="-1.25" x2="1.6" y2="1.25" layer="51"/>
+</package>
+<package name="C1812K">
+<description><b>Ceramic Chip Capacitor KEMET 1812 Reflow solder</b><p>
+Metric Code Size 4532</description>
+<wire x1="-2.175" y1="1.525" x2="2.175" y2="1.525" width="0.1016" layer="51"/>
+<wire x1="2.175" y1="-1.525" x2="-2.175" y2="-1.525" width="0.1016" layer="51"/>
+<smd name="1" x="-2.05" y="0" dx="1.8" dy="3.7" layer="1"/>
+<smd name="2" x="2.05" y="0" dx="1.8" dy="3.7" layer="1"/>
+<text x="-2.25" y="1.95" size="1.016" layer="25">>NAME</text>
+<text x="-2.25" y="-2.975" size="1.016" layer="27">>VALUE</text>
+<rectangle x1="-2.25" y1="-1.6" x2="-1.65" y2="1.6" layer="51"/>
+<rectangle x1="1.65" y1="-1.6" x2="2.25" y2="1.6" layer="51"/>
+</package>
+<package name="C1825K">
+<description><b>Ceramic Chip Capacitor KEMET 1825 Reflow solder</b><p>
+Metric Code Size 4564</description>
+<wire x1="-1.525" y1="3.125" x2="1.525" y2="3.125" width="0.1016" layer="51"/>
+<wire x1="1.525" y1="-3.125" x2="-1.525" y2="-3.125" width="0.1016" layer="51"/>
+<smd name="1" x="-1.5" y="0" dx="1.8" dy="6.9" layer="1"/>
+<smd name="2" x="1.5" y="0" dx="1.8" dy="6.9" layer="1"/>
+<text x="-1.6" y="3.55" size="1.016" layer="25">>NAME</text>
+<text x="-1.6" y="-4.625" size="1.016" layer="27">>VALUE</text>
+<rectangle x1="-1.6" y1="-3.2" x2="-1.1" y2="3.2" layer="51"/>
+<rectangle x1="1.1" y1="-3.2" x2="1.6" y2="3.2" layer="51"/>
+</package>
+<package name="C2220K">
+<description><b>Ceramic Chip Capacitor KEMET 2220 Reflow solder</b><p>
+Metric Code Size 5650</description>
+<wire x1="-2.725" y1="2.425" x2="2.725" y2="2.425" width="0.1016" layer="51"/>
+<wire x1="2.725" y1="-2.425" x2="-2.725" y2="-2.425" width="0.1016" layer="51"/>
+<smd name="1" x="-2.55" y="0" dx="1.85" dy="5.5" layer="1"/>
+<smd name="2" x="2.55" y="0" dx="1.85" dy="5.5" layer="1"/>
+<text x="-2.8" y="2.95" size="1.016" layer="25">>NAME</text>
+<text x="-2.8" y="-3.975" size="1.016" layer="27">>VALUE</text>
+<rectangle x1="-2.8" y1="-2.5" x2="-2.2" y2="2.5" layer="51"/>
+<rectangle x1="2.2" y1="-2.5" x2="2.8" y2="2.5" layer="51"/>
+</package>
+<package name="C2225K">
+<description><b>Ceramic Chip Capacitor KEMET 2225 Reflow solder</b><p>
+Metric Code Size 5664</description>
+<wire x1="-2.725" y1="3.075" x2="2.725" y2="3.075" width="0.1016" layer="51"/>
+<wire x1="2.725" y1="-3.075" x2="-2.725" y2="-3.075" width="0.1016" layer="51"/>
+<smd name="1" x="-2.55" y="0" dx="1.85" dy="6.8" layer="1"/>
+<smd name="2" x="2.55" y="0" dx="1.85" dy="6.8" layer="1"/>
+<text x="-2.8" y="3.6" size="1.016" layer="25">>NAME</text>
+<text x="-2.8" y="-4.575" size="1.016" layer="27">>VALUE</text>
+<rectangle x1="-2.8" y1="-3.15" x2="-2.2" y2="3.15" layer="51"/>
+<rectangle x1="2.2" y1="-3.15" x2="2.8" y2="3.15" layer="51"/>
+</package>
+<package name="J80">
+<description><b>chemi-con j80 capacitor</b><br>
+land pattern from <a href="https://engineering.purdue.edu/ece477/Webs/S06-Grp03/datasheets/PXA0703.pdf">https://engineering.purdue.edu/ece477/Webs/S06-Grp03/datasheets/PXA0703.pdf</a><br>
+same as for j12</description>
+<wire x1="-6" y1="2" x2="-6" y2="5" width="0.127" layer="21"/>
+<wire x1="-6" y1="5" x2="5" y2="5" width="0.127" layer="21"/>
+<wire x1="5" y1="5" x2="5" y2="4" width="0.127" layer="21"/>
+<wire x1="5" y1="4" x2="6" y2="4" width="0.127" layer="21"/>
+<wire x1="6" y1="4" x2="6" y2="2" width="0.127" layer="21"/>
+<wire x1="6" y1="-2" x2="6" y2="-4" width="0.127" layer="21"/>
+<wire x1="6" y1="-4" x2="5" y2="-4" width="0.127" layer="21"/>
+<wire x1="5" y1="-4" x2="5" y2="-5" width="0.127" layer="21"/>
+<wire x1="5" y1="-5" x2="-6" y2="-5" width="0.127" layer="21"/>
+<wire x1="-6" y1="-5" x2="-6" y2="-2" width="0.127" layer="21"/>
+<smd name="-" x="-4.45" y="0" dx="4.4" dy="2.2" layer="1"/>
+<smd name="+" x="4.45" y="0" dx="4.4" dy="2.2" layer="1"/>
+<rectangle x1="-5.9" y1="-5.3" x2="5.9" y2="5.3" layer="39"/>
+</package>
+<package name="D-PAK">
+<description><b>D-PAK (TO-252AA)</b><br>
+drawings at <a href="http://www.vishay.com/docs/95016/dpak252a.pdf">http://www.vishay.com/docs/95016/dpak252a.pdf</a></description>
+<smd name="CATHODE" x="0" y="2.585" dx="6.74" dy="6.23" layer="1"/>
+<smd name="ANODE$0" x="-2.28" y="-4.56" dx="1.624" dy="2.28" layer="1"/>
+<smd name="ANODE$1" x="2.28" y="-4.56" dx="1.624" dy="2.28" layer="1"/>
+<rectangle x1="-3.5" y1="-6.3" x2="3.5" y2="6.5" layer="39"/>
+</package>
+<package name="0603X4">
+<description>datasheet at <a href="http://www.passivecomponent.com/lh3/WA06X_J.pdf">http://www.passivecomponent.com/lh3/WA06X_J.pdf</a></description>
+<smd name="P2" x="-0.7" y="0.4" dx="0.7" dy="0.5" layer="1"/>
+<smd name="P7" x="0.7" y="0.4" dx="0.7" dy="0.5" layer="1"/>
+<smd name="P6" x="0.7" y="-0.4" dx="0.7" dy="0.5" layer="1"/>
+<smd name="P8" x="0.7" y="1.3" dx="0.7" dy="0.7" layer="1"/>
+<smd name="P5" x="0.7" y="-1.3" dx="0.7" dy="0.7" layer="1"/>
+<smd name="P3" x="-0.7" y="-0.4" dx="0.7" dy="0.5" layer="1"/>
+<smd name="P4" x="-0.7" y="-1.3" dx="0.7" dy="0.7" layer="1"/>
+<smd name="P1" x="-0.7" y="1.3" dx="0.7" dy="0.7" layer="1"/>
+</package>
+<package name="TSSOP-14">
+<circle x="-1.95" y="-1.3" radius="0.325" width="0.127" layer="21"/>
+<smd name="P11" x="0" y="2.8" dx="0.35" dy="1.6" layer="1"/>
+<smd name="P12" x="-0.65" y="2.8" dx="0.35" dy="1.6" layer="1"/>
+<smd name="P13" x="-1.3" y="2.8" dx="0.35" dy="1.6" layer="1"/>
+<smd name="P14" x="-1.95" y="2.8" dx="0.35" dy="1.6" layer="1"/>
+<smd name="P10" x="0.65" y="2.8" dx="0.35" dy="1.6" layer="1"/>
+<smd name="P9" x="1.3" y="2.8" dx="0.35" dy="1.6" layer="1"/>
+<smd name="P8" x="1.95" y="2.8" dx="0.35" dy="1.6" layer="1"/>
+<smd name="P4" x="0" y="-2.8" dx="0.35" dy="1.6" layer="1"/>
+<smd name="P5" x="0.65" y="-2.8" dx="0.35" dy="1.6" layer="1"/>
+<smd name="P6" x="1.3" y="-2.8" dx="0.35" dy="1.6" layer="1"/>
+<smd name="P7" x="1.95" y="-2.8" dx="0.35" dy="1.6" layer="1"/>
+<smd name="P3" x="-0.65" y="-2.8" dx="0.35" dy="1.6" layer="1"/>
+<smd name="P2" x="-1.3" y="-2.8" dx="0.35" dy="1.6" layer="1"/>
+<smd name="P1" x="-1.95" y="-2.8" dx="0.35" dy="1.6" layer="1"/>
+</package>
+<package name="LQH43">
+<smd name="P$1" x="-2.25" y="0" dx="3" dy="1.5" layer="1" rot="R180"/>
+<smd name="P$2" x="2.25" y="0" dx="3" dy="1.5" layer="1" rot="R180"/>
+<rectangle x1="-2.25" y1="-1.5" x2="-0.75" y2="1.5" layer="1"/>
+<rectangle x1="-2.35" y1="-1.6" x2="-0.65" y2="1.6" layer="29"/>
+<rectangle x1="0.65" y1="-1.6" x2="2.35" y2="1.6" layer="29"/>
+<rectangle x1="0.75" y1="-1.5" x2="2.25" y2="1.5" layer="1"/>
+</package>
+<package name="38720-7202">
+<description><b>barrier terminal block</b><br>
+drawings at <a href="http://www.molex.com/pdm_docs/sd/387207202_sd.pdf">http://www.molex.com/pdm_docs/sd/387207202_sd.pdf</a></description>
+<pad name="+" x="-4.765" y="0" drill="1.93" shape="square"/>
+<pad name="-" x="4.765" y="0" drill="1.93" shape="square"/>
+<text x="-5.3" y="8" size="1.778" layer="21" font="vector">+</text>
+<text x="-5.5" y="-10" size="1.778" layer="21" font="vector">+</text>
+<text x="4" y="-10" size="1.778" layer="21" font="vector">-</text>
+<text x="4" y="8" size="1.778" layer="21" font="vector">-</text>
+<rectangle x1="-10.565" y1="-7.9" x2="10.565" y2="7.9" layer="39"/>
+</package>
+<package name="TZA07A">
+<wire x1="-5.125" y1="12.7" x2="5.125" y2="12.7" width="0.127" layer="39"/>
+<wire x1="5.125" y1="12.7" x2="5.125" y2="-1.7" width="0.127" layer="39"/>
+<wire x1="5.125" y1="-1.7" x2="-5.125" y2="-1.7" width="0.127" layer="39"/>
+<wire x1="-5.125" y1="-1.7" x2="-5.125" y2="12.7" width="0.127" layer="39"/>
+<smd name="GND" x="0" y="7.305" dx="5.35" dy="8.54" layer="1"/>
+<smd name="P4" x="0" y="0" dx="3.06" dy="0.89" layer="1" rot="R90"/>
+<smd name="P3" x="-1.27" y="0" dx="3.06" dy="0.89" layer="1" rot="R90"/>
+<smd name="P2" x="-2.54" y="0" dx="3.06" dy="0.89" layer="1" rot="R90"/>
+<smd name="P1" x="-3.81" y="0" dx="3.06" dy="0.89" layer="1" rot="R90"/>
+<smd name="P5" x="1.27" y="0" dx="3.06" dy="0.89" layer="1" rot="R90"/>
+<smd name="P6" x="2.54" y="0" dx="3.06" dy="0.89" layer="1" rot="R90"/>
+<smd name="P7" x="3.81" y="0" dx="3.06" dy="0.89" layer="1" rot="R90"/>
+</package>
+<package name="39543-0202">
+<wire x1="-5" y1="3.2" x2="5" y2="3.2" width="0.127" layer="21"/>
+<wire x1="5" y1="3.2" x2="5" y2="-7.8" width="0.127" layer="21"/>
+<wire x1="5" y1="-7.8" x2="3.5" y2="-7.8" width="0.127" layer="21"/>
+<wire x1="3.5" y1="-7.8" x2="1.5" y2="-7.8" width="0.127" layer="21"/>
+<wire x1="1.5" y1="-7.8" x2="-1.5" y2="-7.8" width="0.127" layer="21"/>
+<wire x1="-1.5" y1="-7.8" x2="-3.5" y2="-7.8" width="0.127" layer="21"/>
+<wire x1="-3.5" y1="-7.8" x2="-5" y2="-7.8" width="0.127" layer="21"/>
+<wire x1="-5" y1="-7.8" x2="-5" y2="3.2" width="0.127" layer="21"/>
+<wire x1="-3.5" y1="-7.8" x2="-3.5" y2="-5.2" width="0.127" layer="21"/>
+<wire x1="-3.5" y1="-5.2" x2="-1.5" y2="-5.2" width="0.127" layer="21"/>
+<wire x1="-1.5" y1="-5.2" x2="-1.5" y2="-7.8" width="0.127" layer="21"/>
+<wire x1="3.5" y1="-7.8" x2="3.5" y2="-5.2" width="0.127" layer="21"/>
+<wire x1="3.5" y1="-5.2" x2="1.5" y2="-5.2" width="0.127" layer="21"/>
+<wire x1="1.5" y1="-5.2" x2="1.5" y2="-7.8" width="0.127" layer="21"/>
+<pad name="P$1" x="-2.5" y="0" drill="1.4" shape="long" rot="R90"/>
+<pad name="P$2" x="2.5" y="0" drill="1.4" shape="long" rot="R90"/>
+</package>
+<package name="SOD-123">
+<description><b>SOD-123 SMA package</b><br>
+using dimensions from <a href="http://www.onsemi.com/pub_link/Collateral/MMSZ5221BT1-D.PDF">http://www.onsemi.com/pub_link/Collateral/MMSZ5221BT1-D.PDF</a></description>
+<smd name="CATHODE" x="1.635" y="0" dx="0.91" dy="1.22" layer="1"/>
+<smd name="ANODE" x="-1.635" y="0" dx="0.91" dy="1.22" layer="1"/>
+<rectangle x1="0.1" y1="-1" x2="1.1" y2="1" layer="21"/>
+<rectangle x1="-2" y1="-0.9" x2="2" y2="0.9" layer="39"/>
+</package>
+<package name="SURFACEMOUNTRESISTORNETWORK9PIN">
+<smd name="P$1" x="-5.08" y="0" dx="3.048" dy="0.4318" layer="1" rot="R90"/>
+<smd name="P$2" x="-3.81" y="0" dx="3.048" dy="0.4318" layer="1" rot="R90"/>
+<smd name="P$3" x="-2.54" y="0" dx="3.048" dy="0.4318" layer="1" rot="R90"/>
+<smd name="P$4" x="-1.27" y="0" dx="3.048" dy="0.4318" layer="1" rot="R90"/>
+<smd name="P$5" x="0" y="0" dx="3.048" dy="0.4318" layer="1" rot="R90"/>
+<smd name="P$6" x="1.27" y="0" dx="3.048" dy="0.4318" layer="1" rot="R90"/>
+<smd name="P$7" x="2.54" y="0" dx="3.048" dy="0.4318" layer="1" rot="R90"/>
+<smd name="P$8" x="3.81" y="0" dx="3.048" dy="0.4318" layer="1" rot="R90"/>
+<smd name="P$9" x="5.08" y="0" dx="3.048" dy="0.4318" layer="1" rot="R90"/>
+</package>
+<package name="746X101">
+<smd name="P$1" x="-1.28" y="0.825" dx="0.8" dy="0.35" layer="1" rot="R90"/>
+<smd name="P$2" x="-0.64" y="0.825" dx="0.8" dy="0.35" layer="1" rot="R90"/>
+<smd name="P$3" x="0" y="0.825" dx="0.8" dy="0.35" layer="1" rot="R90"/>
+<smd name="P$4" x="0.64" y="0.825" dx="0.8" dy="0.35" layer="1" rot="R90"/>
+<smd name="P$5" x="1.28" y="0.825" dx="0.8" dy="0.35" layer="1" rot="R90"/>
+<smd name="P$6" x="1.28" y="-0.825" dx="0.8" dy="0.35" layer="1" rot="R90"/>
+<smd name="P$7" x="0.64" y="-0.825" dx="0.8" dy="0.35" layer="1" rot="R90"/>
+<smd name="P$8" x="0" y="-0.825" dx="0.8" dy="0.35" layer="1" rot="R90"/>
+<smd name="P$9" x="-0.64" y="-0.825" dx="0.8" dy="0.35" layer="1" rot="R90"/>
+<smd name="P$10" x="-1.28" y="-0.825" dx="0.8" dy="0.35" layer="1" rot="R90"/>
+</package>
+<package name="L1608">
+<smd name="P$1" x="-0.7" y="0" dx="0.8" dy="0.6" layer="1" rot="R90"/>
+<smd name="P$2" x="0.7" y="0" dx="0.8" dy="0.6" layer="1" rot="R90"/>
+</package>
+<package name="PLF1C271MDO1">
+<description><b>PLF1C271MDO1 cap</b><br>
+dimensions from <a href="http://products.nichicon.co.jp/en/pdf/XJA042/e-lf.pdf">http://products.nichicon.co.jp/en/pdf/XJA042/e-lf.pdf</a></description>
+<circle x="0" y="0" radius="4" width="0.127" layer="39"/>
+<pad name="+" x="-1.75" y="0" drill="0.9"/>
+<pad name="-" x="1.75" y="0" drill="0.9"/>
+<text x="-0.7" y="0.4" size="0.4064" layer="21" font="vector">+</text>
+<text x="0.4" y="0.4" size="0.4064" layer="21" font="vector">-</text>
+</package>
+<package name="RR71C331MDN1">
+<description><b>RR71C331MDN1 cap</b><br>
+dimensions from <a href="http://www.nichicon.co.jp/english/products/pdf/2009fpcap_catalog_r7.pdf">http://www.nichicon.co.jp/english/products/pdf/2009fpcap_catalog_r7.pdf</a></description>
+<circle x="0" y="0" radius="5" width="0.127" layer="39"/>
+<pad name="+" x="-2.5" y="0" drill="0.9"/>
+<pad name="-" x="2.5" y="0" drill="0.9"/>
+<text x="-1.3" y="0.4" size="0.4064" layer="21" font="vector">+</text>
+<text x="1.2" y="0.4" size="0.4064" layer="21" font="vector">-</text>
+</package>
+<package name="SOT223">
+<description><b>SOT-223</b></description>
+<wire x1="3.2766" y1="1.651" x2="3.2766" y2="-1.651" width="0.2032" layer="21"/>
+<wire x1="3.2766" y1="-1.651" x2="-3.2766" y2="-1.651" width="0.2032" layer="21"/>
+<wire x1="-3.2766" y1="-1.651" x2="-3.2766" y2="1.651" width="0.2032" layer="21"/>
+<wire x1="-3.2766" y1="1.651" x2="3.2766" y2="1.651" width="0.2032" layer="21"/>
+<smd name="1" x="-2.3114" y="-3.0988" dx="1.2192" dy="2.2352" layer="1"/>
+<smd name="2" x="0" y="-3.0988" dx="1.2192" dy="2.2352" layer="1"/>
+<smd name="3" x="2.3114" y="-3.0988" dx="1.2192" dy="2.2352" layer="1"/>
+<smd name="TAB" x="0" y="3.099" dx="3.6" dy="2.2" layer="1"/>
+<text x="-0.8255" y="4.5085" size="0.4064" layer="25">>NAME</text>
+<text x="-1.0795" y="-0.1905" size="0.4064" layer="27">>VALUE</text>
+<rectangle x1="-1.6002" y1="1.8034" x2="1.6002" y2="3.6576" layer="51"/>
+<rectangle x1="-0.4318" y1="-3.6576" x2="0.4318" y2="-1.8034" layer="51"/>
+<rectangle x1="-2.7432" y1="-3.6576" x2="-1.8796" y2="-1.8034" layer="51"/>
+<rectangle x1="1.8796" y1="-3.6576" x2="2.7432" y2="-1.8034" layer="51"/>
+<rectangle x1="-1.6002" y1="1.8034" x2="1.6002" y2="3.6576" layer="51"/>
+<rectangle x1="-0.4318" y1="-3.6576" x2="0.4318" y2="-1.8034" layer="51"/>
+<rectangle x1="-2.7432" y1="-3.6576" x2="-1.8796" y2="-1.8034" layer="51"/>
+<rectangle x1="1.8796" y1="-3.6576" x2="2.7432" y2="-1.8034" layer="51"/>
+</package>
+<package name="SOIC-14">
+<circle x="-3.65" y="-1.3" radius="0.325" width="0.127" layer="21"/>
+<smd name="P11" x="0" y="2.76" dx="0.58" dy="1.52" layer="1"/>
+<smd name="P12" x="-1.27" y="2.76" dx="0.58" dy="1.52" layer="1"/>
+<smd name="P13" x="-2.54" y="2.76" dx="0.58" dy="1.52" layer="1"/>
+<smd name="P14" x="-3.81" y="2.76" dx="0.58" dy="1.52" layer="1"/>
+<smd name="P10" x="1.27" y="2.76" dx="0.58" dy="1.52" layer="1"/>
+<smd name="P9" x="2.54" y="2.76" dx="0.58" dy="1.52" layer="1"/>
+<smd name="P8" x="3.81" y="2.76" dx="0.58" dy="1.52" layer="1"/>
+<smd name="P4" x="0" y="-2.76" dx="0.58" dy="1.52" layer="1"/>
+<smd name="P5" x="1.27" y="-2.76" dx="0.58" dy="1.52" layer="1"/>
+<smd name="P6" x="2.54" y="-2.76" dx="0.58" dy="1.52" layer="1"/>
+<smd name="P7" x="3.81" y="-2.76" dx="0.58" dy="1.52" layer="1"/>
+<smd name="P3" x="-1.27" y="-2.76" dx="0.58" dy="1.52" layer="1"/>
+<smd name="P2" x="-2.54" y="-2.76" dx="0.58" dy="1.52" layer="1"/>
+<smd name="P1" x="-3.81" y="-2.76" dx="0.58" dy="1.52" layer="1"/>
+</package>
+<package name="ELFH0225*">
+<description>Amphenol PCD ELFH0225*</description>
+<pad name="P$1" x="2.54" y="2.54" drill="1.4" shape="square" rot="R180"/>
+<pad name="P$2" x="-2.54" y="2.54" drill="1.4" shape="square" rot="R180"/>
+<rectangle x1="-5.9944" y1="-3.556" x2="5.9944" y2="6.223" layer="39" rot="R180"/>
+<text x="-3.81" y="6.35" size="1.27" layer="25">>NAME</text>
+<text x="-3.81" y="-5.08" size="1.27" layer="27">>VALUE</text>
+<wire x1="5.1562" y1="0.635" x2="5.1562" y2="4.445" width="0.2032" layer="21"/>
+<wire x1="-5.1562" y1="4.445" x2="-5.1562" y2="0.635" width="0.2032" layer="21"/>
+<wire x1="-5.1562" y1="0.635" x2="5.1562" y2="0.635" width="0.2032" layer="21"/>
+<wire x1="3.81" y1="4.445" x2="1.27" y2="4.445" width="0.2032" layer="21" curve="100"/>
+<wire x1="-1.27" y1="4.445" x2="-3.81" y2="4.445" width="0.2032" layer="21" curve="100"/>
+<wire x1="5.08" y1="4.445" x2="3.81" y2="4.445" width="0.2032" layer="21"/>
+<wire x1="1.27" y1="4.445" x2="-1.27" y2="4.445" width="0.2032" layer="21"/>
+<wire x1="-3.81" y1="4.445" x2="-5.08" y2="4.445" width="0.2032" layer="21"/>
+</package>
+</packages>
+<symbols>
+<symbol name="SWITCH">
+<wire x1="0" y1="5.08" x2="4.3226" y2="0.7574" width="0.254" layer="94"/>
+<wire x1="0" y1="-5.08" x2="0" y2="0" width="0.254" layer="94"/>
+<text x="-2.54" y="-2.54" size="1.27" layer="95" rot="R90">>NAME</text>
+<text x="7.62" y="-2.54" size="1.27" layer="96" rot="R90">>VALUE</text>
+<pin name="A" x="0" y="10.16" length="middle" direction="pas" swaplevel="1" rot="R270"/>
+<pin name="B" x="0" y="-10.16" length="middle" direction="pas" swaplevel="1" rot="R90"/>
+</symbol>
+<symbol name="PIN">
+<pin name="P$0" x="0" y="0" visible="pad" length="point"/>
+</symbol>
+<symbol name="ADUM3160">
+<wire x1="-20.32" y1="12.7" x2="20.32" y2="12.7" width="0.254" layer="94"/>
+<wire x1="20.32" y1="12.7" x2="20.32" y2="-12.7" width="0.254" layer="94"/>
+<wire x1="20.32" y1="-12.7" x2="-20.32" y2="-12.7" width="0.254" layer="94"/>
+<wire x1="-20.32" y1="-12.7" x2="-20.32" y2="12.7" width="0.254" layer="94"/>
+<text x="-22.86" y="-15.24" size="1.778" layer="95" rot="R90">ADUM3160 USB Isolator</text>
+<pin name="SPN" x="-2.54" y="15.24" length="short" rot="R270"/>
+<pin name="PIN" x="2.54" y="15.24" length="short" rot="R270"/>
+<pin name="DD-" x="7.62" y="15.24" length="short" rot="R270"/>
+<pin name="DD+" x="12.7" y="15.24" length="short" rot="R270"/>
+<pin name="GND2$1" x="17.78" y="15.24" length="short" rot="R270"/>
+<pin name="VDD2" x="-7.62" y="15.24" length="short" rot="R270"/>
+<pin name="GND2$0" x="-12.7" y="15.24" length="short" rot="R270"/>
+<pin name="VBUS2" x="-17.78" y="15.24" length="short" rot="R270"/>
+<pin name="VBUS1" x="-17.78" y="-15.24" length="short" rot="R90"/>
+<pin name="GND1$0" x="-12.7" y="-15.24" length="short" rot="R90"/>
+<pin name="VDD1" x="-7.62" y="-15.24" length="short" rot="R90"/>
+<pin name="PDEN" x="-2.54" y="-15.24" length="short" rot="R90"/>
+<pin name="SPU" x="2.54" y="-15.24" length="short" rot="R90"/>
+<pin name="UD-" x="7.62" y="-15.24" length="short" rot="R90"/>
+<pin name="UD+" x="12.7" y="-15.24" length="short" rot="R90"/>
+<pin name="GND1$1" x="17.78" y="-15.24" length="short" rot="R90"/>
+</symbol>
+<symbol name="ADXRS450">
+<wire x1="-20.32" y1="12.7" x2="20.32" y2="12.7" width="0.254" layer="94"/>
+<wire x1="20.32" y1="12.7" x2="20.32" y2="-12.7" width="0.254" layer="94"/>
+<wire x1="20.32" y1="-12.7" x2="-20.32" y2="-12.7" width="0.254" layer="94"/>
+<wire x1="-20.32" y1="-12.7" x2="-20.32" y2="12.7" width="0.254" layer="94"/>
+<text x="-22.86" y="-10.16" size="1.778" layer="95" rot="R90">ADXRS450 Gyro</text>
+<pin name="SCLK" x="-17.78" y="15.24" length="short" rot="R270"/>
+<pin name="MOSI" x="-12.7" y="15.24" length="short" rot="R270"/>
+<pin name="AVDD" x="-7.62" y="15.24" length="short" rot="R270"/>
+<pin name="DVSS" x="-2.54" y="15.24" length="short" rot="R270"/>
+<pin name="RSVD$3" x="2.54" y="15.24" length="short" rot="R270"/>
+<pin name="AVSS" x="7.62" y="15.24" length="short" rot="R270"/>
+<pin name="RSVD$2" x="12.7" y="15.24" length="short" rot="R270"/>
+<pin name="CP5" x="17.78" y="15.24" length="short" rot="R270"/>
+<pin name="VX" x="17.78" y="-15.24" length="short" rot="R90"/>
+<pin name="PSS" x="12.7" y="-15.24" length="short" rot="R90"/>
+<pin name="PDD" x="7.62" y="-15.24" length="short" rot="R90"/>
+<pin name="MISO" x="2.54" y="-15.24" length="short" rot="R90"/>
+<pin name="CS" x="-2.54" y="-15.24" length="short" rot="R90"/>
+<pin name="RSVD$1" x="-7.62" y="-15.24" length="short" rot="R90"/>
+<pin name="RSVD$0" x="-12.7" y="-15.24" length="short" rot="R90"/>
+<pin name="DVDD" x="-17.78" y="-15.24" length="short" rot="R90"/>
+</symbol>
+<symbol name="LM3481">
+<wire x1="-12.7" y1="12.7" x2="-12.7" y2="-12.7" width="0.254" layer="94"/>
+<wire x1="-12.7" y1="-12.7" x2="12.7" y2="-12.7" width="0.254" layer="94"/>
+<wire x1="12.7" y1="-12.7" x2="12.7" y2="12.7" width="0.254" layer="94"/>
+<wire x1="12.7" y1="12.7" x2="-12.7" y2="12.7" width="0.254" layer="94"/>
+<pin name="COMP" x="-15.24" y="0" length="short"/>
+<pin name="UVLO" x="-15.24" y="5.08" length="short"/>
+<pin name="ISEN" x="-15.24" y="10.16" length="short"/>
+<pin name="FB" x="-15.24" y="-5.08" length="short"/>
+<pin name="AGND" x="-15.24" y="-10.16" length="short"/>
+<pin name="FA/SYNC/SD" x="15.24" y="-10.16" length="short" rot="R180"/>
+<pin name="PGND" x="15.24" y="-5.08" length="short" rot="R180"/>
+<pin name="DR" x="15.24" y="0" length="short" rot="R180"/>
+<pin name="VCC" x="15.24" y="5.08" length="short" rot="R180"/>
+<pin name="VIN" x="15.24" y="10.16" length="short" rot="R180"/>
+</symbol>
+<symbol name="L-US">
+<wire x1="0" y1="5.08" x2="1.27" y2="3.81" width="0.254" layer="94" curve="-90" cap="flat"/>
+<wire x1="0" y1="2.54" x2="1.27" y2="3.81" width="0.254" layer="94" curve="90" cap="flat"/>
+<wire x1="0" y1="2.54" x2="1.27" y2="1.27" width="0.254" layer="94" curve="-90" cap="flat"/>
+<wire x1="0" y1="0" x2="1.27" y2="1.27" width="0.254" layer="94" curve="90" cap="flat"/>
+<wire x1="0" y1="0" x2="1.27" y2="-1.27" width="0.254" layer="94" curve="-90" cap="flat"/>
+<wire x1="0" y1="-2.54" x2="1.27" y2="-1.27" width="0.254" layer="94" curve="90" cap="flat"/>
+<wire x1="0" y1="-2.54" x2="1.27" y2="-3.81" width="0.254" layer="94" curve="-90" cap="flat"/>
+<wire x1="0" y1="-5.08" x2="1.27" y2="-3.81" width="0.254" layer="94" curve="90" cap="flat"/>
+<text x="-1.27" y="-5.08" size="1.778" layer="95" rot="R90">>NAME</text>
+<text x="3.81" y="-5.08" size="1.778" layer="96" rot="R90">>VALUE</text>
+<pin name="2" x="0" y="-7.62" visible="off" length="short" direction="pas" swaplevel="1" rot="R90"/>
+<pin name="1" x="0" y="7.62" visible="off" length="short" direction="pas" swaplevel="1" rot="R270"/>
+</symbol>
+<symbol name="N-MOSFET">
+<wire x1="0.762" y1="0.762" x2="0.762" y2="0" width="0.254" layer="94"/>
+<wire x1="0.762" y1="0" x2="0.762" y2="-0.762" width="0.254" layer="94"/>
+<wire x1="0.762" y1="3.175" x2="0.762" y2="2.54" width="0.254" layer="94"/>
+<wire x1="0.762" y1="2.54" x2="0.762" y2="1.905" width="0.254" layer="94"/>
+<wire x1="0.762" y1="0" x2="2.54" y2="0" width="0.1524" layer="94"/>
+<wire x1="2.54" y1="0" x2="2.54" y2="-2.54" width="0.1524" layer="94"/>
+<wire x1="0.762" y1="-1.905" x2="0.762" y2="-2.54" width="0.254" layer="94"/>
+<wire x1="0.762" y1="-2.54" x2="0.762" y2="-3.175" width="0.254" layer="94"/>
+<wire x1="0" y1="2.54" x2="0" y2="-2.54" width="0.254" layer="94"/>
+<wire x1="2.54" y1="-2.54" x2="0.762" y2="-2.54" width="0.1524" layer="94"/>
+<wire x1="3.81" y1="2.54" x2="3.81" y2="0.508" width="0.1524" layer="94"/>
+<wire x1="3.81" y1="0.508" x2="3.81" y2="-2.54" width="0.1524" layer="94"/>
+<wire x1="2.54" y1="-2.54" x2="3.81" y2="-2.54" width="0.1524" layer="94"/>
+<wire x1="0.762" y1="2.54" x2="3.81" y2="2.54" width="0.1524" layer="94"/>
+<wire x1="4.572" y1="0.762" x2="4.318" y2="0.508" width="0.1524" layer="94"/>
+<wire x1="4.318" y1="0.508" x2="3.81" y2="0.508" width="0.1524" layer="94"/>
+<wire x1="3.81" y1="0.508" x2="3.302" y2="0.508" width="0.1524" layer="94"/>
+<wire x1="3.302" y1="0.508" x2="3.048" y2="0.254" width="0.1524" layer="94"/>
+<circle x="2.54" y="-2.54" radius="0.3592" width="0" layer="94"/>
+<circle x="2.54" y="2.54" radius="0.3592" width="0" layer="94"/>
+<text x="-11.43" y="0" size="1.778" layer="96">>VALUE</text>
+<text x="-11.43" y="2.54" size="1.778" layer="95">>NAME</text>
+<pin name="S" x="2.54" y="-5.08" visible="off" length="short" direction="pas" rot="R90"/>
+<pin name="G" x="-2.54" y="-2.54" visible="off" length="short" direction="pas"/>
+<pin name="D" x="2.54" y="5.08" visible="off" length="short" direction="pas" rot="R270"/>
+<polygon width="0.1524" layer="94">
+<vertex x="3.81" y="0.508"/>
+<vertex x="3.302" y="-0.254"/>
+<vertex x="4.318" y="-0.254"/>
+</polygon>
+<polygon width="0.1524" layer="94">
+<vertex x="1.016" y="0"/>
+<vertex x="2.032" y="0.762"/>
+<vertex x="2.032" y="-0.762"/>
+</polygon>
+</symbol>
+<symbol name="N-MOSFET_EXTRA_PINS">
+<wire x1="0.762" y1="0.762" x2="0.762" y2="0" width="0.254" layer="94"/>
+<wire x1="0.762" y1="0" x2="0.762" y2="-0.762" width="0.254" layer="94"/>
+<wire x1="0.762" y1="3.175" x2="0.762" y2="2.54" width="0.254" layer="94"/>
+<wire x1="0.762" y1="2.54" x2="0.762" y2="1.905" width="0.254" layer="94"/>
+<wire x1="0.762" y1="0" x2="2.54" y2="0" width="0.1524" layer="94"/>
+<wire x1="2.54" y1="0" x2="2.54" y2="-2.54" width="0.1524" layer="94"/>
+<wire x1="0.762" y1="-1.905" x2="0.762" y2="-2.54" width="0.254" layer="94"/>
+<wire x1="0.762" y1="-2.54" x2="0.762" y2="-3.175" width="0.254" layer="94"/>
+<wire x1="0" y1="2.54" x2="0" y2="-2.54" width="0.254" layer="94"/>
+<wire x1="2.54" y1="-2.54" x2="0.762" y2="-2.54" width="0.1524" layer="94"/>
+<wire x1="3.81" y1="2.54" x2="3.81" y2="0.508" width="0.1524" layer="94"/>
+<wire x1="3.81" y1="0.508" x2="3.81" y2="-2.54" width="0.1524" layer="94"/>
+<wire x1="2.54" y1="-2.54" x2="3.81" y2="-2.54" width="0.1524" layer="94"/>
+<wire x1="0.762" y1="2.54" x2="3.81" y2="2.54" width="0.1524" layer="94"/>
+<wire x1="4.572" y1="0.762" x2="4.318" y2="0.508" width="0.1524" layer="94"/>
+<wire x1="4.318" y1="0.508" x2="3.81" y2="0.508" width="0.1524" layer="94"/>
+<wire x1="3.81" y1="0.508" x2="3.302" y2="0.508" width="0.1524" layer="94"/>
+<wire x1="3.302" y1="0.508" x2="3.048" y2="0.254" width="0.1524" layer="94"/>
+<circle x="2.54" y="-2.54" radius="0.3592" width="0" layer="94"/>
+<circle x="2.54" y="2.54" radius="0.3592" width="0" layer="94"/>
+<text x="-11.43" y="0" size="1.778" layer="96">>VALUE</text>
+<text x="-11.43" y="2.54" size="1.778" layer="95">>NAME</text>
+<pin name="S" x="2.54" y="-5.08" visible="off" length="short" direction="pas" swaplevel="2" rot="R90"/>
+<pin name="G" x="-2.54" y="-2.54" visible="off" length="short" direction="pas"/>
+<pin name="D" x="2.54" y="5.08" visible="off" length="short" direction="pas" swaplevel="1" rot="R270"/>
+<pin name="S$1" x="5.08" y="-5.08" visible="off" length="short" direction="pas" swaplevel="2" rot="R90"/>
+<pin name="S$2" x="7.62" y="-5.08" visible="off" length="short" direction="pas" swaplevel="2" rot="R90"/>
+<pin name="D$1" x="5.08" y="5.08" visible="off" length="short" direction="pas" swaplevel="1" rot="R270"/>
+<pin name="D$2" x="7.62" y="5.08" visible="off" length="short" direction="pas" swaplevel="1" rot="R270"/>
+<pin name="D$3" x="10.16" y="5.08" visible="off" length="short" direction="pas" swaplevel="1" rot="R270"/>
+<pin name="D$4" x="12.7" y="5.08" visible="off" length="short" direction="pas" swaplevel="1" rot="R270"/>
+<polygon width="0.1524" layer="94">
+<vertex x="3.81" y="0.508"/>
+<vertex x="3.302" y="-0.254"/>
+<vertex x="4.318" y="-0.254"/>
+</polygon>
+<polygon width="0.1524" layer="94">
+<vertex x="1.016" y="0"/>
+<vertex x="2.032" y="0.762"/>
+<vertex x="2.032" y="-0.762"/>
+</polygon>
+</symbol>
+<symbol name="USB">
+<wire x1="-5.08" y1="1.27" x2="-5.08" y2="-8.89" width="0.254" layer="94"/>
+<wire x1="-5.08" y1="-8.89" x2="-12.7" y2="-8.89" width="0.254" layer="94"/>
+<wire x1="-12.7" y1="1.27" x2="-5.08" y2="1.27" width="0.254" layer="94"/>
+<text x="-8.89" y="0" size="2.54" layer="94" rot="R270">USB</text>
+<text x="-11.43" y="-13.97" size="1.27" layer="94" rot="R90">Case</text>
+<pin name="GND" x="0" y="0" visible="pad" length="middle" rot="R180"/>
+<pin name="VBUS" x="0" y="-2.54" visible="pad" length="middle" rot="R180"/>
+<pin name="D-" x="0" y="-5.08" visible="pad" length="middle" rot="R180"/>
+<pin name="D+" x="0" y="-7.62" visible="pad" length="middle" rot="R180"/>
+<pin name="CASE1V" x="-10.16" y="-12.7" visible="off" length="middle" rot="R90"/>
+<pin name="CASE2" x="-7.62" y="-12.7" visible="off" length="middle" rot="R90"/>
+</symbol>
+<symbol name="RJ16">
+<wire x1="1.905" y1="5.715" x2="0" y2="5.715" width="0.254" layer="94"/>
+<wire x1="0" y1="5.715" x2="0" y2="4.445" width="0.254" layer="94"/>
+<wire x1="0" y1="4.445" x2="1.905" y2="4.445" width="0.254" layer="94"/>
+<wire x1="1.905" y1="3.175" x2="0" y2="3.175" width="0.254" layer="94"/>
+<wire x1="0" y1="3.175" x2="0" y2="1.905" width="0.254" layer="94"/>
+<wire x1="0" y1="1.905" x2="1.905" y2="1.905" width="0.254" layer="94"/>
+<wire x1="1.905" y1="0.635" x2="0" y2="0.635" width="0.254" layer="94"/>
+<wire x1="0" y1="0.635" x2="0" y2="-0.635" width="0.254" layer="94"/>
+<wire x1="0" y1="-0.635" x2="1.905" y2="-0.635" width="0.254" layer="94"/>
+<wire x1="1.905" y1="-1.905" x2="0" y2="-1.905" width="0.254" layer="94"/>
+<wire x1="0" y1="-1.905" x2="0" y2="-3.175" width="0.254" layer="94"/>
+<wire x1="0" y1="-3.175" x2="1.905" y2="-3.175" width="0.254" layer="94"/>
+<wire x1="1.905" y1="-4.445" x2="0" y2="-4.445" width="0.254" layer="94"/>
+<wire x1="0" y1="-4.445" x2="0" y2="-5.715" width="0.254" layer="94"/>
+<wire x1="0" y1="-5.715" x2="1.905" y2="-5.715" width="0.254" layer="94"/>
+<wire x1="1.905" y1="-6.985" x2="0" y2="-6.985" width="0.254" layer="94"/>
+<wire x1="0" y1="-6.985" x2="0" y2="-8.255" width="0.254" layer="94"/>
+<wire x1="0" y1="-8.255" x2="1.905" y2="-8.255" width="0.254" layer="94"/>
+<wire x1="5.715" y1="-5.715" x2="10.16" y2="-5.715" width="0.254" layer="94"/>
+<wire x1="10.16" y1="-5.715" x2="10.16" y2="-3.175" width="0.254" layer="94"/>
+<wire x1="10.16" y1="-3.175" x2="11.43" y2="-3.175" width="0.254" layer="94"/>
+<wire x1="11.43" y1="-3.175" x2="11.43" y2="0.635" width="0.254" layer="94"/>
+<wire x1="11.43" y1="0.635" x2="10.16" y2="0.635" width="0.254" layer="94"/>
+<wire x1="10.16" y1="0.635" x2="10.16" y2="3.175" width="0.254" layer="94"/>
+<wire x1="10.16" y1="3.175" x2="5.715" y2="3.175" width="0.254" layer="94"/>
+<wire x1="5.715" y1="3.175" x2="5.715" y2="1.905" width="0.254" layer="94"/>
+<wire x1="5.715" y1="1.905" x2="5.715" y2="0.635" width="0.254" layer="94"/>
+<wire x1="5.715" y1="0.635" x2="5.715" y2="-0.635" width="0.254" layer="94"/>
+<wire x1="5.715" y1="-0.635" x2="5.715" y2="-1.905" width="0.254" layer="94"/>
+<wire x1="5.715" y1="-1.905" x2="5.715" y2="-3.175" width="0.254" layer="94"/>
+<wire x1="5.715" y1="-3.175" x2="5.715" y2="-4.445" width="0.254" layer="94"/>
+<wire x1="5.715" y1="-4.445" x2="5.715" y2="-5.715" width="0.254" layer="94"/>
+<wire x1="5.715" y1="1.905" x2="6.985" y2="1.905" width="0.254" layer="94"/>
+<wire x1="5.715" y1="0.635" x2="6.985" y2="0.635" width="0.254" layer="94"/>
+<wire x1="5.715" y1="-0.635" x2="6.985" y2="-0.635" width="0.254" layer="94"/>
+<wire x1="5.715" y1="-1.905" x2="6.985" y2="-1.905" width="0.254" layer="94"/>
+<wire x1="5.715" y1="-3.175" x2="6.985" y2="-3.175" width="0.254" layer="94"/>
+<wire x1="5.715" y1="-4.445" x2="6.985" y2="-4.445" width="0.254" layer="94"/>
+<text x="7.62" y="-7.62" size="1.27" layer="94">Case</text>
+<pin name="1" x="-5.08" y="5.08" visible="pin" length="middle"/>
+<pin name="2" x="-5.08" y="2.54" visible="pin" length="middle"/>
+<pin name="3" x="-5.08" y="0" visible="pin" length="middle"/>
+<pin name="4" x="-5.08" y="-2.54" visible="pin" length="middle"/>
+<pin name="5" x="-5.08" y="-5.08" visible="pin" length="middle"/>
+<pin name="6" x="-5.08" y="-7.62" visible="pin" length="middle"/>
+<pin name="P$1" x="7.62" y="-12.7" visible="off" length="middle" rot="R90"/>
+<pin name="P$2" x="10.16" y="-12.7" visible="off" length="middle" rot="R90"/>
+</symbol>
+<symbol name="EMI_PI_FILTER">
+<wire x1="-2.54" y1="0" x2="-2.54" y2="-2.032" width="0.254" layer="94"/>
+<wire x1="-2.54" y1="0" x2="0" y2="0" width="0.254" layer="94"/>
+<wire x1="0" y1="0" x2="0" y2="-2.032" width="0.254" layer="94"/>
+<wire x1="-1.524" y1="-2.032" x2="-2.54" y2="-2.032" width="0.254" layer="94"/>
+<wire x1="-2.54" y1="-2.032" x2="-3.556" y2="-2.032" width="0.254" layer="94"/>
+<wire x1="-3.556" y1="-2.032" x2="-4.064" y2="-1.524" width="0.254" layer="94"/>
+<wire x1="-1.524" y1="-2.032" x2="-1.016" y2="-2.54" width="0.254" layer="94"/>
+<wire x1="-2.54" y1="-2.032" x2="-3.302" y2="-3.302" width="0.254" layer="94"/>
+<wire x1="-3.302" y1="-3.302" x2="-2.54" y2="-3.302" width="0.254" layer="94"/>
+<wire x1="-2.54" y1="-3.302" x2="-1.778" y2="-3.302" width="0.254" layer="94"/>
+<wire x1="-1.778" y1="-3.302" x2="-2.54" y2="-2.032" width="0.254" layer="94"/>
+<wire x1="-2.54" y1="-3.302" x2="-2.54" y2="-5.08" width="0.254" layer="94"/>
+<wire x1="-2.54" y1="-5.08" x2="-3.302" y2="-5.08" width="0.254" layer="94"/>
+<wire x1="-2.54" y1="-5.08" x2="-1.778" y2="-5.08" width="0.254" layer="94"/>
+<wire x1="-0.762" y1="-2.032" x2="0.762" y2="-2.032" width="0.254" layer="94"/>
+<wire x1="-0.762" y1="-2.794" x2="0" y2="-2.794" width="0.254" layer="94"/>
+<wire x1="0" y1="-2.794" x2="0.762" y2="-2.794" width="0.254" layer="94"/>
+<wire x1="0" y1="-2.794" x2="0" y2="-5.08" width="0.254" layer="94"/>
+<wire x1="-0.762" y1="-5.08" x2="0.762" y2="-5.08" width="0.254" layer="94"/>
+<wire x1="7.62" y1="0" x2="7.62" y2="-2.032" width="0.254" layer="94"/>
+<wire x1="7.62" y1="0" x2="5.08" y2="0" width="0.254" layer="94"/>
+<wire x1="5.08" y1="0" x2="5.08" y2="-2.032" width="0.254" layer="94"/>
+<wire x1="8.636" y1="-2.032" x2="7.62" y2="-2.032" width="0.254" layer="94"/>
+<wire x1="7.62" y1="-2.032" x2="6.604" y2="-2.032" width="0.254" layer="94"/>
+<wire x1="6.604" y1="-2.032" x2="6.096" y2="-1.524" width="0.254" layer="94"/>
+<wire x1="8.636" y1="-2.032" x2="9.144" y2="-2.54" width="0.254" layer="94"/>
+<wire x1="7.62" y1="-2.032" x2="6.858" y2="-3.302" width="0.254" layer="94"/>
+<wire x1="6.858" y1="-3.302" x2="7.62" y2="-3.302" width="0.254" layer="94"/>
+<wire x1="7.62" y1="-3.302" x2="8.382" y2="-3.302" width="0.254" layer="94"/>
+<wire x1="8.382" y1="-3.302" x2="7.62" y2="-2.032" width="0.254" layer="94"/>
+<wire x1="7.62" y1="-3.302" x2="7.62" y2="-5.08" width="0.254" layer="94"/>
+<wire x1="7.62" y1="-5.08" x2="6.858" y2="-5.08" width="0.254" layer="94"/>
+<wire x1="7.62" y1="-5.08" x2="8.382" y2="-5.08" width="0.254" layer="94"/>
+<wire x1="4.318" y1="-2.032" x2="5.842" y2="-2.032" width="0.254" layer="94"/>
+<wire x1="4.318" y1="-2.794" x2="5.08" y2="-2.794" width="0.254" layer="94"/>
+<wire x1="5.08" y1="-2.794" x2="5.842" y2="-2.794" width="0.254" layer="94"/>
+<wire x1="5.08" y1="-2.794" x2="5.08" y2="-5.08" width="0.254" layer="94"/>
+<wire x1="4.318" y1="-5.08" x2="5.08" y2="-5.08" width="0.254" layer="94"/>
+<wire x1="5.08" y1="-5.08" x2="5.842" y2="-5.08" width="0.254" layer="94"/>
+<wire x1="0" y1="0" x2="1.016" y2="0" width="0.254" layer="94"/>
+<wire x1="1.016" y1="0" x2="1.524" y2="0.762" width="0.254" layer="94"/>
+<wire x1="1.524" y1="0.762" x2="2.032" y2="-0.508" width="0.254" layer="94"/>
+<wire x1="2.032" y1="-0.508" x2="2.54" y2="0.762" width="0.254" layer="94"/>
+<wire x1="2.54" y1="0.762" x2="3.048" y2="-0.508" width="0.254" layer="94"/>
+<wire x1="3.048" y1="-0.508" x2="3.556" y2="0.762" width="0.254" layer="94"/>
+<wire x1="3.556" y1="0.762" x2="4.064" y2="0" width="0.254" layer="94"/>
+<wire x1="4.064" y1="0" x2="5.08" y2="0" width="0.254" layer="94"/>
+<pin name="P$1" x="-5.08" y="0" visible="off" length="middle"/>
+<pin name="P$2" x="10.16" y="0" visible="off" length="middle" rot="R180"/>
+</symbol>
+<symbol name="GND">
+<wire x1="2.54" y1="-5.08" x2="-2.54" y2="-5.08" width="0.254" layer="94"/>
+<pin name="GND" x="0" y="-2.54" visible="off" length="short" direction="pwr" rot="R270"/>
+</symbol>
+<symbol name="C-US">
+<wire x1="-2.54" y1="0" x2="2.54" y2="0" width="0.254" layer="94"/>
+<wire x1="0" y1="-1.016" x2="0" y2="-2.54" width="0.1524" layer="94"/>
+<wire x1="0" y1="-1" x2="2.4892" y2="-1.8542" width="0.254" layer="94" curve="-37.878202" cap="flat"/>
+<wire x1="-2.4668" y1="-1.8504" x2="0" y2="-1.0161" width="0.254" layer="94" curve="-37.373024" cap="flat"/>
+<text x="1.016" y="0.635" size="1.778" layer="95">>NAME</text>
+<text x="1.016" y="-4.191" size="1.778" layer="96">>VALUE</text>
+<pin name="1" x="0" y="2.54" visible="off" length="short" direction="pas" swaplevel="1" rot="R270"/>
+<pin name="2" x="0" y="-5.08" visible="off" length="short" direction="pas" swaplevel="1" rot="R90"/>
+</symbol>
+<symbol name="DIODE_2">
+<wire x1="-1.27" y1="-1.27" x2="1.27" y2="0" width="0.254" layer="94"/>
+<wire x1="1.27" y1="0" x2="-1.27" y2="1.27" width="0.254" layer="94"/>
+<wire x1="1.27" y1="1.27" x2="1.27" y2="0" width="0.254" layer="94"/>
+<wire x1="-1.27" y1="1.27" x2="-1.27" y2="-1.27" width="0.254" layer="94"/>
+<wire x1="1.27" y1="0" x2="1.27" y2="-1.27" width="0.254" layer="94"/>
+<text x="2.54" y="0.4826" size="1.778" layer="95">>NAME</text>
+<text x="2.54" y="-2.3114" size="1.778" layer="96">>VALUE</text>
+<pin name="A" x="-2.54" y="0" visible="off" length="short" direction="pas" swaplevel="1"/>
+<pin name="C" x="2.54" y="0" visible="off" length="short" direction="pas" rot="R180"/>
+<pin name="A1" x="-2.54" y="2.54" visible="off" length="short" direction="pas" swaplevel="1"/>
+</symbol>
+<symbol name="RESISTOR">
+<wire x1="-2.54" y1="0" x2="-1.778" y2="1.524" width="0.254" layer="94"/>
+<wire x1="-1.778" y1="1.524" x2="-0.762" y2="-0.762" width="0.254" layer="94"/>
+<wire x1="-0.762" y1="-0.762" x2="0" y2="1.524" width="0.254" layer="94"/>
+<wire x1="0" y1="1.524" x2="1.016" y2="-0.762" width="0.254" layer="94"/>
+<wire x1="1.016" y1="-0.762" x2="1.778" y2="1.524" width="0.254" layer="94"/>
+<wire x1="1.778" y1="1.524" x2="2.54" y2="0" width="0.254" layer="94"/>
+<wire x1="2.54" y1="0" x2="5.08" y2="0" width="0.254" layer="94"/>
+<wire x1="-5.08" y1="0" x2="-2.54" y2="0" width="0.254" layer="94"/>
+<pin name="R1" x="-5.08" y="0" visible="off" length="short"/>
+<pin name="R2" x="5.08" y="0" visible="off" length="short" rot="R180"/>
+</symbol>
+<symbol name="OP-AMP">
+<wire x1="-2.54" y1="5.08" x2="-2.54" y2="-5.08" width="0.254" layer="94"/>
+<wire x1="-2.54" y1="-5.08" x2="5.08" y2="0" width="0.254" layer="94"/>
+<wire x1="5.08" y1="0" x2="-2.54" y2="5.08" width="0.254" layer="94"/>
+<text x="-2.54" y="2.54" size="1.27" layer="94" rot="R90">+</text>
+<text x="-2.54" y="-2.54" size="1.27" layer="94" rot="R180">-</text>
+<pin name="+" x="-7.62" y="2.54" visible="off" length="middle"/>
+<pin name="-" x="-7.62" y="-2.54" visible="off" length="middle"/>
+<pin name="OUT" x="10.16" y="0" visible="off" length="middle" rot="R180"/>
+</symbol>
+<symbol name="PWR">
+<wire x1="0" y1="5.08" x2="-1.27" y2="2.54" width="0.254" layer="94"/>
+<wire x1="-1.27" y1="2.54" x2="1.27" y2="2.54" width="0.254" layer="94"/>
+<wire x1="1.27" y1="2.54" x2="0" y2="5.08" width="0.254" layer="94"/>
+<pin name="V+" x="0" y="0" visible="off" length="short" rot="R90"/>
+</symbol>
+<symbol name="INDUCTOR">
+<wire x1="-2.54" y1="0" x2="-1.27" y2="0" width="0.254" layer="94" curve="-180"/>
+<wire x1="-1.27" y1="0" x2="0" y2="0" width="0.254" layer="94" curve="-180"/>
+<wire x1="0" y1="0" x2="1.27" y2="0" width="0.254" layer="94" curve="-180"/>
+<wire x1="1.27" y1="0" x2="2.54" y2="0" width="0.254" layer="94" curve="-180"/>
+<pin name="P$1" x="-5.08" y="0" visible="off" length="short"/>
+<pin name="P$2" x="5.08" y="0" visible="off" length="short" rot="R180"/>
+</symbol>
+<symbol name="38720-7202">
+<wire x1="-7.62" y1="5.08" x2="7.62" y2="5.08" width="0.254" layer="94"/>
+<wire x1="7.62" y1="5.08" x2="7.62" y2="-5.08" width="0.254" layer="94"/>
+<wire x1="7.62" y1="-5.08" x2="-7.62" y2="-5.08" width="0.254" layer="94"/>
+<wire x1="-7.62" y1="-5.08" x2="-7.62" y2="5.08" width="0.254" layer="94"/>
+<pin name="+" x="-5.08" y="7.62" length="middle" rot="R270"/>
+<pin name="-" x="5.08" y="7.62" length="middle" rot="R270"/>
+</symbol>
+<symbol name="SIMPLESWITCHER">
+<wire x1="-10.16" y1="7.62" x2="-10.16" y2="-5.08" width="0.254" layer="94"/>
+<wire x1="-10.16" y1="-5.08" x2="10.16" y2="-5.08" width="0.254" layer="94"/>
+<wire x1="10.16" y1="-5.08" x2="10.16" y2="7.62" width="0.254" layer="94"/>
+<text x="-5.08" y="5.08" size="1.27" layer="94">LMZ12002</text>
+<pin name="VIN" x="-7.62" y="-10.16" visible="pin" length="middle" rot="R90"/>
+<pin name="RON" x="-5.08" y="-10.16" visible="pin" length="middle" rot="R90"/>
+<pin name="EN" x="-2.54" y="-10.16" visible="pin" length="middle" rot="R90"/>
+<pin name="GND" x="0" y="-10.16" visible="pin" length="middle" rot="R90"/>
+<pin name="SS" x="2.54" y="-10.16" visible="pin" length="middle" rot="R90"/>
+<pin name="FB" x="5.08" y="-10.16" visible="pin" length="middle" rot="R90"/>
+<pin name="VOUT" x="7.62" y="-10.16" visible="pin" length="middle" rot="R90"/>
+<pin name="CGND" x="-15.24" y="2.54" visible="pin" length="middle"/>
+</symbol>
+<symbol name="TERMINAL">
+<wire x1="0" y1="7.62" x2="-7.62" y2="7.62" width="0.254" layer="94"/>
+<wire x1="-7.62" y1="7.62" x2="-7.62" y2="-7.62" width="0.254" layer="94"/>
+<wire x1="-7.62" y1="-7.62" x2="0" y2="-7.62" width="0.254" layer="94"/>
+<wire x1="0" y1="-7.62" x2="0" y2="7.62" width="0.254" layer="94"/>
+<wire x1="-2.54" y1="5.08" x2="-5.08" y2="2.54" width="0.254" layer="94"/>
+<wire x1="-2.54" y1="2.54" x2="-5.08" y2="5.08" width="0.254" layer="94"/>
+<wire x1="-2.54" y1="-2.54" x2="-5.08" y2="-5.08" width="0.254" layer="94"/>
+<wire x1="-2.54" y1="-5.08" x2="-5.08" y2="-2.54" width="0.254" layer="94"/>
+<pin name="P$1" x="5.08" y="2.54" visible="off" length="middle" rot="R180"/>
+<pin name="P$2" x="5.08" y="-2.54" visible="off" length="middle" rot="R180"/>
+<text x="-8.128" y="8.636" size="1.778" layer="95">>NAME</text>
+<text x="-8.382" y="-9.906" size="1.778" layer="96">>VALUE</text>
+</symbol>
+<symbol name="DIODE">
+<wire x1="-1.27" y1="-1.27" x2="1.27" y2="0" width="0.254" layer="94"/>
+<wire x1="1.27" y1="0" x2="-1.27" y2="1.27" width="0.254" layer="94"/>
+<wire x1="1.27" y1="1.27" x2="1.27" y2="0" width="0.254" layer="94"/>
+<wire x1="-1.27" y1="1.27" x2="-1.27" y2="-1.27" width="0.254" layer="94"/>
+<wire x1="1.27" y1="0" x2="1.27" y2="-1.27" width="0.254" layer="94"/>
+<text x="2.54" y="0.4826" size="1.778" layer="95">>NAME</text>
+<text x="2.54" y="-2.3114" size="1.778" layer="96">>VALUE</text>
+<pin name="A" x="-2.54" y="0" visible="off" length="short" direction="pas"/>
+<pin name="C" x="2.54" y="0" visible="off" length="short" direction="pas" rot="R180"/>
+</symbol>
+<symbol name="ZENER_DIODE">
+<wire x1="-1.27" y1="-1.27" x2="1.27" y2="0" width="0.254" layer="94"/>
+<wire x1="1.27" y1="0" x2="-1.27" y2="1.27" width="0.254" layer="94"/>
+<wire x1="1.27" y1="1.27" x2="1.27" y2="0" width="0.254" layer="94"/>
+<wire x1="-1.27" y1="1.27" x2="-1.27" y2="-1.27" width="0.254" layer="94"/>
+<wire x1="1.27" y1="0" x2="1.27" y2="-1.27" width="0.254" layer="94"/>
+<wire x1="1.27" y1="1.27" x2="0" y2="2.54" width="0.254" layer="94"/>
+<wire x1="1.27" y1="-1.27" x2="2.54" y2="-2.54" width="0.254" layer="94"/>
+<text x="2.54" y="0.4826" size="1.778" layer="95">>NAME</text>
+<pin name="A" x="-2.54" y="0" visible="off" length="short" direction="pas"/>
+<pin name="C" x="2.54" y="0" visible="off" length="short" direction="pas" rot="R180"/>
+</symbol>
+<symbol name="BUSSED_RESISTORS">
+<wire x1="0" y1="10.16" x2="-0.508" y2="11.176" width="0.254" layer="94"/>
+<wire x1="-0.508" y1="11.176" x2="-1.524" y2="9.144" width="0.254" layer="94"/>
+<wire x1="-1.524" y1="9.144" x2="-2.54" y2="11.176" width="0.254" layer="94"/>
+<wire x1="-2.54" y1="11.176" x2="-3.556" y2="9.144" width="0.254" layer="94"/>
+<wire x1="-7.62" y1="10.16" x2="-7.62" y2="12.7" width="0.254" layer="94"/>
+<wire x1="-3.556" y1="9.144" x2="-4.572" y2="11.176" width="0.254" layer="94"/>
+<wire x1="-4.572" y1="11.176" x2="-5.588" y2="9.144" width="0.254" layer="94"/>
+<wire x1="-5.588" y1="9.144" x2="-6.096" y2="10.16" width="0.254" layer="94"/>
+<wire x1="-6.096" y1="10.16" x2="-7.62" y2="10.16" width="0.254" layer="94"/>
+<wire x1="0" y1="7.62" x2="-0.508" y2="8.636" width="0.254" layer="94"/>
+<wire x1="-0.508" y1="8.636" x2="-1.524" y2="6.604" width="0.254" layer="94"/>
+<wire x1="-1.524" y1="6.604" x2="-2.54" y2="8.636" width="0.254" layer="94"/>
+<wire x1="-2.54" y1="8.636" x2="-3.556" y2="6.604" width="0.254" layer="94"/>
+<wire x1="-7.62" y1="7.62" x2="-7.62" y2="10.16" width="0.254" layer="94"/>
+<wire x1="-3.556" y1="6.604" x2="-4.572" y2="8.636" width="0.254" layer="94"/>
+<wire x1="-4.572" y1="8.636" x2="-5.588" y2="6.604" width="0.254" layer="94"/>
+<wire x1="-5.588" y1="6.604" x2="-6.096" y2="7.62" width="0.254" layer="94"/>
+<wire x1="-6.096" y1="7.62" x2="-7.62" y2="7.62" width="0.254" layer="94"/>
+<wire x1="0" y1="5.08" x2="-0.508" y2="6.096" width="0.254" layer="94"/>
+<wire x1="-0.508" y1="6.096" x2="-1.524" y2="4.064" width="0.254" layer="94"/>
+<wire x1="-1.524" y1="4.064" x2="-2.54" y2="6.096" width="0.254" layer="94"/>
+<wire x1="-2.54" y1="6.096" x2="-3.556" y2="4.064" width="0.254" layer="94"/>
+<wire x1="-7.62" y1="5.08" x2="-7.62" y2="7.62" width="0.254" layer="94"/>
+<wire x1="-3.556" y1="4.064" x2="-4.572" y2="6.096" width="0.254" layer="94"/>
+<wire x1="-4.572" y1="6.096" x2="-5.588" y2="4.064" width="0.254" layer="94"/>
+<wire x1="-5.588" y1="4.064" x2="-6.096" y2="5.08" width="0.254" layer="94"/>
+<wire x1="-6.096" y1="5.08" x2="-7.62" y2="5.08" width="0.254" layer="94"/>
+<wire x1="0" y1="2.54" x2="-0.508" y2="3.556" width="0.254" layer="94"/>
+<wire x1="-0.508" y1="3.556" x2="-1.524" y2="1.524" width="0.254" layer="94"/>
+<wire x1="-1.524" y1="1.524" x2="-2.54" y2="3.556" width="0.254" layer="94"/>
+<wire x1="-2.54" y1="3.556" x2="-3.556" y2="1.524" width="0.254" layer="94"/>
+<wire x1="-7.62" y1="2.54" x2="-7.62" y2="5.08" width="0.254" layer="94"/>
+<wire x1="-3.556" y1="1.524" x2="-4.572" y2="3.556" width="0.254" layer="94"/>
+<wire x1="-4.572" y1="3.556" x2="-5.588" y2="1.524" width="0.254" layer="94"/>
+<wire x1="-5.588" y1="1.524" x2="-6.096" y2="2.54" width="0.254" layer="94"/>
+<wire x1="-6.096" y1="2.54" x2="-7.62" y2="2.54" width="0.254" layer="94"/>
+<wire x1="0" y1="0" x2="-0.508" y2="1.016" width="0.254" layer="94"/>
+<wire x1="-0.508" y1="1.016" x2="-1.524" y2="-1.016" width="0.254" layer="94"/>
+<wire x1="-1.524" y1="-1.016" x2="-2.54" y2="1.016" width="0.254" layer="94"/>
+<wire x1="-2.54" y1="1.016" x2="-3.556" y2="-1.016" width="0.254" layer="94"/>
+<wire x1="-7.62" y1="0" x2="-7.62" y2="2.54" width="0.254" layer="94"/>
+<wire x1="-3.556" y1="-1.016" x2="-4.572" y2="1.016" width="0.254" layer="94"/>
+<wire x1="-4.572" y1="1.016" x2="-5.588" y2="-1.016" width="0.254" layer="94"/>
+<wire x1="-5.588" y1="-1.016" x2="-6.096" y2="0" width="0.254" layer="94"/>
+<wire x1="-6.096" y1="0" x2="-7.62" y2="0" width="0.254" layer="94"/>
+<wire x1="0" y1="-2.54" x2="-0.508" y2="-1.524" width="0.254" layer="94"/>
+<wire x1="-0.508" y1="-1.524" x2="-1.524" y2="-3.556" width="0.254" layer="94"/>
+<wire x1="-1.524" y1="-3.556" x2="-2.54" y2="-1.524" width="0.254" layer="94"/>
+<wire x1="-2.54" y1="-1.524" x2="-3.556" y2="-3.556" width="0.254" layer="94"/>
+<wire x1="-7.62" y1="-2.54" x2="-7.62" y2="0" width="0.254" layer="94"/>
+<wire x1="-3.556" y1="-3.556" x2="-4.572" y2="-1.524" width="0.254" layer="94"/>
+<wire x1="-4.572" y1="-1.524" x2="-5.588" y2="-3.556" width="0.254" layer="94"/>
+<wire x1="-5.588" y1="-3.556" x2="-6.096" y2="-2.54" width="0.254" layer="94"/>
+<wire x1="-6.096" y1="-2.54" x2="-7.62" y2="-2.54" width="0.254" layer="94"/>
+<wire x1="0" y1="-5.08" x2="-0.508" y2="-4.064" width="0.254" layer="94"/>
+<wire x1="-0.508" y1="-4.064" x2="-1.524" y2="-6.096" width="0.254" layer="94"/>
+<wire x1="-1.524" y1="-6.096" x2="-2.54" y2="-4.064" width="0.254" layer="94"/>
+<wire x1="-2.54" y1="-4.064" x2="-3.556" y2="-6.096" width="0.254" layer="94"/>
+<wire x1="-7.62" y1="-5.08" x2="-7.62" y2="-2.54" width="0.254" layer="94"/>
+<wire x1="-3.556" y1="-6.096" x2="-4.572" y2="-4.064" width="0.254" layer="94"/>
+<wire x1="-4.572" y1="-4.064" x2="-5.588" y2="-6.096" width="0.254" layer="94"/>
+<wire x1="-5.588" y1="-6.096" x2="-6.096" y2="-5.08" width="0.254" layer="94"/>
+<wire x1="-6.096" y1="-5.08" x2="-7.62" y2="-5.08" width="0.254" layer="94"/>
+<wire x1="0" y1="-7.62" x2="-0.508" y2="-6.604" width="0.254" layer="94"/>
+<wire x1="-0.508" y1="-6.604" x2="-1.524" y2="-8.636" width="0.254" layer="94"/>
+<wire x1="-1.524" y1="-8.636" x2="-2.54" y2="-6.604" width="0.254" layer="94"/>
+<wire x1="-2.54" y1="-6.604" x2="-3.556" y2="-8.636" width="0.254" layer="94"/>
+<wire x1="-7.62" y1="-7.62" x2="-7.62" y2="-5.08" width="0.254" layer="94"/>
+<wire x1="-3.556" y1="-8.636" x2="-4.572" y2="-6.604" width="0.254" layer="94"/>
+<wire x1="-4.572" y1="-6.604" x2="-5.588" y2="-8.636" width="0.254" layer="94"/>
+<wire x1="-5.588" y1="-8.636" x2="-6.096" y2="-7.62" width="0.254" layer="94"/>
+<wire x1="-6.096" y1="-7.62" x2="-7.62" y2="-7.62" width="0.254" layer="94"/>
+<pin name="P$1" x="-7.62" y="15.24" visible="off" length="short" rot="R270"/>
+<pin name="P$2" x="2.54" y="10.16" visible="off" length="short" rot="R180"/>
+<pin name="P$3" x="2.54" y="7.62" visible="off" length="short" rot="R180"/>
+<pin name="P$4" x="2.54" y="5.08" visible="off" length="short" rot="R180"/>
+<pin name="P$5" x="2.54" y="2.54" visible="off" length="short" rot="R180"/>
+<pin name="P$6" x="2.54" y="0" visible="off" length="short" rot="R180"/>
+<pin name="P$7" x="2.54" y="-2.54" visible="off" length="short" rot="R180"/>
+<pin name="P$8" x="2.54" y="-5.08" visible="off" length="short" rot="R180"/>
+<pin name="P$9" x="2.54" y="-7.62" visible="off" length="short" rot="R180"/>
+</symbol>
+<symbol name="DUAL_BUSSED_RESISTORS">
+<wire x1="-7.62" y1="5.08" x2="-7.112" y2="4.064" width="0.254" layer="94"/>
+<wire x1="-7.112" y1="4.064" x2="-6.096" y2="6.096" width="0.254" layer="94"/>
+<wire x1="-6.096" y1="6.096" x2="-5.08" y2="4.064" width="0.254" layer="94"/>
+<wire x1="-5.08" y1="4.064" x2="-4.064" y2="6.096" width="0.254" layer="94"/>
+<wire x1="-4.064" y1="6.096" x2="-3.048" y2="4.064" width="0.254" layer="94"/>
+<wire x1="-3.048" y1="4.064" x2="-2.032" y2="6.096" width="0.254" layer="94"/>
+<wire x1="-2.032" y1="6.096" x2="-1.524" y2="5.08" width="0.254" layer="94"/>
+<wire x1="7.62" y1="5.08" x2="7.112" y2="6.096" width="0.254" layer="94"/>
+<wire x1="7.112" y1="6.096" x2="6.096" y2="4.064" width="0.254" layer="94"/>
+<wire x1="6.096" y1="4.064" x2="5.08" y2="6.096" width="0.254" layer="94"/>
+<wire x1="5.08" y1="6.096" x2="4.064" y2="4.064" width="0.254" layer="94"/>
+<wire x1="4.064" y1="4.064" x2="3.048" y2="6.096" width="0.254" layer="94"/>
+<wire x1="3.048" y1="6.096" x2="2.032" y2="4.064" width="0.254" layer="94"/>
+<wire x1="2.032" y1="4.064" x2="1.524" y2="5.08" width="0.254" layer="94"/>
+<wire x1="1.524" y1="5.08" x2="0" y2="5.08" width="0.254" layer="94"/>
+<wire x1="0" y1="5.08" x2="-1.524" y2="5.08" width="0.254" layer="94"/>
+<wire x1="-7.62" y1="2.54" x2="-7.112" y2="1.524" width="0.254" layer="94"/>
+<wire x1="-7.112" y1="1.524" x2="-6.096" y2="3.556" width="0.254" layer="94"/>
+<wire x1="-6.096" y1="3.556" x2="-5.08" y2="1.524" width="0.254" layer="94"/>
+<wire x1="-5.08" y1="1.524" x2="-4.064" y2="3.556" width="0.254" layer="94"/>
+<wire x1="-4.064" y1="3.556" x2="-3.048" y2="1.524" width="0.254" layer="94"/>
+<wire x1="-3.048" y1="1.524" x2="-2.032" y2="3.556" width="0.254" layer="94"/>
+<wire x1="-2.032" y1="3.556" x2="-1.524" y2="2.54" width="0.254" layer="94"/>
+<wire x1="7.62" y1="2.54" x2="7.112" y2="3.556" width="0.254" layer="94"/>
+<wire x1="7.112" y1="3.556" x2="6.096" y2="1.524" width="0.254" layer="94"/>
+<wire x1="6.096" y1="1.524" x2="5.08" y2="3.556" width="0.254" layer="94"/>
+<wire x1="5.08" y1="3.556" x2="4.064" y2="1.524" width="0.254" layer="94"/>
+<wire x1="4.064" y1="1.524" x2="3.048" y2="3.556" width="0.254" layer="94"/>
+<wire x1="3.048" y1="3.556" x2="2.032" y2="1.524" width="0.254" layer="94"/>
+<wire x1="2.032" y1="1.524" x2="1.524" y2="2.54" width="0.254" layer="94"/>
+<wire x1="1.524" y1="2.54" x2="0" y2="2.54" width="0.254" layer="94"/>
+<wire x1="0" y1="2.54" x2="-1.524" y2="2.54" width="0.254" layer="94"/>
+<wire x1="-7.62" y1="0" x2="-7.112" y2="-1.016" width="0.254" layer="94"/>
+<wire x1="-7.112" y1="-1.016" x2="-6.096" y2="1.016" width="0.254" layer="94"/>
+<wire x1="-6.096" y1="1.016" x2="-5.08" y2="-1.016" width="0.254" layer="94"/>
+<wire x1="-5.08" y1="-1.016" x2="-4.064" y2="1.016" width="0.254" layer="94"/>
+<wire x1="-4.064" y1="1.016" x2="-3.048" y2="-1.016" width="0.254" layer="94"/>
+<wire x1="-3.048" y1="-1.016" x2="-2.032" y2="1.016" width="0.254" layer="94"/>
+<wire x1="-2.032" y1="1.016" x2="-1.524" y2="0" width="0.254" layer="94"/>
+<wire x1="7.62" y1="0" x2="7.112" y2="1.016" width="0.254" layer="94"/>
+<wire x1="7.112" y1="1.016" x2="6.096" y2="-1.016" width="0.254" layer="94"/>
+<wire x1="6.096" y1="-1.016" x2="5.08" y2="1.016" width="0.254" layer="94"/>
+<wire x1="5.08" y1="1.016" x2="4.064" y2="-1.016" width="0.254" layer="94"/>
+<wire x1="4.064" y1="-1.016" x2="3.048" y2="1.016" width="0.254" layer="94"/>
+<wire x1="3.048" y1="1.016" x2="2.032" y2="-1.016" width="0.254" layer="94"/>
+<wire x1="2.032" y1="-1.016" x2="1.524" y2="0" width="0.254" layer="94"/>
+<wire x1="1.524" y1="0" x2="0" y2="0" width="0.254" layer="94"/>
+<wire x1="0" y1="0" x2="-1.524" y2="0" width="0.254" layer="94"/>
+<wire x1="-7.62" y1="-2.54" x2="-7.112" y2="-3.556" width="0.254" layer="94"/>
+<wire x1="-7.112" y1="-3.556" x2="-6.096" y2="-1.524" width="0.254" layer="94"/>
+<wire x1="-6.096" y1="-1.524" x2="-5.08" y2="-3.556" width="0.254" layer="94"/>
+<wire x1="-5.08" y1="-3.556" x2="-4.064" y2="-1.524" width="0.254" layer="94"/>
+<wire x1="-4.064" y1="-1.524" x2="-3.048" y2="-3.556" width="0.254" layer="94"/>
+<wire x1="-3.048" y1="-3.556" x2="-2.032" y2="-1.524" width="0.254" layer="94"/>
+<wire x1="-2.032" y1="-1.524" x2="-1.524" y2="-2.54" width="0.254" layer="94"/>
+<wire x1="7.62" y1="-2.54" x2="7.112" y2="-1.524" width="0.254" layer="94"/>
+<wire x1="7.112" y1="-1.524" x2="6.096" y2="-3.556" width="0.254" layer="94"/>
+<wire x1="6.096" y1="-3.556" x2="5.08" y2="-1.524" width="0.254" layer="94"/>
+<wire x1="5.08" y1="-1.524" x2="4.064" y2="-3.556" width="0.254" layer="94"/>
+<wire x1="4.064" y1="-3.556" x2="3.048" y2="-1.524" width="0.254" layer="94"/>
+<wire x1="3.048" y1="-1.524" x2="2.032" y2="-3.556" width="0.254" layer="94"/>
+<wire x1="2.032" y1="-3.556" x2="1.524" y2="-2.54" width="0.254" layer="94"/>
+<wire x1="1.524" y1="-2.54" x2="0" y2="-2.54" width="0.254" layer="94"/>
+<wire x1="0" y1="-2.54" x2="-1.524" y2="-2.54" width="0.254" layer="94"/>
+<wire x1="0" y1="7.62" x2="0" y2="5.08" width="0.254" layer="94"/>
+<wire x1="0" y1="5.08" x2="0" y2="2.54" width="0.254" layer="94"/>
+<wire x1="0" y1="2.54" x2="0" y2="0" width="0.254" layer="94"/>
+<wire x1="0" y1="0" x2="0" y2="-2.54" width="0.254" layer="94"/>
+<wire x1="0" y1="-2.54" x2="0" y2="-5.08" width="0.254" layer="94"/>
+<pin name="P$1" x="0" y="10.16" visible="off" length="short" rot="R270"/>
+<pin name="P$2" x="-10.16" y="5.08" visible="off" length="short"/>
+<pin name="P$3" x="10.16" y="5.08" visible="off" length="short" rot="R180"/>
+<pin name="P$4" x="-10.16" y="2.54" visible="off" length="short"/>
+<pin name="P$5" x="10.16" y="2.54" visible="off" length="short" rot="R180"/>
+<pin name="P$6" x="-10.16" y="0" visible="off" length="short"/>
+<pin name="P$7" x="10.16" y="0" visible="off" length="short" rot="R180"/>
+<pin name="P$8" x="-10.16" y="-2.54" visible="off" length="short"/>
+<pin name="P$9" x="10.16" y="-2.54" visible="off" length="short" rot="R180"/>
+<pin name="P$10" x="0" y="-7.62" visible="off" length="short" rot="R90"/>
+</symbol>
+<symbol name="78ADJ">
+<wire x1="-5.08" y1="-5.08" x2="5.08" y2="-5.08" width="0.4064" layer="94"/>
+<wire x1="5.08" y1="-5.08" x2="5.08" y2="2.54" width="0.4064" layer="94"/>
+<wire x1="5.08" y1="2.54" x2="-5.08" y2="2.54" width="0.4064" layer="94"/>
+<wire x1="-5.08" y1="2.54" x2="-5.08" y2="-5.08" width="0.4064" layer="94"/>
+<text x="2.54" y="-7.62" size="1.778" layer="95">>NAME</text>
+<text x="2.54" y="-10.16" size="1.778" layer="96">>VALUE</text>
+<text x="-2.032" y="-4.318" size="1.524" layer="95">GND</text>
+<text x="-4.445" y="-0.635" size="1.524" layer="95">IN</text>
+<text x="0.635" y="-0.635" size="1.524" layer="95">OUT</text>
+<pin name="IN" x="-7.62" y="0" visible="off" length="short" direction="in"/>
+<pin name="GND$1" x="0" y="-7.62" visible="off" length="short" direction="in" swaplevel="1" rot="R90"/>
+<pin name="OUT" x="7.62" y="0" visible="off" length="short" direction="out" rot="R180"/>
+<pin name="GND$0" x="-2.54" y="-7.62" visible="off" length="short" direction="in" swaplevel="1" rot="R90"/>
+</symbol>
+</symbols>
+<devicesets>
+<deviceset name="DIP_SWITCH_X4">
+<description><b>4 position dip switch</b><br>
+from <a href="http://www.mouser.com/ProductDetail/CTS-Electronic-Components/219-4LPST/?qs=sGAEpiMZZMv%2f%252b2JhlA6ysGbG22VYatTYq6uUsyqguGg%3d">http://www.mouser.com/ProductDetail/CTS-Electronic-Components/219-4LPST/?qs=sGAEpiMZZMv%2f%252b2JhlA6ysGbG22VYatTYq6uUsyqguGg%3d</a></description>
+<gates>
+<gate name="1" symbol="SWITCH" x="-15.24" y="2.54"/>
+<gate name="2" symbol="SWITCH" x="-2.54" y="2.54"/>
+<gate name="3" symbol="SWITCH" x="10.16" y="2.54"/>
+<gate name="4" symbol="SWITCH" x="22.86" y="2.54"/>
+</gates>
+<devices>
+<device name="" package="219-4LPST">
+<connects>
+<connect gate="1" pin="A" pad="1A"/>
+<connect gate="1" pin="B" pad="1B"/>
+<connect gate="2" pin="A" pad="2A"/>
+<connect gate="2" pin="B" pad="2B"/>
+<connect gate="3" pin="A" pad="3A"/>
+<connect gate="3" pin="B" pad="3B"/>
+<connect gate="4" pin="A" pad="4A"/>
+<connect gate="4" pin="B" pad="4B"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="RJ16">
+<description><b>rj16 connector</b> (6 slots 6 connectors)<br>
+from <a href="http://www.mouser.com/ProductDetail/Molex/85510-5019/?qs=sGAEpiMZZMvQhAhQbXdbBsK4oSVSRxQMQtyAf8Fqgr8%3d">http://www.mouser.com/ProductDetail/Molex/85510-5019/?qs=sGAEpiMZZMvQhAhQbXdbBsK4oSVSRxQMQtyAf8Fqgr8%3d</a> (drawings at <a href="http://www.molex.com/pdm_docs/sd/855105019_sd.pdf">http://www.molex.com/pdm_docs/sd/855105019_sd.pdf</a>)</description>
+<gates>
+<gate name="G$1" symbol="RJ16" x="0" y="0"/>
+</gates>
+<devices>
+<device name="" package="85510-5019">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<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="P$1" pad="P$0"/>
+<connect gate="G$1" pin="P$2" pad="P$1"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="USB">
+<description><b>usb connector</b></description>
+<gates>
+<gate name="G$1" symbol="USB" x="5.08" y="0"/>
+</gates>
+<devices>
+<device name="" package="M701-330442">
+<connects>
+<connect gate="G$1" pin="CASE1V" pad="P$0"/>
+<connect gate="G$1" pin="CASE2" pad="P$1"/>
+<connect gate="G$1" pin="D+" pad="D+"/>
+<connect gate="G$1" pin="D-" pad="D-"/>
+<connect gate="G$1" pin="GND" pad="GND"/>
+<connect gate="G$1" pin="VBUS" pad="VCC"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="ADUM3160">
+<description><b>ADuM3160 usb digital isolator</b><br>
+all information from <a href="http://www.analog.com/static/imported-files/data_sheets/ADuM3160.pdf">http://www.analog.com/static/imported-files/data_sheets/ADuM3160.pdf</a></description>
+<gates>
+<gate name="G$1" symbol="ADUM3160" x="0" y="0"/>
+</gates>
+<devices>
+<device name="" package="SOIC_W">
+<connects>
+<connect gate="G$1" pin="DD+" pad="10"/>
+<connect gate="G$1" pin="DD-" pad="11"/>
+<connect gate="G$1" pin="GND1$0" pad="2"/>
+<connect gate="G$1" pin="GND1$1" pad="8"/>
+<connect gate="G$1" pin="GND2$0" pad="15"/>
+<connect gate="G$1" pin="GND2$1" pad="9"/>
+<connect gate="G$1" pin="PDEN" pad="4"/>
+<connect gate="G$1" pin="PIN" pad="12"/>
+<connect gate="G$1" pin="SPN" pad="13"/>
+<connect gate="G$1" pin="SPU" pad="5"/>
+<connect gate="G$1" pin="UD+" pad="7"/>
+<connect gate="G$1" pin="UD-" pad="6"/>
+<connect gate="G$1" pin="VBUS1" pad="1"/>
+<connect gate="G$1" pin="VBUS2" pad="16"/>
+<connect gate="G$1" pin="VDD1" pad="3"/>
+<connect gate="G$1" pin="VDD2" pad="14"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="ADXRS450">
+<description><b>ADXRS450 gyroscope</b><br>
+all information from <a href="http://www.analog.com/static/imported-files/data_sheets/ADXRS450.pdf">http://www.analog.com/static/imported-files/data_sheets/ADXRS450.pdf</a></description>
+<gates>
+<gate name="G$0" symbol="ADXRS450" x="0" y="0"/>
+</gates>
+<devices>
+<device name="" package="SOIC_CAV">
+<connects>
+<connect gate="G$0" pin="AVDD" pad="14"/>
+<connect gate="G$0" pin="AVSS" pad="11"/>
+<connect gate="G$0" pin="CP5" pad="9"/>
+<connect gate="G$0" pin="CS" pad="4"/>
+<connect gate="G$0" pin="DVDD" pad="1"/>
+<connect gate="G$0" pin="DVSS" pad="13"/>
+<connect gate="G$0" pin="MISO" pad="5"/>
+<connect gate="G$0" pin="MOSI" pad="15"/>
+<connect gate="G$0" pin="PDD" pad="6"/>
+<connect gate="G$0" pin="PSS" pad="7"/>
+<connect gate="G$0" pin="RSVD$0" pad="2"/>
+<connect gate="G$0" pin="RSVD$1" pad="3"/>
+<connect gate="G$0" pin="RSVD$2" pad="10"/>
+<connect gate="G$0" pin="RSVD$3" pad="12"/>
+<connect gate="G$0" pin="SCLK" pad="16"/>
+<connect gate="G$0" pin="VX" pad="8"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="LM3481">
+<description><b>switching regulator controller</b><br>
+data sheet at <a href="http://www.national.com/ds/LM/LM3481.pdf">http://www.national.com/ds/LM/LM3481.pdf</a></description>
+<gates>
+<gate name="G$1" symbol="LM3481" x="0" y="0"/>
+</gates>
+<devices>
+<device name="" package="MSOP10">
+<connects>
+<connect gate="G$1" pin="AGND" pad="5"/>
+<connect gate="G$1" pin="COMP" pad="3"/>
+<connect gate="G$1" pin="DR" pad="8"/>
+<connect gate="G$1" pin="FA/SYNC/SD" pad="6"/>
+<connect gate="G$1" pin="FB" pad="4"/>
+<connect gate="G$1" pin="ISEN" pad="1"/>
+<connect gate="G$1" pin="PGND" pad="7"/>
+<connect gate="G$1" pin="UVLO" pad="2"/>
+<connect gate="G$1" pin="VCC" pad="9"/>
+<connect gate="G$1" pin="VIN" pad="10"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="L-US" prefix="L" uservalue="yes">
+<description><B>INDUCTOR</B>, American symbol</description>
+<gates>
+<gate name="G$1" symbol="L-US" x="0" y="0"/>
+</gates>
+<devices>
+<device name="L2012C" package="L2012C">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="L2825P" package="L2825P">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="L3216C" package="L3216C">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="L3225M" package="L3225M">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="L3225P" package="L3225P">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="L3230M" package="L3230M">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="L4035M" package="L4035M">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="L4516C" package="L4516C">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="L4532C" package="L4532M">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="L4532P" package="L4532P">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="L5038P" package="L5038P">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="L5650M" package="L5650M">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="L8530M" package="L8530M">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="0204/5" package="0204/5">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="0204/7" package="0204/7">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="0204V" package="0204V">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="0207/10" package="0207/10">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="0207/12" package="0207/12">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="0207/15" package="0207/15">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="0207/2V" package="0207/2V">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="0207/5V" package="0207/5V">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="0207/7" package="0207/7">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="L1812" package="L1812">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="TJ3-U1" package="TJ3-U1">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="TJ3-U2" package="TJ3-U2">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="TJ4-U1" package="TJ4-U1">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="TJ4-U2" package="TJ4-U2">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="TJ5-U1" package="TJ5-U1">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="TJ5-U2" package="TJ5-U2">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="TJ6-U1" package="TJ6-U1">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="TJ6-U2" package="TJ6-U2">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="TJ7-U1" package="TJ7-U1">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="TJ7-U2" package="TJ7-U2">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="TJ8-U1" package="TJ8-U1">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="TJ8-U2" package="TJ8-U2">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="TJ9-U1" package="TJ9-U1">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="TJ9-U2" package="TJ9-U2">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="WE-TPC" package="POWER-CHOKE_WE-TPC">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="CEP125" package="CEP125">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="1060-152" package="1060-152">
+<connects>
+<connect gate="G$1" pin="1" pad="P$1"/>
+<connect gate="G$1" pin="2" pad="P$2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="1010-153" package="1010-153">
+<connects>
+<connect gate="G$1" pin="1" pad="P$1"/>
+<connect gate="G$1" pin="2" pad="P$2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="BSZ097N04LS_G">
+<description><b>mosfet</b><br>
+datasheet at <a href="http://www.infineon.com/dgdl/BSZ097N04LSG_rev2.0.pdf?folderId=db3a3043163797a6011643468e7505a4&fileId=db3a3043163797a6011643be1d53068c">http://www.infineon.com/dgdl/BSZ097N04LSG_rev2.0.pdf?folderId=db3a3043163797a6011643468e7505a4&fileId=db3a3043163797a6011643be1d53068c</a></description>
+<gates>
+<gate name="G$1" symbol="N-MOSFET_EXTRA_PINS" x="0" y="0"/>
+</gates>
+<devices>
+<device name="" package="PG-TSDSON8">
+<connects>
+<connect gate="G$1" pin="D" pad="D$0"/>
+<connect gate="G$1" pin="D$1" pad="D$1"/>
+<connect gate="G$1" pin="D$2" pad="D$2"/>
+<connect gate="G$1" pin="D$3" pad="D$3"/>
+<connect gate="G$1" pin="D$4" pad="D$4"/>
+<connect gate="G$1" pin="G" pad="G"/>
+<connect gate="G$1" pin="S" pad="S$0"/>
+<connect gate="G$1" pin="S$1" pad="S$1"/>
+<connect gate="G$1" pin="S$2" pad="S$2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="NUF6406M">
+<gates>
+<gate name="G$1" symbol="EMI_PI_FILTER" x="-2.54" y="12.7" swaplevel="1"/>
+<gate name="G$2" symbol="EMI_PI_FILTER" x="-2.54" y="5.08" swaplevel="1"/>
+<gate name="G$3" symbol="EMI_PI_FILTER" x="-2.54" y="-2.54" swaplevel="1"/>
+<gate name="G$4" symbol="EMI_PI_FILTER" x="-2.54" y="-10.16" swaplevel="1"/>
+<gate name="G$5" symbol="EMI_PI_FILTER" x="-2.54" y="-17.78" swaplevel="1"/>
+<gate name="G$6" symbol="EMI_PI_FILTER" x="-2.54" y="-25.4" swaplevel="1"/>
+<gate name="GND" symbol="GND" x="-25.4" y="-10.16" addlevel="request"/>
+</gates>
+<devices>
+<device name="" package="DFN12">
+<connects>
+<connect gate="G$1" pin="P$1" pad="1"/>
+<connect gate="G$1" pin="P$2" pad="12"/>
+<connect gate="G$2" pin="P$1" pad="2"/>
+<connect gate="G$2" pin="P$2" pad="11"/>
+<connect gate="G$3" pin="P$1" pad="3"/>
+<connect gate="G$3" pin="P$2" pad="10"/>
+<connect gate="G$4" pin="P$1" pad="4"/>
+<connect gate="G$4" pin="P$2" pad="9"/>
+<connect gate="G$5" pin="P$1" pad="5"/>
+<connect gate="G$5" pin="P$2" pad="8"/>
+<connect gate="G$6" pin="P$1" pad="6"/>
+<connect gate="G$6" pin="P$2" pad="7"/>
+<connect gate="GND" pin="GND" pad="GND"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="C-US" prefix="C" uservalue="yes">
+<description><B>CAPACITOR</B>, American symbol</description>
+<gates>
+<gate name="G$1" symbol="C-US" x="0" y="0"/>
+</gates>
+<devices>
+<device name="C0402" package="C0402">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C0504" package="C0504">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C0603" package="C0603">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C0805" package="C0805">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C1005" package="C1005">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C1206" package="C1206">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C1210" package="C1210">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C1310" package="C1310">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C1608" package="C1608">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C1812" package="C1812">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C1825" package="C1825">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C2012" package="C2012">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C3216" package="C3216">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C3225" package="C3225">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C4532" package="C4532">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C4564" package="C4564">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="025-024X044" package="C025-024X044">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="025-025X050" package="C025-025X050">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="025-030X050" package="C025-030X050">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="025-040X050" package="C025-040X050">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="025-050X050" package="C025-050X050">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="025-060X050" package="C025-060X050">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C025_050-024X070" package="C025_050-024X070">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="025_050-025X075" package="C025_050-025X075">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="025_050-035X075" package="C025_050-035X075">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="025_050-045X075" package="C025_050-045X075">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="025_050-055X075" package="C025_050-055X075">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="050-024X044" package="C050-024X044">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="050-025X075" package="C050-025X075">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="050-045X075" package="C050-045X075">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="050-030X075" package="C050-030X075">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="050-050X075" package="C050-050X075">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="050-055X075" package="C050-055X075">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="050-075X075" package="C050-075X075">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="050H075X075" package="C050H075X075">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="075-032X103" package="C075-032X103">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="075-042X103" package="C075-042X103">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="075-052X106" package="C075-052X106">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="102-043X133" package="C102-043X133">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="102-054X133" package="C102-054X133">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="102-064X133" package="C102-064X133">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="102_152-062X184" package="C102_152-062X184">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="150-054X183" package="C150-054X183">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="150-064X183" package="C150-064X183">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="150-072X183" package="C150-072X183">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="150-084X183" package="C150-084X183">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="150-091X182" package="C150-091X182">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="225-062X268" package="C225-062X268">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="225-074X268" package="C225-074X268">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="225-087X268" package="C225-087X268">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="225-108X268" package="C225-108X268">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="225-113X268" package="C225-113X268">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="275-093X316" package="C275-093X316">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="275-113X316" package="C275-113X316">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="275-134X316" package="C275-134X316">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="275-205X316" package="C275-205X316">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="325-137X374" package="C325-137X374">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="325-162X374" package="C325-162X374">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="325-182X374" package="C325-182X374">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="375-192X418" package="C375-192X418">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="375-203X418" package="C375-203X418">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="050-035X075" package="C050-035X075">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="375-155X418" package="C375-155X418">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="075-063X106" package="C075-063X106">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="275-154X316" package="C275-154X316">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="275-173X316" package="C275-173X316">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C0402K" package="C0402K">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C0603K" package="C0603K">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C0805K" package="C0805K">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C1206K" package="C1206K">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C1210K" package="C1210K">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C1812K" package="C1812K">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C1825K" package="C1825K">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C2220K" package="C2220K">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C2225K" package="C2225K">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="J80" package="J80">
+<connects>
+<connect gate="G$1" pin="1" pad="+"/>
+<connect gate="G$1" pin="2" pad="-"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="PLF1C271MDO1" package="PLF1C271MDO1">
+<connects>
+<connect gate="G$1" pin="1" pad="+"/>
+<connect gate="G$1" pin="2" pad="-"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="RR71C331MDN1" package="RR71C331MDN1">
+<connects>
+<connect gate="G$1" pin="1" pad="+"/>
+<connect gate="G$1" pin="2" pad="-"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="VS-12CWQ10FNPBF">
+<description><b>Schottky Rectifier, 2 x 6 A (diode)</b><br>
+datasheet at <a href="http://www.vishay.com/docs/94135/12cwq10f.pdf">http://www.vishay.com/docs/94135/12cwq10f.pdf</a></description>
+<gates>
+<gate name="G$1" symbol="DIODE_2" x="0" y="0"/>
+</gates>
+<devices>
+<device name="" package="D-PAK">
+<connects>
+<connect gate="G$1" pin="A" pad="ANODE$0"/>
+<connect gate="G$1" pin="A1" pad="ANODE$1"/>
+<connect gate="G$1" pin="C" pad="CATHODE"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="WA06X103JTL">
+<gates>
+<gate name="G$1" symbol="RESISTOR" x="0" y="15.24" swaplevel="1"/>
+<gate name="G$2" symbol="RESISTOR" x="0" y="7.62" swaplevel="1"/>
+<gate name="G$3" symbol="RESISTOR" x="0" y="0" swaplevel="1"/>
+<gate name="G$4" symbol="RESISTOR" x="0" y="-7.62" swaplevel="1"/>
+</gates>
+<devices>
+<device name="" package="0603X4">
+<connects>
+<connect gate="G$1" pin="R1" pad="P1"/>
+<connect gate="G$1" pin="R2" pad="P8"/>
+<connect gate="G$2" pin="R1" pad="P2"/>
+<connect gate="G$2" pin="R2" pad="P7"/>
+<connect gate="G$3" pin="R1" pad="P3"/>
+<connect gate="G$3" pin="R2" pad="P6"/>
+<connect gate="G$4" pin="R1" pad="P4"/>
+<connect gate="G$4" pin="R2" pad="P5"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="OP-AMP">
+<gates>
+</gates>
+<devices>
+<device name="">
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="TL974IPWR">
+<description>TI Rail to Rail Quad Op-Amp</description>
+<gates>
+<gate name="G$1" symbol="OP-AMP" x="-2.54" y="22.86" swaplevel="1"/>
+<gate name="G$2" symbol="OP-AMP" x="-2.54" y="10.16" swaplevel="1"/>
+<gate name="G$3" symbol="OP-AMP" x="-2.54" y="-2.54" swaplevel="1"/>
+<gate name="G$4" symbol="OP-AMP" x="-2.54" y="-15.24" swaplevel="1"/>
+<gate name="G$5" symbol="GND" x="-30.48" y="-12.7"/>
+<gate name="G$6" symbol="PWR" x="-30.48" y="-5.08"/>
+</gates>
+<devices>
+<device name="TL974IPWR" package="TSSOP-14">
+<connects>
+<connect gate="G$1" pin="+" pad="P3"/>
+<connect gate="G$1" pin="-" pad="P2"/>
+<connect gate="G$1" pin="OUT" pad="P1"/>
+<connect gate="G$2" pin="+" pad="P5"/>
+<connect gate="G$2" pin="-" pad="P6"/>
+<connect gate="G$2" pin="OUT" pad="P7"/>
+<connect gate="G$3" pin="+" pad="P10"/>
+<connect gate="G$3" pin="-" pad="P9"/>
+<connect gate="G$3" pin="OUT" pad="P8"/>
+<connect gate="G$4" pin="+" pad="P12"/>
+<connect gate="G$4" pin="-" pad="P13"/>
+<connect gate="G$4" pin="OUT" pad="P14"/>
+<connect gate="G$5" pin="GND" pad="P11"/>
+<connect gate="G$6" pin="V+" pad="P4"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="MC33204DG" package="SOIC-14">
+<connects>
+<connect gate="G$1" pin="+" pad="P3"/>
+<connect gate="G$1" pin="-" pad="P2"/>
+<connect gate="G$1" pin="OUT" pad="P1"/>
+<connect gate="G$2" pin="+" pad="P5"/>
+<connect gate="G$2" pin="-" pad="P6"/>
+<connect gate="G$2" pin="OUT" pad="P7"/>
+<connect gate="G$3" pin="+" pad="P10"/>
+<connect gate="G$3" pin="-" pad="P9"/>
+<connect gate="G$3" pin="OUT" pad="P8"/>
+<connect gate="G$4" pin="+" pad="P12"/>
+<connect gate="G$4" pin="-" pad="P13"/>
+<connect gate="G$4" pin="OUT" pad="P14"/>
+<connect gate="G$5" pin="GND" pad="P11"/>
+<connect gate="G$6" pin="V+" pad="P4"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="LQH43MN471J03L">
+<gates>
+<gate name="G$1" symbol="INDUCTOR" x="0" y="0"/>
+</gates>
+<devices>
+<device name="" package="L1812">
+<connects>
+<connect gate="G$1" pin="P$1" pad="1"/>
+<connect gate="G$1" pin="P$2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="38720-7202">
+<description><b>barrier terminal block</b><br>
+drawings at <a href="http://www.molex.com/pdm_docs/sd/387207202_sd.pdf">http://www.molex.com/pdm_docs/sd/387207202_sd.pdf</a></description>
+<gates>
+<gate name="G$1" symbol="38720-7202" x="0" y="0"/>
+</gates>
+<devices>
+<device name="" package="38720-7202">
+<connects>
+<connect gate="G$1" pin="+" pad="+"/>
+<connect gate="G$1" pin="-" pad="-"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="LMZ12002">
+<gates>
+<gate name="G$1" symbol="SIMPLESWITCHER" x="0" y="-5.08"/>
+</gates>
+<devices>
+<device name="" package="TZA07A">
+<connects>
+<connect gate="G$1" pin="CGND" pad="GND"/>
+<connect gate="G$1" pin="EN" pad="P3"/>
+<connect gate="G$1" pin="FB" pad="P6"/>
+<connect gate="G$1" pin="GND" pad="P4"/>
+<connect gate="G$1" pin="RON" pad="P2"/>
+<connect gate="G$1" pin="SS" pad="P5"/>
+<connect gate="G$1" pin="VIN" pad="P1"/>
+<connect gate="G$1" pin="VOUT" pad="P7"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="POWER_CONNECTOR">
+<description>MOLEX 39543-0202
+Terminal Block</description>
+<gates>
+<gate name="G$1" symbol="TERMINAL" x="-7.62" y="-25.4"/>
+</gates>
+<devices>
+<device name="39" package="39543-0202">
+<connects>
+<connect gate="G$1" pin="P$1" pad="P$1"/>
+<connect gate="G$1" pin="P$2" pad="P$2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="ELFH0225*" package="ELFH0225*">
+<connects>
+<connect gate="G$1" pin="P$1" pad="P$2"/>
+<connect gate="G$1" pin="P$2" pad="P$1"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="MMSZ5242BT1G">
+<description><b>zener diode</b><br>
+datasheet at <a href="http://www.onsemi.com/pub_link/Collateral/MMSZ5221BT1-D.PDF">http://www.onsemi.com/pub_link/Collateral/MMSZ5221BT1-D.PDF</a></description>
+<gates>
+<gate name="G$1" symbol="ZENER_DIODE" x="0" y="0"/>
+</gates>
+<devices>
+<device name="" package="SOD-123">
+<connects>
+<connect gate="G$1" pin="A" pad="ANODE"/>
+<connect gate="G$1" pin="C" pad="CATHODE"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="SERIES_753_RESISTOR_NETWORK">
+<gates>
+<gate name="G$1" symbol="BUSSED_RESISTORS" x="2.54" y="-2.54"/>
+</gates>
+<devices>
+<device name="" package="SURFACEMOUNTRESISTORNETWORK9PIN">
+<connects>
+<connect gate="G$1" pin="P$1" pad="P$1"/>
+<connect gate="G$1" pin="P$2" pad="P$2"/>
+<connect gate="G$1" pin="P$3" pad="P$3"/>
+<connect gate="G$1" pin="P$4" pad="P$4"/>
+<connect gate="G$1" pin="P$5" pad="P$5"/>
+<connect gate="G$1" pin="P$6" pad="P$6"/>
+<connect gate="G$1" pin="P$7" pad="P$7"/>
+<connect gate="G$1" pin="P$8" pad="P$8"/>
+<connect gate="G$1" pin="P$9" pad="P$9"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="746X10_RESISTOR_NETWORK">
+<gates>
+<gate name="G$1" symbol="DUAL_BUSSED_RESISTORS" x="0" y="0"/>
+</gates>
+<devices>
+<device name="" package="746X101">
+<connects>
+<connect gate="G$1" pin="P$1" pad="P$1"/>
+<connect gate="G$1" pin="P$10" pad="P$10"/>
+<connect gate="G$1" pin="P$2" pad="P$2"/>
+<connect gate="G$1" pin="P$3" pad="P$3"/>
+<connect gate="G$1" pin="P$4" pad="P$4"/>
+<connect gate="G$1" pin="P$5" pad="P$5"/>
+<connect gate="G$1" pin="P$6" pad="P$6"/>
+<connect gate="G$1" pin="P$7" pad="P$7"/>
+<connect gate="G$1" pin="P$8" pad="P$8"/>
+<connect gate="G$1" pin="P$9" pad="P$9"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="1608_INDUCTOR">
+<gates>
+<gate name="G$1" symbol="INDUCTOR" x="0" y="0"/>
+</gates>
+<devices>
+<device name="" package="L1608">
+<connects>
+<connect gate="G$1" pin="P$1" pad="P$1"/>
+<connect gate="G$1" pin="P$2" pad="P$2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="V_REG_TC1262" prefix="IC" uservalue="yes">
+<description><b>Voltage Regulator</b>
+data sheet at <a href="http://ww1.microchip.com/downloads/en/DeviceDoc/21373b.pdf">http://ww1.microchip.com/downloads/en/DeviceDoc/21373b.pdf</a></description>
+<gates>
+<gate name="G$1" symbol="78ADJ" x="0" y="0"/>
+</gates>
+<devices>
+<device name="" package="SOT223">
+<connects>
+<connect gate="G$1" pin="GND$0" pad="TAB"/>
+<connect gate="G$1" pin="GND$1" pad="2"/>
+<connect gate="G$1" pin="IN" pad="1"/>
+<connect gate="G$1" pin="OUT" pad="3"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+</devicesets>
+</library>
+</drawing>
+</eagle>
diff --git a/gyro_board/schematic/gen_lists.rb b/gyro_board/schematic/gen_lists.rb
new file mode 100755
index 0000000..9fb988c
--- /dev/null
+++ b/gyro_board/schematic/gen_lists.rb
@@ -0,0 +1,286 @@
+#!/usr/bin/ruby
+#
+#=~ and !~ are regex (not) match operators. they set $1 etc
+
+Suffix = "_1.19.2012"
+PartsLists = ['parts.txt']
+
+Mouser = 1
+Digikey = 2
+Coilcraft = 3
+Analog_com = 4
+Unknown = 5
+
+class Component
+ attr_accessor :desc, :quant, :ordering, :names, :other_names, :maybe
+ def source
+ @source
+ end
+ def finish
+ #puts inspect
+ return false if !desc || !quant || !ordering || !names
+ @other_names ||= []
+ puts "warning: #{names.size + other_names.size} names (#{names.inspect} #{other_names.inspect}) but ordering #{quant} of '#{desc}'" if names.size + other_names.size != quant
+
+ case ordering
+ when /mouser/
+ @source = Mouser
+ when /digikey/
+ @source = Digikey
+ when /coilcraft/
+ @source = Coilcraft
+ when /analog\.com/
+ @source = Analog_com
+ else
+ @source = Unknown
+ end
+
+ true
+ end
+ def main_quant
+ names.size
+ end
+ def desc
+ if @names && @desc && @desc =~ /webench #{@names[0].to_s.downcase} \((.*)\)/
+ $1
+ else
+ @desc
+ end
+ end
+ def bom
+ "#{@names.join(',')}\t#{part_num}\t#{desc}"
+ end
+ def names=(names)
+ @names = expand names
+ end
+ def other_names=(names)
+ @other_names = expand names
+ end
+ def expand(names)
+ r = []
+ names.each do |name|
+ if name =~ /^([a-zA-Z$]*)(\d+)-(\d+)([a-zA-Z$]*)$/
+ $2.to_i.upto($3.to_i) do |num|
+ r.push $1 + num.to_s + $4
+ end
+ else
+ r.push name
+ end
+ end
+ r
+ end
+ def part_num
+ case @source
+ when Mouser
+ `wget '#{ordering}' -O - 2>/dev/null | grep 'Mouser Part #:' -A 3 | grep -v '<' | head -n1`.chomp
+ when Digikey
+ #`wget '#{ordering}' -O - 2>/dev/null | grep 'Digi-Key Part Number' | sed 's/.*\td id=reportpartnumber\(.*\)\<\/td.*/\1/g'`
+ puts "warning: digikey ordering link #{ordering} not recognized" unless ordering =~ /.*\/(.*)\/.*$/
+ $1
+ when Coilcraft
+ puts "warning: coilcraft product page #{ordering} not recognized" unless ordering =~ /^.* (.*)$/
+ $1
+ when Analog_com
+ puts "warning: using hard-coded gyro part number for part(s) #{names.inspect}"
+ "ADXRS450"
+ else
+ puts "warning: couldn't figure out how to get a part number out of #{ordering}"
+ end
+ end
+end
+class Board
+ def name
+ @name
+ end
+ def initialize(name, *sections)
+ @name = name
+ parse sections
+ end
+ def parse(sections)
+ #puts sections.join(", ")
+ PartsLists.each do |f|
+ file = File.open(f)
+ section = ''
+ blank = true # last line blank
+ @comps = []
+ comp = nil
+ file.readlines.each do |l|
+ l = l.chomp
+ case l
+ when /^\/\/ ([a-zA-Z0-9 $.+\-,]*)$/
+ #print 'matched ' + $1
+ if blank
+ section = $1
+ elsif comp
+ names = $1.split(/[, ]+/)
+ if !comp.maybe || sections.include?(names.last)
+ puts "warning: names of '#{$1}' before other stuff" if !comp.ordering || !comp.desc || !comp.quant
+ names.pop if comp.maybe
+ comp.names = names
+ elsif comp.maybe && !section.include?(names.last)
+ names.pop
+ comp.other_names = names
+ end
+ end
+ when /^(\d\d?) x ([a-zA-Z 0-9().\-+\/%"@,]*)$/
+ if !comp && sections.include?(section) || section == 'Common'
+ comp = Component.new
+ comp.maybe = section == 'Common'
+ end
+ if comp
+ puts "warning: desc of '#{$2}' and quant of '#{$1}' after ordering and/or names" if comp.ordering || comp.names
+ comp.desc = $2
+ comp.quant = $1.to_i
+ end
+ when /^\t(analog\.com|http[a-zA-Z 0-9?\/:=%-.]*)$/
+ if comp
+ puts "warning: ordering info of '#{$1}' before desc and/or quant" if !comp.desc || !comp.quant
+ comp.ordering = $1
+ end
+ else
+ puts "warning: no match to #{l}" if !l.empty? && l !~ /^\/\//
+ end
+ blank = l == ''
+ if comp != nil && blank
+ @comps.push comp if comp.finish
+ comp = nil
+ end
+ #puts section
+ end
+ file.close
+ end
+ end
+ def write_bom
+ File.open(@name + Suffix + '/' + @name + '.parts_mapping.txt', 'w+') do |f|
+ @comps.each do |comp|
+ f.puts comp.bom
+ end
+ end
+ end
+ def check # makes sure everything in the parts list is in the bom
+ parsed = []
+ File.open(@name + Suffix + '/' + @name + '.parts.txt') do |f|
+ data = false
+ f.readlines.each do |l|
+ if data && l.chomp.length > 0
+ puts "warning: parts.txt line '#{l.chomp}' not recognized" unless l =~ /^([\d\w$.]*) /
+ parsed.push $1
+ elsif l =~ /^Part.*Value/
+ data = true
+ end
+ end
+ end
+ in_bom = []
+ @comps.each do |comp|
+ comp.names.each do |name|
+ puts "warning: #{name} was in the bom twice" if in_bom.member? name
+ in_bom.push name
+ end
+ end
+ parsed.each do |p|
+ unless in_bom.delete p
+ puts "warning: '#{p}' was found in the parts.txt but not in the bom"
+ end
+ end
+ in_bom.each do |c|
+ puts "warning: '#{c}' was found in the bom but not the parts.txt"
+ end
+ end
+ def add_to_order(source, mult)
+ parts = []
+ @comps.each do |c|
+ if c.source == source
+ parts.push c
+ end
+ end
+ case source
+ when Mouser
+ parts.each do |part|
+ puts "#{part.part_num}|#{part.main_quant * mult}"
+ end
+=begin
+ data = "__LASTFOCUS:
+__EVENTTARGET:
+__EVENTARGUMENT:
+__VIEWSTATE:%2FwEPDwUIMzY5NjMzODcPZBYCZg9kFgQCAQ9kFgICCA8WAh4EaHJlZgUVLi4vY3NzL2Jhc2UtZW4tVVMuY3NzZAIDD2QWAmYPZBYIZg9kFhQCAQ9kFgJmDxYCHgRUZXh0BQ4oODAwKSAzNDYtNjg3M2QCBQ8WAh4LXyFJdGVtQ291bnQCBhYMZg9kFgQCAQ8PFgQeC05hdmlnYXRlVXJsBRQvc2VhcmNoL2RlZmF1bHQuYXNweB8BBQhQcm9kdWN0c2RkAgMPFgIfAgIFFgoCAQ9kFgICAQ8PFgQfAwUVL3NlYXJjaC9kZWZhdWx0LmFzcHg%2FHwEFEVZJRVcgQUxMIFBST0RVQ1RTZGQCAg9kFgICAQ8PFgQfAwUIL25ld2VzdC8fAQUPTkVXRVNUIFByb2R1Y3RzZGQCAw9kFgICAQ8PFgQfAwUFL25ldy8fAQUMTmV3IFByb2R1Y3RzZGQCBA9kFgICAQ8PFgQfAwUPL25ld3RlY2hub2xvZ3kvHwEFEE5ldyBUZWNobm9sb2dpZXNkZAIFD2QWAgIBDw8WBB8DBRkva25vd2xlZGdlL2tub3dsZWRnZS5hc3B4HwEFGFByb2R1Y3QgS25vd2xlZGdlIENlbnRlcmRkAgEPZBYEAgEPDxYEHwMFDi9zdXBwbGllcnBhZ2UvHwEFCVN1cHBsaWVyc2RkAgMPFgIfAgIEFggCAQ9kFgICAQ8PFgQfAwUPL3N1cHBsaWVycGFnZS8%2FHwEFElZJRVcgQUxMIFNVUFBMSUVSU2RkAgIPZBYCAgEPDxYEHwMFDi9uZXdzdXBwbGllcnMvHwEFDU5ldyBTdXBwbGllcnNkZAIDD2QWAgIBDw8WBB8DBRIvc3VwcGxpZXJjYXRlZ29yeS8fAQUdU3VwcGxpZXJzIGJ5IFByb2R1Y3QgQ2F0ZWdvcnlkZAIED2QWAgIBDw8WBB8DBSUvY2F0YWxvZ1JlcXVlc3QvY2F0YWxvZ2Rvd25sb2Fkcy5hc3B4HwEFEURvd25sb2FkIExpbmVjYXJkZGQCAg9kFgQCAQ8PFgQfAwUcL0NhdGFsb2dSZXF1ZXN0L0NhdGFsb2cuYXNweB8BBQdDYXRhbG9nZGQCAw8WAh8CAgYWDAIBD2QWAgIBDw8WBB8DBR0vQ2F0YWxvZ1JlcXVlc3QvQ2F0YWxvZy5hc3B4Px8BBRFWSUVXIEFMTCBDQVRBTE9HU2RkAgIPZBYCAgEPDxYEHwMFEy9jYXRhbG9ndmlld2VyLmFzcHgfAQUQRW5oYW5jZWQgQ2F0YWxvZ2RkAgMPZBYCAgEPDxYEHwMFEy9tb2JpbGVjYXRhbG9nLmFzcHgfAQUeTkVXISBNb2JpbGUgQ29tcGF0aWJsZSBDYXRhbG9nZGQCBA9kFgICAQ8PFgQfAwUiL0NhdGFsb2dSZXF1ZXN0L01vdXNlckNhdGFsb2cuYXNweB8BBQtQREYgQ2F0YWxvZ2RkAgUPZBYCAgEPDxYEHwMFJi9DYXRhbG9nUmVxdWVzdC9DYXRhbG9nRG93bmxvYWRzLmFzcHg%2FHwEFGERvd25sb2FkIHRoZSBQREYgQ2F0YWxvZ2RkAgYPZBYCAgEPDxYEHwMFKy9TdWJzY3JpcHRpb25DZW50ZXIvTWFuYWdlU3Vic2NyaXB0aW9uLmFzcHgfAQUUQ2F0YWxvZyBTdWJzY3JpcHRpb25kZAIDD2QWBAIBDw8WBB8DBRIvc2VydmljZXNhbmR0b29scy8fAQUQU2VydmljZXMgJiBUb29sc2RkAgMPFgIfAgIIFhACAQ9kFgICAQ8PFgQfAwUTL3NlcnZpY2VzYW5kdG9vbHMvPx8BBRlWSUVXIEFMTCBTRVJWSUNFUyAmIFRPT0xTZGQCAg9kFgICAQ8PFgQfAwUdL015TW91c2VyL0FjY291bnRTdW1tYXJ5LmFzcHgfAQUXTG9nIEluIC8gQ3JlYXRlIEFjY291bnRkZAIDD2QWAgIBDw8WBB8DBREvRVpCdXkvRVpCdXkuYXNweB8BBQtFWiBCdXkgVG9vbGRkAgQPZBYCAgEPDxYEHwMFHy9PcmRlckhpc3RvcnkvUHJvamVjdHNWaWV3LmFzcHgfAQUPUHJvamVjdCBNYW5hZ2VyZGQCBQ9kFgICAQ8PFgQfAwUJL2JvbXRvb2wvHwEFFE5FVyEgQk9NIEltcG9ydCBUb29sZGQCBg9kFgICAQ8PFgQfAwUNL2FjY2VsZXJhdG9yLx8BBRJTZWFyY2ggQWNjZWxlcmF0b3JkZAIHD2QWAgIBDw8WBB8DBREvUXVvdGUvUXVvdGUuYXNweB8BBQZRdW90ZXNkZAIID2QWAgIBDw8WBB8DBSwvU3Vic2NyaXB0aW9uQ2VudGVyL01hbmFnZVN1YnNjcmlwdGlvbi5hc3B4Px8BBRJFbWFpbCBTdWJzY3JpcHRpb25kZAIED2QWBAIBDw8WBB8DBSQvT3JkZXJIaXN0b3J5L09yZGVySGlzdG9yeUxvZ2luLmFzcHgfAQUNT3JkZXIgSGlzdG9yeWRkAgMPFgIfAgIGFgwCAQ9kFgICAQ8PFgQfAwUlL09yZGVySGlzdG9yeS9PcmRlckhpc3RvcnlMb2dpbi5hc3B4Px8BBQ1PcmRlciBIaXN0b3J5ZGQCAg9kFgICAQ8PFgQfAwUfL09yZGVySGlzdG9yeS9JbnZvaWNlc1ZpZXcuYXNweB8BBQhJbnZvaWNlc2RkAgMPZBYCAgEPDxYEHwMFHC9PcmRlckhpc3RvcnkvQ2FydHNWaWV3LmFzcHgfAQUSU2F2ZWQvU2hhcmVkIENhcnRzZGQCBA9kFgICAQ8PFgQfAwUbL09yZGVySGlzdG9yeS9Cb21zVmlldy5hc3B4HwEFClNhdmVkIEJPTXNkZAIFD2QWAgIBDw8WBB8DBSAvT3JkZXJIaXN0b3J5L1Byb2plY3RzVmlldy5hc3B4Px8BBQ9Qcm9qZWN0IE1hbmFnZXJkZAIGD2QWAgIBDw8WBB8DBR0vT3JkZXJIaXN0b3J5L1F1b3Rlc1ZpZXcuYXNweB8BBQZRdW90ZXNkZAIFD2QWBAIBDw8WBB8DBQ8vSGVscC9IZWxwLmFzcHgfAQUESGVscGRkAgMPFgIfAgIFFgoCAQ9kFgICAQ8PFgQfAwUQL0hlbHAvSGVscC5hc3B4Px8BBRRWSUVXIEFMTCBIRUxQIFRPUElDU2RkAgIPZBYCAgEPDxYEHwMFCS9hYm91dHVzLx8BBQxBYm91dCBNb3VzZXJkZAIDD2QWAgIBDw8WBB8DBQkvY29udGFjdC8fAQUKQ29udGFjdCBVc2RkAgQPZBYCAgEPDxYEHwMFDi9mZWVkYmFjay5hc3B4HwEFCEZlZWRiYWNrZGQCBQ9kFgICAQ8PFgQfAwUOL2hlbHBwYWdlLyNGQVEfAQUERkFRc2RkAgcPZBYCAgEPDxYCHghJbWFnZVVybAUjfi9pbWFnZXMvaW50ZXJuYXRpb25hbC9mbGFncy91cy5naWZkZAIIDxAPFgYeDURhdGFUZXh0RmllbGQFDExhbmd1YWdlTmFtZR4ORGF0YVZhbHVlRmllbGQFD0xhbmd1YWdlQ3VsdHVyZR4LXyFEYXRhQm91bmRnZBAVAgdFbmdsaXNoCEVzcGHDsW9sFQIFZW4tVVMFZXMtTVgUKwMCZ2cWAWZkAgkPEA8WAh4HVmlzaWJsZWhkZBYAZAILDw8WBh8DBTp%2BL0N1cnJlbmN5U2VsZWN0aW9uLmFzcHg%2FcmVkaXJlY3R1cmw9JTJmRVpCdXklMmZFWkJ1eS5hc3B4HwEFA1VTRB8IaGRkAgwPDxYEHwEFA1VTRB8IZ2RkAg4PDxYEHghDc3NDbGFzc2UeBF8hU0ICAmRkAhEPDxYCHwMFZGh0dHBzOi8vd3d3Lm1vdXNlci5jb20vTXlNb3VzZXIvTW91c2VyTG9naW4uYXNweD9xcz0wZ1owZ3YwS0R3cy9zakF4QTNmTWx5TG85eTRoajJRZ2YlMjUyYi9rWW1VZXkydz1kZAIZD2QWBmYPDxYEHwQFI34vaW1hZ2VzL2ludGVybmF0aW9uYWwvZmxhZ3MvdXMuZ2lmHg1BbHRlcm5hdGVUZXh0BQ1Vbml0ZWQgU3RhdGVzZGQCAg8PFgIfAQUNVW5pdGVkIFN0YXRlc2RkAggPFgIfAgIBFgJmD2QWDAIBDw8WBB4PQ29tbWFuZEFyZ3VtZW50BQRVU0R1HwEFClVTIERvbGxhcnNkZAIDDw8WAh8BZWRkAgUPDxYCHwFlZGQCBw8PFgIfAWVkZAIJDw8WAh8BZWRkAgsPDxYCHwFlZGQCAQ9kFi4CAg8PFgQfAQUOUHJvZHVjdCBGaW5kZXIfAwUVfi9zZWFyY2gvZGVmYXVsdC5hc3B4ZGQCBA8PFgQfAwUVfi9zZWFyY2gvZGVmYXVsdC5hc3B4HwEFEVZJRVcgQUxMIFBST0RVQ1RTZGQCBg8PFgQfAwUbfi9PcHRvZWxlY3Ryb25pY3MvXy9OLTVnNXYvHwEFD09wdG9lbGVjdHJvbmljc2RkAggPDxYEHwMFKX4vT3B0b2VsZWN0cm9uaWNzL0xFRC1MaWdodGluZy9fL04tNzRnOXQvHwEFDExFRCBMaWdodGluZ2RkAgoPDxYEHwMFHn4vRW1iZWRkZWQtU29sdXRpb25zL18vTi01ZzFrLx8BBRJFbWJlZGRlZCBTb2x1dGlvbnNkZAIMDw8WBB8DBRp%2BL1NlbWljb25kdWN0b3JzL18vTi01Z2NiLx8BBQ5TZW1pY29uZHVjdG9yc2RkAg4PDxYEHwMFJH4vRGlzY3JldGUtU2VtaWNvbmR1Y3RvcnMvXy9OLTZocGU3Lx8BBRogLSBEaXNjcmV0ZSBTZW1pY29uZHVjdG9yc2RkAhAPDxYEHwMFIH4vSW50ZWdyYXRlZC1DaXJjdWl0cy9fL04tNmo3M2svHwEFHCAtIEludGVncmF0ZWQgQ2lyY3VpdHMgKElDcylkZAISDw8WBB8DBR5%2BL0RldmVsb3BtZW50LVRvb2xzL18vTi02aHBlcS8fAQUUIC0gRGV2ZWxvcG1lbnQgVG9vbHNkZAIUDw8WBB8DBR5%2BL0NpcmN1aXQtUHJvdGVjdGlvbi9fL04tNWczYy8fAQUSQ2lyY3VpdCBQcm90ZWN0aW9uZGQCFg8PFgQfAwUefi9QYXNzaXZlLUNvbXBvbmVudHMvXy9OLTVnNzMvHwEFElBhc3NpdmUgQ29tcG9uZW50c2RkAhgPDxYEHwMFGX4vSW50ZXJjb25uZWN0cy9fL04tNWczeS8fAQUNSW50ZXJjb25uZWN0c2RkAhoPDxYEHwMFFn4vV2lyZS1DYWJsZS9fL04tNWdnbC8fAQUMV2lyZSAmIENhYmxlZGQCHA8PFgQfAwUdfi9FbGVjdHJvbWVjaGFuaWNhbC9fL04tNWcxeC8fAQURRWxlY3Ryb21lY2hhbmljYWxkZAIeDw8WBB8DBRN%2BL1NlbnNvcnMvXy9OLTVnZWovHwEFB1NlbnNvcnNkZAIgDw8WBB8DBRZ%2BL0VuY2xvc3VyZXMvXy9OLTVnM28vHwEFCkVuY2xvc3VyZXNkZAIiDw8WBB8DBR5%2BL1RoZXJtYWwtTWFuYWdlbWVudC9fL04tNWdmcy8fAQUSVGhlcm1hbCBNYW5hZ2VtZW50ZGQCJA8PFgQfAwURfi9Qb3dlci9fL04tNWdiaC8fAQUFUG93ZXJkZAImDw8WBB8DBRx%2BL1Rlc3QtTWVhc3VyZW1lbnQvXy9OLTVnZjMvHwEFElRlc3QgJiBNZWFzdXJlbWVudGRkAigPDxYEHwMFGn4vVG9vbHMtU3VwcGxpZXMvXy9OLTVnZzEvHwEFEFRvb2xzICYgU3VwcGxpZXNkZAIqDw8WBB8DBQZ%2BL25ldy8eB1Rvb2xUaXAFD05FV0VTVCBQcm9kdWN0c2RkAiwPDxYEHwMFDH4va25vd2xlZGdlLx8NBRhQcm9kdWN0IEtub3dsZWRnZSBDZW50ZXJkZAIuDw8WBB8DBSx%2BL1N1YnNjcmlwdGlvbkNlbnRlci9NYW5hZ2VTdWJzY3JpcHRpb24uYXNweB8NBRNTdWJzY3JpcHRpb24gQ2VudGVyZGQCAg9kFgICBw9kFgICAQ9kFhYCBA8WAh8IaBYCZg8WAh4HY29sc3BhbgUBNBYGZg8PFggfCQUFZXJyb3IfAQUVUXVhbnRpdHkgaXMgcmVxdWlyZWQuHwoCAh8IaGRkAgEPDxYIHwkFBWVycm9yHwEFQUFzdGVyaXNrLCAnKicsIGlzIG5vdCBhIHZhbGlkIGNoYXJhY3RlciBmb3IgQ3VzdG9tZXIgUGFydCBudW1iZXIuHwoCAh8IaGRkAgIPDxYGHwkFBWVycm9yHwoCAh8IaGRkAgUPZBYIZg8WAh4JaW5uZXJodG1sBQIxLmQCAQ8WAh4FYWxpZ24FBmNlbnRlchYCZg8PFgYeCU1heExlbmd0aAJAHgVXaWR0aBsAAAAAAIBhQAEAAAAfCgKAAmRkAgIPFgIfEAUGY2VudGVyFgJmDw8WBh8RAhUfEhsAAAAAAIBhQAEAAAAfCgKAAmRkAgMPFgIfEAUGY2VudGVyFgJmDw8WBh8RAgkfEhsAAAAAAIBLQAEAAAAfCgKAAmRkAgYPFgIfCGgWAmYPFgIfDgUBNBYGZg8PFggfCQUFZXJyb3IfAQUVUXVhbnRpdHkgaXMgcmVxdWlyZWQuHwoCAh8IaGRkAgEPDxYIHwkFBWVycm9yHwEFQUFzdGVyaXNrLCAnKicsIGlzIG5vdCBhIHZhbGlkIGNoYXJhY3RlciBmb3IgQ3VzdG9tZXIgUGFydCBudW1iZXIuHwoCAh8IaGRkAgIPDxYGHwkFBWVycm9yHwoCAh8IaGRkAgcPZBYIZg8WAh8PBQIyLmQCAQ8WAh8QBQZjZW50ZXIWAmYPDxYGHxECQB8SGwAAAAAAgGFAAQAAAB8KAoACZGQCAg8WAh8QBQZjZW50ZXIWAmYPDxYGHxECFR8SGwAAAAAAgGFAAQAAAB8KAoACZGQCAw8WAh8QBQZjZW50ZXIWAmYPDxYGHxECCR8SGwAAAAAAgEtAAQAAAB8KAoACZGQCCA8WAh8IaBYCZg8WAh8OBQE0FgZmDw8WCB8JBQVlcnJvch8BBRVRdWFudGl0eSBpcyByZXF1aXJlZC4fCgICHwhoZGQCAQ8PFggfCQUFZXJyb3IfAQVBQXN0ZXJpc2ssICcqJywgaXMgbm90IGEgdmFsaWQgY2hhcmFjdGVyIGZvciBDdXN0b21lciBQYXJ0IG51bWJlci4fCgICHwhoZGQCAg8PFgYfCQUFZXJyb3IfCgICHwhoZGQCCQ9kFghmDxYCHw8FAjMuZAIBDxYCHxAFBmNlbnRlchYCZg8PFgYfEQJAHxIbAAAAAACAYUABAAAAHwoCgAJkZAICDxYCHxAFBmNlbnRlchYCZg8PFgYfEQIVHxIbAAAAAACAYUABAAAAHwoCgAJkZAIDDxYCHxAFBmNlbnRlchYCZg8PFgYfEQIJHxIbAAAAAACAS0ABAAAAHwoCgAJkZAIKDxYCHwhoFgJmDxYCHw4FATQWBmYPDxYIHwkFBWVycm9yHwEFFVF1YW50aXR5IGlzIHJlcXVpcmVkLh8KAgIfCGhkZAIBDw8WCB8JBQVlcnJvch8BBUFBc3RlcmlzaywgJyonLCBpcyBub3QgYSB2YWxpZCBjaGFyYWN0ZXIgZm9yIEN1c3RvbWVyIFBhcnQgbnVtYmVyLh8KAgIfCGhkZAICDw8WBh8JBQVlcnJvch8KAgIfCGhkZAILD2QWCGYPFgIfDwUCNC5kAgEPFgIfEAUGY2VudGVyFgJmDw8WBh8RAkAfEhsAAAAAAIBhQAEAAAAfCgKAAmRkAgIPFgIfEAUGY2VudGVyFgJmDw8WBh8RAhUfEhsAAAAAAIBhQAEAAAAfCgKAAmRkAgMPFgIfEAUGY2VudGVyFgJmDw8WBh8RAgkfEhsAAAAAAIBLQAEAAAAfCgKAAmRkAgwPFgIfCGgWAmYPFgIfDgUBNBYGZg8PFggfCQUFZXJyb3IfAQUVUXVhbnRpdHkgaXMgcmVxdWlyZWQuHwoCAh8IaGRkAgEPDxYIHwkFBWVycm9yHwEFQUFzdGVyaXNrLCAnKicsIGlzIG5vdCBhIHZhbGlkIGNoYXJhY3RlciBmb3IgQ3VzdG9tZXIgUGFydCBudW1iZXIuHwoCAh8IaGRkAgIPDxYGHwkFBWVycm9yHwoCAh8IaGRkAg0PZBYIZg8WAh8PBQI1LmQCAQ8WAh8QBQZjZW50ZXIWAmYPDxYGHxECQB8SGwAAAAAAgGFAAQAAAB8KAoACZGQCAg8WAh8QBQZjZW50ZXIWAmYPDxYGHxECFR8SGwAAAAAAgGFAAQAAAB8KAoACZGQCAw8WAh8QBQZjZW50ZXIWAmYPDxYGHxECCR8SGwAAAAAAgEtAAQAAAB8KAoACZGQCDg9kFgRmD2QWAgIBDxAPFgIfCGhkZBYAZAIBD2QWAgIBDw8WAh8DBUNqYXZhc2NyaXB0Ok9wZW5XaW5kb3coJy4uL0VzdGltYXRlU2hpcHBpbmcvRXN0aW1hdGVTaGlwcGluZy5hc3B4Jyk7ZGQCAw9kFhICCg8PFgQfAQUIQWJvdXQgVXMfAwUKfi9hYm91dHVzL2RkAgsPDxYEHwMFCn4vY29udGFjdC8fAQUKQ29udGFjdCBVc2RkAgwPDxYEHwMFDH4vcHJlc3Nyb29tLx8BBQpQcmVzcyBSb29tZGQCDQ8PFgQfAwUKfi9xdWFsaXR5Lx8BBQdRdWFsaXR5ZGQCDg8PFgQfAwUQfi9lbnZpcm9ubWVudGFsLx8BBQ1FbnZpcm9ubWVudGFsZGQCDw8PFgQfAwUTfi9lZHVjYXRpb25hbHNhbGVzLx8BBRFFZHVjYXRpb25hbCBTYWxlc2RkAhAPDxYEHwMFCn4vY2FyZWVycy8fAQUQQ2FyZWVycyBAIE1vdXNlcmRkAh4PZBYEAgEPZBYCZg8PZBYCHg1vbmNvbnRleHRtZW51BWZqYXZhc2NyaXB0OmFsZXJ0KCdDb3B5aW5nIFByb2hpYml0ZWQgYnkgTGF3IC0gSEFDS0VSIFNBRkUgaXMgYSBUcmFkZW1hcmsgb2YgU2NhbkFsZXJ0Jyk7IHJldHVybiBmYWxzZTtkAgcPFgIfAQUEMjAxMmQCHw8WAh8BBUM8YSBocmVmPSJodHRwOi8vZGUubW91c2VyLmNvbS9kZS1ERS9QYXJ0cy9pbmRleC5odG1sIj5HZXJtYW55PC9hPiAgZBgBBR5fX0NvbnRyb2xzUmVxdWlyZVBvc3RCYWNrS2V5X18WAgUmY3RsMDAkTmF2SGVhZGVyJGNoa1N0b2NrZWRNb3VzZXJIZWFkZXIFLGN0bDAwJE5hdkhlYWRlciRjaGtSb0hTQ29tcGxpYW50TW91c2VySGVhZGVyCkcEbU7GQmYQFyN%2F0MbXFktX2Zs%3D
+ctl00%24NavHeader%24ddlLanguage:en-US
+ctl00%24NavHeader%24hidSelectedCurrency:-1
+ctl00%24NavHeader%24txt1:
+as_values_046:
+ctl00%24NavHeader%24lblTrdTerm:
+ctl00%24NavHeader%24lblIsNewTerm:
+ctl00$ContentMain$hNumberOfLines:#{parts.length}
+ctl00$ContentMain$txtNumberOfLines:#{parts.length}"
+ i = 0
+ parts.each do |part|
+ puts "#{part} #{i}"
+ i += 1
+ data += "
+ctl00$ContentMain$txtCustomerPartNumber#{i}:#{part.part_num}
+ctl00$ContentMain$txtCustomerPartNumber#{i}:
+ctl00$ContentMain$txtQuantity#{i}:#{part.quant}"
+ end
+ data += "
+ctl00$ContentMain$btnAddToOrder:Add+to+My+Order"
+ puts `wget --header='Cookie: CARTCOOKIEUUID=#{cartcookie}' --post-data='#{data}' 'http://www.mouser.com/EZBuy/EZBuy.aspx' -O -`
+#CARTCOOKIEUUID=7538cfb6-6585-4b71-8c55-0c3e4c409c97
+=end
+ when Digikey
+ parts.each do |part|
+ puts "#{part.main_quant * mult} #{part.part_num}"
+ end
+=begin
+ i = 0
+ data = ''
+ parts.each do |part|
+ data += "
+ctl00$ctl00$mainContentPlaceHolder$mainContentPlaceHolder$txtQty1:#{part.quant}
+ctl00$ctl00$mainContentPlaceHolder$mainContentPlaceHolder$txtPart1:#{part.part_num}
+ctl00$ctl00$mainContentPlaceHolder$mainContentPlaceHolder$txtCref1:"
+ end
+ puts `wget --header='Cookie: TS50f921=#{cartcookie}' --post-data='#{data}' 'http://ordering.digikey.com/Ordering/FastAdd.aspx' -O -`
+#ce4ea562da94963330f72cbbfba2e7552430f47eb9bc54964f2773efa3c65dd840b6a4aeca85ab037895bf25
+=end
+ else
+ puts "error: don't know how to order from source #{source}"
+ end
+ end
+end
+
+boards = [Board.new("power_converter", "regulator", "Power Regulator"),
+ Board.new("gyro_motherboard", "gyro", "Gyro Board", "USB", "Gyro", "Analog and Digital ports", "LDO Power Regulator", "Clock and Microcontroller", "5V switching regulator")]
+if ARGV[0]
+ boards.reject! do |board|
+ board.name != ARGV[0]
+ end
+ ARGV.shift
+end
+if ARGV[0]
+ case ARGV[0]
+ when /^[mM]ouser$/
+ source = Mouser
+ when /^[dD]igikey$/
+ source = Digikey
+ else
+ puts "error: can't parse source '#{ARGV[0]}'"
+ exit
+ end
+end
+boards.each do |board|
+ if source
+ board.add_to_order(source, ARGV[1].to_i)
+ else
+ board.check
+ board.write_bom
+ end
+end
+
+__END__
+#converter = Board.new("power_converter", "regulator", "Power Regulator")
+#converter.check
+#converter.write_bom
+
+gyro = Board.new("gyro_motherboard", "gyro", "Gyro Board", "USB", "Gyro", "Analog and Digital ports", "LDO Power Regulator", "Clock and Microcontroller", "5V switching regulator")
+gyro.check
+gyro.write_bom
+
diff --git a/gyro_board/schematic/gyro_motherboard.brd b/gyro_board/schematic/gyro_motherboard.brd
new file mode 100644
index 0000000..09d052c
--- /dev/null
+++ b/gyro_board/schematic/gyro_motherboard.brd
Binary files differ
diff --git a/gyro_board/schematic/gyro_motherboard.sch b/gyro_board/schematic/gyro_motherboard.sch
new file mode 100644
index 0000000..939fa87
--- /dev/null
+++ b/gyro_board/schematic/gyro_motherboard.sch
Binary files differ
diff --git a/gyro_board/schematic/gyro_motherboard_1.19.2012/gyro_motherboard.GBL b/gyro_board/schematic/gyro_motherboard_1.19.2012/gyro_motherboard.GBL
new file mode 100644
index 0000000..053ee57
--- /dev/null
+++ b/gyro_board/schematic/gyro_motherboard_1.19.2012/gyro_motherboard.GBL
@@ -0,0 +1,5031 @@
+G75*
+G70*
+%OFA0B0*%
+%FSLAX24Y24*%
+%IPPOS*%
+%LPD*%
+%AMOC8*
+5,1,8,0,0,1.08239X$1,22.5*
+%
+%ADD10C,0.0100*%
+%ADD11R,0.0260X0.0800*%
+%ADD12R,0.0315X0.0472*%
+%ADD13R,0.0472X0.0315*%
+%ADD14R,0.0433X0.0394*%
+%ADD15R,0.0394X0.0433*%
+%ADD16C,0.0740*%
+%ADD17R,0.0740X0.0740*%
+%ADD18R,0.0591X0.0106*%
+%ADD19R,0.0106X0.0591*%
+%ADD20R,0.0866X0.0236*%
+%ADD21R,0.0602X0.0602*%
+%ADD22R,0.1306X0.1306*%
+%ADD23R,0.0197X0.0276*%
+%ADD24R,0.0276X0.0276*%
+%ADD25R,0.0472X0.0787*%
+%ADD26C,0.0827*%
+%ADD27R,0.0480X0.0358*%
+%ADD28R,0.0354X0.0276*%
+%ADD29R,0.0276X0.0354*%
+%ADD30R,0.0880X0.0480*%
+%ADD31R,0.0866X0.1417*%
+%ADD32C,0.0160*%
+%ADD33C,0.0397*%
+%ADD34C,0.0500*%
+%ADD35C,0.0700*%
+%ADD36C,0.0515*%
+%ADD37C,0.0120*%
+%ADD38C,0.0320*%
+%ADD39C,0.0436*%
+%ADD40C,0.0240*%
+%ADD41C,0.0357*%
+D10*
+X004544Y003855D02*
+X005233Y004544D01*
+X005872Y005036D02*
+X005872Y005971D01*
+X006758Y006857D01*
+X008431Y006857D01*
+X008923Y007349D01*
+X010105Y007349D01*
+X011778Y009022D01*
+X012467Y009022D01*
+X012467Y009219D02*
+X011394Y009219D01*
+X011138Y008963D01*
+X010882Y009219D01*
+X010695Y009219D01*
+X011138Y009475D02*
+X011197Y009416D01*
+X012467Y009416D01*
+X012467Y009612D02*
+X012024Y009612D01*
+X011876Y009760D01*
+X011876Y009799D01*
+X011532Y010144D01*
+X011984Y010203D02*
+X011532Y010656D01*
+X011581Y010705D01*
+X011984Y010203D02*
+X012467Y010203D01*
+X012811Y010203D01*
+X014140Y011532D01*
+X014140Y011679D01*
+X016010Y011679D01*
+X016305Y011975D01*
+X016896Y011384D01*
+X018569Y011384D01*
+X018569Y011187D02*
+X017831Y011187D01*
+X017486Y010843D01*
+X017388Y010843D01*
+X017191Y010646D01*
+X017191Y010597D01*
+X017093Y010498D01*
+X017536Y010498D02*
+X017536Y010547D01*
+X017979Y010990D01*
+X018569Y010990D01*
+X018569Y010794D02*
+X018077Y010794D01*
+X017880Y010597D01*
+X017880Y010351D01*
+X017536Y010006D01*
+X017979Y009957D02*
+X018126Y010105D01*
+X018126Y010547D01*
+X018175Y010597D01*
+X018569Y010597D01*
+X018569Y010400D02*
+X020636Y010400D01*
+X021423Y011187D01*
+X021423Y012811D01*
+X021768Y013156D01*
+X022112Y013156D01*
+X020538Y012024D02*
+X020144Y012418D01*
+X018815Y012418D01*
+X018569Y012171D01*
+X018569Y011975D02*
+X019061Y011975D01*
+X019258Y012171D01*
+X019898Y012171D01*
+X020144Y011925D01*
+X020538Y012024D02*
+X020538Y011532D01*
+X019553Y011768D02*
+X019544Y011778D01*
+X018569Y011778D01*
+X017240Y011778D01*
+X016896Y012122D01*
+X016994Y012418D02*
+X018225Y012418D01*
+X020095Y014288D01*
+X025410Y014288D01*
+X025902Y014780D01*
+X025902Y015420D01*
+X024918Y015420D02*
+X024918Y015026D01*
+X024376Y014484D01*
+X019996Y014484D01*
+X018372Y012860D01*
+X017880Y012860D01*
+X017683Y012860D02*
+X017683Y013205D01*
+X017782Y013303D01*
+X018520Y013303D01*
+X019898Y014681D01*
+X023589Y014681D01*
+X023884Y014977D01*
+X023884Y015420D01*
+X022900Y015420D02*
+X022900Y015272D01*
+X022506Y014878D01*
+X019750Y014878D01*
+X018372Y013500D01*
+X017683Y013500D01*
+X017486Y013303D01*
+X017486Y012860D01*
+X017290Y012860D02*
+X017290Y013451D01*
+X017536Y013697D01*
+X018028Y013697D01*
+X018187Y013857D01*
+X018187Y014997D01*
+X016687Y014997D02*
+X016687Y013709D01*
+X017093Y013303D01*
+X017093Y012860D01*
+X016896Y012860D02*
+X016896Y012516D01*
+X016994Y012418D01*
+X016305Y012270D02*
+X016305Y012860D01*
+X016305Y013402D01*
+X016207Y013500D01*
+X016109Y012860D02*
+X016109Y012171D01*
+X016305Y011975D01*
+X016305Y012270D02*
+X016994Y011581D01*
+X018569Y011581D01*
+X019071Y011581D01*
+X019553Y011099D01*
+X019849Y010203D02*
+X018569Y010203D01*
+X018569Y010006D02*
+X019504Y010006D01*
+X021276Y008234D01*
+X021177Y008234D01*
+X020784Y008185D02*
+X020784Y008087D01*
+X021177Y007693D01*
+X021473Y007693D01*
+X021670Y007890D01*
+X023097Y007890D01*
+X023195Y008431D02*
+X023687Y007939D01*
+X023195Y008431D02*
+X021817Y008431D01*
+X020981Y009268D01*
+X020784Y009268D01*
+X019849Y010203D01*
+X019160Y009809D02*
+X020784Y008185D01*
+X019947Y008038D02*
+X019160Y008825D01*
+X018569Y008825D01*
+X018569Y008628D02*
+X019110Y008628D01*
+X019750Y007988D01*
+X019750Y005479D01*
+X020341Y004888D01*
+X023786Y004888D01*
+X024229Y004445D01*
+X024179Y004445D01*
+X024032Y004445D01*
+X023894Y004307D01*
+X023894Y004081D01*
+X023579Y004081D02*
+X023579Y004534D01*
+X023589Y004544D01*
+X023441Y004691D01*
+X020242Y004691D01*
+X019553Y005380D01*
+X019553Y007890D01*
+X019012Y008431D01*
+X018569Y008431D01*
+X018569Y008234D02*
+X017093Y008234D01*
+X016699Y007841D01*
+X016847Y007693D01*
+X016699Y007841D02*
+X016305Y007447D01*
+X016305Y007299D01*
+X016256Y007349D01*
+X014091Y007349D01*
+X013943Y007201D01*
+X013943Y006758D01*
+X013943Y006128D01*
+X014150Y005921D01*
+X013746Y006020D02*
+X013648Y005921D01*
+X013746Y006020D02*
+X013746Y006758D01*
+X013746Y007939D01*
+X013599Y008087D01*
+X013599Y009071D01*
+X013402Y009366D02*
+X013402Y009514D01*
+X013500Y009612D01*
+X013402Y009514D02*
+X013746Y009514D01*
+X013943Y009317D01*
+X013943Y006758D01*
+X013549Y006758D02*
+X013549Y006364D01*
+X013500Y006315D01*
+X012910Y006315D01*
+X012811Y006414D01*
+X012811Y006660D01*
+X013353Y006758D02*
+X013353Y007398D01*
+X012467Y008431D02*
+X012122Y008431D01*
+X009662Y005971D01*
+X009662Y004996D01*
+X009268Y004996D01*
+X009268Y004386D01*
+X008874Y004248D02*
+X008874Y005666D01*
+X009268Y005666D01*
+X008579Y006069D02*
+X008579Y004996D01*
+X008185Y004996D01*
+X008185Y004386D01*
+X008776Y004248D02*
+X008874Y004248D01*
+X007299Y004386D02*
+X007299Y004996D01*
+X006906Y004996D01*
+X006906Y006364D01*
+X007103Y006561D01*
+X008628Y006561D01*
+X009170Y007103D01*
+X010203Y007103D01*
+X011925Y008825D01*
+X012467Y008825D01*
+X012467Y008628D02*
+X012024Y008628D01*
+X010252Y006857D01*
+X009366Y006857D01*
+X008579Y006069D01*
+X006640Y005242D02*
+X006640Y004317D01*
+X006709Y004248D01*
+X006217Y004386D02*
+X006217Y004996D01*
+X005912Y004996D01*
+X005872Y005036D01*
+X006217Y005666D02*
+X006640Y005242D01*
+X011286Y005085D02*
+X011315Y005114D01*
+X011758Y005114D01*
+X012112Y005114D02*
+X012112Y005242D01*
+X011778Y005577D01*
+X012270Y005626D02*
+X012427Y005469D01*
+X012427Y005114D01*
+X012782Y005114D02*
+X012782Y005656D01*
+X012762Y005675D01*
+X013254Y005331D02*
+X013520Y005065D01*
+X013776Y005065D01*
+X014130Y005065D02*
+X014130Y004878D01*
+X014042Y004790D01*
+X013205Y004790D01*
+X013776Y004514D02*
+X013776Y004268D01*
+X013894Y004150D01*
+X013894Y002000D01*
+X014042Y001853D01*
+X011729Y002329D02*
+X011729Y004435D01*
+X013776Y004514D02*
+X014130Y004514D01*
+X014445Y004514D01*
+X014799Y004514D01*
+X014628Y004790D02*
+X015321Y004790D01*
+X015518Y005183D02*
+X015715Y004986D01*
+X015518Y005183D02*
+X014918Y005183D01*
+X014799Y005065D01*
+X014628Y004790D02*
+X014445Y004972D01*
+X014445Y005065D01*
+X015656Y005971D02*
+X016000Y006315D01*
+X016207Y006315D01*
+X016305Y006414D01*
+X016305Y006758D01*
+X016305Y007299D01*
+X016502Y007152D02*
+X016699Y007349D01*
+X017388Y007349D01*
+X018077Y008038D01*
+X018569Y008038D01*
+X018569Y007841D02*
+X019110Y007841D01*
+X019357Y007595D01*
+X019357Y005282D01*
+X020144Y004494D01*
+X020538Y004494D01*
+X020784Y004248D01*
+X020951Y004081D01*
+X023225Y004081D01*
+X023579Y003530D02*
+X023589Y003530D01*
+X023884Y003234D01*
+X023884Y001902D01*
+X023933Y001853D01*
+X024376Y003953D02*
+X024494Y003953D01*
+X024524Y003953D01*
+X025065Y003953D01*
+X025065Y004544D01*
+X024918Y004691D01*
+X024229Y004691D01*
+X023835Y005085D01*
+X020439Y005085D01*
+X019947Y005577D01*
+X019947Y008038D01*
+X020117Y007398D02*
+X021030Y007398D01*
+X021030Y005675D01*
+X020117Y005675D01*
+X020117Y007398D01*
+X020117Y007357D02*
+X021030Y007357D01*
+X021030Y007259D02*
+X020117Y007259D01*
+X020117Y007160D02*
+X021030Y007160D01*
+X021030Y007062D02*
+X020117Y007062D01*
+X020117Y006963D02*
+X021030Y006963D01*
+X021030Y006864D02*
+X020117Y006864D01*
+X020117Y006766D02*
+X021030Y006766D01*
+X021030Y006667D02*
+X020117Y006667D01*
+X020117Y006569D02*
+X021030Y006569D01*
+X021030Y006470D02*
+X020117Y006470D01*
+X020117Y006372D02*
+X021030Y006372D01*
+X021030Y006273D02*
+X020117Y006273D01*
+X020117Y006175D02*
+X021030Y006175D01*
+X021030Y006076D02*
+X020117Y006076D01*
+X020117Y005978D02*
+X021030Y005978D01*
+X021030Y005879D02*
+X020117Y005879D01*
+X020117Y005780D02*
+X021030Y005780D01*
+X021030Y005682D02*
+X020117Y005682D01*
+X019160Y005183D02*
+X019652Y004691D01*
+X019652Y004179D01*
+X019425Y004179D01*
+X019652Y004179D02*
+X020114Y004179D01*
+X020439Y003855D01*
+X020292Y003510D02*
+X020882Y003510D01*
+X020292Y003510D02*
+X019898Y003904D01*
+X019160Y003904D01*
+X019110Y003953D01*
+X019110Y004219D01*
+X019110Y004937D01*
+X018569Y005479D01*
+X018569Y007447D01*
+X018569Y007644D02*
+X019012Y007644D01*
+X019160Y007496D01*
+X019160Y005183D01*
+X018717Y004986D02*
+X017880Y005823D01*
+X017880Y006758D01*
+X017683Y006758D02*
+X017683Y005577D01*
+X018372Y004888D01*
+X018372Y004209D01*
+X018402Y004179D01*
+X018717Y004219D02*
+X018717Y004593D01*
+X018717Y004986D01*
+X018372Y004888D02*
+X018372Y004691D01*
+X017929Y004839D02*
+X017752Y004662D01*
+X017752Y004179D01*
+X017398Y004179D02*
+X017398Y004799D01*
+X017462Y004863D01*
+X017290Y005036D01*
+X017290Y006758D01*
+X017486Y006758D02*
+X017486Y005479D01*
+X017929Y005036D01*
+X017929Y004839D01*
+X017462Y004863D02*
+X017437Y004888D01*
+X017083Y004504D02*
+X016945Y004642D01*
+X016945Y005823D01*
+X017093Y005971D01*
+X017093Y006758D01*
+X016896Y006758D02*
+X016896Y006118D01*
+X016576Y005798D01*
+X016576Y004863D01*
+X016453Y004740D01*
+X016428Y004716D01*
+X016428Y004371D01*
+X016620Y004179D01*
+X016729Y004179D01*
+X017083Y004179D02*
+X017083Y004504D01*
+X017083Y003628D02*
+X016729Y003628D01*
+X017083Y003628D02*
+X017398Y003628D01*
+X017752Y003628D01*
+X017979Y003401D01*
+X017979Y001853D01*
+X017752Y003628D02*
+X018402Y003628D01*
+X018756Y003628D01*
+X019071Y003628D01*
+X019425Y003628D01*
+X019071Y004179D02*
+X019110Y004219D01*
+X018756Y004179D02*
+X018717Y004219D01*
+X016502Y006315D02*
+X016502Y006758D01*
+X016502Y007152D01*
+X017929Y008825D02*
+X017929Y008923D01*
+X018225Y009219D01*
+X018569Y009219D01*
+X018569Y009416D02*
+X017929Y009416D01*
+X017782Y009268D01*
+X018569Y009022D02*
+X018963Y009022D01*
+X019160Y009219D01*
+X018569Y009612D02*
+X014534Y009612D01*
+X014042Y010105D01*
+X013205Y010105D01*
+X013057Y009957D01*
+X012959Y010597D02*
+X012467Y010597D01*
+X012467Y010990D02*
+X012860Y010990D01*
+X012959Y011089D01*
+X012959Y011483D01*
+X013205Y011729D01*
+X013549Y011729D01*
+X013303Y011286D02*
+X013254Y011286D01*
+X013254Y010892D01*
+X012959Y010597D01*
+X012467Y011581D02*
+X011679Y011581D01*
+X011433Y011335D01*
+X010892Y011335D01*
+X010252Y010695D01*
+X009721Y010695D01*
+X009416Y010695D01*
+X009268Y010547D01*
+X009721Y010695D02*
+X009809Y010607D01*
+X009809Y011040D02*
+X009425Y011040D01*
+X009376Y011089D01*
+X009809Y011040D02*
+X010252Y011040D01*
+X010744Y011532D01*
+X011335Y011532D01*
+X011581Y011778D01*
+X012467Y011778D01*
+X012467Y011975D02*
+X011483Y011975D01*
+X011384Y012073D01*
+X011729Y012171D02*
+X012467Y012171D01*
+X012959Y012221D02*
+X011236Y013943D01*
+X011236Y014347D01*
+X011236Y015016D02*
+X011236Y015961D01*
+X011028Y016170D01*
+X009406Y016170D01*
+X009406Y016670D02*
+X011315Y016670D01*
+X012073Y015912D01*
+X012073Y015016D01*
+X012319Y015016D01*
+X012073Y014347D02*
+X012703Y014347D01*
+X012703Y014386D01*
+X012073Y014347D02*
+X012073Y013353D01*
+X013008Y012418D01*
+X013697Y012418D01*
+X013746Y012467D01*
+X013746Y012860D01*
+X013549Y012860D02*
+X013549Y013549D01*
+X013549Y013992D01*
+X013904Y014347D01*
+X014042Y014347D01*
+X013412Y014347D01*
+X013412Y014386D01*
+X014042Y013835D02*
+X014140Y013736D01*
+X014140Y012860D01*
+X014140Y011679D01*
+X013796Y012221D02*
+X012959Y012221D01*
+X013796Y012221D02*
+X013943Y012368D01*
+X013943Y012860D01*
+X014337Y012860D02*
+X014337Y013254D01*
+X014790Y013707D01*
+X014790Y014042D01*
+X015321Y013904D02*
+X015459Y014042D01*
+X015321Y013904D02*
+X015321Y013549D01*
+X015321Y012860D02*
+X015321Y012171D01*
+X014731Y012171D02*
+X014731Y012860D01*
+X011729Y012171D02*
+X011187Y012713D01*
+X010006Y012713D01*
+X009695Y012402D01*
+X009695Y012171D01*
+X006610Y013402D02*
+X004544Y011335D01*
+X002915Y011335D01*
+X002915Y011917D01*
+X002163Y011917D01*
+X002163Y012017D01*
+X002915Y012017D01*
+X002915Y012639D01*
+X002905Y012677D01*
+X002885Y012712D01*
+X002857Y012740D01*
+X002823Y012759D01*
+X002785Y012769D01*
+X002162Y012769D01*
+X002162Y012017D01*
+X002062Y012017D01*
+X002062Y011917D01*
+X001310Y011917D01*
+X001310Y011335D01*
+X000412Y011335D01*
+X000412Y017829D01*
+X006610Y017829D01*
+X006610Y013402D01*
+X006577Y013368D02*
+X004910Y013368D01*
+X004910Y013270D02*
+X006478Y013270D01*
+X006380Y013171D02*
+X004886Y013171D01*
+X004910Y013195D02*
+X004839Y013124D01*
+X004346Y013124D01*
+X004276Y013195D01*
+X004276Y013291D01*
+X003331Y013291D01*
+X003232Y013390D01*
+X003199Y013424D01*
+X002667Y013424D01*
+X002597Y013494D01*
+X002597Y014196D01*
+X002667Y014266D01*
+X003369Y014266D01*
+X003439Y014196D01*
+X003439Y013664D01*
+X003472Y013631D01*
+X004276Y013631D01*
+X004276Y013727D01*
+X004328Y013779D01*
+X004304Y013794D01*
+X004276Y013821D01*
+X004256Y013856D01*
+X004246Y013894D01*
+X004246Y014082D01*
+X004544Y014082D01*
+X004544Y014179D01*
+X004544Y014325D01*
+X004544Y014642D01*
+X004641Y014642D01*
+X004641Y014325D01*
+X004641Y014179D01*
+X004544Y014179D01*
+X004246Y014179D01*
+X004246Y014366D01*
+X004254Y014398D01*
+X004074Y014217D01*
+X003974Y014118D01*
+X003728Y014118D01*
+X003587Y014118D01*
+X003489Y014216D01*
+X003389Y014316D01*
+X003389Y014428D01*
+X003369Y014408D01*
+X002667Y014408D01*
+X002597Y014478D01*
+X002597Y015180D01*
+X002667Y015250D01*
+X002953Y015250D01*
+X003144Y015442D01*
+X003285Y015442D01*
+X003531Y015442D01*
+X003631Y015342D01*
+X003729Y015244D01*
+X003729Y015103D01*
+X003729Y014458D01*
+X003833Y014458D01*
+X003940Y014565D01*
+X003940Y015792D01*
+X003844Y015792D01*
+X003774Y015862D01*
+X003774Y016355D01*
+X003844Y016425D01*
+X004377Y016425D01*
+X004445Y016357D01*
+X004514Y016425D01*
+X005046Y016425D01*
+X005116Y016355D01*
+X005116Y016339D01*
+X005233Y016339D01*
+X005301Y016408D01*
+X006266Y016408D01*
+X006337Y016337D01*
+X006337Y016002D01*
+X006266Y015931D01*
+X005301Y015931D01*
+X005233Y016000D01*
+X005116Y016000D01*
+X005116Y015862D01*
+X005046Y015792D01*
+X004514Y015792D01*
+X004445Y015860D01*
+X004377Y015792D01*
+X004280Y015792D01*
+X004280Y015631D01*
+X004346Y015697D01*
+X004839Y015697D01*
+X004910Y015627D01*
+X004910Y015339D01*
+X005233Y015339D01*
+X005301Y015408D01*
+X005614Y015408D01*
+X005614Y015431D01*
+X005301Y015431D01*
+X005231Y015502D01*
+X005231Y015837D01*
+X005301Y015908D01*
+X006266Y015908D01*
+X006337Y015837D01*
+X006337Y015502D01*
+X006266Y015431D01*
+X005954Y015431D01*
+X005954Y015408D01*
+X006266Y015408D01*
+X006337Y015337D01*
+X006337Y015002D01*
+X006266Y014931D01*
+X005954Y014931D01*
+X005954Y014908D01*
+X006266Y014908D01*
+X006337Y014837D01*
+X006337Y014502D01*
+X006266Y014431D01*
+X006259Y014431D01*
+X006275Y014427D01*
+X006309Y014408D01*
+X006337Y014380D01*
+X006356Y014346D01*
+X006367Y014307D01*
+X006367Y014179D01*
+X005793Y014179D01*
+X005793Y014160D01*
+X006367Y014160D01*
+X006367Y014032D01*
+X006356Y013994D01*
+X006337Y013959D01*
+X006309Y013931D01*
+X006275Y013912D01*
+X006259Y013908D01*
+X006266Y013908D01*
+X006337Y013837D01*
+X006337Y013502D01*
+X006266Y013431D01*
+X005301Y013431D01*
+X005233Y013500D01*
+X004910Y013500D01*
+X004910Y013195D01*
+X004910Y013467D02*
+X005265Y013467D01*
+X005233Y013839D02*
+X004920Y013839D01*
+X004929Y013856D01*
+X004940Y013894D01*
+X004940Y014082D01*
+X004641Y014082D01*
+X004641Y014179D01*
+X004940Y014179D01*
+X004940Y014366D01*
+X004929Y014405D01*
+X004926Y014411D01*
+X004929Y014417D01*
+X004940Y014455D01*
+X004940Y014643D01*
+X004641Y014643D01*
+X004641Y014740D01*
+X004940Y014740D01*
+X004940Y014927D01*
+X004929Y014966D01*
+X004910Y015000D01*
+X005233Y015000D01*
+X005301Y014931D01*
+X005614Y014931D01*
+X005614Y014908D01*
+X005301Y014908D01*
+X005231Y014837D01*
+X005231Y014502D01*
+X005301Y014431D01*
+X005308Y014431D01*
+X005293Y014427D01*
+X005259Y014408D01*
+X005231Y014380D01*
+X005211Y014346D01*
+X005201Y014307D01*
+X005201Y014179D01*
+X005774Y014179D01*
+X005774Y014160D01*
+X005201Y014160D01*
+X005201Y014032D01*
+X005211Y013994D01*
+X005231Y013959D01*
+X005259Y013931D01*
+X005293Y013912D01*
+X005308Y013908D01*
+X005301Y013908D01*
+X005233Y013839D01*
+X005254Y013861D02*
+X004931Y013861D01*
+X004940Y013960D02*
+X005230Y013960D01*
+X005201Y014058D02*
+X004940Y014058D01*
+X004940Y014255D02*
+X005201Y014255D01*
+X005201Y014157D02*
+X004641Y014157D01*
+X004544Y014157D02*
+X004013Y014157D01*
+X004112Y014255D02*
+X004246Y014255D01*
+X004246Y014354D02*
+X004210Y014354D01*
+X004110Y014494D02*
+X003904Y014288D01*
+X003658Y014288D01*
+X003559Y014386D01*
+X003559Y015173D01*
+X003461Y015272D01*
+X003215Y015272D01*
+X003018Y015075D01*
+X003018Y014829D01*
+X002597Y014846D02*
+X002159Y014846D01*
+X002159Y014748D02*
+X002597Y014748D01*
+X002597Y014649D02*
+X002159Y014649D01*
+X002159Y014551D02*
+X002597Y014551D01*
+X002623Y014452D02*
+X002134Y014452D01*
+X002159Y014478D02*
+X002159Y014960D01*
+X002695Y015496D01*
+X003334Y015496D01*
+X003434Y015595D01*
+X003434Y015595D01*
+X003630Y015791D01*
+X003729Y015890D01*
+X003729Y016579D01*
+X003811Y016661D01*
+X003844Y016628D01*
+X004377Y016628D01*
+X004445Y016697D01*
+X004514Y016628D01*
+X004856Y016628D01*
+X004885Y016599D01*
+X004985Y016500D01*
+X005233Y016500D01*
+X005301Y016431D01*
+X006266Y016431D01*
+X006337Y016502D01*
+X006337Y016837D01*
+X006266Y016908D01*
+X006259Y016908D01*
+X006275Y016912D01*
+X006309Y016931D01*
+X006337Y016959D01*
+X006356Y016994D01*
+X006367Y017032D01*
+X006367Y017160D01*
+X005793Y017160D01*
+X005793Y017179D01*
+X005775Y017179D01*
+X005775Y017438D01*
+X005331Y017438D01*
+X005293Y017427D01*
+X005259Y017408D01*
+X005231Y017380D01*
+X005211Y017346D01*
+X005201Y017307D01*
+X005201Y017179D01*
+X005774Y017179D01*
+X005774Y017160D01*
+X005201Y017160D01*
+X005201Y017032D01*
+X005211Y016994D01*
+X005231Y016959D01*
+X005259Y016931D01*
+X005293Y016912D01*
+X005308Y016908D01*
+X005301Y016908D01*
+X005233Y016839D01*
+X005126Y016839D01*
+X005116Y016849D01*
+X005116Y017192D01*
+X005046Y017262D01*
+X004514Y017262D01*
+X004445Y017194D01*
+X004377Y017262D01*
+X003844Y017262D01*
+X003774Y017192D01*
+X003774Y017105D01*
+X003685Y017016D01*
+X003389Y016720D01*
+X003389Y016579D01*
+X003389Y016031D01*
+X003194Y015836D01*
+X002554Y015836D01*
+X002454Y015736D01*
+X001968Y015250D01*
+X001388Y015250D01*
+X001317Y015180D01*
+X001317Y014478D01*
+X001388Y014408D01*
+X002089Y014408D01*
+X002159Y014478D01*
+X002097Y014286D02*
+X002059Y014296D01*
+X001779Y014296D01*
+X001779Y013886D01*
+X001698Y013886D01*
+X001698Y014296D01*
+X001418Y014296D01*
+X001379Y014286D01*
+X001345Y014266D01*
+X001317Y014238D01*
+X001298Y014204D01*
+X001287Y014166D01*
+X001287Y013885D01*
+X001698Y013885D01*
+X001698Y013804D01*
+X001779Y013804D01*
+X001779Y013394D01*
+X002059Y013394D01*
+X002097Y013404D01*
+X002132Y013424D01*
+X002160Y013451D01*
+X002179Y013486D01*
+X002189Y013524D01*
+X002189Y013804D01*
+X001779Y013804D01*
+X001779Y013885D01*
+X002189Y013885D01*
+X002189Y014166D01*
+X002179Y014204D01*
+X002160Y014238D01*
+X002132Y014266D01*
+X002097Y014286D01*
+X002142Y014255D02*
+X002657Y014255D01*
+X002597Y014157D02*
+X002189Y014157D01*
+X002189Y014058D02*
+X002597Y014058D01*
+X002597Y013960D02*
+X002189Y013960D01*
+X002189Y013762D02*
+X002597Y013762D01*
+X002597Y013664D02*
+X002189Y013664D01*
+X002189Y013565D02*
+X002597Y013565D01*
+X002624Y013467D02*
+X002168Y013467D01*
+X001779Y013467D02*
+X001698Y013467D01*
+X001698Y013394D02*
+X001418Y013394D01*
+X001379Y013404D01*
+X001345Y013424D01*
+X001317Y013451D01*
+X001298Y013486D01*
+X001287Y013524D01*
+X001287Y013804D01*
+X001698Y013804D01*
+X001698Y013394D01*
+X001698Y013565D02*
+X001779Y013565D01*
+X001779Y013664D02*
+X001698Y013664D01*
+X001698Y013762D02*
+X001779Y013762D01*
+X001779Y013861D02*
+X002597Y013861D01*
+X003018Y013845D02*
+X003402Y013461D01*
+X004593Y013461D01*
+X004801Y013670D01*
+X005784Y013670D01*
+X006337Y013664D02*
+X006610Y013664D01*
+X006610Y013762D02*
+X006337Y013762D01*
+X006313Y013861D02*
+X006610Y013861D01*
+X006610Y013960D02*
+X006337Y013960D01*
+X006367Y014058D02*
+X006610Y014058D01*
+X006610Y014157D02*
+X006367Y014157D01*
+X006367Y014255D02*
+X006610Y014255D01*
+X006610Y014354D02*
+X006352Y014354D01*
+X006287Y014452D02*
+X006610Y014452D01*
+X006610Y014551D02*
+X006337Y014551D01*
+X006337Y014649D02*
+X006610Y014649D01*
+X006610Y014748D02*
+X006337Y014748D01*
+X006328Y014846D02*
+X006610Y014846D01*
+X006610Y014945D02*
+X006280Y014945D01*
+X006337Y015044D02*
+X006610Y015044D01*
+X006610Y015142D02*
+X006337Y015142D01*
+X006337Y015241D02*
+X006610Y015241D01*
+X006610Y015339D02*
+X006335Y015339D01*
+X006273Y015438D02*
+X006610Y015438D01*
+X006610Y015536D02*
+X006337Y015536D01*
+X006337Y015635D02*
+X006610Y015635D01*
+X006610Y015733D02*
+X006337Y015733D01*
+X006337Y015832D02*
+X006610Y015832D01*
+X006610Y015930D02*
+X005116Y015930D01*
+X005086Y015832D02*
+X005231Y015832D01*
+X005231Y015733D02*
+X004280Y015733D01*
+X004280Y015635D02*
+X004284Y015635D01*
+X004417Y015832D02*
+X004473Y015832D01*
+X004780Y016109D02*
+X004841Y016170D01*
+X005784Y016170D01*
+X005784Y015670D02*
+X005784Y015170D01*
+X004784Y015170D01*
+X004593Y015360D01*
+X004910Y015438D02*
+X005295Y015438D01*
+X005231Y015536D02*
+X004910Y015536D01*
+X004901Y015635D02*
+X005231Y015635D01*
+X005784Y015170D02*
+X005784Y014670D01*
+X005280Y014452D02*
+X004939Y014452D01*
+X004940Y014354D02*
+X005216Y014354D01*
+X005231Y014551D02*
+X004940Y014551D01*
+X004940Y014748D02*
+X005231Y014748D01*
+X005231Y014649D02*
+X004641Y014649D01*
+X004641Y014551D02*
+X004544Y014551D01*
+X004544Y014452D02*
+X004641Y014452D01*
+X004641Y014354D02*
+X004544Y014354D01*
+X004544Y014255D02*
+X004641Y014255D01*
+X004246Y014058D02*
+X003439Y014058D01*
+X003439Y013960D02*
+X004246Y013960D01*
+X004255Y013861D02*
+X003439Y013861D01*
+X003439Y013762D02*
+X004311Y013762D01*
+X004276Y013664D02*
+X003439Y013664D01*
+X003254Y013368D02*
+X000412Y013368D01*
+X000412Y013270D02*
+X004276Y013270D01*
+X004299Y013171D02*
+X000412Y013171D01*
+X000412Y013073D02*
+X006281Y013073D01*
+X006183Y012974D02*
+X000412Y012974D01*
+X000412Y012876D02*
+X006084Y012876D01*
+X005986Y012777D02*
+X000412Y012777D01*
+X000412Y012679D02*
+X001321Y012679D01*
+X001320Y012677D02*
+X001310Y012639D01*
+X001310Y012017D01*
+X002062Y012017D01*
+X002062Y012769D01*
+X001440Y012769D01*
+X001402Y012759D01*
+X001368Y012740D01*
+X001340Y012712D01*
+X001320Y012677D01*
+X001310Y012580D02*
+X000412Y012580D01*
+X000412Y012481D02*
+X001310Y012481D01*
+X001310Y012383D02*
+X000412Y012383D01*
+X000412Y012284D02*
+X001310Y012284D01*
+X001310Y012186D02*
+X000412Y012186D01*
+X000412Y012087D02*
+X001310Y012087D01*
+X001310Y011890D02*
+X000412Y011890D01*
+X000412Y011792D02*
+X001310Y011792D01*
+X001310Y011693D02*
+X000412Y011693D01*
+X000412Y011595D02*
+X001310Y011595D01*
+X001310Y011496D02*
+X000412Y011496D01*
+X000412Y011397D02*
+X001310Y011397D01*
+X002062Y011989D02*
+X000412Y011989D01*
+X002062Y012087D02*
+X002162Y012087D01*
+X002163Y011989D02*
+X005197Y011989D01*
+X005099Y011890D02*
+X002915Y011890D01*
+X002915Y011792D02*
+X005000Y011792D01*
+X004902Y011693D02*
+X002915Y011693D01*
+X002915Y011595D02*
+X004803Y011595D01*
+X004705Y011496D02*
+X002915Y011496D01*
+X002915Y011397D02*
+X004606Y011397D01*
+X005296Y012087D02*
+X002915Y012087D01*
+X002915Y012186D02*
+X005394Y012186D01*
+X005493Y012284D02*
+X002915Y012284D01*
+X002915Y012383D02*
+X005592Y012383D01*
+X005690Y012481D02*
+X002915Y012481D01*
+X002915Y012580D02*
+X005789Y012580D01*
+X005887Y012679D02*
+X002904Y012679D01*
+X002162Y012679D02*
+X002062Y012679D01*
+X002062Y012580D02*
+X002162Y012580D01*
+X002162Y012481D02*
+X002062Y012481D01*
+X002062Y012383D02*
+X002162Y012383D01*
+X002162Y012284D02*
+X002062Y012284D01*
+X002062Y012186D02*
+X002162Y012186D01*
+X001308Y013467D02*
+X000412Y013467D01*
+X000412Y013565D02*
+X001287Y013565D01*
+X001287Y013664D02*
+X000412Y013664D01*
+X000412Y013762D02*
+X001287Y013762D01*
+X001287Y013960D02*
+X000412Y013960D01*
+X000412Y014058D02*
+X001287Y014058D01*
+X001287Y014157D02*
+X000412Y014157D01*
+X000412Y014255D02*
+X001335Y014255D01*
+X001343Y014452D02*
+X000412Y014452D01*
+X000412Y014354D02*
+X003389Y014354D01*
+X003379Y014255D02*
+X003450Y014255D01*
+X003439Y014157D02*
+X003548Y014157D01*
+X003729Y014551D02*
+X003927Y014551D01*
+X003940Y014649D02*
+X003729Y014649D01*
+X003729Y014748D02*
+X003940Y014748D01*
+X003940Y014846D02*
+X003729Y014846D01*
+X003729Y014945D02*
+X003940Y014945D01*
+X003940Y015044D02*
+X003729Y015044D01*
+X003729Y015142D02*
+X003940Y015142D01*
+X003940Y015241D02*
+X003729Y015241D01*
+X003634Y015339D02*
+X003940Y015339D01*
+X003940Y015438D02*
+X003535Y015438D01*
+X003375Y015536D02*
+X003940Y015536D01*
+X003940Y015635D02*
+X003474Y015635D01*
+X003572Y015733D02*
+X003940Y015733D01*
+X003804Y015832D02*
+X003671Y015832D01*
+X003630Y015791D02*
+X003630Y015791D01*
+X003729Y015930D02*
+X003774Y015930D01*
+X003774Y016029D02*
+X003729Y016029D01*
+X003729Y016128D02*
+X003774Y016128D01*
+X003774Y016226D02*
+X003729Y016226D01*
+X003729Y016325D02*
+X003774Y016325D01*
+X003729Y016423D02*
+X003842Y016423D01*
+X003729Y016522D02*
+X004963Y016522D01*
+X005048Y016423D02*
+X006610Y016423D01*
+X006610Y016325D02*
+X006337Y016325D01*
+X006337Y016226D02*
+X006610Y016226D01*
+X006610Y016128D02*
+X006337Y016128D01*
+X006337Y016029D02*
+X006610Y016029D01*
+X006610Y016522D02*
+X006337Y016522D01*
+X006337Y016620D02*
+X006610Y016620D01*
+X006610Y016719D02*
+X006337Y016719D01*
+X006337Y016817D02*
+X006610Y016817D01*
+X006610Y016916D02*
+X006282Y016916D01*
+X006362Y017014D02*
+X006610Y017014D01*
+X006610Y017113D02*
+X006367Y017113D01*
+X006367Y017179D02*
+X006367Y017307D01*
+X006356Y017346D01*
+X006337Y017380D01*
+X006309Y017408D01*
+X006275Y017427D01*
+X006236Y017438D01*
+X005793Y017438D01*
+X005793Y017179D01*
+X006367Y017179D01*
+X006367Y017211D02*
+X006610Y017211D01*
+X006610Y017310D02*
+X006366Y017310D01*
+X006307Y017409D02*
+X006610Y017409D01*
+X006610Y017507D02*
+X002794Y017507D01*
+X002785Y017510D02*
+X002162Y017510D01*
+X002162Y016757D01*
+X002062Y016757D01*
+X002062Y016657D01*
+X001310Y016657D01*
+X001310Y016034D01*
+X001320Y015996D01*
+X001340Y015962D01*
+X001368Y015934D01*
+X001402Y015914D01*
+X001440Y015904D01*
+X002062Y015904D01*
+X002062Y016657D01*
+X002162Y016657D01*
+X002162Y015904D01*
+X002785Y015904D01*
+X002823Y015914D01*
+X002857Y015934D01*
+X002885Y015962D01*
+X002905Y015996D01*
+X002915Y016034D01*
+X002915Y016657D01*
+X002163Y016657D01*
+X002163Y016757D01*
+X002915Y016757D01*
+X002915Y017379D01*
+X002905Y017418D01*
+X002885Y017452D01*
+X002857Y017480D01*
+X002823Y017499D01*
+X002785Y017510D01*
+X002907Y017409D02*
+X005260Y017409D01*
+X005201Y017310D02*
+X002915Y017310D01*
+X002915Y017211D02*
+X003794Y017211D01*
+X003774Y017113D02*
+X002915Y017113D01*
+X002915Y017014D02*
+X003683Y017014D01*
+X003585Y016916D02*
+X002915Y016916D01*
+X002915Y016817D02*
+X003486Y016817D01*
+X003389Y016719D02*
+X002163Y016719D01*
+X002162Y016817D02*
+X002062Y016817D01*
+X002062Y016757D02*
+X002062Y017510D01*
+X001440Y017510D01*
+X001402Y017499D01*
+X001368Y017480D01*
+X001340Y017452D01*
+X001320Y017418D01*
+X001310Y017379D01*
+X001310Y016757D01*
+X002062Y016757D01*
+X002062Y016719D02*
+X000412Y016719D01*
+X000412Y016817D02*
+X001310Y016817D01*
+X001310Y016916D02*
+X000412Y016916D01*
+X000412Y017014D02*
+X001310Y017014D01*
+X001310Y017113D02*
+X000412Y017113D01*
+X000412Y017211D02*
+X001310Y017211D01*
+X001310Y017310D02*
+X000412Y017310D01*
+X000412Y017409D02*
+X001318Y017409D01*
+X001431Y017507D02*
+X000412Y017507D01*
+X000412Y017606D02*
+X006610Y017606D01*
+X006610Y017704D02*
+X000412Y017704D01*
+X000412Y017803D02*
+X006610Y017803D01*
+X005793Y017409D02*
+X005775Y017409D01*
+X005775Y017310D02*
+X005793Y017310D01*
+X005793Y017211D02*
+X005775Y017211D01*
+X005784Y016670D02*
+X005055Y016670D01*
+X004780Y016945D01*
+X005116Y016916D02*
+X005285Y016916D01*
+X005205Y017014D02*
+X005116Y017014D01*
+X005116Y017113D02*
+X005201Y017113D01*
+X005201Y017211D02*
+X005096Y017211D01*
+X004463Y017211D02*
+X004427Y017211D01*
+X004110Y016945D02*
+X003855Y016945D01*
+X003559Y016650D01*
+X003559Y015961D01*
+X003264Y015666D01*
+X002624Y015666D01*
+X001788Y014829D01*
+X001738Y014829D01*
+X002159Y014945D02*
+X002597Y014945D01*
+X002597Y015044D02*
+X002243Y015044D01*
+X002341Y015142D02*
+X002597Y015142D01*
+X002658Y015241D02*
+X002440Y015241D01*
+X002538Y015339D02*
+X003042Y015339D01*
+X003140Y015438D02*
+X002637Y015438D01*
+X002353Y015635D02*
+X000412Y015635D01*
+X000412Y015733D02*
+X002452Y015733D01*
+X002550Y015832D02*
+X000412Y015832D01*
+X000412Y015930D02*
+X001374Y015930D01*
+X001311Y016029D02*
+X000412Y016029D01*
+X000412Y016128D02*
+X001310Y016128D01*
+X001310Y016226D02*
+X000412Y016226D01*
+X000412Y016325D02*
+X001310Y016325D01*
+X001310Y016423D02*
+X000412Y016423D01*
+X000412Y016522D02*
+X001310Y016522D01*
+X001310Y016620D02*
+X000412Y016620D01*
+X000412Y015536D02*
+X002255Y015536D01*
+X002156Y015438D02*
+X000412Y015438D01*
+X000412Y015339D02*
+X002057Y015339D01*
+X001378Y015241D02*
+X000412Y015241D01*
+X000412Y015142D02*
+X001317Y015142D01*
+X001317Y015044D02*
+X000412Y015044D01*
+X000412Y014945D02*
+X001317Y014945D01*
+X001317Y014846D02*
+X000412Y014846D01*
+X000412Y014748D02*
+X001317Y014748D01*
+X001317Y014649D02*
+X000412Y014649D01*
+X000412Y014551D02*
+X001317Y014551D01*
+X001698Y014255D02*
+X001779Y014255D01*
+X001779Y014157D02*
+X001698Y014157D01*
+X001698Y014058D02*
+X001779Y014058D01*
+X001779Y013960D02*
+X001698Y013960D01*
+X001698Y013861D02*
+X000412Y013861D01*
+X002062Y015930D02*
+X002162Y015930D01*
+X002162Y016029D02*
+X002062Y016029D01*
+X002062Y016128D02*
+X002162Y016128D01*
+X002162Y016226D02*
+X002062Y016226D01*
+X002062Y016325D02*
+X002162Y016325D01*
+X002162Y016423D02*
+X002062Y016423D01*
+X002062Y016522D02*
+X002162Y016522D01*
+X002162Y016620D02*
+X002062Y016620D01*
+X002062Y016916D02*
+X002162Y016916D01*
+X002162Y017014D02*
+X002062Y017014D01*
+X002062Y017113D02*
+X002162Y017113D01*
+X002162Y017211D02*
+X002062Y017211D01*
+X002062Y017310D02*
+X002162Y017310D01*
+X002162Y017409D02*
+X002062Y017409D01*
+X002062Y017507D02*
+X002162Y017507D01*
+X002915Y016620D02*
+X003389Y016620D01*
+X003389Y016522D02*
+X002915Y016522D01*
+X002915Y016423D02*
+X003389Y016423D01*
+X003389Y016325D02*
+X002915Y016325D01*
+X002915Y016226D02*
+X003389Y016226D01*
+X003389Y016128D02*
+X002915Y016128D01*
+X002914Y016029D02*
+X003387Y016029D01*
+X003289Y015930D02*
+X002851Y015930D01*
+X003770Y016620D02*
+X004864Y016620D01*
+X004511Y016423D02*
+X004379Y016423D01*
+X004110Y016109D02*
+X004110Y014494D01*
+X004940Y014846D02*
+X005240Y014846D01*
+X005287Y014945D02*
+X004935Y014945D01*
+X006337Y013565D02*
+X006610Y013565D01*
+X006610Y013467D02*
+X006302Y013467D01*
+X009406Y015170D02*
+X009662Y015170D01*
+X009788Y015170D01*
+X012811Y015715D02*
+X012811Y016010D01*
+X013107Y016305D01*
+X015223Y016305D01*
+X015764Y015764D01*
+X015961Y015961D01*
+X016797Y015961D01*
+X017187Y016351D01*
+X017187Y016551D01*
+X017089Y016453D01*
+X016847Y016453D01*
+X017187Y016551D02*
+X017187Y017417D01*
+X017687Y017417D02*
+X017687Y016748D01*
+X017687Y016605D01*
+X016797Y015715D01*
+X016256Y015715D01*
+X015764Y015223D01*
+X015124Y015862D01*
+X013205Y015862D01*
+X012811Y015715D02*
+X013156Y015370D01*
+X013205Y015370D01*
+X018569Y009809D02*
+X019160Y009809D01*
+X022408Y006857D02*
+X023392Y006857D01*
+X023392Y006071D01*
+X023390Y006069D01*
+X022408Y006069D01*
+X022408Y006857D01*
+X022408Y006766D02*
+X023392Y006766D01*
+X023392Y006667D02*
+X022408Y006667D01*
+X022408Y006569D02*
+X023392Y006569D01*
+X023392Y006470D02*
+X022408Y006470D01*
+X022408Y006372D02*
+X023392Y006372D01*
+X023392Y006273D02*
+X022408Y006273D01*
+X022408Y006175D02*
+X023392Y006175D01*
+X023392Y006076D02*
+X022408Y006076D01*
+X024229Y004445D02*
+X024622Y004445D01*
+X024721Y004347D01*
+X024376Y003953D02*
+X024248Y004081D01*
+X011729Y002329D02*
+X011252Y001853D01*
+X011187Y001853D01*
+X002623Y010401D02*
+X002477Y010401D01*
+X002550Y010401D02*
+X002550Y010621D01*
+X002623Y010547D01*
+X002329Y010584D02*
+X002292Y010621D01*
+X002219Y010621D01*
+X002182Y010584D01*
+X002182Y010547D01*
+X002329Y010401D01*
+X002182Y010401D01*
+X002034Y010401D02*
+X001887Y010621D01*
+X001740Y010547D02*
+X001666Y010621D01*
+X001666Y010401D01*
+X001593Y010401D02*
+X001740Y010401D01*
+X001445Y010511D02*
+X001298Y010511D01*
+X001335Y010401D02*
+X001335Y010621D01*
+X001445Y010511D01*
+X001150Y010401D02*
+X001003Y010621D01*
+X000856Y010547D02*
+X000782Y010621D01*
+X000782Y010401D01*
+X000709Y010401D02*
+X000856Y010401D01*
+X000561Y010401D02*
+X000414Y010401D01*
+X000488Y010401D02*
+X000488Y010621D01*
+X000561Y010547D01*
+D11*
+X016687Y014997D03*
+X017187Y014997D03*
+X017687Y014997D03*
+X018187Y014997D03*
+X018187Y017417D03*
+X017687Y017417D03*
+X017187Y017417D03*
+X016687Y017417D03*
+D12*
+X013412Y014386D03*
+X012703Y014386D03*
+X017083Y014140D03*
+X017792Y014140D03*
+X009376Y011089D03*
+X008668Y011089D03*
+X004652Y005331D03*
+X004652Y004691D03*
+X003943Y004691D03*
+X003520Y004691D03*
+X002811Y004691D03*
+X002388Y004691D03*
+X001679Y004691D03*
+X001256Y004691D03*
+X000547Y004691D03*
+X000941Y005331D03*
+X001650Y005331D03*
+X002811Y005331D03*
+X003520Y005331D03*
+X003943Y005331D03*
+D13*
+X009809Y009898D03*
+X009809Y010607D03*
+D14*
+X014790Y014042D03*
+X015459Y014042D03*
+X004780Y016109D03*
+X004110Y016109D03*
+X004110Y016945D03*
+X004780Y016945D03*
+D15*
+X004593Y015360D03*
+X004593Y014691D03*
+X004593Y014130D03*
+X004593Y013461D03*
+X010400Y013362D03*
+X010400Y014032D03*
+X010400Y014593D03*
+X011236Y014347D03*
+X011236Y015016D03*
+X012073Y015016D03*
+X012073Y014347D03*
+X010400Y015262D03*
+X019553Y011768D03*
+X019553Y011099D03*
+X009268Y005666D03*
+X009268Y004996D03*
+X009268Y004386D03*
+X009268Y003717D03*
+X008185Y003717D03*
+X008185Y004386D03*
+X008185Y004996D03*
+X008185Y005666D03*
+X007299Y005666D03*
+X007299Y004996D03*
+X007299Y004386D03*
+X007299Y003717D03*
+X006217Y003717D03*
+X006217Y004386D03*
+X006217Y004996D03*
+X006217Y005666D03*
+D16*
+X006266Y002853D03*
+X007250Y002853D03*
+X008234Y002853D03*
+X009219Y002853D03*
+X009219Y001853D03*
+X008234Y001853D03*
+X007250Y001853D03*
+X006266Y001853D03*
+X006266Y000853D03*
+X007250Y000853D03*
+X008234Y000853D03*
+X009219Y000853D03*
+X011187Y001853D03*
+X012270Y001853D03*
+X013353Y001853D03*
+X014435Y001853D03*
+X015518Y001853D03*
+X016502Y001853D03*
+X017486Y001853D03*
+X018471Y001853D03*
+X019455Y001853D03*
+X020439Y001853D03*
+X021423Y001853D03*
+X022408Y001853D03*
+X023392Y001853D03*
+X024376Y001853D03*
+X025360Y001853D03*
+X026345Y001853D03*
+X026345Y002853D03*
+X025360Y002853D03*
+X024376Y002853D03*
+X023392Y002853D03*
+X022408Y002853D03*
+X021423Y002853D03*
+X020439Y002853D03*
+X019455Y002853D03*
+X018471Y002853D03*
+X017486Y002853D03*
+X016502Y002853D03*
+X015518Y002853D03*
+X014435Y002853D03*
+X014435Y003853D03*
+X013353Y003853D03*
+X013353Y002853D03*
+X012270Y002853D03*
+X012270Y003853D03*
+X011187Y003853D03*
+X011187Y002853D03*
+X015518Y000853D03*
+X016502Y000853D03*
+X017486Y000853D03*
+X018471Y000853D03*
+X019455Y000853D03*
+X020439Y000853D03*
+X021423Y000853D03*
+X022408Y000853D03*
+X023392Y000853D03*
+X024376Y000853D03*
+X025360Y000853D03*
+X026345Y000853D03*
+X009695Y012171D03*
+X008695Y012171D03*
+X007695Y012171D03*
+D17*
+X010695Y012171D03*
+X011187Y000853D03*
+X012270Y000853D03*
+X013353Y000853D03*
+X014435Y000853D03*
+D18*
+X012467Y007447D03*
+X012467Y007644D03*
+X012467Y007841D03*
+X012467Y008038D03*
+X012467Y008234D03*
+X012467Y008431D03*
+X012467Y008628D03*
+X012467Y008825D03*
+X012467Y009022D03*
+X012467Y009219D03*
+X012467Y009416D03*
+X012467Y009612D03*
+X012467Y009809D03*
+X012467Y010006D03*
+X012467Y010203D03*
+X012467Y010400D03*
+X012467Y010597D03*
+X012467Y010794D03*
+X012467Y010990D03*
+X012467Y011187D03*
+X012467Y011384D03*
+X012467Y011581D03*
+X012467Y011778D03*
+X012467Y011975D03*
+X012467Y012171D03*
+X018569Y012171D03*
+X018569Y011975D03*
+X018569Y011778D03*
+X018569Y011581D03*
+X018569Y011384D03*
+X018569Y011187D03*
+X018569Y010990D03*
+X018569Y010794D03*
+X018569Y010597D03*
+X018569Y010400D03*
+X018569Y010203D03*
+X018569Y010006D03*
+X018569Y009809D03*
+X018569Y009612D03*
+X018569Y009416D03*
+X018569Y009219D03*
+X018569Y009022D03*
+X018569Y008825D03*
+X018569Y008628D03*
+X018569Y008431D03*
+X018569Y008234D03*
+X018569Y008038D03*
+X018569Y007841D03*
+X018569Y007644D03*
+X018569Y007447D03*
+D19*
+X017880Y006758D03*
+X017683Y006758D03*
+X017486Y006758D03*
+X017290Y006758D03*
+X017093Y006758D03*
+X016896Y006758D03*
+X016699Y006758D03*
+X016502Y006758D03*
+X016305Y006758D03*
+X016109Y006758D03*
+X015912Y006758D03*
+X015715Y006758D03*
+X015518Y006758D03*
+X015321Y006758D03*
+X015124Y006758D03*
+X014927Y006758D03*
+X014731Y006758D03*
+X014534Y006758D03*
+X014337Y006758D03*
+X014140Y006758D03*
+X013943Y006758D03*
+X013746Y006758D03*
+X013549Y006758D03*
+X013353Y006758D03*
+X013156Y006758D03*
+X013156Y012860D03*
+X013353Y012860D03*
+X013549Y012860D03*
+X013746Y012860D03*
+X013943Y012860D03*
+X014140Y012860D03*
+X014337Y012860D03*
+X014534Y012860D03*
+X014731Y012860D03*
+X014927Y012860D03*
+X015124Y012860D03*
+X015321Y012860D03*
+X015518Y012860D03*
+X015715Y012860D03*
+X015912Y012860D03*
+X016109Y012860D03*
+X016305Y012860D03*
+X016502Y012860D03*
+X016699Y012860D03*
+X016896Y012860D03*
+X017093Y012860D03*
+X017290Y012860D03*
+X017486Y012860D03*
+X017683Y012860D03*
+X017880Y012860D03*
+D20*
+X009406Y013670D03*
+X009406Y014170D03*
+X009406Y014670D03*
+X009406Y015170D03*
+X009406Y015670D03*
+X009406Y016170D03*
+X009406Y016670D03*
+X009406Y017170D03*
+X005784Y017170D03*
+X005784Y016670D03*
+X005784Y016170D03*
+X005784Y015670D03*
+X005784Y015170D03*
+X005784Y014670D03*
+X005784Y014170D03*
+X005784Y013670D03*
+D21*
+X003018Y013845D03*
+X003018Y014829D03*
+X001738Y014829D03*
+X001738Y013845D03*
+D22*
+X002112Y011967D03*
+X002112Y016707D03*
+D23*
+X012112Y005114D03*
+X012427Y005114D03*
+X012427Y004563D03*
+X012112Y004563D03*
+X014130Y004514D03*
+X014445Y004514D03*
+X014445Y005065D03*
+X014130Y005065D03*
+X017083Y004179D03*
+X017398Y004179D03*
+X017398Y003628D03*
+X017083Y003628D03*
+X018756Y003628D03*
+X019071Y003628D03*
+X019071Y004179D03*
+X018756Y004179D03*
+X023579Y004081D03*
+X023894Y004081D03*
+X023894Y003530D03*
+X023579Y003530D03*
+D24*
+X023225Y003530D03*
+X023225Y004081D03*
+X024248Y004081D03*
+X024248Y003530D03*
+X019425Y003628D03*
+X019425Y004179D03*
+X018402Y004179D03*
+X017752Y004179D03*
+X017752Y003628D03*
+X018402Y003628D03*
+X016729Y003628D03*
+X016729Y004179D03*
+X014799Y004514D03*
+X014799Y005065D03*
+X013776Y005065D03*
+X013776Y004514D03*
+X012782Y004563D03*
+X012782Y005114D03*
+X011758Y005114D03*
+X011758Y004563D03*
+D25*
+X004091Y006315D03*
+X002831Y006315D03*
+X002221Y006315D03*
+X002221Y007496D03*
+X000961Y007496D03*
+X000961Y006315D03*
+D26*
+X002998Y003215D02*
+X003825Y003215D01*
+X003825Y001246D02*
+X002998Y001246D01*
+D27*
+X000754Y001439D03*
+X000754Y002727D03*
+D28*
+X011138Y008963D03*
+X011138Y009475D03*
+X011532Y010144D03*
+X011532Y010656D03*
+X014042Y013835D03*
+X014042Y014347D03*
+D29*
+X014150Y005921D03*
+X013638Y005921D03*
+X015656Y005971D03*
+X016168Y005971D03*
+D30*
+X022988Y005553D03*
+X022988Y006463D03*
+X022988Y007373D03*
+D31*
+X020548Y006463D03*
+D32*
+X021571Y006660D02*
+X022284Y007373D01*
+X022988Y007373D01*
+X016502Y006315D02*
+X016502Y006305D01*
+X016168Y005971D01*
+X011758Y004563D02*
+X011729Y004534D01*
+X011729Y004435D01*
+X009859Y003126D02*
+X009268Y003717D01*
+X009859Y003126D02*
+X009859Y001345D01*
+X009366Y000853D01*
+X009219Y000853D01*
+X008185Y003717D02*
+X007299Y003717D01*
+X006217Y003717D01*
+X007695Y012171D02*
+X007597Y012270D01*
+X007447Y012270D01*
+X008992Y014170D02*
+X009071Y014170D01*
+X009406Y014170D01*
+X008992Y014170D02*
+X008727Y014435D01*
+X008727Y016945D01*
+X008951Y017170D01*
+X009406Y017170D01*
+X009406Y015170D02*
+X009406Y014670D01*
+X017083Y014140D02*
+X017187Y014244D01*
+X017187Y014997D01*
+X017687Y014997D02*
+X017687Y014244D01*
+X017792Y014140D01*
+D33*
+X008185Y006168D03*
+X007299Y006168D03*
+X006709Y004248D03*
+X008776Y004248D03*
+X008776Y003569D03*
+X011286Y005085D03*
+X011778Y005577D03*
+X012270Y005626D03*
+X012762Y005675D03*
+X013254Y005331D03*
+X013205Y004790D03*
+X001542Y003855D03*
+D34*
+X006266Y000853D02*
+X007250Y000853D01*
+D35*
+X006266Y000853D02*
+X008234Y000853D01*
+X026345Y000853D01*
+X026345Y001853D02*
+X025360Y001853D01*
+X024376Y001853D01*
+X023933Y001853D01*
+X023392Y001853D01*
+X022408Y001853D01*
+X021423Y001853D01*
+X020439Y001853D01*
+X019455Y001853D01*
+X018471Y001853D01*
+X017979Y001853D01*
+X017486Y001853D01*
+X016502Y001853D01*
+X015518Y001853D01*
+X014435Y001853D01*
+X014042Y001853D01*
+X013353Y001853D01*
+X012270Y001853D01*
+X011187Y001853D01*
+D36*
+X010351Y002329D03*
+D37*
+X010351Y001689D01*
+X011187Y000853D01*
+X008973Y003569D02*
+X008776Y003569D01*
+X008185Y003569D01*
+X008185Y003717D01*
+X008973Y003717D02*
+X008973Y003569D01*
+X008973Y003717D02*
+X009268Y003717D01*
+X008185Y005666D02*
+X008185Y006168D01*
+X007299Y006168D02*
+X007299Y005666D01*
+X013156Y008628D02*
+X013156Y009120D01*
+X013402Y009366D01*
+X010400Y013362D02*
+X010093Y013670D01*
+X009406Y013670D01*
+X009406Y014170D02*
+X010262Y014170D01*
+X010400Y014032D01*
+X010400Y014593D01*
+X010307Y015170D02*
+X009662Y015170D01*
+X010307Y015170D02*
+X010400Y015262D01*
+X010059Y015670D02*
+X010154Y015764D01*
+X010059Y015670D02*
+X009406Y015670D01*
+X023225Y003530D02*
+X023579Y003530D01*
+X023894Y003530D01*
+X024248Y003530D01*
+D38*
+X023269Y005553D02*
+X022988Y005553D01*
+X023269Y005553D02*
+X024130Y006414D01*
+X017187Y014997D02*
+X017187Y015563D01*
+X017290Y015666D01*
+X018187Y017417D02*
+X018454Y017683D01*
+X018618Y017683D01*
+X009406Y013670D02*
+X008847Y013670D01*
+X008677Y013500D01*
+X007447Y012270D01*
+X005036Y009859D01*
+X005036Y006364D01*
+X004691Y006020D01*
+X004691Y005370D01*
+X004652Y005331D01*
+X004652Y004691D01*
+X004333Y004291D02*
+X004399Y004225D01*
+X004544Y004225D01*
+X004544Y000522D01*
+X000522Y000522D01*
+X000522Y002317D01*
+X001090Y002317D01*
+X001224Y002452D01*
+X001224Y002645D01*
+X001247Y002668D01*
+X001335Y002668D01*
+X001500Y002736D01*
+X001626Y002863D01*
+X001694Y003027D01*
+X001694Y003206D01*
+X001626Y003370D01*
+X001570Y003426D01*
+X001627Y003426D01*
+X001784Y003491D01*
+X001905Y003612D01*
+X001946Y003711D01*
+X002013Y003711D01*
+X002111Y003711D01*
+X002255Y003770D01*
+X002364Y003880D01*
+X002376Y003907D01*
+X002414Y003945D01*
+X002482Y004110D01*
+X002482Y004288D01*
+X002414Y004453D01*
+X002288Y004579D01*
+X002123Y004647D01*
+X002069Y004647D01*
+X002069Y004769D01*
+X002067Y004775D01*
+X002067Y005023D01*
+X002037Y005052D01*
+X002037Y005662D01*
+X001903Y005797D01*
+X001398Y005797D01*
+X001427Y005826D01*
+X001427Y006804D01*
+X001351Y006880D01*
+X001351Y006931D01*
+X001427Y007007D01*
+X001427Y007985D01*
+X001292Y008120D01*
+X000629Y008120D01*
+X000522Y008013D01*
+X000522Y010105D01*
+X004544Y010105D01*
+X004544Y006818D01*
+X004422Y006939D01*
+X003759Y006939D01*
+X003625Y006804D01*
+X003625Y005826D01*
+X003654Y005797D01*
+X003267Y005797D01*
+X003132Y005662D01*
+X003132Y005023D01*
+X003132Y004816D01*
+X002904Y004588D01*
+X002764Y004530D01*
+X002638Y004404D01*
+X002570Y004239D01*
+X002570Y004061D01*
+X002638Y003896D01*
+X002733Y003801D01*
+X002634Y003760D01*
+X002453Y003579D01*
+X002355Y003343D01*
+X002355Y003087D01*
+X002453Y002850D01*
+X002634Y002669D01*
+X002870Y002571D01*
+X003953Y002571D01*
+X004189Y002669D01*
+X004370Y002850D01*
+X004468Y003087D01*
+X004468Y003343D01*
+X004370Y003579D01*
+X004189Y003760D01*
+X004064Y003812D01*
+X004096Y003889D01*
+X004164Y003957D01*
+X004274Y004067D01*
+X004333Y004210D01*
+X004333Y004291D01*
+X004281Y004085D02*
+X004544Y004085D01*
+X004544Y003766D02*
+X004175Y003766D01*
+X004425Y003447D02*
+X004544Y003447D01*
+X004544Y003129D02*
+X004468Y003129D01*
+X004544Y002810D02*
+X004330Y002810D01*
+X004544Y002492D02*
+X001224Y002492D01*
+X001574Y002810D02*
+X002493Y002810D01*
+X002355Y003129D02*
+X001694Y003129D01*
+X001678Y003447D02*
+X002398Y003447D01*
+X002245Y003766D02*
+X002648Y003766D01*
+X002570Y004085D02*
+X002471Y004085D01*
+X002434Y004403D02*
+X002638Y004403D01*
+X002811Y004691D02*
+X002388Y004691D01*
+X002069Y004722D02*
+X003038Y004722D01*
+X003132Y005040D02*
+X002049Y005040D01*
+X001679Y004691D02*
+X001679Y004357D01*
+X001935Y004101D01*
+X002034Y004101D01*
+X002034Y004199D01*
+X001542Y003855D02*
+X001256Y004140D01*
+X001256Y004691D01*
+X000547Y004691D02*
+X000547Y003815D01*
+X001246Y003116D01*
+X001144Y003116D01*
+X000754Y002727D01*
+X000522Y002173D02*
+X004544Y002173D01*
+X004544Y001855D02*
+X000522Y001855D01*
+X000522Y001536D02*
+X004544Y001536D01*
+X004544Y001218D02*
+X000522Y001218D01*
+X000522Y000899D02*
+X004544Y000899D01*
+X004544Y000581D02*
+X000522Y000581D01*
+X003658Y004002D02*
+X003943Y004288D01*
+X003943Y004691D01*
+X003520Y004691D02*
+X003520Y004652D01*
+X003018Y004150D01*
+X002811Y005331D02*
+X002811Y006296D01*
+X002831Y006315D01*
+X002221Y006315D01*
+X002221Y007496D01*
+X001427Y007589D02*
+X004544Y007589D01*
+X004544Y007907D02*
+X001427Y007907D01*
+X000961Y007496D02*
+X000961Y006315D01*
+X000941Y006296D01*
+X000941Y005331D01*
+X000547Y004937D01*
+X000547Y004691D01*
+X002037Y005359D02*
+X003132Y005359D01*
+X003147Y005677D02*
+X002022Y005677D01*
+X001427Y005996D02*
+X003625Y005996D01*
+X003625Y006314D02*
+X001427Y006314D01*
+X001427Y006633D02*
+X003625Y006633D01*
+X004091Y006315D02*
+X004396Y006315D01*
+X004691Y006020D01*
+X004544Y006951D02*
+X001371Y006951D01*
+X001427Y007270D02*
+X004544Y007270D01*
+X004544Y008226D02*
+X000522Y008226D01*
+X000522Y008544D02*
+X004544Y008544D01*
+X004544Y008863D02*
+X000522Y008863D01*
+X000522Y009181D02*
+X004544Y009181D01*
+X004544Y009500D02*
+X000522Y009500D01*
+X000522Y009818D02*
+X004544Y009818D01*
+X004347Y009908D02*
+X008166Y013727D01*
+X008609Y014170D01*
+X009071Y014170D01*
+D39*
+X004051Y010006D03*
+X003412Y010006D03*
+X002772Y010006D03*
+X002132Y010006D03*
+X001443Y010006D03*
+X000754Y010006D03*
+X000754Y009120D03*
+X000754Y008530D03*
+X004002Y008136D03*
+X004445Y008530D03*
+X004002Y008973D03*
+X004494Y007792D03*
+X004002Y007447D03*
+X004445Y007004D03*
+X004691Y006020D03*
+X005183Y004888D03*
+X003658Y004002D03*
+X003018Y004150D03*
+X002280Y003707D03*
+X002034Y004199D03*
+X001246Y003116D03*
+X014731Y012171D03*
+X015321Y012171D03*
+X022112Y013156D03*
+X025262Y007004D03*
+X025262Y006118D03*
+D40*
+X000482Y001041D02*
+X000482Y000482D01*
+X005577Y000482D01*
+X005577Y006266D01*
+X006512Y007201D01*
+X008436Y007201D01*
+X008787Y007552D01*
+X008876Y007589D01*
+X008971Y007589D01*
+X010005Y007589D01*
+X011052Y008635D01*
+X010882Y008635D01*
+X010771Y008746D01*
+X010771Y008851D01*
+X010768Y008850D01*
+X010622Y008850D01*
+X010486Y008906D01*
+X010383Y009010D01*
+X010326Y009145D01*
+X010326Y009292D01*
+X010383Y009428D01*
+X010486Y009531D01*
+X010622Y009587D01*
+X010741Y009587D01*
+X010741Y009641D01*
+X010756Y009697D01*
+X010785Y009747D01*
+X010826Y009788D01*
+X010876Y009817D01*
+X010932Y009832D01*
+X011138Y009832D01*
+X011138Y009475D01*
+X011138Y009475D01*
+X011138Y009832D01*
+X011260Y009832D01*
+X011165Y009927D01*
+X011165Y010360D01*
+X011183Y010379D01*
+X011179Y010383D01*
+X011150Y010433D01*
+X011135Y010489D01*
+X011135Y010656D01*
+X011135Y010823D01*
+X011150Y010878D01*
+X011179Y010929D01*
+X011219Y010970D01*
+X011270Y010999D01*
+X011326Y011014D01*
+X011531Y011014D01*
+X011531Y010656D01*
+X011531Y010656D01*
+X011135Y010656D01*
+X011531Y010656D01*
+X011532Y010656D01*
+X011929Y010656D01*
+X011929Y010823D01*
+X011914Y010878D01*
+X011885Y010929D01*
+X011844Y010970D01*
+X011794Y010999D01*
+X011738Y011014D01*
+X011532Y011014D01*
+X011532Y010656D01*
+X011532Y010656D01*
+X011929Y010656D01*
+X011929Y010489D01*
+X011914Y010433D01*
+X011885Y010383D01*
+X011881Y010379D01*
+X011899Y010360D01*
+X011899Y010129D01*
+X011950Y010129D01*
+X011951Y010128D01*
+X011951Y010203D01*
+X012046Y010203D01*
+X012046Y010203D01*
+X011951Y010203D01*
+X011951Y010285D01*
+X011966Y010341D01*
+X011981Y010367D01*
+X011981Y010465D01*
+X011981Y010662D01*
+X011981Y010859D01*
+X011981Y011055D01*
+X011981Y011252D01*
+X011981Y011341D01*
+X011779Y011341D01*
+X011637Y011199D01*
+X011569Y011131D01*
+X011481Y011095D01*
+X010991Y011095D01*
+X010456Y010559D01*
+X010388Y010492D01*
+X010300Y010455D01*
+X010235Y010455D01*
+X010235Y010370D01*
+X010126Y010261D01*
+X010130Y010260D01*
+X010181Y010231D01*
+X010222Y010190D01*
+X010250Y010140D01*
+X010265Y010084D01*
+X010265Y009898D01*
+X009810Y009898D01*
+X009810Y009898D01*
+X010265Y009898D01*
+X010265Y009711D01*
+X010250Y009655D01*
+X010222Y009605D01*
+X010181Y009564D01*
+X010130Y009535D01*
+X010074Y009520D01*
+X009809Y009520D01*
+X009809Y009897D01*
+X009809Y009897D01*
+X009809Y009520D01*
+X009544Y009520D01*
+X009488Y009535D01*
+X009438Y009564D01*
+X009397Y009605D01*
+X009368Y009655D01*
+X009353Y009711D01*
+X009353Y009898D01*
+X009809Y009898D01*
+X009809Y009898D01*
+X009353Y009898D01*
+X009353Y010084D01*
+X009368Y010140D01*
+X009397Y010190D01*
+X009417Y010210D01*
+X009341Y010179D01*
+X009195Y010179D01*
+X009059Y010235D01*
+X008955Y010339D01*
+X008899Y010474D01*
+X008899Y010621D01*
+X008910Y010648D01*
+X008910Y010648D01*
+X008854Y010633D01*
+X008668Y010633D01*
+X008668Y011088D01*
+X008667Y011088D01*
+X008667Y010633D01*
+X008481Y010633D01*
+X008425Y010648D01*
+X008375Y010677D01*
+X008334Y010718D01*
+X008305Y010768D01*
+X008290Y010824D01*
+X008290Y011089D01*
+X008667Y011089D01*
+X008667Y011089D01*
+X008667Y011545D01*
+X008481Y011545D01*
+X008425Y011530D01*
+X008375Y011501D01*
+X008334Y011460D01*
+X008305Y011410D01*
+X008290Y011354D01*
+X008290Y011089D01*
+X008667Y011089D01*
+X008668Y011089D01*
+X008668Y011545D01*
+X008854Y011545D01*
+X008910Y011530D01*
+X008960Y011501D01*
+X009001Y011460D01*
+X009030Y011410D01*
+X009031Y011406D01*
+X009140Y011515D01*
+X009612Y011515D01*
+X009724Y011404D01*
+X009724Y011403D01*
+X009736Y011408D01*
+X009883Y011408D01*
+X010018Y011352D01*
+X010091Y011280D01*
+X010153Y011280D01*
+X010455Y011581D01*
+X010296Y011581D01*
+X010240Y011596D01*
+X010190Y011625D01*
+X010149Y011666D01*
+X010120Y011717D01*
+X010105Y011772D01*
+X010105Y011790D01*
+X010012Y011697D01*
+X009806Y011611D01*
+X009584Y011611D01*
+X009378Y011697D01*
+X009220Y011854D01*
+X009195Y011915D01*
+X009170Y011854D01*
+X009012Y011697D01*
+X008806Y011611D01*
+X008584Y011611D01*
+X008378Y011697D01*
+X008220Y011854D01*
+X008195Y011915D01*
+X008170Y011854D01*
+X008012Y011697D01*
+X007806Y011611D01*
+X007584Y011611D01*
+X007378Y011697D01*
+X007373Y011701D01*
+X005386Y009714D01*
+X005386Y006295D01*
+X005332Y006166D01*
+X005234Y006068D01*
+X005095Y005929D01*
+X005041Y005798D01*
+X005041Y005301D01*
+X005002Y005206D01*
+X005002Y004622D01*
+X004999Y004615D01*
+X004999Y004376D01*
+X004888Y004265D01*
+X004416Y004265D01*
+X004304Y004376D01*
+X004304Y004615D01*
+X004302Y004622D01*
+X004302Y005261D01*
+X004302Y005401D01*
+X004304Y005407D01*
+X004304Y005646D01*
+X004341Y005683D01*
+X004341Y005731D01*
+X004205Y005731D01*
+X004291Y005646D01*
+X004291Y005016D01*
+X004286Y005011D01*
+X004291Y005006D01*
+X004291Y004767D01*
+X004293Y004761D01*
+X004293Y004218D01*
+X004240Y004089D01*
+X004141Y003991D01*
+X004062Y003911D01*
+X004012Y003791D01*
+X004167Y003726D01*
+X004337Y003557D01*
+X004428Y003335D01*
+X004428Y003095D01*
+X004337Y002873D01*
+X004167Y002703D01*
+X003945Y002611D01*
+X002878Y002611D01*
+X002656Y002703D01*
+X002487Y002873D01*
+X002395Y003095D01*
+X002395Y003335D01*
+X002487Y003557D01*
+X002656Y003726D01*
+X002815Y003792D01*
+X002787Y003804D01*
+X002672Y003919D01*
+X002610Y004069D01*
+X002610Y004231D01*
+X002613Y004238D01*
+X002600Y004242D01*
+X002574Y004235D01*
+X002442Y004235D01*
+X002442Y004118D01*
+X002380Y003968D01*
+X002342Y003930D01*
+X002330Y003902D01*
+X002232Y003804D01*
+X002103Y003751D01*
+X002005Y003751D01*
+X001919Y003751D01*
+X001871Y003635D01*
+X001762Y003525D01*
+X001619Y003466D01*
+X001468Y003466D01*
+X001477Y003462D01*
+X001592Y003348D01*
+X001654Y003198D01*
+X001654Y003035D01*
+X001592Y002885D01*
+X001477Y002770D01*
+X001327Y002708D01*
+X001231Y002708D01*
+X001184Y002662D01*
+X001184Y002469D01*
+X001073Y002357D01*
+X000482Y002357D01*
+X000482Y001837D01*
+X000485Y001838D01*
+X000754Y001838D01*
+X000754Y001440D01*
+X000754Y001440D01*
+X000754Y001838D01*
+X001023Y001838D01*
+X001079Y001823D01*
+X001129Y001794D01*
+X001170Y001753D01*
+X001199Y001703D01*
+X001214Y001647D01*
+X001214Y001439D01*
+X000755Y001439D01*
+X000755Y001439D01*
+X001214Y001439D01*
+X001214Y001231D01*
+X001199Y001175D01*
+X001170Y001125D01*
+X001129Y001084D01*
+X001079Y001055D01*
+X001023Y001040D01*
+X000754Y001040D01*
+X000754Y001439D01*
+X000754Y001439D01*
+X000754Y001040D01*
+X000485Y001040D01*
+X000482Y001041D01*
+X000482Y000978D02*
+X002424Y000978D01*
+X002411Y001003D02*
+X002457Y000914D01*
+X002515Y000834D01*
+X002586Y000763D01*
+X002666Y000705D01*
+X002755Y000659D01*
+X002850Y000629D01*
+X002948Y000613D01*
+X003394Y000613D01*
+X003394Y001228D01*
+X003429Y001228D01*
+X003429Y000613D01*
+X003875Y000613D01*
+X003973Y000629D01*
+X004068Y000659D01*
+X004157Y000705D01*
+X004238Y000763D01*
+X004308Y000834D01*
+X004367Y000914D01*
+X004412Y001003D01*
+X004443Y001098D01*
+X004458Y001196D01*
+X004458Y001228D01*
+X003430Y001228D01*
+X003430Y001264D01*
+X004458Y001264D01*
+X004458Y001296D01*
+X004443Y001395D01*
+X004412Y001489D01*
+X004367Y001578D01*
+X004308Y001659D01*
+X004238Y001729D01*
+X004157Y001788D01*
+X004068Y001833D01*
+X003973Y001864D01*
+X003875Y001880D01*
+X003429Y001880D01*
+X003429Y001264D01*
+X003394Y001264D01*
+X003394Y001880D01*
+X002948Y001880D01*
+X002850Y001864D01*
+X002755Y001833D01*
+X002666Y001788D01*
+X002586Y001729D01*
+X002515Y001659D01*
+X002457Y001578D01*
+X002411Y001489D01*
+X002380Y001395D01*
+X002365Y001296D01*
+X002365Y001264D01*
+X003394Y001264D01*
+X003394Y001228D01*
+X002365Y001228D01*
+X002365Y001196D01*
+X002380Y001098D01*
+X002411Y001003D01*
+X002365Y001216D02*
+X001210Y001216D01*
+X001214Y001455D02*
+X002400Y001455D01*
+X002550Y001693D02*
+X001202Y001693D01*
+X000754Y001693D02*
+X000754Y001693D01*
+X000754Y001455D02*
+X000754Y001455D01*
+X000754Y001216D02*
+X000754Y001216D01*
+X000482Y000739D02*
+X002619Y000739D01*
+X003394Y000739D02*
+X003429Y000739D01*
+X003429Y000978D02*
+X003394Y000978D01*
+X003394Y001216D02*
+X003429Y001216D01*
+X003429Y001455D02*
+X003394Y001455D01*
+X003394Y001693D02*
+X003429Y001693D01*
+X004274Y001693D02*
+X005577Y001693D01*
+X005577Y001455D02*
+X004423Y001455D01*
+X004458Y001216D02*
+X005577Y001216D01*
+X005577Y000978D02*
+X004399Y000978D01*
+X004205Y000739D02*
+X005577Y000739D01*
+X005577Y000501D02*
+X000482Y000501D01*
+X000482Y001932D02*
+X005577Y001932D01*
+X005577Y002170D02*
+X000482Y002170D01*
+X001124Y002409D02*
+X005577Y002409D01*
+X005577Y002647D02*
+X004032Y002647D01*
+X004342Y002886D02*
+X005577Y002886D01*
+X005577Y003125D02*
+X004428Y003125D01*
+X004417Y003363D02*
+X005577Y003363D01*
+X005577Y003602D02*
+X004291Y003602D01*
+X004032Y003840D02*
+X005577Y003840D01*
+X005577Y004079D02*
+X004229Y004079D01*
+X004293Y004317D02*
+X004363Y004317D01*
+X004304Y004556D02*
+X004293Y004556D01*
+X004291Y004794D02*
+X004302Y004794D01*
+X004291Y005033D02*
+X004302Y005033D01*
+X004291Y005271D02*
+X004302Y005271D01*
+X003943Y005331D02*
+X003943Y004691D01*
+X003943Y005331D02*
+X003520Y005331D01*
+X003175Y005648D02*
+X003174Y005652D01*
+X003145Y005702D01*
+X003135Y005712D01*
+X003152Y005716D01*
+X003202Y005745D01*
+X003243Y005786D01*
+X003272Y005837D01*
+X003287Y005892D01*
+X003287Y006315D01*
+X002831Y006315D01*
+X002831Y006315D01*
+X003287Y006315D01*
+X003287Y006738D01*
+X003272Y006794D01*
+X003243Y006844D01*
+X003202Y006885D01*
+X003152Y006914D01*
+X003096Y006929D01*
+X002831Y006929D01*
+X002831Y006316D01*
+X002831Y006316D01*
+X002831Y006929D01*
+X002594Y006929D01*
+X002633Y006968D01*
+X002662Y007018D01*
+X002677Y007074D01*
+X002677Y007496D01*
+X002221Y007496D01*
+X002221Y007496D01*
+X002221Y006883D01*
+X002221Y006316D01*
+X002220Y006316D01*
+X002220Y006883D01*
+X002220Y007496D01*
+X001764Y007496D01*
+X001764Y007074D01*
+X001779Y007018D01*
+X001808Y006968D01*
+X001849Y006927D01*
+X001885Y006906D01*
+X001849Y006885D01*
+X001808Y006844D01*
+X001779Y006794D01*
+X001764Y006738D01*
+X001764Y006315D01*
+X001764Y005892D01*
+X001779Y005837D01*
+X001808Y005786D01*
+X001838Y005757D01*
+X001414Y005757D01*
+X001302Y005646D01*
+X001302Y005117D01*
+X001289Y005117D01*
+X001289Y005255D01*
+X001291Y005261D01*
+X001291Y005747D01*
+X001387Y005843D01*
+X001387Y006788D01*
+X001311Y006864D01*
+X001311Y006948D01*
+X001387Y007024D01*
+X001387Y007969D01*
+X001276Y008080D01*
+X000646Y008080D01*
+X000535Y007969D01*
+X000535Y007024D01*
+X000611Y006948D01*
+X000611Y006864D01*
+X000535Y006788D01*
+X000535Y005843D01*
+X000591Y005786D01*
+X000591Y005476D01*
+X000482Y005367D01*
+X000482Y010105D01*
+X004297Y010105D01*
+X007742Y013549D01*
+X007742Y017759D01*
+X016367Y017759D01*
+X016367Y016938D01*
+X016479Y016827D01*
+X016896Y016827D01*
+X016937Y016868D01*
+X016947Y016858D01*
+X016947Y016810D01*
+X016920Y016822D01*
+X016773Y016822D01*
+X016638Y016766D01*
+X016534Y016662D01*
+X016478Y016526D01*
+X016478Y016380D01*
+X016534Y016244D01*
+X016577Y016201D01*
+X015913Y016201D01*
+X015825Y016164D01*
+X015793Y016133D01*
+X015735Y016133D01*
+X015359Y016509D01*
+X015270Y016545D01*
+X015175Y016545D01*
+X013059Y016545D01*
+X012971Y016509D01*
+X012903Y016441D01*
+X012608Y016146D01*
+X012571Y016058D01*
+X012571Y015962D01*
+X012571Y015667D01*
+X012608Y015579D01*
+X012675Y015511D01*
+X012836Y015350D01*
+X012836Y015297D01*
+X012892Y015161D01*
+X012996Y015058D01*
+X013132Y015002D01*
+X013278Y015002D01*
+X013414Y015058D01*
+X013518Y015161D01*
+X013574Y015297D01*
+X013574Y015444D01*
+X013518Y015579D01*
+X013480Y015616D01*
+X013486Y015622D01*
+X015025Y015622D01*
+X015395Y015252D01*
+X015395Y015149D01*
+X015451Y015014D01*
+X015555Y014910D01*
+X015691Y014854D01*
+X015837Y014854D01*
+X015973Y014910D01*
+X016077Y015014D01*
+X016133Y015149D01*
+X016133Y015252D01*
+X016356Y015475D01*
+X016367Y015475D01*
+X016367Y014518D01*
+X016447Y014438D01*
+X016447Y013781D01*
+X016416Y013813D01*
+X016280Y013869D01*
+X016134Y013869D01*
+X015998Y013813D01*
+X015894Y013709D01*
+X015838Y013574D01*
+X015838Y013427D01*
+X015872Y013346D01*
+X015780Y013346D01*
+X015636Y013346D01*
+X015690Y013476D01*
+X015690Y013623D01*
+X015677Y013655D01*
+X015754Y013655D01*
+X015865Y013766D01*
+X015865Y014317D01*
+X015754Y014428D01*
+X015164Y014428D01*
+X015124Y014389D01*
+X015085Y014428D01*
+X014494Y014428D01*
+X014409Y014343D01*
+X014409Y014563D01*
+X014297Y014674D01*
+X013786Y014674D01*
+X013759Y014648D01*
+X013759Y014701D01*
+X013648Y014812D01*
+X013175Y014812D01*
+X013064Y014701D01*
+X013064Y014071D01*
+X013175Y013960D01*
+X013309Y013960D01*
+X013309Y013831D01*
+X013237Y013758D01*
+X013181Y013623D01*
+X013181Y013476D01*
+X013235Y013346D01*
+X013221Y013346D01*
+X013024Y013346D01*
+X012913Y013234D01*
+X012913Y012852D01*
+X012313Y013452D01*
+X012313Y013940D01*
+X012349Y013940D01*
+X012418Y014009D01*
+X012467Y013960D01*
+X012939Y013960D01*
+X013050Y014071D01*
+X013050Y014701D01*
+X012939Y014812D01*
+X012467Y014812D01*
+X012460Y014805D01*
+X012460Y014817D01*
+X012523Y014880D01*
+X012559Y014968D01*
+X012559Y015064D01*
+X012523Y015152D01*
+X012460Y015215D01*
+X012460Y015311D01*
+X012349Y015422D01*
+X012313Y015422D01*
+X012313Y015959D01*
+X012276Y016048D01*
+X012209Y016115D01*
+X011451Y016873D01*
+X011363Y016909D01*
+X011267Y016909D01*
+X010008Y016909D01*
+X010015Y016916D01*
+X010044Y016966D01*
+X010059Y017022D01*
+X010059Y017169D01*
+X009406Y017169D01*
+X009406Y017170D01*
+X009406Y017170D01*
+X009406Y017508D01*
+X009868Y017508D01*
+X009924Y017493D01*
+X009974Y017464D01*
+X010015Y017423D01*
+X010044Y017373D01*
+X010059Y017317D01*
+X010059Y017170D01*
+X009406Y017170D01*
+X009406Y017508D01*
+X008944Y017508D01*
+X008888Y017493D01*
+X008838Y017464D01*
+X008797Y017423D01*
+X008768Y017373D01*
+X008753Y017317D01*
+X008753Y017170D01*
+X009405Y017170D01*
+X009405Y017169D01*
+X008753Y017169D01*
+X008753Y017022D01*
+X008768Y016966D01*
+X008797Y016916D01*
+X008815Y016898D01*
+X008783Y016866D01*
+X008783Y016473D01*
+X008836Y016419D01*
+X008783Y016366D01*
+X008783Y015973D01*
+X008836Y015919D01*
+X008783Y015866D01*
+X008783Y015473D01*
+X008836Y015419D01*
+X008783Y015366D01*
+X008783Y014973D01*
+X008836Y014920D01*
+X008783Y014866D01*
+X008783Y014473D01*
+X008815Y014441D01*
+X008797Y014423D01*
+X008768Y014373D01*
+X008753Y014317D01*
+X008753Y014170D01*
+X009405Y014170D01*
+X009405Y014169D01*
+X008753Y014169D01*
+X008753Y014022D01*
+X008756Y014011D01*
+X008648Y013966D01*
+X008514Y013832D01*
+X008469Y013813D01*
+X008365Y013709D01*
+X008346Y013664D01*
+X007150Y012468D01*
+X004739Y010057D01*
+X004686Y009928D01*
+X004686Y009789D01*
+X004686Y006520D01*
+X004594Y006612D01*
+X004517Y006644D01*
+X004517Y006788D01*
+X004406Y006899D01*
+X003776Y006899D01*
+X003665Y006788D01*
+X003665Y005843D01*
+X003750Y005757D01*
+X003707Y005757D01*
+X003284Y005757D01*
+X003175Y005648D01*
+X003205Y005749D02*
+X003275Y005749D01*
+X003287Y005987D02*
+X003665Y005987D01*
+X003665Y006226D02*
+X003287Y006226D01*
+X003287Y006464D02*
+X003665Y006464D01*
+X003665Y006703D02*
+X003287Y006703D01*
+X002831Y006703D02*
+X002831Y006703D01*
+X002607Y006941D02*
+X004686Y006941D01*
+X004686Y006703D02*
+X004517Y006703D01*
+X004686Y007180D02*
+X002677Y007180D01*
+X002677Y007418D02*
+X004686Y007418D01*
+X004686Y007657D02*
+X002677Y007657D01*
+X002677Y007496D02*
+X002221Y007496D01*
+X002220Y007496D01*
+X002220Y007496D01*
+X001764Y007496D01*
+X001764Y007919D01*
+X001779Y007975D01*
+X001808Y008025D01*
+X001849Y008066D01*
+X001900Y008095D01*
+X001955Y008110D01*
+X002220Y008110D01*
+X002220Y007497D01*
+X002221Y007497D01*
+X002221Y008110D01*
+X002486Y008110D01*
+X002542Y008095D01*
+X002592Y008066D01*
+X002633Y008025D01*
+X002662Y007975D01*
+X002677Y007919D01*
+X002677Y007496D01*
+X002221Y007418D02*
+X002220Y007418D01*
+X002220Y007180D02*
+X002221Y007180D01*
+X002220Y006941D02*
+X002221Y006941D01*
+X002220Y006703D02*
+X002221Y006703D01*
+X002220Y006464D02*
+X002221Y006464D01*
+X002220Y006315D02*
+X002220Y006315D01*
+X001764Y006315D01*
+X002220Y006315D01*
+X002221Y006315D01*
+X002221Y006315D01*
+X002375Y006315D01*
+X002831Y006315D01*
+X002831Y006315D01*
+X002375Y006315D01*
+X002221Y006315D01*
+X002221Y005701D01*
+X002477Y005701D01*
+X002449Y005652D01*
+X002434Y005596D01*
+X002434Y005331D01*
+X002811Y005331D01*
+X002811Y005331D01*
+X002434Y005331D01*
+X002434Y005147D01*
+X002388Y005147D01*
+X002202Y005147D01*
+X002146Y005132D01*
+X002095Y005103D01*
+X002054Y005062D01*
+X002026Y005012D01*
+X002025Y005008D01*
+X001997Y005036D01*
+X001997Y005646D01*
+X001937Y005707D01*
+X001955Y005701D01*
+X002220Y005701D01*
+X002220Y006315D01*
+X002220Y006226D02*
+X002221Y006226D01*
+X002220Y005987D02*
+X002221Y005987D01*
+X002220Y005749D02*
+X002221Y005749D01*
+X002434Y005510D02*
+X001997Y005510D01*
+X001650Y005331D02*
+X001630Y005311D01*
+X001679Y005262D01*
+X001679Y004691D01*
+X002000Y005033D02*
+X002037Y005033D01*
+X001997Y005271D02*
+X002434Y005271D01*
+X002388Y005147D02*
+X002388Y004692D01*
+X002388Y005147D01*
+X002388Y005033D02*
+X002388Y005033D01*
+X002388Y004794D02*
+X002388Y004794D01*
+X002388Y004692D02*
+X002388Y004692D01*
+X002388Y004691D02*
+X002434Y004691D01*
+X002388Y004691D01*
+X002388Y004691D01*
+X002434Y004691D02*
+X002811Y004691D01*
+X002811Y004691D01*
+X002434Y004691D01*
+X002811Y004692D02*
+X002811Y005147D01*
+X002811Y005331D01*
+X002811Y005331D01*
+X002811Y005147D01*
+X002811Y004692D01*
+X002811Y004692D01*
+X002811Y004794D02*
+X002811Y004794D01*
+X002811Y005033D02*
+X002811Y005033D01*
+X002811Y005271D02*
+X002811Y005271D01*
+X001764Y005987D02*
+X001387Y005987D01*
+X001387Y006226D02*
+X001764Y006226D01*
+X001764Y006464D02*
+X001387Y006464D01*
+X001387Y006703D02*
+X001764Y006703D01*
+X001835Y006941D02*
+X001311Y006941D01*
+X001387Y007180D02*
+X001764Y007180D01*
+X001764Y007418D02*
+X001387Y007418D01*
+X001387Y007657D02*
+X001764Y007657D01*
+X001764Y007895D02*
+X001387Y007895D01*
+X002220Y007895D02*
+X002221Y007895D01*
+X002220Y007657D02*
+X002221Y007657D01*
+X002677Y007895D02*
+X004686Y007895D01*
+X004686Y008134D02*
+X000482Y008134D01*
+X000482Y008373D02*
+X004686Y008373D01*
+X004686Y008611D02*
+X000482Y008611D01*
+X000482Y008850D02*
+X004686Y008850D01*
+X004686Y009088D02*
+X000482Y009088D01*
+X000482Y009327D02*
+X004686Y009327D01*
+X004686Y009565D02*
+X000482Y009565D01*
+X000482Y009804D02*
+X004686Y009804D01*
+X004733Y010042D02*
+X000482Y010042D01*
+X000482Y007895D02*
+X000535Y007895D01*
+X000535Y007657D02*
+X000482Y007657D01*
+X000482Y007418D02*
+X000535Y007418D01*
+X000535Y007180D02*
+X000482Y007180D01*
+X000482Y006941D02*
+X000611Y006941D01*
+X000535Y006703D02*
+X000482Y006703D01*
+X000482Y006464D02*
+X000535Y006464D01*
+X000535Y006226D02*
+X000482Y006226D01*
+X000482Y005987D02*
+X000535Y005987D01*
+X000482Y005749D02*
+X000591Y005749D01*
+X000591Y005510D02*
+X000482Y005510D01*
+X001291Y005510D02*
+X001302Y005510D01*
+X001293Y005749D02*
+X001405Y005749D01*
+X001302Y005271D02*
+X001291Y005271D01*
+X002426Y004079D02*
+X002610Y004079D01*
+X002750Y003840D02*
+X002268Y003840D01*
+X002532Y003602D02*
+X001838Y003602D01*
+X001577Y003363D02*
+X002407Y003363D01*
+X002395Y003125D02*
+X001654Y003125D01*
+X001593Y002886D02*
+X002481Y002886D01*
+X002791Y002647D02*
+X001184Y002647D01*
+X004940Y004317D02*
+X005577Y004317D01*
+X005577Y004556D02*
+X004999Y004556D01*
+X005002Y004794D02*
+X005577Y004794D01*
+X005577Y005033D02*
+X005002Y005033D01*
+X005029Y005271D02*
+X005577Y005271D01*
+X005577Y005510D02*
+X005041Y005510D01*
+X005041Y005749D02*
+X005577Y005749D01*
+X005577Y005987D02*
+X005153Y005987D01*
+X005357Y006226D02*
+X005577Y006226D01*
+X005386Y006464D02*
+X005775Y006464D01*
+X006014Y006703D02*
+X005386Y006703D01*
+X005386Y006941D02*
+X006252Y006941D01*
+X006491Y007180D02*
+X005386Y007180D01*
+X005386Y007418D02*
+X008654Y007418D01*
+X010073Y007657D02*
+X005386Y007657D01*
+X005386Y007895D02*
+X010312Y007895D01*
+X010551Y008134D02*
+X005386Y008134D01*
+X005386Y008373D02*
+X010789Y008373D01*
+X011028Y008611D02*
+X005386Y008611D01*
+X005386Y008850D02*
+X010771Y008850D01*
+X010350Y009088D02*
+X005386Y009088D01*
+X005386Y009327D02*
+X010341Y009327D01*
+X010181Y009565D02*
+X010568Y009565D01*
+X010852Y009804D02*
+X010265Y009804D01*
+X010265Y010042D02*
+X011165Y010042D01*
+X011165Y010281D02*
+X010146Y010281D01*
+X010416Y010519D02*
+X011135Y010519D01*
+X011135Y010758D02*
+X010654Y010758D01*
+X010893Y010996D02*
+X011266Y010996D01*
+X011531Y010996D02*
+X011532Y010996D01*
+X011531Y010758D02*
+X011532Y010758D01*
+X011797Y010996D02*
+X011981Y010996D01*
+X011981Y010758D02*
+X011929Y010758D01*
+X011929Y010519D02*
+X011981Y010519D01*
+X011951Y010281D02*
+X011899Y010281D01*
+X012046Y010203D02*
+X012046Y010203D01*
+X011535Y009620D02*
+X011564Y009551D01*
+X011656Y009459D01*
+X011535Y009459D01*
+X011535Y009474D01*
+X011138Y009474D01*
+X011138Y009475D01*
+X011535Y009475D01*
+X011535Y009620D01*
+X011535Y009565D02*
+X011558Y009565D01*
+X011138Y009565D02*
+X011138Y009565D01*
+X011138Y009804D02*
+X011138Y009804D01*
+X009809Y009804D02*
+X009809Y009804D01*
+X009809Y009565D02*
+X009809Y009565D01*
+X009437Y009565D02*
+X005386Y009565D01*
+X005476Y009804D02*
+X009353Y009804D01*
+X009353Y010042D02*
+X005714Y010042D01*
+X005953Y010281D02*
+X009013Y010281D01*
+X008899Y010519D02*
+X006192Y010519D01*
+X006430Y010758D02*
+X008311Y010758D01*
+X008290Y010996D02*
+X006669Y010996D01*
+X006907Y011235D02*
+X008290Y011235D01*
+X008348Y011474D02*
+X007146Y011474D01*
+X006633Y011951D02*
+X006144Y011951D01*
+X005905Y011712D02*
+X006394Y011712D01*
+X006156Y011474D02*
+X005666Y011474D01*
+X005428Y011235D02*
+X005917Y011235D01*
+X005679Y010996D02*
+X005189Y010996D01*
+X004951Y010758D02*
+X005440Y010758D01*
+X005202Y010519D02*
+X004712Y010519D01*
+X004474Y010281D02*
+X004963Y010281D01*
+X006382Y012189D02*
+X006871Y012189D01*
+X007110Y012428D02*
+X006621Y012428D01*
+X006859Y012666D02*
+X007349Y012666D01*
+X007587Y012905D02*
+X007098Y012905D01*
+X007336Y013143D02*
+X007826Y013143D01*
+X008064Y013382D02*
+X007575Y013382D01*
+X007742Y013620D02*
+X008303Y013620D01*
+X008541Y013859D02*
+X007742Y013859D01*
+X007742Y014098D02*
+X008753Y014098D01*
+X008758Y014336D02*
+X007742Y014336D01*
+X007742Y014575D02*
+X008783Y014575D01*
+X008783Y014813D02*
+X007742Y014813D01*
+X007742Y015052D02*
+X008783Y015052D01*
+X008783Y015290D02*
+X007742Y015290D01*
+X007742Y015529D02*
+X008783Y015529D01*
+X008783Y015767D02*
+X007742Y015767D01*
+X007742Y016006D02*
+X008783Y016006D01*
+X008783Y016244D02*
+X007742Y016244D01*
+X007742Y016483D02*
+X008783Y016483D01*
+X008783Y016722D02*
+X007742Y016722D01*
+X007742Y016960D02*
+X008771Y016960D01*
+X008753Y017199D02*
+X007742Y017199D01*
+X007742Y017437D02*
+X008811Y017437D01*
+X009406Y017437D02*
+X009406Y017437D01*
+X009406Y017199D02*
+X009406Y017199D01*
+X010000Y017437D02*
+X016367Y017437D01*
+X016367Y017199D02*
+X010059Y017199D01*
+X010040Y016960D02*
+X016367Y016960D01*
+X016594Y016722D02*
+X011603Y016722D01*
+X011841Y016483D02*
+X012945Y016483D01*
+X012706Y016244D02*
+X012080Y016244D01*
+X012294Y016006D02*
+X012571Y016006D01*
+X012571Y015767D02*
+X012313Y015767D01*
+X012313Y015529D02*
+X012658Y015529D01*
+X012839Y015290D02*
+X012460Y015290D01*
+X012559Y015052D02*
+X013010Y015052D01*
+X013399Y015052D02*
+X015436Y015052D01*
+X015357Y015290D02*
+X013571Y015290D01*
+X013538Y015529D02*
+X015118Y015529D01*
+X015623Y016244D02*
+X016534Y016244D01*
+X016478Y016483D02*
+X015384Y016483D01*
+X016171Y015290D02*
+X016367Y015290D01*
+X016367Y015052D02*
+X016092Y015052D01*
+X016367Y014813D02*
+X012460Y014813D01*
+X013050Y014575D02*
+X013064Y014575D01*
+X013050Y014336D02*
+X013064Y014336D01*
+X013050Y014098D02*
+X013064Y014098D01*
+X013309Y013859D02*
+X012313Y013859D01*
+X012313Y013620D02*
+X013181Y013620D01*
+X013220Y013382D02*
+X012383Y013382D01*
+X012622Y013143D02*
+X012913Y013143D01*
+X012913Y012905D02*
+X012860Y012905D01*
+X012412Y012428D02*
+X011812Y012428D01*
+X011828Y012411D02*
+X011323Y012916D01*
+X011235Y012953D01*
+X011139Y012953D01*
+X010054Y012953D01*
+X009958Y012953D01*
+X009870Y012916D01*
+X009685Y012731D01*
+X009584Y012731D01*
+X009378Y012646D01*
+X009220Y012489D01*
+X009195Y012428D01*
+X009195Y012428D01*
+X009170Y012489D01*
+X009012Y012646D01*
+X008806Y012731D01*
+X008584Y012731D01*
+X008378Y012646D01*
+X008220Y012489D01*
+X008195Y012428D01*
+X008195Y012428D01*
+X008170Y012489D01*
+X008165Y012493D01*
+X008841Y013169D01*
+X008886Y013188D01*
+X008990Y013291D01*
+X009002Y013320D01*
+X009475Y013320D01*
+X009576Y013361D01*
+X009918Y013361D01*
+X009976Y013420D01*
+X009989Y013420D01*
+X010013Y013396D01*
+X010013Y013067D01*
+X010124Y012956D01*
+X010675Y012956D01*
+X010787Y013067D01*
+X010787Y013658D01*
+X010768Y013676D01*
+X010773Y013680D01*
+X010802Y013730D01*
+X010817Y013786D01*
+X010817Y014031D01*
+X010400Y014031D01*
+X010400Y014032D01*
+X010400Y014032D01*
+X010400Y014156D01*
+X010400Y014592D01*
+X010400Y014592D01*
+X010400Y014156D01*
+X010400Y014032D01*
+X010817Y014032D01*
+X010817Y014277D01*
+X010807Y014312D01*
+X010817Y014347D01*
+X010817Y014593D01*
+X010817Y014838D01*
+X010802Y014894D01*
+X010773Y014944D01*
+X010768Y014949D01*
+X010787Y014967D01*
+X010787Y015557D01*
+X010675Y015669D01*
+X010513Y015669D01*
+X010522Y015691D01*
+X010522Y015837D01*
+X010484Y015930D01*
+X010928Y015930D01*
+X010996Y015861D01*
+X010996Y015422D01*
+X010961Y015422D01*
+X010850Y015311D01*
+X010850Y014721D01*
+X010889Y014681D01*
+X010850Y014642D01*
+X010850Y014051D01*
+X010961Y013940D01*
+X010996Y013940D01*
+X010996Y013895D01*
+X011033Y013807D01*
+X011100Y013740D01*
+X012426Y012415D01*
+X012093Y012415D01*
+X012090Y012411D01*
+X011828Y012411D01*
+X011573Y012666D02*
+X012174Y012666D01*
+X011935Y012905D02*
+X011335Y012905D01*
+X011697Y013143D02*
+X010787Y013143D01*
+X010787Y013382D02*
+X011458Y013382D01*
+X011220Y013620D02*
+X010787Y013620D01*
+X010817Y013859D02*
+X011011Y013859D01*
+X010850Y014098D02*
+X010817Y014098D01*
+X010814Y014336D02*
+X010850Y014336D01*
+X010850Y014575D02*
+X010817Y014575D01*
+X010817Y014593D02*
+X010400Y014593D01*
+X010817Y014593D01*
+X010817Y014813D02*
+X010850Y014813D01*
+X010400Y014593D02*
+X010400Y014593D01*
+X010400Y014575D02*
+X010400Y014575D01*
+X010400Y014336D02*
+X010400Y014336D01*
+X010400Y014098D02*
+X010400Y014098D01*
+X010013Y013382D02*
+X009938Y013382D01*
+X010013Y013143D02*
+X008816Y013143D01*
+X008577Y012905D02*
+X009859Y012905D01*
+X009426Y012666D02*
+X008964Y012666D01*
+X008426Y012666D02*
+X008338Y012666D01*
+X008362Y011712D02*
+X008028Y011712D01*
+X008667Y011474D02*
+X008668Y011474D01*
+X008667Y011235D02*
+X008668Y011235D01*
+X008667Y010996D02*
+X008668Y010996D01*
+X008667Y010758D02*
+X008668Y010758D01*
+X008988Y011474D02*
+X009099Y011474D01*
+X009028Y011712D02*
+X009362Y011712D01*
+X009654Y011474D02*
+X010347Y011474D01*
+X010123Y011712D02*
+X010028Y011712D01*
+X011673Y011235D02*
+X011981Y011235D01*
+X012958Y010357D02*
+X013007Y010357D01*
+X013095Y010393D01*
+X013162Y010461D01*
+X013458Y010756D01*
+X013494Y010844D01*
+X013494Y010940D01*
+X013494Y010966D01*
+X013512Y010973D01*
+X013616Y011077D01*
+X013672Y011212D01*
+X013672Y011359D01*
+X013665Y011377D01*
+X013758Y011416D01*
+X013862Y011520D01*
+X013918Y011655D01*
+X013918Y011802D01*
+X013862Y011937D01*
+X013819Y011981D01*
+X013843Y011981D01*
+X013931Y012017D01*
+X013999Y012085D01*
+X014147Y012232D01*
+X014183Y012321D01*
+X014183Y012345D01*
+X014222Y012345D01*
+X014278Y012360D01*
+X014304Y012375D01*
+X014373Y012375D01*
+X014322Y012253D01*
+X014322Y012090D01*
+X014385Y011940D01*
+X014499Y011826D01*
+X014649Y011763D01*
+X014812Y011763D01*
+X014962Y011826D01*
+X015026Y011890D01*
+X015090Y011826D01*
+X015240Y011763D01*
+X015402Y011763D01*
+X015552Y011826D01*
+X015667Y011940D01*
+X015729Y012090D01*
+X015729Y012253D01*
+X015678Y012375D01*
+X015780Y012375D01*
+X015944Y012375D01*
+X015970Y012360D01*
+X016026Y012345D01*
+X016065Y012345D01*
+X016065Y012222D01*
+X016102Y012134D01*
+X016169Y012066D01*
+X016858Y011377D01*
+X016947Y011341D01*
+X017042Y011341D01*
+X017645Y011341D01*
+X017387Y011083D01*
+X017340Y011083D01*
+X017252Y011046D01*
+X017073Y010867D01*
+X017019Y010867D01*
+X016884Y010811D01*
+X016780Y010707D01*
+X016724Y010572D01*
+X016724Y010425D01*
+X016780Y010289D01*
+X016884Y010186D01*
+X017019Y010130D01*
+X017166Y010130D01*
+X017192Y010140D01*
+X017167Y010079D01*
+X017167Y009933D01*
+X017200Y009852D01*
+X014633Y009852D01*
+X014178Y010308D01*
+X014089Y010345D01*
+X013994Y010345D01*
+X013157Y010345D01*
+X013112Y010326D01*
+X012984Y010326D01*
+X012972Y010321D01*
+X012967Y010341D01*
+X012958Y010357D01*
+X013162Y010461D02*
+X013162Y010461D01*
+X013221Y010519D02*
+X016724Y010519D01*
+X016789Y010281D02*
+X014205Y010281D01*
+X014443Y010042D02*
+X017167Y010042D01*
+X016831Y010758D02*
+X013458Y010758D01*
+X013536Y010996D02*
+X017202Y010996D01*
+X017539Y011235D02*
+X013672Y011235D01*
+X013816Y011474D02*
+X016762Y011474D01*
+X016524Y011712D02*
+X013918Y011712D01*
+X013849Y011951D02*
+X014380Y011951D01*
+X014322Y012189D02*
+X014103Y012189D01*
+X013976Y013346D02*
+X013864Y013346D01*
+X013918Y013476D01*
+X013918Y013477D01*
+X014041Y013477D01*
+X014041Y013834D01*
+X014042Y013834D01*
+X014042Y013477D01*
+X014220Y013477D01*
+X014133Y013390D01*
+X014127Y013376D01*
+X014058Y013376D01*
+X014002Y013361D01*
+X013976Y013346D01*
+X013879Y013382D02*
+X014130Y013382D01*
+X014042Y013620D02*
+X014041Y013620D01*
+X014397Y014575D02*
+X016367Y014575D01*
+X016447Y014336D02*
+X015846Y014336D01*
+X015865Y014098D02*
+X016447Y014098D01*
+X016447Y013859D02*
+X016304Y013859D01*
+X016110Y013859D02*
+X015865Y013859D01*
+X015858Y013620D02*
+X015690Y013620D01*
+X015651Y013382D02*
+X015857Y013382D01*
+X015729Y012189D02*
+X016079Y012189D01*
+X016285Y011951D02*
+X015671Y011951D01*
+X018427Y013895D02*
+X018427Y014438D01*
+X018507Y014518D01*
+X018507Y015476D01*
+X018396Y015587D01*
+X017979Y015587D01*
+X017958Y015567D01*
+X017952Y015573D01*
+X017902Y015602D01*
+X017846Y015617D01*
+X017687Y015617D01*
+X017658Y015617D01*
+X017658Y015739D01*
+X017602Y015874D01*
+X017498Y015978D01*
+X017429Y016007D01*
+X017831Y016409D01*
+X017896Y016436D01*
+X018000Y016539D01*
+X018056Y016675D01*
+X018056Y016797D01*
+X018187Y016797D01*
+X018187Y017416D01*
+X018187Y017416D01*
+X018187Y016797D01*
+X018346Y016797D01*
+X018402Y016812D01*
+X018452Y016841D01*
+X018493Y016882D01*
+X018522Y016932D01*
+X018537Y016988D01*
+X018537Y017417D01*
+X018537Y017759D01*
+X026715Y017759D01*
+X026715Y007693D01*
+X023963Y007693D01*
+X024000Y007730D01*
+X024056Y007866D01*
+X024056Y008013D01*
+X024000Y008148D01*
+X023896Y008252D01*
+X023761Y008308D01*
+X023658Y008308D01*
+X023331Y008635D01*
+X023243Y008671D01*
+X023147Y008671D01*
+X021917Y008671D01*
+X021116Y009471D01*
+X021028Y009508D01*
+X020933Y009508D01*
+X020883Y009508D01*
+X020231Y010160D01*
+X020684Y010160D01*
+X020772Y010196D01*
+X020839Y010264D01*
+X021627Y011051D01*
+X021663Y011139D01*
+X021663Y011235D01*
+X026715Y011235D01*
+X026715Y010996D02*
+X021572Y010996D01*
+X021663Y011235D02*
+X021663Y012712D01*
+X021821Y012870D01*
+X021881Y012810D01*
+X022031Y012748D01*
+X022194Y012748D01*
+X022344Y012810D01*
+X022458Y012925D01*
+X022521Y013075D01*
+X022521Y013237D01*
+X022458Y013387D01*
+X022344Y013502D01*
+X022194Y013564D01*
+X022031Y013564D01*
+X021881Y013502D01*
+X021775Y013396D01*
+X021720Y013396D01*
+X021632Y013359D01*
+X021287Y013015D01*
+X021220Y012947D01*
+X021183Y012859D01*
+X021183Y011287D01*
+X020537Y010640D01*
+X019054Y010640D01*
+X019054Y010662D01*
+X019054Y010859D01*
+X019054Y011055D01*
+X019054Y011220D01*
+X019068Y011244D01*
+X019167Y011146D01*
+X019167Y010803D01*
+X019278Y010692D01*
+X019829Y010692D01*
+X019940Y010803D01*
+X019940Y011394D01*
+X019901Y011433D01*
+X019940Y011473D01*
+X019940Y011611D01*
+X020071Y011557D01*
+X020169Y011557D01*
+X020169Y011458D01*
+X020225Y011323D01*
+X020329Y011219D01*
+X020464Y011163D01*
+X020611Y011163D01*
+X020746Y011219D01*
+X020850Y011323D01*
+X020906Y011458D01*
+X020906Y011605D01*
+X020850Y011741D01*
+X020778Y011813D01*
+X020778Y011976D01*
+X020778Y012072D01*
+X020741Y012160D01*
+X020280Y012621D01*
+X020192Y012658D01*
+X020096Y012658D01*
+X018804Y012658D01*
+X020194Y014048D01*
+X025362Y014048D01*
+X025457Y014048D01*
+X025546Y014084D01*
+X026038Y014576D01*
+X026105Y014644D01*
+X026142Y014732D01*
+X026142Y015138D01*
+X026214Y015211D01*
+X026271Y015346D01*
+X026271Y015493D01*
+X026214Y015628D01*
+X026111Y015732D01*
+X025975Y015788D01*
+X025828Y015788D01*
+X025693Y015732D01*
+X025589Y015628D01*
+X025533Y015493D01*
+X025533Y015346D01*
+X025589Y015211D01*
+X025662Y015138D01*
+X025662Y014879D01*
+X025310Y014528D01*
+X024759Y014528D01*
+X025121Y014890D01*
+X025158Y014978D01*
+X025158Y015074D01*
+X025158Y015138D01*
+X025230Y015211D01*
+X025286Y015346D01*
+X025286Y015493D01*
+X025230Y015628D01*
+X025126Y015732D01*
+X024991Y015788D01*
+X024844Y015788D01*
+X024709Y015732D01*
+X024605Y015628D01*
+X024549Y015493D01*
+X024549Y015346D01*
+X024605Y015211D01*
+X024678Y015138D01*
+X024678Y015125D01*
+X024277Y014724D01*
+X023971Y014724D01*
+X024088Y014841D01*
+X024124Y014929D01*
+X024124Y015024D01*
+X024124Y015138D01*
+X024197Y015211D01*
+X024253Y015346D01*
+X024253Y015493D01*
+X024197Y015628D01*
+X024093Y015732D01*
+X023957Y015788D01*
+X023811Y015788D01*
+X023675Y015732D01*
+X023571Y015628D01*
+X023515Y015493D01*
+X023515Y015346D01*
+X023571Y015211D01*
+X023644Y015138D01*
+X023644Y015076D01*
+X023489Y014921D01*
+X022889Y014921D01*
+X023050Y015083D01*
+X023109Y015107D01*
+X023212Y015211D01*
+X023269Y015346D01*
+X023269Y015493D01*
+X023212Y015628D01*
+X023109Y015732D01*
+X022973Y015788D01*
+X022826Y015788D01*
+X022691Y015732D01*
+X022587Y015628D01*
+X022531Y015493D01*
+X022531Y015346D01*
+X022561Y015273D01*
+X022407Y015118D01*
+X019702Y015118D01*
+X019614Y015082D01*
+X019547Y015014D01*
+X018427Y013895D01*
+X018427Y014098D02*
+X018630Y014098D01*
+X018427Y014336D02*
+X018869Y014336D01*
+X019107Y014575D02*
+X018507Y014575D01*
+X018507Y014813D02*
+X019346Y014813D01*
+X019547Y015014D02*
+X019547Y015014D01*
+X019584Y015052D02*
+X018507Y015052D01*
+X018507Y015290D02*
+X022554Y015290D01*
+X022546Y015529D02*
+X018454Y015529D01*
+X017687Y015529D02*
+X017687Y015529D01*
+X017687Y015617D02*
+X017687Y014997D01*
+X017687Y016112D01*
+X018187Y016612D01*
+X018187Y017417D01*
+X018188Y017417D02*
+X018537Y017417D01*
+X018188Y017417D01*
+X018188Y017417D01*
+X018187Y017199D02*
+X018187Y017199D01*
+X018187Y016960D02*
+X018187Y016960D01*
+X018056Y016722D02*
+X026715Y016722D01*
+X026715Y016960D02*
+X018530Y016960D01*
+X018537Y017199D02*
+X026715Y017199D01*
+X026715Y017437D02*
+X018537Y017437D01*
+X018537Y017676D02*
+X026715Y017676D01*
+X026715Y016483D02*
+X017943Y016483D01*
+X017666Y016244D02*
+X026715Y016244D01*
+X026715Y016006D02*
+X017431Y016006D01*
+X017647Y015767D02*
+X022776Y015767D01*
+X023024Y015767D02*
+X023760Y015767D01*
+X024008Y015767D02*
+X024794Y015767D01*
+X025041Y015767D02*
+X025778Y015767D01*
+X026026Y015767D02*
+X026715Y015767D01*
+X026715Y015529D02*
+X026256Y015529D01*
+X026247Y015290D02*
+X026715Y015290D01*
+X026715Y015052D02*
+X026142Y015052D01*
+X025662Y015052D02*
+X025158Y015052D01*
+X025263Y015290D02*
+X025556Y015290D01*
+X025548Y015529D02*
+X025271Y015529D01*
+X024564Y015529D02*
+X024238Y015529D01*
+X024230Y015290D02*
+X024572Y015290D01*
+X024604Y015052D02*
+X024124Y015052D01*
+X024060Y014813D02*
+X024366Y014813D01*
+X024806Y014575D02*
+X025357Y014575D01*
+X025596Y014813D02*
+X025044Y014813D01*
+X025559Y014098D02*
+X026715Y014098D01*
+X026715Y014336D02*
+X025798Y014336D01*
+X026036Y014575D02*
+X026715Y014575D01*
+X026715Y014813D02*
+X026142Y014813D01*
+X026715Y013859D02*
+X020005Y013859D01*
+X019767Y013620D02*
+X026715Y013620D01*
+X026715Y013382D02*
+X022460Y013382D01*
+X022521Y013143D02*
+X026715Y013143D01*
+X026715Y012905D02*
+X022439Y012905D01*
+X021663Y012666D02*
+X026715Y012666D01*
+X026715Y012428D02*
+X021663Y012428D01*
+X021663Y012189D02*
+X026715Y012189D01*
+X026715Y011951D02*
+X021663Y011951D01*
+X021663Y011712D02*
+X026715Y011712D01*
+X026715Y011474D02*
+X021663Y011474D01*
+X021183Y011474D02*
+X020906Y011474D01*
+X020862Y011712D02*
+X021183Y011712D01*
+X021183Y011951D02*
+X020778Y011951D01*
+X020712Y012189D02*
+X021183Y012189D01*
+X021183Y012428D02*
+X020473Y012428D01*
+X021183Y012666D02*
+X018813Y012666D01*
+X019051Y012905D02*
+X021202Y012905D01*
+X021416Y013143D02*
+X019290Y013143D01*
+X019528Y013382D02*
+X021687Y013382D01*
+X023019Y015052D02*
+X023620Y015052D01*
+X023538Y015290D02*
+X023245Y015290D01*
+X023254Y015529D02*
+X023530Y015529D01*
+X020169Y011474D02*
+X019940Y011474D01*
+X019940Y011235D02*
+X020313Y011235D01*
+X019940Y010996D02*
+X020893Y010996D01*
+X020762Y011235D02*
+X021132Y011235D01*
+X021334Y010758D02*
+X026715Y010758D01*
+X026715Y010519D02*
+X021095Y010519D01*
+X020856Y010281D02*
+X026715Y010281D01*
+X026715Y010042D02*
+X020349Y010042D01*
+X020587Y009804D02*
+X026715Y009804D01*
+X026715Y009565D02*
+X020826Y009565D01*
+X021261Y009327D02*
+X026715Y009327D01*
+X026715Y009088D02*
+X021500Y009088D01*
+X021738Y008850D02*
+X026715Y008850D01*
+X026715Y008611D02*
+X023355Y008611D01*
+X023593Y008373D02*
+X026715Y008373D01*
+X026715Y008134D02*
+X024006Y008134D01*
+X024056Y007895D02*
+X026715Y007895D01*
+X026591Y007250D02*
+X026591Y005872D01*
+X024475Y005872D01*
+X023933Y006414D01*
+X023687Y006414D01*
+X023687Y006660D01*
+X023884Y006660D01*
+X023884Y006709D01*
+X024425Y007250D01*
+X026591Y007250D01*
+X026591Y007180D02*
+X024355Y007180D01*
+X024116Y006941D02*
+X026591Y006941D01*
+X026591Y006703D02*
+X023884Y006703D01*
+X023687Y006464D02*
+X026591Y006464D01*
+X026591Y006226D02*
+X024121Y006226D01*
+X024360Y005987D02*
+X026591Y005987D01*
+X026715Y005380D02*
+X026715Y003274D01*
+X026662Y003327D01*
+X026456Y003413D01*
+X026233Y003413D01*
+X026027Y003327D01*
+X025870Y003170D01*
+X025853Y003128D01*
+X025835Y003170D01*
+X025678Y003327D01*
+X025472Y003413D01*
+X025249Y003413D01*
+X025043Y003327D01*
+X024886Y003170D01*
+X024868Y003128D01*
+X024851Y003170D01*
+X024693Y003327D01*
+X024576Y003376D01*
+X024576Y003713D01*
+X024784Y003713D01*
+X024856Y003640D01*
+X024992Y003584D01*
+X025139Y003584D01*
+X025274Y003640D01*
+X025378Y003744D01*
+X025434Y003880D01*
+X025434Y004026D01*
+X025378Y004162D01*
+X025305Y004234D01*
+X025305Y004591D01*
+X025269Y004679D01*
+X025201Y004747D01*
+X025054Y004895D01*
+X024965Y004931D01*
+X024870Y004931D01*
+X024328Y004931D01*
+X023971Y005288D01*
+X023883Y005325D01*
+X023787Y005325D01*
+X023618Y005325D01*
+X023618Y005406D01*
+X023664Y005453D01*
+X023736Y005380D01*
+X026715Y005380D01*
+X026715Y005271D02*
+X023988Y005271D01*
+X024226Y005033D02*
+X026715Y005033D01*
+X026715Y004794D02*
+X025154Y004794D01*
+X025305Y004556D02*
+X026715Y004556D01*
+X026715Y004317D02*
+X025305Y004317D01*
+X025412Y004079D02*
+X026715Y004079D01*
+X026715Y003840D02*
+X025418Y003840D01*
+X025181Y003602D02*
+X026715Y003602D01*
+X026715Y003363D02*
+X026576Y003363D01*
+X026114Y003363D02*
+X025591Y003363D01*
+X025130Y003363D02*
+X024607Y003363D01*
+X024576Y003602D02*
+X024950Y003602D01*
+X022358Y005325D02*
+X020539Y005325D01*
+X020329Y005534D01*
+X020451Y005534D01*
+X020451Y006366D01*
+X020644Y006366D01*
+X020644Y005534D01*
+X021010Y005534D01*
+X021066Y005549D01*
+X021116Y005578D01*
+X021157Y005619D01*
+X021186Y005669D01*
+X021201Y005725D01*
+X021201Y006366D01*
+X020645Y006366D01*
+X020645Y006559D01*
+X021201Y006559D01*
+X021201Y007200D01*
+X021186Y007256D01*
+X021157Y007307D01*
+X021116Y007348D01*
+X021066Y007376D01*
+X021010Y007391D01*
+X020644Y007391D01*
+X020644Y006560D01*
+X020451Y006560D01*
+X020451Y007391D01*
+X020187Y007391D01*
+X020187Y007990D01*
+X020187Y008085D01*
+X020151Y008174D01*
+X019393Y008931D01*
+X019472Y009010D01*
+X019515Y009114D01*
+X020544Y008086D01*
+X020544Y008039D01*
+X020580Y007951D01*
+X021041Y007490D01*
+X021130Y007453D01*
+X021225Y007453D01*
+X021520Y007453D01*
+X021609Y007490D01*
+X021676Y007557D01*
+X021769Y007650D01*
+X022358Y007650D01*
+X022358Y007643D01*
+X022231Y007643D01*
+X022131Y007602D01*
+X022055Y007526D01*
+X021558Y007028D01*
+X021498Y007028D01*
+X021362Y006972D01*
+X021259Y006869D01*
+X021202Y006733D01*
+X021202Y006586D01*
+X021259Y006451D01*
+X021362Y006347D01*
+X021498Y006291D01*
+X021644Y006291D01*
+X021780Y006347D01*
+X021884Y006451D01*
+X021940Y006586D01*
+X021940Y006647D01*
+X022358Y007065D01*
+X022358Y007054D01*
+X022469Y006943D01*
+X022937Y006943D01*
+X022917Y006923D01*
+X022519Y006923D01*
+X022463Y006908D01*
+X022413Y006879D01*
+X022372Y006838D01*
+X022343Y006788D01*
+X022328Y006732D01*
+X022328Y006463D01*
+X022851Y006463D01*
+X022851Y006463D01*
+X022328Y006463D01*
+X022328Y006194D01*
+X022343Y006138D01*
+X022372Y006088D01*
+X022413Y006047D01*
+X022463Y006018D01*
+X022519Y006003D01*
+X022988Y006003D01*
+X023114Y006003D01*
+X023134Y005983D01*
+X022469Y005983D01*
+X022358Y005872D01*
+X022358Y005325D01*
+X022358Y005510D02*
+X020353Y005510D01*
+X020451Y005749D02*
+X020644Y005749D01*
+X020644Y005987D02*
+X020451Y005987D01*
+X020451Y006226D02*
+X020644Y006226D01*
+X020645Y006464D02*
+X021253Y006464D01*
+X021201Y006226D02*
+X022328Y006226D01*
+X022328Y006464D02*
+X021889Y006464D01*
+X021996Y006703D02*
+X022328Y006703D01*
+X022234Y006941D02*
+X022935Y006941D01*
+X022988Y006129D02*
+X022988Y006128D01*
+X022988Y006003D01*
+X022988Y006129D01*
+X023129Y005987D02*
+X021201Y005987D01*
+X021201Y005749D02*
+X022358Y005749D01*
+X021202Y006703D02*
+X021201Y006703D01*
+X021201Y006941D02*
+X021331Y006941D01*
+X021201Y007180D02*
+X021709Y007180D01*
+X021948Y007418D02*
+X020187Y007418D01*
+X020187Y007657D02*
+X020874Y007657D01*
+X020636Y007895D02*
+X020187Y007895D01*
+X020167Y008134D02*
+X020496Y008134D01*
+X020257Y008373D02*
+X019952Y008373D01*
+X020018Y008611D02*
+X019713Y008611D01*
+X019780Y008850D02*
+X019474Y008850D01*
+X019505Y009088D02*
+X019541Y009088D01*
+X018054Y007994D02*
+X018054Y007955D01*
+X018069Y007900D01*
+X018084Y007874D01*
+X018084Y007709D01*
+X018084Y007512D01*
+X018084Y007315D01*
+X018195Y007204D01*
+X018329Y007204D01*
+X018329Y005713D01*
+X018120Y005922D01*
+X018120Y006381D01*
+X018123Y006384D01*
+X018123Y007132D01*
+X018012Y007243D01*
+X017815Y007243D01*
+X017618Y007243D01*
+X017421Y007243D01*
+X017225Y007243D01*
+X017028Y007243D01*
+X016831Y007243D01*
+X016666Y007243D01*
+X016640Y007258D01*
+X016584Y007273D01*
+X016545Y007273D01*
+X016545Y007347D01*
+X016545Y007348D01*
+X016608Y007410D01*
+X016638Y007381D01*
+X016773Y007324D01*
+X016920Y007324D01*
+X017056Y007381D01*
+X017159Y007484D01*
+X017215Y007620D01*
+X017215Y007766D01*
+X017159Y007902D01*
+X017129Y007932D01*
+X017192Y007994D01*
+X018054Y007994D01*
+X018071Y007895D02*
+X017162Y007895D01*
+X017215Y007657D02*
+X018084Y007657D01*
+X018084Y007418D02*
+X017093Y007418D01*
+X018076Y007180D02*
+X018329Y007180D01*
+X018329Y006941D02*
+X018123Y006941D01*
+X018123Y006703D02*
+X018329Y006703D01*
+X018329Y006464D02*
+X018123Y006464D01*
+X018120Y006226D02*
+X018329Y006226D01*
+X018329Y005987D02*
+X018120Y005987D01*
+X018294Y005749D02*
+X018329Y005749D01*
+X016336Y005574D02*
+X016336Y005077D01*
+X016219Y005028D01*
+X016116Y004925D01*
+X016060Y004789D01*
+X016060Y004642D01*
+X016116Y004507D01*
+X016188Y004434D01*
+X016188Y004324D01*
+X016225Y004235D01*
+X016292Y004168D01*
+X016401Y004059D01*
+X016401Y003963D01*
+X016460Y003904D01*
+X016401Y003845D01*
+X016401Y003413D01*
+X016391Y003413D01*
+X016185Y003327D01*
+X016027Y003170D01*
+X016010Y003128D01*
+X015993Y003170D01*
+X015835Y003327D01*
+X015629Y003413D01*
+X015407Y003413D01*
+X015201Y003327D01*
+X015043Y003170D01*
+X014977Y003009D01*
+X014910Y003170D01*
+X014752Y003327D01*
+X014691Y003353D01*
+X014752Y003378D01*
+X014910Y003535D01*
+X014995Y003741D01*
+X014995Y003964D01*
+X014910Y004170D01*
+X014894Y004186D01*
+X015016Y004186D01*
+X015127Y004297D01*
+X015127Y004471D01*
+X015248Y004421D01*
+X015394Y004421D01*
+X015530Y004477D01*
+X015634Y004581D01*
+X015649Y004618D01*
+X015788Y004618D01*
+X015924Y004674D01*
+X016027Y004778D01*
+X016084Y004913D01*
+X016084Y005060D01*
+X016027Y005195D01*
+X015924Y005299D01*
+X015788Y005355D01*
+X015685Y005355D01*
+X015654Y005387D01*
+X015566Y005423D01*
+X014870Y005423D01*
+X014797Y005393D01*
+X014583Y005393D01*
+X014268Y005393D01*
+X013992Y005393D01*
+X013643Y005393D01*
+X013643Y005408D01*
+X013594Y005524D01*
+X013638Y005524D01*
+X013805Y005524D01*
+X013861Y005539D01*
+X013911Y005568D01*
+X013915Y005573D01*
+X013933Y005554D01*
+X014366Y005554D01*
+X014478Y005666D01*
+X014478Y006177D01*
+X014382Y006273D01*
+X014469Y006273D01*
+X014666Y006273D01*
+X014862Y006273D01*
+X014992Y006273D01*
+X015256Y006273D01*
+X015374Y006273D01*
+X015328Y006227D01*
+X015328Y005715D01*
+X015439Y005604D01*
+X015872Y005604D01*
+X015890Y005622D01*
+X015895Y005617D01*
+X015945Y005589D01*
+X016001Y005574D01*
+X016167Y005574D01*
+X016167Y005970D01*
+X016168Y005970D01*
+X016168Y005574D01*
+X016334Y005574D01*
+X016336Y005574D01*
+X016336Y005510D02*
+X013600Y005510D01*
+X013638Y005524D02*
+X013638Y005921D01*
+X013638Y005524D01*
+X013638Y005749D02*
+X013638Y005749D01*
+X013638Y005921D02*
+X013638Y005921D01*
+X013280Y005921D01*
+X013280Y005719D01*
+X013177Y005719D01*
+X013150Y005708D01*
+X013150Y005753D01*
+X013091Y005895D01*
+X012982Y006005D01*
+X012839Y006064D01*
+X012685Y006064D01*
+X012542Y006005D01*
+X012491Y005954D01*
+X012490Y005955D01*
+X012347Y006015D01*
+X012193Y006015D01*
+X012050Y005955D01*
+X011999Y005905D01*
+X011998Y005906D01*
+X011855Y005965D01*
+X011701Y005965D01*
+X011558Y005906D01*
+X011449Y005797D01*
+X011389Y005654D01*
+X011389Y005500D01*
+X011408Y005455D01*
+X011363Y005473D01*
+X011208Y005473D01*
+X011066Y005414D01*
+X010956Y005305D01*
+X010897Y005162D01*
+X010897Y005008D01*
+X010956Y004865D01*
+X011066Y004756D01*
+X011208Y004696D01*
+X011363Y004696D01*
+X011430Y004724D01*
+X011430Y004358D01*
+X011299Y004413D01*
+X011076Y004413D01*
+X010870Y004327D01*
+X010843Y004300D01*
+X010843Y004593D01*
+X010646Y004593D01*
+X010597Y004544D01*
+X009760Y004544D01*
+X009760Y004777D01*
+X009798Y004793D01*
+X009865Y004860D01*
+X009902Y004949D01*
+X009902Y005871D01*
+X011981Y007951D01*
+X011981Y007906D01*
+X011981Y007709D01*
+X011981Y007512D01*
+X011981Y007315D01*
+X012093Y007204D01*
+X012841Y007204D01*
+X012952Y007315D01*
+X012952Y007512D01*
+X012952Y007709D01*
+X012952Y007906D01*
+X012952Y008103D01*
+X012952Y008299D01*
+X012952Y008313D01*
+X013082Y008259D01*
+X013229Y008259D01*
+X013365Y008316D01*
+X013468Y008419D01*
+X013524Y008555D01*
+X013524Y008702D01*
+X013468Y008837D01*
+X013406Y008900D01*
+X013406Y009017D01*
+X013614Y009225D01*
+X013631Y009268D01*
+X013647Y009274D01*
+X013703Y009218D01*
+X013703Y007515D01*
+X013665Y007607D01*
+X013561Y007710D01*
+X013426Y007767D01*
+X013279Y007767D01*
+X013144Y007710D01*
+X013040Y007607D01*
+X012984Y007471D01*
+X012984Y007324D01*
+X013019Y007239D01*
+X012913Y007132D01*
+X012913Y007017D01*
+X012885Y007028D01*
+X012738Y007028D01*
+X012602Y006972D01*
+X012499Y006869D01*
+X012443Y006733D01*
+X012443Y006586D01*
+X012499Y006451D01*
+X012571Y006378D01*
+X012571Y006366D01*
+X012608Y006278D01*
+X012675Y006210D01*
+X012774Y006112D01*
+X012862Y006075D01*
+X012957Y006075D01*
+X013280Y006075D01*
+X013280Y005922D01*
+X013638Y005922D01*
+X013638Y005921D01*
+X013811Y005921D01*
+X013810Y005922D01*
+X013638Y005922D01*
+X013638Y005921D01*
+X013280Y005987D02*
+X013000Y005987D01*
+X013150Y005749D02*
+X013280Y005749D01*
+X012660Y006226D02*
+X010256Y006226D01*
+X010494Y006464D02*
+X012493Y006464D01*
+X012443Y006703D02*
+X010733Y006703D01*
+X010972Y006941D02*
+X012571Y006941D01*
+X012960Y007180D02*
+X011210Y007180D01*
+X011449Y007418D02*
+X011981Y007418D01*
+X011981Y007657D02*
+X011687Y007657D01*
+X011926Y007895D02*
+X011981Y007895D01*
+X012952Y007895D02*
+X013703Y007895D01*
+X013703Y007657D02*
+X013615Y007657D01*
+X013090Y007657D02*
+X012952Y007657D01*
+X012952Y007418D02*
+X012984Y007418D01*
+X012952Y008134D02*
+X013703Y008134D01*
+X013703Y008373D02*
+X013422Y008373D01*
+X013524Y008611D02*
+X013703Y008611D01*
+X013703Y008850D02*
+X013456Y008850D01*
+X013477Y009088D02*
+X013703Y009088D01*
+X013647Y009274D02*
+X013647Y009274D01*
+X014429Y006226D02*
+X015328Y006226D01*
+X015328Y005987D02*
+X014478Y005987D01*
+X014478Y005749D02*
+X015328Y005749D01*
+X015951Y005271D02*
+X016336Y005271D01*
+X016231Y005033D02*
+X016084Y005033D01*
+X016062Y004794D02*
+X016034Y004794D01*
+X016096Y004556D02*
+X015609Y004556D01*
+X015127Y004317D02*
+X016191Y004317D01*
+X016381Y004079D02*
+X014948Y004079D01*
+X014995Y003840D02*
+X016401Y003840D01*
+X016401Y003602D02*
+X014937Y003602D01*
+X014717Y003363D02*
+X015287Y003363D01*
+X015024Y003125D02*
+X014929Y003125D01*
+X015749Y003363D02*
+X016271Y003363D01*
+X016167Y005749D02*
+X016168Y005749D01*
+X012782Y004563D02*
+X012427Y004563D01*
+X012112Y004563D01*
+X011758Y004563D01*
+X011430Y004556D02*
+X010843Y004556D01*
+X010609Y004556D02*
+X009760Y004556D01*
+X009799Y004794D02*
+X011027Y004794D01*
+X010897Y005033D02*
+X009902Y005033D01*
+X009902Y005271D02*
+X010943Y005271D01*
+X011389Y005510D02*
+X009902Y005510D01*
+X009902Y005749D02*
+X011428Y005749D01*
+X012126Y005987D02*
+X010017Y005987D01*
+X010843Y004317D02*
+X010860Y004317D01*
+X012414Y005987D02*
+X012524Y005987D01*
+X019054Y010758D02*
+X019212Y010758D01*
+X019167Y010996D02*
+X019054Y010996D01*
+X019063Y011235D02*
+X019078Y011235D01*
+X019895Y010758D02*
+X020655Y010758D01*
+X020644Y007180D02*
+X020451Y007180D01*
+X020451Y006941D02*
+X020644Y006941D01*
+X020644Y006703D02*
+X020451Y006703D01*
+X020439Y000853D02*
+X019849Y000853D01*
+X019455Y000853D01*
+X019455Y000852D01*
+X019849Y000852D01*
+X020439Y000852D01*
+X020439Y000853D01*
+X020440Y000853D02*
+X020833Y000853D01*
+X021423Y000853D01*
+X021423Y000852D01*
+X020833Y000852D01*
+X020440Y000852D01*
+X020440Y000853D01*
+X021424Y000853D02*
+X022013Y000853D01*
+X022407Y000853D01*
+X022407Y000852D01*
+X022013Y000852D01*
+X021424Y000852D01*
+X021424Y000853D01*
+X022408Y000853D02*
+X022802Y000853D01*
+X023392Y000853D01*
+X023786Y000853D01*
+X024376Y000853D01*
+X024376Y000852D01*
+X023786Y000852D01*
+X023392Y000852D01*
+X023392Y000853D01*
+X023392Y000852D01*
+X022802Y000852D01*
+X022408Y000852D01*
+X022408Y000853D01*
+X024377Y000853D02*
+X024770Y000853D01*
+X025360Y000853D01*
+X025360Y000852D01*
+X024770Y000852D01*
+X024377Y000852D01*
+X024377Y000853D01*
+X025361Y000853D02*
+X025755Y000853D01*
+X026344Y000853D01*
+X026344Y000852D01*
+X025755Y000852D01*
+X025361Y000852D01*
+X025361Y000853D01*
+X019455Y000852D02*
+X018865Y000852D01*
+X018471Y000852D01*
+X018471Y000853D01*
+X018865Y000853D01*
+X019455Y000853D01*
+X019455Y000852D01*
+X018470Y000852D02*
+X017881Y000852D01*
+X017487Y000852D01*
+X017487Y000853D01*
+X017881Y000853D01*
+X018470Y000853D01*
+X018470Y000852D01*
+X017486Y000852D02*
+X017092Y000852D01*
+X016503Y000852D01*
+X016503Y000853D01*
+X016896Y000853D01*
+X017486Y000853D01*
+X017486Y000852D01*
+X016502Y000852D02*
+X015912Y000852D01*
+X015518Y000852D01*
+X015518Y000853D01*
+X015912Y000853D01*
+X016502Y000853D01*
+X016502Y000852D01*
+X015518Y000852D02*
+X014928Y000852D01*
+X014436Y000852D01*
+X014436Y000853D01*
+X014928Y000853D01*
+X015518Y000853D01*
+X015518Y000852D01*
+X014435Y000852D02*
+X013845Y000852D01*
+X013353Y000852D01*
+X013353Y000853D01*
+X013845Y000853D01*
+X014435Y000853D01*
+X014435Y000852D01*
+X013352Y000852D02*
+X012860Y000852D01*
+X012270Y000852D01*
+X012270Y000853D01*
+X012860Y000853D01*
+X013352Y000853D01*
+X013352Y000852D01*
+X012269Y000852D02*
+X011680Y000852D01*
+X011188Y000852D01*
+X011188Y000853D01*
+X011680Y000853D01*
+X012269Y000853D01*
+X012269Y000852D01*
+X004304Y005510D02*
+X004291Y005510D01*
+X002831Y006464D02*
+X002831Y006464D01*
+X010787Y015052D02*
+X010850Y015052D01*
+X010850Y015290D02*
+X010787Y015290D01*
+X010787Y015529D02*
+X010996Y015529D01*
+X010996Y015767D02*
+X010522Y015767D01*
+X007742Y017676D02*
+X016367Y017676D01*
+X017687Y015617D02*
+X017687Y014997D01*
+X017687Y014997D01*
+X017687Y015052D02*
+X017687Y015052D01*
+X017687Y015290D02*
+X017687Y015290D01*
+D41*
+X017290Y015666D03*
+X016847Y016453D03*
+X017687Y016748D03*
+X018471Y015862D03*
+X019307Y015862D03*
+X018864Y016650D03*
+X018618Y017683D03*
+X020439Y016256D03*
+X021374Y016010D03*
+X020734Y015469D03*
+X022359Y016010D03*
+X022900Y015420D03*
+X023441Y016010D03*
+X023884Y015420D03*
+X024425Y016059D03*
+X024918Y015420D03*
+X025459Y016010D03*
+X025902Y015420D03*
+X026492Y014829D03*
+X026492Y013845D03*
+X026443Y013254D03*
+X026492Y012418D03*
+X025508Y011679D03*
+X025016Y011679D03*
+X026542Y011433D03*
+X026492Y010646D03*
+X026542Y009859D03*
+X026492Y009071D03*
+X025459Y009416D03*
+X024967Y009416D03*
+X023687Y007939D03*
+X023097Y007890D03*
+X021276Y008234D03*
+X022457Y009416D03*
+X022998Y009416D03*
+X020538Y010006D03*
+X020439Y010892D03*
+X020046Y011138D03*
+X020538Y011532D03*
+X020144Y011925D03*
+X019307Y012860D03*
+X016896Y012122D03*
+X015912Y011925D03*
+X015813Y010646D03*
+X017093Y010498D03*
+X017536Y010498D03*
+X017536Y010006D03*
+X017979Y009957D03*
+X017782Y009268D03*
+X017929Y008825D03*
+X019160Y009219D03*
+X016847Y007693D03*
+X015862Y005429D03*
+X015715Y004986D03*
+X015321Y004790D03*
+X016428Y004716D03*
+X016945Y004642D03*
+X017462Y004863D03*
+X017929Y004839D03*
+X018372Y004888D03*
+X018717Y004593D03*
+X020439Y003855D03*
+X020882Y003510D03*
+X020784Y004248D03*
+X020734Y005479D03*
+X021670Y005675D03*
+X022162Y005823D03*
+X021916Y006315D03*
+X021571Y006660D03*
+X023589Y004544D03*
+X024721Y004347D03*
+X025065Y003953D03*
+X025508Y004839D03*
+X026394Y005183D03*
+X026246Y004150D03*
+X022408Y011679D03*
+X021916Y011679D03*
+X024229Y013057D03*
+X024425Y013845D03*
+X022211Y013845D03*
+X018864Y014829D03*
+X016207Y013500D03*
+X016059Y014091D03*
+X015321Y013549D03*
+X013549Y013549D03*
+X012516Y013549D03*
+X011384Y012073D03*
+X011778Y011187D03*
+X013303Y011286D03*
+X013549Y011729D03*
+X013992Y011925D03*
+X013057Y009957D03*
+X013500Y009612D03*
+X013549Y009022D03*
+X013156Y008628D03*
+X013353Y007398D03*
+X012811Y006660D03*
+X011679Y007103D03*
+X011138Y006512D03*
+X010794Y005479D03*
+X010154Y004888D03*
+X008825Y007742D03*
+X009859Y008087D03*
+X009268Y009170D03*
+X010695Y009219D03*
+X011876Y009760D03*
+X009809Y011040D03*
+X009268Y010547D03*
+X007693Y011433D03*
+X007103Y011089D03*
+X007546Y010597D03*
+X007546Y009957D03*
+X006168Y008923D03*
+X005626Y009317D03*
+X006807Y008628D03*
+X007546Y008727D03*
+X005823Y011483D03*
+X008677Y013500D03*
+X008166Y013727D03*
+X010154Y015764D03*
+X007841Y015862D03*
+X007890Y017683D03*
+X010351Y017683D03*
+X012122Y017683D03*
+X013697Y017634D03*
+X015370Y017634D03*
+X013205Y015862D03*
+X013205Y015370D03*
+X015764Y015223D03*
+X015764Y015764D03*
+X026443Y015912D03*
+M02*
diff --git a/gyro_board/schematic/gyro_motherboard_1.19.2012/gyro_motherboard.GBO b/gyro_board/schematic/gyro_motherboard_1.19.2012/gyro_motherboard.GBO
new file mode 100644
index 0000000..4f94fcc
--- /dev/null
+++ b/gyro_board/schematic/gyro_motherboard_1.19.2012/gyro_motherboard.GBO
@@ -0,0 +1,289 @@
+G75*
+G70*
+%OFA0B0*%
+%FSLAX24Y24*%
+%IPPOS*%
+%LPD*%
+%AMOC8*
+5,1,8,0,0,1.08239X$1,22.5*
+%
+%ADD10C,0.0060*%
+%ADD11C,0.0020*%
+%ADD12R,0.0180X0.0300*%
+%ADD13R,0.0300X0.0180*%
+%ADD14C,0.0300*%
+%ADD15C,0.0220*%
+%ADD16C,0.0080*%
+%ADD17R,0.0787X0.0394*%
+D10*
+X000784Y004455D02*
+X001020Y004455D01*
+X001020Y004927D02*
+X000784Y004927D01*
+X001177Y005095D02*
+X001414Y005095D01*
+X001414Y005567D02*
+X001177Y005567D01*
+X001916Y004927D02*
+X002152Y004927D01*
+X002152Y004455D02*
+X001916Y004455D01*
+X003047Y004455D02*
+X003284Y004455D01*
+X003284Y004927D02*
+X003047Y004927D01*
+X003047Y005095D02*
+X003284Y005095D01*
+X003284Y005567D02*
+X003047Y005567D01*
+X004179Y005567D02*
+X004416Y005567D01*
+X004416Y005095D02*
+X004179Y005095D01*
+X004179Y004927D02*
+X004416Y004927D01*
+X004416Y004455D02*
+X004179Y004455D01*
+X009573Y010134D02*
+X009573Y010370D01*
+X010046Y010370D02*
+X010046Y010134D01*
+X009140Y010853D02*
+X008904Y010853D01*
+X008904Y011325D02*
+X009140Y011325D01*
+X012812Y012515D02*
+X012812Y007399D01*
+X013107Y007103D01*
+X018224Y007103D01*
+X018224Y012515D01*
+X012812Y012515D01*
+X012939Y014150D02*
+X013175Y014150D01*
+X013175Y014622D02*
+X012939Y014622D01*
+X016437Y015587D02*
+X016437Y016827D01*
+X016439Y016850D01*
+X016444Y016873D01*
+X016453Y016895D01*
+X016466Y016915D01*
+X016481Y016933D01*
+X016499Y016948D01*
+X016519Y016961D01*
+X016541Y016970D01*
+X016564Y016975D01*
+X016587Y016977D01*
+X018287Y016977D01*
+X018310Y016975D01*
+X018333Y016970D01*
+X018355Y016961D01*
+X018375Y016948D01*
+X018393Y016933D01*
+X018408Y016915D01*
+X018421Y016895D01*
+X018430Y016873D01*
+X018435Y016850D01*
+X018437Y016827D01*
+X018437Y016407D01*
+X018437Y016007D01*
+X018437Y015587D01*
+X018435Y015564D01*
+X018430Y015541D01*
+X018421Y015519D01*
+X018408Y015499D01*
+X018393Y015481D01*
+X018375Y015466D01*
+X018355Y015453D01*
+X018333Y015444D01*
+X018310Y015439D01*
+X018287Y015437D01*
+X016587Y015437D01*
+X016564Y015439D01*
+X016541Y015444D01*
+X016519Y015453D01*
+X016499Y015466D01*
+X016481Y015481D01*
+X016466Y015499D01*
+X016453Y015519D01*
+X016444Y015541D01*
+X016439Y015564D01*
+X016437Y015587D01*
+X017319Y014376D02*
+X017555Y014376D01*
+X017555Y013904D02*
+X017319Y013904D01*
+X018437Y016007D02*
+X018410Y016009D01*
+X018383Y016014D01*
+X018357Y016024D01*
+X018333Y016036D01*
+X018311Y016052D01*
+X018291Y016070D01*
+X018274Y016092D01*
+X018259Y016115D01*
+X018249Y016140D01*
+X018241Y016166D01*
+X018237Y016193D01*
+X018237Y016221D01*
+X018241Y016248D01*
+X018249Y016274D01*
+X018259Y016299D01*
+X018274Y016322D01*
+X018291Y016344D01*
+X018311Y016362D01*
+X018333Y016378D01*
+X018357Y016390D01*
+X018383Y016400D01*
+X018410Y016405D01*
+X018437Y016407D01*
+X013352Y008038D02*
+X013354Y008077D01*
+X013360Y008116D01*
+X013370Y008154D01*
+X013383Y008191D01*
+X013400Y008226D01*
+X013420Y008260D01*
+X013444Y008291D01*
+X013471Y008320D01*
+X013500Y008346D01*
+X013532Y008369D01*
+X013566Y008389D01*
+X013602Y008405D01*
+X013639Y008417D01*
+X013678Y008426D01*
+X013717Y008431D01*
+X013756Y008432D01*
+X013795Y008429D01*
+X013834Y008422D01*
+X013871Y008411D01*
+X013908Y008397D01*
+X013943Y008379D01*
+X013976Y008358D01*
+X014007Y008333D01*
+X014035Y008306D01*
+X014060Y008276D01*
+X014082Y008243D01*
+X014101Y008209D01*
+X014116Y008173D01*
+X014128Y008135D01*
+X014136Y008097D01*
+X014140Y008058D01*
+X014140Y008018D01*
+X014136Y007979D01*
+X014128Y007941D01*
+X014116Y007903D01*
+X014101Y007867D01*
+X014082Y007833D01*
+X014060Y007800D01*
+X014035Y007770D01*
+X014007Y007743D01*
+X013976Y007718D01*
+X013943Y007697D01*
+X013908Y007679D01*
+X013871Y007665D01*
+X013834Y007654D01*
+X013795Y007647D01*
+X013756Y007644D01*
+X013717Y007645D01*
+X013678Y007650D01*
+X013639Y007659D01*
+X013602Y007671D01*
+X013566Y007687D01*
+X013532Y007707D01*
+X013500Y007730D01*
+X013471Y007756D01*
+X013444Y007785D01*
+X013420Y007816D01*
+X013400Y007850D01*
+X013383Y007885D01*
+X013370Y007922D01*
+X013360Y007960D01*
+X013354Y007999D01*
+X013352Y008038D01*
+D11*
+X016437Y015577D02*
+X018437Y015577D01*
+D12*
+X015124Y014042D03*
+X004445Y016109D03*
+X004445Y016945D03*
+D13*
+X011236Y014681D03*
+X012073Y014681D03*
+X019553Y011433D03*
+X009268Y005331D03*
+X008185Y005331D03*
+X007299Y005331D03*
+X006217Y005331D03*
+X006217Y004051D03*
+X007299Y004051D03*
+X008185Y004051D03*
+X009268Y004051D03*
+D14*
+X006490Y013648D02*
+X006492Y013669D01*
+X006498Y013690D01*
+X006507Y013710D01*
+X006520Y013727D01*
+X006535Y013742D01*
+X006553Y013754D01*
+X006573Y013762D01*
+X006594Y013767D01*
+X006615Y013768D01*
+X006637Y013765D01*
+X006657Y013758D01*
+X006676Y013748D01*
+X006693Y013735D01*
+X006707Y013719D01*
+X006718Y013700D01*
+X006726Y013680D01*
+X006730Y013659D01*
+X006730Y013637D01*
+X006726Y013616D01*
+X006718Y013596D01*
+X006707Y013577D01*
+X006693Y013561D01*
+X006676Y013548D01*
+X006657Y013538D01*
+X006637Y013531D01*
+X006615Y013528D01*
+X006594Y013529D01*
+X006573Y013534D01*
+X006553Y013542D01*
+X006535Y013554D01*
+X006520Y013569D01*
+X006507Y013586D01*
+X006498Y013606D01*
+X006492Y013627D01*
+X006490Y013648D01*
+D15*
+X004605Y013796D02*
+X004581Y013796D01*
+X004605Y015026D02*
+X004581Y015026D01*
+X010388Y014927D02*
+X010412Y014927D01*
+X010412Y013697D02*
+X010388Y013697D01*
+D16*
+X002221Y008008D02*
+X000961Y008008D01*
+X000961Y006984D02*
+X002221Y006984D01*
+X002221Y006827D02*
+X000961Y006827D01*
+X000961Y005803D02*
+X002221Y005803D01*
+X002831Y005803D02*
+X004091Y005803D01*
+X004091Y006827D02*
+X002831Y006827D01*
+X021118Y007753D02*
+X021118Y005173D01*
+X022418Y005173D01*
+X022418Y007753D01*
+X021118Y007753D01*
+D17*
+X000754Y002319D03*
+M02*
diff --git a/gyro_board/schematic/gyro_motherboard_1.19.2012/gyro_motherboard.GBS b/gyro_board/schematic/gyro_motherboard_1.19.2012/gyro_motherboard.GBS
new file mode 100644
index 0000000..625b20b
--- /dev/null
+++ b/gyro_board/schematic/gyro_motherboard_1.19.2012/gyro_motherboard.GBS
@@ -0,0 +1,377 @@
+G75*
+G70*
+%OFA0B0*%
+%FSLAX24Y24*%
+%IPPOS*%
+%LPD*%
+%AMOC8*
+5,1,8,0,0,1.08239X$1,22.5*
+%
+%ADD10R,0.0340X0.0880*%
+%ADD11R,0.0395X0.0552*%
+%ADD12R,0.0552X0.0395*%
+%ADD13R,0.0513X0.0474*%
+%ADD14R,0.0474X0.0513*%
+%ADD15C,0.0820*%
+%ADD16R,0.0820X0.0820*%
+%ADD17R,0.0671X0.0186*%
+%ADD18R,0.0186X0.0671*%
+%ADD19R,0.0946X0.0316*%
+%ADD20R,0.0682X0.0682*%
+%ADD21R,0.1386X0.1386*%
+%ADD22R,0.0277X0.0356*%
+%ADD23R,0.0356X0.0356*%
+%ADD24R,0.0552X0.0867*%
+%ADD25C,0.0907*%
+%ADD26R,0.0560X0.0438*%
+%ADD27R,0.0434X0.0356*%
+%ADD28R,0.0356X0.0434*%
+%ADD29R,0.0960X0.0560*%
+%ADD30R,0.0946X0.1497*%
+%ADD31C,0.0595*%
+D10*
+X016687Y014997D03*
+X017187Y014997D03*
+X017687Y014997D03*
+X018187Y014997D03*
+X018187Y017417D03*
+X017687Y017417D03*
+X017187Y017417D03*
+X016687Y017417D03*
+D11*
+X013412Y014386D03*
+X012703Y014386D03*
+X017083Y014140D03*
+X017792Y014140D03*
+X009376Y011089D03*
+X008668Y011089D03*
+X004652Y005331D03*
+X004652Y004691D03*
+X003943Y004691D03*
+X003520Y004691D03*
+X002811Y004691D03*
+X002388Y004691D03*
+X001679Y004691D03*
+X001256Y004691D03*
+X000547Y004691D03*
+X000941Y005331D03*
+X001650Y005331D03*
+X002811Y005331D03*
+X003520Y005331D03*
+X003943Y005331D03*
+D12*
+X009809Y009898D03*
+X009809Y010607D03*
+D13*
+X014790Y014042D03*
+X015459Y014042D03*
+X004780Y016109D03*
+X004110Y016109D03*
+X004110Y016945D03*
+X004780Y016945D03*
+D14*
+X004593Y015360D03*
+X004593Y014691D03*
+X004593Y014130D03*
+X004593Y013461D03*
+X010400Y013362D03*
+X010400Y014032D03*
+X010400Y014593D03*
+X011236Y014347D03*
+X011236Y015016D03*
+X012073Y015016D03*
+X012073Y014347D03*
+X010400Y015262D03*
+X019553Y011768D03*
+X019553Y011099D03*
+X009268Y005666D03*
+X009268Y004996D03*
+X009268Y004386D03*
+X009268Y003717D03*
+X008185Y003717D03*
+X008185Y004386D03*
+X008185Y004996D03*
+X008185Y005666D03*
+X007299Y005666D03*
+X007299Y004996D03*
+X007299Y004386D03*
+X007299Y003717D03*
+X006217Y003717D03*
+X006217Y004386D03*
+X006217Y004996D03*
+X006217Y005666D03*
+D15*
+X006266Y002853D03*
+X007250Y002853D03*
+X008234Y002853D03*
+X009219Y002853D03*
+X009219Y001853D03*
+X008234Y001853D03*
+X007250Y001853D03*
+X006266Y001853D03*
+X006266Y000853D03*
+X007250Y000853D03*
+X008234Y000853D03*
+X009219Y000853D03*
+X011187Y001853D03*
+X012270Y001853D03*
+X013353Y001853D03*
+X014435Y001853D03*
+X015518Y001853D03*
+X016502Y001853D03*
+X017486Y001853D03*
+X018471Y001853D03*
+X019455Y001853D03*
+X020439Y001853D03*
+X021423Y001853D03*
+X022408Y001853D03*
+X023392Y001853D03*
+X024376Y001853D03*
+X025360Y001853D03*
+X026345Y001853D03*
+X026345Y002853D03*
+X025360Y002853D03*
+X024376Y002853D03*
+X023392Y002853D03*
+X022408Y002853D03*
+X021423Y002853D03*
+X020439Y002853D03*
+X019455Y002853D03*
+X018471Y002853D03*
+X017486Y002853D03*
+X016502Y002853D03*
+X015518Y002853D03*
+X014435Y002853D03*
+X014435Y003853D03*
+X013353Y003853D03*
+X013353Y002853D03*
+X012270Y002853D03*
+X012270Y003853D03*
+X011187Y003853D03*
+X011187Y002853D03*
+X015518Y000853D03*
+X016502Y000853D03*
+X017486Y000853D03*
+X018471Y000853D03*
+X019455Y000853D03*
+X020439Y000853D03*
+X021423Y000853D03*
+X022408Y000853D03*
+X023392Y000853D03*
+X024376Y000853D03*
+X025360Y000853D03*
+X026345Y000853D03*
+X009695Y012171D03*
+X008695Y012171D03*
+X007695Y012171D03*
+D16*
+X010695Y012171D03*
+X011187Y000853D03*
+X012270Y000853D03*
+X013353Y000853D03*
+X014435Y000853D03*
+D17*
+X012467Y007447D03*
+X012467Y007644D03*
+X012467Y007841D03*
+X012467Y008038D03*
+X012467Y008234D03*
+X012467Y008431D03*
+X012467Y008628D03*
+X012467Y008825D03*
+X012467Y009022D03*
+X012467Y009219D03*
+X012467Y009416D03*
+X012467Y009612D03*
+X012467Y009809D03*
+X012467Y010006D03*
+X012467Y010203D03*
+X012467Y010400D03*
+X012467Y010597D03*
+X012467Y010794D03*
+X012467Y010990D03*
+X012467Y011187D03*
+X012467Y011384D03*
+X012467Y011581D03*
+X012467Y011778D03*
+X012467Y011975D03*
+X012467Y012171D03*
+X018569Y012171D03*
+X018569Y011975D03*
+X018569Y011778D03*
+X018569Y011581D03*
+X018569Y011384D03*
+X018569Y011187D03*
+X018569Y010990D03*
+X018569Y010794D03*
+X018569Y010597D03*
+X018569Y010400D03*
+X018569Y010203D03*
+X018569Y010006D03*
+X018569Y009809D03*
+X018569Y009612D03*
+X018569Y009416D03*
+X018569Y009219D03*
+X018569Y009022D03*
+X018569Y008825D03*
+X018569Y008628D03*
+X018569Y008431D03*
+X018569Y008234D03*
+X018569Y008038D03*
+X018569Y007841D03*
+X018569Y007644D03*
+X018569Y007447D03*
+D18*
+X017880Y006758D03*
+X017683Y006758D03*
+X017486Y006758D03*
+X017290Y006758D03*
+X017093Y006758D03*
+X016896Y006758D03*
+X016699Y006758D03*
+X016502Y006758D03*
+X016305Y006758D03*
+X016109Y006758D03*
+X015912Y006758D03*
+X015715Y006758D03*
+X015518Y006758D03*
+X015321Y006758D03*
+X015124Y006758D03*
+X014927Y006758D03*
+X014731Y006758D03*
+X014534Y006758D03*
+X014337Y006758D03*
+X014140Y006758D03*
+X013943Y006758D03*
+X013746Y006758D03*
+X013549Y006758D03*
+X013353Y006758D03*
+X013156Y006758D03*
+X013156Y012860D03*
+X013353Y012860D03*
+X013549Y012860D03*
+X013746Y012860D03*
+X013943Y012860D03*
+X014140Y012860D03*
+X014337Y012860D03*
+X014534Y012860D03*
+X014731Y012860D03*
+X014927Y012860D03*
+X015124Y012860D03*
+X015321Y012860D03*
+X015518Y012860D03*
+X015715Y012860D03*
+X015912Y012860D03*
+X016109Y012860D03*
+X016305Y012860D03*
+X016502Y012860D03*
+X016699Y012860D03*
+X016896Y012860D03*
+X017093Y012860D03*
+X017290Y012860D03*
+X017486Y012860D03*
+X017683Y012860D03*
+X017880Y012860D03*
+D19*
+X009406Y013670D03*
+X009406Y014170D03*
+X009406Y014670D03*
+X009406Y015170D03*
+X009406Y015670D03*
+X009406Y016170D03*
+X009406Y016670D03*
+X009406Y017170D03*
+X005784Y017170D03*
+X005784Y016670D03*
+X005784Y016170D03*
+X005784Y015670D03*
+X005784Y015170D03*
+X005784Y014670D03*
+X005784Y014170D03*
+X005784Y013670D03*
+D20*
+X003018Y013845D03*
+X003018Y014829D03*
+X001738Y014829D03*
+X001738Y013845D03*
+D21*
+X002112Y011967D03*
+X002112Y016707D03*
+D22*
+X012112Y005114D03*
+X012427Y005114D03*
+X012427Y004563D03*
+X012112Y004563D03*
+X014130Y004514D03*
+X014445Y004514D03*
+X014445Y005065D03*
+X014130Y005065D03*
+X017083Y004179D03*
+X017398Y004179D03*
+X017398Y003628D03*
+X017083Y003628D03*
+X018756Y003628D03*
+X019071Y003628D03*
+X019071Y004179D03*
+X018756Y004179D03*
+X023579Y004081D03*
+X023894Y004081D03*
+X023894Y003530D03*
+X023579Y003530D03*
+D23*
+X023225Y003530D03*
+X023225Y004081D03*
+X024248Y004081D03*
+X024248Y003530D03*
+X019425Y003628D03*
+X019425Y004179D03*
+X018402Y004179D03*
+X017752Y004179D03*
+X017752Y003628D03*
+X018402Y003628D03*
+X016729Y003628D03*
+X016729Y004179D03*
+X014799Y004514D03*
+X014799Y005065D03*
+X013776Y005065D03*
+X013776Y004514D03*
+X012782Y004563D03*
+X012782Y005114D03*
+X011758Y005114D03*
+X011758Y004563D03*
+D24*
+X004091Y006315D03*
+X002831Y006315D03*
+X002221Y006315D03*
+X002221Y007496D03*
+X000961Y007496D03*
+X000961Y006315D03*
+D25*
+X002998Y003215D02*
+X003825Y003215D01*
+X003825Y001246D02*
+X002998Y001246D01*
+D26*
+X000754Y001439D03*
+X000754Y002727D03*
+D27*
+X011138Y008963D03*
+X011138Y009475D03*
+X011532Y010144D03*
+X011532Y010656D03*
+X014042Y013835D03*
+X014042Y014347D03*
+D28*
+X014150Y005921D03*
+X013638Y005921D03*
+X015656Y005971D03*
+X016168Y005971D03*
+D29*
+X022988Y005553D03*
+X022988Y006463D03*
+X022988Y007373D03*
+D30*
+X020548Y006463D03*
+D31*
+X010351Y002329D03*
+M02*
diff --git a/gyro_board/schematic/gyro_motherboard_1.19.2012/gyro_motherboard.GTL b/gyro_board/schematic/gyro_motherboard_1.19.2012/gyro_motherboard.GTL
new file mode 100644
index 0000000..30f0871
--- /dev/null
+++ b/gyro_board/schematic/gyro_motherboard_1.19.2012/gyro_motherboard.GTL
@@ -0,0 +1,4273 @@
+G75*
+G70*
+%OFA0B0*%
+%FSLAX24Y24*%
+%IPPOS*%
+%LPD*%
+%AMOC8*
+5,1,8,0,0,1.08239X$1,22.5*
+%
+%ADD10C,0.0000*%
+%ADD11R,0.0394X0.0433*%
+%ADD12R,0.0472X0.0472*%
+%ADD13R,0.0472X0.0315*%
+%ADD14R,0.1014X0.0748*%
+%ADD15C,0.0740*%
+%ADD16R,0.0740X0.0740*%
+%ADD17R,0.0225X0.0666*%
+%ADD18R,0.0500X0.1000*%
+%ADD19R,0.0602X0.0602*%
+%ADD20R,0.1306X0.1306*%
+%ADD21R,0.2028X0.0299*%
+%ADD22R,0.1555X0.0965*%
+%ADD23R,0.0104X0.0189*%
+%ADD24R,0.0926X0.0138*%
+%ADD25R,0.0630X0.0138*%
+%ADD26R,0.0315X0.0472*%
+%ADD27R,0.0433X0.0394*%
+%ADD28R,0.0748X0.1339*%
+%ADD29R,0.0315X0.0354*%
+%ADD30R,0.2106X0.3362*%
+%ADD31R,0.0350X0.1205*%
+%ADD32C,0.0827*%
+%ADD33R,0.0315X0.0236*%
+%ADD34R,0.0480X0.0880*%
+%ADD35R,0.1417X0.0866*%
+%ADD36C,0.0120*%
+%ADD37C,0.0397*%
+%ADD38C,0.0100*%
+%ADD39C,0.0515*%
+%ADD40C,0.0240*%
+%ADD41C,0.0700*%
+%ADD42C,0.0500*%
+%ADD43C,0.0320*%
+%ADD44C,0.0436*%
+%ADD45C,0.0357*%
+%ADD46C,0.0400*%
+%ADD47C,0.0160*%
+D10*
+X000262Y000262D02*
+X000262Y017979D01*
+X026935Y017979D01*
+X026935Y000262D01*
+X000262Y000262D01*
+D11*
+X005233Y003569D03*
+X005233Y004238D03*
+X013648Y010114D03*
+X013648Y010784D03*
+X017536Y008421D03*
+X017536Y007752D03*
+X018372Y007752D03*
+X018372Y008421D03*
+X019209Y008421D03*
+X019209Y007752D03*
+D12*
+X019209Y007171D03*
+X018372Y007171D03*
+X017536Y007171D03*
+X017536Y006345D03*
+X018372Y006345D03*
+X019209Y006345D03*
+X014288Y012693D03*
+X014288Y013520D03*
+X005233Y003038D03*
+X005233Y002211D03*
+D13*
+X005479Y001601D03*
+X005479Y000892D03*
+X010301Y000843D03*
+X010301Y001551D03*
+X008530Y008175D03*
+X008530Y008884D03*
+X006857Y011768D03*
+X006857Y012477D03*
+X021079Y007457D03*
+X021079Y006748D03*
+D14*
+X010631Y009947D03*
+X010631Y011049D03*
+X008495Y011049D03*
+X008495Y009947D03*
+D15*
+X008695Y012171D03*
+X007695Y012171D03*
+X009695Y012171D03*
+X011187Y003853D03*
+X011187Y002853D03*
+X012270Y002853D03*
+X012270Y003853D03*
+X013353Y003853D03*
+X013353Y002853D03*
+X014435Y002853D03*
+X015518Y002853D03*
+X016502Y002853D03*
+X017486Y002853D03*
+X018471Y002853D03*
+X019455Y002853D03*
+X020439Y002853D03*
+X021423Y002853D03*
+X022408Y002853D03*
+X023392Y002853D03*
+X024376Y002853D03*
+X025360Y002853D03*
+X026345Y002853D03*
+X026345Y001853D03*
+X025360Y001853D03*
+X024376Y001853D03*
+X023392Y001853D03*
+X022408Y001853D03*
+X021423Y001853D03*
+X020439Y001853D03*
+X019455Y001853D03*
+X018471Y001853D03*
+X017486Y001853D03*
+X016502Y001853D03*
+X015518Y001853D03*
+X014435Y001853D03*
+X013353Y001853D03*
+X012270Y001853D03*
+X011187Y001853D03*
+X009219Y001853D03*
+X008234Y001853D03*
+X007250Y001853D03*
+X006266Y001853D03*
+X006266Y002853D03*
+X007250Y002853D03*
+X008234Y002853D03*
+X009219Y002853D03*
+X009219Y000853D03*
+X008234Y000853D03*
+X007250Y000853D03*
+X006266Y000853D03*
+X014435Y003853D03*
+X015518Y000853D03*
+X016502Y000853D03*
+X017486Y000853D03*
+X018471Y000853D03*
+X019455Y000853D03*
+X020439Y000853D03*
+X021423Y000853D03*
+X022408Y000853D03*
+X023392Y000853D03*
+X024376Y000853D03*
+X025360Y000853D03*
+X026345Y000853D03*
+D16*
+X014435Y000853D03*
+X013353Y000853D03*
+X012270Y000853D03*
+X011187Y000853D03*
+X010695Y012171D03*
+D17*
+X021986Y012278D03*
+X022486Y012278D03*
+X022986Y012278D03*
+X023486Y012278D03*
+X023986Y012278D03*
+X024486Y012278D03*
+X024986Y012278D03*
+X025486Y012278D03*
+X025486Y008522D03*
+X024986Y008522D03*
+X024486Y008522D03*
+X023986Y008522D03*
+X023486Y008522D03*
+X022986Y008522D03*
+X022486Y008522D03*
+X021986Y008522D03*
+D18*
+X022925Y013973D03*
+X023925Y013973D03*
+X024925Y013973D03*
+X025925Y013973D03*
+X025925Y017359D03*
+X024925Y017359D03*
+X023925Y017359D03*
+X022925Y017359D03*
+D19*
+X003018Y014829D03*
+X003018Y013845D03*
+X001738Y013845D03*
+X001738Y014829D03*
+D20*
+X002112Y016707D03*
+X002112Y011967D03*
+D21*
+X011929Y014120D03*
+X011929Y014620D03*
+X011929Y015120D03*
+X011929Y015620D03*
+X011929Y016120D03*
+X011929Y016620D03*
+X014481Y016620D03*
+X014481Y016120D03*
+X014481Y015620D03*
+X014481Y015120D03*
+X014481Y014620D03*
+X014481Y014120D03*
+D22*
+X021006Y013412D03*
+X021006Y017329D03*
+X005404Y017329D03*
+X005404Y013412D03*
+D23*
+X011876Y005081D03*
+X012073Y005081D03*
+X012270Y005081D03*
+X012467Y005081D03*
+X012664Y005081D03*
+X012860Y005081D03*
+X012860Y004597D03*
+X012664Y004597D03*
+X012467Y004597D03*
+X012270Y004597D03*
+X012073Y004597D03*
+X011876Y004597D03*
+X015173Y004392D03*
+X015370Y004392D03*
+X015567Y004392D03*
+X015764Y004392D03*
+X015961Y004392D03*
+X016158Y004392D03*
+X016158Y003908D03*
+X015961Y003908D03*
+X015764Y003908D03*
+X015567Y003908D03*
+X015370Y003908D03*
+X015173Y003908D03*
+X017486Y003711D03*
+X017683Y003711D03*
+X017880Y003711D03*
+X018077Y003711D03*
+X018274Y003711D03*
+X018471Y003711D03*
+X018471Y004195D03*
+X018274Y004195D03*
+X018077Y004195D03*
+X017880Y004195D03*
+X017683Y004195D03*
+X017486Y004195D03*
+X022998Y004096D03*
+X023195Y004096D03*
+X023392Y004096D03*
+X023589Y004096D03*
+X023786Y004096D03*
+X023983Y004096D03*
+X023983Y003613D03*
+X023786Y003613D03*
+X023589Y003613D03*
+X023392Y003613D03*
+X023195Y003613D03*
+X022998Y003613D03*
+X008038Y003760D03*
+X007841Y003760D03*
+X007644Y003760D03*
+X007447Y003760D03*
+X007250Y003760D03*
+X007053Y003760D03*
+X007053Y004244D03*
+X007250Y004244D03*
+X007447Y004244D03*
+X007644Y004244D03*
+X007841Y004244D03*
+X008038Y004244D03*
+D24*
+X007546Y004002D03*
+X012368Y004839D03*
+X015666Y004150D03*
+X017979Y003953D03*
+X023490Y003855D03*
+D25*
+X008845Y004760D03*
+X008845Y005016D03*
+X008845Y005272D03*
+X008845Y005528D03*
+X008845Y005784D03*
+X008845Y006040D03*
+X008845Y006296D03*
+X006640Y006296D03*
+X006640Y006040D03*
+X006640Y005784D03*
+X006640Y005528D03*
+X006640Y005272D03*
+X006640Y005016D03*
+X006640Y004760D03*
+D26*
+X007388Y006857D03*
+X008097Y006857D03*
+X012211Y010892D03*
+X012920Y010892D03*
+X020577Y012270D03*
+X021286Y012270D03*
+X023038Y006561D03*
+X023746Y006561D03*
+D27*
+X023727Y007299D03*
+X023057Y007299D03*
+X022496Y007693D03*
+X021827Y007693D03*
+X024288Y007742D03*
+X024957Y007742D03*
+X024829Y013057D03*
+X025498Y013057D03*
+X023677Y013057D03*
+X023008Y013057D03*
+D28*
+X024593Y006561D03*
+X026128Y006561D03*
+D29*
+X026374Y007546D03*
+X025626Y007546D03*
+X026000Y008372D03*
+D30*
+X002526Y008010D03*
+D31*
+X002526Y005134D03*
+X003026Y005134D03*
+X003526Y005134D03*
+X004026Y005134D03*
+X002026Y005134D03*
+X001526Y005134D03*
+X001026Y005134D03*
+D32*
+X002998Y003215D02*
+X003825Y003215D01*
+X003825Y001246D02*
+X002998Y001246D01*
+D33*
+X010252Y008648D03*
+X010252Y009199D03*
+X011630Y009199D03*
+X011630Y008648D03*
+D34*
+X007422Y007703D03*
+X006512Y007703D03*
+X005602Y007703D03*
+D35*
+X006512Y010144D03*
+D36*
+X009612Y013008D02*
+X011138Y013008D01*
+X012368Y011778D01*
+X009612Y013008D02*
+X009317Y013303D01*
+X009317Y015272D01*
+X009809Y015764D01*
+X010154Y015764D01*
+X009416Y006857D02*
+X008097Y006857D01*
+X007388Y006857D02*
+X006069Y006857D01*
+X006069Y005528D01*
+X006640Y005528D01*
+X006640Y006040D02*
+X006640Y006296D01*
+X007841Y005183D02*
+X007841Y004244D01*
+X008038Y004244D02*
+X008038Y004642D01*
+X007644Y004244D02*
+X007644Y005040D01*
+X008845Y005528D02*
+X009416Y005528D01*
+X009416Y003569D01*
+X008776Y003569D01*
+X008776Y003707D01*
+X008382Y003707D01*
+X008382Y004002D01*
+X007546Y004002D01*
+X009416Y005528D02*
+X009416Y006857D01*
+X008845Y006296D02*
+X008845Y006040D01*
+X010400Y004199D02*
+X010744Y004544D01*
+X011384Y004544D01*
+X010400Y004199D02*
+X010400Y002378D01*
+X010351Y002329D01*
+D37*
+X008776Y003569D03*
+X008776Y004248D03*
+X006709Y004248D03*
+X007299Y006168D03*
+X008185Y006168D03*
+X011286Y005085D03*
+X011778Y005577D03*
+X012270Y005626D03*
+X012762Y005675D03*
+X013254Y005331D03*
+X013205Y004790D03*
+X001542Y003855D03*
+D38*
+X005675Y003559D02*
+X005675Y001837D01*
+X006266Y001837D01*
+X006266Y001853D01*
+X006266Y002853D02*
+X006266Y003067D01*
+X006660Y003461D01*
+X007447Y003461D01*
+X007447Y003760D01*
+X007644Y003760D02*
+X007644Y003246D01*
+X007250Y002853D01*
+X007841Y003246D02*
+X008234Y002853D01*
+X008284Y003362D02*
+X008038Y003609D01*
+X008038Y003760D01*
+X007841Y003760D02*
+X007841Y003246D01*
+X008284Y003362D02*
+X008530Y003362D01*
+X009040Y002853D01*
+X009219Y002853D01*
+X008845Y004248D02*
+X008776Y004248D01*
+X008845Y004248D02*
+X008845Y005016D01*
+X008845Y004760D01*
+X008845Y005272D02*
+X008274Y005272D01*
+X008038Y005036D01*
+X008038Y004642D01*
+X007644Y005040D02*
+X007644Y005331D01*
+X007201Y005774D01*
+X006650Y005774D01*
+X006640Y005784D01*
+X006069Y005528D02*
+X006069Y003953D01*
+X005675Y003559D01*
+X005675Y004396D01*
+X006640Y004317D02*
+X006709Y004248D01*
+X006640Y004317D02*
+X006640Y004760D01*
+X006640Y005016D01*
+X006640Y005272D02*
+X007162Y005272D01*
+X007447Y004986D01*
+X007447Y004244D01*
+X007841Y005183D02*
+X007841Y005331D01*
+X008294Y005784D01*
+X008845Y005784D01*
+X008313Y006296D02*
+X008185Y006168D01*
+X008313Y006296D02*
+X008845Y006296D01*
+X007299Y006168D02*
+X007171Y006296D01*
+X006640Y006296D01*
+X010134Y008648D02*
+X010154Y008628D01*
+X010252Y009199D02*
+X010272Y009219D01*
+X010695Y009219D01*
+X011630Y009199D02*
+X011876Y009445D01*
+X011876Y009760D01*
+X012565Y010203D02*
+X012811Y009957D01*
+X013057Y009957D01*
+X012565Y010203D02*
+X012565Y011581D01*
+X012368Y011778D01*
+X012910Y011679D02*
+X013303Y011286D01*
+X013303Y011276D01*
+X012920Y010892D01*
+X013294Y011286D02*
+X013303Y011286D01*
+X013648Y010941D01*
+X013648Y010784D01*
+X014042Y010508D02*
+X014042Y011236D01*
+X013549Y011729D01*
+X013549Y012664D01*
+X013579Y012693D01*
+X014288Y012693D01*
+X015400Y012693D01*
+X016207Y013500D01*
+X016699Y014091D02*
+X016170Y014620D01*
+X014481Y014620D01*
+X014481Y015120D02*
+X015662Y015120D01*
+X015764Y015223D01*
+X015620Y015620D02*
+X015764Y015764D01*
+X015620Y015620D02*
+X014481Y015620D01*
+X014481Y016120D02*
+X015900Y016120D01*
+X016207Y015813D01*
+X016207Y014927D01*
+X017290Y013845D01*
+X017290Y012073D01*
+X016748Y011532D01*
+X015666Y011532D01*
+X014878Y010744D01*
+X014878Y008923D01*
+X013353Y007398D01*
+X013205Y007742D02*
+X012811Y007742D01*
+X012418Y007349D01*
+X012418Y006512D01*
+X011827Y005921D01*
+X011827Y005577D01*
+X011778Y005577D01*
+X011827Y005577D02*
+X012073Y005331D01*
+X012073Y005081D01*
+X011876Y005081D02*
+X011290Y005081D01*
+X011286Y005085D01*
+X011384Y005183D01*
+X011384Y005823D01*
+X012171Y006610D01*
+X012171Y007447D01*
+X012713Y007988D01*
+X013107Y007988D01*
+X014337Y009219D01*
+X014337Y011778D01*
+X014731Y012171D01*
+X015321Y012171D02*
+X014583Y011433D01*
+X014583Y009120D01*
+X013205Y007742D01*
+X013107Y006660D02*
+X012811Y006660D01*
+X013107Y006660D02*
+X015075Y008628D01*
+X015075Y010597D01*
+X015813Y011335D01*
+X016896Y011335D01*
+X017536Y011975D01*
+X017536Y013943D01*
+X016453Y015026D01*
+X016453Y015912D01*
+X015744Y016620D01*
+X014481Y016620D01*
+X013205Y015862D02*
+X012963Y015620D01*
+X011929Y015620D01*
+X011929Y015120D02*
+X012955Y015120D01*
+X013205Y015370D01*
+X013431Y014120D02*
+X012910Y013599D01*
+X012910Y011679D01*
+X012162Y010941D02*
+X012211Y010892D01*
+X011286Y011581D02*
+X010695Y012171D01*
+X011384Y012073D02*
+X011433Y012122D01*
+X011433Y012418D01*
+X011089Y012762D01*
+X009286Y012762D01*
+X008695Y012171D01*
+X007939Y011581D02*
+X007792Y011433D01*
+X007693Y011433D01*
+X007939Y011581D02*
+X011286Y011581D01*
+X010631Y011049D02*
+X009819Y011049D01*
+X009809Y011040D01*
+X009268Y010547D02*
+X008668Y009947D01*
+X008495Y009947D01*
+X007792Y009919D02*
+X005675Y009919D01*
+X005675Y009821D02*
+X007792Y009821D01*
+X007792Y009722D02*
+X005675Y009722D01*
+X005675Y009624D02*
+X007792Y009624D01*
+X007792Y009525D02*
+X005675Y009525D01*
+X005675Y009427D02*
+X007792Y009427D01*
+X007792Y009328D02*
+X005675Y009328D01*
+X005675Y009229D02*
+X007792Y009229D01*
+X007792Y009219D02*
+X007792Y010695D01*
+X005675Y010695D01*
+X005675Y009219D01*
+X007792Y009219D01*
+X007792Y010018D02*
+X005675Y010018D01*
+X005675Y010116D02*
+X007792Y010116D01*
+X007792Y010215D02*
+X005675Y010215D01*
+X005675Y010313D02*
+X007792Y010313D01*
+X007792Y010412D02*
+X005675Y010412D01*
+X005675Y010511D02*
+X007792Y010511D01*
+X007792Y010609D02*
+X005675Y010609D01*
+X011581Y008628D02*
+X011601Y008648D01*
+X011630Y008648D01*
+X013500Y009612D02*
+X013648Y009760D01*
+X013648Y010114D01*
+X014042Y010508D01*
+X015321Y009563D02*
+X015321Y008530D01*
+X012860Y006069D01*
+X012516Y006069D01*
+X012270Y005823D01*
+X012270Y005626D01*
+X012270Y005081D01*
+X012467Y005081D02*
+X012467Y005282D01*
+X012762Y005577D01*
+X012762Y005675D01*
+X015567Y008481D01*
+X015567Y009416D01*
+X017044Y010892D01*
+X017191Y010892D01*
+X017831Y011532D01*
+X020538Y011532D01*
+X020144Y011925D02*
+X017831Y011925D01*
+X016994Y011089D01*
+X016847Y011089D01*
+X015321Y009563D01*
+X015813Y009219D02*
+X015813Y008431D01*
+X013254Y005872D01*
+X013254Y005331D01*
+X012762Y005331D01*
+X012664Y005233D01*
+X012664Y005081D01*
+X012860Y005081D02*
+X012914Y005081D01*
+X013205Y004790D01*
+X013254Y004790D01*
+X013648Y005183D01*
+X013648Y005921D01*
+X016059Y008333D01*
+X016059Y009022D01*
+X017536Y010498D01*
+X017093Y010498D02*
+X015813Y009219D01*
+X016355Y008825D02*
+X016355Y008234D01*
+X014091Y005971D01*
+X014091Y005474D01*
+X015173Y004392D01*
+X015173Y004642D01*
+X015321Y004790D01*
+X015715Y004691D02*
+X015764Y004642D01*
+X015764Y004392D01*
+X015666Y004150D02*
+X016305Y004150D01*
+X016453Y004002D01*
+X016453Y003904D01*
+X016453Y003855D01*
+X016207Y003609D01*
+X016059Y003609D01*
+X015862Y003412D01*
+X015321Y003412D01*
+X015026Y003116D01*
+X015026Y000902D01*
+X015075Y000853D01*
+X015518Y002853D02*
+X015648Y002853D01*
+X016158Y003362D01*
+X016256Y003362D01*
+X016605Y003711D01*
+X017486Y003711D01*
+X017683Y003711D02*
+X017683Y003559D01*
+X017585Y003461D01*
+X017110Y003461D01*
+X016502Y002853D01*
+X015666Y003609D02*
+X015191Y003609D01*
+X014435Y002853D01*
+X013894Y003394D02*
+X013353Y002853D01*
+X013894Y003394D02*
+X013894Y004150D01*
+X013648Y004396D01*
+X013062Y004396D01*
+X012860Y004597D01*
+X012664Y004597D02*
+X012664Y004445D01*
+X013256Y003853D01*
+X013353Y003853D01*
+X012811Y004051D02*
+X012811Y003394D01*
+X012270Y002853D01*
+X011729Y003394D02*
+X011187Y002853D01*
+X011729Y003394D02*
+X011729Y004051D01*
+X012073Y004396D01*
+X012073Y004597D01*
+X011876Y004597D02*
+X011876Y004542D01*
+X011187Y003853D01*
+X011384Y004544D02*
+X011679Y004839D01*
+X012368Y004839D01*
+X012270Y004597D02*
+X012270Y003853D01*
+X012811Y004051D02*
+X012467Y004396D01*
+X012467Y004597D01*
+X014435Y003853D02*
+X014491Y003908D01*
+X015173Y003908D01*
+X015666Y003609D02*
+X015764Y003707D01*
+X015764Y003908D01*
+X016453Y003904D02*
+X017044Y003904D01*
+X017093Y003953D01*
+X017979Y003953D01*
+X018077Y003711D02*
+X018077Y003246D01*
+X018471Y002853D01*
+X017880Y003246D02*
+X017880Y003711D01*
+X018274Y003711D02*
+X018274Y003559D01*
+X018372Y003461D01*
+X018847Y003461D01*
+X019455Y002853D01*
+X019581Y003711D02*
+X018471Y003711D01*
+X018471Y004195D02*
+X018717Y004441D01*
+X018717Y004593D01*
+X018372Y004642D02*
+X018274Y004544D01*
+X018274Y004195D01*
+X018077Y004195D02*
+X018077Y004691D01*
+X017929Y004839D01*
+X017880Y004445D02*
+X017462Y004863D01*
+X017486Y004544D02*
+X017044Y004544D01*
+X016945Y004642D01*
+X016699Y004199D02*
+X016703Y004195D01*
+X017486Y004195D01*
+X017683Y004195D02*
+X017683Y004347D01*
+X017486Y004544D01*
+X017880Y004445D02*
+X017880Y004195D01*
+X018372Y004642D02*
+X018372Y004888D01*
+X019581Y003711D02*
+X020439Y002853D01*
+X020931Y003116D02*
+X021670Y003855D01*
+X023490Y003855D01*
+X023392Y003613D02*
+X023392Y002853D01*
+X023097Y003362D02*
+X022918Y003362D01*
+X022408Y002853D01*
+X023097Y003362D02*
+X023195Y003461D01*
+X023195Y003613D01*
+X022998Y003613D02*
+X022184Y003613D01*
+X021423Y002853D01*
+X020931Y003116D02*
+X020931Y000853D01*
+X017880Y003246D02*
+X017486Y002853D01*
+X016699Y004199D02*
+X016428Y004470D01*
+X016428Y004716D01*
+X015715Y004691D02*
+X015715Y004986D01*
+X014829Y005872D01*
+X014829Y006315D01*
+X016650Y008136D01*
+X016650Y008628D01*
+X017979Y009957D01*
+X017536Y010006D02*
+X016355Y008825D01*
+X017536Y009022D02*
+X017536Y008421D01*
+X017929Y008825D02*
+X018333Y008421D01*
+X018372Y008421D01*
+X018372Y007752D02*
+X018372Y007171D01*
+X017536Y007171D02*
+X017536Y007752D01*
+X016847Y007693D02*
+X016847Y007034D01*
+X017536Y006345D01*
+X018372Y006345D01*
+X019209Y006345D01*
+X019209Y007171D02*
+X019209Y007752D01*
+X019209Y008421D02*
+X019209Y009170D01*
+X019160Y009219D01*
+X017782Y009268D02*
+X017536Y009022D01*
+X021276Y008234D02*
+X021571Y008530D01*
+X021571Y011975D01*
+X021874Y012278D01*
+X021986Y012278D01*
+X022486Y012278D02*
+X022486Y012782D01*
+X022112Y013156D01*
+X022925Y013973D02*
+X022925Y015394D01*
+X022900Y015420D01*
+X023884Y015420D02*
+X023925Y015378D01*
+X023925Y013973D01*
+X024925Y013973D02*
+X024925Y015412D01*
+X024918Y015420D01*
+X025902Y015420D02*
+X025925Y015396D01*
+X025925Y013973D01*
+X023986Y008522D02*
+X023986Y008238D01*
+X023687Y007939D01*
+X023486Y008280D02*
+X023097Y007890D01*
+X023486Y008280D02*
+X023486Y008522D01*
+X023589Y004544D02*
+X023589Y004096D01*
+X023786Y004096D02*
+X023786Y004297D01*
+X023933Y004445D01*
+X024622Y004445D01*
+X024721Y004347D01*
+X025065Y003953D02*
+X024179Y003953D01*
+X024032Y004101D01*
+X023987Y004101D01*
+X023983Y004096D01*
+X023983Y003613D02*
+X025584Y003613D01*
+X026345Y002853D01*
+X025360Y002853D02*
+X024851Y003362D01*
+X023884Y003362D01*
+X023786Y003461D01*
+X023786Y003613D01*
+X023589Y003613D02*
+X023589Y003412D01*
+X024148Y002853D01*
+X024376Y002853D01*
+X023392Y004096D02*
+X023392Y004297D01*
+X023146Y004544D01*
+X021079Y004544D01*
+X020784Y004248D01*
+X020931Y003855D02*
+X020439Y003855D01*
+X020931Y003855D02*
+X021423Y004347D01*
+X023097Y004347D01*
+X023195Y004248D01*
+X023195Y004096D01*
+X022998Y004096D02*
+X021468Y004096D01*
+X020882Y003510D01*
+X014442Y003859D02*
+X014435Y003853D01*
+X006266Y000853D02*
+X005518Y000853D01*
+X005479Y000892D01*
+X016896Y012122D02*
+X016699Y012319D01*
+X016699Y014091D01*
+X015321Y013549D02*
+X015292Y013520D01*
+X014288Y013520D01*
+X014481Y014120D02*
+X013431Y014120D01*
+X013549Y013549D02*
+X013549Y012664D01*
+D39*
+X010351Y002329D03*
+D40*
+X010603Y001853D02*
+X010301Y001551D01*
+X009520Y001551D01*
+X009219Y001853D01*
+X009219Y000853D02*
+X009229Y000843D01*
+X010301Y000843D01*
+X010311Y000853D01*
+X011187Y000853D01*
+X011187Y001853D02*
+X010603Y001853D01*
+X007422Y007703D02*
+X007894Y008175D01*
+X008530Y008175D01*
+X009012Y008175D01*
+X009484Y008648D01*
+X010134Y008648D01*
+X010252Y008648D01*
+X010154Y008628D02*
+X011581Y008628D01*
+X013156Y008628D01*
+X005528Y011089D02*
+X005479Y011040D01*
+X021079Y006748D02*
+X021168Y006660D01*
+X021571Y006660D01*
+X021940Y006703D02*
+X022660Y006703D01*
+X022660Y006826D02*
+X022660Y006561D01*
+X022660Y006364D01*
+X021797Y006364D01*
+X021884Y006451D01*
+X021940Y006586D01*
+X021940Y006733D01*
+X021884Y006869D01*
+X021780Y006972D01*
+X021644Y007028D01*
+X021620Y007028D01*
+X021620Y007306D01*
+X022122Y007306D01*
+X022140Y007325D01*
+X022145Y007320D01*
+X022195Y007291D01*
+X022251Y007276D01*
+X022496Y007276D01*
+X022496Y007693D01*
+X022496Y007693D01*
+X022890Y007299D01*
+X023057Y007299D01*
+X022811Y007299D01*
+X022812Y007300D01*
+X023057Y007300D01*
+X023057Y007299D01*
+X022621Y007276D02*
+X022621Y007074D01*
+X022636Y007018D01*
+X022665Y006968D01*
+X022703Y006930D01*
+X022675Y006882D01*
+X022660Y006826D01*
+X022691Y006941D02*
+X021811Y006941D01*
+X021620Y007180D02*
+X022621Y007180D01*
+X022621Y007276D02*
+X022496Y007276D01*
+X022496Y007693D01*
+X022486Y007703D01*
+X022486Y008522D01*
+X022486Y009075D01*
+X022345Y009075D01*
+X022289Y009060D01*
+X022239Y009031D01*
+X022215Y009007D01*
+X022178Y009045D01*
+X021811Y009045D01*
+X021811Y011755D01*
+X022178Y011755D01*
+X022236Y011814D01*
+X022295Y011755D01*
+X022678Y011755D01*
+X022736Y011814D01*
+X022795Y011755D01*
+X023178Y011755D01*
+X023215Y011793D01*
+X023239Y011769D01*
+X023289Y011740D01*
+X023345Y011725D01*
+X023486Y011725D01*
+X023486Y012278D01*
+X023677Y012469D01*
+X023677Y013057D01*
+X023008Y013057D02*
+X022986Y013036D01*
+X022986Y012278D01*
+X023486Y012278D02*
+X023487Y012278D01*
+X023654Y012278D01*
+X023986Y012278D01*
+X023986Y012278D01*
+X023654Y012278D01*
+X023487Y012278D01*
+X023487Y012278D01*
+X023487Y011725D01*
+X023628Y011725D01*
+X023684Y011740D01*
+X023734Y011769D01*
+X023736Y011771D01*
+X023739Y011769D01*
+X023789Y011740D01*
+X023845Y011725D01*
+X023986Y011725D01*
+X023986Y012278D01*
+X023987Y012278D01*
+X024154Y012278D01*
+X024486Y012278D01*
+X024486Y012278D01*
+X024154Y012278D01*
+X023987Y012278D01*
+X023987Y012278D01*
+X023987Y011725D01*
+X024128Y011725D01*
+X024184Y011740D01*
+X024234Y011769D01*
+X024236Y011771D01*
+X024239Y011769D01*
+X024289Y011740D01*
+X024345Y011725D01*
+X024486Y011725D01*
+X024486Y012278D01*
+X024487Y012278D01*
+X024654Y012278D01*
+X024986Y012278D01*
+X024986Y012278D01*
+X024654Y012278D01*
+X024487Y012278D01*
+X024487Y012278D01*
+X024487Y011725D01*
+X024628Y011725D01*
+X024684Y011740D01*
+X024734Y011769D01*
+X024736Y011771D01*
+X024739Y011769D01*
+X024789Y011740D01*
+X024845Y011725D01*
+X024986Y011725D01*
+X024986Y012278D01*
+X024829Y012435D01*
+X024829Y013057D01*
+X025486Y013046D02*
+X025486Y012713D01*
+X026000Y012199D01*
+X026000Y008372D01*
+X025486Y008522D02*
+X025486Y007685D01*
+X025626Y007546D01*
+X026128Y007044D01*
+X026128Y006561D01*
+X025564Y006464D02*
+X023638Y006464D01*
+X023638Y006226D02*
+X025564Y006226D01*
+X025564Y005987D02*
+X023638Y005987D01*
+X023638Y005971D02*
+X023638Y007447D01*
+X023762Y007571D01*
+X023896Y007627D01*
+X024000Y007730D01*
+X024055Y007864D01*
+X024130Y007939D01*
+X024130Y007999D01*
+X024178Y007999D01*
+X024217Y008038D01*
+X024570Y008038D01*
+X024550Y008018D01*
+X024550Y007467D01*
+X024662Y007356D01*
+X025252Y007356D01*
+X025279Y007382D01*
+X025279Y007290D01*
+X025390Y007178D01*
+X025555Y007178D01*
+X025564Y007169D01*
+X025564Y005971D01*
+X023638Y005971D01*
+X023037Y006561D02*
+X022660Y006561D01*
+X023037Y006561D01*
+X023037Y006561D01*
+X022660Y006464D02*
+X021889Y006464D01*
+X022496Y007418D02*
+X022496Y007418D01*
+X022496Y007657D02*
+X022496Y007657D01*
+X021986Y007853D02*
+X021827Y007693D01*
+X021986Y007853D02*
+X021986Y008522D01*
+X022486Y008522D02*
+X022487Y008522D01*
+X022654Y008522D01*
+X022986Y008522D01*
+X022986Y008521D01*
+X022819Y008521D01*
+X022487Y008521D01*
+X022487Y008522D01*
+X022487Y009075D01*
+X022628Y009075D01*
+X022684Y009060D01*
+X022734Y009031D01*
+X022736Y009028D01*
+X022739Y009031D01*
+X022789Y009060D01*
+X022845Y009075D01*
+X022986Y009075D01*
+X022986Y008522D01*
+X022987Y008522D01*
+X022987Y009075D01*
+X023128Y009075D01*
+X023184Y009060D01*
+X023234Y009031D01*
+X023258Y009007D01*
+X023295Y009045D01*
+X023678Y009045D01*
+X023736Y008986D01*
+X023795Y009045D01*
+X024178Y009045D01*
+X024236Y008986D01*
+X024295Y009045D01*
+X024678Y009045D01*
+X024700Y009022D01*
+X024730Y009022D01*
+X024739Y009031D01*
+X024789Y009060D01*
+X024845Y009075D01*
+X024986Y009075D01*
+X024986Y009022D01*
+X024987Y009022D01*
+X024987Y009075D01*
+X025128Y009075D01*
+X025184Y009060D01*
+X025234Y009031D01*
+X025243Y009022D01*
+X025272Y009022D01*
+X025295Y009045D01*
+X025678Y009045D01*
+X025690Y009032D01*
+X025690Y011768D01*
+X025678Y011755D01*
+X025295Y011755D01*
+X025258Y011793D01*
+X025234Y011769D01*
+X025184Y011740D01*
+X025128Y011725D01*
+X024987Y011725D01*
+X024987Y012278D01*
+X024986Y012278D01*
+X024986Y012189D02*
+X024987Y012189D01*
+X024986Y011951D02*
+X024987Y011951D01*
+X024487Y011951D02*
+X024486Y011951D01*
+X023987Y011951D02*
+X023986Y011951D01*
+X023986Y012189D02*
+X023987Y012189D01*
+X024486Y012189D02*
+X024487Y012189D01*
+X023487Y012189D02*
+X023486Y012189D01*
+X023486Y011951D02*
+X023487Y011951D01*
+X021811Y011712D02*
+X025690Y011712D01*
+X025690Y011474D02*
+X021811Y011474D01*
+X021811Y011235D02*
+X025690Y011235D01*
+X025690Y010996D02*
+X021811Y010996D01*
+X021811Y010758D02*
+X025690Y010758D01*
+X025690Y010519D02*
+X021811Y010519D01*
+X021811Y010281D02*
+X025690Y010281D01*
+X025690Y010042D02*
+X021811Y010042D01*
+X021811Y009804D02*
+X025690Y009804D01*
+X025690Y009565D02*
+X021811Y009565D01*
+X021811Y009327D02*
+X025690Y009327D01*
+X025690Y009088D02*
+X021811Y009088D01*
+X022486Y008850D02*
+X022487Y008850D01*
+X022486Y008611D02*
+X022487Y008611D01*
+X022986Y008611D02*
+X022987Y008611D01*
+X022986Y008850D02*
+X022987Y008850D01*
+X024086Y007895D02*
+X024550Y007895D01*
+X024550Y007657D02*
+X023926Y007657D01*
+X023638Y007418D02*
+X024599Y007418D01*
+X024288Y007742D02*
+X024288Y008097D01*
+X024486Y008296D01*
+X024486Y008522D01*
+X024986Y008522D02*
+X024986Y007772D01*
+X024957Y007742D01*
+X025389Y007180D02*
+X023638Y007180D01*
+X023638Y006941D02*
+X025564Y006941D01*
+X025564Y006703D02*
+X023638Y006703D01*
+X025486Y012278D02*
+X025486Y012713D01*
+X025486Y013046D02*
+X025498Y013057D01*
+D41*
+X025360Y000853D02*
+X024376Y000853D01*
+X023392Y000853D01*
+X022408Y000853D01*
+X021423Y000853D01*
+X020931Y000853D01*
+X020439Y000853D01*
+X019455Y000853D01*
+X018471Y000853D01*
+X017486Y000853D01*
+X016502Y000853D01*
+X015518Y000853D01*
+X015075Y000853D02*
+X014435Y000853D01*
+X013353Y000853D01*
+X012270Y000853D01*
+X006364Y000853D01*
+X006266Y001853D02*
+X007250Y001853D01*
+X008234Y001853D01*
+X009219Y001853D01*
+X025360Y000853D02*
+X026345Y000853D01*
+D42*
+X015518Y000853D02*
+X015075Y000853D01*
+X006266Y000853D02*
+X003805Y000853D01*
+X003412Y001246D01*
+D43*
+X003412Y001246D01*
+X004498Y001246D01*
+X004498Y001202D01*
+X004487Y001115D01*
+X004464Y001029D01*
+X004430Y000948D01*
+X004386Y000871D01*
+X004332Y000801D01*
+X004270Y000739D01*
+X004200Y000685D01*
+X004124Y000641D01*
+X004042Y000607D01*
+X003957Y000584D01*
+X003869Y000573D01*
+X003412Y000573D01*
+X003412Y001246D01*
+X003411Y001246D01*
+X002325Y001246D01*
+X002325Y001202D01*
+X002336Y001115D01*
+X002359Y001029D01*
+X002393Y000948D01*
+X002437Y000871D01*
+X002491Y000801D01*
+X002553Y000739D01*
+X002623Y000685D01*
+X002700Y000641D01*
+X002781Y000607D01*
+X002867Y000584D01*
+X002954Y000573D01*
+X003411Y000573D01*
+X003411Y001246D01*
+X003411Y001246D01*
+X002325Y001246D01*
+X002325Y001290D01*
+X002336Y001378D01*
+X002359Y001463D01*
+X002393Y001545D01*
+X002437Y001621D01*
+X002491Y001691D01*
+X002553Y001754D01*
+X002623Y001807D01*
+X002700Y001851D01*
+X002781Y001885D01*
+X002867Y001908D01*
+X002954Y001920D01*
+X003411Y001920D01*
+X003411Y001247D01*
+X003412Y001247D01*
+X003412Y001920D01*
+X003869Y001920D01*
+X003957Y001908D01*
+X004042Y001885D01*
+X004124Y001851D01*
+X004200Y001807D01*
+X004270Y001754D01*
+X004332Y001691D01*
+X004386Y001621D01*
+X004430Y001545D01*
+X004464Y001463D01*
+X004487Y001378D01*
+X004498Y001290D01*
+X004498Y001246D01*
+X003412Y001246D01*
+X003411Y001218D02*
+X003412Y001218D01*
+X003411Y001536D02*
+X003412Y001536D01*
+X003411Y001855D02*
+X003412Y001855D01*
+X004116Y001855D02*
+X004224Y001855D01*
+X000522Y001855D01*
+X002708Y001855D01*
+X002390Y001536D02*
+X000522Y001536D01*
+X004489Y001536D01*
+X004434Y001536D01*
+X004544Y001482D02*
+X004544Y000522D01*
+X000522Y000522D01*
+X000522Y010105D01*
+X004297Y010105D01*
+X006390Y012197D01*
+X006390Y012196D01*
+X006418Y012153D01*
+X006455Y012117D01*
+X006474Y012104D01*
+X006390Y012021D01*
+X006390Y011515D01*
+X006525Y011380D01*
+X007188Y011380D01*
+X007265Y011458D01*
+X007353Y011458D01*
+X007467Y011505D01*
+X007546Y011584D01*
+X007576Y011571D01*
+X007811Y011571D01*
+X007758Y011519D01*
+X007758Y010580D01*
+X007840Y010498D01*
+X007758Y010416D01*
+X007758Y009478D01*
+X007893Y009343D01*
+X009097Y009343D01*
+X009232Y009478D01*
+X009232Y010116D01*
+X009255Y010139D01*
+X009349Y010139D01*
+X009499Y010201D01*
+X009614Y010316D01*
+X009677Y010466D01*
+X009677Y010629D01*
+X009665Y010657D01*
+X009728Y010631D01*
+X009891Y010631D01*
+X009894Y010632D01*
+X009894Y010580D01*
+X009976Y010498D01*
+X009894Y010416D01*
+X009894Y009478D01*
+X009912Y009460D01*
+X009865Y009412D01*
+X009865Y008998D01*
+X009414Y008998D01*
+X009286Y008945D01*
+X009187Y008846D01*
+X009022Y008681D01*
+X009026Y008701D01*
+X009026Y008884D01*
+X008530Y008884D01*
+X008530Y008884D01*
+X009026Y008884D01*
+X009026Y009067D01*
+X009016Y009117D01*
+X008996Y009165D01*
+X008968Y009207D01*
+X008932Y009244D01*
+X008889Y009272D01*
+X008842Y009292D01*
+X008792Y009302D01*
+X008530Y009302D01*
+X008530Y008884D01*
+X008530Y008884D01*
+X008530Y009302D01*
+X008268Y009302D01*
+X008218Y009292D01*
+X008170Y009272D01*
+X008128Y009244D01*
+X008092Y009207D01*
+X008063Y009165D01*
+X008044Y009117D01*
+X008034Y009067D01*
+X008034Y008884D01*
+X008034Y008701D01*
+X008044Y008651D01*
+X008063Y008603D01*
+X008092Y008561D01*
+X008127Y008525D01*
+X007824Y008525D01*
+X007696Y008472D01*
+X007597Y008374D01*
+X007597Y008373D01*
+X007087Y008373D01*
+X006981Y008268D01*
+X006954Y008309D01*
+X006918Y008345D01*
+X006875Y008374D01*
+X006828Y008393D01*
+X006778Y008403D01*
+X006512Y008403D01*
+X006246Y008403D01*
+X006196Y008393D01*
+X006149Y008374D01*
+X006106Y008345D01*
+X006070Y008309D01*
+X006043Y008268D01*
+X005937Y008373D01*
+X005267Y008373D01*
+X005132Y008239D01*
+X005132Y007168D01*
+X005210Y007090D01*
+X004578Y006458D01*
+X004437Y006400D01*
+X004311Y006274D01*
+X004243Y006109D01*
+X004243Y005966D01*
+X003755Y005966D01*
+X003255Y005966D01*
+X002825Y005966D01*
+X002824Y005967D01*
+X002777Y005986D01*
+X002727Y005996D01*
+X002526Y005996D01*
+X002526Y005996D01*
+X002526Y005134D01*
+X002526Y004272D01*
+X002583Y004272D01*
+X002570Y004239D01*
+X002570Y004061D01*
+X002638Y003896D01*
+X002733Y003801D01*
+X002634Y003760D01*
+X002478Y003605D01*
+X001898Y003605D01*
+X001905Y003612D01*
+X001962Y003751D01*
+X002123Y003751D01*
+X002288Y003819D01*
+X002414Y003945D01*
+X002482Y004110D01*
+X002482Y004272D01*
+X002526Y004272D01*
+X002526Y005134D01*
+X002526Y005134D01*
+X002526Y005134D01*
+X002526Y005996D01*
+X002325Y005996D01*
+X002275Y005986D01*
+X002227Y005967D01*
+X002227Y005966D01*
+X001796Y005966D01*
+X001296Y005966D01*
+X000755Y005966D01*
+X000621Y005832D01*
+X000621Y004436D01*
+X000636Y004421D01*
+X000636Y003808D01*
+X000636Y003653D01*
+X000695Y003510D01*
+X000857Y003348D01*
+X000798Y003206D01*
+X000798Y003027D01*
+X000866Y002863D01*
+X000992Y002736D01*
+X001157Y002668D01*
+X001335Y002668D01*
+X001476Y002726D01*
+X001619Y002726D01*
+X001762Y002786D01*
+X001802Y002825D01*
+X002478Y002825D01*
+X002634Y002669D01*
+X002870Y002571D01*
+X003953Y002571D01*
+X004189Y002669D01*
+X004203Y002683D01*
+X004203Y002259D01*
+X004203Y002104D01*
+X004203Y002062D01*
+X004203Y001907D01*
+X004262Y001764D01*
+X004646Y001380D01*
+X004756Y001270D01*
+X004899Y001211D01*
+X005037Y001211D01*
+X005012Y001173D01*
+X004992Y001125D01*
+X004982Y001075D01*
+X004982Y000892D01*
+X005478Y000892D01*
+X005478Y000892D01*
+X004982Y000892D01*
+X004982Y000709D01*
+X004992Y000659D01*
+X005012Y000611D01*
+X005040Y000569D01*
+X005077Y000533D01*
+X005092Y000522D01*
+X000522Y000522D01*
+X000522Y010105D01*
+X004544Y010105D01*
+X004544Y006444D01*
+X004437Y006400D01*
+X004311Y006274D01*
+X004243Y006109D01*
+X004243Y005966D01*
+X003755Y005966D01*
+X003255Y005966D01*
+X002755Y005966D01*
+X002621Y005832D01*
+X002621Y004436D01*
+X002636Y004421D01*
+X002636Y004398D01*
+X002570Y004239D01*
+X002570Y004061D01*
+X002638Y003896D01*
+X002733Y003801D01*
+X002634Y003760D01*
+X002478Y003605D01*
+X001898Y003605D01*
+X001905Y003612D01*
+X001962Y003751D01*
+X002123Y003751D01*
+X002288Y003819D01*
+X002414Y003945D01*
+X002482Y004110D01*
+X002482Y004288D01*
+X002424Y004428D01*
+X002424Y004429D01*
+X002431Y004436D01*
+X002431Y005832D01*
+X002296Y005966D01*
+X001796Y005966D01*
+X001296Y005966D01*
+X000755Y005966D01*
+X000621Y005832D01*
+X000621Y004436D01*
+X000636Y004421D01*
+X000636Y003808D01*
+X000636Y003653D01*
+X000695Y003510D01*
+X000857Y003348D01*
+X000798Y003206D01*
+X000798Y003027D01*
+X000866Y002863D01*
+X000992Y002736D01*
+X001157Y002668D01*
+X001335Y002668D01*
+X001476Y002726D01*
+X001619Y002726D01*
+X001762Y002786D01*
+X001801Y002825D01*
+X002478Y002825D01*
+X002634Y002669D01*
+X002870Y002571D01*
+X003953Y002571D01*
+X004189Y002669D01*
+X004203Y002683D01*
+X004203Y002259D01*
+X004203Y002104D01*
+X004203Y002062D01*
+X004203Y001907D01*
+X004262Y001764D01*
+X004544Y001482D01*
+X004544Y001218D02*
+X000522Y001218D01*
+X002325Y001218D01*
+X002421Y000899D02*
+X000522Y000899D01*
+X004544Y000899D01*
+X004402Y000899D02*
+X004982Y000899D01*
+X004882Y001218D02*
+X004498Y001218D01*
+X004977Y001601D02*
+X005479Y001601D01*
+X005731Y001853D01*
+X006266Y001853D01*
+X005233Y002211D02*
+X005203Y002181D01*
+X004593Y002181D01*
+X004593Y003855D01*
+X004026Y004421D01*
+X004026Y005134D01*
+X004691Y005799D01*
+X004691Y006020D01*
+X005602Y006931D01*
+X005602Y007703D01*
+X005132Y007589D02*
+X003839Y007589D01*
+X003839Y007850D02*
+X002686Y007850D01*
+X002686Y008170D01*
+X003839Y008170D01*
+X003839Y009717D01*
+X003829Y009767D01*
+X003809Y009814D01*
+X003781Y009857D01*
+X003745Y009893D01*
+X003702Y009922D01*
+X003655Y009941D01*
+X003605Y009951D01*
+X002686Y009951D01*
+X002686Y008170D01*
+X002366Y008170D01*
+X002366Y009951D01*
+X001447Y009951D01*
+X001397Y009941D01*
+X001349Y009922D01*
+X001307Y009893D01*
+X001271Y009857D01*
+X001242Y009814D01*
+X001223Y009767D01*
+X001213Y009717D01*
+X001213Y008170D01*
+X002366Y008170D01*
+X002366Y007850D01*
+X002686Y007850D01*
+X002686Y006069D01*
+X003605Y006069D01*
+X003655Y006079D01*
+X003702Y006099D01*
+X003745Y006127D01*
+X003781Y006163D01*
+X003809Y006206D01*
+X003829Y006253D01*
+X003839Y006303D01*
+X003839Y007850D01*
+X003839Y008226D02*
+X005132Y008226D01*
+X005132Y007907D02*
+X002686Y007907D01*
+X002686Y007589D02*
+X002366Y007589D01*
+X002366Y007850D02*
+X002366Y006069D01*
+X001447Y006069D01*
+X001397Y006079D01*
+X001349Y006099D01*
+X001307Y006127D01*
+X001271Y006163D01*
+X001242Y006206D01*
+X001223Y006253D01*
+X001213Y006303D01*
+X001213Y007850D01*
+X002366Y007850D01*
+X002366Y007907D02*
+X000522Y007907D01*
+X004544Y007907D01*
+X004544Y007589D02*
+X000522Y007589D01*
+X001213Y007589D01*
+X001213Y007270D02*
+X000522Y007270D01*
+X004544Y007270D01*
+X004544Y006951D02*
+X000522Y006951D01*
+X001213Y006951D01*
+X001213Y006633D02*
+X000522Y006633D01*
+X004544Y006633D01*
+X004753Y006633D02*
+X003839Y006633D01*
+X003839Y006314D02*
+X004352Y006314D01*
+X000522Y006314D01*
+X001213Y006314D01*
+X000522Y005996D02*
+X002322Y005996D01*
+X002366Y006314D02*
+X002686Y006314D01*
+X002686Y006633D02*
+X002366Y006633D01*
+X002366Y006951D02*
+X002686Y006951D01*
+X002686Y007270D02*
+X002366Y007270D01*
+X002366Y008226D02*
+X002686Y008226D01*
+X002686Y008544D02*
+X002366Y008544D01*
+X002366Y008863D02*
+X002686Y008863D01*
+X002686Y009181D02*
+X002366Y009181D01*
+X002366Y009500D02*
+X002686Y009500D01*
+X002686Y009818D02*
+X002366Y009818D01*
+X001245Y009818D02*
+X000522Y009818D01*
+X004544Y009818D01*
+X004494Y010055D02*
+X005479Y011040D01*
+X005285Y011093D02*
+X007758Y011093D01*
+X007758Y010774D02*
+X007391Y010774D01*
+X007386Y010779D02*
+X007344Y010807D01*
+X007297Y010827D01*
+X007246Y010837D01*
+X006569Y010837D01*
+X006569Y010200D01*
+X007481Y010200D01*
+X007481Y010602D01*
+X007471Y010652D01*
+X007451Y010700D01*
+X007423Y010742D01*
+X007386Y010779D01*
+X007481Y010455D02*
+X007798Y010455D01*
+X007758Y010137D02*
+X006569Y010137D01*
+X006569Y010087D02*
+X006569Y010200D01*
+X006455Y010200D01*
+X006455Y010087D01*
+X005543Y010087D01*
+X005543Y009685D01*
+X005553Y009635D01*
+X005573Y009587D01*
+X005601Y009545D01*
+X005638Y009509D01*
+X005680Y009480D01*
+X005728Y009460D01*
+X005778Y009450D01*
+X006455Y009450D01*
+X006455Y010087D01*
+X006569Y010087D01*
+X007481Y010087D01*
+X007481Y009685D01*
+X007471Y009635D01*
+X007451Y009587D01*
+X007423Y009545D01*
+X007386Y009509D01*
+X007344Y009480D01*
+X007297Y009460D01*
+X007246Y009450D01*
+X006569Y009450D01*
+X006569Y010087D01*
+X006455Y010137D02*
+X004330Y010137D01*
+X004648Y010455D02*
+X005543Y010455D01*
+X005543Y010602D02*
+X005543Y010200D01*
+X006455Y010200D01*
+X006455Y010837D01*
+X005778Y010837D01*
+X005728Y010827D01*
+X005680Y010807D01*
+X005638Y010779D01*
+X005601Y010742D01*
+X005573Y010700D01*
+X005553Y010652D01*
+X005543Y010602D01*
+X005633Y010774D02*
+X004967Y010774D01*
+X004494Y011433D02*
+X003025Y011433D01*
+X003025Y011900D01*
+X002179Y011900D01*
+X002179Y012033D01*
+X003025Y012033D01*
+X003025Y012645D01*
+X003015Y012695D01*
+X002996Y012743D01*
+X002967Y012785D01*
+X002931Y012821D01*
+X002888Y012850D01*
+X002841Y012869D01*
+X002791Y012879D01*
+X002179Y012879D01*
+X002179Y012033D01*
+X002046Y012033D01*
+X002046Y011900D01*
+X001200Y011900D01*
+X001200Y011433D01*
+X000522Y011433D01*
+X000522Y017719D01*
+X004366Y017719D01*
+X004366Y017410D01*
+X005322Y017410D01*
+X005322Y017248D01*
+X004366Y017248D01*
+X004366Y016821D01*
+X004376Y016771D01*
+X004396Y016724D01*
+X004424Y016681D01*
+X004460Y016645D01*
+X004503Y016616D01*
+X004550Y016597D01*
+X004601Y016587D01*
+X005323Y016587D01*
+X005323Y017248D01*
+X005485Y017248D01*
+X005485Y017410D01*
+X006441Y017410D01*
+X006441Y017719D01*
+X006512Y017719D01*
+X006512Y013451D01*
+X006391Y013330D01*
+X005485Y013330D01*
+X005485Y012669D01*
+X005730Y012669D01*
+X004494Y011433D01*
+X004791Y011730D02*
+X003025Y011730D01*
+X003025Y012048D02*
+X005109Y012048D01*
+X005428Y012367D02*
+X003025Y012367D01*
+X003017Y012685D02*
+X004536Y012685D01*
+X004550Y012679D02*
+X004601Y012669D01*
+X005323Y012669D01*
+X005323Y013330D01*
+X005485Y013330D01*
+X005485Y013493D01*
+X005323Y013493D01*
+X005323Y014154D01*
+X004601Y014154D01*
+X004550Y014144D01*
+X004503Y014124D01*
+X004460Y014096D01*
+X004424Y014060D01*
+X004396Y014017D01*
+X004376Y013970D01*
+X004366Y013920D01*
+X004366Y013493D01*
+X005322Y013493D01*
+X005322Y013330D01*
+X004366Y013330D01*
+X004366Y012904D01*
+X004376Y012854D01*
+X004396Y012806D01*
+X004424Y012764D01*
+X004460Y012727D01*
+X004503Y012699D01*
+X004550Y012679D01*
+X004366Y013004D02*
+X000522Y013004D01*
+X000522Y013322D02*
+X001300Y013322D01*
+X001314Y013313D02*
+X001361Y013294D01*
+X001412Y013284D01*
+X001738Y013284D01*
+X001738Y013844D01*
+X001739Y013844D01*
+X001739Y013845D01*
+X002299Y013845D01*
+X002299Y014171D01*
+X002289Y014222D01*
+X002270Y014269D01*
+X002241Y014312D01*
+X002205Y014348D01*
+X002193Y014356D01*
+X002269Y014433D01*
+X002269Y015225D01*
+X002135Y015360D01*
+X001342Y015360D01*
+X001207Y015225D01*
+X001207Y014433D01*
+X001284Y014356D01*
+X001272Y014348D01*
+X001235Y014312D01*
+X001207Y014269D01*
+X001187Y014222D01*
+X001177Y014171D01*
+X001177Y013845D01*
+X001738Y013845D01*
+X001738Y013844D01*
+X001177Y013844D01*
+X001177Y013518D01*
+X001187Y013468D01*
+X001207Y013420D01*
+X001235Y013378D01*
+X001272Y013342D01*
+X001314Y013313D01*
+X001177Y013641D02*
+X000522Y013641D01*
+X000522Y013959D02*
+X001177Y013959D01*
+X001213Y014278D02*
+X000522Y014278D01*
+X000522Y014596D02*
+X001207Y014596D01*
+X001207Y014915D02*
+X000522Y014915D01*
+X000522Y015234D02*
+X001216Y015234D01*
+X001384Y015804D02*
+X001336Y015824D01*
+X001294Y015852D01*
+X001258Y015888D01*
+X001229Y015931D01*
+X001210Y015978D01*
+X001200Y016029D01*
+X001200Y016640D01*
+X002046Y016640D01*
+X002179Y016640D01*
+X002179Y015794D01*
+X002791Y015794D01*
+X002841Y015804D01*
+X002888Y015824D01*
+X002931Y015852D01*
+X002967Y015888D01*
+X002996Y015931D01*
+X003015Y015978D01*
+X003025Y016029D01*
+X003025Y016640D01*
+X002179Y016640D01*
+X002179Y016773D01*
+X003025Y016773D01*
+X003025Y017385D01*
+X003015Y017436D01*
+X002996Y017483D01*
+X002967Y017525D01*
+X002931Y017562D01*
+X002888Y017590D01*
+X002841Y017610D01*
+X002791Y017620D01*
+X002179Y017620D01*
+X002179Y016774D01*
+X002046Y016774D01*
+X002046Y017620D01*
+X001434Y017620D01*
+X001384Y017610D01*
+X001336Y017590D01*
+X001294Y017562D01*
+X001258Y017525D01*
+X001229Y017483D01*
+X001210Y017436D01*
+X001200Y017385D01*
+X001200Y016773D01*
+X002046Y016773D01*
+X002046Y016640D01*
+X002046Y015794D01*
+X001434Y015794D01*
+X001384Y015804D01*
+X001275Y015871D02*
+X000522Y015871D01*
+X000522Y016189D02*
+X001200Y016189D01*
+X001200Y016508D02*
+X000522Y016508D01*
+X000522Y016826D02*
+X001200Y016826D01*
+X001200Y017145D02*
+X000522Y017145D01*
+X000522Y017463D02*
+X001221Y017463D01*
+X002046Y017463D02*
+X002179Y017463D01*
+X002179Y017145D02*
+X002046Y017145D01*
+X002046Y016826D02*
+X002179Y016826D01*
+X002179Y016508D02*
+X002046Y016508D01*
+X002046Y016189D02*
+X002179Y016189D01*
+X002179Y015871D02*
+X002046Y015871D01*
+X002261Y015234D02*
+X002495Y015234D01*
+X002487Y015225D02*
+X002487Y014433D01*
+X002583Y014337D01*
+X002487Y014241D01*
+X002487Y013448D01*
+X002622Y013314D01*
+X003414Y013314D01*
+X003549Y013448D01*
+X003549Y014241D01*
+X003453Y014337D01*
+X003549Y014433D01*
+X003549Y015225D01*
+X003414Y015360D01*
+X002622Y015360D01*
+X002487Y015225D01*
+X002487Y014915D02*
+X002269Y014915D01*
+X002269Y014596D02*
+X002487Y014596D01*
+X002524Y014278D02*
+X002264Y014278D01*
+X002299Y013959D02*
+X002487Y013959D01*
+X002299Y013844D02*
+X001739Y013844D01*
+X001739Y013284D01*
+X002065Y013284D01*
+X002115Y013294D01*
+X002163Y013313D01*
+X002205Y013342D01*
+X002241Y013378D01*
+X002270Y013420D01*
+X002289Y013468D01*
+X002299Y013518D01*
+X002299Y013844D01*
+X002299Y013641D02*
+X002487Y013641D01*
+X002613Y013322D02*
+X002176Y013322D01*
+X001739Y013322D02*
+X001738Y013322D01*
+X001738Y013641D02*
+X001739Y013641D01*
+X001434Y012879D02*
+X001384Y012869D01*
+X001336Y012850D01*
+X001294Y012821D01*
+X001258Y012785D01*
+X001229Y012743D01*
+X001210Y012695D01*
+X001200Y012645D01*
+X001200Y012033D01*
+X002046Y012033D01*
+X002046Y012879D01*
+X001434Y012879D01*
+X001208Y012685D02*
+X000522Y012685D01*
+X000522Y012367D02*
+X001200Y012367D01*
+X001200Y012048D02*
+X000522Y012048D01*
+X000522Y011730D02*
+X001200Y011730D01*
+X002046Y012048D02*
+X002179Y012048D01*
+X002179Y012367D02*
+X002046Y012367D01*
+X002046Y012685D02*
+X002179Y012685D01*
+X003423Y013322D02*
+X004366Y013322D01*
+X004366Y013641D02*
+X003549Y013641D01*
+X003549Y013959D02*
+X004374Y013959D01*
+X005323Y013959D02*
+X005485Y013959D01*
+X005485Y014154D02*
+X005485Y013493D01*
+X006441Y013493D01*
+X006441Y013920D01*
+X006431Y013970D01*
+X006412Y014017D01*
+X006383Y014060D01*
+X006347Y014096D01*
+X006304Y014124D01*
+X006257Y014144D01*
+X006207Y014154D01*
+X005485Y014154D01*
+X005485Y013641D02*
+X005323Y013641D01*
+X005323Y013322D02*
+X005485Y013322D01*
+X005485Y013004D02*
+X005323Y013004D01*
+X005323Y012685D02*
+X005485Y012685D01*
+X006168Y011975D02*
+X006670Y012477D01*
+X006856Y012477D01*
+X006856Y012476D01*
+X006669Y012476D01*
+X006670Y012477D01*
+X006857Y012664D01*
+X006857Y012477D01*
+X006856Y012477D01*
+X006856Y012663D01*
+X006857Y012664D01*
+X007103Y012910D01*
+X007118Y012894D02*
+X007087Y012894D01*
+X007742Y013549D01*
+X007742Y017719D01*
+X019969Y017719D01*
+X019969Y017410D01*
+X020925Y017410D01*
+X020925Y017248D01*
+X019969Y017248D01*
+X019969Y017067D01*
+X019581Y017454D01*
+X019467Y017501D01*
+X019344Y017501D01*
+X018565Y017501D01*
+X018544Y017522D01*
+X018401Y017581D01*
+X018302Y017581D01*
+X018147Y017581D01*
+X009141Y017581D01*
+X008998Y017522D01*
+X008888Y017412D01*
+X008396Y016920D01*
+X008337Y016777D01*
+X008337Y016621D01*
+X008337Y013737D01*
+X008331Y013732D01*
+X008269Y013582D01*
+X008269Y013419D01*
+X008331Y013269D01*
+X008446Y013154D01*
+X008596Y013091D01*
+X008759Y013091D01*
+X008909Y013154D01*
+X009024Y013269D01*
+X009027Y013277D01*
+X009027Y013246D01*
+X009071Y013139D01*
+X009186Y013024D01*
+X009127Y012999D01*
+X008874Y012747D01*
+X008814Y012771D01*
+X008576Y012771D01*
+X008355Y012680D01*
+X008195Y012520D01*
+X008035Y012680D01*
+X007814Y012771D01*
+X007576Y012771D01*
+X007355Y012680D01*
+X007350Y012675D01*
+X007343Y012710D01*
+X007323Y012757D01*
+X007295Y012800D01*
+X007258Y012836D01*
+X007216Y012864D01*
+X007169Y012884D01*
+X007118Y012894D01*
+X007197Y013004D02*
+X009138Y013004D01*
+X009607Y013424D02*
+X009607Y015152D01*
+X009898Y015442D01*
+X009922Y015417D01*
+X010072Y015355D01*
+X010235Y015355D01*
+X010385Y015417D01*
+X010500Y015532D01*
+X010562Y015683D01*
+X010562Y015845D01*
+X010500Y015996D01*
+X010385Y016111D01*
+X010235Y016173D01*
+X010072Y016173D01*
+X009922Y016111D01*
+X009866Y016054D01*
+X009752Y016054D01*
+X009645Y016010D01*
+X009153Y015518D01*
+X009117Y015481D01*
+X009117Y016537D01*
+X009380Y016801D01*
+X010686Y016801D01*
+X010686Y016375D01*
+X010691Y016370D01*
+X010686Y016365D01*
+X010686Y015875D01*
+X010691Y015870D01*
+X010686Y015865D01*
+X010686Y015375D01*
+X010691Y015370D01*
+X010686Y015365D01*
+X010686Y014875D01*
+X010691Y014870D01*
+X010686Y014865D01*
+X010686Y014375D01*
+X010691Y014370D01*
+X010686Y014365D01*
+X010686Y013875D01*
+X010820Y013741D01*
+X012666Y013741D01*
+X012630Y013654D01*
+X012630Y011912D01*
+X012624Y011918D01*
+X012614Y011942D01*
+X011302Y013254D01*
+X011196Y013298D01*
+X011080Y013298D01*
+X009733Y013298D01*
+X009607Y013424D01*
+X009708Y013322D02*
+X012630Y013322D01*
+X012630Y013004D02*
+X011552Y013004D01*
+X011871Y012685D02*
+X012630Y012685D01*
+X012630Y012367D02*
+X012190Y012367D01*
+X012508Y012048D02*
+X012630Y012048D01*
+X012006Y011730D02*
+X011619Y011730D01*
+X011616Y011727D02*
+X011731Y011842D01*
+X011779Y011957D01*
+X012204Y011532D01*
+X012228Y011522D01*
+X012285Y011465D01*
+X012285Y011388D01*
+X012211Y011388D01*
+X012211Y010892D01*
+X012211Y010892D01*
+X012211Y010396D01*
+X012285Y010396D01*
+X012285Y010259D01*
+X012285Y010147D01*
+X012328Y010044D01*
+X012574Y009798D01*
+X012653Y009720D01*
+X012756Y009677D01*
+X012759Y009677D01*
+X012826Y009610D01*
+X012976Y009548D01*
+X013091Y009548D01*
+X013091Y009531D01*
+X013154Y009381D01*
+X013269Y009266D01*
+X013419Y009204D01*
+X013582Y009204D01*
+X013732Y009266D01*
+X013847Y009381D01*
+X013909Y009531D01*
+X013909Y009659D01*
+X013913Y009668D01*
+X013940Y009668D01*
+X014057Y009785D01*
+X014057Y009335D01*
+X013526Y008803D01*
+X013502Y008860D01*
+X013387Y008975D01*
+X013237Y009037D01*
+X013074Y009037D01*
+X012933Y008978D01*
+X012010Y008978D01*
+X012018Y008986D01*
+X012018Y009191D01*
+X012035Y009208D01*
+X012114Y009286D01*
+X012156Y009389D01*
+X012156Y009462D01*
+X012223Y009529D01*
+X012285Y009679D01*
+X012285Y009841D01*
+X012223Y009992D01*
+X012108Y010107D01*
+X011958Y010169D01*
+X011795Y010169D01*
+X011645Y010107D01*
+X011530Y009992D01*
+X011467Y009841D01*
+X011467Y009679D01*
+X011522Y009547D01*
+X011377Y009547D01*
+X011368Y009538D01*
+X011368Y010416D01*
+X011286Y010498D01*
+X011368Y010580D01*
+X011368Y011519D01*
+X011259Y011628D01*
+X011267Y011636D01*
+X011290Y011670D01*
+X011303Y011664D01*
+X011465Y011664D01*
+X011616Y011727D01*
+X011368Y011411D02*
+X012285Y011411D01*
+X012211Y011388D02*
+X012028Y011388D01*
+X011978Y011378D01*
+X011930Y011359D01*
+X011888Y011330D01*
+X011851Y011294D01*
+X011823Y011251D01*
+X011803Y011204D01*
+X011793Y011154D01*
+X011793Y010892D01*
+X012210Y010892D01*
+X012210Y010892D01*
+X011793Y010892D01*
+X011793Y010630D01*
+X011803Y010580D01*
+X011823Y010533D01*
+X011851Y010490D01*
+X011888Y010454D01*
+X011930Y010425D01*
+X011978Y010406D01*
+X012028Y010396D01*
+X012211Y010396D01*
+X012211Y010892D01*
+X012211Y010892D01*
+X012211Y011388D01*
+X012211Y011093D02*
+X012211Y011093D01*
+X012211Y010774D02*
+X012211Y010774D01*
+X011793Y010774D02*
+X011368Y010774D01*
+X011368Y011093D02*
+X011793Y011093D01*
+X011886Y010455D02*
+X011329Y010455D01*
+X011368Y010137D02*
+X011718Y010137D01*
+X012035Y010137D02*
+X012289Y010137D01*
+X012285Y009818D02*
+X012554Y009818D01*
+X012194Y009500D02*
+X013104Y009500D01*
+X013499Y008863D02*
+X013585Y008863D01*
+X013903Y009181D02*
+X012018Y009181D01*
+X011467Y009818D02*
+X011368Y009818D01*
+X012211Y010455D02*
+X012211Y010455D01*
+X013896Y009500D02*
+X014057Y009500D01*
+X015355Y009993D02*
+X015355Y010481D01*
+X015929Y011055D01*
+X016417Y011055D01*
+X015355Y009993D01*
+X015355Y010137D02*
+X015499Y010137D01*
+X015355Y010455D02*
+X015817Y010455D01*
+X015648Y010774D02*
+X016136Y010774D01*
+X016628Y011812D02*
+X015610Y011812D01*
+X015584Y011801D01*
+X015701Y011918D01*
+X015769Y012082D01*
+X015769Y012261D01*
+X015701Y012425D01*
+X015614Y012512D01*
+X015637Y012535D01*
+X016194Y013091D01*
+X016288Y013091D01*
+X016419Y013146D01*
+X016419Y012263D01*
+X016462Y012161D01*
+X016487Y012135D01*
+X016487Y012041D01*
+X016549Y011891D01*
+X016628Y011812D01*
+X016487Y012048D02*
+X015755Y012048D01*
+X015725Y012367D02*
+X016419Y012367D01*
+X016419Y012685D02*
+X015788Y012685D01*
+X016106Y013004D02*
+X016419Y013004D01*
+X015798Y013487D02*
+X015695Y013384D01*
+X015730Y013468D01*
+X015730Y013631D01*
+X015668Y013781D01*
+X015649Y013800D01*
+X015724Y013875D01*
+X015724Y014340D01*
+X016054Y014340D01*
+X016419Y013975D01*
+X016419Y013855D01*
+X016288Y013909D01*
+X016126Y013909D01*
+X015975Y013847D01*
+X015860Y013732D01*
+X015798Y013582D01*
+X015798Y013487D01*
+X015823Y013641D02*
+X015726Y013641D01*
+X015724Y013959D02*
+X016419Y013959D01*
+X016116Y014278D02*
+X015724Y014278D01*
+X016733Y015142D02*
+X016733Y015967D01*
+X016690Y016070D01*
+X016682Y016079D01*
+X016765Y016044D01*
+X016928Y016044D01*
+X017078Y016106D01*
+X017193Y016221D01*
+X017255Y016372D01*
+X017255Y016534D01*
+X017193Y016684D01*
+X017078Y016799D01*
+X017074Y016801D01*
+X017279Y016801D01*
+X017279Y016667D01*
+X017341Y016517D01*
+X017456Y016402D01*
+X017469Y016396D01*
+X017103Y016031D01*
+X017058Y016012D01*
+X016943Y015897D01*
+X016881Y015747D01*
+X016881Y015584D01*
+X016943Y015434D01*
+X017058Y015319D01*
+X017208Y015257D01*
+X017371Y015257D01*
+X017521Y015319D01*
+X017636Y015434D01*
+X017655Y015479D01*
+X018555Y016380D01*
+X018615Y016523D01*
+X018615Y016678D01*
+X018615Y016881D01*
+X019277Y016881D01*
+X019489Y016669D01*
+X019489Y013070D01*
+X019489Y012946D01*
+X019537Y012832D01*
+X020043Y012326D01*
+X019912Y012272D01*
+X019846Y012205D01*
+X017887Y012205D01*
+X017816Y012205D01*
+X017816Y013999D01*
+X017773Y014102D01*
+X017694Y014180D01*
+X016733Y015142D01*
+X016733Y015234D02*
+X019489Y015234D01*
+X019489Y015552D02*
+X017728Y015552D01*
+X018046Y015871D02*
+X019489Y015871D01*
+X019489Y016189D02*
+X018365Y016189D01*
+X018608Y016508D02*
+X019489Y016508D01*
+X019332Y016826D02*
+X018615Y016826D01*
+X018225Y016601D02*
+X018225Y017191D01*
+X018274Y017191D01*
+X018323Y017191D01*
+X018225Y017191D02*
+X009219Y017191D01*
+X008727Y016699D01*
+X008727Y013549D01*
+X008677Y013500D01*
+X008293Y013641D02*
+X007742Y013641D01*
+X007742Y013959D02*
+X008337Y013959D01*
+X008185Y013746D02*
+X008166Y013727D01*
+X008185Y013746D02*
+X008185Y016994D01*
+X008874Y017683D01*
+X018618Y017683D01*
+X020652Y017683D01*
+X020963Y017372D01*
+X020925Y017248D02*
+X021087Y017248D01*
+X021087Y016587D01*
+X021809Y016587D01*
+X021860Y016597D01*
+X021907Y016616D01*
+X021949Y016645D01*
+X021986Y016681D01*
+X022014Y016724D01*
+X022034Y016771D01*
+X022044Y016821D01*
+X022044Y017248D01*
+X021088Y017248D01*
+X021088Y017410D01*
+X022044Y017410D01*
+X022044Y017719D01*
+X022415Y017719D01*
+X022415Y017359D01*
+X022925Y017359D01*
+X022925Y017358D01*
+X022926Y017358D01*
+X022926Y017359D01*
+X023435Y017359D01*
+X023925Y017359D01*
+X023925Y017358D01*
+X023926Y017358D01*
+X023926Y017359D01*
+X024415Y017359D01*
+X024925Y017359D01*
+X024925Y017358D01*
+X024926Y017358D01*
+X024926Y017359D01*
+X025415Y017359D01*
+X025925Y017359D01*
+X025925Y017358D01*
+X025926Y017358D01*
+X025926Y017359D01*
+X026435Y017359D01*
+X026435Y017719D01*
+X026675Y017719D01*
+X026675Y008431D01*
+X026388Y008431D01*
+X026388Y008645D01*
+X026350Y008682D01*
+X026350Y012129D01*
+X026350Y012269D01*
+X026297Y012397D01*
+X025937Y012757D01*
+X025945Y012765D01*
+X025945Y013243D01*
+X026271Y013243D01*
+X026405Y013377D01*
+X026405Y014568D01*
+X026271Y014703D01*
+X026205Y014703D01*
+X026205Y015145D01*
+X026248Y015188D01*
+X026311Y015338D01*
+X026311Y015501D01*
+X026248Y015651D01*
+X026133Y015766D01*
+X025983Y015828D01*
+X025820Y015828D01*
+X025670Y015766D01*
+X025555Y015651D01*
+X025493Y015501D01*
+X025493Y015338D01*
+X025555Y015188D01*
+X025645Y015098D01*
+X025645Y014703D01*
+X025580Y014703D01*
+X025445Y014568D01*
+X025445Y013484D01*
+X025405Y013484D01*
+X025405Y014568D01*
+X025271Y014703D01*
+X025205Y014703D01*
+X025205Y015129D01*
+X025264Y015188D01*
+X025326Y015338D01*
+X025326Y015501D01*
+X025264Y015651D01*
+X025149Y015766D01*
+X024999Y015828D01*
+X024836Y015828D01*
+X024686Y015766D01*
+X024571Y015651D01*
+X024509Y015501D01*
+X024509Y015338D01*
+X024571Y015188D01*
+X024645Y015114D01*
+X024645Y014703D01*
+X024580Y014703D01*
+X024445Y014568D01*
+X024445Y013455D01*
+X024410Y013420D01*
+X024405Y013412D01*
+X024405Y014568D01*
+X024271Y014703D01*
+X024205Y014703D01*
+X024205Y015163D01*
+X024231Y015188D01*
+X024293Y015338D01*
+X024293Y015501D01*
+X024231Y015651D01*
+X024116Y015766D01*
+X023965Y015828D01*
+X023803Y015828D01*
+X023653Y015766D01*
+X023538Y015651D01*
+X023475Y015501D01*
+X023475Y015338D01*
+X023538Y015188D01*
+X023645Y015080D01*
+X023645Y014703D01*
+X023580Y014703D01*
+X023445Y014568D01*
+X023445Y013514D01*
+X023435Y013514D01*
+X023405Y013508D01*
+X023405Y014568D01*
+X023271Y014703D01*
+X023205Y014703D01*
+X023205Y015147D01*
+X023246Y015188D01*
+X023309Y015338D01*
+X023309Y015501D01*
+X023246Y015651D01*
+X023131Y015766D01*
+X022981Y015828D01*
+X022819Y015828D01*
+X022668Y015766D01*
+X022553Y015651D01*
+X022491Y015501D01*
+X022491Y015338D01*
+X022553Y015188D01*
+X022645Y015096D01*
+X022645Y014703D01*
+X022580Y014703D01*
+X022445Y014568D01*
+X022445Y013456D01*
+X022366Y013536D01*
+X022202Y013604D01*
+X022044Y013604D01*
+X022044Y013920D01*
+X022034Y013970D01*
+X022014Y014017D01*
+X021986Y014060D01*
+X021949Y014096D01*
+X021907Y014124D01*
+X021860Y014144D01*
+X021809Y014154D01*
+X021087Y014154D01*
+X021087Y013493D01*
+X020925Y013493D01*
+X020925Y014154D01*
+X020203Y014154D01*
+X020153Y014144D01*
+X020109Y014126D01*
+X020109Y016615D01*
+X020153Y016597D01*
+X020203Y016587D01*
+X020925Y016587D01*
+X020925Y017248D01*
+X020925Y017145D02*
+X021087Y017145D01*
+X021087Y016826D02*
+X020925Y016826D01*
+X020109Y016508D02*
+X026675Y016508D01*
+X026675Y016826D02*
+X026434Y016826D01*
+X026435Y016833D02*
+X026435Y017358D01*
+X025926Y017358D01*
+X025926Y016599D01*
+X026201Y016599D01*
+X026251Y016609D01*
+X026299Y016628D01*
+X026341Y016657D01*
+X026377Y016693D01*
+X026406Y016735D01*
+X026425Y016783D01*
+X026435Y016833D01*
+X026435Y017145D02*
+X026675Y017145D01*
+X026675Y017463D02*
+X026435Y017463D01*
+X025925Y017359D02*
+X024925Y017359D01*
+X023925Y017359D01*
+X022925Y017359D01*
+X022925Y017358D02*
+X022415Y017358D01*
+X022415Y016833D01*
+X022425Y016783D01*
+X022445Y016735D01*
+X022473Y016693D01*
+X022510Y016657D01*
+X022552Y016628D01*
+X022600Y016609D01*
+X022650Y016599D01*
+X022925Y016599D01*
+X022925Y017358D01*
+X022926Y017358D02*
+X022926Y016599D01*
+X023201Y016599D01*
+X023251Y016609D01*
+X023299Y016628D01*
+X023341Y016657D01*
+X023377Y016693D01*
+X023406Y016735D01*
+X023425Y016783D01*
+X023425Y016783D01*
+X023425Y016783D01*
+X023445Y016735D01*
+X023473Y016693D01*
+X023510Y016657D01*
+X023552Y016628D01*
+X023600Y016609D01*
+X023650Y016599D01*
+X023925Y016599D01*
+X023925Y017358D01*
+X023435Y017358D01*
+X022926Y017358D01*
+X022925Y017145D02*
+X022926Y017145D01*
+X022925Y016826D02*
+X022926Y016826D01*
+X022417Y016826D02*
+X022044Y016826D01*
+X022044Y017145D02*
+X022415Y017145D01*
+X022415Y017463D02*
+X022044Y017463D01*
+X023926Y017358D02*
+X023926Y016599D01*
+X024201Y016599D01*
+X024251Y016609D01*
+X024299Y016628D01*
+X024341Y016657D01*
+X024377Y016693D01*
+X024406Y016735D01*
+X024425Y016783D01*
+X024425Y016783D01*
+X024425Y016783D01*
+X024445Y016735D01*
+X024473Y016693D01*
+X024510Y016657D01*
+X024552Y016628D01*
+X024600Y016609D01*
+X024650Y016599D01*
+X024925Y016599D01*
+X024925Y017358D01*
+X024415Y017358D01*
+X023926Y017358D01*
+X023925Y017145D02*
+X023926Y017145D01*
+X023925Y016826D02*
+X023926Y016826D01*
+X024925Y016826D02*
+X024926Y016826D01*
+X024926Y016599D02*
+X025201Y016599D01*
+X025251Y016609D01*
+X025299Y016628D01*
+X025341Y016657D01*
+X025377Y016693D01*
+X025406Y016735D01*
+X025425Y016783D01*
+X025425Y016783D01*
+X025425Y016783D01*
+X025445Y016735D01*
+X025473Y016693D01*
+X025510Y016657D01*
+X025552Y016628D01*
+X025600Y016609D01*
+X025650Y016599D01*
+X025925Y016599D01*
+X025925Y017358D01*
+X025415Y017358D01*
+X024926Y017358D01*
+X024926Y016599D01*
+X024925Y017145D02*
+X024926Y017145D01*
+X025925Y017145D02*
+X025926Y017145D01*
+X025925Y016826D02*
+X025926Y016826D01*
+X026675Y016189D02*
+X020109Y016189D01*
+X020109Y015871D02*
+X026675Y015871D01*
+X026675Y015552D02*
+X026289Y015552D01*
+X026267Y015234D02*
+X026675Y015234D01*
+X026675Y014915D02*
+X026205Y014915D01*
+X026377Y014596D02*
+X026675Y014596D01*
+X026675Y014278D02*
+X026405Y014278D01*
+X026405Y013959D02*
+X026675Y013959D01*
+X026675Y013641D02*
+X026405Y013641D01*
+X026350Y013322D02*
+X026675Y013322D01*
+X026675Y013004D02*
+X025945Y013004D01*
+X026009Y012685D02*
+X026675Y012685D01*
+X026675Y012367D02*
+X026310Y012367D01*
+X026350Y012048D02*
+X026675Y012048D01*
+X026675Y011730D02*
+X026350Y011730D01*
+X026350Y011411D02*
+X026675Y011411D01*
+X026675Y011093D02*
+X026350Y011093D01*
+X026350Y010774D02*
+X026675Y010774D01*
+X026675Y010455D02*
+X026350Y010455D01*
+X026350Y010137D02*
+X026675Y010137D01*
+X026675Y009818D02*
+X026350Y009818D01*
+X026350Y009500D02*
+X026675Y009500D01*
+X026675Y009181D02*
+X026350Y009181D01*
+X026350Y008863D02*
+X026675Y008863D01*
+X026675Y008544D02*
+X026388Y008544D01*
+X025650Y009085D02*
+X025279Y009085D01*
+X025256Y009062D01*
+X025222Y009085D01*
+X025175Y009105D01*
+X025125Y009115D01*
+X024987Y009115D01*
+X024987Y008522D01*
+X024986Y008522D01*
+X024986Y009115D01*
+X024848Y009115D01*
+X024798Y009105D01*
+X024751Y009085D01*
+X024717Y009062D01*
+X024694Y009085D01*
+X024279Y009085D01*
+X024236Y009042D01*
+X024194Y009085D01*
+X023779Y009085D01*
+X023736Y009042D01*
+X023694Y009085D01*
+X023279Y009085D01*
+X023256Y009062D01*
+X023222Y009085D01*
+X023175Y009105D01*
+X023125Y009115D01*
+X022987Y009115D01*
+X022987Y008522D01*
+X022986Y008522D01*
+X022986Y008521D01*
+X022859Y008521D01*
+X022487Y008521D01*
+X022487Y008522D01*
+X022614Y008522D01*
+X022986Y008522D01*
+X022986Y009115D01*
+X022848Y009115D01*
+X022798Y009105D01*
+X022751Y009085D01*
+X022736Y009075D01*
+X022722Y009085D01*
+X022675Y009105D01*
+X022625Y009115D01*
+X022487Y009115D01*
+X022487Y008522D01*
+X022486Y008522D01*
+X022486Y009115D01*
+X022348Y009115D01*
+X022298Y009105D01*
+X022251Y009085D01*
+X022217Y009062D01*
+X022194Y009085D01*
+X021851Y009085D01*
+X021851Y011715D01*
+X022194Y011715D01*
+X022236Y011757D01*
+X022279Y011715D01*
+X022694Y011715D01*
+X022736Y011757D01*
+X022779Y011715D01*
+X023194Y011715D01*
+X023217Y011737D01*
+X023251Y011715D01*
+X023298Y011695D01*
+X023348Y011685D01*
+X023486Y011685D01*
+X023486Y012278D01*
+X023487Y012278D01*
+X023614Y012278D01*
+X023986Y012278D01*
+X023986Y012278D01*
+X023614Y012278D01*
+X023487Y012278D01*
+X023487Y012278D01*
+X023487Y011685D01*
+X023625Y011685D01*
+X023675Y011695D01*
+X023722Y011715D01*
+X023736Y011724D01*
+X023751Y011715D01*
+X023798Y011695D01*
+X023848Y011685D01*
+X023986Y011685D01*
+X023986Y012278D01*
+X023987Y012278D01*
+X024114Y012278D01*
+X024486Y012278D01*
+X024486Y012278D01*
+X024114Y012278D01*
+X023987Y012278D01*
+X023987Y012278D01*
+X023987Y011685D01*
+X024125Y011685D01*
+X024175Y011695D01*
+X024222Y011715D01*
+X024236Y011724D01*
+X024251Y011715D01*
+X024298Y011695D01*
+X024348Y011685D01*
+X024486Y011685D01*
+X024486Y012278D01*
+X024487Y012278D01*
+X024614Y012278D01*
+X024986Y012278D01*
+X024986Y012278D01*
+X024614Y012278D01*
+X024487Y012278D01*
+X024487Y012278D01*
+X024487Y011685D01*
+X024625Y011685D01*
+X024675Y011695D01*
+X024722Y011715D01*
+X024736Y011724D01*
+X024751Y011715D01*
+X024798Y011695D01*
+X024848Y011685D01*
+X024986Y011685D01*
+X024986Y012278D01*
+X024987Y012278D01*
+X024987Y011685D01*
+X025125Y011685D01*
+X025175Y011695D01*
+X025222Y011715D01*
+X025256Y011737D01*
+X025279Y011715D01*
+X025650Y011715D01*
+X025650Y009085D01*
+X025650Y009181D02*
+X021851Y009181D01*
+X021851Y009500D02*
+X025650Y009500D01*
+X025650Y009818D02*
+X021851Y009818D01*
+X021851Y010137D02*
+X025650Y010137D01*
+X025650Y010455D02*
+X021851Y010455D01*
+X021851Y010774D02*
+X025650Y010774D01*
+X025650Y011093D02*
+X021851Y011093D01*
+X021851Y011411D02*
+X025650Y011411D01*
+X025264Y011730D02*
+X025244Y011730D01*
+X024987Y011730D02*
+X024986Y011730D01*
+X024986Y012048D02*
+X024987Y012048D01*
+X024487Y012048D02*
+X024486Y012048D01*
+X023987Y012048D02*
+X023986Y012048D01*
+X023986Y011730D02*
+X023987Y011730D01*
+X024486Y011730D02*
+X024487Y011730D01*
+X023487Y011730D02*
+X023486Y011730D01*
+X023228Y011730D02*
+X023209Y011730D01*
+X023486Y012048D02*
+X023487Y012048D01*
+X022764Y011730D02*
+X022709Y011730D01*
+X022264Y011730D02*
+X022209Y011730D01*
+X021291Y011730D02*
+X021241Y011730D01*
+X021241Y011774D02*
+X021285Y011774D01*
+X021285Y012269D01*
+X021286Y012269D01*
+X021286Y011774D01*
+X021291Y011774D01*
+X021291Y008646D01*
+X021289Y008643D01*
+X021194Y008643D01*
+X021044Y008581D01*
+X020929Y008466D01*
+X020867Y008316D01*
+X020867Y008153D01*
+X020929Y008003D01*
+X021044Y007888D01*
+X021077Y007874D01*
+X020848Y007874D01*
+X020848Y009041D01*
+X021194Y009388D01*
+X021241Y009502D01*
+X021241Y009625D01*
+X021241Y011774D01*
+X021285Y012048D02*
+X021286Y012048D01*
+X021276Y012280D02*
+X021276Y013142D01*
+X021087Y013641D02*
+X020925Y013641D01*
+X020925Y013959D02*
+X021087Y013959D01*
+X022036Y013959D02*
+X022445Y013959D01*
+X022445Y013641D02*
+X022044Y013641D01*
+X022445Y014278D02*
+X020109Y014278D01*
+X020109Y014596D02*
+X022474Y014596D01*
+X022645Y014915D02*
+X020109Y014915D01*
+X020109Y015234D02*
+X022534Y015234D01*
+X022512Y015552D02*
+X020109Y015552D01*
+X019489Y014915D02*
+X016960Y014915D01*
+X017278Y014596D02*
+X019489Y014596D01*
+X019489Y014278D02*
+X017597Y014278D01*
+X017816Y013959D02*
+X019489Y013959D01*
+X019489Y013641D02*
+X017816Y013641D01*
+X017816Y013322D02*
+X019489Y013322D01*
+X019489Y013004D02*
+X017816Y013004D01*
+X017816Y012685D02*
+X019684Y012685D01*
+X020002Y012367D02*
+X017816Y012367D01*
+X017947Y011252D02*
+X020240Y011252D01*
+X020306Y011185D01*
+X020456Y011123D01*
+X020619Y011123D01*
+X020621Y011124D01*
+X020621Y009692D01*
+X020362Y009432D01*
+X020275Y009345D01*
+X020228Y009231D01*
+X020228Y007410D01*
+X020228Y007287D01*
+X020275Y007173D01*
+X020613Y006835D01*
+X020613Y006496D01*
+X020747Y006361D01*
+X020975Y006361D01*
+X021098Y006310D01*
+X021348Y006310D01*
+X021490Y006251D01*
+X021652Y006251D01*
+X021803Y006313D01*
+X021918Y006428D01*
+X021980Y006578D01*
+X021980Y006741D01*
+X021918Y006891D01*
+X021803Y007006D01*
+X021652Y007068D01*
+X021490Y007068D01*
+X021481Y007065D01*
+X021462Y007085D01*
+X021481Y007097D01*
+X021517Y007134D01*
+X021546Y007176D01*
+X021565Y007224D01*
+X021574Y007266D01*
+X022139Y007266D01*
+X022146Y007273D01*
+X022157Y007266D01*
+X022204Y007246D01*
+X022254Y007236D01*
+X022496Y007236D01*
+X022496Y007693D01*
+X022496Y007693D01*
+X022496Y007236D01*
+X022581Y007236D01*
+X022581Y007077D01*
+X022591Y007027D01*
+X022610Y006979D01*
+X022639Y006937D01*
+X022652Y006924D01*
+X022650Y006921D01*
+X022630Y006873D01*
+X022620Y006823D01*
+X022620Y006561D01*
+X022620Y006299D01*
+X022630Y006249D01*
+X022650Y006202D01*
+X022678Y006159D01*
+X022714Y006123D01*
+X022757Y006095D01*
+X022804Y006075D01*
+X022855Y006065D01*
+X023037Y006065D01*
+X023037Y006561D01*
+X022620Y006561D01*
+X023037Y006561D01*
+X023037Y006561D01*
+X023038Y006561D01*
+X023038Y006065D01*
+X023146Y006065D01*
+X023146Y005577D01*
+X026675Y005577D01*
+X026675Y003365D01*
+X026464Y003453D01*
+X026225Y003453D01*
+X026165Y003428D01*
+X025743Y003850D01*
+X025640Y003893D01*
+X025529Y003893D01*
+X025474Y003893D01*
+X025474Y004034D01*
+X025412Y004184D01*
+X025297Y004299D01*
+X025146Y004362D01*
+X025129Y004362D01*
+X025129Y004428D01*
+X025067Y004578D01*
+X024952Y004693D01*
+X024802Y004755D01*
+X024639Y004755D01*
+X024566Y004725D01*
+X023956Y004725D01*
+X023935Y004775D01*
+X023820Y004890D01*
+X023670Y004952D01*
+X023507Y004952D01*
+X023357Y004890D01*
+X023265Y004797D01*
+X023202Y004824D01*
+X021135Y004824D01*
+X021023Y004824D01*
+X020920Y004781D01*
+X020796Y004657D01*
+X020702Y004657D01*
+X020552Y004595D01*
+X020437Y004480D01*
+X020375Y004330D01*
+X020375Y004263D01*
+X020358Y004263D01*
+X020208Y004201D01*
+X020093Y004086D01*
+X020030Y003936D01*
+X020030Y003773D01*
+X020093Y003623D01*
+X020208Y003508D01*
+X020342Y003453D01*
+X020320Y003453D01*
+X020260Y003428D01*
+X019739Y003949D01*
+X019636Y003991D01*
+X019525Y003991D01*
+X018739Y003991D01*
+X018753Y004005D01*
+X018753Y004081D01*
+X018897Y004225D01*
+X018948Y004246D01*
+X019063Y004361D01*
+X019125Y004511D01*
+X019125Y004674D01*
+X019063Y004824D01*
+X018948Y004939D01*
+X018798Y005001D01*
+X018768Y005001D01*
+X018719Y005120D01*
+X018604Y005235D01*
+X018454Y005297D01*
+X018291Y005297D01*
+X018141Y005235D01*
+X018112Y005206D01*
+X018011Y005248D01*
+X017848Y005248D01*
+X017712Y005191D01*
+X017693Y005210D01*
+X017543Y005272D01*
+X017381Y005272D01*
+X017230Y005210D01*
+X017115Y005095D01*
+X017087Y005026D01*
+X017026Y005051D01*
+X016864Y005051D01*
+X016728Y004994D01*
+X016660Y005062D01*
+X016510Y005124D01*
+X016347Y005124D01*
+X016197Y005062D01*
+X016124Y004989D01*
+X016124Y005068D01*
+X016061Y005218D01*
+X015946Y005333D01*
+X015796Y005395D01*
+X015702Y005395D01*
+X015109Y005988D01*
+X015109Y006199D01*
+X016462Y007553D01*
+X016500Y007462D01*
+X016567Y007395D01*
+X016567Y007089D01*
+X016567Y006978D01*
+X016609Y006875D01*
+X017069Y006415D01*
+X017069Y006013D01*
+X017204Y005879D01*
+X017867Y005879D01*
+X017954Y005965D01*
+X018041Y005879D01*
+X018704Y005879D01*
+X018791Y005965D01*
+X018877Y005879D01*
+X019540Y005879D01*
+X019675Y006013D01*
+X019675Y006676D01*
+X019593Y006758D01*
+X019675Y006840D01*
+X019675Y007503D01*
+X019636Y007542D01*
+X019636Y008064D01*
+X019613Y008087D01*
+X019636Y008110D01*
+X019636Y008733D01*
+X019501Y008868D01*
+X019489Y008868D01*
+X019489Y008970D01*
+X019506Y008987D01*
+X019568Y009137D01*
+X019568Y009300D01*
+X019506Y009450D01*
+X019391Y009565D01*
+X019241Y009627D01*
+X019078Y009627D01*
+X018928Y009565D01*
+X018813Y009450D01*
+X018751Y009300D01*
+X018751Y009137D01*
+X018813Y008987D01*
+X018928Y008872D01*
+X018929Y008872D01*
+X018929Y008868D01*
+X018917Y008868D01*
+X018791Y008742D01*
+X018664Y008868D01*
+X018338Y008868D01*
+X018338Y008906D01*
+X018276Y009057D01*
+X018177Y009155D01*
+X018190Y009187D01*
+X018190Y009349D01*
+X018128Y009499D01*
+X018074Y009554D01*
+X018210Y009610D01*
+X018325Y009725D01*
+X018387Y009876D01*
+X018387Y010038D01*
+X018325Y010188D01*
+X018210Y010303D01*
+X018060Y010366D01*
+X017923Y010366D01*
+X017944Y010417D01*
+X017944Y010580D01*
+X017882Y010730D01*
+X017767Y010845D01*
+X017617Y010907D01*
+X017602Y010907D01*
+X017947Y011252D01*
+X017788Y011093D02*
+X020621Y011093D01*
+X020621Y010774D02*
+X017838Y010774D01*
+X017944Y010455D02*
+X020621Y010455D01*
+X020621Y010137D02*
+X018346Y010137D01*
+X018364Y009818D02*
+X020621Y009818D01*
+X020430Y009500D02*
+X019457Y009500D01*
+X019568Y009181D02*
+X020228Y009181D01*
+X020228Y008863D02*
+X019506Y008863D01*
+X019636Y008544D02*
+X020228Y008544D01*
+X020228Y008226D02*
+X019636Y008226D01*
+X019636Y007907D02*
+X020228Y007907D01*
+X020228Y007589D02*
+X019636Y007589D01*
+X019675Y007270D02*
+X020235Y007270D01*
+X020496Y006951D02*
+X019675Y006951D01*
+X019675Y006633D02*
+X020613Y006633D01*
+X021087Y006314D02*
+X019675Y006314D01*
+X019658Y005996D02*
+X023146Y005996D01*
+X023146Y005677D02*
+X015420Y005677D01*
+X015109Y005996D02*
+X017087Y005996D01*
+X017069Y006314D02*
+X015224Y006314D01*
+X015543Y006633D02*
+X016851Y006633D01*
+X016578Y006951D02*
+X015861Y006951D01*
+X016180Y007270D02*
+X016567Y007270D01*
+X018670Y008863D02*
+X018912Y008863D01*
+X018751Y009181D02*
+X018188Y009181D01*
+X018128Y009500D02*
+X018863Y009500D01*
+X020848Y008863D02*
+X021291Y008863D01*
+X021007Y008544D02*
+X020848Y008544D01*
+X020848Y008226D02*
+X020867Y008226D01*
+X020848Y007907D02*
+X021025Y007907D01*
+X021079Y007874D02*
+X021079Y007874D01*
+X021079Y007457D01*
+X021079Y007874D01*
+X021079Y007589D02*
+X021079Y007589D01*
+X021079Y007457D02*
+X021079Y007457D01*
+X021857Y006951D02*
+X022629Y006951D01*
+X022496Y007270D02*
+X022496Y007270D01*
+X022150Y007270D02*
+X022142Y007270D01*
+X022496Y007589D02*
+X022496Y007589D01*
+X022883Y007299D02*
+X023057Y007299D01*
+X023057Y007300D01*
+X022884Y007300D01*
+X022883Y007299D01*
+X022620Y006633D02*
+X021980Y006633D01*
+X021804Y006314D02*
+X022620Y006314D01*
+X023037Y006314D02*
+X023038Y006314D01*
+X024884Y004722D02*
+X026675Y004722D01*
+X026675Y005040D02*
+X018752Y005040D01*
+X019106Y004722D02*
+X020861Y004722D01*
+X020405Y004403D02*
+X019081Y004403D01*
+X018756Y004085D02*
+X020092Y004085D01*
+X020033Y003766D02*
+X019922Y003766D01*
+X020240Y003447D02*
+X020308Y003447D01*
+X020439Y000853D02*
+X019809Y000853D01*
+X019455Y000853D01*
+X019455Y000852D01*
+X019809Y000852D01*
+X020439Y000852D01*
+X020439Y000853D01*
+X020440Y000853D02*
+X021069Y000853D01*
+X021423Y000853D01*
+X021423Y000852D01*
+X021069Y000852D01*
+X020440Y000852D01*
+X020440Y000853D01*
+X021424Y000853D02*
+X021778Y000853D01*
+X022407Y000853D01*
+X022407Y000852D01*
+X021778Y000852D01*
+X021424Y000852D01*
+X021424Y000853D01*
+X022408Y000853D02*
+X022762Y000853D01*
+X023392Y000853D01*
+X023746Y000853D01*
+X024376Y000853D01*
+X024376Y000852D01*
+X023746Y000852D01*
+X023392Y000852D01*
+X023392Y000853D01*
+X023392Y000852D01*
+X022762Y000852D01*
+X022408Y000852D01*
+X022408Y000853D01*
+X024377Y000853D02*
+X024730Y000853D01*
+X025360Y000853D01*
+X025360Y000852D01*
+X024730Y000852D01*
+X024377Y000852D01*
+X024377Y000853D01*
+X025361Y000853D02*
+X025990Y000853D01*
+X026344Y000853D01*
+X026344Y000852D01*
+X025990Y000852D01*
+X025361Y000852D01*
+X025361Y000853D01*
+X026146Y003447D02*
+X026213Y003447D01*
+X026476Y003447D02*
+X026675Y003447D01*
+X026675Y003766D02*
+X025827Y003766D01*
+X025453Y004085D02*
+X026675Y004085D01*
+X026675Y004403D02*
+X025129Y004403D01*
+X026675Y005359D02*
+X015884Y005359D01*
+X016124Y005040D02*
+X016175Y005040D01*
+X016682Y005040D02*
+X016839Y005040D01*
+X017052Y005040D02*
+X017093Y005040D01*
+X016440Y004062D02*
+X016462Y004040D01*
+X016522Y003980D01*
+X016446Y003949D01*
+X016440Y003942D01*
+X016440Y004062D01*
+X016502Y000853D02*
+X015872Y000853D01*
+X015518Y000853D01*
+X015518Y000852D01*
+X016148Y000852D01*
+X016502Y000852D01*
+X016502Y000853D01*
+X016503Y000853D02*
+X016856Y000853D01*
+X017486Y000853D01*
+X017486Y000852D01*
+X016856Y000852D01*
+X016503Y000852D01*
+X016503Y000853D01*
+X017487Y000853D02*
+X017841Y000853D01*
+X018470Y000853D01*
+X018470Y000852D01*
+X017841Y000852D01*
+X017487Y000852D01*
+X017487Y000853D01*
+X018471Y000853D02*
+X018825Y000853D01*
+X019455Y000853D01*
+X019455Y000852D01*
+X018825Y000852D01*
+X018471Y000852D01*
+X018471Y000853D01*
+X015518Y000852D02*
+X014888Y000852D01*
+X014436Y000852D01*
+X014436Y000853D01*
+X014888Y000853D01*
+X015518Y000853D01*
+X015518Y000852D01*
+X014435Y000852D02*
+X013805Y000852D01*
+X013648Y000852D01*
+X013648Y000853D01*
+X013805Y000853D01*
+X014435Y000853D01*
+X014435Y000852D01*
+X010154Y004544D02*
+X009760Y004544D01*
+X009760Y007349D01*
+X008300Y007349D01*
+X008280Y007353D01*
+X008097Y007353D01*
+X008097Y007349D01*
+X008096Y007349D01*
+X008096Y007353D01*
+X007914Y007353D01*
+X007893Y007349D01*
+X007892Y007349D01*
+X007892Y007678D01*
+X008039Y007825D01*
+X008161Y007825D01*
+X008198Y007788D01*
+X008861Y007788D01*
+X008899Y007825D01*
+X009081Y007825D01*
+X009210Y007879D01*
+X009308Y007977D01*
+X009308Y007977D01*
+X009629Y008298D01*
+X010037Y008298D01*
+X010084Y008278D01*
+X011511Y008278D01*
+X012933Y008278D01*
+X012956Y008268D01*
+X012657Y008268D01*
+X012554Y008226D01*
+X012475Y008147D01*
+X011934Y007606D01*
+X011891Y007503D01*
+X011891Y007391D01*
+X011891Y006726D01*
+X011147Y005982D01*
+X011104Y005879D01*
+X011104Y005767D01*
+X011104Y005473D01*
+X011043Y005448D01*
+X010922Y005328D01*
+X010883Y005233D01*
+X010843Y005233D01*
+X010154Y004544D01*
+X010332Y004722D02*
+X009760Y004722D01*
+X009760Y005040D02*
+X010650Y005040D01*
+X010954Y005359D02*
+X009760Y005359D01*
+X009760Y005677D02*
+X011104Y005677D01*
+X011161Y005996D02*
+X009760Y005996D01*
+X009760Y006314D02*
+X011479Y006314D01*
+X011798Y006633D02*
+X009760Y006633D01*
+X009760Y006951D02*
+X011891Y006951D01*
+X011891Y007270D02*
+X009760Y007270D01*
+X009238Y007907D02*
+X012236Y007907D01*
+X011927Y007589D02*
+X007892Y007589D01*
+X008108Y008544D02*
+X003839Y008544D01*
+X003839Y008863D02*
+X008034Y008863D01*
+X008034Y008884D02*
+X008529Y008884D01*
+X008529Y008884D01*
+X008034Y008884D01*
+X008074Y009181D02*
+X003839Y009181D01*
+X003839Y009500D02*
+X005651Y009500D01*
+X005543Y009818D02*
+X003807Y009818D01*
+X004544Y009500D02*
+X000522Y009500D01*
+X001213Y009500D01*
+X001213Y009181D02*
+X000522Y009181D01*
+X004544Y009181D01*
+X004544Y008863D02*
+X000522Y008863D01*
+X001213Y008863D01*
+X001213Y008544D02*
+X000522Y008544D01*
+X004544Y008544D01*
+X004544Y008226D02*
+X000522Y008226D01*
+X001213Y008226D01*
+X003839Y007270D02*
+X005132Y007270D01*
+X005071Y006951D02*
+X003839Y006951D01*
+X004243Y005996D02*
+X002730Y005996D01*
+X002621Y005677D02*
+X002431Y005677D01*
+X002526Y005677D02*
+X002526Y005677D01*
+X002526Y005359D02*
+X002526Y005359D01*
+X002431Y005359D02*
+X002621Y005359D01*
+X002621Y005040D02*
+X002431Y005040D01*
+X002526Y005040D02*
+X002526Y005040D01*
+X002526Y004722D02*
+X002526Y004722D01*
+X002431Y004722D02*
+X002621Y004722D01*
+X002636Y004403D02*
+X002434Y004403D01*
+X002526Y004403D02*
+X002526Y004403D01*
+X002570Y004085D02*
+X002471Y004085D01*
+X002570Y004085D01*
+X002648Y003766D02*
+X002159Y003766D01*
+X002648Y003766D01*
+X003018Y004150D02*
+X003026Y004158D01*
+X003026Y005134D01*
+X003526Y005134D02*
+X003526Y004134D01*
+X003658Y004002D01*
+X004431Y004568D02*
+X004431Y004988D01*
+X004912Y005469D01*
+X005022Y005579D01*
+X005081Y005722D01*
+X005081Y005791D01*
+X005129Y005906D01*
+X005779Y006556D01*
+X005779Y005585D01*
+X005779Y005470D01*
+X005789Y005446D01*
+X005789Y004652D01*
+X005731Y004676D01*
+X005620Y004676D01*
+X005587Y004662D01*
+X005553Y004685D01*
+X005505Y004705D01*
+X005455Y004715D01*
+X005233Y004715D01*
+X005233Y004239D01*
+X005232Y004239D01*
+X005232Y004715D01*
+X005010Y004715D01*
+X004960Y004705D01*
+X004912Y004685D01*
+X004870Y004657D01*
+X004834Y004621D01*
+X004805Y004578D01*
+X004786Y004531D01*
+X004776Y004481D01*
+X004776Y004239D01*
+X005232Y004239D01*
+X005232Y004238D01*
+X004776Y004238D01*
+X004776Y004223D01*
+X004431Y004568D01*
+X004431Y004722D02*
+X005789Y004722D01*
+X005789Y005040D02*
+X004483Y005040D01*
+X004802Y005359D02*
+X005789Y005359D01*
+X005779Y005677D02*
+X005063Y005677D01*
+X005219Y005996D02*
+X005779Y005996D01*
+X005779Y006314D02*
+X005537Y006314D01*
+X004243Y005996D02*
+X000522Y005996D01*
+X000522Y005677D02*
+X000621Y005677D01*
+X000522Y005677D01*
+X000522Y005359D02*
+X000621Y005359D01*
+X000522Y005359D01*
+X000522Y005040D02*
+X000621Y005040D01*
+X000522Y005040D01*
+X000522Y004722D02*
+X000621Y004722D01*
+X000522Y004722D01*
+X000522Y004403D02*
+X000636Y004403D01*
+X000522Y004403D01*
+X000522Y004085D02*
+X000636Y004085D01*
+X000522Y004085D01*
+X000522Y003766D02*
+X000636Y003766D01*
+X000522Y003766D01*
+X000522Y003447D02*
+X000757Y003447D01*
+X000522Y003447D01*
+X000522Y003129D02*
+X000798Y003129D01*
+X000522Y003129D01*
+X000522Y002810D02*
+X000919Y002810D01*
+X000522Y002810D01*
+X000522Y002492D02*
+X004203Y002492D01*
+X000522Y002492D01*
+X000522Y002173D02*
+X004203Y002173D01*
+X000522Y002173D01*
+X001246Y003116D02*
+X001542Y003116D01*
+X001640Y003215D01*
+X003412Y003215D01*
+X002493Y002810D02*
+X001787Y002810D01*
+X002493Y002810D01*
+X001640Y003215D02*
+X001542Y003215D01*
+X001026Y003731D01*
+X001026Y005134D01*
+X001526Y005134D02*
+X001526Y003870D01*
+X001542Y003855D01*
+X002034Y004199D02*
+X002034Y005126D01*
+X002026Y005134D01*
+X004596Y004403D02*
+X004776Y004403D01*
+X005232Y004403D02*
+X005233Y004403D01*
+X005233Y003569D02*
+X005233Y003038D01*
+X004593Y002181D02*
+X004593Y001984D01*
+X004977Y001601D01*
+X005032Y000581D02*
+X003927Y000581D01*
+X003412Y000581D02*
+X003411Y000581D01*
+X003411Y000899D02*
+X003412Y000899D01*
+X002896Y000581D02*
+X000522Y000581D01*
+X004544Y000581D01*
+X006512Y007704D02*
+X006512Y008403D01*
+X006512Y007704D01*
+X006512Y007704D01*
+X006512Y007907D02*
+X006512Y007907D01*
+X006512Y008226D02*
+X006512Y008226D01*
+X006455Y009500D02*
+X006569Y009500D01*
+X006569Y009818D02*
+X006455Y009818D01*
+X006455Y010455D02*
+X006569Y010455D01*
+X006569Y010774D02*
+X006455Y010774D01*
+X006494Y011411D02*
+X005604Y011411D01*
+X005923Y011730D02*
+X006390Y011730D01*
+X006418Y012048D02*
+X006241Y012048D01*
+X006670Y012477D02*
+X006857Y012477D01*
+X006857Y012664D01*
+X007348Y012685D02*
+X007368Y012685D01*
+X008023Y012685D02*
+X008368Y012685D01*
+X008309Y013322D02*
+X007515Y013322D01*
+X006512Y013641D02*
+X006441Y013641D01*
+X006433Y013959D02*
+X006512Y013959D01*
+X006512Y014278D02*
+X003512Y014278D01*
+X003549Y014596D02*
+X006512Y014596D01*
+X006512Y014915D02*
+X003549Y014915D01*
+X003541Y015234D02*
+X006512Y015234D01*
+X006512Y015552D02*
+X000522Y015552D01*
+X002949Y015871D02*
+X006512Y015871D01*
+X006512Y016189D02*
+X003025Y016189D01*
+X003025Y016508D02*
+X006512Y016508D01*
+X006347Y016645D02*
+X006304Y016616D01*
+X006257Y016597D01*
+X006207Y016587D01*
+X005485Y016587D01*
+X005485Y017248D01*
+X006441Y017248D01*
+X006441Y016821D01*
+X006431Y016771D01*
+X006412Y016724D01*
+X006383Y016681D01*
+X006347Y016645D01*
+X006441Y016826D02*
+X006512Y016826D01*
+X006512Y017145D02*
+X006441Y017145D01*
+X006441Y017463D02*
+X006512Y017463D01*
+X005485Y017145D02*
+X005323Y017145D01*
+X005323Y016826D02*
+X005485Y016826D01*
+X004366Y016826D02*
+X003025Y016826D01*
+X003025Y017145D02*
+X004366Y017145D01*
+X004366Y017463D02*
+X003004Y017463D01*
+X007742Y017463D02*
+X008939Y017463D01*
+X008621Y017145D02*
+X007742Y017145D01*
+X007742Y016826D02*
+X008357Y016826D01*
+X008337Y016508D02*
+X007742Y016508D01*
+X007742Y016189D02*
+X008337Y016189D01*
+X008337Y015871D02*
+X007742Y015871D01*
+X007742Y015552D02*
+X008337Y015552D01*
+X008337Y015234D02*
+X007742Y015234D01*
+X007742Y014915D02*
+X008337Y014915D01*
+X008337Y014596D02*
+X007742Y014596D01*
+X007742Y014278D02*
+X008337Y014278D01*
+X009607Y014278D02*
+X010686Y014278D01*
+X010686Y014596D02*
+X009607Y014596D01*
+X009607Y014915D02*
+X010686Y014915D01*
+X010686Y015234D02*
+X009689Y015234D01*
+X009187Y015552D02*
+X009117Y015552D01*
+X009117Y015871D02*
+X009506Y015871D01*
+X009117Y016189D02*
+X010686Y016189D01*
+X010690Y015871D02*
+X010552Y015871D01*
+X010508Y015552D02*
+X010686Y015552D01*
+X010686Y016508D02*
+X009117Y016508D01*
+X009607Y013959D02*
+X010686Y013959D01*
+X009607Y013641D02*
+X012630Y013641D01*
+X013829Y012354D02*
+X013956Y012227D01*
+X014282Y012227D01*
+X014282Y012119D01*
+X014099Y011936D01*
+X014057Y011833D01*
+X014057Y011722D01*
+X014057Y011617D01*
+X013958Y011716D01*
+X013958Y011810D01*
+X013896Y011960D01*
+X013829Y012027D01*
+X013829Y012354D01*
+X013829Y012048D02*
+X014211Y012048D01*
+X014057Y011730D02*
+X013958Y011730D01*
+X009933Y010455D02*
+X009672Y010455D01*
+X009894Y010137D02*
+X009253Y010137D01*
+X009232Y009818D02*
+X009894Y009818D01*
+X009894Y009500D02*
+X009232Y009500D01*
+X008985Y009181D02*
+X009865Y009181D01*
+X009204Y008863D02*
+X009026Y008863D01*
+X009187Y008846D02*
+X009187Y008846D01*
+X008530Y009181D02*
+X008530Y009181D01*
+X007758Y009500D02*
+X007373Y009500D01*
+X007481Y009818D02*
+X007758Y009818D01*
+X007758Y011411D02*
+X007219Y011411D01*
+X009557Y008226D02*
+X012554Y008226D01*
+X020988Y009181D02*
+X021291Y009181D01*
+X021291Y009500D02*
+X021241Y009500D01*
+X021241Y009818D02*
+X021291Y009818D01*
+X021291Y010137D02*
+X021241Y010137D01*
+X021241Y010455D02*
+X021291Y010455D01*
+X021291Y010774D02*
+X021241Y010774D01*
+X021241Y011093D02*
+X021291Y011093D01*
+X021291Y011411D02*
+X021241Y011411D01*
+X023678Y013057D02*
+X023678Y013057D01*
+X024154Y013057D01*
+X024154Y012865D01*
+X024175Y012861D01*
+X024222Y012841D01*
+X024236Y012832D01*
+X024251Y012841D01*
+X024298Y012861D01*
+X024348Y012871D01*
+X024352Y012871D01*
+X024352Y013057D01*
+X024829Y013057D01*
+X024829Y013057D01*
+X024352Y013057D01*
+X024352Y013280D01*
+X024362Y013330D01*
+X024366Y013338D01*
+X024271Y013243D01*
+X024154Y013243D01*
+X024154Y013057D01*
+X023678Y013057D01*
+X024154Y013004D02*
+X024352Y013004D01*
+X024350Y013322D02*
+X024361Y013322D01*
+X024405Y013641D02*
+X024445Y013641D01*
+X024445Y013959D02*
+X024405Y013959D01*
+X024405Y014278D02*
+X024445Y014278D01*
+X024474Y014596D02*
+X024377Y014596D01*
+X024205Y014915D02*
+X024645Y014915D01*
+X024552Y015234D02*
+X024249Y015234D01*
+X024272Y015552D02*
+X024530Y015552D01*
+X025305Y015552D02*
+X025514Y015552D01*
+X025536Y015234D02*
+X025283Y015234D01*
+X025205Y014915D02*
+X025645Y014915D01*
+X025474Y014596D02*
+X025377Y014596D01*
+X025405Y014278D02*
+X025445Y014278D01*
+X025445Y013959D02*
+X025405Y013959D01*
+X025405Y013641D02*
+X025445Y013641D01*
+X023445Y013641D02*
+X023405Y013641D01*
+X023405Y013959D02*
+X023445Y013959D01*
+X023445Y014278D02*
+X023405Y014278D01*
+X023377Y014596D02*
+X023474Y014596D01*
+X023645Y014915D02*
+X023205Y014915D01*
+X023265Y015234D02*
+X023519Y015234D01*
+X023497Y015552D02*
+X023287Y015552D01*
+X019969Y017145D02*
+X019890Y017145D01*
+X019969Y017463D02*
+X019559Y017463D01*
+X018225Y016601D02*
+X017290Y015666D01*
+X016894Y015552D02*
+X016733Y015552D01*
+X016733Y015871D02*
+X016932Y015871D01*
+X017161Y016189D02*
+X017262Y016189D01*
+X017255Y016508D02*
+X017350Y016508D01*
+X022486Y008863D02*
+X022487Y008863D01*
+X022486Y008544D02*
+X022487Y008544D01*
+X022986Y008544D02*
+X022987Y008544D01*
+X022986Y008863D02*
+X022987Y008863D01*
+X024986Y008863D02*
+X024987Y008863D01*
+X024986Y008544D02*
+X024987Y008544D01*
+D44*
+X025262Y007004D03*
+X025262Y006118D03*
+X022112Y013156D03*
+X015321Y012171D03*
+X014731Y012171D03*
+X005183Y004888D03*
+X004691Y006020D03*
+X004445Y007004D03*
+X004002Y007447D03*
+X004494Y007792D03*
+X004002Y008136D03*
+X004445Y008530D03*
+X004002Y008973D03*
+X004051Y010006D03*
+X003412Y010006D03*
+X002772Y010006D03*
+X002132Y010006D03*
+X001443Y010006D03*
+X000754Y010006D03*
+X000754Y009120D03*
+X000754Y008530D03*
+X002034Y004199D03*
+X002280Y003707D03*
+X003018Y004150D03*
+X003658Y004002D03*
+X001246Y003116D03*
+D45*
+X006807Y008628D03*
+X006168Y008923D03*
+X005626Y009317D03*
+X007546Y008727D03*
+X008825Y007742D03*
+X009859Y008087D03*
+X009268Y009170D03*
+X010695Y009219D03*
+X011876Y009760D03*
+X013057Y009957D03*
+X013500Y009612D03*
+X013549Y009022D03*
+X013156Y008628D03*
+X013353Y007398D03*
+X012811Y006660D03*
+X011679Y007103D03*
+X011138Y006512D03*
+X010794Y005479D03*
+X010154Y004888D03*
+X015321Y004790D03*
+X015715Y004986D03*
+X015862Y005429D03*
+X016428Y004716D03*
+X016945Y004642D03*
+X017462Y004863D03*
+X017929Y004839D03*
+X018372Y004888D03*
+X018717Y004593D03*
+X020439Y003855D03*
+X020882Y003510D03*
+X020784Y004248D03*
+X020734Y005479D03*
+X021670Y005675D03*
+X022162Y005823D03*
+X021916Y006315D03*
+X021571Y006660D03*
+X023097Y007890D03*
+X023687Y007939D03*
+X022998Y009416D03*
+X022457Y009416D03*
+X021276Y008234D03*
+X019160Y009219D03*
+X017979Y009957D03*
+X017536Y010006D03*
+X017536Y010498D03*
+X017093Y010498D03*
+X015813Y010646D03*
+X015912Y011925D03*
+X016896Y012122D03*
+X016207Y013500D03*
+X016059Y014091D03*
+X015321Y013549D03*
+X013549Y013549D03*
+X012516Y013549D03*
+X011384Y012073D03*
+X011778Y011187D03*
+X013303Y011286D03*
+X013549Y011729D03*
+X013992Y011925D03*
+X017782Y009268D03*
+X017929Y008825D03*
+X016847Y007693D03*
+X020538Y010006D03*
+X020439Y010892D03*
+X020046Y011138D03*
+X020538Y011532D03*
+X020144Y011925D03*
+X019307Y012860D03*
+X018864Y014829D03*
+X018471Y015862D03*
+X019307Y015862D03*
+X018864Y016650D03*
+X018618Y017683D03*
+X017687Y016748D03*
+X016847Y016453D03*
+X017290Y015666D03*
+X015764Y015764D03*
+X015764Y015223D03*
+X013205Y015370D03*
+X013205Y015862D03*
+X013697Y017634D03*
+X012122Y017683D03*
+X010351Y017683D03*
+X010154Y015764D03*
+X007841Y015862D03*
+X007890Y017683D03*
+X008166Y013727D03*
+X008677Y013500D03*
+X007693Y011433D03*
+X007103Y011089D03*
+X007546Y010597D03*
+X007546Y009957D03*
+X009268Y010547D03*
+X009809Y011040D03*
+X005823Y011483D03*
+X015370Y017634D03*
+X020439Y016256D03*
+X021374Y016010D03*
+X020734Y015469D03*
+X022359Y016010D03*
+X022900Y015420D03*
+X023441Y016010D03*
+X023884Y015420D03*
+X024425Y016059D03*
+X024918Y015420D03*
+X025459Y016010D03*
+X025902Y015420D03*
+X026492Y014829D03*
+X026492Y013845D03*
+X026443Y013254D03*
+X026492Y012418D03*
+X025508Y011679D03*
+X025016Y011679D03*
+X026542Y011433D03*
+X026492Y010646D03*
+X026542Y009859D03*
+X026492Y009071D03*
+X025459Y009416D03*
+X024967Y009416D03*
+X022408Y011679D03*
+X021916Y011679D03*
+X024229Y013057D03*
+X024425Y013845D03*
+X022211Y013845D03*
+X026443Y015912D03*
+X026394Y005183D03*
+X025508Y004839D03*
+X024721Y004347D03*
+X025065Y003953D03*
+X026246Y004150D03*
+X023589Y004544D03*
+D46*
+X021006Y013412D02*
+X021006Y017329D01*
+X020963Y017372D01*
+D47*
+X019799Y016797D02*
+X019799Y013008D01*
+X020577Y012231D01*
+X020931Y011876D01*
+X020931Y009563D01*
+X020538Y009170D01*
+X020538Y007349D01*
+X021079Y006807D01*
+X021079Y006748D01*
+X021522Y007053D02*
+X021079Y007496D01*
+X021079Y007457D01*
+X021079Y007496D02*
+X020882Y007693D01*
+X020882Y009022D01*
+X021276Y009416D01*
+X021276Y012280D01*
+X021286Y012270D01*
+X020577Y012270D02*
+X020577Y012231D01*
+X021276Y013142D02*
+X021006Y013412D01*
+X019799Y016797D02*
+X019406Y017191D01*
+X018274Y017191D01*
+X008481Y012762D02*
+X007142Y012762D01*
+X006857Y012477D01*
+X007292Y011768D02*
+X007695Y012171D01*
+X007292Y011768D02*
+X006857Y011768D01*
+X008166Y013077D02*
+X008481Y012762D01*
+X008166Y013077D02*
+X008166Y013727D01*
+X005404Y013412D02*
+X003959Y011967D01*
+X002112Y011967D01*
+X002112Y016707D02*
+X002734Y017329D01*
+X005404Y017329D01*
+X022998Y006522D02*
+X023038Y006561D01*
+M02*
diff --git a/gyro_board/schematic/gyro_motherboard_1.19.2012/gyro_motherboard.GTO b/gyro_board/schematic/gyro_motherboard_1.19.2012/gyro_motherboard.GTO
new file mode 100644
index 0000000..e938934
--- /dev/null
+++ b/gyro_board/schematic/gyro_motherboard_1.19.2012/gyro_motherboard.GTO
@@ -0,0 +1,830 @@
+G75*
+G70*
+%OFA0B0*%
+%FSLAX24Y24*%
+%IPPOS*%
+%LPD*%
+%AMOC8*
+5,1,8,0,0,1.08239X$1,22.5*
+%
+%ADD10C,0.0060*%
+%ADD11C,0.0110*%
+%ADD12R,0.0300X0.0180*%
+%ADD13R,0.0079X0.0079*%
+%ADD14C,0.0080*%
+%ADD15C,0.0200*%
+%ADD16C,0.0050*%
+%ADD17C,0.0040*%
+%ADD18C,0.0220*%
+D10*
+X005242Y001128D02*
+X005242Y001364D01*
+X005715Y001364D02*
+X005715Y001128D01*
+X010065Y001079D02*
+X010065Y001315D01*
+X010538Y001315D02*
+X010538Y001079D01*
+X010576Y005804D02*
+X010746Y005804D01*
+X010803Y005861D01*
+X010803Y006087D01*
+X010746Y006144D01*
+X010576Y006144D01*
+X010576Y005804D01*
+X010434Y005804D02*
+X010434Y006144D01*
+X010208Y006144D02*
+X010434Y005804D01*
+X010208Y005804D02*
+X010208Y006144D01*
+X010066Y006087D02*
+X010009Y006144D01*
+X009896Y006144D01*
+X009839Y006087D01*
+X009839Y005861D01*
+X009896Y005804D01*
+X010009Y005804D01*
+X010066Y005861D01*
+X010066Y005974D01*
+X009953Y005974D01*
+X009994Y006394D02*
+X009938Y006451D01*
+X009994Y006394D02*
+X010108Y006394D01*
+X010165Y006451D01*
+X010165Y006565D01*
+X010108Y006621D01*
+X010051Y006621D01*
+X009938Y006565D01*
+X009938Y006735D01*
+X010165Y006735D01*
+X010306Y006735D02*
+X010306Y006508D01*
+X010419Y006394D01*
+X010533Y006508D01*
+X010533Y006735D01*
+X010305Y006985D02*
+X010135Y006985D01*
+X010135Y007325D01*
+X010305Y007325D01*
+X010361Y007269D01*
+X010361Y007212D01*
+X010305Y007155D01*
+X010135Y007155D01*
+X010305Y007155D02*
+X010361Y007098D01*
+X010361Y007042D01*
+X010305Y006985D01*
+X010361Y007526D02*
+X010361Y007753D01*
+X010248Y007867D01*
+X010135Y007753D01*
+X010135Y007526D01*
+X010135Y007696D02*
+X010361Y007696D01*
+X008766Y008412D02*
+X008766Y008648D01*
+X008294Y008648D02*
+X008294Y008412D01*
+X007860Y007093D02*
+X007624Y007093D01*
+X007624Y006620D02*
+X007860Y006620D01*
+X007366Y010676D02*
+X007196Y010676D01*
+X007196Y011016D01*
+X007366Y011016D01*
+X007423Y010959D01*
+X007423Y010733D01*
+X007366Y010676D01*
+X007055Y010676D02*
+X007055Y011016D01*
+X006828Y011016D02*
+X007055Y010676D01*
+X006828Y010676D02*
+X006828Y011016D01*
+X006686Y010959D02*
+X006630Y011016D01*
+X006516Y011016D01*
+X006460Y010959D01*
+X006460Y010733D01*
+X006516Y010676D01*
+X006630Y010676D01*
+X006686Y010733D01*
+X006686Y010846D01*
+X006573Y010846D01*
+X005950Y010846D02*
+X005723Y010846D01*
+X005723Y010903D02*
+X005836Y011016D01*
+X005950Y010903D01*
+X005950Y010676D01*
+X005723Y010676D02*
+X005723Y010903D01*
+X005581Y010959D02*
+X005581Y010733D01*
+X005525Y010676D01*
+X005355Y010676D01*
+X005355Y011016D01*
+X005525Y011016D01*
+X005581Y010959D01*
+X005213Y010959D02*
+X005156Y011016D01*
+X005043Y011016D01*
+X004986Y010959D01*
+X004986Y010903D01*
+X005043Y010846D01*
+X005156Y010846D01*
+X005213Y010789D01*
+X005213Y010733D01*
+X005156Y010676D01*
+X005043Y010676D01*
+X004986Y010733D01*
+X004477Y010676D02*
+X004250Y010676D01*
+X004250Y011016D01*
+X004108Y010959D02*
+X004052Y011016D01*
+X003938Y011016D01*
+X003881Y010959D01*
+X003881Y010733D01*
+X003938Y010676D01*
+X004052Y010676D01*
+X004108Y010733D01*
+X003740Y010733D02*
+X003683Y010676D01*
+X003570Y010676D01*
+X003513Y010733D01*
+X003570Y010846D02*
+X003513Y010903D01*
+X003513Y010959D01*
+X003570Y011016D01*
+X003683Y011016D01*
+X003740Y010959D01*
+X003683Y010846D02*
+X003740Y010789D01*
+X003740Y010733D01*
+X003683Y010846D02*
+X003570Y010846D01*
+X003003Y010789D02*
+X003003Y011016D01*
+X002776Y011016D02*
+X002776Y010789D01*
+X002890Y010676D01*
+X003003Y010789D01*
+X002635Y010733D02*
+X002578Y010676D01*
+X002465Y010676D01*
+X002408Y010733D01*
+X002408Y010846D02*
+X002522Y010903D01*
+X002578Y010903D01*
+X002635Y010846D01*
+X002635Y010733D01*
+X002408Y010846D02*
+X002408Y011016D01*
+X002635Y011016D01*
+X006620Y012004D02*
+X006620Y012240D01*
+X007093Y012240D02*
+X007093Y012004D01*
+X012447Y011128D02*
+X012683Y011128D01*
+X012683Y010656D02*
+X012447Y010656D01*
+X019093Y005540D02*
+X019093Y005483D01*
+X019150Y005426D01*
+X019263Y005426D01*
+X019320Y005370D01*
+X019320Y005313D01*
+X019263Y005256D01*
+X019150Y005256D01*
+X019093Y005313D01*
+X019093Y005540D02*
+X019150Y005596D01*
+X019263Y005596D01*
+X019320Y005540D01*
+X019462Y005596D02*
+X019575Y005596D01*
+X019518Y005596D02*
+X019518Y005256D01*
+X019462Y005256D02*
+X019575Y005256D01*
+X019707Y005313D02*
+X019764Y005256D01*
+X019877Y005256D01*
+X019934Y005313D01*
+X019934Y005426D01*
+X019821Y005426D01*
+X019934Y005540D02*
+X019877Y005596D01*
+X019764Y005596D01*
+X019707Y005540D01*
+X019707Y005313D01*
+X019609Y005006D02*
+X019609Y004779D01*
+X019722Y004666D01*
+X019836Y004779D01*
+X019836Y005006D01*
+X019467Y005006D02*
+X019240Y005006D01*
+X019240Y004836D01*
+X019354Y004893D01*
+X019411Y004893D01*
+X019467Y004836D01*
+X019467Y004722D01*
+X019411Y004666D01*
+X019297Y004666D01*
+X019240Y004722D01*
+X019288Y004465D02*
+X019175Y004465D01*
+X019118Y004408D01*
+X019118Y004181D01*
+X019175Y004124D01*
+X019288Y004124D01*
+X019345Y004181D01*
+X019345Y004294D01*
+X019232Y004294D01*
+X019345Y004408D02*
+X019288Y004465D01*
+X019487Y004465D02*
+X019713Y004124D01*
+X019713Y004465D01*
+X019855Y004465D02*
+X020025Y004465D01*
+X020082Y004408D01*
+X020082Y004181D01*
+X020025Y004124D01*
+X019855Y004124D01*
+X019855Y004465D01*
+X019487Y004465D02*
+X019487Y004124D01*
+X020843Y006984D02*
+X020843Y007221D01*
+X021315Y007221D02*
+X021315Y006984D01*
+X023274Y006797D02*
+X023510Y006797D01*
+X023510Y006325D02*
+X023274Y006325D01*
+X021049Y012034D02*
+X020813Y012034D01*
+X020813Y012506D02*
+X021049Y012506D01*
+D11*
+X001055Y003216D02*
+X000661Y003216D01*
+X000858Y003019D02*
+X000858Y003413D01*
+X000956Y001444D02*
+X000956Y001050D01*
+D12*
+X005233Y003904D03*
+X013648Y010449D03*
+X017536Y008087D03*
+X018372Y008087D03*
+X019209Y008087D03*
+D13*
+X019209Y006797D03*
+X018372Y006797D03*
+X017536Y006797D03*
+X014288Y013146D03*
+X005233Y002664D03*
+D14*
+X005766Y002603D02*
+X005766Y003103D01*
+X006016Y003353D01*
+X006516Y003353D01*
+X006766Y003103D01*
+X006766Y002603D01*
+X006516Y002353D01*
+X006766Y002103D01*
+X006766Y001603D01*
+X006516Y001353D01*
+X006766Y001103D01*
+X006766Y000603D01*
+X006516Y000353D01*
+X006016Y000353D01*
+X005766Y000603D01*
+X005766Y001103D01*
+X006016Y001353D01*
+X005766Y001603D01*
+X005766Y002103D01*
+X006016Y002353D01*
+X005766Y002603D01*
+X006750Y002603D02*
+X006750Y003103D01*
+X007000Y003353D01*
+X007500Y003353D01*
+X007750Y003103D01*
+X007750Y002603D01*
+X007500Y002353D01*
+X007750Y002103D01*
+X007750Y001603D01*
+X007500Y001353D01*
+X007750Y001103D01*
+X007750Y000603D01*
+X007500Y000353D01*
+X007000Y000353D01*
+X006750Y000603D01*
+X006750Y001103D01*
+X007000Y001353D01*
+X006750Y001603D01*
+X006750Y002103D01*
+X007000Y002353D01*
+X006750Y002603D01*
+X007734Y002603D02*
+X007734Y003103D01*
+X007984Y003353D01*
+X008484Y003353D01*
+X008734Y003103D01*
+X008734Y002603D01*
+X008484Y002353D01*
+X008734Y002103D01*
+X008734Y001603D01*
+X008484Y001353D01*
+X008734Y001103D01*
+X008734Y000603D01*
+X008484Y000353D01*
+X007984Y000353D01*
+X007734Y000603D01*
+X007734Y001103D01*
+X007984Y001353D01*
+X007734Y001603D01*
+X007734Y002103D01*
+X007984Y002353D01*
+X007734Y002603D01*
+X008719Y002603D02*
+X008969Y002353D01*
+X008719Y002103D01*
+X008719Y001603D01*
+X008969Y001353D01*
+X008719Y001103D01*
+X008719Y000603D01*
+X008969Y000353D01*
+X009469Y000353D01*
+X009719Y000603D01*
+X009719Y001103D01*
+X009469Y001353D01*
+X009719Y001603D01*
+X009719Y002103D01*
+X009469Y002353D01*
+X009719Y002603D01*
+X009719Y003103D01*
+X009469Y003353D01*
+X008969Y003353D01*
+X008719Y003103D01*
+X008719Y002603D01*
+X015018Y002603D02*
+X015018Y003103D01*
+X015268Y003353D01*
+X015768Y003353D01*
+X016018Y003103D01*
+X016018Y002603D01*
+X015768Y002353D01*
+X016018Y002103D01*
+X016018Y001603D01*
+X015768Y001353D01*
+X016018Y001103D01*
+X016018Y000603D01*
+X015768Y000353D01*
+X015268Y000353D01*
+X015018Y000603D01*
+X015018Y001103D01*
+X015268Y001353D01*
+X015018Y001603D01*
+X015018Y002103D01*
+X015268Y002353D01*
+X015018Y002603D01*
+X016002Y002603D02*
+X016002Y003103D01*
+X016252Y003353D01*
+X016752Y003353D01*
+X017002Y003103D01*
+X017002Y002603D01*
+X016752Y002353D01*
+X017002Y002103D01*
+X017002Y001603D01*
+X016752Y001353D01*
+X017002Y001103D01*
+X017002Y000603D01*
+X016752Y000353D01*
+X016252Y000353D01*
+X016002Y000603D01*
+X016002Y001103D01*
+X016252Y001353D01*
+X016002Y001603D01*
+X016002Y002103D01*
+X016252Y002353D01*
+X016002Y002603D01*
+X016986Y002603D02*
+X016986Y003103D01*
+X017236Y003353D01*
+X017736Y003353D01*
+X017986Y003103D01*
+X017986Y002603D01*
+X017736Y002353D01*
+X017986Y002103D01*
+X017986Y001603D01*
+X017736Y001353D01*
+X017986Y001103D01*
+X017986Y000603D01*
+X017736Y000353D01*
+X017236Y000353D01*
+X016986Y000603D01*
+X016986Y001103D01*
+X017236Y001353D01*
+X016986Y001603D01*
+X016986Y002103D01*
+X017236Y002353D01*
+X016986Y002603D01*
+X017971Y002603D02*
+X017971Y003103D01*
+X018221Y003353D01*
+X018721Y003353D01*
+X018971Y003103D01*
+X018971Y002603D01*
+X018721Y002353D01*
+X018971Y002103D01*
+X018971Y001603D01*
+X018721Y001353D01*
+X018971Y001103D01*
+X018971Y000603D01*
+X018721Y000353D01*
+X018221Y000353D01*
+X017971Y000603D01*
+X017971Y001103D01*
+X018221Y001353D01*
+X017971Y001603D01*
+X017971Y002103D01*
+X018221Y002353D01*
+X017971Y002603D01*
+X018955Y002603D02*
+X018955Y003103D01*
+X019205Y003353D01*
+X019705Y003353D01*
+X019955Y003103D01*
+X019955Y002603D01*
+X019705Y002353D01*
+X019955Y002103D01*
+X019955Y001603D01*
+X019705Y001353D01*
+X019955Y001103D01*
+X019955Y000603D01*
+X019705Y000353D01*
+X019205Y000353D01*
+X018955Y000603D01*
+X018955Y001103D01*
+X019205Y001353D01*
+X018955Y001603D01*
+X018955Y002103D01*
+X019205Y002353D01*
+X018955Y002603D01*
+X019939Y002603D02*
+X019939Y003103D01*
+X020189Y003353D01*
+X020689Y003353D01*
+X020939Y003103D01*
+X020939Y002603D01*
+X020689Y002353D01*
+X020939Y002103D01*
+X020939Y001603D01*
+X020689Y001353D01*
+X020939Y001103D01*
+X020939Y000603D01*
+X020689Y000353D01*
+X020189Y000353D01*
+X019939Y000603D01*
+X019939Y001103D01*
+X020189Y001353D01*
+X019939Y001603D01*
+X019939Y002103D01*
+X020189Y002353D01*
+X019939Y002603D01*
+X020923Y002603D02*
+X020923Y003103D01*
+X021173Y003353D01*
+X021673Y003353D01*
+X021923Y003103D01*
+X021923Y002603D01*
+X021673Y002353D01*
+X021923Y002103D01*
+X021923Y001603D01*
+X021673Y001353D01*
+X021923Y001103D01*
+X021923Y000603D01*
+X021673Y000353D01*
+X021173Y000353D01*
+X020923Y000603D01*
+X020923Y001103D01*
+X021173Y001353D01*
+X020923Y001603D01*
+X020923Y002103D01*
+X021173Y002353D01*
+X020923Y002603D01*
+X021908Y002603D02*
+X021908Y003103D01*
+X022158Y003353D01*
+X022658Y003353D01*
+X022908Y003103D01*
+X022908Y002603D01*
+X022658Y002353D01*
+X022908Y002103D01*
+X022908Y001603D01*
+X022658Y001353D01*
+X022908Y001103D01*
+X022908Y000603D01*
+X022658Y000353D01*
+X022158Y000353D01*
+X021908Y000603D01*
+X021908Y001103D01*
+X022158Y001353D01*
+X021908Y001603D01*
+X021908Y002103D01*
+X022158Y002353D01*
+X021908Y002603D01*
+X022892Y002603D02*
+X023142Y002353D01*
+X022892Y002103D01*
+X022892Y001603D01*
+X023142Y001353D01*
+X022892Y001103D01*
+X022892Y000603D01*
+X023142Y000353D01*
+X023642Y000353D01*
+X023892Y000603D01*
+X023892Y001103D01*
+X023642Y001353D01*
+X023892Y001603D01*
+X023892Y002103D01*
+X023642Y002353D01*
+X023892Y002603D01*
+X023892Y003103D01*
+X023642Y003353D01*
+X023142Y003353D01*
+X022892Y003103D01*
+X022892Y002603D01*
+X023876Y002603D02*
+X023876Y003103D01*
+X024126Y003353D01*
+X024626Y003353D01*
+X024876Y003103D01*
+X024876Y002603D01*
+X024626Y002353D01*
+X024876Y002103D01*
+X024876Y001603D01*
+X024626Y001353D01*
+X024876Y001103D01*
+X024876Y000603D01*
+X024626Y000353D01*
+X024126Y000353D01*
+X023876Y000603D01*
+X023876Y001103D01*
+X024126Y001353D01*
+X023876Y001603D01*
+X023876Y002103D01*
+X024126Y002353D01*
+X023876Y002603D01*
+X024860Y002603D02*
+X024860Y003103D01*
+X025110Y003353D01*
+X025610Y003353D01*
+X025860Y003103D01*
+X025860Y002603D01*
+X025610Y002353D01*
+X025860Y002103D01*
+X025860Y001603D01*
+X025610Y001353D01*
+X025860Y001103D01*
+X025860Y000603D01*
+X025610Y000353D01*
+X025110Y000353D01*
+X024860Y000603D01*
+X024860Y001103D01*
+X025110Y001353D01*
+X024860Y001603D01*
+X024860Y002103D01*
+X025110Y002353D01*
+X024860Y002603D01*
+X025845Y002603D02*
+X025845Y003103D01*
+X026095Y003353D01*
+X026595Y003353D01*
+X026845Y003103D01*
+X026845Y002603D01*
+X026595Y002353D01*
+X026845Y002103D01*
+X026845Y001603D01*
+X026595Y001353D01*
+X026845Y001103D01*
+X026845Y000603D01*
+X026595Y000353D01*
+X026095Y000353D01*
+X025845Y000603D01*
+X025845Y001103D01*
+X026095Y001353D01*
+X025845Y001603D01*
+X025845Y002103D01*
+X026095Y002353D01*
+X025845Y002603D01*
+X025449Y007900D02*
+X025449Y008215D01*
+X025685Y008215D01*
+X026315Y008215D02*
+X026551Y008215D01*
+X026551Y007900D01*
+X007802Y008273D02*
+X005222Y008273D01*
+X005222Y009573D01*
+X007802Y009573D01*
+X007802Y008273D01*
+D15*
+X021815Y009101D02*
+X021817Y009121D01*
+X021822Y009141D01*
+X021831Y009159D01*
+X021844Y009175D01*
+X021859Y009189D01*
+X021876Y009199D01*
+X021895Y009207D01*
+X021915Y009211D01*
+X021935Y009211D01*
+X021955Y009207D01*
+X021974Y009199D01*
+X021991Y009189D01*
+X022006Y009175D01*
+X022019Y009159D01*
+X022028Y009141D01*
+X022033Y009121D01*
+X022035Y009101D01*
+X022033Y009081D01*
+X022028Y009061D01*
+X022019Y009043D01*
+X022006Y009027D01*
+X021991Y009013D01*
+X021974Y009003D01*
+X021955Y008995D01*
+X021935Y008991D01*
+X021915Y008991D01*
+X021895Y008995D01*
+X021876Y009003D01*
+X021859Y009013D01*
+X021844Y009027D01*
+X021831Y009043D01*
+X021822Y009061D01*
+X021817Y009081D01*
+X021815Y009101D01*
+D16*
+X000341Y000853D02*
+X000341Y000262D01*
+X004671Y000262D01*
+X004671Y004199D01*
+X000341Y004199D01*
+X000341Y003609D01*
+X001364Y003609D01*
+X001364Y002821D01*
+X000341Y002821D01*
+X000341Y003609D01*
+X000341Y002821D02*
+X000341Y001640D01*
+X001364Y001640D01*
+X001364Y000853D01*
+X000341Y000853D01*
+X000341Y001640D01*
+X007103Y006296D02*
+X007105Y006318D01*
+X007111Y006340D01*
+X007120Y006360D01*
+X007133Y006378D01*
+X007149Y006394D01*
+X007167Y006407D01*
+X007187Y006416D01*
+X007209Y006422D01*
+X007231Y006424D01*
+X007253Y006422D01*
+X007275Y006416D01*
+X007295Y006407D01*
+X007313Y006394D01*
+X007329Y006378D01*
+X007342Y006360D01*
+X007351Y006340D01*
+X007357Y006318D01*
+X007359Y006296D01*
+X007357Y006274D01*
+X007351Y006252D01*
+X007342Y006232D01*
+X007329Y006214D01*
+X007313Y006198D01*
+X007295Y006185D01*
+X007275Y006176D01*
+X007253Y006170D01*
+X007231Y006168D01*
+X007209Y006170D01*
+X007187Y006176D01*
+X007167Y006185D01*
+X007149Y006198D01*
+X007133Y006214D01*
+X007120Y006232D01*
+X007111Y006252D01*
+X007105Y006274D01*
+X007103Y006296D01*
+X005758Y012768D02*
+X005758Y012855D01*
+X005758Y012768D02*
+X011695Y012768D01*
+X011695Y013886D01*
+X014715Y013886D02*
+X014715Y012768D01*
+X020652Y012768D01*
+X020652Y012855D01*
+X020652Y013973D02*
+X020652Y016768D01*
+X020652Y017886D02*
+X020652Y017973D01*
+X014715Y017973D01*
+X014715Y016855D01*
+X011695Y016855D02*
+X011695Y017973D01*
+X005758Y017973D01*
+X005758Y017886D01*
+X005758Y016768D02*
+X005758Y013973D01*
+X022075Y013303D02*
+X022075Y018028D01*
+X026776Y018028D01*
+X026776Y013303D01*
+X022075Y013303D01*
+D17*
+X022138Y013252D02*
+X022292Y013099D01*
+X022292Y012792D01*
+X022292Y013022D02*
+X021985Y013022D01*
+X021985Y013099D02*
+X022138Y013252D01*
+X021985Y013099D02*
+X021985Y012792D01*
+X021755Y012792D02*
+X021755Y013252D01*
+X021525Y013022D01*
+X021832Y013022D01*
+X026025Y013099D02*
+X026178Y013252D01*
+X026178Y012792D01*
+X026025Y012792D02*
+X026332Y012792D01*
+X026485Y012792D02*
+X026485Y013099D01*
+X026638Y013252D01*
+X026792Y013099D01*
+X026792Y012792D01*
+X026792Y013022D02*
+X026485Y013022D01*
+X022215Y017579D02*
+X021985Y017579D01*
+X021985Y018040D01*
+X022215Y018040D01*
+X022292Y017963D01*
+X022292Y017886D01*
+X022215Y017809D01*
+X021985Y017809D01*
+X021832Y017809D02*
+X021525Y017809D01*
+X021755Y018040D01*
+X021755Y017579D01*
+X022215Y017579D02*
+X022292Y017656D01*
+X022292Y017733D01*
+X022215Y017809D01*
+X026025Y018079D02*
+X026332Y018079D01*
+X026485Y018079D02*
+X026715Y018079D01*
+X026792Y018156D01*
+X026792Y018233D01*
+X026715Y018309D01*
+X026485Y018309D01*
+X026485Y018079D02*
+X026485Y018540D01*
+X026715Y018540D01*
+X026792Y018463D01*
+X026792Y018386D01*
+X026715Y018309D01*
+X026178Y018540D02*
+X026178Y018079D01*
+X026025Y018386D02*
+X026178Y018540D01*
+D18*
+X025164Y013069D02*
+X025164Y013045D01*
+X023343Y013069D02*
+X023343Y013045D01*
+X024622Y007754D02*
+X024622Y007730D01*
+X023392Y007311D02*
+X023392Y007287D01*
+X022162Y007681D02*
+X022162Y007705D01*
+M02*
diff --git a/gyro_board/schematic/gyro_motherboard_1.19.2012/gyro_motherboard.GTP b/gyro_board/schematic/gyro_motherboard_1.19.2012/gyro_motherboard.GTP
new file mode 100644
index 0000000..5a1be3d
--- /dev/null
+++ b/gyro_board/schematic/gyro_motherboard_1.19.2012/gyro_motherboard.GTP
@@ -0,0 +1,242 @@
+G75*
+G70*
+%OFA0B0*%
+%FSLAX24Y24*%
+%IPPOS*%
+%LPD*%
+%AMOC8*
+5,1,8,0,0,1.08239X$1,22.5*
+%
+%ADD10R,0.0394X0.0433*%
+%ADD11R,0.0472X0.0472*%
+%ADD12R,0.0472X0.0315*%
+%ADD13R,0.1014X0.0748*%
+%ADD14R,0.0225X0.0666*%
+%ADD15R,0.0500X0.1000*%
+%ADD16R,0.2028X0.0299*%
+%ADD17R,0.1555X0.0965*%
+%ADD18R,0.0104X0.0189*%
+%ADD19R,0.0926X0.0138*%
+%ADD20R,0.0630X0.0138*%
+%ADD21R,0.0315X0.0472*%
+%ADD22R,0.0433X0.0394*%
+%ADD23R,0.0748X0.1339*%
+%ADD24R,0.0315X0.0354*%
+%ADD25R,0.2106X0.3362*%
+%ADD26R,0.0350X0.1205*%
+%ADD27R,0.0315X0.0236*%
+%ADD28R,0.0480X0.0880*%
+%ADD29R,0.1417X0.0866*%
+D10*
+X005233Y003569D03*
+X005233Y004238D03*
+X013648Y010114D03*
+X013648Y010784D03*
+X017536Y008421D03*
+X017536Y007752D03*
+X018372Y007752D03*
+X018372Y008421D03*
+X019209Y008421D03*
+X019209Y007752D03*
+D11*
+X005233Y002211D03*
+X005233Y003038D03*
+X017536Y006345D03*
+X018372Y006345D03*
+X019209Y006345D03*
+X019209Y007171D03*
+X018372Y007171D03*
+X017536Y007171D03*
+X014288Y012693D03*
+X014288Y013520D03*
+D12*
+X008530Y008884D03*
+X008530Y008175D03*
+X006857Y011768D03*
+X006857Y012477D03*
+X021079Y007457D03*
+X021079Y006748D03*
+X010301Y001551D03*
+X010301Y000843D03*
+X005479Y000892D03*
+X005479Y001601D03*
+D13*
+X008495Y009947D03*
+X008495Y011049D03*
+X010631Y011049D03*
+X010631Y009947D03*
+D14*
+X021986Y008522D03*
+X022486Y008522D03*
+X022986Y008522D03*
+X023486Y008522D03*
+X023986Y008522D03*
+X024486Y008522D03*
+X024986Y008522D03*
+X025486Y008522D03*
+X025486Y012278D03*
+X024986Y012278D03*
+X024486Y012278D03*
+X023986Y012278D03*
+X023486Y012278D03*
+X022986Y012278D03*
+X022486Y012278D03*
+X021986Y012278D03*
+D15*
+X022925Y013973D03*
+X023925Y013973D03*
+X024925Y013973D03*
+X025925Y013973D03*
+X025925Y017359D03*
+X024925Y017359D03*
+X023925Y017359D03*
+X022925Y017359D03*
+D16*
+X014481Y016620D03*
+X014481Y016120D03*
+X014481Y015620D03*
+X014481Y015120D03*
+X014481Y014620D03*
+X014481Y014120D03*
+X011929Y014120D03*
+X011929Y014620D03*
+X011929Y015120D03*
+X011929Y015620D03*
+X011929Y016120D03*
+X011929Y016620D03*
+D17*
+X005404Y017329D03*
+X005404Y013412D03*
+X021006Y013412D03*
+X021006Y017329D03*
+D18*
+X012860Y005081D03*
+X012664Y005081D03*
+X012467Y005081D03*
+X012270Y005081D03*
+X012073Y005081D03*
+X011876Y005081D03*
+X011876Y004597D03*
+X012073Y004597D03*
+X012270Y004597D03*
+X012467Y004597D03*
+X012664Y004597D03*
+X012860Y004597D03*
+X015173Y004392D03*
+X015370Y004392D03*
+X015567Y004392D03*
+X015764Y004392D03*
+X015961Y004392D03*
+X016158Y004392D03*
+X016158Y003908D03*
+X015961Y003908D03*
+X015764Y003908D03*
+X015567Y003908D03*
+X015370Y003908D03*
+X015173Y003908D03*
+X017486Y003711D03*
+X017683Y003711D03*
+X017880Y003711D03*
+X018077Y003711D03*
+X018274Y003711D03*
+X018471Y003711D03*
+X018471Y004195D03*
+X018274Y004195D03*
+X018077Y004195D03*
+X017880Y004195D03*
+X017683Y004195D03*
+X017486Y004195D03*
+X022998Y004096D03*
+X023195Y004096D03*
+X023392Y004096D03*
+X023589Y004096D03*
+X023786Y004096D03*
+X023983Y004096D03*
+X023983Y003613D03*
+X023786Y003613D03*
+X023589Y003613D03*
+X023392Y003613D03*
+X023195Y003613D03*
+X022998Y003613D03*
+X008038Y003760D03*
+X007841Y003760D03*
+X007644Y003760D03*
+X007447Y003760D03*
+X007250Y003760D03*
+X007053Y003760D03*
+X007053Y004244D03*
+X007250Y004244D03*
+X007447Y004244D03*
+X007644Y004244D03*
+X007841Y004244D03*
+X008038Y004244D03*
+D19*
+X007546Y004002D03*
+X012368Y004839D03*
+X015666Y004150D03*
+X017979Y003953D03*
+X023490Y003855D03*
+D20*
+X008845Y004760D03*
+X008845Y005016D03*
+X008845Y005272D03*
+X008845Y005528D03*
+X008845Y005784D03*
+X008845Y006040D03*
+X008845Y006296D03*
+X006640Y006296D03*
+X006640Y006040D03*
+X006640Y005784D03*
+X006640Y005528D03*
+X006640Y005272D03*
+X006640Y005016D03*
+X006640Y004760D03*
+D21*
+X007388Y006857D03*
+X008097Y006857D03*
+X012211Y010892D03*
+X012920Y010892D03*
+X020577Y012270D03*
+X021286Y012270D03*
+X023038Y006561D03*
+X023746Y006561D03*
+D22*
+X023727Y007299D03*
+X023057Y007299D03*
+X022496Y007693D03*
+X021827Y007693D03*
+X024288Y007742D03*
+X024957Y007742D03*
+X024829Y013057D03*
+X025498Y013057D03*
+X023677Y013057D03*
+X023008Y013057D03*
+D23*
+X024593Y006561D03*
+X026128Y006561D03*
+D24*
+X026374Y007546D03*
+X025626Y007546D03*
+X026000Y008372D03*
+D25*
+X002526Y008010D03*
+D26*
+X002526Y005134D03*
+X003026Y005134D03*
+X003526Y005134D03*
+X004026Y005134D03*
+X002026Y005134D03*
+X001526Y005134D03*
+X001026Y005134D03*
+D27*
+X010252Y008648D03*
+X010252Y009199D03*
+X011630Y009199D03*
+X011630Y008648D03*
+D28*
+X007422Y007703D03*
+X006512Y007703D03*
+X005602Y007703D03*
+D29*
+X006512Y010144D03*
+M02*
diff --git a/gyro_board/schematic/gyro_motherboard_1.19.2012/gyro_motherboard.GTS b/gyro_board/schematic/gyro_motherboard_1.19.2012/gyro_motherboard.GTS
new file mode 100644
index 0000000..5e8f467
--- /dev/null
+++ b/gyro_board/schematic/gyro_motherboard_1.19.2012/gyro_motherboard.GTS
@@ -0,0 +1,333 @@
+G75*
+G70*
+%OFA0B0*%
+%FSLAX24Y24*%
+%IPPOS*%
+%LPD*%
+%AMOC8*
+5,1,8,0,0,1.08239X$1,22.5*
+%
+%ADD10R,0.0474X0.0513*%
+%ADD11R,0.0552X0.0552*%
+%ADD12R,0.0552X0.0395*%
+%ADD13R,0.1094X0.0828*%
+%ADD14C,0.0820*%
+%ADD15R,0.0820X0.0820*%
+%ADD16R,0.0305X0.0746*%
+%ADD17R,0.0580X0.1080*%
+%ADD18R,0.0682X0.0682*%
+%ADD19R,0.1386X0.1386*%
+%ADD20R,0.2108X0.0379*%
+%ADD21R,0.1635X0.1045*%
+%ADD22R,0.0184X0.0269*%
+%ADD23R,0.1006X0.0218*%
+%ADD24R,0.0710X0.0218*%
+%ADD25R,0.0395X0.0552*%
+%ADD26R,0.0513X0.0474*%
+%ADD27R,0.0828X0.1419*%
+%ADD28R,0.0395X0.0434*%
+%ADD29R,0.2186X0.3442*%
+%ADD30R,0.0430X0.1285*%
+%ADD31C,0.0907*%
+%ADD32R,0.0395X0.0316*%
+%ADD33R,0.0560X0.0960*%
+%ADD34R,0.1497X0.0946*%
+%ADD35C,0.0595*%
+D10*
+X005233Y003569D03*
+X005233Y004238D03*
+X013648Y010114D03*
+X013648Y010784D03*
+X017536Y008421D03*
+X017536Y007752D03*
+X018372Y007752D03*
+X018372Y008421D03*
+X019209Y008421D03*
+X019209Y007752D03*
+D11*
+X019209Y007171D03*
+X018372Y007171D03*
+X017536Y007171D03*
+X017536Y006345D03*
+X018372Y006345D03*
+X019209Y006345D03*
+X014288Y012693D03*
+X014288Y013520D03*
+X005233Y003038D03*
+X005233Y002211D03*
+D12*
+X005479Y001601D03*
+X005479Y000892D03*
+X010301Y000843D03*
+X010301Y001551D03*
+X008530Y008175D03*
+X008530Y008884D03*
+X006857Y011768D03*
+X006857Y012477D03*
+X021079Y007457D03*
+X021079Y006748D03*
+D13*
+X010631Y009947D03*
+X010631Y011049D03*
+X008495Y011049D03*
+X008495Y009947D03*
+D14*
+X008695Y012171D03*
+X007695Y012171D03*
+X009695Y012171D03*
+X011187Y003853D03*
+X011187Y002853D03*
+X012270Y002853D03*
+X012270Y003853D03*
+X013353Y003853D03*
+X013353Y002853D03*
+X014435Y002853D03*
+X015518Y002853D03*
+X016502Y002853D03*
+X017486Y002853D03*
+X018471Y002853D03*
+X019455Y002853D03*
+X020439Y002853D03*
+X021423Y002853D03*
+X022408Y002853D03*
+X023392Y002853D03*
+X024376Y002853D03*
+X025360Y002853D03*
+X026345Y002853D03*
+X026345Y001853D03*
+X025360Y001853D03*
+X024376Y001853D03*
+X023392Y001853D03*
+X022408Y001853D03*
+X021423Y001853D03*
+X020439Y001853D03*
+X019455Y001853D03*
+X018471Y001853D03*
+X017486Y001853D03*
+X016502Y001853D03*
+X015518Y001853D03*
+X014435Y001853D03*
+X013353Y001853D03*
+X012270Y001853D03*
+X011187Y001853D03*
+X009219Y001853D03*
+X008234Y001853D03*
+X007250Y001853D03*
+X006266Y001853D03*
+X006266Y002853D03*
+X007250Y002853D03*
+X008234Y002853D03*
+X009219Y002853D03*
+X009219Y000853D03*
+X008234Y000853D03*
+X007250Y000853D03*
+X006266Y000853D03*
+X014435Y003853D03*
+X015518Y000853D03*
+X016502Y000853D03*
+X017486Y000853D03*
+X018471Y000853D03*
+X019455Y000853D03*
+X020439Y000853D03*
+X021423Y000853D03*
+X022408Y000853D03*
+X023392Y000853D03*
+X024376Y000853D03*
+X025360Y000853D03*
+X026345Y000853D03*
+D15*
+X014435Y000853D03*
+X013353Y000853D03*
+X012270Y000853D03*
+X011187Y000853D03*
+X010695Y012171D03*
+D16*
+X021986Y012278D03*
+X022486Y012278D03*
+X022986Y012278D03*
+X023486Y012278D03*
+X023986Y012278D03*
+X024486Y012278D03*
+X024986Y012278D03*
+X025486Y012278D03*
+X025486Y008522D03*
+X024986Y008522D03*
+X024486Y008522D03*
+X023986Y008522D03*
+X023486Y008522D03*
+X022986Y008522D03*
+X022486Y008522D03*
+X021986Y008522D03*
+D17*
+X022925Y013973D03*
+X023925Y013973D03*
+X024925Y013973D03*
+X025925Y013973D03*
+X025925Y017359D03*
+X024925Y017359D03*
+X023925Y017359D03*
+X022925Y017359D03*
+D18*
+X003018Y014829D03*
+X003018Y013845D03*
+X001738Y013845D03*
+X001738Y014829D03*
+D19*
+X002112Y016707D03*
+X002112Y011967D03*
+D20*
+X011929Y014120D03*
+X011929Y014620D03*
+X011929Y015120D03*
+X011929Y015620D03*
+X011929Y016120D03*
+X011929Y016620D03*
+X014481Y016620D03*
+X014481Y016120D03*
+X014481Y015620D03*
+X014481Y015120D03*
+X014481Y014620D03*
+X014481Y014120D03*
+D21*
+X021006Y013412D03*
+X021006Y017329D03*
+X005404Y017329D03*
+X005404Y013412D03*
+D22*
+X011876Y005081D03*
+X012073Y005081D03*
+X012270Y005081D03*
+X012467Y005081D03*
+X012664Y005081D03*
+X012860Y005081D03*
+X012860Y004597D03*
+X012664Y004597D03*
+X012467Y004597D03*
+X012270Y004597D03*
+X012073Y004597D03*
+X011876Y004597D03*
+X015173Y004392D03*
+X015370Y004392D03*
+X015567Y004392D03*
+X015764Y004392D03*
+X015961Y004392D03*
+X016158Y004392D03*
+X016158Y003908D03*
+X015961Y003908D03*
+X015764Y003908D03*
+X015567Y003908D03*
+X015370Y003908D03*
+X015173Y003908D03*
+X017486Y003711D03*
+X017683Y003711D03*
+X017880Y003711D03*
+X018077Y003711D03*
+X018274Y003711D03*
+X018471Y003711D03*
+X018471Y004195D03*
+X018274Y004195D03*
+X018077Y004195D03*
+X017880Y004195D03*
+X017683Y004195D03*
+X017486Y004195D03*
+X022998Y004096D03*
+X023195Y004096D03*
+X023392Y004096D03*
+X023589Y004096D03*
+X023786Y004096D03*
+X023983Y004096D03*
+X023983Y003613D03*
+X023786Y003613D03*
+X023589Y003613D03*
+X023392Y003613D03*
+X023195Y003613D03*
+X022998Y003613D03*
+X008038Y003760D03*
+X007841Y003760D03*
+X007644Y003760D03*
+X007447Y003760D03*
+X007250Y003760D03*
+X007053Y003760D03*
+X007053Y004244D03*
+X007250Y004244D03*
+X007447Y004244D03*
+X007644Y004244D03*
+X007841Y004244D03*
+X008038Y004244D03*
+D23*
+X007546Y004002D03*
+X012368Y004839D03*
+X015666Y004150D03*
+X017979Y003953D03*
+X023490Y003855D03*
+D24*
+X008845Y004760D03*
+X008845Y005016D03*
+X008845Y005272D03*
+X008845Y005528D03*
+X008845Y005784D03*
+X008845Y006040D03*
+X008845Y006296D03*
+X006640Y006296D03*
+X006640Y006040D03*
+X006640Y005784D03*
+X006640Y005528D03*
+X006640Y005272D03*
+X006640Y005016D03*
+X006640Y004760D03*
+D25*
+X007388Y006857D03*
+X008097Y006857D03*
+X012211Y010892D03*
+X012920Y010892D03*
+X020577Y012270D03*
+X021286Y012270D03*
+X023038Y006561D03*
+X023746Y006561D03*
+D26*
+X023727Y007299D03*
+X023057Y007299D03*
+X022496Y007693D03*
+X021827Y007693D03*
+X024288Y007742D03*
+X024957Y007742D03*
+X024829Y013057D03*
+X025498Y013057D03*
+X023677Y013057D03*
+X023008Y013057D03*
+D27*
+X024593Y006561D03*
+X026128Y006561D03*
+D28*
+X026374Y007546D03*
+X025626Y007546D03*
+X026000Y008372D03*
+D29*
+X002526Y008010D03*
+D30*
+X002526Y005134D03*
+X003026Y005134D03*
+X003526Y005134D03*
+X004026Y005134D03*
+X002026Y005134D03*
+X001526Y005134D03*
+X001026Y005134D03*
+D31*
+X002998Y001246D02*
+X003825Y001246D01*
+X003825Y003215D02*
+X002998Y003215D01*
+D32*
+X010252Y008648D03*
+X010252Y009199D03*
+X011630Y009199D03*
+X011630Y008648D03*
+D33*
+X007422Y007703D03*
+X006512Y007703D03*
+X005602Y007703D03*
+D34*
+X006512Y010144D03*
+D35*
+X010351Y002329D03*
+M02*
diff --git a/gyro_board/schematic/gyro_motherboard_1.19.2012/gyro_motherboard.TXT b/gyro_board/schematic/gyro_motherboard_1.19.2012/gyro_motherboard.TXT
new file mode 100644
index 0000000..4584106
--- /dev/null
+++ b/gyro_board/schematic/gyro_motherboard_1.19.2012/gyro_motherboard.TXT
@@ -0,0 +1,267 @@
+%
+M48
+M72
+T01C0.0157
+T02C0.0197
+T03C0.0236
+T04C0.0315
+T05C0.0362
+T06C0.0400
+T07C0.0551
+T08C0.0906
+%
+T01
+X10154Y4888
+X10794Y5479
+X11138Y6512
+X11679Y7103
+X12811Y6660
+X13353Y7398
+X13156Y8628
+X13549Y9022
+X13500Y9612
+X13057Y9957
+X11876Y9760
+X10695Y9219
+X9268Y9170
+X9859Y8087
+X8825Y7742
+X7546Y8727
+X6807Y8628
+X6168Y8923
+X5626Y9317
+X7546Y9957
+X7546Y10597
+X7103Y11089
+X7693Y11433
+X9268Y10547
+X9809Y11040
+X11384Y12073
+X11778Y11187
+X13303Y11286
+X13549Y11729
+X13992Y11925
+X15912Y11925
+X16896Y12122
+X16207Y13500
+X16059Y14091
+X15321Y13549
+X13549Y13549
+X12516Y13549
+X13205Y15370
+X13205Y15862
+X13697Y17634
+X12122Y17683
+X10351Y17683
+X10154Y15764
+X7841Y15862
+X7890Y17683
+X8166Y13727
+X8677Y13500
+X5823Y11483
+X15370Y17634
+X16847Y16453
+X17687Y16748
+X18471Y15862
+X19307Y15862
+X18864Y16650
+X18618Y17683
+X20439Y16256
+X21374Y16010
+X20734Y15469
+X22359Y16010
+X22900Y15420
+X23441Y16010
+X23884Y15420
+X24425Y16059
+X24918Y15420
+X25459Y16010
+X25902Y15420
+X26492Y14829
+X26492Y13845
+X26443Y13254
+X26492Y12418
+X25508Y11679
+X25016Y11679
+X26542Y11433
+X26492Y10646
+X26542Y9859
+X26492Y9071
+X25459Y9416
+X24967Y9416
+X23687Y7939
+X23097Y7890
+X21276Y8234
+X22457Y9416
+X22998Y9416
+X20538Y10006
+X20439Y10892
+X20046Y11138
+X20538Y11532
+X20144Y11925
+X19307Y12860
+X18864Y14829
+X17290Y15666
+X15764Y15764
+X15764Y15223
+X15813Y10646
+X17093Y10498
+X17536Y10498
+X17536Y10006
+X17979Y9957
+X17782Y9268
+X17929Y8825
+X19160Y9219
+X16847Y7693
+X15862Y5429
+X15715Y4986
+X15321Y4790
+X16428Y4716
+X16945Y4642
+X17462Y4863
+X17929Y4839
+X18372Y4888
+X18717Y4593
+X20439Y3855
+X20882Y3510
+X20784Y4248
+X20734Y5479
+X21670Y5675
+X22162Y5823
+X21916Y6315
+X21571Y6660
+X23589Y4544
+X24721Y4347
+X25065Y3953
+X25508Y4839
+X26394Y5183
+X26246Y4150
+X22408Y11679
+X21916Y11679
+X24229Y13057
+X24425Y13845
+X22211Y13845
+X26443Y15912
+T02
+X12762Y5675
+X12270Y5626
+X11778Y5577
+X11286Y5085
+X13205Y4790
+X13254Y5331
+X8776Y4248
+X8776Y3569
+X6709Y4248
+X7299Y6168
+X8185Y6168
+X1542Y3855
+T03
+X2034Y4199
+X2280Y3707
+X3018Y4150
+X3658Y4002
+X5183Y4888
+X4691Y6020
+X4445Y7004
+X4002Y7447
+X4494Y7792
+X4002Y8136
+X4445Y8530
+X4002Y8973
+X4051Y10006
+X3412Y10006
+X2772Y10006
+X2132Y10006
+X1443Y10006
+X754Y10006
+X754Y9120
+X754Y8530
+X1246Y3116
+X14731Y12171
+X15321Y12171
+X22112Y13156
+X25262Y7004
+X25262Y6118
+T04
+X10351Y2329
+T05
+X3018Y13845
+X3018Y14829
+X1738Y14829
+X1738Y13845
+T06
+X7695Y12171
+X8695Y12171
+X9695Y12171
+X10695Y12171
+X11187Y3853
+X11187Y2853
+X12270Y2853
+X12270Y3853
+X13353Y3853
+X13353Y2853
+X14435Y2853
+X15518Y2853
+X16502Y2853
+X17486Y2853
+X18471Y2853
+X19455Y2853
+X20439Y2853
+X21423Y2853
+X22408Y2853
+X23392Y2853
+X24376Y2853
+X25360Y2853
+X26345Y2853
+X26345Y1853
+X25360Y1853
+X24376Y1853
+X23392Y1853
+X22408Y1853
+X21423Y1853
+X20439Y1853
+X19455Y1853
+X18471Y1853
+X17486Y1853
+X16502Y1853
+X15518Y1853
+X14435Y1853
+X13353Y1853
+X12270Y1853
+X11187Y1853
+X11187Y853
+X12270Y853
+X13353Y853
+X14435Y853
+X15518Y853
+X16502Y853
+X17486Y853
+X18471Y853
+X19455Y853
+X20439Y853
+X21423Y853
+X22408Y853
+X23392Y853
+X24376Y853
+X25360Y853
+X26345Y853
+X14435Y3853
+X9219Y2853
+X8234Y2853
+X7250Y2853
+X6266Y2853
+X6266Y1853
+X7250Y1853
+X8234Y1853
+X9219Y1853
+X9219Y853
+X8234Y853
+X7250Y853
+X6266Y853
+T07
+X3412Y1246
+X3412Y3215
+T08
+X2112Y11967
+X2112Y16707
+M30
diff --git a/gyro_board/schematic/gyro_motherboard_1.19.2012/gyro_motherboard.ipc b/gyro_board/schematic/gyro_motherboard_1.19.2012/gyro_motherboard.ipc
new file mode 100644
index 0000000..c7ec27f
--- /dev/null
+++ b/gyro_board/schematic/gyro_motherboard_1.19.2012/gyro_motherboard.ipc
@@ -0,0 +1,689 @@
+C IPC-D-356 generated by EAGLE Version 5.11.0 Copyright (c) 1988-2010 CadSoft
+C Database /home/austin/local/robotics/frc971/2012/trunk/src/gyro_board/schematic/gyro_motherboard.brd -- Exported at 1/23/12 2:33 AM
+C
+P JOB EAGLE 5.11 NETLIST, DATE: 1/23/12 2:33 AM
+P UNITS CUST 0
+P DIM N
+3173.3V VIA D 15PA00X 12893Y 8366X 357Y 357
+3173.3V VIA D 15PA00X 13238Y 9350X 357Y 357
+3173.3V VIA D 15PA00X 13287Y 13287X 357Y 357
+3173.3V VIA D 15PA00X 13287Y 11466X 357Y 357
+3173.3V VIA D 15PA00X 15944Y 13238X 357Y 357
+3173.3V VIA D 15PA00X 16584Y 7431X 357Y 357
+3175V VIA D 23PA00X 4429Y 5757X 436Y 436
+3175V VIA D 15PA00X 8415Y 13238X 357Y 357
+3175V VIA D 15PA00X 17027Y 15403X 357Y 357
+3175V VIA D 15PA00X 21309Y 6397X 357Y 357
+317BTLDR VIA D 15PA00X 16633Y 11860X 357Y 357
+317CANH VIA D 15PA00X 15501Y 14960X 357Y 357
+317CANH VIA D 15PA00X 17425Y 16486X 357Y 357
+317CANH VIA D 15PA00X 12942Y 15600X 357Y 357
+317CANL VIA D 15PA00X 15501Y 15501X 357Y 357
+317CANL VIA D 15PA00X 16584Y 16190X 357Y 357
+317CANL VIA D 15PA00X 12942Y 15108X 357Y 357
+317DBG VIA D 15PA00X 18897Y 8956X 357Y 357
+317DIO1 VIA D 15PA00X 16166Y 4453X 357Y 357
+317DIO2 VIA D 15PA00X 16683Y 4379X 357Y 357
+317DIO3 VIA D 15PA00X 17199Y 4601X 357Y 357
+317DIO4 VIA D 15PA00X 17667Y 4576X 357Y 357
+317DIO5 VIA D 15PA00X 18110Y 4625X 357Y 357
+317DIO6 VIA D 15PA00X 18454Y 4330X 357Y 357
+317DIO7 VIA D 15PA00X 20620Y 3248X 357Y 357
+317DIO8 VIA D 15PA00X 20177Y 3592X 357Y 357
+317DIO9 VIA D 15PA00X 20521Y 3986X 357Y 357
+317DIO10 VIA D 15PA00X 23326Y 4281X 357Y 357
+317DIO11 VIA D 15PA00X 24458Y 4084X 357Y 357
+317DIO12 VIA D 15PA00X 24803Y 3690X 357Y 357
+317DIP0 VIA D 15PA00X 25639Y 15157X 357Y 357
+317DIP1 VIA D 15PA00X 24655Y 15157X 357Y 357
+317DIP2 VIA D 15PA00X 23622Y 15157X 357Y 357
+317DIP3 VIA D 15PA00X 22637Y 15157X 357Y 357
+317ENC0A VIA D 19PA00X 11023Y 4822X 396Y 396
+317ENC0A VIA D 23PA00X 14468Y 11909X 436Y 436
+317ENC0B VIA D 19PA00X 11515Y 5314X 396Y 396
+317ENC0B VIA D 23PA00X 15059Y 11909X 436Y 436
+317ENC1A VIA D 19PA00X 12007Y 5364X 396Y 396
+317ENC1A VIA D 15PA00X 19881Y 11663X 357Y 357
+317ENC1B VIA D 19PA00X 12500Y 5413X 396Y 396
+317ENC1B VIA D 15PA00X 20275Y 11269X 357Y 357
+317ENC2A VIA D 19PA00X 12992Y 5068X 396Y 396
+317ENC2A VIA D 15PA00X 16830Y 10236X 357Y 357
+317ENC2B VIA D 19PA00X 12942Y 4527X 396Y 396
+317ENC2B VIA D 15PA00X 17273Y 10236X 357Y 357
+317ENC3A VIA D 15PA00X 17273Y 9744X 357Y 357
+317ENC3A VIA D 15PA00X 15059Y 4527X 357Y 357
+317ENC3B VIA D 15PA00X 17716Y 9694X 357Y 357
+317ENC3B VIA D 15PA00X 15452Y 4724X 357Y 357
+317ERR VIA D 15PA00X 17519Y 9005X 357Y 357
+317GND VIA D 19PA00X 8513Y 3307X 396Y 396
+317GND VIA D 31PA00X 10088Y 2066X 514Y 514
+317GND VIA D 23PA00X 492Y 9744X 436Y 436
+317GND VIA D 23PA00X 1181Y 9744X 436Y 436
+317GND VIA D 23PA00X 1870Y 9744X 436Y 436
+317GND VIA D 23PA00X 2509Y 9744X 436Y 436
+317GND VIA D 23PA00X 3149Y 9744X 436Y 436
+317GND VIA D 23PA00X 3789Y 9744X 436Y 436
+317GND VIA D 23PA00X 492Y 8858X 436Y 436
+317GND VIA D 23PA00X 4183Y 6742X 436Y 436
+317GND VIA D 23PA00X 3740Y 7185X 436Y 436
+317GND VIA D 23PA00X 3740Y 8710X 436Y 436
+317GND VIA D 23PA00X 492Y 8267X 436Y 436
+317GND VIA D 23PA00X 4183Y 8267X 436Y 436
+317GND VIA D 23PA00X 3740Y 7874X 436Y 436
+317GND VIA D 23PA00X 4232Y 7529X 436Y 436
+317GND VIA D 23PA00X 2017Y 3444X 436Y 436
+317GND VIA D 23PA00X 4921Y 4625X 436Y 436
+317GND VIA D 15PA00X 7903Y 13464X 357Y 357
+317GND VIA D 15PA00X 18356Y 17421X 357Y 357
+317GND VIA D 15PA00X 21653Y 6053X 357Y 357
+317GND VIA D 15PA00X 7431Y 11171X 357Y 357
+317GND VIA D 15PA00X 6840Y 10826X 357Y 357
+317GND VIA D 15PA00X 7283Y 10334X 357Y 357
+317GND VIA D 15PA00X 6545Y 8366X 357Y 357
+317GND VIA D 15PA00X 5364Y 9055X 357Y 357
+317GND VIA D 15PA00X 7283Y 8464X 357Y 357
+317GND VIA D 15PA00X 8562Y 7480X 357Y 357
+317GND VIA D 15PA00X 9596Y 7824X 357Y 357
+317GND VIA D 15PA00X 9005Y 8907X 357Y 357
+317GND VIA D 15PA00X 11417Y 6840X 357Y 357
+317GND VIA D 15PA00X 10875Y 6250X 357Y 357
+317GND VIA D 15PA00X 10531Y 5216X 357Y 357
+317GND VIA D 15PA00X 9891Y 4625X 357Y 357
+317GND VIA D 15PA00X 26230Y 8809X 357Y 357
+317GND VIA D 15PA00X 26279Y 9596X 357Y 357
+317GND VIA D 15PA00X 26230Y 10383X 357Y 357
+317GND VIA D 15PA00X 26279Y 11171X 357Y 357
+317GND VIA D 15PA00X 26230Y 12155X 357Y 357
+317GND VIA D 15PA00X 26181Y 12992X 357Y 357
+317GND VIA D 15PA00X 26181Y 15649X 357Y 357
+317GND VIA D 15PA00X 25196Y 15748X 357Y 357
+317GND VIA D 15PA00X 24163Y 15797X 357Y 357
+317GND VIA D 15PA00X 23179Y 15748X 357Y 357
+317GND VIA D 15PA00X 22096Y 15748X 357Y 357
+317GND VIA D 15PA00X 21112Y 15748X 357Y 357
+317GND VIA D 15PA00X 20177Y 15994X 357Y 357
+317GND VIA D 15PA00X 20472Y 15206X 357Y 357
+317GND VIA D 15PA00X 18602Y 16387X 357Y 357
+317GND VIA D 15PA00X 19045Y 15600X 357Y 357
+317GND VIA D 15PA00X 18208Y 15600X 357Y 357
+317GND VIA D 15PA00X 18602Y 14566X 357Y 357
+317GND VIA D 15PA00X 13435Y 17372X 357Y 357
+317GND VIA D 15PA00X 15108Y 17372X 357Y 357
+317GND VIA D 15PA00X 11860Y 17421X 357Y 357
+317GND VIA D 15PA00X 10088Y 17421X 357Y 357
+317GND VIA D 15PA00X 7627Y 17421X 357Y 357
+317GND VIA D 15PA00X 7578Y 15600X 357Y 357
+317GND VIA D 15PA00X 5561Y 11220X 357Y 357
+317GND VIA D 15PA00X 21899Y 5561X 357Y 357
+317GND VIA D 15PA00X 20472Y 5216X 357Y 357
+317GND VIA D 15PA00X 21407Y 5413X 357Y 357
+317GND VIA D 15PA00X 15600Y 5167X 357Y 357
+317GND VIA D 15PA00X 26131Y 4921X 357Y 357
+317GND VIA D 15PA00X 25246Y 4576X 357Y 357
+317GND VIA D 15PA00X 25984Y 3887X 357Y 357
+317GND VIA D 15PA00X 24163Y 13582X 357Y 357
+317GND VIA D 15PA00X 26230Y 13582X 357Y 357
+317GND VIA D 15PA00X 22194Y 9153X 357Y 357
+317GND VIA D 15PA00X 22736Y 9153X 357Y 357
+317GND VIA D 15PA00X 24704Y 9153X 357Y 357
+317GND VIA D 15PA00X 25196Y 9153X 357Y 357
+317GND VIA D 15PA00X 25246Y 11417X 357Y 357
+317GND VIA D 15PA00X 24753Y 11417X 357Y 357
+317GND VIA D 15PA00X 21653Y 11417X 357Y 357
+317GND VIA D 15PA00X 22145Y 11417X 357Y 357
+317GND VIA D 15PA00X 19045Y 12598X 357Y 357
+317GND VIA D 15PA00X 5905Y 8661X 357Y 357
+317GND VIA D 15PA00X 7283Y 9694X 357Y 357
+317GND VIA D 15PA00X 12253Y 13287X 357Y 357
+317GND VIA D 15PA00X 15797Y 13828X 357Y 357
+317GND VIA D 15PA00X 15551Y 10383X 357Y 357
+317GND VIA D 15PA00X 15649Y 11663X 357Y 357
+317GND VIA D 15PA00X 13730Y 11663X 357Y 357
+317GND VIA D 15PA00X 11515Y 10925X 357Y 357
+317GND VIA D 15PA00X 13287Y 8759X 357Y 357
+317GND VIA D 15PA00X 20177Y 10629X 357Y 357
+317GND VIA D 15PA00X 19783Y 10875X 357Y 357
+317GND VIA D 15PA00X 21948Y 13582X 357Y 357
+317GND VIA D 15PA00X 20275Y 9744X 357Y 357
+317GND VIA D 15PA00X 23966Y 12795X 357Y 357
+317GND VIA D 15PA00X 26230Y 14566X 357Y 357
+317HB VIA D 15PA00X 17667Y 8562X 357Y 357
+317MISO VIA D 15PA00X 23425Y 7677X 357Y 357
+317MOSI VIA D 23PA00X 21850Y 12893X 436Y 436
+317N$8 VIA D 15PA00X 9547Y 10777X 357Y 357
+317N$9 VIA D 15PA00X 9005Y 10285X 357Y 357
+317N$14 VIA D 15PA00X 15059Y 13287X 357Y 357
+317N$32 VIA D 19PA00X 6446Y 3986X 396Y 396
+317N$33 VIA D 19PA00X 7037Y 5905X 396Y 396
+317N$34 VIA D 19PA00X 7923Y 5905X 396Y 396
+317N$52 VIA D 23PA00X 2755Y 3887X 436Y 436
+317N$54 VIA D 23PA00X 25000Y 6742X 436Y 436
+317N$54 VIA D 23PA00X 25000Y 5856X 436Y 436
+317N$55 VIA D 19PA00X 8513Y 3986X 396Y 396
+317N$58 VIA D 19PA00X 1279Y 3592X 396Y 396
+317N$59 VIA D 23PA00X 3395Y 3740X 436Y 436
+317N$63 VIA D 23PA00X 1771Y 3937X 436Y 436
+317RESET VIA D 15PA00X 13041Y 11023X 357Y 357
+317RXD0 VIA D 15PA00X 13090Y 7135X 357Y 357
+317SCK VIA D 15PA00X 21013Y 7972X 357Y 357
+317SCL VIA D 15PA00X 11122Y 11811X 357Y 357
+317SSEL VIA D 15PA00X 22834Y 7627X 357Y 357
+317TXD0 VIA D 15PA00X 12549Y 6397X 357Y 357
+317USB_CONNECT VIA D 15PA00X 9891Y 15501X 357Y 357
+317USB_CONNECT VIA D 15PA00X 12795Y 9694X 357Y 357
+317VCC VIA D 23PA00X 984Y 2854X 436Y 436
+317VDDA VIA D 15PA00X 10433Y 8956X 357Y 357
+317VREFP VIA D 15PA00X 11614Y 9498X 357Y 357
+3275V 3.3V -1 A01X 5340Y 7441X 480Y 880R 0
+327GND 3.3V -2 A01X 6250Y 7441X 480Y 880R 0
+3273.3V 3.3V -3 A01X 7160Y 7441X 480Y 880R 0
+327GND 3.3V -TAB A01X 6250Y 9881X1417Y 866R 0
+327N$8 C1 -1 A16X 9114Y 10826X 314Y 472R180
+327GND C1 -2 A16X 8405Y 10826X 314Y 472R180
+327N$9 C2 -1 A16X 9547Y 10344X 314Y 472R270
+327GND C2 -2 A16X 9547Y 9635X 314Y 472R270
+327N$4 C3 -1 A16X 4330Y 13198X 433Y 393R 90
+327USB_GND C3 -2 A16X 4330Y 13868X 433Y 393R 90
+3273.3V C4 -1 A01X 8267Y 7913X 314Y 472R 90
+327GND C4 -2 A01X 8267Y 8622X 314Y 472R 90
+3275V C5 -1 A16X 10137Y 13100X 433Y 393R 90
+327GND C5 -2 A16X 10137Y 13769X 433Y 393R 90
+3275V C6 -1 A01X 6594Y 11505X 314Y 472R 90
+327GND C6 -2 A01X 6594Y 12214X 314Y 472R 90
+327RESET C7 -1 A01X 12657Y 10629X 314Y 472R180
+327GND C7 -2 A01X 11948Y 10629X 314Y 472R180
+327USB_GND C8 -1 A16X 4330Y 14429X 433Y 393R 90
+327N$5 C8 -2 A16X 4330Y 15098X 433Y 393R 90
+327GND C9 -1 A16X 10137Y 14330X 433Y 393R 90
+327N$20 C9 -2 A16X 10137Y 15000X 433Y 393R 90
+3275V C10 -1 A01X 5216Y 1338X 314Y 472R270
+327GND C10 -2 A01X 5216Y 629X 314Y 472R270
+3275V C11 -1 A01X 20314Y 12007X 314Y 472R 0
+327GND C11 -2 A01X 21023Y 12007X 314Y 472R 0
+327N$51 C12 -1 A01X 21564Y 7431X 433Y 393R 0
+327GND C12 -2 A01X 22234Y 7431X 433Y 393R 0
+327N$54 C13 -1 A01X 24025Y 7480X 433Y 393R 0
+327GND C13 -2 A01X 24694Y 7480X 433Y 393R 0
+327N$54 C14 -1 A01X 23464Y 7037X 433Y 393R180
+327GND C14 -2 A01X 22795Y 7037X 433Y 393R180
+327N$56 C15 -1 A01X 25236Y 12795X 433Y 393R180
+327GND C15 -2 A01X 24566Y 12795X 433Y 393R180
+327N$35 C16 -1 A01X 22746Y 12795X 433Y 393R 0
+327GND C16 -2 A01X 23415Y 12795X 433Y 393R 0
+327N$54 C17 -1 A01X 23484Y 6299X 314Y 472R180
+327GND C17 -2 A01X 22775Y 6299X 314Y 472R180
+327VCC C18 -1 A16X 698Y 6053X 472Y 787R 0
+327GND C18 -2 A16X 1958Y 6053X 472Y 787R 0
+327N$52 C19 -1 A16X 3257Y 4429X 314Y 472R180
+327GND C19 -2 A16X 2549Y 4429X 314Y 472R180
+3275V C20 -1 A16X 4389Y 5068X 314Y 472R180
+327N$59 C20 -2 A16X 3681Y 5068X 314Y 472R180
+3275V C21 -1 A16X 3828Y 6053X 472Y 787R180
+327GND C21 -2 A16X 2568Y 6053X 472Y 787R180
+327VCC C22 -1 A16X 698Y 7234X 472Y 787R 0
+327GND C22 -2 A16X 1958Y 7234X 472Y 787R 0
+3275V C23 -1 A01X 10039Y 1289X 314Y 472R270
+327GND C23 -2 A01X 10039Y 580X 314Y 472R270
+3275V C24 -1 A01X 7125Y 6594X 314Y 472R 0
+327GND C24 -2 A01X 7834Y 6594X 314Y 472R 0
+3275V C25 -1 A16X 16820Y 13877X 314Y 472R 0
+327GND C25 -2 A16X 17529Y 13877X 314Y 472R 0
+3275V C26 -1 A01X 20816Y 6486X 314Y 472R 90
+327GND C26 -2 A01X 20816Y 7194X 314Y 472R 90
+327VREFP C27 -1 A16X 11269Y 9881X 275Y 354R 90
+327GND C27 -2 A16X 11269Y 10393X 275Y 354R 90
+3273.3V C28 -1 A16X 13887Y 5659X 275Y 354R180
+327GND C28 -2 A16X 13375Y 5659X 275Y 354R180
+327VDDA C29 -1 A16X 10875Y 8700X 275Y 354R 90
+327GND C29 -2 A16X 10875Y 9212X 275Y 354R 90
+3273.3V C30 -1 A16X 15393Y 5708X 275Y 354R 0
+327GND C30 -2 A16X 15905Y 5708X 275Y 354R 0
+3273.3V C31 -1 A16X 13779Y 14084X 275Y 354R270
+327GND C31 -2 A16X 13779Y 13572X 275Y 354R270
+327N$1 CAN1 -1 A16X 17925Y 14734X 260Y 800R180
+327GND CAN1 -2 A16X 17425Y 14734X 260Y 800R180
+3275V CAN1 -3 A16X 16925Y 14734X 260Y 800R180
+327N$2 CAN1 -4 A16X 16425Y 14734X 260Y 800R180
+327 CAN1 -5 A16X 16425Y 17154X 260Y 800R180
+327CANL CAN1 -6 A16X 16925Y 17154X 260Y 800R180
+327CANH CAN1 -7 A16X 17425Y 17154X 260Y 800R180
+327GND CAN1 -8 A16X 17925Y 17154X 260Y 800R180
+327N$44 D1 -1 A01X 25364Y 7283X 314Y 354R 0
+327 D1 -2 A01X 26112Y 7283X 314Y 354R 0
+327N$56 D1 -3 A01X 25738Y 8110X 314Y 354R 0
+3273.3V ERR -A A01X 17273Y 6082X 472Y 472R 0
+327N$19 ERR -C A01X 17273Y 6909X 472Y 472R 0
+3273.3V ERR1 -A A01X 18946Y 6082X 472Y 472R 0
+327N$3 ERR1 -C A01X 18946Y 6909X 472Y 472R 0
+3273.3V HB -A A01X 18110Y 6082X 472Y 472R 0
+327N$26 HB -C A01X 18110Y 6909X 472Y 472R 0
+3275V IC1 -1 A16X 22725Y 7110X 480Y 880R270
+327GND IC1 -2 A16X 22725Y 6200X 480Y 880R270
+327N$54 IC1 -3 A16X 22725Y 5290X 480Y 880R270
+327GND IC1 -TAB A16X 20285Y 6200X1417Y 866R270
+327 IC3 -1 A16X 12204Y 7185X 106Y 590R 90
+327 IC3 -2 A16X 12204Y 7381X 106Y 590R 90
+327 IC3 -3 A16X 12204Y 7578X 106Y 590R 90
+327 IC3 -4 A16X 12204Y 7775X 106Y 590R 90
+327 IC3 -5 A16X 12204Y 7972X 106Y 590R 90
+327AIN3 IC3 -6 A16X 12204Y 8169X 106Y 590R 90
+327AIN2 IC3 -7 A16X 12204Y 8366X 106Y 590R 90
+327AIN1 IC3 -8 A16X 12204Y 8562X 106Y 590R 90
+327AIN0 IC3 -9 A16X 12204Y 8759X 106Y 590R 90
+327VDDA IC3 -10 A16X 12204Y 8956X 106Y 590R 90
+327GND IC3 -11 A16X 12204Y 9153X 106Y 590R 90
+327VREFP IC3 -12 A16X 12204Y 9350X 106Y 590R 90
+327 IC3 -13 A16X 12204Y 9547X 106Y 590R 90
+327 IC3 -14 A16X 12204Y 9744X 106Y 590R 90
+327GND IC3 -15 A16X 12204Y 9940X 106Y 590R 90
+327 IC3 -16 A16X 12204Y 10137X 106Y 590R 90
+327RESET IC3 -17 A16X 12204Y 10334X 106Y 590R 90
+327 IC3 -18 A16X 12204Y 10531X 106Y 590R 90
+3273.3V IC3 -19 A16X 12204Y 10728X 106Y 590R 90
+327 IC3 -20 A16X 12204Y 10925X 106Y 590R 90
+327 IC3 -21 A16X 12204Y 11122X 106Y 590R 90
+327N$9 IC3 -22 A16X 12204Y 11318X 106Y 590R 90
+327N$8 IC3 -23 A16X 12204Y 11515X 106Y 590R 90
+327SCL IC3 -24 A16X 12204Y 11712X 106Y 590R 90
+327SDA IC3 -25 A16X 12204Y 11909X 106Y 590R 90
+327 IC3 -26 A16X 12893Y 12598X 590Y 106R 90
+327 IC3 -27 A16X 13090Y 12598X 590Y 106R 90
+3273.3V IC3 -28 A16X 13287Y 12598X 590Y 106R 90
+327D+ IC3 -29 A16X 13484Y 12598X 590Y 106R 90
+327D- IC3 -30 A16X 13681Y 12598X 590Y 106R 90
+327GND IC3 -31 A16X 13877Y 12598X 590Y 106R 90
+327N$7 IC3 -32 A16X 14074Y 12598X 590Y 106R 90
+327 IC3 -33 A16X 14271Y 12598X 590Y 106R 90
+327ENC0A IC3 -34 A16X 14468Y 12598X 590Y 106R 90
+327 IC3 -35 A16X 14665Y 12598X 590Y 106R 90
+327 IC3 -36 A16X 14862Y 12598X 590Y 106R 90
+327ENC0B IC3 -37 A16X 15059Y 12598X 590Y 106R 90
+327 IC3 -38 A16X 15255Y 12598X 590Y 106R 90
+327 IC3 -39 A16X 15452Y 12598X 590Y 106R 90
+327 IC3 -40 A16X 15649Y 12598X 590Y 106R 90
+327GND IC3 -41 A16X 15846Y 12598X 590Y 106R 90
+3273.3V IC3 -42 A16X 16043Y 12598X 590Y 106R 90
+327 IC3 -43 A16X 16240Y 12598X 590Y 106R 90
+327 IC3 -44 A16X 16437Y 12598X 590Y 106R 90
+327DIP0 IC3 -45 A16X 16633Y 12598X 590Y 106R 90
+327N$2 IC3 -46 A16X 16830Y 12598X 590Y 106R 90
+327N$1 IC3 -47 A16X 17027Y 12598X 590Y 106R 90
+327DIP3 IC3 -48 A16X 17224Y 12598X 590Y 106R 90
+327DIP2 IC3 -49 A16X 17421Y 12598X 590Y 106R 90
+327DIP1 IC3 -50 A16X 17618Y 12598X 590Y 106R 90
+327ENC1B IC3 -51 A16X 18307Y 11909X 106Y 590R 90
+327ENC1A IC3 -52 A16X 18307Y 11712X 106Y 590R 90
+327BTLDR IC3 -53 A16X 18307Y 11515X 106Y 590R 90
+3273.3V IC3 -54 A16X 18307Y 11318X 106Y 590R 90
+327GND IC3 -55 A16X 18307Y 11122X 106Y 590R 90
+327ENC2A IC3 -56 A16X 18307Y 10925X 106Y 590R 90
+327ENC2B IC3 -57 A16X 18307Y 10728X 106Y 590R 90
+327ENC3A IC3 -58 A16X 18307Y 10531X 106Y 590R 90
+327ENC3B IC3 -59 A16X 18307Y 10334X 106Y 590R 90
+327MOSI IC3 -60 A16X 18307Y 10137X 106Y 590R 90
+327MISO IC3 -61 A16X 18307Y 9940X 106Y 590R 90
+327SCK IC3 -62 A16X 18307Y 9744X 106Y 590R 90
+327SSEL IC3 -63 A16X 18307Y 9547X 106Y 590R 90
+327USB_CONNECT IC3 -64 A16X 18307Y 9350X 106Y 590R 90
+327ERR IC3 -65 A16X 18307Y 9153X 106Y 590R 90
+327HB IC3 -66 A16X 18307Y 8956X 106Y 590R 90
+327DBG IC3 -67 A16X 18307Y 8759X 106Y 590R 90
+327DIO12 IC3 -68 A16X 18307Y 8562X 106Y 590R 90
+327DIO11 IC3 -69 A16X 18307Y 8366X 106Y 590R 90
+327DIO10 IC3 -70 A16X 18307Y 8169X 106Y 590R 90
+3273.3V IC3 -71 A16X 18307Y 7972X 106Y 590R 90
+327GND IC3 -72 A16X 18307Y 7775X 106Y 590R 90
+327DIO9 IC3 -73 A16X 18307Y 7578X 106Y 590R 90
+327DIO8 IC3 -74 A16X 18307Y 7381X 106Y 590R 90
+327DIO7 IC3 -75 A16X 18307Y 7185X 106Y 590R 90
+327DIO6 IC3 -76 A16X 17618Y 6496X 590Y 106R 90
+327DIO5 IC3 -77 A16X 17421Y 6496X 590Y 106R 90
+327DIO4 IC3 -78 A16X 17224Y 6496X 590Y 106R 90
+327DIO3 IC3 -79 A16X 17027Y 6496X 590Y 106R 90
+327DIO2 IC3 -80 A16X 16830Y 6496X 590Y 106R 90
+327DIO1 IC3 -81 A16X 16633Y 6496X 590Y 106R 90
+327 IC3 -82 A16X 16437Y 6496X 590Y 106R 90
+327GND IC3 -83 A16X 16240Y 6496X 590Y 106R 90
+3273.3V IC3 -84 A16X 16043Y 6496X 590Y 106R 90
+327 IC3 -85 A16X 15846Y 6496X 590Y 106R 90
+327 IC3 -86 A16X 15649Y 6496X 590Y 106R 90
+327 IC3 -87 A16X 15452Y 6496X 590Y 106R 90
+327 IC3 -88 A16X 15255Y 6496X 590Y 106R 90
+327 IC3 -89 A16X 15059Y 6496X 590Y 106R 90
+327 IC3 -90 A16X 14862Y 6496X 590Y 106R 90
+327 IC3 -91 A16X 14665Y 6496X 590Y 106R 90
+327 IC3 -92 A16X 14468Y 6496X 590Y 106R 90
+327 IC3 -93 A16X 14271Y 6496X 590Y 106R 90
+327 IC3 -94 A16X 14074Y 6496X 590Y 106R 90
+327 IC3 -95 A16X 13877Y 6496X 590Y 106R 90
+3273.3V IC3 -96 A16X 13681Y 6496X 590Y 106R 90
+327GND IC3 -97 A16X 13484Y 6496X 590Y 106R 90
+327TXD0 IC3 -98 A16X 13287Y 6496X 590Y 106R 90
+327RXD0 IC3 -99 A16X 13090Y 6496X 590Y 106R 90
+327 IC3 -100 A16X 12893Y 6496X 590Y 106R 90
+317GND JP1 -1 D 40PA00X 15255Y 590X 740Y 740R180
+3175V JP1 -2 D 40PA00X 15255Y 1590X 740Y 740R180
+317N$31 JP1 -3 D 40PA00X 15255Y 2590X 740Y 740R180
+317GND JP2 -1 D 40PA00X 16240Y 590X 740Y 740R180
+3175V JP2 -2 D 40PA00X 16240Y 1590X 740Y 740R180
+317N$30 JP2 -3 D 40PA00X 16240Y 2590X 740Y 740R180
+317GND JP3 -1 D 40PA00X 17224Y 590X 740Y 740R180
+3175V JP3 -2 D 40PA00X 17224Y 1590X 740Y 740R180
+317N$29 JP3 -3 D 40PA00X 17224Y 2590X 740Y 740R180
+317GND JP4 -1 D 40PA00X 18208Y 590X 740Y 740R180
+3175V JP4 -2 D 40PA00X 18208Y 1590X 740Y 740R180
+317N$28 JP4 -3 D 40PA00X 18208Y 2590X 740Y 740R180
+317GND JP5 -1 D 40PA00X 19192Y 590X 740Y 740R180
+3175V JP5 -2 D 40PA00X 19192Y 1590X 740Y 740R180
+317N$27 JP5 -3 D 40PA00X 19192Y 2590X 740Y 740R180
+317GND JP6 -1 D 40PA00X 20177Y 590X 740Y 740R180
+3175V JP6 -2 D 40PA00X 20177Y 1590X 740Y 740R180
+317N$25 JP6 -3 D 40PA00X 20177Y 2590X 740Y 740R180
+317GND JP7 -1 D 40PA00X 21161Y 590X 740Y 740R180
+3175V JP7 -2 D 40PA00X 21161Y 1590X 740Y 740R180
+317N$24 JP7 -3 D 40PA00X 21161Y 2590X 740Y 740R180
+317GND JP8 -1 D 40PA00X 22145Y 590X 740Y 740R180
+3175V JP8 -2 D 40PA00X 22145Y 1590X 740Y 740R180
+317N$23 JP8 -3 D 40PA00X 22145Y 2590X 740Y 740R180
+317GND JP9 -1 D 40PA00X 23129Y 590X 740Y 740R180
+3175V JP9 -2 D 40PA00X 23129Y 1590X 740Y 740R180
+317N$22 JP9 -3 D 40PA00X 23129Y 2590X 740Y 740R180
+317GND JP10 -1 D 40PA00X 24114Y 590X 740Y 740R180
+3175V JP10 -2 D 40PA00X 24114Y 1590X 740Y 740R180
+317N$21 JP10 -3 D 40PA00X 24114Y 2590X 740Y 740R180
+317GND JP11 -1 D 40PA00X 25098Y 590X 740Y 740R180
+3175V JP11 -2 D 40PA00X 25098Y 1590X 740Y 740R180
+317N$18 JP11 -3 D 40PA00X 25098Y 2590X 740Y 740R180
+317GND JP12 -1 D 40PA00X 26082Y 590X 740Y 740R180
+3175V JP12 -2 D 40PA00X 26082Y 1590X 740Y 740R180
+317N$17 JP12 -3 D 40PA00X 26082Y 2590X 740Y 740R180
+317GND JP13 -1 D 40PA00X 10925Y 590X 740Y 740R180
+3175V JP13 -2 D 40PA00X 10925Y 1590X 740Y 740R180
+317N$41 JP13 -3 D 40PA00X 10925Y 2590X 740Y 740R180
+317N$36 JP13 -4 D 40PA00X 10925Y 3590X 740Y 740R180
+317GND JP14 -1 D 40PA00X 13090Y 590X 740Y 740R180
+3175V JP14 -2 D 40PA00X 13090Y 1590X 740Y 740R180
+317N$40 JP14 -3 D 40PA00X 13090Y 2590X 740Y 740R180
+317N$37 JP14 -4 D 40PA00X 13090Y 3590X 740Y 740R180
+317GND JP15 -1 D 40PA00X 14173Y 590X 740Y 740R180
+3175V JP15 -2 D 40PA00X 14173Y 1590X 740Y 740R180
+317N$39 JP15 -3 D 40PA00X 14173Y 2590X 740Y 740R180
+317N$38 JP15 -4 D 40PA00X 14173Y 3590X 740Y 740R180
+317GND JP16 -1 D 40PA00X 6003Y 590X 740Y 740R180
+3175V JP16 -2 D 40PA00X 6003Y 1590X 740Y 740R180
+317N$42 JP16 -3 D 40PA00X 6003Y 2590X 740Y 740R180
+317GND JP17 -1 D 40PA00X 6988Y 590X 740Y 740R180
+3175V JP17 -2 D 40PA00X 6988Y 1590X 740Y 740R180
+317N$48 JP17 -3 D 40PA00X 6988Y 2590X 740Y 740R180
+317GND JP18 -1 D 40PA00X 7972Y 590X 740Y 740R180
+3175V JP18 -2 D 40PA00X 7972Y 1590X 740Y 740R180
+317N$53 JP18 -3 D 40PA00X 7972Y 2590X 740Y 740R180
+317GND JP19 -1 D 40PA00X 8956Y 590X 740Y 740R180
+3175V JP19 -2 D 40PA00X 8956Y 1590X 740Y 740R180
+317N$49 JP19 -3 D 40PA00X 8956Y 2590X 740Y 740R180
+317GND JP20 -1 D 40PA00X 10433Y 11909X 740Y 740R 90
+317SDA JP20 -2 D 40PA00X 9433Y 11909X 740Y 740R 90
+317SCL JP20 -3 D 40PA00X 8433Y 11909X 740Y 740R 90
+3175V JP20 -4 D 40PA00X 7433Y 11909X 740Y 740R 90
+317GND JP21 -1 D 40PA00X 12007Y 590X 740Y 740R180
+3175V JP21 -2 D 40PA00X 12007Y 1590X 740Y 740R180
+317N$60 JP21 -3 D 40PA00X 12007Y 2590X 740Y 740R180
+317N$57 JP21 -4 D 40PA00X 12007Y 3590X 740Y 740R180
+3275V POW -A A01X 4970Y 1948X 472Y 472R 0
+327N$10 POW -C A01X 4970Y 2775X 472Y 472R 0
+327GND R1 -1 A01X 4970Y 3976X 433Y 393R270
+327N$10 R1 -2 A01X 4970Y 3307X 433Y 393R270
+327N$11 R2 -1 A16X 10974Y 14753X 433Y 393R270
+327D- R2 -2 A16X 10974Y 14084X 433Y 393R270
+327N$15 R3 -1 A16X 4517Y 15846X 433Y 393R180
+327N$13 R3 -2 A16X 3848Y 15846X 433Y 393R180
+327N$16 R4 -1 A16X 4517Y 16683X 433Y 393R180
+327N$12 R4 -2 A16X 3848Y 16683X 433Y 393R180
+327N$7 R5 -1 A16X 14527Y 13779X 433Y 393R 0
+327N$14 R5 -2 A16X 15196Y 13779X 433Y 393R 0
+3273.3V R6 -1 A01X 13385Y 9852X 433Y 393R 90
+327RESET R6 -2 A01X 13385Y 10521X 433Y 393R 90
+3273.3V R7 -1 A16X 19291Y 10836X 433Y 393R 90
+327BTLDR R7 -2 A16X 19291Y 11505X 433Y 393R 90
+327N$6 R8 -1 A16X 11811Y 14753X 433Y 393R270
+327D+ R8 -2 A16X 11811Y 14084X 433Y 393R270
+327AIN0 R9 -1 A16X 5954Y 4734X 433Y 393R 90
+327N$32 R9 -2 A16X 5954Y 5403X 433Y 393R 90
+327AIN0 R10 -1 A16X 5954Y 4124X 433Y 393R270
+327GND R10 -2 A16X 5954Y 3454X 433Y 393R270
+327HB R11 -1 A01X 18110Y 8159X 433Y 393R270
+327N$26 R11 -2 A01X 18110Y 7490X 433Y 393R270
+327ERR R12 -1 A01X 17273Y 8159X 433Y 393R270
+327N$19 R12 -2 A01X 17273Y 7490X 433Y 393R270
+327DBG R13 -1 A01X 18946Y 8159X 433Y 393R270
+327N$3 R13 -2 A01X 18946Y 7490X 433Y 393R270
+327N$33 R14 -1 A16X 7037Y 5403X 433Y 393R270
+327AIN1 R14 -2 A16X 7037Y 4734X 433Y 393R270
+327GND R15 -1 A16X 7037Y 3454X 433Y 393R 90
+327AIN1 R15 -2 A16X 7037Y 4124X 433Y 393R 90
+327AIN2 R16 -1 A16X 7923Y 4734X 433Y 393R 90
+327N$34 R16 -2 A16X 7923Y 5403X 433Y 393R 90
+327AIN2 R17 -1 A16X 7923Y 4124X 433Y 393R270
+327GND R17 -2 A16X 7923Y 3454X 433Y 393R270
+327N$55 R18 -1 A16X 9005Y 5403X 433Y 393R270
+327AIN3 R18 -2 A16X 9005Y 4734X 433Y 393R270
+327GND R19 -1 A16X 9005Y 3454X 433Y 393R 90
+327AIN3 R19 -2 A16X 9005Y 4124X 433Y 393R 90
+327VCC R20 -1 A16X 285Y 4429X 314Y 472R 0
+327N$58 R20 -2 A16X 994Y 4429X 314Y 472R 0
+327GND R21 -1 A16X 2125Y 4429X 314Y 472R180
+327N$63 R21 -2 A16X 1417Y 4429X 314Y 472R180
+327N$63 R22 -1 A16X 1387Y 5068X 314Y 472R180
+327VCC R22 -2 A16X 679Y 5068X 314Y 472R180
+327GND R23 -1 A16X 2549Y 5068X 314Y 472R 0
+327N$59 R23 -2 A16X 3257Y 5068X 314Y 472R 0
+327N$59 R24 -1 A16X 3681Y 4429X 314Y 472R 0
+3275V R24 -2 A16X 4389Y 4429X 314Y 472R 0
+3273.3V R25 -1 A16X 13149Y 14124X 314Y 472R180
+327D+ R25 -2 A16X 12440Y 14124X 314Y 472R180
+327 U$2 -P$1 A01X 8233Y 10787X1013Y 748R 0
+327N$8 U$2 -P$2 A01X 10369Y 10787X1013Y 748R 0
+327 U$2 -P$3 A01X 10369Y 9685X1013Y 748R 0
+327N$9 U$2 -P$4 A01X 8233Y 9685X1013Y 748R 0
+327N$4 U$4 -1 A16X 5521Y 13407X 236Y 866R 90
+327USB_GND U$4 -2 A16X 5521Y 13907X 236Y 866R 90
+327N$5 U$4 -3 A16X 5521Y 14407X 236Y 866R 90
+327N$5 U$4 -4 A16X 5521Y 14907X 236Y 866R 90
+327N$5 U$4 -5 A16X 5521Y 15407X 236Y 866R 90
+327N$15 U$4 -6 A16X 5521Y 15907X 236Y 866R 90
+327N$16 U$4 -7 A16X 5521Y 16407X 236Y 866R 90
+327USB_GND U$4 -8 A16X 5521Y 16907X 236Y 866R 90
+327GND U$4 -9 A16X 9143Y 16907X 236Y 866R 90
+327N$6 U$4 -10 A16X 9143Y 16407X 236Y 866R 90
+327N$11 U$4 -11 A16X 9143Y 15907X 236Y 866R 90
+327USB_CONNECT U$4 -12 A16X 9143Y 15407X 236Y 866R 90
+327N$20 U$4 -13 A16X 9143Y 14907X 236Y 866R 90
+327N$20 U$4 -14 A16X 9143Y 14407X 236Y 866R 90
+327GND U$4 -15 A16X 9143Y 13907X 236Y 866R 90
+3275V U$4 -16 A16X 9143Y 13407X 236Y 866R 90
+327N$51 U$5 -1 A01X 21724Y 8259X 225Y 665R 0
+327GND U$5 -2 A01X 22224Y 8259X 225Y 665R 0
+327GND U$5 -3 A01X 22724Y 8259X 225Y 665R 0
+327SSEL U$5 -4 A01X 23224Y 8259X 225Y 665R 0
+327MISO U$5 -5 A01X 23724Y 8259X 225Y 665R 0
+327N$54 U$5 -6 A01X 24224Y 8259X 225Y 665R 0
+327GND U$5 -7 A01X 24724Y 8259X 225Y 665R 0
+327N$44 U$5 -8 A01X 25224Y 8259X 225Y 665R 0
+327N$56 U$5 -9 A01X 25224Y 12015X 225Y 665R 0
+327GND U$5 -10 A01X 24724Y 12015X 225Y 665R 0
+327GND U$5 -11 A01X 24224Y 12015X 225Y 665R 0
+327GND U$5 -12 A01X 23724Y 12015X 225Y 665R 0
+327GND U$5 -13 A01X 23224Y 12015X 225Y 665R 0
+327N$35 U$5 -14 A01X 22724Y 12015X 225Y 665R 0
+327MOSI U$5 -15 A01X 22224Y 12015X 225Y 665R 0
+327SCK U$5 -16 A01X 21724Y 12015X 225Y 665R 0
+327DIP0 U$6 -1A A01X 25663Y 13710X1000Y 500R270
+327GND U$6 -1B A01X 25663Y 17096X1000Y 500R270
+327DIP1 U$6 -2A A01X 24663Y 13710X1000Y 500R270
+327GND U$6 -2B A01X 24663Y 17096X1000Y 500R270
+327DIP2 U$6 -3A A01X 23663Y 13710X1000Y 500R270
+327GND U$6 -3B A01X 23663Y 17096X1000Y 500R270
+327DIP3 U$6 -4A A01X 22663Y 13710X1000Y 500R270
+327GND U$6 -4B A01X 22663Y 17096X1000Y 500R270
+327RESET U$8 -1 A01X 14218Y 13858X2027Y 299R 0
+327BTLDR U$8 -2 A01X 14218Y 14358X2027Y 299R 0
+327CANH U$8 -3 A01X 14218Y 14858X2027Y 299R 0
+327CANL U$8 -4 A01X 14218Y 15358X2027Y 299R 0
+327RXD0 U$8 -5 A01X 14218Y 15858X2027Y 299R 0
+327TXD0 U$8 -6 A01X 14218Y 16358X2027Y 299R 0
+327GND U$8 -P$0 A01X 20744Y 13149X1555Y 964R 0
+327GND U$8 -P$1 A01X 20744Y 17066X1555Y 964R 0
+317N$12 U$9 -D+ D 36PA00X 1476Y 14566X 602Y 602R 90
+317N$13 U$9 -D- D 36PA00X 2755Y 14566X 602Y 602R 90
+317USB_GND U$9 -GND D 36PA00X 1476Y 13582X 602Y 602R 90
+317USB_GND U$9 -P$0 D 90PA00X 1850Y 11704X1305Y1305R 90
+317USB_GND U$9 -P$1 D 90PA00X 1850Y 16444X1305Y1305R 90
+317N$4 U$9 -VCC D 36PA00X 2755Y 13582X 602Y 602R 90
+327 U$10 -1 A01X 11667Y 16358X2027Y 299R180
+327 U$10 -2 A01X 11667Y 15858X2027Y 299R180
+327CANH U$10 -3 A01X 11667Y 15358X2027Y 299R180
+327CANL U$10 -4 A01X 11667Y 14858X2027Y 299R180
+327 U$10 -5 A01X 11667Y 14358X2027Y 299R180
+327 U$10 -6 A01X 11667Y 13858X2027Y 299R180
+327USB_GND U$10 -P$0 A01X 5141Y 17066X1555Y 964R180
+327USB_GND U$10 -P$1 A01X 5141Y 13149X1555Y 964R180
+327N$24 U$13 -1 A01X 22736Y 3350X 188Y 104R 90
+327N$23 U$13 -2 A01X 22933Y 3350X 188Y 104R 90
+327N$22 U$13 -3 A01X 23129Y 3350X 188Y 104R 90
+327N$21 U$13 -4 A01X 23326Y 3350X 188Y 104R 90
+327N$18 U$13 -5 A01X 23523Y 3350X 188Y 104R 90
+327N$17 U$13 -6 A01X 23720Y 3350X 188Y 104R 90
+327DIO12 U$13 -7 A01X 23720Y 3834X 188Y 104R 90
+327DIO11 U$13 -8 A01X 23523Y 3834X 188Y 104R 90
+327DIO10 U$13 -9 A01X 23326Y 3834X 188Y 104R 90
+327DIO9 U$13 -10 A01X 23129Y 3834X 188Y 104R 90
+327DIO8 U$13 -11 A01X 22933Y 3834X 188Y 104R 90
+327DIO7 U$13 -12 A01X 22736Y 3834X 188Y 104R 90
+327GND U$13 -GND A01X 23228Y 3592X 138Y 925R 90
+327N$31 U$14 -1 A01X 17224Y 3449X 188Y 104R 90
+327N$30 U$14 -2 A01X 17421Y 3449X 188Y 104R 90
+327N$29 U$14 -3 A01X 17618Y 3449X 188Y 104R 90
+327N$28 U$14 -4 A01X 17814Y 3449X 188Y 104R 90
+327N$27 U$14 -5 A01X 18011Y 3449X 188Y 104R 90
+327N$25 U$14 -6 A01X 18208Y 3449X 188Y 104R 90
+327DIO6 U$14 -7 A01X 18208Y 3932X 188Y 104R 90
+327DIO5 U$14 -8 A01X 18011Y 3932X 188Y 104R 90
+327DIO4 U$14 -9 A01X 17814Y 3932X 188Y 104R 90
+327DIO3 U$14 -10 A01X 17618Y 3932X 188Y 104R 90
+327DIO2 U$14 -11 A01X 17421Y 3932X 188Y 104R 90
+327DIO1 U$14 -12 A01X 17224Y 3932X 188Y 104R 90
+327GND U$14 -GND A01X 17716Y 3690X 138Y 925R 90
+327N$36 U$15 -1 A01X 11614Y 4335X 188Y 104R 90
+327N$41 U$15 -2 A01X 11811Y 4335X 188Y 104R 90
+327N$57 U$15 -3 A01X 12007Y 4335X 188Y 104R 90
+327N$60 U$15 -4 A01X 12204Y 4335X 188Y 104R 90
+327N$37 U$15 -5 A01X 12401Y 4335X 188Y 104R 90
+327N$40 U$15 -6 A01X 12598Y 4335X 188Y 104R 90
+327ENC2B U$15 -7 A01X 12598Y 4818X 188Y 104R 90
+327ENC2A U$15 -8 A01X 12401Y 4818X 188Y 104R 90
+327ENC1B U$15 -9 A01X 12204Y 4818X 188Y 104R 90
+327ENC1A U$15 -10 A01X 12007Y 4818X 188Y 104R 90
+327ENC0B U$15 -11 A01X 11811Y 4818X 188Y 104R 90
+327ENC0A U$15 -12 A01X 11614Y 4818X 188Y 104R 90
+327GND U$15 -GND A01X 12106Y 4576X 138Y 925R 90
+327N$33 U$16 -P1 A01X 6377Y 6033X 137Y 629R270
+327N$33 U$16 -P2 A01X 6377Y 5777X 137Y 629R270
+327N$47 U$16 -P3 A01X 6377Y 5521X 137Y 629R270
+3275V U$16 -P4 A01X 6377Y 5265X 137Y 629R270
+327N$43 U$16 -P5 A01X 6377Y 5009X 137Y 629R270
+327N$32 U$16 -P6 A01X 6377Y 4753X 137Y 629R270
+327N$32 U$16 -P7 A01X 6377Y 4498X 137Y 629R270
+327N$55 U$16 -P8 A01X 8582Y 4498X 137Y 629R270
+327N$55 U$16 -P9 A01X 8582Y 4753X 137Y 629R270
+327N$50 U$16 -P10 A01X 8582Y 5009X 137Y 629R270
+327GND U$16 -P11 A01X 8582Y 5265X 137Y 629R270
+327N$46 U$16 -P12 A01X 8582Y 5521X 137Y 629R270
+327N$34 U$16 -P13 A01X 8582Y 5777X 137Y 629R270
+327N$34 U$16 -P14 A01X 8582Y 6033X 137Y 629R270
+327 U$19 -1 A01X 6791Y 3498X 188Y 104R 90
+327 U$19 -2 A01X 6988Y 3498X 188Y 104R 90
+327N$42 U$19 -3 A01X 7185Y 3498X 188Y 104R 90
+327N$48 U$19 -4 A01X 7381Y 3498X 188Y 104R 90
+327N$53 U$19 -5 A01X 7578Y 3498X 188Y 104R 90
+327N$49 U$19 -6 A01X 7775Y 3498X 188Y 104R 90
+327N$50 U$19 -7 A01X 7775Y 3981X 188Y 104R 90
+327N$46 U$19 -8 A01X 7578Y 3981X 188Y 104R 90
+327N$47 U$19 -9 A01X 7381Y 3981X 188Y 104R 90
+327N$43 U$19 -10 A01X 7185Y 3981X 188Y 104R 90
+327 U$19 -11 A01X 6988Y 3981X 188Y 104R 90
+327 U$19 -12 A01X 6791Y 3981X 188Y 104R 90
+327GND U$19 -GND A01X 7283Y 3740X 138Y 925R 90
+327DIO9 U$21 -P1 A16X 22962Y 3818X 275Y 275R270
+327DIO10 U$21 -P2 A16X 23316Y 3818X 275Y 196R270
+327DIO11 U$21 -P3 A16X 23631Y 3818X 275Y 196R270
+327DIO12 U$21 -P4 A16X 23986Y 3818X 275Y 275R270
+3275V U$21 -P5 A16X 23986Y 3267X 275Y 275R270
+3275V U$21 -P6 A16X 23631Y 3267X 275Y 196R270
+3275V U$21 -P7 A16X 23316Y 3267X 275Y 196R270
+3275V U$21 -P8 A16X 22962Y 3267X 275Y 275R270
+327DIO5 U$22 -P1 A16X 18139Y 3917X 275Y 275R270
+327DIO6 U$22 -P2 A16X 18494Y 3917X 275Y 196R270
+327DIO7 U$22 -P3 A16X 18809Y 3917X 275Y 196R270
+327DIO8 U$22 -P4 A16X 19163Y 3917X 275Y 275R270
+3275V U$22 -P5 A16X 19163Y 3366X 275Y 275R270
+3275V U$22 -P6 A16X 18809Y 3366X 275Y 196R270
+3275V U$22 -P7 A16X 18494Y 3366X 275Y 196R270
+3275V U$22 -P8 A16X 18139Y 3366X 275Y 275R270
+327DIO1 U$23 -P1 A16X 16466Y 3917X 275Y 275R270
+327DIO2 U$23 -P2 A16X 16820Y 3917X 275Y 196R270
+327DIO3 U$23 -P3 A16X 17135Y 3917X 275Y 196R270
+327DIO4 U$23 -P4 A16X 17490Y 3917X 275Y 275R270
+3275V U$23 -P5 A16X 17490Y 3366X 275Y 275R270
+3275V U$23 -P6 A16X 17135Y 3366X 275Y 196R270
+3275V U$23 -P7 A16X 16820Y 3366X 275Y 196R270
+3275V U$23 -P8 A16X 16466Y 3366X 275Y 275R270
+327N$44 U$36 -1 A01X 25866Y 6299X 748Y1338R180
+327N$54 U$36 -2 A01X 24330Y 6299X 748Y1338R180
+327GND U$39 -GND A01X 2263Y 7748X2106Y3362R 0
+327VCC U$39 -P1 A01X 763Y 4872X1204Y 350R 90
+327N$58 U$39 -P2 A01X 1263Y 4872X1204Y 350R 90
+327N$63 U$39 -P3 A01X 1763Y 4872X1204Y 350R 90
+327GND U$39 -P4 A01X 2263Y 4872X1204Y 350R 90
+327N$52 U$39 -P5 A01X 2763Y 4872X1204Y 350R 90
+327N$59 U$39 -P6 A01X 3263Y 4872X1204Y 350R 90
+3275V U$39 -P7 A01X 3763Y 4872X1204Y 350R 90
+317VCC U$43 -P$1 D 55PA00X 3149Y 2952X 826Y1653R 0
+317GND U$43 -P$2 D 55PA00X 3149Y 984X 826Y1653R 0
+327N$38 U$44 -1 A01X 14911Y 3646X 188Y 104R 90
+327 U$44 -2 A01X 15108Y 3646X 188Y 104R 90
+327 U$44 -3 A01X 15305Y 3646X 188Y 104R 90
+327N$39 U$44 -4 A01X 15501Y 3646X 188Y 104R 90
+327 U$44 -5 A01X 15698Y 3646X 188Y 104R 90
+327 U$44 -6 A01X 15895Y 3646X 188Y 104R 90
+327 U$44 -7 A01X 15895Y 4129X 188Y 104R 90
+327 U$44 -8 A01X 15698Y 4129X 188Y 104R 90
+327ENC3B U$44 -9 A01X 15501Y 4129X 188Y 104R 90
+327 U$44 -10 A01X 15305Y 4129X 188Y 104R 90
+327 U$44 -11 A01X 15108Y 4129X 188Y 104R 90
+327ENC3A U$44 -12 A01X 14911Y 4129X 188Y 104R 90
+327GND U$44 -GND A01X 15403Y 3887X 138Y 925R 90
+327ENC2A U$45 -P1 A16X 13513Y 4803X 275Y 275R270
+327ENC2B U$45 -P2 A16X 13868Y 4803X 275Y 196R270
+327ENC3A U$45 -P3 A16X 14183Y 4803X 275Y 196R270
+327ENC3B U$45 -P4 A16X 14537Y 4803X 275Y 275R270
+3275V U$45 -P5 A16X 14537Y 4251X 275Y 275R270
+3275V U$45 -P6 A16X 14183Y 4251X 275Y 196R270
+3275V U$45 -P7 A16X 13868Y 4251X 275Y 196R270
+3275V U$45 -P8 A16X 13513Y 4251X 275Y 275R270
+327ENC0A U$46 -P1 A16X 11496Y 4852X 275Y 275R270
+327ENC0B U$46 -P2 A16X 11850Y 4852X 275Y 196R270
+327ENC1A U$46 -P3 A16X 12165Y 4852X 275Y 196R270
+327ENC1B U$46 -P4 A16X 12519Y 4852X 275Y 275R270
+3275V U$46 -P5 A16X 12519Y 4301X 275Y 275R270
+3275V U$46 -P6 A16X 12165Y 4301X 275Y 196R270
+3275V U$46 -P7 A16X 11850Y 4301X 275Y 196R270
+3275V U$46 -P8 A16X 11496Y 4301X 275Y 275R270
+327VDDA U$52 -P$1 A01X 9990Y 8937X 314Y 236R 0
+3273.3V U$52 -P$2 A01X 9990Y 8385X 314Y 236R 0
+327VREFP U$53 -P$1 A01X 11368Y 8937X 314Y 236R 0
+3273.3V U$53 -P$2 A01X 11368Y 8385X 314Y 236R 0
+3273.3V USB -A A01X 14025Y 12431X 472Y 472R 0
+327N$14 USB -C A01X 14025Y 13257X 472Y 472R 0
+327GND Z1 -ANODE A16X 492Y 1177X 358Y 480R 90
+327VCC Z1 -CATHODE A16X 492Y 2464X 358Y 480R 90
+999
diff --git a/gyro_board/schematic/gyro_motherboard_1.19.2012/gyro_motherboard.parts.txt b/gyro_board/schematic/gyro_motherboard_1.19.2012/gyro_motherboard.parts.txt
new file mode 100644
index 0000000..eb59a7b
--- /dev/null
+++ b/gyro_board/schematic/gyro_motherboard_1.19.2012/gyro_motherboard.parts.txt
@@ -0,0 +1,119 @@
+Partlist
+
+Exported from gyro_motherboard.brd at 1/23/12 2:45 AM
+
+EAGLE Version 5.11.0 Copyright (c) 1988-2010 CadSoft
+
+Part Value Package Library Position (mm) Orientation
+
+3.3V SOT223 custom_parts (15.875 22) R0
+C1 18pf 0805 SparkFun (22.25 27.5) MR0
+C2 18pf 0805 SparkFun (24.25 25.375) MR270
+C3 0.1 uf 0603-CAP SparkFun (11 34.375) MR90
+C4 10 uF 0805 SparkFun (21 21) R90
+C5 0.1 uf 0603-CAP SparkFun (25.75 34.125) MR90
+C6 10 uF 0805 SparkFun (16.75 30.125) R90
+C7 100 nF 0805 SparkFun (31.25 27) R180
+C8 0.1 uf 0603-CAP SparkFun (11 37.5) MR90
+C9 0.1 uf 0603-CAP SparkFun (25.75 37.25) MR90
+C10 10 uF 0805 SparkFun (13.25 2.5) R270
+C11 10 uF 0805 SparkFun (52.5 30.5) R0
+C12 1 uF 0603-CAP SparkFun (55.625 18.875) R0
+C13 1 uF 0603-CAP SparkFun (61.875 19) R0
+C14 1 uF 0603-CAP SparkFun (58.75 17.875) R180
+C15 100 nF 0603-CAP SparkFun (63.25 32.5) R180
+C16 1 uF 0603-CAP SparkFun (58.625 32.5) R0
+C17 10 uF 0805 SparkFun (58.75 16) R180
+C18 10 uF 1210 SparkFun (3.375 15.375) MR180
+C19 10 nF 0805 SparkFun (7.375 11.25) MR0
+C20 22 nF 0805 SparkFun (10.25 12.875) MR0
+C21 100 uF 1210 SparkFun (8.125 15.375) MR0
+C22 10 uF 1210 SparkFun (3.375 18.375) MR180
+C23 10 uF 0805 SparkFun (25.5 2.375) R270
+C24 10 uF 0805 SparkFun (19 16.75) R0
+C25 10 uF 0805 SparkFun (43.625 35.25) MR180
+C26 10 uF 0805 SparkFun (52.875 17.375) R90
+C27 100 nF C0402 rcl (28.625 25.75) MR90
+C28 100 nF C0402 rcl (34.625 14.375) MR0
+C29 100 nF C0402 rcl (27.625 22.75) MR90
+C30 100 nF C0402 rcl (39.75 14.5) MR180
+C31 100 nF C0402 rcl (35 35.125) MR270
+CAN1 MCP2551SO8 SO08 can (43.625 40.5) MR0
+D1 SOT23-3 SparkFun (65.375 19.5) R0
+ERR CHIPLED_0805 led (43.875 16.5) R0
+ERR1 CHIPLED_0805 led (48.125 16.5) R0
+HB CHIPLED_0805 led (46 16.5) R0
+IC1 SOT223 custom_parts (54.625 15.75) MR270
+IC3 LPC1768 LQFP100-14X14 lpc1xxx-v6 (38.75 24.25) MR90
+JP1 1X03 SparkFun (38.75 1.5) R90
+JP2 1X03 SparkFun (41.25 1.5) R90
+JP3 1X03 SparkFun (43.75 1.5) R90
+JP4 1X03 SparkFun (46.25 1.5) R90
+JP5 1X03 SparkFun (48.75 1.5) R90
+JP6 1X03 SparkFun (51.25 1.5) R90
+JP7 1X03 SparkFun (53.75 1.5) R90
+JP8 1X03 SparkFun (56.25 1.5) R90
+JP9 1X03 SparkFun (58.75 1.5) R90
+JP10 1X03 SparkFun (61.25 1.5) R90
+JP11 1X03 SparkFun (63.75 1.5) R90
+JP12 1X03 SparkFun (66.25 1.5) R90
+JP13 1X04_NO_SILK SparkFun (27.75 1.5) R90
+JP14 1X04_NO_SILK SparkFun (33.25 1.5) R90
+JP15 1X04_NO_SILK SparkFun (36 1.5) R90
+JP16 1X03 SparkFun (15.25 1.5) R90
+JP17 1X03 SparkFun (17.75 1.5) R90
+JP18 1X03 SparkFun (20.25 1.5) R90
+JP19 1X03 SparkFun (22.75 1.5) R90
+JP20 1X04_NO_SILK SparkFun (26.5 30.25) MR0
+JP21 1X04_NO_SILK SparkFun (30.5 1.5) R90
+POW CHIPLED_0805 led (12.625 6) R0
+R1 300 0603-RES SparkFun (12.625 9.25) R270
+R2 24 ohm 1% 0603-RES SparkFun (27.875 36.625) MR270
+R3 24 ohm 1% 0603-RES SparkFun (10.625 40.25) MR0
+R4 24 ohm 1% 0603-RES SparkFun (10.625 42.375) MR0
+R5 130 0603-RES SparkFun (37.75 35) MR180
+R6 47k 0603-RES SparkFun (34 25.875) R90
+R7 47k 0603-RES SparkFun (49 28.375) MR90
+R8 24 ohm 1% 0603-RES SparkFun (30 36.625) MR270
+R9 28k 0603-RES SparkFun (15.125 12.875) MR90
+R10 31.6k 0603-RES SparkFun (15.125 9.625) MR270
+R11 130 0603-RES SparkFun (46 19.875) R270
+R12 130 0603-RES SparkFun (43.875 19.875) R270
+R13 130 0603-RES SparkFun (48.125 19.875) R270
+R14 28k 0603-RES SparkFun (17.875 12.875) MR270
+R15 31.6k 0603-RES SparkFun (17.875 9.625) MR90
+R16 28k 0603-RES SparkFun (20.125 12.875) MR90
+R17 31.6k 0603-RES SparkFun (20.125 9.625) MR270
+R18 28k 0603-RES SparkFun (22.875 12.875) MR270
+R19 31.6k 0603-RES SparkFun (22.875 9.625) MR90
+R20 154.0 kOhm 0805 SparkFun (1.625 11.25) MR180
+R21 9.31 kOhm 0805 SparkFun (4.5 11.25) MR0
+R22 34.0 kOhm 0805 SparkFun (2.625 12.875) MR0
+R23 1.27 kOhm 0805 SparkFun (7.375 12.875) MR180
+R24 6.65 kOhm 0805 SparkFun (10.25 11.25) MR180
+R25 1.5K 1% 0805 SparkFun (32.5 35.875) MR0
+U$2 CRYSTAL CRYSTAL MC33887 (23.625 26) R0
+U$4 ADUM3160 SOIC_W custom_parts (18.625 38.5) MR90
+U$5 ADXRS450 SOIC_CAV custom_parts (59.625 25.75) R0
+U$6 DIP_SWITCH_X4 219-4LPST custom_parts (61.375 39.125) R180
+U$8 RJ16 85510-5019 custom_parts (44.25 38.375) R270
+U$9 USB M701-330442 custom_parts (5.375 35.75) R90
+U$10 RJ16 85510-5019 custom_parts (21.5 38.375) R90
+U$13 NUF6406M DFN12 custom_parts (59 9.125) R90
+U$14 NUF6406M DFN12 custom_parts (45 9.375) R90
+U$15 NUF6406M DFN12 custom_parts (30.75 11.625) R90
+U$16 TL974IPWR TSSOP-14 custom_parts (19 13.375) R270
+U$19 NUF6406M DFN12 custom_parts (18.5 9.5) R90
+U$21 WA06X103JTL 0603X4 custom_parts (59.625 9) MR270
+U$22 WA06X103JTL 0603X4 custom_parts (47.375 9.25) MR270
+U$23 WA06X103JTL 0603X4 custom_parts (43.125 9.25) MR270
+U$36 LQH43MN471J03L L1812 custom_parts (63.75 16) R180
+U$39 LMZ12002 TZA07A custom_parts (5.75 12.375) R0
+U$43 39543-020239 39543-0202 custom_parts (8 5) R270
+U$44 NUF6406M DFN12 custom_parts (39.125 9.875) R90
+U$45 WA06X103JTL 0603X4 custom_parts (35.625 11.5) MR270
+U$46 WA06X103JTL 0603X4 custom_parts (30.5 11.625) MR270
+U$52 1608_INDUCTOR L1608 custom_parts (25.375 22) R270
+U$53 1608_INDUCTOR L1608 custom_parts (28.875 22) R270
+USB CHIPLED_0805 led (35.625 32.625) R0
+Z1 MMSZ5242BT1G SOD-123 custom_parts (1.25 4.625) MR90
diff --git a/gyro_board/schematic/gyro_motherboard_1.19.2012/gyro_motherboard.parts_mapping.txt b/gyro_board/schematic/gyro_motherboard_1.19.2012/gyro_motherboard.parts_mapping.txt
new file mode 100644
index 0000000..28d8b3b
--- /dev/null
+++ b/gyro_board/schematic/gyro_motherboard_1.19.2012/gyro_motherboard.parts_mapping.txt
@@ -0,0 +1,45 @@
+CAN1 579-MCP2551-I/SN SOIC-8 CAN Tranciever
+U$8,U$10 538-85510-5019 RJ16 connectors 85510-5019
+U$6 774-2194LPST x4 dip switch 219-4LPST
+U$9 855-M701-330442 usb standard B connector M701-330442
+U$4 ADUM3160BRWZ-ND usb digital isolator ADuM3160
+R2,R3,R4,R8 667-ERJ-3EKF24R0V 0603 24ohm 1/10W 1% resistors
+C3,C5,C8,C9,C15 81-GRM39X104K50D 0603 0.1 uF 50V caps
+R25 292-1.5K-RC 0805 1.5K 1% resistor
+U$5 ADXRS450 gyro ADXRS450
+U$36 81-LQH43MN471J03L 1812 470uH inductor
+D1 771-PMBD914-T/R SOT-23 215MA 70V diode
+C12,C13,C14,C16 81-GRM39R105K6.3 0603 1 uF 6.3V caps
+U$44,U$13,U$14,U$15,U$19 863-NUF6406MNT1G EMI filter w/ ESD protection
+U$16 579-MCP604-E/ST rail to rail op-amp
+R9,R14,R16,R18 302-31.6K-RC 0603 28K 1/10W resistors
+R10,R15,R17,R19 302-28K-RC 0603 31.6K 1/10W resistors
+U$21,U$22,U$23,U$45,U$46 791-WA06X103JTL Quad resistor pack, 10k ohms
+JP1,JP2,JP3,JP4,JP5,JP6,JP7,JP8,JP9,JP10,JP11,JP12,JP16,JP17,JP18,JP19 649-69190-103HLF 3-pin 0.1" headers
+JP13,JP14,JP15,JP20,JP21 517-9611046804AR 4-pin 0.1" headers
+3.3V,IC1 579-TC1262-3.3VDBTR TC1262 3.3 V LDO Very low noise
+U$52,U$53 810-MPZ1608S221A ferrite bead, 220 ohm @ 100 MHz
+C17,C23,C4,C24,C6,C10,C11,C25,C26 81-GRM219R60J106KE9D 0805 10 uF 6.3V capacitors
+IC3 771-LPC1768FBD100551 LQFP-100 LPC1768 microcontroller
+C27,C28,C29,C30,C31 80-C0402C104K4RAUTO 0402 0.1 uF 16V cap
+U$2 815-ABMM2-12-E2T ABMM2-12.000MHZ-E2-T Crystal
+C1,C2 81-GRM40C180G50D 18 pf C0805 Capacitor
+C7 81-GCM21BR71H104KA7L 0805 0.1 uF 50V cap
+R6,R7 301-47K-RC 0603 47K 50V resistors
+R21 71-CRCW0805-9.31K-E3 0805 9.31K 1/8W resistor
+R22 71-CRCW0805-34K-E3 0805 34K 1/8W resistor
+R23 71-CRCW0805-1.27K-E3 0805 1.27K 1/8W resistor
+R24 71-CRCW0805-6.65K-E3 0805 6.65K 1/8W resistor
+R20 71-CRCW0805154KFKEA 0805 154K 1/8W resistor
+C20 311-1138-1-ND 0805 0.022 uF 50V cap
+C19 81-GRM40X103K50D 0805 0.01 uF 50V cap
+C21 810-C3225X5R0J107M 1210 100 uF 6.3V cap
+U$39 926-MZ12002TZADJNOPB LMZ12002 switching regulator
+R11,R12,R13,R5 71-CRCW0603-130-E3 0603 130ohm resistors
+R1 71-CRCW0603-300-E3 0603 300ohm resistor
+C18,C22 810-C3225X7R1E106M 1210 10 uF 25V caps
+U$43 538-39543-0202 Molex 39543-0202 screw terminal
+Z1 863-MMSZ5246BT1G zener tvs diodes (SOD-123 16V)
+ERR 720-LHR974-LP-1 red 0805 LEDs
+ERR1,USB 720-LYR971-HL-1 yellow 0805 LEDs
+HB,POW 720-LGR971-KN-1 green 0805 LEDs
diff --git a/gyro_board/schematic/parts.txt b/gyro_board/schematic/parts.txt
new file mode 100644
index 0000000..644bad5
--- /dev/null
+++ b/gyro_board/schematic/parts.txt
@@ -0,0 +1,306 @@
+// Gyro Board
+
+1 x SOIC-8 CAN Tranciever
+ http://www.mouser.com/ProductDetail/Microchip-Technology/MCP2551-I-SN/?qs=sGAEpiMZZMtR4K0UGiQLxkAdUXdHWcECBcWuIPVAEFY%3d
+// CAN1
+
+2 x RJ16 connectors 85510-5019
+ http://www.mouser.com/ProductDetail/Molex/85510-5019/?qs=KUIzHt%2fe91mKBlbhXSCoig%3d%3d
+// U$8, U$10
+
+1 x x4 dip switch 219-4LPST
+ http://www.mouser.com/ProductDetail/CTS-Electronic-Components/219-4LPST/?qs=sGAEpiMZZMv%2f%252b2JhlA6ysGbG22VYatTYq6uUsyqguGg%3d
+// U$6
+
+
+// USB
+1 x usb standard B connector M701-330442
+ http://www.mouser.com/ProductDetail/Harwin/M701-330442/?qs=x6EjVpvqMVOIQFAB0splYQ%3d%3d
+// U$9
+
+1 x usb digital isolator ADuM3160
+ http://search.digikey.com/us/en/products/ADUM3160BRWZ/ADUM3160BRWZ-ND/2361054
+// http://components.arrow.com/part/detail/49232507S8707474N2771
+// U$4
+
+4 x 0603 24ohm 1/10W 1% resistors
+ http://www.mouser.com/ProductDetail/Panasonic-Electronic-Components/ERJ-3EKF24R0V/?qs=sGAEpiMZZMvdGkrng054tx7%2f6%252bNA3LAJhBtYhhhPO3Q%3d
+// R2-4, R8
+
+5 x 0603 0.1 uF 50V caps
+ http://www.mouser.com/ProductDetail/Murata/GRM188R71H104KA93D/?qs=sGAEpiMZZMvQvaS66kI3TkRuIXEcJckyG4bGsWbvdFs%3d
+// C3, C5, C8, C9, C15
+
+1 x 0805 1.5K 1% resistor
+ http://www.mouser.com/ProductDetail/Xicon/292-15K-RC/?qs=sGAEpiMZZMvdGkrng054t8ia9GW93QJBe7qcDRfqN2o%3d
+// R25
+
+
+// Gyro
+1 x gyro ADXRS450
+ analog.com
+// U$5
+
+1 x 1812 470uH inductor
+ http://www.mouser.com/ProductDetail/Murata/LQH43MN471J03L/?qs=sGAEpiMZZMsg%252by3WlYCkU25dZqFWCljlwjP2vUu0CFs%3d
+// U$36
+
+1 x SOT-23 215MA 70V diode
+ http://www.mouser.com/ProductDetail/NXP-Semiconductors/PMBD914215/?qs=sGAEpiMZZMtEwUVCuofpuLm5lH6nRxWrLW61Tj%2fBato%3d
+// D1
+
+4 x 0603 1 uF 6.3V caps
+ http://mouser.com/ProductDetail/Murata/GRM188R60J105KA01D/?qs=sGAEpiMZZMvQvaS66kI3TuvVCQuX7KDAuQpwwjtFuLU%3d
+// C12, C13, C14, C16
+
+
+
+// Analog and Digital ports
+
+5 x EMI filter w/ ESD protection
+ http://www.mouser.com/ProductDetail/ON-Semiconductor/NUF6406MNT1G/?qs=ZXBb0xZ9WeAjNOnJtXU0bw%3d%3d
+// U$44, U$13-15, U$19
+
+1 x rail to rail op-amp
+// http://www.mouser.com/ProductDetail/Texas-Instruments/TL974IPWR/?qs=sGAEpiMZZMtOXy69nW9rM2tUIZtrISKoe5L5aXiIMX4%3d
+// http://www.mouser.com/ProductDetail/ON-Semiconductor/MC33204DG/?qs=dFKnUM%2fquJaMYcSqRg0JgQ%3d%3d
+ http://www.mouser.com/ProductDetail/Microchip-Technology/MCP604-E-ST/?qs=sGAEpiMZZMtCHixnSjNA6E1AMjZhJrEHzigwDZ2KRDU%3d
+// U$16
+
+4 x 0603 28K 1/10W resistors
+ http://www.mouser.com/ProductDetail/Xicon/302-316K-RC/?qs=sGAEpiMZZMu61qfTUdNhG%252bwbnI1D53ApRq8kd7Nz6xY%3d
+// R9, R14, R16, R18
+
+4 x 0603 31.6K 1/10W resistors
+ http://www.mouser.com/ProductDetail/302-28K-RC?qs=vouMN99EJGBIU3mqbTRj%2F6LPzvi3PxeO
+// R10, R15, R17, R19
+
+5 x Quad resistor pack, 10k ohms
+ http://www.mouser.com/ProductDetail/Walsin/WA06X103JTL/?qs=sGAEpiMZZMvrmc6UYKmaNZko%252bNlity%2FEV4c2Bk25eAg%3D
+// U$21-23, U$45-46
+
+16 x 3-pin 0.1" headers
+ http://www.mouser.com/ProductDetail/FCI/69190-103HLF/?qs=sGAEpiMZZMtsLRyDR9nM1%252bmbmmVUI0dA0Z1OFUoOXHc%3d
+// JP1-12, JP16-19
+
+5 x 4-pin 0.1" headers
+ http://www.mouser.com/ProductDetail/3M-Electronic-Solutions-Division/961104-6804-AR/?qs=sGAEpiMZZMtsLRyDR9nM17VtKPchIJvtC4eCEPRcQ7o%3d
+// JP13-15, JP20-21
+
+
+
+// LDO Power Regulator
+2 x TC1262 3.3 V LDO Very low noise
+ http://www.mouser.com/ProductDetail/Microchip-Technology/TC1262-33VDBTR/?qs=sGAEpiMZZMug9GoBKXZ756PgbqWOUSEIIbRZGUP71Lc%3d
+// 3.3V, IC1
+
+2 x ferrite bead, 220 ohm @ 100 MHz
+ http://www.mouser.com/ProductDetail/TDK/MPZ1608S221AT/?qs=cdpe0LUyr8B%252bn20qbL9n2Q%3d%3d
+// U$52-53
+
+9 x 0805 10 uF 6.3V capacitors
+ http://mouser.com/Search/ProductDetail.aspx?qs=Ilq%252bLDnc%2fNgDxdJFi6Qw%252bA%3d%3d
+// C17, C23, C4, C24, C6, C10, C11, C25, C26
+
+
+// Clock and Microcontroller
+1 x LQFP-100 LPC1768 microcontroller
+ http://www.mouser.com/ProductDetail/NXP-Semiconductors/LPC1768FBD100551/?qs=sGAEpiMZZMsX0CFs5rpLHt3sQgsucMfJ
+// IC3
+
+5 x 0402 0.1 uF 16V cap
+ http://www.mouser.com/ProductDetail/Kemet/C0402C104K4RACAUTO/?qs=sGAEpiMZZMvQvaS66kI3TgF3DT3m3%252btw8OliBjglQbc%3d
+// C27-31
+
+1 x ABMM2-12.000MHZ-E2-T Crystal
+ http://www.mouser.com/ProductDetail/ABRACON/ABMM2-12000MHZ-E2-T/?qs=sGAEpiMZZMsBj6bBr9Q9aUe%252bp9Tek3UM1B79/CaETLU%3d
+// U$2
+
+2 x 18 pf C0805 Capacitor
+ http://mouser.com/Search/ProductDetail.aspx?qs=sGAEpiMZZMvQvaS66kI3TjYve3QTKmtDqi2WjmiWmCU%3d
+// C1, C2
+
+1 x 0805 0.1 uF 50V cap
+ http://www.mouser.com/ProductDetail/Murata/GCM21BR71H104KA37L/?qs=sGAEpiMZZMvQvaS66kI3TjDz0r7iCaoLWvMByZfsvEE%3d
+// C7
+//(needs wire routed through)
+
+2 x 0603 47K 50V resistors
+ http://www.mouser.com/ProductDetail/Xicon/301-47K-RC/?qs=sGAEpiMZZMvdGkrng054t47dxWVYf%2fwUfr4QUm8F33w%3d
+// R6, R7
+
+
+// 5V switching regulator
+1 x 0805 9.31K 1/8W resistor
+ http://www.mouser.com/ProductDetail/Vishay-Dale/CRCW08059K31FKEA/?qs=sGAEpiMZZMu61qfTUdNhG2DpbjADlD3GtPxzExJ4uZY%3d
+// R21
+
+1 x 0805 34K 1/8W resistor
+ http://www.mouser.com/ProductDetail/Vishay-Dale/CRCW080534K0FKEA/?qs=sGAEpiMZZMu61qfTUdNhG2DpbjADlD3GyKXWrLMq0UQ%3d
+// R22
+
+1 x 0805 1.27K 1/8W resistor
+ http://www.mouser.com/ProductDetail/Vishay-Dale/CRCW08051K27FKEA/?qs=sGAEpiMZZMu61qfTUdNhG2DpbjADlD3GIBJd%2f1ZakPQ%3d
+// R23
+
+1 x 0805 6.65K 1/8W resistor
+ http://www.mouser.com/ProductDetail/Vishay-Dale/CRCW08056K65FKEA/?qs=sGAEpiMZZMu61qfTUdNhG2DpbjADlD3Gj77LBod1WW0%3d
+// R24
+
+1 x 0805 154K 1/8W resistor
+ http://www.mouser.com/ProductDetail/Vishay-Dale/CRCW0805154KFKEA/?qs=sGAEpiMZZMu61qfTUdNhG2DpbjADlD3GDAV2Bz5Sypk%3d
+// R20
+
+1 x 0805 0.022 uF 50V cap
+ http://search.digikey.com/us/en/products/CC0805KRX7R9BB223/311-1138-1-ND/303048
+// C20
+//might have to order 10
+
+1 x 0805 0.01 uF 50V cap
+ http://www.mouser.com/ProductDetail/Murata/GRM216R71H103KA01D/?qs=jTOxOOerCX5IOhunCLQr%252bA%3d%3d
+// C19
+
+1 x 1210 100 uF 6.3V cap
+ http://www.mouser.com/ProductDetail/TDK/C3225X5R0J107MT/?qs=nUVS3y17YY6kd51cqgJddg%3d%3d
+// C21
+
+1 x LMZ12002 switching regulator
+ http://www.mouser.com/ProductDetail/National-Semiconductor-TI/LMZ12002TZ-ADJ-NOPB/?qs=7lkVKPoqpbaSgUnhjfEk4A%3d%3d
+// U$39
+
+
+4 x 0603 130ohm resistors
+ http://www.mouser.com/ProductDetail/Vishay-Dale/CRCW0603130RFKEA/?qs=sGAEpiMZZMvdGkrng054txtDEx%2fRoWGKoIkxqW8xqJQ%3d
+// R11-13, R5
+
+1 x 0603 300ohm resistor
+ http://www.mouser.com/ProductDetail/Vishay-Dale/CRCW0603300RFKEA/?qs=sGAEpiMZZMvdGkrng054t27YQJ%252bwbTvXi4D6ehZcvac%3d
+// R1
+
+
+// Common
+
+9 x 1210 10 uF 25V caps
+ http://www.mouser.com/ProductDetail/TDK/C3225X7R1E106MT/?qs=nUVS3y17YY4s9OT5qYCJ9w%3d%3d
+// C18, C22 gyro
+// CIN$0, CIN$1, CIN$2, CSEP$0, CSEP$1, CSEP$2, CSEP$3 regulator
+
+4 x Molex 39543-0202 screw terminal
+ http://www.mouser.com/ProductDetail/Molex/39543-0202/?qs=4dAX1jW9NQp7F8cTdTMv1g%3d%3d
+// IN, OUT, OUT1 regulator
+// U$43 gyro
+
+2 x zener tvs diodes (SOD-123 16V)
+ http://www.mouser.com/ProductDetail/ON-Semiconductor/MMSZ5246BT1G/?qs=sGAEpiMZZMstCHp3EWKGl1Xq7JMFNrq0wSn4l1OCWWw%3d
+// DTVS regulator
+// Z1 gyro
+
+1 x red 0805 LEDs
+ http://mouser.com/Search/ProductDetail.aspx?qs=sGAEpiMZZMuus4pmcqQnznNefzl5FSbKZuuQ5hy9Amc%3d
+// ERR gyro
+
+2 x yellow 0805 LEDs
+ http://mouser.com/Search/ProductDetail.aspx?qs=sGAEpiMZZMuus4pmcqQnzirNWwQCfkT50pLh9X4iQpA%3d
+// ERR1, USB gyro
+
+4 x green 0805 LEDs
+ http://mouser.com/Search/ProductDetail.aspx?qs=sGAEpiMZZMuus4pmcqQnznNefzl5FSbKDY8WDxSjdus%3d
+// OPOW, IPOW regulator
+// HB, POW gyro
+
+// Power Regulator
+
+2 x 1206 1K resistor
+ http://www.mouser.com/ProductDetail/Panasonic-Electronic-Components/ERJ-P08J102V/?qs=sGAEpiMZZMtlubZbdhIBINKPHGpBD%2fvfOjyxXi5XYWU%3d
+// RIPOW, ROPOW
+
+1 x webench rbp (0402 20 ohms)
+ http://www.mouser.com/ProductDetail/Vishay/CRCW040220R0FKED/?qs=YX%252bK5oaHNYqeZBUMt4U2Kw%3d%3d
+// RBP
+
+1 x webench cbp (0603 0.1 uF 50V)
+ http://www.mouser.com/ProductDetail/Kemet/C0603C104K5RACTU/?qs=sGAEpiMZZMvQvaS66kI3TqSH%2fSbCyFvgGhDuN4BnElU%3d
+// CBP
+
+1 x webench rcomp (0402 1.58K)
+ http://www.mouser.com/ProductDetail/Vishay/CRCW04021K58FKED/?qs=YX%252bK5oaHNYpT6hP7ZtdbHA%3d%3d
+// RCOMP
+
+1 x webench ruvlo1 (0402 68.1K)
+ http://www.mouser.com/ProductDetail/Vishay-Dale/CRCW040268K1FKED/?qs=sGAEpiMZZMu61qfTUdNhG2DpbjADlD3GyRWnWg46jmQ%3d
+// RUVLO1
+
+1 x webench ruvlo2 (0402 100K)
+ http://www.mouser.com/ProductDetail/Vishay-Dale/CRCW0402100KFKED/?qs=sGAEpiMZZMu61qfTUdNhG2DpbjADlD3GqPf2An0kBCw%3d
+// RUVLO2
+
+1 x webench ccomp2 (0603 1600 pF 50V)
+ http://www.mouser.com/ProductDetail/Murata/GRM1885C1H162JA01D/?qs=2YjXvJr3xvj9dMpk%252bcTsdg%3d%3d
+// CCOMP2
+
+1 x webench ccomp (0402 0.18 uF 4V)
+ http://www.mouser.com/ProductDetail/Murata/GRM155C80G184KE01D/?qs=MY6wChARw2xkpToUm96GCw%3d%3d
+// CCOMP
+
+1 x webench lin (1.5uH 3.15mOhms)
+ http://www.coilcraft.com/xal1060.cfm XAL1060-152MEB
+// LIN
+
+1 x webench lout (15uH 17.75mOhms)
+ http://www.coilcraft.com/xal1010.cfm XAL1010-153MEB
+// LOUT
+
+1 x webench rramp (0402 100 ohms)
+ http://www.mouser.com/ProductDetail/Vishay-Dale/CRCW0402100RFKED/?qs=sGAEpiMZZMu61qfTUdNhG2DpbjADlD3GufIDDbTfwUk%3d
+// RRAMP
+
+1 x webench ccc (0402 0.22 uF 10V)
+ http://www.mouser.com/ProductDetail/Murata/GRM155R61A224KE19D/?qs=5bAuhL3RhmP2%252bUJqdGBuag%3d%3d
+// CCC
+
+1 x webench rfadj (0402 33.2K 50V)
+ http://www.mouser.com/ProductDetail/Vishay/CRCW040233K2FKED/?qs=TNtMkGKFKOxaNJ4fnQ3loQ%3d%3d
+// RFADJ
+
+1 x webench m1 (12A 2.1W 40V drain +-20V gate)
+// http://www.mouser.com/ProductDetail/Infineon/BSZ097N04LS-G/?qs=9Vqdt%252bdHmfJifwIkIsZrEQ%3d%3d
+// issue: mouser might take a few months...
+ http://search.digikey.com/us/en/products/BSZ097N04LS%20G/BSZ097N04LSGINCT-ND/1936398
+// M1
+
+1 x webench rsense
+ http://search.digikey.com/us/en/products/CSNL1206FT2L00/CSNL1206FT2L00CT-ND/1788121
+// RSENSE
+
+1 x webench d1 (12A 0.95V)
+ http://www.mouser.com/ProductDetail/Vishay/VS-12CWQ10FNPBF/?qs=JM62hPbbLXPWrWgEKbyKBA%3d%3d
+// D1
+
+1 x webench rfb2 (0402 84.5K)
+ http://www.mouser.com/ProductDetail/Vishay/CRCW040284K5FKED/?qs=lxmYmG9KtX%252bHRS58fwsZYQ%3d%3d
+// RFB2
+
+1 x webench rfb1 (0402 10K)
+ http://www.mouser.com/ProductDetail/Vishay-Dale/CRCW040210K0FKED/?qs=sGAEpiMZZMu61qfTUdNhG2DpbjADlD3GcalbOv9utCY%3d
+// RFB1
+
+//3 x webench cout (150 uF 16V)
+// http://www.mouser.com/ProductDetail/United-Chemi-Con-UCC/APXA160ARA151MJ80G/?qs=T4Ji%252bqW8zB8OyxZT4KKAgw%3d%3d
+
+2 x webench cout replacement (330 uF 16V)
+ http://www.mouser.com/ProductDetail/Nichicon/RR71C331MDN1/?qs=bW1g5Sys4u33GoIae2uX7g%3d%3d
+// COUT$0, COUT$1
+
+1 x webench cramp (0805 560 pF 50V)
+ http://search.digikey.com/us/en/products/CC0805KRX7R9BB561/311-1125-1-ND/303035
+// might have to get 10
+// CRAMP
+
+1 x switching regulator controller
+ http://www.mouser.com/ProductDetail/National-Semiconductor-TI/LM3481MM-NOPB/?qs=sGAEpiMZZMvFgFrcgbsedf6UbclRl4cqDguUT%2f8Yt0E%3d
+// U$1
+
+// Other
+
+1 x FIT-PC power connector
+ http://www.mouser.com/ProductDetail/Kobiconn/171-PA35135-E/?qs=sGAEpiMZZMv0W4pxf2HiVxfWv8xR5CDgzpvGedjd4Rg%3D
diff --git a/gyro_board/schematic/power_converter.brd b/gyro_board/schematic/power_converter.brd
new file mode 100644
index 0000000..bf8db75
--- /dev/null
+++ b/gyro_board/schematic/power_converter.brd
@@ -0,0 +1,1125 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE eagle SYSTEM "eagle.dtd">
+<eagle version="6.4">
+<drawing>
+<settings>
+<setting alwaysvectorfont="no"/>
+<setting verticaltext="up"/>
+</settings>
+<grid distance="0.125" unitdist="mm" unit="mm" style="lines" multiple="1" display="yes" altdistance="0.025" altunitdist="inch" altunit="inch"/>
+<layers>
+<layer number="1" name="Top" color="4" fill="1" visible="yes" active="yes"/>
+<layer number="16" name="Bottom" color="1" fill="1" visible="yes" active="yes"/>
+<layer number="17" name="Pads" color="2" fill="1" visible="yes" active="yes"/>
+<layer number="18" name="Vias" color="2" fill="1" visible="yes" active="yes"/>
+<layer number="19" name="Unrouted" color="6" fill="1" visible="yes" active="yes"/>
+<layer number="20" name="Dimension" color="15" fill="1" visible="yes" active="yes"/>
+<layer number="21" name="tPlace" color="7" fill="1" visible="yes" active="yes"/>
+<layer number="22" name="bPlace" color="7" fill="1" visible="yes" active="yes"/>
+<layer number="23" name="tOrigins" color="15" fill="1" visible="yes" active="yes"/>
+<layer number="24" name="bOrigins" color="15" fill="1" visible="yes" active="yes"/>
+<layer number="25" name="tNames" color="7" fill="1" visible="no" active="yes"/>
+<layer number="26" name="bNames" color="7" fill="1" visible="no" active="yes"/>
+<layer number="27" name="tValues" color="7" fill="1" visible="no" active="yes"/>
+<layer number="28" name="bValues" color="7" fill="1" visible="no" active="yes"/>
+<layer number="29" name="tStop" color="7" fill="3" visible="no" active="yes"/>
+<layer number="30" name="bStop" color="7" fill="6" visible="no" active="yes"/>
+<layer number="31" name="tCream" color="7" fill="4" visible="yes" active="yes"/>
+<layer number="32" name="bCream" color="7" fill="5" visible="yes" active="yes"/>
+<layer number="33" name="tFinish" color="6" fill="3" visible="no" active="yes"/>
+<layer number="34" name="bFinish" color="6" fill="6" visible="no" active="yes"/>
+<layer number="35" name="tGlue" color="7" fill="4" visible="no" active="yes"/>
+<layer number="36" name="bGlue" color="7" fill="5" visible="no" active="yes"/>
+<layer number="37" name="tTest" color="7" fill="1" visible="no" active="yes"/>
+<layer number="38" name="bTest" color="7" fill="1" visible="no" active="yes"/>
+<layer number="39" name="tKeepout" color="4" fill="11" visible="yes" active="yes"/>
+<layer number="40" name="bKeepout" color="1" fill="11" visible="yes" active="yes"/>
+<layer number="41" name="tRestrict" color="4" fill="10" visible="no" active="yes"/>
+<layer number="42" name="bRestrict" color="1" fill="10" visible="no" active="yes"/>
+<layer number="43" name="vRestrict" color="2" fill="10" visible="no" active="yes"/>
+<layer number="44" name="Drills" color="7" fill="1" visible="no" active="yes"/>
+<layer number="45" name="Holes" color="7" fill="1" visible="no" active="yes"/>
+<layer number="46" name="Milling" color="3" fill="1" visible="no" active="yes"/>
+<layer number="47" name="Measures" color="7" fill="1" visible="no" active="yes"/>
+<layer number="48" name="Document" color="7" fill="1" visible="no" active="yes"/>
+<layer number="49" name="Reference" color="7" fill="1" visible="no" active="yes"/>
+<layer number="50" name="dxf" color="7" fill="1" visible="no" active="yes"/>
+<layer number="51" name="tDocu" color="7" fill="1" visible="no" active="yes"/>
+<layer number="52" name="bDocu" color="7" fill="1" visible="no" active="yes"/>
+<layer number="53" name="tGND_GNDA" color="7" fill="1" visible="no" active="yes"/>
+<layer number="54" name="bGND_GNDA" color="7" fill="1" visible="no" active="yes"/>
+<layer number="56" name="wert" color="7" fill="1" visible="no" active="yes"/>
+<layer number="91" name="Nets" color="2" fill="1" visible="no" active="no"/>
+<layer number="92" name="Busses" color="1" fill="1" visible="no" active="no"/>
+<layer number="93" name="Pins" color="2" fill="1" visible="no" active="no"/>
+<layer number="94" name="Symbols" color="4" fill="1" visible="no" active="no"/>
+<layer number="95" name="Names" color="7" fill="1" visible="no" active="no"/>
+<layer number="96" name="Values" color="7" fill="1" visible="no" active="no"/>
+<layer number="97" name="Info" color="7" fill="1" visible="no" active="no"/>
+<layer number="98" name="Guide" color="6" fill="1" visible="no" active="no"/>
+<layer number="99" name="Anatomie" color="7" fill="1" visible="no" active="no"/>
+<layer number="100" name="Muster" color="7" fill="1" visible="no" active="yes"/>
+<layer number="101" name="Patch_Top" color="7" fill="1" visible="no" active="yes"/>
+<layer number="102" name="Brücken" color="7" fill="1" visible="no" active="yes"/>
+<layer number="103" name="CableCode" color="7" fill="1" visible="no" active="yes"/>
+<layer number="104" name="Name" color="7" fill="1" visible="no" active="yes"/>
+<layer number="105" name="tPlate" color="7" fill="1" visible="no" active="yes"/>
+<layer number="106" name="bPlate" color="7" fill="1" visible="no" active="yes"/>
+<layer number="107" name="Crop" color="7" fill="1" visible="no" active="yes"/>
+<layer number="110" name="tdokum" color="7" fill="1" visible="no" active="yes"/>
+<layer number="111" name="bdokum" color="7" fill="1" visible="no" active="yes"/>
+<layer number="116" name="Patch_BOT" color="7" fill="1" visible="no" active="yes"/>
+<layer number="121" name="_tsilk" color="7" fill="1" visible="no" active="yes"/>
+<layer number="122" name="_bsilk" color="7" fill="1" visible="no" active="yes"/>
+<layer number="125" name="_tNames" color="7" fill="1" visible="no" active="yes"/>
+<layer number="126" name="_bNames" color="7" fill="1" visible="no" active="yes"/>
+<layer number="144" name="Drill_legend" color="7" fill="1" visible="no" active="yes"/>
+<layer number="151" name="HeatSink" color="7" fill="1" visible="no" active="yes"/>
+<layer number="199" name="L$199" color="7" fill="1" visible="no" active="yes"/>
+<layer number="200" name="200bmp" color="7" fill="1" visible="no" active="yes"/>
+<layer number="201" name="201bmp" color="7" fill="1" visible="no" active="yes"/>
+<layer number="202" name="202bmp" color="7" fill="1" visible="no" active="yes"/>
+<layer number="203" name="203bmp" color="4" fill="10" visible="no" active="yes"/>
+<layer number="204" name="204bmp" color="5" fill="10" visible="no" active="yes"/>
+<layer number="205" name="205bmp" color="6" fill="10" visible="no" active="yes"/>
+<layer number="206" name="206bmp" color="7" fill="10" visible="no" active="yes"/>
+<layer number="207" name="207bmp" color="8" fill="10" visible="no" active="yes"/>
+<layer number="208" name="208bmp" color="9" fill="10" visible="no" active="yes"/>
+<layer number="209" name="209bmp" color="7" fill="1" visible="no" active="yes"/>
+<layer number="210" name="210bmp" color="7" fill="1" visible="no" active="yes"/>
+<layer number="211" name="211bmp" color="7" fill="1" visible="no" active="yes"/>
+<layer number="212" name="212bmp" color="7" fill="1" visible="no" active="yes"/>
+<layer number="213" name="213bmp" color="7" fill="1" visible="no" active="yes"/>
+<layer number="214" name="214bmp" color="7" fill="1" visible="no" active="yes"/>
+<layer number="215" name="215bmp" color="7" fill="1" visible="no" active="yes"/>
+<layer number="216" name="216bmp" color="7" fill="1" visible="no" 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="250" name="Descript" color="7" fill="1" visible="no" active="yes"/>
+<layer number="251" name="SMDround" color="7" fill="1" visible="no" active="yes"/>
+<layer number="254" name="Cool" color="7" fill="1" visible="no" active="yes"/>
+</layers>
+<board>
+<plain>
+<wire x1="0" y1="0" x2="64" y2="0" width="0" layer="20"/>
+<wire x1="64" y1="0" x2="64" y2="26" width="0" layer="20"/>
+<wire x1="64" y1="26" x2="0" y2="26" width="0" layer="20"/>
+<wire x1="0" y1="26" x2="0" y2="0" width="0" layer="20"/>
+<text x="7.431" y="10.112" size="3.81" layer="21">-</text>
+<text x="53.764" y="16.181" size="3.81" layer="21" rot="R90">-</text>
+<text x="51.551" y="23.694" size="2.1844" layer="21">+</text>
+<text x="6.607" y="23.73" size="2.1844" layer="21">+</text>
+<text x="51.594" y="15.002" size="1" layer="21" font="vector" ratio="10" rot="SR270">out</text>
+<text x="5.48" y="25.479" size="1" layer="21" font="vector" ratio="10" rot="SR270">in</text>
+<text x="51.301" y="8.819" size="2.1844" layer="21">+</text>
+<text x="50.111" y="7.194" size="3.81" layer="21" rot="R270">-</text>
+<text x="62.844" y="8.752" size="0.8128" layer="21" font="vector" ratio="10" rot="SR270">gyro</text>
+<text x="62.051" y="8.944" size="2.1844" layer="21">+</text>
+<text x="62.051" y="22.194" size="2.1844" layer="21">+</text>
+<text x="0.176" y="18.694" size="2.1844" layer="21">+</text>
+<text x="0.73" y="17.354" size="1" layer="21" font="vector" ratio="10" rot="SR270">in</text>
+<text x="2.763" y="13.431" size="3.81" layer="21" rot="R90">-</text>
+<text x="60.861" y="17.944" size="3.81" layer="21" rot="R270">-</text>
+<text x="60.861" y="5.444" size="3.81" layer="21" rot="R270">-</text>
+<text x="44.176" y="2.944" size="2.1844" layer="21">+</text>
+<text x="36.676" y="5.444" size="2.1844" layer="21">+</text>
+<text x="41.931" y="2.486" size="3.81" layer="21">-</text>
+<text x="34.056" y="4.986" size="3.81" layer="21">-</text>
+</plain>
+<libraries>
+<library name="custom_parts">
+<packages>
+<package name="MSOP10">
+<description><b>10-Lead Mini Small Outline Package [MSOP]</b> (RM-10)<p>
+Source: http://www.analog.com/UploadedFiles/Data_Sheets/35641221898805SSM2167_b.pdf<br>
+COMPLIANT TO JEDEC STANDARDS MO-187BA</description>
+<wire x1="-1.4" y1="1.4" x2="1.4" y2="1.4" width="0.2032" layer="21"/>
+<wire x1="1.4" y1="1.4" x2="1.4" y2="-1.4" width="0.2032" layer="21"/>
+<wire x1="1.4" y1="-1.4" x2="-1.4" y2="-1.4" width="0.2032" layer="21"/>
+<wire x1="-1.4" y1="-1.4" x2="-1.4" y2="1.4" width="0.2032" layer="21"/>
+<wire x1="-0.8" y1="-1.1" x2="-0.8" y2="-0.5" width="0.2032" layer="21" curve="-180"/>
+<wire x1="-0.8" y1="-0.5" x2="-0.8" y2="-1.1" width="0.2032" layer="21"/>
+<smd name="1" x="-1" y="-2.1131" dx="0.25" dy="1" layer="1"/>
+<smd name="2" x="-0.5" y="-2.1131" dx="0.25" dy="1" layer="1"/>
+<smd name="3" x="0" y="-2.1131" dx="0.25" dy="1" layer="1"/>
+<smd name="4" x="0.5" y="-2.1131" dx="0.25" dy="1" layer="1"/>
+<smd name="5" x="1" y="-2.1131" dx="0.25" dy="1" layer="1"/>
+<smd name="6" x="1" y="2.1131" dx="0.25" dy="1" layer="1" rot="R180"/>
+<smd name="7" x="0.5" y="2.1131" dx="0.25" dy="1" layer="1" rot="R180"/>
+<smd name="8" x="0" y="2.1131" dx="0.25" dy="1" layer="1" rot="R180"/>
+<smd name="9" x="-0.5" y="2.1131" dx="0.25" dy="1" layer="1" rot="R180"/>
+<smd name="10" x="-1" y="2.1131" dx="0.25" dy="1" layer="1" rot="R180"/>
+<text x="-2.032" y="-2.54" size="1.27" layer="25" ratio="10" rot="R90">>NAME</text>
+<text x="3.302" y="-2.54" size="1.27" layer="27" ratio="10" rot="R90">>VALUE</text>
+<rectangle x1="-1.1244" y1="-2.5" x2="-0.8744" y2="-1.5" layer="51"/>
+<rectangle x1="-0.6244" y1="-2.5" x2="-0.3744" y2="-1.5" layer="51"/>
+<rectangle x1="-0.1244" y1="-2.5" x2="0.1256" y2="-1.5" layer="51"/>
+<rectangle x1="0.3756" y1="-2.5" x2="0.6256" y2="-1.5" layer="51"/>
+<rectangle x1="0.8756" y1="-2.5" x2="1.1256" y2="-1.5" layer="51"/>
+<rectangle x1="0.8744" y1="1.5" x2="1.1244" y2="2.5" layer="51" rot="R180"/>
+<rectangle x1="0.3744" y1="1.5" x2="0.6244" y2="2.5" layer="51" rot="R180"/>
+<rectangle x1="-0.1256" y1="1.5" x2="0.1244" y2="2.5" layer="51" rot="R180"/>
+<rectangle x1="-0.6256" y1="1.5" x2="-0.3756" y2="2.5" layer="51" rot="R180"/>
+<rectangle x1="-1.1256" y1="1.5" x2="-0.8756" y2="2.5" layer="51" rot="R180"/>
+</package>
+<package name="1060-152">
+<description><b>coilcraft inductor</b><br>
+drawings at <a href="http://www.coilcraft.com/pdf_viewer/showpdf.cfm?f=pdf_store:xal1060_.pdf">http://www.coilcraft.com/pdf_viewer/showpdf.cfm?f=pdf_store:xal1060_.pdf</a></description>
+<smd name="P$1" x="-3.325" y="0" dx="2.39" dy="9.5" layer="1"/>
+<smd name="P$2" x="3.325" y="0" dx="2.39" dy="9.5" layer="1"/>
+<rectangle x1="-5" y1="-5.65" x2="5" y2="5.65" layer="39"/>
+</package>
+<package name="PG-TSDSON8">
+<description><b>infineon mosfet package</b><br>
+created from drawings at <a href="http://www.infineon.com/dgdl/Recommendations+for+Board+Assembly_T(S)DSON.pdf?folderId=db3a304313b8b5a60113cee8763b02d7&fileId=db3a30432239cccd0122c1581cb45996">http://www.infineon.com/dgdl/Recommendations+for+Board+Assembly_T(S)DSON.pdf?folderId=db3a304313b8b5a60113cee8763b02d7&fileId=db3a30432239cccd0122c1581cb45996</a> (page 13 and TSDSON is Shrink SuperSO8)</description>
+<smd name="S$1" x="-0.325" y="-1.5" dx="0.8" dy="0.34" layer="1" rot="R90"/>
+<smd name="S$2" x="0.325" y="-1.5" dx="0.8" dy="0.34" layer="1" rot="R90"/>
+<smd name="G" x="0.975" y="-1.5" dx="0.8" dy="0.34" layer="1" rot="R90"/>
+<smd name="S$0" x="-0.975" y="-1.5" dx="0.8" dy="0.34" layer="1" rot="R90"/>
+<smd name="D$1" x="-0.975" y="1.25" dx="0.34" dy="1.3" layer="1"/>
+<smd name="D$2" x="-0.325" y="1.25" dx="0.34" dy="1.3" layer="1"/>
+<smd name="D$3" x="0.325" y="1.25" dx="0.34" dy="1.3" layer="1"/>
+<smd name="D$4" x="0.975" y="1.25" dx="0.34" dy="1.3" layer="1"/>
+<smd name="D$0" x="0" y="0.395" dx="2.29" dy="1.71" layer="1"/>
+<rectangle x1="-1.6" y1="-1.9" x2="1.6" y2="1.9" layer="39"/>
+</package>
+<package name="1010-153">
+<description><b>coilcraft inductor</b><br>
+drawings at <a href="http://www.coilcraft.com/pdf_viewer/showpdf.cfm?f=pdf_store:xal1010_.pdf">http://www.coilcraft.com/pdf_viewer/showpdf.cfm?f=pdf_store:xal1010_.pdf</a></description>
+<smd name="P$1" x="-3.325" y="0" dx="2.38" dy="8.71" layer="1"/>
+<smd name="P$2" x="3.325" y="0" dx="2.38" dy="8.71" layer="1"/>
+<rectangle x1="-5" y1="-5.65" x2="5" y2="5.65" layer="39"/>
+</package>
+<package name="ELFH0225*">
+<description>Amphenol PCD ELFH0225*</description>
+<pad name="P$1" x="2.54" y="2.54" drill="1.4" shape="square" rot="R180"/>
+<pad name="P$2" x="-2.54" y="2.54" drill="1.4" shape="square" rot="R180"/>
+<rectangle x1="-5.9944" y1="-3.556" x2="5.9944" y2="6.223" layer="39" rot="R180"/>
+<text x="-3.81" y="6.35" size="1.27" layer="25">>NAME</text>
+<text x="-3.81" y="-5.08" size="1.27" layer="27">>VALUE</text>
+<wire x1="5.1562" y1="0.635" x2="5.1562" y2="4.445" width="0.2032" layer="21"/>
+<wire x1="-5.1562" y1="4.445" x2="-5.1562" y2="0.635" width="0.2032" layer="21"/>
+<wire x1="-5.1562" y1="0.635" x2="5.1562" y2="0.635" width="0.2032" layer="21"/>
+<wire x1="3.81" y1="4.445" x2="1.27" y2="4.445" width="0.2032" layer="21" curve="100"/>
+<wire x1="-1.27" y1="4.445" x2="-3.81" y2="4.445" width="0.2032" layer="21" curve="100"/>
+<wire x1="5.08" y1="4.445" x2="3.81" y2="4.445" width="0.2032" layer="21"/>
+<wire x1="1.27" y1="4.445" x2="-1.27" y2="4.445" width="0.2032" layer="21"/>
+<wire x1="-3.81" y1="4.445" x2="-5.08" y2="4.445" width="0.2032" layer="21"/>
+</package>
+<package name="SOD-123">
+<description><b>SOD-123 SMA package</b><br>
+using dimensions from <a href="http://www.onsemi.com/pub_link/Collateral/MMSZ5221BT1-D.PDF">http://www.onsemi.com/pub_link/Collateral/MMSZ5221BT1-D.PDF</a></description>
+<smd name="CATHODE" x="1.635" y="0" dx="0.91" dy="1.22" layer="1"/>
+<smd name="ANODE" x="-1.635" y="0" dx="0.91" dy="1.22" layer="1"/>
+<rectangle x1="0.1" y1="-1" x2="1.1" y2="1" layer="21"/>
+<rectangle x1="-2" y1="-0.9" x2="2" y2="0.9" layer="39"/>
+</package>
+<package name="RR71C331MDN1">
+<description><b>RR71C331MDN1 cap</b><br>
+dimensions from <a href="http://www.nichicon.co.jp/english/products/pdf/2009fpcap_catalog_r7.pdf">http://www.nichicon.co.jp/english/products/pdf/2009fpcap_catalog_r7.pdf</a></description>
+<circle x="0" y="0" radius="5" width="0.127" layer="39"/>
+<pad name="+" x="-2.5" y="0" drill="0.9"/>
+<pad name="-" x="2.5" y="0" drill="0.9"/>
+<text x="-1.3" y="0.4" size="0.4064" layer="21" font="vector">+</text>
+<text x="1.2" y="0.4" size="0.4064" layer="21" font="vector">-</text>
+</package>
+<package name="D-PAK">
+<description><b>D-PAK (TO-252AA)</b><br>
+drawings at <a href="http://www.vishay.com/docs/95016/dpak252a.pdf">http://www.vishay.com/docs/95016/dpak252a.pdf</a></description>
+<smd name="CATHODE" x="0" y="2.585" dx="6.74" dy="6.23" layer="1"/>
+<smd name="ANODE$0" x="-2.28" y="-4.56" dx="1.624" dy="2.28" layer="1"/>
+<smd name="ANODE$1" x="2.28" y="-4.56" dx="1.624" dy="2.28" layer="1"/>
+<rectangle x1="-3.5" y1="-6.3" x2="3.5" y2="6.5" layer="39"/>
+</package>
+</packages>
+</library>
+<library name="resistor">
+<packages>
+<package name="C0402">
+<description><b>CAPACITOR</b><p>
+chip</description>
+<wire x1="-0.245" y1="0.224" x2="0.245" y2="0.224" width="0.1524" layer="51"/>
+<wire x1="0.245" y1="-0.224" x2="-0.245" y2="-0.224" width="0.1524" layer="51"/>
+<wire x1="-1.473" y1="0.483" x2="1.473" y2="0.483" width="0.0508" layer="39"/>
+<wire x1="1.473" y1="0.483" x2="1.473" y2="-0.483" width="0.0508" layer="39"/>
+<wire x1="1.473" y1="-0.483" x2="-1.473" y2="-0.483" width="0.0508" layer="39"/>
+<wire x1="-1.473" y1="-0.483" x2="-1.473" y2="0.483" width="0.0508" layer="39"/>
+<smd name="1" x="-0.65" y="0" dx="0.7" dy="0.9" layer="1"/>
+<smd name="2" x="0.65" y="0" dx="0.7" dy="0.9" layer="1"/>
+<text x="-0.635" y="0.762" size="1.27" layer="25">>NAME</text>
+<text x="-0.635" y="-1.905" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-0.554" y1="-0.3048" x2="-0.254" y2="0.2951" layer="51"/>
+<rectangle x1="0.2588" y1="-0.3048" x2="0.5588" y2="0.2951" layer="51"/>
+<rectangle x1="-0.1999" y1="-0.3" x2="0.1999" y2="0.3" layer="35"/>
+</package>
+<package name="C0603">
+<description><b>CAPACITOR</b><p>
+chip</description>
+<wire x1="-1.473" y1="0.983" x2="1.473" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="1.473" y1="0.983" x2="1.473" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="1.473" y1="-0.983" x2="-1.473" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="-1.473" y1="-0.983" x2="-1.473" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="-0.356" y1="0.432" x2="0.356" y2="0.432" width="0.1016" layer="51"/>
+<wire x1="-0.356" y1="-0.419" x2="0.356" y2="-0.419" width="0.1016" layer="51"/>
+<smd name="1" x="-0.85" y="0" dx="1.1" dy="1" layer="1"/>
+<smd name="2" x="0.85" y="0" dx="1.1" dy="1" layer="1"/>
+<text x="-0.889" y="0.762" size="1.27" layer="25">>NAME</text>
+<text x="-0.889" y="-2.032" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-0.8382" y1="-0.4699" x2="-0.3381" y2="0.4801" layer="51"/>
+<rectangle x1="0.3302" y1="-0.4699" x2="0.8303" y2="0.4801" layer="51"/>
+<rectangle x1="-0.1999" y1="-0.3" x2="0.1999" y2="0.3" layer="35"/>
+</package>
+<package name="C0805">
+<description><b>CAPACITOR</b><p>
+chip</description>
+<wire x1="-1.973" y1="0.983" x2="1.973" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="1.973" y1="-0.983" x2="-1.973" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="-1.973" y1="-0.983" x2="-1.973" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="-0.381" y1="0.66" x2="0.381" y2="0.66" width="0.1016" layer="51"/>
+<wire x1="-0.356" y1="-0.66" x2="0.381" y2="-0.66" width="0.1016" layer="51"/>
+<wire x1="1.973" y1="0.983" x2="1.973" y2="-0.983" width="0.0508" layer="39"/>
+<smd name="1" x="-0.85" y="0" dx="1.3" dy="1.5" layer="1"/>
+<smd name="2" x="0.85" y="0" dx="1.3" dy="1.5" layer="1"/>
+<text x="-0.889" y="1.016" size="1.27" layer="25">>NAME</text>
+<text x="-0.889" y="-2.286" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-1.0922" y1="-0.7239" x2="-0.3421" y2="0.7262" layer="51"/>
+<rectangle x1="0.3556" y1="-0.7239" x2="1.1057" y2="0.7262" layer="51"/>
+<rectangle x1="-0.1001" y1="-0.4001" x2="0.1001" y2="0.4001" layer="35"/>
+</package>
+<package name="R0402">
+<description><b>RESISTOR</b><p>
+chip</description>
+<wire x1="-0.245" y1="0.224" x2="0.245" y2="0.224" width="0.1524" layer="51"/>
+<wire x1="0.245" y1="-0.224" x2="-0.245" y2="-0.224" width="0.1524" layer="51"/>
+<wire x1="-1.473" y1="0.483" x2="1.473" y2="0.483" width="0.0508" layer="39"/>
+<wire x1="1.473" y1="0.483" x2="1.473" y2="-0.483" width="0.0508" layer="39"/>
+<wire x1="1.473" y1="-0.483" x2="-1.473" y2="-0.483" width="0.0508" layer="39"/>
+<wire x1="-1.473" y1="-0.483" x2="-1.473" y2="0.483" width="0.0508" layer="39"/>
+<smd name="1" x="-0.65" y="0" dx="0.7" dy="0.9" layer="1"/>
+<smd name="2" x="0.65" y="0" dx="0.7" dy="0.9" layer="1"/>
+<text x="-0.635" y="0.762" size="1.27" layer="25">>NAME</text>
+<text x="-0.635" y="-2.032" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-0.554" y1="-0.3048" x2="-0.254" y2="0.2951" layer="51"/>
+<rectangle x1="0.2588" y1="-0.3048" x2="0.5588" y2="0.2951" layer="51"/>
+<rectangle x1="-0.1999" y1="-0.4001" x2="0.1999" y2="0.4001" layer="35"/>
+</package>
+<package name="M1206">
+<description><b>RESISTOR</b><p>
+MELF 0.25 W</description>
+<wire x1="-2.473" y1="1.483" x2="2.473" y2="1.483" width="0.0508" layer="39"/>
+<wire x1="2.473" y1="-1.483" x2="-2.473" y2="-1.483" width="0.0508" layer="39"/>
+<wire x1="-2.473" y1="-1.483" x2="-2.473" y2="1.483" width="0.0508" layer="39"/>
+<wire x1="2.473" y1="1.483" x2="2.473" y2="-1.483" width="0.0508" layer="39"/>
+<wire x1="1.143" y1="0.8382" x2="-1.143" y2="0.8382" width="0.1524" layer="51"/>
+<wire x1="1.143" y1="-0.8382" x2="-1.143" y2="-0.8382" width="0.1524" layer="51"/>
+<smd name="1" x="-1.4" y="0" dx="1.6" dy="2" layer="1"/>
+<smd name="2" x="1.4" y="0" dx="1.6" dy="2" layer="1"/>
+<text x="-1.27" y="1.27" size="1.27" layer="25">>NAME</text>
+<text x="-1.27" y="-2.54" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-1.7018" y1="-0.9144" x2="-1.1176" y2="0.9144" layer="51"/>
+<rectangle x1="1.1176" y1="-0.9144" x2="1.7018" y2="0.9144" layer="51"/>
+<rectangle x1="-0.3" y1="-0.8001" x2="0.3" y2="0.8001" layer="35"/>
+</package>
+<package name="R1206">
+<description><b>RESISTOR</b><p>
+chip</description>
+<wire x1="0.9525" y1="-0.8128" x2="-0.9652" y2="-0.8128" width="0.1524" layer="51"/>
+<wire x1="0.9525" y1="0.8128" x2="-0.9652" y2="0.8128" width="0.1524" layer="51"/>
+<wire x1="-2.473" y1="0.983" x2="2.473" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="2.473" y1="0.983" x2="2.473" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="2.473" y1="-0.983" x2="-2.473" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="-2.473" y1="-0.983" x2="-2.473" y2="0.983" width="0.0508" layer="39"/>
+<smd name="2" x="1.422" y="0" dx="1.6" dy="1.803" layer="1"/>
+<smd name="1" x="-1.422" y="0" dx="1.6" dy="1.803" layer="1"/>
+<text x="-1.397" y="1.143" size="1.27" layer="25">>NAME</text>
+<text x="-1.397" y="-2.413" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-1.6891" y1="-0.8763" x2="-0.9525" y2="0.8763" layer="51"/>
+<rectangle x1="0.9525" y1="-0.8763" x2="1.6891" y2="0.8763" layer="51"/>
+<rectangle x1="-0.3" y1="-0.7" x2="0.3" y2="0.7" layer="35"/>
+</package>
+<package name="C1210">
+<description><b>CAPACITOR</b><p>
+chip</description>
+<wire x1="-2.473" y1="1.483" x2="2.473" y2="1.483" width="0.0508" layer="39"/>
+<wire x1="2.473" y1="-1.483" x2="-2.473" y2="-1.483" width="0.0508" layer="39"/>
+<wire x1="-2.473" y1="-1.483" x2="-2.473" y2="1.483" width="0.0508" layer="39"/>
+<wire x1="-0.9652" y1="1.2446" x2="0.9652" y2="1.2446" width="0.1016" layer="51"/>
+<wire x1="-0.9652" y1="-1.2446" x2="0.9652" y2="-1.2446" width="0.1016" layer="51"/>
+<wire x1="2.473" y1="1.483" x2="2.473" y2="-1.483" width="0.0508" layer="39"/>
+<smd name="1" x="-1.4" y="0" dx="1.6" dy="2.7" layer="1"/>
+<smd name="2" x="1.4" y="0" dx="1.6" dy="2.7" layer="1"/>
+<text x="-1.397" y="1.651" size="1.27" layer="25">>NAME</text>
+<text x="-1.397" y="-2.921" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-1.7018" y1="-1.2954" x2="-0.9517" y2="1.3045" layer="51"/>
+<rectangle x1="0.9517" y1="-1.3045" x2="1.7018" y2="1.2954" layer="51"/>
+<rectangle x1="-0.1999" y1="-0.4001" x2="0.1999" y2="0.4001" layer="35"/>
+</package>
+</packages>
+</library>
+<library name="led">
+<packages>
+<package name="CHIPLED_0805">
+<description><b>CHIPLED</b><p>
+Source: http://www.osram.convergy.de/ ... LG_R971.pdf</description>
+<wire x1="-0.35" y1="0.925" x2="0.35" y2="0.925" width="0.1016" layer="51" curve="162.394521"/>
+<wire x1="-0.35" y1="-0.925" x2="0.35" y2="-0.925" width="0.1016" layer="51" curve="-162.394521"/>
+<wire x1="0.575" y1="0.525" x2="0.575" y2="-0.525" width="0.1016" layer="51"/>
+<wire x1="-0.575" y1="-0.5" x2="-0.575" y2="0.925" width="0.1016" layer="51"/>
+<circle x="-0.45" y="0.85" radius="0.103" width="0.1016" layer="51"/>
+<smd name="C" x="0" y="1.05" dx="1.2" dy="1.2" layer="1"/>
+<smd name="A" x="0" y="-1.05" dx="1.2" dy="1.2" layer="1"/>
+<text x="-1.27" y="-1.27" size="1.27" layer="25" rot="R90">>NAME</text>
+<text x="2.54" y="-1.27" size="1.27" layer="27" rot="R90">>VALUE</text>
+<rectangle x1="0.3" y1="0.5" x2="0.625" y2="1" layer="51"/>
+<rectangle x1="-0.325" y1="0.5" x2="-0.175" y2="0.75" layer="51"/>
+<rectangle x1="0.175" y1="0.5" x2="0.325" y2="0.75" layer="51"/>
+<rectangle x1="-0.2" y1="0.5" x2="0.2" y2="0.675" layer="51"/>
+<rectangle x1="0.3" y1="-1" x2="0.625" y2="-0.5" layer="51"/>
+<rectangle x1="-0.625" y1="-1" x2="-0.3" y2="-0.5" layer="51"/>
+<rectangle x1="0.175" y1="-0.75" x2="0.325" y2="-0.5" layer="51"/>
+<rectangle x1="-0.325" y1="-0.75" x2="-0.175" y2="-0.5" layer="51"/>
+<rectangle x1="-0.2" y1="-0.675" x2="0.2" y2="-0.5" layer="51"/>
+<rectangle x1="-0.1" y1="0" x2="0.1" y2="0.2" layer="21"/>
+<rectangle x1="-0.6" y1="0.5" x2="-0.3" y2="0.8" layer="51"/>
+<rectangle x1="-0.625" y1="0.925" x2="-0.3" y2="1" layer="51"/>
+</package>
+</packages>
+</library>
+<library name="SparkFun-Connectors">
+<description><h3>SparkFun Electronics' preferred foot prints</h3>
+In this library you'll find connectors and sockets- basically anything that can be plugged into or onto.<br><br>
+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.
+<br><br>
+<b>Licensing:</b> 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="1X03">
+<wire x1="3.81" y1="0.635" x2="4.445" y2="1.27" width="0.2032" layer="21"/>
+<wire x1="4.445" y1="1.27" x2="5.715" y2="1.27" width="0.2032" layer="21"/>
+<wire x1="5.715" y1="1.27" x2="6.35" y2="0.635" width="0.2032" layer="21"/>
+<wire x1="6.35" y1="-0.635" x2="5.715" y2="-1.27" width="0.2032" layer="21"/>
+<wire x1="5.715" y1="-1.27" x2="4.445" y2="-1.27" width="0.2032" layer="21"/>
+<wire x1="4.445" y1="-1.27" x2="3.81" y2="-0.635" width="0.2032" layer="21"/>
+<wire x1="-0.635" y1="1.27" x2="0.635" y2="1.27" width="0.2032" layer="21"/>
+<wire x1="0.635" y1="1.27" x2="1.27" y2="0.635" width="0.2032" layer="21"/>
+<wire x1="1.27" y1="-0.635" x2="0.635" y2="-1.27" width="0.2032" layer="21"/>
+<wire x1="1.27" y1="0.635" x2="1.905" y2="1.27" width="0.2032" layer="21"/>
+<wire x1="1.905" y1="1.27" x2="3.175" y2="1.27" width="0.2032" layer="21"/>
+<wire x1="3.175" y1="1.27" x2="3.81" y2="0.635" width="0.2032" layer="21"/>
+<wire x1="3.81" y1="-0.635" x2="3.175" y2="-1.27" width="0.2032" layer="21"/>
+<wire x1="3.175" y1="-1.27" x2="1.905" y2="-1.27" width="0.2032" layer="21"/>
+<wire x1="1.905" y1="-1.27" x2="1.27" y2="-0.635" width="0.2032" layer="21"/>
+<wire x1="-1.27" y1="0.635" x2="-1.27" y2="-0.635" width="0.2032" layer="21"/>
+<wire x1="-0.635" y1="1.27" x2="-1.27" y2="0.635" width="0.2032" layer="21"/>
+<wire x1="-1.27" y1="-0.635" x2="-0.635" y2="-1.27" width="0.2032" layer="21"/>
+<wire x1="0.635" y1="-1.27" x2="-0.635" y2="-1.27" width="0.2032" layer="21"/>
+<wire x1="6.35" y1="0.635" x2="6.35" y2="-0.635" width="0.2032" layer="21"/>
+<pad name="1" x="0" y="0" drill="1.016" diameter="1.8796" rot="R90"/>
+<pad name="2" x="2.54" y="0" drill="1.016" diameter="1.8796" rot="R90"/>
+<pad name="3" x="5.08" y="0" drill="1.016" diameter="1.8796" rot="R90"/>
+<text x="-1.3462" y="1.8288" 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="4.826" y1="-0.254" x2="5.334" y2="0.254" layer="51"/>
+<rectangle x1="2.286" y1="-0.254" x2="2.794" y2="0.254" layer="51"/>
+<rectangle x1="-0.254" y1="-0.254" x2="0.254" y2="0.254" layer="51"/>
+</package>
+</packages>
+</library>
+</libraries>
+<attributes>
+</attributes>
+<variantdefs>
+</variantdefs>
+<classes>
+<class number="0" name="default" width="0" drill="0">
+</class>
+</classes>
+<designrules name="SparkFun *">
+<description language="en"><b>EAGLE Design Rules</b>
+<p>
+The default Design Rules have been set to cover
+a wide range of applications. Your particular design
+may have different requirements, so please make the
+necessary adjustments and save your customized
+design rules under a new name.</description>
+<param name="layerSetup" value="(1*16)"/>
+<param name="mtCopper" value="0.035mm 0.035mm 0.035mm 0.035mm 0.035mm 0.035mm 0.035mm 0.035mm 0.035mm 0.035mm 0.035mm 0.035mm 0.035mm 0.035mm 0.035mm 0.035mm"/>
+<param name="mtIsolate" value="1.5mm 0.15mm 0.2mm 0.15mm 0.2mm 0.15mm 0.2mm 0.15mm 0.2mm 0.15mm 0.2mm 0.15mm 0.2mm 0.15mm 0.2mm"/>
+<param name="mdWireWire" value="8mil"/>
+<param name="mdWirePad" value="8mil"/>
+<param name="mdWireVia" value="8mil"/>
+<param name="mdPadPad" value="8mil"/>
+<param name="mdPadVia" value="8mil"/>
+<param name="mdViaVia" value="8mil"/>
+<param name="mdSmdPad" value="8mil"/>
+<param name="mdSmdVia" value="8mil"/>
+<param name="mdSmdSmd" value="8mil"/>
+<param name="mdViaViaSameLayer" value="8mil"/>
+<param name="mnLayersViaInSmd" value="2"/>
+<param name="mdCopperDimension" value="10mil"/>
+<param name="mdDrill" value="8mil"/>
+<param name="mdSmdStop" value="0mil"/>
+<param name="msWidth" value="8mil"/>
+<param name="msDrill" value="20mil"/>
+<param name="msMicroVia" value="9.99mm"/>
+<param name="msBlindViaRatio" value="0.5"/>
+<param name="rvPadTop" value="0.25"/>
+<param name="rvPadInner" value="0.25"/>
+<param name="rvPadBottom" value="0.25"/>
+<param name="rvViaOuter" value="0.25"/>
+<param name="rvViaInner" value="0.25"/>
+<param name="rvMicroViaOuter" value="0.25"/>
+<param name="rvMicroViaInner" value="0.25"/>
+<param name="rlMinPadTop" value="12mil"/>
+<param name="rlMaxPadTop" value="20mil"/>
+<param name="rlMinPadInner" value="10mil"/>
+<param name="rlMaxPadInner" value="20mil"/>
+<param name="rlMinPadBottom" value="12mil"/>
+<param name="rlMaxPadBottom" value="20mil"/>
+<param name="rlMinViaOuter" value="10mil"/>
+<param name="rlMaxViaOuter" value="20mil"/>
+<param name="rlMinViaInner" value="10mil"/>
+<param name="rlMaxViaInner" value="20mil"/>
+<param name="rlMinMicroViaOuter" value="4mil"/>
+<param name="rlMaxMicroViaOuter" value="20mil"/>
+<param name="rlMinMicroViaInner" value="4mil"/>
+<param name="rlMaxMicroViaInner" value="20mil"/>
+<param name="psTop" value="-1"/>
+<param name="psBottom" value="-1"/>
+<param name="psFirst" value="-1"/>
+<param name="psElongationLong" value="100"/>
+<param name="psElongationOffset" value="100"/>
+<param name="mvStopFrame" value="1"/>
+<param name="mvCreamFrame" value="0"/>
+<param name="mlMinStopFrame" value="4mil"/>
+<param name="mlMaxStopFrame" value="4mil"/>
+<param name="mlMinCreamFrame" value="0mil"/>
+<param name="mlMaxCreamFrame" value="0mil"/>
+<param name="mlViaStopLimit" value="25mil"/>
+<param name="srRoundness" value="0"/>
+<param name="srMinRoundness" value="0mil"/>
+<param name="srMaxRoundness" value="0mil"/>
+<param name="slThermalIsolate" value="10mil"/>
+<param name="slThermalsForVias" value="0"/>
+<param name="dpMaxLengthDifference" value="10mm"/>
+<param name="dpGapFactor" value="2.5"/>
+<param name="checkGrid" value="0"/>
+<param name="checkAngle" value="1"/>
+<param name="checkFont" value="1"/>
+<param name="checkRestrict" value="1"/>
+<param name="useDiameter" value="13"/>
+<param name="maxErrors" value="50"/>
+</designrules>
+<autorouter>
+<pass name="Default">
+<param name="RoutingGrid" value="50mil"/>
+<param name="tpViaShape" value="round"/>
+<param name="PrefDir.1" value="|"/>
+<param name="PrefDir.2" value="0"/>
+<param name="PrefDir.3" value="0"/>
+<param name="PrefDir.4" value="0"/>
+<param name="PrefDir.5" value="0"/>
+<param name="PrefDir.6" value="0"/>
+<param name="PrefDir.7" value="0"/>
+<param name="PrefDir.8" value="0"/>
+<param name="PrefDir.9" value="0"/>
+<param name="PrefDir.10" value="0"/>
+<param name="PrefDir.11" value="0"/>
+<param name="PrefDir.12" value="0"/>
+<param name="PrefDir.13" value="0"/>
+<param name="PrefDir.14" value="0"/>
+<param name="PrefDir.15" value="0"/>
+<param name="PrefDir.16" value="-"/>
+<param name="cfVia" value="8"/>
+<param name="cfNonPref" value="5"/>
+<param name="cfChangeDir" value="2"/>
+<param name="cfOrthStep" value="2"/>
+<param name="cfDiagStep" value="3"/>
+<param name="cfExtdStep" value="0"/>
+<param name="cfBonusStep" value="1"/>
+<param name="cfMalusStep" value="1"/>
+<param name="cfPadImpact" value="4"/>
+<param name="cfSmdImpact" value="4"/>
+<param name="cfBusImpact" value="0"/>
+<param name="cfHugging" value="3"/>
+<param name="cfAvoid" value="4"/>
+<param name="cfPolygon" value="10"/>
+<param name="cfBase.1" value="0"/>
+<param name="cfBase.2" value="1"/>
+<param name="cfBase.3" value="1"/>
+<param name="cfBase.4" value="1"/>
+<param name="cfBase.5" value="1"/>
+<param name="cfBase.6" value="1"/>
+<param name="cfBase.7" value="1"/>
+<param name="cfBase.8" value="1"/>
+<param name="cfBase.9" value="1"/>
+<param name="cfBase.10" value="1"/>
+<param name="cfBase.11" value="1"/>
+<param name="cfBase.12" value="1"/>
+<param name="cfBase.13" value="1"/>
+<param name="cfBase.14" value="1"/>
+<param name="cfBase.15" value="1"/>
+<param name="cfBase.16" value="0"/>
+<param name="mnVias" value="20"/>
+<param name="mnSegments" value="9999"/>
+<param name="mnExtdSteps" value="9999"/>
+<param name="mnRipupLevel" value="10"/>
+<param name="mnRipupSteps" value="100"/>
+<param name="mnRipupTotal" value="100"/>
+</pass>
+<pass name="Follow-me" refer="Default" active="yes">
+</pass>
+<pass name="Busses" refer="Default" active="yes">
+<param name="cfNonPref" value="4"/>
+<param name="cfBusImpact" value="4"/>
+<param name="cfHugging" value="0"/>
+<param name="mnVias" value="0"/>
+</pass>
+<pass name="Route" refer="Default" active="yes">
+</pass>
+<pass name="Optimize1" refer="Default" active="yes">
+<param name="cfVia" value="99"/>
+<param name="cfExtdStep" value="10"/>
+<param name="cfHugging" value="1"/>
+<param name="mnExtdSteps" value="1"/>
+<param name="mnRipupLevel" value="0"/>
+</pass>
+<pass name="Optimize2" refer="Optimize1" active="yes">
+<param name="cfNonPref" value="0"/>
+<param name="cfChangeDir" value="6"/>
+<param name="cfExtdStep" value="0"/>
+<param name="cfBonusStep" value="2"/>
+<param name="cfMalusStep" value="2"/>
+<param name="cfPadImpact" value="2"/>
+<param name="cfSmdImpact" value="2"/>
+<param name="cfHugging" value="0"/>
+</pass>
+<pass name="Optimize3" refer="Optimize2" active="yes">
+<param name="cfChangeDir" value="8"/>
+<param name="cfPadImpact" value="0"/>
+<param name="cfSmdImpact" value="0"/>
+</pass>
+<pass name="Optimize4" refer="Optimize3" active="yes">
+<param name="cfChangeDir" value="25"/>
+</pass>
+</autorouter>
+<elements>
+<element name="U$1" library="custom_parts" package="MSOP10" value="LM3481" x="20.125" y="4.25"/>
+<element name="CIN$0" library="resistor" package="C1210" value="C3225X7R1E106M" x="3.25" y="10"/>
+<element name="CBP" library="resistor" package="C0603" value="C0603C104K5RACT" x="14.875" y="2.375"/>
+<element name="RBP" library="resistor" package="R0402" value="CRCW040220R0FKE" x="9.375" y="2" rot="R180"/>
+<element name="RUVLO2" library="resistor" package="R0402" value="CRCW0402100KFKE" x="9.375" y="0.75" rot="R180"/>
+<element name="RUVLO1" library="resistor" package="R0402" value="CRCW040268K1FKE" x="13.125" y="0.75" rot="R180"/>
+<element name="CCOMP2" library="resistor" package="C0603" value="GRM1885C1H162JA01" x="14.875" y="4.5" rot="R180"/>
+<element name="RCOMP" library="resistor" package="R0402" value="CRCW04021K58FKE" x="17.25" y="5" rot="R270"/>
+<element name="CCOMP" library="resistor" package="C0402" value="GRM155C80G184KE01" x="14.875" y="6.125" rot="R180"/>
+<element name="RFADJ" library="resistor" package="R0402" value="CRCW040233K2FKE" x="23.375" y="6.25" rot="R180"/>
+<element name="CCC" library="resistor" package="C0402" value="GRM155R61A224KE19D" x="23.375" y="5"/>
+<element name="RRAMP" library="resistor" package="R0402" value="CRCW0402100RFKE" x="16.375" y="9.625" rot="R180"/>
+<element name="CRAMP" library="resistor" package="C0805" value="CC0805KRX7R9BB56" x="15" y="8" rot="R180"/>
+<element name="RSENSE" library="resistor" package="M1206" value="CSNL1206FT2L00" x="15.75" y="12.5" rot="R180"/>
+<element name="LIN" library="custom_parts" package="1060-152" value="XAL1060-152ME" x="16.625" y="20.125"/>
+<element name="CSEP$0" library="resistor" package="C1210" value="C3225X7R1E106M" x="25" y="21"/>
+<element name="LOUT" library="custom_parts" package="1010-153" value="XAL1010-153ME" x="34.25" y="12.25" rot="R90"/>
+<element name="D1" library="custom_parts" package="D-PAK" value=" 12CWQ10FNPB" x="35" y="21.5" rot="R270"/>
+<element name="RFB2" library="resistor" package="R0402" value="CRCW040284K5FKE" x="24.875" y="2.125" rot="R180"/>
+<element name="RFB1" library="resistor" package="R0402" value="CRCW040210K0FKED" x="22.625" y="2.75" rot="R90"/>
+<element name="M1" library="custom_parts" package="PG-TSDSON8" value="BSZ097N04LS_G" x="20.5" y="12.5" rot="R270"/>
+<element name="CIN$1" library="resistor" package="C1210" value="C3225X7R1E106M" x="3.25" y="3.5"/>
+<element name="CIN$2" library="resistor" package="C1210" value="C3225X7R1E106M" x="3.25" y="6.75"/>
+<element name="IN" library="custom_parts" package="ELFH0225*" value="POWER_CONNECTORELFH0225*" x="4.75" y="18.125" rot="R270"/>
+<element name="OUT" library="custom_parts" package="ELFH0225*" value="POWER_CONNECTORELFH0225*" x="59.375" y="19.5" rot="R90"/>
+<element name="DTVS" library="custom_parts" package="SOD-123" value="MMSZ5246BT1G" x="3.25" y="1" rot="R180"/>
+<element name="IPOW" library="led" package="CHIPLED_0805" value="" x="11" y="5.75" rot="R90"/>
+<element name="RIPOW" library="resistor" package="R1206" value="1K" x="10.625" y="4" rot="R180"/>
+<element name="OPOW" library="led" package="CHIPLED_0805" value="" x="48.75" y="4.375" rot="R90"/>
+<element name="ROPOW" library="resistor" package="R1206" value="1K" x="51.75" y="2.875" rot="R270"/>
+<element name="CSEP$1" library="resistor" package="C1210" value="C3225X7R1E106M" x="25" y="24.25"/>
+<element name="CSEP$2" library="resistor" package="C1210" value="C3225X7R1E106M" x="25" y="17.75"/>
+<element name="CSEP$3" library="resistor" package="C1210" value="C3225X7R1E106M" x="25" y="14.5"/>
+<element name="COUT$0" library="custom_parts" package="RR71C331MDN1" value="" x="45.25" y="10.125" rot="R270"/>
+<element name="COUT$1" library="custom_parts" package="RR71C331MDN1" value="" x="47.25" y="20.5" rot="R315"/>
+<element name="OUT1" library="custom_parts" package="ELFH0225*" value="POWER_CONNECTORELFH0225*" x="59.375" y="7.25" rot="R90"/>
+<element name="JP1" library="SparkFun-Connectors" package="1X03" value="" x="42.545" y="1.7145"/>
+<element name="JP2" library="SparkFun-Connectors" package="1X03" value="" x="34.925" y="1.7145"/>
+<element name="JP3" library="SparkFun-Connectors" package="1X03" value="" x="34.925" y="4.2545"/>
+</elements>
+<signals>
+<signal name="N$1">
+<contactref element="U$1" pad="10"/>
+<contactref element="RBP" pad="1"/>
+<contactref element="CBP" pad="1"/>
+<wire x1="16.375" y1="1.625" x2="17.75" y2="3" width="0.254" layer="16"/>
+<wire x1="11.875" y1="1.625" x2="16.375" y2="1.625" width="0.254" layer="16"/>
+<wire x1="11.25" y1="2.25" x2="11.875" y2="1.625" width="0.254" layer="16"/>
+<wire x1="11.25" y1="2.25" x2="11.375" y2="2.375" width="0.254" layer="1"/>
+<wire x1="11.375" y1="2.375" x2="14.025" y2="2.375" width="0.254" layer="1"/>
+<wire x1="19.125" y1="4.125" x2="19.125" y2="6.3631" width="0.254" layer="1"/>
+<wire x1="19.625" y1="3.625" x2="19.125" y2="4.125" width="0.254" layer="1"/>
+<wire x1="17.75" y1="3" x2="19" y2="3" width="0.254" layer="16"/>
+<wire x1="19" y1="3" x2="19.625" y2="3.625" width="0.254" layer="16"/>
+<wire x1="10.275" y1="2.25" x2="11.25" y2="2.25" width="0.254" layer="1"/>
+<wire x1="10.025" y1="2" x2="10.275" y2="2.25" width="0.254" layer="1"/>
+<via x="19.625" y="3.625" extent="1-16" drill="0.6"/>
+<via x="11.25" y="2.25" extent="1-16" drill="0.6"/>
+</signal>
+<signal name="N$4">
+<contactref element="U$1" pad="2"/>
+<contactref element="RUVLO2" pad="1"/>
+<contactref element="RUVLO1" pad="2"/>
+<wire x1="19.625" y1="1.375" x2="19.625" y2="2.1369" width="0.254" layer="1"/>
+<wire x1="19.5" y1="1.25" x2="19.625" y2="1.375" width="0.254" layer="1"/>
+<wire x1="18.625" y1="1.25" x2="19.5" y2="1.25" width="0.254" layer="1"/>
+<wire x1="18.125" y1="1.75" x2="18.625" y2="1.25" width="0.254" layer="1"/>
+<wire x1="17.25" y1="0.875" x2="18.125" y2="1.75" width="0.254" layer="16"/>
+<wire x1="11.25" y1="0.875" x2="17.25" y2="0.875" width="0.254" layer="16"/>
+<wire x1="10.025" y1="0.75" x2="10.15" y2="0.875" width="0.254" layer="1"/>
+<wire x1="10.15" y1="0.875" x2="11.25" y2="0.875" width="0.254" layer="1"/>
+<wire x1="11.25" y1="0.875" x2="12.35" y2="0.875" width="0.254" layer="1"/>
+<wire x1="12.35" y1="0.875" x2="12.475" y2="0.75" width="0.254" layer="1"/>
+<via x="18.125" y="1.75" extent="1-16" drill="0.6"/>
+<via x="11.25" y="0.875" extent="1-16" drill="0.6"/>
+</signal>
+<signal name="N$5">
+<contactref element="U$1" pad="3"/>
+<contactref element="CCOMP2" pad="1"/>
+<contactref element="RCOMP" pad="2"/>
+<wire x1="20.125" y1="1" x2="20.125" y2="2.1369" width="0.254" layer="1"/>
+<wire x1="19.625" y1="0.5" x2="20.125" y2="1" width="0.254" layer="1"/>
+<wire x1="17.875" y1="0.5" x2="19.625" y2="0.5" width="0.254" layer="1"/>
+<wire x1="17" y1="1.375" x2="17.875" y2="0.5" width="0.254" layer="1"/>
+<wire x1="17" y1="1.375" x2="17" y2="4.1" width="0.254" layer="1"/>
+<wire x1="17" y1="4.1" x2="17.25" y2="4.35" width="0.254" layer="1"/>
+<wire x1="17.25" y1="4.35" x2="15.875" y2="4.35" width="0.254" layer="1"/>
+<wire x1="15.875" y1="4.35" x2="15.725" y2="4.5" width="0.254" layer="1"/>
+</signal>
+<signal name="N$7">
+<contactref element="RCOMP" pad="1"/>
+<contactref element="CCOMP" pad="1"/>
+<wire x1="15.525" y1="6.125" x2="16" y2="5.65" width="0.254" layer="1"/>
+<wire x1="16" y1="5.65" x2="17.25" y2="5.65" width="0.254" layer="1"/>
+</signal>
+<signal name="N$9">
+<contactref element="U$1" pad="6"/>
+<contactref element="RFADJ" pad="2"/>
+<wire x1="22.725" y1="6.25" x2="22.6119" y2="6.3631" width="0.254" layer="1"/>
+<wire x1="22.6119" y1="6.3631" x2="21.125" y2="6.3631" width="0.254" layer="1"/>
+</signal>
+<signal name="N$8">
+<contactref element="U$1" pad="1"/>
+<contactref element="CRAMP" pad="1"/>
+<contactref element="RRAMP" pad="2"/>
+<wire x1="16.625" y1="8" x2="15.85" y2="8" width="0.254" layer="1"/>
+<wire x1="18.625" y1="6" x2="16.625" y2="8" width="0.254" layer="1"/>
+<wire x1="18.625" y1="2.6369" x2="18.625" y2="6" width="0.254" layer="1"/>
+<wire x1="19.125" y1="2.1369" x2="18.625" y2="2.6369" width="0.254" layer="1"/>
+<wire x1="15.725" y1="8.125" x2="15.725" y2="9.625" width="0.254" layer="1"/>
+<wire x1="15.85" y1="8" x2="15.725" y2="8.125" width="0.254" layer="1"/>
+</signal>
+<signal name="N$11">
+<contactref element="M1" pad="G"/>
+<contactref element="U$1" pad="8"/>
+<wire x1="20.125" y1="6.3631" x2="20.125" y2="7.375" width="0.254" layer="1"/>
+<wire x1="20.125" y1="7.375" x2="19" y2="8.5" width="0.254" layer="1"/>
+<wire x1="19" y1="8.5" x2="19" y2="11.525" width="0.254" layer="1"/>
+</signal>
+<signal name="N$10">
+<contactref element="RSENSE" pad="1"/>
+<contactref element="RRAMP" pad="1"/>
+<contactref element="M1" pad="S$0"/>
+<contactref element="M1" pad="S$2"/>
+<contactref element="M1" pad="S$1"/>
+<wire x1="19" y1="12.825" x2="19" y2="13.475" width="0.254" layer="1"/>
+<wire x1="19" y1="12.175" x2="19" y2="12.825" width="0.254" layer="1"/>
+<wire x1="17.025" y1="9.625" x2="17.025" y2="12.375" width="0.254" layer="1"/>
+<wire x1="17.025" y1="12.375" x2="17.15" y2="12.5" width="0.254" layer="1"/>
+<polygon width="0.254" layer="1" thermals="no">
+<vertex x="19.625" y="13.375"/>
+<vertex x="18.625" y="14.375"/>
+<vertex x="17.375" y="14.375"/>
+<vertex x="17.25" y="14.25"/>
+<vertex x="16.25" y="14.25"/>
+<vertex x="16.25" y="9"/>
+<vertex x="18.75" y="6.5"/>
+<vertex x="20" y="6.5"/>
+<vertex x="20" y="7.5"/>
+<vertex x="19" y="8.5"/>
+<vertex x="19" y="11.375"/>
+<vertex x="19.625" y="12"/>
+</polygon>
+</signal>
+<signal name="N$13">
+<contactref element="LIN" pad="P$2"/>
+<contactref element="M1" pad="D$0"/>
+<contactref element="M1" pad="D$1"/>
+<contactref element="M1" pad="D$3"/>
+<contactref element="M1" pad="D$2"/>
+<contactref element="M1" pad="D$4"/>
+<contactref element="CSEP$0" pad="1"/>
+<contactref element="CSEP$2" pad="1"/>
+<contactref element="CSEP$1" pad="1"/>
+<contactref element="CSEP$3" pad="1"/>
+<via x="23.25" y="12.375" extent="1-16" drill="0.6"/>
+<via x="24.625" y="12.375" extent="1-16" drill="0.6"/>
+<via x="22" y="14.5" extent="1-16" drill="0.6"/>
+<via x="20.625" y="14.5" extent="1-16" drill="0.6"/>
+<via x="17.75" y="15.5" extent="1-16" drill="0.6"/>
+<via x="17.75" y="17" extent="1-16" drill="0.6"/>
+<via x="17.75" y="18.5" extent="1-16" drill="0.6"/>
+<via x="17.75" y="20.125" extent="1-16" drill="0.6"/>
+<via x="17.75" y="21.75" extent="1-16" drill="0.6"/>
+<via x="17.75" y="23.25" extent="1-16" drill="0.6"/>
+<via x="17.75" y="24.875" extent="1-16" drill="0.6"/>
+<polygon width="0.254" layer="1" thermals="no">
+<vertex x="16.875" y="26"/>
+<vertex x="16.875" y="14.875"/>
+<vertex x="18.875" y="14.875"/>
+<vertex x="20.125" y="13.625"/>
+<vertex x="20.125" y="11.625"/>
+<vertex x="19.5" y="11"/>
+<vertex x="19.5" y="8.75"/>
+<vertex x="20.625" y="7.625"/>
+<vertex x="24" y="7.625"/>
+<vertex x="25.125" y="6.5"/>
+<vertex x="26.75" y="6.5"/>
+<vertex x="27.375" y="7.125"/>
+<vertex x="27.375" y="12"/>
+<vertex x="25.625" y="12"/>
+<vertex x="24.75" y="12.875"/>
+<vertex x="24.75" y="26"/>
+</polygon>
+<polygon width="0.254" layer="16" thermals="no">
+<vertex x="27.75" y="12"/>
+<vertex x="19.75" y="12"/>
+<vertex x="19.75" y="14"/>
+<vertex x="18.875" y="14.875"/>
+<vertex x="16.875" y="14.875"/>
+<vertex x="16.875" y="26"/>
+<vertex x="32.375" y="26"/>
+<vertex x="32.375" y="14.375"/>
+<vertex x="30.125" y="14.375"/>
+</polygon>
+</signal>
+<signal name="N$12">
+<contactref element="LOUT" pad="P$2"/>
+<contactref element="D1" pad="ANODE$0"/>
+<contactref element="D1" pad="ANODE$1"/>
+<contactref element="CSEP$0" pad="2"/>
+<contactref element="CSEP$3" pad="2"/>
+<contactref element="CSEP$1" pad="2"/>
+<contactref element="CSEP$2" pad="2"/>
+<polygon width="0.254" layer="1" thermals="no">
+<vertex x="25.25" y="26"/>
+<vertex x="25.25" y="13.125"/>
+<vertex x="25.875" y="12.5"/>
+<vertex x="37.125" y="12.5"/>
+<vertex x="39.125" y="14.375"/>
+<vertex x="39.125" y="16.875"/>
+<vertex x="38.75" y="17.25"/>
+<vertex x="33.75" y="17.25"/>
+<vertex x="32.375" y="18.875"/>
+<vertex x="32.375" y="26"/>
+</polygon>
+</signal>
+<signal name="N$15">
+<contactref element="RFB2" pad="2"/>
+<contactref element="RFB1" pad="1"/>
+<contactref element="U$1" pad="4"/>
+<wire x1="20.625" y1="2.1369" x2="20.625" y2="1.25" width="0.254" layer="1"/>
+<wire x1="20.625" y1="1.25" x2="20.75" y2="1.125" width="0.254" layer="1"/>
+<wire x1="20.75" y1="1.125" x2="21.65" y2="1.125" width="0.254" layer="1"/>
+<wire x1="21.65" y1="1.125" x2="22.625" y2="2.1" width="0.254" layer="1"/>
+<wire x1="22.625" y1="2.1" x2="24.2" y2="2.1" width="0.254" layer="1"/>
+<wire x1="24.2" y1="2.1" x2="24.225" y2="2.125" width="0.254" layer="1"/>
+</signal>
+<signal name="N$3">
+<contactref element="CCC" pad="1"/>
+<contactref element="U$1" pad="9"/>
+<wire x1="19.625" y1="5.625" x2="19.625" y2="6.3631" width="0.254" layer="1"/>
+<wire x1="20.25" y1="5" x2="19.625" y2="5.625" width="0.254" layer="1"/>
+<wire x1="20.25" y1="5" x2="22.725" y2="5" width="0.254" layer="1"/>
+</signal>
+<signal name="GND">
+<contactref element="CIN$0" pad="2"/>
+<contactref element="RUVLO1" pad="1"/>
+<contactref element="CCOMP2" pad="2"/>
+<contactref element="CCOMP" pad="2"/>
+<contactref element="U$1" pad="7"/>
+<contactref element="RFADJ" pad="1"/>
+<contactref element="CCC" pad="2"/>
+<contactref element="CRAMP" pad="2"/>
+<contactref element="RSENSE" pad="2"/>
+<contactref element="RFB1" pad="2"/>
+<contactref element="CBP" pad="2"/>
+<contactref element="CIN$2" pad="2"/>
+<contactref element="LOUT" pad="P$1"/>
+<contactref element="U$1" pad="5"/>
+<contactref element="CIN$1" pad="2"/>
+<contactref element="IN" pad="P$1"/>
+<contactref element="DTVS" pad="ANODE"/>
+<contactref element="IPOW" pad="C"/>
+<contactref element="OPOW" pad="C"/>
+<contactref element="COUT$1" pad="-"/>
+<contactref element="COUT$0" pad="-"/>
+<contactref element="OUT" pad="P$2"/>
+<contactref element="OUT1" pad="P$2"/>
+<wire x1="24.025" y1="4.8" x2="24.025" y2="5" width="0.254" layer="1"/>
+<wire x1="22.625" y1="3.4" x2="24.025" y2="4.8" width="0.254" layer="1"/>
+<wire x1="22.3881" y1="3.4" x2="22.625" y2="3.4" width="0.254" layer="1"/>
+<wire x1="21.375" y1="2.3869" x2="22.3881" y2="3.4" width="0.254" layer="1"/>
+<wire x1="20.625" y1="7.125" x2="20.625" y2="6.3631" width="0.254" layer="1"/>
+<wire x1="20.75" y1="7.25" x2="20.625" y2="7.125" width="0.254" layer="1"/>
+<wire x1="23.625" y1="7.25" x2="20.75" y2="7.25" width="0.254" layer="1"/>
+<wire x1="24.025" y1="6.85" x2="23.625" y2="7.25" width="0.254" layer="1"/>
+<wire x1="24.025" y1="6.25" x2="24.025" y2="6.85" width="0.254" layer="1"/>
+<wire x1="24.025" y1="5" x2="24.025" y2="6.25" width="0.254" layer="1"/>
+<wire x1="21.125" y1="2.1369" x2="21.375" y2="2.3869" width="0.254" layer="1"/>
+<wire x1="21.375" y1="2.3869" x2="21.375" y2="3.75" width="0.254" layer="1"/>
+<wire x1="21.375" y1="3.75" x2="20.875" y2="3.75" width="0.254" layer="16"/>
+<via x="21.375" y="3.75" extent="1-16" drill="0.6"/>
+<via x="31.125" y="4.625" extent="1-16" drill="0.6"/>
+<via x="54.5" y="5.75" extent="1-16" drill="0.6"/>
+<via x="54.125" y="3.25" extent="1-16" drill="0.6"/>
+<via x="53.875" y="1.5" extent="1-16" drill="0.6"/>
+<via x="48.875" y="6.375" extent="1-16" drill="0.6"/>
+<via x="43" y="4.625" extent="1-16" drill="0.6"/>
+<via x="38.875" y="6.5" extent="1-16" drill="0.6"/>
+<via x="30.5" y="2.625" extent="1-16" drill="0.6"/>
+<via x="27.625" y="1.5" extent="1-16" drill="0.6"/>
+<via x="24" y="3.625" extent="1-16" drill="0.6"/>
+<via x="26" y="5.375" extent="1-16" drill="0.6"/>
+<via x="28.5" y="6.5" extent="1-16" drill="0.6"/>
+<via x="27.875" y="3.75" extent="1-16" drill="0.6"/>
+<via x="31.125" y="6.5" extent="1-16" drill="0.6"/>
+<via x="35.5" y="6.375" extent="1-16" drill="0.6"/>
+<via x="45.5" y="4.125" extent="1-16" drill="0.6"/>
+<via x="39.875" y="12.25" extent="1-16" drill="0.6"/>
+<via x="40.75" y="9.875" extent="1-16" drill="0.6"/>
+<via x="49" y="11.875" extent="1-16" drill="0.6"/>
+<via x="47.375" y="8.5" extent="1-16" drill="0.6"/>
+<via x="46.75" y="6.5" extent="1-16" drill="0.6"/>
+<via x="52" y="6.5" extent="1-16" drill="0.6"/>
+<via x="56.625" y="7.125" extent="1-16" drill="0.6"/>
+<via x="61.25" y="6.625" extent="1-16" drill="0.6"/>
+<via x="59.125" y="10.375" extent="1-16" drill="0.6"/>
+<via x="50.75" y="13.75" extent="1-16" drill="0.6"/>
+<via x="49.5" y="17.25" extent="1-16" drill="0.6"/>
+<via x="54.5" y="16.5" extent="1-16" drill="0.6"/>
+<via x="61.75" y="17.375" extent="1-16" drill="0.6"/>
+<via x="6.75" y="11.125" extent="1-16" drill="0.6"/>
+<via x="6.75" y="8" extent="1-16" drill="0.6"/>
+<via x="6.75" y="3.875" extent="1-16" drill="0.6"/>
+<via x="8.375" y="6.25" extent="1-16" drill="0.6"/>
+<via x="11.625" y="8.5" extent="1-16" drill="0.6"/>
+<via x="13.5" y="10.125" extent="1-16" drill="0.6"/>
+<via x="12" y="13" extent="1-16" drill="0.6"/>
+<via x="9.875" y="10.25" extent="1-16" drill="0.6"/>
+<polygon width="0.254" layer="1" thermals="no">
+<vertex x="63.875" y="20.375"/>
+<vertex x="55.625" y="20.375"/>
+<vertex x="54.75" y="21.25"/>
+<vertex x="48.875" y="21.25"/>
+<vertex x="47.5" y="19.875"/>
+<vertex x="47.5" y="10.5"/>
+<vertex x="42.875" y="10.5"/>
+<vertex x="40" y="13.375"/>
+<vertex x="38.875" y="13.375"/>
+<vertex x="37.25" y="11.875"/>
+<vertex x="28.375" y="11.875"/>
+<vertex x="27.875" y="11.375"/>
+<vertex x="27.875" y="6.875"/>
+<vertex x="27" y="6"/>
+<vertex x="24.875" y="6"/>
+<vertex x="23.625" y="7.125"/>
+<vertex x="20.5" y="7.125"/>
+<vertex x="20.5" y="5.5"/>
+<vertex x="19" y="5.5"/>
+<vertex x="16.875" y="7"/>
+<vertex x="16.875" y="0"/>
+<vertex x="63.875" y="0"/>
+</polygon>
+<polygon width="0.254" layer="1" thermals="no">
+<vertex x="3.625" y="0"/>
+<vertex x="3.625" y="11.5"/>
+<vertex x="4.125" y="12.25"/>
+<vertex x="4.125" y="15.75"/>
+<vertex x="4.875" y="16.75"/>
+<vertex x="9.375" y="16.75"/>
+<vertex x="11.875" y="14.25"/>
+<vertex x="15.75" y="14.25"/>
+<vertex x="15.75" y="0"/>
+</polygon>
+<polygon width="0.254" layer="16" thermals="no">
+<vertex x="0" y="16.75"/>
+<vertex x="0" y="0"/>
+<vertex x="63.875" y="0"/>
+<vertex x="63.875" y="20.375"/>
+<vertex x="55.625" y="20.375"/>
+<vertex x="54.75" y="21.25"/>
+<vertex x="48.875" y="21.25"/>
+<vertex x="47.5" y="19.875"/>
+<vertex x="47.5" y="10.5"/>
+<vertex x="42.875" y="10.5"/>
+<vertex x="39.5" y="13.875"/>
+<vertex x="30.375" y="13.875"/>
+<vertex x="27.875" y="11.375"/>
+<vertex x="19" y="11.375"/>
+<vertex x="19" y="13.875"/>
+<vertex x="18.625" y="14.25"/>
+<vertex x="11.875" y="14.25"/>
+<vertex x="9.375" y="16.75"/>
+</polygon>
+<contactref element="JP1" pad="1"/>
+<contactref element="JP3" pad="1"/>
+<contactref element="JP2" pad="1"/>
+</signal>
+<signal name="N$14">
+<contactref element="D1" pad="CATHODE"/>
+<contactref element="RFB2" pad="1"/>
+<contactref element="ROPOW" pad="2"/>
+<contactref element="COUT$0" pad="+"/>
+<contactref element="COUT$1" pad="+"/>
+<contactref element="OUT" pad="P$1"/>
+<wire x1="63.125" y1="9.79" x2="63.125" y2="9.875" width="1.016" layer="16"/>
+<wire x1="63.125" y1="9.875" x2="63.125" y2="22.04" width="1.016" layer="16"/>
+<wire x1="63.125" y1="22.04" x2="56.835" y2="22.04" width="1.016" layer="16"/>
+<via x="54.625" y="23.375" extent="1-16" drill="0.6"/>
+<via x="51.875" y="23.5" extent="1-16" drill="0.6"/>
+<via x="60.125" y="22.625" extent="1-16" drill="0.6"/>
+<via x="44.375" y="20.125" extent="1-16" drill="0.6"/>
+<via x="43.75" y="23.375" extent="1-16" drill="0.6"/>
+<via x="33.625" y="23.875" extent="1-16" drill="0.6"/>
+<via x="33.625" y="22.5" extent="1-16" drill="0.6"/>
+<via x="33.625" y="21" extent="1-16" drill="0.6"/>
+<via x="33.625" y="19.625" extent="1-16" drill="0.6"/>
+<via x="41.375" y="15.75" extent="1-16" drill="0.6"/>
+<via x="45.125" y="17.125" extent="1-16" drill="0.6"/>
+<via x="40.75" y="17.25" extent="1-16" drill="0.6"/>
+<via x="43.875" y="18.75" extent="1-16" drill="0.6"/>
+<via x="47.25" y="24.625" extent="1-16" drill="0.6"/>
+<polygon width="0.254" layer="1" thermals="no">
+<vertex x="33.125" y="26"/>
+<vertex x="33.125" y="19"/>
+<vertex x="34.25" y="17.75"/>
+<vertex x="39.25" y="17.75"/>
+<vertex x="39.75" y="17.25"/>
+<vertex x="39.75" y="14.375"/>
+<vertex x="43.125" y="11"/>
+<vertex x="47" y="11"/>
+<vertex x="47" y="20.25"/>
+<vertex x="48.5" y="21.75"/>
+<vertex x="55" y="21.75"/>
+<vertex x="55.875" y="20.875"/>
+<vertex x="63.875" y="20.875"/>
+<vertex x="63.875" y="26"/>
+</polygon>
+<polygon width="0.254" layer="16" thermals="no">
+<vertex x="63.875" y="26"/>
+<vertex x="33.125" y="26"/>
+<vertex x="33.125" y="19"/>
+<vertex x="34.25" y="17.75"/>
+<vertex x="39.25" y="17.75"/>
+<vertex x="39.75" y="17.25"/>
+<vertex x="39.75" y="14.375"/>
+<vertex x="43.125" y="11"/>
+<vertex x="47" y="11"/>
+<vertex x="47" y="20.25"/>
+<vertex x="48.5" y="21.75"/>
+<vertex x="55" y="21.75"/>
+<vertex x="55.875" y="20.875"/>
+<vertex x="63.875" y="20.875"/>
+</polygon>
+<wire x1="51.75" y1="1.453" x2="51.75" y2="0.5" width="0.3048" layer="1"/>
+<via x="63.125" y="9.875" extent="1-16" drill="0.6"/>
+<wire x1="51.75" y1="0.5" x2="63.375" y2="0.5" width="0.6096" layer="1"/>
+<wire x1="63.375" y1="0.5" x2="63.375" y2="9.875" width="0.6096" layer="1"/>
+<wire x1="63.375" y1="9.875" x2="63.125" y2="9.875" width="0.3048" layer="1"/>
+<contactref element="OUT1" pad="P$1"/>
+<wire x1="63.125" y1="9.79" x2="56.835" y2="9.79" width="1.016" layer="16"/>
+<contactref element="JP1" pad="2"/>
+<contactref element="JP2" pad="2"/>
+<contactref element="JP3" pad="2"/>
+<wire x1="37.465" y1="4.2545" x2="37.465" y2="1.7145" width="0.6096" layer="1"/>
+<wire x1="37.465" y1="1.7145" x2="37.465" y2="0.5" width="0.6096" layer="1"/>
+<wire x1="37.465" y1="0.5" x2="45.085" y2="0.5" width="0.6096" layer="1"/>
+<wire x1="45.085" y1="0.5" x2="51.75" y2="0.5" width="0.6096" layer="1"/>
+<wire x1="45.085" y1="1.7145" x2="45.085" y2="0.5" width="0.6096" layer="1"/>
+<wire x1="25.525" y1="2.125" x2="25.525" y2="0.5" width="0.3048" layer="1"/>
+<wire x1="25.525" y1="0.5" x2="37.465" y2="0.5" width="0.3048" layer="1"/>
+</signal>
+<signal name="N$2">
+<contactref element="IN" pad="P$2"/>
+<contactref element="RIPOW" pad="2"/>
+<contactref element="CIN$0" pad="1"/>
+<contactref element="RBP" pad="2"/>
+<contactref element="RUVLO2" pad="2"/>
+<contactref element="LIN" pad="P$1"/>
+<contactref element="CIN$2" pad="1"/>
+<contactref element="CIN$1" pad="1"/>
+<contactref element="DTVS" pad="CATHODE"/>
+<wire x1="8.725" y1="0.75" x2="8.725" y2="2" width="0.254" layer="1"/>
+<wire x1="1.615" y1="1" x2="2.875" y2="1" width="0.254" layer="1"/>
+<wire x1="2.875" y1="1" x2="3" y2="0.875" width="0.254" layer="16"/>
+<wire x1="3" y1="0.875" x2="7.5" y2="0.875" width="0.254" layer="16"/>
+<wire x1="7.5" y1="0.875" x2="7.625" y2="0.75" width="0.254" layer="1"/>
+<wire x1="7.625" y1="0.75" x2="8.725" y2="0.75" width="0.254" layer="1"/>
+<wire x1="8.725" y1="3.522" x2="9.203" y2="4" width="0.254" layer="1"/>
+<wire x1="8.725" y1="2" x2="8.725" y2="3.522" width="0.254" layer="1"/>
+<via x="2.875" y="1" extent="1-16" drill="0.6"/>
+<via x="7.5" y="0.875" extent="1-16" drill="0.6"/>
+<via x="1.25" y="24.75" extent="1-16" drill="0.6"/>
+<via x="1.125" y="21.125" extent="1-16" drill="0.6"/>
+<via x="1.125" y="18.5" extent="1-16" drill="0.6"/>
+<via x="4" y="18.375" extent="1-16" drill="0.6"/>
+<via x="11" y="17.5" extent="1-16" drill="0.6"/>
+<via x="11.125" y="20.375" extent="1-16" drill="0.6"/>
+<via x="11.125" y="23.125" extent="1-16" drill="0.6"/>
+<via x="8.25" y="23.25" extent="1-16" drill="0.6"/>
+<via x="4.375" y="23.25" extent="1-16" drill="0.6"/>
+<via x="4.375" y="25" extent="1-16" drill="0.6"/>
+<via x="8.25" y="25" extent="1-16" drill="0.6"/>
+<via x="11.125" y="25" extent="1-16" drill="0.6"/>
+<polygon width="0.254" layer="1" thermals="no">
+<vertex x="4.625" y="17.25"/>
+<vertex x="9.625" y="17.25"/>
+<vertex x="12.125" y="14.75"/>
+<vertex x="16.25" y="14.75"/>
+<vertex x="16.25" y="26"/>
+<vertex x="0" y="26"/>
+<vertex x="0" y="0"/>
+<vertex x="2.875" y="0"/>
+<vertex x="2.875" y="11.625"/>
+<vertex x="3.625" y="12.625"/>
+<vertex x="3.625" y="15.875"/>
+</polygon>
+<polygon width="0.254" layer="16" thermals="no">
+<vertex x="0" y="26"/>
+<vertex x="0" y="17.25"/>
+<vertex x="9.625" y="17.25"/>
+<vertex x="12.125" y="14.75"/>
+<vertex x="16.25" y="14.75"/>
+<vertex x="16.25" y="26"/>
+</polygon>
+</signal>
+<signal name="N$16">
+<contactref element="IPOW" pad="A"/>
+<contactref element="RIPOW" pad="1"/>
+<wire x1="12.047" y1="5.747" x2="12.05" y2="5.75" width="0.254" layer="1"/>
+<wire x1="12.047" y1="4" x2="12.047" y2="5.747" width="0.254" layer="1"/>
+</signal>
+<signal name="N$17">
+<contactref element="OPOW" pad="A"/>
+<contactref element="ROPOW" pad="1"/>
+<wire x1="51.75" y1="4.297" x2="51.75" y2="4.25" width="0.3048" layer="1"/>
+<wire x1="49.8" y1="4.375" x2="49.8" y2="4.297" width="0.3048" layer="1"/>
+<wire x1="49.8" y1="4.297" x2="51.75" y2="4.297" width="0.3048" layer="1"/>
+</signal>
+</signals>
+</board>
+</drawing>
+</eagle>
diff --git a/gyro_board/schematic/power_converter.sch b/gyro_board/schematic/power_converter.sch
new file mode 100644
index 0000000..e759960
--- /dev/null
+++ b/gyro_board/schematic/power_converter.sch
@@ -0,0 +1,10426 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE eagle SYSTEM "eagle.dtd">
+<eagle version="6.4">
+<drawing>
+<settings>
+<setting alwaysvectorfont="no"/>
+<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="16" name="Bottom" color="1" fill="1" visible="no" active="no"/>
+<layer number="17" name="Pads" color="2" fill="1" visible="no" active="no"/>
+<layer number="18" name="Vias" color="2" 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="7" fill="1" visible="no" active="no"/>
+<layer number="22" name="bPlace" color="7" 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="7" 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="1" visible="no" active="no"/>
+<layer number="54" name="bGND_GNDA" color="7" fill="1" visible="no" active="no"/>
+<layer number="56" name="wert" color="7" fill="1" visible="no" active="no"/>
+<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="Anatomie" color="7" fill="1" visible="yes" active="yes"/>
+<layer number="100" name="Muster" color="7" fill="1" visible="yes" active="yes"/>
+<layer number="101" name="Patch_Top" color="7" fill="1" visible="yes" active="yes"/>
+<layer number="102" name="Brücken" color="7" fill="1" visible="yes" active="yes"/>
+<layer number="103" name="CableCode" color="7" fill="1" visible="yes" active="yes"/>
+<layer number="104" name="Name" color="7" fill="1" visible="yes" active="yes"/>
+<layer number="105" name="tPlate" color="7" fill="1" visible="no" active="yes"/>
+<layer number="106" name="bPlate" color="7" fill="1" visible="no" active="yes"/>
+<layer number="107" name="Crop" color="7" fill="1" visible="no" active="yes"/>
+<layer number="110" name="tdokum" color="7" fill="1" visible="yes" active="yes"/>
+<layer number="111" name="bdokum" color="7" fill="1" visible="yes" active="yes"/>
+<layer number="116" name="Patch_BOT" color="7" fill="1" visible="yes" active="yes"/>
+<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="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="144" name="Drill_legend" color="7" fill="1" visible="no" active="yes"/>
+<layer number="151" name="HeatSink" color="7" fill="1" visible="yes" active="yes"/>
+<layer number="199" name="L$199" color="7" fill="1" visible="yes" active="yes"/>
+<layer number="200" name="200bmp" color="7" fill="1" visible="yes" active="yes"/>
+<layer number="201" name="201bmp" color="7" fill="1" visible="yes" active="yes"/>
+<layer number="202" name="202bmp" color="7" fill="1" visible="yes" active="yes"/>
+<layer number="203" name="203bmp" color="4" fill="10" visible="no" active="yes"/>
+<layer number="204" name="204bmp" color="5" fill="10" visible="no" active="yes"/>
+<layer number="205" name="205bmp" color="6" fill="10" visible="no" active="yes"/>
+<layer number="206" name="206bmp" color="7" fill="10" visible="no" active="yes"/>
+<layer number="207" name="207bmp" color="8" fill="10" visible="no" active="yes"/>
+<layer number="208" name="208bmp" color="9" fill="10" visible="no" active="yes"/>
+<layer number="209" name="209bmp" color="7" fill="1" visible="no" active="yes"/>
+<layer number="210" name="210bmp" color="7" fill="1" visible="no" active="yes"/>
+<layer number="211" name="211bmp" color="7" fill="1" visible="no" active="yes"/>
+<layer number="212" name="212bmp" color="7" fill="1" visible="no" active="yes"/>
+<layer number="213" name="213bmp" color="7" fill="1" visible="no" active="yes"/>
+<layer number="214" name="214bmp" color="7" fill="1" visible="no" active="yes"/>
+<layer number="215" name="215bmp" color="7" fill="1" visible="no" active="yes"/>
+<layer number="216" name="216bmp" color="7" fill="1" visible="no" 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="250" name="Descript" color="7" fill="1" visible="yes" active="yes"/>
+<layer number="251" name="SMDround" color="7" fill="1" visible="yes" active="yes"/>
+<layer number="254" name="Cool" color="7" fill="1" visible="yes" active="yes"/>
+</layers>
+<schematic xreflabel="%F%N/%S.%C%R" xrefpart="/%S.%C%R">
+<libraries>
+<library name="custom_parts">
+<packages>
+<package name="MSOP10">
+<description><b>10-Lead Mini Small Outline Package [MSOP]</b> (RM-10)<p>
+Source: http://www.analog.com/UploadedFiles/Data_Sheets/35641221898805SSM2167_b.pdf<br>
+COMPLIANT TO JEDEC STANDARDS MO-187BA</description>
+<wire x1="-1.4" y1="1.4" x2="1.4" y2="1.4" width="0.2032" layer="21"/>
+<wire x1="1.4" y1="1.4" x2="1.4" y2="-1.4" width="0.2032" layer="21"/>
+<wire x1="1.4" y1="-1.4" x2="-1.4" y2="-1.4" width="0.2032" layer="21"/>
+<wire x1="-1.4" y1="-1.4" x2="-1.4" y2="1.4" width="0.2032" layer="21"/>
+<wire x1="-0.8" y1="-1.1" x2="-0.8" y2="-0.5" width="0.2032" layer="21" curve="-180"/>
+<wire x1="-0.8" y1="-0.5" x2="-0.8" y2="-1.1" width="0.2032" layer="21"/>
+<smd name="1" x="-1" y="-2.1131" dx="0.25" dy="1" layer="1"/>
+<smd name="2" x="-0.5" y="-2.1131" dx="0.25" dy="1" layer="1"/>
+<smd name="3" x="0" y="-2.1131" dx="0.25" dy="1" layer="1"/>
+<smd name="4" x="0.5" y="-2.1131" dx="0.25" dy="1" layer="1"/>
+<smd name="5" x="1" y="-2.1131" dx="0.25" dy="1" layer="1"/>
+<smd name="6" x="1" y="2.1131" dx="0.25" dy="1" layer="1" rot="R180"/>
+<smd name="7" x="0.5" y="2.1131" dx="0.25" dy="1" layer="1" rot="R180"/>
+<smd name="8" x="0" y="2.1131" dx="0.25" dy="1" layer="1" rot="R180"/>
+<smd name="9" x="-0.5" y="2.1131" dx="0.25" dy="1" layer="1" rot="R180"/>
+<smd name="10" x="-1" y="2.1131" dx="0.25" dy="1" layer="1" rot="R180"/>
+<text x="-2.032" y="-2.54" size="1.27" layer="25" ratio="10" rot="R90">>NAME</text>
+<text x="3.302" y="-2.54" size="1.27" layer="27" ratio="10" rot="R90">>VALUE</text>
+<rectangle x1="-1.1244" y1="-2.5" x2="-0.8744" y2="-1.5" layer="51"/>
+<rectangle x1="-0.6244" y1="-2.5" x2="-0.3744" y2="-1.5" layer="51"/>
+<rectangle x1="-0.1244" y1="-2.5" x2="0.1256" y2="-1.5" layer="51"/>
+<rectangle x1="0.3756" y1="-2.5" x2="0.6256" y2="-1.5" layer="51"/>
+<rectangle x1="0.8756" y1="-2.5" x2="1.1256" y2="-1.5" layer="51"/>
+<rectangle x1="0.8744" y1="1.5" x2="1.1244" y2="2.5" layer="51" rot="R180"/>
+<rectangle x1="0.3744" y1="1.5" x2="0.6244" y2="2.5" layer="51" rot="R180"/>
+<rectangle x1="-0.1256" y1="1.5" x2="0.1244" y2="2.5" layer="51" rot="R180"/>
+<rectangle x1="-0.6256" y1="1.5" x2="-0.3756" y2="2.5" layer="51" rot="R180"/>
+<rectangle x1="-1.1256" y1="1.5" x2="-0.8756" y2="2.5" layer="51" rot="R180"/>
+</package>
+<package name="L2012C">
+<description><b>INDUCTOR</b><p>
+chip</description>
+<wire x1="-1.973" y1="0.983" x2="1.973" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="1.973" y1="-0.983" x2="-1.973" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="-1.973" y1="-0.983" x2="-1.973" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="-0.864" y1="0.54" x2="0.864" y2="0.54" width="0.1016" layer="51"/>
+<wire x1="-0.864" y1="-0.553" x2="0.864" y2="-0.553" width="0.1016" layer="51"/>
+<wire x1="1.973" y1="0.983" x2="1.973" y2="-0.983" width="0.0508" layer="39"/>
+<smd name="1" x="-1" y="0" dx="1" dy="1" layer="1"/>
+<smd name="2" x="1" y="0" dx="1" dy="1" layer="1"/>
+<text x="-1.016" y="0.889" size="1.27" layer="25">>NAME</text>
+<text x="-1.016" y="-2.159" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-1.143" y1="-0.6096" x2="-0.843" y2="0.5903" layer="51"/>
+<rectangle x1="0.8382" y1="-0.6096" x2="1.1382" y2="0.5903" layer="51"/>
+<rectangle x1="-0.3" y1="-0.4001" x2="0.3" y2="0.4001" layer="35"/>
+</package>
+<package name="L2825P">
+<description><b>INDUCTOR</b><p>
+precision wire wound</description>
+<wire x1="-2.473" y1="1.483" x2="2.473" y2="1.483" width="0.0508" layer="39"/>
+<wire x1="2.473" y1="-1.483" x2="-2.473" y2="-1.483" width="0.0508" layer="39"/>
+<wire x1="-2.473" y1="-1.483" x2="-2.473" y2="1.483" width="0.0508" layer="39"/>
+<wire x1="-0.762" y1="1.2" x2="0.762" y2="1.2" width="0.1016" layer="51"/>
+<wire x1="-0.762" y1="-1.213" x2="0.762" y2="-1.213" width="0.1016" layer="51"/>
+<wire x1="2.473" y1="1.483" x2="2.473" y2="-1.483" width="0.0508" layer="39"/>
+<wire x1="1.34" y1="-0.965" x2="1.34" y2="0.965" width="0.1016" layer="51"/>
+<wire x1="-1.34" y1="0.965" x2="-1.34" y2="-0.965" width="0.1016" layer="51"/>
+<circle x="0" y="0" radius="0.6604" width="0.1524" layer="51"/>
+<smd name="1" x="-1.2" y="0" dx="1.4" dy="2.4" layer="1"/>
+<smd name="2" x="1.2" y="0" dx="1.4" dy="2.4" layer="1"/>
+<text x="-1.27" y="1.524" size="1.27" layer="25">>NAME</text>
+<text x="-1.27" y="-2.794" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="0.7366" y1="-1.27" x2="1.3208" y2="1.27" layer="51"/>
+<rectangle x1="-1.3208" y1="-1.27" x2="-0.7366" y2="1.27" layer="51"/>
+<rectangle x1="-0.3" y1="-0.7" x2="0.3" y2="0.7" layer="35"/>
+</package>
+<package name="L3216C">
+<description><b>INDUCTOR</b><p>
+chip</description>
+<wire x1="-2.473" y1="1.483" x2="2.473" y2="1.483" width="0.0508" layer="39"/>
+<wire x1="2.473" y1="-1.483" x2="-2.473" y2="-1.483" width="0.0508" layer="39"/>
+<wire x1="-2.473" y1="-1.483" x2="-2.473" y2="1.483" width="0.0508" layer="39"/>
+<wire x1="-1.27" y1="0.896" x2="1.27" y2="0.896" width="0.1016" layer="51"/>
+<wire x1="-1.27" y1="-0.883" x2="1.27" y2="-0.883" width="0.1016" layer="51"/>
+<wire x1="2.473" y1="1.483" x2="2.473" y2="-1.483" width="0.0508" layer="39"/>
+<wire x1="-0.762" y1="0.896" x2="0.762" y2="0.896" width="0.1016" layer="21"/>
+<wire x1="-0.762" y1="-0.883" x2="0.762" y2="-0.883" width="0.1016" layer="21"/>
+<smd name="1" x="-1.5" y="0" dx="1.2" dy="1.6" layer="1"/>
+<smd name="2" x="1.5" y="0" dx="1.2" dy="1.6" layer="1"/>
+<text x="-1.524" y="1.143" size="1.27" layer="25">>NAME</text>
+<text x="-1.524" y="-2.413" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-1.7526" y1="-0.9525" x2="-1.2525" y2="0.9474" layer="51"/>
+<rectangle x1="1.2446" y1="-0.9525" x2="1.7447" y2="0.9474" layer="51"/>
+<rectangle x1="-0.4001" y1="-0.5999" x2="0.4001" y2="0.5999" layer="35"/>
+</package>
+<package name="L3225M">
+<description><b>INDUCTOR</b><p>
+molded</description>
+<wire x1="-2.473" y1="1.483" x2="2.473" y2="1.483" width="0.0508" layer="39"/>
+<wire x1="2.473" y1="-1.483" x2="-2.473" y2="-1.483" width="0.0508" layer="39"/>
+<wire x1="-2.473" y1="-1.483" x2="-2.473" y2="1.483" width="0.0508" layer="39"/>
+<wire x1="2.473" y1="1.483" x2="2.473" y2="-1.483" width="0.0508" layer="39"/>
+<wire x1="-1.575" y1="1.27" x2="1.575" y2="1.27" width="0.1524" layer="21"/>
+<wire x1="1.575" y1="1.27" x2="1.575" y2="-1.27" width="0.1524" layer="51"/>
+<wire x1="1.575" y1="-1.27" x2="-1.575" y2="-1.27" width="0.1524" layer="21"/>
+<wire x1="-1.575" y1="-1.27" x2="-1.575" y2="1.27" width="0.1524" layer="51"/>
+<wire x1="-1.651" y1="0.94" x2="-1.651" y2="-0.94" width="0.1524" layer="51"/>
+<wire x1="1.651" y1="0.94" x2="1.651" y2="-0.94" width="0.1524" layer="51"/>
+<smd name="1" x="-1.4" y="0" dx="1.6" dy="2.2" layer="1"/>
+<smd name="2" x="1.4" y="0" dx="1.6" dy="2.2" layer="1"/>
+<text x="-1.397" y="1.524" size="1.27" layer="25">>NAME</text>
+<text x="-1.397" y="-2.794" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-0.3" y1="-1" x2="0.3" y2="1" layer="35"/>
+</package>
+<package name="L3225P">
+<description><b>INDUCTOR</b><p>
+precision wire wound</description>
+<wire x1="-2.473" y1="1.483" x2="2.473" y2="1.483" width="0.0508" layer="39"/>
+<wire x1="2.473" y1="-1.483" x2="-2.473" y2="-1.483" width="0.0508" layer="39"/>
+<wire x1="-2.473" y1="-1.483" x2="-2.473" y2="1.483" width="0.0508" layer="39"/>
+<wire x1="-1.676" y1="0.845" x2="1.676" y2="0.845" width="0.1524" layer="51"/>
+<wire x1="2.473" y1="1.483" x2="2.473" y2="-1.483" width="0.0508" layer="39"/>
+<wire x1="-1.676" y1="0.838" x2="-1.676" y2="-0.838" width="0.1524" layer="51"/>
+<wire x1="-1.168" y1="0.838" x2="-1.168" y2="-0.838" width="0.1524" layer="51"/>
+<wire x1="1.168" y1="0.838" x2="1.168" y2="-0.838" width="0.1524" layer="51"/>
+<wire x1="1.676" y1="0.838" x2="1.676" y2="-0.838" width="0.1524" layer="51"/>
+<wire x1="1.676" y1="-0.845" x2="-1.676" y2="-0.845" width="0.1524" layer="51"/>
+<circle x="0" y="0" radius="0.7117" width="0.1524" layer="51"/>
+<smd name="1" x="-1.4" y="0" dx="1.8" dy="2" layer="1"/>
+<smd name="2" x="1.4" y="0" dx="1.8" dy="2" layer="1"/>
+<text x="-1.397" y="1.27" size="1.27" layer="25">>NAME</text>
+<text x="-1.397" y="-2.54" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-0.3" y1="-0.7" x2="0.3" y2="0.7" layer="35"/>
+</package>
+<package name="L3230M">
+<description><b>INDUCTOR</b><p>
+molded</description>
+<wire x1="-2.473" y1="1.483" x2="2.473" y2="1.483" width="0.0508" layer="39"/>
+<wire x1="2.473" y1="-1.483" x2="-2.473" y2="-1.483" width="0.0508" layer="39"/>
+<wire x1="-2.473" y1="-1.483" x2="-2.473" y2="1.483" width="0.0508" layer="39"/>
+<wire x1="2.473" y1="1.483" x2="2.473" y2="-1.483" width="0.0508" layer="39"/>
+<wire x1="-1.575" y1="1.27" x2="1.575" y2="1.27" width="0.1524" layer="21"/>
+<wire x1="1.575" y1="1.27" x2="1.575" y2="-1.27" width="0.1524" layer="51"/>
+<wire x1="1.575" y1="-1.27" x2="-1.575" y2="-1.27" width="0.1524" layer="21"/>
+<wire x1="-1.575" y1="-1.27" x2="-1.575" y2="1.27" width="0.1524" layer="51"/>
+<wire x1="-1.651" y1="0.94" x2="-1.651" y2="-0.94" width="0.1524" layer="51"/>
+<wire x1="1.651" y1="0.94" x2="1.651" y2="-0.94" width="0.1524" layer="51"/>
+<smd name="1" x="-1.4" y="0" dx="1.6" dy="2.2" layer="1"/>
+<smd name="2" x="1.4" y="0" dx="1.6" dy="2.2" layer="1"/>
+<text x="-1.397" y="1.651" size="1.27" layer="25">>NAME</text>
+<text x="-1.397" y="-2.921" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-0.3" y1="-1" x2="0.3" y2="1" layer="35"/>
+</package>
+<package name="L4035M">
+<description><b>INDUCTOR</b><p>
+molded</description>
+<wire x1="-2.973" y1="1.983" x2="2.973" y2="1.983" width="0.0508" layer="39"/>
+<wire x1="2.973" y1="-1.983" x2="-2.973" y2="-1.983" width="0.0508" layer="39"/>
+<wire x1="-2.973" y1="-1.983" x2="-2.973" y2="1.983" width="0.0508" layer="39"/>
+<wire x1="2.973" y1="1.983" x2="2.973" y2="-1.983" width="0.0508" layer="39"/>
+<wire x1="-2.083" y1="0.686" x2="-2.083" y2="-0.686" width="0.1524" layer="51"/>
+<wire x1="2.083" y1="0.686" x2="2.083" y2="-0.686" width="0.1524" layer="51"/>
+<wire x1="-1.981" y1="1.524" x2="-1.981" y2="-1.524" width="0.1524" layer="51"/>
+<wire x1="-1.981" y1="-1.524" x2="1.981" y2="-1.524" width="0.1524" layer="21"/>
+<wire x1="1.981" y1="-1.524" x2="1.981" y2="1.524" width="0.1524" layer="51"/>
+<wire x1="1.981" y1="1.524" x2="-1.981" y2="1.524" width="0.1524" layer="21"/>
+<smd name="1" x="-1.6" y="0" dx="2.2" dy="1.4" layer="1"/>
+<smd name="2" x="1.6" y="0" dx="2.2" dy="1.4" layer="1"/>
+<text x="-1.651" y="1.905" size="1.27" layer="25">>NAME</text>
+<text x="-1.651" y="-3.048" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-0.3" y1="-0.7" x2="0.3" y2="0.7" layer="35"/>
+</package>
+<package name="L4516C">
+<description><b>INDUCTOR</b><p>
+chip</description>
+<wire x1="-2.973" y1="0.983" x2="2.973" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="2.973" y1="-0.983" x2="-2.973" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="-2.973" y1="-0.983" x2="-2.973" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="-1.626" y1="0.54" x2="1.626" y2="0.54" width="0.1016" layer="51"/>
+<wire x1="-1.626" y1="-0.527" x2="1.626" y2="-0.527" width="0.1016" layer="51"/>
+<wire x1="2.973" y1="0.983" x2="2.973" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="-1.372" y1="0.54" x2="1.372" y2="0.54" width="0.1016" layer="21"/>
+<wire x1="-1.372" y1="-0.527" x2="1.372" y2="-0.527" width="0.1016" layer="21"/>
+<smd name="1" x="-2.1" y="0" dx="1" dy="1.6" layer="1"/>
+<smd name="2" x="2.1" y="0" dx="1" dy="1.6" layer="1"/>
+<text x="-2.032" y="1.016" size="1.27" layer="25">>NAME</text>
+<text x="-2.032" y="-2.286" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-2.4003" y1="-0.5969" x2="-1.6002" y2="0.603" layer="51"/>
+<rectangle x1="1.6002" y1="-0.603" x2="2.4003" y2="0.5969" layer="51"/>
+<rectangle x1="-0.7" y1="-0.3" x2="0.7" y2="0.3" layer="35"/>
+</package>
+<package name="L4532M">
+<description><b>INDUCTOR</b><p>
+molded</description>
+<wire x1="-3.473" y1="1.983" x2="3.473" y2="1.983" width="0.0508" layer="39"/>
+<wire x1="3.473" y1="-1.983" x2="-3.473" y2="-1.983" width="0.0508" layer="39"/>
+<wire x1="-3.473" y1="-1.983" x2="-3.473" y2="1.983" width="0.0508" layer="39"/>
+<wire x1="3.473" y1="1.983" x2="3.473" y2="-1.983" width="0.0508" layer="39"/>
+<wire x1="-2.21" y1="-1.626" x2="2.21" y2="-1.626" width="0.1524" layer="21"/>
+<wire x1="2.21" y1="1.626" x2="-2.21" y2="1.626" width="0.1524" layer="21"/>
+<wire x1="-2.337" y1="1.041" x2="-2.337" y2="-1.041" width="0.1524" layer="51"/>
+<wire x1="2.337" y1="1.041" x2="2.337" y2="-1.041" width="0.1524" layer="51"/>
+<wire x1="-2.21" y1="1.626" x2="-2.21" y2="-1.626" width="0.1524" layer="51"/>
+<wire x1="2.21" y1="1.626" x2="2.21" y2="-1.626" width="0.1524" layer="51"/>
+<smd name="1" x="-1.9" y="0" dx="2" dy="2.4" layer="1"/>
+<smd name="2" x="1.9" y="0" dx="2" dy="2.4" layer="1"/>
+<text x="-1.905" y="2.032" size="1.27" layer="25">>NAME</text>
+<text x="-1.905" y="-3.302" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-0.5001" y1="-1" x2="0.5001" y2="1" layer="35"/>
+</package>
+<package name="L4532P">
+<description><b>INDUCTOR</b><p>
+precision wire wound</description>
+<wire x1="-2.973" y1="1.983" x2="2.973" y2="1.983" width="0.0508" layer="39"/>
+<wire x1="2.973" y1="-1.983" x2="-2.973" y2="-1.983" width="0.0508" layer="39"/>
+<wire x1="-2.973" y1="-1.983" x2="-2.973" y2="1.983" width="0.0508" layer="39"/>
+<wire x1="-2.311" y1="1.675" x2="2.311" y2="1.675" width="0.1524" layer="51"/>
+<wire x1="2.973" y1="1.983" x2="2.973" y2="-1.983" width="0.0508" layer="39"/>
+<wire x1="-2.311" y1="-1.653" x2="2.311" y2="-1.653" width="0.1524" layer="51"/>
+<wire x1="-2.311" y1="1.626" x2="-2.311" y2="-1.626" width="0.1524" layer="51"/>
+<wire x1="2.311" y1="1.675" x2="2.311" y2="-1.626" width="0.1524" layer="51"/>
+<wire x1="-1.448" y1="1.651" x2="-1.448" y2="-1.626" width="0.1524" layer="51"/>
+<wire x1="1.448" y1="1.626" x2="1.448" y2="-1.626" width="0.1524" layer="51"/>
+<wire x1="-0.66" y1="1.675" x2="0.66" y2="1.675" width="0.1524" layer="21"/>
+<wire x1="-0.66" y1="-1.653" x2="0.66" y2="-1.653" width="0.1524" layer="21"/>
+<circle x="0" y="0" radius="1.3211" width="0.1524" layer="51"/>
+<smd name="1" x="-2" y="0" dx="1.8" dy="3.6" layer="1"/>
+<smd name="2" x="2" y="0" dx="1.8" dy="3.6" layer="1"/>
+<text x="-1.905" y="2.032" size="1.27" layer="25">>NAME</text>
+<text x="-1.905" y="-3.302" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-0.5001" y1="-1" x2="0.5001" y2="1" layer="35"/>
+</package>
+<package name="L5038P">
+<description><b>INDUCTOR</b> <p>
+precision wire wound</description>
+<wire x1="-2.973" y1="1.983" x2="2.973" y2="1.983" width="0.0508" layer="39"/>
+<wire x1="2.973" y1="-1.983" x2="-2.973" y2="-1.983" width="0.0508" layer="39"/>
+<wire x1="-2.973" y1="-1.983" x2="-2.973" y2="1.983" width="0.0508" layer="39"/>
+<wire x1="-2.286" y1="1.853" x2="2.311" y2="1.853" width="0.1016" layer="21"/>
+<wire x1="2.973" y1="1.983" x2="2.973" y2="-1.983" width="0.0508" layer="39"/>
+<wire x1="-2.286" y1="-1.856" x2="2.311" y2="-1.856" width="0.1016" layer="21"/>
+<wire x1="2.389" y1="-1.27" x2="2.389" y2="1.27" width="0.1016" layer="51"/>
+<wire x1="-2.386" y1="-1.27" x2="-2.386" y2="1.27" width="0.1016" layer="51"/>
+<wire x1="1.602" y1="-1.854" x2="1.602" y2="1.854" width="0.1016" layer="51"/>
+<wire x1="-1.624" y1="-1.854" x2="-1.624" y2="1.854" width="0.1016" layer="51"/>
+<wire x1="-2.31" y1="-1.854" x2="-2.31" y2="1.854" width="0.1016" layer="51"/>
+<wire x1="2.313" y1="-1.854" x2="2.313" y2="1.854" width="0.1016" layer="51"/>
+<circle x="0" y="0" radius="1.4732" width="0.1524" layer="51"/>
+<smd name="1" x="-2.2" y="0" dx="1.4" dy="2.8" layer="1"/>
+<smd name="2" x="2.2" y="0" dx="1.4" dy="2.8" layer="1"/>
+<text x="-2.159" y="2.159" size="1.27" layer="25">>NAME</text>
+<text x="-2.159" y="-3.429" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-0.5001" y1="-1" x2="0.5001" y2="1" layer="35"/>
+</package>
+<package name="L5650M">
+<description><b>INDUCTOR</b> <p>
+molded</description>
+<wire x1="-3.973" y1="2.983" x2="3.973" y2="2.983" width="0.0508" layer="39"/>
+<wire x1="3.973" y1="-2.983" x2="-3.973" y2="-2.983" width="0.0508" layer="39"/>
+<wire x1="-3.973" y1="-2.983" x2="-3.973" y2="2.983" width="0.0508" layer="39"/>
+<wire x1="3.973" y1="2.983" x2="3.973" y2="-2.983" width="0.0508" layer="39"/>
+<wire x1="-2.108" y1="-2.591" x2="2.083" y2="-2.591" width="0.1524" layer="21"/>
+<wire x1="2.083" y1="2.591" x2="-2.108" y2="2.591" width="0.1524" layer="21"/>
+<wire x1="2.184" y1="2.032" x2="2.184" y2="-2.032" width="0.1524" layer="51"/>
+<wire x1="-2.21" y1="2.032" x2="-2.21" y2="-2.032" width="0.1524" layer="51"/>
+<wire x1="-2.108" y1="2.591" x2="-2.108" y2="-2.591" width="0.1524" layer="51"/>
+<wire x1="2.083" y1="2.591" x2="2.083" y2="-2.591" width="0.1524" layer="51"/>
+<smd name="1" x="-2.5" y="0" dx="1.8" dy="4" layer="1"/>
+<smd name="2" x="2.5" y="0" dx="1.8" dy="4" layer="1"/>
+<text x="-2.54" y="2.921" size="1.27" layer="25">>NAME</text>
+<text x="-2.54" y="-4.191" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-0.5001" y1="-1" x2="0.5001" y2="1" layer="35"/>
+</package>
+<package name="L8530M">
+<description><b>INDUCTOR</b> <p>
+molded</description>
+<wire x1="-5.473" y1="1.983" x2="5.473" y2="1.983" width="0.0508" layer="39"/>
+<wire x1="5.473" y1="-1.983" x2="-5.473" y2="-1.983" width="0.0508" layer="39"/>
+<wire x1="-5.473" y1="-1.983" x2="-5.473" y2="1.983" width="0.0508" layer="39"/>
+<wire x1="5.473" y1="1.983" x2="5.473" y2="-1.983" width="0.0508" layer="39"/>
+<wire x1="-4.191" y1="-1.524" x2="-4.191" y2="1.524" width="0.1524" layer="51"/>
+<wire x1="4.191" y1="1.524" x2="-4.191" y2="1.524" width="0.1524" layer="21"/>
+<wire x1="4.191" y1="-1.524" x2="-4.191" y2="-1.524" width="0.1524" layer="21"/>
+<wire x1="-4.293" y1="-0.66" x2="-4.293" y2="0.66" width="0.1524" layer="51"/>
+<wire x1="4.293" y1="-0.66" x2="4.293" y2="0.66" width="0.1524" layer="51"/>
+<wire x1="4.191" y1="-1.524" x2="4.191" y2="1.524" width="0.1524" layer="51"/>
+<smd name="1" x="-3.7" y="0" dx="2.4" dy="1.4" layer="1"/>
+<smd name="2" x="3.7" y="0" dx="2.4" dy="1.4" layer="1"/>
+<text x="-3.683" y="1.778" size="1.27" layer="25">>NAME</text>
+<text x="-3.683" y="-3.048" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-0.5001" y1="-1" x2="0.5001" y2="1" layer="35"/>
+</package>
+<package name="0204/5">
+<description><b>RESISTOR</b><p>
+type 0204, grid 5 mm</description>
+<wire x1="2.54" y1="0" x2="2.032" y2="0" width="0.508" layer="51"/>
+<wire x1="-2.54" y1="0" x2="-2.032" y2="0" width="0.508" layer="51"/>
+<wire x1="-1.778" y1="0.635" x2="-1.524" y2="0.889" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-1.778" y1="-0.635" x2="-1.524" y2="-0.889" width="0.1524" layer="21" curve="90"/>
+<wire x1="1.524" y1="-0.889" x2="1.778" y2="-0.635" width="0.1524" layer="21" curve="90"/>
+<wire x1="1.524" y1="0.889" x2="1.778" y2="0.635" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-1.778" y1="-0.635" x2="-1.778" y2="0.635" width="0.1524" layer="51"/>
+<wire x1="-1.524" y1="0.889" x2="-1.27" y2="0.889" width="0.1524" layer="21"/>
+<wire x1="-1.143" y1="0.762" x2="-1.27" y2="0.889" width="0.1524" layer="21"/>
+<wire x1="-1.524" y1="-0.889" x2="-1.27" y2="-0.889" width="0.1524" layer="21"/>
+<wire x1="-1.143" y1="-0.762" x2="-1.27" y2="-0.889" width="0.1524" layer="21"/>
+<wire x1="1.143" y1="0.762" x2="1.27" y2="0.889" width="0.1524" layer="21"/>
+<wire x1="1.143" y1="0.762" x2="-1.143" y2="0.762" width="0.1524" layer="21"/>
+<wire x1="1.143" y1="-0.762" x2="1.27" y2="-0.889" width="0.1524" layer="21"/>
+<wire x1="1.143" y1="-0.762" x2="-1.143" y2="-0.762" width="0.1524" layer="21"/>
+<wire x1="1.524" y1="0.889" x2="1.27" y2="0.889" width="0.1524" layer="21"/>
+<wire x1="1.524" y1="-0.889" x2="1.27" y2="-0.889" width="0.1524" layer="21"/>
+<wire x1="1.778" y1="-0.635" x2="1.778" y2="0.635" width="0.1524" layer="51"/>
+<pad name="1" x="-2.54" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="2.54" y="0" drill="0.8128" shape="octagon"/>
+<text x="-2.0066" y="1.1684" size="0.9906" layer="25" ratio="10">>NAME</text>
+<text x="-2.1336" y="-2.3114" size="0.9906" layer="27" ratio="10">>VALUE</text>
+<rectangle x1="-2.032" y1="-0.254" x2="-1.778" y2="0.254" layer="51"/>
+<rectangle x1="1.778" y1="-0.254" x2="2.032" y2="0.254" layer="51"/>
+</package>
+<package name="0204/7">
+<description><b>RESISTOR</b><p>
+type 0204, grid 7.5 mm</description>
+<wire x1="3.81" y1="0" x2="2.921" y2="0" width="0.508" layer="51"/>
+<wire x1="-3.81" y1="0" x2="-2.921" y2="0" width="0.508" layer="51"/>
+<wire x1="-2.54" y1="0.762" x2="-2.286" y2="1.016" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-2.54" y1="-0.762" x2="-2.286" y2="-1.016" width="0.1524" layer="21" curve="90"/>
+<wire x1="2.286" y1="-1.016" x2="2.54" y2="-0.762" width="0.1524" layer="21" curve="90"/>
+<wire x1="2.286" y1="1.016" x2="2.54" y2="0.762" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-2.54" y1="-0.762" x2="-2.54" y2="0.762" width="0.1524" layer="21"/>
+<wire x1="-2.286" y1="1.016" x2="-1.905" y2="1.016" width="0.1524" layer="21"/>
+<wire x1="-1.778" y1="0.889" x2="-1.905" y2="1.016" width="0.1524" layer="21"/>
+<wire x1="-2.286" y1="-1.016" x2="-1.905" y2="-1.016" width="0.1524" layer="21"/>
+<wire x1="-1.778" y1="-0.889" x2="-1.905" y2="-1.016" width="0.1524" layer="21"/>
+<wire x1="1.778" y1="0.889" x2="1.905" y2="1.016" width="0.1524" layer="21"/>
+<wire x1="1.778" y1="0.889" x2="-1.778" y2="0.889" width="0.1524" layer="21"/>
+<wire x1="1.778" y1="-0.889" x2="1.905" y2="-1.016" width="0.1524" layer="21"/>
+<wire x1="1.778" y1="-0.889" x2="-1.778" y2="-0.889" width="0.1524" layer="21"/>
+<wire x1="2.286" y1="1.016" x2="1.905" y2="1.016" width="0.1524" layer="21"/>
+<wire x1="2.286" y1="-1.016" x2="1.905" y2="-1.016" width="0.1524" layer="21"/>
+<wire x1="2.54" y1="-0.762" x2="2.54" y2="0.762" width="0.1524" layer="21"/>
+<pad name="1" x="-3.81" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="3.81" y="0" drill="0.8128" shape="octagon"/>
+<text x="-2.54" y="1.2954" size="0.9906" layer="25" ratio="10">>NAME</text>
+<text x="-1.6256" y="-0.4826" size="0.9906" layer="27" ratio="10">>VALUE</text>
+<rectangle x1="2.54" y1="-0.254" x2="2.921" y2="0.254" layer="21"/>
+<rectangle x1="-2.921" y1="-0.254" x2="-2.54" y2="0.254" layer="21"/>
+</package>
+<package name="0204V">
+<description><b>RESISTOR</b><p>
+type 0204, grid 2.5 mm</description>
+<wire x1="-1.27" y1="0" x2="1.27" y2="0" width="0.508" layer="51"/>
+<wire x1="-0.127" y1="0" x2="0.127" y2="0" width="0.508" layer="21"/>
+<circle x="-1.27" y="0" radius="0.889" width="0.1524" layer="51"/>
+<circle x="-1.27" y="0" radius="0.635" width="0.0508" layer="51"/>
+<pad name="1" x="-1.27" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="1.27" y="0" drill="0.8128" shape="octagon"/>
+<text x="-2.1336" y="1.1684" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-2.1336" y="-2.3114" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="0207/10">
+<description><b>RESISTOR</b><p>
+type 0207, grid 10 mm</description>
+<wire x1="5.08" y1="0" x2="4.064" y2="0" width="0.6096" layer="51"/>
+<wire x1="-5.08" y1="0" x2="-4.064" y2="0" width="0.6096" layer="51"/>
+<wire x1="-3.175" y1="0.889" x2="-2.921" y2="1.143" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-3.175" y1="-0.889" x2="-2.921" y2="-1.143" width="0.1524" layer="21" curve="90"/>
+<wire x1="2.921" y1="-1.143" x2="3.175" y2="-0.889" width="0.1524" layer="21" curve="90"/>
+<wire x1="2.921" y1="1.143" x2="3.175" y2="0.889" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-3.175" y1="-0.889" x2="-3.175" y2="0.889" width="0.1524" layer="21"/>
+<wire x1="-2.921" y1="1.143" x2="-2.54" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="-2.413" y1="1.016" x2="-2.54" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="-2.921" y1="-1.143" x2="-2.54" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="-2.413" y1="-1.016" x2="-2.54" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="1.016" x2="2.54" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="1.016" x2="-2.413" y2="1.016" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="-1.016" x2="2.54" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="-1.016" x2="-2.413" y2="-1.016" width="0.1524" layer="21"/>
+<wire x1="2.921" y1="1.143" x2="2.54" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="2.921" y1="-1.143" x2="2.54" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="3.175" y1="-0.889" x2="3.175" y2="0.889" width="0.1524" layer="21"/>
+<pad name="1" x="-5.08" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="5.08" y="0" drill="0.8128" shape="octagon"/>
+<text x="-3.048" y="1.524" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-2.2606" y="-0.635" size="1.27" layer="27" ratio="10">>VALUE</text>
+<rectangle x1="3.175" y1="-0.3048" x2="4.0386" y2="0.3048" layer="21"/>
+<rectangle x1="-4.0386" y1="-0.3048" x2="-3.175" y2="0.3048" layer="21"/>
+</package>
+<package name="0207/12">
+<description><b>RESISTOR</b><p>
+type 0207, grid 12 mm</description>
+<wire x1="6.35" y1="0" x2="5.334" y2="0" width="0.6096" layer="51"/>
+<wire x1="-6.35" y1="0" x2="-5.334" y2="0" width="0.6096" layer="51"/>
+<wire x1="-3.175" y1="0.889" x2="-2.921" y2="1.143" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-3.175" y1="-0.889" x2="-2.921" y2="-1.143" width="0.1524" layer="21" curve="90"/>
+<wire x1="2.921" y1="-1.143" x2="3.175" y2="-0.889" width="0.1524" layer="21" curve="90"/>
+<wire x1="2.921" y1="1.143" x2="3.175" y2="0.889" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-3.175" y1="-0.889" x2="-3.175" y2="0.889" width="0.1524" layer="21"/>
+<wire x1="-2.921" y1="1.143" x2="-2.54" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="-2.413" y1="1.016" x2="-2.54" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="-2.921" y1="-1.143" x2="-2.54" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="-2.413" y1="-1.016" x2="-2.54" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="1.016" x2="2.54" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="1.016" x2="-2.413" y2="1.016" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="-1.016" x2="2.54" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="-1.016" x2="-2.413" y2="-1.016" width="0.1524" layer="21"/>
+<wire x1="2.921" y1="1.143" x2="2.54" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="2.921" y1="-1.143" x2="2.54" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="3.175" y1="-0.889" x2="3.175" y2="0.889" width="0.1524" layer="21"/>
+<wire x1="4.445" y1="0" x2="4.064" y2="0" width="0.6096" layer="21"/>
+<wire x1="-4.445" y1="0" x2="-4.064" y2="0" width="0.6096" layer="21"/>
+<pad name="1" x="-6.35" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="6.35" y="0" drill="0.8128" shape="octagon"/>
+<text x="-3.175" y="1.397" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-2.286" y="-0.6858" size="1.27" layer="27" ratio="10">>VALUE</text>
+<rectangle x1="3.175" y1="-0.3048" x2="4.0386" y2="0.3048" layer="21"/>
+<rectangle x1="-4.0386" y1="-0.3048" x2="-3.175" y2="0.3048" layer="21"/>
+<rectangle x1="4.445" y1="-0.3048" x2="5.3086" y2="0.3048" layer="21"/>
+<rectangle x1="-5.3086" y1="-0.3048" x2="-4.445" y2="0.3048" layer="21"/>
+</package>
+<package name="0207/15">
+<description><b>RESISTOR</b><p>
+type 0207, grid 15mm</description>
+<wire x1="7.62" y1="0" x2="6.604" y2="0" width="0.6096" layer="51"/>
+<wire x1="-7.62" y1="0" x2="-6.604" y2="0" width="0.6096" layer="51"/>
+<wire x1="-3.175" y1="0.889" x2="-2.921" y2="1.143" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-3.175" y1="-0.889" x2="-2.921" y2="-1.143" width="0.1524" layer="21" curve="90"/>
+<wire x1="2.921" y1="-1.143" x2="3.175" y2="-0.889" width="0.1524" layer="21" curve="90"/>
+<wire x1="2.921" y1="1.143" x2="3.175" y2="0.889" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-3.175" y1="-0.889" x2="-3.175" y2="0.889" width="0.1524" layer="21"/>
+<wire x1="-2.921" y1="1.143" x2="-2.54" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="-2.413" y1="1.016" x2="-2.54" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="-2.921" y1="-1.143" x2="-2.54" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="-2.413" y1="-1.016" x2="-2.54" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="1.016" x2="2.54" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="1.016" x2="-2.413" y2="1.016" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="-1.016" x2="2.54" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="-1.016" x2="-2.413" y2="-1.016" width="0.1524" layer="21"/>
+<wire x1="2.921" y1="1.143" x2="2.54" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="2.921" y1="-1.143" x2="2.54" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="3.175" y1="-0.889" x2="3.175" y2="0.889" width="0.1524" layer="21"/>
+<wire x1="5.715" y1="0" x2="4.064" y2="0" width="0.6096" layer="21"/>
+<wire x1="-5.715" y1="0" x2="-4.064" y2="0" width="0.6096" layer="21"/>
+<pad name="1" x="-7.62" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="7.62" y="0" drill="0.8128" shape="octagon"/>
+<text x="-3.175" y="1.397" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-2.286" y="-0.6858" size="1.27" layer="27" ratio="10">>VALUE</text>
+<rectangle x1="3.175" y1="-0.3048" x2="4.0386" y2="0.3048" layer="21"/>
+<rectangle x1="-4.0386" y1="-0.3048" x2="-3.175" y2="0.3048" layer="21"/>
+<rectangle x1="5.715" y1="-0.3048" x2="6.5786" y2="0.3048" layer="21"/>
+<rectangle x1="-6.5786" y1="-0.3048" x2="-5.715" y2="0.3048" layer="21"/>
+</package>
+<package name="0207/2V">
+<description><b>RESISTOR</b><p>
+type 0207, grid 2.5 mm</description>
+<wire x1="-1.27" y1="0" x2="-0.381" y2="0" width="0.6096" layer="51"/>
+<wire x1="-0.254" y1="0" x2="0.254" y2="0" width="0.6096" layer="21"/>
+<wire x1="0.381" y1="0" x2="1.27" y2="0" width="0.6096" layer="51"/>
+<circle x="-1.27" y="0" radius="1.27" width="0.1524" layer="21"/>
+<circle x="-1.27" y="0" radius="1.016" width="0.1524" layer="51"/>
+<pad name="1" x="-1.27" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="1.27" y="0" drill="0.8128" shape="octagon"/>
+<text x="-0.0508" y="1.016" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-0.0508" y="-2.2352" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="0207/5V">
+<description><b>RESISTOR</b><p>
+type 0207, grid 5 mm</description>
+<wire x1="-2.54" y1="0" x2="-0.889" y2="0" width="0.6096" layer="51"/>
+<wire x1="-0.762" y1="0" x2="0.762" y2="0" width="0.6096" layer="21"/>
+<wire x1="0.889" y1="0" x2="2.54" y2="0" width="0.6096" layer="51"/>
+<circle x="-2.54" y="0" radius="1.27" width="0.1016" layer="21"/>
+<circle x="-2.54" y="0" radius="1.016" width="0.1524" layer="51"/>
+<pad name="1" x="-2.54" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="2.54" y="0" drill="0.8128" shape="octagon"/>
+<text x="-1.143" y="0.889" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-1.143" y="-2.159" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="0207/7">
+<description><b>RESISTOR</b><p>
+type 0207, grid 7.5 mm</description>
+<wire x1="-3.81" y1="0" x2="-3.429" y2="0" width="0.6096" layer="51"/>
+<wire x1="-3.175" y1="0.889" x2="-2.921" y2="1.143" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-3.175" y1="-0.889" x2="-2.921" y2="-1.143" width="0.1524" layer="21" curve="90"/>
+<wire x1="2.921" y1="-1.143" x2="3.175" y2="-0.889" width="0.1524" layer="21" curve="90"/>
+<wire x1="2.921" y1="1.143" x2="3.175" y2="0.889" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-3.175" y1="-0.889" x2="-3.175" y2="0.889" width="0.1524" layer="51"/>
+<wire x1="-2.921" y1="1.143" x2="-2.54" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="-2.413" y1="1.016" x2="-2.54" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="-2.921" y1="-1.143" x2="-2.54" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="-2.413" y1="-1.016" x2="-2.54" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="1.016" x2="2.54" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="1.016" x2="-2.413" y2="1.016" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="-1.016" x2="2.54" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="-1.016" x2="-2.413" y2="-1.016" width="0.1524" layer="21"/>
+<wire x1="2.921" y1="1.143" x2="2.54" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="2.921" y1="-1.143" x2="2.54" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="3.175" y1="-0.889" x2="3.175" y2="0.889" width="0.1524" layer="51"/>
+<wire x1="3.429" y1="0" x2="3.81" y2="0" width="0.6096" layer="51"/>
+<pad name="1" x="-3.81" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="3.81" y="0" drill="0.8128" shape="octagon"/>
+<text x="-2.54" y="1.397" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-2.286" y="-0.5588" size="1.27" layer="27" ratio="10">>VALUE</text>
+<rectangle x1="-3.429" y1="-0.3048" x2="-3.175" y2="0.3048" layer="51"/>
+<rectangle x1="3.175" y1="-0.3048" x2="3.429" y2="0.3048" layer="51"/>
+</package>
+<package name="L1812">
+<description><b>INDUCTOR</b><p>
+chip</description>
+<wire x1="-1.4732" y1="1.6002" x2="1.4732" y2="1.6002" width="0.1016" layer="51"/>
+<wire x1="-1.4478" y1="-1.6002" x2="1.4732" y2="-1.6002" width="0.1016" layer="51"/>
+<smd name="1" x="-1.95" y="0" dx="1.9" dy="3.4" layer="1"/>
+<smd name="2" x="1.95" y="0" dx="1.9" dy="3.4" layer="1"/>
+<text x="-1.905" y="1.905" size="1.27" layer="25">>NAME</text>
+<text x="-1.905" y="-3.175" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-2.3876" y1="-1.651" x2="-1.4376" y2="1.649" layer="51"/>
+<rectangle x1="1.4478" y1="-1.651" x2="2.3978" y2="1.649" layer="51"/>
+</package>
+<package name="TJ3-U1">
+<description><b>Inductor</b><p>
+Source: TJ-Serie Vishay.pdf</description>
+<wire x1="-3.65" y1="8.15" x2="3.65" y2="8.15" width="0.2032" layer="21"/>
+<wire x1="3.65" y1="-8.15" x2="-3.65" y2="-8.15" width="0.2032" layer="21"/>
+<wire x1="-3.65" y1="-8.15" x2="-3.65" y2="-1.1" width="0.2032" layer="21"/>
+<wire x1="-3.65" y1="-1.1" x2="-3.65" y2="1.1" width="0.2032" layer="51"/>
+<wire x1="-3.65" y1="1.1" x2="-3.65" y2="8.15" width="0.2032" layer="21"/>
+<wire x1="3.65" y1="8.15" x2="3.65" y2="1.1" width="0.2032" layer="21"/>
+<wire x1="3.65" y1="1.1" x2="3.65" y2="-1.1" width="0.2032" layer="51"/>
+<wire x1="3.65" y1="-1.1" x2="3.65" y2="-8.15" width="0.2032" layer="21"/>
+<pad name="1" x="-3.3" y="0" drill="0.9"/>
+<pad name="2" x="3.3" y="0" drill="0.9"/>
+<text x="-0.635" y="-5.08" size="1.27" layer="25" rot="R90">>NAME</text>
+<text x="1.905" y="-5.08" size="1.27" layer="27" rot="R90">>VALUE</text>
+</package>
+<package name="TJ3-U2">
+<description><b>Inductor</b><p>
+Source: TJ-Serie Vishay.pdf</description>
+<circle x="0" y="0" radius="8.3" width="0.2032" layer="27"/>
+<pad name="1" x="-7.35" y="0" drill="0.9"/>
+<pad name="2" x="7.35" y="0" drill="0.9"/>
+<text x="-5.08" y="0.635" size="1.27" layer="25">>NAME</text>
+<text x="-5.08" y="-1.905" size="1.27" layer="27">>VALUE</text>
+</package>
+<package name="TJ4-U1">
+<description><b>Inductor</b><p>
+Source: TJ-Serie Vishay.pdf</description>
+<wire x1="-4.95" y1="11.05" x2="4.95" y2="11.05" width="0.2032" layer="21"/>
+<wire x1="4.95" y1="11.05" x2="4.95" y2="-11.05" width="0.2032" layer="21"/>
+<wire x1="4.95" y1="-11.05" x2="-4.95" y2="-11.05" width="0.2032" layer="21"/>
+<wire x1="-4.95" y1="-11.05" x2="-4.95" y2="11.05" width="0.2032" layer="21"/>
+<pad name="1" x="-3.935" y="0" drill="0.9"/>
+<pad name="2" x="3.935" y="0" drill="0.9"/>
+<text x="-0.635" y="-5.08" size="1.27" layer="25" rot="R90">>NAME</text>
+<text x="1.905" y="-5.08" size="1.27" layer="27" rot="R90">>VALUE</text>
+</package>
+<package name="TJ4-U2">
+<description><b>Inductor</b><p>
+Source: TJ-Serie Vishay.pdf</description>
+<circle x="0" y="0" radius="11.1" width="0.2032" layer="27"/>
+<pad name="1" x="-9.9" y="0" drill="0.9"/>
+<pad name="2" x="9.9" y="0" drill="0.9"/>
+<text x="-5.08" y="0.635" size="1.27" layer="25">>NAME</text>
+<text x="-5.08" y="-1.905" size="1.27" layer="27">>VALUE</text>
+</package>
+<package name="TJ5-U1">
+<description><b>Inductor</b><p>
+Source: TJ-Serie Vishay.pdf</description>
+<wire x1="-5.55" y1="12.55" x2="5.55" y2="12.55" width="0.2032" layer="21"/>
+<wire x1="5.55" y1="12.55" x2="5.55" y2="-12.55" width="0.2032" layer="21"/>
+<wire x1="5.55" y1="-12.55" x2="-5.55" y2="-12.55" width="0.2032" layer="21"/>
+<wire x1="-5.55" y1="-12.55" x2="-5.55" y2="12.55" width="0.2032" layer="21"/>
+<pad name="1" x="-4.7" y="0" drill="0.9"/>
+<pad name="2" x="4.7" y="0" drill="0.9"/>
+<text x="-0.635" y="-5.08" size="1.27" layer="25" rot="R90">>NAME</text>
+<text x="1.905" y="-5.08" size="1.27" layer="27" rot="R90">>VALUE</text>
+</package>
+<package name="TJ5-U2">
+<description><b>Inductor</b><p>
+Source: TJ-Serie Vishay.pdf</description>
+<circle x="0" y="0" radius="12.6" width="0.2032" layer="27"/>
+<pad name="1" x="-11.45" y="0" drill="0.9"/>
+<pad name="2" x="11.45" y="0" drill="0.9"/>
+<text x="-5.08" y="0.635" size="1.27" layer="25">>NAME</text>
+<text x="-5.08" y="-1.905" size="1.27" layer="27">>VALUE</text>
+</package>
+<package name="TJ6-U1">
+<description><b>Inductor</b><p>
+Source: TJ-Serie Vishay.pdf</description>
+<wire x1="-10.95" y1="17.45" x2="10.95" y2="17.45" width="0.2032" layer="21"/>
+<wire x1="10.95" y1="17.45" x2="10.95" y2="-17.45" width="0.2032" layer="21"/>
+<wire x1="10.95" y1="-17.45" x2="-10.95" y2="-17.45" width="0.2032" layer="21"/>
+<wire x1="-10.95" y1="-17.45" x2="-10.95" y2="17.45" width="0.2032" layer="21"/>
+<pad name="1" x="-9.25" y="0" drill="1.3"/>
+<pad name="2" x="9.25" y="0" drill="1.3"/>
+<text x="-0.635" y="-5.08" size="1.27" layer="25" rot="R90">>NAME</text>
+<text x="1.905" y="-5.08" size="1.27" layer="27" rot="R90">>VALUE</text>
+</package>
+<package name="TJ6-U2">
+<description><b>Inductor</b><p>
+Source: TJ-Serie Vishay.pdf</description>
+<circle x="0" y="0" radius="17.5" width="0.2032" layer="27"/>
+<pad name="1" x="-15.5" y="0" drill="1.3"/>
+<pad name="2" x="15.5" y="0" drill="1.3"/>
+<text x="-5.08" y="0.635" size="1.27" layer="25">>NAME</text>
+<text x="-5.08" y="-1.905" size="1.27" layer="27">>VALUE</text>
+</package>
+<package name="TJ7-U1">
+<description><b>Inductor</b><p>
+Source: TJ-Serie Vishay.pdf</description>
+<wire x1="-9.45" y1="20.85" x2="9.43" y2="20.85" width="0.2032" layer="21"/>
+<wire x1="9.43" y1="20.85" x2="9.45" y2="-20.85" width="0.2032" layer="21"/>
+<wire x1="9.45" y1="-20.85" x2="-9.45" y2="-20.85" width="0.2032" layer="21"/>
+<wire x1="-9.45" y1="-20.85" x2="-9.45" y2="20.85" width="0.2032" layer="21"/>
+<pad name="1" x="-7.9" y="0" drill="1.3"/>
+<pad name="2" x="7.9" y="0" drill="1.3"/>
+<text x="-0.635" y="-5.08" size="1.27" layer="25" rot="R90">>NAME</text>
+<text x="1.905" y="-5.08" size="1.27" layer="27" rot="R90">>VALUE</text>
+</package>
+<package name="TJ7-U2">
+<description><b>Inductor</b><p>
+Source: TJ-Serie Vishay.pdf</description>
+<circle x="0" y="0" radius="20.9" width="0.2032" layer="27"/>
+<pad name="1" x="-18.8" y="0" drill="1.3"/>
+<pad name="2" x="18.8" y="0" drill="1.3"/>
+<text x="-5.08" y="0.635" size="1.27" layer="25">>NAME</text>
+<text x="-5.08" y="-1.905" size="1.27" layer="27">>VALUE</text>
+</package>
+<package name="TJ8-U1">
+<description><b>Inductor</b><p>
+Source: TJ-Serie Vishay.pdf</description>
+<wire x1="-12.55" y1="24.25" x2="12.55" y2="24.25" width="0.2032" layer="21"/>
+<wire x1="12.55" y1="24.25" x2="12.55" y2="-24.25" width="0.2032" layer="21"/>
+<wire x1="12.55" y1="-24.25" x2="-12.55" y2="-24.25" width="0.2032" layer="21"/>
+<wire x1="-12.55" y1="-24.25" x2="-12.55" y2="24.25" width="0.2032" layer="21"/>
+<pad name="1" x="-10.4" y="0" drill="1.5"/>
+<pad name="2" x="10.4" y="0" drill="1.5"/>
+<text x="-0.635" y="-5.08" size="1.27" layer="25" rot="R90">>NAME</text>
+<text x="1.905" y="-5.08" size="1.27" layer="27" rot="R90">>VALUE</text>
+</package>
+<package name="TJ8-U2">
+<description><b>Inductor</b><p>
+Source: TJ-Serie Vishay.pdf</description>
+<circle x="0" y="0" radius="24.6" width="0.2032" layer="27"/>
+<pad name="1" x="-22.35" y="0" drill="1.5"/>
+<pad name="2" x="22.35" y="0" drill="1.5"/>
+<text x="-5.08" y="0.635" size="1.27" layer="25">>NAME</text>
+<text x="-5.08" y="-1.905" size="1.27" layer="27">>VALUE</text>
+</package>
+<package name="TJ9-U1">
+<description><b>Inductor</b><p>
+Source: TJ-Serie Vishay.pdf</description>
+<wire x1="-17.95" y1="33.75" x2="17.95" y2="33.75" width="0.2032" layer="21"/>
+<wire x1="17.95" y1="33.75" x2="17.95" y2="-33.75" width="0.2032" layer="21"/>
+<wire x1="17.95" y1="-33.75" x2="-17.95" y2="-33.75" width="0.2032" layer="21"/>
+<wire x1="-17.95" y1="-33.75" x2="-17.95" y2="33.75" width="0.2032" layer="21"/>
+<pad name="1" x="-15.9" y="0" drill="1.8"/>
+<pad name="2" x="15.9" y="0" drill="1.8"/>
+<text x="-0.635" y="-5.08" size="1.27" layer="25" rot="R90">>NAME</text>
+<text x="1.905" y="-5.08" size="1.27" layer="27" rot="R90">>VALUE</text>
+</package>
+<package name="TJ9-U2">
+<description><b>Inductor</b><p>
+Source: TJ-Serie Vishay.pdf</description>
+<circle x="0" y="0" radius="34.5" width="0.2032" layer="27"/>
+<pad name="1" x="-31.6" y="0" drill="1.8"/>
+<pad name="2" x="31.6" y="0" drill="1.8"/>
+<text x="-5.08" y="0.635" size="1.27" layer="25">>NAME</text>
+<text x="-5.08" y="-1.905" size="1.27" layer="27">>VALUE</text>
+</package>
+<package name="POWER-CHOKE_WE-TPC">
+<description><b>POWER-CHOKE WE-TPC</b><p>
+Würth Elektronik, Partnumber: 744053220<br>
+Source: WE-TPC 744053220.pdf</description>
+<wire x1="-2.8" y1="2.3" x2="-2.3" y2="2.8" width="0.2" layer="51" curve="-90"/>
+<wire x1="-2.3" y1="2.8" x2="2.3" y2="2.8" width="0.2" layer="51"/>
+<wire x1="2.3" y1="2.8" x2="2.8" y2="2.3" width="0.2" layer="51" curve="-90"/>
+<wire x1="2.8" y1="2.3" x2="2.8" y2="-2.3" width="0.2" layer="51"/>
+<wire x1="2.8" y1="-2.3" x2="2.3" y2="-2.8" width="0.2" layer="51" curve="-90"/>
+<wire x1="2.3" y1="-2.8" x2="-2.3" y2="-2.8" width="0.2" layer="51"/>
+<wire x1="-2.3" y1="-2.8" x2="-2.8" y2="-2.3" width="0.2" layer="51" curve="-90"/>
+<wire x1="-2.8" y1="-2.3" x2="-2.8" y2="2.3" width="0.2" layer="51"/>
+<wire x1="-2.8" y1="0.65" x2="-2.8" y2="-0.65" width="0.2" layer="21"/>
+<wire x1="-2" y1="0.65" x2="-2" y2="-0.65" width="0.2" layer="21" curve="36.008323"/>
+<wire x1="2.8" y1="-0.65" x2="2.8" y2="0.65" width="0.2" layer="21"/>
+<wire x1="2" y1="-0.65" x2="2" y2="0.65" width="0.2" layer="21" curve="36.008323"/>
+<circle x="0" y="0" radius="2.1" width="0.2" layer="51"/>
+<smd name="1" x="0" y="2.05" dx="6.3" dy="2.2" layer="1" roundness="25"/>
+<smd name="2" x="0" y="-2.05" dx="6.3" dy="2.2" layer="1" roundness="25" rot="R180"/>
+<text x="-3.5" y="3.5" size="1.778" layer="25">>NAME</text>
+<text x="-3.5" y="-5.3" size="1.778" layer="27">>VALUE</text>
+</package>
+<package name="CEP125">
+<description><b>POWER INDUCTORS</b> (SMT Type)<p>
+Source: www.sumida.com/products/pdf/CEP125.pdf</description>
+<wire x1="-1.5796" y1="6.3448" x2="-1.5533" y2="6.3448" width="0.2032" layer="21"/>
+<wire x1="-1.5533" y1="6.3448" x2="-1.29" y2="6.0815" width="0.2032" layer="21"/>
+<wire x1="-1.29" y1="6.0815" x2="-1.1584" y2="6.0816" width="0.2032" layer="21"/>
+<wire x1="-1.1584" y1="6.0816" x2="-1.1584" y2="6.2922" width="0.2032" layer="21"/>
+<wire x1="-1.1584" y1="6.2922" x2="-1.1583" y2="6.2922" width="0.2032" layer="21"/>
+<wire x1="-1.1583" y1="6.2922" x2="-1.1057" y2="6.3448" width="0.2032" layer="21"/>
+<wire x1="-1.1057" y1="6.3448" x2="1.1057" y2="6.3448" width="0.2032" layer="21"/>
+<wire x1="1.1057" y1="6.3448" x2="1.1057" y2="6.0815" width="0.2032" layer="21"/>
+<wire x1="1.1057" y1="6.0815" x2="1.211" y2="6.0815" width="0.2032" layer="21"/>
+<wire x1="1.211" y1="6.0815" x2="1.4217" y2="6.3448" width="0.2032" layer="21"/>
+<wire x1="1.4217" y1="6.3448" x2="6.1079" y2="6.3448" width="0.2032" layer="51"/>
+<wire x1="6.1079" y1="6.3448" x2="6.3448" y2="6.1079" width="0.2032" layer="21" curve="-96.645912"/>
+<wire x1="6.3448" y1="6.1079" x2="6.3448" y2="1.8166" width="0.2032" layer="21"/>
+<wire x1="6.3448" y1="1.8166" x2="6.2658" y2="1.7376" width="0.2032" layer="21"/>
+<wire x1="6.2658" y1="1.7376" x2="6.2658" y2="-1.7376" width="0.2032" layer="21"/>
+<wire x1="6.2658" y1="-1.7376" x2="6.3448" y2="-1.8166" width="0.2032" layer="21"/>
+<wire x1="6.3448" y1="-1.8166" x2="6.3448" y2="-6.0289" width="0.2032" layer="21"/>
+<wire x1="6.3448" y1="-6.0289" x2="6.0289" y2="-6.3448" width="0.2032" layer="21" curve="-91.024745"/>
+<wire x1="6.0289" y1="-6.3448" x2="-6.0289" y2="-6.3448" width="0.2032" layer="51"/>
+<wire x1="-6.3448" y1="-6.0289" x2="-6.3448" y2="6.1342" width="0.2032" layer="21"/>
+<wire x1="-6.3448" y1="6.1342" x2="-6.1342" y2="6.3448" width="0.2032" layer="21" curve="-83.297108"/>
+<wire x1="-6.1342" y1="6.3448" x2="-1.5533" y2="6.3448" width="0.2032" layer="51"/>
+<wire x1="-6.2395" y1="5.7393" x2="-2.0535" y2="5.7393" width="0.2032" layer="51"/>
+<wire x1="-2.0535" y1="5.7393" x2="-1.5534" y2="3.9754" width="0.2032" layer="51"/>
+<wire x1="-1.5534" y1="3.9754" x2="1.527" y2="3.9754" width="0.2032" layer="21"/>
+<wire x1="1.527" y1="3.9754" x2="2.0535" y2="5.7393" width="0.2032" layer="51"/>
+<wire x1="2.0535" y1="5.7393" x2="6.2395" y2="5.7393" width="0.2032" layer="51"/>
+<wire x1="6.2395" y1="-3.4752" x2="-6.2658" y2="-3.4752" width="0.2032" layer="21"/>
+<wire x1="-5.6077" y1="-3.5805" x2="-5.6077" y2="-6.2395" width="0.2032" layer="21"/>
+<wire x1="-4.8968" y1="-6.2395" x2="-4.8968" y2="-3.5805" width="0.2032" layer="21"/>
+<wire x1="-4.7915" y1="-6.0552" x2="-2.2115" y2="-6.0552" width="0.2032" layer="21"/>
+<wire x1="-2.9486" y1="-5.9499" x2="-2.9223" y2="-5.9499" width="0.2032" layer="21"/>
+<wire x1="-2.9223" y1="-5.9499" x2="-2.9223" y2="-3.5805" width="0.2032" layer="21"/>
+<wire x1="-2.1588" y1="-6.2395" x2="-2.1588" y2="-3.8701" width="0.2032" layer="21"/>
+<wire x1="2.1325" y1="-6.2395" x2="2.1325" y2="-3.8701" width="0.2032" layer="21"/>
+<wire x1="2.2378" y1="-6.0289" x2="4.8968" y2="-6.0289" width="0.2032" layer="21"/>
+<wire x1="4.8968" y1="-3.5805" x2="4.8968" y2="-6.2395" width="0.2032" layer="21"/>
+<wire x1="2.9486" y1="-5.9236" x2="2.9486" y2="-3.5805" width="0.2032" layer="21"/>
+<wire x1="5.5813" y1="-6.2395" x2="5.5813" y2="-3.5805" width="0.2032" layer="21"/>
+<wire x1="2.5011" y1="-3.5805" x2="-2.4747" y2="-3.5805" width="0.2032" layer="51" curve="-63.906637"/>
+<wire x1="1.1057" y1="6.0815" x2="-1.1584" y2="6.0815" width="0.2032" layer="21"/>
+<wire x1="-1.7902" y1="5.1601" x2="1.7376" y2="5.1863" width="0.2032" layer="21" curve="-37.134171"/>
+<wire x1="-6.0289" y1="-6.3448" x2="-6.3448" y2="-6.0289" width="0.2032" layer="21" curve="-90.91408"/>
+<smd name="1" x="-3.5" y="5.375" dx="3" dy="2.75" layer="1"/>
+<smd name="2" x="3.5" y="5.375" dx="3" dy="2.75" layer="1"/>
+<smd name="3" x="0" y="-5.48" dx="3" dy="2.55" layer="1"/>
+<text x="-5.08" y="1.27" size="1.27" layer="25">>NAME</text>
+<text x="-5.08" y="-1.27" size="1.27" layer="27">>VALUE</text>
+</package>
+<package name="1060-152">
+<description><b>coilcraft inductor</b><br>
+drawings at <a href="http://www.coilcraft.com/pdf_viewer/showpdf.cfm?f=pdf_store:xal1060_.pdf">http://www.coilcraft.com/pdf_viewer/showpdf.cfm?f=pdf_store:xal1060_.pdf</a></description>
+<smd name="P$1" x="-3.325" y="0" dx="2.39" dy="9.5" layer="1"/>
+<smd name="P$2" x="3.325" y="0" dx="2.39" dy="9.5" layer="1"/>
+<rectangle x1="-5" y1="-5.65" x2="5" y2="5.65" layer="39"/>
+</package>
+<package name="PG-TSDSON8">
+<description><b>infineon mosfet package</b><br>
+created from drawings at <a href="http://www.infineon.com/dgdl/Recommendations+for+Board+Assembly_T(S)DSON.pdf?folderId=db3a304313b8b5a60113cee8763b02d7&fileId=db3a30432239cccd0122c1581cb45996">http://www.infineon.com/dgdl/Recommendations+for+Board+Assembly_T(S)DSON.pdf?folderId=db3a304313b8b5a60113cee8763b02d7&fileId=db3a30432239cccd0122c1581cb45996</a> (page 13 and TSDSON is Shrink SuperSO8)</description>
+<smd name="S$1" x="-0.325" y="-1.5" dx="0.8" dy="0.34" layer="1" rot="R90"/>
+<smd name="S$2" x="0.325" y="-1.5" dx="0.8" dy="0.34" layer="1" rot="R90"/>
+<smd name="G" x="0.975" y="-1.5" dx="0.8" dy="0.34" layer="1" rot="R90"/>
+<smd name="S$0" x="-0.975" y="-1.5" dx="0.8" dy="0.34" layer="1" rot="R90"/>
+<smd name="D$1" x="-0.975" y="1.25" dx="0.34" dy="1.3" layer="1"/>
+<smd name="D$2" x="-0.325" y="1.25" dx="0.34" dy="1.3" layer="1"/>
+<smd name="D$3" x="0.325" y="1.25" dx="0.34" dy="1.3" layer="1"/>
+<smd name="D$4" x="0.975" y="1.25" dx="0.34" dy="1.3" layer="1"/>
+<smd name="D$0" x="0" y="0.395" dx="2.29" dy="1.71" layer="1"/>
+<rectangle x1="-1.6" y1="-1.9" x2="1.6" y2="1.9" layer="39"/>
+</package>
+<package name="1010-153">
+<description><b>coilcraft inductor</b><br>
+drawings at <a href="http://www.coilcraft.com/pdf_viewer/showpdf.cfm?f=pdf_store:xal1010_.pdf">http://www.coilcraft.com/pdf_viewer/showpdf.cfm?f=pdf_store:xal1010_.pdf</a></description>
+<smd name="P$1" x="-3.325" y="0" dx="2.38" dy="8.71" layer="1"/>
+<smd name="P$2" x="3.325" y="0" dx="2.38" dy="8.71" layer="1"/>
+<rectangle x1="-5" y1="-5.65" x2="5" y2="5.65" layer="39"/>
+</package>
+<package name="ELFH0225*">
+<description>Amphenol PCD ELFH0225*</description>
+<pad name="P$1" x="2.54" y="2.54" drill="1.4" shape="square" rot="R180"/>
+<pad name="P$2" x="-2.54" y="2.54" drill="1.4" shape="square" rot="R180"/>
+<rectangle x1="-5.9944" y1="-3.556" x2="5.9944" y2="6.223" layer="39" rot="R180"/>
+<text x="-3.81" y="6.35" size="1.27" layer="25">>NAME</text>
+<text x="-3.81" y="-5.08" size="1.27" layer="27">>VALUE</text>
+<wire x1="5.1562" y1="0.635" x2="5.1562" y2="4.445" width="0.2032" layer="21"/>
+<wire x1="-5.1562" y1="4.445" x2="-5.1562" y2="0.635" width="0.2032" layer="21"/>
+<wire x1="-5.1562" y1="0.635" x2="5.1562" y2="0.635" width="0.2032" layer="21"/>
+<wire x1="3.81" y1="4.445" x2="1.27" y2="4.445" width="0.2032" layer="21" curve="100"/>
+<wire x1="-1.27" y1="4.445" x2="-3.81" y2="4.445" width="0.2032" layer="21" curve="100"/>
+<wire x1="5.08" y1="4.445" x2="3.81" y2="4.445" width="0.2032" layer="21"/>
+<wire x1="1.27" y1="4.445" x2="-1.27" y2="4.445" width="0.2032" layer="21"/>
+<wire x1="-3.81" y1="4.445" x2="-5.08" y2="4.445" width="0.2032" layer="21"/>
+</package>
+<package name="39543-0202">
+<wire x1="-5" y1="3.2" x2="5" y2="3.2" width="0.127" layer="21"/>
+<wire x1="5" y1="3.2" x2="5" y2="-7.8" width="0.127" layer="21"/>
+<wire x1="5" y1="-7.8" x2="3.5" y2="-7.8" width="0.127" layer="21"/>
+<wire x1="3.5" y1="-7.8" x2="1.5" y2="-7.8" width="0.127" layer="21"/>
+<wire x1="1.5" y1="-7.8" x2="-1.5" y2="-7.8" width="0.127" layer="21"/>
+<wire x1="-1.5" y1="-7.8" x2="-3.5" y2="-7.8" width="0.127" layer="21"/>
+<wire x1="-3.5" y1="-7.8" x2="-5" y2="-7.8" width="0.127" layer="21"/>
+<wire x1="-5" y1="-7.8" x2="-5" y2="3.2" width="0.127" layer="21"/>
+<wire x1="-3.5" y1="-7.8" x2="-3.5" y2="-5.2" width="0.127" layer="21"/>
+<wire x1="-3.5" y1="-5.2" x2="-1.5" y2="-5.2" width="0.127" layer="21"/>
+<wire x1="-1.5" y1="-5.2" x2="-1.5" y2="-7.8" width="0.127" layer="21"/>
+<wire x1="3.5" y1="-7.8" x2="3.5" y2="-5.2" width="0.127" layer="21"/>
+<wire x1="3.5" y1="-5.2" x2="1.5" y2="-5.2" width="0.127" layer="21"/>
+<wire x1="1.5" y1="-5.2" x2="1.5" y2="-7.8" width="0.127" layer="21"/>
+<pad name="P$1" x="-2.5" y="0" drill="1.4" shape="long" rot="R90"/>
+<pad name="P$2" x="2.5" y="0" drill="1.4" shape="long" rot="R90"/>
+</package>
+<package name="SOD-123">
+<description><b>SOD-123 SMA package</b><br>
+using dimensions from <a href="http://www.onsemi.com/pub_link/Collateral/MMSZ5221BT1-D.PDF">http://www.onsemi.com/pub_link/Collateral/MMSZ5221BT1-D.PDF</a></description>
+<smd name="CATHODE" x="1.635" y="0" dx="0.91" dy="1.22" layer="1"/>
+<smd name="ANODE" x="-1.635" y="0" dx="0.91" dy="1.22" layer="1"/>
+<rectangle x1="0.1" y1="-1" x2="1.1" y2="1" layer="21"/>
+<rectangle x1="-2" y1="-0.9" x2="2" y2="0.9" layer="39"/>
+</package>
+<package name="C0402">
+<description><b>CAPACITOR</b><p>
+chip</description>
+<wire x1="-0.245" y1="0.224" x2="0.245" y2="0.224" width="0.1524" layer="51"/>
+<wire x1="0.245" y1="-0.224" x2="-0.245" y2="-0.224" width="0.1524" layer="51"/>
+<wire x1="-1.473" y1="0.483" x2="1.473" y2="0.483" width="0.0508" layer="39"/>
+<wire x1="1.473" y1="0.483" x2="1.473" y2="-0.483" width="0.0508" layer="39"/>
+<wire x1="1.473" y1="-0.483" x2="-1.473" y2="-0.483" width="0.0508" layer="39"/>
+<wire x1="-1.473" y1="-0.483" x2="-1.473" y2="0.483" width="0.0508" layer="39"/>
+<smd name="1" x="-0.65" y="0" dx="0.7" dy="0.9" layer="1"/>
+<smd name="2" x="0.65" y="0" dx="0.7" dy="0.9" layer="1"/>
+<text x="-0.635" y="0.762" size="1.27" layer="25">>NAME</text>
+<text x="-0.635" y="-1.905" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-0.554" y1="-0.3048" x2="-0.254" y2="0.2951" layer="51"/>
+<rectangle x1="0.2588" y1="-0.3048" x2="0.5588" y2="0.2951" layer="51"/>
+<rectangle x1="-0.1999" y1="-0.3" x2="0.1999" y2="0.3" layer="35"/>
+</package>
+<package name="C0504">
+<description><b>CAPACITOR</b><p>
+chip</description>
+<wire x1="-1.473" y1="0.983" x2="1.473" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="1.473" y1="0.983" x2="1.473" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="1.473" y1="-0.983" x2="-1.473" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="-1.473" y1="-0.983" x2="-1.473" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="-0.294" y1="0.559" x2="0.294" y2="0.559" width="0.1016" layer="51"/>
+<wire x1="-0.294" y1="-0.559" x2="0.294" y2="-0.559" width="0.1016" layer="51"/>
+<smd name="1" x="-0.7" y="0" dx="1" dy="1.3" layer="1"/>
+<smd name="2" x="0.7" y="0" dx="1" dy="1.3" layer="1"/>
+<text x="-0.635" y="0.889" size="1.27" layer="25">>NAME</text>
+<text x="-0.635" y="-2.159" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-0.6604" y1="-0.6223" x2="-0.2804" y2="0.6276" layer="51"/>
+<rectangle x1="0.2794" y1="-0.6223" x2="0.6594" y2="0.6276" layer="51"/>
+<rectangle x1="-0.1001" y1="-0.4001" x2="0.1001" y2="0.4001" layer="35"/>
+</package>
+<package name="C0603">
+<description><b>CAPACITOR</b><p>
+chip</description>
+<wire x1="-1.473" y1="0.983" x2="1.473" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="1.473" y1="0.983" x2="1.473" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="1.473" y1="-0.983" x2="-1.473" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="-0.356" y1="0.432" x2="0.356" y2="0.432" width="0.1016" layer="51"/>
+<wire x1="-0.356" y1="-0.419" x2="0.356" y2="-0.419" width="0.1016" layer="51"/>
+<smd name="1" x="-0.85" y="0" dx="1.1" dy="1" layer="1"/>
+<smd name="2" x="0.85" y="0" dx="1.1" dy="1" layer="1"/>
+<text x="-0.889" y="0.762" size="1.27" layer="25">>NAME</text>
+<text x="-0.889" y="-2.032" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-0.8382" y1="-0.4699" x2="-0.3381" y2="0.4801" layer="51"/>
+<rectangle x1="0.3302" y1="-0.4699" x2="0.8303" y2="0.4801" layer="51"/>
+<rectangle x1="-0.1999" y1="-0.3" x2="0.1999" y2="0.3" layer="35"/>
+</package>
+<package name="C0805">
+<description><b>CAPACITOR</b><p>
+chip</description>
+<wire x1="-1.973" y1="0.983" x2="1.973" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="1.973" y1="-0.983" x2="-1.973" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="-1.973" y1="-0.983" x2="-1.973" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="-0.381" y1="0.66" x2="0.381" y2="0.66" width="0.1016" layer="51"/>
+<wire x1="-0.356" y1="-0.66" x2="0.381" y2="-0.66" width="0.1016" layer="51"/>
+<wire x1="1.973" y1="0.983" x2="1.973" y2="-0.983" width="0.0508" layer="39"/>
+<smd name="1" x="-0.85" y="0" dx="1.3" dy="1.5" layer="1"/>
+<smd name="2" x="0.85" y="0" dx="1.3" dy="1.5" layer="1"/>
+<text x="-0.889" y="1.016" size="1.27" layer="25">>NAME</text>
+<text x="-0.889" y="-2.286" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-1.0922" y1="-0.7239" x2="-0.3421" y2="0.7262" layer="51"/>
+<rectangle x1="0.3556" y1="-0.7239" x2="1.1057" y2="0.7262" layer="51"/>
+<rectangle x1="-0.1001" y1="-0.4001" x2="0.1001" y2="0.4001" layer="35"/>
+</package>
+<package name="C1005">
+<description><b>CAPACITOR</b><p>
+chip</description>
+<wire x1="-0.245" y1="0.224" x2="0.245" y2="0.224" width="0.1524" layer="51"/>
+<wire x1="0.245" y1="-0.224" x2="-0.245" y2="-0.224" width="0.1524" layer="51"/>
+<wire x1="-1.473" y1="0.483" x2="1.473" y2="0.483" width="0.0508" layer="39"/>
+<wire x1="1.473" y1="0.483" x2="1.473" y2="-0.483" width="0.0508" layer="39"/>
+<wire x1="1.473" y1="-0.483" x2="-1.473" y2="-0.483" width="0.0508" layer="39"/>
+<wire x1="-1.473" y1="-0.483" x2="-1.473" y2="0.483" width="0.0508" layer="39"/>
+<smd name="1" x="-0.65" y="0" dx="0.7" dy="0.9" layer="1"/>
+<smd name="2" x="0.65" y="0" dx="0.7" dy="0.9" layer="1"/>
+<text x="-0.635" y="0.762" size="1.27" layer="25">>NAME</text>
+<text x="-0.635" y="-1.905" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-0.554" y1="-0.3048" x2="-0.254" y2="0.2951" layer="51"/>
+<rectangle x1="0.2588" y1="-0.3048" x2="0.5588" y2="0.2951" layer="51"/>
+<rectangle x1="-0.1999" y1="-0.3" x2="0.1999" y2="0.3" layer="35"/>
+</package>
+<package name="C1206">
+<description><b>CAPACITOR</b><p>
+chip</description>
+<wire x1="-2.473" y1="0.983" x2="2.473" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="2.473" y1="-0.983" x2="-2.473" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="-2.473" y1="-0.983" x2="-2.473" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="2.473" y1="0.983" x2="2.473" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="-0.965" y1="0.787" x2="0.965" y2="0.787" width="0.1016" layer="51"/>
+<wire x1="-0.965" y1="-0.787" x2="0.965" y2="-0.787" width="0.1016" layer="51"/>
+<smd name="1" x="-1.4" y="0" dx="1.6" dy="1.8" layer="1"/>
+<smd name="2" x="1.4" y="0" dx="1.6" dy="1.8" layer="1"/>
+<text x="-1.27" y="1.143" size="1.27" layer="25">>NAME</text>
+<text x="-1.27" y="-2.413" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-1.7018" y1="-0.8509" x2="-0.9517" y2="0.8491" layer="51"/>
+<rectangle x1="0.9517" y1="-0.8491" x2="1.7018" y2="0.8509" layer="51"/>
+<rectangle x1="-0.1999" y1="-0.4001" x2="0.1999" y2="0.4001" layer="35"/>
+</package>
+<package name="C1210">
+<description><b>CAPACITOR</b><p>
+chip</description>
+<wire x1="-2.473" y1="1.483" x2="2.473" y2="1.483" width="0.0508" layer="39"/>
+<wire x1="2.473" y1="-1.483" x2="-2.473" y2="-1.483" width="0.0508" layer="39"/>
+<wire x1="-2.473" y1="-1.483" x2="-2.473" y2="1.483" width="0.0508" layer="39"/>
+<wire x1="-0.9652" y1="1.2446" x2="0.9652" y2="1.2446" width="0.1016" layer="51"/>
+<wire x1="-0.9652" y1="-1.2446" x2="0.9652" y2="-1.2446" width="0.1016" layer="51"/>
+<wire x1="2.473" y1="1.483" x2="2.473" y2="-1.483" width="0.0508" layer="39"/>
+<smd name="1" x="-1.4" y="0" dx="1.6" dy="2.7" layer="1"/>
+<smd name="2" x="1.4" y="0" dx="1.6" dy="2.7" layer="1"/>
+<text x="-1.397" y="1.651" size="1.27" layer="25">>NAME</text>
+<text x="-1.397" y="-2.921" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-1.7018" y1="-1.2954" x2="-0.9517" y2="1.3045" layer="51"/>
+<rectangle x1="0.9517" y1="-1.3045" x2="1.7018" y2="1.2954" layer="51"/>
+<rectangle x1="-0.1999" y1="-0.4001" x2="0.1999" y2="0.4001" layer="35"/>
+</package>
+<package name="C1310">
+<description><b>CAPACITOR</b><p>
+chip</description>
+<wire x1="-1.473" y1="0.983" x2="1.473" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="1.473" y1="0.983" x2="1.473" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="1.473" y1="-0.983" x2="-1.473" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="-1.473" y1="-0.983" x2="-1.473" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="-0.294" y1="0.559" x2="0.294" y2="0.559" width="0.1016" layer="51"/>
+<wire x1="-0.294" y1="-0.559" x2="0.294" y2="-0.559" width="0.1016" layer="51"/>
+<smd name="1" x="-0.7" y="0" dx="1" dy="1.3" layer="1"/>
+<smd name="2" x="0.7" y="0" dx="1" dy="1.3" layer="1"/>
+<text x="-0.635" y="0.889" size="1.27" layer="25">>NAME</text>
+<text x="-0.635" y="-2.159" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-0.6604" y1="-0.6223" x2="-0.2804" y2="0.6276" layer="51"/>
+<rectangle x1="0.2794" y1="-0.6223" x2="0.6594" y2="0.6276" layer="51"/>
+<rectangle x1="-0.1001" y1="-0.3" x2="0.1001" y2="0.3" layer="35"/>
+</package>
+<package name="C1608">
+<description><b>CAPACITOR</b><p>
+chip</description>
+<wire x1="-1.473" y1="0.983" x2="1.473" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="1.473" y1="0.983" x2="1.473" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="1.473" y1="-0.983" x2="-1.473" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="-1.473" y1="-0.983" x2="-1.473" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="-0.356" y1="0.432" x2="0.356" y2="0.432" width="0.1016" layer="51"/>
+<wire x1="-0.356" y1="-0.419" x2="0.356" y2="-0.419" width="0.1016" layer="51"/>
+<smd name="1" x="-0.85" y="0" dx="1.1" dy="1" layer="1"/>
+<smd name="2" x="0.85" y="0" dx="1.1" dy="1" layer="1"/>
+<text x="-0.635" y="0.762" size="1.27" layer="25">>NAME</text>
+<text x="-0.635" y="-2.032" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-0.8382" y1="-0.4699" x2="-0.3381" y2="0.4801" layer="51"/>
+<rectangle x1="0.3302" y1="-0.4699" x2="0.8303" y2="0.4801" layer="51"/>
+<rectangle x1="-0.1999" y1="-0.3" x2="0.1999" y2="0.3" layer="35"/>
+</package>
+<package name="C1812">
+<description><b>CAPACITOR</b><p>
+chip</description>
+<wire x1="-2.973" y1="1.983" x2="2.973" y2="1.983" width="0.0508" layer="39"/>
+<wire x1="2.973" y1="-1.983" x2="-2.973" y2="-1.983" width="0.0508" layer="39"/>
+<wire x1="-2.973" y1="-1.983" x2="-2.973" y2="1.983" width="0.0508" layer="39"/>
+<wire x1="-1.4732" y1="1.6002" x2="1.4732" y2="1.6002" width="0.1016" layer="51"/>
+<wire x1="-1.4478" y1="-1.6002" x2="1.4732" y2="-1.6002" width="0.1016" layer="51"/>
+<wire x1="2.973" y1="1.983" x2="2.973" y2="-1.983" width="0.0508" layer="39"/>
+<smd name="1" x="-1.95" y="0" dx="1.9" dy="3.4" layer="1"/>
+<smd name="2" x="1.95" y="0" dx="1.9" dy="3.4" layer="1"/>
+<text x="-1.905" y="1.905" size="1.27" layer="25">>NAME</text>
+<text x="-1.905" y="-3.175" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-2.3876" y1="-1.651" x2="-1.4376" y2="1.649" layer="51"/>
+<rectangle x1="1.4478" y1="-1.651" x2="2.3978" y2="1.649" layer="51"/>
+<rectangle x1="-0.3" y1="-0.4001" x2="0.3" y2="0.4001" layer="35"/>
+</package>
+<package name="C1825">
+<description><b>CAPACITOR</b><p>
+chip</description>
+<wire x1="-2.973" y1="3.483" x2="2.973" y2="3.483" width="0.0508" layer="39"/>
+<wire x1="2.973" y1="-3.483" x2="-2.973" y2="-3.483" width="0.0508" layer="39"/>
+<wire x1="-2.973" y1="-3.483" x2="-2.973" y2="3.483" width="0.0508" layer="39"/>
+<wire x1="-1.4986" y1="3.2766" x2="1.4732" y2="3.2766" width="0.1016" layer="51"/>
+<wire x1="-1.4732" y1="-3.2766" x2="1.4986" y2="-3.2766" width="0.1016" layer="51"/>
+<wire x1="2.973" y1="3.483" x2="2.973" y2="-3.483" width="0.0508" layer="39"/>
+<smd name="1" x="-1.95" y="0" dx="1.9" dy="6.8" layer="1"/>
+<smd name="2" x="1.95" y="0" dx="1.9" dy="6.8" layer="1"/>
+<text x="-1.905" y="3.683" size="1.27" layer="25">>NAME</text>
+<text x="-1.905" y="-4.826" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-2.413" y1="-3.3528" x2="-1.463" y2="3.3472" layer="51"/>
+<rectangle x1="1.4478" y1="-3.3528" x2="2.3978" y2="3.3472" layer="51"/>
+<rectangle x1="-0.7" y1="-0.7" x2="0.7" y2="0.7" layer="35"/>
+</package>
+<package name="C2012">
+<description><b>CAPACITOR</b><p>
+chip</description>
+<wire x1="-1.973" y1="0.983" x2="1.973" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="1.973" y1="0.983" x2="1.973" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="1.973" y1="-0.983" x2="-1.973" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="-1.973" y1="-0.983" x2="-1.973" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="-0.381" y1="0.66" x2="0.381" y2="0.66" width="0.1016" layer="51"/>
+<wire x1="-0.356" y1="-0.66" x2="0.381" y2="-0.66" width="0.1016" layer="51"/>
+<smd name="1" x="-0.85" y="0" dx="1.3" dy="1.5" layer="1"/>
+<smd name="2" x="0.85" y="0" dx="1.3" dy="1.5" layer="1"/>
+<text x="-0.889" y="1.016" size="1.27" layer="25">>NAME</text>
+<text x="-0.889" y="-2.286" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-1.0922" y1="-0.7239" x2="-0.3421" y2="0.7262" layer="51"/>
+<rectangle x1="0.3556" y1="-0.7239" x2="1.1057" y2="0.7262" layer="51"/>
+<rectangle x1="-0.1001" y1="-0.4001" x2="0.1001" y2="0.4001" layer="35"/>
+</package>
+<package name="C3216">
+<description><b>CAPACITOR</b><p>
+chip</description>
+<wire x1="-2.473" y1="0.983" x2="2.473" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="2.473" y1="-0.983" x2="-2.473" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="-2.473" y1="-0.983" x2="-2.473" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="2.473" y1="0.983" x2="2.473" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="-0.965" y1="0.787" x2="0.965" y2="0.787" width="0.1016" layer="51"/>
+<wire x1="-0.965" y1="-0.787" x2="0.965" y2="-0.787" width="0.1016" layer="51"/>
+<smd name="1" x="-1.4" y="0" dx="1.6" dy="1.8" layer="1"/>
+<smd name="2" x="1.4" y="0" dx="1.6" dy="1.8" layer="1"/>
+<text x="-1.27" y="1.143" size="1.27" layer="25">>NAME</text>
+<text x="-1.27" y="-2.413" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-1.7018" y1="-0.8509" x2="-0.9517" y2="0.8491" layer="51"/>
+<rectangle x1="0.9517" y1="-0.8491" x2="1.7018" y2="0.8509" layer="51"/>
+<rectangle x1="-0.3" y1="-0.5001" x2="0.3" y2="0.5001" layer="35"/>
+</package>
+<package name="C3225">
+<description><b>CAPACITOR</b><p>
+chip</description>
+<wire x1="-2.473" y1="1.483" x2="2.473" y2="1.483" width="0.0508" layer="39"/>
+<wire x1="2.473" y1="-1.483" x2="-2.473" y2="-1.483" width="0.0508" layer="39"/>
+<wire x1="-2.473" y1="-1.483" x2="-2.473" y2="1.483" width="0.0508" layer="39"/>
+<wire x1="-0.9652" y1="1.2446" x2="0.9652" y2="1.2446" width="0.1016" layer="51"/>
+<wire x1="-0.9652" y1="-1.2446" x2="0.9652" y2="-1.2446" width="0.1016" layer="51"/>
+<wire x1="2.473" y1="1.483" x2="2.473" y2="-1.483" width="0.0508" layer="39"/>
+<smd name="1" x="-1.4" y="0" dx="1.6" dy="2.7" layer="1"/>
+<smd name="2" x="1.4" y="0" dx="1.6" dy="2.7" layer="1"/>
+<text x="-1.397" y="1.651" size="1.27" layer="25">>NAME</text>
+<text x="-1.397" y="-2.921" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-1.7018" y1="-1.2954" x2="-0.9517" y2="1.3045" layer="51"/>
+<rectangle x1="0.9517" y1="-1.3045" x2="1.7018" y2="1.2954" layer="51"/>
+<rectangle x1="-0.1999" y1="-0.5001" x2="0.1999" y2="0.5001" layer="35"/>
+</package>
+<package name="C4532">
+<description><b>CAPACITOR</b><p>
+chip</description>
+<wire x1="-2.973" y1="1.983" x2="2.973" y2="1.983" width="0.0508" layer="39"/>
+<wire x1="2.973" y1="-1.983" x2="-2.973" y2="-1.983" width="0.0508" layer="39"/>
+<wire x1="-2.973" y1="-1.983" x2="-2.973" y2="1.983" width="0.0508" layer="39"/>
+<wire x1="-1.4732" y1="1.6002" x2="1.4732" y2="1.6002" width="0.1016" layer="51"/>
+<wire x1="-1.4478" y1="-1.6002" x2="1.4732" y2="-1.6002" width="0.1016" layer="51"/>
+<wire x1="2.973" y1="1.983" x2="2.973" y2="-1.983" width="0.0508" layer="39"/>
+<smd name="1" x="-1.95" y="0" dx="1.9" dy="3.4" layer="1"/>
+<smd name="2" x="1.95" y="0" dx="1.9" dy="3.4" layer="1"/>
+<text x="-1.905" y="2.032" size="1.27" layer="25">>NAME</text>
+<text x="-1.905" y="-3.175" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-2.3876" y1="-1.651" x2="-1.4376" y2="1.649" layer="51"/>
+<rectangle x1="1.4478" y1="-1.651" x2="2.3978" y2="1.649" layer="51"/>
+<rectangle x1="-0.4001" y1="-0.7" x2="0.4001" y2="0.7" layer="35"/>
+</package>
+<package name="C4564">
+<description><b>CAPACITOR</b><p>
+chip</description>
+<wire x1="-2.973" y1="3.483" x2="2.973" y2="3.483" width="0.0508" layer="39"/>
+<wire x1="2.973" y1="-3.483" x2="-2.973" y2="-3.483" width="0.0508" layer="39"/>
+<wire x1="-2.973" y1="-3.483" x2="-2.973" y2="3.483" width="0.0508" layer="39"/>
+<wire x1="-1.4986" y1="3.2766" x2="1.4732" y2="3.2766" width="0.1016" layer="51"/>
+<wire x1="-1.4732" y1="-3.2766" x2="1.4986" y2="-3.2766" width="0.1016" layer="51"/>
+<wire x1="2.973" y1="3.483" x2="2.973" y2="-3.483" width="0.0508" layer="39"/>
+<smd name="1" x="-1.95" y="0" dx="1.9" dy="6.8" layer="1"/>
+<smd name="2" x="1.95" y="0" dx="1.9" dy="6.8" layer="1"/>
+<text x="-1.905" y="3.683" size="1.27" layer="25">>NAME</text>
+<text x="-1.905" y="-4.826" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-2.413" y1="-3.3528" x2="-1.463" y2="3.3472" layer="51"/>
+<rectangle x1="1.4478" y1="-3.3528" x2="2.3978" y2="3.3472" layer="51"/>
+<rectangle x1="-0.5001" y1="-1" x2="0.5001" y2="1" layer="35"/>
+</package>
+<package name="C025-024X044">
+<description><b>CAPACITOR</b><p>
+grid 2.5 mm, outline 2.4 x 4.4 mm</description>
+<wire x1="-2.159" y1="-0.635" x2="-2.159" y2="0.635" width="0.1524" layer="21"/>
+<wire x1="-2.159" y1="0.635" x2="-1.651" y2="1.143" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-2.159" y1="-0.635" x2="-1.651" y2="-1.143" width="0.1524" layer="21" curve="90"/>
+<wire x1="1.651" y1="1.143" x2="-1.651" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="-0.635" x2="2.159" y2="0.635" width="0.1524" layer="21"/>
+<wire x1="1.651" y1="-1.143" x2="-1.651" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="1.651" y1="1.143" x2="2.159" y2="0.635" width="0.1524" layer="21" curve="-90"/>
+<wire x1="1.651" y1="-1.143" x2="2.159" y2="-0.635" width="0.1524" layer="21" curve="90"/>
+<wire x1="-0.3048" y1="0.762" x2="-0.3048" y2="-0.762" width="0.3048" layer="21"/>
+<wire x1="0.3302" y1="0.762" x2="0.3302" y2="-0.762" width="0.3048" layer="21"/>
+<wire x1="1.27" y1="0" x2="0.3302" y2="0" width="0.1524" layer="51"/>
+<wire x1="-1.27" y1="0" x2="-0.3048" y2="0" width="0.1524" layer="51"/>
+<pad name="1" x="-1.27" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="1.27" y="0" drill="0.8128" shape="octagon"/>
+<text x="-1.778" y="1.397" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-1.778" y="-2.667" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C025-025X050">
+<description><b>CAPACITOR</b><p>
+grid 2.5 mm, outline 2.5 x 5 mm</description>
+<wire x1="-2.159" y1="1.27" x2="2.159" y2="1.27" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="-1.27" x2="-2.159" y2="-1.27" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="1.016" x2="2.413" y2="-1.016" width="0.1524" layer="21"/>
+<wire x1="-2.413" y1="1.016" x2="-2.413" y2="-1.016" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="1.27" x2="2.413" y2="1.016" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-2.413" y1="1.016" x2="-2.159" y2="1.27" width="0.1524" layer="21" curve="-90"/>
+<wire x1="2.159" y1="-1.27" x2="2.413" y2="-1.016" width="0.1524" layer="21" curve="90"/>
+<wire x1="-2.413" y1="-1.016" x2="-2.159" y2="-1.27" width="0.1524" layer="21" curve="90"/>
+<wire x1="0.762" y1="0" x2="0.381" y2="0" width="0.1524" layer="51"/>
+<wire x1="0.381" y1="0" x2="0.254" y2="0" width="0.1524" layer="21"/>
+<wire x1="0.254" y1="0" x2="0.254" y2="0.762" width="0.254" layer="21"/>
+<wire x1="0.254" y1="0" x2="0.254" y2="-0.762" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0.762" x2="-0.254" y2="0" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0" x2="-0.254" y2="-0.762" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0" x2="-0.381" y2="0" width="0.1524" layer="21"/>
+<wire x1="-0.381" y1="0" x2="-0.762" y2="0" width="0.1524" layer="51"/>
+<pad name="1" x="-1.27" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="1.27" y="0" drill="0.8128" shape="octagon"/>
+<text x="-2.286" y="1.524" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-2.286" y="-2.794" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C025-030X050">
+<description><b>CAPACITOR</b><p>
+grid 2.5 mm, outline 3 x 5 mm</description>
+<wire x1="-2.159" y1="1.524" x2="2.159" y2="1.524" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="-1.524" x2="-2.159" y2="-1.524" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="1.27" x2="2.413" y2="-1.27" width="0.1524" layer="21"/>
+<wire x1="-2.413" y1="1.27" x2="-2.413" y2="-1.27" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="1.524" x2="2.413" y2="1.27" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-2.413" y1="1.27" x2="-2.159" y2="1.524" width="0.1524" layer="21" curve="-90"/>
+<wire x1="2.159" y1="-1.524" x2="2.413" y2="-1.27" width="0.1524" layer="21" curve="90"/>
+<wire x1="-2.413" y1="-1.27" x2="-2.159" y2="-1.524" width="0.1524" layer="21" curve="90"/>
+<wire x1="0.762" y1="0" x2="0.381" y2="0" width="0.1524" layer="51"/>
+<wire x1="0.381" y1="0" x2="0.254" y2="0" width="0.1524" layer="21"/>
+<wire x1="0.254" y1="0" x2="0.254" y2="0.762" width="0.254" layer="21"/>
+<wire x1="0.254" y1="0" x2="0.254" y2="-0.762" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0.762" x2="-0.254" y2="0" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0" x2="-0.254" y2="-0.762" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0" x2="-0.381" y2="0" width="0.1524" layer="21"/>
+<wire x1="-0.381" y1="0" x2="-0.762" y2="0" width="0.1524" layer="51"/>
+<pad name="1" x="-1.27" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="1.27" y="0" drill="0.8128" shape="octagon"/>
+<text x="-2.286" y="1.905" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-2.286" y="-3.048" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C025-040X050">
+<description><b>CAPACITOR</b><p>
+grid 2.5 mm, outline 4 x 5 mm</description>
+<wire x1="-2.159" y1="1.905" x2="2.159" y2="1.905" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="-1.905" x2="-2.159" y2="-1.905" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="1.651" x2="2.413" y2="-1.651" width="0.1524" layer="21"/>
+<wire x1="-2.413" y1="1.651" x2="-2.413" y2="-1.651" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="1.905" x2="2.413" y2="1.651" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-2.413" y1="1.651" x2="-2.159" y2="1.905" width="0.1524" layer="21" curve="-90"/>
+<wire x1="2.159" y1="-1.905" x2="2.413" y2="-1.651" width="0.1524" layer="21" curve="90"/>
+<wire x1="-2.413" y1="-1.651" x2="-2.159" y2="-1.905" width="0.1524" layer="21" curve="90"/>
+<wire x1="0.762" y1="0" x2="0.381" y2="0" width="0.1524" layer="51"/>
+<wire x1="0.381" y1="0" x2="0.254" y2="0" width="0.1524" layer="21"/>
+<wire x1="0.254" y1="0" x2="0.254" y2="0.762" width="0.254" layer="21"/>
+<wire x1="0.254" y1="0" x2="0.254" y2="-0.762" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0.762" x2="-0.254" y2="0" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0" x2="-0.254" y2="-0.762" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0" x2="-0.381" y2="0" width="0.1524" layer="21"/>
+<wire x1="-0.381" y1="0" x2="-0.762" y2="0" width="0.1524" layer="51"/>
+<pad name="1" x="-1.27" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="1.27" y="0" drill="0.8128" shape="octagon"/>
+<text x="-2.286" y="2.159" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-2.286" y="-3.429" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C025-050X050">
+<description><b>CAPACITOR</b><p>
+grid 2.5 mm, outline 5 x 5 mm</description>
+<wire x1="-2.159" y1="2.286" x2="2.159" y2="2.286" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="-2.286" x2="-2.159" y2="-2.286" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="2.032" x2="2.413" y2="-2.032" width="0.1524" layer="21"/>
+<wire x1="-2.413" y1="2.032" x2="-2.413" y2="-2.032" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="2.286" x2="2.413" y2="2.032" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-2.413" y1="2.032" x2="-2.159" y2="2.286" width="0.1524" layer="21" curve="-90"/>
+<wire x1="2.159" y1="-2.286" x2="2.413" y2="-2.032" width="0.1524" layer="21" curve="90"/>
+<wire x1="-2.413" y1="-2.032" x2="-2.159" y2="-2.286" width="0.1524" layer="21" curve="90"/>
+<wire x1="0.762" y1="0" x2="0.381" y2="0" width="0.1524" layer="51"/>
+<wire x1="0.381" y1="0" x2="0.254" y2="0" width="0.1524" layer="21"/>
+<wire x1="0.254" y1="0" x2="0.254" y2="0.762" width="0.254" layer="21"/>
+<wire x1="0.254" y1="0" x2="0.254" y2="-0.762" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0.762" x2="-0.254" y2="0" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0" x2="-0.254" y2="-0.762" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0" x2="-0.381" y2="0" width="0.1524" layer="21"/>
+<wire x1="-0.381" y1="0" x2="-0.762" y2="0" width="0.1524" layer="51"/>
+<pad name="1" x="-1.27" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="1.27" y="0" drill="0.8128" shape="octagon"/>
+<text x="-2.286" y="2.54" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-2.286" y="-3.81" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C025-060X050">
+<description><b>CAPACITOR</b><p>
+grid 2.5 mm, outline 6 x 5 mm</description>
+<wire x1="-2.159" y1="2.794" x2="2.159" y2="2.794" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="-2.794" x2="-2.159" y2="-2.794" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="2.54" x2="2.413" y2="-2.54" width="0.1524" layer="21"/>
+<wire x1="-2.413" y1="2.54" x2="-2.413" y2="-2.54" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="2.794" x2="2.413" y2="2.54" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-2.413" y1="2.54" x2="-2.159" y2="2.794" width="0.1524" layer="21" curve="-90"/>
+<wire x1="2.159" y1="-2.794" x2="2.413" y2="-2.54" width="0.1524" layer="21" curve="90"/>
+<wire x1="-2.413" y1="-2.54" x2="-2.159" y2="-2.794" width="0.1524" layer="21" curve="90"/>
+<wire x1="0.762" y1="0" x2="0.381" y2="0" width="0.1524" layer="51"/>
+<wire x1="0.381" y1="0" x2="0.254" y2="0" width="0.1524" layer="21"/>
+<wire x1="0.254" y1="0" x2="0.254" y2="0.762" width="0.254" layer="21"/>
+<wire x1="0.254" y1="0" x2="0.254" y2="-0.762" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0.762" x2="-0.254" y2="0" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0" x2="-0.254" y2="-0.762" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0" x2="-0.381" y2="0" width="0.1524" layer="21"/>
+<wire x1="-0.381" y1="0" x2="-0.762" y2="0" width="0.1524" layer="51"/>
+<pad name="1" x="-1.27" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="1.27" y="0" drill="0.8128" shape="octagon"/>
+<text x="-2.286" y="3.048" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-2.032" y="-2.413" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C025_050-024X070">
+<description><b>CAPACITOR</b><p>
+grid 2.5 mm + 5 mm, outline 2.4 x 7 mm</description>
+<wire x1="-2.159" y1="-0.635" x2="-2.159" y2="0.635" width="0.1524" layer="51"/>
+<wire x1="-2.159" y1="0.635" x2="-1.651" y2="1.143" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-2.159" y1="-0.635" x2="-1.651" y2="-1.143" width="0.1524" layer="21" curve="90"/>
+<wire x1="1.651" y1="1.143" x2="-1.651" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="-0.635" x2="2.159" y2="0.635" width="0.1524" layer="51"/>
+<wire x1="1.651" y1="-1.143" x2="-1.651" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="1.651" y1="1.143" x2="2.159" y2="0.635" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-4.191" y1="-1.143" x2="-3.9624" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="-4.191" y1="1.143" x2="-3.9624" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="-4.699" y1="-0.635" x2="-4.191" y2="-1.143" width="0.1524" layer="21" curve="90"/>
+<wire x1="1.651" y1="-1.143" x2="2.159" y2="-0.635" width="0.1524" layer="21" curve="90"/>
+<wire x1="-4.699" y1="0.635" x2="-4.191" y2="1.143" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-4.699" y1="-0.635" x2="-4.699" y2="0.635" width="0.1524" layer="21"/>
+<wire x1="-3.429" y1="1.143" x2="-2.5654" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="-3.429" y1="-1.143" x2="-2.5654" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="-0.3048" y1="0.762" x2="-0.3048" y2="-0.762" width="0.3048" layer="21"/>
+<wire x1="0.3302" y1="0.762" x2="0.3302" y2="-0.762" width="0.3048" layer="21"/>
+<wire x1="1.27" y1="0" x2="0.3302" y2="0" width="0.1524" layer="51"/>
+<wire x1="-1.27" y1="0" x2="-0.3048" y2="0" width="0.1524" layer="51"/>
+<pad name="1" x="-3.81" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="-1.27" y="0" drill="0.8128" shape="octagon"/>
+<pad name="3" x="1.27" y="0" drill="0.8128" shape="octagon"/>
+<text x="-3.81" y="1.397" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-3.81" y="-2.667" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C025_050-025X075">
+<description><b>CAPACITOR</b><p>
+grid 2.5 + 5 mm, outline 2.5 x 7.5 mm</description>
+<wire x1="-2.159" y1="1.27" x2="2.159" y2="1.27" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="-1.27" x2="-2.159" y2="-1.27" width="0.1524" layer="21"/>
+<wire x1="-2.413" y1="1.016" x2="-2.413" y2="-1.016" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="1.27" x2="2.413" y2="1.016" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-2.413" y1="1.016" x2="-2.159" y2="1.27" width="0.1524" layer="21" curve="-90"/>
+<wire x1="2.159" y1="-1.27" x2="2.413" y2="-1.016" width="0.1524" layer="21" curve="90"/>
+<wire x1="-2.413" y1="-1.016" x2="-2.159" y2="-1.27" width="0.1524" layer="21" curve="90"/>
+<wire x1="0.381" y1="0" x2="0.254" y2="0" width="0.1524" layer="21"/>
+<wire x1="0.254" y1="0" x2="0.254" y2="0.762" width="0.254" layer="21"/>
+<wire x1="0.254" y1="0" x2="0.254" y2="-0.762" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0.762" x2="-0.254" y2="0" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0" x2="-0.254" y2="-0.762" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0" x2="-0.381" y2="0" width="0.1524" layer="21"/>
+<wire x1="-0.381" y1="0" x2="-0.762" y2="0" width="0.1524" layer="51"/>
+<wire x1="4.953" y1="1.016" x2="4.953" y2="-1.016" width="0.1524" layer="21"/>
+<wire x1="4.699" y1="1.27" x2="4.953" y2="1.016" width="0.1524" layer="21" curve="-90"/>
+<wire x1="4.699" y1="-1.27" x2="4.953" y2="-1.016" width="0.1524" layer="21" curve="90"/>
+<wire x1="2.794" y1="1.27" x2="4.699" y2="1.27" width="0.1524" layer="21"/>
+<wire x1="4.699" y1="-1.27" x2="2.794" y2="-1.27" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="1.016" x2="2.413" y2="0.762" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="-0.762" x2="2.413" y2="-1.016" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="0.254" x2="2.413" y2="-0.254" width="0.1524" layer="21"/>
+<wire x1="1.778" y1="0" x2="2.286" y2="0" width="0.1524" layer="51"/>
+<wire x1="2.286" y1="0" x2="2.794" y2="0" width="0.1524" layer="21"/>
+<wire x1="2.794" y1="0" x2="3.302" y2="0" width="0.1524" layer="51"/>
+<wire x1="0.762" y1="0" x2="0.381" y2="0" width="0.1524" layer="51"/>
+<pad name="1" x="-1.27" y="0" drill="0.8128" shape="octagon"/>
+<pad name="3" x="3.81" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="1.27" y="0" drill="0.8128" shape="octagon"/>
+<text x="-2.159" y="1.651" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-2.159" y="-2.794" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C025_050-035X075">
+<description><b>CAPACITOR</b><p>
+grid 2.5 + 5 mm, outline 3.5 x 7.5 mm</description>
+<wire x1="-2.159" y1="1.778" x2="2.159" y2="1.778" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="-1.778" x2="-2.159" y2="-1.778" width="0.1524" layer="21"/>
+<wire x1="-2.413" y1="1.524" x2="-2.413" y2="-1.524" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="1.778" x2="2.413" y2="1.524" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-2.413" y1="1.524" x2="-2.159" y2="1.778" width="0.1524" layer="21" curve="-90"/>
+<wire x1="2.159" y1="-1.778" x2="2.413" y2="-1.524" width="0.1524" layer="21" curve="90"/>
+<wire x1="-2.413" y1="-1.524" x2="-2.159" y2="-1.778" width="0.1524" layer="21" curve="90"/>
+<wire x1="0.381" y1="0" x2="0.254" y2="0" width="0.1524" layer="21"/>
+<wire x1="0.254" y1="0" x2="0.254" y2="0.762" width="0.254" layer="21"/>
+<wire x1="0.254" y1="0" x2="0.254" y2="-0.762" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0.762" x2="-0.254" y2="0" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0" x2="-0.254" y2="-0.762" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0" x2="-0.381" y2="0" width="0.1524" layer="21"/>
+<wire x1="-0.381" y1="0" x2="-0.762" y2="0" width="0.1524" layer="51"/>
+<wire x1="4.953" y1="1.524" x2="4.953" y2="-1.524" width="0.1524" layer="21"/>
+<wire x1="4.699" y1="1.778" x2="4.953" y2="1.524" width="0.1524" layer="21" curve="-90"/>
+<wire x1="4.699" y1="-1.778" x2="4.953" y2="-1.524" width="0.1524" layer="21" curve="90"/>
+<wire x1="2.794" y1="1.778" x2="4.699" y2="1.778" width="0.1524" layer="21"/>
+<wire x1="4.699" y1="-1.778" x2="2.794" y2="-1.778" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="1.524" x2="2.413" y2="1.016" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="-1.016" x2="2.413" y2="-1.524" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="0.508" x2="2.413" y2="-0.508" width="0.1524" layer="21"/>
+<wire x1="0.381" y1="0" x2="0.762" y2="0" width="0.1524" layer="51"/>
+<wire x1="2.286" y1="0" x2="2.794" y2="0" width="0.1524" layer="21"/>
+<wire x1="2.794" y1="0" x2="3.302" y2="0" width="0.1524" layer="51"/>
+<wire x1="2.286" y1="0" x2="1.778" y2="0" width="0.1524" layer="51"/>
+<pad name="1" x="-1.27" y="0" drill="0.8128" shape="octagon"/>
+<pad name="3" x="3.81" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="1.27" y="0" drill="0.8128" shape="octagon"/>
+<text x="-2.286" y="2.159" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-2.286" y="-3.302" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C025_050-045X075">
+<description><b>CAPACITOR</b><p>
+grid 2.5 + 5 mm, outline 4.5 x 7.5 mm</description>
+<wire x1="-2.159" y1="2.286" x2="2.159" y2="2.286" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="-2.286" x2="-2.159" y2="-2.286" width="0.1524" layer="21"/>
+<wire x1="-2.413" y1="2.032" x2="-2.413" y2="-2.032" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="2.286" x2="2.413" y2="2.032" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-2.413" y1="2.032" x2="-2.159" y2="2.286" width="0.1524" layer="21" curve="-90"/>
+<wire x1="2.159" y1="-2.286" x2="2.413" y2="-2.032" width="0.1524" layer="21" curve="90"/>
+<wire x1="-2.413" y1="-2.032" x2="-2.159" y2="-2.286" width="0.1524" layer="21" curve="90"/>
+<wire x1="0.381" y1="0" x2="0.254" y2="0" width="0.1524" layer="21"/>
+<wire x1="0.254" y1="0" x2="0.254" y2="0.762" width="0.254" layer="21"/>
+<wire x1="0.254" y1="0" x2="0.254" y2="-0.762" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0.762" x2="-0.254" y2="0" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0" x2="-0.254" y2="-0.762" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0" x2="-0.381" y2="0" width="0.1524" layer="21"/>
+<wire x1="-0.381" y1="0" x2="-0.762" y2="0" width="0.1524" layer="51"/>
+<wire x1="4.953" y1="2.032" x2="4.953" y2="-2.032" width="0.1524" layer="21"/>
+<wire x1="4.699" y1="2.286" x2="4.953" y2="2.032" width="0.1524" layer="21" curve="-90"/>
+<wire x1="4.699" y1="-2.286" x2="4.953" y2="-2.032" width="0.1524" layer="21" curve="90"/>
+<wire x1="2.794" y1="2.286" x2="4.699" y2="2.286" width="0.1524" layer="21"/>
+<wire x1="4.699" y1="-2.286" x2="2.794" y2="-2.286" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="2.032" x2="2.413" y2="1.397" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="-1.397" x2="2.413" y2="-2.032" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="0.762" x2="2.413" y2="-0.762" width="0.1524" layer="21"/>
+<wire x1="2.286" y1="0" x2="2.794" y2="0" width="0.1524" layer="21"/>
+<wire x1="2.794" y1="0" x2="3.302" y2="0" width="0.1524" layer="51"/>
+<wire x1="0.381" y1="0" x2="0.762" y2="0" width="0.1524" layer="51"/>
+<wire x1="2.286" y1="0" x2="1.778" y2="0" width="0.1524" layer="51"/>
+<pad name="1" x="-1.27" y="0" drill="0.8128" shape="octagon"/>
+<pad name="3" x="3.81" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="1.27" y="0" drill="0.8128" shape="octagon"/>
+<text x="-2.286" y="2.667" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-2.286" y="-3.81" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C025_050-055X075">
+<description><b>CAPACITOR</b><p>
+grid 2.5 + 5 mm, outline 5.5 x 7.5 mm</description>
+<wire x1="-2.159" y1="2.794" x2="2.159" y2="2.794" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="-2.794" x2="-2.159" y2="-2.794" width="0.1524" layer="21"/>
+<wire x1="-2.413" y1="2.54" x2="-2.413" y2="-2.54" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="2.794" x2="2.413" y2="2.54" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-2.413" y1="2.54" x2="-2.159" y2="2.794" width="0.1524" layer="21" curve="-90"/>
+<wire x1="2.159" y1="-2.794" x2="2.413" y2="-2.54" width="0.1524" layer="21" curve="90"/>
+<wire x1="-2.413" y1="-2.54" x2="-2.159" y2="-2.794" width="0.1524" layer="21" curve="90"/>
+<wire x1="0.381" y1="0" x2="0.254" y2="0" width="0.1524" layer="21"/>
+<wire x1="0.254" y1="0" x2="0.254" y2="0.762" width="0.254" layer="21"/>
+<wire x1="0.254" y1="0" x2="0.254" y2="-0.762" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0.762" x2="-0.254" y2="0" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0" x2="-0.254" y2="-0.762" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0" x2="-0.381" y2="0" width="0.1524" layer="21"/>
+<wire x1="-0.381" y1="0" x2="-0.762" y2="0" width="0.1524" layer="51"/>
+<wire x1="4.953" y1="2.54" x2="4.953" y2="-2.54" width="0.1524" layer="21"/>
+<wire x1="4.699" y1="2.794" x2="4.953" y2="2.54" width="0.1524" layer="21" curve="-90"/>
+<wire x1="4.699" y1="-2.794" x2="4.953" y2="-2.54" width="0.1524" layer="21" curve="90"/>
+<wire x1="2.794" y1="2.794" x2="4.699" y2="2.794" width="0.1524" layer="21"/>
+<wire x1="4.699" y1="-2.794" x2="2.794" y2="-2.794" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="2.54" x2="2.413" y2="2.032" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="-2.032" x2="2.413" y2="-2.54" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="0.762" x2="2.413" y2="-0.762" width="0.1524" layer="21"/>
+<wire x1="1.778" y1="0" x2="2.286" y2="0" width="0.1524" layer="51"/>
+<wire x1="2.286" y1="0" x2="2.794" y2="0" width="0.1524" layer="21"/>
+<wire x1="2.794" y1="0" x2="3.302" y2="0" width="0.1524" layer="51"/>
+<wire x1="0.381" y1="0" x2="0.762" y2="0" width="0.1524" layer="51"/>
+<pad name="1" x="-1.27" y="0" drill="0.8128" shape="octagon"/>
+<pad name="3" x="3.81" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="1.27" y="0" drill="0.8128" shape="octagon"/>
+<text x="-2.286" y="3.175" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-2.032" y="-2.286" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C050-024X044">
+<description><b>CAPACITOR</b><p>
+grid 5 mm, outline 2.4 x 4.4 mm</description>
+<wire x1="-2.159" y1="-0.635" x2="-2.159" y2="0.635" width="0.1524" layer="51"/>
+<wire x1="-2.159" y1="0.635" x2="-1.651" y2="1.143" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-2.159" y1="-0.635" x2="-1.651" y2="-1.143" width="0.1524" layer="21" curve="90"/>
+<wire x1="1.651" y1="1.143" x2="-1.651" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="-0.635" x2="2.159" y2="0.635" width="0.1524" layer="51"/>
+<wire x1="1.651" y1="-1.143" x2="-1.651" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="1.651" y1="1.143" x2="2.159" y2="0.635" width="0.1524" layer="21" curve="-90"/>
+<wire x1="1.651" y1="-1.143" x2="2.159" y2="-0.635" width="0.1524" layer="21" curve="90"/>
+<wire x1="-0.3048" y1="0.762" x2="-0.3048" y2="0" width="0.3048" layer="21"/>
+<wire x1="-0.3048" y1="0" x2="-0.3048" y2="-0.762" width="0.3048" layer="21"/>
+<wire x1="0.3302" y1="0.762" x2="0.3302" y2="0" width="0.3048" layer="21"/>
+<wire x1="0.3302" y1="0" x2="0.3302" y2="-0.762" width="0.3048" layer="21"/>
+<wire x1="1.27" y1="0" x2="0.3302" y2="0" width="0.1524" layer="21"/>
+<wire x1="-1.27" y1="0" x2="-0.3048" y2="0" width="0.1524" layer="21"/>
+<pad name="1" x="-2.54" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="2.54" y="0" drill="0.8128" shape="octagon"/>
+<text x="-2.159" y="1.397" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-2.159" y="-2.667" size="1.27" layer="27" ratio="10">>VALUE</text>
+<rectangle x1="2.159" y1="-0.381" x2="2.54" y2="0.381" layer="51"/>
+<rectangle x1="-2.54" y1="-0.381" x2="-2.159" y2="0.381" layer="51"/>
+</package>
+<package name="C050-025X075">
+<description><b>CAPACITOR</b><p>
+grid 5 mm, outline 2.5 x 7.5 mm</description>
+<wire x1="-0.3048" y1="0.635" x2="-0.3048" y2="0" width="0.3048" layer="21"/>
+<wire x1="-0.3048" y1="0" x2="-0.3048" y2="-0.635" width="0.3048" layer="21"/>
+<wire x1="-0.3048" y1="0" x2="-1.524" y2="0" width="0.1524" layer="21"/>
+<wire x1="0.3302" y1="0.635" x2="0.3302" y2="0" width="0.3048" layer="21"/>
+<wire x1="0.3302" y1="0" x2="0.3302" y2="-0.635" width="0.3048" layer="21"/>
+<wire x1="0.3302" y1="0" x2="1.524" y2="0" width="0.1524" layer="21"/>
+<wire x1="-3.683" y1="1.016" x2="-3.683" y2="-1.016" width="0.1524" layer="21"/>
+<wire x1="-3.429" y1="-1.27" x2="3.429" y2="-1.27" width="0.1524" layer="21"/>
+<wire x1="3.683" y1="-1.016" x2="3.683" y2="1.016" width="0.1524" layer="21"/>
+<wire x1="3.429" y1="1.27" x2="-3.429" y2="1.27" width="0.1524" layer="21"/>
+<wire x1="3.429" y1="1.27" x2="3.683" y2="1.016" width="0.1524" layer="21" curve="-90"/>
+<wire x1="3.429" y1="-1.27" x2="3.683" y2="-1.016" width="0.1524" layer="21" curve="90"/>
+<wire x1="-3.683" y1="-1.016" x2="-3.429" y2="-1.27" width="0.1524" layer="21" curve="90"/>
+<wire x1="-3.683" y1="1.016" x2="-3.429" y2="1.27" width="0.1524" layer="21" curve="-90"/>
+<pad name="1" x="-2.54" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="2.54" y="0" drill="0.8128" shape="octagon"/>
+<text x="-3.429" y="1.651" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-3.429" y="-2.794" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C050-045X075">
+<description><b>CAPACITOR</b><p>
+grid 5 mm, outline 4.5 x 7.5 mm</description>
+<wire x1="-0.3048" y1="0.635" x2="-0.3048" y2="0" width="0.3048" layer="21"/>
+<wire x1="-0.3048" y1="0" x2="-0.3048" y2="-0.635" width="0.3048" layer="21"/>
+<wire x1="-0.3048" y1="0" x2="-1.524" y2="0" width="0.1524" layer="21"/>
+<wire x1="0.3302" y1="0.635" x2="0.3302" y2="0" width="0.3048" layer="21"/>
+<wire x1="0.3302" y1="0" x2="0.3302" y2="-0.635" width="0.3048" layer="21"/>
+<wire x1="0.3302" y1="0" x2="1.524" y2="0" width="0.1524" layer="21"/>
+<wire x1="-3.683" y1="2.032" x2="-3.683" y2="-2.032" width="0.1524" layer="21"/>
+<wire x1="-3.429" y1="-2.286" x2="3.429" y2="-2.286" width="0.1524" layer="21"/>
+<wire x1="3.683" y1="-2.032" x2="3.683" y2="2.032" width="0.1524" layer="21"/>
+<wire x1="3.429" y1="2.286" x2="-3.429" y2="2.286" width="0.1524" layer="21"/>
+<wire x1="3.429" y1="2.286" x2="3.683" y2="2.032" width="0.1524" layer="21" curve="-90"/>
+<wire x1="3.429" y1="-2.286" x2="3.683" y2="-2.032" width="0.1524" layer="21" curve="90"/>
+<wire x1="-3.683" y1="-2.032" x2="-3.429" y2="-2.286" width="0.1524" layer="21" curve="90"/>
+<wire x1="-3.683" y1="2.032" x2="-3.429" y2="2.286" width="0.1524" layer="21" curve="-90"/>
+<pad name="1" x="-2.54" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="2.54" y="0" drill="0.8128" shape="octagon"/>
+<text x="-3.556" y="2.667" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-3.556" y="-3.81" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C050-030X075">
+<description><b>CAPACITOR</b><p>
+grid 5 mm, outline 3 x 7.5 mm</description>
+<wire x1="-0.3048" y1="0.635" x2="-0.3048" y2="0" width="0.3048" layer="21"/>
+<wire x1="-0.3048" y1="0" x2="-0.3048" y2="-0.635" width="0.3048" layer="21"/>
+<wire x1="-0.3048" y1="0" x2="-1.524" y2="0" width="0.1524" layer="21"/>
+<wire x1="0.3302" y1="0.635" x2="0.3302" y2="0" width="0.3048" layer="21"/>
+<wire x1="0.3302" y1="0" x2="0.3302" y2="-0.635" width="0.3048" layer="21"/>
+<wire x1="0.3302" y1="0" x2="1.524" y2="0" width="0.1524" layer="21"/>
+<wire x1="-3.683" y1="1.27" x2="-3.683" y2="-1.27" width="0.1524" layer="21"/>
+<wire x1="-3.429" y1="-1.524" x2="3.429" y2="-1.524" width="0.1524" layer="21"/>
+<wire x1="3.683" y1="-1.27" x2="3.683" y2="1.27" width="0.1524" layer="21"/>
+<wire x1="3.429" y1="1.524" x2="-3.429" y2="1.524" width="0.1524" layer="21"/>
+<wire x1="3.429" y1="1.524" x2="3.683" y2="1.27" width="0.1524" layer="21" curve="-90"/>
+<wire x1="3.429" y1="-1.524" x2="3.683" y2="-1.27" width="0.1524" layer="21" curve="90"/>
+<wire x1="-3.683" y1="-1.27" x2="-3.429" y2="-1.524" width="0.1524" layer="21" curve="90"/>
+<wire x1="-3.683" y1="1.27" x2="-3.429" y2="1.524" width="0.1524" layer="21" curve="-90"/>
+<pad name="1" x="-2.54" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="2.54" y="0" drill="0.8128" shape="octagon"/>
+<text x="-3.556" y="1.905" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-3.556" y="-3.048" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C050-050X075">
+<description><b>CAPACITOR</b><p>
+grid 5 mm, outline 5 x 7.5 mm</description>
+<wire x1="-0.3048" y1="0.635" x2="-0.3048" y2="0" width="0.3048" layer="21"/>
+<wire x1="-0.3048" y1="0" x2="-0.3048" y2="-0.635" width="0.3048" layer="21"/>
+<wire x1="-0.3048" y1="0" x2="-1.524" y2="0" width="0.1524" layer="21"/>
+<wire x1="0.3302" y1="0.635" x2="0.3302" y2="0" width="0.3048" layer="21"/>
+<wire x1="0.3302" y1="0" x2="0.3302" y2="-0.635" width="0.3048" layer="21"/>
+<wire x1="0.3302" y1="0" x2="1.524" y2="0" width="0.1524" layer="21"/>
+<wire x1="-3.683" y1="2.286" x2="-3.683" y2="-2.286" width="0.1524" layer="21"/>
+<wire x1="-3.429" y1="-2.54" x2="3.429" y2="-2.54" width="0.1524" layer="21"/>
+<wire x1="3.683" y1="-2.286" x2="3.683" y2="2.286" width="0.1524" layer="21"/>
+<wire x1="3.429" y1="2.54" x2="-3.429" y2="2.54" width="0.1524" layer="21"/>
+<wire x1="3.429" y1="2.54" x2="3.683" y2="2.286" width="0.1524" layer="21" curve="-90"/>
+<wire x1="3.429" y1="-2.54" x2="3.683" y2="-2.286" width="0.1524" layer="21" curve="90"/>
+<wire x1="-3.683" y1="-2.286" x2="-3.429" y2="-2.54" width="0.1524" layer="21" curve="90"/>
+<wire x1="-3.683" y1="2.286" x2="-3.429" y2="2.54" width="0.1524" layer="21" curve="-90"/>
+<pad name="1" x="-2.54" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="2.54" y="0" drill="0.8128" shape="octagon"/>
+<text x="-3.429" y="2.921" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-3.175" y="-2.159" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C050-055X075">
+<description><b>CAPACITOR</b><p>
+grid 5 mm, outline 5.5 x 7.5 mm</description>
+<wire x1="-0.3048" y1="0.635" x2="-0.3048" y2="0" width="0.3048" layer="21"/>
+<wire x1="-0.3048" y1="0" x2="-0.3048" y2="-0.635" width="0.3048" layer="21"/>
+<wire x1="-0.3048" y1="0" x2="-1.524" y2="0" width="0.1524" layer="21"/>
+<wire x1="0.3302" y1="0.635" x2="0.3302" y2="0" width="0.3048" layer="21"/>
+<wire x1="0.3302" y1="0" x2="0.3302" y2="-0.635" width="0.3048" layer="21"/>
+<wire x1="0.3302" y1="0" x2="1.524" y2="0" width="0.1524" layer="21"/>
+<wire x1="-3.683" y1="2.54" x2="-3.683" y2="-2.54" width="0.1524" layer="21"/>
+<wire x1="-3.429" y1="-2.794" x2="3.429" y2="-2.794" width="0.1524" layer="21"/>
+<wire x1="3.683" y1="-2.54" x2="3.683" y2="2.54" width="0.1524" layer="21"/>
+<wire x1="3.429" y1="2.794" x2="-3.429" y2="2.794" width="0.1524" layer="21"/>
+<wire x1="3.429" y1="2.794" x2="3.683" y2="2.54" width="0.1524" layer="21" curve="-90"/>
+<wire x1="3.429" y1="-2.794" x2="3.683" y2="-2.54" width="0.1524" layer="21" curve="90"/>
+<wire x1="-3.683" y1="-2.54" x2="-3.429" y2="-2.794" width="0.1524" layer="21" curve="90"/>
+<wire x1="-3.683" y1="2.54" x2="-3.429" y2="2.794" width="0.1524" layer="21" curve="-90"/>
+<pad name="1" x="-2.54" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="2.54" y="0" drill="0.8128" shape="octagon"/>
+<text x="-3.429" y="3.175" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-3.302" y="-2.286" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C050-075X075">
+<description><b>CAPACITOR</b><p>
+grid 5 mm, outline 7.5 x 7.5 mm</description>
+<wire x1="-1.524" y1="0" x2="-0.4572" y2="0" width="0.1524" layer="21"/>
+<wire x1="-0.4572" y1="0" x2="-0.4572" y2="0.762" width="0.4064" layer="21"/>
+<wire x1="-0.4572" y1="0" x2="-0.4572" y2="-0.762" width="0.4064" layer="21"/>
+<wire x1="0.4318" y1="0.762" x2="0.4318" y2="0" width="0.4064" layer="21"/>
+<wire x1="0.4318" y1="0" x2="1.524" y2="0" width="0.1524" layer="21"/>
+<wire x1="0.4318" y1="0" x2="0.4318" y2="-0.762" width="0.4064" layer="21"/>
+<wire x1="-3.683" y1="3.429" x2="-3.683" y2="-3.429" width="0.1524" layer="21"/>
+<wire x1="-3.429" y1="-3.683" x2="3.429" y2="-3.683" width="0.1524" layer="21"/>
+<wire x1="3.683" y1="-3.429" x2="3.683" y2="3.429" width="0.1524" layer="21"/>
+<wire x1="3.429" y1="3.683" x2="-3.429" y2="3.683" width="0.1524" layer="21"/>
+<wire x1="3.429" y1="3.683" x2="3.683" y2="3.429" width="0.1524" layer="21" curve="-90"/>
+<wire x1="3.429" y1="-3.683" x2="3.683" y2="-3.429" width="0.1524" layer="21" curve="90"/>
+<wire x1="-3.683" y1="-3.429" x2="-3.429" y2="-3.683" width="0.1524" layer="21" curve="90"/>
+<wire x1="-3.683" y1="3.429" x2="-3.429" y2="3.683" width="0.1524" layer="21" curve="-90"/>
+<pad name="1" x="-2.54" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="2.54" y="0" drill="0.8128" shape="octagon"/>
+<text x="-3.429" y="4.064" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-3.175" y="-2.921" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C050H075X075">
+<description><b>CAPACITOR</b><p>
+Horizontal, grid 5 mm, outline 7.5 x 7.5 mm</description>
+<wire x1="-3.683" y1="7.112" x2="-3.683" y2="0.508" width="0.1524" layer="21"/>
+<wire x1="-3.683" y1="0.508" x2="-3.302" y2="0.508" width="0.1524" layer="21"/>
+<wire x1="-3.302" y1="0.508" x2="-1.778" y2="0.508" width="0.1524" layer="51"/>
+<wire x1="-1.778" y1="0.508" x2="1.778" y2="0.508" width="0.1524" layer="21"/>
+<wire x1="1.778" y1="0.508" x2="3.302" y2="0.508" width="0.1524" layer="51"/>
+<wire x1="3.302" y1="0.508" x2="3.683" y2="0.508" width="0.1524" layer="21"/>
+<wire x1="3.683" y1="0.508" x2="3.683" y2="7.112" width="0.1524" layer="21"/>
+<wire x1="3.175" y1="7.62" x2="-3.175" y2="7.62" width="0.1524" layer="21"/>
+<wire x1="-0.3048" y1="2.413" x2="-0.3048" y2="1.778" width="0.3048" layer="21"/>
+<wire x1="-0.3048" y1="1.778" x2="-0.3048" y2="1.143" width="0.3048" layer="21"/>
+<wire x1="-0.3048" y1="1.778" x2="-1.651" y2="1.778" width="0.1524" layer="21"/>
+<wire x1="0.3302" y1="2.413" x2="0.3302" y2="1.778" width="0.3048" layer="21"/>
+<wire x1="0.3302" y1="1.778" x2="0.3302" y2="1.143" width="0.3048" layer="21"/>
+<wire x1="0.3302" y1="1.778" x2="1.651" y2="1.778" width="0.1524" layer="21"/>
+<wire x1="-3.683" y1="7.112" x2="-3.175" y2="7.62" width="0.1524" layer="21" curve="-90"/>
+<wire x1="3.175" y1="7.62" x2="3.683" y2="7.112" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-2.54" y1="0" x2="-2.54" y2="0.254" width="0.508" layer="51"/>
+<wire x1="2.54" y1="0" x2="2.54" y2="0.254" width="0.508" layer="51"/>
+<pad name="1" x="-2.54" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="2.54" y="0" drill="0.8128" shape="octagon"/>
+<text x="-3.302" y="8.001" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-3.175" y="3.175" size="1.27" layer="27" ratio="10">>VALUE</text>
+<rectangle x1="-2.794" y1="0.127" x2="-2.286" y2="0.508" layer="51"/>
+<rectangle x1="2.286" y1="0.127" x2="2.794" y2="0.508" layer="51"/>
+</package>
+<package name="C075-032X103">
+<description><b>CAPACITOR</b><p>
+grid 7.5 mm, outline 3.2 x 10.3 mm</description>
+<wire x1="4.826" y1="1.524" x2="-4.826" y2="1.524" width="0.1524" layer="21"/>
+<wire x1="-5.08" y1="1.27" x2="-5.08" y2="-1.27" width="0.1524" layer="21"/>
+<wire x1="-4.826" y1="-1.524" x2="4.826" y2="-1.524" width="0.1524" layer="21"/>
+<wire x1="5.08" y1="-1.27" x2="5.08" y2="1.27" width="0.1524" layer="21"/>
+<wire x1="4.826" y1="1.524" x2="5.08" y2="1.27" width="0.1524" layer="21" curve="-90"/>
+<wire x1="4.826" y1="-1.524" x2="5.08" y2="-1.27" width="0.1524" layer="21" curve="90"/>
+<wire x1="-5.08" y1="-1.27" x2="-4.826" y2="-1.524" width="0.1524" layer="21" curve="90"/>
+<wire x1="-5.08" y1="1.27" x2="-4.826" y2="1.524" width="0.1524" layer="21" curve="-90"/>
+<wire x1="0.508" y1="0" x2="2.54" y2="0" width="0.1524" layer="21"/>
+<wire x1="-2.54" y1="0" x2="-0.508" y2="0" width="0.1524" layer="21"/>
+<wire x1="-0.508" y1="0.889" x2="-0.508" y2="0" width="0.4064" layer="21"/>
+<wire x1="-0.508" y1="0" x2="-0.508" y2="-0.889" width="0.4064" layer="21"/>
+<wire x1="0.508" y1="0.889" x2="0.508" y2="0" width="0.4064" layer="21"/>
+<wire x1="0.508" y1="0" x2="0.508" y2="-0.889" width="0.4064" layer="21"/>
+<pad name="1" x="-3.81" y="0" drill="0.9144" shape="octagon"/>
+<pad name="2" x="3.81" y="0" drill="0.9144" shape="octagon"/>
+<text x="-4.826" y="1.905" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-4.826" y="-3.048" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C075-042X103">
+<description><b>CAPACITOR</b><p>
+grid 7.5 mm, outline 4.2 x 10.3 mm</description>
+<wire x1="4.826" y1="2.032" x2="-4.826" y2="2.032" width="0.1524" layer="21"/>
+<wire x1="-5.08" y1="1.778" x2="-5.08" y2="-1.778" width="0.1524" layer="21"/>
+<wire x1="-4.826" y1="-2.032" x2="4.826" y2="-2.032" width="0.1524" layer="21"/>
+<wire x1="5.08" y1="-1.778" x2="5.08" y2="1.778" width="0.1524" layer="21"/>
+<wire x1="4.826" y1="2.032" x2="5.08" y2="1.778" width="0.1524" layer="21" curve="-90"/>
+<wire x1="4.826" y1="-2.032" x2="5.08" y2="-1.778" width="0.1524" layer="21" curve="90"/>
+<wire x1="-5.08" y1="-1.778" x2="-4.826" y2="-2.032" width="0.1524" layer="21" curve="90"/>
+<wire x1="-5.08" y1="1.778" x2="-4.826" y2="2.032" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-1.27" y1="0" x2="2.667" y2="0" width="0.1524" layer="21"/>
+<wire x1="-2.667" y1="0" x2="-2.159" y2="0" width="0.1524" layer="21"/>
+<wire x1="-2.159" y1="1.27" x2="-2.159" y2="0" width="0.4064" layer="21"/>
+<wire x1="-2.159" y1="0" x2="-2.159" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-1.27" y1="1.27" x2="-1.27" y2="0" width="0.4064" layer="21"/>
+<wire x1="-1.27" y1="0" x2="-1.27" y2="-1.27" width="0.4064" layer="21"/>
+<pad name="1" x="-3.81" y="0" drill="0.9144" shape="octagon"/>
+<pad name="2" x="3.81" y="0" drill="0.9144" shape="octagon"/>
+<text x="-4.699" y="2.413" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-0.635" y="-1.651" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C075-052X106">
+<description><b>CAPACITOR</b><p>
+grid 7.5 mm, outline 5.2 x 10.6 mm</description>
+<wire x1="4.953" y1="2.54" x2="-4.953" y2="2.54" width="0.1524" layer="21"/>
+<wire x1="-5.207" y1="2.286" x2="-5.207" y2="-2.286" width="0.1524" layer="21"/>
+<wire x1="-4.953" y1="-2.54" x2="4.953" y2="-2.54" width="0.1524" layer="21"/>
+<wire x1="5.207" y1="-2.286" x2="5.207" y2="2.286" width="0.1524" layer="21"/>
+<wire x1="4.953" y1="2.54" x2="5.207" y2="2.286" width="0.1524" layer="21" curve="-90"/>
+<wire x1="4.953" y1="-2.54" x2="5.207" y2="-2.286" width="0.1524" layer="21" curve="90"/>
+<wire x1="-5.207" y1="-2.286" x2="-4.953" y2="-2.54" width="0.1524" layer="21" curve="90"/>
+<wire x1="-5.207" y1="2.286" x2="-4.953" y2="2.54" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-1.27" y1="0" x2="2.667" y2="0" width="0.1524" layer="21"/>
+<wire x1="-2.667" y1="0" x2="-2.159" y2="0" width="0.1524" layer="21"/>
+<wire x1="-2.159" y1="1.27" x2="-2.159" y2="0" width="0.4064" layer="21"/>
+<wire x1="-2.159" y1="0" x2="-2.159" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-1.27" y1="1.27" x2="-1.27" y2="0" width="0.4064" layer="21"/>
+<wire x1="-1.27" y1="0" x2="-1.27" y2="-1.27" width="0.4064" layer="21"/>
+<pad name="1" x="-3.81" y="0" drill="0.9144" shape="octagon"/>
+<pad name="2" x="3.81" y="0" drill="0.9144" shape="octagon"/>
+<text x="-4.826" y="2.921" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-0.635" y="-2.032" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C102-043X133">
+<description><b>CAPACITOR</b><p>
+grid 10.2 mm, outline 4.3 x 13.3 mm</description>
+<wire x1="-3.175" y1="1.27" x2="-3.175" y2="0" width="0.4064" layer="21"/>
+<wire x1="-2.286" y1="1.27" x2="-2.286" y2="0" width="0.4064" layer="21"/>
+<wire x1="3.81" y1="0" x2="-2.286" y2="0" width="0.1524" layer="21"/>
+<wire x1="-2.286" y1="0" x2="-2.286" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-3.81" y1="0" x2="-3.175" y2="0" width="0.1524" layer="21"/>
+<wire x1="-3.175" y1="0" x2="-3.175" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-6.096" y1="2.032" x2="6.096" y2="2.032" width="0.1524" layer="21"/>
+<wire x1="6.604" y1="1.524" x2="6.604" y2="-1.524" width="0.1524" layer="21"/>
+<wire x1="6.096" y1="-2.032" x2="-6.096" y2="-2.032" width="0.1524" layer="21"/>
+<wire x1="-6.604" y1="-1.524" x2="-6.604" y2="1.524" width="0.1524" layer="21"/>
+<wire x1="6.096" y1="2.032" x2="6.604" y2="1.524" width="0.1524" layer="21" curve="-90"/>
+<wire x1="6.096" y1="-2.032" x2="6.604" y2="-1.524" width="0.1524" layer="21" curve="90"/>
+<wire x1="-6.604" y1="-1.524" x2="-6.096" y2="-2.032" width="0.1524" layer="21" curve="90"/>
+<wire x1="-6.604" y1="1.524" x2="-6.096" y2="2.032" width="0.1524" layer="21" curve="-90"/>
+<pad name="1" x="-5.08" y="0" drill="1.016" shape="octagon"/>
+<pad name="2" x="5.08" y="0" drill="1.016" shape="octagon"/>
+<text x="-6.096" y="2.413" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-1.524" y="-1.651" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C102-054X133">
+<description><b>CAPACITOR</b><p>
+grid 10.2 mm, outline 5.4 x 13.3 mm</description>
+<wire x1="-3.175" y1="1.27" x2="-3.175" y2="0" width="0.4064" layer="21"/>
+<wire x1="-2.286" y1="1.27" x2="-2.286" y2="0" width="0.4064" layer="21"/>
+<wire x1="3.81" y1="0" x2="-2.286" y2="0" width="0.1524" layer="21"/>
+<wire x1="-2.286" y1="0" x2="-2.286" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-3.81" y1="0" x2="-3.175" y2="0" width="0.1524" layer="21"/>
+<wire x1="-3.175" y1="0" x2="-3.175" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-6.096" y1="2.54" x2="6.096" y2="2.54" width="0.1524" layer="21"/>
+<wire x1="6.604" y1="2.032" x2="6.604" y2="-2.032" width="0.1524" layer="21"/>
+<wire x1="6.096" y1="-2.54" x2="-6.096" y2="-2.54" width="0.1524" layer="21"/>
+<wire x1="-6.604" y1="-2.032" x2="-6.604" y2="2.032" width="0.1524" layer="21"/>
+<wire x1="6.096" y1="2.54" x2="6.604" y2="2.032" width="0.1524" layer="21" curve="-90"/>
+<wire x1="6.096" y1="-2.54" x2="6.604" y2="-2.032" width="0.1524" layer="21" curve="90"/>
+<wire x1="-6.604" y1="-2.032" x2="-6.096" y2="-2.54" width="0.1524" layer="21" curve="90"/>
+<wire x1="-6.604" y1="2.032" x2="-6.096" y2="2.54" width="0.1524" layer="21" curve="-90"/>
+<pad name="1" x="-5.08" y="0" drill="1.016" shape="octagon"/>
+<pad name="2" x="5.08" y="0" drill="1.016" shape="octagon"/>
+<text x="-6.096" y="2.921" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-1.524" y="-1.905" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C102-064X133">
+<description><b>CAPACITOR</b><p>
+grid 10.2 mm, outline 6.4 x 13.3 mm</description>
+<wire x1="-3.175" y1="1.27" x2="-3.175" y2="0" width="0.4064" layer="21"/>
+<wire x1="-2.286" y1="1.27" x2="-2.286" y2="0" width="0.4064" layer="21"/>
+<wire x1="3.81" y1="0" x2="-2.286" y2="0" width="0.1524" layer="21"/>
+<wire x1="-2.286" y1="0" x2="-2.286" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-3.81" y1="0" x2="-3.175" y2="0" width="0.1524" layer="21"/>
+<wire x1="-3.175" y1="0" x2="-3.175" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-6.096" y1="3.048" x2="6.096" y2="3.048" width="0.1524" layer="21"/>
+<wire x1="6.604" y1="2.54" x2="6.604" y2="-2.54" width="0.1524" layer="21"/>
+<wire x1="6.096" y1="-3.048" x2="-6.096" y2="-3.048" width="0.1524" layer="21"/>
+<wire x1="-6.604" y1="-2.54" x2="-6.604" y2="2.54" width="0.1524" layer="21"/>
+<wire x1="6.096" y1="3.048" x2="6.604" y2="2.54" width="0.1524" layer="21" curve="-90"/>
+<wire x1="6.096" y1="-3.048" x2="6.604" y2="-2.54" width="0.1524" layer="21" curve="90"/>
+<wire x1="-6.604" y1="-2.54" x2="-6.096" y2="-3.048" width="0.1524" layer="21" curve="90"/>
+<wire x1="-6.604" y1="2.54" x2="-6.096" y2="3.048" width="0.1524" layer="21" curve="-90"/>
+<pad name="1" x="-5.08" y="0" drill="1.016" shape="octagon"/>
+<pad name="2" x="5.08" y="0" drill="1.016" shape="octagon"/>
+<text x="-6.096" y="3.429" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-1.524" y="-2.032" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C102_152-062X184">
+<description><b>CAPACITOR</b><p>
+grid 10.2 mm + 15.2 mm, outline 6.2 x 18.4 mm</description>
+<wire x1="-2.286" y1="1.27" x2="-2.286" y2="0" width="0.4064" layer="21"/>
+<wire x1="-2.286" y1="0" x2="-2.286" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-3.175" y1="1.27" x2="-3.175" y2="0" width="0.4064" layer="21"/>
+<wire x1="-3.175" y1="0" x2="-3.175" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-3.683" y1="0" x2="-3.175" y2="0" width="0.1524" layer="21"/>
+<wire x1="-2.286" y1="0" x2="3.683" y2="0" width="0.1524" layer="21"/>
+<wire x1="6.477" y1="0" x2="8.636" y2="0" width="0.1524" layer="21"/>
+<wire x1="-6.096" y1="3.048" x2="6.223" y2="3.048" width="0.1524" layer="21"/>
+<wire x1="6.223" y1="-3.048" x2="-6.096" y2="-3.048" width="0.1524" layer="21"/>
+<wire x1="-6.604" y1="-2.54" x2="-6.604" y2="2.54" width="0.1524" layer="21"/>
+<wire x1="6.223" y1="3.048" x2="6.731" y2="2.54" width="0.1524" layer="21" curve="-90"/>
+<wire x1="6.223" y1="-3.048" x2="6.731" y2="-2.54" width="0.1524" layer="21" curve="90"/>
+<wire x1="-6.604" y1="-2.54" x2="-6.096" y2="-3.048" width="0.1524" layer="21" curve="90"/>
+<wire x1="-6.604" y1="2.54" x2="-6.096" y2="3.048" width="0.1524" layer="21" curve="-90"/>
+<wire x1="6.731" y1="2.54" x2="6.731" y2="-2.54" width="0.1524" layer="21"/>
+<wire x1="11.176" y1="3.048" x2="11.684" y2="2.54" width="0.1524" layer="21" curve="-90"/>
+<wire x1="11.176" y1="-3.048" x2="11.684" y2="-2.54" width="0.1524" layer="21" curve="90"/>
+<wire x1="11.176" y1="-3.048" x2="7.112" y2="-3.048" width="0.1524" layer="21"/>
+<wire x1="7.112" y1="3.048" x2="11.176" y2="3.048" width="0.1524" layer="21"/>
+<wire x1="11.684" y1="2.54" x2="11.684" y2="-2.54" width="0.1524" layer="21"/>
+<pad name="1" x="-5.08" y="0" drill="1.016" shape="octagon"/>
+<pad name="2" x="5.08" y="0" drill="1.016" shape="octagon"/>
+<pad name="3" x="10.033" y="0" drill="1.016" shape="octagon"/>
+<text x="-5.969" y="3.429" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-1.524" y="-2.286" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C150-054X183">
+<description><b>CAPACITOR</b><p>
+grid 15 mm, outline 5.4 x 18.3 mm</description>
+<wire x1="-5.08" y1="1.27" x2="-5.08" y2="0" width="0.4064" layer="21"/>
+<wire x1="-5.08" y1="0" x2="-5.08" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-4.191" y1="1.27" x2="-4.191" y2="0" width="0.4064" layer="21"/>
+<wire x1="-4.191" y1="0" x2="-4.191" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-4.191" y1="0" x2="6.096" y2="0" width="0.1524" layer="21"/>
+<wire x1="-5.08" y1="0" x2="-6.096" y2="0" width="0.1524" layer="21"/>
+<wire x1="9.017" y1="2.032" x2="9.017" y2="-2.032" width="0.1524" layer="21"/>
+<wire x1="8.509" y1="-2.54" x2="-8.509" y2="-2.54" width="0.1524" layer="21"/>
+<wire x1="-9.017" y1="-2.032" x2="-9.017" y2="2.032" width="0.1524" layer="21"/>
+<wire x1="-8.509" y1="2.54" x2="8.509" y2="2.54" width="0.1524" layer="21"/>
+<wire x1="8.509" y1="2.54" x2="9.017" y2="2.032" width="0.1524" layer="21" curve="-90"/>
+<wire x1="8.509" y1="-2.54" x2="9.017" y2="-2.032" width="0.1524" layer="21" curve="90"/>
+<wire x1="-9.017" y1="-2.032" x2="-8.509" y2="-2.54" width="0.1524" layer="21" curve="90"/>
+<wire x1="-9.017" y1="2.032" x2="-8.509" y2="2.54" width="0.1524" layer="21" curve="-90"/>
+<pad name="1" x="-7.493" y="0" drill="1.016" shape="octagon"/>
+<pad name="2" x="7.493" y="0" drill="1.016" shape="octagon"/>
+<text x="-8.382" y="2.921" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-3.429" y="-2.032" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C150-064X183">
+<description><b>CAPACITOR</b><p>
+grid 15 mm, outline 6.4 x 18.3 mm</description>
+<wire x1="-5.08" y1="1.27" x2="-5.08" y2="0" width="0.4064" layer="21"/>
+<wire x1="-5.08" y1="0" x2="-5.08" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-4.191" y1="1.27" x2="-4.191" y2="0" width="0.4064" layer="21"/>
+<wire x1="-4.191" y1="0" x2="-4.191" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-4.191" y1="0" x2="6.096" y2="0" width="0.1524" layer="21"/>
+<wire x1="-5.08" y1="0" x2="-6.096" y2="0" width="0.1524" layer="21"/>
+<wire x1="9.017" y1="2.54" x2="9.017" y2="-2.54" width="0.1524" layer="21"/>
+<wire x1="8.509" y1="-3.048" x2="-8.509" y2="-3.048" width="0.1524" layer="21"/>
+<wire x1="-9.017" y1="-2.54" x2="-9.017" y2="2.54" width="0.1524" layer="21"/>
+<wire x1="-8.509" y1="3.048" x2="8.509" y2="3.048" width="0.1524" layer="21"/>
+<wire x1="8.509" y1="3.048" x2="9.017" y2="2.54" width="0.1524" layer="21" curve="-90"/>
+<wire x1="8.509" y1="-3.048" x2="9.017" y2="-2.54" width="0.1524" layer="21" curve="90"/>
+<wire x1="-9.017" y1="-2.54" x2="-8.509" y2="-3.048" width="0.1524" layer="21" curve="90"/>
+<wire x1="-9.017" y1="2.54" x2="-8.509" y2="3.048" width="0.1524" layer="21" curve="-90"/>
+<pad name="1" x="-7.493" y="0" drill="1.016" shape="octagon"/>
+<pad name="2" x="7.493" y="0" drill="1.016" shape="octagon"/>
+<text x="-8.509" y="3.429" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-3.429" y="-2.032" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C150-072X183">
+<description><b>CAPACITOR</b><p>
+grid 15 mm, outline 7.2 x 18.3 mm</description>
+<wire x1="-5.08" y1="1.27" x2="-5.08" y2="0" width="0.4064" layer="21"/>
+<wire x1="-5.08" y1="0" x2="-5.08" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-4.191" y1="1.27" x2="-4.191" y2="0" width="0.4064" layer="21"/>
+<wire x1="-4.191" y1="0" x2="-4.191" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-4.191" y1="0" x2="6.096" y2="0" width="0.1524" layer="21"/>
+<wire x1="-5.08" y1="0" x2="-6.096" y2="0" width="0.1524" layer="21"/>
+<wire x1="9.017" y1="3.048" x2="9.017" y2="-3.048" width="0.1524" layer="21"/>
+<wire x1="8.509" y1="-3.556" x2="-8.509" y2="-3.556" width="0.1524" layer="21"/>
+<wire x1="-9.017" y1="-3.048" x2="-9.017" y2="3.048" width="0.1524" layer="21"/>
+<wire x1="-8.509" y1="3.556" x2="8.509" y2="3.556" width="0.1524" layer="21"/>
+<wire x1="8.509" y1="3.556" x2="9.017" y2="3.048" width="0.1524" layer="21" curve="-90"/>
+<wire x1="8.509" y1="-3.556" x2="9.017" y2="-3.048" width="0.1524" layer="21" curve="90"/>
+<wire x1="-9.017" y1="-3.048" x2="-8.509" y2="-3.556" width="0.1524" layer="21" curve="90"/>
+<wire x1="-9.017" y1="3.048" x2="-8.509" y2="3.556" width="0.1524" layer="21" curve="-90"/>
+<pad name="1" x="-7.493" y="0" drill="1.016" shape="octagon"/>
+<pad name="2" x="7.493" y="0" drill="1.016" shape="octagon"/>
+<text x="-8.509" y="3.937" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-3.429" y="-2.286" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C150-084X183">
+<description><b>CAPACITOR</b><p>
+grid 15 mm, outline 8.4 x 18.3 mm</description>
+<wire x1="-5.08" y1="1.27" x2="-5.08" y2="0" width="0.4064" layer="21"/>
+<wire x1="-5.08" y1="0" x2="-5.08" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-4.191" y1="1.27" x2="-4.191" y2="0" width="0.4064" layer="21"/>
+<wire x1="-4.191" y1="0" x2="-4.191" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-4.191" y1="0" x2="6.096" y2="0" width="0.1524" layer="21"/>
+<wire x1="-5.08" y1="0" x2="-6.096" y2="0" width="0.1524" layer="21"/>
+<wire x1="9.017" y1="3.556" x2="9.017" y2="-3.556" width="0.1524" layer="21"/>
+<wire x1="8.509" y1="-4.064" x2="-8.509" y2="-4.064" width="0.1524" layer="21"/>
+<wire x1="-9.017" y1="-3.556" x2="-9.017" y2="3.556" width="0.1524" layer="21"/>
+<wire x1="-8.509" y1="4.064" x2="8.509" y2="4.064" width="0.1524" layer="21"/>
+<wire x1="8.509" y1="4.064" x2="9.017" y2="3.556" width="0.1524" layer="21" curve="-90"/>
+<wire x1="8.509" y1="-4.064" x2="9.017" y2="-3.556" width="0.1524" layer="21" curve="90"/>
+<wire x1="-9.017" y1="-3.556" x2="-8.509" y2="-4.064" width="0.1524" layer="21" curve="90"/>
+<wire x1="-9.017" y1="3.556" x2="-8.509" y2="4.064" width="0.1524" layer="21" curve="-90"/>
+<pad name="1" x="-7.493" y="0" drill="1.016" shape="octagon"/>
+<pad name="2" x="7.493" y="0" drill="1.016" shape="octagon"/>
+<text x="-8.509" y="4.445" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-3.429" y="-2.54" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C150-091X182">
+<description><b>CAPACITOR</b><p>
+grid 15 mm, outline 9.1 x 18.2 mm</description>
+<wire x1="-5.08" y1="1.27" x2="-5.08" y2="0" width="0.4064" layer="21"/>
+<wire x1="-5.08" y1="0" x2="-5.08" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-4.191" y1="1.27" x2="-4.191" y2="0" width="0.4064" layer="21"/>
+<wire x1="-4.191" y1="0" x2="-4.191" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-4.191" y1="0" x2="6.096" y2="0" width="0.1524" layer="21"/>
+<wire x1="-5.08" y1="0" x2="-6.096" y2="0" width="0.1524" layer="21"/>
+<wire x1="9.017" y1="3.937" x2="9.017" y2="-3.937" width="0.1524" layer="21"/>
+<wire x1="8.509" y1="-4.445" x2="-8.509" y2="-4.445" width="0.1524" layer="21"/>
+<wire x1="-9.017" y1="-3.937" x2="-9.017" y2="3.937" width="0.1524" layer="21"/>
+<wire x1="-8.509" y1="4.445" x2="8.509" y2="4.445" width="0.1524" layer="21"/>
+<wire x1="8.509" y1="4.445" x2="9.017" y2="3.937" width="0.1524" layer="21" curve="-90"/>
+<wire x1="8.509" y1="-4.445" x2="9.017" y2="-3.937" width="0.1524" layer="21" curve="90"/>
+<wire x1="-9.017" y1="-3.937" x2="-8.509" y2="-4.445" width="0.1524" layer="21" curve="90"/>
+<wire x1="-9.017" y1="3.937" x2="-8.509" y2="4.445" width="0.1524" layer="21" curve="-90"/>
+<pad name="1" x="-7.493" y="0" drill="1.016" shape="octagon"/>
+<pad name="2" x="7.493" y="0" drill="1.016" shape="octagon"/>
+<text x="-8.509" y="4.826" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-3.429" y="-2.54" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C225-062X268">
+<description><b>CAPACITOR</b><p>
+grid 22.5 mm, outline 6.2 x 26.8 mm</description>
+<wire x1="-12.827" y1="3.048" x2="12.827" y2="3.048" width="0.1524" layer="21"/>
+<wire x1="13.335" y1="2.54" x2="13.335" y2="-2.54" width="0.1524" layer="21"/>
+<wire x1="12.827" y1="-3.048" x2="-12.827" y2="-3.048" width="0.1524" layer="21"/>
+<wire x1="-13.335" y1="-2.54" x2="-13.335" y2="2.54" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="1.905" x2="-6.731" y2="0" width="0.4064" layer="21"/>
+<wire x1="-6.731" y1="0" x2="-6.731" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="1.905" x2="-7.62" y2="0" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="0" x2="-7.62" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="12.827" y1="3.048" x2="13.335" y2="2.54" width="0.1524" layer="21" curve="-90"/>
+<wire x1="12.827" y1="-3.048" x2="13.335" y2="-2.54" width="0.1524" layer="21" curve="90"/>
+<wire x1="-13.335" y1="-2.54" x2="-12.827" y2="-3.048" width="0.1524" layer="21" curve="90"/>
+<wire x1="-13.335" y1="2.54" x2="-12.827" y2="3.048" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-9.652" y1="0" x2="-7.62" y2="0" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="0" x2="9.652" y2="0" width="0.1524" layer="21"/>
+<pad name="1" x="-11.303" y="0" drill="1.016" shape="octagon"/>
+<pad name="2" x="11.303" y="0" drill="1.016" shape="octagon"/>
+<text x="-12.7" y="3.429" size="1.778" layer="25" ratio="10">>NAME</text>
+<text x="-5.08" y="-2.54" size="1.778" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C225-074X268">
+<description><b>CAPACITOR</b><p>
+grid 22.5 mm, outline 7.4 x 26.8 mm</description>
+<wire x1="-12.827" y1="3.556" x2="12.827" y2="3.556" width="0.1524" layer="21"/>
+<wire x1="13.335" y1="3.048" x2="13.335" y2="-3.048" width="0.1524" layer="21"/>
+<wire x1="12.827" y1="-3.556" x2="-12.827" y2="-3.556" width="0.1524" layer="21"/>
+<wire x1="-13.335" y1="-3.048" x2="-13.335" y2="3.048" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="1.905" x2="-6.731" y2="0" width="0.4064" layer="21"/>
+<wire x1="-6.731" y1="0" x2="-6.731" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="1.905" x2="-7.62" y2="0" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="0" x2="-7.62" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="12.827" y1="3.556" x2="13.335" y2="3.048" width="0.1524" layer="21" curve="-90"/>
+<wire x1="12.827" y1="-3.556" x2="13.335" y2="-3.048" width="0.1524" layer="21" curve="90"/>
+<wire x1="-13.335" y1="-3.048" x2="-12.827" y2="-3.556" width="0.1524" layer="21" curve="90"/>
+<wire x1="-13.335" y1="3.048" x2="-12.827" y2="3.556" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-9.652" y1="0" x2="-7.62" y2="0" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="0" x2="9.652" y2="0" width="0.1524" layer="21"/>
+<pad name="1" x="-11.303" y="0" drill="1.016" shape="octagon"/>
+<pad name="2" x="11.303" y="0" drill="1.016" shape="octagon"/>
+<text x="-12.827" y="3.937" size="1.778" layer="25" ratio="10">>NAME</text>
+<text x="-5.08" y="-2.54" size="1.778" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C225-087X268">
+<description><b>CAPACITOR</b><p>
+grid 22.5 mm, outline 8.7 x 26.8 mm</description>
+<wire x1="-12.827" y1="4.318" x2="12.827" y2="4.318" width="0.1524" layer="21"/>
+<wire x1="13.335" y1="3.81" x2="13.335" y2="-3.81" width="0.1524" layer="21"/>
+<wire x1="12.827" y1="-4.318" x2="-12.827" y2="-4.318" width="0.1524" layer="21"/>
+<wire x1="-13.335" y1="-3.81" x2="-13.335" y2="3.81" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="1.905" x2="-6.731" y2="0" width="0.4064" layer="21"/>
+<wire x1="-6.731" y1="0" x2="-6.731" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="1.905" x2="-7.62" y2="0" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="0" x2="-7.62" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="12.827" y1="4.318" x2="13.335" y2="3.81" width="0.1524" layer="21" curve="-90"/>
+<wire x1="12.827" y1="-4.318" x2="13.335" y2="-3.81" width="0.1524" layer="21" curve="90"/>
+<wire x1="-13.335" y1="-3.81" x2="-12.827" y2="-4.318" width="0.1524" layer="21" curve="90"/>
+<wire x1="-13.335" y1="3.81" x2="-12.827" y2="4.318" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-9.652" y1="0" x2="-7.62" y2="0" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="0" x2="9.652" y2="0" width="0.1524" layer="21"/>
+<pad name="1" x="-11.303" y="0" drill="1.016" shape="octagon"/>
+<pad name="2" x="11.303" y="0" drill="1.016" shape="octagon"/>
+<text x="-12.827" y="4.699" size="1.778" layer="25" ratio="10">>NAME</text>
+<text x="-5.08" y="-2.54" size="1.778" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C225-108X268">
+<description><b>CAPACITOR</b><p>
+grid 22.5 mm, outline 10.8 x 26.8 mm</description>
+<wire x1="-12.827" y1="5.334" x2="12.827" y2="5.334" width="0.1524" layer="21"/>
+<wire x1="13.335" y1="4.826" x2="13.335" y2="-4.826" width="0.1524" layer="21"/>
+<wire x1="12.827" y1="-5.334" x2="-12.827" y2="-5.334" width="0.1524" layer="21"/>
+<wire x1="-13.335" y1="-4.826" x2="-13.335" y2="4.826" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="1.905" x2="-6.731" y2="0" width="0.4064" layer="21"/>
+<wire x1="-6.731" y1="0" x2="-6.731" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="1.905" x2="-7.62" y2="0" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="0" x2="-7.62" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="12.827" y1="5.334" x2="13.335" y2="4.826" width="0.1524" layer="21" curve="-90"/>
+<wire x1="12.827" y1="-5.334" x2="13.335" y2="-4.826" width="0.1524" layer="21" curve="90"/>
+<wire x1="-13.335" y1="-4.826" x2="-12.827" y2="-5.334" width="0.1524" layer="21" curve="90"/>
+<wire x1="-13.335" y1="4.826" x2="-12.827" y2="5.334" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-9.652" y1="0" x2="-7.62" y2="0" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="0" x2="9.652" y2="0" width="0.1524" layer="21"/>
+<pad name="1" x="-11.303" y="0" drill="1.016" shape="octagon"/>
+<pad name="2" x="11.303" y="0" drill="1.016" shape="octagon"/>
+<text x="-12.954" y="5.715" size="1.778" layer="25" ratio="10">>NAME</text>
+<text x="-5.08" y="-2.54" size="1.778" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C225-113X268">
+<description><b>CAPACITOR</b><p>
+grid 22.5 mm, outline 11.3 x 26.8 mm</description>
+<wire x1="-12.827" y1="5.588" x2="12.827" y2="5.588" width="0.1524" layer="21"/>
+<wire x1="13.335" y1="5.08" x2="13.335" y2="-5.08" width="0.1524" layer="21"/>
+<wire x1="12.827" y1="-5.588" x2="-12.827" y2="-5.588" width="0.1524" layer="21"/>
+<wire x1="-13.335" y1="-5.08" x2="-13.335" y2="5.08" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="1.905" x2="-6.731" y2="0" width="0.4064" layer="21"/>
+<wire x1="-6.731" y1="0" x2="-6.731" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="1.905" x2="-7.62" y2="0" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="0" x2="-7.62" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="12.827" y1="5.588" x2="13.335" y2="5.08" width="0.1524" layer="21" curve="-90"/>
+<wire x1="12.827" y1="-5.588" x2="13.335" y2="-5.08" width="0.1524" layer="21" curve="90"/>
+<wire x1="-13.335" y1="-5.08" x2="-12.827" y2="-5.588" width="0.1524" layer="21" curve="90"/>
+<wire x1="-13.335" y1="5.08" x2="-12.827" y2="5.588" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-9.652" y1="0" x2="-7.62" y2="0" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="0" x2="9.652" y2="0" width="0.1524" layer="21"/>
+<pad name="1" x="-11.303" y="0" drill="1.016" shape="octagon"/>
+<pad name="2" x="11.303" y="0" drill="1.016" shape="octagon"/>
+<text x="-12.954" y="5.969" size="1.778" layer="25" ratio="10">>NAME</text>
+<text x="-5.08" y="-2.54" size="1.778" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C275-093X316">
+<description><b>CAPACITOR</b><p>
+grid 27.5 mm, outline 9.3 x 31.6 mm</description>
+<wire x1="-15.24" y1="4.572" x2="15.24" y2="4.572" width="0.1524" layer="21"/>
+<wire x1="15.748" y1="4.064" x2="15.748" y2="-4.064" width="0.1524" layer="21"/>
+<wire x1="15.24" y1="-4.572" x2="-15.24" y2="-4.572" width="0.1524" layer="21"/>
+<wire x1="-15.748" y1="-4.064" x2="-15.748" y2="4.064" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="1.905" x2="-6.731" y2="0" width="0.4064" layer="21"/>
+<wire x1="-6.731" y1="0" x2="-6.731" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="1.905" x2="-7.62" y2="0" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="0" x2="-7.62" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="15.24" y1="4.572" x2="15.748" y2="4.064" width="0.1524" layer="21" curve="-90"/>
+<wire x1="15.24" y1="-4.572" x2="15.748" y2="-4.064" width="0.1524" layer="21" curve="90"/>
+<wire x1="-15.748" y1="-4.064" x2="-15.24" y2="-4.572" width="0.1524" layer="21" curve="90"/>
+<wire x1="-15.748" y1="4.064" x2="-15.24" y2="4.572" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-11.557" y1="0" x2="-7.62" y2="0" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="0" x2="11.557" y2="0" width="0.1524" layer="21"/>
+<pad name="1" x="-13.716" y="0" drill="1.1938" shape="octagon"/>
+<pad name="2" x="13.716" y="0" drill="1.1938" shape="octagon"/>
+<text x="-15.24" y="4.953" size="1.778" layer="25" ratio="10">>NAME</text>
+<text x="-5.08" y="-2.54" size="1.778" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C275-113X316">
+<description><b>CAPACITOR</b><p>
+grid 27.5 mm, outline 11.3 x 31.6 mm</description>
+<wire x1="-15.24" y1="5.588" x2="15.24" y2="5.588" width="0.1524" layer="21"/>
+<wire x1="15.748" y1="5.08" x2="15.748" y2="-5.08" width="0.1524" layer="21"/>
+<wire x1="15.24" y1="-5.588" x2="-15.24" y2="-5.588" width="0.1524" layer="21"/>
+<wire x1="-15.748" y1="-5.08" x2="-15.748" y2="5.08" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="1.905" x2="-6.731" y2="0" width="0.4064" layer="21"/>
+<wire x1="-6.731" y1="0" x2="-6.731" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="1.905" x2="-7.62" y2="0" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="0" x2="-7.62" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="15.24" y1="5.588" x2="15.748" y2="5.08" width="0.1524" layer="21" curve="-90"/>
+<wire x1="15.24" y1="-5.588" x2="15.748" y2="-5.08" width="0.1524" layer="21" curve="90"/>
+<wire x1="-15.748" y1="-5.08" x2="-15.24" y2="-5.588" width="0.1524" layer="21" curve="90"/>
+<wire x1="-15.748" y1="5.08" x2="-15.24" y2="5.588" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-11.557" y1="0" x2="-7.62" y2="0" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="0" x2="11.557" y2="0" width="0.1524" layer="21"/>
+<pad name="1" x="-13.716" y="0" drill="1.1938" shape="octagon"/>
+<pad name="2" x="13.716" y="0" drill="1.1938" shape="octagon"/>
+<text x="-15.24" y="5.969" size="1.778" layer="25" ratio="10">>NAME</text>
+<text x="-5.08" y="-2.54" size="1.778" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C275-134X316">
+<description><b>CAPACITOR</b><p>
+grid 27.5 mm, outline 13.4 x 31.6 mm</description>
+<wire x1="-15.24" y1="6.604" x2="15.24" y2="6.604" width="0.1524" layer="21"/>
+<wire x1="15.748" y1="6.096" x2="15.748" y2="-6.096" width="0.1524" layer="21"/>
+<wire x1="15.24" y1="-6.604" x2="-15.24" y2="-6.604" width="0.1524" layer="21"/>
+<wire x1="-15.748" y1="-6.096" x2="-15.748" y2="6.096" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="1.905" x2="-6.731" y2="0" width="0.4064" layer="21"/>
+<wire x1="-6.731" y1="0" x2="-6.731" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="1.905" x2="-7.62" y2="0" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="0" x2="-7.62" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="15.24" y1="6.604" x2="15.748" y2="6.096" width="0.1524" layer="21" curve="-90"/>
+<wire x1="15.24" y1="-6.604" x2="15.748" y2="-6.096" width="0.1524" layer="21" curve="90"/>
+<wire x1="-15.748" y1="-6.096" x2="-15.24" y2="-6.604" width="0.1524" layer="21" curve="90"/>
+<wire x1="-15.748" y1="6.096" x2="-15.24" y2="6.604" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-11.557" y1="0" x2="-7.62" y2="0" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="0" x2="11.557" y2="0" width="0.1524" layer="21"/>
+<pad name="1" x="-13.716" y="0" drill="1.1938" shape="octagon"/>
+<pad name="2" x="13.716" y="0" drill="1.1938" shape="octagon"/>
+<text x="-15.24" y="6.985" size="1.778" layer="25" ratio="10">>NAME</text>
+<text x="-5.08" y="-2.54" size="1.778" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C275-205X316">
+<description><b>CAPACITOR</b><p>
+grid 27.5 mm, outline 20.5 x 31.6 mm</description>
+<wire x1="-15.24" y1="10.16" x2="15.24" y2="10.16" width="0.1524" layer="21"/>
+<wire x1="15.748" y1="9.652" x2="15.748" y2="-9.652" width="0.1524" layer="21"/>
+<wire x1="15.24" y1="-10.16" x2="-15.24" y2="-10.16" width="0.1524" layer="21"/>
+<wire x1="-15.748" y1="-9.652" x2="-15.748" y2="9.652" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="1.905" x2="-6.731" y2="0" width="0.4064" layer="21"/>
+<wire x1="-6.731" y1="0" x2="-6.731" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="1.905" x2="-7.62" y2="0" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="0" x2="-7.62" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="15.24" y1="10.16" x2="15.748" y2="9.652" width="0.1524" layer="21" curve="-90"/>
+<wire x1="15.24" y1="-10.16" x2="15.748" y2="-9.652" width="0.1524" layer="21" curve="90"/>
+<wire x1="-15.748" y1="-9.652" x2="-15.24" y2="-10.16" width="0.1524" layer="21" curve="90"/>
+<wire x1="-15.748" y1="9.652" x2="-15.24" y2="10.16" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-11.557" y1="0" x2="-7.62" y2="0" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="0" x2="11.557" y2="0" width="0.1524" layer="21"/>
+<pad name="1" x="-13.716" y="0" drill="1.1938" shape="octagon"/>
+<pad name="2" x="13.716" y="0" drill="1.1938" shape="octagon"/>
+<text x="-15.24" y="10.541" size="1.778" layer="25" ratio="10">>NAME</text>
+<text x="-5.08" y="-4.318" size="1.778" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C325-137X374">
+<description><b>CAPACITOR</b><p>
+grid 32.5 mm, outline 13.7 x 37.4 mm</description>
+<wire x1="-14.2748" y1="0" x2="-12.7" y2="0" width="0.1524" layer="21"/>
+<wire x1="-12.7" y1="1.905" x2="-12.7" y2="0" width="0.4064" layer="21"/>
+<wire x1="-11.811" y1="1.905" x2="-11.811" y2="0" width="0.4064" layer="21"/>
+<wire x1="-11.811" y1="0" x2="14.2748" y2="0" width="0.1524" layer="21"/>
+<wire x1="-11.811" y1="0" x2="-11.811" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="-12.7" y1="0" x2="-12.7" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="18.542" y1="6.731" x2="18.542" y2="-6.731" width="0.1524" layer="21"/>
+<wire x1="-18.542" y1="6.731" x2="-18.542" y2="-6.731" width="0.1524" layer="21"/>
+<wire x1="-18.542" y1="-6.731" x2="18.542" y2="-6.731" width="0.1524" layer="21"/>
+<wire x1="18.542" y1="6.731" x2="-18.542" y2="6.731" width="0.1524" layer="21"/>
+<pad name="1" x="-16.256" y="0" drill="1.1938" shape="octagon"/>
+<pad name="2" x="16.256" y="0" drill="1.1938" shape="octagon"/>
+<text x="-18.2372" y="7.0612" size="1.778" layer="25" ratio="10">>NAME</text>
+<text x="-10.8458" y="-2.8702" size="1.778" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C325-162X374">
+<description><b>CAPACITOR</b><p>
+grid 32.5 mm, outline 16.2 x 37.4 mm</description>
+<wire x1="-14.2748" y1="0" x2="-12.7" y2="0" width="0.1524" layer="21"/>
+<wire x1="-12.7" y1="1.905" x2="-12.7" y2="0" width="0.4064" layer="21"/>
+<wire x1="-11.811" y1="1.905" x2="-11.811" y2="0" width="0.4064" layer="21"/>
+<wire x1="-11.811" y1="0" x2="14.2748" y2="0" width="0.1524" layer="21"/>
+<wire x1="-11.811" y1="0" x2="-11.811" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="-12.7" y1="0" x2="-12.7" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="18.542" y1="8.001" x2="18.542" y2="-8.001" width="0.1524" layer="21"/>
+<wire x1="-18.542" y1="8.001" x2="-18.542" y2="-8.001" width="0.1524" layer="21"/>
+<wire x1="-18.542" y1="-8.001" x2="18.542" y2="-8.001" width="0.1524" layer="21"/>
+<wire x1="18.542" y1="8.001" x2="-18.542" y2="8.001" width="0.1524" layer="21"/>
+<pad name="1" x="-16.256" y="0" drill="1.1938" shape="octagon"/>
+<pad name="2" x="16.256" y="0" drill="1.1938" shape="octagon"/>
+<text x="-18.3642" y="8.3312" size="1.778" layer="25" ratio="10">>NAME</text>
+<text x="-10.8458" y="-2.8702" size="1.778" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C325-182X374">
+<description><b>CAPACITOR</b><p>
+grid 32.5 mm, outline 18.2 x 37.4 mm</description>
+<wire x1="-14.2748" y1="0" x2="-12.7" y2="0" width="0.1524" layer="21"/>
+<wire x1="-12.7" y1="1.905" x2="-12.7" y2="0" width="0.4064" layer="21"/>
+<wire x1="-11.811" y1="1.905" x2="-11.811" y2="0" width="0.4064" layer="21"/>
+<wire x1="-11.811" y1="0" x2="14.2748" y2="0" width="0.1524" layer="21"/>
+<wire x1="-11.811" y1="0" x2="-11.811" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="-12.7" y1="0" x2="-12.7" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="18.542" y1="9.017" x2="18.542" y2="-9.017" width="0.1524" layer="21"/>
+<wire x1="-18.542" y1="9.017" x2="-18.542" y2="-9.017" width="0.1524" layer="21"/>
+<wire x1="-18.542" y1="-9.017" x2="18.542" y2="-9.017" width="0.1524" layer="21"/>
+<wire x1="18.542" y1="9.017" x2="-18.542" y2="9.017" width="0.1524" layer="21"/>
+<pad name="1" x="-16.256" y="0" drill="1.1938" shape="octagon"/>
+<pad name="2" x="16.256" y="0" drill="1.1938" shape="octagon"/>
+<text x="-18.3642" y="9.3472" size="1.778" layer="25" ratio="10">>NAME</text>
+<text x="-10.8458" y="-2.8702" size="1.778" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C375-192X418">
+<description><b>CAPACITOR</b><p>
+grid 37.5 mm, outline 19.2 x 41.8 mm</description>
+<wire x1="-20.32" y1="8.509" x2="20.32" y2="8.509" width="0.1524" layer="21"/>
+<wire x1="20.828" y1="8.001" x2="20.828" y2="-8.001" width="0.1524" layer="21"/>
+<wire x1="20.32" y1="-8.509" x2="-20.32" y2="-8.509" width="0.1524" layer="21"/>
+<wire x1="-20.828" y1="-8.001" x2="-20.828" y2="8.001" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="1.905" x2="-6.731" y2="0" width="0.4064" layer="21"/>
+<wire x1="-6.731" y1="0" x2="-6.731" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="1.905" x2="-7.62" y2="0" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="0" x2="-7.62" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="20.32" y1="8.509" x2="20.828" y2="8.001" width="0.1524" layer="21" curve="-90"/>
+<wire x1="20.32" y1="-8.509" x2="20.828" y2="-8.001" width="0.1524" layer="21" curve="90"/>
+<wire x1="-20.828" y1="-8.001" x2="-20.32" y2="-8.509" width="0.1524" layer="21" curve="90"/>
+<wire x1="-20.828" y1="8.001" x2="-20.32" y2="8.509" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-16.002" y1="0" x2="-7.62" y2="0" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="0" x2="16.002" y2="0" width="0.1524" layer="21"/>
+<pad name="1" x="-18.796" y="0" drill="1.3208" shape="octagon"/>
+<pad name="2" x="18.796" y="0" drill="1.3208" shape="octagon"/>
+<text x="-20.447" y="8.89" size="1.778" layer="25" ratio="10">>NAME</text>
+<text x="-5.08" y="-2.54" size="1.778" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C375-203X418">
+<description><b>CAPACITOR</b><p>
+grid 37.5 mm, outline 20.3 x 41.8 mm</description>
+<wire x1="-20.32" y1="10.16" x2="20.32" y2="10.16" width="0.1524" layer="21"/>
+<wire x1="20.828" y1="9.652" x2="20.828" y2="-9.652" width="0.1524" layer="21"/>
+<wire x1="20.32" y1="-10.16" x2="-20.32" y2="-10.16" width="0.1524" layer="21"/>
+<wire x1="-20.828" y1="-9.652" x2="-20.828" y2="9.652" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="1.905" x2="-6.731" y2="0" width="0.4064" layer="21"/>
+<wire x1="-6.731" y1="0" x2="-6.731" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="1.905" x2="-7.62" y2="0" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="0" x2="-7.62" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="20.32" y1="10.16" x2="20.828" y2="9.652" width="0.1524" layer="21" curve="-90"/>
+<wire x1="20.32" y1="-10.16" x2="20.828" y2="-9.652" width="0.1524" layer="21" curve="90"/>
+<wire x1="-20.828" y1="-9.652" x2="-20.32" y2="-10.16" width="0.1524" layer="21" curve="90"/>
+<wire x1="-20.828" y1="9.652" x2="-20.32" y2="10.16" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-16.002" y1="0" x2="-7.62" y2="0" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="0" x2="16.002" y2="0" width="0.1524" layer="21"/>
+<pad name="1" x="-18.796" y="0" drill="1.3208" shape="octagon"/>
+<pad name="2" x="18.796" y="0" drill="1.3208" shape="octagon"/>
+<text x="-20.32" y="10.541" size="1.778" layer="25" ratio="10">>NAME</text>
+<text x="-5.08" y="-2.54" size="1.778" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C050-035X075">
+<description><b>CAPACITOR</b><p>
+grid 5 mm, outline 3.5 x 7.5 mm</description>
+<wire x1="-0.3048" y1="0.635" x2="-0.3048" y2="0" width="0.3048" layer="21"/>
+<wire x1="-0.3048" y1="0" x2="-0.3048" y2="-0.635" width="0.3048" layer="21"/>
+<wire x1="-0.3048" y1="0" x2="-1.524" y2="0" width="0.1524" layer="21"/>
+<wire x1="0.3302" y1="0.635" x2="0.3302" y2="0" width="0.3048" layer="21"/>
+<wire x1="0.3302" y1="0" x2="0.3302" y2="-0.635" width="0.3048" layer="21"/>
+<wire x1="0.3302" y1="0" x2="1.524" y2="0" width="0.1524" layer="21"/>
+<wire x1="-3.683" y1="1.524" x2="-3.683" y2="-1.524" width="0.1524" layer="21"/>
+<wire x1="-3.429" y1="-1.778" x2="3.429" y2="-1.778" width="0.1524" layer="21"/>
+<wire x1="3.683" y1="-1.524" x2="3.683" y2="1.524" width="0.1524" layer="21"/>
+<wire x1="3.429" y1="1.778" x2="-3.429" y2="1.778" width="0.1524" layer="21"/>
+<wire x1="3.429" y1="1.778" x2="3.683" y2="1.524" width="0.1524" layer="21" curve="-90"/>
+<wire x1="3.429" y1="-1.778" x2="3.683" y2="-1.524" width="0.1524" layer="21" curve="90"/>
+<wire x1="-3.683" y1="-1.524" x2="-3.429" y2="-1.778" width="0.1524" layer="21" curve="90"/>
+<wire x1="-3.683" y1="1.524" x2="-3.429" y2="1.778" width="0.1524" layer="21" curve="-90"/>
+<pad name="1" x="-2.54" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="2.54" y="0" drill="0.8128" shape="octagon"/>
+<text x="-3.556" y="2.159" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-3.556" y="-3.429" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C375-155X418">
+<description><b>CAPACITOR</b><p>
+grid 37.5 mm, outline 15.5 x 41.8 mm</description>
+<wire x1="-20.32" y1="7.62" x2="20.32" y2="7.62" width="0.1524" layer="21"/>
+<wire x1="20.828" y1="7.112" x2="20.828" y2="-7.112" width="0.1524" layer="21"/>
+<wire x1="20.32" y1="-7.62" x2="-20.32" y2="-7.62" width="0.1524" layer="21"/>
+<wire x1="-20.828" y1="-7.112" x2="-20.828" y2="7.112" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="1.905" x2="-6.731" y2="0" width="0.4064" layer="21"/>
+<wire x1="-6.731" y1="0" x2="-6.731" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="1.905" x2="-7.62" y2="0" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="0" x2="-7.62" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="20.32" y1="7.62" x2="20.828" y2="7.112" width="0.1524" layer="21" curve="-90"/>
+<wire x1="20.32" y1="-7.62" x2="20.828" y2="-7.112" width="0.1524" layer="21" curve="90"/>
+<wire x1="-20.828" y1="-7.112" x2="-20.32" y2="-7.62" width="0.1524" layer="21" curve="90"/>
+<wire x1="-20.828" y1="7.112" x2="-20.32" y2="7.62" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-16.002" y1="0" x2="-7.62" y2="0" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="0" x2="16.002" y2="0" width="0.1524" layer="21"/>
+<pad name="1" x="-18.796" y="0" drill="1.3208" shape="octagon"/>
+<pad name="2" x="18.796" y="0" drill="1.3208" shape="octagon"/>
+<text x="-20.447" y="8.001" size="1.778" layer="25" ratio="10">>NAME</text>
+<text x="-5.08" y="-2.54" size="1.778" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C075-063X106">
+<description><b>CAPACITOR</b><p>
+grid 7.5 mm, outline 6.3 x 10.6 mm</description>
+<wire x1="4.953" y1="3.048" x2="-4.953" y2="3.048" width="0.1524" layer="21"/>
+<wire x1="-5.207" y1="2.794" x2="-5.207" y2="-2.794" width="0.1524" layer="21"/>
+<wire x1="-4.953" y1="-3.048" x2="4.953" y2="-3.048" width="0.1524" layer="21"/>
+<wire x1="5.207" y1="-2.794" x2="5.207" y2="2.794" width="0.1524" layer="21"/>
+<wire x1="4.953" y1="3.048" x2="5.207" y2="2.794" width="0.1524" layer="21" curve="-90"/>
+<wire x1="4.953" y1="-3.048" x2="5.207" y2="-2.794" width="0.1524" layer="21" curve="90"/>
+<wire x1="-5.207" y1="-2.794" x2="-4.953" y2="-3.048" width="0.1524" layer="21" curve="90"/>
+<wire x1="-5.207" y1="2.794" x2="-4.953" y2="3.048" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-1.27" y1="0" x2="2.667" y2="0" width="0.1524" layer="21"/>
+<wire x1="-2.667" y1="0" x2="-2.159" y2="0" width="0.1524" layer="21"/>
+<wire x1="-2.159" y1="1.27" x2="-2.159" y2="0" width="0.4064" layer="21"/>
+<wire x1="-2.159" y1="0" x2="-2.159" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-1.27" y1="1.27" x2="-1.27" y2="0" width="0.4064" layer="21"/>
+<wire x1="-1.27" y1="0" x2="-1.27" y2="-1.27" width="0.4064" layer="21"/>
+<pad name="1" x="-3.81" y="0" drill="0.9144" shape="octagon"/>
+<pad name="2" x="3.81" y="0" drill="0.9144" shape="octagon"/>
+<text x="-4.826" y="3.429" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-0.635" y="-2.54" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C275-154X316">
+<description><b>CAPACITOR</b><p>
+grid 27.5 mm, outline 15.4 x 31.6 mm</description>
+<wire x1="-15.24" y1="7.62" x2="15.24" y2="7.62" width="0.1524" layer="21"/>
+<wire x1="15.748" y1="7.112" x2="15.748" y2="-7.112" width="0.1524" layer="21"/>
+<wire x1="15.24" y1="-7.62" x2="-15.24" y2="-7.62" width="0.1524" layer="21"/>
+<wire x1="-15.748" y1="-7.112" x2="-15.748" y2="7.112" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="1.905" x2="-6.731" y2="0" width="0.4064" layer="21"/>
+<wire x1="-6.731" y1="0" x2="-6.731" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="1.905" x2="-7.62" y2="0" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="0" x2="-7.62" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="15.24" y1="7.62" x2="15.748" y2="7.112" width="0.1524" layer="21" curve="-90"/>
+<wire x1="15.24" y1="-7.62" x2="15.748" y2="-7.112" width="0.1524" layer="21" curve="90"/>
+<wire x1="-15.748" y1="-7.112" x2="-15.24" y2="-7.62" width="0.1524" layer="21" curve="90"/>
+<wire x1="-15.748" y1="7.112" x2="-15.24" y2="7.62" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-11.557" y1="0" x2="-7.62" y2="0" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="0" x2="11.557" y2="0" width="0.1524" layer="21"/>
+<pad name="1" x="-13.716" y="0" drill="1.1938" shape="octagon"/>
+<pad name="2" x="13.716" y="0" drill="1.1938" shape="octagon"/>
+<text x="-15.24" y="8.001" size="1.778" layer="25" ratio="10">>NAME</text>
+<text x="-5.08" y="-2.54" size="1.778" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C275-173X316">
+<description><b>CAPACITOR</b><p>
+grid 27.5 mm, outline 17.3 x 31.6 mm</description>
+<wire x1="-15.24" y1="8.509" x2="15.24" y2="8.509" width="0.1524" layer="21"/>
+<wire x1="15.748" y1="8.001" x2="15.748" y2="-8.001" width="0.1524" layer="21"/>
+<wire x1="15.24" y1="-8.509" x2="-15.24" y2="-8.509" width="0.1524" layer="21"/>
+<wire x1="-15.748" y1="-8.001" x2="-15.748" y2="8.001" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="1.905" x2="-6.731" y2="0" width="0.4064" layer="21"/>
+<wire x1="-6.731" y1="0" x2="-6.731" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="1.905" x2="-7.62" y2="0" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="0" x2="-7.62" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="15.24" y1="8.509" x2="15.748" y2="8.001" width="0.1524" layer="21" curve="-90"/>
+<wire x1="15.24" y1="-8.509" x2="15.748" y2="-8.001" width="0.1524" layer="21" curve="90"/>
+<wire x1="-15.748" y1="-8.001" x2="-15.24" y2="-8.509" width="0.1524" layer="21" curve="90"/>
+<wire x1="-15.748" y1="8.001" x2="-15.24" y2="8.509" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-11.557" y1="0" x2="-7.62" y2="0" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="0" x2="11.557" y2="0" width="0.1524" layer="21"/>
+<pad name="1" x="-13.716" y="0" drill="1.1938" shape="octagon"/>
+<pad name="2" x="13.716" y="0" drill="1.1938" shape="octagon"/>
+<text x="-15.24" y="8.89" size="1.778" layer="25" ratio="10">>NAME</text>
+<text x="-5.08" y="-2.54" size="1.778" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C0402K">
+<description><b>Ceramic Chip Capacitor KEMET 0204 Reflow solder</b><p>
+Metric Code Size 1005</description>
+<wire x1="-0.425" y1="0.2" x2="0.425" y2="0.2" width="0.1016" layer="51"/>
+<wire x1="0.425" y1="-0.2" x2="-0.425" y2="-0.2" width="0.1016" layer="51"/>
+<smd name="1" x="-0.6" y="0" dx="0.925" dy="0.74" layer="1"/>
+<smd name="2" x="0.6" y="0" dx="0.925" dy="0.74" layer="1"/>
+<text x="-0.5" y="0.425" size="1.016" layer="25">>NAME</text>
+<text x="-0.5" y="-1.45" size="1.016" layer="27">>VALUE</text>
+<rectangle x1="-0.5" y1="-0.25" x2="-0.225" y2="0.25" layer="51"/>
+<rectangle x1="0.225" y1="-0.25" x2="0.5" y2="0.25" layer="51"/>
+</package>
+<package name="C0603K">
+<description><b>Ceramic Chip Capacitor KEMET 0603 Reflow solder</b><p>
+Metric Code Size 1608</description>
+<wire x1="-0.725" y1="0.35" x2="0.725" y2="0.35" width="0.1016" layer="51"/>
+<wire x1="0.725" y1="-0.35" x2="-0.725" y2="-0.35" width="0.1016" layer="51"/>
+<smd name="1" x="-0.875" y="0" dx="1.05" dy="1.08" layer="1"/>
+<smd name="2" x="0.875" y="0" dx="1.05" dy="1.08" layer="1"/>
+<text x="-0.8" y="0.65" size="1.016" layer="25">>NAME</text>
+<text x="-0.8" y="-1.65" size="1.016" layer="27">>VALUE</text>
+<rectangle x1="-0.8" y1="-0.4" x2="-0.45" y2="0.4" layer="51"/>
+<rectangle x1="0.45" y1="-0.4" x2="0.8" y2="0.4" layer="51"/>
+</package>
+<package name="C0805K">
+<description><b>Ceramic Chip Capacitor KEMET 0805 Reflow solder</b><p>
+Metric Code Size 2012</description>
+<wire x1="-0.925" y1="0.6" x2="0.925" y2="0.6" width="0.1016" layer="51"/>
+<wire x1="0.925" y1="-0.6" x2="-0.925" y2="-0.6" width="0.1016" layer="51"/>
+<smd name="1" x="-1" y="0" dx="1.3" dy="1.6" layer="1"/>
+<smd name="2" x="1" y="0" dx="1.3" dy="1.6" layer="1"/>
+<text x="-1" y="0.875" size="1.016" layer="25">>NAME</text>
+<text x="-1" y="-1.9" size="1.016" layer="27">>VALUE</text>
+<rectangle x1="-1" y1="-0.65" x2="-0.5" y2="0.65" layer="51"/>
+<rectangle x1="0.5" y1="-0.65" x2="1" y2="0.65" layer="51"/>
+</package>
+<package name="C1206K">
+<description><b>Ceramic Chip Capacitor KEMET 1206 Reflow solder</b><p>
+Metric Code Size 3216</description>
+<wire x1="-1.525" y1="0.75" x2="1.525" y2="0.75" width="0.1016" layer="51"/>
+<wire x1="1.525" y1="-0.75" x2="-1.525" y2="-0.75" width="0.1016" layer="51"/>
+<smd name="1" x="-1.5" y="0" dx="1.5" dy="2" layer="1"/>
+<smd name="2" x="1.5" y="0" dx="1.5" dy="2" layer="1"/>
+<text x="-1.6" y="1.1" size="1.016" layer="25">>NAME</text>
+<text x="-1.6" y="-2.1" size="1.016" layer="27">>VALUE</text>
+<rectangle x1="-1.6" y1="-0.8" x2="-1.1" y2="0.8" layer="51"/>
+<rectangle x1="1.1" y1="-0.8" x2="1.6" y2="0.8" layer="51"/>
+</package>
+<package name="C1210K">
+<description><b>Ceramic Chip Capacitor KEMET 1210 Reflow solder</b><p>
+Metric Code Size 3225</description>
+<wire x1="-1.525" y1="1.175" x2="1.525" y2="1.175" width="0.1016" layer="51"/>
+<wire x1="1.525" y1="-1.175" x2="-1.525" y2="-1.175" width="0.1016" layer="51"/>
+<smd name="1" x="-1.5" y="0" dx="1.5" dy="2.9" layer="1"/>
+<smd name="2" x="1.5" y="0" dx="1.5" dy="2.9" layer="1"/>
+<text x="-1.6" y="1.55" size="1.016" layer="25">>NAME</text>
+<text x="-1.6" y="-2.575" size="1.016" layer="27">>VALUE</text>
+<rectangle x1="-1.6" y1="-1.25" x2="-1.1" y2="1.25" layer="51"/>
+<rectangle x1="1.1" y1="-1.25" x2="1.6" y2="1.25" layer="51"/>
+</package>
+<package name="C1812K">
+<description><b>Ceramic Chip Capacitor KEMET 1812 Reflow solder</b><p>
+Metric Code Size 4532</description>
+<wire x1="-2.175" y1="1.525" x2="2.175" y2="1.525" width="0.1016" layer="51"/>
+<wire x1="2.175" y1="-1.525" x2="-2.175" y2="-1.525" width="0.1016" layer="51"/>
+<smd name="1" x="-2.05" y="0" dx="1.8" dy="3.7" layer="1"/>
+<smd name="2" x="2.05" y="0" dx="1.8" dy="3.7" layer="1"/>
+<text x="-2.25" y="1.95" size="1.016" layer="25">>NAME</text>
+<text x="-2.25" y="-2.975" size="1.016" layer="27">>VALUE</text>
+<rectangle x1="-2.25" y1="-1.6" x2="-1.65" y2="1.6" layer="51"/>
+<rectangle x1="1.65" y1="-1.6" x2="2.25" y2="1.6" layer="51"/>
+</package>
+<package name="C1825K">
+<description><b>Ceramic Chip Capacitor KEMET 1825 Reflow solder</b><p>
+Metric Code Size 4564</description>
+<wire x1="-1.525" y1="3.125" x2="1.525" y2="3.125" width="0.1016" layer="51"/>
+<wire x1="1.525" y1="-3.125" x2="-1.525" y2="-3.125" width="0.1016" layer="51"/>
+<smd name="1" x="-1.5" y="0" dx="1.8" dy="6.9" layer="1"/>
+<smd name="2" x="1.5" y="0" dx="1.8" dy="6.9" layer="1"/>
+<text x="-1.6" y="3.55" size="1.016" layer="25">>NAME</text>
+<text x="-1.6" y="-4.625" size="1.016" layer="27">>VALUE</text>
+<rectangle x1="-1.6" y1="-3.2" x2="-1.1" y2="3.2" layer="51"/>
+<rectangle x1="1.1" y1="-3.2" x2="1.6" y2="3.2" layer="51"/>
+</package>
+<package name="C2220K">
+<description><b>Ceramic Chip Capacitor KEMET 2220 Reflow solder</b><p>
+Metric Code Size 5650</description>
+<wire x1="-2.725" y1="2.425" x2="2.725" y2="2.425" width="0.1016" layer="51"/>
+<wire x1="2.725" y1="-2.425" x2="-2.725" y2="-2.425" width="0.1016" layer="51"/>
+<smd name="1" x="-2.55" y="0" dx="1.85" dy="5.5" layer="1"/>
+<smd name="2" x="2.55" y="0" dx="1.85" dy="5.5" layer="1"/>
+<text x="-2.8" y="2.95" size="1.016" layer="25">>NAME</text>
+<text x="-2.8" y="-3.975" size="1.016" layer="27">>VALUE</text>
+<rectangle x1="-2.8" y1="-2.5" x2="-2.2" y2="2.5" layer="51"/>
+<rectangle x1="2.2" y1="-2.5" x2="2.8" y2="2.5" layer="51"/>
+</package>
+<package name="C2225K">
+<description><b>Ceramic Chip Capacitor KEMET 2225 Reflow solder</b><p>
+Metric Code Size 5664</description>
+<wire x1="-2.725" y1="3.075" x2="2.725" y2="3.075" width="0.1016" layer="51"/>
+<wire x1="2.725" y1="-3.075" x2="-2.725" y2="-3.075" width="0.1016" layer="51"/>
+<smd name="1" x="-2.55" y="0" dx="1.85" dy="6.8" layer="1"/>
+<smd name="2" x="2.55" y="0" dx="1.85" dy="6.8" layer="1"/>
+<text x="-2.8" y="3.6" size="1.016" layer="25">>NAME</text>
+<text x="-2.8" y="-4.575" size="1.016" layer="27">>VALUE</text>
+<rectangle x1="-2.8" y1="-3.15" x2="-2.2" y2="3.15" layer="51"/>
+<rectangle x1="2.2" y1="-3.15" x2="2.8" y2="3.15" layer="51"/>
+</package>
+<package name="J80">
+<description><b>chemi-con j80 capacitor</b><br>
+land pattern from <a href="https://engineering.purdue.edu/ece477/Webs/S06-Grp03/datasheets/PXA0703.pdf">https://engineering.purdue.edu/ece477/Webs/S06-Grp03/datasheets/PXA0703.pdf</a><br>
+same as for j12</description>
+<wire x1="-6" y1="2" x2="-6" y2="5" width="0.127" layer="21"/>
+<wire x1="-6" y1="5" x2="5" y2="5" width="0.127" layer="21"/>
+<wire x1="5" y1="5" x2="5" y2="4" width="0.127" layer="21"/>
+<wire x1="5" y1="4" x2="6" y2="4" width="0.127" layer="21"/>
+<wire x1="6" y1="4" x2="6" y2="2" width="0.127" layer="21"/>
+<wire x1="6" y1="-2" x2="6" y2="-4" width="0.127" layer="21"/>
+<wire x1="6" y1="-4" x2="5" y2="-4" width="0.127" layer="21"/>
+<wire x1="5" y1="-4" x2="5" y2="-5" width="0.127" layer="21"/>
+<wire x1="5" y1="-5" x2="-6" y2="-5" width="0.127" layer="21"/>
+<wire x1="-6" y1="-5" x2="-6" y2="-2" width="0.127" layer="21"/>
+<smd name="-" x="-4.45" y="0" dx="4.4" dy="2.2" layer="1"/>
+<smd name="+" x="4.45" y="0" dx="4.4" dy="2.2" layer="1"/>
+<rectangle x1="-5.9" y1="-5.3" x2="5.9" y2="5.3" layer="39"/>
+</package>
+<package name="PLF1C271MDO1">
+<description><b>PLF1C271MDO1 cap</b><br>
+dimensions from <a href="http://products.nichicon.co.jp/en/pdf/XJA042/e-lf.pdf">http://products.nichicon.co.jp/en/pdf/XJA042/e-lf.pdf</a></description>
+<circle x="0" y="0" radius="4" width="0.127" layer="39"/>
+<pad name="+" x="-1.75" y="0" drill="0.9"/>
+<pad name="-" x="1.75" y="0" drill="0.9"/>
+<text x="-0.7" y="0.4" size="0.4064" layer="21" font="vector">+</text>
+<text x="0.4" y="0.4" size="0.4064" layer="21" font="vector">-</text>
+</package>
+<package name="RR71C331MDN1">
+<description><b>RR71C331MDN1 cap</b><br>
+dimensions from <a href="http://www.nichicon.co.jp/english/products/pdf/2009fpcap_catalog_r7.pdf">http://www.nichicon.co.jp/english/products/pdf/2009fpcap_catalog_r7.pdf</a></description>
+<circle x="0" y="0" radius="5" width="0.127" layer="39"/>
+<pad name="+" x="-2.5" y="0" drill="0.9"/>
+<pad name="-" x="2.5" y="0" drill="0.9"/>
+<text x="-1.3" y="0.4" size="0.4064" layer="21" font="vector">+</text>
+<text x="1.2" y="0.4" size="0.4064" layer="21" font="vector">-</text>
+</package>
+<package name="D-PAK">
+<description><b>D-PAK (TO-252AA)</b><br>
+drawings at <a href="http://www.vishay.com/docs/95016/dpak252a.pdf">http://www.vishay.com/docs/95016/dpak252a.pdf</a></description>
+<smd name="CATHODE" x="0" y="2.585" dx="6.74" dy="6.23" layer="1"/>
+<smd name="ANODE$0" x="-2.28" y="-4.56" dx="1.624" dy="2.28" layer="1"/>
+<smd name="ANODE$1" x="2.28" y="-4.56" dx="1.624" dy="2.28" layer="1"/>
+<rectangle x1="-3.5" y1="-6.3" x2="3.5" y2="6.5" layer="39"/>
+</package>
+</packages>
+<symbols>
+<symbol name="LM3481">
+<wire x1="-12.7" y1="12.7" x2="-12.7" y2="-12.7" width="0.254" layer="94"/>
+<wire x1="-12.7" y1="-12.7" x2="12.7" y2="-12.7" width="0.254" layer="94"/>
+<wire x1="12.7" y1="-12.7" x2="12.7" y2="12.7" width="0.254" layer="94"/>
+<wire x1="12.7" y1="12.7" x2="-12.7" y2="12.7" width="0.254" layer="94"/>
+<pin name="COMP" x="-15.24" y="0" length="short"/>
+<pin name="UVLO" x="-15.24" y="5.08" length="short"/>
+<pin name="ISEN" x="-15.24" y="10.16" length="short"/>
+<pin name="FB" x="-15.24" y="-5.08" length="short"/>
+<pin name="AGND" x="-15.24" y="-10.16" length="short"/>
+<pin name="FA/SYNC/SD" x="15.24" y="-10.16" length="short" rot="R180"/>
+<pin name="PGND" x="15.24" y="-5.08" length="short" rot="R180"/>
+<pin name="DR" x="15.24" y="0" length="short" rot="R180"/>
+<pin name="VCC" x="15.24" y="5.08" length="short" rot="R180"/>
+<pin name="VIN" x="15.24" y="10.16" length="short" rot="R180"/>
+</symbol>
+<symbol name="L-US">
+<wire x1="0" y1="5.08" x2="1.27" y2="3.81" width="0.254" layer="94" curve="-90" cap="flat"/>
+<wire x1="0" y1="2.54" x2="1.27" y2="3.81" width="0.254" layer="94" curve="90" cap="flat"/>
+<wire x1="0" y1="2.54" x2="1.27" y2="1.27" width="0.254" layer="94" curve="-90" cap="flat"/>
+<wire x1="0" y1="0" x2="1.27" y2="1.27" width="0.254" layer="94" curve="90" cap="flat"/>
+<wire x1="0" y1="0" x2="1.27" y2="-1.27" width="0.254" layer="94" curve="-90" cap="flat"/>
+<wire x1="0" y1="-2.54" x2="1.27" y2="-1.27" width="0.254" layer="94" curve="90" cap="flat"/>
+<wire x1="0" y1="-2.54" x2="1.27" y2="-3.81" width="0.254" layer="94" curve="-90" cap="flat"/>
+<wire x1="0" y1="-5.08" x2="1.27" y2="-3.81" width="0.254" layer="94" curve="90" cap="flat"/>
+<text x="-1.27" y="-5.08" size="1.778" layer="95" rot="R90">>NAME</text>
+<text x="3.81" y="-5.08" size="1.778" layer="96" rot="R90">>VALUE</text>
+<pin name="2" x="0" y="-7.62" visible="off" length="short" direction="pas" swaplevel="1" rot="R90"/>
+<pin name="1" x="0" y="7.62" visible="off" length="short" direction="pas" swaplevel="1" rot="R270"/>
+</symbol>
+<symbol name="N-MOSFET_EXTRA_PINS">
+<wire x1="0.762" y1="0.762" x2="0.762" y2="0" width="0.254" layer="94"/>
+<wire x1="0.762" y1="0" x2="0.762" y2="-0.762" width="0.254" layer="94"/>
+<wire x1="0.762" y1="3.175" x2="0.762" y2="2.54" width="0.254" layer="94"/>
+<wire x1="0.762" y1="2.54" x2="0.762" y2="1.905" width="0.254" layer="94"/>
+<wire x1="0.762" y1="0" x2="2.54" y2="0" width="0.1524" layer="94"/>
+<wire x1="2.54" y1="0" x2="2.54" y2="-2.54" width="0.1524" layer="94"/>
+<wire x1="0.762" y1="-1.905" x2="0.762" y2="-2.54" width="0.254" layer="94"/>
+<wire x1="0.762" y1="-2.54" x2="0.762" y2="-3.175" width="0.254" layer="94"/>
+<wire x1="0" y1="2.54" x2="0" y2="-2.54" width="0.254" layer="94"/>
+<wire x1="2.54" y1="-2.54" x2="0.762" y2="-2.54" width="0.1524" layer="94"/>
+<wire x1="3.81" y1="2.54" x2="3.81" y2="0.508" width="0.1524" layer="94"/>
+<wire x1="3.81" y1="0.508" x2="3.81" y2="-2.54" width="0.1524" layer="94"/>
+<wire x1="2.54" y1="-2.54" x2="3.81" y2="-2.54" width="0.1524" layer="94"/>
+<wire x1="0.762" y1="2.54" x2="3.81" y2="2.54" width="0.1524" layer="94"/>
+<wire x1="4.572" y1="0.762" x2="4.318" y2="0.508" width="0.1524" layer="94"/>
+<wire x1="4.318" y1="0.508" x2="3.81" y2="0.508" width="0.1524" layer="94"/>
+<wire x1="3.81" y1="0.508" x2="3.302" y2="0.508" width="0.1524" layer="94"/>
+<wire x1="3.302" y1="0.508" x2="3.048" y2="0.254" width="0.1524" layer="94"/>
+<circle x="2.54" y="-2.54" radius="0.3592" width="0" layer="94"/>
+<circle x="2.54" y="2.54" radius="0.3592" width="0" layer="94"/>
+<text x="-11.43" y="0" size="1.778" layer="96">>VALUE</text>
+<text x="-11.43" y="2.54" size="1.778" layer="95">>NAME</text>
+<pin name="S" x="2.54" y="-5.08" visible="off" length="short" direction="pas" swaplevel="2" rot="R90"/>
+<pin name="G" x="-2.54" y="-2.54" visible="off" length="short" direction="pas"/>
+<pin name="D" x="2.54" y="5.08" visible="off" length="short" direction="pas" swaplevel="1" rot="R270"/>
+<pin name="S$1" x="5.08" y="-5.08" visible="off" length="short" direction="pas" swaplevel="2" rot="R90"/>
+<pin name="S$2" x="7.62" y="-5.08" visible="off" length="short" direction="pas" swaplevel="2" rot="R90"/>
+<pin name="D$1" x="5.08" y="5.08" visible="off" length="short" direction="pas" swaplevel="1" rot="R270"/>
+<pin name="D$2" x="7.62" y="5.08" visible="off" length="short" direction="pas" swaplevel="1" rot="R270"/>
+<pin name="D$3" x="10.16" y="5.08" visible="off" length="short" direction="pas" swaplevel="1" rot="R270"/>
+<pin name="D$4" x="12.7" y="5.08" visible="off" length="short" direction="pas" swaplevel="1" rot="R270"/>
+<polygon width="0.1524" layer="94">
+<vertex x="3.81" y="0.508"/>
+<vertex x="3.302" y="-0.254"/>
+<vertex x="4.318" y="-0.254"/>
+</polygon>
+<polygon width="0.1524" layer="94">
+<vertex x="1.016" y="0"/>
+<vertex x="2.032" y="0.762"/>
+<vertex x="2.032" y="-0.762"/>
+</polygon>
+</symbol>
+<symbol name="TERMINAL">
+<wire x1="0" y1="7.62" x2="-7.62" y2="7.62" width="0.254" layer="94"/>
+<wire x1="-7.62" y1="7.62" x2="-7.62" y2="-7.62" width="0.254" layer="94"/>
+<wire x1="-7.62" y1="-7.62" x2="0" y2="-7.62" width="0.254" layer="94"/>
+<wire x1="0" y1="-7.62" x2="0" y2="7.62" width="0.254" layer="94"/>
+<wire x1="-2.54" y1="5.08" x2="-5.08" y2="2.54" width="0.254" layer="94"/>
+<wire x1="-2.54" y1="2.54" x2="-5.08" y2="5.08" width="0.254" layer="94"/>
+<wire x1="-2.54" y1="-2.54" x2="-5.08" y2="-5.08" width="0.254" layer="94"/>
+<wire x1="-2.54" y1="-5.08" x2="-5.08" y2="-2.54" width="0.254" layer="94"/>
+<pin name="P$1" x="5.08" y="2.54" visible="off" length="middle" rot="R180"/>
+<pin name="P$2" x="5.08" y="-2.54" visible="off" length="middle" rot="R180"/>
+<text x="-8.128" y="8.636" size="1.778" layer="95">>NAME</text>
+<text x="-8.382" y="-9.906" size="1.778" layer="96">>VALUE</text>
+</symbol>
+<symbol name="DIODE_2">
+<wire x1="-1.27" y1="-1.27" x2="1.27" y2="0" width="0.254" layer="94"/>
+<wire x1="1.27" y1="0" x2="-1.27" y2="1.27" width="0.254" layer="94"/>
+<wire x1="1.27" y1="1.27" x2="1.27" y2="0" width="0.254" layer="94"/>
+<wire x1="-1.27" y1="1.27" x2="-1.27" y2="-1.27" width="0.254" layer="94"/>
+<wire x1="1.27" y1="0" x2="1.27" y2="-1.27" width="0.254" layer="94"/>
+<text x="2.54" y="0.4826" size="1.778" layer="95">>NAME</text>
+<text x="2.54" y="-2.3114" size="1.778" layer="96">>VALUE</text>
+<pin name="A" x="-2.54" y="0" visible="off" length="short" direction="pas" swaplevel="1"/>
+<pin name="C" x="2.54" y="0" visible="off" length="short" direction="pas" rot="R180"/>
+<pin name="A1" x="-2.54" y="2.54" visible="off" length="short" direction="pas" swaplevel="1"/>
+</symbol>
+<symbol name="ZENER_DIODE">
+<wire x1="-1.27" y1="-1.27" x2="1.27" y2="0" width="0.254" layer="94"/>
+<wire x1="1.27" y1="0" x2="-1.27" y2="1.27" width="0.254" layer="94"/>
+<wire x1="1.27" y1="1.27" x2="1.27" y2="0" width="0.254" layer="94"/>
+<wire x1="-1.27" y1="1.27" x2="-1.27" y2="-1.27" width="0.254" layer="94"/>
+<wire x1="1.27" y1="0" x2="1.27" y2="-1.27" width="0.254" layer="94"/>
+<wire x1="1.27" y1="1.27" x2="0" y2="2.54" width="0.254" layer="94"/>
+<wire x1="1.27" y1="-1.27" x2="2.54" y2="-2.54" width="0.254" layer="94"/>
+<text x="2.54" y="0.4826" size="1.778" layer="95">>NAME</text>
+<pin name="A" x="-2.54" y="0" visible="off" length="short" direction="pas"/>
+<pin name="C" x="2.54" y="0" visible="off" length="short" direction="pas" rot="R180"/>
+</symbol>
+<symbol name="C-US">
+<wire x1="-2.54" y1="0" x2="2.54" y2="0" width="0.254" layer="94"/>
+<wire x1="0" y1="-1.016" x2="0" y2="-2.54" width="0.1524" layer="94"/>
+<wire x1="0" y1="-1" x2="2.4892" y2="-1.8542" width="0.254" layer="94" curve="-37.878202" cap="flat"/>
+<wire x1="-2.4668" y1="-1.8504" x2="0" y2="-1.0161" width="0.254" layer="94" curve="-37.373024" cap="flat"/>
+<text x="1.016" y="0.635" size="1.778" layer="95">>NAME</text>
+<text x="1.016" y="-4.191" size="1.778" layer="96">>VALUE</text>
+<pin name="1" x="0" y="2.54" visible="off" length="short" direction="pas" swaplevel="1" rot="R270"/>
+<pin name="2" x="0" y="-5.08" visible="off" length="short" direction="pas" swaplevel="1" rot="R90"/>
+</symbol>
+</symbols>
+<devicesets>
+<deviceset name="LM3481">
+<description><b>switching regulator controller</b><br>
+data sheet at <a href="http://www.national.com/ds/LM/LM3481.pdf">http://www.national.com/ds/LM/LM3481.pdf</a></description>
+<gates>
+<gate name="G$1" symbol="LM3481" x="0" y="0"/>
+</gates>
+<devices>
+<device name="" package="MSOP10">
+<connects>
+<connect gate="G$1" pin="AGND" pad="5"/>
+<connect gate="G$1" pin="COMP" pad="3"/>
+<connect gate="G$1" pin="DR" pad="8"/>
+<connect gate="G$1" pin="FA/SYNC/SD" pad="6"/>
+<connect gate="G$1" pin="FB" pad="4"/>
+<connect gate="G$1" pin="ISEN" pad="1"/>
+<connect gate="G$1" pin="PGND" pad="7"/>
+<connect gate="G$1" pin="UVLO" pad="2"/>
+<connect gate="G$1" pin="VCC" pad="9"/>
+<connect gate="G$1" pin="VIN" pad="10"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="BSZ097N04LS_G">
+<description><b>mosfet</b><br>
+datasheet at <a href="http://www.infineon.com/dgdl/BSZ097N04LSG_rev2.0.pdf?folderId=db3a3043163797a6011643468e7505a4&fileId=db3a3043163797a6011643be1d53068c">http://www.infineon.com/dgdl/BSZ097N04LSG_rev2.0.pdf?folderId=db3a3043163797a6011643468e7505a4&fileId=db3a3043163797a6011643be1d53068c</a></description>
+<gates>
+<gate name="G$1" symbol="N-MOSFET_EXTRA_PINS" x="0" y="0"/>
+</gates>
+<devices>
+<device name="" package="PG-TSDSON8">
+<connects>
+<connect gate="G$1" pin="D" pad="D$0"/>
+<connect gate="G$1" pin="D$1" pad="D$1"/>
+<connect gate="G$1" pin="D$2" pad="D$2"/>
+<connect gate="G$1" pin="D$3" pad="D$3"/>
+<connect gate="G$1" pin="D$4" pad="D$4"/>
+<connect gate="G$1" pin="G" pad="G"/>
+<connect gate="G$1" pin="S" pad="S$0"/>
+<connect gate="G$1" pin="S$1" pad="S$1"/>
+<connect gate="G$1" pin="S$2" pad="S$2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="L-US" prefix="L" uservalue="yes">
+<description><B>INDUCTOR</B>, American symbol</description>
+<gates>
+<gate name="G$1" symbol="L-US" x="0" y="0"/>
+</gates>
+<devices>
+<device name="L2012C" package="L2012C">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="L2825P" package="L2825P">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="L3216C" package="L3216C">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="L3225M" package="L3225M">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="L3225P" package="L3225P">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="L3230M" package="L3230M">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="L4035M" package="L4035M">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="L4516C" package="L4516C">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="L4532C" package="L4532M">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="L4532P" package="L4532P">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="L5038P" package="L5038P">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="L5650M" package="L5650M">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="L8530M" package="L8530M">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="0204/5" package="0204/5">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="0204/7" package="0204/7">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="0204V" package="0204V">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="0207/10" package="0207/10">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="0207/12" package="0207/12">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="0207/15" package="0207/15">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="0207/2V" package="0207/2V">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="0207/5V" package="0207/5V">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="0207/7" package="0207/7">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="L1812" package="L1812">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="TJ3-U1" package="TJ3-U1">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="TJ3-U2" package="TJ3-U2">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="TJ4-U1" package="TJ4-U1">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="TJ4-U2" package="TJ4-U2">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="TJ5-U1" package="TJ5-U1">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="TJ5-U2" package="TJ5-U2">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="TJ6-U1" package="TJ6-U1">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="TJ6-U2" package="TJ6-U2">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="TJ7-U1" package="TJ7-U1">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="TJ7-U2" package="TJ7-U2">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="TJ8-U1" package="TJ8-U1">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="TJ8-U2" package="TJ8-U2">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="TJ9-U1" package="TJ9-U1">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="TJ9-U2" package="TJ9-U2">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="WE-TPC" package="POWER-CHOKE_WE-TPC">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="CEP125" package="CEP125">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="1060-152" package="1060-152">
+<connects>
+<connect gate="G$1" pin="1" pad="P$1"/>
+<connect gate="G$1" pin="2" pad="P$2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="1010-153" package="1010-153">
+<connects>
+<connect gate="G$1" pin="1" pad="P$1"/>
+<connect gate="G$1" pin="2" pad="P$2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="POWER_CONNECTOR">
+<description>MOLEX 39543-0202
+Terminal Block</description>
+<gates>
+<gate name="G$1" symbol="TERMINAL" x="-7.62" y="-25.4"/>
+</gates>
+<devices>
+<device name="39" package="39543-0202">
+<connects>
+<connect gate="G$1" pin="P$1" pad="P$1"/>
+<connect gate="G$1" pin="P$2" pad="P$2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="ELFH0225*" package="ELFH0225*">
+<connects>
+<connect gate="G$1" pin="P$1" pad="P$2"/>
+<connect gate="G$1" pin="P$2" pad="P$1"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="MMSZ5242BT1G">
+<description><b>zener diode</b><br>
+datasheet at <a href="http://www.onsemi.com/pub_link/Collateral/MMSZ5221BT1-D.PDF">http://www.onsemi.com/pub_link/Collateral/MMSZ5221BT1-D.PDF</a></description>
+<gates>
+<gate name="G$1" symbol="ZENER_DIODE" x="0" y="0"/>
+</gates>
+<devices>
+<device name="" package="SOD-123">
+<connects>
+<connect gate="G$1" pin="A" pad="ANODE"/>
+<connect gate="G$1" pin="C" pad="CATHODE"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="C-US" prefix="C" uservalue="yes">
+<description><B>CAPACITOR</B>, American symbol</description>
+<gates>
+<gate name="G$1" symbol="C-US" x="0" y="0"/>
+</gates>
+<devices>
+<device name="C0402" package="C0402">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C0504" package="C0504">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C0603" package="C0603">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C0805" package="C0805">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C1005" package="C1005">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C1206" package="C1206">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C1210" package="C1210">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C1310" package="C1310">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C1608" package="C1608">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C1812" package="C1812">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C1825" package="C1825">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C2012" package="C2012">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C3216" package="C3216">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C3225" package="C3225">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C4532" package="C4532">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C4564" package="C4564">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="025-024X044" package="C025-024X044">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="025-025X050" package="C025-025X050">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="025-030X050" package="C025-030X050">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="025-040X050" package="C025-040X050">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="025-050X050" package="C025-050X050">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="025-060X050" package="C025-060X050">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C025_050-024X070" package="C025_050-024X070">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="025_050-025X075" package="C025_050-025X075">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="025_050-035X075" package="C025_050-035X075">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="025_050-045X075" package="C025_050-045X075">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="025_050-055X075" package="C025_050-055X075">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="050-024X044" package="C050-024X044">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="050-025X075" package="C050-025X075">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="050-045X075" package="C050-045X075">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="050-030X075" package="C050-030X075">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="050-050X075" package="C050-050X075">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="050-055X075" package="C050-055X075">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="050-075X075" package="C050-075X075">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="050H075X075" package="C050H075X075">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="075-032X103" package="C075-032X103">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="075-042X103" package="C075-042X103">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="075-052X106" package="C075-052X106">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="102-043X133" package="C102-043X133">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="102-054X133" package="C102-054X133">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="102-064X133" package="C102-064X133">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="102_152-062X184" package="C102_152-062X184">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="150-054X183" package="C150-054X183">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="150-064X183" package="C150-064X183">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="150-072X183" package="C150-072X183">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="150-084X183" package="C150-084X183">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="150-091X182" package="C150-091X182">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="225-062X268" package="C225-062X268">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="225-074X268" package="C225-074X268">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="225-087X268" package="C225-087X268">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="225-108X268" package="C225-108X268">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="225-113X268" package="C225-113X268">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="275-093X316" package="C275-093X316">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="275-113X316" package="C275-113X316">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="275-134X316" package="C275-134X316">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="275-205X316" package="C275-205X316">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="325-137X374" package="C325-137X374">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="325-162X374" package="C325-162X374">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="325-182X374" package="C325-182X374">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="375-192X418" package="C375-192X418">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="375-203X418" package="C375-203X418">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="050-035X075" package="C050-035X075">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="375-155X418" package="C375-155X418">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="075-063X106" package="C075-063X106">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="275-154X316" package="C275-154X316">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="275-173X316" package="C275-173X316">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C0402K" package="C0402K">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C0603K" package="C0603K">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C0805K" package="C0805K">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C1206K" package="C1206K">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C1210K" package="C1210K">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C1812K" package="C1812K">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C1825K" package="C1825K">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C2220K" package="C2220K">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C2225K" package="C2225K">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="J80" package="J80">
+<connects>
+<connect gate="G$1" pin="1" pad="+"/>
+<connect gate="G$1" pin="2" pad="-"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="PLF1C271MDO1" package="PLF1C271MDO1">
+<connects>
+<connect gate="G$1" pin="1" pad="+"/>
+<connect gate="G$1" pin="2" pad="-"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="RR71C331MDN1" package="RR71C331MDN1">
+<connects>
+<connect gate="G$1" pin="1" pad="+"/>
+<connect gate="G$1" pin="2" pad="-"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="VS-12CWQ10FNPBF">
+<description><b>Schottky Rectifier, 2 x 6 A (diode)</b><br>
+datasheet at <a href="http://www.vishay.com/docs/94135/12cwq10f.pdf">http://www.vishay.com/docs/94135/12cwq10f.pdf</a></description>
+<gates>
+<gate name="G$1" symbol="DIODE_2" x="0" y="0"/>
+</gates>
+<devices>
+<device name="" package="D-PAK">
+<connects>
+<connect gate="G$1" pin="A" pad="ANODE$0"/>
+<connect gate="G$1" pin="A1" pad="ANODE$1"/>
+<connect gate="G$1" pin="C" pad="CATHODE"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+</devicesets>
+</library>
+<library name="resistor">
+<packages>
+<package name="C0402">
+<description><b>CAPACITOR</b><p>
+chip</description>
+<wire x1="-0.245" y1="0.224" x2="0.245" y2="0.224" width="0.1524" layer="51"/>
+<wire x1="0.245" y1="-0.224" x2="-0.245" y2="-0.224" width="0.1524" layer="51"/>
+<wire x1="-1.473" y1="0.483" x2="1.473" y2="0.483" width="0.0508" layer="39"/>
+<wire x1="1.473" y1="0.483" x2="1.473" y2="-0.483" width="0.0508" layer="39"/>
+<wire x1="1.473" y1="-0.483" x2="-1.473" y2="-0.483" width="0.0508" layer="39"/>
+<wire x1="-1.473" y1="-0.483" x2="-1.473" y2="0.483" width="0.0508" layer="39"/>
+<smd name="1" x="-0.65" y="0" dx="0.7" dy="0.9" layer="1"/>
+<smd name="2" x="0.65" y="0" dx="0.7" dy="0.9" layer="1"/>
+<text x="-0.635" y="0.762" size="1.27" layer="25">>NAME</text>
+<text x="-0.635" y="-1.905" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-0.554" y1="-0.3048" x2="-0.254" y2="0.2951" layer="51"/>
+<rectangle x1="0.2588" y1="-0.3048" x2="0.5588" y2="0.2951" layer="51"/>
+<rectangle x1="-0.1999" y1="-0.3" x2="0.1999" y2="0.3" layer="35"/>
+</package>
+<package name="C0504">
+<description><b>CAPACITOR</b><p>
+chip</description>
+<wire x1="-1.473" y1="0.983" x2="1.473" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="1.473" y1="0.983" x2="1.473" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="1.473" y1="-0.983" x2="-1.473" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="-1.473" y1="-0.983" x2="-1.473" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="-0.294" y1="0.559" x2="0.294" y2="0.559" width="0.1016" layer="51"/>
+<wire x1="-0.294" y1="-0.559" x2="0.294" y2="-0.559" width="0.1016" layer="51"/>
+<smd name="1" x="-0.7" y="0" dx="1" dy="1.3" layer="1"/>
+<smd name="2" x="0.7" y="0" dx="1" dy="1.3" layer="1"/>
+<text x="-0.635" y="0.889" size="1.27" layer="25">>NAME</text>
+<text x="-0.635" y="-2.159" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-0.6604" y1="-0.6223" x2="-0.2804" y2="0.6276" layer="51"/>
+<rectangle x1="0.2794" y1="-0.6223" x2="0.6594" y2="0.6276" layer="51"/>
+<rectangle x1="-0.1001" y1="-0.4001" x2="0.1001" y2="0.4001" layer="35"/>
+</package>
+<package name="C0603">
+<description><b>CAPACITOR</b><p>
+chip</description>
+<wire x1="-1.473" y1="0.983" x2="1.473" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="1.473" y1="0.983" x2="1.473" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="1.473" y1="-0.983" x2="-1.473" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="-1.473" y1="-0.983" x2="-1.473" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="-0.356" y1="0.432" x2="0.356" y2="0.432" width="0.1016" layer="51"/>
+<wire x1="-0.356" y1="-0.419" x2="0.356" y2="-0.419" width="0.1016" layer="51"/>
+<smd name="1" x="-0.85" y="0" dx="1.1" dy="1" layer="1"/>
+<smd name="2" x="0.85" y="0" dx="1.1" dy="1" layer="1"/>
+<text x="-0.889" y="0.762" size="1.27" layer="25">>NAME</text>
+<text x="-0.889" y="-2.032" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-0.8382" y1="-0.4699" x2="-0.3381" y2="0.4801" layer="51"/>
+<rectangle x1="0.3302" y1="-0.4699" x2="0.8303" y2="0.4801" layer="51"/>
+<rectangle x1="-0.1999" y1="-0.3" x2="0.1999" y2="0.3" layer="35"/>
+</package>
+<package name="C0805">
+<description><b>CAPACITOR</b><p>
+chip</description>
+<wire x1="-1.973" y1="0.983" x2="1.973" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="1.973" y1="-0.983" x2="-1.973" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="-1.973" y1="-0.983" x2="-1.973" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="-0.381" y1="0.66" x2="0.381" y2="0.66" width="0.1016" layer="51"/>
+<wire x1="-0.356" y1="-0.66" x2="0.381" y2="-0.66" width="0.1016" layer="51"/>
+<wire x1="1.973" y1="0.983" x2="1.973" y2="-0.983" width="0.0508" layer="39"/>
+<smd name="1" x="-0.85" y="0" dx="1.3" dy="1.5" layer="1"/>
+<smd name="2" x="0.85" y="0" dx="1.3" dy="1.5" layer="1"/>
+<text x="-0.889" y="1.016" size="1.27" layer="25">>NAME</text>
+<text x="-0.889" y="-2.286" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-1.0922" y1="-0.7239" x2="-0.3421" y2="0.7262" layer="51"/>
+<rectangle x1="0.3556" y1="-0.7239" x2="1.1057" y2="0.7262" layer="51"/>
+<rectangle x1="-0.1001" y1="-0.4001" x2="0.1001" y2="0.4001" layer="35"/>
+</package>
+<package name="C1005">
+<description><b>CAPACITOR</b><p>
+chip</description>
+<wire x1="-0.245" y1="0.224" x2="0.245" y2="0.224" width="0.1524" layer="51"/>
+<wire x1="0.245" y1="-0.224" x2="-0.245" y2="-0.224" width="0.1524" layer="51"/>
+<wire x1="-1.473" y1="0.483" x2="1.473" y2="0.483" width="0.0508" layer="39"/>
+<wire x1="1.473" y1="0.483" x2="1.473" y2="-0.483" width="0.0508" layer="39"/>
+<wire x1="1.473" y1="-0.483" x2="-1.473" y2="-0.483" width="0.0508" layer="39"/>
+<wire x1="-1.473" y1="-0.483" x2="-1.473" y2="0.483" width="0.0508" layer="39"/>
+<smd name="1" x="-0.65" y="0" dx="0.7" dy="0.9" layer="1"/>
+<smd name="2" x="0.65" y="0" dx="0.7" dy="0.9" layer="1"/>
+<text x="-0.635" y="0.762" size="1.27" layer="25">>NAME</text>
+<text x="-0.635" y="-1.905" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-0.554" y1="-0.3048" x2="-0.254" y2="0.2951" layer="51"/>
+<rectangle x1="0.2588" y1="-0.3048" x2="0.5588" y2="0.2951" layer="51"/>
+<rectangle x1="-0.1999" y1="-0.3" x2="0.1999" y2="0.3" layer="35"/>
+</package>
+<package name="C1206">
+<description><b>CAPACITOR</b><p>
+chip</description>
+<wire x1="-2.473" y1="0.983" x2="2.473" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="2.473" y1="-0.983" x2="-2.473" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="-2.473" y1="-0.983" x2="-2.473" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="2.473" y1="0.983" x2="2.473" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="-0.965" y1="0.787" x2="0.965" y2="0.787" width="0.1016" layer="51"/>
+<wire x1="-0.965" y1="-0.787" x2="0.965" y2="-0.787" width="0.1016" layer="51"/>
+<smd name="1" x="-1.4" y="0" dx="1.6" dy="1.8" layer="1"/>
+<smd name="2" x="1.4" y="0" dx="1.6" dy="1.8" layer="1"/>
+<text x="-1.27" y="1.143" size="1.27" layer="25">>NAME</text>
+<text x="-1.27" y="-2.413" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-1.7018" y1="-0.8509" x2="-0.9517" y2="0.8491" layer="51"/>
+<rectangle x1="0.9517" y1="-0.8491" x2="1.7018" y2="0.8509" layer="51"/>
+<rectangle x1="-0.1999" y1="-0.4001" x2="0.1999" y2="0.4001" layer="35"/>
+</package>
+<package name="C1210">
+<description><b>CAPACITOR</b><p>
+chip</description>
+<wire x1="-2.473" y1="1.483" x2="2.473" y2="1.483" width="0.0508" layer="39"/>
+<wire x1="2.473" y1="-1.483" x2="-2.473" y2="-1.483" width="0.0508" layer="39"/>
+<wire x1="-2.473" y1="-1.483" x2="-2.473" y2="1.483" width="0.0508" layer="39"/>
+<wire x1="-0.9652" y1="1.2446" x2="0.9652" y2="1.2446" width="0.1016" layer="51"/>
+<wire x1="-0.9652" y1="-1.2446" x2="0.9652" y2="-1.2446" width="0.1016" layer="51"/>
+<wire x1="2.473" y1="1.483" x2="2.473" y2="-1.483" width="0.0508" layer="39"/>
+<smd name="1" x="-1.4" y="0" dx="1.6" dy="2.7" layer="1"/>
+<smd name="2" x="1.4" y="0" dx="1.6" dy="2.7" layer="1"/>
+<text x="-1.397" y="1.651" size="1.27" layer="25">>NAME</text>
+<text x="-1.397" y="-2.921" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-1.7018" y1="-1.2954" x2="-0.9517" y2="1.3045" layer="51"/>
+<rectangle x1="0.9517" y1="-1.3045" x2="1.7018" y2="1.2954" layer="51"/>
+<rectangle x1="-0.1999" y1="-0.4001" x2="0.1999" y2="0.4001" layer="35"/>
+</package>
+<package name="C1310">
+<description><b>CAPACITOR</b><p>
+chip</description>
+<wire x1="-1.473" y1="0.983" x2="1.473" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="1.473" y1="0.983" x2="1.473" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="1.473" y1="-0.983" x2="-1.473" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="-1.473" y1="-0.983" x2="-1.473" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="-0.294" y1="0.559" x2="0.294" y2="0.559" width="0.1016" layer="51"/>
+<wire x1="-0.294" y1="-0.559" x2="0.294" y2="-0.559" width="0.1016" layer="51"/>
+<smd name="1" x="-0.7" y="0" dx="1" dy="1.3" layer="1"/>
+<smd name="2" x="0.7" y="0" dx="1" dy="1.3" layer="1"/>
+<text x="-0.635" y="0.889" size="1.27" layer="25">>NAME</text>
+<text x="-0.635" y="-2.159" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-0.6604" y1="-0.6223" x2="-0.2804" y2="0.6276" layer="51"/>
+<rectangle x1="0.2794" y1="-0.6223" x2="0.6594" y2="0.6276" layer="51"/>
+<rectangle x1="-0.1001" y1="-0.3" x2="0.1001" y2="0.3" layer="35"/>
+</package>
+<package name="C1608">
+<description><b>CAPACITOR</b><p>
+chip</description>
+<wire x1="-1.473" y1="0.983" x2="1.473" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="1.473" y1="0.983" x2="1.473" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="1.473" y1="-0.983" x2="-1.473" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="-1.473" y1="-0.983" x2="-1.473" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="-0.356" y1="0.432" x2="0.356" y2="0.432" width="0.1016" layer="51"/>
+<wire x1="-0.356" y1="-0.419" x2="0.356" y2="-0.419" width="0.1016" layer="51"/>
+<smd name="1" x="-0.85" y="0" dx="1.1" dy="1" layer="1"/>
+<smd name="2" x="0.85" y="0" dx="1.1" dy="1" layer="1"/>
+<text x="-0.635" y="0.762" size="1.27" layer="25">>NAME</text>
+<text x="-0.635" y="-2.032" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-0.8382" y1="-0.4699" x2="-0.3381" y2="0.4801" layer="51"/>
+<rectangle x1="0.3302" y1="-0.4699" x2="0.8303" y2="0.4801" layer="51"/>
+<rectangle x1="-0.1999" y1="-0.3" x2="0.1999" y2="0.3" layer="35"/>
+</package>
+<package name="C1812">
+<description><b>CAPACITOR</b><p>
+chip</description>
+<wire x1="-2.973" y1="1.983" x2="2.973" y2="1.983" width="0.0508" layer="39"/>
+<wire x1="2.973" y1="-1.983" x2="-2.973" y2="-1.983" width="0.0508" layer="39"/>
+<wire x1="-2.973" y1="-1.983" x2="-2.973" y2="1.983" width="0.0508" layer="39"/>
+<wire x1="-1.4732" y1="1.6002" x2="1.4732" y2="1.6002" width="0.1016" layer="51"/>
+<wire x1="-1.4478" y1="-1.6002" x2="1.4732" y2="-1.6002" width="0.1016" layer="51"/>
+<wire x1="2.973" y1="1.983" x2="2.973" y2="-1.983" width="0.0508" layer="39"/>
+<smd name="1" x="-1.95" y="0" dx="1.9" dy="3.4" layer="1"/>
+<smd name="2" x="1.95" y="0" dx="1.9" dy="3.4" layer="1"/>
+<text x="-1.905" y="1.905" size="1.27" layer="25">>NAME</text>
+<text x="-1.905" y="-3.175" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-2.3876" y1="-1.651" x2="-1.4376" y2="1.649" layer="51"/>
+<rectangle x1="1.4478" y1="-1.651" x2="2.3978" y2="1.649" layer="51"/>
+<rectangle x1="-0.3" y1="-0.4001" x2="0.3" y2="0.4001" layer="35"/>
+</package>
+<package name="C1825">
+<description><b>CAPACITOR</b><p>
+chip</description>
+<wire x1="-2.973" y1="3.483" x2="2.973" y2="3.483" width="0.0508" layer="39"/>
+<wire x1="2.973" y1="-3.483" x2="-2.973" y2="-3.483" width="0.0508" layer="39"/>
+<wire x1="-2.973" y1="-3.483" x2="-2.973" y2="3.483" width="0.0508" layer="39"/>
+<wire x1="-1.4986" y1="3.2766" x2="1.4732" y2="3.2766" width="0.1016" layer="51"/>
+<wire x1="-1.4732" y1="-3.2766" x2="1.4986" y2="-3.2766" width="0.1016" layer="51"/>
+<wire x1="2.973" y1="3.483" x2="2.973" y2="-3.483" width="0.0508" layer="39"/>
+<smd name="1" x="-1.95" y="0" dx="1.9" dy="6.8" layer="1"/>
+<smd name="2" x="1.95" y="0" dx="1.9" dy="6.8" layer="1"/>
+<text x="-1.905" y="3.683" size="1.27" layer="25">>NAME</text>
+<text x="-1.905" y="-4.826" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-2.413" y1="-3.3528" x2="-1.463" y2="3.3472" layer="51"/>
+<rectangle x1="1.4478" y1="-3.3528" x2="2.3978" y2="3.3472" layer="51"/>
+<rectangle x1="-0.7" y1="-0.7" x2="0.7" y2="0.7" layer="35"/>
+</package>
+<package name="C2012">
+<description><b>CAPACITOR</b><p>
+chip</description>
+<wire x1="-1.973" y1="0.983" x2="1.973" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="1.973" y1="0.983" x2="1.973" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="1.973" y1="-0.983" x2="-1.973" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="-1.973" y1="-0.983" x2="-1.973" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="-0.381" y1="0.66" x2="0.381" y2="0.66" width="0.1016" layer="51"/>
+<wire x1="-0.356" y1="-0.66" x2="0.381" y2="-0.66" width="0.1016" layer="51"/>
+<smd name="1" x="-0.85" y="0" dx="1.3" dy="1.5" layer="1"/>
+<smd name="2" x="0.85" y="0" dx="1.3" dy="1.5" layer="1"/>
+<text x="-0.889" y="1.016" size="1.27" layer="25">>NAME</text>
+<text x="-0.889" y="-2.286" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-1.0922" y1="-0.7239" x2="-0.3421" y2="0.7262" layer="51"/>
+<rectangle x1="0.3556" y1="-0.7239" x2="1.1057" y2="0.7262" layer="51"/>
+<rectangle x1="-0.1001" y1="-0.4001" x2="0.1001" y2="0.4001" layer="35"/>
+</package>
+<package name="C3216">
+<description><b>CAPACITOR</b><p>
+chip</description>
+<wire x1="-2.473" y1="0.983" x2="2.473" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="2.473" y1="-0.983" x2="-2.473" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="-2.473" y1="-0.983" x2="-2.473" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="2.473" y1="0.983" x2="2.473" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="-0.965" y1="0.787" x2="0.965" y2="0.787" width="0.1016" layer="51"/>
+<wire x1="-0.965" y1="-0.787" x2="0.965" y2="-0.787" width="0.1016" layer="51"/>
+<smd name="1" x="-1.4" y="0" dx="1.6" dy="1.8" layer="1"/>
+<smd name="2" x="1.4" y="0" dx="1.6" dy="1.8" layer="1"/>
+<text x="-1.27" y="1.143" size="1.27" layer="25">>NAME</text>
+<text x="-1.27" y="-2.413" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-1.7018" y1="-0.8509" x2="-0.9517" y2="0.8491" layer="51"/>
+<rectangle x1="0.9517" y1="-0.8491" x2="1.7018" y2="0.8509" layer="51"/>
+<rectangle x1="-0.3" y1="-0.5001" x2="0.3" y2="0.5001" layer="35"/>
+</package>
+<package name="C3225">
+<description><b>CAPACITOR</b><p>
+chip</description>
+<wire x1="-2.473" y1="1.483" x2="2.473" y2="1.483" width="0.0508" layer="39"/>
+<wire x1="2.473" y1="-1.483" x2="-2.473" y2="-1.483" width="0.0508" layer="39"/>
+<wire x1="-2.473" y1="-1.483" x2="-2.473" y2="1.483" width="0.0508" layer="39"/>
+<wire x1="-0.9652" y1="1.2446" x2="0.9652" y2="1.2446" width="0.1016" layer="51"/>
+<wire x1="-0.9652" y1="-1.2446" x2="0.9652" y2="-1.2446" width="0.1016" layer="51"/>
+<wire x1="2.473" y1="1.483" x2="2.473" y2="-1.483" width="0.0508" layer="39"/>
+<smd name="1" x="-1.4" y="0" dx="1.6" dy="2.7" layer="1"/>
+<smd name="2" x="1.4" y="0" dx="1.6" dy="2.7" layer="1"/>
+<text x="-1.397" y="1.651" size="1.27" layer="25">>NAME</text>
+<text x="-1.397" y="-2.921" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-1.7018" y1="-1.2954" x2="-0.9517" y2="1.3045" layer="51"/>
+<rectangle x1="0.9517" y1="-1.3045" x2="1.7018" y2="1.2954" layer="51"/>
+<rectangle x1="-0.1999" y1="-0.5001" x2="0.1999" y2="0.5001" layer="35"/>
+</package>
+<package name="C4532">
+<description><b>CAPACITOR</b><p>
+chip</description>
+<wire x1="-2.973" y1="1.983" x2="2.973" y2="1.983" width="0.0508" layer="39"/>
+<wire x1="2.973" y1="-1.983" x2="-2.973" y2="-1.983" width="0.0508" layer="39"/>
+<wire x1="-2.973" y1="-1.983" x2="-2.973" y2="1.983" width="0.0508" layer="39"/>
+<wire x1="-1.4732" y1="1.6002" x2="1.4732" y2="1.6002" width="0.1016" layer="51"/>
+<wire x1="-1.4478" y1="-1.6002" x2="1.4732" y2="-1.6002" width="0.1016" layer="51"/>
+<wire x1="2.973" y1="1.983" x2="2.973" y2="-1.983" width="0.0508" layer="39"/>
+<smd name="1" x="-1.95" y="0" dx="1.9" dy="3.4" layer="1"/>
+<smd name="2" x="1.95" y="0" dx="1.9" dy="3.4" layer="1"/>
+<text x="-1.905" y="2.032" size="1.27" layer="25">>NAME</text>
+<text x="-1.905" y="-3.175" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-2.3876" y1="-1.651" x2="-1.4376" y2="1.649" layer="51"/>
+<rectangle x1="1.4478" y1="-1.651" x2="2.3978" y2="1.649" layer="51"/>
+<rectangle x1="-0.4001" y1="-0.7" x2="0.4001" y2="0.7" layer="35"/>
+</package>
+<package name="C4564">
+<description><b>CAPACITOR</b><p>
+chip</description>
+<wire x1="-2.973" y1="3.483" x2="2.973" y2="3.483" width="0.0508" layer="39"/>
+<wire x1="2.973" y1="-3.483" x2="-2.973" y2="-3.483" width="0.0508" layer="39"/>
+<wire x1="-2.973" y1="-3.483" x2="-2.973" y2="3.483" width="0.0508" layer="39"/>
+<wire x1="-1.4986" y1="3.2766" x2="1.4732" y2="3.2766" width="0.1016" layer="51"/>
+<wire x1="-1.4732" y1="-3.2766" x2="1.4986" y2="-3.2766" width="0.1016" layer="51"/>
+<wire x1="2.973" y1="3.483" x2="2.973" y2="-3.483" width="0.0508" layer="39"/>
+<smd name="1" x="-1.95" y="0" dx="1.9" dy="6.8" layer="1"/>
+<smd name="2" x="1.95" y="0" dx="1.9" dy="6.8" layer="1"/>
+<text x="-1.905" y="3.683" size="1.27" layer="25">>NAME</text>
+<text x="-1.905" y="-4.826" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-2.413" y1="-3.3528" x2="-1.463" y2="3.3472" layer="51"/>
+<rectangle x1="1.4478" y1="-3.3528" x2="2.3978" y2="3.3472" layer="51"/>
+<rectangle x1="-0.5001" y1="-1" x2="0.5001" y2="1" layer="35"/>
+</package>
+<package name="C025-024X044">
+<description><b>CAPACITOR</b><p>
+grid 2.5 mm, outline 2.4 x 4.4 mm</description>
+<wire x1="-2.159" y1="-0.635" x2="-2.159" y2="0.635" width="0.1524" layer="21"/>
+<wire x1="-2.159" y1="0.635" x2="-1.651" y2="1.143" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-2.159" y1="-0.635" x2="-1.651" y2="-1.143" width="0.1524" layer="21" curve="90"/>
+<wire x1="1.651" y1="1.143" x2="-1.651" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="-0.635" x2="2.159" y2="0.635" width="0.1524" layer="21"/>
+<wire x1="1.651" y1="-1.143" x2="-1.651" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="1.651" y1="1.143" x2="2.159" y2="0.635" width="0.1524" layer="21" curve="-90"/>
+<wire x1="1.651" y1="-1.143" x2="2.159" y2="-0.635" width="0.1524" layer="21" curve="90"/>
+<wire x1="-0.3048" y1="0.762" x2="-0.3048" y2="-0.762" width="0.3048" layer="21"/>
+<wire x1="0.3302" y1="0.762" x2="0.3302" y2="-0.762" width="0.3048" layer="21"/>
+<wire x1="1.27" y1="0" x2="0.3302" y2="0" width="0.1524" layer="51"/>
+<wire x1="-1.27" y1="0" x2="-0.3048" y2="0" width="0.1524" layer="51"/>
+<pad name="1" x="-1.27" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="1.27" y="0" drill="0.8128" shape="octagon"/>
+<text x="-1.778" y="1.397" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-1.778" y="-2.667" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C025-025X050">
+<description><b>CAPACITOR</b><p>
+grid 2.5 mm, outline 2.5 x 5 mm</description>
+<wire x1="-2.159" y1="1.27" x2="2.159" y2="1.27" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="-1.27" x2="-2.159" y2="-1.27" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="1.016" x2="2.413" y2="-1.016" width="0.1524" layer="21"/>
+<wire x1="-2.413" y1="1.016" x2="-2.413" y2="-1.016" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="1.27" x2="2.413" y2="1.016" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-2.413" y1="1.016" x2="-2.159" y2="1.27" width="0.1524" layer="21" curve="-90"/>
+<wire x1="2.159" y1="-1.27" x2="2.413" y2="-1.016" width="0.1524" layer="21" curve="90"/>
+<wire x1="-2.413" y1="-1.016" x2="-2.159" y2="-1.27" width="0.1524" layer="21" curve="90"/>
+<wire x1="0.762" y1="0" x2="0.381" y2="0" width="0.1524" layer="51"/>
+<wire x1="0.381" y1="0" x2="0.254" y2="0" width="0.1524" layer="21"/>
+<wire x1="0.254" y1="0" x2="0.254" y2="0.762" width="0.254" layer="21"/>
+<wire x1="0.254" y1="0" x2="0.254" y2="-0.762" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0.762" x2="-0.254" y2="0" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0" x2="-0.254" y2="-0.762" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0" x2="-0.381" y2="0" width="0.1524" layer="21"/>
+<wire x1="-0.381" y1="0" x2="-0.762" y2="0" width="0.1524" layer="51"/>
+<pad name="1" x="-1.27" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="1.27" y="0" drill="0.8128" shape="octagon"/>
+<text x="-2.286" y="1.524" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-2.286" y="-2.794" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C025-030X050">
+<description><b>CAPACITOR</b><p>
+grid 2.5 mm, outline 3 x 5 mm</description>
+<wire x1="-2.159" y1="1.524" x2="2.159" y2="1.524" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="-1.524" x2="-2.159" y2="-1.524" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="1.27" x2="2.413" y2="-1.27" width="0.1524" layer="21"/>
+<wire x1="-2.413" y1="1.27" x2="-2.413" y2="-1.27" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="1.524" x2="2.413" y2="1.27" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-2.413" y1="1.27" x2="-2.159" y2="1.524" width="0.1524" layer="21" curve="-90"/>
+<wire x1="2.159" y1="-1.524" x2="2.413" y2="-1.27" width="0.1524" layer="21" curve="90"/>
+<wire x1="-2.413" y1="-1.27" x2="-2.159" y2="-1.524" width="0.1524" layer="21" curve="90"/>
+<wire x1="0.762" y1="0" x2="0.381" y2="0" width="0.1524" layer="51"/>
+<wire x1="0.381" y1="0" x2="0.254" y2="0" width="0.1524" layer="21"/>
+<wire x1="0.254" y1="0" x2="0.254" y2="0.762" width="0.254" layer="21"/>
+<wire x1="0.254" y1="0" x2="0.254" y2="-0.762" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0.762" x2="-0.254" y2="0" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0" x2="-0.254" y2="-0.762" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0" x2="-0.381" y2="0" width="0.1524" layer="21"/>
+<wire x1="-0.381" y1="0" x2="-0.762" y2="0" width="0.1524" layer="51"/>
+<pad name="1" x="-1.27" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="1.27" y="0" drill="0.8128" shape="octagon"/>
+<text x="-2.286" y="1.905" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-2.286" y="-3.048" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C025-040X050">
+<description><b>CAPACITOR</b><p>
+grid 2.5 mm, outline 4 x 5 mm</description>
+<wire x1="-2.159" y1="1.905" x2="2.159" y2="1.905" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="-1.905" x2="-2.159" y2="-1.905" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="1.651" x2="2.413" y2="-1.651" width="0.1524" layer="21"/>
+<wire x1="-2.413" y1="1.651" x2="-2.413" y2="-1.651" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="1.905" x2="2.413" y2="1.651" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-2.413" y1="1.651" x2="-2.159" y2="1.905" width="0.1524" layer="21" curve="-90"/>
+<wire x1="2.159" y1="-1.905" x2="2.413" y2="-1.651" width="0.1524" layer="21" curve="90"/>
+<wire x1="-2.413" y1="-1.651" x2="-2.159" y2="-1.905" width="0.1524" layer="21" curve="90"/>
+<wire x1="0.762" y1="0" x2="0.381" y2="0" width="0.1524" layer="51"/>
+<wire x1="0.381" y1="0" x2="0.254" y2="0" width="0.1524" layer="21"/>
+<wire x1="0.254" y1="0" x2="0.254" y2="0.762" width="0.254" layer="21"/>
+<wire x1="0.254" y1="0" x2="0.254" y2="-0.762" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0.762" x2="-0.254" y2="0" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0" x2="-0.254" y2="-0.762" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0" x2="-0.381" y2="0" width="0.1524" layer="21"/>
+<wire x1="-0.381" y1="0" x2="-0.762" y2="0" width="0.1524" layer="51"/>
+<pad name="1" x="-1.27" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="1.27" y="0" drill="0.8128" shape="octagon"/>
+<text x="-2.286" y="2.159" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-2.286" y="-3.429" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C025-050X050">
+<description><b>CAPACITOR</b><p>
+grid 2.5 mm, outline 5 x 5 mm</description>
+<wire x1="-2.159" y1="2.286" x2="2.159" y2="2.286" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="-2.286" x2="-2.159" y2="-2.286" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="2.032" x2="2.413" y2="-2.032" width="0.1524" layer="21"/>
+<wire x1="-2.413" y1="2.032" x2="-2.413" y2="-2.032" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="2.286" x2="2.413" y2="2.032" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-2.413" y1="2.032" x2="-2.159" y2="2.286" width="0.1524" layer="21" curve="-90"/>
+<wire x1="2.159" y1="-2.286" x2="2.413" y2="-2.032" width="0.1524" layer="21" curve="90"/>
+<wire x1="-2.413" y1="-2.032" x2="-2.159" y2="-2.286" width="0.1524" layer="21" curve="90"/>
+<wire x1="0.762" y1="0" x2="0.381" y2="0" width="0.1524" layer="51"/>
+<wire x1="0.381" y1="0" x2="0.254" y2="0" width="0.1524" layer="21"/>
+<wire x1="0.254" y1="0" x2="0.254" y2="0.762" width="0.254" layer="21"/>
+<wire x1="0.254" y1="0" x2="0.254" y2="-0.762" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0.762" x2="-0.254" y2="0" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0" x2="-0.254" y2="-0.762" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0" x2="-0.381" y2="0" width="0.1524" layer="21"/>
+<wire x1="-0.381" y1="0" x2="-0.762" y2="0" width="0.1524" layer="51"/>
+<pad name="1" x="-1.27" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="1.27" y="0" drill="0.8128" shape="octagon"/>
+<text x="-2.286" y="2.54" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-2.286" y="-3.81" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C025-060X050">
+<description><b>CAPACITOR</b><p>
+grid 2.5 mm, outline 6 x 5 mm</description>
+<wire x1="-2.159" y1="2.794" x2="2.159" y2="2.794" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="-2.794" x2="-2.159" y2="-2.794" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="2.54" x2="2.413" y2="-2.54" width="0.1524" layer="21"/>
+<wire x1="-2.413" y1="2.54" x2="-2.413" y2="-2.54" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="2.794" x2="2.413" y2="2.54" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-2.413" y1="2.54" x2="-2.159" y2="2.794" width="0.1524" layer="21" curve="-90"/>
+<wire x1="2.159" y1="-2.794" x2="2.413" y2="-2.54" width="0.1524" layer="21" curve="90"/>
+<wire x1="-2.413" y1="-2.54" x2="-2.159" y2="-2.794" width="0.1524" layer="21" curve="90"/>
+<wire x1="0.762" y1="0" x2="0.381" y2="0" width="0.1524" layer="51"/>
+<wire x1="0.381" y1="0" x2="0.254" y2="0" width="0.1524" layer="21"/>
+<wire x1="0.254" y1="0" x2="0.254" y2="0.762" width="0.254" layer="21"/>
+<wire x1="0.254" y1="0" x2="0.254" y2="-0.762" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0.762" x2="-0.254" y2="0" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0" x2="-0.254" y2="-0.762" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0" x2="-0.381" y2="0" width="0.1524" layer="21"/>
+<wire x1="-0.381" y1="0" x2="-0.762" y2="0" width="0.1524" layer="51"/>
+<pad name="1" x="-1.27" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="1.27" y="0" drill="0.8128" shape="octagon"/>
+<text x="-2.286" y="3.048" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-2.032" y="-2.413" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C025_050-024X070">
+<description><b>CAPACITOR</b><p>
+grid 2.5 mm + 5 mm, outline 2.4 x 7 mm</description>
+<wire x1="-2.159" y1="-0.635" x2="-2.159" y2="0.635" width="0.1524" layer="51"/>
+<wire x1="-2.159" y1="0.635" x2="-1.651" y2="1.143" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-2.159" y1="-0.635" x2="-1.651" y2="-1.143" width="0.1524" layer="21" curve="90"/>
+<wire x1="1.651" y1="1.143" x2="-1.651" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="-0.635" x2="2.159" y2="0.635" width="0.1524" layer="51"/>
+<wire x1="1.651" y1="-1.143" x2="-1.651" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="1.651" y1="1.143" x2="2.159" y2="0.635" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-4.191" y1="-1.143" x2="-3.9624" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="-4.191" y1="1.143" x2="-3.9624" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="-4.699" y1="-0.635" x2="-4.191" y2="-1.143" width="0.1524" layer="21" curve="90"/>
+<wire x1="1.651" y1="-1.143" x2="2.159" y2="-0.635" width="0.1524" layer="21" curve="90"/>
+<wire x1="-4.699" y1="0.635" x2="-4.191" y2="1.143" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-4.699" y1="-0.635" x2="-4.699" y2="0.635" width="0.1524" layer="21"/>
+<wire x1="-3.429" y1="1.143" x2="-2.5654" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="-3.429" y1="-1.143" x2="-2.5654" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="-0.3048" y1="0.762" x2="-0.3048" y2="-0.762" width="0.3048" layer="21"/>
+<wire x1="0.3302" y1="0.762" x2="0.3302" y2="-0.762" width="0.3048" layer="21"/>
+<wire x1="1.27" y1="0" x2="0.3302" y2="0" width="0.1524" layer="51"/>
+<wire x1="-1.27" y1="0" x2="-0.3048" y2="0" width="0.1524" layer="51"/>
+<pad name="1" x="-3.81" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="-1.27" y="0" drill="0.8128" shape="octagon"/>
+<pad name="3" x="1.27" y="0" drill="0.8128" shape="octagon"/>
+<text x="-3.81" y="1.397" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-3.81" y="-2.667" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C025_050-025X075">
+<description><b>CAPACITOR</b><p>
+grid 2.5 + 5 mm, outline 2.5 x 7.5 mm</description>
+<wire x1="-2.159" y1="1.27" x2="2.159" y2="1.27" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="-1.27" x2="-2.159" y2="-1.27" width="0.1524" layer="21"/>
+<wire x1="-2.413" y1="1.016" x2="-2.413" y2="-1.016" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="1.27" x2="2.413" y2="1.016" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-2.413" y1="1.016" x2="-2.159" y2="1.27" width="0.1524" layer="21" curve="-90"/>
+<wire x1="2.159" y1="-1.27" x2="2.413" y2="-1.016" width="0.1524" layer="21" curve="90"/>
+<wire x1="-2.413" y1="-1.016" x2="-2.159" y2="-1.27" width="0.1524" layer="21" curve="90"/>
+<wire x1="0.381" y1="0" x2="0.254" y2="0" width="0.1524" layer="21"/>
+<wire x1="0.254" y1="0" x2="0.254" y2="0.762" width="0.254" layer="21"/>
+<wire x1="0.254" y1="0" x2="0.254" y2="-0.762" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0.762" x2="-0.254" y2="0" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0" x2="-0.254" y2="-0.762" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0" x2="-0.381" y2="0" width="0.1524" layer="21"/>
+<wire x1="-0.381" y1="0" x2="-0.762" y2="0" width="0.1524" layer="51"/>
+<wire x1="4.953" y1="1.016" x2="4.953" y2="-1.016" width="0.1524" layer="21"/>
+<wire x1="4.699" y1="1.27" x2="4.953" y2="1.016" width="0.1524" layer="21" curve="-90"/>
+<wire x1="4.699" y1="-1.27" x2="4.953" y2="-1.016" width="0.1524" layer="21" curve="90"/>
+<wire x1="2.794" y1="1.27" x2="4.699" y2="1.27" width="0.1524" layer="21"/>
+<wire x1="4.699" y1="-1.27" x2="2.794" y2="-1.27" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="1.016" x2="2.413" y2="0.762" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="-0.762" x2="2.413" y2="-1.016" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="0.254" x2="2.413" y2="-0.254" width="0.1524" layer="21"/>
+<wire x1="1.778" y1="0" x2="2.286" y2="0" width="0.1524" layer="51"/>
+<wire x1="2.286" y1="0" x2="2.794" y2="0" width="0.1524" layer="21"/>
+<wire x1="2.794" y1="0" x2="3.302" y2="0" width="0.1524" layer="51"/>
+<wire x1="0.762" y1="0" x2="0.381" y2="0" width="0.1524" layer="51"/>
+<pad name="1" x="-1.27" y="0" drill="0.8128" shape="octagon"/>
+<pad name="3" x="3.81" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="1.27" y="0" drill="0.8128" shape="octagon"/>
+<text x="-2.159" y="1.651" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-2.159" y="-2.794" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C025_050-035X075">
+<description><b>CAPACITOR</b><p>
+grid 2.5 + 5 mm, outline 3.5 x 7.5 mm</description>
+<wire x1="-2.159" y1="1.778" x2="2.159" y2="1.778" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="-1.778" x2="-2.159" y2="-1.778" width="0.1524" layer="21"/>
+<wire x1="-2.413" y1="1.524" x2="-2.413" y2="-1.524" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="1.778" x2="2.413" y2="1.524" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-2.413" y1="1.524" x2="-2.159" y2="1.778" width="0.1524" layer="21" curve="-90"/>
+<wire x1="2.159" y1="-1.778" x2="2.413" y2="-1.524" width="0.1524" layer="21" curve="90"/>
+<wire x1="-2.413" y1="-1.524" x2="-2.159" y2="-1.778" width="0.1524" layer="21" curve="90"/>
+<wire x1="0.381" y1="0" x2="0.254" y2="0" width="0.1524" layer="21"/>
+<wire x1="0.254" y1="0" x2="0.254" y2="0.762" width="0.254" layer="21"/>
+<wire x1="0.254" y1="0" x2="0.254" y2="-0.762" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0.762" x2="-0.254" y2="0" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0" x2="-0.254" y2="-0.762" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0" x2="-0.381" y2="0" width="0.1524" layer="21"/>
+<wire x1="-0.381" y1="0" x2="-0.762" y2="0" width="0.1524" layer="51"/>
+<wire x1="4.953" y1="1.524" x2="4.953" y2="-1.524" width="0.1524" layer="21"/>
+<wire x1="4.699" y1="1.778" x2="4.953" y2="1.524" width="0.1524" layer="21" curve="-90"/>
+<wire x1="4.699" y1="-1.778" x2="4.953" y2="-1.524" width="0.1524" layer="21" curve="90"/>
+<wire x1="2.794" y1="1.778" x2="4.699" y2="1.778" width="0.1524" layer="21"/>
+<wire x1="4.699" y1="-1.778" x2="2.794" y2="-1.778" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="1.524" x2="2.413" y2="1.016" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="-1.016" x2="2.413" y2="-1.524" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="0.508" x2="2.413" y2="-0.508" width="0.1524" layer="21"/>
+<wire x1="0.381" y1="0" x2="0.762" y2="0" width="0.1524" layer="51"/>
+<wire x1="2.286" y1="0" x2="2.794" y2="0" width="0.1524" layer="21"/>
+<wire x1="2.794" y1="0" x2="3.302" y2="0" width="0.1524" layer="51"/>
+<wire x1="2.286" y1="0" x2="1.778" y2="0" width="0.1524" layer="51"/>
+<pad name="1" x="-1.27" y="0" drill="0.8128" shape="octagon"/>
+<pad name="3" x="3.81" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="1.27" y="0" drill="0.8128" shape="octagon"/>
+<text x="-2.286" y="2.159" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-2.286" y="-3.302" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C025_050-045X075">
+<description><b>CAPACITOR</b><p>
+grid 2.5 + 5 mm, outline 4.5 x 7.5 mm</description>
+<wire x1="-2.159" y1="2.286" x2="2.159" y2="2.286" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="-2.286" x2="-2.159" y2="-2.286" width="0.1524" layer="21"/>
+<wire x1="-2.413" y1="2.032" x2="-2.413" y2="-2.032" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="2.286" x2="2.413" y2="2.032" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-2.413" y1="2.032" x2="-2.159" y2="2.286" width="0.1524" layer="21" curve="-90"/>
+<wire x1="2.159" y1="-2.286" x2="2.413" y2="-2.032" width="0.1524" layer="21" curve="90"/>
+<wire x1="-2.413" y1="-2.032" x2="-2.159" y2="-2.286" width="0.1524" layer="21" curve="90"/>
+<wire x1="0.381" y1="0" x2="0.254" y2="0" width="0.1524" layer="21"/>
+<wire x1="0.254" y1="0" x2="0.254" y2="0.762" width="0.254" layer="21"/>
+<wire x1="0.254" y1="0" x2="0.254" y2="-0.762" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0.762" x2="-0.254" y2="0" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0" x2="-0.254" y2="-0.762" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0" x2="-0.381" y2="0" width="0.1524" layer="21"/>
+<wire x1="-0.381" y1="0" x2="-0.762" y2="0" width="0.1524" layer="51"/>
+<wire x1="4.953" y1="2.032" x2="4.953" y2="-2.032" width="0.1524" layer="21"/>
+<wire x1="4.699" y1="2.286" x2="4.953" y2="2.032" width="0.1524" layer="21" curve="-90"/>
+<wire x1="4.699" y1="-2.286" x2="4.953" y2="-2.032" width="0.1524" layer="21" curve="90"/>
+<wire x1="2.794" y1="2.286" x2="4.699" y2="2.286" width="0.1524" layer="21"/>
+<wire x1="4.699" y1="-2.286" x2="2.794" y2="-2.286" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="2.032" x2="2.413" y2="1.397" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="-1.397" x2="2.413" y2="-2.032" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="0.762" x2="2.413" y2="-0.762" width="0.1524" layer="21"/>
+<wire x1="2.286" y1="0" x2="2.794" y2="0" width="0.1524" layer="21"/>
+<wire x1="2.794" y1="0" x2="3.302" y2="0" width="0.1524" layer="51"/>
+<wire x1="0.381" y1="0" x2="0.762" y2="0" width="0.1524" layer="51"/>
+<wire x1="2.286" y1="0" x2="1.778" y2="0" width="0.1524" layer="51"/>
+<pad name="1" x="-1.27" y="0" drill="0.8128" shape="octagon"/>
+<pad name="3" x="3.81" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="1.27" y="0" drill="0.8128" shape="octagon"/>
+<text x="-2.286" y="2.667" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-2.286" y="-3.81" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C025_050-055X075">
+<description><b>CAPACITOR</b><p>
+grid 2.5 + 5 mm, outline 5.5 x 7.5 mm</description>
+<wire x1="-2.159" y1="2.794" x2="2.159" y2="2.794" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="-2.794" x2="-2.159" y2="-2.794" width="0.1524" layer="21"/>
+<wire x1="-2.413" y1="2.54" x2="-2.413" y2="-2.54" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="2.794" x2="2.413" y2="2.54" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-2.413" y1="2.54" x2="-2.159" y2="2.794" width="0.1524" layer="21" curve="-90"/>
+<wire x1="2.159" y1="-2.794" x2="2.413" y2="-2.54" width="0.1524" layer="21" curve="90"/>
+<wire x1="-2.413" y1="-2.54" x2="-2.159" y2="-2.794" width="0.1524" layer="21" curve="90"/>
+<wire x1="0.381" y1="0" x2="0.254" y2="0" width="0.1524" layer="21"/>
+<wire x1="0.254" y1="0" x2="0.254" y2="0.762" width="0.254" layer="21"/>
+<wire x1="0.254" y1="0" x2="0.254" y2="-0.762" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0.762" x2="-0.254" y2="0" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0" x2="-0.254" y2="-0.762" width="0.254" layer="21"/>
+<wire x1="-0.254" y1="0" x2="-0.381" y2="0" width="0.1524" layer="21"/>
+<wire x1="-0.381" y1="0" x2="-0.762" y2="0" width="0.1524" layer="51"/>
+<wire x1="4.953" y1="2.54" x2="4.953" y2="-2.54" width="0.1524" layer="21"/>
+<wire x1="4.699" y1="2.794" x2="4.953" y2="2.54" width="0.1524" layer="21" curve="-90"/>
+<wire x1="4.699" y1="-2.794" x2="4.953" y2="-2.54" width="0.1524" layer="21" curve="90"/>
+<wire x1="2.794" y1="2.794" x2="4.699" y2="2.794" width="0.1524" layer="21"/>
+<wire x1="4.699" y1="-2.794" x2="2.794" y2="-2.794" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="2.54" x2="2.413" y2="2.032" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="-2.032" x2="2.413" y2="-2.54" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="0.762" x2="2.413" y2="-0.762" width="0.1524" layer="21"/>
+<wire x1="1.778" y1="0" x2="2.286" y2="0" width="0.1524" layer="51"/>
+<wire x1="2.286" y1="0" x2="2.794" y2="0" width="0.1524" layer="21"/>
+<wire x1="2.794" y1="0" x2="3.302" y2="0" width="0.1524" layer="51"/>
+<wire x1="0.381" y1="0" x2="0.762" y2="0" width="0.1524" layer="51"/>
+<pad name="1" x="-1.27" y="0" drill="0.8128" shape="octagon"/>
+<pad name="3" x="3.81" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="1.27" y="0" drill="0.8128" shape="octagon"/>
+<text x="-2.286" y="3.175" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-2.032" y="-2.286" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C050-024X044">
+<description><b>CAPACITOR</b><p>
+grid 5 mm, outline 2.4 x 4.4 mm</description>
+<wire x1="-2.159" y1="-0.635" x2="-2.159" y2="0.635" width="0.1524" layer="51"/>
+<wire x1="-2.159" y1="0.635" x2="-1.651" y2="1.143" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-2.159" y1="-0.635" x2="-1.651" y2="-1.143" width="0.1524" layer="21" curve="90"/>
+<wire x1="1.651" y1="1.143" x2="-1.651" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="2.159" y1="-0.635" x2="2.159" y2="0.635" width="0.1524" layer="51"/>
+<wire x1="1.651" y1="-1.143" x2="-1.651" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="1.651" y1="1.143" x2="2.159" y2="0.635" width="0.1524" layer="21" curve="-90"/>
+<wire x1="1.651" y1="-1.143" x2="2.159" y2="-0.635" width="0.1524" layer="21" curve="90"/>
+<wire x1="-0.3048" y1="0.762" x2="-0.3048" y2="0" width="0.3048" layer="21"/>
+<wire x1="-0.3048" y1="0" x2="-0.3048" y2="-0.762" width="0.3048" layer="21"/>
+<wire x1="0.3302" y1="0.762" x2="0.3302" y2="0" width="0.3048" layer="21"/>
+<wire x1="0.3302" y1="0" x2="0.3302" y2="-0.762" width="0.3048" layer="21"/>
+<wire x1="1.27" y1="0" x2="0.3302" y2="0" width="0.1524" layer="21"/>
+<wire x1="-1.27" y1="0" x2="-0.3048" y2="0" width="0.1524" layer="21"/>
+<pad name="1" x="-2.54" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="2.54" y="0" drill="0.8128" shape="octagon"/>
+<text x="-2.159" y="1.397" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-2.159" y="-2.667" size="1.27" layer="27" ratio="10">>VALUE</text>
+<rectangle x1="2.159" y1="-0.381" x2="2.54" y2="0.381" layer="51"/>
+<rectangle x1="-2.54" y1="-0.381" x2="-2.159" y2="0.381" layer="51"/>
+</package>
+<package name="C050-025X075">
+<description><b>CAPACITOR</b><p>
+grid 5 mm, outline 2.5 x 7.5 mm</description>
+<wire x1="-0.3048" y1="0.635" x2="-0.3048" y2="0" width="0.3048" layer="21"/>
+<wire x1="-0.3048" y1="0" x2="-0.3048" y2="-0.635" width="0.3048" layer="21"/>
+<wire x1="-0.3048" y1="0" x2="-1.524" y2="0" width="0.1524" layer="21"/>
+<wire x1="0.3302" y1="0.635" x2="0.3302" y2="0" width="0.3048" layer="21"/>
+<wire x1="0.3302" y1="0" x2="0.3302" y2="-0.635" width="0.3048" layer="21"/>
+<wire x1="0.3302" y1="0" x2="1.524" y2="0" width="0.1524" layer="21"/>
+<wire x1="-3.683" y1="1.016" x2="-3.683" y2="-1.016" width="0.1524" layer="21"/>
+<wire x1="-3.429" y1="-1.27" x2="3.429" y2="-1.27" width="0.1524" layer="21"/>
+<wire x1="3.683" y1="-1.016" x2="3.683" y2="1.016" width="0.1524" layer="21"/>
+<wire x1="3.429" y1="1.27" x2="-3.429" y2="1.27" width="0.1524" layer="21"/>
+<wire x1="3.429" y1="1.27" x2="3.683" y2="1.016" width="0.1524" layer="21" curve="-90"/>
+<wire x1="3.429" y1="-1.27" x2="3.683" y2="-1.016" width="0.1524" layer="21" curve="90"/>
+<wire x1="-3.683" y1="-1.016" x2="-3.429" y2="-1.27" width="0.1524" layer="21" curve="90"/>
+<wire x1="-3.683" y1="1.016" x2="-3.429" y2="1.27" width="0.1524" layer="21" curve="-90"/>
+<pad name="1" x="-2.54" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="2.54" y="0" drill="0.8128" shape="octagon"/>
+<text x="-3.429" y="1.651" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-3.429" y="-2.794" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C050-045X075">
+<description><b>CAPACITOR</b><p>
+grid 5 mm, outline 4.5 x 7.5 mm</description>
+<wire x1="-0.3048" y1="0.635" x2="-0.3048" y2="0" width="0.3048" layer="21"/>
+<wire x1="-0.3048" y1="0" x2="-0.3048" y2="-0.635" width="0.3048" layer="21"/>
+<wire x1="-0.3048" y1="0" x2="-1.524" y2="0" width="0.1524" layer="21"/>
+<wire x1="0.3302" y1="0.635" x2="0.3302" y2="0" width="0.3048" layer="21"/>
+<wire x1="0.3302" y1="0" x2="0.3302" y2="-0.635" width="0.3048" layer="21"/>
+<wire x1="0.3302" y1="0" x2="1.524" y2="0" width="0.1524" layer="21"/>
+<wire x1="-3.683" y1="2.032" x2="-3.683" y2="-2.032" width="0.1524" layer="21"/>
+<wire x1="-3.429" y1="-2.286" x2="3.429" y2="-2.286" width="0.1524" layer="21"/>
+<wire x1="3.683" y1="-2.032" x2="3.683" y2="2.032" width="0.1524" layer="21"/>
+<wire x1="3.429" y1="2.286" x2="-3.429" y2="2.286" width="0.1524" layer="21"/>
+<wire x1="3.429" y1="2.286" x2="3.683" y2="2.032" width="0.1524" layer="21" curve="-90"/>
+<wire x1="3.429" y1="-2.286" x2="3.683" y2="-2.032" width="0.1524" layer="21" curve="90"/>
+<wire x1="-3.683" y1="-2.032" x2="-3.429" y2="-2.286" width="0.1524" layer="21" curve="90"/>
+<wire x1="-3.683" y1="2.032" x2="-3.429" y2="2.286" width="0.1524" layer="21" curve="-90"/>
+<pad name="1" x="-2.54" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="2.54" y="0" drill="0.8128" shape="octagon"/>
+<text x="-3.556" y="2.667" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-3.556" y="-3.81" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C050-030X075">
+<description><b>CAPACITOR</b><p>
+grid 5 mm, outline 3 x 7.5 mm</description>
+<wire x1="-0.3048" y1="0.635" x2="-0.3048" y2="0" width="0.3048" layer="21"/>
+<wire x1="-0.3048" y1="0" x2="-0.3048" y2="-0.635" width="0.3048" layer="21"/>
+<wire x1="-0.3048" y1="0" x2="-1.524" y2="0" width="0.1524" layer="21"/>
+<wire x1="0.3302" y1="0.635" x2="0.3302" y2="0" width="0.3048" layer="21"/>
+<wire x1="0.3302" y1="0" x2="0.3302" y2="-0.635" width="0.3048" layer="21"/>
+<wire x1="0.3302" y1="0" x2="1.524" y2="0" width="0.1524" layer="21"/>
+<wire x1="-3.683" y1="1.27" x2="-3.683" y2="-1.27" width="0.1524" layer="21"/>
+<wire x1="-3.429" y1="-1.524" x2="3.429" y2="-1.524" width="0.1524" layer="21"/>
+<wire x1="3.683" y1="-1.27" x2="3.683" y2="1.27" width="0.1524" layer="21"/>
+<wire x1="3.429" y1="1.524" x2="-3.429" y2="1.524" width="0.1524" layer="21"/>
+<wire x1="3.429" y1="1.524" x2="3.683" y2="1.27" width="0.1524" layer="21" curve="-90"/>
+<wire x1="3.429" y1="-1.524" x2="3.683" y2="-1.27" width="0.1524" layer="21" curve="90"/>
+<wire x1="-3.683" y1="-1.27" x2="-3.429" y2="-1.524" width="0.1524" layer="21" curve="90"/>
+<wire x1="-3.683" y1="1.27" x2="-3.429" y2="1.524" width="0.1524" layer="21" curve="-90"/>
+<pad name="1" x="-2.54" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="2.54" y="0" drill="0.8128" shape="octagon"/>
+<text x="-3.556" y="1.905" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-3.556" y="-3.048" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C050-050X075">
+<description><b>CAPACITOR</b><p>
+grid 5 mm, outline 5 x 7.5 mm</description>
+<wire x1="-0.3048" y1="0.635" x2="-0.3048" y2="0" width="0.3048" layer="21"/>
+<wire x1="-0.3048" y1="0" x2="-0.3048" y2="-0.635" width="0.3048" layer="21"/>
+<wire x1="-0.3048" y1="0" x2="-1.524" y2="0" width="0.1524" layer="21"/>
+<wire x1="0.3302" y1="0.635" x2="0.3302" y2="0" width="0.3048" layer="21"/>
+<wire x1="0.3302" y1="0" x2="0.3302" y2="-0.635" width="0.3048" layer="21"/>
+<wire x1="0.3302" y1="0" x2="1.524" y2="0" width="0.1524" layer="21"/>
+<wire x1="-3.683" y1="2.286" x2="-3.683" y2="-2.286" width="0.1524" layer="21"/>
+<wire x1="-3.429" y1="-2.54" x2="3.429" y2="-2.54" width="0.1524" layer="21"/>
+<wire x1="3.683" y1="-2.286" x2="3.683" y2="2.286" width="0.1524" layer="21"/>
+<wire x1="3.429" y1="2.54" x2="-3.429" y2="2.54" width="0.1524" layer="21"/>
+<wire x1="3.429" y1="2.54" x2="3.683" y2="2.286" width="0.1524" layer="21" curve="-90"/>
+<wire x1="3.429" y1="-2.54" x2="3.683" y2="-2.286" width="0.1524" layer="21" curve="90"/>
+<wire x1="-3.683" y1="-2.286" x2="-3.429" y2="-2.54" width="0.1524" layer="21" curve="90"/>
+<wire x1="-3.683" y1="2.286" x2="-3.429" y2="2.54" width="0.1524" layer="21" curve="-90"/>
+<pad name="1" x="-2.54" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="2.54" y="0" drill="0.8128" shape="octagon"/>
+<text x="-3.429" y="2.921" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-3.175" y="-2.159" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C050-055X075">
+<description><b>CAPACITOR</b><p>
+grid 5 mm, outline 5.5 x 7.5 mm</description>
+<wire x1="-0.3048" y1="0.635" x2="-0.3048" y2="0" width="0.3048" layer="21"/>
+<wire x1="-0.3048" y1="0" x2="-0.3048" y2="-0.635" width="0.3048" layer="21"/>
+<wire x1="-0.3048" y1="0" x2="-1.524" y2="0" width="0.1524" layer="21"/>
+<wire x1="0.3302" y1="0.635" x2="0.3302" y2="0" width="0.3048" layer="21"/>
+<wire x1="0.3302" y1="0" x2="0.3302" y2="-0.635" width="0.3048" layer="21"/>
+<wire x1="0.3302" y1="0" x2="1.524" y2="0" width="0.1524" layer="21"/>
+<wire x1="-3.683" y1="2.54" x2="-3.683" y2="-2.54" width="0.1524" layer="21"/>
+<wire x1="-3.429" y1="-2.794" x2="3.429" y2="-2.794" width="0.1524" layer="21"/>
+<wire x1="3.683" y1="-2.54" x2="3.683" y2="2.54" width="0.1524" layer="21"/>
+<wire x1="3.429" y1="2.794" x2="-3.429" y2="2.794" width="0.1524" layer="21"/>
+<wire x1="3.429" y1="2.794" x2="3.683" y2="2.54" width="0.1524" layer="21" curve="-90"/>
+<wire x1="3.429" y1="-2.794" x2="3.683" y2="-2.54" width="0.1524" layer="21" curve="90"/>
+<wire x1="-3.683" y1="-2.54" x2="-3.429" y2="-2.794" width="0.1524" layer="21" curve="90"/>
+<wire x1="-3.683" y1="2.54" x2="-3.429" y2="2.794" width="0.1524" layer="21" curve="-90"/>
+<pad name="1" x="-2.54" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="2.54" y="0" drill="0.8128" shape="octagon"/>
+<text x="-3.429" y="3.175" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-3.302" y="-2.286" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C050-075X075">
+<description><b>CAPACITOR</b><p>
+grid 5 mm, outline 7.5 x 7.5 mm</description>
+<wire x1="-1.524" y1="0" x2="-0.4572" y2="0" width="0.1524" layer="21"/>
+<wire x1="-0.4572" y1="0" x2="-0.4572" y2="0.762" width="0.4064" layer="21"/>
+<wire x1="-0.4572" y1="0" x2="-0.4572" y2="-0.762" width="0.4064" layer="21"/>
+<wire x1="0.4318" y1="0.762" x2="0.4318" y2="0" width="0.4064" layer="21"/>
+<wire x1="0.4318" y1="0" x2="1.524" y2="0" width="0.1524" layer="21"/>
+<wire x1="0.4318" y1="0" x2="0.4318" y2="-0.762" width="0.4064" layer="21"/>
+<wire x1="-3.683" y1="3.429" x2="-3.683" y2="-3.429" width="0.1524" layer="21"/>
+<wire x1="-3.429" y1="-3.683" x2="3.429" y2="-3.683" width="0.1524" layer="21"/>
+<wire x1="3.683" y1="-3.429" x2="3.683" y2="3.429" width="0.1524" layer="21"/>
+<wire x1="3.429" y1="3.683" x2="-3.429" y2="3.683" width="0.1524" layer="21"/>
+<wire x1="3.429" y1="3.683" x2="3.683" y2="3.429" width="0.1524" layer="21" curve="-90"/>
+<wire x1="3.429" y1="-3.683" x2="3.683" y2="-3.429" width="0.1524" layer="21" curve="90"/>
+<wire x1="-3.683" y1="-3.429" x2="-3.429" y2="-3.683" width="0.1524" layer="21" curve="90"/>
+<wire x1="-3.683" y1="3.429" x2="-3.429" y2="3.683" width="0.1524" layer="21" curve="-90"/>
+<pad name="1" x="-2.54" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="2.54" y="0" drill="0.8128" shape="octagon"/>
+<text x="-3.429" y="4.064" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-3.175" y="-2.921" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C050H075X075">
+<description><b>CAPACITOR</b><p>
+Horizontal, grid 5 mm, outline 7.5 x 7.5 mm</description>
+<wire x1="-3.683" y1="7.112" x2="-3.683" y2="0.508" width="0.1524" layer="21"/>
+<wire x1="-3.683" y1="0.508" x2="-3.302" y2="0.508" width="0.1524" layer="21"/>
+<wire x1="-3.302" y1="0.508" x2="-1.778" y2="0.508" width="0.1524" layer="51"/>
+<wire x1="-1.778" y1="0.508" x2="1.778" y2="0.508" width="0.1524" layer="21"/>
+<wire x1="1.778" y1="0.508" x2="3.302" y2="0.508" width="0.1524" layer="51"/>
+<wire x1="3.302" y1="0.508" x2="3.683" y2="0.508" width="0.1524" layer="21"/>
+<wire x1="3.683" y1="0.508" x2="3.683" y2="7.112" width="0.1524" layer="21"/>
+<wire x1="3.175" y1="7.62" x2="-3.175" y2="7.62" width="0.1524" layer="21"/>
+<wire x1="-0.3048" y1="2.413" x2="-0.3048" y2="1.778" width="0.3048" layer="21"/>
+<wire x1="-0.3048" y1="1.778" x2="-0.3048" y2="1.143" width="0.3048" layer="21"/>
+<wire x1="-0.3048" y1="1.778" x2="-1.651" y2="1.778" width="0.1524" layer="21"/>
+<wire x1="0.3302" y1="2.413" x2="0.3302" y2="1.778" width="0.3048" layer="21"/>
+<wire x1="0.3302" y1="1.778" x2="0.3302" y2="1.143" width="0.3048" layer="21"/>
+<wire x1="0.3302" y1="1.778" x2="1.651" y2="1.778" width="0.1524" layer="21"/>
+<wire x1="-3.683" y1="7.112" x2="-3.175" y2="7.62" width="0.1524" layer="21" curve="-90"/>
+<wire x1="3.175" y1="7.62" x2="3.683" y2="7.112" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-2.54" y1="0" x2="-2.54" y2="0.254" width="0.508" layer="51"/>
+<wire x1="2.54" y1="0" x2="2.54" y2="0.254" width="0.508" layer="51"/>
+<pad name="1" x="-2.54" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="2.54" y="0" drill="0.8128" shape="octagon"/>
+<text x="-3.302" y="8.001" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-3.175" y="3.175" size="1.27" layer="27" ratio="10">>VALUE</text>
+<rectangle x1="-2.794" y1="0.127" x2="-2.286" y2="0.508" layer="51"/>
+<rectangle x1="2.286" y1="0.127" x2="2.794" y2="0.508" layer="51"/>
+</package>
+<package name="C075-032X103">
+<description><b>CAPACITOR</b><p>
+grid 7.5 mm, outline 3.2 x 10.3 mm</description>
+<wire x1="4.826" y1="1.524" x2="-4.826" y2="1.524" width="0.1524" layer="21"/>
+<wire x1="-5.08" y1="1.27" x2="-5.08" y2="-1.27" width="0.1524" layer="21"/>
+<wire x1="-4.826" y1="-1.524" x2="4.826" y2="-1.524" width="0.1524" layer="21"/>
+<wire x1="5.08" y1="-1.27" x2="5.08" y2="1.27" width="0.1524" layer="21"/>
+<wire x1="4.826" y1="1.524" x2="5.08" y2="1.27" width="0.1524" layer="21" curve="-90"/>
+<wire x1="4.826" y1="-1.524" x2="5.08" y2="-1.27" width="0.1524" layer="21" curve="90"/>
+<wire x1="-5.08" y1="-1.27" x2="-4.826" y2="-1.524" width="0.1524" layer="21" curve="90"/>
+<wire x1="-5.08" y1="1.27" x2="-4.826" y2="1.524" width="0.1524" layer="21" curve="-90"/>
+<wire x1="0.508" y1="0" x2="2.54" y2="0" width="0.1524" layer="21"/>
+<wire x1="-2.54" y1="0" x2="-0.508" y2="0" width="0.1524" layer="21"/>
+<wire x1="-0.508" y1="0.889" x2="-0.508" y2="0" width="0.4064" layer="21"/>
+<wire x1="-0.508" y1="0" x2="-0.508" y2="-0.889" width="0.4064" layer="21"/>
+<wire x1="0.508" y1="0.889" x2="0.508" y2="0" width="0.4064" layer="21"/>
+<wire x1="0.508" y1="0" x2="0.508" y2="-0.889" width="0.4064" layer="21"/>
+<pad name="1" x="-3.81" y="0" drill="0.9144" shape="octagon"/>
+<pad name="2" x="3.81" y="0" drill="0.9144" shape="octagon"/>
+<text x="-4.826" y="1.905" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-4.826" y="-3.048" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C075-042X103">
+<description><b>CAPACITOR</b><p>
+grid 7.5 mm, outline 4.2 x 10.3 mm</description>
+<wire x1="4.826" y1="2.032" x2="-4.826" y2="2.032" width="0.1524" layer="21"/>
+<wire x1="-5.08" y1="1.778" x2="-5.08" y2="-1.778" width="0.1524" layer="21"/>
+<wire x1="-4.826" y1="-2.032" x2="4.826" y2="-2.032" width="0.1524" layer="21"/>
+<wire x1="5.08" y1="-1.778" x2="5.08" y2="1.778" width="0.1524" layer="21"/>
+<wire x1="4.826" y1="2.032" x2="5.08" y2="1.778" width="0.1524" layer="21" curve="-90"/>
+<wire x1="4.826" y1="-2.032" x2="5.08" y2="-1.778" width="0.1524" layer="21" curve="90"/>
+<wire x1="-5.08" y1="-1.778" x2="-4.826" y2="-2.032" width="0.1524" layer="21" curve="90"/>
+<wire x1="-5.08" y1="1.778" x2="-4.826" y2="2.032" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-1.27" y1="0" x2="2.667" y2="0" width="0.1524" layer="21"/>
+<wire x1="-2.667" y1="0" x2="-2.159" y2="0" width="0.1524" layer="21"/>
+<wire x1="-2.159" y1="1.27" x2="-2.159" y2="0" width="0.4064" layer="21"/>
+<wire x1="-2.159" y1="0" x2="-2.159" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-1.27" y1="1.27" x2="-1.27" y2="0" width="0.4064" layer="21"/>
+<wire x1="-1.27" y1="0" x2="-1.27" y2="-1.27" width="0.4064" layer="21"/>
+<pad name="1" x="-3.81" y="0" drill="0.9144" shape="octagon"/>
+<pad name="2" x="3.81" y="0" drill="0.9144" shape="octagon"/>
+<text x="-4.699" y="2.413" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-0.635" y="-1.651" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C075-052X106">
+<description><b>CAPACITOR</b><p>
+grid 7.5 mm, outline 5.2 x 10.6 mm</description>
+<wire x1="4.953" y1="2.54" x2="-4.953" y2="2.54" width="0.1524" layer="21"/>
+<wire x1="-5.207" y1="2.286" x2="-5.207" y2="-2.286" width="0.1524" layer="21"/>
+<wire x1="-4.953" y1="-2.54" x2="4.953" y2="-2.54" width="0.1524" layer="21"/>
+<wire x1="5.207" y1="-2.286" x2="5.207" y2="2.286" width="0.1524" layer="21"/>
+<wire x1="4.953" y1="2.54" x2="5.207" y2="2.286" width="0.1524" layer="21" curve="-90"/>
+<wire x1="4.953" y1="-2.54" x2="5.207" y2="-2.286" width="0.1524" layer="21" curve="90"/>
+<wire x1="-5.207" y1="-2.286" x2="-4.953" y2="-2.54" width="0.1524" layer="21" curve="90"/>
+<wire x1="-5.207" y1="2.286" x2="-4.953" y2="2.54" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-1.27" y1="0" x2="2.667" y2="0" width="0.1524" layer="21"/>
+<wire x1="-2.667" y1="0" x2="-2.159" y2="0" width="0.1524" layer="21"/>
+<wire x1="-2.159" y1="1.27" x2="-2.159" y2="0" width="0.4064" layer="21"/>
+<wire x1="-2.159" y1="0" x2="-2.159" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-1.27" y1="1.27" x2="-1.27" y2="0" width="0.4064" layer="21"/>
+<wire x1="-1.27" y1="0" x2="-1.27" y2="-1.27" width="0.4064" layer="21"/>
+<pad name="1" x="-3.81" y="0" drill="0.9144" shape="octagon"/>
+<pad name="2" x="3.81" y="0" drill="0.9144" shape="octagon"/>
+<text x="-4.826" y="2.921" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-0.635" y="-2.032" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C102-043X133">
+<description><b>CAPACITOR</b><p>
+grid 10.2 mm, outline 4.3 x 13.3 mm</description>
+<wire x1="-3.175" y1="1.27" x2="-3.175" y2="0" width="0.4064" layer="21"/>
+<wire x1="-2.286" y1="1.27" x2="-2.286" y2="0" width="0.4064" layer="21"/>
+<wire x1="3.81" y1="0" x2="-2.286" y2="0" width="0.1524" layer="21"/>
+<wire x1="-2.286" y1="0" x2="-2.286" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-3.81" y1="0" x2="-3.175" y2="0" width="0.1524" layer="21"/>
+<wire x1="-3.175" y1="0" x2="-3.175" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-6.096" y1="2.032" x2="6.096" y2="2.032" width="0.1524" layer="21"/>
+<wire x1="6.604" y1="1.524" x2="6.604" y2="-1.524" width="0.1524" layer="21"/>
+<wire x1="6.096" y1="-2.032" x2="-6.096" y2="-2.032" width="0.1524" layer="21"/>
+<wire x1="-6.604" y1="-1.524" x2="-6.604" y2="1.524" width="0.1524" layer="21"/>
+<wire x1="6.096" y1="2.032" x2="6.604" y2="1.524" width="0.1524" layer="21" curve="-90"/>
+<wire x1="6.096" y1="-2.032" x2="6.604" y2="-1.524" width="0.1524" layer="21" curve="90"/>
+<wire x1="-6.604" y1="-1.524" x2="-6.096" y2="-2.032" width="0.1524" layer="21" curve="90"/>
+<wire x1="-6.604" y1="1.524" x2="-6.096" y2="2.032" width="0.1524" layer="21" curve="-90"/>
+<pad name="1" x="-5.08" y="0" drill="1.016" shape="octagon"/>
+<pad name="2" x="5.08" y="0" drill="1.016" shape="octagon"/>
+<text x="-6.096" y="2.413" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-1.524" y="-1.651" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C102-054X133">
+<description><b>CAPACITOR</b><p>
+grid 10.2 mm, outline 5.4 x 13.3 mm</description>
+<wire x1="-3.175" y1="1.27" x2="-3.175" y2="0" width="0.4064" layer="21"/>
+<wire x1="-2.286" y1="1.27" x2="-2.286" y2="0" width="0.4064" layer="21"/>
+<wire x1="3.81" y1="0" x2="-2.286" y2="0" width="0.1524" layer="21"/>
+<wire x1="-2.286" y1="0" x2="-2.286" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-3.81" y1="0" x2="-3.175" y2="0" width="0.1524" layer="21"/>
+<wire x1="-3.175" y1="0" x2="-3.175" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-6.096" y1="2.54" x2="6.096" y2="2.54" width="0.1524" layer="21"/>
+<wire x1="6.604" y1="2.032" x2="6.604" y2="-2.032" width="0.1524" layer="21"/>
+<wire x1="6.096" y1="-2.54" x2="-6.096" y2="-2.54" width="0.1524" layer="21"/>
+<wire x1="-6.604" y1="-2.032" x2="-6.604" y2="2.032" width="0.1524" layer="21"/>
+<wire x1="6.096" y1="2.54" x2="6.604" y2="2.032" width="0.1524" layer="21" curve="-90"/>
+<wire x1="6.096" y1="-2.54" x2="6.604" y2="-2.032" width="0.1524" layer="21" curve="90"/>
+<wire x1="-6.604" y1="-2.032" x2="-6.096" y2="-2.54" width="0.1524" layer="21" curve="90"/>
+<wire x1="-6.604" y1="2.032" x2="-6.096" y2="2.54" width="0.1524" layer="21" curve="-90"/>
+<pad name="1" x="-5.08" y="0" drill="1.016" shape="octagon"/>
+<pad name="2" x="5.08" y="0" drill="1.016" shape="octagon"/>
+<text x="-6.096" y="2.921" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-1.524" y="-1.905" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C102-064X133">
+<description><b>CAPACITOR</b><p>
+grid 10.2 mm, outline 6.4 x 13.3 mm</description>
+<wire x1="-3.175" y1="1.27" x2="-3.175" y2="0" width="0.4064" layer="21"/>
+<wire x1="-2.286" y1="1.27" x2="-2.286" y2="0" width="0.4064" layer="21"/>
+<wire x1="3.81" y1="0" x2="-2.286" y2="0" width="0.1524" layer="21"/>
+<wire x1="-2.286" y1="0" x2="-2.286" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-3.81" y1="0" x2="-3.175" y2="0" width="0.1524" layer="21"/>
+<wire x1="-3.175" y1="0" x2="-3.175" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-6.096" y1="3.048" x2="6.096" y2="3.048" width="0.1524" layer="21"/>
+<wire x1="6.604" y1="2.54" x2="6.604" y2="-2.54" width="0.1524" layer="21"/>
+<wire x1="6.096" y1="-3.048" x2="-6.096" y2="-3.048" width="0.1524" layer="21"/>
+<wire x1="-6.604" y1="-2.54" x2="-6.604" y2="2.54" width="0.1524" layer="21"/>
+<wire x1="6.096" y1="3.048" x2="6.604" y2="2.54" width="0.1524" layer="21" curve="-90"/>
+<wire x1="6.096" y1="-3.048" x2="6.604" y2="-2.54" width="0.1524" layer="21" curve="90"/>
+<wire x1="-6.604" y1="-2.54" x2="-6.096" y2="-3.048" width="0.1524" layer="21" curve="90"/>
+<wire x1="-6.604" y1="2.54" x2="-6.096" y2="3.048" width="0.1524" layer="21" curve="-90"/>
+<pad name="1" x="-5.08" y="0" drill="1.016" shape="octagon"/>
+<pad name="2" x="5.08" y="0" drill="1.016" shape="octagon"/>
+<text x="-6.096" y="3.429" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-1.524" y="-2.032" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C102_152-062X184">
+<description><b>CAPACITOR</b><p>
+grid 10.2 mm + 15.2 mm, outline 6.2 x 18.4 mm</description>
+<wire x1="-2.286" y1="1.27" x2="-2.286" y2="0" width="0.4064" layer="21"/>
+<wire x1="-2.286" y1="0" x2="-2.286" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-3.175" y1="1.27" x2="-3.175" y2="0" width="0.4064" layer="21"/>
+<wire x1="-3.175" y1="0" x2="-3.175" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-3.683" y1="0" x2="-3.175" y2="0" width="0.1524" layer="21"/>
+<wire x1="-2.286" y1="0" x2="3.683" y2="0" width="0.1524" layer="21"/>
+<wire x1="6.477" y1="0" x2="8.636" y2="0" width="0.1524" layer="21"/>
+<wire x1="-6.096" y1="3.048" x2="6.223" y2="3.048" width="0.1524" layer="21"/>
+<wire x1="6.223" y1="-3.048" x2="-6.096" y2="-3.048" width="0.1524" layer="21"/>
+<wire x1="-6.604" y1="-2.54" x2="-6.604" y2="2.54" width="0.1524" layer="21"/>
+<wire x1="6.223" y1="3.048" x2="6.731" y2="2.54" width="0.1524" layer="21" curve="-90"/>
+<wire x1="6.223" y1="-3.048" x2="6.731" y2="-2.54" width="0.1524" layer="21" curve="90"/>
+<wire x1="-6.604" y1="-2.54" x2="-6.096" y2="-3.048" width="0.1524" layer="21" curve="90"/>
+<wire x1="-6.604" y1="2.54" x2="-6.096" y2="3.048" width="0.1524" layer="21" curve="-90"/>
+<wire x1="6.731" y1="2.54" x2="6.731" y2="-2.54" width="0.1524" layer="21"/>
+<wire x1="11.176" y1="3.048" x2="11.684" y2="2.54" width="0.1524" layer="21" curve="-90"/>
+<wire x1="11.176" y1="-3.048" x2="11.684" y2="-2.54" width="0.1524" layer="21" curve="90"/>
+<wire x1="11.176" y1="-3.048" x2="7.112" y2="-3.048" width="0.1524" layer="21"/>
+<wire x1="7.112" y1="3.048" x2="11.176" y2="3.048" width="0.1524" layer="21"/>
+<wire x1="11.684" y1="2.54" x2="11.684" y2="-2.54" width="0.1524" layer="21"/>
+<pad name="1" x="-5.08" y="0" drill="1.016" shape="octagon"/>
+<pad name="2" x="5.08" y="0" drill="1.016" shape="octagon"/>
+<pad name="3" x="10.033" y="0" drill="1.016" shape="octagon"/>
+<text x="-5.969" y="3.429" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-1.524" y="-2.286" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C150-054X183">
+<description><b>CAPACITOR</b><p>
+grid 15 mm, outline 5.4 x 18.3 mm</description>
+<wire x1="-5.08" y1="1.27" x2="-5.08" y2="0" width="0.4064" layer="21"/>
+<wire x1="-5.08" y1="0" x2="-5.08" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-4.191" y1="1.27" x2="-4.191" y2="0" width="0.4064" layer="21"/>
+<wire x1="-4.191" y1="0" x2="-4.191" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-4.191" y1="0" x2="6.096" y2="0" width="0.1524" layer="21"/>
+<wire x1="-5.08" y1="0" x2="-6.096" y2="0" width="0.1524" layer="21"/>
+<wire x1="9.017" y1="2.032" x2="9.017" y2="-2.032" width="0.1524" layer="21"/>
+<wire x1="8.509" y1="-2.54" x2="-8.509" y2="-2.54" width="0.1524" layer="21"/>
+<wire x1="-9.017" y1="-2.032" x2="-9.017" y2="2.032" width="0.1524" layer="21"/>
+<wire x1="-8.509" y1="2.54" x2="8.509" y2="2.54" width="0.1524" layer="21"/>
+<wire x1="8.509" y1="2.54" x2="9.017" y2="2.032" width="0.1524" layer="21" curve="-90"/>
+<wire x1="8.509" y1="-2.54" x2="9.017" y2="-2.032" width="0.1524" layer="21" curve="90"/>
+<wire x1="-9.017" y1="-2.032" x2="-8.509" y2="-2.54" width="0.1524" layer="21" curve="90"/>
+<wire x1="-9.017" y1="2.032" x2="-8.509" y2="2.54" width="0.1524" layer="21" curve="-90"/>
+<pad name="1" x="-7.493" y="0" drill="1.016" shape="octagon"/>
+<pad name="2" x="7.493" y="0" drill="1.016" shape="octagon"/>
+<text x="-8.382" y="2.921" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-3.429" y="-2.032" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C150-064X183">
+<description><b>CAPACITOR</b><p>
+grid 15 mm, outline 6.4 x 18.3 mm</description>
+<wire x1="-5.08" y1="1.27" x2="-5.08" y2="0" width="0.4064" layer="21"/>
+<wire x1="-5.08" y1="0" x2="-5.08" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-4.191" y1="1.27" x2="-4.191" y2="0" width="0.4064" layer="21"/>
+<wire x1="-4.191" y1="0" x2="-4.191" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-4.191" y1="0" x2="6.096" y2="0" width="0.1524" layer="21"/>
+<wire x1="-5.08" y1="0" x2="-6.096" y2="0" width="0.1524" layer="21"/>
+<wire x1="9.017" y1="2.54" x2="9.017" y2="-2.54" width="0.1524" layer="21"/>
+<wire x1="8.509" y1="-3.048" x2="-8.509" y2="-3.048" width="0.1524" layer="21"/>
+<wire x1="-9.017" y1="-2.54" x2="-9.017" y2="2.54" width="0.1524" layer="21"/>
+<wire x1="-8.509" y1="3.048" x2="8.509" y2="3.048" width="0.1524" layer="21"/>
+<wire x1="8.509" y1="3.048" x2="9.017" y2="2.54" width="0.1524" layer="21" curve="-90"/>
+<wire x1="8.509" y1="-3.048" x2="9.017" y2="-2.54" width="0.1524" layer="21" curve="90"/>
+<wire x1="-9.017" y1="-2.54" x2="-8.509" y2="-3.048" width="0.1524" layer="21" curve="90"/>
+<wire x1="-9.017" y1="2.54" x2="-8.509" y2="3.048" width="0.1524" layer="21" curve="-90"/>
+<pad name="1" x="-7.493" y="0" drill="1.016" shape="octagon"/>
+<pad name="2" x="7.493" y="0" drill="1.016" shape="octagon"/>
+<text x="-8.509" y="3.429" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-3.429" y="-2.032" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C150-072X183">
+<description><b>CAPACITOR</b><p>
+grid 15 mm, outline 7.2 x 18.3 mm</description>
+<wire x1="-5.08" y1="1.27" x2="-5.08" y2="0" width="0.4064" layer="21"/>
+<wire x1="-5.08" y1="0" x2="-5.08" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-4.191" y1="1.27" x2="-4.191" y2="0" width="0.4064" layer="21"/>
+<wire x1="-4.191" y1="0" x2="-4.191" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-4.191" y1="0" x2="6.096" y2="0" width="0.1524" layer="21"/>
+<wire x1="-5.08" y1="0" x2="-6.096" y2="0" width="0.1524" layer="21"/>
+<wire x1="9.017" y1="3.048" x2="9.017" y2="-3.048" width="0.1524" layer="21"/>
+<wire x1="8.509" y1="-3.556" x2="-8.509" y2="-3.556" width="0.1524" layer="21"/>
+<wire x1="-9.017" y1="-3.048" x2="-9.017" y2="3.048" width="0.1524" layer="21"/>
+<wire x1="-8.509" y1="3.556" x2="8.509" y2="3.556" width="0.1524" layer="21"/>
+<wire x1="8.509" y1="3.556" x2="9.017" y2="3.048" width="0.1524" layer="21" curve="-90"/>
+<wire x1="8.509" y1="-3.556" x2="9.017" y2="-3.048" width="0.1524" layer="21" curve="90"/>
+<wire x1="-9.017" y1="-3.048" x2="-8.509" y2="-3.556" width="0.1524" layer="21" curve="90"/>
+<wire x1="-9.017" y1="3.048" x2="-8.509" y2="3.556" width="0.1524" layer="21" curve="-90"/>
+<pad name="1" x="-7.493" y="0" drill="1.016" shape="octagon"/>
+<pad name="2" x="7.493" y="0" drill="1.016" shape="octagon"/>
+<text x="-8.509" y="3.937" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-3.429" y="-2.286" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C150-084X183">
+<description><b>CAPACITOR</b><p>
+grid 15 mm, outline 8.4 x 18.3 mm</description>
+<wire x1="-5.08" y1="1.27" x2="-5.08" y2="0" width="0.4064" layer="21"/>
+<wire x1="-5.08" y1="0" x2="-5.08" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-4.191" y1="1.27" x2="-4.191" y2="0" width="0.4064" layer="21"/>
+<wire x1="-4.191" y1="0" x2="-4.191" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-4.191" y1="0" x2="6.096" y2="0" width="0.1524" layer="21"/>
+<wire x1="-5.08" y1="0" x2="-6.096" y2="0" width="0.1524" layer="21"/>
+<wire x1="9.017" y1="3.556" x2="9.017" y2="-3.556" width="0.1524" layer="21"/>
+<wire x1="8.509" y1="-4.064" x2="-8.509" y2="-4.064" width="0.1524" layer="21"/>
+<wire x1="-9.017" y1="-3.556" x2="-9.017" y2="3.556" width="0.1524" layer="21"/>
+<wire x1="-8.509" y1="4.064" x2="8.509" y2="4.064" width="0.1524" layer="21"/>
+<wire x1="8.509" y1="4.064" x2="9.017" y2="3.556" width="0.1524" layer="21" curve="-90"/>
+<wire x1="8.509" y1="-4.064" x2="9.017" y2="-3.556" width="0.1524" layer="21" curve="90"/>
+<wire x1="-9.017" y1="-3.556" x2="-8.509" y2="-4.064" width="0.1524" layer="21" curve="90"/>
+<wire x1="-9.017" y1="3.556" x2="-8.509" y2="4.064" width="0.1524" layer="21" curve="-90"/>
+<pad name="1" x="-7.493" y="0" drill="1.016" shape="octagon"/>
+<pad name="2" x="7.493" y="0" drill="1.016" shape="octagon"/>
+<text x="-8.509" y="4.445" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-3.429" y="-2.54" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C150-091X182">
+<description><b>CAPACITOR</b><p>
+grid 15 mm, outline 9.1 x 18.2 mm</description>
+<wire x1="-5.08" y1="1.27" x2="-5.08" y2="0" width="0.4064" layer="21"/>
+<wire x1="-5.08" y1="0" x2="-5.08" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-4.191" y1="1.27" x2="-4.191" y2="0" width="0.4064" layer="21"/>
+<wire x1="-4.191" y1="0" x2="-4.191" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-4.191" y1="0" x2="6.096" y2="0" width="0.1524" layer="21"/>
+<wire x1="-5.08" y1="0" x2="-6.096" y2="0" width="0.1524" layer="21"/>
+<wire x1="9.017" y1="3.937" x2="9.017" y2="-3.937" width="0.1524" layer="21"/>
+<wire x1="8.509" y1="-4.445" x2="-8.509" y2="-4.445" width="0.1524" layer="21"/>
+<wire x1="-9.017" y1="-3.937" x2="-9.017" y2="3.937" width="0.1524" layer="21"/>
+<wire x1="-8.509" y1="4.445" x2="8.509" y2="4.445" width="0.1524" layer="21"/>
+<wire x1="8.509" y1="4.445" x2="9.017" y2="3.937" width="0.1524" layer="21" curve="-90"/>
+<wire x1="8.509" y1="-4.445" x2="9.017" y2="-3.937" width="0.1524" layer="21" curve="90"/>
+<wire x1="-9.017" y1="-3.937" x2="-8.509" y2="-4.445" width="0.1524" layer="21" curve="90"/>
+<wire x1="-9.017" y1="3.937" x2="-8.509" y2="4.445" width="0.1524" layer="21" curve="-90"/>
+<pad name="1" x="-7.493" y="0" drill="1.016" shape="octagon"/>
+<pad name="2" x="7.493" y="0" drill="1.016" shape="octagon"/>
+<text x="-8.509" y="4.826" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-3.429" y="-2.54" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C225-062X268">
+<description><b>CAPACITOR</b><p>
+grid 22.5 mm, outline 6.2 x 26.8 mm</description>
+<wire x1="-12.827" y1="3.048" x2="12.827" y2="3.048" width="0.1524" layer="21"/>
+<wire x1="13.335" y1="2.54" x2="13.335" y2="-2.54" width="0.1524" layer="21"/>
+<wire x1="12.827" y1="-3.048" x2="-12.827" y2="-3.048" width="0.1524" layer="21"/>
+<wire x1="-13.335" y1="-2.54" x2="-13.335" y2="2.54" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="1.905" x2="-6.731" y2="0" width="0.4064" layer="21"/>
+<wire x1="-6.731" y1="0" x2="-6.731" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="1.905" x2="-7.62" y2="0" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="0" x2="-7.62" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="12.827" y1="3.048" x2="13.335" y2="2.54" width="0.1524" layer="21" curve="-90"/>
+<wire x1="12.827" y1="-3.048" x2="13.335" y2="-2.54" width="0.1524" layer="21" curve="90"/>
+<wire x1="-13.335" y1="-2.54" x2="-12.827" y2="-3.048" width="0.1524" layer="21" curve="90"/>
+<wire x1="-13.335" y1="2.54" x2="-12.827" y2="3.048" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-9.652" y1="0" x2="-7.62" y2="0" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="0" x2="9.652" y2="0" width="0.1524" layer="21"/>
+<pad name="1" x="-11.303" y="0" drill="1.016" shape="octagon"/>
+<pad name="2" x="11.303" y="0" drill="1.016" shape="octagon"/>
+<text x="-12.7" y="3.429" size="1.778" layer="25" ratio="10">>NAME</text>
+<text x="-5.08" y="-2.54" size="1.778" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C225-074X268">
+<description><b>CAPACITOR</b><p>
+grid 22.5 mm, outline 7.4 x 26.8 mm</description>
+<wire x1="-12.827" y1="3.556" x2="12.827" y2="3.556" width="0.1524" layer="21"/>
+<wire x1="13.335" y1="3.048" x2="13.335" y2="-3.048" width="0.1524" layer="21"/>
+<wire x1="12.827" y1="-3.556" x2="-12.827" y2="-3.556" width="0.1524" layer="21"/>
+<wire x1="-13.335" y1="-3.048" x2="-13.335" y2="3.048" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="1.905" x2="-6.731" y2="0" width="0.4064" layer="21"/>
+<wire x1="-6.731" y1="0" x2="-6.731" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="1.905" x2="-7.62" y2="0" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="0" x2="-7.62" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="12.827" y1="3.556" x2="13.335" y2="3.048" width="0.1524" layer="21" curve="-90"/>
+<wire x1="12.827" y1="-3.556" x2="13.335" y2="-3.048" width="0.1524" layer="21" curve="90"/>
+<wire x1="-13.335" y1="-3.048" x2="-12.827" y2="-3.556" width="0.1524" layer="21" curve="90"/>
+<wire x1="-13.335" y1="3.048" x2="-12.827" y2="3.556" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-9.652" y1="0" x2="-7.62" y2="0" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="0" x2="9.652" y2="0" width="0.1524" layer="21"/>
+<pad name="1" x="-11.303" y="0" drill="1.016" shape="octagon"/>
+<pad name="2" x="11.303" y="0" drill="1.016" shape="octagon"/>
+<text x="-12.827" y="3.937" size="1.778" layer="25" ratio="10">>NAME</text>
+<text x="-5.08" y="-2.54" size="1.778" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C225-087X268">
+<description><b>CAPACITOR</b><p>
+grid 22.5 mm, outline 8.7 x 26.8 mm</description>
+<wire x1="-12.827" y1="4.318" x2="12.827" y2="4.318" width="0.1524" layer="21"/>
+<wire x1="13.335" y1="3.81" x2="13.335" y2="-3.81" width="0.1524" layer="21"/>
+<wire x1="12.827" y1="-4.318" x2="-12.827" y2="-4.318" width="0.1524" layer="21"/>
+<wire x1="-13.335" y1="-3.81" x2="-13.335" y2="3.81" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="1.905" x2="-6.731" y2="0" width="0.4064" layer="21"/>
+<wire x1="-6.731" y1="0" x2="-6.731" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="1.905" x2="-7.62" y2="0" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="0" x2="-7.62" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="12.827" y1="4.318" x2="13.335" y2="3.81" width="0.1524" layer="21" curve="-90"/>
+<wire x1="12.827" y1="-4.318" x2="13.335" y2="-3.81" width="0.1524" layer="21" curve="90"/>
+<wire x1="-13.335" y1="-3.81" x2="-12.827" y2="-4.318" width="0.1524" layer="21" curve="90"/>
+<wire x1="-13.335" y1="3.81" x2="-12.827" y2="4.318" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-9.652" y1="0" x2="-7.62" y2="0" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="0" x2="9.652" y2="0" width="0.1524" layer="21"/>
+<pad name="1" x="-11.303" y="0" drill="1.016" shape="octagon"/>
+<pad name="2" x="11.303" y="0" drill="1.016" shape="octagon"/>
+<text x="-12.827" y="4.699" size="1.778" layer="25" ratio="10">>NAME</text>
+<text x="-5.08" y="-2.54" size="1.778" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C225-108X268">
+<description><b>CAPACITOR</b><p>
+grid 22.5 mm, outline 10.8 x 26.8 mm</description>
+<wire x1="-12.827" y1="5.334" x2="12.827" y2="5.334" width="0.1524" layer="21"/>
+<wire x1="13.335" y1="4.826" x2="13.335" y2="-4.826" width="0.1524" layer="21"/>
+<wire x1="12.827" y1="-5.334" x2="-12.827" y2="-5.334" width="0.1524" layer="21"/>
+<wire x1="-13.335" y1="-4.826" x2="-13.335" y2="4.826" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="1.905" x2="-6.731" y2="0" width="0.4064" layer="21"/>
+<wire x1="-6.731" y1="0" x2="-6.731" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="1.905" x2="-7.62" y2="0" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="0" x2="-7.62" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="12.827" y1="5.334" x2="13.335" y2="4.826" width="0.1524" layer="21" curve="-90"/>
+<wire x1="12.827" y1="-5.334" x2="13.335" y2="-4.826" width="0.1524" layer="21" curve="90"/>
+<wire x1="-13.335" y1="-4.826" x2="-12.827" y2="-5.334" width="0.1524" layer="21" curve="90"/>
+<wire x1="-13.335" y1="4.826" x2="-12.827" y2="5.334" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-9.652" y1="0" x2="-7.62" y2="0" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="0" x2="9.652" y2="0" width="0.1524" layer="21"/>
+<pad name="1" x="-11.303" y="0" drill="1.016" shape="octagon"/>
+<pad name="2" x="11.303" y="0" drill="1.016" shape="octagon"/>
+<text x="-12.954" y="5.715" size="1.778" layer="25" ratio="10">>NAME</text>
+<text x="-5.08" y="-2.54" size="1.778" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C225-113X268">
+<description><b>CAPACITOR</b><p>
+grid 22.5 mm, outline 11.3 x 26.8 mm</description>
+<wire x1="-12.827" y1="5.588" x2="12.827" y2="5.588" width="0.1524" layer="21"/>
+<wire x1="13.335" y1="5.08" x2="13.335" y2="-5.08" width="0.1524" layer="21"/>
+<wire x1="12.827" y1="-5.588" x2="-12.827" y2="-5.588" width="0.1524" layer="21"/>
+<wire x1="-13.335" y1="-5.08" x2="-13.335" y2="5.08" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="1.905" x2="-6.731" y2="0" width="0.4064" layer="21"/>
+<wire x1="-6.731" y1="0" x2="-6.731" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="1.905" x2="-7.62" y2="0" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="0" x2="-7.62" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="12.827" y1="5.588" x2="13.335" y2="5.08" width="0.1524" layer="21" curve="-90"/>
+<wire x1="12.827" y1="-5.588" x2="13.335" y2="-5.08" width="0.1524" layer="21" curve="90"/>
+<wire x1="-13.335" y1="-5.08" x2="-12.827" y2="-5.588" width="0.1524" layer="21" curve="90"/>
+<wire x1="-13.335" y1="5.08" x2="-12.827" y2="5.588" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-9.652" y1="0" x2="-7.62" y2="0" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="0" x2="9.652" y2="0" width="0.1524" layer="21"/>
+<pad name="1" x="-11.303" y="0" drill="1.016" shape="octagon"/>
+<pad name="2" x="11.303" y="0" drill="1.016" shape="octagon"/>
+<text x="-12.954" y="5.969" size="1.778" layer="25" ratio="10">>NAME</text>
+<text x="-5.08" y="-2.54" size="1.778" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C275-093X316">
+<description><b>CAPACITOR</b><p>
+grid 27.5 mm, outline 9.3 x 31.6 mm</description>
+<wire x1="-15.24" y1="4.572" x2="15.24" y2="4.572" width="0.1524" layer="21"/>
+<wire x1="15.748" y1="4.064" x2="15.748" y2="-4.064" width="0.1524" layer="21"/>
+<wire x1="15.24" y1="-4.572" x2="-15.24" y2="-4.572" width="0.1524" layer="21"/>
+<wire x1="-15.748" y1="-4.064" x2="-15.748" y2="4.064" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="1.905" x2="-6.731" y2="0" width="0.4064" layer="21"/>
+<wire x1="-6.731" y1="0" x2="-6.731" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="1.905" x2="-7.62" y2="0" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="0" x2="-7.62" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="15.24" y1="4.572" x2="15.748" y2="4.064" width="0.1524" layer="21" curve="-90"/>
+<wire x1="15.24" y1="-4.572" x2="15.748" y2="-4.064" width="0.1524" layer="21" curve="90"/>
+<wire x1="-15.748" y1="-4.064" x2="-15.24" y2="-4.572" width="0.1524" layer="21" curve="90"/>
+<wire x1="-15.748" y1="4.064" x2="-15.24" y2="4.572" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-11.557" y1="0" x2="-7.62" y2="0" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="0" x2="11.557" y2="0" width="0.1524" layer="21"/>
+<pad name="1" x="-13.716" y="0" drill="1.1938" shape="octagon"/>
+<pad name="2" x="13.716" y="0" drill="1.1938" shape="octagon"/>
+<text x="-15.24" y="4.953" size="1.778" layer="25" ratio="10">>NAME</text>
+<text x="-5.08" y="-2.54" size="1.778" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C275-113X316">
+<description><b>CAPACITOR</b><p>
+grid 27.5 mm, outline 11.3 x 31.6 mm</description>
+<wire x1="-15.24" y1="5.588" x2="15.24" y2="5.588" width="0.1524" layer="21"/>
+<wire x1="15.748" y1="5.08" x2="15.748" y2="-5.08" width="0.1524" layer="21"/>
+<wire x1="15.24" y1="-5.588" x2="-15.24" y2="-5.588" width="0.1524" layer="21"/>
+<wire x1="-15.748" y1="-5.08" x2="-15.748" y2="5.08" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="1.905" x2="-6.731" y2="0" width="0.4064" layer="21"/>
+<wire x1="-6.731" y1="0" x2="-6.731" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="1.905" x2="-7.62" y2="0" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="0" x2="-7.62" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="15.24" y1="5.588" x2="15.748" y2="5.08" width="0.1524" layer="21" curve="-90"/>
+<wire x1="15.24" y1="-5.588" x2="15.748" y2="-5.08" width="0.1524" layer="21" curve="90"/>
+<wire x1="-15.748" y1="-5.08" x2="-15.24" y2="-5.588" width="0.1524" layer="21" curve="90"/>
+<wire x1="-15.748" y1="5.08" x2="-15.24" y2="5.588" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-11.557" y1="0" x2="-7.62" y2="0" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="0" x2="11.557" y2="0" width="0.1524" layer="21"/>
+<pad name="1" x="-13.716" y="0" drill="1.1938" shape="octagon"/>
+<pad name="2" x="13.716" y="0" drill="1.1938" shape="octagon"/>
+<text x="-15.24" y="5.969" size="1.778" layer="25" ratio="10">>NAME</text>
+<text x="-5.08" y="-2.54" size="1.778" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C275-134X316">
+<description><b>CAPACITOR</b><p>
+grid 27.5 mm, outline 13.4 x 31.6 mm</description>
+<wire x1="-15.24" y1="6.604" x2="15.24" y2="6.604" width="0.1524" layer="21"/>
+<wire x1="15.748" y1="6.096" x2="15.748" y2="-6.096" width="0.1524" layer="21"/>
+<wire x1="15.24" y1="-6.604" x2="-15.24" y2="-6.604" width="0.1524" layer="21"/>
+<wire x1="-15.748" y1="-6.096" x2="-15.748" y2="6.096" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="1.905" x2="-6.731" y2="0" width="0.4064" layer="21"/>
+<wire x1="-6.731" y1="0" x2="-6.731" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="1.905" x2="-7.62" y2="0" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="0" x2="-7.62" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="15.24" y1="6.604" x2="15.748" y2="6.096" width="0.1524" layer="21" curve="-90"/>
+<wire x1="15.24" y1="-6.604" x2="15.748" y2="-6.096" width="0.1524" layer="21" curve="90"/>
+<wire x1="-15.748" y1="-6.096" x2="-15.24" y2="-6.604" width="0.1524" layer="21" curve="90"/>
+<wire x1="-15.748" y1="6.096" x2="-15.24" y2="6.604" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-11.557" y1="0" x2="-7.62" y2="0" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="0" x2="11.557" y2="0" width="0.1524" layer="21"/>
+<pad name="1" x="-13.716" y="0" drill="1.1938" shape="octagon"/>
+<pad name="2" x="13.716" y="0" drill="1.1938" shape="octagon"/>
+<text x="-15.24" y="6.985" size="1.778" layer="25" ratio="10">>NAME</text>
+<text x="-5.08" y="-2.54" size="1.778" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C275-205X316">
+<description><b>CAPACITOR</b><p>
+grid 27.5 mm, outline 20.5 x 31.6 mm</description>
+<wire x1="-15.24" y1="10.16" x2="15.24" y2="10.16" width="0.1524" layer="21"/>
+<wire x1="15.748" y1="9.652" x2="15.748" y2="-9.652" width="0.1524" layer="21"/>
+<wire x1="15.24" y1="-10.16" x2="-15.24" y2="-10.16" width="0.1524" layer="21"/>
+<wire x1="-15.748" y1="-9.652" x2="-15.748" y2="9.652" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="1.905" x2="-6.731" y2="0" width="0.4064" layer="21"/>
+<wire x1="-6.731" y1="0" x2="-6.731" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="1.905" x2="-7.62" y2="0" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="0" x2="-7.62" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="15.24" y1="10.16" x2="15.748" y2="9.652" width="0.1524" layer="21" curve="-90"/>
+<wire x1="15.24" y1="-10.16" x2="15.748" y2="-9.652" width="0.1524" layer="21" curve="90"/>
+<wire x1="-15.748" y1="-9.652" x2="-15.24" y2="-10.16" width="0.1524" layer="21" curve="90"/>
+<wire x1="-15.748" y1="9.652" x2="-15.24" y2="10.16" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-11.557" y1="0" x2="-7.62" y2="0" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="0" x2="11.557" y2="0" width="0.1524" layer="21"/>
+<pad name="1" x="-13.716" y="0" drill="1.1938" shape="octagon"/>
+<pad name="2" x="13.716" y="0" drill="1.1938" shape="octagon"/>
+<text x="-15.24" y="10.541" size="1.778" layer="25" ratio="10">>NAME</text>
+<text x="-5.08" y="-4.318" size="1.778" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C325-137X374">
+<description><b>CAPACITOR</b><p>
+grid 32.5 mm, outline 13.7 x 37.4 mm</description>
+<wire x1="-14.2748" y1="0" x2="-12.7" y2="0" width="0.1524" layer="21"/>
+<wire x1="-12.7" y1="1.905" x2="-12.7" y2="0" width="0.4064" layer="21"/>
+<wire x1="-11.811" y1="1.905" x2="-11.811" y2="0" width="0.4064" layer="21"/>
+<wire x1="-11.811" y1="0" x2="14.2748" y2="0" width="0.1524" layer="21"/>
+<wire x1="-11.811" y1="0" x2="-11.811" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="-12.7" y1="0" x2="-12.7" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="18.542" y1="6.731" x2="18.542" y2="-6.731" width="0.1524" layer="21"/>
+<wire x1="-18.542" y1="6.731" x2="-18.542" y2="-6.731" width="0.1524" layer="21"/>
+<wire x1="-18.542" y1="-6.731" x2="18.542" y2="-6.731" width="0.1524" layer="21"/>
+<wire x1="18.542" y1="6.731" x2="-18.542" y2="6.731" width="0.1524" layer="21"/>
+<pad name="1" x="-16.256" y="0" drill="1.1938" shape="octagon"/>
+<pad name="2" x="16.256" y="0" drill="1.1938" shape="octagon"/>
+<text x="-18.2372" y="7.0612" size="1.778" layer="25" ratio="10">>NAME</text>
+<text x="-10.8458" y="-2.8702" size="1.778" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C325-162X374">
+<description><b>CAPACITOR</b><p>
+grid 32.5 mm, outline 16.2 x 37.4 mm</description>
+<wire x1="-14.2748" y1="0" x2="-12.7" y2="0" width="0.1524" layer="21"/>
+<wire x1="-12.7" y1="1.905" x2="-12.7" y2="0" width="0.4064" layer="21"/>
+<wire x1="-11.811" y1="1.905" x2="-11.811" y2="0" width="0.4064" layer="21"/>
+<wire x1="-11.811" y1="0" x2="14.2748" y2="0" width="0.1524" layer="21"/>
+<wire x1="-11.811" y1="0" x2="-11.811" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="-12.7" y1="0" x2="-12.7" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="18.542" y1="8.001" x2="18.542" y2="-8.001" width="0.1524" layer="21"/>
+<wire x1="-18.542" y1="8.001" x2="-18.542" y2="-8.001" width="0.1524" layer="21"/>
+<wire x1="-18.542" y1="-8.001" x2="18.542" y2="-8.001" width="0.1524" layer="21"/>
+<wire x1="18.542" y1="8.001" x2="-18.542" y2="8.001" width="0.1524" layer="21"/>
+<pad name="1" x="-16.256" y="0" drill="1.1938" shape="octagon"/>
+<pad name="2" x="16.256" y="0" drill="1.1938" shape="octagon"/>
+<text x="-18.3642" y="8.3312" size="1.778" layer="25" ratio="10">>NAME</text>
+<text x="-10.8458" y="-2.8702" size="1.778" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C325-182X374">
+<description><b>CAPACITOR</b><p>
+grid 32.5 mm, outline 18.2 x 37.4 mm</description>
+<wire x1="-14.2748" y1="0" x2="-12.7" y2="0" width="0.1524" layer="21"/>
+<wire x1="-12.7" y1="1.905" x2="-12.7" y2="0" width="0.4064" layer="21"/>
+<wire x1="-11.811" y1="1.905" x2="-11.811" y2="0" width="0.4064" layer="21"/>
+<wire x1="-11.811" y1="0" x2="14.2748" y2="0" width="0.1524" layer="21"/>
+<wire x1="-11.811" y1="0" x2="-11.811" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="-12.7" y1="0" x2="-12.7" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="18.542" y1="9.017" x2="18.542" y2="-9.017" width="0.1524" layer="21"/>
+<wire x1="-18.542" y1="9.017" x2="-18.542" y2="-9.017" width="0.1524" layer="21"/>
+<wire x1="-18.542" y1="-9.017" x2="18.542" y2="-9.017" width="0.1524" layer="21"/>
+<wire x1="18.542" y1="9.017" x2="-18.542" y2="9.017" width="0.1524" layer="21"/>
+<pad name="1" x="-16.256" y="0" drill="1.1938" shape="octagon"/>
+<pad name="2" x="16.256" y="0" drill="1.1938" shape="octagon"/>
+<text x="-18.3642" y="9.3472" size="1.778" layer="25" ratio="10">>NAME</text>
+<text x="-10.8458" y="-2.8702" size="1.778" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C375-192X418">
+<description><b>CAPACITOR</b><p>
+grid 37.5 mm, outline 19.2 x 41.8 mm</description>
+<wire x1="-20.32" y1="8.509" x2="20.32" y2="8.509" width="0.1524" layer="21"/>
+<wire x1="20.828" y1="8.001" x2="20.828" y2="-8.001" width="0.1524" layer="21"/>
+<wire x1="20.32" y1="-8.509" x2="-20.32" y2="-8.509" width="0.1524" layer="21"/>
+<wire x1="-20.828" y1="-8.001" x2="-20.828" y2="8.001" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="1.905" x2="-6.731" y2="0" width="0.4064" layer="21"/>
+<wire x1="-6.731" y1="0" x2="-6.731" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="1.905" x2="-7.62" y2="0" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="0" x2="-7.62" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="20.32" y1="8.509" x2="20.828" y2="8.001" width="0.1524" layer="21" curve="-90"/>
+<wire x1="20.32" y1="-8.509" x2="20.828" y2="-8.001" width="0.1524" layer="21" curve="90"/>
+<wire x1="-20.828" y1="-8.001" x2="-20.32" y2="-8.509" width="0.1524" layer="21" curve="90"/>
+<wire x1="-20.828" y1="8.001" x2="-20.32" y2="8.509" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-16.002" y1="0" x2="-7.62" y2="0" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="0" x2="16.002" y2="0" width="0.1524" layer="21"/>
+<pad name="1" x="-18.796" y="0" drill="1.3208" shape="octagon"/>
+<pad name="2" x="18.796" y="0" drill="1.3208" shape="octagon"/>
+<text x="-20.447" y="8.89" size="1.778" layer="25" ratio="10">>NAME</text>
+<text x="-5.08" y="-2.54" size="1.778" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C375-203X418">
+<description><b>CAPACITOR</b><p>
+grid 37.5 mm, outline 20.3 x 41.8 mm</description>
+<wire x1="-20.32" y1="10.16" x2="20.32" y2="10.16" width="0.1524" layer="21"/>
+<wire x1="20.828" y1="9.652" x2="20.828" y2="-9.652" width="0.1524" layer="21"/>
+<wire x1="20.32" y1="-10.16" x2="-20.32" y2="-10.16" width="0.1524" layer="21"/>
+<wire x1="-20.828" y1="-9.652" x2="-20.828" y2="9.652" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="1.905" x2="-6.731" y2="0" width="0.4064" layer="21"/>
+<wire x1="-6.731" y1="0" x2="-6.731" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="1.905" x2="-7.62" y2="0" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="0" x2="-7.62" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="20.32" y1="10.16" x2="20.828" y2="9.652" width="0.1524" layer="21" curve="-90"/>
+<wire x1="20.32" y1="-10.16" x2="20.828" y2="-9.652" width="0.1524" layer="21" curve="90"/>
+<wire x1="-20.828" y1="-9.652" x2="-20.32" y2="-10.16" width="0.1524" layer="21" curve="90"/>
+<wire x1="-20.828" y1="9.652" x2="-20.32" y2="10.16" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-16.002" y1="0" x2="-7.62" y2="0" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="0" x2="16.002" y2="0" width="0.1524" layer="21"/>
+<pad name="1" x="-18.796" y="0" drill="1.3208" shape="octagon"/>
+<pad name="2" x="18.796" y="0" drill="1.3208" shape="octagon"/>
+<text x="-20.32" y="10.541" size="1.778" layer="25" ratio="10">>NAME</text>
+<text x="-5.08" y="-2.54" size="1.778" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C050-035X075">
+<description><b>CAPACITOR</b><p>
+grid 5 mm, outline 3.5 x 7.5 mm</description>
+<wire x1="-0.3048" y1="0.635" x2="-0.3048" y2="0" width="0.3048" layer="21"/>
+<wire x1="-0.3048" y1="0" x2="-0.3048" y2="-0.635" width="0.3048" layer="21"/>
+<wire x1="-0.3048" y1="0" x2="-1.524" y2="0" width="0.1524" layer="21"/>
+<wire x1="0.3302" y1="0.635" x2="0.3302" y2="0" width="0.3048" layer="21"/>
+<wire x1="0.3302" y1="0" x2="0.3302" y2="-0.635" width="0.3048" layer="21"/>
+<wire x1="0.3302" y1="0" x2="1.524" y2="0" width="0.1524" layer="21"/>
+<wire x1="-3.683" y1="1.524" x2="-3.683" y2="-1.524" width="0.1524" layer="21"/>
+<wire x1="-3.429" y1="-1.778" x2="3.429" y2="-1.778" width="0.1524" layer="21"/>
+<wire x1="3.683" y1="-1.524" x2="3.683" y2="1.524" width="0.1524" layer="21"/>
+<wire x1="3.429" y1="1.778" x2="-3.429" y2="1.778" width="0.1524" layer="21"/>
+<wire x1="3.429" y1="1.778" x2="3.683" y2="1.524" width="0.1524" layer="21" curve="-90"/>
+<wire x1="3.429" y1="-1.778" x2="3.683" y2="-1.524" width="0.1524" layer="21" curve="90"/>
+<wire x1="-3.683" y1="-1.524" x2="-3.429" y2="-1.778" width="0.1524" layer="21" curve="90"/>
+<wire x1="-3.683" y1="1.524" x2="-3.429" y2="1.778" width="0.1524" layer="21" curve="-90"/>
+<pad name="1" x="-2.54" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="2.54" y="0" drill="0.8128" shape="octagon"/>
+<text x="-3.556" y="2.159" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-3.556" y="-3.429" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C375-155X418">
+<description><b>CAPACITOR</b><p>
+grid 37.5 mm, outline 15.5 x 41.8 mm</description>
+<wire x1="-20.32" y1="7.62" x2="20.32" y2="7.62" width="0.1524" layer="21"/>
+<wire x1="20.828" y1="7.112" x2="20.828" y2="-7.112" width="0.1524" layer="21"/>
+<wire x1="20.32" y1="-7.62" x2="-20.32" y2="-7.62" width="0.1524" layer="21"/>
+<wire x1="-20.828" y1="-7.112" x2="-20.828" y2="7.112" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="1.905" x2="-6.731" y2="0" width="0.4064" layer="21"/>
+<wire x1="-6.731" y1="0" x2="-6.731" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="1.905" x2="-7.62" y2="0" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="0" x2="-7.62" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="20.32" y1="7.62" x2="20.828" y2="7.112" width="0.1524" layer="21" curve="-90"/>
+<wire x1="20.32" y1="-7.62" x2="20.828" y2="-7.112" width="0.1524" layer="21" curve="90"/>
+<wire x1="-20.828" y1="-7.112" x2="-20.32" y2="-7.62" width="0.1524" layer="21" curve="90"/>
+<wire x1="-20.828" y1="7.112" x2="-20.32" y2="7.62" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-16.002" y1="0" x2="-7.62" y2="0" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="0" x2="16.002" y2="0" width="0.1524" layer="21"/>
+<pad name="1" x="-18.796" y="0" drill="1.3208" shape="octagon"/>
+<pad name="2" x="18.796" y="0" drill="1.3208" shape="octagon"/>
+<text x="-20.447" y="8.001" size="1.778" layer="25" ratio="10">>NAME</text>
+<text x="-5.08" y="-2.54" size="1.778" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C075-063X106">
+<description><b>CAPACITOR</b><p>
+grid 7.5 mm, outline 6.3 x 10.6 mm</description>
+<wire x1="4.953" y1="3.048" x2="-4.953" y2="3.048" width="0.1524" layer="21"/>
+<wire x1="-5.207" y1="2.794" x2="-5.207" y2="-2.794" width="0.1524" layer="21"/>
+<wire x1="-4.953" y1="-3.048" x2="4.953" y2="-3.048" width="0.1524" layer="21"/>
+<wire x1="5.207" y1="-2.794" x2="5.207" y2="2.794" width="0.1524" layer="21"/>
+<wire x1="4.953" y1="3.048" x2="5.207" y2="2.794" width="0.1524" layer="21" curve="-90"/>
+<wire x1="4.953" y1="-3.048" x2="5.207" y2="-2.794" width="0.1524" layer="21" curve="90"/>
+<wire x1="-5.207" y1="-2.794" x2="-4.953" y2="-3.048" width="0.1524" layer="21" curve="90"/>
+<wire x1="-5.207" y1="2.794" x2="-4.953" y2="3.048" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-1.27" y1="0" x2="2.667" y2="0" width="0.1524" layer="21"/>
+<wire x1="-2.667" y1="0" x2="-2.159" y2="0" width="0.1524" layer="21"/>
+<wire x1="-2.159" y1="1.27" x2="-2.159" y2="0" width="0.4064" layer="21"/>
+<wire x1="-2.159" y1="0" x2="-2.159" y2="-1.27" width="0.4064" layer="21"/>
+<wire x1="-1.27" y1="1.27" x2="-1.27" y2="0" width="0.4064" layer="21"/>
+<wire x1="-1.27" y1="0" x2="-1.27" y2="-1.27" width="0.4064" layer="21"/>
+<pad name="1" x="-3.81" y="0" drill="0.9144" shape="octagon"/>
+<pad name="2" x="3.81" y="0" drill="0.9144" shape="octagon"/>
+<text x="-4.826" y="3.429" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-0.635" y="-2.54" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C275-154X316">
+<description><b>CAPACITOR</b><p>
+grid 27.5 mm, outline 15.4 x 31.6 mm</description>
+<wire x1="-15.24" y1="7.62" x2="15.24" y2="7.62" width="0.1524" layer="21"/>
+<wire x1="15.748" y1="7.112" x2="15.748" y2="-7.112" width="0.1524" layer="21"/>
+<wire x1="15.24" y1="-7.62" x2="-15.24" y2="-7.62" width="0.1524" layer="21"/>
+<wire x1="-15.748" y1="-7.112" x2="-15.748" y2="7.112" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="1.905" x2="-6.731" y2="0" width="0.4064" layer="21"/>
+<wire x1="-6.731" y1="0" x2="-6.731" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="1.905" x2="-7.62" y2="0" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="0" x2="-7.62" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="15.24" y1="7.62" x2="15.748" y2="7.112" width="0.1524" layer="21" curve="-90"/>
+<wire x1="15.24" y1="-7.62" x2="15.748" y2="-7.112" width="0.1524" layer="21" curve="90"/>
+<wire x1="-15.748" y1="-7.112" x2="-15.24" y2="-7.62" width="0.1524" layer="21" curve="90"/>
+<wire x1="-15.748" y1="7.112" x2="-15.24" y2="7.62" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-11.557" y1="0" x2="-7.62" y2="0" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="0" x2="11.557" y2="0" width="0.1524" layer="21"/>
+<pad name="1" x="-13.716" y="0" drill="1.1938" shape="octagon"/>
+<pad name="2" x="13.716" y="0" drill="1.1938" shape="octagon"/>
+<text x="-15.24" y="8.001" size="1.778" layer="25" ratio="10">>NAME</text>
+<text x="-5.08" y="-2.54" size="1.778" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C275-173X316">
+<description><b>CAPACITOR</b><p>
+grid 27.5 mm, outline 17.3 x 31.6 mm</description>
+<wire x1="-15.24" y1="8.509" x2="15.24" y2="8.509" width="0.1524" layer="21"/>
+<wire x1="15.748" y1="8.001" x2="15.748" y2="-8.001" width="0.1524" layer="21"/>
+<wire x1="15.24" y1="-8.509" x2="-15.24" y2="-8.509" width="0.1524" layer="21"/>
+<wire x1="-15.748" y1="-8.001" x2="-15.748" y2="8.001" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="1.905" x2="-6.731" y2="0" width="0.4064" layer="21"/>
+<wire x1="-6.731" y1="0" x2="-6.731" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="1.905" x2="-7.62" y2="0" width="0.4064" layer="21"/>
+<wire x1="-7.62" y1="0" x2="-7.62" y2="-1.905" width="0.4064" layer="21"/>
+<wire x1="15.24" y1="8.509" x2="15.748" y2="8.001" width="0.1524" layer="21" curve="-90"/>
+<wire x1="15.24" y1="-8.509" x2="15.748" y2="-8.001" width="0.1524" layer="21" curve="90"/>
+<wire x1="-15.748" y1="-8.001" x2="-15.24" y2="-8.509" width="0.1524" layer="21" curve="90"/>
+<wire x1="-15.748" y1="8.001" x2="-15.24" y2="8.509" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-11.557" y1="0" x2="-7.62" y2="0" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="0" x2="11.557" y2="0" width="0.1524" layer="21"/>
+<pad name="1" x="-13.716" y="0" drill="1.1938" shape="octagon"/>
+<pad name="2" x="13.716" y="0" drill="1.1938" shape="octagon"/>
+<text x="-15.24" y="8.89" size="1.778" layer="25" ratio="10">>NAME</text>
+<text x="-5.08" y="-2.54" size="1.778" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="C0402K">
+<description><b>Ceramic Chip Capacitor KEMET 0204 Reflow solder</b><p>
+Metric Code Size 1005</description>
+<wire x1="-0.425" y1="0.2" x2="0.425" y2="0.2" width="0.1016" layer="51"/>
+<wire x1="0.425" y1="-0.2" x2="-0.425" y2="-0.2" width="0.1016" layer="51"/>
+<smd name="1" x="-0.6" y="0" dx="0.925" dy="0.74" layer="1"/>
+<smd name="2" x="0.6" y="0" dx="0.925" dy="0.74" layer="1"/>
+<text x="-0.5" y="0.425" size="1.016" layer="25">>NAME</text>
+<text x="-0.5" y="-1.45" size="1.016" layer="27">>VALUE</text>
+<rectangle x1="-0.5" y1="-0.25" x2="-0.225" y2="0.25" layer="51"/>
+<rectangle x1="0.225" y1="-0.25" x2="0.5" y2="0.25" layer="51"/>
+</package>
+<package name="C0603K">
+<description><b>Ceramic Chip Capacitor KEMET 0603 Reflow solder</b><p>
+Metric Code Size 1608</description>
+<wire x1="-0.725" y1="0.35" x2="0.725" y2="0.35" width="0.1016" layer="51"/>
+<wire x1="0.725" y1="-0.35" x2="-0.725" y2="-0.35" width="0.1016" layer="51"/>
+<smd name="1" x="-0.875" y="0" dx="1.05" dy="1.08" layer="1"/>
+<smd name="2" x="0.875" y="0" dx="1.05" dy="1.08" layer="1"/>
+<text x="-0.8" y="0.65" size="1.016" layer="25">>NAME</text>
+<text x="-0.8" y="-1.65" size="1.016" layer="27">>VALUE</text>
+<rectangle x1="-0.8" y1="-0.4" x2="-0.45" y2="0.4" layer="51"/>
+<rectangle x1="0.45" y1="-0.4" x2="0.8" y2="0.4" layer="51"/>
+</package>
+<package name="C0805K">
+<description><b>Ceramic Chip Capacitor KEMET 0805 Reflow solder</b><p>
+Metric Code Size 2012</description>
+<wire x1="-0.925" y1="0.6" x2="0.925" y2="0.6" width="0.1016" layer="51"/>
+<wire x1="0.925" y1="-0.6" x2="-0.925" y2="-0.6" width="0.1016" layer="51"/>
+<smd name="1" x="-1" y="0" dx="1.3" dy="1.6" layer="1"/>
+<smd name="2" x="1" y="0" dx="1.3" dy="1.6" layer="1"/>
+<text x="-1" y="0.875" size="1.016" layer="25">>NAME</text>
+<text x="-1" y="-1.9" size="1.016" layer="27">>VALUE</text>
+<rectangle x1="-1" y1="-0.65" x2="-0.5" y2="0.65" layer="51"/>
+<rectangle x1="0.5" y1="-0.65" x2="1" y2="0.65" layer="51"/>
+</package>
+<package name="C1206K">
+<description><b>Ceramic Chip Capacitor KEMET 1206 Reflow solder</b><p>
+Metric Code Size 3216</description>
+<wire x1="-1.525" y1="0.75" x2="1.525" y2="0.75" width="0.1016" layer="51"/>
+<wire x1="1.525" y1="-0.75" x2="-1.525" y2="-0.75" width="0.1016" layer="51"/>
+<smd name="1" x="-1.5" y="0" dx="1.5" dy="2" layer="1"/>
+<smd name="2" x="1.5" y="0" dx="1.5" dy="2" layer="1"/>
+<text x="-1.6" y="1.1" size="1.016" layer="25">>NAME</text>
+<text x="-1.6" y="-2.1" size="1.016" layer="27">>VALUE</text>
+<rectangle x1="-1.6" y1="-0.8" x2="-1.1" y2="0.8" layer="51"/>
+<rectangle x1="1.1" y1="-0.8" x2="1.6" y2="0.8" layer="51"/>
+</package>
+<package name="C1210K">
+<description><b>Ceramic Chip Capacitor KEMET 1210 Reflow solder</b><p>
+Metric Code Size 3225</description>
+<wire x1="-1.525" y1="1.175" x2="1.525" y2="1.175" width="0.1016" layer="51"/>
+<wire x1="1.525" y1="-1.175" x2="-1.525" y2="-1.175" width="0.1016" layer="51"/>
+<smd name="1" x="-1.5" y="0" dx="1.5" dy="2.9" layer="1"/>
+<smd name="2" x="1.5" y="0" dx="1.5" dy="2.9" layer="1"/>
+<text x="-1.6" y="1.55" size="1.016" layer="25">>NAME</text>
+<text x="-1.6" y="-2.575" size="1.016" layer="27">>VALUE</text>
+<rectangle x1="-1.6" y1="-1.25" x2="-1.1" y2="1.25" layer="51"/>
+<rectangle x1="1.1" y1="-1.25" x2="1.6" y2="1.25" layer="51"/>
+</package>
+<package name="C1812K">
+<description><b>Ceramic Chip Capacitor KEMET 1812 Reflow solder</b><p>
+Metric Code Size 4532</description>
+<wire x1="-2.175" y1="1.525" x2="2.175" y2="1.525" width="0.1016" layer="51"/>
+<wire x1="2.175" y1="-1.525" x2="-2.175" y2="-1.525" width="0.1016" layer="51"/>
+<smd name="1" x="-2.05" y="0" dx="1.8" dy="3.7" layer="1"/>
+<smd name="2" x="2.05" y="0" dx="1.8" dy="3.7" layer="1"/>
+<text x="-2.25" y="1.95" size="1.016" layer="25">>NAME</text>
+<text x="-2.25" y="-2.975" size="1.016" layer="27">>VALUE</text>
+<rectangle x1="-2.25" y1="-1.6" x2="-1.65" y2="1.6" layer="51"/>
+<rectangle x1="1.65" y1="-1.6" x2="2.25" y2="1.6" layer="51"/>
+</package>
+<package name="C1825K">
+<description><b>Ceramic Chip Capacitor KEMET 1825 Reflow solder</b><p>
+Metric Code Size 4564</description>
+<wire x1="-1.525" y1="3.125" x2="1.525" y2="3.125" width="0.1016" layer="51"/>
+<wire x1="1.525" y1="-3.125" x2="-1.525" y2="-3.125" width="0.1016" layer="51"/>
+<smd name="1" x="-1.5" y="0" dx="1.8" dy="6.9" layer="1"/>
+<smd name="2" x="1.5" y="0" dx="1.8" dy="6.9" layer="1"/>
+<text x="-1.6" y="3.55" size="1.016" layer="25">>NAME</text>
+<text x="-1.6" y="-4.625" size="1.016" layer="27">>VALUE</text>
+<rectangle x1="-1.6" y1="-3.2" x2="-1.1" y2="3.2" layer="51"/>
+<rectangle x1="1.1" y1="-3.2" x2="1.6" y2="3.2" layer="51"/>
+</package>
+<package name="C2220K">
+<description><b>Ceramic Chip Capacitor KEMET 2220 Reflow solder</b><p>
+Metric Code Size 5650</description>
+<wire x1="-2.725" y1="2.425" x2="2.725" y2="2.425" width="0.1016" layer="51"/>
+<wire x1="2.725" y1="-2.425" x2="-2.725" y2="-2.425" width="0.1016" layer="51"/>
+<smd name="1" x="-2.55" y="0" dx="1.85" dy="5.5" layer="1"/>
+<smd name="2" x="2.55" y="0" dx="1.85" dy="5.5" layer="1"/>
+<text x="-2.8" y="2.95" size="1.016" layer="25">>NAME</text>
+<text x="-2.8" y="-3.975" size="1.016" layer="27">>VALUE</text>
+<rectangle x1="-2.8" y1="-2.5" x2="-2.2" y2="2.5" layer="51"/>
+<rectangle x1="2.2" y1="-2.5" x2="2.8" y2="2.5" layer="51"/>
+</package>
+<package name="C2225K">
+<description><b>Ceramic Chip Capacitor KEMET 2225 Reflow solder</b><p>
+Metric Code Size 5664</description>
+<wire x1="-2.725" y1="3.075" x2="2.725" y2="3.075" width="0.1016" layer="51"/>
+<wire x1="2.725" y1="-3.075" x2="-2.725" y2="-3.075" width="0.1016" layer="51"/>
+<smd name="1" x="-2.55" y="0" dx="1.85" dy="6.8" layer="1"/>
+<smd name="2" x="2.55" y="0" dx="1.85" dy="6.8" layer="1"/>
+<text x="-2.8" y="3.6" size="1.016" layer="25">>NAME</text>
+<text x="-2.8" y="-4.575" size="1.016" layer="27">>VALUE</text>
+<rectangle x1="-2.8" y1="-3.15" x2="-2.2" y2="3.15" layer="51"/>
+<rectangle x1="2.2" y1="-3.15" x2="2.8" y2="3.15" layer="51"/>
+</package>
+<package name="R0402">
+<description><b>RESISTOR</b><p>
+chip</description>
+<wire x1="-0.245" y1="0.224" x2="0.245" y2="0.224" width="0.1524" layer="51"/>
+<wire x1="0.245" y1="-0.224" x2="-0.245" y2="-0.224" width="0.1524" layer="51"/>
+<wire x1="-1.473" y1="0.483" x2="1.473" y2="0.483" width="0.0508" layer="39"/>
+<wire x1="1.473" y1="0.483" x2="1.473" y2="-0.483" width="0.0508" layer="39"/>
+<wire x1="1.473" y1="-0.483" x2="-1.473" y2="-0.483" width="0.0508" layer="39"/>
+<wire x1="-1.473" y1="-0.483" x2="-1.473" y2="0.483" width="0.0508" layer="39"/>
+<smd name="1" x="-0.65" y="0" dx="0.7" dy="0.9" layer="1"/>
+<smd name="2" x="0.65" y="0" dx="0.7" dy="0.9" layer="1"/>
+<text x="-0.635" y="0.762" size="1.27" layer="25">>NAME</text>
+<text x="-0.635" y="-2.032" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-0.554" y1="-0.3048" x2="-0.254" y2="0.2951" layer="51"/>
+<rectangle x1="0.2588" y1="-0.3048" x2="0.5588" y2="0.2951" layer="51"/>
+<rectangle x1="-0.1999" y1="-0.4001" x2="0.1999" y2="0.4001" layer="35"/>
+</package>
+<package name="R0603">
+<description><b>RESISTOR</b><p>
+chip</description>
+<wire x1="-0.432" y1="-0.356" x2="0.432" y2="-0.356" width="0.1524" layer="51"/>
+<wire x1="0.432" y1="0.356" x2="-0.432" y2="0.356" width="0.1524" layer="51"/>
+<wire x1="-1.473" y1="0.983" x2="1.473" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="1.473" y1="0.983" x2="1.473" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="1.473" y1="-0.983" x2="-1.473" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="-1.473" y1="-0.983" x2="-1.473" y2="0.983" width="0.0508" layer="39"/>
+<smd name="1" x="-0.85" y="0" dx="1" dy="1.1" layer="1"/>
+<smd name="2" x="0.85" y="0" dx="1" dy="1.1" layer="1"/>
+<text x="-0.889" y="0.889" size="1.27" layer="25">>NAME</text>
+<text x="-0.889" y="-2.032" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="0.4318" y1="-0.4318" x2="0.8382" y2="0.4318" layer="51"/>
+<rectangle x1="-0.8382" y1="-0.4318" x2="-0.4318" y2="0.4318" layer="51"/>
+<rectangle x1="-0.1999" y1="-0.4001" x2="0.1999" y2="0.4001" layer="35"/>
+</package>
+<package name="R0805">
+<description><b>RESISTOR</b><p>
+chip</description>
+<wire x1="-0.41" y1="0.635" x2="0.41" y2="0.635" width="0.1524" layer="51"/>
+<wire x1="-0.41" y1="-0.635" x2="0.41" y2="-0.635" width="0.1524" layer="51"/>
+<wire x1="-1.973" y1="0.983" x2="1.973" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="1.973" y1="0.983" x2="1.973" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="1.973" y1="-0.983" x2="-1.973" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="-1.973" y1="-0.983" x2="-1.973" y2="0.983" width="0.0508" layer="39"/>
+<smd name="1" x="-0.85" y="0" dx="1.3" dy="1.5" layer="1"/>
+<smd name="2" x="0.85" y="0" dx="1.3" dy="1.5" layer="1"/>
+<text x="-0.762" y="1.016" size="1.27" layer="25">>NAME</text>
+<text x="-0.762" y="-2.286" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="0.4064" y1="-0.6985" x2="1.0564" y2="0.7015" layer="51"/>
+<rectangle x1="-1.0668" y1="-0.6985" x2="-0.4168" y2="0.7015" layer="51"/>
+<rectangle x1="-0.1999" y1="-0.5001" x2="0.1999" y2="0.5001" layer="35"/>
+</package>
+<package name="R0805W">
+<description><b>RESISTOR</b><p>
+chip, wave soldering</description>
+<wire x1="-0.41" y1="0.635" x2="0.41" y2="0.635" width="0.1524" layer="51"/>
+<wire x1="-0.41" y1="-0.635" x2="0.41" y2="-0.635" width="0.1524" layer="51"/>
+<wire x1="-1.973" y1="0.983" x2="1.973" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="1.973" y1="0.983" x2="1.973" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="1.973" y1="-0.983" x2="-1.973" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="-1.973" y1="-0.983" x2="-1.973" y2="0.983" width="0.0508" layer="39"/>
+<smd name="1" x="-0.94" y="0" dx="1.5" dy="1" layer="1"/>
+<smd name="2" x="0.94" y="0" dx="1.5" dy="1" layer="1"/>
+<text x="-0.635" y="1.016" size="1.27" layer="25">>NAME</text>
+<text x="-0.635" y="-2.159" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="0.4064" y1="-0.6985" x2="1.0564" y2="0.7015" layer="51"/>
+<rectangle x1="-1.0668" y1="-0.6985" x2="-0.4168" y2="0.7015" layer="51"/>
+<rectangle x1="-0.1999" y1="-0.5001" x2="0.1999" y2="0.5001" layer="35"/>
+</package>
+<package name="R1005">
+<description><b>RESISTOR</b><p>
+chip</description>
+<wire x1="-0.245" y1="0.224" x2="0.245" y2="0.224" width="0.1524" layer="51"/>
+<wire x1="0.245" y1="-0.224" x2="-0.245" y2="-0.224" width="0.1524" layer="51"/>
+<wire x1="-1.473" y1="0.483" x2="1.473" y2="0.483" width="0.0508" layer="39"/>
+<wire x1="1.473" y1="0.483" x2="1.473" y2="-0.483" width="0.0508" layer="39"/>
+<wire x1="1.473" y1="-0.483" x2="-1.473" y2="-0.483" width="0.0508" layer="39"/>
+<wire x1="-1.473" y1="-0.483" x2="-1.473" y2="0.483" width="0.0508" layer="39"/>
+<smd name="1" x="-0.65" y="0" dx="0.7" dy="0.9" layer="1"/>
+<smd name="2" x="0.65" y="0" dx="0.7" dy="0.9" layer="1"/>
+<text x="-0.635" y="0.762" size="1.27" layer="25">>NAME</text>
+<text x="-0.635" y="-2.032" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-0.554" y1="-0.3048" x2="-0.254" y2="0.2951" layer="51"/>
+<rectangle x1="0.2588" y1="-0.3048" x2="0.5588" y2="0.2951" layer="51"/>
+<rectangle x1="-0.1999" y1="-0.3" x2="0.1999" y2="0.3" layer="35"/>
+</package>
+<package name="R1206">
+<description><b>RESISTOR</b><p>
+chip</description>
+<wire x1="0.9525" y1="-0.8128" x2="-0.9652" y2="-0.8128" width="0.1524" layer="51"/>
+<wire x1="0.9525" y1="0.8128" x2="-0.9652" y2="0.8128" width="0.1524" layer="51"/>
+<wire x1="-2.473" y1="0.983" x2="2.473" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="2.473" y1="0.983" x2="2.473" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="2.473" y1="-0.983" x2="-2.473" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="-2.473" y1="-0.983" x2="-2.473" y2="0.983" width="0.0508" layer="39"/>
+<smd name="2" x="1.422" y="0" dx="1.6" dy="1.803" layer="1"/>
+<smd name="1" x="-1.422" y="0" dx="1.6" dy="1.803" layer="1"/>
+<text x="-1.397" y="1.143" size="1.27" layer="25">>NAME</text>
+<text x="-1.397" y="-2.413" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-1.6891" y1="-0.8763" x2="-0.9525" y2="0.8763" layer="51"/>
+<rectangle x1="0.9525" y1="-0.8763" x2="1.6891" y2="0.8763" layer="51"/>
+<rectangle x1="-0.3" y1="-0.7" x2="0.3" y2="0.7" layer="35"/>
+</package>
+<package name="R1206W">
+<description><b>RESISTOR</b><p>
+chip, wave soldering</description>
+<wire x1="-0.913" y1="0.8" x2="0.888" y2="0.8" width="0.1524" layer="21"/>
+<wire x1="-0.913" y1="-0.8" x2="0.888" y2="-0.8" width="0.1524" layer="21"/>
+<wire x1="-2.473" y1="0.983" x2="2.473" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="2.473" y1="0.983" x2="2.473" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="2.473" y1="-0.983" x2="-2.473" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="-2.473" y1="-0.983" x2="-2.473" y2="0.983" width="0.0508" layer="39"/>
+<smd name="1" x="-1.499" y="0" dx="1.8" dy="1.2" layer="1"/>
+<smd name="2" x="1.499" y="0" dx="1.8" dy="1.2" layer="1"/>
+<text x="-1.651" y="1.143" size="1.27" layer="25">>NAME</text>
+<text x="-1.651" y="-2.413" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-1.651" y1="-0.8763" x2="-0.9009" y2="0.8738" layer="51"/>
+<rectangle x1="0.889" y1="-0.8763" x2="1.6391" y2="0.8738" layer="51"/>
+<rectangle x1="-0.3" y1="-0.7" x2="0.3" y2="0.7" layer="35"/>
+</package>
+<package name="R1210">
+<description><b>RESISTOR</b><p>
+chip</description>
+<wire x1="-0.913" y1="1.219" x2="0.939" y2="1.219" width="0.1524" layer="51"/>
+<wire x1="-0.913" y1="-1.219" x2="0.939" y2="-1.219" width="0.1524" layer="51"/>
+<wire x1="-2.473" y1="1.483" x2="2.473" y2="1.483" width="0.0508" layer="39"/>
+<wire x1="2.473" y1="1.483" x2="2.473" y2="-1.483" width="0.0508" layer="39"/>
+<wire x1="2.473" y1="-1.483" x2="-2.473" y2="-1.483" width="0.0508" layer="39"/>
+<wire x1="-2.473" y1="-1.483" x2="-2.473" y2="1.483" width="0.0508" layer="39"/>
+<smd name="1" x="-1.4" y="0" dx="1.6" dy="2.7" layer="1"/>
+<smd name="2" x="1.4" y="0" dx="1.6" dy="2.7" layer="1"/>
+<text x="-1.27" y="1.651" size="1.27" layer="25">>NAME</text>
+<text x="-1.27" y="-2.921" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-1.651" y1="-1.3081" x2="-0.9009" y2="1.2918" layer="51"/>
+<rectangle x1="0.9144" y1="-1.3081" x2="1.6645" y2="1.2918" layer="51"/>
+<rectangle x1="-0.3" y1="-0.8999" x2="0.3" y2="0.8999" layer="35"/>
+</package>
+<package name="R1210W">
+<description><b>RESISTOR</b><p>
+chip, wave soldering</description>
+<wire x1="-0.913" y1="1.219" x2="0.939" y2="1.219" width="0.1524" layer="21"/>
+<wire x1="-0.913" y1="-1.219" x2="0.939" y2="-1.219" width="0.1524" layer="21"/>
+<wire x1="-2.473" y1="1.483" x2="2.473" y2="1.483" width="0.0508" layer="39"/>
+<wire x1="2.473" y1="1.483" x2="2.473" y2="-1.483" width="0.0508" layer="39"/>
+<wire x1="2.473" y1="-1.483" x2="-2.473" y2="-1.483" width="0.0508" layer="39"/>
+<wire x1="-2.473" y1="-1.483" x2="-2.473" y2="1.483" width="0.0508" layer="39"/>
+<smd name="1" x="-1.499" y="0" dx="1.8" dy="1.8" layer="1"/>
+<smd name="2" x="1.499" y="0" dx="1.8" dy="1.8" layer="1"/>
+<text x="-1.651" y="1.524" size="1.27" layer="25">>NAME</text>
+<text x="-1.651" y="-2.794" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-1.651" y1="-1.3081" x2="-0.9009" y2="1.2918" layer="51"/>
+<rectangle x1="0.9144" y1="-1.3081" x2="1.6645" y2="1.2918" layer="51"/>
+<rectangle x1="-0.3" y1="-0.8001" x2="0.3" y2="0.8001" layer="35"/>
+</package>
+<package name="R2010">
+<description><b>RESISTOR</b><p>
+chip</description>
+<wire x1="-1.662" y1="1.245" x2="1.662" y2="1.245" width="0.1524" layer="51"/>
+<wire x1="-1.637" y1="-1.245" x2="1.687" y2="-1.245" width="0.1524" layer="51"/>
+<wire x1="-3.473" y1="1.483" x2="3.473" y2="1.483" width="0.0508" layer="39"/>
+<wire x1="3.473" y1="1.483" x2="3.473" y2="-1.483" width="0.0508" layer="39"/>
+<wire x1="3.473" y1="-1.483" x2="-3.473" y2="-1.483" width="0.0508" layer="39"/>
+<wire x1="-3.473" y1="-1.483" x2="-3.473" y2="1.483" width="0.0508" layer="39"/>
+<wire x1="-1.027" y1="1.245" x2="1.027" y2="1.245" width="0.1524" layer="21"/>
+<wire x1="-1.002" y1="-1.245" x2="1.016" y2="-1.245" width="0.1524" layer="21"/>
+<smd name="1" x="-2.2" y="0" dx="1.8" dy="2.7" layer="1"/>
+<smd name="2" x="2.2" y="0" dx="1.8" dy="2.7" layer="1"/>
+<text x="-2.159" y="1.651" size="1.27" layer="25">>NAME</text>
+<text x="-2.159" y="-2.921" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-2.4892" y1="-1.3208" x2="-1.6393" y2="1.3292" layer="51"/>
+<rectangle x1="1.651" y1="-1.3208" x2="2.5009" y2="1.3292" layer="51"/>
+</package>
+<package name="R2010W">
+<description><b>RESISTOR</b><p>
+chip, wave soldering</description>
+<wire x1="-1.662" y1="1.245" x2="1.662" y2="1.245" width="0.1524" layer="21"/>
+<wire x1="-1.637" y1="-1.245" x2="1.687" y2="-1.245" width="0.1524" layer="21"/>
+<wire x1="-3.473" y1="1.483" x2="3.473" y2="1.483" width="0.0508" layer="39"/>
+<wire x1="3.473" y1="1.483" x2="3.473" y2="-1.483" width="0.0508" layer="39"/>
+<wire x1="3.473" y1="-1.483" x2="-3.473" y2="-1.483" width="0.0508" layer="39"/>
+<wire x1="-3.473" y1="-1.483" x2="-3.473" y2="1.483" width="0.0508" layer="39"/>
+<smd name="1" x="-2.311" y="0" dx="2" dy="1.8" layer="1"/>
+<smd name="2" x="2.311" y="0" dx="2" dy="1.8" layer="1"/>
+<text x="-2.286" y="1.524" size="1.27" layer="25">>NAME</text>
+<text x="-2.286" y="-2.921" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-2.4892" y1="-1.3208" x2="-1.6393" y2="1.3292" layer="51"/>
+<rectangle x1="1.651" y1="-1.3208" x2="2.5009" y2="1.3292" layer="51"/>
+</package>
+<package name="R2012">
+<description><b>RESISTOR</b><p>
+chip</description>
+<wire x1="-0.41" y1="0.635" x2="0.41" y2="0.635" width="0.1524" layer="51"/>
+<wire x1="-0.41" y1="-0.635" x2="0.41" y2="-0.635" width="0.1524" layer="51"/>
+<wire x1="-1.973" y1="0.983" x2="1.973" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="1.973" y1="0.983" x2="1.973" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="1.973" y1="-0.983" x2="-1.973" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="-1.973" y1="-0.983" x2="-1.973" y2="0.983" width="0.0508" layer="39"/>
+<smd name="1" x="-0.85" y="0" dx="1.3" dy="1.5" layer="1"/>
+<smd name="2" x="0.85" y="0" dx="1.3" dy="1.5" layer="1"/>
+<text x="-0.762" y="1.016" size="1.27" layer="25">>NAME</text>
+<text x="-0.762" y="-2.286" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="0.4064" y1="-0.6985" x2="1.0564" y2="0.7015" layer="51"/>
+<rectangle x1="-1.0668" y1="-0.6985" x2="-0.4168" y2="0.7015" layer="51"/>
+<rectangle x1="-0.1001" y1="-0.5999" x2="0.1001" y2="0.5999" layer="35"/>
+</package>
+<package name="R2012W">
+<description><b>RESISTOR</b><p>
+chip, wave soldering</description>
+<wire x1="-0.41" y1="0.635" x2="0.41" y2="0.635" width="0.1524" layer="51"/>
+<wire x1="-0.41" y1="-0.635" x2="0.41" y2="-0.635" width="0.1524" layer="51"/>
+<wire x1="-1.973" y1="0.983" x2="1.973" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="1.973" y1="0.983" x2="1.973" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="1.973" y1="-0.983" x2="-1.973" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="-1.973" y1="-0.983" x2="-1.973" y2="0.983" width="0.0508" layer="39"/>
+<smd name="1" x="-0.94" y="0" dx="1.5" dy="1" layer="1"/>
+<smd name="2" x="0.94" y="0" dx="1.5" dy="1" layer="1"/>
+<text x="-0.635" y="1.016" size="1.27" layer="25">>NAME</text>
+<text x="-0.635" y="-2.286" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="0.4064" y1="-0.6985" x2="1.0564" y2="0.7015" layer="51"/>
+<rectangle x1="-1.0668" y1="-0.6985" x2="-0.4168" y2="0.7015" layer="51"/>
+<rectangle x1="-0.1001" y1="-0.5999" x2="0.1001" y2="0.5999" layer="35"/>
+</package>
+<package name="R2512">
+<description><b>RESISTOR</b><p>
+chip</description>
+<wire x1="-2.362" y1="1.473" x2="2.387" y2="1.473" width="0.1524" layer="51"/>
+<wire x1="-2.362" y1="-1.473" x2="2.387" y2="-1.473" width="0.1524" layer="51"/>
+<wire x1="-3.973" y1="1.983" x2="3.973" y2="1.983" width="0.0508" layer="39"/>
+<wire x1="3.973" y1="1.983" x2="3.973" y2="-1.983" width="0.0508" layer="39"/>
+<wire x1="3.973" y1="-1.983" x2="-3.973" y2="-1.983" width="0.0508" layer="39"/>
+<wire x1="-3.973" y1="-1.983" x2="-3.973" y2="1.983" width="0.0508" layer="39"/>
+<wire x1="-1.473" y1="1.473" x2="1.498" y2="1.473" width="0.1524" layer="21"/>
+<wire x1="-1.473" y1="-1.473" x2="1.498" y2="-1.473" width="0.1524" layer="21"/>
+<smd name="1" x="-2.8" y="0" dx="1.8" dy="3.2" layer="1"/>
+<smd name="2" x="2.8" y="0" dx="1.8" dy="3.2" layer="1"/>
+<text x="-2.667" y="1.905" size="1.27" layer="25">>NAME</text>
+<text x="-2.667" y="-3.175" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-3.2004" y1="-1.5494" x2="-2.3505" y2="1.5507" layer="51"/>
+<rectangle x1="2.3622" y1="-1.5494" x2="3.2121" y2="1.5507" layer="51"/>
+<rectangle x1="-0.5001" y1="-1" x2="0.5001" y2="1" layer="35"/>
+</package>
+<package name="R2512W">
+<description><b>RESISTOR</b><p>
+chip, wave soldering</description>
+<wire x1="-2.362" y1="1.473" x2="2.387" y2="1.473" width="0.1524" layer="21"/>
+<wire x1="-2.362" y1="-1.473" x2="2.387" y2="-1.473" width="0.1524" layer="21"/>
+<wire x1="-3.973" y1="1.983" x2="3.973" y2="1.983" width="0.0508" layer="39"/>
+<wire x1="3.973" y1="1.983" x2="3.973" y2="-1.983" width="0.0508" layer="39"/>
+<wire x1="3.973" y1="-1.983" x2="-3.973" y2="-1.983" width="0.0508" layer="39"/>
+<wire x1="-3.973" y1="-1.983" x2="-3.973" y2="1.983" width="0.0508" layer="39"/>
+<smd name="1" x="-2.896" y="0" dx="2" dy="2.1" layer="1"/>
+<smd name="2" x="2.896" y="0" dx="2" dy="2.1" layer="1"/>
+<text x="-2.794" y="1.778" size="1.27" layer="25">>NAME</text>
+<text x="-2.794" y="-3.048" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-3.2004" y1="-1.5494" x2="-2.3505" y2="1.5507" layer="51"/>
+<rectangle x1="2.3622" y1="-1.5494" x2="3.2121" y2="1.5507" layer="51"/>
+<rectangle x1="-0.5001" y1="-1" x2="0.5001" y2="1" layer="35"/>
+</package>
+<package name="R3216">
+<description><b>RESISTOR</b><p>
+chip</description>
+<wire x1="-0.913" y1="0.8" x2="0.888" y2="0.8" width="0.1524" layer="51"/>
+<wire x1="-0.913" y1="-0.8" x2="0.888" y2="-0.8" width="0.1524" layer="51"/>
+<wire x1="-2.473" y1="0.983" x2="2.473" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="2.473" y1="0.983" x2="2.473" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="2.473" y1="-0.983" x2="-2.473" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="-2.473" y1="-0.983" x2="-2.473" y2="0.983" width="0.0508" layer="39"/>
+<smd name="1" x="-1.4" y="0" dx="1.6" dy="1.8" layer="1"/>
+<smd name="2" x="1.4" y="0" dx="1.6" dy="1.8" layer="1"/>
+<text x="-1.397" y="1.143" size="1.27" layer="25">>NAME</text>
+<text x="-1.397" y="-2.413" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-1.651" y1="-0.8763" x2="-0.9009" y2="0.8738" layer="51"/>
+<rectangle x1="0.889" y1="-0.8763" x2="1.6391" y2="0.8738" layer="51"/>
+<rectangle x1="-0.3" y1="-0.7" x2="0.3" y2="0.7" layer="35"/>
+</package>
+<package name="R3216W">
+<description><b>RESISTOR</b><p>
+chip, wave soldering</description>
+<wire x1="-0.913" y1="0.8" x2="0.888" y2="0.8" width="0.1524" layer="21"/>
+<wire x1="-0.913" y1="-0.8" x2="0.888" y2="-0.8" width="0.1524" layer="21"/>
+<wire x1="-2.473" y1="0.983" x2="2.473" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="2.473" y1="0.983" x2="2.473" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="2.473" y1="-0.983" x2="-2.473" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="-2.473" y1="-0.983" x2="-2.473" y2="0.983" width="0.0508" layer="39"/>
+<smd name="1" x="-1.499" y="0" dx="1.8" dy="1.2" layer="1"/>
+<smd name="2" x="1.499" y="0" dx="1.8" dy="1.2" layer="1"/>
+<text x="-1.524" y="1.143" size="1.27" layer="25">>NAME</text>
+<text x="-1.524" y="-2.413" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-1.651" y1="-0.8763" x2="-0.9009" y2="0.8738" layer="51"/>
+<rectangle x1="0.889" y1="-0.8763" x2="1.6391" y2="0.8738" layer="51"/>
+<rectangle x1="-0.3" y1="-0.7" x2="0.3" y2="0.7" layer="35"/>
+</package>
+<package name="R3225">
+<description><b>RESISTOR</b><p>
+chip</description>
+<wire x1="-0.913" y1="1.219" x2="0.939" y2="1.219" width="0.1524" layer="51"/>
+<wire x1="-0.913" y1="-1.219" x2="0.939" y2="-1.219" width="0.1524" layer="51"/>
+<wire x1="-2.473" y1="1.483" x2="2.473" y2="1.483" width="0.0508" layer="39"/>
+<wire x1="2.473" y1="1.483" x2="2.473" y2="-1.483" width="0.0508" layer="39"/>
+<wire x1="2.473" y1="-1.483" x2="-2.473" y2="-1.483" width="0.0508" layer="39"/>
+<wire x1="-2.473" y1="-1.483" x2="-2.473" y2="1.483" width="0.0508" layer="39"/>
+<smd name="1" x="-1.4" y="0" dx="1.6" dy="2.7" layer="1"/>
+<smd name="2" x="1.4" y="0" dx="1.6" dy="2.7" layer="1"/>
+<text x="-1.397" y="1.651" size="1.27" layer="25">>NAME</text>
+<text x="-1.397" y="-2.921" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-1.651" y1="-1.3081" x2="-0.9009" y2="1.2918" layer="51"/>
+<rectangle x1="0.9144" y1="-1.3081" x2="1.6645" y2="1.2918" layer="51"/>
+<rectangle x1="-0.3" y1="-1" x2="0.3" y2="1" layer="35"/>
+</package>
+<package name="R3225W">
+<description><b>RESISTOR</b><p>
+chip, wave soldering</description>
+<wire x1="-0.913" y1="1.219" x2="0.939" y2="1.219" width="0.1524" layer="21"/>
+<wire x1="-0.913" y1="-1.219" x2="0.939" y2="-1.219" width="0.1524" layer="21"/>
+<wire x1="-2.473" y1="1.483" x2="2.473" y2="1.483" width="0.0508" layer="39"/>
+<wire x1="2.473" y1="1.483" x2="2.473" y2="-1.483" width="0.0508" layer="39"/>
+<wire x1="2.473" y1="-1.483" x2="-2.473" y2="-1.483" width="0.0508" layer="39"/>
+<wire x1="-2.473" y1="-1.483" x2="-2.473" y2="1.483" width="0.0508" layer="39"/>
+<smd name="1" x="-1.499" y="0" dx="1.8" dy="1.8" layer="1"/>
+<smd name="2" x="1.499" y="0" dx="1.8" dy="1.8" layer="1"/>
+<text x="-1.397" y="1.524" size="1.27" layer="25">>NAME</text>
+<text x="-1.397" y="-2.921" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-1.651" y1="-1.3081" x2="-0.9009" y2="1.2918" layer="51"/>
+<rectangle x1="0.9144" y1="-1.3081" x2="1.6645" y2="1.2918" layer="51"/>
+<rectangle x1="-0.3" y1="-1" x2="0.3" y2="1" layer="35"/>
+</package>
+<package name="R5025">
+<description><b>RESISTOR</b><p>
+chip</description>
+<wire x1="-1.662" y1="1.245" x2="1.662" y2="1.245" width="0.1524" layer="51"/>
+<wire x1="-1.637" y1="-1.245" x2="1.687" y2="-1.245" width="0.1524" layer="51"/>
+<wire x1="-3.473" y1="1.483" x2="3.473" y2="1.483" width="0.0508" layer="39"/>
+<wire x1="3.473" y1="1.483" x2="3.473" y2="-1.483" width="0.0508" layer="39"/>
+<wire x1="3.473" y1="-1.483" x2="-3.473" y2="-1.483" width="0.0508" layer="39"/>
+<wire x1="-3.473" y1="-1.483" x2="-3.473" y2="1.483" width="0.0508" layer="39"/>
+<wire x1="-0.9" y1="1.245" x2="0.9" y2="1.245" width="0.1524" layer="21"/>
+<wire x1="-0.875" y1="-1.245" x2="0.925" y2="-1.245" width="0.1524" layer="21"/>
+<smd name="1" x="-2.2" y="0" dx="1.8" dy="2.7" layer="1"/>
+<smd name="2" x="2.2" y="0" dx="1.8" dy="2.7" layer="1"/>
+<text x="-2.159" y="1.651" size="1.27" layer="25">>NAME</text>
+<text x="-2.159" y="-2.921" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-2.4892" y1="-1.3208" x2="-1.6393" y2="1.3292" layer="51"/>
+<rectangle x1="1.651" y1="-1.3208" x2="2.5009" y2="1.3292" layer="51"/>
+<rectangle x1="-0.5001" y1="-1" x2="0.5001" y2="1" layer="35"/>
+</package>
+<package name="R5025W">
+<description><b>RESISTOR</b><p>
+chip, wave soldering</description>
+<wire x1="-1.662" y1="1.245" x2="1.662" y2="1.245" width="0.1524" layer="21"/>
+<wire x1="-1.637" y1="-1.245" x2="1.687" y2="-1.245" width="0.1524" layer="21"/>
+<wire x1="-3.473" y1="1.483" x2="3.473" y2="1.483" width="0.0508" layer="39"/>
+<wire x1="3.473" y1="1.483" x2="3.473" y2="-1.483" width="0.0508" layer="39"/>
+<wire x1="3.473" y1="-1.483" x2="-3.473" y2="-1.483" width="0.0508" layer="39"/>
+<wire x1="-3.473" y1="-1.483" x2="-3.473" y2="1.483" width="0.0508" layer="39"/>
+<smd name="1" x="-2.311" y="0" dx="2" dy="1.8" layer="1"/>
+<smd name="2" x="2.311" y="0" dx="2" dy="1.8" layer="1"/>
+<text x="-2.286" y="1.651" size="1.27" layer="25">>NAME</text>
+<text x="-2.286" y="-2.921" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-2.4892" y1="-1.3208" x2="-1.6393" y2="1.3292" layer="51"/>
+<rectangle x1="1.651" y1="-1.3208" x2="2.5009" y2="1.3292" layer="51"/>
+<rectangle x1="-0.5001" y1="-1" x2="0.5001" y2="1" layer="35"/>
+</package>
+<package name="R6332">
+<description><b>RESISTOR</b><p>
+chip</description>
+<wire x1="-2.362" y1="1.473" x2="2.387" y2="1.473" width="0.1524" layer="51"/>
+<wire x1="-2.362" y1="-1.473" x2="2.387" y2="-1.473" width="0.1524" layer="51"/>
+<wire x1="-3.973" y1="1.983" x2="3.973" y2="1.983" width="0.0508" layer="39"/>
+<wire x1="3.973" y1="1.983" x2="3.973" y2="-1.983" width="0.0508" layer="39"/>
+<wire x1="3.973" y1="-1.983" x2="-3.973" y2="-1.983" width="0.0508" layer="39"/>
+<wire x1="-3.973" y1="-1.983" x2="-3.973" y2="1.983" width="0.0508" layer="39"/>
+<wire x1="-1.473" y1="1.473" x2="1.498" y2="1.473" width="0.1524" layer="21"/>
+<wire x1="-1.473" y1="-1.473" x2="1.498" y2="-1.473" width="0.1524" layer="21"/>
+<smd name="1" x="-2.8" y="0" dx="1.8" dy="3.2" layer="1"/>
+<smd name="2" x="2.8" y="0" dx="1.8" dy="3.2" layer="1"/>
+<text x="-2.794" y="1.905" size="1.27" layer="25">>NAME</text>
+<text x="-2.794" y="-3.175" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-3.2004" y1="-1.5494" x2="-2.3505" y2="1.5507" layer="51"/>
+<rectangle x1="2.3622" y1="-1.5494" x2="3.2121" y2="1.5507" layer="51"/>
+<rectangle x1="-0.5001" y1="-1" x2="0.5001" y2="1" layer="35"/>
+</package>
+<package name="R6332W">
+<description><b>RESISTOR</b><p>
+chip, wave soldering</description>
+<wire x1="-2.362" y1="1.473" x2="2.387" y2="1.473" width="0.1524" layer="21"/>
+<wire x1="-2.362" y1="-1.473" x2="2.387" y2="-1.473" width="0.1524" layer="21"/>
+<wire x1="-3.973" y1="1.983" x2="3.973" y2="1.983" width="0.0508" layer="39"/>
+<wire x1="3.973" y1="1.983" x2="3.973" y2="-1.983" width="0.0508" layer="39"/>
+<wire x1="3.973" y1="-1.983" x2="-3.973" y2="-1.983" width="0.0508" layer="39"/>
+<wire x1="-3.973" y1="-1.983" x2="-3.973" y2="1.983" width="0.0508" layer="39"/>
+<smd name="1" x="-2.896" y="0" dx="2" dy="2.1" layer="1"/>
+<smd name="2" x="2.896" y="0" dx="2" dy="2.1" layer="1"/>
+<text x="-2.921" y="1.778" size="1.27" layer="25">>NAME</text>
+<text x="-2.921" y="-3.048" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-3.2004" y1="-1.5494" x2="-2.3505" y2="1.5507" layer="51"/>
+<rectangle x1="2.3622" y1="-1.5494" x2="3.2121" y2="1.5507" layer="51"/>
+<rectangle x1="-0.5001" y1="-1" x2="0.5001" y2="1" layer="35"/>
+</package>
+<package name="M0805">
+<description><b>RESISTOR</b><p>
+MELF 0.10 W</description>
+<wire x1="-1.973" y1="0.983" x2="1.973" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="1.973" y1="-0.983" x2="-1.973" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="-1.973" y1="-0.983" x2="-1.973" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="1.973" y1="0.983" x2="1.973" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="0.7112" y1="0.635" x2="-0.7112" y2="0.635" width="0.1524" layer="51"/>
+<wire x1="0.7112" y1="-0.635" x2="-0.7112" y2="-0.635" width="0.1524" layer="51"/>
+<smd name="1" x="-0.95" y="0" dx="1.3" dy="1.6" layer="1"/>
+<smd name="2" x="0.95" y="0" dx="1.3" dy="1.6" layer="1"/>
+<text x="-1.016" y="1.016" size="1.27" layer="25">>NAME</text>
+<text x="-1.016" y="-2.286" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-1.0414" y1="-0.7112" x2="-0.6858" y2="0.7112" layer="51"/>
+<rectangle x1="0.6858" y1="-0.7112" x2="1.0414" y2="0.7112" layer="51"/>
+<rectangle x1="-0.1999" y1="-0.5999" x2="0.1999" y2="0.5999" layer="35"/>
+</package>
+<package name="M1206">
+<description><b>RESISTOR</b><p>
+MELF 0.25 W</description>
+<wire x1="-2.473" y1="1.483" x2="2.473" y2="1.483" width="0.0508" layer="39"/>
+<wire x1="2.473" y1="-1.483" x2="-2.473" y2="-1.483" width="0.0508" layer="39"/>
+<wire x1="-2.473" y1="-1.483" x2="-2.473" y2="1.483" width="0.0508" layer="39"/>
+<wire x1="2.473" y1="1.483" x2="2.473" y2="-1.483" width="0.0508" layer="39"/>
+<wire x1="1.143" y1="0.8382" x2="-1.143" y2="0.8382" width="0.1524" layer="51"/>
+<wire x1="1.143" y1="-0.8382" x2="-1.143" y2="-0.8382" width="0.1524" layer="51"/>
+<smd name="1" x="-1.4" y="0" dx="1.6" dy="2" layer="1"/>
+<smd name="2" x="1.4" y="0" dx="1.6" dy="2" layer="1"/>
+<text x="-1.27" y="1.27" size="1.27" layer="25">>NAME</text>
+<text x="-1.27" y="-2.54" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-1.7018" y1="-0.9144" x2="-1.1176" y2="0.9144" layer="51"/>
+<rectangle x1="1.1176" y1="-0.9144" x2="1.7018" y2="0.9144" layer="51"/>
+<rectangle x1="-0.3" y1="-0.8001" x2="0.3" y2="0.8001" layer="35"/>
+</package>
+<package name="M1406">
+<description><b>RESISTOR</b><p>
+MELF 0.12 W</description>
+<wire x1="-2.973" y1="0.983" x2="2.973" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="2.973" y1="-0.983" x2="-2.973" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="-2.973" y1="-0.983" x2="-2.973" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="2.973" y1="0.983" x2="2.973" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="1.3208" y1="0.762" x2="-1.3208" y2="0.762" width="0.1524" layer="51"/>
+<wire x1="1.3208" y1="-0.762" x2="-1.3208" y2="-0.762" width="0.1524" layer="51"/>
+<wire x1="0.6858" y1="0.762" x2="-0.6858" y2="0.762" width="0.1524" layer="21"/>
+<wire x1="0.6858" y1="-0.762" x2="-0.6858" y2="-0.762" width="0.1524" layer="21"/>
+<smd name="1" x="-1.7" y="0" dx="1.4" dy="1.8" layer="1"/>
+<smd name="2" x="1.7" y="0" dx="1.4" dy="1.8" layer="1"/>
+<text x="-1.651" y="1.143" size="1.27" layer="25">>NAME</text>
+<text x="-1.651" y="-2.413" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-1.8542" y1="-0.8382" x2="-1.2954" y2="0.8382" layer="51"/>
+<rectangle x1="1.2954" y1="-0.8382" x2="1.8542" y2="0.8382" layer="51"/>
+<rectangle x1="-0.3" y1="-0.7" x2="0.3" y2="0.7" layer="35"/>
+</package>
+<package name="M2012">
+<description><b>RESISTOR</b><p>
+MELF 0.10 W</description>
+<wire x1="-1.973" y1="0.983" x2="1.973" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="1.973" y1="-0.983" x2="-1.973" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="-1.973" y1="-0.983" x2="-1.973" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="1.973" y1="0.983" x2="1.973" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="0.7112" y1="0.635" x2="-0.7112" y2="0.635" width="0.1524" layer="51"/>
+<wire x1="0.7112" y1="-0.635" x2="-0.7112" y2="-0.635" width="0.1524" layer="51"/>
+<smd name="1" x="-0.95" y="0" dx="1.3" dy="1.6" layer="1"/>
+<smd name="2" x="0.95" y="0" dx="1.3" dy="1.6" layer="1"/>
+<text x="-1.016" y="1.016" size="1.27" layer="25">>NAME</text>
+<text x="-1.016" y="-2.286" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-1.0414" y1="-0.7112" x2="-0.6858" y2="0.7112" layer="51"/>
+<rectangle x1="0.6858" y1="-0.7112" x2="1.0414" y2="0.7112" layer="51"/>
+<rectangle x1="-0.1999" y1="-0.5999" x2="0.1999" y2="0.5999" layer="35"/>
+</package>
+<package name="M2309">
+<description><b>RESISTOR</b><p>
+MELF 0.25 W</description>
+<wire x1="-4.473" y1="1.483" x2="4.473" y2="1.483" width="0.0508" layer="39"/>
+<wire x1="4.473" y1="-1.483" x2="-4.473" y2="-1.483" width="0.0508" layer="39"/>
+<wire x1="-4.473" y1="-1.483" x2="-4.473" y2="1.483" width="0.0508" layer="39"/>
+<wire x1="4.473" y1="1.483" x2="4.473" y2="-1.483" width="0.0508" layer="39"/>
+<wire x1="2.413" y1="1.1684" x2="-2.4384" y2="1.1684" width="0.1524" layer="51"/>
+<wire x1="2.413" y1="-1.1684" x2="-2.413" y2="-1.1684" width="0.1524" layer="51"/>
+<wire x1="1.651" y1="1.1684" x2="-1.6764" y2="1.1684" width="0.1524" layer="21"/>
+<wire x1="1.651" y1="-1.1684" x2="-1.651" y2="-1.1684" width="0.1524" layer="21"/>
+<smd name="1" x="-2.85" y="0" dx="1.5" dy="2.6" layer="1"/>
+<smd name="2" x="2.85" y="0" dx="1.5" dy="2.6" layer="1"/>
+<text x="-2.794" y="1.651" size="1.27" layer="25">>NAME</text>
+<text x="-2.794" y="-2.794" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-3.048" y1="-1.2446" x2="-2.3876" y2="1.2446" layer="51"/>
+<rectangle x1="2.3876" y1="-1.2446" x2="3.048" y2="1.2446" layer="51"/>
+<rectangle x1="-0.5001" y1="-1" x2="0.5001" y2="1" layer="35"/>
+</package>
+<package name="M3216">
+<description><b>RESISTOR</b><p>
+MELF 0.25 W</description>
+<wire x1="-2.473" y1="1.483" x2="2.473" y2="1.483" width="0.0508" layer="39"/>
+<wire x1="2.473" y1="-1.483" x2="-2.473" y2="-1.483" width="0.0508" layer="39"/>
+<wire x1="-2.473" y1="-1.483" x2="-2.473" y2="1.483" width="0.0508" layer="39"/>
+<wire x1="2.473" y1="1.483" x2="2.473" y2="-1.483" width="0.0508" layer="39"/>
+<wire x1="1.143" y1="0.8382" x2="-1.143" y2="0.8382" width="0.1524" layer="51"/>
+<wire x1="1.143" y1="-0.8382" x2="-1.143" y2="-0.8382" width="0.1524" layer="51"/>
+<smd name="1" x="-1.4" y="0" dx="1.6" dy="2" layer="1"/>
+<smd name="2" x="1.4" y="0" dx="1.6" dy="2" layer="1"/>
+<text x="-1.27" y="1.27" size="1.27" layer="25">>NAME</text>
+<text x="-1.27" y="-2.54" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-1.7018" y1="-0.9144" x2="-1.1176" y2="0.9144" layer="51"/>
+<rectangle x1="1.1176" y1="-0.9144" x2="1.7018" y2="0.9144" layer="51"/>
+<rectangle x1="-0.3" y1="-0.8001" x2="0.3" y2="0.8001" layer="35"/>
+</package>
+<package name="M3516">
+<description><b>RESISTOR</b><p>
+MELF 0.12 W</description>
+<wire x1="-2.973" y1="0.983" x2="2.973" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="2.973" y1="-0.983" x2="-2.973" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="-2.973" y1="-0.983" x2="-2.973" y2="0.983" width="0.0508" layer="39"/>
+<wire x1="2.973" y1="0.983" x2="2.973" y2="-0.983" width="0.0508" layer="39"/>
+<wire x1="1.3208" y1="0.762" x2="-1.3208" y2="0.762" width="0.1524" layer="51"/>
+<wire x1="1.3208" y1="-0.762" x2="-1.3208" y2="-0.762" width="0.1524" layer="51"/>
+<wire x1="0.6858" y1="0.762" x2="-0.6858" y2="0.762" width="0.1524" layer="21"/>
+<wire x1="0.6858" y1="-0.762" x2="-0.6858" y2="-0.762" width="0.1524" layer="21"/>
+<smd name="1" x="-1.7" y="0" dx="1.4" dy="1.8" layer="1"/>
+<smd name="2" x="1.7" y="0" dx="1.4" dy="1.8" layer="1"/>
+<text x="-1.651" y="1.143" size="1.27" layer="25">>NAME</text>
+<text x="-1.651" y="-2.413" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-1.8542" y1="-0.8382" x2="-1.2954" y2="0.8382" layer="51"/>
+<rectangle x1="1.2954" y1="-0.8382" x2="1.8542" y2="0.8382" layer="51"/>
+<rectangle x1="-0.4001" y1="-0.7" x2="0.4001" y2="0.7" layer="35"/>
+</package>
+<package name="M5923">
+<description><b>RESISTOR</b><p>
+MELF 0.25 W</description>
+<wire x1="-4.473" y1="1.483" x2="4.473" y2="1.483" width="0.0508" layer="39"/>
+<wire x1="4.473" y1="-1.483" x2="-4.473" y2="-1.483" width="0.0508" layer="39"/>
+<wire x1="-4.473" y1="-1.483" x2="-4.473" y2="1.483" width="0.0508" layer="39"/>
+<wire x1="4.473" y1="1.483" x2="4.473" y2="-1.483" width="0.0508" layer="39"/>
+<wire x1="2.413" y1="1.1684" x2="-2.4384" y2="1.1684" width="0.1524" layer="51"/>
+<wire x1="2.413" y1="-1.1684" x2="-2.413" y2="-1.1684" width="0.1524" layer="51"/>
+<wire x1="1.651" y1="1.1684" x2="-1.6764" y2="1.1684" width="0.1524" layer="21"/>
+<wire x1="1.651" y1="-1.1684" x2="-1.651" y2="-1.1684" width="0.1524" layer="21"/>
+<smd name="1" x="-2.85" y="0" dx="1.5" dy="2.6" layer="1"/>
+<smd name="2" x="2.85" y="0" dx="1.5" dy="2.6" layer="1"/>
+<text x="-2.794" y="1.651" size="1.27" layer="25">>NAME</text>
+<text x="-2.794" y="-2.794" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-3.048" y1="-1.2446" x2="-2.3876" y2="1.2446" layer="51"/>
+<rectangle x1="2.3876" y1="-1.2446" x2="3.048" y2="1.2446" layer="51"/>
+<rectangle x1="-0.5001" y1="-1" x2="0.5001" y2="1" layer="35"/>
+</package>
+<package name="0204/5">
+<description><b>RESISTOR</b><p>
+type 0204, grid 5 mm</description>
+<wire x1="2.54" y1="0" x2="2.032" y2="0" width="0.508" layer="51"/>
+<wire x1="-2.54" y1="0" x2="-2.032" y2="0" width="0.508" layer="51"/>
+<wire x1="-1.778" y1="0.635" x2="-1.524" y2="0.889" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-1.778" y1="-0.635" x2="-1.524" y2="-0.889" width="0.1524" layer="21" curve="90"/>
+<wire x1="1.524" y1="-0.889" x2="1.778" y2="-0.635" width="0.1524" layer="21" curve="90"/>
+<wire x1="1.524" y1="0.889" x2="1.778" y2="0.635" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-1.778" y1="-0.635" x2="-1.778" y2="0.635" width="0.1524" layer="51"/>
+<wire x1="-1.524" y1="0.889" x2="-1.27" y2="0.889" width="0.1524" layer="21"/>
+<wire x1="-1.143" y1="0.762" x2="-1.27" y2="0.889" width="0.1524" layer="21"/>
+<wire x1="-1.524" y1="-0.889" x2="-1.27" y2="-0.889" width="0.1524" layer="21"/>
+<wire x1="-1.143" y1="-0.762" x2="-1.27" y2="-0.889" width="0.1524" layer="21"/>
+<wire x1="1.143" y1="0.762" x2="1.27" y2="0.889" width="0.1524" layer="21"/>
+<wire x1="1.143" y1="0.762" x2="-1.143" y2="0.762" width="0.1524" layer="21"/>
+<wire x1="1.143" y1="-0.762" x2="1.27" y2="-0.889" width="0.1524" layer="21"/>
+<wire x1="1.143" y1="-0.762" x2="-1.143" y2="-0.762" width="0.1524" layer="21"/>
+<wire x1="1.524" y1="0.889" x2="1.27" y2="0.889" width="0.1524" layer="21"/>
+<wire x1="1.524" y1="-0.889" x2="1.27" y2="-0.889" width="0.1524" layer="21"/>
+<wire x1="1.778" y1="-0.635" x2="1.778" y2="0.635" width="0.1524" layer="51"/>
+<pad name="1" x="-2.54" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="2.54" y="0" drill="0.8128" shape="octagon"/>
+<text x="-2.0066" y="1.1684" size="0.9906" layer="25" ratio="10">>NAME</text>
+<text x="-2.1336" y="-2.3114" size="0.9906" layer="27" ratio="10">>VALUE</text>
+<rectangle x1="-2.032" y1="-0.254" x2="-1.778" y2="0.254" layer="51"/>
+<rectangle x1="1.778" y1="-0.254" x2="2.032" y2="0.254" layer="51"/>
+</package>
+<package name="0204/7">
+<description><b>RESISTOR</b><p>
+type 0204, grid 7.5 mm</description>
+<wire x1="3.81" y1="0" x2="2.921" y2="0" width="0.508" layer="51"/>
+<wire x1="-3.81" y1="0" x2="-2.921" y2="0" width="0.508" layer="51"/>
+<wire x1="-2.54" y1="0.762" x2="-2.286" y2="1.016" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-2.54" y1="-0.762" x2="-2.286" y2="-1.016" width="0.1524" layer="21" curve="90"/>
+<wire x1="2.286" y1="-1.016" x2="2.54" y2="-0.762" width="0.1524" layer="21" curve="90"/>
+<wire x1="2.286" y1="1.016" x2="2.54" y2="0.762" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-2.54" y1="-0.762" x2="-2.54" y2="0.762" width="0.1524" layer="21"/>
+<wire x1="-2.286" y1="1.016" x2="-1.905" y2="1.016" width="0.1524" layer="21"/>
+<wire x1="-1.778" y1="0.889" x2="-1.905" y2="1.016" width="0.1524" layer="21"/>
+<wire x1="-2.286" y1="-1.016" x2="-1.905" y2="-1.016" width="0.1524" layer="21"/>
+<wire x1="-1.778" y1="-0.889" x2="-1.905" y2="-1.016" width="0.1524" layer="21"/>
+<wire x1="1.778" y1="0.889" x2="1.905" y2="1.016" width="0.1524" layer="21"/>
+<wire x1="1.778" y1="0.889" x2="-1.778" y2="0.889" width="0.1524" layer="21"/>
+<wire x1="1.778" y1="-0.889" x2="1.905" y2="-1.016" width="0.1524" layer="21"/>
+<wire x1="1.778" y1="-0.889" x2="-1.778" y2="-0.889" width="0.1524" layer="21"/>
+<wire x1="2.286" y1="1.016" x2="1.905" y2="1.016" width="0.1524" layer="21"/>
+<wire x1="2.286" y1="-1.016" x2="1.905" y2="-1.016" width="0.1524" layer="21"/>
+<wire x1="2.54" y1="-0.762" x2="2.54" y2="0.762" width="0.1524" layer="21"/>
+<pad name="1" x="-3.81" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="3.81" y="0" drill="0.8128" shape="octagon"/>
+<text x="-2.54" y="1.2954" size="0.9906" layer="25" ratio="10">>NAME</text>
+<text x="-1.6256" y="-0.4826" size="0.9906" layer="27" ratio="10">>VALUE</text>
+<rectangle x1="2.54" y1="-0.254" x2="2.921" y2="0.254" layer="21"/>
+<rectangle x1="-2.921" y1="-0.254" x2="-2.54" y2="0.254" layer="21"/>
+</package>
+<package name="0207/10">
+<description><b>RESISTOR</b><p>
+type 0207, grid 10 mm</description>
+<wire x1="5.08" y1="0" x2="4.064" y2="0" width="0.6096" layer="51"/>
+<wire x1="-5.08" y1="0" x2="-4.064" y2="0" width="0.6096" layer="51"/>
+<wire x1="-3.175" y1="0.889" x2="-2.921" y2="1.143" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-3.175" y1="-0.889" x2="-2.921" y2="-1.143" width="0.1524" layer="21" curve="90"/>
+<wire x1="2.921" y1="-1.143" x2="3.175" y2="-0.889" width="0.1524" layer="21" curve="90"/>
+<wire x1="2.921" y1="1.143" x2="3.175" y2="0.889" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-3.175" y1="-0.889" x2="-3.175" y2="0.889" width="0.1524" layer="21"/>
+<wire x1="-2.921" y1="1.143" x2="-2.54" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="-2.413" y1="1.016" x2="-2.54" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="-2.921" y1="-1.143" x2="-2.54" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="-2.413" y1="-1.016" x2="-2.54" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="1.016" x2="2.54" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="1.016" x2="-2.413" y2="1.016" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="-1.016" x2="2.54" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="-1.016" x2="-2.413" y2="-1.016" width="0.1524" layer="21"/>
+<wire x1="2.921" y1="1.143" x2="2.54" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="2.921" y1="-1.143" x2="2.54" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="3.175" y1="-0.889" x2="3.175" y2="0.889" width="0.1524" layer="21"/>
+<pad name="1" x="-5.08" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="5.08" y="0" drill="0.8128" shape="octagon"/>
+<text x="-3.048" y="1.524" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-2.2606" y="-0.635" size="1.27" layer="27" ratio="10">>VALUE</text>
+<rectangle x1="3.175" y1="-0.3048" x2="4.0386" y2="0.3048" layer="21"/>
+<rectangle x1="-4.0386" y1="-0.3048" x2="-3.175" y2="0.3048" layer="21"/>
+</package>
+<package name="0207/12">
+<description><b>RESISTOR</b><p>
+type 0207, grid 12 mm</description>
+<wire x1="6.35" y1="0" x2="5.334" y2="0" width="0.6096" layer="51"/>
+<wire x1="-6.35" y1="0" x2="-5.334" y2="0" width="0.6096" layer="51"/>
+<wire x1="-3.175" y1="0.889" x2="-2.921" y2="1.143" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-3.175" y1="-0.889" x2="-2.921" y2="-1.143" width="0.1524" layer="21" curve="90"/>
+<wire x1="2.921" y1="-1.143" x2="3.175" y2="-0.889" width="0.1524" layer="21" curve="90"/>
+<wire x1="2.921" y1="1.143" x2="3.175" y2="0.889" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-3.175" y1="-0.889" x2="-3.175" y2="0.889" width="0.1524" layer="21"/>
+<wire x1="-2.921" y1="1.143" x2="-2.54" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="-2.413" y1="1.016" x2="-2.54" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="-2.921" y1="-1.143" x2="-2.54" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="-2.413" y1="-1.016" x2="-2.54" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="1.016" x2="2.54" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="1.016" x2="-2.413" y2="1.016" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="-1.016" x2="2.54" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="-1.016" x2="-2.413" y2="-1.016" width="0.1524" layer="21"/>
+<wire x1="2.921" y1="1.143" x2="2.54" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="2.921" y1="-1.143" x2="2.54" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="3.175" y1="-0.889" x2="3.175" y2="0.889" width="0.1524" layer="21"/>
+<wire x1="4.445" y1="0" x2="4.064" y2="0" width="0.6096" layer="21"/>
+<wire x1="-4.445" y1="0" x2="-4.064" y2="0" width="0.6096" layer="21"/>
+<pad name="1" x="-6.35" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="6.35" y="0" drill="0.8128" shape="octagon"/>
+<text x="-3.175" y="1.397" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-2.286" y="-0.6858" size="1.27" layer="27" ratio="10">>VALUE</text>
+<rectangle x1="3.175" y1="-0.3048" x2="4.0386" y2="0.3048" layer="21"/>
+<rectangle x1="-4.0386" y1="-0.3048" x2="-3.175" y2="0.3048" layer="21"/>
+<rectangle x1="4.445" y1="-0.3048" x2="5.3086" y2="0.3048" layer="21"/>
+<rectangle x1="-5.3086" y1="-0.3048" x2="-4.445" y2="0.3048" layer="21"/>
+</package>
+<package name="0207/15">
+<description><b>RESISTOR</b><p>
+type 0207, grid 15mm</description>
+<wire x1="7.62" y1="0" x2="6.604" y2="0" width="0.6096" layer="51"/>
+<wire x1="-7.62" y1="0" x2="-6.604" y2="0" width="0.6096" layer="51"/>
+<wire x1="-3.175" y1="0.889" x2="-2.921" y2="1.143" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-3.175" y1="-0.889" x2="-2.921" y2="-1.143" width="0.1524" layer="21" curve="90"/>
+<wire x1="2.921" y1="-1.143" x2="3.175" y2="-0.889" width="0.1524" layer="21" curve="90"/>
+<wire x1="2.921" y1="1.143" x2="3.175" y2="0.889" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-3.175" y1="-0.889" x2="-3.175" y2="0.889" width="0.1524" layer="21"/>
+<wire x1="-2.921" y1="1.143" x2="-2.54" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="-2.413" y1="1.016" x2="-2.54" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="-2.921" y1="-1.143" x2="-2.54" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="-2.413" y1="-1.016" x2="-2.54" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="1.016" x2="2.54" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="1.016" x2="-2.413" y2="1.016" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="-1.016" x2="2.54" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="-1.016" x2="-2.413" y2="-1.016" width="0.1524" layer="21"/>
+<wire x1="2.921" y1="1.143" x2="2.54" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="2.921" y1="-1.143" x2="2.54" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="3.175" y1="-0.889" x2="3.175" y2="0.889" width="0.1524" layer="21"/>
+<wire x1="5.715" y1="0" x2="4.064" y2="0" width="0.6096" layer="21"/>
+<wire x1="-5.715" y1="0" x2="-4.064" y2="0" width="0.6096" layer="21"/>
+<pad name="1" x="-7.62" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="7.62" y="0" drill="0.8128" shape="octagon"/>
+<text x="-3.175" y="1.397" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-2.286" y="-0.6858" size="1.27" layer="27" ratio="10">>VALUE</text>
+<rectangle x1="3.175" y1="-0.3048" x2="4.0386" y2="0.3048" layer="21"/>
+<rectangle x1="-4.0386" y1="-0.3048" x2="-3.175" y2="0.3048" layer="21"/>
+<rectangle x1="5.715" y1="-0.3048" x2="6.5786" y2="0.3048" layer="21"/>
+<rectangle x1="-6.5786" y1="-0.3048" x2="-5.715" y2="0.3048" layer="21"/>
+</package>
+<package name="0207/2V">
+<description><b>RESISTOR</b><p>
+type 0207, grid 2.5 mm</description>
+<wire x1="-1.27" y1="0" x2="-0.381" y2="0" width="0.6096" layer="51"/>
+<wire x1="-0.254" y1="0" x2="0.254" y2="0" width="0.6096" layer="21"/>
+<wire x1="0.381" y1="0" x2="1.27" y2="0" width="0.6096" layer="51"/>
+<circle x="-1.27" y="0" radius="1.27" width="0.1524" layer="21"/>
+<circle x="-1.27" y="0" radius="1.016" width="0.1524" layer="51"/>
+<pad name="1" x="-1.27" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="1.27" y="0" drill="0.8128" shape="octagon"/>
+<text x="-0.0508" y="1.016" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-0.0508" y="-2.2352" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="0207/5V">
+<description><b>RESISTOR</b><p>
+type 0207, grid 5 mm</description>
+<wire x1="-2.54" y1="0" x2="-0.889" y2="0" width="0.6096" layer="51"/>
+<wire x1="-0.762" y1="0" x2="0.762" y2="0" width="0.6096" layer="21"/>
+<wire x1="0.889" y1="0" x2="2.54" y2="0" width="0.6096" layer="51"/>
+<circle x="-2.54" y="0" radius="1.27" width="0.1016" layer="21"/>
+<circle x="-2.54" y="0" radius="1.016" width="0.1524" layer="51"/>
+<pad name="1" x="-2.54" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="2.54" y="0" drill="0.8128" shape="octagon"/>
+<text x="-1.143" y="0.889" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-1.143" y="-2.159" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="0207/7">
+<description><b>RESISTOR</b><p>
+type 0207, grid 7.5 mm</description>
+<wire x1="-3.81" y1="0" x2="-3.429" y2="0" width="0.6096" layer="51"/>
+<wire x1="-3.175" y1="0.889" x2="-2.921" y2="1.143" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-3.175" y1="-0.889" x2="-2.921" y2="-1.143" width="0.1524" layer="21" curve="90"/>
+<wire x1="2.921" y1="-1.143" x2="3.175" y2="-0.889" width="0.1524" layer="21" curve="90"/>
+<wire x1="2.921" y1="1.143" x2="3.175" y2="0.889" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-3.175" y1="-0.889" x2="-3.175" y2="0.889" width="0.1524" layer="51"/>
+<wire x1="-2.921" y1="1.143" x2="-2.54" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="-2.413" y1="1.016" x2="-2.54" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="-2.921" y1="-1.143" x2="-2.54" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="-2.413" y1="-1.016" x2="-2.54" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="1.016" x2="2.54" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="1.016" x2="-2.413" y2="1.016" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="-1.016" x2="2.54" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="2.413" y1="-1.016" x2="-2.413" y2="-1.016" width="0.1524" layer="21"/>
+<wire x1="2.921" y1="1.143" x2="2.54" y2="1.143" width="0.1524" layer="21"/>
+<wire x1="2.921" y1="-1.143" x2="2.54" y2="-1.143" width="0.1524" layer="21"/>
+<wire x1="3.175" y1="-0.889" x2="3.175" y2="0.889" width="0.1524" layer="51"/>
+<wire x1="3.429" y1="0" x2="3.81" y2="0" width="0.6096" layer="51"/>
+<pad name="1" x="-3.81" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="3.81" y="0" drill="0.8128" shape="octagon"/>
+<text x="-2.54" y="1.397" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-2.286" y="-0.5588" size="1.27" layer="27" ratio="10">>VALUE</text>
+<rectangle x1="-3.429" y1="-0.3048" x2="-3.175" y2="0.3048" layer="51"/>
+<rectangle x1="3.175" y1="-0.3048" x2="3.429" y2="0.3048" layer="51"/>
+</package>
+<package name="0309/10">
+<description><b>RESISTOR</b><p>
+type 0309, grid 10mm</description>
+<wire x1="-4.699" y1="0" x2="-5.08" y2="0" width="0.6096" layer="51"/>
+<wire x1="-4.318" y1="1.27" x2="-4.064" y2="1.524" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-4.318" y1="-1.27" x2="-4.064" y2="-1.524" width="0.1524" layer="21" curve="90"/>
+<wire x1="4.064" y1="-1.524" x2="4.318" y2="-1.27" width="0.1524" layer="21" curve="90"/>
+<wire x1="4.064" y1="1.524" x2="4.318" y2="1.27" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-4.318" y1="-1.27" x2="-4.318" y2="1.27" width="0.1524" layer="51"/>
+<wire x1="-4.064" y1="1.524" x2="-3.429" y2="1.524" width="0.1524" layer="21"/>
+<wire x1="-3.302" y1="1.397" x2="-3.429" y2="1.524" width="0.1524" layer="21"/>
+<wire x1="-4.064" y1="-1.524" x2="-3.429" y2="-1.524" width="0.1524" layer="21"/>
+<wire x1="-3.302" y1="-1.397" x2="-3.429" y2="-1.524" width="0.1524" layer="21"/>
+<wire x1="3.302" y1="1.397" x2="3.429" y2="1.524" width="0.1524" layer="21"/>
+<wire x1="3.302" y1="1.397" x2="-3.302" y2="1.397" width="0.1524" layer="21"/>
+<wire x1="3.302" y1="-1.397" x2="3.429" y2="-1.524" width="0.1524" layer="21"/>
+<wire x1="3.302" y1="-1.397" x2="-3.302" y2="-1.397" width="0.1524" layer="21"/>
+<wire x1="4.064" y1="1.524" x2="3.429" y2="1.524" width="0.1524" layer="21"/>
+<wire x1="4.064" y1="-1.524" x2="3.429" y2="-1.524" width="0.1524" layer="21"/>
+<wire x1="4.318" y1="-1.27" x2="4.318" y2="1.27" width="0.1524" layer="51"/>
+<wire x1="5.08" y1="0" x2="4.699" y2="0" width="0.6096" layer="51"/>
+<pad name="1" x="-5.08" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="5.08" y="0" drill="0.8128" shape="octagon"/>
+<text x="-4.191" y="1.905" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-3.175" y="-0.6858" size="1.27" layer="27" ratio="10">>VALUE</text>
+<rectangle x1="-4.6228" y1="-0.3048" x2="-4.318" y2="0.3048" layer="51"/>
+<rectangle x1="4.318" y1="-0.3048" x2="4.6228" y2="0.3048" layer="51"/>
+</package>
+<package name="0309/12">
+<description><b>RESISTOR</b><p>
+type 0309, grid 12.5 mm</description>
+<wire x1="6.35" y1="0" x2="5.08" y2="0" width="0.6096" layer="51"/>
+<wire x1="-6.35" y1="0" x2="-5.08" y2="0" width="0.6096" layer="51"/>
+<wire x1="-4.318" y1="1.27" x2="-4.064" y2="1.524" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-4.318" y1="-1.27" x2="-4.064" y2="-1.524" width="0.1524" layer="21" curve="90"/>
+<wire x1="4.064" y1="-1.524" x2="4.318" y2="-1.27" width="0.1524" layer="21" curve="90"/>
+<wire x1="4.064" y1="1.524" x2="4.318" y2="1.27" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-4.318" y1="-1.27" x2="-4.318" y2="1.27" width="0.1524" layer="21"/>
+<wire x1="-4.064" y1="1.524" x2="-3.429" y2="1.524" width="0.1524" layer="21"/>
+<wire x1="-3.302" y1="1.397" x2="-3.429" y2="1.524" width="0.1524" layer="21"/>
+<wire x1="-4.064" y1="-1.524" x2="-3.429" y2="-1.524" width="0.1524" layer="21"/>
+<wire x1="-3.302" y1="-1.397" x2="-3.429" y2="-1.524" width="0.1524" layer="21"/>
+<wire x1="3.302" y1="1.397" x2="3.429" y2="1.524" width="0.1524" layer="21"/>
+<wire x1="3.302" y1="1.397" x2="-3.302" y2="1.397" width="0.1524" layer="21"/>
+<wire x1="3.302" y1="-1.397" x2="3.429" y2="-1.524" width="0.1524" layer="21"/>
+<wire x1="3.302" y1="-1.397" x2="-3.302" y2="-1.397" width="0.1524" layer="21"/>
+<wire x1="4.064" y1="1.524" x2="3.429" y2="1.524" width="0.1524" layer="21"/>
+<wire x1="4.064" y1="-1.524" x2="3.429" y2="-1.524" width="0.1524" layer="21"/>
+<wire x1="4.318" y1="-1.27" x2="4.318" y2="1.27" width="0.1524" layer="21"/>
+<pad name="1" x="-6.35" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="6.35" y="0" drill="0.8128" shape="octagon"/>
+<text x="-4.191" y="1.905" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-3.175" y="-0.6858" size="1.27" layer="27" ratio="10">>VALUE</text>
+<rectangle x1="4.318" y1="-0.3048" x2="5.1816" y2="0.3048" layer="21"/>
+<rectangle x1="-5.1816" y1="-0.3048" x2="-4.318" y2="0.3048" layer="21"/>
+</package>
+<package name="0411/12">
+<description><b>RESISTOR</b><p>
+type 0411, grid 12.5 mm</description>
+<wire x1="6.35" y1="0" x2="5.461" y2="0" width="0.762" layer="51"/>
+<wire x1="-6.35" y1="0" x2="-5.461" y2="0" width="0.762" layer="51"/>
+<wire x1="5.08" y1="-1.651" x2="5.08" y2="1.651" width="0.1524" layer="21"/>
+<wire x1="4.699" y1="2.032" x2="5.08" y2="1.651" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-5.08" y1="-1.651" x2="-4.699" y2="-2.032" width="0.1524" layer="21" curve="90"/>
+<wire x1="4.699" y1="-2.032" x2="5.08" y2="-1.651" width="0.1524" layer="21" curve="90"/>
+<wire x1="-5.08" y1="1.651" x2="-4.699" y2="2.032" width="0.1524" layer="21" curve="-90"/>
+<wire x1="4.699" y1="2.032" x2="4.064" y2="2.032" width="0.1524" layer="21"/>
+<wire x1="3.937" y1="1.905" x2="4.064" y2="2.032" width="0.1524" layer="21"/>
+<wire x1="4.699" y1="-2.032" x2="4.064" y2="-2.032" width="0.1524" layer="21"/>
+<wire x1="3.937" y1="-1.905" x2="4.064" y2="-2.032" width="0.1524" layer="21"/>
+<wire x1="-3.937" y1="1.905" x2="-4.064" y2="2.032" width="0.1524" layer="21"/>
+<wire x1="-3.937" y1="1.905" x2="3.937" y2="1.905" width="0.1524" layer="21"/>
+<wire x1="-3.937" y1="-1.905" x2="-4.064" y2="-2.032" width="0.1524" layer="21"/>
+<wire x1="-3.937" y1="-1.905" x2="3.937" y2="-1.905" width="0.1524" layer="21"/>
+<wire x1="-5.08" y1="1.651" x2="-5.08" y2="-1.651" width="0.1524" layer="21"/>
+<wire x1="-4.699" y1="2.032" x2="-4.064" y2="2.032" width="0.1524" layer="21"/>
+<wire x1="-4.699" y1="-2.032" x2="-4.064" y2="-2.032" width="0.1524" layer="21"/>
+<pad name="1" x="-6.35" y="0" drill="0.9144" shape="octagon"/>
+<pad name="2" x="6.35" y="0" drill="0.9144" shape="octagon"/>
+<text x="-5.08" y="2.413" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-3.5814" y="-0.635" size="1.27" layer="27" ratio="10">>VALUE</text>
+<rectangle x1="-5.3594" y1="-0.381" x2="-5.08" y2="0.381" layer="21"/>
+<rectangle x1="5.08" y1="-0.381" x2="5.3594" y2="0.381" layer="21"/>
+</package>
+<package name="0411/15">
+<description><b>RESISTOR</b><p>
+type 0411, grid 15 mm</description>
+<wire x1="5.08" y1="-1.651" x2="5.08" y2="1.651" width="0.1524" layer="21"/>
+<wire x1="4.699" y1="2.032" x2="5.08" y2="1.651" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-5.08" y1="-1.651" x2="-4.699" y2="-2.032" width="0.1524" layer="21" curve="90"/>
+<wire x1="4.699" y1="-2.032" x2="5.08" y2="-1.651" width="0.1524" layer="21" curve="90"/>
+<wire x1="-5.08" y1="1.651" x2="-4.699" y2="2.032" width="0.1524" layer="21" curve="-90"/>
+<wire x1="4.699" y1="2.032" x2="4.064" y2="2.032" width="0.1524" layer="21"/>
+<wire x1="3.937" y1="1.905" x2="4.064" y2="2.032" width="0.1524" layer="21"/>
+<wire x1="4.699" y1="-2.032" x2="4.064" y2="-2.032" width="0.1524" layer="21"/>
+<wire x1="3.937" y1="-1.905" x2="4.064" y2="-2.032" width="0.1524" layer="21"/>
+<wire x1="-3.937" y1="1.905" x2="-4.064" y2="2.032" width="0.1524" layer="21"/>
+<wire x1="-3.937" y1="1.905" x2="3.937" y2="1.905" width="0.1524" layer="21"/>
+<wire x1="-3.937" y1="-1.905" x2="-4.064" y2="-2.032" width="0.1524" layer="21"/>
+<wire x1="-3.937" y1="-1.905" x2="3.937" y2="-1.905" width="0.1524" layer="21"/>
+<wire x1="-5.08" y1="1.651" x2="-5.08" y2="-1.651" width="0.1524" layer="21"/>
+<wire x1="-4.699" y1="2.032" x2="-4.064" y2="2.032" width="0.1524" layer="21"/>
+<wire x1="-4.699" y1="-2.032" x2="-4.064" y2="-2.032" width="0.1524" layer="21"/>
+<wire x1="-7.62" y1="0" x2="-6.35" y2="0" width="0.762" layer="51"/>
+<wire x1="6.35" y1="0" x2="7.62" y2="0" width="0.762" layer="51"/>
+<pad name="1" x="-7.62" y="0" drill="0.9144" shape="octagon"/>
+<pad name="2" x="7.62" y="0" drill="0.9144" shape="octagon"/>
+<text x="-5.08" y="2.413" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-3.5814" y="-0.635" size="1.27" layer="27" ratio="10">>VALUE</text>
+<rectangle x1="5.08" y1="-0.381" x2="6.477" y2="0.381" layer="21"/>
+<rectangle x1="-6.477" y1="-0.381" x2="-5.08" y2="0.381" layer="21"/>
+</package>
+<package name="0411V">
+<description><b>RESISTOR</b><p>
+type 0411, grid 3.81 mm</description>
+<wire x1="1.27" y1="0" x2="0.3048" y2="0" width="0.762" layer="51"/>
+<wire x1="-1.5748" y1="0" x2="-2.54" y2="0" width="0.762" layer="51"/>
+<circle x="-2.54" y="0" radius="2.032" width="0.1524" layer="21"/>
+<circle x="-2.54" y="0" radius="1.016" width="0.1524" layer="51"/>
+<pad name="1" x="-2.54" y="0" drill="0.9144" shape="octagon"/>
+<pad name="2" x="1.27" y="0" drill="0.9144" shape="octagon"/>
+<text x="-0.508" y="1.143" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-0.5334" y="-2.413" size="1.27" layer="27" ratio="10">>VALUE</text>
+<rectangle x1="-1.4732" y1="-0.381" x2="0.2032" y2="0.381" layer="21"/>
+</package>
+<package name="0414/15">
+<description><b>RESISTOR</b><p>
+type 0414, grid 15 mm</description>
+<wire x1="7.62" y1="0" x2="6.604" y2="0" width="0.8128" layer="51"/>
+<wire x1="-7.62" y1="0" x2="-6.604" y2="0" width="0.8128" layer="51"/>
+<wire x1="-6.096" y1="1.905" x2="-5.842" y2="2.159" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-6.096" y1="-1.905" x2="-5.842" y2="-2.159" width="0.1524" layer="21" curve="90"/>
+<wire x1="5.842" y1="-2.159" x2="6.096" y2="-1.905" width="0.1524" layer="21" curve="90"/>
+<wire x1="5.842" y1="2.159" x2="6.096" y2="1.905" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-6.096" y1="-1.905" x2="-6.096" y2="1.905" width="0.1524" layer="21"/>
+<wire x1="-5.842" y1="2.159" x2="-4.953" y2="2.159" width="0.1524" layer="21"/>
+<wire x1="-4.826" y1="2.032" x2="-4.953" y2="2.159" width="0.1524" layer="21"/>
+<wire x1="-5.842" y1="-2.159" x2="-4.953" y2="-2.159" width="0.1524" layer="21"/>
+<wire x1="-4.826" y1="-2.032" x2="-4.953" y2="-2.159" width="0.1524" layer="21"/>
+<wire x1="4.826" y1="2.032" x2="4.953" y2="2.159" width="0.1524" layer="21"/>
+<wire x1="4.826" y1="2.032" x2="-4.826" y2="2.032" width="0.1524" layer="21"/>
+<wire x1="4.826" y1="-2.032" x2="4.953" y2="-2.159" width="0.1524" layer="21"/>
+<wire x1="4.826" y1="-2.032" x2="-4.826" y2="-2.032" width="0.1524" layer="21"/>
+<wire x1="5.842" y1="2.159" x2="4.953" y2="2.159" width="0.1524" layer="21"/>
+<wire x1="5.842" y1="-2.159" x2="4.953" y2="-2.159" width="0.1524" layer="21"/>
+<wire x1="6.096" y1="-1.905" x2="6.096" y2="1.905" width="0.1524" layer="21"/>
+<pad name="1" x="-7.62" y="0" drill="1.016" shape="octagon"/>
+<pad name="2" x="7.62" y="0" drill="1.016" shape="octagon"/>
+<text x="-6.096" y="2.5654" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-4.318" y="-0.5842" size="1.27" layer="27" ratio="10">>VALUE</text>
+<rectangle x1="6.096" y1="-0.4064" x2="6.5024" y2="0.4064" layer="21"/>
+<rectangle x1="-6.5024" y1="-0.4064" x2="-6.096" y2="0.4064" layer="21"/>
+</package>
+<package name="0414V">
+<description><b>RESISTOR</b><p>
+type 0414, grid 5 mm</description>
+<wire x1="2.54" y1="0" x2="1.397" y2="0" width="0.8128" layer="51"/>
+<wire x1="-2.54" y1="0" x2="-1.397" y2="0" width="0.8128" layer="51"/>
+<circle x="-2.54" y="0" radius="2.159" width="0.1524" layer="21"/>
+<circle x="-2.54" y="0" radius="1.143" width="0.1524" layer="51"/>
+<pad name="1" x="-2.54" y="0" drill="1.016" shape="octagon"/>
+<pad name="2" x="2.54" y="0" drill="1.016" shape="octagon"/>
+<text x="-0.381" y="1.1684" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-0.381" y="-2.3622" size="1.27" layer="27" ratio="10">>VALUE</text>
+<rectangle x1="-1.2954" y1="-0.4064" x2="1.2954" y2="0.4064" layer="21"/>
+</package>
+<package name="0617/17">
+<description><b>RESISTOR</b><p>
+type 0617, grid 17.5 mm</description>
+<wire x1="-8.89" y1="0" x2="-8.636" y2="0" width="0.8128" layer="51"/>
+<wire x1="-7.874" y1="3.048" x2="-6.985" y2="3.048" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="2.794" x2="-6.985" y2="3.048" width="0.1524" layer="21"/>
+<wire x1="-7.874" y1="-3.048" x2="-6.985" y2="-3.048" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="-2.794" x2="-6.985" y2="-3.048" width="0.1524" layer="21"/>
+<wire x1="6.731" y1="2.794" x2="6.985" y2="3.048" width="0.1524" layer="21"/>
+<wire x1="6.731" y1="2.794" x2="-6.731" y2="2.794" width="0.1524" layer="21"/>
+<wire x1="6.731" y1="-2.794" x2="6.985" y2="-3.048" width="0.1524" layer="21"/>
+<wire x1="6.731" y1="-2.794" x2="-6.731" y2="-2.794" width="0.1524" layer="21"/>
+<wire x1="7.874" y1="3.048" x2="6.985" y2="3.048" width="0.1524" layer="21"/>
+<wire x1="7.874" y1="-3.048" x2="6.985" y2="-3.048" width="0.1524" layer="21"/>
+<wire x1="-8.255" y1="-2.667" x2="-8.255" y2="-1.016" width="0.1524" layer="21"/>
+<wire x1="-8.255" y1="1.016" x2="-8.255" y2="-1.016" width="0.1524" layer="51"/>
+<wire x1="-8.255" y1="1.016" x2="-8.255" y2="2.667" width="0.1524" layer="21"/>
+<wire x1="8.255" y1="-2.667" x2="8.255" y2="-1.016" width="0.1524" layer="21"/>
+<wire x1="8.255" y1="1.016" x2="8.255" y2="-1.016" width="0.1524" layer="51"/>
+<wire x1="8.255" y1="1.016" x2="8.255" y2="2.667" width="0.1524" layer="21"/>
+<wire x1="8.636" y1="0" x2="8.89" y2="0" width="0.8128" layer="51"/>
+<wire x1="-8.255" y1="2.667" x2="-7.874" y2="3.048" width="0.1524" layer="21" curve="-90"/>
+<wire x1="7.874" y1="3.048" x2="8.255" y2="2.667" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-8.255" y1="-2.667" x2="-7.874" y2="-3.048" width="0.1524" layer="21" curve="90"/>
+<wire x1="7.874" y1="-3.048" x2="8.255" y2="-2.667" width="0.1524" layer="21" curve="90"/>
+<pad name="1" x="-8.89" y="0" drill="1.016" shape="octagon"/>
+<pad name="2" x="8.89" y="0" drill="1.016" shape="octagon"/>
+<text x="-8.128" y="3.4544" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-6.096" y="-0.7112" size="1.27" layer="27" ratio="10">>VALUE</text>
+<rectangle x1="-8.5344" y1="-0.4064" x2="-8.2296" y2="0.4064" layer="51"/>
+<rectangle x1="8.2296" y1="-0.4064" x2="8.5344" y2="0.4064" layer="51"/>
+</package>
+<package name="0617/22">
+<description><b>RESISTOR</b><p>
+type 0617, grid 22.5 mm</description>
+<wire x1="-10.287" y1="0" x2="-11.43" y2="0" width="0.8128" layer="51"/>
+<wire x1="-8.255" y1="-2.667" x2="-8.255" y2="2.667" width="0.1524" layer="21"/>
+<wire x1="-7.874" y1="3.048" x2="-6.985" y2="3.048" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="2.794" x2="-6.985" y2="3.048" width="0.1524" layer="21"/>
+<wire x1="-7.874" y1="-3.048" x2="-6.985" y2="-3.048" width="0.1524" layer="21"/>
+<wire x1="-6.731" y1="-2.794" x2="-6.985" y2="-3.048" width="0.1524" layer="21"/>
+<wire x1="6.731" y1="2.794" x2="6.985" y2="3.048" width="0.1524" layer="21"/>
+<wire x1="6.731" y1="2.794" x2="-6.731" y2="2.794" width="0.1524" layer="21"/>
+<wire x1="6.731" y1="-2.794" x2="6.985" y2="-3.048" width="0.1524" layer="21"/>
+<wire x1="6.731" y1="-2.794" x2="-6.731" y2="-2.794" width="0.1524" layer="21"/>
+<wire x1="7.874" y1="3.048" x2="6.985" y2="3.048" width="0.1524" layer="21"/>
+<wire x1="7.874" y1="-3.048" x2="6.985" y2="-3.048" width="0.1524" layer="21"/>
+<wire x1="8.255" y1="-2.667" x2="8.255" y2="2.667" width="0.1524" layer="21"/>
+<wire x1="11.43" y1="0" x2="10.287" y2="0" width="0.8128" layer="51"/>
+<wire x1="-8.255" y1="2.667" x2="-7.874" y2="3.048" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-8.255" y1="-2.667" x2="-7.874" y2="-3.048" width="0.1524" layer="21" curve="90"/>
+<wire x1="7.874" y1="3.048" x2="8.255" y2="2.667" width="0.1524" layer="21" curve="-90"/>
+<wire x1="7.874" y1="-3.048" x2="8.255" y2="-2.667" width="0.1524" layer="21" curve="90"/>
+<pad name="1" x="-11.43" y="0" drill="1.016" shape="octagon"/>
+<pad name="2" x="11.43" y="0" drill="1.016" shape="octagon"/>
+<text x="-8.255" y="3.4544" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-6.477" y="-0.5842" size="1.27" layer="27" ratio="10">>VALUE</text>
+<rectangle x1="-10.1854" y1="-0.4064" x2="-8.255" y2="0.4064" layer="21"/>
+<rectangle x1="8.255" y1="-0.4064" x2="10.1854" y2="0.4064" layer="21"/>
+</package>
+<package name="0617V">
+<description><b>RESISTOR</b><p>
+type 0617, grid 5 mm</description>
+<wire x1="-2.54" y1="0" x2="-1.27" y2="0" width="0.8128" layer="51"/>
+<wire x1="1.27" y1="0" x2="2.54" y2="0" width="0.8128" layer="51"/>
+<circle x="-2.54" y="0" radius="3.048" width="0.1524" layer="21"/>
+<circle x="-2.54" y="0" radius="1.143" width="0.1524" layer="51"/>
+<pad name="1" x="-2.54" y="0" drill="1.016" shape="octagon"/>
+<pad name="2" x="2.54" y="0" drill="1.016" shape="octagon"/>
+<text x="0.635" y="1.4224" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="0.635" y="-2.6162" size="1.27" layer="27" ratio="10">>VALUE</text>
+<rectangle x1="-1.3208" y1="-0.4064" x2="1.3208" y2="0.4064" layer="21"/>
+</package>
+<package name="0922/22">
+<description><b>RESISTOR</b><p>
+type 0922, grid 22.5 mm</description>
+<wire x1="11.43" y1="0" x2="10.795" y2="0" width="0.8128" layer="51"/>
+<wire x1="-11.43" y1="0" x2="-10.795" y2="0" width="0.8128" layer="51"/>
+<wire x1="-10.16" y1="-4.191" x2="-10.16" y2="4.191" width="0.1524" layer="21"/>
+<wire x1="-9.779" y1="4.572" x2="-8.89" y2="4.572" width="0.1524" layer="21"/>
+<wire x1="-8.636" y1="4.318" x2="-8.89" y2="4.572" width="0.1524" layer="21"/>
+<wire x1="-9.779" y1="-4.572" x2="-8.89" y2="-4.572" width="0.1524" layer="21"/>
+<wire x1="-8.636" y1="-4.318" x2="-8.89" y2="-4.572" width="0.1524" layer="21"/>
+<wire x1="8.636" y1="4.318" x2="8.89" y2="4.572" width="0.1524" layer="21"/>
+<wire x1="8.636" y1="4.318" x2="-8.636" y2="4.318" width="0.1524" layer="21"/>
+<wire x1="8.636" y1="-4.318" x2="8.89" y2="-4.572" width="0.1524" layer="21"/>
+<wire x1="8.636" y1="-4.318" x2="-8.636" y2="-4.318" width="0.1524" layer="21"/>
+<wire x1="9.779" y1="4.572" x2="8.89" y2="4.572" width="0.1524" layer="21"/>
+<wire x1="9.779" y1="-4.572" x2="8.89" y2="-4.572" width="0.1524" layer="21"/>
+<wire x1="10.16" y1="-4.191" x2="10.16" y2="4.191" width="0.1524" layer="21"/>
+<wire x1="-10.16" y1="-4.191" x2="-9.779" y2="-4.572" width="0.1524" layer="21" curve="90"/>
+<wire x1="-10.16" y1="4.191" x2="-9.779" y2="4.572" width="0.1524" layer="21" curve="-90"/>
+<wire x1="9.779" y1="-4.572" x2="10.16" y2="-4.191" width="0.1524" layer="21" curve="90"/>
+<wire x1="9.779" y1="4.572" x2="10.16" y2="4.191" width="0.1524" layer="21" curve="-90"/>
+<pad name="1" x="-11.43" y="0" drill="1.016" shape="octagon"/>
+<pad name="2" x="11.43" y="0" drill="1.016" shape="octagon"/>
+<text x="-10.16" y="5.1054" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-6.477" y="-0.5842" size="1.27" layer="27" ratio="10">>VALUE</text>
+<rectangle x1="-10.7188" y1="-0.4064" x2="-10.16" y2="0.4064" layer="51"/>
+<rectangle x1="10.16" y1="-0.4064" x2="10.3124" y2="0.4064" layer="21"/>
+<rectangle x1="-10.3124" y1="-0.4064" x2="-10.16" y2="0.4064" layer="21"/>
+<rectangle x1="10.16" y1="-0.4064" x2="10.7188" y2="0.4064" layer="51"/>
+</package>
+<package name="P0613V">
+<description><b>RESISTOR</b><p>
+type 0613, grid 5 mm</description>
+<wire x1="2.54" y1="0" x2="1.397" y2="0" width="0.8128" layer="51"/>
+<wire x1="-2.54" y1="0" x2="-1.397" y2="0" width="0.8128" layer="51"/>
+<circle x="-2.54" y="0" radius="2.286" width="0.1524" layer="21"/>
+<circle x="-2.54" y="0" radius="1.143" width="0.1524" layer="51"/>
+<pad name="1" x="-2.54" y="0" drill="1.016" shape="octagon"/>
+<pad name="2" x="2.54" y="0" drill="1.016" shape="octagon"/>
+<text x="-0.254" y="1.143" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-0.254" y="-2.413" size="1.27" layer="27" ratio="10">>VALUE</text>
+<rectangle x1="-1.2954" y1="-0.4064" x2="1.3208" y2="0.4064" layer="21"/>
+</package>
+<package name="P0613/15">
+<description><b>RESISTOR</b><p>
+type 0613, grid 15 mm</description>
+<wire x1="7.62" y1="0" x2="6.985" y2="0" width="0.8128" layer="51"/>
+<wire x1="-7.62" y1="0" x2="-6.985" y2="0" width="0.8128" layer="51"/>
+<wire x1="-6.477" y1="2.032" x2="-6.223" y2="2.286" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-6.477" y1="-2.032" x2="-6.223" y2="-2.286" width="0.1524" layer="21" curve="90"/>
+<wire x1="6.223" y1="-2.286" x2="6.477" y2="-2.032" width="0.1524" layer="21" curve="90"/>
+<wire x1="6.223" y1="2.286" x2="6.477" y2="2.032" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-6.223" y1="2.286" x2="-5.334" y2="2.286" width="0.1524" layer="21"/>
+<wire x1="-5.207" y1="2.159" x2="-5.334" y2="2.286" width="0.1524" layer="21"/>
+<wire x1="-6.223" y1="-2.286" x2="-5.334" y2="-2.286" width="0.1524" layer="21"/>
+<wire x1="-5.207" y1="-2.159" x2="-5.334" y2="-2.286" width="0.1524" layer="21"/>
+<wire x1="5.207" y1="2.159" x2="5.334" y2="2.286" width="0.1524" layer="21"/>
+<wire x1="5.207" y1="2.159" x2="-5.207" y2="2.159" width="0.1524" layer="21"/>
+<wire x1="5.207" y1="-2.159" x2="5.334" y2="-2.286" width="0.1524" layer="21"/>
+<wire x1="5.207" y1="-2.159" x2="-5.207" y2="-2.159" width="0.1524" layer="21"/>
+<wire x1="6.223" y1="2.286" x2="5.334" y2="2.286" width="0.1524" layer="21"/>
+<wire x1="6.223" y1="-2.286" x2="5.334" y2="-2.286" width="0.1524" layer="21"/>
+<wire x1="6.477" y1="-0.635" x2="6.477" y2="-2.032" width="0.1524" layer="21"/>
+<wire x1="6.477" y1="-0.635" x2="6.477" y2="0.635" width="0.1524" layer="51"/>
+<wire x1="6.477" y1="2.032" x2="6.477" y2="0.635" width="0.1524" layer="21"/>
+<wire x1="-6.477" y1="-2.032" x2="-6.477" y2="-0.635" width="0.1524" layer="21"/>
+<wire x1="-6.477" y1="0.635" x2="-6.477" y2="-0.635" width="0.1524" layer="51"/>
+<wire x1="-6.477" y1="0.635" x2="-6.477" y2="2.032" width="0.1524" layer="21"/>
+<pad name="1" x="-7.62" y="0" drill="1.016" shape="octagon"/>
+<pad name="2" x="7.62" y="0" drill="1.016" shape="octagon"/>
+<text x="-6.477" y="2.6924" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-4.318" y="-0.7112" size="1.27" layer="27" ratio="10">>VALUE</text>
+<rectangle x1="-7.0358" y1="-0.4064" x2="-6.477" y2="0.4064" layer="51"/>
+<rectangle x1="6.477" y1="-0.4064" x2="7.0358" y2="0.4064" layer="51"/>
+</package>
+<package name="P0817/22">
+<description><b>RESISTOR</b><p>
+type 0817, grid 22.5 mm</description>
+<wire x1="-10.414" y1="0" x2="-11.43" y2="0" width="0.8128" layer="51"/>
+<wire x1="-8.509" y1="-3.429" x2="-8.509" y2="3.429" width="0.1524" layer="21"/>
+<wire x1="-8.128" y1="3.81" x2="-7.239" y2="3.81" width="0.1524" layer="21"/>
+<wire x1="-6.985" y1="3.556" x2="-7.239" y2="3.81" width="0.1524" layer="21"/>
+<wire x1="-8.128" y1="-3.81" x2="-7.239" y2="-3.81" width="0.1524" layer="21"/>
+<wire x1="-6.985" y1="-3.556" x2="-7.239" y2="-3.81" width="0.1524" layer="21"/>
+<wire x1="6.985" y1="3.556" x2="7.239" y2="3.81" width="0.1524" layer="21"/>
+<wire x1="6.985" y1="3.556" x2="-6.985" y2="3.556" width="0.1524" layer="21"/>
+<wire x1="6.985" y1="-3.556" x2="7.239" y2="-3.81" width="0.1524" layer="21"/>
+<wire x1="6.985" y1="-3.556" x2="-6.985" y2="-3.556" width="0.1524" layer="21"/>
+<wire x1="8.128" y1="3.81" x2="7.239" y2="3.81" width="0.1524" layer="21"/>
+<wire x1="8.128" y1="-3.81" x2="7.239" y2="-3.81" width="0.1524" layer="21"/>
+<wire x1="8.509" y1="-3.429" x2="8.509" y2="3.429" width="0.1524" layer="21"/>
+<wire x1="11.43" y1="0" x2="10.414" y2="0" width="0.8128" layer="51"/>
+<wire x1="-8.509" y1="3.429" x2="-8.128" y2="3.81" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-8.509" y1="-3.429" x2="-8.128" y2="-3.81" width="0.1524" layer="21" curve="90"/>
+<wire x1="8.128" y1="3.81" x2="8.509" y2="3.429" width="0.1524" layer="21" curve="-90"/>
+<wire x1="8.128" y1="-3.81" x2="8.509" y2="-3.429" width="0.1524" layer="21" curve="90"/>
+<pad name="1" x="-11.43" y="0" drill="1.016" shape="octagon"/>
+<pad name="2" x="11.43" y="0" drill="1.016" shape="octagon"/>
+<text x="-8.382" y="4.2164" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-6.223" y="-0.5842" size="1.27" layer="27" ratio="10">>VALUE</text>
+<text x="6.604" y="-2.2606" size="1.27" layer="51" ratio="10" rot="R90">0817</text>
+<rectangle x1="8.509" y1="-0.4064" x2="10.3124" y2="0.4064" layer="21"/>
+<rectangle x1="-10.3124" y1="-0.4064" x2="-8.509" y2="0.4064" layer="21"/>
+</package>
+<package name="P0817V">
+<description><b>RESISTOR</b><p>
+type 0817, grid 6.35 mm</description>
+<wire x1="-3.81" y1="0" x2="-5.08" y2="0" width="0.8128" layer="51"/>
+<wire x1="1.27" y1="0" x2="0" y2="0" width="0.8128" layer="51"/>
+<circle x="-5.08" y="0" radius="3.81" width="0.1524" layer="21"/>
+<circle x="-5.08" y="0" radius="1.27" width="0.1524" layer="51"/>
+<pad name="1" x="-5.08" y="0" drill="1.016" shape="octagon"/>
+<pad name="2" x="1.27" y="0" drill="1.016" shape="octagon"/>
+<text x="-1.016" y="1.27" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-1.016" y="-2.54" size="1.27" layer="27" ratio="10">>VALUE</text>
+<text x="-6.858" y="2.032" size="1.016" layer="21" ratio="12">0817</text>
+<rectangle x1="-3.81" y1="-0.4064" x2="0" y2="0.4064" layer="21"/>
+</package>
+<package name="V234/12">
+<description><b>RESISTOR</b><p>
+type V234, grid 12.5 mm</description>
+<wire x1="-4.953" y1="1.524" x2="-4.699" y2="1.778" width="0.1524" layer="21" curve="-90"/>
+<wire x1="4.699" y1="1.778" x2="4.953" y2="1.524" width="0.1524" layer="21" curve="-90"/>
+<wire x1="4.699" y1="-1.778" x2="4.953" y2="-1.524" width="0.1524" layer="21" curve="90"/>
+<wire x1="-4.953" y1="-1.524" x2="-4.699" y2="-1.778" width="0.1524" layer="21" curve="90"/>
+<wire x1="-4.699" y1="1.778" x2="4.699" y2="1.778" width="0.1524" layer="21"/>
+<wire x1="-4.953" y1="1.524" x2="-4.953" y2="-1.524" width="0.1524" layer="21"/>
+<wire x1="4.699" y1="-1.778" x2="-4.699" y2="-1.778" width="0.1524" layer="21"/>
+<wire x1="4.953" y1="1.524" x2="4.953" y2="-1.524" width="0.1524" layer="21"/>
+<wire x1="6.35" y1="0" x2="5.461" y2="0" width="0.8128" layer="51"/>
+<wire x1="-6.35" y1="0" x2="-5.461" y2="0" width="0.8128" layer="51"/>
+<pad name="1" x="-6.35" y="0" drill="1.016" shape="octagon"/>
+<pad name="2" x="6.35" y="0" drill="1.016" shape="octagon"/>
+<text x="-4.953" y="2.159" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-3.81" y="-0.635" size="1.27" layer="27" ratio="10">>VALUE</text>
+<rectangle x1="4.953" y1="-0.4064" x2="5.4102" y2="0.4064" layer="21"/>
+<rectangle x1="-5.4102" y1="-0.4064" x2="-4.953" y2="0.4064" layer="21"/>
+</package>
+<package name="V235/17">
+<description><b>RESISTOR</b><p>
+type V235, grid 17.78 mm</description>
+<wire x1="-6.731" y1="2.921" x2="6.731" y2="2.921" width="0.1524" layer="21"/>
+<wire x1="-7.112" y1="2.54" x2="-7.112" y2="-2.54" width="0.1524" layer="21"/>
+<wire x1="6.731" y1="-2.921" x2="-6.731" y2="-2.921" width="0.1524" layer="21"/>
+<wire x1="7.112" y1="2.54" x2="7.112" y2="-2.54" width="0.1524" layer="21"/>
+<wire x1="8.89" y1="0" x2="7.874" y2="0" width="1.016" layer="51"/>
+<wire x1="-7.874" y1="0" x2="-8.89" y2="0" width="1.016" layer="51"/>
+<wire x1="-7.112" y1="-2.54" x2="-6.731" y2="-2.921" width="0.1524" layer="21" curve="90"/>
+<wire x1="6.731" y1="2.921" x2="7.112" y2="2.54" width="0.1524" layer="21" curve="-90"/>
+<wire x1="6.731" y1="-2.921" x2="7.112" y2="-2.54" width="0.1524" layer="21" curve="90"/>
+<wire x1="-7.112" y1="2.54" x2="-6.731" y2="2.921" width="0.1524" layer="21" curve="-90"/>
+<pad name="1" x="-8.89" y="0" drill="1.1938" shape="octagon"/>
+<pad name="2" x="8.89" y="0" drill="1.1938" shape="octagon"/>
+<text x="-6.858" y="3.302" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-5.842" y="-0.635" size="1.27" layer="27" ratio="10">>VALUE</text>
+<rectangle x1="7.112" y1="-0.508" x2="7.747" y2="0.508" layer="21"/>
+<rectangle x1="-7.747" y1="-0.508" x2="-7.112" y2="0.508" layer="21"/>
+</package>
+<package name="V526-0">
+<description><b>RESISTOR</b><p>
+type V526-0, grid 2.5 mm</description>
+<wire x1="-2.54" y1="1.016" x2="-2.286" y2="1.27" width="0.1524" layer="21" curve="-90"/>
+<wire x1="2.286" y1="1.27" x2="2.54" y2="1.016" width="0.1524" layer="21" curve="-90"/>
+<wire x1="2.286" y1="-1.27" x2="2.54" y2="-1.016" width="0.1524" layer="21" curve="90"/>
+<wire x1="-2.54" y1="-1.016" x2="-2.286" y2="-1.27" width="0.1524" layer="21" curve="90"/>
+<wire x1="2.286" y1="1.27" x2="-2.286" y2="1.27" width="0.1524" layer="21"/>
+<wire x1="2.54" y1="-1.016" x2="2.54" y2="1.016" width="0.1524" layer="21"/>
+<wire x1="-2.286" y1="-1.27" x2="2.286" y2="-1.27" width="0.1524" layer="21"/>
+<wire x1="-2.54" y1="1.016" x2="-2.54" y2="-1.016" width="0.1524" layer="21"/>
+<pad name="1" x="-1.27" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="1.27" y="0" drill="0.8128" shape="octagon"/>
+<text x="-2.413" y="1.651" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-2.413" y="-2.794" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="MINI_MELF-0102AX">
+<description><b>Mini MELF 0102 Axial</b></description>
+<circle x="0" y="0" radius="0.6" width="0" layer="51"/>
+<circle x="0" y="0" radius="0.6" width="0" layer="52"/>
+<smd name="1" x="0" y="0" dx="1.9" dy="1.9" layer="1" roundness="100"/>
+<smd name="2" x="0" y="0" dx="1.9" dy="1.9" layer="16" roundness="100"/>
+<text x="-1.27" y="0.9525" size="1.27" layer="25">>NAME</text>
+<text x="-1.27" y="-2.2225" size="1.27" layer="27">>VALUE</text>
+<hole x="0" y="0" drill="1.3"/>
+</package>
+<package name="0922V">
+<description><b>RESISTOR</b><p>
+type 0922, grid 7.5 mm</description>
+<wire x1="2.54" y1="0" x2="1.397" y2="0" width="0.8128" layer="51"/>
+<wire x1="-5.08" y1="0" x2="-3.81" y2="0" width="0.8128" layer="51"/>
+<circle x="-5.08" y="0" radius="4.572" width="0.1524" layer="21"/>
+<circle x="-5.08" y="0" radius="1.905" width="0.1524" layer="21"/>
+<pad name="1" x="-5.08" y="0" drill="1.016" shape="octagon"/>
+<pad name="2" x="2.54" y="0" drill="1.016" shape="octagon"/>
+<text x="-0.508" y="1.6764" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-0.508" y="-2.9972" size="1.27" layer="27" ratio="10">>VALUE</text>
+<text x="-6.858" y="2.54" size="1.016" layer="21" ratio="12">0922</text>
+<rectangle x1="-3.81" y1="-0.4064" x2="1.3208" y2="0.4064" layer="21"/>
+</package>
+<package name="MINI_MELF-0102R">
+<description><b>CECC Size RC2211</b> Reflow Soldering<p>
+source Beyschlag</description>
+<wire x1="-1" y1="-0.5" x2="1" y2="-0.5" width="0.2032" layer="51"/>
+<wire x1="1" y1="-0.5" x2="1" y2="0.5" width="0.2032" layer="51"/>
+<wire x1="1" y1="0.5" x2="-1" y2="0.5" width="0.2032" layer="51"/>
+<wire x1="-1" y1="0.5" x2="-1" y2="-0.5" width="0.2032" layer="51"/>
+<smd name="1" x="-0.9" y="0" dx="0.5" dy="1.3" layer="1"/>
+<smd name="2" x="0.9" y="0" dx="0.5" dy="1.3" layer="1"/>
+<text x="-1.27" y="0.9525" size="1.27" layer="25">>NAME</text>
+<text x="-1.27" y="-2.2225" size="1.27" layer="27">>VALUE</text>
+</package>
+<package name="MINI_MELF-0102W">
+<description><b>CECC Size RC2211</b> Wave Soldering<p>
+source Beyschlag</description>
+<wire x1="-1" y1="-0.5" x2="1" y2="-0.5" width="0.2032" layer="51"/>
+<wire x1="1" y1="-0.5" x2="1" y2="0.5" width="0.2032" layer="51"/>
+<wire x1="1" y1="0.5" x2="-1" y2="0.5" width="0.2032" layer="51"/>
+<wire x1="-1" y1="0.5" x2="-1" y2="-0.5" width="0.2032" layer="51"/>
+<smd name="1" x="-0.95" y="0" dx="0.6" dy="1.3" layer="1"/>
+<smd name="2" x="0.95" y="0" dx="0.6" dy="1.3" layer="1"/>
+<text x="-1.27" y="0.9525" size="1.27" layer="25">>NAME</text>
+<text x="-1.27" y="-2.2225" size="1.27" layer="27">>VALUE</text>
+</package>
+<package name="MINI_MELF-0204R">
+<description><b>CECC Size RC3715</b> Reflow Soldering<p>
+source Beyschlag</description>
+<wire x1="-1.7" y1="-0.6" x2="1.7" y2="-0.6" width="0.2032" layer="51"/>
+<wire x1="1.7" y1="-0.6" x2="1.7" y2="0.6" width="0.2032" layer="51"/>
+<wire x1="1.7" y1="0.6" x2="-1.7" y2="0.6" width="0.2032" layer="51"/>
+<wire x1="-1.7" y1="0.6" x2="-1.7" y2="-0.6" width="0.2032" layer="51"/>
+<smd name="1" x="-1.5" y="0" dx="0.8" dy="1.6" layer="1"/>
+<smd name="2" x="1.5" y="0" dx="0.8" dy="1.6" layer="1"/>
+<text x="-1.27" y="0.9525" size="1.27" layer="25">>NAME</text>
+<text x="-1.27" y="-2.2225" size="1.27" layer="27">>VALUE</text>
+</package>
+<package name="MINI_MELF-0204W">
+<description><b>CECC Size RC3715</b> Wave Soldering<p>
+source Beyschlag</description>
+<wire x1="-1.7" y1="-0.6" x2="1.7" y2="-0.6" width="0.2032" layer="51"/>
+<wire x1="1.7" y1="-0.6" x2="1.7" y2="0.6" width="0.2032" layer="51"/>
+<wire x1="1.7" y1="0.6" x2="-1.7" y2="0.6" width="0.2032" layer="51"/>
+<wire x1="-1.7" y1="0.6" x2="-1.7" y2="-0.6" width="0.2032" layer="51"/>
+<smd name="1" x="-1.5" y="0" dx="1.2" dy="1.6" layer="1"/>
+<smd name="2" x="1.5" y="0" dx="1.2" dy="1.6" layer="1"/>
+<text x="-1.27" y="0.9525" size="1.27" layer="25">>NAME</text>
+<text x="-1.27" y="-2.2225" size="1.27" layer="27">>VALUE</text>
+</package>
+<package name="MINI_MELF-0207R">
+<description><b>CECC Size RC6123</b> Reflow Soldering<p>
+source Beyschlag</description>
+<wire x1="-2.8" y1="-1" x2="2.8" y2="-1" width="0.2032" layer="51"/>
+<wire x1="2.8" y1="-1" x2="2.8" y2="1" width="0.2032" layer="51"/>
+<wire x1="2.8" y1="1" x2="-2.8" y2="1" width="0.2032" layer="51"/>
+<wire x1="-2.8" y1="1" x2="-2.8" y2="-1" width="0.2032" layer="51"/>
+<smd name="1" x="-2.25" y="0" dx="1.6" dy="2.5" layer="1"/>
+<smd name="2" x="2.25" y="0" dx="1.6" dy="2.5" layer="1"/>
+<text x="-2.2225" y="1.5875" size="1.27" layer="25">>NAME</text>
+<text x="-2.2225" y="-2.54" size="1.27" layer="27">>VALUE</text>
+</package>
+<package name="MINI_MELF-0207W">
+<description><b>CECC Size RC6123</b> Wave Soldering<p>
+source Beyschlag</description>
+<wire x1="-2.8" y1="-1" x2="2.8" y2="-1" width="0.2032" layer="51"/>
+<wire x1="2.8" y1="-1" x2="2.8" y2="1" width="0.2032" layer="51"/>
+<wire x1="2.8" y1="1" x2="-2.8" y2="1" width="0.2032" layer="51"/>
+<wire x1="-2.8" y1="1" x2="-2.8" y2="-1" width="0.2032" layer="51"/>
+<smd name="1" x="-2.6" y="0" dx="2.4" dy="2.5" layer="1"/>
+<smd name="2" x="2.6" y="0" dx="2.4" dy="2.5" layer="1"/>
+<text x="-2.54" y="1.5875" size="1.27" layer="25">>NAME</text>
+<text x="-2.54" y="-2.54" size="1.27" layer="27">>VALUE</text>
+</package>
+<package name="RDH/15">
+<description><b>RESISTOR</b><p>
+type RDH, grid 15 mm</description>
+<wire x1="-7.62" y1="0" x2="-6.858" y2="0" width="0.8128" layer="51"/>
+<wire x1="-6.096" y1="3.048" x2="-5.207" y2="3.048" width="0.1524" layer="21"/>
+<wire x1="-4.953" y1="2.794" x2="-5.207" y2="3.048" width="0.1524" layer="21"/>
+<wire x1="-6.096" y1="-3.048" x2="-5.207" y2="-3.048" width="0.1524" layer="21"/>
+<wire x1="-4.953" y1="-2.794" x2="-5.207" y2="-3.048" width="0.1524" layer="21"/>
+<wire x1="4.953" y1="2.794" x2="5.207" y2="3.048" width="0.1524" layer="21"/>
+<wire x1="4.953" y1="2.794" x2="-4.953" y2="2.794" width="0.1524" layer="21"/>
+<wire x1="4.953" y1="-2.794" x2="5.207" y2="-3.048" width="0.1524" layer="21"/>
+<wire x1="4.953" y1="-2.794" x2="-4.953" y2="-2.794" width="0.1524" layer="21"/>
+<wire x1="6.096" y1="3.048" x2="5.207" y2="3.048" width="0.1524" layer="21"/>
+<wire x1="6.096" y1="-3.048" x2="5.207" y2="-3.048" width="0.1524" layer="21"/>
+<wire x1="-6.477" y1="-2.667" x2="-6.477" y2="-1.016" width="0.1524" layer="21"/>
+<wire x1="-6.477" y1="1.016" x2="-6.477" y2="-1.016" width="0.1524" layer="51"/>
+<wire x1="-6.477" y1="1.016" x2="-6.477" y2="2.667" width="0.1524" layer="21"/>
+<wire x1="6.477" y1="-2.667" x2="6.477" y2="-1.016" width="0.1524" layer="21"/>
+<wire x1="6.477" y1="1.016" x2="6.477" y2="-1.016" width="0.1524" layer="51"/>
+<wire x1="6.477" y1="1.016" x2="6.477" y2="2.667" width="0.1524" layer="21"/>
+<wire x1="6.858" y1="0" x2="7.62" y2="0" width="0.8128" layer="51"/>
+<wire x1="-6.477" y1="2.667" x2="-6.096" y2="3.048" width="0.1524" layer="21" curve="-90"/>
+<wire x1="6.096" y1="3.048" x2="6.477" y2="2.667" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-6.477" y1="-2.667" x2="-6.096" y2="-3.048" width="0.1524" layer="21" curve="90"/>
+<wire x1="6.096" y1="-3.048" x2="6.477" y2="-2.667" width="0.1524" layer="21" curve="90"/>
+<pad name="1" x="-7.62" y="0" drill="1.016" shape="octagon"/>
+<pad name="2" x="7.62" y="0" drill="1.016" shape="octagon"/>
+<text x="-6.35" y="3.4544" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-4.318" y="-0.5842" size="1.27" layer="27" ratio="10">>VALUE</text>
+<text x="4.572" y="-1.7272" size="1.27" layer="51" ratio="10" rot="R90">RDH</text>
+<rectangle x1="-6.7564" y1="-0.4064" x2="-6.4516" y2="0.4064" layer="51"/>
+<rectangle x1="6.4516" y1="-0.4064" x2="6.7564" y2="0.4064" layer="51"/>
+</package>
+<package name="0204V">
+<description><b>RESISTOR</b><p>
+type 0204, grid 2.5 mm</description>
+<wire x1="-1.27" y1="0" x2="1.27" y2="0" width="0.508" layer="51"/>
+<wire x1="-0.127" y1="0" x2="0.127" y2="0" width="0.508" layer="21"/>
+<circle x="-1.27" y="0" radius="0.889" width="0.1524" layer="51"/>
+<circle x="-1.27" y="0" radius="0.635" width="0.0508" layer="51"/>
+<pad name="1" x="-1.27" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="1.27" y="0" drill="0.8128" shape="octagon"/>
+<text x="-2.1336" y="1.1684" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-2.1336" y="-2.3114" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="0309V">
+<description><b>RESISTOR</b><p>
+type 0309, grid 2.5 mm</description>
+<wire x1="1.27" y1="0" x2="0.635" y2="0" width="0.6096" layer="51"/>
+<wire x1="-0.635" y1="0" x2="-1.27" y2="0" width="0.6096" layer="51"/>
+<circle x="-1.27" y="0" radius="1.524" width="0.1524" layer="21"/>
+<circle x="-1.27" y="0" radius="0.762" width="0.1524" layer="51"/>
+<pad name="1" x="-1.27" y="0" drill="0.8128" shape="octagon"/>
+<pad name="2" x="1.27" y="0" drill="0.8128" shape="octagon"/>
+<text x="0.254" y="1.016" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="0.254" y="-2.2098" size="1.27" layer="27" ratio="10">>VALUE</text>
+<rectangle x1="0.254" y1="-0.3048" x2="0.5588" y2="0.3048" layer="51"/>
+<rectangle x1="-0.635" y1="-0.3048" x2="-0.3302" y2="0.3048" layer="51"/>
+<rectangle x1="-0.3302" y1="-0.3048" x2="0.254" y2="0.3048" layer="21"/>
+</package>
+</packages>
+<symbols>
+<symbol name="C-US">
+<wire x1="-2.54" y1="0" x2="2.54" y2="0" width="0.254" layer="94"/>
+<wire x1="0" y1="-1.016" x2="0" y2="-2.54" width="0.1524" layer="94"/>
+<wire x1="0" y1="-1" x2="2.4892" y2="-1.8542" width="0.254" layer="94" curve="-37.878202" cap="flat"/>
+<wire x1="-2.4668" y1="-1.8504" x2="0" y2="-1.0161" width="0.254" layer="94" curve="-37.373024" cap="flat"/>
+<text x="1.016" y="0.635" size="1.778" layer="95">>NAME</text>
+<text x="1.016" y="-4.191" size="1.778" layer="96">>VALUE</text>
+<pin name="1" x="0" y="2.54" visible="off" length="short" direction="pas" swaplevel="1" rot="R270"/>
+<pin name="2" x="0" y="-5.08" visible="off" length="short" direction="pas" swaplevel="1" rot="R90"/>
+</symbol>
+<symbol name="R-US">
+<wire x1="-2.54" y1="0" x2="-2.159" y2="1.016" width="0.2032" layer="94"/>
+<wire x1="-2.159" y1="1.016" x2="-1.524" y2="-1.016" width="0.2032" layer="94"/>
+<wire x1="-1.524" y1="-1.016" x2="-0.889" y2="1.016" width="0.2032" layer="94"/>
+<wire x1="-0.889" y1="1.016" x2="-0.254" y2="-1.016" width="0.2032" layer="94"/>
+<wire x1="-0.254" y1="-1.016" x2="0.381" y2="1.016" width="0.2032" layer="94"/>
+<wire x1="0.381" y1="1.016" x2="1.016" y2="-1.016" width="0.2032" layer="94"/>
+<wire x1="1.016" y1="-1.016" x2="1.651" y2="1.016" width="0.2032" layer="94"/>
+<wire x1="1.651" y1="1.016" x2="2.286" y2="-1.016" width="0.2032" layer="94"/>
+<wire x1="2.286" y1="-1.016" x2="2.54" y2="0" width="0.2032" layer="94"/>
+<text x="-3.81" y="1.4986" size="1.778" layer="95">>NAME</text>
+<text x="-3.81" y="-3.302" size="1.778" layer="96">>VALUE</text>
+<pin name="2" x="5.08" y="0" visible="off" length="short" direction="pas" swaplevel="1" rot="R180"/>
+<pin name="1" x="-5.08" y="0" visible="off" length="short" direction="pas" swaplevel="1"/>
+</symbol>
+</symbols>
+<devicesets>
+<deviceset name="C-US" prefix="C" uservalue="yes">
+<description><B>CAPACITOR</B>, American symbol</description>
+<gates>
+<gate name="G$1" symbol="C-US" x="0" y="0"/>
+</gates>
+<devices>
+<device name="C0402" package="C0402">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C0504" package="C0504">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C0603" package="C0603">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C0805" package="C0805">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C1005" package="C1005">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C1206" package="C1206">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C1210" package="C1210">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C1310" package="C1310">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C1608" package="C1608">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C1812" package="C1812">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C1825" package="C1825">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C2012" package="C2012">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C3216" package="C3216">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C3225" package="C3225">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C4532" package="C4532">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C4564" package="C4564">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="025-024X044" package="C025-024X044">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="025-025X050" package="C025-025X050">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="025-030X050" package="C025-030X050">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="025-040X050" package="C025-040X050">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="025-050X050" package="C025-050X050">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="025-060X050" package="C025-060X050">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C025_050-024X070" package="C025_050-024X070">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="025_050-025X075" package="C025_050-025X075">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="025_050-035X075" package="C025_050-035X075">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="025_050-045X075" package="C025_050-045X075">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="025_050-055X075" package="C025_050-055X075">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="050-024X044" package="C050-024X044">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="050-025X075" package="C050-025X075">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="050-045X075" package="C050-045X075">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="050-030X075" package="C050-030X075">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="050-050X075" package="C050-050X075">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="050-055X075" package="C050-055X075">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="050-075X075" package="C050-075X075">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="050H075X075" package="C050H075X075">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="075-032X103" package="C075-032X103">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="075-042X103" package="C075-042X103">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="075-052X106" package="C075-052X106">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="102-043X133" package="C102-043X133">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="102-054X133" package="C102-054X133">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="102-064X133" package="C102-064X133">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="102_152-062X184" package="C102_152-062X184">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="150-054X183" package="C150-054X183">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="150-064X183" package="C150-064X183">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="150-072X183" package="C150-072X183">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="150-084X183" package="C150-084X183">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="150-091X182" package="C150-091X182">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="225-062X268" package="C225-062X268">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="225-074X268" package="C225-074X268">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="225-087X268" package="C225-087X268">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="225-108X268" package="C225-108X268">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="225-113X268" package="C225-113X268">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="275-093X316" package="C275-093X316">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="275-113X316" package="C275-113X316">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="275-134X316" package="C275-134X316">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="275-205X316" package="C275-205X316">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="325-137X374" package="C325-137X374">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="325-162X374" package="C325-162X374">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="325-182X374" package="C325-182X374">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="375-192X418" package="C375-192X418">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="375-203X418" package="C375-203X418">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="050-035X075" package="C050-035X075">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="375-155X418" package="C375-155X418">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="075-063X106" package="C075-063X106">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="275-154X316" package="C275-154X316">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="275-173X316" package="C275-173X316">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C0402K" package="C0402K">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C0603K" package="C0603K">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C0805K" package="C0805K">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C1206K" package="C1206K">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C1210K" package="C1210K">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C1812K" package="C1812K">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C1825K" package="C1825K">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C2220K" package="C2220K">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="C2225K" package="C2225K">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+<deviceset name="R-US_" prefix="R" uservalue="yes">
+<description><B>RESISTOR</B>, American symbol</description>
+<gates>
+<gate name="G$1" symbol="R-US" x="0" y="0"/>
+</gates>
+<devices>
+<device name="R0402" package="R0402">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="R0603" package="R0603">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="R0805" package="R0805">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="R0805W" package="R0805W">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="R1005" package="R1005">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="R1206" package="R1206">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="R1206W" package="R1206W">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="R1210" package="R1210">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="R1210W" package="R1210W">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="R2010" package="R2010">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="R2010W" package="R2010W">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="R2012" package="R2012">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="R2012W" package="R2012W">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="R2512" package="R2512">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="R2512W" package="R2512W">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="R3216" package="R3216">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="R3216W" package="R3216W">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="R3225" package="R3225">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="R3225W" package="R3225W">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="R5025" package="R5025">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="R5025W" package="R5025W">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="R6332" package="R6332">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="R6332W" package="R6332W">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="M0805" package="M0805">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="M1206" package="M1206">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="M1406" package="M1406">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="M2012" package="M2012">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="M2309" package="M2309">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="M3216" package="M3216">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="M3516" package="M3516">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="M5923" package="M5923">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="0204/5" package="0204/5">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="0204/7" package="0204/7">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="0207/10" package="0207/10">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="0207/12" package="0207/12">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="0207/15" package="0207/15">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="0207/2V" package="0207/2V">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="0207/5V" package="0207/5V">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="0207/7" package="0207/7">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="0309/10" package="0309/10">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="0309/12" package="0309/12">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="0411/12" package="0411/12">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="0411/15" package="0411/15">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="0411/3V" package="0411V">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="0414/15" package="0414/15">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="0414/5V" package="0414V">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="0617/17" package="0617/17">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="0617/22" package="0617/22">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="0617/5V" package="0617V">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="0922/22" package="0922/22">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="0613/5V" package="P0613V">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="0613/15" package="P0613/15">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="0817/22" package="P0817/22">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="0817/7V" package="P0817V">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="V234/12" package="V234/12">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="V235/17" package="V235/17">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="V526-0" package="V526-0">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="MELF0102AX" package="MINI_MELF-0102AX">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="0922V" package="0922V">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="MELF0102R" package="MINI_MELF-0102R">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="MELF0102W" package="MINI_MELF-0102W">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="MELF0204R" package="MINI_MELF-0204R">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="MELF0204W" package="MINI_MELF-0204W">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="MELF0207R" package="MINI_MELF-0207R">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="MELF0207W" package="MINI_MELF-0207W">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="RDH/15" package="RDH/15">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="0204/2V" package="0204V">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="0309/V" package="0309V">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+</devicesets>
+</library>
+<library name="led">
+<packages>
+<package name="1206">
+<description><b>CHICAGO MINIATURE LAMP, INC.</b><p>
+7022X Series SMT LEDs 1206 Package Size</description>
+<wire x1="1.55" y1="-0.75" x2="-1.55" y2="-0.75" width="0.1016" layer="51"/>
+<wire x1="-1.55" y1="-0.75" x2="-1.55" y2="0.75" width="0.1016" layer="51"/>
+<wire x1="-1.55" y1="0.75" x2="1.55" y2="0.75" width="0.1016" layer="51"/>
+<wire x1="1.55" y1="0.75" x2="1.55" y2="-0.75" width="0.1016" layer="51"/>
+<wire x1="-0.55" y1="-0.5" x2="0.55" y2="-0.5" width="0.1016" layer="21" curve="95.452622"/>
+<wire x1="-0.55" y1="-0.5" x2="-0.55" y2="0.5" width="0.1016" layer="51" curve="-84.547378"/>
+<wire x1="-0.55" y1="0.5" x2="0.55" y2="0.5" width="0.1016" layer="21" curve="-95.452622"/>
+<wire x1="0.55" y1="0.5" x2="0.55" y2="-0.5" width="0.1016" layer="51" curve="-84.547378"/>
+<smd name="A" x="-1.422" y="0" dx="1.6" dy="1.803" layer="1"/>
+<smd name="C" x="1.422" y="0" dx="1.6" dy="1.803" layer="1"/>
+<text x="-1.27" y="1.27" size="1.27" layer="25">>NAME</text>
+<text x="-1.27" y="-2.54" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-0.1" y1="-0.1" x2="0.1" y2="0.1" layer="21"/>
+<rectangle x1="0.45" y1="-0.7" x2="0.8" y2="-0.45" layer="51"/>
+<rectangle x1="0.8" y1="-0.7" x2="0.9" y2="0.5" layer="51"/>
+<rectangle x1="0.8" y1="0.55" x2="0.9" y2="0.7" layer="51"/>
+<rectangle x1="-0.9" y1="-0.7" x2="-0.8" y2="0.5" layer="51"/>
+<rectangle x1="-0.9" y1="0.55" x2="-0.8" y2="0.7" layer="51"/>
+<rectangle x1="0.45" y1="-0.7" x2="0.6" y2="-0.45" layer="21"/>
+</package>
+<package name="LD260">
+<description><B>LED</B><p>
+5 mm, square, Siemens</description>
+<wire x1="-1.27" y1="-1.27" x2="0" y2="-1.27" width="0.1524" layer="21"/>
+<wire x1="0" y1="-1.27" x2="1.27" y2="-1.27" width="0.1524" layer="21"/>
+<wire x1="1.27" y1="1.27" x2="0" y2="1.27" width="0.1524" layer="21"/>
+<wire x1="0" y1="1.27" x2="-1.27" y2="1.27" width="0.1524" layer="21"/>
+<wire x1="1.27" y1="-1.27" x2="1.27" y2="-0.889" width="0.1524" layer="21"/>
+<wire x1="1.27" y1="1.27" x2="1.27" y2="0.889" width="0.1524" layer="21"/>
+<wire x1="1.27" y1="0.889" x2="1.27" y2="0" width="0.1524" layer="51"/>
+<wire x1="1.27" y1="0" x2="1.27" y2="-0.889" width="0.1524" layer="51"/>
+<wire x1="-1.27" y1="1.27" x2="-1.27" y2="0.889" width="0.1524" layer="21"/>
+<wire x1="-1.27" y1="-1.27" x2="-1.27" y2="-0.889" width="0.1524" layer="21"/>
+<wire x1="-1.27" y1="-0.889" x2="-1.27" y2="0" width="0.1524" layer="51"/>
+<wire x1="-1.27" y1="0" x2="-1.27" y2="0.889" width="0.1524" layer="51"/>
+<wire x1="0" y1="1.27" x2="0.9917" y2="0.7934" width="0.1524" layer="21" curve="-51.33923"/>
+<wire x1="-0.9917" y1="0.7934" x2="0" y2="1.27" width="0.1524" layer="21" curve="-51.33923"/>
+<wire x1="0" y1="-1.27" x2="0.9917" y2="-0.7934" width="0.1524" layer="21" curve="51.33923"/>
+<wire x1="-0.9917" y1="-0.7934" x2="0" y2="-1.27" width="0.1524" layer="21" curve="51.33923"/>
+<wire x1="0.9558" y1="-0.8363" x2="1.27" y2="0" width="0.1524" layer="51" curve="41.185419"/>
+<wire x1="0.9756" y1="0.813" x2="1.2699" y2="0" width="0.1524" layer="51" curve="-39.806332"/>
+<wire x1="-1.27" y1="0" x2="-0.9643" y2="-0.8265" width="0.1524" layer="51" curve="40.600331"/>
+<wire x1="-1.27" y1="0" x2="-0.9643" y2="0.8265" width="0.1524" layer="51" curve="-40.600331"/>
+<wire x1="-0.889" y1="0" x2="0" y2="0.889" width="0.1524" layer="51" curve="-90"/>
+<wire x1="-0.508" y1="0" x2="0" y2="0.508" width="0.1524" layer="51" curve="-90"/>
+<wire x1="0" y1="-0.508" x2="0.508" y2="0" width="0.1524" layer="21" curve="90"/>
+<wire x1="0" y1="-0.889" x2="0.889" y2="0" width="0.1524" layer="51" curve="90"/>
+<pad name="A" x="-1.27" y="0" drill="0.8128" shape="octagon"/>
+<pad name="K" x="1.27" y="0" drill="0.8128" shape="octagon"/>
+<text x="-1.2954" y="1.4732" size="1.016" layer="25" ratio="10">>NAME</text>
+<text x="-1.27" y="-2.4892" size="1.016" layer="27" ratio="10">>VALUE</text>
+<rectangle x1="1.27" y1="-0.635" x2="2.032" y2="0.635" layer="51"/>
+<rectangle x1="1.905" y1="-0.635" x2="2.032" y2="0.635" layer="21"/>
+</package>
+<package name="LED2X5">
+<description><B>LED</B><p>
+2 x 5 mm, rectangle</description>
+<wire x1="-2.54" y1="-1.27" x2="2.54" y2="-1.27" width="0.1524" layer="21"/>
+<wire x1="2.54" y1="1.27" x2="2.54" y2="-1.27" width="0.1524" layer="21"/>
+<wire x1="2.54" y1="1.27" x2="-2.54" y2="1.27" width="0.1524" layer="21"/>
+<wire x1="-2.54" y1="-1.27" x2="-2.54" y2="1.27" width="0.1524" layer="21"/>
+<wire x1="-1.905" y1="0" x2="0.508" y2="0" width="0.1524" layer="51"/>
+<wire x1="-0.508" y1="0.381" x2="-0.508" y2="-0.381" width="0.1524" layer="51"/>
+<wire x1="-0.508" y1="0.381" x2="0.508" y2="0" width="0.1524" layer="51"/>
+<wire x1="0.508" y1="0" x2="1.778" y2="0" width="0.1524" layer="51"/>
+<wire x1="0.508" y1="0" x2="-0.508" y2="-0.381" width="0.1524" layer="51"/>
+<wire x1="0.508" y1="0.381" x2="0.508" y2="0" width="0.1524" layer="51"/>
+<wire x1="0.508" y1="0" x2="0.508" y2="-0.381" width="0.1524" layer="51"/>
+<wire x1="0.889" y1="-0.254" x2="1.143" y2="-0.762" width="0.1524" layer="51"/>
+<wire x1="1.143" y1="-0.762" x2="1.143" y2="-0.508" width="0.1524" layer="51"/>
+<wire x1="1.143" y1="-0.762" x2="0.9398" y2="-0.6096" width="0.1524" layer="51"/>
+<wire x1="0.9398" y1="-0.6096" x2="1.143" y2="-0.508" width="0.1524" layer="51"/>
+<wire x1="1.397" y1="-0.254" x2="1.651" y2="-0.762" width="0.1524" layer="51"/>
+<wire x1="1.651" y1="-0.762" x2="1.651" y2="-0.508" width="0.1524" layer="51"/>
+<wire x1="1.651" y1="-0.762" x2="1.4478" y2="-0.6096" width="0.1524" layer="51"/>
+<wire x1="1.4478" y1="-0.6096" x2="1.651" y2="-0.508" width="0.1524" layer="51"/>
+<pad name="A" x="-1.27" y="0" drill="0.8128" shape="octagon"/>
+<pad name="K" x="1.27" y="0" drill="0.8128" shape="octagon"/>
+<text x="-2.54" y="1.397" size="1.016" layer="25" ratio="10">>NAME</text>
+<text x="-2.54" y="-2.413" size="1.016" layer="27" ratio="10">>VALUE</text>
+<rectangle x1="2.159" y1="-1.27" x2="2.413" y2="1.27" layer="21"/>
+</package>
+<package name="LED3MM">
+<description><B>LED</B><p>
+3 mm, round</description>
+<wire x1="1.5748" y1="-1.27" x2="1.5748" y2="1.27" width="0.254" layer="51"/>
+<wire x1="-1.524" y1="0" x2="-1.1708" y2="0.9756" width="0.1524" layer="51" curve="-39.80361"/>
+<wire x1="-1.524" y1="0" x2="-1.1391" y2="-1.0125" width="0.1524" layer="51" curve="41.633208"/>
+<wire x1="1.1571" y1="0.9918" x2="1.524" y2="0" width="0.1524" layer="51" curve="-40.601165"/>
+<wire x1="1.1708" y1="-0.9756" x2="1.524" y2="0" width="0.1524" layer="51" curve="39.80361"/>
+<wire x1="0" y1="1.524" x2="1.2401" y2="0.8858" width="0.1524" layer="21" curve="-54.461337"/>
+<wire x1="-1.2192" y1="0.9144" x2="0" y2="1.524" width="0.1524" layer="21" curve="-53.130102"/>
+<wire x1="0" y1="-1.524" x2="1.203" y2="-0.9356" width="0.1524" layer="21" curve="52.126876"/>
+<wire x1="-1.203" y1="-0.9356" x2="0" y2="-1.524" width="0.1524" layer="21" curve="52.126876"/>
+<wire x1="-0.635" y1="0" x2="0" y2="0.635" width="0.1524" layer="51" curve="-90"/>
+<wire x1="-1.016" y1="0" x2="0" y2="1.016" width="0.1524" layer="51" curve="-90"/>
+<wire x1="0" y1="-0.635" x2="0.635" y2="0" width="0.1524" layer="51" curve="90"/>
+<wire x1="0" y1="-1.016" x2="1.016" y2="0" width="0.1524" layer="51" curve="90"/>
+<wire x1="0" y1="2.032" x2="1.561" y2="1.3009" width="0.254" layer="21" curve="-50.193108"/>
+<wire x1="-1.7929" y1="0.9562" x2="0" y2="2.032" width="0.254" layer="21" curve="-61.926949"/>
+<wire x1="0" y1="-2.032" x2="1.5512" y2="-1.3126" width="0.254" layer="21" curve="49.763022"/>
+<wire x1="-1.7643" y1="-1.0082" x2="0" y2="-2.032" width="0.254" layer="21" curve="60.255215"/>
+<wire x1="-2.032" y1="0" x2="-1.7891" y2="0.9634" width="0.254" layer="51" curve="-28.301701"/>
+<wire x1="-2.032" y1="0" x2="-1.7306" y2="-1.065" width="0.254" layer="51" curve="31.60822"/>
+<pad name="A" x="-1.27" y="0" drill="0.8128" shape="octagon"/>
+<pad name="K" x="1.27" y="0" drill="0.8128" shape="octagon"/>
+<text x="1.905" y="0.381" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="1.905" y="-1.651" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="LED5MM">
+<description><B>LED</B><p>
+5 mm, round</description>
+<wire x1="2.54" y1="-1.905" x2="2.54" y2="1.905" width="0.2032" layer="21"/>
+<wire x1="2.54" y1="-1.905" x2="2.54" y2="1.905" width="0.254" layer="21" curve="-286.260205"/>
+<wire x1="-1.143" y1="0" x2="0" y2="1.143" width="0.1524" layer="51" curve="-90"/>
+<wire x1="0" y1="-1.143" x2="1.143" y2="0" width="0.1524" layer="51" curve="90"/>
+<wire x1="-1.651" y1="0" x2="0" y2="1.651" width="0.1524" layer="51" curve="-90"/>
+<wire x1="0" y1="-1.651" x2="1.651" y2="0" width="0.1524" layer="51" curve="90"/>
+<wire x1="-2.159" y1="0" x2="0" y2="2.159" width="0.1524" layer="51" curve="-90"/>
+<wire x1="0" y1="-2.159" x2="2.159" y2="0" width="0.1524" layer="51" curve="90"/>
+<circle x="0" y="0" radius="2.54" width="0.1524" layer="21"/>
+<pad name="A" x="-1.27" y="0" drill="0.8128" shape="octagon"/>
+<pad name="K" x="1.27" y="0" drill="0.8128" shape="octagon"/>
+<text x="3.175" y="0.5334" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="3.2004" y="-1.8034" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="LSU260">
+<description><B>LED</B><p>
+1 mm, round, Siemens</description>
+<wire x1="0" y1="-0.508" x2="-1.143" y2="-0.508" width="0.1524" layer="51"/>
+<wire x1="-1.143" y1="-0.508" x2="-1.143" y2="-0.254" width="0.1524" layer="51"/>
+<wire x1="-1.143" y1="0.508" x2="0" y2="0.508" width="0.1524" layer="51"/>
+<wire x1="-1.143" y1="-0.254" x2="-1.397" y2="-0.254" width="0.1524" layer="51"/>
+<wire x1="-1.143" y1="-0.254" x2="-1.143" y2="0.254" width="0.1524" layer="51"/>
+<wire x1="-1.397" y1="-0.254" x2="-1.397" y2="0.254" width="0.1524" layer="51"/>
+<wire x1="-1.397" y1="0.254" x2="-1.143" y2="0.254" width="0.1524" layer="51"/>
+<wire x1="-1.143" y1="0.254" x2="-1.143" y2="0.508" width="0.1524" layer="51"/>
+<wire x1="0.508" y1="-0.254" x2="1.397" y2="-0.254" width="0.1524" layer="51"/>
+<wire x1="1.397" y1="-0.254" x2="1.397" y2="0.254" width="0.1524" layer="51"/>
+<wire x1="1.397" y1="0.254" x2="0.508" y2="0.254" width="0.1524" layer="51"/>
+<wire x1="0.381" y1="-0.381" x2="0.254" y2="-0.508" width="0.1524" layer="21"/>
+<wire x1="0.254" y1="-0.508" x2="-0.254" y2="-0.508" width="0.1524" layer="21"/>
+<wire x1="-0.381" y1="-0.381" x2="-0.254" y2="-0.508" width="0.1524" layer="21"/>
+<wire x1="0.381" y1="0.381" x2="0.254" y2="0.508" width="0.1524" layer="21"/>
+<wire x1="0.254" y1="0.508" x2="-0.254" y2="0.508" width="0.1524" layer="21"/>
+<wire x1="-0.381" y1="0.381" x2="-0.254" y2="0.508" width="0.1524" layer="21"/>
+<wire x1="0" y1="-0.254" x2="0.254" y2="0" width="0.1524" layer="21" curve="90"/>
+<wire x1="-0.254" y1="0" x2="0" y2="0.254" width="0.1524" layer="21" curve="-90"/>
+<wire x1="0.381" y1="-0.381" x2="0.381" y2="0.381" width="0.1524" layer="21" curve="90"/>
+<circle x="0" y="0" radius="0.508" width="0.1524" layer="51"/>
+<pad name="A" x="-1.27" y="0" drill="0.8128" shape="octagon"/>
+<pad name="K" x="1.27" y="0" drill="0.8128" shape="octagon"/>
+<text x="-1.2954" y="0.8382" size="1.016" layer="25" ratio="10">>NAME</text>
+<text x="-1.27" y="-1.8542" size="1.016" layer="27" ratio="10">>VALUE</text>
+<rectangle x1="-1.397" y1="-0.254" x2="-1.143" y2="0.254" layer="51"/>
+<rectangle x1="0.508" y1="-0.254" x2="1.397" y2="0.254" layer="51"/>
+</package>
+<package name="LZR181">
+<description><B>LED BLOCK</B><p>
+1 LED, Siemens</description>
+<wire x1="-1.27" y1="-1.27" x2="1.27" y2="-1.27" width="0.1524" layer="21"/>
+<wire x1="1.27" y1="-1.27" x2="1.27" y2="-0.889" width="0.1524" layer="21"/>
+<wire x1="1.27" y1="1.27" x2="1.27" y2="0.889" width="0.1524" layer="21"/>
+<wire x1="1.27" y1="0.889" x2="1.27" y2="-0.889" width="0.1524" layer="51"/>
+<wire x1="-1.27" y1="1.27" x2="-1.27" y2="0.889" width="0.1524" layer="21"/>
+<wire x1="-1.27" y1="-1.27" x2="-1.27" y2="-0.889" width="0.1524" layer="21"/>
+<wire x1="-1.27" y1="-0.889" x2="-1.27" y2="0.889" width="0.1524" layer="51"/>
+<wire x1="-0.889" y1="0" x2="0" y2="0.889" width="0.1524" layer="51" curve="-90"/>
+<wire x1="-0.508" y1="0" x2="0" y2="0.508" width="0.1524" layer="51" curve="-90"/>
+<wire x1="0" y1="-0.508" x2="0.508" y2="0" width="0.1524" layer="21" curve="90"/>
+<wire x1="0" y1="-0.889" x2="0.889" y2="0" width="0.1524" layer="51" curve="90"/>
+<wire x1="-0.8678" y1="0.7439" x2="0" y2="1.143" width="0.1524" layer="21" curve="-49.396139"/>
+<wire x1="0" y1="1.143" x2="0.8678" y2="0.7439" width="0.1524" layer="21" curve="-49.396139"/>
+<wire x1="-0.8678" y1="-0.7439" x2="0" y2="-1.143" width="0.1524" layer="21" curve="49.396139"/>
+<wire x1="0" y1="-1.143" x2="0.8678" y2="-0.7439" width="0.1524" layer="21" curve="49.396139"/>
+<wire x1="0.8678" y1="0.7439" x2="1.143" y2="0" width="0.1524" layer="51" curve="-40.604135"/>
+<wire x1="0.8678" y1="-0.7439" x2="1.143" y2="0" width="0.1524" layer="51" curve="40.604135"/>
+<wire x1="-1.143" y1="0" x2="-0.8678" y2="0.7439" width="0.1524" layer="51" curve="-40.604135"/>
+<wire x1="-1.143" y1="0" x2="-0.8678" y2="-0.7439" width="0.1524" layer="51" curve="40.604135"/>
+<wire x1="-1.27" y1="1.27" x2="1.27" y2="1.27" width="0.1524" layer="21"/>
+<pad name="A" x="-1.27" y="0" drill="0.8128" shape="octagon"/>
+<pad name="K" x="1.27" y="0" drill="0.8128" shape="octagon"/>
+<text x="-1.2954" y="1.4732" size="1.016" layer="25" ratio="10">>NAME</text>
+<text x="-1.27" y="-2.4892" size="1.016" layer="27" ratio="10">>VALUE</text>
+<rectangle x1="1.27" y1="-0.889" x2="1.524" y2="0.254" layer="51"/>
+<rectangle x1="-1.524" y1="-0.254" x2="-1.27" y2="0.254" layer="51"/>
+</package>
+<package name="Q62902-B152">
+<description><b>LED HOLDER</b><p>
+Siemens</description>
+<wire x1="-2.9718" y1="-1.8542" x2="-2.9718" y2="-0.254" width="0.1524" layer="21"/>
+<wire x1="-2.9718" y1="-0.254" x2="-2.9718" y2="0.254" width="0.1524" layer="21"/>
+<wire x1="-2.9718" y1="0.254" x2="-2.9718" y2="1.8542" width="0.1524" layer="21"/>
+<wire x1="2.9718" y1="-1.8542" x2="-2.1082" y2="-1.8542" width="0.1524" layer="21"/>
+<wire x1="-2.1082" y1="-1.8542" x2="-2.54" y2="-1.8542" width="0.1524" layer="21"/>
+<wire x1="-2.54" y1="1.8542" x2="-2.1082" y2="1.8542" width="0.1524" layer="21"/>
+<wire x1="-2.1082" y1="1.8542" x2="2.9718" y2="1.8542" width="0.1524" layer="21"/>
+<wire x1="-2.54" y1="-1.8542" x2="-2.54" y2="1.8542" width="0.1524" layer="21"/>
+<wire x1="-2.54" y1="-1.8542" x2="-2.9718" y2="-1.8542" width="0.1524" layer="21"/>
+<wire x1="-2.54" y1="1.8542" x2="-2.9718" y2="1.8542" width="0.1524" layer="21"/>
+<wire x1="-2.9718" y1="0.254" x2="-2.9718" y2="-0.254" width="0.1524" layer="21" curve="180"/>
+<wire x1="-1.1486" y1="0.8814" x2="0" y2="1.4478" width="0.1524" layer="21" curve="-52.498642"/>
+<wire x1="0" y1="1.4478" x2="1.1476" y2="0.8827" width="0.1524" layer="21" curve="-52.433716"/>
+<wire x1="-1.1351" y1="-0.8987" x2="0" y2="-1.4478" width="0.1524" layer="21" curve="51.629985"/>
+<wire x1="0" y1="-1.4478" x2="1.1305" y2="-0.9044" width="0.1524" layer="21" curve="51.339172"/>
+<wire x1="1.1281" y1="-0.9074" x2="1.4478" y2="0" width="0.1524" layer="51" curve="38.811177"/>
+<wire x1="1.1401" y1="0.8923" x2="1.4478" y2="0" width="0.1524" layer="51" curve="-38.048073"/>
+<wire x1="-1.4478" y1="0" x2="-1.1305" y2="-0.9044" width="0.1524" layer="51" curve="38.659064"/>
+<wire x1="-1.4478" y1="0" x2="-1.1456" y2="0.8853" width="0.1524" layer="51" curve="-37.696376"/>
+<wire x1="0" y1="1.7018" x2="1.4674" y2="0.8618" width="0.1524" layer="21" curve="-59.573488"/>
+<wire x1="-1.4618" y1="0.8714" x2="0" y2="1.7018" width="0.1524" layer="21" curve="-59.200638"/>
+<wire x1="0" y1="-1.7018" x2="1.4571" y2="-0.8793" width="0.1524" layer="21" curve="58.891781"/>
+<wire x1="-1.4571" y1="-0.8793" x2="0" y2="-1.7018" width="0.1524" layer="21" curve="58.891781"/>
+<wire x1="-1.7018" y1="0" x2="-1.4447" y2="0.8995" width="0.1524" layer="51" curve="-31.907626"/>
+<wire x1="-1.7018" y1="0" x2="-1.4502" y2="-0.8905" width="0.1524" layer="51" curve="31.551992"/>
+<wire x1="1.4521" y1="0.8874" x2="1.7018" y2="0" width="0.1524" layer="51" curve="-31.429586"/>
+<wire x1="1.4459" y1="-0.8975" x2="1.7018" y2="0" width="0.1524" layer="51" curve="31.828757"/>
+<wire x1="-2.1082" y1="1.8542" x2="-2.1082" y2="-1.8542" width="0.1524" layer="21"/>
+<wire x1="-0.635" y1="0" x2="0" y2="0.635" width="0.1524" layer="21" curve="-90"/>
+<wire x1="-1.016" y1="0" x2="0" y2="1.016" width="0.1524" layer="51" curve="-90"/>
+<wire x1="0" y1="-0.635" x2="0.635" y2="0" width="0.1524" layer="51" curve="90"/>
+<wire x1="0.0539" y1="-1.0699" x2="1.0699" y2="-0.0539" width="0.1524" layer="51" curve="90"/>
+<wire x1="2.9718" y1="1.8542" x2="2.9718" y2="-1.8542" width="0.1524" layer="21"/>
+<pad name="K" x="-1.27" y="0" drill="0.8128" shape="long" rot="R90"/>
+<pad name="A" x="1.27" y="0" drill="0.8128" shape="long" rot="R90"/>
+<text x="-1.905" y="2.286" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-1.905" y="-3.556" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="Q62902-B153">
+<description><b>LED HOLDER</b><p>
+Siemens</description>
+<wire x1="-5.5118" y1="-3.5052" x2="-5.5118" y2="-0.254" width="0.1524" layer="21"/>
+<wire x1="-5.5118" y1="-0.254" x2="-5.5118" y2="0.254" width="0.1524" layer="21"/>
+<wire x1="-5.5118" y1="0.254" x2="-5.5118" y2="3.5052" width="0.1524" layer="21"/>
+<wire x1="5.5118" y1="-3.5052" x2="-4.6482" y2="-3.5052" width="0.1524" layer="21"/>
+<wire x1="-4.6482" y1="-3.5052" x2="-5.08" y2="-3.5052" width="0.1524" layer="21"/>
+<wire x1="-5.08" y1="3.5052" x2="-4.6482" y2="3.5052" width="0.1524" layer="21"/>
+<wire x1="-4.6482" y1="3.5052" x2="5.5118" y2="3.5052" width="0.1524" layer="21"/>
+<wire x1="-5.08" y1="-3.5052" x2="-5.08" y2="3.5052" width="0.1524" layer="21"/>
+<wire x1="-5.08" y1="-3.5052" x2="-5.5118" y2="-3.5052" width="0.1524" layer="21"/>
+<wire x1="-5.08" y1="3.5052" x2="-5.5118" y2="3.5052" width="0.1524" layer="21"/>
+<wire x1="-5.5118" y1="0.254" x2="-5.5118" y2="-0.254" width="0.1524" layer="21" curve="180"/>
+<wire x1="-4.6482" y1="3.5052" x2="-4.6482" y2="-3.5052" width="0.1524" layer="21"/>
+<wire x1="5.5118" y1="3.5052" x2="5.5118" y2="-3.5052" width="0.1524" layer="21"/>
+<wire x1="-2.54" y1="1.905" x2="-2.54" y2="-1.905" width="0.254" layer="21"/>
+<wire x1="0" y1="-1.143" x2="1.143" y2="0" width="0.1524" layer="51" curve="90"/>
+<wire x1="-1.143" y1="0" x2="0" y2="1.143" width="0.1524" layer="51" curve="-90"/>
+<wire x1="0" y1="-1.651" x2="1.651" y2="0" width="0.1524" layer="51" curve="90"/>
+<wire x1="-1.651" y1="0" x2="0" y2="1.651" width="0.1524" layer="51" curve="-90"/>
+<wire x1="0" y1="-2.159" x2="2.159" y2="0" width="0.1524" layer="51" curve="90"/>
+<wire x1="-2.2129" y1="0.0539" x2="-0.0539" y2="2.2129" width="0.1524" layer="51" curve="-90.010616"/>
+<circle x="0" y="0" radius="2.54" width="0.1524" layer="21"/>
+<circle x="0" y="0" radius="3.175" width="0.254" layer="21"/>
+<pad name="A" x="1.27" y="0" drill="0.8128" shape="long" rot="R90"/>
+<pad name="K" x="-1.27" y="0" drill="0.8128" shape="long" rot="R90"/>
+<text x="-4.191" y="3.937" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-4.318" y="-5.08" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="Q62902-B155">
+<description><b>LED HOLDER</b><p>
+Siemens</description>
+<wire x1="-1.27" y1="-3.048" x2="-1.27" y2="-2.54" width="0.1524" layer="21"/>
+<wire x1="10.033" y1="3.048" x2="2.921" y2="3.048" width="0.1524" layer="21"/>
+<wire x1="10.033" y1="3.048" x2="10.033" y2="-3.048" width="0.1524" layer="21"/>
+<wire x1="-1.27" y1="-3.048" x2="2.921" y2="-3.048" width="0.1524" layer="21"/>
+<wire x1="2.921" y1="-3.048" x2="2.921" y2="3.048" width="0.1524" layer="21"/>
+<wire x1="2.921" y1="-3.048" x2="10.033" y2="-3.048" width="0.1524" layer="21"/>
+<wire x1="2.921" y1="3.048" x2="-1.27" y2="3.048" width="0.1524" layer="21"/>
+<wire x1="-1.27" y1="2.54" x2="-5.207" y2="2.54" width="0.1524" layer="21"/>
+<wire x1="-1.27" y1="2.54" x2="-1.27" y2="3.048" width="0.1524" layer="21"/>
+<wire x1="-5.207" y1="-2.54" x2="-1.27" y2="-2.54" width="0.1524" layer="21"/>
+<wire x1="-1.27" y1="-2.54" x2="-1.27" y2="2.54" width="0.1524" layer="21"/>
+<wire x1="-5.207" y1="2.54" x2="-5.207" y2="-2.54" width="0.1524" layer="21" curve="180"/>
+<wire x1="-6.985" y1="0.635" x2="-6.985" y2="-0.635" width="0.1524" layer="21"/>
+<wire x1="-6.096" y1="1.397" x2="-6.096" y2="-1.397" width="0.1524" layer="21"/>
+<wire x1="-5.207" y1="1.905" x2="-5.207" y2="-1.905" width="0.1524" layer="21"/>
+<pad name="K" x="7.62" y="1.27" drill="0.8128" shape="long"/>
+<pad name="A" x="7.62" y="-1.27" drill="0.8128" shape="long"/>
+<text x="3.302" y="-2.794" size="1.016" layer="21" ratio="14">A+</text>
+<text x="3.302" y="1.778" size="1.016" layer="21" ratio="14">K-</text>
+<text x="11.684" y="-2.794" size="1.27" layer="25" ratio="10" rot="R90">>NAME</text>
+<text x="0.635" y="-4.445" size="1.27" layer="27" ratio="10">>VALUE</text>
+<rectangle x1="2.921" y1="1.016" x2="6.731" y2="1.524" layer="21"/>
+<rectangle x1="2.921" y1="-1.524" x2="6.731" y2="-1.016" layer="21"/>
+<hole x="0" y="0" drill="0.8128"/>
+</package>
+<package name="Q62902-B156">
+<description><b>LED HOLDER</b><p>
+Siemens</description>
+<wire x1="2.54" y1="-1.905" x2="2.54" y2="1.905" width="0.1524" layer="21"/>
+<wire x1="-1.143" y1="0" x2="0" y2="1.143" width="0.1524" layer="51" curve="-90"/>
+<wire x1="0" y1="-1.143" x2="1.143" y2="0" width="0.1524" layer="51" curve="90"/>
+<wire x1="-1.651" y1="0" x2="0" y2="1.651" width="0.1524" layer="51" curve="-90"/>
+<wire x1="0" y1="-1.651" x2="1.651" y2="0" width="0.1524" layer="51" curve="90"/>
+<wire x1="-2.159" y1="0" x2="0" y2="2.159" width="0.1524" layer="51" curve="-90"/>
+<wire x1="0.0539" y1="-2.2129" x2="2.2129" y2="-0.0539" width="0.1524" layer="51" curve="90.005308"/>
+<wire x1="2.54" y1="3.81" x2="3.81" y2="2.54" width="0.1524" layer="21"/>
+<wire x1="2.54" y1="3.81" x2="-3.81" y2="3.81" width="0.1524" layer="21"/>
+<wire x1="-3.81" y1="-3.81" x2="-3.81" y2="3.81" width="0.1524" layer="21"/>
+<wire x1="3.81" y1="2.54" x2="3.81" y2="-3.81" width="0.1524" layer="21"/>
+<wire x1="-3.81" y1="-3.81" x2="-2.54" y2="-3.81" width="0.1524" layer="21"/>
+<wire x1="-2.54" y1="-3.302" x2="-2.54" y2="-3.81" width="0.1524" layer="21"/>
+<wire x1="3.81" y1="-3.81" x2="2.54" y2="-3.81" width="0.1524" layer="21"/>
+<wire x1="2.54" y1="-3.302" x2="2.54" y2="-3.81" width="0.1524" layer="21"/>
+<wire x1="2.54" y1="-3.302" x2="-2.54" y2="-3.302" width="0.1524" layer="21"/>
+<circle x="0" y="0" radius="2.54" width="0.1524" layer="21"/>
+<circle x="0" y="0" radius="3.175" width="0.254" layer="21"/>
+<pad name="A" x="-1.27" y="0" drill="1.016" shape="long" rot="R90"/>
+<pad name="K" x="1.27" y="0" drill="1.016" shape="long" rot="R90"/>
+<text x="-3.81" y="4.0894" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-3.7846" y="-5.3594" size="1.27" layer="27" ratio="10">>VALUE</text>
+<text x="-3.556" y="-3.302" size="1.016" layer="21" ratio="14">+</text>
+<text x="2.794" y="-3.302" size="1.016" layer="21" ratio="14">-</text>
+</package>
+<package name="SFH480">
+<description><B>IR LED</B><p>
+infrared emitting diode, Infineon
+TO-18, lead spacing 2.54 mm, cathode marking<p>
+Inifineon</description>
+<wire x1="-2.159" y1="1.524" x2="-2.794" y2="2.159" width="0.1524" layer="21"/>
+<wire x1="-2.794" y1="2.159" x2="-2.159" y2="2.794" width="0.1524" layer="21"/>
+<wire x1="-1.524" y1="2.159" x2="-2.159" y2="2.794" width="0.1524" layer="21"/>
+<wire x1="0" y1="1.778" x2="1.5358" y2="0.8959" width="0.1524" layer="21" curve="-59.743278"/>
+<wire x1="-1.5358" y1="0.8959" x2="0" y2="1.778" width="0.1524" layer="21" curve="-59.743278"/>
+<wire x1="-1.5358" y1="-0.8959" x2="0" y2="-1.778" width="0.1524" layer="21" curve="59.743278"/>
+<wire x1="0" y1="-1.778" x2="1.5358" y2="-0.8959" width="0.1524" layer="21" curve="59.743278"/>
+<wire x1="1.5142" y1="0.9318" x2="1.778" y2="0" width="0.1524" layer="51" curve="-31.606487"/>
+<wire x1="1.5" y1="-0.9546" x2="1.778" y2="0" width="0.1524" layer="51" curve="32.472615"/>
+<wire x1="-1.778" y1="0" x2="-1.5142" y2="-0.9318" width="0.1524" layer="51" curve="31.606487"/>
+<wire x1="-1.778" y1="0" x2="-1.5" y2="0.9546" width="0.1524" layer="51" curve="-32.472615"/>
+<wire x1="-0.635" y1="0" x2="0" y2="0.635" width="0.1524" layer="51" curve="-90"/>
+<wire x1="-1.016" y1="0" x2="0" y2="1.016" width="0.1524" layer="51" curve="-90"/>
+<wire x1="0" y1="-0.635" x2="0.635" y2="0" width="0.1524" layer="51" curve="90"/>
+<wire x1="0.0539" y1="-1.0699" x2="1.0699" y2="-0.0539" width="0.1524" layer="51" curve="90"/>
+<circle x="0" y="0" radius="2.667" width="0.1524" layer="21"/>
+<circle x="0" y="0" radius="2.413" width="0.254" layer="21"/>
+<pad name="K" x="-1.27" y="0" drill="0.8128" shape="long" rot="R90"/>
+<pad name="A" x="1.27" y="0" drill="0.8128" shape="long" rot="R90"/>
+<text x="-1.27" y="3.048" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-1.27" y="-4.318" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="SFH482">
+<description><B>IR LED</B><p>
+infrared emitting diode, Infineon
+TO-18, lead spacing 2.54 mm, cathode marking<p>
+Inifineon</description>
+<wire x1="-2.159" y1="1.524" x2="-2.794" y2="2.159" width="0.1524" layer="21"/>
+<wire x1="-2.794" y1="2.159" x2="-2.159" y2="2.794" width="0.1524" layer="21"/>
+<wire x1="-1.524" y1="2.159" x2="-2.159" y2="2.794" width="0.1524" layer="21"/>
+<wire x1="0" y1="1.778" x2="1.5358" y2="0.8959" width="0.1524" layer="21" curve="-59.743278"/>
+<wire x1="-1.5358" y1="0.8959" x2="0" y2="1.778" width="0.1524" layer="21" curve="-59.743278"/>
+<wire x1="-1.5358" y1="-0.8959" x2="0" y2="-1.778" width="0.1524" layer="21" curve="59.743278"/>
+<wire x1="0" y1="-1.778" x2="1.5358" y2="-0.8959" width="0.1524" layer="21" curve="59.743278"/>
+<wire x1="1.5142" y1="0.9318" x2="1.778" y2="0" width="0.1524" layer="51" curve="-31.606487"/>
+<wire x1="1.5" y1="-0.9546" x2="1.778" y2="0" width="0.1524" layer="51" curve="32.472615"/>
+<wire x1="-1.778" y1="0" x2="-1.5142" y2="-0.9318" width="0.1524" layer="51" curve="31.606487"/>
+<wire x1="-1.778" y1="0" x2="-1.5" y2="0.9546" width="0.1524" layer="51" curve="-32.472615"/>
+<wire x1="-0.635" y1="0" x2="0" y2="0.635" width="0.1524" layer="51" curve="-90"/>
+<wire x1="-1.016" y1="0" x2="0" y2="1.016" width="0.1524" layer="51" curve="-90"/>
+<wire x1="0" y1="-0.635" x2="0.635" y2="0" width="0.1524" layer="51" curve="90"/>
+<wire x1="0.0539" y1="-1.0699" x2="1.0699" y2="-0.0539" width="0.1524" layer="51" curve="90"/>
+<circle x="0" y="0" radius="2.667" width="0.1524" layer="21"/>
+<circle x="0" y="0" radius="2.413" width="0.254" layer="21"/>
+<pad name="K" x="1.27" y="0" drill="0.8128" shape="long" rot="R90"/>
+<pad name="A" x="-1.27" y="0" drill="0.8128" shape="long" rot="R90"/>
+<text x="-1.27" y="3.048" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-1.27" y="-4.318" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="U57X32">
+<description><B>LED</B><p>
+rectangle, 5.7 x 3.2 mm</description>
+<wire x1="-3.175" y1="1.905" x2="3.175" y2="1.905" width="0.1524" layer="21"/>
+<wire x1="3.175" y1="-1.905" x2="3.175" y2="1.905" width="0.1524" layer="21"/>
+<wire x1="3.175" y1="-1.905" x2="-3.175" y2="-1.905" width="0.1524" layer="21"/>
+<wire x1="-3.175" y1="1.905" x2="-3.175" y2="-1.905" width="0.1524" layer="21"/>
+<wire x1="-2.667" y1="1.397" x2="2.667" y2="1.397" width="0.1524" layer="21"/>
+<wire x1="2.667" y1="-1.397" x2="2.667" y2="1.397" width="0.1524" layer="21"/>
+<wire x1="2.667" y1="-1.397" x2="-2.667" y2="-1.397" width="0.1524" layer="21"/>
+<wire x1="-2.667" y1="1.397" x2="-2.667" y2="-1.397" width="0.1524" layer="21"/>
+<wire x1="-2.54" y1="1.016" x2="2.54" y2="1.016" width="0.1524" layer="51"/>
+<wire x1="2.286" y1="1.27" x2="2.286" y2="-1.27" width="0.1524" layer="51"/>
+<wire x1="-2.54" y1="0.508" x2="2.54" y2="0.508" width="0.1524" layer="51"/>
+<wire x1="-2.54" y1="0" x2="2.54" y2="0" width="0.1524" layer="51"/>
+<wire x1="-2.54" y1="-0.508" x2="2.54" y2="-0.508" width="0.1524" layer="51"/>
+<wire x1="-2.54" y1="-1.016" x2="2.54" y2="-1.016" width="0.1524" layer="51"/>
+<wire x1="-2.286" y1="1.27" x2="-2.286" y2="-1.27" width="0.1524" layer="51"/>
+<wire x1="-1.778" y1="1.27" x2="-1.778" y2="-1.27" width="0.1524" layer="51"/>
+<wire x1="-1.27" y1="1.27" x2="-1.27" y2="-1.27" width="0.1524" layer="51"/>
+<wire x1="-0.762" y1="1.27" x2="-0.762" y2="-1.27" width="0.1524" layer="51"/>
+<wire x1="-0.254" y1="1.27" x2="-0.254" y2="-1.27" width="0.1524" layer="51"/>
+<wire x1="0.254" y1="1.27" x2="0.254" y2="-1.27" width="0.1524" layer="51"/>
+<wire x1="0.762" y1="1.27" x2="0.762" y2="-1.27" width="0.1524" layer="51"/>
+<wire x1="1.27" y1="1.27" x2="1.27" y2="-1.27" width="0.1524" layer="51"/>
+<wire x1="1.778" y1="1.27" x2="1.778" y2="-1.27" width="0.1524" layer="51"/>
+<pad name="A" x="-1.27" y="0" drill="0.8128" shape="long" rot="R90"/>
+<pad name="K" x="1.27" y="0" drill="0.8128" shape="long" rot="R90"/>
+<text x="3.683" y="0.254" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="3.683" y="-1.524" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="IRL80A">
+<description><B>IR LED</B><p>
+IR transmitter Siemens</description>
+<wire x1="0.889" y1="2.286" x2="0.889" y2="1.778" width="0.1524" layer="21"/>
+<wire x1="0.889" y1="1.778" x2="0.889" y2="0.762" width="0.1524" layer="51"/>
+<wire x1="0.889" y1="0.762" x2="0.889" y2="-0.635" width="0.1524" layer="21"/>
+<wire x1="0.889" y1="-0.635" x2="0.889" y2="-1.778" width="0.1524" layer="51"/>
+<wire x1="0.889" y1="-1.778" x2="0.889" y2="-2.286" width="0.1524" layer="21"/>
+<wire x1="0.889" y1="-2.286" x2="-0.889" y2="-2.286" width="0.1524" layer="21"/>
+<wire x1="-0.889" y1="2.286" x2="-0.889" y2="1.778" width="0.1524" layer="21"/>
+<wire x1="-0.889" y1="1.778" x2="-0.889" y2="0.762" width="0.1524" layer="51"/>
+<wire x1="-0.889" y1="0.762" x2="-0.889" y2="-0.762" width="0.1524" layer="21"/>
+<wire x1="-0.889" y1="-0.762" x2="-0.889" y2="-1.778" width="0.1524" layer="51"/>
+<wire x1="-0.889" y1="-1.778" x2="-0.889" y2="-2.286" width="0.1524" layer="21"/>
+<wire x1="-0.889" y1="2.286" x2="0.889" y2="2.286" width="0.1524" layer="21"/>
+<wire x1="-0.889" y1="-0.762" x2="-0.889" y2="0.762" width="0.1524" layer="21" curve="-180"/>
+<wire x1="-1.397" y1="0.254" x2="-1.397" y2="-0.254" width="0.0508" layer="21"/>
+<wire x1="-1.143" y1="0.508" x2="-1.143" y2="-0.508" width="0.0508" layer="21"/>
+<pad name="K" x="0" y="1.27" drill="0.8128" shape="octagon"/>
+<pad name="A" x="0" y="-1.27" drill="0.8128" shape="octagon"/>
+<text x="1.27" y="0.381" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="1.27" y="-1.651" size="1.27" layer="27" ratio="10">>VALUE</text>
+</package>
+<package name="P-LCC-2">
+<description><b>TOPLED® High-optical Power LED (HOP)</b><p>
+Source: http://www.osram.convergy.de/ ... ls_t675.pdf</description>
+<wire x1="-1.4" y1="-1.05" x2="-1.4" y2="-1.6" width="0.2032" layer="51"/>
+<wire x1="-1.4" y1="-1.6" x2="-1.1" y2="-1.6" width="0.2032" layer="51"/>
+<wire x1="-1.1" y1="-1.6" x2="-0.85" y2="-1.6" width="0.2032" layer="51"/>
+<wire x1="-0.85" y1="-1.6" x2="1.1" y2="-1.6" width="0.2032" layer="51"/>
+<wire x1="1.1" y1="-1.6" x2="1.4" y2="-1.6" width="0.2032" layer="51"/>
+<wire x1="1.4" y1="-1.6" x2="1.4" y2="1.6" width="0.2032" layer="51"/>
+<wire x1="1.4" y1="1.6" x2="1.1" y2="1.6" width="0.2032" layer="51"/>
+<wire x1="1.1" y1="1.6" x2="-1.1" y2="1.6" width="0.2032" layer="51"/>
+<wire x1="-1.1" y1="1.6" x2="-1.4" y2="1.6" width="0.2032" layer="51"/>
+<wire x1="-1.1" y1="1.6" x2="-1.1" y2="1.8" width="0.1016" layer="51"/>
+<wire x1="-1.1" y1="1.8" x2="1.1" y2="1.8" width="0.1016" layer="51"/>
+<wire x1="1.1" y1="1.8" x2="1.1" y2="1.6" width="0.1016" layer="51"/>
+<wire x1="-1.1" y1="-1.6" x2="-1.1" y2="-1.8" width="0.1016" layer="51"/>
+<wire x1="-1.1" y1="-1.8" x2="1.1" y2="-1.8" width="0.1016" layer="51"/>
+<wire x1="1.1" y1="-1.8" x2="1.1" y2="-1.6" width="0.1016" layer="51"/>
+<wire x1="-0.85" y1="-1.6" x2="-1.4" y2="-1.05" width="0.2032" layer="51"/>
+<wire x1="-1.4" y1="1.6" x2="-1.4" y2="-1.05" width="0.2032" layer="51"/>
+<circle x="0" y="0" radius="1.1" width="0.2032" layer="51"/>
+<smd name="C" x="0" y="-2.75" dx="4" dy="4" layer="1" stop="no" cream="no"/>
+<smd name="A" x="0" y="2.75" dx="4" dy="4" layer="1" stop="no" cream="no"/>
+<text x="-2.54" y="-1.905" size="1.27" layer="25" rot="R90">>NAME</text>
+<text x="3.81" y="-1.905" size="1.27" layer="27" rot="R90">>VALUE</text>
+<text x="-0.635" y="2.54" size="1.27" layer="21">A</text>
+<text x="-0.635" y="-3.81" size="1.27" layer="21">C</text>
+<rectangle x1="-1.3" y1="-2.25" x2="1.3" y2="-0.75" layer="31"/>
+<rectangle x1="-1.3" y1="0.75" x2="1.3" y2="2.25" layer="31"/>
+<rectangle x1="-0.25" y1="-0.25" x2="0.25" y2="0.25" layer="21"/>
+<rectangle x1="-1.4" y1="0.65" x2="1.4" y2="2.35" layer="29"/>
+<rectangle x1="-1.4" y1="-2.35" x2="1.4" y2="-0.65" layer="29"/>
+</package>
+<package name="OSRAM-MINI-TOP-LED">
+<description><b>BLUE LINETM Hyper Mini TOPLED® Hyper-Bright LED</b><p>
+Source: http://www.osram.convergy.de/ ... LB M676.pdf</description>
+<wire x1="-0.6" y1="0.9" x2="-0.6" y2="-0.7" width="0.1016" layer="51"/>
+<wire x1="-0.45" y1="-0.9" x2="-0.4" y2="-0.9" width="0.1016" layer="51"/>
+<wire x1="-0.4" y1="-0.9" x2="0.6" y2="-0.9" width="0.1016" layer="51"/>
+<wire x1="0.6" y1="-0.9" x2="0.6" y2="0.9" width="0.1016" layer="51"/>
+<wire x1="0.6" y1="0.9" x2="-0.6" y2="0.9" width="0.1016" layer="51"/>
+<wire x1="-0.45" y1="0.95" x2="-0.45" y2="1.1" width="0.1016" layer="51"/>
+<wire x1="-0.45" y1="1.1" x2="0.45" y2="1.1" width="0.1016" layer="51"/>
+<wire x1="0.45" y1="1.1" x2="0.45" y2="0.95" width="0.1016" layer="51"/>
+<wire x1="-0.6" y1="-0.7" x2="-0.4" y2="-0.9" width="0.1016" layer="51"/>
+<wire x1="-0.45" y1="-0.9" x2="-0.45" y2="-1.1" width="0.1016" layer="51"/>
+<wire x1="-0.45" y1="-1.1" x2="0.45" y2="-1.1" width="0.1016" layer="51"/>
+<wire x1="0.45" y1="-1.1" x2="0.45" y2="-0.95" width="0.1016" layer="51"/>
+<smd name="A" x="0" y="2.6" dx="4" dy="4" layer="1" stop="no" cream="no"/>
+<smd name="C" x="0" y="-2.6" dx="4" dy="4" layer="1" stop="no" cream="no"/>
+<text x="-0.635" y="1.905" size="1.27" layer="21">A</text>
+<text x="-0.635" y="-3.175" size="1.27" layer="21">C</text>
+<text x="-2.54" y="-1.905" size="1.27" layer="25" rot="R90">>NAME</text>
+<text x="3.81" y="-1.905" size="1.27" layer="27" rot="R90">>VALUE</text>
+<rectangle x1="-0.5" y1="0.6" x2="0.5" y2="1.4" layer="29"/>
+<rectangle x1="-0.5" y1="-1.4" x2="0.5" y2="-0.6" layer="29"/>
+<rectangle x1="-0.15" y1="-0.6" x2="0.15" y2="-0.3" layer="51"/>
+<rectangle x1="-0.45" y1="0.65" x2="0.45" y2="1.35" layer="31"/>
+<rectangle x1="-0.45" y1="-1.35" x2="0.45" y2="-0.65" layer="31"/>
+</package>
+<package name="OSRAM-SIDELED">
+<description><b>Super SIDELED® High-Current LED</b><p>
+LG A672, LP A672 <br>
+Source: http://www.osram.convergy.de/ ... LG_LP_A672.pdf (2004.05.13)</description>
+<wire x1="-1.85" y1="-2.05" x2="-1.85" y2="-0.75" width="0.1016" layer="51"/>
+<wire x1="-1.85" y1="-0.75" x2="-1.7" y2="-0.75" width="0.1016" layer="51"/>
+<wire x1="-1.7" y1="-0.75" x2="-1.7" y2="0.75" width="0.1016" layer="51"/>
+<wire x1="-1.7" y1="0.75" x2="-1.85" y2="0.75" width="0.1016" layer="51"/>
+<wire x1="-1.85" y1="0.75" x2="-1.85" y2="2.05" width="0.1016" layer="51"/>
+<wire x1="-1.85" y1="2.05" x2="0.9" y2="2.05" width="0.1016" layer="51"/>
+<wire x1="0.9" y1="2.05" x2="0.9" y2="-2.05" width="0.1016" layer="51"/>
+<wire x1="0.9" y1="-2.05" x2="-1.85" y2="-2.05" width="0.1016" layer="51"/>
+<wire x1="0.9" y1="-2.05" x2="1.05" y2="-2.05" width="0.1016" layer="51"/>
+<wire x1="1.05" y1="-2.05" x2="1.85" y2="-1.85" width="0.1016" layer="51"/>
+<wire x1="1.85" y1="-1.85" x2="1.85" y2="1.85" width="0.1016" layer="51"/>
+<wire x1="1.85" y1="1.85" x2="1.05" y2="2.05" width="0.1016" layer="51"/>
+<wire x1="1.05" y1="2.05" x2="0.9" y2="2.05" width="0.1016" layer="51"/>
+<wire x1="1.05" y1="2.05" x2="1.05" y2="-2.05" width="0.1016" layer="51"/>
+<wire x1="-0.55" y1="-0.9" x2="-0.55" y2="0.9" width="0.1016" layer="51" curve="-167.319617"/>
+<wire x1="-0.55" y1="-0.9" x2="0.85" y2="-1.2" width="0.1016" layer="51" style="shortdash"/>
+<wire x1="-0.55" y1="0.9" x2="0.85" y2="1.2" width="0.1016" layer="51" style="shortdash"/>
+<smd name="C" x="0" y="-2.5" dx="4" dy="4" layer="1" stop="no" cream="no"/>
+<smd name="A" x="0" y="2.5" dx="4" dy="4" layer="1" stop="no" cream="no"/>
+<text x="0.635" y="-3.175" size="1.27" layer="21" rot="R90">C</text>
+<text x="0.635" y="2.54" size="1.27" layer="21" rot="R90">A</text>
+<text x="-2.54" y="-2.54" size="1.27" layer="25" rot="R90">>NAME</text>
+<text x="3.81" y="-2.54" size="1.27" layer="27" rot="R90">>VALUE</text>
+<rectangle x1="-2.1" y1="-2.2" x2="2.1" y2="-0.4" layer="29"/>
+<rectangle x1="-2.1" y1="0.4" x2="2.1" y2="2.2" layer="29"/>
+<rectangle x1="-1.9" y1="-2.1" x2="1.9" y2="-0.6" layer="31"/>
+<rectangle x1="-1.9" y1="0.6" x2="1.9" y2="2.1" layer="31"/>
+<rectangle x1="-1.85" y1="-2.05" x2="-0.7" y2="-1" layer="51"/>
+</package>
+<package name="SMART-LED">
+<description><b>SmartLEDTM Hyper-Bright LED</b><p>
+Source: http://www.osram.convergy.de/ ... LA_LO_LS_LY L896.pdf</description>
+<wire x1="-0.35" y1="0.6" x2="0.35" y2="0.6" width="0.1016" layer="51" style="shortdash"/>
+<wire x1="0.35" y1="0.6" x2="0.35" y2="-0.6" width="0.1016" layer="21" style="shortdash"/>
+<wire x1="0.35" y1="-0.6" x2="0.15" y2="-0.6" width="0.1016" layer="51" style="shortdash"/>
+<wire x1="0.15" y1="-0.6" x2="-0.35" y2="-0.6" width="0.1016" layer="51" style="shortdash"/>
+<wire x1="-0.35" y1="-0.6" x2="-0.35" y2="0.6" width="0.1016" layer="21" style="shortdash"/>
+<wire x1="0.35" y1="-0.4" x2="0.15" y2="-0.6" width="0.1016" layer="51" style="shortdash"/>
+<smd name="A" x="0" y="0.725" dx="0.35" dy="0.35" layer="1"/>
+<smd name="B" x="0" y="-0.725" dx="0.35" dy="0.35" layer="1"/>
+<text x="-0.635" y="-0.635" size="1.016" layer="25" rot="R90">>NAME</text>
+<text x="1.905" y="-0.635" size="1.016" layer="27" rot="R90">>VALUE</text>
+<rectangle x1="-0.15" y1="-0.35" x2="0.15" y2="-0.05" layer="21"/>
+<rectangle x1="-0.15" y1="0.6" x2="0.15" y2="0.85" layer="51"/>
+<rectangle x1="-0.15" y1="-0.85" x2="0.15" y2="-0.6" layer="51"/>
+</package>
+<package name="P-LCC-2-TOPLED-RG">
+<description><b>Hyper TOPLED® RG Hyper-Bright LED</b><p>
+Source: http://www.osram.convergy.de/ ... LA_LO_LS_LY T776.pdf</description>
+<wire x1="-1.4" y1="-1.05" x2="-1.4" y2="-1.6" width="0.2032" layer="51"/>
+<wire x1="-1.4" y1="-1.6" x2="-1.1" y2="-1.6" width="0.2032" layer="51"/>
+<wire x1="-1.1" y1="-1.6" x2="-0.85" y2="-1.6" width="0.2032" layer="51"/>
+<wire x1="-0.85" y1="-1.6" x2="1.1" y2="-1.6" width="0.2032" layer="51"/>
+<wire x1="1.1" y1="-1.6" x2="1.4" y2="-1.6" width="0.2032" layer="51"/>
+<wire x1="1.4" y1="-1.6" x2="1.4" y2="1.6" width="0.2032" layer="51"/>
+<wire x1="1.4" y1="1.6" x2="1.1" y2="1.6" width="0.2032" layer="51"/>
+<wire x1="1.1" y1="1.6" x2="-1.1" y2="1.6" width="0.2032" layer="51"/>
+<wire x1="-1.1" y1="1.6" x2="-1.4" y2="1.6" width="0.2032" layer="51"/>
+<wire x1="-1.1" y1="1.6" x2="-1.1" y2="2.45" width="0.1016" layer="51"/>
+<wire x1="1.1" y1="2.45" x2="1.1" y2="1.6" width="0.1016" layer="51"/>
+<wire x1="-1.1" y1="-1.6" x2="-1.1" y2="-2.45" width="0.1016" layer="51"/>
+<wire x1="1.1" y1="-2.45" x2="1.1" y2="-1.6" width="0.1016" layer="51"/>
+<wire x1="-0.85" y1="-1.6" x2="-1.4" y2="-1.05" width="0.2032" layer="51"/>
+<wire x1="-1.4" y1="1.6" x2="-1.4" y2="-1.05" width="0.2032" layer="51"/>
+<circle x="0" y="0" radius="1.1" width="0.2032" layer="21"/>
+<smd name="C" x="0" y="-3.5" dx="4" dy="4" layer="1" stop="no" cream="no"/>
+<smd name="A" x="0" y="3.5" dx="4" dy="4" layer="1" stop="no" cream="no"/>
+<text x="-2.54" y="-1.905" size="1.27" layer="25" rot="R90">>NAME</text>
+<text x="3.81" y="-1.905" size="1.27" layer="27" rot="R90">>VALUE</text>
+<text x="-0.635" y="3.29" size="1.27" layer="21">A</text>
+<text x="-0.635" y="-4.56" size="1.27" layer="21">C</text>
+<rectangle x1="-1.3" y1="-3" x2="1.3" y2="-1.5" layer="31"/>
+<rectangle x1="-1.3" y1="1.5" x2="1.3" y2="3" layer="31"/>
+<rectangle x1="-0.25" y1="-0.25" x2="0.25" y2="0.25" layer="21"/>
+<rectangle x1="-1.15" y1="2.4" x2="1.15" y2="2.7" layer="51"/>
+<rectangle x1="-1.15" y1="-2.7" x2="1.15" y2="-2.4" layer="51"/>
+<rectangle x1="-1.5" y1="1.5" x2="1.5" y2="3.2" layer="29"/>
+<rectangle x1="-1.5" y1="-3.2" x2="1.5" y2="-1.5" layer="29"/>
+<hole x="0" y="0" drill="2.8"/>
+</package>
+<package name="MICRO-SIDELED">
+<description><b>Hyper Micro SIDELED®</b><p>
+Source: http://www.osram.convergy.de/ ... LA_LO_LS_LY Y876.pdf</description>
+<wire x1="0.65" y1="1.1" x2="-0.1" y2="1.1" width="0.1016" layer="51"/>
+<wire x1="-0.1" y1="1.1" x2="-0.35" y2="1" width="0.1016" layer="51"/>
+<wire x1="-0.35" y1="1" x2="-0.35" y2="-0.9" width="0.1016" layer="21"/>
+<wire x1="-0.35" y1="-0.9" x2="-0.1" y2="-1.1" width="0.1016" layer="51"/>
+<wire x1="-0.1" y1="-1.1" x2="0.65" y2="-1.1" width="0.1016" layer="51"/>
+<wire x1="0.65" y1="-1.1" x2="0.65" y2="1.1" width="0.1016" layer="21"/>
+<wire x1="0.6" y1="0.9" x2="0.25" y2="0.7" width="0.0508" layer="21"/>
+<wire x1="0.25" y1="0.7" x2="0.25" y2="-0.7" width="0.0508" layer="21"/>
+<wire x1="0.25" y1="-0.7" x2="0.6" y2="-0.9" width="0.0508" layer="21"/>
+<smd name="A" x="0" y="1.95" dx="1.6" dy="1.6" layer="1" stop="no" cream="no"/>
+<smd name="C" x="0" y="-1.95" dx="1.6" dy="1.6" layer="1" stop="no" cream="no"/>
+<text x="-1.27" y="-1.905" size="1.27" layer="25" rot="R90">>NAME</text>
+<text x="2.54" y="-1.905" size="1.27" layer="27" rot="R90">>VALUE</text>
+<rectangle x1="-0.4" y1="1.1" x2="0.4" y2="1.8" layer="29"/>
+<rectangle x1="-0.4" y1="-1.8" x2="0.4" y2="-1.1" layer="29"/>
+<rectangle x1="-0.35" y1="-1.75" x2="0.35" y2="-1.15" layer="31"/>
+<rectangle x1="-0.35" y1="1.15" x2="0.35" y2="1.75" layer="31"/>
+<rectangle x1="-0.125" y1="1.125" x2="0.125" y2="1.75" layer="51"/>
+<rectangle x1="-0.125" y1="-1.75" x2="0.125" y2="-1.125" layer="51"/>
+</package>
+<package name="P-LCC-4">
+<description><b>Power TOPLED®</b><p>
+Source: http://www.osram.convergy.de/ ... LA_LO_LA_LY E67B.pdf</description>
+<wire x1="-1.4" y1="-1.05" x2="-1.4" y2="-1.6" width="0.2032" layer="51"/>
+<wire x1="-1.4" y1="-1.6" x2="-1" y2="-1.6" width="0.2032" layer="51"/>
+<wire x1="-1" y1="-1.6" x2="-0.85" y2="-1.6" width="0.2032" layer="51"/>
+<wire x1="-0.85" y1="-1.6" x2="1" y2="-1.6" width="0.2032" layer="51"/>
+<wire x1="1" y1="-1.6" x2="1.4" y2="-1.6" width="0.2032" layer="51"/>
+<wire x1="1.4" y1="-1.6" x2="1.4" y2="1.6" width="0.2032" layer="51"/>
+<wire x1="1.4" y1="1.6" x2="1.1" y2="1.6" width="0.2032" layer="51"/>
+<wire x1="1.1" y1="1.6" x2="-1" y2="1.6" width="0.2032" layer="51"/>
+<wire x1="-1" y1="1.6" x2="-1.4" y2="1.6" width="0.2032" layer="51"/>
+<wire x1="-1" y1="1.6" x2="-1" y2="1.8" width="0.1016" layer="51"/>
+<wire x1="-1" y1="1.8" x2="-0.5" y2="1.8" width="0.1016" layer="51"/>
+<wire x1="-0.5" y1="1.8" x2="-0.5" y2="1.65" width="0.1016" layer="51"/>
+<wire x1="0.5" y1="1.65" x2="0.5" y2="1.8" width="0.1016" layer="51"/>
+<wire x1="0.5" y1="1.8" x2="1.1" y2="1.8" width="0.1016" layer="51"/>
+<wire x1="1.1" y1="1.8" x2="1.1" y2="1.6" width="0.1016" layer="51"/>
+<wire x1="-1" y1="-1.6" x2="-1" y2="-1.8" width="0.1016" layer="51"/>
+<wire x1="-1" y1="-1.8" x2="-0.5" y2="-1.8" width="0.1016" layer="51"/>
+<wire x1="-0.5" y1="-1.8" x2="-0.5" y2="-1.65" width="0.1016" layer="51"/>
+<wire x1="0.5" y1="-1.65" x2="0.5" y2="-1.8" width="0.1016" layer="51"/>
+<wire x1="0.5" y1="-1.8" x2="1" y2="-1.8" width="0.1016" layer="51"/>
+<wire x1="1" y1="-1.8" x2="1" y2="-1.6" width="0.1016" layer="51"/>
+<wire x1="-0.85" y1="-1.6" x2="-1.4" y2="-1.05" width="0.2032" layer="51"/>
+<wire x1="-1.4" y1="1.6" x2="-1.4" y2="-1.05" width="0.2032" layer="51"/>
+<circle x="0" y="0" radius="1.1" width="0.2032" layer="51"/>
+<smd name="A" x="-2" y="3.15" dx="3.3" dy="4.8" layer="1" stop="no" cream="no"/>
+<smd name="C@3" x="2" y="3.15" dx="3.3" dy="4.8" layer="1" stop="no" cream="no"/>
+<smd name="C@4" x="2" y="-3.15" dx="3.3" dy="4.8" layer="1" stop="no" cream="no"/>
+<smd name="C@1" x="-2" y="-3.15" dx="3.3" dy="4.8" layer="1" stop="no" cream="no"/>
+<text x="-3.81" y="-2.54" size="1.27" layer="25" rot="R90">>NAME</text>
+<text x="5.08" y="-2.54" size="1.27" layer="27" rot="R90">>VALUE</text>
+<text x="-1.905" y="-3.81" size="1.27" layer="21">C</text>
+<text x="-1.905" y="2.54" size="1.27" layer="21">A</text>
+<text x="1.27" y="2.54" size="1.27" layer="21">C</text>
+<text x="1.27" y="-3.81" size="1.27" layer="21">C</text>
+<rectangle x1="-1.15" y1="0.75" x2="-0.35" y2="1.85" layer="29"/>
+<rectangle x1="0.35" y1="0.75" x2="1.15" y2="1.85" layer="29"/>
+<rectangle x1="0.35" y1="-1.85" x2="1.15" y2="-0.75" layer="29"/>
+<rectangle x1="-1.15" y1="-1.85" x2="-0.35" y2="-0.75" layer="29"/>
+<rectangle x1="-1.1" y1="-1.8" x2="-0.4" y2="-0.8" layer="31"/>
+<rectangle x1="0.4" y1="-1.8" x2="1.1" y2="-0.8" layer="31"/>
+<rectangle x1="0.4" y1="0.8" x2="1.1" y2="1.8" layer="31"/>
+<rectangle x1="-1.1" y1="0.8" x2="-0.4" y2="1.8" layer="31"/>
+<rectangle x1="-0.2" y1="-0.2" x2="0.2" y2="0.2" layer="21"/>
+</package>
+<package name="CHIP-LED0603">
+<description><b>Hyper CHIPLED Hyper-Bright LED</b><p>
+LB Q993<br>
+Source: http://www.osram.convergy.de/ ... Lb_q993.pdf</description>
+<wire x1="-0.4" y1="0.45" x2="-0.4" y2="-0.45" width="0.1016" layer="51"/>
+<wire x1="0.4" y1="0.45" x2="0.4" y2="-0.45" width="0.1016" layer="51"/>
+<smd name="C" x="0" y="0.75" dx="0.8" dy="0.8" layer="1"/>
+<smd name="A" x="0" y="-0.75" dx="0.8" dy="0.8" layer="1"/>
+<text x="-0.635" y="-0.635" size="1.27" layer="25" rot="R90">>NAME</text>
+<text x="1.905" y="-0.635" size="1.27" layer="27" rot="R90">>VALUE</text>
+<rectangle x1="-0.45" y1="0.45" x2="0.45" y2="0.85" layer="51"/>
+<rectangle x1="-0.45" y1="-0.85" x2="0.45" y2="-0.45" layer="51"/>
+<rectangle x1="-0.45" y1="0" x2="-0.3" y2="0.3" layer="21"/>
+<rectangle x1="0.3" y1="0" x2="0.45" y2="0.3" layer="21"/>
+<rectangle x1="-0.15" y1="0" x2="0.15" y2="0.3" layer="21"/>
+</package>
+<package name="CHIP-LED0805">
+<description><b>Hyper CHIPLED Hyper-Bright LED</b><p>
+LB R99A<br>
+Source: http://www.osram.convergy.de/ ... lb_r99a.pdf</description>
+<wire x1="-0.625" y1="0.45" x2="-0.625" y2="-0.45" width="0.1016" layer="51"/>
+<wire x1="0.625" y1="0.45" x2="0.625" y2="-0.475" width="0.1016" layer="51"/>
+<smd name="C" x="0" y="1.05" dx="1.2" dy="1.2" layer="1"/>
+<smd name="A" x="0" y="-1.05" dx="1.2" dy="1.2" layer="1"/>
+<text x="-1.27" y="-1.27" size="1.27" layer="25" rot="R90">>NAME</text>
+<text x="2.54" y="-1.27" size="1.27" layer="27" rot="R90">>VALUE</text>
+<rectangle x1="-0.675" y1="0" x2="-0.525" y2="0.3" layer="21"/>
+<rectangle x1="0.525" y1="0" x2="0.675" y2="0.3" layer="21"/>
+<rectangle x1="-0.15" y1="0" x2="0.15" y2="0.3" layer="21"/>
+<rectangle x1="-0.675" y1="0.45" x2="0.675" y2="1.05" layer="51"/>
+<rectangle x1="-0.675" y1="-1.05" x2="0.675" y2="-0.45" layer="51"/>
+</package>
+<package name="MINI-TOPLED-SANTANA">
+<description><b>Mini TOPLED Santana®</b><p>
+Source: http://www.osram.convergy.de/ ... LG M470.pdf</description>
+<wire x1="0.7" y1="-1" x2="0.35" y2="-1" width="0.1016" layer="21"/>
+<wire x1="0.35" y1="-1" x2="-0.7" y2="-1" width="0.1016" layer="21"/>
+<wire x1="-0.7" y1="-1" x2="-0.7" y2="1" width="0.1016" layer="21"/>
+<wire x1="-0.7" y1="1" x2="0.7" y2="1" width="0.1016" layer="21"/>
+<wire x1="0.7" y1="1" x2="0.7" y2="-0.65" width="0.1016" layer="21"/>
+<wire x1="0.7" y1="-0.65" x2="0.7" y2="-1" width="0.1016" layer="21"/>
+<wire x1="0.45" y1="-0.7" x2="-0.45" y2="-0.7" width="0.1016" layer="21"/>
+<wire x1="-0.45" y1="-0.7" x2="-0.45" y2="0.7" width="0.1016" layer="21"/>
+<wire x1="-0.45" y1="0.7" x2="0.45" y2="0.7" width="0.1016" layer="21"/>
+<wire x1="0.45" y1="0.7" x2="0.45" y2="-0.7" width="0.1016" layer="21"/>
+<wire x1="0.7" y1="-0.65" x2="0.35" y2="-1" width="0.1016" layer="21"/>
+<smd name="C" x="0" y="-2.2" dx="1.6" dy="1.6" layer="1" stop="no" cream="no"/>
+<smd name="A" x="0" y="2.2" dx="1.6" dy="1.6" layer="1" stop="no" cream="no"/>
+<text x="-1.27" y="-1.905" size="1.27" layer="25" rot="R90">>NAME</text>
+<text x="2.54" y="-1.905" size="1.27" layer="27" rot="R90">>VALUE</text>
+<rectangle x1="-0.55" y1="1.5" x2="0.55" y2="2.1" layer="29"/>
+<rectangle x1="-0.55" y1="-2.1" x2="0.55" y2="-1.5" layer="29"/>
+<rectangle x1="-0.5" y1="-2.05" x2="0.5" y2="-1.55" layer="31"/>
+<rectangle x1="-0.5" y1="1.55" x2="0.5" y2="2.05" layer="31"/>
+<rectangle x1="-0.2" y1="-0.4" x2="0.15" y2="-0.05" layer="21"/>
+<rectangle x1="-0.5" y1="-2.1" x2="0.5" y2="-1.4" layer="51"/>
+<rectangle x1="-0.5" y1="1.4" x2="0.5" y2="2.05" layer="51"/>
+<rectangle x1="-0.5" y1="1" x2="0.5" y2="1.4" layer="21"/>
+<rectangle x1="-0.5" y1="-1.4" x2="0.5" y2="-1.05" layer="21"/>
+<hole x="0" y="0" drill="2.7"/>
+</package>
+<package name="CHIPLED_0805">
+<description><b>CHIPLED</b><p>
+Source: http://www.osram.convergy.de/ ... LG_R971.pdf</description>
+<wire x1="-0.35" y1="0.925" x2="0.35" y2="0.925" width="0.1016" layer="51" curve="162.394521"/>
+<wire x1="-0.35" y1="-0.925" x2="0.35" y2="-0.925" width="0.1016" layer="51" curve="-162.394521"/>
+<wire x1="0.575" y1="0.525" x2="0.575" y2="-0.525" width="0.1016" layer="51"/>
+<wire x1="-0.575" y1="-0.5" x2="-0.575" y2="0.925" width="0.1016" layer="51"/>
+<circle x="-0.45" y="0.85" radius="0.103" width="0.1016" layer="51"/>
+<smd name="C" x="0" y="1.05" dx="1.2" dy="1.2" layer="1"/>
+<smd name="A" x="0" y="-1.05" dx="1.2" dy="1.2" layer="1"/>
+<text x="-1.27" y="-1.27" size="1.27" layer="25" rot="R90">>NAME</text>
+<text x="2.54" y="-1.27" size="1.27" layer="27" rot="R90">>VALUE</text>
+<rectangle x1="0.3" y1="0.5" x2="0.625" y2="1" layer="51"/>
+<rectangle x1="-0.325" y1="0.5" x2="-0.175" y2="0.75" layer="51"/>
+<rectangle x1="0.175" y1="0.5" x2="0.325" y2="0.75" layer="51"/>
+<rectangle x1="-0.2" y1="0.5" x2="0.2" y2="0.675" layer="51"/>
+<rectangle x1="0.3" y1="-1" x2="0.625" y2="-0.5" layer="51"/>
+<rectangle x1="-0.625" y1="-1" x2="-0.3" y2="-0.5" layer="51"/>
+<rectangle x1="0.175" y1="-0.75" x2="0.325" y2="-0.5" layer="51"/>
+<rectangle x1="-0.325" y1="-0.75" x2="-0.175" y2="-0.5" layer="51"/>
+<rectangle x1="-0.2" y1="-0.675" x2="0.2" y2="-0.5" layer="51"/>
+<rectangle x1="-0.1" y1="0" x2="0.1" y2="0.2" layer="21"/>
+<rectangle x1="-0.6" y1="0.5" x2="-0.3" y2="0.8" layer="51"/>
+<rectangle x1="-0.625" y1="0.925" x2="-0.3" y2="1" layer="51"/>
+</package>
+<package name="CHIPLED_1206">
+<description><b>CHIPLED</b><p>
+Source: http://www.osram.convergy.de/ ... LG_LY N971.pdf</description>
+<wire x1="-0.4" y1="1.6" x2="0.4" y2="1.6" width="0.1016" layer="51" curve="172.619069"/>
+<wire x1="-0.8" y1="-0.95" x2="-0.8" y2="0.95" width="0.1016" layer="51"/>
+<wire x1="0.8" y1="0.95" x2="0.8" y2="-0.95" width="0.1016" layer="51"/>
+<circle x="-0.55" y="1.425" radius="0.1" width="0.1016" layer="51"/>
+<smd name="C" x="0" y="1.75" dx="1.5" dy="1.5" layer="1"/>
+<smd name="A" x="0" y="-1.75" dx="1.5" dy="1.5" layer="1"/>
+<text x="-1.27" y="-1.27" size="1.27" layer="25" rot="R90">>NAME</text>
+<text x="2.54" y="-1.27" size="1.27" layer="27" rot="R90">>VALUE</text>
+<rectangle x1="-0.85" y1="1.525" x2="-0.35" y2="1.65" layer="51"/>
+<rectangle x1="-0.85" y1="1.225" x2="-0.625" y2="1.55" layer="51"/>
+<rectangle x1="-0.45" y1="1.225" x2="-0.325" y2="1.45" layer="51"/>
+<rectangle x1="-0.65" y1="1.225" x2="-0.225" y2="1.35" layer="51"/>
+<rectangle x1="0.35" y1="1.3" x2="0.85" y2="1.65" layer="51"/>
+<rectangle x1="0.25" y1="1.225" x2="0.85" y2="1.35" layer="51"/>
+<rectangle x1="-0.85" y1="0.95" x2="0.85" y2="1.25" layer="51"/>
+<rectangle x1="-0.85" y1="-1.65" x2="0.85" y2="-0.95" layer="51"/>
+<rectangle x1="-0.85" y1="0.35" x2="-0.525" y2="0.775" layer="21"/>
+<rectangle x1="0.525" y1="0.35" x2="0.85" y2="0.775" layer="21"/>
+<rectangle x1="-0.175" y1="0" x2="0.175" y2="0.35" layer="21"/>
+</package>
+<package name="CHIPLED_0603">
+<description><b>CHIPLED</b><p>
+Source: http://www.osram.convergy.de/ ... LG_LY Q971.pdf</description>
+<wire x1="-0.3" y1="0.8" x2="0.3" y2="0.8" width="0.1016" layer="51" curve="170.055574"/>
+<wire x1="-0.275" y1="-0.825" x2="0.275" y2="-0.825" width="0.0508" layer="51" curve="-180"/>
+<wire x1="-0.4" y1="0.375" x2="-0.4" y2="-0.35" width="0.1016" layer="51"/>
+<wire x1="0.4" y1="0.35" x2="0.4" y2="-0.35" width="0.1016" layer="51"/>
+<circle x="-0.35" y="0.625" radius="0.075" width="0.0508" layer="51"/>
+<smd name="C" x="0" y="0.75" dx="0.8" dy="0.8" layer="1"/>
+<smd name="A" x="0" y="-0.75" dx="0.8" dy="0.8" layer="1"/>
+<text x="-0.635" y="-1.27" size="1.27" layer="25" rot="R90">>NAME</text>
+<text x="1.905" y="-1.27" size="1.27" layer="27" rot="R90">>VALUE</text>
+<rectangle x1="-0.45" y1="0.7" x2="-0.25" y2="0.85" layer="51"/>
+<rectangle x1="-0.275" y1="0.55" x2="-0.225" y2="0.6" layer="51"/>
+<rectangle x1="-0.45" y1="0.35" x2="-0.4" y2="0.725" layer="51"/>
+<rectangle x1="0.25" y1="0.55" x2="0.45" y2="0.85" layer="51"/>
+<rectangle x1="-0.45" y1="0.35" x2="0.45" y2="0.575" layer="51"/>
+<rectangle x1="-0.45" y1="-0.85" x2="-0.25" y2="-0.35" layer="51"/>
+<rectangle x1="0.25" y1="-0.85" x2="0.45" y2="-0.35" layer="51"/>
+<rectangle x1="-0.275" y1="-0.575" x2="0.275" y2="-0.35" layer="51"/>
+<rectangle x1="-0.275" y1="-0.65" x2="-0.175" y2="-0.55" layer="51"/>
+<rectangle x1="0.175" y1="-0.65" x2="0.275" y2="-0.55" layer="51"/>
+<rectangle x1="-0.125" y1="0" x2="0.125" y2="0.25" layer="21"/>
+</package>
+<package name="CHIPLED-0603-TTW">
+<description><b>CHIPLED-0603</b><p>
+Recommended Solder Pad useable for SmartLEDTM and Chipled - Package 0603<br>
+Package able to withstand TTW-soldering heat<br>
+Package suitable for TTW-soldering<br>
+Source: http://www.osram.convergy.de/ ... LO_LS_LY L89K.pdf</description>
+<wire x1="-0.3" y1="0.8" x2="0.3" y2="0.8" width="0.1016" layer="51" curve="170.055574"/>
+<wire x1="-0.275" y1="-0.825" x2="0.275" y2="-0.825" width="0.0508" layer="51" curve="-180"/>
+<wire x1="-0.4" y1="0.375" x2="-0.4" y2="-0.35" width="0.1016" layer="51"/>
+<wire x1="0.4" y1="0.35" x2="0.4" y2="-0.35" width="0.1016" layer="51"/>
+<circle x="-0.35" y="0.625" radius="0.075" width="0.0508" layer="51"/>
+<smd name="C" x="0" y="0.875" dx="0.8" dy="0.5" layer="1" stop="no" cream="no"/>
+<smd name="A" x="0" y="-0.875" dx="0.8" dy="0.5" layer="1" stop="no" cream="no"/>
+<smd name="A@1" x="0" y="-0.5" dx="0.35" dy="0.35" layer="1"/>
+<smd name="C@1" x="0" y="0.5" dx="0.35" dy="0.35" layer="1"/>
+<text x="-0.635" y="-1.27" size="1.27" layer="25" rot="R90">>NAME</text>
+<text x="1.905" y="-1.27" size="1.27" layer="27" rot="R90">>VALUE</text>
+<rectangle x1="-0.45" y1="0.7" x2="-0.25" y2="0.85" layer="51"/>
+<rectangle x1="-0.275" y1="0.55" x2="-0.225" y2="0.6" layer="51"/>
+<rectangle x1="-0.45" y1="0.35" x2="-0.4" y2="0.725" layer="51"/>
+<rectangle x1="0.25" y1="0.55" x2="0.45" y2="0.85" layer="51"/>
+<rectangle x1="-0.45" y1="0.35" x2="0.45" y2="0.575" layer="51"/>
+<rectangle x1="-0.45" y1="-0.85" x2="-0.25" y2="-0.35" layer="51"/>
+<rectangle x1="0.25" y1="-0.85" x2="0.45" y2="-0.35" layer="51"/>
+<rectangle x1="-0.275" y1="-0.575" x2="0.275" y2="-0.35" layer="51"/>
+<rectangle x1="-0.275" y1="-0.65" x2="-0.175" y2="-0.55" layer="51"/>
+<rectangle x1="0.175" y1="-0.65" x2="0.275" y2="-0.55" layer="51"/>
+<rectangle x1="-0.125" y1="0" x2="0.125" y2="0.25" layer="21"/>
+<rectangle x1="-0.175" y1="0.325" x2="0.175" y2="0.7" layer="29"/>
+<rectangle x1="-0.4" y1="0.625" x2="0.4" y2="1.125" layer="29"/>
+<rectangle x1="-0.4" y1="-1.125" x2="0.4" y2="-0.625" layer="29"/>
+<rectangle x1="-0.175" y1="-0.675" x2="0.175" y2="-0.325" layer="29"/>
+</package>
+<package name="SMARTLED-TTW">
+<description><b>SmartLED TTW</b><p>
+Recommended Solder Pad useable for SmartLEDTM and Chipled - Package 0603<br>
+Package able to withstand TTW-soldering heat<br>
+Package suitable for TTW-soldering<br>
+Source: http://www.osram.convergy.de/ ... LO_LS_LY L89K.pdf</description>
+<wire x1="-0.35" y1="0.6" x2="0.35" y2="0.6" width="0.1016" layer="51" style="shortdash"/>
+<wire x1="0.35" y1="0.6" x2="0.35" y2="-0.6" width="0.1016" layer="21" style="shortdash"/>
+<wire x1="0.35" y1="-0.6" x2="0.15" y2="-0.6" width="0.1016" layer="51" style="shortdash"/>
+<wire x1="0.15" y1="-0.6" x2="-0.35" y2="-0.6" width="0.1016" layer="51" style="shortdash"/>
+<wire x1="-0.35" y1="-0.6" x2="-0.35" y2="0.6" width="0.1016" layer="21" style="shortdash"/>
+<wire x1="0.35" y1="-0.4" x2="0.15" y2="-0.6" width="0.1016" layer="51" style="shortdash"/>
+<smd name="C" x="0" y="0.875" dx="0.8" dy="0.5" layer="1" stop="no" cream="no"/>
+<smd name="A" x="0" y="-0.875" dx="0.8" dy="0.5" layer="1" stop="no" cream="no"/>
+<smd name="A@1" x="0" y="-0.5" dx="0.35" dy="0.35" layer="1" stop="no" cream="no"/>
+<smd name="C@1" x="0" y="0.5" dx="0.35" dy="0.35" layer="1" stop="no" cream="no"/>
+<text x="-0.635" y="-1.27" size="1.27" layer="25" rot="R90">>NAME</text>
+<text x="1.905" y="-1.27" size="1.27" layer="27" rot="R90">>VALUE</text>
+<rectangle x1="-0.175" y1="0.325" x2="0.175" y2="0.7" layer="29"/>
+<rectangle x1="-0.15" y1="-0.35" x2="0.15" y2="-0.05" layer="21"/>
+<rectangle x1="-0.15" y1="0.6" x2="0.15" y2="0.85" layer="51"/>
+<rectangle x1="-0.15" y1="-0.85" x2="0.15" y2="-0.6" layer="51"/>
+<rectangle x1="-0.225" y1="0.3" x2="0.225" y2="0.975" layer="31"/>
+<rectangle x1="-0.175" y1="-0.7" x2="0.175" y2="-0.325" layer="29" rot="R180"/>
+<rectangle x1="-0.225" y1="-0.975" x2="0.225" y2="-0.3" layer="31" rot="R180"/>
+</package>
+<package name="LUMILED+">
+<description><b>Lumileds Lighting. LUXEON®</b> with cool pad<p>
+Source: K2.pdf</description>
+<wire x1="-3.575" y1="2.3375" x2="-2.3375" y2="3.575" width="0.2032" layer="21"/>
+<wire x1="-2.3375" y1="3.575" x2="2.3375" y2="3.575" width="0.2032" layer="21"/>
+<wire x1="3.575" y1="2.3375" x2="3.575" y2="-3.575" width="0.2032" layer="21"/>
+<wire x1="3.575" y1="-3.575" x2="-2.3375" y2="-3.575" width="0.2032" layer="21"/>
+<wire x1="-2.3375" y1="-3.575" x2="-2.5" y2="-3.4125" width="0.2032" layer="21"/>
+<wire x1="-2.5" y1="-3.4125" x2="-3.4125" y2="-2.5" width="0.2032" layer="21" curve="167.429893"/>
+<wire x1="-3.4125" y1="-2.5" x2="-3.575" y2="-2.3375" width="0.2032" layer="21"/>
+<wire x1="-3.575" y1="-2.3375" x2="-3.575" y2="2.3375" width="0.2032" layer="21"/>
+<wire x1="2.3375" y1="3.575" x2="2.5" y2="3.4125" width="0.2032" layer="21"/>
+<wire x1="2.5" y1="3.4125" x2="3.4125" y2="2.5" width="0.2032" layer="21" curve="167.429893"/>
+<wire x1="3.4125" y1="2.5" x2="3.575" y2="2.3375" width="0.2032" layer="21"/>
+<wire x1="-1.725" y1="2.225" x2="-1.0625" y2="2.5625" width="0.2032" layer="21" curve="-255.44999"/>
+<wire x1="1.725" y1="-2.225" x2="1.0625" y2="-2.5625" width="0.2032" layer="21" curve="-255.44999"/>
+<circle x="0" y="0" radius="2.725" width="0.2032" layer="51"/>
+<smd name="1NC" x="-5.2" y="1.15" dx="2.9" dy="1.7" layer="1"/>
+<smd name="2+" x="-5.2" y="-1.15" dx="2.9" dy="1.7" layer="1"/>
+<smd name="3NC" x="5.2" y="-1.15" dx="2.9" dy="1.7" layer="1" rot="R180"/>
+<smd name="4-" x="5.2" y="1.15" dx="2.9" dy="1.7" layer="1" rot="R180"/>
+<text x="-3.175" y="3.81" size="1.27" layer="25">>NAME</text>
+<text x="-3.175" y="-5.08" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-5.975" y1="0.575" x2="-3.625" y2="1.6" layer="51"/>
+<rectangle x1="-5.975" y1="-1.6" x2="-3.625" y2="-0.575" layer="51"/>
+<rectangle x1="3.625" y1="-1.6" x2="5.975" y2="-0.575" layer="51" rot="R180"/>
+<rectangle x1="3.625" y1="0.575" x2="5.975" y2="1.6" layer="51" rot="R180"/>
+<polygon width="0.4064" layer="1">
+<vertex x="2.3383" y="1.35"/>
+<vertex x="0" y="2.7"/>
+<vertex x="-2.3383" y="1.35"/>
+<vertex x="-2.3383" y="-1.35"/>
+<vertex x="0" y="-2.7"/>
+<vertex x="2.3383" y="-1.35"/>
+</polygon>
+<polygon width="0.4064" layer="29">
+<vertex x="2.3383" y="1.35"/>
+<vertex x="0" y="2.7"/>
+<vertex x="-2.3383" y="1.35"/>
+<vertex x="-2.3383" y="-1.35"/>
+<vertex x="0" y="-2.7"/>
+<vertex x="2.3383" y="-1.35"/>
+</polygon>
+<polygon width="0.4064" layer="31">
+<vertex x="2.3383" y="1.35"/>
+<vertex x="0" y="2.7"/>
+<vertex x="-2.3383" y="1.35"/>
+<vertex x="-2.3383" y="-1.35"/>
+<vertex x="0" y="-2.7"/>
+<vertex x="2.3383" y="-1.35"/>
+</polygon>
+</package>
+<package name="LUMILED">
+<description><b>Lumileds Lighting. LUXEON®</b> without cool pad<p>
+Source: K2.pdf</description>
+<wire x1="-3.575" y1="2.3375" x2="-2.3375" y2="3.575" width="0.2032" layer="21"/>
+<wire x1="-2.3375" y1="3.575" x2="2.3375" y2="3.575" width="0.2032" layer="21"/>
+<wire x1="3.575" y1="2.3375" x2="3.575" y2="-3.575" width="0.2032" layer="21"/>
+<wire x1="3.575" y1="-3.575" x2="-2.3375" y2="-3.575" width="0.2032" layer="21"/>
+<wire x1="-2.3375" y1="-3.575" x2="-2.5" y2="-3.4125" width="0.2032" layer="21"/>
+<wire x1="-2.5" y1="-3.4125" x2="-3.4125" y2="-2.5" width="0.2032" layer="21" curve="167.429893"/>
+<wire x1="-3.4125" y1="-2.5" x2="-3.575" y2="-2.3375" width="0.2032" layer="21"/>
+<wire x1="-3.575" y1="-2.3375" x2="-3.575" y2="2.3375" width="0.2032" layer="21"/>
+<wire x1="2.3375" y1="3.575" x2="2.5" y2="3.4125" width="0.2032" layer="21"/>
+<wire x1="2.5" y1="3.4125" x2="3.4125" y2="2.5" width="0.2032" layer="21" curve="167.429893"/>
+<wire x1="3.4125" y1="2.5" x2="3.575" y2="2.3375" width="0.2032" layer="21"/>
+<wire x1="-1.725" y1="2.225" x2="-1.0625" y2="2.5625" width="0.2032" layer="21" curve="-255.44999"/>
+<wire x1="1.725" y1="-2.225" x2="1.0625" y2="-2.5625" width="0.2032" layer="21" curve="-255.44999"/>
+<circle x="0" y="0" radius="2.725" width="0.2032" layer="51"/>
+<smd name="1NC" x="-5.2" y="1.15" dx="2.9" dy="1.7" layer="1"/>
+<smd name="2+" x="-5.2" y="-1.15" dx="2.9" dy="1.7" layer="1"/>
+<smd name="3NC" x="5.2" y="-1.15" dx="2.9" dy="1.7" layer="1" rot="R180"/>
+<smd name="4-" x="5.2" y="1.15" dx="2.9" dy="1.7" layer="1" rot="R180"/>
+<text x="-3.175" y="3.81" size="1.27" layer="25">>NAME</text>
+<text x="-3.175" y="-5.08" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-5.975" y1="0.575" x2="-3.625" y2="1.6" layer="51"/>
+<rectangle x1="-5.975" y1="-1.6" x2="-3.625" y2="-0.575" layer="51"/>
+<rectangle x1="3.625" y1="-1.6" x2="5.975" y2="-0.575" layer="51" rot="R180"/>
+<rectangle x1="3.625" y1="0.575" x2="5.975" y2="1.6" layer="51" rot="R180"/>
+<polygon width="0.4064" layer="29">
+<vertex x="2.3383" y="1.35"/>
+<vertex x="0" y="2.7"/>
+<vertex x="-2.3383" y="1.35"/>
+<vertex x="-2.3383" y="-1.35"/>
+<vertex x="0" y="-2.7"/>
+<vertex x="2.3383" y="-1.35"/>
+</polygon>
+<polygon width="0.4064" layer="31">
+<vertex x="2.3383" y="1.35"/>
+<vertex x="0" y="2.7"/>
+<vertex x="-2.3383" y="1.35"/>
+<vertex x="-2.3383" y="-1.35"/>
+<vertex x="0" y="-2.7"/>
+<vertex x="2.3383" y="-1.35"/>
+</polygon>
+</package>
+<package name="LED10MM">
+<description><B>LED</B><p>
+10 mm, round</description>
+<wire x1="5.08" y1="-2.54" x2="5.08" y2="2.54" width="0.254" layer="21" curve="-306.869898"/>
+<wire x1="4.445" y1="0" x2="0" y2="-4.445" width="0.127" layer="21" curve="-90"/>
+<wire x1="3.81" y1="0" x2="0" y2="-3.81" width="0.127" layer="21" curve="-90"/>
+<wire x1="3.175" y1="0" x2="0" y2="-3.175" width="0.127" layer="21" curve="-90"/>
+<wire x1="2.54" y1="0" x2="0" y2="-2.54" width="0.127" layer="21" curve="-90"/>
+<wire x1="-4.445" y1="0" x2="0" y2="4.445" width="0.127" layer="21" curve="-90"/>
+<wire x1="-3.81" y1="0" x2="0" y2="3.81" width="0.127" layer="21" curve="-90"/>
+<wire x1="-3.175" y1="0" x2="0" y2="3.175" width="0.127" layer="21" curve="-90"/>
+<wire x1="-2.54" y1="0" x2="0" y2="2.54" width="0.127" layer="21" curve="-90"/>
+<wire x1="5.08" y1="2.54" x2="5.08" y2="-2.54" width="0.254" layer="21"/>
+<circle x="0" y="0" radius="5.08" width="0.127" layer="21"/>
+<pad name="K" x="1.27" y="0" drill="0.8128" diameter="1.6764" shape="square"/>
+<pad name="A" x="-1.27" y="0" drill="0.8128" diameter="1.6764" shape="octagon"/>
+<text x="6.35" y="1.27" size="1.27" layer="25">>NAME</text>
+<text x="6.35" y="-1.27" size="1.27" layer="27">>VALUE</text>
+</package>
+<package name="KA-3528ASYC">
+<description><b>SURFACE MOUNT LED LAMP</b> 3.5x2.8mm<p>
+Source: http://www.kingbright.com/manager/upload/pdf/KA-3528ASYC(Ver1189474662.1)</description>
+<wire x1="-1.55" y1="1.35" x2="1.55" y2="1.35" width="0.1016" layer="21"/>
+<wire x1="1.55" y1="1.35" x2="1.55" y2="-1.35" width="0.1016" layer="51"/>
+<wire x1="1.55" y1="-1.35" x2="-1.55" y2="-1.35" width="0.1016" layer="21"/>
+<wire x1="-1.55" y1="-1.35" x2="-1.55" y2="1.35" width="0.1016" layer="51"/>
+<wire x1="-0.65" y1="0.95" x2="0.65" y2="0.95" width="0.1016" layer="21" curve="-68.40813"/>
+<wire x1="0.65" y1="-0.95" x2="-0.65" y2="-0.95" width="0.1016" layer="21" curve="-68.40813"/>
+<circle x="0" y="0" radius="1.15" width="0.1016" layer="51"/>
+<smd name="A" x="-1.55" y="0" dx="1.5" dy="2.2" layer="1"/>
+<smd name="C" x="1.55" y="0" dx="1.5" dy="2.2" layer="1"/>
+<text x="-1.905" y="1.905" size="1.27" layer="25">>NAME</text>
+<text x="-1.905" y="-3.175" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="-1.75" y1="0.6" x2="-1.6" y2="1.1" layer="51"/>
+<rectangle x1="-1.75" y1="-1.1" x2="-1.6" y2="-0.6" layer="51"/>
+<rectangle x1="1.6" y1="-1.1" x2="1.75" y2="-0.6" layer="51" rot="R180"/>
+<rectangle x1="1.6" y1="0.6" x2="1.75" y2="1.1" layer="51" rot="R180"/>
+<polygon width="0.1016" layer="51">
+<vertex x="1.55" y="-1.35"/>
+<vertex x="1.55" y="-0.625"/>
+<vertex x="0.825" y="-1.35"/>
+</polygon>
+<polygon width="0.1016" layer="21">
+<vertex x="1.55" y="-1.35"/>
+<vertex x="1.55" y="-1.175"/>
+<vertex x="1" y="-1.175"/>
+<vertex x="0.825" y="-1.35"/>
+</polygon>
+</package>
+</packages>
+<symbols>
+<symbol name="LED">
+<wire x1="1.27" y1="0" x2="0" y2="-2.54" width="0.254" layer="94"/>
+<wire x1="0" y1="-2.54" x2="-1.27" y2="0" width="0.254" layer="94"/>
+<wire x1="1.27" y1="-2.54" x2="0" y2="-2.54" width="0.254" layer="94"/>
+<wire x1="0" y1="-2.54" x2="-1.27" y2="-2.54" width="0.254" layer="94"/>
+<wire x1="1.27" y1="0" x2="0" y2="0" width="0.254" layer="94"/>
+<wire x1="0" y1="0" x2="-1.27" y2="0" width="0.254" layer="94"/>
+<wire x1="0" y1="0" x2="0" y2="-2.54" width="0.1524" layer="94"/>
+<wire x1="-2.032" y1="-0.762" x2="-3.429" y2="-2.159" width="0.1524" layer="94"/>
+<wire x1="-1.905" y1="-1.905" x2="-3.302" y2="-3.302" width="0.1524" layer="94"/>
+<text x="3.556" y="-4.572" size="1.778" layer="95" rot="R90">>NAME</text>
+<text x="5.715" y="-4.572" size="1.778" layer="96" rot="R90">>VALUE</text>
+<pin name="C" x="0" y="-5.08" visible="off" length="short" direction="pas" rot="R90"/>
+<pin name="A" x="0" y="2.54" visible="off" length="short" direction="pas" rot="R270"/>
+<polygon width="0.1524" layer="94">
+<vertex x="-3.429" y="-2.159"/>
+<vertex x="-3.048" y="-1.27"/>
+<vertex x="-2.54" y="-1.778"/>
+</polygon>
+<polygon width="0.1524" layer="94">
+<vertex x="-3.302" y="-3.302"/>
+<vertex x="-2.921" y="-2.413"/>
+<vertex x="-2.413" y="-2.921"/>
+</polygon>
+</symbol>
+</symbols>
+<devicesets>
+<deviceset name="LED" prefix="LED" uservalue="yes">
+<description><b>LED</b><p>
+<u>OSRAM</u>:<br>
+
+- <u>CHIPLED</u><br>
+LG R971, LG N971, LY N971, LG Q971, LY Q971, LO R971, LY R971
+LH N974, LH R974<br>
+LS Q976, LO Q976, LY Q976<br>
+LO Q996<br>
+
+- <u>Hyper CHIPLED</u><br>
+LW Q18S<br>
+LB Q993, LB Q99A, LB R99A<br>
+
+- <u>SideLED</u><br>
+LS A670, LO A670, LY A670, LG A670, LP A670<br>
+LB A673, LV A673, LT A673, LW A673<br>
+LH A674<br>
+LY A675<br>
+LS A676, LA A676, LO A676, LY A676, LW A676<br>
+LS A679, LY A679, LG A679<br>
+
+- <u>Hyper Micro SIDELED®</u><br>
+LS Y876, LA Y876, LO Y876, LY Y876<br>
+LT Y87S<br>
+
+- <u>SmartLED</u><br>
+LW L88C, LW L88S<br>
+LB L89C, LB L89S, LG L890<br>
+LS L89K, LO L89K, LY L89K<br>
+LS L896, LA L896, LO L896, LY L896<br>
+
+- <u>TOPLED</u><br>
+LS T670, LO T670, LY T670, LG T670, LP T670<br>
+LSG T670, LSP T670, LSY T670, LOP T670, LYG T670<br>
+LG T671, LOG T671, LSG T671<br>
+LB T673, LV T673, LT T673, LW T673<br>
+LH T674<br>
+LS T676, LA T676, LO T676, LY T676, LB T676, LH T676, LSB T676, LW T676<br>
+LB T67C, LV T67C, LT T67C, LS T67K, LO T67K, LY T67K, LW E67C<br>
+LS E67B, LA E67B, LO E67B, LY E67B, LB E67C, LV E67C, LT E67C<br>
+LW T67C<br>
+LS T679, LY T679, LG T679<br>
+LS T770, LO T770, LY T770, LG T770, LP T770<br>
+LB T773, LV T773, LT T773, LW T773<br>
+LH T774<br>
+LS E675, LA E675, LY E675, LS T675<br>
+LS T776, LA T776, LO T776, LY T776, LB T776<br>
+LHGB T686<br>
+LT T68C, LB T68C<br>
+
+- <u>Hyper Mini TOPLED®</u><br>
+LB M676<br>
+
+- <u>Mini TOPLED Santana®</u><br>
+LG M470<br>
+LS M47K, LO M47K, LY M47K
+<p>
+Source: http://www.osram.convergy.de<p>
+
+<u>LUXEON:</u><br>
+- <u>LUMILED®</u><br>
+LXK2-PW12-R00, LXK2-PW12-S00, LXK2-PW14-U00, LXK2-PW14-V00<br>
+LXK2-PM12-R00, LXK2-PM12-S00, LXK2-PM14-U00<br>
+LXK2-PE12-Q00, LXK2-PE12-R00, LXK2-PE12-S00, LXK2-PE14-T00, LXK2-PE14-U00<br>
+LXK2-PB12-K00, LXK2-PB12-L00, LXK2-PB12-M00, LXK2-PB14-N00, LXK2-PB14-P00, LXK2-PB14-Q00<br>
+LXK2-PR12-L00, LXK2-PR12-M00, LXK2-PR14-Q00, LXK2-PR14-R00<br>
+LXK2-PD12-Q00, LXK2-PD12-R00, LXK2-PD12-S00<br>
+LXK2-PH12-R00, LXK2-PH12-S00<br>
+LXK2-PL12-P00, LXK2-PL12-Q00, LXK2-PL12-R00
+<p>
+Source: www.luxeon.com<p>
+
+<u>KINGBRIGHT:</U><p>
+KA-3528ASYC<br>
+Source: www.kingbright.com</description>
+<gates>
+<gate name="G$1" symbol="LED" x="0" y="0"/>
+</gates>
+<devices>
+<device name="SMT1206" package="1206">
+<connects>
+<connect gate="G$1" pin="A" pad="A"/>
+<connect gate="G$1" pin="C" pad="C"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="LD260" package="LD260">
+<connects>
+<connect gate="G$1" pin="A" pad="A"/>
+<connect gate="G$1" pin="C" pad="K"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="SQR2X5" package="LED2X5">
+<connects>
+<connect gate="G$1" pin="A" pad="A"/>
+<connect gate="G$1" pin="C" pad="K"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="3MM" package="LED3MM">
+<connects>
+<connect gate="G$1" pin="A" pad="A"/>
+<connect gate="G$1" pin="C" pad="K"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="5MM" package="LED5MM">
+<connects>
+<connect gate="G$1" pin="A" pad="A"/>
+<connect gate="G$1" pin="C" pad="K"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="LSU260" package="LSU260">
+<connects>
+<connect gate="G$1" pin="A" pad="A"/>
+<connect gate="G$1" pin="C" pad="K"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="LZR181" package="LZR181">
+<connects>
+<connect gate="G$1" pin="A" pad="A"/>
+<connect gate="G$1" pin="C" pad="K"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="B152" package="Q62902-B152">
+<connects>
+<connect gate="G$1" pin="A" pad="A"/>
+<connect gate="G$1" pin="C" pad="K"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="B153" package="Q62902-B153">
+<connects>
+<connect gate="G$1" pin="A" pad="A"/>
+<connect gate="G$1" pin="C" pad="K"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="B155" package="Q62902-B155">
+<connects>
+<connect gate="G$1" pin="A" pad="A"/>
+<connect gate="G$1" pin="C" pad="K"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="B156" package="Q62902-B156">
+<connects>
+<connect gate="G$1" pin="A" pad="A"/>
+<connect gate="G$1" pin="C" pad="K"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="SFH480" package="SFH480">
+<connects>
+<connect gate="G$1" pin="A" pad="A"/>
+<connect gate="G$1" pin="C" pad="K"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="SFH482" package="SFH482">
+<connects>
+<connect gate="G$1" pin="A" pad="A"/>
+<connect gate="G$1" pin="C" pad="K"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="SQR5.7X3.2" package="U57X32">
+<connects>
+<connect gate="G$1" pin="A" pad="A"/>
+<connect gate="G$1" pin="C" pad="K"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="IRL80A" package="IRL80A">
+<connects>
+<connect gate="G$1" pin="A" pad="A"/>
+<connect gate="G$1" pin="C" pad="K"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="P-LCC-2" package="P-LCC-2">
+<connects>
+<connect gate="G$1" pin="A" pad="A"/>
+<connect gate="G$1" pin="C" pad="C"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="MINI-TOP" package="OSRAM-MINI-TOP-LED">
+<connects>
+<connect gate="G$1" pin="A" pad="A"/>
+<connect gate="G$1" pin="C" pad="C"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="SIDELED" package="OSRAM-SIDELED">
+<connects>
+<connect gate="G$1" pin="A" pad="A"/>
+<connect gate="G$1" pin="C" pad="C"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="SMART-LED" package="SMART-LED">
+<connects>
+<connect gate="G$1" pin="A" pad="A"/>
+<connect gate="G$1" pin="C" pad="B"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="P-LCC-2-BACK" package="P-LCC-2-TOPLED-RG">
+<connects>
+<connect gate="G$1" pin="A" pad="A"/>
+<connect gate="G$1" pin="C" pad="C"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="MICRO-SIDELED" package="MICRO-SIDELED">
+<connects>
+<connect gate="G$1" pin="A" pad="A"/>
+<connect gate="G$1" pin="C" pad="C"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="P-LCC-4" package="P-LCC-4">
+<connects>
+<connect gate="G$1" pin="A" pad="A"/>
+<connect gate="G$1" pin="C" pad="C@4"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="CHIP-LED0603" package="CHIP-LED0603">
+<connects>
+<connect gate="G$1" pin="A" pad="A"/>
+<connect gate="G$1" pin="C" pad="C"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="CHIP-LED0805" package="CHIP-LED0805">
+<connects>
+<connect gate="G$1" pin="A" pad="A"/>
+<connect gate="G$1" pin="C" pad="C"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="TOPLED-SANTANA" package="MINI-TOPLED-SANTANA">
+<connects>
+<connect gate="G$1" pin="A" pad="A"/>
+<connect gate="G$1" pin="C" pad="C"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="CHIPLED_0805" package="CHIPLED_0805">
+<connects>
+<connect gate="G$1" pin="A" pad="A"/>
+<connect gate="G$1" pin="C" pad="C"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="CHIPLED_1206" package="CHIPLED_1206">
+<connects>
+<connect gate="G$1" pin="A" pad="A"/>
+<connect gate="G$1" pin="C" pad="C"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="CHIPLED_0603" package="CHIPLED_0603">
+<connects>
+<connect gate="G$1" pin="A" pad="A"/>
+<connect gate="G$1" pin="C" pad="C"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="CHIPLED-0603-TTW" package="CHIPLED-0603-TTW">
+<connects>
+<connect gate="G$1" pin="A" pad="A@1"/>
+<connect gate="G$1" pin="C" pad="C@1"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="" package="SMARTLED-TTW">
+<connects>
+<connect gate="G$1" pin="A" pad="A@1"/>
+<connect gate="G$1" pin="C" pad="C@1"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="-LUMILED+" package="LUMILED+">
+<connects>
+<connect gate="G$1" pin="A" pad="2+"/>
+<connect gate="G$1" pin="C" pad="4-"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="-LUMILED" package="LUMILED">
+<connects>
+<connect gate="G$1" pin="A" pad="2+"/>
+<connect gate="G$1" pin="C" pad="4-"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="10MM" package="LED10MM">
+<connects>
+<connect gate="G$1" pin="A" pad="A"/>
+<connect gate="G$1" pin="C" pad="K"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="KA-3528ASYC" package="KA-3528ASYC">
+<connects>
+<connect gate="G$1" pin="A" pad="A"/>
+<connect gate="G$1" pin="C" pad="C"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+</devicesets>
+</library>
+<library name="SparkFun-Connectors">
+<description><h3>SparkFun Electronics' preferred foot prints</h3>
+In this library you'll find connectors and sockets- basically anything that can be plugged into or onto.<br><br>
+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.
+<br><br>
+<b>Licensing:</b> 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="1X03">
+<wire x1="3.81" y1="0.635" x2="4.445" y2="1.27" width="0.2032" layer="21"/>
+<wire x1="4.445" y1="1.27" x2="5.715" y2="1.27" width="0.2032" layer="21"/>
+<wire x1="5.715" y1="1.27" x2="6.35" y2="0.635" width="0.2032" layer="21"/>
+<wire x1="6.35" y1="-0.635" x2="5.715" y2="-1.27" width="0.2032" layer="21"/>
+<wire x1="5.715" y1="-1.27" x2="4.445" y2="-1.27" width="0.2032" layer="21"/>
+<wire x1="4.445" y1="-1.27" x2="3.81" y2="-0.635" width="0.2032" layer="21"/>
+<wire x1="-0.635" y1="1.27" x2="0.635" y2="1.27" width="0.2032" layer="21"/>
+<wire x1="0.635" y1="1.27" x2="1.27" y2="0.635" width="0.2032" layer="21"/>
+<wire x1="1.27" y1="-0.635" x2="0.635" y2="-1.27" width="0.2032" layer="21"/>
+<wire x1="1.27" y1="0.635" x2="1.905" y2="1.27" width="0.2032" layer="21"/>
+<wire x1="1.905" y1="1.27" x2="3.175" y2="1.27" width="0.2032" layer="21"/>
+<wire x1="3.175" y1="1.27" x2="3.81" y2="0.635" width="0.2032" layer="21"/>
+<wire x1="3.81" y1="-0.635" x2="3.175" y2="-1.27" width="0.2032" layer="21"/>
+<wire x1="3.175" y1="-1.27" x2="1.905" y2="-1.27" width="0.2032" layer="21"/>
+<wire x1="1.905" y1="-1.27" x2="1.27" y2="-0.635" width="0.2032" layer="21"/>
+<wire x1="-1.27" y1="0.635" x2="-1.27" y2="-0.635" width="0.2032" layer="21"/>
+<wire x1="-0.635" y1="1.27" x2="-1.27" y2="0.635" width="0.2032" layer="21"/>
+<wire x1="-1.27" y1="-0.635" x2="-0.635" y2="-1.27" width="0.2032" layer="21"/>
+<wire x1="0.635" y1="-1.27" x2="-0.635" y2="-1.27" width="0.2032" layer="21"/>
+<wire x1="6.35" y1="0.635" x2="6.35" y2="-0.635" width="0.2032" layer="21"/>
+<pad name="1" x="0" y="0" drill="1.016" diameter="1.8796" rot="R90"/>
+<pad name="2" x="2.54" y="0" drill="1.016" diameter="1.8796" rot="R90"/>
+<pad name="3" x="5.08" y="0" drill="1.016" diameter="1.8796" rot="R90"/>
+<text x="-1.3462" y="1.8288" 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="4.826" y1="-0.254" x2="5.334" y2="0.254" layer="51"/>
+<rectangle x1="2.286" y1="-0.254" x2="2.794" y2="0.254" layer="51"/>
+<rectangle x1="-0.254" y1="-0.254" x2="0.254" y2="0.254" layer="51"/>
+</package>
+<package name="MOLEX-1X3">
+<wire x1="-1.27" y1="3.048" x2="-1.27" y2="-2.54" width="0.127" layer="21"/>
+<wire x1="6.35" y1="3.048" x2="6.35" y2="-2.54" width="0.127" layer="21"/>
+<wire x1="6.35" y1="3.048" x2="-1.27" y2="3.048" width="0.127" layer="21"/>
+<wire x1="6.35" y1="-2.54" x2="5.08" y2="-2.54" width="0.127" layer="21"/>
+<wire x1="5.08" y1="-2.54" x2="0" y2="-2.54" width="0.127" layer="21"/>
+<wire x1="0" y1="-2.54" x2="-1.27" y2="-2.54" width="0.127" layer="21"/>
+<wire x1="0" y1="-2.54" x2="0" y2="-1.27" width="0.127" layer="21"/>
+<wire x1="0" y1="-1.27" x2="5.08" y2="-1.27" width="0.127" layer="21"/>
+<wire x1="5.08" y1="-1.27" x2="5.08" y2="-2.54" width="0.127" layer="21"/>
+<pad name="1" x="0" y="0" drill="1.016" diameter="1.8796" shape="square"/>
+<pad name="2" x="2.54" y="0" drill="1.016" diameter="1.8796"/>
+<pad name="3" x="5.08" y="0" drill="1.016" diameter="1.8796"/>
+</package>
+<package name="SCREWTERMINAL-3.5MM-3">
+<wire x1="-2.3" y1="3.4" x2="9.3" y2="3.4" width="0.2032" layer="21"/>
+<wire x1="9.3" y1="3.4" x2="9.3" y2="-2.8" width="0.2032" layer="21"/>
+<wire x1="9.3" y1="-2.8" x2="9.3" y2="-3.6" width="0.2032" layer="21"/>
+<wire x1="9.3" y1="-3.6" x2="-2.3" y2="-3.6" width="0.2032" layer="21"/>
+<wire x1="-2.3" y1="-3.6" x2="-2.3" y2="-2.8" width="0.2032" layer="21"/>
+<wire x1="-2.3" y1="-2.8" x2="-2.3" y2="3.4" width="0.2032" layer="21"/>
+<wire x1="9.3" y1="-2.8" x2="-2.3" y2="-2.8" width="0.2032" layer="21"/>
+<wire x1="-2.3" y1="-1.35" x2="-2.7" y2="-1.35" width="0.2032" layer="51"/>
+<wire x1="-2.7" y1="-1.35" x2="-2.7" y2="-2.35" width="0.2032" layer="51"/>
+<wire x1="-2.7" y1="-2.35" x2="-2.3" y2="-2.35" width="0.2032" layer="51"/>
+<wire x1="9.3" y1="3.15" x2="9.7" y2="3.15" width="0.2032" layer="51"/>
+<wire x1="9.7" y1="3.15" x2="9.7" y2="2.15" width="0.2032" layer="51"/>
+<wire x1="9.7" y1="2.15" x2="9.3" y2="2.15" width="0.2032" layer="51"/>
+<pad name="1" x="0" y="0" drill="1.2" diameter="2.413" shape="square"/>
+<pad name="2" x="3.5" y="0" drill="1.2" diameter="2.413"/>
+<pad name="3" x="7" y="0" drill="1.2" diameter="2.413"/>
+<text x="-1.27" y="2.54" size="0.4064" layer="25">>NAME</text>
+<text x="-1.27" y="1.27" size="0.4064" layer="27">>VALUE</text>
+</package>
+<package name="1X03_LOCK">
+<wire x1="3.81" y1="0.635" x2="4.445" y2="1.27" width="0.2032" layer="21"/>
+<wire x1="4.445" y1="1.27" x2="5.715" y2="1.27" width="0.2032" layer="21"/>
+<wire x1="5.715" y1="1.27" x2="6.35" y2="0.635" width="0.2032" layer="21"/>
+<wire x1="6.35" y1="-0.635" x2="5.715" y2="-1.27" width="0.2032" layer="21"/>
+<wire x1="5.715" y1="-1.27" x2="4.445" y2="-1.27" width="0.2032" layer="21"/>
+<wire x1="4.445" y1="-1.27" x2="3.81" y2="-0.635" width="0.2032" layer="21"/>
+<wire x1="-0.635" y1="1.27" x2="0.635" y2="1.27" width="0.2032" layer="21"/>
+<wire x1="0.635" y1="1.27" x2="1.27" y2="0.635" width="0.2032" layer="21"/>
+<wire x1="1.27" y1="-0.635" x2="0.635" y2="-1.27" width="0.2032" layer="21"/>
+<wire x1="1.27" y1="0.635" x2="1.905" y2="1.27" width="0.2032" layer="21"/>
+<wire x1="1.905" y1="1.27" x2="3.175" y2="1.27" width="0.2032" layer="21"/>
+<wire x1="3.175" y1="1.27" x2="3.81" y2="0.635" width="0.2032" layer="21"/>
+<wire x1="3.81" y1="-0.635" x2="3.175" y2="-1.27" width="0.2032" layer="21"/>
+<wire x1="3.175" y1="-1.27" x2="1.905" y2="-1.27" width="0.2032" layer="21"/>
+<wire x1="1.905" y1="-1.27" x2="1.27" y2="-0.635" width="0.2032" layer="21"/>
+<wire x1="-1.27" y1="0.635" x2="-1.27" y2="-0.635" width="0.2032" layer="21"/>
+<wire x1="-0.635" y1="1.27" x2="-1.27" y2="0.635" width="0.2032" layer="21"/>
+<wire x1="-1.27" y1="-0.635" x2="-0.635" y2="-1.27" width="0.2032" layer="21"/>
+<wire x1="0.635" y1="-1.27" x2="-0.635" y2="-1.27" width="0.2032" layer="21"/>
+<wire x1="6.35" y1="0.635" x2="6.35" y2="-0.635" width="0.2032" layer="21"/>
+<pad name="1" x="0" y="0.127" drill="1.016" diameter="1.8796" rot="R90"/>
+<pad name="2" x="2.54" y="-0.127" drill="1.016" diameter="1.8796" rot="R90"/>
+<pad name="3" x="5.08" y="0.127" drill="1.016" diameter="1.8796" rot="R90"/>
+<text x="-1.3462" y="1.8288" 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="4.826" y1="-0.254" x2="5.334" y2="0.254" layer="51"/>
+<rectangle x1="2.286" y1="-0.254" x2="2.794" y2="0.254" layer="51"/>
+<rectangle x1="-0.254" y1="-0.254" x2="0.254" y2="0.254" layer="51"/>
+</package>
+<package name="1X03_LOCK_LONGPADS">
+<description>This footprint was designed to help hold the alignment of a through-hole component (i.e. 6-pin header) while soldering it into place.
+You may notice that each hole has been shifted either up or down by 0.005 of an inch from it's more standard position (which is a perfectly straight line).
+This slight alteration caused the pins (the squares in the middle) to touch the edges of the holes. Because they are alternating, it causes a "brace"
+to hold the component in place. 0.005 has proven to be the perfect amount of "off-center" position when using our standard breakaway headers.
+Although looks a little odd when you look at the bare footprint, once you have a header in there, the alteration is very hard to notice. Also,
+if you push a header all the way into place, it is covered up entirely on the bottom side. This idea of altering the position of holes to aid alignment
+will be further integrated into the Sparkfun Library for other footprints. It can help hold any component with 3 or more connection pins.</description>
+<wire x1="1.524" y1="-0.127" x2="1.016" y2="-0.127" width="0.2032" layer="21"/>
+<wire x1="4.064" y1="-0.127" x2="3.556" y2="-0.127" width="0.2032" layer="21"/>
+<wire x1="-1.27" y1="-0.127" x2="-1.016" y2="-0.127" width="0.2032" layer="21"/>
+<wire x1="-1.27" y1="-0.127" x2="-1.27" y2="0.8636" width="0.2032" layer="21"/>
+<wire x1="-1.27" y1="0.8636" x2="-0.9906" y2="1.143" width="0.2032" layer="21"/>
+<wire x1="-1.27" y1="-0.127" x2="-1.27" y2="-1.1176" width="0.2032" layer="21"/>
+<wire x1="-1.27" y1="-1.1176" x2="-0.9906" y2="-1.397" width="0.2032" layer="21"/>
+<wire x1="6.35" y1="-0.127" x2="6.096" y2="-0.127" width="0.2032" layer="21"/>
+<wire x1="6.35" y1="-0.127" x2="6.35" y2="-1.1176" width="0.2032" layer="21"/>
+<wire x1="6.35" y1="-1.1176" x2="6.0706" y2="-1.397" width="0.2032" layer="21"/>
+<wire x1="6.35" y1="-0.127" x2="6.35" y2="0.8636" width="0.2032" layer="21"/>
+<wire x1="6.35" y1="0.8636" x2="6.0706" y2="1.143" width="0.2032" layer="21"/>
+<pad name="1" x="0" y="0" drill="1.016" shape="long" rot="R90"/>
+<pad name="2" x="2.54" y="-0.254" drill="1.016" shape="long" rot="R90"/>
+<pad name="3" x="5.08" y="0" drill="1.016" shape="long" rot="R90"/>
+<text x="-1.27" y="1.778" size="1.27" layer="25" font="vector">>NAME</text>
+<text x="-1.27" y="-3.302" size="1.27" layer="27" font="vector">>VALUE</text>
+<rectangle x1="-0.2921" y1="-0.4191" x2="0.2921" y2="0.1651" layer="51"/>
+<rectangle x1="2.2479" y1="-0.4191" x2="2.8321" y2="0.1651" layer="51"/>
+<rectangle x1="4.7879" y1="-0.4191" x2="5.3721" y2="0.1651" layer="51"/>
+</package>
+<package name="MOLEX-1X3_LOCK">
+<wire x1="-1.27" y1="3.048" x2="-1.27" y2="-2.54" width="0.127" layer="21"/>
+<wire x1="6.35" y1="3.048" x2="6.35" y2="-2.54" width="0.127" layer="21"/>
+<wire x1="6.35" y1="3.048" x2="-1.27" y2="3.048" width="0.127" layer="21"/>
+<wire x1="6.35" y1="-2.54" x2="5.08" y2="-2.54" width="0.127" layer="21"/>
+<wire x1="5.08" y1="-2.54" x2="0" y2="-2.54" width="0.127" layer="21"/>
+<wire x1="0" y1="-2.54" x2="-1.27" y2="-2.54" width="0.127" layer="21"/>
+<wire x1="0" y1="-2.54" x2="0" y2="-1.27" width="0.127" layer="21"/>
+<wire x1="0" y1="-1.27" x2="5.08" y2="-1.27" width="0.127" layer="21"/>
+<wire x1="5.08" y1="-1.27" x2="5.08" y2="-2.54" width="0.127" layer="21"/>
+<pad name="1" x="0" y="0.127" drill="1.016" diameter="1.8796" shape="square"/>
+<pad name="2" x="2.54" y="-0.127" drill="1.016" diameter="1.8796"/>
+<pad name="3" x="5.08" y="0.127" drill="1.016" diameter="1.8796"/>
+<rectangle x1="-0.2921" y1="-0.2921" x2="0.2921" y2="0.2921" layer="51"/>
+<rectangle x1="2.2479" y1="-0.2921" x2="2.8321" y2="0.2921" layer="51"/>
+<rectangle x1="4.7879" y1="-0.2921" x2="5.3721" y2="0.2921" layer="51"/>
+</package>
+<package name="SCREWTERMINAL-3.5MM-3_LOCK.007S">
+<wire x1="-2.3" y1="3.4" x2="9.3" y2="3.4" width="0.2032" layer="21"/>
+<wire x1="9.3" y1="3.4" x2="9.3" y2="-2.8" width="0.2032" layer="21"/>
+<wire x1="9.3" y1="-2.8" x2="9.3" y2="-3.6" width="0.2032" layer="21"/>
+<wire x1="9.3" y1="-3.6" x2="-2.3" y2="-3.6" width="0.2032" layer="21"/>
+<wire x1="-2.3" y1="-3.6" x2="-2.3" y2="-2.8" width="0.2032" layer="21"/>
+<wire x1="-2.3" y1="-2.8" x2="-2.3" y2="3.4" width="0.2032" layer="21"/>
+<wire x1="9.3" y1="-2.8" x2="-2.3" y2="-2.8" width="0.2032" layer="21"/>
+<wire x1="-2.3" y1="-1.35" x2="-2.7" y2="-1.35" width="0.2032" layer="51"/>
+<wire x1="-2.7" y1="-1.35" x2="-2.7" y2="-2.35" width="0.2032" layer="51"/>
+<wire x1="-2.7" y1="-2.35" x2="-2.3" y2="-2.35" width="0.2032" layer="51"/>
+<wire x1="9.3" y1="3.15" x2="9.7" y2="3.15" width="0.2032" layer="51"/>
+<wire x1="9.7" y1="3.15" x2="9.7" y2="2.15" width="0.2032" layer="51"/>
+<wire x1="9.7" y1="2.15" x2="9.3" y2="2.15" width="0.2032" layer="51"/>
+<circle x="0" y="0" radius="0.425" width="0.001" layer="51"/>
+<circle x="3.5" y="0" radius="0.425" width="0.001" layer="51"/>
+<circle x="7" y="0" radius="0.425" width="0.001" layer="51"/>
+<pad name="1" x="-0.1778" y="0" drill="1.2" diameter="2.032" shape="square"/>
+<pad name="2" x="3.5" y="0" drill="1.2" diameter="2.032"/>
+<pad name="3" x="7.1778" y="0" drill="1.2" diameter="2.032"/>
+<text x="-1.27" y="2.54" size="0.4064" layer="25">>NAME</text>
+<text x="-1.27" y="1.27" size="0.4064" layer="27">>VALUE</text>
+</package>
+<package name="1X03_NO_SILK">
+<pad name="1" x="0" y="0" drill="1.016" diameter="1.8796" rot="R90"/>
+<pad name="2" x="2.54" y="0" drill="1.016" diameter="1.8796" rot="R90"/>
+<pad name="3" x="5.08" y="0" drill="1.016" diameter="1.8796" rot="R90"/>
+<text x="-1.3462" y="1.8288" 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="4.826" y1="-0.254" x2="5.334" y2="0.254" layer="51"/>
+<rectangle x1="2.286" y1="-0.254" x2="2.794" y2="0.254" layer="51"/>
+<rectangle x1="-0.254" y1="-0.254" x2="0.254" y2="0.254" layer="51"/>
+</package>
+<package name="1X03_LONGPADS">
+<wire x1="-1.27" y1="0.635" x2="-1.27" y2="-0.635" width="0.2032" layer="21"/>
+<wire x1="6.35" y1="0.635" x2="6.35" y2="-0.635" width="0.2032" layer="21"/>
+<pad name="1" x="0" y="0" drill="1.1176" diameter="1.8796" shape="long" rot="R90"/>
+<pad name="2" x="2.54" y="0" drill="1.1176" diameter="1.8796" shape="long" rot="R90"/>
+<pad name="3" x="5.08" y="0" drill="1.1176" diameter="1.8796" shape="long" rot="R90"/>
+<text x="-1.3462" y="2.4638" size="1.27" layer="25" ratio="10">>NAME</text>
+<text x="-1.27" y="-3.81" size="1.27" layer="27">>VALUE</text>
+<rectangle x1="4.826" y1="-0.254" x2="5.334" y2="0.254" layer="51"/>
+<rectangle x1="2.286" y1="-0.254" x2="2.794" y2="0.254" layer="51"/>
+<rectangle x1="-0.254" y1="-0.254" x2="0.254" y2="0.254" layer="51"/>
+</package>
+<package name="JST-3-PTH">
+<wire x1="-4" y1="-6.3" x2="-4" y2="1.5" width="0.2032" layer="21"/>
+<wire x1="-4" y1="1.5" x2="4" y2="1.5" width="0.2032" layer="21"/>
+<wire x1="4" y1="1.5" x2="4" y2="-6.3" width="0.2032" layer="21"/>
+<wire x1="-4" y1="-6.3" x2="-3.3" y2="-6.3" width="0.2032" layer="21"/>
+<wire x1="4" y1="-6.3" x2="3.3" y2="-6.3" width="0.2032" layer="21"/>
+<wire x1="-3.3" y1="-6.3" x2="-3.3" y2="-5" width="0.2032" layer="21"/>
+<wire x1="3.3" y1="-6.3" x2="3.3" y2="-5" width="0.2032" layer="21"/>
+<pad name="1" x="-2" y="-5" drill="0.7" diameter="1.6256"/>
+<pad name="2" x="0" y="-5" drill="0.7" diameter="1.6256"/>
+<pad name="3" x="2" y="-5" drill="0.7" diameter="1.6256"/>
+<text x="-1.27" y="0.24" size="0.4064" layer="25">>Name</text>
+<text x="-1.27" y="-1.03" size="0.4064" layer="27">>Value</text>
+<text x="-2.4" y="-4.33" size="1.27" layer="51">+</text>
+<text x="-0.4" y="-4.33" size="1.27" layer="51">-</text>
+<text x="1.7" y="-4.13" size="0.8" layer="51">S</text>
+</package>
+<package name="1X03_PP_HOLES_ONLY">
+<circle x="0" y="0" radius="0.635" width="0.127" layer="51"/>
+<circle x="2.54" y="0" radius="0.635" width="0.127" layer="51"/>
+<circle x="5.08" y="0" radius="0.635" width="0.127" layer="51"/>
+<pad name="1" x="0" y="0" drill="0.9" diameter="0.8128" rot="R90"/>
+<pad name="2" x="2.54" y="0" drill="0.9" diameter="0.8128" rot="R90"/>
+<pad name="3" x="5.08" y="0" drill="0.9" diameter="0.8128" rot="R90"/>
+<hole x="0" y="0" drill="1.4732"/>
+<hole x="2.54" y="0" drill="1.4732"/>
+<hole x="5.08" y="0" drill="1.4732"/>
+</package>
+<package name="SCREWTERMINAL-5MM-3">
+<wire x1="-3.1" y1="4.2" x2="13.1" y2="4.2" width="0.2032" layer="21"/>
+<wire x1="13.1" y1="4.2" x2="13.1" y2="-2.3" width="0.2032" layer="21"/>
+<wire x1="13.1" y1="-2.3" x2="13.1" y2="-3.3" width="0.2032" layer="21"/>
+<wire x1="13.1" y1="-3.3" x2="-3.1" y2="-3.3" width="0.2032" layer="21"/>
+<wire x1="-3.1" y1="-3.3" x2="-3.1" y2="-2.3" width="0.2032" layer="21"/>
+<wire x1="-3.1" y1="-2.3" x2="-3.1" y2="4.2" width="0.2032" layer="21"/>
+<wire x1="13.1" y1="-2.3" x2="-3.1" y2="-2.3" width="0.2032" layer="21"/>
+<wire x1="-3.1" y1="-1.35" x2="-3.7" y2="-1.35" width="0.2032" layer="51"/>
+<wire x1="-3.7" y1="-1.35" x2="-3.7" y2="-2.35" width="0.2032" layer="51"/>
+<wire x1="-3.7" y1="-2.35" x2="-3.1" y2="-2.35" width="0.2032" layer="51"/>
+<wire x1="13.1" y1="4" x2="13.7" y2="4" width="0.2032" layer="51"/>
+<wire x1="13.7" y1="4" x2="13.7" y2="3" width="0.2032" layer="51"/>
+<wire x1="13.7" y1="3" x2="13.1" y2="3" width="0.2032" layer="51"/>
+<circle x="2.5" y="3.7" radius="0.2828" width="0.127" layer="51"/>
+<pad name="1" x="0" y="0" drill="1.3" diameter="2.413" shape="square"/>
+<pad name="2" x="5" y="0" drill="1.3" diameter="2.413"/>
+<pad name="3" x="10" y="0" drill="1.3" diameter="2.413"/>
+<text x="-1.27" y="2.54" size="0.4064" layer="25">>NAME</text>
+<text x="-1.27" y="1.27" size="0.4064" layer="27">>VALUE</text>
+</package>
+<package name="1X03_LOCK_NO_SILK">
+<pad name="1" x="0" y="0.127" drill="1.016" diameter="1.8796" rot="R90"/>
+<pad name="2" x="2.54" y="-0.127" drill="1.016" diameter="1.8796" rot="R90"/>
+<pad name="3" x="5.08" y="0.127" drill="1.016" diameter="1.8796" rot="R90"/>
+<text x="-1.3462" y="1.8288" 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="4.826" y1="-0.254" x2="5.334" y2="0.254" layer="51"/>
+<rectangle x1="2.286" y1="-0.254" x2="2.794" y2="0.254" layer="51"/>
+<rectangle x1="-0.254" y1="-0.254" x2="0.254" y2="0.254" layer="51"/>
+</package>
+<package name="JST-3-SMD">
+<wire x1="-4.99" y1="-2.07" x2="-4.99" y2="-5.57" width="0.2032" layer="21"/>
+<wire x1="-4.99" y1="-5.57" x2="-4.19" y2="-5.57" width="0.2032" layer="21"/>
+<wire x1="-4.19" y1="-5.57" x2="-4.19" y2="-3.07" width="0.2032" layer="21"/>
+<wire x1="-4.19" y1="-3.07" x2="-2.99" y2="-3.07" width="0.2032" layer="21"/>
+<wire x1="3.01" y1="-3.07" x2="4.21" y2="-3.07" width="0.2032" layer="21"/>
+<wire x1="4.21" y1="-3.07" x2="4.21" y2="-5.57" width="0.2032" layer="21"/>
+<wire x1="4.21" y1="-5.57" x2="5.01" y2="-5.57" width="0.2032" layer="21"/>
+<wire x1="5.01" y1="-5.57" x2="5.01" y2="-2.07" width="0.2032" layer="21"/>
+<wire x1="3.01" y1="1.93" x2="-2.99" y2="1.93" width="0.2032" layer="21"/>
+<smd name="1" x="-1.99" y="-4.77" dx="1" dy="4.6" layer="1"/>
+<smd name="3" x="2.01" y="-4.77" dx="1" dy="4.6" layer="1"/>
+<smd name="NC1" x="-4.39" y="0.43" dx="3.4" dy="1.6" layer="1" rot="R90"/>
+<smd name="NC2" x="4.41" y="0.43" dx="3.4" dy="1.6" layer="1" rot="R90"/>
+<smd name="2" x="0.01" y="-4.77" dx="1" dy="4.6" layer="1"/>
+<text x="-2.26" y="0.2" size="0.4064" layer="25">>Name</text>
+<text x="-2.26" y="-1.07" size="0.4064" layer="27">>Value</text>
+</package>
+<package name="1X03-1MM-RA">
+<wire x1="-1" y1="-4.6" x2="1" y2="-4.6" width="0.254" layer="21"/>
+<wire x1="-2.5" y1="-2" x2="-2.5" y2="-0.35" width="0.254" layer="21"/>
+<wire x1="1.75" y1="-0.35" x2="2.4997" y2="-0.35" width="0.254" layer="21"/>
+<wire x1="2.4997" y1="-0.35" x2="2.4997" y2="-2" width="0.254" layer="21"/>
+<wire x1="-2.5" y1="-0.35" x2="-1.75" y2="-0.35" width="0.254" layer="21"/>
+<circle x="-2" y="0.3" radius="0.1414" width="0.4" layer="21"/>
+<smd name="NC2" x="-2.3" y="-3.675" dx="1.2" dy="2" layer="1"/>
+<smd name="NC1" x="2.3" y="-3.675" dx="1.2" dy="2" layer="1"/>
+<smd name="1" x="-1" y="0" dx="0.6" dy="1.35" layer="1"/>
+<smd name="2" x="0" y="0" dx="0.6" dy="1.35" layer="1"/>
+<smd name="3" x="1" y="0" dx="0.6" dy="1.35" layer="1"/>
+<text x="-1.73" y="1.73" size="0.4064" layer="25" rot="R180">>NAME</text>
+<text x="3.46" y="1.73" size="0.4064" layer="27" rot="R180">>VALUE</text>
+</package>
+<package name="1X03_SMD_RA_FEMALE">
+<wire x1="-3.935" y1="4.25" x2="-3.935" y2="-4.25" width="0.1778" layer="21"/>
+<wire x1="3.935" y1="4.25" x2="-3.935" y2="4.25" width="0.1778" layer="21"/>
+<wire x1="3.935" y1="-4.25" x2="3.935" y2="4.25" width="0.1778" layer="21"/>
+<wire x1="-3.935" y1="-4.25" x2="3.935" y2="-4.25" width="0.1778" layer="21"/>
+<rectangle x1="-0.32" y1="6.8" x2="0.32" y2="7.65" layer="51"/>
+<rectangle x1="2.22" y1="6.8" x2="2.86" y2="7.65" layer="51"/>
+<rectangle x1="-2.86" y1="6.8" x2="-2.22" y2="7.65" layer="51"/>
+<smd name="3" x="2.54" y="7.225" dx="1.25" dy="3" layer="1" rot="R180"/>
+<smd name="2" x="0" y="7.225" dx="1.25" dy="3" layer="1" rot="R180"/>
+<smd name="1" x="-2.54" y="7.225" dx="1.25" dy="3" layer="1" rot="R180"/>
+<text x="-3.155" y="2.775" size="1" layer="27">>Value</text>
+<text x="-2.955" y="-3.395" size="1" layer="25">>Name</text>
+</package>
+<package name="1X03_SMD_RA_MALE">
+<wire x1="3.81" y1="1.25" x2="-3.81" y2="1.25" width="0.1778" layer="51"/>
+<wire x1="-3.81" y1="1.25" x2="-3.81" y2="-1.25" width="0.1778" layer="51"/>
+<wire x1="3.81" y1="-1.25" x2="2.53" y2="-1.25" width="0.1778" layer="51"/>
+<wire x1="2.53" y1="-1.25" x2="-0.01" y2="-1.25" width="0.1778" layer="51"/>
+<wire x1="-0.01" y1="-1.25" x2="-2.55" y2="-1.25" width="0.1778" layer="51"/>
+<wire x1="-2.55" y1="-1.25" x2="-3.81" y2="-1.25" width="0.1778" layer="51"/>
+<wire x1="3.81" y1="-1.25" x2="3.81" y2="1.25" width="0.1778" layer="51"/>
+<wire x1="2.53" y1="-1.25" x2="2.53" y2="-7.25" width="0.127" layer="51"/>
+<wire x1="-0.01" y1="-1.25" x2="-0.01" y2="-7.25" width="0.127" layer="51"/>
+<wire x1="-2.55" y1="-1.25" x2="-2.55" y2="-7.25" width="0.127" layer="51"/>
+<rectangle x1="-0.32" y1="4.15" x2="0.32" y2="5.95" layer="51"/>
+<rectangle x1="-2.86" y1="4.15" x2="-2.22" y2="5.95" layer="51"/>
+<rectangle x1="2.22" y1="4.15" x2="2.86" y2="5.95" layer="51"/>
+<smd name="1" x="-2.54" y="5" dx="3" dy="1" layer="1" rot="R90"/>
+<smd name="2" x="0" y="5" dx="3" dy="1" layer="1" rot="R90"/>
+<smd name="3" x="2.54" y="5" dx="3" dy="1" layer="1" rot="R90"/>
+</package>
+</packages>
+<symbols>
+<symbol name="M03">
+<wire x1="3.81" y1="-5.08" x2="-2.54" y2="-5.08" 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="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="-2.54" y1="5.08" x2="-2.54" y2="-5.08" width="0.4064" layer="94"/>
+<wire x1="3.81" y1="-5.08" x2="3.81" y2="5.08" width="0.4064" layer="94"/>
+<wire x1="-2.54" y1="5.08" x2="3.81" y2="5.08" width="0.4064" layer="94"/>
+<text x="-2.54" y="-7.62" size="1.778" layer="96">>VALUE</text>
+<text x="-2.54" y="5.842" size="1.778" layer="95">>NAME</text>
+<pin name="1" x="7.62" y="-2.54" visible="pad" length="middle" direction="pas" swaplevel="1" rot="R180"/>
+<pin name="2" x="7.62" y="0" visible="pad" length="middle" direction="pas" swaplevel="1" rot="R180"/>
+<pin name="3" x="7.62" y="2.54" visible="pad" length="middle" direction="pas" swaplevel="1" rot="R180"/>
+</symbol>
+</symbols>
+<devicesets>
+<deviceset name="M03" prefix="JP" uservalue="yes">
+<description><b>Header 3</b>
+Standard 3-pin 0.1" header. Use with straight break away headers (SKU : PRT-00116), right angle break away headers (PRT-00553), swiss pins (PRT-00743), machine pins (PRT-00117), and female headers (PRT-00115). Molex polarized connector foot print use with SKU : PRT-08232 with associated crimp pins and housings.</description>
+<gates>
+<gate name="G$1" symbol="M03" x="-2.54" y="0"/>
+</gates>
+<devices>
+<device name="PTH" package="1X03">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+<connect gate="G$1" pin="3" pad="3"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="POLAR" package="MOLEX-1X3">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+<connect gate="G$1" pin="3" pad="3"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="SCREW" package="SCREWTERMINAL-3.5MM-3">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+<connect gate="G$1" pin="3" pad="3"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="LOCK" package="1X03_LOCK">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+<connect gate="G$1" pin="3" pad="3"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="LOCK_LONGPADS" package="1X03_LOCK_LONGPADS">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+<connect gate="G$1" pin="3" pad="3"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="POLAR_LOCK" package="MOLEX-1X3_LOCK">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+<connect gate="G$1" pin="3" pad="3"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="SCREW_LOCK" package="SCREWTERMINAL-3.5MM-3_LOCK.007S">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+<connect gate="G$1" pin="3" pad="3"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="1X03_NO_SILK" package="1X03_NO_SILK">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+<connect gate="G$1" pin="3" pad="3"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="LONGPADS" package="1X03_LONGPADS">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+<connect gate="G$1" pin="3" pad="3"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="JST-PTH" package="JST-3-PTH">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+<connect gate="G$1" pin="3" pad="3"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="POGO_PIN_HOLES_ONLY" package="1X03_PP_HOLES_ONLY">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+<connect gate="G$1" pin="3" pad="3"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="-SCREW-5MM" package="SCREWTERMINAL-5MM-3">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+<connect gate="G$1" pin="3" pad="3"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="LOCK_NO_SILK" package="1X03_LOCK_NO_SILK">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+<connect gate="G$1" pin="3" pad="3"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="" package="JST-3-SMD">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+<connect gate="G$1" pin="3" pad="3"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="SMD" package="1X03-1MM-RA">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+<connect gate="G$1" pin="3" pad="3"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+<device name="SMD_RA_FEMALE" package="1X03_SMD_RA_FEMALE">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+<connect gate="G$1" pin="3" pad="3"/>
+</connects>
+<technologies>
+<technology name="">
+<attribute name="PROD_ID" value="CONN-10926"/>
+<attribute name="VALUE" value="1x3 RA Female .1""/>
+</technology>
+</technologies>
+</device>
+<device name="SMD_RA_MALE" package="1X03_SMD_RA_MALE">
+<connects>
+<connect gate="G$1" pin="1" pad="1"/>
+<connect gate="G$1" pin="2" pad="2"/>
+<connect gate="G$1" pin="3" pad="3"/>
+</connects>
+<technologies>
+<technology name=""/>
+</technologies>
+</device>
+</devices>
+</deviceset>
+</devicesets>
+</library>
+</libraries>
+<attributes>
+</attributes>
+<variantdefs>
+</variantdefs>
+<classes>
+<class number="0" name="default" width="0" drill="0">
+</class>
+</classes>
+<parts>
+<part name="U$1" library="custom_parts" deviceset="LM3481" device=""/>
+<part name="CIN$0" library="resistor" deviceset="C-US" device="C1210" value="C3225X7R1E106M"/>
+<part name="CBP" library="resistor" deviceset="C-US" device="C0603" value="C0603C104K5RACT"/>
+<part name="RBP" library="resistor" deviceset="R-US_" device="R0402" value="CRCW040220R0FKE"/>
+<part name="RUVLO2" library="resistor" deviceset="R-US_" device="R0402" value="CRCW0402100KFKE"/>
+<part name="RUVLO1" library="resistor" deviceset="R-US_" device="R0402" value="CRCW040268K1FKE"/>
+<part name="CCOMP2" library="resistor" deviceset="C-US" device="C0603" value="GRM1885C1H162JA01"/>
+<part name="RCOMP" library="resistor" deviceset="R-US_" device="R0402" value="CRCW04021K58FKE"/>
+<part name="CCOMP" library="resistor" deviceset="C-US" device="C0402" value="GRM155C80G184KE01"/>
+<part name="RFADJ" library="resistor" deviceset="R-US_" device="R0402" value="CRCW040233K2FKE"/>
+<part name="CCC" library="resistor" deviceset="C-US" device="C0402" value="GRM155R61A224KE19D"/>
+<part name="RRAMP" library="resistor" deviceset="R-US_" device="R0402" value="CRCW0402100RFKE"/>
+<part name="CRAMP" library="resistor" deviceset="C-US" device="C0805" value="CC0805KRX7R9BB56"/>
+<part name="RSENSE" library="resistor" deviceset="R-US_" device="M1206" value="CSNL1206FT2L00"/>
+<part name="LIN" library="custom_parts" deviceset="L-US" device="1060-152" value="XAL1060-152ME"/>
+<part name="CSEP$0" library="resistor" deviceset="C-US" device="C1210" value="C3225X7R1E106M"/>
+<part name="LOUT" library="custom_parts" deviceset="L-US" device="1010-153" value="XAL1010-153ME"/>
+<part name="D1" library="custom_parts" deviceset="VS-12CWQ10FNPBF" device="" value=" 12CWQ10FNPB"/>
+<part name="RFB2" library="resistor" deviceset="R-US_" device="R0402" value="CRCW040284K5FKE"/>
+<part name="RFB1" library="resistor" deviceset="R-US_" device="R0402" value="CRCW040210K0FKED"/>
+<part name="M1" library="custom_parts" deviceset="BSZ097N04LS_G" device=""/>
+<part name="CIN$1" library="resistor" deviceset="C-US" device="C1210" value="C3225X7R1E106M"/>
+<part name="CIN$2" library="resistor" deviceset="C-US" device="C1210" value="C3225X7R1E106M"/>
+<part name="IN" library="custom_parts" deviceset="POWER_CONNECTOR" device="ELFH0225*" value="POWER_CONNECTORELFH0225*"/>
+<part name="OUT" library="custom_parts" deviceset="POWER_CONNECTOR" device="ELFH0225*"/>
+<part name="DTVS" library="custom_parts" deviceset="MMSZ5242BT1G" device="" value="MMSZ5246BT1G"/>
+<part name="IPOW" library="led" deviceset="LED" device="CHIPLED_0805"/>
+<part name="RIPOW" library="resistor" deviceset="R-US_" device="R1206" value="1K"/>
+<part name="OPOW" library="led" deviceset="LED" device="CHIPLED_0805"/>
+<part name="ROPOW" library="resistor" deviceset="R-US_" device="R1206" value="1K"/>
+<part name="CSEP$1" library="resistor" deviceset="C-US" device="C1210" value="C3225X7R1E106M"/>
+<part name="CSEP$2" library="resistor" deviceset="C-US" device="C1210" value="C3225X7R1E106M"/>
+<part name="CSEP$3" library="resistor" deviceset="C-US" device="C1210" value="C3225X7R1E106M"/>
+<part name="COUT$0" library="custom_parts" deviceset="C-US" device="RR71C331MDN1"/>
+<part name="COUT$1" library="custom_parts" deviceset="C-US" device="RR71C331MDN1"/>
+<part name="OUT1" library="custom_parts" deviceset="POWER_CONNECTOR" device="ELFH0225*"/>
+<part name="JP1" library="SparkFun-Connectors" deviceset="M03" device="PTH"/>
+<part name="JP2" library="SparkFun-Connectors" deviceset="M03" device="PTH"/>
+<part name="JP3" library="SparkFun-Connectors" deviceset="M03" device="PTH"/>
+</parts>
+<sheets>
+<sheet>
+<plain>
+<text x="-58.42" y="66.04" size="1.778" layer="91">20 Amps</text>
+<text x="53.34" y="63.5" size="1.778" layer="91">20 Amps</text>
+<text x="101.6" y="63.5" size="1.778" layer="91" rot="R90">10 amps</text>
+<text x="99.06" y="38.1" size="1.778" layer="91" rot="R90">20 amps</text>
+<text x="101.6" y="2.54" size="1.778" layer="91" rot="R90">20 amps</text>
+<text x="137.16" y="68.58" size="1.778" layer="91" rot="R180">10 amps</text>
+<text x="167.64" y="48.26" size="1.778" layer="91">10 amps</text>
+<text x="167.64" y="10.16" size="1.778" layer="91">10 amps</text>
+<text x="172.72" y="66.04" size="1.778" layer="91">5 amps</text>
+</plain>
+<instances>
+<instance part="U$1" gate="G$1" x="50.8" y="27.94"/>
+<instance part="CIN$0" gate="G$1" x="-63.5" y="30.48"/>
+<instance part="CBP" gate="G$1" x="-33.02" y="12.7"/>
+<instance part="RBP" gate="G$1" x="-33.02" y="58.42" rot="R90"/>
+<instance part="RUVLO2" gate="G$1" x="-20.32" y="55.88" rot="R90"/>
+<instance part="RUVLO1" gate="G$1" x="-20.32" y="20.32" rot="R90"/>
+<instance part="CCOMP2" gate="G$1" x="-5.08" y="15.24"/>
+<instance part="RCOMP" gate="G$1" x="10.16" y="20.32" rot="R90"/>
+<instance part="CCOMP" gate="G$1" x="10.16" y="5.08"/>
+<instance part="RFADJ" gate="G$1" x="73.66" y="17.78" rot="R180"/>
+<instance part="CCC" gate="G$1" x="73.66" y="33.02" rot="R90"/>
+<instance part="RRAMP" gate="G$1" x="68.58" y="55.88" rot="R180"/>
+<instance part="CRAMP" gate="G$1" x="43.18" y="45.72" rot="R90"/>
+<instance part="RSENSE" gate="G$1" x="96.52" y="10.16" rot="R270"/>
+<instance part="LIN" gate="G$1" x="35.56" y="63.5" rot="R90"/>
+<instance part="CSEP$0" gate="G$1" x="106.68" y="63.5" rot="R90"/>
+<instance part="LOUT" gate="G$1" x="68.58" y="86.36" rot="R90"/>
+<instance part="D1" gate="G$1" x="129.54" y="63.5"/>
+<instance part="RFB2" gate="G$1" x="137.16" y="53.34" rot="R270"/>
+<instance part="RFB1" gate="G$1" x="137.16" y="20.32" rot="R270"/>
+<instance part="M1" gate="G$1" x="93.98" y="25.4"/>
+<instance part="CIN$1" gate="G$1" x="-58.42" y="38.1"/>
+<instance part="CIN$2" gate="G$1" x="-66.04" y="22.86"/>
+<instance part="IN" gate="G$1" x="-93.98" y="27.94"/>
+<instance part="OUT" gate="G$1" x="223.52" y="30.48" rot="R180"/>
+<instance part="DTVS" gate="G$1" x="-68.58" y="27.94" rot="R90"/>
+<instance part="IPOW" gate="G$1" x="-76.2" y="35.56" rot="MR270"/>
+<instance part="RIPOW" gate="G$1" x="-83.82" y="35.56" rot="R180"/>
+<instance part="OPOW" gate="G$1" x="208.28" y="27.94" rot="MR0"/>
+<instance part="ROPOW" gate="G$1" x="208.28" y="35.56" rot="R90"/>
+<instance part="CSEP$1" gate="G$1" x="106.68" y="71.12" rot="R90"/>
+<instance part="CSEP$2" gate="G$1" x="106.68" y="55.88" rot="R90"/>
+<instance part="CSEP$3" gate="G$1" x="106.68" y="78.74" rot="R90"/>
+<instance part="COUT$0" gate="G$1" x="160.02" y="33.02"/>
+<instance part="COUT$1" gate="G$1" x="170.18" y="33.02"/>
+<instance part="OUT1" gate="G$1" x="223.52" y="12.7" rot="R180"/>
+<instance part="JP1" gate="G$1" x="228.6" y="48.26" rot="MR0"/>
+<instance part="JP2" gate="G$1" x="228.6" y="63.5" rot="MR0"/>
+<instance part="JP3" gate="G$1" x="228.6" y="78.74" rot="MR0"/>
+</instances>
+<busses>
+</busses>
+<nets>
+<net name="N$1" class="0">
+<segment>
+<wire x1="66.04" y1="38.1" x2="68.58" y2="38.1" width="0.1524" layer="91"/>
+<wire x1="68.58" y1="38.1" x2="68.58" y2="48.26" width="0.1524" layer="91"/>
+<wire x1="-33.02" y1="15.24" x2="-33.02" y2="48.26" width="0.1524" layer="91"/>
+<wire x1="-33.02" y1="48.26" x2="-33.02" y2="53.34" width="0.1524" layer="91"/>
+<wire x1="68.58" y1="48.26" x2="-33.02" y2="48.26" width="0.1524" layer="91"/>
+<junction x="-33.02" y="48.26"/>
+<pinref part="U$1" gate="G$1" pin="VIN"/>
+<pinref part="RBP" gate="G$1" pin="1"/>
+<pinref part="CBP" gate="G$1" pin="1"/>
+</segment>
+</net>
+<net name="GND" class="0">
+<segment>
+<wire x1="60.96" y1="86.36" x2="50.8" y2="86.36" width="0.1524" layer="91"/>
+<label x="50.8" y="86.36" size="1.778" layer="95"/>
+<pinref part="LOUT" gate="G$1" pin="1"/>
+</segment>
+<segment>
+<wire x1="-20.32" y1="15.24" x2="-20.32" y2="-2.54" width="0.1524" layer="91"/>
+<wire x1="-5.08" y1="10.16" x2="-5.08" y2="-2.54" width="0.1524" layer="91"/>
+<wire x1="10.16" y1="0" x2="10.16" y2="-2.54" width="0.1524" layer="91"/>
+<wire x1="81.28" y1="22.86" x2="66.04" y2="22.86" width="0.1524" layer="91"/>
+<wire x1="78.74" y1="33.02" x2="81.28" y2="33.02" width="0.1524" layer="91"/>
+<wire x1="48.26" y1="45.72" x2="81.28" y2="45.72" width="0.1524" layer="91"/>
+<wire x1="81.28" y1="45.72" x2="81.28" y2="33.02" width="0.1524" layer="91"/>
+<wire x1="81.28" y1="33.02" x2="81.28" y2="22.86" width="0.1524" layer="91"/>
+<wire x1="81.28" y1="17.78" x2="81.28" y2="22.86" width="0.1524" layer="91"/>
+<wire x1="78.74" y1="17.78" x2="81.28" y2="17.78" width="0.1524" layer="91"/>
+<wire x1="81.28" y1="-2.54" x2="81.28" y2="17.78" width="0.1524" layer="91"/>
+<wire x1="96.52" y1="5.08" x2="96.52" y2="-2.54" width="0.1524" layer="91"/>
+<wire x1="165.1" y1="27.94" x2="165.1" y2="-2.54" width="0.1524" layer="91"/>
+<wire x1="137.16" y1="15.24" x2="137.16" y2="-2.54" width="0.1524" layer="91"/>
+<wire x1="137.16" y1="-2.54" x2="165.1" y2="-2.54" width="0.1524" layer="91"/>
+<wire x1="137.16" y1="-2.54" x2="96.52" y2="-2.54" width="0.1524" layer="91"/>
+<wire x1="96.52" y1="-2.54" x2="81.28" y2="-2.54" width="0.1524" layer="91"/>
+<wire x1="33.02" y1="17.78" x2="33.02" y2="-2.54" width="0.1524" layer="91"/>
+<wire x1="33.02" y1="-2.54" x2="81.28" y2="-2.54" width="0.1524" layer="91"/>
+<wire x1="33.02" y1="-2.54" x2="10.16" y2="-2.54" width="0.1524" layer="91"/>
+<wire x1="10.16" y1="-2.54" x2="-5.08" y2="-2.54" width="0.1524" layer="91"/>
+<wire x1="-5.08" y1="-2.54" x2="-20.32" y2="-2.54" width="0.1524" layer="91"/>
+<wire x1="-33.02" y1="-2.54" x2="-20.32" y2="-2.54" width="0.1524" layer="91"/>
+<wire x1="-33.02" y1="7.62" x2="-33.02" y2="-2.54" width="0.1524" layer="91"/>
+<wire x1="-63.5" y1="-2.54" x2="-33.02" y2="-2.54" width="0.1524" layer="91"/>
+<wire x1="-63.5" y1="17.78" x2="-63.5" y2="-2.54" width="0.1524" layer="91"/>
+<wire x1="-66.04" y1="17.78" x2="-63.5" y2="17.78" width="0.1524" layer="91"/>
+<wire x1="-63.5" y1="25.4" x2="-63.5" y2="17.78" width="0.1524" layer="91"/>
+<wire x1="-63.5" y1="25.4" x2="-58.42" y2="25.4" width="0.1524" layer="91"/>
+<wire x1="35.56" y1="17.78" x2="33.02" y2="17.78" width="0.1524" layer="91"/>
+<wire x1="-58.42" y1="25.4" x2="-58.42" y2="33.02" width="0.1524" layer="91"/>
+<wire x1="-88.9" y1="25.4" x2="-71.12" y2="25.4" width="0.1524" layer="91"/>
+<wire x1="-71.12" y1="25.4" x2="-68.58" y2="25.4" width="0.1524" layer="91"/>
+<wire x1="-68.58" y1="25.4" x2="-68.58" y2="17.78" width="0.1524" layer="91"/>
+<wire x1="-68.58" y1="17.78" x2="-66.04" y2="17.78" width="0.1524" layer="91"/>
+<wire x1="165.1" y1="-2.54" x2="187.96" y2="-2.54" width="0.1524" layer="91"/>
+<wire x1="187.96" y1="-2.54" x2="213.36" y2="-2.54" width="0.1524" layer="91"/>
+<wire x1="213.36" y1="-2.54" x2="213.36" y2="10.16" width="0.1524" layer="91"/>
+<wire x1="213.36" y1="10.16" x2="213.36" y2="22.86" width="0.1524" layer="91"/>
+<wire x1="213.36" y1="22.86" x2="213.36" y2="27.94" width="0.1524" layer="91"/>
+<wire x1="-71.12" y1="35.56" x2="-71.12" y2="25.4" width="0.1524" layer="91"/>
+<wire x1="208.28" y1="22.86" x2="213.36" y2="22.86" width="0.1524" layer="91"/>
+<wire x1="170.18" y1="27.94" x2="165.1" y2="27.94" width="0.1524" layer="91"/>
+<wire x1="165.1" y1="27.94" x2="160.02" y2="27.94" width="0.1524" layer="91"/>
+<wire x1="218.44" y1="27.94" x2="213.36" y2="27.94" width="0.1524" layer="91"/>
+<wire x1="218.44" y1="10.16" x2="213.36" y2="10.16" width="0.1524" layer="91"/>
+<junction x="10.16" y="-2.54"/>
+<junction x="96.52" y="-2.54"/>
+<junction x="81.28" y="-2.54"/>
+<junction x="137.16" y="-2.54"/>
+<junction x="165.1" y="-2.54"/>
+<junction x="-20.32" y="-2.54"/>
+<junction x="-33.02" y="-2.54"/>
+<junction x="-5.08" y="-2.54"/>
+<junction x="33.02" y="-2.54"/>
+<junction x="81.28" y="22.86"/>
+<junction x="81.28" y="17.78"/>
+<junction x="81.28" y="33.02"/>
+<junction x="-68.58" y="25.4"/>
+<junction x="-66.04" y="17.78"/>
+<junction x="-71.12" y="25.4"/>
+<junction x="213.36" y="22.86"/>
+<junction x="-63.5" y="17.78"/>
+<junction x="-63.5" y="25.4"/>
+<junction x="165.1" y="27.94"/>
+<junction x="213.36" y="10.16"/>
+<label x="-30.48" y="-2.54" size="1.778" layer="95"/>
+<pinref part="RUVLO1" gate="G$1" pin="1"/>
+<pinref part="CCOMP2" gate="G$1" pin="2"/>
+<pinref part="CCOMP" gate="G$1" pin="2"/>
+<pinref part="U$1" gate="G$1" pin="PGND"/>
+<pinref part="CCC" gate="G$1" pin="2"/>
+<pinref part="CRAMP" gate="G$1" pin="2"/>
+<pinref part="RFADJ" gate="G$1" pin="1"/>
+<pinref part="RSENSE" gate="G$1" pin="2"/>
+<pinref part="RFB1" gate="G$1" pin="2"/>
+<pinref part="CBP" gate="G$1" pin="2"/>
+<pinref part="CIN$2" gate="G$1" pin="2"/>
+<pinref part="CIN$0" gate="G$1" pin="2"/>
+<pinref part="U$1" gate="G$1" pin="AGND"/>
+<pinref part="CIN$1" gate="G$1" pin="2"/>
+<pinref part="IN" gate="G$1" pin="P$2"/>
+<pinref part="DTVS" gate="G$1" pin="A"/>
+<pinref part="IPOW" gate="G$1" pin="C"/>
+<pinref part="OPOW" gate="G$1" pin="C"/>
+<pinref part="COUT$1" gate="G$1" pin="2"/>
+<pinref part="COUT$0" gate="G$1" pin="2"/>
+<pinref part="OUT" gate="G$1" pin="P$1"/>
+<pinref part="OUT1" gate="G$1" pin="P$1"/>
+<wire x1="187.96" y1="76.2" x2="187.96" y2="60.96" width="0.1524" layer="91"/>
+<junction x="187.96" y="-2.54"/>
+<pinref part="JP1" gate="G$1" pin="1"/>
+<wire x1="187.96" y1="60.96" x2="187.96" y2="45.72" width="0.1524" layer="91"/>
+<wire x1="187.96" y1="45.72" x2="187.96" y2="-2.54" width="0.1524" layer="91"/>
+<wire x1="220.98" y1="45.72" x2="187.96" y2="45.72" width="0.1524" layer="91"/>
+<pinref part="JP3" gate="G$1" pin="1"/>
+<wire x1="220.98" y1="76.2" x2="187.96" y2="76.2" width="0.1524" layer="91"/>
+<pinref part="JP2" gate="G$1" pin="1"/>
+<wire x1="220.98" y1="60.96" x2="187.96" y2="60.96" width="0.1524" layer="91"/>
+<junction x="187.96" y="45.72"/>
+<junction x="187.96" y="60.96"/>
+</segment>
+</net>
+<net name="N$4" class="0">
+<segment>
+<wire x1="35.56" y1="33.02" x2="0" y2="33.02" width="0.1524" layer="91"/>
+<wire x1="0" y1="33.02" x2="0" y2="40.64" width="0.1524" layer="91"/>
+<wire x1="0" y1="40.64" x2="-20.32" y2="40.64" width="0.1524" layer="91"/>
+<wire x1="-20.32" y1="40.64" x2="-20.32" y2="50.8" width="0.1524" layer="91"/>
+<wire x1="-20.32" y1="40.64" x2="-20.32" y2="25.4" width="0.1524" layer="91"/>
+<junction x="-20.32" y="40.64"/>
+<pinref part="U$1" gate="G$1" pin="UVLO"/>
+<pinref part="RUVLO2" gate="G$1" pin="1"/>
+<pinref part="RUVLO1" gate="G$1" pin="2"/>
+</segment>
+</net>
+<net name="N$5" class="0">
+<segment>
+<wire x1="35.56" y1="27.94" x2="10.16" y2="27.94" width="0.1524" layer="91"/>
+<wire x1="10.16" y1="27.94" x2="-5.08" y2="27.94" width="0.1524" layer="91"/>
+<wire x1="-5.08" y1="27.94" x2="-5.08" y2="17.78" width="0.1524" layer="91"/>
+<wire x1="10.16" y1="25.4" x2="10.16" y2="27.94" width="0.1524" layer="91"/>
+<junction x="10.16" y="27.94"/>
+<pinref part="U$1" gate="G$1" pin="COMP"/>
+<pinref part="CCOMP2" gate="G$1" pin="1"/>
+<pinref part="RCOMP" gate="G$1" pin="2"/>
+</segment>
+</net>
+<net name="N$7" class="0">
+<segment>
+<wire x1="10.16" y1="7.62" x2="10.16" y2="15.24" width="0.1524" layer="91"/>
+<pinref part="RCOMP" gate="G$1" pin="1"/>
+<pinref part="CCOMP" gate="G$1" pin="1"/>
+</segment>
+</net>
+<net name="N$9" class="0">
+<segment>
+<wire x1="66.04" y1="17.78" x2="68.58" y2="17.78" width="0.1524" layer="91"/>
+<pinref part="U$1" gate="G$1" pin="FA/SYNC/SD"/>
+<pinref part="RFADJ" gate="G$1" pin="2"/>
+</segment>
+</net>
+<net name="N$8" class="0">
+<segment>
+<wire x1="35.56" y1="38.1" x2="35.56" y2="45.72" width="0.1524" layer="91"/>
+<wire x1="35.56" y1="45.72" x2="40.64" y2="45.72" width="0.1524" layer="91"/>
+<wire x1="35.56" y1="45.72" x2="35.56" y2="55.88" width="0.1524" layer="91"/>
+<wire x1="35.56" y1="55.88" x2="63.5" y2="55.88" width="0.1524" layer="91"/>
+<junction x="35.56" y="45.72"/>
+<pinref part="U$1" gate="G$1" pin="ISEN"/>
+<pinref part="CRAMP" gate="G$1" pin="1"/>
+<pinref part="RRAMP" gate="G$1" pin="2"/>
+</segment>
+</net>
+<net name="N$11" class="0">
+<segment>
+<wire x1="86.36" y1="27.94" x2="86.36" y2="22.86" width="0.1524" layer="91"/>
+<wire x1="86.36" y1="22.86" x2="91.44" y2="22.86" width="0.1524" layer="91"/>
+<wire x1="86.36" y1="27.94" x2="66.04" y2="27.94" width="0.1524" layer="91"/>
+<pinref part="M1" gate="G$1" pin="G"/>
+<pinref part="U$1" gate="G$1" pin="DR"/>
+</segment>
+</net>
+<net name="N$10" class="0">
+<segment>
+<wire x1="96.52" y1="15.24" x2="96.52" y2="17.78" width="0.1524" layer="91"/>
+<wire x1="96.52" y1="17.78" x2="96.52" y2="20.32" width="0.1524" layer="91"/>
+<wire x1="73.66" y1="55.88" x2="88.9" y2="55.88" width="0.1524" layer="91"/>
+<wire x1="88.9" y1="55.88" x2="88.9" y2="17.78" width="0.1524" layer="91"/>
+<wire x1="88.9" y1="17.78" x2="96.52" y2="17.78" width="0.1524" layer="91"/>
+<wire x1="101.6" y1="20.32" x2="99.06" y2="20.32" width="0.1524" layer="91"/>
+<wire x1="99.06" y1="20.32" x2="96.52" y2="20.32" width="0.1524" layer="91"/>
+<junction x="96.52" y="17.78"/>
+<junction x="96.52" y="20.32"/>
+<junction x="99.06" y="20.32"/>
+<pinref part="RSENSE" gate="G$1" pin="1"/>
+<pinref part="RRAMP" gate="G$1" pin="1"/>
+<pinref part="M1" gate="G$1" pin="S"/>
+<pinref part="M1" gate="G$1" pin="S$2"/>
+<pinref part="M1" gate="G$1" pin="S$1"/>
+</segment>
+</net>
+<net name="N$13" class="0">
+<segment>
+<wire x1="96.52" y1="30.48" x2="96.52" y2="63.5" width="0.1524" layer="91"/>
+<wire x1="43.18" y1="63.5" x2="96.52" y2="63.5" width="0.1524" layer="91"/>
+<wire x1="99.06" y1="30.48" x2="96.52" y2="30.48" width="0.1524" layer="91"/>
+<wire x1="104.14" y1="30.48" x2="101.6" y2="30.48" width="0.1524" layer="91"/>
+<wire x1="101.6" y1="30.48" x2="99.06" y2="30.48" width="0.1524" layer="91"/>
+<wire x1="106.68" y1="30.48" x2="104.14" y2="30.48" width="0.1524" layer="91"/>
+<wire x1="96.52" y1="63.5" x2="104.14" y2="63.5" width="0.1524" layer="91"/>
+<wire x1="104.14" y1="55.88" x2="104.14" y2="63.5" width="0.1524" layer="91"/>
+<wire x1="104.14" y1="63.5" x2="104.14" y2="71.12" width="0.1524" layer="91"/>
+<wire x1="104.14" y1="71.12" x2="104.14" y2="78.74" width="0.1524" layer="91"/>
+<junction x="96.52" y="63.5"/>
+<junction x="99.06" y="30.48"/>
+<junction x="101.6" y="30.48"/>
+<junction x="104.14" y="30.48"/>
+<junction x="96.52" y="30.48"/>
+<junction x="104.14" y="63.5"/>
+<junction x="104.14" y="71.12"/>
+<pinref part="LIN" gate="G$1" pin="2"/>
+<pinref part="M1" gate="G$1" pin="D"/>
+<pinref part="M1" gate="G$1" pin="D$1"/>
+<pinref part="M1" gate="G$1" pin="D$3"/>
+<pinref part="M1" gate="G$1" pin="D$2"/>
+<pinref part="M1" gate="G$1" pin="D$4"/>
+<pinref part="CSEP$0" gate="G$1" pin="1"/>
+<pinref part="CSEP$2" gate="G$1" pin="1"/>
+<pinref part="CSEP$1" gate="G$1" pin="1"/>
+<pinref part="CSEP$3" gate="G$1" pin="1"/>
+</segment>
+</net>
+<net name="N$12" class="0">
+<segment>
+<wire x1="119.38" y1="63.5" x2="119.38" y2="86.36" width="0.1524" layer="91"/>
+<wire x1="119.38" y1="86.36" x2="76.2" y2="86.36" width="0.1524" layer="91"/>
+<wire x1="119.38" y1="63.5" x2="127" y2="63.5" width="0.1524" layer="91"/>
+<wire x1="127" y1="63.5" x2="127" y2="66.04" width="0.1524" layer="91"/>
+<wire x1="111.76" y1="63.5" x2="119.38" y2="63.5" width="0.1524" layer="91"/>
+<wire x1="111.76" y1="78.74" x2="111.76" y2="71.12" width="0.1524" layer="91"/>
+<wire x1="111.76" y1="71.12" x2="111.76" y2="63.5" width="0.1524" layer="91"/>
+<wire x1="111.76" y1="63.5" x2="111.76" y2="55.88" width="0.1524" layer="91"/>
+<junction x="119.38" y="63.5"/>
+<junction x="127" y="63.5"/>
+<junction x="111.76" y="63.5"/>
+<junction x="111.76" y="71.12"/>
+<pinref part="LOUT" gate="G$1" pin="2"/>
+<pinref part="D1" gate="G$1" pin="A"/>
+<pinref part="D1" gate="G$1" pin="A1"/>
+<pinref part="CSEP$0" gate="G$1" pin="2"/>
+<pinref part="CSEP$3" gate="G$1" pin="2"/>
+<pinref part="CSEP$1" gate="G$1" pin="2"/>
+<pinref part="CSEP$2" gate="G$1" pin="2"/>
+</segment>
+</net>
+<net name="N$14" class="0">
+<segment>
+<wire x1="132.08" y1="63.5" x2="137.16" y2="63.5" width="0.1524" layer="91"/>
+<wire x1="137.16" y1="58.42" x2="137.16" y2="63.5" width="0.1524" layer="91"/>
+<wire x1="137.16" y1="63.5" x2="165.1" y2="63.5" width="0.1524" layer="91"/>
+<wire x1="160.02" y1="35.56" x2="165.1" y2="35.56" width="0.1524" layer="91"/>
+<wire x1="165.1" y1="35.56" x2="170.18" y2="35.56" width="0.1524" layer="91"/>
+<wire x1="165.1" y1="35.56" x2="165.1" y2="63.5" width="0.1524" layer="91"/>
+<wire x1="165.1" y1="63.5" x2="215.9" y2="63.5" width="0.1524" layer="91"/>
+<wire x1="215.9" y1="63.5" x2="215.9" y2="48.26" width="0.1524" layer="91"/>
+<wire x1="215.9" y1="48.26" x2="215.9" y2="40.64" width="0.1524" layer="91"/>
+<wire x1="208.28" y1="40.64" x2="215.9" y2="40.64" width="0.1524" layer="91"/>
+<wire x1="218.44" y1="33.02" x2="215.9" y2="33.02" width="0.1524" layer="91"/>
+<wire x1="215.9" y1="33.02" x2="215.9" y2="40.64" width="0.1524" layer="91"/>
+<junction x="137.16" y="63.5"/>
+<junction x="165.1" y="35.56"/>
+<junction x="165.1" y="63.5"/>
+<junction x="215.9" y="40.64"/>
+<pinref part="D1" gate="G$1" pin="C"/>
+<pinref part="RFB2" gate="G$1" pin="1"/>
+<pinref part="COUT$1" gate="G$1" pin="1"/>
+<pinref part="COUT$0" gate="G$1" pin="1"/>
+<pinref part="ROPOW" gate="G$1" pin="2"/>
+<pinref part="OUT" gate="G$1" pin="P$2"/>
+<wire x1="215.9" y1="33.02" x2="215.9" y2="15.24" width="0.1524" layer="91"/>
+<pinref part="OUT1" gate="G$1" pin="P$2"/>
+<wire x1="215.9" y1="15.24" x2="218.44" y2="15.24" width="0.1524" layer="91"/>
+<junction x="215.9" y="33.02"/>
+<pinref part="JP1" gate="G$1" pin="2"/>
+<wire x1="220.98" y1="48.26" x2="215.9" y2="48.26" width="0.1524" layer="91"/>
+<pinref part="JP2" gate="G$1" pin="2"/>
+<wire x1="220.98" y1="63.5" x2="215.9" y2="63.5" width="0.1524" layer="91"/>
+<pinref part="JP3" gate="G$1" pin="2"/>
+<wire x1="220.98" y1="78.74" x2="215.9" y2="78.74" width="0.1524" layer="91"/>
+<wire x1="215.9" y1="78.74" x2="215.9" y2="63.5" width="0.1524" layer="91"/>
+<junction x="215.9" y="63.5"/>
+<junction x="215.9" y="48.26"/>
+</segment>
+</net>
+<net name="N$15" class="0">
+<segment>
+<wire x1="137.16" y1="48.26" x2="137.16" y2="33.02" width="0.1524" layer="91"/>
+<wire x1="137.16" y1="33.02" x2="137.16" y2="25.4" width="0.1524" layer="91"/>
+<wire x1="124.46" y1="33.02" x2="137.16" y2="33.02" width="0.1524" layer="91"/>
+<wire x1="124.46" y1="53.34" x2="124.46" y2="33.02" width="0.1524" layer="91"/>
+<wire x1="30.48" y1="53.34" x2="124.46" y2="53.34" width="0.1524" layer="91"/>
+<wire x1="30.48" y1="22.86" x2="30.48" y2="53.34" width="0.1524" layer="91"/>
+<wire x1="35.56" y1="22.86" x2="30.48" y2="22.86" width="0.1524" layer="91"/>
+<junction x="137.16" y="33.02"/>
+<pinref part="RFB1" gate="G$1" pin="1"/>
+<pinref part="RFB2" gate="G$1" pin="2"/>
+<pinref part="U$1" gate="G$1" pin="FB"/>
+</segment>
+</net>
+<net name="N$3" class="0">
+<segment>
+<wire x1="71.12" y1="33.02" x2="66.04" y2="33.02" width="0.1524" layer="91"/>
+<pinref part="CCC" gate="G$1" pin="1"/>
+<pinref part="U$1" gate="G$1" pin="VCC"/>
+</segment>
+</net>
+<net name="N$2" class="0">
+<segment>
+<wire x1="-88.9" y1="35.56" x2="-88.9" y2="30.48" width="0.1524" layer="91"/>
+<wire x1="-20.32" y1="63.5" x2="-20.32" y2="60.96" width="0.1524" layer="91"/>
+<wire x1="-20.32" y1="63.5" x2="27.94" y2="63.5" width="0.1524" layer="91"/>
+<wire x1="-33.02" y1="63.5" x2="-20.32" y2="63.5" width="0.1524" layer="91"/>
+<wire x1="-63.5" y1="63.5" x2="-33.02" y2="63.5" width="0.1524" layer="91"/>
+<wire x1="-66.04" y1="25.4" x2="-66.04" y2="30.48" width="0.1524" layer="91"/>
+<wire x1="-66.04" y1="30.48" x2="-66.04" y2="33.02" width="0.1524" layer="91"/>
+<wire x1="-66.04" 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="40.64" width="0.1524" layer="91"/>
+<wire x1="-63.5" y1="40.64" x2="-63.5" y2="63.5" width="0.1524" layer="91"/>
+<wire x1="-58.42" y1="40.64" x2="-63.5" y2="40.64" width="0.1524" layer="91"/>
+<wire x1="-68.58" y1="30.48" x2="-66.04" y2="30.48" width="0.1524" layer="91"/>
+<wire x1="-88.9" y1="30.48" x2="-68.58" y2="30.48" width="0.1524" layer="91"/>
+<junction x="-20.32" y="63.5"/>
+<junction x="-63.5" y="40.64"/>
+<junction x="-66.04" y="30.48"/>
+<junction x="-68.58" y="30.48"/>
+<junction x="-88.9" y="30.48"/>
+<junction x="-63.5" y="33.02"/>
+<junction x="-33.02" y="63.5"/>
+<pinref part="IN" gate="G$1" pin="P$1"/>
+<pinref part="RIPOW" gate="G$1" pin="2"/>
+<pinref part="LIN" gate="G$1" pin="1"/>
+<pinref part="RUVLO2" gate="G$1" pin="2"/>
+<pinref part="RBP" gate="G$1" pin="2"/>
+<pinref part="CIN$2" gate="G$1" pin="1"/>
+<pinref part="CIN$0" gate="G$1" pin="1"/>
+<pinref part="CIN$1" gate="G$1" pin="1"/>
+<pinref part="DTVS" gate="G$1" pin="C"/>
+</segment>
+</net>
+<net name="N$16" class="0">
+<segment>
+<pinref part="IPOW" gate="G$1" pin="A"/>
+<pinref part="RIPOW" gate="G$1" pin="1"/>
+</segment>
+</net>
+<net name="N$17" class="0">
+<segment>
+<pinref part="OPOW" gate="G$1" pin="A"/>
+<pinref part="ROPOW" gate="G$1" pin="1"/>
+</segment>
+</net>
+</nets>
+</sheet>
+</sheets>
+</schematic>
+</drawing>
+</eagle>
diff --git a/gyro_board/schematic/power_converter_1.19.2012/power_converter.GBL b/gyro_board/schematic/power_converter_1.19.2012/power_converter.GBL
new file mode 100644
index 0000000..4ff399a
--- /dev/null
+++ b/gyro_board/schematic/power_converter_1.19.2012/power_converter.GBL
@@ -0,0 +1,901 @@
+G75*
+G70*
+%OFA0B0*%
+%FSLAX24Y24*%
+%IPPOS*%
+%LPD*%
+%AMOC8*
+5,1,8,0,0,1.08239X$1,22.5*
+%
+%ADD10C,0.0827*%
+%ADD11C,0.0594*%
+%ADD12C,0.0436*%
+%ADD13C,0.0100*%
+%ADD14C,0.0400*%
+D10*
+X005873Y010569D02*
+X006700Y010569D01*
+X006700Y012537D02*
+X005873Y012537D01*
+X024918Y012242D02*
+X025745Y012242D01*
+X025745Y014211D02*
+X024918Y014211D01*
+X024918Y009978D02*
+X025745Y009978D01*
+X025745Y008010D02*
+X024918Y008010D01*
+D11*
+X021050Y007961D03*
+X021050Y009929D03*
+X022534Y012334D03*
+X021142Y013726D03*
+D12*
+X020460Y014161D03*
+X021838Y014654D03*
+X023659Y014211D03*
+X025381Y013473D03*
+X026907Y013866D03*
+X027546Y011799D03*
+X024692Y011455D03*
+X022723Y011750D03*
+X021001Y011701D03*
+X020509Y012341D03*
+X020706Y012882D03*
+X019279Y011750D03*
+X019525Y011160D03*
+X018934Y009782D03*
+X019279Y008847D03*
+X021641Y007518D03*
+X021887Y008305D03*
+X023708Y007518D03*
+X025086Y006681D03*
+X025430Y007223D03*
+X023954Y006337D03*
+X023757Y005549D03*
+X021739Y005549D03*
+X019721Y005549D03*
+X017753Y005549D03*
+X015538Y005549D03*
+X014111Y005549D03*
+X014210Y006435D03*
+X014800Y006829D03*
+X014456Y007518D03*
+X015489Y007518D03*
+X013471Y007075D03*
+X012684Y006386D03*
+X011651Y006435D03*
+X010962Y006386D03*
+X010371Y005648D03*
+X007664Y005845D03*
+X007664Y005303D03*
+X006188Y005303D03*
+X005893Y006484D03*
+X006533Y007419D03*
+X005893Y008108D03*
+X007123Y008994D03*
+X007812Y008305D03*
+X008550Y008945D03*
+X007960Y010077D03*
+X005893Y009339D03*
+X010223Y011061D03*
+X010223Y011652D03*
+X010223Y012242D03*
+X010223Y012882D03*
+X010223Y013522D03*
+X010223Y014112D03*
+X010223Y014752D03*
+X007615Y014801D03*
+X006483Y014801D03*
+X006483Y014112D03*
+X007615Y014063D03*
+X007615Y012980D03*
+X007566Y011849D03*
+X004810Y012193D03*
+X003678Y012242D03*
+X003678Y013276D03*
+X004958Y014112D03*
+X004958Y014801D03*
+X003727Y014703D03*
+X011355Y010667D03*
+X011897Y010667D03*
+X012389Y009831D03*
+X012930Y009831D03*
+X017655Y007469D03*
+X019672Y007469D03*
+X022527Y009634D03*
+X023708Y010126D03*
+X026513Y009043D03*
+X028088Y009978D03*
+X027349Y007567D03*
+X016473Y012685D03*
+X016473Y013226D03*
+X016473Y013817D03*
+X016473Y014358D03*
+X004367Y005352D03*
+D13*
+X003385Y005109D02*
+X003385Y011307D01*
+X007172Y011307D01*
+X007910Y010569D01*
+X010568Y010569D01*
+X010716Y010421D01*
+X010716Y009437D01*
+X014210Y009437D01*
+X015194Y010421D01*
+X018786Y010421D01*
+X020115Y009093D01*
+X021936Y009093D01*
+X021936Y012784D01*
+X022527Y013325D01*
+X024790Y013325D01*
+X025135Y012980D01*
+X027758Y012980D01*
+X027758Y010308D01*
+X026184Y010308D01*
+X026053Y010439D01*
+X025853Y010522D01*
+X024810Y010522D01*
+X024611Y010439D01*
+X024458Y010286D01*
+X024375Y010086D01*
+X024375Y009870D01*
+X024458Y009671D01*
+X024611Y009518D01*
+X024810Y009435D01*
+X025853Y009435D01*
+X026053Y009518D01*
+X026184Y009648D01*
+X027975Y009648D01*
+X028018Y009630D01*
+X028157Y009630D01*
+X028282Y009682D01*
+X028282Y005109D01*
+X007961Y005109D01*
+X007967Y005123D01*
+X010101Y005123D01*
+X010207Y005229D01*
+X010285Y005307D01*
+X010302Y005300D01*
+X010440Y005300D01*
+X010568Y005353D01*
+X010666Y005451D01*
+X010719Y005578D01*
+X010719Y005717D01*
+X010666Y005845D01*
+X010568Y005943D01*
+X010527Y005960D01*
+X010641Y005960D01*
+X010790Y005960D01*
+X010875Y006045D01*
+X010892Y006038D01*
+X011031Y006038D01*
+X011159Y006091D01*
+X011257Y006189D01*
+X011310Y006317D01*
+X011310Y006455D01*
+X011257Y006583D01*
+X011159Y006681D01*
+X011031Y006734D01*
+X010892Y006734D01*
+X010764Y006681D01*
+X010667Y006583D01*
+X010614Y006455D01*
+X010614Y006320D01*
+X010149Y006320D01*
+X010043Y006214D01*
+X009608Y005778D01*
+X008012Y005778D01*
+X008012Y005914D01*
+X007959Y006042D01*
+X007862Y006140D01*
+X007734Y006193D01*
+X007595Y006193D01*
+X007467Y006140D01*
+X007369Y006042D01*
+X007316Y005914D01*
+X007316Y005775D01*
+X007369Y005647D01*
+X007443Y005574D01*
+X007369Y005500D01*
+X007316Y005372D01*
+X007316Y005234D01*
+X007368Y005109D01*
+X006484Y005109D01*
+X006536Y005234D01*
+X006536Y005372D01*
+X006483Y005500D01*
+X006385Y005598D01*
+X006257Y005651D01*
+X006119Y005651D01*
+X005991Y005598D01*
+X005893Y005500D01*
+X005886Y005483D01*
+X004690Y005483D01*
+X004662Y005550D01*
+X005943Y005550D01*
+X006112Y005649D02*
+X004562Y005649D01*
+X004564Y005648D02*
+X004436Y005701D01*
+X004298Y005701D01*
+X004170Y005648D01*
+X004072Y005550D01*
+X004019Y005422D01*
+X004019Y005283D01*
+X004072Y005155D01*
+X004119Y005109D01*
+X003385Y005109D01*
+X003385Y005156D02*
+X004072Y005156D01*
+X004031Y005254D02*
+X003385Y005254D01*
+X003385Y005353D02*
+X004019Y005353D01*
+X004031Y005451D02*
+X003385Y005451D01*
+X003385Y005550D02*
+X004072Y005550D01*
+X004172Y005649D02*
+X003385Y005649D01*
+X003385Y005747D02*
+X007328Y005747D01*
+X007316Y005846D02*
+X003385Y005846D01*
+X003385Y005944D02*
+X007329Y005944D01*
+X007370Y006043D02*
+X003385Y006043D01*
+X003385Y006141D02*
+X007471Y006141D01*
+X007858Y006141D02*
+X009970Y006141D01*
+X009872Y006043D02*
+X007959Y006043D01*
+X008000Y005944D02*
+X009773Y005944D01*
+X009675Y005846D02*
+X008012Y005846D01*
+X007910Y005599D02*
+X007664Y005845D01*
+X007910Y005599D02*
+X009682Y005599D01*
+X010223Y006140D01*
+X010716Y006140D01*
+X010962Y006386D01*
+X011206Y006634D02*
+X028282Y006634D01*
+X028282Y006733D02*
+X011034Y006733D01*
+X010889Y006733D02*
+X003385Y006733D01*
+X003385Y006831D02*
+X028282Y006831D01*
+X028282Y006930D02*
+X003385Y006930D01*
+X003385Y007028D02*
+X028282Y007028D01*
+X028282Y007127D02*
+X003385Y007127D01*
+X003385Y007225D02*
+X028282Y007225D01*
+X028282Y007324D02*
+X003385Y007324D01*
+X003385Y007422D02*
+X028282Y007422D01*
+X028282Y007521D02*
+X003385Y007521D01*
+X003385Y007619D02*
+X028282Y007619D01*
+X028282Y007718D02*
+X003385Y007718D01*
+X003385Y007816D02*
+X028282Y007816D01*
+X028282Y007915D02*
+X003385Y007915D01*
+X003385Y008014D02*
+X028282Y008014D01*
+X028282Y008112D02*
+X003385Y008112D01*
+X003385Y008211D02*
+X028282Y008211D01*
+X028282Y008309D02*
+X003385Y008309D01*
+X003385Y008408D02*
+X028282Y008408D01*
+X028282Y008506D02*
+X003385Y008506D01*
+X003385Y008605D02*
+X028282Y008605D01*
+X028282Y008703D02*
+X003385Y008703D01*
+X003385Y008802D02*
+X028282Y008802D01*
+X028282Y008900D02*
+X003385Y008900D01*
+X003385Y008999D02*
+X028282Y008999D01*
+X028282Y009098D02*
+X021936Y009098D01*
+X021936Y009196D02*
+X028282Y009196D01*
+X028282Y009295D02*
+X021936Y009295D01*
+X021936Y009393D02*
+X028282Y009393D01*
+X028282Y009492D02*
+X025990Y009492D01*
+X026125Y009590D02*
+X028282Y009590D01*
+X027758Y010379D02*
+X026113Y010379D01*
+X025961Y010477D02*
+X027758Y010477D01*
+X027758Y010576D02*
+X021936Y010576D01*
+X021936Y010674D02*
+X027758Y010674D01*
+X027758Y010773D02*
+X021936Y010773D01*
+X021936Y010871D02*
+X027758Y010871D01*
+X027758Y010970D02*
+X021936Y010970D01*
+X021936Y011068D02*
+X027758Y011068D01*
+X027758Y011167D02*
+X021936Y011167D01*
+X021936Y011266D02*
+X027758Y011266D01*
+X027758Y011364D02*
+X021936Y011364D01*
+X021936Y011463D02*
+X027758Y011463D01*
+X027758Y011561D02*
+X021936Y011561D01*
+X021936Y011660D02*
+X027758Y011660D01*
+X027758Y011758D02*
+X021936Y011758D01*
+X021936Y011857D02*
+X027758Y011857D01*
+X027758Y011955D02*
+X021936Y011955D01*
+X021936Y012054D02*
+X027758Y012054D01*
+X027758Y012152D02*
+X021936Y012152D01*
+X021936Y012251D02*
+X027758Y012251D01*
+X027758Y012349D02*
+X021936Y012349D01*
+X021936Y012448D02*
+X027758Y012448D01*
+X027758Y012547D02*
+X021936Y012547D01*
+X021936Y012645D02*
+X027758Y012645D01*
+X027758Y012744D02*
+X021936Y012744D01*
+X022000Y012842D02*
+X027758Y012842D01*
+X027758Y012941D02*
+X022108Y012941D01*
+X022215Y013039D02*
+X025076Y013039D01*
+X024977Y013138D02*
+X022323Y013138D01*
+X022430Y013236D02*
+X024879Y013236D01*
+X025076Y013335D02*
+X028282Y013335D01*
+X028282Y013433D02*
+X024977Y013433D01*
+X024889Y013522D02*
+X022330Y013522D01*
+X021739Y012931D01*
+X021739Y009289D01*
+X020214Y009289D01*
+X018885Y010618D01*
+X018885Y011750D01*
+X018688Y011947D01*
+X016720Y011947D01*
+X016277Y012439D01*
+X016277Y015045D01*
+X028282Y015045D01*
+X028282Y013177D01*
+X025233Y013177D01*
+X024889Y013522D01*
+X025174Y013236D02*
+X028282Y013236D01*
+X028282Y013532D02*
+X016277Y013532D01*
+X016277Y013433D02*
+X022241Y013433D01*
+X022143Y013335D02*
+X016277Y013335D01*
+X016277Y013236D02*
+X022044Y013236D01*
+X021946Y013138D02*
+X016277Y013138D01*
+X016277Y013039D02*
+X021847Y013039D01*
+X021749Y012941D02*
+X016277Y012941D01*
+X016277Y012842D02*
+X021739Y012842D01*
+X021739Y012744D02*
+X016277Y012744D01*
+X016277Y012645D02*
+X021739Y012645D01*
+X021739Y012547D02*
+X016277Y012547D01*
+X016277Y012448D02*
+X021739Y012448D01*
+X021739Y012349D02*
+X016357Y012349D01*
+X016446Y012251D02*
+X021739Y012251D01*
+X021739Y012152D02*
+X016535Y012152D01*
+X016623Y012054D02*
+X021739Y012054D01*
+X021739Y011955D02*
+X016712Y011955D01*
+X015981Y011955D02*
+X009879Y011955D01*
+X009879Y011857D02*
+X015981Y011857D01*
+X015981Y011758D02*
+X009879Y011758D01*
+X009879Y011660D02*
+X015981Y011660D01*
+X015981Y011561D02*
+X009879Y011561D01*
+X009879Y011463D02*
+X015981Y011463D01*
+X015981Y011364D02*
+X009879Y011364D01*
+X009879Y011266D02*
+X015981Y011266D01*
+X015981Y011167D02*
+X009879Y011167D01*
+X009879Y011068D02*
+X015981Y011068D01*
+X015981Y010970D02*
+X009879Y010970D01*
+X009879Y010871D02*
+X015981Y010871D01*
+X015981Y010773D02*
+X010709Y010773D01*
+X010666Y010815D02*
+X009879Y010815D01*
+X009879Y015045D01*
+X015981Y015045D01*
+X015981Y010618D01*
+X015096Y010618D01*
+X014160Y009683D01*
+X011011Y009683D01*
+X011011Y010471D01*
+X010666Y010815D01*
+X010807Y010674D02*
+X015981Y010674D01*
+X015151Y010379D02*
+X018829Y010379D01*
+X018928Y010280D02*
+X015053Y010280D01*
+X014954Y010182D02*
+X019026Y010182D01*
+X019125Y010083D02*
+X014856Y010083D01*
+X014757Y009984D02*
+X019223Y009984D01*
+X019322Y009886D02*
+X014659Y009886D01*
+X014560Y009787D02*
+X019420Y009787D01*
+X019519Y009689D02*
+X014461Y009689D01*
+X014363Y009590D02*
+X019618Y009590D01*
+X019716Y009492D02*
+X014264Y009492D01*
+X014166Y009689D02*
+X011011Y009689D01*
+X011011Y009787D02*
+X014265Y009787D01*
+X014363Y009886D02*
+X011011Y009886D01*
+X011011Y009984D02*
+X014462Y009984D01*
+X014560Y010083D02*
+X011011Y010083D01*
+X011011Y010182D02*
+X014659Y010182D01*
+X014757Y010280D02*
+X011011Y010280D01*
+X011011Y010379D02*
+X014856Y010379D01*
+X014954Y010477D02*
+X011004Y010477D01*
+X010906Y010576D02*
+X015053Y010576D01*
+X015981Y012054D02*
+X009879Y012054D01*
+X009879Y012152D02*
+X015981Y012152D01*
+X015981Y012251D02*
+X009879Y012251D01*
+X009879Y012349D02*
+X015981Y012349D01*
+X015981Y012448D02*
+X009879Y012448D01*
+X009879Y012547D02*
+X015981Y012547D01*
+X015981Y012645D02*
+X009879Y012645D01*
+X009879Y012744D02*
+X015981Y012744D01*
+X015981Y012842D02*
+X009879Y012842D01*
+X009879Y012941D02*
+X015981Y012941D01*
+X015981Y013039D02*
+X009879Y013039D01*
+X009879Y013138D02*
+X015981Y013138D01*
+X015981Y013236D02*
+X009879Y013236D01*
+X009879Y013335D02*
+X015981Y013335D01*
+X015981Y013433D02*
+X009879Y013433D01*
+X009879Y013532D02*
+X015981Y013532D01*
+X015981Y013631D02*
+X009879Y013631D01*
+X009879Y013729D02*
+X015981Y013729D01*
+X015981Y013828D02*
+X009879Y013828D01*
+X009879Y013926D02*
+X015981Y013926D01*
+X015981Y014025D02*
+X009879Y014025D01*
+X009879Y014123D02*
+X015981Y014123D01*
+X015981Y014222D02*
+X009879Y014222D01*
+X009879Y014320D02*
+X015981Y014320D01*
+X015981Y014419D02*
+X009879Y014419D01*
+X009879Y014517D02*
+X015981Y014517D01*
+X015981Y014616D02*
+X009879Y014616D01*
+X009879Y014715D02*
+X015981Y014715D01*
+X015981Y014813D02*
+X009879Y014813D01*
+X009879Y014912D02*
+X015981Y014912D01*
+X015981Y015010D02*
+X009879Y015010D01*
+X009633Y015010D02*
+X003385Y015010D01*
+X003385Y015045D02*
+X009633Y015045D01*
+X009633Y010766D01*
+X008009Y010766D01*
+X007271Y011504D01*
+X003385Y011504D01*
+X003385Y015045D01*
+X003385Y014912D02*
+X009633Y014912D01*
+X009633Y014813D02*
+X003385Y014813D01*
+X003385Y014715D02*
+X009633Y014715D01*
+X009633Y014616D02*
+X003385Y014616D01*
+X003385Y014517D02*
+X009633Y014517D01*
+X009633Y014419D02*
+X003385Y014419D01*
+X003385Y014320D02*
+X009633Y014320D01*
+X009633Y014222D02*
+X003385Y014222D01*
+X003385Y014123D02*
+X009633Y014123D01*
+X009633Y014025D02*
+X003385Y014025D01*
+X003385Y013926D02*
+X009633Y013926D01*
+X009633Y013828D02*
+X003385Y013828D01*
+X003385Y013729D02*
+X009633Y013729D01*
+X009633Y013631D02*
+X003385Y013631D01*
+X003385Y013532D02*
+X009633Y013532D01*
+X009633Y013433D02*
+X003385Y013433D01*
+X003385Y013335D02*
+X009633Y013335D01*
+X009633Y013236D02*
+X003385Y013236D01*
+X003385Y013138D02*
+X009633Y013138D01*
+X009633Y013039D02*
+X003385Y013039D01*
+X003385Y012941D02*
+X009633Y012941D01*
+X009633Y012842D02*
+X003385Y012842D01*
+X003385Y012744D02*
+X009633Y012744D01*
+X009633Y012645D02*
+X003385Y012645D01*
+X003385Y012547D02*
+X009633Y012547D01*
+X009633Y012448D02*
+X003385Y012448D01*
+X003385Y012349D02*
+X009633Y012349D01*
+X009633Y012251D02*
+X003385Y012251D01*
+X003385Y012152D02*
+X009633Y012152D01*
+X009633Y012054D02*
+X003385Y012054D01*
+X003385Y011955D02*
+X009633Y011955D01*
+X009633Y011857D02*
+X003385Y011857D01*
+X003385Y011758D02*
+X009633Y011758D01*
+X009633Y011660D02*
+X003385Y011660D01*
+X003385Y011561D02*
+X009633Y011561D01*
+X009633Y011463D02*
+X007312Y011463D01*
+X007411Y011364D02*
+X009633Y011364D01*
+X009633Y011266D02*
+X007509Y011266D01*
+X007608Y011167D02*
+X009633Y011167D01*
+X009633Y011068D02*
+X007706Y011068D01*
+X007805Y010970D02*
+X009633Y010970D01*
+X009633Y010871D02*
+X007903Y010871D01*
+X008002Y010773D02*
+X009633Y010773D01*
+X010660Y010477D02*
+X003385Y010477D01*
+X003385Y010379D02*
+X010716Y010379D01*
+X010716Y010280D02*
+X003385Y010280D01*
+X003385Y010182D02*
+X010716Y010182D01*
+X010716Y010083D02*
+X003385Y010083D01*
+X003385Y009984D02*
+X010716Y009984D01*
+X010716Y009886D02*
+X003385Y009886D01*
+X003385Y009787D02*
+X010716Y009787D01*
+X010716Y009689D02*
+X003385Y009689D01*
+X003385Y009590D02*
+X010716Y009590D01*
+X010716Y009492D02*
+X003385Y009492D01*
+X003385Y009393D02*
+X019815Y009393D01*
+X019913Y009295D02*
+X003385Y009295D01*
+X003385Y009196D02*
+X020012Y009196D01*
+X020110Y009098D02*
+X003385Y009098D01*
+X003385Y010576D02*
+X007904Y010576D01*
+X007805Y010674D02*
+X003385Y010674D01*
+X003385Y010773D02*
+X007707Y010773D01*
+X007608Y010871D02*
+X003385Y010871D01*
+X003385Y010970D02*
+X007510Y010970D01*
+X007411Y011068D02*
+X003385Y011068D01*
+X003385Y011167D02*
+X007312Y011167D01*
+X007214Y011266D02*
+X003385Y011266D01*
+X003385Y006634D02*
+X010717Y006634D01*
+X010647Y006535D02*
+X003385Y006535D01*
+X003385Y006437D02*
+X010614Y006437D01*
+X010614Y006338D02*
+X003385Y006338D01*
+X003385Y006240D02*
+X010069Y006240D01*
+X010565Y005944D02*
+X028282Y005944D01*
+X028282Y005846D02*
+X010665Y005846D01*
+X010707Y005747D02*
+X028282Y005747D01*
+X028282Y005649D02*
+X010719Y005649D01*
+X010707Y005550D02*
+X028282Y005550D01*
+X028282Y005451D02*
+X010667Y005451D01*
+X010569Y005353D02*
+X028282Y005353D01*
+X028282Y005254D02*
+X010232Y005254D01*
+X010134Y005156D02*
+X028282Y005156D01*
+X028282Y006043D02*
+X011043Y006043D01*
+X010880Y006043D02*
+X010873Y006043D01*
+X011209Y006141D02*
+X028282Y006141D01*
+X028282Y006240D02*
+X011278Y006240D01*
+X011310Y006338D02*
+X028282Y006338D01*
+X028282Y006437D02*
+X011310Y006437D01*
+X011276Y006535D02*
+X028282Y006535D01*
+X024673Y009492D02*
+X021936Y009492D01*
+X021936Y009590D02*
+X024538Y009590D01*
+X024450Y009689D02*
+X021936Y009689D01*
+X021936Y009787D02*
+X024409Y009787D01*
+X024375Y009886D02*
+X021936Y009886D01*
+X021936Y009984D02*
+X024375Y009984D01*
+X024375Y010083D02*
+X021936Y010083D01*
+X021936Y010182D02*
+X024414Y010182D01*
+X024455Y010280D02*
+X021936Y010280D01*
+X021936Y010379D02*
+X024550Y010379D01*
+X024703Y010477D02*
+X021936Y010477D01*
+X021739Y010477D02*
+X019026Y010477D01*
+X019124Y010379D02*
+X021739Y010379D01*
+X021739Y010280D02*
+X019223Y010280D01*
+X019322Y010182D02*
+X021739Y010182D01*
+X021739Y010083D02*
+X019420Y010083D01*
+X019519Y009984D02*
+X021739Y009984D01*
+X021739Y009886D02*
+X019617Y009886D01*
+X019716Y009787D02*
+X021739Y009787D01*
+X021739Y009689D02*
+X019814Y009689D01*
+X019913Y009590D02*
+X021739Y009590D01*
+X021739Y009492D02*
+X020011Y009492D01*
+X020110Y009393D02*
+X021739Y009393D01*
+X021739Y009295D02*
+X020208Y009295D01*
+X018927Y010576D02*
+X021739Y010576D01*
+X021739Y010674D02*
+X018885Y010674D01*
+X018885Y010773D02*
+X021739Y010773D01*
+X021739Y010871D02*
+X018885Y010871D01*
+X018885Y010970D02*
+X021739Y010970D01*
+X021739Y011068D02*
+X018885Y011068D01*
+X018885Y011167D02*
+X021739Y011167D01*
+X021739Y011266D02*
+X018885Y011266D01*
+X018885Y011364D02*
+X021739Y011364D01*
+X021739Y011463D02*
+X018885Y011463D01*
+X018885Y011561D02*
+X021739Y011561D01*
+X021739Y011660D02*
+X018885Y011660D01*
+X018877Y011758D02*
+X021739Y011758D01*
+X021739Y011857D02*
+X018778Y011857D01*
+X016277Y013631D02*
+X028282Y013631D01*
+X028282Y013729D02*
+X016277Y013729D01*
+X016277Y013828D02*
+X028282Y013828D01*
+X028282Y013926D02*
+X016277Y013926D01*
+X016277Y014025D02*
+X028282Y014025D01*
+X028282Y014123D02*
+X016277Y014123D01*
+X016277Y014222D02*
+X028282Y014222D01*
+X028282Y014320D02*
+X016277Y014320D01*
+X016277Y014419D02*
+X028282Y014419D01*
+X028282Y014517D02*
+X016277Y014517D01*
+X016277Y014616D02*
+X028282Y014616D01*
+X028282Y014715D02*
+X016277Y014715D01*
+X016277Y014813D02*
+X028282Y014813D01*
+X028282Y014912D02*
+X016277Y014912D01*
+X016277Y015010D02*
+X028282Y015010D01*
+X011651Y006435D02*
+X011454Y006435D01*
+X010371Y005648D02*
+X010027Y005303D01*
+X007664Y005303D01*
+X007419Y005550D02*
+X006434Y005550D01*
+X006503Y005451D02*
+X007349Y005451D01*
+X007316Y005353D02*
+X006536Y005353D01*
+X006536Y005254D02*
+X007316Y005254D01*
+X007349Y005156D02*
+X006504Y005156D01*
+X006188Y005303D02*
+X004416Y005303D01*
+X004367Y005352D01*
+X004662Y005550D02*
+X004564Y005648D01*
+X006264Y005649D02*
+X007369Y005649D01*
+D14*
+X025332Y009978D02*
+X028088Y009978D01*
+X028088Y014211D01*
+X025332Y014211D01*
+M02*
diff --git a/gyro_board/schematic/power_converter_1.19.2012/power_converter.GBO b/gyro_board/schematic/power_converter_1.19.2012/power_converter.GBO
new file mode 100644
index 0000000..add7431
--- /dev/null
+++ b/gyro_board/schematic/power_converter_1.19.2012/power_converter.GBO
@@ -0,0 +1,10 @@
+G75*
+G70*
+%OFA0B0*%
+%FSLAX24Y24*%
+%IPPOS*%
+%LPD*%
+%AMOC8*
+5,1,8,0,0,1.08239X$1,22.5*
+%
+M02*
diff --git a/gyro_board/schematic/power_converter_1.19.2012/power_converter.GBS b/gyro_board/schematic/power_converter_1.19.2012/power_converter.GBS
new file mode 100644
index 0000000..234d994
--- /dev/null
+++ b/gyro_board/schematic/power_converter_1.19.2012/power_converter.GBS
@@ -0,0 +1,30 @@
+G75*
+G70*
+%OFA0B0*%
+%FSLAX24Y24*%
+%IPPOS*%
+%LPD*%
+%AMOC8*
+5,1,8,0,0,1.08239X$1,22.5*
+%
+%ADD10C,0.0907*%
+%ADD11C,0.0674*%
+D10*
+X005873Y010569D02*
+X006700Y010569D01*
+X006700Y012537D02*
+X005873Y012537D01*
+X024918Y012242D02*
+X025745Y012242D01*
+X025745Y014211D02*
+X024918Y014211D01*
+X024918Y009978D02*
+X025745Y009978D01*
+X025745Y008010D02*
+X024918Y008010D01*
+D11*
+X021050Y007961D03*
+X021050Y009929D03*
+X022534Y012334D03*
+X021142Y013726D03*
+M02*
diff --git a/gyro_board/schematic/power_converter_1.19.2012/power_converter.GTL b/gyro_board/schematic/power_converter_1.19.2012/power_converter.GTL
new file mode 100644
index 0000000..f605a11
--- /dev/null
+++ b/gyro_board/schematic/power_converter_1.19.2012/power_converter.GTL
@@ -0,0 +1,1810 @@
+G75*
+G70*
+%OFA0B0*%
+%FSLAX24Y24*%
+%IPPOS*%
+%LPD*%
+%AMOC8*
+5,1,8,0,0,1.08239X$1,22.5*
+%
+%ADD10C,0.0000*%
+%ADD11R,0.0098X0.0394*%
+%ADD12R,0.0630X0.1063*%
+%ADD13R,0.0433X0.0394*%
+%ADD14R,0.0276X0.0354*%
+%ADD15R,0.0354X0.0276*%
+%ADD16R,0.0512X0.0591*%
+%ADD17R,0.0630X0.0787*%
+%ADD18R,0.0941X0.3740*%
+%ADD19R,0.3429X0.0937*%
+%ADD20R,0.2453X0.2654*%
+%ADD21R,0.0898X0.0639*%
+%ADD22R,0.0315X0.0134*%
+%ADD23R,0.0512X0.0134*%
+%ADD24R,0.0673X0.0902*%
+%ADD25C,0.0827*%
+%ADD26R,0.0358X0.0480*%
+%ADD27R,0.0472X0.0472*%
+%ADD28R,0.0630X0.0710*%
+%ADD29C,0.0594*%
+%ADD30C,0.0436*%
+%ADD31C,0.0100*%
+%ADD32C,0.0120*%
+D10*
+X003235Y004959D02*
+X003235Y015195D01*
+X028432Y015195D01*
+X028432Y004959D01*
+X003235Y004959D01*
+D11*
+X010765Y005800D03*
+X010962Y005800D03*
+X011159Y005800D03*
+X011355Y005800D03*
+X011552Y005800D03*
+X011552Y007464D03*
+X011355Y007464D03*
+X011159Y007464D03*
+X010962Y007464D03*
+X010765Y007464D03*
+D12*
+X005066Y007616D03*
+X003964Y007616D03*
+X003964Y006337D03*
+X005066Y006337D03*
+X005066Y008896D03*
+X003964Y008896D03*
+X012527Y010667D03*
+X013629Y010667D03*
+X013629Y011947D03*
+X012527Y011947D03*
+X012527Y013226D03*
+X013629Y013226D03*
+X013629Y014506D03*
+X012527Y014506D03*
+D13*
+X009426Y006730D03*
+X008757Y006730D03*
+X008757Y005894D03*
+X009426Y005894D03*
+D14*
+X008659Y005254D03*
+X008147Y005254D03*
+X007182Y005254D03*
+X006670Y005254D03*
+X006670Y005746D03*
+X007182Y005746D03*
+X008836Y007370D03*
+X009347Y007370D03*
+X009426Y008748D03*
+X009938Y008748D03*
+X012182Y007419D03*
+X012694Y007419D03*
+X012694Y006927D03*
+X012182Y006927D03*
+X012773Y005795D03*
+X013284Y005795D03*
+D15*
+X012143Y005786D03*
+X012143Y006297D03*
+X010027Y006671D03*
+X010027Y007183D03*
+D16*
+X009475Y008108D03*
+X008806Y008108D03*
+D17*
+X008885Y009880D03*
+X009987Y009880D03*
+D18*
+X011090Y012882D03*
+X008471Y012882D03*
+D19*
+X016720Y011091D03*
+X016720Y008473D03*
+D20*
+X018033Y013423D03*
+D21*
+X015220Y012526D03*
+X015220Y014321D03*
+D22*
+X010716Y010264D03*
+X010716Y010008D03*
+X010716Y009752D03*
+X010716Y009496D03*
+D23*
+X011798Y009496D03*
+X011798Y009752D03*
+X011798Y010008D03*
+X011798Y010264D03*
+D24*
+X011462Y009880D03*
+D25*
+X006700Y010569D02*
+X005873Y010569D01*
+X005873Y012537D02*
+X006700Y012537D01*
+X024918Y012242D02*
+X025745Y012242D01*
+X025745Y014211D02*
+X024918Y014211D01*
+X024918Y009978D02*
+X025745Y009978D01*
+X025745Y008010D02*
+X024918Y008010D01*
+D26*
+X005159Y005352D03*
+X003871Y005352D03*
+D27*
+X007153Y007223D03*
+X007979Y007223D03*
+X025115Y005992D03*
+X025942Y005992D03*
+D28*
+X026740Y005992D03*
+X027860Y005992D03*
+X007978Y006534D03*
+X006859Y006534D03*
+D29*
+X021050Y007961D03*
+X021050Y009929D03*
+X022534Y012334D03*
+X021142Y013726D03*
+D30*
+X020460Y014161D03*
+X021838Y014654D03*
+X023659Y014211D03*
+X025381Y013473D03*
+X026907Y013866D03*
+X027546Y011799D03*
+X024692Y011455D03*
+X022723Y011750D03*
+X021001Y011701D03*
+X020509Y012341D03*
+X020706Y012882D03*
+X019279Y011750D03*
+X019525Y011160D03*
+X018934Y009782D03*
+X019279Y008847D03*
+X021641Y007518D03*
+X021887Y008305D03*
+X023708Y007518D03*
+X025086Y006681D03*
+X025430Y007223D03*
+X023954Y006337D03*
+X023757Y005549D03*
+X021739Y005549D03*
+X019721Y005549D03*
+X017753Y005549D03*
+X015538Y005549D03*
+X014111Y005549D03*
+X014210Y006435D03*
+X014800Y006829D03*
+X014456Y007518D03*
+X015489Y007518D03*
+X013471Y007075D03*
+X012684Y006386D03*
+X011651Y006435D03*
+X010962Y006386D03*
+X010371Y005648D03*
+X007664Y005845D03*
+X007664Y005303D03*
+X006188Y005303D03*
+X005893Y006484D03*
+X006533Y007419D03*
+X005893Y008108D03*
+X007123Y008994D03*
+X007812Y008305D03*
+X008550Y008945D03*
+X007960Y010077D03*
+X005893Y009339D03*
+X010223Y011061D03*
+X010223Y011652D03*
+X010223Y012242D03*
+X010223Y012882D03*
+X010223Y013522D03*
+X010223Y014112D03*
+X010223Y014752D03*
+X007615Y014801D03*
+X006483Y014801D03*
+X006483Y014112D03*
+X007615Y014063D03*
+X007615Y012980D03*
+X007566Y011849D03*
+X004810Y012193D03*
+X003678Y012242D03*
+X003678Y013276D03*
+X004958Y014112D03*
+X004958Y014801D03*
+X003727Y014703D03*
+X011355Y010667D03*
+X011897Y010667D03*
+X012389Y009831D03*
+X012930Y009831D03*
+X017655Y007469D03*
+X019672Y007469D03*
+X022527Y009634D03*
+X023708Y010126D03*
+X026513Y009043D03*
+X028088Y009978D03*
+X027349Y007567D03*
+X016473Y012685D03*
+X016473Y013226D03*
+X016473Y013817D03*
+X016473Y014358D03*
+X004367Y005352D03*
+D31*
+X003871Y005352D01*
+X003385Y005353D02*
+X004367Y005353D01*
+X004367Y005451D02*
+X003385Y005451D01*
+X003385Y005550D02*
+X004367Y005550D01*
+X004367Y005649D02*
+X003385Y005649D01*
+X003385Y005747D02*
+X004367Y005747D01*
+X004367Y005846D02*
+X003385Y005846D01*
+X003385Y005944D02*
+X004367Y005944D01*
+X004367Y006043D02*
+X003385Y006043D01*
+X003385Y006141D02*
+X004367Y006141D01*
+X004367Y006240D02*
+X003385Y006240D01*
+X003385Y006338D02*
+X004367Y006338D01*
+X004367Y006437D02*
+X003385Y006437D01*
+X003385Y006535D02*
+X004367Y006535D01*
+X004367Y006634D02*
+X003385Y006634D01*
+X003385Y006733D02*
+X004367Y006733D01*
+X004367Y006831D02*
+X003385Y006831D01*
+X003385Y006930D02*
+X004367Y006930D01*
+X004367Y007028D02*
+X003385Y007028D01*
+X003385Y007127D02*
+X004367Y007127D01*
+X004367Y007225D02*
+X003385Y007225D01*
+X003385Y007324D02*
+X004367Y007324D01*
+X004367Y007422D02*
+X003385Y007422D01*
+X003385Y007521D02*
+X004367Y007521D01*
+X004367Y007619D02*
+X003385Y007619D01*
+X003385Y007718D02*
+X004367Y007718D01*
+X004367Y007816D02*
+X003385Y007816D01*
+X003385Y007915D02*
+X004367Y007915D01*
+X004367Y008014D02*
+X003385Y008014D01*
+X003385Y008112D02*
+X004367Y008112D01*
+X004367Y008211D02*
+X003385Y008211D01*
+X003385Y008309D02*
+X004367Y008309D01*
+X004367Y008408D02*
+X003385Y008408D01*
+X003385Y008506D02*
+X004367Y008506D01*
+X004367Y008605D02*
+X003385Y008605D01*
+X003385Y008703D02*
+X004367Y008703D01*
+X004367Y008802D02*
+X003385Y008802D01*
+X003385Y008900D02*
+X004367Y008900D01*
+X004367Y008999D02*
+X003385Y008999D01*
+X003385Y009098D02*
+X004367Y009098D01*
+X004367Y009196D02*
+X003385Y009196D01*
+X003385Y009295D02*
+X004367Y009295D01*
+X004367Y009393D02*
+X003385Y009393D01*
+X003385Y009492D02*
+X004367Y009492D01*
+X004367Y009536D02*
+X004367Y005109D01*
+X003385Y005109D01*
+X003385Y015045D01*
+X009633Y015045D01*
+X009633Y010766D01*
+X008009Y010766D01*
+X007271Y011504D01*
+X005302Y011504D01*
+X004712Y010913D01*
+X004712Y009880D01*
+X004367Y009536D01*
+X004422Y009590D02*
+X003385Y009590D01*
+X003385Y009689D02*
+X004520Y009689D01*
+X004619Y009787D02*
+X003385Y009787D01*
+X003385Y009886D02*
+X004712Y009886D01*
+X004712Y009984D02*
+X003385Y009984D01*
+X003385Y010083D02*
+X004712Y010083D01*
+X004712Y010182D02*
+X003385Y010182D01*
+X003385Y010280D02*
+X004712Y010280D01*
+X004712Y010379D02*
+X003385Y010379D01*
+X003385Y010477D02*
+X004712Y010477D01*
+X004712Y010576D02*
+X003385Y010576D01*
+X003385Y010674D02*
+X004712Y010674D01*
+X004712Y010773D02*
+X003385Y010773D01*
+X003385Y010871D02*
+X004712Y010871D01*
+X004768Y010970D02*
+X003385Y010970D01*
+X003385Y011068D02*
+X004867Y011068D01*
+X004965Y011167D02*
+X003385Y011167D01*
+X003385Y011266D02*
+X005064Y011266D01*
+X005162Y011364D02*
+X003385Y011364D01*
+X003385Y011463D02*
+X005261Y011463D01*
+X005401Y011307D02*
+X007172Y011307D01*
+X007910Y010569D01*
+X009436Y010569D01*
+X009436Y009055D01*
+X009235Y009055D01*
+X009158Y008979D01*
+X009158Y008526D01*
+X009090Y008457D01*
+X009090Y007759D01*
+X009166Y007683D01*
+X009436Y007683D01*
+X009436Y007677D01*
+X009156Y007677D01*
+X009080Y007601D01*
+X009080Y007139D01*
+X009156Y007063D01*
+X009400Y007063D01*
+X009406Y007057D01*
+X009156Y007057D01*
+X009080Y006981D01*
+X009080Y006480D01*
+X009156Y006404D01*
+X009436Y006404D01*
+X009436Y005109D01*
+X008414Y005109D01*
+X008414Y005485D01*
+X008338Y005561D01*
+X007955Y005561D01*
+X007927Y005533D01*
+X007886Y005574D01*
+X007959Y005647D01*
+X007987Y005714D01*
+X008410Y005714D01*
+X008410Y005643D01*
+X008487Y005567D01*
+X009027Y005567D01*
+X009103Y005643D01*
+X009103Y006144D01*
+X009027Y006221D01*
+X008487Y006221D01*
+X008423Y006157D01*
+X008423Y006942D01*
+X008347Y007018D01*
+X008346Y007018D01*
+X008346Y007513D01*
+X008269Y007589D01*
+X007689Y007589D01*
+X007613Y007513D01*
+X007613Y007018D01*
+X007609Y007018D01*
+X007533Y006942D01*
+X007533Y006167D01*
+X007467Y006140D01*
+X007377Y006050D01*
+X007374Y006053D01*
+X007232Y006053D01*
+X007303Y006125D01*
+X007303Y006942D01*
+X007227Y007018D01*
+X006490Y007018D01*
+X006414Y006942D01*
+X006414Y006125D01*
+X006485Y006053D01*
+X006479Y006053D01*
+X006403Y005977D01*
+X006403Y005581D01*
+X006385Y005598D01*
+X006257Y005651D01*
+X006119Y005651D01*
+X005991Y005598D01*
+X005893Y005500D01*
+X005840Y005372D01*
+X005840Y005234D01*
+X005892Y005109D01*
+X004662Y005109D01*
+X004662Y005156D01*
+X005872Y005156D01*
+X005840Y005254D02*
+X004703Y005254D01*
+X004715Y005283D02*
+X004715Y005422D01*
+X004662Y005549D01*
+X004662Y009486D01*
+X004958Y009782D01*
+X004958Y010864D01*
+X005401Y011307D01*
+X005359Y011266D02*
+X007214Y011266D01*
+X007312Y011167D02*
+X005260Y011167D01*
+X005162Y011068D02*
+X007411Y011068D01*
+X007510Y010970D02*
+X005063Y010970D01*
+X004965Y010871D02*
+X007608Y010871D01*
+X007707Y010773D02*
+X004958Y010773D01*
+X004958Y010674D02*
+X007805Y010674D01*
+X007904Y010576D02*
+X004958Y010576D01*
+X004958Y010477D02*
+X009436Y010477D01*
+X009436Y010379D02*
+X004958Y010379D01*
+X004958Y010280D02*
+X009436Y010280D01*
+X009436Y010182D02*
+X004958Y010182D01*
+X004958Y010083D02*
+X009436Y010083D01*
+X009436Y009984D02*
+X004958Y009984D01*
+X004958Y009886D02*
+X009436Y009886D01*
+X009436Y009787D02*
+X004958Y009787D01*
+X004865Y009689D02*
+X009436Y009689D01*
+X009436Y009590D02*
+X004766Y009590D01*
+X004668Y009492D02*
+X009436Y009492D01*
+X009436Y009393D02*
+X004662Y009393D01*
+X004662Y009295D02*
+X009436Y009295D01*
+X009436Y009196D02*
+X004662Y009196D01*
+X004662Y009098D02*
+X009436Y009098D01*
+X009633Y009098D02*
+X010536Y009098D01*
+X010536Y009196D02*
+X009633Y009196D01*
+X009633Y009295D02*
+X010536Y009295D01*
+X010536Y009299D02*
+X010536Y008231D01*
+X010641Y008125D01*
+X010976Y007791D01*
+X010868Y007791D01*
+X010662Y007791D01*
+X010586Y007715D01*
+X010586Y007558D01*
+X009861Y008282D01*
+X009861Y008457D01*
+X009785Y008534D01*
+X009694Y008534D01*
+X009694Y008979D01*
+X009633Y009040D01*
+X009633Y010569D01*
+X010027Y010569D01*
+X010076Y010618D01*
+X010568Y010618D01*
+X010962Y010224D01*
+X010962Y009683D01*
+X010949Y009671D01*
+X010927Y009693D01*
+X010504Y009693D01*
+X010428Y009617D01*
+X010428Y009375D01*
+X010504Y009299D01*
+X010536Y009299D01*
+X010428Y009393D02*
+X009633Y009393D01*
+X009633Y009492D02*
+X010428Y009492D01*
+X010428Y009590D02*
+X009633Y009590D01*
+X009633Y009689D02*
+X010500Y009689D01*
+X010716Y009752D02*
+X010716Y010008D01*
+X010716Y010264D01*
+X010808Y010379D02*
+X009633Y010379D01*
+X009633Y010477D02*
+X010709Y010477D01*
+X010610Y010576D02*
+X010033Y010576D01*
+X009879Y010815D02*
+X010666Y010815D01*
+X011159Y010323D01*
+X011159Y009536D01*
+X011003Y009380D01*
+X011003Y009375D01*
+X010927Y009299D01*
+X010922Y009299D01*
+X010912Y009289D01*
+X010912Y008404D01*
+X011326Y007990D01*
+X011330Y007993D01*
+X012462Y007993D01*
+X012611Y007993D01*
+X012643Y007961D01*
+X012684Y007961D01*
+X013127Y007518D01*
+X013767Y007518D01*
+X014013Y007764D01*
+X014013Y009683D01*
+X013324Y009683D01*
+X012979Y010028D01*
+X012979Y015045D01*
+X009879Y015045D01*
+X009879Y010815D01*
+X009879Y010871D02*
+X012979Y010871D01*
+X012979Y010773D02*
+X010709Y010773D01*
+X010807Y010674D02*
+X012979Y010674D01*
+X012979Y010576D02*
+X010906Y010576D01*
+X011004Y010477D02*
+X012979Y010477D01*
+X012979Y010379D02*
+X011103Y010379D01*
+X011159Y010280D02*
+X012979Y010280D01*
+X012979Y010182D02*
+X011159Y010182D01*
+X011159Y010083D02*
+X012979Y010083D01*
+X013023Y009984D02*
+X011159Y009984D01*
+X011159Y009886D02*
+X013121Y009886D01*
+X013220Y009787D02*
+X011159Y009787D01*
+X011159Y009689D02*
+X013318Y009689D01*
+X013422Y009880D02*
+X013176Y010126D01*
+X013176Y015045D01*
+X015981Y015045D01*
+X015981Y012390D01*
+X016523Y011750D01*
+X018491Y011750D01*
+X018639Y011602D01*
+X018639Y010618D01*
+X017851Y009880D01*
+X013422Y009880D01*
+X013416Y009886D02*
+X017858Y009886D01*
+X017963Y009984D02*
+X013318Y009984D01*
+X013219Y010083D02*
+X018068Y010083D01*
+X018173Y010182D02*
+X013176Y010182D01*
+X013176Y010280D02*
+X018278Y010280D01*
+X018383Y010379D02*
+X013176Y010379D01*
+X013176Y010477D02*
+X018488Y010477D01*
+X018594Y010576D02*
+X013176Y010576D01*
+X013176Y010674D02*
+X018639Y010674D01*
+X018639Y010773D02*
+X013176Y010773D01*
+X013176Y010871D02*
+X018639Y010871D01*
+X018639Y010970D02*
+X013176Y010970D01*
+X013176Y011068D02*
+X018639Y011068D01*
+X018639Y011167D02*
+X013176Y011167D01*
+X013176Y011266D02*
+X018639Y011266D01*
+X018639Y011364D02*
+X013176Y011364D01*
+X013176Y011463D02*
+X018639Y011463D01*
+X018639Y011561D02*
+X013176Y011561D01*
+X013176Y011660D02*
+X018582Y011660D01*
+X018778Y011857D02*
+X021739Y011857D01*
+X021739Y011955D02*
+X016712Y011955D01*
+X016720Y011947D02*
+X016277Y012439D01*
+X016277Y015045D01*
+X028282Y015045D01*
+X028282Y013177D01*
+X025233Y013177D01*
+X024889Y013522D01*
+X022330Y013522D01*
+X021739Y012931D01*
+X021739Y009289D01*
+X020214Y009289D01*
+X018885Y010618D01*
+X018885Y011750D01*
+X018688Y011947D01*
+X016720Y011947D01*
+X016623Y012054D02*
+X021739Y012054D01*
+X021739Y012152D02*
+X016535Y012152D01*
+X016446Y012251D02*
+X021739Y012251D01*
+X021739Y012349D02*
+X016357Y012349D01*
+X016277Y012448D02*
+X021739Y012448D01*
+X021739Y012547D02*
+X016277Y012547D01*
+X016277Y012645D02*
+X021739Y012645D01*
+X021739Y012744D02*
+X016277Y012744D01*
+X016277Y012842D02*
+X021739Y012842D01*
+X021749Y012941D02*
+X016277Y012941D01*
+X016277Y013039D02*
+X021847Y013039D01*
+X021946Y013138D02*
+X016277Y013138D01*
+X016277Y013236D02*
+X022044Y013236D01*
+X022143Y013335D02*
+X016277Y013335D01*
+X016277Y013433D02*
+X022241Y013433D01*
+X022527Y013325D02*
+X024790Y013325D01*
+X025135Y012980D01*
+X028282Y012980D01*
+X028282Y010275D01*
+X028157Y010326D01*
+X028018Y010326D01*
+X027890Y010274D01*
+X027793Y010176D01*
+X027740Y010048D01*
+X027740Y009909D01*
+X027793Y009781D01*
+X027890Y009683D01*
+X028006Y009635D01*
+X028006Y006477D01*
+X027491Y006477D01*
+X027415Y006401D01*
+X027415Y005583D01*
+X027491Y005507D01*
+X027652Y005507D01*
+X027652Y005346D01*
+X013474Y005346D01*
+X013474Y005488D01*
+X013476Y005488D01*
+X013552Y005564D01*
+X013552Y006026D01*
+X013476Y006102D01*
+X013093Y006102D01*
+X013029Y006038D01*
+X012964Y006102D01*
+X012581Y006102D01*
+X012505Y006026D01*
+X012505Y005965D01*
+X012450Y005965D01*
+X012450Y005977D01*
+X012374Y006053D01*
+X011912Y006053D01*
+X011836Y005977D01*
+X011836Y005733D01*
+X011684Y005582D01*
+X011535Y005582D01*
+X011535Y005875D01*
+X011535Y005875D01*
+X011535Y006051D01*
+X011458Y006127D01*
+X011252Y006127D01*
+X011195Y006127D01*
+X011257Y006189D01*
+X011310Y006317D01*
+X011310Y006455D01*
+X011257Y006583D01*
+X011159Y006681D01*
+X011031Y006734D01*
+X010945Y006734D01*
+X010945Y006936D01*
+X011028Y006853D01*
+X011133Y006747D01*
+X011914Y006747D01*
+X011914Y006696D01*
+X011990Y006620D01*
+X012374Y006620D01*
+X012450Y006696D01*
+X012450Y007158D01*
+X012435Y007173D01*
+X012450Y007188D01*
+X012450Y007650D01*
+X012374Y007726D01*
+X011990Y007726D01*
+X011914Y007650D01*
+X011914Y007644D01*
+X011731Y007644D01*
+X011731Y007715D01*
+X011682Y007764D01*
+X012536Y007764D01*
+X013029Y007321D01*
+X013865Y007321D01*
+X014210Y007665D01*
+X014210Y009437D01*
+X014407Y009634D01*
+X017901Y009634D01*
+X018540Y010224D01*
+X018983Y010224D01*
+X020115Y009093D01*
+X021936Y009093D01*
+X021936Y012784D01*
+X022527Y013325D01*
+X022430Y013236D02*
+X024879Y013236D01*
+X024977Y013138D02*
+X022323Y013138D01*
+X022215Y013039D02*
+X025076Y013039D01*
+X025174Y013236D02*
+X028282Y013236D01*
+X028282Y013335D02*
+X025076Y013335D01*
+X024977Y013433D02*
+X028282Y013433D01*
+X028282Y013532D02*
+X016277Y013532D01*
+X016277Y013631D02*
+X028282Y013631D01*
+X028282Y013729D02*
+X016277Y013729D01*
+X016277Y013828D02*
+X028282Y013828D01*
+X028282Y013926D02*
+X016277Y013926D01*
+X016277Y014025D02*
+X028282Y014025D01*
+X028282Y014123D02*
+X016277Y014123D01*
+X016277Y014222D02*
+X028282Y014222D01*
+X028282Y014320D02*
+X016277Y014320D01*
+X016277Y014419D02*
+X028282Y014419D01*
+X028282Y014517D02*
+X016277Y014517D01*
+X016277Y014616D02*
+X028282Y014616D01*
+X028282Y014715D02*
+X016277Y014715D01*
+X016277Y014813D02*
+X028282Y014813D01*
+X028282Y014912D02*
+X016277Y014912D01*
+X016277Y015010D02*
+X028282Y015010D01*
+X028282Y012941D02*
+X022108Y012941D01*
+X022000Y012842D02*
+X028282Y012842D01*
+X028282Y012744D02*
+X021936Y012744D01*
+X021936Y012645D02*
+X028282Y012645D01*
+X028282Y012547D02*
+X021936Y012547D01*
+X021936Y012448D02*
+X028282Y012448D01*
+X028282Y012349D02*
+X021936Y012349D01*
+X021936Y012251D02*
+X028282Y012251D01*
+X028282Y012152D02*
+X021936Y012152D01*
+X021936Y012054D02*
+X028282Y012054D01*
+X028282Y011955D02*
+X021936Y011955D01*
+X021936Y011857D02*
+X028282Y011857D01*
+X028282Y011758D02*
+X021936Y011758D01*
+X021936Y011660D02*
+X028282Y011660D01*
+X028282Y011561D02*
+X021936Y011561D01*
+X021936Y011463D02*
+X028282Y011463D01*
+X028282Y011364D02*
+X021936Y011364D01*
+X021936Y011266D02*
+X028282Y011266D01*
+X028282Y011167D02*
+X021936Y011167D01*
+X021936Y011068D02*
+X028282Y011068D01*
+X028282Y010970D02*
+X021936Y010970D01*
+X021936Y010871D02*
+X028282Y010871D01*
+X028282Y010773D02*
+X021936Y010773D01*
+X021936Y010674D02*
+X028282Y010674D01*
+X028282Y010576D02*
+X021936Y010576D01*
+X021936Y010477D02*
+X024703Y010477D01*
+X024611Y010439D02*
+X024810Y010522D01*
+X025853Y010522D01*
+X026053Y010439D01*
+X026206Y010286D01*
+X026288Y010086D01*
+X026288Y009870D01*
+X026206Y009671D01*
+X026053Y009518D01*
+X025853Y009435D01*
+X024810Y009435D01*
+X024611Y009518D01*
+X024458Y009671D01*
+X024375Y009870D01*
+X024375Y010086D01*
+X024458Y010286D01*
+X024611Y010439D01*
+X024550Y010379D02*
+X021936Y010379D01*
+X021936Y010280D02*
+X024455Y010280D01*
+X024414Y010182D02*
+X021936Y010182D01*
+X021936Y010083D02*
+X024375Y010083D01*
+X024375Y009984D02*
+X021936Y009984D01*
+X021936Y009886D02*
+X024375Y009886D01*
+X024409Y009787D02*
+X021936Y009787D01*
+X021936Y009689D02*
+X024450Y009689D01*
+X024538Y009590D02*
+X021936Y009590D01*
+X021936Y009492D02*
+X024673Y009492D01*
+X025990Y009492D02*
+X028006Y009492D01*
+X028006Y009590D02*
+X026125Y009590D01*
+X026213Y009689D02*
+X027885Y009689D01*
+X027790Y009787D02*
+X026254Y009787D01*
+X026288Y009886D02*
+X027749Y009886D01*
+X027740Y009984D02*
+X026288Y009984D01*
+X026288Y010083D02*
+X027754Y010083D01*
+X027798Y010182D02*
+X026249Y010182D01*
+X026208Y010280D02*
+X027906Y010280D01*
+X028269Y010280D02*
+X028282Y010280D01*
+X028282Y010379D02*
+X026113Y010379D01*
+X025961Y010477D02*
+X028282Y010477D01*
+X028186Y009978D02*
+X028088Y009978D01*
+X028186Y009978D02*
+X028186Y005992D01*
+X027860Y005992D01*
+X027415Y005944D02*
+X027185Y005944D01*
+X027185Y005846D02*
+X027415Y005846D01*
+X027415Y005747D02*
+X027185Y005747D01*
+X027185Y005649D02*
+X027415Y005649D01*
+X027449Y005550D02*
+X027152Y005550D01*
+X027185Y005583D02*
+X027185Y006401D01*
+X027109Y006477D01*
+X026372Y006477D01*
+X026295Y006401D01*
+X026295Y006295D01*
+X026232Y006358D01*
+X025652Y006358D01*
+X025576Y006282D01*
+X025576Y005702D01*
+X025652Y005626D01*
+X026232Y005626D01*
+X026295Y005689D01*
+X026295Y005583D01*
+X026372Y005507D01*
+X027109Y005507D01*
+X027185Y005583D01*
+X027652Y005451D02*
+X013474Y005451D01*
+X013474Y005353D02*
+X027652Y005353D01*
+X027415Y006043D02*
+X027185Y006043D01*
+X027185Y006141D02*
+X027415Y006141D01*
+X027415Y006240D02*
+X027185Y006240D01*
+X027185Y006338D02*
+X027415Y006338D01*
+X027451Y006437D02*
+X027149Y006437D01*
+X026740Y005992D02*
+X025942Y005992D01*
+X025576Y005944D02*
+X013552Y005944D01*
+X013552Y005846D02*
+X025576Y005846D01*
+X025576Y005747D02*
+X013552Y005747D01*
+X013552Y005649D02*
+X025629Y005649D01*
+X025576Y006043D02*
+X013536Y006043D01*
+X013033Y006043D02*
+X013024Y006043D01*
+X012773Y005795D02*
+X012763Y005786D01*
+X012143Y005786D01*
+X011759Y005402D01*
+X011405Y005402D01*
+X011355Y005451D01*
+X011355Y005800D01*
+X011535Y005846D02*
+X011836Y005846D01*
+X011836Y005944D02*
+X011535Y005944D01*
+X011535Y006043D02*
+X011901Y006043D01*
+X011651Y005898D02*
+X011651Y006435D01*
+X011310Y006437D02*
+X026331Y006437D01*
+X026295Y006338D02*
+X026252Y006338D01*
+X025632Y006338D02*
+X011310Y006338D01*
+X011278Y006240D02*
+X025576Y006240D01*
+X025576Y006141D02*
+X011209Y006141D01*
+X011159Y005800D02*
+X011159Y005352D01*
+X010962Y005156D01*
+X010273Y005156D01*
+X009928Y005500D01*
+X009928Y006573D01*
+X010027Y006671D01*
+X009485Y006671D01*
+X009426Y006730D01*
+X009080Y006733D02*
+X008423Y006733D01*
+X008423Y006831D02*
+X009080Y006831D01*
+X009080Y006930D02*
+X008423Y006930D01*
+X008346Y007028D02*
+X009127Y007028D01*
+X009092Y007127D02*
+X008346Y007127D01*
+X008346Y007225D02*
+X009080Y007225D01*
+X009080Y007324D02*
+X008346Y007324D01*
+X008346Y007422D02*
+X009080Y007422D01*
+X009080Y007521D02*
+X008337Y007521D01*
+X007979Y007223D02*
+X007978Y007221D01*
+X007978Y006534D01*
+X008423Y006535D02*
+X009080Y006535D01*
+X009080Y006634D02*
+X008423Y006634D01*
+X008423Y006437D02*
+X009122Y006437D01*
+X009436Y006338D02*
+X008423Y006338D01*
+X008423Y006240D02*
+X009436Y006240D01*
+X009436Y006141D02*
+X009103Y006141D01*
+X009103Y006043D02*
+X009436Y006043D01*
+X009436Y005944D02*
+X009103Y005944D01*
+X009103Y005846D02*
+X009436Y005846D01*
+X009436Y005747D02*
+X009103Y005747D01*
+X009103Y005649D02*
+X009436Y005649D01*
+X009436Y005550D02*
+X008349Y005550D01*
+X008410Y005649D02*
+X007960Y005649D01*
+X007944Y005550D02*
+X007910Y005550D01*
+X008097Y005303D02*
+X007664Y005303D01*
+X007231Y005303D01*
+X007182Y005254D01*
+X006670Y005254D02*
+X006237Y005254D01*
+X006188Y005303D01*
+X005943Y005550D02*
+X004662Y005550D01*
+X004662Y005649D02*
+X006112Y005649D01*
+X006264Y005649D02*
+X006403Y005649D01*
+X006403Y005747D02*
+X004662Y005747D01*
+X004662Y005846D02*
+X006403Y005846D01*
+X006403Y005944D02*
+X004662Y005944D01*
+X004662Y006043D02*
+X006468Y006043D01*
+X006414Y006141D02*
+X004662Y006141D01*
+X004662Y006240D02*
+X006414Y006240D01*
+X006414Y006338D02*
+X004662Y006338D01*
+X004662Y006437D02*
+X006414Y006437D01*
+X006414Y006535D02*
+X004662Y006535D01*
+X004662Y006634D02*
+X006414Y006634D01*
+X006414Y006733D02*
+X004662Y006733D01*
+X004662Y006831D02*
+X006414Y006831D01*
+X006414Y006930D02*
+X004662Y006930D01*
+X004662Y007028D02*
+X007613Y007028D01*
+X007613Y007127D02*
+X004662Y007127D01*
+X004662Y007225D02*
+X007613Y007225D01*
+X007613Y007324D02*
+X004662Y007324D01*
+X004662Y007422D02*
+X007613Y007422D01*
+X007621Y007521D02*
+X004662Y007521D01*
+X004662Y007619D02*
+X009098Y007619D01*
+X009131Y007718D02*
+X004662Y007718D01*
+X004662Y007816D02*
+X009090Y007816D01*
+X009090Y007915D02*
+X004662Y007915D01*
+X004662Y008014D02*
+X009090Y008014D01*
+X009090Y008112D02*
+X004662Y008112D01*
+X004662Y008211D02*
+X009090Y008211D01*
+X009090Y008309D02*
+X004662Y008309D01*
+X004662Y008408D02*
+X009090Y008408D01*
+X009138Y008506D02*
+X004662Y008506D01*
+X004662Y008605D02*
+X009158Y008605D01*
+X009158Y008703D02*
+X004662Y008703D01*
+X004662Y008802D02*
+X009158Y008802D01*
+X009158Y008900D02*
+X004662Y008900D01*
+X004662Y008999D02*
+X009178Y008999D01*
+X009674Y008999D02*
+X010536Y008999D01*
+X010536Y008900D02*
+X009694Y008900D01*
+X009694Y008802D02*
+X010536Y008802D01*
+X010536Y008703D02*
+X009694Y008703D01*
+X009694Y008605D02*
+X010536Y008605D01*
+X010536Y008506D02*
+X009812Y008506D01*
+X009861Y008408D02*
+X010536Y008408D01*
+X010536Y008309D02*
+X009861Y008309D01*
+X009933Y008211D02*
+X010556Y008211D01*
+X010654Y008112D02*
+X010031Y008112D01*
+X010130Y008014D02*
+X010753Y008014D01*
+X010851Y007915D02*
+X010228Y007915D01*
+X010327Y007816D02*
+X010950Y007816D01*
+X011159Y007862D02*
+X010716Y008305D01*
+X010716Y009496D01*
+X010918Y009295D02*
+X014013Y009295D01*
+X014013Y009393D02*
+X011016Y009393D01*
+X011115Y009492D02*
+X014013Y009492D01*
+X014013Y009590D02*
+X011159Y009590D01*
+X010962Y009689D02*
+X010931Y009689D01*
+X010962Y009787D02*
+X009633Y009787D01*
+X009633Y009886D02*
+X010962Y009886D01*
+X010962Y009984D02*
+X009633Y009984D01*
+X009633Y010083D02*
+X010962Y010083D01*
+X010962Y010182D02*
+X009633Y010182D01*
+X009633Y010280D02*
+X010906Y010280D01*
+X009987Y009880D02*
+X009938Y009831D01*
+X009938Y008748D01*
+X009426Y008748D02*
+X009426Y008158D01*
+X009475Y008108D01*
+X009781Y008108D01*
+X010568Y007321D01*
+X010568Y005997D01*
+X010765Y005800D01*
+X010962Y005800D02*
+X010962Y005500D01*
+X010912Y005451D01*
+X010568Y005451D01*
+X010371Y005648D01*
+X009436Y005451D02*
+X008414Y005451D01*
+X008414Y005353D02*
+X009436Y005353D01*
+X009436Y005254D02*
+X008414Y005254D01*
+X008414Y005156D02*
+X009436Y005156D01*
+X008757Y005894D02*
+X007714Y005894D01*
+X007664Y005845D01*
+X007281Y005845D01*
+X007182Y005746D01*
+X007303Y006141D02*
+X007471Y006141D01*
+X007533Y006240D02*
+X007303Y006240D01*
+X007303Y006338D02*
+X007533Y006338D01*
+X007533Y006437D02*
+X007303Y006437D01*
+X007303Y006535D02*
+X007533Y006535D01*
+X007533Y006634D02*
+X007303Y006634D01*
+X007303Y006733D02*
+X007533Y006733D01*
+X007533Y006831D02*
+X007303Y006831D01*
+X007303Y006930D02*
+X007533Y006930D01*
+X006859Y006534D02*
+X006670Y006345D01*
+X006670Y005746D01*
+X006670Y005254D01*
+X005873Y005451D02*
+X004703Y005451D01*
+X004715Y005353D02*
+X005840Y005353D01*
+X004715Y005283D02*
+X004662Y005156D01*
+X004367Y005156D02*
+X003385Y005156D01*
+X003385Y005254D02*
+X004367Y005254D01*
+X008097Y005303D02*
+X008147Y005254D01*
+X010765Y006583D02*
+X010962Y006386D01*
+X010765Y006583D02*
+X010765Y007464D01*
+X010962Y007464D02*
+X010962Y007173D01*
+X011208Y006927D01*
+X012182Y006927D01*
+X012450Y006930D02*
+X028006Y006930D01*
+X028006Y007028D02*
+X012450Y007028D01*
+X012450Y007127D02*
+X028006Y007127D01*
+X028006Y007225D02*
+X012450Y007225D01*
+X012450Y007324D02*
+X013025Y007324D01*
+X012916Y007422D02*
+X012450Y007422D01*
+X012450Y007521D02*
+X012806Y007521D01*
+X012697Y007619D02*
+X012450Y007619D01*
+X012382Y007718D02*
+X012587Y007718D01*
+X012536Y007813D02*
+X012694Y007656D01*
+X012694Y007419D01*
+X012694Y006927D01*
+X012694Y006849D01*
+X012143Y006297D01*
+X012049Y006297D01*
+X011651Y005898D01*
+X011552Y005800D01*
+X011535Y005747D02*
+X011836Y005747D01*
+X011751Y005649D02*
+X011535Y005649D01*
+X012384Y006043D02*
+X012521Y006043D01*
+X012388Y006634D02*
+X028006Y006634D01*
+X028006Y006733D02*
+X012450Y006733D01*
+X012450Y006831D02*
+X028006Y006831D01*
+X028006Y006535D02*
+X011276Y006535D01*
+X011206Y006634D02*
+X011977Y006634D01*
+X011914Y006733D02*
+X011034Y006733D01*
+X011049Y006831D02*
+X010945Y006831D01*
+X010945Y006930D02*
+X010951Y006930D01*
+X011265Y007124D02*
+X011282Y007107D01*
+X011914Y007107D01*
+X011914Y007158D01*
+X011929Y007173D01*
+X011914Y007188D01*
+X011914Y007284D01*
+X011731Y007284D01*
+X011731Y007213D01*
+X011655Y007137D01*
+X011449Y007137D01*
+X011373Y007213D01*
+X011373Y007389D01*
+X011372Y007389D01*
+X011372Y007538D01*
+X011373Y007539D01*
+X011373Y007715D01*
+X011422Y007764D01*
+X011338Y007764D01*
+X011338Y007389D01*
+X011338Y007389D01*
+X011338Y007213D01*
+X011306Y007182D01*
+X011306Y007124D01*
+X011265Y007124D01*
+X011306Y007127D02*
+X011914Y007127D01*
+X011914Y007225D02*
+X011731Y007225D01*
+X011552Y007464D02*
+X012138Y007464D01*
+X012182Y007419D01*
+X011982Y007718D02*
+X011728Y007718D01*
+X011405Y007813D02*
+X012536Y007813D01*
+X012730Y007915D02*
+X014013Y007915D01*
+X014013Y007816D02*
+X012828Y007816D01*
+X012927Y007718D02*
+X013967Y007718D01*
+X013868Y007619D02*
+X013025Y007619D01*
+X013124Y007521D02*
+X013770Y007521D01*
+X013967Y007422D02*
+X028006Y007422D01*
+X028006Y007324D02*
+X013868Y007324D01*
+X014065Y007521D02*
+X028006Y007521D01*
+X028006Y007619D02*
+X014164Y007619D01*
+X014210Y007718D02*
+X028006Y007718D01*
+X028006Y007816D02*
+X014210Y007816D01*
+X014210Y007915D02*
+X028006Y007915D01*
+X028006Y008014D02*
+X014210Y008014D01*
+X014210Y008112D02*
+X028006Y008112D01*
+X028006Y008211D02*
+X014210Y008211D01*
+X014210Y008309D02*
+X028006Y008309D01*
+X028006Y008408D02*
+X014210Y008408D01*
+X014210Y008506D02*
+X028006Y008506D01*
+X028006Y008605D02*
+X014210Y008605D01*
+X014210Y008703D02*
+X028006Y008703D01*
+X028006Y008802D02*
+X014210Y008802D01*
+X014210Y008900D02*
+X028006Y008900D01*
+X028006Y008999D02*
+X014210Y008999D01*
+X014210Y009098D02*
+X020110Y009098D01*
+X020012Y009196D02*
+X014210Y009196D01*
+X014210Y009295D02*
+X019913Y009295D01*
+X019815Y009393D02*
+X014210Y009393D01*
+X014264Y009492D02*
+X019716Y009492D01*
+X019618Y009590D02*
+X014363Y009590D01*
+X014013Y009196D02*
+X010912Y009196D01*
+X010912Y009098D02*
+X014013Y009098D01*
+X014013Y008999D02*
+X010912Y008999D01*
+X010912Y008900D02*
+X014013Y008900D01*
+X014013Y008802D02*
+X010912Y008802D01*
+X010912Y008703D02*
+X014013Y008703D01*
+X014013Y008605D02*
+X010912Y008605D01*
+X010912Y008506D02*
+X014013Y008506D01*
+X014013Y008408D02*
+X010912Y008408D01*
+X011007Y008309D02*
+X014013Y008309D01*
+X014013Y008211D02*
+X011105Y008211D01*
+X011204Y008112D02*
+X014013Y008112D01*
+X014013Y008014D02*
+X011302Y008014D01*
+X011159Y007862D02*
+X011159Y007464D01*
+X011338Y007422D02*
+X011372Y007422D01*
+X011355Y007464D02*
+X011355Y007764D01*
+X011405Y007813D01*
+X011376Y007718D02*
+X011338Y007718D01*
+X011338Y007619D02*
+X011373Y007619D01*
+X011372Y007521D02*
+X011338Y007521D01*
+X011338Y007324D02*
+X011373Y007324D01*
+X011373Y007225D02*
+X011338Y007225D01*
+X010586Y007619D02*
+X010524Y007619D01*
+X010589Y007718D02*
+X010425Y007718D01*
+X010027Y007183D02*
+X009534Y007183D01*
+X009347Y007370D01*
+X013538Y005550D02*
+X026329Y005550D01*
+X026295Y005649D02*
+X026255Y005649D01*
+X028006Y009098D02*
+X021936Y009098D01*
+X021936Y009196D02*
+X028006Y009196D01*
+X028006Y009295D02*
+X021936Y009295D01*
+X021936Y009393D02*
+X028006Y009393D01*
+X021739Y009393D02*
+X020110Y009393D01*
+X020208Y009295D02*
+X021739Y009295D01*
+X021739Y009492D02*
+X020011Y009492D01*
+X019913Y009590D02*
+X021739Y009590D01*
+X021739Y009689D02*
+X019814Y009689D01*
+X019716Y009787D02*
+X021739Y009787D01*
+X021739Y009886D02*
+X019617Y009886D01*
+X019519Y009984D02*
+X021739Y009984D01*
+X021739Y010083D02*
+X019420Y010083D01*
+X019322Y010182D02*
+X021739Y010182D01*
+X021739Y010280D02*
+X019223Y010280D01*
+X019124Y010379D02*
+X021739Y010379D01*
+X021739Y010477D02*
+X019026Y010477D01*
+X018927Y010576D02*
+X021739Y010576D01*
+X021739Y010674D02*
+X018885Y010674D01*
+X018885Y010773D02*
+X021739Y010773D01*
+X021739Y010871D02*
+X018885Y010871D01*
+X018885Y010970D02*
+X021739Y010970D01*
+X021739Y011068D02*
+X018885Y011068D01*
+X018885Y011167D02*
+X021739Y011167D01*
+X021739Y011266D02*
+X018885Y011266D01*
+X018885Y011364D02*
+X021739Y011364D01*
+X021739Y011463D02*
+X018885Y011463D01*
+X018885Y011561D02*
+X021739Y011561D01*
+X021739Y011660D02*
+X018885Y011660D01*
+X018877Y011758D02*
+X021739Y011758D01*
+X019125Y010083D02*
+X018387Y010083D01*
+X018280Y009984D02*
+X019223Y009984D01*
+X019322Y009886D02*
+X018174Y009886D01*
+X018067Y009787D02*
+X019420Y009787D01*
+X019519Y009689D02*
+X017960Y009689D01*
+X018494Y010182D02*
+X019026Y010182D01*
+X016516Y011758D02*
+X013176Y011758D01*
+X013176Y011857D02*
+X016432Y011857D01*
+X016349Y011955D02*
+X013176Y011955D01*
+X013176Y012054D02*
+X016266Y012054D01*
+X016182Y012152D02*
+X013176Y012152D01*
+X013176Y012251D02*
+X016099Y012251D01*
+X016015Y012349D02*
+X013176Y012349D01*
+X013176Y012448D02*
+X015981Y012448D01*
+X015981Y012547D02*
+X013176Y012547D01*
+X013176Y012645D02*
+X015981Y012645D01*
+X015981Y012744D02*
+X013176Y012744D01*
+X013176Y012842D02*
+X015981Y012842D01*
+X015981Y012941D02*
+X013176Y012941D01*
+X013176Y013039D02*
+X015981Y013039D01*
+X015981Y013138D02*
+X013176Y013138D01*
+X013176Y013236D02*
+X015981Y013236D01*
+X015981Y013335D02*
+X013176Y013335D01*
+X013176Y013433D02*
+X015981Y013433D01*
+X015981Y013532D02*
+X013176Y013532D01*
+X013176Y013631D02*
+X015981Y013631D01*
+X015981Y013729D02*
+X013176Y013729D01*
+X013176Y013828D02*
+X015981Y013828D01*
+X015981Y013926D02*
+X013176Y013926D01*
+X013176Y014025D02*
+X015981Y014025D01*
+X015981Y014123D02*
+X013176Y014123D01*
+X013176Y014222D02*
+X015981Y014222D01*
+X015981Y014320D02*
+X013176Y014320D01*
+X013176Y014419D02*
+X015981Y014419D01*
+X015981Y014517D02*
+X013176Y014517D01*
+X013176Y014616D02*
+X015981Y014616D01*
+X015981Y014715D02*
+X013176Y014715D01*
+X013176Y014813D02*
+X015981Y014813D01*
+X015981Y014912D02*
+X013176Y014912D01*
+X013176Y015010D02*
+X015981Y015010D01*
+X012979Y015010D02*
+X009879Y015010D01*
+X009879Y014912D02*
+X012979Y014912D01*
+X012979Y014813D02*
+X009879Y014813D01*
+X009879Y014715D02*
+X012979Y014715D01*
+X012979Y014616D02*
+X009879Y014616D01*
+X009879Y014517D02*
+X012979Y014517D01*
+X012979Y014419D02*
+X009879Y014419D01*
+X009879Y014320D02*
+X012979Y014320D01*
+X012979Y014222D02*
+X009879Y014222D01*
+X009879Y014123D02*
+X012979Y014123D01*
+X012979Y014025D02*
+X009879Y014025D01*
+X009879Y013926D02*
+X012979Y013926D01*
+X012979Y013828D02*
+X009879Y013828D01*
+X009879Y013729D02*
+X012979Y013729D01*
+X012979Y013631D02*
+X009879Y013631D01*
+X009879Y013532D02*
+X012979Y013532D01*
+X012979Y013433D02*
+X009879Y013433D01*
+X009879Y013335D02*
+X012979Y013335D01*
+X012979Y013236D02*
+X009879Y013236D01*
+X009879Y013138D02*
+X012979Y013138D01*
+X012979Y013039D02*
+X009879Y013039D01*
+X009879Y012941D02*
+X012979Y012941D01*
+X012979Y012842D02*
+X009879Y012842D01*
+X009879Y012744D02*
+X012979Y012744D01*
+X012979Y012645D02*
+X009879Y012645D01*
+X009879Y012547D02*
+X012979Y012547D01*
+X012979Y012448D02*
+X009879Y012448D01*
+X009879Y012349D02*
+X012979Y012349D01*
+X012979Y012251D02*
+X009879Y012251D01*
+X009879Y012152D02*
+X012979Y012152D01*
+X012979Y012054D02*
+X009879Y012054D01*
+X009879Y011955D02*
+X012979Y011955D01*
+X012979Y011857D02*
+X009879Y011857D01*
+X009879Y011758D02*
+X012979Y011758D01*
+X012979Y011660D02*
+X009879Y011660D01*
+X009879Y011561D02*
+X012979Y011561D01*
+X012979Y011463D02*
+X009879Y011463D01*
+X009879Y011364D02*
+X012979Y011364D01*
+X012979Y011266D02*
+X009879Y011266D01*
+X009879Y011167D02*
+X012979Y011167D01*
+X012979Y011068D02*
+X009879Y011068D01*
+X009879Y010970D02*
+X012979Y010970D01*
+X009633Y010970D02*
+X007805Y010970D01*
+X007903Y010871D02*
+X009633Y010871D01*
+X009633Y010773D02*
+X008002Y010773D01*
+X007706Y011068D02*
+X009633Y011068D01*
+X009633Y011167D02*
+X007608Y011167D01*
+X007509Y011266D02*
+X009633Y011266D01*
+X009633Y011364D02*
+X007411Y011364D01*
+X007312Y011463D02*
+X009633Y011463D01*
+X009633Y011561D02*
+X003385Y011561D01*
+X003385Y011660D02*
+X009633Y011660D01*
+X009633Y011758D02*
+X003385Y011758D01*
+X003385Y011857D02*
+X009633Y011857D01*
+X009633Y011955D02*
+X003385Y011955D01*
+X003385Y012054D02*
+X009633Y012054D01*
+X009633Y012152D02*
+X003385Y012152D01*
+X003385Y012251D02*
+X009633Y012251D01*
+X009633Y012349D02*
+X003385Y012349D01*
+X003385Y012448D02*
+X009633Y012448D01*
+X009633Y012547D02*
+X003385Y012547D01*
+X003385Y012645D02*
+X009633Y012645D01*
+X009633Y012744D02*
+X003385Y012744D01*
+X003385Y012842D02*
+X009633Y012842D01*
+X009633Y012941D02*
+X003385Y012941D01*
+X003385Y013039D02*
+X009633Y013039D01*
+X009633Y013138D02*
+X003385Y013138D01*
+X003385Y013236D02*
+X009633Y013236D01*
+X009633Y013335D02*
+X003385Y013335D01*
+X003385Y013433D02*
+X009633Y013433D01*
+X009633Y013532D02*
+X003385Y013532D01*
+X003385Y013631D02*
+X009633Y013631D01*
+X009633Y013729D02*
+X003385Y013729D01*
+X003385Y013828D02*
+X009633Y013828D01*
+X009633Y013926D02*
+X003385Y013926D01*
+X003385Y014025D02*
+X009633Y014025D01*
+X009633Y014123D02*
+X003385Y014123D01*
+X003385Y014222D02*
+X009633Y014222D01*
+X009633Y014320D02*
+X003385Y014320D01*
+X003385Y014419D02*
+X009633Y014419D01*
+X009633Y014517D02*
+X003385Y014517D01*
+X003385Y014616D02*
+X009633Y014616D01*
+X009633Y014715D02*
+X003385Y014715D01*
+X003385Y014813D02*
+X009633Y014813D01*
+X009633Y014912D02*
+X003385Y014912D01*
+X003385Y015010D02*
+X009633Y015010D01*
+D32*
+X013284Y005795D02*
+X013284Y005156D01*
+X027842Y005156D01*
+X027842Y005992D01*
+X027860Y005992D01*
+M02*
diff --git a/gyro_board/schematic/power_converter_1.19.2012/power_converter.GTO b/gyro_board/schematic/power_converter_1.19.2012/power_converter.GTO
new file mode 100644
index 0000000..73799e1
--- /dev/null
+++ b/gyro_board/schematic/power_converter_1.19.2012/power_converter.GTO
@@ -0,0 +1,233 @@
+G75*
+G70*
+%OFA0B0*%
+%FSLAX24Y24*%
+%IPPOS*%
+%LPD*%
+%AMOC8*
+5,1,8,0,0,1.08239X$1,22.5*
+%
+%ADD10C,0.0120*%
+%ADD11C,0.0070*%
+%ADD12C,0.0040*%
+%ADD13C,0.0030*%
+%ADD14C,0.0080*%
+%ADD15C,0.0050*%
+%ADD16R,0.0394X0.0787*%
+%ADD17R,0.0079X0.0079*%
+%ADD18C,0.0010*%
+D10*
+X006221Y009444D02*
+X007142Y009444D01*
+X003573Y010307D02*
+X003573Y011227D01*
+X023652Y011389D02*
+X023652Y012310D01*
+X027601Y012164D02*
+X027601Y011244D01*
+X023615Y008080D02*
+X023615Y007159D01*
+X027601Y007011D02*
+X027601Y007932D01*
+D11*
+X027717Y009877D02*
+X027717Y010404D01*
+X027454Y010141D02*
+X027981Y010141D01*
+X024044Y010879D02*
+X023517Y010879D01*
+X023780Y011142D02*
+X023780Y010615D01*
+X027717Y014109D02*
+X027717Y014636D01*
+X027454Y014373D02*
+X027981Y014373D01*
+X023945Y014914D02*
+X023418Y014914D01*
+X023682Y014651D02*
+X023682Y015178D01*
+X006152Y014141D02*
+X005625Y014141D01*
+X005889Y014405D02*
+X005889Y013877D01*
+X003965Y012700D02*
+X003438Y012700D01*
+X003702Y012963D02*
+X003702Y012436D01*
+D12*
+X003592Y011771D02*
+X003592Y011653D01*
+X003592Y011712D02*
+X003828Y011712D01*
+X003828Y011771D01*
+X003946Y011712D02*
+X004005Y011712D01*
+X003828Y011529D02*
+X003592Y011529D01*
+X003828Y011529D02*
+X003828Y011352D01*
+X003769Y011293D01*
+X003592Y011293D01*
+X005511Y014394D02*
+X005688Y014394D01*
+X005747Y014453D01*
+X005747Y014630D01*
+X005511Y014630D01*
+X005511Y014753D02*
+X005511Y014871D01*
+X005511Y014812D02*
+X005747Y014812D01*
+X005747Y014871D01*
+X005865Y014812D02*
+X005924Y014812D01*
+X022928Y010983D02*
+X022987Y011042D01*
+X023105Y011042D01*
+X023164Y010983D01*
+X023164Y010865D01*
+X023105Y010806D01*
+X022987Y010806D01*
+X022928Y010865D01*
+X022928Y010983D01*
+X022987Y010679D02*
+X022928Y010620D01*
+X022928Y010443D01*
+X023164Y010443D01*
+X023164Y010317D02*
+X023164Y010199D01*
+X023223Y010258D02*
+X022987Y010258D01*
+X022928Y010199D01*
+X022987Y010679D02*
+X023164Y010679D01*
+D13*
+X027600Y009425D02*
+X027600Y009376D01*
+X027648Y009328D01*
+X027890Y009328D01*
+X027890Y009473D01*
+X027842Y009521D01*
+X027745Y009521D01*
+X027697Y009473D01*
+X027697Y009328D01*
+X027745Y009227D02*
+X027697Y009178D01*
+X027697Y009033D01*
+X027648Y009033D02*
+X027600Y009082D01*
+X027600Y009130D01*
+X027648Y009033D02*
+X027890Y009033D01*
+X027890Y008932D02*
+X027697Y008932D01*
+X027793Y008932D02*
+X027890Y008835D01*
+X027890Y008787D01*
+X027842Y008686D02*
+X027745Y008686D01*
+X027697Y008638D01*
+X027697Y008541D01*
+X027745Y008493D01*
+X027842Y008493D01*
+X027890Y008541D01*
+X027890Y008638D01*
+X027842Y008686D01*
+X027890Y009227D02*
+X027745Y009227D01*
+D14*
+X011710Y007183D02*
+X011710Y006081D01*
+X010607Y006081D01*
+X010607Y007183D01*
+X011710Y007183D01*
+X010844Y006435D02*
+X010844Y006199D01*
+X010824Y006201D01*
+X010804Y006206D01*
+X010785Y006215D01*
+X010768Y006227D01*
+X010754Y006241D01*
+X010742Y006258D01*
+X010733Y006277D01*
+X010728Y006297D01*
+X010726Y006317D01*
+X010728Y006337D01*
+X010733Y006357D01*
+X010742Y006376D01*
+X010754Y006393D01*
+X010768Y006407D01*
+X010785Y006419D01*
+X010804Y006428D01*
+X010824Y006433D01*
+X010844Y006435D01*
+D15*
+X007546Y009585D02*
+X003216Y009585D01*
+X003216Y010175D01*
+X004239Y010175D01*
+X004239Y010963D01*
+X003216Y010963D01*
+X003216Y012144D01*
+X004239Y012144D01*
+X004239Y012931D01*
+X003216Y012931D01*
+X003216Y013522D01*
+X007546Y013522D01*
+X007546Y009585D01*
+X003216Y010175D02*
+X003216Y010963D01*
+X003216Y012144D02*
+X003216Y012931D01*
+X024072Y011258D02*
+X028403Y011258D01*
+X028403Y011849D01*
+X027379Y011849D01*
+X027379Y012636D01*
+X028403Y012636D01*
+X028403Y011849D01*
+X028403Y012636D02*
+X028403Y013817D01*
+X027379Y013817D01*
+X027379Y014604D01*
+X028403Y014604D01*
+X028403Y013817D01*
+X028403Y014604D02*
+X028403Y015195D01*
+X024072Y015195D01*
+X024072Y011258D01*
+X024072Y010963D02*
+X028403Y010963D01*
+X028403Y010372D01*
+X027379Y010372D01*
+X027379Y009585D01*
+X028403Y009585D01*
+X028403Y008404D01*
+X027379Y008404D01*
+X027379Y007616D01*
+X028403Y007616D01*
+X028403Y007026D01*
+X024072Y007026D01*
+X024072Y010963D01*
+X028403Y010372D02*
+X028403Y009585D01*
+X028403Y008404D02*
+X028403Y007616D01*
+D16*
+X004279Y005352D03*
+D17*
+X007527Y007223D03*
+X025489Y005992D03*
+D18*
+X021288Y008330D02*
+X021288Y008430D01*
+X021288Y009314D02*
+X021288Y009415D01*
+X021238Y009364D02*
+X021338Y009364D01*
+X022414Y012789D02*
+X022343Y012860D01*
+X021718Y013485D02*
+X021647Y013556D01*
+X021718Y013556D02*
+X021647Y013485D01*
+M02*
diff --git a/gyro_board/schematic/power_converter_1.19.2012/power_converter.GTP b/gyro_board/schematic/power_converter_1.19.2012/power_converter.GTP
new file mode 100644
index 0000000..5ba0035
--- /dev/null
+++ b/gyro_board/schematic/power_converter_1.19.2012/power_converter.GTP
@@ -0,0 +1,122 @@
+G75*
+G70*
+%OFA0B0*%
+%FSLAX24Y24*%
+%IPPOS*%
+%LPD*%
+%AMOC8*
+5,1,8,0,0,1.08239X$1,22.5*
+%
+%ADD10R,0.0098X0.0394*%
+%ADD11R,0.0630X0.1063*%
+%ADD12R,0.0433X0.0394*%
+%ADD13R,0.0276X0.0354*%
+%ADD14R,0.0354X0.0276*%
+%ADD15R,0.0512X0.0591*%
+%ADD16R,0.0630X0.0787*%
+%ADD17R,0.0941X0.3740*%
+%ADD18R,0.3429X0.0937*%
+%ADD19R,0.2453X0.2654*%
+%ADD20R,0.0898X0.0639*%
+%ADD21R,0.0315X0.0134*%
+%ADD22R,0.0512X0.0134*%
+%ADD23R,0.0673X0.0902*%
+%ADD24R,0.0358X0.0480*%
+%ADD25R,0.0472X0.0472*%
+%ADD26R,0.0630X0.0710*%
+D10*
+X010765Y005800D03*
+X010962Y005800D03*
+X011159Y005800D03*
+X011355Y005800D03*
+X011552Y005800D03*
+X011552Y007464D03*
+X011355Y007464D03*
+X011159Y007464D03*
+X010962Y007464D03*
+X010765Y007464D03*
+D11*
+X005066Y007616D03*
+X003964Y007616D03*
+X003964Y006337D03*
+X005066Y006337D03*
+X005066Y008896D03*
+X003964Y008896D03*
+X012527Y010667D03*
+X013629Y010667D03*
+X013629Y011947D03*
+X012527Y011947D03*
+X012527Y013226D03*
+X013629Y013226D03*
+X013629Y014506D03*
+X012527Y014506D03*
+D12*
+X009426Y006730D03*
+X008757Y006730D03*
+X008757Y005894D03*
+X009426Y005894D03*
+D13*
+X006670Y005254D03*
+X007182Y005254D03*
+X008147Y005254D03*
+X008659Y005254D03*
+X007182Y005746D03*
+X006670Y005746D03*
+X008836Y007370D03*
+X009347Y007370D03*
+X009426Y008748D03*
+X009938Y008748D03*
+X012182Y007419D03*
+X012694Y007419D03*
+X012694Y006927D03*
+X012182Y006927D03*
+X012773Y005795D03*
+X013284Y005795D03*
+D14*
+X012143Y005786D03*
+X012143Y006297D03*
+X010027Y006671D03*
+X010027Y007183D03*
+D15*
+X009475Y008108D03*
+X008806Y008108D03*
+D16*
+X008885Y009880D03*
+X009987Y009880D03*
+D17*
+X011090Y012882D03*
+X008471Y012882D03*
+D18*
+X016720Y011091D03*
+X016720Y008473D03*
+D19*
+X018033Y013423D03*
+D20*
+X015220Y012526D03*
+X015220Y014321D03*
+D21*
+X010716Y010264D03*
+X010716Y010008D03*
+X010716Y009752D03*
+X010716Y009496D03*
+D22*
+X011798Y009496D03*
+X011798Y009752D03*
+X011798Y010008D03*
+X011798Y010264D03*
+D23*
+X011462Y009880D03*
+D24*
+X005159Y005352D03*
+X003871Y005352D03*
+D25*
+X007153Y007223D03*
+X007979Y007223D03*
+X025115Y005992D03*
+X025942Y005992D03*
+D26*
+X026740Y005992D03*
+X027860Y005992D03*
+X007978Y006534D03*
+X006859Y006534D03*
+M02*
diff --git a/gyro_board/schematic/power_converter_1.19.2012/power_converter.GTS b/gyro_board/schematic/power_converter_1.19.2012/power_converter.GTS
new file mode 100644
index 0000000..a44a5af
--- /dev/null
+++ b/gyro_board/schematic/power_converter_1.19.2012/power_converter.GTS
@@ -0,0 +1,142 @@
+G75*
+G70*
+%OFA0B0*%
+%FSLAX24Y24*%
+%IPPOS*%
+%LPD*%
+%AMOC8*
+5,1,8,0,0,1.08239X$1,22.5*
+%
+%ADD10R,0.0178X0.0474*%
+%ADD11R,0.0710X0.1143*%
+%ADD12R,0.0513X0.0474*%
+%ADD13R,0.0356X0.0434*%
+%ADD14R,0.0434X0.0356*%
+%ADD15R,0.0592X0.0671*%
+%ADD16R,0.0710X0.0867*%
+%ADD17R,0.1021X0.3820*%
+%ADD18R,0.3509X0.1017*%
+%ADD19R,0.2533X0.2734*%
+%ADD20R,0.0978X0.0719*%
+%ADD21R,0.0395X0.0214*%
+%ADD22R,0.0592X0.0214*%
+%ADD23R,0.0753X0.0982*%
+%ADD24C,0.0907*%
+%ADD25R,0.0438X0.0560*%
+%ADD26R,0.0552X0.0552*%
+%ADD27R,0.0710X0.0790*%
+%ADD28C,0.0674*%
+D10*
+X010765Y005800D03*
+X010962Y005800D03*
+X011159Y005800D03*
+X011355Y005800D03*
+X011552Y005800D03*
+X011552Y007464D03*
+X011355Y007464D03*
+X011159Y007464D03*
+X010962Y007464D03*
+X010765Y007464D03*
+D11*
+X005066Y007616D03*
+X003964Y007616D03*
+X003964Y006337D03*
+X005066Y006337D03*
+X005066Y008896D03*
+X003964Y008896D03*
+X012527Y010667D03*
+X013629Y010667D03*
+X013629Y011947D03*
+X012527Y011947D03*
+X012527Y013226D03*
+X013629Y013226D03*
+X013629Y014506D03*
+X012527Y014506D03*
+D12*
+X009426Y006730D03*
+X008757Y006730D03*
+X008757Y005894D03*
+X009426Y005894D03*
+D13*
+X006670Y005254D03*
+X007182Y005254D03*
+X008147Y005254D03*
+X008659Y005254D03*
+X007182Y005746D03*
+X006670Y005746D03*
+X008836Y007370D03*
+X009347Y007370D03*
+X009426Y008748D03*
+X009938Y008748D03*
+X012182Y007419D03*
+X012694Y007419D03*
+X012694Y006927D03*
+X012182Y006927D03*
+X012773Y005795D03*
+X013284Y005795D03*
+D14*
+X012143Y005786D03*
+X012143Y006297D03*
+X010027Y006671D03*
+X010027Y007183D03*
+D15*
+X009475Y008108D03*
+X008806Y008108D03*
+D16*
+X008885Y009880D03*
+X009987Y009880D03*
+D17*
+X011090Y012882D03*
+X008471Y012882D03*
+D18*
+X016720Y011091D03*
+X016720Y008473D03*
+D19*
+X018033Y013423D03*
+D20*
+X015220Y012526D03*
+X015220Y014321D03*
+D21*
+X010716Y010264D03*
+X010716Y010008D03*
+X010716Y009752D03*
+X010716Y009496D03*
+D22*
+X011798Y009496D03*
+X011798Y009752D03*
+X011798Y010008D03*
+X011798Y010264D03*
+D23*
+X011462Y009880D03*
+D24*
+X006700Y010569D02*
+X005873Y010569D01*
+X005873Y012537D02*
+X006700Y012537D01*
+X024918Y012242D02*
+X025745Y012242D01*
+X025745Y014211D02*
+X024918Y014211D01*
+X024918Y009978D02*
+X025745Y009978D01*
+X025745Y008010D02*
+X024918Y008010D01*
+D25*
+X005159Y005352D03*
+X003871Y005352D03*
+D26*
+X007153Y007223D03*
+X007979Y007223D03*
+X025115Y005992D03*
+X025942Y005992D03*
+D27*
+X026740Y005992D03*
+X027860Y005992D03*
+X007978Y006534D03*
+X006859Y006534D03*
+D28*
+X021050Y007961D03*
+X021050Y009929D03*
+X022534Y012334D03*
+X021142Y013726D03*
+M02*
diff --git a/gyro_board/schematic/power_converter_1.19.2012/power_converter.TXT b/gyro_board/schematic/power_converter_1.19.2012/power_converter.TXT
new file mode 100644
index 0000000..a9613e2
--- /dev/null
+++ b/gyro_board/schematic/power_converter_1.19.2012/power_converter.TXT
@@ -0,0 +1,103 @@
+%
+M48
+M72
+T01C0.0236
+T02C0.0354
+T03C0.0551
+%
+T01
+X4367Y5352
+X6188Y5303
+X7664Y5303
+X7664Y5845
+X5893Y6484
+X6533Y7419
+X5893Y8108
+X7123Y8994
+X7812Y8305
+X8550Y8945
+X7960Y10077
+X5893Y9339
+X10223Y11061
+X10223Y11652
+X10223Y12242
+X10223Y12882
+X10223Y13522
+X10223Y14112
+X10223Y14752
+X7615Y14801
+X6483Y14801
+X6483Y14112
+X7615Y14063
+X7615Y12980
+X7566Y11849
+X4810Y12193
+X3678Y12242
+X3678Y13276
+X4958Y14112
+X4958Y14801
+X3727Y14703
+X11355Y10667
+X11897Y10667
+X12389Y9831
+X12930Y9831
+X14456Y7518
+X15489Y7518
+X14800Y6829
+X14210Y6435
+X13471Y7075
+X12684Y6386
+X11651Y6435
+X10962Y6386
+X10371Y5648
+X14111Y5549
+X15538Y5549
+X17753Y5549
+X19721Y5549
+X21739Y5549
+X23757Y5549
+X23954Y6337
+X25086Y6681
+X25430Y7223
+X23708Y7518
+X21887Y8305
+X21641Y7518
+X19672Y7469
+X17655Y7469
+X19279Y8847
+X18934Y9782
+X19525Y11160
+X19279Y11750
+X20509Y12341
+X20706Y12882
+X21001Y11701
+X22723Y11750
+X24692Y11455
+X23708Y10126
+X22527Y9634
+X26513Y9043
+X28088Y9978
+X27546Y11799
+X25381Y13473
+X26907Y13866
+X23659Y14211
+X21838Y14654
+X20460Y14161
+X16473Y14358
+X16473Y13817
+X16473Y13226
+X16473Y12685
+X27349Y7567
+T02
+X21050Y7961
+X21050Y9929
+X22534Y12334
+X21142Y13726
+T03
+X25332Y14211
+X25332Y12242
+X25332Y9978
+X25332Y8010
+X6286Y10569
+X6286Y12537
+M30
diff --git a/gyro_board/schematic/power_converter_1.19.2012/power_converter.ipc b/gyro_board/schematic/power_converter_1.19.2012/power_converter.ipc
new file mode 100644
index 0000000..6ca2dbd
--- /dev/null
+++ b/gyro_board/schematic/power_converter_1.19.2012/power_converter.ipc
@@ -0,0 +1,177 @@
+C IPC-D-356 generated by EAGLE Version 5.11.0 Copyright (c) 1988-2010 CadSoft
+C Database /home/austin/local/robotics/frc971/2012/trunk/src/gyro_board/schematic/power_converter.brd -- Exported at 1/19/12 12:29 AM
+C
+P JOB EAGLE 5.11 NETLIST, DATE: 1/19/12 12:29 AM
+P UNITS CUST 0
+P DIM N
+317GND VIA D 23PA00X 8415Y 1476X 436Y 436
+317GND VIA D 23PA00X 11564Y 1870X 436Y 436
+317GND VIA D 23PA00X 21850Y 1722X 436Y 436
+317GND VIA D 23PA00X 20718Y 1377X 436Y 436
+317GND VIA D 23PA00X 20521Y 590X 436Y 436
+317GND VIA D 23PA00X 18503Y 590X 436Y 436
+317GND VIA D 23PA00X 16486Y 590X 436Y 436
+317GND VIA D 23PA00X 14517Y 590X 436Y 436
+317GND VIA D 23PA00X 12303Y 590X 436Y 436
+317GND VIA D 23PA00X 10875Y 590X 436Y 436
+317GND VIA D 23PA00X 9448Y 1427X 436Y 436
+317GND VIA D 23PA00X 10236Y 2116X 436Y 436
+317GND VIA D 23PA00X 11220Y 2559X 436Y 436
+317GND VIA D 23PA00X 10974Y 1476X 436Y 436
+317GND VIA D 23PA00X 12253Y 2559X 436Y 436
+317GND VIA D 23PA00X 14419Y 2509X 436Y 436
+317GND VIA D 23PA00X 16437Y 2509X 436Y 436
+317GND VIA D 23PA00X 15698Y 4822X 436Y 436
+317GND VIA D 23PA00X 16043Y 3887X 436Y 436
+317GND VIA D 23PA00X 19291Y 4675X 436Y 436
+317GND VIA D 23PA00X 18651Y 3346X 436Y 436
+317GND VIA D 23PA00X 18405Y 2559X 436Y 436
+317GND VIA D 23PA00X 20472Y 2559X 436Y 436
+317GND VIA D 23PA00X 22194Y 2263X 436Y 436
+317GND VIA D 23PA00X 24114Y 2608X 436Y 436
+317GND VIA D 23PA00X 23277Y 4084X 436Y 436
+317GND VIA D 23PA00X 20472Y 5167X 436Y 436
+317GND VIA D 23PA00X 19488Y 6791X 436Y 436
+317GND VIA D 23PA00X 21456Y 6496X 436Y 436
+317GND VIA D 23PA00X 24311Y 6840X 436Y 436
+317GND VIA D 23PA00X 2657Y 4379X 436Y 436
+317GND VIA D 23PA00X 2657Y 3149X 436Y 436
+317GND VIA D 23PA00X 2657Y 1525X 436Y 436
+317GND VIA D 23PA00X 3297Y 2460X 436Y 436
+317GND VIA D 23PA00X 4576Y 3346X 436Y 436
+317GND VIA D 23PA00X 5314Y 3986X 436Y 436
+317GND VIA D 23PA00X 4724Y 5118X 436Y 436
+317GND VIA D 23PA00X 3887Y 4035X 436Y 436
+317N$1 VIA D 23PA00X 7726Y 1427X 436Y 436
+317N$1 VIA D 23PA00X 4429Y 885X 436Y 436
+317N$2 VIA D 23PA00X 1131Y 393X 436Y 436
+317N$2 VIA D 23PA00X 2952Y 344X 436Y 436
+317N$2 VIA D 23PA00X 492Y 9744X 436Y 436
+317N$2 VIA D 23PA00X 442Y 8316X 436Y 436
+317N$2 VIA D 23PA00X 442Y 7283X 436Y 436
+317N$2 VIA D 23PA00X 1574Y 7234X 436Y 436
+317N$2 VIA D 23PA00X 4330Y 6889X 436Y 436
+317N$2 VIA D 23PA00X 4379Y 8021X 436Y 436
+317N$2 VIA D 23PA00X 4379Y 9104X 436Y 436
+317N$2 VIA D 23PA00X 3248Y 9153X 436Y 436
+317N$2 VIA D 23PA00X 1722Y 9153X 436Y 436
+317N$2 VIA D 23PA00X 1722Y 9842X 436Y 436
+317N$2 VIA D 23PA00X 3248Y 9842X 436Y 436
+317N$2 VIA D 23PA00X 4379Y 9842X 436Y 436
+317N$4 VIA D 23PA00X 7135Y 688X 436Y 436
+317N$4 VIA D 23PA00X 4429Y 344X 436Y 436
+317N$13 VIA D 23PA00X 9153Y 4872X 436Y 436
+317N$13 VIA D 23PA00X 9694Y 4872X 436Y 436
+317N$13 VIA D 23PA00X 8661Y 5708X 436Y 436
+317N$13 VIA D 23PA00X 8120Y 5708X 436Y 436
+317N$13 VIA D 23PA00X 6988Y 6102X 436Y 436
+317N$13 VIA D 23PA00X 6988Y 6692X 436Y 436
+317N$13 VIA D 23PA00X 6988Y 7283X 436Y 436
+317N$13 VIA D 23PA00X 6988Y 7923X 436Y 436
+317N$13 VIA D 23PA00X 6988Y 8562X 436Y 436
+317N$13 VIA D 23PA00X 6988Y 9153X 436Y 436
+317N$13 VIA D 23PA00X 6988Y 9793X 436Y 436
+317N$14 VIA D 23PA00X 22145Y 8513X 436Y 436
+317N$14 VIA D 23PA00X 20423Y 9251X 436Y 436
+317N$14 VIA D 23PA00X 23671Y 8907X 436Y 436
+317N$14 VIA D 23PA00X 17470Y 7923X 436Y 436
+317N$14 VIA D 23PA00X 17224Y 9202X 436Y 436
+317N$14 VIA D 23PA00X 13238Y 9399X 436Y 436
+317N$14 VIA D 23PA00X 13238Y 8858X 436Y 436
+317N$14 VIA D 23PA00X 13238Y 8267X 436Y 436
+317N$14 VIA D 23PA00X 13238Y 7726X 436Y 436
+317N$14 VIA D 23PA00X 16289Y 6200X 436Y 436
+317N$14 VIA D 23PA00X 17765Y 6742X 436Y 436
+317N$14 VIA D 23PA00X 16043Y 6791X 436Y 436
+317N$14 VIA D 23PA00X 17273Y 7381X 436Y 436
+317N$14 VIA D 23PA00X 18602Y 9694X 436Y 436
+317N$14 VIA D 23PA00X 24852Y 5019X 436Y 436
+327N$1 CBP -1 A01X 5521Y 935X 433Y 393R 0
+327GND CBP -2 A01X 6190Y 935X 433Y 393R 0
+327N$3 CCC -1 A01X 8946Y 1968X 275Y 354R 0
+327GND CCC -2 A01X 9458Y 1968X 275Y 354R 0
+327N$7 CCOMP -1 A01X 6112Y 2411X 275Y 354R180
+327GND CCOMP -2 A01X 5600Y 2411X 275Y 354R180
+327N$5 CCOMP2-1 A01X 6190Y 1771X 433Y 393R180
+327GND CCOMP2-2 A01X 5521Y 1771X 433Y 393R180
+327N$2 CIN$0 -1 A01X 728Y 3937X 629Y1062R 0
+327GND CIN$0 -2 A01X 1830Y 3937X 629Y1062R 0
+327N$2 CIN$1 -1 A01X 728Y 1377X 629Y1062R 0
+327GND CIN$1 -2 A01X 1830Y 1377X 629Y1062R 0
+327N$2 CIN$2 -1 A01X 728Y 2657X 629Y1062R 0
+327GND CIN$2 -2 A01X 1830Y 2657X 629Y1062R 0
+317N$14 COUT$0-+ D 35PA00X 17814Y 4970X 594Y 594R270
+317GND COUT$0-- D 35PA00X 17814Y 3001X 594Y 594R270
+317N$14 COUT$1-+ D 35PA00X 17906Y 8766X 594Y 594R315
+317GND COUT$1-- D 35PA00X 19298Y 7374X 594Y 594R315
+327N$8 CRAMP -1 A01X 6240Y 3149X 511Y 590R180
+327GND CRAMP -2 A01X 5570Y 3149X 511Y 590R180
+327N$13 CSEP$0-1 A01X 9291Y 8267X 629Y1062R 0
+327N$12 CSEP$0-2 A01X 10393Y 8267X 629Y1062R 0
+327N$13 CSEP$1-1 A01X 9291Y 9547X 629Y1062R 0
+327N$12 CSEP$1-2 A01X 10393Y 9547X 629Y1062R 0
+327N$13 CSEP$2-1 A01X 9291Y 6988X 629Y1062R 0
+327N$12 CSEP$2-2 A01X 10393Y 6988X 629Y1062R 0
+327N$13 CSEP$3-1 A01X 9291Y 5708X 629Y1062R 0
+327N$12 CSEP$3-2 A01X 10393Y 5708X 629Y1062R 0
+327N$12 D1 -ANODE$0 A01X 11984Y 9362X 639Y 897R270
+327N$12 D1 -ANODE$1 A01X 11984Y 7566X 639Y 897R270
+327N$14 D1 -CATHODE A01X 14797Y 8464X2653Y2452R270
+327GND DTVS -ANODE A01X 1923Y 393X 358Y 480R180
+327N$2 DTVS -CATHODE A01X 635Y 393X 358Y 480R180
+317N$2 IN -P$1 D 55PA00X 3051Y 7578X 826Y1653R 0
+317GND IN -P$2 D 55PA00X 3051Y 5610X 826Y1653R 0
+327N$16 IPOW -A A01X 4744Y 2263X 472Y 472R 90
+327GND IPOW -C A01X 3917Y 2263X 472Y 472R 90
+327N$2 LIN -P$1 A01X 5236Y 7923X 940Y3740R 0
+327N$13 LIN -P$2 A01X 7854Y 7923X 940Y3740R 0
+327GND LOUT -P$1 A01X 13484Y 3513X 937Y3429R 90
+327N$12 LOUT -P$2 A01X 13484Y 6131X 937Y3429R 90
+327N$13 M1 -D$0 A01X 8226Y 4921X 901Y 673R270
+327N$13 M1 -D$1 A01X 8562Y 5305X 133Y 511R270
+327N$13 M1 -D$2 A01X 8562Y 5049X 133Y 511R270
+327N$13 M1 -D$3 A01X 8562Y 4793X 133Y 511R270
+327N$13 M1 -D$4 A01X 8562Y 4537X 133Y 511R270
+327N$11 M1 -G A01X 7480Y 4537X 314Y 133R 0
+327N$10 M1 -S$0 A01X 7480Y 5305X 314Y 133R 0
+327N$10 M1 -S$1 A01X 7480Y 5049X 314Y 133R 0
+327N$10 M1 -S$2 A01X 7480Y 4793X 314Y 133R 0
+327N$17 OPOW -A A01X 22706Y 1033X 472Y 472R 90
+327GND OPOW -C A01X 21879Y 1033X 472Y 472R 90
+317GND OUT -P$1 D 55PA00X 22096Y 7283X 826Y1653R180
+317N$14 OUT -P$2 D 55PA00X 22096Y 9251X 826Y1653R180
+317GND OUT1 -P$1 D 55PA00X 22096Y 3051X 826Y1653R180
+317N$14 OUT1 -P$2 D 55PA00X 22096Y 5019X 826Y1653R180
+327N$1 RBP -1 A01X 3946Y 787X 275Y 354R180
+327N$2 RBP -2 A01X 3435Y 787X 275Y 354R180
+327N$7 RCOMP -1 A01X 6791Y 2224X 275Y 354R270
+327N$5 RCOMP -2 A01X 6791Y 1712X 275Y 354R270
+327GND RFADJ -1 A01X 9458Y 2460X 275Y 354R180
+327N$9 RFADJ -2 A01X 8946Y 2460X 275Y 354R180
+327N$15 RFB1 -1 A01X 8907Y 826X 275Y 354R 90
+327GND RFB1 -2 A01X 8907Y 1338X 275Y 354R 90
+327N$14 RFB2 -1 A01X 10049Y 836X 275Y 354R180
+327N$15 RFB2 -2 A01X 9537Y 836X 275Y 354R180
+327N$16 RIPOW -1 A01X 4742Y 1574X 629Y 709R180
+327N$2 RIPOW -2 A01X 3623Y 1574X 629Y 709R180
+327N$17 ROPOW -1 A01X 23505Y 1033X 629Y 709R 0
+327N$14 ROPOW -2 A01X 24624Y 1033X 629Y 709R 0
+327N$10 RRAMP -1 A01X 6702Y 3789X 275Y 354R180
+327N$8 RRAMP -2 A01X 6190Y 3789X 275Y 354R180
+327N$10 RSENSE-1 A01X 6751Y 4921X 629Y 787R180
+327GND RSENSE-2 A01X 5649Y 4921X 629Y 787R180
+327GND RUVLO1-1 A01X 5423Y 295X 275Y 354R180
+327N$4 RUVLO1-2 A01X 4911Y 295X 275Y 354R180
+327N$4 RUVLO2-1 A01X 3946Y 295X 275Y 354R180
+327N$2 RUVLO2-2 A01X 3435Y 295X 275Y 354R180
+327N$8 U$1 -1 A01X 7529Y 841X 98Y 393R 0
+327N$4 U$1 -2 A01X 7726Y 841X 98Y 393R 0
+327N$5 U$1 -3 A01X 7923Y 841X 98Y 393R 0
+327N$15 U$1 -4 A01X 8120Y 841X 98Y 393R 0
+327GND U$1 -5 A01X 8316Y 841X 98Y 393R 0
+327N$9 U$1 -6 A01X 8316Y 2505X 98Y 393R180
+327GND U$1 -7 A01X 8120Y 2505X 98Y 393R180
+327N$11 U$1 -8 A01X 7923Y 2505X 98Y 393R180
+327N$3 U$1 -9 A01X 7726Y 2505X 98Y 393R180
+327N$1 U$1 -10 A01X 7529Y 2505X 98Y 393R180
+999
diff --git a/gyro_board/schematic/power_converter_1.19.2012/power_converter.parts.txt b/gyro_board/schematic/power_converter_1.19.2012/power_converter.parts.txt
new file mode 100644
index 0000000..48a13cd
--- /dev/null
+++ b/gyro_board/schematic/power_converter_1.19.2012/power_converter.parts.txt
@@ -0,0 +1,44 @@
+Partlist
+
+Exported from power_converter.brd at 1/22/12 2:03 PM
+
+EAGLE Version 5.10.0 Copyright (c) 1988-2010 CadSoft
+
+Part Value Package Library Position (mm) Orientation
+
+CBP C0603C104K5RACT C0603 resistor (14.875 2.375) R0
+CCC GRM155R61A224KE19D C0402 resistor (23.375 5) R0
+CCOMP GRM155C80G184KE01 C0402 resistor (14.875 6.125) R180
+CCOMP2 GRM1885C1H162JA01 C0603 resistor (14.875 4.5) R180
+CIN$0 C3225X7R1E106M C1210 resistor (3.25 10) R0
+CIN$1 C3225X7R1E106M C1210 resistor (3.25 3.5) R0
+CIN$2 C3225X7R1E106M C1210 resistor (3.25 6.75) R0
+COUT$0 RR71C331MDN1 custom_parts (45.25 10.125) R270
+COUT$1 RR71C331MDN1 custom_parts (47.25 20.5) R315
+CRAMP CC0805KRX7R9BB56 C0805 resistor (15 8) R180
+CSEP$0 C3225X7R1E106M C1210 resistor (25 21) R0
+CSEP$1 C3225X7R1E106M C1210 resistor (25 24.25) R0
+CSEP$2 C3225X7R1E106M C1210 resistor (25 17.75) R0
+CSEP$3 C3225X7R1E106M C1210 resistor (25 14.5) R0
+D1 12CWQ10FNPB D-PAK custom_parts (35 21.5) R270
+DTVS MMSZ5246BT1G SOD-123 custom_parts (3.25 1) R180
+IN 39543-020239 39543-0202 custom_parts (7.75 16.75) R270
+IPOW CHIPLED_0805 led (11 5.75) R90
+LIN XAL1060-152ME 1060-152 custom_parts (16.625 20.125) R0
+LOUT XAL1010-153ME 1010-153 custom_parts (34.25 12.25) R90
+M1 BSZ097N04LS_G PG-TSDSON8 custom_parts (20.5 12.5) R270
+OPOW CHIPLED_0805 led (56.625 2.625) R90
+OUT 39543-020239 39543-0202 custom_parts (56.125 21) R90
+OUT1 39543-020239 39543-0202 custom_parts (56.125 10.25) R90
+RBP CRCW040220R0FKE R0402 resistor (9.375 2) R180
+RCOMP CRCW04021K58FKE R0402 resistor (17.25 5) R270
+RFADJ CRCW040233K2FKE R0402 resistor (23.375 6.25) R180
+RFB1 CRCW040210K0FKED R0402 resistor (22.625 2.75) R90
+RFB2 CRCW040284K5FKE R0402 resistor (24.875 2.125) R180
+RIPOW 1K R1206 resistor (10.625 4) R180
+ROPOW 1K R1206 resistor (61.125 2.625) R0
+RRAMP CRCW0402100RFKE R0402 resistor (16.375 9.625) R180
+RSENSE CSNL1206FT2L00 M1206 resistor (15.75 12.5) R180
+RUVLO1 CRCW040268K1FKE R0402 resistor (13.125 0.75) R180
+RUVLO2 CRCW0402100KFKE R0402 resistor (9.375 0.75) R180
+U$1 LM3481 MSOP10 custom_parts (20.125 4.25) R0
diff --git a/gyro_board/schematic/power_converter_1.19.2012/power_converter.parts_mapping.txt b/gyro_board/schematic/power_converter_1.19.2012/power_converter.parts_mapping.txt
new file mode 100644
index 0000000..bb7ccec
--- /dev/null
+++ b/gyro_board/schematic/power_converter_1.19.2012/power_converter.parts_mapping.txt
@@ -0,0 +1,25 @@
+CIN$0,CIN$1,CIN$2,CSEP$0,CSEP$1,CSEP$2,CSEP$3 810-C3225X7R1E106M 1210 10 uF 25V caps
+IN,OUT,OUT1 538-39543-0202 Molex 39543-0202 screw terminal
+DTVS 863-MMSZ5246BT1G zener tvs diodes (SOD-123 16V)
+OPOW,IPOW 720-LGR971-KN-1 green 0805 LEDs
+RIPOW,ROPOW 667-ERJ-P08J102V 1206 1K resistor
+RBP 71-CRCW0402-20-E3 0402 20 ohms
+CBP 80-C0603C104K5R 0603 0.1 uF 50V
+RCOMP 71-CRCW0402-1.58K-E3 0402 1.58K
+RUVLO1 71-CRCW0402-68.1K-E3 0402 68.1K
+RUVLO2 71-CRCW0402-100K-E3 0402 100K
+CCOMP2 81-GRM1885C1H162JA01 0603 1600 pF 50V
+CCOMP 81-GRM155C80G184KE1D 0402 0.18 uF 4V
+LIN XAL1060-152MEB 1.5uH 3.15mOhms
+LOUT XAL1010-153MEB 15uH 17.75mOhms
+RRAMP 71-CRCW0402-100-E3 0402 100 ohms
+CCC 81-GRM155R61A224KE19 0402 0.22 uF 10V
+RFADJ 71-CRCW0402-33.2K-E3 0402 33.2K 50V
+M1 BSZ097N04LSGINCT-ND 12A 2.1W 40V drain +-20V gate
+RSENSE CSNL1206FT2L00CT-ND webench rsense
+D1 844-12CWQ10FNPBF 12A 0.95V
+RFB2 71-CRCW0402-84.5K-E3 0402 84.5K
+RFB1 71-CRCW0402-10K-E3 0402 10K
+COUT$0,COUT$1 647-RR71C331MDN1 webench cout replacement (330 uF 16V)
+CRAMP 311-1125-1-ND 0805 560 pF 50V
+U$1 926-LM3481MM/NOPB switching regulator controller
diff --git a/gyro_board/src/usb/CAN.c b/gyro_board/src/usb/CAN.c
new file mode 100644
index 0000000..74e0a62
--- /dev/null
+++ b/gyro_board/src/usb/CAN.c
@@ -0,0 +1,283 @@
+/* Standard includes. */
+#include "stdio.h"
+
+/* Scheduler includes. */
+#include "FreeRTOS.h"
+#include "queue.h"
+#include "task.h"
+
+/* Demo app includes. */
+#include "flash.h"
+#include "partest.h"
+#include "analog.h"
+#include "spi.h"
+#include "LPCUSB/usbapi.h"
+#include "CAN.h"
+
+static xQueueHandle CAN_tx_queue = NULL, CAN_rx_queue = NULL;
+
+/** Send a CAN message. The message is stored by copy.
+ *
+ * \returns Zero on success, and one on failure to queue the message.
+ */
+int CAN_send(can_message *message) {
+ uint32_t sr = CAN1->SR;
+ // Queue the message up in a queue!
+ if (sr & 0x00040404) {
+ uint32_t IFx = (message->RTR << 30) +
+ (message->length << 16) +
+ (message->priority);
+
+ uint32_t data0 = message->wdata[0];
+ uint32_t data1 = message->wdata[1];
+
+ if(sr & 0x00000004){
+ CAN1->TFI1 = IFx;
+ CAN1->TID1 = message->id;
+ CAN1->TDA1 = data0;
+ CAN1->TDB1 = data1;
+ CAN1->CMR = 0x00000021;
+ printf("Writing 1\n");
+ return 0;
+ } else if(sr & 0x00000400) {
+ CAN1->TFI2 = IFx;
+ CAN1->TID2 = message->id;
+ CAN1->TDA2 = data0;
+ CAN1->TDB2 = data1;
+ CAN1->CMR = 0x00000041;
+ return 0;
+ } else if(sr & 0x00040000) {
+ CAN1->TFI3 = IFx;
+ CAN1->TID3 = message->id;
+ CAN1->TDA3 = data0;
+ CAN1->TDB3 = data1;
+ CAN1->CMR = 0x00000081;
+ return 0;
+ }
+ return 1;
+ }
+ return xQueueSend(CAN_tx_queue, message, 0) != pdPASS;
+}
+
+/**
+ * Get a CAN message, blocking if one isn't available.
+ * This is useful for a read/dispatch thread.
+ *
+ * \returns 0 on Success, and nonzero on failure
+ */
+int CAN_get(can_message *message) {
+ // Blocking read the queue.
+ if (xQueueReceive(CAN_rx_queue, message, portMAX_DELAY) == pdFALSE) {
+ return 1;
+ } else {
+ return message->error;
+ }
+}
+
+void CAN_IRQHandler(void) {
+ uint32_t interrupts = CAN1->ICR;
+ long lHigherPriorityTaskWoken = pdFALSE;
+ can_message message;
+ // CAN1->CMR contains all the action items, like initiating a send et all.
+ // On a bus error interrupt, set an error semaphore so the handler can set the LED, or set it ourselfs.
+ printf("CAN interrupt\n");
+
+ if (interrupts & 0x1) {
+ // Recieved a packet.
+ uint32_t rfs = CAN1->RFS;
+
+ message.RTR = (rfs & 0x40000000) >> 30;
+ message.length = (rfs & 0x000f0000) >> 16;
+ message.id = CAN1->RID & 0x000007ff;
+
+ message.wdata[0] = CAN1->RDA;
+ message.wdata[1] = CAN1->RDB;
+
+ // Release the registers
+ CAN1->CMR = 0x00000004;
+
+ message.error = 0;
+
+ xQueueSendFromISR(CAN_rx_queue, &message, &lHigherPriorityTaskWoken);
+ portEND_SWITCHING_ISR(lHigherPriorityTaskWoken);
+ return;
+ }
+
+ if (interrupts & 0x602) {
+ // TX buffers are no longer empty (now empty??)
+ if (xQueueReceiveFromISR(CAN_tx_queue, &message, &lHigherPriorityTaskWoken)) {
+ uint32_t IFx = (message.RTR << 30) +
+ (message.length << 16) +
+ (message.priority);
+ uint32_t data0 = message.wdata[0];
+ uint32_t data1 = message.wdata[1];
+
+ // Message was in the queue, and will now be sent.
+ if (interrupts & 0x2) {
+ // TX buffer 1 is no longer empty
+ CAN1->TFI1 = IFx;
+ CAN1->TID1 = message.id;
+ CAN1->TDA1 = data0;
+ CAN1->TDB1 = data1;
+ CAN1->CMR = 0x00000021;
+ } else if (interrupts & 0x200) {
+ // TX buffer 2 is no longer empty
+ CAN1->TFI2 = IFx;
+ CAN1->TID2 = message.id;
+ CAN1->TDA2 = data0;
+ CAN1->TDB2 = data1;
+ CAN1->CMR = 0x00000041;
+ } else if (interrupts & 0x400) {
+ // TX buffer 3 is no longer empty
+ CAN1->TFI3 = IFx;
+ CAN1->TID3 = message.id;
+ CAN1->TDA3 = data0;
+ CAN1->TDB3 = data1;
+ CAN1->CMR = 0x00000081;
+ }
+ }
+ portEND_SWITCHING_ISR(lHigherPriorityTaskWoken);
+ return;
+ }
+
+ if (interrupts & 0x4) {
+ // Error Warning interrupt
+ message.error = 0x01;
+ if (CAN1->GSR & 0x00000040) {
+ // Reached the limit.
+ message.error = 0x01;
+ } else if (CAN1->GSR & 0x00000080) {
+ // No longer allowed to send.
+ message.error = 0x20;
+ } else {
+ message.error = 0x20;
+ }
+ xQueueSendFromISR(CAN_rx_queue, &message, &lHigherPriorityTaskWoken);
+ portEND_SWITCHING_ISR(lHigherPriorityTaskWoken);
+ return;
+ }
+
+ if (interrupts & 0x8) {
+ // Data overrun
+ CAN1->CMR = 0x00000008;
+ message.error = 0x02;
+ xQueueSendFromISR(CAN_rx_queue, &message, &lHigherPriorityTaskWoken);
+ portEND_SWITCHING_ISR(lHigherPriorityTaskWoken);
+ return;
+ }
+
+ if (interrupts & 0x20) {
+ // Error Passive Interrupt
+ message.error = 0x04;
+ xQueueSendFromISR(CAN_rx_queue, &message, &lHigherPriorityTaskWoken);
+ portEND_SWITCHING_ISR(lHigherPriorityTaskWoken);
+ return;
+ }
+
+ if (interrupts & 0x80) {
+ // Bus Error Interrupt
+ message.error = 0x08;
+ xQueueSendFromISR(CAN_rx_queue, &message, &lHigherPriorityTaskWoken);
+ portEND_SWITCHING_ISR(lHigherPriorityTaskWoken);
+ return;
+ }
+ message.error = 0x10;
+ xQueueSendFromISR(CAN_rx_queue, &message, &lHigherPriorityTaskWoken);
+ portEND_SWITCHING_ISR(lHigherPriorityTaskWoken);
+}
+
+extern int VCOM_getchar(void);
+
+static portTASK_FUNCTION(vCAN1Write, pvParameters) {
+ can_message message;
+ message.RTR = 0;
+ message.id = 12;
+ message.priority = 1;
+ message.length = 4;
+
+ // Enable the pins.
+ PINCON->PINSEL3 = (PINCON->PINSEL3 & 0xffc3cf3f) | 0x00141040;
+
+ portTickType xLastFlashTime;
+ xLastFlashTime = xTaskGetTickCount();
+
+ for (;;) {
+ printf("hello\n");
+
+ int c = VCOM_getchar();
+ while (c != -1) {
+ printf("hello\n");
+ int j = c;
+ printf("Sending data 0x%x\n", j);
+ message.data[0] = j++;
+ message.data[1] = j++;
+ message.data[2] = j++;
+ message.data[3] = j;
+ CAN_send(&message);
+ c = VCOM_getchar();
+ }
+
+ vTaskDelayUntil(&xLastFlashTime, 500);
+ }
+}
+static portTASK_FUNCTION(vCAN1, pvParameters) {
+ portTickType xLastFlashTime;
+
+ CAN_rx_queue = xQueueCreate(20, sizeof(can_message));
+ CAN_tx_queue = xQueueCreate(5, sizeof(char));
+
+ if ((CAN_rx_queue == NULL) || (CAN_tx_queue == NULL)) {
+ /* Not enough heap available to create the buffer queues, can't do
+ * anything so just delete ourselves.
+ */
+ vTaskDelete(NULL);
+ }
+
+ // Enable CAN
+ SC->PCONP |= PCONP_PCCAN1;
+
+ PINCON->PINSEL0 = (PINCON->PINSEL0 & 0xfffffff0) | 0x00000005;
+ PINCON->PINMODE0 = (PINCON->PINMODE0 & 0xfffffffc) | 0x00000001;
+
+ // Enable RX, TX, overrun, Bus Error,
+ // Error Passive/Active, and Error Warning Interupts.
+ NVIC_SetPriority(CAN_IRQn, configCAN_INTERRUPT_PRIORITY);
+ NVIC_EnableIRQ(CAN_IRQn);
+
+ CAN1->IER = 0x000006af;
+
+ // Priority depends on the TX priority register
+ CAN1->MOD = 0x00000008;
+
+ CAN1->CMR = 0x00000004;
+
+ CANAF->AFMR = 0x00000002;
+
+ // CAN clocks. (Defaults look fine)
+
+ /* We need to initialise xLastFlashTime prior to the first call to
+ vTaskDelayUntil(). */
+ xLastFlashTime = xTaskGetTickCount();
+
+ can_message message;
+
+ xTaskCreate(vCAN1Write, (signed char *) "CAN1wx", configMINIMAL_STACK_SIZE + 100, NULL, tskIDLE_PRIORITY + 4, NULL);
+
+ for (;;) {
+ /* Delay for half the flash period then turn the LED on. */
+ if (CAN_get(&message)) {
+ printf("Message error 0x%x\n", message.error);
+ } else {
+ printf("Got a message with a length of %d\n", message.length);
+ printf("data[0] = 0x%x\n", message.data[0]);
+ printf("data[1] = 0x%x\n", message.data[1]);
+ printf("data[2] = 0x%x\n", message.data[2]);
+ printf("data[3] = 0x%x\n", message.data[3]);
+ }
+ }
+}
+
+
+void initCAN(void){
+ xTaskCreate(vCAN1, (signed char *) "CAN1rx", configMINIMAL_STACK_SIZE + 400, NULL, tskIDLE_PRIORITY + 1, NULL);
+}
diff --git a/gyro_board/src/usb/CAN.h b/gyro_board/src/usb/CAN.h
new file mode 100644
index 0000000..1ef39d5
--- /dev/null
+++ b/gyro_board/src/usb/CAN.h
@@ -0,0 +1,19 @@
+#ifndef _CAN_H_
+#define _CAN_H_
+
+typedef struct _can_message {
+ unsigned RTR:1;
+ unsigned error:7;
+ uint16_t id;
+ uint8_t priority;
+ uint8_t length;
+ union {
+ uint8_t data[8];
+ uint32_t wdata[2];
+ };
+} can_message;
+
+int CAN_get(can_message *message);
+void initCAN(void);
+
+#endif
diff --git a/gyro_board/src/usb/CommonDemoTasks/BlockQ.c b/gyro_board/src/usb/CommonDemoTasks/BlockQ.c
new file mode 100644
index 0000000..e05af05
--- /dev/null
+++ b/gyro_board/src/usb/CommonDemoTasks/BlockQ.c
@@ -0,0 +1,293 @@
+/*
+ FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.
+
+ ***************************************************************************
+ * *
+ * If you are: *
+ * *
+ * + New to FreeRTOS, *
+ * + Wanting to learn FreeRTOS or multitasking in general quickly *
+ * + Looking for basic training, *
+ * + Wanting to improve your FreeRTOS skills and productivity *
+ * *
+ * then take a look at the FreeRTOS eBook *
+ * *
+ * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
+ * http://www.FreeRTOS.org/Documentation *
+ * *
+ * A pdf reference manual is also available. Both are usually delivered *
+ * to your inbox within 20 minutes to two hours when purchased between 8am *
+ * and 8pm GMT (although please allow up to 24 hours in case of *
+ * exceptional circumstances). Thank you for your support! *
+ * *
+ ***************************************************************************
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
+ ***NOTE*** The exception to the GPL is included to allow you to distribute
+ a combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details. You should have received a copy of the GNU General Public
+ License and the FreeRTOS license exception along with FreeRTOS; if not it
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained
+ by writing to Richard Barry, contact details for whom are available on the
+ FreeRTOS WEB site.
+
+ 1 tab == 4 spaces!
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+/*
+ * Creates six tasks that operate on three queues as follows:
+ *
+ * The first two tasks send and receive an incrementing number to/from a queue.
+ * One task acts as a producer and the other as the consumer. The consumer is a
+ * higher priority than the producer and is set to block on queue reads. The queue
+ * only has space for one item - as soon as the producer posts a message on the
+ * queue the consumer will unblock, pre-empt the producer, and remove the item.
+ *
+ * The second two tasks work the other way around. Again the queue used only has
+ * enough space for one item. This time the consumer has a lower priority than the
+ * producer. The producer will try to post on the queue blocking when the queue is
+ * full. When the consumer wakes it will remove the item from the queue, causing
+ * the producer to unblock, pre-empt the consumer, and immediately re-fill the
+ * queue.
+ *
+ * The last two tasks use the same queue producer and consumer functions. This time the queue has
+ * enough space for lots of items and the tasks operate at the same priority. The
+ * producer will execute, placing items into the queue. The consumer will start
+ * executing when either the queue becomes full (causing the producer to block) or
+ * a context switch occurs (tasks of the same priority will time slice).
+ *
+ */
+
+/*
+
+Changes from V4.1.1
+
+ + The second set of tasks were created the wrong way around. This has been
+ corrected.
+*/
+
+
+#include <stdlib.h>
+
+/* Scheduler include files. */
+#include "FreeRTOS.h"
+#include "task.h"
+#include "queue.h"
+
+/* Demo program include files. */
+#include "BlockQ.h"
+
+#define blckqSTACK_SIZE configMINIMAL_STACK_SIZE
+#define blckqNUM_TASK_SETS ( 3 )
+
+/* Structure used to pass parameters to the blocking queue tasks. */
+typedef struct BLOCKING_QUEUE_PARAMETERS {
+ xQueueHandle xQueue; /*< The queue to be used by the task. */
+ portTickType xBlockTime; /*< The block time to use on queue reads/writes. */
+ volatile short *psCheckVariable; /*< Incremented on each successful cycle to check the task is still running. */
+} xBlockingQueueParameters;
+
+/* Task function that creates an incrementing number and posts it on a queue. */
+static portTASK_FUNCTION_PROTO(vBlockingQueueProducer, pvParameters);
+
+/* Task function that removes the incrementing number from a queue and checks that
+it is the expected number. */
+static portTASK_FUNCTION_PROTO(vBlockingQueueConsumer, pvParameters);
+
+/* Variables which are incremented each time an item is removed from a queue, and
+found to be the expected value.
+These are used to check that the tasks are still running. */
+static volatile short sBlockingConsumerCount[ blckqNUM_TASK_SETS ] = {(unsigned short) 0, (unsigned short) 0, (unsigned short) 0 };
+
+/* Variable which are incremented each time an item is posted on a queue. These
+are used to check that the tasks are still running. */
+static volatile short sBlockingProducerCount[ blckqNUM_TASK_SETS ] = {(unsigned short) 0, (unsigned short) 0, (unsigned short) 0 };
+
+/*-----------------------------------------------------------*/
+
+void vStartBlockingQueueTasks(unsigned portBASE_TYPE uxPriority)
+{
+ xBlockingQueueParameters *pxQueueParameters1, *pxQueueParameters2;
+ xBlockingQueueParameters *pxQueueParameters3, *pxQueueParameters4;
+ xBlockingQueueParameters *pxQueueParameters5, *pxQueueParameters6;
+ const unsigned portBASE_TYPE uxQueueSize1 = 1, uxQueueSize5 = 5;
+ const portTickType xBlockTime = (portTickType) 1000 / portTICK_RATE_MS;
+ const portTickType xDontBlock = (portTickType) 0;
+
+ /* Create the first two tasks as described at the top of the file. */
+
+ /* First create the structure used to pass parameters to the consumer tasks. */
+ pxQueueParameters1 = (xBlockingQueueParameters *) pvPortMalloc(sizeof(xBlockingQueueParameters));
+
+ /* Create the queue used by the first two tasks to pass the incrementing number.
+ Pass a pointer to the queue in the parameter structure. */
+ pxQueueParameters1->xQueue = xQueueCreate(uxQueueSize1, (unsigned portBASE_TYPE) sizeof(unsigned short));
+
+ /* The consumer is created first so gets a block time as described above. */
+ pxQueueParameters1->xBlockTime = xBlockTime;
+
+ /* Pass in the variable that this task is going to increment so we can check it
+ is still running. */
+ pxQueueParameters1->psCheckVariable = &(sBlockingConsumerCount[ 0 ]);
+
+ /* Create the structure used to pass parameters to the producer task. */
+ pxQueueParameters2 = (xBlockingQueueParameters *) pvPortMalloc(sizeof(xBlockingQueueParameters));
+
+ /* Pass the queue to this task also, using the parameter structure. */
+ pxQueueParameters2->xQueue = pxQueueParameters1->xQueue;
+
+ /* The producer is not going to block - as soon as it posts the consumer will
+ wake and remove the item so the producer should always have room to post. */
+ pxQueueParameters2->xBlockTime = xDontBlock;
+
+ /* Pass in the variable that this task is going to increment so we can check
+ it is still running. */
+ pxQueueParameters2->psCheckVariable = &(sBlockingProducerCount[ 0 ]);
+
+
+ /* Note the producer has a lower priority than the consumer when the tasks are
+ spawned. */
+ xTaskCreate(vBlockingQueueConsumer, (signed char *) "QConsB1", blckqSTACK_SIZE, (void *) pxQueueParameters1, uxPriority, NULL);
+ xTaskCreate(vBlockingQueueProducer, (signed char *) "QProdB2", blckqSTACK_SIZE, (void *) pxQueueParameters2, tskIDLE_PRIORITY, NULL);
+
+
+
+ /* Create the second two tasks as described at the top of the file. This uses
+ the same mechanism but reverses the task priorities. */
+
+ pxQueueParameters3 = (xBlockingQueueParameters *) pvPortMalloc(sizeof(xBlockingQueueParameters));
+ pxQueueParameters3->xQueue = xQueueCreate(uxQueueSize1, (unsigned portBASE_TYPE) sizeof(unsigned short));
+ pxQueueParameters3->xBlockTime = xDontBlock;
+ pxQueueParameters3->psCheckVariable = &(sBlockingProducerCount[ 1 ]);
+
+ pxQueueParameters4 = (xBlockingQueueParameters *) pvPortMalloc(sizeof(xBlockingQueueParameters));
+ pxQueueParameters4->xQueue = pxQueueParameters3->xQueue;
+ pxQueueParameters4->xBlockTime = xBlockTime;
+ pxQueueParameters4->psCheckVariable = &(sBlockingConsumerCount[ 1 ]);
+
+ xTaskCreate(vBlockingQueueConsumer, (signed char *) "QProdB3", blckqSTACK_SIZE, (void *) pxQueueParameters3, tskIDLE_PRIORITY, NULL);
+ xTaskCreate(vBlockingQueueProducer, (signed char *) "QConsB4", blckqSTACK_SIZE, (void *) pxQueueParameters4, uxPriority, NULL);
+
+
+
+ /* Create the last two tasks as described above. The mechanism is again just
+ the same. This time both parameter structures are given a block time. */
+ pxQueueParameters5 = (xBlockingQueueParameters *) pvPortMalloc(sizeof(xBlockingQueueParameters));
+ pxQueueParameters5->xQueue = xQueueCreate(uxQueueSize5, (unsigned portBASE_TYPE) sizeof(unsigned short));
+ pxQueueParameters5->xBlockTime = xBlockTime;
+ pxQueueParameters5->psCheckVariable = &(sBlockingProducerCount[ 2 ]);
+
+ pxQueueParameters6 = (xBlockingQueueParameters *) pvPortMalloc(sizeof(xBlockingQueueParameters));
+ pxQueueParameters6->xQueue = pxQueueParameters5->xQueue;
+ pxQueueParameters6->xBlockTime = xBlockTime;
+ pxQueueParameters6->psCheckVariable = &(sBlockingConsumerCount[ 2 ]);
+
+ xTaskCreate(vBlockingQueueProducer, (signed char *) "QProdB5", blckqSTACK_SIZE, (void *) pxQueueParameters5, tskIDLE_PRIORITY, NULL);
+ xTaskCreate(vBlockingQueueConsumer, (signed char *) "QConsB6", blckqSTACK_SIZE, (void *) pxQueueParameters6, tskIDLE_PRIORITY, NULL);
+}
+/*-----------------------------------------------------------*/
+
+static portTASK_FUNCTION(vBlockingQueueProducer, pvParameters)
+{
+ unsigned short usValue = 0;
+ xBlockingQueueParameters *pxQueueParameters;
+ short sErrorEverOccurred = pdFALSE;
+
+ pxQueueParameters = (xBlockingQueueParameters *) pvParameters;
+
+ for (;;) {
+ if (xQueueSend(pxQueueParameters->xQueue, (void *) &usValue, pxQueueParameters->xBlockTime) != pdPASS) {
+ sErrorEverOccurred = pdTRUE;
+ } else {
+ /* We have successfully posted a message, so increment the variable
+ used to check we are still running. */
+ if (sErrorEverOccurred == pdFALSE) {
+ (*pxQueueParameters->psCheckVariable)++;
+ }
+
+ /* Increment the variable we are going to post next time round. The
+ consumer will expect the numbers to follow in numerical order. */
+ ++usValue;
+ }
+ }
+}
+/*-----------------------------------------------------------*/
+
+static portTASK_FUNCTION(vBlockingQueueConsumer, pvParameters)
+{
+ unsigned short usData, usExpectedValue = 0;
+ xBlockingQueueParameters *pxQueueParameters;
+ short sErrorEverOccurred = pdFALSE;
+
+ pxQueueParameters = (xBlockingQueueParameters *) pvParameters;
+
+ for (;;) {
+ if (xQueueReceive(pxQueueParameters->xQueue, &usData, pxQueueParameters->xBlockTime) == pdPASS) {
+ if (usData != usExpectedValue) {
+ /* Catch-up. */
+ usExpectedValue = usData;
+
+ sErrorEverOccurred = pdTRUE;
+ } else {
+ /* We have successfully received a message, so increment the
+ variable used to check we are still running. */
+ if (sErrorEverOccurred == pdFALSE) {
+ (*pxQueueParameters->psCheckVariable)++;
+ }
+
+ /* Increment the value we expect to remove from the queue next time
+ round. */
+ ++usExpectedValue;
+ }
+ }
+ }
+}
+/*-----------------------------------------------------------*/
+
+/* This is called to check that all the created tasks are still running. */
+portBASE_TYPE xAreBlockingQueuesStillRunning(void)
+{
+ static short sLastBlockingConsumerCount[ blckqNUM_TASK_SETS ] = {(unsigned short) 0, (unsigned short) 0, (unsigned short) 0 };
+ static short sLastBlockingProducerCount[ blckqNUM_TASK_SETS ] = {(unsigned short) 0, (unsigned short) 0, (unsigned short) 0 };
+ portBASE_TYPE xReturn = pdPASS, xTasks;
+
+ /* Not too worried about mutual exclusion on these variables as they are 16
+ bits and we are only reading them. We also only care to see if they have
+ changed or not.
+
+ Loop through each check variable to and return pdFALSE if any are found not
+ to have changed since the last call. */
+
+ for (xTasks = 0; xTasks < blckqNUM_TASK_SETS; xTasks++) {
+ if (sBlockingConsumerCount[ xTasks ] == sLastBlockingConsumerCount[ xTasks ]) {
+ xReturn = pdFALSE;
+ }
+ sLastBlockingConsumerCount[ xTasks ] = sBlockingConsumerCount[ xTasks ];
+
+
+ if (sBlockingProducerCount[ xTasks ] == sLastBlockingProducerCount[ xTasks ]) {
+ xReturn = pdFALSE;
+ }
+ sLastBlockingProducerCount[ xTasks ] = sBlockingProducerCount[ xTasks ];
+ }
+
+ return xReturn;
+}
+
diff --git a/gyro_board/src/usb/CommonDemoTasks/GenQTest.c b/gyro_board/src/usb/CommonDemoTasks/GenQTest.c
new file mode 100644
index 0000000..1b486ba
--- /dev/null
+++ b/gyro_board/src/usb/CommonDemoTasks/GenQTest.c
@@ -0,0 +1,525 @@
+/*
+ FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.
+
+ ***************************************************************************
+ * *
+ * If you are: *
+ * *
+ * + New to FreeRTOS, *
+ * + Wanting to learn FreeRTOS or multitasking in general quickly *
+ * + Looking for basic training, *
+ * + Wanting to improve your FreeRTOS skills and productivity *
+ * *
+ * then take a look at the FreeRTOS eBook *
+ * *
+ * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
+ * http://www.FreeRTOS.org/Documentation *
+ * *
+ * A pdf reference manual is also available. Both are usually delivered *
+ * to your inbox within 20 minutes to two hours when purchased between 8am *
+ * and 8pm GMT (although please allow up to 24 hours in case of *
+ * exceptional circumstances). Thank you for your support! *
+ * *
+ ***************************************************************************
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
+ ***NOTE*** The exception to the GPL is included to allow you to distribute
+ a combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details. You should have received a copy of the GNU General Public
+ License and the FreeRTOS license exception along with FreeRTOS; if not it
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained
+ by writing to Richard Barry, contact details for whom are available on the
+ FreeRTOS WEB site.
+
+ 1 tab == 4 spaces!
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+
+/*
+ * Tests the extra queue functionality introduced in FreeRTOS.org V4.5.0 -
+ * including xQueueSendToFront(), xQueueSendToBack(), xQueuePeek() and
+ * mutex behaviour.
+ *
+ * See the comments above the prvSendFrontAndBackTest() and
+ * prvLowPriorityMutexTask() prototypes below for more information.
+ */
+
+
+#include <stdlib.h>
+
+/* Scheduler include files. */
+#include "FreeRTOS.h"
+#include "task.h"
+#include "queue.h"
+#include "semphr.h"
+
+/* Demo program include files. */
+#include "GenQTest.h"
+
+#define genqQUEUE_LENGTH ( 5 )
+#define genqNO_BLOCK ( 0 )
+
+#define genqMUTEX_LOW_PRIORITY ( tskIDLE_PRIORITY )
+#define genqMUTEX_TEST_PRIORITY ( tskIDLE_PRIORITY + 1 )
+#define genqMUTEX_MEDIUM_PRIORITY ( tskIDLE_PRIORITY + 2 )
+#define genqMUTEX_HIGH_PRIORITY ( tskIDLE_PRIORITY + 3 )
+
+/*-----------------------------------------------------------*/
+
+/*
+ * Tests the behaviour of the xQueueSendToFront() and xQueueSendToBack()
+ * macros by using both to fill a queue, then reading from the queue to
+ * check the resultant queue order is as expected. Queue data is also
+ * peeked.
+ */
+static void prvSendFrontAndBackTest(void *pvParameters);
+
+/*
+ * The following three tasks are used to demonstrate the mutex behaviour.
+ * Each task is given a different priority to demonstrate the priority
+ * inheritance mechanism.
+ *
+ * The low priority task obtains a mutex. After this a high priority task
+ * attempts to obtain the same mutex, causing its priority to be inherited
+ * by the low priority task. The task with the inherited high priority then
+ * resumes a medium priority task to ensure it is not blocked by the medium
+ * priority task while it holds the inherited high priority. Once the mutex
+ * is returned the task with the inherited priority returns to its original
+ * low priority, and is therefore immediately preempted by first the high
+ * priority task and then the medium prioroity task before it can continue.
+ */
+static void prvLowPriorityMutexTask(void *pvParameters);
+static void prvMediumPriorityMutexTask(void *pvParameters);
+static void prvHighPriorityMutexTask(void *pvParameters);
+
+/*-----------------------------------------------------------*/
+
+/* Flag that will be latched to pdTRUE should any unexpected behaviour be
+detected in any of the tasks. */
+static portBASE_TYPE xErrorDetected = pdFALSE;
+
+/* Counters that are incremented on each cycle of a test. This is used to
+detect a stalled task - a test that is no longer running. */
+static volatile unsigned portLONG ulLoopCounter = 0;
+static volatile unsigned portLONG ulLoopCounter2 = 0;
+
+/* The variable that is guarded by the mutex in the mutex demo tasks. */
+static volatile unsigned portLONG ulGuardedVariable = 0;
+
+/* Handles used in the mutext test to suspend and resume the high and medium
+priority mutex test tasks. */
+static xTaskHandle xHighPriorityMutexTask, xMediumPriorityMutexTask;
+
+/*-----------------------------------------------------------*/
+
+void vStartGenericQueueTasks(unsigned portBASE_TYPE uxPriority)
+{
+ xQueueHandle xQueue;
+ xSemaphoreHandle xMutex;
+
+ /* Create the queue that we are going to use for the
+ prvSendFrontAndBackTest demo. */
+ xQueue = xQueueCreate(genqQUEUE_LENGTH, sizeof(unsigned portLONG));
+
+ /* vQueueAddToRegistry() adds the queue to the queue registry, if one is
+ in use. The queue registry is provided as a means for kernel aware
+ debuggers to locate queues and has no purpose if a kernel aware debugger
+ is not being used. The call to vQueueAddToRegistry() will be removed
+ by the pre-processor if configQUEUE_REGISTRY_SIZE is not defined or is
+ defined to be less than 1. */
+ vQueueAddToRegistry(xQueue, (signed portCHAR *) "Gen_Queue_Test");
+
+ /* Create the demo task and pass it the queue just created. We are
+ passing the queue handle by value so it does not matter that it is
+ declared on the stack here. */
+ xTaskCreate(prvSendFrontAndBackTest, (signed portCHAR *)"GenQ", configMINIMAL_STACK_SIZE, (void *) xQueue, uxPriority, NULL);
+
+ /* Create the mutex used by the prvMutexTest task. */
+ xMutex = xSemaphoreCreateMutex();
+
+ /* vQueueAddToRegistry() adds the mutex to the registry, if one is
+ in use. The registry is provided as a means for kernel aware
+ debuggers to locate mutexes and has no purpose if a kernel aware debugger
+ is not being used. The call to vQueueAddToRegistry() will be removed
+ by the pre-processor if configQUEUE_REGISTRY_SIZE is not defined or is
+ defined to be less than 1. */
+ vQueueAddToRegistry((xQueueHandle) xMutex, (signed portCHAR *) "Gen_Queue_Mutex");
+
+ /* Create the mutex demo tasks and pass it the mutex just created. We are
+ passing the mutex handle by value so it does not matter that it is declared
+ on the stack here. */
+ xTaskCreate(prvLowPriorityMutexTask, (signed portCHAR *)"MuLow", configMINIMAL_STACK_SIZE, (void *) xMutex, genqMUTEX_LOW_PRIORITY, NULL);
+ xTaskCreate(prvMediumPriorityMutexTask, (signed portCHAR *)"MuMed", configMINIMAL_STACK_SIZE, NULL, genqMUTEX_MEDIUM_PRIORITY, &xMediumPriorityMutexTask);
+ xTaskCreate(prvHighPriorityMutexTask, (signed portCHAR *)"MuHigh", configMINIMAL_STACK_SIZE, (void *) xMutex, genqMUTEX_HIGH_PRIORITY, &xHighPriorityMutexTask);
+}
+/*-----------------------------------------------------------*/
+
+static void prvSendFrontAndBackTest(void *pvParameters)
+{
+ unsigned portLONG ulData, ulData2;
+ xQueueHandle xQueue;
+
+#ifdef USE_STDIO
+ void vPrintDisplayMessage(const portCHAR * const * ppcMessageToSend);
+
+ const portCHAR * const pcTaskStartMsg = "Queue SendToFront/SendToBack/Peek test started.\r\n";
+
+ /* Queue a message for printing to say the task has started. */
+ vPrintDisplayMessage(&pcTaskStartMsg);
+#endif
+
+ xQueue = (xQueueHandle) pvParameters;
+
+ for (;;) {
+ /* The queue is empty, so sending an item to the back of the queue
+ should have the same efect as sending it to the front of the queue.
+
+ First send to the front and check everything is as expected. */
+ xQueueSendToFront(xQueue, (void *) &ulLoopCounter, genqNO_BLOCK);
+
+ if (uxQueueMessagesWaiting(xQueue) != 1) {
+ xErrorDetected = pdTRUE;
+ }
+
+ if (xQueueReceive(xQueue, (void *) &ulData, genqNO_BLOCK) != pdPASS) {
+ xErrorDetected = pdTRUE;
+ }
+
+ /* The data we sent to the queue should equal the data we just received
+ from the queue. */
+ if (ulLoopCounter != ulData) {
+ xErrorDetected = pdTRUE;
+ }
+
+ /* Then do the same, sending the data to the back, checking everything
+ is as expected. */
+ if (uxQueueMessagesWaiting(xQueue) != 0) {
+ xErrorDetected = pdTRUE;
+ }
+
+ xQueueSendToBack(xQueue, (void *) &ulLoopCounter, genqNO_BLOCK);
+
+ if (uxQueueMessagesWaiting(xQueue) != 1) {
+ xErrorDetected = pdTRUE;
+ }
+
+ if (xQueueReceive(xQueue, (void *) &ulData, genqNO_BLOCK) != pdPASS) {
+ xErrorDetected = pdTRUE;
+ }
+
+ if (uxQueueMessagesWaiting(xQueue) != 0) {
+ xErrorDetected = pdTRUE;
+ }
+
+ /* The data we sent to the queue should equal the data we just received
+ from the queue. */
+ if (ulLoopCounter != ulData) {
+ xErrorDetected = pdTRUE;
+ }
+
+#if configUSE_PREEMPTION == 0
+ taskYIELD();
+#endif
+
+
+
+ /* Place 2, 3, 4 into the queue, adding items to the back of the queue. */
+ for (ulData = 2; ulData < 5; ulData++) {
+ xQueueSendToBack(xQueue, (void *) &ulData, genqNO_BLOCK);
+ }
+
+ /* Now the order in the queue should be 2, 3, 4, with 2 being the first
+ thing to be read out. Now add 1 then 0 to the front of the queue. */
+ if (uxQueueMessagesWaiting(xQueue) != 3) {
+ xErrorDetected = pdTRUE;
+ }
+ ulData = 1;
+ xQueueSendToFront(xQueue, (void *) &ulData, genqNO_BLOCK);
+ ulData = 0;
+ xQueueSendToFront(xQueue, (void *) &ulData, genqNO_BLOCK);
+
+ /* Now the queue should be full, and when we read the data out we
+ should receive 0, 1, 2, 3, 4. */
+ if (uxQueueMessagesWaiting(xQueue) != 5) {
+ xErrorDetected = pdTRUE;
+ }
+
+ if (xQueueSendToFront(xQueue, (void *) &ulData, genqNO_BLOCK) != errQUEUE_FULL) {
+ xErrorDetected = pdTRUE;
+ }
+
+ if (xQueueSendToBack(xQueue, (void *) &ulData, genqNO_BLOCK) != errQUEUE_FULL) {
+ xErrorDetected = pdTRUE;
+ }
+
+#if configUSE_PREEMPTION == 0
+ taskYIELD();
+#endif
+
+ /* Check the data we read out is in the expected order. */
+ for (ulData = 0; ulData < genqQUEUE_LENGTH; ulData++) {
+ /* Try peeking the data first. */
+ if (xQueuePeek(xQueue, &ulData2, genqNO_BLOCK) != pdPASS) {
+ xErrorDetected = pdTRUE;
+ }
+
+ if (ulData != ulData2) {
+ xErrorDetected = pdTRUE;
+ }
+
+
+ /* Now try receiving the data for real. The value should be the
+ same. Clobber the value first so we know we really received it. */
+ ulData2 = ~ulData2;
+ if (xQueueReceive(xQueue, &ulData2, genqNO_BLOCK) != pdPASS) {
+ xErrorDetected = pdTRUE;
+ }
+
+ if (ulData != ulData2) {
+ xErrorDetected = pdTRUE;
+ }
+ }
+
+ /* The queue should now be empty again. */
+ if (uxQueueMessagesWaiting(xQueue) != 0) {
+ xErrorDetected = pdTRUE;
+ }
+
+#if configUSE_PREEMPTION == 0
+ taskYIELD();
+#endif
+
+
+ /* Our queue is empty once more, add 10, 11 to the back. */
+ ulData = 10;
+ if (xQueueSend(xQueue, &ulData, genqNO_BLOCK) != pdPASS) {
+ xErrorDetected = pdTRUE;
+ }
+ ulData = 11;
+ if (xQueueSend(xQueue, &ulData, genqNO_BLOCK) != pdPASS) {
+ xErrorDetected = pdTRUE;
+ }
+
+ if (uxQueueMessagesWaiting(xQueue) != 2) {
+ xErrorDetected = pdTRUE;
+ }
+
+ /* Now we should have 10, 11 in the queue. Add 7, 8, 9 to the
+ front. */
+ for (ulData = 9; ulData >= 7; ulData--) {
+ if (xQueueSendToFront(xQueue, (void *) &ulData, genqNO_BLOCK) != pdPASS) {
+ xErrorDetected = pdTRUE;
+ }
+ }
+
+ /* Now check that the queue is full, and that receiving data provides
+ the expected sequence of 7, 8, 9, 10, 11. */
+ if (uxQueueMessagesWaiting(xQueue) != 5) {
+ xErrorDetected = pdTRUE;
+ }
+
+ if (xQueueSendToFront(xQueue, (void *) &ulData, genqNO_BLOCK) != errQUEUE_FULL) {
+ xErrorDetected = pdTRUE;
+ }
+
+ if (xQueueSendToBack(xQueue, (void *) &ulData, genqNO_BLOCK) != errQUEUE_FULL) {
+ xErrorDetected = pdTRUE;
+ }
+
+#if configUSE_PREEMPTION == 0
+ taskYIELD();
+#endif
+
+ /* Check the data we read out is in the expected order. */
+ for (ulData = 7; ulData < (7 + genqQUEUE_LENGTH); ulData++) {
+ if (xQueueReceive(xQueue, &ulData2, genqNO_BLOCK) != pdPASS) {
+ xErrorDetected = pdTRUE;
+ }
+
+ if (ulData != ulData2) {
+ xErrorDetected = pdTRUE;
+ }
+ }
+
+ if (uxQueueMessagesWaiting(xQueue) != 0) {
+ xErrorDetected = pdTRUE;
+ }
+
+ ulLoopCounter++;
+ }
+}
+/*-----------------------------------------------------------*/
+
+static void prvLowPriorityMutexTask(void *pvParameters)
+{
+ xSemaphoreHandle xMutex = (xSemaphoreHandle) pvParameters;
+
+#ifdef USE_STDIO
+ void vPrintDisplayMessage(const portCHAR * const * ppcMessageToSend);
+
+ const portCHAR * const pcTaskStartMsg = "Mutex with priority inheritance test started.\r\n";
+
+ /* Queue a message for printing to say the task has started. */
+ vPrintDisplayMessage(&pcTaskStartMsg);
+#endif
+
+ for (;;) {
+ /* Take the mutex. It should be available now. */
+ if (xSemaphoreTake(xMutex, genqNO_BLOCK) != pdPASS) {
+ xErrorDetected = pdTRUE;
+ }
+
+ /* Set our guarded variable to a known start value. */
+ ulGuardedVariable = 0;
+
+ /* Our priority should be as per that assigned when the task was
+ created. */
+ if (uxTaskPriorityGet(NULL) != genqMUTEX_LOW_PRIORITY) {
+ xErrorDetected = pdTRUE;
+ }
+
+ /* Now unsuspend the high priority task. This will attempt to take the
+ mutex, and block when it finds it cannot obtain it. */
+ vTaskResume(xHighPriorityMutexTask);
+
+ /* We should now have inherited the prioritoy of the high priority task,
+ as by now it will have attempted to get the mutex. */
+ if (uxTaskPriorityGet(NULL) != genqMUTEX_HIGH_PRIORITY) {
+ xErrorDetected = pdTRUE;
+ }
+
+ /* We can attempt to set our priority to the test priority - between the
+ idle priority and the medium/high test priorities, but our actual
+ prioroity should remain at the high priority. */
+ vTaskPrioritySet(NULL, genqMUTEX_TEST_PRIORITY);
+ if (uxTaskPriorityGet(NULL) != genqMUTEX_HIGH_PRIORITY) {
+ xErrorDetected = pdTRUE;
+ }
+
+ /* Now unsuspend the medium priority task. This should not run as our
+ inherited priority is above that of the medium priority task. */
+ vTaskResume(xMediumPriorityMutexTask);
+
+ /* If the did run then it will have incremented our guarded variable. */
+ if (ulGuardedVariable != 0) {
+ xErrorDetected = pdTRUE;
+ }
+
+ /* When we give back the semaphore our priority should be disinherited
+ back to the priority to which we attempted to set ourselves. This means
+ that when the high priority task next blocks, the medium priority task
+ should execute and increment the guarded variable. When we next run
+ both the high and medium priority tasks will have been suspended again. */
+ if (xSemaphoreGive(xMutex) != pdPASS) {
+ xErrorDetected = pdTRUE;
+ }
+
+ /* Check that the guarded variable did indeed increment... */
+ if (ulGuardedVariable != 1) {
+ xErrorDetected = pdTRUE;
+ }
+
+ /* ... and that our priority has been disinherited to
+ genqMUTEX_TEST_PRIORITY. */
+ if (uxTaskPriorityGet(NULL) != genqMUTEX_TEST_PRIORITY) {
+ xErrorDetected = pdTRUE;
+ }
+
+ /* Set our priority back to our original priority ready for the next
+ loop around this test. */
+ vTaskPrioritySet(NULL, genqMUTEX_LOW_PRIORITY);
+
+ /* Just to show we are still running. */
+ ulLoopCounter2++;
+
+#if configUSE_PREEMPTION == 0
+ taskYIELD();
+#endif
+ }
+}
+/*-----------------------------------------------------------*/
+
+static void prvMediumPriorityMutexTask(void *pvParameters)
+{
+ (void) pvParameters;
+
+ for (;;) {
+ /* The medium priority task starts by suspending itself. The low
+ priority task will unsuspend this task when required. */
+ vTaskSuspend(NULL);
+
+ /* When this task unsuspends all it does is increment the guarded
+ variable, this is so the low priority task knows that it has
+ executed. */
+ ulGuardedVariable++;
+ }
+}
+/*-----------------------------------------------------------*/
+
+static void prvHighPriorityMutexTask(void *pvParameters)
+{
+ xSemaphoreHandle xMutex = (xSemaphoreHandle) pvParameters;
+
+ for (;;) {
+ /* The high priority task starts by suspending itself. The low
+ priority task will unsuspend this task when required. */
+ vTaskSuspend(NULL);
+
+ /* When this task unsuspends all it does is attempt to obtain
+ the mutex. It should find the mutex is not available so a
+ block time is specified. */
+ if (xSemaphoreTake(xMutex, portMAX_DELAY) != pdPASS) {
+ xErrorDetected = pdTRUE;
+ }
+
+ /* When we eventually obtain the mutex we just give it back then
+ return to suspend ready for the next test. */
+ if (xSemaphoreGive(xMutex) != pdPASS) {
+ xErrorDetected = pdTRUE;
+ }
+ }
+}
+/*-----------------------------------------------------------*/
+
+/* This is called to check that all the created tasks are still running. */
+portBASE_TYPE xAreGenericQueueTasksStillRunning(void)
+{
+ static unsigned portLONG ulLastLoopCounter = 0, ulLastLoopCounter2 = 0;
+
+ /* If the demo task is still running then we expect the loopcounters to
+ have incremented since this function was last called. */
+ if (ulLastLoopCounter == ulLoopCounter) {
+ xErrorDetected = pdTRUE;
+ }
+
+ if (ulLastLoopCounter2 == ulLoopCounter2) {
+ xErrorDetected = pdTRUE;
+ }
+
+ ulLastLoopCounter = ulLoopCounter;
+ ulLastLoopCounter2 = ulLoopCounter2;
+
+ /* Errors detected in the task itself will have latched xErrorDetected
+ to true. */
+
+ return !xErrorDetected;
+}
+
+
diff --git a/gyro_board/src/usb/CommonDemoTasks/PollQ.c b/gyro_board/src/usb/CommonDemoTasks/PollQ.c
new file mode 100644
index 0000000..5428693
--- /dev/null
+++ b/gyro_board/src/usb/CommonDemoTasks/PollQ.c
@@ -0,0 +1,230 @@
+/*
+ FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.
+
+ ***************************************************************************
+ * *
+ * If you are: *
+ * *
+ * + New to FreeRTOS, *
+ * + Wanting to learn FreeRTOS or multitasking in general quickly *
+ * + Looking for basic training, *
+ * + Wanting to improve your FreeRTOS skills and productivity *
+ * *
+ * then take a look at the FreeRTOS eBook *
+ * *
+ * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
+ * http://www.FreeRTOS.org/Documentation *
+ * *
+ * A pdf reference manual is also available. Both are usually delivered *
+ * to your inbox within 20 minutes to two hours when purchased between 8am *
+ * and 8pm GMT (although please allow up to 24 hours in case of *
+ * exceptional circumstances). Thank you for your support! *
+ * *
+ ***************************************************************************
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
+ ***NOTE*** The exception to the GPL is included to allow you to distribute
+ a combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details. You should have received a copy of the GNU General Public
+ License and the FreeRTOS license exception along with FreeRTOS; if not it
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained
+ by writing to Richard Barry, contact details for whom are available on the
+ FreeRTOS WEB site.
+
+ 1 tab == 4 spaces!
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+/*
+ * This version of PollQ. c is for use on systems that have limited stack
+ * space and no display facilities. The complete version can be found in
+ * the Demo/Common/Full directory.
+ *
+ * Creates two tasks that communicate over a single queue. One task acts as a
+ * producer, the other a consumer.
+ *
+ * The producer loops for three iteration, posting an incrementing number onto the
+ * queue each cycle. It then delays for a fixed period before doing exactly the
+ * same again.
+ *
+ * The consumer loops emptying the queue. Each item removed from the queue is
+ * checked to ensure it contains the expected value. When the queue is empty it
+ * blocks for a fixed period, then does the same again.
+ *
+ * All queue access is performed without blocking. The consumer completely empties
+ * the queue each time it runs so the producer should never find the queue full.
+ *
+ * An error is flagged if the consumer obtains an unexpected value or the producer
+ * find the queue is full.
+ */
+
+/*
+Changes from V2.0.0
+
+ + Delay periods are now specified using variables and constants of
+ portTickType rather than unsigned long.
+*/
+
+#include <stdlib.h>
+
+/* Scheduler include files. */
+#include "FreeRTOS.h"
+#include "task.h"
+#include "queue.h"
+
+/* Demo program include files. */
+#include "PollQ.h"
+
+#define pollqSTACK_SIZE configMINIMAL_STACK_SIZE
+#define pollqQUEUE_SIZE ( 10 )
+#define pollqPRODUCER_DELAY ( ( portTickType ) 200 / portTICK_RATE_MS )
+#define pollqCONSUMER_DELAY ( pollqPRODUCER_DELAY - ( portTickType ) ( 20 / portTICK_RATE_MS ) )
+#define pollqNO_DELAY ( ( portTickType ) 0 )
+#define pollqVALUES_TO_PRODUCE ( ( signed portBASE_TYPE ) 3 )
+#define pollqINITIAL_VALUE ( ( signed portBASE_TYPE ) 0 )
+
+/* The task that posts the incrementing number onto the queue. */
+static portTASK_FUNCTION_PROTO(vPolledQueueProducer, pvParameters);
+
+/* The task that empties the queue. */
+static portTASK_FUNCTION_PROTO(vPolledQueueConsumer, pvParameters);
+
+/* Variables that are used to check that the tasks are still running with no
+errors. */
+static volatile signed portBASE_TYPE xPollingConsumerCount = pollqINITIAL_VALUE, xPollingProducerCount = pollqINITIAL_VALUE;
+
+/*-----------------------------------------------------------*/
+
+void vStartPolledQueueTasks(unsigned portBASE_TYPE uxPriority)
+{
+ static xQueueHandle xPolledQueue;
+
+ /* Create the queue used by the producer and consumer. */
+ xPolledQueue = xQueueCreate(pollqQUEUE_SIZE, (unsigned portBASE_TYPE) sizeof(unsigned short));
+
+ /* vQueueAddToRegistry() adds the queue to the queue registry, if one is
+ in use. The queue registry is provided as a means for kernel aware
+ debuggers to locate queues and has no purpose if a kernel aware debugger
+ is not being used. The call to vQueueAddToRegistry() will be removed
+ by the pre-processor if configQUEUE_REGISTRY_SIZE is not defined or is
+ defined to be less than 1. */
+ vQueueAddToRegistry(xPolledQueue, (signed char *) "Poll_Test_Queue");
+
+ /* Spawn the producer and consumer. */
+ xTaskCreate(vPolledQueueConsumer, (signed char *) "QConsNB", pollqSTACK_SIZE, (void *) &xPolledQueue, uxPriority, (xTaskHandle *) NULL);
+ xTaskCreate(vPolledQueueProducer, (signed char *) "QProdNB", pollqSTACK_SIZE, (void *) &xPolledQueue, uxPriority, (xTaskHandle *) NULL);
+}
+/*-----------------------------------------------------------*/
+
+static portTASK_FUNCTION(vPolledQueueProducer, pvParameters)
+{
+ unsigned short usValue = (unsigned short) 0;
+ signed portBASE_TYPE xError = pdFALSE, xLoop;
+
+ for (;;) {
+ for (xLoop = 0; xLoop < pollqVALUES_TO_PRODUCE; xLoop++) {
+ /* Send an incrementing number on the queue without blocking. */
+ if (xQueueSend(*((xQueueHandle *) pvParameters), (void *) &usValue, pollqNO_DELAY) != pdPASS) {
+ /* We should never find the queue full so if we get here there
+ has been an error. */
+ xError = pdTRUE;
+ } else {
+ if (xError == pdFALSE) {
+ /* If an error has ever been recorded we stop incrementing the
+ check variable. */
+ portENTER_CRITICAL();
+ xPollingProducerCount++;
+ portEXIT_CRITICAL();
+ }
+
+ /* Update the value we are going to post next time around. */
+ usValue++;
+ }
+ }
+
+ /* Wait before we start posting again to ensure the consumer runs and
+ empties the queue. */
+ vTaskDelay(pollqPRODUCER_DELAY);
+ }
+} /*lint !e818 Function prototype must conform to API. */
+/*-----------------------------------------------------------*/
+
+static portTASK_FUNCTION(vPolledQueueConsumer, pvParameters)
+{
+ unsigned short usData, usExpectedValue = (unsigned short) 0;
+ signed portBASE_TYPE xError = pdFALSE;
+
+ for (;;) {
+ /* Loop until the queue is empty. */
+ while (uxQueueMessagesWaiting(*((xQueueHandle *) pvParameters))) {
+ if (xQueueReceive(*((xQueueHandle *) pvParameters), &usData, pollqNO_DELAY) == pdPASS) {
+ if (usData != usExpectedValue) {
+ /* This is not what we expected to receive so an error has
+ occurred. */
+ xError = pdTRUE;
+
+ /* Catch-up to the value we received so our next expected
+ value should again be correct. */
+ usExpectedValue = usData;
+ } else {
+ if (xError == pdFALSE) {
+ /* Only increment the check variable if no errors have
+ occurred. */
+ portENTER_CRITICAL();
+ xPollingConsumerCount++;
+ portEXIT_CRITICAL();
+ }
+ }
+
+ /* Next time round we would expect the number to be one higher. */
+ usExpectedValue++;
+ }
+ }
+
+ /* Now the queue is empty we block, allowing the producer to place more
+ items in the queue. */
+ vTaskDelay(pollqCONSUMER_DELAY);
+ }
+} /*lint !e818 Function prototype must conform to API. */
+/*-----------------------------------------------------------*/
+
+/* This is called to check that all the created tasks are still running with no errors. */
+portBASE_TYPE xArePollingQueuesStillRunning(void)
+{
+ portBASE_TYPE xReturn;
+
+ /* Check both the consumer and producer poll count to check they have both
+ been changed since out last trip round. We do not need a critical section
+ around the check variables as this is called from a higher priority than
+ the other tasks that access the same variables. */
+ if ((xPollingConsumerCount == pollqINITIAL_VALUE) ||
+ (xPollingProducerCount == pollqINITIAL_VALUE)
+ ) {
+ xReturn = pdFALSE;
+ } else {
+ xReturn = pdTRUE;
+ }
+
+ /* Set the check variables back down so we know if they have been
+ incremented the next time around. */
+ xPollingConsumerCount = pollqINITIAL_VALUE;
+ xPollingProducerCount = pollqINITIAL_VALUE;
+
+ return xReturn;
+}
diff --git a/gyro_board/src/usb/CommonDemoTasks/QPeek.c b/gyro_board/src/usb/CommonDemoTasks/QPeek.c
new file mode 100644
index 0000000..6aa2f78
--- /dev/null
+++ b/gyro_board/src/usb/CommonDemoTasks/QPeek.c
@@ -0,0 +1,416 @@
+/*
+ FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.
+
+ ***************************************************************************
+ * *
+ * If you are: *
+ * *
+ * + New to FreeRTOS, *
+ * + Wanting to learn FreeRTOS or multitasking in general quickly *
+ * + Looking for basic training, *
+ * + Wanting to improve your FreeRTOS skills and productivity *
+ * *
+ * then take a look at the FreeRTOS eBook *
+ * *
+ * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
+ * http://www.FreeRTOS.org/Documentation *
+ * *
+ * A pdf reference manual is also available. Both are usually delivered *
+ * to your inbox within 20 minutes to two hours when purchased between 8am *
+ * and 8pm GMT (although please allow up to 24 hours in case of *
+ * exceptional circumstances). Thank you for your support! *
+ * *
+ ***************************************************************************
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
+ ***NOTE*** The exception to the GPL is included to allow you to distribute
+ a combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details. You should have received a copy of the GNU General Public
+ License and the FreeRTOS license exception along with FreeRTOS; if not it
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained
+ by writing to Richard Barry, contact details for whom are available on the
+ FreeRTOS WEB site.
+
+ 1 tab == 4 spaces!
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+
+/*
+ * Tests the behaviour when data is peeked from a queue when there are
+ * multiple tasks blocked on the queue.
+ */
+
+
+#include <stdlib.h>
+
+/* Scheduler include files. */
+#include "FreeRTOS.h"
+#include "task.h"
+#include "queue.h"
+#include "semphr.h"
+
+/* Demo program include files. */
+#include "QPeek.h"
+
+#define qpeekQUEUE_LENGTH ( 5 )
+#define qpeekNO_BLOCK ( 0 )
+#define qpeekSHORT_DELAY ( 10 )
+
+#define qpeekLOW_PRIORITY ( tskIDLE_PRIORITY + 0 )
+#define qpeekMEDIUM_PRIORITY ( tskIDLE_PRIORITY + 1 )
+#define qpeekHIGH_PRIORITY ( tskIDLE_PRIORITY + 2 )
+#define qpeekHIGHEST_PRIORITY ( tskIDLE_PRIORITY + 3 )
+
+/*-----------------------------------------------------------*/
+
+/*
+ * The following three tasks are used to demonstrate the peeking behaviour.
+ * Each task is given a different priority to demonstrate the order in which
+ * tasks are woken as data is peeked from a queue.
+ */
+static void prvLowPriorityPeekTask(void *pvParameters);
+static void prvMediumPriorityPeekTask(void *pvParameters);
+static void prvHighPriorityPeekTask(void *pvParameters);
+static void prvHighestPriorityPeekTask(void *pvParameters);
+
+/*-----------------------------------------------------------*/
+
+/* Flag that will be latched to pdTRUE should any unexpected behaviour be
+detected in any of the tasks. */
+static volatile portBASE_TYPE xErrorDetected = pdFALSE;
+
+/* Counter that is incremented on each cycle of a test. This is used to
+detect a stalled task - a test that is no longer running. */
+static volatile unsigned portLONG ulLoopCounter = 0;
+
+/* Handles to the test tasks. */
+xTaskHandle xMediumPriorityTask, xHighPriorityTask, xHighestPriorityTask;
+/*-----------------------------------------------------------*/
+
+void vStartQueuePeekTasks(void)
+{
+ xQueueHandle xQueue;
+
+ /* Create the queue that we are going to use for the test/demo. */
+ xQueue = xQueueCreate(qpeekQUEUE_LENGTH, sizeof(unsigned portLONG));
+
+ /* vQueueAddToRegistry() adds the queue to the queue registry, if one is
+ in use. The queue registry is provided as a means for kernel aware
+ debuggers to locate queues and has no purpose if a kernel aware debugger
+ is not being used. The call to vQueueAddToRegistry() will be removed
+ by the pre-processor if configQUEUE_REGISTRY_SIZE is not defined or is
+ defined to be less than 1. */
+ vQueueAddToRegistry(xQueue, (signed portCHAR *) "QPeek_Test_Queue");
+
+ /* Create the demo tasks and pass it the queue just created. We are
+ passing the queue handle by value so it does not matter that it is declared
+ on the stack here. */
+ xTaskCreate(prvLowPriorityPeekTask, (signed portCHAR *)"PeekL", configMINIMAL_STACK_SIZE, (void *) xQueue, qpeekLOW_PRIORITY, NULL);
+ xTaskCreate(prvMediumPriorityPeekTask, (signed portCHAR *)"PeekM", configMINIMAL_STACK_SIZE, (void *) xQueue, qpeekMEDIUM_PRIORITY, &xMediumPriorityTask);
+ xTaskCreate(prvHighPriorityPeekTask, (signed portCHAR *)"PeekH1", configMINIMAL_STACK_SIZE, (void *) xQueue, qpeekHIGH_PRIORITY, &xHighPriorityTask);
+ xTaskCreate(prvHighestPriorityPeekTask, (signed portCHAR *)"PeekH2", configMINIMAL_STACK_SIZE, (void *) xQueue, qpeekHIGHEST_PRIORITY, &xHighestPriorityTask);
+}
+/*-----------------------------------------------------------*/
+
+static void prvHighestPriorityPeekTask(void *pvParameters)
+{
+ xQueueHandle xQueue = (xQueueHandle) pvParameters;
+ unsigned portLONG ulValue;
+
+#ifdef USE_STDIO
+ {
+ void vPrintDisplayMessage(const portCHAR * const * ppcMessageToSend);
+
+ const portCHAR * const pcTaskStartMsg = "Queue peek test started.\r\n";
+
+ /* Queue a message for printing to say the task has started. */
+ vPrintDisplayMessage(&pcTaskStartMsg);
+ }
+#endif
+
+ for (;;) {
+ /* Try peeking from the queue. The queue should be empty so we will
+ block, allowing the high priority task to execute. */
+ if (xQueuePeek(xQueue, &ulValue, portMAX_DELAY) != pdPASS) {
+ /* We expected to have received something by the time we unblock. */
+ xErrorDetected = pdTRUE;
+ }
+
+ /* When we reach here the high and medium priority tasks should still
+ be blocked on the queue. We unblocked because the low priority task
+ wrote a value to the queue, which we should have peeked. Peeking the
+ data (rather than receiving it) will leave the data on the queue, so
+ the high priority task should then have also been unblocked, but not
+ yet executed. */
+ if (ulValue != 0x11223344) {
+ /* We did not receive the expected value. */
+ xErrorDetected = pdTRUE;
+ }
+
+ if (uxQueueMessagesWaiting(xQueue) != 1) {
+ /* The message should have been left on the queue. */
+ xErrorDetected = pdTRUE;
+ }
+
+ /* Now we are going to actually receive the data, so when the high
+ priority task runs it will find the queue empty and return to the
+ blocked state. */
+ ulValue = 0;
+ if (xQueueReceive(xQueue, &ulValue, qpeekNO_BLOCK) != pdPASS) {
+ /* We expected to receive the value. */
+ xErrorDetected = pdTRUE;
+ }
+
+ if (ulValue != 0x11223344) {
+ /* We did not receive the expected value - which should have been
+ the same value as was peeked. */
+ xErrorDetected = pdTRUE;
+ }
+
+ /* Now we will block again as the queue is once more empty. The low
+ priority task can then execute again. */
+ if (xQueuePeek(xQueue, &ulValue, portMAX_DELAY) != pdPASS) {
+ /* We expected to have received something by the time we unblock. */
+ xErrorDetected = pdTRUE;
+ }
+
+ /* When we get here the low priority task should have again written to the
+ queue. */
+ if (ulValue != 0x01234567) {
+ /* We did not receive the expected value. */
+ xErrorDetected = pdTRUE;
+ }
+
+ if (uxQueueMessagesWaiting(xQueue) != 1) {
+ /* The message should have been left on the queue. */
+ xErrorDetected = pdTRUE;
+ }
+
+ /* We only peeked the data, so suspending ourselves now should enable
+ the high priority task to also peek the data. The high priority task
+ will have been unblocked when we peeked the data as we left the data
+ in the queue. */
+ vTaskSuspend(NULL);
+
+
+
+ /* This time we are going to do the same as the above test, but the
+ high priority task is going to receive the data, rather than peek it.
+ This means that the medium priority task should never peek the value. */
+ if (xQueuePeek(xQueue, &ulValue, portMAX_DELAY) != pdPASS) {
+ xErrorDetected = pdTRUE;
+ }
+
+ if (ulValue != 0xaabbaabb) {
+ xErrorDetected = pdTRUE;
+ }
+
+ vTaskSuspend(NULL);
+ }
+}
+/*-----------------------------------------------------------*/
+
+static void prvHighPriorityPeekTask(void *pvParameters)
+{
+ xQueueHandle xQueue = (xQueueHandle) pvParameters;
+ unsigned portLONG ulValue;
+
+ for (;;) {
+ /* Try peeking from the queue. The queue should be empty so we will
+ block, allowing the medium priority task to execute. Both the high
+ and highest priority tasks will then be blocked on the queue. */
+ if (xQueuePeek(xQueue, &ulValue, portMAX_DELAY) != pdPASS) {
+ /* We expected to have received something by the time we unblock. */
+ xErrorDetected = pdTRUE;
+ }
+
+ /* When we get here the highest priority task should have peeked the data
+ (unblocking this task) then suspended (allowing this task to also peek
+ the data). */
+ if (ulValue != 0x01234567) {
+ /* We did not receive the expected value. */
+ xErrorDetected = pdTRUE;
+ }
+
+ if (uxQueueMessagesWaiting(xQueue) != 1) {
+ /* The message should have been left on the queue. */
+ xErrorDetected = pdTRUE;
+ }
+
+ /* We only peeked the data, so suspending ourselves now should enable
+ the medium priority task to also peek the data. The medium priority task
+ will have been unblocked when we peeked the data as we left the data
+ in the queue. */
+ vTaskSuspend(NULL);
+
+
+ /* This time we are going actually receive the value, so the medium
+ priority task will never peek the data - we removed it from the queue. */
+ if (xQueueReceive(xQueue, &ulValue, portMAX_DELAY) != pdPASS) {
+ xErrorDetected = pdTRUE;
+ }
+
+ if (ulValue != 0xaabbaabb) {
+ xErrorDetected = pdTRUE;
+ }
+
+ vTaskSuspend(NULL);
+ }
+}
+/*-----------------------------------------------------------*/
+
+static void prvMediumPriorityPeekTask(void *pvParameters)
+{
+ xQueueHandle xQueue = (xQueueHandle) pvParameters;
+ unsigned portLONG ulValue;
+
+ for (;;) {
+ /* Try peeking from the queue. The queue should be empty so we will
+ block, allowing the low priority task to execute. The highest, high
+ and medium priority tasks will then all be blocked on the queue. */
+ if (xQueuePeek(xQueue, &ulValue, portMAX_DELAY) != pdPASS) {
+ /* We expected to have received something by the time we unblock. */
+ xErrorDetected = pdTRUE;
+ }
+
+ /* When we get here the high priority task should have peeked the data
+ (unblocking this task) then suspended (allowing this task to also peek
+ the data). */
+ if (ulValue != 0x01234567) {
+ /* We did not receive the expected value. */
+ xErrorDetected = pdTRUE;
+ }
+
+ if (uxQueueMessagesWaiting(xQueue) != 1) {
+ /* The message should have been left on the queue. */
+ xErrorDetected = pdTRUE;
+ }
+
+ /* Just so we know the test is still running. */
+ ulLoopCounter++;
+
+ /* Now we can suspend ourselves so the low priority task can execute
+ again. */
+ vTaskSuspend(NULL);
+ }
+}
+/*-----------------------------------------------------------*/
+
+static void prvLowPriorityPeekTask(void *pvParameters)
+{
+ xQueueHandle xQueue = (xQueueHandle) pvParameters;
+ unsigned portLONG ulValue;
+
+ for (;;) {
+ /* Write some data to the queue. This should unblock the highest
+ priority task that is waiting to peek data from the queue. */
+ ulValue = 0x11223344;
+ if (xQueueSendToBack(xQueue, &ulValue, qpeekNO_BLOCK) != pdPASS) {
+ /* We were expecting the queue to be empty so we should not of
+ had a problem writing to the queue. */
+ xErrorDetected = pdTRUE;
+ }
+
+ /* By the time we get here the data should have been removed from
+ the queue. */
+ if (uxQueueMessagesWaiting(xQueue) != 0) {
+ xErrorDetected = pdTRUE;
+ }
+
+ /* Write another value to the queue, again waking the highest priority
+ task that is blocked on the queue. */
+ ulValue = 0x01234567;
+ if (xQueueSendToBack(xQueue, &ulValue, qpeekNO_BLOCK) != pdPASS) {
+ /* We were expecting the queue to be empty so we should not of
+ had a problem writing to the queue. */
+ xErrorDetected = pdTRUE;
+ }
+
+ /* All the other tasks should now have successfully peeked the data.
+ The data is still in the queue so we should be able to receive it. */
+ ulValue = 0;
+ if (xQueueReceive(xQueue, &ulValue, qpeekNO_BLOCK) != pdPASS) {
+ /* We expected to receive the data. */
+ xErrorDetected = pdTRUE;
+ }
+
+ if (ulValue != 0x01234567) {
+ /* We did not receive the expected value. */
+ }
+
+ /* Lets just delay a while as this is an intensive test as we don't
+ want to starve other tests of processing time. */
+ vTaskDelay(qpeekSHORT_DELAY);
+
+ /* Unsuspend the other tasks so we can repeat the test - this time
+ however not all the other tasks will peek the data as the high
+ priority task is actually going to remove it from the queue. Send
+ to front is used just to be different. As the queue is empty it
+ makes no difference to the result. */
+ vTaskResume(xMediumPriorityTask);
+ vTaskResume(xHighPriorityTask);
+ vTaskResume(xHighestPriorityTask);
+
+ ulValue = 0xaabbaabb;
+ if (xQueueSendToFront(xQueue, &ulValue, qpeekNO_BLOCK) != pdPASS) {
+ /* We were expecting the queue to be empty so we should not of
+ had a problem writing to the queue. */
+ xErrorDetected = pdTRUE;
+ }
+
+ /* This time we should find that the queue is empty. The high priority
+ task actually removed the data rather than just peeking it. */
+ if (xQueuePeek(xQueue, &ulValue, qpeekNO_BLOCK) != errQUEUE_EMPTY) {
+ /* We expected to receive the data. */
+ xErrorDetected = pdTRUE;
+ }
+
+ /* Unsuspend the highest and high priority tasks so we can go back
+ and repeat the whole thing. The medium priority task should not be
+ suspended as it was not able to peek the data in this last case. */
+ vTaskResume(xHighPriorityTask);
+ vTaskResume(xHighestPriorityTask);
+
+ /* Lets just delay a while as this is an intensive test as we don't
+ want to starve other tests of processing time. */
+ vTaskDelay(qpeekSHORT_DELAY);
+ }
+}
+/*-----------------------------------------------------------*/
+
+/* This is called to check that all the created tasks are still running. */
+portBASE_TYPE xAreQueuePeekTasksStillRunning(void)
+{
+ static unsigned portLONG ulLastLoopCounter = 0;
+
+ /* If the demo task is still running then we expect the loopcounter to
+ have incremented since this function was last called. */
+ if (ulLastLoopCounter == ulLoopCounter) {
+ xErrorDetected = pdTRUE;
+ }
+
+ ulLastLoopCounter = ulLoopCounter;
+
+ /* Errors detected in the task itself will have latched xErrorDetected
+ to true. */
+
+ return !xErrorDetected;
+}
+
diff --git a/gyro_board/src/usb/CommonDemoTasks/blocktim.c b/gyro_board/src/usb/CommonDemoTasks/blocktim.c
new file mode 100644
index 0000000..0174cee
--- /dev/null
+++ b/gyro_board/src/usb/CommonDemoTasks/blocktim.c
@@ -0,0 +1,456 @@
+/*
+ FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.
+
+ ***************************************************************************
+ * *
+ * If you are: *
+ * *
+ * + New to FreeRTOS, *
+ * + Wanting to learn FreeRTOS or multitasking in general quickly *
+ * + Looking for basic training, *
+ * + Wanting to improve your FreeRTOS skills and productivity *
+ * *
+ * then take a look at the FreeRTOS eBook *
+ * *
+ * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
+ * http://www.FreeRTOS.org/Documentation *
+ * *
+ * A pdf reference manual is also available. Both are usually delivered *
+ * to your inbox within 20 minutes to two hours when purchased between 8am *
+ * and 8pm GMT (although please allow up to 24 hours in case of *
+ * exceptional circumstances). Thank you for your support! *
+ * *
+ ***************************************************************************
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
+ ***NOTE*** The exception to the GPL is included to allow you to distribute
+ a combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details. You should have received a copy of the GNU General Public
+ License and the FreeRTOS license exception along with FreeRTOS; if not it
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained
+ by writing to Richard Barry, contact details for whom are available on the
+ FreeRTOS WEB site.
+
+ 1 tab == 4 spaces!
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+/*
+ * This file contains some test scenarios that ensure tasks do not exit queue
+ * send or receive functions prematurely. A description of the tests is
+ * included within the code.
+ */
+
+/* Kernel includes. */
+#include "FreeRTOS.h"
+#include "task.h"
+#include "queue.h"
+
+/* Demo includes. */
+#include "blocktim.h"
+
+/* Task priorities. Allow these to be overridden. */
+#ifndef bktPRIMARY_PRIORITY
+#define bktPRIMARY_PRIORITY ( 3 )
+#endif
+
+#ifndef bktSECONDARY_PRIORITY
+#define bktSECONDARY_PRIORITY ( 2 )
+#endif
+
+/* Task behaviour. */
+#define bktQUEUE_LENGTH ( 5 )
+#define bktSHORT_WAIT ( ( ( portTickType ) 20 ) / portTICK_RATE_MS )
+#define bktPRIMARY_BLOCK_TIME ( 10 )
+#define bktALLOWABLE_MARGIN ( 15 )
+#define bktTIME_TO_BLOCK ( 175 )
+#define bktDONT_BLOCK ( ( portTickType ) 0 )
+#define bktRUN_INDICATOR ( ( unsigned portBASE_TYPE ) 0x55 )
+
+/* The queue on which the tasks block. */
+static xQueueHandle xTestQueue;
+
+/* Handle to the secondary task is required by the primary task for calls
+to vTaskSuspend/Resume(). */
+static xTaskHandle xSecondary;
+
+/* Used to ensure that tasks are still executing without error. */
+static volatile portBASE_TYPE xPrimaryCycles = 0, xSecondaryCycles = 0;
+static volatile portBASE_TYPE xErrorOccurred = pdFALSE;
+
+/* Provides a simple mechanism for the primary task to know when the
+secondary task has executed. */
+static volatile unsigned portBASE_TYPE xRunIndicator;
+
+/* The two test tasks. Their behaviour is commented within the files. */
+static void vPrimaryBlockTimeTestTask(void *pvParameters);
+static void vSecondaryBlockTimeTestTask(void *pvParameters);
+
+/*-----------------------------------------------------------*/
+
+void vCreateBlockTimeTasks(void)
+{
+ /* Create the queue on which the two tasks block. */
+ xTestQueue = xQueueCreate(bktQUEUE_LENGTH, sizeof(portBASE_TYPE));
+
+ /* vQueueAddToRegistry() adds the queue to the queue registry, if one is
+ in use. The queue registry is provided as a means for kernel aware
+ debuggers to locate queues and has no purpose if a kernel aware debugger
+ is not being used. The call to vQueueAddToRegistry() will be removed
+ by the pre-processor if configQUEUE_REGISTRY_SIZE is not defined or is
+ defined to be less than 1. */
+ vQueueAddToRegistry(xTestQueue, (signed char *) "Block_Time_Queue");
+
+ /* Create the two test tasks. */
+ xTaskCreate(vPrimaryBlockTimeTestTask, (signed char *)"BTest1", configMINIMAL_STACK_SIZE, NULL, bktPRIMARY_PRIORITY, NULL);
+ xTaskCreate(vSecondaryBlockTimeTestTask, (signed char *)"BTest2", configMINIMAL_STACK_SIZE, NULL, bktSECONDARY_PRIORITY, &xSecondary);
+}
+/*-----------------------------------------------------------*/
+
+static void vPrimaryBlockTimeTestTask(void *pvParameters)
+{
+ portBASE_TYPE xItem, xData;
+ portTickType xTimeWhenBlocking;
+ portTickType xTimeToBlock, xBlockedTime;
+
+ (void) pvParameters;
+
+ for (;;) {
+ /*********************************************************************
+ Test 1
+
+ Simple block time wakeup test on queue receives. */
+ for (xItem = 0; xItem < bktQUEUE_LENGTH; xItem++) {
+ /* The queue is empty. Attempt to read from the queue using a block
+ time. When we wake, ensure the delta in time is as expected. */
+ xTimeToBlock = bktPRIMARY_BLOCK_TIME << xItem;
+
+ xTimeWhenBlocking = xTaskGetTickCount();
+
+ /* We should unblock after xTimeToBlock having not received
+ anything on the queue. */
+ if (xQueueReceive(xTestQueue, &xData, xTimeToBlock) != errQUEUE_EMPTY) {
+ xErrorOccurred = pdTRUE;
+ }
+
+ /* How long were we blocked for? */
+ xBlockedTime = xTaskGetTickCount() - xTimeWhenBlocking;
+
+ if (xBlockedTime < xTimeToBlock) {
+ /* Should not have blocked for less than we requested. */
+ xErrorOccurred = pdTRUE;
+ }
+
+ if (xBlockedTime > (xTimeToBlock + bktALLOWABLE_MARGIN)) {
+ /* Should not have blocked for longer than we requested,
+ although we would not necessarily run as soon as we were
+ unblocked so a margin is allowed. */
+ xErrorOccurred = pdTRUE;
+ }
+ }
+
+ /*********************************************************************
+ Test 2
+
+ Simple block time wakeup test on queue sends.
+
+ First fill the queue. It should be empty so all sends should pass. */
+ for (xItem = 0; xItem < bktQUEUE_LENGTH; xItem++) {
+ if (xQueueSend(xTestQueue, &xItem, bktDONT_BLOCK) != pdPASS) {
+ xErrorOccurred = pdTRUE;
+ }
+
+#if configUSE_PREEMPTION == 0
+ taskYIELD();
+#endif
+ }
+
+ for (xItem = 0; xItem < bktQUEUE_LENGTH; xItem++) {
+ /* The queue is full. Attempt to write to the queue using a block
+ time. When we wake, ensure the delta in time is as expected. */
+ xTimeToBlock = bktPRIMARY_BLOCK_TIME << xItem;
+
+ xTimeWhenBlocking = xTaskGetTickCount();
+
+ /* We should unblock after xTimeToBlock having not received
+ anything on the queue. */
+ if (xQueueSend(xTestQueue, &xItem, xTimeToBlock) != errQUEUE_FULL) {
+ xErrorOccurred = pdTRUE;
+ }
+
+ /* How long were we blocked for? */
+ xBlockedTime = xTaskGetTickCount() - xTimeWhenBlocking;
+
+ if (xBlockedTime < xTimeToBlock) {
+ /* Should not have blocked for less than we requested. */
+ xErrorOccurred = pdTRUE;
+ }
+
+ if (xBlockedTime > (xTimeToBlock + bktALLOWABLE_MARGIN)) {
+ /* Should not have blocked for longer than we requested,
+ although we would not necessarily run as soon as we were
+ unblocked so a margin is allowed. */
+ xErrorOccurred = pdTRUE;
+ }
+ }
+
+ /*********************************************************************
+ Test 3
+
+ Wake the other task, it will block attempting to post to the queue.
+ When we read from the queue the other task will wake, but before it
+ can run we will post to the queue again. When the other task runs it
+ will find the queue still full, even though it was woken. It should
+ recognise that its block time has not expired and return to block for
+ the remains of its block time.
+
+ Wake the other task so it blocks attempting to post to the already
+ full queue. */
+ xRunIndicator = 0;
+ vTaskResume(xSecondary);
+
+ /* We need to wait a little to ensure the other task executes. */
+ while (xRunIndicator != bktRUN_INDICATOR) {
+ /* The other task has not yet executed. */
+ vTaskDelay(bktSHORT_WAIT);
+ }
+ /* Make sure the other task is blocked on the queue. */
+ vTaskDelay(bktSHORT_WAIT);
+ xRunIndicator = 0;
+
+ for (xItem = 0; xItem < bktQUEUE_LENGTH; xItem++) {
+ /* Now when we make space on the queue the other task should wake
+ but not execute as this task has higher priority. */
+ if (xQueueReceive(xTestQueue, &xData, bktDONT_BLOCK) != pdPASS) {
+ xErrorOccurred = pdTRUE;
+ }
+
+ /* Now fill the queue again before the other task gets a chance to
+ execute. If the other task had executed we would find the queue
+ full ourselves, and the other task have set xRunIndicator. */
+ if (xQueueSend(xTestQueue, &xItem, bktDONT_BLOCK) != pdPASS) {
+ xErrorOccurred = pdTRUE;
+ }
+
+ if (xRunIndicator == bktRUN_INDICATOR) {
+ /* The other task should not have executed. */
+ xErrorOccurred = pdTRUE;
+ }
+
+ /* Raise the priority of the other task so it executes and blocks
+ on the queue again. */
+ vTaskPrioritySet(xSecondary, bktPRIMARY_PRIORITY + 2);
+
+ /* The other task should now have re-blocked without exiting the
+ queue function. */
+ if (xRunIndicator == bktRUN_INDICATOR) {
+ /* The other task should not have executed outside of the
+ queue function. */
+ xErrorOccurred = pdTRUE;
+ }
+
+ /* Set the priority back down. */
+ vTaskPrioritySet(xSecondary, bktSECONDARY_PRIORITY);
+ }
+
+ /* Let the other task timeout. When it unblockes it will check that it
+ unblocked at the correct time, then suspend itself. */
+ while (xRunIndicator != bktRUN_INDICATOR) {
+ vTaskDelay(bktSHORT_WAIT);
+ }
+ vTaskDelay(bktSHORT_WAIT);
+ xRunIndicator = 0;
+
+
+ /*********************************************************************
+ Test 4
+
+ As per test 3 - but with the send and receive the other way around.
+ The other task blocks attempting to read from the queue.
+
+ Empty the queue. We should find that it is full. */
+ for (xItem = 0; xItem < bktQUEUE_LENGTH; xItem++) {
+ if (xQueueReceive(xTestQueue, &xData, bktDONT_BLOCK) != pdPASS) {
+ xErrorOccurred = pdTRUE;
+ }
+ }
+
+ /* Wake the other task so it blocks attempting to read from the
+ already empty queue. */
+ vTaskResume(xSecondary);
+
+ /* We need to wait a little to ensure the other task executes. */
+ while (xRunIndicator != bktRUN_INDICATOR) {
+ vTaskDelay(bktSHORT_WAIT);
+ }
+ vTaskDelay(bktSHORT_WAIT);
+ xRunIndicator = 0;
+
+ for (xItem = 0; xItem < bktQUEUE_LENGTH; xItem++) {
+ /* Now when we place an item on the queue the other task should
+ wake but not execute as this task has higher priority. */
+ if (xQueueSend(xTestQueue, &xItem, bktDONT_BLOCK) != pdPASS) {
+ xErrorOccurred = pdTRUE;
+ }
+
+ /* Now empty the queue again before the other task gets a chance to
+ execute. If the other task had executed we would find the queue
+ empty ourselves, and the other task would be suspended. */
+ if (xQueueReceive(xTestQueue, &xData, bktDONT_BLOCK) != pdPASS) {
+ xErrorOccurred = pdTRUE;
+ }
+
+ if (xRunIndicator == bktRUN_INDICATOR) {
+ /* The other task should not have executed. */
+ xErrorOccurred = pdTRUE;
+ }
+
+ /* Raise the priority of the other task so it executes and blocks
+ on the queue again. */
+ vTaskPrioritySet(xSecondary, bktPRIMARY_PRIORITY + 2);
+
+ /* The other task should now have re-blocked without exiting the
+ queue function. */
+ if (xRunIndicator == bktRUN_INDICATOR) {
+ /* The other task should not have executed outside of the
+ queue function. */
+ xErrorOccurred = pdTRUE;
+ }
+ vTaskPrioritySet(xSecondary, bktSECONDARY_PRIORITY);
+ }
+
+ /* Let the other task timeout. When it unblockes it will check that it
+ unblocked at the correct time, then suspend itself. */
+ while (xRunIndicator != bktRUN_INDICATOR) {
+ vTaskDelay(bktSHORT_WAIT);
+ }
+ vTaskDelay(bktSHORT_WAIT);
+
+ xPrimaryCycles++;
+ }
+}
+/*-----------------------------------------------------------*/
+
+static void vSecondaryBlockTimeTestTask(void *pvParameters)
+{
+ portTickType xTimeWhenBlocking, xBlockedTime;
+ portBASE_TYPE xData;
+
+ (void) pvParameters;
+
+ for (;;) {
+ /*********************************************************************
+ Test 1 and 2
+
+ This task does does not participate in these tests. */
+ vTaskSuspend(NULL);
+
+ /*********************************************************************
+ Test 3
+
+ The first thing we do is attempt to read from the queue. It should be
+ full so we block. Note the time before we block so we can check the
+ wake time is as per that expected. */
+ xTimeWhenBlocking = xTaskGetTickCount();
+
+ /* We should unblock after bktTIME_TO_BLOCK having not sent
+ anything to the queue. */
+ xData = 0;
+ xRunIndicator = bktRUN_INDICATOR;
+ if (xQueueSend(xTestQueue, &xData, bktTIME_TO_BLOCK) != errQUEUE_FULL) {
+ xErrorOccurred = pdTRUE;
+ }
+
+ /* How long were we inside the send function? */
+ xBlockedTime = xTaskGetTickCount() - xTimeWhenBlocking;
+
+ /* We should not have blocked for less time than bktTIME_TO_BLOCK. */
+ if (xBlockedTime < bktTIME_TO_BLOCK) {
+ xErrorOccurred = pdTRUE;
+ }
+
+ /* We should of not blocked for much longer than bktALLOWABLE_MARGIN
+ either. A margin is permitted as we would not necessarily run as
+ soon as we unblocked. */
+ if (xBlockedTime > (bktTIME_TO_BLOCK + bktALLOWABLE_MARGIN)) {
+ xErrorOccurred = pdTRUE;
+ }
+
+ /* Suspend ready for test 3. */
+ xRunIndicator = bktRUN_INDICATOR;
+ vTaskSuspend(NULL);
+
+ /*********************************************************************
+ Test 4
+
+ As per test three, but with the send and receive reversed. */
+ xTimeWhenBlocking = xTaskGetTickCount();
+
+ /* We should unblock after bktTIME_TO_BLOCK having not received
+ anything on the queue. */
+ xRunIndicator = bktRUN_INDICATOR;
+ if (xQueueReceive(xTestQueue, &xData, bktTIME_TO_BLOCK) != errQUEUE_EMPTY) {
+ xErrorOccurred = pdTRUE;
+ }
+
+ xBlockedTime = xTaskGetTickCount() - xTimeWhenBlocking;
+
+ /* We should not have blocked for less time than bktTIME_TO_BLOCK. */
+ if (xBlockedTime < bktTIME_TO_BLOCK) {
+ xErrorOccurred = pdTRUE;
+ }
+
+ /* We should of not blocked for much longer than bktALLOWABLE_MARGIN
+ either. A margin is permitted as we would not necessarily run as soon
+ as we unblocked. */
+ if (xBlockedTime > (bktTIME_TO_BLOCK + bktALLOWABLE_MARGIN)) {
+ xErrorOccurred = pdTRUE;
+ }
+
+ xRunIndicator = bktRUN_INDICATOR;
+
+ xSecondaryCycles++;
+ }
+}
+/*-----------------------------------------------------------*/
+
+portBASE_TYPE xAreBlockTimeTestTasksStillRunning(void)
+{
+ static portBASE_TYPE xLastPrimaryCycleCount = 0, xLastSecondaryCycleCount = 0;
+ portBASE_TYPE xReturn = pdPASS;
+
+ /* Have both tasks performed at least one cycle since this function was
+ last called? */
+ if (xPrimaryCycles == xLastPrimaryCycleCount) {
+ xReturn = pdFAIL;
+ }
+
+ if (xSecondaryCycles == xLastSecondaryCycleCount) {
+ xReturn = pdFAIL;
+ }
+
+ if (xErrorOccurred == pdTRUE) {
+ xReturn = pdFAIL;
+ }
+
+ xLastSecondaryCycleCount = xSecondaryCycles;
+ xLastPrimaryCycleCount = xPrimaryCycles;
+
+ return xReturn;
+}
diff --git a/gyro_board/src/usb/CommonDemoTasks/flash.c b/gyro_board/src/usb/CommonDemoTasks/flash.c
new file mode 100644
index 0000000..fadc899
--- /dev/null
+++ b/gyro_board/src/usb/CommonDemoTasks/flash.c
@@ -0,0 +1,146 @@
+/*
+ FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.
+
+ ***************************************************************************
+ * *
+ * If you are: *
+ * *
+ * + New to FreeRTOS, *
+ * + Wanting to learn FreeRTOS or multitasking in general quickly *
+ * + Looking for basic training, *
+ * + Wanting to improve your FreeRTOS skills and productivity *
+ * *
+ * then take a look at the FreeRTOS eBook *
+ * *
+ * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
+ * http://www.FreeRTOS.org/Documentation *
+ * *
+ * A pdf reference manual is also available. Both are usually delivered *
+ * to your inbox within 20 minutes to two hours when purchased between 8am *
+ * and 8pm GMT (although please allow up to 24 hours in case of *
+ * exceptional circumstances). Thank you for your support! *
+ * *
+ ***************************************************************************
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
+ ***NOTE*** The exception to the GPL is included to allow you to distribute
+ a combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details. You should have received a copy of the GNU General Public
+ License and the FreeRTOS license exception along with FreeRTOS; if not it
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained
+ by writing to Richard Barry, contact details for whom are available on the
+ FreeRTOS WEB site.
+
+ 1 tab == 4 spaces!
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+/**
+ * This version of flash .c is for use on systems that have limited stack space
+ * and no display facilities. The complete version can be found in the
+ * Demo/Common/Full directory.
+ *
+ * Three tasks are created, each of which flash an LED at a different rate. The first
+ * LED flashes every 200ms, the second every 400ms, the third every 600ms.
+ *
+ * The LED flash tasks provide instant visual feedback. They show that the scheduler
+ * is still operational.
+ *
+ */
+
+
+#include <stdlib.h>
+
+/* Scheduler include files. */
+#include "FreeRTOS.h"
+#include "task.h"
+
+/* Demo program include files. */
+#include "partest.h"
+#include "flash.h"
+
+#define ledSTACK_SIZE configMINIMAL_STACK_SIZE
+#define ledNUMBER_OF_LEDS ( 3 )
+#define ledFLASH_RATE_BASE ( ( portTickType ) 333 )
+
+/* Variable used by the created tasks to calculate the LED number to use, and
+the rate at which they should flash the LED. */
+static volatile unsigned portBASE_TYPE uxFlashTaskNumber = 0;
+
+/* The task that is created three times. */
+static portTASK_FUNCTION_PROTO(vLEDFlashTask, pvParameters);
+
+/*-----------------------------------------------------------*/
+
+// To continually print out the serial output, run the following command.
+// while true; do [ `ls /dev/ttyACM* 2>/dev/null` ] && ls /dev/ttyACM* | python -c "import sys; x = sys.stdin.readline()[:-1].split(' ')[0]; sys.stderr.write('Connecting to %s\n' % (x,)); print x" | xargs cat || sleep 0.25; done
+
+void vStartLEDFlashTasks(unsigned portBASE_TYPE uxPriority)
+{
+ signed portBASE_TYPE xLEDTask;
+
+ /* Create the three tasks. */
+ for (xLEDTask = 0; xLEDTask < ledNUMBER_OF_LEDS; ++xLEDTask) {
+ /* Spawn the task. */
+ xTaskCreate(vLEDFlashTask, (signed char *) "LEDx", ledSTACK_SIZE, NULL, uxPriority, (xTaskHandle *) NULL);
+ }
+}
+/*-----------------------------------------------------------*/
+
+static portTASK_FUNCTION(vLEDFlashTask, pvParameters)
+{
+ portTickType xFlashRate, xLastFlashTime;
+ unsigned portBASE_TYPE uxLED;
+
+ /* The parameters are not used. */
+ (void) pvParameters;
+
+ /* Calculate the LED and flash rate. */
+ portENTER_CRITICAL();
+ {
+ /* See which of the eight LED's we should use. */
+ uxLED = uxFlashTaskNumber;
+
+ /* Update so the next task uses the next LED. */
+ uxFlashTaskNumber++;
+ }
+ portEXIT_CRITICAL();
+
+ xFlashRate = ledFLASH_RATE_BASE + (ledFLASH_RATE_BASE * (portTickType) uxLED);
+ xFlashRate /= portTICK_RATE_MS;
+
+ /* We will turn the LED on and off again in the delay period, so each
+ delay is only half the total period. */
+ xFlashRate /= (portTickType) 2;
+
+ /* We need to initialise xLastFlashTime prior to the first call to
+ vTaskDelayUntil(). */
+ xLastFlashTime = xTaskGetTickCount();
+
+ for (;;) {
+ /* Delay for half the flash period then turn the LED on. */
+ vTaskDelayUntil(&xLastFlashTime, xFlashRate);
+ vParTestToggleLED(uxLED);
+
+ /* Delay for half the flash period then turn the LED off. */
+ vTaskDelayUntil(&xLastFlashTime, xFlashRate);
+ vParTestToggleLED(uxLED);
+ }
+} /*lint !e715 !e818 !e830 Function definition must be standard for task creation. */
+
diff --git a/gyro_board/src/usb/CommonDemoTasks/include/AltBlckQ.h b/gyro_board/src/usb/CommonDemoTasks/include/AltBlckQ.h
new file mode 100644
index 0000000..dad37ba
--- /dev/null
+++ b/gyro_board/src/usb/CommonDemoTasks/include/AltBlckQ.h
@@ -0,0 +1,62 @@
+/*
+ FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.
+
+ ***************************************************************************
+ * *
+ * If you are: *
+ * *
+ * + New to FreeRTOS, *
+ * + Wanting to learn FreeRTOS or multitasking in general quickly *
+ * + Looking for basic training, *
+ * + Wanting to improve your FreeRTOS skills and productivity *
+ * *
+ * then take a look at the FreeRTOS eBook *
+ * *
+ * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
+ * http://www.FreeRTOS.org/Documentation *
+ * *
+ * A pdf reference manual is also available. Both are usually delivered *
+ * to your inbox within 20 minutes to two hours when purchased between 8am *
+ * and 8pm GMT (although please allow up to 24 hours in case of *
+ * exceptional circumstances). Thank you for your support! *
+ * *
+ ***************************************************************************
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
+ ***NOTE*** The exception to the GPL is included to allow you to distribute
+ a combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details. You should have received a copy of the GNU General Public
+ License and the FreeRTOS license exception along with FreeRTOS; if not it
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained
+ by writing to Richard Barry, contact details for whom are available on the
+ FreeRTOS WEB site.
+
+ 1 tab == 4 spaces!
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef ALT_BLOCK_Q_H
+#define ALT_BLOCK_Q_H
+
+void vStartAltBlockingQueueTasks(unsigned portBASE_TYPE uxPriority);
+portBASE_TYPE xAreAltBlockingQueuesStillRunning(void);
+
+#endif
+
+
diff --git a/gyro_board/src/usb/CommonDemoTasks/include/AltBlock.h b/gyro_board/src/usb/CommonDemoTasks/include/AltBlock.h
new file mode 100644
index 0000000..caa0516
--- /dev/null
+++ b/gyro_board/src/usb/CommonDemoTasks/include/AltBlock.h
@@ -0,0 +1,62 @@
+/*
+ FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.
+
+ ***************************************************************************
+ * *
+ * If you are: *
+ * *
+ * + New to FreeRTOS, *
+ * + Wanting to learn FreeRTOS or multitasking in general quickly *
+ * + Looking for basic training, *
+ * + Wanting to improve your FreeRTOS skills and productivity *
+ * *
+ * then take a look at the FreeRTOS eBook *
+ * *
+ * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
+ * http://www.FreeRTOS.org/Documentation *
+ * *
+ * A pdf reference manual is also available. Both are usually delivered *
+ * to your inbox within 20 minutes to two hours when purchased between 8am *
+ * and 8pm GMT (although please allow up to 24 hours in case of *
+ * exceptional circumstances). Thank you for your support! *
+ * *
+ ***************************************************************************
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
+ ***NOTE*** The exception to the GPL is included to allow you to distribute
+ a combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details. You should have received a copy of the GNU General Public
+ License and the FreeRTOS license exception along with FreeRTOS; if not it
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained
+ by writing to Richard Barry, contact details for whom are available on the
+ FreeRTOS WEB site.
+
+ 1 tab == 4 spaces!
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef FAST_BLOCK_TIME_TEST_H
+#define FAST_BLOCK_TIME_TEST_H
+
+void vCreateAltBlockTimeTasks(void);
+portBASE_TYPE xAreAltBlockTimeTestTasksStillRunning(void);
+
+#endif
+
+
diff --git a/gyro_board/src/usb/CommonDemoTasks/include/AltPollQ.h b/gyro_board/src/usb/CommonDemoTasks/include/AltPollQ.h
new file mode 100644
index 0000000..66ac04e
--- /dev/null
+++ b/gyro_board/src/usb/CommonDemoTasks/include/AltPollQ.h
@@ -0,0 +1,62 @@
+/*
+ FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.
+
+ ***************************************************************************
+ * *
+ * If you are: *
+ * *
+ * + New to FreeRTOS, *
+ * + Wanting to learn FreeRTOS or multitasking in general quickly *
+ * + Looking for basic training, *
+ * + Wanting to improve your FreeRTOS skills and productivity *
+ * *
+ * then take a look at the FreeRTOS eBook *
+ * *
+ * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
+ * http://www.FreeRTOS.org/Documentation *
+ * *
+ * A pdf reference manual is also available. Both are usually delivered *
+ * to your inbox within 20 minutes to two hours when purchased between 8am *
+ * and 8pm GMT (although please allow up to 24 hours in case of *
+ * exceptional circumstances). Thank you for your support! *
+ * *
+ ***************************************************************************
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
+ ***NOTE*** The exception to the GPL is included to allow you to distribute
+ a combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details. You should have received a copy of the GNU General Public
+ License and the FreeRTOS license exception along with FreeRTOS; if not it
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained
+ by writing to Richard Barry, contact details for whom are available on the
+ FreeRTOS WEB site.
+
+ 1 tab == 4 spaces!
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef ALT_POLLED_Q_H
+#define ALT_POLLED_Q_H
+
+void vStartAltPolledQueueTasks(unsigned portBASE_TYPE uxPriority);
+portBASE_TYPE xAreAltPollingQueuesStillRunning(void);
+
+#endif
+
+
diff --git a/gyro_board/src/usb/CommonDemoTasks/include/AltQTest.h b/gyro_board/src/usb/CommonDemoTasks/include/AltQTest.h
new file mode 100644
index 0000000..b8cc24d
--- /dev/null
+++ b/gyro_board/src/usb/CommonDemoTasks/include/AltQTest.h
@@ -0,0 +1,63 @@
+/*
+ FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.
+
+ ***************************************************************************
+ * *
+ * If you are: *
+ * *
+ * + New to FreeRTOS, *
+ * + Wanting to learn FreeRTOS or multitasking in general quickly *
+ * + Looking for basic training, *
+ * + Wanting to improve your FreeRTOS skills and productivity *
+ * *
+ * then take a look at the FreeRTOS eBook *
+ * *
+ * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
+ * http://www.FreeRTOS.org/Documentation *
+ * *
+ * A pdf reference manual is also available. Both are usually delivered *
+ * to your inbox within 20 minutes to two hours when purchased between 8am *
+ * and 8pm GMT (although please allow up to 24 hours in case of *
+ * exceptional circumstances). Thank you for your support! *
+ * *
+ ***************************************************************************
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
+ ***NOTE*** The exception to the GPL is included to allow you to distribute
+ a combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details. You should have received a copy of the GNU General Public
+ License and the FreeRTOS license exception along with FreeRTOS; if not it
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained
+ by writing to Richard Barry, contact details for whom are available on the
+ FreeRTOS WEB site.
+
+ 1 tab == 4 spaces!
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef FAST_GEN_Q_TEST_H
+#define FAST_GEN_Q_TEST_H
+
+void vStartAltGenericQueueTasks(unsigned portBASE_TYPE uxPriority);
+portBASE_TYPE xAreAltGenericQueueTasksStillRunning(void);
+
+#endif /* GEN_Q_TEST_H */
+
+
+
diff --git a/gyro_board/src/usb/CommonDemoTasks/include/BlockQ.h b/gyro_board/src/usb/CommonDemoTasks/include/BlockQ.h
new file mode 100644
index 0000000..30ea0e1
--- /dev/null
+++ b/gyro_board/src/usb/CommonDemoTasks/include/BlockQ.h
@@ -0,0 +1,62 @@
+/*
+ FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.
+
+ ***************************************************************************
+ * *
+ * If you are: *
+ * *
+ * + New to FreeRTOS, *
+ * + Wanting to learn FreeRTOS or multitasking in general quickly *
+ * + Looking for basic training, *
+ * + Wanting to improve your FreeRTOS skills and productivity *
+ * *
+ * then take a look at the FreeRTOS eBook *
+ * *
+ * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
+ * http://www.FreeRTOS.org/Documentation *
+ * *
+ * A pdf reference manual is also available. Both are usually delivered *
+ * to your inbox within 20 minutes to two hours when purchased between 8am *
+ * and 8pm GMT (although please allow up to 24 hours in case of *
+ * exceptional circumstances). Thank you for your support! *
+ * *
+ ***************************************************************************
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
+ ***NOTE*** The exception to the GPL is included to allow you to distribute
+ a combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details. You should have received a copy of the GNU General Public
+ License and the FreeRTOS license exception along with FreeRTOS; if not it
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained
+ by writing to Richard Barry, contact details for whom are available on the
+ FreeRTOS WEB site.
+
+ 1 tab == 4 spaces!
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef BLOCK_Q_H
+#define BLOCK_Q_H
+
+void vStartBlockingQueueTasks(unsigned portBASE_TYPE uxPriority);
+portBASE_TYPE xAreBlockingQueuesStillRunning(void);
+
+#endif
+
+
diff --git a/gyro_board/src/usb/CommonDemoTasks/include/GenQTest.h b/gyro_board/src/usb/CommonDemoTasks/include/GenQTest.h
new file mode 100644
index 0000000..32a2718
--- /dev/null
+++ b/gyro_board/src/usb/CommonDemoTasks/include/GenQTest.h
@@ -0,0 +1,63 @@
+/*
+ FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.
+
+ ***************************************************************************
+ * *
+ * If you are: *
+ * *
+ * + New to FreeRTOS, *
+ * + Wanting to learn FreeRTOS or multitasking in general quickly *
+ * + Looking for basic training, *
+ * + Wanting to improve your FreeRTOS skills and productivity *
+ * *
+ * then take a look at the FreeRTOS eBook *
+ * *
+ * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
+ * http://www.FreeRTOS.org/Documentation *
+ * *
+ * A pdf reference manual is also available. Both are usually delivered *
+ * to your inbox within 20 minutes to two hours when purchased between 8am *
+ * and 8pm GMT (although please allow up to 24 hours in case of *
+ * exceptional circumstances). Thank you for your support! *
+ * *
+ ***************************************************************************
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
+ ***NOTE*** The exception to the GPL is included to allow you to distribute
+ a combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details. You should have received a copy of the GNU General Public
+ License and the FreeRTOS license exception along with FreeRTOS; if not it
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained
+ by writing to Richard Barry, contact details for whom are available on the
+ FreeRTOS WEB site.
+
+ 1 tab == 4 spaces!
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef GEN_Q_TEST_H
+#define GEN_Q_TEST_H
+
+void vStartGenericQueueTasks(unsigned portBASE_TYPE uxPriority);
+portBASE_TYPE xAreGenericQueueTasksStillRunning(void);
+
+#endif /* GEN_Q_TEST_H */
+
+
+
diff --git a/gyro_board/src/usb/CommonDemoTasks/include/IntQueue.h b/gyro_board/src/usb/CommonDemoTasks/include/IntQueue.h
new file mode 100644
index 0000000..514e458
--- /dev/null
+++ b/gyro_board/src/usb/CommonDemoTasks/include/IntQueue.h
@@ -0,0 +1,68 @@
+/*
+ FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.
+
+ ***************************************************************************
+ * *
+ * If you are: *
+ * *
+ * + New to FreeRTOS, *
+ * + Wanting to learn FreeRTOS or multitasking in general quickly *
+ * + Looking for basic training, *
+ * + Wanting to improve your FreeRTOS skills and productivity *
+ * *
+ * then take a look at the FreeRTOS eBook *
+ * *
+ * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
+ * http://www.FreeRTOS.org/Documentation *
+ * *
+ * A pdf reference manual is also available. Both are usually delivered *
+ * to your inbox within 20 minutes to two hours when purchased between 8am *
+ * and 8pm GMT (although please allow up to 24 hours in case of *
+ * exceptional circumstances). Thank you for your support! *
+ * *
+ ***************************************************************************
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
+ ***NOTE*** The exception to the GPL is included to allow you to distribute
+ a combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details. You should have received a copy of the GNU General Public
+ License and the FreeRTOS license exception along with FreeRTOS; if not it
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained
+ by writing to Richard Barry, contact details for whom are available on the
+ FreeRTOS WEB site.
+
+ 1 tab == 4 spaces!
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef QUEUE_ACCESS_TEST
+#define QUEUE_ACCESS_TEST
+
+void vStartInterruptQueueTasks(void);
+portBASE_TYPE xAreIntQueueTasksStillRunning(void);
+portBASE_TYPE xFirstTimerHandler(void);
+portBASE_TYPE xSecondTimerHandler(void);
+
+#endif /* QUEUE_ACCESS_TEST */
+
+
+
+
+
+
diff --git a/gyro_board/src/usb/CommonDemoTasks/include/PollQ.h b/gyro_board/src/usb/CommonDemoTasks/include/PollQ.h
new file mode 100644
index 0000000..096b820
--- /dev/null
+++ b/gyro_board/src/usb/CommonDemoTasks/include/PollQ.h
@@ -0,0 +1,62 @@
+/*
+ FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.
+
+ ***************************************************************************
+ * *
+ * If you are: *
+ * *
+ * + New to FreeRTOS, *
+ * + Wanting to learn FreeRTOS or multitasking in general quickly *
+ * + Looking for basic training, *
+ * + Wanting to improve your FreeRTOS skills and productivity *
+ * *
+ * then take a look at the FreeRTOS eBook *
+ * *
+ * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
+ * http://www.FreeRTOS.org/Documentation *
+ * *
+ * A pdf reference manual is also available. Both are usually delivered *
+ * to your inbox within 20 minutes to two hours when purchased between 8am *
+ * and 8pm GMT (although please allow up to 24 hours in case of *
+ * exceptional circumstances). Thank you for your support! *
+ * *
+ ***************************************************************************
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
+ ***NOTE*** The exception to the GPL is included to allow you to distribute
+ a combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details. You should have received a copy of the GNU General Public
+ License and the FreeRTOS license exception along with FreeRTOS; if not it
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained
+ by writing to Richard Barry, contact details for whom are available on the
+ FreeRTOS WEB site.
+
+ 1 tab == 4 spaces!
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef POLLED_Q_H
+#define POLLED_Q_H
+
+void vStartPolledQueueTasks(unsigned portBASE_TYPE uxPriority);
+portBASE_TYPE xArePollingQueuesStillRunning(void);
+
+#endif
+
+
diff --git a/gyro_board/src/usb/CommonDemoTasks/include/QPeek.h b/gyro_board/src/usb/CommonDemoTasks/include/QPeek.h
new file mode 100644
index 0000000..2666ebd
--- /dev/null
+++ b/gyro_board/src/usb/CommonDemoTasks/include/QPeek.h
@@ -0,0 +1,63 @@
+/*
+ FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.
+
+ ***************************************************************************
+ * *
+ * If you are: *
+ * *
+ * + New to FreeRTOS, *
+ * + Wanting to learn FreeRTOS or multitasking in general quickly *
+ * + Looking for basic training, *
+ * + Wanting to improve your FreeRTOS skills and productivity *
+ * *
+ * then take a look at the FreeRTOS eBook *
+ * *
+ * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
+ * http://www.FreeRTOS.org/Documentation *
+ * *
+ * A pdf reference manual is also available. Both are usually delivered *
+ * to your inbox within 20 minutes to two hours when purchased between 8am *
+ * and 8pm GMT (although please allow up to 24 hours in case of *
+ * exceptional circumstances). Thank you for your support! *
+ * *
+ ***************************************************************************
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
+ ***NOTE*** The exception to the GPL is included to allow you to distribute
+ a combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details. You should have received a copy of the GNU General Public
+ License and the FreeRTOS license exception along with FreeRTOS; if not it
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained
+ by writing to Richard Barry, contact details for whom are available on the
+ FreeRTOS WEB site.
+
+ 1 tab == 4 spaces!
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef Q_PEEK_TEST_H
+#define Q_PEEK_TEST_H
+
+void vStartQueuePeekTasks(void);
+portBASE_TYPE xAreQueuePeekTasksStillRunning(void);
+
+#endif /* Q_PEEK_TEST_H */
+
+
+
diff --git a/gyro_board/src/usb/CommonDemoTasks/include/blocktim.h b/gyro_board/src/usb/CommonDemoTasks/include/blocktim.h
new file mode 100644
index 0000000..72fac90
--- /dev/null
+++ b/gyro_board/src/usb/CommonDemoTasks/include/blocktim.h
@@ -0,0 +1,62 @@
+/*
+ FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.
+
+ ***************************************************************************
+ * *
+ * If you are: *
+ * *
+ * + New to FreeRTOS, *
+ * + Wanting to learn FreeRTOS or multitasking in general quickly *
+ * + Looking for basic training, *
+ * + Wanting to improve your FreeRTOS skills and productivity *
+ * *
+ * then take a look at the FreeRTOS eBook *
+ * *
+ * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
+ * http://www.FreeRTOS.org/Documentation *
+ * *
+ * A pdf reference manual is also available. Both are usually delivered *
+ * to your inbox within 20 minutes to two hours when purchased between 8am *
+ * and 8pm GMT (although please allow up to 24 hours in case of *
+ * exceptional circumstances). Thank you for your support! *
+ * *
+ ***************************************************************************
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
+ ***NOTE*** The exception to the GPL is included to allow you to distribute
+ a combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details. You should have received a copy of the GNU General Public
+ License and the FreeRTOS license exception along with FreeRTOS; if not it
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained
+ by writing to Richard Barry, contact details for whom are available on the
+ FreeRTOS WEB site.
+
+ 1 tab == 4 spaces!
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef BLOCK_TIME_TEST_H
+#define BLOCK_TIME_TEST_H
+
+void vCreateBlockTimeTasks(void);
+portBASE_TYPE xAreBlockTimeTestTasksStillRunning(void);
+
+#endif
+
+
diff --git a/gyro_board/src/usb/CommonDemoTasks/include/comtest.h b/gyro_board/src/usb/CommonDemoTasks/include/comtest.h
new file mode 100644
index 0000000..df974e2
--- /dev/null
+++ b/gyro_board/src/usb/CommonDemoTasks/include/comtest.h
@@ -0,0 +1,63 @@
+/*
+ FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.
+
+ ***************************************************************************
+ * *
+ * If you are: *
+ * *
+ * + New to FreeRTOS, *
+ * + Wanting to learn FreeRTOS or multitasking in general quickly *
+ * + Looking for basic training, *
+ * + Wanting to improve your FreeRTOS skills and productivity *
+ * *
+ * then take a look at the FreeRTOS eBook *
+ * *
+ * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
+ * http://www.FreeRTOS.org/Documentation *
+ * *
+ * A pdf reference manual is also available. Both are usually delivered *
+ * to your inbox within 20 minutes to two hours when purchased between 8am *
+ * and 8pm GMT (although please allow up to 24 hours in case of *
+ * exceptional circumstances). Thank you for your support! *
+ * *
+ ***************************************************************************
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
+ ***NOTE*** The exception to the GPL is included to allow you to distribute
+ a combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details. You should have received a copy of the GNU General Public
+ License and the FreeRTOS license exception along with FreeRTOS; if not it
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained
+ by writing to Richard Barry, contact details for whom are available on the
+ FreeRTOS WEB site.
+
+ 1 tab == 4 spaces!
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef COMTEST_H
+#define COMTEST_H
+
+void vAltStartComTestTasks(unsigned portBASE_TYPE uxPriority, unsigned long ulBaudRate, unsigned portBASE_TYPE uxLED);
+void vStartComTestTasks(unsigned portBASE_TYPE uxPriority, eCOMPort ePort, eBaud eBaudRate);
+portBASE_TYPE xAreComTestTasksStillRunning(void);
+void vComTestUnsuspendTask(void);
+
+#endif
+
diff --git a/gyro_board/src/usb/CommonDemoTasks/include/comtest2.h b/gyro_board/src/usb/CommonDemoTasks/include/comtest2.h
new file mode 100644
index 0000000..18beab0
--- /dev/null
+++ b/gyro_board/src/usb/CommonDemoTasks/include/comtest2.h
@@ -0,0 +1,61 @@
+/*
+ FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.
+
+ ***************************************************************************
+ * *
+ * If you are: *
+ * *
+ * + New to FreeRTOS, *
+ * + Wanting to learn FreeRTOS or multitasking in general quickly *
+ * + Looking for basic training, *
+ * + Wanting to improve your FreeRTOS skills and productivity *
+ * *
+ * then take a look at the FreeRTOS eBook *
+ * *
+ * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
+ * http://www.FreeRTOS.org/Documentation *
+ * *
+ * A pdf reference manual is also available. Both are usually delivered *
+ * to your inbox within 20 minutes to two hours when purchased between 8am *
+ * and 8pm GMT (although please allow up to 24 hours in case of *
+ * exceptional circumstances). Thank you for your support! *
+ * *
+ ***************************************************************************
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
+ ***NOTE*** The exception to the GPL is included to allow you to distribute
+ a combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details. You should have received a copy of the GNU General Public
+ License and the FreeRTOS license exception along with FreeRTOS; if not it
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained
+ by writing to Richard Barry, contact details for whom are available on the
+ FreeRTOS WEB site.
+
+ 1 tab == 4 spaces!
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef COMTEST_H
+#define COMTEST_H
+
+void vAltStartComTestTasks(unsigned portBASE_TYPE uxPriority, unsigned long ulBaudRate, unsigned portBASE_TYPE uxLED);
+portBASE_TYPE xAreComTestTasksStillRunning(void);
+
+#endif
+
diff --git a/gyro_board/src/usb/CommonDemoTasks/include/countsem.h b/gyro_board/src/usb/CommonDemoTasks/include/countsem.h
new file mode 100644
index 0000000..d08db7b
--- /dev/null
+++ b/gyro_board/src/usb/CommonDemoTasks/include/countsem.h
@@ -0,0 +1,61 @@
+/*
+ FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.
+
+ ***************************************************************************
+ * *
+ * If you are: *
+ * *
+ * + New to FreeRTOS, *
+ * + Wanting to learn FreeRTOS or multitasking in general quickly *
+ * + Looking for basic training, *
+ * + Wanting to improve your FreeRTOS skills and productivity *
+ * *
+ * then take a look at the FreeRTOS eBook *
+ * *
+ * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
+ * http://www.FreeRTOS.org/Documentation *
+ * *
+ * A pdf reference manual is also available. Both are usually delivered *
+ * to your inbox within 20 minutes to two hours when purchased between 8am *
+ * and 8pm GMT (although please allow up to 24 hours in case of *
+ * exceptional circumstances). Thank you for your support! *
+ * *
+ ***************************************************************************
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
+ ***NOTE*** The exception to the GPL is included to allow you to distribute
+ a combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details. You should have received a copy of the GNU General Public
+ License and the FreeRTOS license exception along with FreeRTOS; if not it
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained
+ by writing to Richard Barry, contact details for whom are available on the
+ FreeRTOS WEB site.
+
+ 1 tab == 4 spaces!
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef COUNT_SEMAPHORE_TEST_H
+#define COUNT_SEMAPHORE_TEST_H
+
+void vStartCountingSemaphoreTasks(void);
+portBASE_TYPE xAreCountingSemaphoreTasksStillRunning(void);
+
+#endif
+
diff --git a/gyro_board/src/usb/CommonDemoTasks/include/crflash.h b/gyro_board/src/usb/CommonDemoTasks/include/crflash.h
new file mode 100644
index 0000000..6a5f715
--- /dev/null
+++ b/gyro_board/src/usb/CommonDemoTasks/include/crflash.h
@@ -0,0 +1,73 @@
+/*
+ FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.
+
+ ***************************************************************************
+ * *
+ * If you are: *
+ * *
+ * + New to FreeRTOS, *
+ * + Wanting to learn FreeRTOS or multitasking in general quickly *
+ * + Looking for basic training, *
+ * + Wanting to improve your FreeRTOS skills and productivity *
+ * *
+ * then take a look at the FreeRTOS eBook *
+ * *
+ * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
+ * http://www.FreeRTOS.org/Documentation *
+ * *
+ * A pdf reference manual is also available. Both are usually delivered *
+ * to your inbox within 20 minutes to two hours when purchased between 8am *
+ * and 8pm GMT (although please allow up to 24 hours in case of *
+ * exceptional circumstances). Thank you for your support! *
+ * *
+ ***************************************************************************
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
+ ***NOTE*** The exception to the GPL is included to allow you to distribute
+ a combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details. You should have received a copy of the GNU General Public
+ License and the FreeRTOS license exception along with FreeRTOS; if not it
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained
+ by writing to Richard Barry, contact details for whom are available on the
+ FreeRTOS WEB site.
+
+ 1 tab == 4 spaces!
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef CRFLASH_LED_H
+#define CRFLASH_LED_H
+
+/*
+ * Create the co-routines used to flash the LED's at different rates.
+ *
+ * @param uxPriority The number of 'fixed delay' co-routines to create. This
+ * also effects the number of LED's that will be utilised. For example,
+ * passing in 3 will cause LED's 0 to 2 to be utilised.
+ */
+void vStartFlashCoRoutines(unsigned portBASE_TYPE uxPriority);
+
+/*
+ * Return pdPASS or pdFAIL depending on whether an error has been detected
+ * or not.
+ */
+portBASE_TYPE xAreFlashCoRoutinesStillRunning(void);
+
+#endif
+
diff --git a/gyro_board/src/usb/CommonDemoTasks/include/crhook.h b/gyro_board/src/usb/CommonDemoTasks/include/crhook.h
new file mode 100644
index 0000000..370677f
--- /dev/null
+++ b/gyro_board/src/usb/CommonDemoTasks/include/crhook.h
@@ -0,0 +1,69 @@
+/*
+ FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.
+
+ ***************************************************************************
+ * *
+ * If you are: *
+ * *
+ * + New to FreeRTOS, *
+ * + Wanting to learn FreeRTOS or multitasking in general quickly *
+ * + Looking for basic training, *
+ * + Wanting to improve your FreeRTOS skills and productivity *
+ * *
+ * then take a look at the FreeRTOS eBook *
+ * *
+ * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
+ * http://www.FreeRTOS.org/Documentation *
+ * *
+ * A pdf reference manual is also available. Both are usually delivered *
+ * to your inbox within 20 minutes to two hours when purchased between 8am *
+ * and 8pm GMT (although please allow up to 24 hours in case of *
+ * exceptional circumstances). Thank you for your support! *
+ * *
+ ***************************************************************************
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
+ ***NOTE*** The exception to the GPL is included to allow you to distribute
+ a combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details. You should have received a copy of the GNU General Public
+ License and the FreeRTOS license exception along with FreeRTOS; if not it
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained
+ by writing to Richard Barry, contact details for whom are available on the
+ FreeRTOS WEB site.
+
+ 1 tab == 4 spaces!
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef CRHOOK_H
+#define CRHOOK_H
+
+/*
+ * Create the co-routines used to communicate wit the tick hook.
+ */
+void vStartHookCoRoutines(void);
+
+/*
+ * Return pdPASS or pdFAIL depending on whether an error has been detected
+ * or not.
+ */
+portBASE_TYPE xAreHookCoRoutinesStillRunning(void);
+
+#endif
+
diff --git a/gyro_board/src/usb/CommonDemoTasks/include/death.h b/gyro_board/src/usb/CommonDemoTasks/include/death.h
new file mode 100644
index 0000000..155f4f1
--- /dev/null
+++ b/gyro_board/src/usb/CommonDemoTasks/include/death.h
@@ -0,0 +1,62 @@
+/*
+ FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.
+
+ ***************************************************************************
+ * *
+ * If you are: *
+ * *
+ * + New to FreeRTOS, *
+ * + Wanting to learn FreeRTOS or multitasking in general quickly *
+ * + Looking for basic training, *
+ * + Wanting to improve your FreeRTOS skills and productivity *
+ * *
+ * then take a look at the FreeRTOS eBook *
+ * *
+ * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
+ * http://www.FreeRTOS.org/Documentation *
+ * *
+ * A pdf reference manual is also available. Both are usually delivered *
+ * to your inbox within 20 minutes to two hours when purchased between 8am *
+ * and 8pm GMT (although please allow up to 24 hours in case of *
+ * exceptional circumstances). Thank you for your support! *
+ * *
+ ***************************************************************************
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
+ ***NOTE*** The exception to the GPL is included to allow you to distribute
+ a combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details. You should have received a copy of the GNU General Public
+ License and the FreeRTOS license exception along with FreeRTOS; if not it
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained
+ by writing to Richard Barry, contact details for whom are available on the
+ FreeRTOS WEB site.
+
+ 1 tab == 4 spaces!
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef SUICIDE_TASK_H
+#define SUICIDE_TASK_H
+
+void vCreateSuicidalTasks(unsigned portBASE_TYPE uxPriority);
+portBASE_TYPE xIsCreateTaskStillRunning(void);
+
+#endif
+
+
diff --git a/gyro_board/src/usb/CommonDemoTasks/include/dynamic.h b/gyro_board/src/usb/CommonDemoTasks/include/dynamic.h
new file mode 100644
index 0000000..b2bf281
--- /dev/null
+++ b/gyro_board/src/usb/CommonDemoTasks/include/dynamic.h
@@ -0,0 +1,62 @@
+/*
+ FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.
+
+ ***************************************************************************
+ * *
+ * If you are: *
+ * *
+ * + New to FreeRTOS, *
+ * + Wanting to learn FreeRTOS or multitasking in general quickly *
+ * + Looking for basic training, *
+ * + Wanting to improve your FreeRTOS skills and productivity *
+ * *
+ * then take a look at the FreeRTOS eBook *
+ * *
+ * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
+ * http://www.FreeRTOS.org/Documentation *
+ * *
+ * A pdf reference manual is also available. Both are usually delivered *
+ * to your inbox within 20 minutes to two hours when purchased between 8am *
+ * and 8pm GMT (although please allow up to 24 hours in case of *
+ * exceptional circumstances). Thank you for your support! *
+ * *
+ ***************************************************************************
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
+ ***NOTE*** The exception to the GPL is included to allow you to distribute
+ a combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details. You should have received a copy of the GNU General Public
+ License and the FreeRTOS license exception along with FreeRTOS; if not it
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained
+ by writing to Richard Barry, contact details for whom are available on the
+ FreeRTOS WEB site.
+
+ 1 tab == 4 spaces!
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef DYNAMIC_MANIPULATION_H
+#define DYNAMIC_MANIPULATION_H
+
+void vStartDynamicPriorityTasks(void);
+portBASE_TYPE xAreDynamicPriorityTasksStillRunning(void);
+
+#endif
+
+
diff --git a/gyro_board/src/usb/CommonDemoTasks/include/fileIO.h b/gyro_board/src/usb/CommonDemoTasks/include/fileIO.h
new file mode 100644
index 0000000..9f3c7e0
--- /dev/null
+++ b/gyro_board/src/usb/CommonDemoTasks/include/fileIO.h
@@ -0,0 +1,62 @@
+/*
+ FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.
+
+ ***************************************************************************
+ * *
+ * If you are: *
+ * *
+ * + New to FreeRTOS, *
+ * + Wanting to learn FreeRTOS or multitasking in general quickly *
+ * + Looking for basic training, *
+ * + Wanting to improve your FreeRTOS skills and productivity *
+ * *
+ * then take a look at the FreeRTOS eBook *
+ * *
+ * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
+ * http://www.FreeRTOS.org/Documentation *
+ * *
+ * A pdf reference manual is also available. Both are usually delivered *
+ * to your inbox within 20 minutes to two hours when purchased between 8am *
+ * and 8pm GMT (although please allow up to 24 hours in case of *
+ * exceptional circumstances). Thank you for your support! *
+ * *
+ ***************************************************************************
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
+ ***NOTE*** The exception to the GPL is included to allow you to distribute
+ a combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details. You should have received a copy of the GNU General Public
+ License and the FreeRTOS license exception along with FreeRTOS; if not it
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained
+ by writing to Richard Barry, contact details for whom are available on the
+ FreeRTOS WEB site.
+
+ 1 tab == 4 spaces!
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef FILE_IO_H
+#define FILE_OI_H
+
+void vDisplayMessage(const char * const pcMessageToPrint);
+void vWriteMessageToDisk(const char * const pcMessage);
+void vWriteBufferToDisk(const char * const pcBuffer, unsigned long ulBufferLength);
+
+#endif
+
diff --git a/gyro_board/src/usb/CommonDemoTasks/include/flash.h b/gyro_board/src/usb/CommonDemoTasks/include/flash.h
new file mode 100644
index 0000000..008df24
--- /dev/null
+++ b/gyro_board/src/usb/CommonDemoTasks/include/flash.h
@@ -0,0 +1,60 @@
+/*
+ FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.
+
+ ***************************************************************************
+ * *
+ * If you are: *
+ * *
+ * + New to FreeRTOS, *
+ * + Wanting to learn FreeRTOS or multitasking in general quickly *
+ * + Looking for basic training, *
+ * + Wanting to improve your FreeRTOS skills and productivity *
+ * *
+ * then take a look at the FreeRTOS eBook *
+ * *
+ * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
+ * http://www.FreeRTOS.org/Documentation *
+ * *
+ * A pdf reference manual is also available. Both are usually delivered *
+ * to your inbox within 20 minutes to two hours when purchased between 8am *
+ * and 8pm GMT (although please allow up to 24 hours in case of *
+ * exceptional circumstances). Thank you for your support! *
+ * *
+ ***************************************************************************
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
+ ***NOTE*** The exception to the GPL is included to allow you to distribute
+ a combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details. You should have received a copy of the GNU General Public
+ License and the FreeRTOS license exception along with FreeRTOS; if not it
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained
+ by writing to Richard Barry, contact details for whom are available on the
+ FreeRTOS WEB site.
+
+ 1 tab == 4 spaces!
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef FLASH_LED_H
+#define FLASH_LED_H
+
+void vStartLEDFlashTasks(unsigned portBASE_TYPE uxPriority);
+
+#endif
+
diff --git a/gyro_board/src/usb/CommonDemoTasks/include/flop.h b/gyro_board/src/usb/CommonDemoTasks/include/flop.h
new file mode 100644
index 0000000..2e5fb79
--- /dev/null
+++ b/gyro_board/src/usb/CommonDemoTasks/include/flop.h
@@ -0,0 +1,62 @@
+/*
+ FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.
+
+ ***************************************************************************
+ * *
+ * If you are: *
+ * *
+ * + New to FreeRTOS, *
+ * + Wanting to learn FreeRTOS or multitasking in general quickly *
+ * + Looking for basic training, *
+ * + Wanting to improve your FreeRTOS skills and productivity *
+ * *
+ * then take a look at the FreeRTOS eBook *
+ * *
+ * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
+ * http://www.FreeRTOS.org/Documentation *
+ * *
+ * A pdf reference manual is also available. Both are usually delivered *
+ * to your inbox within 20 minutes to two hours when purchased between 8am *
+ * and 8pm GMT (although please allow up to 24 hours in case of *
+ * exceptional circumstances). Thank you for your support! *
+ * *
+ ***************************************************************************
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
+ ***NOTE*** The exception to the GPL is included to allow you to distribute
+ a combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details. You should have received a copy of the GNU General Public
+ License and the FreeRTOS license exception along with FreeRTOS; if not it
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained
+ by writing to Richard Barry, contact details for whom are available on the
+ FreeRTOS WEB site.
+
+ 1 tab == 4 spaces!
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef FLOP_TASKS_H
+#define FLOP_TASKS_H
+
+void vStartMathTasks(unsigned portBASE_TYPE uxPriority);
+portBASE_TYPE xAreMathsTaskStillRunning(void);
+
+#endif
+
+
diff --git a/gyro_board/src/usb/CommonDemoTasks/include/integer.h b/gyro_board/src/usb/CommonDemoTasks/include/integer.h
new file mode 100644
index 0000000..0bdf620
--- /dev/null
+++ b/gyro_board/src/usb/CommonDemoTasks/include/integer.h
@@ -0,0 +1,62 @@
+/*
+ FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.
+
+ ***************************************************************************
+ * *
+ * If you are: *
+ * *
+ * + New to FreeRTOS, *
+ * + Wanting to learn FreeRTOS or multitasking in general quickly *
+ * + Looking for basic training, *
+ * + Wanting to improve your FreeRTOS skills and productivity *
+ * *
+ * then take a look at the FreeRTOS eBook *
+ * *
+ * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
+ * http://www.FreeRTOS.org/Documentation *
+ * *
+ * A pdf reference manual is also available. Both are usually delivered *
+ * to your inbox within 20 minutes to two hours when purchased between 8am *
+ * and 8pm GMT (although please allow up to 24 hours in case of *
+ * exceptional circumstances). Thank you for your support! *
+ * *
+ ***************************************************************************
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
+ ***NOTE*** The exception to the GPL is included to allow you to distribute
+ a combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details. You should have received a copy of the GNU General Public
+ License and the FreeRTOS license exception along with FreeRTOS; if not it
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained
+ by writing to Richard Barry, contact details for whom are available on the
+ FreeRTOS WEB site.
+
+ 1 tab == 4 spaces!
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef INTEGER_TASKS_H
+#define INTEGER_TASKS_H
+
+void vStartIntegerMathTasks(unsigned portBASE_TYPE uxPriority);
+portBASE_TYPE xAreIntegerMathsTaskStillRunning(void);
+
+#endif
+
+
diff --git a/gyro_board/src/usb/CommonDemoTasks/include/mevents.h b/gyro_board/src/usb/CommonDemoTasks/include/mevents.h
new file mode 100644
index 0000000..5452d4b
--- /dev/null
+++ b/gyro_board/src/usb/CommonDemoTasks/include/mevents.h
@@ -0,0 +1,62 @@
+/*
+ FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.
+
+ ***************************************************************************
+ * *
+ * If you are: *
+ * *
+ * + New to FreeRTOS, *
+ * + Wanting to learn FreeRTOS or multitasking in general quickly *
+ * + Looking for basic training, *
+ * + Wanting to improve your FreeRTOS skills and productivity *
+ * *
+ * then take a look at the FreeRTOS eBook *
+ * *
+ * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
+ * http://www.FreeRTOS.org/Documentation *
+ * *
+ * A pdf reference manual is also available. Both are usually delivered *
+ * to your inbox within 20 minutes to two hours when purchased between 8am *
+ * and 8pm GMT (although please allow up to 24 hours in case of *
+ * exceptional circumstances). Thank you for your support! *
+ * *
+ ***************************************************************************
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
+ ***NOTE*** The exception to the GPL is included to allow you to distribute
+ a combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details. You should have received a copy of the GNU General Public
+ License and the FreeRTOS license exception along with FreeRTOS; if not it
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained
+ by writing to Richard Barry, contact details for whom are available on the
+ FreeRTOS WEB site.
+
+ 1 tab == 4 spaces!
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef EVENTS_TEST_H
+#define EVENTS_TEST_H
+
+void vStartMultiEventTasks(void);
+portBASE_TYPE xAreMultiEventTasksStillRunning(void);
+
+#endif
+
+
diff --git a/gyro_board/src/usb/CommonDemoTasks/include/partest.h b/gyro_board/src/usb/CommonDemoTasks/include/partest.h
new file mode 100644
index 0000000..4318351
--- /dev/null
+++ b/gyro_board/src/usb/CommonDemoTasks/include/partest.h
@@ -0,0 +1,64 @@
+/*
+ FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.
+
+ ***************************************************************************
+ * *
+ * If you are: *
+ * *
+ * + New to FreeRTOS, *
+ * + Wanting to learn FreeRTOS or multitasking in general quickly *
+ * + Looking for basic training, *
+ * + Wanting to improve your FreeRTOS skills and productivity *
+ * *
+ * then take a look at the FreeRTOS eBook *
+ * *
+ * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
+ * http://www.FreeRTOS.org/Documentation *
+ * *
+ * A pdf reference manual is also available. Both are usually delivered *
+ * to your inbox within 20 minutes to two hours when purchased between 8am *
+ * and 8pm GMT (although please allow up to 24 hours in case of *
+ * exceptional circumstances). Thank you for your support! *
+ * *
+ ***************************************************************************
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
+ ***NOTE*** The exception to the GPL is included to allow you to distribute
+ a combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details. You should have received a copy of the GNU General Public
+ License and the FreeRTOS license exception along with FreeRTOS; if not it
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained
+ by writing to Richard Barry, contact details for whom are available on the
+ FreeRTOS WEB site.
+
+ 1 tab == 4 spaces!
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef PARTEST_H
+#define PARTEST_H
+
+#define partstDEFAULT_PORT_ADDRESS ( ( unsigned short ) 0x378 )
+
+void vParTestInitialise(void);
+void vParTestSetLED(unsigned portBASE_TYPE uxLED, signed portBASE_TYPE xValue);
+void vParTestToggleLED(unsigned portBASE_TYPE uxLED);
+
+#endif
+
diff --git a/gyro_board/src/usb/CommonDemoTasks/include/print.h b/gyro_board/src/usb/CommonDemoTasks/include/print.h
new file mode 100644
index 0000000..f0242bd
--- /dev/null
+++ b/gyro_board/src/usb/CommonDemoTasks/include/print.h
@@ -0,0 +1,63 @@
+/*
+ FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.
+
+ ***************************************************************************
+ * *
+ * If you are: *
+ * *
+ * + New to FreeRTOS, *
+ * + Wanting to learn FreeRTOS or multitasking in general quickly *
+ * + Looking for basic training, *
+ * + Wanting to improve your FreeRTOS skills and productivity *
+ * *
+ * then take a look at the FreeRTOS eBook *
+ * *
+ * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
+ * http://www.FreeRTOS.org/Documentation *
+ * *
+ * A pdf reference manual is also available. Both are usually delivered *
+ * to your inbox within 20 minutes to two hours when purchased between 8am *
+ * and 8pm GMT (although please allow up to 24 hours in case of *
+ * exceptional circumstances). Thank you for your support! *
+ * *
+ ***************************************************************************
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
+ ***NOTE*** The exception to the GPL is included to allow you to distribute
+ a combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details. You should have received a copy of the GNU General Public
+ License and the FreeRTOS license exception along with FreeRTOS; if not it
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained
+ by writing to Richard Barry, contact details for whom are available on the
+ FreeRTOS WEB site.
+
+ 1 tab == 4 spaces!
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef PRINT_H
+#define PRINT_H
+
+void vPrintInitialise(void);
+void vPrintDisplayMessage(const char * const * pcMessageToSend);
+const char *pcPrintGetNextMessage(portTickType xPrintRate);
+
+#endif
+
+
diff --git a/gyro_board/src/usb/CommonDemoTasks/include/recmutex.h b/gyro_board/src/usb/CommonDemoTasks/include/recmutex.h
new file mode 100644
index 0000000..856d6f8
--- /dev/null
+++ b/gyro_board/src/usb/CommonDemoTasks/include/recmutex.h
@@ -0,0 +1,61 @@
+/*
+ FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.
+
+ ***************************************************************************
+ * *
+ * If you are: *
+ * *
+ * + New to FreeRTOS, *
+ * + Wanting to learn FreeRTOS or multitasking in general quickly *
+ * + Looking for basic training, *
+ * + Wanting to improve your FreeRTOS skills and productivity *
+ * *
+ * then take a look at the FreeRTOS eBook *
+ * *
+ * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
+ * http://www.FreeRTOS.org/Documentation *
+ * *
+ * A pdf reference manual is also available. Both are usually delivered *
+ * to your inbox within 20 minutes to two hours when purchased between 8am *
+ * and 8pm GMT (although please allow up to 24 hours in case of *
+ * exceptional circumstances). Thank you for your support! *
+ * *
+ ***************************************************************************
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
+ ***NOTE*** The exception to the GPL is included to allow you to distribute
+ a combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details. You should have received a copy of the GNU General Public
+ License and the FreeRTOS license exception along with FreeRTOS; if not it
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained
+ by writing to Richard Barry, contact details for whom are available on the
+ FreeRTOS WEB site.
+
+ 1 tab == 4 spaces!
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef RECURSIVE_MUTEX_TEST_H
+#define RECURSIVE_MUTEX_TEST_H
+
+void vStartRecursiveMutexTasks(void);
+portBASE_TYPE xAreRecursiveMutexTasksStillRunning(void);
+
+#endif
+
diff --git a/gyro_board/src/usb/CommonDemoTasks/include/semtest.h b/gyro_board/src/usb/CommonDemoTasks/include/semtest.h
new file mode 100644
index 0000000..04d5369
--- /dev/null
+++ b/gyro_board/src/usb/CommonDemoTasks/include/semtest.h
@@ -0,0 +1,61 @@
+/*
+ FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.
+
+ ***************************************************************************
+ * *
+ * If you are: *
+ * *
+ * + New to FreeRTOS, *
+ * + Wanting to learn FreeRTOS or multitasking in general quickly *
+ * + Looking for basic training, *
+ * + Wanting to improve your FreeRTOS skills and productivity *
+ * *
+ * then take a look at the FreeRTOS eBook *
+ * *
+ * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
+ * http://www.FreeRTOS.org/Documentation *
+ * *
+ * A pdf reference manual is also available. Both are usually delivered *
+ * to your inbox within 20 minutes to two hours when purchased between 8am *
+ * and 8pm GMT (although please allow up to 24 hours in case of *
+ * exceptional circumstances). Thank you for your support! *
+ * *
+ ***************************************************************************
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
+ ***NOTE*** The exception to the GPL is included to allow you to distribute
+ a combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details. You should have received a copy of the GNU General Public
+ License and the FreeRTOS license exception along with FreeRTOS; if not it
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained
+ by writing to Richard Barry, contact details for whom are available on the
+ FreeRTOS WEB site.
+
+ 1 tab == 4 spaces!
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef SEMAPHORE_TEST_H
+#define SEMAPHORE_TEST_H
+
+void vStartSemaphoreTasks(unsigned portBASE_TYPE uxPriority);
+portBASE_TYPE xAreSemaphoreTasksStillRunning(void);
+
+#endif
+
diff --git a/gyro_board/src/usb/CommonDemoTasks/include/serial.h b/gyro_board/src/usb/CommonDemoTasks/include/serial.h
new file mode 100644
index 0000000..dcc76ea
--- /dev/null
+++ b/gyro_board/src/usb/CommonDemoTasks/include/serial.h
@@ -0,0 +1,119 @@
+/*
+ FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.
+
+ ***************************************************************************
+ * *
+ * If you are: *
+ * *
+ * + New to FreeRTOS, *
+ * + Wanting to learn FreeRTOS or multitasking in general quickly *
+ * + Looking for basic training, *
+ * + Wanting to improve your FreeRTOS skills and productivity *
+ * *
+ * then take a look at the FreeRTOS eBook *
+ * *
+ * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
+ * http://www.FreeRTOS.org/Documentation *
+ * *
+ * A pdf reference manual is also available. Both are usually delivered *
+ * to your inbox within 20 minutes to two hours when purchased between 8am *
+ * and 8pm GMT (although please allow up to 24 hours in case of *
+ * exceptional circumstances). Thank you for your support! *
+ * *
+ ***************************************************************************
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
+ ***NOTE*** The exception to the GPL is included to allow you to distribute
+ a combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details. You should have received a copy of the GNU General Public
+ License and the FreeRTOS license exception along with FreeRTOS; if not it
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained
+ by writing to Richard Barry, contact details for whom are available on the
+ FreeRTOS WEB site.
+
+ 1 tab == 4 spaces!
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef SERIAL_COMMS_H
+#define SERIAL_COMMS_H
+
+typedef void * xComPortHandle;
+
+typedef enum {
+ serCOM1,
+ serCOM2,
+ serCOM3,
+ serCOM4,
+ serCOM5,
+ serCOM6,
+ serCOM7,
+ serCOM8
+} eCOMPort;
+
+typedef enum {
+ serNO_PARITY,
+ serODD_PARITY,
+ serEVEN_PARITY,
+ serMARK_PARITY,
+ serSPACE_PARITY
+} eParity;
+
+typedef enum {
+ serSTOP_1,
+ serSTOP_2
+} eStopBits;
+
+typedef enum {
+ serBITS_5,
+ serBITS_6,
+ serBITS_7,
+ serBITS_8
+} eDataBits;
+
+typedef enum {
+ ser50,
+ ser75,
+ ser110,
+ ser134,
+ ser150,
+ ser200,
+ ser300,
+ ser600,
+ ser1200,
+ ser1800,
+ ser2400,
+ ser4800,
+ ser9600,
+ ser19200,
+ ser38400,
+ ser57600,
+ ser115200
+} eBaud;
+
+xComPortHandle xSerialPortInitMinimal(unsigned long ulWantedBaud, unsigned portBASE_TYPE uxQueueLength);
+xComPortHandle xSerialPortInit(eCOMPort ePort, eBaud eWantedBaud, eParity eWantedParity, eDataBits eWantedDataBits, eStopBits eWantedStopBits, unsigned portBASE_TYPE uxBufferLength);
+void vSerialPutString(xComPortHandle pxPort, const signed char * const pcString, unsigned short usStringLength);
+signed portBASE_TYPE xSerialGetChar(xComPortHandle pxPort, signed char *pcRxedChar, portTickType xBlockTime);
+signed portBASE_TYPE xSerialPutChar(xComPortHandle pxPort, signed char cOutChar, portTickType xBlockTime);
+portBASE_TYPE xSerialWaitForSemaphore(xComPortHandle xPort);
+void vSerialClose(xComPortHandle xPort);
+
+#endif
+
diff --git a/gyro_board/src/usb/CommonDemoTasks/integer.c b/gyro_board/src/usb/CommonDemoTasks/integer.c
new file mode 100644
index 0000000..4e2db69
--- /dev/null
+++ b/gyro_board/src/usb/CommonDemoTasks/integer.c
@@ -0,0 +1,206 @@
+/*
+ FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.
+
+ ***************************************************************************
+ * *
+ * If you are: *
+ * *
+ * + New to FreeRTOS, *
+ * + Wanting to learn FreeRTOS or multitasking in general quickly *
+ * + Looking for basic training, *
+ * + Wanting to improve your FreeRTOS skills and productivity *
+ * *
+ * then take a look at the FreeRTOS eBook *
+ * *
+ * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
+ * http://www.FreeRTOS.org/Documentation *
+ * *
+ * A pdf reference manual is also available. Both are usually delivered *
+ * to your inbox within 20 minutes to two hours when purchased between 8am *
+ * and 8pm GMT (although please allow up to 24 hours in case of *
+ * exceptional circumstances). Thank you for your support! *
+ * *
+ ***************************************************************************
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
+ ***NOTE*** The exception to the GPL is included to allow you to distribute
+ a combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details. You should have received a copy of the GNU General Public
+ License and the FreeRTOS license exception along with FreeRTOS; if not it
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained
+ by writing to Richard Barry, contact details for whom are available on the
+ FreeRTOS WEB site.
+
+ 1 tab == 4 spaces!
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+/*
+ * This version of integer. c is for use on systems that have limited stack
+ * space and no display facilities. The complete version can be found in
+ * the Demo/Common/Full directory.
+ *
+ * As with the full version, the tasks created in this file are a good test
+ * of the scheduler context switch mechanism. The processor has to access
+ * 32bit variables in two or four chunks (depending on the processor). The low
+ * priority of these tasks means there is a high probability that a context
+ * switch will occur mid calculation. See flop. c documentation for
+ * more information.
+ *
+ */
+
+/*
+Changes from V1.2.1
+
+ + The constants used in the calculations are larger to ensure the
+ optimiser does not truncate them to 16 bits.
+
+Changes from V1.2.3
+
+ + uxTaskCheck is now just used as a boolean. Instead of incrementing
+ the variable each cycle of the task, the variable is simply set to
+ true. sAreIntegerMathsTaskStillRunning() sets it back to false and
+ expects it to have been set back to true by the time it is called
+ again.
+ + A division has been included in the calculation.
+*/
+
+#include <stdlib.h>
+
+/* Scheduler include files. */
+#include "FreeRTOS.h"
+#include "task.h"
+
+/* Demo program include files. */
+#include "integer.h"
+
+/* The constants used in the calculation. */
+#define intgCONST1 ( ( long ) 123 )
+#define intgCONST2 ( ( long ) 234567 )
+#define intgCONST3 ( ( long ) -3 )
+#define intgCONST4 ( ( long ) 7 )
+#define intgEXPECTED_ANSWER ( ( ( intgCONST1 + intgCONST2 ) * intgCONST3 ) / intgCONST4 )
+
+#define intgSTACK_SIZE configMINIMAL_STACK_SIZE
+
+/* As this is the minimal version, we will only create one task. */
+#define intgNUMBER_OF_TASKS ( 1 )
+
+/* The task function. Repeatedly performs a 32 bit calculation, checking the
+result against the expected result. If the result is incorrect then the
+context switch must have caused some corruption. */
+static portTASK_FUNCTION_PROTO(vCompeteingIntMathTask, pvParameters);
+
+/* Variables that are set to true within the calculation task to indicate
+that the task is still executing. The check task sets the variable back to
+false, flagging an error if the variable is still false the next time it
+is called. */
+static volatile signed portBASE_TYPE xTaskCheck[ intgNUMBER_OF_TASKS ] = {(signed portBASE_TYPE) pdFALSE };
+
+/*-----------------------------------------------------------*/
+
+void vStartIntegerMathTasks(unsigned portBASE_TYPE uxPriority)
+{
+ short sTask;
+
+ for (sTask = 0; sTask < intgNUMBER_OF_TASKS; sTask++) {
+ xTaskCreate(vCompeteingIntMathTask, (signed char *) "IntMath", intgSTACK_SIZE, (void *) &(xTaskCheck[ sTask ]), uxPriority, (xTaskHandle *) NULL);
+ }
+}
+/*-----------------------------------------------------------*/
+
+static portTASK_FUNCTION(vCompeteingIntMathTask, pvParameters)
+{
+ /* These variables are all effectively set to constants so they are volatile to
+ ensure the compiler does not just get rid of them. */
+ volatile long lValue;
+ short sError = pdFALSE;
+ volatile signed portBASE_TYPE *pxTaskHasExecuted;
+
+ /* Set a pointer to the variable we are going to set to true each
+ iteration. This is also a good test of the parameter passing mechanism
+ within each port. */
+ pxTaskHasExecuted = (volatile signed portBASE_TYPE *) pvParameters;
+
+ /* Keep performing a calculation and checking the result against a constant. */
+ for (;;) {
+ /* Perform the calculation. This will store partial value in
+ registers, resulting in a good test of the context switch mechanism. */
+ lValue = intgCONST1;
+ lValue += intgCONST2;
+
+ /* Yield in case cooperative scheduling is being used. */
+#if configUSE_PREEMPTION == 0
+ {
+ taskYIELD();
+ }
+#endif
+
+ /* Finish off the calculation. */
+ lValue *= intgCONST3;
+ lValue /= intgCONST4;
+
+ /* If the calculation is found to be incorrect we stop setting the
+ TaskHasExecuted variable so the check task can see an error has
+ occurred. */
+ if (lValue != intgEXPECTED_ANSWER) { /*lint !e774 volatile used to prevent this being optimised out. */
+ sError = pdTRUE;
+ }
+
+ if (sError == pdFALSE) {
+ /* We have not encountered any errors, so set the flag that show
+ we are still executing. This will be periodically cleared by
+ the check task. */
+ portENTER_CRITICAL();
+ *pxTaskHasExecuted = pdTRUE;
+ portEXIT_CRITICAL();
+ }
+
+ /* Yield in case cooperative scheduling is being used. */
+#if configUSE_PREEMPTION == 0
+ {
+ taskYIELD();
+ }
+#endif
+ }
+}
+/*-----------------------------------------------------------*/
+
+/* This is called to check that all the created tasks are still running. */
+portBASE_TYPE xAreIntegerMathsTaskStillRunning(void)
+{
+ portBASE_TYPE xReturn = pdTRUE;
+ short sTask;
+
+ /* Check the maths tasks are still running by ensuring their check variables
+ are still being set to true. */
+ for (sTask = 0; sTask < intgNUMBER_OF_TASKS; sTask++) {
+ if (xTaskCheck[ sTask ] == pdFALSE) {
+ /* The check has not incremented so an error exists. */
+ xReturn = pdFALSE;
+ }
+
+ /* Reset the check variable so we can tell if it has been set by
+ the next time around. */
+ xTaskCheck[ sTask ] = pdFALSE;
+ }
+
+ return xReturn;
+}
+
diff --git a/gyro_board/src/usb/CommonDemoTasks/recmutex.c b/gyro_board/src/usb/CommonDemoTasks/recmutex.c
new file mode 100644
index 0000000..9d163d8
--- /dev/null
+++ b/gyro_board/src/usb/CommonDemoTasks/recmutex.c
@@ -0,0 +1,334 @@
+/*
+ FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.
+
+ ***************************************************************************
+ * *
+ * If you are: *
+ * *
+ * + New to FreeRTOS, *
+ * + Wanting to learn FreeRTOS or multitasking in general quickly *
+ * + Looking for basic training, *
+ * + Wanting to improve your FreeRTOS skills and productivity *
+ * *
+ * then take a look at the FreeRTOS eBook *
+ * *
+ * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
+ * http://www.FreeRTOS.org/Documentation *
+ * *
+ * A pdf reference manual is also available. Both are usually delivered *
+ * to your inbox within 20 minutes to two hours when purchased between 8am *
+ * and 8pm GMT (although please allow up to 24 hours in case of *
+ * exceptional circumstances). Thank you for your support! *
+ * *
+ ***************************************************************************
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
+ ***NOTE*** The exception to the GPL is included to allow you to distribute
+ a combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details. You should have received a copy of the GNU General Public
+ License and the FreeRTOS license exception along with FreeRTOS; if not it
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained
+ by writing to Richard Barry, contact details for whom are available on the
+ FreeRTOS WEB site.
+
+ 1 tab == 4 spaces!
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+/*
+ The tasks defined on this page demonstrate the use of recursive mutexes.
+
+ For recursive mutex functionality the created mutex should be created using
+ xSemaphoreCreateRecursiveMutex(), then be manipulated
+ using the xSemaphoreTakeRecursive() and xSemaphoreGiveRecursive() API
+ functions.
+
+ This demo creates three tasks all of which access the same recursive mutex:
+
+ prvRecursiveMutexControllingTask() has the highest priority so executes
+ first and grabs the mutex. It then performs some recursive accesses -
+ between each of which it sleeps for a short period to let the lower
+ priority tasks execute. When it has completed its demo functionality
+ it gives the mutex back before suspending itself.
+
+ prvRecursiveMutexBlockingTask() attempts to access the mutex by performing
+ a blocking 'take'. The blocking task has a lower priority than the
+ controlling task so by the time it executes the mutex has already been
+ taken by the controlling task, causing the blocking task to block. It
+ does not unblock until the controlling task has given the mutex back,
+ and it does not actually run until the controlling task has suspended
+ itself (due to the relative priorities). When it eventually does obtain
+ the mutex all it does is give the mutex back prior to also suspending
+ itself. At this point both the controlling task and the blocking task are
+ suspended.
+
+ prvRecursiveMutexPollingTask() runs at the idle priority. It spins round
+ a tight loop attempting to obtain the mutex with a non-blocking call. As
+ the lowest priority task it will not successfully obtain the mutex until
+ both the controlling and blocking tasks are suspended. Once it eventually
+ does obtain the mutex it first unsuspends both the controlling task and
+ blocking task prior to giving the mutex back - resulting in the polling
+ task temporarily inheriting the controlling tasks priority.
+*/
+
+/* Scheduler include files. */
+#include "FreeRTOS.h"
+#include "task.h"
+#include "semphr.h"
+
+/* Demo app include files. */
+#include "recmutex.h"
+
+/* Priorities assigned to the three tasks. */
+#define recmuCONTROLLING_TASK_PRIORITY ( tskIDLE_PRIORITY + 2 )
+#define recmuBLOCKING_TASK_PRIORITY ( tskIDLE_PRIORITY + 1 )
+#define recmuPOLLING_TASK_PRIORITY ( tskIDLE_PRIORITY + 0 )
+
+/* The recursive call depth. */
+#define recmuMAX_COUNT ( 10 )
+
+/* Misc. */
+#define recmuSHORT_DELAY ( 20 / portTICK_RATE_MS )
+#define recmuNO_DELAY ( ( portTickType ) 0 )
+#define recmuTWO_TICK_DELAY ( ( portTickType ) 2 )
+
+/* The three tasks as described at the top of this file. */
+static void prvRecursiveMutexControllingTask(void *pvParameters);
+static void prvRecursiveMutexBlockingTask(void *pvParameters);
+static void prvRecursiveMutexPollingTask(void *pvParameters);
+
+/* The mutex used by the demo. */
+static xSemaphoreHandle xMutex;
+
+/* Variables used to detect and latch errors. */
+static volatile portBASE_TYPE xErrorOccurred = pdFALSE, xControllingIsSuspended = pdFALSE, xBlockingIsSuspended = pdFALSE;
+static volatile unsigned portBASE_TYPE uxControllingCycles = 0, uxBlockingCycles, uxPollingCycles = 0;
+
+/* Handles of the two higher priority tasks, required so they can be resumed
+(unsuspended). */
+static xTaskHandle xControllingTaskHandle, xBlockingTaskHandle;
+
+/*-----------------------------------------------------------*/
+
+void vStartRecursiveMutexTasks(void)
+{
+ /* Just creates the mutex and the three tasks. */
+
+ xMutex = xSemaphoreCreateRecursiveMutex();
+
+ /* vQueueAddToRegistry() adds the mutex to the registry, if one is
+ in use. The registry is provided as a means for kernel aware
+ debuggers to locate mutex and has no purpose if a kernel aware debugger
+ is not being used. The call to vQueueAddToRegistry() will be removed
+ by the pre-processor if configQUEUE_REGISTRY_SIZE is not defined or is
+ defined to be less than 1. */
+ vQueueAddToRegistry((xQueueHandle) xMutex, (signed portCHAR *) "Recursive_Mutex");
+
+
+ if (xMutex != NULL) {
+ xTaskCreate(prvRecursiveMutexControllingTask, (signed portCHAR *) "Rec1", configMINIMAL_STACK_SIZE, NULL, recmuCONTROLLING_TASK_PRIORITY, &xControllingTaskHandle);
+ xTaskCreate(prvRecursiveMutexBlockingTask, (signed portCHAR *) "Rec2", configMINIMAL_STACK_SIZE, NULL, recmuBLOCKING_TASK_PRIORITY, &xBlockingTaskHandle);
+ xTaskCreate(prvRecursiveMutexPollingTask, (signed portCHAR *) "Rec3", configMINIMAL_STACK_SIZE, NULL, recmuPOLLING_TASK_PRIORITY, NULL);
+ }
+}
+/*-----------------------------------------------------------*/
+
+static void prvRecursiveMutexControllingTask(void *pvParameters)
+{
+ unsigned portBASE_TYPE ux;
+
+ /* Just to remove compiler warning. */
+ (void) pvParameters;
+
+ for (;;) {
+ /* Should not be able to 'give' the mutex, as we have not yet 'taken'
+ it. */
+ if (xSemaphoreGiveRecursive(xMutex) == pdPASS) {
+ xErrorOccurred = pdTRUE;
+ }
+
+ for (ux = 0; ux < recmuMAX_COUNT; ux++) {
+ /* We should now be able to take the mutex as many times as
+ we like. A one tick delay is used so the polling task will
+ inherit our priority on all but the first cycle of this task.
+ If we did not block attempting to receive the mutex then no
+ priority inheritance would occur. */
+ if (xSemaphoreTakeRecursive(xMutex, recmuTWO_TICK_DELAY) != pdPASS) {
+ xErrorOccurred = pdTRUE;
+ }
+
+ /* Ensure the other task attempting to access the mutex (and the
+ other demo tasks) are able to execute. */
+ vTaskDelay(recmuSHORT_DELAY);
+ }
+
+ /* For each time we took the mutex, give it back. */
+ for (ux = 0; ux < recmuMAX_COUNT; ux++) {
+ /* Ensure the other task attempting to access the mutex (and the
+ other demo tasks) are able to execute. */
+ vTaskDelay(recmuSHORT_DELAY);
+
+ /* We should now be able to give the mutex as many times as we
+ took it. */
+ if (xSemaphoreGiveRecursive(xMutex) != pdPASS) {
+ xErrorOccurred = pdTRUE;
+ }
+ }
+
+ /* Having given it back the same number of times as it was taken, we
+ should no longer be the mutex owner, so the next give sh ould fail. */
+ if (xSemaphoreGiveRecursive(xMutex) == pdPASS) {
+ xErrorOccurred = pdTRUE;
+ }
+
+ /* Keep count of the number of cycles this task has performed so a
+ stall can be detected. */
+ uxControllingCycles++;
+
+ /* Suspend ourselves to the blocking task can execute. */
+ xControllingIsSuspended = pdTRUE;
+ vTaskSuspend(NULL);
+ xControllingIsSuspended = pdFALSE;
+ }
+}
+/*-----------------------------------------------------------*/
+
+static void prvRecursiveMutexBlockingTask(void *pvParameters)
+{
+ /* Just to remove compiler warning. */
+ (void) pvParameters;
+
+ for (;;) {
+ /* Attempt to obtain the mutex. We should block until the
+ controlling task has given up the mutex, and not actually execute
+ past this call until the controlling task is suspended. */
+ if (xSemaphoreTakeRecursive(xMutex, portMAX_DELAY) == pdPASS) {
+ if (xControllingIsSuspended != pdTRUE) {
+ /* Did not expect to execute until the controlling task was
+ suspended. */
+ xErrorOccurred = pdTRUE;
+ } else {
+ /* Give the mutex back before suspending ourselves to allow
+ the polling task to obtain the mutex. */
+ if (xSemaphoreGiveRecursive(xMutex) != pdPASS) {
+ xErrorOccurred = pdTRUE;
+ }
+
+ xBlockingIsSuspended = pdTRUE;
+ vTaskSuspend(NULL);
+ xBlockingIsSuspended = pdFALSE;
+ }
+ } else {
+ /* We should not leave the xSemaphoreTakeRecursive() function
+ until the mutex was obtained. */
+ xErrorOccurred = pdTRUE;
+ }
+
+ /* The controlling and blocking tasks should be in lock step. */
+ if (uxControllingCycles != (uxBlockingCycles + 1)) {
+ xErrorOccurred = pdTRUE;
+ }
+
+ /* Keep count of the number of cycles this task has performed so a
+ stall can be detected. */
+ uxBlockingCycles++;
+ }
+}
+/*-----------------------------------------------------------*/
+
+static void prvRecursiveMutexPollingTask(void *pvParameters)
+{
+ /* Just to remove compiler warning. */
+ (void) pvParameters;
+
+ for (;;) {
+ /* Keep attempting to obtain the mutex. We should only obtain it when
+ the blocking task has suspended itself. */
+ if (xSemaphoreTakeRecursive(xMutex, recmuNO_DELAY) == pdPASS) {
+ /* Is the blocking task suspended? */
+ if (xBlockingIsSuspended != pdTRUE) {
+ xErrorOccurred = pdTRUE;
+ } else {
+ /* Keep count of the number of cycles this task has performed so
+ a stall can be detected. */
+ uxPollingCycles++;
+
+ /* We can resume the other tasks here even though they have a
+ higher priority than the polling task. When they execute they
+ will attempt to obtain the mutex but fail because the polling
+ task is still the mutex holder. The polling task (this task)
+ will then inherit the higher priority. */
+ vTaskResume(xBlockingTaskHandle);
+ vTaskResume(xControllingTaskHandle);
+
+ /* Release the mutex, disinheriting the higher priority again. */
+ if (xSemaphoreGiveRecursive(xMutex) != pdPASS) {
+ xErrorOccurred = pdTRUE;
+ }
+ }
+ }
+
+#if configUSE_PREEMPTION == 0
+ {
+ taskYIELD();
+ }
+#endif
+ }
+}
+/*-----------------------------------------------------------*/
+
+/* This is called to check that all the created tasks are still running. */
+portBASE_TYPE xAreRecursiveMutexTasksStillRunning(void)
+{
+ portBASE_TYPE xReturn;
+ static unsigned portBASE_TYPE uxLastControllingCycles = 0, uxLastBlockingCycles = 0, uxLastPollingCycles = 0;
+
+ /* Is the controlling task still cycling? */
+ if (uxLastControllingCycles == uxControllingCycles) {
+ xErrorOccurred = pdTRUE;
+ } else {
+ uxLastControllingCycles = uxControllingCycles;
+ }
+
+ /* Is the blocking task still cycling? */
+ if (uxLastBlockingCycles == uxBlockingCycles) {
+ xErrorOccurred = pdTRUE;
+ } else {
+ uxLastBlockingCycles = uxBlockingCycles;
+ }
+
+ /* Is the polling task still cycling? */
+ if (uxLastPollingCycles == uxPollingCycles) {
+ xErrorOccurred = pdTRUE;
+ } else {
+ uxLastPollingCycles = uxPollingCycles;
+ }
+
+ if (xErrorOccurred == pdTRUE) {
+ xReturn = pdFAIL;
+ } else {
+ xReturn = pdTRUE;
+ }
+
+ return xReturn;
+}
+
+
+
+
diff --git a/gyro_board/src/usb/CommonDemoTasks/semtest.c b/gyro_board/src/usb/CommonDemoTasks/semtest.c
new file mode 100644
index 0000000..055ed11
--- /dev/null
+++ b/gyro_board/src/usb/CommonDemoTasks/semtest.c
@@ -0,0 +1,263 @@
+/*
+ FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.
+
+ ***************************************************************************
+ * *
+ * If you are: *
+ * *
+ * + New to FreeRTOS, *
+ * + Wanting to learn FreeRTOS or multitasking in general quickly *
+ * + Looking for basic training, *
+ * + Wanting to improve your FreeRTOS skills and productivity *
+ * *
+ * then take a look at the FreeRTOS eBook *
+ * *
+ * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
+ * http://www.FreeRTOS.org/Documentation *
+ * *
+ * A pdf reference manual is also available. Both are usually delivered *
+ * to your inbox within 20 minutes to two hours when purchased between 8am *
+ * and 8pm GMT (although please allow up to 24 hours in case of *
+ * exceptional circumstances). Thank you for your support! *
+ * *
+ ***************************************************************************
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
+ ***NOTE*** The exception to the GPL is included to allow you to distribute
+ a combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details. You should have received a copy of the GNU General Public
+ License and the FreeRTOS license exception along with FreeRTOS; if not it
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained
+ by writing to Richard Barry, contact details for whom are available on the
+ FreeRTOS WEB site.
+
+ 1 tab == 4 spaces!
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+/*
+ * Creates two sets of two tasks. The tasks within a set share a variable, access
+ * to which is guarded by a semaphore.
+ *
+ * Each task starts by attempting to obtain the semaphore. On obtaining a
+ * semaphore a task checks to ensure that the guarded variable has an expected
+ * value. It then clears the variable to zero before counting it back up to the
+ * expected value in increments of 1. After each increment the variable is checked
+ * to ensure it contains the value to which it was just set. When the starting
+ * value is again reached the task releases the semaphore giving the other task in
+ * the set a chance to do exactly the same thing. The starting value is high
+ * enough to ensure that a tick is likely to occur during the incrementing loop.
+ *
+ * An error is flagged if at any time during the process a shared variable is
+ * found to have a value other than that expected. Such an occurrence would
+ * suggest an error in the mutual exclusion mechanism by which access to the
+ * variable is restricted.
+ *
+ * The first set of two tasks poll their semaphore. The second set use blocking
+ * calls.
+ *
+ */
+
+
+#include <stdlib.h>
+
+/* Scheduler include files. */
+#include "FreeRTOS.h"
+#include "task.h"
+#include "semphr.h"
+
+/* Demo app include files. */
+#include "semtest.h"
+
+/* The value to which the shared variables are counted. */
+#define semtstBLOCKING_EXPECTED_VALUE ( ( unsigned long ) 0xfff )
+#define semtstNON_BLOCKING_EXPECTED_VALUE ( ( unsigned long ) 0xff )
+
+#define semtstSTACK_SIZE configMINIMAL_STACK_SIZE
+
+#define semtstNUM_TASKS ( 4 )
+
+#define semtstDELAY_FACTOR ( ( portTickType ) 10 )
+
+/* The task function as described at the top of the file. */
+static portTASK_FUNCTION_PROTO(prvSemaphoreTest, pvParameters);
+
+/* Structure used to pass parameters to each task. */
+typedef struct SEMAPHORE_PARAMETERS {
+ xSemaphoreHandle xSemaphore;
+ volatile unsigned long *pulSharedVariable;
+ portTickType xBlockTime;
+} xSemaphoreParameters;
+
+/* Variables used to check that all the tasks are still running without errors. */
+static volatile short sCheckVariables[ semtstNUM_TASKS ] = { 0 };
+static volatile short sNextCheckVariable = 0;
+
+/*-----------------------------------------------------------*/
+
+void vStartSemaphoreTasks(unsigned portBASE_TYPE uxPriority)
+{
+ xSemaphoreParameters *pxFirstSemaphoreParameters, *pxSecondSemaphoreParameters;
+ const portTickType xBlockTime = (portTickType) 100;
+
+ /* Create the structure used to pass parameters to the first two tasks. */
+ pxFirstSemaphoreParameters = (xSemaphoreParameters *) pvPortMalloc(sizeof(xSemaphoreParameters));
+
+ if (pxFirstSemaphoreParameters != NULL) {
+ /* Create the semaphore used by the first two tasks. */
+ vSemaphoreCreateBinary(pxFirstSemaphoreParameters->xSemaphore);
+
+ if (pxFirstSemaphoreParameters->xSemaphore != NULL) {
+ /* Create the variable which is to be shared by the first two tasks. */
+ pxFirstSemaphoreParameters->pulSharedVariable = (unsigned long *) pvPortMalloc(sizeof(unsigned long));
+
+ /* Initialise the share variable to the value the tasks expect. */
+ *(pxFirstSemaphoreParameters->pulSharedVariable) = semtstNON_BLOCKING_EXPECTED_VALUE;
+
+ /* The first two tasks do not block on semaphore calls. */
+ pxFirstSemaphoreParameters->xBlockTime = (portTickType) 0;
+
+ /* Spawn the first two tasks. As they poll they operate at the idle priority. */
+ xTaskCreate(prvSemaphoreTest, (signed char *) "PolSEM1", semtstSTACK_SIZE, (void *) pxFirstSemaphoreParameters, tskIDLE_PRIORITY, (xTaskHandle *) NULL);
+ xTaskCreate(prvSemaphoreTest, (signed char *) "PolSEM2", semtstSTACK_SIZE, (void *) pxFirstSemaphoreParameters, tskIDLE_PRIORITY, (xTaskHandle *) NULL);
+ }
+ }
+
+ /* Do exactly the same to create the second set of tasks, only this time
+ provide a block time for the semaphore calls. */
+ pxSecondSemaphoreParameters = (xSemaphoreParameters *) pvPortMalloc(sizeof(xSemaphoreParameters));
+ if (pxSecondSemaphoreParameters != NULL) {
+ vSemaphoreCreateBinary(pxSecondSemaphoreParameters->xSemaphore);
+
+ if (pxSecondSemaphoreParameters->xSemaphore != NULL) {
+ pxSecondSemaphoreParameters->pulSharedVariable = (unsigned long *) pvPortMalloc(sizeof(unsigned long));
+ *(pxSecondSemaphoreParameters->pulSharedVariable) = semtstBLOCKING_EXPECTED_VALUE;
+ pxSecondSemaphoreParameters->xBlockTime = xBlockTime / portTICK_RATE_MS;
+
+ xTaskCreate(prvSemaphoreTest, (signed char *) "BlkSEM1", semtstSTACK_SIZE, (void *) pxSecondSemaphoreParameters, uxPriority, (xTaskHandle *) NULL);
+ xTaskCreate(prvSemaphoreTest, (signed char *) "BlkSEM2", semtstSTACK_SIZE, (void *) pxSecondSemaphoreParameters, uxPriority, (xTaskHandle *) NULL);
+ }
+ }
+
+ /* vQueueAddToRegistry() adds the semaphore to the registry, if one is
+ in use. The registry is provided as a means for kernel aware
+ debuggers to locate semaphores and has no purpose if a kernel aware debugger
+ is not being used. The call to vQueueAddToRegistry() will be removed
+ by the pre-processor if configQUEUE_REGISTRY_SIZE is not defined or is
+ defined to be less than 1. */
+ vQueueAddToRegistry((xQueueHandle) pxFirstSemaphoreParameters->xSemaphore, (signed char *) "Counting_Sem_1");
+ vQueueAddToRegistry((xQueueHandle) pxSecondSemaphoreParameters->xSemaphore, (signed char *) "Counting_Sem_2");
+}
+/*-----------------------------------------------------------*/
+
+static portTASK_FUNCTION(prvSemaphoreTest, pvParameters)
+{
+ xSemaphoreParameters *pxParameters;
+ volatile unsigned long *pulSharedVariable, ulExpectedValue;
+ unsigned long ulCounter;
+ short sError = pdFALSE, sCheckVariableToUse;
+
+ /* See which check variable to use. sNextCheckVariable is not semaphore
+ protected! */
+ portENTER_CRITICAL();
+ sCheckVariableToUse = sNextCheckVariable;
+ sNextCheckVariable++;
+ portEXIT_CRITICAL();
+
+ /* A structure is passed in as the parameter. This contains the shared
+ variable being guarded. */
+ pxParameters = (xSemaphoreParameters *) pvParameters;
+ pulSharedVariable = pxParameters->pulSharedVariable;
+
+ /* If we are blocking we use a much higher count to ensure loads of context
+ switches occur during the count. */
+ if (pxParameters->xBlockTime > (portTickType) 0) {
+ ulExpectedValue = semtstBLOCKING_EXPECTED_VALUE;
+ } else {
+ ulExpectedValue = semtstNON_BLOCKING_EXPECTED_VALUE;
+ }
+
+ for (;;) {
+ /* Try to obtain the semaphore. */
+ if (xSemaphoreTake(pxParameters->xSemaphore, pxParameters->xBlockTime) == pdPASS) {
+ /* We have the semaphore and so expect any other tasks using the
+ shared variable to have left it in the state we expect to find
+ it. */
+ if (*pulSharedVariable != ulExpectedValue) {
+ sError = pdTRUE;
+ }
+
+ /* Clear the variable, then count it back up to the expected value
+ before releasing the semaphore. Would expect a context switch or
+ two during this time. */
+ for (ulCounter = (unsigned long) 0; ulCounter <= ulExpectedValue; ulCounter++) {
+ *pulSharedVariable = ulCounter;
+ if (*pulSharedVariable != ulCounter) {
+ sError = pdTRUE;
+ }
+ }
+
+ /* Release the semaphore, and if no errors have occurred increment the check
+ variable. */
+ if (xSemaphoreGive(pxParameters->xSemaphore) == pdFALSE) {
+ sError = pdTRUE;
+ }
+
+ if (sError == pdFALSE) {
+ if (sCheckVariableToUse < semtstNUM_TASKS) {
+ (sCheckVariables[ sCheckVariableToUse ])++;
+ }
+ }
+
+ /* If we have a block time then we are running at a priority higher
+ than the idle priority. This task takes a long time to complete
+ a cycle (deliberately so to test the guarding) so will be starving
+ out lower priority tasks. Block for some time to allow give lower
+ priority tasks some processor time. */
+ vTaskDelay(pxParameters->xBlockTime * semtstDELAY_FACTOR);
+ } else {
+ if (pxParameters->xBlockTime == (portTickType) 0) {
+ /* We have not got the semaphore yet, so no point using the
+ processor. We are not blocking when attempting to obtain the
+ semaphore. */
+ taskYIELD();
+ }
+ }
+ }
+}
+/*-----------------------------------------------------------*/
+
+/* This is called to check that all the created tasks are still running. */
+portBASE_TYPE xAreSemaphoreTasksStillRunning(void)
+{
+ static short sLastCheckVariables[ semtstNUM_TASKS ] = { 0 };
+ portBASE_TYPE xTask, xReturn = pdTRUE;
+
+ for (xTask = 0; xTask < semtstNUM_TASKS; xTask++) {
+ if (sLastCheckVariables[ xTask ] == sCheckVariables[ xTask ]) {
+ xReturn = pdFALSE;
+ }
+
+ sLastCheckVariables[ xTask ] = sCheckVariables[ xTask ];
+ }
+
+ return xReturn;
+}
+
+
diff --git a/gyro_board/src/usb/FreeRTOS/include/FreeRTOS.h b/gyro_board/src/usb/FreeRTOS/include/FreeRTOS.h
new file mode 100644
index 0000000..afbd505
--- /dev/null
+++ b/gyro_board/src/usb/FreeRTOS/include/FreeRTOS.h
@@ -0,0 +1,420 @@
+/*
+ FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.
+
+ ***************************************************************************
+ * *
+ * If you are: *
+ * *
+ * + New to FreeRTOS, *
+ * + Wanting to learn FreeRTOS or multitasking in general quickly *
+ * + Looking for basic training, *
+ * + Wanting to improve your FreeRTOS skills and productivity *
+ * *
+ * then take a look at the FreeRTOS eBook *
+ * *
+ * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
+ * http://www.FreeRTOS.org/Documentation *
+ * *
+ * A pdf reference manual is also available. Both are usually delivered *
+ * to your inbox within 20 minutes to two hours when purchased between 8am *
+ * and 8pm GMT (although please allow up to 24 hours in case of *
+ * exceptional circumstances). Thank you for your support! *
+ * *
+ ***************************************************************************
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
+ ***NOTE*** The exception to the GPL is included to allow you to distribute
+ a combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details. You should have received a copy of the GNU General Public
+ License and the FreeRTOS license exception along with FreeRTOS; if not it
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained
+ by writing to Richard Barry, contact details for whom are available on the
+ FreeRTOS WEB site.
+
+ 1 tab == 4 spaces!
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef INC_FREERTOS_H
+#define INC_FREERTOS_H
+
+
+/*
+ * Include the generic headers required for the FreeRTOS port being used.
+ */
+#include <stddef.h>
+
+/* Basic FreeRTOS definitions. */
+#include "projdefs.h"
+
+/* Application specific configuration options. */
+#include "FreeRTOSConfig.h"
+
+/* Definitions specific to the port being used. */
+#include "portable.h"
+
+
+/* Defines the prototype to which the application task hook function must
+conform. */
+typedef portBASE_TYPE(*pdTASK_HOOK_CODE)(void *);
+
+
+
+
+
+/*
+ * Check all the required application specific macros have been defined.
+ * These macros are application specific and (as downloaded) are defined
+ * within FreeRTOSConfig.h.
+ */
+
+#ifndef configUSE_PREEMPTION
+#error Missing definition: configUSE_PREEMPTION should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details.
+#endif
+
+#ifndef configUSE_IDLE_HOOK
+#error Missing definition: configUSE_IDLE_HOOK should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details.
+#endif
+
+#ifndef configUSE_TICK_HOOK
+#error Missing definition: configUSE_TICK_HOOK should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details.
+#endif
+
+#ifndef configUSE_CO_ROUTINES
+#error Missing definition: configUSE_CO_ROUTINES should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details.
+#endif
+
+#ifndef INCLUDE_vTaskPrioritySet
+#error Missing definition: INCLUDE_vTaskPrioritySet should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details.
+#endif
+
+#ifndef INCLUDE_uxTaskPriorityGet
+#error Missing definition: INCLUDE_uxTaskPriorityGet should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details.
+#endif
+
+#ifndef INCLUDE_vTaskDelete
+#error Missing definition: INCLUDE_vTaskDelete should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details.
+#endif
+
+#ifndef INCLUDE_vTaskCleanUpResources
+#error Missing definition: INCLUDE_vTaskCleanUpResources should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details.
+#endif
+
+#ifndef INCLUDE_vTaskSuspend
+#error Missing definition: INCLUDE_vTaskSuspend should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details.
+#endif
+
+#ifndef INCLUDE_vTaskDelayUntil
+#error Missing definition: INCLUDE_vTaskDelayUntil should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details.
+#endif
+
+#ifndef INCLUDE_vTaskDelay
+#error Missing definition: INCLUDE_vTaskDelay should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details.
+#endif
+
+#ifndef configUSE_16_BIT_TICKS
+#error Missing definition: configUSE_16_BIT_TICKS should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details.
+#endif
+
+#ifndef configUSE_APPLICATION_TASK_TAG
+#define configUSE_APPLICATION_TASK_TAG 0
+#endif
+
+#ifndef INCLUDE_uxTaskGetStackHighWaterMark
+#define INCLUDE_uxTaskGetStackHighWaterMark 0
+#endif
+
+#ifndef configUSE_RECURSIVE_MUTEXES
+#define configUSE_RECURSIVE_MUTEXES 0
+#endif
+
+#ifndef configUSE_MUTEXES
+#define configUSE_MUTEXES 0
+#endif
+
+#ifndef configUSE_COUNTING_SEMAPHORES
+#define configUSE_COUNTING_SEMAPHORES 0
+#endif
+
+#ifndef configUSE_ALTERNATIVE_API
+#define configUSE_ALTERNATIVE_API 0
+#endif
+
+#ifndef portCRITICAL_NESTING_IN_TCB
+#define portCRITICAL_NESTING_IN_TCB 0
+#endif
+
+#ifndef configMAX_TASK_NAME_LEN
+#define configMAX_TASK_NAME_LEN 16
+#endif
+
+#ifndef configIDLE_SHOULD_YIELD
+#define configIDLE_SHOULD_YIELD 1
+#endif
+
+#if configMAX_TASK_NAME_LEN < 1
+#undef configMAX_TASK_NAME_LEN
+#define configMAX_TASK_NAME_LEN 1
+#endif
+
+#ifndef INCLUDE_xTaskResumeFromISR
+#define INCLUDE_xTaskResumeFromISR 1
+#endif
+
+#ifndef INCLUDE_xTaskGetSchedulerState
+#define INCLUDE_xTaskGetSchedulerState 0
+#endif
+
+#if ( configUSE_MUTEXES == 1 )
+/* xTaskGetCurrentTaskHandle is used by the priority inheritance mechanism
+within the mutex implementation so must be available if mutexes are used. */
+#undef INCLUDE_xTaskGetCurrentTaskHandle
+#define INCLUDE_xTaskGetCurrentTaskHandle 1
+#else
+#ifndef INCLUDE_xTaskGetCurrentTaskHandle
+#define INCLUDE_xTaskGetCurrentTaskHandle 0
+#endif
+#endif
+
+
+#ifndef portSET_INTERRUPT_MASK_FROM_ISR
+#define portSET_INTERRUPT_MASK_FROM_ISR() 0
+#endif
+
+#ifndef portCLEAR_INTERRUPT_MASK_FROM_ISR
+#define portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedStatusValue ) ( void ) uxSavedStatusValue
+#endif
+
+
+#ifndef configQUEUE_REGISTRY_SIZE
+#define configQUEUE_REGISTRY_SIZE 0
+#endif
+
+#if configQUEUE_REGISTRY_SIZE < 1
+#define configQUEUE_REGISTRY_SIZE 0
+#define vQueueAddToRegistry( xQueue, pcName )
+#define vQueueUnregisterQueue( xQueue )
+#endif
+
+
+/* Remove any unused trace macros. */
+#ifndef traceSTART
+/* Used to perform any necessary initialisation - for example, open a file
+into which trace is to be written. */
+#define traceSTART()
+#endif
+
+#ifndef traceEND
+/* Use to close a trace, for example close a file into which trace has been
+written. */
+#define traceEND()
+#endif
+
+#ifndef traceTASK_SWITCHED_IN
+/* Called after a task has been selected to run. pxCurrentTCB holds a pointer
+to the task control block of the selected task. */
+#define traceTASK_SWITCHED_IN()
+#endif
+
+#ifndef traceTASK_SWITCHED_OUT
+/* Called before a task has been selected to run. pxCurrentTCB holds a pointer
+to the task control block of the task being switched out. */
+#define traceTASK_SWITCHED_OUT()
+#endif
+
+#ifndef traceBLOCKING_ON_QUEUE_RECEIVE
+/* Task is about to block because it cannot read from a
+queue/mutex/semaphore. pxQueue is a pointer to the queue/mutex/semaphore
+upon which the read was attempted. pxCurrentTCB points to the TCB of the
+task that attempted the read. */
+#define traceBLOCKING_ON_QUEUE_RECEIVE( pxQueue )
+#endif
+
+#ifndef traceBLOCKING_ON_QUEUE_SEND
+/* Task is about to block because it cannot write to a
+queue/mutex/semaphore. pxQueue is a pointer to the queue/mutex/semaphore
+upon which the write was attempted. pxCurrentTCB points to the TCB of the
+task that attempted the write. */
+#define traceBLOCKING_ON_QUEUE_SEND( pxQueue )
+#endif
+
+#ifndef configCHECK_FOR_STACK_OVERFLOW
+#define configCHECK_FOR_STACK_OVERFLOW 0
+#endif
+
+/* The following event macros are embedded in the kernel API calls. */
+
+#ifndef traceQUEUE_CREATE
+#define traceQUEUE_CREATE( pxNewQueue )
+#endif
+
+#ifndef traceQUEUE_CREATE_FAILED
+#define traceQUEUE_CREATE_FAILED()
+#endif
+
+#ifndef traceCREATE_MUTEX
+#define traceCREATE_MUTEX( pxNewQueue )
+#endif
+
+#ifndef traceCREATE_MUTEX_FAILED
+#define traceCREATE_MUTEX_FAILED()
+#endif
+
+#ifndef traceGIVE_MUTEX_RECURSIVE
+#define traceGIVE_MUTEX_RECURSIVE( pxMutex )
+#endif
+
+#ifndef traceGIVE_MUTEX_RECURSIVE_FAILED
+#define traceGIVE_MUTEX_RECURSIVE_FAILED( pxMutex )
+#endif
+
+#ifndef traceTAKE_MUTEX_RECURSIVE
+#define traceTAKE_MUTEX_RECURSIVE( pxMutex )
+#endif
+
+#ifndef traceCREATE_COUNTING_SEMAPHORE
+#define traceCREATE_COUNTING_SEMAPHORE()
+#endif
+
+#ifndef traceCREATE_COUNTING_SEMAPHORE_FAILED
+#define traceCREATE_COUNTING_SEMAPHORE_FAILED()
+#endif
+
+#ifndef traceQUEUE_SEND
+#define traceQUEUE_SEND( pxQueue )
+#endif
+
+#ifndef traceQUEUE_SEND_FAILED
+#define traceQUEUE_SEND_FAILED( pxQueue )
+#endif
+
+#ifndef traceQUEUE_RECEIVE
+#define traceQUEUE_RECEIVE( pxQueue )
+#endif
+
+#ifndef traceQUEUE_PEEK
+#define traceQUEUE_PEEK( pxQueue )
+#endif
+
+#ifndef traceQUEUE_RECEIVE_FAILED
+#define traceQUEUE_RECEIVE_FAILED( pxQueue )
+#endif
+
+#ifndef traceQUEUE_SEND_FROM_ISR
+#define traceQUEUE_SEND_FROM_ISR( pxQueue )
+#endif
+
+#ifndef traceQUEUE_SEND_FROM_ISR_FAILED
+#define traceQUEUE_SEND_FROM_ISR_FAILED( pxQueue )
+#endif
+
+#ifndef traceQUEUE_RECEIVE_FROM_ISR
+#define traceQUEUE_RECEIVE_FROM_ISR( pxQueue )
+#endif
+
+#ifndef traceQUEUE_RECEIVE_FROM_ISR_FAILED
+#define traceQUEUE_RECEIVE_FROM_ISR_FAILED( pxQueue )
+#endif
+
+#ifndef traceQUEUE_DELETE
+#define traceQUEUE_DELETE( pxQueue )
+#endif
+
+#ifndef traceTASK_CREATE
+#define traceTASK_CREATE( pxNewTCB )
+#endif
+
+#ifndef traceTASK_CREATE_FAILED
+#define traceTASK_CREATE_FAILED( pxNewTCB )
+#endif
+
+#ifndef traceTASK_DELETE
+#define traceTASK_DELETE( pxTaskToDelete )
+#endif
+
+#ifndef traceTASK_DELAY_UNTIL
+#define traceTASK_DELAY_UNTIL()
+#endif
+
+#ifndef traceTASK_DELAY
+#define traceTASK_DELAY()
+#endif
+
+#ifndef traceTASK_PRIORITY_SET
+#define traceTASK_PRIORITY_SET( pxTask, uxNewPriority )
+#endif
+
+#ifndef traceTASK_SUSPEND
+#define traceTASK_SUSPEND( pxTaskToSuspend )
+#endif
+
+#ifndef traceTASK_RESUME
+#define traceTASK_RESUME( pxTaskToResume )
+#endif
+
+#ifndef traceTASK_RESUME_FROM_ISR
+#define traceTASK_RESUME_FROM_ISR( pxTaskToResume )
+#endif
+
+#ifndef traceTASK_INCREMENT_TICK
+#define traceTASK_INCREMENT_TICK( xTickCount )
+#endif
+
+#ifndef configGENERATE_RUN_TIME_STATS
+#define configGENERATE_RUN_TIME_STATS 0
+#endif
+
+#if ( configGENERATE_RUN_TIME_STATS == 1 )
+
+#ifndef portCONFIGURE_TIMER_FOR_RUN_TIME_STATS
+#error If configGENERATE_RUN_TIME_STATS is defined then portCONFIGURE_TIMER_FOR_RUN_TIME_STATS must also be defined. portCONFIGURE_TIMER_FOR_RUN_TIME_STATS should call a port layer function to setup a peripheral timer/counter that can then be used as the run time counter time base.
+#endif /* portCONFIGURE_TIMER_FOR_RUN_TIME_STATS */
+
+#ifndef portGET_RUN_TIME_COUNTER_VALUE
+#error If configGENERATE_RUN_TIME_STATS is defined then portGET_RUN_TIME_COUNTER_VALUE must also be defined. portGET_RUN_TIME_COUNTER_VALUE should evaluate to the counter value of the timer/counter peripheral used as the run time counter time base.
+#endif /* portGET_RUN_TIME_COUNTER_VALUE */
+
+#endif /* configGENERATE_RUN_TIME_STATS */
+
+#ifndef portCONFIGURE_TIMER_FOR_RUN_TIME_STATS
+#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS()
+#endif
+
+#ifndef configUSE_MALLOC_FAILED_HOOK
+#define configUSE_MALLOC_FAILED_HOOK 0
+#endif
+
+#ifndef portPRIVILEGE_BIT
+#define portPRIVILEGE_BIT ( ( unsigned portBASE_TYPE ) 0x00 )
+#endif
+
+#ifndef portYIELD_WITHIN_API
+#define portYIELD_WITHIN_API portYIELD
+#endif
+
+#ifndef pvPortMallocAligned
+#define pvPortMallocAligned( x, puxStackBuffer ) ( ( puxStackBuffer == NULL ) ? ( pvPortMalloc( x ) ) : ( puxStackBuffer ) )
+#endif
+
+#ifndef vPortFreeAligned
+#define vPortFreeAligned( pvBlockToFree ) vPortFree( pvBlockToFree )
+#endif
+
+#endif /* INC_FREERTOS_H */
+
diff --git a/gyro_board/src/usb/FreeRTOS/include/StackMacros.h b/gyro_board/src/usb/FreeRTOS/include/StackMacros.h
new file mode 100644
index 0000000..67d4c09
--- /dev/null
+++ b/gyro_board/src/usb/FreeRTOS/include/StackMacros.h
@@ -0,0 +1,173 @@
+/*
+ FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.
+
+ ***************************************************************************
+ * *
+ * If you are: *
+ * *
+ * + New to FreeRTOS, *
+ * + Wanting to learn FreeRTOS or multitasking in general quickly *
+ * + Looking for basic training, *
+ * + Wanting to improve your FreeRTOS skills and productivity *
+ * *
+ * then take a look at the FreeRTOS eBook *
+ * *
+ * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
+ * http://www.FreeRTOS.org/Documentation *
+ * *
+ * A pdf reference manual is also available. Both are usually delivered *
+ * to your inbox within 20 minutes to two hours when purchased between 8am *
+ * and 8pm GMT (although please allow up to 24 hours in case of *
+ * exceptional circumstances). Thank you for your support! *
+ * *
+ ***************************************************************************
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
+ ***NOTE*** The exception to the GPL is included to allow you to distribute
+ a combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details. You should have received a copy of the GNU General Public
+ License and the FreeRTOS license exception along with FreeRTOS; if not it
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained
+ by writing to Richard Barry, contact details for whom are available on the
+ FreeRTOS WEB site.
+
+ 1 tab == 4 spaces!
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef STACK_MACROS_H
+#define STACK_MACROS_H
+
+/*
+ * Call the stack overflow hook function if the stack of the task being swapped
+ * out is currently overflowed, or looks like it might have overflowed in the
+ * past.
+ *
+ * Setting configCHECK_FOR_STACK_OVERFLOW to 1 will cause the macro to check
+ * the current stack state only - comparing the current top of stack value to
+ * the stack limit. Setting configCHECK_FOR_STACK_OVERFLOW to greater than 1
+ * will also cause the last few stack bytes to be checked to ensure the value
+ * to which the bytes were set when the task was created have not been
+ * overwritten. Note this second test does not guarantee that an overflowed
+ * stack will always be recognised.
+ */
+
+/*-----------------------------------------------------------*/
+
+#if( configCHECK_FOR_STACK_OVERFLOW == 0 )
+
+/* FreeRTOSConfig.h is not set to check for stack overflows. */
+#define taskFIRST_CHECK_FOR_STACK_OVERFLOW()
+#define taskSECOND_CHECK_FOR_STACK_OVERFLOW()
+
+#endif /* configCHECK_FOR_STACK_OVERFLOW == 0 */
+/*-----------------------------------------------------------*/
+
+#if( configCHECK_FOR_STACK_OVERFLOW == 1 )
+
+/* FreeRTOSConfig.h is only set to use the first method of
+overflow checking. */
+#define taskSECOND_CHECK_FOR_STACK_OVERFLOW()
+
+#endif
+/*-----------------------------------------------------------*/
+
+#if( ( configCHECK_FOR_STACK_OVERFLOW > 0 ) && ( portSTACK_GROWTH < 0 ) )
+
+/* Only the current stack state is to be checked. */
+#define taskFIRST_CHECK_FOR_STACK_OVERFLOW() \
+ { \
+ extern void vApplicationStackOverflowHook( xTaskHandle *pxTask, signed char *pcTaskName ); \
+ \
+ /* Is the currently saved stack pointer within the stack limit? */ \
+ if( pxCurrentTCB->pxTopOfStack <= pxCurrentTCB->pxStack ) \
+ { \
+ vApplicationStackOverflowHook( ( xTaskHandle ) pxCurrentTCB, pxCurrentTCB->pcTaskName ); \
+ } \
+ }
+
+#endif /* configCHECK_FOR_STACK_OVERFLOW > 0 */
+/*-----------------------------------------------------------*/
+
+#if( ( configCHECK_FOR_STACK_OVERFLOW > 0 ) && ( portSTACK_GROWTH > 0 ) )
+
+/* Only the current stack state is to be checked. */
+#define taskFIRST_CHECK_FOR_STACK_OVERFLOW() \
+ { \
+ extern void vApplicationStackOverflowHook( xTaskHandle *pxTask, signed char *pcTaskName ); \
+ \
+ /* Is the currently saved stack pointer within the stack limit? */ \
+ if( pxCurrentTCB->pxTopOfStack >= pxCurrentTCB->pxEndOfStack ) \
+ { \
+ vApplicationStackOverflowHook( ( xTaskHandle ) pxCurrentTCB, pxCurrentTCB->pcTaskName ); \
+ } \
+ }
+
+#endif /* configCHECK_FOR_STACK_OVERFLOW == 1 */
+/*-----------------------------------------------------------*/
+
+#if( ( configCHECK_FOR_STACK_OVERFLOW > 1 ) && ( portSTACK_GROWTH < 0 ) )
+
+#define taskSECOND_CHECK_FOR_STACK_OVERFLOW() \
+ { \
+ extern void vApplicationStackOverflowHook( xTaskHandle *pxTask, signed char *pcTaskName ); \
+ static const unsigned char ucExpectedStackBytes[] = { tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, \
+ tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, \
+ tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, \
+ tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, \
+ tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE }; \
+ \
+ \
+ /* Has the extremity of the task stack ever been written over? */ \
+ if( memcmp( ( void * ) pxCurrentTCB->pxStack, ( void * ) ucExpectedStackBytes, sizeof( ucExpectedStackBytes ) ) != 0 ) \
+ { \
+ vApplicationStackOverflowHook( ( xTaskHandle ) pxCurrentTCB, pxCurrentTCB->pcTaskName ); \
+ } \
+ }
+
+#endif /* #if( configCHECK_FOR_STACK_OVERFLOW > 1 ) */
+/*-----------------------------------------------------------*/
+
+#if( ( configCHECK_FOR_STACK_OVERFLOW > 1 ) && ( portSTACK_GROWTH > 0 ) )
+
+#define taskSECOND_CHECK_FOR_STACK_OVERFLOW() \
+ { \
+ extern void vApplicationStackOverflowHook( xTaskHandle *pxTask, signed char *pcTaskName ); \
+ char *pcEndOfStack = ( char * ) pxCurrentTCB->pxEndOfStack; \
+ static const unsigned char ucExpectedStackBytes[] = { tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, \
+ tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, \
+ tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, \
+ tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, \
+ tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE }; \
+ \
+ \
+ pcEndOfStack -= sizeof( ucExpectedStackBytes ); \
+ \
+ /* Has the extremity of the task stack ever been written over? */ \
+ if( memcmp( ( void * ) pcEndOfStack, ( void * ) ucExpectedStackBytes, sizeof( ucExpectedStackBytes ) ) != 0 ) \
+ { \
+ vApplicationStackOverflowHook( ( xTaskHandle ) pxCurrentTCB, pxCurrentTCB->pcTaskName ); \
+ } \
+ }
+
+#endif /* #if( configCHECK_FOR_STACK_OVERFLOW > 1 ) */
+/*-----------------------------------------------------------*/
+
+#endif /* STACK_MACROS_H */
+
diff --git a/gyro_board/src/usb/FreeRTOS/include/croutine.h b/gyro_board/src/usb/FreeRTOS/include/croutine.h
new file mode 100644
index 0000000..bcedb26
--- /dev/null
+++ b/gyro_board/src/usb/FreeRTOS/include/croutine.h
@@ -0,0 +1,749 @@
+/*
+ FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.
+
+ ***************************************************************************
+ * *
+ * If you are: *
+ * *
+ * + New to FreeRTOS, *
+ * + Wanting to learn FreeRTOS or multitasking in general quickly *
+ * + Looking for basic training, *
+ * + Wanting to improve your FreeRTOS skills and productivity *
+ * *
+ * then take a look at the FreeRTOS eBook *
+ * *
+ * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
+ * http://www.FreeRTOS.org/Documentation *
+ * *
+ * A pdf reference manual is also available. Both are usually delivered *
+ * to your inbox within 20 minutes to two hours when purchased between 8am *
+ * and 8pm GMT (although please allow up to 24 hours in case of *
+ * exceptional circumstances). Thank you for your support! *
+ * *
+ ***************************************************************************
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
+ ***NOTE*** The exception to the GPL is included to allow you to distribute
+ a combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details. You should have received a copy of the GNU General Public
+ License and the FreeRTOS license exception along with FreeRTOS; if not it
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained
+ by writing to Richard Barry, contact details for whom are available on the
+ FreeRTOS WEB site.
+
+ 1 tab == 4 spaces!
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef INC_FREERTOS_H
+#error "#include FreeRTOS.h" must appear in source files before "#include croutine.h"
+#endif
+
+
+
+
+#ifndef CO_ROUTINE_H
+#define CO_ROUTINE_H
+
+#include "list.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+ /* Used to hide the implementation of the co-routine control block. The
+ control block structure however has to be included in the header due to
+ the macro implementation of the co-routine functionality. */
+ typedef void * xCoRoutineHandle;
+
+ /* Defines the prototype to which co-routine functions must conform. */
+ typedef void (*crCOROUTINE_CODE)(xCoRoutineHandle, unsigned portBASE_TYPE);
+
+ typedef struct corCoRoutineControlBlock {
+ crCOROUTINE_CODE pxCoRoutineFunction;
+ xListItem xGenericListItem; /*< List item used to place the CRCB in ready and blocked queues. */
+ xListItem xEventListItem; /*< List item used to place the CRCB in event lists. */
+ unsigned portBASE_TYPE uxPriority; /*< The priority of the co-routine in relation to other co-routines. */
+ unsigned portBASE_TYPE uxIndex; /*< Used to distinguish between co-routines when multiple co-routines use the same co-routine function. */
+ unsigned short uxState; /*< Used internally by the co-routine implementation. */
+ } corCRCB; /* Co-routine control block. Note must be identical in size down to uxPriority with tskTCB. */
+
+ /**
+ * croutine. h
+ *<pre>
+ portBASE_TYPE xCoRoutineCreate(
+ crCOROUTINE_CODE pxCoRoutineCode,
+ unsigned portBASE_TYPE uxPriority,
+ unsigned portBASE_TYPE uxIndex
+ );</pre>
+ *
+ * Create a new co-routine and add it to the list of co-routines that are
+ * ready to run.
+ *
+ * @param pxCoRoutineCode Pointer to the co-routine function. Co-routine
+ * functions require special syntax - see the co-routine section of the WEB
+ * documentation for more information.
+ *
+ * @param uxPriority The priority with respect to other co-routines at which
+ * the co-routine will run.
+ *
+ * @param uxIndex Used to distinguish between different co-routines that
+ * execute the same function. See the example below and the co-routine section
+ * of the WEB documentation for further information.
+ *
+ * @return pdPASS if the co-routine was successfully created and added to a ready
+ * list, otherwise an error code defined with ProjDefs.h.
+ *
+ * Example usage:
+ <pre>
+ // Co-routine to be created.
+ void vFlashCoRoutine( xCoRoutineHandle xHandle, unsigned portBASE_TYPE uxIndex )
+ {
+ // Variables in co-routines must be declared static if they must maintain value across a blocking call.
+ // This may not be necessary for const variables.
+ static const char cLedToFlash[ 2 ] = { 5, 6 };
+ static const portTickType uxFlashRates[ 2 ] = { 200, 400 };
+
+ // Must start every co-routine with a call to crSTART();
+ crSTART( xHandle );
+
+ for( ;; )
+ {
+ // This co-routine just delays for a fixed period, then toggles
+ // an LED. Two co-routines are created using this function, so
+ // the uxIndex parameter is used to tell the co-routine which
+ // LED to flash and how long to delay. This assumes xQueue has
+ // already been created.
+ vParTestToggleLED( cLedToFlash[ uxIndex ] );
+ crDELAY( xHandle, uxFlashRates[ uxIndex ] );
+ }
+
+ // Must end every co-routine with a call to crEND();
+ crEND();
+ }
+
+ // Function that creates two co-routines.
+ void vOtherFunction( void )
+ {
+ unsigned char ucParameterToPass;
+ xTaskHandle xHandle;
+
+ // Create two co-routines at priority 0. The first is given index 0
+ // so (from the code above) toggles LED 5 every 200 ticks. The second
+ // is given index 1 so toggles LED 6 every 400 ticks.
+ for( uxIndex = 0; uxIndex < 2; uxIndex++ )
+ {
+ xCoRoutineCreate( vFlashCoRoutine, 0, uxIndex );
+ }
+ }
+ </pre>
+ * \defgroup xCoRoutineCreate xCoRoutineCreate
+ * \ingroup Tasks
+ */
+ signed portBASE_TYPE xCoRoutineCreate(crCOROUTINE_CODE pxCoRoutineCode, unsigned portBASE_TYPE uxPriority, unsigned portBASE_TYPE uxIndex);
+
+
+ /**
+ * croutine. h
+ *<pre>
+ void vCoRoutineSchedule( void );</pre>
+ *
+ * Run a co-routine.
+ *
+ * vCoRoutineSchedule() executes the highest priority co-routine that is able
+ * to run. The co-routine will execute until it either blocks, yields or is
+ * preempted by a task. Co-routines execute cooperatively so one
+ * co-routine cannot be preempted by another, but can be preempted by a task.
+ *
+ * If an application comprises of both tasks and co-routines then
+ * vCoRoutineSchedule should be called from the idle task (in an idle task
+ * hook).
+ *
+ * Example usage:
+ <pre>
+ // This idle task hook will schedule a co-routine each time it is called.
+ // The rest of the idle task will execute between co-routine calls.
+ void vApplicationIdleHook( void )
+ {
+ vCoRoutineSchedule();
+ }
+
+ // Alternatively, if you do not require any other part of the idle task to
+ // execute, the idle task hook can call vCoRoutineScheduler() within an
+ // infinite loop.
+ void vApplicationIdleHook( void )
+ {
+ for( ;; )
+ {
+ vCoRoutineSchedule();
+ }
+ }
+ </pre>
+ * \defgroup vCoRoutineSchedule vCoRoutineSchedule
+ * \ingroup Tasks
+ */
+ void vCoRoutineSchedule(void);
+
+ /**
+ * croutine. h
+ * <pre>
+ crSTART( xCoRoutineHandle xHandle );</pre>
+ *
+ * This macro MUST always be called at the start of a co-routine function.
+ *
+ * Example usage:
+ <pre>
+ // Co-routine to be created.
+ void vACoRoutine( xCoRoutineHandle xHandle, unsigned portBASE_TYPE uxIndex )
+ {
+ // Variables in co-routines must be declared static if they must maintain value across a blocking call.
+ static long ulAVariable;
+
+ // Must start every co-routine with a call to crSTART();
+ crSTART( xHandle );
+
+ for( ;; )
+ {
+ // Co-routine functionality goes here.
+ }
+
+ // Must end every co-routine with a call to crEND();
+ crEND();
+ }</pre>
+ * \defgroup crSTART crSTART
+ * \ingroup Tasks
+ */
+#define crSTART( pxCRCB ) switch( ( ( corCRCB * )pxCRCB )->uxState ) { case 0:
+
+ /**
+ * croutine. h
+ * <pre>
+ crEND();</pre>
+ *
+ * This macro MUST always be called at the end of a co-routine function.
+ *
+ * Example usage:
+ <pre>
+ // Co-routine to be created.
+ void vACoRoutine( xCoRoutineHandle xHandle, unsigned portBASE_TYPE uxIndex )
+ {
+ // Variables in co-routines must be declared static if they must maintain value across a blocking call.
+ static long ulAVariable;
+
+ // Must start every co-routine with a call to crSTART();
+ crSTART( xHandle );
+
+ for( ;; )
+ {
+ // Co-routine functionality goes here.
+ }
+
+ // Must end every co-routine with a call to crEND();
+ crEND();
+ }</pre>
+ * \defgroup crSTART crSTART
+ * \ingroup Tasks
+ */
+#define crEND() }
+
+ /*
+ * These macros are intended for internal use by the co-routine implementation
+ * only. The macros should not be used directly by application writers.
+ */
+#define crSET_STATE0( xHandle ) ( ( corCRCB * )xHandle)->uxState = (__LINE__ * 2); return; case (__LINE__ * 2):
+#define crSET_STATE1( xHandle ) ( ( corCRCB * )xHandle)->uxState = ((__LINE__ * 2)+1); return; case ((__LINE__ * 2)+1):
+
+ /**
+ * croutine. h
+ *<pre>
+ crDELAY( xCoRoutineHandle xHandle, portTickType xTicksToDelay );</pre>
+ *
+ * Delay a co-routine for a fixed period of time.
+ *
+ * crDELAY can only be called from the co-routine function itself - not
+ * from within a function called by the co-routine function. This is because
+ * co-routines do not maintain their own stack.
+ *
+ * @param xHandle The handle of the co-routine to delay. This is the xHandle
+ * parameter of the co-routine function.
+ *
+ * @param xTickToDelay The number of ticks that the co-routine should delay
+ * for. The actual amount of time this equates to is defined by
+ * configTICK_RATE_HZ (set in FreeRTOSConfig.h). The constant portTICK_RATE_MS
+ * can be used to convert ticks to milliseconds.
+ *
+ * Example usage:
+ <pre>
+ // Co-routine to be created.
+ void vACoRoutine( xCoRoutineHandle xHandle, unsigned portBASE_TYPE uxIndex )
+ {
+ // Variables in co-routines must be declared static if they must maintain value across a blocking call.
+ // This may not be necessary for const variables.
+ // We are to delay for 200ms.
+ static const xTickType xDelayTime = 200 / portTICK_RATE_MS;
+
+ // Must start every co-routine with a call to crSTART();
+ crSTART( xHandle );
+
+ for( ;; )
+ {
+ // Delay for 200ms.
+ crDELAY( xHandle, xDelayTime );
+
+ // Do something here.
+ }
+
+ // Must end every co-routine with a call to crEND();
+ crEND();
+ }</pre>
+ * \defgroup crDELAY crDELAY
+ * \ingroup Tasks
+ */
+#define crDELAY( xHandle, xTicksToDelay ) \
+ if( xTicksToDelay > 0 ) \
+ { \
+ vCoRoutineAddToDelayedList( xTicksToDelay, NULL ); \
+ } \
+ crSET_STATE0( xHandle );
+
+ /**
+ * <pre>
+ crQUEUE_SEND(
+ xCoRoutineHandle xHandle,
+ xQueueHandle pxQueue,
+ void *pvItemToQueue,
+ portTickType xTicksToWait,
+ portBASE_TYPE *pxResult
+ )</pre>
+ *
+ * The macro's crQUEUE_SEND() and crQUEUE_RECEIVE() are the co-routine
+ * equivalent to the xQueueSend() and xQueueReceive() functions used by tasks.
+ *
+ * crQUEUE_SEND and crQUEUE_RECEIVE can only be used from a co-routine whereas
+ * xQueueSend() and xQueueReceive() can only be used from tasks.
+ *
+ * crQUEUE_SEND can only be called from the co-routine function itself - not
+ * from within a function called by the co-routine function. This is because
+ * co-routines do not maintain their own stack.
+ *
+ * See the co-routine section of the WEB documentation for information on
+ * passing data between tasks and co-routines and between ISR's and
+ * co-routines.
+ *
+ * @param xHandle The handle of the calling co-routine. This is the xHandle
+ * parameter of the co-routine function.
+ *
+ * @param pxQueue The handle of the queue on which the data will be posted.
+ * The handle is obtained as the return value when the queue is created using
+ * the xQueueCreate() API function.
+ *
+ * @param pvItemToQueue A pointer to the data being posted onto the queue.
+ * The number of bytes of each queued item is specified when the queue is
+ * created. This number of bytes is copied from pvItemToQueue into the queue
+ * itself.
+ *
+ * @param xTickToDelay The number of ticks that the co-routine should block
+ * to wait for space to become available on the queue, should space not be
+ * available immediately. The actual amount of time this equates to is defined
+ * by configTICK_RATE_HZ (set in FreeRTOSConfig.h). The constant
+ * portTICK_RATE_MS can be used to convert ticks to milliseconds (see example
+ * below).
+ *
+ * @param pxResult The variable pointed to by pxResult will be set to pdPASS if
+ * data was successfully posted onto the queue, otherwise it will be set to an
+ * error defined within ProjDefs.h.
+ *
+ * Example usage:
+ <pre>
+ // Co-routine function that blocks for a fixed period then posts a number onto
+ // a queue.
+ static void prvCoRoutineFlashTask( xCoRoutineHandle xHandle, unsigned portBASE_TYPE uxIndex )
+ {
+ // Variables in co-routines must be declared static if they must maintain value across a blocking call.
+ static portBASE_TYPE xNumberToPost = 0;
+ static portBASE_TYPE xResult;
+
+ // Co-routines must begin with a call to crSTART().
+ crSTART( xHandle );
+
+ for( ;; )
+ {
+ // This assumes the queue has already been created.
+ crQUEUE_SEND( xHandle, xCoRoutineQueue, &xNumberToPost, NO_DELAY, &xResult );
+
+ if( xResult != pdPASS )
+ {
+ // The message was not posted!
+ }
+
+ // Increment the number to be posted onto the queue.
+ xNumberToPost++;
+
+ // Delay for 100 ticks.
+ crDELAY( xHandle, 100 );
+ }
+
+ // Co-routines must end with a call to crEND().
+ crEND();
+ }</pre>
+ * \defgroup crQUEUE_SEND crQUEUE_SEND
+ * \ingroup Tasks
+ */
+#define crQUEUE_SEND( xHandle, pxQueue, pvItemToQueue, xTicksToWait, pxResult ) \
+{ \
+ *pxResult = xQueueCRSend( pxQueue, pvItemToQueue, xTicksToWait ); \
+ if( *pxResult == errQUEUE_BLOCKED ) \
+ { \
+ crSET_STATE0( xHandle ); \
+ *pxResult = xQueueCRSend( pxQueue, pvItemToQueue, 0 ); \
+ } \
+ if( *pxResult == errQUEUE_YIELD ) \
+ { \
+ crSET_STATE1( xHandle ); \
+ *pxResult = pdPASS; \
+ } \
+}
+
+ /**
+ * croutine. h
+ * <pre>
+ crQUEUE_RECEIVE(
+ xCoRoutineHandle xHandle,
+ xQueueHandle pxQueue,
+ void *pvBuffer,
+ portTickType xTicksToWait,
+ portBASE_TYPE *pxResult
+ )</pre>
+ *
+ * The macro's crQUEUE_SEND() and crQUEUE_RECEIVE() are the co-routine
+ * equivalent to the xQueueSend() and xQueueReceive() functions used by tasks.
+ *
+ * crQUEUE_SEND and crQUEUE_RECEIVE can only be used from a co-routine whereas
+ * xQueueSend() and xQueueReceive() can only be used from tasks.
+ *
+ * crQUEUE_RECEIVE can only be called from the co-routine function itself - not
+ * from within a function called by the co-routine function. This is because
+ * co-routines do not maintain their own stack.
+ *
+ * See the co-routine section of the WEB documentation for information on
+ * passing data between tasks and co-routines and between ISR's and
+ * co-routines.
+ *
+ * @param xHandle The handle of the calling co-routine. This is the xHandle
+ * parameter of the co-routine function.
+ *
+ * @param pxQueue The handle of the queue from which the data will be received.
+ * The handle is obtained as the return value when the queue is created using
+ * the xQueueCreate() API function.
+ *
+ * @param pvBuffer The buffer into which the received item is to be copied.
+ * The number of bytes of each queued item is specified when the queue is
+ * created. This number of bytes is copied into pvBuffer.
+ *
+ * @param xTickToDelay The number of ticks that the co-routine should block
+ * to wait for data to become available from the queue, should data not be
+ * available immediately. The actual amount of time this equates to is defined
+ * by configTICK_RATE_HZ (set in FreeRTOSConfig.h). The constant
+ * portTICK_RATE_MS can be used to convert ticks to milliseconds (see the
+ * crQUEUE_SEND example).
+ *
+ * @param pxResult The variable pointed to by pxResult will be set to pdPASS if
+ * data was successfully retrieved from the queue, otherwise it will be set to
+ * an error code as defined within ProjDefs.h.
+ *
+ * Example usage:
+ <pre>
+ // A co-routine receives the number of an LED to flash from a queue. It
+ // blocks on the queue until the number is received.
+ static void prvCoRoutineFlashWorkTask( xCoRoutineHandle xHandle, unsigned portBASE_TYPE uxIndex )
+ {
+ // Variables in co-routines must be declared static if they must maintain value across a blocking call.
+ static portBASE_TYPE xResult;
+ static unsigned portBASE_TYPE uxLEDToFlash;
+
+ // All co-routines must start with a call to crSTART().
+ crSTART( xHandle );
+
+ for( ;; )
+ {
+ // Wait for data to become available on the queue.
+ crQUEUE_RECEIVE( xHandle, xCoRoutineQueue, &uxLEDToFlash, portMAX_DELAY, &xResult );
+
+ if( xResult == pdPASS )
+ {
+ // We received the LED to flash - flash it!
+ vParTestToggleLED( uxLEDToFlash );
+ }
+ }
+
+ crEND();
+ }</pre>
+ * \defgroup crQUEUE_RECEIVE crQUEUE_RECEIVE
+ * \ingroup Tasks
+ */
+#define crQUEUE_RECEIVE( xHandle, pxQueue, pvBuffer, xTicksToWait, pxResult ) \
+{ \
+ *pxResult = xQueueCRReceive( pxQueue, pvBuffer, xTicksToWait ); \
+ if( *pxResult == errQUEUE_BLOCKED ) \
+ { \
+ crSET_STATE0( xHandle ); \
+ *pxResult = xQueueCRReceive( pxQueue, pvBuffer, 0 ); \
+ } \
+ if( *pxResult == errQUEUE_YIELD ) \
+ { \
+ crSET_STATE1( xHandle ); \
+ *pxResult = pdPASS; \
+ } \
+}
+
+ /**
+ * croutine. h
+ * <pre>
+ crQUEUE_SEND_FROM_ISR(
+ xQueueHandle pxQueue,
+ void *pvItemToQueue,
+ portBASE_TYPE xCoRoutinePreviouslyWoken
+ )</pre>
+ *
+ * The macro's crQUEUE_SEND_FROM_ISR() and crQUEUE_RECEIVE_FROM_ISR() are the
+ * co-routine equivalent to the xQueueSendFromISR() and xQueueReceiveFromISR()
+ * functions used by tasks.
+ *
+ * crQUEUE_SEND_FROM_ISR() and crQUEUE_RECEIVE_FROM_ISR() can only be used to
+ * pass data between a co-routine and and ISR, whereas xQueueSendFromISR() and
+ * xQueueReceiveFromISR() can only be used to pass data between a task and and
+ * ISR.
+ *
+ * crQUEUE_SEND_FROM_ISR can only be called from an ISR to send data to a queue
+ * that is being used from within a co-routine.
+ *
+ * See the co-routine section of the WEB documentation for information on
+ * passing data between tasks and co-routines and between ISR's and
+ * co-routines.
+ *
+ * @param xQueue The handle to the queue on which the item is to be posted.
+ *
+ * @param pvItemToQueue A pointer to the item that is to be placed on the
+ * queue. The size of the items the queue will hold was defined when the
+ * queue was created, so this many bytes will be copied from pvItemToQueue
+ * into the queue storage area.
+ *
+ * @param xCoRoutinePreviouslyWoken This is included so an ISR can post onto
+ * the same queue multiple times from a single interrupt. The first call
+ * should always pass in pdFALSE. Subsequent calls should pass in
+ * the value returned from the previous call.
+ *
+ * @return pdTRUE if a co-routine was woken by posting onto the queue. This is
+ * used by the ISR to determine if a context switch may be required following
+ * the ISR.
+ *
+ * Example usage:
+ <pre>
+ // A co-routine that blocks on a queue waiting for characters to be received.
+ static void vReceivingCoRoutine( xCoRoutineHandle xHandle, unsigned portBASE_TYPE uxIndex )
+ {
+ char cRxedChar;
+ portBASE_TYPE xResult;
+
+ // All co-routines must start with a call to crSTART().
+ crSTART( xHandle );
+
+ for( ;; )
+ {
+ // Wait for data to become available on the queue. This assumes the
+ // queue xCommsRxQueue has already been created!
+ crQUEUE_RECEIVE( xHandle, xCommsRxQueue, &uxLEDToFlash, portMAX_DELAY, &xResult );
+
+ // Was a character received?
+ if( xResult == pdPASS )
+ {
+ // Process the character here.
+ }
+ }
+
+ // All co-routines must end with a call to crEND().
+ crEND();
+ }
+
+ // An ISR that uses a queue to send characters received on a serial port to
+ // a co-routine.
+ void vUART_ISR( void )
+ {
+ char cRxedChar;
+ portBASE_TYPE xCRWokenByPost = pdFALSE;
+
+ // We loop around reading characters until there are none left in the UART.
+ while( UART_RX_REG_NOT_EMPTY() )
+ {
+ // Obtain the character from the UART.
+ cRxedChar = UART_RX_REG;
+
+ // Post the character onto a queue. xCRWokenByPost will be pdFALSE
+ // the first time around the loop. If the post causes a co-routine
+ // to be woken (unblocked) then xCRWokenByPost will be set to pdTRUE.
+ // In this manner we can ensure that if more than one co-routine is
+ // blocked on the queue only one is woken by this ISR no matter how
+ // many characters are posted to the queue.
+ xCRWokenByPost = crQUEUE_SEND_FROM_ISR( xCommsRxQueue, &cRxedChar, xCRWokenByPost );
+ }
+ }</pre>
+ * \defgroup crQUEUE_SEND_FROM_ISR crQUEUE_SEND_FROM_ISR
+ * \ingroup Tasks
+ */
+#define crQUEUE_SEND_FROM_ISR( pxQueue, pvItemToQueue, xCoRoutinePreviouslyWoken ) xQueueCRSendFromISR( pxQueue, pvItemToQueue, xCoRoutinePreviouslyWoken )
+
+
+ /**
+ * croutine. h
+ * <pre>
+ crQUEUE_SEND_FROM_ISR(
+ xQueueHandle pxQueue,
+ void *pvBuffer,
+ portBASE_TYPE * pxCoRoutineWoken
+ )</pre>
+ *
+ * The macro's crQUEUE_SEND_FROM_ISR() and crQUEUE_RECEIVE_FROM_ISR() are the
+ * co-routine equivalent to the xQueueSendFromISR() and xQueueReceiveFromISR()
+ * functions used by tasks.
+ *
+ * crQUEUE_SEND_FROM_ISR() and crQUEUE_RECEIVE_FROM_ISR() can only be used to
+ * pass data between a co-routine and and ISR, whereas xQueueSendFromISR() and
+ * xQueueReceiveFromISR() can only be used to pass data between a task and and
+ * ISR.
+ *
+ * crQUEUE_RECEIVE_FROM_ISR can only be called from an ISR to receive data
+ * from a queue that is being used from within a co-routine (a co-routine
+ * posted to the queue).
+ *
+ * See the co-routine section of the WEB documentation for information on
+ * passing data between tasks and co-routines and between ISR's and
+ * co-routines.
+ *
+ * @param xQueue The handle to the queue on which the item is to be posted.
+ *
+ * @param pvBuffer A pointer to a buffer into which the received item will be
+ * placed. The size of the items the queue will hold was defined when the
+ * queue was created, so this many bytes will be copied from the queue into
+ * pvBuffer.
+ *
+ * @param pxCoRoutineWoken A co-routine may be blocked waiting for space to become
+ * available on the queue. If crQUEUE_RECEIVE_FROM_ISR causes such a
+ * co-routine to unblock *pxCoRoutineWoken will get set to pdTRUE, otherwise
+ * *pxCoRoutineWoken will remain unchanged.
+ *
+ * @return pdTRUE an item was successfully received from the queue, otherwise
+ * pdFALSE.
+ *
+ * Example usage:
+ <pre>
+ // A co-routine that posts a character to a queue then blocks for a fixed
+ // period. The character is incremented each time.
+ static void vSendingCoRoutine( xCoRoutineHandle xHandle, unsigned portBASE_TYPE uxIndex )
+ {
+ // cChar holds its value while this co-routine is blocked and must therefore
+ // be declared static.
+ static char cCharToTx = 'a';
+ portBASE_TYPE xResult;
+
+ // All co-routines must start with a call to crSTART().
+ crSTART( xHandle );
+
+ for( ;; )
+ {
+ // Send the next character to the queue.
+ crQUEUE_SEND( xHandle, xCoRoutineQueue, &cCharToTx, NO_DELAY, &xResult );
+
+ if( xResult == pdPASS )
+ {
+ // The character was successfully posted to the queue.
+ }
+ else
+ {
+ // Could not post the character to the queue.
+ }
+
+ // Enable the UART Tx interrupt to cause an interrupt in this
+ // hypothetical UART. The interrupt will obtain the character
+ // from the queue and send it.
+ ENABLE_RX_INTERRUPT();
+
+ // Increment to the next character then block for a fixed period.
+ // cCharToTx will maintain its value across the delay as it is
+ // declared static.
+ cCharToTx++;
+ if( cCharToTx > 'x' )
+ {
+ cCharToTx = 'a';
+ }
+ crDELAY( 100 );
+ }
+
+ // All co-routines must end with a call to crEND().
+ crEND();
+ }
+
+ // An ISR that uses a queue to receive characters to send on a UART.
+ void vUART_ISR( void )
+ {
+ char cCharToTx;
+ portBASE_TYPE xCRWokenByPost = pdFALSE;
+
+ while( UART_TX_REG_EMPTY() )
+ {
+ // Are there any characters in the queue waiting to be sent?
+ // xCRWokenByPost will automatically be set to pdTRUE if a co-routine
+ // is woken by the post - ensuring that only a single co-routine is
+ // woken no matter how many times we go around this loop.
+ if( crQUEUE_RECEIVE_FROM_ISR( pxQueue, &cCharToTx, &xCRWokenByPost ) )
+ {
+ SEND_CHARACTER( cCharToTx );
+ }
+ }
+ }</pre>
+ * \defgroup crQUEUE_RECEIVE_FROM_ISR crQUEUE_RECEIVE_FROM_ISR
+ * \ingroup Tasks
+ */
+#define crQUEUE_RECEIVE_FROM_ISR( pxQueue, pvBuffer, pxCoRoutineWoken ) xQueueCRReceiveFromISR( pxQueue, pvBuffer, pxCoRoutineWoken )
+
+ /*
+ * This function is intended for internal use by the co-routine macros only.
+ * The macro nature of the co-routine implementation requires that the
+ * prototype appears here. The function should not be used by application
+ * writers.
+ *
+ * Removes the current co-routine from its ready list and places it in the
+ * appropriate delayed list.
+ */
+ void vCoRoutineAddToDelayedList(portTickType xTicksToDelay, xList *pxEventList);
+
+ /*
+ * This function is intended for internal use by the queue implementation only.
+ * The function should not be used by application writers.
+ *
+ * Removes the highest priority co-routine from the event list and places it in
+ * the pending ready list.
+ */
+ signed portBASE_TYPE xCoRoutineRemoveFromEventList(const xList *pxEventList);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* CO_ROUTINE_H */
diff --git a/gyro_board/src/usb/FreeRTOS/include/list.h b/gyro_board/src/usb/FreeRTOS/include/list.h
new file mode 100644
index 0000000..5299ec9
--- /dev/null
+++ b/gyro_board/src/usb/FreeRTOS/include/list.h
@@ -0,0 +1,303 @@
+/*
+ FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.
+
+ ***************************************************************************
+ * *
+ * If you are: *
+ * *
+ * + New to FreeRTOS, *
+ * + Wanting to learn FreeRTOS or multitasking in general quickly *
+ * + Looking for basic training, *
+ * + Wanting to improve your FreeRTOS skills and productivity *
+ * *
+ * then take a look at the FreeRTOS eBook *
+ * *
+ * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
+ * http://www.FreeRTOS.org/Documentation *
+ * *
+ * A pdf reference manual is also available. Both are usually delivered *
+ * to your inbox within 20 minutes to two hours when purchased between 8am *
+ * and 8pm GMT (although please allow up to 24 hours in case of *
+ * exceptional circumstances). Thank you for your support! *
+ * *
+ ***************************************************************************
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
+ ***NOTE*** The exception to the GPL is included to allow you to distribute
+ a combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details. You should have received a copy of the GNU General Public
+ License and the FreeRTOS license exception along with FreeRTOS; if not it
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained
+ by writing to Richard Barry, contact details for whom are available on the
+ FreeRTOS WEB site.
+
+ 1 tab == 4 spaces!
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+/*
+ * This is the list implementation used by the scheduler. While it is tailored
+ * heavily for the schedulers needs, it is also available for use by
+ * application code.
+ *
+ * xLists can only store pointers to xListItems. Each xListItem contains a
+ * numeric value (xItemValue). Most of the time the lists are sorted in
+ * descending item value order.
+ *
+ * Lists are created already containing one list item. The value of this
+ * item is the maximum possible that can be stored, it is therefore always at
+ * the end of the list and acts as a marker. The list member pxHead always
+ * points to this marker - even though it is at the tail of the list. This
+ * is because the tail contains a wrap back pointer to the true head of
+ * the list.
+ *
+ * In addition to it's value, each list item contains a pointer to the next
+ * item in the list (pxNext), a pointer to the list it is in (pxContainer)
+ * and a pointer to back to the object that contains it. These later two
+ * pointers are included for efficiency of list manipulation. There is
+ * effectively a two way link between the object containing the list item and
+ * the list item itself.
+ *
+ *
+ * \page ListIntroduction List Implementation
+ * \ingroup FreeRTOSIntro
+ */
+
+/*
+ Changes from V4.3.1
+
+ + Included local const within listGET_OWNER_OF_NEXT_ENTRY() to assist
+ compiler with optimisation. Thanks B.R.
+*/
+
+#ifndef LIST_H
+#define LIST_H
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+ /*
+ * Definition of the only type of object that a list can contain.
+ */
+ struct xLIST_ITEM {
+ portTickType xItemValue; /*< The value being listed. In most cases this is used to sort the list in descending order. */
+ volatile struct xLIST_ITEM * pxNext; /*< Pointer to the next xListItem in the list. */
+ volatile struct xLIST_ITEM * pxPrevious;/*< Pointer to the previous xListItem in the list. */
+ void * pvOwner; /*< Pointer to the object (normally a TCB) that contains the list item. There is therefore a two way link between the object containing the list item and the list item itself. */
+ void * pvContainer; /*< Pointer to the list in which this list item is placed (if any). */
+ };
+ typedef struct xLIST_ITEM xListItem; /* For some reason lint wants this as two separate definitions. */
+
+ struct xMINI_LIST_ITEM {
+ portTickType xItemValue;
+ volatile struct xLIST_ITEM *pxNext;
+ volatile struct xLIST_ITEM *pxPrevious;
+ };
+ typedef struct xMINI_LIST_ITEM xMiniListItem;
+
+ /*
+ * Definition of the type of queue used by the scheduler.
+ */
+ typedef struct xLIST {
+ volatile unsigned portBASE_TYPE uxNumberOfItems;
+ volatile xListItem * pxIndex; /*< Used to walk through the list. Points to the last item returned by a call to pvListGetOwnerOfNextEntry (). */
+ volatile xMiniListItem xListEnd; /*< List item that contains the maximum possible item value meaning it is always at the end of the list and is therefore used as a marker. */
+ } xList;
+
+ /*
+ * Access macro to set the owner of a list item. The owner of a list item
+ * is the object (usually a TCB) that contains the list item.
+ *
+ * \page listSET_LIST_ITEM_OWNER listSET_LIST_ITEM_OWNER
+ * \ingroup LinkedList
+ */
+#define listSET_LIST_ITEM_OWNER( pxListItem, pxOwner ) ( pxListItem )->pvOwner = ( void * ) pxOwner
+
+ /*
+ * Access macro to set the value of the list item. In most cases the value is
+ * used to sort the list in descending order.
+ *
+ * \page listSET_LIST_ITEM_VALUE listSET_LIST_ITEM_VALUE
+ * \ingroup LinkedList
+ */
+#define listSET_LIST_ITEM_VALUE( pxListItem, xValue ) ( pxListItem )->xItemValue = xValue
+
+ /*
+ * Access macro the retrieve the value of the list item. The value can
+ * represent anything - for example a the priority of a task, or the time at
+ * which a task should be unblocked.
+ *
+ * \page listGET_LIST_ITEM_VALUE listGET_LIST_ITEM_VALUE
+ * \ingroup LinkedList
+ */
+#define listGET_LIST_ITEM_VALUE( pxListItem ) ( ( pxListItem )->xItemValue )
+
+ /*
+ * Access macro to determine if a list contains any items. The macro will
+ * only have the value true if the list is empty.
+ *
+ * \page listLIST_IS_EMPTY listLIST_IS_EMPTY
+ * \ingroup LinkedList
+ */
+#define listLIST_IS_EMPTY( pxList ) ( ( pxList )->uxNumberOfItems == ( unsigned portBASE_TYPE ) 0 )
+
+ /*
+ * Access macro to return the number of items in the list.
+ */
+#define listCURRENT_LIST_LENGTH( pxList ) ( ( pxList )->uxNumberOfItems )
+
+ /*
+ * Access function to obtain the owner of the next entry in a list.
+ *
+ * The list member pxIndex is used to walk through a list. Calling
+ * listGET_OWNER_OF_NEXT_ENTRY increments pxIndex to the next item in the list
+ * and returns that entries pxOwner parameter. Using multiple calls to this
+ * function it is therefore possible to move through every item contained in
+ * a list.
+ *
+ * The pxOwner parameter of a list item is a pointer to the object that owns
+ * the list item. In the scheduler this is normally a task control block.
+ * The pxOwner parameter effectively creates a two way link between the list
+ * item and its owner.
+ *
+ * @param pxList The list from which the next item owner is to be returned.
+ *
+ * \page listGET_OWNER_OF_NEXT_ENTRY listGET_OWNER_OF_NEXT_ENTRY
+ * \ingroup LinkedList
+ */
+#define listGET_OWNER_OF_NEXT_ENTRY( pxTCB, pxList ) \
+{ \
+xList * const pxConstList = pxList; \
+ /* Increment the index to the next item and return the item, ensuring */ \
+ /* we don't return the marker used at the end of the list. */ \
+ ( pxConstList )->pxIndex = ( pxConstList )->pxIndex->pxNext; \
+ if( ( pxConstList )->pxIndex == ( xListItem * ) &( ( pxConstList )->xListEnd ) ) \
+ { \
+ ( pxConstList )->pxIndex = ( pxConstList )->pxIndex->pxNext; \
+ } \
+ pxTCB = ( pxConstList )->pxIndex->pvOwner; \
+}
+
+
+ /*
+ * Access function to obtain the owner of the first entry in a list. Lists
+ * are normally sorted in ascending item value order.
+ *
+ * This function returns the pxOwner member of the first item in the list.
+ * The pxOwner parameter of a list item is a pointer to the object that owns
+ * the list item. In the scheduler this is normally a task control block.
+ * The pxOwner parameter effectively creates a two way link between the list
+ * item and its owner.
+ *
+ * @param pxList The list from which the owner of the head item is to be
+ * returned.
+ *
+ * \page listGET_OWNER_OF_HEAD_ENTRY listGET_OWNER_OF_HEAD_ENTRY
+ * \ingroup LinkedList
+ */
+#define listGET_OWNER_OF_HEAD_ENTRY( pxList ) ( ( pxList->uxNumberOfItems != ( unsigned portBASE_TYPE ) 0 ) ? ( (&( pxList->xListEnd ))->pxNext->pvOwner ) : ( NULL ) )
+
+ /*
+ * Check to see if a list item is within a list. The list item maintains a
+ * "container" pointer that points to the list it is in. All this macro does
+ * is check to see if the container and the list match.
+ *
+ * @param pxList The list we want to know if the list item is within.
+ * @param pxListItem The list item we want to know if is in the list.
+ * @return pdTRUE is the list item is in the list, otherwise pdFALSE.
+ * pointer against
+ */
+#define listIS_CONTAINED_WITHIN( pxList, pxListItem ) ( ( pxListItem )->pvContainer == ( void * ) pxList )
+
+ /*
+ * Must be called before a list is used! This initialises all the members
+ * of the list structure and inserts the xListEnd item into the list as a
+ * marker to the back of the list.
+ *
+ * @param pxList Pointer to the list being initialised.
+ *
+ * \page vListInitialise vListInitialise
+ * \ingroup LinkedList
+ */
+ void vListInitialise(xList *pxList);
+
+ /*
+ * Must be called before a list item is used. This sets the list container to
+ * null so the item does not think that it is already contained in a list.
+ *
+ * @param pxItem Pointer to the list item being initialised.
+ *
+ * \page vListInitialiseItem vListInitialiseItem
+ * \ingroup LinkedList
+ */
+ void vListInitialiseItem(xListItem *pxItem);
+
+ /*
+ * Insert a list item into a list. The item will be inserted into the list in
+ * a position determined by its item value (descending item value order).
+ *
+ * @param pxList The list into which the item is to be inserted.
+ *
+ * @param pxNewListItem The item to that is to be placed in the list.
+ *
+ * \page vListInsert vListInsert
+ * \ingroup LinkedList
+ */
+ void vListInsert(xList *pxList, xListItem *pxNewListItem);
+
+ /*
+ * Insert a list item into a list. The item will be inserted in a position
+ * such that it will be the last item within the list returned by multiple
+ * calls to listGET_OWNER_OF_NEXT_ENTRY.
+ *
+ * The list member pvIndex is used to walk through a list. Calling
+ * listGET_OWNER_OF_NEXT_ENTRY increments pvIndex to the next item in the list.
+ * Placing an item in a list using vListInsertEnd effectively places the item
+ * in the list position pointed to by pvIndex. This means that every other
+ * item within the list will be returned by listGET_OWNER_OF_NEXT_ENTRY before
+ * the pvIndex parameter again points to the item being inserted.
+ *
+ * @param pxList The list into which the item is to be inserted.
+ *
+ * @param pxNewListItem The list item to be inserted into the list.
+ *
+ * \page vListInsertEnd vListInsertEnd
+ * \ingroup LinkedList
+ */
+ void vListInsertEnd(xList *pxList, xListItem *pxNewListItem);
+
+ /*
+ * Remove an item from a list. The list item has a pointer to the list that
+ * it is in, so only the list item need be passed into the function.
+ *
+ * @param vListRemove The item to be removed. The item will remove itself from
+ * the list pointed to by it's pxContainer parameter.
+ *
+ * \page vListRemove vListRemove
+ * \ingroup LinkedList
+ */
+ void vListRemove(xListItem *pxItemToRemove);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
diff --git a/gyro_board/src/usb/FreeRTOS/include/mpu_wrappers.h b/gyro_board/src/usb/FreeRTOS/include/mpu_wrappers.h
new file mode 100644
index 0000000..ad8ce2d
--- /dev/null
+++ b/gyro_board/src/usb/FreeRTOS/include/mpu_wrappers.h
@@ -0,0 +1,135 @@
+/*
+ FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.
+
+ ***************************************************************************
+ * *
+ * If you are: *
+ * *
+ * + New to FreeRTOS, *
+ * + Wanting to learn FreeRTOS or multitasking in general quickly *
+ * + Looking for basic training, *
+ * + Wanting to improve your FreeRTOS skills and productivity *
+ * *
+ * then take a look at the FreeRTOS eBook *
+ * *
+ * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
+ * http://www.FreeRTOS.org/Documentation *
+ * *
+ * A pdf reference manual is also available. Both are usually delivered *
+ * to your inbox within 20 minutes to two hours when purchased between 8am *
+ * and 8pm GMT (although please allow up to 24 hours in case of *
+ * exceptional circumstances). Thank you for your support! *
+ * *
+ ***************************************************************************
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
+ ***NOTE*** The exception to the GPL is included to allow you to distribute
+ a combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details. You should have received a copy of the GNU General Public
+ License and the FreeRTOS license exception along with FreeRTOS; if not it
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained
+ by writing to Richard Barry, contact details for whom are available on the
+ FreeRTOS WEB site.
+
+ 1 tab == 4 spaces!
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef MPU_WRAPPERS_H
+#define MPU_WRAPPERS_H
+
+/* This file redefines API functions to be called through a wrapper macro, but
+only for ports that are using the MPU. */
+#ifdef portUSING_MPU_WRAPPERS
+
+/* MPU_WRAPPERS_INCLUDED_FROM_API_FILE will be defined when this file is
+included from queue.c or task.c to prevent it from having an effect within
+those files. */
+#ifndef MPU_WRAPPERS_INCLUDED_FROM_API_FILE
+
+#define xTaskGenericCreate MPU_xTaskGenericCreate
+#define vTaskAllocateMPURegions MPU_vTaskAllocateMPURegions
+#define vTaskDelete MPU_vTaskDelete
+#define vTaskDelayUntil MPU_vTaskDelayUntil
+#define vTaskDelay MPU_vTaskDelay
+#define uxTaskPriorityGet MPU_uxTaskPriorityGet
+#define vTaskPrioritySet MPU_vTaskPrioritySet
+#define vTaskSuspend MPU_vTaskSuspend
+#define xTaskIsTaskSuspended MPU_xTaskIsTaskSuspended
+#define vTaskResume MPU_vTaskResume
+#define vTaskSuspendAll MPU_vTaskSuspendAll
+#define xTaskResumeAll MPU_xTaskResumeAll
+#define xTaskGetTickCount MPU_xTaskGetTickCount
+#define uxTaskGetNumberOfTasks MPU_uxTaskGetNumberOfTasks
+#define vTaskList MPU_vTaskList
+#define vTaskGetRunTimeStats MPU_vTaskGetRunTimeStats
+#define vTaskStartTrace MPU_vTaskStartTrace
+#define ulTaskEndTrace MPU_ulTaskEndTrace
+#define vTaskSetApplicationTaskTag MPU_vTaskSetApplicationTaskTag
+#define xTaskGetApplicationTaskTag MPU_xTaskGetApplicationTaskTag
+#define xTaskCallApplicationTaskHook MPU_xTaskCallApplicationTaskHook
+#define uxTaskGetStackHighWaterMark MPU_uxTaskGetStackHighWaterMark
+#define xTaskGetCurrentTaskHandle MPU_xTaskGetCurrentTaskHandle
+#define xTaskGetSchedulerState MPU_xTaskGetSchedulerState
+
+#define xQueueCreate MPU_xQueueCreate
+#define xQueueCreateMutex MPU_xQueueCreateMutex
+#define xQueueGiveMutexRecursive MPU_xQueueGiveMutexRecursive
+#define xQueueTakeMutexRecursive MPU_xQueueTakeMutexRecursive
+#define xQueueCreateCountingSemaphore MPU_xQueueCreateCountingSemaphore
+#define xQueueGenericSend MPU_xQueueGenericSend
+#define xQueueAltGenericSend MPU_xQueueAltGenericSend
+#define xQueueAltGenericReceive MPU_xQueueAltGenericReceive
+#define xQueueGenericReceive MPU_xQueueGenericReceive
+#define uxQueueMessagesWaiting MPU_uxQueueMessagesWaiting
+#define vQueueDelete MPU_vQueueDelete
+
+#define pvPortMalloc MPU_pvPortMalloc
+#define vPortFree MPU_vPortFree
+#define xPortGetFreeHeapSize MPU_xPortGetFreeHeapSize
+#define vPortInitialiseBlocks MPU_vPortInitialiseBlocks
+
+#if configQUEUE_REGISTRY_SIZE > 0
+#define vQueueAddToRegistry MPU_vQueueAddToRegistry
+#define vQueueUnregisterQueue MPU_vQueueUnregisterQueue
+#endif
+
+/* Remove the privileged function macro. */
+#define PRIVILEGED_FUNCTION
+
+#else /* MPU_WRAPPERS_INCLUDED_FROM_API_FILE */
+
+/* Ensure API functions go in the privileged execution section. */
+#define PRIVILEGED_FUNCTION __attribute__((section("privileged_functions")))
+#define PRIVILEGED_DATA __attribute__((section("privileged_data")))
+//#define PRIVILEGED_DATA
+
+#endif /* MPU_WRAPPERS_INCLUDED_FROM_API_FILE */
+
+#else /* portUSING_MPU_WRAPPERS */
+
+#define PRIVILEGED_FUNCTION
+#define PRIVILEGED_DATA
+#define portUSING_MPU_WRAPPERS 0
+
+#endif /* portUSING_MPU_WRAPPERS */
+
+
+#endif /* MPU_WRAPPERS_H */
+
diff --git a/gyro_board/src/usb/FreeRTOS/include/portable.h b/gyro_board/src/usb/FreeRTOS/include/portable.h
new file mode 100644
index 0000000..385be74
--- /dev/null
+++ b/gyro_board/src/usb/FreeRTOS/include/portable.h
@@ -0,0 +1,391 @@
+/*
+ FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.
+
+ ***************************************************************************
+ * *
+ * If you are: *
+ * *
+ * + New to FreeRTOS, *
+ * + Wanting to learn FreeRTOS or multitasking in general quickly *
+ * + Looking for basic training, *
+ * + Wanting to improve your FreeRTOS skills and productivity *
+ * *
+ * then take a look at the FreeRTOS eBook *
+ * *
+ * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
+ * http://www.FreeRTOS.org/Documentation *
+ * *
+ * A pdf reference manual is also available. Both are usually delivered *
+ * to your inbox within 20 minutes to two hours when purchased between 8am *
+ * and 8pm GMT (although please allow up to 24 hours in case of *
+ * exceptional circumstances). Thank you for your support! *
+ * *
+ ***************************************************************************
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
+ ***NOTE*** The exception to the GPL is included to allow you to distribute
+ a combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details. You should have received a copy of the GNU General Public
+ License and the FreeRTOS license exception along with FreeRTOS; if not it
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained
+ by writing to Richard Barry, contact details for whom are available on the
+ FreeRTOS WEB site.
+
+ 1 tab == 4 spaces!
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+/*-----------------------------------------------------------
+ * Portable layer API. Each function must be defined for each port.
+ *----------------------------------------------------------*/
+
+#ifndef PORTABLE_H
+#define PORTABLE_H
+
+/* Include the macro file relevant to the port being used. */
+
+#ifdef OPEN_WATCOM_INDUSTRIAL_PC_PORT
+#include "..\..\Source\portable\owatcom\16bitdos\pc\portmacro.h"
+typedef void (__interrupt __far *pxISR)();
+#endif
+
+#ifdef OPEN_WATCOM_FLASH_LITE_186_PORT
+#include "..\..\Source\portable\owatcom\16bitdos\flsh186\portmacro.h"
+typedef void (__interrupt __far *pxISR)();
+#endif
+
+#ifdef GCC_MEGA_AVR
+#include "../portable/GCC/ATMega323/portmacro.h"
+#endif
+
+#ifdef IAR_MEGA_AVR
+#include "../portable/IAR/ATMega323/portmacro.h"
+#endif
+
+#ifdef MPLAB_PIC24_PORT
+#include "..\..\Source\portable\MPLAB\PIC24_dsPIC\portmacro.h"
+#endif
+
+#ifdef MPLAB_DSPIC_PORT
+#include "..\..\Source\portable\MPLAB\PIC24_dsPIC\portmacro.h"
+#endif
+
+#ifdef MPLAB_PIC18F_PORT
+#include "..\..\Source\portable\MPLAB\PIC18F\portmacro.h"
+#endif
+
+#ifdef MPLAB_PIC32MX_PORT
+#include "..\..\Source\portable\MPLAB\PIC32MX\portmacro.h"
+#endif
+
+#ifdef _FEDPICC
+#include "libFreeRTOS/Include/portmacro.h"
+#endif
+
+#ifdef SDCC_CYGNAL
+#include "../../Source/portable/SDCC/Cygnal/portmacro.h"
+#endif
+
+#ifdef GCC_ARM7
+#include "../../Source/portable/GCC/ARM7_LPC2000/portmacro.h"
+#endif
+
+#ifdef GCC_ARM7_ECLIPSE
+#include "portmacro.h"
+#endif
+
+#ifdef ROWLEY_LPC23xx
+#include "../../Source/portable/GCC/ARM7_LPC23xx/portmacro.h"
+#endif
+
+#ifdef IAR_MSP430
+#include "..\..\Source\portable\IAR\MSP430\portmacro.h"
+#endif
+
+#ifdef GCC_MSP430
+#include "../../Source/portable/GCC/MSP430F449/portmacro.h"
+#endif
+
+#ifdef ROWLEY_MSP430
+#include "../../Source/portable/Rowley/MSP430F449/portmacro.h"
+#endif
+
+#ifdef ARM7_LPC21xx_KEIL_RVDS
+#include "..\..\Source\portable\RVDS\ARM7_LPC21xx\portmacro.h"
+#endif
+
+#ifdef SAM7_GCC
+#include "../../Source/portable/GCC/ARM7_AT91SAM7S/portmacro.h"
+#endif
+
+#ifdef SAM7_IAR
+#include "..\..\Source\portable\IAR\AtmelSAM7S64\portmacro.h"
+#endif
+
+#ifdef SAM9XE_IAR
+#include "..\..\Source\portable\IAR\AtmelSAM9XE\portmacro.h"
+#endif
+
+#ifdef LPC2000_IAR
+#include "..\..\Source\portable\IAR\LPC2000\portmacro.h"
+#endif
+
+#ifdef STR71X_IAR
+#include "..\..\Source\portable\IAR\STR71x\portmacro.h"
+#endif
+
+#ifdef STR75X_IAR
+#include "..\..\Source\portable\IAR\STR75x\portmacro.h"
+#endif
+
+#ifdef STR75X_GCC
+#include "..\..\Source\portable\GCC\STR75x\portmacro.h"
+#endif
+
+#ifdef STR91X_IAR
+#include "..\..\Source\portable\IAR\STR91x\portmacro.h"
+#endif
+
+#ifdef GCC_H8S
+#include "../../Source/portable/GCC/H8S2329/portmacro.h"
+#endif
+
+#ifdef GCC_AT91FR40008
+#include "../../Source/portable/GCC/ARM7_AT91FR40008/portmacro.h"
+#endif
+
+#ifdef RVDS_ARMCM3_LM3S102
+#include "../../Source/portable/RVDS/ARM_CM3/portmacro.h"
+#endif
+
+#ifdef GCC_ARMCM3_LM3S102
+#include "../../Source/portable/GCC/ARM_CM3/portmacro.h"
+#endif
+
+#ifdef GCC_ARMCM3
+#include "../../Source/portable/GCC/ARM_CM3/portmacro.h"
+#endif
+
+#ifdef IAR_ARM_CM3
+#include "../../Source/portable/IAR/ARM_CM3/portmacro.h"
+#endif
+
+#ifdef IAR_ARMCM3_LM
+#include "../../Source/portable/IAR/ARM_CM3/portmacro.h"
+#endif
+
+#ifdef HCS12_CODE_WARRIOR
+#include "../../Source/portable/CodeWarrior/HCS12/portmacro.h"
+#endif
+
+#ifdef MICROBLAZE_GCC
+#include "../../Source/portable/GCC/MicroBlaze/portmacro.h"
+#endif
+
+#ifdef TERN_EE
+#include "..\..\Source\portable\Paradigm\Tern_EE\small\portmacro.h"
+#endif
+
+#ifdef GCC_HCS12
+#include "../../Source/portable/GCC/HCS12/portmacro.h"
+#endif
+
+#ifdef GCC_MCF5235
+#include "../../Source/portable/GCC/MCF5235/portmacro.h"
+#endif
+
+#ifdef COLDFIRE_V2_GCC
+#include "../../../Source/portable/GCC/ColdFire_V2/portmacro.h"
+#endif
+
+#ifdef COLDFIRE_V2_CODEWARRIOR
+#include "../../Source/portable/CodeWarrior/ColdFire_V2/portmacro.h"
+#endif
+
+#ifdef GCC_PPC405
+#include "../../Source/portable/GCC/PPC405_Xilinx/portmacro.h"
+#endif
+
+#ifdef GCC_PPC440
+#include "../../Source/portable/GCC/PPC440_Xilinx/portmacro.h"
+#endif
+
+#ifdef _16FX_SOFTUNE
+#include "..\..\Source\portable\Softune\MB96340\portmacro.h"
+#endif
+
+#ifdef BCC_INDUSTRIAL_PC_PORT
+/* A short file name has to be used in place of the normal
+FreeRTOSConfig.h when using the Borland compiler. */
+#include "frconfig.h"
+#include "..\portable\BCC\16BitDOS\PC\prtmacro.h"
+typedef void (__interrupt __far *pxISR)();
+#endif
+
+#ifdef BCC_FLASH_LITE_186_PORT
+/* A short file name has to be used in place of the normal
+FreeRTOSConfig.h when using the Borland compiler. */
+#include "frconfig.h"
+#include "..\portable\BCC\16BitDOS\flsh186\prtmacro.h"
+typedef void (__interrupt __far *pxISR)();
+#endif
+
+#ifdef __GNUC__
+#ifdef __AVR32_AVR32A__
+#include "portmacro.h"
+#endif
+#endif
+
+#ifdef __ICCAVR32__
+#ifdef __CORE__
+#if __CORE__ == __AVR32A__
+#include "portmacro.h"
+#endif
+#endif
+#endif
+
+#ifdef __91467D
+#include "portmacro.h"
+#endif
+
+#ifdef __96340
+#include "portmacro.h"
+#endif
+
+
+#ifdef __IAR_V850ES_Fx3__
+#include "../../Source/portable/IAR/V850ES/portmacro.h"
+#endif
+
+#ifdef __IAR_V850ES_Jx3__
+#include "../../Source/portable/IAR/V850ES/portmacro.h"
+#endif
+
+#ifdef __IAR_V850ES_Jx3_L__
+#include "../../Source/portable/IAR/V850ES/portmacro.h"
+#endif
+
+#ifdef __IAR_V850ES_Jx2__
+#include "../../Source/portable/IAR/V850ES/portmacro.h"
+#endif
+
+#ifdef __IAR_V850ES_Hx2__
+#include "../../Source/portable/IAR/V850ES/portmacro.h"
+#endif
+
+#ifdef __IAR_78K0R_Kx3__
+#include "../../Source/portable/IAR/78K0R/portmacro.h"
+#endif
+
+#ifdef __IAR_78K0R_Kx3L__
+#include "../../Source/portable/IAR/78K0R/portmacro.h"
+#endif
+
+/* Catch all to ensure portmacro.h is included in the build. Newer demos
+have the path as part of the project options, rather than as relative from
+the project location. If portENTER_CRITICAL() has not been defined then
+portmacro.h has not yet been included - as every portmacro.h provides a
+portENTER_CRITICAL() definition. Check the demo application for your demo
+to find the path to the correct portmacro.h file. */
+#ifndef portENTER_CRITICAL
+#include "portmacro.h"
+#endif
+
+#if portBYTE_ALIGNMENT == 8
+#define portBYTE_ALIGNMENT_MASK ( 0x0007 )
+#endif
+
+#if portBYTE_ALIGNMENT == 4
+#define portBYTE_ALIGNMENT_MASK ( 0x0003 )
+#endif
+
+#if portBYTE_ALIGNMENT == 2
+#define portBYTE_ALIGNMENT_MASK ( 0x0001 )
+#endif
+
+#if portBYTE_ALIGNMENT == 1
+#define portBYTE_ALIGNMENT_MASK ( 0x0000 )
+#endif
+
+#ifndef portBYTE_ALIGNMENT_MASK
+#error "Invalid portBYTE_ALIGNMENT definition"
+#endif
+
+#ifndef portNUM_CONFIGURABLE_REGIONS
+#define portNUM_CONFIGURABLE_REGIONS 1
+#endif
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#include "mpu_wrappers.h"
+
+ /*
+ * Setup the stack of a new task so it is ready to be placed under the
+ * scheduler control. The registers have to be placed on the stack in
+ * the order that the port expects to find them.
+ *
+ */
+#if( portUSING_MPU_WRAPPERS == 1 )
+ portSTACK_TYPE *pxPortInitialiseStack(portSTACK_TYPE *pxTopOfStack, pdTASK_CODE pxCode, void *pvParameters, portBASE_TYPE xRunPrivileged) PRIVILEGED_FUNCTION;
+#else
+ portSTACK_TYPE *pxPortInitialiseStack(portSTACK_TYPE *pxTopOfStack, pdTASK_CODE pxCode, void *pvParameters);
+#endif
+
+ /*
+ * Map to the memory management routines required for the port.
+ */
+ void *pvPortMalloc(size_t xSize) PRIVILEGED_FUNCTION;
+ void vPortFree(void *pv) PRIVILEGED_FUNCTION;
+ void vPortInitialiseBlocks(void) PRIVILEGED_FUNCTION;
+ size_t xPortGetFreeHeapSize(void) PRIVILEGED_FUNCTION;
+
+ /*
+ * Setup the hardware ready for the scheduler to take control. This generally
+ * sets up a tick interrupt and sets timers for the correct tick frequency.
+ */
+ portBASE_TYPE xPortStartScheduler(void) PRIVILEGED_FUNCTION;
+
+ /*
+ * Undo any hardware/ISR setup that was performed by xPortStartScheduler() so
+ * the hardware is left in its original condition after the scheduler stops
+ * executing.
+ */
+ void vPortEndScheduler(void) PRIVILEGED_FUNCTION;
+
+ /*
+ * The structures and methods of manipulating the MPU are contained within the
+ * port layer.
+ *
+ * Fills the xMPUSettings structure with the memory region information
+ * contained in xRegions.
+ */
+#if( portUSING_MPU_WRAPPERS == 1 )
+ struct xMEMORY_REGION;
+ void vPortStoreTaskMPUSettings(xMPU_SETTINGS *xMPUSettings, const struct xMEMORY_REGION * const xRegions, portSTACK_TYPE *pxBottomOfStack, unsigned short usStackDepth) PRIVILEGED_FUNCTION;
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* PORTABLE_H */
+
diff --git a/gyro_board/src/usb/FreeRTOS/include/projdefs.h b/gyro_board/src/usb/FreeRTOS/include/projdefs.h
new file mode 100644
index 0000000..543992d
--- /dev/null
+++ b/gyro_board/src/usb/FreeRTOS/include/projdefs.h
@@ -0,0 +1,77 @@
+/*
+ FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.
+
+ ***************************************************************************
+ * *
+ * If you are: *
+ * *
+ * + New to FreeRTOS, *
+ * + Wanting to learn FreeRTOS or multitasking in general quickly *
+ * + Looking for basic training, *
+ * + Wanting to improve your FreeRTOS skills and productivity *
+ * *
+ * then take a look at the FreeRTOS eBook *
+ * *
+ * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
+ * http://www.FreeRTOS.org/Documentation *
+ * *
+ * A pdf reference manual is also available. Both are usually delivered *
+ * to your inbox within 20 minutes to two hours when purchased between 8am *
+ * and 8pm GMT (although please allow up to 24 hours in case of *
+ * exceptional circumstances). Thank you for your support! *
+ * *
+ ***************************************************************************
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
+ ***NOTE*** The exception to the GPL is included to allow you to distribute
+ a combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details. You should have received a copy of the GNU General Public
+ License and the FreeRTOS license exception along with FreeRTOS; if not it
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained
+ by writing to Richard Barry, contact details for whom are available on the
+ FreeRTOS WEB site.
+
+ 1 tab == 4 spaces!
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef PROJDEFS_H
+#define PROJDEFS_H
+
+/* Defines the prototype to which task functions must conform. */
+typedef void (*pdTASK_CODE)(void *);
+
+#define pdTRUE ( 1 )
+#define pdFALSE ( 0 )
+
+#define pdPASS ( 1 )
+#define pdFAIL ( 0 )
+#define errQUEUE_EMPTY ( 0 )
+#define errQUEUE_FULL ( 0 )
+
+/* Error definitions. */
+#define errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY ( -1 )
+#define errNO_TASK_TO_RUN ( -2 )
+#define errQUEUE_BLOCKED ( -4 )
+#define errQUEUE_YIELD ( -5 )
+
+#endif /* PROJDEFS_H */
+
+
+
diff --git a/gyro_board/src/usb/FreeRTOS/include/queue.h b/gyro_board/src/usb/FreeRTOS/include/queue.h
new file mode 100644
index 0000000..8d5dcba
--- /dev/null
+++ b/gyro_board/src/usb/FreeRTOS/include/queue.h
@@ -0,0 +1,1262 @@
+/*
+ FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.
+
+ ***************************************************************************
+ * *
+ * If you are: *
+ * *
+ * + New to FreeRTOS, *
+ * + Wanting to learn FreeRTOS or multitasking in general quickly *
+ * + Looking for basic training, *
+ * + Wanting to improve your FreeRTOS skills and productivity *
+ * *
+ * then take a look at the FreeRTOS eBook *
+ * *
+ * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
+ * http://www.FreeRTOS.org/Documentation *
+ * *
+ * A pdf reference manual is also available. Both are usually delivered *
+ * to your inbox within 20 minutes to two hours when purchased between 8am *
+ * and 8pm GMT (although please allow up to 24 hours in case of *
+ * exceptional circumstances). Thank you for your support! *
+ * *
+ ***************************************************************************
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
+ ***NOTE*** The exception to the GPL is included to allow you to distribute
+ a combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details. You should have received a copy of the GNU General Public
+ License and the FreeRTOS license exception along with FreeRTOS; if not it
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained
+ by writing to Richard Barry, contact details for whom are available on the
+ FreeRTOS WEB site.
+
+ 1 tab == 4 spaces!
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef INC_FREERTOS_H
+#error "#include FreeRTOS.h" must appear in source files before "#include queue.h"
+#endif
+
+
+
+
+#ifndef QUEUE_H
+#define QUEUE_H
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+
+#include "mpu_wrappers.h"
+
+
+ typedef void * xQueueHandle;
+
+
+ /* For internal use only. */
+#define queueSEND_TO_BACK ( 0 )
+#define queueSEND_TO_FRONT ( 1 )
+
+
+ /**
+ * queue. h
+ * <pre>
+ xQueueHandle xQueueCreate(
+ unsigned portBASE_TYPE uxQueueLength,
+ unsigned portBASE_TYPE uxItemSize
+ );
+ * </pre>
+ *
+ * Creates a new queue instance. This allocates the storage required by the
+ * new queue and returns a handle for the queue.
+ *
+ * @param uxQueueLength The maximum number of items that the queue can contain.
+ *
+ * @param uxItemSize The number of bytes each item in the queue will require.
+ * Items are queued by copy, not by reference, so this is the number of bytes
+ * that will be copied for each posted item. Each item on the queue must be
+ * the same size.
+ *
+ * @return If the queue is successfully create then a handle to the newly
+ * created queue is returned. If the queue cannot be created then 0 is
+ * returned.
+ *
+ * Example usage:
+ <pre>
+ struct AMessage
+ {
+ char ucMessageID;
+ char ucData[ 20 ];
+ };
+
+ void vATask( void *pvParameters )
+ {
+ xQueueHandle xQueue1, xQueue2;
+
+ // Create a queue capable of containing 10 unsigned long values.
+ xQueue1 = xQueueCreate( 10, sizeof( unsigned long ) );
+ if( xQueue1 == 0 )
+ {
+ // Queue was not created and must not be used.
+ }
+
+ // Create a queue capable of containing 10 pointers to AMessage structures.
+ // These should be passed by pointer as they contain a lot of data.
+ xQueue2 = xQueueCreate( 10, sizeof( struct AMessage * ) );
+ if( xQueue2 == 0 )
+ {
+ // Queue was not created and must not be used.
+ }
+
+ // ... Rest of task code.
+ }
+ </pre>
+ * \defgroup xQueueCreate xQueueCreate
+ * \ingroup QueueManagement
+ */
+ xQueueHandle xQueueCreate(unsigned portBASE_TYPE uxQueueLength, unsigned portBASE_TYPE uxItemSize);
+
+ /**
+ * queue. h
+ * <pre>
+ portBASE_TYPE xQueueSendToToFront(
+ xQueueHandle xQueue,
+ const void * pvItemToQueue,
+ portTickType xTicksToWait
+ );
+ * </pre>
+ *
+ * This is a macro that calls xQueueGenericSend().
+ *
+ * Post an item to the front of a queue. The item is queued by copy, not by
+ * reference. This function must not be called from an interrupt service
+ * routine. See xQueueSendFromISR () for an alternative which may be used
+ * in an ISR.
+ *
+ * @param xQueue The handle to the queue on which the item is to be posted.
+ *
+ * @param pvItemToQueue A pointer to the item that is to be placed on the
+ * queue. The size of the items the queue will hold was defined when the
+ * queue was created, so this many bytes will be copied from pvItemToQueue
+ * into the queue storage area.
+ *
+ * @param xTicksToWait The maximum amount of time the task should block
+ * waiting for space to become available on the queue, should it already
+ * be full. The call will return immediately if this is set to 0 and the
+ * queue is full. The time is defined in tick periods so the constant
+ * portTICK_RATE_MS should be used to convert to real time if this is required.
+ *
+ * @return pdTRUE if the item was successfully posted, otherwise errQUEUE_FULL.
+ *
+ * Example usage:
+ <pre>
+ struct AMessage
+ {
+ char ucMessageID;
+ char ucData[ 20 ];
+ } xMessage;
+
+ unsigned long ulVar = 10UL;
+
+ void vATask( void *pvParameters )
+ {
+ xQueueHandle xQueue1, xQueue2;
+ struct AMessage *pxMessage;
+
+ // Create a queue capable of containing 10 unsigned long values.
+ xQueue1 = xQueueCreate( 10, sizeof( unsigned long ) );
+
+ // Create a queue capable of containing 10 pointers to AMessage structures.
+ // These should be passed by pointer as they contain a lot of data.
+ xQueue2 = xQueueCreate( 10, sizeof( struct AMessage * ) );
+
+ // ...
+
+ if( xQueue1 != 0 )
+ {
+ // Send an unsigned long. Wait for 10 ticks for space to become
+ // available if necessary.
+ if( xQueueSendToFront( xQueue1, ( void * ) &ulVar, ( portTickType ) 10 ) != pdPASS )
+ {
+ // Failed to post the message, even after 10 ticks.
+ }
+ }
+
+ if( xQueue2 != 0 )
+ {
+ // Send a pointer to a struct AMessage object. Don't block if the
+ // queue is already full.
+ pxMessage = & xMessage;
+ xQueueSendToFront( xQueue2, ( void * ) &pxMessage, ( portTickType ) 0 );
+ }
+
+ // ... Rest of task code.
+ }
+ </pre>
+ * \defgroup xQueueSend xQueueSend
+ * \ingroup QueueManagement
+ */
+#define xQueueSendToFront( xQueue, pvItemToQueue, xTicksToWait ) xQueueGenericSend( xQueue, pvItemToQueue, xTicksToWait, queueSEND_TO_FRONT )
+
+ /**
+ * queue. h
+ * <pre>
+ portBASE_TYPE xQueueSendToBack(
+ xQueueHandle xQueue,
+ const void * pvItemToQueue,
+ portTickType xTicksToWait
+ );
+ * </pre>
+ *
+ * This is a macro that calls xQueueGenericSend().
+ *
+ * Post an item to the back of a queue. The item is queued by copy, not by
+ * reference. This function must not be called from an interrupt service
+ * routine. See xQueueSendFromISR () for an alternative which may be used
+ * in an ISR.
+ *
+ * @param xQueue The handle to the queue on which the item is to be posted.
+ *
+ * @param pvItemToQueue A pointer to the item that is to be placed on the
+ * queue. The size of the items the queue will hold was defined when the
+ * queue was created, so this many bytes will be copied from pvItemToQueue
+ * into the queue storage area.
+ *
+ * @param xTicksToWait The maximum amount of time the task should block
+ * waiting for space to become available on the queue, should it already
+ * be full. The call will return immediately if this is set to 0 and the queue
+ * is full. The time is defined in tick periods so the constant
+ * portTICK_RATE_MS should be used to convert to real time if this is required.
+ *
+ * @return pdTRUE if the item was successfully posted, otherwise errQUEUE_FULL.
+ *
+ * Example usage:
+ <pre>
+ struct AMessage
+ {
+ char ucMessageID;
+ char ucData[ 20 ];
+ } xMessage;
+
+ unsigned long ulVar = 10UL;
+
+ void vATask( void *pvParameters )
+ {
+ xQueueHandle xQueue1, xQueue2;
+ struct AMessage *pxMessage;
+
+ // Create a queue capable of containing 10 unsigned long values.
+ xQueue1 = xQueueCreate( 10, sizeof( unsigned long ) );
+
+ // Create a queue capable of containing 10 pointers to AMessage structures.
+ // These should be passed by pointer as they contain a lot of data.
+ xQueue2 = xQueueCreate( 10, sizeof( struct AMessage * ) );
+
+ // ...
+
+ if( xQueue1 != 0 )
+ {
+ // Send an unsigned long. Wait for 10 ticks for space to become
+ // available if necessary.
+ if( xQueueSendToBack( xQueue1, ( void * ) &ulVar, ( portTickType ) 10 ) != pdPASS )
+ {
+ // Failed to post the message, even after 10 ticks.
+ }
+ }
+
+ if( xQueue2 != 0 )
+ {
+ // Send a pointer to a struct AMessage object. Don't block if the
+ // queue is already full.
+ pxMessage = & xMessage;
+ xQueueSendToBack( xQueue2, ( void * ) &pxMessage, ( portTickType ) 0 );
+ }
+
+ // ... Rest of task code.
+ }
+ </pre>
+ * \defgroup xQueueSend xQueueSend
+ * \ingroup QueueManagement
+ */
+#define xQueueSendToBack( xQueue, pvItemToQueue, xTicksToWait ) xQueueGenericSend( xQueue, pvItemToQueue, xTicksToWait, queueSEND_TO_BACK )
+
+ /**
+ * queue. h
+ * <pre>
+ portBASE_TYPE xQueueSend(
+ xQueueHandle xQueue,
+ const void * pvItemToQueue,
+ portTickType xTicksToWait
+ );
+ * </pre>
+ *
+ * This is a macro that calls xQueueGenericSend(). It is included for
+ * backward compatibility with versions of FreeRTOS.org that did not
+ * include the xQueueSendToFront() and xQueueSendToBack() macros. It is
+ * equivalent to xQueueSendToBack().
+ *
+ * Post an item on a queue. The item is queued by copy, not by reference.
+ * This function must not be called from an interrupt service routine.
+ * See xQueueSendFromISR () for an alternative which may be used in an ISR.
+ *
+ * @param xQueue The handle to the queue on which the item is to be posted.
+ *
+ * @param pvItemToQueue A pointer to the item that is to be placed on the
+ * queue. The size of the items the queue will hold was defined when the
+ * queue was created, so this many bytes will be copied from pvItemToQueue
+ * into the queue storage area.
+ *
+ * @param xTicksToWait The maximum amount of time the task should block
+ * waiting for space to become available on the queue, should it already
+ * be full. The call will return immediately if this is set to 0 and the
+ * queue is full. The time is defined in tick periods so the constant
+ * portTICK_RATE_MS should be used to convert to real time if this is required.
+ *
+ * @return pdTRUE if the item was successfully posted, otherwise errQUEUE_FULL.
+ *
+ * Example usage:
+ <pre>
+ struct AMessage
+ {
+ char ucMessageID;
+ char ucData[ 20 ];
+ } xMessage;
+
+ unsigned long ulVar = 10UL;
+
+ void vATask( void *pvParameters )
+ {
+ xQueueHandle xQueue1, xQueue2;
+ struct AMessage *pxMessage;
+
+ // Create a queue capable of containing 10 unsigned long values.
+ xQueue1 = xQueueCreate( 10, sizeof( unsigned long ) );
+
+ // Create a queue capable of containing 10 pointers to AMessage structures.
+ // These should be passed by pointer as they contain a lot of data.
+ xQueue2 = xQueueCreate( 10, sizeof( struct AMessage * ) );
+
+ // ...
+
+ if( xQueue1 != 0 )
+ {
+ // Send an unsigned long. Wait for 10 ticks for space to become
+ // available if necessary.
+ if( xQueueSend( xQueue1, ( void * ) &ulVar, ( portTickType ) 10 ) != pdPASS )
+ {
+ // Failed to post the message, even after 10 ticks.
+ }
+ }
+
+ if( xQueue2 != 0 )
+ {
+ // Send a pointer to a struct AMessage object. Don't block if the
+ // queue is already full.
+ pxMessage = & xMessage;
+ xQueueSend( xQueue2, ( void * ) &pxMessage, ( portTickType ) 0 );
+ }
+
+ // ... Rest of task code.
+ }
+ </pre>
+ * \defgroup xQueueSend xQueueSend
+ * \ingroup QueueManagement
+ */
+#define xQueueSend( xQueue, pvItemToQueue, xTicksToWait ) xQueueGenericSend( xQueue, pvItemToQueue, xTicksToWait, queueSEND_TO_BACK )
+
+
+ /**
+ * queue. h
+ * <pre>
+ portBASE_TYPE xQueueGenericSend(
+ xQueueHandle xQueue,
+ const void * pvItemToQueue,
+ portTickType xTicksToWait
+ portBASE_TYPE xCopyPosition
+ );
+ * </pre>
+ *
+ * It is preferred that the macros xQueueSend(), xQueueSendToFront() and
+ * xQueueSendToBack() are used in place of calling this function directly.
+ *
+ * Post an item on a queue. The item is queued by copy, not by reference.
+ * This function must not be called from an interrupt service routine.
+ * See xQueueSendFromISR () for an alternative which may be used in an ISR.
+ *
+ * @param xQueue The handle to the queue on which the item is to be posted.
+ *
+ * @param pvItemToQueue A pointer to the item that is to be placed on the
+ * queue. The size of the items the queue will hold was defined when the
+ * queue was created, so this many bytes will be copied from pvItemToQueue
+ * into the queue storage area.
+ *
+ * @param xTicksToWait The maximum amount of time the task should block
+ * waiting for space to become available on the queue, should it already
+ * be full. The call will return immediately if this is set to 0 and the
+ * queue is full. The time is defined in tick periods so the constant
+ * portTICK_RATE_MS should be used to convert to real time if this is required.
+ *
+ * @param xCopyPosition Can take the value queueSEND_TO_BACK to place the
+ * item at the back of the queue, or queueSEND_TO_FRONT to place the item
+ * at the front of the queue (for high priority messages).
+ *
+ * @return pdTRUE if the item was successfully posted, otherwise errQUEUE_FULL.
+ *
+ * Example usage:
+ <pre>
+ struct AMessage
+ {
+ char ucMessageID;
+ char ucData[ 20 ];
+ } xMessage;
+
+ unsigned long ulVar = 10UL;
+
+ void vATask( void *pvParameters )
+ {
+ xQueueHandle xQueue1, xQueue2;
+ struct AMessage *pxMessage;
+
+ // Create a queue capable of containing 10 unsigned long values.
+ xQueue1 = xQueueCreate( 10, sizeof( unsigned long ) );
+
+ // Create a queue capable of containing 10 pointers to AMessage structures.
+ // These should be passed by pointer as they contain a lot of data.
+ xQueue2 = xQueueCreate( 10, sizeof( struct AMessage * ) );
+
+ // ...
+
+ if( xQueue1 != 0 )
+ {
+ // Send an unsigned long. Wait for 10 ticks for space to become
+ // available if necessary.
+ if( xQueueGenericSend( xQueue1, ( void * ) &ulVar, ( portTickType ) 10, queueSEND_TO_BACK ) != pdPASS )
+ {
+ // Failed to post the message, even after 10 ticks.
+ }
+ }
+
+ if( xQueue2 != 0 )
+ {
+ // Send a pointer to a struct AMessage object. Don't block if the
+ // queue is already full.
+ pxMessage = & xMessage;
+ xQueueGenericSend( xQueue2, ( void * ) &pxMessage, ( portTickType ) 0, queueSEND_TO_BACK );
+ }
+
+ // ... Rest of task code.
+ }
+ </pre>
+ * \defgroup xQueueSend xQueueSend
+ * \ingroup QueueManagement
+ */
+ signed portBASE_TYPE xQueueGenericSend(xQueueHandle xQueue, const void * const pvItemToQueue, portTickType xTicksToWait, portBASE_TYPE xCopyPosition);
+
+ /**
+ * queue. h
+ * <pre>
+ portBASE_TYPE xQueuePeek(
+ xQueueHandle xQueue,
+ void *pvBuffer,
+ portTickType xTicksToWait
+ );</pre>
+ *
+ * This is a macro that calls the xQueueGenericReceive() function.
+ *
+ * Receive an item from a queue without removing the item from the queue.
+ * The item is received by copy so a buffer of adequate size must be
+ * provided. The number of bytes copied into the buffer was defined when
+ * the queue was created.
+ *
+ * Successfully received items remain on the queue so will be returned again
+ * by the next call, or a call to xQueueReceive().
+ *
+ * This macro must not be used in an interrupt service routine.
+ *
+ * @param pxQueue The handle to the queue from which the item is to be
+ * received.
+ *
+ * @param pvBuffer Pointer to the buffer into which the received item will
+ * be copied.
+ *
+ * @param xTicksToWait The maximum amount of time the task should block
+ * waiting for an item to receive should the queue be empty at the time
+ * of the call. The time is defined in tick periods so the constant
+ * portTICK_RATE_MS should be used to convert to real time if this is required.
+ * xQueuePeek() will return immediately if xTicksToWait is 0 and the queue
+ * is empty.
+ *
+ * @return pdTRUE if an item was successfully received from the queue,
+ * otherwise pdFALSE.
+ *
+ * Example usage:
+ <pre>
+ struct AMessage
+ {
+ char ucMessageID;
+ char ucData[ 20 ];
+ } xMessage;
+
+ xQueueHandle xQueue;
+
+ // Task to create a queue and post a value.
+ void vATask( void *pvParameters )
+ {
+ struct AMessage *pxMessage;
+
+ // Create a queue capable of containing 10 pointers to AMessage structures.
+ // These should be passed by pointer as they contain a lot of data.
+ xQueue = xQueueCreate( 10, sizeof( struct AMessage * ) );
+ if( xQueue == 0 )
+ {
+ // Failed to create the queue.
+ }
+
+ // ...
+
+ // Send a pointer to a struct AMessage object. Don't block if the
+ // queue is already full.
+ pxMessage = & xMessage;
+ xQueueSend( xQueue, ( void * ) &pxMessage, ( portTickType ) 0 );
+
+ // ... Rest of task code.
+ }
+
+ // Task to peek the data from the queue.
+ void vADifferentTask( void *pvParameters )
+ {
+ struct AMessage *pxRxedMessage;
+
+ if( xQueue != 0 )
+ {
+ // Peek a message on the created queue. Block for 10 ticks if a
+ // message is not immediately available.
+ if( xQueuePeek( xQueue, &( pxRxedMessage ), ( portTickType ) 10 ) )
+ {
+ // pcRxedMessage now points to the struct AMessage variable posted
+ // by vATask, but the item still remains on the queue.
+ }
+ }
+
+ // ... Rest of task code.
+ }
+ </pre>
+ * \defgroup xQueueReceive xQueueReceive
+ * \ingroup QueueManagement
+ */
+#define xQueuePeek( xQueue, pvBuffer, xTicksToWait ) xQueueGenericReceive( xQueue, pvBuffer, xTicksToWait, pdTRUE )
+
+ /**
+ * queue. h
+ * <pre>
+ portBASE_TYPE xQueueReceive(
+ xQueueHandle xQueue,
+ void *pvBuffer,
+ portTickType xTicksToWait
+ );</pre>
+ *
+ * This is a macro that calls the xQueueGenericReceive() function.
+ *
+ * Receive an item from a queue. The item is received by copy so a buffer of
+ * adequate size must be provided. The number of bytes copied into the buffer
+ * was defined when the queue was created.
+ *
+ * Successfully received items are removed from the queue.
+ *
+ * This function must not be used in an interrupt service routine. See
+ * xQueueReceiveFromISR for an alternative that can.
+ *
+ * @param pxQueue The handle to the queue from which the item is to be
+ * received.
+ *
+ * @param pvBuffer Pointer to the buffer into which the received item will
+ * be copied.
+ *
+ * @param xTicksToWait The maximum amount of time the task should block
+ * waiting for an item to receive should the queue be empty at the time
+ * of the call. xQueueReceive() will return immediately if xTicksToWait
+ * is zero and the queue is empty. The time is defined in tick periods so the
+ * constant portTICK_RATE_MS should be used to convert to real time if this is
+ * required.
+ *
+ * @return pdTRUE if an item was successfully received from the queue,
+ * otherwise pdFALSE.
+ *
+ * Example usage:
+ <pre>
+ struct AMessage
+ {
+ char ucMessageID;
+ char ucData[ 20 ];
+ } xMessage;
+
+ xQueueHandle xQueue;
+
+ // Task to create a queue and post a value.
+ void vATask( void *pvParameters )
+ {
+ struct AMessage *pxMessage;
+
+ // Create a queue capable of containing 10 pointers to AMessage structures.
+ // These should be passed by pointer as they contain a lot of data.
+ xQueue = xQueueCreate( 10, sizeof( struct AMessage * ) );
+ if( xQueue == 0 )
+ {
+ // Failed to create the queue.
+ }
+
+ // ...
+
+ // Send a pointer to a struct AMessage object. Don't block if the
+ // queue is already full.
+ pxMessage = & xMessage;
+ xQueueSend( xQueue, ( void * ) &pxMessage, ( portTickType ) 0 );
+
+ // ... Rest of task code.
+ }
+
+ // Task to receive from the queue.
+ void vADifferentTask( void *pvParameters )
+ {
+ struct AMessage *pxRxedMessage;
+
+ if( xQueue != 0 )
+ {
+ // Receive a message on the created queue. Block for 10 ticks if a
+ // message is not immediately available.
+ if( xQueueReceive( xQueue, &( pxRxedMessage ), ( portTickType ) 10 ) )
+ {
+ // pcRxedMessage now points to the struct AMessage variable posted
+ // by vATask.
+ }
+ }
+
+ // ... Rest of task code.
+ }
+ </pre>
+ * \defgroup xQueueReceive xQueueReceive
+ * \ingroup QueueManagement
+ */
+#define xQueueReceive( xQueue, pvBuffer, xTicksToWait ) xQueueGenericReceive( xQueue, pvBuffer, xTicksToWait, pdFALSE )
+
+
+ /**
+ * queue. h
+ * <pre>
+ portBASE_TYPE xQueueGenericReceive(
+ xQueueHandle xQueue,
+ void *pvBuffer,
+ portTickType xTicksToWait
+ portBASE_TYPE xJustPeek
+ );</pre>
+ *
+ * It is preferred that the macro xQueueReceive() be used rather than calling
+ * this function directly.
+ *
+ * Receive an item from a queue. The item is received by copy so a buffer of
+ * adequate size must be provided. The number of bytes copied into the buffer
+ * was defined when the queue was created.
+ *
+ * This function must not be used in an interrupt service routine. See
+ * xQueueReceiveFromISR for an alternative that can.
+ *
+ * @param pxQueue The handle to the queue from which the item is to be
+ * received.
+ *
+ * @param pvBuffer Pointer to the buffer into which the received item will
+ * be copied.
+ *
+ * @param xTicksToWait The maximum amount of time the task should block
+ * waiting for an item to receive should the queue be empty at the time
+ * of the call. The time is defined in tick periods so the constant
+ * portTICK_RATE_MS should be used to convert to real time if this is required.
+ * xQueueGenericReceive() will return immediately if the queue is empty and
+ * xTicksToWait is 0.
+ *
+ * @param xJustPeek When set to true, the item received from the queue is not
+ * actually removed from the queue - meaning a subsequent call to
+ * xQueueReceive() will return the same item. When set to false, the item
+ * being received from the queue is also removed from the queue.
+ *
+ * @return pdTRUE if an item was successfully received from the queue,
+ * otherwise pdFALSE.
+ *
+ * Example usage:
+ <pre>
+ struct AMessage
+ {
+ char ucMessageID;
+ char ucData[ 20 ];
+ } xMessage;
+
+ xQueueHandle xQueue;
+
+ // Task to create a queue and post a value.
+ void vATask( void *pvParameters )
+ {
+ struct AMessage *pxMessage;
+
+ // Create a queue capable of containing 10 pointers to AMessage structures.
+ // These should be passed by pointer as they contain a lot of data.
+ xQueue = xQueueCreate( 10, sizeof( struct AMessage * ) );
+ if( xQueue == 0 )
+ {
+ // Failed to create the queue.
+ }
+
+ // ...
+
+ // Send a pointer to a struct AMessage object. Don't block if the
+ // queue is already full.
+ pxMessage = & xMessage;
+ xQueueSend( xQueue, ( void * ) &pxMessage, ( portTickType ) 0 );
+
+ // ... Rest of task code.
+ }
+
+ // Task to receive from the queue.
+ void vADifferentTask( void *pvParameters )
+ {
+ struct AMessage *pxRxedMessage;
+
+ if( xQueue != 0 )
+ {
+ // Receive a message on the created queue. Block for 10 ticks if a
+ // message is not immediately available.
+ if( xQueueGenericReceive( xQueue, &( pxRxedMessage ), ( portTickType ) 10 ) )
+ {
+ // pcRxedMessage now points to the struct AMessage variable posted
+ // by vATask.
+ }
+ }
+
+ // ... Rest of task code.
+ }
+ </pre>
+ * \defgroup xQueueReceive xQueueReceive
+ * \ingroup QueueManagement
+ */
+ signed portBASE_TYPE xQueueGenericReceive(xQueueHandle xQueue, void * const pvBuffer, portTickType xTicksToWait, portBASE_TYPE xJustPeek);
+
+ /**
+ * queue. h
+ * <pre>unsigned portBASE_TYPE uxQueueMessagesWaiting( const xQueueHandle xQueue );</pre>
+ *
+ * Return the number of messages stored in a queue.
+ *
+ * @param xQueue A handle to the queue being queried.
+ *
+ * @return The number of messages available in the queue.
+ *
+ * \page uxQueueMessagesWaiting uxQueueMessagesWaiting
+ * \ingroup QueueManagement
+ */
+ unsigned portBASE_TYPE uxQueueMessagesWaiting(const xQueueHandle xQueue);
+
+ /**
+ * queue. h
+ * <pre>void vQueueDelete( xQueueHandle xQueue );</pre>
+ *
+ * Delete a queue - freeing all the memory allocated for storing of items
+ * placed on the queue.
+ *
+ * @param xQueue A handle to the queue to be deleted.
+ *
+ * \page vQueueDelete vQueueDelete
+ * \ingroup QueueManagement
+ */
+ void vQueueDelete(xQueueHandle xQueue);
+
+ /**
+ * queue. h
+ * <pre>
+ portBASE_TYPE xQueueSendToFrontFromISR(
+ xQueueHandle pxQueue,
+ const void *pvItemToQueue,
+ portBASE_TYPE *pxHigherPriorityTaskWoken
+ );
+ </pre>
+ *
+ * This is a macro that calls xQueueGenericSendFromISR().
+ *
+ * Post an item to the front of a queue. It is safe to use this macro from
+ * within an interrupt service routine.
+ *
+ * Items are queued by copy not reference so it is preferable to only
+ * queue small items, especially when called from an ISR. In most cases
+ * it would be preferable to store a pointer to the item being queued.
+ *
+ * @param xQueue The handle to the queue on which the item is to be posted.
+ *
+ * @param pvItemToQueue A pointer to the item that is to be placed on the
+ * queue. The size of the items the queue will hold was defined when the
+ * queue was created, so this many bytes will be copied from pvItemToQueue
+ * into the queue storage area.
+ *
+ * @param pxHigherPriorityTaskWoken xQueueSendToFrontFromISR() will set
+ * *pxHigherPriorityTaskWoken to pdTRUE if sending to the queue caused a task
+ * to unblock, and the unblocked task has a priority higher than the currently
+ * running task. If xQueueSendToFromFromISR() sets this value to pdTRUE then
+ * a context switch should be requested before the interrupt is exited.
+ *
+ * @return pdTRUE if the data was successfully sent to the queue, otherwise
+ * errQUEUE_FULL.
+ *
+ * Example usage for buffered IO (where the ISR can obtain more than one value
+ * per call):
+ <pre>
+ void vBufferISR( void )
+ {
+ char cIn;
+ portBASE_TYPE xHigherPrioritTaskWoken;
+
+ // We have not woken a task at the start of the ISR.
+ xHigherPriorityTaskWoken = pdFALSE;
+
+ // Loop until the buffer is empty.
+ do
+ {
+ // Obtain a byte from the buffer.
+ cIn = portINPUT_BYTE( RX_REGISTER_ADDRESS );
+
+ // Post the byte.
+ xQueueSendToFrontFromISR( xRxQueue, &cIn, &xHigherPriorityTaskWoken );
+
+ } while( portINPUT_BYTE( BUFFER_COUNT ) );
+
+ // Now the buffer is empty we can switch context if necessary.
+ if( xHigherPriorityTaskWoken )
+ {
+ taskYIELD ();
+ }
+ }
+ </pre>
+ *
+ * \defgroup xQueueSendFromISR xQueueSendFromISR
+ * \ingroup QueueManagement
+ */
+#define xQueueSendToFrontFromISR( pxQueue, pvItemToQueue, pxHigherPriorityTaskWoken ) xQueueGenericSendFromISR( pxQueue, pvItemToQueue, pxHigherPriorityTaskWoken, queueSEND_TO_FRONT )
+
+
+ /**
+ * queue. h
+ * <pre>
+ portBASE_TYPE xQueueSendToBackFromISR(
+ xQueueHandle pxQueue,
+ const void *pvItemToQueue,
+ portBASE_TYPE *pxHigherPriorityTaskWoken
+ );
+ </pre>
+ *
+ * This is a macro that calls xQueueGenericSendFromISR().
+ *
+ * Post an item to the back of a queue. It is safe to use this macro from
+ * within an interrupt service routine.
+ *
+ * Items are queued by copy not reference so it is preferable to only
+ * queue small items, especially when called from an ISR. In most cases
+ * it would be preferable to store a pointer to the item being queued.
+ *
+ * @param xQueue The handle to the queue on which the item is to be posted.
+ *
+ * @param pvItemToQueue A pointer to the item that is to be placed on the
+ * queue. The size of the items the queue will hold was defined when the
+ * queue was created, so this many bytes will be copied from pvItemToQueue
+ * into the queue storage area.
+ *
+ * @param pxHigherPriorityTaskWoken xQueueSendToBackFromISR() will set
+ * *pxHigherPriorityTaskWoken to pdTRUE if sending to the queue caused a task
+ * to unblock, and the unblocked task has a priority higher than the currently
+ * running task. If xQueueSendToBackFromISR() sets this value to pdTRUE then
+ * a context switch should be requested before the interrupt is exited.
+ *
+ * @return pdTRUE if the data was successfully sent to the queue, otherwise
+ * errQUEUE_FULL.
+ *
+ * Example usage for buffered IO (where the ISR can obtain more than one value
+ * per call):
+ <pre>
+ void vBufferISR( void )
+ {
+ char cIn;
+ portBASE_TYPE xHigherPriorityTaskWoken;
+
+ // We have not woken a task at the start of the ISR.
+ xHigherPriorityTaskWoken = pdFALSE;
+
+ // Loop until the buffer is empty.
+ do
+ {
+ // Obtain a byte from the buffer.
+ cIn = portINPUT_BYTE( RX_REGISTER_ADDRESS );
+
+ // Post the byte.
+ xQueueSendToBackFromISR( xRxQueue, &cIn, &xHigherPriorityTaskWoken );
+
+ } while( portINPUT_BYTE( BUFFER_COUNT ) );
+
+ // Now the buffer is empty we can switch context if necessary.
+ if( xHigherPriorityTaskWoken )
+ {
+ taskYIELD ();
+ }
+ }
+ </pre>
+ *
+ * \defgroup xQueueSendFromISR xQueueSendFromISR
+ * \ingroup QueueManagement
+ */
+#define xQueueSendToBackFromISR( pxQueue, pvItemToQueue, pxHigherPriorityTaskWoken ) xQueueGenericSendFromISR( pxQueue, pvItemToQueue, pxHigherPriorityTaskWoken, queueSEND_TO_BACK )
+
+ /**
+ * queue. h
+ * <pre>
+ portBASE_TYPE xQueueSendFromISR(
+ xQueueHandle pxQueue,
+ const void *pvItemToQueue,
+ portBASE_TYPE *pxHigherPriorityTaskWoken
+ );
+ </pre>
+ *
+ * This is a macro that calls xQueueGenericSendFromISR(). It is included
+ * for backward compatibility with versions of FreeRTOS.org that did not
+ * include the xQueueSendToBackFromISR() and xQueueSendToFrontFromISR()
+ * macros.
+ *
+ * Post an item to the back of a queue. It is safe to use this function from
+ * within an interrupt service routine.
+ *
+ * Items are queued by copy not reference so it is preferable to only
+ * queue small items, especially when called from an ISR. In most cases
+ * it would be preferable to store a pointer to the item being queued.
+ *
+ * @param xQueue The handle to the queue on which the item is to be posted.
+ *
+ * @param pvItemToQueue A pointer to the item that is to be placed on the
+ * queue. The size of the items the queue will hold was defined when the
+ * queue was created, so this many bytes will be copied from pvItemToQueue
+ * into the queue storage area.
+ *
+ * @param pxHigherPriorityTaskWoken xQueueSendFromISR() will set
+ * *pxHigherPriorityTaskWoken to pdTRUE if sending to the queue caused a task
+ * to unblock, and the unblocked task has a priority higher than the currently
+ * running task. If xQueueSendFromISR() sets this value to pdTRUE then
+ * a context switch should be requested before the interrupt is exited.
+ *
+ * @return pdTRUE if the data was successfully sent to the queue, otherwise
+ * errQUEUE_FULL.
+ *
+ * Example usage for buffered IO (where the ISR can obtain more than one value
+ * per call):
+ <pre>
+ void vBufferISR( void )
+ {
+ char cIn;
+ portBASE_TYPE xHigherPriorityTaskWoken;
+
+ // We have not woken a task at the start of the ISR.
+ xHigherPriorityTaskWoken = pdFALSE;
+
+ // Loop until the buffer is empty.
+ do
+ {
+ // Obtain a byte from the buffer.
+ cIn = portINPUT_BYTE( RX_REGISTER_ADDRESS );
+
+ // Post the byte.
+ xQueueSendFromISR( xRxQueue, &cIn, &xHigherPriorityTaskWoken );
+
+ } while( portINPUT_BYTE( BUFFER_COUNT ) );
+
+ // Now the buffer is empty we can switch context if necessary.
+ if( xHigherPriorityTaskWoken )
+ {
+ // Actual macro used here is port specific.
+ taskYIELD_FROM_ISR ();
+ }
+ }
+ </pre>
+ *
+ * \defgroup xQueueSendFromISR xQueueSendFromISR
+ * \ingroup QueueManagement
+ */
+#define xQueueSendFromISR( pxQueue, pvItemToQueue, pxHigherPriorityTaskWoken ) xQueueGenericSendFromISR( pxQueue, pvItemToQueue, pxHigherPriorityTaskWoken, queueSEND_TO_BACK )
+
+ /**
+ * queue. h
+ * <pre>
+ portBASE_TYPE xQueueGenericSendFromISR(
+ xQueueHandle pxQueue,
+ const void *pvItemToQueue,
+ portBASE_TYPE *pxHigherPriorityTaskWoken,
+ portBASE_TYPE xCopyPosition
+ );
+ </pre>
+ *
+ * It is preferred that the macros xQueueSendFromISR(),
+ * xQueueSendToFrontFromISR() and xQueueSendToBackFromISR() be used in place
+ * of calling this function directly.
+ *
+ * Post an item on a queue. It is safe to use this function from within an
+ * interrupt service routine.
+ *
+ * Items are queued by copy not reference so it is preferable to only
+ * queue small items, especially when called from an ISR. In most cases
+ * it would be preferable to store a pointer to the item being queued.
+ *
+ * @param xQueue The handle to the queue on which the item is to be posted.
+ *
+ * @param pvItemToQueue A pointer to the item that is to be placed on the
+ * queue. The size of the items the queue will hold was defined when the
+ * queue was created, so this many bytes will be copied from pvItemToQueue
+ * into the queue storage area.
+ *
+ * @param pxHigherPriorityTaskWoken xQueueGenericSendFromISR() will set
+ * *pxHigherPriorityTaskWoken to pdTRUE if sending to the queue caused a task
+ * to unblock, and the unblocked task has a priority higher than the currently
+ * running task. If xQueueGenericSendFromISR() sets this value to pdTRUE then
+ * a context switch should be requested before the interrupt is exited.
+ *
+ * @param xCopyPosition Can take the value queueSEND_TO_BACK to place the
+ * item at the back of the queue, or queueSEND_TO_FRONT to place the item
+ * at the front of the queue (for high priority messages).
+ *
+ * @return pdTRUE if the data was successfully sent to the queue, otherwise
+ * errQUEUE_FULL.
+ *
+ * Example usage for buffered IO (where the ISR can obtain more than one value
+ * per call):
+ <pre>
+ void vBufferISR( void )
+ {
+ char cIn;
+ portBASE_TYPE xHigherPriorityTaskWokenByPost;
+
+ // We have not woken a task at the start of the ISR.
+ xHigherPriorityTaskWokenByPost = pdFALSE;
+
+ // Loop until the buffer is empty.
+ do
+ {
+ // Obtain a byte from the buffer.
+ cIn = portINPUT_BYTE( RX_REGISTER_ADDRESS );
+
+ // Post each byte.
+ xQueueGenericSendFromISR( xRxQueue, &cIn, &xHigherPriorityTaskWokenByPost, queueSEND_TO_BACK );
+
+ } while( portINPUT_BYTE( BUFFER_COUNT ) );
+
+ // Now the buffer is empty we can switch context if necessary. Note that the
+ // name of the yield function required is port specific.
+ if( xHigherPriorityTaskWokenByPost )
+ {
+ taskYIELD_YIELD_FROM_ISR();
+ }
+ }
+ </pre>
+ *
+ * \defgroup xQueueSendFromISR xQueueSendFromISR
+ * \ingroup QueueManagement
+ */
+ signed portBASE_TYPE xQueueGenericSendFromISR(xQueueHandle pxQueue, const void * const pvItemToQueue, signed portBASE_TYPE *pxHigherPriorityTaskWoken, portBASE_TYPE xCopyPosition);
+
+ /**
+ * queue. h
+ * <pre>
+ portBASE_TYPE xQueueReceiveFromISR(
+ xQueueHandle pxQueue,
+ void *pvBuffer,
+ portBASE_TYPE *pxTaskWoken
+ );
+ * </pre>
+ *
+ * Receive an item from a queue. It is safe to use this function from within an
+ * interrupt service routine.
+ *
+ * @param pxQueue The handle to the queue from which the item is to be
+ * received.
+ *
+ * @param pvBuffer Pointer to the buffer into which the received item will
+ * be copied.
+ *
+ * @param pxTaskWoken A task may be blocked waiting for space to become
+ * available on the queue. If xQueueReceiveFromISR causes such a task to
+ * unblock *pxTaskWoken will get set to pdTRUE, otherwise *pxTaskWoken will
+ * remain unchanged.
+ *
+ * @return pdTRUE if an item was successfully received from the queue,
+ * otherwise pdFALSE.
+ *
+ * Example usage:
+ <pre>
+
+ xQueueHandle xQueue;
+
+ // Function to create a queue and post some values.
+ void vAFunction( void *pvParameters )
+ {
+ char cValueToPost;
+ const portTickType xBlockTime = ( portTickType )0xff;
+
+ // Create a queue capable of containing 10 characters.
+ xQueue = xQueueCreate( 10, sizeof( char ) );
+ if( xQueue == 0 )
+ {
+ // Failed to create the queue.
+ }
+
+ // ...
+
+ // Post some characters that will be used within an ISR. If the queue
+ // is full then this task will block for xBlockTime ticks.
+ cValueToPost = 'a';
+ xQueueSend( xQueue, ( void * ) &cValueToPost, xBlockTime );
+ cValueToPost = 'b';
+ xQueueSend( xQueue, ( void * ) &cValueToPost, xBlockTime );
+
+ // ... keep posting characters ... this task may block when the queue
+ // becomes full.
+
+ cValueToPost = 'c';
+ xQueueSend( xQueue, ( void * ) &cValueToPost, xBlockTime );
+ }
+
+ // ISR that outputs all the characters received on the queue.
+ void vISR_Routine( void )
+ {
+ portBASE_TYPE xTaskWokenByReceive = pdFALSE;
+ char cRxedChar;
+
+ while( xQueueReceiveFromISR( xQueue, ( void * ) &cRxedChar, &xTaskWokenByReceive) )
+ {
+ // A character was received. Output the character now.
+ vOutputCharacter( cRxedChar );
+
+ // If removing the character from the queue woke the task that was
+ // posting onto the queue cTaskWokenByReceive will have been set to
+ // pdTRUE. No matter how many times this loop iterates only one
+ // task will be woken.
+ }
+
+ if( cTaskWokenByPost != ( char ) pdFALSE;
+ {
+ taskYIELD ();
+ }
+ }
+ </pre>
+ * \defgroup xQueueReceiveFromISR xQueueReceiveFromISR
+ * \ingroup QueueManagement
+ */
+ signed portBASE_TYPE xQueueReceiveFromISR(xQueueHandle pxQueue, void * const pvBuffer, signed portBASE_TYPE *pxTaskWoken);
+
+ /*
+ * Utilities to query queue that are safe to use from an ISR. These utilities
+ * should be used only from witin an ISR, or within a critical section.
+ */
+ signed portBASE_TYPE xQueueIsQueueEmptyFromISR(const xQueueHandle pxQueue);
+ signed portBASE_TYPE xQueueIsQueueFullFromISR(const xQueueHandle pxQueue);
+ unsigned portBASE_TYPE uxQueueMessagesWaitingFromISR(const xQueueHandle pxQueue);
+
+
+ /*
+ * xQueueAltGenericSend() is an alternative version of xQueueGenericSend().
+ * Likewise xQueueAltGenericReceive() is an alternative version of
+ * xQueueGenericReceive().
+ *
+ * The source code that implements the alternative (Alt) API is much
+ * simpler because it executes everything from within a critical section.
+ * This is the approach taken by many other RTOSes, but FreeRTOS.org has the
+ * preferred fully featured API too. The fully featured API has more
+ * complex code that takes longer to execute, but makes much less use of
+ * critical sections. Therefore the alternative API sacrifices interrupt
+ * responsiveness to gain execution speed, whereas the fully featured API
+ * sacrifices execution speed to ensure better interrupt responsiveness.
+ */
+ signed portBASE_TYPE xQueueAltGenericSend(xQueueHandle pxQueue, const void * const pvItemToQueue, portTickType xTicksToWait, portBASE_TYPE xCopyPosition);
+ signed portBASE_TYPE xQueueAltGenericReceive(xQueueHandle pxQueue, void * const pvBuffer, portTickType xTicksToWait, portBASE_TYPE xJustPeeking);
+#define xQueueAltSendToFront( xQueue, pvItemToQueue, xTicksToWait ) xQueueAltGenericSend( xQueue, pvItemToQueue, xTicksToWait, queueSEND_TO_FRONT )
+#define xQueueAltSendToBack( xQueue, pvItemToQueue, xTicksToWait ) xQueueAltGenericSend( xQueue, pvItemToQueue, xTicksToWait, queueSEND_TO_BACK )
+#define xQueueAltReceive( xQueue, pvBuffer, xTicksToWait ) xQueueAltGenericReceive( xQueue, pvBuffer, xTicksToWait, pdFALSE )
+#define xQueueAltPeek( xQueue, pvBuffer, xTicksToWait ) xQueueAltGenericReceive( xQueue, pvBuffer, xTicksToWait, pdTRUE )
+
+ /*
+ * The functions defined above are for passing data to and from tasks. The
+ * functions below are the equivalents for passing data to and from
+ * co-routines.
+ *
+ * These functions are called from the co-routine macro implementation and
+ * should not be called directly from application code. Instead use the macro
+ * wrappers defined within croutine.h.
+ */
+ signed portBASE_TYPE xQueueCRSendFromISR(xQueueHandle pxQueue, const void *pvItemToQueue, signed portBASE_TYPE xCoRoutinePreviouslyWoken);
+ signed portBASE_TYPE xQueueCRReceiveFromISR(xQueueHandle pxQueue, void *pvBuffer, signed portBASE_TYPE *pxTaskWoken);
+ signed portBASE_TYPE xQueueCRSend(xQueueHandle pxQueue, const void *pvItemToQueue, portTickType xTicksToWait);
+ signed portBASE_TYPE xQueueCRReceive(xQueueHandle pxQueue, void *pvBuffer, portTickType xTicksToWait);
+
+ /*
+ * For internal use only. Use xSemaphoreCreateMutex() or
+ * xSemaphoreCreateCounting() instead of calling these functions directly.
+ */
+ xQueueHandle xQueueCreateMutex(void);
+ xQueueHandle xQueueCreateCountingSemaphore(unsigned portBASE_TYPE uxCountValue, unsigned portBASE_TYPE uxInitialCount);
+
+ /*
+ * For internal use only. Use xSemaphoreTakeMutexRecursive() or
+ * xSemaphoreGiveMutexRecursive() instead of calling these functions directly.
+ */
+ portBASE_TYPE xQueueTakeMutexRecursive(xQueueHandle xMutex, portTickType xBlockTime);
+ portBASE_TYPE xQueueGiveMutexRecursive(xQueueHandle xMutex);
+
+ /*
+ * The registry is provided as a means for kernel aware debuggers to
+ * locate queues, semaphores and mutexes. Call vQueueAddToRegistry() add
+ * a queue, semaphore or mutex handle to the registry if you want the handle
+ * to be available to a kernel aware debugger. If you are not using a kernel
+ * aware debugger then this function can be ignored.
+ *
+ * configQUEUE_REGISTRY_SIZE defines the maximum number of handles the
+ * registry can hold. configQUEUE_REGISTRY_SIZE must be greater than 0
+ * within FreeRTOSConfig.h for the registry to be available. Its value
+ * does not effect the number of queues, semaphores and mutexes that can be
+ * created - just the number that the registry can hold.
+ *
+ * @param xQueue The handle of the queue being added to the registry. This
+ * is the handle returned by a call to xQueueCreate(). Semaphore and mutex
+ * handles can also be passed in here.
+ *
+ * @param pcName The name to be associated with the handle. This is the
+ * name that the kernel aware debugger will display.
+ */
+#if configQUEUE_REGISTRY_SIZE > 0
+ void vQueueAddToRegistry(xQueueHandle xQueue, signed char *pcName);
+#endif
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* QUEUE_H */
+
diff --git a/gyro_board/src/usb/FreeRTOS/include/semphr.h b/gyro_board/src/usb/FreeRTOS/include/semphr.h
new file mode 100644
index 0000000..b941518
--- /dev/null
+++ b/gyro_board/src/usb/FreeRTOS/include/semphr.h
@@ -0,0 +1,711 @@
+/*
+ FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.
+
+ ***************************************************************************
+ * *
+ * If you are: *
+ * *
+ * + New to FreeRTOS, *
+ * + Wanting to learn FreeRTOS or multitasking in general quickly *
+ * + Looking for basic training, *
+ * + Wanting to improve your FreeRTOS skills and productivity *
+ * *
+ * then take a look at the FreeRTOS eBook *
+ * *
+ * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
+ * http://www.FreeRTOS.org/Documentation *
+ * *
+ * A pdf reference manual is also available. Both are usually delivered *
+ * to your inbox within 20 minutes to two hours when purchased between 8am *
+ * and 8pm GMT (although please allow up to 24 hours in case of *
+ * exceptional circumstances). Thank you for your support! *
+ * *
+ ***************************************************************************
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
+ ***NOTE*** The exception to the GPL is included to allow you to distribute
+ a combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details. You should have received a copy of the GNU General Public
+ License and the FreeRTOS license exception along with FreeRTOS; if not it
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained
+ by writing to Richard Barry, contact details for whom are available on the
+ FreeRTOS WEB site.
+
+ 1 tab == 4 spaces!
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef INC_FREERTOS_H
+#error "#include FreeRTOS.h" must appear in source files before "#include semphr.h"
+#endif
+
+#ifndef SEMAPHORE_H
+#define SEMAPHORE_H
+
+#include "queue.h"
+
+typedef xQueueHandle xSemaphoreHandle;
+
+#define semBINARY_SEMAPHORE_QUEUE_LENGTH ( ( unsigned char ) 1 )
+#define semSEMAPHORE_QUEUE_ITEM_LENGTH ( ( unsigned char ) 0 )
+#define semGIVE_BLOCK_TIME ( ( portTickType ) 0 )
+
+
+/**
+ * semphr. h
+ * <pre>vSemaphoreCreateBinary( xSemaphoreHandle xSemaphore )</pre>
+ *
+ * <i>Macro</i> that implements a semaphore by using the existing queue mechanism.
+ * The queue length is 1 as this is a binary semaphore. The data size is 0
+ * as we don't want to actually store any data - we just want to know if the
+ * queue is empty or full.
+ *
+ * This type of semaphore can be used for pure synchronisation between tasks or
+ * between an interrupt and a task. The semaphore need not be given back once
+ * obtained, so one task/interrupt can continuously 'give' the semaphore while
+ * another continuously 'takes' the semaphore. For this reason this type of
+ * semaphore does not use a priority inheritance mechanism. For an alternative
+ * that does use priority inheritance see xSemaphoreCreateMutex().
+ *
+ * @param xSemaphore Handle to the created semaphore. Should be of type xSemaphoreHandle.
+ *
+ * Example usage:
+ <pre>
+ xSemaphoreHandle xSemaphore;
+
+ void vATask( void * pvParameters )
+ {
+ // Semaphore cannot be used before a call to vSemaphoreCreateBinary ().
+ // This is a macro so pass the variable in directly.
+ vSemaphoreCreateBinary( xSemaphore );
+
+ if( xSemaphore != NULL )
+ {
+ // The semaphore was created successfully.
+ // The semaphore can now be used.
+ }
+ }
+ </pre>
+ * \defgroup vSemaphoreCreateBinary vSemaphoreCreateBinary
+ * \ingroup Semaphores
+ */
+#define vSemaphoreCreateBinary( xSemaphore ) { \
+ xSemaphore = xQueueCreate( ( unsigned portBASE_TYPE ) 1, semSEMAPHORE_QUEUE_ITEM_LENGTH ); \
+ if( xSemaphore != NULL ) \
+ { \
+ xSemaphoreGive( xSemaphore ); \
+ } \
+ }
+
+/**
+ * semphr. h
+ * <pre>xSemaphoreTake(
+ * xSemaphoreHandle xSemaphore,
+ * portTickType xBlockTime
+ * )</pre>
+ *
+ * <i>Macro</i> to obtain a semaphore. The semaphore must have previously been
+ * created with a call to vSemaphoreCreateBinary(), xSemaphoreCreateMutex() or
+ * xSemaphoreCreateCounting().
+ *
+ * @param xSemaphore A handle to the semaphore being taken - obtained when
+ * the semaphore was created.
+ *
+ * @param xBlockTime The time in ticks to wait for the semaphore to become
+ * available. The macro portTICK_RATE_MS can be used to convert this to a
+ * real time. A block time of zero can be used to poll the semaphore. A block
+ * time of portMAX_DELAY can be used to block indefinitely (provided
+ * INCLUDE_vTaskSuspend is set to 1 in FreeRTOSConfig.h).
+ *
+ * @return pdTRUE if the semaphore was obtained. pdFALSE
+ * if xBlockTime expired without the semaphore becoming available.
+ *
+ * Example usage:
+ <pre>
+ xSemaphoreHandle xSemaphore = NULL;
+
+ // A task that creates a semaphore.
+ void vATask( void * pvParameters )
+ {
+ // Create the semaphore to guard a shared resource.
+ vSemaphoreCreateBinary( xSemaphore );
+ }
+
+ // A task that uses the semaphore.
+ void vAnotherTask( void * pvParameters )
+ {
+ // ... Do other things.
+
+ if( xSemaphore != NULL )
+ {
+ // See if we can obtain the semaphore. If the semaphore is not available
+ // wait 10 ticks to see if it becomes free.
+ if( xSemaphoreTake( xSemaphore, ( portTickType ) 10 ) == pdTRUE )
+ {
+ // We were able to obtain the semaphore and can now access the
+ // shared resource.
+
+ // ...
+
+ // We have finished accessing the shared resource. Release the
+ // semaphore.
+ xSemaphoreGive( xSemaphore );
+ }
+ else
+ {
+ // We could not obtain the semaphore and can therefore not access
+ // the shared resource safely.
+ }
+ }
+ }
+ </pre>
+ * \defgroup xSemaphoreTake xSemaphoreTake
+ * \ingroup Semaphores
+ */
+#define xSemaphoreTake( xSemaphore, xBlockTime ) xQueueGenericReceive( ( xQueueHandle ) xSemaphore, NULL, xBlockTime, pdFALSE )
+
+/**
+ * semphr. h
+ * xSemaphoreTakeRecursive(
+ * xSemaphoreHandle xMutex,
+ * portTickType xBlockTime
+ * )
+ *
+ * <i>Macro</i> to recursively obtain, or 'take', a mutex type semaphore.
+ * The mutex must have previously been created using a call to
+ * xSemaphoreCreateRecursiveMutex();
+ *
+ * configUSE_RECURSIVE_MUTEXES must be set to 1 in FreeRTOSConfig.h for this
+ * macro to be available.
+ *
+ * This macro must not be used on mutexes created using xSemaphoreCreateMutex().
+ *
+ * A mutex used recursively can be 'taken' repeatedly by the owner. The mutex
+ * doesn't become available again until the owner has called
+ * xSemaphoreGiveRecursive() for each successful 'take' request. For example,
+ * if a task successfully 'takes' the same mutex 5 times then the mutex will
+ * not be available to any other task until it has also 'given' the mutex back
+ * exactly five times.
+ *
+ * @param xMutex A handle to the mutex being obtained. This is the
+ * handle returned by xSemaphoreCreateRecursiveMutex();
+ *
+ * @param xBlockTime The time in ticks to wait for the semaphore to become
+ * available. The macro portTICK_RATE_MS can be used to convert this to a
+ * real time. A block time of zero can be used to poll the semaphore. If
+ * the task already owns the semaphore then xSemaphoreTakeRecursive() will
+ * return immediately no matter what the value of xBlockTime.
+ *
+ * @return pdTRUE if the semaphore was obtained. pdFALSE if xBlockTime
+ * expired without the semaphore becoming available.
+ *
+ * Example usage:
+ <pre>
+ xSemaphoreHandle xMutex = NULL;
+
+ // A task that creates a mutex.
+ void vATask( void * pvParameters )
+ {
+ // Create the mutex to guard a shared resource.
+ xMutex = xSemaphoreCreateRecursiveMutex();
+ }
+
+ // A task that uses the mutex.
+ void vAnotherTask( void * pvParameters )
+ {
+ // ... Do other things.
+
+ if( xMutex != NULL )
+ {
+ // See if we can obtain the mutex. If the mutex is not available
+ // wait 10 ticks to see if it becomes free.
+ if( xSemaphoreTakeRecursive( xSemaphore, ( portTickType ) 10 ) == pdTRUE )
+ {
+ // We were able to obtain the mutex and can now access the
+ // shared resource.
+
+ // ...
+ // For some reason due to the nature of the code further calls to
+ // xSemaphoreTakeRecursive() are made on the same mutex. In real
+ // code these would not be just sequential calls as this would make
+ // no sense. Instead the calls are likely to be buried inside
+ // a more complex call structure.
+ xSemaphoreTakeRecursive( xMutex, ( portTickType ) 10 );
+ xSemaphoreTakeRecursive( xMutex, ( portTickType ) 10 );
+
+ // The mutex has now been 'taken' three times, so will not be
+ // available to another task until it has also been given back
+ // three times. Again it is unlikely that real code would have
+ // these calls sequentially, but instead buried in a more complex
+ // call structure. This is just for illustrative purposes.
+ xSemaphoreGiveRecursive( xMutex );
+ xSemaphoreGiveRecursive( xMutex );
+ xSemaphoreGiveRecursive( xMutex );
+
+ // Now the mutex can be taken by other tasks.
+ }
+ else
+ {
+ // We could not obtain the mutex and can therefore not access
+ // the shared resource safely.
+ }
+ }
+ }
+ </pre>
+ * \defgroup xSemaphoreTakeRecursive xSemaphoreTakeRecursive
+ * \ingroup Semaphores
+ */
+#define xSemaphoreTakeRecursive( xMutex, xBlockTime ) xQueueTakeMutexRecursive( xMutex, xBlockTime )
+
+
+/*
+ * xSemaphoreAltTake() is an alternative version of xSemaphoreTake().
+ *
+ * The source code that implements the alternative (Alt) API is much
+ * simpler because it executes everything from within a critical section.
+ * This is the approach taken by many other RTOSes, but FreeRTOS.org has the
+ * preferred fully featured API too. The fully featured API has more
+ * complex code that takes longer to execute, but makes much less use of
+ * critical sections. Therefore the alternative API sacrifices interrupt
+ * responsiveness to gain execution speed, whereas the fully featured API
+ * sacrifices execution speed to ensure better interrupt responsiveness.
+ */
+#define xSemaphoreAltTake( xSemaphore, xBlockTime ) xQueueAltGenericReceive( ( xQueueHandle ) xSemaphore, NULL, xBlockTime, pdFALSE )
+
+/**
+ * semphr. h
+ * <pre>xSemaphoreGive( xSemaphoreHandle xSemaphore )</pre>
+ *
+ * <i>Macro</i> to release a semaphore. The semaphore must have previously been
+ * created with a call to vSemaphoreCreateBinary(), xSemaphoreCreateMutex() or
+ * xSemaphoreCreateCounting(). and obtained using sSemaphoreTake().
+ *
+ * This macro must not be used from an ISR. See xSemaphoreGiveFromISR () for
+ * an alternative which can be used from an ISR.
+ *
+ * This macro must also not be used on semaphores created using
+ * xSemaphoreCreateRecursiveMutex().
+ *
+ * @param xSemaphore A handle to the semaphore being released. This is the
+ * handle returned when the semaphore was created.
+ *
+ * @return pdTRUE if the semaphore was released. pdFALSE if an error occurred.
+ * Semaphores are implemented using queues. An error can occur if there is
+ * no space on the queue to post a message - indicating that the
+ * semaphore was not first obtained correctly.
+ *
+ * Example usage:
+ <pre>
+ xSemaphoreHandle xSemaphore = NULL;
+
+ void vATask( void * pvParameters )
+ {
+ // Create the semaphore to guard a shared resource.
+ vSemaphoreCreateBinary( xSemaphore );
+
+ if( xSemaphore != NULL )
+ {
+ if( xSemaphoreGive( xSemaphore ) != pdTRUE )
+ {
+ // We would expect this call to fail because we cannot give
+ // a semaphore without first "taking" it!
+ }
+
+ // Obtain the semaphore - don't block if the semaphore is not
+ // immediately available.
+ if( xSemaphoreTake( xSemaphore, ( portTickType ) 0 ) )
+ {
+ // We now have the semaphore and can access the shared resource.
+
+ // ...
+
+ // We have finished accessing the shared resource so can free the
+ // semaphore.
+ if( xSemaphoreGive( xSemaphore ) != pdTRUE )
+ {
+ // We would not expect this call to fail because we must have
+ // obtained the semaphore to get here.
+ }
+ }
+ }
+ }
+ </pre>
+ * \defgroup xSemaphoreGive xSemaphoreGive
+ * \ingroup Semaphores
+ */
+#define xSemaphoreGive( xSemaphore ) xQueueGenericSend( ( xQueueHandle ) xSemaphore, NULL, semGIVE_BLOCK_TIME, queueSEND_TO_BACK )
+
+/**
+ * semphr. h
+ * <pre>xSemaphoreGiveRecursive( xSemaphoreHandle xMutex )</pre>
+ *
+ * <i>Macro</i> to recursively release, or 'give', a mutex type semaphore.
+ * The mutex must have previously been created using a call to
+ * xSemaphoreCreateRecursiveMutex();
+ *
+ * configUSE_RECURSIVE_MUTEXES must be set to 1 in FreeRTOSConfig.h for this
+ * macro to be available.
+ *
+ * This macro must not be used on mutexes created using xSemaphoreCreateMutex().
+ *
+ * A mutex used recursively can be 'taken' repeatedly by the owner. The mutex
+ * doesn't become available again until the owner has called
+ * xSemaphoreGiveRecursive() for each successful 'take' request. For example,
+ * if a task successfully 'takes' the same mutex 5 times then the mutex will
+ * not be available to any other task until it has also 'given' the mutex back
+ * exactly five times.
+ *
+ * @param xMutex A handle to the mutex being released, or 'given'. This is the
+ * handle returned by xSemaphoreCreateMutex();
+ *
+ * @return pdTRUE if the semaphore was given.
+ *
+ * Example usage:
+ <pre>
+ xSemaphoreHandle xMutex = NULL;
+
+ // A task that creates a mutex.
+ void vATask( void * pvParameters )
+ {
+ // Create the mutex to guard a shared resource.
+ xMutex = xSemaphoreCreateRecursiveMutex();
+ }
+
+ // A task that uses the mutex.
+ void vAnotherTask( void * pvParameters )
+ {
+ // ... Do other things.
+
+ if( xMutex != NULL )
+ {
+ // See if we can obtain the mutex. If the mutex is not available
+ // wait 10 ticks to see if it becomes free.
+ if( xSemaphoreTakeRecursive( xMutex, ( portTickType ) 10 ) == pdTRUE )
+ {
+ // We were able to obtain the mutex and can now access the
+ // shared resource.
+
+ // ...
+ // For some reason due to the nature of the code further calls to
+ // xSemaphoreTakeRecursive() are made on the same mutex. In real
+ // code these would not be just sequential calls as this would make
+ // no sense. Instead the calls are likely to be buried inside
+ // a more complex call structure.
+ xSemaphoreTakeRecursive( xMutex, ( portTickType ) 10 );
+ xSemaphoreTakeRecursive( xMutex, ( portTickType ) 10 );
+
+ // The mutex has now been 'taken' three times, so will not be
+ // available to another task until it has also been given back
+ // three times. Again it is unlikely that real code would have
+ // these calls sequentially, it would be more likely that the calls
+ // to xSemaphoreGiveRecursive() would be called as a call stack
+ // unwound. This is just for demonstrative purposes.
+ xSemaphoreGiveRecursive( xMutex );
+ xSemaphoreGiveRecursive( xMutex );
+ xSemaphoreGiveRecursive( xMutex );
+
+ // Now the mutex can be taken by other tasks.
+ }
+ else
+ {
+ // We could not obtain the mutex and can therefore not access
+ // the shared resource safely.
+ }
+ }
+ }
+ </pre>
+ * \defgroup xSemaphoreGiveRecursive xSemaphoreGiveRecursive
+ * \ingroup Semaphores
+ */
+#define xSemaphoreGiveRecursive( xMutex ) xQueueGiveMutexRecursive( xMutex )
+
+/*
+ * xSemaphoreAltGive() is an alternative version of xSemaphoreGive().
+ *
+ * The source code that implements the alternative (Alt) API is much
+ * simpler because it executes everything from within a critical section.
+ * This is the approach taken by many other RTOSes, but FreeRTOS.org has the
+ * preferred fully featured API too. The fully featured API has more
+ * complex code that takes longer to execute, but makes much less use of
+ * critical sections. Therefore the alternative API sacrifices interrupt
+ * responsiveness to gain execution speed, whereas the fully featured API
+ * sacrifices execution speed to ensure better interrupt responsiveness.
+ */
+#define xSemaphoreAltGive( xSemaphore ) xQueueAltGenericSend( ( xQueueHandle ) xSemaphore, NULL, semGIVE_BLOCK_TIME, queueSEND_TO_BACK )
+
+/**
+ * semphr. h
+ * <pre>
+ xSemaphoreGiveFromISR(
+ xSemaphoreHandle xSemaphore,
+ signed portBASE_TYPE *pxHigherPriorityTaskWoken
+ )</pre>
+ *
+ * <i>Macro</i> to release a semaphore. The semaphore must have previously been
+ * created with a call to vSemaphoreCreateBinary() or xSemaphoreCreateCounting().
+ *
+ * Mutex type semaphores (those created using a call to xSemaphoreCreateMutex())
+ * must not be used with this macro.
+ *
+ * This macro can be used from an ISR.
+ *
+ * @param xSemaphore A handle to the semaphore being released. This is the
+ * handle returned when the semaphore was created.
+ *
+ * @param pxHigherPriorityTaskWoken xSemaphoreGiveFromISR() will set
+ * *pxHigherPriorityTaskWoken to pdTRUE if giving the semaphore caused a task
+ * to unblock, and the unblocked task has a priority higher than the currently
+ * running task. If xSemaphoreGiveFromISR() sets this value to pdTRUE then
+ * a context switch should be requested before the interrupt is exited.
+ *
+ * @return pdTRUE if the semaphore was successfully given, otherwise errQUEUE_FULL.
+ *
+ * Example usage:
+ <pre>
+ \#define LONG_TIME 0xffff
+ \#define TICKS_TO_WAIT 10
+ xSemaphoreHandle xSemaphore = NULL;
+
+ // Repetitive task.
+ void vATask( void * pvParameters )
+ {
+ for( ;; )
+ {
+ // We want this task to run every 10 ticks of a timer. The semaphore
+ // was created before this task was started.
+
+ // Block waiting for the semaphore to become available.
+ if( xSemaphoreTake( xSemaphore, LONG_TIME ) == pdTRUE )
+ {
+ // It is time to execute.
+
+ // ...
+
+ // We have finished our task. Return to the top of the loop where
+ // we will block on the semaphore until it is time to execute
+ // again. Note when using the semaphore for synchronisation with an
+ // ISR in this manner there is no need to 'give' the semaphore back.
+ }
+ }
+ }
+
+ // Timer ISR
+ void vTimerISR( void * pvParameters )
+ {
+ static unsigned char ucLocalTickCount = 0;
+ static signed portBASE_TYPE xHigherPriorityTaskWoken;
+
+ // A timer tick has occurred.
+
+ // ... Do other time functions.
+
+ // Is it time for vATask () to run?
+ xHigherPriorityTaskWoken = pdFALSE;
+ ucLocalTickCount++;
+ if( ucLocalTickCount >= TICKS_TO_WAIT )
+ {
+ // Unblock the task by releasing the semaphore.
+ xSemaphoreGiveFromISR( xSemaphore, &xHigherPriorityTaskWoken );
+
+ // Reset the count so we release the semaphore again in 10 ticks time.
+ ucLocalTickCount = 0;
+ }
+
+ if( xHigherPriorityTaskWoken != pdFALSE )
+ {
+ // We can force a context switch here. Context switching from an
+ // ISR uses port specific syntax. Check the demo task for your port
+ // to find the syntax required.
+ }
+ }
+ </pre>
+ * \defgroup xSemaphoreGiveFromISR xSemaphoreGiveFromISR
+ * \ingroup Semaphores
+ */
+#define xSemaphoreGiveFromISR( xSemaphore, pxHigherPriorityTaskWoken ) xQueueGenericSendFromISR( ( xQueueHandle ) xSemaphore, NULL, pxHigherPriorityTaskWoken, queueSEND_TO_BACK )
+
+/**
+ * semphr. h
+ * <pre>xSemaphoreHandle xSemaphoreCreateMutex( void )</pre>
+ *
+ * <i>Macro</i> that implements a mutex semaphore by using the existing queue
+ * mechanism.
+ *
+ * Mutexes created using this macro can be accessed using the xSemaphoreTake()
+ * and xSemaphoreGive() macros. The xSemaphoreTakeRecursive() and
+ * xSemaphoreGiveRecursive() macros should not be used.
+ *
+ * This type of semaphore uses a priority inheritance mechanism so a task
+ * 'taking' a semaphore MUST ALWAYS 'give' the semaphore back once the
+ * semaphore it is no longer required.
+ *
+ * Mutex type semaphores cannot be used from within interrupt service routines.
+ *
+ * See vSemaphoreCreateBinary() for an alternative implementation that can be
+ * used for pure synchronisation (where one task or interrupt always 'gives' the
+ * semaphore and another always 'takes' the semaphore) and from within interrupt
+ * service routines.
+ *
+ * @return xSemaphore Handle to the created mutex semaphore. Should be of type
+ * xSemaphoreHandle.
+ *
+ * Example usage:
+ <pre>
+ xSemaphoreHandle xSemaphore;
+
+ void vATask( void * pvParameters )
+ {
+ // Semaphore cannot be used before a call to xSemaphoreCreateMutex().
+ // This is a macro so pass the variable in directly.
+ xSemaphore = xSemaphoreCreateMutex();
+
+ if( xSemaphore != NULL )
+ {
+ // The semaphore was created successfully.
+ // The semaphore can now be used.
+ }
+ }
+ </pre>
+ * \defgroup vSemaphoreCreateMutex vSemaphoreCreateMutex
+ * \ingroup Semaphores
+ */
+#define xSemaphoreCreateMutex() xQueueCreateMutex()
+
+
+/**
+ * semphr. h
+ * <pre>xSemaphoreHandle xSemaphoreCreateRecursiveMutex( void )</pre>
+ *
+ * <i>Macro</i> that implements a recursive mutex by using the existing queue
+ * mechanism.
+ *
+ * Mutexes created using this macro can be accessed using the
+ * xSemaphoreTakeRecursive() and xSemaphoreGiveRecursive() macros. The
+ * xSemaphoreTake() and xSemaphoreGive() macros should not be used.
+ *
+ * A mutex used recursively can be 'taken' repeatedly by the owner. The mutex
+ * doesn't become available again until the owner has called
+ * xSemaphoreGiveRecursive() for each successful 'take' request. For example,
+ * if a task successfully 'takes' the same mutex 5 times then the mutex will
+ * not be available to any other task until it has also 'given' the mutex back
+ * exactly five times.
+ *
+ * This type of semaphore uses a priority inheritance mechanism so a task
+ * 'taking' a semaphore MUST ALWAYS 'give' the semaphore back once the
+ * semaphore it is no longer required.
+ *
+ * Mutex type semaphores cannot be used from within interrupt service routines.
+ *
+ * See vSemaphoreCreateBinary() for an alternative implementation that can be
+ * used for pure synchronisation (where one task or interrupt always 'gives' the
+ * semaphore and another always 'takes' the semaphore) and from within interrupt
+ * service routines.
+ *
+ * @return xSemaphore Handle to the created mutex semaphore. Should be of type
+ * xSemaphoreHandle.
+ *
+ * Example usage:
+ <pre>
+ xSemaphoreHandle xSemaphore;
+
+ void vATask( void * pvParameters )
+ {
+ // Semaphore cannot be used before a call to xSemaphoreCreateMutex().
+ // This is a macro so pass the variable in directly.
+ xSemaphore = xSemaphoreCreateRecursiveMutex();
+
+ if( xSemaphore != NULL )
+ {
+ // The semaphore was created successfully.
+ // The semaphore can now be used.
+ }
+ }
+ </pre>
+ * \defgroup vSemaphoreCreateMutex vSemaphoreCreateMutex
+ * \ingroup Semaphores
+ */
+#define xSemaphoreCreateRecursiveMutex() xQueueCreateMutex()
+
+/**
+ * semphr. h
+ * <pre>xSemaphoreHandle xSemaphoreCreateCounting( unsigned portBASE_TYPE uxMaxCount, unsigned portBASE_TYPE uxInitialCount )</pre>
+ *
+ * <i>Macro</i> that creates a counting semaphore by using the existing
+ * queue mechanism.
+ *
+ * Counting semaphores are typically used for two things:
+ *
+ * 1) Counting events.
+ *
+ * In this usage scenario an event handler will 'give' a semaphore each time
+ * an event occurs (incrementing the semaphore count value), and a handler
+ * task will 'take' a semaphore each time it processes an event
+ * (decrementing the semaphore count value). The count value is therefore
+ * the difference between the number of events that have occurred and the
+ * number that have been processed. In this case it is desirable for the
+ * initial count value to be zero.
+ *
+ * 2) Resource management.
+ *
+ * In this usage scenario the count value indicates the number of resources
+ * available. To obtain control of a resource a task must first obtain a
+ * semaphore - decrementing the semaphore count value. When the count value
+ * reaches zero there are no free resources. When a task finishes with the
+ * resource it 'gives' the semaphore back - incrementing the semaphore count
+ * value. In this case it is desirable for the initial count value to be
+ * equal to the maximum count value, indicating that all resources are free.
+ *
+ * @param uxMaxCount The maximum count value that can be reached. When the
+ * semaphore reaches this value it can no longer be 'given'.
+ *
+ * @param uxInitialCount The count value assigned to the semaphore when it is
+ * created.
+ *
+ * @return Handle to the created semaphore. Null if the semaphore could not be
+ * created.
+ *
+ * Example usage:
+ <pre>
+ xSemaphoreHandle xSemaphore;
+
+ void vATask( void * pvParameters )
+ {
+ xSemaphoreHandle xSemaphore = NULL;
+
+ // Semaphore cannot be used before a call to xSemaphoreCreateCounting().
+ // The max value to which the semaphore can count should be 10, and the
+ // initial value assigned to the count should be 0.
+ xSemaphore = xSemaphoreCreateCounting( 10, 0 );
+
+ if( xSemaphore != NULL )
+ {
+ // The semaphore was created successfully.
+ // The semaphore can now be used.
+ }
+ }
+ </pre>
+ * \defgroup xSemaphoreCreateCounting xSemaphoreCreateCounting
+ * \ingroup Semaphores
+ */
+#define xSemaphoreCreateCounting( uxMaxCount, uxInitialCount ) xQueueCreateCountingSemaphore( uxMaxCount, uxInitialCount )
+
+
+#endif /* SEMAPHORE_H */
+
+
diff --git a/gyro_board/src/usb/FreeRTOS/include/task.h b/gyro_board/src/usb/FreeRTOS/include/task.h
new file mode 100644
index 0000000..a8d8a62
--- /dev/null
+++ b/gyro_board/src/usb/FreeRTOS/include/task.h
@@ -0,0 +1,1261 @@
+/*
+ FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.
+
+ ***************************************************************************
+ * *
+ * If you are: *
+ * *
+ * + New to FreeRTOS, *
+ * + Wanting to learn FreeRTOS or multitasking in general quickly *
+ * + Looking for basic training, *
+ * + Wanting to improve your FreeRTOS skills and productivity *
+ * *
+ * then take a look at the FreeRTOS eBook *
+ * *
+ * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
+ * http://www.FreeRTOS.org/Documentation *
+ * *
+ * A pdf reference manual is also available. Both are usually delivered *
+ * to your inbox within 20 minutes to two hours when purchased between 8am *
+ * and 8pm GMT (although please allow up to 24 hours in case of *
+ * exceptional circumstances). Thank you for your support! *
+ * *
+ ***************************************************************************
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
+ ***NOTE*** The exception to the GPL is included to allow you to distribute
+ a combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details. You should have received a copy of the GNU General Public
+ License and the FreeRTOS license exception along with FreeRTOS; if not it
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained
+ by writing to Richard Barry, contact details for whom are available on the
+ FreeRTOS WEB site.
+
+ 1 tab == 4 spaces!
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+
+#ifndef INC_FREERTOS_H
+#error "#include FreeRTOS.h" must appear in source files before "#include task.h"
+#endif
+
+
+
+#ifndef TASK_H
+#define TASK_H
+
+#include "portable.h"
+#include "list.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+ /*-----------------------------------------------------------
+ * MACROS AND DEFINITIONS
+ *----------------------------------------------------------*/
+
+#define tskKERNEL_VERSION_NUMBER "V6.0.4"
+
+ /**
+ * task. h
+ *
+ * Type by which tasks are referenced. For example, a call to xTaskCreate
+ * returns (via a pointer parameter) an xTaskHandle variable that can then
+ * be used as a parameter to vTaskDelete to delete the task.
+ *
+ * \page xTaskHandle xTaskHandle
+ * \ingroup Tasks
+ */
+ typedef void * xTaskHandle;
+
+ /*
+ * Used internally only.
+ */
+ typedef struct xTIME_OUT {
+ portBASE_TYPE xOverflowCount;
+ portTickType xTimeOnEntering;
+ } xTimeOutType;
+
+ /*
+ * Defines the memory ranges allocated to the task when an MPU is used.
+ */
+ typedef struct xMEMORY_REGION {
+ void *pvBaseAddress;
+ unsigned long ulLengthInBytes;
+ unsigned long ulParameters;
+ } xMemoryRegion;
+
+ /*
+ * Parameters required to create an MPU protected task.
+ */
+ typedef struct xTASK_PARAMTERS {
+ pdTASK_CODE pvTaskCode;
+ const signed char * const pcName;
+ unsigned short usStackDepth;
+ void *pvParameters;
+ unsigned portBASE_TYPE uxPriority;
+ portSTACK_TYPE *puxStackBuffer;
+ xMemoryRegion xRegions[ portNUM_CONFIGURABLE_REGIONS ];
+ } xTaskParameters;
+
+ /*
+ * Defines the priority used by the idle task. This must not be modified.
+ *
+ * \ingroup TaskUtils
+ */
+#define tskIDLE_PRIORITY ( ( unsigned portBASE_TYPE ) 0 )
+
+ /**
+ * task. h
+ *
+ * Macro for forcing a context switch.
+ *
+ * \page taskYIELD taskYIELD
+ * \ingroup SchedulerControl
+ */
+#define taskYIELD() portYIELD()
+
+ /**
+ * task. h
+ *
+ * Macro to mark the start of a critical code region. Preemptive context
+ * switches cannot occur when in a critical region.
+ *
+ * NOTE: This may alter the stack (depending on the portable implementation)
+ * so must be used with care!
+ *
+ * \page taskENTER_CRITICAL taskENTER_CRITICAL
+ * \ingroup SchedulerControl
+ */
+#define taskENTER_CRITICAL() portENTER_CRITICAL()
+
+ /**
+ * task. h
+ *
+ * Macro to mark the end of a critical code region. Preemptive context
+ * switches cannot occur when in a critical region.
+ *
+ * NOTE: This may alter the stack (depending on the portable implementation)
+ * so must be used with care!
+ *
+ * \page taskEXIT_CRITICAL taskEXIT_CRITICAL
+ * \ingroup SchedulerControl
+ */
+#define taskEXIT_CRITICAL() portEXIT_CRITICAL()
+
+ /**
+ * task. h
+ *
+ * Macro to disable all maskable interrupts.
+ *
+ * \page taskDISABLE_INTERRUPTS taskDISABLE_INTERRUPTS
+ * \ingroup SchedulerControl
+ */
+#define taskDISABLE_INTERRUPTS() portDISABLE_INTERRUPTS()
+
+ /**
+ * task. h
+ *
+ * Macro to enable microcontroller interrupts.
+ *
+ * \page taskENABLE_INTERRUPTS taskENABLE_INTERRUPTS
+ * \ingroup SchedulerControl
+ */
+#define taskENABLE_INTERRUPTS() portENABLE_INTERRUPTS()
+
+ /* Definitions returned by xTaskGetSchedulerState(). */
+#define taskSCHEDULER_NOT_STARTED 0
+#define taskSCHEDULER_RUNNING 1
+#define taskSCHEDULER_SUSPENDED 2
+
+ /*-----------------------------------------------------------
+ * TASK CREATION API
+ *----------------------------------------------------------*/
+
+ /**
+ * task. h
+ *<pre>
+ portBASE_TYPE xTaskCreate(
+ pdTASK_CODE pvTaskCode,
+ const char * const pcName,
+ unsigned short usStackDepth,
+ void *pvParameters,
+ unsigned portBASE_TYPE uxPriority,
+ xTaskHandle *pvCreatedTask
+ );</pre>
+ *
+ * Create a new task and add it to the list of tasks that are ready to run.
+ *
+ * xTaskCreate() can only be used to create a task that has unrestricted
+ * access to the entire microcontroller memory map. Systems that include MPU
+ * support can alternatively create an MPU constrained task using
+ * xTaskCreateRestricted().
+ *
+ * @param pvTaskCode Pointer to the task entry function. Tasks
+ * must be implemented to never return (i.e. continuous loop).
+ *
+ * @param pcName A descriptive name for the task. This is mainly used to
+ * facilitate debugging. Max length defined by tskMAX_TASK_NAME_LEN - default
+ * is 16.
+ *
+ * @param usStackDepth The size of the task stack specified as the number of
+ * variables the stack can hold - not the number of bytes. For example, if
+ * the stack is 16 bits wide and usStackDepth is defined as 100, 200 bytes
+ * will be allocated for stack storage.
+ *
+ * @param pvParameters Pointer that will be used as the parameter for the task
+ * being created.
+ *
+ * @param uxPriority The priority at which the task should run. Systems that
+ * include MPU support can optionally create tasks in a privileged (system)
+ * mode by setting bit portPRIVILEGE_BIT of the priority parameter. For
+ * example, to create a privileged task at priority 2 the uxPriority parameter
+ * should be set to ( 2 | portPRIVILEGE_BIT ).
+ *
+ * @param pvCreatedTask Used to pass back a handle by which the created task
+ * can be referenced.
+ *
+ * @return pdPASS if the task was successfully created and added to a ready
+ * list, otherwise an error code defined in the file errors. h
+ *
+ * Example usage:
+ <pre>
+ // Task to be created.
+ void vTaskCode( void * pvParameters )
+ {
+ for( ;; )
+ {
+ // Task code goes here.
+ }
+ }
+
+ // Function that creates a task.
+ void vOtherFunction( void )
+ {
+ static unsigned char ucParameterToPass;
+ xTaskHandle xHandle;
+
+ // Create the task, storing the handle. Note that the passed parameter ucParameterToPass
+ // must exist for the lifetime of the task, so in this case is declared static. If it was just an
+ // an automatic stack variable it might no longer exist, or at least have been corrupted, by the time
+ // the new task attempts to access it.
+ xTaskCreate( vTaskCode, "NAME", STACK_SIZE, &ucParameterToPass, tskIDLE_PRIORITY, &xHandle );
+
+ // Use the handle to delete the task.
+ vTaskDelete( xHandle );
+ }
+ </pre>
+ * \defgroup xTaskCreate xTaskCreate
+ * \ingroup Tasks
+ */
+#define xTaskCreate( pvTaskCode, pcName, usStackDepth, pvParameters, uxPriority, pxCreatedTask ) xTaskGenericCreate( ( pvTaskCode ), ( pcName ), ( usStackDepth ), ( pvParameters ), ( uxPriority ), ( pxCreatedTask ), ( NULL ), ( NULL ) )
+
+ /**
+ * task. h
+ *<pre>
+ portBASE_TYPE xTaskCreateRestricted( xTaskParameters *pxTaskDefinition, xTaskHandle *pxCreatedTask );</pre>
+ *
+ * xTaskCreateRestricted() should only be used in systems that include an MPU
+ * implementation.
+ *
+ * Create a new task and add it to the list of tasks that are ready to run.
+ * The function parameters define the memory regions and associated access
+ * permissions allocated to the task.
+ *
+ * @param pxTaskDefinition Pointer to a structure that contains a member
+ * for each of the normal xTaskCreate() parameters (see the xTaskCreate() API
+ * documentation) plus an optional stack buffer and the memory region
+ * definitions.
+ *
+ * @param pxCreatedTask Used to pass back a handle by which the created task
+ * can be referenced.
+ *
+ * @return pdPASS if the task was successfully created and added to a ready
+ * list, otherwise an error code defined in the file errors. h
+ *
+ * Example usage:
+ <pre>
+ // Create an xTaskParameters structure that defines the task to be created.
+ static const xTaskParameters xCheckTaskParameters =
+ {
+ vATask, // pvTaskCode - the function that implements the task.
+ "ATask", // pcName - just a text name for the task to assist debugging.
+ 100, // usStackDepth - the stack size DEFINED IN WORDS.
+ NULL, // pvParameters - passed into the task function as the function parameters.
+ ( 1UL | portPRIVILEGE_BIT ),// uxPriority - task priority, set the portPRIVILEGE_BIT if the task should run in a privileged state.
+ cStackBuffer,// puxStackBuffer - the buffer to be used as the task stack.
+
+ // xRegions - Allocate up to three separate memory regions for access by
+ // the task, with appropriate access permissions. Different processors have
+ // different memory alignment requirements - refer to the FreeRTOS documentation
+ // for full information.
+ {
+ // Base address Length Parameters
+ { cReadWriteArray, 32, portMPU_REGION_READ_WRITE },
+ { cReadOnlyArray, 32, portMPU_REGION_READ_ONLY },
+ { cPrivilegedOnlyAccessArray, 128, portMPU_REGION_PRIVILEGED_READ_WRITE }
+ }
+ };
+
+ int main( void )
+ {
+ xTaskHandle xHandle;
+
+ // Create a task from the const structure defined above. The task handle
+ // is requested (the second parameter is not NULL) but in this case just for
+ // demonstration purposes as its not actually used.
+ xTaskCreateRestricted( &xRegTest1Parameters, &xHandle );
+
+ // Start the scheduler.
+ vTaskStartScheduler();
+
+ // Will only get here if there was insufficient memory to create the idle
+ // task.
+ for( ;; );
+ }
+ </pre>
+ * \defgroup xTaskCreateRestricted xTaskCreateRestricted
+ * \ingroup Tasks
+ */
+#define xTaskCreateRestricted( x, pxCreatedTask ) xTaskGenericCreate( ((x)->pvTaskCode), ((x)->pcName), ((x)->usStackDepth), ((x)->pvParameters), ((x)->uxPriority), (pxCreatedTask), ((x)->puxStackBuffer), ((x)->xRegions) )
+
+ /**
+ * task. h
+ *<pre>
+ void vTaskAllocateMPURegions( xTaskHandle xTask, const xMemoryRegion * const pxRegions );</pre>
+ *
+ * Memory regions are assigned to a restricted task when the task is created by
+ * a call to xTaskCreateRestricted(). These regions can be redefined using
+ * vTaskAllocateMPURegions().
+ *
+ * @param xTask The handle of the task being updated.
+ *
+ * @param xRegions A pointer to an xMemoryRegion structure that contains the
+ * new memory region definitions.
+ *
+ * Example usage:
+ <pre>
+ // Define an array of xMemoryRegion structures that configures an MPU region
+ // allowing read/write access for 1024 bytes starting at the beginning of the
+ // ucOneKByte array. The other two of the maximum 3 definable regions are
+ // unused so set to zero.
+ static const xMemoryRegion xAltRegions[ portNUM_CONFIGURABLE_REGIONS ] =
+ {
+ // Base address Length Parameters
+ { ucOneKByte, 1024, portMPU_REGION_READ_WRITE },
+ { 0, 0, 0 },
+ { 0, 0, 0 }
+ };
+
+ void vATask( void *pvParameters )
+ {
+ // This task was created such that it has access to certain regions of
+ // memory as defined by the MPU configuration. At some point it is
+ // desired that these MPU regions are replaced with that defined in the
+ // xAltRegions const struct above. Use a call to vTaskAllocateMPURegions()
+ // for this purpose. NULL is used as the task handle to indicate that this
+ // function should modify the MPU regions of the calling task.
+ vTaskAllocateMPURegions( NULL, xAltRegions );
+
+ // Now the task can continue its function, but from this point on can only
+ // access its stack and the ucOneKByte array (unless any other statically
+ // defined or shared regions have been declared elsewhere).
+ }
+ </pre>
+ * \defgroup xTaskCreateRestricted xTaskCreateRestricted
+ * \ingroup Tasks
+ */
+ void vTaskAllocateMPURegions(xTaskHandle xTask, const xMemoryRegion * const pxRegions) PRIVILEGED_FUNCTION;
+
+ /**
+ * task. h
+ * <pre>void vTaskDelete( xTaskHandle pxTask );</pre>
+ *
+ * INCLUDE_vTaskDelete must be defined as 1 for this function to be available.
+ * See the configuration section for more information.
+ *
+ * Remove a task from the RTOS real time kernels management. The task being
+ * deleted will be removed from all ready, blocked, suspended and event lists.
+ *
+ * NOTE: The idle task is responsible for freeing the kernel allocated
+ * memory from tasks that have been deleted. It is therefore important that
+ * the idle task is not starved of microcontroller processing time if your
+ * application makes any calls to vTaskDelete (). Memory allocated by the
+ * task code is not automatically freed, and should be freed before the task
+ * is deleted.
+ *
+ * See the demo application file death.c for sample code that utilises
+ * vTaskDelete ().
+ *
+ * @param pxTask The handle of the task to be deleted. Passing NULL will
+ * cause the calling task to be deleted.
+ *
+ * Example usage:
+ <pre>
+ void vOtherFunction( void )
+ {
+ xTaskHandle xHandle;
+
+ // Create the task, storing the handle.
+ xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHandle );
+
+ // Use the handle to delete the task.
+ vTaskDelete( xHandle );
+ }
+ </pre>
+ * \defgroup vTaskDelete vTaskDelete
+ * \ingroup Tasks
+ */
+ void vTaskDelete(xTaskHandle pxTask) PRIVILEGED_FUNCTION;
+
+
+ /*-----------------------------------------------------------
+ * TASK CONTROL API
+ *----------------------------------------------------------*/
+
+ /**
+ * task. h
+ * <pre>void vTaskDelay( portTickType xTicksToDelay );</pre>
+ *
+ * Delay a task for a given number of ticks. The actual time that the
+ * task remains blocked depends on the tick rate. The constant
+ * portTICK_RATE_MS can be used to calculate real time from the tick
+ * rate - with the resolution of one tick period.
+ *
+ * INCLUDE_vTaskDelay must be defined as 1 for this function to be available.
+ * See the configuration section for more information.
+ *
+ *
+ * vTaskDelay() specifies a time at which the task wishes to unblock relative to
+ * the time at which vTaskDelay() is called. For example, specifying a block
+ * period of 100 ticks will cause the task to unblock 100 ticks after
+ * vTaskDelay() is called. vTaskDelay() does not therefore provide a good method
+ * of controlling the frequency of a cyclical task as the path taken through the
+ * code, as well as other task and interrupt activity, will effect the frequency
+ * at which vTaskDelay() gets called and therefore the time at which the task
+ * next executes. See vTaskDelayUntil() for an alternative API function designed
+ * to facilitate fixed frequency execution. It does this by specifying an
+ * absolute time (rather than a relative time) at which the calling task should
+ * unblock.
+ *
+ * @param xTicksToDelay The amount of time, in tick periods, that
+ * the calling task should block.
+ *
+ * Example usage:
+
+ void vTaskFunction( void * pvParameters )
+ {
+ void vTaskFunction( void * pvParameters )
+ {
+ // Block for 500ms.
+ const portTickType xDelay = 500 / portTICK_RATE_MS;
+
+ for( ;; )
+ {
+ // Simply toggle the LED every 500ms, blocking between each toggle.
+ vToggleLED();
+ vTaskDelay( xDelay );
+ }
+ }
+
+ * \defgroup vTaskDelay vTaskDelay
+ * \ingroup TaskCtrl
+ */
+ void vTaskDelay(portTickType xTicksToDelay) PRIVILEGED_FUNCTION;
+
+ /**
+ * task. h
+ * <pre>void vTaskDelayUntil( portTickType *pxPreviousWakeTime, portTickType xTimeIncrement );</pre>
+ *
+ * INCLUDE_vTaskDelayUntil must be defined as 1 for this function to be available.
+ * See the configuration section for more information.
+ *
+ * Delay a task until a specified time. This function can be used by cyclical
+ * tasks to ensure a constant execution frequency.
+ *
+ * This function differs from vTaskDelay () in one important aspect: vTaskDelay () will
+ * cause a task to block for the specified number of ticks from the time vTaskDelay () is
+ * called. It is therefore difficult to use vTaskDelay () by itself to generate a fixed
+ * execution frequency as the time between a task starting to execute and that task
+ * calling vTaskDelay () may not be fixed [the task may take a different path though the
+ * code between calls, or may get interrupted or preempted a different number of times
+ * each time it executes].
+ *
+ * Whereas vTaskDelay () specifies a wake time relative to the time at which the function
+ * is called, vTaskDelayUntil () specifies the absolute (exact) time at which it wishes to
+ * unblock.
+ *
+ * The constant portTICK_RATE_MS can be used to calculate real time from the tick
+ * rate - with the resolution of one tick period.
+ *
+ * @param pxPreviousWakeTime Pointer to a variable that holds the time at which the
+ * task was last unblocked. The variable must be initialised with the current time
+ * prior to its first use (see the example below). Following this the variable is
+ * automatically updated within vTaskDelayUntil ().
+ *
+ * @param xTimeIncrement The cycle time period. The task will be unblocked at
+ * time *pxPreviousWakeTime + xTimeIncrement. Calling vTaskDelayUntil with the
+ * same xTimeIncrement parameter value will cause the task to execute with
+ * a fixed interface period.
+ *
+ * Example usage:
+ <pre>
+ // Perform an action every 10 ticks.
+ void vTaskFunction( void * pvParameters )
+ {
+ portTickType xLastWakeTime;
+ const portTickType xFrequency = 10;
+
+ // Initialise the xLastWakeTime variable with the current time.
+ xLastWakeTime = xTaskGetTickCount ();
+ for( ;; )
+ {
+ // Wait for the next cycle.
+ vTaskDelayUntil( &xLastWakeTime, xFrequency );
+
+ // Perform action here.
+ }
+ }
+ </pre>
+ * \defgroup vTaskDelayUntil vTaskDelayUntil
+ * \ingroup TaskCtrl
+ */
+ void vTaskDelayUntil(portTickType * const pxPreviousWakeTime, portTickType xTimeIncrement) PRIVILEGED_FUNCTION;
+
+ /**
+ * task. h
+ * <pre>unsigned portBASE_TYPE uxTaskPriorityGet( xTaskHandle pxTask );</pre>
+ *
+ * INCLUDE_xTaskPriorityGet must be defined as 1 for this function to be available.
+ * See the configuration section for more information.
+ *
+ * Obtain the priority of any task.
+ *
+ * @param pxTask Handle of the task to be queried. Passing a NULL
+ * handle results in the priority of the calling task being returned.
+ *
+ * @return The priority of pxTask.
+ *
+ * Example usage:
+ <pre>
+ void vAFunction( void )
+ {
+ xTaskHandle xHandle;
+
+ // Create a task, storing the handle.
+ xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHandle );
+
+ // ...
+
+ // Use the handle to obtain the priority of the created task.
+ // It was created with tskIDLE_PRIORITY, but may have changed
+ // it itself.
+ if( uxTaskPriorityGet( xHandle ) != tskIDLE_PRIORITY )
+ {
+ // The task has changed it's priority.
+ }
+
+ // ...
+
+ // Is our priority higher than the created task?
+ if( uxTaskPriorityGet( xHandle ) < uxTaskPriorityGet( NULL ) )
+ {
+ // Our priority (obtained using NULL handle) is higher.
+ }
+ }
+ </pre>
+ * \defgroup uxTaskPriorityGet uxTaskPriorityGet
+ * \ingroup TaskCtrl
+ */
+ unsigned portBASE_TYPE uxTaskPriorityGet(xTaskHandle pxTask) PRIVILEGED_FUNCTION;
+
+ /**
+ * task. h
+ * <pre>void vTaskPrioritySet( xTaskHandle pxTask, unsigned portBASE_TYPE uxNewPriority );</pre>
+ *
+ * INCLUDE_vTaskPrioritySet must be defined as 1 for this function to be available.
+ * See the configuration section for more information.
+ *
+ * Set the priority of any task.
+ *
+ * A context switch will occur before the function returns if the priority
+ * being set is higher than the currently executing task.
+ *
+ * @param pxTask Handle to the task for which the priority is being set.
+ * Passing a NULL handle results in the priority of the calling task being set.
+ *
+ * @param uxNewPriority The priority to which the task will be set.
+ *
+ * Example usage:
+ <pre>
+ void vAFunction( void )
+ {
+ xTaskHandle xHandle;
+
+ // Create a task, storing the handle.
+ xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHandle );
+
+ // ...
+
+ // Use the handle to raise the priority of the created task.
+ vTaskPrioritySet( xHandle, tskIDLE_PRIORITY + 1 );
+
+ // ...
+
+ // Use a NULL handle to raise our priority to the same value.
+ vTaskPrioritySet( NULL, tskIDLE_PRIORITY + 1 );
+ }
+ </pre>
+ * \defgroup vTaskPrioritySet vTaskPrioritySet
+ * \ingroup TaskCtrl
+ */
+ void vTaskPrioritySet(xTaskHandle pxTask, unsigned portBASE_TYPE uxNewPriority) PRIVILEGED_FUNCTION;
+
+ /**
+ * task. h
+ * <pre>void vTaskSuspend( xTaskHandle pxTaskToSuspend );</pre>
+ *
+ * INCLUDE_vTaskSuspend must be defined as 1 for this function to be available.
+ * See the configuration section for more information.
+ *
+ * Suspend any task. When suspended a task will never get any microcontroller
+ * processing time, no matter what its priority.
+ *
+ * Calls to vTaskSuspend are not accumulative -
+ * i.e. calling vTaskSuspend () twice on the same task still only requires one
+ * call to vTaskResume () to ready the suspended task.
+ *
+ * @param pxTaskToSuspend Handle to the task being suspended. Passing a NULL
+ * handle will cause the calling task to be suspended.
+ *
+ * Example usage:
+ <pre>
+ void vAFunction( void )
+ {
+ xTaskHandle xHandle;
+
+ // Create a task, storing the handle.
+ xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHandle );
+
+ // ...
+
+ // Use the handle to suspend the created task.
+ vTaskSuspend( xHandle );
+
+ // ...
+
+ // The created task will not run during this period, unless
+ // another task calls vTaskResume( xHandle ).
+
+ //...
+
+
+ // Suspend ourselves.
+ vTaskSuspend( NULL );
+
+ // We cannot get here unless another task calls vTaskResume
+ // with our handle as the parameter.
+ }
+ </pre>
+ * \defgroup vTaskSuspend vTaskSuspend
+ * \ingroup TaskCtrl
+ */
+ void vTaskSuspend(xTaskHandle pxTaskToSuspend) PRIVILEGED_FUNCTION;
+
+ /**
+ * task. h
+ * <pre>void vTaskResume( xTaskHandle pxTaskToResume );</pre>
+ *
+ * INCLUDE_vTaskSuspend must be defined as 1 for this function to be available.
+ * See the configuration section for more information.
+ *
+ * Resumes a suspended task.
+ *
+ * A task that has been suspended by one of more calls to vTaskSuspend ()
+ * will be made available for running again by a single call to
+ * vTaskResume ().
+ *
+ * @param pxTaskToResume Handle to the task being readied.
+ *
+ * Example usage:
+ <pre>
+ void vAFunction( void )
+ {
+ xTaskHandle xHandle;
+
+ // Create a task, storing the handle.
+ xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHandle );
+
+ // ...
+
+ // Use the handle to suspend the created task.
+ vTaskSuspend( xHandle );
+
+ // ...
+
+ // The created task will not run during this period, unless
+ // another task calls vTaskResume( xHandle ).
+
+ //...
+
+
+ // Resume the suspended task ourselves.
+ vTaskResume( xHandle );
+
+ // The created task will once again get microcontroller processing
+ // time in accordance with it priority within the system.
+ }
+ </pre>
+ * \defgroup vTaskResume vTaskResume
+ * \ingroup TaskCtrl
+ */
+ void vTaskResume(xTaskHandle pxTaskToResume) PRIVILEGED_FUNCTION;
+
+ /**
+ * task. h
+ * <pre>void xTaskResumeFromISR( xTaskHandle pxTaskToResume );</pre>
+ *
+ * INCLUDE_xTaskResumeFromISR must be defined as 1 for this function to be
+ * available. See the configuration section for more information.
+ *
+ * An implementation of vTaskResume() that can be called from within an ISR.
+ *
+ * A task that has been suspended by one of more calls to vTaskSuspend ()
+ * will be made available for running again by a single call to
+ * xTaskResumeFromISR ().
+ *
+ * @param pxTaskToResume Handle to the task being readied.
+ *
+ * \defgroup vTaskResumeFromISR vTaskResumeFromISR
+ * \ingroup TaskCtrl
+ */
+ portBASE_TYPE xTaskResumeFromISR(xTaskHandle pxTaskToResume) PRIVILEGED_FUNCTION;
+
+ /*-----------------------------------------------------------
+ * SCHEDULER CONTROL
+ *----------------------------------------------------------*/
+
+ /**
+ * task. h
+ * <pre>void vTaskStartScheduler( void );</pre>
+ *
+ * Starts the real time kernel tick processing. After calling the kernel
+ * has control over which tasks are executed and when. This function
+ * does not return until an executing task calls vTaskEndScheduler ().
+ *
+ * At least one task should be created via a call to xTaskCreate ()
+ * before calling vTaskStartScheduler (). The idle task is created
+ * automatically when the first application task is created.
+ *
+ * See the demo application file main.c for an example of creating
+ * tasks and starting the kernel.
+ *
+ * Example usage:
+ <pre>
+ void vAFunction( void )
+ {
+ // Create at least one task before starting the kernel.
+ xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
+
+ // Start the real time kernel with preemption.
+ vTaskStartScheduler ();
+
+ // Will not get here unless a task calls vTaskEndScheduler ()
+ }
+ </pre>
+ *
+ * \defgroup vTaskStartScheduler vTaskStartScheduler
+ * \ingroup SchedulerControl
+ */
+ void vTaskStartScheduler(void) PRIVILEGED_FUNCTION;
+
+ /**
+ * task. h
+ * <pre>void vTaskEndScheduler( void );</pre>
+ *
+ * Stops the real time kernel tick. All created tasks will be automatically
+ * deleted and multitasking (either preemptive or cooperative) will
+ * stop. Execution then resumes from the point where vTaskStartScheduler ()
+ * was called, as if vTaskStartScheduler () had just returned.
+ *
+ * See the demo application file main. c in the demo/PC directory for an
+ * example that uses vTaskEndScheduler ().
+ *
+ * vTaskEndScheduler () requires an exit function to be defined within the
+ * portable layer (see vPortEndScheduler () in port. c for the PC port). This
+ * performs hardware specific operations such as stopping the kernel tick.
+ *
+ * vTaskEndScheduler () will cause all of the resources allocated by the
+ * kernel to be freed - but will not free resources allocated by application
+ * tasks.
+ *
+ * Example usage:
+ <pre>
+ void vTaskCode( void * pvParameters )
+ {
+ for( ;; )
+ {
+ // Task code goes here.
+
+ // At some point we want to end the real time kernel processing
+ // so call ...
+ vTaskEndScheduler ();
+ }
+ }
+
+ void vAFunction( void )
+ {
+ // Create at least one task before starting the kernel.
+ xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
+
+ // Start the real time kernel with preemption.
+ vTaskStartScheduler ();
+
+ // Will only get here when the vTaskCode () task has called
+ // vTaskEndScheduler (). When we get here we are back to single task
+ // execution.
+ }
+ </pre>
+ *
+ * \defgroup vTaskEndScheduler vTaskEndScheduler
+ * \ingroup SchedulerControl
+ */
+ void vTaskEndScheduler(void) PRIVILEGED_FUNCTION;
+
+ /**
+ * task. h
+ * <pre>void vTaskSuspendAll( void );</pre>
+ *
+ * Suspends all real time kernel activity while keeping interrupts (including the
+ * kernel tick) enabled.
+ *
+ * After calling vTaskSuspendAll () the calling task will continue to execute
+ * without risk of being swapped out until a call to xTaskResumeAll () has been
+ * made.
+ *
+ * API functions that have the potential to cause a context switch (for example,
+ * vTaskDelayUntil(), xQueueSend(), etc.) must not be called while the scheduler
+ * is suspended.
+ *
+ * Example usage:
+ <pre>
+ void vTask1( void * pvParameters )
+ {
+ for( ;; )
+ {
+ // Task code goes here.
+
+ // ...
+
+ // At some point the task wants to perform a long operation during
+ // which it does not want to get swapped out. It cannot use
+ // taskENTER_CRITICAL ()/taskEXIT_CRITICAL () as the length of the
+ // operation may cause interrupts to be missed - including the
+ // ticks.
+
+ // Prevent the real time kernel swapping out the task.
+ vTaskSuspendAll ();
+
+ // Perform the operation here. There is no need to use critical
+ // sections as we have all the microcontroller processing time.
+ // During this time interrupts will still operate and the kernel
+ // tick count will be maintained.
+
+ // ...
+
+ // The operation is complete. Restart the kernel.
+ xTaskResumeAll ();
+ }
+ }
+ </pre>
+ * \defgroup vTaskSuspendAll vTaskSuspendAll
+ * \ingroup SchedulerControl
+ */
+ void vTaskSuspendAll(void) PRIVILEGED_FUNCTION;
+
+ /**
+ * task. h
+ * <pre>char xTaskResumeAll( void );</pre>
+ *
+ * Resumes real time kernel activity following a call to vTaskSuspendAll ().
+ * After a call to vTaskSuspendAll () the kernel will take control of which
+ * task is executing at any time.
+ *
+ * @return If resuming the scheduler caused a context switch then pdTRUE is
+ * returned, otherwise pdFALSE is returned.
+ *
+ * Example usage:
+ <pre>
+ void vTask1( void * pvParameters )
+ {
+ for( ;; )
+ {
+ // Task code goes here.
+
+ // ...
+
+ // At some point the task wants to perform a long operation during
+ // which it does not want to get swapped out. It cannot use
+ // taskENTER_CRITICAL ()/taskEXIT_CRITICAL () as the length of the
+ // operation may cause interrupts to be missed - including the
+ // ticks.
+
+ // Prevent the real time kernel swapping out the task.
+ vTaskSuspendAll ();
+
+ // Perform the operation here. There is no need to use critical
+ // sections as we have all the microcontroller processing time.
+ // During this time interrupts will still operate and the real
+ // time kernel tick count will be maintained.
+
+ // ...
+
+ // The operation is complete. Restart the kernel. We want to force
+ // a context switch - but there is no point if resuming the scheduler
+ // caused a context switch already.
+ if( !xTaskResumeAll () )
+ {
+ taskYIELD ();
+ }
+ }
+ }
+ </pre>
+ * \defgroup xTaskResumeAll xTaskResumeAll
+ * \ingroup SchedulerControl
+ */
+ signed portBASE_TYPE xTaskResumeAll(void) PRIVILEGED_FUNCTION;
+
+ /**
+ * task. h
+ * <pre>signed portBASE_TYPE xTaskIsTaskSuspended( xTaskHandle xTask );</pre>
+ *
+ * Utility task that simply returns pdTRUE if the task referenced by xTask is
+ * currently in the Suspended state, or pdFALSE if the task referenced by xTask
+ * is in any other state.
+ *
+ */
+ signed portBASE_TYPE xTaskIsTaskSuspended(xTaskHandle xTask) PRIVILEGED_FUNCTION;
+
+ /*-----------------------------------------------------------
+ * TASK UTILITIES
+ *----------------------------------------------------------*/
+
+ /**
+ * task. h
+ * <PRE>volatile portTickType xTaskGetTickCount( void );</PRE>
+ *
+ * @return The count of ticks since vTaskStartScheduler was called.
+ *
+ * \page xTaskGetTickCount xTaskGetTickCount
+ * \ingroup TaskUtils
+ */
+ portTickType xTaskGetTickCount(void) PRIVILEGED_FUNCTION;
+
+ /**
+ * task. h
+ * <PRE>unsigned short uxTaskGetNumberOfTasks( void );</PRE>
+ *
+ * @return The number of tasks that the real time kernel is currently managing.
+ * This includes all ready, blocked and suspended tasks. A task that
+ * has been deleted but not yet freed by the idle task will also be
+ * included in the count.
+ *
+ * \page uxTaskGetNumberOfTasks uxTaskGetNumberOfTasks
+ * \ingroup TaskUtils
+ */
+ unsigned portBASE_TYPE uxTaskGetNumberOfTasks(void) PRIVILEGED_FUNCTION;
+
+ /**
+ * task. h
+ * <PRE>void vTaskList( char *pcWriteBuffer );</PRE>
+ *
+ * configUSE_TRACE_FACILITY must be defined as 1 for this function to be
+ * available. See the configuration section for more information.
+ *
+ * NOTE: This function will disable interrupts for its duration. It is
+ * not intended for normal application runtime use but as a debug aid.
+ *
+ * Lists all the current tasks, along with their current state and stack
+ * usage high water mark.
+ *
+ * Tasks are reported as blocked ('B'), ready ('R'), deleted ('D') or
+ * suspended ('S').
+ *
+ * @param pcWriteBuffer A buffer into which the above mentioned details
+ * will be written, in ascii form. This buffer is assumed to be large
+ * enough to contain the generated report. Approximately 40 bytes per
+ * task should be sufficient.
+ *
+ * \page vTaskList vTaskList
+ * \ingroup TaskUtils
+ */
+ void vTaskList(signed char *pcWriteBuffer) PRIVILEGED_FUNCTION;
+
+ /**
+ * task. h
+ * <PRE>void vTaskGetRunTimeStats( char *pcWriteBuffer );</PRE>
+ *
+ * configGENERATE_RUN_TIME_STATS must be defined as 1 for this function
+ * to be available. The application must also then provide definitions
+ * for portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() and
+ * portGET_RUN_TIME_COUNTER_VALUE to configure a peripheral timer/counter
+ * and return the timers current count value respectively. The counter
+ * should be at least 10 times the frequency of the tick count.
+ *
+ * NOTE: This function will disable interrupts for its duration. It is
+ * not intended for normal application runtime use but as a debug aid.
+ *
+ * Setting configGENERATE_RUN_TIME_STATS to 1 will result in a total
+ * accumulated execution time being stored for each task. The resolution
+ * of the accumulated time value depends on the frequency of the timer
+ * configured by the portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() macro.
+ * Calling vTaskGetRunTimeStats() writes the total execution time of each
+ * task into a buffer, both as an absolute count value and as a percentage
+ * of the total system execution time.
+ *
+ * @param pcWriteBuffer A buffer into which the execution times will be
+ * written, in ascii form. This buffer is assumed to be large enough to
+ * contain the generated report. Approximately 40 bytes per task should
+ * be sufficient.
+ *
+ * \page vTaskGetRunTimeStats vTaskGetRunTimeStats
+ * \ingroup TaskUtils
+ */
+ void vTaskGetRunTimeStats(signed char *pcWriteBuffer) PRIVILEGED_FUNCTION;
+
+ /**
+ * task. h
+ * <PRE>void vTaskStartTrace( char * pcBuffer, unsigned portBASE_TYPE uxBufferSize );</PRE>
+ *
+ * Starts a real time kernel activity trace. The trace logs the identity of
+ * which task is running when.
+ *
+ * The trace file is stored in binary format. A separate DOS utility called
+ * convtrce.exe is used to convert this into a tab delimited text file which
+ * can be viewed and plotted in a spread sheet.
+ *
+ * @param pcBuffer The buffer into which the trace will be written.
+ *
+ * @param ulBufferSize The size of pcBuffer in bytes. The trace will continue
+ * until either the buffer in full, or ulTaskEndTrace () is called.
+ *
+ * \page vTaskStartTrace vTaskStartTrace
+ * \ingroup TaskUtils
+ */
+ void vTaskStartTrace(signed char * pcBuffer, unsigned long ulBufferSize) PRIVILEGED_FUNCTION;
+
+ /**
+ * task. h
+ * <PRE>unsigned long ulTaskEndTrace( void );</PRE>
+ *
+ * Stops a kernel activity trace. See vTaskStartTrace ().
+ *
+ * @return The number of bytes that have been written into the trace buffer.
+ *
+ * \page usTaskEndTrace usTaskEndTrace
+ * \ingroup TaskUtils
+ */
+ unsigned long ulTaskEndTrace(void) PRIVILEGED_FUNCTION;
+
+ /**
+ * task.h
+ * <PRE>unsigned portBASE_TYPE uxTaskGetStackHighWaterMark( xTaskHandle xTask );</PRE>
+ *
+ * INCLUDE_uxTaskGetStackHighWaterMark must be set to 1 in FreeRTOSConfig.h for
+ * this function to be available.
+ *
+ * Returns the high water mark of the stack associated with xTask. That is,
+ * the minimum free stack space there has been (in bytes) since the task
+ * started. The smaller the returned number the closer the task has come
+ * to overflowing its stack.
+ *
+ * @param xTask Handle of the task associated with the stack to be checked.
+ * Set xTask to NULL to check the stack of the calling task.
+ *
+ * @return The smallest amount of free stack space there has been (in bytes)
+ * since the task referenced by xTask was created.
+ */
+ unsigned portBASE_TYPE uxTaskGetStackHighWaterMark(xTaskHandle xTask) PRIVILEGED_FUNCTION;
+
+ /**
+ * task.h
+ * <pre>void vTaskSetApplicationTaskTag( xTaskHandle xTask, pdTASK_HOOK_CODE pxHookFunction );</pre>
+ *
+ * Sets pxHookFunction to be the task hook function used by the task xTask.
+ * Passing xTask as NULL has the effect of setting the calling tasks hook
+ * function.
+ */
+ void vTaskSetApplicationTaskTag(xTaskHandle xTask, pdTASK_HOOK_CODE pxHookFunction) PRIVILEGED_FUNCTION;
+
+ /**
+ * task.h
+ * <pre>void xTaskGetApplicationTaskTag( xTaskHandle xTask );</pre>
+ *
+ * Returns the pxHookFunction value assigned to the task xTask.
+ */
+ pdTASK_HOOK_CODE xTaskGetApplicationTaskTag(xTaskHandle xTask) PRIVILEGED_FUNCTION;
+
+ /**
+ * task.h
+ * <pre>portBASE_TYPE xTaskCallApplicationTaskHook( xTaskHandle xTask, pdTASK_HOOK_CODE pxHookFunction );</pre>
+ *
+ * Calls the hook function associated with xTask. Passing xTask as NULL has
+ * the effect of calling the Running tasks (the calling task) hook function.
+ *
+ * pvParameter is passed to the hook function for the task to interpret as it
+ * wants.
+ */
+ portBASE_TYPE xTaskCallApplicationTaskHook(xTaskHandle xTask, void *pvParameter) PRIVILEGED_FUNCTION;
+
+
+ /*-----------------------------------------------------------
+ * SCHEDULER INTERNALS AVAILABLE FOR PORTING PURPOSES
+ *----------------------------------------------------------*/
+
+ /*
+ * THIS FUNCTION MUST NOT BE USED FROM APPLICATION CODE. IT IS ONLY
+ * INTENDED FOR USE WHEN IMPLEMENTING A PORT OF THE SCHEDULER AND IS
+ * AN INTERFACE WHICH IS FOR THE EXCLUSIVE USE OF THE SCHEDULER.
+ *
+ * Called from the real time kernel tick (either preemptive or cooperative),
+ * this increments the tick count and checks if any tasks that are blocked
+ * for a finite period required removing from a blocked list and placing on
+ * a ready list.
+ */
+ void vTaskIncrementTick(void) PRIVILEGED_FUNCTION;
+
+ /*
+ * THIS FUNCTION MUST NOT BE USED FROM APPLICATION CODE. IT IS AN
+ * INTERFACE WHICH IS FOR THE EXCLUSIVE USE OF THE SCHEDULER.
+ *
+ * THIS FUNCTION MUST BE CALLED WITH INTERRUPTS DISABLED.
+ *
+ * Removes the calling task from the ready list and places it both
+ * on the list of tasks waiting for a particular event, and the
+ * list of delayed tasks. The task will be removed from both lists
+ * and replaced on the ready list should either the event occur (and
+ * there be no higher priority tasks waiting on the same event) or
+ * the delay period expires.
+ *
+ * @param pxEventList The list containing tasks that are blocked waiting
+ * for the event to occur.
+ *
+ * @param xTicksToWait The maximum amount of time that the task should wait
+ * for the event to occur. This is specified in kernel ticks,the constant
+ * portTICK_RATE_MS can be used to convert kernel ticks into a real time
+ * period.
+ */
+ void vTaskPlaceOnEventList(const xList * const pxEventList, portTickType xTicksToWait) PRIVILEGED_FUNCTION;
+
+ /*
+ * THIS FUNCTION MUST NOT BE USED FROM APPLICATION CODE. IT IS AN
+ * INTERFACE WHICH IS FOR THE EXCLUSIVE USE OF THE SCHEDULER.
+ *
+ * THIS FUNCTION MUST BE CALLED WITH INTERRUPTS DISABLED.
+ *
+ * Removes a task from both the specified event list and the list of blocked
+ * tasks, and places it on a ready queue.
+ *
+ * xTaskRemoveFromEventList () will be called if either an event occurs to
+ * unblock a task, or the block timeout period expires.
+ *
+ * @return pdTRUE if the task being removed has a higher priority than the task
+ * making the call, otherwise pdFALSE.
+ */
+ signed portBASE_TYPE xTaskRemoveFromEventList(const xList * const pxEventList) PRIVILEGED_FUNCTION;
+
+ /*
+ * THIS FUNCTION MUST NOT BE USED FROM APPLICATION CODE. IT IS AN
+ * INTERFACE WHICH IS FOR THE EXCLUSIVE USE OF THE SCHEDULER.
+ *
+ * INCLUDE_vTaskCleanUpResources and INCLUDE_vTaskSuspend must be defined as 1
+ * for this function to be available.
+ * See the configuration section for more information.
+ *
+ * Empties the ready and delayed queues of task control blocks, freeing the
+ * memory allocated for the task control block and task stacks as it goes.
+ */
+ void vTaskCleanUpResources(void) PRIVILEGED_FUNCTION;
+
+ /*
+ * THIS FUNCTION MUST NOT BE USED FROM APPLICATION CODE. IT IS ONLY
+ * INTENDED FOR USE WHEN IMPLEMENTING A PORT OF THE SCHEDULER AND IS
+ * AN INTERFACE WHICH IS FOR THE EXCLUSIVE USE OF THE SCHEDULER.
+ *
+ * Sets the pointer to the current TCB to the TCB of the highest priority task
+ * that is ready to run.
+ */
+ void vTaskSwitchContext(void) PRIVILEGED_FUNCTION;
+
+ /*
+ * Return the handle of the calling task.
+ */
+ xTaskHandle xTaskGetCurrentTaskHandle(void) PRIVILEGED_FUNCTION;
+
+ /*
+ * Capture the current time status for future reference.
+ */
+ void vTaskSetTimeOutState(xTimeOutType * const pxTimeOut) PRIVILEGED_FUNCTION;
+
+ /*
+ * Compare the time status now with that previously captured to see if the
+ * timeout has expired.
+ */
+ portBASE_TYPE xTaskCheckForTimeOut(xTimeOutType * const pxTimeOut, portTickType * const pxTicksToWait) PRIVILEGED_FUNCTION;
+
+ /*
+ * Shortcut used by the queue implementation to prevent unnecessary call to
+ * taskYIELD();
+ */
+ void vTaskMissedYield(void) PRIVILEGED_FUNCTION;
+
+ /*
+ * Returns the scheduler state as taskSCHEDULER_RUNNING,
+ * taskSCHEDULER_NOT_STARTED or taskSCHEDULER_SUSPENDED.
+ */
+ portBASE_TYPE xTaskGetSchedulerState(void) PRIVILEGED_FUNCTION;
+
+ /*
+ * Raises the priority of the mutex holder to that of the calling task should
+ * the mutex holder have a priority less than the calling task.
+ */
+ void vTaskPriorityInherit(xTaskHandle * const pxMutexHolder) PRIVILEGED_FUNCTION;
+
+ /*
+ * Set the priority of a task back to its proper priority in the case that it
+ * inherited a higher priority while it was holding a semaphore.
+ */
+ void vTaskPriorityDisinherit(xTaskHandle * const pxMutexHolder) PRIVILEGED_FUNCTION;
+
+ /*
+ * Generic version of the task creation function which is in turn called by the
+ * xTaskCreate() and xTaskCreateRestricted() macros.
+ */
+ signed portBASE_TYPE xTaskGenericCreate(pdTASK_CODE pvTaskCode, const signed char * const pcName, unsigned short usStackDepth, void *pvParameters, unsigned portBASE_TYPE uxPriority, xTaskHandle *pxCreatedTask, portSTACK_TYPE *puxStackBuffer, const xMemoryRegion * const xRegions) PRIVILEGED_FUNCTION;
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* TASK_H */
+
+
+
diff --git a/gyro_board/src/usb/FreeRTOS/list.c b/gyro_board/src/usb/FreeRTOS/list.c
new file mode 100644
index 0000000..0b88791
--- /dev/null
+++ b/gyro_board/src/usb/FreeRTOS/list.c
@@ -0,0 +1,186 @@
+/*
+ FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.
+
+ ***************************************************************************
+ * *
+ * If you are: *
+ * *
+ * + New to FreeRTOS, *
+ * + Wanting to learn FreeRTOS or multitasking in general quickly *
+ * + Looking for basic training, *
+ * + Wanting to improve your FreeRTOS skills and productivity *
+ * *
+ * then take a look at the FreeRTOS eBook *
+ * *
+ * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
+ * http://www.FreeRTOS.org/Documentation *
+ * *
+ * A pdf reference manual is also available. Both are usually delivered *
+ * to your inbox within 20 minutes to two hours when purchased between 8am *
+ * and 8pm GMT (although please allow up to 24 hours in case of *
+ * exceptional circumstances). Thank you for your support! *
+ * *
+ ***************************************************************************
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
+ ***NOTE*** The exception to the GPL is included to allow you to distribute
+ a combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details. You should have received a copy of the GNU General Public
+ License and the FreeRTOS license exception along with FreeRTOS; if not it
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained
+ by writing to Richard Barry, contact details for whom are available on the
+ FreeRTOS WEB site.
+
+ 1 tab == 4 spaces!
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+
+#include <stdlib.h>
+#include "FreeRTOS.h"
+#include "list.h"
+
+/*-----------------------------------------------------------
+ * PUBLIC LIST API documented in list.h
+ *----------------------------------------------------------*/
+
+void vListInitialise(xList *pxList)
+{
+ /* The list structure contains a list item which is used to mark the
+ end of the list. To initialise the list the list end is inserted
+ as the only list entry. */
+ pxList->pxIndex = (xListItem *) & (pxList->xListEnd);
+
+ /* The list end value is the highest possible value in the list to
+ ensure it remains at the end of the list. */
+ pxList->xListEnd.xItemValue = portMAX_DELAY;
+
+ /* The list end next and previous pointers point to itself so we know
+ when the list is empty. */
+ pxList->xListEnd.pxNext = (xListItem *) & (pxList->xListEnd);
+ pxList->xListEnd.pxPrevious = (xListItem *) & (pxList->xListEnd);
+
+ pxList->uxNumberOfItems = 0;
+}
+/*-----------------------------------------------------------*/
+
+void vListInitialiseItem(xListItem *pxItem)
+{
+ /* Make sure the list item is not recorded as being on a list. */
+ pxItem->pvContainer = NULL;
+}
+/*-----------------------------------------------------------*/
+
+void vListInsertEnd(xList *pxList, xListItem *pxNewListItem)
+{
+ volatile xListItem * pxIndex;
+
+ /* Insert a new list item into pxList, but rather than sort the list,
+ makes the new list item the last item to be removed by a call to
+ pvListGetOwnerOfNextEntry. This means it has to be the item pointed to by
+ the pxIndex member. */
+ pxIndex = pxList->pxIndex;
+
+ pxNewListItem->pxNext = pxIndex->pxNext;
+ pxNewListItem->pxPrevious = pxList->pxIndex;
+ pxIndex->pxNext->pxPrevious = (volatile xListItem *) pxNewListItem;
+ pxIndex->pxNext = (volatile xListItem *) pxNewListItem;
+ pxList->pxIndex = (volatile xListItem *) pxNewListItem;
+
+ /* Remember which list the item is in. */
+ pxNewListItem->pvContainer = (void *) pxList;
+
+ (pxList->uxNumberOfItems)++;
+}
+/*-----------------------------------------------------------*/
+
+void vListInsert(xList *pxList, xListItem *pxNewListItem)
+{
+ volatile xListItem *pxIterator;
+ portTickType xValueOfInsertion;
+
+ /* Insert the new list item into the list, sorted in ulListItem order. */
+ xValueOfInsertion = pxNewListItem->xItemValue;
+
+ /* If the list already contains a list item with the same item value then
+ the new list item should be placed after it. This ensures that TCB's which
+ are stored in ready lists (all of which have the same ulListItem value)
+ get an equal share of the CPU. However, if the xItemValue is the same as
+ the back marker the iteration loop below will not end. This means we need
+ to guard against this by checking the value first and modifying the
+ algorithm slightly if necessary. */
+ if (xValueOfInsertion == portMAX_DELAY) {
+ pxIterator = pxList->xListEnd.pxPrevious;
+ } else {
+ /* *** NOTE ***********************************************************
+ If you find your application is crashing here then likely causes are:
+ 1) Stack overflow -
+ see http://www.freertos.org/Stacks-and-stack-overflow-checking.html
+ 2) Incorrect interrupt priority assignment, especially on Cortex M3
+ parts where numerically high priority values denote low actual
+ interrupt priories, which can seem counter intuitive. See
+ configMAX_SYSCALL_INTERRUPT_PRIORITY on http://www.freertos.org/a00110.html
+ 3) Calling an API function from within a critical section or when
+ the scheduler is suspended.
+ 4) Using a queue or semaphore before it has been initialised or
+ before the scheduler has been started (are interrupts firing
+ before vTaskStartScheduler() has been called?).
+ See http://www.freertos.org/FAQHelp.html for more tips.
+ **********************************************************************/
+
+ for (pxIterator = (xListItem *) & (pxList->xListEnd); pxIterator->pxNext->xItemValue <= xValueOfInsertion; pxIterator = pxIterator->pxNext) {
+ /* There is nothing to do here, we are just iterating to the
+ wanted insertion position. */
+ }
+ }
+
+ pxNewListItem->pxNext = pxIterator->pxNext;
+ pxNewListItem->pxNext->pxPrevious = (volatile xListItem *) pxNewListItem;
+ pxNewListItem->pxPrevious = pxIterator;
+ pxIterator->pxNext = (volatile xListItem *) pxNewListItem;
+
+ /* Remember which list the item is in. This allows fast removal of the
+ item later. */
+ pxNewListItem->pvContainer = (void *) pxList;
+
+ (pxList->uxNumberOfItems)++;
+}
+/*-----------------------------------------------------------*/
+
+void vListRemove(xListItem *pxItemToRemove)
+{
+ xList * pxList;
+
+ pxItemToRemove->pxNext->pxPrevious = pxItemToRemove->pxPrevious;
+ pxItemToRemove->pxPrevious->pxNext = pxItemToRemove->pxNext;
+
+ /* The list item knows which list it is in. Obtain the list from the list
+ item. */
+ pxList = (xList *) pxItemToRemove->pvContainer;
+
+ /* Make sure the index is left pointing to a valid item. */
+ if (pxList->pxIndex == pxItemToRemove) {
+ pxList->pxIndex = pxItemToRemove->pxPrevious;
+ }
+
+ pxItemToRemove->pvContainer = NULL;
+ (pxList->uxNumberOfItems)--;
+}
+/*-----------------------------------------------------------*/
+
diff --git a/gyro_board/src/usb/FreeRTOS/portable/GCC/ARM_CM3/port.c b/gyro_board/src/usb/FreeRTOS/portable/GCC/ARM_CM3/port.c
new file mode 100644
index 0000000..fb55c72
--- /dev/null
+++ b/gyro_board/src/usb/FreeRTOS/portable/GCC/ARM_CM3/port.c
@@ -0,0 +1,280 @@
+/*
+ FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.
+
+ ***************************************************************************
+ * *
+ * If you are: *
+ * *
+ * + New to FreeRTOS, *
+ * + Wanting to learn FreeRTOS or multitasking in general quickly *
+ * + Looking for basic training, *
+ * + Wanting to improve your FreeRTOS skills and productivity *
+ * *
+ * then take a look at the FreeRTOS eBook *
+ * *
+ * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
+ * http://www.FreeRTOS.org/Documentation *
+ * *
+ * A pdf reference manual is also available. Both are usually delivered *
+ * to your inbox within 20 minutes to two hours when purchased between 8am *
+ * and 8pm GMT (although please allow up to 24 hours in case of *
+ * exceptional circumstances). Thank you for your support! *
+ * *
+ ***************************************************************************
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
+ ***NOTE*** The exception to the GPL is included to allow you to distribute
+ a combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details. You should have received a copy of the GNU General Public
+ License and the FreeRTOS license exception along with FreeRTOS; if not it
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained
+ by writing to Richard Barry, contact details for whom are available on the
+ FreeRTOS WEB site.
+
+ 1 tab == 4 spaces!
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+/*-----------------------------------------------------------
+ * Implementation of functions defined in portable.h for the ARM CM3 port.
+ *----------------------------------------------------------*/
+
+/* Scheduler includes. */
+#include "FreeRTOS.h"
+#include "task.h"
+
+/* For backward compatibility, ensure configKERNEL_INTERRUPT_PRIORITY is
+defined. The value should also ensure backward compatibility.
+FreeRTOS.org versions prior to V4.4.0 did not include this definition. */
+#ifndef configKERNEL_INTERRUPT_PRIORITY
+#define configKERNEL_INTERRUPT_PRIORITY 255
+#endif
+
+/* Constants required to manipulate the NVIC. */
+#define portNVIC_SYSTICK_CTRL ( ( volatile unsigned long *) 0xe000e010 )
+#define portNVIC_SYSTICK_LOAD ( ( volatile unsigned long *) 0xe000e014 )
+#define portNVIC_INT_CTRL ( ( volatile unsigned long *) 0xe000ed04 )
+#define portNVIC_SYSPRI2 ( ( volatile unsigned long *) 0xe000ed20 )
+#define portNVIC_SYSTICK_CLK 0x00000004
+#define portNVIC_SYSTICK_INT 0x00000002
+#define portNVIC_SYSTICK_ENABLE 0x00000001
+#define portNVIC_PENDSVSET 0x10000000
+#define portNVIC_PENDSV_PRI ( ( ( unsigned long ) configKERNEL_INTERRUPT_PRIORITY ) << 16 )
+#define portNVIC_SYSTICK_PRI ( ( ( unsigned long ) configKERNEL_INTERRUPT_PRIORITY ) << 24 )
+
+/* Constants required to set up the initial stack. */
+#define portINITIAL_XPSR ( 0x01000000 )
+
+/* The priority used by the kernel is assigned to a variable to make access
+from inline assembler easier. */
+const unsigned long ulKernelPriority = configKERNEL_INTERRUPT_PRIORITY;
+
+/* Each task maintains its own interrupt status in the critical nesting
+variable. */
+static unsigned portBASE_TYPE uxCriticalNesting = 0xaaaaaaaa;
+
+/*
+ * Setup the timer to generate the tick interrupts.
+ */
+static void prvSetupTimerInterrupt(void);
+
+/*
+ * Exception handlers.
+ */
+void xPortPendSVHandler(void) __attribute__((naked));
+void xPortSysTickHandler(void);
+void vPortSVCHandler(void) __attribute__((naked));
+
+/*
+ * Start first task is a separate function so it can be tested in isolation.
+ */
+void vPortStartFirstTask(void) __attribute__((naked));
+
+/*-----------------------------------------------------------*/
+
+/*
+ * See header file for description.
+ */
+portSTACK_TYPE *pxPortInitialiseStack(portSTACK_TYPE *pxTopOfStack, pdTASK_CODE pxCode, void *pvParameters)
+{
+ /* Simulate the stack frame as it would be created by a context switch
+ interrupt. */
+ pxTopOfStack--; /* Offset added to account for the way the MCU uses the stack on entry/exit of interrupts. */
+ *pxTopOfStack = portINITIAL_XPSR; /* xPSR */
+ pxTopOfStack--;
+ *pxTopOfStack = (portSTACK_TYPE) pxCode; /* PC */
+ pxTopOfStack--;
+ *pxTopOfStack = 0; /* LR */
+ pxTopOfStack -= 5; /* R12, R3, R2 and R1. */
+ *pxTopOfStack = (portSTACK_TYPE) pvParameters; /* R0 */
+ pxTopOfStack -= 8; /* R11, R10, R9, R8, R7, R6, R5 and R4. */
+
+ return pxTopOfStack;
+}
+/*-----------------------------------------------------------*/
+
+void vPortSVCHandler(void)
+{
+ __asm volatile(
+ " ldr r3, pxCurrentTCBConst2 \n" /* Restore the context. */
+ " ldr r1, [r3] \n" /* Use pxCurrentTCBConst to get the pxCurrentTCB address. */
+ " ldr r0, [r1] \n" /* The first item in pxCurrentTCB is the task top of stack. */
+ " ldmia r0!, {r4-r11} \n" /* Pop the registers that are not automatically saved on exception entry and the critical nesting count. */
+ " msr psp, r0 \n" /* Restore the task stack pointer. */
+ " mov r0, #0 \n"
+ " msr basepri, r0 \n"
+ " orr r14, #0xd \n"
+ " bx r14 \n"
+ " \n"
+ " .align 2 \n"
+ "pxCurrentTCBConst2: .word pxCurrentTCB \n"
+ );
+}
+/*-----------------------------------------------------------*/
+
+void vPortStartFirstTask(void)
+{
+ __asm volatile(
+ " ldr r0, =0xE000ED08 \n" /* Use the NVIC offset register to locate the stack. */
+ " ldr r0, [r0] \n"
+ " ldr r0, [r0] \n"
+ " msr msp, r0 \n" /* Set the msp back to the start of the stack. */
+ " svc 0 \n" /* System call to start first task. */
+ );
+}
+/*-----------------------------------------------------------*/
+
+/*
+ * See header file for description.
+ */
+portBASE_TYPE xPortStartScheduler(void)
+{
+ /* Make PendSV, CallSV and SysTick the same priroity as the kernel. */
+ *(portNVIC_SYSPRI2) |= portNVIC_PENDSV_PRI;
+ *(portNVIC_SYSPRI2) |= portNVIC_SYSTICK_PRI;
+
+ /* Start the timer that generates the tick ISR. Interrupts are disabled
+ here already. */
+ prvSetupTimerInterrupt();
+
+ /* Initialise the critical nesting count ready for the first task. */
+ uxCriticalNesting = 0;
+
+ /* Start the first task. */
+ vPortStartFirstTask();
+
+ /* Should not get here! */
+ return 0;
+}
+/*-----------------------------------------------------------*/
+
+void vPortEndScheduler(void)
+{
+ /* It is unlikely that the CM3 port will require this function as there
+ is nothing to return to. */
+}
+/*-----------------------------------------------------------*/
+
+void vPortYieldFromISR(void)
+{
+ /* Set a PendSV to request a context switch. */
+ *(portNVIC_INT_CTRL) = portNVIC_PENDSVSET;
+}
+/*-----------------------------------------------------------*/
+
+void vPortEnterCritical(void)
+{
+ portDISABLE_INTERRUPTS();
+ uxCriticalNesting++;
+}
+/*-----------------------------------------------------------*/
+
+void vPortExitCritical(void)
+{
+ uxCriticalNesting--;
+ if (uxCriticalNesting == 0) {
+ portENABLE_INTERRUPTS();
+ }
+}
+/*-----------------------------------------------------------*/
+
+void xPortPendSVHandler(void)
+{
+ /* This is a naked function. */
+
+ __asm volatile
+ (
+ " mrs r0, psp \n"
+ " \n"
+ " ldr r3, pxCurrentTCBConst \n" /* Get the location of the current TCB. */
+ " ldr r2, [r3] \n"
+ " \n"
+ " stmdb r0!, {r4-r11} \n" /* Save the remaining registers. */
+ " str r0, [r2] \n" /* Save the new top of stack into the first member of the TCB. */
+ " \n"
+ " stmdb sp!, {r3, r14} \n"
+ " mov r0, %0 \n"
+ " msr basepri, r0 \n"
+ " bl vTaskSwitchContext \n"
+ " mov r0, #0 \n"
+ " msr basepri, r0 \n"
+ " ldmia sp!, {r3, r14} \n"
+ " \n" /* Restore the context, including the critical nesting count. */
+ " ldr r1, [r3] \n"
+ " ldr r0, [r1] \n" /* The first item in pxCurrentTCB is the task top of stack. */
+ " ldmia r0!, {r4-r11} \n" /* Pop the registers. */
+ " msr psp, r0 \n"
+ " bx r14 \n"
+ " \n"
+ " .align 2 \n"
+ "pxCurrentTCBConst: .word pxCurrentTCB \n"
+ ::"i"(configMAX_SYSCALL_INTERRUPT_PRIORITY)
+ );
+}
+/*-----------------------------------------------------------*/
+
+void xPortSysTickHandler(void)
+{
+ unsigned long ulDummy;
+
+ /* If using preemption, also force a context switch. */
+#if configUSE_PREEMPTION == 1
+ *(portNVIC_INT_CTRL) = portNVIC_PENDSVSET;
+#endif
+
+ ulDummy = portSET_INTERRUPT_MASK_FROM_ISR();
+ {
+ vTaskIncrementTick();
+ }
+ portCLEAR_INTERRUPT_MASK_FROM_ISR(ulDummy);
+}
+/*-----------------------------------------------------------*/
+
+/*
+ * Setup the systick timer to generate the tick interrupts at the required
+ * frequency.
+ */
+void prvSetupTimerInterrupt(void)
+{
+ /* Configure SysTick to interrupt at the requested rate. */
+ *(portNVIC_SYSTICK_LOAD) = (configCPU_CLOCK_HZ / configTICK_RATE_HZ) - 1UL;
+ *(portNVIC_SYSTICK_CTRL) = portNVIC_SYSTICK_CLK | portNVIC_SYSTICK_INT | portNVIC_SYSTICK_ENABLE;
+}
+/*-----------------------------------------------------------*/
+
diff --git a/gyro_board/src/usb/FreeRTOS/portable/GCC/ARM_CM3/portmacro.h b/gyro_board/src/usb/FreeRTOS/portable/GCC/ARM_CM3/portmacro.h
new file mode 100644
index 0000000..35c57ac
--- /dev/null
+++ b/gyro_board/src/usb/FreeRTOS/portable/GCC/ARM_CM3/portmacro.h
@@ -0,0 +1,157 @@
+/*
+ FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.
+
+ ***************************************************************************
+ * *
+ * If you are: *
+ * *
+ * + New to FreeRTOS, *
+ * + Wanting to learn FreeRTOS or multitasking in general quickly *
+ * + Looking for basic training, *
+ * + Wanting to improve your FreeRTOS skills and productivity *
+ * *
+ * then take a look at the FreeRTOS eBook *
+ * *
+ * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
+ * http://www.FreeRTOS.org/Documentation *
+ * *
+ * A pdf reference manual is also available. Both are usually delivered *
+ * to your inbox within 20 minutes to two hours when purchased between 8am *
+ * and 8pm GMT (although please allow up to 24 hours in case of *
+ * exceptional circumstances). Thank you for your support! *
+ * *
+ ***************************************************************************
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
+ ***NOTE*** The exception to the GPL is included to allow you to distribute
+ a combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details. You should have received a copy of the GNU General Public
+ License and the FreeRTOS license exception along with FreeRTOS; if not it
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained
+ by writing to Richard Barry, contact details for whom are available on the
+ FreeRTOS WEB site.
+
+ 1 tab == 4 spaces!
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+
+#ifndef PORTMACRO_H
+#define PORTMACRO_H
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+ /*-----------------------------------------------------------
+ * Port specific definitions.
+ *
+ * The settings in this file configure FreeRTOS correctly for the
+ * given hardware and compiler.
+ *
+ * These settings should not be altered.
+ *-----------------------------------------------------------
+ */
+
+ /* Type definitions. */
+#define portCHAR char
+#define portFLOAT float
+#define portDOUBLE double
+#define portLONG long
+#define portSHORT short
+#define portSTACK_TYPE unsigned portLONG
+#define portBASE_TYPE long
+
+#if( configUSE_16_BIT_TICKS == 1 )
+ typedef unsigned portSHORT portTickType;
+#define portMAX_DELAY ( portTickType ) 0xffff
+#else
+ typedef unsigned portLONG portTickType;
+#define portMAX_DELAY ( portTickType ) 0xffffffff
+#endif
+ /*-----------------------------------------------------------*/
+
+ /* Architecture specifics. */
+#define portSTACK_GROWTH ( -1 )
+#define portTICK_RATE_MS ( ( portTickType ) 1000 / configTICK_RATE_HZ )
+#define portBYTE_ALIGNMENT 8
+ /*-----------------------------------------------------------*/
+
+
+ /* Scheduler utilities. */
+ extern void vPortYieldFromISR(void);
+
+#define portYIELD() vPortYieldFromISR()
+
+#define portEND_SWITCHING_ISR( xSwitchRequired ) if( xSwitchRequired ) vPortYieldFromISR()
+ /*-----------------------------------------------------------*/
+
+
+ /* Critical section management. */
+
+ /*
+ * Set basepri to portMAX_SYSCALL_INTERRUPT_PRIORITY without effecting other
+ * registers. r0 is clobbered.
+ */
+#define portSET_INTERRUPT_MASK() \
+ __asm volatile \
+ ( \
+ " mov r0, %0 \n" \
+ " msr basepri, r0 \n" \
+ ::"i"(configMAX_SYSCALL_INTERRUPT_PRIORITY):"r0" \
+ )
+
+ /*
+ * Set basepri back to 0 without effective other registers.
+ * r0 is clobbered.
+ */
+#define portCLEAR_INTERRUPT_MASK() \
+ __asm volatile \
+ ( \
+ " mov r0, #0 \n" \
+ " msr basepri, r0 \n" \
+ :::"r0" \
+ )
+
+#define portSET_INTERRUPT_MASK_FROM_ISR() 0;portSET_INTERRUPT_MASK()
+#define portCLEAR_INTERRUPT_MASK_FROM_ISR(x) portCLEAR_INTERRUPT_MASK();(void)x
+
+
+ extern void vPortEnterCritical(void);
+ extern void vPortExitCritical(void);
+
+#define portDISABLE_INTERRUPTS() portSET_INTERRUPT_MASK()
+#define portENABLE_INTERRUPTS() portCLEAR_INTERRUPT_MASK()
+#define portENTER_CRITICAL() vPortEnterCritical()
+#define portEXIT_CRITICAL() vPortExitCritical()
+ /*-----------------------------------------------------------*/
+
+ /* Task function macros as described on the FreeRTOS.org WEB site. */
+#define portTASK_FUNCTION_PROTO( vFunction, pvParameters ) void vFunction( void *pvParameters )
+#define portTASK_FUNCTION( vFunction, pvParameters ) void vFunction( void *pvParameters )
+
+#define portNOP()
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* PORTMACRO_H */
+
diff --git a/gyro_board/src/usb/FreeRTOS/portable/MemMang/heap_1.c b/gyro_board/src/usb/FreeRTOS/portable/MemMang/heap_1.c
new file mode 100644
index 0000000..5ccda33
--- /dev/null
+++ b/gyro_board/src/usb/FreeRTOS/portable/MemMang/heap_1.c
@@ -0,0 +1,152 @@
+/*
+ FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.
+
+ ***************************************************************************
+ * *
+ * If you are: *
+ * *
+ * + New to FreeRTOS, *
+ * + Wanting to learn FreeRTOS or multitasking in general quickly *
+ * + Looking for basic training, *
+ * + Wanting to improve your FreeRTOS skills and productivity *
+ * *
+ * then take a look at the FreeRTOS eBook *
+ * *
+ * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
+ * http://www.FreeRTOS.org/Documentation *
+ * *
+ * A pdf reference manual is also available. Both are usually delivered *
+ * to your inbox within 20 minutes to two hours when purchased between 8am *
+ * and 8pm GMT (although please allow up to 24 hours in case of *
+ * exceptional circumstances). Thank you for your support! *
+ * *
+ ***************************************************************************
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
+ ***NOTE*** The exception to the GPL is included to allow you to distribute
+ a combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details. You should have received a copy of the GNU General Public
+ License and the FreeRTOS license exception along with FreeRTOS; if not it
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained
+ by writing to Richard Barry, contact details for whom are available on the
+ FreeRTOS WEB site.
+
+ 1 tab == 4 spaces!
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+
+/*
+ * The simplest possible implementation of pvPortMalloc(). Note that this
+ * implementation does NOT allow allocated memory to be freed again.
+ *
+ * See heap_2.c and heap_3.c for alternative implementations, and the memory
+ * management pages of http://www.FreeRTOS.org for more information.
+ */
+#include <stdlib.h>
+
+/* Defining MPU_WRAPPERS_INCLUDED_FROM_API_FILE prevents task.h from redefining
+all the API functions to use the MPU wrappers. That should only be done when
+task.h is included from an application file. */
+#define MPU_WRAPPERS_INCLUDED_FROM_API_FILE
+
+#include "FreeRTOS.h"
+#include "task.h"
+
+#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE
+
+/* Allocate the memory for the heap. The struct is used to force byte
+alignment without using any non-portable code. */
+static union xRTOS_HEAP
+{
+ #if portBYTE_ALIGNMENT == 8
+ volatile portDOUBLE dDummy;
+ #else
+ volatile unsigned long ulDummy;
+ #endif
+ unsigned char ucHeap[ configTOTAL_HEAP_SIZE ];
+} xHeap;
+
+static size_t xNextFreeByte = ( size_t ) 0;
+/*-----------------------------------------------------------*/
+
+void *pvPortMalloc( size_t xWantedSize )
+{
+void *pvReturn = NULL;
+
+ /* Ensure that blocks are always aligned to the required number of bytes. */
+ #if portBYTE_ALIGNMENT != 1
+ if( xWantedSize & portBYTE_ALIGNMENT_MASK )
+ {
+ /* Byte alignment required. */
+ xWantedSize += ( portBYTE_ALIGNMENT - ( xWantedSize & portBYTE_ALIGNMENT_MASK ) );
+ }
+ #endif
+
+ vTaskSuspendAll();
+ {
+ /* Check there is enough room left for the allocation. */
+ if( ( ( xNextFreeByte + xWantedSize ) < configTOTAL_HEAP_SIZE ) &&
+ ( ( xNextFreeByte + xWantedSize ) > xNextFreeByte ) )/* Check for overflow. */
+ {
+ /* Return the next free byte then increment the index past this
+ block. */
+ pvReturn = &( xHeap.ucHeap[ xNextFreeByte ] );
+ xNextFreeByte += xWantedSize;
+ }
+ }
+ xTaskResumeAll();
+
+ #if( configUSE_MALLOC_FAILED_HOOK == 1 )
+ {
+ if( pvReturn == NULL )
+ {
+ extern void vApplicationMallocFailedHook( void );
+ vApplicationMallocFailedHook();
+ }
+ }
+ #endif
+
+ return pvReturn;
+}
+/*-----------------------------------------------------------*/
+
+void vPortFree( void *pv )
+{
+ /* Memory cannot be freed using this scheme. See heap_2.c and heap_3.c
+ for alternative implementations, and the memory management pages of
+ http://www.FreeRTOS.org for more information. */
+ ( void ) pv;
+}
+/*-----------------------------------------------------------*/
+
+void vPortInitialiseBlocks( void )
+{
+ /* Only required when static memory is not cleared. */
+ xNextFreeByte = ( size_t ) 0;
+}
+/*-----------------------------------------------------------*/
+
+size_t xPortGetFreeHeapSize( void )
+{
+ return ( configTOTAL_HEAP_SIZE - xNextFreeByte );
+}
+
+
+
diff --git a/gyro_board/src/usb/FreeRTOS/portable/MemMang/heap_2.c b/gyro_board/src/usb/FreeRTOS/portable/MemMang/heap_2.c
new file mode 100644
index 0000000..77e13b8
--- /dev/null
+++ b/gyro_board/src/usb/FreeRTOS/portable/MemMang/heap_2.c
@@ -0,0 +1,278 @@
+/*
+ FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.
+
+ ***************************************************************************
+ * *
+ * If you are: *
+ * *
+ * + New to FreeRTOS, *
+ * + Wanting to learn FreeRTOS or multitasking in general quickly *
+ * + Looking for basic training, *
+ * + Wanting to improve your FreeRTOS skills and productivity *
+ * *
+ * then take a look at the FreeRTOS eBook *
+ * *
+ * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
+ * http://www.FreeRTOS.org/Documentation *
+ * *
+ * A pdf reference manual is also available. Both are usually delivered *
+ * to your inbox within 20 minutes to two hours when purchased between 8am *
+ * and 8pm GMT (although please allow up to 24 hours in case of *
+ * exceptional circumstances). Thank you for your support! *
+ * *
+ ***************************************************************************
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
+ ***NOTE*** The exception to the GPL is included to allow you to distribute
+ a combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details. You should have received a copy of the GNU General Public
+ License and the FreeRTOS license exception along with FreeRTOS; if not it
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained
+ by writing to Richard Barry, contact details for whom are available on the
+ FreeRTOS WEB site.
+
+ 1 tab == 4 spaces!
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+/*
+ * A sample implementation of pvPortMalloc() and vPortFree() that permits
+ * allocated blocks to be freed, but does not combine adjacent free blocks
+ * into a single larger block.
+ *
+ * See heap_1.c and heap_3.c for alternative implementations, and the memory
+ * management pages of http://www.FreeRTOS.org for more information.
+ */
+#include <stdlib.h>
+
+/* Defining MPU_WRAPPERS_INCLUDED_FROM_API_FILE prevents task.h from redefining
+all the API functions to use the MPU wrappers. That should only be done when
+task.h is included from an application file. */
+#define MPU_WRAPPERS_INCLUDED_FROM_API_FILE
+
+#include "FreeRTOS.h"
+#include "task.h"
+
+#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE
+
+/* Allocate the memory for the heap. The struct is used to force byte
+alignment without using any non-portable code. */
+static union xRTOS_HEAP
+{
+ #if portBYTE_ALIGNMENT == 8
+ volatile portDOUBLE dDummy;
+ #else
+ volatile unsigned long ulDummy;
+ #endif
+ unsigned char ucHeap[ configTOTAL_HEAP_SIZE ];
+} xHeap;
+
+/* Define the linked list structure. This is used to link free blocks in order
+of their size. */
+typedef struct A_BLOCK_LINK
+{
+ struct A_BLOCK_LINK *pxNextFreeBlock; /*<< The next free block in the list. */
+ size_t xBlockSize; /*<< The size of the free block. */
+} xBlockLink;
+
+
+static const unsigned short heapSTRUCT_SIZE = ( sizeof( xBlockLink ) + portBYTE_ALIGNMENT - ( sizeof( xBlockLink ) % portBYTE_ALIGNMENT ) );
+#define heapMINIMUM_BLOCK_SIZE ( ( size_t ) ( heapSTRUCT_SIZE * 2 ) )
+
+/* Create a couple of list links to mark the start and end of the list. */
+static xBlockLink xStart, xEnd;
+
+/* Keeps track of the number of free bytes remaining, but says nothing about
+fragmentation. */
+static size_t xFreeBytesRemaining = configTOTAL_HEAP_SIZE;
+
+/* STATIC FUNCTIONS ARE DEFINED AS MACROS TO MINIMIZE THE FUNCTION CALL DEPTH. */
+
+/*
+ * Insert a block into the list of free blocks - which is ordered by size of
+ * the block. Small blocks at the start of the list and large blocks at the end
+ * of the list.
+ */
+#define prvInsertBlockIntoFreeList( pxBlockToInsert ) \
+{ \
+xBlockLink *pxIterator; \
+size_t xBlockSize; \
+ \
+ xBlockSize = pxBlockToInsert->xBlockSize; \
+ \
+ /* Iterate through the list until a block is found that has a larger size */ \
+ /* than the block we are inserting. */ \
+ for( pxIterator = &xStart; pxIterator->pxNextFreeBlock->xBlockSize < xBlockSize; pxIterator = pxIterator->pxNextFreeBlock ) \
+ { \
+ /* There is nothing to do here - just iterate to the correct position. */ \
+ } \
+ \
+ /* Update the list to include the block being inserted in the correct */ \
+ /* position. */ \
+ pxBlockToInsert->pxNextFreeBlock = pxIterator->pxNextFreeBlock; \
+ pxIterator->pxNextFreeBlock = pxBlockToInsert; \
+}
+/*-----------------------------------------------------------*/
+
+#define prvHeapInit() \
+{ \
+xBlockLink *pxFirstFreeBlock; \
+ \
+ /* xStart is used to hold a pointer to the first item in the list of free */ \
+ /* blocks. The void cast is used to prevent compiler warnings. */ \
+ xStart.pxNextFreeBlock = ( void * ) xHeap.ucHeap; \
+ xStart.xBlockSize = ( size_t ) 0; \
+ \
+ /* xEnd is used to mark the end of the list of free blocks. */ \
+ xEnd.xBlockSize = configTOTAL_HEAP_SIZE; \
+ xEnd.pxNextFreeBlock = NULL; \
+ \
+ /* To start with there is a single free block that is sized to take up the \
+ entire heap space. */ \
+ pxFirstFreeBlock = ( void * ) xHeap.ucHeap; \
+ pxFirstFreeBlock->xBlockSize = configTOTAL_HEAP_SIZE; \
+ pxFirstFreeBlock->pxNextFreeBlock = &xEnd; \
+}
+/*-----------------------------------------------------------*/
+
+void *pvPortMalloc( size_t xWantedSize )
+{
+xBlockLink *pxBlock, *pxPreviousBlock, *pxNewBlockLink;
+static portBASE_TYPE xHeapHasBeenInitialised = pdFALSE;
+void *pvReturn = NULL;
+
+ vTaskSuspendAll();
+ {
+ /* If this is the first call to malloc then the heap will require
+ initialisation to setup the list of free blocks. */
+ if( xHeapHasBeenInitialised == pdFALSE )
+ {
+ prvHeapInit();
+ xHeapHasBeenInitialised = pdTRUE;
+ }
+
+ /* The wanted size is increased so it can contain a xBlockLink
+ structure in addition to the requested amount of bytes. */
+ if( xWantedSize > 0 )
+ {
+ xWantedSize += heapSTRUCT_SIZE;
+
+ /* Ensure that blocks are always aligned to the required number of bytes. */
+ if( xWantedSize & portBYTE_ALIGNMENT_MASK )
+ {
+ /* Byte alignment required. */
+ xWantedSize += ( portBYTE_ALIGNMENT - ( xWantedSize & portBYTE_ALIGNMENT_MASK ) );
+ }
+ }
+
+ if( ( xWantedSize > 0 ) && ( xWantedSize < configTOTAL_HEAP_SIZE ) )
+ {
+ /* Blocks are stored in byte order - traverse the list from the start
+ (smallest) block until one of adequate size is found. */
+ pxPreviousBlock = &xStart;
+ pxBlock = xStart.pxNextFreeBlock;
+ while( ( pxBlock->xBlockSize < xWantedSize ) && ( pxBlock->pxNextFreeBlock ) )
+ {
+ pxPreviousBlock = pxBlock;
+ pxBlock = pxBlock->pxNextFreeBlock;
+ }
+
+ /* If we found the end marker then a block of adequate size was not found. */
+ if( pxBlock != &xEnd )
+ {
+ /* Return the memory space - jumping over the xBlockLink structure
+ at its start. */
+ pvReturn = ( void * ) ( ( ( unsigned char * ) pxPreviousBlock->pxNextFreeBlock ) + heapSTRUCT_SIZE );
+
+ /* This block is being returned for use so must be taken our of the
+ list of free blocks. */
+ pxPreviousBlock->pxNextFreeBlock = pxBlock->pxNextFreeBlock;
+
+ /* If the block is larger than required it can be split into two. */
+ if( ( pxBlock->xBlockSize - xWantedSize ) > heapMINIMUM_BLOCK_SIZE )
+ {
+ /* This block is to be split into two. Create a new block
+ following the number of bytes requested. The void cast is
+ used to prevent byte alignment warnings from the compiler. */
+ pxNewBlockLink = ( void * ) ( ( ( unsigned char * ) pxBlock ) + xWantedSize );
+
+ /* Calculate the sizes of two blocks split from the single
+ block. */
+ pxNewBlockLink->xBlockSize = pxBlock->xBlockSize - xWantedSize;
+ pxBlock->xBlockSize = xWantedSize;
+
+ /* Insert the new block into the list of free blocks. */
+ prvInsertBlockIntoFreeList( ( pxNewBlockLink ) );
+ }
+
+ xFreeBytesRemaining -= xWantedSize;
+ }
+ }
+ }
+ xTaskResumeAll();
+
+ #if( configUSE_MALLOC_FAILED_HOOK == 1 )
+ {
+ if( pvReturn == NULL )
+ {
+ extern void vApplicationMallocFailedHook( void );
+ vApplicationMallocFailedHook();
+ }
+ }
+ #endif
+
+ return pvReturn;
+}
+/*-----------------------------------------------------------*/
+
+void vPortFree( void *pv )
+{
+unsigned char *puc = ( unsigned char * ) pv;
+xBlockLink *pxLink;
+
+ if( pv )
+ {
+ /* The memory being freed will have an xBlockLink structure immediately
+ before it. */
+ puc -= heapSTRUCT_SIZE;
+
+ /* This casting is to keep the compiler from issuing warnings. */
+ pxLink = ( void * ) puc;
+
+ vTaskSuspendAll();
+ {
+ /* Add this block to the list of free blocks. */
+ prvInsertBlockIntoFreeList( ( ( xBlockLink * ) pxLink ) );
+ xFreeBytesRemaining += pxLink->xBlockSize;
+ }
+ xTaskResumeAll();
+ }
+}
+/*-----------------------------------------------------------*/
+
+size_t xPortGetFreeHeapSize( void )
+{
+ return xFreeBytesRemaining;
+}
+/*-----------------------------------------------------------*/
+
+void vPortInitialiseBlocks( void )
+{
+ /* This just exists to keep the linker quiet. */
+}
diff --git a/gyro_board/src/usb/FreeRTOS/portable/MemMang/heap_3.c b/gyro_board/src/usb/FreeRTOS/portable/MemMang/heap_3.c
new file mode 100644
index 0000000..643f750
--- /dev/null
+++ b/gyro_board/src/usb/FreeRTOS/portable/MemMang/heap_3.c
@@ -0,0 +1,117 @@
+/*
+ FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.
+
+ ***************************************************************************
+ * *
+ * If you are: *
+ * *
+ * + New to FreeRTOS, *
+ * + Wanting to learn FreeRTOS or multitasking in general quickly *
+ * + Looking for basic training, *
+ * + Wanting to improve your FreeRTOS skills and productivity *
+ * *
+ * then take a look at the FreeRTOS eBook *
+ * *
+ * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
+ * http://www.FreeRTOS.org/Documentation *
+ * *
+ * A pdf reference manual is also available. Both are usually delivered *
+ * to your inbox within 20 minutes to two hours when purchased between 8am *
+ * and 8pm GMT (although please allow up to 24 hours in case of *
+ * exceptional circumstances). Thank you for your support! *
+ * *
+ ***************************************************************************
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
+ ***NOTE*** The exception to the GPL is included to allow you to distribute
+ a combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details. You should have received a copy of the GNU General Public
+ License and the FreeRTOS license exception along with FreeRTOS; if not it
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained
+ by writing to Richard Barry, contact details for whom are available on the
+ FreeRTOS WEB site.
+
+ 1 tab == 4 spaces!
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+
+/*
+ * Implementation of pvPortMalloc() and vPortFree() that relies on the
+ * compilers own malloc() and free() implementations.
+ *
+ * This file can only be used if the linker is configured to to generate
+ * a heap memory area.
+ *
+ * See heap_2.c and heap_1.c for alternative implementations, and the memory
+ * management pages of http://www.FreeRTOS.org for more information.
+ */
+
+#include <stdlib.h>
+
+/* Defining MPU_WRAPPERS_INCLUDED_FROM_API_FILE prevents task.h from redefining
+all the API functions to use the MPU wrappers. That should only be done when
+task.h is included from an application file. */
+#define MPU_WRAPPERS_INCLUDED_FROM_API_FILE
+
+#include "FreeRTOS.h"
+#include "task.h"
+
+#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE
+
+/*-----------------------------------------------------------*/
+
+void *pvPortMalloc( size_t xWantedSize )
+{
+void *pvReturn;
+
+ vTaskSuspendAll();
+ {
+ pvReturn = malloc( xWantedSize );
+ }
+ xTaskResumeAll();
+
+ #if( configUSE_MALLOC_FAILED_HOOK == 1 )
+ {
+ if( pvReturn == NULL )
+ {
+ extern void vApplicationMallocFailedHook( void );
+ vApplicationMallocFailedHook();
+ }
+ }
+ #endif
+
+ return pvReturn;
+}
+/*-----------------------------------------------------------*/
+
+void vPortFree( void *pv )
+{
+ if( pv )
+ {
+ vTaskSuspendAll();
+ {
+ free( pv );
+ }
+ xTaskResumeAll();
+ }
+}
+
+
+
diff --git a/gyro_board/src/usb/FreeRTOS/queue.c b/gyro_board/src/usb/FreeRTOS/queue.c
new file mode 100644
index 0000000..acd6119
--- /dev/null
+++ b/gyro_board/src/usb/FreeRTOS/queue.c
@@ -0,0 +1,1302 @@
+/*
+ FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.
+
+ ***************************************************************************
+ * *
+ * If you are: *
+ * *
+ * + New to FreeRTOS, *
+ * + Wanting to learn FreeRTOS or multitasking in general quickly *
+ * + Looking for basic training, *
+ * + Wanting to improve your FreeRTOS skills and productivity *
+ * *
+ * then take a look at the FreeRTOS eBook *
+ * *
+ * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
+ * http://www.FreeRTOS.org/Documentation *
+ * *
+ * A pdf reference manual is also available. Both are usually delivered *
+ * to your inbox within 20 minutes to two hours when purchased between 8am *
+ * and 8pm GMT (although please allow up to 24 hours in case of *
+ * exceptional circumstances). Thank you for your support! *
+ * *
+ ***************************************************************************
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
+ ***NOTE*** The exception to the GPL is included to allow you to distribute
+ a combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details. You should have received a copy of the GNU General Public
+ License and the FreeRTOS license exception along with FreeRTOS; if not it
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained
+ by writing to Richard Barry, contact details for whom are available on the
+ FreeRTOS WEB site.
+
+ 1 tab == 4 spaces!
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#include <stdlib.h>
+#include <string.h>
+
+/* Defining MPU_WRAPPERS_INCLUDED_FROM_API_FILE prevents task.h from redefining
+all the API functions to use the MPU wrappers. That should only be done when
+task.h is included from an application file. */
+#define MPU_WRAPPERS_INCLUDED_FROM_API_FILE
+
+#include "FreeRTOS.h"
+#include "task.h"
+#include "croutine.h"
+
+#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE
+
+/*-----------------------------------------------------------
+ * PUBLIC LIST API documented in list.h
+ *----------------------------------------------------------*/
+
+/* Constants used with the cRxLock and cTxLock structure members. */
+#define queueUNLOCKED ( ( signed portBASE_TYPE ) -1 )
+#define queueLOCKED_UNMODIFIED ( ( signed portBASE_TYPE ) 0 )
+
+#define queueERRONEOUS_UNBLOCK ( -1 )
+
+/* For internal use only. */
+#define queueSEND_TO_BACK ( 0 )
+#define queueSEND_TO_FRONT ( 1 )
+
+/* Effectively make a union out of the xQUEUE structure. */
+#define pxMutexHolder pcTail
+#define uxQueueType pcHead
+#define uxRecursiveCallCount pcReadFrom
+#define queueQUEUE_IS_MUTEX NULL
+
+/* Semaphores do not actually store or copy data, so have an items size of
+zero. */
+#define queueSEMAPHORE_QUEUE_ITEM_LENGTH ( 0 )
+#define queueDONT_BLOCK ( ( portTickType ) 0 )
+#define queueMUTEX_GIVE_BLOCK_TIME ( ( portTickType ) 0 )
+
+/*
+ * Definition of the queue used by the scheduler.
+ * Items are queued by copy, not reference.
+ */
+typedef struct QueueDefinition {
+ signed char *pcHead; /*< Points to the beginning of the queue storage area. */
+ signed char *pcTail; /*< Points to the byte at the end of the queue storage area. Once more byte is allocated than necessary to store the queue items, this is used as a marker. */
+
+ signed char *pcWriteTo; /*< Points to the free next place in the storage area. */
+ signed char *pcReadFrom; /*< Points to the last place that a queued item was read from. */
+
+ xList xTasksWaitingToSend; /*< List of tasks that are blocked waiting to post onto this queue. Stored in priority order. */
+ xList xTasksWaitingToReceive; /*< List of tasks that are blocked waiting to read from this queue. Stored in priority order. */
+
+ volatile unsigned portBASE_TYPE uxMessagesWaiting;/*< The number of items currently in the queue. */
+ unsigned portBASE_TYPE uxLength; /*< The length of the queue defined as the number of items it will hold, not the number of bytes. */
+ unsigned portBASE_TYPE uxItemSize; /*< The size of each items that the queue will hold. */
+
+ signed portBASE_TYPE xRxLock; /*< Stores the number of items received from the queue (removed from the queue) while the queue was locked. Set to queueUNLOCKED when the queue is not locked. */
+ signed portBASE_TYPE xTxLock; /*< Stores the number of items transmitted to the queue (added to the queue) while the queue was locked. Set to queueUNLOCKED when the queue is not locked. */
+
+} xQUEUE;
+/*-----------------------------------------------------------*/
+
+/*
+ * Inside this file xQueueHandle is a pointer to a xQUEUE structure.
+ * To keep the definition private the API header file defines it as a
+ * pointer to void.
+ */
+typedef xQUEUE * xQueueHandle;
+
+/*
+ * Prototypes for public functions are included here so we don't have to
+ * include the API header file (as it defines xQueueHandle differently). These
+ * functions are documented in the API header file.
+ */
+xQueueHandle xQueueCreate(unsigned portBASE_TYPE uxQueueLength, unsigned portBASE_TYPE uxItemSize) PRIVILEGED_FUNCTION;
+signed portBASE_TYPE xQueueGenericSend(xQueueHandle xQueue, const void * const pvItemToQueue, portTickType xTicksToWait, portBASE_TYPE xCopyPosition) PRIVILEGED_FUNCTION;
+unsigned portBASE_TYPE uxQueueMessagesWaiting(const xQueueHandle pxQueue) PRIVILEGED_FUNCTION;
+void vQueueDelete(xQueueHandle xQueue) PRIVILEGED_FUNCTION;
+signed portBASE_TYPE xQueueGenericSendFromISR(xQueueHandle pxQueue, const void * const pvItemToQueue, signed portBASE_TYPE *pxHigherPriorityTaskWoken, portBASE_TYPE xCopyPosition) PRIVILEGED_FUNCTION;
+signed portBASE_TYPE xQueueGenericReceive(xQueueHandle pxQueue, void * const pvBuffer, portTickType xTicksToWait, portBASE_TYPE xJustPeeking) PRIVILEGED_FUNCTION;
+signed portBASE_TYPE xQueueReceiveFromISR(xQueueHandle pxQueue, void * const pvBuffer, signed portBASE_TYPE *pxTaskWoken) PRIVILEGED_FUNCTION;
+xQueueHandle xQueueCreateMutex(void) PRIVILEGED_FUNCTION;
+xQueueHandle xQueueCreateCountingSemaphore(unsigned portBASE_TYPE uxCountValue, unsigned portBASE_TYPE uxInitialCount) PRIVILEGED_FUNCTION;
+portBASE_TYPE xQueueTakeMutexRecursive(xQueueHandle xMutex, portTickType xBlockTime) PRIVILEGED_FUNCTION;
+portBASE_TYPE xQueueGiveMutexRecursive(xQueueHandle xMutex) PRIVILEGED_FUNCTION;
+signed portBASE_TYPE xQueueAltGenericSend(xQueueHandle pxQueue, const void * const pvItemToQueue, portTickType xTicksToWait, portBASE_TYPE xCopyPosition) PRIVILEGED_FUNCTION;
+signed portBASE_TYPE xQueueAltGenericReceive(xQueueHandle pxQueue, void * const pvBuffer, portTickType xTicksToWait, portBASE_TYPE xJustPeeking) PRIVILEGED_FUNCTION;
+signed portBASE_TYPE xQueueIsQueueEmptyFromISR(const xQueueHandle pxQueue) PRIVILEGED_FUNCTION;
+signed portBASE_TYPE xQueueIsQueueFullFromISR(const xQueueHandle pxQueue) PRIVILEGED_FUNCTION;
+unsigned portBASE_TYPE uxQueueMessagesWaitingFromISR(const xQueueHandle pxQueue) PRIVILEGED_FUNCTION;
+
+/*
+ * Co-routine queue functions differ from task queue functions. Co-routines are
+ * an optional component.
+ */
+#if configUSE_CO_ROUTINES == 1
+signed portBASE_TYPE xQueueCRSendFromISR(xQueueHandle pxQueue, const void *pvItemToQueue, signed portBASE_TYPE xCoRoutinePreviouslyWoken) PRIVILEGED_FUNCTION;
+signed portBASE_TYPE xQueueCRReceiveFromISR(xQueueHandle pxQueue, void *pvBuffer, signed portBASE_TYPE *pxTaskWoken) PRIVILEGED_FUNCTION;
+signed portBASE_TYPE xQueueCRSend(xQueueHandle pxQueue, const void *pvItemToQueue, portTickType xTicksToWait) PRIVILEGED_FUNCTION;
+signed portBASE_TYPE xQueueCRReceive(xQueueHandle pxQueue, void *pvBuffer, portTickType xTicksToWait) PRIVILEGED_FUNCTION;
+#endif
+
+/*
+ * The queue registry is just a means for kernel aware debuggers to locate
+ * queue structures. It has no other purpose so is an optional component.
+ */
+#if configQUEUE_REGISTRY_SIZE > 0
+
+/* The type stored within the queue registry array. This allows a name
+to be assigned to each queue making kernel aware debugging a little
+more user friendly. */
+typedef struct QUEUE_REGISTRY_ITEM {
+ signed char *pcQueueName;
+ xQueueHandle xHandle;
+} xQueueRegistryItem;
+
+/* The queue registry is simply an array of xQueueRegistryItem structures.
+The pcQueueName member of a structure being NULL is indicative of the
+array position being vacant. */
+xQueueRegistryItem xQueueRegistry[ configQUEUE_REGISTRY_SIZE ];
+
+/* Removes a queue from the registry by simply setting the pcQueueName
+member to NULL. */
+static void vQueueUnregisterQueue(xQueueHandle xQueue) PRIVILEGED_FUNCTION;
+void vQueueAddToRegistry(xQueueHandle xQueue, signed char *pcQueueName) PRIVILEGED_FUNCTION;
+#endif
+
+/*
+ * Unlocks a queue locked by a call to prvLockQueue. Locking a queue does not
+ * prevent an ISR from adding or removing items to the queue, but does prevent
+ * an ISR from removing tasks from the queue event lists. If an ISR finds a
+ * queue is locked it will instead increment the appropriate queue lock count
+ * to indicate that a task may require unblocking. When the queue in unlocked
+ * these lock counts are inspected, and the appropriate action taken.
+ */
+static void prvUnlockQueue(xQueueHandle pxQueue) PRIVILEGED_FUNCTION;
+
+/*
+ * Uses a critical section to determine if there is any data in a queue.
+ *
+ * @return pdTRUE if the queue contains no items, otherwise pdFALSE.
+ */
+static signed portBASE_TYPE prvIsQueueEmpty(const xQueueHandle pxQueue) PRIVILEGED_FUNCTION;
+
+/*
+ * Uses a critical section to determine if there is any space in a queue.
+ *
+ * @return pdTRUE if there is no space, otherwise pdFALSE;
+ */
+static signed portBASE_TYPE prvIsQueueFull(const xQueueHandle pxQueue) PRIVILEGED_FUNCTION;
+
+/*
+ * Copies an item into the queue, either at the front of the queue or the
+ * back of the queue.
+ */
+static void prvCopyDataToQueue(xQUEUE *pxQueue, const void *pvItemToQueue, portBASE_TYPE xPosition) PRIVILEGED_FUNCTION;
+
+/*
+ * Copies an item out of a queue.
+ */
+static void prvCopyDataFromQueue(xQUEUE * const pxQueue, const void *pvBuffer) PRIVILEGED_FUNCTION;
+/*-----------------------------------------------------------*/
+
+/*
+ * Macro to mark a queue as locked. Locking a queue prevents an ISR from
+ * accessing the queue event lists.
+ */
+#define prvLockQueue( pxQueue ) \
+{ \
+ taskENTER_CRITICAL(); \
+ { \
+ if( pxQueue->xRxLock == queueUNLOCKED ) \
+ { \
+ pxQueue->xRxLock = queueLOCKED_UNMODIFIED; \
+ } \
+ if( pxQueue->xTxLock == queueUNLOCKED ) \
+ { \
+ pxQueue->xTxLock = queueLOCKED_UNMODIFIED; \
+ } \
+ } \
+ taskEXIT_CRITICAL(); \
+}
+/*-----------------------------------------------------------*/
+
+
+/*-----------------------------------------------------------
+ * PUBLIC QUEUE MANAGEMENT API documented in queue.h
+ *----------------------------------------------------------*/
+
+xQueueHandle xQueueCreate(unsigned portBASE_TYPE uxQueueLength, unsigned portBASE_TYPE uxItemSize)
+{
+ xQUEUE *pxNewQueue;
+ size_t xQueueSizeInBytes;
+
+ /* Allocate the new queue structure. */
+ if (uxQueueLength > (unsigned portBASE_TYPE) 0) {
+ pxNewQueue = (xQUEUE *) pvPortMalloc(sizeof(xQUEUE));
+ if (pxNewQueue != NULL) {
+ /* Create the list of pointers to queue items. The queue is one byte
+ longer than asked for to make wrap checking easier/faster. */
+ xQueueSizeInBytes = (size_t)(uxQueueLength * uxItemSize) + (size_t) 1;
+
+ pxNewQueue->pcHead = (signed char *) pvPortMalloc(xQueueSizeInBytes);
+ if (pxNewQueue->pcHead != NULL) {
+ /* Initialise the queue members as described above where the
+ queue type is defined. */
+ pxNewQueue->pcTail = pxNewQueue->pcHead + (uxQueueLength * uxItemSize);
+ pxNewQueue->uxMessagesWaiting = 0;
+ pxNewQueue->pcWriteTo = pxNewQueue->pcHead;
+ pxNewQueue->pcReadFrom = pxNewQueue->pcHead + ((uxQueueLength - 1) * uxItemSize);
+ pxNewQueue->uxLength = uxQueueLength;
+ pxNewQueue->uxItemSize = uxItemSize;
+ pxNewQueue->xRxLock = queueUNLOCKED;
+ pxNewQueue->xTxLock = queueUNLOCKED;
+
+ /* Likewise ensure the event queues start with the correct state. */
+ vListInitialise(&(pxNewQueue->xTasksWaitingToSend));
+ vListInitialise(&(pxNewQueue->xTasksWaitingToReceive));
+
+ traceQUEUE_CREATE(pxNewQueue);
+ return pxNewQueue;
+ } else {
+ traceQUEUE_CREATE_FAILED();
+ vPortFree(pxNewQueue);
+ }
+ }
+ }
+
+ /* Will only reach here if we could not allocate enough memory or no memory
+ was required. */
+ return NULL;
+}
+/*-----------------------------------------------------------*/
+
+#if ( configUSE_MUTEXES == 1 )
+
+xQueueHandle xQueueCreateMutex(void)
+{
+ xQUEUE *pxNewQueue;
+
+ /* Allocate the new queue structure. */
+ pxNewQueue = (xQUEUE *) pvPortMalloc(sizeof(xQUEUE));
+ if (pxNewQueue != NULL) {
+ /* Information required for priority inheritance. */
+ pxNewQueue->pxMutexHolder = NULL;
+ pxNewQueue->uxQueueType = queueQUEUE_IS_MUTEX;
+
+ /* Queues used as a mutex no data is actually copied into or out
+ of the queue. */
+ pxNewQueue->pcWriteTo = NULL;
+ pxNewQueue->pcReadFrom = NULL;
+
+ /* Each mutex has a length of 1 (like a binary semaphore) and
+ an item size of 0 as nothing is actually copied into or out
+ of the mutex. */
+ pxNewQueue->uxMessagesWaiting = 0;
+ pxNewQueue->uxLength = 1;
+ pxNewQueue->uxItemSize = 0;
+ pxNewQueue->xRxLock = queueUNLOCKED;
+ pxNewQueue->xTxLock = queueUNLOCKED;
+
+ /* Ensure the event queues start with the correct state. */
+ vListInitialise(&(pxNewQueue->xTasksWaitingToSend));
+ vListInitialise(&(pxNewQueue->xTasksWaitingToReceive));
+
+ /* Start with the semaphore in the expected state. */
+ xQueueGenericSend(pxNewQueue, NULL, 0, queueSEND_TO_BACK);
+
+ traceCREATE_MUTEX(pxNewQueue);
+ } else {
+ traceCREATE_MUTEX_FAILED();
+ }
+
+ return pxNewQueue;
+}
+
+#endif /* configUSE_MUTEXES */
+/*-----------------------------------------------------------*/
+
+#if configUSE_RECURSIVE_MUTEXES == 1
+
+portBASE_TYPE xQueueGiveMutexRecursive(xQueueHandle pxMutex)
+{
+ portBASE_TYPE xReturn;
+
+ /* If this is the task that holds the mutex then pxMutexHolder will not
+ change outside of this task. If this task does not hold the mutex then
+ pxMutexHolder can never coincidentally equal the tasks handle, and as
+ this is the only condition we are interested in it does not matter if
+ pxMutexHolder is accessed simultaneously by another task. Therefore no
+ mutual exclusion is required to test the pxMutexHolder variable. */
+ if (pxMutex->pxMutexHolder == xTaskGetCurrentTaskHandle()) {
+ traceGIVE_MUTEX_RECURSIVE(pxMutex);
+
+ /* uxRecursiveCallCount cannot be zero if pxMutexHolder is equal to
+ the task handle, therefore no underflow check is required. Also,
+ uxRecursiveCallCount is only modified by the mutex holder, and as
+ there can only be one, no mutual exclusion is required to modify the
+ uxRecursiveCallCount member. */
+ (pxMutex->uxRecursiveCallCount)--;
+
+ /* Have we unwound the call count? */
+ if (pxMutex->uxRecursiveCallCount == 0) {
+ /* Return the mutex. This will automatically unblock any other
+ task that might be waiting to access the mutex. */
+ xQueueGenericSend(pxMutex, NULL, queueMUTEX_GIVE_BLOCK_TIME, queueSEND_TO_BACK);
+ }
+
+ xReturn = pdPASS;
+ } else {
+ /* We cannot give the mutex because we are not the holder. */
+ xReturn = pdFAIL;
+
+ traceGIVE_MUTEX_RECURSIVE_FAILED(pxMutex);
+ }
+
+ return xReturn;
+}
+
+#endif /* configUSE_RECURSIVE_MUTEXES */
+/*-----------------------------------------------------------*/
+
+#if configUSE_RECURSIVE_MUTEXES == 1
+
+portBASE_TYPE xQueueTakeMutexRecursive(xQueueHandle pxMutex, portTickType xBlockTime)
+{
+ portBASE_TYPE xReturn;
+
+ /* Comments regarding mutual exclusion as per those within
+ xQueueGiveMutexRecursive(). */
+
+ traceTAKE_MUTEX_RECURSIVE(pxMutex);
+
+ if (pxMutex->pxMutexHolder == xTaskGetCurrentTaskHandle()) {
+ (pxMutex->uxRecursiveCallCount)++;
+ xReturn = pdPASS;
+ } else {
+ xReturn = xQueueGenericReceive(pxMutex, NULL, xBlockTime, pdFALSE);
+
+ /* pdPASS will only be returned if we successfully obtained the mutex,
+ we may have blocked to reach here. */
+ if (xReturn == pdPASS) {
+ (pxMutex->uxRecursiveCallCount)++;
+ }
+ }
+
+ return xReturn;
+}
+
+#endif /* configUSE_RECURSIVE_MUTEXES */
+/*-----------------------------------------------------------*/
+
+#if configUSE_COUNTING_SEMAPHORES == 1
+
+xQueueHandle xQueueCreateCountingSemaphore(unsigned portBASE_TYPE uxCountValue, unsigned portBASE_TYPE uxInitialCount)
+{
+ xQueueHandle pxHandle;
+
+ pxHandle = xQueueCreate((unsigned portBASE_TYPE) uxCountValue, queueSEMAPHORE_QUEUE_ITEM_LENGTH);
+
+ if (pxHandle != NULL) {
+ pxHandle->uxMessagesWaiting = uxInitialCount;
+
+ traceCREATE_COUNTING_SEMAPHORE();
+ } else {
+ traceCREATE_COUNTING_SEMAPHORE_FAILED();
+ }
+
+ return pxHandle;
+}
+
+#endif /* configUSE_COUNTING_SEMAPHORES */
+/*-----------------------------------------------------------*/
+
+signed portBASE_TYPE xQueueGenericSend(xQueueHandle pxQueue, const void * const pvItemToQueue, portTickType xTicksToWait, portBASE_TYPE xCopyPosition)
+{
+ signed portBASE_TYPE xEntryTimeSet = pdFALSE;
+ xTimeOutType xTimeOut;
+
+ /* This function relaxes the coding standard somewhat to allow return
+ statements within the function itself. This is done in the interest
+ of execution time efficiency. */
+ for (;;) {
+ taskENTER_CRITICAL();
+ {
+ /* Is there room on the queue now? To be running we must be
+ the highest priority task wanting to access the queue. */
+ if (pxQueue->uxMessagesWaiting < pxQueue->uxLength) {
+ traceQUEUE_SEND(pxQueue);
+ prvCopyDataToQueue(pxQueue, pvItemToQueue, xCopyPosition);
+
+ /* If there was a task waiting for data to arrive on the
+ queue then unblock it now. */
+ if (listLIST_IS_EMPTY(&(pxQueue->xTasksWaitingToReceive)) == pdFALSE) {
+ if (xTaskRemoveFromEventList(&(pxQueue->xTasksWaitingToReceive)) == pdTRUE) {
+ /* The unblocked task has a priority higher than
+ our own so yield immediately. Yes it is ok to do
+ this from within the critical section - the kernel
+ takes care of that. */
+ portYIELD_WITHIN_API();
+ }
+ }
+
+ taskEXIT_CRITICAL();
+
+ /* Return to the original privilege level before exiting the
+ function. */
+ return pdPASS;
+ } else {
+ if (xTicksToWait == (portTickType) 0) {
+ /* The queue was full and no block time is specified (or
+ the block time has expired) so leave now. */
+ taskEXIT_CRITICAL();
+
+ /* Return to the original privilege level before exiting
+ the function. */
+ traceQUEUE_SEND_FAILED(pxQueue);
+ return errQUEUE_FULL;
+ } else if (xEntryTimeSet == pdFALSE) {
+ /* The queue was full and a block time was specified so
+ configure the timeout structure. */
+ vTaskSetTimeOutState(&xTimeOut);
+ xEntryTimeSet = pdTRUE;
+ }
+ }
+ }
+ taskEXIT_CRITICAL();
+
+ /* Interrupts and other tasks can send to and receive from the queue
+ now the critical section has been exited. */
+
+ vTaskSuspendAll();
+ prvLockQueue(pxQueue);
+
+ /* Update the timeout state to see if it has expired yet. */
+ if (xTaskCheckForTimeOut(&xTimeOut, &xTicksToWait) == pdFALSE) {
+ if (prvIsQueueFull(pxQueue)) {
+ traceBLOCKING_ON_QUEUE_SEND(pxQueue);
+ vTaskPlaceOnEventList(&(pxQueue->xTasksWaitingToSend), xTicksToWait);
+
+ /* Unlocking the queue means queue events can effect the
+ event list. It is possible that interrupts occurring now
+ remove this task from the event list again - but as the
+ scheduler is suspended the task will go onto the pending
+ ready last instead of the actual ready list. */
+ prvUnlockQueue(pxQueue);
+
+ /* Resuming the scheduler will move tasks from the pending
+ ready list into the ready list - so it is feasible that this
+ task is already in a ready list before it yields - in which
+ case the yield will not cause a context switch unless there
+ is also a higher priority task in the pending ready list. */
+ if (!xTaskResumeAll()) {
+ portYIELD_WITHIN_API();
+ }
+ } else {
+ /* Try again. */
+ prvUnlockQueue(pxQueue);
+ (void) xTaskResumeAll();
+ }
+ } else {
+ /* The timeout has expired. */
+ prvUnlockQueue(pxQueue);
+ (void) xTaskResumeAll();
+
+ /* Return to the original privilege level before exiting the
+ function. */
+ traceQUEUE_SEND_FAILED(pxQueue);
+ return errQUEUE_FULL;
+ }
+ }
+}
+/*-----------------------------------------------------------*/
+
+#if configUSE_ALTERNATIVE_API == 1
+
+signed portBASE_TYPE xQueueAltGenericSend(xQueueHandle pxQueue, const void * const pvItemToQueue, portTickType xTicksToWait, portBASE_TYPE xCopyPosition)
+{
+ signed portBASE_TYPE xEntryTimeSet = pdFALSE;
+ xTimeOutType xTimeOut;
+
+ for (;;) {
+ taskENTER_CRITICAL();
+ {
+ /* Is there room on the queue now? To be running we must be
+ the highest priority task wanting to access the queue. */
+ if (pxQueue->uxMessagesWaiting < pxQueue->uxLength) {
+ traceQUEUE_SEND(pxQueue);
+ prvCopyDataToQueue(pxQueue, pvItemToQueue, xCopyPosition);
+
+ /* If there was a task waiting for data to arrive on the
+ queue then unblock it now. */
+ if (listLIST_IS_EMPTY(&(pxQueue->xTasksWaitingToReceive)) == pdFALSE) {
+ if (xTaskRemoveFromEventList(&(pxQueue->xTasksWaitingToReceive)) == pdTRUE) {
+ /* The unblocked task has a priority higher than
+ our own so yield immediately. */
+ portYIELD_WITHIN_API();
+ }
+ }
+
+ taskEXIT_CRITICAL();
+ return pdPASS;
+ } else {
+ if (xTicksToWait == (portTickType) 0) {
+ taskEXIT_CRITICAL();
+ return errQUEUE_FULL;
+ } else if (xEntryTimeSet == pdFALSE) {
+ vTaskSetTimeOutState(&xTimeOut);
+ xEntryTimeSet = pdTRUE;
+ }
+ }
+ }
+ taskEXIT_CRITICAL();
+
+ taskENTER_CRITICAL();
+ {
+ if (xTaskCheckForTimeOut(&xTimeOut, &xTicksToWait) == pdFALSE) {
+ if (prvIsQueueFull(pxQueue)) {
+ traceBLOCKING_ON_QUEUE_SEND(pxQueue);
+ vTaskPlaceOnEventList(&(pxQueue->xTasksWaitingToSend), xTicksToWait);
+ portYIELD_WITHIN_API();
+ }
+ } else {
+ taskEXIT_CRITICAL();
+ traceQUEUE_SEND_FAILED(pxQueue);
+ return errQUEUE_FULL;
+ }
+ }
+ taskEXIT_CRITICAL();
+ }
+}
+
+#endif /* configUSE_ALTERNATIVE_API */
+/*-----------------------------------------------------------*/
+
+#if configUSE_ALTERNATIVE_API == 1
+
+signed portBASE_TYPE xQueueAltGenericReceive(xQueueHandle pxQueue, void * const pvBuffer, portTickType xTicksToWait, portBASE_TYPE xJustPeeking)
+{
+ signed portBASE_TYPE xEntryTimeSet = pdFALSE;
+ xTimeOutType xTimeOut;
+ signed char *pcOriginalReadPosition;
+
+ for (;;) {
+ taskENTER_CRITICAL();
+ {
+ if (pxQueue->uxMessagesWaiting > (unsigned portBASE_TYPE) 0) {
+ /* Remember our read position in case we are just peeking. */
+ pcOriginalReadPosition = pxQueue->pcReadFrom;
+
+ prvCopyDataFromQueue(pxQueue, pvBuffer);
+
+ if (xJustPeeking == pdFALSE) {
+ traceQUEUE_RECEIVE(pxQueue);
+
+ /* We are actually removing data. */
+ --(pxQueue->uxMessagesWaiting);
+
+#if ( configUSE_MUTEXES == 1 )
+ {
+ if (pxQueue->uxQueueType == queueQUEUE_IS_MUTEX) {
+ /* Record the information required to implement
+ priority inheritance should it become necessary. */
+ pxQueue->pxMutexHolder = xTaskGetCurrentTaskHandle();
+ }
+ }
+#endif
+
+ if (listLIST_IS_EMPTY(&(pxQueue->xTasksWaitingToSend)) == pdFALSE) {
+ if (xTaskRemoveFromEventList(&(pxQueue->xTasksWaitingToSend)) == pdTRUE) {
+ portYIELD_WITHIN_API();
+ }
+ }
+ } else {
+ traceQUEUE_PEEK(pxQueue);
+
+ /* We are not removing the data, so reset our read
+ pointer. */
+ pxQueue->pcReadFrom = pcOriginalReadPosition;
+
+ /* The data is being left in the queue, so see if there are
+ any other tasks waiting for the data. */
+ if (!listLIST_IS_EMPTY(&(pxQueue->xTasksWaitingToReceive))) {
+ /* Tasks that are removed from the event list will get added to
+ the pending ready list as the scheduler is still suspended. */
+ if (xTaskRemoveFromEventList(&(pxQueue->xTasksWaitingToReceive)) != pdFALSE) {
+ /* The task waiting has a higher priority than this task. */
+ portYIELD_WITHIN_API();
+ }
+ }
+
+ }
+
+ taskEXIT_CRITICAL();
+ return pdPASS;
+ } else {
+ if (xTicksToWait == (portTickType) 0) {
+ taskEXIT_CRITICAL();
+ traceQUEUE_RECEIVE_FAILED(pxQueue);
+ return errQUEUE_EMPTY;
+ } else if (xEntryTimeSet == pdFALSE) {
+ vTaskSetTimeOutState(&xTimeOut);
+ xEntryTimeSet = pdTRUE;
+ }
+ }
+ }
+ taskEXIT_CRITICAL();
+
+ taskENTER_CRITICAL();
+ {
+ if (xTaskCheckForTimeOut(&xTimeOut, &xTicksToWait) == pdFALSE) {
+ if (prvIsQueueEmpty(pxQueue)) {
+ traceBLOCKING_ON_QUEUE_RECEIVE(pxQueue);
+
+#if ( configUSE_MUTEXES == 1 )
+ {
+ if (pxQueue->uxQueueType == queueQUEUE_IS_MUTEX) {
+ portENTER_CRITICAL();
+ vTaskPriorityInherit((void *) pxQueue->pxMutexHolder);
+ portEXIT_CRITICAL();
+ }
+ }
+#endif
+
+ vTaskPlaceOnEventList(&(pxQueue->xTasksWaitingToReceive), xTicksToWait);
+ portYIELD_WITHIN_API();
+ }
+ } else {
+ taskEXIT_CRITICAL();
+ traceQUEUE_RECEIVE_FAILED(pxQueue);
+ return errQUEUE_EMPTY;
+ }
+ }
+ taskEXIT_CRITICAL();
+ }
+}
+
+
+#endif /* configUSE_ALTERNATIVE_API */
+/*-----------------------------------------------------------*/
+
+signed portBASE_TYPE xQueueGenericSendFromISR(xQueueHandle pxQueue, const void * const pvItemToQueue, signed portBASE_TYPE *pxHigherPriorityTaskWoken, portBASE_TYPE xCopyPosition)
+{
+ signed portBASE_TYPE xReturn;
+ unsigned portBASE_TYPE uxSavedInterruptStatus;
+
+ /* Similar to xQueueGenericSend, except we don't block if there is no room
+ in the queue. Also we don't directly wake a task that was blocked on a
+ queue read, instead we return a flag to say whether a context switch is
+ required or not (i.e. has a task with a higher priority than us been woken
+ by this post). */
+ uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();
+ {
+ if (pxQueue->uxMessagesWaiting < pxQueue->uxLength) {
+ traceQUEUE_SEND_FROM_ISR(pxQueue);
+
+ prvCopyDataToQueue(pxQueue, pvItemToQueue, xCopyPosition);
+
+ /* If the queue is locked we do not alter the event list. This will
+ be done when the queue is unlocked later. */
+ if (pxQueue->xTxLock == queueUNLOCKED) {
+ if (!listLIST_IS_EMPTY(&(pxQueue->xTasksWaitingToReceive))) {
+ if (xTaskRemoveFromEventList(&(pxQueue->xTasksWaitingToReceive)) != pdFALSE) {
+ /* The task waiting has a higher priority so record that a
+ context switch is required. */
+ *pxHigherPriorityTaskWoken = pdTRUE;
+ }
+ }
+ } else {
+ /* Increment the lock count so the task that unlocks the queue
+ knows that data was posted while it was locked. */
+ ++(pxQueue->xTxLock);
+ }
+
+ xReturn = pdPASS;
+ } else {
+ traceQUEUE_SEND_FROM_ISR_FAILED(pxQueue);
+ xReturn = errQUEUE_FULL;
+ }
+ }
+ portCLEAR_INTERRUPT_MASK_FROM_ISR(uxSavedInterruptStatus);
+
+ return xReturn;
+}
+/*-----------------------------------------------------------*/
+
+signed portBASE_TYPE xQueueGenericReceive(xQueueHandle pxQueue, void * const pvBuffer, portTickType xTicksToWait, portBASE_TYPE xJustPeeking)
+{
+ signed portBASE_TYPE xEntryTimeSet = pdFALSE;
+ xTimeOutType xTimeOut;
+ signed char *pcOriginalReadPosition;
+
+ /* This function relaxes the coding standard somewhat to allow return
+ statements within the function itself. This is done in the interest
+ of execution time efficiency. */
+
+ for (;;) {
+ taskENTER_CRITICAL();
+ {
+ /* Is there data in the queue now? To be running we must be
+ the highest priority task wanting to access the queue. */
+ if (pxQueue->uxMessagesWaiting > (unsigned portBASE_TYPE) 0) {
+ /* Remember our read position in case we are just peeking. */
+ pcOriginalReadPosition = pxQueue->pcReadFrom;
+
+ prvCopyDataFromQueue(pxQueue, pvBuffer);
+
+ if (xJustPeeking == pdFALSE) {
+ traceQUEUE_RECEIVE(pxQueue);
+
+ /* We are actually removing data. */
+ --(pxQueue->uxMessagesWaiting);
+
+#if ( configUSE_MUTEXES == 1 )
+ {
+ if (pxQueue->uxQueueType == queueQUEUE_IS_MUTEX) {
+ /* Record the information required to implement
+ priority inheritance should it become necessary. */
+ pxQueue->pxMutexHolder = xTaskGetCurrentTaskHandle();
+ }
+ }
+#endif
+
+ if (listLIST_IS_EMPTY(&(pxQueue->xTasksWaitingToSend)) == pdFALSE) {
+ if (xTaskRemoveFromEventList(&(pxQueue->xTasksWaitingToSend)) == pdTRUE) {
+ portYIELD_WITHIN_API();
+ }
+ }
+ } else {
+ traceQUEUE_PEEK(pxQueue);
+
+ /* We are not removing the data, so reset our read
+ pointer. */
+ pxQueue->pcReadFrom = pcOriginalReadPosition;
+
+ /* The data is being left in the queue, so see if there are
+ any other tasks waiting for the data. */
+ if (!listLIST_IS_EMPTY(&(pxQueue->xTasksWaitingToReceive))) {
+ /* Tasks that are removed from the event list will get added to
+ the pending ready list as the scheduler is still suspended. */
+ if (xTaskRemoveFromEventList(&(pxQueue->xTasksWaitingToReceive)) != pdFALSE) {
+ /* The task waiting has a higher priority than this task. */
+ portYIELD_WITHIN_API();
+ }
+ }
+
+ }
+
+ taskEXIT_CRITICAL();
+ return pdPASS;
+ } else {
+ if (xTicksToWait == (portTickType) 0) {
+ /* The queue was empty and no block time is specified (or
+ the block time has expired) so leave now. */
+ taskEXIT_CRITICAL();
+ traceQUEUE_RECEIVE_FAILED(pxQueue);
+ return errQUEUE_EMPTY;
+ } else if (xEntryTimeSet == pdFALSE) {
+ /* The queue was empty and a block time was specified so
+ configure the timeout structure. */
+ vTaskSetTimeOutState(&xTimeOut);
+ xEntryTimeSet = pdTRUE;
+ }
+ }
+ }
+ taskEXIT_CRITICAL();
+
+ /* Interrupts and other tasks can send to and receive from the queue
+ now the critical section has been exited. */
+
+ vTaskSuspendAll();
+ prvLockQueue(pxQueue);
+
+ /* Update the timeout state to see if it has expired yet. */
+ if (xTaskCheckForTimeOut(&xTimeOut, &xTicksToWait) == pdFALSE) {
+ if (prvIsQueueEmpty(pxQueue)) {
+ traceBLOCKING_ON_QUEUE_RECEIVE(pxQueue);
+
+#if ( configUSE_MUTEXES == 1 )
+ {
+ if (pxQueue->uxQueueType == queueQUEUE_IS_MUTEX) {
+ portENTER_CRITICAL();
+ {
+ vTaskPriorityInherit((void *) pxQueue->pxMutexHolder);
+ }
+ portEXIT_CRITICAL();
+ }
+ }
+#endif
+
+ vTaskPlaceOnEventList(&(pxQueue->xTasksWaitingToReceive), xTicksToWait);
+ prvUnlockQueue(pxQueue);
+ if (!xTaskResumeAll()) {
+ portYIELD_WITHIN_API();
+ }
+ } else {
+ /* Try again. */
+ prvUnlockQueue(pxQueue);
+ (void) xTaskResumeAll();
+ }
+ } else {
+ prvUnlockQueue(pxQueue);
+ (void) xTaskResumeAll();
+ traceQUEUE_RECEIVE_FAILED(pxQueue);
+ return errQUEUE_EMPTY;
+ }
+ }
+}
+/*-----------------------------------------------------------*/
+
+signed portBASE_TYPE xQueueReceiveFromISR(xQueueHandle pxQueue, void * const pvBuffer, signed portBASE_TYPE *pxTaskWoken)
+{
+ signed portBASE_TYPE xReturn;
+ unsigned portBASE_TYPE uxSavedInterruptStatus;
+
+ uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();
+ {
+ /* We cannot block from an ISR, so check there is data available. */
+ if (pxQueue->uxMessagesWaiting > (unsigned portBASE_TYPE) 0) {
+ traceQUEUE_RECEIVE_FROM_ISR(pxQueue);
+
+ prvCopyDataFromQueue(pxQueue, pvBuffer);
+ --(pxQueue->uxMessagesWaiting);
+
+ /* If the queue is locked we will not modify the event list. Instead
+ we update the lock count so the task that unlocks the queue will know
+ that an ISR has removed data while the queue was locked. */
+ if (pxQueue->xRxLock == queueUNLOCKED) {
+ if (!listLIST_IS_EMPTY(&(pxQueue->xTasksWaitingToSend))) {
+ if (xTaskRemoveFromEventList(&(pxQueue->xTasksWaitingToSend)) != pdFALSE) {
+ /* The task waiting has a higher priority than us so
+ force a context switch. */
+ *pxTaskWoken = pdTRUE;
+ }
+ }
+ } else {
+ /* Increment the lock count so the task that unlocks the queue
+ knows that data was removed while it was locked. */
+ ++(pxQueue->xRxLock);
+ }
+
+ xReturn = pdPASS;
+ } else {
+ xReturn = pdFAIL;
+ traceQUEUE_RECEIVE_FROM_ISR_FAILED(pxQueue);
+ }
+ }
+ portCLEAR_INTERRUPT_MASK_FROM_ISR(uxSavedInterruptStatus);
+
+ return xReturn;
+}
+/*-----------------------------------------------------------*/
+
+unsigned portBASE_TYPE uxQueueMessagesWaiting(const xQueueHandle pxQueue)
+{
+ unsigned portBASE_TYPE uxReturn;
+
+ taskENTER_CRITICAL();
+ uxReturn = pxQueue->uxMessagesWaiting;
+ taskEXIT_CRITICAL();
+
+ return uxReturn;
+}
+/*-----------------------------------------------------------*/
+
+unsigned portBASE_TYPE uxQueueMessagesWaitingFromISR(const xQueueHandle pxQueue)
+{
+ unsigned portBASE_TYPE uxReturn;
+
+ uxReturn = pxQueue->uxMessagesWaiting;
+
+ return uxReturn;
+}
+/*-----------------------------------------------------------*/
+
+void vQueueDelete(xQueueHandle pxQueue)
+{
+ traceQUEUE_DELETE(pxQueue);
+ vQueueUnregisterQueue(pxQueue);
+ vPortFree(pxQueue->pcHead);
+ vPortFree(pxQueue);
+}
+/*-----------------------------------------------------------*/
+
+static void prvCopyDataToQueue(xQUEUE *pxQueue, const void *pvItemToQueue, portBASE_TYPE xPosition)
+{
+ if (pxQueue->uxItemSize == (unsigned portBASE_TYPE) 0) {
+#if ( configUSE_MUTEXES == 1 )
+ {
+ if (pxQueue->uxQueueType == queueQUEUE_IS_MUTEX) {
+ /* The mutex is no longer being held. */
+ vTaskPriorityDisinherit((void *) pxQueue->pxMutexHolder);
+ pxQueue->pxMutexHolder = NULL;
+ }
+ }
+#endif
+ } else if (xPosition == queueSEND_TO_BACK) {
+ memcpy((void *) pxQueue->pcWriteTo, pvItemToQueue, (unsigned) pxQueue->uxItemSize);
+ pxQueue->pcWriteTo += pxQueue->uxItemSize;
+ if (pxQueue->pcWriteTo >= pxQueue->pcTail) {
+ pxQueue->pcWriteTo = pxQueue->pcHead;
+ }
+ } else {
+ memcpy((void *) pxQueue->pcReadFrom, pvItemToQueue, (unsigned) pxQueue->uxItemSize);
+ pxQueue->pcReadFrom -= pxQueue->uxItemSize;
+ if (pxQueue->pcReadFrom < pxQueue->pcHead) {
+ pxQueue->pcReadFrom = (pxQueue->pcTail - pxQueue->uxItemSize);
+ }
+ }
+
+ ++(pxQueue->uxMessagesWaiting);
+}
+/*-----------------------------------------------------------*/
+
+static void prvCopyDataFromQueue(xQUEUE * const pxQueue, const void *pvBuffer)
+{
+ if (pxQueue->uxQueueType != queueQUEUE_IS_MUTEX) {
+ pxQueue->pcReadFrom += pxQueue->uxItemSize;
+ if (pxQueue->pcReadFrom >= pxQueue->pcTail) {
+ pxQueue->pcReadFrom = pxQueue->pcHead;
+ }
+ memcpy((void *) pvBuffer, (void *) pxQueue->pcReadFrom, (unsigned) pxQueue->uxItemSize);
+ }
+}
+/*-----------------------------------------------------------*/
+
+static void prvUnlockQueue(xQueueHandle pxQueue)
+{
+ /* THIS FUNCTION MUST BE CALLED WITH THE SCHEDULER SUSPENDED. */
+
+ /* The lock counts contains the number of extra data items placed or
+ removed from the queue while the queue was locked. When a queue is
+ locked items can be added or removed, but the event lists cannot be
+ updated. */
+ taskENTER_CRITICAL();
+ {
+ /* See if data was added to the queue while it was locked. */
+ while (pxQueue->xTxLock > queueLOCKED_UNMODIFIED) {
+ /* Data was posted while the queue was locked. Are any tasks
+ blocked waiting for data to become available? */
+ if (!listLIST_IS_EMPTY(&(pxQueue->xTasksWaitingToReceive))) {
+ /* Tasks that are removed from the event list will get added to
+ the pending ready list as the scheduler is still suspended. */
+ if (xTaskRemoveFromEventList(&(pxQueue->xTasksWaitingToReceive)) != pdFALSE) {
+ /* The task waiting has a higher priority so record that a
+ context switch is required. */
+ vTaskMissedYield();
+ }
+
+ --(pxQueue->xTxLock);
+ } else {
+ break;
+ }
+ }
+
+ pxQueue->xTxLock = queueUNLOCKED;
+ }
+ taskEXIT_CRITICAL();
+
+ /* Do the same for the Rx lock. */
+ taskENTER_CRITICAL();
+ {
+ while (pxQueue->xRxLock > queueLOCKED_UNMODIFIED) {
+ if (!listLIST_IS_EMPTY(&(pxQueue->xTasksWaitingToSend))) {
+ if (xTaskRemoveFromEventList(&(pxQueue->xTasksWaitingToSend)) != pdFALSE) {
+ vTaskMissedYield();
+ }
+
+ --(pxQueue->xRxLock);
+ } else {
+ break;
+ }
+ }
+
+ pxQueue->xRxLock = queueUNLOCKED;
+ }
+ taskEXIT_CRITICAL();
+}
+/*-----------------------------------------------------------*/
+
+static signed portBASE_TYPE prvIsQueueEmpty(const xQueueHandle pxQueue)
+{
+ signed portBASE_TYPE xReturn;
+
+ taskENTER_CRITICAL();
+ xReturn = (pxQueue->uxMessagesWaiting == (unsigned portBASE_TYPE) 0);
+ taskEXIT_CRITICAL();
+
+ return xReturn;
+}
+/*-----------------------------------------------------------*/
+
+signed portBASE_TYPE xQueueIsQueueEmptyFromISR(const xQueueHandle pxQueue)
+{
+ signed portBASE_TYPE xReturn;
+
+ xReturn = (pxQueue->uxMessagesWaiting == (unsigned portBASE_TYPE) 0);
+
+ return xReturn;
+}
+/*-----------------------------------------------------------*/
+
+static signed portBASE_TYPE prvIsQueueFull(const xQueueHandle pxQueue)
+{
+ signed portBASE_TYPE xReturn;
+
+ taskENTER_CRITICAL();
+ xReturn = (pxQueue->uxMessagesWaiting == pxQueue->uxLength);
+ taskEXIT_CRITICAL();
+
+ return xReturn;
+}
+/*-----------------------------------------------------------*/
+
+signed portBASE_TYPE xQueueIsQueueFullFromISR(const xQueueHandle pxQueue)
+{
+ signed portBASE_TYPE xReturn;
+
+ xReturn = (pxQueue->uxMessagesWaiting == pxQueue->uxLength);
+
+ return xReturn;
+}
+/*-----------------------------------------------------------*/
+
+#if configUSE_CO_ROUTINES == 1
+signed portBASE_TYPE xQueueCRSend(xQueueHandle pxQueue, const void *pvItemToQueue, portTickType xTicksToWait)
+{
+ signed portBASE_TYPE xReturn;
+
+ /* If the queue is already full we may have to block. A critical section
+ is required to prevent an interrupt removing something from the queue
+ between the check to see if the queue is full and blocking on the queue. */
+ portDISABLE_INTERRUPTS();
+ {
+ if (prvIsQueueFull(pxQueue)) {
+ /* The queue is full - do we want to block or just leave without
+ posting? */
+ if (xTicksToWait > (portTickType) 0) {
+ /* As this is called from a coroutine we cannot block directly, but
+ return indicating that we need to block. */
+ vCoRoutineAddToDelayedList(xTicksToWait, &(pxQueue->xTasksWaitingToSend));
+ portENABLE_INTERRUPTS();
+ return errQUEUE_BLOCKED;
+ } else {
+ portENABLE_INTERRUPTS();
+ return errQUEUE_FULL;
+ }
+ }
+ }
+ portENABLE_INTERRUPTS();
+
+ portNOP();
+
+ portDISABLE_INTERRUPTS();
+ {
+ if (pxQueue->uxMessagesWaiting < pxQueue->uxLength) {
+ /* There is room in the queue, copy the data into the queue. */
+ prvCopyDataToQueue(pxQueue, pvItemToQueue, queueSEND_TO_BACK);
+ xReturn = pdPASS;
+
+ /* Were any co-routines waiting for data to become available? */
+ if (!listLIST_IS_EMPTY(&(pxQueue->xTasksWaitingToReceive))) {
+ /* In this instance the co-routine could be placed directly
+ into the ready list as we are within a critical section.
+ Instead the same pending ready list mechanism is used as if
+ the event were caused from within an interrupt. */
+ if (xCoRoutineRemoveFromEventList(&(pxQueue->xTasksWaitingToReceive)) != pdFALSE) {
+ /* The co-routine waiting has a higher priority so record
+ that a yield might be appropriate. */
+ xReturn = errQUEUE_YIELD;
+ }
+ }
+ } else {
+ xReturn = errQUEUE_FULL;
+ }
+ }
+ portENABLE_INTERRUPTS();
+
+ return xReturn;
+}
+#endif
+/*-----------------------------------------------------------*/
+
+#if configUSE_CO_ROUTINES == 1
+signed portBASE_TYPE xQueueCRReceive(xQueueHandle pxQueue, void *pvBuffer, portTickType xTicksToWait)
+{
+ signed portBASE_TYPE xReturn;
+
+ /* If the queue is already empty we may have to block. A critical section
+ is required to prevent an interrupt adding something to the queue
+ between the check to see if the queue is empty and blocking on the queue. */
+ portDISABLE_INTERRUPTS();
+ {
+ if (pxQueue->uxMessagesWaiting == (unsigned portBASE_TYPE) 0) {
+ /* There are no messages in the queue, do we want to block or just
+ leave with nothing? */
+ if (xTicksToWait > (portTickType) 0) {
+ /* As this is a co-routine we cannot block directly, but return
+ indicating that we need to block. */
+ vCoRoutineAddToDelayedList(xTicksToWait, &(pxQueue->xTasksWaitingToReceive));
+ portENABLE_INTERRUPTS();
+ return errQUEUE_BLOCKED;
+ } else {
+ portENABLE_INTERRUPTS();
+ return errQUEUE_FULL;
+ }
+ }
+ }
+ portENABLE_INTERRUPTS();
+
+ portNOP();
+
+ portDISABLE_INTERRUPTS();
+ {
+ if (pxQueue->uxMessagesWaiting > (unsigned portBASE_TYPE) 0) {
+ /* Data is available from the queue. */
+ pxQueue->pcReadFrom += pxQueue->uxItemSize;
+ if (pxQueue->pcReadFrom >= pxQueue->pcTail) {
+ pxQueue->pcReadFrom = pxQueue->pcHead;
+ }
+ --(pxQueue->uxMessagesWaiting);
+ memcpy((void *) pvBuffer, (void *) pxQueue->pcReadFrom, (unsigned) pxQueue->uxItemSize);
+
+ xReturn = pdPASS;
+
+ /* Were any co-routines waiting for space to become available? */
+ if (!listLIST_IS_EMPTY(&(pxQueue->xTasksWaitingToSend))) {
+ /* In this instance the co-routine could be placed directly
+ into the ready list as we are within a critical section.
+ Instead the same pending ready list mechanism is used as if
+ the event were caused from within an interrupt. */
+ if (xCoRoutineRemoveFromEventList(&(pxQueue->xTasksWaitingToSend)) != pdFALSE) {
+ xReturn = errQUEUE_YIELD;
+ }
+ }
+ } else {
+ xReturn = pdFAIL;
+ }
+ }
+ portENABLE_INTERRUPTS();
+
+ return xReturn;
+}
+#endif
+/*-----------------------------------------------------------*/
+
+
+
+#if configUSE_CO_ROUTINES == 1
+signed portBASE_TYPE xQueueCRSendFromISR(xQueueHandle pxQueue, const void *pvItemToQueue, signed portBASE_TYPE xCoRoutinePreviouslyWoken)
+{
+ /* Cannot block within an ISR so if there is no space on the queue then
+ exit without doing anything. */
+ if (pxQueue->uxMessagesWaiting < pxQueue->uxLength) {
+ prvCopyDataToQueue(pxQueue, pvItemToQueue, queueSEND_TO_BACK);
+
+ /* We only want to wake one co-routine per ISR, so check that a
+ co-routine has not already been woken. */
+ if (!xCoRoutinePreviouslyWoken) {
+ if (!listLIST_IS_EMPTY(&(pxQueue->xTasksWaitingToReceive))) {
+ if (xCoRoutineRemoveFromEventList(&(pxQueue->xTasksWaitingToReceive)) != pdFALSE) {
+ return pdTRUE;
+ }
+ }
+ }
+ }
+
+ return xCoRoutinePreviouslyWoken;
+}
+#endif
+/*-----------------------------------------------------------*/
+
+#if configUSE_CO_ROUTINES == 1
+signed portBASE_TYPE xQueueCRReceiveFromISR(xQueueHandle pxQueue, void *pvBuffer, signed portBASE_TYPE *pxCoRoutineWoken)
+{
+ signed portBASE_TYPE xReturn;
+
+ /* We cannot block from an ISR, so check there is data available. If
+ not then just leave without doing anything. */
+ if (pxQueue->uxMessagesWaiting > (unsigned portBASE_TYPE) 0) {
+ /* Copy the data from the queue. */
+ pxQueue->pcReadFrom += pxQueue->uxItemSize;
+ if (pxQueue->pcReadFrom >= pxQueue->pcTail) {
+ pxQueue->pcReadFrom = pxQueue->pcHead;
+ }
+ --(pxQueue->uxMessagesWaiting);
+ memcpy((void *) pvBuffer, (void *) pxQueue->pcReadFrom, (unsigned) pxQueue->uxItemSize);
+
+ if (!(*pxCoRoutineWoken)) {
+ if (!listLIST_IS_EMPTY(&(pxQueue->xTasksWaitingToSend))) {
+ if (xCoRoutineRemoveFromEventList(&(pxQueue->xTasksWaitingToSend)) != pdFALSE) {
+ *pxCoRoutineWoken = pdTRUE;
+ }
+ }
+ }
+
+ xReturn = pdPASS;
+ } else {
+ xReturn = pdFAIL;
+ }
+
+ return xReturn;
+}
+#endif
+/*-----------------------------------------------------------*/
+
+#if configQUEUE_REGISTRY_SIZE > 0
+
+void vQueueAddToRegistry(xQueueHandle xQueue, signed char *pcQueueName)
+{
+ unsigned portBASE_TYPE ux;
+
+ /* See if there is an empty space in the registry. A NULL name denotes
+ a free slot. */
+ for (ux = 0; ux < configQUEUE_REGISTRY_SIZE; ux++) {
+ if (xQueueRegistry[ ux ].pcQueueName == NULL) {
+ /* Store the information on this queue. */
+ xQueueRegistry[ ux ].pcQueueName = pcQueueName;
+ xQueueRegistry[ ux ].xHandle = xQueue;
+ break;
+ }
+ }
+}
+
+#endif
+/*-----------------------------------------------------------*/
+
+#if configQUEUE_REGISTRY_SIZE > 0
+
+static void vQueueUnregisterQueue(xQueueHandle xQueue)
+{
+ unsigned portBASE_TYPE ux;
+
+ /* See if the handle of the queue being unregistered in actually in the
+ registry. */
+ for (ux = 0; ux < configQUEUE_REGISTRY_SIZE; ux++) {
+ if (xQueueRegistry[ ux ].xHandle == xQueue) {
+ /* Set the name to NULL to show that this slot if free again. */
+ xQueueRegistry[ ux ].pcQueueName = NULL;
+ break;
+ }
+ }
+
+}
+
+#endif
+
diff --git a/gyro_board/src/usb/FreeRTOS/tasks.c b/gyro_board/src/usb/FreeRTOS/tasks.c
new file mode 100644
index 0000000..22587a4
--- /dev/null
+++ b/gyro_board/src/usb/FreeRTOS/tasks.c
@@ -0,0 +1,2150 @@
+/*
+ FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.
+
+ ***************************************************************************
+ * *
+ * If you are: *
+ * *
+ * + New to FreeRTOS, *
+ * + Wanting to learn FreeRTOS or multitasking in general quickly *
+ * + Looking for basic training, *
+ * + Wanting to improve your FreeRTOS skills and productivity *
+ * *
+ * then take a look at the FreeRTOS eBook *
+ * *
+ * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
+ * http://www.FreeRTOS.org/Documentation *
+ * *
+ * A pdf reference manual is also available. Both are usually delivered *
+ * to your inbox within 20 minutes to two hours when purchased between 8am *
+ * and 8pm GMT (although please allow up to 24 hours in case of *
+ * exceptional circumstances). Thank you for your support! *
+ * *
+ ***************************************************************************
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
+ ***NOTE*** The exception to the GPL is included to allow you to distribute
+ a combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details. You should have received a copy of the GNU General Public
+ License and the FreeRTOS license exception along with FreeRTOS; if not it
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained
+ by writing to Richard Barry, contact details for whom are available on the
+ FreeRTOS WEB site.
+
+ 1 tab == 4 spaces!
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+/* Defining MPU_WRAPPERS_INCLUDED_FROM_API_FILE prevents task.h from redefining
+all the API functions to use the MPU wrappers. That should only be done when
+task.h is included from an application file. */
+#define MPU_WRAPPERS_INCLUDED_FROM_API_FILE
+
+#include "FreeRTOS.h"
+#include "task.h"
+#include "StackMacros.h"
+
+#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE
+
+/*
+ * Macro to define the amount of stack available to the idle task.
+ */
+#define tskIDLE_STACK_SIZE configMINIMAL_STACK_SIZE
+
+/*
+ * Task control block. A task control block (TCB) is allocated to each task,
+ * and stores the context of the task.
+ */
+typedef struct tskTaskControlBlock {
+ volatile portSTACK_TYPE *pxTopOfStack; /*< Points to the location of the last item placed on the tasks stack. THIS MUST BE THE FIRST MEMBER OF THE STRUCT. */
+
+#if ( portUSING_MPU_WRAPPERS == 1 )
+ xMPU_SETTINGS xMPUSettings; /*< The MPU settings are defined as part of the port layer. THIS MUST BE THE SECOND MEMBER OF THE STRUCT. */
+#endif
+
+ xListItem xGenericListItem; /*< List item used to place the TCB in ready and blocked queues. */
+ xListItem xEventListItem; /*< List item used to place the TCB in event lists. */
+ unsigned portBASE_TYPE uxPriority; /*< The priority of the task where 0 is the lowest priority. */
+ portSTACK_TYPE *pxStack; /*< Points to the start of the stack. */
+ signed char pcTaskName[ configMAX_TASK_NAME_LEN ];/*< Descriptive name given to the task when created. Facilitates debugging only. */
+
+#if ( portSTACK_GROWTH > 0 )
+ portSTACK_TYPE *pxEndOfStack; /*< Used for stack overflow checking on architectures where the stack grows up from low memory. */
+#endif
+
+#if ( portCRITICAL_NESTING_IN_TCB == 1 )
+ unsigned portBASE_TYPE uxCriticalNesting;
+#endif
+
+#if ( configUSE_TRACE_FACILITY == 1 )
+ unsigned portBASE_TYPE uxTCBNumber; /*< This is used for tracing the scheduler and making debugging easier only. */
+#endif
+
+#if ( configUSE_MUTEXES == 1 )
+ unsigned portBASE_TYPE uxBasePriority; /*< The priority last assigned to the task - used by the priority inheritance mechanism. */
+#endif
+
+#if ( configUSE_APPLICATION_TASK_TAG == 1 )
+ pdTASK_HOOK_CODE pxTaskTag;
+#endif
+
+#if ( configGENERATE_RUN_TIME_STATS == 1 )
+ unsigned long ulRunTimeCounter; /*< Used for calculating how much CPU time each task is utilising. */
+#endif
+
+} tskTCB;
+
+
+/*
+ * Some kernel aware debuggers require data to be viewed to be global, rather
+ * than file scope.
+ */
+#ifdef portREMOVE_STATIC_QUALIFIER
+#define static
+#endif
+
+/*lint -e956 */
+PRIVILEGED_DATA tskTCB * volatile pxCurrentTCB = NULL;
+
+/* Lists for ready and blocked tasks. --------------------*/
+
+PRIVILEGED_DATA static xList pxReadyTasksLists[ configMAX_PRIORITIES ]; /*< Prioritised ready tasks. */
+PRIVILEGED_DATA static xList xDelayedTaskList1; /*< Delayed tasks. */
+PRIVILEGED_DATA static xList xDelayedTaskList2; /*< Delayed tasks (two lists are used - one for delays that have overflowed the current tick count. */
+PRIVILEGED_DATA static xList * volatile pxDelayedTaskList ; /*< Points to the delayed task list currently being used. */
+PRIVILEGED_DATA static xList * volatile pxOverflowDelayedTaskList; /*< Points to the delayed task list currently being used to hold tasks that have overflowed the current tick count. */
+PRIVILEGED_DATA static xList xPendingReadyList; /*< Tasks that have been readied while the scheduler was suspended. They will be moved to the ready queue when the scheduler is resumed. */
+
+#if ( INCLUDE_vTaskDelete == 1 )
+
+PRIVILEGED_DATA static volatile xList xTasksWaitingTermination; /*< Tasks that have been deleted - but the their memory not yet freed. */
+PRIVILEGED_DATA static volatile unsigned portBASE_TYPE uxTasksDeleted = (unsigned portBASE_TYPE) 0;
+
+#endif
+
+#if ( INCLUDE_vTaskSuspend == 1 )
+
+PRIVILEGED_DATA static xList xSuspendedTaskList; /*< Tasks that are currently suspended. */
+
+#endif
+
+/* File private variables. --------------------------------*/
+PRIVILEGED_DATA static volatile unsigned portBASE_TYPE uxCurrentNumberOfTasks = (unsigned portBASE_TYPE) 0;
+PRIVILEGED_DATA static volatile portTickType xTickCount = (portTickType) 0;
+PRIVILEGED_DATA static unsigned portBASE_TYPE uxTopUsedPriority = tskIDLE_PRIORITY;
+PRIVILEGED_DATA static volatile unsigned portBASE_TYPE uxTopReadyPriority = tskIDLE_PRIORITY;
+PRIVILEGED_DATA static volatile signed portBASE_TYPE xSchedulerRunning = pdFALSE;
+PRIVILEGED_DATA static volatile unsigned portBASE_TYPE uxSchedulerSuspended = (unsigned portBASE_TYPE) pdFALSE;
+PRIVILEGED_DATA static volatile unsigned portBASE_TYPE uxMissedTicks = (unsigned portBASE_TYPE) 0;
+PRIVILEGED_DATA static volatile portBASE_TYPE xMissedYield = (portBASE_TYPE) pdFALSE;
+PRIVILEGED_DATA static volatile portBASE_TYPE xNumOfOverflows = (portBASE_TYPE) 0;
+PRIVILEGED_DATA static unsigned portBASE_TYPE uxTaskNumber = (unsigned portBASE_TYPE) 0;
+
+#if ( configGENERATE_RUN_TIME_STATS == 1 )
+
+PRIVILEGED_DATA static char pcStatsString[ 50 ] ;
+PRIVILEGED_DATA static unsigned long ulTaskSwitchedInTime = 0UL; /*< Holds the value of a timer/counter the last time a task was switched in. */
+static void prvGenerateRunTimeStatsForTasksInList(const signed char *pcWriteBuffer, xList *pxList, unsigned long ulTotalRunTime) PRIVILEGED_FUNCTION;
+
+#endif
+
+/* Debugging and trace facilities private variables and macros. ------------*/
+
+/*
+ * The value used to fill the stack of a task when the task is created. This
+ * is used purely for checking the high water mark for tasks.
+ */
+#define tskSTACK_FILL_BYTE ( 0xa5 )
+
+/*
+ * Macros used by vListTask to indicate which state a task is in.
+ */
+#define tskBLOCKED_CHAR ( ( signed char ) 'B' )
+#define tskREADY_CHAR ( ( signed char ) 'R' )
+#define tskDELETED_CHAR ( ( signed char ) 'D' )
+#define tskSUSPENDED_CHAR ( ( signed char ) 'S' )
+
+/*
+ * Macros and private variables used by the trace facility.
+ */
+#if ( configUSE_TRACE_FACILITY == 1 )
+
+#define tskSIZE_OF_EACH_TRACE_LINE ( ( unsigned long ) ( sizeof( unsigned long ) + sizeof( unsigned long ) ) )
+PRIVILEGED_DATA static volatile signed char * volatile pcTraceBuffer;
+PRIVILEGED_DATA static signed char *pcTraceBufferStart;
+PRIVILEGED_DATA static signed char *pcTraceBufferEnd;
+PRIVILEGED_DATA static signed portBASE_TYPE xTracing = pdFALSE;
+static unsigned portBASE_TYPE uxPreviousTask = 255;
+PRIVILEGED_DATA static char pcStatusString[ 50 ];
+
+#endif
+
+/*-----------------------------------------------------------*/
+
+/*
+ * Macro that writes a trace of scheduler activity to a buffer. This trace
+ * shows which task is running when and is very useful as a debugging tool.
+ * As this macro is called each context switch it is a good idea to undefine
+ * it if not using the facility.
+ */
+#if ( configUSE_TRACE_FACILITY == 1 )
+
+#define vWriteTraceToBuffer() \
+ { \
+ if( xTracing ) \
+ { \
+ if( uxPreviousTask != pxCurrentTCB->uxTCBNumber ) \
+ { \
+ if( ( pcTraceBuffer + tskSIZE_OF_EACH_TRACE_LINE ) < pcTraceBufferEnd ) \
+ { \
+ uxPreviousTask = pxCurrentTCB->uxTCBNumber; \
+ *( unsigned long * ) pcTraceBuffer = ( unsigned long ) xTickCount; \
+ pcTraceBuffer += sizeof( unsigned long ); \
+ *( unsigned long * ) pcTraceBuffer = ( unsigned long ) uxPreviousTask; \
+ pcTraceBuffer += sizeof( unsigned long ); \
+ } \
+ else \
+ { \
+ xTracing = pdFALSE; \
+ } \
+ } \
+ } \
+ }
+
+#else
+
+#define vWriteTraceToBuffer()
+
+#endif
+/*-----------------------------------------------------------*/
+
+/*
+ * Place the task represented by pxTCB into the appropriate ready queue for
+ * the task. It is inserted at the end of the list. One quirk of this is
+ * that if the task being inserted is at the same priority as the currently
+ * executing task, then it will only be rescheduled after the currently
+ * executing task has been rescheduled.
+ */
+#define prvAddTaskToReadyQueue( pxTCB ) \
+{ \
+ if( pxTCB->uxPriority > uxTopReadyPriority ) \
+ { \
+ uxTopReadyPriority = pxTCB->uxPriority; \
+ } \
+ vListInsertEnd( ( xList * ) &( pxReadyTasksLists[ pxTCB->uxPriority ] ), &( pxTCB->xGenericListItem ) ); \
+}
+/*-----------------------------------------------------------*/
+
+/*
+ * Macro that looks at the list of tasks that are currently delayed to see if
+ * any require waking.
+ *
+ * Tasks are stored in the queue in the order of their wake time - meaning
+ * once one tasks has been found whose timer has not expired we need not look
+ * any further down the list.
+ */
+#define prvCheckDelayedTasks() \
+{ \
+register tskTCB *pxTCB; \
+ \
+ while( ( pxTCB = ( tskTCB * ) listGET_OWNER_OF_HEAD_ENTRY( pxDelayedTaskList ) ) != NULL ) \
+ { \
+ if( xTickCount < listGET_LIST_ITEM_VALUE( &( pxTCB->xGenericListItem ) ) ) \
+ { \
+ break; \
+ } \
+ vListRemove( &( pxTCB->xGenericListItem ) ); \
+ /* Is the task waiting on an event also? */ \
+ if( pxTCB->xEventListItem.pvContainer ) \
+ { \
+ vListRemove( &( pxTCB->xEventListItem ) ); \
+ } \
+ prvAddTaskToReadyQueue( pxTCB ); \
+ } \
+}
+/*-----------------------------------------------------------*/
+
+/*
+ * Several functions take an xTaskHandle parameter that can optionally be NULL,
+ * where NULL is used to indicate that the handle of the currently executing
+ * task should be used in place of the parameter. This macro simply checks to
+ * see if the parameter is NULL and returns a pointer to the appropriate TCB.
+ */
+#define prvGetTCBFromHandle( pxHandle ) ( ( pxHandle == NULL ) ? ( tskTCB * ) pxCurrentTCB : ( tskTCB * ) pxHandle )
+
+
+/* File private functions. --------------------------------*/
+
+/*
+ * Utility to ready a TCB for a given task. Mainly just copies the parameters
+ * into the TCB structure.
+ */
+static void prvInitialiseTCBVariables(tskTCB *pxTCB, const signed char * const pcName, unsigned portBASE_TYPE uxPriority, const xMemoryRegion * const xRegions, unsigned short usStackDepth) PRIVILEGED_FUNCTION;
+
+/*
+ * Utility to ready all the lists used by the scheduler. This is called
+ * automatically upon the creation of the first task.
+ */
+static void prvInitialiseTaskLists(void) PRIVILEGED_FUNCTION;
+
+/*
+ * The idle task, which as all tasks is implemented as a never ending loop.
+ * The idle task is automatically created and added to the ready lists upon
+ * creation of the first user task.
+ *
+ * The portTASK_FUNCTION_PROTO() macro is used to allow port/compiler specific
+ * language extensions. The equivalent prototype for this function is:
+ *
+ * void prvIdleTask( void *pvParameters );
+ *
+ */
+static portTASK_FUNCTION_PROTO(prvIdleTask, pvParameters);
+
+/*
+ * Utility to free all memory allocated by the scheduler to hold a TCB,
+ * including the stack pointed to by the TCB.
+ *
+ * This does not free memory allocated by the task itself (i.e. memory
+ * allocated by calls to pvPortMalloc from within the tasks application code).
+ */
+#if ( ( INCLUDE_vTaskDelete == 1 ) || ( INCLUDE_vTaskCleanUpResources == 1 ) )
+
+static void prvDeleteTCB(tskTCB *pxTCB) PRIVILEGED_FUNCTION;
+
+#endif
+
+/*
+ * Used only by the idle task. This checks to see if anything has been placed
+ * in the list of tasks waiting to be deleted. If so the task is cleaned up
+ * and its TCB deleted.
+ */
+static void prvCheckTasksWaitingTermination(void) PRIVILEGED_FUNCTION;
+
+/*
+ * Allocates memory from the heap for a TCB and associated stack. Checks the
+ * allocation was successful.
+ */
+static tskTCB *prvAllocateTCBAndStack(unsigned short usStackDepth, portSTACK_TYPE *puxStackBuffer) PRIVILEGED_FUNCTION;
+
+/*
+ * Called from vTaskList. vListTasks details all the tasks currently under
+ * control of the scheduler. The tasks may be in one of a number of lists.
+ * prvListTaskWithinSingleList accepts a list and details the tasks from
+ * within just that list.
+ *
+ * THIS FUNCTION IS INTENDED FOR DEBUGGING ONLY, AND SHOULD NOT BE CALLED FROM
+ * NORMAL APPLICATION CODE.
+ */
+#if ( configUSE_TRACE_FACILITY == 1 )
+
+static void prvListTaskWithinSingleList(const signed char *pcWriteBuffer, xList *pxList, signed char cStatus) PRIVILEGED_FUNCTION;
+
+#endif
+
+/*
+ * When a task is created, the stack of the task is filled with a known value.
+ * This function determines the 'high water mark' of the task stack by
+ * determining how much of the stack remains at the original preset value.
+ */
+#if ( ( configUSE_TRACE_FACILITY == 1 ) || ( INCLUDE_uxTaskGetStackHighWaterMark == 1 ) )
+
+static unsigned short usTaskCheckFreeStackSpace(const unsigned char * pucStackByte) PRIVILEGED_FUNCTION;
+
+#endif
+
+
+/*lint +e956 */
+
+
+
+/*-----------------------------------------------------------
+ * TASK CREATION API documented in task.h
+ *----------------------------------------------------------*/
+
+signed portBASE_TYPE xTaskGenericCreate(pdTASK_CODE pxTaskCode, const signed char * const pcName, unsigned short usStackDepth, void *pvParameters, unsigned portBASE_TYPE uxPriority, xTaskHandle *pxCreatedTask, portSTACK_TYPE *puxStackBuffer, const xMemoryRegion * const xRegions)
+{
+ signed portBASE_TYPE xReturn;
+ tskTCB * pxNewTCB;
+
+ /* Allocate the memory required by the TCB and stack for the new task,
+ checking that the allocation was successful. */
+ pxNewTCB = prvAllocateTCBAndStack(usStackDepth, puxStackBuffer);
+
+ if (pxNewTCB != NULL) {
+ portSTACK_TYPE *pxTopOfStack;
+
+#if( portUSING_MPU_WRAPPERS == 1 )
+ /* Should the task be created in privileged mode? */
+ portBASE_TYPE xRunPrivileged;
+ if ((uxPriority & portPRIVILEGE_BIT) != 0x00) {
+ xRunPrivileged = pdTRUE;
+ } else {
+ xRunPrivileged = pdFALSE;
+ }
+ uxPriority &= ~portPRIVILEGE_BIT;
+#endif /* portUSING_MPU_WRAPPERS == 1 */
+
+ /* Calculate the top of stack address. This depends on whether the
+ stack grows from high memory to low (as per the 80x86) or visa versa.
+ portSTACK_GROWTH is used to make the result positive or negative as
+ required by the port. */
+#if( portSTACK_GROWTH < 0 )
+ {
+ pxTopOfStack = pxNewTCB->pxStack + (usStackDepth - 1);
+ pxTopOfStack = (portSTACK_TYPE *)(((unsigned long) pxTopOfStack) & ((unsigned long) ~portBYTE_ALIGNMENT_MASK));
+ }
+#else
+ {
+ pxTopOfStack = pxNewTCB->pxStack;
+
+ /* If we want to use stack checking on architectures that use
+ a positive stack growth direction then we also need to store the
+ other extreme of the stack space. */
+ pxNewTCB->pxEndOfStack = pxNewTCB->pxStack + (usStackDepth - 1);
+ }
+#endif
+
+ /* Setup the newly allocated TCB with the initial state of the task. */
+ prvInitialiseTCBVariables(pxNewTCB, pcName, uxPriority, xRegions, usStackDepth);
+
+ /* Initialize the TCB stack to look as if the task was already running,
+ but had been interrupted by the scheduler. The return address is set
+ to the start of the task function. Once the stack has been initialised
+ the top of stack variable is updated. */
+#if( portUSING_MPU_WRAPPERS == 1 )
+ {
+ pxNewTCB->pxTopOfStack = pxPortInitialiseStack(pxTopOfStack, pxTaskCode, pvParameters, xRunPrivileged);
+ }
+#else
+ {
+ pxNewTCB->pxTopOfStack = pxPortInitialiseStack(pxTopOfStack, pxTaskCode, pvParameters);
+ }
+#endif
+
+ /* We are going to manipulate the task queues to add this task to a
+ ready list, so must make sure no interrupts occur. */
+ portENTER_CRITICAL();
+ {
+ uxCurrentNumberOfTasks++;
+ if (uxCurrentNumberOfTasks == (unsigned portBASE_TYPE) 1) {
+ /* As this is the first task it must also be the current task. */
+ pxCurrentTCB = pxNewTCB;
+
+ /* This is the first task to be created so do the preliminary
+ initialisation required. We will not recover if this call
+ fails, but we will report the failure. */
+ prvInitialiseTaskLists();
+ } else {
+ /* If the scheduler is not already running, make this task the
+ current task if it is the highest priority task to be created
+ so far. */
+ if (xSchedulerRunning == pdFALSE) {
+ if (pxCurrentTCB->uxPriority <= uxPriority) {
+ pxCurrentTCB = pxNewTCB;
+ }
+ }
+ }
+
+ /* Remember the top priority to make context switching faster. Use
+ the priority in pxNewTCB as this has been capped to a valid value. */
+ if (pxNewTCB->uxPriority > uxTopUsedPriority) {
+ uxTopUsedPriority = pxNewTCB->uxPriority;
+ }
+
+#if ( configUSE_TRACE_FACILITY == 1 )
+ {
+ /* Add a counter into the TCB for tracing only. */
+ pxNewTCB->uxTCBNumber = uxTaskNumber;
+ }
+#endif
+ uxTaskNumber++;
+
+ prvAddTaskToReadyQueue(pxNewTCB);
+
+ xReturn = pdPASS;
+ traceTASK_CREATE(pxNewTCB);
+ }
+ portEXIT_CRITICAL();
+ } else {
+ xReturn = errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY;
+ traceTASK_CREATE_FAILED(pxNewTCB);
+ }
+
+ if (xReturn == pdPASS) {
+ if ((void *) pxCreatedTask != NULL) {
+ /* Pass the TCB out - in an anonymous way. The calling function/
+ task can use this as a handle to delete the task later if
+ required.*/
+ *pxCreatedTask = (xTaskHandle) pxNewTCB;
+ }
+
+ if (xSchedulerRunning != pdFALSE) {
+ /* If the created task is of a higher priority than the current task
+ then it should run now. */
+ if (pxCurrentTCB->uxPriority < uxPriority) {
+ portYIELD_WITHIN_API();
+ }
+ }
+ }
+
+ return xReturn;
+}
+/*-----------------------------------------------------------*/
+
+#if ( INCLUDE_vTaskDelete == 1 )
+
+void vTaskDelete(xTaskHandle pxTaskToDelete)
+{
+ tskTCB *pxTCB;
+
+ portENTER_CRITICAL();
+ {
+ /* Ensure a yield is performed if the current task is being
+ deleted. */
+ if (pxTaskToDelete == pxCurrentTCB) {
+ pxTaskToDelete = NULL;
+ }
+
+ /* If null is passed in here then we are deleting ourselves. */
+ pxTCB = prvGetTCBFromHandle(pxTaskToDelete);
+
+ /* Remove task from the ready list and place in the termination list.
+ This will stop the task from be scheduled. The idle task will check
+ the termination list and free up any memory allocated by the
+ scheduler for the TCB and stack. */
+ vListRemove(&(pxTCB->xGenericListItem));
+
+ /* Is the task waiting on an event also? */
+ if (pxTCB->xEventListItem.pvContainer) {
+ vListRemove(&(pxTCB->xEventListItem));
+ }
+
+ vListInsertEnd((xList *) &xTasksWaitingTermination, &(pxTCB->xGenericListItem));
+
+ /* Increment the ucTasksDeleted variable so the idle task knows
+ there is a task that has been deleted and that it should therefore
+ check the xTasksWaitingTermination list. */
+ ++uxTasksDeleted;
+
+ /* Increment the uxTaskNumberVariable also so kernel aware debuggers
+ can detect that the task lists need re-generating. */
+ uxTaskNumber++;
+
+ traceTASK_DELETE(pxTCB);
+ }
+ portEXIT_CRITICAL();
+
+ /* Force a reschedule if we have just deleted the current task. */
+ if (xSchedulerRunning != pdFALSE) {
+ if ((void *) pxTaskToDelete == NULL) {
+ portYIELD_WITHIN_API();
+ }
+ }
+}
+
+#endif
+
+
+
+
+
+
+/*-----------------------------------------------------------
+ * TASK CONTROL API documented in task.h
+ *----------------------------------------------------------*/
+
+#if ( INCLUDE_vTaskDelayUntil == 1 )
+
+void vTaskDelayUntil(portTickType * const pxPreviousWakeTime, portTickType xTimeIncrement)
+{
+ portTickType xTimeToWake;
+ portBASE_TYPE xAlreadyYielded, xShouldDelay = pdFALSE;
+
+ vTaskSuspendAll();
+ {
+ /* Generate the tick time at which the task wants to wake. */
+ xTimeToWake = *pxPreviousWakeTime + xTimeIncrement;
+
+ if (xTickCount < *pxPreviousWakeTime) {
+ /* The tick count has overflowed since this function was
+ lasted called. In this case the only time we should ever
+ actually delay is if the wake time has also overflowed,
+ and the wake time is greater than the tick time. When this
+ is the case it is as if neither time had overflowed. */
+ if ((xTimeToWake < *pxPreviousWakeTime) && (xTimeToWake > xTickCount)) {
+ xShouldDelay = pdTRUE;
+ }
+ } else {
+ /* The tick time has not overflowed. In this case we will
+ delay if either the wake time has overflowed, and/or the
+ tick time is less than the wake time. */
+ if ((xTimeToWake < *pxPreviousWakeTime) || (xTimeToWake > xTickCount)) {
+ xShouldDelay = pdTRUE;
+ }
+ }
+
+ /* Update the wake time ready for the next call. */
+ *pxPreviousWakeTime = xTimeToWake;
+
+ if (xShouldDelay) {
+ traceTASK_DELAY_UNTIL();
+
+ /* We must remove ourselves from the ready list before adding
+ ourselves to the blocked list as the same list item is used for
+ both lists. */
+ vListRemove((xListItem *) &(pxCurrentTCB->xGenericListItem));
+
+ /* The list item will be inserted in wake time order. */
+ listSET_LIST_ITEM_VALUE(&(pxCurrentTCB->xGenericListItem), xTimeToWake);
+
+ if (xTimeToWake < xTickCount) {
+ /* Wake time has overflowed. Place this item in the
+ overflow list. */
+ vListInsert((xList *) pxOverflowDelayedTaskList, (xListItem *) &(pxCurrentTCB->xGenericListItem));
+ } else {
+ /* The wake time has not overflowed, so we can use the
+ current block list. */
+ vListInsert((xList *) pxDelayedTaskList, (xListItem *) &(pxCurrentTCB->xGenericListItem));
+ }
+ }
+ }
+ xAlreadyYielded = xTaskResumeAll();
+
+ /* Force a reschedule if xTaskResumeAll has not already done so, we may
+ have put ourselves to sleep. */
+ if (!xAlreadyYielded) {
+ portYIELD_WITHIN_API();
+ }
+}
+
+#endif
+/*-----------------------------------------------------------*/
+
+#if ( INCLUDE_vTaskDelay == 1 )
+
+void vTaskDelay(portTickType xTicksToDelay)
+{
+ portTickType xTimeToWake;
+ signed portBASE_TYPE xAlreadyYielded = pdFALSE;
+
+ /* A delay time of zero just forces a reschedule. */
+ if (xTicksToDelay > (portTickType) 0) {
+ vTaskSuspendAll();
+ {
+ traceTASK_DELAY();
+
+ /* A task that is removed from the event list while the
+ scheduler is suspended will not get placed in the ready
+ list or removed from the blocked list until the scheduler
+ is resumed.
+
+ This task cannot be in an event list as it is the currently
+ executing task. */
+
+ /* Calculate the time to wake - this may overflow but this is
+ not a problem. */
+ xTimeToWake = xTickCount + xTicksToDelay;
+
+ /* We must remove ourselves from the ready list before adding
+ ourselves to the blocked list as the same list item is used for
+ both lists. */
+ vListRemove((xListItem *) &(pxCurrentTCB->xGenericListItem));
+
+ /* The list item will be inserted in wake time order. */
+ listSET_LIST_ITEM_VALUE(&(pxCurrentTCB->xGenericListItem), xTimeToWake);
+
+ if (xTimeToWake < xTickCount) {
+ /* Wake time has overflowed. Place this item in the
+ overflow list. */
+ vListInsert((xList *) pxOverflowDelayedTaskList, (xListItem *) &(pxCurrentTCB->xGenericListItem));
+ } else {
+ /* The wake time has not overflowed, so we can use the
+ current block list. */
+ vListInsert((xList *) pxDelayedTaskList, (xListItem *) &(pxCurrentTCB->xGenericListItem));
+ }
+ }
+ xAlreadyYielded = xTaskResumeAll();
+ }
+
+ /* Force a reschedule if xTaskResumeAll has not already done so, we may
+ have put ourselves to sleep. */
+ if (!xAlreadyYielded) {
+ portYIELD_WITHIN_API();
+ }
+}
+
+#endif
+/*-----------------------------------------------------------*/
+
+#if ( INCLUDE_uxTaskPriorityGet == 1 )
+
+unsigned portBASE_TYPE uxTaskPriorityGet(xTaskHandle pxTask)
+{
+ tskTCB *pxTCB;
+ unsigned portBASE_TYPE uxReturn;
+
+ portENTER_CRITICAL();
+ {
+ /* If null is passed in here then we are changing the
+ priority of the calling function. */
+ pxTCB = prvGetTCBFromHandle(pxTask);
+ uxReturn = pxTCB->uxPriority;
+ }
+ portEXIT_CRITICAL();
+
+ return uxReturn;
+}
+
+#endif
+/*-----------------------------------------------------------*/
+
+#if ( INCLUDE_vTaskPrioritySet == 1 )
+
+void vTaskPrioritySet(xTaskHandle pxTask, unsigned portBASE_TYPE uxNewPriority)
+{
+ tskTCB *pxTCB;
+ unsigned portBASE_TYPE uxCurrentPriority, xYieldRequired = pdFALSE;
+
+ /* Ensure the new priority is valid. */
+ if (uxNewPriority >= configMAX_PRIORITIES) {
+ uxNewPriority = configMAX_PRIORITIES - 1;
+ }
+
+ portENTER_CRITICAL();
+ {
+ if (pxTask == pxCurrentTCB) {
+ pxTask = NULL;
+ }
+
+ /* If null is passed in here then we are changing the
+ priority of the calling function. */
+ pxTCB = prvGetTCBFromHandle(pxTask);
+
+ traceTASK_PRIORITY_SET(pxTask, uxNewPriority);
+
+#if ( configUSE_MUTEXES == 1 )
+ {
+ uxCurrentPriority = pxTCB->uxBasePriority;
+ }
+#else
+ {
+ uxCurrentPriority = pxTCB->uxPriority;
+ }
+#endif
+
+ if (uxCurrentPriority != uxNewPriority) {
+ /* The priority change may have readied a task of higher
+ priority than the calling task. */
+ if (uxNewPriority > uxCurrentPriority) {
+ if (pxTask != NULL) {
+ /* The priority of another task is being raised. If we
+ were raising the priority of the currently running task
+ there would be no need to switch as it must have already
+ been the highest priority task. */
+ xYieldRequired = pdTRUE;
+ }
+ } else if (pxTask == NULL) {
+ /* Setting our own priority down means there may now be another
+ task of higher priority that is ready to execute. */
+ xYieldRequired = pdTRUE;
+ }
+
+
+
+#if ( configUSE_MUTEXES == 1 )
+ {
+ /* Only change the priority being used if the task is not
+ currently using an inherited priority. */
+ if (pxTCB->uxBasePriority == pxTCB->uxPriority) {
+ pxTCB->uxPriority = uxNewPriority;
+ }
+
+ /* The base priority gets set whatever. */
+ pxTCB->uxBasePriority = uxNewPriority;
+ }
+#else
+ {
+ pxTCB->uxPriority = uxNewPriority;
+ }
+#endif
+
+ listSET_LIST_ITEM_VALUE(&(pxTCB->xEventListItem), (configMAX_PRIORITIES - (portTickType) uxNewPriority));
+
+ /* If the task is in the blocked or suspended list we need do
+ nothing more than change it's priority variable. However, if
+ the task is in a ready list it needs to be removed and placed
+ in the queue appropriate to its new priority. */
+ if (listIS_CONTAINED_WITHIN(&(pxReadyTasksLists[ uxCurrentPriority ]), &(pxTCB->xGenericListItem))) {
+ /* The task is currently in its ready list - remove before adding
+ it to it's new ready list. As we are in a critical section we
+ can do this even if the scheduler is suspended. */
+ vListRemove(&(pxTCB->xGenericListItem));
+ prvAddTaskToReadyQueue(pxTCB);
+ }
+
+ if (xYieldRequired == pdTRUE) {
+ portYIELD_WITHIN_API();
+ }
+ }
+ }
+ portEXIT_CRITICAL();
+}
+
+#endif
+/*-----------------------------------------------------------*/
+
+#if ( INCLUDE_vTaskSuspend == 1 )
+
+void vTaskSuspend(xTaskHandle pxTaskToSuspend)
+{
+ tskTCB *pxTCB;
+
+ portENTER_CRITICAL();
+ {
+ /* Ensure a yield is performed if the current task is being
+ suspended. */
+ if (pxTaskToSuspend == pxCurrentTCB) {
+ pxTaskToSuspend = NULL;
+ }
+
+ /* If null is passed in here then we are suspending ourselves. */
+ pxTCB = prvGetTCBFromHandle(pxTaskToSuspend);
+
+ traceTASK_SUSPEND(pxTCB);
+
+ /* Remove task from the ready/delayed list and place in the suspended list. */
+ vListRemove(&(pxTCB->xGenericListItem));
+
+ /* Is the task waiting on an event also? */
+ if (pxTCB->xEventListItem.pvContainer) {
+ vListRemove(&(pxTCB->xEventListItem));
+ }
+
+ vListInsertEnd((xList *) &xSuspendedTaskList, &(pxTCB->xGenericListItem));
+ }
+ portEXIT_CRITICAL();
+
+ /* We may have just suspended the current task. */
+ if ((void *) pxTaskToSuspend == NULL) {
+ portYIELD_WITHIN_API();
+ }
+}
+
+#endif
+/*-----------------------------------------------------------*/
+
+#if ( INCLUDE_vTaskSuspend == 1 )
+
+signed portBASE_TYPE xTaskIsTaskSuspended(xTaskHandle xTask)
+{
+ portBASE_TYPE xReturn = pdFALSE;
+ const tskTCB * const pxTCB = (tskTCB *) xTask;
+
+ /* Is the task we are attempting to resume actually in the
+ suspended list? */
+ if (listIS_CONTAINED_WITHIN(&xSuspendedTaskList, &(pxTCB->xGenericListItem)) != pdFALSE) {
+ /* Has the task already been resumed from within an ISR? */
+ if (listIS_CONTAINED_WITHIN(&xPendingReadyList, &(pxTCB->xEventListItem)) != pdTRUE) {
+ /* Is it in the suspended list because it is in the
+ Suspended state? It is possible to be in the suspended
+ list because it is blocked on a task with no timeout
+ specified. */
+ if (listIS_CONTAINED_WITHIN(NULL, &(pxTCB->xEventListItem)) == pdTRUE) {
+ xReturn = pdTRUE;
+ }
+ }
+ }
+
+ return xReturn;
+}
+
+#endif
+/*-----------------------------------------------------------*/
+
+#if ( INCLUDE_vTaskSuspend == 1 )
+
+void vTaskResume(xTaskHandle pxTaskToResume)
+{
+ tskTCB *pxTCB;
+
+ /* Remove the task from whichever list it is currently in, and place
+ it in the ready list. */
+ pxTCB = (tskTCB *) pxTaskToResume;
+
+ /* The parameter cannot be NULL as it is impossible to resume the
+ currently executing task. */
+ if ((pxTCB != NULL) && (pxTCB != pxCurrentTCB)) {
+ portENTER_CRITICAL();
+ {
+ if (xTaskIsTaskSuspended(pxTCB) == pdTRUE) {
+ traceTASK_RESUME(pxTCB);
+
+ /* As we are in a critical section we can access the ready
+ lists even if the scheduler is suspended. */
+ vListRemove(&(pxTCB->xGenericListItem));
+ prvAddTaskToReadyQueue(pxTCB);
+
+ /* We may have just resumed a higher priority task. */
+ if (pxTCB->uxPriority >= pxCurrentTCB->uxPriority) {
+ /* This yield may not cause the task just resumed to run, but
+ will leave the lists in the correct state for the next yield. */
+ portYIELD_WITHIN_API();
+ }
+ }
+ }
+ portEXIT_CRITICAL();
+ }
+}
+
+#endif
+
+/*-----------------------------------------------------------*/
+
+#if ( ( INCLUDE_xTaskResumeFromISR == 1 ) && ( INCLUDE_vTaskSuspend == 1 ) )
+
+portBASE_TYPE xTaskResumeFromISR(xTaskHandle pxTaskToResume)
+{
+ portBASE_TYPE xYieldRequired = pdFALSE;
+ tskTCB *pxTCB;
+
+ pxTCB = (tskTCB *) pxTaskToResume;
+
+ if (xTaskIsTaskSuspended(pxTCB) == pdTRUE) {
+ traceTASK_RESUME_FROM_ISR(pxTCB);
+
+ if (uxSchedulerSuspended == (unsigned portBASE_TYPE) pdFALSE) {
+ xYieldRequired = (pxTCB->uxPriority >= pxCurrentTCB->uxPriority);
+ vListRemove(&(pxTCB->xGenericListItem));
+ prvAddTaskToReadyQueue(pxTCB);
+ } else {
+ /* We cannot access the delayed or ready lists, so will hold this
+ task pending until the scheduler is resumed, at which point a
+ yield will be performed if necessary. */
+ vListInsertEnd((xList *) &(xPendingReadyList), &(pxTCB->xEventListItem));
+ }
+ }
+
+ return xYieldRequired;
+}
+
+#endif
+
+
+
+
+/*-----------------------------------------------------------
+ * PUBLIC SCHEDULER CONTROL documented in task.h
+ *----------------------------------------------------------*/
+
+
+void vTaskStartScheduler(void)
+{
+ portBASE_TYPE xReturn;
+
+ /* Add the idle task at the lowest priority. */
+ xReturn = xTaskCreate(prvIdleTask, (signed char *) "IDLE", tskIDLE_STACK_SIZE, (void *) NULL, (tskIDLE_PRIORITY | portPRIVILEGE_BIT), (xTaskHandle *) NULL);
+
+ if (xReturn == pdPASS) {
+ /* Interrupts are turned off here, to ensure a tick does not occur
+ before or during the call to xPortStartScheduler(). The stacks of
+ the created tasks contain a status word with interrupts switched on
+ so interrupts will automatically get re-enabled when the first task
+ starts to run.
+
+ STEPPING THROUGH HERE USING A DEBUGGER CAN CAUSE BIG PROBLEMS IF THE
+ DEBUGGER ALLOWS INTERRUPTS TO BE PROCESSED. */
+ portDISABLE_INTERRUPTS();
+
+ xSchedulerRunning = pdTRUE;
+ xTickCount = (portTickType) 0;
+
+ /* If configGENERATE_RUN_TIME_STATS is defined then the following
+ macro must be defined to configure the timer/counter used to generate
+ the run time counter time base. */
+ portCONFIGURE_TIMER_FOR_RUN_TIME_STATS();
+
+ /* Setting up the timer tick is hardware specific and thus in the
+ portable interface. */
+ if (xPortStartScheduler()) {
+ /* Should not reach here as if the scheduler is running the
+ function will not return. */
+ } else {
+ /* Should only reach here if a task calls xTaskEndScheduler(). */
+ }
+ }
+}
+/*-----------------------------------------------------------*/
+
+void vTaskEndScheduler(void)
+{
+ /* Stop the scheduler interrupts and call the portable scheduler end
+ routine so the original ISRs can be restored if necessary. The port
+ layer must ensure interrupts enable bit is left in the correct state. */
+ portDISABLE_INTERRUPTS();
+ xSchedulerRunning = pdFALSE;
+ vPortEndScheduler();
+}
+/*----------------------------------------------------------*/
+
+void vTaskSuspendAll(void)
+{
+ /* A critical section is not required as the variable is of type
+ portBASE_TYPE. */
+ ++uxSchedulerSuspended;
+}
+/*----------------------------------------------------------*/
+
+signed portBASE_TYPE xTaskResumeAll(void)
+{
+ register tskTCB *pxTCB;
+ signed portBASE_TYPE xAlreadyYielded = pdFALSE;
+
+ /* It is possible that an ISR caused a task to be removed from an event
+ list while the scheduler was suspended. If this was the case then the
+ removed task will have been added to the xPendingReadyList. Once the
+ scheduler has been resumed it is safe to move all the pending ready
+ tasks from this list into their appropriate ready list. */
+ portENTER_CRITICAL();
+ {
+ --uxSchedulerSuspended;
+
+ if (uxSchedulerSuspended == (unsigned portBASE_TYPE) pdFALSE) {
+ if (uxCurrentNumberOfTasks > (unsigned portBASE_TYPE) 0) {
+ portBASE_TYPE xYieldRequired = pdFALSE;
+
+ /* Move any readied tasks from the pending list into the
+ appropriate ready list. */
+ while ((pxTCB = (tskTCB *) listGET_OWNER_OF_HEAD_ENTRY(((xList *) & xPendingReadyList))) != NULL) {
+ vListRemove(&(pxTCB->xEventListItem));
+ vListRemove(&(pxTCB->xGenericListItem));
+ prvAddTaskToReadyQueue(pxTCB);
+
+ /* If we have moved a task that has a priority higher than
+ the current task then we should yield. */
+ if (pxTCB->uxPriority >= pxCurrentTCB->uxPriority) {
+ xYieldRequired = pdTRUE;
+ }
+ }
+
+ /* If any ticks occurred while the scheduler was suspended then
+ they should be processed now. This ensures the tick count does not
+ slip, and that any delayed tasks are resumed at the correct time. */
+ if (uxMissedTicks > (unsigned portBASE_TYPE) 0) {
+ while (uxMissedTicks > (unsigned portBASE_TYPE) 0) {
+ vTaskIncrementTick();
+ --uxMissedTicks;
+ }
+
+ /* As we have processed some ticks it is appropriate to yield
+ to ensure the highest priority task that is ready to run is
+ the task actually running. */
+#if configUSE_PREEMPTION == 1
+ {
+ xYieldRequired = pdTRUE;
+ }
+#endif
+ }
+
+ if ((xYieldRequired == pdTRUE) || (xMissedYield == pdTRUE)) {
+ xAlreadyYielded = pdTRUE;
+ xMissedYield = pdFALSE;
+ portYIELD_WITHIN_API();
+ }
+ }
+ }
+ }
+ portEXIT_CRITICAL();
+
+ return xAlreadyYielded;
+}
+
+
+
+
+
+
+/*-----------------------------------------------------------
+ * PUBLIC TASK UTILITIES documented in task.h
+ *----------------------------------------------------------*/
+
+
+
+portTickType xTaskGetTickCount(void)
+{
+ portTickType xTicks;
+
+ /* Critical section required if running on a 16 bit processor. */
+ portENTER_CRITICAL();
+ {
+ xTicks = xTickCount;
+ }
+ portEXIT_CRITICAL();
+
+ return xTicks;
+}
+/*-----------------------------------------------------------*/
+
+unsigned portBASE_TYPE uxTaskGetNumberOfTasks(void)
+{
+ /* A critical section is not required because the variables are of type
+ portBASE_TYPE. */
+ return uxCurrentNumberOfTasks;
+}
+/*-----------------------------------------------------------*/
+
+#if ( configUSE_TRACE_FACILITY == 1 )
+
+void vTaskList(signed char *pcWriteBuffer)
+{
+ unsigned portBASE_TYPE uxQueue;
+
+ /* This is a VERY costly function that should be used for debug only.
+ It leaves interrupts disabled for a LONG time. */
+
+ vTaskSuspendAll();
+ {
+ /* Run through all the lists that could potentially contain a TCB and
+ report the task name, state and stack high water mark. */
+
+ pcWriteBuffer[ 0 ] = (signed char) 0x00;
+ strcat((char *) pcWriteBuffer, (const char *) "\r\n");
+
+ uxQueue = uxTopUsedPriority + 1;
+
+ do {
+ uxQueue--;
+
+ if (!listLIST_IS_EMPTY(&(pxReadyTasksLists[ uxQueue ]))) {
+ prvListTaskWithinSingleList(pcWriteBuffer, (xList *) &(pxReadyTasksLists[ uxQueue ]), tskREADY_CHAR);
+ }
+ } while (uxQueue > (unsigned short) tskIDLE_PRIORITY);
+
+ if (!listLIST_IS_EMPTY(pxDelayedTaskList)) {
+ prvListTaskWithinSingleList(pcWriteBuffer, (xList *) pxDelayedTaskList, tskBLOCKED_CHAR);
+ }
+
+ if (!listLIST_IS_EMPTY(pxOverflowDelayedTaskList)) {
+ prvListTaskWithinSingleList(pcWriteBuffer, (xList *) pxOverflowDelayedTaskList, tskBLOCKED_CHAR);
+ }
+
+#if( INCLUDE_vTaskDelete == 1 )
+ {
+ if (!listLIST_IS_EMPTY(&xTasksWaitingTermination)) {
+ prvListTaskWithinSingleList(pcWriteBuffer, (xList *) &xTasksWaitingTermination, tskDELETED_CHAR);
+ }
+ }
+#endif
+
+#if ( INCLUDE_vTaskSuspend == 1 )
+ {
+ if (!listLIST_IS_EMPTY(&xSuspendedTaskList)) {
+ prvListTaskWithinSingleList(pcWriteBuffer, (xList *) &xSuspendedTaskList, tskSUSPENDED_CHAR);
+ }
+ }
+#endif
+ }
+ xTaskResumeAll();
+}
+
+#endif
+/*----------------------------------------------------------*/
+
+#if ( configGENERATE_RUN_TIME_STATS == 1 )
+
+void vTaskGetRunTimeStats(signed char *pcWriteBuffer)
+{
+ unsigned portBASE_TYPE uxQueue;
+ unsigned long ulTotalRunTime = portGET_RUN_TIME_COUNTER_VALUE();
+
+ /* This is a VERY costly function that should be used for debug only.
+ It leaves interrupts disabled for a LONG time. */
+
+ vTaskSuspendAll();
+ {
+ /* Run through all the lists that could potentially contain a TCB,
+ generating a table of run timer percentages in the provided
+ buffer. */
+
+ pcWriteBuffer[ 0 ] = (signed char) 0x00;
+ strcat((char *) pcWriteBuffer, (const char *) "\r\n");
+
+ uxQueue = uxTopUsedPriority + 1;
+
+ do {
+ uxQueue--;
+
+ if (!listLIST_IS_EMPTY(&(pxReadyTasksLists[ uxQueue ]))) {
+ prvGenerateRunTimeStatsForTasksInList(pcWriteBuffer, (xList *) &(pxReadyTasksLists[ uxQueue ]), ulTotalRunTime);
+ }
+ } while (uxQueue > (unsigned short) tskIDLE_PRIORITY);
+
+ if (!listLIST_IS_EMPTY(pxDelayedTaskList)) {
+ prvGenerateRunTimeStatsForTasksInList(pcWriteBuffer, (xList *) pxDelayedTaskList, ulTotalRunTime);
+ }
+
+ if (!listLIST_IS_EMPTY(pxOverflowDelayedTaskList)) {
+ prvGenerateRunTimeStatsForTasksInList(pcWriteBuffer, (xList *) pxOverflowDelayedTaskList, ulTotalRunTime);
+ }
+
+#if ( INCLUDE_vTaskDelete == 1 )
+ {
+ if (!listLIST_IS_EMPTY(&xTasksWaitingTermination)) {
+ prvGenerateRunTimeStatsForTasksInList(pcWriteBuffer, (xList *) &xTasksWaitingTermination, ulTotalRunTime);
+ }
+ }
+#endif
+
+#if ( INCLUDE_vTaskSuspend == 1 )
+ {
+ if (!listLIST_IS_EMPTY(&xSuspendedTaskList)) {
+ prvGenerateRunTimeStatsForTasksInList(pcWriteBuffer, (xList *) &xSuspendedTaskList, ulTotalRunTime);
+ }
+ }
+#endif
+ }
+ xTaskResumeAll();
+}
+
+#endif
+/*----------------------------------------------------------*/
+
+#if ( configUSE_TRACE_FACILITY == 1 )
+
+void vTaskStartTrace(signed char * pcBuffer, unsigned long ulBufferSize)
+{
+ portENTER_CRITICAL();
+ {
+ pcTraceBuffer = (signed char *)pcBuffer;
+ pcTraceBufferStart = pcBuffer;
+ pcTraceBufferEnd = pcBuffer + (ulBufferSize - tskSIZE_OF_EACH_TRACE_LINE);
+ xTracing = pdTRUE;
+ }
+ portEXIT_CRITICAL();
+}
+
+#endif
+/*----------------------------------------------------------*/
+
+#if ( configUSE_TRACE_FACILITY == 1 )
+
+unsigned long ulTaskEndTrace(void)
+{
+ unsigned long ulBufferLength;
+
+ portENTER_CRITICAL();
+ xTracing = pdFALSE;
+ portEXIT_CRITICAL();
+
+ ulBufferLength = (unsigned long)(pcTraceBuffer - pcTraceBufferStart);
+
+ return ulBufferLength;
+}
+
+#endif
+
+
+
+/*-----------------------------------------------------------
+ * SCHEDULER INTERNALS AVAILABLE FOR PORTING PURPOSES
+ * documented in task.h
+ *----------------------------------------------------------*/
+
+
+void vTaskIncrementTick(void)
+{
+ /* Called by the portable layer each time a tick interrupt occurs.
+ Increments the tick then checks to see if the new tick value will cause any
+ tasks to be unblocked. */
+ if (uxSchedulerSuspended == (unsigned portBASE_TYPE) pdFALSE) {
+ ++xTickCount;
+ if (xTickCount == (portTickType) 0) {
+ xList *pxTemp;
+
+ /* Tick count has overflowed so we need to swap the delay lists.
+ If there are any items in pxDelayedTaskList here then there is
+ an error! */
+ pxTemp = pxDelayedTaskList;
+ pxDelayedTaskList = pxOverflowDelayedTaskList;
+ pxOverflowDelayedTaskList = pxTemp;
+ xNumOfOverflows++;
+ }
+
+ /* See if this tick has made a timeout expire. */
+ prvCheckDelayedTasks();
+ } else {
+ ++uxMissedTicks;
+
+ /* The tick hook gets called at regular intervals, even if the
+ scheduler is locked. */
+#if ( configUSE_TICK_HOOK == 1 )
+ {
+ extern void vApplicationTickHook(void);
+
+ vApplicationTickHook();
+ }
+#endif
+ }
+
+#if ( configUSE_TICK_HOOK == 1 )
+ {
+ extern void vApplicationTickHook(void);
+
+ /* Guard against the tick hook being called when the missed tick
+ count is being unwound (when the scheduler is being unlocked. */
+ if (uxMissedTicks == 0) {
+ vApplicationTickHook();
+ }
+ }
+#endif
+
+ traceTASK_INCREMENT_TICK(xTickCount);
+}
+/*-----------------------------------------------------------*/
+
+#if ( ( INCLUDE_vTaskCleanUpResources == 1 ) && ( INCLUDE_vTaskSuspend == 1 ) )
+
+void vTaskCleanUpResources(void)
+{
+ unsigned short usQueue;
+ volatile tskTCB *pxTCB;
+
+ usQueue = (unsigned short) uxTopUsedPriority + (unsigned short) 1;
+
+ /* Remove any TCB's from the ready queues. */
+ do {
+ usQueue--;
+
+ while (!listLIST_IS_EMPTY(&(pxReadyTasksLists[ usQueue ]))) {
+ listGET_OWNER_OF_NEXT_ENTRY(pxTCB, &(pxReadyTasksLists[ usQueue ]));
+ vListRemove((xListItem *) &(pxTCB->xGenericListItem));
+
+ prvDeleteTCB((tskTCB *) pxTCB);
+ }
+ } while (usQueue > (unsigned short) tskIDLE_PRIORITY);
+
+ /* Remove any TCB's from the delayed queue. */
+ while (!listLIST_IS_EMPTY(&xDelayedTaskList1)) {
+ listGET_OWNER_OF_NEXT_ENTRY(pxTCB, &xDelayedTaskList1);
+ vListRemove((xListItem *) &(pxTCB->xGenericListItem));
+
+ prvDeleteTCB((tskTCB *) pxTCB);
+ }
+
+ /* Remove any TCB's from the overflow delayed queue. */
+ while (!listLIST_IS_EMPTY(&xDelayedTaskList2)) {
+ listGET_OWNER_OF_NEXT_ENTRY(pxTCB, &xDelayedTaskList2);
+ vListRemove((xListItem *) &(pxTCB->xGenericListItem));
+
+ prvDeleteTCB((tskTCB *) pxTCB);
+ }
+
+ while (!listLIST_IS_EMPTY(&xSuspendedTaskList)) {
+ listGET_OWNER_OF_NEXT_ENTRY(pxTCB, &xSuspendedTaskList);
+ vListRemove((xListItem *) &(pxTCB->xGenericListItem));
+
+ prvDeleteTCB((tskTCB *) pxTCB);
+ }
+}
+
+#endif
+/*-----------------------------------------------------------*/
+
+#if ( configUSE_APPLICATION_TASK_TAG == 1 )
+
+void vTaskSetApplicationTaskTag(xTaskHandle xTask, pdTASK_HOOK_CODE pxTagValue)
+{
+ tskTCB *xTCB;
+
+ /* If xTask is NULL then we are setting our own task hook. */
+ if (xTask == NULL) {
+ xTCB = (tskTCB *) pxCurrentTCB;
+ } else {
+ xTCB = (tskTCB *) xTask;
+ }
+
+ /* Save the hook function in the TCB. A critical section is required as
+ the value can be accessed from an interrupt. */
+ portENTER_CRITICAL();
+ xTCB->pxTaskTag = pxTagValue;
+ portEXIT_CRITICAL();
+}
+
+#endif
+/*-----------------------------------------------------------*/
+
+#if ( configUSE_APPLICATION_TASK_TAG == 1 )
+
+pdTASK_HOOK_CODE xTaskGetApplicationTaskTag(xTaskHandle xTask)
+{
+ tskTCB *xTCB;
+ pdTASK_HOOK_CODE xReturn;
+
+ /* If xTask is NULL then we are setting our own task hook. */
+ if (xTask == NULL) {
+ xTCB = (tskTCB *) pxCurrentTCB;
+ } else {
+ xTCB = (tskTCB *) xTask;
+ }
+
+ /* Save the hook function in the TCB. A critical section is required as
+ the value can be accessed from an interrupt. */
+ portENTER_CRITICAL();
+ xReturn = xTCB->pxTaskTag;
+ portEXIT_CRITICAL();
+
+ return xReturn;
+}
+
+#endif
+/*-----------------------------------------------------------*/
+
+#if ( configUSE_APPLICATION_TASK_TAG == 1 )
+
+portBASE_TYPE xTaskCallApplicationTaskHook(xTaskHandle xTask, void *pvParameter)
+{
+ tskTCB *xTCB;
+ portBASE_TYPE xReturn;
+
+ /* If xTask is NULL then we are calling our own task hook. */
+ if (xTask == NULL) {
+ xTCB = (tskTCB *) pxCurrentTCB;
+ } else {
+ xTCB = (tskTCB *) xTask;
+ }
+
+ if (xTCB->pxTaskTag != NULL) {
+ xReturn = xTCB->pxTaskTag(pvParameter);
+ } else {
+ xReturn = pdFAIL;
+ }
+
+ return xReturn;
+}
+
+#endif
+/*-----------------------------------------------------------*/
+
+void vTaskSwitchContext(void)
+{
+ if (uxSchedulerSuspended != (unsigned portBASE_TYPE) pdFALSE) {
+ /* The scheduler is currently suspended - do not allow a context
+ switch. */
+ xMissedYield = pdTRUE;
+ return;
+ }
+
+ traceTASK_SWITCHED_OUT();
+
+#if ( configGENERATE_RUN_TIME_STATS == 1 )
+ {
+ unsigned long ulTempCounter = portGET_RUN_TIME_COUNTER_VALUE();
+
+ /* Add the amount of time the task has been running to the accumulated
+ time so far. The time the task started running was stored in
+ ulTaskSwitchedInTime. Note that there is no overflow protection here
+ so count values are only valid until the timer overflows. Generally
+ this will be about 1 hour assuming a 1uS timer increment. */
+ pxCurrentTCB->ulRunTimeCounter += (ulTempCounter - ulTaskSwitchedInTime);
+ ulTaskSwitchedInTime = ulTempCounter;
+ }
+#endif
+
+ taskFIRST_CHECK_FOR_STACK_OVERFLOW();
+ taskSECOND_CHECK_FOR_STACK_OVERFLOW();
+
+ /* Find the highest priority queue that contains ready tasks. */
+ while (listLIST_IS_EMPTY(&(pxReadyTasksLists[ uxTopReadyPriority ]))) {
+ --uxTopReadyPriority;
+ }
+
+ /* listGET_OWNER_OF_NEXT_ENTRY walks through the list, so the tasks of the
+ same priority get an equal share of the processor time. */
+ listGET_OWNER_OF_NEXT_ENTRY(pxCurrentTCB, &(pxReadyTasksLists[ uxTopReadyPriority ]));
+
+ traceTASK_SWITCHED_IN();
+ vWriteTraceToBuffer();
+}
+/*-----------------------------------------------------------*/
+
+void vTaskPlaceOnEventList(const xList * const pxEventList, portTickType xTicksToWait)
+{
+ portTickType xTimeToWake;
+
+ /* THIS FUNCTION MUST BE CALLED WITH INTERRUPTS DISABLED OR THE
+ SCHEDULER SUSPENDED. */
+
+ /* Place the event list item of the TCB in the appropriate event list.
+ This is placed in the list in priority order so the highest priority task
+ is the first to be woken by the event. */
+ vListInsert((xList *) pxEventList, (xListItem *) &(pxCurrentTCB->xEventListItem));
+
+ /* We must remove ourselves from the ready list before adding ourselves
+ to the blocked list as the same list item is used for both lists. We have
+ exclusive access to the ready lists as the scheduler is locked. */
+ vListRemove((xListItem *) &(pxCurrentTCB->xGenericListItem));
+
+
+#if ( INCLUDE_vTaskSuspend == 1 )
+ {
+ if (xTicksToWait == portMAX_DELAY) {
+ /* Add ourselves to the suspended task list instead of a delayed task
+ list to ensure we are not woken by a timing event. We will block
+ indefinitely. */
+ vListInsertEnd((xList *) &xSuspendedTaskList, (xListItem *) &(pxCurrentTCB->xGenericListItem));
+ } else {
+ /* Calculate the time at which the task should be woken if the event does
+ not occur. This may overflow but this doesn't matter. */
+ xTimeToWake = xTickCount + xTicksToWait;
+
+ listSET_LIST_ITEM_VALUE(&(pxCurrentTCB->xGenericListItem), xTimeToWake);
+
+ if (xTimeToWake < xTickCount) {
+ /* Wake time has overflowed. Place this item in the overflow list. */
+ vListInsert((xList *) pxOverflowDelayedTaskList, (xListItem *) &(pxCurrentTCB->xGenericListItem));
+ } else {
+ /* The wake time has not overflowed, so we can use the current block list. */
+ vListInsert((xList *) pxDelayedTaskList, (xListItem *) &(pxCurrentTCB->xGenericListItem));
+ }
+ }
+ }
+#else
+ {
+ /* Calculate the time at which the task should be woken if the event does
+ not occur. This may overflow but this doesn't matter. */
+ xTimeToWake = xTickCount + xTicksToWait;
+
+ listSET_LIST_ITEM_VALUE(&(pxCurrentTCB->xGenericListItem), xTimeToWake);
+
+ if (xTimeToWake < xTickCount) {
+ /* Wake time has overflowed. Place this item in the overflow list. */
+ vListInsert((xList *) pxOverflowDelayedTaskList, (xListItem *) &(pxCurrentTCB->xGenericListItem));
+ } else {
+ /* The wake time has not overflowed, so we can use the current block list. */
+ vListInsert((xList *) pxDelayedTaskList, (xListItem *) &(pxCurrentTCB->xGenericListItem));
+ }
+ }
+#endif
+}
+/*-----------------------------------------------------------*/
+
+signed portBASE_TYPE xTaskRemoveFromEventList(const xList * const pxEventList)
+{
+ tskTCB *pxUnblockedTCB;
+ portBASE_TYPE xReturn;
+
+ /* THIS FUNCTION MUST BE CALLED WITH INTERRUPTS DISABLED OR THE
+ SCHEDULER SUSPENDED. It can also be called from within an ISR. */
+
+ /* The event list is sorted in priority order, so we can remove the
+ first in the list, remove the TCB from the delayed list, and add
+ it to the ready list.
+
+ If an event is for a queue that is locked then this function will never
+ get called - the lock count on the queue will get modified instead. This
+ means we can always expect exclusive access to the event list here. */
+ pxUnblockedTCB = (tskTCB *) listGET_OWNER_OF_HEAD_ENTRY(pxEventList);
+ vListRemove(&(pxUnblockedTCB->xEventListItem));
+
+ if (uxSchedulerSuspended == (unsigned portBASE_TYPE) pdFALSE) {
+ vListRemove(&(pxUnblockedTCB->xGenericListItem));
+ prvAddTaskToReadyQueue(pxUnblockedTCB);
+ } else {
+ /* We cannot access the delayed or ready lists, so will hold this
+ task pending until the scheduler is resumed. */
+ vListInsertEnd((xList *) &(xPendingReadyList), &(pxUnblockedTCB->xEventListItem));
+ }
+
+ if (pxUnblockedTCB->uxPriority >= pxCurrentTCB->uxPriority) {
+ /* Return true if the task removed from the event list has
+ a higher priority than the calling task. This allows
+ the calling task to know if it should force a context
+ switch now. */
+ xReturn = pdTRUE;
+ } else {
+ xReturn = pdFALSE;
+ }
+
+ return xReturn;
+}
+/*-----------------------------------------------------------*/
+
+void vTaskSetTimeOutState(xTimeOutType * const pxTimeOut)
+{
+ pxTimeOut->xOverflowCount = xNumOfOverflows;
+ pxTimeOut->xTimeOnEntering = xTickCount;
+}
+/*-----------------------------------------------------------*/
+
+portBASE_TYPE xTaskCheckForTimeOut(xTimeOutType * const pxTimeOut, portTickType * const pxTicksToWait)
+{
+ portBASE_TYPE xReturn;
+
+ portENTER_CRITICAL();
+ {
+#if ( INCLUDE_vTaskSuspend == 1 )
+ /* If INCLUDE_vTaskSuspend is set to 1 and the block time specified is
+ the maximum block time then the task should block indefinitely, and
+ therefore never time out. */
+ if (*pxTicksToWait == portMAX_DELAY) {
+ xReturn = pdFALSE;
+ } else /* We are not blocking indefinitely, perform the checks below. */
+#endif
+
+ if ((xNumOfOverflows != pxTimeOut->xOverflowCount) && ((portTickType) xTickCount >= (portTickType) pxTimeOut->xTimeOnEntering)) {
+ /* The tick count is greater than the time at which vTaskSetTimeout()
+ was called, but has also overflowed since vTaskSetTimeOut() was called.
+ It must have wrapped all the way around and gone past us again. This
+ passed since vTaskSetTimeout() was called. */
+ xReturn = pdTRUE;
+ } else if (((portTickType)((portTickType) xTickCount - (portTickType) pxTimeOut->xTimeOnEntering)) < (portTickType) *pxTicksToWait) {
+ /* Not a genuine timeout. Adjust parameters for time remaining. */
+ *pxTicksToWait -= ((portTickType) xTickCount - (portTickType) pxTimeOut->xTimeOnEntering);
+ vTaskSetTimeOutState(pxTimeOut);
+ xReturn = pdFALSE;
+ } else {
+ xReturn = pdTRUE;
+ }
+ }
+ portEXIT_CRITICAL();
+
+ return xReturn;
+}
+/*-----------------------------------------------------------*/
+
+void vTaskMissedYield(void)
+{
+ xMissedYield = pdTRUE;
+}
+
+/*
+ * -----------------------------------------------------------
+ * The Idle task.
+ * ----------------------------------------------------------
+ *
+ * The portTASK_FUNCTION() macro is used to allow port/compiler specific
+ * language extensions. The equivalent prototype for this function is:
+ *
+ * void prvIdleTask( void *pvParameters );
+ *
+ */
+static portTASK_FUNCTION(prvIdleTask, pvParameters)
+{
+ /* Stop warnings. */
+ (void) pvParameters;
+
+ for (;;) {
+ /* See if any tasks have been deleted. */
+ prvCheckTasksWaitingTermination();
+
+#if ( configUSE_PREEMPTION == 0 )
+ {
+ /* If we are not using preemption we keep forcing a task switch to
+ see if any other task has become available. If we are using
+ preemption we don't need to do this as any task becoming available
+ will automatically get the processor anyway. */
+ taskYIELD();
+ }
+#endif
+
+#if ( ( configUSE_PREEMPTION == 1 ) && ( configIDLE_SHOULD_YIELD == 1 ) )
+ {
+ /* When using preemption tasks of equal priority will be
+ timesliced. If a task that is sharing the idle priority is ready
+ to run then the idle task should yield before the end of the
+ timeslice.
+
+ A critical region is not required here as we are just reading from
+ the list, and an occasional incorrect value will not matter. If
+ the ready list at the idle priority contains more than one task
+ then a task other than the idle task is ready to execute. */
+ if (listCURRENT_LIST_LENGTH(&(pxReadyTasksLists[ tskIDLE_PRIORITY ])) > (unsigned portBASE_TYPE) 1) {
+ taskYIELD();
+ }
+ }
+#endif
+
+#if ( configUSE_IDLE_HOOK == 1 )
+ {
+ extern void vApplicationIdleHook(void);
+
+ /* Call the user defined function from within the idle task. This
+ allows the application designer to add background functionality
+ without the overhead of a separate task.
+ NOTE: vApplicationIdleHook() MUST NOT, UNDER ANY CIRCUMSTANCES,
+ CALL A FUNCTION THAT MIGHT BLOCK. */
+ vApplicationIdleHook();
+ }
+#endif
+ }
+} /*lint !e715 pvParameters is not accessed but all task functions require the same prototype. */
+
+
+
+
+
+
+
+/*-----------------------------------------------------------
+ * File private functions documented at the top of the file.
+ *----------------------------------------------------------*/
+
+
+
+static void prvInitialiseTCBVariables(tskTCB *pxTCB, const signed char * const pcName, unsigned portBASE_TYPE uxPriority, const xMemoryRegion * const xRegions, unsigned short usStackDepth)
+{
+ /* Store the function name in the TCB. */
+#if configMAX_TASK_NAME_LEN > 1
+ {
+ /* Don't bring strncpy into the build unnecessarily. */
+ strncpy((char *) pxTCB->pcTaskName, (const char *) pcName, (unsigned short) configMAX_TASK_NAME_LEN);
+ }
+#endif
+ pxTCB->pcTaskName[(unsigned short) configMAX_TASK_NAME_LEN - (unsigned short) 1 ] = '\0';
+
+ /* This is used as an array index so must ensure it's not too large. First
+ remove the privilege bit if one is present. */
+ if (uxPriority >= configMAX_PRIORITIES) {
+ uxPriority = configMAX_PRIORITIES - 1;
+ }
+
+ pxTCB->uxPriority = uxPriority;
+#if ( configUSE_MUTEXES == 1 )
+ {
+ pxTCB->uxBasePriority = uxPriority;
+ }
+#endif
+
+ vListInitialiseItem(&(pxTCB->xGenericListItem));
+ vListInitialiseItem(&(pxTCB->xEventListItem));
+
+ /* Set the pxTCB as a link back from the xListItem. This is so we can get
+ back to the containing TCB from a generic item in a list. */
+ listSET_LIST_ITEM_OWNER(&(pxTCB->xGenericListItem), pxTCB);
+
+ /* Event lists are always in priority order. */
+ listSET_LIST_ITEM_VALUE(&(pxTCB->xEventListItem), configMAX_PRIORITIES - (portTickType) uxPriority);
+ listSET_LIST_ITEM_OWNER(&(pxTCB->xEventListItem), pxTCB);
+
+#if ( portCRITICAL_NESTING_IN_TCB == 1 )
+ {
+ pxTCB->uxCriticalNesting = (unsigned portBASE_TYPE) 0;
+ }
+#endif
+
+#if ( configUSE_APPLICATION_TASK_TAG == 1 )
+ {
+ pxTCB->pxTaskTag = NULL;
+ }
+#endif
+
+#if ( configGENERATE_RUN_TIME_STATS == 1 )
+ {
+ pxTCB->ulRunTimeCounter = 0UL;
+ }
+#endif
+
+#if ( portUSING_MPU_WRAPPERS == 1 )
+ {
+ vPortStoreTaskMPUSettings(&(pxTCB->xMPUSettings), xRegions, pxTCB->pxStack, usStackDepth);
+ }
+#else
+ {
+ (void) xRegions;
+ (void) usStackDepth;
+ }
+#endif
+}
+/*-----------------------------------------------------------*/
+
+#if ( portUSING_MPU_WRAPPERS == 1 )
+
+void vTaskAllocateMPURegions(xTaskHandle xTaskToModify, const xMemoryRegion * const xRegions)
+{
+ tskTCB *pxTCB;
+
+ if (xTaskToModify == pxCurrentTCB) {
+ xTaskToModify = NULL;
+ }
+
+ /* If null is passed in here then we are deleting ourselves. */
+ pxTCB = prvGetTCBFromHandle(xTaskToModify);
+
+ vPortStoreTaskMPUSettings(&(pxTCB->xMPUSettings), xRegions, NULL, 0);
+}
+/*-----------------------------------------------------------*/
+#endif
+
+static void prvInitialiseTaskLists(void)
+{
+ unsigned portBASE_TYPE uxPriority;
+
+ for (uxPriority = 0; uxPriority < configMAX_PRIORITIES; uxPriority++) {
+ vListInitialise((xList *) &(pxReadyTasksLists[ uxPriority ]));
+ }
+
+ vListInitialise((xList *) &xDelayedTaskList1);
+ vListInitialise((xList *) &xDelayedTaskList2);
+ vListInitialise((xList *) &xPendingReadyList);
+
+#if ( INCLUDE_vTaskDelete == 1 )
+ {
+ vListInitialise((xList *) &xTasksWaitingTermination);
+ }
+#endif
+
+#if ( INCLUDE_vTaskSuspend == 1 )
+ {
+ vListInitialise((xList *) &xSuspendedTaskList);
+ }
+#endif
+
+ /* Start with pxDelayedTaskList using list1 and the pxOverflowDelayedTaskList
+ using list2. */
+ pxDelayedTaskList = &xDelayedTaskList1;
+ pxOverflowDelayedTaskList = &xDelayedTaskList2;
+}
+/*-----------------------------------------------------------*/
+
+static void prvCheckTasksWaitingTermination(void)
+{
+#if ( INCLUDE_vTaskDelete == 1 )
+ {
+ portBASE_TYPE xListIsEmpty;
+
+ /* ucTasksDeleted is used to prevent vTaskSuspendAll() being called
+ too often in the idle task. */
+ if (uxTasksDeleted > (unsigned portBASE_TYPE) 0) {
+ vTaskSuspendAll();
+ xListIsEmpty = listLIST_IS_EMPTY(&xTasksWaitingTermination);
+ xTaskResumeAll();
+
+ if (!xListIsEmpty) {
+ tskTCB *pxTCB;
+
+ portENTER_CRITICAL();
+ {
+ pxTCB = (tskTCB *) listGET_OWNER_OF_HEAD_ENTRY(((xList *) & xTasksWaitingTermination));
+ vListRemove(&(pxTCB->xGenericListItem));
+ --uxCurrentNumberOfTasks;
+ --uxTasksDeleted;
+ }
+ portEXIT_CRITICAL();
+
+ prvDeleteTCB(pxTCB);
+ }
+ }
+ }
+#endif
+}
+/*-----------------------------------------------------------*/
+
+static tskTCB *prvAllocateTCBAndStack(unsigned short usStackDepth, portSTACK_TYPE *puxStackBuffer)
+{
+ tskTCB *pxNewTCB;
+
+ /* Allocate space for the TCB. Where the memory comes from depends on
+ the implementation of the port malloc function. */
+ pxNewTCB = (tskTCB *) pvPortMalloc(sizeof(tskTCB));
+
+ if (pxNewTCB != NULL) {
+ /* Allocate space for the stack used by the task being created.
+ The base of the stack memory stored in the TCB so the task can
+ be deleted later if required. */
+ pxNewTCB->pxStack = (portSTACK_TYPE *) pvPortMallocAligned((((size_t)usStackDepth) * sizeof(portSTACK_TYPE)), puxStackBuffer);
+
+ if (pxNewTCB->pxStack == NULL) {
+ /* Could not allocate the stack. Delete the allocated TCB. */
+ vPortFree(pxNewTCB);
+ pxNewTCB = NULL;
+ } else {
+ /* Just to help debugging. */
+ memset(pxNewTCB->pxStack, tskSTACK_FILL_BYTE, usStackDepth * sizeof(portSTACK_TYPE));
+ }
+ }
+
+ return pxNewTCB;
+}
+/*-----------------------------------------------------------*/
+
+#if ( configUSE_TRACE_FACILITY == 1 )
+
+static void prvListTaskWithinSingleList(const signed char *pcWriteBuffer, xList *pxList, signed char cStatus)
+{
+ volatile tskTCB *pxNextTCB, *pxFirstTCB;
+ unsigned short usStackRemaining;
+
+ /* Write the details of all the TCB's in pxList into the buffer. */
+ listGET_OWNER_OF_NEXT_ENTRY(pxFirstTCB, pxList);
+ do {
+ listGET_OWNER_OF_NEXT_ENTRY(pxNextTCB, pxList);
+#if ( portSTACK_GROWTH > 0 )
+ {
+ usStackRemaining = usTaskCheckFreeStackSpace((unsigned char *) pxNextTCB->pxEndOfStack);
+ }
+#else
+ {
+ usStackRemaining = usTaskCheckFreeStackSpace((unsigned char *) pxNextTCB->pxStack);
+ }
+#endif
+
+ sprintf(pcStatusString, (char *) "%s\t\t%c\t%u\t%u\t%u\r\n", pxNextTCB->pcTaskName, cStatus, (unsigned int) pxNextTCB->uxPriority, usStackRemaining, (unsigned int) pxNextTCB->uxTCBNumber);
+ strcat((char *) pcWriteBuffer, (char *) pcStatusString);
+
+ } while (pxNextTCB != pxFirstTCB);
+}
+
+#endif
+/*-----------------------------------------------------------*/
+
+#if ( configGENERATE_RUN_TIME_STATS == 1 )
+
+static void prvGenerateRunTimeStatsForTasksInList(const signed char *pcWriteBuffer, xList *pxList, unsigned long ulTotalRunTime)
+{
+ volatile tskTCB *pxNextTCB, *pxFirstTCB;
+ unsigned long ulStatsAsPercentage;
+
+ /* Write the run time stats of all the TCB's in pxList into the buffer. */
+ listGET_OWNER_OF_NEXT_ENTRY(pxFirstTCB, pxList);
+ do {
+ /* Get next TCB in from the list. */
+ listGET_OWNER_OF_NEXT_ENTRY(pxNextTCB, pxList);
+
+ /* Divide by zero check. */
+ if (ulTotalRunTime > 0UL) {
+ /* Has the task run at all? */
+ if (pxNextTCB->ulRunTimeCounter == 0) {
+ /* The task has used no CPU time at all. */
+ sprintf(pcStatsString, (char *) "%s\t\t0\t\t0%%\r\n", pxNextTCB->pcTaskName);
+ } else {
+ /* What percentage of the total run time as the task used?
+ This will always be rounded down to the nearest integer. */
+ ulStatsAsPercentage = (100UL * pxNextTCB->ulRunTimeCounter) / ulTotalRunTime;
+
+ if (ulStatsAsPercentage > 0UL) {
+ sprintf(pcStatsString, (char *) "%s\t\t%u\t\t%u%%\r\n", pxNextTCB->pcTaskName, (unsigned int) pxNextTCB->ulRunTimeCounter, (unsigned int) ulStatsAsPercentage);
+ } else {
+ /* If the percentage is zero here then the task has
+ consumed less than 1% of the total run time. */
+ sprintf(pcStatsString, (char *) "%s\t\t%u\t\t<1%%\r\n", pxNextTCB->pcTaskName, (unsigned int) pxNextTCB->ulRunTimeCounter);
+ }
+ }
+
+ strcat((char *) pcWriteBuffer, (char *) pcStatsString);
+ }
+
+ } while (pxNextTCB != pxFirstTCB);
+}
+
+#endif
+/*-----------------------------------------------------------*/
+
+#if ( ( configUSE_TRACE_FACILITY == 1 ) || ( INCLUDE_uxTaskGetStackHighWaterMark == 1 ) )
+
+static unsigned short usTaskCheckFreeStackSpace(const unsigned char * pucStackByte)
+{
+ register unsigned short usCount = 0;
+
+ while (*pucStackByte == tskSTACK_FILL_BYTE) {
+ pucStackByte -= portSTACK_GROWTH;
+ usCount++;
+ }
+
+ usCount /= sizeof(portSTACK_TYPE);
+
+ return usCount;
+}
+
+#endif
+/*-----------------------------------------------------------*/
+
+#if ( INCLUDE_uxTaskGetStackHighWaterMark == 1 )
+
+unsigned portBASE_TYPE uxTaskGetStackHighWaterMark(xTaskHandle xTask)
+{
+ tskTCB *pxTCB;
+ unsigned char *pcEndOfStack;
+ unsigned portBASE_TYPE uxReturn;
+
+ pxTCB = prvGetTCBFromHandle(xTask);
+
+#if portSTACK_GROWTH < 0
+ {
+ pcEndOfStack = (unsigned char *) pxTCB->pxStack;
+ }
+#else
+ {
+ pcEndOfStack = (unsigned char *) pxTCB->pxEndOfStack;
+ }
+#endif
+
+ uxReturn = (unsigned portBASE_TYPE) usTaskCheckFreeStackSpace(pcEndOfStack);
+
+ return uxReturn;
+}
+
+#endif
+/*-----------------------------------------------------------*/
+
+#if ( ( INCLUDE_vTaskDelete == 1 ) || ( INCLUDE_vTaskCleanUpResources == 1 ) )
+
+static void prvDeleteTCB(tskTCB *pxTCB)
+{
+ /* Free up the memory allocated by the scheduler for the task. It is up to
+ the task to free any memory allocated at the application level. */
+ vPortFreeAligned(pxTCB->pxStack);
+ vPortFree(pxTCB);
+}
+
+#endif
+
+
+/*-----------------------------------------------------------*/
+
+#if ( INCLUDE_xTaskGetCurrentTaskHandle == 1 )
+
+xTaskHandle xTaskGetCurrentTaskHandle(void)
+{
+ xTaskHandle xReturn;
+
+ /* A critical section is not required as this is not called from
+ an interrupt and the current TCB will always be the same for any
+ individual execution thread. */
+ xReturn = pxCurrentTCB;
+
+ return xReturn;
+}
+
+#endif
+
+/*-----------------------------------------------------------*/
+
+#if ( INCLUDE_xTaskGetSchedulerState == 1 )
+
+portBASE_TYPE xTaskGetSchedulerState(void)
+{
+ portBASE_TYPE xReturn;
+
+ if (xSchedulerRunning == pdFALSE) {
+ xReturn = taskSCHEDULER_NOT_STARTED;
+ } else {
+ if (uxSchedulerSuspended == (unsigned portBASE_TYPE) pdFALSE) {
+ xReturn = taskSCHEDULER_RUNNING;
+ } else {
+ xReturn = taskSCHEDULER_SUSPENDED;
+ }
+ }
+
+ return xReturn;
+}
+
+#endif
+/*-----------------------------------------------------------*/
+
+#if ( configUSE_MUTEXES == 1 )
+
+void vTaskPriorityInherit(xTaskHandle * const pxMutexHolder)
+{
+ tskTCB * const pxTCB = (tskTCB *) pxMutexHolder;
+
+ if (pxTCB->uxPriority < pxCurrentTCB->uxPriority) {
+ /* Adjust the mutex holder state to account for its new priority. */
+ listSET_LIST_ITEM_VALUE(&(pxTCB->xEventListItem), configMAX_PRIORITIES - (portTickType) pxCurrentTCB->uxPriority);
+
+ /* If the task being modified is in the ready state it will need to
+ be moved in to a new list. */
+ if (listIS_CONTAINED_WITHIN(&(pxReadyTasksLists[ pxTCB->uxPriority ]), &(pxTCB->xGenericListItem))) {
+ vListRemove(&(pxTCB->xGenericListItem));
+
+ /* Inherit the priority before being moved into the new list. */
+ pxTCB->uxPriority = pxCurrentTCB->uxPriority;
+ prvAddTaskToReadyQueue(pxTCB);
+ } else {
+ /* Just inherit the priority. */
+ pxTCB->uxPriority = pxCurrentTCB->uxPriority;
+ }
+ }
+}
+
+#endif
+/*-----------------------------------------------------------*/
+
+#if ( configUSE_MUTEXES == 1 )
+
+void vTaskPriorityDisinherit(xTaskHandle * const pxMutexHolder)
+{
+ tskTCB * const pxTCB = (tskTCB *) pxMutexHolder;
+
+ if (pxMutexHolder != NULL) {
+ if (pxTCB->uxPriority != pxTCB->uxBasePriority) {
+ /* We must be the running task to be able to give the mutex back.
+ Remove ourselves from the ready list we currently appear in. */
+ vListRemove(&(pxTCB->xGenericListItem));
+
+ /* Disinherit the priority before adding ourselves into the new
+ ready list. */
+ pxTCB->uxPriority = pxTCB->uxBasePriority;
+ listSET_LIST_ITEM_VALUE(&(pxTCB->xEventListItem), configMAX_PRIORITIES - (portTickType) pxTCB->uxPriority);
+ prvAddTaskToReadyQueue(pxTCB);
+ }
+ }
+}
+
+#endif
+/*-----------------------------------------------------------*/
+
+#if ( portCRITICAL_NESTING_IN_TCB == 1 )
+
+void vTaskEnterCritical(void)
+{
+ portDISABLE_INTERRUPTS();
+
+ if (xSchedulerRunning != pdFALSE) {
+ pxCurrentTCB->uxCriticalNesting++;
+ }
+}
+
+#endif
+/*-----------------------------------------------------------*/
+
+#if ( portCRITICAL_NESTING_IN_TCB == 1 )
+
+void vTaskExitCritical(void)
+{
+ if (xSchedulerRunning != pdFALSE) {
+ if (pxCurrentTCB->uxCriticalNesting > 0) {
+ pxCurrentTCB->uxCriticalNesting--;
+
+ if (pxCurrentTCB->uxCriticalNesting == 0) {
+ portENABLE_INTERRUPTS();
+ }
+ }
+ }
+}
+
+#endif
+/*-----------------------------------------------------------*/
+
+
+
+
diff --git a/gyro_board/src/usb/FreeRTOSConfig.h b/gyro_board/src/usb/FreeRTOSConfig.h
new file mode 100644
index 0000000..5a46dad
--- /dev/null
+++ b/gyro_board/src/usb/FreeRTOSConfig.h
@@ -0,0 +1,159 @@
+/*
+ FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.
+
+ ***************************************************************************
+ * *
+ * If you are: *
+ * *
+ * + New to FreeRTOS, *
+ * + Wanting to learn FreeRTOS or multitasking in general quickly *
+ * + Looking for basic training, *
+ * + Wanting to improve your FreeRTOS skills and productivity *
+ * *
+ * then take a look at the FreeRTOS eBook *
+ * *
+ * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
+ * http://www.FreeRTOS.org/Documentation *
+ * *
+ * A pdf reference manual is also available. Both are usually delivered *
+ * to your inbox within 20 minutes to two hours when purchased between 8am *
+ * and 8pm GMT (although please allow up to 24 hours in case of *
+ * exceptional circumstances). Thank you for your support! *
+ * *
+ ***************************************************************************
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
+ ***NOTE*** The exception to the GPL is included to allow you to distribute
+ a combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details. You should have received a copy of the GNU General Public
+ License and the FreeRTOS license exception along with FreeRTOS; if not it
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained
+ by writing to Richard Barry, contact details for whom are available on the
+ FreeRTOS WEB site.
+
+ 1 tab == 4 spaces!
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef FREERTOS_CONFIG_H
+#define FREERTOS_CONFIG_H
+
+#include "LPC17xx.h"
+
+/*-----------------------------------------------------------
+ * Application specific definitions.
+ *
+ * These definitions should be adjusted for your particular hardware and
+ * application requirements.
+ *
+ * THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE
+ * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.
+ *----------------------------------------------------------*/
+
+#define configUSE_PREEMPTION 1
+#define configUSE_IDLE_HOOK 0
+#define configMAX_PRIORITIES ((unsigned portBASE_TYPE) 5)
+#define configUSE_TICK_HOOK 1
+#define configCPU_CLOCK_HZ ((unsigned long) 100000000)
+#define configTICK_RATE_HZ ((portTickType ) 1000)
+#define configMINIMAL_STACK_SIZE ((unsigned short) 80)
+#define configTOTAL_HEAP_SIZE ((size_t) (19 * 1024))
+#define configMAX_TASK_NAME_LEN (12)
+#define configUSE_TRACE_FACILITY 1
+#define configUSE_16_BIT_TICKS 0
+#define configIDLE_SHOULD_YIELD 0
+#define configUSE_CO_ROUTINES 0
+#define configUSE_MUTEXES 1
+
+#define configMAX_CO_ROUTINE_PRIORITIES (2)
+
+#define configUSE_COUNTING_SEMAPHORES 0
+#define configUSE_ALTERNATIVE_API 0
+#define configCHECK_FOR_STACK_OVERFLOW 2
+#define configUSE_RECURSIVE_MUTEXES 1
+#define configQUEUE_REGISTRY_SIZE 10
+#define configGENERATE_RUN_TIME_STATS 1
+
+/* Set the following definitions to 1 to include the API function, or zero
+to exclude the API function. */
+
+#define INCLUDE_vTaskPrioritySet 1
+#define INCLUDE_uxTaskPriorityGet 1
+#define INCLUDE_vTaskDelete 1
+#define INCLUDE_vTaskCleanUpResources 0
+#define INCLUDE_vTaskSuspend 1
+#define INCLUDE_vTaskDelayUntil 1
+#define INCLUDE_vTaskDelay 1
+#define INCLUDE_uxTaskGetStackHighWaterMark 1
+
+/*-----------------------------------------------------------
+ * Ethernet configuration.
+ *-----------------------------------------------------------*/
+
+/* MAC address configuration. */
+#define configMAC_ADDR0 0x00
+#define configMAC_ADDR1 0x12
+#define configMAC_ADDR2 0x13
+#define configMAC_ADDR3 0x10
+#define configMAC_ADDR4 0x15
+#define configMAC_ADDR5 0x11
+
+/* IP address configuration. */
+#define configIP_ADDR0 192
+#define configIP_ADDR1 168
+#define configIP_ADDR2 0
+#define configIP_ADDR3 201
+
+/* Netmask configuration. */
+#define configNET_MASK0 255
+#define configNET_MASK1 255
+#define configNET_MASK2 255
+#define configNET_MASK3 0
+
+/* Use the system definition, if there is one */
+#ifdef __NVIC_PRIO_BITS
+#define configPRIO_BITS __NVIC_PRIO_BITS
+#else
+#define configPRIO_BITS 5 /* 32 priority levels */
+#endif
+
+/* The lowest priority. */
+#define configKERNEL_INTERRUPT_PRIORITY (31 << (8 - configPRIO_BITS))
+/* Priority 5, or 160 as only the top three bits are implemented. */
+#define configMAX_SYSCALL_INTERRUPT_PRIORITY (5 << (8 - configPRIO_BITS))
+
+/* Priorities passed to NVIC_SetPriority() do not require shifting as the
+function does the shifting itself. Note these priorities need to be equal to
+or lower than configMAX_SYSCALL_INTERRUPT_PRIORITY - therefore the numeric
+value needs to be equal to or greater than 5 (on the Cortex M3 the lower the
+numeric value the higher the interrupt priority). */
+#define configEMAC_INTERRUPT_PRIORITY 5
+#define configCAN_INTERRUPT_PRIORITY 5
+#define configUSB_INTERRUPT_PRIORITY 6
+
+
+
+/*-----------------------------------------------------------
+ * Macros required to setup the timer for the run time stats.
+ *-----------------------------------------------------------*/
+extern void vConfigureTimerForRunTimeStats(void);
+#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() vConfigureTimerForRunTimeStats()
+#define portGET_RUN_TIME_COUNTER_VALUE() TIM0->TC
+
+#endif /* FREERTOS_CONFIG_H */
diff --git a/gyro_board/src/usb/LPC17xx.h b/gyro_board/src/usb/LPC17xx.h
new file mode 100644
index 0000000..1743027
--- /dev/null
+++ b/gyro_board/src/usb/LPC17xx.h
@@ -0,0 +1,1052 @@
+#ifndef __LPC17xx_H
+#define __LPC17xx_H
+
+/* System Control Block (SCB) includes:
+ Flash Accelerator Module, Clocking and Power Control, External Interrupts,
+ Reset, System Control and Status
+*/
+#define SCB_BASE_ADDR 0x400FC000
+
+#define PCONP_PCTIM0 0x00000002
+#define PCONP_PCTIM1 0x00000004
+#define PCONP_PCUART0 0x00000008
+#define PCONP_PCUART1 0x00000010
+#define PCONP_PCPWM1 0x00000040
+#define PCONP_PCI2C0 0x00000080
+#define PCONP_PCSPI 0x00000100
+#define PCONP_PCRTC 0x00000200
+#define PCONP_PCSSP1 0x00000400
+#define PCONP_PCAD 0x00001000
+#define PCONP_PCCAN1 0x00002000
+#define PCONP_PCCAN2 0x00004000
+#define PCONP_PCGPIO 0x00008000
+#define PCONP_PCRIT 0x00010000
+#define PCONP_PCMCPWM 0x00020000
+#define PCONP_PCQEI 0x00040000
+#define PCONP_PCI2C1 0x00080000
+#define PCONP_PCSSP0 0x00200000
+#define PCONP_PCTIM2 0x00400000
+#define PCONP_PCTIM3 0x00800000
+#define PCONP_PCUART2 0x01000000
+#define PCONP_PCUART3 0x02000000
+#define PCONP_PCI2C2 0x04000000
+#define PCONP_PCI2S 0x08000000
+#define PCONP_PCGPDMA 0x20000000
+#define PCONP_PCENET 0x40000000
+#define PCONP_PCUSB 0x80000000
+
+#define PLLCON_PLLE 0x00000001
+#define PLLCON_PLLC 0x00000002
+#define PLLCON_MASK 0x00000003
+
+#define PLLCFG_MUL1 0x00000000
+#define PLLCFG_MUL2 0x00000001
+#define PLLCFG_MUL3 0x00000002
+#define PLLCFG_MUL4 0x00000003
+#define PLLCFG_MUL5 0x00000004
+#define PLLCFG_MUL6 0x00000005
+#define PLLCFG_MUL7 0x00000006
+#define PLLCFG_MUL8 0x00000007
+#define PLLCFG_MUL9 0x00000008
+#define PLLCFG_MUL10 0x00000009
+#define PLLCFG_MUL11 0x0000000A
+#define PLLCFG_MUL12 0x0000000B
+#define PLLCFG_MUL13 0x0000000C
+#define PLLCFG_MUL14 0x0000000D
+#define PLLCFG_MUL15 0x0000000E
+#define PLLCFG_MUL16 0x0000000F
+#define PLLCFG_MUL17 0x00000010
+#define PLLCFG_MUL18 0x00000011
+#define PLLCFG_MUL19 0x00000012
+#define PLLCFG_MUL20 0x00000013
+#define PLLCFG_MUL21 0x00000014
+#define PLLCFG_MUL22 0x00000015
+#define PLLCFG_MUL23 0x00000016
+#define PLLCFG_MUL24 0x00000017
+#define PLLCFG_MUL25 0x00000018
+#define PLLCFG_MUL26 0x00000019
+#define PLLCFG_MUL27 0x0000001A
+#define PLLCFG_MUL28 0x0000001B
+#define PLLCFG_MUL29 0x0000001C
+#define PLLCFG_MUL30 0x0000001D
+#define PLLCFG_MUL31 0x0000001E
+#define PLLCFG_MUL32 0x0000001F
+#define PLLCFG_MUL33 0x00000020
+#define PLLCFG_MUL34 0x00000021
+#define PLLCFG_MUL35 0x00000022
+#define PLLCFG_MUL36 0x00000023
+
+#define PLLCFG_DIV1 0x00000000
+#define PLLCFG_DIV2 0x00010000
+#define PLLCFG_DIV3 0x00020000
+#define PLLCFG_DIV4 0x00030000
+#define PLLCFG_DIV5 0x00040000
+#define PLLCFG_DIV6 0x00050000
+#define PLLCFG_DIV7 0x00060000
+#define PLLCFG_DIV8 0x00070000
+#define PLLCFG_DIV9 0x00080000
+#define PLLCFG_DIV10 0x00090000
+#define PLLCFG_MASK 0x00FF7FFF
+
+#define PLLSTAT_MSEL_MASK 0x00007FFF
+#define PLLSTAT_NSEL_MASK 0x00FF0000
+
+#define PLLSTAT_PLLE (1 << 24)
+#define PLLSTAT_PLLC (1 << 25)
+#define PLLSTAT_PLOCK (1 << 26)
+
+#define PLLFEED_FEED1 0x000000AA
+#define PLLFEED_FEED2 0x00000055
+
+#define NVIC_IRQ_WDT 0u // IRQ0, exception number 16
+#define NVIC_IRQ_TIMER0 1u // IRQ1, exception number 17
+#define NVIC_IRQ_TIMER1 2u // IRQ2, exception number 18
+#define NVIC_IRQ_TIMER2 3u // IRQ3, exception number 19
+#define NVIC_IRQ_TIMER3 4u // IRQ4, exception number 20
+#define NVIC_IRQ_UART0 5u // IRQ5, exception number 21
+#define NVIC_IRQ_UART1 6u // IRQ6, exception number 22
+#define NVIC_IRQ_UART2 7u // IRQ7, exception number 23
+#define NVIC_IRQ_UART3 8u // IRQ8, exception number 24
+#define NVIC_IRQ_PWM1 9u // IRQ9, exception number 25
+#define NVIC_IRQ_I2C0 10u // IRQ10, exception number 26
+#define NVIC_IRQ_I2C1 11u // IRQ11, exception number 27
+#define NVIC_IRQ_I2C2 12u // IRQ12, exception number 28
+#define NVIC_IRQ_SPI 13u // IRQ13, exception number 29
+#define NVIC_IRQ_SSP0 14u // IRQ14, exception number 30
+#define NVIC_IRQ_SSP1 15u // IRQ15, exception number 31
+#define NVIC_IRQ_PLL0 16u // IRQ16, exception number 32
+#define NVIC_IRQ_RTC 17u // IRQ17, exception number 33
+#define NVIC_IRQ_EINT0 18u // IRQ18, exception number 34
+#define NVIC_IRQ_EINT1 19u // IRQ19, exception number 35
+#define NVIC_IRQ_EINT2 20u // IRQ20, exception number 36
+#define NVIC_IRQ_EINT3 21u // IRQ21, exception number 37
+#define NVIC_IRQ_ADC 22u // IRQ22, exception number 38
+#define NVIC_IRQ_BOD 23u // IRQ23, exception number 39
+#define NVIC_IRQ_USB 24u // IRQ24, exception number 40
+#define NVIC_IRQ_CAN 25u // IRQ25, exception number 41
+#define NVIC_IRQ_GPDMA 26u // IRQ26, exception number 42
+#define NVIC_IRQ_I2S 27u // IRQ27, exception number 43
+#define NVIC_IRQ_ETHERNET 28u // IRQ28, exception number 44
+#define NVIC_IRQ_RIT 29u // IRQ29, exception number 45
+#define NVIC_IRQ_MCPWM 30u // IRQ30, exception number 46
+#define NVIC_IRQ_QE 31u // IRQ31, exception number 47
+#define NVIC_IRQ_PLL1 32u // IRQ32, exception number 48
+#define NVIC_IRQ_USB_ACT 33u // IRQ33, exception number 49
+#define NVIC_IRQ_CAN_ACT 34u // IRQ34, exception number 50
+
+
+#endif // __LPC17xx_H
+
+
+#ifndef CMSIS_17xx_H
+#define CMSIS_17xx_H
+
+/******************************************************************************
+ * @file: LPC17xx.h
+ * @purpose: CMSIS Cortex-M3 Core Peripheral Access Layer Header File for
+ * NXP LPC17xx Device Series
+ * @version: V1.1
+ * @date: 14th May 2009
+ *----------------------------------------------------------------------------
+ *
+ * Copyright (C) 2008 ARM Limited. All rights reserved.
+ *
+ * ARM Limited (ARM) is supplying this software for use with Cortex-M3
+ * processor based microcontrollers. This file can be freely distributed
+ * within development tools that are supporting such ARM based processors.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED
+ * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
+ * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR
+ * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
+ *
+ ******************************************************************************/
+
+
+#ifndef __LPC17xx_H__
+#define __LPC17xx_H__
+
+/*
+ * ==========================================================================
+ * ---------- Interrupt Number Definition -----------------------------------
+ * ==========================================================================
+ */
+
+typedef enum IRQn {
+ /****** Cortex-M3 Processor Exceptions Numbers ***************************************************/
+ NonMaskableInt_IRQn = -14, /*!< 2 Non Maskable Interrupt */
+ MemoryManagement_IRQn = -12, /*!< 4 Cortex-M3 Memory Management Interrupt */
+ BusFault_IRQn = -11, /*!< 5 Cortex-M3 Bus Fault Interrupt */
+ UsageFault_IRQn = -10, /*!< 6 Cortex-M3 Usage Fault Interrupt */
+ SVCall_IRQn = -5, /*!< 11 Cortex-M3 SV Call Interrupt */
+ DebugMonitor_IRQn = -4, /*!< 12 Cortex-M3 Debug Monitor Interrupt */
+ PendSV_IRQn = -2, /*!< 14 Cortex-M3 Pend SV Interrupt */
+ SysTick_IRQn = -1, /*!< 15 Cortex-M3 System Tick Interrupt */
+
+ /****** LPC17xx Specific Interrupt Numbers *******************************************************/
+ WDT_IRQn = 0, /*!< Watchdog Timer Interrupt */
+ TIMER0_IRQn = 1, /*!< Timer0 Interrupt */
+ TIMER1_IRQn = 2, /*!< Timer1 Interrupt */
+ TIMER2_IRQn = 3, /*!< Timer2 Interrupt */
+ TIMER3_IRQn = 4, /*!< Timer3 Interrupt */
+ UART0_IRQn = 5, /*!< UART0 Interrupt */
+ UART1_IRQn = 6, /*!< UART1 Interrupt */
+ UART2_IRQn = 7, /*!< UART2 Interrupt */
+ UART3_IRQn = 8, /*!< UART3 Interrupt */
+ PWM1_IRQn = 9, /*!< PWM1 Interrupt */
+ I2C0_IRQn = 10, /*!< I2C0 Interrupt */
+ I2C1_IRQn = 11, /*!< I2C1 Interrupt */
+ I2C2_IRQn = 12, /*!< I2C2 Interrupt */
+ SPI_IRQn = 13, /*!< SPI Interrupt */
+ SSP0_IRQn = 14, /*!< SSP0 Interrupt */
+ SSP1_IRQn = 15, /*!< SSP1 Interrupt */
+ PLL0_IRQn = 16, /*!< PLL0 Lock (Main PLL) Interrupt */
+ RTC_IRQn = 17, /*!< Real Time Clock Interrupt */
+ EINT0_IRQn = 18, /*!< External Interrupt 0 Interrupt */
+ EINT1_IRQn = 19, /*!< External Interrupt 1 Interrupt */
+ EINT2_IRQn = 20, /*!< External Interrupt 2 Interrupt */
+ EINT3_IRQn = 21, /*!< External Interrupt 3 Interrupt */
+ ADC_IRQn = 22, /*!< A/D Converter Interrupt */
+ BOD_IRQn = 23, /*!< Brown-Out Detect Interrupt */
+ USB_IRQn = 24, /*!< USB Interrupt */
+ CAN_IRQn = 25, /*!< CAN Interrupt */
+ DMA_IRQn = 26, /*!< General Purpose DMA Interrupt */
+ I2S_IRQn = 27, /*!< I2S Interrupt */
+ ENET_IRQn = 28, /*!< Ethernet Interrupt */
+ RIT_IRQn = 29, /*!< Repetitive Interrupt Timer Interrupt */
+ MCPWM_IRQn = 30, /*!< Motor Control PWM Interrupt */
+ QEI_IRQn = 31, /*!< Quadrature Encoder Interface Interrupt */
+ PLL1_IRQn = 32, /*!< PLL1 Lock (USB PLL) Interrupt */
+} IRQn_Type;
+
+
+/*
+ * ==========================================================================
+ * ----------- Processor and Core Peripheral Section ------------------------
+ * ==========================================================================
+ */
+
+/* Configuration of the Cortex-M3 Processor and Core Peripherals */
+#define __MPU_PRESENT 1 /*!< MPU present or not */
+#define __NVIC_PRIO_BITS 5 /*!< Number of Bits used for Priority Levels */
+#define __Vendor_SysTickConfig 0 /*!< Set to 1 if different SysTick Config is used */
+
+
+//#include "..\core_cm3.h" /* Cortex-M3 processor and core peripherals */
+#include "core_cm3.h"
+#include "system_LPC17xx.h" /* System Header */
+
+
+
+/**
+ * Initialize the system clock
+ *
+ * @param none
+ * @return none
+ *
+ * @brief Setup the microcontroller system.
+ * Initialize the System and update the SystemFrequency variable.
+ */
+extern void SystemInit(void);
+
+
+/******************************************************************************/
+/* Device Specific Peripheral registers structures */
+/******************************************************************************/
+
+/*------------- System Control (SC) ------------------------------------------*/
+typedef struct {
+ __IO uint32_t FLASHCFG; /* Flash Accelerator Module */
+ uint32_t RESERVED0[31];
+ __IO uint32_t PLL0CON; /* Clocking and Power Control */
+ __IO uint32_t PLL0CFG;
+ __I uint32_t PLL0STAT;
+ __O uint32_t PLL0FEED;
+ uint32_t RESERVED1[4];
+ __IO uint32_t PLL1CON;
+ __IO uint32_t PLL1CFG;
+ __I uint32_t PLL1STAT;
+ __O uint32_t PLL1FEED;
+ uint32_t RESERVED2[4];
+ __IO uint32_t PCON;
+ __IO uint32_t PCONP;
+ uint32_t RESERVED3[15];
+ __IO uint32_t CCLKCFG;
+ __IO uint32_t USBCLKCFG;
+ __IO uint32_t CLKSRCSEL;
+ uint32_t RESERVED4[12];
+ __IO uint32_t EXTINT; /* External Interrupts */
+ uint32_t RESERVED5;
+ __IO uint32_t EXTMODE;
+ __IO uint32_t EXTPOLAR;
+ uint32_t RESERVED6[12];
+ __IO uint32_t RSID; /* Reset */
+ uint32_t RESERVED7[7];
+ __IO uint32_t SCS; /* Syscon Miscellaneous Registers */
+ __IO uint32_t IRCTRIM; /* Clock Dividers */
+ __IO uint32_t PCLKSEL0;
+ __IO uint32_t PCLKSEL1;
+ uint32_t RESERVED8[4];
+ __IO uint32_t USBIntSt; /* USB Device/OTG Interrupt Register */
+ uint32_t RESERVED9;
+ __IO uint32_t CLKOUTCFG; /* Clock Output Configuration */
+} SC_TypeDef;
+
+/*------------- Pin Connect Block (PINCON) -----------------------------------*/
+typedef struct {
+ __IO uint32_t PINSEL0;
+ __IO uint32_t PINSEL1;
+ __IO uint32_t PINSEL2;
+ __IO uint32_t PINSEL3;
+ __IO uint32_t PINSEL4;
+ __IO uint32_t PINSEL5;
+ __IO uint32_t PINSEL6;
+ __IO uint32_t PINSEL7;
+ __IO uint32_t PINSEL8;
+ __IO uint32_t PINSEL9;
+ __IO uint32_t PINSEL10;
+ uint32_t RESERVED0[5];
+ __IO uint32_t PINMODE0;
+ __IO uint32_t PINMODE1;
+ __IO uint32_t PINMODE2;
+ __IO uint32_t PINMODE3;
+ __IO uint32_t PINMODE4;
+ __IO uint32_t PINMODE5;
+ __IO uint32_t PINMODE6;
+ __IO uint32_t PINMODE7;
+ __IO uint32_t PINMODE8;
+ __IO uint32_t PINMODE9;
+ __IO uint32_t PINMODE_OD0;
+ __IO uint32_t PINMODE_OD1;
+ __IO uint32_t PINMODE_OD2;
+ __IO uint32_t PINMODE_OD3;
+ __IO uint32_t PINMODE_OD4;
+} PINCON_TypeDef;
+
+/*------------- General Purpose Input/Output (GPIO) --------------------------*/
+typedef struct {
+ __IO uint32_t FIODIR;
+ uint32_t RESERVED0[3];
+ __IO uint32_t FIOMASK;
+ __IO uint32_t FIOPIN;
+ __IO uint32_t FIOSET;
+ __O uint32_t FIOCLR;
+} GPIO_TypeDef;
+
+typedef struct {
+ __I uint32_t IntStatus;
+ __I uint32_t IO0IntStatR;
+ __I uint32_t IO0IntStatF;
+ __O uint32_t IO0IntClr;
+ __IO uint32_t IO0IntEnR;
+ __IO uint32_t IO0IntEnF;
+ uint32_t RESERVED0[3];
+ __I uint32_t IO2IntStatR;
+ __I uint32_t IO2IntStatF;
+ __O uint32_t IO2IntClr;
+ __IO uint32_t IO2IntEnR;
+ __IO uint32_t IO2IntEnF;
+} GPIOINT_TypeDef;
+
+/*------------- Timer (TIM) --------------------------------------------------*/
+typedef struct {
+ __IO uint32_t IR;
+ __IO uint32_t TCR;
+ __IO uint32_t TC;
+ __IO uint32_t PR;
+ __IO uint32_t PC;
+ __IO uint32_t MCR;
+ __IO uint32_t MR0;
+ __IO uint32_t MR1;
+ __IO uint32_t MR2;
+ __IO uint32_t MR3;
+ __IO uint32_t CCR;
+ __I uint32_t CR0;
+ __I uint32_t CR1;
+ uint32_t RESERVED0[2];
+ __IO uint32_t EMR;
+ uint32_t RESERVED1[24];
+ __IO uint32_t CTCR;
+} TIM_TypeDef;
+
+/*------------- Pulse-Width Modulation (PWM) ---------------------------------*/
+typedef struct {
+ __IO uint32_t IR;
+ __IO uint32_t TCR;
+ __IO uint32_t TC;
+ __IO uint32_t PR;
+ __IO uint32_t PC;
+ __IO uint32_t MCR;
+ __IO uint32_t MR0;
+ __IO uint32_t MR1;
+ __IO uint32_t MR2;
+ __IO uint32_t MR3;
+ __IO uint32_t CCR;
+ __I uint32_t CR0;
+ __I uint32_t CR1;
+ __I uint32_t CR2;
+ __I uint32_t CR3;
+ __IO uint32_t MR4;
+ __IO uint32_t MR5;
+ __IO uint32_t MR6;
+ __IO uint32_t PCR;
+ __IO uint32_t LER;
+ uint32_t RESERVED0[7];
+ __IO uint32_t CTCR;
+} PWM_TypeDef;
+
+/*------------- Universal Asynchronous Receiver Transmitter (UART) -----------*/
+typedef struct {
+ union {
+ __I uint8_t RBR;
+ __O uint8_t THR;
+ __IO uint8_t DLL;
+ uint32_t RESERVED0;
+ };
+ union {
+ __IO uint8_t DLM;
+ __IO uint32_t IER;
+ };
+ union {
+ __I uint32_t IIR;
+ __O uint8_t FCR;
+ };
+ __IO uint8_t LCR;
+ uint8_t RESERVED1[7];
+ __IO uint8_t LSR;
+ uint8_t RESERVED2[7];
+ __IO uint8_t SCR;
+ uint8_t RESERVED3[3];
+ __IO uint32_t ACR;
+ __IO uint8_t ICR;
+ uint8_t RESERVED4[3];
+ __IO uint8_t FDR;
+ uint8_t RESERVED5[7];
+ __IO uint8_t TER;
+ uint8_t RESERVED6[27];
+ __IO uint8_t RS485CTRL;
+ uint8_t RESERVED7[3];
+ __IO uint8_t ADRMATCH;
+} UART_TypeDef;
+
+typedef struct {
+ union {
+ __I uint8_t RBR;
+ __O uint8_t THR;
+ __IO uint8_t DLL;
+ uint32_t RESERVED0;
+ };
+ union {
+ __IO uint8_t DLM;
+ __IO uint32_t IER;
+ };
+ union {
+ __I uint32_t IIR;
+ __O uint8_t FCR;
+ };
+ __IO uint8_t LCR;
+ uint8_t RESERVED1[3];
+ __IO uint8_t MCR;
+ uint8_t RESERVED2[3];
+ __IO uint8_t LSR;
+ uint8_t RESERVED3[3];
+ __IO uint8_t MSR;
+ uint8_t RESERVED4[3];
+ __IO uint8_t SCR;
+ uint8_t RESERVED5[3];
+ __IO uint32_t ACR;
+ uint32_t RESERVED6;
+ __IO uint32_t FDR;
+ uint32_t RESERVED7;
+ __IO uint8_t TER;
+ uint8_t RESERVED8[27];
+ __IO uint8_t RS485CTRL;
+ uint8_t RESERVED9[3];
+ __IO uint8_t ADRMATCH;
+ uint8_t RESERVED10[3];
+ __IO uint8_t RS485DLY;
+} UART1_TypeDef;
+
+/*------------- Serial Peripheral Interface (SPI) ----------------------------*/
+typedef struct {
+ __IO uint32_t SPCR;
+ __I uint32_t SPSR;
+ __IO uint32_t SPDR;
+ __IO uint32_t SPCCR;
+ uint32_t RESERVED0[3];
+ __IO uint32_t SPINT;
+} SPI_TypeDef;
+
+/*------------- Synchronous Serial Communication (SSP) -----------------------*/
+typedef struct {
+ __IO uint32_t CR0;
+ __IO uint32_t CR1;
+ __IO uint32_t DR;
+ __I uint32_t SR;
+ __IO uint32_t CPSR;
+ __IO uint32_t IMSC;
+ __IO uint32_t RIS;
+ __IO uint32_t MIS;
+ __IO uint32_t ICR;
+ __IO uint32_t DMACR;
+} SSP_TypeDef;
+
+/*------------- Inter-Integrated Circuit (I2C) -------------------------------*/
+typedef struct {
+ __IO uint32_t I2CONSET;
+ __I uint32_t I2STAT;
+ __IO uint32_t I2DAT;
+ __IO uint32_t I2ADR0;
+ __IO uint32_t I2SCLH;
+ __IO uint32_t I2SCLL;
+ __O uint32_t I2CONCLR;
+ __IO uint32_t MMCTRL;
+ __IO uint32_t I2ADR1;
+ __IO uint32_t I2ADR2;
+ __IO uint32_t I2ADR3;
+ __I uint32_t I2DATA_BUFFER;
+ __IO uint32_t I2MASK0;
+ __IO uint32_t I2MASK1;
+ __IO uint32_t I2MASK2;
+ __IO uint32_t I2MASK3;
+} I2C_TypeDef;
+
+/*------------- Inter IC Sound (I2S) -----------------------------------------*/
+typedef struct {
+ __IO uint32_t I2SDAO;
+ __IO uint32_t I2SDAI;
+ __O uint32_t I2STXFIFO;
+ __I uint32_t I2SRXFIFO;
+ __I uint32_t I2SSTATE;
+ __IO uint32_t I2SDMA1;
+ __IO uint32_t I2SDMA2;
+ __IO uint32_t I2SIRQ;
+ __IO uint32_t I2STXRATE;
+ __IO uint32_t I2SRXRATE;
+ __IO uint32_t I2STXBITRATE;
+ __IO uint32_t I2SRXBITRATE;
+ __IO uint32_t I2STXMODE;
+ __IO uint32_t I2SRXMODE;
+} I2S_TypeDef;
+
+/*------------- Repetitive Interrupt Timer (RIT) -----------------------------*/
+typedef struct {
+ __IO uint32_t RICOMPVAL;
+ __IO uint32_t RIMASK;
+ __IO uint8_t RICTRL;
+ uint8_t RESERVED0[3];
+ __IO uint32_t RICOUNTER;
+} RIT_TypeDef;
+
+/*------------- Real-Time Clock (RTC) ----------------------------------------*/
+typedef struct {
+ __IO uint8_t ILR;
+ uint8_t RESERVED0[3];
+ __IO uint8_t CCR;
+ uint8_t RESERVED1[3];
+ __IO uint8_t CIIR;
+ uint8_t RESERVED2[3];
+ __IO uint8_t AMR;
+ uint8_t RESERVED3[3];
+ __I uint32_t CTIME0;
+ __I uint32_t CTIME1;
+ __I uint32_t CTIME2;
+ __IO uint8_t SEC;
+ uint8_t RESERVED4[3];
+ __IO uint8_t MIN;
+ uint8_t RESERVED5[3];
+ __IO uint8_t HOUR;
+ uint8_t RESERVED6[3];
+ __IO uint8_t DOM;
+ uint8_t RESERVED7[3];
+ __IO uint8_t DOW;
+ uint8_t RESERVED8[3];
+ __IO uint16_t DOY;
+ uint16_t RESERVED9;
+ __IO uint8_t MONTH;
+ uint8_t RESERVED10[3];
+ __IO uint16_t YEAR;
+ uint16_t RESERVED11;
+ __IO uint32_t CALIBRATION;
+ __IO uint32_t GPREG0;
+ __IO uint32_t GPREG1;
+ __IO uint32_t GPREG2;
+ __IO uint32_t GPREG3;
+ __IO uint32_t GPREG4;
+ __IO uint8_t WAKEUPDIS;
+ uint8_t RESERVED12[3];
+ __IO uint8_t PWRCTRL;
+ uint8_t RESERVED13[3];
+ __IO uint8_t ALSEC;
+ uint8_t RESERVED14[3];
+ __IO uint8_t ALMIN;
+ uint8_t RESERVED15[3];
+ __IO uint8_t ALHOUR;
+ uint8_t RESERVED16[3];
+ __IO uint8_t ALDOM;
+ uint8_t RESERVED17[3];
+ __IO uint8_t ALDOW;
+ uint8_t RESERVED18[3];
+ __IO uint16_t ALDOY;
+ uint16_t RESERVED19;
+ __IO uint8_t ALMON;
+ uint8_t RESERVED20[3];
+ __IO uint16_t ALYEAR;
+ uint16_t RESERVED21;
+} RTC_TypeDef;
+
+/*------------- Watchdog Timer (WDT) -----------------------------------------*/
+typedef struct {
+ __IO uint8_t WDMOD;
+ uint8_t RESERVED0[3];
+ __IO uint32_t WDTC;
+ __O uint8_t WDFEED;
+ uint8_t RESERVED1[3];
+ __I uint32_t WDTV;
+ __IO uint32_t WDCLKSEL;
+} WDT_TypeDef;
+
+/*------------- Analog-to-Digital Converter (ADC) ----------------------------*/
+typedef struct {
+ __IO uint32_t ADCR;
+ __IO uint32_t ADGDR;
+ uint32_t RESERVED0;
+ __IO uint32_t ADINTEN;
+ __I uint32_t ADDR0;
+ __I uint32_t ADDR1;
+ __I uint32_t ADDR2;
+ __I uint32_t ADDR3;
+ __I uint32_t ADDR4;
+ __I uint32_t ADDR5;
+ __I uint32_t ADDR6;
+ __I uint32_t ADDR7;
+ __I uint32_t ADSTAT;
+ __IO uint32_t ADTRM;
+} ADC_TypeDef;
+
+/*------------- Digital-to-Analog Converter (DAC) ----------------------------*/
+typedef struct {
+ __IO uint32_t DACR;
+ __IO uint32_t DACCTRL;
+ __IO uint16_t DACCNTVAL;
+} DAC_TypeDef;
+
+/*------------- Motor Control Pulse-Width Modulation (MCPWM) -----------------*/
+typedef struct {
+ __I uint32_t MCCON;
+ __O uint32_t MCCON_SET;
+ __O uint32_t MCCON_CLR;
+ __I uint32_t MCCAPCON;
+ __O uint32_t MCCAPCON_SET;
+ __O uint32_t MCCAPCON_CLR;
+ __IO uint32_t MCTC0;
+ __IO uint32_t MCTC1;
+ __IO uint32_t MCTC2;
+ __IO uint32_t MCLIM0;
+ __IO uint32_t MCLIM1;
+ __IO uint32_t MCLIM2;
+ __IO uint32_t MCMAT0;
+ __IO uint32_t MCMAT1;
+ __IO uint32_t MCMAT2;
+ __IO uint32_t MCDEADTIME;
+ __IO uint32_t MCCP;
+ __IO uint32_t MCCR0;
+ __IO uint32_t MCCR1;
+ __IO uint32_t MCCR2;
+ __I uint32_t MCINTEN;
+ __O uint32_t MCINTEN_SET;
+ __O uint32_t MCINTEN_CLR;
+ __I uint32_t MCCNTCON;
+ __O uint32_t MCCNTCON_SET;
+ __O uint32_t MCCNTCON_CLR;
+ __I uint32_t MCINTFLAG;
+ __O uint32_t MCINTFLAG_SET;
+ __O uint32_t MCINTFLAG_CLR;
+ __O uint32_t MCCAP_CLR;
+} MCPWM_TypeDef;
+
+/*------------- Quadrature Encoder Interface (QEI) ---------------------------*/
+typedef struct {
+ __O uint32_t QEICON;
+ __I uint32_t QEISTAT;
+ __IO uint32_t QEICONF;
+ __I uint32_t QEIPOS;
+ __IO uint32_t QEIMAXPOS;
+ __IO uint32_t CMPOS0;
+ __IO uint32_t CMPOS1;
+ __IO uint32_t CMPOS2;
+ __I uint32_t INXCNT;
+ __IO uint32_t INXCMP;
+ __IO uint32_t QEILOAD;
+ __I uint32_t QEITIME;
+ __I uint32_t QEIVEL;
+ __I uint32_t QEICAP;
+ __IO uint32_t VELCOMP;
+ __IO uint32_t FILTER;
+ uint32_t RESERVED0[998];
+ __O uint32_t QEIIEC;
+ __O uint32_t QEIIES;
+ __I uint32_t QEIINTSTAT;
+ __I uint32_t QEIIE;
+ __O uint32_t QEICLR;
+ __O uint32_t QEISET;
+} QEI_TypeDef;
+
+/*------------- Controller Area Network (CAN) --------------------------------*/
+typedef struct {
+ __IO uint32_t mask[512]; /* ID Masks */
+} CANAF_RAM_TypeDef;
+
+typedef struct { /* Acceptance Filter Registers */
+ __IO uint32_t AFMR;
+ __IO uint32_t SFF_sa;
+ __IO uint32_t SFF_GRP_sa;
+ __IO uint32_t EFF_sa;
+ __IO uint32_t EFF_GRP_sa;
+ __IO uint32_t ENDofTable;
+ __I uint32_t LUTerrAd;
+ __I uint32_t LUTerr;
+} CANAF_TypeDef;
+
+typedef struct { /* Central Registers */
+ __I uint32_t CANTxSR;
+ __I uint32_t CANRxSR;
+ __I uint32_t CANMSR;
+} CANCR_TypeDef;
+
+typedef struct { /* Controller Registers */
+ __IO uint32_t MOD;
+ __O uint32_t CMR;
+ __IO uint32_t GSR;
+ __I uint32_t ICR;
+ __IO uint32_t IER;
+ __IO uint32_t BTR;
+ __IO uint32_t EWL;
+ __I uint32_t SR;
+ __IO uint32_t RFS;
+ __IO uint32_t RID;
+ __IO uint32_t RDA;
+ __IO uint32_t RDB;
+ __IO uint32_t TFI1;
+ __IO uint32_t TID1;
+ __IO uint32_t TDA1;
+ __IO uint32_t TDB1;
+ __IO uint32_t TFI2;
+ __IO uint32_t TID2;
+ __IO uint32_t TDA2;
+ __IO uint32_t TDB2;
+ __IO uint32_t TFI3;
+ __IO uint32_t TID3;
+ __IO uint32_t TDA3;
+ __IO uint32_t TDB3;
+} CAN_TypeDef;
+
+/*------------- General Purpose Direct Memory Access (GPDMA) -----------------*/
+typedef struct { /* Common Registers */
+ __I uint32_t DMACIntStat;
+ __I uint32_t DMACIntTCStat;
+ __O uint32_t DMACIntTCClear;
+ __I uint32_t DMACIntErrStat;
+ __O uint32_t DMACIntErrClr;
+ __I uint32_t DMACRawIntTCStat;
+ __I uint32_t DMACRawIntErrStat;
+ __I uint32_t DMACEnbldChns;
+ __IO uint32_t DMACSoftBReq;
+ __IO uint32_t DMACSoftSReq;
+ __IO uint32_t DMACSoftLBReq;
+ __IO uint32_t DMACSoftLSReq;
+ __IO uint32_t DMACConfig;
+ __IO uint32_t DMACSync;
+} GPDMA_TypeDef;
+
+typedef struct { /* Channel Registers */
+ __IO uint32_t DMACCSrcAddr;
+ __IO uint32_t DMACCDestAddr;
+ __IO uint32_t DMACCLLI;
+ __IO uint32_t DMACCControl;
+ __IO uint32_t DMACCConfig;
+} GPDMACH_TypeDef;
+
+/*------------- Universal Serial Bus (USB) -----------------------------------*/
+typedef struct {
+ __I uint32_t HcRevision; /* USB Host Registers */
+ __IO uint32_t HcControl;
+ __IO uint32_t HcCommandStatus;
+ __IO uint32_t HcInterruptStatus;
+ __IO uint32_t HcInterruptEnable;
+ __IO uint32_t HcInterruptDisable;
+ __IO uint32_t HcHCCA;
+ __I uint32_t HcPeriodCurrentED;
+ __IO uint32_t HcControlHeadED;
+ __IO uint32_t HcControlCurrentED;
+ __IO uint32_t HcBulkHeadED;
+ __IO uint32_t HcBulkCurrentED;
+ __I uint32_t HcDoneHead;
+ __IO uint32_t HcFmInterval;
+ __I uint32_t HcFmRemaining;
+ __I uint32_t HcFmNumber;
+ __IO uint32_t HcPeriodicStart;
+ __IO uint32_t HcLSTreshold;
+ __IO uint32_t HcRhDescriptorA;
+ __IO uint32_t HcRhDescriptorB;
+ __IO uint32_t HcRhStatus;
+ __IO uint32_t HcRhPortStatus1;
+ __IO uint32_t HcRhPortStatus2;
+ uint32_t RESERVED0[40];
+ __I uint32_t Module_ID;
+
+ __I uint32_t OTGIntSt; /* USB On-The-Go Registers */
+ __IO uint32_t OTGIntEn;
+ __O uint32_t OTGIntSet;
+ __O uint32_t OTGIntClr;
+ __IO uint32_t OTGStCtrl;
+ __IO uint32_t OTGTmr;
+ uint32_t RESERVED1[58];
+
+ __I uint32_t USBDevIntSt; /* USB Device Interrupt Registers */
+ __IO uint32_t USBDevIntEn;
+ __O uint32_t USBDevIntClr;
+ __O uint32_t USBDevIntSet;
+
+ __O uint32_t USBCmdCode; /* USB Device SIE Command Registers */
+ __I uint32_t USBCmdData;
+
+ __I uint32_t USBRxData; /* USB Device Transfer Registers */
+ __O uint32_t USBTxData;
+ __I uint32_t USBRxPLen;
+ __O uint32_t USBTxPLen;
+ __IO uint32_t USBCtrl;
+ __O uint32_t USBDevIntPri;
+
+ __I uint32_t USBEpIntSt; /* USB Device Endpoint Interrupt Regs */
+ __IO uint32_t USBEpIntEn;
+ __O uint32_t USBEpIntClr;
+ __O uint32_t USBEpIntSet;
+ __O uint32_t USBEpIntPri;
+
+ __IO uint32_t USBReEp; /* USB Device Endpoint Realization Reg*/
+ __O uint32_t USBEpInd;
+ __IO uint32_t USBMaxPSize;
+
+ __I uint32_t USBDMARSt; /* USB Device DMA Registers */
+ __O uint32_t USBDMARClr;
+ __O uint32_t USBDMARSet;
+ uint32_t RESERVED2[9];
+ __IO uint32_t USBUDCAH;
+ __I uint32_t USBEpDMASt;
+ __O uint32_t USBEpDMAEn;
+ __O uint32_t USBEpDMADis;
+ __I uint32_t USBDMAIntSt;
+ __IO uint32_t USBDMAIntEn;
+ uint32_t RESERVED3[2];
+ __I uint32_t USBEoTIntSt;
+ __O uint32_t USBEoTIntClr;
+ __O uint32_t USBEoTIntSet;
+ __I uint32_t USBNDDRIntSt;
+ __O uint32_t USBNDDRIntClr;
+ __O uint32_t USBNDDRIntSet;
+ __I uint32_t USBSysErrIntSt;
+ __O uint32_t USBSysErrIntClr;
+ __O uint32_t USBSysErrIntSet;
+ uint32_t RESERVED4[15];
+
+ __I uint32_t I2C_RX; /* USB OTG I2C Registers */
+ __O uint32_t I2C_WO;
+ __I uint32_t I2C_STS;
+ __IO uint32_t I2C_CTL;
+ __IO uint32_t I2C_CLKHI;
+ __O uint32_t I2C_CLKLO;
+ uint32_t RESERVED5[823];
+
+ union {
+ __IO uint32_t USBClkCtrl; /* USB Clock Control Registers */
+ __IO uint32_t OTGClkCtrl;
+ } ;
+ union {
+ __I uint32_t USBClkSt;
+ __I uint32_t OTGClkSt;
+ };
+} USB_TypeDef;
+
+/*------------- Ethernet Media Access Controller (EMAC) ----------------------*/
+typedef struct {
+ __IO uint32_t MAC1; /* MAC Registers */
+ __IO uint32_t MAC2;
+ __IO uint32_t IPGT;
+ __IO uint32_t IPGR;
+ __IO uint32_t CLRT;
+ __IO uint32_t MAXF;
+ __IO uint32_t SUPP;
+ __IO uint32_t TEST;
+ __IO uint32_t MCFG;
+ __IO uint32_t MCMD;
+ __IO uint32_t MADR;
+ __O uint32_t MWTD;
+ __I uint32_t MRDD;
+ __I uint32_t MIND;
+ uint32_t RESERVED0[2];
+ __IO uint32_t SA0;
+ __IO uint32_t SA1;
+ __IO uint32_t SA2;
+ uint32_t RESERVED1[45];
+ __IO uint32_t Command; /* Control Registers */
+ __I uint32_t Status;
+ __IO uint32_t RxDescriptor;
+ __IO uint32_t RxStatus;
+ __IO uint32_t RxDescriptorNumber;
+ __I uint32_t RxProduceIndex;
+ __IO uint32_t RxConsumeIndex;
+ __IO uint32_t TxDescriptor;
+ __IO uint32_t TxStatus;
+ __IO uint32_t TxDescriptorNumber;
+ __IO uint32_t TxProduceIndex;
+ __I uint32_t TxConsumeIndex;
+ uint32_t RESERVED2[10];
+ __I uint32_t TSV0;
+ __I uint32_t TSV1;
+ __I uint32_t RSV;
+ uint32_t RESERVED3[3];
+ __IO uint32_t FlowControlCounter;
+ __I uint32_t FlowControlStatus;
+ uint32_t RESERVED4[34];
+ __IO uint32_t RxFilterCtrl; /* Rx Filter Registers */
+ __IO uint32_t RxFilterWoLStatus;
+ __IO uint32_t RxFilterWoLClear;
+ uint32_t RESERVED5;
+ __IO uint32_t HashFilterL;
+ __IO uint32_t HashFilterH;
+ uint32_t RESERVED6[882];
+ __I uint32_t IntStatus; /* Module Control Registers */
+ __IO uint32_t IntEnable;
+ __O uint32_t IntClear;
+ __O uint32_t IntSet;
+ uint32_t RESERVED7;
+ __IO uint32_t PowerDown;
+ uint32_t RESERVED8;
+ __IO uint32_t Module_ID;
+} EMAC_TypeDef;
+
+/******************************************************************************/
+/* Peripheral memory map */
+/******************************************************************************/
+/* Base addresses */
+#define FLASH_BASE (0x00000000UL)
+#define RAM_BASE (0x10000000UL)
+#define GPIO_BASE (0x2009C000UL)
+#define APB0_BASE (0x40000000UL)
+#define APB1_BASE (0x40080000UL)
+#define AHB_BASE (0x50000000UL)
+#define CM3_BASE (0xE0000000UL)
+
+/* APB0 peripherals */
+#define WDT_BASE (APB0_BASE + 0x00000)
+#define TIM0_BASE (APB0_BASE + 0x04000)
+#define TIM1_BASE (APB0_BASE + 0x08000)
+#define UART0_BASE (APB0_BASE + 0x0C000)
+#define UART1_BASE (APB0_BASE + 0x10000)
+#define PWM1_BASE (APB0_BASE + 0x18000)
+#define I2C0_BASE (APB0_BASE + 0x1C000)
+#define SPI_BASE (APB0_BASE + 0x20000)
+#define RTC_BASE (APB0_BASE + 0x24000)
+#define GPIOINT_BASE (APB0_BASE + 0x28080)
+#define PINCON_BASE (APB0_BASE + 0x2C000)
+#define SSP1_BASE (APB0_BASE + 0x30000)
+#define ADC_BASE (APB0_BASE + 0x34000)
+#define CANAF_RAM_BASE (APB0_BASE + 0x38000)
+#define CANAF_BASE (APB0_BASE + 0x3C000)
+#define CANCR_BASE (APB0_BASE + 0x40000)
+#define CAN1_BASE (APB0_BASE + 0x44000)
+#define CAN2_BASE (APB0_BASE + 0x48000)
+#define I2C1_BASE (APB0_BASE + 0x5C000)
+
+/* APB1 peripherals */
+#define SSP0_BASE (APB1_BASE + 0x08000)
+#define DAC_BASE (APB1_BASE + 0x0C000)
+#define TIM2_BASE (APB1_BASE + 0x10000)
+#define TIM3_BASE (APB1_BASE + 0x14000)
+#define UART2_BASE (APB1_BASE + 0x18000)
+#define UART3_BASE (APB1_BASE + 0x1C000)
+#define I2C2_BASE (APB1_BASE + 0x20000)
+#define I2S_BASE (APB1_BASE + 0x28000)
+#define RIT_BASE (APB1_BASE + 0x30000)
+#define MCPWM_BASE (APB1_BASE + 0x38000)
+#define QEI_BASE (APB1_BASE + 0x3C000)
+#define SC_BASE (APB1_BASE + 0x7C000)
+
+/* AHB peripherals */
+#define EMAC_BASE (AHB_BASE + 0x00000)
+#define GPDMA_BASE (AHB_BASE + 0x04000)
+#define GPDMACH0_BASE (AHB_BASE + 0x04100)
+#define GPDMACH1_BASE (AHB_BASE + 0x04120)
+#define GPDMACH2_BASE (AHB_BASE + 0x04140)
+#define GPDMACH3_BASE (AHB_BASE + 0x04160)
+#define GPDMACH4_BASE (AHB_BASE + 0x04180)
+#define GPDMACH5_BASE (AHB_BASE + 0x041A0)
+#define GPDMACH6_BASE (AHB_BASE + 0x041C0)
+#define GPDMACH7_BASE (AHB_BASE + 0x041E0)
+#define USB_BASE (AHB_BASE + 0x0C000)
+
+/* GPIOs */
+#define GPIO0_BASE (GPIO_BASE + 0x00000)
+#define GPIO1_BASE (GPIO_BASE + 0x00020)
+#define GPIO2_BASE (GPIO_BASE + 0x00040)
+#define GPIO3_BASE (GPIO_BASE + 0x00060)
+#define GPIO4_BASE (GPIO_BASE + 0x00080)
+
+
+/******************************************************************************/
+/* Peripheral declaration */
+/******************************************************************************/
+#define SC (( SC_TypeDef *) SC_BASE)
+#define GPIO0 (( GPIO_TypeDef *) GPIO0_BASE)
+#define GPIO1 (( GPIO_TypeDef *) GPIO1_BASE)
+#define GPIO2 (( GPIO_TypeDef *) GPIO2_BASE)
+#define GPIO3 (( GPIO_TypeDef *) GPIO3_BASE)
+#define GPIO4 (( GPIO_TypeDef *) GPIO4_BASE)
+#define WDT (( WDT_TypeDef *) WDT_BASE)
+#define TIM0 (( TIM_TypeDef *) TIM0_BASE)
+#define TIM1 (( TIM_TypeDef *) TIM1_BASE)
+#define TIM2 (( TIM_TypeDef *) TIM2_BASE)
+#define TIM3 (( TIM_TypeDef *) TIM3_BASE)
+#define RIT (( RIT_TypeDef *) RIT_BASE)
+#define UART0 (( UART_TypeDef *) UART0_BASE)
+#define UART1 (( UART1_TypeDef *) UART1_BASE)
+#define UART2 (( UART_TypeDef *) UART2_BASE)
+#define UART3 (( UART_TypeDef *) UART3_BASE)
+#define PWM1 (( PWM_TypeDef *) PWM1_BASE)
+#define I2C0 (( I2C_TypeDef *) I2C0_BASE)
+#define I2C1 (( I2C_TypeDef *) I2C1_BASE)
+#define I2C2 (( I2C_TypeDef *) I2C2_BASE)
+#define I2S (( I2S_TypeDef *) I2S_BASE)
+#define SPI (( SPI_TypeDef *) SPI_BASE)
+#define RTC (( RTC_TypeDef *) RTC_BASE)
+#define GPIOINT (( GPIOINT_TypeDef *) GPIOINT_BASE)
+#define PINCON (( PINCON_TypeDef *) PINCON_BASE)
+#define SSP0 (( SSP_TypeDef *) SSP0_BASE)
+#define SSP1 (( SSP_TypeDef *) SSP1_BASE)
+#define ADC (( ADC_TypeDef *) ADC_BASE)
+#define DAC (( DAC_TypeDef *) DAC_BASE)
+#define CANAF_RAM ((CANAF_RAM_TypeDef *) CANAF_RAM_BASE)
+#define CANAF (( CANAF_TypeDef *) CANAF_BASE)
+#define CANCR (( CANCR_TypeDef *) CANCR_BASE)
+#define CAN1 (( CAN_TypeDef *) CAN1_BASE)
+#define CAN2 (( CAN_TypeDef *) CAN2_BASE)
+#define MCPWM (( MCPWM_TypeDef *) MCPWM_BASE)
+#define QEI (( QEI_TypeDef *) QEI_BASE)
+#define EMAC (( EMAC_TypeDef *) EMAC_BASE)
+#define GPDMA (( GPDMA_TypeDef *) GPDMA_BASE)
+#define GPDMACH0 (( GPDMACH_TypeDef *) GPDMACH0_BASE)
+#define GPDMACH1 (( GPDMACH_TypeDef *) GPDMACH1_BASE)
+#define GPDMACH2 (( GPDMACH_TypeDef *) GPDMACH2_BASE)
+#define GPDMACH3 (( GPDMACH_TypeDef *) GPDMACH3_BASE)
+#define GPDMACH4 (( GPDMACH_TypeDef *) GPDMACH4_BASE)
+#define GPDMACH5 (( GPDMACH_TypeDef *) GPDMACH5_BASE)
+#define GPDMACH6 (( GPDMACH_TypeDef *) GPDMACH6_BASE)
+#define GPDMACH7 (( GPDMACH_TypeDef *) GPDMACH7_BASE)
+#define USB (( USB_TypeDef *) USB_BASE)
+
+#endif // __LPC17xx_H__
+
+
+#endif
diff --git a/gyro_board/src/usb/LPCUSB/USB_CDC.c b/gyro_board/src/usb/LPCUSB/USB_CDC.c
new file mode 100644
index 0000000..47d28db
--- /dev/null
+++ b/gyro_board/src/usb/LPCUSB/USB_CDC.c
@@ -0,0 +1,454 @@
+/*
+ LPCUSB, an USB device driver for LPC microcontrollers
+ Copyright (C) 2006 Bertrik Sikken (bertrik@sikken.nl)
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+/*
+ Minimal implementation of a USB serial port, using the CDC class.
+ This example application simply echoes everything it receives right back
+ to the host.
+
+ Windows:
+ Extract the usbser.sys file from .cab file in C:\WINDOWS\Driver Cache\i386
+ and store it somewhere (C:\temp is a good place) along with the usbser.inf
+ file. Then plug in the LPC176x and direct windows to the usbser driver.
+ Windows then creates an extra COMx port that you can open in a terminal
+ program, like hyperterminal. [Note for FreeRTOS users - the required .inf
+ file is included in the project directory.]
+
+ Linux:
+ The device should be recognised automatically by the cdc_acm driver,
+ which creates a /dev/ttyACMx device file that acts just like a regular
+ serial port.
+
+*/
+
+#include "FreeRTOS.h"
+#include "queue.h"
+#include "task.h"
+
+#include <stdio.h>
+#include <string.h>
+
+#include "usbapi.h"
+#include "usbdebug.h"
+#include "usbstruct.h"
+
+#include "LPC17xx.h"
+
+#define usbMAX_SEND_BLOCK ( 20 / portTICK_RATE_MS )
+#define usbRXBUFFER_LEN ( 80 )
+#define usbTXBUFFER_LEN ( 600 )
+
+#define INCREMENT_ECHO_BY 0
+#define BAUD_RATE 115200
+
+#define INT_IN_EP 0x81
+#define BULK_OUT_EP 0x05
+#define BULK_IN_EP 0x82
+
+#define MAX_PACKET_SIZE 64
+
+#define LE_WORD(x) ((x)&0xFF),((x)>>8)
+
+// CDC definitions
+#define CS_INTERFACE 0x24
+#define CS_ENDPOINT 0x25
+
+#define SET_LINE_CODING 0x20
+#define GET_LINE_CODING 0x21
+#define SET_CONTROL_LINE_STATE 0x22
+
+// data structure for GET_LINE_CODING / SET_LINE_CODING class requests
+typedef struct {
+ unsigned long dwDTERate;
+ unsigned char bCharFormat;
+ unsigned char bParityType;
+ unsigned char bDataBits;
+} TLineCoding;
+
+static TLineCoding LineCoding = {115200, 0, 0, 8};
+static unsigned char abBulkBuf[64];
+static unsigned char abClassReqData[8];
+
+static xQueueHandle xRxedChars = NULL, xCharsForTx = NULL;
+
+// forward declaration of interrupt handler
+void USBIntHandler(void);
+
+static const unsigned char abDescriptors[] = {
+
+// device descriptor
+ 0x12,
+ DESC_DEVICE,
+ LE_WORD(0x0101), // bcdUSB
+ 0x02, // bDeviceClass
+ 0x00, // bDeviceSubClass
+ 0x00, // bDeviceProtocol
+ MAX_PACKET_SIZE0, // bMaxPacketSize
+ LE_WORD(0xFFFF), // idVendor
+ LE_WORD(0x0005), // idProduct
+ LE_WORD(0x0100), // bcdDevice
+ 0x01, // iManufacturer
+ 0x02, // iProduct
+ 0x03, // iSerialNumber
+ 0x01, // bNumConfigurations
+
+// configuration descriptor
+ 0x09,
+ DESC_CONFIGURATION,
+ LE_WORD(67), // wTotalLength
+ 0x02, // bNumInterfaces
+ 0x01, // bConfigurationValue
+ 0x00, // iConfiguration
+ 0xC0, // bmAttributes
+ 0x32, // bMaxPower
+// control class interface
+ 0x09,
+ DESC_INTERFACE,
+ 0x00, // bInterfaceNumber
+ 0x00, // bAlternateSetting
+ 0x01, // bNumEndPoints
+ 0x02, // bInterfaceClass
+ 0x02, // bInterfaceSubClass
+ 0x01, // bInterfaceProtocol, linux requires value of 1 for the cdc_acm module
+ 0x00, // iInterface
+// header functional descriptor
+ 0x05,
+ CS_INTERFACE,
+ 0x00,
+ LE_WORD(0x0110),
+// call management functional descriptor
+ 0x05,
+ CS_INTERFACE,
+ 0x01,
+ 0x01, // bmCapabilities = device handles call management
+ 0x01, // bDataInterface
+// ACM functional descriptor
+ 0x04,
+ CS_INTERFACE,
+ 0x02,
+ 0x02, // bmCapabilities
+// union functional descriptor
+ 0x05,
+ CS_INTERFACE,
+ 0x06,
+ 0x00, // bMasterInterface
+ 0x01, // bSlaveInterface0
+// notification EP
+ 0x07,
+ DESC_ENDPOINT,
+ INT_IN_EP, // bEndpointAddress
+ 0x03, // bmAttributes = intr
+ LE_WORD(8), // wMaxPacketSize
+ 0x0A, // bInterval
+// data class interface descriptor
+ 0x09,
+ DESC_INTERFACE,
+ 0x01, // bInterfaceNumber
+ 0x00, // bAlternateSetting
+ 0x02, // bNumEndPoints
+ 0x0A, // bInterfaceClass = data
+ 0x00, // bInterfaceSubClass
+ 0x00, // bInterfaceProtocol
+ 0x00, // iInterface
+// data EP OUT
+ 0x07,
+ DESC_ENDPOINT,
+ BULK_OUT_EP, // bEndpointAddress
+ 0x02, // bmAttributes = bulk
+ LE_WORD(MAX_PACKET_SIZE), // wMaxPacketSize
+ 0x00, // bInterval
+// data EP in
+ 0x07,
+ DESC_ENDPOINT,
+ BULK_IN_EP, // bEndpointAddress
+ 0x02, // bmAttributes = bulk
+ LE_WORD(MAX_PACKET_SIZE), // wMaxPacketSize
+ 0x00, // bInterval
+
+ // string descriptors
+ 0x04,
+ DESC_STRING,
+ LE_WORD(0x0409),
+
+ 0x0E,
+ DESC_STRING,
+ 'L', 0, 'P', 0, 'C', 0, 'U', 0, 'S', 0, 'B', 0,
+
+ 0x14,
+ DESC_STRING,
+ 'U', 0, 'S', 0, 'B', 0, 'S', 0, 'e', 0, 'r', 0, 'i', 0, 'a', 0, 'l', 0,
+
+ 0x12,
+ DESC_STRING,
+ 'A', 0, 'B', 0, 'S', 0, 'M', 0, 'o', 0, 't', 0, 'o', 0, 'r', 0,
+
+// terminating zero
+ 0
+};
+
+
+/**
+ Local function to handle incoming bulk data
+
+ @param [in] bEP
+ @param [in] bEPStatus
+ */
+static void BulkOut(unsigned char bEP, unsigned char bEPStatus)
+{
+ int i, iLen;
+ long lHigherPriorityTaskWoken = pdFALSE;
+
+ (void) bEPStatus;
+
+ // get data from USB into intermediate buffer
+ iLen = USBHwEPRead(bEP, abBulkBuf, sizeof(abBulkBuf));
+ for (i = 0; i < iLen; i++) {
+ // put into queue
+ xQueueSendFromISR(xRxedChars, &(abBulkBuf[ i ]), &lHigherPriorityTaskWoken);
+ }
+
+ portEND_SWITCHING_ISR(lHigherPriorityTaskWoken);
+}
+
+
+/**
+ Local function to handle outgoing bulk data
+
+ @param [in] bEP
+ @param [in] bEPStatus
+ */
+static void BulkIn(unsigned char bEP, unsigned char bEPStatus)
+{
+ int i, iLen;
+ long lHigherPriorityTaskWoken = pdFALSE;
+
+ (void) bEPStatus;
+
+ if (uxQueueMessagesWaitingFromISR(xCharsForTx) == 0) {
+ // no more data, disable further NAK interrupts until next USB frame
+ USBHwNakIntEnable(0);
+ return;
+ }
+
+ // get bytes from transmit FIFO into intermediate buffer
+ for (i = 0; i < MAX_PACKET_SIZE; i++) {
+ if (xQueueReceiveFromISR(xCharsForTx, (&abBulkBuf[i]), &lHigherPriorityTaskWoken) != pdPASS) {
+ break;
+ }
+ }
+ iLen = i;
+
+ // send over USB
+ if (iLen > 0) {
+ USBHwEPWrite(bEP, abBulkBuf, iLen);
+ }
+
+ portEND_SWITCHING_ISR(lHigherPriorityTaskWoken);
+}
+
+
+/**
+ Local function to handle the USB-CDC class requests
+
+ @param [in] pSetup
+ @param [out] piLen
+ @param [out] ppbData
+ */
+static BOOL HandleClassRequest(TSetupPacket *pSetup, int *piLen, unsigned char **ppbData)
+{
+ switch (pSetup->bRequest) {
+
+ // set line coding
+ case SET_LINE_CODING:
+ DBG("SET_LINE_CODING\n");
+ memcpy((unsigned char *)&LineCoding, *ppbData, 7);
+ *piLen = 7;
+ DBG("dwDTERate=%u, bCharFormat=%u, bParityType=%u, bDataBits=%u\n",
+ LineCoding.dwDTERate,
+ LineCoding.bCharFormat,
+ LineCoding.bParityType,
+ LineCoding.bDataBits);
+ break;
+
+ // get line coding
+ case GET_LINE_CODING:
+ DBG("GET_LINE_CODING\n");
+ *ppbData = (unsigned char *) & LineCoding;
+ *piLen = 7;
+ break;
+
+ // set control line state
+ case SET_CONTROL_LINE_STATE:
+ // bit0 = DTR, bit = RTS
+ DBG("SET_CONTROL_LINE_STATE %X\n", pSetup->wValue);
+ break;
+
+ default:
+ return FALSE;
+ }
+ return TRUE;
+}
+
+
+/**
+ Writes one character to VCOM port
+
+ @param [in] c character to write
+ @returns character written, or EOF if character could not be written
+ */
+int VCOM_putchar(int c)
+{
+ char cc = (char) c;
+
+ if (xQueueSend(xCharsForTx, &cc, usbMAX_SEND_BLOCK) == pdPASS) {
+ return c;
+ } else {
+ return EOF;
+ }
+}
+
+
+/**
+ Reads one character from VCOM port
+
+ @returns character read, or EOF if character could not be read
+ */
+int VCOM_getchar(void)
+{
+ unsigned char c;
+
+ /* Block the task until a character is available. */
+ xQueueReceive(xRxedChars, &c, portMAX_DELAY);
+ return c;
+}
+
+
+/**
+ Interrupt handler
+
+ Simply calls the USB ISR
+ */
+void USB_IRQHandler(void)
+{
+ USBHwISR();
+}
+
+
+static void USBFrameHandler(unsigned short wFrame)
+{
+ (void) wFrame;
+
+ if (uxQueueMessagesWaitingFromISR(xCharsForTx) > 0) {
+ // data available, enable NAK interrupt on bulk in
+ USBHwNakIntEnable(INACK_BI);
+ }
+}
+
+unsigned long CPUcpsie(void)
+{
+ unsigned long ulRet;
+
+ //
+ // Read PRIMASK and enable interrupts.
+ //
+ __asm(" mrs %0, PRIMASK\n"
+ " cpsie i\n"
+ " bx lr\n"
+ : "=r"(ulRet));
+
+ //
+ // The return is handled in the inline assembly, but the compiler will
+ // still complain if there is not an explicit return here (despite the fact
+ // that this does not result in any code being produced because of the
+ // naked attribute).
+ //
+ return(ulRet);
+}
+
+void vUSBTask(void *pvParameters)
+{
+ //int c;
+ portTickType xLastFlashTime;
+
+ /* Just to prevent compiler warnings about the unused parameter. */
+ (void) pvParameters;
+ DBG("Initialising USB stack\n");
+
+ xRxedChars = xQueueCreate(usbRXBUFFER_LEN, sizeof(char));
+ xCharsForTx = xQueueCreate(usbTXBUFFER_LEN, sizeof(char));
+
+ if ((xRxedChars == NULL) || (xCharsForTx == NULL)) {
+ /* Not enough heap available to create the buffer queues, can't do
+ anything so just delete ourselves. */
+ vTaskDelete(NULL);
+ }
+
+
+ // initialise stack
+ USBInit();
+
+ // register descriptors
+ USBRegisterDescriptors(abDescriptors);
+
+ // register class request handler
+ USBRegisterRequestHandler(REQTYPE_TYPE_CLASS, HandleClassRequest, abClassReqData);
+
+ // register endpoint handlers
+ USBHwRegisterEPIntHandler(INT_IN_EP, NULL);
+ USBHwRegisterEPIntHandler(BULK_IN_EP, BulkIn);
+ USBHwRegisterEPIntHandler(BULK_OUT_EP, BulkOut);
+
+ // register frame handler
+ USBHwRegisterFrameHandler(USBFrameHandler);
+
+ // enable bulk-in interrupts on NAKs
+ USBHwNakIntEnable(INACK_BI);
+
+ DBG("Starting USB communication\n");
+
+ NVIC_SetPriority(USB_IRQn, configUSB_INTERRUPT_PRIORITY);
+ NVIC_EnableIRQ(USB_IRQn);
+
+ // connect to bus
+
+ DBG("Connecting to USB bus\n");
+ USBHwConnect(TRUE);
+
+ xLastFlashTime = xTaskGetTickCount();
+
+ // echo any character received (do USB stuff in interrupt)
+ for (;;) {
+ // c = VCOM_getchar();
+ // if (c != EOF) {
+ // // Echo character back with INCREMENT_ECHO_BY offset, so for example if
+ // // INCREMENT_ECHO_BY is 1 and 'A' is received, 'B' will be echoed back.
+ // VCOM_putchar(c + INCREMENT_ECHO_BY);
+ // }
+ vTaskDelayUntil(&xLastFlashTime, 1000 / portTICK_RATE_MS);
+ }
+}
+
diff --git a/gyro_board/src/usb/LPCUSB/USB_SENSOR_STREAM.c b/gyro_board/src/usb/LPCUSB/USB_SENSOR_STREAM.c
new file mode 100644
index 0000000..af1eede
--- /dev/null
+++ b/gyro_board/src/usb/LPCUSB/USB_SENSOR_STREAM.c
@@ -0,0 +1,355 @@
+/*
+ LPCUSB, an USB device driver for LPC microcontrollers
+ Copyright (C) 2006 Bertrik Sikken (bertrik@sikken.nl)
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include "FreeRTOS.h"
+#include "queue.h"
+#include "task.h"
+
+#include <stdio.h>
+#include <string.h>
+
+#include "usbapi.h"
+#include "usbdebug.h"
+#include "usbstruct.h"
+
+#include "LPC17xx.h"
+
+#define usbMAX_SEND_BLOCK ( 20 / portTICK_RATE_MS )
+#define usbRXBUFFER_LEN ( 80 )
+#define usbTXBUFFER_LEN ( 600 )
+
+#define INT_IN_EP 0x81 //read manual for picking these...
+#define INT_OUT_EP 0x04
+#define BULK_IN_EP 0x82
+#define BULK_OUT_EP 0x05
+
+#define MAX_PACKET_SIZE 64
+
+#define LE_WORD(x) ((x)&0xFF),((x)>>8)
+
+static xQueueHandle xRxedChars = NULL, xCharsForTx = NULL;
+
+static const unsigned char abDescriptors[] = {
+
+// device descriptor
+ 0x12,
+ DESC_DEVICE,
+ LE_WORD(0x0101), // bcdUSB
+ 0xFF, // bDeviceClass
+ 0x00, // bDeviceSubClass
+ 0x00, // bDeviceProtocol
+ MAX_PACKET_SIZE0, // bMaxPacketSize
+ LE_WORD(0x1424), // idVendor
+ LE_WORD(0xd243), // idProduct
+ LE_WORD(0x0153), // bcdDevice
+ 0x03, // iManufacturer
+ 0x36, // iProduct
+ 0x33, // iSerialNumber
+ 0x01, // bNumConfigurations
+
+// configuration descriptor
+ 0x09,
+ DESC_CONFIGURATION,
+ LE_WORD(67), // wTotalLength
+ 0x01, // bNumInterfaces
+ 0x01, // bConfigurationValue
+ 0x00, // iConfiguration
+ 0xC0, // bmAttributes
+ 0x32, // bMaxPower
+// data class interface descriptor
+ 0x09,
+ DESC_INTERFACE,
+ 0x00, // bInterfaceNumber
+ 0x00, // bAlternateSetting
+ 0x04, // bNumEndPoints
+ 0x0A, // bInterfaceClass = data
+ 0x00, // bInterfaceSubClass
+ 0x00, // bInterfaceProtocol
+ 0x00, // iInterface
+// debug EP OUT
+ 0x07,
+ DESC_ENDPOINT,
+ BULK_OUT_EP, // bEndpointAddress
+ 0x02, // bmAttributes = bulk
+ LE_WORD(MAX_PACKET_SIZE), // wMaxPacketSize
+ 0x00, // bInterval
+// debug EP in
+ 0x07,
+ DESC_ENDPOINT,
+ BULK_IN_EP, // bEndpointAddress
+ 0x02, // bmAttributes = bulk
+ LE_WORD(MAX_PACKET_SIZE), // wMaxPacketSize
+ 0x00, // bInterval
+// data EP OUT
+ 0x07,
+ DESC_ENDPOINT,
+ INT_OUT_EP, // bEndpointAddress
+ 0x03, // bmAttributes = intr
+ LE_WORD(MAX_PACKET_SIZE), // wMaxPacketSize
+ 0x01, // bInterval
+// data EP in
+ 0x07,
+ DESC_ENDPOINT,
+ INT_IN_EP, // bEndpointAddress
+ 0x03, // bmAttributes = intr
+ LE_WORD(MAX_PACKET_SIZE), // wMaxPacketSize
+ 0x01, // bInterval
+
+ // string descriptors
+ 0x04,
+ DESC_STRING,
+ LE_WORD(0x0409),
+
+ 0x0E,
+ DESC_STRING,
+ 'L', 0, 'P', 0, 'C', 0, 'U', 0, 'S', 0, 'B', 0,
+
+ 0x14,
+ DESC_STRING,
+ 'U', 0, 'S', 0, 'B', 0, 'S', 0, 'e', 0, 'r', 0, 'i', 0, 'a', 0, 'l', 0,
+
+ 0x12,
+ DESC_STRING,
+ 'A', 0, 'B', 0, 'S', 0, 'M', 0, 'o', 0, 't', 0, 'o', 0, 'r', 0,
+
+// terminating zero
+ 0
+};
+
+
+/**
+ * Local function to handle incoming bulk data
+ *
+ * @param [in] bEP
+ * @param [in] bEPStatus
+ */
+static void DebugOut(unsigned char bEP, unsigned char bEPStatus) {
+ int i, iLen;
+ long lHigherPriorityTaskWoken = pdFALSE;
+ unsigned char abBulkBuf[64];
+
+ (void) bEPStatus;
+
+ // get data from USB into intermediate buffer
+ iLen = USBHwEPRead(bEP, abBulkBuf, sizeof(abBulkBuf));
+ for (i = 0; i < iLen; i++) {
+ // put into queue
+ xQueueSendFromISR(xRxedChars, &(abBulkBuf[ i ]), &lHigherPriorityTaskWoken);
+ }
+
+ portEND_SWITCHING_ISR(lHigherPriorityTaskWoken);
+}
+
+
+/**
+ * Local function to handle outgoing bulk data
+ *
+ * @param [in] bEP
+ * @param [in] bEPStatus
+ */
+static void DebugIn(unsigned char bEP, unsigned char bEPStatus) {
+ int i, iLen;
+ long lHigherPriorityTaskWoken = pdFALSE;
+ unsigned char abBulkBuf[64];
+
+ (void) bEPStatus;
+
+ if (uxQueueMessagesWaitingFromISR(xCharsForTx) == 0) {
+ // no more data, disable further NAK interrupts until next USB frame
+ USBHwNakIntEnable(INACK_II);
+ return;
+ }
+
+ // get bytes from transmit FIFO into intermediate buffer
+ for (i = 0; i < MAX_PACKET_SIZE; i++) {
+ if (xQueueReceiveFromISR(xCharsForTx, (&abBulkBuf[i]),
+ &lHigherPriorityTaskWoken) != pdPASS) {
+ break;
+ }
+ }
+ iLen = i;
+
+ // send over USB
+ if (iLen > 0) {
+ USBHwEPWrite(bEP, abBulkBuf, iLen);
+ }
+
+ portEND_SWITCHING_ISR(lHigherPriorityTaskWoken);
+}
+
+extern int64_t gyro_angle;
+static unsigned char abDataBuf[64];
+int VCOM_putcharFromISR(int c, long *woken);
+static void DataOut(unsigned char bEP, unsigned char bEPStatus) {
+ int iLen;
+ long lHigherPriorityTaskWoken = pdFALSE;
+ char *a = "hello\n";
+ while(*a){
+ VCOM_putcharFromISR(*a,&lHigherPriorityTaskWoken);
+ a ++;
+ }
+ iLen = USBHwEPRead(bEP, abDataBuf, sizeof(abDataBuf));
+ portEND_SWITCHING_ISR(lHigherPriorityTaskWoken);
+}
+static void DataIn(unsigned char bEP, unsigned char bEPStatus) {
+ long lHigherPriorityTaskWoken = pdFALSE;
+ unsigned char buff[16];
+ memcpy(buff, &gyro_angle, sizeof(gyro_angle));
+ USBHwEPWrite(bEP, buff, sizeof(gyro_angle));
+ portEND_SWITCHING_ISR(lHigherPriorityTaskWoken);
+}
+
+/**
+ * Writes one character to VCOM port
+ *
+ * @param [in] c character to write
+ * @returns character written, or EOF if character could not be written
+ */
+int VCOM_putcharFromISR(int c, long *lHigherPriorityTaskWoken) {
+ char cc = (char) c;
+
+ if (xQueueSendFromISR(xCharsForTx, &cc,
+ lHigherPriorityTaskWoken) == pdPASS) {
+ return c;
+ } else {
+ return EOF;
+ }
+}
+
+int VCOM_putchar(int c) {
+ char cc = (char) c;
+
+ // Don't block if not connected to USB.
+ if (xQueueSend(xCharsForTx, &cc,
+ USBIsConnected() ? usbMAX_SEND_BLOCK : 0) == pdPASS) {
+ return c;
+ } else {
+ return EOF;
+ }
+}
+
+
+/**
+ * Reads one character from VCOM port
+ *
+ * @returns character read, or EOF if character could not be read
+ */
+int VCOM_getchar(void) {
+ unsigned char c;
+
+ /* Block the task until a character is available. */
+ if(xQueueReceive(xRxedChars, &c, 0) == pdTRUE){ //portMAX_DELAY);
+ return c;
+ }
+ return -1;
+}
+
+
+/**
+ * Interrupt handler
+ *
+ * Simply calls the USB ISR
+ */
+void USB_IRQHandler(void) {
+ USBHwISR();
+}
+
+
+static void USBFrameHandler(unsigned short wFrame) {
+ (void) wFrame;
+
+ if (uxQueueMessagesWaitingFromISR(xCharsForTx) > 0) {
+ // data available, enable NAK interrupt on bulk in
+ USBHwNakIntEnable(INACK_BI);
+ }
+}
+
+void vUSBTask(void *pvParameters) {
+ portTickType xLastFlashTime;
+
+ /* Just to prevent compiler warnings about the unused parameter. */
+ (void) pvParameters;
+ DBG("Initialising USB stack\n");
+
+ xRxedChars = xQueueCreate(usbRXBUFFER_LEN, sizeof(char));
+ xCharsForTx = xQueueCreate(usbTXBUFFER_LEN, sizeof(char));
+
+ if ((xRxedChars == NULL) || (xCharsForTx == NULL)) {
+ /* Not enough heap available to create the buffer queues, can't do
+ anything so just delete ourselves. */
+ vTaskDelete(NULL);
+ }
+
+ // initialise stack
+ USBInit();
+
+ // register descriptors
+ USBRegisterDescriptors(abDescriptors);
+
+ // register class request handler
+ //USBRegisterRequestHandler(REQTYPE_TYPE_CLASS,
+ // HandleClassRequest, abClassReqData);
+
+ // register endpoint handlers
+ USBHwRegisterEPIntHandler(INT_IN_EP, DataIn);
+ USBHwRegisterEPIntHandler(INT_OUT_EP, DataOut);
+ USBHwRegisterEPIntHandler(BULK_IN_EP, DebugIn);
+ USBHwRegisterEPIntHandler(BULK_OUT_EP, DebugOut);
+
+ // register frame handler
+ USBHwRegisterFrameHandler(USBFrameHandler);
+
+ // enable bulk-in interrupts on NAKs
+ USBHwNakIntEnable(INACK_BI);
+
+ DBG("Starting USB communication\n");
+
+ NVIC_SetPriority(USB_IRQn, configUSB_INTERRUPT_PRIORITY);
+ NVIC_EnableIRQ(USB_IRQn);
+
+ // connect to bus
+
+ DBG("Connecting to USB bus\n");
+ USBHwConnect(TRUE);
+
+ xLastFlashTime = xTaskGetTickCount();
+
+ vTaskDelayUntil(&xLastFlashTime, 1000 / portTICK_RATE_MS * 100);
+
+ //USBHwAllowConnect();
+ // echo any character received (do USB stuff in interrupt)
+ for (;;) {
+ // c = VCOM_getchar();
+ // if (c != EOF) {
+ // // Echo character back with INCREMENT_ECHO_BY offset, so for example if
+ // // INCREMENT_ECHO_BY is 1 and 'A' is received, 'B' will be echoed back.
+ // VCOM_putchar(c + INCREMENT_ECHO_BY);
+ // }
+ vTaskDelayUntil(&xLastFlashTime, 1000 / portTICK_RATE_MS);
+ }
+}
+
diff --git a/gyro_board/src/usb/LPCUSB/type.h b/gyro_board/src/usb/LPCUSB/type.h
new file mode 100644
index 0000000..0727519
--- /dev/null
+++ b/gyro_board/src/usb/LPCUSB/type.h
@@ -0,0 +1,38 @@
+/*****************************************************************************
+ * type.h: Type definition Header file for NXP LPC17xx Family
+ * Microprocessors
+ *
+ * Copyright(C) 2008, NXP Semiconductor
+ * All rights reserved.
+ *
+ * History
+ * 2008.08.21 ver 1.00 Prelimnary version, first Release
+ *
+******************************************************************************/
+#ifndef __TYPE_H__
+#define __TYPE_H__
+
+#ifndef NULL
+#define NULL ((void *)0)
+#endif
+
+#ifndef FALSE
+#define FALSE (0)
+#endif
+
+#ifndef TRUE
+#define TRUE (1)
+#endif
+
+typedef unsigned char BYTE;
+typedef unsigned short WORD;
+typedef unsigned long DWORD;
+typedef unsigned int BOOL;
+
+typedef enum {RESET = 0, SET = !RESET} FlagStatus, ITStatus;
+typedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState;
+
+/* Pointer to Function returning Void (any number of parameters) */
+typedef void (*PFV)();
+
+#endif /* __TYPE_H__ */
diff --git a/gyro_board/src/usb/LPCUSB/usbapi.h b/gyro_board/src/usb/LPCUSB/usbapi.h
new file mode 100644
index 0000000..e1fade8
--- /dev/null
+++ b/gyro_board/src/usb/LPCUSB/usbapi.h
@@ -0,0 +1,125 @@
+/*
+ LPCUSB, an USB device driver for LPC microcontrollers
+ Copyright (C) 2006 Bertrik Sikken (bertrik@sikken.nl)
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+/**
+ @file
+*/
+
+#include "usbstruct.h" // for TSetupPacket
+
+/*************************************************************************
+ USB configuration
+**************************************************************************/
+
+#define MAX_PACKET_SIZE0 64 /**< maximum packet size for EP 0 */
+
+/*************************************************************************
+ USB hardware interface
+**************************************************************************/
+
+// endpoint status sent through callback
+#define EP_STATUS_DATA (1<<0) /**< EP has data */
+#define EP_STATUS_STALLED (1<<1) /**< EP is stalled */
+#define EP_STATUS_SETUP (1<<2) /**< EP received setup packet */
+#define EP_STATUS_ERROR (1<<3) /**< EP data was overwritten by setup packet */
+#define EP_STATUS_NACKED (1<<4) /**< EP sent NAK */
+
+// device status sent through callback
+#define DEV_STATUS_CONNECT (1<<0) /**< device just got connected */
+#define DEV_STATUS_SUSPEND (1<<2) /**< device entered suspend state */
+#define DEV_STATUS_RESET (1<<4) /**< device just got reset */
+
+// interrupt bits for NACK events in USBHwNakIntEnable
+// (these bits conveniently coincide with the LPC176x USB controller bit)
+#define INACK_CI (1<<1) /**< interrupt on NACK for control in */
+#define INACK_CO (1<<2) /**< interrupt on NACK for control out */
+#define INACK_II (1<<3) /**< interrupt on NACK for interrupt in */
+#define INACK_IO (1<<4) /**< interrupt on NACK for interrupt out */
+#define INACK_BI (1<<5) /**< interrupt on NACK for bulk in */
+#define INACK_BO (1<<6) /**< interrupt on NACK for bulk out */
+
+BOOL USBHwInit(void);
+void USBHwISR(void);
+
+void USBHwNakIntEnable(unsigned char bIntBits);
+
+void USBHwConnect(BOOL fConnect);
+int USBIsConnected(void);
+
+void USBHwSetAddress(unsigned char bAddr);
+void USBHwConfigDevice(BOOL fConfigured);
+
+// endpoint operations
+void USBHwEPConfig(unsigned char bEP, unsigned short wMaxPacketSize);
+int USBHwEPRead(unsigned char bEP, unsigned char *pbBuf, int iMaxLen);
+int USBHwEPWrite(unsigned char bEP, unsigned char *pbBuf, int iLen);
+void USBHwEPStall(unsigned char bEP, BOOL fStall);
+unsigned char USBHwEPGetStatus(unsigned char bEP);
+
+/** Endpoint interrupt handler callback */
+typedef void (TFnEPIntHandler)(unsigned char bEP, unsigned char bEPStatus);
+void USBHwRegisterEPIntHandler(unsigned char bEP, TFnEPIntHandler *pfnHandler);
+
+/** Device status handler callback */
+typedef void (TFnDevIntHandler)(unsigned char bDevStatus);
+void USBHwRegisterDevIntHandler(TFnDevIntHandler *pfnHandler);
+
+/** Frame event handler callback */
+typedef void (TFnFrameHandler)(unsigned short wFrame);
+void USBHwRegisterFrameHandler(TFnFrameHandler *pfnHandler);
+
+/** Configuration event handler callback */
+typedef void (SetConfigHandler)(void);
+void USBHwRegisterSetConfigHandler(SetConfigHandler *handler);
+
+
+/*************************************************************************
+ USB application interface
+**************************************************************************/
+
+// initialise the complete stack, including HW
+BOOL USBInit(void);
+
+/** Request handler callback (standard, vendor, class) */
+typedef BOOL (TFnHandleRequest)(TSetupPacket *pSetup, int *piLen, unsigned char **ppbData);
+void USBRegisterRequestHandler(int iType, TFnHandleRequest *pfnHandler, unsigned char *pbDataStore);
+void USBRegisterCustomReqHandler(TFnHandleRequest *pfnHandler);
+
+/** Descriptor handler callback */
+typedef BOOL (TFnGetDescriptor)(unsigned short wTypeIndex, unsigned short wLangID, int *piLen, unsigned char **ppbData);
+
+/** Default standard request handler */
+BOOL USBHandleStandardRequest(TSetupPacket *pSetup, int *piLen, unsigned char **ppbData);
+
+/** Default EP0 handler */
+void USBHandleControlTransfer(unsigned char bEP, unsigned char bEPStat);
+
+/** Descriptor handling */
+void USBRegisterDescriptors(const unsigned char *pabDescriptors);
+BOOL USBGetDescriptor(unsigned short wTypeIndex, unsigned short wLangID, int *piLen, unsigned char **ppbData);
+
+void USBHwAllowConnect(void);
diff --git a/gyro_board/src/usb/LPCUSB/usbcontrol.c b/gyro_board/src/usb/LPCUSB/usbcontrol.c
new file mode 100644
index 0000000..e02f492
--- /dev/null
+++ b/gyro_board/src/usb/LPCUSB/usbcontrol.c
@@ -0,0 +1,236 @@
+/*
+ LPCUSB, an USB device driver for LPC microcontrollers
+ Copyright (C) 2006 Bertrik Sikken (bertrik@sikken.nl)
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+/** @file
+ Control transfer handler.
+
+ This module handles control transfers and is normally installed on the
+ endpoint 0 callback.
+
+ Control transfers can be of the following type:
+ 0 Standard;
+ 1 Class;
+ 2 Vendor;
+ 3 Reserved.
+
+ A callback can be installed for each of these control transfers using
+ USBRegisterRequestHandler.
+ When an OUT request arrives, data is collected in the data store provided
+ with the USBRegisterRequestHandler call. When the transfer is done, the
+ callback is called.
+ When an IN request arrives, the callback is called immediately to either
+ put the control transfer data in the data store, or to get a pointer to
+ control transfer data. The data is then packetised and sent to the host.
+*/
+
+#include "usbdebug.h"
+
+#include "usbstruct.h"
+#include "usbapi.h"
+
+
+
+#define MAX_CONTROL_SIZE 128 /**< maximum total size of control transfer data */
+#define MAX_REQ_HANDLERS 4 /**< standard, class, vendor, reserved */
+
+static TSetupPacket Setup; /**< setup packet */
+
+static unsigned char *pbData; /**< pointer to data buffer */
+static int iResidue; /**< remaining bytes in buffer */
+static int iLen; /**< total length of control transfer */
+
+/** Array of installed request handler callbacks */
+static TFnHandleRequest *apfnReqHandlers[4] = {NULL, NULL, NULL, NULL};
+/** Array of installed request data pointers */
+static unsigned char *apbDataStore[4] = {NULL, NULL, NULL, NULL};
+
+/**
+ Local function to handle a request by calling one of the installed
+ request handlers.
+
+ In case of data going from host to device, the data is at *ppbData.
+ In case of data going from device to host, the handler can either
+ choose to write its data at *ppbData or update the data pointer.
+
+ @param [in] pSetup The setup packet
+ @param [in,out] *piLen Pointer to data length
+ @param [in,out] ppbData Data buffer.
+
+ @return TRUE if the request was handles successfully
+ */
+static BOOL _HandleRequest(TSetupPacket *pSetup, int *piLen, unsigned char **ppbData)
+{
+ TFnHandleRequest *pfnHandler;
+ int iType;
+
+ iType = REQTYPE_GET_TYPE(pSetup->bmRequestType);
+ pfnHandler = apfnReqHandlers[iType];
+ if (pfnHandler == NULL) {
+ DBG("No handler for reqtype %d\n", iType);
+ return FALSE;
+ }
+
+ return pfnHandler(pSetup, piLen, ppbData);
+}
+
+
+/**
+ Local function to stall the control endpoint
+
+ @param [in] bEPStat Endpoint status
+ */
+static void StallControlPipe(unsigned char bEPStat)
+{
+ unsigned char *pb;
+ int i;
+
+ USBHwEPStall(0x80, TRUE);
+
+// dump setup packet
+ DBG("STALL on [");
+ pb = (unsigned char *) & Setup;
+ for (i = 0; i < 8; i++) {
+ DBG(" %02x", *pb++);
+ }
+ DBG("] stat=%x\n", bEPStat);
+}
+
+
+/**
+ Sends next chunk of data (possibly 0 bytes) to host
+ */
+static void DataIn(void)
+{
+ int iChunk;
+
+ if (MAX_PACKET_SIZE0 < iResidue) {
+ iChunk = MAX_PACKET_SIZE0;
+ } else {
+ iChunk = iResidue;
+ }
+
+ USBHwEPWrite(0x80, pbData, iChunk);
+ pbData += iChunk;
+ iResidue -= iChunk;
+}
+
+
+/**
+ * Handles IN/OUT transfers on EP0
+ *
+ * @param [in] bEP Endpoint address
+ * @param [in] bEPStat Endpoint status
+ */
+void USBHandleControlTransfer(unsigned char bEP, unsigned char bEPStat)
+{
+ int iChunk, iType;
+
+ if (bEP == 0x00) {
+ // OUT transfer
+ if (bEPStat & EP_STATUS_SETUP) {
+ // setup packet, reset request message state machine
+ USBHwEPRead(0x00, (unsigned char *)&Setup, sizeof(Setup));
+ DBG("S%x", Setup.bRequest);
+
+ // defaults for data pointer and residue
+ iType = REQTYPE_GET_TYPE(Setup.bmRequestType);
+ pbData = apbDataStore[iType];
+ iResidue = Setup.wLength;
+ iLen = Setup.wLength;
+
+ if ((Setup.wLength == 0) ||
+ (REQTYPE_GET_DIR(Setup.bmRequestType) == REQTYPE_DIR_TO_HOST)) {
+ // ask installed handler to process request
+ if (!_HandleRequest(&Setup, &iLen, &pbData)) {
+ DBG("_HandleRequest1 failed\n");
+ StallControlPipe(bEPStat);
+ return;
+ }
+ // send smallest of requested and offered length
+ if (iLen < Setup.wLength) {
+ iResidue = iLen;
+ } else {
+ iResidue = Setup.wLength;
+ }
+
+ // send first part (possibly a zero-length status message)
+ DataIn();
+ }
+ } else {
+ if (iResidue > 0) {
+ // store data
+ iChunk = USBHwEPRead(0x00, pbData, iResidue);
+ if (iChunk < 0) {
+ StallControlPipe(bEPStat);
+ return;
+ }
+ pbData += iChunk;
+ iResidue -= iChunk;
+ if (iResidue == 0) {
+ // received all, send data to handler
+ iType = REQTYPE_GET_TYPE(Setup.bmRequestType);
+ pbData = apbDataStore[iType];
+ if (!_HandleRequest(&Setup, &iLen, &pbData)) {
+ DBG("_HandleRequest2 failed\n");
+ StallControlPipe(bEPStat);
+ return;
+ }
+ // send status to host
+ DataIn();
+ }
+ } else {
+ // absorb zero-length status message
+ iChunk = USBHwEPRead(0x00, NULL, 0);
+ DBG(iChunk > 0 ? "?" : "");
+ }
+ }
+ } else if (bEP == 0x80) {
+ // IN transfer
+ // send more data if available (possibly a 0-length packet)
+ DataIn();
+ } else {
+ ASSERT(FALSE);
+ }
+}
+
+
+/**
+ Registers a callback for handling requests
+
+ @param [in] iType Type of request, e.g. REQTYPE_TYPE_STANDARD
+ @param [in] *pfnHandler Callback function pointer
+ @param [in] *pbDataStore Data storage area for this type of request
+ */
+void USBRegisterRequestHandler(int iType, TFnHandleRequest *pfnHandler, unsigned char *pbDataStore)
+{
+ ASSERT(iType >= 0);
+ ASSERT(iType < 4);
+ apfnReqHandlers[iType] = pfnHandler;
+ apbDataStore[iType] = pbDataStore;
+}
+
diff --git a/gyro_board/src/usb/LPCUSB/usbdebug.h b/gyro_board/src/usb/LPCUSB/usbdebug.h
new file mode 100644
index 0000000..4b3d16b
--- /dev/null
+++ b/gyro_board/src/usb/LPCUSB/usbdebug.h
@@ -0,0 +1,41 @@
+/*
+ LPCUSB, an USB device driver for LPC microcontrollers
+ Copyright (C) 2006 Bertrik Sikken (bertrik@sikken.nl)
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+// CodeRed - comment out this printf, as will use real one from stdio.h
+// to implement output via semihosting
+
+//int printf(const char *format, ...);
+# include <stdio.h>
+
+#ifdef _DEBUG
+#define DBG printf
+#define ASSERT(x) if(!(x)){DBG("\nAssertion '%s' failed in %s:%s#%d!\n",#x,__FILE__,__FUNCTION__,__LINE__);while(1);}
+#else
+#define DBG(x ...)
+#define ASSERT(x)
+#endif
+
diff --git a/gyro_board/src/usb/LPCUSB/usbhw_lpc.c b/gyro_board/src/usb/LPCUSB/usbhw_lpc.c
new file mode 100644
index 0000000..8229371
--- /dev/null
+++ b/gyro_board/src/usb/LPCUSB/usbhw_lpc.c
@@ -0,0 +1,538 @@
+/*
+ LPCUSB, an USB device driver for LPC microcontrollers
+ Copyright (C) 2006 Bertrik Sikken (bertrik@sikken.nl)
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+/** @file
+ USB hardware layer
+ */
+
+
+#include "usbdebug.h"
+#include "usbhw_lpc.h"
+#include "usbapi.h"
+
+#ifdef DEBUG
+// comment out the following line if you don't want to use debug LEDs
+//#define DEBUG_LED
+#endif
+
+/** Installed device interrupt handler */
+static TFnDevIntHandler *_pfnDevIntHandler = NULL;
+/** Installed endpoint interrupt handlers */
+static TFnEPIntHandler *_apfnEPIntHandlers[16];
+/** Installed frame interrupt handlers */
+static TFnFrameHandler *_pfnFrameHandler = NULL;
+
+/** convert from endpoint address to endpoint index */
+#define EP2IDX(bEP) ((((bEP)&0xF)<<1)|(((bEP)&0x80)>>7))
+/** convert from endpoint index to endpoint address */
+#define IDX2EP(idx) ((((idx)<<7)&0x80)|(((idx)>>1)&0xF))
+
+
+
+/**
+ Local function to wait for a device interrupt (and clear it)
+
+ @param [in] dwIntr Bitmask of interrupts to wait for
+ */
+static void Wait4DevInt(unsigned long dwIntr)
+{
+ // wait for specific interrupt
+ while ((USB->USBDevIntSt & dwIntr) != dwIntr);
+ // clear the interrupt bits
+ USB->USBDevIntClr = dwIntr;
+}
+
+
+/**
+ Local function to send a command to the USB protocol engine
+
+ @param [in] bCmd Command to send
+ */
+static void USBHwCmd(unsigned char bCmd)
+{
+ // clear CDFULL/CCEMTY
+ USB->USBDevIntClr = CDFULL | CCEMTY;
+ // write command code
+ USB->USBCmdCode = 0x00000500 | (bCmd << 16);
+ Wait4DevInt(CCEMTY);
+}
+
+
+/**
+ Local function to send a command + data to the USB protocol engine
+
+ @param [in] bCmd Command to send
+ @param [in] bData Data to send
+ */
+static void USBHwCmdWrite(unsigned char bCmd, unsigned short bData)
+{
+ // write command code
+ USBHwCmd(bCmd);
+
+ // write command data
+ USB->USBCmdCode = 0x00000100 | (bData << 16);
+ Wait4DevInt(CCEMTY);
+}
+
+
+/**
+ Local function to send a command to the USB protocol engine and read data
+
+ @param [in] bCmd Command to send
+
+ @return the data
+ */
+static unsigned char USBHwCmdRead(unsigned char bCmd)
+{
+ // write command code
+ USBHwCmd(bCmd);
+
+ // get data
+ USB->USBCmdCode = 0x00000200 | (bCmd << 16);
+ Wait4DevInt(CDFULL);
+ return USB->USBCmdData;
+}
+
+
+/**
+ 'Realizes' an endpoint, meaning that buffer space is reserved for
+ it. An endpoint needs to be realised before it can be used.
+
+ From experiments, it appears that a USB reset causes USBReEP to
+ re-initialise to 3 (= just the control endpoints).
+ However, a USB bus reset does not disturb the USBMaxPSize settings.
+
+ @param [in] idx Endpoint index
+ @param [in] wMaxPSize Maximum packet size for this endpoint
+ */
+static void USBHwEPRealize(int idx, unsigned short wMaxPSize)
+{
+ USB->USBReEP |= (1 << idx);
+ USB->USBEpInd = idx;
+ USB->USBMaxPSize = wMaxPSize;
+ Wait4DevInt(EP_RLZED);
+}
+
+
+/**
+ Enables or disables an endpoint
+
+ @param [in] idx Endpoint index
+ @param [in] fEnable TRUE to enable, FALSE to disable
+ */
+static void USBHwEPEnable(int idx, BOOL fEnable)
+{
+ USBHwCmdWrite(CMD_EP_SET_STATUS | idx, fEnable ? 0 : EP_DA);
+}
+
+
+/**
+ Configures an endpoint and enables it
+
+ @param [in] bEP Endpoint number
+ @param [in] wMaxPacketSize Maximum packet size for this EP
+ */
+void USBHwEPConfig(unsigned char bEP, unsigned short wMaxPacketSize)
+{
+ int idx;
+
+ idx = EP2IDX(bEP);
+
+ // realise EP
+ USBHwEPRealize(idx, wMaxPacketSize);
+
+ // enable EP
+ USBHwEPEnable(idx, TRUE);
+}
+
+
+/**
+ Registers an endpoint event callback
+
+ @param [in] bEP Endpoint number
+ @param [in] pfnHandler Callback function
+ */
+void USBHwRegisterEPIntHandler(unsigned char bEP, TFnEPIntHandler *pfnHandler)
+{
+ int idx;
+
+ idx = EP2IDX(bEP);
+
+ ASSERT(idx < 32);
+
+ /* add handler to list of EP handlers */
+ _apfnEPIntHandlers[idx / 2] = pfnHandler;
+
+ /* enable EP interrupt */
+ USB->USBEpIntEn |= (1 << idx);
+ USB->USBDevIntEn |= EP_SLOW;
+
+ DBG("Registered handler for EP 0x%x\n", bEP);
+}
+
+
+/**
+ Registers an device status callback
+
+ @param [in] pfnHandler Callback function
+ */
+void USBHwRegisterDevIntHandler(TFnDevIntHandler *pfnHandler)
+{
+ _pfnDevIntHandler = pfnHandler;
+
+ // enable device interrupt
+ USB->USBDevIntEn |= DEV_STAT;
+
+ DBG("Registered handler for device status\n");
+}
+
+
+/**
+ Registers the frame callback
+
+ @param [in] pfnHandler Callback function
+ */
+void USBHwRegisterFrameHandler(TFnFrameHandler *pfnHandler)
+{
+ _pfnFrameHandler = pfnHandler;
+
+ // enable device interrupt
+ USB->USBDevIntEn |= FRAME;
+
+ DBG("Registered handler for frame\n");
+}
+
+
+/**
+ Sets the USB address.
+
+ @param [in] bAddr Device address to set
+ */
+void USBHwSetAddress(unsigned char bAddr)
+{
+ USBHwCmdWrite(CMD_DEV_SET_ADDRESS, DEV_EN | bAddr);
+}
+
+
+/**
+ Connects or disconnects from the USB bus
+
+ @param [in] fConnect If TRUE, connect, otherwise disconnect
+ */
+void USBHwConnect(BOOL fConnect)
+{
+ USBHwCmdWrite(CMD_DEV_STATUS, fConnect ? CON : 0);
+}
+
+int USBIsConnected(void) {
+ return (GPIO1->FIOPIN >> 18) & 0x1;
+}
+
+
+/**
+ Enables interrupt on NAK condition
+
+ For IN endpoints a NAK is generated when the host wants to read data
+ from the device, but none is available in the endpoint buffer.
+ For OUT endpoints a NAK is generated when the host wants to write data
+ to the device, but the endpoint buffer is still full.
+
+ The endpoint interrupt handlers can distinguish regular (ACK) interrupts
+ from NAK interrupt by checking the bits in their bEPStatus argument.
+
+ @param [in] bIntBits Bitmap indicating which NAK interrupts to enable
+ */
+void USBHwNakIntEnable(unsigned char bIntBits)
+{
+ USBHwCmdWrite(CMD_DEV_SET_MODE, bIntBits);
+}
+
+
+/**
+ Gets the status from a specific endpoint.
+
+ @param [in] bEP Endpoint number
+ @return Endpoint status byte (containing EP_STATUS_xxx bits)
+ */
+unsigned char USBHwEPGetStatus(unsigned char bEP)
+{
+ int idx = EP2IDX(bEP);
+
+ return USBHwCmdRead(CMD_EP_SELECT | idx);
+}
+
+
+/**
+ Sets the stalled property of an endpoint
+
+ @param [in] bEP Endpoint number
+ @param [in] fStall TRUE to stall, FALSE to unstall
+ */
+void USBHwEPStall(unsigned char bEP, BOOL fStall)
+{
+ int idx = EP2IDX(bEP);
+
+ USBHwCmdWrite(CMD_EP_SET_STATUS | idx, fStall ? EP_ST : 0);
+}
+
+
+/**
+ Writes data to an endpoint buffer
+
+ @param [in] bEP Endpoint number
+ @param [in] pbBuf Endpoint data
+ @param [in] iLen Number of bytes to write
+
+ @return TRUE if the data was successfully written or <0 in case of error.
+*/
+int USBHwEPWrite(unsigned char bEP, unsigned char *pbBuf, int iLen)
+{
+ int idx;
+
+ idx = EP2IDX(bEP);
+
+ // set write enable for specific endpoint
+ USB->USBCtrl = WR_EN | ((bEP & 0xF) << 2);
+
+ // set packet length
+ USB->USBTxPLen = iLen;
+
+ // write data
+ while (USB->USBCtrl & WR_EN) {
+ USB->USBTxData = (pbBuf[3] << 24) | (pbBuf[2] << 16) | (pbBuf[1] << 8) | pbBuf[0];
+ pbBuf += 4;
+ }
+
+ // select endpoint and validate buffer
+ USBHwCmd(CMD_EP_SELECT | idx);
+ USBHwCmd(CMD_EP_VALIDATE_BUFFER);
+
+ return iLen;
+}
+
+
+/**
+ Reads data from an endpoint buffer
+
+ @param [in] bEP Endpoint number
+ @param [in] pbBuf Endpoint data
+ @param [in] iMaxLen Maximum number of bytes to read
+
+ @return the number of bytes available in the EP (possibly more than iMaxLen),
+ or <0 in case of error.
+ */
+int USBHwEPRead(unsigned char bEP, unsigned char *pbBuf, int iMaxLen)
+{
+ int i, idx;
+ unsigned long dwData, dwLen;
+
+ idx = EP2IDX(bEP);
+
+ // set read enable bit for specific endpoint
+ USB->USBCtrl = RD_EN | ((bEP & 0xF) << 2);
+
+ // wait for PKT_RDY
+ do {
+ dwLen = USB->USBRxPLen;
+ } while ((dwLen & PKT_RDY) == 0);
+
+ // packet valid?
+ if ((dwLen & DV) == 0) {
+ return -1;
+ }
+
+ // get length
+ dwLen &= PKT_LNGTH_MASK;
+
+ // get data
+ dwData = 0;
+ for (i = 0; i < dwLen; i++) {
+ if ((i % 4) == 0) {
+ dwData = USB->USBRxData;
+ }
+ if ((pbBuf != NULL) && (i < iMaxLen)) {
+ pbBuf[i] = dwData & 0xFF;
+ }
+ dwData >>= 8;
+ }
+
+ // make sure RD_EN is clear
+ USB->USBCtrl = 0;
+
+ // select endpoint and clear buffer
+ USBHwCmd(CMD_EP_SELECT | idx);
+ USBHwCmd(CMD_EP_CLEAR_BUFFER);
+
+ return dwLen;
+}
+
+
+/**
+ Sets the 'configured' state.
+
+ All registered endpoints are 'realised' and enabled, and the
+ 'configured' bit is set in the device status register.
+
+ @param [in] fConfigured If TRUE, configure device, else unconfigure
+ */
+void USBHwConfigDevice(BOOL fConfigured)
+{
+ // set configured bit
+ USBHwCmdWrite(CMD_DEV_CONFIG, fConfigured ? CONF_DEVICE : 0);
+}
+
+
+/**
+ * USB interrupt handler
+ *
+ * @todo Get all 11 bits of frame number instead of just 8
+ *
+ * Endpoint interrupts are mapped to the slow interrupt
+ */
+void USBHwISR(void) {
+ unsigned long dwStatus;
+ unsigned long dwIntBit;
+ unsigned char bEPStat, bDevStat, bStat;
+ int i;
+ unsigned short wFrame;
+
+ // handle device interrupts
+ dwStatus = USB->USBDevIntSt;
+
+ // frame interrupt
+ if (dwStatus & FRAME) {
+ // clear int
+ USB->USBDevIntClr = FRAME;
+ // call handler
+ if (_pfnFrameHandler != NULL) {
+ wFrame = USBHwCmdRead(CMD_DEV_READ_CUR_FRAME_NR);
+ _pfnFrameHandler(wFrame);
+ }
+ }
+
+ // device status interrupt
+ if (dwStatus & DEV_STAT) {
+ /* Clear DEV_STAT interrupt before reading DEV_STAT register.
+ This prevents corrupted device status reads, see
+ LPC2148 User manual revision 2, 25 july 2006.
+ */
+ USB->USBDevIntClr = DEV_STAT;
+ bDevStat = USBHwCmdRead(CMD_DEV_STATUS);
+ if (bDevStat & (CON_CH | SUS_CH | RST)) {
+ // convert device status into something HW independent
+ bStat = ((bDevStat & CON) ? DEV_STATUS_CONNECT : 0) |
+ ((bDevStat & SUS) ? DEV_STATUS_SUSPEND : 0) |
+ ((bDevStat & RST) ? DEV_STATUS_RESET : 0);
+ // call handler
+ if (_pfnDevIntHandler != NULL) {
+ _pfnDevIntHandler(bStat);
+ }
+ }
+ }
+
+ // endpoint interrupt
+ if (dwStatus & EP_SLOW) {
+ // clear EP_SLOW
+ USB->USBDevIntClr = EP_SLOW;
+ // check all endpoints
+ for (i = 0; i < 32; i++) {
+ dwIntBit = (1 << i);
+ if (USB->USBEpIntSt & dwIntBit) {
+ // clear int (and retrieve status)
+ USB->USBEpIntClr = dwIntBit;
+ Wait4DevInt(CDFULL);
+ bEPStat = USB->USBCmdData;
+ // convert EP pipe stat into something HW independent
+ bStat = ((bEPStat & EPSTAT_FE) ? EP_STATUS_DATA : 0) |
+ ((bEPStat & EPSTAT_ST) ? EP_STATUS_STALLED : 0) |
+ ((bEPStat & EPSTAT_STP) ? EP_STATUS_SETUP : 0) |
+ ((bEPStat & EPSTAT_EPN) ? EP_STATUS_NACKED : 0) |
+ ((bEPStat & EPSTAT_PO) ? EP_STATUS_ERROR : 0);
+ // call handler
+ if (_apfnEPIntHandlers[i / 2] != NULL) {
+ _apfnEPIntHandlers[i / 2](IDX2EP(i), bStat);
+ }
+ }
+ }
+ }
+}
+
+
+
+/**
+ Initialises the USB hardware
+
+
+ @return TRUE if the hardware was successfully initialised
+ */
+BOOL USBHwInit(void)
+{
+ // P2.9 -> USB_CONNECT
+ //PINCON->PINSEL4 &= ~0x000C0000;
+ //PINCON->PINSEL4 |= 0x00040000;
+ // Leave it disconnected.
+ // Before the device can be used, it needs to be connected.
+ GPIO2->FIODIR |= (1UL << 9UL);
+ GPIO2->FIOCLR = (1UL << 9UL);
+
+ // P1.18 -> USB_UP_LED
+ // P1.30 -> VBUS
+ PINCON->PINSEL3 &= ~0x30000030;
+ PINCON->PINSEL3 |= 0x00000010;
+
+ // P0.29 -> USB_D+
+ // P0.30 -> USB_D-
+ PINCON->PINSEL1 &= ~0x3C000000;
+ PINCON->PINSEL1 |= 0x14000000;
+
+ // enable PUSB
+ SC->PCONP |= (1 << 31);
+
+ USB->OTGClkCtrl = 0x12; /* Dev clock, AHB clock enable */
+ while ((USB->OTGClkSt & 0x12) != 0x12);
+
+ // disable/clear all interrupts for now
+ USB->USBDevIntEn = 0;
+ USB->USBDevIntClr = 0xFFFFFFFF;
+ USB->USBDevIntPri = 0;
+
+ USB->USBEpIntEn = 0;
+ USB->USBEpIntClr = 0xFFFFFFFF;
+ USB->USBEpIntPri = 0;
+
+ // by default, only ACKs generate interrupts
+ USBHwNakIntEnable(0);
+
+ return TRUE;
+}
+
+void USBHwAllowConnect(void)
+{
+ // Enable USB.
+ GPIO2->FIOSET = (1UL << 9UL);
+}
diff --git a/gyro_board/src/usb/LPCUSB/usbhw_lpc.h b/gyro_board/src/usb/LPCUSB/usbhw_lpc.h
new file mode 100644
index 0000000..d6b60af
--- /dev/null
+++ b/gyro_board/src/usb/LPCUSB/usbhw_lpc.h
@@ -0,0 +1,149 @@
+/*
+ LPCUSB, an USB device driver for LPC microcontrollers
+ Copyright (C) 2006 Bertrik Sikken (bertrik@sikken.nl)
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+/**
+ Hardware definitions for the LPC176x USB controller
+
+ These are private to the usbhw module
+*/
+
+// CodeRed - pull in defines from NXP header file
+//#include "NXP\LPC17xx\LPC17xx.h"
+#include "LPC17xx.h"
+
+
+// CodeRed - these registers have been renamed on LPC176x
+#define USBReEP USBReEp
+#define OTG_CLK_CTRL USBClkCtrl
+#define OTG_CLK_STAT USBClkSt
+
+/* USBIntSt bits */
+#define USB_INT_REQ_LP (1<<0)
+#define USB_INT_REQ_HP (1<<1)
+#define USB_INT_REQ_DMA (1<<2)
+#define USB_need_clock (1<<8)
+#define EN_USB_BITS (1<<31)
+
+/* USBDevInt... bits */
+#define FRAME (1<<0)
+#define EP_FAST (1<<1)
+#define EP_SLOW (1<<2)
+#define DEV_STAT (1<<3)
+#define CCEMTY (1<<4)
+#define CDFULL (1<<5)
+#define RxENDPKT (1<<6)
+#define TxENDPKT (1<<7)
+#define EP_RLZED (1<<8)
+#define ERR_INT (1<<9)
+
+/* USBRxPLen bits */
+#define PKT_LNGTH (1<<0)
+#define PKT_LNGTH_MASK 0x3FF
+#define DV (1<<10)
+#define PKT_RDY (1<<11)
+
+/* USBCtrl bits */
+#define RD_EN (1<<0)
+#define WR_EN (1<<1)
+#define LOG_ENDPOINT (1<<2)
+
+/* protocol engine command codes */
+/* device commands */
+#define CMD_DEV_SET_ADDRESS 0xD0
+#define CMD_DEV_CONFIG 0xD8
+#define CMD_DEV_SET_MODE 0xF3
+#define CMD_DEV_READ_CUR_FRAME_NR 0xF5
+#define CMD_DEV_READ_TEST_REG 0xFD
+#define CMD_DEV_STATUS 0xFE /* read/write */
+#define CMD_DEV_GET_ERROR_CODE 0xFF
+#define CMD_DEV_READ_ERROR_STATUS 0xFB
+/* endpoint commands */
+#define CMD_EP_SELECT 0x00
+#define CMD_EP_SELECT_CLEAR 0x40
+#define CMD_EP_SET_STATUS 0x40
+#define CMD_EP_CLEAR_BUFFER 0xF2
+#define CMD_EP_VALIDATE_BUFFER 0xFA
+
+/* set address command */
+#define DEV_ADDR (1<<0)
+#define DEV_EN (1<<7)
+
+/* configure device command */
+#define CONF_DEVICE (1<<0)
+
+/* set mode command */
+#define AP_CLK (1<<0)
+#define INAK_CI (1<<1)
+#define INAK_CO (1<<2)
+#define INAK_II (1<<3)
+#define INAK_IO (1<<4)
+#define INAK_BI (1<<5)
+#define INAK_BO (1<<6)
+
+/* set get device status command */
+#define CON (1<<0)
+#define CON_CH (1<<1)
+#define SUS (1<<2)
+#define SUS_CH (1<<3)
+#define RST (1<<4)
+
+/* get error code command */
+// ...
+
+/* Select Endpoint command read bits */
+#define EPSTAT_FE (1<<0)
+#define EPSTAT_ST (1<<1)
+#define EPSTAT_STP (1<<2)
+#define EPSTAT_PO (1<<3)
+#define EPSTAT_EPN (1<<4)
+#define EPSTAT_B1FULL (1<<5)
+#define EPSTAT_B2FULL (1<<6)
+
+/* CMD_EP_SET_STATUS command */
+#define EP_ST (1<<0)
+#define EP_DA (1<<5)
+#define EP_RF_MO (1<<6)
+#define EP_CND_ST (1<<7)
+
+/* read error status command */
+#define PID_ERR (1<<0)
+#define UEPKT (1<<1)
+#define DCRC (1<<2)
+#define TIMEOUT (1<<3)
+#define EOP (1<<4)
+#define B_OVRN (1<<5)
+#define BTSTF (1<<6)
+#define TGL_ERR (1<<7)
+
+
+
+
+
+
+
+
diff --git a/gyro_board/src/usb/LPCUSB/usbinit.c b/gyro_board/src/usb/LPCUSB/usbinit.c
new file mode 100644
index 0000000..49b31a0
--- /dev/null
+++ b/gyro_board/src/usb/LPCUSB/usbinit.c
@@ -0,0 +1,82 @@
+/*
+ LPCUSB, an USB device driver for LPC microcontrollers
+ Copyright (C) 2006 Bertrik Sikken (bertrik@sikken.nl)
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+/** @file
+ USB stack initialisation
+ */
+
+
+#include "usbdebug.h"
+#include "usbapi.h"
+
+
+/** data storage area for standard requests */
+static unsigned char abStdReqData[8];
+
+
+/**
+ USB reset handler
+
+ @param [in] bDevStatus Device status
+ */
+static void HandleUsbReset(unsigned char bDevStatus)
+{
+ if (bDevStatus & DEV_STATUS_RESET) {
+ DBG("\n!");
+ }
+}
+
+
+/**
+ Initialises the USB hardware and sets up the USB stack by
+ installing default callbacks.
+
+ @return TRUE if initialisation was successful
+ */
+BOOL USBInit(void)
+{
+ // init hardware
+ USBHwInit();
+
+ // register bus reset handler
+ USBHwRegisterDevIntHandler(HandleUsbReset);
+
+ // register control transfer handler on EP0
+ USBHwRegisterEPIntHandler(0x00, USBHandleControlTransfer);
+ USBHwRegisterEPIntHandler(0x80, USBHandleControlTransfer);
+
+ // setup control endpoints
+ USBHwEPConfig(0x00, MAX_PACKET_SIZE0);
+ USBHwEPConfig(0x80, MAX_PACKET_SIZE0);
+
+ // register standard request handler
+ USBRegisterRequestHandler(REQTYPE_TYPE_STANDARD, USBHandleStandardRequest, abStdReqData);
+
+ return TRUE;
+}
+
diff --git a/gyro_board/src/usb/LPCUSB/usbstdreq.c b/gyro_board/src/usb/LPCUSB/usbstdreq.c
new file mode 100644
index 0000000..6a3fde5
--- /dev/null
+++ b/gyro_board/src/usb/LPCUSB/usbstdreq.c
@@ -0,0 +1,438 @@
+/*
+ LPCUSB, an USB device driver for LPC microcontrollers
+ Copyright (C) 2006 Bertrik Sikken (bertrik@sikken.nl)
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+/** @file
+ Standard request handler.
+
+ This modules handles the 'chapter 9' processing, specifically the
+ standard device requests in table 9-3 from the universal serial bus
+ specification revision 2.0
+
+ Specific types of devices may specify additional requests (for example
+ HID devices add a GET_DESCRIPTOR request for interfaces), but they
+ will not be part of this module.
+
+ @todo some requests have to return a request error if device not configured:
+ @todo GET_INTERFACE, GET_STATUS, SET_INTERFACE, SYNCH_FRAME
+ @todo this applies to the following if endpoint != 0:
+ @todo SET_FEATURE, GET_FEATURE
+*/
+
+#include "usbdebug.h"
+#include "usbstruct.h"
+#include "usbapi.h"
+
+#define MAX_DESC_HANDLERS 4 /**< device, interface, endpoint, other */
+
+
+/* general descriptor field offsets */
+#define DESC_bLength 0 /**< length offset */
+#define DESC_bDescriptorType 1 /**< descriptor type offset */
+
+/* config descriptor field offsets */
+#define CONF_DESC_wTotalLength 2 /**< total length offset */
+#define CONF_DESC_bConfigurationValue 5 /**< configuration value offset */
+#define CONF_DESC_bmAttributes 7 /**< configuration characteristics */
+
+/* interface descriptor field offsets */
+#define INTF_DESC_bAlternateSetting 3 /**< alternate setting offset */
+
+/* endpoint descriptor field offsets */
+#define ENDP_DESC_bEndpointAddress 2 /**< endpoint address offset */
+#define ENDP_DESC_wMaxPacketSize 4 /**< maximum packet size offset */
+
+
+/** Currently selected configuration */
+static unsigned char bConfiguration = 0;
+/** Installed custom request handler */
+static TFnHandleRequest *pfnHandleCustomReq = NULL;
+/** Pointer to registered descriptors */
+static const unsigned char *pabDescrip = NULL;
+
+
+/**
+ Registers a pointer to a descriptor block containing all descriptors
+ for the device.
+
+ @param [in] pabDescriptors The descriptor byte array
+ */
+void USBRegisterDescriptors(const unsigned char *pabDescriptors)
+{
+ pabDescrip = pabDescriptors;
+}
+
+
+/**
+ Parses the list of installed USB descriptors and attempts to find
+ the specified USB descriptor.
+
+ @param [in] wTypeIndex Type and index of the descriptor
+ @param [in] wLangID Language ID of the descriptor (currently unused)
+ @param [out] *piLen Descriptor length
+ @param [out] *ppbData Descriptor data
+
+ @return TRUE if the descriptor was found, FALSE otherwise
+ */
+BOOL USBGetDescriptor(unsigned short wTypeIndex, unsigned short wLangID, int *piLen, unsigned char **ppbData)
+{
+ unsigned char bType, bIndex;
+ unsigned char *pab;
+ int iCurIndex;
+
+ ASSERT(pabDescrip != NULL);
+
+ bType = GET_DESC_TYPE(wTypeIndex);
+ bIndex = GET_DESC_INDEX(wTypeIndex);
+
+ pab = (unsigned char *)pabDescrip;
+ iCurIndex = 0;
+
+ while (pab[DESC_bLength] != 0) {
+ if (pab[DESC_bDescriptorType] == bType) {
+ if (iCurIndex == bIndex) {
+ // set data pointer
+ *ppbData = pab;
+ // get length from structure
+ if (bType == DESC_CONFIGURATION) {
+ // configuration descriptor is an exception, length is at offset 2 and 3
+ *piLen = (pab[CONF_DESC_wTotalLength]) |
+ (pab[CONF_DESC_wTotalLength + 1] << 8);
+ } else {
+ // normally length is at offset 0
+ *piLen = pab[DESC_bLength];
+ }
+ return TRUE;
+ }
+ iCurIndex++;
+ }
+ // skip to next descriptor
+ pab += pab[DESC_bLength];
+ }
+ // nothing found
+ DBG("Desc %x not found!\n", wTypeIndex);
+ return FALSE;
+}
+
+
+/**
+ Configures the device according to the specified configuration index and
+ alternate setting by parsing the installed USB descriptor list.
+ A configuration index of 0 unconfigures the device.
+
+ @param [in] bConfigIndex Configuration index
+ @param [in] bAltSetting Alternate setting number
+
+ @todo function always returns TRUE, add stricter checking?
+
+ @return TRUE if successfully configured, FALSE otherwise
+ */
+static BOOL USBSetConfiguration(unsigned char bConfigIndex, unsigned char bAltSetting)
+{
+ unsigned char *pab;
+ unsigned char bCurConfig, bCurAltSetting;
+ unsigned char bEP;
+ unsigned short wMaxPktSize;
+
+ ASSERT(pabDescrip != NULL);
+
+ if (bConfigIndex == 0) {
+ // unconfigure device
+ USBHwConfigDevice(FALSE);
+ } else {
+ // configure endpoints for this configuration/altsetting
+ pab = (unsigned char *)pabDescrip;
+ bCurConfig = 0xFF;
+ bCurAltSetting = 0xFF;
+
+ while (pab[DESC_bLength] != 0) {
+
+ switch (pab[DESC_bDescriptorType]) {
+
+ case DESC_CONFIGURATION:
+ // remember current configuration index
+ bCurConfig = pab[CONF_DESC_bConfigurationValue];
+ break;
+
+ case DESC_INTERFACE:
+ // remember current alternate setting
+ bCurAltSetting = pab[INTF_DESC_bAlternateSetting];
+ break;
+
+ case DESC_ENDPOINT:
+ if ((bCurConfig == bConfigIndex) &&
+ (bCurAltSetting == bAltSetting)) {
+ // endpoint found for desired config and alternate setting
+ bEP = pab[ENDP_DESC_bEndpointAddress];
+ wMaxPktSize = (pab[ENDP_DESC_wMaxPacketSize]) |
+ (pab[ENDP_DESC_wMaxPacketSize + 1] << 8);
+ // configure endpoint
+ USBHwEPConfig(bEP, wMaxPktSize);
+ }
+ break;
+
+ default:
+ break;
+ }
+ // skip to next descriptor
+ pab += pab[DESC_bLength];
+ }
+
+ // configure device
+ USBHwConfigDevice(TRUE);
+ }
+
+ return TRUE;
+}
+SetConfigHandler *SetConfig_CallBack = NULL;
+void USBHwRegisterSetConfigHandler(SetConfigHandler *handler){
+ SetConfig_CallBack = handler;
+}
+
+
+/**
+ Local function to handle a standard device request
+
+ @param [in] pSetup The setup packet
+ @param [in,out] *piLen Pointer to data length
+ @param [in,out] ppbData Data buffer.
+
+ @return TRUE if the request was handled successfully
+ */
+static BOOL HandleStdDeviceReq(TSetupPacket *pSetup, int *piLen, unsigned char **ppbData)
+{
+ unsigned char *pbData = *ppbData;
+
+ switch (pSetup->bRequest) {
+
+ case REQ_GET_STATUS:
+ // bit 0: self-powered
+ // bit 1: remote wakeup = not supported
+ pbData[0] = 0;
+ pbData[1] = 0;
+ *piLen = 2;
+ break;
+
+ case REQ_SET_ADDRESS:
+ USBHwSetAddress(pSetup->wValue);
+ break;
+
+ case REQ_GET_DESCRIPTOR:
+ DBG("D%x", pSetup->wValue);
+ return USBGetDescriptor(pSetup->wValue, pSetup->wIndex, piLen, ppbData);
+
+ case REQ_GET_CONFIGURATION:
+ // indicate if we are configured
+ pbData[0] = bConfiguration;
+ *piLen = 1;
+ break;
+
+ case REQ_SET_CONFIGURATION:
+ if (!USBSetConfiguration(pSetup->wValue & 0xFF, 0)) {
+ DBG("USBSetConfiguration failed!\n");
+ return FALSE;
+ }
+ // configuration successful, update current configuration
+ bConfiguration = pSetup->wValue & 0xFF;
+ if(SetConfig_CallBack != NULL)
+ SetConfig_CallBack();
+ break;
+
+ case REQ_CLEAR_FEATURE:
+ case REQ_SET_FEATURE:
+ if (pSetup->wValue == FEA_REMOTE_WAKEUP) {
+ // put DEVICE_REMOTE_WAKEUP code here
+ }
+ if (pSetup->wValue == FEA_TEST_MODE) {
+ // put TEST_MODE code here
+ }
+ return FALSE;
+
+ case REQ_SET_DESCRIPTOR:
+ DBG("Device req %d not implemented\n", pSetup->bRequest);
+ return FALSE;
+
+ default:
+ DBG("Illegal device req %d\n", pSetup->bRequest);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+
+/**
+ Local function to handle a standard interface request
+
+ @param [in] pSetup The setup packet
+ @param [in,out] *piLen Pointer to data length
+ @param [in] ppbData Data buffer.
+
+ @return TRUE if the request was handled successfully
+ */
+static BOOL HandleStdInterfaceReq(TSetupPacket *pSetup, int *piLen, unsigned char **ppbData)
+{
+ unsigned char *pbData = *ppbData;
+
+ switch (pSetup->bRequest) {
+
+ case REQ_GET_STATUS:
+ // no bits specified
+ pbData[0] = 0;
+ pbData[1] = 0;
+ *piLen = 2;
+ break;
+
+ case REQ_CLEAR_FEATURE:
+ case REQ_SET_FEATURE:
+ // not defined for interface
+ return FALSE;
+
+ case REQ_GET_INTERFACE: // TODO use bNumInterfaces
+ // there is only one interface, return n-1 (= 0)
+ pbData[0] = 0;
+ *piLen = 1;
+ break;
+
+ case REQ_SET_INTERFACE: // TODO use bNumInterfaces
+ // there is only one interface (= 0)
+ if (pSetup->wValue != 0) {
+ return FALSE;
+ }
+ *piLen = 0;
+ break;
+
+ default:
+ DBG("Illegal interface req %d\n", pSetup->bRequest);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+
+/**
+ Local function to handle a standard endpoint request
+
+ @param [in] pSetup The setup packet
+ @param [in,out] *piLen Pointer to data length
+ @param [in] ppbData Data buffer.
+
+ @return TRUE if the request was handled successfully
+ */
+static BOOL HandleStdEndPointReq(TSetupPacket *pSetup, int *piLen, unsigned char **ppbData)
+{
+ unsigned char *pbData = *ppbData;
+
+ switch (pSetup->bRequest) {
+ case REQ_GET_STATUS:
+ // bit 0 = endpointed halted or not
+ pbData[0] = (USBHwEPGetStatus(pSetup->wIndex) & EP_STATUS_STALLED) ? 1 : 0;
+ pbData[1] = 0;
+ *piLen = 2;
+ break;
+
+ case REQ_CLEAR_FEATURE:
+ if (pSetup->wValue == FEA_ENDPOINT_HALT) {
+ // clear HALT by unstalling
+ USBHwEPStall(pSetup->wIndex, FALSE);
+ break;
+ }
+ // only ENDPOINT_HALT defined for endpoints
+ return FALSE;
+
+ case REQ_SET_FEATURE:
+ if (pSetup->wValue == FEA_ENDPOINT_HALT) {
+ // set HALT by stalling
+ USBHwEPStall(pSetup->wIndex, TRUE);
+ break;
+ }
+ // only ENDPOINT_HALT defined for endpoints
+ return FALSE;
+
+ case REQ_SYNCH_FRAME:
+ DBG("EP req %d not implemented\n", pSetup->bRequest);
+ return FALSE;
+
+ default:
+ DBG("Illegal EP req %d\n", pSetup->bRequest);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+
+/**
+ Default handler for standard ('chapter 9') requests
+
+ If a custom request handler was installed, this handler is called first.
+
+ @param [in] pSetup The setup packet
+ @param [in,out] *piLen Pointer to data length
+ @param [in] ppbData Data buffer.
+
+ @return TRUE if the request was handled successfully
+ */
+BOOL USBHandleStandardRequest(TSetupPacket *pSetup, int *piLen, unsigned char **ppbData)
+{
+ // try the custom request handler first
+ if ((pfnHandleCustomReq != NULL) && pfnHandleCustomReq(pSetup, piLen, ppbData)) {
+ return TRUE;
+ }
+
+ switch (REQTYPE_GET_RECIP(pSetup->bmRequestType)) {
+ case REQTYPE_RECIP_DEVICE:
+ return HandleStdDeviceReq(pSetup, piLen, ppbData);
+ case REQTYPE_RECIP_INTERFACE:
+ return HandleStdInterfaceReq(pSetup, piLen, ppbData);
+ case REQTYPE_RECIP_ENDPOINT:
+ return HandleStdEndPointReq(pSetup, piLen, ppbData);
+ default:
+ return FALSE;
+ }
+}
+
+
+/**
+ Registers a callback for custom device requests
+
+ In USBHandleStandardRequest, the custom request handler gets a first
+ chance at handling the request before it is handed over to the 'chapter 9'
+ request handler.
+
+ This can be used for example in HID devices, where a REQ_GET_DESCRIPTOR
+ request is sent to an interface, which is not covered by the 'chapter 9'
+ specification.
+
+ @param [in] pfnHandler Callback function pointer
+ */
+void USBRegisterCustomReqHandler(TFnHandleRequest *pfnHandler)
+{
+ pfnHandleCustomReq = pfnHandler;
+}
+
diff --git a/gyro_board/src/usb/LPCUSB/usbstruct.h b/gyro_board/src/usb/LPCUSB/usbstruct.h
new file mode 100644
index 0000000..d6bd725
--- /dev/null
+++ b/gyro_board/src/usb/LPCUSB/usbstruct.h
@@ -0,0 +1,119 @@
+/*
+ LPCUSB, an USB device driver for LPC microcontrollers
+ Copyright (C) 2006 Bertrik Sikken (bertrik@sikken.nl)
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+/**
+ Definitions of structures of standard USB packets
+*/
+
+#ifndef _USBSTRUCT_H_
+#define _USBSTRUCT_H_
+
+// CodeRed - include the LPCUSB type.h file rather than NXP one directly
+#include "type.h"
+
+/** setup packet definitions */
+typedef struct {
+ unsigned char bmRequestType; /**< characteristics of the specific request */
+ unsigned char bRequest; /**< specific request */
+ unsigned short wValue; /**< request specific parameter */
+ unsigned short wIndex; /**< request specific parameter */
+ unsigned short wLength; /**< length of data transfered in data phase */
+} TSetupPacket;
+
+
+#define REQTYPE_GET_DIR(x) (((x)>>7)&0x01)
+#define REQTYPE_GET_TYPE(x) (((x)>>5)&0x03)
+#define REQTYPE_GET_RECIP(x) ((x)&0x1F)
+
+#define REQTYPE_DIR_TO_DEVICE 0
+#define REQTYPE_DIR_TO_HOST 1
+
+#define REQTYPE_TYPE_STANDARD 0
+#define REQTYPE_TYPE_CLASS 1
+#define REQTYPE_TYPE_VENDOR 2
+#define REQTYPE_TYPE_RESERVED 3
+
+#define REQTYPE_RECIP_DEVICE 0
+#define REQTYPE_RECIP_INTERFACE 1
+#define REQTYPE_RECIP_ENDPOINT 2
+#define REQTYPE_RECIP_OTHER 3
+
+/* standard requests */
+#define REQ_GET_STATUS 0x00
+#define REQ_CLEAR_FEATURE 0x01
+#define REQ_SET_FEATURE 0x03
+#define REQ_SET_ADDRESS 0x05
+#define REQ_GET_DESCRIPTOR 0x06
+#define REQ_SET_DESCRIPTOR 0x07
+#define REQ_GET_CONFIGURATION 0x08
+#define REQ_SET_CONFIGURATION 0x09
+#define REQ_GET_INTERFACE 0x0A
+#define REQ_SET_INTERFACE 0x0B
+#define REQ_SYNCH_FRAME 0x0C
+
+/* class requests HID */
+#define HID_GET_REPORT 0x01
+#define HID_GET_IDLE 0x02
+#define HID_GET_PROTOCOL 0x03
+#define HID_SET_REPORT 0x09
+#define HID_SET_IDLE 0x0A
+#define HID_SET_PROTOCOL 0x0B
+
+/* feature selectors */
+#define FEA_ENDPOINT_HALT 0x00
+#define FEA_REMOTE_WAKEUP 0x01
+#define FEA_TEST_MODE 0x02
+
+/*
+ USB descriptors
+*/
+
+/** USB descriptor header */
+typedef struct {
+ unsigned char bLength; /**< descriptor length */
+ unsigned char bDescriptorType; /**< descriptor type */
+} TUSBDescHeader;
+
+#define DESC_DEVICE 1
+#define DESC_CONFIGURATION 2
+#define DESC_STRING 3
+#define DESC_INTERFACE 4
+#define DESC_ENDPOINT 5
+#define DESC_DEVICE_QUALIFIER 6
+#define DESC_OTHER_SPEED 7
+#define DESC_INTERFACE_POWER 8
+
+#define DESC_HID_HID 0x21
+#define DESC_HID_REPORT 0x22
+#define DESC_HID_PHYSICAL 0x23
+
+#define GET_DESC_TYPE(x) (((x)>>8)&0xFF)
+#define GET_DESC_INDEX(x) ((x)&0xFF)
+
+#endif /* _USBSTRUCT_H_ */
+
diff --git a/gyro_board/src/usb/Makefile b/gyro_board/src/usb/Makefile
new file mode 100644
index 0000000..a87936e
--- /dev/null
+++ b/gyro_board/src/usb/Makefile
@@ -0,0 +1,63 @@
+NAME=main
+
+LDSCRIPT=lpc1758_Debug.ld
+
+CSRC=main.c
+
+GCC_PATH=/usr/local/cortex-m3/bin
+
+PORT=/dev/ttyUSB0
+
+CC=$(GCC_PATH)/arm-eabi-gcc
+LD=$(GCC_PATH)/arm-eabi-ld
+OBJCOPY=$(GCC_PATH)/arm-eabi-objcopy
+AS=$(GCC_PATH)/arm-eabi-as
+FLASHER=lpc21isp
+
+CFLAGS=-I. -I./FreeRTOS/include -I./FreeRTOS/portable/GCC/ARM_CM3/ -I./CommonDemoTasks/include -Os -mcpu=cortex-m3 -mthumb -Wl,--gc-sections -ffunction-sections -Wl,-static -Werror
+
+SPEED=38400
+OSC=12000
+
+SOURCES=main.c \
+ ParTest.c \
+ printf-stdarg.c \
+ cr_startup_lpc17.c \
+ CommonDemoTasks/flash.c \
+ FreeRTOS/portable/MemMang/heap_2.c \
+ alloc.c \
+ analog.c \
+ FreeRTOS/portable/GCC/ARM_CM3/port.c \
+ FreeRTOS/tasks.c \
+ FreeRTOS/list.c \
+ FreeRTOS/queue.c \
+ CAN.c \
+ LPCUSB/usbinit.c \
+ LPCUSB/usbcontrol.c \
+ LPCUSB/USB_SENSOR_STREAM.c \
+ LPCUSB/usbhw_lpc.c \
+ spi.c \
+ LPCUSB/usbstdreq.c
+
+all: $(NAME).hex
+
+$(NAME).elf: Makefile $(SOURCES:.c=.o) $(LDSCRIPT)
+ $(CC) $(CFLAGS) -nostartfiles -nostdlib -T $(LDSCRIPT) -o $@ -L/usr/local/cortex-m3/lib/gcc/arm-eabi/4.5.1/ $(SOURCES:.c=.o) -Wa,-Map -Wa,main.map -lgcc
+
+%.o: %.c Makefile
+ $(CC) $(CFLAGS) -nostartfiles -nostdlib -c -o $@ $< -Wall -std=gnu99
+
+run: deploy
+ $(FLASHER) -termonly $(NAME).hex $(PORT) $(SPEED) $(OSC)
+
+deploy: all $(NAME).hex
+ $(FLASHER) -hex -verify $(NAME).hex $(PORT) $(SPEED) $(OSC)
+
+cat:
+ @cd ../../bin; python serial_looper.py
+
+%.hex: %.elf Makefile
+ $(OBJCOPY) -O ihex $< $@
+
+clean:
+ rm -rf $(SOURCES:.c=.o) $(NAME).hex $(NAME).elf
diff --git a/gyro_board/src/usb/ParTest.c b/gyro_board/src/usb/ParTest.c
new file mode 100644
index 0000000..67f3a45
--- /dev/null
+++ b/gyro_board/src/usb/ParTest.c
@@ -0,0 +1,119 @@
+/*
+ FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.
+
+ ***************************************************************************
+ * *
+ * If you are: *
+ * *
+ * + New to FreeRTOS, *
+ * + Wanting to learn FreeRTOS or multitasking in general quickly *
+ * + Looking for basic training, *
+ * + Wanting to improve your FreeRTOS skills and productivity *
+ * *
+ * then take a look at the FreeRTOS eBook *
+ * *
+ * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
+ * http://www.FreeRTOS.org/Documentation *
+ * *
+ * A pdf reference manual is also available. Both are usually delivered *
+ * to your inbox within 20 minutes to two hours when purchased between 8am *
+ * and 8pm GMT (although please allow up to 24 hours in case of *
+ * exceptional circumstances). Thank you for your support! *
+ * *
+ ***************************************************************************
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
+ ***NOTE*** The exception to the GPL is included to allow you to distribute
+ a combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details. You should have received a copy of the GNU General Public
+ License and the FreeRTOS license exception along with FreeRTOS; if not it
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained
+ by writing to Richard Barry, contact details for whom are available on the
+ FreeRTOS WEB site.
+
+ 1 tab == 4 spaces!
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+/* FreeRTOS.org includes. */
+#include "FreeRTOS.h"
+
+/* Demo application includes. */
+#include "partest.h"
+
+#define LED_1 ( 1UL << 8UL )
+#define LED_2 ( 1UL << 7UL )
+#define LED_3 ( 1UL << 6UL )
+
+#define partstFIO1_BITS ( LED_2 | LED_3 | LED_1)
+#define partstNUM_LEDS ( 3 )
+
+static unsigned long ulLEDs[] = {LED_1, LED_2, LED_3};
+
+/*-----------------------------------------------------------
+ * Simple parallel port IO routines.
+ *-----------------------------------------------------------*/
+
+void vParTestInitialise(void)
+{
+ /* LEDs on port 2. */
+ GPIO2->FIODIR |= partstFIO1_BITS;
+ //GPIO0->FIODIR = LED_4;
+
+ /* Start will all LEDs off. */
+ GPIO2->FIOCLR = partstFIO1_BITS;
+ //GPIO0->FIOSET = LED_4;
+ //PINCON->PINMODE0 = (PINCON->PINMODE0 & 0xfffffff0) | 0x00000001;
+}
+/*-----------------------------------------------------------*/
+
+void vParTestSetLED(unsigned portBASE_TYPE uxLED, signed portBASE_TYPE xValue)
+{
+ if (uxLED < partstNUM_LEDS) {
+ if (xValue) {
+ GPIO2->FIOCLR = ulLEDs[uxLED];
+ } else {
+ GPIO2->FIOSET = ulLEDs[uxLED];
+ }
+ }
+}
+/*-----------------------------------------------------------*/
+
+void vParTestToggleLED(unsigned portBASE_TYPE uxLED)
+{
+ if (uxLED < partstNUM_LEDS) {
+ if (GPIO2->FIOPIN & ulLEDs[uxLED]) {
+ GPIO2->FIOCLR = ulLEDs[uxLED];
+ } else {
+ GPIO2->FIOSET = ulLEDs[uxLED];
+ }
+ }
+}
+/*-----------------------------------------------------------*/
+
+unsigned portBASE_TYPE uxParTextGetLED(unsigned portBASE_TYPE uxLED)
+{
+ if (uxLED < partstNUM_LEDS) {
+ return (GPIO2->FIOPIN & ulLEDs[uxLED]);
+ } else {
+ return 0;
+ }
+}
+/*-----------------------------------------------------------*/
+
diff --git a/gyro_board/src/usb/alloc.c b/gyro_board/src/usb/alloc.c
new file mode 100644
index 0000000..1684551
--- /dev/null
+++ b/gyro_board/src/usb/alloc.c
@@ -0,0 +1,62 @@
+/*
+ * This is a glue between newlib and FreeRTOS heap2 allocator !
+ * You need to understand how heap2 works and its limitations,
+ * otherwise you will run out of memory.
+ *
+ * Michal Demin - 2010
+ *
+ * TODO: reent is there for a reason !
+ *
+ */
+
+#include <stdlib.h>
+#include <string.h>
+#include "FreeRTOS.h"
+#include "task.h"
+
+/* definition of block structure, copied from heap2 allocator */
+typedef struct A_BLOCK_LINK
+{
+ struct A_BLOCK_LINK *pxNextFreeBlock; /*<< The next free block in the list. */
+ size_t xBlockSize; /*<< The size of the free block. */
+} xBlockLink;
+
+static const unsigned short heapSTRUCT_SIZE = ( sizeof( xBlockLink ) + portBYTE_ALIGNMENT - ( sizeof( xBlockLink ) % portBYTE_ALIGNMENT ) );
+
+_PTR _realloc_r(struct _reent *re, _PTR oldAddr, size_t newSize) {
+ xBlockLink *block;
+ size_t toCopy;
+ void *newAddr;
+
+ newAddr = pvPortMalloc(newSize);
+
+ if (newAddr == NULL)
+ return NULL;
+
+ /* We need the block struct pointer to get the current size */
+ block = oldAddr;
+ block -= heapSTRUCT_SIZE;
+
+ /* determine the size to be copied */
+ toCopy = (newSize<block->xBlockSize)?(newSize):(block->xBlockSize);
+
+ /* copy old block into new one */
+ memcpy((void *)newAddr, (void *)oldAddr, (size_t)toCopy);
+
+ vPortFree(oldAddr);
+
+ return newAddr;
+}
+
+_PTR _calloc_r(struct _reent *re, size_t num, size_t size) {
+ return pvPortMalloc(num*size);
+}
+
+_PTR _malloc_r(struct _reent *re, size_t size) {
+ return pvPortMalloc(size);
+}
+
+_VOID _free_r(struct _reent *re, _PTR ptr) {
+ vPortFree(ptr);
+}
+
diff --git a/gyro_board/src/usb/analog.c b/gyro_board/src/usb/analog.c
new file mode 100644
index 0000000..9e67dd5
--- /dev/null
+++ b/gyro_board/src/usb/analog.c
@@ -0,0 +1,220 @@
+// ****************************************************************************
+// CopyLeft qwerk Robotics unINC. 2010 All Rights Reserved.
+// ****************************************************************************
+
+// ****************************************************************************
+// **************** IO Pin Setup
+// ****************************************************************************
+
+#include "FreeRTOS.h"
+
+void analog_init (void)
+{
+ // b[1:0] CAN RD1 p0.0
+ // b[3:2] CAN TD1 p0.1
+ //PINCON->PINSEL0 = 0x00000005;
+
+ // b[29:28] USB_DMIN p0.30
+ // b[27:26] USB_DPLUS p0.29
+ // b[21:20] AD0.3 p0.26
+ // b[19:18] AD0.2 p0.25
+ // PINCON->PINSEL1 = 0x14140000;
+
+ // PINCON->PINSEL2 = 0x0;
+
+ // b[31:30] AD0.5 p1.31
+ // b[29:28] V_BUS p1.30
+ // b[21:20] MCOB1 p1.26
+ // b[19:18] MCOA1 p1.25
+ // b[15:14] MCI1 p1.23
+ // b[13:12] MCOB0 p1.22
+ // b[09:08] MCI0 p1.20
+ // b[07:06] MCOA0 p1.19
+ // b[05:04] USB_UP_LED p1.18
+ //PINCON->PINSEL3 = 0xE0145150;
+ SC->PCONP |= PCONP_PCAD;
+
+ // Enable AD0.0, AD0.1, AD0.2, AD0.3
+ PINCON->PINSEL1 &= 0xFFC03FFF;
+ PINCON->PINSEL1 |= 0x00D54000;
+ ADC->ADCR = 0x00200500;
+}
+
+// ****************************************************************************
+// **************** ADC Functions
+// ****************************************************************************
+
+
+// **************** macros
+// starts convertion [26:24] = 001
+
+// **************** functions
+int analog(int channel)
+{
+ ADC->ADCR = ((ADC->ADCR & 0xF8FFFF00) | (0x01000000 | (1 << channel)));
+
+ // Poll until it is done.
+ while(!(ADC->ADGDR & 0x80000000));
+
+ return ((ADC->ADGDR & 0x0000FFF0) >> 4);
+}
+// GPIO1 P0.4
+// GPIO2 P0.5
+// GPIO3 P0.6
+// GPIO4 P0.7
+// GPIO5 P0.8
+// GPIO6 P0.9
+// GPIO7 P2.0
+// GPIO8 P2.1
+// GPIO9 P2.2
+// GPIO10 P2.3
+// GPIO11 P2.4
+// GPIO12 P2.5
+
+// DIP0 P1.29
+// DIP1 P2.13
+// DIP2 P0.11
+// DIP3 P0.10
+#define readGPIO(gpio,chan) ((((gpio)->FIOPIN) >> (chan)) & 1)
+inline int readGPIO_inline(int major,int minor){
+ switch(major){
+ case 0:
+ return readGPIO(GPIO0,minor);
+ case 1:
+ return readGPIO(GPIO1,minor);
+ case 2:
+ return readGPIO(GPIO2,minor);
+ default:
+ return -1;
+ }
+}
+int digital(int channel)
+{
+ if(channel < 1){
+ return -1;
+ }else if(channel < 7){
+ int chan = channel + 3;
+ return readGPIO(GPIO0,chan);
+ }else if(channel < 13){
+ int chan = channel - 7;
+ return readGPIO(GPIO2,chan);
+ }
+ return -1;
+}
+int dip(int channel)
+{
+ switch(channel){
+ case 0:
+ return readGPIO(GPIO1,29);
+ case 1:
+ return readGPIO(GPIO2,13);
+ case 2:
+ return readGPIO(GPIO0,11);
+ case 3:
+ return readGPIO(GPIO0,10);
+ default:
+ return -1;
+
+ }
+}
+//ENC0A 1.20
+//ENC0B 1.23
+//ENC1A 2.11
+//ENC1B 2.12
+//ENC2A 0.21
+//ENC2B 0.22
+//ENC3A 0.19
+//ENC3B 0.20
+
+#define ENC(gpio,a,b) readGPIO(gpio,a) * 2 + readGPIO(gpio,b)
+int encoder_bits(int channel)
+{
+ switch(channel){
+ case 0:
+ return ENC(GPIO1,20,23);
+ case 1:
+ return ENC(GPIO2,11,12);
+ case 2:
+ return ENC(GPIO0,21,22);
+ case 3:
+ return ENC(GPIO0,19,20);
+ default:
+ return -1;
+ }
+ return -1;
+}
+
+volatile int32_t encoder1_val;
+void encoder_init(void)
+{
+// port 0
+ // Setup the encoder interface.
+ SC->PCONP |= PCONP_PCQEI;
+ PINCON->PINSEL3 = ((PINCON->PINSEL3 & 0xffff3dff) | 0x00004100);
+
+ // Reset the count and velocity
+ QEI->QEICON = 0x00000005;
+
+ QEI->QEICONF = 0x00000004;
+ // Wrap back to 0 when we wrap the int...
+ QEI->QEIMAXPOS = 0xffffffff;
+// port 1
+ NVIC_EnableIRQ(EINT1_IRQn);
+ NVIC_EnableIRQ(EINT2_IRQn);
+ //NVIC_EnableIRQ(EINT3_IRQn);
+ //PINSEL4 23/22 0 1
+ //PINSEL4 25 24 0 1
+ PINCON->PINSEL4 = (PINCON->PINSEL4 & ~(0x3 << 22)) | (0x1 << 22);
+ PINCON->PINSEL4 = (PINCON->PINSEL4 & ~(0x3 << 24)) | (0x1 << 24);
+
+ //EXTMODE 1 2 1 1 // all others off
+ SC->EXTMODE = 0x6;
+ SC->EXTINT = 0x6;
+ encoder1_val = 0;
+//ports 2 and 3
+
+
+}
+void EINT1_IRQHandler(void){
+ //ENC1A 2.11
+ int stored_val = encoder1_val;
+ int fiopin = GPIO2->FIOPIN;
+ if(((fiopin >> 1) ^ fiopin) & 0x800){
+ stored_val ++;
+ }else{
+ stored_val --;
+ }
+ encoder1_val = stored_val;
+ SC->EXTPOLAR ^= 0x2;
+ SC->EXTINT = 0x2;
+}
+void EINT2_IRQHandler(void){
+ //ENC1B 2.12
+ int stored_val = encoder1_val;
+ int fiopin = GPIO2->FIOPIN;
+ if(((fiopin >> 1) ^ fiopin) & 0x800){
+ stored_val --;
+ }else{
+ stored_val ++;
+ }
+ encoder1_val = stored_val;
+ SC->EXTPOLAR ^= 0x4;
+ SC->EXTINT = 0x4;
+}
+void EINT3_IRQHandler(void){
+
+}
+int32_t encoder_val(int chan)
+{
+ switch(chan){
+ case 0:
+ return (int32_t)QEI->QEIPOS;
+ case 1:
+ return encoder1_val;
+ case 2:
+ case 3:
+ default:
+ return -1;
+ }
+}
+
diff --git a/gyro_board/src/usb/analog.h b/gyro_board/src/usb/analog.h
new file mode 100644
index 0000000..e9704f6
--- /dev/null
+++ b/gyro_board/src/usb/analog.h
@@ -0,0 +1,11 @@
+#ifndef __ANALOG_H__
+#define __ANALOG_H__
+
+void analog_init (void);
+int analog(int chan);
+int digital(int chan);
+int encoder_bits(int chan);
+void encoder_init(void);
+int32_t encoder_val(int chan);
+int dip(int chan);
+#endif // __ANALOG_H__
diff --git a/gyro_board/src/usb/core_cm3.h b/gyro_board/src/usb/core_cm3.h
new file mode 100644
index 0000000..a6e8707
--- /dev/null
+++ b/gyro_board/src/usb/core_cm3.h
@@ -0,0 +1,1376 @@
+/******************************************************************************
+ * @file: core_cm3.h
+ * @purpose: CMSIS Cortex-M3 Core Peripheral Access Layer Header File
+ * @version: V1.20
+ * @date: 22. May 2009
+ *----------------------------------------------------------------------------
+ *
+ * Copyright (C) 2009 ARM Limited. All rights reserved.
+ *
+ * ARM Limited (ARM) is supplying this software for use with Cortex-Mx
+ * processor based microcontrollers. This file can be freely distributed
+ * within development tools that are supporting such ARM based processors.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED
+ * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
+ * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR
+ * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
+ *
+ ******************************************************************************/
+
+#ifndef __CM3_CORE_H__
+#define __CM3_CORE_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#define __CM3_CMSIS_VERSION_MAIN (0x01) /*!< [31:16] CMSIS HAL main version */
+#define __CM3_CMSIS_VERSION_SUB (0x20) /*!< [15:0] CMSIS HAL sub version */
+#define __CM3_CMSIS_VERSION ((__CM3_CMSIS_VERSION_MAIN << 16) | __CM3_CMSIS_VERSION_SUB) /*!< CMSIS HAL version number */
+
+#define __CORTEX_M (0x03) /*!< Cortex core */
+
+ /**
+ * Lint configuration \n
+ * ----------------------- \n
+ *
+ * The following Lint messages will be suppressed and not shown: \n
+ * \n
+ * --- Error 10: --- \n
+ * register uint32_t __regBasePri __asm("basepri"); \n
+ * Error 10: Expecting ';' \n
+ * \n
+ * --- Error 530: --- \n
+ * return(__regBasePri); \n
+ * Warning 530: Symbol '__regBasePri' (line 264) not initialized \n
+ * \n
+ * --- Error 550: --- \n
+ * __regBasePri = (basePri & 0x1ff); \n
+ * } \n
+ * Warning 550: Symbol '__regBasePri' (line 271) not accessed \n
+ * \n
+ * --- Error 754: --- \n
+ * uint32_t RESERVED0[24]; \n
+ * Info 754: local structure member '<some, not used in the HAL>' (line 109, file ./cm3_core.h) not referenced \n
+ * \n
+ * --- Error 750: --- \n
+ * #define __CM3_CORE_H__ \n
+ * Info 750: local macro '__CM3_CORE_H__' (line 43, file./cm3_core.h) not referenced \n
+ * \n
+ * --- Error 528: --- \n
+ * static __INLINE void NVIC_DisableIRQ(uint32_t IRQn) \n
+ * Warning 528: Symbol 'NVIC_DisableIRQ(unsigned int)' (line 419, file ./cm3_core.h) not referenced \n
+ * \n
+ * --- Error 751: --- \n
+ * } InterruptType_Type; \n
+ * Info 751: local typedef 'InterruptType_Type' (line 170, file ./cm3_core.h) not referenced \n
+ * \n
+ * \n
+ * Note: To re-enable a Message, insert a space before 'lint' * \n
+ *
+ */
+
+ /*lint -save */
+ /*lint -e10 */
+ /*lint -e530 */
+ /*lint -e550 */
+ /*lint -e754 */
+ /*lint -e750 */
+ /*lint -e528 */
+ /*lint -e751 */
+
+
+#include <stdint.h> /* Include standard types */
+
+#if defined (__ICCARM__)
+#include <intrinsics.h> /* IAR Intrinsics */
+#endif
+
+
+#ifndef __NVIC_PRIO_BITS
+#define __NVIC_PRIO_BITS 4 /*!< standard definition for NVIC Priority Bits */
+#endif
+
+
+
+
+ /**
+ * IO definitions
+ *
+ * define access restrictions to peripheral registers
+ */
+
+#ifdef __cplusplus
+#define __I volatile /*!< defines 'read only' permissions */
+#else
+#define __I volatile const /*!< defines 'read only' permissions */
+#endif
+#define __O volatile /*!< defines 'write only' permissions */
+#define __IO volatile /*!< defines 'read / write' permissions */
+
+
+
+ /*******************************************************************************
+ * Register Abstraction
+ ******************************************************************************/
+
+
+ /* System Reset */
+#define NVIC_VECTRESET 0 /*!< Vector Reset Bit */
+#define NVIC_SYSRESETREQ 2 /*!< System Reset Request */
+#define NVIC_AIRCR_VECTKEY (0x5FA << 16) /*!< AIRCR Key for write access */
+#define NVIC_AIRCR_ENDIANESS 15 /*!< Endianess */
+
+ /* Core Debug */
+#define CoreDebug_DEMCR_TRCENA (1 << 24) /*!< DEMCR TRCENA enable */
+#define ITM_TCR_ITMENA 1 /*!< ITM enable */
+
+
+
+
+ /* memory mapping struct for Nested Vectored Interrupt Controller (NVIC) */
+ typedef struct {
+ __IO uint32_t ISER[8]; /*!< Interrupt Set Enable Register */
+ uint32_t RESERVED0[24];
+ __IO uint32_t ICER[8]; /*!< Interrupt Clear Enable Register */
+ uint32_t RSERVED1[24];
+ __IO uint32_t ISPR[8]; /*!< Interrupt Set Pending Register */
+ uint32_t RESERVED2[24];
+ __IO uint32_t ICPR[8]; /*!< Interrupt Clear Pending Register */
+ uint32_t RESERVED3[24];
+ __IO uint32_t IABR[8]; /*!< Interrupt Active bit Register */
+ uint32_t RESERVED4[56];
+ __IO uint8_t IP[240]; /*!< Interrupt Priority Register, 8Bit wide */
+ uint32_t RESERVED5[644];
+ __O uint32_t STIR; /*!< Software Trigger Interrupt Register */
+ } NVIC_Type;
+
+
+ /* memory mapping struct for System Control Block */
+ typedef struct {
+ __I uint32_t CPUID; /*!< CPU ID Base Register */
+ __IO uint32_t ICSR; /*!< Interrupt Control State Register */
+ __IO uint32_t VTOR; /*!< Vector Table Offset Register */
+ __IO uint32_t AIRCR; /*!< Application Interrupt / Reset Control Register */
+ __IO uint32_t SCR; /*!< System Control Register */
+ __IO uint32_t CCR; /*!< Configuration Control Register */
+ __IO uint8_t SHP[12]; /*!< System Handlers Priority Registers (4-7, 8-11, 12-15) */
+ __IO uint32_t SHCSR; /*!< System Handler Control and State Register */
+ __IO uint32_t CFSR; /*!< Configurable Fault Status Register */
+ __IO uint32_t HFSR; /*!< Hard Fault Status Register */
+ __IO uint32_t DFSR; /*!< Debug Fault Status Register */
+ __IO uint32_t MMFAR; /*!< Mem Manage Address Register */
+ __IO uint32_t BFAR; /*!< Bus Fault Address Register */
+ __IO uint32_t AFSR; /*!< Auxiliary Fault Status Register */
+ __I uint32_t PFR[2]; /*!< Processor Feature Register */
+ __I uint32_t DFR; /*!< Debug Feature Register */
+ __I uint32_t ADR; /*!< Auxiliary Feature Register */
+ __I uint32_t MMFR[4]; /*!< Memory Model Feature Register */
+ __I uint32_t ISAR[5]; /*!< ISA Feature Register */
+ } SCB_Type;
+
+
+ /* memory mapping struct for SysTick */
+ typedef struct {
+ __IO uint32_t CTRL; /*!< SysTick Control and Status Register */
+ __IO uint32_t LOAD; /*!< SysTick Reload Value Register */
+ __IO uint32_t VAL; /*!< SysTick Current Value Register */
+ __I uint32_t CALIB; /*!< SysTick Calibration Register */
+ } SysTick_Type;
+
+
+ /* memory mapping structur for ITM */
+ typedef struct {
+ __O union {
+ __O uint8_t u8; /*!< ITM Stimulus Port 8-bit */
+ __O uint16_t u16; /*!< ITM Stimulus Port 16-bit */
+ __O uint32_t u32; /*!< ITM Stimulus Port 32-bit */
+ } PORT [32]; /*!< ITM Stimulus Port Registers */
+ uint32_t RESERVED0[864];
+ __IO uint32_t TER; /*!< ITM Trace Enable Register */
+ uint32_t RESERVED1[15];
+ __IO uint32_t TPR; /*!< ITM Trace Privilege Register */
+ uint32_t RESERVED2[15];
+ __IO uint32_t TCR; /*!< ITM Trace Control Register */
+ uint32_t RESERVED3[29];
+ __IO uint32_t IWR; /*!< ITM Integration Write Register */
+ __IO uint32_t IRR; /*!< ITM Integration Read Register */
+ __IO uint32_t IMCR; /*!< ITM Integration Mode Control Register */
+ uint32_t RESERVED4[43];
+ __IO uint32_t LAR; /*!< ITM Lock Access Register */
+ __IO uint32_t LSR; /*!< ITM Lock Status Register */
+ uint32_t RESERVED5[6];
+ __I uint32_t PID4; /*!< ITM Product ID Registers */
+ __I uint32_t PID5;
+ __I uint32_t PID6;
+ __I uint32_t PID7;
+ __I uint32_t PID0;
+ __I uint32_t PID1;
+ __I uint32_t PID2;
+ __I uint32_t PID3;
+ __I uint32_t CID0;
+ __I uint32_t CID1;
+ __I uint32_t CID2;
+ __I uint32_t CID3;
+ } ITM_Type;
+
+
+ /* memory mapped struct for Interrupt Type */
+ typedef struct {
+ uint32_t RESERVED0;
+ __I uint32_t ICTR; /*!< Interrupt Control Type Register */
+#if ((defined __CM3_REV) && (__CM3_REV >= 0x200))
+ __IO uint32_t ACTLR; /*!< Auxiliary Control Register */
+#else
+ uint32_t RESERVED1;
+#endif
+ } InterruptType_Type;
+
+
+ /* Memory Protection Unit */
+#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1)
+ typedef struct {
+ __I uint32_t TYPE; /*!< MPU Type Register */
+ __IO uint32_t CTRL; /*!< MPU Control Register */
+ __IO uint32_t RNR; /*!< MPU Region RNRber Register */
+ __IO uint32_t RBAR; /*!< MPU Region Base Address Register */
+ __IO uint32_t RASR; /*!< MPU Region Attribute and Size Register */
+ __IO uint32_t RBAR_A1; /*!< MPU Alias 1 Region Base Address Register */
+ __IO uint32_t RASR_A1; /*!< MPU Alias 1 Region Attribute and Size Register */
+ __IO uint32_t RBAR_A2; /*!< MPU Alias 2 Region Base Address Register */
+ __IO uint32_t RASR_A2; /*!< MPU Alias 2 Region Attribute and Size Register */
+ __IO uint32_t RBAR_A3; /*!< MPU Alias 3 Region Base Address Register */
+ __IO uint32_t RASR_A3; /*!< MPU Alias 3 Region Attribute and Size Register */
+ } MPU_Type;
+#endif
+
+
+ /* Core Debug Register */
+ typedef struct {
+ __IO uint32_t DHCSR; /*!< Debug Halting Control and Status Register */
+ __O uint32_t DCRSR; /*!< Debug Core Register Selector Register */
+ __IO uint32_t DCRDR; /*!< Debug Core Register Data Register */
+ __IO uint32_t DEMCR; /*!< Debug Exception and Monitor Control Register */
+ } CoreDebug_Type;
+
+
+ /* Memory mapping of Cortex-M3 Hardware */
+#define SCS_BASE (0xE000E000) /*!< System Control Space Base Address */
+#define ITM_BASE (0xE0000000) /*!< ITM Base Address */
+#define CoreDebug_BASE (0xE000EDF0) /*!< Core Debug Base Address */
+#define SysTick_BASE (SCS_BASE + 0x0010) /*!< SysTick Base Address */
+#define NVIC_BASE (SCS_BASE + 0x0100) /*!< NVIC Base Address */
+#define SCB_BASE (SCS_BASE + 0x0D00) /*!< System Control Block Base Address */
+
+#define InterruptType ((InterruptType_Type *) SCS_BASE) /*!< Interrupt Type Register */
+#define SCB ((SCB_Type *) SCB_BASE) /*!< SCB configuration struct */
+#define SysTick ((SysTick_Type *) SysTick_BASE) /*!< SysTick configuration struct */
+#define NVIC ((NVIC_Type *) NVIC_BASE) /*!< NVIC configuration struct */
+#define ITM ((ITM_Type *) ITM_BASE) /*!< ITM configuration struct */
+#define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE) /*!< Core Debug configuration struct */
+
+#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1)
+#define MPU_BASE (SCS_BASE + 0x0D90) /*!< Memory Protection Unit */
+#define MPU ((MPU_Type*) MPU_BASE) /*!< Memory Protection Unit */
+#endif
+
+
+
+ /*******************************************************************************
+ * Hardware Abstraction Layer
+ ******************************************************************************/
+
+
+#if defined ( __CC_ARM )
+#define __ASM __asm /*!< asm keyword for ARM Compiler */
+#define __INLINE __inline /*!< inline keyword for ARM Compiler */
+
+#elif defined ( __ICCARM__ )
+#define __ASM __asm /*!< asm keyword for IAR Compiler */
+#define __INLINE inline /*!< inline keyword for IAR Compiler. Only avaiable in High optimization mode! */
+
+#elif defined ( __GNUC__ )
+#define __ASM __asm /*!< asm keyword for GNU Compiler */
+#define __INLINE inline /*!< inline keyword for GNU Compiler */
+
+#elif defined ( __TASKING__ )
+#define __ASM __asm /*!< asm keyword for TASKING Compiler */
+#define __INLINE inline /*!< inline keyword for TASKING Compiler */
+
+#endif
+
+
+ /* ################### Compiler specific Intrinsics ########################### */
+
+#if defined ( __CC_ARM ) /*------------------RealView Compiler -----------------*/
+ /* ARM armcc specific functions */
+
+#define __enable_fault_irq __enable_fiq
+#define __disable_fault_irq __disable_fiq
+
+#define __NOP __nop
+#define __WFI __wfi
+#define __WFE __wfe
+#define __SEV __sev
+#define __ISB() __isb(0)
+#define __DSB() __dsb(0)
+#define __DMB() __dmb(0)
+#define __REV __rev
+#define __RBIT __rbit
+#define __LDREXB(ptr) ((unsigned char ) __ldrex(ptr))
+#define __LDREXH(ptr) ((unsigned short) __ldrex(ptr))
+#define __LDREXW(ptr) ((unsigned int ) __ldrex(ptr))
+#define __STREXB(value, ptr) __strex(value, ptr)
+#define __STREXH(value, ptr) __strex(value, ptr)
+#define __STREXW(value, ptr) __strex(value, ptr)
+
+
+ /* intrinsic unsigned long long __ldrexd(volatile void *ptr) */
+ /* intrinsic int __strexd(unsigned long long val, volatile void *ptr) */
+ /* intrinsic void __enable_irq(); */
+ /* intrinsic void __disable_irq(); */
+
+
+ /**
+ * @brief Return the Process Stack Pointer
+ *
+ * @param none
+ * @return uint32_t ProcessStackPointer
+ *
+ * Return the actual process stack pointer
+ */
+ extern uint32_t __get_PSP(void);
+
+ /**
+ * @brief Set the Process Stack Pointer
+ *
+ * @param uint32_t Process Stack Pointer
+ * @return none
+ *
+ * Assign the value ProcessStackPointer to the MSP
+ * (process stack pointer) Cortex processor register
+ */
+ extern void __set_PSP(uint32_t topOfProcStack);
+
+ /**
+ * @brief Return the Main Stack Pointer
+ *
+ * @param none
+ * @return uint32_t Main Stack Pointer
+ *
+ * Return the current value of the MSP (main stack pointer)
+ * Cortex processor register
+ */
+ extern uint32_t __get_MSP(void);
+
+ /**
+ * @brief Set the Main Stack Pointer
+ *
+ * @param uint32_t Main Stack Pointer
+ * @return none
+ *
+ * Assign the value mainStackPointer to the MSP
+ * (main stack pointer) Cortex processor register
+ */
+ extern void __set_MSP(uint32_t topOfMainStack);
+
+ /**
+ * @brief Reverse byte order in unsigned short value
+ *
+ * @param uint16_t value to reverse
+ * @return uint32_t reversed value
+ *
+ * Reverse byte order in unsigned short value
+ */
+ extern uint32_t __REV16(uint16_t value);
+
+ /*
+ * @brief Reverse byte order in signed short value with sign extension to integer
+ *
+ * @param int16_t value to reverse
+ * @return int32_t reversed value
+ *
+ * Reverse byte order in signed short value with sign extension to integer
+ */
+ extern int32_t __REVSH(int16_t value);
+
+
+#if (__ARMCC_VERSION < 400000)
+
+ /**
+ * @brief Remove the exclusive lock created by ldrex
+ *
+ * @param none
+ * @return none
+ *
+ * Removes the exclusive lock which is created by ldrex.
+ */
+ extern void __CLREX(void);
+
+ /**
+ * @brief Return the Base Priority value
+ *
+ * @param none
+ * @return uint32_t BasePriority
+ *
+ * Return the content of the base priority register
+ */
+ extern uint32_t __get_BASEPRI(void);
+
+ /**
+ * @brief Set the Base Priority value
+ *
+ * @param uint32_t BasePriority
+ * @return none
+ *
+ * Set the base priority register
+ */
+ extern void __set_BASEPRI(uint32_t basePri);
+
+ /**
+ * @brief Return the Priority Mask value
+ *
+ * @param none
+ * @return uint32_t PriMask
+ *
+ * Return the state of the priority mask bit from the priority mask
+ * register
+ */
+ extern uint32_t __get_PRIMASK(void);
+
+ /**
+ * @brief Set the Priority Mask value
+ *
+ * @param uint32_t PriMask
+ * @return none
+ *
+ * Set the priority mask bit in the priority mask register
+ */
+ extern void __set_PRIMASK(uint32_t priMask);
+
+ /**
+ * @brief Return the Fault Mask value
+ *
+ * @param none
+ * @return uint32_t FaultMask
+ *
+ * Return the content of the fault mask register
+ */
+ extern uint32_t __get_FAULTMASK(void);
+
+ /**
+ * @brief Set the Fault Mask value
+ *
+ * @param uint32_t faultMask value
+ * @return none
+ *
+ * Set the fault mask register
+ */
+ extern void __set_FAULTMASK(uint32_t faultMask);
+
+ /**
+ * @brief Return the Control Register value
+ *
+ * @param none
+ * @return uint32_t Control value
+ *
+ * Return the content of the control register
+ */
+ extern uint32_t __get_CONTROL(void);
+
+ /**
+ * @brief Set the Control Register value
+ *
+ * @param uint32_t Control value
+ * @return none
+ *
+ * Set the control register
+ */
+ extern void __set_CONTROL(uint32_t control);
+
+#else /* (__ARMCC_VERSION >= 400000) */
+
+
+ /**
+ * @brief Remove the exclusive lock created by ldrex
+ *
+ * @param none
+ * @return none
+ *
+ * Removes the exclusive lock which is created by ldrex.
+ */
+#define __CLREX __clrex
+
+ /**
+ * @brief Return the Base Priority value
+ *
+ * @param none
+ * @return uint32_t BasePriority
+ *
+ * Return the content of the base priority register
+ */
+ static __INLINE uint32_t __get_BASEPRI(void) {
+ register uint32_t __regBasePri __ASM("basepri");
+ return(__regBasePri);
+ }
+
+ /**
+ * @brief Set the Base Priority value
+ *
+ * @param uint32_t BasePriority
+ * @return none
+ *
+ * Set the base priority register
+ */
+ static __INLINE void __set_BASEPRI(uint32_t basePri) {
+ register uint32_t __regBasePri __ASM("basepri");
+ __regBasePri = (basePri & 0x1ff);
+ }
+
+ /**
+ * @brief Return the Priority Mask value
+ *
+ * @param none
+ * @return uint32_t PriMask
+ *
+ * Return the state of the priority mask bit from the priority mask
+ * register
+ */
+ static __INLINE uint32_t __get_PRIMASK(void) {
+ register uint32_t __regPriMask __ASM("primask");
+ return(__regPriMask);
+ }
+
+ /**
+ * @brief Set the Priority Mask value
+ *
+ * @param uint32_t PriMask
+ * @return none
+ *
+ * Set the priority mask bit in the priority mask register
+ */
+ static __INLINE void __set_PRIMASK(uint32_t priMask) {
+ register uint32_t __regPriMask __ASM("primask");
+ __regPriMask = (priMask);
+ }
+
+ /**
+ * @brief Return the Fault Mask value
+ *
+ * @param none
+ * @return uint32_t FaultMask
+ *
+ * Return the content of the fault mask register
+ */
+ static __INLINE uint32_t __get_FAULTMASK(void) {
+ register uint32_t __regFaultMask __ASM("faultmask");
+ return(__regFaultMask);
+ }
+
+ /**
+ * @brief Set the Fault Mask value
+ *
+ * @param uint32_t faultMask value
+ * @return none
+ *
+ * Set the fault mask register
+ */
+ static __INLINE void __set_FAULTMASK(uint32_t faultMask) {
+ register uint32_t __regFaultMask __ASM("faultmask");
+ __regFaultMask = (faultMask & 1);
+ }
+
+ /**
+ * @brief Return the Control Register value
+ *
+ * @param none
+ * @return uint32_t Control value
+ *
+ * Return the content of the control register
+ */
+ static __INLINE uint32_t __get_CONTROL(void) {
+ register uint32_t __regControl __ASM("control");
+ return(__regControl);
+ }
+
+ /**
+ * @brief Set the Control Register value
+ *
+ * @param uint32_t Control value
+ * @return none
+ *
+ * Set the control register
+ */
+ static __INLINE void __set_CONTROL(uint32_t control) {
+ register uint32_t __regControl __ASM("control");
+ __regControl = control;
+ }
+
+#endif /* __ARMCC_VERSION */
+
+
+
+#elif (defined (__ICCARM__)) /*------------------ ICC Compiler -------------------*/
+ /* IAR iccarm specific functions */
+
+#define __enable_irq __enable_interrupt /*!< global Interrupt enable */
+#define __disable_irq __disable_interrupt /*!< global Interrupt disable */
+
+ static __INLINE void __enable_fault_irq() {
+ __ASM("cpsie f");
+ }
+ static __INLINE void __disable_fault_irq() {
+ __ASM("cpsid f");
+ }
+
+#define __NOP __no_operation() /*!< no operation intrinsic in IAR Compiler */
+ static __INLINE void __WFI() {
+ __ASM("wfi");
+ }
+ static __INLINE void __WFE() {
+ __ASM("wfe");
+ }
+ static __INLINE void __SEV() {
+ __ASM("sev");
+ }
+ static __INLINE void __CLREX() {
+ __ASM("clrex");
+ }
+
+ /* intrinsic void __ISB(void) */
+ /* intrinsic void __DSB(void) */
+ /* intrinsic void __DMB(void) */
+ /* intrinsic void __set_PRIMASK(); */
+ /* intrinsic void __get_PRIMASK(); */
+ /* intrinsic void __set_FAULTMASK(); */
+ /* intrinsic void __get_FAULTMASK(); */
+ /* intrinsic uint32_t __REV(uint32_t value); */
+ /* intrinsic uint32_t __REVSH(uint32_t value); */
+ /* intrinsic unsigned long __STREX(unsigned long, unsigned long); */
+ /* intrinsic unsigned long __LDREX(unsigned long *); */
+
+
+ /**
+ * @brief Return the Process Stack Pointer
+ *
+ * @param none
+ * @return uint32_t ProcessStackPointer
+ *
+ * Return the actual process stack pointer
+ */
+ extern uint32_t __get_PSP(void);
+
+ /**
+ * @brief Set the Process Stack Pointer
+ *
+ * @param uint32_t Process Stack Pointer
+ * @return none
+ *
+ * Assign the value ProcessStackPointer to the MSP
+ * (process stack pointer) Cortex processor register
+ */
+ extern void __set_PSP(uint32_t topOfProcStack);
+
+ /**
+ * @brief Return the Main Stack Pointer
+ *
+ * @param none
+ * @return uint32_t Main Stack Pointer
+ *
+ * Return the current value of the MSP (main stack pointer)
+ * Cortex processor register
+ */
+ extern uint32_t __get_MSP(void);
+
+ /**
+ * @brief Set the Main Stack Pointer
+ *
+ * @param uint32_t Main Stack Pointer
+ * @return none
+ *
+ * Assign the value mainStackPointer to the MSP
+ * (main stack pointer) Cortex processor register
+ */
+ extern void __set_MSP(uint32_t topOfMainStack);
+
+ /**
+ * @brief Reverse byte order in unsigned short value
+ *
+ * @param uint16_t value to reverse
+ * @return uint32_t reversed value
+ *
+ * Reverse byte order in unsigned short value
+ */
+ extern uint32_t __REV16(uint16_t value);
+
+ /**
+ * @brief Reverse bit order of value
+ *
+ * @param uint32_t value to reverse
+ * @return uint32_t reversed value
+ *
+ * Reverse bit order of value
+ */
+ extern uint32_t __RBIT(uint32_t value);
+
+ /**
+ * @brief LDR Exclusive
+ *
+ * @param uint8_t* address
+ * @return uint8_t value of (*address)
+ *
+ * Exclusive LDR command
+ */
+ extern uint8_t __LDREXB(uint8_t *addr);
+
+ /**
+ * @brief LDR Exclusive
+ *
+ * @param uint16_t* address
+ * @return uint16_t value of (*address)
+ *
+ * Exclusive LDR command
+ */
+ extern uint16_t __LDREXH(uint16_t *addr);
+
+ /**
+ * @brief LDR Exclusive
+ *
+ * @param uint32_t* address
+ * @return uint32_t value of (*address)
+ *
+ * Exclusive LDR command
+ */
+ extern uint32_t __LDREXW(uint32_t *addr);
+
+ /**
+ * @brief STR Exclusive
+ *
+ * @param uint8_t *address
+ * @param uint8_t value to store
+ * @return uint32_t successful / failed
+ *
+ * Exclusive STR command
+ */
+ extern uint32_t __STREXB(uint8_t value, uint8_t *addr);
+
+ /**
+ * @brief STR Exclusive
+ *
+ * @param uint16_t *address
+ * @param uint16_t value to store
+ * @return uint32_t successful / failed
+ *
+ * Exclusive STR command
+ */
+ extern uint32_t __STREXH(uint16_t value, uint16_t *addr);
+
+ /**
+ * @brief STR Exclusive
+ *
+ * @param uint32_t *address
+ * @param uint32_t value to store
+ * @return uint32_t successful / failed
+ *
+ * Exclusive STR command
+ */
+ extern uint32_t __STREXW(uint32_t value, uint32_t *addr);
+
+
+
+#elif (defined (__GNUC__)) /*------------------ GNU Compiler ---------------------*/
+ /* GNU gcc specific functions */
+
+ static __INLINE void __enable_irq() {
+ __ASM volatile("cpsie i");
+ }
+ static __INLINE void __disable_irq() {
+ __ASM volatile("cpsid i");
+ }
+
+ static __INLINE void __enable_fault_irq() {
+ __ASM volatile("cpsie f");
+ }
+ static __INLINE void __disable_fault_irq() {
+ __ASM volatile("cpsid f");
+ }
+
+ static __INLINE void __NOP() {
+ __ASM volatile("nop");
+ }
+ static __INLINE void __WFI() {
+ __ASM volatile("wfi");
+ }
+ static __INLINE void __WFE() {
+ __ASM volatile("wfe");
+ }
+ static __INLINE void __SEV() {
+ __ASM volatile("sev");
+ }
+ static __INLINE void __ISB() {
+ __ASM volatile("isb");
+ }
+ static __INLINE void __DSB() {
+ __ASM volatile("dsb");
+ }
+ static __INLINE void __DMB() {
+ __ASM volatile("dmb");
+ }
+ static __INLINE void __CLREX() {
+ __ASM volatile("clrex");
+ }
+
+
+ /**
+ * @brief Return the Process Stack Pointer
+ *
+ * @param none
+ * @return uint32_t ProcessStackPointer
+ *
+ * Return the actual process stack pointer
+ */
+ extern uint32_t __get_PSP(void);
+
+ /**
+ * @brief Set the Process Stack Pointer
+ *
+ * @param uint32_t Process Stack Pointer
+ * @return none
+ *
+ * Assign the value ProcessStackPointer to the MSP
+ * (process stack pointer) Cortex processor register
+ */
+ extern void __set_PSP(uint32_t topOfProcStack);
+
+ /**
+ * @brief Return the Main Stack Pointer
+ *
+ * @param none
+ * @return uint32_t Main Stack Pointer
+ *
+ * Return the current value of the MSP (main stack pointer)
+ * Cortex processor register
+ */
+ extern uint32_t __get_MSP(void);
+
+ /**
+ * @brief Set the Main Stack Pointer
+ *
+ * @param uint32_t Main Stack Pointer
+ * @return none
+ *
+ * Assign the value mainStackPointer to the MSP
+ * (main stack pointer) Cortex processor register
+ */
+ extern void __set_MSP(uint32_t topOfMainStack);
+
+ /**
+ * @brief Return the Base Priority value
+ *
+ * @param none
+ * @return uint32_t BasePriority
+ *
+ * Return the content of the base priority register
+ */
+ extern uint32_t __get_BASEPRI(void);
+
+ /**
+ * @brief Set the Base Priority value
+ *
+ * @param uint32_t BasePriority
+ * @return none
+ *
+ * Set the base priority register
+ */
+ extern void __set_BASEPRI(uint32_t basePri);
+
+ /**
+ * @brief Return the Priority Mask value
+ *
+ * @param none
+ * @return uint32_t PriMask
+ *
+ * Return the state of the priority mask bit from the priority mask
+ * register
+ */
+ extern uint32_t __get_PRIMASK(void);
+
+ /**
+ * @brief Set the Priority Mask value
+ *
+ * @param uint32_t PriMask
+ * @return none
+ *
+ * Set the priority mask bit in the priority mask register
+ */
+ extern void __set_PRIMASK(uint32_t priMask);
+
+ /**
+ * @brief Return the Fault Mask value
+ *
+ * @param none
+ * @return uint32_t FaultMask
+ *
+ * Return the content of the fault mask register
+ */
+ extern uint32_t __get_FAULTMASK(void);
+
+ /**
+ * @brief Set the Fault Mask value
+ *
+ * @param uint32_t faultMask value
+ * @return none
+ *
+ * Set the fault mask register
+ */
+ extern void __set_FAULTMASK(uint32_t faultMask);
+
+ /**
+ * @brief Return the Control Register value
+ *
+ * @param none
+ * @return uint32_t Control value
+ *
+ * Return the content of the control register
+ */
+ extern uint32_t __get_CONTROL(void);
+
+ /**
+ * @brief Set the Control Register value
+ *
+ * @param uint32_t Control value
+ * @return none
+ *
+ * Set the control register
+ */
+ extern void __set_CONTROL(uint32_t control);
+
+ /**
+ * @brief Reverse byte order in integer value
+ *
+ * @param uint32_t value to reverse
+ * @return uint32_t reversed value
+ *
+ * Reverse byte order in integer value
+ */
+ extern uint32_t __REV(uint32_t value);
+
+ /**
+ * @brief Reverse byte order in unsigned short value
+ *
+ * @param uint16_t value to reverse
+ * @return uint32_t reversed value
+ *
+ * Reverse byte order in unsigned short value
+ */
+ extern uint32_t __REV16(uint16_t value);
+
+ /*
+ * Reverse byte order in signed short value with sign extension to integer
+ *
+ * @param int16_t value to reverse
+ * @return int32_t reversed value
+ *
+ * @brief Reverse byte order in signed short value with sign extension to integer
+ */
+ extern int32_t __REVSH(int16_t value);
+
+ /**
+ * @brief Reverse bit order of value
+ *
+ * @param uint32_t value to reverse
+ * @return uint32_t reversed value
+ *
+ * Reverse bit order of value
+ */
+ extern uint32_t __RBIT(uint32_t value);
+
+ /**
+ * @brief LDR Exclusive
+ *
+ * @param uint8_t* address
+ * @return uint8_t value of (*address)
+ *
+ * Exclusive LDR command
+ */
+ extern uint8_t __LDREXB(uint8_t *addr);
+
+ /**
+ * @brief LDR Exclusive
+ *
+ * @param uint16_t* address
+ * @return uint16_t value of (*address)
+ *
+ * Exclusive LDR command
+ */
+ extern uint16_t __LDREXH(uint16_t *addr);
+
+ /**
+ * @brief LDR Exclusive
+ *
+ * @param uint32_t* address
+ * @return uint32_t value of (*address)
+ *
+ * Exclusive LDR command
+ */
+ extern uint32_t __LDREXW(uint32_t *addr);
+
+ /**
+ * @brief STR Exclusive
+ *
+ * @param uint8_t *address
+ * @param uint8_t value to store
+ * @return uint32_t successful / failed
+ *
+ * Exclusive STR command
+ */
+ extern uint32_t __STREXB(uint8_t value, uint8_t *addr);
+
+ /**
+ * @brief STR Exclusive
+ *
+ * @param uint16_t *address
+ * @param uint16_t value to store
+ * @return uint32_t successful / failed
+ *
+ * Exclusive STR command
+ */
+ extern uint32_t __STREXH(uint16_t value, uint16_t *addr);
+
+ /**
+ * @brief STR Exclusive
+ *
+ * @param uint32_t *address
+ * @param uint32_t value to store
+ * @return uint32_t successful / failed
+ *
+ * Exclusive STR command
+ */
+ extern uint32_t __STREXW(uint32_t value, uint32_t *addr);
+
+
+#elif (defined (__TASKING__)) /*------------------ TASKING Compiler ---------------------*/
+ /* TASKING carm specific functions */
+
+ /*
+ * The CMSIS functions have been implemented as intrinsics in the compiler.
+ * Please use "carm -?i" to get an up to date list of all instrinsics,
+ * Including the CMSIS ones.
+ */
+
+#endif
+
+
+
+ /* ########################## NVIC functions #################################### */
+
+
+ /**
+ * @brief Set the Priority Grouping in NVIC Interrupt Controller
+ *
+ * @param uint32_t priority_grouping is priority grouping field
+ * @return none
+ *
+ * Set the priority grouping field using the required unlock sequence.
+ * The parameter priority_grouping is assigned to the field
+ * SCB->AIRCR [10:8] PRIGROUP field. Only values from 0..7 are used.
+ * In case of a conflict between priority grouping and available
+ * priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set.
+ */
+ static __INLINE void NVIC_SetPriorityGrouping(uint32_t PriorityGroup) {
+ uint32_t reg_value;
+ uint32_t PriorityGroupTmp = (PriorityGroup & 0x07); /* only values 0..7 are used */
+
+ reg_value = SCB->AIRCR; /* read old register configuration */
+ reg_value &= ~((0xFFFFU << 16) | (0x0F << 8)); /* clear bits to change */
+ reg_value = ((reg_value | NVIC_AIRCR_VECTKEY | (PriorityGroupTmp << 8))); /* Insert write key and priorty group */
+ SCB->AIRCR = reg_value;
+ }
+
+ /**
+ * @brief Get the Priority Grouping from NVIC Interrupt Controller
+ *
+ * @param none
+ * @return uint32_t priority grouping field
+ *
+ * Get the priority grouping from NVIC Interrupt Controller.
+ * priority grouping is SCB->AIRCR [10:8] PRIGROUP field.
+ */
+ static __INLINE uint32_t NVIC_GetPriorityGrouping(void) {
+ return ((SCB->AIRCR >> 8) & 0x07); /* read priority grouping field */
+ }
+
+ /**
+ * @brief Enable Interrupt in NVIC Interrupt Controller
+ *
+ * @param IRQn_Type IRQn specifies the interrupt number
+ * @return none
+ *
+ * Enable a device specific interupt in the NVIC interrupt controller.
+ * The interrupt number cannot be a negative value.
+ */
+ static __INLINE void NVIC_EnableIRQ(IRQn_Type IRQn) {
+ NVIC->ISER[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* enable interrupt */
+ }
+
+ /**
+ * @brief Disable the interrupt line for external interrupt specified
+ *
+ * @param IRQn_Type IRQn is the positive number of the external interrupt
+ * @return none
+ *
+ * Disable a device specific interupt in the NVIC interrupt controller.
+ * The interrupt number cannot be a negative value.
+ */
+ static __INLINE void NVIC_DisableIRQ(IRQn_Type IRQn) {
+ NVIC->ICER[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* disable interrupt */
+ }
+
+ /**
+ * @brief Read the interrupt pending bit for a device specific interrupt source
+ *
+ * @param IRQn_Type IRQn is the number of the device specifc interrupt
+ * @return uint32_t 1 if pending interrupt else 0
+ *
+ * Read the pending register in NVIC and return 1 if its status is pending,
+ * otherwise it returns 0
+ */
+ static __INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) {
+ return((uint32_t)((NVIC->ISPR[(uint32_t)(IRQn) >> 5] & (1 << ((uint32_t)(IRQn) & 0x1F))) ? 1 : 0)); /* Return 1 if pending else 0 */
+ }
+
+ /**
+ * @brief Set the pending bit for an external interrupt
+ *
+ * @param IRQn_Type IRQn is the Number of the interrupt
+ * @return none
+ *
+ * Set the pending bit for the specified interrupt.
+ * The interrupt number cannot be a negative value.
+ */
+ static __INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn) {
+ NVIC->ISPR[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* set interrupt pending */
+ }
+
+ /**
+ * @brief Clear the pending bit for an external interrupt
+ *
+ * @param IRQn_Type IRQn is the Number of the interrupt
+ * @return none
+ *
+ * Clear the pending bit for the specified interrupt.
+ * The interrupt number cannot be a negative value.
+ */
+ static __INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn) {
+ NVIC->ICPR[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* Clear pending interrupt */
+ }
+
+ /**
+ * @brief Read the active bit for an external interrupt
+ *
+ * @param IRQn_Type IRQn is the Number of the interrupt
+ * @return uint32_t 1 if active else 0
+ *
+ * Read the active register in NVIC and returns 1 if its status is active,
+ * otherwise it returns 0.
+ */
+ static __INLINE uint32_t NVIC_GetActive(IRQn_Type IRQn) {
+ return((uint32_t)((NVIC->IABR[(uint32_t)(IRQn) >> 5] & (1 << ((uint32_t)(IRQn) & 0x1F))) ? 1 : 0)); /* Return 1 if active else 0 */
+ }
+
+ /**
+ * @brief Set the priority for an interrupt
+ *
+ * @param IRQn_Type IRQn is the Number of the interrupt
+ * @param priority is the priority for the interrupt
+ * @return none
+ *
+ * Set the priority for the specified interrupt. The interrupt
+ * number can be positive to specify an external (device specific)
+ * interrupt, or negative to specify an internal (core) interrupt. \n
+ *
+ * Note: The priority cannot be set for every core interrupt.
+ */
+ static __INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) {
+ if (IRQn < 0) {
+ SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff);
+ } /* set Priority for Cortex-M3 System Interrupts */
+ else {
+ NVIC->IP[(uint32_t)(IRQn)] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff);
+ } /* set Priority for device specific Interrupts */
+ }
+
+ /**
+ * @brief Read the priority for an interrupt
+ *
+ * @param IRQn_Type IRQn is the Number of the interrupt
+ * @return uint32_t priority is the priority for the interrupt
+ *
+ * Read the priority for the specified interrupt. The interrupt
+ * number can be positive to specify an external (device specific)
+ * interrupt, or negative to specify an internal (core) interrupt.
+ *
+ * The returned priority value is automatically aligned to the implemented
+ * priority bits of the microcontroller.
+ *
+ * Note: The priority cannot be set for every core interrupt.
+ */
+ static __INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn) {
+
+ if (IRQn < 0) {
+ return((uint32_t)(SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] >> (8 - __NVIC_PRIO_BITS)));
+ } /* get priority for Cortex-M3 system interrupts */
+ else {
+ return((uint32_t)(NVIC->IP[(uint32_t)(IRQn)] >> (8 - __NVIC_PRIO_BITS)));
+ } /* get priority for device specific interrupts */
+ }
+
+
+ /**
+ * @brief Encode the priority for an interrupt
+ *
+ * @param uint32_t PriorityGroup is the used priority group
+ * @param uint32_t PreemptPriority is the preemptive priority value (starting from 0)
+ * @param uint32_t SubPriority is the sub priority value (starting from 0)
+ * @return uint32_t the priority for the interrupt
+ *
+ * Encode the priority for an interrupt with the given priority group,
+ * preemptive priority value and sub priority value.
+ * In case of a conflict between priority grouping and available
+ * priority bits (__NVIC_PRIO_BITS) the samllest possible priority group is set.
+ *
+ * The returned priority value can be used for NVIC_SetPriority(...) function
+ */
+ static __INLINE uint32_t NVIC_EncodePriority(uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) {
+ uint32_t PriorityGroupTmp = (PriorityGroup & 0x07); /* only values 0..7 are used */
+ uint32_t PreemptPriorityBits;
+ uint32_t SubPriorityBits;
+
+ PreemptPriorityBits = ((7 - PriorityGroupTmp) > __NVIC_PRIO_BITS) ? __NVIC_PRIO_BITS : 7 - PriorityGroupTmp;
+ SubPriorityBits = ((PriorityGroupTmp + __NVIC_PRIO_BITS) < 7) ? 0 : PriorityGroupTmp - 7 + __NVIC_PRIO_BITS;
+
+ return (
+ ((PreemptPriority & ((1 << (PreemptPriorityBits)) - 1)) << SubPriorityBits) |
+ ((SubPriority & ((1 << (SubPriorityBits)) - 1)))
+ );
+ }
+
+
+ /**
+ * @brief Decode the priority of an interrupt
+ *
+ * @param uint32_t Priority the priority for the interrupt
+ * @param uint32_t PrioGroup is the used priority group
+ * @param uint32_t* pPreemptPrio is the preemptive priority value (starting from 0)
+ * @param uint32_t* pSubPrio is the sub priority value (starting from 0)
+ * @return none
+ *
+ * Decode an interrupt priority value with the given priority group to
+ * preemptive priority value and sub priority value.
+ * In case of a conflict between priority grouping and available
+ * priority bits (__NVIC_PRIO_BITS) the samllest possible priority group is set.
+ *
+ * The priority value can be retrieved with NVIC_GetPriority(...) function
+ */
+ static __INLINE void NVIC_DecodePriority(uint32_t Priority, uint32_t PriorityGroup, uint32_t* pPreemptPriority, uint32_t* pSubPriority) {
+ uint32_t PriorityGroupTmp = (PriorityGroup & 0x07); /* only values 0..7 are used */
+ uint32_t PreemptPriorityBits;
+ uint32_t SubPriorityBits;
+
+ PreemptPriorityBits = ((7 - PriorityGroupTmp) > __NVIC_PRIO_BITS) ? __NVIC_PRIO_BITS : 7 - PriorityGroupTmp;
+ SubPriorityBits = ((PriorityGroupTmp + __NVIC_PRIO_BITS) < 7) ? 0 : PriorityGroupTmp - 7 + __NVIC_PRIO_BITS;
+
+ *pPreemptPriority = (Priority >> SubPriorityBits) & ((1 << (PreemptPriorityBits)) - 1);
+ *pSubPriority = (Priority) & ((1 << (SubPriorityBits)) - 1);
+ }
+
+
+
+ /* ################################## SysTick function ############################################ */
+
+#if (!defined (__Vendor_SysTickConfig)) || (__Vendor_SysTickConfig == 0)
+
+ /* SysTick constants */
+#define SYSTICK_ENABLE 0 /* Config-Bit to start or stop the SysTick Timer */
+#define SYSTICK_TICKINT 1 /* Config-Bit to enable or disable the SysTick interrupt */
+#define SYSTICK_CLKSOURCE 2 /* Clocksource has the offset 2 in SysTick Control and Status Register */
+#define SYSTICK_MAXCOUNT ((1<<24) -1) /* SysTick MaxCount */
+
+ /**
+ * @brief Initialize and start the SysTick counter and its interrupt.
+ *
+ * @param uint32_t ticks is the number of ticks between two interrupts
+ * @return none
+ *
+ * Initialise the system tick timer and its interrupt and start the
+ * system tick timer / counter in free running mode to generate
+ * periodical interrupts.
+ */
+ static __INLINE uint32_t SysTick_Config(uint32_t ticks) {
+ if (ticks > SYSTICK_MAXCOUNT) return (1); /* Reload value impossible */
+
+ SysTick->LOAD = (ticks & SYSTICK_MAXCOUNT) - 1; /* set reload register */
+ NVIC_SetPriority(SysTick_IRQn, (1 << __NVIC_PRIO_BITS) - 1); /* set Priority for Cortex-M0 System Interrupts */
+ SysTick->VAL = (0x00); /* Load the SysTick Counter Value */
+ SysTick->CTRL = (1 << SYSTICK_CLKSOURCE) | (1 << SYSTICK_ENABLE) | (1 << SYSTICK_TICKINT); /* Enable SysTick IRQ and SysTick Timer */
+ return (0); /* Function successful */
+ }
+
+#endif
+
+
+
+
+
+ /* ################################## Reset function ############################################ */
+
+ /**
+ * @brief Initiate a system reset request.
+ *
+ * @param none
+ * @return none
+ *
+ * Initialize a system reset request to reset the MCU
+ */
+ static __INLINE void NVIC_SystemReset(void) {
+ SCB->AIRCR = (NVIC_AIRCR_VECTKEY | (SCB->AIRCR & (0x700)) | (1 << NVIC_SYSRESETREQ)); /* Keep priority group unchanged */
+ __DSB(); /* Ensure completion of memory access */
+ while (1); /* wait until reset */
+ }
+
+
+ /* ################################## Debug Output function ############################################ */
+
+
+ /**
+ * @brief Outputs a character via the ITM channel 0
+ *
+ * @param uint32_t character to output
+ * @return uint32_t input character
+ *
+ * The function outputs a character via the ITM channel 0.
+ * The function returns when no debugger is connected that has booked the output.
+ * It is blocking when a debugger is connected, but the previous character send is not transmitted.
+ */
+ static __INLINE uint32_t ITM_SendChar(uint32_t ch) {
+ if (ch == '\n') ITM_SendChar('\r');
+
+ if ((CoreDebug->DEMCR & CoreDebug_DEMCR_TRCENA) &&
+ (ITM->TCR & ITM_TCR_ITMENA) &&
+ (ITM->TER & (1UL << 0))) {
+ while (ITM->PORT[0].u32 == 0);
+ ITM->PORT[0].u8 = (uint8_t) ch;
+ }
+ return (ch);
+ }
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __CM3_CORE_H__ */
+
+/*lint -restore */
diff --git a/gyro_board/src/usb/cr_startup_lpc17.c b/gyro_board/src/usb/cr_startup_lpc17.c
new file mode 100644
index 0000000..00f6187
--- /dev/null
+++ b/gyro_board/src/usb/cr_startup_lpc17.c
@@ -0,0 +1,304 @@
+//*****************************************************************************
+// +--+
+// | ++----+
+// +-++ |
+// | |
+// +-+--+ |
+// | +--+--+
+// +----+ Copyright (c) 2009 Code Red Technologies Ltd.
+//
+// Microcontroller Startup code for use with Red Suite
+//
+// Software License Agreement
+//
+// The software is owned by Code Red Technologies and/or its suppliers, and is
+// protected under applicable copyright laws. All rights are reserved. Any
+// use in violation of the foregoing restrictions may subject the user to criminal
+// sanctions under applicable laws, as well as to civil liability for the breach
+// of the terms and conditions of this license.
+//
+// THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED
+// OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
+// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
+// USE OF THIS SOFTWARE FOR COMMERCIAL DEVELOPMENT AND/OR EDUCATION IS SUBJECT
+// TO A CURRENT END USER LICENSE AGREEMENT (COMMERCIAL OR EDUCATIONAL) WITH
+// CODE RED TECHNOLOGIES LTD.
+//
+//*****************************************************************************
+#define WEAK __attribute__ ((weak))
+#define ALIAS(f) __attribute__ ((weak, alias (#f)))
+
+//*****************************************************************************
+//
+// Forward declaration of the default handlers.
+//
+//*****************************************************************************
+void Reset_Handler(void);
+void ResetISR(void) ALIAS(Reset_Handler);
+static void NMI_Handler(void);
+static void HardFault_Handler(void);
+static void MemManage_Handler(void);
+static void BusFault_Handler(void);
+static void UsageFault_Handler(void);
+static void DebugMon_Handler(void);
+
+//*****************************************************************************
+//
+// Forward declaration of the specific IRQ handlers. These are aliased
+// to the IntDefaultHandler, which is a 'forever' loop. When the application
+// defines a handler (with the same name), this will automatically take
+// precedence over these weak definitions
+//
+//*****************************************************************************
+void WDT_IRQHandler(void) ALIAS(IntDefaultHandler);
+void TIMER0_IRQHandler(void) ALIAS(IntDefaultHandler);
+void TIMER1_IRQHandler(void) ALIAS(IntDefaultHandler);
+void TIMER2_IRQHandler(void) ALIAS(IntDefaultHandler);
+void TIMER3_IRQHandler(void) ALIAS(IntDefaultHandler);
+void UART0_IRQHandler(void) ALIAS(IntDefaultHandler);
+void UART1_IRQHandler(void) ALIAS(IntDefaultHandler);
+void UART2_IRQHandler(void) ALIAS(IntDefaultHandler);
+void UART3_IRQHandler(void) ALIAS(IntDefaultHandler);
+void PWM1_IRQHandler(void) ALIAS(IntDefaultHandler);
+void I2C0_IRQHandler(void) ALIAS(IntDefaultHandler);
+void I2C1_IRQHandler(void) ALIAS(IntDefaultHandler);
+void I2C2_IRQHandler(void) ALIAS(IntDefaultHandler);
+void SPI_IRQHandler(void) ALIAS(IntDefaultHandler);
+void SSP0_IRQHandler(void) ALIAS(IntDefaultHandler);
+void SSP1_IRQHandler(void) ALIAS(IntDefaultHandler);
+void PLL0_IRQHandler(void) ALIAS(IntDefaultHandler);
+void RTC_IRQHandler(void) ALIAS(IntDefaultHandler);
+void EINT0_IRQHandler(void) ALIAS(IntDefaultHandler);
+void EINT1_IRQHandler(void) ALIAS(IntDefaultHandler);
+void EINT2_IRQHandler(void) ALIAS(IntDefaultHandler);
+void EINT3_IRQHandler(void) ALIAS(IntDefaultHandler);
+void ADC_IRQHandler(void) ALIAS(IntDefaultHandler);
+void BOD_IRQHandler(void) ALIAS(IntDefaultHandler);
+void USB_IRQHandler(void) ALIAS(IntDefaultHandler);
+void CAN_IRQHandler(void) ALIAS(IntDefaultHandler);
+void DMA_IRQHandler(void) ALIAS(IntDefaultHandler);
+void I2S_IRQHandler(void) ALIAS(IntDefaultHandler);
+void EMAC_IRQHandler(void) ALIAS(IntDefaultHandler);
+void ENET_IRQHandler(void) ALIAS(IntDefaultHandler);
+void RIT_IRQHandler(void) ALIAS(IntDefaultHandler);
+void MCPWM_IRQHandler(void) ALIAS(IntDefaultHandler);
+void QEI_IRQHandler(void) ALIAS(IntDefaultHandler);
+void PLL1_IRQHandler(void) ALIAS(IntDefaultHandler);
+
+extern void xPortSysTickHandler(void);
+extern void xPortPendSVHandler(void);
+extern void vPortSVCHandler(void);
+
+
+//*****************************************************************************
+//
+// The entry point for the C++ library startup
+//
+//*****************************************************************************
+extern WEAK void __libc_init_array(void);
+
+//*****************************************************************************
+//
+// The entry point for the application.
+// __main() is the entry point for redlib based applications
+// main() is the entry point for newlib based applications
+//
+//*****************************************************************************
+extern WEAK void __main(void);
+extern WEAK void main(void);
+//*****************************************************************************
+//
+// External declaration for the pointer to the stack top from the Linker Script
+//
+//*****************************************************************************
+extern int _vStackTop;
+
+//*****************************************************************************
+//
+// The vector table.
+// This relies on the linker script to place at correct location in memory.
+//
+//*****************************************************************************
+typedef void (* const isr_handlers_t)(void);
+__attribute__((section(".isr_vector")))
+isr_handlers_t g_pfnVectors[] = {
+ // Core Level - CM3
+ (isr_handlers_t)&_vStackTop, // The initial stack pointer
+ Reset_Handler, // The reset handler
+ NMI_Handler, // The NMI handler
+ HardFault_Handler, // The hard fault handler
+ MemManage_Handler, // The MPU fault handler
+ BusFault_Handler, // The bus fault handler
+ UsageFault_Handler, // The usage fault handler
+ 0, // Reserved
+ 0, // Reserved
+ 0, // Reserved
+ 0, // Reserved
+ vPortSVCHandler, // SVCall handler
+ DebugMon_Handler, // Debug monitor handler
+ 0, // Reserved
+ xPortPendSVHandler, // The PendSV handler
+ xPortSysTickHandler, // The SysTick handler
+
+ // Chip Level - LPC17
+ WDT_IRQHandler, // 16, 0x40 - WDT
+ TIMER0_IRQHandler, // 17, 0x44 - TIMER0
+ TIMER1_IRQHandler, // 18, 0x48 - TIMER1
+ TIMER2_IRQHandler, // 19, 0x4c - TIMER2
+ TIMER3_IRQHandler, // 20, 0x50 - TIMER3
+ UART0_IRQHandler, // 21, 0x54 - UART0
+ UART1_IRQHandler, // 22, 0x58 - UART1
+ UART2_IRQHandler, // 23, 0x5c - UART2
+ UART3_IRQHandler, // 24, 0x60 - UART3
+ PWM1_IRQHandler, // 25, 0x64 - PWM1
+ I2C0_IRQHandler, // 26, 0x68 - I2C0
+ I2C1_IRQHandler, // 27, 0x6c - I2C1
+ I2C2_IRQHandler, // 28, 0x70 - I2C2
+ SPI_IRQHandler, // 29, 0x74 - SPI
+ SSP0_IRQHandler, // 30, 0x78 - SSP0
+ SSP1_IRQHandler, // 31, 0x7c - SSP1
+ PLL0_IRQHandler, // 32, 0x80 - PLL0 (Main PLL)
+ RTC_IRQHandler, // 33, 0x84 - RTC
+ EINT0_IRQHandler, // 34, 0x88 - EINT0
+ EINT1_IRQHandler, // 35, 0x8c - EINT1
+ EINT2_IRQHandler, // 36, 0x90 - EINT2
+ EINT3_IRQHandler, // 37, 0x94 - EINT3
+ ADC_IRQHandler, // 38, 0x98 - ADC
+ BOD_IRQHandler, // 39, 0x9c - BOD
+ USB_IRQHandler, // 40, 0xA0 - USB
+ CAN_IRQHandler, // 41, 0xa4 - CAN
+ DMA_IRQHandler, // 42, 0xa8 - GP DMA
+ I2S_IRQHandler, // 43, 0xac - I2S
+ EMAC_IRQHandler, // 44, 0xb0 - Ethernet
+ RIT_IRQHandler, // 45, 0xb4 - RITINT
+ MCPWM_IRQHandler, // 46, 0xb8 - Motor Control PWM
+ QEI_IRQHandler, // 47, 0xbc - Quadrature Encoder
+ PLL1_IRQHandler, // 48, 0xc0 - PLL1 (USB PLL)
+};
+
+//*****************************************************************************
+//
+// The following are constructs created by the linker, indicating where the
+// the "data" and "bss" segments reside in memory. The initializers for the
+// for the "data" segment resides immediately following the "text" segment.
+//
+//*****************************************************************************
+extern unsigned long _etext;
+extern unsigned long _data;
+extern unsigned long _edata;
+extern unsigned long _bss;
+extern unsigned long _ebss;
+
+//*****************************************************************************
+// Reset entry point for your code.
+// Sets up a simple runtime environment and initializes the C/C++
+// library.
+//
+//*****************************************************************************
+void Reset_Handler(void)
+{
+ unsigned long *pulSrc, *pulDest;
+
+ //
+ // Copy the data segment initializers from flash to SRAM.
+ //
+ pulSrc = &_etext;
+ for (pulDest = &_data; pulDest < &_edata;) {
+ *pulDest++ = *pulSrc++;
+ }
+
+ //
+ // Zero fill the bss segment. This is done with inline assembly since this
+ // will clear the value of pulDest if it is not kept in a register.
+ //
+ __asm(" ldr r0, =_bss\n"
+ " ldr r1, =_ebss\n"
+ " mov r2, #0\n"
+ " .thumb_func\n"
+ "zero_loop:\n"
+ " cmp r0, r1\n"
+ " it lt\n"
+ " strlt r2, [r0], #4\n"
+ " blt zero_loop");
+
+ //
+ // Call C++ library initilisation, if present
+ //
+ //if (__libc_init_array)
+ //__libc_init_array() ;
+
+ //
+ // Call the application's entry point.
+ // __main() is the entry point for redlib based applications (which calls main())
+ // main() is the entry point for newlib based applications
+ //
+ //if (__main)
+ //__main() ;
+ //else
+ main() ;
+
+ //
+ // main() shouldn't return, but if it does, we'll just enter an infinite loop
+ //
+ while (1) {
+ ;
+ }
+}
+
+//*****************************************************************************
+//
+// This is the code that gets called when the processor receives a NMI. This
+// simply enters an infinite loop, preserving the system state for examination
+// by a debugger.
+//
+//*****************************************************************************
+static void NMI_Handler(void)
+{
+ while (1) {
+ }
+}
+
+static void HardFault_Handler(void)
+{
+ while (1) {
+ }
+}
+
+static void MemManage_Handler(void)
+{
+ while (1) {
+ }
+}
+
+static void BusFault_Handler(void)
+{
+ while (1) {
+ }
+}
+
+static void UsageFault_Handler(void)
+{
+ while (1) {
+ }
+}
+
+static void DebugMon_Handler(void)
+{
+ while (1) {
+ }
+}
+
+//*****************************************************************************
+//
+// Processor ends up here if an unexpected interrupt occurs or a handler
+// is not present in the application code.
+//
+//*****************************************************************************
+static void IntDefaultHandler(void)
+{
+ //
+ // Go into an infinite loop.
+ //
+ while (1) {
+ }
+}
diff --git a/gyro_board/src/usb/lpc1758_Debug.ld b/gyro_board/src/usb/lpc1758_Debug.ld
new file mode 100644
index 0000000..ce6d093
--- /dev/null
+++ b/gyro_board/src/usb/lpc1758_Debug.ld
@@ -0,0 +1,79 @@
+/*
+ * GENERATED FILE - DO NOT EDIT
+ * (C) Code Red Technologies Ltd, 2008-9
+ * Generated C linker script file for LPC1768
+ * (created from nxp_lpc13_c.ld (v2.0.11 (200907061347)) on Thu Jul 09 12:44:31 BST 2009)
+*/
+
+GROUP(libgcc.a libc.a)
+
+MEMORY
+{
+ FLASH(rx) : ORIGIN = 0x00000000, LENGTH = 0x80000
+ SRAM(rwx) : ORIGIN = 0x10000000, LENGTH = 0x8000
+ AHBRAM0 : ORIGIN = 0x2007c000, LENGTH = 0x4000
+ AHBRAM1 : ORIGIN = 0x20080000, LENGTH = 0x4000
+}
+
+_vRamTop = 0x10000000 + 0x8000;
+
+ENTRY(ResetISR)
+
+SECTIONS {
+ .text : {
+ KEEP(*(.isr_vector))
+ *(.text*)
+ *(.rodata*)
+
+ } > FLASH
+
+
+ /* for exception handling/unwind - some Newlib functions (in common with C++ and STDC++) use this. */
+
+ .ARM.extab : {
+ *(.ARM.extab* .gnu.linkonce.armextab.*)
+ } > FLASH
+
+ __exidx_start = .;
+ .ARM.exidx : {
+ *(.ARM.exidx* .gnu.linkonce.armexidx.*)
+ } > FLASH
+ __exidx_end = .;
+
+ _etext = .;
+
+ .data :
+ AT(__exidx_end) {
+ _data = .;
+ *(vtable)
+ *(.data*)
+ _edata = .;
+ } > SRAM
+
+ /* zero initialized data */
+ .bss : {
+ _bss = .;
+ *(.bss*)
+ *(COMMON)
+ _ebss = .;
+ } > SRAM
+
+ /* Where we put the heap with cr_clib */
+ .cr_heap : {
+ end = .;
+ _pvHeapStart = .;
+ } > SRAM
+
+ /*
+ Note: (ref: M0000066)
+ Moving the stack down by 16 is to work around a GDB bug.
+ This space can be reclaimed for Production Builds.
+ */
+ _vStackTop = _vRamTop - 16;
+
+ .ETHRAM : {
+ } > AHBRAM0
+
+ .USBRAM : {
+ } > AHBRAM1
+}
diff --git a/gyro_board/src/usb/main.c b/gyro_board/src/usb/main.c
new file mode 100644
index 0000000..11191a4
--- /dev/null
+++ b/gyro_board/src/usb/main.c
@@ -0,0 +1,398 @@
+/*
+ FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
+ ***NOTE*** The exception to the GPL is included to allow you to distribute
+ a combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details. You should have received a copy of the GNU General Public
+ License and the FreeRTOS license exception along with FreeRTOS; if not it
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained
+ by writing to Richard Barry, contact details for whom are available on the
+ FreeRTOS WEB site.
+
+*/
+
+/* Standard includes. */
+#include "stdio.h"
+
+/* Scheduler includes. */
+#include "FreeRTOS.h"
+#include "queue.h"
+#include "task.h"
+
+/* Demo app includes. */
+#include "flash.h"
+#include "partest.h"
+#include "analog.h"
+#include "spi.h"
+#include "LPCUSB/usbapi.h"
+
+/*-----------------------------------------------------------*/
+
+/* The time between cycles of the 'check' functionality (defined within the
+tick hook. */
+#define mainCHECK_DELAY ((portTickType) 5000 / portTICK_RATE_MS)
+
+/* Task priorities. */
+#define mainQUEUE_POLL_PRIORITY (tskIDLE_PRIORITY + 2)
+#define mainSEM_TEST_PRIORITY (tskIDLE_PRIORITY + 1)
+#define mainBLOCK_Q_PRIORITY (tskIDLE_PRIORITY + 2)
+#define mainUIP_TASK_PRIORITY (tskIDLE_PRIORITY + 3)
+#define mainINTEGER_TASK_PRIORITY (tskIDLE_PRIORITY)
+#define mainGEN_QUEUE_TASK_PRIORITY (tskIDLE_PRIORITY)
+#define mainFLASH_TASK_PRIORITY (tskIDLE_PRIORITY + 2)
+
+/* The WEB server has a larger stack as it utilises stack hungry string
+handling library calls. */
+#define mainBASIC_WEB_STACK_SIZE (configMINIMAL_STACK_SIZE * 4)
+
+int32_t goal = 0;
+int64_t gyro_angle = 0;
+
+/*-----------------------------------------------------------*/
+
+/*
+ * Configure the hardware for the demo.
+ */
+static void prvSetupHardware(void);
+
+/*
+ * The task that handles the USB stack.
+ */
+extern void vUSBTask(void *pvParameters);
+
+extern int VCOM_getchar(void);
+
+int VCOM_putchar(int c);
+
+inline int32_t encoder()
+{
+ return (int32_t)QEI->QEIPOS;
+}
+
+static portTASK_FUNCTION(vPrintPeriodic, pvParameters)
+{
+ portTickType xLastFlashTime;
+
+ /* We need to initialise xLastFlashTime prior to the first call to
+ vTaskDelayUntil(). */
+ xLastFlashTime = xTaskGetTickCount();
+
+ analog_init();
+
+ encoder_init();
+
+ // Wait 100 ms for it to boot.
+ vTaskDelayUntil(&xLastFlashTime, 100 / portTICK_RATE_MS);
+ spi_init();
+
+ // Enable USB. The PC has probably disconnected it now.
+ USBHwAllowConnect();
+
+ // TODO(aschuh): Write this into a gyro calibration function, and check all the outputs.
+ vTaskDelayUntil(&xLastFlashTime, 50 / portTICK_RATE_MS);
+ enable_gyro_csel();
+ printf("SPI Gyro Second Response 0x%x %x\n", transfer_spi_bytes(0x2000), transfer_spi_bytes(0x0000));
+ disable_gyro_csel();
+
+ vTaskDelayUntil(&xLastFlashTime, 50 / portTICK_RATE_MS);
+ enable_gyro_csel();
+ printf("SPI Gyro Third Response 0x%x %x\n", transfer_spi_bytes(0x2000), transfer_spi_bytes(0x0000));
+ disable_gyro_csel();
+
+ vTaskDelayUntil(&xLastFlashTime, 10 / portTICK_RATE_MS);
+ enable_gyro_csel();
+ printf("SPI Gyro Fourth Response 0x%x %x\n", transfer_spi_bytes(0x2000), transfer_spi_bytes(0x0000));
+ disable_gyro_csel();
+ const int hz = 200;
+ const int flash_hz = 10;
+ const int startup_cycles = hz * 2;
+ const int zeroing_cycles = hz * 6;
+ int32_t zero_bias = 0;
+ int32_t startup_cycles_left = startup_cycles;
+ int32_t zeroing_cycles_left = zeroing_cycles;
+ int32_t full_units_offset = 0;
+ int32_t remainder_offset = 0;
+ int32_t remainder_sum = 0;
+ int32_t led_flash = 0;
+ vParTestSetLED(0, 0);
+
+ for (;;) {
+ led_flash ++;
+ if (led_flash < hz / flash_hz / 2) {
+ vParTestSetLED(1, 0);
+ } else {
+ vParTestSetLED(1, 1);
+ }
+ if (led_flash >= hz / flash_hz) {
+ led_flash = 0;
+ }
+ /* Delay for half the flash period then turn the LED on. */
+ vTaskDelayUntil(&xLastFlashTime, 1000 / hz / portTICK_RATE_MS);
+ enable_gyro_csel();
+ uint16_t high_value = transfer_spi_bytes(0x2000);
+ uint16_t low_value = transfer_spi_bytes(0x0000);
+ disable_gyro_csel();
+ int16_t gyro_value = -((int16_t)((((uint32_t)high_value << 16) | (uint32_t)low_value) >> 10));
+
+ if (startup_cycles_left) {
+ vParTestSetLED(2, 0);
+ --startup_cycles_left;
+ } else if (zeroing_cycles_left) {
+ vParTestSetLED(2, 1);
+ //printf("Zeroing ");
+ --zeroing_cycles_left;
+ zero_bias -= gyro_value;
+ if (zeroing_cycles_left == 0) {
+ // Do all the nice math
+ full_units_offset = zero_bias / zeroing_cycles;
+ remainder_offset = zero_bias % zeroing_cycles;
+ if (remainder_offset < 0) {
+ remainder_offset += zeroing_cycles;
+ --full_units_offset;
+ }
+ }
+ } else {
+ vParTestSetLED(2, 0);
+ int64_t new_angle = gyro_angle + gyro_value + full_units_offset;
+ if (remainder_sum >= zeroing_cycles) {
+ remainder_sum -= zeroing_cycles;
+ new_angle += 1;
+ }
+ NVIC_DisableIRQ(USB_IRQn);
+ gyro_angle = new_angle;
+ NVIC_EnableIRQ(USB_IRQn);
+ remainder_sum += remainder_offset;
+ }
+ //printf("Angle %d Rate %d\n", (int)(gyro_angle / 16), (int)(gyro_value + full_units_offset));
+
+ //printf("time: %d analog %d encoder %d goal %d\n", (int)i, (int)analog(5), (int)encoder(), (int)goal);
+
+ //printf("time: %d encoder %d goal %d\n", (int)i, (int)encoder(), (int)goal);
+ /*
+ for(i = 0; i < 4; i++){
+ printf("analog(%d) => %d\n",i,analog(i));
+ }
+ for(i = 1; i < 13; i++){
+ printf("digital(%d) => %d\n",i,digital(i));
+ }
+ for(i = 0; i < 4; i++){
+ printf("dip(%d) => %d\n",i,dip(i));
+ }
+ for(i = 0; i < 4; i++){
+ printf("encoder(%d) => %d\n",i,encoder_bits(i));
+ }
+ for(i = 0; i < 4; i++){
+ printf("encoder_val(%d) => %d\n",i,(int)encoder_val(i));
+ }*/
+ }
+}
+
+#include "CAN.h"
+
+
+
+void motor(int32_t speed)
+{
+ if (speed > 2047) speed = 2047;
+ if (speed < -2047) speed = -2047;
+ return;
+ if (speed > 0) {
+ MCPWM->MCMAT1 = 2047 - speed;
+ MCPWM->MCMAT0 = 2048;
+ } else {
+ MCPWM->MCMAT1 = 2048;
+ MCPWM->MCMAT0 = speed + 2047;
+ }
+}
+
+
+
+/*-----------------------------------------------------------*/
+
+int main(void)
+{
+ // Configure the hardware
+ prvSetupHardware();
+
+ /* Start the standard demo tasks. These are just here to exercise the
+ kernel port and provide examples of how the FreeRTOS API can be used. */
+ //vStartLEDFlashTasks(mainFLASH_TASK_PRIORITY);
+
+ /* Create the USB task. */
+ xTaskCreate(vUSBTask, (signed char *) "USB", configMINIMAL_STACK_SIZE + 1020, (void *) NULL, tskIDLE_PRIORITY + 3, NULL);
+
+ xTaskCreate(vPrintPeriodic, (signed char *) "PRINTx", configMINIMAL_STACK_SIZE + 100, NULL, tskIDLE_PRIORITY + 2, NULL);
+
+ initCAN();
+
+ // Start the scheduler.
+ vTaskStartScheduler();
+
+ /* Will only get here if there was insufficient memory to create the idle
+ task. The idle task is created within vTaskStartScheduler(). */
+ for (;;);
+}
+/*-----------------------------------------------------------*/
+
+
+void vApplicationTickHook(void)
+{
+ static unsigned long ulTicksSinceLastDisplay = 0;
+
+ /* Called from every tick interrupt as described in the comments at the top
+ of this file.
+
+ Have enough ticks passed to make it time to perform our health status
+ check again? */
+
+ ulTicksSinceLastDisplay++;
+
+ if (ulTicksSinceLastDisplay >= mainCHECK_DELAY) {
+ /* Reset the counter so these checks run again in mainCHECK_DELAY
+ ticks time. */
+ ulTicksSinceLastDisplay = 0;
+ }
+}
+/*-----------------------------------------------------------*/
+
+void prvSetupHardware(void)
+{
+ // Setup the peripherals.
+ // The CPU will be running at 100 MHz with a 12 MHz clock input.
+
+ // Setup GPIO power.
+ SC->PCONP = PCONP_PCGPIO;
+ // Disable TPIU.
+ PINCON->PINSEL10 = 0;
+
+ // Setup PLL0 so that the CPU runs at 100 MHz.
+ if (SC->PLL0STAT & (1 << 25)) {
+ /* Enable PLL, disconnected. */
+ SC->PLL0CON = 1;
+ SC->PLL0FEED = PLLFEED_FEED1;
+ SC->PLL0FEED = PLLFEED_FEED2;
+ }
+
+ // Disable PLL, disconnected.
+ SC->PLL0CON = 0;
+ SC->PLL0FEED = PLLFEED_FEED1;
+ SC->PLL0FEED = PLLFEED_FEED2;
+
+ // Enable main OSC and wait until it's ready.
+ SC->SCS |= 0x20;
+ while (!(SC->SCS & 0x40));
+
+ // select main OSC, 12MHz, as the PLL clock source.
+ SC->CLKSRCSEL = 0x1;
+
+ SC->PLL0CFG = 0x20031;
+ SC->PLL0FEED = PLLFEED_FEED1;
+ SC->PLL0FEED = PLLFEED_FEED2;
+
+ // Enable PLL, disconnected.
+ SC->PLL0CON = 1;
+ SC->PLL0FEED = PLLFEED_FEED1;
+ SC->PLL0FEED = PLLFEED_FEED2;
+
+ // Set clock divider.
+ SC->CCLKCFG = 0x03;
+
+ // Configure flash accelerator.
+ SC->FLASHCFG = 0x403a;
+
+ // Check lock bit status.
+ while (((SC->PLL0STAT & (1 << 26)) == 0));
+
+ // Enable and connect.
+ SC->PLL0CON = 3;
+ SC->PLL0FEED = PLLFEED_FEED1;
+ SC->PLL0FEED = PLLFEED_FEED2;
+
+ while (((SC->PLL0STAT & (1 << 25)) == 0));
+
+ // Configure the clock for the USB.
+ if (SC->PLL1STAT & (1 << 9)) {
+ // Enable PLL, disconnected.
+ SC->PLL1CON = 1;
+ SC->PLL1FEED = PLLFEED_FEED1;
+ SC->PLL1FEED = PLLFEED_FEED2;
+ }
+
+ // Disable PLL, disconnected.
+ SC->PLL1CON = 0;
+ SC->PLL1FEED = PLLFEED_FEED1;
+ SC->PLL1FEED = PLLFEED_FEED2;
+
+ SC->PLL1CFG = 0x23;
+ SC->PLL1FEED = PLLFEED_FEED1;
+ SC->PLL1FEED = PLLFEED_FEED2;
+
+ /* Enable PLL, disconnected. */
+ SC->PLL1CON = 1;
+ SC->PLL1FEED = PLLFEED_FEED1;
+ SC->PLL1FEED = PLLFEED_FEED2;
+ while (((SC->PLL1STAT & (1 << 10)) == 0));
+
+ /* Enable and connect. */
+ SC->PLL1CON = 3;
+ SC->PLL1FEED = PLLFEED_FEED1;
+ SC->PLL1FEED = PLLFEED_FEED2;
+ while (((SC->PLL1STAT & (1 << 9)) == 0));
+
+ // Setup the peripheral bus to be the same as the CCLK, 100 MHz.
+ // Set CAN to run at CCLK/6, which should have it running about 1 Mbit (1.042)
+ SC->PCLKSEL0 = 0xff555555;
+
+ /* Configure the LEDs. */
+ vParTestInitialise();
+}
+/*-----------------------------------------------------------*/
+
+void vApplicationStackOverflowHook(xTaskHandle *pxTask, signed char *pcTaskName)
+{
+ /* This function will get called if a task overflows its stack. */
+
+ (void) pxTask;
+ (void) pcTaskName;
+
+ for (;;);
+}
+/*-----------------------------------------------------------*/
+
+void vConfigureTimerForRunTimeStats(void)
+{
+ const unsigned long TCR_COUNT_RESET = 2, CTCR_CTM_TIMER = 0x00, TCR_COUNT_ENABLE = 0x01;
+
+ /* This function configures a timer that is used as the time base when
+ collecting run time statistical information - basically the percentage
+ of CPU time that each task is utilising. It is called automatically when
+ the scheduler is started (assuming configGENERATE_RUN_TIME_STATS is set
+ to 1). */
+
+ /* Power up and feed the timer. */
+ SC->PCONP |= 0x02UL;
+ SC->PCLKSEL0 = (SC->PCLKSEL0 & (~(0x3 << 2))) | (0x01 << 2);
+
+ /* Reset Timer 0 */
+ TIM0->TCR = TCR_COUNT_RESET;
+
+ /* Just count up. */
+ TIM0->CTCR = CTCR_CTM_TIMER;
+
+ /* Prescale to a frequency that is good enough to get a decent resolution,
+ but not too fast so as to overflow all the time. */
+ TIM0->PR = (configCPU_CLOCK_HZ / 10000UL) - 1UL;
+
+ /* Start the counter. */
+ TIM0->TCR = TCR_COUNT_ENABLE;
+}
+
diff --git a/gyro_board/src/usb/printf-stdarg.c b/gyro_board/src/usb/printf-stdarg.c
new file mode 100644
index 0000000..206c3db
--- /dev/null
+++ b/gyro_board/src/usb/printf-stdarg.c
@@ -0,0 +1,314 @@
+/*
+ Copyright 2001, 2002 Georges Menie (www.menie.org)
+ stdarg version contributed by Christian Ettinger
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+
+/*
+ putchar is the only external dependency for this file,
+ if you have a working putchar, leave it commented out.
+ If not, uncomment the define below and
+ replace outbyte(c) by your own function call.
+
+*/
+
+#include <stdarg.h>
+
+int VCOM_putchar(int c);
+
+int putchar (int c)
+{
+ return VCOM_putchar(c);
+}
+
+static void printchar(char **str, int c)
+{
+ //extern int putchar(int c);
+
+ if (str) {
+ **str = (char)c;
+ ++(*str);
+ } else {
+ VCOM_putchar(c);
+ }
+}
+
+int puts (char * str)
+{
+ int pc = 1;
+ while (*str != 0) {
+ VCOM_putchar(*str);
+ str ++;
+ pc ++;
+ }
+ VCOM_putchar('\n');
+ return pc;
+}
+
+#define PAD_RIGHT 1
+#define PAD_ZERO 2
+
+static int prints(char **out, const char *string, int width, int pad)
+{
+ register int pc = 0, padchar = ' ';
+
+ if (width > 0) {
+ register int len = 0;
+ register const char *ptr;
+ for (ptr = string; *ptr; ++ptr) ++len;
+ if (len >= width) width = 0;
+ else width -= len;
+ if (pad & PAD_ZERO) padchar = '0';
+ }
+ if (!(pad & PAD_RIGHT)) {
+ for (; width > 0; --width) {
+ printchar(out, padchar);
+ ++pc;
+ }
+ }
+ for (; *string ; ++string) {
+ printchar(out, *string);
+ ++pc;
+ }
+ for (; width > 0; --width) {
+ printchar(out, padchar);
+ ++pc;
+ }
+
+ return pc;
+}
+
+/* the following should be enough for 32 bit int */
+#define PRINT_BUF_LEN 12
+
+static int printi(char **out, int i, int b, int sg, int width, int pad, int letbase)
+{
+ char print_buf[PRINT_BUF_LEN];
+ register char *s;
+ register int t, neg = 0, pc = 0;
+ register unsigned int u = (unsigned int)i;
+
+ if (i == 0) {
+ print_buf[0] = '0';
+ print_buf[1] = '\0';
+ return prints(out, print_buf, width, pad);
+ }
+
+ if (sg && b == 10 && i < 0) {
+ neg = 1;
+ u = (unsigned int) - i;
+ }
+
+ s = print_buf + PRINT_BUF_LEN - 1;
+ *s = '\0';
+
+ while (u) {
+ t = (unsigned int)u % b;
+ if (t >= 10)
+ t += letbase - '0' - 10;
+ *--s = (char)(t + '0');
+ u /= b;
+ }
+
+ if (neg) {
+ if (width && (pad & PAD_ZERO)) {
+ printchar(out, '-');
+ ++pc;
+ --width;
+ } else {
+ *--s = '-';
+ }
+ }
+
+ return pc + prints(out, s, width, pad);
+}
+
+static int print(char **out, const char *format, va_list args)
+{
+ register int width, pad;
+ register int pc = 0;
+ char scr[2];
+
+ for (; *format != 0; ++format) {
+ if (*format == '%') {
+ ++format;
+ width = pad = 0;
+ if (*format == '\0') break;
+ if (*format == '%') goto pout;
+ if (*format == '-') {
+ ++format;
+ pad = PAD_RIGHT;
+ }
+ while (*format == '0') {
+ ++format;
+ pad |= PAD_ZERO;
+ }
+ for (; *format >= '0' && *format <= '9'; ++format) {
+ width *= 10;
+ width += *format - '0';
+ }
+ if (*format == 's') {
+ register char *s = (char *)va_arg(args, int);
+ pc += prints(out, s ? s : "(null)", width, pad);
+ continue;
+ }
+ if (*format == 'd') {
+ pc += printi(out, va_arg(args, int), 10, 1, width, pad, 'a');
+ continue;
+ }
+ if (*format == 'x') {
+ pc += printi(out, va_arg(args, int), 16, 0, width, pad, 'a');
+ continue;
+ }
+ if (*format == 'X') {
+ pc += printi(out, va_arg(args, int), 16, 0, width, pad, 'A');
+ continue;
+ }
+ if (*format == 'u') {
+ pc += printi(out, va_arg(args, int), 10, 0, width, pad, 'a');
+ continue;
+ }
+ if (*format == 'c') {
+ /* char are converted to int then pushed on the stack */
+ scr[0] = (char)va_arg(args, int);
+ scr[1] = '\0';
+ pc += prints(out, scr, width, pad);
+ continue;
+ }
+ } else {
+pout:
+ printchar(out, *format);
+ ++pc;
+ }
+ }
+ if (out) **out = '\0';
+ va_end(args);
+ return pc;
+}
+
+int printf(const char *format, ...)
+{
+ va_list args;
+
+ va_start(args, format);
+ return print(0, format, args);
+}
+
+int sprintf(char *out, const char *format, ...)
+{
+ va_list args;
+
+ va_start(args, format);
+ return print(&out, format, args);
+}
+
+
+int snprintf(char *buf, unsigned int count, const char *format, ...)
+{
+ va_list args;
+
+ (void) count;
+
+ va_start(args, format);
+ return print(&buf, format, args);
+}
+
+
+#ifdef TEST_PRINTF
+int main(void)
+{
+ char *ptr = "Hello world!";
+ char *np = 0;
+ int i = 5;
+ unsigned int bs = sizeof(int) * 8;
+ int mi;
+ char buf[80];
+
+ mi = (1 << (bs - 1)) + 1;
+ printf("%s\n", ptr);
+ printf("printf test\n");
+ printf("%s is null pointer\n", np);
+ printf("%d = 5\n", i);
+ printf("%d = - max int\n", mi);
+ printf("char %c = 'a'\n", 'a');
+ printf("hex %x = ff\n", 0xff);
+ printf("hex %02x = 00\n", 0);
+ printf("signed %d = unsigned %u = hex %x\n", -3, -3, -3);
+ printf("%d %s(s)%", 0, "message");
+ printf("\n");
+ printf("%d %s(s) with %%\n", 0, "message");
+ sprintf(buf, "justif: \"%-10s\"\n", "left");
+ printf("%s", buf);
+ sprintf(buf, "justif: \"%10s\"\n", "right");
+ printf("%s", buf);
+ sprintf(buf, " 3: %04d zero padded\n", 3);
+ printf("%s", buf);
+ sprintf(buf, " 3: %-4d left justif.\n", 3);
+ printf("%s", buf);
+ sprintf(buf, " 3: %4d right justif.\n", 3);
+ printf("%s", buf);
+ sprintf(buf, "-3: %04d zero padded\n", -3);
+ printf("%s", buf);
+ sprintf(buf, "-3: %-4d left justif.\n", -3);
+ printf("%s", buf);
+ sprintf(buf, "-3: %4d right justif.\n", -3);
+ printf("%s", buf);
+
+ return 0;
+}
+
+/*
+ * if you compile this file with
+ * gcc -Wall $(YOUR_C_OPTIONS) -DTEST_PRINTF -c printf.c
+ * you will get a normal warning:
+ * printf.c:214: warning: spurious trailing `%' in format
+ * this line is testing an invalid % at the end of the format string.
+ *
+ * this should display (on 32bit int machine) :
+ *
+ * Hello world!
+ * printf test
+ * (null) is null pointer
+ * 5 = 5
+ * -2147483647 = - max int
+ * char a = 'a'
+ * hex ff = ff
+ * hex 00 = 00
+ * signed -3 = unsigned 4294967293 = hex fffffffd
+ * 0 message(s)
+ * 0 message(s) with %
+ * justif: "left "
+ * justif: " right"
+ * 3: 0003 zero padded
+ * 3: 3 left justif.
+ * 3: 3 right justif.
+ * -3: -003 zero padded
+ * -3: -3 left justif.
+ * -3: -3 right justif.
+ */
+
+#endif
+
+
+/* To keep linker happy. */
+int write(int i, char* c, int n)
+{
+ (void)i;
+ (void)n;
+ (void)c;
+ return 0;
+}
+
diff --git a/gyro_board/src/usb/quad encoder config.txt b/gyro_board/src/usb/quad encoder config.txt
new file mode 100644
index 0000000..4c0fe4e
--- /dev/null
+++ b/gyro_board/src/usb/quad encoder config.txt
@@ -0,0 +1,37 @@
+// Quad Encoder stuff
+
+
+// enable the quadrature encode peripheral and peripherial clock
+
+ SC->PCONP |=0x00040000; // bit 18 of PCONP set to 1
+ SC->PCLKSEL1 |=0x00000001; /* bits 1,0 00 CCLK/4
+ 01 CCLK
+ 10 CCLK/2
+ 11 CCLK/8 */
+
+
+// Enable pins for QEI MCI0, MCI1 (PhA PhB, signals respectively)
+
+
+ PINCON->PINSEL3 = ((PINSEL3 &=0xFFFF3DFF) |= 0x00004100); /* 01 in bits 9:8 and 15:14*/
+ //PINCON->PINSEL3 = ((PINSEL3 &=0xFFFCFFFF) |= 0x00010000); /* Turns on MCI2 index input 17:16 = 01*/
+
+
+
+// Specify Quadriture phase mode
+
+ // QEI->QEICON &= 0xFFFFFFFE; /* Clears position counter */
+ QEI->QEICONF &= 0XFFFFFFFD; /* Sets bit 1 to 0, Signal mode to Quad Phase */
+ // QEI->QEICON |= 0X00000002; /* Bit 2 to 1 counts both PhA and PhB for higher resolution */
+
+
+
+ // QEI->FILTER = ****Whatever Sampling size we want*** /* Sets the number of consecutive pulses for a change in direction, etc to accepted */
+
+
+// Set Various Attributes
+
+ // QEI->QEIMAXPOS = *****insert max position*****;
+
+
+/* Note: QEI->QEIPOS is a read only section that stores the current position */
\ No newline at end of file
diff --git a/gyro_board/src/usb/spi.c b/gyro_board/src/usb/spi.c
new file mode 100644
index 0000000..de41866
--- /dev/null
+++ b/gyro_board/src/usb/spi.c
@@ -0,0 +1,60 @@
+#include "stdio.h"
+#include "FreeRTOS.h"
+#include "spi.h"
+
+void spi_init (void) {
+ SC->PCONP |= PCONP_PCSPI;
+ SC->PCLKSEL0 |= 0x00010000;
+
+ // Hook up the interrupt
+ //NVIC_EnableIRQ(SPI_IRQn);
+
+ // SCK
+ PINCON->PINSEL0 &= 0x3fffffff;
+ PINCON->PINSEL0 |= 0xc0000000;
+
+ // SSEL, MISO, MOSI
+ // SSEL is GPIO, and needs to be done manually.
+ disable_gyro_csel();
+ GPIO0->FIODIR |= 0x00010000;
+ PINCON->PINSEL1 &= 0xffffffc0;
+ PINCON->PINSEL1 |= 0x0000003c;
+
+ // Master mode, 16 bits/frame, enable interrupts
+ SPI->SPCR = 0x000000a4;
+ // 13 clocks per cycle. This works out to a 7.7 mhz buss.
+ SPI->SPCCR = 0x0000000d;
+
+ // TODO(aschuh): Implement the gyro bring-up blocking first.
+ // Then use interrupts.
+ enable_gyro_csel();
+ printf("SPI Gyro Initial Response 0x%x %x\n", transfer_spi_bytes(0x2000), transfer_spi_bytes(0x0003));
+ disable_gyro_csel();
+}
+
+// TODO: DMA? SSP0? SSP0 should have a buffer, which would be very nice.
+uint16_t transfer_spi_bytes(uint16_t data) {
+ SPI->SPDR = (uint32_t)data;
+ while (!(SPI->SPSR & 0x80));
+ return SPI->SPDR;
+}
+
+void disable_gyro_csel (void) {
+ // Set the CSEL pin high to deselect it.
+ GPIO0->FIOSET = 0x00010000;
+}
+
+void enable_gyro_csel (void) {
+ // Clear the CSEL pin high to select it.
+ GPIO0->FIOCLR = 0x00010000;
+}
+
+void SPI_IRQHandler(void) {
+ int status = SPI->SPSR;
+ if (status & 0x80) {
+ // Transfer completed.
+ }
+
+ // Clear the interrupt?
+ SPI->SPINT = 0x00000001;
+}
diff --git a/gyro_board/src/usb/spi.h b/gyro_board/src/usb/spi.h
new file mode 100644
index 0000000..6dbc511
--- /dev/null
+++ b/gyro_board/src/usb/spi.h
@@ -0,0 +1,9 @@
+#ifndef __SPI_H__
+#define __SPI_H__
+
+void spi_init (void);
+uint16_t transfer_spi_bytes(uint16_t data);
+void disable_gyro_csel (void);
+void enable_gyro_csel (void);
+
+#endif // __SPI_H__
diff --git a/gyro_board/src/usb/syscalls.c b/gyro_board/src/usb/syscalls.c
new file mode 100644
index 0000000..b01ad48
--- /dev/null
+++ b/gyro_board/src/usb/syscalls.c
@@ -0,0 +1,82 @@
+/* Don't need anything here. */
+
+#include <stdlib.h>
+#include <sys/stat.h>
+
+int _read_r(struct _reent *r, int file, char * ptr, int len)
+{
+ (void) r;
+ (void) file;
+ (void) ptr;
+ (void) len;
+ return -1;
+}
+
+/***************************************************************************/
+
+int _lseek_r(struct _reent *r, int file, int ptr, int dir)
+{
+ (void) r;
+ (void) file;
+ (void) ptr;
+ (void) dir;
+
+ return 0;
+}
+
+/***************************************************************************/
+
+int _write_r(struct _reent *r, int file, char * ptr, int len)
+{
+ (void) r;
+ (void) file;
+ (void) ptr;
+ (void) len;
+
+ return 0;
+}
+
+/***************************************************************************/
+
+int _close_r(struct _reent *r, int file)
+{
+ (void) r;
+ (void) file;
+
+ return 0;
+}
+
+/***************************************************************************/
+
+caddr_t _sbrk_r(struct _reent *r, int incr)
+{
+ (void) r;
+ (void) incr;
+
+ return 0;
+}
+
+/***************************************************************************/
+
+int _fstat_r(struct _reent *r, int file, struct stat * st)
+{
+ (void) r;
+ (void) file;
+ (void) st;
+
+ return 0;
+}
+
+/***************************************************************************/
+
+int _isatty_r(struct _reent *r, int fd)
+{
+ (void) r;
+ (void) fd;
+
+ return 0;
+}
+
+
+
+
diff --git a/gyro_board/src/usb/system_LPC17xx.h b/gyro_board/src/usb/system_LPC17xx.h
new file mode 100644
index 0000000..0f7d698
--- /dev/null
+++ b/gyro_board/src/usb/system_LPC17xx.h
@@ -0,0 +1,40 @@
+/******************************************************************************
+ * @file: system_LPC17xx.h
+ * @purpose: CMSIS Cortex-M3 Device Peripheral Access Layer Header File
+ * for the NXP LPC17xx Device Series
+ * @version: V1.0
+ * @date: 25. Nov. 2008
+ *----------------------------------------------------------------------------
+ *
+ * Copyright (C) 2008 ARM Limited. All rights reserved.
+ *
+ * ARM Limited (ARM) is supplying this software for use with Cortex-M3
+ * processor based microcontrollers. This file can be freely distributed
+ * within development tools that are supporting such ARM based processors.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED
+ * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
+ * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR
+ * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
+ *
+ ******************************************************************************/
+
+
+#ifndef __SYSTEM_LPC17xx_H
+#define __SYSTEM_LPC17xx_H
+
+extern uint32_t SystemFrequency; /*!< System Clock Frequency (Core Clock) */
+
+
+/**
+ * Initialize the system
+ *
+ * @param none
+ * @return none
+ *
+ * @brief Setup the microcontroller system.
+ * Initialize the System and update the SystemFrequency variable.
+ */
+extern void SystemInit(void);
+#endif
diff --git a/gyro_board/src/usb/test.py b/gyro_board/src/usb/test.py
new file mode 100644
index 0000000..3344543
--- /dev/null
+++ b/gyro_board/src/usb/test.py
@@ -0,0 +1,44 @@
+#!/usr/bin/python
+
+global DeviceName, AddAction, RemoveAction
+DeviceName = 'usb_device_46d_c408_noserial' # Logitech Trackball
+AddAction = 'xmodmap -e "pointer = 3 2 1 4 5 6 7 9 8"'
+RemoveAction = 'xmodmap -e "pointer = 1 2 3 4 5 6 7 8 9"'
+
+import dbus # needed to do anything
+import dbus.decorators # needed to receive messages
+import dbus.glib # needed to receive messages
+import gobject # needed to loop & monitor
+import os # needed to
+
+def add_device(*args, **keywords):
+ Path = args[0].split('/')
+ if Path[-1] == DeviceName: # Device found
+ os.system(AddAction)
+
+def remove_device(*args, **keywords):
+ Path = args[0].split('/')
+ if Path[-1] == DeviceName: # Device found
+ os.system(RemoveAction)
+
+bus = dbus.SystemBus() # connect to system bus
+hal_manager_obj = bus.get_object('org.freedesktop.Hal', '/org/freedesktop/Hal/Manager')
+hal_manager = dbus.Interface(hal_manager_obj, 'org.freedesktop.Hal.Manager')
+
+# Add listeners for all devices being added or removed
+bus.add_signal_receiver(add_device, 'DeviceAdded', 'org.freedesktop.Hal.Manager',
+ 'org.freedesktop.Hal', '/org/freedesktop/Hal/Manager')
+bus.add_signal_receiver(remove_device, 'DeviceRemoved', 'org.freedesktop.Hal.Manager',
+ 'org.freedesktop.Hal', '/org/freedesktop/Hal/Manager')
+
+# get list of all devices, determine if device is connected
+device_names = hal_manager.GetAllDevices()
+for name in device_names:
+ Path = name.split('/')
+ if Path[-1] == DeviceName: # Device found
+ os.system(AddAction)
+ break # no need to keep looking
+
+# monitor
+loop = gobject.MainLoop()
+loop.run()
diff --git a/gyro_board/src/usb/test2.py b/gyro_board/src/usb/test2.py
new file mode 100644
index 0000000..773446b
--- /dev/null
+++ b/gyro_board/src/usb/test2.py
@@ -0,0 +1,5 @@
+import pyudev
+context = pyudev.Context()
+
+devices = context.list_devices()
+print devices
diff --git a/gyro_board/src/usb_driver/90-aschuh.rules b/gyro_board/src/usb_driver/90-aschuh.rules
new file mode 100644
index 0000000..7e7699e
--- /dev/null
+++ b/gyro_board/src/usb_driver/90-aschuh.rules
@@ -0,0 +1 @@
+KERNEL=="aschuh[0-9]*",GROUP="dialout"
diff --git a/gyro_board/src/usb_driver/Makefile b/gyro_board/src/usb_driver/Makefile
new file mode 100644
index 0000000..d7f5b55
--- /dev/null
+++ b/gyro_board/src/usb_driver/Makefile
@@ -0,0 +1,8 @@
+obj-m := deploy-module.o
+deploy-module-y := usb-aschuh_can_driver.o
+
+all:
+ @make -C /lib/modules/`uname -r | tr -d '\n'`/build M=`pwd` modules
+
+clean:
+ @make -C /lib/modules/`uname -r | tr -d '\n'`/build M=`pwd` clean
diff --git a/gyro_board/src/usb_driver/README b/gyro_board/src/usb_driver/README
new file mode 100644
index 0000000..7325d87
--- /dev/null
+++ b/gyro_board/src/usb_driver/README
@@ -0,0 +1,8 @@
+To build, run
+
+make -C /lib/modules/`uname -r | tr -d '\n'`/build M=`pwd` modules
+
+Where 2.6.38... is what you get when you run uname -r
+
+To use from a dialout user (not root)
+cp 90-aschuh.rules /etc/udev/rules.d/
diff --git a/gyro_board/src/usb_driver/aschuh_dev_cat.rb b/gyro_board/src/usb_driver/aschuh_dev_cat.rb
new file mode 100755
index 0000000..2c314d5
--- /dev/null
+++ b/gyro_board/src/usb_driver/aschuh_dev_cat.rb
@@ -0,0 +1,23 @@
+#!/usr/bin/ruby
+
+device_number = 0
+max_device_number = 1
+device = nil
+while !(device)
+ begin
+ device = File.open("/dev/aschuh#{device_number}","r+")
+ rescue
+ puts("Opening /dev/aschuh#{device_number} failed")
+ sleep(0.2)
+ device_number += 1
+ if(device_number == max_device_number)
+ device_number = 0
+ end
+ end
+end
+
+# Set the device in debug mode to view debug prints.
+device.ioctl(1,254)
+while true
+ print device.read(1)
+end
diff --git a/gyro_board/src/usb_driver/usb-aschuh_can_device.c b/gyro_board/src/usb_driver/usb-aschuh_can_device.c
new file mode 100644
index 0000000..400cc91
--- /dev/null
+++ b/gyro_board/src/usb_driver/usb-aschuh_can_device.c
@@ -0,0 +1,190 @@
+#include "usb-aschuh_can_driver.h"
+#include "usb-aschuh_can_device.h"
+
+#define to_aschuh_dev(d) container_of(d, struct aschuh_dev, kref)
+static void aschuh_dev_delete(struct kref *kref)
+{
+ struct aschuh_dev *dev = to_aschuh_dev(kref);
+
+ usb_free_urb(dev->bulk.in_urb);
+ usb_free_urb(dev->intr.in_urb);
+ usb_put_dev(dev->udev);
+ kfree(dev->bulk.in_buffer);
+ kfree(dev->intr.in_buffer);
+ kfree(dev);
+}
+
+#include "usb-aschuh_fops_read.c"
+#include "usb-aschuh_fops_write.c"
+#include "usb-aschuh_fops_open.c"
+#include "usb-aschuh_fops_ioctl.c"
+#include "usb-aschuh_fops_release.c"
+
+static const struct file_operations aschuh_dev_fops = {
+ .owner = THIS_MODULE,
+ .read = aschuh_dev_read,
+ .write = aschuh_dev_write,
+ .open = aschuh_dev_open,
+ .release = aschuh_dev_release,
+ .flush = NULL,
+ .llseek = NULL,
+ .unlocked_ioctl = aschuh_dev_ioctl,
+};
+
+static int init_in_channel(struct aschuh_chan *chan,
+ struct usb_endpoint_descriptor *endpoint){
+ size_t buffer_size;
+ buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
+ chan->in_size = buffer_size;
+ chan->in_endpointAddr = endpoint->bEndpointAddress;
+ chan->in_buffer = kmalloc(buffer_size, GFP_KERNEL);
+ if (!chan->in_buffer) {
+ err("Could not allocate bulk_in_buffer");
+ return -1;
+ }
+ chan->in_urb = usb_alloc_urb(0, GFP_KERNEL);
+ if (!chan->in_urb) {
+ err("Could not allocate bulk_in_urb");
+ return -1;
+ }
+ return 0;
+}
+int aschuh_dev_connect_endpoints(struct aschuh_dev *dev,
+ struct usb_host_interface *iface_desc){
+ struct usb_endpoint_descriptor *endpoint;
+ int i,rv;
+ for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
+ endpoint = &iface_desc->endpoint[i].desc;
+
+ if (!dev->bulk.in_endpointAddr &&
+ usb_endpoint_is_bulk_in(endpoint)) {
+ /* we found a bulk in endpoint */
+ printk("ASCHUH: found_bulk_in : 0x%x \n",endpoint->bEndpointAddress);
+ if((rv = init_in_channel(&dev->bulk,endpoint)))
+ return rv;
+ }
+ if (!dev->bulk.out_endpointAddr &&
+ usb_endpoint_is_bulk_out(endpoint)) {
+ /* we found a bulk out endpoint */
+ printk("ASCHUH: found_bulk_out : 0x%x \n",endpoint->bEndpointAddress);
+ dev->bulk.out_endpointAddr = endpoint->bEndpointAddress;
+ }
+ if (!dev->intr.in_endpointAddr &&
+ usb_endpoint_is_int_in(endpoint)) {
+ /* we found a bulk in endpoint */
+ printk("ASCHUH: found_intr_in : 0x%x \n",endpoint->bEndpointAddress);
+ if((rv = init_in_channel(&dev->intr,endpoint)))
+ return rv;
+ dev->intr.bEndpointInterval = endpoint->bInterval;
+ }
+ if (!dev->intr.out_endpointAddr &&
+ usb_endpoint_is_int_out(endpoint)) {
+ /* we found a intr out endpoint */
+ printk("ASCHUH: found_intr_out : 0x%x \n",endpoint->bEndpointAddress);
+ dev->intr.out_endpointAddr = endpoint->bEndpointAddress;
+ }
+ }
+ if (!(dev->bulk.in_endpointAddr && dev->bulk.out_endpointAddr)) {
+ err("Could not find both bulk-in and bulk-out endpoints");
+ return -1;
+ }
+ if (!(dev->intr.in_endpointAddr && dev->intr.out_endpointAddr)) {
+ err("Could not find both intr-in and intr-out endpoints");
+ return -1;
+ }
+ return 0;
+}
+
+#define ASCHUH_DEV_MINOR_BASE 192
+//used in getting the file in /dev/
+static struct usb_class_driver aschuh_dev_class = {
+ .name = "aschuh%d",
+ .fops = &aschuh_dev_fops,
+ .minor_base = ASCHUH_DEV_MINOR_BASE,
+};
+static void init_aschuh_chan(struct aschuh_chan *chan,struct aschuh_dev *dev){
+ sema_init(&chan->limit_sem, WRITES_IN_FLIGHT);
+ mutex_init(&chan->io_mutex);
+ spin_lock_init(&chan->err_lock);
+ init_completion(&chan->in_completion);
+ chan->owner = dev;
+}
+static int aschuh_can_driver_probe(struct usb_interface *interface,
+ const struct usb_device_id *id)
+{
+ // New Drivers Show up Here!
+ struct aschuh_dev *dev;
+ int retval = -ENOMEM;
+
+ /* allocate memory for our device state and initialize it */
+ dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+ if (!dev) {
+ err("Out of memory");
+ goto error;
+ }
+ kref_init(&dev->kref);
+
+ init_usb_anchor(&dev->submitted);
+ init_aschuh_chan(&dev->bulk,dev);
+ init_aschuh_chan(&dev->intr,dev);
+
+
+ dev->udev = usb_get_dev(interface_to_usbdev(interface));
+ dev->interface = interface;
+
+ /* set up the endpoint information */
+ /* use only the first bulk-in and bulk-out endpoints */
+ if(aschuh_dev_connect_endpoints(dev,interface->cur_altsetting))
+ goto error;
+
+ /* save our data pointer in this interface device */
+ usb_set_intfdata(interface, dev);
+
+ /* we can register the device now, as it is ready */
+ retval = usb_register_dev(interface, &aschuh_dev_class);
+ if (retval) {
+ /* something prevented us from registering this driver */
+ err("Not able to get a minor for this device.");
+ usb_set_intfdata(interface, NULL);
+ goto error;
+ }
+
+ printk("CAN driver has been probed - %d\n",interface->minor);
+ /* let the user know what node this device is now attached to */
+ dev_info(&interface->dev,
+ "USB aschuh_dev device now attached to USB_ASCHUH-%d",
+ interface->minor);
+ return 0;
+
+error:
+ if (dev)
+ /* this frees allocated memory */
+ kref_put(&dev->kref, aschuh_dev_delete);
+ return -ENOMEM;
+}
+static void aschuh_can_driver_disconnect(struct usb_interface *interface)
+{
+ struct aschuh_dev *dev;
+ int minor = interface->minor;
+
+ dev = usb_get_intfdata(interface);
+ usb_set_intfdata(interface, NULL);
+
+ /* give back our minor */
+ usb_deregister_dev(interface, &aschuh_dev_class);
+
+ /* prevent more I/O from starting */
+ mutex_lock(&dev->bulk.io_mutex);
+ mutex_lock(&dev->intr.io_mutex);
+ dev->interface = NULL;
+ mutex_unlock(&dev->bulk.io_mutex);
+ mutex_unlock(&dev->intr.io_mutex);
+
+ usb_kill_anchored_urbs(&dev->submitted);
+
+ /* decrement our usage count */
+ kref_put(&dev->kref, aschuh_dev_delete);
+
+ dev_info(&interface->dev, "USB aschuh_dev #%d now disconnected", minor);
+}
+
diff --git a/gyro_board/src/usb_driver/usb-aschuh_can_device.h b/gyro_board/src/usb_driver/usb-aschuh_can_device.h
new file mode 100644
index 0000000..0065839
--- /dev/null
+++ b/gyro_board/src/usb_driver/usb-aschuh_can_device.h
@@ -0,0 +1,37 @@
+#ifndef _USB_ASCHUH_CAN_DEVICE__H_
+#define _USB_ASCHUH_CAN_DEVICE__H_
+struct aschuh_dev;
+struct aschuh_chan{
+ struct urb *in_urb; /* the urb to read data with */
+ unsigned char *in_buffer; /* the buffer to receive data */
+ size_t in_size; /* the size of the receive buffer */
+ size_t in_filled; /* number of bytes in the buffer */
+ size_t in_copied; /* already copied to user space */
+ __u8 in_endpointAddr; /* the address of the in endpoint */
+ __u8 out_endpointAddr; /* the address of the out endpoint */
+ int errors; /* the last request tanked */
+ spinlock_t err_lock; /* lock for errors */
+ struct mutex io_mutex; /* synchronize I/O with disconnect */
+ struct semaphore limit_sem; /* limiting the number of writes in progress */
+ struct completion in_completion; /* to wait for an ongoing read */
+ bool ongoing_read; /* a read is going on */
+ bool processed_urb; /* indicates we haven't processed the urb */
+ __u8 bEndpointInterval; /* used in fill_int_urb */
+ struct aschuh_dev *owner;
+};
+
+struct aschuh_dev{
+ struct usb_device *udev; /* the usb device for this device */
+ struct usb_interface *interface; /* the interface for this device */
+ struct usb_anchor submitted; /* in case we need to retract our submissions */
+ struct aschuh_chan bulk; /* channel for handling bulk requests */
+ struct aschuh_chan intr;
+ int open_count; /* count the number of openers */
+ struct kref kref;
+};
+static void aschuh_can_driver_disconnect(struct usb_interface *interface);
+static int aschuh_can_driver_probe(struct usb_interface *interface,
+ const struct usb_device_id *id);
+
+
+#endif
diff --git a/gyro_board/src/usb_driver/usb-aschuh_can_driver.c b/gyro_board/src/usb_driver/usb-aschuh_can_driver.c
new file mode 100644
index 0000000..44a7f6e
--- /dev/null
+++ b/gyro_board/src/usb_driver/usb-aschuh_can_driver.c
@@ -0,0 +1,46 @@
+#include "usb-aschuh_can_driver.h"
+#include "usb-aschuh_can_device.h"
+#define WRITES_IN_FLIGHT 8
+static const struct usb_device_id aschuh_can_device_table[] = {
+ { USB_DEVICE(VENDOR_ID, PRODUCT_ID) },
+ { } /*terminating entry */
+};
+MODULE_DEVICE_TABLE(usb, aschuh_can_device_table);
+
+
+#include "usb-aschuh_can_device.c"
+static struct usb_driver aschuh_can_driver = {
+ .name = "aschuh_can_driver",
+ .probe = aschuh_can_driver_probe,
+ .disconnect = aschuh_can_driver_disconnect,
+ .suspend = NULL,
+ .resume = NULL,
+ .pre_reset = NULL,
+ .post_reset = NULL,
+ .id_table = aschuh_can_device_table,
+ .supports_autosuspend = 0,
+};
+
+static int __init aschuh_can_driver_init(void)
+{
+ int result;
+
+ result = usb_register(&aschuh_can_driver);
+ if(result)
+ err("usb_register failed. Error number %d",result);
+
+ printk("INIT CAN driver\n");
+ return result;
+}
+static void __exit aschuh_can_driver_exit(void)
+{
+ usb_deregister(&aschuh_can_driver);
+ printk("Closing CAN driver\n");
+}
+
+
+module_init(aschuh_can_driver_init);
+module_exit(aschuh_can_driver_exit);
+
+
+MODULE_LICENSE("GPL"); //not sure about this.
diff --git a/gyro_board/src/usb_driver/usb-aschuh_can_driver.h b/gyro_board/src/usb_driver/usb-aschuh_can_driver.h
new file mode 100644
index 0000000..73fcb1f
--- /dev/null
+++ b/gyro_board/src/usb_driver/usb-aschuh_can_driver.h
@@ -0,0 +1,21 @@
+#ifndef __USB_ASCHUH_CAN_DRIVER__H_
+#define __USB_ASCHUH_CAN_DRIVER__H_
+
+#include <linux/kernel.h>
+#include <linux/errno.h>
+#include <linux/init.h>
+#include <linux/slab.h>
+#include <linux/module.h>
+#include <linux/kref.h>
+#include <linux/uaccess.h>
+#include <linux/usb.h>
+#include <linux/mutex.h>
+
+struct aschuh_can_device {
+ struct usb_device *udev;
+ struct usb_interface *interface;
+};
+#define VENDOR_ID 0x1424
+#define PRODUCT_ID 0xd243
+
+#endif
diff --git a/gyro_board/src/usb_driver/usb-aschuh_fops_ioctl.c b/gyro_board/src/usb_driver/usb-aschuh_fops_ioctl.c
new file mode 100644
index 0000000..4229444
--- /dev/null
+++ b/gyro_board/src/usb_driver/usb-aschuh_fops_ioctl.c
@@ -0,0 +1,19 @@
+static long aschuh_dev_ioctl(struct file *file,
+ unsigned int cmd, unsigned long arg)
+{
+ struct aschuh_chan *new_chan;
+ struct aschuh_chan *chan = file->private_data;
+ struct aschuh_dev *dev = chan->owner;
+ printk("ioctl(%d,%d)\n",cmd,(int)arg);
+ if(cmd == 1){
+ if(arg == 254){
+ new_chan = &dev->bulk;
+ }else{
+ new_chan = &dev->intr;
+ }
+ file->private_data = new_chan;
+ return 0;
+ }else{
+ return 0;
+ }
+}
diff --git a/gyro_board/src/usb_driver/usb-aschuh_fops_open.c b/gyro_board/src/usb_driver/usb-aschuh_fops_open.c
new file mode 100644
index 0000000..5263acd
--- /dev/null
+++ b/gyro_board/src/usb_driver/usb-aschuh_fops_open.c
@@ -0,0 +1,60 @@
+static struct usb_driver aschuh_can_driver;
+static int aschuh_dev_open(struct inode *inode, struct file *file)
+{
+ struct aschuh_dev *dev;
+ struct usb_interface *interface;
+ int subminor;
+
+ subminor = iminor(inode);
+ printk("opening device!!!\n");
+ interface = usb_find_interface(&aschuh_can_driver, subminor);
+ if (!interface) {
+ err("%s - error, can't find device for minor %d",
+ __func__, subminor);
+ return( -ENODEV);
+ }
+
+ dev = usb_get_intfdata(interface);
+ if (!dev) {
+ return( -ENODEV);
+ }
+
+ /* increment our usage count for the device */
+ kref_get(&dev->kref);
+
+ /* lock the device to allow correctly handling errors
+ * in resumption */
+ mutex_lock(&dev->bulk.io_mutex);
+ mutex_lock(&dev->intr.io_mutex);
+ //TODO(parker): Hey folks! I just commented this out.
+ // it would be a good thing to check what usb_autopm_get_interface
+ // actually does :P. Good thing to check if you find errors.
+ /*
+ if (!dev->open_count++) {
+ int retval = usb_autopm_get_interface(interface);
+ if (retval) {
+ dev->open_count--;
+ mutex_unlock(&dev->bulk.io_mutex);
+ mutex_unlock(&dev->intr.io_mutex);
+ kref_put(&dev->kref, aschuh_dev_delete);
+ return retval;
+ }
+ }
+ */
+ /* else { //uncomment this block if you want exclusive open
+ retval = -EBUSY;
+ dev->open_count--;
+ mutex_unlock(&dev->io_mutex);
+ kref_put(&dev->kref, aschuh_dev_delete);
+ goto exit;
+ } */
+ /* prevent the device from being autosuspended */
+
+ /* save our object in the file's private structure */
+ file->private_data = &dev->intr;
+ mutex_unlock(&dev->bulk.io_mutex);
+ mutex_unlock(&dev->intr.io_mutex);
+
+ return 0;
+}
+
diff --git a/gyro_board/src/usb_driver/usb-aschuh_fops_read.c b/gyro_board/src/usb_driver/usb-aschuh_fops_read.c
new file mode 100644
index 0000000..912e4b6
--- /dev/null
+++ b/gyro_board/src/usb_driver/usb-aschuh_fops_read.c
@@ -0,0 +1,207 @@
+static void aschuh_chan_read_callback(struct urb *urb)
+{
+ struct aschuh_chan *chan;
+
+ chan = urb->context;
+
+ spin_lock(&chan->err_lock);
+ /* sync/async unlink faults aren't errors */
+ if (urb->status) {
+ if (!(urb->status == -ENOENT ||
+ urb->status == -ECONNRESET ||
+ urb->status == -ESHUTDOWN))
+ err("%s - nonzero write bulk status received: %d",
+ __func__, urb->status);
+
+ chan->errors = urb->status;
+ } else {
+ chan->in_filled = urb->actual_length;
+ }
+ chan->ongoing_read = 0;
+ spin_unlock(&chan->err_lock);
+
+ complete(&chan->in_completion);
+}
+
+static int aschuh_chan_submit(struct aschuh_chan *chan){
+ int rv;
+ /* tell everybody to leave the URB alone */
+ spin_lock_irq(&chan->err_lock);
+ chan->ongoing_read = 1;
+ spin_unlock_irq(&chan->err_lock);
+
+
+ /* do it */
+ rv = usb_submit_urb(chan->in_urb, GFP_KERNEL);
+ if (rv < 0) {
+ err("%s - failed submitting read urb, error %d",
+ __func__, rv);
+ chan->in_filled = 0;
+ rv = (rv == -ENOMEM) ? rv : -EIO;
+ spin_lock_irq(&chan->err_lock);
+ chan->ongoing_read = 0;
+ spin_unlock_irq(&chan->err_lock);
+ }
+
+ return rv;
+}
+
+
+static int aschuh_dev_bulk_do_read_io(struct aschuh_dev *dev,size_t count)
+{
+ struct aschuh_chan *chan = &dev->bulk;
+ /* prepare a read */
+ usb_fill_bulk_urb(chan->in_urb, dev->udev,
+ usb_rcvbulkpipe(dev->udev, chan->in_endpointAddr),
+ chan->in_buffer,
+ min(chan->in_size, count),
+ aschuh_chan_read_callback,
+ chan);
+ return aschuh_chan_submit(chan);
+}
+
+static int aschuh_dev_intr_do_read_io(struct aschuh_dev *dev,size_t count)
+{
+ struct aschuh_chan *chan = &dev->intr;
+ /* prepare a read */
+ usb_fill_int_urb(chan->in_urb, dev->udev,
+ usb_rcvintpipe(dev->udev, chan->in_endpointAddr),
+ chan->in_buffer,
+ chan->in_size,
+ aschuh_chan_read_callback,
+ chan,chan->bEndpointInterval);
+ return aschuh_chan_submit(chan);
+}
+
+static ssize_t aschuh_dev_read(struct file *file, char *buffer, size_t count,
+ loff_t *ppos)
+{
+ int rv;
+ bool ongoing_io;
+ struct aschuh_chan *chan = file->private_data;
+ struct aschuh_dev *dev = chan->owner;
+ enum chan_types{
+ BULK_CHAN, INTR_CHAN
+ } chan_type = INTR_CHAN;
+ size_t available;
+ if(chan == &dev->intr)
+ chan_type = INTR_CHAN;
+ else if(chan == &dev->bulk){
+ chan_type = BULK_CHAN;
+ }else{
+ printk("Chan type not debug or data!!!");
+ return 0;
+ }
+
+
+ /* if we cannot read at all, return EOF */
+ if (!chan->in_urb || !count)
+ return 0;
+
+ rv = mutex_lock_interruptible(&chan->io_mutex);
+ if (rv < 0)
+ return rv;
+
+ if (!dev->interface) { /* disconnect() was called */
+ rv = -ENODEV;
+ goto exit;
+ }
+
+ /* if IO is under way, we must not touch things */
+ while(true){
+ spin_lock_irq(&chan->err_lock);
+ ongoing_io = chan->ongoing_read;
+ spin_unlock_irq(&chan->err_lock);
+
+ if (ongoing_io) {
+ /* nonblocking IO shall not wait */
+ if (file->f_flags & O_NONBLOCK) {
+ rv = -EAGAIN;
+ goto exit;
+ }
+ /*
+ * IO may take forever
+ * hence wait in an interruptible state
+ */
+ mutex_unlock(&chan->io_mutex);
+ rv = wait_for_completion_interruptible(&chan->in_completion);
+ if (rv < 0)
+ return rv;
+
+ rv = mutex_lock_interruptible(&chan->io_mutex);
+ if (rv < 0)
+ return rv;
+ /*
+ * by waiting we also semiprocessed the urb
+ * we must finish now
+ */
+ chan->in_copied = 0;
+ }
+
+
+ /* errors must be reported */
+ rv = chan->errors;
+ if (rv < 0) {
+ /* any error is reported once */
+ chan->errors = 0;
+ /* to preserve notifications about reset */
+ rv = (rv == -EPIPE) ? rv : -EIO;
+ /* no data to deliver */
+ chan->in_filled = 0;
+ /* report it */
+ goto exit;
+ }
+ /*
+ * if the buffer is filled we may satisfy the read
+ * else we need to start IO
+ */
+
+ /* we had read data */
+ available = chan->in_filled - chan->in_copied;
+
+ if (!chan->in_filled || !available) {
+ /*
+ * all data has been used or no data is avaiable.
+ * actual IO needs to be done
+ */
+ if(chan_type == INTR_CHAN)
+ rv = aschuh_dev_intr_do_read_io(dev, count);
+ else if(chan_type == BULK_CHAN){
+ rv = aschuh_dev_bulk_do_read_io(dev, count);
+ }
+ if (rv < 0)
+ goto exit;
+ }else{
+ size_t chunk = min(available, count);
+ /*
+ * data is available
+ * chunk tells us how much shall be copied
+ */
+
+ if (copy_to_user(buffer,
+ chan->in_buffer + chan->in_copied,
+ chunk))
+ rv = -EFAULT;
+ else
+ rv = chunk;
+
+ chan->in_copied += chunk;
+
+ /*
+ * if we are asked for more than we have,
+ * we start IO but don't wait
+ */
+ //if (available < count){
+ // if(chan_type == INTR_CHAN)
+ // aschuh_dev_intr_do_read_io(dev, count);
+ // else if(chan_type == BULK_CHAN){
+ // aschuh_dev_bulk_do_read_io(dev, count);
+ // }
+ //}
+ goto exit;
+ }
+ }
+exit:
+ mutex_unlock(&chan->io_mutex);
+ return rv;
+}
diff --git a/gyro_board/src/usb_driver/usb-aschuh_fops_release.c b/gyro_board/src/usb_driver/usb-aschuh_fops_release.c
new file mode 100644
index 0000000..259a1b9
--- /dev/null
+++ b/gyro_board/src/usb_driver/usb-aschuh_fops_release.c
@@ -0,0 +1,22 @@
+static int aschuh_dev_release(struct inode *inode, struct file *file)
+{
+ struct aschuh_dev *dev;
+ printk("closing device!!!\n");
+
+ dev = ((struct aschuh_chan *)file->private_data)->owner;
+ if (dev == NULL)
+ return -ENODEV;
+
+ /* allow the device to be autosuspended */
+ //mutex_lock(&dev->bulk.io_mutex);
+ //mutex_lock(&dev->intr.io_mutex);
+ //if (!--dev->open_count && dev->interface)
+ // usb_autopm_put_interface(dev->interface);
+ //mutex_unlock(&dev->bulk.io_mutex);
+ //mutex_unlock(&dev->intr.io_mutex);
+
+ /* decrement the count on our device */
+ kref_put(&dev->kref, aschuh_dev_delete);
+ return 0;
+}
+
diff --git a/gyro_board/src/usb_driver/usb-aschuh_fops_write.c b/gyro_board/src/usb_driver/usb-aschuh_fops_write.c
new file mode 100644
index 0000000..7a9e00e
--- /dev/null
+++ b/gyro_board/src/usb_driver/usb-aschuh_fops_write.c
@@ -0,0 +1,144 @@
+#include <linux/usb.h>
+static void aschuh_dev_write_callback(struct urb *urb)
+{
+ struct aschuh_chan *chan;
+
+ chan = urb->context;
+ /* sync/async unlink faults aren't errors */
+ if (urb->status) {
+ if (!(urb->status == -ENOENT ||
+ urb->status == -ECONNRESET ||
+ urb->status == -ESHUTDOWN))
+ err("%s - nonzero write bulk status received: %d",
+ __func__, urb->status);
+
+ spin_lock(&chan->err_lock);
+ chan->errors = urb->status;
+ spin_unlock(&chan->err_lock);
+ }
+
+ /* free up our allocated buffer */
+ usb_free_coherent(urb->dev, urb->transfer_buffer_length,
+ urb->transfer_buffer, urb->transfer_dma);
+ up(&chan->limit_sem);
+}
+//#define WRITES_IN_FLIGHT 8
+#define MAX_TRANSFER 64
+
+static ssize_t aschuh_dev_write(struct file *file, const char *user_buffer,
+ size_t count, loff_t *ppos)
+{
+ struct aschuh_chan *chan;
+ struct aschuh_dev *dev;
+ int retval = 0;
+ struct urb *urb = NULL;
+ char *buf = NULL;
+ size_t writesize = min(count, (size_t)MAX_TRANSFER);
+
+ chan = file->private_data;
+ dev = chan->owner;
+
+ /* verify that we actually have some data to write */
+ if (count == 0)
+ goto exit;
+
+ /*
+ * limit the number of URBs in flight to stop a user from using up all
+ * RAM
+ */
+ if (!(file->f_flags & O_NONBLOCK)) {
+ if (down_interruptible(&chan->limit_sem)) {
+ retval = -ERESTARTSYS;
+ goto exit;
+ }
+ } else {
+ if (down_trylock(&chan->limit_sem)) {
+ retval = -EAGAIN;
+ goto exit;
+ }
+ }
+
+ spin_lock_irq(&chan->err_lock);
+ retval = chan->errors;
+ if (retval < 0) {
+ /* any error is reported once */
+ chan->errors = 0;
+ /* to preserve notifications about reset */
+ retval = (retval == -EPIPE) ? retval : -EIO;
+ }
+ spin_unlock_irq(&chan->err_lock);
+ if (retval < 0)
+ goto error;
+
+ /* create a urb, and a buffer for it, and copy the data to the urb */
+ urb = usb_alloc_urb(0, GFP_KERNEL);
+ if (!urb) {
+ retval = -ENOMEM;
+ goto error;
+ }
+
+ buf = usb_alloc_coherent(dev->udev, writesize, GFP_KERNEL,
+ &urb->transfer_dma);
+ if (!buf) {
+ retval = -ENOMEM;
+ goto error;
+ }
+
+ if (copy_from_user(buf, user_buffer, writesize)) {
+ retval = -EFAULT;
+ goto error;
+ }
+
+ /* this lock makes sure we don't submit URBs to gone devices */
+ mutex_lock(&chan->io_mutex);
+ if (!dev->interface) { /* disconnect() was called */
+ mutex_unlock(&chan->io_mutex);
+ printk("Should be exiting shortly.... stay tuned for details\n");
+ retval = -ENODEV;
+ goto error;
+ }
+
+ /* initialize the urb properly */
+ if(chan == &dev->bulk){
+ usb_fill_bulk_urb(urb, dev->udev,
+ usb_sndbulkpipe(dev->udev, chan->out_endpointAddr),
+ buf, writesize, aschuh_dev_write_callback, chan);
+ }else{
+ usb_fill_int_urb(urb, dev->udev,
+ usb_sndintpipe(dev->udev, chan->out_endpointAddr),
+ buf, writesize, aschuh_dev_write_callback, chan,
+ chan->bEndpointInterval);
+ }
+ urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
+
+ usb_anchor_urb(urb, &dev->submitted);
+ /* send the data out the bulk port */
+ retval = usb_submit_urb(urb, GFP_KERNEL);
+ mutex_unlock(&chan->io_mutex);
+ if (retval) {
+ err("%s - failed submitting write urb, error %d", __func__,
+ retval);
+ usb_unanchor_urb(urb);
+ goto error;
+ }
+
+ /*
+ * release our reference to this urb, the USB core will eventually free
+ * it entirely
+ */
+ usb_free_urb(urb);
+
+
+ return writesize;
+
+error:
+ if (urb) {
+ usb_free_coherent(dev->udev, writesize, buf, urb->transfer_dma);
+ usb_free_urb(urb);
+ }
+ up(&chan->limit_sem);
+
+exit:
+ return retval;
+}
+
diff --git a/gyro_board/src/usb_driver/usb-skeleton.c b/gyro_board/src/usb_driver/usb-skeleton.c
new file mode 100644
index 0000000..1409724
--- /dev/null
+++ b/gyro_board/src/usb_driver/usb-skeleton.c
@@ -0,0 +1,713 @@
+/*
+ * USB Skeleton driver - 2.2
+ *
+ * Copyright (C) 2001-2004 Greg Kroah-Hartman (greg@kroah.com)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation, version 2.
+ *
+ * This driver is based on the 2.6.3 version of drivers/usb/usb-skeleton.c
+ * but has been rewritten to be easier to read and use.
+ *
+ */
+
+#include <linux/kernel.h>
+#include <linux/errno.h>
+#include <linux/init.h>
+#include <linux/slab.h>
+#include <linux/module.h>
+#include <linux/kref.h>
+#include <linux/uaccess.h>
+#include <linux/usb.h>
+#include <linux/mutex.h>
+
+
+/* Define these values to match your devices */
+#define USB_SKEL_VENDOR_ID 0xfff0
+#define USB_SKEL_PRODUCT_ID 0xfff0
+
+/* table of devices that work with this driver */
+static const struct usb_device_id skel_table[] = {
+ { USB_DEVICE(USB_SKEL_VENDOR_ID, USB_SKEL_PRODUCT_ID) },
+ { } /* Terminating entry */
+};
+MODULE_DEVICE_TABLE(usb, skel_table);
+
+
+/* Get a minor range for your devices from the usb maintainer */
+#define USB_SKEL_MINOR_BASE 192
+
+/* our private defines. if this grows any larger, use your own .h file */
+#define MAX_TRANSFER (PAGE_SIZE - 512)
+/* MAX_TRANSFER is chosen so that the VM is not stressed by
+ allocations > PAGE_SIZE and the number of packets in a page
+ is an integer 512 is the largest possible packet on EHCI */
+#define WRITES_IN_FLIGHT 8
+/* arbitrarily chosen */
+
+/* Structure to hold all of our device specific stuff */
+struct usb_skel {
+ struct usb_device *udev; /* the usb device for this device */
+ struct usb_interface *interface; /* the interface for this device */
+ struct semaphore limit_sem; /* limiting the number of writes in progress */
+ struct usb_anchor submitted; /* in case we need to retract our submissions */
+ struct urb *bulk_in_urb; /* the urb to read data with */
+ unsigned char *bulk_in_buffer; /* the buffer to receive data */
+ size_t bulk_in_size; /* the size of the receive buffer */
+ size_t bulk_in_filled; /* number of bytes in the buffer */
+ size_t bulk_in_copied; /* already copied to user space */
+ __u8 bulk_in_endpointAddr; /* the address of the bulk in endpoint */
+ __u8 bulk_out_endpointAddr; /* the address of the bulk out endpoint */
+ int errors; /* the last request tanked */
+ int open_count; /* count the number of openers */
+ bool ongoing_read; /* a read is going on */
+ bool processed_urb; /* indicates we haven't processed the urb */
+ spinlock_t err_lock; /* lock for errors */
+ struct kref kref;
+ struct mutex io_mutex; /* synchronize I/O with disconnect */
+ struct completion bulk_in_completion; /* to wait for an ongoing read */
+};
+#define to_skel_dev(d) container_of(d, struct usb_skel, kref)
+
+static struct usb_driver skel_driver;
+static void skel_draw_down(struct usb_skel *dev);
+
+static void skel_delete(struct kref *kref)
+{
+ struct usb_skel *dev = to_skel_dev(kref);
+
+ usb_free_urb(dev->bulk_in_urb);
+ usb_put_dev(dev->udev);
+ kfree(dev->bulk_in_buffer);
+ kfree(dev);
+}
+
+static int skel_open(struct inode *inode, struct file *file)
+{
+ struct usb_skel *dev;
+ struct usb_interface *interface;
+ int subminor;
+ int retval = 0;
+
+ subminor = iminor(inode);
+
+ interface = usb_find_interface(&skel_driver, subminor);
+ if (!interface) {
+ err("%s - error, can't find device for minor %d",
+ __func__, subminor);
+ retval = -ENODEV;
+ goto exit;
+ }
+
+ dev = usb_get_intfdata(interface);
+ if (!dev) {
+ retval = -ENODEV;
+ goto exit;
+ }
+
+ /* increment our usage count for the device */
+ kref_get(&dev->kref);
+
+ /* lock the device to allow correctly handling errors
+ * in resumption */
+ mutex_lock(&dev->io_mutex);
+
+ if (!dev->open_count++) {
+ retval = usb_autopm_get_interface(interface);
+ if (retval) {
+ dev->open_count--;
+ mutex_unlock(&dev->io_mutex);
+ kref_put(&dev->kref, skel_delete);
+ goto exit;
+ }
+ } /* else { //uncomment this block if you want exclusive open
+ retval = -EBUSY;
+ dev->open_count--;
+ mutex_unlock(&dev->io_mutex);
+ kref_put(&dev->kref, skel_delete);
+ goto exit;
+ } */
+ /* prevent the device from being autosuspended */
+
+ /* save our object in the file's private structure */
+ file->private_data = dev;
+ mutex_unlock(&dev->io_mutex);
+
+exit:
+ return retval;
+}
+
+static int skel_release(struct inode *inode, struct file *file)
+{
+ struct usb_skel *dev;
+
+ dev = file->private_data;
+ if (dev == NULL)
+ return -ENODEV;
+
+ /* allow the device to be autosuspended */
+ mutex_lock(&dev->io_mutex);
+ if (!--dev->open_count && dev->interface)
+ usb_autopm_put_interface(dev->interface);
+ mutex_unlock(&dev->io_mutex);
+
+ /* decrement the count on our device */
+ kref_put(&dev->kref, skel_delete);
+ return 0;
+}
+
+static int skel_flush(struct file *file, fl_owner_t id)
+{
+ struct usb_skel *dev;
+ int res;
+
+ dev = file->private_data;
+ if (dev == NULL)
+ return -ENODEV;
+
+ /* wait for io to stop */
+ mutex_lock(&dev->io_mutex);
+ skel_draw_down(dev);
+
+ /* read out errors, leave subsequent opens a clean slate */
+ spin_lock_irq(&dev->err_lock);
+ res = dev->errors ? (dev->errors == -EPIPE ? -EPIPE : -EIO) : 0;
+ dev->errors = 0;
+ spin_unlock_irq(&dev->err_lock);
+
+ mutex_unlock(&dev->io_mutex);
+
+ return res;
+}
+
+static void skel_read_bulk_callback(struct urb *urb)
+{
+ struct usb_skel *dev;
+
+ dev = urb->context;
+
+ spin_lock(&dev->err_lock);
+ /* sync/async unlink faults aren't errors */
+ if (urb->status) {
+ if (!(urb->status == -ENOENT ||
+ urb->status == -ECONNRESET ||
+ urb->status == -ESHUTDOWN))
+ err("%s - nonzero write bulk status received: %d",
+ __func__, urb->status);
+
+ dev->errors = urb->status;
+ } else {
+ dev->bulk_in_filled = urb->actual_length;
+ }
+ dev->ongoing_read = 0;
+ spin_unlock(&dev->err_lock);
+
+ complete(&dev->bulk_in_completion);
+}
+
+static int skel_do_read_io(struct usb_skel *dev, size_t count)
+{
+ int rv;
+
+ /* prepare a read */
+ usb_fill_bulk_urb(dev->bulk_in_urb,
+ dev->udev,
+ usb_rcvbulkpipe(dev->udev,
+ dev->bulk_in_endpointAddr),
+ dev->bulk_in_buffer,
+ min(dev->bulk_in_size, count),
+ skel_read_bulk_callback,
+ dev);
+ /* tell everybody to leave the URB alone */
+ spin_lock_irq(&dev->err_lock);
+ dev->ongoing_read = 1;
+ spin_unlock_irq(&dev->err_lock);
+
+ /* do it */
+ rv = usb_submit_urb(dev->bulk_in_urb, GFP_KERNEL);
+ if (rv < 0) {
+ err("%s - failed submitting read urb, error %d",
+ __func__, rv);
+ dev->bulk_in_filled = 0;
+ rv = (rv == -ENOMEM) ? rv : -EIO;
+ spin_lock_irq(&dev->err_lock);
+ dev->ongoing_read = 0;
+ spin_unlock_irq(&dev->err_lock);
+ }
+
+ return rv;
+}
+
+static ssize_t skel_read(struct file *file, char *buffer, size_t count,
+ loff_t *ppos)
+{
+ struct usb_skel *dev;
+ int rv;
+ bool ongoing_io;
+
+ dev = file->private_data;
+
+ /* if we cannot read at all, return EOF */
+ if (!dev->bulk_in_urb || !count)
+ return 0;
+
+ /* no concurrent readers */
+ rv = mutex_lock_interruptible(&dev->io_mutex);
+ if (rv < 0)
+ return rv;
+
+ if (!dev->interface) { /* disconnect() was called */
+ rv = -ENODEV;
+ goto exit;
+ }
+
+ /* if IO is under way, we must not touch things */
+retry:
+ spin_lock_irq(&dev->err_lock);
+ ongoing_io = dev->ongoing_read;
+ spin_unlock_irq(&dev->err_lock);
+
+ if (ongoing_io) {
+ /* nonblocking IO shall not wait */
+ if (file->f_flags & O_NONBLOCK) {
+ rv = -EAGAIN;
+ goto exit;
+ }
+ /*
+ * IO may take forever
+ * hence wait in an interruptible state
+ */
+ rv = wait_for_completion_interruptible(&dev->bulk_in_completion);
+ if (rv < 0)
+ goto exit;
+ /*
+ * by waiting we also semiprocessed the urb
+ * we must finish now
+ */
+ dev->bulk_in_copied = 0;
+ dev->processed_urb = 1;
+ }
+
+ if (!dev->processed_urb) {
+ /*
+ * the URB hasn't been processed
+ * do it now
+ */
+ wait_for_completion(&dev->bulk_in_completion);
+ dev->bulk_in_copied = 0;
+ dev->processed_urb = 1;
+ }
+
+ /* errors must be reported */
+ rv = dev->errors;
+ if (rv < 0) {
+ /* any error is reported once */
+ dev->errors = 0;
+ /* to preserve notifications about reset */
+ rv = (rv == -EPIPE) ? rv : -EIO;
+ /* no data to deliver */
+ dev->bulk_in_filled = 0;
+ /* report it */
+ goto exit;
+ }
+
+ /*
+ * if the buffer is filled we may satisfy the read
+ * else we need to start IO
+ */
+
+ if (dev->bulk_in_filled) {
+ /* we had read data */
+ size_t available = dev->bulk_in_filled - dev->bulk_in_copied;
+ size_t chunk = min(available, count);
+
+ if (!available) {
+ /*
+ * all data has been used
+ * actual IO needs to be done
+ */
+ rv = skel_do_read_io(dev, count);
+ if (rv < 0)
+ goto exit;
+ else
+ goto retry;
+ }
+ /*
+ * data is available
+ * chunk tells us how much shall be copied
+ */
+
+ if (copy_to_user(buffer,
+ dev->bulk_in_buffer + dev->bulk_in_copied,
+ chunk))
+ rv = -EFAULT;
+ else
+ rv = chunk;
+
+ dev->bulk_in_copied += chunk;
+
+ /*
+ * if we are asked for more than we have,
+ * we start IO but don't wait
+ */
+ if (available < count)
+ skel_do_read_io(dev, count - chunk);
+ } else {
+ /* no data in the buffer */
+ rv = skel_do_read_io(dev, count);
+ if (rv < 0)
+ goto exit;
+ else if (!(file->f_flags & O_NONBLOCK))
+ goto retry;
+ rv = -EAGAIN;
+ }
+exit:
+ mutex_unlock(&dev->io_mutex);
+ return rv;
+}
+
+static void skel_write_bulk_callback(struct urb *urb)
+{
+ struct usb_skel *dev;
+
+ dev = urb->context;
+
+ /* sync/async unlink faults aren't errors */
+ if (urb->status) {
+ if (!(urb->status == -ENOENT ||
+ urb->status == -ECONNRESET ||
+ urb->status == -ESHUTDOWN))
+ err("%s - nonzero write bulk status received: %d",
+ __func__, urb->status);
+
+ spin_lock(&dev->err_lock);
+ dev->errors = urb->status;
+ spin_unlock(&dev->err_lock);
+ }
+
+ /* free up our allocated buffer */
+ usb_free_coherent(urb->dev, urb->transfer_buffer_length,
+ urb->transfer_buffer, urb->transfer_dma);
+ up(&dev->limit_sem);
+}
+
+static ssize_t skel_write(struct file *file, const char *user_buffer,
+ size_t count, loff_t *ppos)
+{
+ struct usb_skel *dev;
+ int retval = 0;
+ struct urb *urb = NULL;
+ char *buf = NULL;
+ size_t writesize = min(count, (size_t)MAX_TRANSFER);
+
+ dev = file->private_data;
+
+ /* verify that we actually have some data to write */
+ if (count == 0)
+ goto exit;
+
+ /*
+ * limit the number of URBs in flight to stop a user from using up all
+ * RAM
+ */
+ if (!(file->f_flags & O_NONBLOCK)) {
+ if (down_interruptible(&dev->limit_sem)) {
+ retval = -ERESTARTSYS;
+ goto exit;
+ }
+ } else {
+ if (down_trylock(&dev->limit_sem)) {
+ retval = -EAGAIN;
+ goto exit;
+ }
+ }
+
+ spin_lock_irq(&dev->err_lock);
+ retval = dev->errors;
+ if (retval < 0) {
+ /* any error is reported once */
+ dev->errors = 0;
+ /* to preserve notifications about reset */
+ retval = (retval == -EPIPE) ? retval : -EIO;
+ }
+ spin_unlock_irq(&dev->err_lock);
+ if (retval < 0)
+ goto error;
+
+ /* create a urb, and a buffer for it, and copy the data to the urb */
+ urb = usb_alloc_urb(0, GFP_KERNEL);
+ if (!urb) {
+ retval = -ENOMEM;
+ goto error;
+ }
+
+ buf = usb_alloc_coherent(dev->udev, writesize, GFP_KERNEL,
+ &urb->transfer_dma);
+ if (!buf) {
+ retval = -ENOMEM;
+ goto error;
+ }
+
+ if (copy_from_user(buf, user_buffer, writesize)) {
+ retval = -EFAULT;
+ goto error;
+ }
+
+ /* this lock makes sure we don't submit URBs to gone devices */
+ mutex_lock(&dev->io_mutex);
+ if (!dev->interface) { /* disconnect() was called */
+ mutex_unlock(&dev->io_mutex);
+ retval = -ENODEV;
+ goto error;
+ }
+
+ /* initialize the urb properly */
+ usb_fill_bulk_urb(urb, dev->udev,
+ usb_sndbulkpipe(dev->udev, dev->bulk_out_endpointAddr),
+ buf, writesize, skel_write_bulk_callback, dev);
+ urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
+ usb_anchor_urb(urb, &dev->submitted);
+
+ /* send the data out the bulk port */
+ retval = usb_submit_urb(urb, GFP_KERNEL);
+ mutex_unlock(&dev->io_mutex);
+ if (retval) {
+ err("%s - failed submitting write urb, error %d", __func__,
+ retval);
+ goto error_unanchor;
+ }
+
+ /*
+ * release our reference to this urb, the USB core will eventually free
+ * it entirely
+ */
+ usb_free_urb(urb);
+
+
+ return writesize;
+
+error_unanchor:
+ usb_unanchor_urb(urb);
+error:
+ if (urb) {
+ usb_free_coherent(dev->udev, writesize, buf, urb->transfer_dma);
+ usb_free_urb(urb);
+ }
+ up(&dev->limit_sem);
+
+exit:
+ return retval;
+}
+
+static const struct file_operations skel_fops = {
+ .owner = THIS_MODULE,
+ .read = skel_read,
+ .write = skel_write,
+ .open = skel_open,
+ .release = skel_release,
+ .flush = skel_flush,
+ .llseek = noop_llseek,
+};
+
+/*
+ * usb class driver info in order to get a minor number from the usb core,
+ * and to have the device registered with the driver core
+ */
+static struct usb_class_driver skel_class = {
+ .name = "skel%d",
+ .fops = &skel_fops,
+ .minor_base = USB_SKEL_MINOR_BASE,
+};
+
+static int skel_probe(struct usb_interface *interface,
+ const struct usb_device_id *id)
+{
+ struct usb_skel *dev;
+ struct usb_host_interface *iface_desc;
+ struct usb_endpoint_descriptor *endpoint;
+ size_t buffer_size;
+ int i;
+ int retval = -ENOMEM;
+
+ /* allocate memory for our device state and initialize it */
+ dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+ if (!dev) {
+ err("Out of memory");
+ goto error;
+ }
+ kref_init(&dev->kref);
+ sema_init(&dev->limit_sem, WRITES_IN_FLIGHT);
+ mutex_init(&dev->io_mutex);
+ spin_lock_init(&dev->err_lock);
+ init_usb_anchor(&dev->submitted);
+ init_completion(&dev->bulk_in_completion);
+
+ dev->udev = usb_get_dev(interface_to_usbdev(interface));
+ dev->interface = interface;
+
+ /* set up the endpoint information */
+ /* use only the first bulk-in and bulk-out endpoints */
+ iface_desc = interface->cur_altsetting;
+ for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
+ endpoint = &iface_desc->endpoint[i].desc;
+
+ if (!dev->bulk_in_endpointAddr &&
+ usb_endpoint_is_bulk_in(endpoint)) {
+ /* we found a bulk in endpoint */
+ buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
+ dev->bulk_in_size = buffer_size;
+ dev->bulk_in_endpointAddr = endpoint->bEndpointAddress;
+ dev->bulk_in_buffer = kmalloc(buffer_size, GFP_KERNEL);
+ if (!dev->bulk_in_buffer) {
+ err("Could not allocate bulk_in_buffer");
+ goto error;
+ }
+ dev->bulk_in_urb = usb_alloc_urb(0, GFP_KERNEL);
+ if (!dev->bulk_in_urb) {
+ err("Could not allocate bulk_in_urb");
+ goto error;
+ }
+ }
+
+ if (!dev->bulk_out_endpointAddr &&
+ usb_endpoint_is_bulk_out(endpoint)) {
+ /* we found a bulk out endpoint */
+ dev->bulk_out_endpointAddr = endpoint->bEndpointAddress;
+ }
+ }
+ if (!(dev->bulk_in_endpointAddr && dev->bulk_out_endpointAddr)) {
+ err("Could not find both bulk-in and bulk-out endpoints");
+ goto error;
+ }
+
+ /* save our data pointer in this interface device */
+ usb_set_intfdata(interface, dev);
+
+ /* we can register the device now, as it is ready */
+ retval = usb_register_dev(interface, &skel_class);
+ if (retval) {
+ /* something prevented us from registering this driver */
+ err("Not able to get a minor for this device.");
+ usb_set_intfdata(interface, NULL);
+ goto error;
+ }
+
+ /* let the user know what node this device is now attached to */
+ dev_info(&interface->dev,
+ "USB Skeleton device now attached to USBSkel-%d",
+ interface->minor);
+ return 0;
+
+error:
+ if (dev)
+ /* this frees allocated memory */
+ kref_put(&dev->kref, skel_delete);
+ return retval;
+}
+
+static void skel_disconnect(struct usb_interface *interface)
+{
+ struct usb_skel *dev;
+ int minor = interface->minor;
+
+ dev = usb_get_intfdata(interface);
+ usb_set_intfdata(interface, NULL);
+
+ /* give back our minor */
+ usb_deregister_dev(interface, &skel_class);
+
+ /* prevent more I/O from starting */
+ mutex_lock(&dev->io_mutex);
+ dev->interface = NULL;
+ mutex_unlock(&dev->io_mutex);
+
+ usb_kill_anchored_urbs(&dev->submitted);
+
+ /* decrement our usage count */
+ kref_put(&dev->kref, skel_delete);
+
+ dev_info(&interface->dev, "USB Skeleton #%d now disconnected", minor);
+}
+
+static void skel_draw_down(struct usb_skel *dev)
+{
+ int time;
+
+ time = usb_wait_anchor_empty_timeout(&dev->submitted, 1000);
+ if (!time)
+ usb_kill_anchored_urbs(&dev->submitted);
+ usb_kill_urb(dev->bulk_in_urb);
+}
+
+static int skel_suspend(struct usb_interface *intf, pm_message_t message)
+{
+ struct usb_skel *dev = usb_get_intfdata(intf);
+
+ if (!dev)
+ return 0;
+ skel_draw_down(dev);
+ return 0;
+}
+
+static int skel_resume(struct usb_interface *intf)
+{
+ return 0;
+}
+
+static int skel_pre_reset(struct usb_interface *intf)
+{
+ struct usb_skel *dev = usb_get_intfdata(intf);
+
+ mutex_lock(&dev->io_mutex);
+ skel_draw_down(dev);
+
+ return 0;
+}
+
+static int skel_post_reset(struct usb_interface *intf)
+{
+ struct usb_skel *dev = usb_get_intfdata(intf);
+
+ /* we are sure no URBs are active - no locking needed */
+ dev->errors = -EPIPE;
+ mutex_unlock(&dev->io_mutex);
+
+ return 0;
+}
+
+static struct usb_driver skel_driver = {
+ .name = "skeleton",
+ .probe = skel_probe,
+ .disconnect = skel_disconnect,
+ .suspend = skel_suspend,
+ .resume = skel_resume,
+ .pre_reset = skel_pre_reset,
+ .post_reset = skel_post_reset,
+ .id_table = skel_table,
+ .supports_autosuspend = 1,
+};
+
+static int __init usb_skel_init(void)
+{
+ int result;
+
+ /* register this driver with the USB subsystem */
+ result = usb_register(&skel_driver);
+ if (result)
+ err("usb_register failed. Error number %d", result);
+
+ return result;
+}
+
+static void __exit usb_skel_exit(void)
+{
+ /* deregister this driver with the USB subsystem */
+ usb_deregister(&skel_driver);
+}
+
+module_init(usb_skel_init);
+module_exit(usb_skel_exit);
+
+MODULE_LICENSE("GPL");
+