From ae837eef1288846c32a456807c3553aa80ef7577 Mon Sep 17 00:00:00 2001 From: Max Regan Date: Wed, 28 Aug 2019 23:23:48 -0700 Subject: [PATCH] refactor tree, add ecad, mcad --- cad/PcbSketch.step | 354 ++++ cad/PcbSketch.wrl | 3 + cad/button_pads.dxf | 470 +++++ cad/pcb_outline.dxf | 536 ++++++ cad/watch_board.FCStd | Bin 0 -> 14422 bytes cad/watch_board.FCStd1 | Bin 0 -> 14675 bytes ecad/watch-v1_1.net | 395 +++++ ecad/watch_v1-1.kicad_pcb | 1516 +++++++++++++++++ ecad/watch_v1-1.pro | 63 + ecad/watch_v1-1.sch | 790 +++++++++ firmware/Application/ButtonManager.cpp | 10 +- firmware/Application/ButtonManager.h | 18 +- firmware/Application/ScreenManager.cpp | 8 +- firmware/Application/ScreenManager.h | 18 +- .../Application/Screens/AnalogTimeScreen.cpp | 191 +++ .../Application/Screens/AnalogTimeScreen.h | 61 + ...imeScreen.cpp => BigDigitalTimeScreen.cpp} | 40 +- ...layTimeScreen.h => BigDigitalTimeScreen.h} | 16 +- firmware/Application/Screens/DebugScreen.h | 8 +- firmware/Application/Screens/MenuScreen.h | 8 +- firmware/Application/Screens/Screen.h | 2 +- .../Application/Screens/SetDateScreen.cpp | 6 +- firmware/Application/Screens/SetDateScreen.h | 6 +- .../Application/Screens/SetTimeScreen.cpp | 6 +- firmware/Application/Screens/SetTimeScreen.h | 6 +- firmware/Application/main.cpp | 55 +- firmware/Bsp/Drivers/DisplayDriver.cpp | 48 +- firmware/Bsp/Drivers/DisplayDriver.h | 13 +- firmware/Bsp/Drivers/LowPower.cpp | 12 +- firmware/Bsp/Drivers/LowPower.h | 10 +- firmware/Bsp/Drivers/LptimPwm.cpp | 2 +- firmware/Bsp/Drivers/LptimPwm.h | 2 +- firmware/Bsp/Drivers/RtcDriver.cpp | 44 +- firmware/Bsp/Drivers/RtcDriver.h | 12 +- firmware/Bsp/Drivers/SpiDriver.cpp | 8 +- firmware/Bsp/Drivers/SpiDriver.h | 10 +- firmware/Bsp/LowPowerTaskScheduler.h | 14 +- firmware/Bsp/ReturnCode.h | 2 +- firmware/Bsp/SystemTime.cpp | 4 +- firmware/Bsp/SystemTime.h | 4 +- firmware/Bsp/Task.cpp | 2 +- firmware/Bsp/Task.h | 4 +- firmware/Bsp/TaskScheduler.h | 2 +- firmware/Bsp/Time.h | 2 +- firmware/Makefile | 17 +- 45 files changed, 4629 insertions(+), 169 deletions(-) create mode 100644 cad/PcbSketch.step create mode 100644 cad/PcbSketch.wrl create mode 100644 cad/button_pads.dxf create mode 100644 cad/pcb_outline.dxf create mode 100644 cad/watch_board.FCStd create mode 100644 cad/watch_board.FCStd1 create mode 100644 ecad/watch-v1_1.net create mode 100644 ecad/watch_v1-1.kicad_pcb create mode 100644 ecad/watch_v1-1.pro create mode 100644 ecad/watch_v1-1.sch create mode 100644 firmware/Application/Screens/AnalogTimeScreen.cpp create mode 100644 firmware/Application/Screens/AnalogTimeScreen.h rename firmware/Application/Screens/{DisplayTimeScreen.cpp => BigDigitalTimeScreen.cpp} (76%) rename firmware/Application/Screens/{DisplayTimeScreen.h => BigDigitalTimeScreen.h} (80%) diff --git a/cad/PcbSketch.step b/cad/PcbSketch.step new file mode 100644 index 0000000..30f607e --- /dev/null +++ b/cad/PcbSketch.step @@ -0,0 +1,354 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('FreeCAD Model'),'2;1'); +FILE_NAME('/home/max/work/stm32f0_demo/cad/PcbSketch.step', + '2019-08-24T22:13:15',('kicad StepUp'),('ksu MCAD'), + 'Open CASCADE STEP processor 7.0','FreeCAD','Unknown'); +FILE_SCHEMA(('AUTOMOTIVE_DESIGN { 1 0 10303 214 1 1 1 1 }')); +ENDSEC; +DATA; +#1 = APPLICATION_PROTOCOL_DEFINITION('international standard', + 'automotive_design',2000,#2); +#2 = APPLICATION_CONTEXT( + 'core data for automotive mechanical design processes'); +#3 = SHAPE_DEFINITION_REPRESENTATION(#4,#10); +#4 = PRODUCT_DEFINITION_SHAPE('','',#5); +#5 = PRODUCT_DEFINITION('design','',#6,#9); +#6 = PRODUCT_DEFINITION_FORMATION('','',#7); +#7 = PRODUCT('PcbSketch','PcbSketch','',(#8)); +#8 = PRODUCT_CONTEXT('',#2,'mechanical'); +#9 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#10 = SHAPE_REPRESENTATION('',(#11,#15,#215,#224,#233,#242),#251); +#11 = AXIS2_PLACEMENT_3D('',#12,#13,#14); +#12 = CARTESIAN_POINT('',(0.,0.,0.)); +#13 = DIRECTION('',(0.,0.,1.)); +#14 = DIRECTION('',(1.,0.,-0.)); +#15 = GEOMETRIC_CURVE_SET('',(#16,#23,#30,#38,#45,#53,#60,#68,#75,#83, + #90,#97,#105,#112,#120,#127,#134,#141,#149,#156,#163,#171,#178,#185, + #192,#200,#207)); +#16 = TRIMMED_CURVE('',#17,(#21,PARAMETER_VALUE(0.)),(#22, + PARAMETER_VALUE(1.1)),.T.,.PARAMETER.); +#17 = LINE('',#18,#19); +#18 = CARTESIAN_POINT('',(16.4,8.850842753845,0.)); +#19 = VECTOR('',#20,1.); +#20 = DIRECTION('',(1.,0.,0.)); +#21 = CARTESIAN_POINT('',(16.4,8.850842753845,0.)); +#22 = CARTESIAN_POINT('',(17.5,8.850842753845,0.)); +#23 = TRIMMED_CURVE('',#24,(#28,PARAMETER_VALUE(0.)),(#29, + PARAMETER_VALUE(5.649157246155)),.T.,.PARAMETER.); +#24 = LINE('',#25,#26); +#25 = CARTESIAN_POINT('',(17.5,8.850842753845,0.)); +#26 = VECTOR('',#27,1.); +#27 = DIRECTION('',(6.288926868195E-16,1.,0.)); +#28 = CARTESIAN_POINT('',(17.5,8.850842753845,0.)); +#29 = CARTESIAN_POINT('',(17.5,14.5,0.)); +#30 = TRIMMED_CURVE('',#31,(#36,PARAMETER_VALUE(2.80357188279E-16)),(#37 + ,PARAMETER_VALUE(1.570796326795)),.T.,.PARAMETER.); +#31 = CIRCLE('',#32,3.); +#32 = AXIS2_PLACEMENT_3D('',#33,#34,#35); +#33 = CARTESIAN_POINT('',(14.5,14.5,0.)); +#34 = DIRECTION('',(0.,0.,1.)); +#35 = DIRECTION('',(1.,0.,0.)); +#36 = CARTESIAN_POINT('',(17.5,14.5,0.)); +#37 = CARTESIAN_POINT('',(14.5,17.5,0.)); +#38 = TRIMMED_CURVE('',#39,(#43,PARAMETER_VALUE(0.)),(#44, + PARAMETER_VALUE(29.)),.T.,.PARAMETER.); +#39 = LINE('',#40,#41); +#40 = CARTESIAN_POINT('',(14.5,17.5,0.)); +#41 = VECTOR('',#42,1.); +#42 = DIRECTION('',(-1.,0.,0.)); +#43 = CARTESIAN_POINT('',(14.5,17.5,0.)); +#44 = CARTESIAN_POINT('',(-14.5,17.5,0.)); +#45 = TRIMMED_CURVE('',#46,(#51,PARAMETER_VALUE(1.570796326795)),(#52, + PARAMETER_VALUE(3.14159265359)),.T.,.PARAMETER.); +#46 = CIRCLE('',#47,3.); +#47 = AXIS2_PLACEMENT_3D('',#48,#49,#50); +#48 = CARTESIAN_POINT('',(-14.5,14.5,0.)); +#49 = DIRECTION('',(0.,0.,1.)); +#50 = DIRECTION('',(1.,0.,0.)); +#51 = CARTESIAN_POINT('',(-14.5,17.5,0.)); +#52 = CARTESIAN_POINT('',(-17.5,14.5,0.)); +#53 = TRIMMED_CURVE('',#54,(#58,PARAMETER_VALUE(0.)),(#59, + PARAMETER_VALUE(29.)),.T.,.PARAMETER.); +#54 = LINE('',#55,#56); +#55 = CARTESIAN_POINT('',(-17.5,14.5,0.)); +#56 = VECTOR('',#57,1.); +#57 = DIRECTION('',(0.,-1.,0.)); +#58 = CARTESIAN_POINT('',(-17.5,14.5,0.)); +#59 = CARTESIAN_POINT('',(-17.5,-14.5,0.)); +#60 = TRIMMED_CURVE('',#61,(#66,PARAMETER_VALUE(3.14159265359)),(#67, + PARAMETER_VALUE(4.712388980385)),.T.,.PARAMETER.); +#61 = CIRCLE('',#62,3.); +#62 = AXIS2_PLACEMENT_3D('',#63,#64,#65); +#63 = CARTESIAN_POINT('',(-14.5,-14.5,0.)); +#64 = DIRECTION('',(0.,0.,1.)); +#65 = DIRECTION('',(1.,0.,0.)); +#66 = CARTESIAN_POINT('',(-17.5,-14.5,0.)); +#67 = CARTESIAN_POINT('',(-14.5,-17.5,0.)); +#68 = TRIMMED_CURVE('',#69,(#73,PARAMETER_VALUE(0.)),(#74, + PARAMETER_VALUE(29.)),.T.,.PARAMETER.); +#69 = LINE('',#70,#71); +#70 = CARTESIAN_POINT('',(-14.5,-17.5,0.)); +#71 = VECTOR('',#72,1.); +#72 = DIRECTION('',(1.,0.,0.)); +#73 = CARTESIAN_POINT('',(-14.5,-17.5,0.)); +#74 = CARTESIAN_POINT('',(14.5,-17.5,0.)); +#75 = TRIMMED_CURVE('',#76,(#81,PARAMETER_VALUE(4.712388980385)),(#82, + PARAMETER_VALUE(6.28318530718)),.T.,.PARAMETER.); +#76 = CIRCLE('',#77,3.); +#77 = AXIS2_PLACEMENT_3D('',#78,#79,#80); +#78 = CARTESIAN_POINT('',(14.5,-14.5,0.)); +#79 = DIRECTION('',(0.,0.,1.)); +#80 = DIRECTION('',(1.,0.,0.)); +#81 = CARTESIAN_POINT('',(14.5,-17.5,0.)); +#82 = CARTESIAN_POINT('',(17.5,-14.5,0.)); +#83 = TRIMMED_CURVE('',#84,(#88,PARAMETER_VALUE(0.)),(#89, + PARAMETER_VALUE(5.550842753845)),.T.,.PARAMETER.); +#84 = LINE('',#85,#86); +#85 = CARTESIAN_POINT('',(17.5,-14.5,0.)); +#86 = VECTOR('',#87,1.); +#87 = DIRECTION('',(0.,1.,0.)); +#88 = CARTESIAN_POINT('',(17.5,-14.5,0.)); +#89 = CARTESIAN_POINT('',(17.5,-8.949157246155,0.)); +#90 = TRIMMED_CURVE('',#91,(#95,PARAMETER_VALUE(0.)),(#96, + PARAMETER_VALUE(1.1)),.T.,.PARAMETER.); +#91 = LINE('',#92,#93); +#92 = CARTESIAN_POINT('',(17.5,-8.949157246155,0.)); +#93 = VECTOR('',#94,1.); +#94 = DIRECTION('',(-1.,0.,0.)); +#95 = CARTESIAN_POINT('',(17.5,-8.949157246155,0.)); +#96 = CARTESIAN_POINT('',(16.4,-8.949157246155,0.)); +#97 = TRIMMED_CURVE('',#98,(#103,PARAMETER_VALUE(3.14159265359)),(#104, + PARAMETER_VALUE(4.712388980385)),.T.,.PARAMETER.); +#98 = CIRCLE('',#99,0.25); +#99 = AXIS2_PLACEMENT_3D('',#100,#101,#102); +#100 = CARTESIAN_POINT('',(16.4,-8.699157246155,0.)); +#101 = DIRECTION('',(0.,0.,1.)); +#102 = DIRECTION('',(1.,0.,0.)); +#103 = CARTESIAN_POINT('',(16.15,-8.699157246155,0.)); +#104 = CARTESIAN_POINT('',(16.4,-8.949157246155,0.)); +#105 = TRIMMED_CURVE('',#106,(#110,PARAMETER_VALUE(0.)),(#111, + PARAMETER_VALUE(3.3)),.T.,.PARAMETER.); +#106 = LINE('',#107,#108); +#107 = CARTESIAN_POINT('',(16.15,-5.399157246155,0.)); +#108 = VECTOR('',#109,1.); +#109 = DIRECTION('',(0.,-1.,0.)); +#110 = CARTESIAN_POINT('',(16.15,-5.399157246155,0.)); +#111 = CARTESIAN_POINT('',(16.15,-8.699157246155,0.)); +#112 = TRIMMED_CURVE('',#113,(#118,PARAMETER_VALUE(1.570796326795)),( + #119,PARAMETER_VALUE(3.14159265359)),.T.,.PARAMETER.); +#113 = CIRCLE('',#114,0.25); +#114 = AXIS2_PLACEMENT_3D('',#115,#116,#117); +#115 = CARTESIAN_POINT('',(16.4,-5.399157246155,0.)); +#116 = DIRECTION('',(0.,0.,1.)); +#117 = DIRECTION('',(1.,0.,0.)); +#118 = CARTESIAN_POINT('',(16.4,-5.149157246155,0.)); +#119 = CARTESIAN_POINT('',(16.15,-5.399157246155,0.)); +#120 = TRIMMED_CURVE('',#121,(#125,PARAMETER_VALUE(0.)),(#126, + PARAMETER_VALUE(1.1)),.T.,.PARAMETER.); +#121 = LINE('',#122,#123); +#122 = CARTESIAN_POINT('',(16.4,-5.149157246155,0.)); +#123 = VECTOR('',#124,1.); +#124 = DIRECTION('',(1.,0.,0.)); +#125 = CARTESIAN_POINT('',(16.4,-5.149157246155,0.)); +#126 = CARTESIAN_POINT('',(17.5,-5.149157246155,0.)); +#127 = TRIMMED_CURVE('',#128,(#132,PARAMETER_VALUE(0.)),(#133, + PARAMETER_VALUE(3.2)),.T.,.PARAMETER.); +#128 = LINE('',#129,#130); +#129 = CARTESIAN_POINT('',(17.5,-5.149157246155,0.)); +#130 = VECTOR('',#131,1.); +#131 = DIRECTION('',(0.,1.,0.)); +#132 = CARTESIAN_POINT('',(17.5,-5.149157246155,0.)); +#133 = CARTESIAN_POINT('',(17.5,-1.949157246155,0.)); +#134 = TRIMMED_CURVE('',#135,(#139,PARAMETER_VALUE(0.)),(#140, + PARAMETER_VALUE(1.1)),.T.,.PARAMETER.); +#135 = LINE('',#136,#137); +#136 = CARTESIAN_POINT('',(17.5,-1.949157246155,0.)); +#137 = VECTOR('',#138,1.); +#138 = DIRECTION('',(-1.,0.,0.)); +#139 = CARTESIAN_POINT('',(17.5,-1.949157246155,0.)); +#140 = CARTESIAN_POINT('',(16.4,-1.949157246155,0.)); +#141 = TRIMMED_CURVE('',#142,(#147,PARAMETER_VALUE(3.14159265359)),(#148 + ,PARAMETER_VALUE(4.712388980385)),.T.,.PARAMETER.); +#142 = CIRCLE('',#143,0.25); +#143 = AXIS2_PLACEMENT_3D('',#144,#145,#146); +#144 = CARTESIAN_POINT('',(16.4,-1.699157246155,0.)); +#145 = DIRECTION('',(0.,0.,1.)); +#146 = DIRECTION('',(1.,0.,0.)); +#147 = CARTESIAN_POINT('',(16.15,-1.699157246155,0.)); +#148 = CARTESIAN_POINT('',(16.4,-1.949157246155,0.)); +#149 = TRIMMED_CURVE('',#150,(#154,PARAMETER_VALUE(0.)),(#155, + PARAMETER_VALUE(1.699157246155)),.T.,.PARAMETER.); +#150 = LINE('',#151,#152); +#151 = CARTESIAN_POINT('',(16.15,0.,0.)); +#152 = VECTOR('',#153,1.); +#153 = DIRECTION('',(0.,-1.,0.)); +#154 = CARTESIAN_POINT('',(16.15,0.,0.)); +#155 = CARTESIAN_POINT('',(16.15,-1.699157246155,0.)); +#156 = TRIMMED_CURVE('',#157,(#161,PARAMETER_VALUE(0.)),(#162, + PARAMETER_VALUE(1.699157246155)),.T.,.PARAMETER.); +#157 = LINE('',#158,#159); +#158 = CARTESIAN_POINT('',(16.15,0.,0.)); +#159 = VECTOR('',#160,1.); +#160 = DIRECTION('',(0.,1.,0.)); +#161 = CARTESIAN_POINT('',(16.15,0.,0.)); +#162 = CARTESIAN_POINT('',(16.15,1.699157246155,0.)); +#163 = TRIMMED_CURVE('',#164,(#169,PARAMETER_VALUE(1.570796326795)),( + #170,PARAMETER_VALUE(2.737187459543)),.T.,.PARAMETER.); +#164 = CIRCLE('',#165,0.25); +#165 = AXIS2_PLACEMENT_3D('',#166,#167,#168); +#166 = CARTESIAN_POINT('',(16.379834149817,1.600789245374,0.)); +#167 = DIRECTION('',(0.,0.,1.)); +#168 = DIRECTION('',(1.,0.,0.)); +#169 = CARTESIAN_POINT('',(16.379834149817,1.850789245374,0.)); +#170 = CARTESIAN_POINT('',(16.15,1.699157246155,0.)); +#171 = TRIMMED_CURVE('',#172,(#176,PARAMETER_VALUE(0.)),(#177, + PARAMETER_VALUE(1.120165850183)),.T.,.PARAMETER.); +#172 = LINE('',#173,#174); +#173 = CARTESIAN_POINT('',(16.379834149817,1.850789245374,0.)); +#174 = VECTOR('',#175,1.); +#175 = DIRECTION('',(1.,0.,0.)); +#176 = CARTESIAN_POINT('',(16.379834149817,1.850789245374,0.)); +#177 = CARTESIAN_POINT('',(17.5,1.850789245374,0.)); +#178 = TRIMMED_CURVE('',#179,(#183,PARAMETER_VALUE(0.)),(#184, + PARAMETER_VALUE(3.200053508471)),.T.,.PARAMETER.); +#179 = LINE('',#180,#181); +#180 = CARTESIAN_POINT('',(17.5,1.850789245374,0.)); +#181 = VECTOR('',#182,1.); +#182 = DIRECTION('',(0.,1.,0.)); +#183 = CARTESIAN_POINT('',(17.5,1.850789245374,0.)); +#184 = CARTESIAN_POINT('',(17.5,5.050842753845,0.)); +#185 = TRIMMED_CURVE('',#186,(#190,PARAMETER_VALUE(0.)),(#191, + PARAMETER_VALUE(1.1)),.T.,.PARAMETER.); +#186 = LINE('',#187,#188); +#187 = CARTESIAN_POINT('',(17.5,5.050842753845,0.)); +#188 = VECTOR('',#189,1.); +#189 = DIRECTION('',(-1.,0.,0.)); +#190 = CARTESIAN_POINT('',(17.5,5.050842753845,0.)); +#191 = CARTESIAN_POINT('',(16.4,5.050842753845,0.)); +#192 = TRIMMED_CURVE('',#193,(#198,PARAMETER_VALUE(3.14159265359)),(#199 + ,PARAMETER_VALUE(4.712388980385)),.T.,.PARAMETER.); +#193 = CIRCLE('',#194,0.25); +#194 = AXIS2_PLACEMENT_3D('',#195,#196,#197); +#195 = CARTESIAN_POINT('',(16.4,5.300842753845,0.)); +#196 = DIRECTION('',(0.,0.,1.)); +#197 = DIRECTION('',(1.,0.,0.)); +#198 = CARTESIAN_POINT('',(16.15,5.300842753845,0.)); +#199 = CARTESIAN_POINT('',(16.4,5.050842753845,0.)); +#200 = TRIMMED_CURVE('',#201,(#205,PARAMETER_VALUE(0.)),(#206, + PARAMETER_VALUE(3.3)),.T.,.PARAMETER.); +#201 = LINE('',#202,#203); +#202 = CARTESIAN_POINT('',(16.15,8.600842753845,0.)); +#203 = VECTOR('',#204,1.); +#204 = DIRECTION('',(0.,-1.,0.)); +#205 = CARTESIAN_POINT('',(16.15,8.600842753845,0.)); +#206 = CARTESIAN_POINT('',(16.15,5.300842753845,0.)); +#207 = TRIMMED_CURVE('',#208,(#213,PARAMETER_VALUE(1.570796326795)),( + #214,PARAMETER_VALUE(3.14159265359)),.T.,.PARAMETER.); +#208 = CIRCLE('',#209,0.25); +#209 = AXIS2_PLACEMENT_3D('',#210,#211,#212); +#210 = CARTESIAN_POINT('',(16.4,8.600842753845,0.)); +#211 = DIRECTION('',(0.,0.,1.)); +#212 = DIRECTION('',(1.,0.,0.)); +#213 = CARTESIAN_POINT('',(16.4,8.850842753845,0.)); +#214 = CARTESIAN_POINT('',(16.15,8.600842753845,0.)); +#215 = GEOMETRIC_CURVE_SET('',(#216)); +#216 = TRIMMED_CURVE('',#217,(#222,PARAMETER_VALUE(0.)),(#223, + PARAMETER_VALUE(6.28318530718)),.T.,.PARAMETER.); +#217 = CIRCLE('',#218,1.1); +#218 = AXIS2_PLACEMENT_3D('',#219,#220,#221); +#219 = CARTESIAN_POINT('',(-15.455,13.5,0.)); +#220 = DIRECTION('',(0.,0.,1.)); +#221 = DIRECTION('',(1.,0.,0.)); +#222 = CARTESIAN_POINT('',(-14.355,13.5,0.)); +#223 = CARTESIAN_POINT('',(-14.355,13.5,0.)); +#224 = GEOMETRIC_CURVE_SET('',(#225)); +#225 = TRIMMED_CURVE('',#226,(#231,PARAMETER_VALUE(0.)),(#232, + PARAMETER_VALUE(6.28318530718)),.T.,.PARAMETER.); +#226 = CIRCLE('',#227,1.1); +#227 = AXIS2_PLACEMENT_3D('',#228,#229,#230); +#228 = CARTESIAN_POINT('',(-15.455,-13.5,0.)); +#229 = DIRECTION('',(0.,0.,1.)); +#230 = DIRECTION('',(1.,0.,0.)); +#231 = CARTESIAN_POINT('',(-14.355,-13.5,0.)); +#232 = CARTESIAN_POINT('',(-14.355,-13.5,0.)); +#233 = GEOMETRIC_CURVE_SET('',(#234)); +#234 = TRIMMED_CURVE('',#235,(#240,PARAMETER_VALUE(0.)),(#241, + PARAMETER_VALUE(6.28318530718)),.T.,.PARAMETER.); +#235 = CIRCLE('',#236,1.1); +#236 = AXIS2_PLACEMENT_3D('',#237,#238,#239); +#237 = CARTESIAN_POINT('',(15.455,-13.5,0.)); +#238 = DIRECTION('',(0.,0.,1.)); +#239 = DIRECTION('',(1.,0.,0.)); +#240 = CARTESIAN_POINT('',(16.555,-13.5,0.)); +#241 = CARTESIAN_POINT('',(16.555,-13.5,0.)); +#242 = GEOMETRIC_CURVE_SET('',(#243)); +#243 = TRIMMED_CURVE('',#244,(#249,PARAMETER_VALUE(0.)),(#250, + PARAMETER_VALUE(6.28318530718)),.T.,.PARAMETER.); +#244 = CIRCLE('',#245,1.1); +#245 = AXIS2_PLACEMENT_3D('',#246,#247,#248); +#246 = CARTESIAN_POINT('',(15.455,13.5,0.)); +#247 = DIRECTION('',(0.,0.,1.)); +#248 = DIRECTION('',(1.,0.,0.)); +#249 = CARTESIAN_POINT('',(16.555,13.5,0.)); +#250 = CARTESIAN_POINT('',(16.555,13.5,0.)); +#251 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#255)) GLOBAL_UNIT_ASSIGNED_CONTEXT +((#252,#253,#254)) REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#252 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#253 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#254 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#255 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#252, + 'distance_accuracy_value','confusion accuracy'); +#256 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#7)); +#257 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',(#258, + #268,#277,#286,#295),#251); +#258 = STYLED_ITEM('color',(#259),#15); +#259 = PRESENTATION_STYLE_ASSIGNMENT((#260,#266)); +#260 = SURFACE_STYLE_USAGE(.BOTH.,#261); +#261 = SURFACE_SIDE_STYLE('',(#262)); +#262 = SURFACE_STYLE_FILL_AREA(#263); +#263 = FILL_AREA_STYLE('',(#264)); +#264 = FILL_AREA_STYLE_COLOUR('',#265); +#265 = COLOUR_RGB('',0.800000011921,0.800000011921,0.800000011921); +#266 = CURVE_STYLE('',#267,POSITIVE_LENGTH_MEASURE(0.1),#265); +#267 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#268 = STYLED_ITEM('color',(#269),#215); +#269 = PRESENTATION_STYLE_ASSIGNMENT((#270,#275)); +#270 = SURFACE_STYLE_USAGE(.BOTH.,#271); +#271 = SURFACE_SIDE_STYLE('',(#272)); +#272 = SURFACE_STYLE_FILL_AREA(#273); +#273 = FILL_AREA_STYLE('',(#274)); +#274 = FILL_AREA_STYLE_COLOUR('',#265); +#275 = CURVE_STYLE('',#276,POSITIVE_LENGTH_MEASURE(0.1),#265); +#276 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#277 = STYLED_ITEM('color',(#278),#224); +#278 = PRESENTATION_STYLE_ASSIGNMENT((#279,#284)); +#279 = SURFACE_STYLE_USAGE(.BOTH.,#280); +#280 = SURFACE_SIDE_STYLE('',(#281)); +#281 = SURFACE_STYLE_FILL_AREA(#282); +#282 = FILL_AREA_STYLE('',(#283)); +#283 = FILL_AREA_STYLE_COLOUR('',#265); +#284 = CURVE_STYLE('',#285,POSITIVE_LENGTH_MEASURE(0.1),#265); +#285 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#286 = STYLED_ITEM('color',(#287),#233); +#287 = PRESENTATION_STYLE_ASSIGNMENT((#288,#293)); +#288 = SURFACE_STYLE_USAGE(.BOTH.,#289); +#289 = SURFACE_SIDE_STYLE('',(#290)); +#290 = SURFACE_STYLE_FILL_AREA(#291); +#291 = FILL_AREA_STYLE('',(#292)); +#292 = FILL_AREA_STYLE_COLOUR('',#265); +#293 = CURVE_STYLE('',#294,POSITIVE_LENGTH_MEASURE(0.1),#265); +#294 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#295 = STYLED_ITEM('color',(#296),#242); +#296 = PRESENTATION_STYLE_ASSIGNMENT((#297,#302)); +#297 = SURFACE_STYLE_USAGE(.BOTH.,#298); +#298 = SURFACE_SIDE_STYLE('',(#299)); +#299 = SURFACE_STYLE_FILL_AREA(#300); +#300 = FILL_AREA_STYLE('',(#301)); +#301 = FILL_AREA_STYLE_COLOUR('',#265); +#302 = CURVE_STYLE('',#303,POSITIVE_LENGTH_MEASURE(0.1),#265); +#303 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +ENDSEC; +END-ISO-10303-21; diff --git a/cad/PcbSketch.wrl b/cad/PcbSketch.wrl new file mode 100644 index 0000000..cc6f36c --- /dev/null +++ b/cad/PcbSketch.wrl @@ -0,0 +1,3 @@ +#VRML V2.0 utf8 +#kicad StepUp wrl exported + diff --git a/cad/button_pads.dxf b/cad/button_pads.dxf new file mode 100644 index 0000000..acfca28 --- /dev/null +++ b/cad/button_pads.dxf @@ -0,0 +1,470 @@ + 0 +SECTION + 2 +HEADER + 9 +$ACADVER + 1 +AC1009 + 9 +$INSBASE + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$EXTMIN + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$EXTMAX + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +ENDSEC + 0 +SECTION + 2 +TABLES + 0 +TABLE + 2 +VPORT + 70 +0 + 0 +ENDTAB + 0 +TABLE + 2 +LTYPE + 70 +1 + 0 +LTYPE + 2 +CONTINUOUS + 70 +0 + 3 +Solid line + 72 +65 + 73 +0 + 40 +0.0 + 0 +ENDTAB + 0 +TABLE + 2 +LAYER + 70 +1 + 0 +LAYER + 2 +0 + 70 +64 + 62 +7 + 6 +continuous + 0 +ENDTAB + 0 +TABLE + 2 +STYLE + 70 +1 + 0 +STYLE + 2 +STANDARD + 70 +0 + 40 +0 + 41 +1.0 + 50 +0.0 + 71 +0 + 42 +1 + 3 +ARIAL.TTF + 4 + + 0 +ENDTAB + 0 +TABLE + 2 +VIEW + 70 +0 + 0 +ENDTAB + 0 +ENDSEC + 0 +SECTION + 2 +BLOCKS + 0 +BLOCK + 8 +0 + 2 +SKETCH + 70 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +SKETCH + 0 +POLYLINE + 8 +0 + 62 +7 + 70 +1 + 66 +1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 8 +0 + 10 +-1.55 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 8 +0 + 10 +-0.75 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 8 +0 + 10 +-0.75 + 20 +1.25 + 30 +0.0 + 0 +VERTEX + 8 +0 + 10 +-1.55 + 20 +1.25 + 30 +0.0 + 0 +SEQEND + 8 +0 + 0 +POLYLINE + 8 +0 + 62 +7 + 70 +1 + 66 +1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 8 +0 + 10 +-0.40000000000000013 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 8 +0 + 10 +0.4 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 8 +0 + 10 +0.4 + 20 +1.25 + 30 +0.0 + 0 +VERTEX + 8 +0 + 10 +-0.40000000000000013 + 20 +1.25 + 30 +0.0 + 0 +SEQEND + 8 +0 + 0 +POLYLINE + 8 +0 + 62 +7 + 70 +1 + 66 +1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 8 +0 + 10 +0.7499999999999998 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 8 +0 + 10 +1.55 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 8 +0 + 10 +1.55 + 20 +1.25 + 30 +0.0 + 0 +VERTEX + 8 +0 + 10 +0.7499999999999998 + 20 +1.25 + 30 +0.0 + 0 +SEQEND + 8 +0 + 0 +POLYLINE + 8 +0 + 62 +7 + 70 +1 + 66 +1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 8 +0 + 10 +-2.15 + 20 +-0.44999999999999996 + 30 +0.0 + 0 +VERTEX + 8 +0 + 10 +-2.7999999999999994 + 20 +-0.44999999999999996 + 30 +0.0 + 0 +VERTEX + 8 +0 + 10 +-2.7999999999999994 + 20 +-1.15 + 30 +0.0 + 0 +VERTEX + 8 +0 + 10 +-2.15 + 20 +-1.15 + 30 +0.0 + 0 +SEQEND + 8 +0 + 0 +POLYLINE + 8 +0 + 62 +7 + 70 +1 + 66 +1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 8 +0 + 10 +2.8000000000000003 + 20 +-0.44999999999999996 + 30 +0.0 + 0 +VERTEX + 8 +0 + 10 +2.15 + 20 +-0.45 + 30 +0.0 + 0 +VERTEX + 8 +0 + 10 +2.15 + 20 +-1.15 + 30 +0.0 + 0 +VERTEX + 8 +0 + 10 +2.8000000000000003 + 20 +-1.15 + 30 +0.0 + 0 +SEQEND + 8 +0 + 0 +ENDBLK + 0 +ENDSEC + 0 +SECTION + 2 +ENTITIES + 0 +INSERT + 2 +SKETCH + 8 +0 + 62 +7 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +ENDSEC + 0 +EOF diff --git a/cad/pcb_outline.dxf b/cad/pcb_outline.dxf new file mode 100644 index 0000000..422a23d --- /dev/null +++ b/cad/pcb_outline.dxf @@ -0,0 +1,536 @@ + 0 +SECTION + 2 +HEADER + 9 +$ACADVER + 1 +AC1009 + 9 +$INSBASE + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$EXTMIN + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$EXTMAX + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +ENDSEC + 0 +SECTION + 2 +TABLES + 0 +TABLE + 2 +VPORT + 70 +0 + 0 +ENDTAB + 0 +TABLE + 2 +LTYPE + 70 +1 + 0 +LTYPE + 2 +CONTINUOUS + 70 +0 + 3 +Solid line + 72 +65 + 73 +0 + 40 +0.0 + 0 +ENDTAB + 0 +TABLE + 2 +LAYER + 70 +1 + 0 +LAYER + 2 +0 + 70 +64 + 62 +7 + 6 +continuous + 0 +ENDTAB + 0 +TABLE + 2 +STYLE + 70 +1 + 0 +STYLE + 2 +STANDARD + 70 +0 + 40 +0 + 41 +1.0 + 50 +0.0 + 71 +0 + 42 +1 + 3 +ARIAL.TTF + 4 + + 0 +ENDTAB + 0 +TABLE + 2 +VIEW + 70 +0 + 0 +ENDTAB + 0 +ENDSEC + 0 +SECTION + 2 +BLOCKS + 0 +BLOCK + 8 +0 + 2 +SKETCH + 70 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +SKETCH + 0 +POLYLINE + 8 +0 + 62 +7 + 70 +1 + 66 +1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 8 +0 + 10 +16.400000000000002 + 20 +7.431276388518711 + 30 +0.0 + 0 +VERTEX + 8 +0 + 10 +17.5 + 20 +7.431276388518711 + 30 +0.0 + 0 +VERTEX + 8 +0 + 10 +17.5 + 20 +14.5 + 30 +0.0 + 42 +0.414213562373095 + 0 +VERTEX + 8 +0 + 10 +14.500000000000002 + 20 +17.5 + 30 +0.0 + 0 +VERTEX + 8 +0 + 10 +-14.500000000000002 + 20 +17.5 + 30 +0.0 + 42 +0.414213562373095 + 0 +VERTEX + 8 +0 + 10 +-17.5 + 20 +14.5 + 30 +0.0 + 0 +VERTEX + 8 +0 + 10 +-17.5 + 20 +-14.5 + 30 +0.0 + 42 +0.41421356237309503 + 0 +VERTEX + 8 +0 + 10 +-14.500000000000002 + 20 +-17.5 + 30 +0.0 + 0 +VERTEX + 8 +0 + 10 +14.499999999999995 + 20 +-17.5 + 30 +0.0 + 42 +0.41421356237309503 + 0 +VERTEX + 8 +0 + 10 +17.499999999999993 + 20 +-14.5 + 30 +0.0 + 0 +VERTEX + 8 +0 + 10 +17.499999999999996 + 20 +-8.949158870918295 + 30 +0.0 + 0 +VERTEX + 8 +0 + 10 +16.4 + 20 +-8.949158870918295 + 30 +0.0 + 42 +-0.4142135623730932 + 0 +VERTEX + 8 +0 + 10 +16.15 + 20 +-8.699158870918295 + 30 +0.0 + 0 +VERTEX + 8 +0 + 10 +16.15 + 20 +-5.399158870918294 + 30 +0.0 + 42 +-0.4142135623730967 + 0 +VERTEX + 8 +0 + 10 +16.4 + 20 +-5.149158870918294 + 30 +0.0 + 0 +VERTEX + 8 +0 + 10 +17.5 + 20 +-5.149158870918294 + 30 +0.0 + 0 +VERTEX + 8 +0 + 10 +17.5 + 20 +-1.9491588709182937 + 30 +0.0 + 0 +VERTEX + 8 +0 + 10 +16.4 + 20 +-1.9491588709182934 + 30 +0.0 + 42 +-0.4142135623730933 + 0 +VERTEX + 8 +0 + 10 +16.15 + 20 +-1.6991588709182937 + 30 +0.0 + 0 +VERTEX + 8 +0 + 10 +16.15 + 20 +-4.0275046997025876e-29 + 30 +0.0 + 0 +VERTEX + 8 +0 + 10 +16.15 + 20 +1.6991588709182937 + 30 +0.0 + 42 +-0.30014982232863346 + 0 +VERTEX + 8 +0 + 10 +16.379832755841093 + 20 +1.850787613213165 + 30 +0.0 + 0 +VERTEX + 8 +0 + 10 +17.5 + 20 +1.850787613213165 + 30 +0.0 + 0 +VERTEX + 8 +0 + 10 +17.5 + 20 +3.631276388518711 + 30 +0.0 + 0 +VERTEX + 8 +0 + 10 +16.400000000000002 + 20 +3.631276388518711 + 30 +0.0 + 42 +-0.41421356237309437 + 0 +VERTEX + 8 +0 + 10 +16.150000000000002 + 20 +3.881276388518711 + 30 +0.0 + 0 +VERTEX + 8 +0 + 10 +16.150000000000002 + 20 +7.181276388518711 + 30 +0.0 + 42 +-0.4142135623730962 + 0 +SEQEND + 8 +0 + 0 +CIRCLE + 8 +0 + 62 +7 + 10 +-15.5 + 20 +13.499999999999998 + 30 +0.0 + 40 +1.1 + 0 +CIRCLE + 8 +0 + 62 +7 + 10 +-15.5 + 20 +-13.499999999999995 + 30 +0.0 + 40 +1.1 + 0 +CIRCLE + 8 +0 + 62 +7 + 10 +15.5 + 20 +-13.499999999999995 + 30 +0.0 + 40 +1.1 + 0 +CIRCLE + 8 +0 + 62 +7 + 10 +15.5 + 20 +13.499999999999998 + 30 +0.0 + 40 +1.1 + 0 +ENDBLK + 0 +ENDSEC + 0 +SECTION + 2 +ENTITIES + 0 +INSERT + 2 +SKETCH + 8 +0 + 62 +7 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +ENDSEC + 0 +EOF diff --git a/cad/watch_board.FCStd b/cad/watch_board.FCStd new file mode 100644 index 0000000000000000000000000000000000000000..70450f33930f75cfde3bf32a7f783b9085da5299 GIT binary patch literal 14422 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 literal 0 HcmV?d00001 diff --git a/cad/watch_board.FCStd1 b/cad/watch_board.FCStd1 new file mode 100644 index 0000000000000000000000000000000000000000..327f80c7dfda1fb936432d6c5023a16a226eb3b4 GIT binary patch literal 14675 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

