From 638368053288076eca98f55f9a00fc95b591cfb9 Mon Sep 17 00:00:00 2001 From: Lukas Date: Sat, 10 Jul 2021 16:38:36 +0200 Subject: [PATCH] Add code and schematics --- Arduino | 1 + ESP32 | 1 + KiCad/noise_sensor.kicad_pcb | 2864 +++++++++++++++++++++++++++ KiCad/noise_sensor.pro | 248 +++ KiCad/noise_sensor.sch | 870 ++++++++ KiCad/pcb_3d.png | Bin 0 -> 198753 bytes STL/master_bottom.stl | Bin 0 -> 19084 bytes STL/master_complete.png | Bin 0 -> 78536 bytes STL/master_top.stl | Bin 0 -> 29284 bytes STL/slave_bottom_v2.stl | Bin 0 -> 19084 bytes STL/slave_top_v2.stl | Bin 0 -> 23484 bytes STM32/Core/Inc/SX1278.h | 490 +++++ STM32/Core/Inc/SX1278_hw.h | 95 + STM32/Core/Inc/arduinoFFT.h | 102 + STM32/Core/Inc/correction_values.h | 70 + STM32/Core/Inc/defs.h | 79 + STM32/Core/Inc/main.h | 84 + STM32/Core/Inc/stm32g0xx_hal_conf.h | 352 ++++ STM32/Core/Inc/stm32g0xx_it.h | 69 + STM32/Core/Inc/types.h | 69 + STM32/Core/Src/SX1278.c | 293 +++ STM32/Core/Src/SX1278_hw.c | 60 + STM32/Core/Src/arduinoFFT.cpp | 280 +++ STM32/Core/Src/main.cpp | 1135 +++++++++++ STM32/Core/Src/stm32g0xx_hal_msp.c | 550 +++++ STM32/Core/Src/stm32g0xx_it.c | 208 ++ STM32/Core/Src/syscalls.c | 159 ++ STM32/Core/Src/sysmem.c | 80 + STM32/Core/Src/system_stm32g0xx.c | 290 +++ STM32/noise_sensor.ioc | 271 +++ 30 files changed, 8720 insertions(+) create mode 160000 Arduino create mode 160000 ESP32 create mode 100644 KiCad/noise_sensor.kicad_pcb create mode 100644 KiCad/noise_sensor.pro create mode 100644 KiCad/noise_sensor.sch create mode 100644 KiCad/pcb_3d.png create mode 100644 STL/master_bottom.stl create mode 100644 STL/master_complete.png create mode 100644 STL/master_top.stl create mode 100644 STL/slave_bottom_v2.stl create mode 100644 STL/slave_top_v2.stl create mode 100644 STM32/Core/Inc/SX1278.h create mode 100644 STM32/Core/Inc/SX1278_hw.h create mode 100644 STM32/Core/Inc/arduinoFFT.h create mode 100644 STM32/Core/Inc/correction_values.h create mode 100644 STM32/Core/Inc/defs.h create mode 100644 STM32/Core/Inc/main.h create mode 100644 STM32/Core/Inc/stm32g0xx_hal_conf.h create mode 100644 STM32/Core/Inc/stm32g0xx_it.h create mode 100644 STM32/Core/Inc/types.h create mode 100644 STM32/Core/Src/SX1278.c create mode 100644 STM32/Core/Src/SX1278_hw.c create mode 100644 STM32/Core/Src/arduinoFFT.cpp create mode 100644 STM32/Core/Src/main.cpp create mode 100644 STM32/Core/Src/stm32g0xx_hal_msp.c create mode 100644 STM32/Core/Src/stm32g0xx_it.c create mode 100644 STM32/Core/Src/syscalls.c create mode 100644 STM32/Core/Src/sysmem.c create mode 100644 STM32/Core/Src/system_stm32g0xx.c create mode 100644 STM32/noise_sensor.ioc diff --git a/Arduino b/Arduino new file mode 160000 index 0000000..c12eaf2 --- /dev/null +++ b/Arduino @@ -0,0 +1 @@ +Subproject commit c12eaf2651eb6cc169811b1f17a2870c3a3076f2 diff --git a/ESP32 b/ESP32 new file mode 160000 index 0000000..1966efb --- /dev/null +++ b/ESP32 @@ -0,0 +1 @@ +Subproject commit 1966efbfbdb31c02db904cc2ced81cf7de6e8958 diff --git a/KiCad/noise_sensor.kicad_pcb b/KiCad/noise_sensor.kicad_pcb new file mode 100644 index 0000000..73e88d2 --- /dev/null +++ b/KiCad/noise_sensor.kicad_pcb @@ -0,0 +1,2864 @@ +(kicad_pcb (version 20171130) (host pcbnew 5.1.9) + + (general + (thickness 1.6) + (drawings 28) + (tracks 267) + (zones 0) + (modules 27) + (nets 41) + ) + + (page A4) + (layers + (0 F.Cu signal) + (31 B.Cu signal) + (32 B.Adhes user) + (33 F.Adhes user) + (34 B.Paste user) + (35 F.Paste user) + (36 B.SilkS user) + (37 F.SilkS user) + (38 B.Mask user) + (39 F.Mask user) + (40 Dwgs.User user) + (41 Cmts.User user) + (42 Eco1.User user) + (43 Eco2.User user) + (44 Edge.Cuts user) + (45 Margin user) + (46 B.CrtYd user) + (47 F.CrtYd user) + (48 B.Fab user) + (49 F.Fab user hide) + ) + + (setup + (last_trace_width 0.25) + (trace_clearance 0.2) + (zone_clearance 0.1) + (zone_45_only yes) + (trace_min 0.2) + (via_size 0.8) + (via_drill 0.4) + (via_min_size 0.4) + (via_min_drill 0.3) + (uvia_size 0.3) + (uvia_drill 0.1) + (uvias_allowed no) + (uvia_min_size 0.2) + (uvia_min_drill 0.1) + (edge_width 0.05) + (segment_width 0.2) + (pcb_text_width 0.3) + (pcb_text_size 1.5 1.5) + (mod_edge_width 0.12) + (mod_text_size 1 1) + (mod_text_width 0.15) + (pad_size 1.524 1.524) + (pad_drill 0.762) + (pad_to_mask_clearance 0) + (aux_axis_origin 0 0) + (grid_origin 220.868 73.494) + (visible_elements FFFFFF7F) + (pcbplotparams + (layerselection 0x010f0_ffffffff) + (usegerberextensions false) + (usegerberattributes false) + (usegerberadvancedattributes false) + (creategerberjobfile false) + (excludeedgelayer true) + (linewidth 0.150000) + (plotframeref false) + (viasonmask false) + (mode 1) + (useauxorigin false) + (hpglpennumber 1) + (hpglpenspeed 20) + (hpglpendiameter 15.000000) + (psnegative false) + (psa4output false) + (plotreference true) + (plotvalue false) + (plotinvisibletext false) + (padsonsilk true) + (subtractmaskfromsilk false) + (outputformat 1) + (mirror false) + (drillshape 0) + (scaleselection 1) + (outputdirectory "gerber/")) + ) + + (net 0 "") + (net 1 GND) + (net 2 "Net-(D1-Pad2)") + (net 3 +3V3) + (net 4 LED1) + (net 5 TX) + (net 6 SCK) + (net 7 DIO0) + (net 8 MISO) + (net 9 MOSI) + (net 10 BCLK) + (net 11 DOUT) + (net 12 LRCL_WS) + (net 13 SCL) + (net 14 SDA) + (net 15 SWDIO) + (net 16 SWCLK) + (net 17 RX) + (net 18 "Net-(U2-Pad7)") + (net 19 "Net-(U2-Pad11)") + (net 20 "Net-(U2-Pad12)") + (net 21 "Net-(U2-Pad15)") + (net 22 "Net-(U2-Pad16)") + (net 23 +5V) + (net 24 I²C-ADDRESS) + (net 25 DEVICE_ID) + (net 26 BATT_SENSE) + (net 27 SPI_NSS) + (net 28 SPI_RESET) + (net 29 "Net-(U4-Pad31)") + (net 30 "Net-(U4-Pad30)") + (net 31 "Net-(U4-Pad28)") + (net 32 "Net-(U4-Pad21)") + (net 33 "Net-(U4-Pad19)") + (net 34 "Net-(U4-Pad18)") + (net 35 "Net-(U4-Pad17)") + (net 36 "Net-(U4-Pad6)") + (net 37 "Net-(U4-Pad3)") + (net 38 "Net-(U4-Pad2)") + (net 39 "Net-(U4-Pad1)") + (net 40 "Net-(J6-Pad1)") + + (net_class Default "This is the default net class." + (clearance 0.2) + (trace_width 0.25) + (via_dia 0.8) + (via_drill 0.4) + (uvia_dia 0.3) + (uvia_drill 0.1) + (add_net +3V3) + (add_net +5V) + (add_net BATT_SENSE) + (add_net BCLK) + (add_net DEVICE_ID) + (add_net DIO0) + (add_net DOUT) + (add_net GND) + (add_net I²C-ADDRESS) + (add_net LED1) + (add_net LRCL_WS) + (add_net MISO) + (add_net MOSI) + (add_net "Net-(D1-Pad2)") + (add_net "Net-(J6-Pad1)") + (add_net "Net-(U2-Pad11)") + (add_net "Net-(U2-Pad12)") + (add_net "Net-(U2-Pad15)") + (add_net "Net-(U2-Pad16)") + (add_net "Net-(U2-Pad7)") + (add_net "Net-(U4-Pad1)") + (add_net "Net-(U4-Pad17)") + (add_net "Net-(U4-Pad18)") + (add_net "Net-(U4-Pad19)") + (add_net "Net-(U4-Pad2)") + (add_net "Net-(U4-Pad21)") + (add_net "Net-(U4-Pad28)") + (add_net "Net-(U4-Pad3)") + (add_net "Net-(U4-Pad30)") + (add_net "Net-(U4-Pad31)") + (add_net "Net-(U4-Pad6)") + (add_net RX) + (add_net SCK) + (add_net SCL) + (add_net SDA) + (add_net SPI_NSS) + (add_net SPI_RESET) + (add_net SWCLK) + (add_net SWDIO) + (add_net TX) + ) + + (module masterarbeit:HOPERF_RFM9XW_SMD_Castellated (layer F.Cu) (tedit 60117980) (tstamp 6011B635) + (at 209.55 65.024 90) + (descr "Low Power Long Range Transceiver Module SMD-16 (https://www.hoperf.com/data/upload/portal/20181127/5bfcbea20e9ef.pdf)") + (tags "LoRa Low Power Long Range Transceiver Module") + (path /5FF4BB32) + (attr smd) + (fp_text reference U2 (at 0.42 0.0404 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value RFM95W-868S2 (at 0 9.5 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -7 -8) (end -8 -7) (layer F.Fab) (width 0.1)) + (fp_line (start -8.1 -7.75) (end -9 -7.75) (layer F.SilkS) (width 0.12)) + (fp_line (start -8.1 -8.1) (end -8.1 -7.75) (layer F.SilkS) (width 0.12)) + (fp_line (start 8.1 8.1) (end 8.1 7.7) (layer F.SilkS) (width 0.12)) + (fp_line (start -8.1 8.1) (end 8.1 8.1) (layer F.SilkS) (width 0.12)) + (fp_line (start -8.1 7.7) (end -8.1 8.1) (layer F.SilkS) (width 0.12)) + (fp_line (start 8.1 -8.1) (end 8.1 -7.7) (layer F.SilkS) (width 0.12)) + (fp_line (start -8.1 -8.1) (end 8.1 -8.1) (layer F.SilkS) (width 0.12)) + (fp_line (start -9.25 8.25) (end -9.25 -8.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -9.25 8.25) (end 9.25 8.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 9.25 -8.25) (end 9.25 8.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -9.25 -8.25) (end 9.25 -8.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -8 8) (end -8 -7) (layer F.Fab) (width 0.1)) + (fp_line (start -8 8) (end 8 8) (layer F.Fab) (width 0.1)) + (fp_line (start 8 8) (end 8 -8) (layer F.Fab) (width 0.1)) + (fp_line (start -7 -8) (end 8 -8) (layer F.Fab) (width 0.1)) + (fp_text user %R (at 0 0 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 16 smd oval (at 8 -7 90) (size 2 1) (layers F.Cu F.Paste F.Mask) + (net 22 "Net-(U2-Pad16)")) + (pad 15 smd oval (at 8 -5 90) (size 2 1) (layers F.Cu F.Paste F.Mask) + (net 21 "Net-(U2-Pad15)")) + (pad 14 smd oval (at 8 -3 90) (size 2 1) (layers F.Cu F.Paste F.Mask) + (net 7 DIO0)) + (pad 13 smd oval (at 8 -1 90) (size 2 1) (layers F.Cu F.Paste F.Mask) + (net 3 +3V3)) + (pad 12 smd oval (at 8 1 90) (size 2 1) (layers F.Cu F.Paste F.Mask) + (net 20 "Net-(U2-Pad12)")) + (pad 11 smd oval (at 8 3 90) (size 2 1) (layers F.Cu F.Paste F.Mask) + (net 19 "Net-(U2-Pad11)")) + (pad 10 smd oval (at 8 5 90) (size 2 1) (layers F.Cu F.Paste F.Mask) + (net 1 GND)) + (pad 9 smd oval (at 8 7 90) (size 2 1) (layers F.Cu F.Paste F.Mask) + (net 40 "Net-(J6-Pad1)")) + (pad 8 smd oval (at -8 7 90) (size 2 1) (layers F.Cu F.Paste F.Mask) + (net 1 GND)) + (pad 7 smd oval (at -8 5 90) (size 2 1) (layers F.Cu F.Paste F.Mask) + (net 18 "Net-(U2-Pad7)")) + (pad 6 smd oval (at -8 3 90) (size 2 1) (layers F.Cu F.Paste F.Mask) + (net 28 SPI_RESET)) + (pad 5 smd oval (at -8 1 90) (size 2 1) (layers F.Cu F.Paste F.Mask) + (net 27 SPI_NSS)) + (pad 4 smd oval (at -8 -1 90) (size 2 1) (layers F.Cu F.Paste F.Mask) + (net 6 SCK)) + (pad 3 smd oval (at -8 -3 90) (size 2 1) (layers F.Cu F.Paste F.Mask) + (net 9 MOSI)) + (pad 2 smd oval (at -8 -5 90) (size 2 1) (layers F.Cu F.Paste F.Mask) + (net 8 MISO)) + (pad 1 smd oval (at -8 -7 90) (size 2 1) (layers F.Cu F.Paste F.Mask) + (net 1 GND)) + (model ${KISYS3DMOD}/RF_Module.3dshapes/HOPERF_RFM9XW_SMD.wrl + (offset (xyz 10.5 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 60 0 0)) + ) + (model "/home/lukas/Downloads/RFM95 LoRa v15.step" + (offset (xyz 8 -8 0)) + (scale (xyz 1 1 1)) + (rotate (xyz -90 0 180)) + ) + ) + + (module Symbol:OSHW-Logo2_9.8x8mm_SilkScreen (layer F.Cu) (tedit 0) (tstamp 6011EBD9) + (at 241.968 73.044) + (descr "Open Source Hardware Symbol") + (tags "Logo Symbol OSHW") + (attr virtual) + (fp_text reference REF** (at 0 0) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value OSHW-Logo2_9.8x8mm_SilkScreen (at 0.75 0) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_poly (pts (xy -3.231114 2.584505) (xy -3.156461 2.621727) (xy -3.090569 2.690261) (xy -3.072423 2.715648) + (xy -3.052655 2.748866) (xy -3.039828 2.784945) (xy -3.03249 2.833098) (xy -3.029187 2.902536) + (xy -3.028462 2.994206) (xy -3.031737 3.11983) (xy -3.043123 3.214154) (xy -3.064959 3.284523) + (xy -3.099581 3.338286) (xy -3.14933 3.382788) (xy -3.152986 3.385423) (xy -3.202015 3.412377) + (xy -3.261055 3.425712) (xy -3.336141 3.429) (xy -3.458205 3.429) (xy -3.458256 3.547497) + (xy -3.459392 3.613492) (xy -3.466314 3.652202) (xy -3.484402 3.675419) (xy -3.519038 3.694933) + (xy -3.527355 3.69892) (xy -3.56628 3.717603) (xy -3.596417 3.729403) (xy -3.618826 3.730422) + (xy -3.634567 3.716761) (xy -3.644698 3.684522) (xy -3.650277 3.629804) (xy -3.652365 3.548711) + (xy -3.652019 3.437344) (xy -3.6503 3.291802) (xy -3.649763 3.248269) (xy -3.647828 3.098205) + (xy -3.646096 3.000042) (xy -3.458308 3.000042) (xy -3.457252 3.083364) (xy -3.452562 3.13788) + (xy -3.441949 3.173837) (xy -3.423128 3.201482) (xy -3.41035 3.214965) (xy -3.35811 3.254417) + (xy -3.311858 3.257628) (xy -3.264133 3.225049) (xy -3.262923 3.223846) (xy -3.243506 3.198668) + (xy -3.231693 3.164447) (xy -3.225735 3.111748) (xy -3.22388 3.031131) (xy -3.223846 3.013271) + (xy -3.22833 2.902175) (xy -3.242926 2.825161) (xy -3.26935 2.778147) (xy -3.309317 2.75705) + (xy -3.332416 2.754923) (xy -3.387238 2.7649) (xy -3.424842 2.797752) (xy -3.447477 2.857857) + (xy -3.457394 2.949598) (xy -3.458308 3.000042) (xy -3.646096 3.000042) (xy -3.645778 2.98206) + (xy -3.643127 2.894679) (xy -3.639394 2.830905) (xy -3.634093 2.785582) (xy -3.626742 2.753555) + (xy -3.616857 2.729668) (xy -3.603954 2.708764) (xy -3.598421 2.700898) (xy -3.525031 2.626595) + (xy -3.43224 2.584467) (xy -3.324904 2.572722) (xy -3.231114 2.584505)) (layer F.SilkS) (width 0.01)) + (fp_poly (pts (xy -1.728336 2.595089) (xy -1.665633 2.631358) (xy -1.622039 2.667358) (xy -1.590155 2.705075) + (xy -1.56819 2.751199) (xy -1.554351 2.812421) (xy -1.546847 2.895431) (xy -1.543883 3.006919) + (xy -1.543539 3.087062) (xy -1.543539 3.382065) (xy -1.709615 3.456515) (xy -1.719385 3.133402) + (xy -1.723421 3.012729) (xy -1.727656 2.925141) (xy -1.732903 2.86465) (xy -1.739975 2.825268) + (xy -1.749689 2.801007) (xy -1.762856 2.78588) (xy -1.767081 2.782606) (xy -1.831091 2.757034) + (xy -1.895792 2.767153) (xy -1.934308 2.794) (xy -1.949975 2.813024) (xy -1.96082 2.837988) + (xy -1.967712 2.875834) (xy -1.971521 2.933502) (xy -1.973117 3.017935) (xy -1.973385 3.105928) + (xy -1.973437 3.216323) (xy -1.975328 3.294463) (xy -1.981655 3.347165) (xy -1.995017 3.381242) + (xy -2.018015 3.403511) (xy -2.053246 3.420787) (xy -2.100303 3.438738) (xy -2.151697 3.458278) + (xy -2.145579 3.111485) (xy -2.143116 2.986468) (xy -2.140233 2.894082) (xy -2.136102 2.827881) + (xy -2.129893 2.78142) (xy -2.120774 2.748256) (xy -2.107917 2.721944) (xy -2.092416 2.698729) + (xy -2.017629 2.624569) (xy -1.926372 2.581684) (xy -1.827117 2.571412) (xy -1.728336 2.595089)) (layer F.SilkS) (width 0.01)) + (fp_poly (pts (xy -3.983114 2.587256) (xy -3.891536 2.635409) (xy -3.823951 2.712905) (xy -3.799943 2.762727) + (xy -3.781262 2.837533) (xy -3.771699 2.932052) (xy -3.770792 3.03521) (xy -3.778079 3.135935) + (xy -3.793097 3.223153) (xy -3.815385 3.285791) (xy -3.822235 3.296579) (xy -3.903368 3.377105) + (xy -3.999734 3.425336) (xy -4.104299 3.43945) (xy -4.210032 3.417629) (xy -4.239457 3.404547) + (xy -4.296759 3.364231) (xy -4.34705 3.310775) (xy -4.351803 3.303995) (xy -4.371122 3.271321) + (xy -4.383892 3.236394) (xy -4.391436 3.190414) (xy -4.395076 3.124584) (xy -4.396135 3.030105) + (xy -4.396154 3.008923) (xy -4.396106 3.002182) (xy -4.200769 3.002182) (xy -4.199632 3.091349) + (xy -4.195159 3.15052) (xy -4.185754 3.188741) (xy -4.169824 3.215053) (xy -4.161692 3.223846) + (xy -4.114942 3.257261) (xy -4.069553 3.255737) (xy -4.02366 3.226752) (xy -3.996288 3.195809) + (xy -3.980077 3.150643) (xy -3.970974 3.07942) (xy -3.970349 3.071114) (xy -3.968796 2.942037) + (xy -3.985035 2.846172) (xy -4.018848 2.784107) (xy -4.070016 2.756432) (xy -4.08828 2.754923) + (xy -4.13624 2.762513) (xy -4.169047 2.788808) (xy -4.189105 2.839095) (xy -4.198822 2.918664) + (xy -4.200769 3.002182) (xy -4.396106 3.002182) (xy -4.395426 2.908249) (xy -4.392371 2.837906) + (xy -4.385678 2.789163) (xy -4.37404 2.753288) (xy -4.356147 2.721548) (xy -4.352192 2.715648) + (xy -4.285733 2.636104) (xy -4.213315 2.589929) (xy -4.125151 2.571599) (xy -4.095213 2.570703) + (xy -3.983114 2.587256)) (layer F.SilkS) (width 0.01)) + (fp_poly (pts (xy -2.465746 2.599745) (xy -2.388714 2.651567) (xy -2.329184 2.726412) (xy -2.293622 2.821654) + (xy -2.286429 2.891756) (xy -2.287246 2.921009) (xy -2.294086 2.943407) (xy -2.312888 2.963474) + (xy -2.349592 2.985733) (xy -2.410138 3.014709) (xy -2.500466 3.054927) (xy -2.500923 3.055129) + (xy -2.584067 3.09321) (xy -2.652247 3.127025) (xy -2.698495 3.152933) (xy -2.715842 3.167295) + (xy -2.715846 3.167411) (xy -2.700557 3.198685) (xy -2.664804 3.233157) (xy -2.623758 3.25799) + (xy -2.602963 3.262923) (xy -2.54623 3.245862) (xy -2.497373 3.203133) (xy -2.473535 3.156155) + (xy -2.450603 3.121522) (xy -2.405682 3.082081) (xy -2.352877 3.048009) (xy -2.30629 3.02948) + (xy -2.296548 3.028462) (xy -2.285582 3.045215) (xy -2.284921 3.088039) (xy -2.29298 3.145781) + (xy -2.308173 3.207289) (xy -2.328914 3.261409) (xy -2.329962 3.26351) (xy -2.392379 3.35066) + (xy -2.473274 3.409939) (xy -2.565144 3.439034) (xy -2.660487 3.435634) (xy -2.751802 3.397428) + (xy -2.755862 3.394741) (xy -2.827694 3.329642) (xy -2.874927 3.244705) (xy -2.901066 3.133021) + (xy -2.904574 3.101643) (xy -2.910787 2.953536) (xy -2.903339 2.884468) (xy -2.715846 2.884468) + (xy -2.71341 2.927552) (xy -2.700086 2.940126) (xy -2.666868 2.930719) (xy -2.614506 2.908483) + (xy -2.555976 2.88061) (xy -2.554521 2.879872) (xy -2.504911 2.853777) (xy -2.485 2.836363) + (xy -2.48991 2.818107) (xy -2.510584 2.79412) (xy -2.563181 2.759406) (xy -2.619823 2.756856) + (xy -2.670631 2.782119) (xy -2.705724 2.830847) (xy -2.715846 2.884468) (xy -2.903339 2.884468) + (xy -2.898008 2.835036) (xy -2.865222 2.741055) (xy -2.819579 2.675215) (xy -2.737198 2.608681) + (xy -2.646454 2.575676) (xy -2.553815 2.573573) (xy -2.465746 2.599745)) (layer F.SilkS) (width 0.01)) + (fp_poly (pts (xy -0.840154 2.49212) (xy -0.834428 2.57198) (xy -0.827851 2.619039) (xy -0.818738 2.639566) + (xy -0.805402 2.639829) (xy -0.801077 2.637378) (xy -0.743556 2.619636) (xy -0.668732 2.620672) + (xy -0.592661 2.63891) (xy -0.545082 2.662505) (xy -0.496298 2.700198) (xy -0.460636 2.742855) + (xy -0.436155 2.797057) (xy -0.420913 2.869384) (xy -0.41297 2.966419) (xy -0.410384 3.094742) + (xy -0.410338 3.119358) (xy -0.410308 3.39587) (xy -0.471839 3.41732) (xy -0.515541 3.431912) + (xy -0.539518 3.438706) (xy -0.540223 3.438769) (xy -0.542585 3.420345) (xy -0.544594 3.369526) + (xy -0.546099 3.292993) (xy -0.546947 3.19743) (xy -0.547077 3.139329) (xy -0.547349 3.024771) + (xy -0.548748 2.942667) (xy -0.552151 2.886393) (xy -0.558433 2.849326) (xy -0.568471 2.824844) + (xy -0.583139 2.806325) (xy -0.592298 2.797406) (xy -0.655211 2.761466) (xy -0.723864 2.758775) + (xy -0.786152 2.78917) (xy -0.797671 2.800144) (xy -0.814567 2.820779) (xy -0.826286 2.845256) + (xy -0.833767 2.880647) (xy -0.837946 2.934026) (xy -0.839763 3.012466) (xy -0.840154 3.120617) + (xy -0.840154 3.39587) (xy -0.901685 3.41732) (xy -0.945387 3.431912) (xy -0.969364 3.438706) + (xy -0.97007 3.438769) (xy -0.971874 3.420069) (xy -0.9735 3.367322) (xy -0.974883 3.285557) + (xy -0.975958 3.179805) (xy -0.97666 3.055094) (xy -0.976923 2.916455) (xy -0.976923 2.381806) + (xy -0.849923 2.328236) (xy -0.840154 2.49212)) (layer F.SilkS) (width 0.01)) + (fp_poly (pts (xy 0.053501 2.626303) (xy 0.13006 2.654733) (xy 0.130936 2.655279) (xy 0.178285 2.690127) + (xy 0.213241 2.730852) (xy 0.237825 2.783925) (xy 0.254062 2.855814) (xy 0.263975 2.952992) + (xy 0.269586 3.081928) (xy 0.270077 3.100298) (xy 0.277141 3.377287) (xy 0.217695 3.408028) + (xy 0.174681 3.428802) (xy 0.14871 3.438646) (xy 0.147509 3.438769) (xy 0.143014 3.420606) + (xy 0.139444 3.371612) (xy 0.137248 3.300031) (xy 0.136769 3.242068) (xy 0.136758 3.14817) + (xy 0.132466 3.089203) (xy 0.117503 3.061079) (xy 0.085482 3.059706) (xy 0.030014 3.080998) + (xy -0.053731 3.120136) (xy -0.115311 3.152643) (xy -0.146983 3.180845) (xy -0.156294 3.211582) + (xy -0.156308 3.213104) (xy -0.140943 3.266054) (xy -0.095453 3.29466) (xy -0.025834 3.298803) + (xy 0.024313 3.298084) (xy 0.050754 3.312527) (xy 0.067243 3.347218) (xy 0.076733 3.391416) + (xy 0.063057 3.416493) (xy 0.057907 3.420082) (xy 0.009425 3.434496) (xy -0.058469 3.436537) + (xy -0.128388 3.426983) (xy -0.177932 3.409522) (xy -0.24643 3.351364) (xy -0.285366 3.270408) + (xy -0.293077 3.20716) (xy -0.287193 3.150111) (xy -0.265899 3.103542) (xy -0.223735 3.062181) + (xy -0.155241 3.020755) (xy -0.054956 2.973993) (xy -0.048846 2.97135) (xy 0.04149 2.929617) + (xy 0.097235 2.895391) (xy 0.121129 2.864635) (xy 0.115913 2.833311) (xy 0.084328 2.797383) + (xy 0.074883 2.789116) (xy 0.011617 2.757058) (xy -0.053936 2.758407) (xy -0.111028 2.789838) + (xy -0.148907 2.848024) (xy -0.152426 2.859446) (xy -0.1867 2.914837) (xy -0.230191 2.941518) + (xy -0.293077 2.96796) (xy -0.293077 2.899548) (xy -0.273948 2.80011) (xy -0.217169 2.708902) + (xy -0.187622 2.678389) (xy -0.120458 2.639228) (xy -0.035044 2.6215) (xy 0.053501 2.626303)) (layer F.SilkS) (width 0.01)) + (fp_poly (pts (xy 0.713362 2.62467) (xy 0.802117 2.657421) (xy 0.874022 2.71535) (xy 0.902144 2.756128) + (xy 0.932802 2.830954) (xy 0.932165 2.885058) (xy 0.899987 2.921446) (xy 0.888081 2.927633) + (xy 0.836675 2.946925) (xy 0.810422 2.941982) (xy 0.80153 2.909587) (xy 0.801077 2.891692) + (xy 0.784797 2.825859) (xy 0.742365 2.779807) (xy 0.683388 2.757564) (xy 0.617475 2.763161) + (xy 0.563895 2.792229) (xy 0.545798 2.80881) (xy 0.532971 2.828925) (xy 0.524306 2.859332) + (xy 0.518696 2.906788) (xy 0.515035 2.97805) (xy 0.512215 3.079875) (xy 0.511484 3.112115) + (xy 0.50882 3.22241) (xy 0.505792 3.300036) (xy 0.50125 3.351396) (xy 0.494046 3.38289) + (xy 0.483033 3.40092) (xy 0.46706 3.411888) (xy 0.456834 3.416733) (xy 0.413406 3.433301) + (xy 0.387842 3.438769) (xy 0.379395 3.420507) (xy 0.374239 3.365296) (xy 0.372346 3.272499) + (xy 0.373689 3.141478) (xy 0.374107 3.121269) (xy 0.377058 3.001733) (xy 0.380548 2.914449) + (xy 0.385514 2.852591) (xy 0.392893 2.809336) (xy 0.403624 2.77786) (xy 0.418645 2.751339) + (xy 0.426502 2.739975) (xy 0.471553 2.689692) (xy 0.52194 2.650581) (xy 0.528108 2.647167) + (xy 0.618458 2.620212) (xy 0.713362 2.62467)) (layer F.SilkS) (width 0.01)) + (fp_poly (pts (xy 1.602081 2.780289) (xy 1.601833 2.92632) (xy 1.600872 3.038655) (xy 1.598794 3.122678) + (xy 1.595193 3.183769) (xy 1.589665 3.227309) (xy 1.581804 3.258679) (xy 1.571207 3.283262) + (xy 1.563182 3.297294) (xy 1.496728 3.373388) (xy 1.41247 3.421084) (xy 1.319249 3.438199) + (xy 1.2259 3.422546) (xy 1.170312 3.394418) (xy 1.111957 3.34576) (xy 1.072186 3.286333) + (xy 1.04819 3.208507) (xy 1.037161 3.104652) (xy 1.035599 3.028462) (xy 1.035809 3.022986) + (xy 1.172308 3.022986) (xy 1.173141 3.110355) (xy 1.176961 3.168192) (xy 1.185746 3.206029) + (xy 1.201474 3.233398) (xy 1.220266 3.254042) (xy 1.283375 3.29389) (xy 1.351137 3.297295) + (xy 1.415179 3.264025) (xy 1.420164 3.259517) (xy 1.441439 3.236067) (xy 1.454779 3.208166) + (xy 1.462001 3.166641) (xy 1.464923 3.102316) (xy 1.465385 3.0312) (xy 1.464383 2.941858) + (xy 1.460238 2.882258) (xy 1.451236 2.843089) (xy 1.435667 2.81504) (xy 1.422902 2.800144) + (xy 1.3636 2.762575) (xy 1.295301 2.758057) (xy 1.23011 2.786753) (xy 1.217528 2.797406) + (xy 1.196111 2.821063) (xy 1.182744 2.849251) (xy 1.175566 2.891245) (xy 1.172719 2.956319) + (xy 1.172308 3.022986) (xy 1.035809 3.022986) (xy 1.040322 2.905765) (xy 1.056362 2.813577) + (xy 1.086528 2.744269) (xy 1.133629 2.690211) (xy 1.170312 2.662505) (xy 1.23699 2.632572) + (xy 1.314272 2.618678) (xy 1.38611 2.622397) (xy 1.426308 2.6374) (xy 1.442082 2.64167) + (xy 1.45255 2.62575) (xy 1.459856 2.583089) (xy 1.465385 2.518106) (xy 1.471437 2.445732) + (xy 1.479844 2.402187) (xy 1.495141 2.377287) (xy 1.521864 2.360845) (xy 1.538654 2.353564) + (xy 1.602154 2.326963) (xy 1.602081 2.780289)) (layer F.SilkS) (width 0.01)) + (fp_poly (pts (xy 2.395929 2.636662) (xy 2.398911 2.688068) (xy 2.401247 2.766192) (xy 2.402749 2.864857) + (xy 2.403231 2.968343) (xy 2.403231 3.318533) (xy 2.341401 3.380363) (xy 2.298793 3.418462) + (xy 2.26139 3.433895) (xy 2.21027 3.432918) (xy 2.189978 3.430433) (xy 2.126554 3.4232) + (xy 2.074095 3.419055) (xy 2.061308 3.418672) (xy 2.018199 3.421176) (xy 1.956544 3.427462) + (xy 1.932638 3.430433) (xy 1.873922 3.435028) (xy 1.834464 3.425046) (xy 1.795338 3.394228) + (xy 1.781215 3.380363) (xy 1.719385 3.318533) (xy 1.719385 2.663503) (xy 1.76915 2.640829) + (xy 1.812002 2.624034) (xy 1.837073 2.618154) (xy 1.843501 2.636736) (xy 1.849509 2.688655) + (xy 1.854697 2.768172) (xy 1.858664 2.869546) (xy 1.860577 2.955192) (xy 1.865923 3.292231) + (xy 1.91256 3.298825) (xy 1.954976 3.294214) (xy 1.97576 3.279287) (xy 1.98157 3.251377) + (xy 1.98653 3.191925) (xy 1.990246 3.108466) (xy 1.992324 3.008532) (xy 1.992624 2.957104) + (xy 1.992923 2.661054) (xy 2.054454 2.639604) (xy 2.098004 2.62502) (xy 2.121694 2.618219) + (xy 2.122377 2.618154) (xy 2.124754 2.636642) (xy 2.127366 2.687906) (xy 2.129995 2.765649) + (xy 2.132421 2.863574) (xy 2.134115 2.955192) (xy 2.139461 3.292231) (xy 2.256692 3.292231) + (xy 2.262072 2.984746) (xy 2.267451 2.677261) (xy 2.324601 2.647707) (xy 2.366797 2.627413) + (xy 2.39177 2.618204) (xy 2.392491 2.618154) (xy 2.395929 2.636662)) (layer F.SilkS) (width 0.01)) + (fp_poly (pts (xy 2.887333 2.633528) (xy 2.94359 2.659117) (xy 2.987747 2.690124) (xy 3.020101 2.724795) + (xy 3.042438 2.76952) (xy 3.056546 2.830692) (xy 3.064211 2.914701) (xy 3.06722 3.02794) + (xy 3.067538 3.102509) (xy 3.067538 3.39342) (xy 3.017773 3.416095) (xy 2.978576 3.432667) + (xy 2.959157 3.438769) (xy 2.955442 3.42061) (xy 2.952495 3.371648) (xy 2.950691 3.300153) + (xy 2.950308 3.243385) (xy 2.948661 3.161371) (xy 2.944222 3.096309) (xy 2.93774 3.056467) + (xy 2.93259 3.048) (xy 2.897977 3.056646) (xy 2.84364 3.078823) (xy 2.780722 3.108886) + (xy 2.720368 3.141192) (xy 2.673721 3.170098) (xy 2.651926 3.189961) (xy 2.651839 3.190175) + (xy 2.653714 3.226935) (xy 2.670525 3.262026) (xy 2.700039 3.290528) (xy 2.743116 3.300061) + (xy 2.779932 3.29895) (xy 2.832074 3.298133) (xy 2.859444 3.310349) (xy 2.875882 3.342624) + (xy 2.877955 3.34871) (xy 2.885081 3.394739) (xy 2.866024 3.422687) (xy 2.816353 3.436007) + (xy 2.762697 3.43847) (xy 2.666142 3.42021) (xy 2.616159 3.394131) (xy 2.554429 3.332868) + (xy 2.52169 3.25767) (xy 2.518753 3.178211) (xy 2.546424 3.104167) (xy 2.588047 3.057769) + (xy 2.629604 3.031793) (xy 2.694922 2.998907) (xy 2.771038 2.965557) (xy 2.783726 2.960461) + (xy 2.867333 2.923565) (xy 2.91553 2.891046) (xy 2.93103 2.858718) (xy 2.91655 2.822394) + (xy 2.891692 2.794) (xy 2.832939 2.759039) (xy 2.768293 2.756417) (xy 2.709008 2.783358) + (xy 2.666339 2.837088) (xy 2.660739 2.85095) (xy 2.628133 2.901936) (xy 2.58053 2.939787) + (xy 2.520461 2.97085) (xy 2.520461 2.882768) (xy 2.523997 2.828951) (xy 2.539156 2.786534) + (xy 2.572768 2.741279) (xy 2.605035 2.70642) (xy 2.655209 2.657062) (xy 2.694193 2.630547) + (xy 2.736064 2.619911) (xy 2.78346 2.618154) (xy 2.887333 2.633528)) (layer F.SilkS) (width 0.01)) + (fp_poly (pts (xy 3.570807 2.636782) (xy 3.594161 2.646988) (xy 3.649902 2.691134) (xy 3.697569 2.754967) + (xy 3.727048 2.823087) (xy 3.731846 2.85667) (xy 3.71576 2.903556) (xy 3.680475 2.928365) + (xy 3.642644 2.943387) (xy 3.625321 2.946155) (xy 3.616886 2.926066) (xy 3.60023 2.882351) + (xy 3.592923 2.862598) (xy 3.551948 2.794271) (xy 3.492622 2.760191) (xy 3.416552 2.761239) + (xy 3.410918 2.762581) (xy 3.370305 2.781836) (xy 3.340448 2.819375) (xy 3.320055 2.879809) + (xy 3.307836 2.967751) (xy 3.3025 3.087813) (xy 3.302 3.151698) (xy 3.301752 3.252403) + (xy 3.300126 3.321054) (xy 3.295801 3.364673) (xy 3.287454 3.390282) (xy 3.273765 3.404903) + (xy 3.253411 3.415558) (xy 3.252234 3.416095) (xy 3.213038 3.432667) (xy 3.193619 3.438769) + (xy 3.190635 3.420319) (xy 3.188081 3.369323) (xy 3.18614 3.292308) (xy 3.184997 3.195805) + (xy 3.184769 3.125184) (xy 3.185932 2.988525) (xy 3.190479 2.884851) (xy 3.199999 2.808108) + (xy 3.216081 2.752246) (xy 3.240313 2.711212) (xy 3.274286 2.678954) (xy 3.307833 2.65644) + (xy 3.388499 2.626476) (xy 3.482381 2.619718) (xy 3.570807 2.636782)) (layer F.SilkS) (width 0.01)) + (fp_poly (pts (xy 4.245224 2.647838) (xy 4.322528 2.698361) (xy 4.359814 2.74359) (xy 4.389353 2.825663) + (xy 4.391699 2.890607) (xy 4.386385 2.977445) (xy 4.186115 3.065103) (xy 4.088739 3.109887) + (xy 4.025113 3.145913) (xy 3.992029 3.177117) (xy 3.98628 3.207436) (xy 4.004658 3.240805) + (xy 4.024923 3.262923) (xy 4.083889 3.298393) (xy 4.148024 3.300879) (xy 4.206926 3.273235) + (xy 4.250197 3.21832) (xy 4.257936 3.198928) (xy 4.295006 3.138364) (xy 4.337654 3.112552) + (xy 4.396154 3.090471) (xy 4.396154 3.174184) (xy 4.390982 3.23115) (xy 4.370723 3.279189) + (xy 4.328262 3.334346) (xy 4.321951 3.341514) (xy 4.27472 3.390585) (xy 4.234121 3.41692) + (xy 4.183328 3.429035) (xy 4.14122 3.433003) (xy 4.065902 3.433991) (xy 4.012286 3.421466) + (xy 3.978838 3.402869) (xy 3.926268 3.361975) (xy 3.889879 3.317748) (xy 3.86685 3.262126) + (xy 3.854359 3.187047) (xy 3.849587 3.084449) (xy 3.849206 3.032376) (xy 3.850501 2.969948) + (xy 3.968471 2.969948) (xy 3.969839 3.003438) (xy 3.973249 3.008923) (xy 3.995753 3.001472) + (xy 4.044182 2.981753) (xy 4.108908 2.953718) (xy 4.122443 2.947692) (xy 4.204244 2.906096) + (xy 4.249312 2.869538) (xy 4.259217 2.835296) (xy 4.235526 2.800648) (xy 4.21596 2.785339) + (xy 4.14536 2.754721) (xy 4.07928 2.75978) (xy 4.023959 2.797151) (xy 3.985636 2.863473) + (xy 3.973349 2.916116) (xy 3.968471 2.969948) (xy 3.850501 2.969948) (xy 3.85173 2.91072) + (xy 3.861032 2.82071) (xy 3.87946 2.755167) (xy 3.90936 2.706912) (xy 3.95308 2.668767) + (xy 3.972141 2.65644) (xy 4.058726 2.624336) (xy 4.153522 2.622316) (xy 4.245224 2.647838)) (layer F.SilkS) (width 0.01)) + (fp_poly (pts (xy 0.139878 -3.712224) (xy 0.245612 -3.711645) (xy 0.322132 -3.710078) (xy 0.374372 -3.707028) + (xy 0.407263 -3.702004) (xy 0.425737 -3.694511) (xy 0.434727 -3.684056) (xy 0.439163 -3.670147) + (xy 0.439594 -3.668346) (xy 0.446333 -3.635855) (xy 0.458808 -3.571748) (xy 0.475719 -3.482849) + (xy 0.495771 -3.375981) (xy 0.517664 -3.257967) (xy 0.518429 -3.253822) (xy 0.540359 -3.138169) + (xy 0.560877 -3.035986) (xy 0.578659 -2.953402) (xy 0.592381 -2.896544) (xy 0.600718 -2.871542) + (xy 0.601116 -2.871099) (xy 0.625677 -2.85889) (xy 0.676315 -2.838544) (xy 0.742095 -2.814455) + (xy 0.742461 -2.814326) (xy 0.825317 -2.783182) (xy 0.923 -2.743509) (xy 1.015077 -2.703619) + (xy 1.019434 -2.701647) (xy 1.169407 -2.63358) (xy 1.501498 -2.860361) (xy 1.603374 -2.929496) + (xy 1.695657 -2.991303) (xy 1.773003 -3.042267) (xy 1.830064 -3.078873) (xy 1.861495 -3.097606) + (xy 1.864479 -3.098996) (xy 1.887321 -3.09281) (xy 1.929982 -3.062965) (xy 1.994128 -3.008053) + (xy 2.081421 -2.926666) (xy 2.170535 -2.840078) (xy 2.256441 -2.754753) (xy 2.333327 -2.676892) + (xy 2.396564 -2.611303) (xy 2.441523 -2.562795) (xy 2.463576 -2.536175) (xy 2.464396 -2.534805) + (xy 2.466834 -2.516537) (xy 2.45765 -2.486705) (xy 2.434574 -2.441279) (xy 2.395337 -2.37623) + (xy 2.33767 -2.28753) (xy 2.260795 -2.173343) (xy 2.19257 -2.072838) (xy 2.131582 -1.982697) + (xy 2.081356 -1.908151) (xy 2.045416 -1.854435) (xy 2.027287 -1.826782) (xy 2.026146 -1.824905) + (xy 2.028359 -1.79841) (xy 2.045138 -1.746914) (xy 2.073142 -1.680149) (xy 2.083122 -1.658828) + (xy 2.126672 -1.563841) (xy 2.173134 -1.456063) (xy 2.210877 -1.362808) (xy 2.238073 -1.293594) + (xy 2.259675 -1.240994) (xy 2.272158 -1.213503) (xy 2.273709 -1.211384) (xy 2.296668 -1.207876) + (xy 2.350786 -1.198262) (xy 2.428868 -1.183911) (xy 2.523719 -1.166193) (xy 2.628143 -1.146475) + (xy 2.734944 -1.126126) (xy 2.836926 -1.106514) (xy 2.926894 -1.089009) (xy 2.997653 -1.074978) + (xy 3.042006 -1.065791) (xy 3.052885 -1.063193) (xy 3.064122 -1.056782) (xy 3.072605 -1.042303) + (xy 3.078714 -1.014867) (xy 3.082832 -0.969589) (xy 3.085341 -0.90158) (xy 3.086621 -0.805953) + (xy 3.087054 -0.67782) (xy 3.087077 -0.625299) (xy 3.087077 -0.198155) (xy 2.9845 -0.177909) + (xy 2.927431 -0.16693) (xy 2.842269 -0.150905) (xy 2.739372 -0.131767) (xy 2.629096 -0.111449) + (xy 2.598615 -0.105868) (xy 2.496855 -0.086083) (xy 2.408205 -0.066627) (xy 2.340108 -0.049303) + (xy 2.300004 -0.035912) (xy 2.293323 -0.031921) (xy 2.276919 -0.003658) (xy 2.253399 0.051109) + (xy 2.227316 0.121588) (xy 2.222142 0.136769) (xy 2.187956 0.230896) (xy 2.145523 0.337101) + (xy 2.103997 0.432473) (xy 2.103792 0.432916) (xy 2.03464 0.582525) (xy 2.489512 1.251617) + (xy 2.1975 1.544116) (xy 2.10918 1.63117) (xy 2.028625 1.707909) (xy 1.96036 1.770237) + (xy 1.908908 1.814056) (xy 1.878794 1.83527) (xy 1.874474 1.836616) (xy 1.849111 1.826016) + (xy 1.797358 1.796547) (xy 1.724868 1.751705) (xy 1.637294 1.694984) (xy 1.542612 1.631462) + (xy 1.446516 1.566668) (xy 1.360837 1.510287) (xy 1.291016 1.465788) (xy 1.242494 1.436639) + (xy 1.220782 1.426308) (xy 1.194293 1.43505) (xy 1.144062 1.458087) (xy 1.080451 1.490631) + (xy 1.073708 1.494249) (xy 0.988046 1.53721) (xy 0.929306 1.558279) (xy 0.892772 1.558503) + (xy 0.873731 1.538928) (xy 0.87362 1.538654) (xy 0.864102 1.515472) (xy 0.841403 1.460441) + (xy 0.807282 1.377822) (xy 0.7635 1.271872) (xy 0.711816 1.146852) (xy 0.653992 1.00702) + (xy 0.597991 0.871637) (xy 0.536447 0.722234) (xy 0.479939 0.583832) (xy 0.430161 0.460673) + (xy 0.388806 0.357002) (xy 0.357568 0.277059) (xy 0.338141 0.225088) (xy 0.332154 0.205692) + (xy 0.347168 0.183443) (xy 0.386439 0.147982) (xy 0.438807 0.108887) (xy 0.587941 -0.014755) + (xy 0.704511 -0.156478) (xy 0.787118 -0.313296) (xy 0.834366 -0.482225) (xy 0.844857 -0.660278) + (xy 0.837231 -0.742461) (xy 0.795682 -0.912969) (xy 0.724123 -1.063541) (xy 0.626995 -1.192691) + (xy 0.508734 -1.298936) (xy 0.37378 -1.38079) (xy 0.226571 -1.436768) (xy 0.071544 -1.465385) + (xy -0.086861 -1.465156) (xy -0.244206 -1.434595) (xy -0.396054 -1.372218) (xy -0.537965 -1.27654) + (xy -0.597197 -1.222428) (xy -0.710797 -1.08348) (xy -0.789894 -0.931639) (xy -0.835014 -0.771333) + (xy -0.846684 -0.606988) (xy -0.825431 -0.443029) (xy -0.77178 -0.283882) (xy -0.68626 -0.133975) + (xy -0.569395 0.002267) (xy -0.438807 0.108887) (xy -0.384412 0.149642) (xy -0.345986 0.184718) + (xy -0.332154 0.205726) (xy -0.339397 0.228635) (xy -0.359995 0.283365) (xy -0.392254 0.365672) + (xy -0.434479 0.471315) (xy -0.484977 0.59605) (xy -0.542052 0.735636) (xy -0.598146 0.87167) + (xy -0.660033 1.021201) (xy -0.717356 1.159767) (xy -0.768356 1.283107) (xy -0.811273 1.386964) + (xy -0.844347 1.46708) (xy -0.865819 1.519195) (xy -0.873775 1.538654) (xy -0.892571 1.558423) + (xy -0.928926 1.558365) (xy -0.987521 1.537441) (xy -1.073032 1.494613) (xy -1.073708 1.494249) + (xy -1.138093 1.461012) (xy -1.190139 1.436802) (xy -1.219488 1.426404) (xy -1.220783 1.426308) + (xy -1.242876 1.436855) (xy -1.291652 1.466184) (xy -1.361669 1.510827) (xy -1.447486 1.567314) + (xy -1.542612 1.631462) (xy -1.63946 1.696411) (xy -1.726747 1.752896) (xy -1.798819 1.797421) + (xy -1.850023 1.82649) (xy -1.874474 1.836616) (xy -1.89699 1.823307) (xy -1.942258 1.786112) + (xy -2.005756 1.729128) (xy -2.082961 1.656449) (xy -2.169349 1.572171) (xy -2.197601 1.544016) + (xy -2.489713 1.251416) (xy -2.267369 0.925104) (xy -2.199798 0.824897) (xy -2.140493 0.734963) + (xy -2.092783 0.66051) (xy -2.059993 0.606751) (xy -2.045452 0.578894) (xy -2.045026 0.576912) + (xy -2.052692 0.550655) (xy -2.073311 0.497837) (xy -2.103315 0.42731) (xy -2.124375 0.380093) + (xy -2.163752 0.289694) (xy -2.200835 0.198366) (xy -2.229585 0.1212) (xy -2.237395 0.097692) + (xy -2.259583 0.034916) (xy -2.281273 -0.013589) (xy -2.293187 -0.031921) (xy -2.319477 -0.043141) + (xy -2.376858 -0.059046) (xy -2.457882 -0.077833) (xy -2.555105 -0.097701) (xy -2.598615 -0.105868) + (xy -2.709104 -0.126171) (xy -2.815084 -0.14583) (xy -2.906199 -0.162912) (xy -2.972092 -0.175482) + (xy -2.9845 -0.177909) (xy -3.087077 -0.198155) (xy -3.087077 -0.625299) (xy -3.086847 -0.765754) + (xy -3.085901 -0.872021) (xy -3.083859 -0.948987) (xy -3.080338 -1.00154) (xy -3.074957 -1.034567) + (xy -3.067334 -1.052955) (xy -3.057088 -1.061592) (xy -3.052885 -1.063193) (xy -3.02753 -1.068873) + (xy -2.971516 -1.080205) (xy -2.892036 -1.095821) (xy -2.796288 -1.114353) (xy -2.691467 -1.134431) + (xy -2.584768 -1.154688) (xy -2.483387 -1.173754) (xy -2.394521 -1.190261) (xy -2.325363 -1.202841) + (xy -2.283111 -1.210125) (xy -2.27371 -1.211384) (xy -2.265193 -1.228237) (xy -2.24634 -1.27313) + (xy -2.220676 -1.33757) (xy -2.210877 -1.362808) (xy -2.171352 -1.460314) (xy -2.124808 -1.568041) + (xy -2.083123 -1.658828) (xy -2.05245 -1.728247) (xy -2.032044 -1.78529) (xy -2.025232 -1.820223) + (xy -2.026318 -1.824905) (xy -2.040715 -1.847009) (xy -2.073588 -1.896169) (xy -2.12141 -1.967152) + (xy -2.180652 -2.054722) (xy -2.247785 -2.153643) (xy -2.261059 -2.17317) (xy -2.338954 -2.28886) + (xy -2.396213 -2.376956) (xy -2.435119 -2.441514) (xy -2.457956 -2.486589) (xy -2.467006 -2.516237) + (xy -2.464552 -2.534515) (xy -2.464489 -2.534631) (xy -2.445173 -2.558639) (xy -2.402449 -2.605053) + (xy -2.340949 -2.669063) (xy -2.265302 -2.745855) (xy -2.180139 -2.830618) (xy -2.170535 -2.840078) + (xy -2.06321 -2.944011) (xy -1.980385 -3.020325) (xy -1.920395 -3.070429) (xy -1.881577 -3.09573) + (xy -1.86448 -3.098996) (xy -1.839527 -3.08475) (xy -1.787745 -3.051844) (xy -1.71448 -3.003792) + (xy -1.62508 -2.94411) (xy -1.524889 -2.876312) (xy -1.501499 -2.860361) (xy -1.169407 -2.63358) + (xy -1.019435 -2.701647) (xy -0.92823 -2.741315) (xy -0.830331 -2.781209) (xy -0.746169 -2.813017) + (xy -0.742462 -2.814326) (xy -0.676631 -2.838424) (xy -0.625884 -2.8588) (xy -0.601158 -2.871064) + (xy -0.601116 -2.871099) (xy -0.593271 -2.893266) (xy -0.579934 -2.947783) (xy -0.56243 -3.02852) + (xy -0.542083 -3.12935) (xy -0.520218 -3.244144) (xy -0.518429 -3.253822) (xy -0.496496 -3.372096) + (xy -0.47636 -3.479458) (xy -0.45932 -3.569083) (xy -0.446672 -3.634149) (xy -0.439716 -3.667832) + (xy -0.439594 -3.668346) (xy -0.435361 -3.682675) (xy -0.427129 -3.693493) (xy -0.409967 -3.701294) + (xy -0.378942 -3.706571) (xy -0.329122 -3.709818) (xy -0.255576 -3.711528) (xy -0.153371 -3.712193) + (xy -0.017575 -3.712307) (xy 0 -3.712308) (xy 0.139878 -3.712224)) (layer F.SilkS) (width 0.01)) + ) + + (module Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder (layer F.Cu) (tedit 5F68FEEF) (tstamp 6011B94B) + (at 255.539 62.747) + (descr "Capacitor SMD 1206 (3216 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") + (tags "capacitor handsolder") + (path /601CF5F2) + (attr smd) + (fp_text reference C4 (at -0.127 2.111) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 100nF (at 0 1.85) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.6 0.8) (end -1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -1.6 -0.8) (end 1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 -0.8) (end 1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 0.8) (end -1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -0.711252 -0.91) (end 0.711252 -0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.711252 0.91) (end 0.711252 0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.48 1.15) (end -2.48 -1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.48 -1.15) (end 2.48 -1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.48 -1.15) (end 2.48 1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.48 1.15) (end -2.48 1.15) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 0 0) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (pad 2 smd roundrect (at 1.5625 0) (size 1.325 1.8) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1886769811320755) + (net 1 GND)) + (pad 1 smd roundrect (at -1.5625 0) (size 1.325 1.8) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1886769811320755) + (net 23 +5V)) + (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_1206_3216Metric.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder (layer F.Cu) (tedit 5F68FEEF) (tstamp 6011B98D) + (at 255.539 59.651) + (descr "Capacitor SMD 1206 (3216 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") + (tags "capacitor handsolder") + (path /601CF5F8) + (attr smd) + (fp_text reference C3 (at -0.127 -2.159) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 4.7µF (at 0 1.85) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.6 0.8) (end -1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -1.6 -0.8) (end 1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 -0.8) (end 1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 0.8) (end -1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -0.711252 -0.91) (end 0.711252 -0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.711252 0.91) (end 0.711252 0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.48 1.15) (end -2.48 -1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.48 -1.15) (end 2.48 -1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.48 -1.15) (end 2.48 1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.48 1.15) (end -2.48 1.15) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 0 0) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (pad 2 smd roundrect (at 1.5625 0) (size 1.325 1.8) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1886769811320755) + (net 1 GND)) + (pad 1 smd roundrect (at -1.5625 0) (size 1.325 1.8) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1886769811320755) + (net 23 +5V)) + (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_1206_3216Metric.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder (layer F.Cu) (tedit 5F68FEEF) (tstamp 6011B9BD) + (at 242.966 59.73 180) + (descr "Capacitor SMD 1206 (3216 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") + (tags "capacitor handsolder") + (path /601D17B5) + (attr smd) + (fp_text reference C8 (at 0.127 2.111) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 4.7µF (at 0 1.85) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.6 0.8) (end -1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -1.6 -0.8) (end 1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 -0.8) (end 1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 0.8) (end -1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -0.711252 -0.91) (end 0.711252 -0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.711252 0.91) (end 0.711252 0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.48 1.15) (end -2.48 -1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.48 -1.15) (end 2.48 -1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.48 -1.15) (end 2.48 1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.48 1.15) (end -2.48 1.15) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 0 0) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (pad 2 smd roundrect (at 1.5625 0 180) (size 1.325 1.8) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1886769811320755) + (net 1 GND)) + (pad 1 smd roundrect (at -1.5625 0 180) (size 1.325 1.8) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1886769811320755) + (net 3 +3V3)) + (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_1206_3216Metric.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder (layer F.Cu) (tedit 5F68FEEF) (tstamp 6011B9ED) + (at 242.966 62.826 180) + (descr "Capacitor SMD 1206 (3216 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") + (tags "capacitor handsolder") + (path /601D17AF) + (attr smd) + (fp_text reference C5 (at 0 -2.032) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 100nF (at 0 1.85) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.6 0.8) (end -1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -1.6 -0.8) (end 1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 -0.8) (end 1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 0.8) (end -1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -0.711252 -0.91) (end 0.711252 -0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.711252 0.91) (end 0.711252 0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.48 1.15) (end -2.48 -1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.48 -1.15) (end 2.48 -1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.48 -1.15) (end 2.48 1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.48 1.15) (end -2.48 1.15) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 0 0) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (pad 2 smd roundrect (at 1.5625 0 180) (size 1.325 1.8) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1886769811320755) + (net 1 GND)) + (pad 1 smd roundrect (at -1.5625 0 180) (size 1.325 1.8) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1886769811320755) + (net 3 +3V3)) + (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_1206_3216Metric.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder (layer F.Cu) (tedit 5F68FEEF) (tstamp 6011BA1D) + (at 221.757 56.984 180) + (descr "Capacitor SMD 1206 (3216 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") + (tags "capacitor handsolder") + (path /602D6D94) + (attr smd) + (fp_text reference C2 (at 0 1.984) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 100nF (at 0 1.85) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.6 0.8) (end -1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -1.6 -0.8) (end 1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 -0.8) (end 1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 0.8) (end -1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -0.711252 -0.91) (end 0.711252 -0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.711252 0.91) (end 0.711252 0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.48 1.15) (end -2.48 -1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.48 -1.15) (end 2.48 -1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.48 -1.15) (end 2.48 1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.48 1.15) (end -2.48 1.15) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 0 0) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (pad 2 smd roundrect (at 1.5625 0 180) (size 1.325 1.8) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1886769811320755) + (net 1 GND)) + (pad 1 smd roundrect (at -1.5625 0 180) (size 1.325 1.8) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1886769811320755) + (net 3 +3V3)) + (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_1206_3216Metric.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder (layer F.Cu) (tedit 5F68FEEF) (tstamp 6011BD47) + (at 221.757 59.778 180) + (descr "Capacitor SMD 1206 (3216 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") + (tags "capacitor handsolder") + (path /602D3A6D) + (attr smd) + (fp_text reference C1 (at 0 -1.85) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 4.7µF (at 0 1.85) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.6 0.8) (end -1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -1.6 -0.8) (end 1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 -0.8) (end 1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 0.8) (end -1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -0.711252 -0.91) (end 0.711252 -0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.711252 0.91) (end 0.711252 0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.48 1.15) (end -2.48 -1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.48 -1.15) (end 2.48 -1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.48 -1.15) (end 2.48 1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.48 1.15) (end -2.48 1.15) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 0 0) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (pad 2 smd roundrect (at 1.5625 0 180) (size 1.325 1.8) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1886769811320755) + (net 1 GND)) + (pad 1 smd roundrect (at -1.5625 0 180) (size 1.325 1.8) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1886769811320755) + (net 3 +3V3)) + (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_1206_3216Metric.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder (layer F.Cu) (tedit 5F68FEEF) (tstamp 6011BD08) + (at 204.7 51.269 180) + (descr "Capacitor SMD 1206 (3216 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") + (tags "capacitor handsolder") + (path /601E7ABB) + (attr smd) + (fp_text reference C6 (at -3.429 -2.413 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 4.7µF (at 0 1.85) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.6 0.8) (end -1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -1.6 -0.8) (end 1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 -0.8) (end 1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 0.8) (end -1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -0.711252 -0.91) (end 0.711252 -0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.711252 0.91) (end 0.711252 0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.48 1.15) (end -2.48 -1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.48 -1.15) (end 2.48 -1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.48 -1.15) (end 2.48 1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.48 1.15) (end -2.48 1.15) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 0 0) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (pad 2 smd roundrect (at 1.5625 0 180) (size 1.325 1.8) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1886769811320755) + (net 1 GND)) + (pad 1 smd roundrect (at -1.5625 0 180) (size 1.325 1.8) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1886769811320755) + (net 3 +3V3)) + (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_1206_3216Metric.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder (layer F.Cu) (tedit 5F68FEEF) (tstamp 6011B59D) + (at 204.7 53.809 180) + (descr "Capacitor SMD 1206 (3216 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") + (tags "capacitor handsolder") + (path /601EC4C2) + (attr smd) + (fp_text reference C7 (at -3.556 2.667 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 100nF (at 0 1.85) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.6 0.8) (end -1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -1.6 -0.8) (end 1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 -0.8) (end 1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 0.8) (end -1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -0.711252 -0.91) (end 0.711252 -0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.711252 0.91) (end 0.711252 0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.48 1.15) (end -2.48 -1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.48 -1.15) (end 2.48 -1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.48 -1.15) (end 2.48 1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.48 1.15) (end -2.48 1.15) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 0 0) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (pad 2 smd roundrect (at 1.5625 0 180) (size 1.325 1.8) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1886769811320755) + (net 1 GND)) + (pad 1 smd roundrect (at -1.5625 0 180) (size 1.325 1.8) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1886769811320755) + (net 3 +3V3)) + (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_1206_3216Metric.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolder (layer F.Cu) (tedit 5F68FEEE) (tstamp 6011B8AF) + (at 249.363 75.637 270) + (descr "Resistor SMD 1206 (3216 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") + (tags "resistor handsolder") + (path /5FFDE894) + (attr smd) + (fp_text reference R2 (at -3.302 0 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 4k7 (at 0 1.82 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.6 0.8) (end -1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -1.6 -0.8) (end 1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 -0.8) (end 1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 0.8) (end -1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -0.727064 -0.91) (end 0.727064 -0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.727064 0.91) (end 0.727064 0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.45 1.12) (end -2.45 -1.12) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.45 -1.12) (end 2.45 -1.12) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.45 -1.12) (end 2.45 1.12) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.45 1.12) (end -2.45 1.12) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 0 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (pad 2 smd roundrect (at 1.55 0 270) (size 1.3 1.75) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1923069230769231) + (net 14 SDA)) + (pad 1 smd roundrect (at -1.55 0 270) (size 1.3 1.75) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1923069230769231) + (net 3 +3V3)) + (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_1206_3216Metric.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolder (layer F.Cu) (tedit 5F68FEEE) (tstamp 6011B84F) + (at 251.903 75.637 270) + (descr "Resistor SMD 1206 (3216 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") + (tags "resistor handsolder") + (path /5FFC59E5) + (attr smd) + (fp_text reference R1 (at -3.302 -0.127 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 4k7 (at 0 1.82 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.6 0.8) (end -1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -1.6 -0.8) (end 1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 -0.8) (end 1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 0.8) (end -1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -0.727064 -0.91) (end 0.727064 -0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.727064 0.91) (end 0.727064 0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.45 1.12) (end -2.45 -1.12) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.45 -1.12) (end 2.45 -1.12) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.45 -1.12) (end 2.45 1.12) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.45 1.12) (end -2.45 1.12) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 0 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (pad 2 smd roundrect (at 1.55 0 270) (size 1.3 1.75) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1923069230769231) + (net 13 SCL)) + (pad 1 smd roundrect (at -1.55 0 270) (size 1.3 1.75) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1923069230769231) + (net 3 +3V3)) + (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_1206_3216Metric.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolder (layer F.Cu) (tedit 5F68FEEE) (tstamp 6011C79F) + (at 235.883 85.763 90) + (descr "Resistor SMD 1206 (3216 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") + (tags "resistor handsolder") + (path /601233DD) + (attr smd) + (fp_text reference R7 (at 3.37 0 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value ?R (at 0 1.82 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.6 0.8) (end -1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -1.6 -0.8) (end 1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 -0.8) (end 1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 0.8) (end -1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -0.727064 -0.91) (end 0.727064 -0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.727064 0.91) (end 0.727064 0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.45 1.12) (end -2.45 -1.12) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.45 -1.12) (end 2.45 -1.12) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.45 -1.12) (end 2.45 1.12) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.45 1.12) (end -2.45 1.12) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 0 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (pad 2 smd roundrect (at 1.55 0 90) (size 1.3 1.75) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1923069230769231) + (net 26 BATT_SENSE)) + (pad 1 smd roundrect (at -1.55 0 90) (size 1.3 1.75) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1923069230769231) + (net 1 GND)) + (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_1206_3216Metric.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolder (layer F.Cu) (tedit 5F68FEEE) (tstamp 6011C76F) + (at 238.718 85.744 270) + (descr "Resistor SMD 1206 (3216 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") + (tags "resistor handsolder") + (path /601233D3) + (attr smd) + (fp_text reference R6 (at -3.344 0.127 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value ?R (at 0 1.82 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.6 0.8) (end -1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -1.6 -0.8) (end 1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 -0.8) (end 1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 0.8) (end -1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -0.727064 -0.91) (end 0.727064 -0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.727064 0.91) (end 0.727064 0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.45 1.12) (end -2.45 -1.12) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.45 -1.12) (end 2.45 -1.12) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.45 -1.12) (end 2.45 1.12) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.45 1.12) (end -2.45 1.12) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 0 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (pad 2 smd roundrect (at 1.55 0 270) (size 1.3 1.75) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1923069230769231) + (net 23 +5V)) + (pad 1 smd roundrect (at -1.55 0 270) (size 1.3 1.75) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1923069230769231) + (net 26 BATT_SENSE)) + (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_1206_3216Metric.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolder (layer F.Cu) (tedit 5F68FEEE) (tstamp 6011B7F2) + (at 223.768 85.7368 270) + (descr "Resistor SMD 1206 (3216 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") + (tags "resistor handsolder") + (path /5FF5B2E5) + (attr smd) + (fp_text reference R3 (at -3.429 0.127 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 480R (at 0 1.82 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.6 0.8) (end -1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -1.6 -0.8) (end 1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 -0.8) (end 1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 0.8) (end -1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -0.727064 -0.91) (end 0.727064 -0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.727064 0.91) (end 0.727064 0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.45 1.12) (end -2.45 -1.12) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.45 -1.12) (end 2.45 -1.12) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.45 -1.12) (end 2.45 1.12) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.45 1.12) (end -2.45 1.12) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 0 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (pad 2 smd roundrect (at 1.55 0 270) (size 1.3 1.75) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1923069230769231) + (net 2 "Net-(D1-Pad2)")) + (pad 1 smd roundrect (at -1.55 0 270) (size 1.3 1.75) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1923069230769231) + (net 4 LED1)) + (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_1206_3216Metric.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolder (layer F.Cu) (tedit 5F68FEEE) (tstamp 6011B7BC) + (at 230.773 85.7462 270) + (descr "Resistor SMD 1206 (3216 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") + (tags "resistor handsolder") + (path /6009A5CC) + (attr smd) + (fp_text reference R4 (at -3.429 0 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value ?R (at 0 1.82 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.6 0.8) (end -1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -1.6 -0.8) (end 1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 -0.8) (end 1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 0.8) (end -1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -0.727064 -0.91) (end 0.727064 -0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.727064 0.91) (end 0.727064 0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.45 1.12) (end -2.45 -1.12) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.45 -1.12) (end 2.45 -1.12) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.45 -1.12) (end 2.45 1.12) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.45 1.12) (end -2.45 1.12) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 0 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (pad 2 smd roundrect (at 1.55 0 270) (size 1.3 1.75) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1923069230769231) + (net 3 +3V3)) + (pad 1 smd roundrect (at -1.55 0 270) (size 1.3 1.75) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1923069230769231) + (net 25 DEVICE_ID)) + (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_1206_3216Metric.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolder (layer F.Cu) (tedit 5F68FEEE) (tstamp 6011B78C) + (at 227.979 85.7462 90) + (descr "Resistor SMD 1206 (3216 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") + (tags "resistor handsolder") + (path /600A5EBF) + (attr smd) + (fp_text reference R5 (at 3.429 0 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value ?R (at 0 1.82 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.6 0.8) (end -1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -1.6 -0.8) (end 1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 -0.8) (end 1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 0.8) (end -1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -0.727064 -0.91) (end 0.727064 -0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.727064 0.91) (end 0.727064 0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.45 1.12) (end -2.45 -1.12) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.45 -1.12) (end 2.45 -1.12) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.45 -1.12) (end 2.45 1.12) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.45 1.12) (end -2.45 1.12) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 0 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (pad 2 smd roundrect (at 1.55 0 90) (size 1.3 1.75) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1923069230769231) + (net 25 DEVICE_ID)) + (pad 1 smd roundrect (at -1.55 0 90) (size 1.3 1.75) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1923069230769231) + (net 1 GND)) + (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_1206_3216Metric.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Connector_PinSocket_2.54mm:PinSocket_1x01_P2.54mm_Vertical (layer F.Cu) (tedit 5A19A434) (tstamp 6011BC27) + (at 216.535 52.451) + (descr "Through hole straight socket strip, 1x01, 2.54mm pitch, single row (from Kicad 4.0.7), script generated") + (tags "Through hole socket strip THT 1x01 2.54mm single row") + (path /60111880) + (fp_text reference ANT (at -2.667 0.043) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Conn_01x01 (at 0 2.77) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.27 -1.27) (end 0.635 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start 0.635 -1.27) (end 1.27 -0.635) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 -0.635) (end 1.27 1.27) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 1.27) (end -1.27 1.27) (layer F.Fab) (width 0.1)) + (fp_line (start -1.27 1.27) (end -1.27 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start -1.33 1.33) (end 1.33 1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.21) (end -1.33 1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.33 1.21) (end 1.33 1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.33 -1.33) (end 1.33 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 0 -1.33) (end 1.33 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.8 -1.8) (end 1.75 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.75 -1.8) (end 1.75 1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.75 1.75) (end -1.8 1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.8 1.75) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 0 0) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 1 thru_hole rect (at 0 0) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 40 "Net-(J6-Pad1)")) + ) + + (module Package_TO_SOT_THT:TO-92_Inline (layer F.Cu) (tedit 5A1DD157) (tstamp 6011BCD3) + (at 248.793 59.817 270) + (descr "TO-92 leads in-line, narrow, oval pads, drill 0.75mm (see NXP sot054_po.pdf)") + (tags "to-92 sc-43 sc-43a sot54 PA33 transistor") + (path /600FF264) + (fp_text reference U1 (at -2.325 -0.0658 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value L78L33_TO92 (at 1.27 2.79 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -0.53 1.85) (end 3.07 1.85) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.5 1.75) (end 3 1.75) (layer F.Fab) (width 0.1)) + (fp_line (start -1.46 -2.73) (end 4 -2.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.46 -2.73) (end -1.46 2.01) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4 2.01) (end 4 -2.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4 2.01) (end -1.46 2.01) (layer F.CrtYd) (width 0.05)) + (fp_arc (start 1.27 0) (end 1.27 -2.6) (angle 135) (layer F.SilkS) (width 0.12)) + (fp_arc (start 1.27 0) (end 1.27 -2.48) (angle -135) (layer F.Fab) (width 0.1)) + (fp_arc (start 1.27 0) (end 1.27 -2.6) (angle -135) (layer F.SilkS) (width 0.12)) + (fp_arc (start 1.27 0) (end 1.27 -2.48) (angle 135) (layer F.Fab) (width 0.1)) + (fp_text user %R (at 1.27 0 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 1 thru_hole rect (at 0 0 270) (size 1.05 1.5) (drill 0.75) (layers *.Cu *.Mask) + (net 3 +3V3)) + (pad 3 thru_hole oval (at 2.54 0 270) (size 1.05 1.5) (drill 0.75) (layers *.Cu *.Mask) + (net 23 +5V)) + (pad 2 thru_hole oval (at 1.27 0 270) (size 1.05 1.5) (drill 0.75) (layers *.Cu *.Mask) + (net 1 GND)) + (model ${KISYS3DMOD}/Package_TO_SOT_THT.3dshapes/TO-92_Inline.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Connector_Wire:SolderWirePad_1x01_SMD_1x2mm (layer F.Cu) (tedit 5DD6EB27) (tstamp 6011BC93) + (at 256.409 71.584 90) + (descr "Wire Pad, Square, SMD Pad, 5mm x 10mm,") + (tags "MesurementPoint Square SMDPad 5mmx10mm ") + (path /601E388E) + (attr virtual) + (fp_text reference J2 (at -3.387 0.181 180) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Conn_01x01 (at 0 2.54 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 0.63 -1.27) (end -0.63 -1.27) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.63 1.27) (end 0.63 -1.27) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.63 1.27) (end 0.63 1.27) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.63 -1.27) (end -0.63 1.27) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.63 -1.27) (end 0.63 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start 0.63 -1.27) (end 0.63 1.27) (layer F.Fab) (width 0.1)) + (fp_line (start 0.63 1.27) (end -0.63 1.27) (layer F.Fab) (width 0.1)) + (fp_line (start -0.63 1.27) (end -0.63 -1.27) (layer F.Fab) (width 0.1)) + (fp_text user %R (at 0 0 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 1 smd roundrect (at 0 0 90) (size 1 2) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 23 +5V)) + ) + + (module Connector_Wire:SolderWirePad_1x01_SMD_1x2mm (layer F.Cu) (tedit 5DD6EB27) (tstamp 6011BBE8) + (at 256.409 69.471 90) + (descr "Wire Pad, Square, SMD Pad, 5mm x 10mm,") + (tags "MesurementPoint Square SMDPad 5mmx10mm ") + (path /601E3EB3) + (attr virtual) + (fp_text reference J5 (at 3.073 0.181 180) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Conn_01x01 (at 0 2.54 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 0.63 -1.27) (end -0.63 -1.27) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.63 1.27) (end 0.63 -1.27) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.63 1.27) (end 0.63 1.27) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.63 -1.27) (end -0.63 1.27) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.63 -1.27) (end 0.63 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start 0.63 -1.27) (end 0.63 1.27) (layer F.Fab) (width 0.1)) + (fp_line (start 0.63 1.27) (end -0.63 1.27) (layer F.Fab) (width 0.1)) + (fp_line (start -0.63 1.27) (end -0.63 -1.27) (layer F.Fab) (width 0.1)) + (fp_text user %R (at 0 0 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 1 smd roundrect (at 0 0 90) (size 1 2) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 1 GND)) + ) + + (module Package_QFP:LQFP-32_7x7mm_P0.8mm (layer F.Cu) (tedit 5D9F72AF) (tstamp 6011BE78) + (at 230.124 67.437 270) + (descr "LQFP, 32 Pin (https://www.nxp.com/docs/en/package-information/SOT358-1.pdf), generated with kicad-footprint-generator ipc_gullwing_generator.py") + (tags "LQFP QFP") + (path /6007BB38) + (attr smd) + (fp_text reference U4 (at 0.0762 -0.0635 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value STM32G071KxT (at 0 5.88 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 3.31 3.61) (end 3.61 3.61) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.61 3.61) (end 3.61 3.31) (layer F.SilkS) (width 0.12)) + (fp_line (start -3.31 3.61) (end -3.61 3.61) (layer F.SilkS) (width 0.12)) + (fp_line (start -3.61 3.61) (end -3.61 3.31) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.31 -3.61) (end 3.61 -3.61) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.61 -3.61) (end 3.61 -3.31) (layer F.SilkS) (width 0.12)) + (fp_line (start -3.31 -3.61) (end -3.61 -3.61) (layer F.SilkS) (width 0.12)) + (fp_line (start -3.61 -3.61) (end -3.61 -3.31) (layer F.SilkS) (width 0.12)) + (fp_line (start -3.61 -3.31) (end -4.925 -3.31) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.5 -3.5) (end 3.5 -3.5) (layer F.Fab) (width 0.1)) + (fp_line (start 3.5 -3.5) (end 3.5 3.5) (layer F.Fab) (width 0.1)) + (fp_line (start 3.5 3.5) (end -3.5 3.5) (layer F.Fab) (width 0.1)) + (fp_line (start -3.5 3.5) (end -3.5 -2.5) (layer F.Fab) (width 0.1)) + (fp_line (start -3.5 -2.5) (end -2.5 -3.5) (layer F.Fab) (width 0.1)) + (fp_line (start 0 -5.18) (end -3.3 -5.18) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 -5.18) (end -3.3 -3.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 -3.75) (end -3.75 -3.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.75 -3.75) (end -3.75 -3.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.75 -3.3) (end -5.18 -3.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.18 -3.3) (end -5.18 0) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0 -5.18) (end 3.3 -5.18) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.3 -5.18) (end 3.3 -3.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.3 -3.75) (end 3.75 -3.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.75 -3.75) (end 3.75 -3.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.75 -3.3) (end 5.18 -3.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start 5.18 -3.3) (end 5.18 0) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0 5.18) (end -3.3 5.18) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 5.18) (end -3.3 3.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 3.75) (end -3.75 3.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.75 3.75) (end -3.75 3.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.75 3.3) (end -5.18 3.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.18 3.3) (end -5.18 0) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0 5.18) (end 3.3 5.18) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.3 5.18) (end 3.3 3.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.3 3.75) (end 3.75 3.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.75 3.75) (end 3.75 3.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.75 3.3) (end 5.18 3.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start 5.18 3.3) (end 5.18 0) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 0 0 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 32 smd roundrect (at -2.8 -4.175 270) (size 0.5 1.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 6 SCK)) + (pad 31 smd roundrect (at -2 -4.175 270) (size 0.5 1.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 29 "Net-(U4-Pad31)")) + (pad 30 smd roundrect (at -1.2 -4.175 270) (size 0.5 1.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 30 "Net-(U4-Pad30)")) + (pad 29 smd roundrect (at -0.4 -4.175 270) (size 0.5 1.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 11 DOUT)) + (pad 28 smd roundrect (at 0.4 -4.175 270) (size 0.5 1.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 31 "Net-(U4-Pad28)")) + (pad 27 smd roundrect (at 1.2 -4.175 270) (size 0.5 1.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 10 BCLK)) + (pad 26 smd roundrect (at 2 -4.175 270) (size 0.5 1.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 12 LRCL_WS)) + (pad 25 smd roundrect (at 2.8 -4.175 270) (size 0.5 1.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 16 SWCLK)) + (pad 24 smd roundrect (at 4.175 -2.8 270) (size 1.5 0.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 15 SWDIO)) + (pad 23 smd roundrect (at 4.175 -2 270) (size 1.5 0.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 14 SDA)) + (pad 22 smd roundrect (at 4.175 -1.2 270) (size 1.5 0.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 13 SCL)) + (pad 21 smd roundrect (at 4.175 -0.4 270) (size 1.5 0.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 32 "Net-(U4-Pad21)")) + (pad 20 smd roundrect (at 4.175 0.4 270) (size 1.5 0.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 24 I²C-ADDRESS)) + (pad 19 smd roundrect (at 4.175 1.2 270) (size 1.5 0.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 33 "Net-(U4-Pad19)")) + (pad 18 smd roundrect (at 4.175 2 270) (size 1.5 0.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 34 "Net-(U4-Pad18)")) + (pad 17 smd roundrect (at 4.175 2.8 270) (size 1.5 0.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 35 "Net-(U4-Pad17)")) + (pad 16 smd roundrect (at 2.8 4.175 270) (size 0.5 1.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 26 BATT_SENSE)) + (pad 15 smd roundrect (at 2 4.175 270) (size 0.5 1.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 7 DIO0)) + (pad 14 smd roundrect (at 1.2 4.175 270) (size 0.5 1.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 28 SPI_RESET)) + (pad 13 smd roundrect (at 0.4 4.175 270) (size 0.5 1.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 4 LED1)) + (pad 12 smd roundrect (at -0.4 4.175 270) (size 0.5 1.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 27 SPI_NSS)) + (pad 11 smd roundrect (at -1.2 4.175 270) (size 0.5 1.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 9 MOSI)) + (pad 10 smd roundrect (at -2 4.175 270) (size 0.5 1.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 8 MISO)) + (pad 9 smd roundrect (at -2.8 4.175 270) (size 0.5 1.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 25 DEVICE_ID)) + (pad 8 smd roundrect (at -4.175 2.8 270) (size 1.5 0.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 17 RX)) + (pad 7 smd roundrect (at -4.175 2 270) (size 1.5 0.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 5 TX)) + (pad 6 smd roundrect (at -4.175 1.2 270) (size 1.5 0.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 36 "Net-(U4-Pad6)")) + (pad 5 smd roundrect (at -4.175 0.4 270) (size 1.5 0.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 1 GND)) + (pad 4 smd roundrect (at -4.175 -0.4 270) (size 1.5 0.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 3 +3V3)) + (pad 3 smd roundrect (at -4.175 -1.2 270) (size 1.5 0.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 37 "Net-(U4-Pad3)")) + (pad 2 smd roundrect (at -4.175 -2 270) (size 1.5 0.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 38 "Net-(U4-Pad2)")) + (pad 1 smd roundrect (at -4.175 -2.8 270) (size 1.5 0.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 39 "Net-(U4-Pad1)")) + (model ${KISYS3DMOD}/Package_QFP.3dshapes/LQFP-32_7x7mm_P0.8mm.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Jumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mm (layer F.Cu) (tedit 5B391E66) (tstamp 6011B68E) + (at 239.868 53.244 180) + (descr "SMD Solder Jumper, 1x1.5mm, rounded Pads, 0.3mm gap, open") + (tags "solder jumper open") + (path /5FF5D896) + (attr virtual) + (fp_text reference JP1 (at 0 2) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Jumper_2_Open (at 0 1.9) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.4 0.3) (end -1.4 -0.3) (layer F.SilkS) (width 0.12)) + (fp_line (start 0.7 1) (end -0.7 1) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.4 -0.3) (end 1.4 0.3) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.7 -1) (end 0.7 -1) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.65 -1.25) (end 1.65 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.65 -1.25) (end -1.65 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.65 1.25) (end 1.65 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.65 1.25) (end -1.65 1.25) (layer F.CrtYd) (width 0.05)) + (fp_arc (start -0.7 -0.3) (end -0.7 -1) (angle -90) (layer F.SilkS) (width 0.12)) + (fp_arc (start -0.7 0.3) (end -1.4 0.3) (angle -90) (layer F.SilkS) (width 0.12)) + (fp_arc (start 0.7 0.3) (end 0.7 1) (angle -90) (layer F.SilkS) (width 0.12)) + (fp_arc (start 0.7 -0.3) (end 1.4 -0.3) (angle -90) (layer F.SilkS) (width 0.12)) + (pad 2 smd custom (at 0.65 0 180) (size 1 0.5) (layers F.Cu F.Mask) + (net 24 I²C-ADDRESS) (zone_connect 2) + (options (clearance outline) (anchor rect)) + (primitives + (gr_circle (center 0 0.25) (end 0.5 0.25) (width 0)) + (gr_circle (center 0 -0.25) (end 0.5 -0.25) (width 0)) + (gr_poly (pts + (xy 0 -0.75) (xy -0.5 -0.75) (xy -0.5 0.75) (xy 0 0.75)) (width 0)) + )) + (pad 1 smd custom (at -0.65 0 180) (size 1 0.5) (layers F.Cu F.Mask) + (net 1 GND) (zone_connect 2) + (options (clearance outline) (anchor rect)) + (primitives + (gr_circle (center 0 0.25) (end 0.5 0.25) (width 0)) + (gr_circle (center 0 -0.25) (end 0.5 -0.25) (width 0)) + (gr_poly (pts + (xy 0 -0.75) (xy 0.5 -0.75) (xy 0.5 0.75) (xy 0 0.75)) (width 0)) + )) + ) + + (module Connector_PinSocket_2.54mm:PinSocket_1x05_P2.54mm_Vertical (layer F.Cu) (tedit 5A19A420) (tstamp 6011B6F8) + (at 223.647 52.578 90) + (descr "Through hole straight socket strip, 1x05, 2.54mm pitch, single row (from Kicad 4.0.7), script generated") + (tags "Through hole socket strip THT 1x05 2.54mm single row") + (path /600AF8B5) + (fp_text reference J4 (at 1.182 -2.779 180) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "Microphone Connector" (at 0 12.93 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.27 -1.27) (end 0.635 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start 0.635 -1.27) (end 1.27 -0.635) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 -0.635) (end 1.27 11.43) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 11.43) (end -1.27 11.43) (layer F.Fab) (width 0.1)) + (fp_line (start -1.27 11.43) (end -1.27 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start -1.33 1.27) (end 1.33 1.27) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.27) (end -1.33 11.49) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 11.49) (end 1.33 11.49) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.33 1.27) (end 1.33 11.49) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.33 -1.33) (end 1.33 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 0 -1.33) (end 1.33 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.8 -1.8) (end 1.75 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.75 -1.8) (end 1.75 11.9) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.75 11.9) (end -1.8 11.9) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.8 11.9) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 0 5.08) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 5 thru_hole oval (at 0 10.16 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 12 LRCL_WS)) + (pad 4 thru_hole oval (at 0 7.62 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 11 DOUT)) + (pad 3 thru_hole oval (at 0 5.08 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 10 BCLK)) + (pad 2 thru_hole oval (at 0 2.54 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 1 GND)) + (pad 1 thru_hole rect (at 0 0 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 3 +3V3)) + ) + + (module Connector_JST:JST_PH_B4B-PH-SM4-TB_1x04-1MP_P2.00mm_Vertical (layer F.Cu) (tedit 5B78AD87) (tstamp 6011B535) + (at 248.332 85.709) + (descr "JST PH series connector, B4B-PH-SM4-TB (http://www.jst-mfg.com/product/pdf/eng/ePH.pdf), generated with kicad-footprint-generator") + (tags "connector JST PH side entry") + (path /5FFACF3F) + (attr smd) + (fp_text reference J3 (at 0 -3.2385) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "I²C IN" (at 0 4.45) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -5.975 0.75) (end 5.975 0.75) (layer F.Fab) (width 0.1)) + (fp_line (start -6.085 0.01) (end -6.085 0.86) (layer F.SilkS) (width 0.12)) + (fp_line (start -6.085 0.86) (end -3.76 0.86) (layer F.SilkS) (width 0.12)) + (fp_line (start -3.76 0.86) (end -3.76 3.25) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.085 0.01) (end 6.085 0.86) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.085 0.86) (end 3.76 0.86) (layer F.SilkS) (width 0.12)) + (fp_line (start -6.085 -3.51) (end -6.085 -4.36) (layer F.SilkS) (width 0.12)) + (fp_line (start -6.085 -4.36) (end 6.085 -4.36) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.085 -4.36) (end 6.085 -3.51) (layer F.SilkS) (width 0.12)) + (fp_line (start -5.975 -4.25) (end 5.975 -4.25) (layer F.Fab) (width 0.1)) + (fp_line (start -5.975 0.75) (end -5.975 -4.25) (layer F.Fab) (width 0.1)) + (fp_line (start 5.975 0.75) (end 5.975 -4.25) (layer F.Fab) (width 0.1)) + (fp_line (start -3.25 -2.75) (end -3.25 -2.25) (layer F.Fab) (width 0.1)) + (fp_line (start -3.25 -2.25) (end -2.75 -2.25) (layer F.Fab) (width 0.1)) + (fp_line (start -2.75 -2.25) (end -2.75 -2.75) (layer F.Fab) (width 0.1)) + (fp_line (start -2.75 -2.75) (end -3.25 -2.75) (layer F.Fab) (width 0.1)) + (fp_line (start -1.25 -2.75) (end -1.25 -2.25) (layer F.Fab) (width 0.1)) + (fp_line (start -1.25 -2.25) (end -0.75 -2.25) (layer F.Fab) (width 0.1)) + (fp_line (start -0.75 -2.25) (end -0.75 -2.75) (layer F.Fab) (width 0.1)) + (fp_line (start -0.75 -2.75) (end -1.25 -2.75) (layer F.Fab) (width 0.1)) + (fp_line (start 0.75 -2.75) (end 0.75 -2.25) (layer F.Fab) (width 0.1)) + (fp_line (start 0.75 -2.25) (end 1.25 -2.25) (layer F.Fab) (width 0.1)) + (fp_line (start 1.25 -2.25) (end 1.25 -2.75) (layer F.Fab) (width 0.1)) + (fp_line (start 1.25 -2.75) (end 0.75 -2.75) (layer F.Fab) (width 0.1)) + (fp_line (start 2.75 -2.75) (end 2.75 -2.25) (layer F.Fab) (width 0.1)) + (fp_line (start 2.75 -2.25) (end 3.25 -2.25) (layer F.Fab) (width 0.1)) + (fp_line (start 3.25 -2.25) (end 3.25 -2.75) (layer F.Fab) (width 0.1)) + (fp_line (start 3.25 -2.75) (end 2.75 -2.75) (layer F.Fab) (width 0.1)) + (fp_line (start -6.7 -4.75) (end -6.7 3.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -6.7 3.75) (end 6.7 3.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 6.7 3.75) (end 6.7 -4.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 6.7 -4.75) (end -6.7 -4.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.5 0.75) (end -3 0.042893) (layer F.Fab) (width 0.1)) + (fp_line (start -3 0.042893) (end -2.5 0.75) (layer F.Fab) (width 0.1)) + (fp_text user %R (at 0 -1) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad MP smd roundrect (at 5.4 -1.75) (size 1.6 3) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.15625)) + (pad MP smd roundrect (at -5.4 -1.75) (size 1.6 3) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.15625)) + (pad 4 smd roundrect (at 3 0.5) (size 1 5.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 13 SCL)) + (pad 3 smd roundrect (at 1 0.5) (size 1 5.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 14 SDA)) + (pad 2 smd roundrect (at -1 0.5) (size 1 5.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 23 +5V)) + (pad 1 smd roundrect (at -3 0.5) (size 1 5.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 1 GND)) + (model ${KISYS3DMOD}/Connector_JST.3dshapes/JST_PH_B4B-PH-SM4-TB_1x04-1MP_P2.00mm_Vertical.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + (model ${KISYS3DMOD}/Connector_JST.3dshapes/JST_PH_S4B-PH-K_1x04_P2.00mm_Horizontal.wrl + (offset (xyz -3 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 90 0 0)) + ) + ) + + (module Connector_PinHeader_2.54mm:PinHeader_2x03_P2.54mm_Vertical (layer F.Cu) (tedit 59FED5CC) (tstamp 6011B5DB) + (at 206.489 81.583) + (descr "Through hole straight pin header, 2x03, 2.54mm pitch, double rows") + (tags "Through hole pin header THT 2x03 2.54mm double row") + (path /5FF594B6) + (fp_text reference J1 (at 3.25 7.62) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Debug/USART (at 1.27 7.41) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 0 -1.27) (end 3.81 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start 3.81 -1.27) (end 3.81 6.35) (layer F.Fab) (width 0.1)) + (fp_line (start 3.81 6.35) (end -1.27 6.35) (layer F.Fab) (width 0.1)) + (fp_line (start -1.27 6.35) (end -1.27 0) (layer F.Fab) (width 0.1)) + (fp_line (start -1.27 0) (end 0 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start -1.33 6.41) (end 3.87 6.41) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.27) (end -1.33 6.41) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.87 -1.33) (end 3.87 6.41) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.27) (end 1.27 1.27) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.27 1.27) (end 1.27 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.27 -1.33) (end 3.87 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 0) (end -1.33 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 -1.33) (end 0 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.8 -1.8) (end -1.8 6.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.8 6.85) (end 4.35 6.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.35 6.85) (end 4.35 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.35 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 1.27 2.54 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 6 thru_hole oval (at 2.54 5.08) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 16 SWCLK)) + (pad 5 thru_hole oval (at 0 5.08) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 15 SWDIO)) + (pad 4 thru_hole oval (at 2.54 2.54) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 5 TX)) + (pad 3 thru_hole oval (at 0 2.54) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 1 GND)) + (pad 2 thru_hole oval (at 2.54 0) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 17 RX)) + (pad 1 thru_hole rect (at 0 0) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 3 +3V3)) + (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_2x03_P2.54mm_Vertical.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED_THT:LED_D3.0mm (layer F.Cu) (tedit 587A3A7B) (tstamp 6011B4D3) + (at 218.075 86.095) + (descr "LED, diameter 3.0mm, 2 pins") + (tags "LED diameter 3.0mm 2 pins") + (path /5FF59892) + (fp_text reference D1 (at 1.287 3.126) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value LED (at 1.27 2.96) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 1.27 0) (end 2.77 0) (layer F.Fab) (width 0.1)) + (fp_line (start -0.23 -1.16619) (end -0.23 1.16619) (layer F.Fab) (width 0.1)) + (fp_line (start -0.29 -1.236) (end -0.29 -1.08) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.29 1.08) (end -0.29 1.236) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.15 -2.25) (end -1.15 2.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.15 2.25) (end 3.7 2.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.7 2.25) (end 3.7 -2.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.7 -2.25) (end -1.15 -2.25) (layer F.CrtYd) (width 0.05)) + (fp_arc (start 1.27 0) (end 0.229039 1.08) (angle -87.9) (layer F.SilkS) (width 0.12)) + (fp_arc (start 1.27 0) (end 0.229039 -1.08) (angle 87.9) (layer F.SilkS) (width 0.12)) + (fp_arc (start 1.27 0) (end -0.29 1.235516) (angle -108.8) (layer F.SilkS) (width 0.12)) + (fp_arc (start 1.27 0) (end -0.29 -1.235516) (angle 108.8) (layer F.SilkS) (width 0.12)) + (fp_arc (start 1.27 0) (end -0.23 -1.16619) (angle 284.3) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole circle (at 2.54 0) (size 1.8 1.8) (drill 0.9) (layers *.Cu *.Mask) + (net 2 "Net-(D1-Pad2)")) + (pad 1 thru_hole rect (at 0 0) (size 1.8 1.8) (drill 0.9) (layers *.Cu *.Mask) + (net 1 GND)) + (model ${KISYS3DMOD}/LED_THT.3dshapes/LED_D3.0mm.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (dimension 3.263 (width 0.15) (layer Dwgs.User) + (gr_text "3.263 mm" (at 196.708 54.0825 270) (layer Dwgs.User) + (effects (font (size 1 1) (thickness 0.15))) + ) + (feature1 (pts (xy 216.535 55.714) (xy 197.421579 55.714))) + (feature2 (pts (xy 216.535 52.451) (xy 197.421579 52.451))) + (crossbar (pts (xy 198.008 52.451) (xy 198.008 55.714))) + (arrow1a (pts (xy 198.008 55.714) (xy 197.421579 54.587496))) + (arrow1b (pts (xy 198.008 55.714) (xy 198.594421 54.587496))) + (arrow2a (pts (xy 198.008 52.451) (xy 197.421579 53.577504))) + (arrow2b (pts (xy 198.008 52.451) (xy 198.594421 53.577504))) + ) + (gr_line (start 202.668 49.094) (end 255.663 49.094) (layer Edge.Cuts) (width 0.05) (tstamp 6011BD82)) + (gr_line (start 202.668 90.694) (end 255.663 90.594) (layer Edge.Cuts) (width 0.05) (tstamp 6011BD85)) + (gr_line (start 199.668 52.094) (end 199.668 87.694) (layer Edge.Cuts) (width 0.05) (tstamp 6011BD88)) + (gr_text TX (at 211.989 84.333) (layer F.SilkS) (tstamp 6011B81C) + (effects (font (size 1 1) (thickness 0.15))) + ) + (gr_text LRCL (at 233.822 55.841 270) (layer F.SilkS) (tstamp 6011B765) + (effects (font (size 1 1) (thickness 0.15))) + ) + (gr_text DOUT (at 231.409 55.968 270) (layer F.SilkS) (tstamp 6011B450) + (effects (font (size 1 1) (thickness 0.15))) + ) + (gr_text BCLK (at 228.615 55.968 270) (layer F.SilkS) (tstamp 6011B441) + (effects (font (size 1 1) (thickness 0.15))) + ) + (gr_text GND (at 225.948 55.587 270) (layer F.SilkS) (tstamp 6011B44A) + (effects (font (size 1 1) (thickness 0.15))) + ) + (gr_text RX (at 211.989 81.833) (layer F.SilkS) (tstamp 6011B81F) + (effects (font (size 1 1) (thickness 0.15))) + ) + (gr_text SWCLK (at 210.989 86.833) (layer F.SilkS) (tstamp 6011B819) + (effects (font (size 1 1) (thickness 0.15)) (justify left)) + ) + (gr_text SWDIO (at 204.716 86.838) (layer F.SilkS) (tstamp 6011B816) + (effects (font (size 1 1) (thickness 0.15)) (justify right)) + ) + (gr_text GND (at 202.938 84.298) (layer F.SilkS) (tstamp 6011B74A) + (effects (font (size 1 1) (thickness 0.15))) + ) + (gr_text 3V3 (at 203.192 81.833) (layer F.SilkS) (tstamp 6011B747) + (effects (font (size 1 1) (thickness 0.15))) + ) + (gr_line (start 258.663 87.594) (end 258.663 52.094) (layer Edge.Cuts) (width 0.05) (tstamp 6011BD8B)) + (gr_arc (start 202.668 52.094) (end 202.668 49.094) (angle -90) (layer Edge.Cuts) (width 0.05) (tstamp 6011BD97)) + (gr_arc (start 202.668 87.694) (end 199.668 87.694) (angle -90) (layer Edge.Cuts) (width 0.05) (tstamp 6011BD94)) + (gr_arc (start 255.663 87.594) (end 255.663 90.594) (angle -90) (layer Edge.Cuts) (width 0.05) (tstamp 6011BD91)) + (gr_arc (start 255.663 52.094) (end 258.663 52.094) (angle -90) (layer Edge.Cuts) (width 0.05) (tstamp 6011BD8E)) + (gr_text Batt+ (at 255.793 73.24) (layer F.SilkS) (tstamp 6011B73B) + (effects (font (size 1 1) (thickness 0.15))) + ) + (gr_text Batt- (at 255.666 67.906) (layer F.SilkS) (tstamp 6011B738) + (effects (font (size 1 1) (thickness 0.15))) + ) + (gr_text "RFM95W\n868MHz" (at 201.668 76.094) (layer F.SilkS) (tstamp 6011BFFD) + (effects (font (size 1 1) (thickness 0.15)) (justify left)) + ) + (gr_text "STM32G071\nKBT6" (at 226.868 74.244) (layer F.SilkS) (tstamp 6011B732) + (effects (font (size 1 1) (thickness 0.15)) (justify left)) + ) + (gr_text "Device ID" (at 225.947 89.226) (layer F.SilkS) (tstamp 6011B72F) + (effects (font (size 1 1) (thickness 0.15)) (justify left)) + ) + (gr_text "senseBox\nI²C" (at 256.568 87.644 90) (layer F.SilkS) (tstamp 6011B72C) + (effects (font (size 1 1) (thickness 0.15)) (justify left)) + ) + (gr_text "I²C Address" (at 246.368 51.244) (layer F.SilkS) (tstamp 6011BA8F) + (effects (font (size 1 1) (thickness 0.15))) + ) + (gr_text "0x78 Open\n0x79 Closed" (at 241.868 53.744) (layer F.SilkS) (tstamp 6011BA8C) + (effects (font (size 1 1) (thickness 0.15)) (justify left)) + ) + (gr_text "Microphone In" (at 224.668 50.144) (layer F.SilkS) (tstamp 6011BA89) + (effects (font (size 1 1) (thickness 0.15)) (justify left)) + ) + + (via (at 243.601 55.968) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1) (tstamp 6011BD2C)) + (via (at 251.348 53.301) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1) (tstamp 6011B933)) + (via (at 212.613 54.444) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1) (tstamp 6011B456)) + (via (at 219.598 53.809) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1) (tstamp 6011B480)) + (via (at 203.723 62.699) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1) (tstamp 6011B4A4)) + (via (at 233.06 58.381) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1) (tstamp 6011B447)) + (via (at 238.013 51.269) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1) (tstamp 6011B492)) + (via (at 241.823 65.874) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1) (tstamp 6011B453)) + (via (at 255.158 66.509) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1) (tstamp 6011B92D)) + (via (at 230.012 56.222) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1) (tstamp 6011B489)) + (via (at 249.57 68.541) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1) (tstamp 6011B750)) + (via (at 245.068 70.994) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) + (via (at 255.568 51.844) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) + (via (at 254.468 77.944) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) + (via (at 241.918 88.094) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) + (via (at 218.068 75.794) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) + (via (at 201.618 79.194) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) + (via (at 203.168 88.744) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) + (via (at 215.518 59.694) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) + (via (at 239.918 80.694) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) + (via (at 257.818 83.594) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) + (via (at 210.818 49.894) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) + (via (at 241.968 72.444) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) + (via (at 229.5548 81.0632) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) + (via (at 213.1972 79.5392) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) + (via (at 224.4748 89.5468) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) + (segment (start 223.768 87.2868) (end 223.768 86.4016) (width 0.25) (layer F.Cu) (net 2)) + (segment (start 223.4614 86.095) (end 220.615 86.095) (width 0.25) (layer F.Cu) (net 2)) + (segment (start 223.768 86.4016) (end 223.4614 86.095) (width 0.25) (layer F.Cu) (net 2)) + (segment (start 223.647 52.578) (end 223.647 51.03) (width 0.25) (layer F.Cu) (net 3) (tstamp 6011BA86)) + (segment (start 223.647 51.03) (end 223.251 50.634) (width 0.25) (layer F.Cu) (net 3) (tstamp 6011B82B)) + (segment (start 230.52 63.258) (end 230.524 63.262) (width 0.25) (layer F.Cu) (net 3) (tstamp 6011B87C)) + (segment (start 230.52 59.778) (end 230.52 59.778) (width 0.25) (layer F.Cu) (net 3) (tstamp 6011B879)) + (segment (start 229.123 59.778) (end 230.52 59.778) (width 0.25) (layer F.Cu) (net 3) (tstamp 6011B876)) + (segment (start 223.647 52.578) (end 223.647 54.302) (width 0.25) (layer F.Cu) (net 3) (tstamp 6011B873)) + (segment (start 230.52 59.778) (end 230.52 63.258) (width 0.25) (layer F.Cu) (net 3) (tstamp 6011B7E0)) + (via (at 230.52 59.778) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 3) (tstamp 6011B7DD)) + (segment (start 213.121 50.634) (end 212.928 50.634) (width 0.25) (layer F.Cu) (net 3) (tstamp 6011B4B3)) + (segment (start 228.996 59.651) (end 229.123 59.778) (width 0.25) (layer F.Cu) (net 3) (tstamp 6011B4FB)) + (segment (start 223.647 54.302) (end 228.996 59.651) (width 0.25) (layer F.Cu) (net 3) (tstamp 6011B4F8)) + (segment (start 223.3195 59.778) (end 230.52 59.778) (width 0.25) (layer F.Cu) (net 3) (tstamp 6011BC60)) + (segment (start 223.3195 56.984) (end 223.3195 59.778) (width 0.25) (layer F.Cu) (net 3) (tstamp 6011B762)) + (segment (start 244.5285 59.73) (end 244.5285 62.826) (width 0.25) (layer F.Cu) (net 3) (tstamp 6011BCC0)) + (segment (start 244.5285 59.73) (end 244.538 59.73) (width 0.25) (layer F.Cu) (net 3) (tstamp 6011B756)) + (segment (start 244.625 59.817) (end 248.793 59.817) (width 0.25) (layer F.Cu) (net 3) (tstamp 6011B759)) + (segment (start 244.538 59.73) (end 244.625 59.817) (width 0.25) (layer F.Cu) (net 3) (tstamp 6011BA9E)) + (segment (start 244.363 62.9915) (end 244.5285 62.826) (width 0.25) (layer F.Cu) (net 3) (tstamp 6011B921)) + (segment (start 208.55 57.024) (end 208.55 55.012) (width 0.25) (layer F.Cu) (net 3) (tstamp 6011B891)) + (segment (start 208.55 55.012) (end 212.928 50.634) (width 0.25) (layer F.Cu) (net 3) (tstamp 6011B4FE)) + (segment (start 213.558 50.634) (end 213.121 50.634) (width 0.25) (layer F.Cu) (net 3) (tstamp 6011B918)) + (segment (start 212.928 50.634) (end 213.558 50.634) (width 0.25) (layer F.Cu) (net 3) (tstamp 6011B936)) + (segment (start 223.251 50.634) (end 213.558 50.634) (width 0.25) (layer F.Cu) (net 3) (tstamp 6011B89D)) + (segment (start 206.2625 51.269) (end 206.2625 53.809) (width 0.25) (layer F.Cu) (net 3) (tstamp 6011B939)) + (segment (start 207.347 53.809) (end 208.525 54.987) (width 0.25) (layer F.Cu) (net 3) (tstamp 6011BCF6)) + (segment (start 206.2625 53.809) (end 207.347 53.809) (width 0.25) (layer F.Cu) (net 3) (tstamp 6011B972)) + (segment (start 244.5285 62.826) (end 244.5285 67.1335) (width 0.25) (layer F.Cu) (net 3)) + (segment (start 249.363 71.989) (end 249.363 74.087) (width 0.25) (layer F.Cu) (net 3)) + (segment (start 244.5285 67.1545) (end 249.363 71.989) (width 0.25) (layer F.Cu) (net 3)) + (segment (start 249.363 74.087) (end 251.903 74.087) (width 0.25) (layer F.Cu) (net 3)) + (segment (start 208.525 54.987) (end 208.55 55.012) (width 0.25) (layer F.Cu) (net 3) (tstamp 6011D1F2)) + (via (at 208.525 54.987) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 3)) + (segment (start 206.489 57.023) (end 208.525 54.987) (width 0.25) (layer B.Cu) (net 3)) + (segment (start 206.489 81.583) (end 206.489 57.023) (width 0.25) (layer B.Cu) (net 3)) + (segment (start 248.754 59.778) (end 248.793 59.817) (width 0.25) (layer B.Cu) (net 3)) + (segment (start 230.52 59.778) (end 248.754 59.778) (width 0.25) (layer B.Cu) (net 3)) + (segment (start 244.5285 67.1335) (end 244.5285 67.1545) (width 0.25) (layer F.Cu) (net 3) (tstamp 6011DD2D)) + (via (at 244.5285 67.1335) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 3)) + (segment (start 233.318 86.544) (end 233.318 86.544) (width 0.25) (layer F.Cu) (net 3) (tstamp 6011DFF6)) + (via (at 233.318 86.544) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 3)) + (segment (start 233.318 78.344) (end 244.5285 67.1335) (width 0.25) (layer B.Cu) (net 3)) + (segment (start 233.318 86.544) (end 233.318 78.344) (width 0.25) (layer B.Cu) (net 3)) + (segment (start 232.5658 87.2962) (end 233.318 86.544) (width 0.25) (layer F.Cu) (net 3)) + (segment (start 230.773 87.2962) (end 232.5658 87.2962) (width 0.25) (layer F.Cu) (net 3)) + (segment (start 214.725 67.837) (end 225.949 67.837) (width 0.4) (layer F.Cu) (net 4)) + (segment (start 211.568 70.994) (end 214.725 67.837) (width 0.4) (layer F.Cu) (net 4)) + (segment (start 211.568 74.394) (end 211.568 70.994) (width 0.25) (layer F.Cu) (net 4)) + (segment (start 223.768 84.1868) (end 223.768 83.9036) (width 0.25) (layer F.Cu) (net 4)) + (segment (start 223.768 83.9036) (end 223.7636 83.8992) (width 0.25) (layer F.Cu) (net 4)) + (segment (start 223.7636 83.8992) (end 223.7636 83.1896) (width 0.25) (layer F.Cu) (net 4)) + (segment (start 223.7636 83.1896) (end 222.942999 82.368999) (width 0.25) (layer F.Cu) (net 4)) + (segment (start 222.942999 82.368999) (end 219.542999 82.368999) (width 0.25) (layer F.Cu) (net 4)) + (segment (start 219.542999 82.368999) (end 211.568 74.394) (width 0.25) (layer F.Cu) (net 4)) + (segment (start 228.124 63.262) (end 228.107 60.54) (width 0.25) (layer F.Cu) (net 5) (tstamp 6011BC5D)) + (segment (start 228.107 60.54) (end 228.124 60.557) (width 0.25) (layer F.Cu) (net 5) (tstamp 6011BC57)) + (via (at 228.107 60.54) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 5) (tstamp 6011BC54)) + (segment (start 209.029 84.123) (end 210.347 84.123) (width 0.25) (layer B.Cu) (net 5)) + (segment (start 210.347 84.123) (end 210.368 84.102) (width 0.25) (layer B.Cu) (net 5)) + (segment (start 210.347 84.123) (end 210.347 84.115) (width 0.25) (layer B.Cu) (net 5)) + (segment (start 210.347 84.115) (end 210.568 83.894) (width 0.25) (layer B.Cu) (net 5)) + (segment (start 210.568 61.394) (end 211.422 60.54) (width 0.25) (layer B.Cu) (net 5)) + (segment (start 210.568 83.894) (end 210.568 77.944) (width 0.25) (layer B.Cu) (net 5)) + (segment (start 228.107 60.54) (end 211.422 60.54) (width 0.25) (layer B.Cu) (net 5)) + (segment (start 210.568 77.944) (end 210.568 61.394) (width 0.25) (layer B.Cu) (net 5) (tstamp 6011E7CA)) + (segment (start 208.55 72.262) (end 208.55 71.358) (width 0.25) (layer F.Cu) (net 6) (tstamp 6011BD35)) + (segment (start 208.55 72.262) (end 208.55 70.701) (width 0.25) (layer F.Cu) (net 6) (tstamp 6011BD32)) + (segment (start 208.55 70.701) (end 208.55 70.699) (width 0.25) (layer F.Cu) (net 6) (tstamp 6011BD2F)) + (segment (start 235.5365 62.826) (end 235.4095 62.699) (width 0.25) (layer F.Cu) (net 6) (tstamp 6011B5BE)) + (segment (start 235.4095 62.699) (end 235.4095 62.699) (width 0.25) (layer F.Cu) (net 6) (tstamp 6011B507)) + (via (at 235.4095 62.699) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 6) (tstamp 6011B501)) + (segment (start 235.358499 62.647999) (end 235.4095 62.699) (width 0.25) (layer B.Cu) (net 6) (tstamp 6011B462)) + (segment (start 234.299 64.637) (end 235.7575 64.637) (width 0.4) (layer F.Cu) (net 6) (tstamp 6011BA3E)) + (segment (start 235.7575 64.637) (end 236.235 64.1595) (width 0.4) (layer F.Cu) (net 6) (tstamp 6011B92A)) + (segment (start 236.235 63.5245) (end 235.4095 62.699) (width 0.4) (layer F.Cu) (net 6) (tstamp 6011B825)) + (segment (start 236.235 64.1595) (end 236.235 63.5245) (width 0.4) (layer F.Cu) (net 6) (tstamp 6011B438)) + (segment (start 208.55 70.701) (end 208.561 70.701) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 208.561 70.701) (end 211.818 67.444) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 216.614001 62.647999) (end 217.014001 62.647999) (width 0.25) (layer B.Cu) (net 6)) + (segment (start 217.014001 62.647999) (end 235.358499 62.647999) (width 0.25) (layer B.Cu) (net 6)) + (segment (start 216.601001 62.647999) (end 217.014001 62.647999) (width 0.25) (layer B.Cu) (net 6)) + (segment (start 211.818 67.444) (end 212.168 67.094) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 212.168 67.094) (end 212.168 67.094) (width 0.25) (layer F.Cu) (net 6) (tstamp 6011D002)) + (via (at 212.168 67.094) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 6)) + (segment (start 216.601001 62.660999) (end 212.168 67.094) (width 0.25) (layer B.Cu) (net 6)) + (segment (start 216.601001 62.647999) (end 216.601001 62.660999) (width 0.25) (layer B.Cu) (net 6)) + (via (at 221.234 63.373) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 7) (tstamp 6011BC12)) + (segment (start 213.3 63.373) (end 221.234 63.373) (width 0.25) (layer F.Cu) (net 7) (tstamp 6011B74D)) + (segment (start 206.81 63.373) (end 213.3 63.373) (width 0.25) (layer F.Cu) (net 7) (tstamp 6011B4BC)) + (segment (start 206.55 63.113) (end 206.81 63.373) (width 0.25) (layer F.Cu) (net 7) (tstamp 6011B975)) + (segment (start 206.55 57.024) (end 206.55 63.113) (width 0.25) (layer F.Cu) (net 7) (tstamp 6011B4B9)) + (segment (start 225.949 69.437) (end 222.3355 69.437) (width 0.25) (layer F.Cu) (net 7) (tstamp 6011B504)) + (segment (start 222.3355 69.437) (end 221.4395 70.319) (width 0.25) (layer F.Cu) (net 7) (tstamp 6011B97B)) + (segment (start 221.4395 70.319) (end 221.4535 70.319) (width 0.25) (layer F.Cu) (net 7) (tstamp 6011B96F)) + (via (at 221.4395 70.319) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 7) (tstamp 6011B459)) + (segment (start 221.234 69.2545) (end 221.234 70.1135) (width 0.25) (layer B.Cu) (net 7) (tstamp 6011B75F)) + (segment (start 221.234 70.1135) (end 221.4395 70.319) (width 0.25) (layer B.Cu) (net 7) (tstamp 6011B47D)) + (segment (start 221.234 63.373) (end 221.234 69.2545) (width 0.25) (layer B.Cu) (net 7) (tstamp 6011B915)) + (segment (start 221.234 69.2545) (end 221.234 69.405) (width 0.25) (layer B.Cu) (net 7) (tstamp 6011BA44)) + (segment (start 210.125 65.437) (end 225.949 65.437) (width 0.25) (layer F.Cu) (net 8) (tstamp 6011BCBA)) + (segment (start 204.55 72.262) (end 204.55 70.762) (width 0.25) (layer F.Cu) (net 8) (tstamp 6011B91E)) + (segment (start 209.875 65.437) (end 210.125 65.437) (width 0.25) (layer F.Cu) (net 8) (tstamp 6011B924)) + (segment (start 204.55 70.762) (end 209.875 65.437) (width 0.25) (layer F.Cu) (net 8) (tstamp 6011B927)) + (segment (start 206.55 72.262) (end 206.55 70.606) (width 0.25) (layer F.Cu) (net 9) (tstamp 6011BCB7)) + (segment (start 210.919 66.237) (end 213.139 66.237) (width 0.25) (layer F.Cu) (net 9) (tstamp 6011BA74)) + (segment (start 206.55 70.606) (end 210.919 66.237) (width 0.25) (layer F.Cu) (net 9) (tstamp 6011BA71)) + (segment (start 213.139 66.237) (end 225.949 66.237) (width 0.25) (layer F.Cu) (net 9) (tstamp 6011BA68)) + (segment (start 212.575 66.237) (end 213.139 66.237) (width 0.25) (layer F.Cu) (net 9) (tstamp 6011BA65)) + (segment (start 234.299 68.637) (end 234.885412 68.637) (width 0.25) (layer F.Cu) (net 10) (tstamp 6011BCB4)) + (segment (start 232.631999 54.523999) (end 237.505 59.397) (width 0.45) (layer F.Cu) (net 10) (tstamp 6011B870)) + (segment (start 237.505 59.397) (end 237.505 66.636) (width 0.4) (layer F.Cu) (net 10) (tstamp 6011BC6C)) + (segment (start 235.504 68.637) (end 235.377 68.637) (width 0.45) (layer F.Cu) (net 10) (tstamp 6011B822)) + (segment (start 234.299 68.637) (end 235.377 68.637) (width 0.4) (layer F.Cu) (net 10) (tstamp 6011B930)) + (segment (start 232.552 54.444) (end 232.631999 54.523999) (width 0.4) (layer F.Cu) (net 10) (tstamp 6011B43B)) + (segment (start 232.552 52.031) (end 232.552 54.444) (width 0.35) (layer F.Cu) (net 10) (tstamp 6011B8D3)) + (segment (start 231.805 51.284) (end 232.552 52.031) (width 0.25) (layer F.Cu) (net 10) (tstamp 6011B753)) + (segment (start 228.727 51.284) (end 231.805 51.284) (width 0.25) (layer F.Cu) (net 10) (tstamp 6011B435)) + (segment (start 228.727 52.578) (end 228.727 51.284) (width 0.25) (layer F.Cu) (net 10) (tstamp 6011B47A)) + (segment (start 235.504 68.637) (end 235.885 68.637) (width 0.4) (layer F.Cu) (net 10) (tstamp 6011B894)) + (segment (start 237.505 67.017) (end 237.505 66.636) (width 0.4) (layer F.Cu) (net 10) (tstamp 6011B4A7)) + (segment (start 235.885 68.637) (end 237.505 67.017) (width 0.4) (layer F.Cu) (net 10) (tstamp 6011B49E)) + (segment (start 234.299 67.037) (end 234.477 67.037) (width 0.25) (layer F.Cu) (net 11) (tstamp 6011BAAA)) + (segment (start 235.049 67.037) (end 234.477 67.037) (width 0.25) (layer F.Cu) (net 11) (tstamp 6011BAA7)) + (segment (start 235.961 67.037) (end 234.299 67.037) (width 0.4) (layer F.Cu) (net 11) (tstamp 6011BA56)) + (segment (start 236.088 67.037) (end 235.961 67.037) (width 0.25) (layer F.Cu) (net 11) (tstamp 6011B978)) + (segment (start 236.87 66.255) (end 236.088 67.037) (width 0.4) (layer F.Cu) (net 11) (tstamp 6011BBD6)) + (segment (start 236.87 59.651) (end 236.87 66.255) (width 0.4) (layer F.Cu) (net 11) (tstamp 6011BAB3)) + (segment (start 231.267 54.048) (end 236.87 59.651) (width 0.4) (layer F.Cu) (net 11) (tstamp 6011BCB1)) + (segment (start 231.267 52.578) (end 231.267 54.048) (width 0.4) (layer F.Cu) (net 11) (tstamp 6011BCAE)) + (segment (start 234.885412 69.437) (end 234.299 69.437) (width 0.25) (layer F.Cu) (net 12) (tstamp 6011BAB0)) + (segment (start 235.049 69.437) (end 234.299 69.437) (width 0.25) (layer F.Cu) (net 12) (tstamp 6011BAAD)) + (segment (start 234.299 69.437) (end 235.974 69.437) (width 0.4) (layer F.Cu) (net 12) (tstamp 6011BAC5)) + (segment (start 233.807 52.578) (end 233.807 54.683) (width 0.4) (layer F.Cu) (net 12) (tstamp 6011BAC2)) + (segment (start 233.807 54.683) (end 238.267 59.143) (width 0.4) (layer F.Cu) (net 12) (tstamp 6011BABF)) + (segment (start 238.267 67.144) (end 235.974 69.437) (width 0.4) (layer F.Cu) (net 12) (tstamp 6011BABC)) + (segment (start 238.267 59.143) (end 238.267 67.144) (width 0.4) (layer F.Cu) (net 12) (tstamp 6011BAB9)) + (segment (start 251.903 77.187) (end 251.903 81.559) (width 0.25) (layer F.Cu) (net 13)) + (segment (start 251.332 82.13) (end 251.332 86.209) (width 0.25) (layer F.Cu) (net 13)) + (segment (start 251.903 81.559) (end 251.332 82.13) (width 0.25) (layer F.Cu) (net 13)) + (segment (start 231.324 71.612) (end 231.324 74.1) (width 0.25) (layer F.Cu) (net 13)) + (segment (start 231.324 74.1) (end 236.268 79.044) (width 0.25) (layer F.Cu) (net 13)) + (segment (start 236.268 79.044) (end 247.168 79.044) (width 0.25) (layer F.Cu) (net 13)) + (segment (start 247.168 79.044) (end 247.168 79.044) (width 0.25) (layer F.Cu) (net 13) (tstamp 6011DC97)) + (via (at 247.168 79.044) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 13)) + (segment (start 247.168 79.044) (end 251.918 79.044) (width 0.25) (layer B.Cu) (net 13)) + (segment (start 251.918 79.044) (end 251.918 79.044) (width 0.25) (layer B.Cu) (net 13) (tstamp 6011DD25)) + (via (at 251.918 79.044) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 13)) + (segment (start 232.124 72.198412) (end 232.124 71.612) (width 0.25) (layer F.Cu) (net 14) (tstamp 6011BBD0)) + (segment (start 249.363 86.178) (end 249.332 86.209) (width 0.25) (layer F.Cu) (net 14)) + (segment (start 249.363 77.187) (end 249.363 86.178) (width 0.25) (layer F.Cu) (net 14)) + (segment (start 236.387998 77.187) (end 249.363 77.187) (width 0.25) (layer F.Cu) (net 14)) + (segment (start 232.124 72.923002) (end 236.387998 77.187) (width 0.4) (layer F.Cu) (net 14)) + (segment (start 232.124 71.612) (end 232.124 72.923002) (width 0.25) (layer F.Cu) (net 14)) + (segment (start 206.489 86.663) (end 206.489 88.265) (width 0.25) (layer B.Cu) (net 15)) + (segment (start 206.489 88.265) (end 206.818 88.594) (width 0.25) (layer B.Cu) (net 15)) + (segment (start 206.818 88.594) (end 210.918 88.594) (width 0.25) (layer B.Cu) (net 15)) + (segment (start 210.918 88.594) (end 219.568 79.944) (width 0.25) (layer B.Cu) (net 15)) + (segment (start 232.924 71.612) (end 232.924 72.65) (width 0.25) (layer F.Cu) (net 15)) + (segment (start 232.924 72.65) (end 232.924 72.7484) (width 0.25) (layer F.Cu) (net 15)) + (segment (start 232.924 72.7484) (end 234.6856 74.51) (width 0.35) (layer F.Cu) (net 15)) + (segment (start 234.6856 74.51) (end 235.5492 74.51) (width 0.35) (layer F.Cu) (net 15)) + (segment (start 235.5492 74.51) (end 235.5492 74.51) (width 0.25) (layer F.Cu) (net 15) (tstamp 60129C63)) + (via (at 235.5492 74.51) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 15)) + (segment (start 235.5492 74.51) (end 235.5492 74.5608) (width 0.25) (layer B.Cu) (net 15)) + (segment (start 230.166 79.944) (end 228.8928 79.944) (width 0.25) (layer B.Cu) (net 15)) + (segment (start 235.5492 74.5608) (end 230.166 79.944) (width 0.25) (layer B.Cu) (net 15)) + (segment (start 228.8928 79.944) (end 229.268 79.944) (width 0.25) (layer B.Cu) (net 15)) + (segment (start 219.568 79.944) (end 228.8928 79.944) (width 0.25) (layer B.Cu) (net 15)) + (segment (start 234.299 70.237) (end 234.309 70.237) (width 0.25) (layer F.Cu) (net 16) (tstamp 6011BA50)) + (segment (start 234.309 70.237) (end 234.303 70.231) (width 0.25) (layer F.Cu) (net 16) (tstamp 6011BA4D)) + (segment (start 209.029 86.663) (end 211.149 86.663) (width 0.25) (layer B.Cu) (net 16)) + (segment (start 211.149 86.663) (end 219.118 78.694) (width 0.25) (layer B.Cu) (net 16)) + (segment (start 234.299 70.237) (end 237.311 70.237) (width 0.35) (layer F.Cu) (net 16)) + (segment (start 219.118 78.694) (end 229.918 78.694) (width 0.25) (layer B.Cu) (net 16)) + (segment (start 229.918 78.694) (end 237.868 70.794) (width 0.25) (layer B.Cu) (net 16)) + (segment (start 237.868 70.794) (end 237.818 70.794) (width 0.25) (layer B.Cu) (net 16) (tstamp 6011D701)) + (via (at 237.868 70.794) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 16)) + (segment (start 237.311 70.237) (end 237.868 70.794) (width 0.35) (layer F.Cu) (net 16)) + (segment (start 227.324 63.262) (end 227.324 62.424) (width 0.25) (layer F.Cu) (net 17) (tstamp 6011BA7D)) + (segment (start 227.324 62.424) (end 226.837 61.937) (width 0.25) (layer F.Cu) (net 17) (tstamp 6011BA7A)) + (segment (start 226.837 61.937) (end 209.275 61.937) (width 0.25) (layer F.Cu) (net 17)) + (segment (start 209.275 61.937) (end 209.168 62.044) (width 0.25) (layer F.Cu) (net 17)) + (segment (start 209.168 62.044) (end 209.168 62.044) (width 0.25) (layer F.Cu) (net 17) (tstamp 6011CC20)) + (via (at 209.168 62.044) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 17)) + (segment (start 209.029 62.183) (end 209.168 62.044) (width 0.25) (layer B.Cu) (net 17)) + (segment (start 209.029 81.583) (end 209.029 62.183) (width 0.25) (layer B.Cu) (net 17)) + (segment (start 248.793 62.357) (end 251.895 62.357) (width 0.25) (layer F.Cu) (net 23) (tstamp 6011B474)) + (segment (start 252.285 62.747) (end 253.9765 62.747) (width 0.25) (layer F.Cu) (net 23) (tstamp 6011B43E)) + (segment (start 251.895 62.357) (end 252.285 62.747) (width 0.25) (layer F.Cu) (net 23) (tstamp 6011B828)) + (segment (start 253.9765 59.651) (end 253.9765 62.747) (width 0.25) (layer F.Cu) (net 23) (tstamp 6011B483)) + (segment (start 256.409 71.584) (end 254.401 71.584) (width 0.25) (layer F.Cu) (net 23) (tstamp 6011B4B6)) + (segment (start 254.401 71.584) (end 253.888 71.071) (width 0.25) (layer F.Cu) (net 23) (tstamp 6011B477)) + (segment (start 253.888 62.8355) (end 253.9765 62.747) (width 0.25) (layer F.Cu) (net 23) (tstamp 6011B486)) + (segment (start 253.888 71.071) (end 253.888 62.8355) (width 0.25) (layer F.Cu) (net 23) (tstamp 6011BBD9)) + (segment (start 238.718 88.294) (end 238.718 87.294) (width 0.25) (layer F.Cu) (net 23)) + (segment (start 240.268 89.844) (end 238.718 88.294) (width 0.25) (layer F.Cu) (net 23)) + (segment (start 247.332 89.608) (end 247.096 89.844) (width 0.25) (layer F.Cu) (net 23)) + (segment (start 247.332 86.209) (end 247.332 89.608) (width 0.25) (layer F.Cu) (net 23)) + (segment (start 247.096 89.844) (end 246.868 89.844) (width 0.25) (layer F.Cu) (net 23)) + (segment (start 246.868 89.844) (end 240.268 89.844) (width 0.25) (layer F.Cu) (net 23)) + (segment (start 256.409 87.403) (end 256.409 71.584) (width 0.25) (layer F.Cu) (net 23)) + (segment (start 253.968 89.844) (end 256.409 87.403) (width 0.25) (layer F.Cu) (net 23)) + (segment (start 246.868 89.844) (end 253.968 89.844) (width 0.25) (layer F.Cu) (net 23)) + (segment (start 239.268 64.77) (end 239.268 64.77) (width 0.25) (layer F.Cu) (net 24) (tstamp 6011BAA4)) + (via (at 239.268 64.77) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 24) (tstamp 6011BAA1)) + (segment (start 239.268 53.294) (end 239.218 53.244) (width 0.25) (layer F.Cu) (net 24) (tstamp 6011BA9B)) + (segment (start 239.268 64.77) (end 239.268 53.294) (width 0.25) (layer F.Cu) (net 24) (tstamp 6011BA98)) + (segment (start 229.724 71.612) (end 229.758 73.621) (width 0.25) (layer F.Cu) (net 24) (tstamp 6011BA95)) + (segment (start 229.758 73.621) (end 229.724 73.587) (width 0.25) (layer F.Cu) (net 24) (tstamp 6011B77A)) + (via (at 229.758 73.621) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 24) (tstamp 6011B777)) + (segment (start 229.758 73.621) (end 229.758 74.891) (width 0.25) (layer B.Cu) (net 24) (tstamp 6011B774)) + (segment (start 232.228002 74.891) (end 239.283 67.836002) (width 0.25) (layer B.Cu) (net 24) (tstamp 6011B771)) + (segment (start 229.758 74.891) (end 232.228002 74.891) (width 0.25) (layer B.Cu) (net 24) (tstamp 6011B76E)) + (segment (start 239.283 64.785) (end 239.268 64.77) (width 0.25) (layer B.Cu) (net 24) (tstamp 6011B89A)) + (segment (start 239.283 67.836002) (end 239.283 64.785) (width 0.25) (layer B.Cu) (net 24) (tstamp 6011B897)) + (segment (start 225.949 64.637) (end 224.461 64.637) (width 0.25) (layer F.Cu) (net 25)) + (segment (start 224.461 64.637) (end 223.668 63.844) (width 0.25) (layer F.Cu) (net 25)) + (segment (start 223.668 63.844) (end 223.668 63.844) (width 0.25) (layer F.Cu) (net 25) (tstamp 6011CAB8)) + (via (at 223.668 63.844) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 25)) + (segment (start 227.979 82.055) (end 223.662 77.812) (width 0.25) (layer F.Cu) (net 25)) + (segment (start 230.773 84.1962) (end 227.979 84.1962) (width 0.25) (layer F.Cu) (net 25)) + (segment (start 227.979 84.1962) (end 227.979 82.055) (width 0.25) (layer F.Cu) (net 25)) + (segment (start 223.662 77.812) (end 223.668 77.744) (width 0.25) (layer F.Cu) (net 25) (tstamp 6011BF68)) + (via (at 223.662 77.812) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 25)) + (segment (start 223.668 77.806) (end 223.662 77.812) (width 0.25) (layer B.Cu) (net 25)) + (segment (start 223.668 63.844) (end 223.668 77.806) (width 0.25) (layer B.Cu) (net 25)) + (segment (start 235.902 84.194) (end 235.883 84.213) (width 0.25) (layer F.Cu) (net 26)) + (segment (start 238.718 84.194) (end 235.902 84.194) (width 0.25) (layer F.Cu) (net 26)) + (segment (start 225.949 72.625) (end 225.949 70.237) (width 0.25) (layer F.Cu) (net 26)) + (segment (start 235.883 82.559) (end 225.949 72.625) (width 0.25) (layer F.Cu) (net 26)) + (segment (start 235.883 84.213) (end 235.883 82.559) (width 0.25) (layer F.Cu) (net 26)) + (segment (start 214.525 67.037) (end 225.949 67.037) (width 0.4) (layer F.Cu) (net 27) (tstamp 6011B834)) + (segment (start 210.55 71.012) (end 214.525 67.037) (width 0.4) (layer F.Cu) (net 27) (tstamp 6011B831)) + (segment (start 210.55 72.262) (end 210.55 71.012) (width 0.4) (layer F.Cu) (net 27) (tstamp 6011B82E)) + (segment (start 214.925 68.637) (end 225.949 68.637) (width 0.4) (layer F.Cu) (net 28) (tstamp 6011B88B)) + (segment (start 212.55 71.012) (end 214.925 68.637) (width 0.4) (layer F.Cu) (net 28) (tstamp 6011B888)) + (segment (start 212.55 72.262) (end 212.55 71.012) (width 0.4) (layer F.Cu) (net 28) (tstamp 6011B885)) + (segment (start 216.535 56.247) (end 216.55 56.262) (width 0.25) (layer F.Cu) (net 40) (tstamp 6011B882)) + (segment (start 216.535 52.451) (end 216.535 56.247) (width 0.25) (layer F.Cu) (net 40) (tstamp 6011B87F)) + + (zone (net 1) (net_name GND) (layer F.Cu) (tstamp 6011894F) (hatch edge 0.508) + (connect_pads (clearance 0.1)) + (min_thickness 0.1) + (fill yes (arc_segments 32) (thermal_gap 0.2) (thermal_bridge_width 0.508)) + (polygon + (pts + (xy 264.668 95.504) (xy 185.928 94.234) (xy 185.928 44.704) (xy 264.668 44.704) + ) + ) + (filled_polygon + (pts + (xy 256.211551 49.323626) (xy 256.739205 49.482934) (xy 257.225868 49.741697) (xy 257.653 50.090057) (xy 258.004335 50.514748) + (xy 258.266489 50.999594) (xy 258.429479 51.526127) (xy 258.487959 52.082527) (xy 258.488001 52.09461) (xy 258.488 87.585439) + (xy 258.433374 88.14255) (xy 258.274067 88.670202) (xy 258.015303 89.156868) (xy 257.666943 89.584) (xy 257.242252 89.935335) + (xy 256.757406 90.197489) (xy 256.230874 90.360479) (xy 255.674473 90.418959) (xy 255.66239 90.419001) (xy 255.662383 90.419002) + (xy 202.676401 90.518984) (xy 202.11945 90.464374) (xy 201.591798 90.305067) (xy 201.105132 90.046303) (xy 200.678 89.697943) + (xy 200.326665 89.273252) (xy 200.064511 88.788406) (xy 199.901521 88.261874) (xy 199.843041 87.705473) (xy 199.843 87.693677) + (xy 199.843 86.554659) (xy 205.389 86.554659) (xy 205.389 86.771341) (xy 205.431273 86.983858) (xy 205.514193 87.184045) + (xy 205.634575 87.364209) (xy 205.787791 87.517425) (xy 205.967955 87.637807) (xy 206.168142 87.720727) (xy 206.380659 87.763) + (xy 206.597341 87.763) (xy 206.809858 87.720727) (xy 207.010045 87.637807) (xy 207.190209 87.517425) (xy 207.343425 87.364209) + (xy 207.463807 87.184045) (xy 207.546727 86.983858) (xy 207.589 86.771341) (xy 207.589 86.554659) (xy 207.929 86.554659) + (xy 207.929 86.771341) (xy 207.971273 86.983858) (xy 208.054193 87.184045) (xy 208.174575 87.364209) (xy 208.327791 87.517425) + (xy 208.507955 87.637807) (xy 208.708142 87.720727) (xy 208.920659 87.763) (xy 209.137341 87.763) (xy 209.349858 87.720727) + (xy 209.550045 87.637807) (xy 209.730209 87.517425) (xy 209.883425 87.364209) (xy 210.003807 87.184045) (xy 210.082111 86.995) + (xy 216.92379 86.995) (xy 216.928617 87.044009) (xy 216.942912 87.091134) (xy 216.966127 87.134565) (xy 216.997368 87.172632) + (xy 217.035435 87.203873) (xy 217.078866 87.227088) (xy 217.125991 87.241383) (xy 217.175 87.24621) (xy 217.8085 87.245) + (xy 217.871 87.1825) (xy 217.871 86.299) (xy 218.279 86.299) (xy 218.279 87.1825) (xy 218.3415 87.245) + (xy 218.975 87.24621) (xy 219.024009 87.241383) (xy 219.071134 87.227088) (xy 219.114565 87.203873) (xy 219.152632 87.172632) + (xy 219.183873 87.134565) (xy 219.207088 87.091134) (xy 219.221383 87.044009) (xy 219.22621 86.995) (xy 219.225 86.3615) + (xy 219.1625 86.299) (xy 218.279 86.299) (xy 217.871 86.299) (xy 216.9875 86.299) (xy 216.925 86.3615) + (xy 216.92379 86.995) (xy 210.082111 86.995) (xy 210.086727 86.983858) (xy 210.129 86.771341) (xy 210.129 86.554659) + (xy 210.086727 86.342142) (xy 210.003807 86.141955) (xy 209.896752 85.981735) (xy 219.465 85.981735) (xy 219.465 86.208265) + (xy 219.509194 86.430443) (xy 219.595884 86.639729) (xy 219.721737 86.828082) (xy 219.881918 86.988263) (xy 220.070271 87.114116) + (xy 220.279557 87.200806) (xy 220.501735 87.245) (xy 220.728265 87.245) (xy 220.950443 87.200806) (xy 221.159729 87.114116) + (xy 221.348082 86.988263) (xy 221.508263 86.828082) (xy 221.634116 86.639729) (xy 221.704421 86.47) (xy 222.864655 86.47) + (xy 222.864543 86.47006) (xy 222.788591 86.532391) (xy 222.72626 86.608343) (xy 222.679943 86.694995) (xy 222.651422 86.789018) + (xy 222.641791 86.886799) (xy 222.641791 87.686801) (xy 222.651422 87.784582) (xy 222.679943 87.878605) (xy 222.72626 87.965257) + (xy 222.788591 88.041209) (xy 222.864543 88.10354) (xy 222.951195 88.149857) (xy 223.045218 88.178378) (xy 223.142999 88.188009) + (xy 224.393001 88.188009) (xy 224.490782 88.178378) (xy 224.584805 88.149857) (xy 224.671457 88.10354) (xy 224.747409 88.041209) + (xy 224.80974 87.965257) (xy 224.819926 87.9462) (xy 226.85279 87.9462) (xy 226.857617 87.995209) (xy 226.871912 88.042334) + (xy 226.895127 88.085765) (xy 226.926368 88.123832) (xy 226.964435 88.155073) (xy 227.007866 88.178288) (xy 227.054991 88.192583) + (xy 227.104 88.19741) (xy 227.7125 88.1962) (xy 227.775 88.1337) (xy 227.775 87.5002) (xy 228.183 87.5002) + (xy 228.183 88.1337) (xy 228.2455 88.1962) (xy 228.854 88.19741) (xy 228.903009 88.192583) (xy 228.950134 88.178288) + (xy 228.993565 88.155073) (xy 229.031632 88.123832) (xy 229.062873 88.085765) (xy 229.086088 88.042334) (xy 229.100383 87.995209) + (xy 229.10521 87.9462) (xy 229.104 87.5627) (xy 229.0415 87.5002) (xy 228.183 87.5002) (xy 227.775 87.5002) + (xy 226.9165 87.5002) (xy 226.854 87.5627) (xy 226.85279 87.9462) (xy 224.819926 87.9462) (xy 224.856057 87.878605) + (xy 224.884578 87.784582) (xy 224.894209 87.686801) (xy 224.894209 86.886799) (xy 224.884578 86.789018) (xy 224.856057 86.694995) + (xy 224.829976 86.6462) (xy 226.85279 86.6462) (xy 226.854 87.0297) (xy 226.9165 87.0922) (xy 227.775 87.0922) + (xy 227.775 86.4587) (xy 228.183 86.4587) (xy 228.183 87.0922) (xy 229.0415 87.0922) (xy 229.104 87.0297) + (xy 229.104421 86.896199) (xy 229.646791 86.896199) (xy 229.646791 87.696201) (xy 229.656422 87.793982) (xy 229.684943 87.888005) + (xy 229.73126 87.974657) (xy 229.793591 88.050609) (xy 229.869543 88.11294) (xy 229.956195 88.159257) (xy 230.050218 88.187778) + (xy 230.147999 88.197409) (xy 231.398001 88.197409) (xy 231.495782 88.187778) (xy 231.589805 88.159257) (xy 231.676457 88.11294) + (xy 231.752409 88.050609) (xy 231.81474 87.974657) (xy 231.82097 87.963) (xy 234.75679 87.963) (xy 234.761617 88.012009) + (xy 234.775912 88.059134) (xy 234.799127 88.102565) (xy 234.830368 88.140632) (xy 234.868435 88.171873) (xy 234.911866 88.195088) + (xy 234.958991 88.209383) (xy 235.008 88.21421) (xy 235.6165 88.213) (xy 235.679 88.1505) (xy 235.679 87.517) + (xy 236.087 87.517) (xy 236.087 88.1505) (xy 236.1495 88.213) (xy 236.758 88.21421) (xy 236.807009 88.209383) + (xy 236.854134 88.195088) (xy 236.897565 88.171873) (xy 236.935632 88.140632) (xy 236.966873 88.102565) (xy 236.990088 88.059134) + (xy 237.004383 88.012009) (xy 237.00921 87.963) (xy 237.008 87.5795) (xy 236.9455 87.517) (xy 236.087 87.517) + (xy 235.679 87.517) (xy 234.8205 87.517) (xy 234.758 87.5795) (xy 234.75679 87.963) (xy 231.82097 87.963) + (xy 231.861057 87.888005) (xy 231.889578 87.793982) (xy 231.899209 87.696201) (xy 231.899209 87.6712) (xy 232.547384 87.6712) + (xy 232.5658 87.673014) (xy 232.584216 87.6712) (xy 232.584219 87.6712) (xy 232.639313 87.665774) (xy 232.71 87.644331) + (xy 232.775147 87.609509) (xy 232.832248 87.562648) (xy 232.843995 87.548334) (xy 233.207563 87.184767) (xy 233.253981 87.194) + (xy 233.382019 87.194) (xy 233.507598 87.169021) (xy 233.62589 87.120022) (xy 233.732351 87.048888) (xy 233.822888 86.958351) + (xy 233.894022 86.85189) (xy 233.943021 86.733598) (xy 233.957063 86.663) (xy 234.75679 86.663) (xy 234.758 87.0465) + (xy 234.8205 87.109) (xy 235.679 87.109) (xy 235.679 86.4755) (xy 236.087 86.4755) (xy 236.087 87.109) + (xy 236.9455 87.109) (xy 237.008 87.0465) (xy 237.008481 86.893999) (xy 237.591791 86.893999) (xy 237.591791 87.694001) + (xy 237.601422 87.791782) (xy 237.629943 87.885805) (xy 237.67626 87.972457) (xy 237.738591 88.048409) (xy 237.814543 88.11074) + (xy 237.901195 88.157057) (xy 237.995218 88.185578) (xy 238.092999 88.195209) (xy 238.343 88.195209) (xy 238.343 88.275584) + (xy 238.341186 88.294) (xy 238.343 88.312416) (xy 238.343 88.312418) (xy 238.348426 88.367512) (xy 238.369869 88.438199) + (xy 238.404691 88.503346) (xy 238.451552 88.560448) (xy 238.465866 88.572195) (xy 239.989809 90.096139) (xy 240.001552 90.110448) + (xy 240.015859 90.122189) (xy 240.058653 90.157309) (xy 240.090763 90.174472) (xy 240.1238 90.192131) (xy 240.194487 90.213574) + (xy 240.249581 90.219) (xy 240.249583 90.219) (xy 240.267999 90.220814) (xy 240.286415 90.219) (xy 247.077584 90.219) + (xy 247.096 90.220814) (xy 247.114416 90.219) (xy 253.949584 90.219) (xy 253.968 90.220814) (xy 253.986416 90.219) + (xy 253.986419 90.219) (xy 254.041513 90.213574) (xy 254.1122 90.192131) (xy 254.177347 90.157309) (xy 254.234448 90.110448) + (xy 254.246195 90.096134) (xy 256.661146 87.681185) (xy 256.675448 87.669448) (xy 256.687186 87.655145) (xy 256.687189 87.655142) + (xy 256.722309 87.612347) (xy 256.75713 87.547202) (xy 256.757131 87.547199) (xy 256.778574 87.476513) (xy 256.784 87.421419) + (xy 256.784 87.421417) (xy 256.785814 87.403001) (xy 256.784 87.384585) (xy 256.784 72.335209) (xy 257.159 72.335209) + (xy 257.256781 72.325578) (xy 257.350804 72.297057) (xy 257.437457 72.25074) (xy 257.513408 72.188408) (xy 257.57574 72.112457) + (xy 257.622057 72.025804) (xy 257.650578 71.931781) (xy 257.660209 71.834) (xy 257.660209 71.334) (xy 257.650578 71.236219) + (xy 257.622057 71.142196) (xy 257.57574 71.055543) (xy 257.513408 70.979592) (xy 257.437457 70.91726) (xy 257.350804 70.870943) + (xy 257.256781 70.842422) (xy 257.159 70.832791) (xy 255.659 70.832791) (xy 255.561219 70.842422) (xy 255.467196 70.870943) + (xy 255.380543 70.91726) (xy 255.304592 70.979592) (xy 255.24226 71.055543) (xy 255.195943 71.142196) (xy 255.175679 71.209) + (xy 254.55633 71.209) (xy 254.263 70.915671) (xy 254.263 69.971) (xy 255.15779 69.971) (xy 255.162617 70.020009) + (xy 255.176912 70.067134) (xy 255.200127 70.110565) (xy 255.231368 70.148632) (xy 255.269435 70.179873) (xy 255.312866 70.203088) + (xy 255.359991 70.217383) (xy 255.409 70.22221) (xy 256.1425 70.221) (xy 256.205 70.1585) (xy 256.205 69.675) + (xy 256.613 69.675) (xy 256.613 70.1585) (xy 256.6755 70.221) (xy 257.409 70.22221) (xy 257.458009 70.217383) + (xy 257.505134 70.203088) (xy 257.548565 70.179873) (xy 257.586632 70.148632) (xy 257.617873 70.110565) (xy 257.641088 70.067134) + (xy 257.655383 70.020009) (xy 257.66021 69.971) (xy 257.659 69.7375) (xy 257.5965 69.675) (xy 256.613 69.675) + (xy 256.205 69.675) (xy 255.2215 69.675) (xy 255.159 69.7375) (xy 255.15779 69.971) (xy 254.263 69.971) + (xy 254.263 68.971) (xy 255.15779 68.971) (xy 255.159 69.2045) (xy 255.2215 69.267) (xy 256.205 69.267) + (xy 256.205 68.7835) (xy 256.613 68.7835) (xy 256.613 69.267) (xy 257.5965 69.267) (xy 257.659 69.2045) + (xy 257.66021 68.971) (xy 257.655383 68.921991) (xy 257.641088 68.874866) (xy 257.617873 68.831435) (xy 257.586632 68.793368) + (xy 257.548565 68.762127) (xy 257.505134 68.738912) (xy 257.458009 68.724617) (xy 257.409 68.71979) (xy 256.6755 68.721) + (xy 256.613 68.7835) (xy 256.205 68.7835) (xy 256.1425 68.721) (xy 255.409 68.71979) (xy 255.359991 68.724617) + (xy 255.312866 68.738912) (xy 255.269435 68.762127) (xy 255.231368 68.793368) (xy 255.200127 68.831435) (xy 255.176912 68.874866) + (xy 255.162617 68.921991) (xy 255.15779 68.971) (xy 254.263 68.971) (xy 254.263 63.898209) (xy 254.389003 63.898209) + (xy 254.486783 63.888578) (xy 254.580806 63.860057) (xy 254.667458 63.813741) (xy 254.743409 63.751409) (xy 254.805741 63.675458) + (xy 254.820951 63.647) (xy 256.18779 63.647) (xy 256.192617 63.696009) (xy 256.206912 63.743134) (xy 256.230127 63.786565) + (xy 256.261368 63.824632) (xy 256.299435 63.855873) (xy 256.342866 63.879088) (xy 256.389991 63.893383) (xy 256.439 63.89821) + (xy 256.835 63.897) (xy 256.8975 63.8345) (xy 256.8975 62.951) (xy 257.3055 62.951) (xy 257.3055 63.8345) + (xy 257.368 63.897) (xy 257.764 63.89821) (xy 257.813009 63.893383) (xy 257.860134 63.879088) (xy 257.903565 63.855873) + (xy 257.941632 63.824632) (xy 257.972873 63.786565) (xy 257.996088 63.743134) (xy 258.010383 63.696009) (xy 258.01521 63.647) + (xy 258.014 63.0135) (xy 257.9515 62.951) (xy 257.3055 62.951) (xy 256.8975 62.951) (xy 256.2515 62.951) + (xy 256.189 63.0135) (xy 256.18779 63.647) (xy 254.820951 63.647) (xy 254.852057 63.588806) (xy 254.880578 63.494783) + (xy 254.890209 63.397003) (xy 254.890209 62.096997) (xy 254.880578 61.999217) (xy 254.852057 61.905194) (xy 254.820952 61.847) + (xy 256.18779 61.847) (xy 256.189 62.4805) (xy 256.2515 62.543) (xy 256.8975 62.543) (xy 256.8975 61.6595) + (xy 257.3055 61.6595) (xy 257.3055 62.543) (xy 257.9515 62.543) (xy 258.014 62.4805) (xy 258.01521 61.847) + (xy 258.010383 61.797991) (xy 257.996088 61.750866) (xy 257.972873 61.707435) (xy 257.941632 61.669368) (xy 257.903565 61.638127) + (xy 257.860134 61.614912) (xy 257.813009 61.600617) (xy 257.764 61.59579) (xy 257.368 61.597) (xy 257.3055 61.6595) + (xy 256.8975 61.6595) (xy 256.835 61.597) (xy 256.439 61.59579) (xy 256.389991 61.600617) (xy 256.342866 61.614912) + (xy 256.299435 61.638127) (xy 256.261368 61.669368) (xy 256.230127 61.707435) (xy 256.206912 61.750866) (xy 256.192617 61.797991) + (xy 256.18779 61.847) (xy 254.820952 61.847) (xy 254.805741 61.818542) (xy 254.743409 61.742591) (xy 254.667458 61.680259) + (xy 254.580806 61.633943) (xy 254.486783 61.605422) (xy 254.389003 61.595791) (xy 254.3515 61.595791) (xy 254.3515 60.802209) + (xy 254.389003 60.802209) (xy 254.486783 60.792578) (xy 254.580806 60.764057) (xy 254.667458 60.717741) (xy 254.743409 60.655409) + (xy 254.805741 60.579458) (xy 254.820951 60.551) (xy 256.18779 60.551) (xy 256.192617 60.600009) (xy 256.206912 60.647134) + (xy 256.230127 60.690565) (xy 256.261368 60.728632) (xy 256.299435 60.759873) (xy 256.342866 60.783088) (xy 256.389991 60.797383) + (xy 256.439 60.80221) (xy 256.835 60.801) (xy 256.8975 60.7385) (xy 256.8975 59.855) (xy 257.3055 59.855) + (xy 257.3055 60.7385) (xy 257.368 60.801) (xy 257.764 60.80221) (xy 257.813009 60.797383) (xy 257.860134 60.783088) + (xy 257.903565 60.759873) (xy 257.941632 60.728632) (xy 257.972873 60.690565) (xy 257.996088 60.647134) (xy 258.010383 60.600009) + (xy 258.01521 60.551) (xy 258.014 59.9175) (xy 257.9515 59.855) (xy 257.3055 59.855) (xy 256.8975 59.855) + (xy 256.2515 59.855) (xy 256.189 59.9175) (xy 256.18779 60.551) (xy 254.820951 60.551) (xy 254.852057 60.492806) + (xy 254.880578 60.398783) (xy 254.890209 60.301003) (xy 254.890209 59.000997) (xy 254.880578 58.903217) (xy 254.852057 58.809194) + (xy 254.820952 58.751) (xy 256.18779 58.751) (xy 256.189 59.3845) (xy 256.2515 59.447) (xy 256.8975 59.447) + (xy 256.8975 58.5635) (xy 257.3055 58.5635) (xy 257.3055 59.447) (xy 257.9515 59.447) (xy 258.014 59.3845) + (xy 258.01521 58.751) (xy 258.010383 58.701991) (xy 257.996088 58.654866) (xy 257.972873 58.611435) (xy 257.941632 58.573368) + (xy 257.903565 58.542127) (xy 257.860134 58.518912) (xy 257.813009 58.504617) (xy 257.764 58.49979) (xy 257.368 58.501) + (xy 257.3055 58.5635) (xy 256.8975 58.5635) (xy 256.835 58.501) (xy 256.439 58.49979) (xy 256.389991 58.504617) + (xy 256.342866 58.518912) (xy 256.299435 58.542127) (xy 256.261368 58.573368) (xy 256.230127 58.611435) (xy 256.206912 58.654866) + (xy 256.192617 58.701991) (xy 256.18779 58.751) (xy 254.820952 58.751) (xy 254.805741 58.722542) (xy 254.743409 58.646591) + (xy 254.667458 58.584259) (xy 254.580806 58.537943) (xy 254.486783 58.509422) (xy 254.389003 58.499791) (xy 253.563997 58.499791) + (xy 253.466217 58.509422) (xy 253.372194 58.537943) (xy 253.285542 58.584259) (xy 253.209591 58.646591) (xy 253.147259 58.722542) + (xy 253.100943 58.809194) (xy 253.072422 58.903217) (xy 253.062791 59.000997) (xy 253.062791 60.301003) (xy 253.072422 60.398783) + (xy 253.100943 60.492806) (xy 253.147259 60.579458) (xy 253.209591 60.655409) (xy 253.285542 60.717741) (xy 253.372194 60.764057) + (xy 253.466217 60.792578) (xy 253.563997 60.802209) (xy 253.6015 60.802209) (xy 253.601501 61.595791) (xy 253.563997 61.595791) + (xy 253.466217 61.605422) (xy 253.372194 61.633943) (xy 253.285542 61.680259) (xy 253.209591 61.742591) (xy 253.147259 61.818542) + (xy 253.100943 61.905194) (xy 253.072422 61.999217) (xy 253.062791 62.096997) (xy 253.062791 62.372) (xy 252.44033 62.372) + (xy 252.173195 62.104866) (xy 252.161448 62.090552) (xy 252.104347 62.043691) (xy 252.0392 62.008869) (xy 251.968513 61.987426) + (xy 251.913419 61.982) (xy 251.913416 61.982) (xy 251.895 61.980186) (xy 251.876584 61.982) (xy 249.69632 61.982) + (xy 249.665506 61.92435) (xy 249.568659 61.806341) (xy 249.463686 61.720192) (xy 249.530522 61.67238) (xy 249.634876 61.561144) + (xy 249.715524 61.431687) (xy 249.724551 61.40545) (xy 249.700671 61.291) (xy 248.997 61.291) (xy 248.997 61.311) + (xy 248.589 61.311) (xy 248.589 61.291) (xy 247.885329 61.291) (xy 247.861449 61.40545) (xy 247.870476 61.431687) + (xy 247.951124 61.561144) (xy 248.055478 61.67238) (xy 248.122314 61.720192) (xy 248.017341 61.806341) (xy 247.920494 61.92435) + (xy 247.84853 62.058986) (xy 247.804214 62.205074) (xy 247.789251 62.357) (xy 247.804214 62.508926) (xy 247.84853 62.655014) + (xy 247.920494 62.78965) (xy 248.017341 62.907659) (xy 248.13535 63.004506) (xy 248.269986 63.07647) (xy 248.416074 63.120786) + (xy 248.529935 63.132) (xy 249.056065 63.132) (xy 249.169926 63.120786) (xy 249.316014 63.07647) (xy 249.45065 63.004506) + (xy 249.568659 62.907659) (xy 249.665506 62.78965) (xy 249.69632 62.732) (xy 251.73967 62.732) (xy 252.006813 62.999144) + (xy 252.018552 63.013448) (xy 252.032855 63.025186) (xy 252.032858 63.025189) (xy 252.075653 63.060309) (xy 252.135779 63.092447) + (xy 252.1408 63.095131) (xy 252.211487 63.116574) (xy 252.266581 63.122) (xy 252.266583 63.122) (xy 252.284999 63.123814) + (xy 252.303415 63.122) (xy 253.062791 63.122) (xy 253.062791 63.397003) (xy 253.072422 63.494783) (xy 253.100943 63.588806) + (xy 253.147259 63.675458) (xy 253.209591 63.751409) (xy 253.285542 63.813741) (xy 253.372194 63.860057) (xy 253.466217 63.888578) + (xy 253.513001 63.893186) (xy 253.513 71.052584) (xy 253.511186 71.071) (xy 253.513 71.089416) (xy 253.513 71.089418) + (xy 253.518426 71.144512) (xy 253.539869 71.215199) (xy 253.574691 71.280346) (xy 253.621552 71.337448) (xy 253.635866 71.349195) + (xy 254.122809 71.836139) (xy 254.134552 71.850448) (xy 254.148859 71.862189) (xy 254.191653 71.89731) (xy 254.225661 71.915487) + (xy 254.2568 71.932131) (xy 254.327487 71.953574) (xy 254.382581 71.959) (xy 254.382584 71.959) (xy 254.401 71.960814) + (xy 254.419416 71.959) (xy 255.175679 71.959) (xy 255.195943 72.025804) (xy 255.24226 72.112457) (xy 255.304592 72.188408) + (xy 255.380543 72.25074) (xy 255.467196 72.297057) (xy 255.561219 72.325578) (xy 255.659 72.335209) (xy 256.034001 72.335209) + (xy 256.034 87.247669) (xy 253.812671 89.469) (xy 247.707 89.469) (xy 247.707 89.192321) (xy 247.773804 89.172057) + (xy 247.860457 89.12574) (xy 247.936408 89.063408) (xy 247.99874 88.987457) (xy 248.045057 88.900804) (xy 248.073578 88.806781) + (xy 248.083209 88.709) (xy 248.083209 83.709) (xy 248.073578 83.611219) (xy 248.045057 83.517196) (xy 247.99874 83.430543) + (xy 247.936408 83.354592) (xy 247.860457 83.29226) (xy 247.773804 83.245943) (xy 247.679781 83.217422) (xy 247.582 83.207791) + (xy 247.082 83.207791) (xy 246.984219 83.217422) (xy 246.890196 83.245943) (xy 246.803543 83.29226) (xy 246.727592 83.354592) + (xy 246.66526 83.430543) (xy 246.618943 83.517196) (xy 246.590422 83.611219) (xy 246.580791 83.709) (xy 246.580791 88.709) + (xy 246.590422 88.806781) (xy 246.618943 88.900804) (xy 246.66526 88.987457) (xy 246.727592 89.063408) (xy 246.803543 89.12574) + (xy 246.890196 89.172057) (xy 246.957001 89.192322) (xy 246.957001 89.45267) (xy 246.940671 89.469) (xy 240.42333 89.469) + (xy 239.91333 88.959) (xy 244.58079 88.959) (xy 244.585617 89.008009) (xy 244.599912 89.055134) (xy 244.623127 89.098565) + (xy 244.654368 89.136632) (xy 244.692435 89.167873) (xy 244.735866 89.191088) (xy 244.782991 89.205383) (xy 244.832 89.21021) + (xy 245.0655 89.209) (xy 245.128 89.1465) (xy 245.128 86.413) (xy 245.536 86.413) (xy 245.536 89.1465) + (xy 245.5985 89.209) (xy 245.832 89.21021) (xy 245.881009 89.205383) (xy 245.928134 89.191088) (xy 245.971565 89.167873) + (xy 246.009632 89.136632) (xy 246.040873 89.098565) (xy 246.064088 89.055134) (xy 246.078383 89.008009) (xy 246.08321 88.959) + (xy 246.082 86.4755) (xy 246.0195 86.413) (xy 245.536 86.413) (xy 245.128 86.413) (xy 244.6445 86.413) + (xy 244.582 86.4755) (xy 244.58079 88.959) (xy 239.91333 88.959) (xy 239.149538 88.195209) (xy 239.343001 88.195209) + (xy 239.440782 88.185578) (xy 239.534805 88.157057) (xy 239.621457 88.11074) (xy 239.697409 88.048409) (xy 239.75974 87.972457) + (xy 239.806057 87.885805) (xy 239.834578 87.791782) (xy 239.844209 87.694001) (xy 239.844209 86.893999) (xy 239.834578 86.796218) + (xy 239.806057 86.702195) (xy 239.75974 86.615543) (xy 239.697409 86.539591) (xy 239.621457 86.47726) (xy 239.534805 86.430943) + (xy 239.440782 86.402422) (xy 239.343001 86.392791) (xy 238.092999 86.392791) (xy 237.995218 86.402422) (xy 237.901195 86.430943) + (xy 237.814543 86.47726) (xy 237.738591 86.539591) (xy 237.67626 86.615543) (xy 237.629943 86.702195) (xy 237.601422 86.796218) + (xy 237.591791 86.893999) (xy 237.008481 86.893999) (xy 237.00921 86.663) (xy 237.004383 86.613991) (xy 236.990088 86.566866) + (xy 236.966873 86.523435) (xy 236.935632 86.485368) (xy 236.897565 86.454127) (xy 236.854134 86.430912) (xy 236.807009 86.416617) + (xy 236.758 86.41179) (xy 236.1495 86.413) (xy 236.087 86.4755) (xy 235.679 86.4755) (xy 235.6165 86.413) + (xy 235.008 86.41179) (xy 234.958991 86.416617) (xy 234.911866 86.430912) (xy 234.868435 86.454127) (xy 234.830368 86.485368) + (xy 234.799127 86.523435) (xy 234.775912 86.566866) (xy 234.761617 86.613991) (xy 234.75679 86.663) (xy 233.957063 86.663) + (xy 233.968 86.608019) (xy 233.968 86.479981) (xy 233.943021 86.354402) (xy 233.894022 86.23611) (xy 233.822888 86.129649) + (xy 233.732351 86.039112) (xy 233.62589 85.967978) (xy 233.507598 85.918979) (xy 233.382019 85.894) (xy 233.253981 85.894) + (xy 233.128402 85.918979) (xy 233.01011 85.967978) (xy 232.903649 86.039112) (xy 232.813112 86.129649) (xy 232.741978 86.23611) + (xy 232.692979 86.354402) (xy 232.668 86.479981) (xy 232.668 86.608019) (xy 232.677233 86.654437) (xy 232.410471 86.9212) + (xy 231.899209 86.9212) (xy 231.899209 86.896199) (xy 231.889578 86.798418) (xy 231.861057 86.704395) (xy 231.81474 86.617743) + (xy 231.752409 86.541791) (xy 231.676457 86.47946) (xy 231.589805 86.433143) (xy 231.495782 86.404622) (xy 231.398001 86.394991) + (xy 230.147999 86.394991) (xy 230.050218 86.404622) (xy 229.956195 86.433143) (xy 229.869543 86.47946) (xy 229.793591 86.541791) + (xy 229.73126 86.617743) (xy 229.684943 86.704395) (xy 229.656422 86.798418) (xy 229.646791 86.896199) (xy 229.104421 86.896199) + (xy 229.10521 86.6462) (xy 229.100383 86.597191) (xy 229.086088 86.550066) (xy 229.062873 86.506635) (xy 229.031632 86.468568) + (xy 228.993565 86.437327) (xy 228.950134 86.414112) (xy 228.903009 86.399817) (xy 228.854 86.39499) (xy 228.2455 86.3962) + (xy 228.183 86.4587) (xy 227.775 86.4587) (xy 227.7125 86.3962) (xy 227.104 86.39499) (xy 227.054991 86.399817) + (xy 227.007866 86.414112) (xy 226.964435 86.437327) (xy 226.926368 86.468568) (xy 226.895127 86.506635) (xy 226.871912 86.550066) + (xy 226.857617 86.597191) (xy 226.85279 86.6462) (xy 224.829976 86.6462) (xy 224.80974 86.608343) (xy 224.747409 86.532391) + (xy 224.671457 86.47006) (xy 224.584805 86.423743) (xy 224.490782 86.395222) (xy 224.393001 86.385591) (xy 224.143237 86.385591) + (xy 224.143 86.383181) (xy 224.137574 86.328087) (xy 224.116131 86.2574) (xy 224.081309 86.192253) (xy 224.034448 86.135152) + (xy 224.020139 86.123409) (xy 223.739595 85.842866) (xy 223.727848 85.828552) (xy 223.670747 85.781691) (xy 223.6056 85.746869) + (xy 223.534913 85.725426) (xy 223.479819 85.72) (xy 223.479816 85.72) (xy 223.4614 85.718186) (xy 223.442984 85.72) + (xy 221.704421 85.72) (xy 221.634116 85.550271) (xy 221.508263 85.361918) (xy 221.348082 85.201737) (xy 221.159729 85.075884) + (xy 220.950443 84.989194) (xy 220.728265 84.945) (xy 220.501735 84.945) (xy 220.279557 84.989194) (xy 220.070271 85.075884) + (xy 219.881918 85.201737) (xy 219.721737 85.361918) (xy 219.595884 85.550271) (xy 219.509194 85.759557) (xy 219.465 85.981735) + (xy 209.896752 85.981735) (xy 209.883425 85.961791) (xy 209.730209 85.808575) (xy 209.550045 85.688193) (xy 209.349858 85.605273) + (xy 209.137341 85.563) (xy 208.920659 85.563) (xy 208.708142 85.605273) (xy 208.507955 85.688193) (xy 208.327791 85.808575) + (xy 208.174575 85.961791) (xy 208.054193 86.141955) (xy 207.971273 86.342142) (xy 207.929 86.554659) (xy 207.589 86.554659) + (xy 207.546727 86.342142) (xy 207.463807 86.141955) (xy 207.343425 85.961791) (xy 207.190209 85.808575) (xy 207.010045 85.688193) + (xy 206.809858 85.605273) (xy 206.597341 85.563) (xy 206.380659 85.563) (xy 206.168142 85.605273) (xy 205.967955 85.688193) + (xy 205.787791 85.808575) (xy 205.634575 85.961791) (xy 205.514193 86.141955) (xy 205.431273 86.342142) (xy 205.389 86.554659) + (xy 199.843 86.554659) (xy 199.843 84.493581) (xy 205.453303 84.493581) (xy 205.494602 84.593314) (xy 205.605463 84.778274) + (xy 205.750278 84.938053) (xy 205.923481 85.06651) (xy 206.118417 85.158708) (xy 206.285 85.141429) (xy 206.285 84.327) + (xy 206.693 84.327) (xy 206.693 85.141429) (xy 206.859583 85.158708) (xy 207.054519 85.06651) (xy 207.227722 84.938053) + (xy 207.372537 84.778274) (xy 207.483398 84.593314) (xy 207.524697 84.493581) (xy 207.506246 84.327) (xy 206.693 84.327) + (xy 206.285 84.327) (xy 205.471754 84.327) (xy 205.453303 84.493581) (xy 199.843 84.493581) (xy 199.843 84.014659) + (xy 207.929 84.014659) (xy 207.929 84.231341) (xy 207.971273 84.443858) (xy 208.054193 84.644045) (xy 208.174575 84.824209) + (xy 208.327791 84.977425) (xy 208.507955 85.097807) (xy 208.708142 85.180727) (xy 208.920659 85.223) (xy 209.137341 85.223) + (xy 209.278104 85.195) (xy 216.92379 85.195) (xy 216.925 85.8285) (xy 216.9875 85.891) (xy 217.871 85.891) + (xy 217.871 85.0075) (xy 218.279 85.0075) (xy 218.279 85.891) (xy 219.1625 85.891) (xy 219.225 85.8285) + (xy 219.22621 85.195) (xy 219.221383 85.145991) (xy 219.207088 85.098866) (xy 219.183873 85.055435) (xy 219.152632 85.017368) + (xy 219.114565 84.986127) (xy 219.071134 84.962912) (xy 219.024009 84.948617) (xy 218.975 84.94379) (xy 218.3415 84.945) + (xy 218.279 85.0075) (xy 217.871 85.0075) (xy 217.8085 84.945) (xy 217.175 84.94379) (xy 217.125991 84.948617) + (xy 217.078866 84.962912) (xy 217.035435 84.986127) (xy 216.997368 85.017368) (xy 216.966127 85.055435) (xy 216.942912 85.098866) + (xy 216.928617 85.145991) (xy 216.92379 85.195) (xy 209.278104 85.195) (xy 209.349858 85.180727) (xy 209.550045 85.097807) + (xy 209.730209 84.977425) (xy 209.883425 84.824209) (xy 210.003807 84.644045) (xy 210.086727 84.443858) (xy 210.129 84.231341) + (xy 210.129 84.014659) (xy 210.086727 83.802142) (xy 210.003807 83.601955) (xy 209.883425 83.421791) (xy 209.730209 83.268575) + (xy 209.550045 83.148193) (xy 209.349858 83.065273) (xy 209.137341 83.023) (xy 208.920659 83.023) (xy 208.708142 83.065273) + (xy 208.507955 83.148193) (xy 208.327791 83.268575) (xy 208.174575 83.421791) (xy 208.054193 83.601955) (xy 207.971273 83.802142) + (xy 207.929 84.014659) (xy 199.843 84.014659) (xy 199.843 83.752419) (xy 205.453303 83.752419) (xy 205.471754 83.919) + (xy 206.285 83.919) (xy 206.285 83.104571) (xy 206.693 83.104571) (xy 206.693 83.919) (xy 207.506246 83.919) + (xy 207.524697 83.752419) (xy 207.483398 83.652686) (xy 207.372537 83.467726) (xy 207.227722 83.307947) (xy 207.054519 83.17949) + (xy 206.859583 83.087292) (xy 206.693 83.104571) (xy 206.285 83.104571) (xy 206.118417 83.087292) (xy 205.923481 83.17949) + (xy 205.750278 83.307947) (xy 205.605463 83.467726) (xy 205.494602 83.652686) (xy 205.453303 83.752419) (xy 199.843 83.752419) + (xy 199.843 80.733) (xy 205.387791 80.733) (xy 205.387791 82.433) (xy 205.392618 82.482008) (xy 205.406913 82.529134) + (xy 205.430127 82.572564) (xy 205.461368 82.610632) (xy 205.499436 82.641873) (xy 205.542866 82.665087) (xy 205.589992 82.679382) + (xy 205.639 82.684209) (xy 207.339 82.684209) (xy 207.388008 82.679382) (xy 207.435134 82.665087) (xy 207.478564 82.641873) + (xy 207.516632 82.610632) (xy 207.547873 82.572564) (xy 207.571087 82.529134) (xy 207.585382 82.482008) (xy 207.590209 82.433) + (xy 207.590209 81.474659) (xy 207.929 81.474659) (xy 207.929 81.691341) (xy 207.971273 81.903858) (xy 208.054193 82.104045) + (xy 208.174575 82.284209) (xy 208.327791 82.437425) (xy 208.507955 82.557807) (xy 208.708142 82.640727) (xy 208.920659 82.683) + (xy 209.137341 82.683) (xy 209.349858 82.640727) (xy 209.550045 82.557807) (xy 209.730209 82.437425) (xy 209.883425 82.284209) + (xy 210.003807 82.104045) (xy 210.086727 81.903858) (xy 210.129 81.691341) (xy 210.129 81.474659) (xy 210.086727 81.262142) + (xy 210.003807 81.061955) (xy 209.883425 80.881791) (xy 209.730209 80.728575) (xy 209.550045 80.608193) (xy 209.349858 80.525273) + (xy 209.137341 80.483) (xy 208.920659 80.483) (xy 208.708142 80.525273) (xy 208.507955 80.608193) (xy 208.327791 80.728575) + (xy 208.174575 80.881791) (xy 208.054193 81.061955) (xy 207.971273 81.262142) (xy 207.929 81.474659) (xy 207.590209 81.474659) + (xy 207.590209 80.733) (xy 207.585382 80.683992) (xy 207.571087 80.636866) (xy 207.547873 80.593436) (xy 207.516632 80.555368) + (xy 207.478564 80.524127) (xy 207.435134 80.500913) (xy 207.388008 80.486618) (xy 207.339 80.481791) (xy 205.639 80.481791) + (xy 205.589992 80.486618) (xy 205.542866 80.500913) (xy 205.499436 80.524127) (xy 205.461368 80.555368) (xy 205.430127 80.593436) + (xy 205.406913 80.636866) (xy 205.392618 80.683992) (xy 205.387791 80.733) (xy 199.843 80.733) (xy 199.843 73.228) + (xy 201.8 73.228) (xy 201.8 73.728) (xy 201.854209 73.870398) (xy 201.935157 73.999484) (xy 202.039733 74.110298) + (xy 202.163919 74.198581) (xy 202.235609 74.204925) (xy 202.346 74.180537) (xy 202.346 73.228) (xy 202.754 73.228) + (xy 202.754 74.180537) (xy 202.864391 74.204925) (xy 202.936081 74.198581) (xy 203.060267 74.110298) (xy 203.164843 73.999484) + (xy 203.245791 73.870398) (xy 203.3 73.728) (xy 203.3 73.228) (xy 202.754 73.228) (xy 202.346 73.228) + (xy 201.8 73.228) (xy 199.843 73.228) (xy 199.843 72.32) (xy 201.8 72.32) (xy 201.8 72.82) + (xy 202.346 72.82) (xy 202.346 71.867463) (xy 202.754 71.867463) (xy 202.754 72.82) (xy 203.3 72.82) + (xy 203.3 72.487166) (xy 203.8 72.487166) (xy 203.800001 73.560835) (xy 203.810854 73.671026) (xy 203.85374 73.812401) + (xy 203.923382 73.942693) (xy 204.017106 74.056895) (xy 204.131308 74.150619) (xy 204.2616 74.220261) (xy 204.402975 74.263147) + (xy 204.55 74.277628) (xy 204.697026 74.263147) (xy 204.838401 74.220261) (xy 204.968693 74.150619) (xy 205.082895 74.056895) + (xy 205.176619 73.942693) (xy 205.246261 73.812401) (xy 205.289147 73.671026) (xy 205.3 73.560835) (xy 205.3 72.487165) + (xy 205.289147 72.376974) (xy 205.246261 72.235599) (xy 205.176619 72.105307) (xy 205.082895 71.991105) (xy 204.968692 71.897381) + (xy 204.925 71.874027) (xy 204.925 70.917329) (xy 210.03033 65.812) (xy 225.044833 65.812) (xy 225.05798 65.82802) + (xy 225.068922 65.837) (xy 225.05798 65.84598) (xy 225.044833 65.862) (xy 210.937415 65.862) (xy 210.918999 65.860186) + (xy 210.900583 65.862) (xy 210.900581 65.862) (xy 210.845487 65.867426) (xy 210.7748 65.888869) (xy 210.709653 65.923691) + (xy 210.652552 65.970552) (xy 210.640809 65.984861) (xy 206.297862 70.327809) (xy 206.283553 70.339552) (xy 206.271811 70.35386) + (xy 206.236691 70.396654) (xy 206.217503 70.432552) (xy 206.20187 70.4618) (xy 206.182434 70.525873) (xy 206.180427 70.532488) + (xy 206.173186 70.606) (xy 206.175001 70.624426) (xy 206.175 71.874027) (xy 206.131307 71.897381) (xy 206.017105 71.991105) + (xy 205.923381 72.105308) (xy 205.853739 72.2356) (xy 205.810853 72.376975) (xy 205.8 72.487166) (xy 205.800001 73.560835) + (xy 205.810854 73.671026) (xy 205.85374 73.812401) (xy 205.923382 73.942693) (xy 206.017106 74.056895) (xy 206.131308 74.150619) + (xy 206.2616 74.220261) (xy 206.402975 74.263147) (xy 206.55 74.277628) (xy 206.697026 74.263147) (xy 206.838401 74.220261) + (xy 206.968693 74.150619) (xy 207.082895 74.056895) (xy 207.176619 73.942693) (xy 207.246261 73.812401) (xy 207.289147 73.671026) + (xy 207.3 73.560835) (xy 207.3 72.487165) (xy 207.289147 72.376974) (xy 207.246261 72.235599) (xy 207.176619 72.105307) + (xy 207.082895 71.991105) (xy 206.968692 71.897381) (xy 206.925 71.874027) (xy 206.925 70.761329) (xy 211.07433 66.612) + (xy 211.730761 66.612) (xy 211.663112 66.679649) (xy 211.591978 66.78611) (xy 211.542979 66.904402) (xy 211.518 67.029981) + (xy 211.518 67.158019) (xy 211.527233 67.204437) (xy 208.352096 70.379575) (xy 208.340654 70.385691) (xy 208.283552 70.432552) + (xy 208.236691 70.489653) (xy 208.201869 70.5548) (xy 208.180426 70.625487) (xy 208.175 70.680581) (xy 208.175 70.682581) + (xy 208.173186 70.701) (xy 208.175001 70.719429) (xy 208.175 71.827739) (xy 208.175 71.874027) (xy 208.131307 71.897381) + (xy 208.017105 71.991105) (xy 207.923381 72.105308) (xy 207.853739 72.2356) (xy 207.810853 72.376975) (xy 207.8 72.487166) + (xy 207.800001 73.560835) (xy 207.810854 73.671026) (xy 207.85374 73.812401) (xy 207.923382 73.942693) (xy 208.017106 74.056895) + (xy 208.131308 74.150619) (xy 208.2616 74.220261) (xy 208.402975 74.263147) (xy 208.55 74.277628) (xy 208.697026 74.263147) + (xy 208.838401 74.220261) (xy 208.968693 74.150619) (xy 209.082895 74.056895) (xy 209.176619 73.942693) (xy 209.246261 73.812401) + (xy 209.289147 73.671026) (xy 209.3 73.560835) (xy 209.3 72.487165) (xy 209.289147 72.376974) (xy 209.246261 72.235599) + (xy 209.176619 72.105307) (xy 209.082895 71.991105) (xy 208.968692 71.897381) (xy 208.925 71.874027) (xy 208.925 70.867329) + (xy 212.057563 67.734767) (xy 212.103981 67.744) (xy 212.232019 67.744) (xy 212.357598 67.719021) (xy 212.47589 67.670022) + (xy 212.582351 67.598888) (xy 212.672888 67.508351) (xy 212.744022 67.40189) (xy 212.793021 67.283598) (xy 212.818 67.158019) + (xy 212.818 67.029981) (xy 212.793021 66.904402) (xy 212.744022 66.78611) (xy 212.672888 66.679649) (xy 212.605239 66.612) + (xy 214.375836 66.612) (xy 214.351959 66.619243) (xy 214.273783 66.661029) (xy 214.222432 66.703172) (xy 214.222428 66.703176) + (xy 214.205263 66.717263) (xy 214.191176 66.734428) (xy 210.247429 70.678176) (xy 210.230264 70.692263) (xy 210.216177 70.709428) + (xy 210.216172 70.709433) (xy 210.174029 70.760784) (xy 210.132243 70.83896) (xy 210.106512 70.923785) (xy 210.097824 71.012) + (xy 210.100001 71.034104) (xy 210.1 71.923074) (xy 210.017105 71.991105) (xy 209.923381 72.105308) (xy 209.853739 72.2356) + (xy 209.810853 72.376975) (xy 209.8 72.487166) (xy 209.800001 73.560835) (xy 209.810854 73.671026) (xy 209.85374 73.812401) + (xy 209.923382 73.942693) (xy 210.017106 74.056895) (xy 210.131308 74.150619) (xy 210.2616 74.220261) (xy 210.402975 74.263147) + (xy 210.55 74.277628) (xy 210.697026 74.263147) (xy 210.838401 74.220261) (xy 210.968693 74.150619) (xy 211.082895 74.056895) + (xy 211.176619 73.942693) (xy 211.193 73.912046) (xy 211.193 74.375584) (xy 211.191186 74.394) (xy 211.193 74.412416) + (xy 211.193 74.412418) (xy 211.198426 74.467512) (xy 211.219869 74.538199) (xy 211.254691 74.603346) (xy 211.301552 74.660448) + (xy 211.315866 74.672195) (xy 219.264808 82.621138) (xy 219.276551 82.635447) (xy 219.290858 82.647188) (xy 219.333652 82.682309) + (xy 219.37274 82.703201) (xy 219.398799 82.71713) (xy 219.469486 82.738573) (xy 219.52458 82.743999) (xy 219.524583 82.743999) + (xy 219.542999 82.745813) (xy 219.561415 82.743999) (xy 222.78767 82.743999) (xy 223.329261 83.285591) (xy 223.142999 83.285591) + (xy 223.045218 83.295222) (xy 222.951195 83.323743) (xy 222.864543 83.37006) (xy 222.788591 83.432391) (xy 222.72626 83.508343) + (xy 222.679943 83.594995) (xy 222.651422 83.689018) (xy 222.641791 83.786799) (xy 222.641791 84.586801) (xy 222.651422 84.684582) + (xy 222.679943 84.778605) (xy 222.72626 84.865257) (xy 222.788591 84.941209) (xy 222.864543 85.00354) (xy 222.951195 85.049857) + (xy 223.045218 85.078378) (xy 223.142999 85.088009) (xy 224.393001 85.088009) (xy 224.490782 85.078378) (xy 224.584805 85.049857) + (xy 224.671457 85.00354) (xy 224.747409 84.941209) (xy 224.80974 84.865257) (xy 224.856057 84.778605) (xy 224.884578 84.684582) + (xy 224.894209 84.586801) (xy 224.894209 83.786799) (xy 224.884578 83.689018) (xy 224.856057 83.594995) (xy 224.80974 83.508343) + (xy 224.747409 83.432391) (xy 224.671457 83.37006) (xy 224.584805 83.323743) (xy 224.490782 83.295222) (xy 224.393001 83.285591) + (xy 224.1386 83.285591) (xy 224.1386 83.208015) (xy 224.140414 83.189599) (xy 224.1386 83.171181) (xy 224.133174 83.116087) + (xy 224.111731 83.0454) (xy 224.076909 82.980253) (xy 224.030048 82.923152) (xy 224.015739 82.911409) (xy 223.221194 82.116865) + (xy 223.209447 82.102551) (xy 223.152346 82.05569) (xy 223.087199 82.020868) (xy 223.016512 81.999425) (xy 222.961418 81.993999) + (xy 222.961415 81.993999) (xy 222.942999 81.992185) (xy 222.924583 81.993999) (xy 219.698329 81.993999) (xy 215.452311 77.747981) + (xy 223.012 77.747981) (xy 223.012 77.876019) (xy 223.036979 78.001598) (xy 223.085978 78.11989) (xy 223.157112 78.226351) + (xy 223.247649 78.316888) (xy 223.35411 78.388022) (xy 223.472402 78.437021) (xy 223.597981 78.462) (xy 223.726019 78.462) + (xy 223.777869 78.451687) (xy 227.604001 82.212233) (xy 227.604 83.294991) (xy 227.353999 83.294991) (xy 227.256218 83.304622) + (xy 227.162195 83.333143) (xy 227.075543 83.37946) (xy 226.999591 83.441791) (xy 226.93726 83.517743) (xy 226.890943 83.604395) + (xy 226.862422 83.698418) (xy 226.852791 83.796199) (xy 226.852791 84.596201) (xy 226.862422 84.693982) (xy 226.890943 84.788005) + (xy 226.93726 84.874657) (xy 226.999591 84.950609) (xy 227.075543 85.01294) (xy 227.162195 85.059257) (xy 227.256218 85.087778) + (xy 227.353999 85.097409) (xy 228.604001 85.097409) (xy 228.701782 85.087778) (xy 228.795805 85.059257) (xy 228.882457 85.01294) + (xy 228.958409 84.950609) (xy 229.02074 84.874657) (xy 229.067057 84.788005) (xy 229.095578 84.693982) (xy 229.105209 84.596201) + (xy 229.105209 84.5712) (xy 229.646791 84.5712) (xy 229.646791 84.596201) (xy 229.656422 84.693982) (xy 229.684943 84.788005) + (xy 229.73126 84.874657) (xy 229.793591 84.950609) (xy 229.869543 85.01294) (xy 229.956195 85.059257) (xy 230.050218 85.087778) + (xy 230.147999 85.097409) (xy 231.398001 85.097409) (xy 231.495782 85.087778) (xy 231.589805 85.059257) (xy 231.676457 85.01294) + (xy 231.752409 84.950609) (xy 231.81474 84.874657) (xy 231.861057 84.788005) (xy 231.889578 84.693982) (xy 231.899209 84.596201) + (xy 231.899209 83.796199) (xy 231.889578 83.698418) (xy 231.861057 83.604395) (xy 231.81474 83.517743) (xy 231.752409 83.441791) + (xy 231.676457 83.37946) (xy 231.589805 83.333143) (xy 231.495782 83.304622) (xy 231.398001 83.294991) (xy 230.147999 83.294991) + (xy 230.050218 83.304622) (xy 229.956195 83.333143) (xy 229.869543 83.37946) (xy 229.793591 83.441791) (xy 229.73126 83.517743) + (xy 229.684943 83.604395) (xy 229.656422 83.698418) (xy 229.646791 83.796199) (xy 229.646791 83.8212) (xy 229.105209 83.8212) + (xy 229.105209 83.796199) (xy 229.095578 83.698418) (xy 229.067057 83.604395) (xy 229.02074 83.517743) (xy 228.958409 83.441791) + (xy 228.882457 83.37946) (xy 228.795805 83.333143) (xy 228.701782 83.304622) (xy 228.604001 83.294991) (xy 228.354 83.294991) + (xy 228.354 82.071792) (xy 228.3558 82.051742) (xy 228.352038 82.016664) (xy 228.348574 81.981487) (xy 228.348098 81.979918) + (xy 228.347924 81.978295) (xy 228.337406 81.944673) (xy 228.327131 81.9108) (xy 228.326358 81.909354) (xy 228.32587 81.907794) + (xy 228.30895 81.876787) (xy 228.292309 81.845653) (xy 228.291273 81.844391) (xy 228.290488 81.842952) (xy 228.267828 81.815822) + (xy 228.245448 81.788552) (xy 228.229888 81.775782) (xy 224.303841 77.917036) (xy 224.312 77.876019) (xy 224.312 77.747981) + (xy 224.287021 77.622402) (xy 224.238022 77.50411) (xy 224.166888 77.397649) (xy 224.076351 77.307112) (xy 223.96989 77.235978) + (xy 223.851598 77.186979) (xy 223.726019 77.162) (xy 223.597981 77.162) (xy 223.472402 77.186979) (xy 223.35411 77.235978) + (xy 223.247649 77.307112) (xy 223.157112 77.397649) (xy 223.085978 77.50411) (xy 223.036979 77.622402) (xy 223.012 77.747981) + (xy 215.452311 77.747981) (xy 211.943 74.238671) (xy 211.943 73.966597) (xy 212.017106 74.056895) (xy 212.131308 74.150619) + (xy 212.2616 74.220261) (xy 212.402975 74.263147) (xy 212.55 74.277628) (xy 212.697026 74.263147) (xy 212.838401 74.220261) + (xy 212.968693 74.150619) (xy 213.082895 74.056895) (xy 213.176619 73.942693) (xy 213.246261 73.812401) (xy 213.289147 73.671026) + (xy 213.3 73.560835) (xy 213.3 72.487166) (xy 213.8 72.487166) (xy 213.800001 73.560835) (xy 213.810854 73.671026) + (xy 213.85374 73.812401) (xy 213.923382 73.942693) (xy 214.017106 74.056895) (xy 214.131308 74.150619) (xy 214.2616 74.220261) + (xy 214.402975 74.263147) (xy 214.55 74.277628) (xy 214.697026 74.263147) (xy 214.838401 74.220261) (xy 214.968693 74.150619) + (xy 215.082895 74.056895) (xy 215.176619 73.942693) (xy 215.246261 73.812401) (xy 215.289147 73.671026) (xy 215.3 73.560835) + (xy 215.3 73.228) (xy 215.8 73.228) (xy 215.8 73.728) (xy 215.854209 73.870398) (xy 215.935157 73.999484) + (xy 216.039733 74.110298) (xy 216.163919 74.198581) (xy 216.235609 74.204925) (xy 216.346 74.180537) (xy 216.346 73.228) + (xy 216.754 73.228) (xy 216.754 74.180537) (xy 216.864391 74.204925) (xy 216.936081 74.198581) (xy 217.060267 74.110298) + (xy 217.164843 73.999484) (xy 217.245791 73.870398) (xy 217.3 73.728) (xy 217.3 73.228) (xy 216.754 73.228) + (xy 216.346 73.228) (xy 215.8 73.228) (xy 215.3 73.228) (xy 215.3 72.487165) (xy 215.289147 72.376974) + (xy 215.271864 72.32) (xy 215.8 72.32) (xy 215.8 72.82) (xy 216.346 72.82) (xy 216.346 71.867463) + (xy 216.754 71.867463) (xy 216.754 72.82) (xy 217.3 72.82) (xy 217.3 72.32) (xy 217.245791 72.177602) + (xy 217.164843 72.048516) (xy 217.060267 71.937702) (xy 216.936081 71.849419) (xy 216.864391 71.843075) (xy 216.754 71.867463) + (xy 216.346 71.867463) (xy 216.235609 71.843075) (xy 216.163919 71.849419) (xy 216.039733 71.937702) (xy 215.935157 72.048516) + (xy 215.854209 72.177602) (xy 215.8 72.32) (xy 215.271864 72.32) (xy 215.246261 72.235599) (xy 215.176619 72.105307) + (xy 215.082895 71.991105) (xy 214.968692 71.897381) (xy 214.8384 71.827739) (xy 214.697025 71.784853) (xy 214.55 71.770372) + (xy 214.402974 71.784853) (xy 214.261599 71.827739) (xy 214.131307 71.897381) (xy 214.017105 71.991105) (xy 213.923381 72.105308) + (xy 213.853739 72.2356) (xy 213.810853 72.376975) (xy 213.8 72.487166) (xy 213.3 72.487166) (xy 213.3 72.487165) + (xy 213.289147 72.376974) (xy 213.246261 72.235599) (xy 213.176619 72.105307) (xy 213.082895 71.991105) (xy 213 71.923075) + (xy 213 71.198395) (xy 215.111396 69.087) (xy 222.196571 69.087) (xy 222.194044 69.087745) (xy 222.192725 69.088437) + (xy 222.1913 69.088869) (xy 222.160068 69.105563) (xy 222.128626 69.122052) (xy 222.127465 69.12299) (xy 222.126153 69.123691) + (xy 222.098772 69.146162) (xy 222.085557 69.156834) (xy 222.084501 69.157873) (xy 222.069052 69.170552) (xy 222.05825 69.183714) + (xy 221.554883 69.679217) (xy 221.503519 69.669) (xy 221.375481 69.669) (xy 221.249902 69.693979) (xy 221.13161 69.742978) + (xy 221.025149 69.814112) (xy 220.934612 69.904649) (xy 220.863478 70.01111) (xy 220.814479 70.129402) (xy 220.7895 70.254981) + (xy 220.7895 70.383019) (xy 220.814479 70.508598) (xy 220.863478 70.62689) (xy 220.934612 70.733351) (xy 221.025149 70.823888) + (xy 221.13161 70.895022) (xy 221.249902 70.944021) (xy 221.375481 70.969) (xy 221.503519 70.969) (xy 221.629098 70.944021) + (xy 221.74739 70.895022) (xy 221.853851 70.823888) (xy 221.944388 70.733351) (xy 222.015522 70.62689) (xy 222.064521 70.508598) + (xy 222.0895 70.383019) (xy 222.0895 70.254981) (xy 222.081246 70.213484) (xy 222.489103 69.812) (xy 225.044833 69.812) + (xy 225.05798 69.82802) (xy 225.068922 69.837) (xy 225.05798 69.84598) (xy 225.011194 69.902989) (xy 224.976428 69.968031) + (xy 224.95502 70.038605) (xy 224.947791 70.112) (xy 224.947791 70.362) (xy 224.95502 70.435395) (xy 224.976428 70.505969) + (xy 225.011194 70.571011) (xy 225.05798 70.62802) (xy 225.114989 70.674806) (xy 225.180031 70.709572) (xy 225.250605 70.73098) + (xy 225.324 70.738209) (xy 225.574001 70.738209) (xy 225.574 72.606584) (xy 225.572186 72.625) (xy 225.574 72.643416) + (xy 225.574 72.643418) (xy 225.579426 72.698512) (xy 225.600869 72.769199) (xy 225.635691 72.834346) (xy 225.682552 72.891448) + (xy 225.696866 72.903195) (xy 235.508001 82.714331) (xy 235.508001 83.311791) (xy 235.257999 83.311791) (xy 235.160218 83.321422) + (xy 235.066195 83.349943) (xy 234.979543 83.39626) (xy 234.903591 83.458591) (xy 234.84126 83.534543) (xy 234.794943 83.621195) + (xy 234.766422 83.715218) (xy 234.756791 83.812999) (xy 234.756791 84.613001) (xy 234.766422 84.710782) (xy 234.794943 84.804805) + (xy 234.84126 84.891457) (xy 234.903591 84.967409) (xy 234.979543 85.02974) (xy 235.066195 85.076057) (xy 235.160218 85.104578) + (xy 235.257999 85.114209) (xy 236.508001 85.114209) (xy 236.605782 85.104578) (xy 236.699805 85.076057) (xy 236.786457 85.02974) + (xy 236.862409 84.967409) (xy 236.92474 84.891457) (xy 236.971057 84.804805) (xy 236.999578 84.710782) (xy 237.009209 84.613001) + (xy 237.009209 84.569) (xy 237.591791 84.569) (xy 237.591791 84.594001) (xy 237.601422 84.691782) (xy 237.629943 84.785805) + (xy 237.67626 84.872457) (xy 237.738591 84.948409) (xy 237.814543 85.01074) (xy 237.901195 85.057057) (xy 237.995218 85.085578) + (xy 238.092999 85.095209) (xy 239.343001 85.095209) (xy 239.440782 85.085578) (xy 239.534805 85.057057) (xy 239.621457 85.01074) + (xy 239.697409 84.948409) (xy 239.75974 84.872457) (xy 239.806057 84.785805) (xy 239.834578 84.691782) (xy 239.844209 84.594001) + (xy 239.844209 83.793999) (xy 239.834578 83.696218) (xy 239.806057 83.602195) (xy 239.75974 83.515543) (xy 239.697409 83.439591) + (xy 239.621457 83.37726) (xy 239.534805 83.330943) (xy 239.440782 83.302422) (xy 239.343001 83.292791) (xy 238.092999 83.292791) + (xy 237.995218 83.302422) (xy 237.901195 83.330943) (xy 237.814543 83.37726) (xy 237.738591 83.439591) (xy 237.67626 83.515543) + (xy 237.629943 83.602195) (xy 237.601422 83.696218) (xy 237.591791 83.793999) (xy 237.591791 83.819) (xy 237.009209 83.819) + (xy 237.009209 83.812999) (xy 236.999578 83.715218) (xy 236.971057 83.621195) (xy 236.92474 83.534543) (xy 236.862409 83.458591) + (xy 236.786457 83.39626) (xy 236.699805 83.349943) (xy 236.605782 83.321422) (xy 236.508001 83.311791) (xy 236.258 83.311791) + (xy 236.258 82.709) (xy 241.880791 82.709) (xy 241.880791 85.209) (xy 241.890422 85.306781) (xy 241.918943 85.400804) + (xy 241.96526 85.487457) (xy 242.027592 85.563408) (xy 242.103543 85.62574) (xy 242.190196 85.672057) (xy 242.284219 85.700578) + (xy 242.382 85.710209) (xy 243.482 85.710209) (xy 243.579781 85.700578) (xy 243.673804 85.672057) (xy 243.760457 85.62574) + (xy 243.836408 85.563408) (xy 243.89874 85.487457) (xy 243.945057 85.400804) (xy 243.973578 85.306781) (xy 243.983209 85.209) + (xy 243.983209 83.459) (xy 244.58079 83.459) (xy 244.582 85.9425) (xy 244.6445 86.005) (xy 245.128 86.005) + (xy 245.128 83.2715) (xy 245.536 83.2715) (xy 245.536 86.005) (xy 246.0195 86.005) (xy 246.082 85.9425) + (xy 246.08321 83.459) (xy 246.078383 83.409991) (xy 246.064088 83.362866) (xy 246.040873 83.319435) (xy 246.009632 83.281368) + (xy 245.971565 83.250127) (xy 245.928134 83.226912) (xy 245.881009 83.212617) (xy 245.832 83.20779) (xy 245.5985 83.209) + (xy 245.536 83.2715) (xy 245.128 83.2715) (xy 245.0655 83.209) (xy 244.832 83.20779) (xy 244.782991 83.212617) + (xy 244.735866 83.226912) (xy 244.692435 83.250127) (xy 244.654368 83.281368) (xy 244.623127 83.319435) (xy 244.599912 83.362866) + (xy 244.585617 83.409991) (xy 244.58079 83.459) (xy 243.983209 83.459) (xy 243.983209 82.709) (xy 243.973578 82.611219) + (xy 243.945057 82.517196) (xy 243.89874 82.430543) (xy 243.836408 82.354592) (xy 243.760457 82.29226) (xy 243.673804 82.245943) + (xy 243.579781 82.217422) (xy 243.482 82.207791) (xy 242.382 82.207791) (xy 242.284219 82.217422) (xy 242.190196 82.245943) + (xy 242.103543 82.29226) (xy 242.027592 82.354592) (xy 241.96526 82.430543) (xy 241.918943 82.517196) (xy 241.890422 82.611219) + (xy 241.880791 82.709) (xy 236.258 82.709) (xy 236.258 82.577416) (xy 236.259814 82.559) (xy 236.258 82.540581) + (xy 236.252574 82.485487) (xy 236.231131 82.4148) (xy 236.205308 82.366488) (xy 236.19631 82.349653) (xy 236.161189 82.306859) + (xy 236.149448 82.292552) (xy 236.135139 82.280809) (xy 226.324 72.469671) (xy 226.324 70.987) (xy 226.822791 70.987) + (xy 226.822791 72.237) (xy 226.83002 72.310395) (xy 226.851428 72.380969) (xy 226.886194 72.446011) (xy 226.93298 72.50302) + (xy 226.989989 72.549806) (xy 227.055031 72.584572) (xy 227.125605 72.60598) (xy 227.199 72.613209) (xy 227.449 72.613209) + (xy 227.522395 72.60598) (xy 227.592969 72.584572) (xy 227.658011 72.549806) (xy 227.71502 72.50302) (xy 227.724 72.492078) + (xy 227.73298 72.50302) (xy 227.789989 72.549806) (xy 227.855031 72.584572) (xy 227.925605 72.60598) (xy 227.999 72.613209) + (xy 228.249 72.613209) (xy 228.322395 72.60598) (xy 228.392969 72.584572) (xy 228.458011 72.549806) (xy 228.51502 72.50302) + (xy 228.524 72.492078) (xy 228.53298 72.50302) (xy 228.589989 72.549806) (xy 228.655031 72.584572) (xy 228.725605 72.60598) + (xy 228.799 72.613209) (xy 229.049 72.613209) (xy 229.122395 72.60598) (xy 229.192969 72.584572) (xy 229.258011 72.549806) + (xy 229.31502 72.50302) (xy 229.324 72.492078) (xy 229.33298 72.50302) (xy 229.364464 72.528858) (xy 229.374059 73.095793) + (xy 229.343649 73.116112) (xy 229.253112 73.206649) (xy 229.181978 73.31311) (xy 229.132979 73.431402) (xy 229.108 73.556981) + (xy 229.108 73.685019) (xy 229.132979 73.810598) (xy 229.181978 73.92889) (xy 229.253112 74.035351) (xy 229.343649 74.125888) + (xy 229.45011 74.197022) (xy 229.568402 74.246021) (xy 229.693981 74.271) (xy 229.822019 74.271) (xy 229.947598 74.246021) + (xy 230.06589 74.197022) (xy 230.172351 74.125888) (xy 230.262888 74.035351) (xy 230.334022 73.92889) (xy 230.383021 73.810598) + (xy 230.408 73.685019) (xy 230.408 73.556981) (xy 230.383021 73.431402) (xy 230.334022 73.31311) (xy 230.262888 73.206649) + (xy 230.172351 73.116112) (xy 230.123961 73.083779) (xy 230.114145 72.503738) (xy 230.11502 72.50302) (xy 230.124 72.492078) + (xy 230.13298 72.50302) (xy 230.189989 72.549806) (xy 230.255031 72.584572) (xy 230.325605 72.60598) (xy 230.399 72.613209) + (xy 230.649 72.613209) (xy 230.722395 72.60598) (xy 230.792969 72.584572) (xy 230.858011 72.549806) (xy 230.91502 72.50302) + (xy 230.924 72.492078) (xy 230.93298 72.50302) (xy 230.949 72.516168) (xy 230.949001 74.081574) (xy 230.947186 74.1) + (xy 230.950634 74.135) (xy 230.954427 74.173513) (xy 230.97587 74.2442) (xy 231.010692 74.309347) (xy 231.057553 74.366448) + (xy 231.071862 74.378191) (xy 235.989809 79.296139) (xy 236.001552 79.310448) (xy 236.058653 79.357309) (xy 236.1238 79.392131) + (xy 236.194487 79.413574) (xy 236.249581 79.419) (xy 236.249584 79.419) (xy 236.268 79.420814) (xy 236.286416 79.419) + (xy 246.636819 79.419) (xy 246.663112 79.458351) (xy 246.753649 79.548888) (xy 246.86011 79.620022) (xy 246.978402 79.669021) + (xy 247.103981 79.694) (xy 247.232019 79.694) (xy 247.357598 79.669021) (xy 247.47589 79.620022) (xy 247.582351 79.548888) + (xy 247.672888 79.458351) (xy 247.744022 79.35189) (xy 247.793021 79.233598) (xy 247.818 79.108019) (xy 247.818 78.979981) + (xy 247.793021 78.854402) (xy 247.744022 78.73611) (xy 247.672888 78.629649) (xy 247.582351 78.539112) (xy 247.47589 78.467978) + (xy 247.357598 78.418979) (xy 247.232019 78.394) (xy 247.103981 78.394) (xy 246.978402 78.418979) (xy 246.86011 78.467978) + (xy 246.753649 78.539112) (xy 246.663112 78.629649) (xy 246.636819 78.669) (xy 236.42333 78.669) (xy 231.699 73.944671) + (xy 231.699 73.072165) (xy 231.706243 73.096042) (xy 231.748029 73.174218) (xy 231.790172 73.225569) (xy 236.08543 77.520828) + (xy 236.136781 77.562971) (xy 236.214957 77.604757) (xy 236.299783 77.630488) (xy 236.387998 77.639176) (xy 236.476213 77.630488) + (xy 236.561038 77.604757) (xy 236.639214 77.562971) (xy 236.640397 77.562) (xy 248.236791 77.562) (xy 248.236791 77.587001) + (xy 248.246422 77.684782) (xy 248.274943 77.778805) (xy 248.32126 77.865457) (xy 248.383591 77.941409) (xy 248.459543 78.00374) + (xy 248.546195 78.050057) (xy 248.640218 78.078578) (xy 248.737999 78.088209) (xy 248.988 78.088209) (xy 248.988001 83.21705) + (xy 248.984219 83.217422) (xy 248.890196 83.245943) (xy 248.803543 83.29226) (xy 248.727592 83.354592) (xy 248.66526 83.430543) + (xy 248.618943 83.517196) (xy 248.590422 83.611219) (xy 248.580791 83.709) (xy 248.580791 88.709) (xy 248.590422 88.806781) + (xy 248.618943 88.900804) (xy 248.66526 88.987457) (xy 248.727592 89.063408) (xy 248.803543 89.12574) (xy 248.890196 89.172057) + (xy 248.984219 89.200578) (xy 249.082 89.210209) (xy 249.582 89.210209) (xy 249.679781 89.200578) (xy 249.773804 89.172057) + (xy 249.860457 89.12574) (xy 249.936408 89.063408) (xy 249.99874 88.987457) (xy 250.045057 88.900804) (xy 250.073578 88.806781) + (xy 250.083209 88.709) (xy 250.083209 83.709) (xy 250.580791 83.709) (xy 250.580791 88.709) (xy 250.590422 88.806781) + (xy 250.618943 88.900804) (xy 250.66526 88.987457) (xy 250.727592 89.063408) (xy 250.803543 89.12574) (xy 250.890196 89.172057) + (xy 250.984219 89.200578) (xy 251.082 89.210209) (xy 251.582 89.210209) (xy 251.679781 89.200578) (xy 251.773804 89.172057) + (xy 251.860457 89.12574) (xy 251.936408 89.063408) (xy 251.99874 88.987457) (xy 252.045057 88.900804) (xy 252.073578 88.806781) + (xy 252.083209 88.709) (xy 252.083209 83.709) (xy 252.073578 83.611219) (xy 252.045057 83.517196) (xy 251.99874 83.430543) + (xy 251.936408 83.354592) (xy 251.860457 83.29226) (xy 251.773804 83.245943) (xy 251.707 83.225679) (xy 251.707 82.709) + (xy 252.680791 82.709) (xy 252.680791 85.209) (xy 252.690422 85.306781) (xy 252.718943 85.400804) (xy 252.76526 85.487457) + (xy 252.827592 85.563408) (xy 252.903543 85.62574) (xy 252.990196 85.672057) (xy 253.084219 85.700578) (xy 253.182 85.710209) + (xy 254.282 85.710209) (xy 254.379781 85.700578) (xy 254.473804 85.672057) (xy 254.560457 85.62574) (xy 254.636408 85.563408) + (xy 254.69874 85.487457) (xy 254.745057 85.400804) (xy 254.773578 85.306781) (xy 254.783209 85.209) (xy 254.783209 82.709) + (xy 254.773578 82.611219) (xy 254.745057 82.517196) (xy 254.69874 82.430543) (xy 254.636408 82.354592) (xy 254.560457 82.29226) + (xy 254.473804 82.245943) (xy 254.379781 82.217422) (xy 254.282 82.207791) (xy 253.182 82.207791) (xy 253.084219 82.217422) + (xy 252.990196 82.245943) (xy 252.903543 82.29226) (xy 252.827592 82.354592) (xy 252.76526 82.430543) (xy 252.718943 82.517196) + (xy 252.690422 82.611219) (xy 252.680791 82.709) (xy 251.707 82.709) (xy 251.707 82.285329) (xy 252.155139 81.837191) + (xy 252.169448 81.825448) (xy 252.216309 81.768347) (xy 252.251131 81.7032) (xy 252.272574 81.632513) (xy 252.278 81.577419) + (xy 252.278 81.577416) (xy 252.279814 81.559) (xy 252.278 81.540584) (xy 252.278 79.585204) (xy 252.332351 79.548888) + (xy 252.422888 79.458351) (xy 252.494022 79.35189) (xy 252.543021 79.233598) (xy 252.568 79.108019) (xy 252.568 78.979981) + (xy 252.543021 78.854402) (xy 252.494022 78.73611) (xy 252.422888 78.629649) (xy 252.332351 78.539112) (xy 252.278 78.502796) + (xy 252.278 78.088209) (xy 252.528001 78.088209) (xy 252.625782 78.078578) (xy 252.719805 78.050057) (xy 252.806457 78.00374) + (xy 252.882409 77.941409) (xy 252.94474 77.865457) (xy 252.991057 77.778805) (xy 253.019578 77.684782) (xy 253.029209 77.587001) + (xy 253.029209 76.786999) (xy 253.019578 76.689218) (xy 252.991057 76.595195) (xy 252.94474 76.508543) (xy 252.882409 76.432591) + (xy 252.806457 76.37026) (xy 252.719805 76.323943) (xy 252.625782 76.295422) (xy 252.528001 76.285791) (xy 251.277999 76.285791) + (xy 251.180218 76.295422) (xy 251.086195 76.323943) (xy 250.999543 76.37026) (xy 250.923591 76.432591) (xy 250.86126 76.508543) + (xy 250.814943 76.595195) (xy 250.786422 76.689218) (xy 250.776791 76.786999) (xy 250.776791 77.587001) (xy 250.786422 77.684782) + (xy 250.814943 77.778805) (xy 250.86126 77.865457) (xy 250.923591 77.941409) (xy 250.999543 78.00374) (xy 251.086195 78.050057) + (xy 251.180218 78.078578) (xy 251.277999 78.088209) (xy 251.528 78.088209) (xy 251.528 78.522841) (xy 251.503649 78.539112) + (xy 251.413112 78.629649) (xy 251.341978 78.73611) (xy 251.292979 78.854402) (xy 251.268 78.979981) (xy 251.268 79.108019) + (xy 251.292979 79.233598) (xy 251.341978 79.35189) (xy 251.413112 79.458351) (xy 251.503649 79.548888) (xy 251.528001 79.565159) + (xy 251.528001 81.403669) (xy 251.079866 81.851805) (xy 251.065552 81.863552) (xy 251.018691 81.920654) (xy 250.983869 81.985801) + (xy 250.962426 82.056488) (xy 250.957 82.111581) (xy 250.955186 82.13) (xy 250.957 82.148416) (xy 250.957 83.225679) + (xy 250.890196 83.245943) (xy 250.803543 83.29226) (xy 250.727592 83.354592) (xy 250.66526 83.430543) (xy 250.618943 83.517196) + (xy 250.590422 83.611219) (xy 250.580791 83.709) (xy 250.083209 83.709) (xy 250.073578 83.611219) (xy 250.045057 83.517196) + (xy 249.99874 83.430543) (xy 249.936408 83.354592) (xy 249.860457 83.29226) (xy 249.773804 83.245943) (xy 249.738 83.235082) + (xy 249.738 78.088209) (xy 249.988001 78.088209) (xy 250.085782 78.078578) (xy 250.179805 78.050057) (xy 250.266457 78.00374) + (xy 250.342409 77.941409) (xy 250.40474 77.865457) (xy 250.451057 77.778805) (xy 250.479578 77.684782) (xy 250.489209 77.587001) + (xy 250.489209 76.786999) (xy 250.479578 76.689218) (xy 250.451057 76.595195) (xy 250.40474 76.508543) (xy 250.342409 76.432591) + (xy 250.266457 76.37026) (xy 250.179805 76.323943) (xy 250.085782 76.295422) (xy 249.988001 76.285791) (xy 248.737999 76.285791) + (xy 248.640218 76.295422) (xy 248.546195 76.323943) (xy 248.459543 76.37026) (xy 248.383591 76.432591) (xy 248.32126 76.508543) + (xy 248.274943 76.595195) (xy 248.246422 76.689218) (xy 248.236791 76.786999) (xy 248.236791 76.812) (xy 236.649394 76.812) + (xy 234.772394 74.935) (xy 235.054961 74.935) (xy 235.134849 75.014888) (xy 235.24131 75.086022) (xy 235.359602 75.135021) + (xy 235.485181 75.16) (xy 235.613219 75.16) (xy 235.738798 75.135021) (xy 235.85709 75.086022) (xy 235.963551 75.014888) + (xy 236.054088 74.924351) (xy 236.125222 74.81789) (xy 236.174221 74.699598) (xy 236.1992 74.574019) (xy 236.1992 74.445981) + (xy 236.174221 74.320402) (xy 236.125222 74.20211) (xy 236.054088 74.095649) (xy 235.963551 74.005112) (xy 235.85709 73.933978) + (xy 235.738798 73.884979) (xy 235.613219 73.86) (xy 235.485181 73.86) (xy 235.359602 73.884979) (xy 235.24131 73.933978) + (xy 235.134849 74.005112) (xy 235.054961 74.085) (xy 234.86164 74.085) (xy 233.299 72.52236) (xy 233.299 72.516167) + (xy 233.31502 72.50302) (xy 233.361806 72.446011) (xy 233.396572 72.380969) (xy 233.41798 72.310395) (xy 233.425209 72.237) + (xy 233.425209 70.987) (xy 233.41798 70.913605) (xy 233.396572 70.843031) (xy 233.361806 70.777989) (xy 233.31502 70.72098) + (xy 233.258011 70.674194) (xy 233.192969 70.639428) (xy 233.122395 70.61802) (xy 233.049 70.610791) (xy 232.799 70.610791) + (xy 232.725605 70.61802) (xy 232.655031 70.639428) (xy 232.589989 70.674194) (xy 232.53298 70.72098) (xy 232.524 70.731922) + (xy 232.51502 70.72098) (xy 232.458011 70.674194) (xy 232.392969 70.639428) (xy 232.322395 70.61802) (xy 232.249 70.610791) + (xy 231.999 70.610791) (xy 231.925605 70.61802) (xy 231.855031 70.639428) (xy 231.789989 70.674194) (xy 231.73298 70.72098) + (xy 231.724 70.731922) (xy 231.71502 70.72098) (xy 231.658011 70.674194) (xy 231.592969 70.639428) (xy 231.522395 70.61802) + (xy 231.449 70.610791) (xy 231.199 70.610791) (xy 231.125605 70.61802) (xy 231.055031 70.639428) (xy 230.989989 70.674194) + (xy 230.93298 70.72098) (xy 230.924 70.731922) (xy 230.91502 70.72098) (xy 230.858011 70.674194) (xy 230.792969 70.639428) + (xy 230.722395 70.61802) (xy 230.649 70.610791) (xy 230.399 70.610791) (xy 230.325605 70.61802) (xy 230.255031 70.639428) + (xy 230.189989 70.674194) (xy 230.13298 70.72098) (xy 230.124 70.731922) (xy 230.11502 70.72098) (xy 230.058011 70.674194) + (xy 229.992969 70.639428) (xy 229.922395 70.61802) (xy 229.849 70.610791) (xy 229.599 70.610791) (xy 229.525605 70.61802) + (xy 229.455031 70.639428) (xy 229.389989 70.674194) (xy 229.33298 70.72098) (xy 229.324 70.731922) (xy 229.31502 70.72098) + (xy 229.258011 70.674194) (xy 229.192969 70.639428) (xy 229.122395 70.61802) (xy 229.049 70.610791) (xy 228.799 70.610791) + (xy 228.725605 70.61802) (xy 228.655031 70.639428) (xy 228.589989 70.674194) (xy 228.53298 70.72098) (xy 228.524 70.731922) + (xy 228.51502 70.72098) (xy 228.458011 70.674194) (xy 228.392969 70.639428) (xy 228.322395 70.61802) (xy 228.249 70.610791) + (xy 227.999 70.610791) (xy 227.925605 70.61802) (xy 227.855031 70.639428) (xy 227.789989 70.674194) (xy 227.73298 70.72098) + (xy 227.724 70.731922) (xy 227.71502 70.72098) (xy 227.658011 70.674194) (xy 227.592969 70.639428) (xy 227.522395 70.61802) + (xy 227.449 70.610791) (xy 227.199 70.610791) (xy 227.125605 70.61802) (xy 227.055031 70.639428) (xy 226.989989 70.674194) + (xy 226.93298 70.72098) (xy 226.886194 70.777989) (xy 226.851428 70.843031) (xy 226.83002 70.913605) (xy 226.822791 70.987) + (xy 226.324 70.987) (xy 226.324 70.738209) (xy 226.574 70.738209) (xy 226.647395 70.73098) (xy 226.717969 70.709572) + (xy 226.783011 70.674806) (xy 226.84002 70.62802) (xy 226.886806 70.571011) (xy 226.921572 70.505969) (xy 226.94298 70.435395) + (xy 226.950209 70.362) (xy 226.950209 70.112) (xy 226.94298 70.038605) (xy 226.921572 69.968031) (xy 226.886806 69.902989) + (xy 226.84002 69.84598) (xy 226.829078 69.837) (xy 226.84002 69.82802) (xy 226.886806 69.771011) (xy 226.921572 69.705969) + (xy 226.94298 69.635395) (xy 226.950209 69.562) (xy 226.950209 69.312) (xy 226.94298 69.238605) (xy 226.921572 69.168031) + (xy 226.886806 69.102989) (xy 226.84002 69.04598) (xy 226.829078 69.037) (xy 226.84002 69.02802) (xy 226.886806 68.971011) + (xy 226.921572 68.905969) (xy 226.94298 68.835395) (xy 226.950209 68.762) (xy 226.950209 68.512) (xy 226.94298 68.438605) + (xy 226.921572 68.368031) (xy 226.886806 68.302989) (xy 226.84002 68.24598) (xy 226.829078 68.237) (xy 226.84002 68.22802) + (xy 226.886806 68.171011) (xy 226.921572 68.105969) (xy 226.94298 68.035395) (xy 226.950209 67.962) (xy 226.950209 67.712) + (xy 226.94298 67.638605) (xy 226.921572 67.568031) (xy 226.886806 67.502989) (xy 226.84002 67.44598) (xy 226.829078 67.437) + (xy 226.84002 67.42802) (xy 226.886806 67.371011) (xy 226.921572 67.305969) (xy 226.94298 67.235395) (xy 226.950209 67.162) + (xy 226.950209 66.912) (xy 226.94298 66.838605) (xy 226.921572 66.768031) (xy 226.886806 66.702989) (xy 226.84002 66.64598) + (xy 226.829078 66.637) (xy 226.84002 66.62802) (xy 226.886806 66.571011) (xy 226.921572 66.505969) (xy 226.94298 66.435395) + (xy 226.950209 66.362) (xy 226.950209 66.112) (xy 226.94298 66.038605) (xy 226.921572 65.968031) (xy 226.886806 65.902989) + (xy 226.84002 65.84598) (xy 226.829078 65.837) (xy 226.84002 65.82802) (xy 226.886806 65.771011) (xy 226.921572 65.705969) + (xy 226.94298 65.635395) (xy 226.950209 65.562) (xy 226.950209 65.312) (xy 226.94298 65.238605) (xy 226.921572 65.168031) + (xy 226.886806 65.102989) (xy 226.84002 65.04598) (xy 226.829078 65.037) (xy 226.84002 65.02802) (xy 226.886806 64.971011) + (xy 226.921572 64.905969) (xy 226.94298 64.835395) (xy 226.950209 64.762) (xy 226.950209 64.512) (xy 226.94298 64.438605) + (xy 226.921572 64.368031) (xy 226.886806 64.302989) (xy 226.84002 64.24598) (xy 226.783011 64.199194) (xy 226.717969 64.164428) + (xy 226.647395 64.14302) (xy 226.574 64.135791) (xy 225.324 64.135791) (xy 225.250605 64.14302) (xy 225.180031 64.164428) + (xy 225.114989 64.199194) (xy 225.05798 64.24598) (xy 225.044833 64.262) (xy 224.61633 64.262) (xy 224.308767 63.954437) + (xy 224.318 63.908019) (xy 224.318 63.779981) (xy 224.293021 63.654402) (xy 224.244022 63.53611) (xy 224.172888 63.429649) + (xy 224.082351 63.339112) (xy 223.97589 63.267978) (xy 223.857598 63.218979) (xy 223.732019 63.194) (xy 223.603981 63.194) + (xy 223.478402 63.218979) (xy 223.36011 63.267978) (xy 223.253649 63.339112) (xy 223.163112 63.429649) (xy 223.091978 63.53611) + (xy 223.042979 63.654402) (xy 223.018 63.779981) (xy 223.018 63.908019) (xy 223.042979 64.033598) (xy 223.091978 64.15189) + (xy 223.163112 64.258351) (xy 223.253649 64.348888) (xy 223.36011 64.420022) (xy 223.478402 64.469021) (xy 223.603981 64.494) + (xy 223.732019 64.494) (xy 223.778437 64.484767) (xy 224.182809 64.889139) (xy 224.194552 64.903448) (xy 224.251653 64.950309) + (xy 224.3168 64.985131) (xy 224.387487 65.006574) (xy 224.442581 65.012) (xy 224.442583 65.012) (xy 224.460999 65.013814) + (xy 224.479415 65.012) (xy 225.044833 65.012) (xy 225.05798 65.02802) (xy 225.068922 65.037) (xy 225.05798 65.04598) + (xy 225.044833 65.062) (xy 209.893415 65.062) (xy 209.874999 65.060186) (xy 209.856583 65.062) (xy 209.856581 65.062) + (xy 209.801487 65.067426) (xy 209.7308 65.088869) (xy 209.665653 65.123691) (xy 209.608552 65.170552) (xy 209.596809 65.184861) + (xy 204.297862 70.483809) (xy 204.283553 70.495552) (xy 204.271811 70.50986) (xy 204.236691 70.552654) (xy 204.211831 70.599165) + (xy 204.20187 70.6178) (xy 204.180427 70.688487) (xy 204.180363 70.68914) (xy 204.173186 70.762) (xy 204.175001 70.780426) + (xy 204.175 71.874027) (xy 204.131307 71.897381) (xy 204.017105 71.991105) (xy 203.923381 72.105308) (xy 203.853739 72.2356) + (xy 203.810853 72.376975) (xy 203.8 72.487166) (xy 203.3 72.487166) (xy 203.3 72.32) (xy 203.245791 72.177602) + (xy 203.164843 72.048516) (xy 203.060267 71.937702) (xy 202.936081 71.849419) (xy 202.864391 71.843075) (xy 202.754 71.867463) + (xy 202.346 71.867463) (xy 202.235609 71.843075) (xy 202.163919 71.849419) (xy 202.039733 71.937702) (xy 201.935157 72.048516) + (xy 201.854209 72.177602) (xy 201.8 72.32) (xy 199.843 72.32) (xy 199.843 56.487166) (xy 201.8 56.487166) + (xy 201.800001 57.560835) (xy 201.810854 57.671026) (xy 201.85374 57.812401) (xy 201.923382 57.942693) (xy 202.017106 58.056895) + (xy 202.131308 58.150619) (xy 202.2616 58.220261) (xy 202.402975 58.263147) (xy 202.55 58.277628) (xy 202.697026 58.263147) + (xy 202.838401 58.220261) (xy 202.968693 58.150619) (xy 203.082895 58.056895) (xy 203.176619 57.942693) (xy 203.246261 57.812401) + (xy 203.289147 57.671026) (xy 203.3 57.560835) (xy 203.3 56.487166) (xy 203.8 56.487166) (xy 203.800001 57.560835) + (xy 203.810854 57.671026) (xy 203.85374 57.812401) (xy 203.923382 57.942693) (xy 204.017106 58.056895) (xy 204.131308 58.150619) + (xy 204.2616 58.220261) (xy 204.402975 58.263147) (xy 204.55 58.277628) (xy 204.697026 58.263147) (xy 204.838401 58.220261) + (xy 204.968693 58.150619) (xy 205.082895 58.056895) (xy 205.176619 57.942693) (xy 205.246261 57.812401) (xy 205.289147 57.671026) + (xy 205.3 57.560835) (xy 205.3 56.487166) (xy 205.8 56.487166) (xy 205.800001 57.560835) (xy 205.810854 57.671026) + (xy 205.85374 57.812401) (xy 205.923382 57.942693) (xy 206.017106 58.056895) (xy 206.131308 58.150619) (xy 206.175 58.173973) + (xy 206.175001 63.094574) (xy 206.173186 63.113) (xy 206.179767 63.179813) (xy 206.180427 63.186513) (xy 206.193255 63.228799) + (xy 206.20187 63.2572) (xy 206.236691 63.322346) (xy 206.250876 63.33963) (xy 206.283553 63.379448) (xy 206.297861 63.39119) + (xy 206.531809 63.625139) (xy 206.543552 63.639448) (xy 206.557859 63.651189) (xy 206.600653 63.68631) (xy 206.639969 63.707324) + (xy 206.6658 63.721131) (xy 206.736487 63.742574) (xy 206.791581 63.748) (xy 206.791584 63.748) (xy 206.81 63.749814) + (xy 206.828416 63.748) (xy 220.702819 63.748) (xy 220.729112 63.787351) (xy 220.819649 63.877888) (xy 220.92611 63.949022) + (xy 221.044402 63.998021) (xy 221.169981 64.023) (xy 221.298019 64.023) (xy 221.423598 63.998021) (xy 221.54189 63.949022) + (xy 221.648351 63.877888) (xy 221.738888 63.787351) (xy 221.810022 63.68089) (xy 221.859021 63.562598) (xy 221.884 63.437019) + (xy 221.884 63.308981) (xy 221.859021 63.183402) (xy 221.810022 63.06511) (xy 221.738888 62.958649) (xy 221.648351 62.868112) + (xy 221.54189 62.796978) (xy 221.423598 62.747979) (xy 221.298019 62.723) (xy 221.169981 62.723) (xy 221.044402 62.747979) + (xy 220.92611 62.796978) (xy 220.819649 62.868112) (xy 220.729112 62.958649) (xy 220.702819 62.998) (xy 206.96533 62.998) + (xy 206.925 62.957671) (xy 206.925 60.678) (xy 219.28079 60.678) (xy 219.285617 60.727009) (xy 219.299912 60.774134) + (xy 219.323127 60.817565) (xy 219.354368 60.855632) (xy 219.392435 60.886873) (xy 219.435866 60.910088) (xy 219.482991 60.924383) + (xy 219.532 60.92921) (xy 219.928 60.928) (xy 219.9905 60.8655) (xy 219.9905 59.982) (xy 220.3985 59.982) + (xy 220.3985 60.8655) (xy 220.461 60.928) (xy 220.857 60.92921) (xy 220.906009 60.924383) (xy 220.953134 60.910088) + (xy 220.996565 60.886873) (xy 221.034632 60.855632) (xy 221.065873 60.817565) (xy 221.089088 60.774134) (xy 221.103383 60.727009) + (xy 221.10821 60.678) (xy 221.107 60.0445) (xy 221.0445 59.982) (xy 220.3985 59.982) (xy 219.9905 59.982) + (xy 219.3445 59.982) (xy 219.282 60.0445) (xy 219.28079 60.678) (xy 206.925 60.678) (xy 206.925 58.878) + (xy 219.28079 58.878) (xy 219.282 59.5115) (xy 219.3445 59.574) (xy 219.9905 59.574) (xy 219.9905 58.6905) + (xy 220.3985 58.6905) (xy 220.3985 59.574) (xy 221.0445 59.574) (xy 221.107 59.5115) (xy 221.10821 58.878) + (xy 221.103383 58.828991) (xy 221.089088 58.781866) (xy 221.065873 58.738435) (xy 221.034632 58.700368) (xy 220.996565 58.669127) + (xy 220.953134 58.645912) (xy 220.906009 58.631617) (xy 220.857 58.62679) (xy 220.461 58.628) (xy 220.3985 58.6905) + (xy 219.9905 58.6905) (xy 219.928 58.628) (xy 219.532 58.62679) (xy 219.482991 58.631617) (xy 219.435866 58.645912) + (xy 219.392435 58.669127) (xy 219.354368 58.700368) (xy 219.323127 58.738435) (xy 219.299912 58.781866) (xy 219.285617 58.828991) + (xy 219.28079 58.878) (xy 206.925 58.878) (xy 206.925 58.173973) (xy 206.968693 58.150619) (xy 207.082895 58.056895) + (xy 207.176619 57.942693) (xy 207.246261 57.812401) (xy 207.289147 57.671026) (xy 207.3 57.560835) (xy 207.3 56.487165) + (xy 207.289147 56.376974) (xy 207.246261 56.235599) (xy 207.176619 56.105307) (xy 207.082895 55.991105) (xy 206.968692 55.897381) + (xy 206.8384 55.827739) (xy 206.697025 55.784853) (xy 206.55 55.770372) (xy 206.402974 55.784853) (xy 206.261599 55.827739) + (xy 206.131307 55.897381) (xy 206.017105 55.991105) (xy 205.923381 56.105308) (xy 205.853739 56.2356) (xy 205.810853 56.376975) + (xy 205.8 56.487166) (xy 205.3 56.487166) (xy 205.3 56.487165) (xy 205.289147 56.376974) (xy 205.246261 56.235599) + (xy 205.176619 56.105307) (xy 205.082895 55.991105) (xy 204.968692 55.897381) (xy 204.8384 55.827739) (xy 204.697025 55.784853) + (xy 204.55 55.770372) (xy 204.402974 55.784853) (xy 204.261599 55.827739) (xy 204.131307 55.897381) (xy 204.017105 55.991105) + (xy 203.923381 56.105308) (xy 203.853739 56.2356) (xy 203.810853 56.376975) (xy 203.8 56.487166) (xy 203.3 56.487166) + (xy 203.3 56.487165) (xy 203.289147 56.376974) (xy 203.246261 56.235599) (xy 203.176619 56.105307) (xy 203.082895 55.991105) + (xy 202.968692 55.897381) (xy 202.8384 55.827739) (xy 202.697025 55.784853) (xy 202.55 55.770372) (xy 202.402974 55.784853) + (xy 202.261599 55.827739) (xy 202.131307 55.897381) (xy 202.017105 55.991105) (xy 201.923381 56.105308) (xy 201.853739 56.2356) + (xy 201.810853 56.376975) (xy 201.8 56.487166) (xy 199.843 56.487166) (xy 199.843 54.709) (xy 202.22379 54.709) + (xy 202.228617 54.758009) (xy 202.242912 54.805134) (xy 202.266127 54.848565) (xy 202.297368 54.886632) (xy 202.335435 54.917873) + (xy 202.378866 54.941088) (xy 202.425991 54.955383) (xy 202.475 54.96021) (xy 202.871 54.959) (xy 202.9335 54.8965) + (xy 202.9335 54.013) (xy 203.3415 54.013) (xy 203.3415 54.8965) (xy 203.404 54.959) (xy 203.8 54.96021) + (xy 203.849009 54.955383) (xy 203.896134 54.941088) (xy 203.939565 54.917873) (xy 203.977632 54.886632) (xy 204.008873 54.848565) + (xy 204.032088 54.805134) (xy 204.046383 54.758009) (xy 204.05121 54.709) (xy 204.05 54.0755) (xy 203.9875 54.013) + (xy 203.3415 54.013) (xy 202.9335 54.013) (xy 202.2875 54.013) (xy 202.225 54.0755) (xy 202.22379 54.709) + (xy 199.843 54.709) (xy 199.843 52.909) (xy 202.22379 52.909) (xy 202.225 53.5425) (xy 202.2875 53.605) + (xy 202.9335 53.605) (xy 202.9335 52.7215) (xy 203.3415 52.7215) (xy 203.3415 53.605) (xy 203.9875 53.605) + (xy 204.05 53.5425) (xy 204.05121 52.909) (xy 204.046383 52.859991) (xy 204.032088 52.812866) (xy 204.008873 52.769435) + (xy 203.977632 52.731368) (xy 203.939565 52.700127) (xy 203.896134 52.676912) (xy 203.849009 52.662617) (xy 203.8 52.65779) + (xy 203.404 52.659) (xy 203.3415 52.7215) (xy 202.9335 52.7215) (xy 202.871 52.659) (xy 202.475 52.65779) + (xy 202.425991 52.662617) (xy 202.378866 52.676912) (xy 202.335435 52.700127) (xy 202.297368 52.731368) (xy 202.266127 52.769435) + (xy 202.242912 52.812866) (xy 202.228617 52.859991) (xy 202.22379 52.909) (xy 199.843 52.909) (xy 199.843 52.169) + (xy 202.22379 52.169) (xy 202.228617 52.218009) (xy 202.242912 52.265134) (xy 202.266127 52.308565) (xy 202.297368 52.346632) + (xy 202.335435 52.377873) (xy 202.378866 52.401088) (xy 202.425991 52.415383) (xy 202.475 52.42021) (xy 202.871 52.419) + (xy 202.9335 52.3565) (xy 202.9335 51.473) (xy 203.3415 51.473) (xy 203.3415 52.3565) (xy 203.404 52.419) + (xy 203.8 52.42021) (xy 203.849009 52.415383) (xy 203.896134 52.401088) (xy 203.939565 52.377873) (xy 203.977632 52.346632) + (xy 204.008873 52.308565) (xy 204.032088 52.265134) (xy 204.046383 52.218009) (xy 204.05121 52.169) (xy 204.05 51.5355) + (xy 203.9875 51.473) (xy 203.3415 51.473) (xy 202.9335 51.473) (xy 202.2875 51.473) (xy 202.225 51.5355) + (xy 202.22379 52.169) (xy 199.843 52.169) (xy 199.843 52.102561) (xy 199.897626 51.545449) (xy 200.056934 51.017795) + (xy 200.315697 50.531132) (xy 200.447928 50.369) (xy 202.22379 50.369) (xy 202.225 51.0025) (xy 202.2875 51.065) + (xy 202.9335 51.065) (xy 202.9335 50.1815) (xy 203.3415 50.1815) (xy 203.3415 51.065) (xy 203.9875 51.065) + (xy 204.05 51.0025) (xy 204.050732 50.618997) (xy 205.348791 50.618997) (xy 205.348791 51.919003) (xy 205.358422 52.016783) + (xy 205.386943 52.110806) (xy 205.433259 52.197458) (xy 205.495591 52.273409) (xy 205.571542 52.335741) (xy 205.658194 52.382057) + (xy 205.752217 52.410578) (xy 205.849997 52.420209) (xy 205.8875 52.420209) (xy 205.887501 52.657791) (xy 205.849997 52.657791) + (xy 205.752217 52.667422) (xy 205.658194 52.695943) (xy 205.571542 52.742259) (xy 205.495591 52.804591) (xy 205.433259 52.880542) + (xy 205.386943 52.967194) (xy 205.358422 53.061217) (xy 205.348791 53.158997) (xy 205.348791 54.459003) (xy 205.358422 54.556783) + (xy 205.386943 54.650806) (xy 205.433259 54.737458) (xy 205.495591 54.813409) (xy 205.571542 54.875741) (xy 205.658194 54.922057) + (xy 205.752217 54.950578) (xy 205.849997 54.960209) (xy 206.675003 54.960209) (xy 206.772783 54.950578) (xy 206.866806 54.922057) + (xy 206.953458 54.875741) (xy 207.029409 54.813409) (xy 207.091741 54.737458) (xy 207.138057 54.650806) (xy 207.166578 54.556783) + (xy 207.176209 54.459003) (xy 207.176209 54.184) (xy 207.191671 54.184) (xy 207.884233 54.876563) (xy 207.875 54.922981) + (xy 207.875 55.051019) (xy 207.899979 55.176598) (xy 207.948978 55.29489) (xy 208.020112 55.401351) (xy 208.110649 55.491888) + (xy 208.175001 55.534886) (xy 208.175001 55.874026) (xy 208.131307 55.897381) (xy 208.017105 55.991105) (xy 207.923381 56.105308) + (xy 207.853739 56.2356) (xy 207.810853 56.376975) (xy 207.8 56.487166) (xy 207.800001 57.560835) (xy 207.810854 57.671026) + (xy 207.85374 57.812401) (xy 207.923382 57.942693) (xy 208.017106 58.056895) (xy 208.131308 58.150619) (xy 208.2616 58.220261) + (xy 208.402975 58.263147) (xy 208.55 58.277628) (xy 208.697026 58.263147) (xy 208.838401 58.220261) (xy 208.968693 58.150619) + (xy 209.082895 58.056895) (xy 209.176619 57.942693) (xy 209.246261 57.812401) (xy 209.289147 57.671026) (xy 209.3 57.560835) + (xy 209.3 56.487166) (xy 209.8 56.487166) (xy 209.800001 57.560835) (xy 209.810854 57.671026) (xy 209.85374 57.812401) + (xy 209.923382 57.942693) (xy 210.017106 58.056895) (xy 210.131308 58.150619) (xy 210.2616 58.220261) (xy 210.402975 58.263147) + (xy 210.55 58.277628) (xy 210.697026 58.263147) (xy 210.838401 58.220261) (xy 210.968693 58.150619) (xy 211.082895 58.056895) + (xy 211.176619 57.942693) (xy 211.246261 57.812401) (xy 211.289147 57.671026) (xy 211.3 57.560835) (xy 211.3 56.487166) + (xy 211.8 56.487166) (xy 211.800001 57.560835) (xy 211.810854 57.671026) (xy 211.85374 57.812401) (xy 211.923382 57.942693) + (xy 212.017106 58.056895) (xy 212.131308 58.150619) (xy 212.2616 58.220261) (xy 212.402975 58.263147) (xy 212.55 58.277628) + (xy 212.697026 58.263147) (xy 212.838401 58.220261) (xy 212.968693 58.150619) (xy 213.082895 58.056895) (xy 213.176619 57.942693) + (xy 213.246261 57.812401) (xy 213.289147 57.671026) (xy 213.3 57.560835) (xy 213.3 57.228) (xy 213.8 57.228) + (xy 213.8 57.728) (xy 213.854209 57.870398) (xy 213.935157 57.999484) (xy 214.039733 58.110298) (xy 214.163919 58.198581) + (xy 214.235609 58.204925) (xy 214.346 58.180537) (xy 214.346 57.228) (xy 214.754 57.228) (xy 214.754 58.180537) + (xy 214.864391 58.204925) (xy 214.936081 58.198581) (xy 215.060267 58.110298) (xy 215.164843 57.999484) (xy 215.245791 57.870398) + (xy 215.3 57.728) (xy 215.3 57.228) (xy 214.754 57.228) (xy 214.346 57.228) (xy 213.8 57.228) + (xy 213.3 57.228) (xy 213.3 56.487165) (xy 213.289147 56.376974) (xy 213.271864 56.32) (xy 213.8 56.32) + (xy 213.8 56.82) (xy 214.346 56.82) (xy 214.346 55.867463) (xy 214.754 55.867463) (xy 214.754 56.82) + (xy 215.3 56.82) (xy 215.3 56.32) (xy 215.245791 56.177602) (xy 215.164843 56.048516) (xy 215.060267 55.937702) + (xy 214.936081 55.849419) (xy 214.864391 55.843075) (xy 214.754 55.867463) (xy 214.346 55.867463) (xy 214.235609 55.843075) + (xy 214.163919 55.849419) (xy 214.039733 55.937702) (xy 213.935157 56.048516) (xy 213.854209 56.177602) (xy 213.8 56.32) + (xy 213.271864 56.32) (xy 213.246261 56.235599) (xy 213.176619 56.105307) (xy 213.082895 55.991105) (xy 212.968692 55.897381) + (xy 212.8384 55.827739) (xy 212.697025 55.784853) (xy 212.55 55.770372) (xy 212.402974 55.784853) (xy 212.261599 55.827739) + (xy 212.131307 55.897381) (xy 212.017105 55.991105) (xy 211.923381 56.105308) (xy 211.853739 56.2356) (xy 211.810853 56.376975) + (xy 211.8 56.487166) (xy 211.3 56.487166) (xy 211.3 56.487165) (xy 211.289147 56.376974) (xy 211.246261 56.235599) + (xy 211.176619 56.105307) (xy 211.082895 55.991105) (xy 210.968692 55.897381) (xy 210.8384 55.827739) (xy 210.697025 55.784853) + (xy 210.55 55.770372) (xy 210.402974 55.784853) (xy 210.261599 55.827739) (xy 210.131307 55.897381) (xy 210.017105 55.991105) + (xy 209.923381 56.105308) (xy 209.853739 56.2356) (xy 209.810853 56.376975) (xy 209.8 56.487166) (xy 209.3 56.487166) + (xy 209.3 56.487165) (xy 209.289147 56.376974) (xy 209.246261 56.235599) (xy 209.176619 56.105307) (xy 209.082895 55.991105) + (xy 208.968692 55.897381) (xy 208.925 55.874027) (xy 208.925 55.501477) (xy 208.939351 55.491888) (xy 209.029888 55.401351) + (xy 209.101022 55.29489) (xy 209.150021 55.176598) (xy 209.175 55.051019) (xy 209.175 54.922981) (xy 209.174062 54.918267) + (xy 212.491329 51.601) (xy 215.433791 51.601) (xy 215.433791 53.301) (xy 215.438618 53.350008) (xy 215.452913 53.397134) + (xy 215.476127 53.440564) (xy 215.507368 53.478632) (xy 215.545436 53.509873) (xy 215.588866 53.533087) (xy 215.635992 53.547382) + (xy 215.685 53.552209) (xy 216.16 53.552209) (xy 216.160001 55.882044) (xy 216.131307 55.897381) (xy 216.017105 55.991105) + (xy 215.923381 56.105308) (xy 215.853739 56.2356) (xy 215.810853 56.376975) (xy 215.8 56.487166) (xy 215.800001 57.560835) + (xy 215.810854 57.671026) (xy 215.85374 57.812401) (xy 215.923382 57.942693) (xy 216.017106 58.056895) (xy 216.131308 58.150619) + (xy 216.2616 58.220261) (xy 216.402975 58.263147) (xy 216.55 58.277628) (xy 216.697026 58.263147) (xy 216.838401 58.220261) + (xy 216.968693 58.150619) (xy 217.082895 58.056895) (xy 217.176619 57.942693) (xy 217.20799 57.884) (xy 219.28079 57.884) + (xy 219.285617 57.933009) (xy 219.299912 57.980134) (xy 219.323127 58.023565) (xy 219.354368 58.061632) (xy 219.392435 58.092873) + (xy 219.435866 58.116088) (xy 219.482991 58.130383) (xy 219.532 58.13521) (xy 219.928 58.134) (xy 219.9905 58.0715) + (xy 219.9905 57.188) (xy 220.3985 57.188) (xy 220.3985 58.0715) (xy 220.461 58.134) (xy 220.857 58.13521) + (xy 220.906009 58.130383) (xy 220.953134 58.116088) (xy 220.996565 58.092873) (xy 221.034632 58.061632) (xy 221.065873 58.023565) + (xy 221.089088 57.980134) (xy 221.103383 57.933009) (xy 221.10821 57.884) (xy 221.107 57.2505) (xy 221.0445 57.188) + (xy 220.3985 57.188) (xy 219.9905 57.188) (xy 219.3445 57.188) (xy 219.282 57.2505) (xy 219.28079 57.884) + (xy 217.20799 57.884) (xy 217.246261 57.812401) (xy 217.289147 57.671026) (xy 217.3 57.560835) (xy 217.3 56.487165) + (xy 217.289147 56.376974) (xy 217.246261 56.235599) (xy 217.176619 56.105307) (xy 217.159133 56.084) (xy 219.28079 56.084) + (xy 219.282 56.7175) (xy 219.3445 56.78) (xy 219.9905 56.78) (xy 219.9905 55.8965) (xy 220.3985 55.8965) + (xy 220.3985 56.78) (xy 221.0445 56.78) (xy 221.107 56.7175) (xy 221.10821 56.084) (xy 221.103383 56.034991) + (xy 221.089088 55.987866) (xy 221.065873 55.944435) (xy 221.034632 55.906368) (xy 220.996565 55.875127) (xy 220.953134 55.851912) + (xy 220.906009 55.837617) (xy 220.857 55.83279) (xy 220.461 55.834) (xy 220.3985 55.8965) (xy 219.9905 55.8965) + (xy 219.928 55.834) (xy 219.532 55.83279) (xy 219.482991 55.837617) (xy 219.435866 55.851912) (xy 219.392435 55.875127) + (xy 219.354368 55.906368) (xy 219.323127 55.944435) (xy 219.299912 55.987866) (xy 219.285617 56.034991) (xy 219.28079 56.084) + (xy 217.159133 56.084) (xy 217.082895 55.991105) (xy 216.968692 55.897381) (xy 216.91 55.86601) (xy 216.91 53.552209) + (xy 217.385 53.552209) (xy 217.434008 53.547382) (xy 217.481134 53.533087) (xy 217.524564 53.509873) (xy 217.562632 53.478632) + (xy 217.593873 53.440564) (xy 217.617087 53.397134) (xy 217.631382 53.350008) (xy 217.636209 53.301) (xy 217.636209 51.601) + (xy 217.631382 51.551992) (xy 217.617087 51.504866) (xy 217.593873 51.461436) (xy 217.562632 51.423368) (xy 217.524564 51.392127) + (xy 217.481134 51.368913) (xy 217.434008 51.354618) (xy 217.385 51.349791) (xy 215.685 51.349791) (xy 215.635992 51.354618) + (xy 215.588866 51.368913) (xy 215.545436 51.392127) (xy 215.507368 51.423368) (xy 215.476127 51.461436) (xy 215.452913 51.504866) + (xy 215.438618 51.551992) (xy 215.433791 51.601) (xy 212.491329 51.601) (xy 213.08333 51.009) (xy 223.095671 51.009) + (xy 223.272001 51.185331) (xy 223.272001 51.476791) (xy 222.797 51.476791) (xy 222.747992 51.481618) (xy 222.700866 51.495913) + (xy 222.657436 51.519127) (xy 222.619368 51.550368) (xy 222.588127 51.588436) (xy 222.564913 51.631866) (xy 222.550618 51.678992) + (xy 222.545791 51.728) (xy 222.545791 53.428) (xy 222.550618 53.477008) (xy 222.564913 53.524134) (xy 222.588127 53.567564) + (xy 222.619368 53.605632) (xy 222.657436 53.636873) (xy 222.700866 53.660087) (xy 222.747992 53.674382) (xy 222.797 53.679209) + (xy 223.272001 53.679209) (xy 223.272001 54.283574) (xy 223.270186 54.302) (xy 223.276661 54.367737) (xy 223.277427 54.375513) + (xy 223.292127 54.423971) (xy 223.29887 54.4462) (xy 223.332951 54.50996) (xy 223.333692 54.511347) (xy 223.380553 54.568448) + (xy 223.394862 54.580191) (xy 228.21767 59.403) (xy 224.233209 59.403) (xy 224.233209 59.127997) (xy 224.223578 59.030217) + (xy 224.195057 58.936194) (xy 224.148741 58.849542) (xy 224.086409 58.773591) (xy 224.010458 58.711259) (xy 223.923806 58.664943) + (xy 223.829783 58.636422) (xy 223.732003 58.626791) (xy 223.6945 58.626791) (xy 223.6945 58.135209) (xy 223.732003 58.135209) + (xy 223.829783 58.125578) (xy 223.923806 58.097057) (xy 224.010458 58.050741) (xy 224.086409 57.988409) (xy 224.148741 57.912458) + (xy 224.195057 57.825806) (xy 224.223578 57.731783) (xy 224.233209 57.634003) (xy 224.233209 56.333997) (xy 224.223578 56.236217) + (xy 224.195057 56.142194) (xy 224.148741 56.055542) (xy 224.086409 55.979591) (xy 224.010458 55.917259) (xy 223.923806 55.870943) + (xy 223.829783 55.842422) (xy 223.732003 55.832791) (xy 222.906997 55.832791) (xy 222.809217 55.842422) (xy 222.715194 55.870943) + (xy 222.628542 55.917259) (xy 222.552591 55.979591) (xy 222.490259 56.055542) (xy 222.443943 56.142194) (xy 222.415422 56.236217) + (xy 222.405791 56.333997) (xy 222.405791 57.634003) (xy 222.415422 57.731783) (xy 222.443943 57.825806) (xy 222.490259 57.912458) + (xy 222.552591 57.988409) (xy 222.628542 58.050741) (xy 222.715194 58.097057) (xy 222.809217 58.125578) (xy 222.906997 58.135209) + (xy 222.9445 58.135209) (xy 222.944501 58.626791) (xy 222.906997 58.626791) (xy 222.809217 58.636422) (xy 222.715194 58.664943) + (xy 222.628542 58.711259) (xy 222.552591 58.773591) (xy 222.490259 58.849542) (xy 222.443943 58.936194) (xy 222.415422 59.030217) + (xy 222.405791 59.127997) (xy 222.405791 60.428003) (xy 222.415422 60.525783) (xy 222.443943 60.619806) (xy 222.490259 60.706458) + (xy 222.552591 60.782409) (xy 222.628542 60.844741) (xy 222.715194 60.891057) (xy 222.809217 60.919578) (xy 222.906997 60.929209) + (xy 223.732003 60.929209) (xy 223.829783 60.919578) (xy 223.923806 60.891057) (xy 224.010458 60.844741) (xy 224.086409 60.782409) + (xy 224.148741 60.706458) (xy 224.195057 60.619806) (xy 224.223578 60.525783) (xy 224.233209 60.428003) (xy 224.233209 60.153) + (xy 227.583837 60.153) (xy 227.530978 60.23211) (xy 227.481979 60.350402) (xy 227.457 60.475981) (xy 227.457 60.604019) + (xy 227.481979 60.729598) (xy 227.530978 60.84789) (xy 227.602112 60.954351) (xy 227.692649 61.044888) (xy 227.735325 61.073403) + (xy 227.743375 62.362449) (xy 227.73298 62.37098) (xy 227.724 62.381922) (xy 227.71502 62.37098) (xy 227.693884 62.353634) + (xy 227.693574 62.350487) (xy 227.672131 62.2798) (xy 227.637309 62.214653) (xy 227.590448 62.157552) (xy 227.576139 62.145809) + (xy 227.115195 61.684866) (xy 227.103448 61.670552) (xy 227.046347 61.623691) (xy 226.9812 61.588869) (xy 226.910513 61.567426) + (xy 226.855419 61.562) (xy 226.855416 61.562) (xy 226.837 61.560186) (xy 226.818584 61.562) (xy 209.605239 61.562) + (xy 209.582351 61.539112) (xy 209.47589 61.467978) (xy 209.357598 61.418979) (xy 209.232019 61.394) (xy 209.103981 61.394) + (xy 208.978402 61.418979) (xy 208.86011 61.467978) (xy 208.753649 61.539112) (xy 208.663112 61.629649) (xy 208.591978 61.73611) + (xy 208.542979 61.854402) (xy 208.518 61.979981) (xy 208.518 62.108019) (xy 208.542979 62.233598) (xy 208.591978 62.35189) + (xy 208.663112 62.458351) (xy 208.753649 62.548888) (xy 208.86011 62.620022) (xy 208.978402 62.669021) (xy 209.103981 62.694) + (xy 209.232019 62.694) (xy 209.357598 62.669021) (xy 209.47589 62.620022) (xy 209.582351 62.548888) (xy 209.672888 62.458351) + (xy 209.744022 62.35189) (xy 209.760545 62.312) (xy 226.681671 62.312) (xy 226.855355 62.485684) (xy 226.851428 62.493031) + (xy 226.83002 62.563605) (xy 226.822791 62.637) (xy 226.822791 63.887) (xy 226.83002 63.960395) (xy 226.851428 64.030969) + (xy 226.886194 64.096011) (xy 226.93298 64.15302) (xy 226.989989 64.199806) (xy 227.055031 64.234572) (xy 227.125605 64.25598) + (xy 227.199 64.263209) (xy 227.449 64.263209) (xy 227.522395 64.25598) (xy 227.592969 64.234572) (xy 227.658011 64.199806) + (xy 227.71502 64.15302) (xy 227.724 64.142078) (xy 227.73298 64.15302) (xy 227.789989 64.199806) (xy 227.855031 64.234572) + (xy 227.925605 64.25598) (xy 227.999 64.263209) (xy 228.249 64.263209) (xy 228.322395 64.25598) (xy 228.392969 64.234572) + (xy 228.458011 64.199806) (xy 228.51502 64.15302) (xy 228.524 64.142078) (xy 228.53298 64.15302) (xy 228.589989 64.199806) + (xy 228.655031 64.234572) (xy 228.725605 64.25598) (xy 228.799 64.263209) (xy 229.049 64.263209) (xy 229.122395 64.25598) + (xy 229.192969 64.234572) (xy 229.258011 64.199806) (xy 229.28587 64.176943) (xy 229.295103 64.188359) (xy 229.332947 64.219871) + (xy 229.376211 64.243395) (xy 229.423233 64.258027) (xy 229.4615 64.262) (xy 229.524 64.1995) (xy 229.524 63.466) + (xy 229.5 63.466) (xy 229.5 63.058) (xy 229.524 63.058) (xy 229.524 62.3245) (xy 229.4615 62.262) + (xy 229.423233 62.265973) (xy 229.376211 62.280605) (xy 229.332947 62.304129) (xy 229.295103 62.335641) (xy 229.28587 62.347057) + (xy 229.258011 62.324194) (xy 229.192969 62.289428) (xy 229.122395 62.26802) (xy 229.049 62.260791) (xy 228.799 62.260791) + (xy 228.725605 62.26802) (xy 228.655031 62.289428) (xy 228.589989 62.324194) (xy 228.53298 62.37098) (xy 228.524 62.381922) + (xy 228.51502 62.37098) (xy 228.493331 62.35318) (xy 228.48531 61.068969) (xy 228.521351 61.044888) (xy 228.611888 60.954351) + (xy 228.683022 60.84789) (xy 228.732021 60.729598) (xy 228.757 60.604019) (xy 228.757 60.475981) (xy 228.732021 60.350402) + (xy 228.683022 60.23211) (xy 228.630163 60.153) (xy 229.104583 60.153) (xy 229.122999 60.154814) (xy 229.141415 60.153) + (xy 229.988819 60.153) (xy 230.015112 60.192351) (xy 230.105649 60.282888) (xy 230.145 60.309181) (xy 230.145001 62.329066) + (xy 230.115053 62.304129) (xy 230.071789 62.280605) (xy 230.024767 62.265973) (xy 229.9865 62.262) (xy 229.924 62.3245) + (xy 229.924 63.058) (xy 229.948 63.058) (xy 229.948 63.466) (xy 229.924 63.466) (xy 229.924 64.1995) + (xy 229.9865 64.262) (xy 230.024767 64.258027) (xy 230.071789 64.243395) (xy 230.115053 64.219871) (xy 230.152897 64.188359) + (xy 230.16213 64.176943) (xy 230.189989 64.199806) (xy 230.255031 64.234572) (xy 230.325605 64.25598) (xy 230.399 64.263209) + (xy 230.649 64.263209) (xy 230.722395 64.25598) (xy 230.792969 64.234572) (xy 230.858011 64.199806) (xy 230.91502 64.15302) + (xy 230.924 64.142078) (xy 230.93298 64.15302) (xy 230.989989 64.199806) (xy 231.055031 64.234572) (xy 231.125605 64.25598) + (xy 231.199 64.263209) (xy 231.449 64.263209) (xy 231.522395 64.25598) (xy 231.592969 64.234572) (xy 231.658011 64.199806) + (xy 231.71502 64.15302) (xy 231.724 64.142078) (xy 231.73298 64.15302) (xy 231.789989 64.199806) (xy 231.855031 64.234572) + (xy 231.925605 64.25598) (xy 231.999 64.263209) (xy 232.249 64.263209) (xy 232.322395 64.25598) (xy 232.392969 64.234572) + (xy 232.458011 64.199806) (xy 232.51502 64.15302) (xy 232.524 64.142078) (xy 232.53298 64.15302) (xy 232.589989 64.199806) + (xy 232.655031 64.234572) (xy 232.725605 64.25598) (xy 232.799 64.263209) (xy 233.049 64.263209) (xy 233.122395 64.25598) + (xy 233.192969 64.234572) (xy 233.258011 64.199806) (xy 233.31502 64.15302) (xy 233.361806 64.096011) (xy 233.396572 64.030969) + (xy 233.41798 63.960395) (xy 233.425209 63.887) (xy 233.425209 62.637) (xy 233.41798 62.563605) (xy 233.396572 62.493031) + (xy 233.361806 62.427989) (xy 233.31502 62.37098) (xy 233.258011 62.324194) (xy 233.192969 62.289428) (xy 233.122395 62.26802) + (xy 233.049 62.260791) (xy 232.799 62.260791) (xy 232.725605 62.26802) (xy 232.655031 62.289428) (xy 232.589989 62.324194) + (xy 232.53298 62.37098) (xy 232.524 62.381922) (xy 232.51502 62.37098) (xy 232.458011 62.324194) (xy 232.392969 62.289428) + (xy 232.322395 62.26802) (xy 232.249 62.260791) (xy 231.999 62.260791) (xy 231.925605 62.26802) (xy 231.855031 62.289428) + (xy 231.789989 62.324194) (xy 231.73298 62.37098) (xy 231.724 62.381922) (xy 231.71502 62.37098) (xy 231.658011 62.324194) + (xy 231.592969 62.289428) (xy 231.522395 62.26802) (xy 231.449 62.260791) (xy 231.199 62.260791) (xy 231.125605 62.26802) + (xy 231.055031 62.289428) (xy 230.989989 62.324194) (xy 230.93298 62.37098) (xy 230.924 62.381922) (xy 230.91502 62.37098) + (xy 230.895 62.35455) (xy 230.895 60.309181) (xy 230.934351 60.282888) (xy 231.024888 60.192351) (xy 231.096022 60.08589) + (xy 231.145021 59.967598) (xy 231.17 59.842019) (xy 231.17 59.713981) (xy 231.145021 59.588402) (xy 231.096022 59.47011) + (xy 231.024888 59.363649) (xy 230.934351 59.273112) (xy 230.82789 59.201978) (xy 230.709598 59.152979) (xy 230.584019 59.128) + (xy 230.455981 59.128) (xy 230.330402 59.152979) (xy 230.21211 59.201978) (xy 230.105649 59.273112) (xy 230.015112 59.363649) + (xy 229.988819 59.403) (xy 229.278329 59.403) (xy 229.274193 59.398864) (xy 229.274188 59.398858) (xy 224.022 54.146671) + (xy 224.022 53.679209) (xy 224.497 53.679209) (xy 224.546008 53.674382) (xy 224.593134 53.660087) (xy 224.636564 53.636873) + (xy 224.674632 53.605632) (xy 224.705873 53.567564) (xy 224.729087 53.524134) (xy 224.743382 53.477008) (xy 224.748209 53.428) + (xy 224.748209 52.948583) (xy 225.151292 52.948583) (xy 225.24349 53.143519) (xy 225.371947 53.316722) (xy 225.531726 53.461537) + (xy 225.716686 53.572398) (xy 225.816419 53.613697) (xy 225.983 53.595246) (xy 225.983 52.782) (xy 226.391 52.782) + (xy 226.391 53.595246) (xy 226.557581 53.613697) (xy 226.657314 53.572398) (xy 226.842274 53.461537) (xy 227.002053 53.316722) + (xy 227.13051 53.143519) (xy 227.222708 52.948583) (xy 227.205429 52.782) (xy 226.391 52.782) (xy 225.983 52.782) + (xy 225.168571 52.782) (xy 225.151292 52.948583) (xy 224.748209 52.948583) (xy 224.748209 52.469659) (xy 227.627 52.469659) + (xy 227.627 52.686341) (xy 227.669273 52.898858) (xy 227.752193 53.099045) (xy 227.872575 53.279209) (xy 228.025791 53.432425) + (xy 228.205955 53.552807) (xy 228.406142 53.635727) (xy 228.618659 53.678) (xy 228.835341 53.678) (xy 229.047858 53.635727) + (xy 229.248045 53.552807) (xy 229.428209 53.432425) (xy 229.581425 53.279209) (xy 229.701807 53.099045) (xy 229.784727 52.898858) + (xy 229.827 52.686341) (xy 229.827 52.469659) (xy 229.784727 52.257142) (xy 229.701807 52.056955) (xy 229.581425 51.876791) + (xy 229.428209 51.723575) (xy 229.331566 51.659) (xy 230.662434 51.659) (xy 230.565791 51.723575) (xy 230.412575 51.876791) + (xy 230.292193 52.056955) (xy 230.209273 52.257142) (xy 230.167 52.469659) (xy 230.167 52.686341) (xy 230.209273 52.898858) + (xy 230.292193 53.099045) (xy 230.412575 53.279209) (xy 230.565791 53.432425) (xy 230.745955 53.552807) (xy 230.817001 53.582235) + (xy 230.817001 54.025896) (xy 230.814824 54.048) (xy 230.823512 54.136215) (xy 230.849243 54.22104) (xy 230.891029 54.299216) + (xy 230.933172 54.350567) (xy 230.933177 54.350572) (xy 230.947264 54.367737) (xy 230.964429 54.381824) (xy 236.42 59.837396) + (xy 236.420001 63.073105) (xy 236.0595 62.712605) (xy 236.0595 62.634981) (xy 236.034521 62.509402) (xy 235.985522 62.39111) + (xy 235.914388 62.284649) (xy 235.823851 62.194112) (xy 235.71739 62.122978) (xy 235.599098 62.073979) (xy 235.473519 62.049) + (xy 235.345481 62.049) (xy 235.219902 62.073979) (xy 235.10161 62.122978) (xy 234.995149 62.194112) (xy 234.904612 62.284649) + (xy 234.833478 62.39111) (xy 234.784479 62.509402) (xy 234.7595 62.634981) (xy 234.7595 62.763019) (xy 234.784479 62.888598) + (xy 234.833478 63.00689) (xy 234.904612 63.113351) (xy 234.995149 63.203888) (xy 235.10161 63.275022) (xy 235.219902 63.324021) + (xy 235.345481 63.349) (xy 235.423105 63.349) (xy 235.785001 63.710897) (xy 235.785 63.973104) (xy 235.571105 64.187) + (xy 235.110198 64.187) (xy 235.067969 64.164428) (xy 234.997395 64.14302) (xy 234.924 64.135791) (xy 233.674 64.135791) + (xy 233.600605 64.14302) (xy 233.530031 64.164428) (xy 233.464989 64.199194) (xy 233.40798 64.24598) (xy 233.361194 64.302989) + (xy 233.326428 64.368031) (xy 233.30502 64.438605) (xy 233.297791 64.512) (xy 233.297791 64.762) (xy 233.30502 64.835395) + (xy 233.326428 64.905969) (xy 233.361194 64.971011) (xy 233.40798 65.02802) (xy 233.418922 65.037) (xy 233.40798 65.04598) + (xy 233.361194 65.102989) (xy 233.326428 65.168031) (xy 233.30502 65.238605) (xy 233.297791 65.312) (xy 233.297791 65.562) + (xy 233.30502 65.635395) (xy 233.326428 65.705969) (xy 233.361194 65.771011) (xy 233.40798 65.82802) (xy 233.418922 65.837) + (xy 233.40798 65.84598) (xy 233.361194 65.902989) (xy 233.326428 65.968031) (xy 233.30502 66.038605) (xy 233.297791 66.112) + (xy 233.297791 66.362) (xy 233.30502 66.435395) (xy 233.326428 66.505969) (xy 233.361194 66.571011) (xy 233.40798 66.62802) + (xy 233.418922 66.637) (xy 233.40798 66.64598) (xy 233.361194 66.702989) (xy 233.326428 66.768031) (xy 233.30502 66.838605) + (xy 233.297791 66.912) (xy 233.297791 67.162) (xy 233.30502 67.235395) (xy 233.326428 67.305969) (xy 233.361194 67.371011) + (xy 233.40798 67.42802) (xy 233.418922 67.437) (xy 233.40798 67.44598) (xy 233.361194 67.502989) (xy 233.326428 67.568031) + (xy 233.30502 67.638605) (xy 233.297791 67.712) (xy 233.297791 67.962) (xy 233.30502 68.035395) (xy 233.326428 68.105969) + (xy 233.361194 68.171011) (xy 233.40798 68.22802) (xy 233.418922 68.237) (xy 233.40798 68.24598) (xy 233.361194 68.302989) + (xy 233.326428 68.368031) (xy 233.30502 68.438605) (xy 233.297791 68.512) (xy 233.297791 68.762) (xy 233.30502 68.835395) + (xy 233.326428 68.905969) (xy 233.361194 68.971011) (xy 233.40798 69.02802) (xy 233.418922 69.037) (xy 233.40798 69.04598) + (xy 233.361194 69.102989) (xy 233.326428 69.168031) (xy 233.30502 69.238605) (xy 233.297791 69.312) (xy 233.297791 69.562) + (xy 233.30502 69.635395) (xy 233.326428 69.705969) (xy 233.361194 69.771011) (xy 233.40798 69.82802) (xy 233.418922 69.837) + (xy 233.40798 69.84598) (xy 233.361194 69.902989) (xy 233.326428 69.968031) (xy 233.30502 70.038605) (xy 233.297791 70.112) + (xy 233.297791 70.362) (xy 233.30502 70.435395) (xy 233.326428 70.505969) (xy 233.361194 70.571011) (xy 233.40798 70.62802) + (xy 233.464989 70.674806) (xy 233.530031 70.709572) (xy 233.600605 70.73098) (xy 233.674 70.738209) (xy 234.924 70.738209) + (xy 234.997395 70.73098) (xy 235.067969 70.709572) (xy 235.133011 70.674806) (xy 235.148615 70.662) (xy 237.13496 70.662) + (xy 237.218 70.74504) (xy 237.218 70.858019) (xy 237.242979 70.983598) (xy 237.291978 71.10189) (xy 237.363112 71.208351) + (xy 237.453649 71.298888) (xy 237.56011 71.370022) (xy 237.678402 71.419021) (xy 237.803981 71.444) (xy 237.932019 71.444) + (xy 238.057598 71.419021) (xy 238.17589 71.370022) (xy 238.282351 71.298888) (xy 238.372888 71.208351) (xy 238.444022 71.10189) + (xy 238.493021 70.983598) (xy 238.518 70.858019) (xy 238.518 70.729981) (xy 238.493021 70.604402) (xy 238.444022 70.48611) + (xy 238.372888 70.379649) (xy 238.282351 70.289112) (xy 238.17589 70.217978) (xy 238.057598 70.168979) (xy 237.932019 70.144) + (xy 237.81904 70.144) (xy 237.626283 69.951243) (xy 237.612974 69.935026) (xy 237.54826 69.881916) (xy 237.474427 69.842452) + (xy 237.394314 69.81815) (xy 237.331874 69.812) (xy 237.331867 69.812) (xy 237.311 69.809945) (xy 237.290133 69.812) + (xy 236.226399 69.812) (xy 236.293737 69.756737) (xy 236.307829 69.739566) (xy 238.569572 67.477824) (xy 238.586737 67.463737) + (xy 238.600824 67.446572) (xy 238.600828 67.446568) (xy 238.642971 67.395217) (xy 238.684757 67.317041) (xy 238.690321 67.298699) + (xy 238.710489 67.232215) (xy 238.717 67.166105) (xy 238.717 67.166094) (xy 238.719176 67.144) (xy 238.717 67.121906) + (xy 238.717 65.115339) (xy 238.763112 65.184351) (xy 238.853649 65.274888) (xy 238.96011 65.346022) (xy 239.078402 65.395021) + (xy 239.203981 65.42) (xy 239.332019 65.42) (xy 239.457598 65.395021) (xy 239.57589 65.346022) (xy 239.682351 65.274888) + (xy 239.772888 65.184351) (xy 239.844022 65.07789) (xy 239.893021 64.959598) (xy 239.918 64.834019) (xy 239.918 64.705981) + (xy 239.893021 64.580402) (xy 239.844022 64.46211) (xy 239.772888 64.355649) (xy 239.682351 64.265112) (xy 239.643 64.238819) + (xy 239.643 63.726) (xy 240.48979 63.726) (xy 240.494617 63.775009) (xy 240.508912 63.822134) (xy 240.532127 63.865565) + (xy 240.563368 63.903632) (xy 240.601435 63.934873) (xy 240.644866 63.958088) (xy 240.691991 63.972383) (xy 240.741 63.97721) + (xy 241.137 63.976) (xy 241.1995 63.9135) (xy 241.1995 63.03) (xy 241.6075 63.03) (xy 241.6075 63.9135) + (xy 241.67 63.976) (xy 242.066 63.97721) (xy 242.115009 63.972383) (xy 242.162134 63.958088) (xy 242.205565 63.934873) + (xy 242.243632 63.903632) (xy 242.274873 63.865565) (xy 242.298088 63.822134) (xy 242.312383 63.775009) (xy 242.31721 63.726) + (xy 242.316 63.0925) (xy 242.2535 63.03) (xy 241.6075 63.03) (xy 241.1995 63.03) (xy 240.5535 63.03) + (xy 240.491 63.0925) (xy 240.48979 63.726) (xy 239.643 63.726) (xy 239.643 61.926) (xy 240.48979 61.926) + (xy 240.491 62.5595) (xy 240.5535 62.622) (xy 241.1995 62.622) (xy 241.1995 61.7385) (xy 241.6075 61.7385) + (xy 241.6075 62.622) (xy 242.2535 62.622) (xy 242.316 62.5595) (xy 242.31721 61.926) (xy 242.312383 61.876991) + (xy 242.298088 61.829866) (xy 242.274873 61.786435) (xy 242.243632 61.748368) (xy 242.205565 61.717127) (xy 242.162134 61.693912) + (xy 242.115009 61.679617) (xy 242.066 61.67479) (xy 241.67 61.676) (xy 241.6075 61.7385) (xy 241.1995 61.7385) + (xy 241.137 61.676) (xy 240.741 61.67479) (xy 240.691991 61.679617) (xy 240.644866 61.693912) (xy 240.601435 61.717127) + (xy 240.563368 61.748368) (xy 240.532127 61.786435) (xy 240.508912 61.829866) (xy 240.494617 61.876991) (xy 240.48979 61.926) + (xy 239.643 61.926) (xy 239.643 60.63) (xy 240.48979 60.63) (xy 240.494617 60.679009) (xy 240.508912 60.726134) + (xy 240.532127 60.769565) (xy 240.563368 60.807632) (xy 240.601435 60.838873) (xy 240.644866 60.862088) (xy 240.691991 60.876383) + (xy 240.741 60.88121) (xy 241.137 60.88) (xy 241.1995 60.8175) (xy 241.1995 59.934) (xy 241.6075 59.934) + (xy 241.6075 60.8175) (xy 241.67 60.88) (xy 242.066 60.88121) (xy 242.115009 60.876383) (xy 242.162134 60.862088) + (xy 242.205565 60.838873) (xy 242.243632 60.807632) (xy 242.274873 60.769565) (xy 242.298088 60.726134) (xy 242.312383 60.679009) + (xy 242.31721 60.63) (xy 242.316 59.9965) (xy 242.2535 59.934) (xy 241.6075 59.934) (xy 241.1995 59.934) + (xy 240.5535 59.934) (xy 240.491 59.9965) (xy 240.48979 60.63) (xy 239.643 60.63) (xy 239.643 58.83) + (xy 240.48979 58.83) (xy 240.491 59.4635) (xy 240.5535 59.526) (xy 241.1995 59.526) (xy 241.1995 58.6425) + (xy 241.6075 58.6425) (xy 241.6075 59.526) (xy 242.2535 59.526) (xy 242.316 59.4635) (xy 242.316732 59.079997) + (xy 243.614791 59.079997) (xy 243.614791 60.380003) (xy 243.624422 60.477783) (xy 243.652943 60.571806) (xy 243.699259 60.658458) + (xy 243.761591 60.734409) (xy 243.837542 60.796741) (xy 243.924194 60.843057) (xy 244.018217 60.871578) (xy 244.115997 60.881209) + (xy 244.1535 60.881209) (xy 244.153501 61.674791) (xy 244.115997 61.674791) (xy 244.018217 61.684422) (xy 243.924194 61.712943) + (xy 243.837542 61.759259) (xy 243.761591 61.821591) (xy 243.699259 61.897542) (xy 243.652943 61.984194) (xy 243.624422 62.078217) + (xy 243.614791 62.175997) (xy 243.614791 63.476003) (xy 243.624422 63.573783) (xy 243.652943 63.667806) (xy 243.699259 63.754458) + (xy 243.761591 63.830409) (xy 243.837542 63.892741) (xy 243.924194 63.939057) (xy 244.018217 63.967578) (xy 244.115997 63.977209) + (xy 244.1535 63.977209) (xy 244.153501 66.602318) (xy 244.114149 66.628612) (xy 244.023612 66.719149) (xy 243.952478 66.82561) + (xy 243.903479 66.943902) (xy 243.8785 67.069481) (xy 243.8785 67.197519) (xy 243.903479 67.323098) (xy 243.952478 67.44139) + (xy 244.023612 67.547851) (xy 244.114149 67.638388) (xy 244.22061 67.709522) (xy 244.338902 67.758521) (xy 244.464481 67.7835) + (xy 244.592519 67.7835) (xy 244.621422 67.777751) (xy 248.988 72.14433) (xy 248.988001 73.185791) (xy 248.737999 73.185791) + (xy 248.640218 73.195422) (xy 248.546195 73.223943) (xy 248.459543 73.27026) (xy 248.383591 73.332591) (xy 248.32126 73.408543) + (xy 248.274943 73.495195) (xy 248.246422 73.589218) (xy 248.236791 73.686999) (xy 248.236791 74.487001) (xy 248.246422 74.584782) + (xy 248.274943 74.678805) (xy 248.32126 74.765457) (xy 248.383591 74.841409) (xy 248.459543 74.90374) (xy 248.546195 74.950057) + (xy 248.640218 74.978578) (xy 248.737999 74.988209) (xy 249.988001 74.988209) (xy 250.085782 74.978578) (xy 250.179805 74.950057) + (xy 250.266457 74.90374) (xy 250.342409 74.841409) (xy 250.40474 74.765457) (xy 250.451057 74.678805) (xy 250.479578 74.584782) + (xy 250.489209 74.487001) (xy 250.489209 74.462) (xy 250.776791 74.462) (xy 250.776791 74.487001) (xy 250.786422 74.584782) + (xy 250.814943 74.678805) (xy 250.86126 74.765457) (xy 250.923591 74.841409) (xy 250.999543 74.90374) (xy 251.086195 74.950057) + (xy 251.180218 74.978578) (xy 251.277999 74.988209) (xy 252.528001 74.988209) (xy 252.625782 74.978578) (xy 252.719805 74.950057) + (xy 252.806457 74.90374) (xy 252.882409 74.841409) (xy 252.94474 74.765457) (xy 252.991057 74.678805) (xy 253.019578 74.584782) + (xy 253.029209 74.487001) (xy 253.029209 73.686999) (xy 253.019578 73.589218) (xy 252.991057 73.495195) (xy 252.94474 73.408543) + (xy 252.882409 73.332591) (xy 252.806457 73.27026) (xy 252.719805 73.223943) (xy 252.625782 73.195422) (xy 252.528001 73.185791) + (xy 251.277999 73.185791) (xy 251.180218 73.195422) (xy 251.086195 73.223943) (xy 250.999543 73.27026) (xy 250.923591 73.332591) + (xy 250.86126 73.408543) (xy 250.814943 73.495195) (xy 250.786422 73.589218) (xy 250.776791 73.686999) (xy 250.776791 73.712) + (xy 250.489209 73.712) (xy 250.489209 73.686999) (xy 250.479578 73.589218) (xy 250.451057 73.495195) (xy 250.40474 73.408543) + (xy 250.342409 73.332591) (xy 250.266457 73.27026) (xy 250.179805 73.223943) (xy 250.085782 73.195422) (xy 249.988001 73.185791) + (xy 249.738 73.185791) (xy 249.738 72.007415) (xy 249.739814 71.988999) (xy 249.736325 71.953573) (xy 249.732574 71.915487) + (xy 249.711131 71.8448) (xy 249.683629 71.793347) (xy 249.676309 71.779652) (xy 249.641188 71.736858) (xy 249.629448 71.722552) + (xy 249.61514 71.71081) (xy 245.165783 67.261454) (xy 245.1785 67.197519) (xy 245.1785 67.069481) (xy 245.153521 66.943902) + (xy 245.104522 66.82561) (xy 245.033388 66.719149) (xy 244.942851 66.628612) (xy 244.9035 66.602319) (xy 244.9035 63.977209) + (xy 244.941003 63.977209) (xy 245.038783 63.967578) (xy 245.132806 63.939057) (xy 245.219458 63.892741) (xy 245.295409 63.830409) + (xy 245.357741 63.754458) (xy 245.404057 63.667806) (xy 245.432578 63.573783) (xy 245.442209 63.476003) (xy 245.442209 62.175997) + (xy 245.432578 62.078217) (xy 245.404057 61.984194) (xy 245.357741 61.897542) (xy 245.295409 61.821591) (xy 245.219458 61.759259) + (xy 245.132806 61.712943) (xy 245.038783 61.684422) (xy 244.941003 61.674791) (xy 244.9035 61.674791) (xy 244.9035 60.881209) + (xy 244.941003 60.881209) (xy 245.038783 60.871578) (xy 245.132806 60.843057) (xy 245.219458 60.796741) (xy 245.295409 60.734409) + (xy 245.357741 60.658458) (xy 245.404057 60.571806) (xy 245.432578 60.477783) (xy 245.442209 60.380003) (xy 245.442209 60.192) + (xy 247.791791 60.192) (xy 247.791791 60.342) (xy 247.796618 60.391008) (xy 247.810913 60.438134) (xy 247.834127 60.481564) + (xy 247.865368 60.519632) (xy 247.903436 60.550873) (xy 247.946866 60.574087) (xy 247.978494 60.583681) (xy 247.951124 60.612856) + (xy 247.870476 60.742313) (xy 247.861449 60.76855) (xy 247.885329 60.883) (xy 248.589 60.883) (xy 248.589 60.863) + (xy 248.997 60.863) (xy 248.997 60.883) (xy 249.700671 60.883) (xy 249.724551 60.76855) (xy 249.715524 60.742313) + (xy 249.634876 60.612856) (xy 249.607506 60.583681) (xy 249.639134 60.574087) (xy 249.682564 60.550873) (xy 249.720632 60.519632) + (xy 249.751873 60.481564) (xy 249.775087 60.438134) (xy 249.789382 60.391008) (xy 249.794209 60.342) (xy 249.794209 59.292) + (xy 249.789382 59.242992) (xy 249.775087 59.195866) (xy 249.751873 59.152436) (xy 249.720632 59.114368) (xy 249.682564 59.083127) + (xy 249.639134 59.059913) (xy 249.592008 59.045618) (xy 249.543 59.040791) (xy 248.043 59.040791) (xy 247.993992 59.045618) + (xy 247.946866 59.059913) (xy 247.903436 59.083127) (xy 247.865368 59.114368) (xy 247.834127 59.152436) (xy 247.810913 59.195866) + (xy 247.796618 59.242992) (xy 247.791791 59.292) (xy 247.791791 59.442) (xy 245.442209 59.442) (xy 245.442209 59.079997) + (xy 245.432578 58.982217) (xy 245.404057 58.888194) (xy 245.357741 58.801542) (xy 245.295409 58.725591) (xy 245.219458 58.663259) + (xy 245.132806 58.616943) (xy 245.038783 58.588422) (xy 244.941003 58.578791) (xy 244.115997 58.578791) (xy 244.018217 58.588422) + (xy 243.924194 58.616943) (xy 243.837542 58.663259) (xy 243.761591 58.725591) (xy 243.699259 58.801542) (xy 243.652943 58.888194) + (xy 243.624422 58.982217) (xy 243.614791 59.079997) (xy 242.316732 59.079997) (xy 242.31721 58.83) (xy 242.312383 58.780991) + (xy 242.298088 58.733866) (xy 242.274873 58.690435) (xy 242.243632 58.652368) (xy 242.205565 58.621127) (xy 242.162134 58.597912) + (xy 242.115009 58.583617) (xy 242.066 58.57879) (xy 241.67 58.58) (xy 241.6075 58.6425) (xy 241.1995 58.6425) + (xy 241.137 58.58) (xy 240.741 58.57879) (xy 240.691991 58.583617) (xy 240.644866 58.597912) (xy 240.601435 58.621127) + (xy 240.563368 58.652368) (xy 240.532127 58.690435) (xy 240.508912 58.733866) (xy 240.494617 58.780991) (xy 240.48979 58.83) + (xy 239.643 58.83) (xy 239.643 54.24521) (xy 239.718 54.24521) (xy 239.767009 54.240383) (xy 239.814134 54.226088) + (xy 239.857565 54.202873) (xy 239.895632 54.171632) (xy 239.926873 54.133565) (xy 239.950088 54.090134) (xy 239.964383 54.043009) + (xy 239.96921 53.994) (xy 239.96921 52.494) (xy 239.964383 52.444991) (xy 239.950088 52.397866) (xy 239.926873 52.354435) + (xy 239.895632 52.316368) (xy 239.857565 52.285127) (xy 239.814134 52.261912) (xy 239.767009 52.247617) (xy 239.718 52.24279) + (xy 239.218 52.24279) (xy 239.193551 52.245198) (xy 239.168991 52.245198) (xy 239.119982 52.250025) (xy 239.023849 52.269147) + (xy 238.976725 52.283442) (xy 238.886169 52.320951) (xy 238.842737 52.344166) (xy 238.761238 52.398622) (xy 238.723171 52.429863) + (xy 238.653863 52.499171) (xy 238.622622 52.537238) (xy 238.568166 52.618737) (xy 238.544951 52.662169) (xy 238.507442 52.752725) + (xy 238.493147 52.799849) (xy 238.474025 52.895982) (xy 238.469198 52.944991) (xy 238.469198 52.969551) (xy 238.46679 52.994) + (xy 238.46679 53.494) (xy 238.469198 53.518449) (xy 238.469198 53.543009) (xy 238.474025 53.592018) (xy 238.493147 53.688151) + (xy 238.507442 53.735275) (xy 238.544951 53.825831) (xy 238.568166 53.869263) (xy 238.622622 53.950762) (xy 238.653863 53.988829) + (xy 238.723171 54.058137) (xy 238.761238 54.089378) (xy 238.842737 54.143834) (xy 238.886169 54.167049) (xy 238.893001 54.169879) + (xy 238.893 64.238819) (xy 238.853649 64.265112) (xy 238.763112 64.355649) (xy 238.717 64.424661) (xy 238.717 59.165091) + (xy 238.719176 59.142999) (xy 238.717 59.120907) (xy 238.717 59.120895) (xy 238.710489 59.054785) (xy 238.684757 58.969959) + (xy 238.642972 58.891785) (xy 238.642971 58.891783) (xy 238.600828 58.840432) (xy 238.600824 58.840428) (xy 238.586737 58.823263) + (xy 238.569573 58.809177) (xy 234.257 54.496605) (xy 234.257 53.582235) (xy 234.328045 53.552807) (xy 234.508209 53.432425) + (xy 234.661425 53.279209) (xy 234.781807 53.099045) (xy 234.864727 52.898858) (xy 234.907 52.686341) (xy 234.907 52.469659) + (xy 234.864727 52.257142) (xy 234.781807 52.056955) (xy 234.661425 51.876791) (xy 234.508209 51.723575) (xy 234.328045 51.603193) + (xy 234.127858 51.520273) (xy 233.915341 51.478) (xy 233.698659 51.478) (xy 233.486142 51.520273) (xy 233.285955 51.603193) + (xy 233.105791 51.723575) (xy 232.952575 51.876791) (xy 232.950353 51.880116) (xy 232.946548 51.867573) (xy 232.907084 51.79374) + (xy 232.853974 51.729026) (xy 232.789259 51.675916) (xy 232.715426 51.636452) (xy 232.675745 51.624415) (xy 232.083195 51.031866) + (xy 232.071448 51.017552) (xy 232.014347 50.970691) (xy 231.9492 50.935869) (xy 231.878513 50.914426) (xy 231.823419 50.909) + (xy 231.823416 50.909) (xy 231.805 50.907186) (xy 231.786584 50.909) (xy 228.745419 50.909) (xy 228.727 50.907186) + (xy 228.708581 50.909) (xy 228.653487 50.914426) (xy 228.5828 50.935869) (xy 228.517653 50.970691) (xy 228.460552 51.017552) + (xy 228.413691 51.074653) (xy 228.378869 51.1398) (xy 228.357426 51.210487) (xy 228.350186 51.284) (xy 228.352001 51.302429) + (xy 228.352001 51.542699) (xy 228.205955 51.603193) (xy 228.025791 51.723575) (xy 227.872575 51.876791) (xy 227.752193 52.056955) + (xy 227.669273 52.257142) (xy 227.627 52.469659) (xy 224.748209 52.469659) (xy 224.748209 52.207417) (xy 225.151292 52.207417) + (xy 225.168571 52.374) (xy 225.983 52.374) (xy 225.983 51.560754) (xy 226.391 51.560754) (xy 226.391 52.374) + (xy 227.205429 52.374) (xy 227.222708 52.207417) (xy 227.13051 52.012481) (xy 227.002053 51.839278) (xy 226.842274 51.694463) + (xy 226.657314 51.583602) (xy 226.557581 51.542303) (xy 226.391 51.560754) (xy 225.983 51.560754) (xy 225.816419 51.542303) + (xy 225.716686 51.583602) (xy 225.531726 51.694463) (xy 225.371947 51.839278) (xy 225.24349 52.012481) (xy 225.151292 52.207417) + (xy 224.748209 52.207417) (xy 224.748209 51.728) (xy 224.743382 51.678992) (xy 224.729087 51.631866) (xy 224.705873 51.588436) + (xy 224.674632 51.550368) (xy 224.636564 51.519127) (xy 224.593134 51.495913) (xy 224.546008 51.481618) (xy 224.497 51.476791) + (xy 224.022 51.476791) (xy 224.022 51.048416) (xy 224.023814 51.03) (xy 224.022 51.011581) (xy 224.016574 50.956487) + (xy 223.995131 50.8858) (xy 223.98407 50.865107) (xy 223.96031 50.820653) (xy 223.925189 50.777859) (xy 223.913448 50.763552) + (xy 223.899139 50.751809) (xy 223.529195 50.381866) (xy 223.517448 50.367552) (xy 223.460347 50.320691) (xy 223.3952 50.285869) + (xy 223.324513 50.264426) (xy 223.269419 50.259) (xy 223.269416 50.259) (xy 223.251 50.257186) (xy 223.232584 50.259) + (xy 212.946416 50.259) (xy 212.928 50.257186) (xy 212.909584 50.259) (xy 212.909581 50.259) (xy 212.854487 50.264426) + (xy 212.7838 50.285869) (xy 212.718653 50.320691) (xy 212.661552 50.367552) (xy 212.649809 50.381861) (xy 208.677142 54.354529) + (xy 208.589019 54.337) (xy 208.460981 54.337) (xy 208.414563 54.346233) (xy 207.625195 53.556866) (xy 207.613448 53.542552) + (xy 207.556347 53.495691) (xy 207.4912 53.460869) (xy 207.420513 53.439426) (xy 207.365419 53.434) (xy 207.365416 53.434) + (xy 207.347 53.432186) (xy 207.328584 53.434) (xy 207.176209 53.434) (xy 207.176209 53.158997) (xy 207.166578 53.061217) + (xy 207.138057 52.967194) (xy 207.091741 52.880542) (xy 207.029409 52.804591) (xy 206.953458 52.742259) (xy 206.866806 52.695943) + (xy 206.772783 52.667422) (xy 206.675003 52.657791) (xy 206.6375 52.657791) (xy 206.6375 52.420209) (xy 206.675003 52.420209) + (xy 206.772783 52.410578) (xy 206.866806 52.382057) (xy 206.953458 52.335741) (xy 207.029409 52.273409) (xy 207.091741 52.197458) + (xy 207.138057 52.110806) (xy 207.166578 52.016783) (xy 207.176209 51.919003) (xy 207.176209 50.618997) (xy 207.166578 50.521217) + (xy 207.138057 50.427194) (xy 207.091741 50.340542) (xy 207.029409 50.264591) (xy 206.953458 50.202259) (xy 206.866806 50.155943) + (xy 206.772783 50.127422) (xy 206.675003 50.117791) (xy 205.849997 50.117791) (xy 205.752217 50.127422) (xy 205.658194 50.155943) + (xy 205.571542 50.202259) (xy 205.495591 50.264591) (xy 205.433259 50.340542) (xy 205.386943 50.427194) (xy 205.358422 50.521217) + (xy 205.348791 50.618997) (xy 204.050732 50.618997) (xy 204.05121 50.369) (xy 204.046383 50.319991) (xy 204.032088 50.272866) + (xy 204.008873 50.229435) (xy 203.977632 50.191368) (xy 203.939565 50.160127) (xy 203.896134 50.136912) (xy 203.849009 50.122617) + (xy 203.8 50.11779) (xy 203.404 50.119) (xy 203.3415 50.1815) (xy 202.9335 50.1815) (xy 202.871 50.119) + (xy 202.475 50.11779) (xy 202.425991 50.122617) (xy 202.378866 50.136912) (xy 202.335435 50.160127) (xy 202.297368 50.191368) + (xy 202.266127 50.229435) (xy 202.242912 50.272866) (xy 202.228617 50.319991) (xy 202.22379 50.369) (xy 200.447928 50.369) + (xy 200.664057 50.104) (xy 201.088748 49.752665) (xy 201.573594 49.490511) (xy 202.100127 49.327521) (xy 202.656527 49.269041) + (xy 202.668323 49.269) (xy 255.654439 49.269) + ) + ) + ) +) diff --git a/KiCad/noise_sensor.pro b/KiCad/noise_sensor.pro new file mode 100644 index 0000000..45ddfcf --- /dev/null +++ b/KiCad/noise_sensor.pro @@ -0,0 +1,248 @@ +update=Wed 24 Feb 2021 09:56:57 PM CET +version=1 +last_client=kicad +[general] +version=1 +RootSch= +BoardNm= +[cvpcb] +version=1 +NetIExt=net +[eeschema] +version=1 +LibDir= +[eeschema/libraries] +[pcbnew] +version=1 +PageLayoutDescrFile= +LastNetListRead=masterarbeit.net +CopperLayerCount=2 +BoardThickness=1.6 +AllowMicroVias=0 +AllowBlindVias=0 +RequireCourtyardDefinitions=0 +ProhibitOverlappingCourtyards=1 +MinTrackWidth=0.2 +MinViaDiameter=0.4 +MinViaDrill=0.3 +MinMicroViaDiameter=0.2 +MinMicroViaDrill=0.09999999999999999 +MinHoleToHole=0.25 +TrackWidth1=0.25 +ViaDiameter1=0.8 +ViaDrill1=0.4 +dPairWidth1=0.2 +dPairGap1=0.25 +dPairViaGap1=0.25 +SilkLineWidth=0.12 +SilkTextSizeV=1 +SilkTextSizeH=1 +SilkTextSizeThickness=0.15 +SilkTextItalic=0 +SilkTextUpright=1 +CopperLineWidth=0.2 +CopperTextSizeV=1.5 +CopperTextSizeH=1.5 +CopperTextThickness=0.3 +CopperTextItalic=0 +CopperTextUpright=1 +EdgeCutLineWidth=0.05 +CourtyardLineWidth=0.05 +OthersLineWidth=0.15 +OthersTextSizeV=1 +OthersTextSizeH=1 +OthersTextSizeThickness=0.15 +OthersTextItalic=0 +OthersTextUpright=1 +SolderMaskClearance=0 +SolderMaskMinWidth=0 +SolderPasteClearance=0 +SolderPasteRatio=0 +[pcbnew/Layer.F.Cu] +Name=F.Cu +Type=0 +Enabled=1 +[pcbnew/Layer.In1.Cu] +Name=In1.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In2.Cu] +Name=In2.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In3.Cu] +Name=In3.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In4.Cu] +Name=In4.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In5.Cu] +Name=In5.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In6.Cu] +Name=In6.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In7.Cu] +Name=In7.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In8.Cu] +Name=In8.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In9.Cu] +Name=In9.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In10.Cu] +Name=In10.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In11.Cu] +Name=In11.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In12.Cu] +Name=In12.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In13.Cu] +Name=In13.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In14.Cu] +Name=In14.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In15.Cu] +Name=In15.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In16.Cu] +Name=In16.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In17.Cu] +Name=In17.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In18.Cu] +Name=In18.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In19.Cu] +Name=In19.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In20.Cu] +Name=In20.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In21.Cu] +Name=In21.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In22.Cu] +Name=In22.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In23.Cu] +Name=In23.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In24.Cu] +Name=In24.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In25.Cu] +Name=In25.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In26.Cu] +Name=In26.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In27.Cu] +Name=In27.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In28.Cu] +Name=In28.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In29.Cu] +Name=In29.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In30.Cu] +Name=In30.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.B.Cu] +Name=B.Cu +Type=0 +Enabled=1 +[pcbnew/Layer.B.Adhes] +Enabled=1 +[pcbnew/Layer.F.Adhes] +Enabled=1 +[pcbnew/Layer.B.Paste] +Enabled=1 +[pcbnew/Layer.F.Paste] +Enabled=1 +[pcbnew/Layer.B.SilkS] +Enabled=1 +[pcbnew/Layer.F.SilkS] +Enabled=1 +[pcbnew/Layer.B.Mask] +Enabled=1 +[pcbnew/Layer.F.Mask] +Enabled=1 +[pcbnew/Layer.Dwgs.User] +Enabled=1 +[pcbnew/Layer.Cmts.User] +Enabled=1 +[pcbnew/Layer.Eco1.User] +Enabled=1 +[pcbnew/Layer.Eco2.User] +Enabled=1 +[pcbnew/Layer.Edge.Cuts] +Enabled=1 +[pcbnew/Layer.Margin] +Enabled=1 +[pcbnew/Layer.B.CrtYd] +Enabled=1 +[pcbnew/Layer.F.CrtYd] +Enabled=1 +[pcbnew/Layer.B.Fab] +Enabled=1 +[pcbnew/Layer.F.Fab] +Enabled=1 +[pcbnew/Layer.Rescue] +Enabled=1 +[pcbnew/Netclasses] +[pcbnew/Netclasses/Default] +Name=Default +Clearance=0.2 +TrackWidth=0.25 +ViaDiameter=0.8 +ViaDrill=0.4 +uViaDiameter=0.3 +uViaDrill=0.1 +dPairWidth=0.2 +dPairGap=0.25 +dPairViaGap=0.25 +[schematic_editor] +version=1 +PageLayoutDescrFile= +PlotDirectoryName= +SubpartIdSeparator=0 +SubpartFirstId=65 +NetFmtName=Pcbnew +SpiceAjustPassiveValues=0 +LabSize=50 +ERC_TestSimilarLabels=1 diff --git a/KiCad/noise_sensor.sch b/KiCad/noise_sensor.sch new file mode 100644 index 0000000..55ce545 --- /dev/null +++ b/KiCad/noise_sensor.sch @@ -0,0 +1,870 @@ +EESchema Schematic File Version 4 +EELAYER 30 0 +EELAYER END +$Descr A4 11693 8268 +encoding utf-8 +Sheet 1 1 +Title "" +Date "" +Rev "" +Comp "" +Comment1 "" +Comment2 "" +Comment3 "" +Comment4 "" +$EndDescr +$Comp +L RF_Module:RFM95W-868S2 U2 +U 1 1 5FF4BB32 +P 9850 2050 +F 0 "U2" H 10250 2650 50 0000 C CNN +F 1 "RFM95W-868S2" H 10250 2550 50 0000 C CNN +F 2 "masterarbeit:HOPERF_RFM9XW_SMD_Castellated" H 6550 3700 50 0001 C CNN +F 3 "https://www.hoperf.com/data/upload/portal/20181127/5bfcbea20e9ef.pdf" H 6550 3700 50 0001 C CNN + 1 9850 2050 + 1 0 0 -1 +$EndComp +$Comp +L power:GND #PWR0102 +U 1 1 5FF4FCA4 +P 5700 4550 +F 0 "#PWR0102" H 5700 4300 50 0001 C CNN +F 1 "GND" H 5705 4377 50 0000 C CNN +F 2 "" H 5700 4550 50 0001 C CNN +F 3 "" H 5700 4550 50 0001 C CNN + 1 5700 4550 + 1 0 0 -1 +$EndComp +Text GLabel 5000 2750 0 50 Input ~ 0 +RX +Text GLabel 5000 2650 0 50 Input ~ 0 +TX +Text GLabel 5000 4050 0 50 Input ~ 0 +SWCLK +Text GLabel 5000 3950 0 50 Input ~ 0 +SWDIO +Text GLabel 5000 3850 0 50 Input ~ 0 +SDA +Text GLabel 5000 3750 0 50 Input ~ 0 +SCL +Text GLabel 5000 4150 0 50 Input ~ 0 +LRCL_WS +Text GLabel 6400 3150 2 50 Input ~ 0 +DOUT +Text GLabel 6400 2950 2 50 Input ~ 0 +BCLK +Text GLabel 5000 3050 0 50 Input ~ 0 +MOSI +Text GLabel 5000 3150 0 50 Input ~ 0 +SPI_NSS +Text GLabel 5000 2950 0 50 Input ~ 0 +MISO +Text GLabel 6400 2650 2 50 Input ~ 0 +DIO0 +Text GLabel 5000 3250 0 50 Input ~ 0 +LED1 +Text GLabel 6400 3450 2 50 Input ~ 0 +SCK +Text GLabel 5000 3350 0 50 Input ~ 0 +SPI_RESET +Text GLabel 9350 2250 0 50 Input ~ 0 +SPI_RESET +Text GLabel 9350 2050 0 50 Input ~ 0 +SPI_NSS +Text GLabel 9350 1950 0 50 Input ~ 0 +MISO +Text GLabel 9350 1850 0 50 Input ~ 0 +MOSI +Text GLabel 9350 1750 0 50 Input ~ 0 +SCK +Text GLabel 10350 2450 2 50 Input ~ 0 +DIO0 +$Comp +L power:+3V3 #PWR0103 +U 1 1 5FF567B1 +P 9850 800 +F 0 "#PWR0103" H 9850 650 50 0001 C CNN +F 1 "+3V3" H 9865 973 50 0000 C CNN +F 2 "" H 9850 800 50 0001 C CNN +F 3 "" H 9850 800 50 0001 C CNN + 1 9850 800 + 1 0 0 -1 +$EndComp +$Comp +L power:GND #PWR0104 +U 1 1 5FF56D78 +P 9850 2800 +F 0 "#PWR0104" H 9850 2550 50 0001 C CNN +F 1 "GND" H 9855 2627 50 0000 C CNN +F 2 "" H 9850 2800 50 0001 C CNN +F 3 "" H 9850 2800 50 0001 C CNN + 1 9850 2800 + 1 0 0 -1 +$EndComp +Wire Wire Line + 9750 2650 9750 2800 +Wire Wire Line + 9750 2800 9850 2800 +Wire Wire Line + 9950 2650 9950 2800 +Wire Wire Line + 9950 2800 9850 2800 +Connection ~ 9850 2800 +Wire Wire Line + 9850 2650 9850 2800 +$Comp +L Device:LED D1 +U 1 1 5FF59892 +P 2850 3700 +F 0 "D1" H 2843 3917 50 0000 C CNN +F 1 "LED" H 2843 3826 50 0000 C CNN +F 2 "LED_THT:LED_D3.0mm" H 2850 3700 50 0001 C CNN +F 3 "~" H 2850 3700 50 0001 C CNN + 1 2850 3700 + 1 0 0 -1 +$EndComp +$Comp +L Device:R R3 +U 1 1 5FF5B2E5 +P 3150 3700 +F 0 "R3" V 2943 3700 50 0000 C CNN +F 1 "480R" V 3034 3700 50 0000 C CNN +F 2 "Resistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolder" V 3080 3700 50 0001 C CNN +F 3 "~" H 3150 3700 50 0001 C CNN + 1 3150 3700 + 0 1 1 0 +$EndComp +$Comp +L power:GND #PWR0107 +U 1 1 5FF5DFEA +P 2400 3700 +F 0 "#PWR0107" H 2400 3450 50 0001 C CNN +F 1 "GND" H 2405 3527 50 0000 C CNN +F 2 "" H 2400 3700 50 0001 C CNN +F 3 "" H 2400 3700 50 0001 C CNN + 1 2400 3700 + 1 0 0 -1 +$EndComp +Wire Wire Line + 2700 3700 2400 3700 +Text GLabel 3300 3700 2 50 Input ~ 0 +LED1 +$Comp +L Connector_Generic:Conn_02x03_Odd_Even J1 +U 1 1 5FF594B6 +P 10000 5350 +F 0 "J1" H 10050 5667 50 0000 C CNN +F 1 "Debug/USART" H 10050 5576 50 0000 C CNN +F 2 "Connector_PinHeader_2.54mm:PinHeader_2x03_P2.54mm_Vertical" H 10000 5350 50 0001 C CNN +F 3 "~" H 10000 5350 50 0001 C CNN + 1 10000 5350 + 1 0 0 -1 +$EndComp +$Comp +L Jumper:Jumper_2_Open JP1 +U 1 1 5FF5D896 +P 2950 3250 +F 0 "JP1" H 2950 3485 50 0000 C CNN +F 1 "Jumper_2_Open" H 2950 3394 50 0000 C CNN +F 2 "Jumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mm" H 2950 3250 50 0001 C CNN +F 3 "~" H 2950 3250 50 0001 C CNN + 1 2950 3250 + 1 0 0 -1 +$EndComp +$Comp +L power:+3V3 #PWR04 +U 1 1 5FF6967E +P 9350 5250 +F 0 "#PWR04" H 9350 5100 50 0001 C CNN +F 1 "+3V3" H 9365 5423 50 0000 C CNN +F 2 "" H 9350 5250 50 0001 C CNN +F 3 "" H 9350 5250 50 0001 C CNN + 1 9350 5250 + 1 0 0 -1 +$EndComp +$Comp +L power:GND #PWR05 +U 1 1 5FF6AAAA +P 9350 5350 +F 0 "#PWR05" H 9350 5100 50 0001 C CNN +F 1 "GND" H 9355 5177 50 0000 C CNN +F 2 "" H 9350 5350 50 0001 C CNN +F 3 "" H 9350 5350 50 0001 C CNN + 1 9350 5350 + 1 0 0 -1 +$EndComp +Wire Wire Line + 9350 5250 9800 5250 +Wire Wire Line + 9350 5350 9800 5350 +Text GLabel 10300 5450 2 50 Input ~ 0 +SWCLK +Text GLabel 9800 5450 0 50 Input ~ 0 +SWDIO +Text GLabel 10300 5350 2 50 Input ~ 0 +TX +Text GLabel 10300 5250 2 50 Input ~ 0 +RX +Text GLabel 6400 3750 2 50 Input ~ 0 +I²C-ADDRESS +Text GLabel 3150 3250 2 50 Input ~ 0 +I²C-ADDRESS +Wire Wire Line + 2750 3250 2500 3250 +Wire Wire Line + 7000 5400 6750 5400 +Wire Wire Line + 7000 5250 6750 5250 +$Comp +L power:GND #PWR06 +U 1 1 5FFA14A5 +P 9050 4450 +F 0 "#PWR06" H 9050 4200 50 0001 C CNN +F 1 "GND" H 9055 4277 50 0000 C CNN +F 2 "" H 9050 4450 50 0001 C CNN +F 3 "" H 9050 4450 50 0001 C CNN + 1 9050 4450 + 1 0 0 -1 +$EndComp +$Comp +L power:+3V3 #PWR07 +U 1 1 5FFA26C5 +P 10550 4150 +F 0 "#PWR07" H 10550 4000 50 0001 C CNN +F 1 "+3V3" H 10565 4323 50 0000 C CNN +F 2 "" H 10550 4150 50 0001 C CNN +F 3 "" H 10550 4150 50 0001 C CNN + 1 10550 4150 + 1 0 0 -1 +$EndComp +$Comp +L Connector_Generic:Conn_01x04 J3 +U 1 1 5FFACF3F +P 7800 3150 +F 0 "J3" H 7718 2725 50 0000 C CNN +F 1 "I²C IN" H 7718 2816 50 0000 C CNN +F 2 "Connector_JST:JST_PH_B4B-PH-SM4-TB_1x04-1MP_P2.00mm_Vertical" H 7800 3150 50 0001 C CNN +F 3 "~" H 7800 3150 50 0001 C CNN + 1 7800 3150 + -1 0 0 1 +$EndComp +$Comp +L power:GND #PWR012 +U 1 1 5FFBDD82 +P 8300 3250 +F 0 "#PWR012" H 8300 3000 50 0001 C CNN +F 1 "GND" H 8305 3077 50 0000 C CNN +F 2 "" H 8300 3250 50 0001 C CNN +F 3 "" H 8300 3250 50 0001 C CNN + 1 8300 3250 + 1 0 0 -1 +$EndComp +Wire Wire Line + 8000 3250 8300 3250 +$Comp +L Device:R R1 +U 1 1 5FFC59E5 +P 8200 2750 +F 0 "R1" H 8270 2796 50 0000 L CNN +F 1 "4k7" H 8270 2705 50 0000 L CNN +F 2 "Resistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolder" V 8130 2750 50 0001 C CNN +F 3 "~" H 8200 2750 50 0001 C CNN + 1 8200 2750 + 1 0 0 -1 +$EndComp +$Comp +L power:+3V3 #PWR011 +U 1 1 5FFC76F6 +P 8200 2600 +F 0 "#PWR011" H 8200 2450 50 0001 C CNN +F 1 "+3V3" H 8215 2773 50 0000 C CNN +F 2 "" H 8200 2600 50 0001 C CNN +F 3 "" H 8200 2600 50 0001 C CNN + 1 8200 2600 + 1 0 0 -1 +$EndComp +$Comp +L power:+3V3 #PWR013 +U 1 1 5FFC7E83 +P 8600 2750 +F 0 "#PWR013" H 8600 2600 50 0001 C CNN +F 1 "+3V3" H 8615 2923 50 0000 C CNN +F 2 "" H 8600 2750 50 0001 C CNN +F 3 "" H 8600 2750 50 0001 C CNN + 1 8600 2750 + 1 0 0 -1 +$EndComp +Text GLabel 8300 2950 2 50 Input ~ 0 +SCL +Wire Wire Line + 8000 2950 8200 2950 +Wire Wire Line + 8200 2950 8200 2900 +Wire Wire Line + 8000 3050 8600 3050 +Wire Wire Line + 8200 2950 8300 2950 +Connection ~ 8200 2950 +$Comp +L Device:R R2 +U 1 1 5FFDE894 +P 8600 2900 +F 0 "R2" H 8670 2946 50 0000 L CNN +F 1 "4k7" H 8670 2855 50 0000 L CNN +F 2 "Resistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolder" V 8530 2900 50 0001 C CNN +F 3 "~" H 8600 2900 50 0001 C CNN + 1 8600 2900 + 1 0 0 -1 +$EndComp +Text GLabel 8750 3050 2 50 Input ~ 0 +SDA +Wire Wire Line + 8600 3050 8750 3050 +Connection ~ 8600 3050 +Wire Wire Line + 8000 3150 9050 3150 +$Comp +L power:+5V #PWR014 +U 1 1 5FFE92DB +P 9050 3150 +F 0 "#PWR014" H 9050 3000 50 0001 C CNN +F 1 "+5V" H 9065 3323 50 0000 C CNN +F 2 "" H 9050 3150 50 0001 C CNN +F 3 "" H 9050 3150 50 0001 C CNN + 1 9050 3150 + 1 0 0 -1 +$EndComp +$Comp +L power:GND #PWR017 +U 1 1 600498C3 +P 7000 5400 +F 0 "#PWR017" H 7000 5150 50 0001 C CNN +F 1 "GND" H 7005 5227 50 0000 C CNN +F 2 "" H 7000 5400 50 0001 C CNN +F 3 "" H 7000 5400 50 0001 C CNN + 1 7000 5400 + 1 0 0 -1 +$EndComp +$Comp +L power:+BATT #PWR016 +U 1 1 6004B1B0 +P 7000 5250 +F 0 "#PWR016" H 7000 5100 50 0001 C CNN +F 1 "+BATT" H 7015 5423 50 0000 C CNN +F 2 "" H 7000 5250 50 0001 C CNN +F 3 "" H 7000 5250 50 0001 C CNN + 1 7000 5250 + 1 0 0 -1 +$EndComp +$Comp +L masterarbeit-rescue:STM32G071KxT-STM32G0 U4 +U 1 1 6007BB38 +P 5700 3450 +F 0 "U4" H 6250 4650 50 0000 C CNN +F 1 "STM32G071KxT" H 6050 4550 50 0000 C CNN +F 2 "Package_QFP:LQFP-32_7x7mm_P0.8mm" H 5600 2400 50 0001 R CNN +F 3 "https://www.st.com/resource/en/datasheet/stm32g071kb.pdf" H 5700 3450 50 0001 C CNN + 1 5700 3450 + 1 0 0 -1 +$EndComp +$Comp +L power:+3V3 #PWR02 +U 1 1 600941E8 +P 2050 1700 +F 0 "#PWR02" H 2050 1550 50 0001 C CNN +F 1 "+3V3" H 2065 1873 50 0000 C CNN +F 2 "" H 2050 1700 50 0001 C CNN +F 3 "" H 2050 1700 50 0001 C CNN + 1 2050 1700 + 1 0 0 -1 +$EndComp +$Comp +L power:GND #PWR08 +U 1 1 60094D04 +P 2050 2600 +F 0 "#PWR08" H 2050 2350 50 0001 C CNN +F 1 "GND" H 2055 2427 50 0000 C CNN +F 2 "" H 2050 2600 50 0001 C CNN +F 3 "" H 2050 2600 50 0001 C CNN + 1 2050 2600 + 1 0 0 -1 +$EndComp +$Comp +L Device:R R4 +U 1 1 6009A5CC +P 2050 2000 +F 0 "R4" V 1843 2000 50 0000 C CNN +F 1 "?R" V 1934 2000 50 0000 C CNN +F 2 "Resistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolder" V 1980 2000 50 0001 C CNN +F 3 "~" H 2050 2000 50 0001 C CNN + 1 2050 2000 + -1 0 0 1 +$EndComp +$Comp +L Device:R R5 +U 1 1 600A5EBF +P 2050 2300 +F 0 "R5" V 1843 2300 50 0000 C CNN +F 1 "?R" V 1934 2300 50 0000 C CNN +F 2 "Resistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolder" V 1980 2300 50 0001 C CNN +F 3 "~" H 2050 2300 50 0001 C CNN + 1 2050 2300 + -1 0 0 1 +$EndComp +Wire Wire Line + 2050 1700 2050 1850 +Wire Wire Line + 2050 2450 2050 2600 +Text GLabel 2350 2150 2 50 Input ~ 0 +DEVICE_ID +Wire Wire Line + 2350 2150 2050 2150 +Connection ~ 2050 2150 +$Comp +L Connector_Generic:Conn_01x05 J4 +U 1 1 600AF8B5 +P 7000 1450 +F 0 "J4" H 7080 1492 50 0000 L CNN +F 1 "Microphone Connector" H 7080 1401 50 0000 L CNN +F 2 "Connector_PinSocket_2.54mm:PinSocket_1x05_P2.54mm_Vertical" H 7000 1450 50 0001 C CNN +F 3 "~" H 7000 1450 50 0001 C CNN + 1 7000 1450 + 1 0 0 -1 +$EndComp +Text GLabel 6800 1550 0 50 Input ~ 0 +DOUT +$Comp +L power:+3V3 #PWR09 +U 1 1 600B8034 +P 6250 1250 +F 0 "#PWR09" H 6250 1100 50 0001 C CNN +F 1 "+3V3" H 6265 1423 50 0000 C CNN +F 2 "" H 6250 1250 50 0001 C CNN +F 3 "" H 6250 1250 50 0001 C CNN + 1 6250 1250 + 1 0 0 -1 +$EndComp +Text GLabel 6800 1650 0 50 Input ~ 0 +LRCL_WS +Text GLabel 6800 1450 0 50 Input ~ 0 +BCLK +$Comp +L power:GND #PWR015 +U 1 1 600BB656 +P 6250 1350 +F 0 "#PWR015" H 6250 1100 50 0001 C CNN +F 1 "GND" H 6255 1177 50 0000 C CNN +F 2 "" H 6250 1350 50 0001 C CNN +F 3 "" H 6250 1350 50 0001 C CNN + 1 6250 1350 + 1 0 0 -1 +$EndComp +Wire Wire Line + 6250 1250 6800 1250 +Wire Wire Line + 6250 1350 6800 1350 +$Comp +L power:GND #PWR01 +U 1 1 600F4120 +P 2500 3250 +F 0 "#PWR01" H 2500 3000 50 0001 C CNN +F 1 "GND" H 2505 3077 50 0000 C CNN +F 2 "" H 2500 3250 50 0001 C CNN +F 3 "" H 2500 3250 50 0001 C CNN + 1 2500 3250 + 1 0 0 -1 +$EndComp +$Comp +L power:GND #PWR019 +U 1 1 601233C9 +P 3350 2600 +F 0 "#PWR019" H 3350 2350 50 0001 C CNN +F 1 "GND" H 3355 2427 50 0000 C CNN +F 2 "" H 3350 2600 50 0001 C CNN +F 3 "" H 3350 2600 50 0001 C CNN + 1 3350 2600 + 1 0 0 -1 +$EndComp +$Comp +L Device:R R6 +U 1 1 601233D3 +P 3350 2000 +F 0 "R6" V 3143 2000 50 0000 C CNN +F 1 "?R" V 3234 2000 50 0000 C CNN +F 2 "Resistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolder" V 3280 2000 50 0001 C CNN +F 3 "~" H 3350 2000 50 0001 C CNN + 1 3350 2000 + -1 0 0 1 +$EndComp +$Comp +L Device:R R7 +U 1 1 601233DD +P 3350 2300 +F 0 "R7" V 3143 2300 50 0000 C CNN +F 1 "?R" V 3234 2300 50 0000 C CNN +F 2 "Resistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolder" V 3280 2300 50 0001 C CNN +F 3 "~" H 3350 2300 50 0001 C CNN + 1 3350 2300 + -1 0 0 1 +$EndComp +Wire Wire Line + 3350 1700 3350 1850 +Wire Wire Line + 3350 2450 3350 2600 +Wire Wire Line + 3650 2150 3350 2150 +Connection ~ 3350 2150 +Text GLabel 3650 2150 2 50 Input ~ 0 +BATT_SENSE +$Comp +L power:+BATT #PWR018 +U 1 1 6012E3E3 +P 3350 1700 +F 0 "#PWR018" H 3350 1550 50 0001 C CNN +F 1 "+BATT" H 3365 1873 50 0000 C CNN +F 2 "" H 3350 1700 50 0001 C CNN +F 3 "" H 3350 1700 50 0001 C CNN + 1 3350 1700 + 1 0 0 -1 +$EndComp +Text GLabel 5000 2850 0 50 Input ~ 0 +DEVICE_ID +Text GLabel 6400 2750 2 50 Input ~ 0 +BATT_SENSE +$Comp +L Connector_Generic:Conn_01x01 J2 +U 1 1 601E388E +P 6550 5250 +F 0 "J2" H 6468 5025 50 0000 C CNN +F 1 "Conn_01x01" H 6468 5116 50 0000 C CNN +F 2 "Connector_Wire:SolderWirePad_1x01_SMD_1x2mm" H 6550 5250 50 0001 C CNN +F 3 "~" H 6550 5250 50 0001 C CNN + 1 6550 5250 + -1 0 0 1 +$EndComp +$Comp +L Connector_Generic:Conn_01x01 J5 +U 1 1 601E3EB3 +P 6550 5400 +F 0 "J5" H 6550 5600 50 0000 C CNN +F 1 "Conn_01x01" H 6550 5500 50 0000 C CNN +F 2 "Connector_Wire:SolderWirePad_1x01_SMD_1x2mm" H 6550 5400 50 0001 C CNN +F 3 "~" H 6550 5400 50 0001 C CNN + 1 6550 5400 + -1 0 0 1 +$EndComp +$Comp +L Regulator_Linear:L78L33_TO92 U1 +U 1 1 600FF264 +P 9050 4150 +F 0 "U1" H 9050 4392 50 0000 C CNN +F 1 "L78L33_TO92" H 9050 4301 50 0000 C CNN +F 2 "Package_TO_SOT_THT:TO-92_Inline" H 9050 4375 50 0001 C CIN +F 3 "http://www.st.com/content/ccc/resource/technical/document/datasheet/15/55/e5/aa/23/5b/43/fd/CD00000446.pdf/files/CD00000446.pdf/jcr:content/translations/en.CD00000446.pdf" H 9050 4100 50 0001 C CNN + 1 9050 4150 + 1 0 0 -1 +$EndComp +$Comp +L Connector_Generic:Conn_01x01 J6 +U 1 1 60111880 +P 10550 1750 +F 0 "J6" H 10630 1792 50 0000 L CNN +F 1 "Conn_01x01" H 10630 1701 50 0000 L CNN +F 2 "Connector_PinSocket_2.54mm:PinSocket_1x01_P2.54mm_Vertical" H 10550 1750 50 0001 C CNN +F 3 "~" H 10550 1750 50 0001 C CNN + 1 10550 1750 + 1 0 0 -1 +$EndComp +$Comp +L power:+3V3 #PWR010 +U 1 1 60190E33 +P 5700 1300 +F 0 "#PWR010" H 5700 1150 50 0001 C CNN +F 1 "+3V3" H 5715 1473 50 0000 C CNN +F 2 "" H 5700 1300 50 0001 C CNN +F 3 "" H 5700 1300 50 0001 C CNN + 1 5700 1300 + 1 0 0 -1 +$EndComp +$Comp +L Device:C_Small C4 +U 1 1 601CF5F2 +P 8450 4250 +F 0 "C4" H 8542 4296 50 0000 L CNN +F 1 "100nF" H 8542 4205 50 0000 L CNN +F 2 "Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder" H 8450 4250 50 0001 C CNN +F 3 "~" H 8450 4250 50 0001 C CNN + 1 8450 4250 + 1 0 0 -1 +$EndComp +$Comp +L Device:C_Small C3 +U 1 1 601CF5F8 +P 8050 4250 +F 0 "C3" H 8142 4296 50 0000 L CNN +F 1 "4.7µF" H 8142 4205 50 0000 L CNN +F 2 "Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder" H 8050 4250 50 0001 C CNN +F 3 "~" H 8050 4250 50 0001 C CNN + 1 8050 4250 + 1 0 0 -1 +$EndComp +$Comp +L Device:C_Small C6 +U 1 1 601E7ABB +P 9600 950 +F 0 "C6" V 9371 950 50 0000 C CNN +F 1 "4.7µF" V 9462 950 50 0000 C CNN +F 2 "Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder" H 9600 950 50 0001 C CNN +F 3 "~" H 9600 950 50 0001 C CNN + 1 9600 950 + 0 1 1 0 +$EndComp +$Comp +L Device:C_Small C7 +U 1 1 601EC4C2 +P 9600 1350 +F 0 "C7" V 9371 1350 50 0000 C CNN +F 1 "100nF" V 9462 1350 50 0000 C CNN +F 2 "Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder" H 9600 1350 50 0001 C CNN +F 3 "~" H 9600 1350 50 0001 C CNN + 1 9600 1350 + 0 1 1 0 +$EndComp +Wire Wire Line + 9350 1350 9500 1350 +Wire Wire Line + 9850 1350 9850 1550 +$Comp +L power:GND #PWR024 +U 1 1 601EF438 +P 9350 1450 +F 0 "#PWR024" H 9350 1200 50 0001 C CNN +F 1 "GND" H 9355 1277 50 0000 C CNN +F 2 "" H 9350 1450 50 0001 C CNN +F 3 "" H 9350 1450 50 0001 C CNN + 1 9350 1450 + 1 0 0 -1 +$EndComp +Wire Wire Line + 9350 1350 9350 1450 +Connection ~ 9350 1350 +Wire Wire Line + 9500 950 9350 950 +Wire Wire Line + 9350 950 9350 1350 +Wire Wire Line + 9700 950 9850 950 +Wire Wire Line + 9850 950 9850 800 +Wire Wire Line + 9850 1350 9700 1350 +Wire Wire Line + 9850 1350 9850 950 +Connection ~ 9850 1350 +Connection ~ 9850 950 +$Comp +L Device:C_Small C8 +U 1 1 601D17B5 +P 10000 4250 +F 0 "C8" H 10092 4296 50 0000 L CNN +F 1 "4.7µF" H 10092 4205 50 0000 L CNN +F 2 "Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder" H 10000 4250 50 0001 C CNN +F 3 "~" H 10000 4250 50 0001 C CNN + 1 10000 4250 + 1 0 0 -1 +$EndComp +$Comp +L Device:C_Small C5 +U 1 1 601D17AF +P 9550 4250 +F 0 "C5" H 9642 4296 50 0000 L CNN +F 1 "100nF" H 9642 4205 50 0000 L CNN +F 2 "Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder" H 9550 4250 50 0001 C CNN +F 3 "~" H 9550 4250 50 0001 C CNN + 1 9550 4250 + 1 0 0 -1 +$EndComp +Wire Wire Line + 9350 4150 9550 4150 +Connection ~ 9550 4150 +Wire Wire Line + 9550 4150 10000 4150 +Connection ~ 10000 4150 +Wire Wire Line + 10000 4150 10550 4150 +$Comp +L power:GND #PWR025 +U 1 1 602799D7 +P 9550 4350 +F 0 "#PWR025" H 9550 4100 50 0001 C CNN +F 1 "GND" H 9555 4177 50 0000 C CNN +F 2 "" H 9550 4350 50 0001 C CNN +F 3 "" H 9550 4350 50 0001 C CNN + 1 9550 4350 + 1 0 0 -1 +$EndComp +$Comp +L power:GND #PWR026 +U 1 1 60279F5C +P 10000 4350 +F 0 "#PWR026" H 10000 4100 50 0001 C CNN +F 1 "GND" H 10005 4177 50 0000 C CNN +F 2 "" H 10000 4350 50 0001 C CNN +F 3 "" H 10000 4350 50 0001 C CNN + 1 10000 4350 + 1 0 0 -1 +$EndComp +Wire Wire Line + 8750 4150 8450 4150 +Connection ~ 8450 4150 +$Comp +L power:+BATT #PWR020 +U 1 1 60296798 +P 7650 4150 +F 0 "#PWR020" H 7650 4000 50 0001 C CNN +F 1 "+BATT" H 7665 4323 50 0000 C CNN +F 2 "" H 7650 4150 50 0001 C CNN +F 3 "" H 7650 4150 50 0001 C CNN + 1 7650 4150 + 1 0 0 -1 +$EndComp +$Comp +L power:+5V #PWR021 +U 1 1 60297059 +P 7900 4150 +F 0 "#PWR021" H 7900 4000 50 0001 C CNN +F 1 "+5V" H 7915 4323 50 0000 C CNN +F 2 "" H 7900 4150 50 0001 C CNN +F 3 "" H 7900 4150 50 0001 C CNN + 1 7900 4150 + 1 0 0 -1 +$EndComp +Wire Wire Line + 8050 4150 8450 4150 +Wire Wire Line + 8050 4150 7900 4150 +Connection ~ 8050 4150 +Connection ~ 7900 4150 +Wire Wire Line + 7900 4150 7650 4150 +$Comp +L power:GND #PWR022 +U 1 1 6029A386 +P 8050 4350 +F 0 "#PWR022" H 8050 4100 50 0001 C CNN +F 1 "GND" H 8055 4177 50 0000 C CNN +F 2 "" H 8050 4350 50 0001 C CNN +F 3 "" H 8050 4350 50 0001 C CNN + 1 8050 4350 + 1 0 0 -1 +$EndComp +$Comp +L power:GND #PWR023 +U 1 1 6029A978 +P 8450 4350 +F 0 "#PWR023" H 8450 4100 50 0001 C CNN +F 1 "GND" H 8455 4177 50 0000 C CNN +F 2 "" H 8450 4350 50 0001 C CNN +F 3 "" H 8450 4350 50 0001 C CNN + 1 8450 4350 + 1 0 0 -1 +$EndComp +$Comp +L power:GND #PWR03 +U 1 1 602CBD63 +P 5150 2000 +F 0 "#PWR03" H 5150 1750 50 0001 C CNN +F 1 "GND" H 5155 1827 50 0000 C CNN +F 2 "" H 5150 2000 50 0001 C CNN +F 3 "" H 5150 2000 50 0001 C CNN + 1 5150 2000 + 1 0 0 -1 +$EndComp +Wire Wire Line + 5150 1550 5150 1900 +Wire Wire Line + 5700 1300 5700 1550 +$Comp +L Device:C_Small C1 +U 1 1 602D3A6D +P 5450 1550 +F 0 "C1" V 5221 1550 50 0000 C CNN +F 1 "4.7µF" V 5312 1550 50 0000 C CNN +F 2 "Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder" H 5450 1550 50 0001 C CNN +F 3 "~" H 5450 1550 50 0001 C CNN + 1 5450 1550 + 0 1 1 0 +$EndComp +$Comp +L Device:C_Small C2 +U 1 1 602D6D94 +P 5450 1900 +F 0 "C2" V 5221 1900 50 0000 C CNN +F 1 "100nF" V 5312 1900 50 0000 C CNN +F 2 "Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder" H 5450 1900 50 0001 C CNN +F 3 "~" H 5450 1900 50 0001 C CNN + 1 5450 1900 + 0 1 1 0 +$EndComp +Wire Wire Line + 5550 1550 5700 1550 +Connection ~ 5700 1550 +Wire Wire Line + 5700 1550 5700 1900 +Wire Wire Line + 5550 1900 5700 1900 +Connection ~ 5700 1900 +Wire Wire Line + 5700 1900 5700 2350 +Wire Wire Line + 5350 1550 5150 1550 +Wire Wire Line + 5350 1900 5150 1900 +Connection ~ 5150 1900 +Wire Wire Line + 5150 1900 5150 2000 +$Comp +L masterarbeit-rescue:B3U-1000P-dk_Tactile-Switches S1 +U 1 1 60128DFA +P 6600 4150 +F 0 "S1" H 6600 4447 60 0000 C CNN +F 1 "B3U-1000P" H 6600 4341 60 0000 C CNN +F 2 "digikey-footprints:Switch_Tactile_SMD_B3U-1000P" H 6800 4350 60 0001 L CNN +F 3 "https://omronfs.omron.com/en_US/ecb/products/pdf/en-b3u.pdf" H 6800 4450 60 0001 L CNN +F 4 "SW1020CT-ND" H 6800 4550 60 0001 L CNN "Digi-Key_PN" +F 5 "B3U-1000P" H 6800 4650 60 0001 L CNN "MPN" +F 6 "Switches" H 6800 4750 60 0001 L CNN "Category" +F 7 "Tactile Switches" H 6800 4850 60 0001 L CNN "Family" +F 8 "https://omronfs.omron.com/en_US/ecb/products/pdf/en-b3u.pdf" H 6800 4950 60 0001 L CNN "DK_Datasheet_Link" +F 9 "/product-detail/en/omron-electronics-inc-emc-div/B3U-1000P/SW1020CT-ND/1534357" H 6800 5050 60 0001 L CNN "DK_Detail_Page" +F 10 "SWITCH TACTILE SPST-NO 0.05A 12V" H 6800 5150 60 0001 L CNN "Description" +F 11 "Omron Electronics Inc-EMC Div" H 6800 5250 60 0001 L CNN "Manufacturer" +F 12 "Active" H 6800 5350 60 0001 L CNN "Status" + 1 6600 4150 + 1 0 0 -1 +$EndComp +Wire Wire Line + 6800 4150 7200 4150 +$Comp +L Device:R R8 +U 1 1 6012EEB6 +P 7200 4300 +F 0 "R8" V 6993 4300 50 0000 C CNN +F 1 "1k" V 7084 4300 50 0000 C CNN +F 2 "Resistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolder" V 7130 4300 50 0001 C CNN +F 3 "~" H 7200 4300 50 0001 C CNN + 1 7200 4300 + -1 0 0 1 +$EndComp +$Comp +L power:GND #PWR027 +U 1 1 6012F7EF +P 7200 4450 +F 0 "#PWR027" H 7200 4200 50 0001 C CNN +F 1 "GND" H 7205 4277 50 0000 C CNN +F 2 "" H 7200 4450 50 0001 C CNN +F 3 "" H 7200 4450 50 0001 C CNN + 1 7200 4450 + 1 0 0 -1 +$EndComp +$EndSCHEMATC diff --git a/KiCad/pcb_3d.png b/KiCad/pcb_3d.png new file mode 100644 index 0000000000000000000000000000000000000000..86edadd1af5375c997070a0443537c12738c9905 GIT binary patch literal 198753 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%0D@czPe7m5jdY^1 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]VnX+Ye?^O!2jNN-CB5W@HO^#ar*b!MwhkO07mKl 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 z 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�wmGOFVE`j#8(#*w- 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 literal 0 HcmV?d00001 diff --git a/STL/master_complete.png b/STL/master_complete.png new file mode 100644 index 0000000000000000000000000000000000000000..20f15538c4313cc162ae2ab35bd8beb029e7d228 GIT binary patch literal 78536 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%0A#}E?VF>TqvZZ$XqMy_bUOp>BC|^b6K8Tq3 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 literal 0 HcmV?d00001 diff --git a/STL/slave_top_v2.stl b/STL/slave_top_v2.stl new file mode 100644 index 0000000000000000000000000000000000000000..37a4def2b32a3213380e6dcbe1bd08451683c92f GIT binary patch literal 23484 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 literal 0 HcmV?d00001 diff --git a/STM32/Core/Inc/SX1278.h b/STM32/Core/Inc/SX1278.h new file mode 100644 index 0000000..cb82f94 --- /dev/null +++ b/STM32/Core/Inc/SX1278.h @@ -0,0 +1,490 @@ +/** + * Author Wojciech Domski + * www: www.Domski.pl + * + * work based on DORJI.COM sample code and + * https://github.com/realspinner/SX1278_LoRa + */ + +#ifndef __SX1278_H__ +#define __SX1278_H__ + +#include +#include + +#include +#ifdef __cplusplus +extern "C" { +#endif + +#define SX1278_MAX_PACKET 256 +#define SX1278_DEFAULT_TIMEOUT 3000 + +/* RFM98 Internal registers Address */ +/********************LoRa mode***************************/ +#define LR_RegFifo 0x00 +/* Common settings */ +#define LR_RegOpMode 0x01 +#define LR_RegFrMsb 0x06 +#define LR_RegFrMid 0x07 +#define LR_RegFrLsb 0x08 +/* Tx settings */ +#define LR_RegPaConfig 0x09 +#define LR_RegPaRamp 0x0A +#define LR_RegOcp 0x0B +/* Rx settings */ +#define LR_RegLna 0x0C +/* LoRa registers */ +#define LR_RegFifoAddrPtr 0x0D +#define LR_RegFifoTxBaseAddr 0x0E +#define LR_RegFifoRxBaseAddr 0x0F +#define LR_RegFifoRxCurrentaddr 0x10 +#define LR_RegIrqFlagsMask 0x11 +#define LR_RegIrqFlags 0x12 +#define LR_RegRxNbBytes 0x13 +#define LR_RegRxHeaderCntValueMsb 0x14 +#define LR_RegRxHeaderCntValueLsb 0x15 +#define LR_RegRxPacketCntValueMsb 0x16 +#define LR_RegRxPacketCntValueLsb 0x17 +#define LR_RegModemStat 0x18 +#define LR_RegPktSnrValue 0x19 +#define LR_RegPktRssiValue 0x1A +#define LR_RegRssiValue 0x1B +#define LR_RegHopChannel 0x1C +#define LR_RegModemConfig1 0x1D +#define LR_RegModemConfig2 0x1E +#define LR_RegSymbTimeoutLsb 0x1F +#define LR_RegPreambleMsb 0x20 +#define LR_RegPreambleLsb 0x21 +#define LR_RegPayloadLength 0x22 +#define LR_RegMaxPayloadLength 0x23 +#define LR_RegHopPeriod 0x24 +#define LR_RegFifoRxByteAddr 0x25 +#define LR_RegModemConfig3 0x26 +/* I/O settings */ +#define REG_LR_DIOMAPPING1 0x40 +#define REG_LR_DIOMAPPING2 0x41 +/* Version */ +#define REG_LR_VERSION 0x42 +/* Additional settings */ +#define REG_LR_PLLHOP 0x44 +#define REG_LR_TCXO 0x4B +#define REG_LR_PADAC 0x4D +#define REG_LR_FORMERTEMP 0x5B +#define REG_LR_AGCREF 0x61 +#define REG_LR_AGCTHRESH1 0x62 +#define REG_LR_AGCTHRESH2 0x63 +#define REG_LR_AGCTHRESH3 0x64 + +/********************FSK/ook mode***************************/ +#define RegFIFO 0x00 +#define RegOpMode 0x01 +#define RegBitRateMsb 0x02 +#define RegBitRateLsb 0x03 +#define RegFdevMsb 0x04 +#define RegFdevLsb 0x05 +#define RegFreqMsb 0x06 +#define RegFreqMid 0x07 +#define RegFreqLsb 0x08 +#define RegPaConfig 0x09 +#define RegPaRamp 0x0a +#define RegOcp 0x0b +#define RegLna 0x0c +#define RegRxConfig 0x0d +#define RegRssiConfig 0x0e +#define RegRssiCollision 0x0f +#define RegRssiThresh 0x10 +#define RegRssiValue 0x11 +#define RegRxBw 0x12 +#define RegAfcBw 0x13 +#define RegOokPeak 0x14 +#define RegOokFix 0x15 +#define RegOokAvg 0x16 +#define RegAfcFei 0x1a +#define RegAfcMsb 0x1b +#define RegAfcLsb 0x1c +#define RegFeiMsb 0x1d +#define RegFeiLsb 0x1e +#define RegPreambleDetect 0x1f +#define RegRxTimeout1 0x20 +#define RegRxTimeout2 0x21 +#define RegRxTimeout3 0x22 +#define RegRxDelay 0x23 +#define RegOsc 0x24 +#define RegPreambleMsb 0x25 +#define RegPreambleLsb 0x26 +#define RegSyncConfig 0x27 +#define RegSyncValue1 0x28 +#define RegSyncValue2 0x29 +#define RegSyncValue3 0x2a +#define RegSyncValue4 0x2b +#define RegSyncValue5 0x2c +#define RegSyncValue6 0x2d +#define RegSyncValue7 0x2e +#define RegSyncValue8 0x2f +#define RegPacketConfig1 0x30 +#define RegPacketConfig2 0x31 +#define RegPayloadLength 0x32 +#define RegNodeAdrs 0x33 +#define RegBroadcastAdrs 0x34 +#define RegFifoThresh 0x35 +#define RegSeqConfig1 0x36 +#define RegSeqConfig2 0x37 +#define RegTimerResol 0x38 +#define RegTimer1Coef 0x39 +#define RegSyncWord 0x39 +#define RegTimer2Coef 0x3a +#define RegImageCal 0x3b +#define RegTemp 0x3c +#define RegLowBat 0x3d +#define RegIrqFlags1 0x3e +#define RegIrqFlags2 0x3f +#define RegDioMapping1 0x40 +#define RegDioMapping2 0x41 +#define RegVersion 0x42 +#define RegPllHop 0x44 +#define RegPaDac 0x4d +#define RegBitRateFrac 0x5d + +/********************************************************** + **Parameter table define + **********************************************************/ + +#define SX1278_POWER_20DBM 0 +#define SX1278_POWER_17DBM 1 +#define SX1278_POWER_14DBM 2 +#define SX1278_POWER_11DBM 3 + +static const uint8_t SX1278_Power[4] = { 0xFF, /* 20dbm */ + 0xFC, /* 17dbm */ + 0xF9, /* 14dbm */ + 0xF6, /* 11dbm */ + }; + +#define SX1278_LORA_SF_6 0 +#define SX1278_LORA_SF_7 1 +#define SX1278_LORA_SF_8 2 +#define SX1278_LORA_SF_9 3 +#define SX1278_LORA_SF_10 4 +#define SX1278_LORA_SF_11 5 +#define SX1278_LORA_SF_12 6 + +static const uint8_t SX1278_SpreadFactor[7] = { 6, 7, 8, 9, 10, 11, 12 }; + +#define SX1278_LORA_BW_7_8KHZ 0 +#define SX1278_LORA_BW_10_4KHZ 1 +#define SX1278_LORA_BW_15_6KHZ 2 +#define SX1278_LORA_BW_20_8KHZ 3 +#define SX1278_LORA_BW_31_2KHZ 4 +#define SX1278_LORA_BW_41_7KHZ 5 +#define SX1278_LORA_BW_62_5KHZ 6 +#define SX1278_LORA_BW_125KHZ 7 +#define SX1278_LORA_BW_250KHZ 8 +#define SX1278_LORA_BW_500KHZ 9 + +static const uint8_t SX1278_LoRaBandwidth[10] = { 0, /* 7.8KHz, */ + 1, /* 10.4KHz, */ + 2, /* 15.6KHz, */ + 3, /* 20.8KHz, */ + 4, /* 31.2KHz, */ + 5, /* 41.7KHz, */ + 6, /* 62.5KHz, */ + 7, /* 125.0KHz, */ + 8, /* 250.0KHz, */ + 9 /* 500.0KHz */ + }; + +/* Coding rate */ +#define SX1278_LORA_CR_4_5 0 +#define SX1278_LORA_CR_4_6 1 +#define SX1278_LORA_CR_4_7 2 +#define SX1278_LORA_CR_4_8 3 + +static const uint8_t SX1278_CodingRate[4] = { 0x01, 0x02, 0x03, 0x04 }; + +/* CRC Enable */ +#define SX1278_LORA_CRC_EN 0 +#define SX1278_LORA_CRC_DIS 1 + +static const uint8_t SX1278_CRC_Sum[2] = { 0x01, 0x00 }; + +typedef enum _SX1278_STATUS { + SLEEP, STANDBY, TX, RX +} SX1278_Status_t; + +typedef struct { + SX1278_hw_t *hw; + + uint64_t frequency; + uint8_t power; + uint8_t LoRa_SF; + uint8_t LoRa_BW; + uint8_t LoRa_CR; + uint8_t LoRa_CRC_sum; + uint8_t packetLength; + + SX1278_Status_t status; + + uint8_t rxBuffer[SX1278_MAX_PACKET]; + uint8_t readBytes; +} SX1278_t; + +/** + * \brief Read byte from LoRa module + * + * Reads data from LoRa module from given address. + * + * \param[in] module Pointer to LoRa structure + * \param[in] addr Address from which data will be read + * + * \return Read data + */ +uint8_t SX1278_SPIRead(SX1278_t *module, uint8_t addr); + +/** + * \brief Write byte to LoRa module + * + * Writes data to LoRa module under given address. + * + * \param[in] module Pointer to LoRa structure + * \param[in] addr Address under which data will be written + * \param[in] cmd Data to write + */ +void SX1278_SPIWrite(SX1278_t *module, uint8_t addr, uint8_t cmd); + +/** + * \brief Read data from LoRa module + * + * Reads data from LoRa module from given address. + * + * \param[in] module Pointer to LoRa structure + * \param[in] addr Address from which data will be read + * \param[out] rxBuf Pointer to store read data + * \param[in] length Number of bytes to read + */ +void SX1278_SPIBurstRead(SX1278_t *module, uint8_t addr, uint8_t *rxBuf, + uint8_t length); + +/** + * \brief Write data to LoRa module + * + * Writes data to LoRa module under given address. + * + * \param[in] module Pointer to LoRa structure + * \param[in] addr Address under which data will be written + * \param[in] txBuf Pointer to data + * \param[in] length Number of bytes to write + */ +void SX1278_SPIBurstWrite(SX1278_t *module, uint8_t addr, uint8_t *txBuf, + uint8_t length); + +/** + * \brief Configure LoRa module + * + * Configure LoRa module according to parameters stored in + * module structure. + * + * \param[in] module Pointer to LoRa structure + */ +void SX1278_config(SX1278_t *module); + +/** + * \brief Entry LoRa mode + * + * Module supports different operation mode. + * To use LoRa operation mode one has to enter this + * particular mode to transmit and receive data + * using LoRa. + * + * \param[in] module Pointer to LoRa structure + */ +void SX1278_entryLoRa(SX1278_t *module); + +/** + * \brief Clear IRQ + * + * Clears interrupt flags. + * + * \param[in] module Pointer to LoRa structure + */ +void SX1278_clearLoRaIrq(SX1278_t *module); + +/** + * \brief Entry reception mode + * + * Entry reception mode + * + * \param[in] module Pointer to LoRa structure + * \param[in] length Length of message to be received + * \param[in] timeout Timeout in [ms] + * + * \return 1 if entering reception mode + * 0 if timeout was exceeded + */ +int SX1278_LoRaEntryRx(SX1278_t *module, uint8_t length, uint32_t timeout); + +/** + * \brief Read data + * + * Read data and store it in module's RX buffer + * + * \param[in] module Pointer to LoRa structure + * + * \return returns number of read bytes + */ +uint8_t SX1278_LoRaRxPacket(SX1278_t *module); + +/** + * \brief Entry transmitter mode + * + * Entry transmitter mode + * + * \param[in] module Pointer to LoRa structure + * \param[in] length Length of message to be sent + * \param[in] timeout Timeout in [ms] + * + * \return 1 if entering reception mode + * 0 if timeout was exceeded + */ +int SX1278_LoRaEntryTx(SX1278_t *module, uint8_t length, uint32_t timeout); + +/** + * \brief Send data + * + * Transmit data + * + * \param[in] module Pointer to LoRa structure + * \param[in] txBuf Data buffer with data to be sent + * \param[in] length Length of message to be sent + * \param[in] timeout Timeout in [ms] + * + * \return 1 if entering reception mode + * 0 if timeout was exceeded + */ +int SX1278_LoRaTxPacket(SX1278_t *module, uint8_t *txBuf, uint8_t length, + uint32_t timeout); + +/** + * \brief Initialize LoRa module + * + * Initialize LoRa module and initialize LoRa structure. + * + * \param[in] module Pointer to LoRa structure + * \param[in] frequency Frequency in [Hz] + * \param[in] power Power level, accepts SX1278_POWER_* + * \param[in] LoRa_SF LoRa spread rate, accepts SX1278_LORA_SF_* + * \param[in] LoRa_BW LoRa bandwidth, accepts SX1278_LORA_BW_* + * \param[in] LoRa_CR LoRa coding rate, accepts SX1278_LORA_CR_* + * \param[in] LoRa_CRC_sum Hardware CRC check, SX1278_LORA_CRC_EN or + * SX1278_LORA_CRC_DIS + * \param[in] packetLength Package length, no more than 256 bytes + */ +void SX1278_init(SX1278_t *module, uint64_t frequency, uint8_t power, + uint8_t LoRa_SF, uint8_t LoRa_BW, uint8_t LoRa_CR, + uint8_t LoRa_CRC_sum, uint8_t packetLength); + +/** + * \brief Entry transmitter mode and send data + * + * Entry transmitter mode and send data. + * Combination of SX1278_LoRaEntryTx() and SX1278_LoRaTxPacket(). + * + * \param[in] module Pointer to LoRa structure + * \param[in] txBuf Data buffer with data to be sent + * \param[in] length Length of message to be sent + * \param[in] timeout Timeout in [ms] + * + * \return 1 if entered TX mode and sent data + * 0 if timeout was exceeded + */ +int SX1278_transmit(SX1278_t *module, uint8_t *txBuf, uint8_t length, + uint32_t timeout); + +/** + * \brief Entry reception mode + * + * Same as SX1278_LoRaEntryRx() + * + * \param[in] module Pointer to LoRa structure + * \param[in] length Length of message to be received + * \param[in] timeout Timeout in [ms] + * + * \return 1 if entering reception mode + * 0 if timeout was exceeded + */ +int SX1278_receive(SX1278_t *module, uint8_t length, uint32_t timeout); + +/** + * \brief Returns number of received data + * + * Returns the number of received data which are + * held in internal buffer. + * Same as SX1278_LoRaRxPacket(). + * + * \param[in] module Pointer to LoRa structure + * + * \return returns number of read bytes + */ +uint8_t SX1278_available(SX1278_t *module); + +/** + * \brief Read received data to buffer + * + * Reads data from internal buffer to external + * buffer. Reads exactly number of bytes which are stored in + * internal buffer. + * + * \param[in] module Pointer to LoRa structure + * \param[out] rxBuf External buffer to store data. + * External buffer is terminated with '\0' + * character + * \param[in] length Length of message to be received + * + * \return returns number of read bytes + */ +uint8_t SX1278_read(SX1278_t *module, uint8_t *rxBuf, uint8_t length); + +/** + * \brief Returns RSSI (LoRa) + * + * Returns RSSI in LoRa mode. + * + * \param[in] module Pointer to LoRa structure + * + * \return RSSI value + */ +uint8_t SX1278_RSSI_LoRa(SX1278_t *module); + +/** + * \brief Returns RSSI + * + * Returns RSSI (general mode). + * + * \param[in] module Pointer to LoRa structure + * + * \return RSSI value + */ +uint8_t SX1278_RSSI(SX1278_t *module); + +/** + * \brief Enter standby mode + * + * Enters standby mode. + * + * \param[in] module Pointer to LoRa structure + */ +void SX1278_standby(SX1278_t *module); + +/** + * \brief Enter sleep mode + * + * Enters sleep mode. + * + * \param[in] module Pointer to LoRa structure + */ +void SX1278_sleep(SX1278_t *module); +#ifdef __cplusplus +} +#endif + +#endif diff --git a/STM32/Core/Inc/SX1278_hw.h b/STM32/Core/Inc/SX1278_hw.h new file mode 100644 index 0000000..16142ca --- /dev/null +++ b/STM32/Core/Inc/SX1278_hw.h @@ -0,0 +1,95 @@ +/** + * Author Wojciech Domski + * www: www.Domski.pl + * + * Hardware layer for SX1278 LoRa module + */ + +#ifndef __SX1278_HW_HEADER +#define __SX1278_HW_HEADER + +#include + +typedef struct { + int pin; + void *port; +} SX1278_hw_dio_t; + +typedef struct { + SX1278_hw_dio_t reset; + SX1278_hw_dio_t dio0; + SX1278_hw_dio_t nss; + void *spi; +} SX1278_hw_t; + +/** + * \brief Initialize hardware layer + * + * Clears NSS and resets LoRa module. + * + * \param[in] hw Pointer to hardware structure + */ +void SX1278_hw_init(SX1278_hw_t *hw); + +/** + * \brief Control NSS + * + * Clears and sets NSS according to passed value. + * + * \param[in] hw Pointer to hardware structure. + * \param[in] value 1 sets NSS high, other value sets NSS low. + */ +void SX1278_hw_SetNSS(SX1278_hw_t *hw, int value); + +/** + * \brief Resets LoRa module + * + * Resets LoRa module. + * + * \param[in] hw Pointer to hardware structure + */ +void SX1278_hw_Reset(SX1278_hw_t *hw); + +/** + * \brief Send command via SPI. + * + * Send single byte via SPI interface. + * + * \param[in] hw Pointer to hardware structure + * \param[in] cmd Command + */ +void SX1278_hw_SPICommand(SX1278_hw_t *hw, uint8_t cmd); + +/** + * \brief Reads data via SPI + * + * Reads data via SPI interface. + * + * \param[in] hw Pointer to hardware structure + * + * \return Read value + */ +uint8_t SX1278_hw_SPIReadByte(SX1278_hw_t *hw); + +/** + * \brief ms delay + * + * Milisecond delay. + * + * \param[in] msec Number of milliseconds to wait + */ +void SX1278_hw_DelayMs(uint32_t msec); + +/** + * \brief Reads DIO0 state + * + * Reads LoRa DIO0 state using GPIO. + * + * \param[in] hw Pointer to hardware structure + * + * \return 0 if DIO0 low, 1 if DIO high + */ +int SX1278_hw_GetDIO0(SX1278_hw_t *hw); + +#endif + diff --git a/STM32/Core/Inc/arduinoFFT.h b/STM32/Core/Inc/arduinoFFT.h new file mode 100644 index 0000000..f67c82a --- /dev/null +++ b/STM32/Core/Inc/arduinoFFT.h @@ -0,0 +1,102 @@ +/* + + FFT libray + Copyright (C) 2010 Didier Longueville + Copyright (C) 2014 Enrique Condes + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +*/ + +#ifndef arduinoFFT_h /* Prevent loading library twice */ +#define arduinoFFT_h + +#include +#include +#include +#include +#include + +#define FFT_LIB_REV 0x14 +/* Custom constants */ +#define FFT_FORWARD 0x01 +#define FFT_REVERSE 0x00 + +/* Windowing type */ +#define FFT_WIN_TYP_RECTANGLE 0x00 /* rectangle (Box car) */ +#define FFT_WIN_TYP_HAMMING 0x01 /* hamming */ +#define FFT_WIN_TYP_HANN 0x02 /* hann */ +#define FFT_WIN_TYP_TRIANGLE 0x03 /* triangle (Bartlett) */ +#define FFT_WIN_TYP_NUTTALL 0x04 /* nuttall */ +#define FFT_WIN_TYP_BLACKMAN 0x05 /* blackman */ +#define FFT_WIN_TYP_BLACKMAN_NUTTALL 0x06 /* blackman nuttall */ +#define FFT_WIN_TYP_BLACKMAN_HARRIS 0x07 /* blackman harris*/ +#define FFT_WIN_TYP_FLT_TOP 0x08 /* flat top */ +#define FFT_WIN_TYP_WELCH 0x09 /* welch */ +/*Mathematial constants*/ +#define twoPi 6.28318531 +#define fourPi 12.56637061 +#define sixPi 18.84955593 + +#ifdef __AVR__ + static const double _c1[]PROGMEM = {0.0000000000, 0.7071067812, 0.9238795325, 0.9807852804, + 0.9951847267, 0.9987954562, 0.9996988187, 0.9999247018, + 0.9999811753, 0.9999952938, 0.9999988235, 0.9999997059, + 0.9999999265, 0.9999999816, 0.9999999954, 0.9999999989, + 0.9999999997}; + static const double _c2[]PROGMEM = {1.0000000000, 0.7071067812, 0.3826834324, 0.1950903220, + 0.0980171403, 0.0490676743, 0.0245412285, 0.0122715383, + 0.0061358846, 0.0030679568, 0.0015339802, 0.0007669903, + 0.0003834952, 0.0001917476, 0.0000958738, 0.0000479369, + 0.0000239684}; +#endif +class arduinoFFT { +public: + /* Constructor */ + arduinoFFT(void); + arduinoFFT(double *vReal, double *vImag, uint16_t samples, double samplingFrequency); + /* Destructor */ + ~arduinoFFT(void); + /* Functions */ + uint8_t Revision(void); + uint8_t Exponent(uint16_t value); + + void ComplexToMagnitude(double *vReal, double *vImag, uint16_t samples); + void Compute(double *vReal, double *vImag, uint16_t samples, uint8_t dir); + void Compute(double *vReal, double *vImag, uint16_t samples, uint8_t power, uint8_t dir); + void DCRemoval(double *vData, uint16_t samples); + double MajorPeak(double *vD, uint16_t samples, double samplingFrequency); + void MajorPeak(double *vD, uint16_t samples, double samplingFrequency, double *f, double *v); + void Windowing(double *vData, uint16_t samples, uint8_t windowType, uint8_t dir); + + void ComplexToMagnitude(); + void Compute(uint8_t dir); + void DCRemoval(); + void MajorPeakAndMagnitude(double *freq_interpolated, double *mag_interpolated); // Added by me + double MajorPeak(); + void MajorPeak(double *f, double *v); + void Windowing(uint8_t windowType, uint8_t dir); + +private: + /* Variables */ + uint16_t _samples; + double _samplingFrequency; + double *_vReal; + double *_vImag; + uint8_t _power; + /* Functions */ + void Swap(double *x, double *y); +}; + +#endif diff --git a/STM32/Core/Inc/correction_values.h b/STM32/Core/Inc/correction_values.h new file mode 100644 index 0000000..f462a92 --- /dev/null +++ b/STM32/Core/Inc/correction_values.h @@ -0,0 +1,70 @@ +/* + * correction_values.h + * + * Created on: Feb 9, 2021 + * Author: lukas + */ + +#ifndef INC_CORRECTION_VALUES_H_ +#define INC_CORRECTION_VALUES_H_ + + +// 512 +const float CORRECTION_VALUES[] = { + 0.0,7.172883405795546e-05,0.001059260037457216,0.004035324283915964,0.009791360415459789,0.018498869351727586,0.030546600767073013,0.04524773389537198,0.06312054701195031,0.0818440680984944, + 0.10352075045215836,0.12794679745582618,0.15361517704862274,0.18018801058837586,0.20776632685999466,0.2361873442322523,0.2662140944595638,0.29695041847073594,0.3277827886445909,0.3580006456478009, + 0.38819916054721165,0.41863074980816084,0.4497257525325588,0.48058178703131293,0.5111063487591285,0.540273642354577,0.5688382594591064,0.5966645337998011,0.6238340240825409,0.650461303550153, + 0.6760130904406626,0.7005557204194303,0.7243886261300616,0.7475183358403319,0.7702629396190269,0.7934428767121573,0.8159057164363238,0.83765511467948,0.8586975316368711,0.8790418017204933, + 0.8986987470894034,0.9176808323845598,0.9360018579822185,0.9536766889327459,0.9707210167012957,0.9871511508509416,1.002983837888662,1.0182361046144601,1.0329251234610313,1.0470680974755222, + 1.0602946965518625,1.0724771806307554,1.084112679028229,1.0954249967970877,1.1062127253016834,1.1164601096616837,1.1262787299321142,1.1356828651092872,1.1446880245538988,1.1534899388049804, + 1.1618281005985902,1.1697256639380633,1.1772808683020228,1.1853230604969849,1.1930901650986656,1.200548562786553,1.2077092521697683,1.2145828226528632,1.2211794644283986,1.2275089791593923, + 1.233580791171737,1.239403959003114,1.2449871871781069,1.2503388380993885,1.2554669439624755,1.2603792186167753,1.2650830693089457,1.2695856082560306,1.2738936640057226,1.2780137925496329, + 1.281952288162757,1.2857151939485687,1.2893083120745448,1.2927372136874369,1.2960072485014562,1.299123554055786,1.302091064640536,1.3049145198925178,1.3075984730641015,1.310147298969909, + 1.312565201617383,1.3148562215282158,1.3170242427584278,1.3190729996254622,1.3210060831510961,1.3228269472292884,1.3245389145282596,1.3261451821362016,1.3275735193179066,1.328161505203354, + 1.3285398211716795,1.3287473180657905,1.328876681296295,1.3289243905292003,1.3288923767080048,1.3287901131795625,1.3286800462793598,1.3286206632764501,1.3283542876698091,1.3279692139632036, + 1.3275238780381797,1.3270914179034223,1.3267004615342253,1.3267742840600314,1.3269720219576617,1.3271058942040632,1.3271774931790798,1.3271883585907676,1.3271399796126981,1.3270337969259807, + 1.326871204670443,1.3266535523092335,1.3263821464108725,1.3260582523526088,1.325683095948776,1.3252578650076263,1.324783710819993,1.3242617495829616,1.3236930637615634,1.3230787033913824, + 1.3224196873248222,1.3215309348732716,1.3201781465447535,1.3185602835081423,1.3163904842879137,1.3141893621392133,1.3119670779440011,1.3096840698031207,1.3072689997800968,1.3048394979963558, + 1.3025223698494062,1.3001736478759265,1.297812936334551,1.2954224586250285,1.292906161704599,1.2903412289884622,1.2878459557081685,1.2853801395396072,1.2828950815618145,1.2803948353940793, + 1.27777957135956,1.2746077621705787,1.2714147493381687,1.2675862401083555,1.2636317991342418,1.259681618525803,1.2557347984475775,1.2517793495297105,1.2478413582417982,1.2438900981136651, + 1.2400406226929348,1.2362165300229944,1.232354706654204,1.2284250662791136,1.22448436484387,1.2205615750396235,1.216634218026872,1.2127424750817724,1.208938199345932,1.2051240799926874, + 1.2012427190574988,1.1973350238874958,1.193766945882658,1.1918536415473437,1.1899231600400093,1.1880319977373104,1.186171811026769,1.1842950731404265,1.1824020894198684,1.1804931596695738, + 1.1785685783139235,1.176628634548578,1.1746736124864576,1.1727037912985276,1.1707194453495953,1.1687208443293127,1.1667082533785722,1.1646819332114742,1.162642140233034,1.1605891266527948, + 1.1585231405945051,1.1564444262020073,1.1543532237414862,1.152249769700208,1.1501342968818975,1.1474145580599013,1.1446559746057992,1.141888721417447,1.1383561989203028,1.1348039410645114, + 1.1312480180104145,1.1277901215883568,1.1243324312370409,1.1208711116653496,1.1173492415138613,1.1138180334445404,1.1102842515562992,1.1067636375534724,1.1032449775042512,1.099724242527613, + 1.0962631335953248,1.0928363396942997,1.089407443005215,1.0859517683562654,1.0824603596773055,1.078967789595708,1.075489552291985,1.0720881299386718,1.0686854859892996,1.065281793892197, + 1.0618290706808384,1.0583680033848966,1.054906755249069,1.0514542211699252,1.0480104341003997,1.0445668330653837,1.041131592378115,1.0377747729878009,1.0344180356505863,1.0310615288945382, + 1.0276725904710695,1.0242653926527339,1.020859198973952,1.0174560644651591,1.0140683195464366,1.0106818841727532,1.007296891850679,1.0039573374229547,1.0006546969914412,0.9973533593246692, + 0.9940534505011709,0.9907106437180979,0.9873664712382778,0.9840244150151416,0.9806883405331283,0.9773656430518435,0.9740453115792655,0.9707274595859758,0.9674501559810466,0.9642103774628765, + 0.9609729138627312,0.9577378726892607,0.9545564840044283,0.9513964276555934,0.948238637378326,0.9450832151686782,0.9419407183887651,0.9388021546127084,0.9356661769737245,0.9325328819103722, + 0.9294135961284578,0.9262974399922136,0.9231841700256103,0.9200739143089076,0.916977930551638,0.9138850266969418,0.9107952902167624,0.9077088073388642,0.9046363093514975,0.9015674367782348, + 0.8985019950572375,0.8954400657137611,0.8923911122002267,0.8893469886097733,0.8863065426299345,0.8832698513238463,0.8802445319215023,0.8772258250367256,0.874211026676025,0.8712002096626809, + 0.8681985991470822,0.8652059148496944,0.8622173550516091,0.8592329885421919,0.8562657641464899,0.8533448443389925,0.850427939355407,0.8475151148168408,0.8446064353885903,0.8417876394416499, + 0.8389834032676171,0.8361828473707709,0.8333860340955348,0.8305762098807065,0.8277517492352842,0.8249314524510548,0.822115377874059,0.8193035829935283,0.8165036662847402,0.8137081440239708, + 0.8109170169074323,0.8081303392044807,0.8053514344607194,0.8025811546506798,0.7998154314964251,0.7970543161834435,0.7942978591151272,0.7915520023789957,0.7888121145484682,0.786076982113828, + 0.7833466525539204,0.7806271655659783,0.777951087501187,0.7752796419982264,0.7726128744290972,0.7699508294586495,0.7672414237348727,0.7644496291093685,0.7616636780322027,0.7588836094529752, + 0.7561094616166246,0.7532506657758349,0.7503208967572872,0.7473984288821756,0.744483293146494,0.7415755198454969,0.73870316728899,0.7358545058279665,0.7330129481929062,0.7301785232708123, + 0.7273512592898264,0.7245161159298864,0.7216800334451033,0.7188513743019934,0.7160301634466695,0.713216425195918,0.7104158820999209,0.7076268517510362,0.7048452867996134,0.7020712094194204, + 0.6993046411878778,0.6965635326785661,0.6938519786386481,0.6911476810253259,0.6884506603779014,0.6857609366740617,0.6830736909915721,0.6803776743686955,0.6776891762880255,0.6750082138487741, + 0.6723348036147564,0.6696689616199956,0.6670188652997536,0.6643768832722908,0.661742445367839,0.6591155658552638,0.6564962585017369,0.6538892323652762,0.6512935055358983,0.648705322270668, + 0.6461246946770429,0.6435516343875753,0.6409971344595664,0.6385534046263793,0.6361163822449369,0.6336860809419324,0.6312625139023003,0.6288456938737227,0.626453252376109,0.6240816837909854, + 0.6217166555265382,0.6193581796459204,0.6170062677993668,0.6146609312284136,0.6123046285177839,0.6099536101425693,0.607609343101918,0.6052718364211899,0.6029410987366184,0.6006183582768324, + 0.598306997444908,0.5960023843516674,0.5937045263154322,0.5914134302859362,0.5891291028482787,0.5868631609716286,0.5846207941704108,0.5823849947162417,0.5801557687503681,0.5779331220697975, + 0.5757170601310062,0.5734988242308056,0.5712790410252068,0.5690659875651222,0.5668596673882982,0.564660083709719,0.5624672394252177,0.5602839171567512,0.5581097346242566,0.5559422579961837, + 0.5537814891149292,0.5516274295214653,0.5494800804587907,0.5473511723382107,0.5452425513179093,0.5431404463056002,0.5410448583090187,0.5389557880548492,0.5368732359919627,0.5348681346367996, + 0.5330380540201975,0.5312127430431234,0.5293922086719108,0.5275764576164956,0.5257654963329431,0.5239613159108583,0.5222175631853987,0.5204782279743697,0.5187433172719041,0.5170128378333307, + 0.5152867961774786,0.5135651985889782,0.5118480511205437,0.5101353595952403,0.5084271296087454,0.5067233665315937,0.5050240755114073,0.5033292614751171,0.5016389291311685,0.49995308297171603, + 0.49827172727480323,0.49659486610653314,0.49492250332322274,0.4932546425735472,0.49159128730066814,0.4899324407443539,0.4882781059430834,0.4866282857361377,0.48498298276568175,0.48334219947883056, + 0.4817059381297021,0.4800742007814626,0.47844698930835344,0.4768243053977078,0.47520615055195664,0.47359252609061886,0.4719834331522799,0.47037887269656137,0.46877884550607196,0.46718335218834955, + 0.4655923931777925,0.464005968737574,0.4624240789615473,0.4608467237761388,0.45927390294222453,0.4577056160570006,0.4561418625558357,0.4545826417141148,0.45302795264906914,0.4514777943215931, + 0.4499321655380505,0.44839106495206904,0.4468737749345353,0.4453851733641605,0.4439008009704048,0.44242065709570616,0.4409447409379821,0.43947305155228067,0.4380055878524199,0.4365837314106429, + 0.43523560843876913,0.43389099318539354,0.43254988696998853,0.4312122909785673,0.4298782062650867,0.4285476337528458,0.4272175283220949,0.4258782697200807,0.42454262333177084,0.4232105891769857, + 0.42188216715172827,0.42055735702955016,0.4192361584629108,0.4179185709845266,0.4166145251963689,0.41531506916996963,0.4140191536360333,0.41272677794409274,0.41143794133045397,0.410152642919478, + 0.4088708817248545,0.40758529052778536,0.4062960742923718,0.4050104831515799,0.40372851530466675,0.40245016884669893,0.4011754417697965,0.399904331964362,0.39863683722030263,0.39738302448490076, + 0.39613284633852,0.3948862121360839,0.3936431195515306,0.39240356616402244,0.3911675494591046,0.38993506682985646,0.3887012156015032,0.38746234792929096,0.3862270912837194,0.38499544232782434, + 0.38376739763825213,0.3825429537063741 +}; + + + +#endif /* INC_CORRECTION_VALUES_H_ */ diff --git a/STM32/Core/Inc/defs.h b/STM32/Core/Inc/defs.h new file mode 100644 index 0000000..40fcc75 --- /dev/null +++ b/STM32/Core/Inc/defs.h @@ -0,0 +1,79 @@ +/*! \file avrlibdefs.h \brief AVRlib global defines and macros. */ +//***************************************************************************** +// +// File Name : 'avrlibdefs.h' +// Title : AVRlib global defines and macros include file +// Author : Pascal Stang +// Created : 7/12/2001 +// Revised : 9/30/2002 +// Version : 1.1 +// Target MCU : Atmel AVR series +// Editor Tabs : 4 +// +// Description : This include file is designed to contain items useful to all +// code files and projects, regardless of specific implementation. +// +// This code is distributed under the GNU Public License +// which can be found at http://www.gnu.org/licenses/gpl.txt +// +//***************************************************************************** + + +#ifndef AVRLIBDEFS_H +#define AVRLIBDEFS_H + +//#define F_CPU 4000000 +#define MEM_TYPE 1 + +// Code compatibility to new AVR-libc +// outb(), inb(), inw(), outw(), BV(), sbi(), cbi(), sei(), cli() +#ifndef outb + #define outb(addr, data) addr = (data) +#endif +#ifndef inb + #define inb(addr) (addr) +#endif +#ifndef outw + #define outw(addr, data) addr = (data) +#endif +#ifndef inw + #define inw(addr) (addr) +#endif +#ifndef BV + #define BV(bit) (1<<(bit)) +#endif +//#ifndef cbi +// #define cbi(reg,bit) reg &= ~(BV(bit)) +//#endif +//#ifndef sbi +// #define sbi(reg,bit) reg |= (BV(bit)) +//#endif +#ifndef cli + #define cli() __asm__ __volatile__ ("cli" ::) +#endif +#ifndef sei + #define sei() __asm__ __volatile__ ("sei" ::) +#endif + +// use this for packed structures +// (this is seldom necessary on an 8-bit architecture like AVR, +// but can assist in code portability to AVR) +#define GNUC_PACKED __attribute__((packed)) + +// port address helpers +#define DDR(x) ((x)-1) // address of data direction register of port x +#define PIN(x) ((x)-2) // address of input register of port x + +// MIN/MAX/ABS macros +#define MIN(a,b) ((ab)?(a):(b)) +#define ABS(x) ((x>0)?(x):(-x)) + +// constants +#define PI 3.14159265359 + +//Math +#define sq(x) ((x)*(x)) +#define constrain(amt,low,high) ((amt)<(low)?(low):((amt)>(high)?(high):(amt))) + +#endif diff --git a/STM32/Core/Inc/main.h b/STM32/Core/Inc/main.h new file mode 100644 index 0000000..238f938 --- /dev/null +++ b/STM32/Core/Inc/main.h @@ -0,0 +1,84 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : main.h + * @brief : Header for main.c file. + * This file contains the common defines of the application. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2021 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32g0xx_hal.h" + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Exported types ------------------------------------------------------------*/ +/* USER CODE BEGIN ET */ + +/* USER CODE END ET */ + +/* Exported constants --------------------------------------------------------*/ +/* USER CODE BEGIN EC */ + +/* USER CODE END EC */ + +/* Exported macro ------------------------------------------------------------*/ +/* USER CODE BEGIN EM */ + +/* USER CODE END EM */ + +/* Exported functions prototypes ---------------------------------------------*/ +void Error_Handler(void); + +/* USER CODE BEGIN EFP */ + +/* USER CODE END EFP */ + +/* Private defines -----------------------------------------------------------*/ +#define Device_ID_Pin GPIO_PIN_2 +#define Device_ID_GPIO_Port GPIOA +#define NSS_Pin GPIO_PIN_5 +#define NSS_GPIO_Port GPIOA +#define LED_Pin GPIO_PIN_6 +#define LED_GPIO_Port GPIOA +#define RESET_Pin GPIO_PIN_7 +#define RESET_GPIO_Port GPIOA +#define BAT_Monitor_Pin GPIO_PIN_1 +#define BAT_Monitor_GPIO_Port GPIOB +#define I2C_Address_Pin GPIO_PIN_6 +#define I2C_Address_GPIO_Port GPIOC +/* USER CODE BEGIN Private defines */ + + +/* USER CODE END Private defines */ + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/STM32/Core/Inc/stm32g0xx_hal_conf.h b/STM32/Core/Inc/stm32g0xx_hal_conf.h new file mode 100644 index 0000000..eae1fd7 --- /dev/null +++ b/STM32/Core/Inc/stm32g0xx_hal_conf.h @@ -0,0 +1,352 @@ +/** + ****************************************************************************** + * @file stm32g0xx_hal_conf.h + * @author MCD Application Team + * @brief HAL configuration file. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2018 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef STM32G0xx_HAL_CONF_H +#define STM32G0xx_HAL_CONF_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* ########################## Module Selection ############################## */ +/** + * @brief This is the list of modules to be used in the HAL driver + */ +#define HAL_MODULE_ENABLED +#define HAL_ADC_MODULE_ENABLED +/* #define HAL_CEC_MODULE_ENABLED */ +/* #define HAL_COMP_MODULE_ENABLED */ +/* #define HAL_CRC_MODULE_ENABLED */ +/* #define HAL_CRYP_MODULE_ENABLED */ +/* #define HAL_DAC_MODULE_ENABLED */ +/* #define HAL_EXTI_MODULE_ENABLED */ +/* #define HAL_FDCAN_MODULE_ENABLED */ +/* #define HAL_HCD_MODULE_ENABLED */ +#define HAL_I2C_MODULE_ENABLED +#define HAL_I2S_MODULE_ENABLED +/* #define HAL_IWDG_MODULE_ENABLED */ +/* #define HAL_IRDA_MODULE_ENABLED */ +/* #define HAL_LPTIM_MODULE_ENABLED */ +/* #define HAL_PCD_MODULE_ENABLED */ +/* #define HAL_RNG_MODULE_ENABLED */ +/* #define HAL_RTC_MODULE_ENABLED */ +/* #define HAL_SMARTCARD_MODULE_ENABLED */ +/* #define HAL_SMBUS_MODULE_ENABLED */ +#define HAL_SPI_MODULE_ENABLED +#define HAL_TIM_MODULE_ENABLED +#define HAL_UART_MODULE_ENABLED +/* #define HAL_USART_MODULE_ENABLED */ +/* #define HAL_WWDG_MODULE_ENABLED */ +#define HAL_GPIO_MODULE_ENABLED +#define HAL_EXTI_MODULE_ENABLED +#define HAL_DMA_MODULE_ENABLED +#define HAL_RCC_MODULE_ENABLED +#define HAL_FLASH_MODULE_ENABLED +#define HAL_PWR_MODULE_ENABLED +#define HAL_CORTEX_MODULE_ENABLED + +/* ########################## Register Callbacks selection ############################## */ +/** + * @brief This is the list of modules where register callback can be used + */ +#define USE_HAL_ADC_REGISTER_CALLBACKS 1u +#define USE_HAL_CEC_REGISTER_CALLBACKS 0u +#define USE_HAL_COMP_REGISTER_CALLBACKS 0u +#define USE_HAL_CRYP_REGISTER_CALLBACKS 0u +#define USE_HAL_DAC_REGISTER_CALLBACKS 0u +#define USE_HAL_FDCAN_REGISTER_CALLBACKS 0u +#define USE_HAL_HCD_REGISTER_CALLBACKS 0u +#define USE_HAL_I2C_REGISTER_CALLBACKS 1u +#define USE_HAL_I2S_REGISTER_CALLBACKS 1u +#define USE_HAL_IRDA_REGISTER_CALLBACKS 0u +#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0u +#define USE_HAL_PCD_REGISTER_CALLBACKS 0u +#define USE_HAL_RNG_REGISTER_CALLBACKS 0u +#define USE_HAL_RTC_REGISTER_CALLBACKS 0u +#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0u +#define USE_HAL_SPI_REGISTER_CALLBACKS 0u +#define USE_HAL_TIM_REGISTER_CALLBACKS 0u +#define USE_HAL_UART_REGISTER_CALLBACKS 0u +#define USE_HAL_USART_REGISTER_CALLBACKS 0u +#define USE_HAL_WWDG_REGISTER_CALLBACKS 0u + +/* ########################## Oscillator Values adaptation ####################*/ +/** + * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. + * This value is used by the RCC HAL module to compute the system frequency + * (when HSE is used as system clock source, directly or through the PLL). + */ +#if !defined (HSE_VALUE) +#define HSE_VALUE (8000000UL) /*!< Value of the External oscillator in Hz */ +#endif /* HSE_VALUE */ + +#if !defined (HSE_STARTUP_TIMEOUT) +#define HSE_STARTUP_TIMEOUT (100UL) /*!< Time out for HSE start up, in ms */ +#endif /* HSE_STARTUP_TIMEOUT */ + +/** + * @brief Internal High Speed oscillator (HSI) value. + * This value is used by the RCC HAL module to compute the system frequency + * (when HSI is used as system clock source, directly or through the PLL). + */ +#if !defined (HSI_VALUE) +#define HSI_VALUE (16000000UL) /*!< Value of the Internal oscillator in Hz*/ +#endif /* HSI_VALUE */ + +#if defined(STM32G0C1xx) || defined(STM32G0B1xx) || defined(STM32G0B0xx) +/** + * @brief Internal High Speed oscillator (HSI48) value for USB FS, SDMMC and RNG. + * This internal oscillator is mainly dedicated to provide a high precision clock to + * the USB peripheral by means of a special Clock Recovery System (CRS) circuitry. + * When the CRS is not used, the HSI48 RC oscillator runs on it default frequency + * which is subject to manufacturing process variations. + */ +#if !defined (HSI48_VALUE) + #define HSI48_VALUE 48000000U /*!< Value of the Internal High Speed oscillator for USB FS/SDMMC/RNG in Hz. + The real value my vary depending on manufacturing process variations.*/ +#endif /* HSI48_VALUE */ +#endif + +/** + * @brief Internal Low Speed oscillator (LSI) value. + */ +#if !defined (LSI_VALUE) +#define LSI_VALUE (32000UL) /*!< LSI Typical Value in Hz*/ +#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz +The real value may vary depending on the variations +in voltage and temperature.*/ +/** + * @brief External Low Speed oscillator (LSE) value. + * This value is used by the UART, RTC HAL module to compute the system frequency + */ +#if !defined (LSE_VALUE) +#define LSE_VALUE (32768UL) /*!< Value of the External oscillator in Hz*/ +#endif /* LSE_VALUE */ + +#if !defined (LSE_STARTUP_TIMEOUT) +#define LSE_STARTUP_TIMEOUT (5000UL) /*!< Time out for LSE start up, in ms */ +#endif /* LSE_STARTUP_TIMEOUT */ + +/** + * @brief External clock source for I2S1 peripheral + * This value is used by the RCC HAL module to compute the I2S1 clock source + * frequency. + */ +#if !defined (EXTERNAL_I2S1_CLOCK_VALUE) +#define EXTERNAL_I2S1_CLOCK_VALUE (48000UL) /*!< Value of the I2S1 External clock source in Hz*/ +#endif /* EXTERNAL_I2S1_CLOCK_VALUE */ + +#if defined(STM32G0C1xx) || defined(STM32G0B1xx) || defined(STM32G0B0xx) +/** + * @brief External clock source for I2S2 peripheral + * This value is used by the RCC HAL module to compute the I2S2 clock source + * frequency. + */ +#if !defined (EXTERNAL_I2S2_CLOCK_VALUE) + #define EXTERNAL_I2S2_CLOCK_VALUE 48000U /*!< Value of the I2S2 External clock source in Hz*/ +#endif /* EXTERNAL_I2S2_CLOCK_VALUE */ +#endif + +/* Tip: To avoid modifying this file each time you need to use different HSE, + === you can define the HSE value in your toolchain compiler preprocessor. */ + +/* ########################### System Configuration ######################### */ +/** + * @brief This is the HAL system configuration section + */ +#define VDD_VALUE (3300UL) /*!< Value of VDD in mv */ +#define TICK_INT_PRIORITY 0U /*!< tick interrupt priority */ +#define USE_RTOS 0U +#define PREFETCH_ENABLE 1U +#define INSTRUCTION_CACHE_ENABLE 1U + +/* ################## SPI peripheral configuration ########################## */ + +/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver +* Activated: CRC code is present inside driver +* Deactivated: CRC code cleaned from driver +*/ + +#define USE_SPI_CRC 0U + +/* ################## CRYP peripheral configuration ########################## */ + +#define USE_HAL_CRYP_SUSPEND_RESUME 1U + +/* ########################## Assert Selection ############################## */ +/** + * @brief Uncomment the line below to expanse the "assert_param" macro in the + * HAL drivers code + */ +/* #define USE_FULL_ASSERT 1U */ + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include modules header file + */ + +#ifdef HAL_RCC_MODULE_ENABLED +#include "stm32g0xx_hal_rcc.h" +#endif /* HAL_RCC_MODULE_ENABLED */ + +#ifdef HAL_GPIO_MODULE_ENABLED +#include "stm32g0xx_hal_gpio.h" +#endif /* HAL_GPIO_MODULE_ENABLED */ + +#ifdef HAL_DMA_MODULE_ENABLED +#include "stm32g0xx_hal_dma.h" +#endif /* HAL_DMA_MODULE_ENABLED */ + +#ifdef HAL_CORTEX_MODULE_ENABLED +#include "stm32g0xx_hal_cortex.h" +#endif /* HAL_CORTEX_MODULE_ENABLED */ + +#ifdef HAL_ADC_MODULE_ENABLED +#include "stm32g0xx_hal_adc.h" +#include "stm32g0xx_hal_adc_ex.h" +#endif /* HAL_ADC_MODULE_ENABLED */ + +#ifdef HAL_CEC_MODULE_ENABLED +#include "stm32g0xx_hal_cec.h" +#endif /* HAL_CEC_MODULE_ENABLED */ + +#ifdef HAL_COMP_MODULE_ENABLED +#include "stm32g0xx_hal_comp.h" +#endif /* HAL_COMP_MODULE_ENABLED */ + +#ifdef HAL_CRC_MODULE_ENABLED +#include "stm32g0xx_hal_crc.h" +#endif /* HAL_CRC_MODULE_ENABLED */ + +#ifdef HAL_CRYP_MODULE_ENABLED +#include "stm32g0xx_hal_cryp.h" +#endif /* HAL_CRYP_MODULE_ENABLED */ + +#ifdef HAL_DAC_MODULE_ENABLED +#include "stm32g0xx_hal_dac.h" +#endif /* HAL_DAC_MODULE_ENABLED */ + +#ifdef HAL_EXTI_MODULE_ENABLED +#include "stm32g0xx_hal_exti.h" +#endif /* HAL_EXTI_MODULE_ENABLED */ + +#ifdef HAL_FLASH_MODULE_ENABLED +#include "stm32g0xx_hal_flash.h" +#endif /* HAL_FLASH_MODULE_ENABLED */ + +#ifdef HAL_FDCAN_MODULE_ENABLED +#include "stm32g0xx_hal_fdcan.h" +#endif /* HAL_FDCAN_MODULE_ENABLED */ + +#ifdef HAL_HCD_MODULE_ENABLED +#include "stm32g0xx_hal_hcd.h" +#endif /* HAL_HCD_MODULE_ENABLED */ + +#ifdef HAL_I2C_MODULE_ENABLED +#include "stm32g0xx_hal_i2c.h" +#endif /* HAL_I2C_MODULE_ENABLED */ + +#ifdef HAL_I2S_MODULE_ENABLED +#include "stm32g0xx_hal_i2s.h" +#endif /* HAL_I2S_MODULE_ENABLED */ + +#ifdef HAL_IRDA_MODULE_ENABLED +#include "stm32g0xx_hal_irda.h" +#endif /* HAL_IRDA_MODULE_ENABLED */ + +#ifdef HAL_IWDG_MODULE_ENABLED +#include "stm32g0xx_hal_iwdg.h" +#endif /* HAL_IWDG_MODULE_ENABLED */ + +#ifdef HAL_LPTIM_MODULE_ENABLED +#include "stm32g0xx_hal_lptim.h" +#endif /* HAL_LPTIM_MODULE_ENABLED */ + +#ifdef HAL_PCD_MODULE_ENABLED +#include "stm32g0xx_hal_pcd.h" +#endif /* HAL_PCD_MODULE_ENABLED */ + +#ifdef HAL_PWR_MODULE_ENABLED +#include "stm32g0xx_hal_pwr.h" +#endif /* HAL_PWR_MODULE_ENABLED */ + +#ifdef HAL_RNG_MODULE_ENABLED +#include "stm32g0xx_hal_rng.h" +#endif /* HAL_RNG_MODULE_ENABLED */ + +#ifdef HAL_RTC_MODULE_ENABLED +#include "stm32g0xx_hal_rtc.h" +#endif /* HAL_RTC_MODULE_ENABLED */ + +#ifdef HAL_SMARTCARD_MODULE_ENABLED +#include "stm32g0xx_hal_smartcard.h" +#endif /* HAL_SMARTCARD_MODULE_ENABLED */ + +#ifdef HAL_SMBUS_MODULE_ENABLED +#include "stm32g0xx_hal_smbus.h" +#endif /* HAL_SMBUS_MODULE_ENABLED */ + +#ifdef HAL_SPI_MODULE_ENABLED +#include "stm32g0xx_hal_spi.h" +#endif /* HAL_SPI_MODULE_ENABLED */ + +#ifdef HAL_TIM_MODULE_ENABLED +#include "stm32g0xx_hal_tim.h" +#endif /* HAL_TIM_MODULE_ENABLED */ + +#ifdef HAL_UART_MODULE_ENABLED +#include "stm32g0xx_hal_uart.h" +#endif /* HAL_UART_MODULE_ENABLED */ + +#ifdef HAL_USART_MODULE_ENABLED +#include "stm32g0xx_hal_usart.h" +#endif /* HAL_USART_MODULE_ENABLED */ + +#ifdef HAL_WWDG_MODULE_ENABLED +#include "stm32g0xx_hal_wwdg.h" +#endif /* HAL_WWDG_MODULE_ENABLED */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT +/** + * @brief The assert_param macro is used for functions parameters check. + * @param expr If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ +#define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ +void assert_failed(uint8_t *file, uint32_t line); +#else +#define assert_param(expr) ((void)0U) +#endif /* USE_FULL_ASSERT */ + +#ifdef __cplusplus +} +#endif + +#endif /* STM32G0xx_HAL_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/STM32/Core/Inc/stm32g0xx_it.h b/STM32/Core/Inc/stm32g0xx_it.h new file mode 100644 index 0000000..35487f1 --- /dev/null +++ b/STM32/Core/Inc/stm32g0xx_it.h @@ -0,0 +1,69 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32g0xx_it.h + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2021 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32G0xx_IT_H +#define __STM32G0xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Exported types ------------------------------------------------------------*/ +/* USER CODE BEGIN ET */ + +/* USER CODE END ET */ + +/* Exported constants --------------------------------------------------------*/ +/* USER CODE BEGIN EC */ + +/* USER CODE END EC */ + +/* Exported macro ------------------------------------------------------------*/ +/* USER CODE BEGIN EM */ + +/* USER CODE END EM */ + +/* Exported functions prototypes ---------------------------------------------*/ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void DMA1_Channel1_IRQHandler(void); +void DMA1_Channel2_3_IRQHandler(void); +void ADC1_COMP_IRQHandler(void); +void I2C2_IRQHandler(void); +/* USER CODE BEGIN EFP */ + +/* USER CODE END EFP */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32G0xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/STM32/Core/Inc/types.h b/STM32/Core/Inc/types.h new file mode 100644 index 0000000..6cd7d85 --- /dev/null +++ b/STM32/Core/Inc/types.h @@ -0,0 +1,69 @@ +//useful things to include in code + +#ifndef TYPES_H +#define TYPES_H + +#ifndef WIN32 + // true/false defines + #define FALSE 0 + #define TRUE -1 +#endif + +// datatype definitions macros +typedef unsigned char u08; +typedef signed char s08; +typedef unsigned short u16; +typedef signed short s16; +typedef unsigned long u32; +typedef signed long s32; +typedef unsigned long long u64; +typedef signed long long s64; + +// #ifndef __AVR__ +#ifdef __MBED__ + // use inttypes.h instead + // C99 standard integer type definitions + typedef unsigned char uint8_t; + typedef signed char int8_t; + typedef unsigned short uint16_t; + typedef signed short int16_t; + /*typedef unsigned long uint32_t; + typedef signed long int32_t; + typedef unsigned long uint64_t; + typedef signed long int64_t; + */ +#endif + +// maximum value that can be held +// by unsigned data types (8,16,32bits) +#define MAX_U08 255 +#define MAX_U16 65535 +#define MAX_U32 4294967295 + +// maximum values that can be held +// by signed data types (8,16,32bits) +#define MIN_S08 -128 +#define MAX_S08 127 +#define MIN_S16 -32768 +#define MAX_S16 32767 +#define MIN_S32 -2147483648 +#define MAX_S32 2147483647 + +#ifndef WIN32 + // more type redefinitions + typedef unsigned char BOOL; + typedef unsigned char BYTE; + typedef unsigned int WORD; + typedef unsigned long DWORD; + + typedef unsigned char UCHAR; + typedef unsigned int UINT; + typedef unsigned short USHORT; + typedef unsigned long ULONG; + + typedef char CHAR; + typedef int INT; + typedef long LONG; +#endif + +#endif diff --git a/STM32/Core/Src/SX1278.c b/STM32/Core/Src/SX1278.c new file mode 100644 index 0000000..ebb2a54 --- /dev/null +++ b/STM32/Core/Src/SX1278.c @@ -0,0 +1,293 @@ +/** + * Author Wojciech Domski + * www: www.Domski.pl + * + * work based on DORJI.COM sample code and + * https://github.com/realspinner/SX1278_LoRa + */ + +#include +#include + +uint8_t SX1278_SPIRead(SX1278_t *module, uint8_t addr) { + uint8_t tmp; + SX1278_hw_SPICommand(module->hw, addr); + tmp = SX1278_hw_SPIReadByte(module->hw); + SX1278_hw_SetNSS(module->hw, 1); + return tmp; +} + +void SX1278_SPIWrite(SX1278_t *module, uint8_t addr, uint8_t cmd) { + SX1278_hw_SetNSS(module->hw, 0); + SX1278_hw_SPICommand(module->hw, addr | 0x80); + SX1278_hw_SPICommand(module->hw, cmd); + SX1278_hw_SetNSS(module->hw, 1); +} + +void SX1278_SPIBurstRead(SX1278_t *module, uint8_t addr, uint8_t *rxBuf, + uint8_t length) { + uint8_t i; + if (length <= 1) { + return; + } else { + SX1278_hw_SetNSS(module->hw, 0); + SX1278_hw_SPICommand(module->hw, addr); + for (i = 0; i < length; i++) { + *(rxBuf + i) = SX1278_hw_SPIReadByte(module->hw); + } + SX1278_hw_SetNSS(module->hw, 1); + } +} + +void SX1278_SPIBurstWrite(SX1278_t *module, uint8_t addr, uint8_t *txBuf, + uint8_t length) { + unsigned char i; + if (length <= 1) { + return; + } else { + SX1278_hw_SetNSS(module->hw, 0); + SX1278_hw_SPICommand(module->hw, addr | 0x80); + for (i = 0; i < length; i++) { + SX1278_hw_SPICommand(module->hw, *(txBuf + i)); + } + SX1278_hw_SetNSS(module->hw, 1); + } +} + +void SX1278_config(SX1278_t *module) { + SX1278_sleep(module); //Change modem mode Must in Sleep mode + SX1278_hw_DelayMs(15); + + SX1278_entryLoRa(module); + //SX1278_SPIWrite(module, 0x5904); //?? Change digital regulator form 1.6V to 1.47V: see errata note + + uint64_t freq = ((uint64_t) module->frequency << 19) / 32000000; + uint8_t freq_reg[3]; + freq_reg[0] = (uint8_t) (freq >> 16); + freq_reg[1] = (uint8_t) (freq >> 8); + freq_reg[2] = (uint8_t) (freq >> 0); + SX1278_SPIBurstWrite(module, LR_RegFrMsb, (uint8_t*) freq_reg, 3); //setting frequency parameter + + /* According to Semtech syncWord doesn't really work all that well. I'll set it anyway; for completeness' sake */ + SX1278_SPIWrite(module, RegSyncWord, 0xff); + + //setting base parameter + SX1278_SPIWrite(module, LR_RegPaConfig, SX1278_Power[module->power]); //Setting output power parameter + + SX1278_SPIWrite(module, LR_RegOcp, 0x0B); //RegOcp,Close Ocp + SX1278_SPIWrite(module, LR_RegLna, 0x23); //RegLNA,High & LNA Enable + if (SX1278_SpreadFactor[module->LoRa_SF] == 6) { //SFactor=6 + uint8_t tmp; + SX1278_SPIWrite(module, + LR_RegModemConfig1, + ((SX1278_LoRaBandwidth[module->LoRa_BW] << 4) + + (SX1278_CodingRate[module->LoRa_CR] << 1) + 0x01)); //Implicit Enable CRC Enable(0x02) & Error Coding rate 4/5(0x01), 4/6(0x02), 4/7(0x03), 4/8(0x04) + + SX1278_SPIWrite(module, + LR_RegModemConfig2, + ((SX1278_SpreadFactor[module->LoRa_SF] << 4) + + (SX1278_CRC_Sum[module->LoRa_CRC_sum] << 2) + 0x03)); + + tmp = SX1278_SPIRead(module, 0x31); + tmp &= 0xF8; + tmp |= 0x05; + SX1278_SPIWrite(module, 0x31, tmp); + SX1278_SPIWrite(module, 0x37, 0x0C); + } else { + SX1278_SPIWrite(module, + LR_RegModemConfig1, + ((SX1278_LoRaBandwidth[module->LoRa_BW] << 4) + + (SX1278_CodingRate[module->LoRa_CR] << 1) + 0x00)); //Explicit Enable CRC Enable(0x02) & Error Coding rate 4/5(0x01), 4/6(0x02), 4/7(0x03), 4/8(0x04) + + SX1278_SPIWrite(module, + LR_RegModemConfig2, + ((SX1278_SpreadFactor[module->LoRa_SF] << 4) + + (SX1278_CRC_Sum[module->LoRa_CRC_sum] << 2) + 0x00)); //SFactor & LNA gain set by the internal AGC loop + } + + SX1278_SPIWrite(module, LR_RegModemConfig3, 0x04); + SX1278_SPIWrite(module, LR_RegSymbTimeoutLsb, 0x08); //RegSymbTimeoutLsb Timeout = 0x3FF(Max) + SX1278_SPIWrite(module, LR_RegPreambleMsb, 0x00); //RegPreambleMsb + SX1278_SPIWrite(module, LR_RegPreambleLsb, 8); //RegPreambleLsb 8+4=12byte Preamble + SX1278_SPIWrite(module, REG_LR_DIOMAPPING2, 0x01); //RegDioMapping2 DIO5=00, DIO4=01 + module->readBytes = 0; + SX1278_standby(module); //Entry standby mode +} + +void SX1278_standby(SX1278_t *module) { + SX1278_SPIWrite(module, LR_RegOpMode, 0x09); + module->status = STANDBY; +} + +void SX1278_sleep(SX1278_t *module) { + SX1278_SPIWrite(module, LR_RegOpMode, 0x08); + module->status = SLEEP; +} + +void SX1278_entryLoRa(SX1278_t *module) { + SX1278_SPIWrite(module, LR_RegOpMode, 0x88); +} + +void SX1278_clearLoRaIrq(SX1278_t *module) { + SX1278_SPIWrite(module, LR_RegIrqFlags, 0xFF); +} + +int SX1278_LoRaEntryRx(SX1278_t *module, uint8_t length, uint32_t timeout) { + uint8_t addr; + + module->packetLength = length; + + SX1278_config(module); //Setting base parameter + SX1278_SPIWrite(module, REG_LR_PADAC, 0x84); //Normal and RX + SX1278_SPIWrite(module, LR_RegHopPeriod, 0xFF); //No FHSS + SX1278_SPIWrite(module, REG_LR_DIOMAPPING1, 0x01);//DIO=00,DIO1=00,DIO2=00, DIO3=01 + SX1278_SPIWrite(module, LR_RegIrqFlagsMask, 0x3F);//Open RxDone interrupt & Timeout + SX1278_clearLoRaIrq(module); + SX1278_SPIWrite(module, LR_RegPayloadLength, length);//Payload Length 21byte(this register must difine when the data long of one byte in SF is 6) + addr = SX1278_SPIRead(module, LR_RegFifoRxBaseAddr); //Read RxBaseAddr + SX1278_SPIWrite(module, LR_RegFifoAddrPtr, addr); //RxBaseAddr->FiFoAddrPtr + SX1278_SPIWrite(module, LR_RegOpMode, 0x8d); //Mode//Low Frequency Mode + //SX1278_SPIWrite(module, LR_RegOpMode,0x05); //Continuous Rx Mode //High Frequency Mode + module->readBytes = 0; + + while (1) { + if ((SX1278_SPIRead(module, LR_RegModemStat) & 0x04) == 0x04) { //Rx-on going RegModemStat + module->status = RX; + return 1; + } + if (--timeout == 0) { + SX1278_hw_Reset(module->hw); + SX1278_config(module); + return 0; + } + SX1278_hw_DelayMs(1); + } +} + +uint8_t SX1278_LoRaRxPacket(SX1278_t *module) { + unsigned char addr; + unsigned char packet_size; + + if (SX1278_hw_GetDIO0(module->hw)) { + memset(module->rxBuffer, 0x00, SX1278_MAX_PACKET); + + addr = SX1278_SPIRead(module, LR_RegFifoRxCurrentaddr); //last packet addr + SX1278_SPIWrite(module, LR_RegFifoAddrPtr, addr); //RxBaseAddr -> FiFoAddrPtr + + if (module->LoRa_SF == SX1278_LORA_SF_6) { //When SpreadFactor is six,will used Implicit Header mode(Excluding internal packet length) + packet_size = module->packetLength; + } else { + packet_size = SX1278_SPIRead(module, LR_RegRxNbBytes); //Number for received bytes + } + + SX1278_SPIBurstRead(module, 0x00, module->rxBuffer, packet_size); + module->readBytes = packet_size; + SX1278_clearLoRaIrq(module); + } + return module->readBytes; +} + +int SX1278_LoRaEntryTx(SX1278_t *module, uint8_t length, uint32_t timeout) { + uint8_t addr; + uint8_t temp; + + module->packetLength = length; + + SX1278_config(module); //setting base parameter + SX1278_SPIWrite(module, REG_LR_PADAC, 0x87); //Tx for 20dBm + SX1278_SPIWrite(module, LR_RegHopPeriod, 0x00); //RegHopPeriod NO FHSS + SX1278_SPIWrite(module, REG_LR_DIOMAPPING1, 0x41); //DIO0=01, DIO1=00,DIO2=00, DIO3=01 + SX1278_clearLoRaIrq(module); + SX1278_SPIWrite(module, LR_RegIrqFlagsMask, 0xF7); //Open TxDone interrupt + SX1278_SPIWrite(module, LR_RegPayloadLength, length); //RegPayloadLength 21byte + addr = SX1278_SPIRead(module, LR_RegFifoTxBaseAddr); //RegFiFoTxBaseAddr + SX1278_SPIWrite(module, LR_RegFifoAddrPtr, addr); //RegFifoAddrPtr + + while (1) { + temp = SX1278_SPIRead(module, LR_RegPayloadLength); + if (temp == length) { + module->status = TX; + return 1; + } + + if (--timeout == 0) { + SX1278_hw_Reset(module->hw); + SX1278_config(module); + return 0; + } + } +} + +int SX1278_LoRaTxPacket(SX1278_t *module, uint8_t *txBuffer, uint8_t length, + uint32_t timeout) { + SX1278_SPIBurstWrite(module, 0x00, txBuffer, length); + SX1278_SPIWrite(module, LR_RegOpMode, 0x8b); //Tx Mode + while (1) { + if (SX1278_hw_GetDIO0(module->hw)) { //if(Get_NIRQ()) //Packet send over + SX1278_SPIRead(module, LR_RegIrqFlags); + SX1278_clearLoRaIrq(module); //Clear irq + SX1278_standby(module); //Entry Standby mode + return 1; + } + + if (--timeout == 0) { + SX1278_hw_Reset(module->hw); + SX1278_config(module); + return 0; + } + SX1278_hw_DelayMs(1); + } +} + +void SX1278_init(SX1278_t *module, uint64_t frequency, uint8_t power, + uint8_t LoRa_SF, uint8_t LoRa_BW, uint8_t LoRa_CR, + uint8_t LoRa_CRC_sum, uint8_t packetLength) { + SX1278_hw_init(module->hw); + module->frequency = frequency; + module->power = power; + module->LoRa_SF = LoRa_SF; + module->LoRa_BW = LoRa_BW; + module->LoRa_CR = LoRa_CR; + module->LoRa_CRC_sum = LoRa_CRC_sum; + module->packetLength = packetLength; + SX1278_config(module); +} + +int SX1278_transmit(SX1278_t *module, uint8_t *txBuf, uint8_t length, + uint32_t timeout) { + if (SX1278_LoRaEntryTx(module, length, timeout)) { + return SX1278_LoRaTxPacket(module, txBuf, length, timeout); + } + return 0; +} + +int SX1278_receive(SX1278_t *module, uint8_t length, uint32_t timeout) { + return SX1278_LoRaEntryRx(module, length, timeout); +} + +uint8_t SX1278_available(SX1278_t *module) { + return SX1278_LoRaRxPacket(module); +} + +uint8_t SX1278_read(SX1278_t *module, uint8_t *rxBuf, uint8_t length) { + if (length != module->readBytes) + length = module->readBytes; + memcpy(rxBuf, module->rxBuffer, length); + rxBuf[length] = '\0'; + module->readBytes = 0; + return length; +} + +uint8_t SX1278_RSSI_LoRa(SX1278_t *module) { + uint32_t temp = 10; + temp = SX1278_SPIRead(module, LR_RegRssiValue); //Read RegRssiValue, Rssi value + temp = temp + 127 - 137; //127:Max RSSI, 137:RSSI offset + return (uint8_t) temp; +} + +uint8_t SX1278_RSSI(SX1278_t *module) { + uint8_t temp = 0xff; + temp = SX1278_SPIRead(module, RegRssiValue); + temp = 127 - (temp >> 1); //127:Max RSSI + return temp; +} diff --git a/STM32/Core/Src/SX1278_hw.c b/STM32/Core/Src/SX1278_hw.c new file mode 100644 index 0000000..738079b --- /dev/null +++ b/STM32/Core/Src/SX1278_hw.c @@ -0,0 +1,60 @@ +/** + * Author Wojciech Domski + * www: www.Domski.pl + * + * Hardware layer for SX1278 LoRa module + */ + +#include +#include +#include "main.h" +//#include "gpio.h" +//#include "spi.h" + +__weak void SX1278_hw_init(SX1278_hw_t *hw) { + SX1278_hw_SetNSS(hw, 1); + HAL_GPIO_WritePin(hw->reset.port, hw->reset.pin, GPIO_PIN_SET); +} + +__weak void SX1278_hw_SetNSS(SX1278_hw_t *hw, int value) { + HAL_GPIO_WritePin(hw->nss.port, hw->nss.pin, + (value == 1) ? GPIO_PIN_SET : GPIO_PIN_RESET); +} + +__weak void SX1278_hw_Reset(SX1278_hw_t *hw) { + SX1278_hw_SetNSS(hw, 1); + HAL_GPIO_WritePin(hw->reset.port, hw->reset.pin, GPIO_PIN_RESET); + + SX1278_hw_DelayMs(1); + + HAL_GPIO_WritePin(hw->reset.port, hw->reset.pin, GPIO_PIN_SET); + + SX1278_hw_DelayMs(100); +} + +__weak void SX1278_hw_SPICommand(SX1278_hw_t *hw, uint8_t cmd) { + SX1278_hw_SetNSS(hw, 0); + HAL_SPI_Transmit(hw->spi, &cmd, 1, 1000); + while (HAL_SPI_GetState(hw->spi) != HAL_SPI_STATE_READY) + ; +} + +__weak uint8_t SX1278_hw_SPIReadByte(SX1278_hw_t *hw) { + uint8_t txByte = 0x00; + uint8_t rxByte = 0x00; + + SX1278_hw_SetNSS(hw, 0); + HAL_SPI_TransmitReceive(hw->spi, &txByte, &rxByte, 1, 1000); + while (HAL_SPI_GetState(hw->spi) != HAL_SPI_STATE_READY) + ; + return rxByte; +} + +__weak void SX1278_hw_DelayMs(uint32_t msec) { + HAL_Delay(msec); +} + +__weak int SX1278_hw_GetDIO0(SX1278_hw_t *hw) { + return (HAL_GPIO_ReadPin(hw->dio0.port, hw->dio0.pin) == GPIO_PIN_SET); +} + diff --git a/STM32/Core/Src/arduinoFFT.cpp b/STM32/Core/Src/arduinoFFT.cpp new file mode 100644 index 0000000..69fa840 --- /dev/null +++ b/STM32/Core/Src/arduinoFFT.cpp @@ -0,0 +1,280 @@ +/* + + FFT libray + Copyright (C) 2010 Didier Longueville + Copyright (C) 2014 Enrique Condes + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +*/ + +#include + +arduinoFFT::arduinoFFT(double *vReal, double *vImag, uint16_t samples, double samplingFrequency) +{// Constructor + this->_vReal = vReal; + this->_vImag = vImag; + this->_samples = samples; + this->_samplingFrequency = samplingFrequency; + this->_power = Exponent(samples); +} + +arduinoFFT::~arduinoFFT(void) +{ +// Destructor +} + +uint8_t arduinoFFT::Revision(void) +{ + return(FFT_LIB_REV); +} + +void arduinoFFT::Compute(uint8_t dir) +{// Computes in-place complex-to-complex FFT / + // Reverse bits / + uint16_t j = 0; + for (uint16_t i = 0; i < (this->_samples - 1); i++) { + if (i < j) { + Swap(&this->_vReal[i], &this->_vReal[j]); + if(dir==FFT_REVERSE) + Swap(&this->_vImag[i], &this->_vImag[j]); + } + uint16_t k = (this->_samples >> 1); + while (k <= j) { + j -= k; + k >>= 1; + } + j += k; + } + // Compute the FFT / +#ifdef __AVR__ + uint8_t index = 0; +#endif + double c1 = -1.0; + double c2 = 0.0; + uint16_t l2 = 1; + for (uint8_t l = 0; (l < this->_power); l++) { + uint16_t l1 = l2; + l2 <<= 1; + double u1 = 1.0; + double u2 = 0.0; + for (j = 0; j < l1; j++) { + for (uint16_t i = j; i < this->_samples; i += l2) { + uint16_t i1 = i + l1; + double t1 = u1 * this->_vReal[i1] - u2 * this->_vImag[i1]; + double t2 = u1 * this->_vImag[i1] + u2 * this->_vReal[i1]; + this->_vReal[i1] = this->_vReal[i] - t1; + this->_vImag[i1] = this->_vImag[i] - t2; + this->_vReal[i] += t1; + this->_vImag[i] += t2; + } + double z = ((u1 * c1) - (u2 * c2)); + u2 = ((u1 * c2) + (u2 * c1)); + u1 = z; + } +#ifdef __AVR__ + c2 = pgm_read_float_near(&(_c2[index])); + c1 = pgm_read_float_near(&(_c1[index])); + index++; +#else + c2 = sqrt((1.0 - c1) / 2.0); + c1 = sqrt((1.0 + c1) / 2.0); +#endif + if (dir == FFT_FORWARD) { + c2 = -c2; + } + } + // Scaling for reverse transform / + if (dir != FFT_FORWARD) { + for (uint16_t i = 0; i < this->_samples; i++) { + this->_vReal[i] /= this->_samples; + this->_vImag[i] /= this->_samples; + } + } +} + +void arduinoFFT::ComplexToMagnitude() +{ // vM is half the size of vReal and vImag + for (uint16_t i = 0; i < this->_samples; i++) { + this->_vReal[i] = sqrt(sq(this->_vReal[i]) + sq(this->_vImag[i])); + } +} + +void arduinoFFT::DCRemoval() +{ + // calculate the mean of vData + double mean = 0; + for (uint16_t i = 0; i < this->_samples; i++) + { + mean += this->_vReal[i]; + } + mean /= this->_samples; + // Subtract the mean from vData + for (uint16_t i = 0; i < this->_samples; i++) + { + this->_vReal[i] -= mean; + } +} + +void arduinoFFT::Windowing(uint8_t windowType, uint8_t dir) +{// Weighing factors are computed once before multiple use of FFT +// The weighing function is symetric; half the weighs are recorded + double samplesMinusOne = (double(this->_samples) - 1.0); + for (uint16_t i = 0; i < (this->_samples >> 1); i++) { + double indexMinusOne = double(i); + double ratio = (indexMinusOne / samplesMinusOne); + double weighingFactor = 1.0; + // TODO Make this only calculate once + // Compute and record weighting factor + switch (windowType) { + case FFT_WIN_TYP_RECTANGLE: // rectangle (box car) + weighingFactor = 1.0; + break; + case FFT_WIN_TYP_HAMMING: // hamming + weighingFactor = 0.54 - (0.46 * cos(twoPi * ratio)); + //weighingFactor = 0.080000000000000016; + break; + case FFT_WIN_TYP_HANN: // hann + weighingFactor = 0.54 * (1.0 - cos(twoPi * ratio)); + break; + case FFT_WIN_TYP_TRIANGLE: // triangle (Bartlett) + #if defined(ESP8266) || defined(ESP32) + weighingFactor = 1.0 - ((2.0 * fabs(indexMinusOne - (samplesMinusOne / 2.0))) / samplesMinusOne); + #else + weighingFactor = 1.0 - ((2.0 * abs(indexMinusOne - (samplesMinusOne / 2.0))) / samplesMinusOne); + #endif + break; + case FFT_WIN_TYP_NUTTALL: // nuttall + weighingFactor = 0.355768 - (0.487396 * (cos(twoPi * ratio))) + (0.144232 * (cos(fourPi * ratio))) - (0.012604 * (cos(sixPi * ratio))); + break; + case FFT_WIN_TYP_BLACKMAN: // blackman + weighingFactor = 0.42323 - (0.49755 * (cos(twoPi * ratio))) + (0.07922 * (cos(fourPi * ratio))); + break; + case FFT_WIN_TYP_BLACKMAN_NUTTALL: // blackman nuttall + weighingFactor = 0.3635819 - (0.4891775 * (cos(twoPi * ratio))) + (0.1365995 * (cos(fourPi * ratio))) - (0.0106411 * (cos(sixPi * ratio))); + break; + case FFT_WIN_TYP_BLACKMAN_HARRIS: // blackman harris + weighingFactor = 0.35875 - (0.48829 * (cos(twoPi * ratio))) + (0.14128 * (cos(fourPi * ratio))) - (0.01168 * (cos(sixPi * ratio))); + break; + case FFT_WIN_TYP_FLT_TOP: // flat top + weighingFactor = 0.2810639 - (0.5208972 * cos(twoPi * ratio)) + (0.1980399 * cos(fourPi * ratio)); + break; + case FFT_WIN_TYP_WELCH: // welch + weighingFactor = 1.0 - sq((indexMinusOne - samplesMinusOne / 2.0) / (samplesMinusOne / 2.0)); + break; + } + if (dir == FFT_FORWARD) { + this->_vReal[i] *= weighingFactor; + this->_vReal[this->_samples - (i + 1)] *= weighingFactor; + } + else { + this->_vReal[i] /= weighingFactor; + this->_vReal[this->_samples - (i + 1)] /= weighingFactor; + } + } +} + +double arduinoFFT::MajorPeak() +{ + double maxY = 0; + uint16_t IndexOfMaxY = 0; + //If sampling_frequency = 2 * max_frequency in signal, + //value would be stored at position samples/2 + for (uint16_t i = 1; i < ((this->_samples >> 1) + 1); i++) { + if ((this->_vReal[i-1] < this->_vReal[i]) && (this->_vReal[i] > this->_vReal[i+1])) { + if (this->_vReal[i] > maxY) { + maxY = this->_vReal[i]; + IndexOfMaxY = i; + } + } + } + double delta = 0.5 * ((this->_vReal[IndexOfMaxY-1] - this->_vReal[IndexOfMaxY+1]) / (this->_vReal[IndexOfMaxY-1] - (2.0 * this->_vReal[IndexOfMaxY]) + this->_vReal[IndexOfMaxY+1])); + double interpolatedX = ((IndexOfMaxY + delta) * this->_samplingFrequency) / (this->_samples-1); + if(IndexOfMaxY==(this->_samples >> 1)) //To improve calculation on edge values + interpolatedX = ((IndexOfMaxY + delta) * this->_samplingFrequency) / (this->_samples); + // returned value: interpolated frequency peak apex + return(interpolatedX); +} + +void arduinoFFT::MajorPeakAndMagnitude(double *freq_interpolated, double *mag_interpolated) +// Added by me +{ + double maxY = 0; + uint16_t IndexOfMaxY = 0; + //If sampling_frequency = 2 * max_frequency in signal, + //value would be stored at position samples/2 + for (uint16_t i = 1; i < ((this->_samples >> 1) + 1); i++) { + if ((this->_vReal[i-1] < this->_vReal[i]) && (this->_vReal[i] > this->_vReal[i+1])) { + if (this->_vReal[i] > maxY) { + maxY = this->_vReal[i]; + IndexOfMaxY = i; + } + } + } + double delta = 0.5 * ((this->_vReal[IndexOfMaxY-1] - this->_vReal[IndexOfMaxY+1]) / (this->_vReal[IndexOfMaxY-1] - (2.0 * this->_vReal[IndexOfMaxY]) + this->_vReal[IndexOfMaxY+1])); + *freq_interpolated = ((IndexOfMaxY + delta) * this->_samplingFrequency) / (this->_samples-1); + if(IndexOfMaxY==(this->_samples >> 1)) //To improve calculation on edge values + *freq_interpolated = ((IndexOfMaxY + delta) * this->_samplingFrequency) / (this->_samples); + + if (delta <= 0) { // We can add the equals check here as well as a delta of zero has no effect. + *mag_interpolated = ( this->_vReal[IndexOfMaxY] + (delta * (this->_vReal[IndexOfMaxY] - this->_vReal[IndexOfMaxY-1])) ); + } else if (delta > 0) { + *mag_interpolated = ( this->_vReal[IndexOfMaxY] - (delta * (this->_vReal[IndexOfMaxY] - this->_vReal[IndexOfMaxY+1])) ); + } +} + +void arduinoFFT::MajorPeak(double *f, double *v) +{ + double maxY = 0; + uint16_t IndexOfMaxY = 0; + //If sampling_frequency = 2 * max_frequency in signal, + //value would be stored at position samples/2 + for (uint16_t i = 1; i < ((this->_samples >> 1) + 1); i++) { + if ((this->_vReal[i - 1] < this->_vReal[i]) && (this->_vReal[i] > this->_vReal[i + 1])) { + if (this->_vReal[i] > maxY) { + maxY = this->_vReal[i]; + IndexOfMaxY = i; + } + } + } + double delta = 0.5 * ((this->_vReal[IndexOfMaxY - 1] - this->_vReal[IndexOfMaxY + 1]) / (this->_vReal[IndexOfMaxY - 1] - (2.0 * this->_vReal[IndexOfMaxY]) + this->_vReal[IndexOfMaxY + 1])); + double interpolatedX = ((IndexOfMaxY + delta) * this->_samplingFrequency) / (this->_samples - 1); + if (IndexOfMaxY == (this->_samples >> 1)) //To improve calculation on edge values + interpolatedX = ((IndexOfMaxY + delta) * this->_samplingFrequency) / (this->_samples); + // returned value: interpolated frequency peak apex + *f = interpolatedX; + #if defined(ESP8266) || defined(ESP32) + *v = fabs(this->_vReal[IndexOfMaxY - 1] - (2.0 * this->_vReal[IndexOfMaxY]) + this->_vReal[IndexOfMaxY + 1]); + #else + *v = abs(this->_vReal[IndexOfMaxY - 1] - (2.0 * this->_vReal[IndexOfMaxY]) + this->_vReal[IndexOfMaxY + 1]); + #endif +} + +uint8_t arduinoFFT::Exponent(uint16_t value) +{ + #warning("This method may not be accessible on future revisions.") + // Calculates the base 2 logarithm of a value + uint8_t result = 0; + while (((value >> result) & 1) != 1) result++; + return(result); +} + +// Private functions + +void arduinoFFT::Swap(double *x, double *y) +{ + double temp = *x; + *x = *y; + *y = temp; +} diff --git a/STM32/Core/Src/main.cpp b/STM32/Core/Src/main.cpp new file mode 100644 index 0000000..8abe85d --- /dev/null +++ b/STM32/Core/Src/main.cpp @@ -0,0 +1,1135 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : main.c + * @brief : Main program body + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2021 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ +/* USER CODE END Header */ +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ +#include +#include +#include +#include + +#include +#include +#include + + +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN PTD */ + +/* USER CODE END PTD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN PD */ + +#define VERBOSE // print debug messages via USART +#define VERY_VERBOSE +#define I2C_RX 0 +#define I2C_TX 1 +#define DEVICE_COUNT 5 + +// FFT things +#define START_BIN 3 +#define FFT_BINS 512 // Actually usable bins after FFT +#define SAMPLE_SIZE (FFT_BINS * 2) +#define BUFSIZE (SAMPLE_SIZE * 4) + +// Audio stuff +#define MIC_OFFSET_DB 2 +#define MIC_REF_DB 94.0 +#define MIC_SENSITIVITY -26 +#define MIC_SNR 65 +#define MIC_BITS 16 +#define MIC_OVERLOAD 120 +#define MIC_NOISE_FLOOR (MIC_REF_DB - MIC_SNR) + +// Power stuff +#define DROPOUT_VOLTAGE (3.3 + 0.25) // For a load of approx. 50 mA and LP2950ACZ-3.3G +#define BAT_VOLTAGE_CHECK_INTERVAL 60000 // ms +#define BAT_VOLTAGE_CHECK_TOLERANCE 500 // ms +#define BAT_FIELD_SIZE 1 +#define BAT_LOW_THRESHOLD DROPOUT_VOLTAGE - 0.4 // This seems odd but below the drop out voltage, MCU and LoRa will still work +#define BAT_MEASUREMENT_CYCLES 10 // Measure over 10 iterations to avoid one-offs. + +// LoRa stuff +#define LORA_SYNC_WORD 0x2AF69A00 +#define LORA_TIMEOUT 200 +#define LORA_HEADER_LENGTH sizeof(LORA_SYNC_WORD) / 2 // divide by two because we use a uint16_t (2 byte) buffer + // just fine (min. 1.8V) so we can go a bit lower for longer battery life. +#define LORA_BEACON_SIZE 10 + + +/* USER CODE END PD */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN PM */ + +/* USER CODE END PM */ + +/* Private variables ---------------------------------------------------------*/ +ADC_HandleTypeDef hadc1; +DMA_HandleTypeDef hdma_adc1; + +I2C_HandleTypeDef hi2c2; + +I2S_HandleTypeDef hi2s1; +DMA_HandleTypeDef hdma_spi1_rx; + +SPI_HandleTypeDef hspi2; + +TIM_HandleTypeDef htim2; + +UART_HandleTypeDef huart4; + +/* USER CODE BEGIN PV */ +// TODO CHECK +constexpr double MIC_REF_AMPL = pow(10, double(MIC_SENSITIVITY)/20) * (pow(2, (MIC_BITS - 1)) - 1); + +char msg[64]; +uint8_t ret; +uint16_t i2s_dma_buf[BUFSIZE]; +uint32_t adc_buf[3]; +double vReal[SAMPLE_SIZE]; +double vImag[SAMPLE_SIZE]; + +volatile bool adc_ready; + +volatile uint32_t adc_avg; +volatile float bat_voltage_avg; + +bool got_i2c_setup_message; +volatile bool got_beacon; +volatile bool flip_buffer; +volatile bool tx_due; +volatile uint8_t adc_counter; +volatile uint8_t tick_count = LORA_HEADER_LENGTH; +uint8_t verbosity; + +uint8_t i2c_tx_counter; +uint16_t lora_beacon_rx_buffer[5]; +uint16_t i2c_tx_buffer[1024]; +uint16_t first_sync_message[5]; + +// Capitalized means "const" but we cannot make them real const as that doesn't work with the protcol. +uint8_t PACKET_LENGTH; +uint8_t LORA_PACKET_SIZE; +uint16_t TX_OFFSET; +uint16_t TICK_COUNT; +uint16_t measured_values1[63]; // TODO +uint16_t measured_values2[63]; +uint32_t TICK_DURATION_US; + + +volatile uint8_t device_id; +char i2c_rx_buffer[4]; + + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +void SystemClock_Config(void); +static void MX_GPIO_Init(void); +static void MX_DMA_Init(void); +static void MX_ADC1_Init(void); +static void MX_I2S1_Init(void); +static void MX_SPI2_Init(void); +static void MX_I2C2_Init(void); +static void MX_USART4_UART_Init(void); +static void MX_TIM2_Init(void); +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* Private user code ---------------------------------------------------------*/ +/* USER CODE BEGIN 0 */ +SX1278_hw_t SX1278_hw; +SX1278_t SX1278; + + +void PrintVector(double *vData, uint16_t bufferSize, uint8_t scaleType) { + for (uint16_t i = 0; i < bufferSize; i++) // First two bins are not meaningful. + { + char buf[10]; + char buf2[bufferSize]; + double abscissa; + /* Print abscissa value */ + switch (scaleType) + { + case 0: + abscissa = (i * 1.0); + break; + case 1: + abscissa = ((i * 1.0) / hi2s1.Init.AudioFreq); + break; + case 2: + abscissa = ((i * 1.0 * hi2s1.Init.AudioFreq) / SAMPLE_SIZE); + break; + + default: + break; + } + + sprintf(buf, "%.4f", abscissa); + HAL_UART_Transmit(&huart4, (uint8_t *) buf, strlen(buf), 100); + + if(scaleType==2) { + HAL_UART_Transmit(&huart4, (uint8_t *) " Hz", 3, 100); + } + + HAL_UART_Transmit(&huart4, (uint8_t *) " ", 1, 100); + + sprintf(buf2, "%.4f, %.4f dB\n", vData[i], (20 * log10(vData[i]))); + HAL_UART_Transmit(&huart4, (uint8_t *) buf2, strlen(buf2), 100); + } + HAL_UART_Transmit(&huart4, (uint8_t *) "\n", 1, 100); +} + + +/** + * Helper function to split the LoRa sync word from the device ID in a LoRa message. + */ + +_Bool IsOwnLoraPacket(uint16_t *buf) { + if (buf[0] == (LORA_SYNC_WORD >> 16) && (buf[1] & 0xff00) == (uint16_t) (LORA_SYNC_WORD) ) { + return 1; + } + + return 0; +} + +uint8_t GetDeviceId(uint16_t *buf) { + return (buf[1] & 0x00ff); +} + + +/* + * Do FFT on the filled arrays, calculate RMS and return the A-weighted dB value. + */ +uint16_t GetDBA(double *vReal, double *vImag) { + arduinoFFT fft = arduinoFFT(vReal, vImag, SAMPLE_SIZE, hi2s1.Init.AudioFreq); + fft.Windowing(FFT_WIN_TYP_HANN, FFT_FORWARD); + fft.Compute(FFT_FORWARD); + fft.ComplexToMagnitude(); + + double squared_sum = 0; + for (uint16_t i = START_BIN; i < FFT_BINS; i++) { + squared_sum += (pow(vReal[i], 2) * CORRECTION_VALUES[i]); // Parseval's Theorem + } + + double rms = 1.63 * sqrt(2.0 * squared_sum / (SAMPLE_SIZE * SAMPLE_SIZE)); // https://de.mathworks.com/matlabcentral/answers/372516-calculate-windowing-correction-factor + double dbA = MIC_OFFSET_DB + MIC_REF_DB + 20 * log10(rms / MIC_REF_AMPL); + + // We can't measure below that as the noise from the microphone is louder than the ambient sound itself. + if (dbA <= MIC_NOISE_FLOOR) { + dbA = MIC_NOISE_FLOOR; + } else if (dbA >= MIC_OVERLOAD) { + dbA = MIC_OVERLOAD; + } + + return (dbA * 10); // Make a fixed point from the double. Give us one decimal point of precision which is plenty. +} + + +/* USER CODE END 0 */ + +/** + * @brief The application entry point. + * @retval int + */ +int main(void) +{ + /* USER CODE BEGIN 1 */ + + /* USER CODE END 1 */ + + /* MCU Configuration--------------------------------------------------------*/ + + /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ + HAL_Init(); + + /* USER CODE BEGIN Init */ + + /* USER CODE END Init */ + + /* Configure the system clock */ + SystemClock_Config(); + + /* USER CODE BEGIN SysInit */ + + /* USER CODE END SysInit */ + + /* Initialize all configured peripherals */ + MX_GPIO_Init(); + MX_DMA_Init(); + MX_ADC1_Init(); + MX_I2S1_Init(); + MX_SPI2_Init(); + MX_I2C2_Init(); + MX_USART4_UART_Init(); + MX_TIM2_Init(); + /* USER CODE BEGIN 2 */ + +#ifdef VERBOSE + verbosity = 1; +#endif + +#ifdef VERY_VERBOSE + verbosity = 2; +#endif + + //SX1278_hw.dio0.port = DIO0_GPIO_Port; + //SX1278_hw.dio0.pin = DIO0_; + SX1278_hw.dio0.port = GPIOB; + SX1278_hw.dio0.pin = GPIO_PIN_0; + SX1278_hw.nss.port = NSS_GPIO_Port; + SX1278_hw.nss.pin = NSS_Pin; + SX1278_hw.reset.port = RESET_GPIO_Port; + SX1278_hw.reset.pin = RESET_Pin; + SX1278_hw.spi = &hspi2; + SX1278.hw = &SX1278_hw; + + SX1278_init(&SX1278, 866000000, SX1278_POWER_14DBM, SX1278_LORA_SF_8, SX1278_LORA_BW_250KHZ, SX1278_LORA_CR_4_5, SX1278_LORA_CRC_EN, 60); + + HAL_I2S_Receive_DMA(&hi2s1, (uint16_t *) i2s_dma_buf, BUFSIZE/2); + + // This would work just fine without DMA but multiple channels don't work in polling mode. + HAL_TIM_Base_Start(&htim2); + HAL_ADC_Start_DMA(&hadc1, adc_buf, hadc1.Init.NbrOfConversion); + while (!adc_ready); + adc_ready = 0; + HAL_ADC_Stop_DMA(&hadc1); + uint32_t adc_value = adc_buf[0]; + + if (verbosity >= 2) { + sprintf(msg, "%lu %lu\n", adc_buf[0], adc_buf[1]); + HAL_UART_Transmit(&huart4, (uint8_t *) msg, strlen(msg), 100); + } + + if (adc_value <= 400) { // LOW + device_id = 4; + } else if (adc_value >= 600 && adc_value <= 1400) { // 3V3 -- 10k -- 3k3 -- GND + device_id = 1; + } else if (adc_value >= 1600 && adc_value <= 2400) { // 3V3 -- 10k -- 10k -- GND + device_id = 2; + } else if (adc_value >= 2600 && adc_value <= 3400) { // 3V3 -- 10k -- 33k -- GND + device_id = 3; + } else if (adc_value >= 3600) { // HIGH + device_id = 0; // Master + HAL_I2C_EnableListen_IT(&hi2c2); + } + + if (device_id == 0) { + while (!got_i2c_setup_message) { HAL_UART_Transmit(&huart4, (uint8_t *) "wait for i2c\n", 13, 100); } + got_i2c_setup_message = 0; + + TICK_COUNT = i2c_rx_buffer[1]; + TICK_DURATION_US = i2c_rx_buffer[2] * 1000000; // Seconds to µs. + TX_OFFSET = i2c_rx_buffer[3]; // In ticks + PACKET_LENGTH = (TICK_COUNT + LORA_HEADER_LENGTH + BAT_FIELD_SIZE); + LORA_PACKET_SIZE = PACKET_LENGTH * 2; + + + first_sync_message[0] = (uint16_t) (LORA_SYNC_WORD >> 16); + first_sync_message[1] = (uint16_t) (LORA_SYNC_WORD | device_id); + first_sync_message[2] = TICK_COUNT; // Tick count + first_sync_message[3] = i2c_rx_buffer[2]; // Tick duration + first_sync_message[4] = TX_OFFSET; // Tx offset + + if (verbosity >= 1) { + sprintf(msg, "tc: %u, td: %u, tx_offs: %u\n", first_sync_message[2], i2c_rx_buffer[2], first_sync_message[4]); + HAL_UART_Transmit(&huart4, (uint8_t *) msg, strlen(msg), 100); + } + + } + + uint16_t lora_rx_buffer[PACKET_LENGTH]; + if (verbosity >= 1) { + sprintf(msg, "My device ID is %u\n", device_id); + HAL_UART_Transmit(&huart4, (uint8_t *) msg, strlen(msg), 100); + } + + + /* USER CODE END 2 */ + + /* Infinite loop */ + /* USER CODE BEGIN WHILE */ + while (1) + { + + // Master + if (device_id == 0) { + + __HAL_TIM_SET_COUNTER(&htim2, 0); + + + // Send a sync beacon at the start of every "period". + if (tick_count == 2) { + SX1278_LoRaEntryTx(&SX1278, LORA_BEACON_SIZE, LORA_TIMEOUT); + + HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET); + + SX1278_LoRaTxPacket(&SX1278, (uint8_t *) &first_sync_message, LORA_BEACON_SIZE, LORA_TIMEOUT); + //SX1278_LoRaTxPacket(&SX1278, (uint8_t *) &measured_values1, 4, LORA_TIMEOUT); + HAL_UART_Transmit(&huart4, (uint8_t *) first_sync_message, LORA_BEACON_SIZE, 100); + + if (verbosity >= 1) { + HAL_UART_Transmit(&huart4, (uint8_t *) "\nsent beacon\n", 13, 100); + } else if (verbosity >= 2) { + HAL_UART_Transmit(&huart4, (uint8_t *) first_sync_message, 10, 100); + } + HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); + + // Change back to Rx again. + SX1278_LoRaEntryRx(&SX1278, LORA_PACKET_SIZE, LORA_TIMEOUT); + } + + for (volatile uint16_t i = 0; i < BUFSIZE; i += 4) { + vReal[i/4] = abs(65535 - i2s_dma_buf[i]); + vImag[i/4] = 0; + } + + // For the master, one buffer is enough. No need to flip. + measured_values1[tick_count] = GetDBA(vReal, vImag); + if (verbosity >= 2) { + sprintf(msg, "fill array %u\n", tick_count); + HAL_UART_Transmit(&huart4, (uint8_t *) msg, strlen(msg), 100); + } + + //sprintf(msg, "array[%u]: %u\n", tick_count, i2c_tx_buffer[tick_count]); + //HAL_UART_Transmit(&huart4, (uint8_t *) msg, strlen(msg), 100); + + tick_count++; + + if (tick_count == PACKET_LENGTH - BAT_FIELD_SIZE) { // Last measurement, now wait for I²C + bool debug_sent = 0; + while (!got_i2c_setup_message) { + if (verbosity >= 1 && !debug_sent) { + HAL_UART_Transmit(&huart4, (uint8_t *) "Waiting for I2C\n", 16, 100); + debug_sent = 1; + } + } + + if (verbosity >= 1) { + HAL_UART_Transmit(&huart4, (uint8_t *) "Got I2C sync\n", 13, 100); + } + + memcpy(&i2c_tx_buffer[0], &measured_values1, LORA_PACKET_SIZE); + + TICK_COUNT = i2c_rx_buffer[1]; + TICK_DURATION_US = i2c_rx_buffer[2] * 1000000; // Seconds to µs. + TX_OFFSET = i2c_rx_buffer[3]; // In ticks + PACKET_LENGTH = (TICK_COUNT + LORA_HEADER_LENGTH + BAT_FIELD_SIZE); + LORA_PACKET_SIZE = PACKET_LENGTH * 2; + + first_sync_message[0] = (uint16_t) (LORA_SYNC_WORD >> 16); + first_sync_message[1] = (uint16_t) (LORA_SYNC_WORD | device_id); + first_sync_message[2] = TICK_COUNT; // Tick count + first_sync_message[3] = i2c_rx_buffer[2]; // Tick duration + first_sync_message[4] = TX_OFFSET; // Tx offset + + got_i2c_setup_message = 0; + tick_count = LORA_HEADER_LENGTH; + sprintf(msg, "tickcountreset %u, gotmsg %u\n", tick_count, got_i2c_setup_message); + HAL_UART_Transmit(&huart4, (uint8_t *) msg, strlen(msg), 100); + + } else { + while (__HAL_TIM_GET_COUNTER(&htim2) < TICK_DURATION_US) { + ret = SX1278_LoRaRxPacket(&SX1278); + + // Only accept packages within our expected length to avoid buffer overflows. + if (ret > 0 && ret <= LORA_PACKET_SIZE) { + memset(lora_rx_buffer, 0, sizeof lora_rx_buffer); + SX1278_read(&SX1278, (uint8_t*) lora_rx_buffer, LORA_PACKET_SIZE); + + if (IsOwnLoraPacket(lora_rx_buffer)) { + HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET); + + uint8_t devid = GetDeviceId(lora_rx_buffer); + memcpy(&i2c_tx_buffer[devid * PACKET_LENGTH], &lora_rx_buffer, LORA_PACKET_SIZE); + + if (verbosity >= 1) { + sprintf(msg, "Rx %u bytes: ", sizeof(lora_rx_buffer)); + HAL_UART_Transmit(&huart4, (uint8_t *) msg, strlen(msg), 100); + HAL_UART_Transmit(&huart4, (uint8_t *) lora_rx_buffer, LORA_PACKET_SIZE, 100); + HAL_UART_Transmit(&huart4, (uint8_t *) "\n", 1, 100); + } + + HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); + break; // No need to check again as no two Rx can happen within one tick. + } + } + } + } + + while (__HAL_TIM_GET_COUNTER(&htim2) < TICK_DURATION_US) { + // Just wait. + } + + } else { + if (!got_beacon) { + SX1278_LoRaEntryRx(&SX1278, 4, LORA_TIMEOUT); + } + + while (!got_beacon) { + ret = SX1278_LoRaRxPacket(&SX1278); + if (verbosity >= 2) { HAL_UART_Transmit(&huart4, (uint8_t *) "awaiting beacon\n", 16, 100); } + + if (ret > 0 && ret <= LORA_BEACON_SIZE) { + HAL_UART_Transmit(&huart4, (uint8_t *) lora_beacon_rx_buffer, LORA_BEACON_SIZE, 100); + SX1278_read(&SX1278, (uint8_t*) lora_beacon_rx_buffer, LORA_BEACON_SIZE); + + // Beacons only come from the master (device_id == 0) + if (IsOwnLoraPacket(lora_beacon_rx_buffer) && GetDeviceId(lora_beacon_rx_buffer) == 0) { + TICK_COUNT = lora_beacon_rx_buffer[2]; + TICK_DURATION_US = lora_beacon_rx_buffer[3] * 1000000; + TX_OFFSET = lora_beacon_rx_buffer[4]; + PACKET_LENGTH = (TICK_COUNT + LORA_HEADER_LENGTH + BAT_FIELD_SIZE); + LORA_PACKET_SIZE = PACKET_LENGTH * 2; + got_beacon = 1; + + if (verbosity >= 2) { + sprintf(msg, "tc: %u, td: %lu, offs: %u\n", TICK_COUNT, TICK_DURATION_US, TX_OFFSET); + HAL_UART_Transmit(&huart4, (uint8_t *) msg, strlen(msg), 100); + HAL_UART_Transmit(&huart4, (uint8_t *) lora_beacon_rx_buffer, LORA_BEACON_SIZE, 100); + HAL_UART_Transmit(&huart4, (uint8_t *) "\n", 1, 100); + + } + break; + } + } + HAL_Delay(150); // Going at full throttle just pisses away power. + } + + sprintf(msg, "tc: %u, td: %lu, offs: %u\n", TICK_COUNT, TICK_DURATION_US, TX_OFFSET); + HAL_UART_Transmit(&huart4, (uint8_t *) msg, strlen(msg), 100); + // Use the first 4 bytes as LoRa sync word and device ID. + measured_values1[0] = (uint16_t) (LORA_SYNC_WORD >> 16); + measured_values2[0] = (uint16_t) (LORA_SYNC_WORD >> 16); + measured_values1[1] = (uint16_t) (LORA_SYNC_WORD | device_id); + measured_values2[1] = (uint16_t) (LORA_SYNC_WORD | device_id); + + // Battery state. + measured_values1[PACKET_LENGTH - 1] = 0x0000; + measured_values2[PACKET_LENGTH - 1] = 0x0000; + + + __HAL_TIM_SET_COUNTER(&htim2, 0); + + // TICK_COUNT / 2 avoids measurement during Tx which drops the voltage a fair bit. + if (device_id != 0 && tick_count == (TICK_COUNT / 2)) { + HAL_ADC_Start_DMA(&hadc1, adc_buf, hadc1.Init.NbrOfConversion); + while (!adc_ready); + adc_ready = 0; + HAL_ADC_Stop_DMA(&hadc1); + adc_avg += adc_buf[1]; + adc_counter++; + + if (adc_counter == BAT_MEASUREMENT_CYCLES) { + HAL_ADCEx_Calibration_Start(&hadc1); // As per data sheet this needs to happen while the ADC is not running. + uint32_t cal = HAL_ADCEx_Calibration_GetValue(&hadc1) / 2; // Returns an offset we add to the measurement later on. + + adc_avg /= adc_counter; + bat_voltage_avg = ((adc_avg + cal) * 1.212 / adc_buf[2]) * 2; // 1.212 is the VREFINT voltage as per data sheet. + + if (verbosity >= 2) { + sprintf(msg, "V_BAT: %.4f, ADC: %lu\n", bat_voltage_avg, adc_avg); + HAL_UART_Transmit(&huart4, (uint8_t *) msg, strlen(msg), 100); + } + + if (bat_voltage_avg <= DROPOUT_VOLTAGE) { + measured_values1[PACKET_LENGTH - BAT_FIELD_SIZE] = 0xffff; + measured_values2[PACKET_LENGTH - BAT_FIELD_SIZE] = 0xffff; + if (verbosity >= 1) { + sprintf(msg, "V_BAT: %.3f V below %.3f V, flipped battery bits\n", bat_voltage_avg, BAT_LOW_THRESHOLD); + HAL_UART_Transmit(&huart4, (uint8_t *) msg, strlen(msg), 100); + } + } + + bat_voltage_avg = 0; + adc_avg = 0; + adc_counter = 0; + } + } + + if (verbosity >= 2) { + sprintf(msg, "tc: %u, tx_due: %u\n", tick_count, tx_due); + HAL_UART_Transmit(&huart4, (uint8_t *) msg, strlen(msg), 100); + } + + // Wait for device ID times offset with sending to avoid overlapping transmissions at the master node. + if ( tx_due && tick_count == (LORA_HEADER_LENGTH - 1 + (device_id * TX_OFFSET)) ) { + //HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET); + if (flip_buffer) { + SX1278_LoRaTxPacket(&SX1278, (uint8_t *) &measured_values1, LORA_PACKET_SIZE, LORA_TIMEOUT); + if (verbosity >= 1) { HAL_UART_Transmit(&huart4, (uint8_t *) "sent arr. 1\n", 12, 100); } + } else { + SX1278_LoRaTxPacket(&SX1278, (uint8_t *) &measured_values2, LORA_PACKET_SIZE, LORA_TIMEOUT); + if (verbosity >= 1) { HAL_UART_Transmit(&huart4, (uint8_t *) "sent arr. 2\n", 12, 100); } + } + + //HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); + tx_due = 0; + } + + for (volatile uint16_t i = 0; i < BUFSIZE; i += 4) { + vReal[i/4] = abs(65535 - i2s_dma_buf[i]); + vImag[i/4] = 0; + } + + // Alternate between two buffers to allow sending while another buffer is being written to. + if (flip_buffer) { + measured_values2[tick_count] = GetDBA(vReal, vImag); + if (verbosity >= 2) { + sprintf(msg, "fill array 1: %u\n", tick_count); + HAL_UART_Transmit(&huart4, (uint8_t *) msg, strlen(msg), 100); + } + } else { + measured_values1[tick_count] = GetDBA(vReal, vImag); + if (verbosity >= 2) { + sprintf(msg, "fill array 1: %u\n", tick_count); + HAL_UART_Transmit(&huart4, (uint8_t *) msg, strlen(msg), 100); + } + } + + // One tick before expecting the sync beacon we switch to Rx. We could've done this earlier + // but keeping the LoRa module in Rx mode uses up a lot of power. + if (tick_count == ( PACKET_LENGTH - BAT_FIELD_SIZE - 2 ) ) { + SX1278_LoRaEntryRx(&SX1278, 4, LORA_TIMEOUT); + if (verbosity >= 2) { HAL_UART_Transmit(&huart4, (uint8_t *) "switch to rx\n", 13, 100); } + } + + tick_count++; + + // TODO This could probably be done in the while !beacon loop. + // TODO Update setup values should they change. + // All measurements are done and we're waiting for the sync beacon to start the cycle again. + while ( __HAL_TIM_GET_COUNTER(&htim2) < (TICK_DURATION_US) || tick_count == (PACKET_LENGTH - BAT_FIELD_SIZE ) ) { + ret = SX1278_LoRaRxPacket(&SX1278); + + if (ret > 0 && ret <= LORA_BEACON_SIZE) { + memset(lora_beacon_rx_buffer, 0, sizeof lora_beacon_rx_buffer); + SX1278_read(&SX1278, (uint8_t*) lora_beacon_rx_buffer, LORA_BEACON_SIZE); + if (verbosity >= 2) { HAL_UART_Transmit(&huart4, (uint8_t *) lora_beacon_rx_buffer, sizeof(lora_beacon_rx_buffer), 100); } + + // Beacons only come from the master (device_id == 0) + if (IsOwnLoraPacket(lora_beacon_rx_buffer) && GetDeviceId(lora_beacon_rx_buffer) == 0) { + if (verbosity >= 1) { HAL_UART_Transmit(&huart4, (uint8_t *) "rx beacon\n", 10, 100); } + + flip_buffer ^= 1; // Flip the flip_buffer bit. + tick_count = LORA_HEADER_LENGTH; + + uint8_t new_tick_count = lora_beacon_rx_buffer[2]; + uint32_t new_tick_duration = lora_beacon_rx_buffer[3] * 1000000; + uint8_t new_tx_offset = lora_beacon_rx_buffer[4]; + + // If one of these values changes, don't send the last packet as it's not adhering to the new parameters anymore. + if (new_tick_count != TICK_COUNT || new_tick_duration != TICK_DURATION_US || new_tx_offset != TX_OFFSET) { + tx_due = 0; + HAL_UART_Transmit(&huart4, (uint8_t *) "values changed, don't send\n", 27, 100); + } else { + tx_due = 1; + } + + if (verbosity >= 2) { HAL_UART_Transmit(&huart4, (uint8_t *) "flip\n", 6, 100); } + + TICK_COUNT = new_tick_count; + TICK_DURATION_US = new_tick_duration; + TX_OFFSET = new_tx_offset; + PACKET_LENGTH = (TICK_COUNT + LORA_HEADER_LENGTH + BAT_FIELD_SIZE); + LORA_PACKET_SIZE = PACKET_LENGTH * 2; + + HAL_UART_Transmit(&huart4, (uint8_t *) "\n", 1, 100); + while (__HAL_TIM_GET_COUNTER(&htim2) < (TICK_DURATION_US)); // Some µs might be left. + + // Switch back to Tx right here as it saves power. + SX1278_entryLoRa(&SX1278); + SX1278_LoRaEntryTx(&SX1278, LORA_PACKET_SIZE, LORA_TIMEOUT); + break; + } + } + } + + } + /* + } + + */ + /* USER CODE END WHILE */ + + /* USER CODE BEGIN 3 */ + } + /* USER CODE END 3 */ +} + +/** + * @brief System Clock Configuration + * @retval None + */ +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; + + /** Configure the main internal regulator output voltage + */ + HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1); + /** Initializes the RCC Oscillators according to the specified parameters + * in the RCC_OscInitTypeDef structure. + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; + RCC_OscInitStruct.HSIState = RCC_HSI_ON; + RCC_OscInitStruct.HSIDiv = RCC_HSI_DIV1; + RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + /** Initializes the CPU, AHB and APB buses clocks + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK + |RCC_CLOCKTYPE_PCLK1; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK) + { + Error_Handler(); + } + /** Initializes the peripherals clocks + */ + PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_I2S1|RCC_PERIPHCLK_ADC; + PeriphClkInit.I2s1ClockSelection = RCC_I2S1CLKSOURCE_SYSCLK; + PeriphClkInit.AdcClockSelection = RCC_ADCCLKSOURCE_SYSCLK; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) + { + Error_Handler(); + } +} + +/** + * @brief ADC1 Initialization Function + * @param None + * @retval None + */ +static void MX_ADC1_Init(void) +{ + + /* USER CODE BEGIN ADC1_Init 0 */ + + /* USER CODE END ADC1_Init 0 */ + + ADC_ChannelConfTypeDef sConfig = {0}; + + /* USER CODE BEGIN ADC1_Init 1 */ + + /* USER CODE END ADC1_Init 1 */ + /** Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion) + */ + hadc1.Instance = ADC1; + hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2; + hadc1.Init.Resolution = ADC_RESOLUTION_12B; + hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; + hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE; + hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV; + hadc1.Init.LowPowerAutoWait = DISABLE; + hadc1.Init.LowPowerAutoPowerOff = DISABLE; + hadc1.Init.ContinuousConvMode = DISABLE; + hadc1.Init.NbrOfConversion = 3; + hadc1.Init.DiscontinuousConvMode = DISABLE; + hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; + hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; + hadc1.Init.DMAContinuousRequests = ENABLE; + hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED; + hadc1.Init.SamplingTimeCommon1 = ADC_SAMPLETIME_1CYCLE_5; + hadc1.Init.SamplingTimeCommon2 = ADC_SAMPLETIME_1CYCLE_5; + hadc1.Init.OversamplingMode = DISABLE; + hadc1.Init.TriggerFrequencyMode = ADC_TRIGGER_FREQ_HIGH; + if (HAL_ADC_Init(&hadc1) != HAL_OK) + { + Error_Handler(); + } + /** Configure Regular Channel + */ + sConfig.Channel = ADC_CHANNEL_2; + sConfig.Rank = ADC_REGULAR_RANK_1; + sConfig.SamplingTime = ADC_SAMPLINGTIME_COMMON_1; + if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) + { + Error_Handler(); + } + /** Configure Regular Channel + */ + sConfig.Channel = ADC_CHANNEL_9; + sConfig.Rank = ADC_REGULAR_RANK_2; + if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) + { + Error_Handler(); + } + /** Configure Regular Channel + */ + sConfig.Channel = ADC_CHANNEL_VREFINT; + sConfig.Rank = ADC_REGULAR_RANK_3; + if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN ADC1_Init 2 */ + + /* USER CODE END ADC1_Init 2 */ + +} + +/** + * @brief I2C2 Initialization Function + * @param None + * @retval None + */ +static void MX_I2C2_Init(void) +{ + + /* USER CODE BEGIN I2C2_Init 0 */ + + /* USER CODE END I2C2_Init 0 */ + + /* USER CODE BEGIN I2C2_Init 1 */ + + /* USER CODE END I2C2_Init 1 */ + hi2c2.Instance = I2C2; + hi2c2.Init.Timing = 0x0010061A; + hi2c2.Init.OwnAddress1 = 120; + hi2c2.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT; + hi2c2.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE; + hi2c2.Init.OwnAddress2 = 0; + hi2c2.Init.OwnAddress2Masks = I2C_OA2_NOMASK; + hi2c2.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE; + hi2c2.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE; + if (HAL_I2C_Init(&hi2c2) != HAL_OK) + { + Error_Handler(); + } + /** Configure Analogue filter + */ + if (HAL_I2CEx_ConfigAnalogFilter(&hi2c2, I2C_ANALOGFILTER_ENABLE) != HAL_OK) + { + Error_Handler(); + } + /** Configure Digital filter + */ + if (HAL_I2CEx_ConfigDigitalFilter(&hi2c2, 0) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN I2C2_Init 2 */ + if (HAL_GPIO_ReadPin(I2C_Address_GPIO_Port, I2C_Address_Pin) == GPIO_PIN_SET) { // Jumper open, internal pull up + hi2c2.Init.OwnAddress1 = 120; + } else { // Jumper closed, pulled to GND + hi2c2.Init.OwnAddress1 = 122; + } + + if (HAL_I2C_Init(&hi2c2) != HAL_OK) + { + Error_Handler(); + } + + /* USER CODE END I2C2_Init 2 */ + +} + +/** + * @brief I2S1 Initialization Function + * @param None + * @retval None + */ +static void MX_I2S1_Init(void) +{ + + /* USER CODE BEGIN I2S1_Init 0 */ + + /* USER CODE END I2S1_Init 0 */ + + /* USER CODE BEGIN I2S1_Init 1 */ + + /* USER CODE END I2S1_Init 1 */ + hi2s1.Instance = SPI1; + hi2s1.Init.Mode = I2S_MODE_MASTER_RX; + hi2s1.Init.Standard = I2S_STANDARD_PHILIPS; + hi2s1.Init.DataFormat = I2S_DATAFORMAT_24B; + hi2s1.Init.MCLKOutput = I2S_MCLKOUTPUT_DISABLE; + hi2s1.Init.AudioFreq = I2S_AUDIOFREQ_22K; + hi2s1.Init.CPOL = I2S_CPOL_LOW; + if (HAL_I2S_Init(&hi2s1) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN I2S1_Init 2 */ + + /* USER CODE END I2S1_Init 2 */ + +} + +/** + * @brief SPI2 Initialization Function + * @param None + * @retval None + */ +static void MX_SPI2_Init(void) +{ + + /* USER CODE BEGIN SPI2_Init 0 */ + + /* USER CODE END SPI2_Init 0 */ + + /* USER CODE BEGIN SPI2_Init 1 */ + + /* USER CODE END SPI2_Init 1 */ + /* SPI2 parameter configuration*/ + hspi2.Instance = SPI2; + hspi2.Init.Mode = SPI_MODE_MASTER; + hspi2.Init.Direction = SPI_DIRECTION_2LINES; + hspi2.Init.DataSize = SPI_DATASIZE_8BIT; + hspi2.Init.CLKPolarity = SPI_POLARITY_LOW; + hspi2.Init.CLKPhase = SPI_PHASE_1EDGE; + hspi2.Init.NSS = SPI_NSS_SOFT; + hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2; + hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB; + hspi2.Init.TIMode = SPI_TIMODE_DISABLE; + hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; + hspi2.Init.CRCPolynomial = 7; + hspi2.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE; + hspi2.Init.NSSPMode = SPI_NSS_PULSE_ENABLE; + if (HAL_SPI_Init(&hspi2) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN SPI2_Init 2 */ + + /* USER CODE END SPI2_Init 2 */ + +} + +/** + * @brief TIM2 Initialization Function + * @param None + * @retval None + */ +static void MX_TIM2_Init(void) +{ + + /* USER CODE BEGIN TIM2_Init 0 */ + + /* USER CODE END TIM2_Init 0 */ + + TIM_ClockConfigTypeDef sClockSourceConfig = {0}; + TIM_MasterConfigTypeDef sMasterConfig = {0}; + + /* USER CODE BEGIN TIM2_Init 1 */ + + /* USER CODE END TIM2_Init 1 */ + htim2.Instance = TIM2; + htim2.Init.Prescaler = 16-1; + htim2.Init.CounterMode = TIM_COUNTERMODE_UP; + htim2.Init.Period = 4294967295; + htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; + htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; + if (HAL_TIM_Base_Init(&htim2) != HAL_OK) + { + Error_Handler(); + } + sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; + if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) + { + Error_Handler(); + } + sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; + sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; + if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN TIM2_Init 2 */ + + /* USER CODE END TIM2_Init 2 */ + +} + +/** + * @brief USART4 Initialization Function + * @param None + * @retval None + */ +static void MX_USART4_UART_Init(void) +{ + + /* USER CODE BEGIN USART4_Init 0 */ + + /* USER CODE END USART4_Init 0 */ + + /* USER CODE BEGIN USART4_Init 1 */ + + /* USER CODE END USART4_Init 1 */ + huart4.Instance = USART4; + huart4.Init.BaudRate = 115200; + huart4.Init.WordLength = UART_WORDLENGTH_8B; + huart4.Init.StopBits = UART_STOPBITS_1; + huart4.Init.Parity = UART_PARITY_NONE; + huart4.Init.Mode = UART_MODE_TX; + huart4.Init.HwFlowCtl = UART_HWCONTROL_NONE; + huart4.Init.OverSampling = UART_OVERSAMPLING_16; + huart4.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE; + huart4.Init.ClockPrescaler = UART_PRESCALER_DIV1; + huart4.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; + if (HAL_UART_Init(&huart4) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN USART4_Init 2 */ + + /* USER CODE END USART4_Init 2 */ + +} + +/** + * Enable DMA controller clock + */ +static void MX_DMA_Init(void) +{ + + /* DMA controller clock enable */ + __HAL_RCC_DMA1_CLK_ENABLE(); + + /* DMA interrupt init */ + /* DMA1_Channel1_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn); + /* DMA1_Channel2_3_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(DMA1_Channel2_3_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(DMA1_Channel2_3_IRQn); + +} + +/** + * @brief GPIO Initialization Function + * @param None + * @retval None + */ +static void MX_GPIO_Init(void) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + + /* GPIO Ports Clock Enable */ + __HAL_RCC_GPIOA_CLK_ENABLE(); + __HAL_RCC_GPIOB_CLK_ENABLE(); + __HAL_RCC_GPIOC_CLK_ENABLE(); + + /*Configure GPIO pin Output Level */ + HAL_GPIO_WritePin(NSS_GPIO_Port, NSS_Pin, GPIO_PIN_SET); + + /*Configure GPIO pin Output Level */ + HAL_GPIO_WritePin(GPIOA, LED_Pin|RESET_Pin, GPIO_PIN_RESET); + + /*Configure GPIO pins : NSS_Pin LED_Pin RESET_Pin */ + GPIO_InitStruct.Pin = NSS_Pin|LED_Pin|RESET_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + /*Configure GPIO pin : PB0 */ + GPIO_InitStruct.Pin = GPIO_PIN_0; + GPIO_InitStruct.Mode = GPIO_MODE_INPUT; + GPIO_InitStruct.Pull = GPIO_NOPULL; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + /*Configure GPIO pin : I2C_Address_Pin */ + GPIO_InitStruct.Pin = I2C_Address_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_INPUT; + GPIO_InitStruct.Pull = GPIO_PULLUP; + HAL_GPIO_Init(I2C_Address_GPIO_Port, &GPIO_InitStruct); + +} + +/* USER CODE BEGIN 4 */ +void HAL_I2C_AddrCallback(I2C_HandleTypeDef *hi2c, uint8_t TransferDirection, uint16_t AddrMatchCode) { + + HAL_I2C_DisableListen_IT(hi2c); + if (TransferDirection == I2C_TX) { + HAL_I2C_Slave_Transmit_IT(hi2c, (uint8_t *) &i2c_tx_buffer[i2c_tx_counter * PACKET_LENGTH], LORA_PACKET_SIZE); + i2c_tx_counter++; + } else if (TransferDirection == I2C_RX) { + HAL_I2C_Slave_Receive_IT(hi2c, (uint8_t *) i2c_rx_buffer, sizeof(i2c_rx_buffer)); // The Arduino lib sends an extra byte in the beginning. + } + +} + +void HAL_I2C_SlaveTxCpltCallback(I2C_HandleTypeDef *hi2c) { + if (i2c_tx_counter == DEVICE_COUNT) { + i2c_tx_counter = 0; + memset(i2c_tx_buffer, 0, sizeof i2c_tx_buffer); + } + HAL_I2C_EnableListen_IT(hi2c); +} + +void HAL_I2C_SlaveRxCpltCallback(I2C_HandleTypeDef *hi2c) { + got_i2c_setup_message = 1; + HAL_I2C_EnableListen_IT(hi2c); +} + +void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) { + adc_ready = 1; +} + +/* USER CODE END 4 */ + +/** + * @brief This function is executed in case of error occurrence. + * @retval None + */ +void Error_Handler(void) +{ + /* USER CODE BEGIN Error_Handler_Debug */ + /* User can add his own implementation to report the HAL error return state */ + + /* USER CODE END Error_Handler_Debug */ +} + +#ifdef USE_FULL_ASSERT +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t *file, uint32_t line) +{ + /* USER CODE BEGIN 6 */ + /* User can add his own implementation to report the file name and line number, + tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + /* USER CODE END 6 */ +} +#endif /* USE_FULL_ASSERT */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/STM32/Core/Src/stm32g0xx_hal_msp.c b/STM32/Core/Src/stm32g0xx_hal_msp.c new file mode 100644 index 0000000..4468ac7 --- /dev/null +++ b/STM32/Core/Src/stm32g0xx_hal_msp.c @@ -0,0 +1,550 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * File Name : stm32g0xx_hal_msp.c + * Description : This file provides code for the MSP Initialization + * and de-Initialization codes. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2021 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ +extern DMA_HandleTypeDef hdma_adc1; + +extern DMA_HandleTypeDef hdma_spi1_rx; + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN TD */ + +/* USER CODE END TD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN Define */ + +/* USER CODE END Define */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN Macro */ + +/* USER CODE END Macro */ + +/* Private variables ---------------------------------------------------------*/ +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* External functions --------------------------------------------------------*/ +/* USER CODE BEGIN ExternalFunctions */ + +/* USER CODE END ExternalFunctions */ + +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ +/** + * Initializes the Global MSP. + */ +void HAL_MspInit(void) +{ + /* USER CODE BEGIN MspInit 0 */ + + /* USER CODE END MspInit 0 */ + + __HAL_RCC_SYSCFG_CLK_ENABLE(); + __HAL_RCC_PWR_CLK_ENABLE(); + + /* System interrupt init*/ + + /** Disable the internal Pull-Up in Dead Battery pins of UCPD peripheral + */ + HAL_SYSCFG_StrobeDBattpinsConfig(SYSCFG_CFGR1_UCPD1_STROBE); + + /* USER CODE BEGIN MspInit 1 */ + + /* USER CODE END MspInit 1 */ +} + +/** +* @brief ADC MSP Initialization +* This function configures the hardware resources used in this example +* @param hadc: ADC handle pointer +* @retval None +*/ +void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(hadc->Instance==ADC1) + { + /* USER CODE BEGIN ADC1_MspInit 0 */ + + /* USER CODE END ADC1_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_ADC_CLK_ENABLE(); + + __HAL_RCC_GPIOA_CLK_ENABLE(); + __HAL_RCC_GPIOB_CLK_ENABLE(); + /**ADC1 GPIO Configuration + PA2 ------> ADC1_IN2 + PB1 ------> ADC1_IN9 + */ + GPIO_InitStruct.Pin = Device_ID_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; + GPIO_InitStruct.Pull = GPIO_NOPULL; + HAL_GPIO_Init(Device_ID_GPIO_Port, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = BAT_Monitor_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; + GPIO_InitStruct.Pull = GPIO_NOPULL; + HAL_GPIO_Init(BAT_Monitor_GPIO_Port, &GPIO_InitStruct); + + /* ADC1 DMA Init */ + /* ADC1 Init */ + hdma_adc1.Instance = DMA1_Channel2; + hdma_adc1.Init.Request = DMA_REQUEST_ADC1; + hdma_adc1.Init.Direction = DMA_PERIPH_TO_MEMORY; + hdma_adc1.Init.PeriphInc = DMA_PINC_DISABLE; + hdma_adc1.Init.MemInc = DMA_MINC_ENABLE; + hdma_adc1.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; + hdma_adc1.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; + hdma_adc1.Init.Mode = DMA_CIRCULAR; + hdma_adc1.Init.Priority = DMA_PRIORITY_LOW; + if (HAL_DMA_Init(&hdma_adc1) != HAL_OK) + { + Error_Handler(); + } + + __HAL_LINKDMA(hadc,DMA_Handle,hdma_adc1); + + /* ADC1 interrupt Init */ + HAL_NVIC_SetPriority(ADC1_COMP_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(ADC1_COMP_IRQn); + /* USER CODE BEGIN ADC1_MspInit 1 */ + + /* USER CODE END ADC1_MspInit 1 */ + } + +} + +/** +* @brief ADC MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param hadc: ADC handle pointer +* @retval None +*/ +void HAL_ADC_MspDeInit(ADC_HandleTypeDef* hadc) +{ + if(hadc->Instance==ADC1) + { + /* USER CODE BEGIN ADC1_MspDeInit 0 */ + + /* USER CODE END ADC1_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_ADC_CLK_DISABLE(); + + /**ADC1 GPIO Configuration + PA2 ------> ADC1_IN2 + PB1 ------> ADC1_IN9 + */ + HAL_GPIO_DeInit(Device_ID_GPIO_Port, Device_ID_Pin); + + HAL_GPIO_DeInit(BAT_Monitor_GPIO_Port, BAT_Monitor_Pin); + + /* ADC1 DMA DeInit */ + HAL_DMA_DeInit(hadc->DMA_Handle); + + /* ADC1 interrupt DeInit */ + HAL_NVIC_DisableIRQ(ADC1_COMP_IRQn); + /* USER CODE BEGIN ADC1_MspDeInit 1 */ + + /* USER CODE END ADC1_MspDeInit 1 */ + } + +} + +/** +* @brief I2C MSP Initialization +* This function configures the hardware resources used in this example +* @param hi2c: I2C handle pointer +* @retval None +*/ +void HAL_I2C_MspInit(I2C_HandleTypeDef* hi2c) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(hi2c->Instance==I2C2) + { + /* USER CODE BEGIN I2C2_MspInit 0 */ + + /* USER CODE END I2C2_MspInit 0 */ + + __HAL_RCC_GPIOA_CLK_ENABLE(); + /**I2C2 GPIO Configuration + PA11 [PA9] ------> I2C2_SCL + PA12 [PA10] ------> I2C2_SDA + */ + GPIO_InitStruct.Pin = GPIO_PIN_11|GPIO_PIN_12; + GPIO_InitStruct.Mode = GPIO_MODE_AF_OD; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF6_I2C2; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + /* Peripheral clock enable */ + __HAL_RCC_I2C2_CLK_ENABLE(); + /* I2C2 interrupt Init */ + HAL_NVIC_SetPriority(I2C2_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(I2C2_IRQn); + /* USER CODE BEGIN I2C2_MspInit 1 */ + + /* USER CODE END I2C2_MspInit 1 */ + } + +} + +/** +* @brief I2C MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param hi2c: I2C handle pointer +* @retval None +*/ +void HAL_I2C_MspDeInit(I2C_HandleTypeDef* hi2c) +{ + if(hi2c->Instance==I2C2) + { + /* USER CODE BEGIN I2C2_MspDeInit 0 */ + + /* USER CODE END I2C2_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_I2C2_CLK_DISABLE(); + + /**I2C2 GPIO Configuration + PA11 [PA9] ------> I2C2_SCL + PA12 [PA10] ------> I2C2_SDA + */ + HAL_GPIO_DeInit(GPIOA, GPIO_PIN_11); + + HAL_GPIO_DeInit(GPIOA, GPIO_PIN_12); + + /* I2C2 interrupt DeInit */ + HAL_NVIC_DisableIRQ(I2C2_IRQn); + /* USER CODE BEGIN I2C2_MspDeInit 1 */ + + /* USER CODE END I2C2_MspDeInit 1 */ + } + +} + +/** +* @brief I2S MSP Initialization +* This function configures the hardware resources used in this example +* @param hi2s: I2S handle pointer +* @retval None +*/ +void HAL_I2S_MspInit(I2S_HandleTypeDef* hi2s) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(hi2s->Instance==SPI1) + { + /* USER CODE BEGIN SPI1_MspInit 0 */ + + /* USER CODE END SPI1_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_SPI1_CLK_ENABLE(); + + __HAL_RCC_GPIOA_CLK_ENABLE(); + __HAL_RCC_GPIOB_CLK_ENABLE(); + /**I2S1 GPIO Configuration + PA15 ------> I2S1_WS + PB3 ------> I2S1_CK + PB5 ------> I2S1_SD + */ + GPIO_InitStruct.Pin = GPIO_PIN_15; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF0_SPI1; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_3|GPIO_PIN_5; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF0_SPI1; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + /* I2S1 DMA Init */ + /* SPI1_RX Init */ + hdma_spi1_rx.Instance = DMA1_Channel1; + hdma_spi1_rx.Init.Request = DMA_REQUEST_SPI1_RX; + hdma_spi1_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; + hdma_spi1_rx.Init.PeriphInc = DMA_PINC_DISABLE; + hdma_spi1_rx.Init.MemInc = DMA_MINC_ENABLE; + hdma_spi1_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; + hdma_spi1_rx.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD; + hdma_spi1_rx.Init.Mode = DMA_CIRCULAR; + hdma_spi1_rx.Init.Priority = DMA_PRIORITY_LOW; + if (HAL_DMA_Init(&hdma_spi1_rx) != HAL_OK) + { + Error_Handler(); + } + + __HAL_LINKDMA(hi2s,hdmarx,hdma_spi1_rx); + + /* USER CODE BEGIN SPI1_MspInit 1 */ + + /* USER CODE END SPI1_MspInit 1 */ + } + +} + +/** +* @brief I2S MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param hi2s: I2S handle pointer +* @retval None +*/ +void HAL_I2S_MspDeInit(I2S_HandleTypeDef* hi2s) +{ + if(hi2s->Instance==SPI1) + { + /* USER CODE BEGIN SPI1_MspDeInit 0 */ + + /* USER CODE END SPI1_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_SPI1_CLK_DISABLE(); + + /**I2S1 GPIO Configuration + PA15 ------> I2S1_WS + PB3 ------> I2S1_CK + PB5 ------> I2S1_SD + */ + HAL_GPIO_DeInit(GPIOA, GPIO_PIN_15); + + HAL_GPIO_DeInit(GPIOB, GPIO_PIN_3|GPIO_PIN_5); + + /* I2S1 DMA DeInit */ + HAL_DMA_DeInit(hi2s->hdmarx); + /* USER CODE BEGIN SPI1_MspDeInit 1 */ + + /* USER CODE END SPI1_MspDeInit 1 */ + } + +} + +/** +* @brief SPI MSP Initialization +* This function configures the hardware resources used in this example +* @param hspi: SPI handle pointer +* @retval None +*/ +void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(hspi->Instance==SPI2) + { + /* USER CODE BEGIN SPI2_MspInit 0 */ + + /* USER CODE END SPI2_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_SPI2_CLK_ENABLE(); + + __HAL_RCC_GPIOA_CLK_ENABLE(); + __HAL_RCC_GPIOB_CLK_ENABLE(); + /**SPI2 GPIO Configuration + PA3 ------> SPI2_MISO + PA4 ------> SPI2_MOSI + PB8 ------> SPI2_SCK + */ + GPIO_InitStruct.Pin = GPIO_PIN_3; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF0_SPI2; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_4; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF1_SPI2; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_8; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF1_SPI2; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + /* USER CODE BEGIN SPI2_MspInit 1 */ + + /* USER CODE END SPI2_MspInit 1 */ + } + +} + +/** +* @brief SPI MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param hspi: SPI handle pointer +* @retval None +*/ +void HAL_SPI_MspDeInit(SPI_HandleTypeDef* hspi) +{ + if(hspi->Instance==SPI2) + { + /* USER CODE BEGIN SPI2_MspDeInit 0 */ + + /* USER CODE END SPI2_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_SPI2_CLK_DISABLE(); + + /**SPI2 GPIO Configuration + PA3 ------> SPI2_MISO + PA4 ------> SPI2_MOSI + PB8 ------> SPI2_SCK + */ + HAL_GPIO_DeInit(GPIOA, GPIO_PIN_3|GPIO_PIN_4); + + HAL_GPIO_DeInit(GPIOB, GPIO_PIN_8); + + /* USER CODE BEGIN SPI2_MspDeInit 1 */ + + /* USER CODE END SPI2_MspDeInit 1 */ + } + +} + +/** +* @brief TIM_Base MSP Initialization +* This function configures the hardware resources used in this example +* @param htim_base: TIM_Base handle pointer +* @retval None +*/ +void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base) +{ + if(htim_base->Instance==TIM2) + { + /* USER CODE BEGIN TIM2_MspInit 0 */ + + /* USER CODE END TIM2_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_TIM2_CLK_ENABLE(); + /* USER CODE BEGIN TIM2_MspInit 1 */ + + /* USER CODE END TIM2_MspInit 1 */ + } + +} + +/** +* @brief TIM_Base MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param htim_base: TIM_Base handle pointer +* @retval None +*/ +void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* htim_base) +{ + if(htim_base->Instance==TIM2) + { + /* USER CODE BEGIN TIM2_MspDeInit 0 */ + + /* USER CODE END TIM2_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_TIM2_CLK_DISABLE(); + /* USER CODE BEGIN TIM2_MspDeInit 1 */ + + /* USER CODE END TIM2_MspDeInit 1 */ + } + +} + +/** +* @brief UART MSP Initialization +* This function configures the hardware resources used in this example +* @param huart: UART handle pointer +* @retval None +*/ +void HAL_UART_MspInit(UART_HandleTypeDef* huart) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(huart->Instance==USART4) + { + /* USER CODE BEGIN USART4_MspInit 0 */ + + /* USER CODE END USART4_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_USART4_CLK_ENABLE(); + + __HAL_RCC_GPIOA_CLK_ENABLE(); + /**USART4 GPIO Configuration + PA0 ------> USART4_TX + PA1 ------> USART4_RX + */ + GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF4_USART4; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + /* USER CODE BEGIN USART4_MspInit 1 */ + + /* USER CODE END USART4_MspInit 1 */ + } + +} + +/** +* @brief UART MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param huart: UART handle pointer +* @retval None +*/ +void HAL_UART_MspDeInit(UART_HandleTypeDef* huart) +{ + if(huart->Instance==USART4) + { + /* USER CODE BEGIN USART4_MspDeInit 0 */ + + /* USER CODE END USART4_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_USART4_CLK_DISABLE(); + + /**USART4 GPIO Configuration + PA0 ------> USART4_TX + PA1 ------> USART4_RX + */ + HAL_GPIO_DeInit(GPIOA, GPIO_PIN_0|GPIO_PIN_1); + + /* USER CODE BEGIN USART4_MspDeInit 1 */ + + /* USER CODE END USART4_MspDeInit 1 */ + } + +} + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/STM32/Core/Src/stm32g0xx_it.c b/STM32/Core/Src/stm32g0xx_it.c new file mode 100644 index 0000000..ef7d585 --- /dev/null +++ b/STM32/Core/Src/stm32g0xx_it.c @@ -0,0 +1,208 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32g0xx_it.c + * @brief Interrupt Service Routines. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2021 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +#include "stm32g0xx_it.h" +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN TD */ + +/* USER CODE END TD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN PD */ + +/* USER CODE END PD */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN PM */ + +/* USER CODE END PM */ + +/* Private variables ---------------------------------------------------------*/ +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* Private user code ---------------------------------------------------------*/ +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +/* External variables --------------------------------------------------------*/ +extern DMA_HandleTypeDef hdma_adc1; +extern ADC_HandleTypeDef hadc1; +extern I2C_HandleTypeDef hi2c2; +extern DMA_HandleTypeDef hdma_spi1_rx; +/* USER CODE BEGIN EV */ + +/* USER CODE END EV */ + +/******************************************************************************/ +/* Cortex-M0+ Processor Interruption and Exception Handlers */ +/******************************************************************************/ +/** + * @brief This function handles Non maskable interrupt. + */ +void NMI_Handler(void) +{ + /* USER CODE BEGIN NonMaskableInt_IRQn 0 */ + + /* USER CODE END NonMaskableInt_IRQn 0 */ + /* USER CODE BEGIN NonMaskableInt_IRQn 1 */ + + /* USER CODE END NonMaskableInt_IRQn 1 */ +} + +/** + * @brief This function handles Hard fault interrupt. + */ +void HardFault_Handler(void) +{ + /* USER CODE BEGIN HardFault_IRQn 0 */ + + /* USER CODE END HardFault_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_HardFault_IRQn 0 */ + /* USER CODE END W1_HardFault_IRQn 0 */ + } +} + +/** + * @brief This function handles System service call via SWI instruction. + */ +void SVC_Handler(void) +{ + /* USER CODE BEGIN SVC_IRQn 0 */ + + /* USER CODE END SVC_IRQn 0 */ + /* USER CODE BEGIN SVC_IRQn 1 */ + + /* USER CODE END SVC_IRQn 1 */ +} + +/** + * @brief This function handles Pendable request for system service. + */ +void PendSV_Handler(void) +{ + /* USER CODE BEGIN PendSV_IRQn 0 */ + + /* USER CODE END PendSV_IRQn 0 */ + /* USER CODE BEGIN PendSV_IRQn 1 */ + + /* USER CODE END PendSV_IRQn 1 */ +} + +/** + * @brief This function handles System tick timer. + */ +void SysTick_Handler(void) +{ + /* USER CODE BEGIN SysTick_IRQn 0 */ + + /* USER CODE END SysTick_IRQn 0 */ + HAL_IncTick(); + /* USER CODE BEGIN SysTick_IRQn 1 */ + + /* USER CODE END SysTick_IRQn 1 */ +} + +/******************************************************************************/ +/* STM32G0xx Peripheral Interrupt Handlers */ +/* Add here the Interrupt Handlers for the used peripherals. */ +/* For the available peripheral interrupt handler names, */ +/* please refer to the startup file (startup_stm32g0xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles DMA1 channel 1 interrupt. + */ +void DMA1_Channel1_IRQHandler(void) +{ + /* USER CODE BEGIN DMA1_Channel1_IRQn 0 */ + + /* USER CODE END DMA1_Channel1_IRQn 0 */ + HAL_DMA_IRQHandler(&hdma_spi1_rx); + /* USER CODE BEGIN DMA1_Channel1_IRQn 1 */ + + /* USER CODE END DMA1_Channel1_IRQn 1 */ +} + +/** + * @brief This function handles DMA1 channel 2 and channel 3 interrupts. + */ +void DMA1_Channel2_3_IRQHandler(void) +{ + /* USER CODE BEGIN DMA1_Channel2_3_IRQn 0 */ + + /* USER CODE END DMA1_Channel2_3_IRQn 0 */ + HAL_DMA_IRQHandler(&hdma_adc1); + /* USER CODE BEGIN DMA1_Channel2_3_IRQn 1 */ + + /* USER CODE END DMA1_Channel2_3_IRQn 1 */ +} + +/** + * @brief This function handles ADC1, COMP1 and COMP2 interrupts (COMP interrupts through EXTI lines 17 and 18). + */ +void ADC1_COMP_IRQHandler(void) +{ + /* USER CODE BEGIN ADC1_COMP_IRQn 0 */ + + /* USER CODE END ADC1_COMP_IRQn 0 */ + HAL_ADC_IRQHandler(&hadc1); + /* USER CODE BEGIN ADC1_COMP_IRQn 1 */ + + /* USER CODE END ADC1_COMP_IRQn 1 */ +} + +/** + * @brief This function handles I2C2 global interrupt. + */ +void I2C2_IRQHandler(void) +{ + /* USER CODE BEGIN I2C2_IRQn 0 */ + + /* USER CODE END I2C2_IRQn 0 */ + if (hi2c2.Instance->ISR & (I2C_FLAG_BERR | I2C_FLAG_ARLO | I2C_FLAG_OVR)) { + HAL_I2C_ER_IRQHandler(&hi2c2); + } else { + HAL_I2C_EV_IRQHandler(&hi2c2); + } + /* USER CODE BEGIN I2C2_IRQn 1 */ + + /* USER CODE END I2C2_IRQn 1 */ +} + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/STM32/Core/Src/syscalls.c b/STM32/Core/Src/syscalls.c new file mode 100644 index 0000000..4ec9584 --- /dev/null +++ b/STM32/Core/Src/syscalls.c @@ -0,0 +1,159 @@ +/** + ****************************************************************************** + * @file syscalls.c + * @author Auto-generated by STM32CubeIDE + * @brief STM32CubeIDE Minimal System calls file + * + * For more information about which c-functions + * need which of these lowlevel functions + * please consult the Newlib libc-manual + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2020 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/* Includes */ +#include +#include +#include +#include +#include +#include +#include +#include + + +/* Variables */ +//#undef errno +extern int errno; +extern int __io_putchar(int ch) __attribute__((weak)); +extern int __io_getchar(void) __attribute__((weak)); + +register char * stack_ptr asm("sp"); + +char *__env[1] = { 0 }; +char **environ = __env; + + +/* Functions */ +void initialise_monitor_handles() +{ +} + +int _getpid(void) +{ + return 1; +} + +int _kill(int pid, int sig) +{ + errno = EINVAL; + return -1; +} + +void _exit (int status) +{ + _kill(status, -1); + while (1) {} /* Make sure we hang here */ +} + +__attribute__((weak)) int _read(int file, char *ptr, int len) +{ + int DataIdx; + + for (DataIdx = 0; DataIdx < len; DataIdx++) + { + *ptr++ = __io_getchar(); + } + +return len; +} + +__attribute__((weak)) int _write(int file, char *ptr, int len) +{ + int DataIdx; + + for (DataIdx = 0; DataIdx < len; DataIdx++) + { + __io_putchar(*ptr++); + } + return len; +} + +int _close(int file) +{ + return -1; +} + + +int _fstat(int file, struct stat *st) +{ + st->st_mode = S_IFCHR; + return 0; +} + +int _isatty(int file) +{ + return 1; +} + +int _lseek(int file, int ptr, int dir) +{ + return 0; +} + +int _open(char *path, int flags, ...) +{ + /* Pretend like we always fail */ + return -1; +} + +int _wait(int *status) +{ + errno = ECHILD; + return -1; +} + +int _unlink(char *name) +{ + errno = ENOENT; + return -1; +} + +int _times(struct tms *buf) +{ + return -1; +} + +int _stat(char *file, struct stat *st) +{ + st->st_mode = S_IFCHR; + return 0; +} + +int _link(char *old, char *new) +{ + errno = EMLINK; + return -1; +} + +int _fork(void) +{ + errno = EAGAIN; + return -1; +} + +int _execve(char *name, char **argv, char **env) +{ + errno = ENOMEM; + return -1; +} diff --git a/STM32/Core/Src/sysmem.c b/STM32/Core/Src/sysmem.c new file mode 100644 index 0000000..23180b6 --- /dev/null +++ b/STM32/Core/Src/sysmem.c @@ -0,0 +1,80 @@ +/** + ****************************************************************************** + * @file sysmem.c + * @author Generated by STM32CubeIDE + * @brief STM32CubeIDE System Memory calls file + * + * For more information about which C functions + * need which of these lowlevel functions + * please consult the newlib libc manual + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2020 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/* Includes */ +#include +#include + +/** + * Pointer to the current high watermark of the heap usage + */ +static uint8_t *__sbrk_heap_end = NULL; + +/** + * @brief _sbrk() allocates memory to the newlib heap and is used by malloc + * and others from the C library + * + * @verbatim + * ############################################################################ + * # .data # .bss # newlib heap # MSP stack # + * # # # # Reserved by _Min_Stack_Size # + * ############################################################################ + * ^-- RAM start ^-- _end _estack, RAM end --^ + * @endverbatim + * + * This implementation starts allocating at the '_end' linker symbol + * The '_Min_Stack_Size' linker symbol reserves a memory for the MSP stack + * The implementation considers '_estack' linker symbol to be RAM end + * NOTE: If the MSP stack, at any point during execution, grows larger than the + * reserved size, please increase the '_Min_Stack_Size'. + * + * @param incr Memory size + * @return Pointer to allocated memory + */ +void *_sbrk(ptrdiff_t incr) +{ + extern uint8_t _end; /* Symbol defined in the linker script */ + extern uint8_t _estack; /* Symbol defined in the linker script */ + extern uint32_t _Min_Stack_Size; /* Symbol defined in the linker script */ + const uint32_t stack_limit = (uint32_t)&_estack - (uint32_t)&_Min_Stack_Size; + const uint8_t *max_heap = (uint8_t *)stack_limit; + uint8_t *prev_heap_end; + + /* Initalize heap end at first call */ + if (NULL == __sbrk_heap_end) + { + __sbrk_heap_end = &_end; + } + + /* Protect heap from growing into the reserved MSP stack */ + if (__sbrk_heap_end + incr > max_heap) + { + errno = ENOMEM; + return (void *)-1; + } + + prev_heap_end = __sbrk_heap_end; + __sbrk_heap_end += incr; + + return (void *)prev_heap_end; +} diff --git a/STM32/Core/Src/system_stm32g0xx.c b/STM32/Core/Src/system_stm32g0xx.c new file mode 100644 index 0000000..5e28c2a --- /dev/null +++ b/STM32/Core/Src/system_stm32g0xx.c @@ -0,0 +1,290 @@ +/** + ****************************************************************************** + * @file system_stm32g0xx.c + * @author MCD Application Team + * @brief CMSIS Cortex-M0+ Device Peripheral Access Layer System Source File + * + * This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32g0xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * After each device reset the HSI (8 MHz then 16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32g0xx.s" file, to + * configure the system clock before to branch to main program. + * + * This file configures the system clock as follows: + *============================================================================= + *----------------------------------------------------------------------------- + * System Clock source | HSI + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 16000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 16000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB Prescaler | 1 + *----------------------------------------------------------------------------- + * HSI Division factor | 1 + *----------------------------------------------------------------------------- + * PLL_M | 1 + *----------------------------------------------------------------------------- + * PLL_N | 8 + *----------------------------------------------------------------------------- + * PLL_P | 7 + *----------------------------------------------------------------------------- + * PLL_Q | 2 + *----------------------------------------------------------------------------- + * PLL_R | 2 + *----------------------------------------------------------------------------- + * Require 48MHz for RNG | Disabled + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2018 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32g0xx_system + * @{ + */ + +/** @addtogroup STM32G0xx_System_Private_Includes + * @{ + */ + +#include "stm32g0xx.h" + +#if !defined (HSE_VALUE) +#define HSE_VALUE (8000000UL) /*!< Value of the External oscillator in Hz */ +#endif /* HSE_VALUE */ + +#if !defined (HSI_VALUE) + #define HSI_VALUE (16000000UL) /*!< Value of the Internal oscillator in Hz*/ +#endif /* HSI_VALUE */ + +#if !defined (LSI_VALUE) + #define LSI_VALUE (32000UL) /*!< Value of LSI in Hz*/ +#endif /* LSI_VALUE */ + +#if !defined (LSE_VALUE) + #define LSE_VALUE (32768UL) /*!< Value of LSE in Hz*/ +#endif /* LSE_VALUE */ + +/** + * @} + */ + +/** @addtogroup STM32G0xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32G0xx_System_Private_Defines + * @{ + */ + +/************************* Miscellaneous Configuration ************************/ +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x0U /*!< Vector Table base offset field. + This value must be a multiple of 0x100. */ +/******************************************************************************/ +/** + * @} + */ + +/** @addtogroup STM32G0xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32G0xx_System_Private_Variables + * @{ + */ + /* The SystemCoreClock variable is updated in three ways: + 1) by calling CMSIS function SystemCoreClockUpdate() + 2) by calling HAL API function HAL_RCC_GetHCLKFreq() + 3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency + Note: If you use this function to configure the system clock; then there + is no need to call the 2 first functions listed above, since SystemCoreClock + variable is updated automatically. + */ + uint32_t SystemCoreClock = 16000000UL; + + const uint32_t AHBPrescTable[16UL] = {0UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL, 1UL, 2UL, 3UL, 4UL, 6UL, 7UL, 8UL, 9UL}; + const uint32_t APBPrescTable[8UL] = {0UL, 0UL, 0UL, 0UL, 1UL, 2UL, 3UL, 4UL}; + +/** + * @} + */ + +/** @addtogroup STM32G0xx_System_Private_FunctionPrototypes + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32G0xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(**) / HSI division factor + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(***) + * + * - If SYSCLK source is LSI, SystemCoreClock will contain the LSI_VALUE + * + * - If SYSCLK source is LSE, SystemCoreClock will contain the LSE_VALUE + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(***) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (**) HSI_VALUE is a constant defined in stm32g0xx_hal_conf.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (***) HSE_VALUE is a constant defined in stm32g0xx_hal_conf.h file (default value + * 8 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +//void SystemCoreClockUpdate(void) +//{ +// uint32_t tmp; +// uint32_t pllvco; +// uint32_t pllr; +// uint32_t pllsource; +// uint32_t pllm; +// uint32_t hsidiv; +// +// /* Get SYSCLK source -------------------------------------------------------*/ +// switch (RCC->CFGR & RCC_CFGR_SWS) +// { +// case RCC_CFGR_SWS_HSE: /* HSE used as system clock */ RCC_ +// SystemCoreClock = HSE_VALUE; +// break; +// +// case RCC_CFGR_SWS_LSI: /* LSI used as system clock */ +// SystemCoreClock = LSI_VALUE; +// break; +// +// case RCC_CFGR_SWS_LSE: /* LSE used as system clock */ +// SystemCoreClock = LSE_VALUE; +// break; +// +// case RCC_CFGR_SWS_PLL: /* PLL used as system clock */ +// /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLLM) * PLLN +// SYSCLK = PLL_VCO / PLLR +// */ +// pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC); +// pllm = ((RCC->PLLCFGR & RCC_PLLCFGR_PLLM) >> RCC_PLLCFGR_PLLM_Pos) + 1UL; +// +// if(pllsource == 0x03UL) /* HSE used as PLL clock source */ +// { +// pllvco = (HSE_VALUE / pllm); +// } +// else /* HSI used as PLL clock source */ +// { +// pllvco = (HSI_VALUE / pllm); +// } +// pllvco = pllvco * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos); +// pllr = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLR) >> RCC_PLLCFGR_PLLR_Pos) + 1UL); +// +// SystemCoreClock = pllvco/pllr; +// break; +// +// case RCC_CFGR_SWS_HSI: /* HSI used as system clock */ +// default: /* HSI used as system clock */ +// hsidiv = (1UL << ((READ_BIT(RCC->CR, RCC_CR_HSIDIV))>> RCC_CR_HSIDIV_Pos)); +// SystemCoreClock = (HSI_VALUE/hsidiv); +// break; +// } +// /* Compute HCLK clock frequency --------------------------------------------*/ +// /* Get HCLK prescaler */ +// tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> RCC_CFGR_HPRE_Pos)]; +// /* HCLK clock frequency */ +// SystemCoreClock >>= tmp; +//} + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/STM32/noise_sensor.ioc b/STM32/noise_sensor.ioc new file mode 100644 index 0000000..88f26dd --- /dev/null +++ b/STM32/noise_sensor.ioc @@ -0,0 +1,271 @@ +#MicroXplorer Configuration settings - do not modify +ADC1.Channel-1\#ChannelRegularConversion=ADC_CHANNEL_2 +ADC1.Channel-2\#ChannelRegularConversion=ADC_CHANNEL_9 +ADC1.Channel-4\#ChannelRegularConversion=ADC_CHANNEL_VREFINT +ADC1.ChannelVREF=ADC_CHANNEL_VREFINT +ADC1.DMAContinuousRequests=ENABLE +ADC1.IPParameters=Rank-1\#ChannelRegularConversion,Channel-1\#ChannelRegularConversion,SamplingTime-1\#ChannelRegularConversion,NbrOfConversionFlag,Rank-2\#ChannelRegularConversion,Channel-2\#ChannelRegularConversion,SamplingTime-2\#ChannelRegularConversion,NbrOfConversion,DMAContinuousRequests,master,SelectedChannel,Rank-4\#ChannelRegularConversion,Channel-4\#ChannelRegularConversion,SamplingTime-4\#ChannelRegularConversion,ChannelVREF +ADC1.NbrOfConversion=3 +ADC1.NbrOfConversionFlag=1 +ADC1.Rank-1\#ChannelRegularConversion=1 +ADC1.Rank-2\#ChannelRegularConversion=2 +ADC1.Rank-4\#ChannelRegularConversion=3 +ADC1.SamplingTime-1\#ChannelRegularConversion=ADC_SAMPLINGTIME_COMMON_1 +ADC1.SamplingTime-2\#ChannelRegularConversion=ADC_SAMPLINGTIME_COMMON_1 +ADC1.SamplingTime-4\#ChannelRegularConversion=ADC_SAMPLINGTIME_COMMON_1 +ADC1.SelectedChannel=ADC_CHANNEL_2|ADC_CHANNEL_9|ADC_CHANNEL_VREFINT +ADC1.master=1 +Dma.ADC1.1.Direction=DMA_PERIPH_TO_MEMORY +Dma.ADC1.1.EventEnable=DISABLE +Dma.ADC1.1.Instance=DMA1_Channel2 +Dma.ADC1.1.MemDataAlignment=DMA_MDATAALIGN_WORD +Dma.ADC1.1.MemInc=DMA_MINC_ENABLE +Dma.ADC1.1.Mode=DMA_CIRCULAR +Dma.ADC1.1.PeriphDataAlignment=DMA_PDATAALIGN_WORD +Dma.ADC1.1.PeriphInc=DMA_PINC_DISABLE +Dma.ADC1.1.Polarity=HAL_DMAMUX_REQ_GEN_RISING +Dma.ADC1.1.Priority=DMA_PRIORITY_LOW +Dma.ADC1.1.RequestNumber=1 +Dma.ADC1.1.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,SignalID,Polarity,RequestNumber,SyncSignalID,SyncPolarity,SyncEnable,EventEnable,SyncRequestNumber +Dma.ADC1.1.SignalID=NONE +Dma.ADC1.1.SyncEnable=DISABLE +Dma.ADC1.1.SyncPolarity=HAL_DMAMUX_SYNC_NO_EVENT +Dma.ADC1.1.SyncRequestNumber=1 +Dma.ADC1.1.SyncSignalID=NONE +Dma.Request0=SPI1_RX +Dma.Request1=ADC1 +Dma.RequestsNb=2 +Dma.SPI1_RX.0.Direction=DMA_PERIPH_TO_MEMORY +Dma.SPI1_RX.0.EventEnable=DISABLE +Dma.SPI1_RX.0.Instance=DMA1_Channel1 +Dma.SPI1_RX.0.MemDataAlignment=DMA_MDATAALIGN_HALFWORD +Dma.SPI1_RX.0.MemInc=DMA_MINC_ENABLE +Dma.SPI1_RX.0.Mode=DMA_CIRCULAR +Dma.SPI1_RX.0.PeriphDataAlignment=DMA_PDATAALIGN_HALFWORD +Dma.SPI1_RX.0.PeriphInc=DMA_PINC_DISABLE +Dma.SPI1_RX.0.Polarity=HAL_DMAMUX_REQ_GEN_RISING +Dma.SPI1_RX.0.Priority=DMA_PRIORITY_LOW +Dma.SPI1_RX.0.RequestNumber=1 +Dma.SPI1_RX.0.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,SignalID,Polarity,RequestNumber,SyncSignalID,SyncPolarity,SyncEnable,EventEnable,SyncRequestNumber +Dma.SPI1_RX.0.SignalID=NONE +Dma.SPI1_RX.0.SyncEnable=DISABLE +Dma.SPI1_RX.0.SyncPolarity=HAL_DMAMUX_SYNC_NO_EVENT +Dma.SPI1_RX.0.SyncRequestNumber=1 +Dma.SPI1_RX.0.SyncSignalID=NONE +File.Version=6 +GPIO.groupedBy=Group By Peripherals +I2C2.I2C_Speed_Mode=I2C_Fast +I2C2.IPParameters=I2C_Speed_Mode,OwnAddress,Timing +I2C2.OwnAddress=0x3C +I2C2.Timing=0x0010061A +I2S1.AudioFreq=I2S_AUDIOFREQ_22K +I2S1.DataFormat=I2S_DATAFORMAT_24B +I2S1.ErrorAudioFreq=3.3 % +I2S1.FullDuplexMode=I2S_FULLDUPLEXMODE_DISABLE +I2S1.IPParameters=Instance,VirtualMode,FullDuplexMode,RealAudioFreq,ErrorAudioFreq,Mode,DataFormat,AudioFreq +I2S1.Instance=SPI$Index +I2S1.Mode=I2S_MODE_MASTER_RX +I2S1.RealAudioFreq=22.727 KHz +I2S1.VirtualMode=I2S_MODE_MASTER +KeepUserPlacement=false +Mcu.Family=STM32G0 +Mcu.IP0=ADC1 +Mcu.IP1=DMA +Mcu.IP2=I2C2 +Mcu.IP3=I2S1 +Mcu.IP4=NVIC +Mcu.IP5=RCC +Mcu.IP6=SPI2 +Mcu.IP7=SYS +Mcu.IP8=TIM2 +Mcu.IP9=USART4 +Mcu.IPNb=10 +Mcu.Name=STM32G071K(6-8-B)Tx +Mcu.Package=LQFP32 +Mcu.Pin0=PA0 +Mcu.Pin1=PA1 +Mcu.Pin10=PC6 +Mcu.Pin11=PA11 [PA9] +Mcu.Pin12=PA12 [PA10] +Mcu.Pin13=PA13 +Mcu.Pin14=PA14-BOOT0 +Mcu.Pin15=PA15 +Mcu.Pin16=PB3 +Mcu.Pin17=PB5 +Mcu.Pin18=PB8 +Mcu.Pin19=VP_ADC1_Vref_Input +Mcu.Pin2=PA2 +Mcu.Pin20=VP_SYS_VS_Systick +Mcu.Pin21=VP_SYS_VS_DBSignals +Mcu.Pin22=VP_TIM2_VS_ClockSourceINT +Mcu.Pin3=PA3 +Mcu.Pin4=PA4 +Mcu.Pin5=PA5 +Mcu.Pin6=PA6 +Mcu.Pin7=PA7 +Mcu.Pin8=PB0 +Mcu.Pin9=PB1 +Mcu.PinsNb=23 +Mcu.ThirdPartyNb=0 +Mcu.UserConstants= +Mcu.UserName=STM32G071KBTx +MxCube.Version=6.1.1 +MxDb.Version=DB.6.0.10 +NVIC.ADC1_COMP_IRQn=true\:0\:0\:false\:false\:true\:true\:true +NVIC.DMA1_Channel1_IRQn=true\:0\:0\:false\:false\:true\:false\:true +NVIC.DMA1_Channel2_3_IRQn=true\:0\:0\:false\:false\:true\:false\:true +NVIC.ForceEnableDMAVector=true +NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false +NVIC.I2C2_IRQn=true\:0\:0\:false\:false\:true\:true\:true +NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false +NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false\:false +NVIC.SVC_IRQn=true\:0\:0\:false\:false\:true\:false\:false +NVIC.SysTick_IRQn=true\:0\:0\:false\:false\:true\:false\:true +PA0.Locked=true +PA0.Mode=Asynchronous +PA0.Signal=USART4_TX +PA1.Locked=true +PA1.Mode=Asynchronous +PA1.Signal=USART4_RX +PA11\ [PA9].Mode=I2C +PA11\ [PA9].Signal=I2C2_SCL +PA12\ [PA10].Locked=true +PA12\ [PA10].Mode=I2C +PA12\ [PA10].Signal=I2C2_SDA +PA13.Mode=Serial_Wire +PA13.Signal=SYS_SWDIO +PA14-BOOT0.Mode=Serial_Wire +PA14-BOOT0.Signal=SYS_SWCLK +PA15.Locked=true +PA15.Mode=Half_Duplex_Master +PA15.Signal=I2S1_WS +PA2.GPIOParameters=GPIO_Label +PA2.GPIO_Label=Device_ID +PA2.Locked=true +PA2.Mode=IN2 +PA2.Signal=ADC1_IN2 +PA3.Locked=true +PA3.Mode=Full_Duplex_Master +PA3.Signal=SPI2_MISO +PA4.Mode=Full_Duplex_Master +PA4.Signal=SPI2_MOSI +PA5.GPIOParameters=PinState,GPIO_Label +PA5.GPIO_Label=NSS +PA5.Locked=true +PA5.PinState=GPIO_PIN_SET +PA5.Signal=GPIO_Output +PA6.GPIOParameters=GPIO_Label +PA6.GPIO_Label=LED +PA6.Locked=true +PA6.Signal=GPIO_Output +PA7.GPIOParameters=GPIO_Label +PA7.GPIO_Label=RESET +PA7.Locked=true +PA7.Signal=GPIO_Output +PB0.GPIOParameters=GPIO_PuPd +PB0.GPIO_PuPd=GPIO_NOPULL +PB0.Locked=true +PB0.Signal=GPIO_Input +PB1.GPIOParameters=GPIO_Label +PB1.GPIO_Label=BAT_Monitor +PB1.Locked=true +PB1.Mode=IN9 +PB1.Signal=ADC1_IN9 +PB3.Locked=true +PB3.Mode=Half_Duplex_Master +PB3.Signal=I2S1_CK +PB5.Locked=true +PB5.Mode=Half_Duplex_Master +PB5.Signal=I2S1_SD +PB8.Mode=Full_Duplex_Master +PB8.Signal=SPI2_SCK +PC6.GPIOParameters=GPIO_PuPd,GPIO_Label +PC6.GPIO_Label=I2C_Address +PC6.GPIO_PuPd=GPIO_PULLUP +PC6.Locked=true +PC6.Signal=GPIO_Input +PinOutPanel.RotationAngle=0 +ProjectManager.AskForMigrate=true +ProjectManager.BackupPrevious=false +ProjectManager.CompilerOptimize=6 +ProjectManager.ComputerToolchain=false +ProjectManager.CoupleFile=false +ProjectManager.CustomerFirmwarePackage= +ProjectManager.DefaultFWLocation=true +ProjectManager.DeletePrevious=true +ProjectManager.DeviceId=STM32G071KBTx +ProjectManager.FirmwarePackage=STM32Cube FW_G0 V1.4.0 +ProjectManager.FreePins=false +ProjectManager.HalAssertFull=false +ProjectManager.HeapSize=0x200 +ProjectManager.KeepUserCode=true +ProjectManager.LastFirmware=true +ProjectManager.LibraryCopy=1 +ProjectManager.MainLocation=Core/Src +ProjectManager.NoMain=false +ProjectManager.PreviousToolchain= +ProjectManager.ProjectBuild=false +ProjectManager.ProjectFileName=noise_sensor.ioc +ProjectManager.ProjectName=noise_sensor +ProjectManager.RegisterCallBack=ADC,I2C,I2S +ProjectManager.StackSize=0x400 +ProjectManager.TargetToolchain=STM32CubeIDE +ProjectManager.ToolChainLocation= +ProjectManager.UnderRoot=true +ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-MX_DMA_Init-DMA-false-HAL-true,3-SystemClock_Config-RCC-false-HAL-false,4-MX_ADC1_Init-ADC1-false-HAL-true,5-MX_I2S1_Init-I2S1-false-HAL-true,6-MX_SPI2_Init-SPI2-false-HAL-true,7-MX_I2C2_Init-I2C2-false-HAL-true,8-MX_USART4_UART_Init-USART4-false-HAL-true,9-MX_TIM2_Init-TIM2-false-HAL-true +RCC.ADCFreq_Value=16000000 +RCC.AHBFreq_Value=16000000 +RCC.APBFreq_Value=16000000 +RCC.APBTimFreq_Value=16000000 +RCC.CECFreq_Value=32786.88524590164 +RCC.CortexFreq_Value=16000000 +RCC.EXTERNAL_CLOCK_VALUE=48000 +RCC.FCLKCortexFreq_Value=16000000 +RCC.FamilyName=M +RCC.HCLKFreq_Value=16000000 +RCC.HSE_VALUE=8000000 +RCC.HSI_VALUE=16000000 +RCC.I2C1Freq_Value=16000000 +RCC.I2S1Freq_Value=16000000 +RCC.IPParameters=ADCFreq_Value,AHBFreq_Value,APBFreq_Value,APBTimFreq_Value,CECFreq_Value,CortexFreq_Value,EXTERNAL_CLOCK_VALUE,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI_VALUE,I2C1Freq_Value,I2S1Freq_Value,LPTIM1Freq_Value,LPTIM2Freq_Value,LPUART1Freq_Value,LSCOPinFreq_Value,LSE_VALUE,LSI_VALUE,MCO1PinFreq_Value,PLLPoutputFreq_Value,PLLQoutputFreq_Value,PLLR,PLLRCLKFreq_Value,PWRFreq_Value,SYSCLKFreq_VALUE,TIM15Freq_Value,TIM1Freq_Value,USART1Freq_Value,USART2Freq_Value,VCOInputFreq_Value,VCOOutputFreq_Value +RCC.LPTIM1Freq_Value=16000000 +RCC.LPTIM2Freq_Value=16000000 +RCC.LPUART1Freq_Value=16000000 +RCC.LSCOPinFreq_Value=32000 +RCC.LSE_VALUE=32768 +RCC.LSI_VALUE=32000 +RCC.MCO1PinFreq_Value=16000000 +RCC.PLLPoutputFreq_Value=64000000 +RCC.PLLQoutputFreq_Value=64000000 +RCC.PLLR=RCC_PLLR_DIV4 +RCC.PLLRCLKFreq_Value=32000000 +RCC.PWRFreq_Value=16000000 +RCC.SYSCLKFreq_VALUE=16000000 +RCC.TIM15Freq_Value=16000000 +RCC.TIM1Freq_Value=16000000 +RCC.USART1Freq_Value=16000000 +RCC.USART2Freq_Value=16000000 +RCC.VCOInputFreq_Value=16000000 +RCC.VCOOutputFreq_Value=128000000 +SPI2.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_2 +SPI2.CalculateBaudRate=8.0 MBits/s +SPI2.DataSize=SPI_DATASIZE_8BIT +SPI2.Direction=SPI_DIRECTION_2LINES +SPI2.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,DataSize,BaudRatePrescaler +SPI2.Mode=SPI_MODE_MASTER +SPI2.VirtualType=VM_MASTER +TIM2.IPParameters=Prescaler +TIM2.Prescaler=16-1 +USART4.IPParameters=VirtualMode-Asynchronous,Mode +USART4.Mode=MODE_TX +USART4.VirtualMode-Asynchronous=VM_ASYNC +VP_ADC1_Vref_Input.Mode=IN-Vrefint +VP_ADC1_Vref_Input.Signal=ADC1_Vref_Input +VP_SYS_VS_DBSignals.Mode=DisableDeadBatterySignals +VP_SYS_VS_DBSignals.Signal=SYS_VS_DBSignals +VP_SYS_VS_Systick.Mode=SysTick +VP_SYS_VS_Systick.Signal=SYS_VS_Systick +VP_TIM2_VS_ClockSourceINT.Mode=Internal +VP_TIM2_VS_ClockSourceINT.Signal=TIM2_VS_ClockSourceINT +board=custom +isbadioc=false