?d4mkU%y3$e!z_iANcM|tv1JkzWs>tWZ?zQ`G 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 AZ2$lO literal 0 HcmV?d00001 diff --git a/ecad/watch-v1_1.net b/ecad/watch-v1_1.net new file mode 100644 index 0000000..667cd98 --- /dev/null +++ b/ecad/watch-v1_1.net @@ -0,0 +1,395 @@ +(export (version D) + (design + (source /home/max/work/kicad/kicad.sch) + (date "Wed 28 Aug 2019 08:52:54 PM PDT") + (tool "Eeschema 5.0.2+dfsg1-1") + (sheet (number 1) (name /) (tstamps /) + (title_block + (title) + (company) + (rev) + (date) + (source kicad.sch) + (comment (number 1) (value "")) + (comment (number 2) (value "")) + (comment (number 3) (value "")) + (comment (number 4) (value ""))))) + (components + (comp (ref U1) + (value STM32L031F6Px) + (footprint Package_SO:TSSOP-20_4.4x6.5mm_P0.65mm) + (libsource (lib kicad-rescue) (part STM32L031F6Px) (description "")) + (sheetpath (names /) (tstamps /)) + (tstamp 5CBC08BF)) + (comp (ref Y1) + (value Crystal) + (footprint Crystal:Crystal_SMD_G8-2Pin_3.2x1.5mm_HandSoldering) + (datasheet ~) + (libsource (lib Device) (part Crystal) (description "Two pin crystal")) + (sheetpath (names /) (tstamps /)) + (tstamp 5CC13AA5)) + (comp (ref SW1) + (value SW_Push) + (footprint footprints:Panasonic_RightAngle_Button) + (libsource (lib Switch) (part SW_Push) (description "Push button switch, generic, two pins")) + (sheetpath (names /) (tstamps /)) + (tstamp 5CC13D70)) + (comp (ref SW2) + (value SW_Push) + (footprint footprints:Panasonic_RightAngle_Button) + (libsource (lib Switch) (part SW_Push) (description "Push button switch, generic, two pins")) + (sheetpath (names /) (tstamps /)) + (tstamp 5CC13E33)) + (comp (ref SW3) + (value SW_Push) + (footprint footprints:Panasonic_RightAngle_Button) + (libsource (lib Switch) (part SW_Push) (description "Push button switch, generic, two pins")) + (sheetpath (names /) (tstamps /)) + (tstamp 5CC13EAF)) + (comp (ref C3) + (value 4.3pF) + (footprint Capacitor_SMD:C_0805_2012Metric_Pad1.15x1.40mm_HandSolder) + (datasheet ~) + (libsource (lib Device) (part C_Small) (description "Unpolarized capacitor, small symbol")) + (sheetpath (names /) (tstamps /)) + (tstamp 5CC14877)) + (comp (ref C4) + (value 4.3pF) + (footprint Capacitor_SMD:C_0805_2012Metric_Pad1.15x1.40mm_HandSolder) + (datasheet ~) + (libsource (lib Device) (part C_Small) (description "Unpolarized capacitor, small symbol")) + (sheetpath (names /) (tstamps /)) + (tstamp 5CC14926)) + (comp (ref C1) + (value 100nF) + (footprint Capacitor_SMD:C_0805_2012Metric_Pad1.15x1.40mm_HandSolder) + (datasheet ~) + (fields + (field (name Spice_Model) 100nF) + (field (name Spice_Netlist_Enabled) Y) + (field (name Spice_Primitive) C)) + (libsource (lib Device) (part C_Small) (description "Unpolarized capacitor, small symbol")) + (sheetpath (names /) (tstamps /)) + (tstamp 5CC1601D)) + (comp (ref C2) + (value 100nF) + (footprint Capacitor_SMD:C_0805_2012Metric_Pad1.15x1.40mm_HandSolder) + (datasheet ~) + (libsource (lib Device) (part C_Small) (description "Unpolarized capacitor, small symbol")) + (sheetpath (names /) (tstamps /)) + (tstamp 5CC160C6)) + (comp (ref C6) + (value 100nF) + (footprint Capacitor_SMD:C_0805_2012Metric_Pad1.15x1.40mm_HandSolder) + (datasheet ~) + (libsource (lib Device) (part C_Small) (description "Unpolarized capacitor, small symbol")) + (sheetpath (names /) (tstamps /)) + (tstamp 5CC1613E)) + (comp (ref J2) + (value "Display FPC") + (footprint 0528921033:MOLEX_0528921033) + (datasheet Molex) + (fields + (field (name Field4) "Conn Ffc Bottom 10pos 0.50mm r/a") + (field (name Field5) None) + (field (name Field6) Unavailable) + (field (name Field7) None) + (field (name Field8) 0528921033)) + (libsource (lib 0528921033) (part 0528921033) (description "")) + (sheetpath (names /) (tstamps /)) + (tstamp 5CC19477)) + (comp (ref BT1) + (value CR2025) + (footprint footprints:CR2025-LINX) + (datasheet ~) + (libsource (lib Device) (part Battery_Cell) (description "Single-cell battery")) + (sheetpath (names /) (tstamps /)) + (tstamp 5CC3508E)) + (comp (ref C5) + (value 100nF) + (footprint Capacitor_SMD:C_0805_2012Metric_Pad1.15x1.40mm_HandSolder) + (datasheet ~) + (libsource (lib Device) (part C_Small) (description "Unpolarized capacitor, small symbol")) + (sheetpath (names /) (tstamps /)) + (tstamp 5CC3ABC3)) + (comp (ref J1) + (value "SWD Headers") + (footprint Connector_PinHeader_2.54mm:PinHeader_1x05_P2.54mm_Vertical) + (datasheet ~) + (libsource (lib Connector) (part Conn_01x05_Female) (description "Generic connector, single row, 01x05, script generated (kicad-library-utils/schlib/autogen/connector/)")) + (sheetpath (names /) (tstamps /)) + (tstamp 5CC5188F)) + (comp (ref R1) + (value 10k) + (footprint Resistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolder) + (datasheet ~) + (libsource (lib Device) (part R_Small_US) (description "Resistor, small US symbol")) + (sheetpath (names /) (tstamps /)) + (tstamp 5CC5BB36)) + (comp (ref C9) + (value 1uF) + (footprint Capacitor_SMD:C_0805_2012Metric_Pad1.15x1.40mm_HandSolder) + (datasheet ~) + (libsource (lib Device) (part C_Small) (description "Unpolarized capacitor, small symbol")) + (sheetpath (names /) (tstamps /)) + (tstamp 5CC8A464)) + (comp (ref C8) + (value 100nF) + (footprint Capacitor_SMD:C_0805_2012Metric_Pad1.15x1.40mm_HandSolder) + (datasheet ~) + (libsource (lib Device) (part C_Small) (description "Unpolarized capacitor, small symbol")) + (sheetpath (names /) (tstamps /)) + (tstamp 5CC8A56E)) + (comp (ref TP0) + (value TestPoint) + (footprint TestPoint:TestPoint_Pad_D1.0mm) + (datasheet ~) + (libsource (lib Connector) (part TestPoint) (description "test point")) + (sheetpath (names /) (tstamps /)) + (tstamp 5CCA9B83)) + (comp (ref TP1) + (value TestPoint) + (footprint TestPoint:TestPoint_Pad_D1.0mm) + (datasheet ~) + (libsource (lib Connector) (part TestPoint) (description "test point")) + (sheetpath (names /) (tstamps /)) + (tstamp 5CCA9C4C)) + (comp (ref TP2) + (value TestPoint) + (footprint TestPoint:TestPoint_Pad_D1.0mm) + (datasheet ~) + (libsource (lib Connector) (part TestPoint) (description "test point")) + (sheetpath (names /) (tstamps /)) + (tstamp 5CCADC31)) + (comp (ref C7) + (value 1uF) + (footprint Capacitor_SMD:C_0805_2012Metric_Pad1.15x1.40mm_HandSolder) + (datasheet ~) + (libsource (lib Device) (part C_Small) (description "Unpolarized capacitor, small symbol")) + (sheetpath (names /) (tstamps /)) + (tstamp 5CD10A30))) + (libparts + (libpart (lib 0528921033) (part 0528921033) + (fields + (field (name Reference) J) + (field (name Value) 0528921033) + (field (name Footprint) MOLEX_0528921033) + (field (name Datasheet) Molex) + (field (name Field4) "Conn Ffc Bottom 10pos 0.50mm r/a") + (field (name Field5) None) + (field (name Field6) Unavailable) + (field (name Field7) None) + (field (name Field8) 0528921033)) + (pins + (pin (num 1) (name 1) (type passive)) + (pin (num 2) (name 2) (type passive)) + (pin (num 3) (name 3) (type passive)) + (pin (num 4) (name 4) (type passive)) + (pin (num 5) (name 5) (type passive)) + (pin (num 6) (name 6) (type passive)) + (pin (num 7) (name 7) (type passive)) + (pin (num 8) (name 8) (type passive)) + (pin (num 9) (name 9) (type passive)) + (pin (num 10) (name 10) (type passive)) + (pin (num 11) (name SHIELD) (type passive)) + (pin (num 12) (name SHIELD) (type passive)))) + (libpart (lib Connector) (part Conn_01x05_Female) + (description "Generic connector, single row, 01x05, script generated (kicad-library-utils/schlib/autogen/connector/)") + (docs ~) + (footprints + (fp Connector*:*_1x??_*)) + (fields + (field (name Reference) J) + (field (name Value) Conn_01x05_Female)) + (pins + (pin (num 1) (name Pin_1) (type passive)) + (pin (num 2) (name Pin_2) (type passive)) + (pin (num 3) (name Pin_3) (type passive)) + (pin (num 4) (name Pin_4) (type passive)) + (pin (num 5) (name Pin_5) (type passive)))) + (libpart (lib Connector) (part TestPoint) + (description "test point") + (docs ~) + (footprints + (fp Pin*) + (fp Test*)) + (fields + (field (name Reference) TP) + (field (name Value) TestPoint)) + (pins + (pin (num 1) (name 1) (type passive)))) + (libpart (lib Device) (part Battery_Cell) + (description "Single-cell battery") + (docs ~) + (fields + (field (name Reference) BT) + (field (name Value) Battery_Cell)) + (pins + (pin (num 1) (name +) (type passive)) + (pin (num 2) (name -) (type passive)))) + (libpart (lib Device) (part C_Small) + (description "Unpolarized capacitor, small symbol") + (docs ~) + (footprints + (fp C_*)) + (fields + (field (name Reference) C) + (field (name Value) C_Small)) + (pins + (pin (num 1) (name ~) (type passive)) + (pin (num 2) (name ~) (type passive)))) + (libpart (lib Device) (part Crystal) + (description "Two pin crystal") + (docs ~) + (footprints + (fp Crystal*)) + (fields + (field (name Reference) Y) + (field (name Value) Crystal)) + (pins + (pin (num 1) (name 1) (type passive)) + (pin (num 2) (name 2) (type passive)))) + (libpart (lib Device) (part R_Small_US) + (description "Resistor, small US symbol") + (docs ~) + (footprints + (fp R_*)) + (fields + (field (name Reference) R) + (field (name Value) R_Small_US)) + (pins + (pin (num 1) (name ~) (type passive)) + (pin (num 2) (name ~) (type passive)))) + (libpart (lib Switch) (part SW_Push) + (description "Push button switch, generic, two pins") + (fields + (field (name Reference) SW) + (field (name Value) SW_Push)) + (pins + (pin (num 1) (name 1) (type passive)) + (pin (num 2) (name 2) (type passive)))) + (libpart (lib kicad-rescue) (part STM32L031F6Px) + (footprints + (fp TSSOP*4.4x6.5mm*P0.65mm*)) + (fields + (field (name Reference) U) + (field (name Value) STM32L031F6Px) + (field (name Footprint) Package_SO:TSSOP-20_4.4x6.5mm_P0.65mm)) + (pins + (pin (num 1) (name BOOT0) (type input)) + (pin (num 2) (name PC14) (type BiDi)) + (pin (num 3) (name PC15) (type BiDi)) + (pin (num 4) (name NRST) (type input)) + (pin (num 5) (name VDDA) (type power_in)) + (pin (num 6) (name PA0) (type BiDi)) + (pin (num 7) (name PA1) (type BiDi)) + (pin (num 8) (name PA2) (type BiDi)) + (pin (num 9) (name PA3) (type BiDi)) + (pin (num 10) (name PA4) (type BiDi)) + (pin (num 11) (name PA5) (type BiDi)) + (pin (num 12) (name PA6) (type BiDi)) + (pin (num 13) (name PA7) (type BiDi)) + (pin (num 14) (name PB1) (type BiDi)) + (pin (num 15) (name VSS) (type power_in)) + (pin (num 16) (name VDD) (type power_in)) + (pin (num 17) (name PA9) (type BiDi)) + (pin (num 18) (name PA10) (type BiDi)) + (pin (num 19) (name PA13) (type BiDi)) + (pin (num 20) (name PA14) (type BiDi))))) + (libraries + (library (logical 0528921033) + (uri /home/max/Downloads/0528921033.lib)) + (library (logical Connector) + (uri /usr/share/kicad/library/Connector.lib)) + (library (logical Device) + (uri /usr/share/kicad/library/Device.lib)) + (library (logical Switch) + (uri /usr/share/kicad/library/Switch.lib)) + (library (logical kicad-rescue) + (uri /home/max/work/kicad/kicad-rescue.lib))) + (nets + (net (code 1) (name MCU_VDD) + (node (ref J2) (pin 8)) + (node (ref C7) (pin 1)) + (node (ref J2) (pin 5)) + (node (ref J2) (pin 6)) + (node (ref J2) (pin 7)) + (node (ref J1) (pin 2)) + (node (ref C8) (pin 1)) + (node (ref C9) (pin 2)) + (node (ref U1) (pin 16)) + (node (ref U1) (pin 5)) + (node (ref C6) (pin 1)) + (node (ref C2) (pin 1)) + (node (ref C1) (pin 1)) + (node (ref BT1) (pin 1))) + (net (code 2) (name SWCK) + (node (ref J1) (pin 3)) + (node (ref U1) (pin 20))) + (net (code 3) (name GND) + (node (ref C4) (pin 2)) + (node (ref C3) (pin 2)) + (node (ref J2) (pin 10)) + (node (ref J2) (pin 11)) + (node (ref J2) (pin 12)) + (node (ref C1) (pin 2)) + (node (ref J2) (pin 9)) + (node (ref C2) (pin 2)) + (node (ref C6) (pin 2)) + (node (ref SW3) (pin 1)) + (node (ref SW2) (pin 1)) + (node (ref SW1) (pin 1)) + (node (ref U1) (pin 9)) + (node (ref U1) (pin 18)) + (node (ref U1) (pin 17)) + (node (ref U1) (pin 15)) + (node (ref U1) (pin 12)) + (node (ref BT1) (pin 2)) + (node (ref C5) (pin 2)) + (node (ref J1) (pin 1)) + (node (ref C7) (pin 2)) + (node (ref R1) (pin 1)) + (node (ref C8) (pin 2)) + (node (ref C9) (pin 1))) + (net (code 4) (name SCK) + (node (ref TP0) (pin 1)) + (node (ref J2) (pin 1)) + (node (ref U1) (pin 11))) + (net (code 5) (name SS) + (node (ref J2) (pin 3)) + (node (ref U1) (pin 10)) + (node (ref TP2) (pin 1))) + (net (code 6) (name EXTCOMM) + (node (ref U1) (pin 13)) + (node (ref J2) (pin 4))) + (net (code 7) (name SWDIO) + (node (ref U1) (pin 19)) + (node (ref J1) (pin 4))) + (net (code 8) (name nRST) + (node (ref J1) (pin 5)) + (node (ref U1) (pin 4)) + (node (ref C5) (pin 1))) + (net (code 9) (name /BOOT0) + (node (ref U1) (pin 1)) + (node (ref R1) (pin 2))) + (net (code 10) (name /XOSC1) + (node (ref C4) (pin 1)) + (node (ref U1) (pin 3)) + (node (ref Y1) (pin 2))) + (net (code 11) (name BTN_MID) + (node (ref SW2) (pin 2)) + (node (ref U1) (pin 7))) + (net (code 12) (name BTN_DOWN) + (node (ref SW3) (pin 2)) + (node (ref U1) (pin 6))) + (net (code 13) (name BTN_UP) + (node (ref SW1) (pin 2)) + (node (ref U1) (pin 8))) + (net (code 14) (name MOSI) + (node (ref J2) (pin 2)) + (node (ref TP1) (pin 1)) + (node (ref U1) (pin 14))) + (net (code 15) (name /XOSC0) + (node (ref C3) (pin 1)) + (node (ref U1) (pin 2)) + (node (ref Y1) (pin 1))))) \ No newline at end of file diff --git a/ecad/watch_v1-1.kicad_pcb b/ecad/watch_v1-1.kicad_pcb new file mode 100644 index 0000000..70903d9 --- /dev/null +++ b/ecad/watch_v1-1.kicad_pcb @@ -0,0 +1,1516 @@ +(kicad_pcb (version 20171130) (host pcbnew 5.0.2+dfsg1-1) + + (general + (thickness 1.6) + (drawings 42) + (tracks 199) + (zones 0) + (modules 21) + (nets 16) + ) + + (page A4) + (layers + (0 F.Cu signal) + (31 B.Cu signal) + (32 B.Adhes user hide) + (33 F.Adhes user hide) + (34 B.Paste user hide) + (35 F.Paste user hide) + (36 B.SilkS user hide) + (37 F.SilkS user) + (38 B.Mask user) + (39 F.Mask user) + (40 Dwgs.User user hide) + (41 Cmts.User user hide) + (42 Eco1.User user hide) + (43 Eco2.User user hide) + (44 Edge.Cuts user) + (45 Margin user hide) + (46 B.CrtYd user hide) + (47 F.CrtYd user hide) + (48 B.Fab user hide) + (49 F.Fab user hide) + ) + + (setup + (last_trace_width 0.1524) + (trace_clearance 0.1524) + (zone_clearance 0.508) + (zone_45_only no) + (trace_min 0.1524) + (segment_width 0.1) + (edge_width 0.15) + (via_size 0.508) + (via_drill 0.254) + (via_min_size 0.508) + (via_min_drill 0.254) + (uvia_size 0.6858) + (uvia_drill 0.3302) + (uvias_allowed no) + (uvia_min_size 0.2) + (uvia_min_drill 0.1) + (pcb_text_width 0.3) + (pcb_text_size 1.5 1.5) + (mod_edge_width 0.15) + (mod_text_size 0.75 0.75) + (mod_text_width 0.1) + (pad_size 0.8 1.25) + (pad_drill 0) + (pad_to_mask_clearance 0) + (solder_mask_min_width 0.25) + (aux_axis_origin 0 0) + (grid_origin 27.95 30.8) + (visible_elements FFFFF7FF) + (pcbplotparams + (layerselection 0x010fc_ffffffff) + (usegerberextensions false) + (usegerberattributes false) + (usegerberadvancedattributes false) + (creategerberjobfile false) + (excludeedgelayer true) + (linewidth 0.100000) + (plotframeref false) + (viasonmask false) + (mode 1) + (useauxorigin false) + (hpglpennumber 1) + (hpglpenspeed 20) + (hpglpendiameter 15.000000) + (psnegative false) + (psa4output false) + (plotreference true) + (plotvalue true) + (plotinvisibletext false) + (padsonsilk false) + (subtractmaskfromsilk false) + (outputformat 1) + (mirror false) + (drillshape 0) + (scaleselection 1) + (outputdirectory "/home/max/work/kicad/")) + ) + + (net 0 "") + (net 1 GND) + (net 2 nRST) + (net 3 SWCK) + (net 4 SWDIO) + (net 5 SCK) + (net 6 MOSI) + (net 7 SS) + (net 8 EXTCOMM) + (net 9 BTN_UP) + (net 10 BTN_MID) + (net 11 BTN_DOWN) + (net 12 MCU_VDD) + (net 13 /BOOT0) + (net 14 /XOSC0) + (net 15 /XOSC1) + + (net_class Default "This is the default net class." + (clearance 0.1524) + (trace_width 0.1524) + (via_dia 0.508) + (via_drill 0.254) + (uvia_dia 0.6858) + (uvia_drill 0.3302) + (add_net /BOOT0) + (add_net /XOSC0) + (add_net /XOSC1) + (add_net BTN_DOWN) + (add_net BTN_MID) + (add_net BTN_UP) + (add_net EXTCOMM) + (add_net GND) + (add_net MCU_VDD) + (add_net MOSI) + (add_net SCK) + (add_net SS) + (add_net SWCK) + (add_net SWDIO) + (add_net nRST) + ) + + (module Button_Switch_SMD:EVP-AEJB2A (layer B.Cu) (tedit 5D6743D9) (tstamp 5D64A9CE) + (at 123.3905 42.611 270) + (path /5CC13D70) + (fp_text reference SW1 (at -3.175 0.5715 270) (layer B.SilkS) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text value SW_Push (at 0 2.8 270) (layer B.Fab) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (pad "" smd rect (at -2.475 -0.8 270) (size 0.65 0.7) (layers B.Cu B.Paste B.Mask)) + (pad "" smd rect (at 2.475 -0.8 270) (size 0.65 0.7) (layers B.Cu B.Paste B.Mask)) + (pad 1 smd rect (at 1.15 0.625 270) (size 0.8 1.25) (layers B.Cu B.Paste B.Mask) + (net 1 GND)) + (pad 2 smd rect (at 0 0.625 270) (size 0.8 1.25) (layers B.Cu B.Paste B.Mask) + (net 9 BTN_UP)) + (pad 1 smd rect (at -1.15 0.625 270) (size 0.8 1.25) (layers B.Cu B.Paste B.Mask) + (net 1 GND)) + ) + + (module Button_Switch_SMD:EVP-AEJB2A (layer B.Cu) (tedit 5D6743E3) (tstamp 5D64A9DD) + (at 123.3905 49.6595 270) + (path /5CC13E33) + (fp_text reference SW2 (at -3.2385 0.5715 270) (layer B.SilkS) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text value SW_Push (at 0 2.8 270) (layer B.Fab) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (pad "" smd rect (at -2.475 -0.8 270) (size 0.65 0.7) (layers B.Cu B.Paste B.Mask)) + (pad "" smd rect (at 2.475 -0.8 270) (size 0.65 0.7) (layers B.Cu B.Paste B.Mask)) + (pad 1 smd rect (at 1.15 0.625 270) (size 0.8 1.25) (layers B.Cu B.Paste B.Mask) + (net 1 GND)) + (pad 2 smd rect (at 0 0.625 270) (size 0.8 1.25) (layers B.Cu B.Paste B.Mask) + (net 10 BTN_MID)) + (pad 1 smd rect (at -1.15 0.625 270) (size 0.8 1.25) (layers B.Cu B.Paste B.Mask) + (net 1 GND)) + ) + + (module Button_Switch_SMD:EVP-AEJB2A (layer B.Cu) (tedit 5D6743ED) (tstamp 5D64A9EC) + (at 123.3905 56.6445 270) + (path /5CC13EAF) + (fp_text reference SW3 (at -3.3655 0.5715 270) (layer B.SilkS) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text value SW_Push (at 0 2.8 270) (layer B.Fab) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (pad "" smd rect (at -2.475 -0.8 270) (size 0.65 0.7) (layers B.Cu B.Paste B.Mask)) + (pad "" smd rect (at 2.475 -0.8 270) (size 0.65 0.7) (layers B.Cu B.Paste B.Mask)) + (pad 1 smd rect (at 1.15 0.625 270) (size 0.8 1.25) (layers B.Cu B.Paste B.Mask) + (net 1 GND)) + (pad 2 smd rect (at 0 0.625 270) (size 0.8 1.25) (layers B.Cu B.Paste B.Mask) + (net 11 BTN_DOWN)) + (pad 1 smd rect (at -1.15 0.625 270) (size 0.8 1.25) (layers B.Cu B.Paste B.Mask) + (net 1 GND)) + ) + + (module footprints:CR2025-LINX (layer B.Cu) (tedit 5CCFAE44) (tstamp 5D6223B7) + (at 104.023 41.595) + (path /5CC3508E) + (fp_text reference BT1 (at 8.75 -6) (layer B.SilkS) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text value CR2025 (at 0 10.16) (layer B.Fab) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_line (start 11.43 7.874) (end -11.43 7.874) (layer B.SilkS) (width 0.15)) + (fp_line (start 11.43 -7.62) (end 11.43 7.874) (layer B.SilkS) (width 0.15)) + (fp_line (start -11.43 -7.62) (end 11.43 -7.62) (layer B.SilkS) (width 0.15)) + (fp_line (start -11.43 7.874) (end -11.43 -7.62) (layer B.SilkS) (width 0.15)) + (pad 1 smd rect (at 11.5 0) (size 2.5 5.1) (layers B.Cu B.Paste B.Mask) + (net 12 MCU_VDD)) + (pad 1 smd rect (at -11.5 0) (size 2.5 5) (layers B.Cu B.Paste B.Mask) + (net 12 MCU_VDD)) + (pad 2 smd circle (at 0 0) (size 17.8 17.8) (layers B.Cu B.Paste B.Mask) + (net 1 GND)) + ) + + (module Capacitor_SMD:C_0805_2012Metric_Pad1.15x1.40mm_HandSolder (layer B.Cu) (tedit 5B36C52B) (tstamp 5D621031) + (at 118.755 46.294 90) + (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") + (tags "capacitor handsolder") + (path /5CC1601D) + (attr smd) + (fp_text reference C1 (at 2.794 0.4445 90) (layer B.SilkS) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text value 100nF (at 0 -1.65 90) (layer B.Fab) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text user %R (at 0 0 90) (layer B.Fab) + (effects (font (size 0.5 0.5) (thickness 0.08)) (justify mirror)) + ) + (fp_line (start 1.85 -0.95) (end -1.85 -0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start 1.85 0.95) (end 1.85 -0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start -1.85 0.95) (end 1.85 0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start -1.85 -0.95) (end -1.85 0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start -0.261252 -0.71) (end 0.261252 -0.71) (layer B.SilkS) (width 0.12)) + (fp_line (start -0.261252 0.71) (end 0.261252 0.71) (layer B.SilkS) (width 0.12)) + (fp_line (start 1 -0.6) (end -1 -0.6) (layer B.Fab) (width 0.1)) + (fp_line (start 1 0.6) (end 1 -0.6) (layer B.Fab) (width 0.1)) + (fp_line (start -1 0.6) (end 1 0.6) (layer B.Fab) (width 0.1)) + (fp_line (start -1 -0.6) (end -1 0.6) (layer B.Fab) (width 0.1)) + (pad 2 smd roundrect (at 1.025 0 90) (size 1.15 1.4) (layers B.Cu B.Paste B.Mask) (roundrect_rratio 0.217391) + (net 1 GND)) + (pad 1 smd roundrect (at -1.025 0 90) (size 1.15 1.4) (layers B.Cu B.Paste B.Mask) (roundrect_rratio 0.217391) + (net 12 MCU_VDD)) + (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitor_SMD:C_0805_2012Metric_Pad1.15x1.40mm_HandSolder (layer B.Cu) (tedit 5B36C52B) (tstamp 5D621067) + (at 116.7865 46.294 90) + (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") + (tags "capacitor handsolder") + (path /5CC160C6) + (attr smd) + (fp_text reference C2 (at 2.8575 1.143 90) (layer B.SilkS) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text value 100nF (at 0 -1.65 90) (layer B.Fab) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text user %R (at 0 0 90) (layer B.Fab) + (effects (font (size 0.5 0.5) (thickness 0.08)) (justify mirror)) + ) + (fp_line (start 1.85 -0.95) (end -1.85 -0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start 1.85 0.95) (end 1.85 -0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start -1.85 0.95) (end 1.85 0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start -1.85 -0.95) (end -1.85 0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start -0.261252 -0.71) (end 0.261252 -0.71) (layer B.SilkS) (width 0.12)) + (fp_line (start -0.261252 0.71) (end 0.261252 0.71) (layer B.SilkS) (width 0.12)) + (fp_line (start 1 -0.6) (end -1 -0.6) (layer B.Fab) (width 0.1)) + (fp_line (start 1 0.6) (end 1 -0.6) (layer B.Fab) (width 0.1)) + (fp_line (start -1 0.6) (end 1 0.6) (layer B.Fab) (width 0.1)) + (fp_line (start -1 -0.6) (end -1 0.6) (layer B.Fab) (width 0.1)) + (pad 2 smd roundrect (at 1.025 0 90) (size 1.15 1.4) (layers B.Cu B.Paste B.Mask) (roundrect_rratio 0.217391) + (net 1 GND)) + (pad 1 smd roundrect (at -1.025 0 90) (size 1.15 1.4) (layers B.Cu B.Paste B.Mask) (roundrect_rratio 0.217391) + (net 12 MCU_VDD)) + (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitor_SMD:C_0805_2012Metric_Pad1.15x1.40mm_HandSolder (layer B.Cu) (tedit 5B36C52B) (tstamp 5D621097) + (at 119.697854 61.407 270) + (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") + (tags "capacitor handsolder") + (path /5CC14877) + (attr smd) + (fp_text reference C3 (at 2.921 0 270) (layer B.SilkS) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text value 4.3pF (at 0 -1.65 270) (layer B.Fab) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text user %R (at 0 0 270) (layer B.Fab) + (effects (font (size 0.5 0.5) (thickness 0.08)) (justify mirror)) + ) + (fp_line (start 1.85 -0.95) (end -1.85 -0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start 1.85 0.95) (end 1.85 -0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start -1.85 0.95) (end 1.85 0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start -1.85 -0.95) (end -1.85 0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start -0.261252 -0.71) (end 0.261252 -0.71) (layer B.SilkS) (width 0.12)) + (fp_line (start -0.261252 0.71) (end 0.261252 0.71) (layer B.SilkS) (width 0.12)) + (fp_line (start 1 -0.6) (end -1 -0.6) (layer B.Fab) (width 0.1)) + (fp_line (start 1 0.6) (end 1 -0.6) (layer B.Fab) (width 0.1)) + (fp_line (start -1 0.6) (end 1 0.6) (layer B.Fab) (width 0.1)) + (fp_line (start -1 -0.6) (end -1 0.6) (layer B.Fab) (width 0.1)) + (pad 2 smd roundrect (at 1.025 0 270) (size 1.15 1.4) (layers B.Cu B.Paste B.Mask) (roundrect_rratio 0.217391) + (net 1 GND)) + (pad 1 smd roundrect (at -1.025 0 270) (size 1.15 1.4) (layers B.Cu B.Paste B.Mask) (roundrect_rratio 0.217391) + (net 14 /XOSC0)) + (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitor_SMD:C_0805_2012Metric_Pad1.15x1.40mm_HandSolder (layer B.Cu) (tedit 5B36C52B) (tstamp 5D6210C7) + (at 117.792854 61.407 270) + (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") + (tags "capacitor handsolder") + (path /5CC14926) + (attr smd) + (fp_text reference C4 (at 2.793 -0.1375 270) (layer B.SilkS) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text value 4.3pF (at 0 -1.65 270) (layer B.Fab) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text user %R (at 0 0 270) (layer B.Fab) + (effects (font (size 0.5 0.5) (thickness 0.08)) (justify mirror)) + ) + (fp_line (start 1.85 -0.95) (end -1.85 -0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start 1.85 0.95) (end 1.85 -0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start -1.85 0.95) (end 1.85 0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start -1.85 -0.95) (end -1.85 0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start -0.261252 -0.71) (end 0.261252 -0.71) (layer B.SilkS) (width 0.12)) + (fp_line (start -0.261252 0.71) (end 0.261252 0.71) (layer B.SilkS) (width 0.12)) + (fp_line (start 1 -0.6) (end -1 -0.6) (layer B.Fab) (width 0.1)) + (fp_line (start 1 0.6) (end 1 -0.6) (layer B.Fab) (width 0.1)) + (fp_line (start -1 0.6) (end 1 0.6) (layer B.Fab) (width 0.1)) + (fp_line (start -1 -0.6) (end -1 0.6) (layer B.Fab) (width 0.1)) + (pad 2 smd roundrect (at 1.025 0 270) (size 1.15 1.4) (layers B.Cu B.Paste B.Mask) (roundrect_rratio 0.217391) + (net 1 GND)) + (pad 1 smd roundrect (at -1.025 0 270) (size 1.15 1.4) (layers B.Cu B.Paste B.Mask) (roundrect_rratio 0.217391) + (net 15 /XOSC1)) + (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitor_SMD:C_0805_2012Metric_Pad1.15x1.40mm_HandSolder (layer B.Cu) (tedit 5B36C52B) (tstamp 5D621397) + (at 115.7705 63.2485 270) + (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") + (tags "capacitor handsolder") + (path /5CC3ABC3) + (attr smd) + (fp_text reference C5 (at 1.143 3.8735 270) (layer B.SilkS) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text value 100nF (at 0 -1.65 270) (layer B.Fab) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text user %R (at 0 0 270) (layer B.Fab) + (effects (font (size 0.5 0.5) (thickness 0.08)) (justify mirror)) + ) + (fp_line (start 1.85 -0.95) (end -1.85 -0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start 1.85 0.95) (end 1.85 -0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start -1.85 0.95) (end 1.85 0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start -1.85 -0.95) (end -1.85 0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start -0.261252 -0.71) (end 0.261252 -0.71) (layer B.SilkS) (width 0.12)) + (fp_line (start -0.261252 0.71) (end 0.261252 0.71) (layer B.SilkS) (width 0.12)) + (fp_line (start 1 -0.6) (end -1 -0.6) (layer B.Fab) (width 0.1)) + (fp_line (start 1 0.6) (end 1 -0.6) (layer B.Fab) (width 0.1)) + (fp_line (start -1 0.6) (end 1 0.6) (layer B.Fab) (width 0.1)) + (fp_line (start -1 -0.6) (end -1 0.6) (layer B.Fab) (width 0.1)) + (pad 2 smd roundrect (at 1.025 0 270) (size 1.15 1.4) (layers B.Cu B.Paste B.Mask) (roundrect_rratio 0.217391) + (net 1 GND)) + (pad 1 smd roundrect (at -1.025 0 270) (size 1.15 1.4) (layers B.Cu B.Paste B.Mask) (roundrect_rratio 0.217391) + (net 2 nRST)) + (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitor_SMD:C_0805_2012Metric_Pad1.15x1.40mm_HandSolder (layer B.Cu) (tedit 5B36C52B) (tstamp 5D621367) + (at 114.818 58.876 270) + (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") + (tags "capacitor handsolder") + (path /5CC1613E) + (attr smd) + (fp_text reference C6 (at 1.261 1.778 270) (layer B.SilkS) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text value 100nF (at 0 -1.65 270) (layer B.Fab) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text user %R (at 0 0 270) (layer B.Fab) + (effects (font (size 0.5 0.5) (thickness 0.08)) (justify mirror)) + ) + (fp_line (start 1.85 -0.95) (end -1.85 -0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start 1.85 0.95) (end 1.85 -0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start -1.85 0.95) (end 1.85 0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start -1.85 -0.95) (end -1.85 0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start -0.261252 -0.71) (end 0.261252 -0.71) (layer B.SilkS) (width 0.12)) + (fp_line (start -0.261252 0.71) (end 0.261252 0.71) (layer B.SilkS) (width 0.12)) + (fp_line (start 1 -0.6) (end -1 -0.6) (layer B.Fab) (width 0.1)) + (fp_line (start 1 0.6) (end 1 -0.6) (layer B.Fab) (width 0.1)) + (fp_line (start -1 0.6) (end 1 0.6) (layer B.Fab) (width 0.1)) + (fp_line (start -1 -0.6) (end -1 0.6) (layer B.Fab) (width 0.1)) + (pad 2 smd roundrect (at 1.025 0 270) (size 1.15 1.4) (layers B.Cu B.Paste B.Mask) (roundrect_rratio 0.217391) + (net 1 GND)) + (pad 1 smd roundrect (at -1.025 0 270) (size 1.15 1.4) (layers B.Cu B.Paste B.Mask) (roundrect_rratio 0.217391) + (net 12 MCU_VDD)) + (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitor_SMD:C_0805_2012Metric_Pad1.15x1.40mm_HandSolder (layer B.Cu) (tedit 5B36C52B) (tstamp 5D621001) + (at 111.0715 52.517) + (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") + (tags "capacitor handsolder") + (path /5CC8A56E) + (attr smd) + (fp_text reference C8 (at 1.3335 -3.556) (layer B.SilkS) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text value 100nF (at 0 -1.65) (layer B.Fab) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text user %R (at 0 0) (layer B.Fab) + (effects (font (size 0.5 0.5) (thickness 0.08)) (justify mirror)) + ) + (fp_line (start 1.85 -0.95) (end -1.85 -0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start 1.85 0.95) (end 1.85 -0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start -1.85 0.95) (end 1.85 0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start -1.85 -0.95) (end -1.85 0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start -0.261252 -0.71) (end 0.261252 -0.71) (layer B.SilkS) (width 0.12)) + (fp_line (start -0.261252 0.71) (end 0.261252 0.71) (layer B.SilkS) (width 0.12)) + (fp_line (start 1 -0.6) (end -1 -0.6) (layer B.Fab) (width 0.1)) + (fp_line (start 1 0.6) (end 1 -0.6) (layer B.Fab) (width 0.1)) + (fp_line (start -1 0.6) (end 1 0.6) (layer B.Fab) (width 0.1)) + (fp_line (start -1 -0.6) (end -1 0.6) (layer B.Fab) (width 0.1)) + (pad 2 smd roundrect (at 1.025 0) (size 1.15 1.4) (layers B.Cu B.Paste B.Mask) (roundrect_rratio 0.217391) + (net 1 GND)) + (pad 1 smd roundrect (at -1.025 0) (size 1.15 1.4) (layers B.Cu B.Paste B.Mask) (roundrect_rratio 0.217391) + (net 12 MCU_VDD)) + (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitor_SMD:C_0805_2012Metric_Pad1.15x1.40mm_HandSolder (layer B.Cu) (tedit 5B36C52B) (tstamp 5D6210FA) + (at 105.3565 52.136) + (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") + (tags "capacitor handsolder") + (path /5CC8A464) + (attr smd) + (fp_text reference C9 (at -2.7305 0) (layer B.SilkS) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text value 1uF (at 0 -1.65) (layer B.Fab) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text user %R (at 0 0) (layer B.Fab) + (effects (font (size 0.5 0.5) (thickness 0.08)) (justify mirror)) + ) + (fp_line (start 1.85 -0.95) (end -1.85 -0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start 1.85 0.95) (end 1.85 -0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start -1.85 0.95) (end 1.85 0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start -1.85 -0.95) (end -1.85 0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start -0.261252 -0.71) (end 0.261252 -0.71) (layer B.SilkS) (width 0.12)) + (fp_line (start -0.261252 0.71) (end 0.261252 0.71) (layer B.SilkS) (width 0.12)) + (fp_line (start 1 -0.6) (end -1 -0.6) (layer B.Fab) (width 0.1)) + (fp_line (start 1 0.6) (end 1 -0.6) (layer B.Fab) (width 0.1)) + (fp_line (start -1 0.6) (end 1 0.6) (layer B.Fab) (width 0.1)) + (fp_line (start -1 -0.6) (end -1 0.6) (layer B.Fab) (width 0.1)) + (pad 2 smd roundrect (at 1.025 0) (size 1.15 1.4) (layers B.Cu B.Paste B.Mask) (roundrect_rratio 0.217391) + (net 12 MCU_VDD)) + (pad 1 smd roundrect (at -1.025 0) (size 1.15 1.4) (layers B.Cu B.Paste B.Mask) (roundrect_rratio 0.217391) + (net 1 GND)) + (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Connector_PinHeader_2.54mm:PinHeader_1x05_P2.54mm_Vertical (layer B.Cu) (tedit 5D5F71B6) (tstamp 5D6211FB) + (at 92.0215 48.707 180) + (descr "Through hole straight pin header, 1x05, 2.54mm pitch, single row") + (tags "Through hole pin header THT 1x05 2.54mm single row") + (path /5CC5188F) + (fp_text reference J1 (at -2.5 -1.75 180) (layer B.SilkS) hide + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text value "SWD Headers" (at 0 -12.49 180) (layer B.Fab) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text user %R (at 0 -5.08 90) (layer B.Fab) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_line (start 1.8 1.8) (end -1.8 1.8) (layer B.CrtYd) (width 0.05)) + (fp_line (start 1.8 -11.95) (end 1.8 1.8) (layer B.CrtYd) (width 0.05)) + (fp_line (start -1.8 -11.95) (end 1.8 -11.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start -1.8 1.8) (end -1.8 -11.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start -1.33 1.33) (end 0 1.33) (layer B.SilkS) (width 0.12)) + (fp_line (start -1.33 0) (end -1.33 1.33) (layer B.SilkS) (width 0.12)) + (fp_line (start -1.33 -1.27) (end 1.33 -1.27) (layer B.SilkS) (width 0.12)) + (fp_line (start 1.33 -1.27) (end 1.33 -11.49) (layer B.SilkS) (width 0.12)) + (fp_line (start -1.33 -1.27) (end -1.33 -11.49) (layer B.SilkS) (width 0.12)) + (fp_line (start -1.33 -11.49) (end 1.33 -11.49) (layer B.SilkS) (width 0.12)) + (fp_line (start -1.27 0.635) (end -0.635 1.27) (layer B.Fab) (width 0.1)) + (fp_line (start -1.27 -11.43) (end -1.27 0.635) (layer B.Fab) (width 0.1)) + (fp_line (start 1.27 -11.43) (end -1.27 -11.43) (layer B.Fab) (width 0.1)) + (fp_line (start 1.27 1.27) (end 1.27 -11.43) (layer B.Fab) (width 0.1)) + (fp_line (start -0.635 1.27) (end 1.27 1.27) (layer B.Fab) (width 0.1)) + (pad 5 thru_hole oval (at 0 -10.16 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 2 nRST)) + (pad 4 thru_hole oval (at 0 -7.62 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 4 SWDIO)) + (pad 3 thru_hole oval (at 0 -5.08 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 3 SWCK)) + (pad 2 thru_hole oval (at 0 -2.54 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 12 MCU_VDD)) + (pad 1 thru_hole rect (at 0 0 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 1 GND)) + (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x05_P2.54mm_Vertical.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module 0528921033:MOLEX_0528921033 locked (layer B.Cu) (tedit 5D67544F) (tstamp 5D621176) + (at 107.175997 54.658233 180) + (path /5CC19477) + (attr smd) + (fp_text reference J2 (at -4.848003 -0.551913 180) (layer B.SilkS) + (effects (font (size 0.512839 0.512839) (thickness 0.05)) (justify mirror)) + ) + (fp_text value "Display FPC" (at -1.5 -6 180) (layer B.SilkS) + (effects (font (size 0.512831 0.512831) (thickness 0.05)) (justify mirror)) + ) + (fp_circle (center -2.9 0.2) (end -2.8 0.2) (layer B.SilkS) (width 0.2)) + (fp_poly (pts (xy -4.10426 -2.05) (xy -2.85 -2.05) (xy -2.85 -5.15535) (xy -4.10426 -5.15535)) (layer Dwgs.User) (width 0)) + (fp_poly (pts (xy 2.85723 -2.05) (xy 4.1 -2.05) (xy 4.1 -5.16307) (xy 2.85723 -5.16307)) (layer Dwgs.User) (width 0)) + (fp_line (start -5.95 -4.5) (end -5.95 -1.8) (layer Eco1.User) (width 0.05)) + (fp_line (start -4.55 -4.5) (end -5.95 -4.5) (layer Eco1.User) (width 0.05)) + (fp_line (start -4.55 -5.6) (end -4.55 -4.5) (layer Eco1.User) (width 0.05)) + (fp_line (start 4.55 -5.6) (end -4.55 -5.6) (layer Eco1.User) (width 0.05)) + (fp_line (start 4.55 -4.5) (end 4.55 -5.6) (layer Eco1.User) (width 0.05)) + (fp_line (start 5.95 -4.5) (end 4.55 -4.5) (layer Eco1.User) (width 0.05)) + (fp_line (start 5.95 -1.8) (end 5.95 -4.5) (layer Eco1.User) (width 0.05)) + (fp_line (start -2.69 0.95) (end -2.51 0.95) (layer Eco1.User) (width 0.05)) + (fp_line (start -2.69 -0.2) (end -2.69 0.95) (layer Eco1.User) (width 0.05)) + (fp_line (start -4.55 -0.2) (end -2.69 -0.2) (layer Eco1.User) (width 0.05)) + (fp_line (start -4.55 -1.8) (end -4.55 -0.2) (layer Eco1.User) (width 0.05)) + (fp_line (start -5.95 -1.8) (end -4.55 -1.8) (layer Eco1.User) (width 0.05)) + (fp_line (start 4.55 -1.8) (end 5.95 -1.8) (layer Eco1.User) (width 0.05)) + (fp_line (start 4.55 -0.2) (end 4.55 -1.8) (layer Eco1.User) (width 0.05)) + (fp_line (start 2.63 -0.2) (end 4.55 -0.2) (layer Eco1.User) (width 0.05)) + (fp_line (start 2.63 0.95) (end 2.63 -0.2) (layer Eco1.User) (width 0.05)) + (fp_line (start -2.5 0.95) (end 2.63 0.95) (layer Eco1.User) (width 0.05)) + (fp_line (start -4.3 -5.35) (end 4.3 -5.35) (layer B.SilkS) (width 0.127)) + (fp_line (start 4.3 -0.45) (end 4.3 -1.9) (layer B.SilkS) (width 0.127)) + (fp_line (start 2.5 -0.45) (end 4.3 -0.45) (layer B.SilkS) (width 0.127)) + (fp_line (start -4.3 -0.45) (end -2.53 -0.45) (layer B.SilkS) (width 0.127)) + (fp_line (start -4.3 -1.92) (end -4.3 -0.45) (layer B.SilkS) (width 0.127)) + (fp_line (start 4.3 -0.45) (end -4.3 -0.45) (layer Eco2.User) (width 0.127)) + (fp_line (start 4.3 -5.35) (end 4.3 -0.45) (layer Eco2.User) (width 0.127)) + (fp_line (start -4.3 -5.35) (end 4.3 -5.35) (layer Eco2.User) (width 0.127)) + (fp_line (start -4.3 -0.45) (end -4.3 -5.35) (layer Eco2.User) (width 0.127)) + (pad 12 smd rect (at 4.9 -3.15) (size 1.6 2.2) (layers B.Cu B.Paste B.Mask) + (net 1 GND)) + (pad 11 smd rect (at -4.9 -3.15) (size 1.6 2.2) (layers B.Cu B.Paste B.Mask) + (net 1 GND)) + (pad 10 smd rect (at 2.25 0 90) (size 1.4 0.3) (layers B.Cu B.Paste B.Mask) + (net 1 GND)) + (pad 9 smd rect (at 1.75 0 90) (size 1.4 0.3) (layers B.Cu B.Paste B.Mask) + (net 1 GND)) + (pad 8 smd rect (at 1.25 0 90) (size 1.4 0.3) (layers B.Cu B.Paste B.Mask) + (net 12 MCU_VDD)) + (pad 7 smd rect (at 0.75 0 90) (size 1.4 0.3) (layers B.Cu B.Paste B.Mask) + (net 12 MCU_VDD)) + (pad 6 smd rect (at 0.25 0 90) (size 1.4 0.3) (layers B.Cu B.Paste B.Mask) + (net 12 MCU_VDD)) + (pad 5 smd rect (at -0.25 0 90) (size 1.4 0.3) (layers B.Cu B.Paste B.Mask) + (net 12 MCU_VDD)) + (pad 4 smd rect (at -0.75 0 90) (size 1.4 0.3) (layers B.Cu B.Paste B.Mask) + (net 8 EXTCOMM)) + (pad 3 smd rect (at -1.25 0 90) (size 1.4 0.3) (layers B.Cu B.Paste B.Mask) + (net 7 SS)) + (pad 2 smd rect (at -1.75 0 90) (size 1.4 0.3) (layers B.Cu B.Paste B.Mask) + (net 6 MOSI)) + (pad 1 smd rect (at -2.25 0 90) (size 1.4 0.3) (layers B.Cu B.Paste B.Mask) + (net 5 SCK)) + ) + + (module Resistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolder (layer B.Cu) (tedit 5B36C52B) (tstamp 5D6227F8) + (at 113.675 63.2485 90) + (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") + (tags "resistor handsolder") + (path /5CC5BB36) + (attr smd) + (fp_text reference R1 (at -1.2065 -3.2385 90) (layer B.SilkS) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text value 10k (at 0 -1.65 90) (layer B.Fab) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text user %R (at 0 0 90) (layer B.Fab) + (effects (font (size 0.5 0.5) (thickness 0.08)) (justify mirror)) + ) + (fp_line (start 1.85 -0.95) (end -1.85 -0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start 1.85 0.95) (end 1.85 -0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start -1.85 0.95) (end 1.85 0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start -1.85 -0.95) (end -1.85 0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start -0.261252 -0.71) (end 0.261252 -0.71) (layer B.SilkS) (width 0.12)) + (fp_line (start -0.261252 0.71) (end 0.261252 0.71) (layer B.SilkS) (width 0.12)) + (fp_line (start 1 -0.6) (end -1 -0.6) (layer B.Fab) (width 0.1)) + (fp_line (start 1 0.6) (end 1 -0.6) (layer B.Fab) (width 0.1)) + (fp_line (start -1 0.6) (end 1 0.6) (layer B.Fab) (width 0.1)) + (fp_line (start -1 -0.6) (end -1 0.6) (layer B.Fab) (width 0.1)) + (pad 2 smd roundrect (at 1.025 0 90) (size 1.15 1.4) (layers B.Cu B.Paste B.Mask) (roundrect_rratio 0.217391) + (net 13 /BOOT0)) + (pad 1 smd roundrect (at -1.025 0 90) (size 1.15 1.4) (layers B.Cu B.Paste B.Mask) (roundrect_rratio 0.217391) + (net 1 GND)) + (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Package_SO:TSSOP-20_4.4x6.5mm_P0.65mm (layer B.Cu) (tedit 5A02F25C) (tstamp 5D621308) + (at 117.104 52.7075 90) + (descr "20-Lead Plastic Thin Shrink Small Outline (ST)-4.4 mm Body [TSSOP] (see Microchip Packaging Specification 00000049BS.pdf)") + (tags "SSOP 0.65") + (path /5CBC08BF) + (attr smd) + (fp_text reference U1 (at -1.9685 4.2545 90) (layer B.SilkS) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text value STM32L031F6Px (at 0 -4.3 90) (layer B.Fab) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text user %R (at 0 0 90) (layer B.Fab) + (effects (font (size 0.8 0.8) (thickness 0.15)) (justify mirror)) + ) + (fp_line (start -3.75 3.45) (end 2.225 3.45) (layer B.SilkS) (width 0.15)) + (fp_line (start -2.225 -3.45) (end 2.225 -3.45) (layer B.SilkS) (width 0.15)) + (fp_line (start -3.95 -3.55) (end 3.95 -3.55) (layer B.CrtYd) (width 0.05)) + (fp_line (start -3.95 3.55) (end 3.95 3.55) (layer B.CrtYd) (width 0.05)) + (fp_line (start 3.95 3.55) (end 3.95 -3.55) (layer B.CrtYd) (width 0.05)) + (fp_line (start -3.95 3.55) (end -3.95 -3.55) (layer B.CrtYd) (width 0.05)) + (fp_line (start -2.2 2.25) (end -1.2 3.25) (layer B.Fab) (width 0.15)) + (fp_line (start -2.2 -3.25) (end -2.2 2.25) (layer B.Fab) (width 0.15)) + (fp_line (start 2.2 -3.25) (end -2.2 -3.25) (layer B.Fab) (width 0.15)) + (fp_line (start 2.2 3.25) (end 2.2 -3.25) (layer B.Fab) (width 0.15)) + (fp_line (start -1.2 3.25) (end 2.2 3.25) (layer B.Fab) (width 0.15)) + (pad 20 smd rect (at 2.95 2.925 90) (size 1.45 0.45) (layers B.Cu B.Paste B.Mask) + (net 3 SWCK)) + (pad 19 smd rect (at 2.95 2.275 90) (size 1.45 0.45) (layers B.Cu B.Paste B.Mask) + (net 4 SWDIO)) + (pad 18 smd rect (at 2.95 1.625 90) (size 1.45 0.45) (layers B.Cu B.Paste B.Mask) + (net 1 GND)) + (pad 17 smd rect (at 2.95 0.975 90) (size 1.45 0.45) (layers B.Cu B.Paste B.Mask) + (net 1 GND)) + (pad 16 smd rect (at 2.95 0.325 90) (size 1.45 0.45) (layers B.Cu B.Paste B.Mask) + (net 12 MCU_VDD)) + (pad 15 smd rect (at 2.95 -0.325 90) (size 1.45 0.45) (layers B.Cu B.Paste B.Mask) + (net 1 GND)) + (pad 14 smd rect (at 2.95 -0.975 90) (size 1.45 0.45) (layers B.Cu B.Paste B.Mask) + (net 6 MOSI)) + (pad 13 smd rect (at 2.95 -1.625 90) (size 1.45 0.45) (layers B.Cu B.Paste B.Mask) + (net 8 EXTCOMM)) + (pad 12 smd rect (at 2.95 -2.275 90) (size 1.45 0.45) (layers B.Cu B.Paste B.Mask) + (net 1 GND)) + (pad 11 smd rect (at 2.95 -2.925 90) (size 1.45 0.45) (layers B.Cu B.Paste B.Mask) + (net 5 SCK)) + (pad 10 smd rect (at -2.95 -2.925 90) (size 1.45 0.45) (layers B.Cu B.Paste B.Mask) + (net 7 SS)) + (pad 9 smd rect (at -2.95 -2.275 90) (size 1.45 0.45) (layers B.Cu B.Paste B.Mask) + (net 1 GND)) + (pad 8 smd rect (at -2.95 -1.625 90) (size 1.45 0.45) (layers B.Cu B.Paste B.Mask) + (net 9 BTN_UP)) + (pad 7 smd rect (at -2.95 -0.975 90) (size 1.45 0.45) (layers B.Cu B.Paste B.Mask) + (net 10 BTN_MID)) + (pad 6 smd rect (at -2.95 -0.325 90) (size 1.45 0.45) (layers B.Cu B.Paste B.Mask) + (net 11 BTN_DOWN)) + (pad 5 smd rect (at -2.95 0.325 90) (size 1.45 0.45) (layers B.Cu B.Paste B.Mask) + (net 12 MCU_VDD)) + (pad 4 smd rect (at -2.95 0.975 90) (size 1.45 0.45) (layers B.Cu B.Paste B.Mask) + (net 2 nRST)) + (pad 3 smd rect (at -2.95 1.625 90) (size 1.45 0.45) (layers B.Cu B.Paste B.Mask) + (net 15 /XOSC1)) + (pad 2 smd rect (at -2.95 2.275 90) (size 1.45 0.45) (layers B.Cu B.Paste B.Mask) + (net 14 /XOSC0)) + (pad 1 smd rect (at -2.95 2.925 90) (size 1.45 0.45) (layers B.Cu B.Paste B.Mask) + (net 13 /BOOT0)) + (model ${KISYS3DMOD}/Package_SO.3dshapes/TSSOP-20_4.4x6.5mm_P0.65mm.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Crystal:Crystal_SMD_G8-2Pin_3.2x1.5mm_HandSoldering (layer B.Cu) (tedit 5A0FD1B2) (tstamp 5D621298) + (at 118.872354 58.2955 180) + (descr "SMD Crystal G8, hand-soldering, 3.2x1.5mm^2 package") + (tags "SMD SMT crystal hand-soldering") + (path /5CC13AA5) + (attr smd) + (fp_text reference Y1 (at -2.867146 -2.286 90) (layer B.SilkS) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text value Crystal (at 0 -1.95 180) (layer B.Fab) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_circle (center 0 0) (end 0.058333 0) (layer B.Adhes) (width 0.116667)) + (fp_circle (center 0 0) (end 0.133333 0) (layer B.Adhes) (width 0.083333)) + (fp_circle (center 0 0) (end 0.208333 0) (layer B.Adhes) (width 0.083333)) + (fp_circle (center 0 0) (end 0.25 0) (layer B.Adhes) (width 0.1)) + (fp_line (start 2.8 1.2) (end -2.8 1.2) (layer B.CrtYd) (width 0.05)) + (fp_line (start 2.8 -1.2) (end 2.8 1.2) (layer B.CrtYd) (width 0.05)) + (fp_line (start -2.8 -1.2) (end 2.8 -1.2) (layer B.CrtYd) (width 0.05)) + (fp_line (start -2.8 1.2) (end -2.8 -1.2) (layer B.CrtYd) (width 0.05)) + (fp_line (start -2.7 0.9) (end -2.7 -0.9) (layer B.SilkS) (width 0.12)) + (fp_line (start -0.55 -0.95) (end 0.55 -0.95) (layer B.SilkS) (width 0.12)) + (fp_line (start -0.55 0.95) (end 0.55 0.95) (layer B.SilkS) (width 0.12)) + (fp_line (start -1.6 -0.25) (end -1.1 -0.75) (layer B.Fab) (width 0.1)) + (fp_line (start 1.6 0.75) (end -1.6 0.75) (layer B.Fab) (width 0.1)) + (fp_line (start 1.6 -0.75) (end 1.6 0.75) (layer B.Fab) (width 0.1)) + (fp_line (start -1.6 -0.75) (end 1.6 -0.75) (layer B.Fab) (width 0.1)) + (fp_line (start -1.6 0.75) (end -1.6 -0.75) (layer B.Fab) (width 0.1)) + (fp_text user %R (at 0 0 180) (layer B.Fab) + (effects (font (size 0.7 0.7) (thickness 0.105)) (justify mirror)) + ) + (pad 2 smd rect (at 1.625 0 180) (size 1.75 1.8) (layers B.Cu B.Paste B.Mask) + (net 15 /XOSC1)) + (pad 1 smd rect (at -1.625 0 180) (size 1.75 1.8) (layers B.Cu B.Paste B.Mask) + (net 14 /XOSC0)) + (model ${KISYS3DMOD}/Crystal.3dshapes/Crystal_SMD_G8-2Pin_3.2x1.5mm_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitor_SMD:C_0805_2012Metric_Pad1.15x1.40mm_HandSolder (layer B.Cu) (tedit 5B36C52B) (tstamp 5D679998) + (at 111.0715 50.5485) + (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") + (tags "capacitor handsolder") + (path /5CD10A30) + (attr smd) + (fp_text reference C7 (at 1.3335 -2.794) (layer B.SilkS) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text value 1uF (at 0 -1.65) (layer B.Fab) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_line (start -1 -0.6) (end -1 0.6) (layer B.Fab) (width 0.1)) + (fp_line (start -1 0.6) (end 1 0.6) (layer B.Fab) (width 0.1)) + (fp_line (start 1 0.6) (end 1 -0.6) (layer B.Fab) (width 0.1)) + (fp_line (start 1 -0.6) (end -1 -0.6) (layer B.Fab) (width 0.1)) + (fp_line (start -0.261252 0.71) (end 0.261252 0.71) (layer B.SilkS) (width 0.12)) + (fp_line (start -0.261252 -0.71) (end 0.261252 -0.71) (layer B.SilkS) (width 0.12)) + (fp_line (start -1.85 -0.95) (end -1.85 0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start -1.85 0.95) (end 1.85 0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start 1.85 0.95) (end 1.85 -0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start 1.85 -0.95) (end -1.85 -0.95) (layer B.CrtYd) (width 0.05)) + (fp_text user %R (at 0 0) (layer B.Fab) + (effects (font (size 0.5 0.5) (thickness 0.08)) (justify mirror)) + ) + (pad 1 smd roundrect (at -1.025 0) (size 1.15 1.4) (layers B.Cu B.Paste B.Mask) (roundrect_rratio 0.217391) + (net 12 MCU_VDD)) + (pad 2 smd roundrect (at 1.025 0) (size 1.15 1.4) (layers B.Cu B.Paste B.Mask) (roundrect_rratio 0.217391) + (net 1 GND)) + (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module TestPoint:TestPoint_Pad_D1.0mm (layer B.Cu) (tedit 5A0F774F) (tstamp 5D64A9F4) + (at 99.959 63.1215 90) + (descr "SMD pad as test Point, diameter 1.0mm") + (tags "test point SMD pad") + (path /5CCA9B83) + (attr virtual) + (fp_text reference TP0 (at 2.159 0 90) (layer B.SilkS) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text value TestPoint (at 0 -1.55 90) (layer B.Fab) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text user %R (at 0 1.45 90) (layer B.Fab) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_circle (center 0 0) (end 1 0) (layer B.CrtYd) (width 0.05)) + (fp_circle (center 0 0) (end 0 -0.7) (layer B.SilkS) (width 0.12)) + (pad 1 smd circle (at 0 0 90) (size 1 1) (layers B.Cu B.Mask) + (net 5 SCK)) + ) + + (module TestPoint:TestPoint_Pad_D1.0mm (layer B.Cu) (tedit 5A0F774F) (tstamp 5D64A9FC) + (at 97.8635 63.1215 90) + (descr "SMD pad as test Point, diameter 1.0mm") + (tags "test point SMD pad") + (path /5CCA9C4C) + (attr virtual) + (fp_text reference TP1 (at 2.159 0 90) (layer B.SilkS) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text value TestPoint (at 0 -1.55 90) (layer B.Fab) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_circle (center 0 0) (end 0 -0.7) (layer B.SilkS) (width 0.12)) + (fp_circle (center 0 0) (end 1 0) (layer B.CrtYd) (width 0.05)) + (fp_text user %R (at 0 1.45 90) (layer B.Fab) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (pad 1 smd circle (at 0 0 90) (size 1 1) (layers B.Cu B.Mask) + (net 6 MOSI)) + ) + + (module TestPoint:TestPoint_Pad_D1.0mm (layer B.Cu) (tedit 5A0F774F) (tstamp 5D64AA04) + (at 95.768 63.1215 90) + (descr "SMD pad as test Point, diameter 1.0mm") + (tags "test point SMD pad") + (path /5CCADC31) + (attr virtual) + (fp_text reference TP2 (at 2.159 0 90) (layer B.SilkS) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text value TestPoint (at 0 -1.55 90) (layer B.Fab) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text user %R (at 0 1.45 90) (layer B.Fab) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_circle (center 0 0) (end 1 0) (layer B.CrtYd) (width 0.05)) + (fp_circle (center 0 0) (end 0 -0.7) (layer B.SilkS) (width 0.12)) + (pad 1 smd circle (at 0 0 90) (size 1 1) (layers B.Cu B.Mask) + (net 7 SS)) + ) + + (gr_arc (start 122.057 35.07) (end 125.057 35.07) (angle -90) (layer Edge.Cuts) (width 0.2)) + (gr_line (start 125.057 44.519157) (end 123.957 44.519157) (layer Edge.Cuts) (width 0.2)) + (gr_line (start 125.057 51.519157) (end 123.957 51.519157) (layer Edge.Cuts) (width 0.2)) + (gr_arc (start 123.957 54.969157) (end 123.957 54.719157) (angle -90) (layer Edge.Cuts) (width 0.2)) + (gr_line (start 125.057 58.519157) (end 123.957 58.519157) (layer Edge.Cuts) (width 0.2)) + (gr_line (start 123.707 49.57) (end 123.707 47.870843) (layer Edge.Cuts) (width 0.2)) + (gr_arc (start 93.057 64.07) (end 90.057 64.07) (angle -90) (layer Edge.Cuts) (width 0.2)) + (gr_line (start 123.957 40.719157) (end 125.057 40.719157) (layer Edge.Cuts) (width 0.2)) + (gr_line (start 90.057 35.07) (end 90.057 64.07) (layer Edge.Cuts) (width 0.2) (tstamp 5D6212CE)) + (gr_arc (start 93.057 35.07) (end 93.057 32.07) (angle -90) (layer Edge.Cuts) (width 0.2) (tstamp 5D62134F)) + (gr_circle (center 123.012 36.07) (end 124.112 36.07) (layer Edge.Cuts) (width 0.2)) + (gr_line (start 123.707 44.269157) (end 123.707 40.969157) (layer Edge.Cuts) (width 0.2)) + (gr_circle (center 123.012 63.07) (end 124.112 63.07) (layer Edge.Cuts) (width 0.2)) + (gr_circle (center 92.102 63.07) (end 93.202 63.07) (layer Edge.Cuts) (width 0.2) (tstamp 5D621352)) + (gr_arc (start 123.957 44.269157) (end 123.707 44.269157) (angle -90) (layer Edge.Cuts) (width 0.2)) + (gr_arc (start 123.957 58.269157) (end 123.707 58.269157) (angle -90) (layer Edge.Cuts) (width 0.2)) + (gr_line (start 125.057 47.719211) (end 125.057 44.519157) (layer Edge.Cuts) (width 0.2)) + (gr_line (start 123.707 58.269157) (end 123.707 54.969157) (layer Edge.Cuts) (width 0.2)) + (gr_circle (center 92.102 36.07) (end 93.202 36.07) (layer Edge.Cuts) (width 0.2) (tstamp 5D621355)) + (gr_line (start 123.957 54.719157) (end 125.057 54.719157) (layer Edge.Cuts) (width 0.2)) + (gr_line (start 123.707 51.269157) (end 123.707 49.57) (layer Edge.Cuts) (width 0.2)) + (gr_line (start 125.057 54.719157) (end 125.057 51.519157) (layer Edge.Cuts) (width 0.2)) + (gr_arc (start 123.936834 47.969211) (end 123.936834 47.719211) (angle -66.82928917) (layer Edge.Cuts) (width 0.2)) + (gr_line (start 125.057 40.719157) (end 125.057 35.07) (layer Edge.Cuts) (width 0.2)) + (gr_arc (start 122.057 64.07) (end 122.057 67.07) (angle -90) (layer Edge.Cuts) (width 0.2)) + (gr_arc (start 123.957 51.269157) (end 123.707 51.269157) (angle -90) (layer Edge.Cuts) (width 0.2)) + (gr_line (start 123.936834 47.719211) (end 125.057 47.719211) (layer Edge.Cuts) (width 0.2)) + (gr_line (start 93.057 67.07) (end 122.057 67.07) (layer Edge.Cuts) (width 0.2)) + (gr_line (start 125.057 64.07) (end 125.057 58.519157) (layer Edge.Cuts) (width 0.2)) + (gr_arc (start 123.957 40.969157) (end 123.957 40.719157) (angle -90) (layer Edge.Cuts) (width 0.2)) + (gr_line (start 122.057 32.07) (end 93.057 32.07) (layer Edge.Cuts) (width 0.2)) + (gr_text https://www.git.maxregan.me/public/TimelyReference (at 107.198 33.540146) (layer F.SilkS) (tstamp 5D6217AE) + (effects (font (size 0.55 0.55) (thickness 0.1))) + ) + (gr_text "Timely Reference v1.1" (at 122.2475 52.8345 90) (layer F.SilkS) (tstamp 5D6217A8) + (effects (font (size 1 1) (thickness 0.25))) + ) + (gr_line (start 121.2315 65.492646) (end 121.2315 34.492646) (layer F.SilkS) (width 0.1) (tstamp 5D6217C9)) + (gr_line (start 94.2315 65.492646) (end 121.2315 65.492646) (layer F.SilkS) (width 0.1) (tstamp 5D6217C6)) + (gr_line (start 94.2315 34.492646) (end 94.2315 65.492646) (layer F.SilkS) (width 0.1) (tstamp 5D6217C3)) + (gr_line (start 121.2315 34.492646) (end 94.2315 34.492646) (layer F.SilkS) (width 0.1) (tstamp 5D6217C0)) + (gr_text nRST (at 94.3075 58.867) (layer F.SilkS) (tstamp 5D6217AB) + (effects (font (size 0.75 0.75) (thickness 0.1))) + ) + (gr_text SWDIO (at 94.6885 56.581) (layer F.SilkS) (tstamp 5D6217B1) + (effects (font (size 0.75 0.75) (thickness 0.1))) + ) + (gr_text SWCK (at 94.5615 53.8505) (layer F.SilkS) (tstamp 5D6217BD) + (effects (font (size 0.75 0.75) (thickness 0.1))) + ) + (gr_text VDD (at 94.117 51.1835) (layer F.SilkS) (tstamp 5D6217BA) + (effects (font (size 0.75 0.75) (thickness 0.1))) + ) + (gr_text GND (at 94.1805 48.834) (layer F.SilkS) (tstamp 5D6217B7) + (effects (font (size 0.75 0.75) (thickness 0.1))) + ) + + (via (at 115.1355 50.9295) (size 0.508) (drill 0.254) (layers F.Cu B.Cu) (net 8)) + (via (at 108.4045 39.055) (size 0.508) (drill 0.254) (layers F.Cu B.Cu) (net 1) (status 30)) + (via (at 100.9115 39.055) (size 0.508) (drill 0.254) (layers F.Cu B.Cu) (net 1) (status 30)) + (via (at 108.4045 44.643) (size 0.508) (drill 0.254) (layers F.Cu B.Cu) (net 1) (status 30)) + (via (at 100.9115 44.643) (size 0.508) (drill 0.254) (layers F.Cu B.Cu) (net 1) (status 30)) + (via (at 119.898 35.372) (size 0.508) (drill 0.254) (layers F.Cu B.Cu) (net 1)) + (via (at 114.3735 35.499) (size 0.508) (drill 0.254) (layers F.Cu B.Cu) (net 1)) + (via (at 94.5615 35.372) (size 0.508) (drill 0.254) (layers F.Cu B.Cu) (net 1)) + (via (at 94.8155 46.9925) (size 0.508) (drill 0.254) (layers F.Cu B.Cu) (net 1)) + (via (at 99.5145 51.755) (size 0.508) (drill 0.254) (layers F.Cu B.Cu) (net 1)) + (via (at 95.8315 55.057) (size 0.508) (drill 0.254) (layers F.Cu B.Cu) (net 1)) + (via (at 99.8955 60.01) (size 0.508) (drill 0.254) (layers F.Cu B.Cu) (net 1)) + (via (at 95.7045 60.2005) (size 0.508) (drill 0.254) (layers F.Cu B.Cu) (net 1)) + (via (at 94.0535 62.423) (size 0.508) (drill 0.254) (layers F.Cu B.Cu) (net 1)) + (via (at 104.7215 62.4865) (size 0.508) (drill 0.254) (layers F.Cu B.Cu) (net 1)) + (via (at 111.135 62.4865) (size 0.508) (drill 0.254) (layers F.Cu B.Cu) (net 1)) + (via (at 112.532 46.6115) (size 0.508) (drill 0.254) (layers F.Cu B.Cu) (net 1)) + (via (at 118.8185 51.12) (size 0.508) (drill 0.254) (layers F.Cu B.Cu) (net 1)) + (via (at 103.896 54.4855) (size 0.508) (drill 0.254) (layers F.Cu B.Cu) (net 1)) + (via (at 107.8965 64.582) (size 0.508) (drill 0.254) (layers F.Cu B.Cu) (net 1)) + (via (at 117.5485 65.6615) (size 0.508) (drill 0.254) (layers F.Cu B.Cu) (net 1)) + (via (at 121.295 64.836) (size 0.508) (drill 0.254) (layers F.Cu B.Cu) (net 1)) + (via (at 112.8495 54.549) (size 0.508) (drill 0.254) (layers F.Cu B.Cu) (net 1)) + (via (at 115.072 46.8655) (size 0.508) (drill 0.254) (layers F.Cu B.Cu) (net 1)) + (via (at 122.819 59.883) (size 0.508) (drill 0.254) (layers F.Cu B.Cu) (net 1)) + (via (at 122.819 53.2155) (size 0.508) (drill 0.254) (layers F.Cu B.Cu) (net 1)) + (via (at 122.819 46.04) (size 0.508) (drill 0.254) (layers F.Cu B.Cu) (net 1)) + (via (at 120.787 41.468) (size 0.508) (drill 0.254) (layers F.Cu B.Cu) (net 1)) + (via (at 108.1505 58.486) (size 0.508) (drill 0.254) (layers F.Cu B.Cu) (net 1)) + (via (at 105.3565 56.708) (size 0.508) (drill 0.254) (layers F.Cu B.Cu) (net 1)) + (via (at 117.866 40.452) (size 0.508) (drill 0.254) (layers F.Cu B.Cu) (net 1)) + (via (at 115.072 53.8505) (size 0.508) (drill 0.254) (layers F.Cu B.Cu) (net 1)) + (via (at 112.3415 60.01) (size 0.508) (drill 0.254) (layers F.Cu B.Cu) (net 1)) + (via (at 113.167 49.215) (size 0.508) (drill 0.254) (layers F.Cu B.Cu) (net 1)) + (segment (start 114.829 47.1085) (end 115.072 46.8655) (width 0.1524) (layer B.Cu) (net 1)) + (segment (start 114.829 49.7575) (end 114.829 47.1085) (width 0.1524) (layer B.Cu) (net 1)) + (segment (start 118.729 51.0305) (end 118.8185 51.12) (width 0.1524) (layer B.Cu) (net 1)) + (segment (start 118.729 49.7575) (end 118.729 51.0305) (width 0.1524) (layer B.Cu) (net 1)) + (segment (start 118.564501 50.866001) (end 118.8185 51.12) (width 0.1524) (layer B.Cu) (net 1)) + (segment (start 118.079 50.3805) (end 118.564501 50.866001) (width 0.1524) (layer B.Cu) (net 1)) + (segment (start 118.079 49.7575) (end 118.079 50.3805) (width 0.1524) (layer B.Cu) (net 1)) + (segment (start 117.2641 51.12) (end 118.45929 51.12) (width 0.1524) (layer B.Cu) (net 1)) + (segment (start 116.779 50.6349) (end 117.2641 51.12) (width 0.1524) (layer B.Cu) (net 1)) + (segment (start 118.45929 51.12) (end 118.8185 51.12) (width 0.1524) (layer B.Cu) (net 1)) + (segment (start 116.779 49.7575) (end 116.779 50.6349) (width 0.1524) (layer B.Cu) (net 1)) + (segment (start 114.818001 54.104499) (end 114.818001 55.646501) (width 0.1524) (layer B.Cu) (net 1)) + (segment (start 114.818001 55.646501) (end 114.829 55.6575) (width 0.1524) (layer B.Cu) (net 1)) + (segment (start 115.072 53.8505) (end 114.818001 54.104499) (width 0.1524) (layer B.Cu) (net 1)) + (via (at 119.898 52.517) (size 0.508) (drill 0.254) (layers F.Cu B.Cu) (net 1)) + (via (at 113.548 57.9145) (size 0.508) (drill 0.254) (layers F.Cu B.Cu) (net 12)) + (via (at 117.485 41.9125) (size 0.508) (drill 0.254) (layers F.Cu B.Cu) (net 12)) + (via (at 113.9925 54.1045) (size 0.508) (drill 0.254) (layers F.Cu B.Cu) (net 7)) + (via (at 107.96 53.406) (size 0.508) (drill 0.254) (layers F.Cu B.Cu) (net 8) (tstamp 5D6797B0)) + (via (at 116.1515 50.9295) (size 0.508) (drill 0.254) (layers F.Cu B.Cu) (net 6)) + (segment (start 115.7705 57.585872) (end 115.7705 61.026) (width 0.1524) (layer B.Cu) (net 2)) + (segment (start 115.7705 61.026) (end 115.7705 62.2235) (width 0.1524) (layer B.Cu) (net 2) (status 20)) + (segment (start 116.189473 57.166899) (end 115.7705 57.585872) (width 0.1524) (layer B.Cu) (net 2)) + (segment (start 117.447001 57.166899) (end 116.189473 57.166899) (width 0.1524) (layer B.Cu) (net 2)) + (segment (start 118.079 56.5349) (end 117.447001 57.166899) (width 0.1524) (layer B.Cu) (net 2)) + (segment (start 118.079 55.6575) (end 118.079 56.5349) (width 0.1524) (layer B.Cu) (net 2) (status 10)) + (via (at 115.7705 61.026) (size 0.508) (drill 0.254) (layers F.Cu B.Cu) (net 2)) + (segment (start 94.1805 61.026) (end 92.0215 58.867) (width 0.1524) (layer F.Cu) (net 2) (status 20)) + (segment (start 115.7705 61.026) (end 94.1805 61.026) (width 0.1524) (layer F.Cu) (net 2)) + (segment (start 120.025 49.7535) (end 120.025 48.453) (width 0.1524) (layer B.Cu) (net 3) (status 10)) + (segment (start 120.101205 47.691001) (end 120.355204 47.945) (width 0.1524) (layer F.Cu) (net 3)) + (segment (start 92.0215 53.787) (end 98.117499 47.691001) (width 0.1524) (layer F.Cu) (net 3) (status 10)) + (segment (start 98.117499 47.691001) (end 120.101205 47.691001) (width 0.1524) (layer F.Cu) (net 3)) + (via (at 120.355204 47.945) (size 0.508) (drill 0.254) (layers F.Cu B.Cu) (net 3)) + (segment (start 120.025 48.453) (end 120.355204 48.122796) (width 0.1524) (layer B.Cu) (net 3)) + (segment (start 120.355204 48.122796) (end 120.355204 47.945) (width 0.1524) (layer B.Cu) (net 3)) + (segment (start 99.8955 48.453) (end 119.3265 48.453) (width 0.1524) (layer F.Cu) (net 4)) + (via (at 119.3265 48.453) (size 0.508) (drill 0.254) (layers F.Cu B.Cu) (net 4)) + (segment (start 92.0215 56.327) (end 99.8955 48.453) (width 0.1524) (layer F.Cu) (net 4) (status 10)) + (segment (start 119.379 48.5055) (end 119.3265 48.453) (width 0.1524) (layer B.Cu) (net 4)) + (segment (start 119.379 49.7575) (end 119.379 48.5055) (width 0.1524) (layer B.Cu) (net 4) (status 10)) + (segment (start 114.179 51.886358) (end 111.407125 54.658233) (width 0.1524) (layer B.Cu) (net 5)) + (segment (start 111.407125 54.658233) (end 109.425997 54.658233) (width 0.1524) (layer B.Cu) (net 5) (status 20)) + (segment (start 114.179 49.7575) (end 114.179 51.886358) (width 0.1524) (layer B.Cu) (net 5) (status 10)) + (segment (start 109.425997 55.877003) (end 109.425997 54.658233) (width 0.1524) (layer B.Cu) (net 5) (status 20)) + (segment (start 103.769 61.534) (end 109.425997 55.877003) (width 0.1524) (layer B.Cu) (net 5)) + (segment (start 99.959 63.1215) (end 101.5465 61.534) (width 0.1524) (layer B.Cu) (net 5) (status 10)) + (segment (start 101.5465 61.534) (end 103.769 61.534) (width 0.1524) (layer B.Cu) (net 5)) + (segment (start 108.925997 55.510633) (end 108.925997 54.658233) (width 0.1524) (layer B.Cu) (net 6) (status 20)) + (segment (start 97.8635 63.1215) (end 99.755811 61.229189) (width 0.1524) (layer B.Cu) (net 6) (status 10)) + (segment (start 103.207441 61.229189) (end 108.30013 56.1365) (width 0.1524) (layer B.Cu) (net 6)) + (segment (start 99.755811 61.229189) (end 103.207441 61.229189) (width 0.1524) (layer B.Cu) (net 6)) + (segment (start 108.30013 56.1365) (end 108.925997 55.510633) (width 0.1524) (layer B.Cu) (net 6) (tstamp 5D6792F7)) + (via (at 108.30013 56.1365) (size 0.508) (drill 0.254) (layers F.Cu B.Cu) (net 6) (tstamp 5D67947E)) + (segment (start 116.129 49.7575) (end 116.129 50.907) (width 0.1524) (layer B.Cu) (net 6) (status 10)) + (segment (start 116.129 50.907) (end 116.1515 50.9295) (width 0.1524) (layer B.Cu) (net 6)) + (segment (start 113.065399 51.412101) (end 108.341 56.1365) (width 0.1524) (layer F.Cu) (net 6)) + (segment (start 108.341 56.1365) (end 108.30013 56.1365) (width 0.1524) (layer F.Cu) (net 6)) + (segment (start 116.1515 50.9295) (end 115.668899 51.412101) (width 0.1524) (layer F.Cu) (net 6)) + (segment (start 115.668899 51.412101) (end 113.065399 51.412101) (width 0.1524) (layer F.Cu) (net 6)) + (segment (start 108.128666 55.586834) (end 106.4995 57.216) (width 0.1524) (layer B.Cu) (net 7)) + (segment (start 95.768 63.1215) (end 97.965122 60.924378) (width 0.1524) (layer B.Cu) (net 7) (status 10)) + (segment (start 108.349796 55.586834) (end 108.128666 55.586834) (width 0.1524) (layer B.Cu) (net 7)) + (segment (start 108.425997 55.510633) (end 108.349796 55.586834) (width 0.1524) (layer B.Cu) (net 7)) + (segment (start 102.791122 60.924378) (end 106.4995 57.216) (width 0.1524) (layer B.Cu) (net 7)) + (segment (start 97.965122 60.924378) (end 102.791122 60.924378) (width 0.1524) (layer B.Cu) (net 7)) + (via (at 106.4995 57.216) (size 0.508) (drill 0.254) (layers F.Cu B.Cu) (net 7)) + (segment (start 108.425997 54.658233) (end 108.425997 55.510633) (width 0.1524) (layer B.Cu) (net 7) (status 10)) + (segment (start 106.85871 57.216) (end 106.4995 57.216) (width 0.1524) (layer F.Cu) (net 7)) + (segment (start 107.93488 57.216) (end 106.85871 57.216) (width 0.1524) (layer F.Cu) (net 7)) + (segment (start 111.300379 53.850501) (end 107.93488 57.216) (width 0.1524) (layer F.Cu) (net 7)) + (segment (start 113.738501 53.850501) (end 111.300379 53.850501) (width 0.1524) (layer F.Cu) (net 7)) + (segment (start 113.9925 54.1045) (end 113.738501 53.850501) (width 0.1524) (layer F.Cu) (net 7)) + (segment (start 114.179 54.291) (end 113.9925 54.1045) (width 0.1524) (layer B.Cu) (net 7)) + (segment (start 114.179 55.6575) (end 114.179 54.291) (width 0.1524) (layer B.Cu) (net 7)) + (segment (start 107.925997 53.440003) (end 107.96 53.406) (width 0.1524) (layer B.Cu) (net 8)) + (segment (start 107.925997 54.658233) (end 107.925997 53.440003) (width 0.1524) (layer B.Cu) (net 8) (status 10)) + (segment (start 115.479 50.586) (end 115.1355 50.9295) (width 0.1524) (layer B.Cu) (net 8)) + (segment (start 115.479 49.7575) (end 115.479 50.586) (width 0.1524) (layer B.Cu) (net 8)) + (segment (start 110.4365 50.9295) (end 107.96 53.406) (width 0.1524) (layer F.Cu) (net 8)) + (segment (start 115.1355 50.9295) (end 110.4365 50.9295) (width 0.1524) (layer F.Cu) (net 8)) + (segment (start 115.479 54.777) (end 115.479 55.6575) (width 0.1524) (layer B.Cu) (net 9) (status 20)) + (segment (start 119.771 53.8505) (end 116.4055 53.8505) (width 0.1524) (layer B.Cu) (net 9)) + (segment (start 120.914 52.7075) (end 119.771 53.8505) (width 0.1524) (layer B.Cu) (net 9)) + (segment (start 120.914 50.866) (end 120.914 52.7075) (width 0.1524) (layer B.Cu) (net 9)) + (segment (start 121.422 43.7295) (end 121.422 50.358) (width 0.1524) (layer B.Cu) (net 9)) + (segment (start 116.4055 53.8505) (end 115.479 54.777) (width 0.1524) (layer B.Cu) (net 9)) + (segment (start 121.422 50.358) (end 120.914 50.866) (width 0.1524) (layer B.Cu) (net 9)) + (segment (start 122.7655 42.611) (end 122.5405 42.611) (width 0.1524) (layer B.Cu) (net 9) (status 30)) + (segment (start 122.5405 42.611) (end 121.422 43.7295) (width 0.1524) (layer B.Cu) (net 9) (status 10)) + (segment (start 119.897256 54.155311) (end 116.753789 54.155311) (width 0.1524) (layer B.Cu) (net 10)) + (segment (start 121.9881 50.2119) (end 121.9881 50.222966) (width 0.1524) (layer B.Cu) (net 10)) + (segment (start 121.9881 50.222966) (end 121.2315 50.979566) (width 0.1524) (layer B.Cu) (net 10)) + (segment (start 116.753789 54.155311) (end 116.129 54.7801) (width 0.1524) (layer B.Cu) (net 10)) + (segment (start 122.7655 49.6595) (end 122.5405 49.6595) (width 0.1524) (layer B.Cu) (net 10) (status 30)) + (segment (start 121.2315 50.979566) (end 121.2315 52.821067) (width 0.1524) (layer B.Cu) (net 10)) + (segment (start 122.5405 49.6595) (end 121.9881 50.2119) (width 0.1524) (layer B.Cu) (net 10) (status 10)) + (segment (start 116.129 54.7801) (end 116.129 55.6575) (width 0.1524) (layer B.Cu) (net 10) (status 20)) + (segment (start 121.2315 52.821067) (end 119.897256 54.155311) (width 0.1524) (layer B.Cu) (net 10)) + (segment (start 120.356122 54.460122) (end 117.098978 54.460122) (width 0.1524) (layer B.Cu) (net 11)) + (segment (start 122.5405 56.6445) (end 120.356122 54.460122) (width 0.1524) (layer B.Cu) (net 11) (status 10)) + (segment (start 122.7655 56.6445) (end 122.5405 56.6445) (width 0.1524) (layer B.Cu) (net 11) (status 30)) + (segment (start 116.779 54.7801) (end 116.779 55.6575) (width 0.1524) (layer B.Cu) (net 11) (status 20)) + (segment (start 117.098978 54.460122) (end 116.779 54.7801) (width 0.1524) (layer B.Cu) (net 11)) + (segment (start 117.429 56.5349) (end 117.1289 56.835) (width 0.1524) (layer B.Cu) (net 12)) + (segment (start 117.429 55.6575) (end 117.429 56.5349) (width 0.1524) (layer B.Cu) (net 12) (status 10)) + (segment (start 115.834 56.835) (end 114.818 57.851) (width 0.1524) (layer B.Cu) (net 12) (status 20)) + (segment (start 117.1289 56.835) (end 115.834 56.835) (width 0.1524) (layer B.Cu) (net 12)) + (segment (start 117.429 48.645) (end 118.755 47.319) (width 0.1524) (layer B.Cu) (net 12) (status 20)) + (segment (start 117.429 49.7575) (end 117.429 48.645) (width 0.1524) (layer B.Cu) (net 12) (status 10)) + (segment (start 117.429 47.9615) (end 116.7865 47.319) (width 0.1524) (layer B.Cu) (net 12) (status 20)) + (segment (start 117.429 48.645) (end 117.429 47.9615) (width 0.1524) (layer B.Cu) (net 12)) + (segment (start 115.523 46.0555) (end 116.7865 47.319) (width 0.1524) (layer B.Cu) (net 12) (status 20)) + (segment (start 115.523 41.595) (end 115.523 46.0555) (width 0.1524) (layer B.Cu) (net 12) (status 10)) + (segment (start 115.523 41.595) (end 115.523 45.072) (width 0.1524) (layer B.Cu) (net 12) (status 10)) + (segment (start 90.688 49.9135) (end 90.688 46.1035) (width 0.1524) (layer B.Cu) (net 12)) + (segment (start 90.688 46.1035) (end 92.523 44.2685) (width 0.1524) (layer B.Cu) (net 12)) + (segment (start 92.523 44.2685) (end 92.523 41.595) (width 0.1524) (layer B.Cu) (net 12) (status 20)) + (segment (start 92.0215 51.247) (end 90.688 49.9135) (width 0.1524) (layer B.Cu) (net 12) (status 10)) + (segment (start 115.523 46.0555) (end 114.5395 46.0555) (width 0.1524) (layer B.Cu) (net 12)) + (segment (start 106.3815 54.613736) (end 106.425997 54.658233) (width 0.1524) (layer B.Cu) (net 12) (status 30)) + (segment (start 106.3815 53.3425) (end 105.925997 53.798003) (width 0.1524) (layer B.Cu) (net 12)) + (segment (start 106.3815 53.3425) (end 106.3815 54.613736) (width 0.1524) (layer B.Cu) (net 12) (status 20)) + (segment (start 105.925997 53.798003) (end 105.925997 54.658233) (width 0.1524) (layer B.Cu) (net 12) (status 20)) + (segment (start 106.3815 52.136) (end 106.3815 53.3425) (width 0.1524) (layer B.Cu) (net 12) (status 10)) + (segment (start 107.425997 53.225753) (end 107.425997 54.658233) (width 0.1524) (layer B.Cu) (net 12) (status 20)) + (segment (start 108.13475 52.517) (end 107.425997 53.225753) (width 0.1524) (layer B.Cu) (net 12)) + (segment (start 110.0465 52.517) (end 108.13475 52.517) (width 0.1524) (layer B.Cu) (net 12) (status 10)) + (segment (start 114.5395 46.0555) (end 111.253 49.342) (width 0.1524) (layer B.Cu) (net 12)) + (segment (start 106.925997 53.297003) (end 106.925997 54.658233) (width 0.1524) (layer B.Cu) (net 12) (status 20)) + (segment (start 110.0465 50.5485) (end 109.6745 50.5485) (width 0.1524) (layer B.Cu) (net 12) (status 30)) + (segment (start 109.6745 50.5485) (end 106.925997 53.297003) (width 0.1524) (layer B.Cu) (net 12) (status 10)) + (segment (start 110.999 49.596) (end 110.0465 50.5485) (width 0.1524) (layer B.Cu) (net 12) (status 20)) + (segment (start 111.253 49.342) (end 110.999 49.596) (width 0.1524) (layer B.Cu) (net 12)) + (segment (start 110.999 49.596) (end 108.9215 49.596) (width 0.1524) (layer B.Cu) (net 12)) + (segment (start 108.9215 49.596) (end 106.3815 52.136) (width 0.1524) (layer B.Cu) (net 12) (status 20)) + (segment (start 111.135 51.4285) (end 110.0465 52.517) (width 0.1524) (layer B.Cu) (net 12) (status 20)) + (segment (start 111.253 49.342) (end 111.135 49.46) (width 0.1524) (layer B.Cu) (net 12)) + (segment (start 111.135 49.46) (end 111.135 51.4285) (width 0.1524) (layer B.Cu) (net 12)) + (segment (start 117.738999 42.166499) (end 117.485 41.9125) (width 0.1524) (layer F.Cu) (net 12)) + (segment (start 120.837805 45.265305) (end 117.738999 42.166499) (width 0.1524) (layer F.Cu) (net 12)) + (segment (start 120.837805 50.624695) (end 120.837805 45.265305) (width 0.1524) (layer F.Cu) (net 12)) + (segment (start 113.548 57.9145) (end 120.837805 50.624695) (width 0.1524) (layer F.Cu) (net 12)) + (segment (start 113.6115 57.851) (end 113.548 57.9145) (width 0.1524) (layer B.Cu) (net 12)) + (segment (start 114.818 57.851) (end 113.6115 57.851) (width 0.1524) (layer B.Cu) (net 12)) + (segment (start 117.1675 41.595) (end 117.485 41.9125) (width 0.1524) (layer B.Cu) (net 12)) + (segment (start 115.523 41.595) (end 117.1675 41.595) (width 0.1524) (layer B.Cu) (net 12)) + (segment (start 114.68711 63.23561) (end 113.675 62.2235) (width 0.1524) (layer B.Cu) (net 13) (status 20)) + (segment (start 120.346102 63.23561) (end 114.68711 63.23561) (width 0.1524) (layer B.Cu) (net 13)) + (segment (start 121.8665 61.715212) (end 120.346102 63.23561) (width 0.1524) (layer B.Cu) (net 13)) + (segment (start 120.029 56.5349) (end 120.3926 56.8985) (width 0.1524) (layer B.Cu) (net 13)) + (segment (start 120.029 55.6575) (end 120.029 56.5349) (width 0.1524) (layer B.Cu) (net 13) (status 10)) + (segment (start 120.3926 56.8985) (end 121.6125 56.8985) (width 0.1524) (layer B.Cu) (net 13)) + (segment (start 121.6125 56.8985) (end 121.8665 57.1525) (width 0.1524) (layer B.Cu) (net 13)) + (segment (start 121.8665 57.1525) (end 121.8665 61.715212) (width 0.1524) (layer B.Cu) (net 13)) + (segment (start 120.497354 59.5825) (end 119.697854 60.382) (width 0.1524) (layer B.Cu) (net 14) (status 20)) + (segment (start 120.497354 58.2955) (end 120.497354 59.5825) (width 0.1524) (layer B.Cu) (net 14) (status 10)) + (segment (start 119.379 57.152146) (end 119.379 55.6575) (width 0.1524) (layer B.Cu) (net 14) (status 20)) + (segment (start 120.497354 58.2705) (end 119.379 57.152146) (width 0.1524) (layer B.Cu) (net 14) (status 10)) + (segment (start 120.497354 58.2955) (end 120.497354 58.2705) (width 0.1524) (layer B.Cu) (net 14) (status 30)) + (segment (start 118.729 56.5349) (end 118.729 55.6575) (width 0.1524) (layer B.Cu) (net 15) (status 20)) + (segment (start 117.247354 58.016546) (end 118.729 56.5349) (width 0.1524) (layer B.Cu) (net 15) (status 10)) + (segment (start 117.247354 58.2955) (end 117.247354 58.016546) (width 0.1524) (layer B.Cu) (net 15) (status 30)) + (segment (start 117.247354 59.8365) (end 117.792854 60.382) (width 0.1524) (layer B.Cu) (net 15) (status 30)) + (segment (start 117.247354 58.2955) (end 117.247354 59.8365) (width 0.1524) (layer B.Cu) (net 15) (status 30)) + + (zone (net 1) (net_name GND) (layer B.Cu) (tstamp 0) (hatch edge 0.508) + (connect_pads (clearance 0.508)) + (min_thickness 0.254) + (fill yes (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 0.508) (smoothing fillet)) + (polygon + (pts + (xy 124.978 67.122) (xy 90.307 67.249) (xy 84.973 57.2795) (xy 88.4655 30.165) (xy 127.0735 30.6095) + (xy 127.391 64.8995) + ) + ) + (filled_polygon + (pts + (xy 98.909024 33.492814) (xy 98.49459 33.76973) (xy 97.450775 34.84317) (xy 104.023 41.415395) (xy 110.595225 34.84317) + (xy 109.55141 33.76973) (xy 107.918549 32.841551) (xy 107.808451 32.805) (xy 122.021053 32.805) (xy 122.496255 32.851594) + (xy 122.918781 32.979162) (xy 123.308482 33.186369) (xy 123.650513 33.465324) (xy 123.931849 33.805399) (xy 124.141771 34.193644) + (xy 124.272285 34.615265) (xy 124.283344 34.720489) (xy 124.005959 34.503772) (xy 123.682814 34.340539) (xy 123.334117 34.243182) + (xy 122.973152 34.215407) (xy 122.613666 34.258273) (xy 122.269353 34.370147) (xy 121.953326 34.546768) (xy 121.677625 34.781409) + (xy 121.452749 35.065131) (xy 121.287265 35.387129) (xy 121.187475 35.735137) (xy 121.157181 36.0959) (xy 121.197536 36.455676) + (xy 121.307004 36.800762) (xy 121.481414 37.118014) (xy 121.714125 37.395347) (xy 121.99627 37.622198) (xy 122.317105 37.789926) + (xy 122.664408 37.892143) (xy 123.02495 37.924955) (xy 123.385 37.887112) (xy 123.730841 37.780056) (xy 124.049303 37.607865) + (xy 124.322001 37.382269) (xy 124.322 39.172928) (xy 123.8405 39.172928) (xy 123.716018 39.185188) (xy 123.59632 39.221498) + (xy 123.486006 39.280463) (xy 123.389315 39.359815) (xy 123.309963 39.456506) (xy 123.250998 39.56682) (xy 123.214688 39.686518) + (xy 123.202428 39.811) (xy 123.202428 40.337769) (xy 123.179179 40.366276) (xy 123.142323 40.421751) (xy 123.139413 40.426) + (xy 123.05125 40.426) (xy 122.8925 40.58475) (xy 122.8925 41.334) (xy 122.9125 41.334) (xy 122.9125 41.572928) + (xy 122.1405 41.572928) (xy 122.016018 41.585188) (xy 122.006748 41.588) (xy 121.66425 41.588) (xy 121.5055 41.74675) + (xy 121.5055 41.923542) (xy 121.528718 42.040267) (xy 121.514688 42.086518) (xy 121.502428 42.211) (xy 121.502428 42.643284) + (xy 120.94381 43.201903) (xy 120.916673 43.224174) (xy 120.827798 43.332468) (xy 120.761758 43.45602) (xy 120.721091 43.590081) + (xy 120.7108 43.694565) (xy 120.7108 43.694574) (xy 120.70736 43.7295) (xy 120.7108 43.764426) (xy 120.710801 47.130047) + (xy 120.614516 47.090164) (xy 120.442763 47.056) (xy 120.267645 47.056) (xy 120.095892 47.090164) (xy 120.093072 47.091332) + (xy 120.093072 46.993999) (xy 120.076008 46.820745) (xy 120.025472 46.654149) (xy 119.943405 46.500613) (xy 119.832962 46.366038) + (xy 119.825657 46.360043) (xy 119.859789 46.337237) (xy 119.948237 46.248789) (xy 120.01773 46.144785) (xy 120.065597 46.029223) + (xy 120.09 45.906542) (xy 120.09 45.55475) (xy 119.93125 45.396) (xy 118.882 45.396) (xy 118.882 45.416) + (xy 118.628 45.416) (xy 118.628 45.396) (xy 116.9135 45.396) (xy 116.9135 45.416) (xy 116.6595 45.416) + (xy 116.6595 45.396) (xy 116.6395 45.396) (xy 116.6395 45.142) (xy 116.6595 45.142) (xy 116.6595 45.122) + (xy 116.9135 45.122) (xy 116.9135 45.142) (xy 118.628 45.142) (xy 118.628 44.21775) (xy 118.882 44.21775) + (xy 118.882 45.142) (xy 119.93125 45.142) (xy 120.09 44.98325) (xy 120.09 44.631458) (xy 120.065597 44.508777) + (xy 120.01773 44.393215) (xy 119.948237 44.289211) (xy 119.859789 44.200763) (xy 119.755785 44.13127) (xy 119.640223 44.083403) + (xy 119.517542 44.059) (xy 119.04075 44.059) (xy 118.882 44.21775) (xy 118.628 44.21775) (xy 118.46925 44.059) + (xy 117.992458 44.059) (xy 117.869777 44.083403) (xy 117.77075 44.124421) (xy 117.671723 44.083403) (xy 117.549042 44.059) + (xy 117.411072 44.059) (xy 117.411072 42.8015) (xy 117.572559 42.8015) (xy 117.744312 42.767336) (xy 117.906099 42.700321) + (xy 118.051704 42.603031) (xy 118.175531 42.479204) (xy 118.272821 42.333599) (xy 118.339836 42.171812) (xy 118.374 42.000059) + (xy 118.374 41.824941) (xy 118.339836 41.653188) (xy 118.272821 41.491401) (xy 118.175531 41.345796) (xy 118.051704 41.221969) + (xy 117.906099 41.124679) (xy 117.744312 41.057664) (xy 117.598477 41.028656) (xy 117.564533 41.000798) (xy 117.560156 40.998458) + (xy 121.5055 40.998458) (xy 121.5055 41.17525) (xy 121.66425 41.334) (xy 122.6385 41.334) (xy 122.6385 40.58475) + (xy 122.47975 40.426) (xy 122.077958 40.426) (xy 121.955277 40.450403) (xy 121.839715 40.49827) (xy 121.735711 40.567763) + (xy 121.647263 40.656211) (xy 121.57777 40.760215) (xy 121.529903 40.875777) (xy 121.5055 40.998458) (xy 117.560156 40.998458) + (xy 117.440981 40.934758) (xy 117.411072 40.925685) (xy 117.411072 39.045) (xy 117.398812 38.920518) (xy 117.362502 38.80082) + (xy 117.303537 38.690506) (xy 117.224185 38.593815) (xy 117.127494 38.514463) (xy 117.01718 38.455498) (xy 116.897482 38.419188) + (xy 116.773 38.406928) (xy 114.273 38.406928) (xy 114.148518 38.419188) (xy 114.02882 38.455498) (xy 113.918506 38.514463) + (xy 113.821815 38.593815) (xy 113.742463 38.690506) (xy 113.683498 38.80082) (xy 113.647188 38.920518) (xy 113.634928 39.045) + (xy 113.634928 44.145) (xy 113.647188 44.269482) (xy 113.683498 44.38918) (xy 113.742463 44.499494) (xy 113.821815 44.596185) + (xy 113.918506 44.675537) (xy 114.02882 44.734502) (xy 114.148518 44.770812) (xy 114.273 44.783072) (xy 114.811801 44.783072) + (xy 114.811801 45.3443) (xy 114.574428 45.3443) (xy 114.5395 45.34086) (xy 114.504571 45.3443) (xy 114.504564 45.3443) + (xy 114.40008 45.354591) (xy 114.266019 45.395258) (xy 114.142467 45.461298) (xy 114.034173 45.550173) (xy 114.011903 45.577309) + (xy 110.704412 48.8848) (xy 110.072102 48.8848) (xy 110.595225 48.34683) (xy 104.023 41.774605) (xy 97.450775 48.34683) + (xy 98.49459 49.42027) (xy 100.127451 50.348449) (xy 101.910016 50.940238) (xy 103.215186 51.103164) (xy 103.19377 51.135215) + (xy 103.145903 51.250777) (xy 103.1215 51.373458) (xy 103.1215 51.85025) (xy 103.28025 52.009) (xy 104.2045 52.009) + (xy 104.2045 51.989) (xy 104.4585 51.989) (xy 104.4585 52.009) (xy 104.4785 52.009) (xy 104.4785 52.263) + (xy 104.4585 52.263) (xy 104.4585 53.31225) (xy 104.522264 53.376014) (xy 104.475212 53.395503) (xy 104.371208 53.464996) + (xy 104.28276 53.553444) (xy 104.213267 53.657448) (xy 104.1654 53.77301) (xy 104.140997 53.895691) (xy 104.140997 54.372483) + (xy 104.299747 54.531233) (xy 105.072997 54.531233) (xy 105.072997 54.785233) (xy 104.299747 54.785233) (xy 104.140997 54.943983) + (xy 104.140997 55.420775) (xy 104.1654 55.543456) (xy 104.213267 55.659018) (xy 104.28276 55.763022) (xy 104.371208 55.85147) + (xy 104.475212 55.920963) (xy 104.590774 55.96883) (xy 104.695766 55.989714) (xy 104.850997 55.834483) (xy 104.850997 55.831259) + (xy 104.871208 55.85147) (xy 104.975212 55.920963) (xy 105.090774 55.96883) (xy 105.146411 55.979897) (xy 105.156228 55.989714) + (xy 105.175997 55.985782) (xy 105.195766 55.989714) (xy 105.205583 55.979897) (xy 105.26122 55.96883) (xy 105.376782 55.920963) + (xy 105.423425 55.889797) (xy 105.531817 55.947735) (xy 105.650143 55.983629) (xy 105.656228 55.989714) (xy 105.67373 55.986233) + (xy 105.775997 55.996305) (xy 106.075997 55.996305) (xy 106.175997 55.986456) (xy 106.275997 55.996305) (xy 106.575997 55.996305) + (xy 106.675997 55.986456) (xy 106.719019 55.990693) (xy 106.375455 56.334258) (xy 106.240188 56.361164) (xy 106.078401 56.428179) + (xy 105.932796 56.525469) (xy 105.808969 56.649296) (xy 105.711679 56.794901) (xy 105.644664 56.956688) (xy 105.617758 57.091953) + (xy 103.704059 59.005653) (xy 103.710997 58.970775) (xy 103.710997 58.093983) (xy 103.552247 57.935233) (xy 102.402997 57.935233) + (xy 102.402997 59.384483) (xy 102.561747 59.543233) (xy 103.138539 59.543233) (xy 103.173417 59.536295) (xy 102.496535 60.213178) + (xy 98.00005 60.213178) (xy 97.965122 60.209738) (xy 97.930193 60.213178) (xy 97.930186 60.213178) (xy 97.825702 60.223469) + (xy 97.69164 60.264136) (xy 97.568089 60.330176) (xy 97.486931 60.39678) (xy 97.486926 60.396785) (xy 97.459795 60.419051) + (xy 97.437529 60.446182) (xy 95.894322 61.989391) (xy 95.879788 61.9865) (xy 95.656212 61.9865) (xy 95.436933 62.030117) + (xy 95.230376 62.115676) (xy 95.04448 62.239888) (xy 94.886388 62.39798) (xy 94.762176 62.583876) (xy 94.676617 62.790433) + (xy 94.633 63.009712) (xy 94.633 63.233288) (xy 94.676617 63.452567) (xy 94.762176 63.659124) (xy 94.886388 63.84502) + (xy 95.04448 64.003112) (xy 95.230376 64.127324) (xy 95.436933 64.212883) (xy 95.656212 64.2565) (xy 95.879788 64.2565) + (xy 96.099067 64.212883) (xy 96.305624 64.127324) (xy 96.49152 64.003112) (xy 96.649612 63.84502) (xy 96.773824 63.659124) + (xy 96.81575 63.557906) (xy 96.857676 63.659124) (xy 96.981888 63.84502) (xy 97.13998 64.003112) (xy 97.325876 64.127324) + (xy 97.532433 64.212883) (xy 97.751712 64.2565) (xy 97.975288 64.2565) (xy 98.194567 64.212883) (xy 98.401124 64.127324) + (xy 98.58702 64.003112) (xy 98.745112 63.84502) (xy 98.869324 63.659124) (xy 98.91125 63.557906) (xy 98.953176 63.659124) + (xy 99.077388 63.84502) (xy 99.23548 64.003112) (xy 99.421376 64.127324) (xy 99.627933 64.212883) (xy 99.847212 64.2565) + (xy 100.070788 64.2565) (xy 100.290067 64.212883) (xy 100.496624 64.127324) (xy 100.68252 64.003112) (xy 100.840612 63.84502) + (xy 100.964824 63.659124) (xy 101.050383 63.452567) (xy 101.094 63.233288) (xy 101.094 63.009712) (xy 101.091109 62.995178) + (xy 101.841088 62.2452) (xy 103.734074 62.2452) (xy 103.769 62.24864) (xy 103.803926 62.2452) (xy 103.803936 62.2452) + (xy 103.90842 62.234909) (xy 104.042481 62.194242) (xy 104.166033 62.128202) (xy 104.274327 62.039327) (xy 104.296602 62.012185) + (xy 108.214804 58.093983) (xy 110.640997 58.093983) (xy 110.640997 58.970775) (xy 110.6654 59.093456) (xy 110.713267 59.209018) + (xy 110.78276 59.313022) (xy 110.871208 59.40147) (xy 110.975212 59.470963) (xy 111.090774 59.51883) (xy 111.213455 59.543233) + (xy 111.790247 59.543233) (xy 111.948997 59.384483) (xy 111.948997 57.935233) (xy 110.799747 57.935233) (xy 110.640997 58.093983) + (xy 108.214804 58.093983) (xy 109.663096 56.645691) (xy 110.640997 56.645691) (xy 110.640997 57.522483) (xy 110.799747 57.681233) + (xy 111.948997 57.681233) (xy 111.948997 56.231983) (xy 111.790247 56.073233) (xy 111.213455 56.073233) (xy 111.090774 56.097636) + (xy 110.975212 56.145503) (xy 110.871208 56.214996) (xy 110.78276 56.303444) (xy 110.713267 56.407448) (xy 110.6654 56.52301) + (xy 110.640997 56.645691) (xy 109.663096 56.645691) (xy 109.904192 56.404596) (xy 109.931323 56.38233) (xy 109.95359 56.355198) + (xy 109.953594 56.355194) (xy 110.020199 56.274036) (xy 110.046912 56.224059) (xy 110.086239 56.150484) (xy 110.126906 56.016423) + (xy 110.137197 55.911939) (xy 110.137197 55.911932) (xy 110.140637 55.877003) (xy 110.137197 55.842075) (xy 110.137197 55.655361) + (xy 110.165499 55.602413) (xy 110.201809 55.482715) (xy 110.212966 55.369433) (xy 111.372199 55.369433) (xy 111.407125 55.372873) + (xy 111.442051 55.369433) (xy 111.442061 55.369433) (xy 111.546545 55.359142) (xy 111.680606 55.318475) (xy 111.804158 55.252435) + (xy 111.912452 55.16356) (xy 111.934727 55.136418) (xy 113.11574 53.955406) (xy 113.1035 54.016941) (xy 113.1035 54.192059) + (xy 113.137664 54.363812) (xy 113.204679 54.525599) (xy 113.301969 54.671204) (xy 113.353928 54.723163) (xy 113.328188 54.808018) + (xy 113.315928 54.9325) (xy 113.315928 56.250138) (xy 113.280786 56.214996) (xy 113.176782 56.145503) (xy 113.06122 56.097636) + (xy 112.938539 56.073233) (xy 112.361747 56.073233) (xy 112.202997 56.231983) (xy 112.202997 57.681233) (xy 112.222997 57.681233) + (xy 112.222997 57.935233) (xy 112.202997 57.935233) (xy 112.202997 59.384483) (xy 112.361747 59.543233) (xy 112.938539 59.543233) + (xy 113.06122 59.51883) (xy 113.176782 59.470963) (xy 113.280786 59.40147) (xy 113.369234 59.313022) (xy 113.438727 59.209018) + (xy 113.486594 59.093456) (xy 113.510997 58.970775) (xy 113.510997 58.8035) (xy 113.635559 58.8035) (xy 113.72505 58.785699) + (xy 113.740038 58.803962) (xy 113.747343 58.809957) (xy 113.713211 58.832763) (xy 113.624763 58.921211) (xy 113.55527 59.025215) + (xy 113.507403 59.140777) (xy 113.483 59.263458) (xy 113.483 59.61525) (xy 113.64175 59.774) (xy 114.691 59.774) + (xy 114.691 59.754) (xy 114.945 59.754) (xy 114.945 59.774) (xy 114.965 59.774) (xy 114.965 60.028) + (xy 114.945 60.028) (xy 114.945 60.695865) (xy 114.915664 60.766688) (xy 114.8815 60.938441) (xy 114.8815 61.113559) + (xy 114.88464 61.129346) (xy 114.827113 61.160095) (xy 114.72275 61.245744) (xy 114.618387 61.160095) (xy 114.526537 61.111) + (xy 114.53225 61.111) (xy 114.691 60.95225) (xy 114.691 60.028) (xy 113.64175 60.028) (xy 113.483 60.18675) + (xy 113.483 60.538542) (xy 113.507403 60.661223) (xy 113.55527 60.776785) (xy 113.624763 60.880789) (xy 113.713211 60.969237) + (xy 113.774858 61.010428) (xy 113.224999 61.010428) (xy 113.051745 61.027492) (xy 112.885149 61.078028) (xy 112.731613 61.160095) + (xy 112.597038 61.270538) (xy 112.486595 61.405113) (xy 112.404528 61.558649) (xy 112.353992 61.725245) (xy 112.336928 61.898499) + (xy 112.336928 62.548501) (xy 112.353992 62.721755) (xy 112.404528 62.888351) (xy 112.486595 63.041887) (xy 112.597038 63.176462) + (xy 112.604343 63.182457) (xy 112.570211 63.205263) (xy 112.481763 63.293711) (xy 112.41227 63.397715) (xy 112.364403 63.513277) + (xy 112.34 63.635958) (xy 112.34 63.98775) (xy 112.49875 64.1465) (xy 113.548 64.1465) (xy 113.548 64.1265) + (xy 113.802 64.1265) (xy 113.802 64.1465) (xy 115.6435 64.1465) (xy 115.6435 64.1265) (xy 115.8975 64.1265) + (xy 115.8975 64.1465) (xy 116.94675 64.1465) (xy 117.1055 63.98775) (xy 117.1055 63.94681) (xy 120.311176 63.94681) + (xy 120.346102 63.95025) (xy 120.381028 63.94681) (xy 120.381038 63.94681) (xy 120.485522 63.936519) (xy 120.619583 63.895852) + (xy 120.743135 63.829812) (xy 120.851429 63.740937) (xy 120.873704 63.713796) (xy 121.190909 63.396591) (xy 121.197536 63.455676) + (xy 121.307004 63.800762) (xy 121.481414 64.118014) (xy 121.714125 64.395347) (xy 121.99627 64.622198) (xy 122.317105 64.789926) + (xy 122.664408 64.892143) (xy 123.02495 64.924955) (xy 123.385 64.887112) (xy 123.730841 64.780056) (xy 124.049303 64.607865) + (xy 124.284843 64.413009) (xy 124.275406 64.509255) (xy 124.147838 64.931781) (xy 123.940631 65.321482) (xy 123.661676 65.663513) + (xy 123.321601 65.944849) (xy 122.933356 66.154771) (xy 122.511737 66.285285) (xy 122.038726 66.335) (xy 93.092947 66.335) + (xy 92.617745 66.288406) (xy 92.195219 66.160838) (xy 91.805518 65.953631) (xy 91.463487 65.674676) (xy 91.182151 65.334601) + (xy 90.972229 64.946356) (xy 90.841715 64.524737) (xy 90.83033 64.416417) (xy 91.08627 64.622198) (xy 91.407105 64.789926) + (xy 91.754408 64.892143) (xy 92.11495 64.924955) (xy 92.475 64.887112) (xy 92.820841 64.780056) (xy 93.139303 64.607865) + (xy 93.198068 64.55925) (xy 112.34 64.55925) (xy 112.34 64.911042) (xy 112.364403 65.033723) (xy 112.41227 65.149285) + (xy 112.481763 65.253289) (xy 112.570211 65.341737) (xy 112.674215 65.41123) (xy 112.789777 65.459097) (xy 112.912458 65.4835) + (xy 113.38925 65.4835) (xy 113.548 65.32475) (xy 113.548 64.4005) (xy 113.802 64.4005) (xy 113.802 65.32475) + (xy 113.96075 65.4835) (xy 114.437542 65.4835) (xy 114.560223 65.459097) (xy 114.675785 65.41123) (xy 114.72275 65.379849) + (xy 114.769715 65.41123) (xy 114.885277 65.459097) (xy 115.007958 65.4835) (xy 115.48475 65.4835) (xy 115.6435 65.32475) + (xy 115.6435 64.4005) (xy 115.8975 64.4005) (xy 115.8975 65.32475) (xy 116.05625 65.4835) (xy 116.533042 65.4835) + (xy 116.655723 65.459097) (xy 116.771285 65.41123) (xy 116.875289 65.341737) (xy 116.963737 65.253289) (xy 117.03323 65.149285) + (xy 117.081097 65.033723) (xy 117.1055 64.911042) (xy 117.1055 64.55925) (xy 116.94675 64.4005) (xy 115.8975 64.4005) + (xy 115.6435 64.4005) (xy 113.802 64.4005) (xy 113.548 64.4005) (xy 112.49875 64.4005) (xy 112.34 64.55925) + (xy 93.198068 64.55925) (xy 93.418254 64.377096) (xy 93.647069 64.096541) (xy 93.817033 63.776886) (xy 93.921672 63.430305) + (xy 93.957 63.07) (xy 93.956277 63.018205) (xy 93.910902 62.659028) (xy 93.796627 62.315504) (xy 93.617804 62.000718) + (xy 93.381244 61.726661) (xy 93.095959 61.503772) (xy 92.772814 61.340539) (xy 92.424117 61.243182) (xy 92.063152 61.215407) + (xy 91.703666 61.258273) (xy 91.359353 61.370147) (xy 91.043326 61.546768) (xy 90.792 61.760664) (xy 90.792 59.709669) + (xy 90.966366 59.922134) (xy 91.192486 60.107706) (xy 91.450466 60.245599) (xy 91.730389 60.330513) (xy 91.94855 60.352) + (xy 92.09445 60.352) (xy 92.312611 60.330513) (xy 92.592534 60.245599) (xy 92.850514 60.107706) (xy 93.076634 59.922134) + (xy 93.262206 59.696014) (xy 93.400099 59.438034) (xy 93.485013 59.158111) (xy 93.513685 58.867) (xy 93.485013 58.575889) + (xy 93.400099 58.295966) (xy 93.292137 58.093983) (xy 100.840997 58.093983) (xy 100.840997 58.970775) (xy 100.8654 59.093456) + (xy 100.913267 59.209018) (xy 100.98276 59.313022) (xy 101.071208 59.40147) (xy 101.175212 59.470963) (xy 101.290774 59.51883) + (xy 101.413455 59.543233) (xy 101.990247 59.543233) (xy 102.148997 59.384483) (xy 102.148997 57.935233) (xy 100.999747 57.935233) + (xy 100.840997 58.093983) (xy 93.292137 58.093983) (xy 93.262206 58.037986) (xy 93.076634 57.811866) (xy 92.850514 57.626294) + (xy 92.795709 57.597) (xy 92.850514 57.567706) (xy 93.076634 57.382134) (xy 93.262206 57.156014) (xy 93.400099 56.898034) + (xy 93.476646 56.645691) (xy 100.840997 56.645691) (xy 100.840997 57.522483) (xy 100.999747 57.681233) (xy 102.148997 57.681233) + (xy 102.148997 56.231983) (xy 102.402997 56.231983) (xy 102.402997 57.681233) (xy 103.552247 57.681233) (xy 103.710997 57.522483) + (xy 103.710997 56.645691) (xy 103.686594 56.52301) (xy 103.638727 56.407448) (xy 103.569234 56.303444) (xy 103.480786 56.214996) + (xy 103.376782 56.145503) (xy 103.26122 56.097636) (xy 103.138539 56.073233) (xy 102.561747 56.073233) (xy 102.402997 56.231983) + (xy 102.148997 56.231983) (xy 101.990247 56.073233) (xy 101.413455 56.073233) (xy 101.290774 56.097636) (xy 101.175212 56.145503) + (xy 101.071208 56.214996) (xy 100.98276 56.303444) (xy 100.913267 56.407448) (xy 100.8654 56.52301) (xy 100.840997 56.645691) + (xy 93.476646 56.645691) (xy 93.485013 56.618111) (xy 93.513685 56.327) (xy 93.485013 56.035889) (xy 93.472074 55.993233) + (xy 104.692247 55.993233) (xy 104.713455 55.993233) (xy 105.138539 55.993233) (xy 105.159747 55.993233) (xy 105.192247 55.993233) + (xy 105.213455 55.993233) (xy 105.638539 55.993233) (xy 105.659747 55.993233) (xy 105.656228 55.989714) (xy 105.638539 55.993233) + (xy 105.213455 55.993233) (xy 105.195766 55.989714) (xy 105.192247 55.993233) (xy 105.159747 55.993233) (xy 105.156228 55.989714) + (xy 105.138539 55.993233) (xy 104.713455 55.993233) (xy 104.695766 55.989714) (xy 104.692247 55.993233) (xy 93.472074 55.993233) + (xy 93.400099 55.755966) (xy 93.262206 55.497986) (xy 93.076634 55.271866) (xy 92.850514 55.086294) (xy 92.795709 55.057) + (xy 92.850514 55.027706) (xy 93.076634 54.842134) (xy 93.262206 54.616014) (xy 93.400099 54.358034) (xy 93.485013 54.078111) + (xy 93.513685 53.787) (xy 93.485013 53.495889) (xy 93.400099 53.215966) (xy 93.262206 52.957986) (xy 93.076634 52.731866) + (xy 92.850514 52.546294) (xy 92.795709 52.517) (xy 92.850514 52.487706) (xy 92.930881 52.42175) (xy 103.1215 52.42175) + (xy 103.1215 52.898542) (xy 103.145903 53.021223) (xy 103.19377 53.136785) (xy 103.263263 53.240789) (xy 103.351711 53.329237) + (xy 103.455715 53.39873) (xy 103.571277 53.446597) (xy 103.693958 53.471) (xy 104.04575 53.471) (xy 104.2045 53.31225) + (xy 104.2045 52.263) (xy 103.28025 52.263) (xy 103.1215 52.42175) (xy 92.930881 52.42175) (xy 93.076634 52.302134) + (xy 93.262206 52.076014) (xy 93.400099 51.818034) (xy 93.485013 51.538111) (xy 93.513685 51.247) (xy 93.485013 50.955889) + (xy 93.400099 50.675966) (xy 93.262206 50.417986) (xy 93.076634 50.191866) (xy 93.048947 50.169144) (xy 93.056723 50.167597) + (xy 93.172285 50.11973) (xy 93.276289 50.050237) (xy 93.364737 49.961789) (xy 93.43423 49.857785) (xy 93.482097 49.742223) + (xy 93.5065 49.619542) (xy 93.5065 48.99275) (xy 93.34775 48.834) (xy 92.1485 48.834) (xy 92.1485 48.854) + (xy 91.8945 48.854) (xy 91.8945 48.834) (xy 91.8745 48.834) (xy 91.8745 48.58) (xy 91.8945 48.58) + (xy 91.8945 47.38075) (xy 92.1485 47.38075) (xy 92.1485 48.58) (xy 93.34775 48.58) (xy 93.5065 48.42125) + (xy 93.5065 47.794458) (xy 93.482097 47.671777) (xy 93.43423 47.556215) (xy 93.364737 47.452211) (xy 93.276289 47.363763) + (xy 93.172285 47.29427) (xy 93.056723 47.246403) (xy 92.934042 47.222) (xy 92.30725 47.222) (xy 92.1485 47.38075) + (xy 91.8945 47.38075) (xy 91.73575 47.222) (xy 91.3992 47.222) (xy 91.3992 46.398087) (xy 93.001195 44.796093) + (xy 93.028326 44.773827) (xy 93.050593 44.746695) (xy 93.050597 44.746691) (xy 93.061774 44.733072) (xy 93.773 44.733072) + (xy 93.897482 44.720812) (xy 94.01718 44.684502) (xy 94.127494 44.625537) (xy 94.224185 44.546185) (xy 94.303537 44.449494) + (xy 94.362502 44.33918) (xy 94.398812 44.219482) (xy 94.411072 44.095) (xy 94.411072 41.345782) (xy 94.445106 41.345782) + (xy 94.580522 43.219125) (xy 95.078808 45.030054) (xy 95.920814 46.708976) (xy 96.19773 47.12341) (xy 97.27117 48.167225) + (xy 103.843395 41.595) (xy 104.202605 41.595) (xy 110.77483 48.167225) (xy 111.84827 47.12341) (xy 112.776449 45.490549) + (xy 113.368238 43.707984) (xy 113.600894 41.844218) (xy 113.465478 39.970875) (xy 112.967192 38.159946) (xy 112.125186 36.481024) + (xy 111.84827 36.06659) (xy 110.77483 35.022775) (xy 104.202605 41.595) (xy 103.843395 41.595) (xy 97.27117 35.022775) + (xy 96.19773 36.06659) (xy 95.269551 37.699451) (xy 94.677762 39.482016) (xy 94.445106 41.345782) (xy 94.411072 41.345782) + (xy 94.411072 39.095) (xy 94.398812 38.970518) (xy 94.362502 38.85082) (xy 94.303537 38.740506) (xy 94.224185 38.643815) + (xy 94.127494 38.564463) (xy 94.01718 38.505498) (xy 93.897482 38.469188) (xy 93.773 38.456928) (xy 91.273 38.456928) + (xy 91.148518 38.469188) (xy 91.02882 38.505498) (xy 90.918506 38.564463) (xy 90.821815 38.643815) (xy 90.792 38.680145) + (xy 90.792 37.380897) (xy 90.804125 37.395347) (xy 91.08627 37.622198) (xy 91.407105 37.789926) (xy 91.754408 37.892143) + (xy 92.11495 37.924955) (xy 92.475 37.887112) (xy 92.820841 37.780056) (xy 93.139303 37.607865) (xy 93.418254 37.377096) + (xy 93.647069 37.096541) (xy 93.817033 36.776886) (xy 93.921672 36.430305) (xy 93.957 36.07) (xy 93.956277 36.018205) + (xy 93.910902 35.659028) (xy 93.796627 35.315504) (xy 93.617804 35.000718) (xy 93.381244 34.726661) (xy 93.095959 34.503772) + (xy 92.772814 34.340539) (xy 92.424117 34.243182) (xy 92.063152 34.215407) (xy 91.703666 34.258273) (xy 91.359353 34.370147) + (xy 91.043326 34.546768) (xy 90.828938 34.729227) (xy 90.838594 34.630745) (xy 90.966162 34.208219) (xy 91.173369 33.818518) + (xy 91.452324 33.476487) (xy 91.792399 33.195151) (xy 92.180644 32.985229) (xy 92.602265 32.854715) (xy 93.075274 32.805) + (xy 100.280494 32.805) + ) + ) + (filled_polygon + (pts + (xy 117.919854 62.305) (xy 119.570854 62.305) (xy 119.570854 62.285) (xy 119.824854 62.285) (xy 119.824854 62.305) + (xy 119.844854 62.305) (xy 119.844854 62.52441) (xy 117.645854 62.52441) (xy 117.645854 62.305) (xy 117.665854 62.305) + (xy 117.665854 62.285) (xy 117.919854 62.285) + ) + ) + (filled_polygon + (pts + (xy 122.9125 57.9215) (xy 122.8925 57.9215) (xy 122.8925 58.67075) (xy 123.05125 58.8295) (xy 123.150747 58.8295) + (xy 123.176919 58.869497) (xy 123.183404 58.87745) (xy 123.202428 58.900447) (xy 123.202428 59.4445) (xy 123.214688 59.568982) + (xy 123.250998 59.68868) (xy 123.309963 59.798994) (xy 123.389315 59.895685) (xy 123.486006 59.975037) (xy 123.59632 60.034002) + (xy 123.716018 60.070312) (xy 123.8405 60.082572) (xy 124.322001 60.082572) (xy 124.322 61.762293) (xy 124.291244 61.726661) + (xy 124.005959 61.503772) (xy 123.682814 61.340539) (xy 123.334117 61.243182) (xy 122.973152 61.215407) (xy 122.613666 61.258273) + (xy 122.5777 61.269959) (xy 122.5777 58.73155) (xy 122.6385 58.67075) (xy 122.6385 57.9215) (xy 122.6185 57.9215) + (xy 122.6185 57.682572) (xy 122.9125 57.682572) + ) + ) + (filled_polygon + (pts + (xy 122.9125 50.9365) (xy 122.8925 50.9365) (xy 122.8925 51.68575) (xy 123.05125 51.8445) (xy 123.160562 51.8445) + (xy 123.176919 51.869497) (xy 123.183404 51.87745) (xy 123.202428 51.900447) (xy 123.202428 52.4595) (xy 123.214688 52.583982) + (xy 123.250998 52.70368) (xy 123.309963 52.813994) (xy 123.389315 52.910685) (xy 123.486006 52.990037) (xy 123.59632 53.049002) + (xy 123.716018 53.085312) (xy 123.8405 53.097572) (xy 124.322001 53.097572) (xy 124.322 53.206428) (xy 123.8405 53.206428) + (xy 123.716018 53.218688) (xy 123.59632 53.254998) (xy 123.486006 53.313963) (xy 123.389315 53.393315) (xy 123.309963 53.490006) + (xy 123.250998 53.60032) (xy 123.214688 53.720018) (xy 123.202428 53.8445) (xy 123.202428 54.337769) (xy 123.179179 54.366276) + (xy 123.142323 54.421751) (xy 123.116475 54.4595) (xy 123.05125 54.4595) (xy 122.8925 54.61825) (xy 122.8925 55.3675) + (xy 122.9125 55.3675) (xy 122.9125 55.606428) (xy 122.6185 55.606428) (xy 122.6185 55.3675) (xy 122.6385 55.3675) + (xy 122.6385 54.61825) (xy 122.47975 54.4595) (xy 122.077958 54.4595) (xy 121.955277 54.483903) (xy 121.839715 54.53177) + (xy 121.735711 54.601263) (xy 121.647263 54.689711) (xy 121.624927 54.72314) (xy 120.980071 54.078284) (xy 121.709691 53.348664) + (xy 121.736827 53.326394) (xy 121.825702 53.2181) (xy 121.891742 53.094548) (xy 121.932409 52.960487) (xy 121.9427 52.856003) + (xy 121.9427 52.855996) (xy 121.94614 52.821067) (xy 121.9427 52.786139) (xy 121.9427 51.814887) (xy 121.955277 51.820097) + (xy 122.077958 51.8445) (xy 122.47975 51.8445) (xy 122.6385 51.68575) (xy 122.6385 50.9365) (xy 122.6185 50.9365) + (xy 122.6185 50.697572) (xy 122.9125 50.697572) + ) + ) + (filled_polygon + (pts + (xy 118.799506 51.013037) (xy 118.90982 51.072002) (xy 118.974317 51.091567) (xy 119.00025 51.1175) (xy 119.016542 51.1175) + (xy 119.051733 51.1105) (xy 119.154 51.120572) (xy 119.604 51.120572) (xy 119.704 51.110723) (xy 119.804 51.120572) + (xy 120.2028 51.120572) (xy 120.202801 52.412911) (xy 119.476413 53.1393) (xy 116.440428 53.1393) (xy 116.4055 53.13586) + (xy 116.370571 53.1393) (xy 116.370564 53.1393) (xy 116.26608 53.149591) (xy 116.132019 53.190258) (xy 116.008467 53.256298) + (xy 115.900173 53.345173) (xy 115.877903 53.37231) (xy 115.00081 54.249403) (xy 114.973673 54.271674) (xy 114.952478 54.2975) + (xy 114.893 54.2975) (xy 114.89364 54.291) (xy 114.8902 54.256071) (xy 114.8902 54.256064) (xy 114.8815 54.167733) + (xy 114.8815 54.016941) (xy 114.847336 53.845188) (xy 114.780321 53.683401) (xy 114.683031 53.537796) (xy 114.559204 53.413969) + (xy 114.413599 53.316679) (xy 114.251812 53.249664) (xy 114.080059 53.2155) (xy 113.904941 53.2155) (xy 113.843406 53.22774) + (xy 114.657196 52.413951) (xy 114.684327 52.391685) (xy 114.706593 52.364554) (xy 114.706597 52.36455) (xy 114.773202 52.283391) + (xy 114.803416 52.226865) (xy 114.839242 52.159839) (xy 114.879909 52.025778) (xy 114.8902 51.921294) (xy 114.8902 51.921285) + (xy 114.89364 51.886359) (xy 114.8902 51.851433) (xy 114.8902 51.787123) (xy 115.047941 51.8185) (xy 115.223059 51.8185) + (xy 115.394812 51.784336) (xy 115.556599 51.717321) (xy 115.6435 51.659256) (xy 115.730401 51.717321) (xy 115.892188 51.784336) + (xy 116.063941 51.8185) (xy 116.239059 51.8185) (xy 116.410812 51.784336) (xy 116.572599 51.717321) (xy 116.718204 51.620031) + (xy 116.842031 51.496204) (xy 116.939321 51.350599) (xy 117.006336 51.188812) (xy 117.025453 51.092703) (xy 117.05025 51.1175) + (xy 117.066542 51.1175) (xy 117.101733 51.1105) (xy 117.204 51.120572) (xy 117.654 51.120572) (xy 117.756267 51.1105) + (xy 117.791458 51.1175) (xy 117.80775 51.1175) (xy 117.833683 51.091567) (xy 117.89818 51.072002) (xy 118.008494 51.013037) + (xy 118.078807 50.955333) (xy 118.099211 50.975737) (xy 118.203215 51.04523) (xy 118.318777 51.093097) (xy 118.327603 51.094853) + (xy 118.35025 51.1175) (xy 118.366542 51.1175) (xy 118.404 51.110049) (xy 118.441458 51.1175) (xy 118.45775 51.1175) + (xy 118.480397 51.094853) (xy 118.489223 51.093097) (xy 118.604785 51.04523) (xy 118.708789 50.975737) (xy 118.729193 50.955333) + ) + ) + (filled_polygon + (pts + (xy 115.449081 46.987368) (xy 115.448428 46.993999) (xy 115.448428 47.644001) (xy 115.465492 47.817255) (xy 115.516028 47.983851) + (xy 115.598095 48.137387) (xy 115.708538 48.271962) (xy 115.843113 48.382405) (xy 115.87158 48.397621) (xy 115.804 48.404277) + (xy 115.704 48.394428) (xy 115.254 48.394428) (xy 115.151733 48.4045) (xy 115.116542 48.3975) (xy 115.10025 48.3975) + (xy 115.074317 48.423433) (xy 115.00982 48.442998) (xy 114.899506 48.501963) (xy 114.829 48.559826) (xy 114.758494 48.501963) + (xy 114.64818 48.442998) (xy 114.583683 48.423433) (xy 114.55775 48.3975) (xy 114.541458 48.3975) (xy 114.506267 48.4045) + (xy 114.404 48.394428) (xy 113.954 48.394428) (xy 113.829518 48.406688) (xy 113.70982 48.442998) (xy 113.599506 48.501963) + (xy 113.502815 48.581315) (xy 113.423463 48.678006) (xy 113.364498 48.78832) (xy 113.328188 48.908018) (xy 113.315928 49.0325) + (xy 113.315928 50.4825) (xy 113.328188 50.606982) (xy 113.364498 50.72668) (xy 113.423463 50.836994) (xy 113.467801 50.89102) + (xy 113.467801 51.591768) (xy 113.30627 51.7533) (xy 113.282097 51.631777) (xy 113.241079 51.53275) (xy 113.282097 51.433723) + (xy 113.3065 51.311042) (xy 113.3065 50.83425) (xy 113.14775 50.6755) (xy 112.2235 50.6755) (xy 112.2235 52.39) + (xy 112.2435 52.39) (xy 112.2435 52.644) (xy 112.2235 52.644) (xy 112.2235 52.664) (xy 111.9695 52.664) + (xy 111.9695 52.644) (xy 111.9495 52.644) (xy 111.9495 52.39) (xy 111.9695 52.39) (xy 111.9695 50.6755) + (xy 111.9495 50.6755) (xy 111.9495 50.4215) (xy 111.9695 50.4215) (xy 111.9695 50.4015) (xy 112.2235 50.4015) + (xy 112.2235 50.4215) (xy 113.14775 50.4215) (xy 113.3065 50.26275) (xy 113.3065 49.785958) (xy 113.282097 49.663277) + (xy 113.23423 49.547715) (xy 113.164737 49.443711) (xy 113.076289 49.355263) (xy 112.972285 49.28577) (xy 112.856723 49.237903) + (xy 112.734042 49.2135) (xy 112.387287 49.2135) (xy 114.834088 46.7667) (xy 115.228413 46.7667) + ) + ) + (filled_polygon + (pts + (xy 122.9125 43.888) (xy 122.8925 43.888) (xy 122.8925 44.63725) (xy 123.05125 44.796) (xy 123.128467 44.796) + (xy 123.140481 44.813812) (xy 123.176919 44.869497) (xy 123.183404 44.87745) (xy 123.202428 44.900447) (xy 123.202428 45.411) + (xy 123.214688 45.535482) (xy 123.250998 45.65518) (xy 123.309963 45.765494) (xy 123.389315 45.862185) (xy 123.486006 45.941537) + (xy 123.59632 46.000502) (xy 123.716018 46.036812) (xy 123.8405 46.049072) (xy 124.322001 46.049072) (xy 124.322 46.221428) + (xy 123.8405 46.221428) (xy 123.716018 46.233688) (xy 123.59632 46.269998) (xy 123.486006 46.328963) (xy 123.389315 46.408315) + (xy 123.309963 46.505006) (xy 123.250998 46.61532) (xy 123.214688 46.735018) (xy 123.202428 46.8595) (xy 123.202428 47.313952) + (xy 123.198548 47.318516) (xy 123.198543 47.318521) (xy 123.19854 47.318526) (xy 123.198537 47.318529) (xy 123.167193 47.355922) + (xy 123.12958 47.410916) (xy 123.105009 47.445785) (xy 123.092914 47.460523) (xy 123.085443 47.4745) (xy 123.05125 47.4745) + (xy 122.8925 47.63325) (xy 122.8925 48.3825) (xy 122.9125 48.3825) (xy 122.9125 48.621428) (xy 122.6185 48.621428) + (xy 122.6185 48.3825) (xy 122.6385 48.3825) (xy 122.6385 47.63325) (xy 122.47975 47.4745) (xy 122.1332 47.4745) + (xy 122.1332 44.796) (xy 122.47975 44.796) (xy 122.6385 44.63725) (xy 122.6385 43.888) (xy 122.6185 43.888) + (xy 122.6185 43.649072) (xy 122.9125 43.649072) + ) + ) + ) + (zone (net 1) (net_name GND) (layer F.Cu) (tstamp 0) (hatch edge 0.508) + (connect_pads (clearance 0.508)) + (min_thickness 0.254) + (fill yes (arc_segments 16) (thermal_gap 0.508) (thermal_bridge_width 0.508)) + (polygon + (pts + (xy 127.01 30.6095) (xy 127.391 65.1535) (xy 121.2315 69.5985) (xy 87.64 68.2015) (xy 88.5925 30.1015) + ) + ) + (filled_polygon + (pts + (xy 122.576918 32.870594) (xy 123.068944 33.049191) (xy 123.506692 33.336192) (xy 123.866668 33.71619) (xy 124.129576 34.168821) + (xy 124.28422 34.679416) (xy 124.289206 34.73528) (xy 123.721878 34.356203) (xy 123.012 34.215) (xy 122.302122 34.356203) + (xy 121.700317 34.758317) (xy 121.298203 35.360122) (xy 121.157 36.07) (xy 121.298203 36.779878) (xy 121.700317 37.381683) + (xy 122.302122 37.783797) (xy 123.012 37.925) (xy 123.721878 37.783797) (xy 124.322001 37.382807) (xy 124.322 39.984157) + (xy 123.884612 39.984157) (xy 123.813611 39.99828) (xy 123.813609 39.99828) (xy 123.717939 40.01731) (xy 123.717937 40.017311) + (xy 123.670217 40.026803) (xy 123.629764 40.053833) (xy 123.452986 40.127056) (xy 123.37188 40.181249) (xy 123.169094 40.384035) + (xy 123.169093 40.384037) (xy 123.169092 40.384038) (xy 123.114899 40.465143) (xy 123.069078 40.575767) (xy 123.041675 40.641923) + (xy 123.014647 40.682374) (xy 123.005156 40.730089) (xy 123.005153 40.730096) (xy 122.986123 40.825767) (xy 122.986123 40.825773) + (xy 122.972001 40.896769) (xy 122.972 44.341544) (xy 122.986123 44.412545) (xy 122.986123 44.412547) (xy 123.005153 44.508218) + (xy 123.005154 44.50822) (xy 123.014646 44.555939) (xy 123.041675 44.596391) (xy 123.114899 44.773171) (xy 123.169092 44.854276) + (xy 123.169093 44.854277) (xy 123.169094 44.854279) (xy 123.37188 45.057065) (xy 123.452986 45.111258) (xy 123.629764 45.184481) + (xy 123.670217 45.211511) (xy 123.717937 45.221003) (xy 123.717939 45.221004) (xy 123.813609 45.240034) (xy 123.813611 45.240034) + (xy 123.884612 45.254157) (xy 124.322001 45.254157) (xy 124.322 46.984211) (xy 123.864446 46.984211) (xy 123.795598 46.997906) + (xy 123.704704 47.015433) (xy 123.702052 47.016513) (xy 123.650051 47.026857) (xy 123.608487 47.054629) (xy 123.57389 47.068723) + (xy 123.442709 47.12127) (xy 123.360975 47.17451) (xy 123.262005 47.27119) (xy 123.219847 47.312373) (xy 123.177096 47.340938) + (xy 123.014647 47.58406) (xy 122.972001 47.798455) (xy 122.972 49.642387) (xy 122.972001 49.642392) (xy 122.972 51.341544) + (xy 122.986123 51.412545) (xy 122.986123 51.412547) (xy 123.005153 51.508218) (xy 123.005154 51.50822) (xy 123.014646 51.555939) + (xy 123.041675 51.596391) (xy 123.114899 51.773171) (xy 123.169092 51.854276) (xy 123.169093 51.854277) (xy 123.169094 51.854279) + (xy 123.37188 52.057065) (xy 123.452986 52.111258) (xy 123.629764 52.184481) (xy 123.670217 52.211511) (xy 123.717937 52.221003) + (xy 123.717939 52.221004) (xy 123.813609 52.240034) (xy 123.813611 52.240034) (xy 123.884612 52.254157) (xy 124.322001 52.254157) + (xy 124.322 53.984157) (xy 123.884612 53.984157) (xy 123.813611 53.99828) (xy 123.813609 53.99828) (xy 123.717939 54.01731) + (xy 123.717937 54.017311) (xy 123.670217 54.026803) (xy 123.629764 54.053833) (xy 123.452986 54.127056) (xy 123.37188 54.181249) + (xy 123.169094 54.384035) (xy 123.169093 54.384037) (xy 123.169092 54.384038) (xy 123.114899 54.465143) (xy 123.074904 54.561701) + (xy 123.041675 54.641923) (xy 123.014647 54.682374) (xy 123.005156 54.730089) (xy 123.005153 54.730096) (xy 122.986123 54.825767) + (xy 122.986123 54.825773) (xy 122.972001 54.896769) (xy 122.972 58.341544) (xy 122.986123 58.412545) (xy 122.986123 58.412547) + (xy 123.005153 58.508218) (xy 123.005154 58.50822) (xy 123.014646 58.555939) (xy 123.041675 58.596391) (xy 123.114899 58.773171) + (xy 123.169092 58.854276) (xy 123.169093 58.854277) (xy 123.169094 58.854279) (xy 123.37188 59.057065) (xy 123.452986 59.111258) + (xy 123.629764 59.184481) (xy 123.670217 59.211511) (xy 123.717937 59.221003) (xy 123.717939 59.221004) (xy 123.813609 59.240034) + (xy 123.813611 59.240034) (xy 123.884612 59.254157) (xy 124.322001 59.254157) (xy 124.322 61.757193) (xy 123.721878 61.356203) + (xy 123.012 61.215) (xy 122.302122 61.356203) (xy 121.700317 61.758317) (xy 121.298203 62.360122) (xy 121.157 63.07) + (xy 121.298203 63.779878) (xy 121.700317 64.381683) (xy 122.302122 64.783797) (xy 123.012 64.925) (xy 123.721878 64.783797) + (xy 124.27705 64.412842) (xy 124.256405 64.589918) (xy 124.077809 65.081944) (xy 123.79081 65.519689) (xy 123.410807 65.87967) + (xy 122.95818 66.142576) (xy 122.447584 66.29722) (xy 122.024269 66.335) (xy 93.099702 66.335) (xy 92.537082 66.269405) + (xy 92.045056 66.090809) (xy 91.607311 65.80381) (xy 91.24733 65.423807) (xy 90.984424 64.97118) (xy 90.82978 64.460584) + (xy 90.824794 64.40472) (xy 91.392122 64.783797) (xy 92.102 64.925) (xy 92.811878 64.783797) (xy 93.413683 64.381683) + (xy 93.815797 63.779878) (xy 93.957 63.07) (xy 93.815797 62.360122) (xy 93.413683 61.758317) (xy 92.811878 61.356203) + (xy 92.102 61.215) (xy 91.392122 61.356203) (xy 90.792 61.757192) (xy 90.792 59.699852) (xy 90.950875 59.937625) + (xy 91.442082 60.265839) (xy 91.875244 60.352) (xy 92.167756 60.352) (xy 92.445471 60.296759) (xy 93.628078 61.479367) + (xy 93.667754 61.538746) (xy 93.727133 61.578422) (xy 93.727135 61.578424) (xy 93.903002 61.695935) (xy 93.903003 61.695935) + (xy 93.903004 61.695936) (xy 94.110454 61.7372) (xy 94.110457 61.7372) (xy 94.180499 61.751132) (xy 94.250541 61.7372) + (xy 115.224464 61.7372) (xy 115.266922 61.779658) (xy 115.593667 61.915) (xy 115.947333 61.915) (xy 116.274078 61.779658) + (xy 116.524158 61.529578) (xy 116.6595 61.202833) (xy 116.6595 60.849167) (xy 116.524158 60.522422) (xy 116.274078 60.272342) + (xy 115.947333 60.137) (xy 115.593667 60.137) (xy 115.266922 60.272342) (xy 115.224464 60.3148) (xy 94.475089 60.3148) + (xy 93.451259 59.290971) (xy 93.535592 58.867) (xy 93.420339 58.287582) (xy 93.092125 57.796375) (xy 92.793739 57.597) + (xy 93.092125 57.397625) (xy 93.331638 57.039167) (xy 105.6105 57.039167) (xy 105.6105 57.392833) (xy 105.745842 57.719578) + (xy 105.995922 57.969658) (xy 106.322667 58.105) (xy 106.676333 58.105) (xy 107.003078 57.969658) (xy 107.045536 57.9272) + (xy 107.864839 57.9272) (xy 107.93488 57.941132) (xy 108.004921 57.9272) (xy 108.004926 57.9272) (xy 108.212376 57.885936) + (xy 108.447626 57.728746) (xy 108.487304 57.669364) (xy 111.594968 54.561701) (xy 113.219632 54.561701) (xy 113.238842 54.608078) + (xy 113.488922 54.858158) (xy 113.815667 54.9935) (xy 114.169333 54.9935) (xy 114.496078 54.858158) (xy 114.746158 54.608078) + (xy 114.8815 54.281333) (xy 114.8815 53.927667) (xy 114.746158 53.600922) (xy 114.496078 53.350842) (xy 114.169333 53.2155) + (xy 114.068281 53.2155) (xy 114.015997 53.180565) (xy 113.808547 53.139301) (xy 113.808542 53.139301) (xy 113.738501 53.125369) + (xy 113.66846 53.139301) (xy 112.343988 53.139301) (xy 113.359988 52.123301) (xy 115.598858 52.123301) (xy 115.668899 52.137233) + (xy 115.73894 52.123301) (xy 115.738945 52.123301) (xy 115.946395 52.082037) (xy 116.181645 51.924847) (xy 116.221323 51.865465) + (xy 116.268288 51.8185) (xy 116.328333 51.8185) (xy 116.655078 51.683158) (xy 116.905158 51.433078) (xy 117.0405 51.106333) + (xy 117.0405 50.752667) (xy 116.905158 50.425922) (xy 116.655078 50.175842) (xy 116.328333 50.0405) (xy 115.974667 50.0405) + (xy 115.647922 50.175842) (xy 115.6435 50.180264) (xy 115.639078 50.175842) (xy 115.312333 50.0405) (xy 114.958667 50.0405) + (xy 114.631922 50.175842) (xy 114.589464 50.2183) (xy 110.506542 50.2183) (xy 110.4365 50.204368) (xy 110.366458 50.2183) + (xy 110.366454 50.2183) (xy 110.159004 50.259564) (xy 110.098836 50.299767) (xy 109.983135 50.377076) (xy 109.983133 50.377078) + (xy 109.923754 50.416754) (xy 109.884078 50.476133) (xy 107.843212 52.517) (xy 107.783167 52.517) (xy 107.456422 52.652342) + (xy 107.206342 52.902422) (xy 107.071 53.229167) (xy 107.071 53.582833) (xy 107.206342 53.909578) (xy 107.456422 54.159658) + (xy 107.783167 54.295) (xy 108.136833 54.295) (xy 108.463578 54.159658) (xy 108.713658 53.909578) (xy 108.849 53.582833) + (xy 108.849 53.522788) (xy 110.731089 51.6407) (xy 111.831011 51.6407) (xy 108.224212 55.2475) (xy 108.123297 55.2475) + (xy 107.796552 55.382842) (xy 107.546472 55.632922) (xy 107.41113 55.959667) (xy 107.41113 56.313333) (xy 107.490438 56.5048) + (xy 107.045536 56.5048) (xy 107.003078 56.462342) (xy 106.676333 56.327) (xy 106.322667 56.327) (xy 105.995922 56.462342) + (xy 105.745842 56.712422) (xy 105.6105 57.039167) (xy 93.331638 57.039167) (xy 93.420339 56.906418) (xy 93.535592 56.327) + (xy 93.451259 55.903029) (xy 100.190089 49.1642) (xy 118.780464 49.1642) (xy 118.822922 49.206658) (xy 119.149667 49.342) + (xy 119.503333 49.342) (xy 119.830078 49.206658) (xy 120.080158 48.956578) (xy 120.126605 48.844444) (xy 120.126605 50.330106) + (xy 113.431212 57.0255) (xy 113.371167 57.0255) (xy 113.044422 57.160842) (xy 112.794342 57.410922) (xy 112.659 57.737667) + (xy 112.659 58.091333) (xy 112.794342 58.418078) (xy 113.044422 58.668158) (xy 113.371167 58.8035) (xy 113.724833 58.8035) + (xy 114.051578 58.668158) (xy 114.301658 58.418078) (xy 114.437 58.091333) (xy 114.437 58.031288) (xy 121.291174 51.177115) + (xy 121.35055 51.137441) (xy 121.390225 51.078064) (xy 121.390229 51.07806) (xy 121.50774 50.902193) (xy 121.50774 50.902192) + (xy 121.507741 50.902191) (xy 121.549005 50.694741) (xy 121.549005 50.694738) (xy 121.562937 50.624696) (xy 121.549005 50.554654) + (xy 121.549005 45.335346) (xy 121.562937 45.265304) (xy 121.549005 45.195262) (xy 121.549005 45.195259) (xy 121.507741 44.987809) + (xy 121.50774 44.987807) (xy 121.390229 44.81194) (xy 121.390227 44.811938) (xy 121.350551 44.752559) (xy 121.291172 44.712883) + (xy 118.374 41.795712) (xy 118.374 41.735667) (xy 118.238658 41.408922) (xy 117.988578 41.158842) (xy 117.661833 41.0235) + (xy 117.308167 41.0235) (xy 116.981422 41.158842) (xy 116.731342 41.408922) (xy 116.596 41.735667) (xy 116.596 42.089333) + (xy 116.731342 42.416078) (xy 116.981422 42.666158) (xy 117.308167 42.8015) (xy 117.368212 42.8015) (xy 120.126606 45.559895) + (xy 120.126606 46.970921) (xy 120.101205 46.965869) (xy 120.031164 46.979801) (xy 98.18754 46.979801) (xy 98.117498 46.965869) + (xy 98.047456 46.979801) (xy 98.047453 46.979801) (xy 97.840003 47.021065) (xy 97.840002 47.021066) (xy 97.840001 47.021066) + (xy 97.664134 47.138577) (xy 97.664132 47.138579) (xy 97.604753 47.178255) (xy 97.565077 47.237634) (xy 93.530596 51.272115) + (xy 93.535592 51.247) (xy 93.420339 50.667582) (xy 93.092125 50.176375) (xy 93.070467 50.161904) (xy 93.231198 50.095327) + (xy 93.409827 49.916699) (xy 93.5065 49.68331) (xy 93.5065 48.99275) (xy 93.34775 48.834) (xy 92.1485 48.834) + (xy 92.1485 48.854) (xy 91.8945 48.854) (xy 91.8945 48.834) (xy 91.8745 48.834) (xy 91.8745 48.58) + (xy 91.8945 48.58) (xy 91.8945 47.38075) (xy 92.1485 47.38075) (xy 92.1485 48.58) (xy 93.34775 48.58) + (xy 93.5065 48.42125) (xy 93.5065 47.73069) (xy 93.409827 47.497301) (xy 93.231198 47.318673) (xy 92.997809 47.222) + (xy 92.30725 47.222) (xy 92.1485 47.38075) (xy 91.8945 47.38075) (xy 91.73575 47.222) (xy 91.045191 47.222) + (xy 90.811802 47.318673) (xy 90.792 47.338475) (xy 90.792 37.382808) (xy 91.392122 37.783797) (xy 92.102 37.925) + (xy 92.811878 37.783797) (xy 93.413683 37.381683) (xy 93.815797 36.779878) (xy 93.957 36.07) (xy 93.815797 35.360122) + (xy 93.413683 34.758317) (xy 92.811878 34.356203) (xy 92.102 34.215) (xy 91.392122 34.356203) (xy 90.83695 34.727158) + (xy 90.857594 34.550082) (xy 91.036191 34.058056) (xy 91.323192 33.620308) (xy 91.70319 33.260332) (xy 92.155821 32.997424) + (xy 92.666416 32.84278) (xy 93.089732 32.805) (xy 122.014298 32.805) + ) + ) + ) +) diff --git a/ecad/watch_v1-1.pro b/ecad/watch_v1-1.pro new file mode 100644 index 0000000..e3c0d10 --- /dev/null +++ b/ecad/watch_v1-1.pro @@ -0,0 +1,63 @@ +update=Sat 20 Apr 2019 10:29:46 PM PDT +version=1 +last_client=kicad +[pcbnew] +version=1 +LastNetListRead= +UseCmpFile=1 +PadDrill=0.600000000000 +PadDrillOvalY=0.600000000000 +PadSizeH=1.500000000000 +PadSizeV=1.500000000000 +PcbTextSizeV=1.500000000000 +PcbTextSizeH=1.500000000000 +PcbTextThickness=0.300000000000 +ModuleTextSizeV=1.000000000000 +ModuleTextSizeH=1.000000000000 +ModuleTextSizeThickness=0.150000000000 +SolderMaskClearance=0.000000000000 +SolderMaskMinWidth=0.000000000000 +DrawSegmentWidth=0.200000000000 +BoardOutlineThickness=0.100000000000 +ModuleOutlineThickness=0.150000000000 +[cvpcb] +version=1 +NetIExt=net +[eeschema] +version=1 +LibDir= +[eeschema/libraries] +LibName1=power +LibName2=device +LibName3=switches +LibName4=relays +LibName5=motors +LibName6=transistors +LibName7=conn +LibName8=linear +LibName9=regul +LibName10=74xx +LibName11=cmos4000 +LibName12=adc-dac +LibName13=memory +LibName14=xilinx +LibName15=microcontrollers +LibName16=dsp +LibName17=microchip +LibName18=analog_switches +LibName19=motorola +LibName20=texas +LibName21=intel +LibName22=audio +LibName23=interface +LibName24=digital-audio +LibName25=philips +LibName26=display +LibName27=cypress +LibName28=siliconi +LibName29=opto +LibName30=atmel +LibName31=contrib +LibName32=valves +[general] +version=1 diff --git a/ecad/watch_v1-1.sch b/ecad/watch_v1-1.sch new file mode 100644 index 0000000..c0ead46 --- /dev/null +++ b/ecad/watch_v1-1.sch @@ -0,0 +1,790 @@ +EESchema Schematic File Version 4 +LIBS:kicad-cache +EELAYER 26 0 +EELAYER END +$Descr A4 11693 8268 +encoding utf-8 +Sheet 1 1 +Title "" +Date "" +Rev "" +Comp "" +Comment1 "" +Comment2 "" +Comment3 "" +Comment4 "" +$EndDescr +$Comp +L kicad-rescue:STM32L031F6Px U1 +U 1 1 5CBC08BF +P 5800 3100 +F 0 "U1" H 5400 3750 50 0000 L CNN +F 1 "STM32L031F6Px" H 6000 3750 50 0000 L CNN +F 2 "Package_SO:TSSOP-20_4.4x6.5mm_P0.65mm" H 5400 2400 50 0001 R CNN +F 3 "" H 5800 3100 50 0001 C CNN + 1 5800 3100 + 1 0 0 -1 +$EndComp +$Comp +L Device:Crystal Y1 +U 1 1 5CC13AA5 +P 4750 3450 +F 0 "Y1" V 4704 3581 50 0000 L CNN +F 1 "Crystal" V 4795 3581 50 0000 L CNN +F 2 "Crystal:Crystal_SMD_G8-2Pin_3.2x1.5mm_HandSoldering" H 4750 3450 50 0001 C CNN +F 3 "~" H 4750 3450 50 0001 C CNN + 1 4750 3450 + 0 1 1 0 +$EndComp +$Comp +L Switch:SW_Push SW1 +U 1 1 5CC13D70 +P 9450 1300 +F 0 "SW1" H 9450 1585 50 0000 C CNN +F 1 "SW_Push" H 9450 1494 50 0000 C CNN +F 2 "footprints:Panasonic_RightAngle_Button" H 9450 1500 50 0001 C CNN +F 3 "" H 9450 1500 50 0001 C CNN + 1 9450 1300 + 1 0 0 -1 +$EndComp +$Comp +L Switch:SW_Push SW2 +U 1 1 5CC13E33 +P 9450 1650 +F 0 "SW2" H 9450 1935 50 0000 C CNN +F 1 "SW_Push" H 9450 1844 50 0000 C CNN +F 2 "footprints:Panasonic_RightAngle_Button" H 9450 1850 50 0001 C CNN +F 3 "" H 9450 1850 50 0001 C CNN + 1 9450 1650 + 1 0 0 -1 +$EndComp +$Comp +L Switch:SW_Push SW3 +U 1 1 5CC13EAF +P 9450 2000 +F 0 "SW3" H 9450 2285 50 0000 C CNN +F 1 "SW_Push" H 9450 2194 50 0000 C CNN +F 2 "footprints:Panasonic_RightAngle_Button" H 9450 2200 50 0001 C CNN +F 3 "" H 9450 2200 50 0001 C CNN + 1 9450 2000 + 1 0 0 -1 +$EndComp +$Comp +L power:GND #PWR012 +U 1 1 5CC145B2 +P 5800 3900 +F 0 "#PWR012" H 5800 3650 50 0001 C CNN +F 1 "GND" H 5805 3727 50 0000 C CNN +F 2 "" H 5800 3900 50 0001 C CNN +F 3 "" H 5800 3900 50 0001 C CNN + 1 5800 3900 + 1 0 0 -1 +$EndComp +Wire Wire Line + 5300 3400 5300 3300 +Wire Wire Line + 5300 3300 4750 3300 +Wire Wire Line + 4750 3600 5300 3600 +Wire Wire Line + 5300 3600 5300 3500 +$Comp +L Device:C_Small C3 +U 1 1 5CC14877 +P 4500 3300 +F 0 "C3" V 4271 3300 50 0000 C CNN +F 1 "4.3pF" V 4362 3300 50 0000 C CNN +F 2 "Capacitor_SMD:C_0805_2012Metric_Pad1.15x1.40mm_HandSolder" H 4500 3300 50 0001 C CNN +F 3 "~" H 4500 3300 50 0001 C CNN + 1 4500 3300 + 0 1 1 0 +$EndComp +$Comp +L Device:C_Small C4 +U 1 1 5CC14926 +P 4500 3600 +F 0 "C4" V 4600 3600 50 0000 C CNN +F 1 "4.3pF" V 4700 3600 50 0000 C CNN +F 2 "Capacitor_SMD:C_0805_2012Metric_Pad1.15x1.40mm_HandSolder" H 4500 3600 50 0001 C CNN +F 3 "~" H 4500 3600 50 0001 C CNN + 1 4500 3600 + 0 1 1 0 +$EndComp +Wire Wire Line + 4750 3300 4600 3300 +Connection ~ 4750 3300 +Wire Wire Line + 4600 3600 4750 3600 +Connection ~ 4750 3600 +Wire Wire Line + 4400 3300 4250 3300 +Wire Wire Line + 4250 3300 4250 3600 +Wire Wire Line + 4250 3600 4400 3600 +Wire Wire Line + 4250 3600 4250 3700 +Connection ~ 4250 3600 +$Comp +L power:GND #PWR07 +U 1 1 5CC14C6B +P 4250 3700 +F 0 "#PWR07" H 4250 3450 50 0001 C CNN +F 1 "GND" H 4255 3527 50 0000 C CNN +F 2 "" H 4250 3700 50 0001 C CNN +F 3 "" H 4250 3700 50 0001 C CNN + 1 4250 3700 + 1 0 0 -1 +$EndComp +Text GLabel 6450 2700 2 50 Input ~ 0 +BTN_MID +Text GLabel 6450 2600 2 50 Input ~ 0 +BTN_DOWN +Text GLabel 6450 2800 2 50 Input ~ 0 +BTN_UP +Wire Wire Line + 6300 2600 6450 2600 +Wire Wire Line + 6300 2700 6450 2700 +Wire Wire Line + 6300 2800 6450 2800 +Wire Wire Line + 9250 1300 9150 1300 +Wire Wire Line + 9150 1300 9150 1650 +Wire Wire Line + 9150 1650 9250 1650 +Wire Wire Line + 9150 1650 9150 2000 +Wire Wire Line + 9150 2000 9250 2000 +Connection ~ 9150 1650 +$Comp +L power:GND #PWR020 +U 1 1 5CC15593 +P 8850 1650 +F 0 "#PWR020" H 8850 1400 50 0001 C CNN +F 1 "GND" H 8855 1477 50 0000 C CNN +F 2 "" H 8850 1650 50 0001 C CNN +F 3 "" H 8850 1650 50 0001 C CNN + 1 8850 1650 + -1 0 0 -1 +$EndComp +Text GLabel 9800 1300 2 50 Input ~ 0 +BTN_UP +Text GLabel 9800 1650 2 50 Input ~ 0 +BTN_MID +Text GLabel 9800 2000 2 50 Input ~ 0 +BTN_DOWN +Wire Wire Line + 9650 1300 9800 1300 +Wire Wire Line + 9650 1650 9800 1650 +Wire Wire Line + 9650 2000 9800 2000 +$Comp +L Device:C_Small C1 +U 1 1 5CC1601D +P 4150 1250 +F 0 "C1" H 4000 1300 50 0000 L CNN +F 1 "100nF" H 3850 1200 50 0000 L CNN +F 2 "Capacitor_SMD:C_0805_2012Metric_Pad1.15x1.40mm_HandSolder" H 4150 1250 50 0001 C CNN +F 3 "~" H 4150 1250 50 0001 C CNN +F 4 "C" H 4150 1250 50 0001 C CNN "Spice_Primitive" +F 5 "100nF" H 4150 1250 50 0001 C CNN "Spice_Model" +F 6 "Y" H 4150 1250 50 0001 C CNN "Spice_Netlist_Enabled" + 1 4150 1250 + 1 0 0 -1 +$EndComp +$Comp +L Device:C_Small C2 +U 1 1 5CC160C6 +P 4400 1250 +F 0 "C2" H 4492 1296 50 0000 L CNN +F 1 "100nF" H 4492 1205 50 0000 L CNN +F 2 "Capacitor_SMD:C_0805_2012Metric_Pad1.15x1.40mm_HandSolder" H 4400 1250 50 0001 C CNN +F 3 "~" H 4400 1250 50 0001 C CNN + 1 4400 1250 + 1 0 0 -1 +$EndComp +$Comp +L Device:C_Small C6 +U 1 1 5CC1613E +P 5050 1250 +F 0 "C6" H 5142 1296 50 0000 L CNN +F 1 "100nF" H 5142 1205 50 0000 L CNN +F 2 "Capacitor_SMD:C_0805_2012Metric_Pad1.15x1.40mm_HandSolder" H 5050 1250 50 0001 C CNN +F 3 "~" H 5050 1250 50 0001 C CNN + 1 5050 1250 + 1 0 0 -1 +$EndComp +Wire Wire Line + 4150 1150 4250 1150 +Wire Wire Line + 4150 1350 4250 1350 +Wire Wire Line + 4250 1150 4250 1050 +Connection ~ 4250 1150 +Wire Wire Line + 4250 1150 4400 1150 +Wire Wire Line + 4250 1350 4250 1450 +Connection ~ 4250 1350 +Wire Wire Line + 4250 1350 4400 1350 +Text GLabel 4250 1050 0 50 Input ~ 0 +MCU_VDD +Text GLabel 5800 2400 1 50 Input ~ 0 +MCU_VDD +Text GLabel 5900 2400 1 50 Input ~ 0 +MCU_VDDA +$Comp +L power:VDD #PWR05 +U 1 1 5CC1927A +P 4250 1050 +F 0 "#PWR05" H 4250 900 50 0001 C CNN +F 1 "VDD" H 4267 1223 50 0000 C CNN +F 2 "" H 4250 1050 50 0001 C CNN +F 3 "" H 4250 1050 50 0001 C CNN + 1 4250 1050 + 1 0 0 -1 +$EndComp +$Comp +L 0528921033:0528921033 J2 +U 1 1 5CC19477 +P 9850 4250 +F 0 "J2" H 9625 4246 50 0000 R CNN +F 1 "Display FPC" H 9625 4155 50 0000 R CNN +F 2 "0528921033:MOLEX_0528921033" H 9850 4250 50 0001 L BNN +F 3 "Molex" H 9850 4250 50 0001 L BNN +F 4 "Conn Ffc Bottom 10pos 0.50mm r/a" H 9850 4250 50 0001 L BNN "Field4" +F 5 "None" H 9850 4250 50 0001 L BNN "Field5" +F 6 "Unavailable" H 9850 4250 50 0001 L BNN "Field6" +F 7 "None" H 9850 4250 50 0001 L BNN "Field7" +F 8 "0528921033" H 9850 4250 50 0001 L BNN "Field8" + 1 9850 4250 + -1 0 0 -1 +$EndComp +Wire Wire Line + 9550 4750 9450 4750 +Wire Wire Line + 9450 4750 9450 4850 +Wire Wire Line + 9450 4850 9550 4850 +Wire Wire Line + 9200 4850 9200 4950 +Connection ~ 9450 4850 +$Comp +L power:GND #PWR019 +U 1 1 5CC1A496 +P 9200 4950 +F 0 "#PWR019" H 9200 4700 50 0001 C CNN +F 1 "GND" H 9205 4777 50 0000 C CNN +F 2 "" H 9200 4950 50 0001 C CNN +F 3 "" H 9200 4950 50 0001 C CNN + 1 9200 4950 + 1 0 0 -1 +$EndComp +Text GLabel 9350 3850 0 50 Input ~ 0 +MOSI +Text GLabel 9350 3750 0 50 Input ~ 0 +SCK +Text GLabel 9350 3950 0 50 Input ~ 0 +SS +Text GLabel 9350 4050 0 50 Input ~ 0 +EXTCOMM +$Comp +L power:VDD #PWR014 +U 1 1 5CC1C700 +P 8350 3800 +F 0 "#PWR014" H 8350 3650 50 0001 C CNN +F 1 "VDD" V 8368 3927 50 0000 L CNN +F 2 "" H 8350 3800 50 0001 C CNN +F 3 "" H 8350 3800 50 0001 C CNN + 1 8350 3800 + 0 -1 -1 0 +$EndComp +Text Label 9350 4150 0 50 ~ 0 +DISP +Wire Wire Line + 9350 3750 9550 3750 +Wire Wire Line + 9550 3850 9350 3850 +Wire Wire Line + 9350 3950 9550 3950 +Wire Wire Line + 9550 4050 9350 4050 +Wire Wire Line + 9200 4850 9450 4850 +Text Label 9200 4650 0 50 ~ 0 +VSSA +Wire Wire Line + 8900 4550 9200 4550 +$Comp +L power:GND #PWR018 +U 1 1 5CC21221 +P 8900 4550 +F 0 "#PWR018" H 8900 4300 50 0001 C CNN +F 1 "GND" H 8905 4377 50 0000 C CNN +F 2 "" H 8900 4550 50 0001 C CNN +F 3 "" H 8900 4550 50 0001 C CNN + 1 8900 4550 + 1 0 0 -1 +$EndComp +Text Label 9200 4550 0 50 ~ 0 +VSS +Wire Wire Line + 9550 4450 8950 4450 +$Comp +L power:VDD #PWR017 +U 1 1 5CC21C28 +P 8900 4450 +F 0 "#PWR017" H 8900 4300 50 0001 C CNN +F 1 "VDD" V 8950 4450 50 0000 L CNN +F 2 "" H 8900 4450 50 0001 C CNN +F 3 "" H 8900 4450 50 0001 C CNN + 1 8900 4450 + 0 -1 -1 0 +$EndComp +Wire Wire Line + 8900 4150 9550 4150 +Wire Wire Line + 9550 4350 8950 4350 +Wire Wire Line + 8950 4350 8950 4450 +Connection ~ 8950 4450 +Wire Wire Line + 8950 4450 8900 4450 +Text Label 9200 4450 0 50 ~ 0 +EXTMODE +Text Label 9200 4350 0 50 ~ 0 +VDD +Text Label 9200 4250 0 50 ~ 0 +VDDA +Text GLabel 6450 3100 2 50 Input ~ 0 +SCK +Text GLabel 6450 3000 2 50 Input ~ 0 +SS +Text GLabel 5300 3700 0 50 Input ~ 0 +MOSI +Text GLabel 6700 3300 2 50 Input ~ 0 +EXTCOMM +Wire Wire Line + 6300 3100 6450 3100 +Wire Wire Line + 6300 3000 6450 3000 +Text Label 6300 3300 0 50 ~ 0 +LPTIM_OUT +$Comp +L Device:Battery_Cell BT1 +U 1 1 5CC3508E +P 4000 5800 +F 0 "BT1" H 4118 5896 50 0000 L CNN +F 1 "CR2025" H 4118 5805 50 0000 L CNN +F 2 "footprints:CR2025-LINX" V 4000 5860 50 0001 C CNN +F 3 "~" V 4000 5860 50 0001 C CNN + 1 4000 5800 + 1 0 0 -1 +$EndComp +$Comp +L Device:C_Small C5 +U 1 1 5CC3ABC3 +P 4950 2500 +F 0 "C5" H 4800 2400 50 0000 C CNN +F 1 "100nF" H 4750 2500 50 0000 C CNN +F 2 "Capacitor_SMD:C_0805_2012Metric_Pad1.15x1.40mm_HandSolder" H 4950 2500 50 0001 C CNN +F 3 "~" H 4950 2500 50 0001 C CNN + 1 4950 2500 + -1 0 0 1 +$EndComp +Wire Wire Line + 5300 2600 4950 2600 +Wire Wire Line + 6300 3300 6700 3300 +Text GLabel 6850 3700 2 50 Input ~ 0 +SWCK +Text GLabel 6850 3600 2 50 Input ~ 0 +SWDIO +$Comp +L Connector:Conn_01x05_Female J1 +U 1 1 5CC5188F +P 1850 2950 +F 0 "J1" H 1744 2525 50 0000 C CNN +F 1 "SWD Headers" H 1744 2616 50 0000 C CNN +F 2 "Connector_PinHeader_2.54mm:PinHeader_1x05_P2.54mm_Vertical" H 1850 2950 50 0001 C CNN +F 3 "~" H 1850 2950 50 0001 C CNN + 1 1850 2950 + -1 0 0 1 +$EndComp +Wire Wire Line + 2350 2750 2050 2750 +Wire Wire Line + 2350 2850 2050 2850 +Wire Wire Line + 2350 2950 2050 2950 +Wire Wire Line + 2350 3050 2050 3050 +Wire Wire Line + 2350 3150 2050 3150 +Text GLabel 2350 2850 2 50 Input ~ 0 +SWDIO +Text GLabel 2350 2950 2 50 Input ~ 0 +SWCK +Text GLabel 2350 2750 2 50 Input ~ 0 +nRST +Text GLabel 4550 2600 0 50 Input ~ 0 +nRST +$Comp +L power:GND #PWR08 +U 1 1 5CC5B9B4 +P 4850 2800 +F 0 "#PWR08" H 4850 2550 50 0001 C CNN +F 1 "GND" H 4855 2627 50 0000 C CNN +F 2 "" H 4850 2800 50 0001 C CNN +F 3 "" H 4850 2800 50 0001 C CNN + 1 4850 2800 + 1 0 0 -1 +$EndComp +$Comp +L Device:R_Small_US R1 +U 1 1 5CC5BB36 +P 5050 2800 +F 0 "R1" V 4950 2800 50 0000 C CNN +F 1 "10k" V 4850 2800 50 0000 C CNN +F 2 "Resistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolder" H 5050 2800 50 0001 C CNN +F 3 "~" H 5050 2800 50 0001 C CNN + 1 5050 2800 + 0 -1 -1 0 +$EndComp +Wire Wire Line + 4850 2800 4950 2800 +Wire Wire Line + 5150 2800 5300 2800 +$Comp +L power:GND #PWR01 +U 1 1 5CC64E23 +P 2350 3150 +F 0 "#PWR01" H 2350 2900 50 0001 C CNN +F 1 "GND" V 2355 3022 50 0000 R CNN +F 2 "" H 2350 3150 50 0001 C CNN +F 3 "" H 2350 3150 50 0001 C CNN + 1 2350 3150 + 0 -1 -1 0 +$EndComp +$Comp +L power:VDD #PWR02 +U 1 1 5CC64EF0 +P 2350 3050 +F 0 "#PWR02" H 2350 2900 50 0001 C CNN +F 1 "VDD" V 2350 3200 50 0000 L CNN +F 2 "" H 2350 3050 50 0001 C CNN +F 3 "" H 2350 3050 50 0001 C CNN + 1 2350 3050 + 0 1 1 0 +$EndComp +Wire Wire Line + 6300 3600 6850 3600 +Wire Wire Line + 6300 3700 6850 3700 +$Comp +L power:VDD #PWR03 +U 1 1 5CC351B8 +P 4000 5600 +F 0 "#PWR03" H 4000 5450 50 0001 C CNN +F 1 "VDD" H 4017 5773 50 0000 C CNN +F 2 "" H 4000 5600 50 0001 C CNN +F 3 "" H 4000 5600 50 0001 C CNN + 1 4000 5600 + 1 0 0 -1 +$EndComp +Connection ~ 4000 5600 +$Comp +L power:PWR_FLAG #FLG01 +U 1 1 5CC71999 +P 4000 5600 +F 0 "#FLG01" H 4000 5675 50 0001 C CNN +F 1 "PWR_FLAG" V 4000 5728 50 0000 L CNN +F 2 "" H 4000 5600 50 0001 C CNN +F 3 "~" H 4000 5600 50 0001 C CNN + 1 4000 5600 + 0 -1 -1 0 +$EndComp +Wire Wire Line + 4000 5900 4000 6000 +$Comp +L power:PWR_FLAG #FLG02 +U 1 1 5CC7D5EC +P 4000 6000 +F 0 "#FLG02" H 4000 6075 50 0001 C CNN +F 1 "PWR_FLAG" V 4000 6128 50 0000 L CNN +F 2 "" H 4000 6000 50 0001 C CNN +F 3 "~" H 4000 6000 50 0001 C CNN + 1 4000 6000 + 0 1 1 0 +$EndComp +Connection ~ 4000 6000 +Wire Wire Line + 4000 6000 4000 6100 +$Comp +L power:GND #PWR04 +U 1 1 5CC7D65F +P 4000 6100 +F 0 "#PWR04" H 4000 5850 50 0001 C CNN +F 1 "GND" H 4005 5927 50 0000 C CNN +F 2 "" H 4000 6100 50 0001 C CNN +F 3 "" H 4000 6100 50 0001 C CNN + 1 4000 6100 + 1 0 0 -1 +$EndComp +Wire Wire Line + 5050 1350 5050 1450 +$Comp +L power:GND #PWR09 +U 1 1 5CC820A9 +P 4950 2400 +F 0 "#PWR09" H 4950 2150 50 0001 C CNN +F 1 "GND" H 4955 2227 50 0000 C CNN +F 2 "" H 4950 2400 50 0001 C CNN +F 3 "" H 4950 2400 50 0001 C CNN + 1 4950 2400 + -1 0 0 1 +$EndComp +Wire Wire Line + 4550 2600 4950 2600 +Connection ~ 4950 2600 +$Comp +L power:GND #PWR011 +U 1 1 5CC86EF0 +P 5050 1450 +F 0 "#PWR011" H 5050 1200 50 0001 C CNN +F 1 "GND" H 5055 1277 50 0000 C CNN +F 2 "" H 5050 1450 50 0001 C CNN +F 3 "" H 5050 1450 50 0001 C CNN + 1 5050 1450 + 1 0 0 -1 +$EndComp +$Comp +L power:VDD #PWR010 +U 1 1 5CC86FC9 +P 5050 850 +F 0 "#PWR010" H 5050 700 50 0001 C CNN +F 1 "VDD" H 5067 1023 50 0000 C CNN +F 2 "" H 5050 850 50 0001 C CNN +F 3 "" H 5050 850 50 0001 C CNN + 1 5050 850 + 1 0 0 -1 +$EndComp +Text GLabel 5050 1100 2 50 Input ~ 0 +MCU_VDDA +Wire Wire Line + 9150 1650 8850 1650 +$Comp +L Device:C_Small C9 +U 1 1 5CC8A464 +P 8500 4450 +F 0 "C9" H 8408 4404 50 0000 R CNN +F 1 "1uF" H 8408 4495 50 0000 R CNN +F 2 "Capacitor_SMD:C_0805_2012Metric_Pad1.15x1.40mm_HandSolder" H 8500 4450 50 0001 C CNN +F 3 "~" H 8500 4450 50 0001 C CNN + 1 8500 4450 + -1 0 0 1 +$EndComp +$Comp +L Device:C_Small C8 +U 1 1 5CC8A56E +P 8400 3950 +F 0 "C8" H 8492 3996 50 0000 L CNN +F 1 "100nF" H 8492 3905 50 0000 L CNN +F 2 "Capacitor_SMD:C_0805_2012Metric_Pad1.15x1.40mm_HandSolder" H 8400 3950 50 0001 C CNN +F 3 "~" H 8400 3950 50 0001 C CNN + 1 8400 3950 + 1 0 0 -1 +$EndComp +$Comp +L power:VDD #PWR013 +U 1 1 5CC992AC +P 7750 4850 +F 0 "#PWR013" H 7750 4700 50 0001 C CNN +F 1 "VDD" H 7768 5023 50 0000 C CNN +F 2 "" H 7750 4850 50 0001 C CNN +F 3 "" H 7750 4850 50 0001 C CNN + 1 7750 4850 + -1 0 0 1 +$EndComp +$Comp +L power:GND #PWR015 +U 1 1 5CC9DA3C +P 8400 4050 +F 0 "#PWR015" H 8400 3800 50 0001 C CNN +F 1 "GND" H 8405 3877 50 0000 C CNN +F 2 "" H 8400 4050 50 0001 C CNN +F 3 "" H 8400 4050 50 0001 C CNN + 1 8400 4050 + 1 0 0 -1 +$EndComp +Wire Wire Line + 8350 3800 8400 3800 +Wire Wire Line + 8900 3800 8900 4150 +Wire Wire Line + 8400 3850 8400 3800 +Connection ~ 8400 3800 +Wire Wire Line + 8400 3800 8900 3800 +Wire Wire Line + 8950 4350 8500 4350 +Connection ~ 8950 4350 +$Comp +L power:GND #PWR016 +U 1 1 5CCA5789 +P 8500 4550 +F 0 "#PWR016" H 8500 4300 50 0001 C CNN +F 1 "GND" H 8505 4377 50 0000 C CNN +F 2 "" H 8500 4550 50 0001 C CNN +F 3 "" H 8500 4550 50 0001 C CNN + 1 8500 4550 + 1 0 0 -1 +$EndComp +$Comp +L Connector:TestPoint TP0 +U 1 1 5CCA9B83 +P 2000 4250 +F 0 "TP0" V 1954 4438 50 0000 L CNN +F 1 "TestPoint" V 2045 4438 50 0000 L CNN +F 2 "TestPoint:TestPoint_Pad_D1.0mm" H 2200 4250 50 0001 C CNN +F 3 "~" H 2200 4250 50 0001 C CNN + 1 2000 4250 + 0 1 1 0 +$EndComp +$Comp +L Connector:TestPoint TP1 +U 1 1 5CCA9C4C +P 2000 4450 +F 0 "TP1" V 1954 4638 50 0000 L CNN +F 1 "TestPoint" V 2045 4638 50 0000 L CNN +F 2 "TestPoint:TestPoint_Pad_D1.0mm" H 2200 4450 50 0001 C CNN +F 3 "~" H 2200 4450 50 0001 C CNN + 1 2000 4450 + 0 1 1 0 +$EndComp +Text GLabel 2000 4250 0 50 Input ~ 0 +SCK +Text GLabel 2000 4450 0 50 Input ~ 0 +MOSI +$Comp +L Connector:TestPoint TP2 +U 1 1 5CCADC31 +P 2000 4650 +F 0 "TP2" V 1954 4838 50 0000 L CNN +F 1 "TestPoint" V 2045 4838 50 0000 L CNN +F 2 "TestPoint:TestPoint_Pad_D1.0mm" H 2200 4650 50 0001 C CNN +F 3 "~" H 2200 4650 50 0001 C CNN + 1 2000 4650 + 0 1 1 0 +$EndComp +Text GLabel 2000 4650 0 50 Input ~ 0 +SS +Wire Wire Line + 7750 4250 7750 4850 +Text Label 5250 2800 3 50 ~ 0 +BOOT0 +Wire Wire Line + 5050 850 5050 1150 +$Comp +L power:GND #PWR06 +U 1 1 5CD002C4 +P 4250 1450 +F 0 "#PWR06" H 4250 1200 50 0001 C CNN +F 1 "GND" H 4255 1277 50 0000 C CNN +F 2 "" H 4250 1450 50 0001 C CNN +F 3 "" H 4250 1450 50 0001 C CNN + 1 4250 1450 + 1 0 0 -1 +$EndComp +Wire Wire Line + 9200 4650 9250 4650 +Wire Wire Line + 9200 4650 9200 4550 +Connection ~ 9200 4550 +Wire Wire Line + 9200 4550 9550 4550 +Wire Wire Line + 7750 4250 8050 4250 +$Comp +L Device:C_Small C7 +U 1 1 5CD10A30 +P 8050 4450 +F 0 "C7" H 8142 4496 50 0000 L CNN +F 1 "1uF" H 8142 4405 50 0000 L CNN +F 2 "Capacitor_SMD:C_0805_2012Metric_Pad1.15x1.40mm_HandSolder" H 8050 4450 50 0001 C CNN +F 3 "~" H 8050 4450 50 0001 C CNN + 1 8050 4450 + 1 0 0 -1 +$EndComp +Wire Wire Line + 8050 4250 8050 4350 +Connection ~ 8050 4250 +Wire Wire Line + 8050 4250 9550 4250 +Wire Wire Line + 8050 4550 8050 4850 +Wire Wire Line + 8050 4850 9150 4850 +Wire Wire Line + 9150 4850 9150 4750 +Wire Wire Line + 9150 4750 9250 4750 +Wire Wire Line + 9250 4750 9250 4650 +Connection ~ 9250 4650 +Wire Wire Line + 9250 4650 9550 4650 +$Comp +L power:GND #PWR0101 +U 1 1 5D64CB1D +P 6300 2900 +F 0 "#PWR0101" H 6300 2650 50 0001 C CNN +F 1 "GND" V 6305 2772 50 0000 R CNN +F 2 "" H 6300 2900 50 0001 C CNN +F 3 "" H 6300 2900 50 0001 C CNN + 1 6300 2900 + 0 -1 -1 0 +$EndComp +$Comp +L power:GND #PWR0102 +U 1 1 5D64CBC9 +P 6300 3200 +F 0 "#PWR0102" H 6300 2950 50 0001 C CNN +F 1 "GND" V 6305 3072 50 0000 R CNN +F 2 "" H 6300 3200 50 0001 C CNN +F 3 "" H 6300 3200 50 0001 C CNN + 1 6300 3200 + 0 -1 -1 0 +$EndComp +Text Label 4900 3300 0 50 ~ 0 +XOSC0 +Text Label 4900 3600 0 50 ~ 0 +XOSC1 +$Comp +L power:GND #PWR0103 +U 1 1 5D64F1D1 +P 6300 3400 +F 0 "#PWR0103" H 6300 3150 50 0001 C CNN +F 1 "GND" V 6305 3272 50 0000 R CNN +F 2 "" H 6300 3400 50 0001 C CNN +F 3 "" H 6300 3400 50 0001 C CNN + 1 6300 3400 + 0 -1 -1 0 +$EndComp +$Comp +L power:GND #PWR0104 +U 1 1 5D64F271 +P 6300 3500 +F 0 "#PWR0104" H 6300 3250 50 0001 C CNN +F 1 "GND" V 6305 3372 50 0000 R CNN +F 2 "" H 6300 3500 50 0001 C CNN +F 3 "" H 6300 3500 50 0001 C CNN + 1 6300 3500 + 0 -1 -1 0 +$EndComp +$EndSCHEMATC diff --git a/firmware/Application/ButtonManager.cpp b/firmware/Application/ButtonManager.cpp index 8b26a20..7636d81 100644 --- a/firmware/Application/ButtonManager.cpp +++ b/firmware/Application/ButtonManager.cpp @@ -27,8 +27,8 @@ namespace BSP { -using Common::ReturnCode; -using Common::Schedule::NextTime; +using BSP::ReturnCode; +using BSP::Schedule::NextTime; ButtonManager *ButtonManager::m_instance = nullptr; @@ -67,8 +67,8 @@ ReturnCode ButtonManager::init() NextTime ButtonManager::execute() { - Common::time_t systime; - Common::time_t endtime = 0; + BSP::time_t systime; + BSP::time_t endtime = 0; BSP::SystemTimer::get_time(systime); @@ -121,7 +121,7 @@ void ButtonManager::remove_callback(Button btn) void ButtonManager::irq() { uint32_t idr = GPIOA->IDR; - static Common::time_t systime; + static BSP::time_t systime; // TODO: is this call too expensive for an interrupt handler? BSP::SystemTimer::get_time(systime); diff --git a/firmware/Application/ButtonManager.h b/firmware/Application/ButtonManager.h index 5bcbf3b..ae5c4e9 100644 --- a/firmware/Application/ButtonManager.h +++ b/firmware/Application/ButtonManager.h @@ -29,13 +29,13 @@ namespace BSP { -class ButtonManager : public Common::Schedule::Task { +class ButtonManager : public BSP::Schedule::Task { public: - ButtonManager(Common::Schedule::TaskScheduler &scheduler, + ButtonManager(BSP::Schedule::TaskScheduler &scheduler, uint8_t up_gpio_idx, uint8_t mid_gpio_idx, uint8_t down_gpio_idx, - Common::time_t debounce_time) + BSP::time_t debounce_time) : m_scheduler(scheduler) , m_buttons { @@ -66,9 +66,9 @@ public: using ChangeCallback = std::function; - Common::Schedule::NextTime execute() override; + BSP::Schedule::NextTime execute() override; - Common::ReturnCode init(); + BSP::ReturnCode init(); void set_callback(Button btn, ChangeCallback callback); void remove_callback(Button btn); @@ -79,7 +79,7 @@ private: struct button_state { button_state(uint8_t gpio_index, - Common::time_t debounce_time, + BSP::time_t debounce_time, ChangeCallback callback) : m_gpio_idx(gpio_index) , m_debounce_time(debounce_time) @@ -88,15 +88,15 @@ private: , m_callback(callback) {} uint8_t const m_gpio_idx; - Common::time_t const m_debounce_time; + BSP::time_t const m_debounce_time; ButtonState m_prev_call_state; /* m_screen_stack; std::size_t m_screen_stack_depth; diff --git a/firmware/Application/Screens/AnalogTimeScreen.cpp b/firmware/Application/Screens/AnalogTimeScreen.cpp new file mode 100644 index 0000000..8dd293a --- /dev/null +++ b/firmware/Application/Screens/AnalogTimeScreen.cpp @@ -0,0 +1,191 @@ +/* + * Copyright (C) 2019 Max Regan + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#include +#include + +#include "Application/Screens/AnalogTimeScreen.h" +#include "Application/SystemFonts.h" +#include "Bsp/Drivers/RtcDriver.h" +#include "Bsp/SystemTime.h" +#include "Bsp/Drivers/LowPower.h" + +using BSP::ReturnCode; +using BSP::Time; +using BSP::Schedule::NextTime; +using Color = BSP::DisplayDriver::Color; + +// TODO: remove all calls to std::cos and std::sin? + +AnalogTimeScreen::AnalogTimeScreen(BSP::DisplayDriver &driver, + ScreenManager &manager, + Screen &menu_screen) + : m_driver(driver) + , m_last_time() + , m_manager(manager) + , m_menu_screen(menu_screen) + , m_display_seconds(true) +{} + +ReturnCode AnalogTimeScreen::init() +{ + return ReturnCode::OK; +} + +void AnalogTimeScreen::draw_ticks() { + + // After profiling, using lookup tables is 6-10% faster than using std::sin & std::cos. + static constexpr float sin_tbl[8] = { + 0.0, + 0.10452539173303049, + 0.20790564888802265, + 0.30900818248165035, + 0.4067253572759511, + 0.4999866265466325, + 0.5877702605258084, + 0.6691145400274635, + }; + + static constexpr float cos_tbl[8] = { + 1.0, + 0.9945222181947755, + 0.9781488849661131, + 0.9510593794077146, + 0.9135504823209005, + 0.8660331248136633, + 0.8090278863187741, + 0.7431592913526923, + }; + + const uint32_t y_center = m_driver.get_height() / 2; + const uint32_t x_center = m_driver.get_width() / 2; + const uint32_t radius = std::min(m_driver.get_width(), m_driver.get_height()) / 2; + + // This only works for square screens, but saves a a bunch of float math and calls to trig functions + + for (int i = 0; i < 8; i++) { + const uint32_t len = (i % 5 == 0) ? 10 : 5; + const uint32_t width = (i % 5 == 0) ? 3 : 1; + const uint32_t end1_offset = sin_tbl[i] * radius; + const uint32_t end2_offset = cos_tbl[i] * radius; + const uint32_t start1_offset = sin_tbl[i] * (radius - len); + const uint32_t start2_offset = cos_tbl[i] * (radius - len); + + m_driver.draw_line(x_center + start1_offset, y_center + start2_offset, + x_center + end1_offset, y_center + end2_offset, + Color::BLACK, width); + m_driver.draw_line(x_center - start1_offset, y_center + start2_offset, + x_center - end1_offset, y_center + end2_offset, + Color::BLACK, width); + m_driver.draw_line(x_center + start1_offset, y_center - start2_offset, + x_center + end1_offset, y_center - end2_offset, + Color::BLACK, width); + m_driver.draw_line(x_center - start1_offset, y_center - start2_offset, + x_center - end1_offset, y_center - end2_offset, + Color::BLACK, width); + + m_driver.draw_line(x_center + start2_offset, y_center + start1_offset, + x_center + end2_offset, y_center + end1_offset, + Color::BLACK, width); + m_driver.draw_line(x_center - start2_offset, y_center + start1_offset, + x_center - end2_offset, y_center + end1_offset, + Color::BLACK, width); + m_driver.draw_line(x_center + start2_offset, y_center - start1_offset, + x_center + end2_offset, y_center - end1_offset, + Color::BLACK, width); + m_driver.draw_line(x_center - start2_offset, y_center - start1_offset, + x_center - end2_offset, y_center - end1_offset, + Color::BLACK, width); + } +} + +void AnalogTimeScreen::draw_hand(uint32_t ticks, uint32_t len, int32_t width, Color color) { + + const uint32_t y_center = m_driver.get_height() / 2; + const uint32_t x_center = m_driver.get_width() / 2; + + uint32_t x_end = x_center + std::sin(ticks * TURNS_PER_TICK) * len; + uint32_t y_end = y_center - std::cos(ticks * TURNS_PER_TICK) * len; + + m_driver.draw_line(x_center, y_center, x_end, y_end, color, width); +} + +void AnalogTimeScreen::display_time() +{ + BSP::WallClockTime time; + BSP::RtcDriver::get_time(time); + + m_driver.clear(Color::WHITE); + + draw_ticks(); + + const uint32_t seconds_len = std::min(m_driver.get_width(), m_driver.get_height()) * 9 / 20; + const uint32_t minutes_len = std::min(m_driver.get_width(), m_driver.get_height()) * 17 / 40; + const uint32_t hours_len = std::min(m_driver.get_width(), m_driver.get_height()) * 6 / 20; + + draw_hand(time.get_hours_12() * 5, hours_len, 3, Color::BLACK); + draw_hand(time.get_minutes(), minutes_len, 3, Color::BLACK); + + if (m_display_seconds) { + draw_hand(time.get_seconds(), seconds_len, 2, Color::RED); + } + + m_last_time = time; + m_driver.refresh(); +} + +NextTime AnalogTimeScreen::execute() +{ + display_time(); + + BSP::time_t now; + BSP::SystemTimer::get_time(now); + if (m_display_seconds) { + return NextTime::in(Time::seconds(1)); + } else { + + BSP::WallClockTime wall_time; + BSP::RtcDriver::get_time(wall_time); + return NextTime::in(Time::seconds(61 - wall_time.get_seconds())); + } +} + + +void AnalogTimeScreen::enable() { + m_last_time = {}; + display_time(); +} + +void AnalogTimeScreen::disable() { +} + +void AnalogTimeScreen::notify_up_button() { + /* TODO: This should open a menu first */ + m_manager.push_screen(m_menu_screen); +} + +void AnalogTimeScreen::notify_middle_button() { + +} + +void AnalogTimeScreen::notify_down_button() { + +} diff --git a/firmware/Application/Screens/AnalogTimeScreen.h b/firmware/Application/Screens/AnalogTimeScreen.h new file mode 100644 index 0000000..818bb54 --- /dev/null +++ b/firmware/Application/Screens/AnalogTimeScreen.h @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2019 Max Regan + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#pragma once + +#include "Bsp/macros.h" + +#include "Application/ScreenManager.h" +#include "Application/Screens/Screen.h" + +class AnalogTimeScreen : public Screen { +public: + + AnalogTimeScreen(BSP::DisplayDriver &display, + ScreenManager &m_manager, + Screen &m_menu_screen); + + BSP::ReturnCode init(); + BSP::Schedule::NextTime execute() override; + + void enable() override; + void disable() override; + + void notify_up_button() override; + void notify_middle_button() override; + void notify_down_button() override; + +private: + + static constexpr float TURNS_PER_TICK = 2 * 3.1415 / 60; + + void draw_hand(uint32_t ticks, uint32_t len, int32_t width, BSP::DisplayDriver::Color color); + void draw_ticks(); + void display_time(); + + BSP::DisplayDriver &m_driver; + BSP::WallClockTime m_last_time; + + ScreenManager &m_manager; + Screen &m_menu_screen; + + const bool m_display_seconds; +}; diff --git a/firmware/Application/Screens/DisplayTimeScreen.cpp b/firmware/Application/Screens/BigDigitalTimeScreen.cpp similarity index 76% rename from firmware/Application/Screens/DisplayTimeScreen.cpp rename to firmware/Application/Screens/BigDigitalTimeScreen.cpp index 6e9c41f..335c2ea 100644 --- a/firmware/Application/Screens/DisplayTimeScreen.cpp +++ b/firmware/Application/Screens/BigDigitalTimeScreen.cpp @@ -19,18 +19,18 @@ * THE SOFTWARE. */ -#include "Application/Screens/DisplayTimeScreen.h" +#include "Application/Screens/BigDigitalTimeScreen.h" #include "Application/SystemFonts.h" #include "Bsp/Drivers/RtcDriver.h" #include "Bsp/SystemTime.h" #include "Bsp/Drivers/LowPower.h" -using Common::ReturnCode; -using Common::Time; -using Common::Schedule::NextTime; +using BSP::ReturnCode; +using BSP::Time; +using BSP::Schedule::NextTime; using Color = BSP::DisplayDriver::Color; -DisplayTimeScreen::DisplayTimeScreen(BSP::DisplayDriver &driver, +BigDigitalTimeScreen::BigDigitalTimeScreen(BSP::DisplayDriver &driver, ScreenManager &manager, Screen &menu_screen) : m_driver(driver) @@ -48,14 +48,12 @@ static char get_char_for_digit(uint8_t bcd_digit) return bcd_digit + '0'; } -ReturnCode DisplayTimeScreen::init() +ReturnCode BigDigitalTimeScreen::init() { - SET(RCC->CFGR, RCC_CFGR_SW_HSI); - return ReturnCode::OK; } -void DisplayTimeScreen::display_number(uint32_t *x, uint32_t y, uint32_t tens, uint32_t ones, const struct font &f) +void BigDigitalTimeScreen::display_number(uint32_t *x, uint32_t y, uint32_t tens, uint32_t ones, const struct font &f) { char time_str[3] = { 0 }; @@ -63,12 +61,12 @@ void DisplayTimeScreen::display_number(uint32_t *x, uint32_t y, uint32_t tens, u time_str[1] = get_char_for_digit(ones); time_str[2] = '\0'; - m_driver.string_at(x, y, time_str, &f, Color::WHITE); + m_driver.string_at(x, y, time_str, &f, Color::BLACK); } -void DisplayTimeScreen::display_time() +void BigDigitalTimeScreen::display_time() { - Common::WallClockTime time; + BSP::WallClockTime time; BSP::RtcDriver::get_time(time); const struct font &font = font_large_digits; const uint32_t y_space = (m_driver.get_height() - (2 * font.height)) / 3; @@ -76,7 +74,7 @@ void DisplayTimeScreen::display_time() uint32_t x = 0; - m_driver.clear(Color::BLACK); + m_driver.clear(Color::WHITE); x = x_space; display_number(&x, y_space, @@ -90,40 +88,40 @@ void DisplayTimeScreen::display_time() m_driver.refresh(); } -NextTime DisplayTimeScreen::execute() +NextTime BigDigitalTimeScreen::execute() { display_time(); - Common::time_t now; + BSP::time_t now; BSP::SystemTimer::get_time(now); if (m_display_seconds) { return NextTime::in(Time::seconds(1)); } else { - Common::WallClockTime wall_time; + BSP::WallClockTime wall_time; BSP::RtcDriver::get_time(wall_time); return NextTime::in(Time::seconds(61 - wall_time.get_seconds())); } } -void DisplayTimeScreen::enable() { +void BigDigitalTimeScreen::enable() { m_last_time = {}; display_time(); } -void DisplayTimeScreen::disable() { +void BigDigitalTimeScreen::disable() { } -void DisplayTimeScreen::notify_up_button() { +void BigDigitalTimeScreen::notify_up_button() { /* TODO: This should open a menu first */ m_manager.push_screen(m_menu_screen); } -void DisplayTimeScreen::notify_middle_button() { +void BigDigitalTimeScreen::notify_middle_button() { } -void DisplayTimeScreen::notify_down_button() { +void BigDigitalTimeScreen::notify_down_button() { } diff --git a/firmware/Application/Screens/DisplayTimeScreen.h b/firmware/Application/Screens/BigDigitalTimeScreen.h similarity index 80% rename from firmware/Application/Screens/DisplayTimeScreen.h rename to firmware/Application/Screens/BigDigitalTimeScreen.h index a47e485..92b43da 100644 --- a/firmware/Application/Screens/DisplayTimeScreen.h +++ b/firmware/Application/Screens/BigDigitalTimeScreen.h @@ -12,7 +12,7 @@ * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN @@ -26,15 +26,15 @@ #include "Application/ScreenManager.h" #include "Application/Screens/Screen.h" -class DisplayTimeScreen : public Screen { +class BigDigitalTimeScreen : public Screen { public: - DisplayTimeScreen(BSP::DisplayDriver &display, - ScreenManager &m_manager, - Screen &m_menu_screen); + BigDigitalTimeScreen(BSP::DisplayDriver &display, + ScreenManager &m_manager, + Screen &m_menu_screen); - Common::ReturnCode init(); - Common::Schedule::NextTime execute() override; + BSP::ReturnCode init(); + BSP::Schedule::NextTime execute() override; void enable() override; void disable() override; @@ -49,7 +49,7 @@ private: void display_number(uint32_t *x, uint32_t y, uint32_t tens, uint32_t ones, const font &f); BSP::DisplayDriver &m_driver; - Common::WallClockTime m_last_time; + BSP::WallClockTime m_last_time; ScreenManager &m_manager; Screen &m_menu_screen; diff --git a/firmware/Application/Screens/DebugScreen.h b/firmware/Application/Screens/DebugScreen.h index 052cde6..498b6b3 100644 --- a/firmware/Application/Screens/DebugScreen.h +++ b/firmware/Application/Screens/DebugScreen.h @@ -39,8 +39,8 @@ public: , m_manager(manager) {} - Common::ReturnCode init() { - return Common::ReturnCode::OK; + BSP::ReturnCode init() { + return BSP::ReturnCode::OK; } void render() { @@ -58,9 +58,9 @@ public: m_driver.refresh(); } - Common::Schedule::NextTime execute() override { + BSP::Schedule::NextTime execute() override { render(); - return Common::Schedule::NextTime::never(); + return BSP::Schedule::NextTime::never(); } void enable() override { diff --git a/firmware/Application/Screens/MenuScreen.h b/firmware/Application/Screens/MenuScreen.h index 0e76ddf..9b1e3f5 100644 --- a/firmware/Application/Screens/MenuScreen.h +++ b/firmware/Application/Screens/MenuScreen.h @@ -124,12 +124,12 @@ public: m_driver.refresh(); } - Common::ReturnCode init() { - return Common::ReturnCode::OK; + BSP::ReturnCode init() { + return BSP::ReturnCode::OK; } - Common::Schedule::NextTime execute() override { - return Common::Schedule::NextTime::never(); + BSP::Schedule::NextTime execute() override { + return BSP::Schedule::NextTime::never(); } void enable() override { diff --git a/firmware/Application/Screens/Screen.h b/firmware/Application/Screens/Screen.h index 4b60c48..c87280a 100644 --- a/firmware/Application/Screens/Screen.h +++ b/firmware/Application/Screens/Screen.h @@ -24,7 +24,7 @@ #include "Bsp/ReturnCode.h" #include "Bsp/Task.h" -class Screen : public Common::Schedule::Task { +class Screen : public BSP::Schedule::Task { public: virtual void enable() = 0; diff --git a/firmware/Application/Screens/SetDateScreen.cpp b/firmware/Application/Screens/SetDateScreen.cpp index dcf4f70..797963c 100644 --- a/firmware/Application/Screens/SetDateScreen.cpp +++ b/firmware/Application/Screens/SetDateScreen.cpp @@ -26,9 +26,9 @@ #include "Bsp/SystemTime.h" #include "Bsp/Drivers/RtcDriver.h" -using Common::ReturnCode; -using Common::Time; -using Common::Schedule::NextTime; +using BSP::ReturnCode; +using BSP::Time; +using BSP::Schedule::NextTime; SetDateScreen::SetDateScreen(BSP::DisplayDriver &display, ScreenManager &manager) diff --git a/firmware/Application/Screens/SetDateScreen.h b/firmware/Application/Screens/SetDateScreen.h index eeb950a..b06f62d 100644 --- a/firmware/Application/Screens/SetDateScreen.h +++ b/firmware/Application/Screens/SetDateScreen.h @@ -36,8 +36,8 @@ public: SetDateScreen(BSP::DisplayDriver &display, ScreenManager &m_manager); - Common::ReturnCode init(); - Common::Schedule::NextTime execute() override; + BSP::ReturnCode init(); + BSP::Schedule::NextTime execute() override; void enable() override; void disable() override; @@ -70,7 +70,7 @@ private: SetState m_state; bool m_is_acked = false; - Common::WallClockTime m_time; + BSP::WallClockTime m_time; const struct font &m_font; const uint32_t m_row_spacing; const uint32_t m_row_0_y; diff --git a/firmware/Application/Screens/SetTimeScreen.cpp b/firmware/Application/Screens/SetTimeScreen.cpp index 9a62ec4..fb1bb27 100644 --- a/firmware/Application/Screens/SetTimeScreen.cpp +++ b/firmware/Application/Screens/SetTimeScreen.cpp @@ -26,9 +26,9 @@ #include "Bsp/SystemTime.h" #include "Bsp/Drivers/RtcDriver.h" -using Common::ReturnCode; -using Common::Time; -using Common::Schedule::NextTime; +using BSP::ReturnCode; +using BSP::Time; +using BSP::Schedule::NextTime; SetTimeScreen::SetTimeScreen(BSP::DisplayDriver &display, ScreenManager &manager) diff --git a/firmware/Application/Screens/SetTimeScreen.h b/firmware/Application/Screens/SetTimeScreen.h index 7ad3f04..8375c06 100644 --- a/firmware/Application/Screens/SetTimeScreen.h +++ b/firmware/Application/Screens/SetTimeScreen.h @@ -36,8 +36,8 @@ public: SetTimeScreen(BSP::DisplayDriver &display, ScreenManager &m_manager); - Common::ReturnCode init(); - Common::Schedule::NextTime execute() override; + BSP::ReturnCode init(); + BSP::Schedule::NextTime execute() override; void enable() override; void disable() override; @@ -70,7 +70,7 @@ private: SetState m_state; bool m_is_acked = false; - Common::WallClockTime m_time; + BSP::WallClockTime m_time; const struct font &m_font; const uint32_t m_row_spacing; const uint32_t m_row_0_y; diff --git a/firmware/Application/main.cpp b/firmware/Application/main.cpp index 2289950..5c0334f 100644 --- a/firmware/Application/main.cpp +++ b/firmware/Application/main.cpp @@ -28,7 +28,8 @@ #include "Application/ButtonManager.h" #include "Application/ScreenManager.h" -#include "Application/Screens/DisplayTimeScreen.h" +#include "Application/Screens/AnalogTimeScreen.h" +#include "Application/Screens/BigDigitalTimeScreen.h" #include "Application/Screens/DebugScreen.h" #include "Application/Screens/MenuScreen.h" #include "Application/Screens/SetTimeScreen.h" @@ -39,13 +40,13 @@ // TODO: Don't include this here. #include "stm32l0xx.h" -using Common::Time; +using BSP::Time; -static Common::Schedule::LowPowerTaskScheduler<5> g_sched; +static BSP::Schedule::LowPowerTaskScheduler<5> g_sched; static BSP::SpiDriver g_spi(g_sched); static BSP::DisplayDriver g_display(g_sched, g_spi); static BSP::LptimPwm g_lptim_pwm(LPTIM1); -static BSP::ButtonManager g_btn_manager(g_sched, 2, 1, 0, Time::millis(1)); +static BSP::ButtonManager g_btn_manager(g_sched, 0, 1, 2, Time::millis(1)); static ScreenManager g_screen_manager(g_sched, g_display, g_btn_manager); static SetTimeScreen g_set_time_screen(g_display, g_screen_manager); @@ -72,7 +73,7 @@ static MenuScreen g_main_menu_screen(g_display, std::initializer_list({MenuScreenItem("Apps", g_settings_menu_screen), MenuScreenItem("Settings", g_settings_menu_screen)})); -static DisplayTimeScreen g_display_time_screen(g_display, g_screen_manager, g_main_menu_screen); +static AnalogTimeScreen g_display_time_screen(g_display, g_screen_manager, g_main_menu_screen); extern "C" void __cxa_pure_virtual() { while(1) {} } @@ -121,7 +122,45 @@ void SystemInit() /*!< Reset HSEBYP bit (disable HSE bypass) */ CLR(RCC->CR, - RCC_CR_HSEBYP); + RCC_CR_HSEBYP) + ; + + /* (1) Test if PLL is used as System clock */ + /* (2) Select HSI as system clock */ + /* (3) Wait for HSI switched */ + /* (4) Disable the PLL */ + /* (5) Wait until PLLRDY is cleared */ + /* (6) Set latency to 1 wait state */ + /* (7) Set the PLL multiplier to 24 and divider by 3 */ + /* (8) Enable the PLL */ + /* (9) Wait until PLLRDY is set */ + /* (10) Select PLL as system clock */ + /* (11) Wait until the PLL is switched on */ + + // SET(RCC->CR, RCC_CR_HSION); + // while((RCC->CR & RCC_CR_HSIRDY) != 0) {} + + // if ((RCC->CFGR & RCC_CFGR_SWS) == RCC_CFGR_SWS_PLL) /* (1) */ + // { + // RCC->CFGR = (RCC->CFGR & (uint32_t) (~RCC_CFGR_SW)) | RCC_CFGR_SW_HSI; /* (2) */ + // while ((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS_HSI) /* (3) */ + // { /* For robust implementation, add here time-out management */ } + // } + + // RCC->CR &= (uint32_t)(~RCC_CR_PLLON);/* (4) */ + // while((RCC->CR & RCC_CR_PLLRDY) != 0) /* (5) */ + // { /* For robust implementation, add here time-out management */ } + + // FLASH->ACR |= FLASH_ACR_LATENCY; /* (6) */ + // RCC->CFGR = RCC->CFGR & ((~(RCC_CFGR_PLLMUL| RCC_CFGR_PLLDIV )) | (RCC_CFGR_PLLMUL24 | RCC_CFGR_PLLDIV2)); /* (7) */ + // RCC->CR |= RCC_CR_PLLON; /* (8) */ + + // while ((RCC->CR & RCC_CR_PLLRDY) == 0) /* (9) */ + // { /* For robust implementation, add here time-out management */ } + // RCC->CFGR |= (uint32_t) (RCC_CFGR_SW_PLL); /* (10) */ + + // while ((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS_PLL) /* (11) */ + // { /* For robust implementation, add here time-out management */ } /*!< Reset * PLLSRC (HSI16 is the PLL source), @@ -129,7 +168,7 @@ void SystemInit() * Don't touch PLLDIV[1:0], since 0 is undefined */ CLR(RCC->CFGR, - RCC_CFGR_PLLSRC | RCC_CFGR_PLLMUL | RCC_CFGR_PLLDIV); + RCC_CFGR_PLLSRC | RCC_CFGR_PLLMUL | RCC_CFGR_PLLDIV); /*!< Disable all interrupts */ RCC->CIER = 0x00000000; @@ -170,7 +209,7 @@ static void _init(void) g_screen_manager.set_root_screen(g_display_time_screen); // Enqueue each of the tasks - Common::Schedule::NextTime asap = Common::Schedule::NextTime::asap(); + BSP::Schedule::NextTime asap = BSP::Schedule::NextTime::asap(); g_sched.add_task(g_spi, asap); g_sched.add_task(g_btn_manager, asap); g_sched.add_task(g_display, asap); diff --git a/firmware/Bsp/Drivers/DisplayDriver.cpp b/firmware/Bsp/Drivers/DisplayDriver.cpp index 491a7c1..a27f3ac 100644 --- a/firmware/Bsp/Drivers/DisplayDriver.cpp +++ b/firmware/Bsp/Drivers/DisplayDriver.cpp @@ -20,6 +20,7 @@ */ #include +#include #include "Bsp/Drivers/DisplayDriver.h" #include "Bsp/macros.h" @@ -27,10 +28,10 @@ namespace BSP { -using Common::Schedule::NextTime; -using Common::ReturnCode; +using BSP::Schedule::NextTime; +using BSP::ReturnCode; -DisplayDriver::DisplayDriver(Common::Schedule::TaskScheduler &scheduler, SpiDriver &spi) +DisplayDriver::DisplayDriver(BSP::Schedule::TaskScheduler &scheduler, SpiDriver &spi) : m_scheduler(scheduler) , m_spi(spi) , m_is_dirty(true) @@ -42,7 +43,7 @@ DisplayDriver::DisplayDriver(Common::Schedule::TaskScheduler &scheduler, SpiDriv ReturnCode DisplayDriver::init() { - return Common::ReturnCode::OK; + return BSP::ReturnCode::OK; } NextTime DisplayDriver::execute() @@ -98,6 +99,45 @@ void DisplayDriver::set_dirty(unsigned int y) } } + +void DisplayDriver::draw_line(uint32_t x0, uint32_t y0, uint32_t x1, uint32_t y1, Color color, int32_t width) +{ + const int32_t dx = abs(x1 - x0); + const int32_t sx = (x0 < x1) ? 1 : -1; + const int32_t dy = -abs(y1 - y0); + const int32_t sy = (y0 < y1) ? 1 : -1; + int32_t err = dx + dy; + + uint32_t x = x0; + uint32_t y = y0; + + while (true) { + for (int32_t i = -width / 2; i < (-width / 2) + width; i++) { + uint32_t xp, yp; + if (dx > -dy) { + xp = x; + yp = y + i; + } else { + xp = x + i; + yp = y; + } + set_pixel(xp, yp, color); + } + if (x == x1 && y == y1) + break; + + const int32_t e2 = 2 * err; + if (e2 >= dy) { + err += dy; + x += sx; + } + if (e2 <= dx) { + err += dx; + y += sy; + } + } +} + // TODO: write my own implementation #define R2(n) n, n + 2*64, n + 1*64, n + 3*64 #define R4(n) R2(n), R2(n + 2*16), R2(n + 1*16), R2(n + 3*16) diff --git a/firmware/Bsp/Drivers/DisplayDriver.h b/firmware/Bsp/Drivers/DisplayDriver.h index 0af37b8..24c000c 100644 --- a/firmware/Bsp/Drivers/DisplayDriver.h +++ b/firmware/Bsp/Drivers/DisplayDriver.h @@ -27,15 +27,15 @@ namespace BSP { -class DisplayDriver final : public Common::Schedule::Task { +class DisplayDriver final : public BSP::Schedule::Task { public: - DisplayDriver(Common::Schedule::TaskScheduler &scheduler, SpiDriver &spi); + DisplayDriver(BSP::Schedule::TaskScheduler &scheduler, SpiDriver &spi); /** - * Common::Schedule::Task + * BSP::Schedule::Task */ - Common::ReturnCode init(); - Common::Schedule::NextTime execute() override; + BSP::ReturnCode init(); + BSP::Schedule::NextTime execute() override; static constexpr uint32_t BITS_PER_PIXEL = 3; @@ -62,6 +62,7 @@ public: const char *string, const struct font *font, Color color=DEFAULT_COLOR); void draw_hline(uint32_t x, uint32_t y, uint32_t width, Color color=DEFAULT_COLOR); + void draw_line(uint32_t x0, uint32_t y0, uint32_t x1, uint32_t y1, Color color=DEFAULT_COLOR, int32_t width=1); void refresh(); void clear(Color color=Color::WHITE); @@ -98,7 +99,7 @@ private: }; - Common::Schedule::TaskScheduler &m_scheduler; + BSP::Schedule::TaskScheduler &m_scheduler; SpiDriver &m_spi; struct display_buffer m_buffer; diff --git a/firmware/Bsp/Drivers/LowPower.cpp b/firmware/Bsp/Drivers/LowPower.cpp index 2797bd4..37bdfdf 100644 --- a/firmware/Bsp/Drivers/LowPower.cpp +++ b/firmware/Bsp/Drivers/LowPower.cpp @@ -29,7 +29,7 @@ uint32_t wakeups = 0; namespace BSP { -using Common::ReturnCode; +using BSP::ReturnCode; ReturnCode LowPower::init() { @@ -40,12 +40,12 @@ ReturnCode LowPower::init() ReturnCode LowPower::enable_debug() { /* Enable Clocks */ - SET(RCC->APB2ENR, RCC_APB2ENR_DBGEN); - SET(RCC->APB2SMENR, RCC_APB2SMENR_DBGSMEN); + // SET(RCC->APB2ENR, RCC_APB2ENR_DBGEN); + // SET(RCC->APB2SMENR, RCC_APB2SMENR_DBGSMEN); - SET(DBGMCU->CR, DBGMCU_CR_DBG_STOP); - SET(DBGMCU->CR, DBGMCU_CR_DBG_SLEEP); - SET(DBGMCU->CR, DBGMCU_CR_DBG_STANDBY); + // SET(DBGMCU->CR, DBGMCU_CR_DBG_STOP); + // SET(DBGMCU->CR, DBGMCU_CR_DBG_SLEEP); + // SET(DBGMCU->CR, DBGMCU_CR_DBG_STANDBY); return ReturnCode::OK; } diff --git a/firmware/Bsp/Drivers/LowPower.h b/firmware/Bsp/Drivers/LowPower.h index 5945cd8..9a396e3 100644 --- a/firmware/Bsp/Drivers/LowPower.h +++ b/firmware/Bsp/Drivers/LowPower.h @@ -31,11 +31,11 @@ class LowPower { public: LowPower() = delete; - static Common::ReturnCode init(); - static Common::ReturnCode sleep(); - static Common::ReturnCode stop(); - static Common::ReturnCode enable_debug(); - static Common::ReturnCode disable_debug(); + static BSP::ReturnCode init(); + static BSP::ReturnCode sleep(); + static BSP::ReturnCode stop(); + static BSP::ReturnCode enable_debug(); + static BSP::ReturnCode disable_debug(); }; } diff --git a/firmware/Bsp/Drivers/LptimPwm.cpp b/firmware/Bsp/Drivers/LptimPwm.cpp index 8155af1..91ee0f7 100644 --- a/firmware/Bsp/Drivers/LptimPwm.cpp +++ b/firmware/Bsp/Drivers/LptimPwm.cpp @@ -24,7 +24,7 @@ namespace BSP { -using Common::ReturnCode; +using BSP::ReturnCode; LptimPwm::LptimPwm(LPTIM_TypeDef *lptim) : m_lptim(lptim) diff --git a/firmware/Bsp/Drivers/LptimPwm.h b/firmware/Bsp/Drivers/LptimPwm.h index 9cb4472..b66ec91 100644 --- a/firmware/Bsp/Drivers/LptimPwm.h +++ b/firmware/Bsp/Drivers/LptimPwm.h @@ -32,7 +32,7 @@ public: LptimPwm() = delete; LptimPwm(LPTIM_TypeDef *lptim); - Common::ReturnCode init(); + BSP::ReturnCode init(); private: void init_lptim(); diff --git a/firmware/Bsp/Drivers/RtcDriver.cpp b/firmware/Bsp/Drivers/RtcDriver.cpp index 17f5b50..2c64389 100644 --- a/firmware/Bsp/Drivers/RtcDriver.cpp +++ b/firmware/Bsp/Drivers/RtcDriver.cpp @@ -26,8 +26,8 @@ namespace BSP { -using Common::ReturnCode; -using Common::time_t; +using BSP::ReturnCode; +using BSP::time_t; RtcDriver::RtcSystemTimer RtcDriver::m_sys_timer; @@ -106,11 +106,11 @@ ReturnCode RtcDriver::init_hw() uint32_t time = 0; SET(time, RTC_TR_PM); SET_TO(time, RTC_TR_HT, 1 << RTC_TR_HT_Pos); - SET_TO(time, RTC_TR_HU, 2 << RTC_TR_HU_Pos); - SET_TO(time, RTC_TR_MNT, 5 << RTC_TR_MNT_Pos); + SET_TO(time, RTC_TR_HU, 0 << RTC_TR_HU_Pos); + SET_TO(time, RTC_TR_MNT, 0 << RTC_TR_MNT_Pos); SET_TO(time, RTC_TR_MNU, 9 << RTC_TR_MNU_Pos); - SET_TO(time, RTC_TR_ST, 0 << RTC_TR_ST_Pos); - SET_TO(time, RTC_TR_SU, 0 << RTC_TR_SU_Pos); + SET_TO(time, RTC_TR_ST, 3 << RTC_TR_ST_Pos); + SET_TO(time, RTC_TR_SU, 6 << RTC_TR_SU_Pos); RTC->TR = time; CLR(RTC->ISR, RTC_ISR_INIT); @@ -119,7 +119,7 @@ ReturnCode RtcDriver::init_hw() SET(EXTI->EMR, EXTI_EMR_EM20); SET(EXTI->RTSR, EXTI_RTSR_RT20); - // Enable Wakeup interrupts, we may/will use them later + // Enable Wakeup irq, we may/will use them later SET(RTC->CR, RTC_CR_WUTIE); NVIC_EnableIRQ(RTC_IRQn); NVIC_SetPriority(RTC_IRQn, 0); @@ -131,7 +131,7 @@ ReturnCode RtcDriver::init_hw() return ReturnCode::OK; } -ReturnCode RtcDriver::get_time(Common::WallClockTime &wall_time) +ReturnCode RtcDriver::get_time(BSP::WallClockTime &wall_time) { /* 17.85 years, so this is fine. */ - uint64_t delay_cycles = Common::Time::to_micros(wakeup_delay) * LSE_CLOCK_FREQ / - Common::Time::MICROS_PER_SEC; + uint64_t delay_cycles = BSP::Time::to_micros(wakeup_delay) * LSE_CLOCK_FREQ / + BSP::Time::MICROS_PER_SEC; enable_rtc_write(); @@ -244,25 +244,29 @@ ReturnCode RtcDriver::set_wakeup_in(Common::time_t wakeup_delay) return ReturnCode::OK; } - Common::time_t RtcDriver::RtcSystemTimer::get_time() + BSP::time_t RtcDriver::RtcSystemTimer::get_time() { - uint32_t new_secs, old_secs, ssr, subsecond; + uint32_t new_secs, old_secs, ssr; + uint64_t new_timer_ticks, new_millis; do { + __disable_irq(); old_secs = m_seconds; ssr = RTC->SSR & 0xFFFF; new_secs = m_seconds; + __enable_irq(); } while (new_secs != old_secs); - new_secs = new_secs * LSE_CLOCK_FREQ; + new_timer_ticks = (uint64_t) new_secs * LSE_CLOCK_FREQ; /** SSR is a countdown register */ - subsecond = (new_secs + LSE_CLOCK_FREQ - 1 - ssr) * Common::Time::MILLIS_PER_SEC / LSE_CLOCK_FREQ; - return Common::Time::millis(subsecond); + new_millis = (new_timer_ticks + LSE_CLOCK_FREQ - 1 - ssr) * BSP::Time::MILLIS_PER_SEC / LSE_CLOCK_FREQ; + return BSP::Time::millis(new_millis); } void RtcDriver::RtcSystemTimer::increment_seconds() { - /** TODO: Atomic increment */ + __disable_irq(); m_seconds++; + __enable_irq(); } void RtcDriver::increment_seconds() @@ -274,7 +278,7 @@ static uint32_t wakeup_alarms = 0; extern "C" void RTC_IRQHandler() { - // Clear the wakeup and alarm interrupts in the EXTI + // Clear the wakeup and alarm irq in the EXTI SET(EXTI->PR, EXTI_PR_PIF20 | EXTI_PR_PIF17); if (RTC->ISR & RTC_ISR_ALRAF) { diff --git a/firmware/Bsp/Drivers/RtcDriver.h b/firmware/Bsp/Drivers/RtcDriver.h index d634f32..9676820 100644 --- a/firmware/Bsp/Drivers/RtcDriver.h +++ b/firmware/Bsp/Drivers/RtcDriver.h @@ -40,15 +40,15 @@ public: static SystemTimerImpl& get_system_timer() { return m_sys_timer; }; - static Common::ReturnCode init(); + static BSP::ReturnCode init(); static void increment_seconds(); - static Common::ReturnCode get_time(Common::WallClockTime &tm_bcd); - static Common::ReturnCode set_time(const Common::WallClockTime &tm_bcd); - static Common::ReturnCode set_wakeup_in(Common::time_t wakeup_delay); + static BSP::ReturnCode get_time(BSP::WallClockTime &tm_bcd); + static BSP::ReturnCode set_time(const BSP::WallClockTime &tm_bcd); + static BSP::ReturnCode set_wakeup_in(BSP::time_t wakeup_delay); private: - static Common::ReturnCode init_hw(); + static BSP::ReturnCode init_hw(); static void enable_rtc_write(); static void disable_rtc_write(); static void enable_rtc_wakeup_interrupt(); @@ -67,7 +67,7 @@ private: ~RtcSystemTimer() {} - Common::time_t get_time() override; + BSP::time_t get_time() override; void increment_seconds(); private: diff --git a/firmware/Bsp/Drivers/SpiDriver.cpp b/firmware/Bsp/Drivers/SpiDriver.cpp index 7a27962..40353bb 100644 --- a/firmware/Bsp/Drivers/SpiDriver.cpp +++ b/firmware/Bsp/Drivers/SpiDriver.cpp @@ -24,10 +24,10 @@ namespace BSP { -using RC = Common::ReturnCode; -using Common::Schedule::TaskScheduler; -using Common::Schedule::NextTime; -using Common::Time; +using RC = BSP::ReturnCode; +using BSP::Schedule::TaskScheduler; +using BSP::Schedule::NextTime; +using BSP::Time; SpiDriver::SpiDriver(TaskScheduler &scheduler) : m_scheduler(scheduler) diff --git a/firmware/Bsp/Drivers/SpiDriver.h b/firmware/Bsp/Drivers/SpiDriver.h index 9c8a95a..2382169 100644 --- a/firmware/Bsp/Drivers/SpiDriver.h +++ b/firmware/Bsp/Drivers/SpiDriver.h @@ -29,18 +29,18 @@ namespace BSP { -class SpiDriver : public Common::Schedule::Task { +class SpiDriver : public BSP::Schedule::Task { public: // TODO: Add configurability / provide a real abstraction - SpiDriver(Common::Schedule::TaskScheduler &scheduler); + SpiDriver(BSP::Schedule::TaskScheduler &scheduler); void init(); - Common::Schedule::NextTime execute() override; - Common::ReturnCode tx_blocking(const uint8_t *data, size_t len); + BSP::Schedule::NextTime execute() override; + BSP::ReturnCode tx_blocking(const uint8_t *data, size_t len); private: - Common::Schedule::TaskScheduler &m_scheduler; + BSP::Schedule::TaskScheduler &m_scheduler; SPI_TypeDef *m_spi; }; diff --git a/firmware/Bsp/LowPowerTaskScheduler.h b/firmware/Bsp/LowPowerTaskScheduler.h index dc68fe1..9f72444 100644 --- a/firmware/Bsp/LowPowerTaskScheduler.h +++ b/firmware/Bsp/LowPowerTaskScheduler.h @@ -28,7 +28,7 @@ #include "Drivers/LowPower.h" #include "Drivers/RtcDriver.h" -namespace Common { +namespace BSP { namespace Schedule { template @@ -100,13 +100,13 @@ private: void inline cycle() { - Common::time_t time = 0; + BSP::time_t time = 0; BSP::SystemTimer::get_time(time); bool task_died = false; /* Keep state for when the next task will execute. */ bool execed = false; - Common::time_t next_time = ~0; + BSP::time_t next_time = ~0; for (size_t i = 0; i < m_task_count; i++) { TaskEvent &event = m_tasks[i]; @@ -128,13 +128,13 @@ private: } if (m_task_count == 0) { - Common::ReturnCode rc = BSP::RtcDriver::set_wakeup_in(Time::seconds(5)); - if (rc == Common::ReturnCode::OK) { + BSP::ReturnCode rc = BSP::RtcDriver::set_wakeup_in(Time::seconds(5)); + if (rc == BSP::ReturnCode::OK) { BSP::LowPower::stop(); } } else if (!execed && (next_time - time > Time::millis(2))) { - Common::ReturnCode rc = BSP::RtcDriver::set_wakeup_in(next_time - time); - if (rc == Common::ReturnCode::OK) { + BSP::ReturnCode rc = BSP::RtcDriver::set_wakeup_in(next_time - time); + if (rc == BSP::ReturnCode::OK) { BSP::LowPower::stop(); } } diff --git a/firmware/Bsp/ReturnCode.h b/firmware/Bsp/ReturnCode.h index 1cc4794..6dc1d3b 100644 --- a/firmware/Bsp/ReturnCode.h +++ b/firmware/Bsp/ReturnCode.h @@ -21,7 +21,7 @@ #pragma once -namespace Common { +namespace BSP { enum class ReturnCode : int { OK = 0, diff --git a/firmware/Bsp/SystemTime.cpp b/firmware/Bsp/SystemTime.cpp index b1cee50..775d95e 100644 --- a/firmware/Bsp/SystemTime.cpp +++ b/firmware/Bsp/SystemTime.cpp @@ -24,8 +24,8 @@ namespace BSP { -using Common::ReturnCode; -using Common::time_t; +using BSP::ReturnCode; +using BSP::time_t; SystemTimerImpl *SystemTimer::m_impl = nullptr; diff --git a/firmware/Bsp/SystemTime.h b/firmware/Bsp/SystemTime.h index 29e96d7..acae7ac 100644 --- a/firmware/Bsp/SystemTime.h +++ b/firmware/Bsp/SystemTime.h @@ -32,7 +32,7 @@ namespace BSP { class SystemTimerImpl { public: - virtual Common::time_t get_time() = 0; + virtual BSP::time_t get_time() = 0; }; class SystemTimer final { @@ -40,7 +40,7 @@ public: SystemTimer() = delete; ~SystemTimer() = delete; - static Common::ReturnCode get_time(Common::time_t &time); + static BSP::ReturnCode get_time(BSP::time_t &time); static void set_timer(SystemTimerImpl& timer); private: static SystemTimerImpl *m_impl; diff --git a/firmware/Bsp/Task.cpp b/firmware/Bsp/Task.cpp index 0c87792..2fc7ee6 100644 --- a/firmware/Bsp/Task.cpp +++ b/firmware/Bsp/Task.cpp @@ -19,6 +19,6 @@ * THE SOFTWARE. */ -namespace Common { +namespace BSP { } diff --git a/firmware/Bsp/Task.h b/firmware/Bsp/Task.h index a878882..fd040c7 100644 --- a/firmware/Bsp/Task.h +++ b/firmware/Bsp/Task.h @@ -25,7 +25,7 @@ #include "Time.h" #include "SystemTime.h" -namespace Common { +namespace BSP { namespace Schedule { enum class ScheduleType { @@ -112,4 +112,4 @@ public: }; } // namespace Schedule -} // namespace Common +} // namespace BSP diff --git a/firmware/Bsp/TaskScheduler.h b/firmware/Bsp/TaskScheduler.h index a5e3950..4dda8c1 100644 --- a/firmware/Bsp/TaskScheduler.h +++ b/firmware/Bsp/TaskScheduler.h @@ -26,7 +26,7 @@ #include "Task.h" #include "system.h" -namespace Common { +namespace BSP { namespace Schedule { class TaskScheduler { diff --git a/firmware/Bsp/Time.h b/firmware/Bsp/Time.h index c426ba1..fb66385 100644 --- a/firmware/Bsp/Time.h +++ b/firmware/Bsp/Time.h @@ -23,7 +23,7 @@ #include -namespace Common { +namespace BSP { using time_t = uint64_t; diff --git a/firmware/Makefile b/firmware/Makefile index 483b1b6..de0d582 100644 --- a/firmware/Makefile +++ b/firmware/Makefile @@ -32,6 +32,7 @@ AS = $(TOOL_PREFIX)as LD = $(TOOL_PREFIX)g++ OBJCOPY = $(TOOL_PREFIX)objcopy STM32_PROG = STM32_Programmer.sh + # # Device Variables # @@ -114,6 +115,7 @@ LDFLAGS += $(CPU_FLAGS) LDFLAGS += -Wl,--gc-sections -Wl,--build-id=none -static LDFLAGS += -Wl,--wrap=malloc -Wl,--wrap=free # Fail to link if dynamic allocation is sneaking through LDFLAGS += -Wl,-print-memory-usage +# LDFLAGS += -lstdc++ -latomic LDFLAGS += -nostartfiles # @@ -127,23 +129,22 @@ build: $(OUTPUT_BIN) # %.o: %.c $(FONT_H_FILES) - @echo "CC $@" + @echo "CC $@" @$(CC) $(CFLAGS) -c $< -o $@ %.o: %.S $(FONT_H_FILES) - @echo "AS $@" + @echo "AS $@" @$(CC) $(ASFLAGS) -c $< -o $@ %.o: %.cpp $(FONT_H_FILES) @echo "CXX $@" @$(CXX) $(CXX_FLAGS) $(CFLAGS) -c $< -o $@ -SMALL_FONT=ThirdParty/fonts/roboto_mono/RobotoMono-Medium.ttf +SMALL_FONT=ThirdParty/fonts/roboto_mono/RobotoMono-Regular.ttf $(FONT_GEN_DIR)/small.h $(FONT_GEN_DIR)/small.c: Gen/fixedfont-to-c.py Gen/font.py @echo "GEN $@" @mkdir -p $(FONT_GEN_DIR) - @Gen/fixedfont-to-c.py $(patsubst .%,%,$(suffix $@)) $(SMALL_FONT) "$@" -s 18 --header-dir "Bsp/" --name font_small - @$(call gen_font,$(FONT),29,small) + @Gen/fixedfont-to-c.py $(patsubst .%,%,$(suffix $@)) $(SMALL_FONT) "$@" -s 24 --header-dir "Bsp/" --name font_small LARGE_FONT=ThirdParty/fonts/roboto_mono/RobotoMono-Bold.ttf $(FONT_GEN_DIR)/large_digits.h $(FONT_GEN_DIR)/large_digits.c: Gen/fixedfont-to-c.py Gen/font.py @@ -156,7 +157,7 @@ $(OUTPUT_BIN): $(OUTPUT_ELF) @$(OBJCOPY) -O binary $(OUTPUT_ELF) $(OUTPUT_BIN) $(OUTPUT_MAP) $(OUTPUT_ELF): $(LINKER_SCRIPT) $(OBJS) - @echo "LD $@" + @echo "LD $@" @$(LD) -T $(LINKER_SCRIPT) $(LDFLAGS) -o $(OUTPUT_ELF) $(OBJS) -Wl,-Map=$(OUTPUT_MAP) # @@ -172,6 +173,4 @@ flash: $(OUTPUT_BIN) .PHONY: clean clean: - @echo "RM $(OBJS)" - @rm -f $(OBJS) $(OUTPUT_BIN) $(OUTPUT_ELF) $(FONT_C_FILES) $(OUTPUT_MAP) ./*.su - @rm -rf build/ + rm -f $(OBJS) $(OUTPUT_BIN) $(OUTPUT_ELF) $(FONT_C_FILES) $(FONT_H_FILES) $(OUTPUT_MAP) $(addsuffix .su,$(basename $(OBJS)))