diff --git a/hardware/pcb/Dumber-v3/dumber-v3/dumber-v3.kicad_pcb b/hardware/pcb/Dumber-v3/dumber-v3/dumber-v3.kicad_pcb index d4fde64..755d3c5 100644 --- a/hardware/pcb/Dumber-v3/dumber-v3/dumber-v3.kicad_pcb +++ b/hardware/pcb/Dumber-v3/dumber-v3/dumber-v3.kicad_pcb @@ -535,78 +535,55 @@ ) ) - (footprint "Battery:BatteryHolder_Keystone_2460_1xAA" locked (layer "F.Cu") - (tedit 5DBEA3CC) (tstamp 8b41067e-6e69-443e-93db-d62bc8903b11) - (at 180.975 131.5 90) - (descr "https://www.keyelco.com/product-pdf.cfm?p=1025") - (tags "AA battery cell holder") + (footprint "INSA:Battery-14500" locked (layer "F.Cu") + (tedit 0) (tstamp 8b41067e-6e69-443e-93db-d62bc8903b11) + (at 180.5 106 90) (property "Sheetfile" "power_charge.kicad_sch") (property "Sheetname" "Power_Charge") (path "/3615d78e-1dd3-4b20-9017-3539b8f88e06/053dd8a9-6683-412e-b95b-646ea38b2cad") (attr through_hole) - (fp_text reference "BT1" (at -3.755 -7.62 180) (layer "F.SilkS") + (fp_text reference "BT1" (at -29.128 9.492 90 unlocked) (layer "F.SilkS") (effects (font (size 1 1) (thickness 0.15))) - (tstamp d9addb3d-b4aa-4664-9c96-05fa8d34341d) + (tstamp 5034a73b-0aa4-4c23-869f-d7ee02821d02) ) - (fp_text value "Li-ION" (at 24.5 0 90) (layer "F.Fab") + (fp_text value "Li-ION" (at 0 14 90 unlocked) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))) - (tstamp 6a0e3a45-bd1d-4a3b-a233-c28d7e1ed6ab) + (tstamp 0541344d-2824-4d54-a87f-e4ddd641ab5b) ) - (fp_text user "+" (at -3.4 -0.06 90) (layer "F.SilkS") - (effects (font (size 1 1) (thickness 0.15))) - (tstamp 07e5c169-a3a9-4f7c-bf6f-f7ca16b1837e) + (fp_text user "+" (at -32 0 90 unlocked) (layer "F.SilkS") + (effects (font (size 2.5 2.5) (thickness 0.3))) + (tstamp a647c7a1-8f07-42b5-b7c7-794faf831ecc) ) - (fp_text user "-" (at 55.37 -0.06 90) (layer "F.SilkS") - (effects (font (size 1 1) (thickness 0.15))) - (tstamp 152ad189-81fe-41d9-a363-eac8aa9cae93) + (fp_text user "-" (at 32 -0.2 90 unlocked) (layer "F.SilkS") + (effects (font (size 2.5 2.5) (thickness 0.3))) + (tstamp aacb8f2b-8b29-49cc-9388-1f600e34db83) ) - (fp_text user "${REFERENCE}" (at 0.01 -0.06 90) (layer "F.Fab") - (effects (font (size 1 1) (thickness 0.15))) - (tstamp d3b88131-b8a2-4ecd-8e4a-7c7e29c13c9c) - ) - (fp_line (start 18.1 -5.6) (end 33.9 -5.6) (layer "F.SilkS") (width 0.12) (tstamp 10aa8f78-c1ff-4f20-a772-e321c180bf35)) - (fp_line (start 50.31 -4.06) (end 50.31 3.94) (layer "F.SilkS") (width 0.12) (tstamp 1a8caf80-6062-4c25-86bc-e7a12e348126)) - (fp_line (start 49.31 2.94) (end 49.31 -3.06) (layer "F.SilkS") (width 0.12) (tstamp 22f27340-72c5-496d-90b9-382b0d5a61cf)) - (fp_line (start 47.31 -1.06) (end 47.31 0.94) (layer "F.SilkS") (width 0.12) (tstamp 367f7182-1373-4c99-84f2-539c0e5603e4)) - (fp_line (start -1.9 7.6) (end 16.1 7.6) (layer "F.SilkS") (width 0.12) (tstamp 36f5c5c9-fbfb-46ed-ab79-3db68f4bfebd)) - (fp_line (start -1.9 -7.6) (end -1.9 7.6) (layer "F.SilkS") (width 0.12) (tstamp 3a66a4e2-6339-4444-9fcd-74e15b58236b)) - (fp_line (start 54.62 8.565) (end -2.62 8.565) (layer "F.SilkS") (width 0.12) (tstamp 47d751f8-d530-408d-b146-563f0c91f9cf)) - (fp_line (start 33.9 5.6) (end 18.1 5.6) (layer "F.SilkS") (width 0.12) (tstamp 5f9d0eea-b7f5-4818-927e-8d41bff32c4f)) - (fp_line (start -2.62 -8.565) (end 54.62 -8.565) (layer "F.SilkS") (width 0.12) (tstamp 603453ab-665b-4245-8768-8bc6644a3b45)) - (fp_line (start 35.9 7.6) (end 53.9 7.6) (layer "F.SilkS") (width 0.12) (tstamp 63e3517f-022d-40cc-975d-a14fce9f7c40)) - (fp_line (start -1.9 -7.6) (end 16.1 -7.6) (layer "F.SilkS") (width 0.12) (tstamp 6d06a57c-e77b-49b4-8c0d-58707a7e4fa1)) - (fp_line (start 53.9 -7.6) (end 53.9 7.6) (layer "F.SilkS") (width 0.12) (tstamp 6fd0bb76-b760-4c3f-80d3-ac633bd454d6)) - (fp_line (start 54.62 -8.565) (end 54.62 8.565) (layer "F.SilkS") (width 0.12) (tstamp 8174e340-cf91-4a09-9d89-66e2ffaf6dcd)) - (fp_line (start 48.31 -2.06) (end 48.31 1.94) (layer "F.SilkS") (width 0.12) (tstamp b1f4efd2-287d-4f69-83d5-72d044b05a1c)) - (fp_line (start 35.9 -7.6) (end 53.9 -7.6) (layer "F.SilkS") (width 0.12) (tstamp c456af8b-919f-473c-8426-3fe53d0f1c42)) - (fp_line (start -2.62 8.565) (end -2.62 -8.565) (layer "F.SilkS") (width 0.12) (tstamp f3d219ef-5ae4-47f1-8f54-9354d94687d4)) - (fp_arc (start 35.9 -7.6) (mid 35.314214 -6.185786) (end 33.9 -5.6) (layer "F.SilkS") (width 0.12) (tstamp a33d4e88-f65d-448d-985e-0ed5765879df)) - (fp_arc (start 16.1 7.6) (mid 16.685786 6.185786) (end 18.1 5.6) (layer "F.SilkS") (width 0.12) (tstamp ba4d9348-1253-4eaf-a089-4b4ff1ed132c)) - (fp_arc (start 18.1 -5.6) (mid 16.685786 -6.185786) (end 16.1 -7.6) (layer "F.SilkS") (width 0.12) (tstamp d8690ea1-7c06-424c-9eed-270587aa2bf6)) - (fp_arc (start 33.9 5.6) (mid 35.314214 6.185786) (end 35.9 7.6) (layer "F.SilkS") (width 0.12) (tstamp daa76c1a-294f-468e-87f3-dbeaaba54045)) - (fp_line (start -2.75 8.7) (end -2.75 -8.7) (layer "F.CrtYd") (width 0.05) (tstamp 2dcb98ae-9b2f-4d0b-8faf-5786b3a686c3)) - (fp_line (start 54.75 -8.7) (end 54.75 8.7) (layer "F.CrtYd") (width 0.05) (tstamp 9213585f-9345-4d81-8ed3-e42cdc867493)) - (fp_line (start -2.75 -8.7) (end 54.75 -8.7) (layer "F.CrtYd") (width 0.05) (tstamp cd7a07fb-61f3-4960-9a8a-4f88b2da37c1)) - (fp_line (start 54.75 8.7) (end -2.75 8.7) (layer "F.CrtYd") (width 0.05) (tstamp fd2c49bc-4ca7-4cac-a05f-c12bbee2841a)) - (fp_line (start -2.5 -8.445) (end -2.5 8.445) (layer "F.Fab") (width 0.1) (tstamp 28bb66b0-a4e5-42c9-a7b6-e988a1a777b3)) - (fp_line (start 54.5 8.445) (end 54.5 -8.445) (layer "F.Fab") (width 0.1) (tstamp 2a692316-e077-48e0-8173-f92cac27635a)) - (fp_line (start 54.5 -8.445) (end -2.5 -8.445) (layer "F.Fab") (width 0.1) (tstamp 9680adb9-c8aa-4b42-a883-64e1961dbc3a)) - (fp_line (start -2.5 8.445) (end 54.5 8.445) (layer "F.Fab") (width 0.1) (tstamp d4dbb5ce-4e8f-4556-a2a2-9f416d7a855d)) - (pad "" np_thru_hole circle locked (at 49.23 5.995 90) (size 2.64 2.64) (drill 2.64) (layers *.Cu *.Mask) (tstamp 88d417f2-24c5-4ff6-b100-29b6f3273425)) - (pad "" np_thru_hole circle locked (at 2.75 -5.995 180) (size 2.64 2.64) (drill 2.64) (layers *.Cu *.Mask) (tstamp e8d20cf8-7e82-413f-9d8d-32eb81028bec)) - (pad "1" thru_hole rect locked (at 0 0 270) (size 2 2) (drill 1.02) (layers *.Cu *.Mask) - (net 1 "+BATT") (pinfunction "+") (pintype "passive") (tstamp 299c368e-aa33-41d1-a49e-f6dd0ce8bb02)) - (pad "2" thru_hole circle locked (at 51.99 0 270) (size 2 2) (drill 1.02) (layers *.Cu *.Mask) - (net 2 "GND") (pinfunction "-") (pintype "passive") (tstamp 1a5dac4e-6410-4b69-a2b9-4e10730ba1ac)) - (model "${KICAD6_3DMODEL_DIR}/Battery.3dshapes/BatteryHolder_Keystone_2460_1xAA.step" - (offset (xyz 0 0 0)) + (fp_line (start -14.2 -7.8) (end -14.2 7.8) (layer "F.SilkS") (width 0.12) (tstamp 28e71141-ff2c-40c9-9554-2ee10d8226c9)) + (fp_line (start 14.2 -7.8) (end 14.2 7.8) (layer "F.SilkS") (width 0.12) (tstamp 6aec16d3-205f-412c-9d8c-457312466c25)) + (fp_rect (start -29.8 -7.8) (end 29.8 7.8) (layer "F.SilkS") (width 0.12) (fill none) (tstamp 1992a7c6-c4b5-4e9a-ada0-bd5d4f8b1635)) + (fp_rect (start -30 -8) (end 30 8) (layer "F.CrtYd") (width 0.12) (fill none) (tstamp f65f3780-494d-4002-90ec-d1e756f2b33b)) + (pad "1" thru_hole circle locked (at -18.25 0 90) (size 3.5 3.5) (drill 1.9) (layers *.Cu *.Mask) + (net 1 "+BATT") (pinfunction "+") (pintype "passive") (tstamp 45c75864-abd8-4abd-88d6-deb4549a4439)) + (pad "1" thru_hole circle locked (at -25.85 0 90) (size 3.5 3.5) (drill 1.9) (layers *.Cu *.Mask) + (net 1 "+BATT") (pinfunction "+") (pintype "passive") (tstamp e62b0f89-e1bd-426a-bbea-98c57998968b)) + (pad "2" thru_hole circle locked (at 25.85 0 90) (size 3.5 3.5) (drill 1.9) (layers *.Cu *.Mask) + (net 2 "GND") (pinfunction "-") (pintype "passive") (tstamp e128e729-32bd-4884-8141-6ccd41e06445)) + (pad "2" thru_hole circle locked (at 18.25 0 90) (size 3.5 3.5) (drill 1.9) (layers *.Cu *.Mask) + (net 2 "GND") (pinfunction "-") (pintype "passive") (tstamp e5d1ae16-b6ce-49e5-8036-2bd33f1c03f0)) + (model "/home/dimercur/kicad/local-packages3d/Insa.3dshapes/GL2003 AA Battery Clip MPD BK-92.stp" + (offset (xyz 23 0 0)) (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) + (rotate (xyz 0 0 90)) ) - (model "/home/dimercur/kicad/local-packages3d/keystone-PN2460.STEP" - (offset (xyz 23 0.75 10.5)) + (model "/home/dimercur/kicad/local-packages3d/Insa.3dshapes/GL2003 AA Battery Clip MPD BK-92.stp" + (offset (xyz -23 0 0)) (scale (xyz 1 1 1)) - (rotate (xyz -90 0 0)) + (rotate (xyz 0 0 -90)) + ) + (model "/home/dimercur/kicad/local-packages3d/Insa.3dshapes/Saft LS 14500 AA Size Lithium Battery v2.step" + (offset (xyz 25.5 0 7.5)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 -90)) ) ) @@ -957,7 +934,7 @@ (pad "17" thru_hole circle locked (at 23.2 -14 90) (size 1.2 1.2) (drill 0.7) (layers *.Cu *.Mask) (net 43 "unconnected-(U1-Pad17)") (pinfunction "DIO3") (pintype "bidirectional+no_connect") (tstamp b6f23ec5-7ef9-47fa-a7fa-a4086e510043)) (pad "18" thru_hole circle locked (at 23.2 -16 90) (size 1.2 1.2) (drill 0.7) (layers *.Cu *.Mask) - (net 44 "unconnected-(U1-Pad18)") (pinfunction "DIO2") (pintype "bidirectional") (tstamp 01e6735d-a3ca-4409-a40a-adf8acf85dfc)) + (net 44 "unconnected-(U1-Pad18)") (pinfunction "DIO2") (pintype "bidirectional+no_connect") (tstamp 01e6735d-a3ca-4409-a40a-adf8acf85dfc)) (pad "19" thru_hole circle locked (at 23.2 -18 90) (size 1.2 1.2) (drill 0.7) (layers *.Cu *.Mask) (net 45 "unconnected-(U1-Pad19)") (pinfunction "DIO1") (pintype "bidirectional+no_connect") (tstamp 186ddc71-2599-4473-851e-61a11658ffe0)) (pad "20" thru_hole circle locked (at 23.2 -20 90) (size 1.2 1.2) (drill 0.7) (layers *.Cu *.Mask) @@ -1111,22 +1088,22 @@ (footprint "Resistor_SMD:R_0805_2012Metric" (layer "B.Cu") (tedit 5F68FEEE) (tstamp 0f00971c-65cb-4442-b3fd-ed50aea5be4d) - (at 179.705 85.8575 -90) + (at 174.752 81) (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (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") (property "Sheetfile" "power_charge.kicad_sch") (property "Sheetname" "Power_Charge") (path "/3615d78e-1dd3-4b20-9017-3539b8f88e06/e257cddb-a9e9-4642-b7b3-1ba1238ca42a") (attr smd) - (fp_text reference "R10" (at -3.3075 0 -270) (layer "B.SilkS") + (fp_text reference "R10" (at -2.032 -2.26) (layer "B.SilkS") (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) (tstamp 74f1efe0-e5ee-4b48-84a5-65a4e3f6ab9a) ) - (fp_text value "3.72K" (at 0 -1.65 -270) (layer "B.Fab") + (fp_text value "3.72K" (at 0 -1.65) (layer "B.Fab") (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) (tstamp 83594019-58db-4ff3-9c15-428167f7859d) ) - (fp_text user "${REFERENCE}" (at 0 0 -270) (layer "B.Fab") + (fp_text user "${REFERENCE}" (at 0 0) (layer "B.Fab") (effects (font (size 0.5 0.5) (thickness 0.08)) (justify mirror)) (tstamp e3f79ab4-eccc-4d0e-8e2d-c3fba7a36ea7) ) @@ -1140,9 +1117,9 @@ (fp_line (start -1 0.625) (end 1 0.625) (layer "B.Fab") (width 0.1) (tstamp 8eb83cba-8f05-4b44-b614-00e7c1c88fee)) (fp_line (start 1 -0.625) (end -1 -0.625) (layer "B.Fab") (width 0.1) (tstamp af60f5ef-cd89-422b-b157-61ea8bdc9c6b)) (fp_line (start -1 -0.625) (end -1 0.625) (layer "B.Fab") (width 0.1) (tstamp eb04ddd8-4e72-4427-a0f0-627a909bf10e)) - (pad "1" smd roundrect (at -0.9125 0 270) (size 1.025 1.4) (layers "B.Cu" "B.Paste" "B.Mask") (roundrect_rratio 0.243902) + (pad "1" smd roundrect (at -0.9125 0) (size 1.025 1.4) (layers "B.Cu" "B.Paste" "B.Mask") (roundrect_rratio 0.243902) (net 22 "Net-(R10-Pad1)") (pintype "passive") (tstamp 24b2ac9c-4848-41fa-bf5e-5a32eec75bec)) - (pad "2" smd roundrect (at 0.9125 0 270) (size 1.025 1.4) (layers "B.Cu" "B.Paste" "B.Mask") (roundrect_rratio 0.243902) + (pad "2" smd roundrect (at 0.9125 0) (size 1.025 1.4) (layers "B.Cu" "B.Paste" "B.Mask") (roundrect_rratio 0.243902) (net 10 "+5V") (pintype "passive") (tstamp 7e886bfe-0710-461f-806d-3caf0192d33a)) (model "${KICAD6_3DMODEL_DIR}/Resistor_SMD.3dshapes/R_0805_2012Metric.step" (offset (xyz 0 0 0)) @@ -1859,7 +1836,7 @@ (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) (tstamp a806835f-f872-410b-b185-6593ede2bb7f) ) - (fp_text value "R" (at 0 -1.65 90) (layer "B.Fab") + (fp_text value "1.5K" (at 0 -1.65 90) (layer "B.Fab") (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) (tstamp bb35530d-56a4-4fe5-a903-6c8ca59d0b7d) ) @@ -1998,7 +1975,7 @@ (property "Sheetname" "Power_Charge") (path "/3615d78e-1dd3-4b20-9017-3539b8f88e06/0c20669d-295e-45e5-a8a7-340d59f9a6b1") (attr smd) - (fp_text reference "R21" (at 3.81 0) (layer "B.SilkS") + (fp_text reference "R21" (at 4.445 0 90) (layer "B.SilkS") (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) (tstamp 9aaf1f23-f659-440f-a426-d37327b7ba71) ) @@ -2268,22 +2245,22 @@ (footprint "Resistor_SMD:R_0805_2012Metric" (layer "B.Cu") (tedit 5F68FEEE) (tstamp 72b90fd1-feaf-495b-8a5f-a91110b04002) - (at 179.705 89.6675 90) + (at 180.2365 84.328 180) (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (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") (property "Sheetfile" "power_charge.kicad_sch") (property "Sheetname" "Power_Charge") (path "/3615d78e-1dd3-4b20-9017-3539b8f88e06/f13b9b51-766a-4b76-a09c-958c9da8f460") (attr smd) - (fp_text reference "R11" (at -3.81 0 90) (layer "B.SilkS") + (fp_text reference "R11" (at -4.6755 6.096) (layer "B.SilkS") (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) (tstamp 4e983dfb-5205-4d58-a63a-e270399cce3d) ) - (fp_text value "1.28K" (at 0 -1.65 90) (layer "B.Fab") + (fp_text value "1.28K" (at 0 -1.65) (layer "B.Fab") (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) (tstamp 70627baa-e9a8-4014-b59f-340995e349fa) ) - (fp_text user "${REFERENCE}" (at 0 0 90) (layer "B.Fab") + (fp_text user "${REFERENCE}" (at 0 0) (layer "B.Fab") (effects (font (size 0.5 0.5) (thickness 0.08)) (justify mirror)) (tstamp 1d8f4714-bc60-43b7-92ac-167c766e8e47) ) @@ -2297,9 +2274,9 @@ (fp_line (start 1 -0.625) (end -1 -0.625) (layer "B.Fab") (width 0.1) (tstamp ce8a845f-a0e8-498e-aca1-3bd171741789)) (fp_line (start 1 0.625) (end 1 -0.625) (layer "B.Fab") (width 0.1) (tstamp def9ae6f-81a5-42c0-94cf-a861524b5f57)) (fp_line (start -1 -0.625) (end -1 0.625) (layer "B.Fab") (width 0.1) (tstamp e706fd41-2a08-4b26-8a00-da38ba4c2ba0)) - (pad "1" smd roundrect (at -0.9125 0 90) (size 1.025 1.4) (layers "B.Cu" "B.Paste" "B.Mask") (roundrect_rratio 0.243902) + (pad "1" smd roundrect (at -0.9125 0 180) (size 1.025 1.4) (layers "B.Cu" "B.Paste" "B.Mask") (roundrect_rratio 0.243902) (net 2 "GND") (pintype "passive") (tstamp 9c950c8e-abe2-45ae-9043-910b9a2ee6e8)) - (pad "2" smd roundrect (at 0.9125 0 90) (size 1.025 1.4) (layers "B.Cu" "B.Paste" "B.Mask") (roundrect_rratio 0.243902) + (pad "2" smd roundrect (at 0.9125 0 180) (size 1.025 1.4) (layers "B.Cu" "B.Paste" "B.Mask") (roundrect_rratio 0.243902) (net 22 "Net-(R10-Pad1)") (pintype "passive") (tstamp 1bc67df4-3cf5-403b-ba6e-7ad753cbdd71)) (model "${KICAD6_3DMODEL_DIR}/Resistor_SMD.3dshapes/R_0805_2012Metric.step" (offset (xyz 0 0 0)) @@ -2310,7 +2287,7 @@ (footprint "Capacitor_SMD:C_0805_2012Metric" (layer "B.Cu") (tedit 5F68FEEE) (tstamp 7451b65f-cd9e-4ffb-9c3b-ee43eef3547b) - (at 182.245 85.8575 -90) + (at 184.912 84.328 -90) (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (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, https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") (tags "capacitor") (property "Sheetfile" "power_charge.kicad_sch") @@ -2447,7 +2424,7 @@ (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) (tstamp 2ff1bdf5-de3e-4f24-99f8-d692168d33bf) ) - (fp_text value "C" (at 0 -1.68) (layer "B.Fab") + (fp_text value "1µF" (at 0 -1.68) (layer "B.Fab") (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) (tstamp c59f95cc-e411-4610-ab12-fc143788d696) ) @@ -2701,7 +2678,7 @@ (footprint "Resistor_SMD:R_0805_2012Metric" (layer "B.Cu") (tedit 5F68FEEE) (tstamp 826ef567-a4b9-474d-a46e-307ec3493325) - (at 180.34 121.285) + (at 180.34 120.396) (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (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") (property "Sheetfile" "power_charge.kicad_sch") @@ -2953,7 +2930,7 @@ (footprint "Resistor_SMD:R_0805_2012Metric" (layer "B.Cu") (tedit 5F68FEEE) (tstamp 9a62d7f7-95b1-4575-89f5-323759df0f54) - (at 182.245 89.6675 90) + (at 184.912 88.392 90) (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (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") (property "Sheetfile" "power_charge.kicad_sch") @@ -3132,7 +3109,7 @@ (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) (tstamp c05b3ba7-1cd3-4c0b-82f5-c0f721245b51) ) - (fp_text value "C" (at 0 -1.68) (layer "B.Fab") + (fp_text value "470nF" (at 0 -1.68) (layer "B.Fab") (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) (tstamp 881da071-2be8-4585-b98e-a373be33f33f) ) @@ -3174,7 +3151,7 @@ (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) (tstamp a425b3d0-485c-4b74-a1f4-e3f988e6d57c) ) - (fp_text value "R" (at 0 -1.65 90) (layer "B.Fab") + (fp_text value "1.5K" (at 0 -1.65 90) (layer "B.Fab") (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) (tstamp 8a779069-9dc9-4a3a-b013-3fa4bf5ce08d) ) @@ -3258,7 +3235,7 @@ (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) (tstamp fad97996-37a3-4251-8742-2db8d43d0ef5) ) - (fp_text value "C" (at 0 -1.68 90) (layer "B.Fab") + (fp_text value "470nF" (at 0 -1.68 90) (layer "B.Fab") (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) (tstamp 2d5829b8-f1d7-499a-b556-f9d891818177) ) @@ -3300,7 +3277,7 @@ (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) (tstamp 2e750eb5-552e-4ee7-bb4e-7b9deee0e86a) ) - (fp_text value "C" (at 0 -1.68) (layer "B.Fab") + (fp_text value "1µF" (at 0 -1.68) (layer "B.Fab") (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) (tstamp f8a86d38-4d3f-490f-866c-69244daa55d4) ) @@ -3622,7 +3599,7 @@ (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) (tstamp e5f696e6-3ce9-48c2-a15c-17b0c7963603) ) - (fp_text value "R" (at 0 -1.65 90) (layer "B.Fab") + (fp_text value "1.5K" (at 0 -1.65 90) (layer "B.Fab") (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) (tstamp 3fc168eb-e76d-4ca2-a950-2dd4df28466b) ) @@ -3974,6 +3951,8 @@ ) ) + (gr_line (start 183.388 81.788) (end 182.372 82.804) (layer "B.SilkS") (width 0.15) (tstamp 9863aa2e-bed0-449c-8073-650f9492748a)) + (gr_line (start 183.388 79.248) (end 183.388 81.788) (layer "B.SilkS") (width 0.15) (tstamp f491033d-6198-477f-ac56-2baa2301d63b)) (gr_line (start 113.03 83.185) (end 110.49 83.185) (layer "Cmts.User") (width 0.15) (tstamp 346ce7d9-a865-4fae-9eb0-8b3c49e58504)) (gr_line (start 118.11 73.66) (end 114.935 73.66) (layer "Cmts.User") (width 0.15) (tstamp 43a7e4ad-5a5b-41b9-8a40-5566f4660e93)) (gr_line (start 113.03 129.54) (end 110.49 129.54) (layer "Cmts.User") (width 0.15) (tstamp 9e5c0250-2a31-4228-aa5f-9ded0ad1f7a1)) @@ -4036,48 +4015,49 @@ (style (thickness 0.1) (arrow_length 1.27) (text_position_mode 0) (extension_height 0.58642) (extension_offset 0.5) keep_text_aligned) ) + (segment (start 174.277 126.652) (end 180.5 126.652) (width 0.7) (layer "F.Cu") (net 1) (tstamp 0bfcfa04-c244-45cb-b603-1ac8deb5b03e)) (segment (start 126.606699 100.644511) (end 125.095 99.132812) (width 0.7) (layer "F.Cu") (net 1) (tstamp 133487fb-b206-4a67-b769-e37fbeea8350)) (segment (start 136.24427 96.52) (end 132.119759 100.644511) (width 0.7) (layer "F.Cu") (net 1) (tstamp 4290b966-0d70-4b16-a7e5-2cf85e5c4075)) - (segment (start 179.705 126.365) (end 173.99 126.365) (width 0.7) (layer "F.Cu") (net 1) (tstamp 48316769-a6b0-44f7-a2d5-ca06c063056d)) (segment (start 153.035 96.52) (end 136.24427 96.52) (width 0.7) (layer "F.Cu") (net 1) (tstamp 57f7d4d4-c399-40bf-97df-525e6216a008)) (segment (start 132.119759 100.644511) (end 126.606699 100.644511) (width 0.7) (layer "F.Cu") (net 1) (tstamp 5af20d81-5d63-434e-b8d5-d3099229ff99)) - (segment (start 173.355 116.84) (end 172.085 115.57) (width 0.7) (layer "F.Cu") (net 1) (tstamp 94111802-3c46-41c2-a4ba-aafe3d54e9e5)) + (segment (start 180.5 126.652) (end 180.5 131.85) (width 1) (layer "F.Cu") (net 1) (tstamp 689239dd-dfda-4121-b51b-a59fef98809b)) + (segment (start 180.5 124.25) (end 180.5 126.652) (width 1) (layer "F.Cu") (net 1) (tstamp 73e922fe-30f6-4e8b-b941-3300f775b21f)) (segment (start 125.095 99.132812) (end 125.095 97.79) (width 0.7) (layer "F.Cu") (net 1) (tstamp 9924b73f-bdd6-4565-8b88-7db78ef34900)) - (segment (start 173.99 126.365) (end 173.355 125.73) (width 0.7) (layer "F.Cu") (net 1) (tstamp 9e0e1617-c30a-4b21-a2fe-fd537f5fc0ef)) - (segment (start 180.975 131.5) (end 180.975 127.635) (width 0.7) (layer "F.Cu") (net 1) (tstamp cba1671a-4eb0-475c-bd89-8bf2793dd60b)) - (segment (start 173.355 125.73) (end 173.355 116.84) (width 0.7) (layer "F.Cu") (net 1) (tstamp e3796846-cf8a-43f7-bfb4-7ea16f887ded)) - (segment (start 180.975 127.635) (end 179.705 126.365) (width 0.7) (layer "F.Cu") (net 1) (tstamp ffd55aaa-774f-4c65-8959-d366621b12e6)) - (via (at 172.085 115.57) (size 0.9) (drill 0.4) (layers "F.Cu" "B.Cu") (net 1) (tstamp 28de81ac-651e-476f-adb2-1736aa9a393e)) + (segment (start 173.355 125.73) (end 174.277 126.652) (width 0.7) (layer "F.Cu") (net 1) (tstamp 9a66acd8-f90c-4e50-995c-3f294f60156e)) + (segment (start 171.704 115.57) (end 173.355 117.221) (width 0.7) (layer "F.Cu") (net 1) (tstamp dd19d1e8-e465-4746-9b48-0ee35ba95039)) + (segment (start 173.355 117.221) (end 173.355 125.73) (width 0.7) (layer "F.Cu") (net 1) (tstamp ef3e7770-c429-4ece-a84f-fa717eb0f222)) + (via (at 171.704 115.57) (size 0.9) (drill 0.4) (layers "F.Cu" "B.Cu") (net 1) (tstamp 28de81ac-651e-476f-adb2-1736aa9a393e)) (via (at 153.035 96.52) (size 0.8) (drill 0.3) (layers "F.Cu" "B.Cu") (net 1) (tstamp 7dee032a-8d22-494f-a92a-c480a63c6099)) (via (at 125.095 97.79) (size 0.8) (drill 0.3) (layers "F.Cu" "B.Cu") (net 1) (tstamp 8d860135-7d9a-4818-b341-6b5635003484)) (segment (start 127.635 97.79) (end 117.475 97.79) (width 0.4) (layer "B.Cu") (net 1) (tstamp 04aa600d-df1b-407c-98af-8c1da4d06dee)) + (segment (start 171.704 115.57) (end 172.399511 114.874489) (width 0.7) (layer "B.Cu") (net 1) (tstamp 074364f6-7bc6-4e0c-a622-4e6a90b37446)) (segment (start 173.7125 115.2125) (end 173.7125 115.57) (width 0.25) (layer "B.Cu") (net 1) (tstamp 0d644f67-1c7f-4ffb-8105-ca769379ce10)) - (segment (start 172.085 115.57) (end 172.399511 115.255489) (width 0.7) (layer "B.Cu") (net 1) (tstamp 12719adc-f48f-421d-ab2c-1cb755f0f063)) - (segment (start 172.399511 103.819511) (end 170.815 102.235) (width 0.7) (layer "B.Cu") (net 1) (tstamp 1d3ca643-a6ff-4e19-a0ed-558bc0e06ac1)) - (segment (start 170.815 102.235) (end 166.37 102.235) (width 0.7) (layer "B.Cu") (net 1) (tstamp 30b3e50d-c0c0-4842-820c-5fb8b8d6015c)) - (segment (start 180.975 131.5) (end 170.5125 131.5) (width 0.4) (layer "B.Cu") (net 1) (tstamp 31d5c73b-2d26-4dda-8592-2bd5fcaa388a)) + (segment (start 172.399511 114.874489) (end 172.399511 103.819511) (width 0.7) (layer "B.Cu") (net 1) (tstamp 1388f6fe-a027-4c20-94c5-6a856bd08f48)) (segment (start 184.725 131.5) (end 184.785 131.44) (width 0.4) (layer "B.Cu") (net 1) (tstamp 3281cb24-d30f-4846-a0b8-e3546beb1588)) + (segment (start 170.8625 131.85) (end 170.4575 131.445) (width 1) (layer "B.Cu") (net 1) (tstamp 36dad21e-ae94-4dfa-9314-411e624af0b8)) (segment (start 130.285 103.8925) (end 130.5325 104.14) (width 0.4) (layer "B.Cu") (net 1) (tstamp 38e8abfd-08d6-41f5-b9ce-7ef1ee162df0)) - (segment (start 166.37 97.155) (end 165.735 96.52) (width 0.7) (layer "B.Cu") (net 1) (tstamp 44f87893-f6be-4728-bd11-925b01620ce5)) + (segment (start 180.5 131.85) (end 170.8625 131.85) (width 1) (layer "B.Cu") (net 1) (tstamp 3bf024d2-5f3c-427e-aeac-c83a0ae63773)) + (segment (start 180.5 131.85) (end 184.375 131.85) (width 1) (layer "B.Cu") (net 1) (tstamp 47448a30-18e2-4a79-83eb-4188d4a2c30f)) + (segment (start 172.399511 103.819511) (end 170.815 102.235) (width 0.7) (layer "B.Cu") (net 1) (tstamp 476a43eb-e997-4952-82fb-92021cf7a830)) (segment (start 128.585 101.915) (end 128.27 101.6) (width 0.4) (layer "B.Cu") (net 1) (tstamp 56ea503a-4b11-4a28-8dad-2ab0d3484cbf)) (segment (start 130.285 101.915) (end 128.585 101.915) (width 0.4) (layer "B.Cu") (net 1) (tstamp 58694800-7145-4ef3-8d7f-0422b10c63cd)) - (segment (start 180.975 131.5) (end 184.725 131.5) (width 0.4) (layer "B.Cu") (net 1) (tstamp 598a6473-5027-45d5-9a1e-accd9ffe5acd)) (segment (start 128.27 101.6) (end 128.27 98.425) (width 0.4) (layer "B.Cu") (net 1) (tstamp 6a20e272-fa98-4c3c-b82e-e0393fedc11b)) + (segment (start 171.704 115.57) (end 173.7125 115.57) (width 0.7) (layer "B.Cu") (net 1) (tstamp 7605d740-a2de-4de9-9b12-9a06e0b70d87)) (segment (start 174.625 114.3) (end 176.784 114.3) (width 0.4) (layer "B.Cu") (net 1) (tstamp 80a1fc7a-43e0-4169-9844-b42f9d82ded8)) (segment (start 170.5125 131.5) (end 170.4575 131.445) (width 0.4) (layer "B.Cu") (net 1) (tstamp 81ba2728-bd9e-4a34-b347-942be39f834f)) - (segment (start 166.37 102.235) (end 166.37 97.155) (width 0.7) (layer "B.Cu") (net 1) (tstamp 8a8c9f20-c5af-4b86-b499-453628a61b2b)) + (segment (start 184.375 131.85) (end 184.785 131.44) (width 1) (layer "B.Cu") (net 1) (tstamp 8a1cf93c-e369-4af0-815a-bf5aa57a9b02)) (segment (start 173.7125 115.2125) (end 174.625 114.3) (width 0.4) (layer "B.Cu") (net 1) (tstamp 949c986e-815d-4bdf-96e1-f3acbfde3a52)) - (segment (start 172.085 115.57) (end 173.7125 115.57) (width 0.7) (layer "B.Cu") (net 1) (tstamp 99fd7e34-7705-42d5-baba-d7e00a51a596)) + (segment (start 170.815 102.235) (end 166.37 102.235) (width 0.7) (layer "B.Cu") (net 1) (tstamp abed7485-55e0-4248-a231-6c8c18df2a5e)) (segment (start 116.9725 98.2925) (end 116.9725 100.625) (width 0.4) (layer "B.Cu") (net 1) (tstamp ae173e35-bb6a-4ec1-bb8b-065bc12aebe3)) (segment (start 130.285 101.915) (end 130.285 103.8925) (width 0.4) (layer "B.Cu") (net 1) (tstamp b49adaf0-1392-4c21-872f-ce344a47a2d4)) - (segment (start 172.399511 103.830009) (end 172.399511 103.819511) (width 0.7) (layer "B.Cu") (net 1) (tstamp bf24c4dd-fa5e-4f8d-b128-b68f9b8e4241)) - (segment (start 165.735 96.52) (end 153.035 96.52) (width 0.7) (layer "B.Cu") (net 1) (tstamp c8048082-f656-4360-97bf-62bd1ade23e3)) (segment (start 177.308216 114.685) (end 177.238608 114.754608) (width 0.25) (layer "B.Cu") (net 1) (tstamp c88edce0-cbd0-42a4-aca9-7b9e052979e1)) (segment (start 176.784 114.3) (end 177.238608 114.754608) (width 0.4) (layer "B.Cu") (net 1) (tstamp ca4e7f07-0b82-41ec-af91-43a33669a612)) (segment (start 178.8668 114.685) (end 177.308216 114.685) (width 0.25) (layer "B.Cu") (net 1) (tstamp ce0551ea-3dac-46e6-b25a-2a9c69cc61b8)) + (segment (start 166.37 102.235) (end 166.37 97.155) (width 0.7) (layer "B.Cu") (net 1) (tstamp cecbe92d-0ed9-453c-9141-0badc2b2aaf9)) (segment (start 117.475 97.79) (end 116.9725 98.2925) (width 0.4) (layer "B.Cu") (net 1) (tstamp d7718cfa-4c56-4f13-9d16-d50e9798b33a)) + (segment (start 165.735 96.52) (end 153.035 96.52) (width 0.7) (layer "B.Cu") (net 1) (tstamp e1997fb1-eb7f-4ba9-ba45-7728c56405b4)) (segment (start 128.27 98.425) (end 127.635 97.79) (width 0.4) (layer "B.Cu") (net 1) (tstamp e5d960ff-e9ef-4cb1-a0db-e4d5ea2df78f)) - (segment (start 172.399511 115.255489) (end 172.399511 103.830009) (width 0.7) (layer "B.Cu") (net 1) (tstamp f00612dd-3020-4aaf-81b2-26e9d735afa1)) + (segment (start 166.37 97.155) (end 165.735 96.52) (width 0.7) (layer "B.Cu") (net 1) (tstamp fce7c007-258d-4e2f-9250-ca9902effa66)) (segment (start 118.11 118.745) (end 117.475 118.11) (width 0.4) (layer "F.Cu") (net 2) (tstamp 024bbd7d-c2ec-42a5-a371-fa9368013593)) (segment (start 165.1 100.584) (end 173.99 100.584) (width 0.4) (layer "F.Cu") (net 2) (tstamp 0c2542d0-5d10-48ba-ba51-65885a201db1)) (segment (start 190.06 108.78) (end 189.865 108.585) (width 0.4) (layer "F.Cu") (net 2) (tstamp 11690d85-9d37-4d38-80e2-d057a2a3a699)) @@ -4086,7 +4066,6 @@ (segment (start 191.835 103.28) (end 191.835 101.71) (width 0.7) (layer "F.Cu") (net 2) (tstamp 1ac07757-843f-439f-8554-9ba3e6f9cf3c)) (segment (start 191.835 108.78) (end 190.06 108.78) (width 0.4) (layer "F.Cu") (net 2) (tstamp 1e80b230-6fab-45c9-8ae3-866d4b11f7f8)) (segment (start 118.745 75.565) (end 127.635 75.565) (width 0.4) (layer "F.Cu") (net 2) (tstamp 2087b114-875a-4ac1-b0aa-0c78bf9cf747)) - (segment (start 191.835 81.345) (end 191.835 101.71) (width 1) (layer "F.Cu") (net 2) (tstamp 267f2bd5-73ec-4204-984e-7cfc7b216d49)) (segment (start 118.33437 77.275216) (end 118.33437 75.97563) (width 0.4) (layer "F.Cu") (net 2) (tstamp 26ab927b-7e3f-4b2a-b960-ae6d4060e2d6)) (segment (start 137.435 116.8) (end 137.435 118.47) (width 0.4) (layer "F.Cu") (net 2) (tstamp 26d7e5d4-740f-4a34-8e95-80858abd8fc5)) (segment (start 137.16 118.745) (end 118.11 118.745) (width 0.4) (layer "F.Cu") (net 2) (tstamp 2853e715-a1a4-4a67-b4fc-ea4c64c98372)) @@ -4096,7 +4075,6 @@ (segment (start 162.515 104.775) (end 163.83 104.775) (width 0.4) (layer "F.Cu") (net 2) (tstamp 4318b33f-f3e1-4a08-a692-7db8c52536bc)) (segment (start 114.588101 130.64375) (end 114.588101 117.821899) (width 0.4) (layer "F.Cu") (net 2) (tstamp 46f77276-d3c0-45d6-bc28-cc820bcba37b)) (segment (start 163.614022 108.585) (end 162.515 108.585) (width 0.4) (layer "F.Cu") (net 2) (tstamp 6c108e72-7ce5-4689-b5ca-eee43739a8a5)) - (segment (start 180.975 79.51) (end 190 79.51) (width 1) (layer "F.Cu") (net 2) (tstamp 6d85a685-4088-457f-aca9-c2d9dda55126)) (segment (start 114.588101 117.821899) (end 115.57 116.84) (width 0.4) (layer "F.Cu") (net 2) (tstamp 71715a2d-35a9-4cd5-99a6-a93310c77c7d)) (segment (start 189.865 103.505) (end 190.09 103.28) (width 0.4) (layer "F.Cu") (net 2) (tstamp 7397f6eb-8f7c-4c03-99e4-72058d21f712)) (segment (start 118.33437 75.97563) (end 118.745 75.565) (width 0.4) (layer "F.Cu") (net 2) (tstamp 75f1ca38-257e-40a0-bf06-ad855c88a89e)) @@ -4107,9 +4085,9 @@ (segment (start 127.635 75.565) (end 128.46 76.39) (width 0.4) (layer "F.Cu") (net 2) (tstamp 8d527ad8-4050-4fb7-844f-7dbe85e602be)) (segment (start 115.57 81.572081) (end 115.950919 81.953) (width 0.4) (layer "F.Cu") (net 2) (tstamp 8f794d04-2a0b-4623-8242-fab6fa074f22)) (segment (start 117.475 118.11) (end 117.475 116.84) (width 0.4) (layer "F.Cu") (net 2) (tstamp 9bbb4792-ee1e-4ce0-b342-cdd6f6bc08fa)) + (segment (start 180.5 80.15) (end 180.5 87.75) (width 1) (layer "F.Cu") (net 2) (tstamp a43c2f27-f62d-4932-828f-54a6212fb77f)) (segment (start 118.33437 77.275216) (end 115.57 80.039586) (width 0.4) (layer "F.Cu") (net 2) (tstamp a601cb65-1d53-40ae-abc9-93e7b3ed71f6)) (segment (start 112.776 97.536) (end 115.824 94.488) (width 0.4) (layer "F.Cu") (net 2) (tstamp a839384c-9721-4cbe-baa9-d99326b5895b)) - (segment (start 190 79.51) (end 191.835 81.345) (width 1) (layer "F.Cu") (net 2) (tstamp b08c09f0-7446-462a-a4c6-ad920141a661)) (segment (start 149.86 104.775) (end 149.86 100.33) (width 0.3) (layer "F.Cu") (net 2) (tstamp b2de7372-8f98-47cd-9791-a9d6300292fc)) (segment (start 115.647101 132.54875) (end 115.647101 133.31275) (width 0.4) (layer "F.Cu") (net 2) (tstamp b6be7333-d7b9-4e8e-8ab7-2a0129838b43)) (segment (start 164.465 105.41) (end 164.465 101.219) (width 0.4) (layer "F.Cu") (net 2) (tstamp b9b74068-5213-454e-9819-7f09c4922793)) @@ -4135,37 +4113,43 @@ (via (at 112.776 99.06) (size 0.9) (drill 0.4) (layers "F.Cu" "B.Cu") (net 2) (tstamp dc02f39b-e162-4e82-8c26-f5307a32e24d)) (segment (start 148.59 121.92) (end 147.955 122.555) (width 0.25) (layer "B.Cu") (net 2) (tstamp 00241f90-c284-4dcb-bfcf-d67ed1950790)) (segment (start 152.745 108.8675) (end 152.745 105.7) (width 0.3) (layer "B.Cu") (net 2) (tstamp 0205e2c9-3cd8-4b62-b96d-8da004a5ae83)) - (segment (start 191.135 129.54) (end 191.835 128.84) (width 0.7) (layer "B.Cu") (net 2) (tstamp 02a29f0a-bb41-4310-8385-4aa96d8bbbd7)) + (segment (start 191.135 129.54) (end 191.835 128.84) (width 1) (layer "B.Cu") (net 2) (tstamp 02a29f0a-bb41-4310-8385-4aa96d8bbbd7)) (segment (start 150.84 114.3) (end 150.84 113.756) (width 0.3) (layer "B.Cu") (net 2) (tstamp 03019b54-55d6-4ce2-aeda-527ed6b7f57a)) (segment (start 173.99 100.965) (end 173.99 101.6) (width 0.4) (layer "B.Cu") (net 2) (tstamp 04b1273d-a225-4317-a5f7-29435bfd2853)) (segment (start 180.09 115.185) (end 180.34 114.935) (width 0.25) (layer "B.Cu") (net 2) (tstamp 092baa3c-9fe6-44ca-b6aa-43a379452ed8)) + (segment (start 181.2525 119.6575) (end 181.2525 120.396) (width 0.4) (layer "B.Cu") (net 2) (tstamp 0ab31a59-4c89-448e-b519-2f01052e6e4c)) + (segment (start 184.912 89.3045) (end 182.0545 89.3045) (width 0.4) (layer "B.Cu") (net 2) (tstamp 0b9f31c2-e359-4298-a324-8b87d95aba9d)) (segment (start 164.465 115.57) (end 163.83 115.57) (width 0.4) (layer "B.Cu") (net 2) (tstamp 13f46a76-f8c9-4626-9cff-5c3dd087a8e3)) + (segment (start 170.4575 127.2305) (end 170.735 127.508) (width 0.7) (layer "B.Cu") (net 2) (tstamp 1587ec0f-136f-4beb-af7d-57d832f8995c)) + (segment (start 191.835 120.715) (end 191.835 115) (width 1) (layer "B.Cu") (net 2) (tstamp 15f440dc-166e-44d7-8324-5bdd43d84906)) (segment (start 114.96 102.575) (end 116.9725 102.575) (width 0.4) (layer "B.Cu") (net 2) (tstamp 16fdcb6a-decf-4d16-b35c-279b1215248a)) (segment (start 191.455 114.62) (end 191.835 115) (width 0.4) (layer "B.Cu") (net 2) (tstamp 17328799-09e0-4232-912a-e35bc82ff782)) (segment (start 191.835 110.35) (end 189.09 110.35) (width 0.7) (layer "B.Cu") (net 2) (tstamp 1733eed9-1996-4fd2-8eb7-4b1cf32aaab4)) (segment (start 188.595 109.855) (end 188.595 109.22) (width 0.7) (layer "B.Cu") (net 2) (tstamp 1bb15462-ed75-4aaf-84b0-10c73c6addac)) + (segment (start 184.404 127.508) (end 184.785 127.889) (width 1) (layer "B.Cu") (net 2) (tstamp 1bd96324-3f44-4e51-93a8-15caa67f7b30)) (segment (start 112.776 101.534) (end 113.792 102.55) (width 0.4) (layer "B.Cu") (net 2) (tstamp 1c837961-8ae9-467d-80a2-6aadaa0be92e)) - (segment (start 178.21 90.58) (end 177.8 90.17) (width 0.4) (layer "B.Cu") (net 2) (tstamp 1d7d0d92-1ee7-40bf-989f-c4aaad7a94fb)) (segment (start 112.776 99.06) (end 112.776 101.534) (width 0.4) (layer "B.Cu") (net 2) (tstamp 1d7e3e62-b8d1-415b-b7fa-72ceb40a1839)) (segment (start 137.435 118.47) (end 137.435 116.8) (width 0.4) (layer "B.Cu") (net 2) (tstamp 1e63b3ac-cfdb-4a00-b50f-a95c72e74795)) (segment (start 114.935 107.315) (end 113.98 106.36) (width 0.4) (layer "B.Cu") (net 2) (tstamp 21de474e-049d-4944-93fe-97d8dd13627a)) (segment (start 177.485 98.74) (end 178.435 98.74) (width 0.4) (layer "B.Cu") (net 2) (tstamp 220d4b8a-1c31-4239-9aeb-45ec3b3ac1fa)) + (segment (start 180.59 118.995) (end 181.2525 119.6575) (width 0.4) (layer "B.Cu") (net 2) (tstamp 263e3000-6644-4ae8-898e-ee6c451b06e5)) (segment (start 151.384 110.236) (end 152.214361 110.236) (width 0.3) (layer "B.Cu") (net 2) (tstamp 26458b16-9b55-43f8-901c-5c08d68c84f7)) (segment (start 152.745 105.7) (end 153.35 105.095) (width 0.3) (layer "B.Cu") (net 2) (tstamp 27cd1751-17d9-4e0d-ad54-a90e93fcbbc6)) + (segment (start 184.785 127.889) (end 184.785 129.54) (width 1) (layer "B.Cu") (net 2) (tstamp 28552995-dd86-4865-9486-c54a0792097d)) (segment (start 149.484 100.071) (end 149.484 94.996) (width 0.4) (layer "B.Cu") (net 2) (tstamp 31132fbe-5e88-4170-878a-97db471dc386)) (segment (start 180.09 116.4082) (end 180.59 116.4082) (width 0.25) (layer "B.Cu") (net 2) (tstamp 32c969c2-4c70-4c94-9093-1bac3aee4e30)) (segment (start 128.46 119.19) (end 128.905 118.745) (width 0.4) (layer "B.Cu") (net 2) (tstamp 385ee728-3dcb-4c76-8e33-dd3dc4de11ff)) (segment (start 148.245 117.1925) (end 148.245 118.526428) (width 0.3) (layer "B.Cu") (net 2) (tstamp 38d8e26f-9a7c-4293-b9db-cded0d173e14)) (segment (start 148.245 114.59) (end 148.245 113.193) (width 0.3) (layer "B.Cu") (net 2) (tstamp 38f03b2e-70bb-4b23-ac36-e82dc7dacc40)) + (segment (start 170.4575 125.73) (end 170.4575 127.2305) (width 1) (layer "B.Cu") (net 2) (tstamp 3c4a0243-fe92-4052-ab90-33427b13c766)) (segment (start 176.85 102.235) (end 176.85 108.27) (width 0.7) (layer "B.Cu") (net 2) (tstamp 3dbd8243-65f6-4e5f-8b42-ede673e6e6d6)) - (segment (start 170.4575 125.73) (end 170.4575 128.905) (width 0.7) (layer "B.Cu") (net 2) (tstamp 3f988bb3-3ca0-4ccb-a0a4-9aca7b7f8bf9)) (segment (start 141.605 112.71) (end 138.75 112.71) (width 0.4) (layer "B.Cu") (net 2) (tstamp 40b55cbb-2c7e-431c-9c5d-1d45f88b9f74)) - (segment (start 184.15 125.73) (end 184.785 126.365) (width 0.7) (layer "B.Cu") (net 2) (tstamp 43183627-bf29-4557-9d82-ababd063e8a2)) + (segment (start 177.673 87.503) (end 177.92 87.75) (width 0.4) (layer "B.Cu") (net 2) (tstamp 4615560b-8f78-47c2-9da4-c9eb7bab532e)) (segment (start 113.792 102.55) (end 114.935 102.55) (width 0.4) (layer "B.Cu") (net 2) (tstamp 47db8b56-d57e-453c-ab9e-12ffd46147fa)) - (segment (start 191.835 128.84) (end 191.835 115) (width 0.7) (layer "B.Cu") (net 2) (tstamp 49388231-c1a9-4c9f-b470-77c5e9fb7911)) + (segment (start 177.39 90.58) (end 177.8 90.17) (width 0.4) (layer "B.Cu") (net 2) (tstamp 487ada8f-0abd-4bd9-8ea8-b506bcaf3ac5)) (segment (start 147.332 112.28) (end 146.3325 112.28) (width 0.3) (layer "B.Cu") (net 2) (tstamp 4b3577de-3744-43ce-9b41-bb6da30b1043)) - (segment (start 177.8 87.63) (end 177.2975 87.1275) (width 0.4) (layer "B.Cu") (net 2) (tstamp 4e8aea05-d6f7-4b00-9ddb-06bf35cd0037)) (segment (start 175.2975 90.58) (end 174.305 91.5725) (width 0.4) (layer "B.Cu") (net 2) (tstamp 504f7cde-9f1f-465b-8dff-1aaf59787c9d)) + (segment (start 181.149 87.101) (end 180.5 87.75) (width 0.4) (layer "B.Cu") (net 2) (tstamp 5391514b-4b72-4f2b-a215-4f59cbaa390b)) (segment (start 178.435 108.9425) (end 177.5225 108.9425) (width 0.7) (layer "B.Cu") (net 2) (tstamp 592eb391-ad7d-4550-bcfd-b3667c2085f8)) (segment (start 163.195 114.935) (end 163.195 112.395) (width 0.4) (layer "B.Cu") (net 2) (tstamp 59eeb84c-c244-4e6b-bb92-a2f0172314eb)) (segment (start 168.7775 87.1275) (end 168.4625 87.4425) (width 0.4) (layer "B.Cu") (net 2) (tstamp 61116e09-9190-4fad-ba42-a82523d6ead1)) @@ -4173,20 +4157,22 @@ (segment (start 176.85 102.235) (end 176.85 99.375) (width 0.4) (layer "B.Cu") (net 2) (tstamp 624a1de9-1d5f-4b5e-8f4f-05e7dd6b58ef)) (segment (start 177.5225 108.9425) (end 176.85 108.27) (width 0.7) (layer "B.Cu") (net 2) (tstamp 632a35cc-672e-484f-ab55-d5cac22afc12)) (segment (start 147.945 100.33) (end 149.225 100.33) (width 0.4) (layer "B.Cu") (net 2) (tstamp 641772c0-7f61-4441-99f5-7cfcc2d17da7)) + (segment (start 177.92 87.75) (end 180.5 87.75) (width 0.4) (layer "B.Cu") (net 2) (tstamp 6b0194f2-64e2-42f0-a770-eee3265df00c)) (segment (start 113.98 103.505) (end 114.935 102.55) (width 0.4) (layer "B.Cu") (net 2) (tstamp 6e233a56-ac9b-4635-8c2a-062e32976d8e)) + (segment (start 177.673 87.503) (end 177.2975 87.1275) (width 0.4) (layer "B.Cu") (net 2) (tstamp 6e44b2f5-b875-4322-9d93-fabf6c096b10)) (segment (start 142.035 112.28) (end 141.605 112.71) (width 0.3) (layer "B.Cu") (net 2) (tstamp 6eb14f11-9103-4767-ba14-ce21de659be7)) (segment (start 153.683922 115.28) (end 152.183433 113.779511) (width 0.3) (layer "B.Cu") (net 2) (tstamp 6fdd7a53-8fb3-4cc6-8049-b2bfeefb6b0b)) (segment (start 148.245 118.526428) (end 146.121428 120.65) (width 0.3) (layer "B.Cu") (net 2) (tstamp 70abd6bf-f9e9-42c5-83af-20cdadf937ed)) - (segment (start 178.21 90.58) (end 175.2975 90.58) (width 0.4) (layer "B.Cu") (net 2) (tstamp 711632fa-2566-4d92-b873-f58890414b30)) + (segment (start 181.2525 120.396) (end 191.516 120.396) (width 1) (layer "B.Cu") (net 2) (tstamp 71dba224-b67c-4773-9486-c9190785ea62)) (segment (start 137.435 114.025) (end 137.435 116.8) (width 0.4) (layer "B.Cu") (net 2) (tstamp 71f3e724-8017-42ec-96ce-aabd37a46b94)) (segment (start 149.743 100.33) (end 149.484 100.071) (width 0.3) (layer "B.Cu") (net 2) (tstamp 76a62804-b2e7-4e8a-a65f-c1028ef59ac6)) - (segment (start 181.2525 119.6575) (end 181.2525 121.285) (width 0.4) (layer "B.Cu") (net 2) (tstamp 77543dfc-5abe-417e-bf39-3a03b8f53fd3)) (segment (start 148.245 117.1925) (end 148.245 114.59) (width 0.3) (layer "B.Cu") (net 2) (tstamp 78b6268b-8e33-42be-86ba-61938bee17af)) (segment (start 188.595 109.22) (end 188.595 106.995) (width 0.7) (layer "B.Cu") (net 2) (tstamp 7bb76dd2-a4a7-47de-9d55-4254d66414ee)) (segment (start 174.625 102.235) (end 176.85 102.235) (width 0.4) (layer "B.Cu") (net 2) (tstamp 80046395-04cd-42ec-aeba-fd3e40705f04)) + (segment (start 191.835 128.84) (end 191.835 120.715) (width 1) (layer "B.Cu") (net 2) (tstamp 80d5b2e7-1b0c-45b0-9d80-851022d7750b)) (segment (start 151.77 122.555) (end 151.135 121.92) (width 0.25) (layer "B.Cu") (net 2) (tstamp 82501a57-5583-4a45-ad60-df114c9dbbf4)) (segment (start 177.2975 87.1275) (end 175.93 87.1275) (width 0.4) (layer "B.Cu") (net 2) (tstamp 833bd51e-0ff3-4ec5-b8ae-8246afbd1dbf)) - (segment (start 184.785 114.62) (end 191.455 114.62) (width 0.7) (layer "B.Cu") (net 2) (tstamp 8636141c-f207-42b7-8bf7-4120f81c8804)) + (segment (start 184.785 114.62) (end 191.455 114.62) (width 1) (layer "B.Cu") (net 2) (tstamp 8636141c-f207-42b7-8bf7-4120f81c8804)) (segment (start 188.3175 108.9425) (end 188.595 109.22) (width 0.4) (layer "B.Cu") (net 2) (tstamp 87e687ce-5d0d-4cda-bde9-f94d37e23688)) (segment (start 128.46 124.92) (end 128.46 119.19) (width 0.4) (layer "B.Cu") (net 2) (tstamp 8c1b2fae-025a-4994-b10e-646aaa5f56a0)) (segment (start 114.935 102.55) (end 114.96 102.575) (width 0.4) (layer "B.Cu") (net 2) (tstamp 8d187903-89f6-4187-b31b-3660729faff9)) @@ -4197,16 +4183,17 @@ (segment (start 117.475 107.315) (end 114.935 107.315) (width 0.4) (layer "B.Cu") (net 2) (tstamp 95706bc6-2b19-4ab0-82e9-b8fac1539b6d)) (segment (start 159.385 113.665) (end 159.385 113.03) (width 0.3) (layer "B.Cu") (net 2) (tstamp 962ecf90-d054-4ff2-861d-42456ca22c59)) (segment (start 195.635 101.7) (end 191.845 101.7) (width 0.7) (layer "B.Cu") (net 2) (tstamp 96e3d332-ed3a-4a18-9583-f20a7d8cc6f5)) - (segment (start 180.975 125.73) (end 184.15 125.73) (width 0.7) (layer "B.Cu") (net 2) (tstamp 97adfa3d-2ff8-44eb-beb4-1bc0a47522d8)) - (segment (start 191.835 115) (end 191.835 110.35) (width 0.7) (layer "B.Cu") (net 2) (tstamp 993d78e5-750e-4b87-914e-b00f157d21b6)) + (segment (start 191.835 115) (end 191.835 110.35) (width 1) (layer "B.Cu") (net 2) (tstamp 993d78e5-750e-4b87-914e-b00f157d21b6)) (segment (start 173.99 99.06) (end 173.99 100.965) (width 0.4) (layer "B.Cu") (net 2) (tstamp 99de77e1-77be-4d16-bf5c-5386096edef9)) (segment (start 195.635 110.35) (end 191.835 110.35) (width 0.7) (layer "B.Cu") (net 2) (tstamp 9a755711-d195-4de5-b8eb-cdaad8859631)) (segment (start 176.85 99.375) (end 177.485 98.74) (width 0.4) (layer "B.Cu") (net 2) (tstamp 9dd7b6ef-1a42-4eb7-bf46-c93e1e4d69b9)) - (segment (start 180.59 117.86) (end 180.59 118.995) (width 0.4) (layer "B.Cu") (net 2) (tstamp 9e94394d-3798-4bea-b37f-39a73256c0eb)) (segment (start 148.245 113.193) (end 147.332 112.28) (width 0.3) (layer "B.Cu") (net 2) (tstamp a0a1f12c-c4d8-44cd-a2b1-892fea3774cc)) + (segment (start 180.59 117.86) (end 180.59 118.995) (width 0.4) (layer "B.Cu") (net 2) (tstamp a345e998-56bb-4a32-89b4-a5c229d2ed80)) (segment (start 178.435 108.9425) (end 188.3175 108.9425) (width 0.7) (layer "B.Cu") (net 2) (tstamp a403618d-a571-4fd1-8a1f-8c8cc2c49c64)) + (segment (start 182.0545 89.3045) (end 180.5 87.75) (width 0.4) (layer "B.Cu") (net 2) (tstamp a45b54c9-b2b6-4fe2-a293-38c031497a2f)) (segment (start 151.77 126.34) (end 151.795 126.365) (width 0.35) (layer "B.Cu") (net 2) (tstamp a4a1ba95-fc29-4637-9959-1d4574ba9384)) (segment (start 150.55 114.59) (end 150.84 114.3) (width 0.3) (layer "B.Cu") (net 2) (tstamp a4aff44f-e8a8-4458-a406-86345ce6d356)) + (segment (start 170.4575 127.2305) (end 170.4575 128.905) (width 1) (layer "B.Cu") (net 2) (tstamp a5bb8c72-e343-42ca-8374-81b4666cdf9c)) (segment (start 152.183433 113.779511) (end 150.863511 113.779511) (width 0.3) (layer "B.Cu") (net 2) (tstamp ac1e1813-81b2-4433-b3a5-b940f964be78)) (segment (start 167.005 87.4425) (end 168.4625 87.4425) (width 0.4) (layer "B.Cu") (net 2) (tstamp acfcb159-6ddf-409f-a87b-db6dfefd0aab)) (segment (start 191.845 101.7) (end 191.835 101.71) (width 0.4) (layer "B.Cu") (net 2) (tstamp aeadd435-b180-447a-81a3-ee02078e774d)) @@ -4224,32 +4211,30 @@ (segment (start 195.635 110.35) (end 195.635 101.7) (width 0.7) (layer "B.Cu") (net 2) (tstamp c9fef736-2e09-4cbe-9c9c-caa013246466)) (segment (start 150.84 113.756) (end 150.84 110.78) (width 0.3) (layer "B.Cu") (net 2) (tstamp ca781f31-7dbe-4a8f-b6a1-d53d9cecb877)) (segment (start 117.475 114.3) (end 117.475 107.315) (width 0.4) (layer "B.Cu") (net 2) (tstamp cebe88fe-7bbd-4b49-80d4-4f7cf2ab7d96)) + (segment (start 177.8 87.63) (end 177.673 87.503) (width 0.4) (layer "B.Cu") (net 2) (tstamp d09e31ab-d167-4df4-a7ba-a217561c9ab0)) (segment (start 173.99 91.8875) (end 174.305 91.5725) (width 0.4) (layer "B.Cu") (net 2) (tstamp d0abb8b1-3cc2-4ce4-8363-3a7818606fe5)) (segment (start 173.99 99.06) (end 173.99 91.8875) (width 0.4) (layer "B.Cu") (net 2) (tstamp d7c19c9d-2843-4bce-a669-85953eec44e1)) (segment (start 180.09 116.4082) (end 180.09 115.185) (width 0.25) (layer "B.Cu") (net 2) (tstamp d9152c6a-d8f9-4fe3-b40b-bdacf54605e7)) + (segment (start 191.516 120.396) (end 191.835 120.715) (width 0.7) (layer "B.Cu") (net 2) (tstamp dc03183e-2605-4b3c-9436-b0e0764dc355)) (segment (start 147.955 122.555) (end 145.415 122.555) (width 0.25) (layer "B.Cu") (net 2) (tstamp dce14c25-a7d4-4c78-8224-6e48ed807bf5)) - (segment (start 180.59 118.995) (end 181.2525 119.6575) (width 0.4) (layer "B.Cu") (net 2) (tstamp de5c6934-511c-48ee-8067-1babf3342eef)) - (segment (start 181.2525 121.285) (end 181.2525 125.4525) (width 0.7) (layer "B.Cu") (net 2) (tstamp df5e5869-51e8-4036-8b42-4591fbe997c7)) (segment (start 146.121428 120.65) (end 144.78 120.65) (width 0.3) (layer "B.Cu") (net 2) (tstamp e068e3b7-2f03-462e-bfe8-e6cbe42688ee)) (segment (start 163.83 115.57) (end 163.195 114.935) (width 0.4) (layer "B.Cu") (net 2) (tstamp e32f3bf0-32af-470d-a0af-689bd60e92d1)) (segment (start 152.214361 110.236) (end 152.745 109.705361) (width 0.3) (layer "B.Cu") (net 2) (tstamp e51537b2-cd6c-4e03-a052-ac7edd151ea5)) (segment (start 150.84 110.78) (end 151.384 110.236) (width 0.3) (layer "B.Cu") (net 2) (tstamp e5ec8639-c3f6-4fdb-8fd1-61e4f066bbba)) - (segment (start 184.785 126.365) (end 184.785 129.54) (width 0.7) (layer "B.Cu") (net 2) (tstamp e73f33f6-3fba-430b-b3e5-af93988ffa0f)) (segment (start 170.78 85.8575) (end 170.78 87.1275) (width 0.4) (layer "B.Cu") (net 2) (tstamp e83d3e44-dee6-4804-9474-dd6124d22b7a)) (segment (start 137.16 118.745) (end 137.435 118.47) (width 0.4) (layer "B.Cu") (net 2) (tstamp e8970e1b-216f-415d-aec8-89435fd706eb)) - (segment (start 184.785 129.54) (end 191.135 129.54) (width 0.7) (layer "B.Cu") (net 2) (tstamp e926cb72-f82f-4607-9941-4c4944efe100)) + (segment (start 184.785 129.54) (end 191.135 129.54) (width 1) (layer "B.Cu") (net 2) (tstamp e926cb72-f82f-4607-9941-4c4944efe100)) (segment (start 150.863511 113.779511) (end 150.84 113.756) (width 0.3) (layer "B.Cu") (net 2) (tstamp ea43a177-a1f0-41f0-855e-13328350a5e6)) (segment (start 113.98 106.36) (end 113.98 103.505) (width 0.4) (layer "B.Cu") (net 2) (tstamp ecc2e428-ffdd-44d1-aa87-8e8275d57ccc)) (segment (start 146.3325 112.28) (end 142.035 112.28) (width 0.3) (layer "B.Cu") (net 2) (tstamp ecffc7d2-a626-4388-b897-5e227be6988b)) (segment (start 148.245 114.59) (end 150.55 114.59) (width 0.3) (layer "B.Cu") (net 2) (tstamp ef17a3c7-3f5b-471f-990f-493ac7a17ea6)) - (segment (start 179.705 90.58) (end 178.21 90.58) (width 0.4) (layer "B.Cu") (net 2) (tstamp ef876f87-d7f3-42ab-b6ec-193688f5b091)) + (segment (start 170.735 127.508) (end 184.404 127.508) (width 1) (layer "B.Cu") (net 2) (tstamp f0dbb909-9022-4809-bf75-89e6fba27464)) (segment (start 145.415 122.555) (end 144.78 121.92) (width 0.25) (layer "B.Cu") (net 2) (tstamp f2948af6-a1ad-487f-8055-8ae81deda346)) (segment (start 128.905 118.745) (end 137.16 118.745) (width 0.4) (layer "B.Cu") (net 2) (tstamp f415ac5e-805b-4ea7-a033-f1828bc2fa04)) (segment (start 153.35 105.095) (end 156.21 105.095) (width 0.3) (layer "B.Cu") (net 2) (tstamp f565edd5-58e0-4cdf-91f3-3a1567d91962)) - (segment (start 170.4575 125.73) (end 180.975 125.73) (width 0.7) (layer "B.Cu") (net 2) (tstamp f925692a-0210-4a90-8101-4fa3c1d3fb23)) + (segment (start 181.149 84.328) (end 181.149 87.101) (width 0.4) (layer "B.Cu") (net 2) (tstamp f7ab1256-1094-4b33-9457-efa3b35d703a)) + (segment (start 175.2975 90.58) (end 177.39 90.58) (width 0.4) (layer "B.Cu") (net 2) (tstamp f8828874-3d36-4e4d-8ec9-5158d488dc54)) (segment (start 152.745 109.705361) (end 152.745 108.8675) (width 0.3) (layer "B.Cu") (net 2) (tstamp fc556869-79a1-4c2b-a4ff-a745c969a577)) - (segment (start 179.705 90.58) (end 182.245 90.58) (width 0.4) (layer "B.Cu") (net 2) (tstamp fd5f2139-e032-4f04-ac1e-3b4e4fd051c4)) - (segment (start 181.2525 125.4525) (end 180.975 125.73) (width 0.4) (layer "B.Cu") (net 2) (tstamp fda285d2-5ee4-42fb-b0dc-b4a45b89e88b)) (segment (start 149.86 100.33) (end 149.743 100.33) (width 0.3) (layer "B.Cu") (net 2) (tstamp fea1aff6-04c3-4e39-84f7-2b2eb8acf90d)) (segment (start 116.9725 101.925) (end 116.149 101.925) (width 0.3) (layer "B.Cu") (net 3) (tstamp 8610f077-c079-4c4d-aed7-57592560d475)) (segment (start 114.935 100.711) (end 114.935 100.65) (width 0.3) (layer "B.Cu") (net 3) (tstamp c7fd1806-3e81-4d97-bdbc-95da44f9469a)) @@ -4325,11 +4310,12 @@ (segment (start 184.785 116.84) (end 184.15 117.475) (width 0.4) (layer "B.Cu") (net 6) (tstamp 40dbedfc-a1bf-463a-a5f5-c2474b556830)) (segment (start 181.090001 116.955001) (end 181.090001 116.4082) (width 0.25) (layer "B.Cu") (net 6) (tstamp 7ece1e0b-fc67-4a02-af2c-a9a7c23e86ef)) (segment (start 181.61 117.475) (end 181.090001 116.955001) (width 0.25) (layer "B.Cu") (net 6) (tstamp ce36f808-d425-4416-ba2d-bcc0cdaf42e2)) - (segment (start 175.93 84.5875) (end 175.93 84.42) (width 0.4) (layer "B.Cu") (net 7) (tstamp 5c0cfae6-0e3d-4757-b3fb-7c7b8fb63412)) - (segment (start 175.93 84.42) (end 176.53 83.82) (width 0.4) (layer "B.Cu") (net 7) (tstamp 6d393bd2-c1da-4b4f-b18a-7b292644a8ff)) - (segment (start 182.245 83.82) (end 182.245 84.9075) (width 0.4) (layer "B.Cu") (net 7) (tstamp 7e948cef-70a9-4a60-9b40-295b6480c061)) - (segment (start 176.53 83.82) (end 182.245 83.82) (width 0.4) (layer "B.Cu") (net 7) (tstamp 9145c371-3c01-4476-8f97-e4a6e831c9ae)) - (segment (start 182.245 86.8075) (end 182.245 88.755) (width 0.4) (layer "B.Cu") (net 8) (tstamp 4e274579-ab29-4c76-9bad-8d00ceff370d)) + (segment (start 184.338 82.804) (end 184.912 83.378) (width 0.4) (layer "B.Cu") (net 7) (tstamp 0505c29d-4b44-4cbb-999d-2e796af32618)) + (segment (start 177.546 82.804) (end 184.338 82.804) (width 0.4) (layer "B.Cu") (net 7) (tstamp 22e07ddc-ec91-4e8a-9e5d-3d369803d2ce)) + (segment (start 175.93 84.5875) (end 175.93 84.42) (width 0.4) (layer "B.Cu") (net 7) (tstamp 29caef97-2443-402f-bb9c-00ed9cf4e7dc)) + (segment (start 175.93 84.42) (end 177.546 82.804) (width 0.4) (layer "B.Cu") (net 7) (tstamp b69485b6-dd7e-404b-96c3-dc74e2aa478b)) + (segment (start 184.912 85.278) (end 184.912 87.4795) (width 0.4) (layer "B.Cu") (net 8) (tstamp 7e9cf7db-487f-4798-86d3-636255255261)) + (segment (start 166.37 120.015) (end 166.37 117.475) (width 0.4) (layer "F.Cu") (net 9) (tstamp 0076fb19-e7a3-47ee-aabc-daa197fe6799)) (segment (start 151.384 116.332) (end 150.368 117.348) (width 0.3) (layer "F.Cu") (net 9) (tstamp 1211d766-105c-47d8-817b-655ce5f77399)) (segment (start 151.384251 114.808) (end 151.387793 114.811542) (width 0.3) (layer "F.Cu") (net 9) (tstamp 1a0d2a32-5102-42ca-8289-00d1aa9255d0)) (segment (start 159.385 103.505) (end 162.515 103.505) (width 0.4) (layer "F.Cu") (net 9) (tstamp 1b25ea49-a51e-43b4-ab47-b562dceaab41)) @@ -4339,10 +4325,9 @@ (segment (start 151.13 113.03) (end 151.384 113.284) (width 0.3) (layer "F.Cu") (net 9) (tstamp 72be459b-c445-4a8a-8b36-8f1291920157)) (segment (start 179.705 99.695) (end 180.2255 99.1745) (width 0.4) (layer "F.Cu") (net 9) (tstamp 76c3eded-6fb6-446d-ba82-22a0e627e13c)) (segment (start 148.860122 112.764776) (end 150.864776 112.764776) (width 0.3) (layer "F.Cu") (net 9) (tstamp 7b1bd68f-7cf5-4eb8-b638-539d41e373e8)) + (segment (start 171.704 120.015) (end 166.37 120.015) (width 0.4) (layer "F.Cu") (net 9) (tstamp 7d5d92e8-523c-4ce7-a6a4-4acf5fe4f777)) (segment (start 151.13 113.03) (end 151.892 112.268) (width 0.3) (layer "F.Cu") (net 9) (tstamp 83634c0a-bb0c-46c7-be78-88d10f83d20d)) - (segment (start 172.085 120.015) (end 166.37 120.015) (width 0.4) (layer "F.Cu") (net 9) (tstamp 92e91266-b94d-4ebd-bce3-298a7aba640e)) (segment (start 151.384 114.808) (end 151.384251 114.808) (width 0.3) (layer "F.Cu") (net 9) (tstamp a0c16611-aef1-4eb2-a595-8edb0db908e1)) - (segment (start 166.37 120.015) (end 166.37 117.475) (width 0.4) (layer "F.Cu") (net 9) (tstamp ad91cd18-da2f-4623-8f9f-aea0f84ad266)) (segment (start 163.449 99.695) (end 179.705 99.695) (width 0.4) (layer "F.Cu") (net 9) (tstamp adefda7f-6700-499e-a3ff-ce7f2e5f8ff5)) (segment (start 151.384 114.808) (end 151.384 116.332) (width 0.3) (layer "F.Cu") (net 9) (tstamp aeb28ba5-a7d5-4823-b0e3-162b231a83ee)) (segment (start 162.515 100.629) (end 163.449 99.695) (width 0.4) (layer "F.Cu") (net 9) (tstamp d18c1e1a-75c9-4346-a634-ffa883d08a1a)) @@ -4355,12 +4340,12 @@ (via (at 180.2255 96.52) (size 0.8) (drill 0.3) (layers "F.Cu" "B.Cu") (net 9) (tstamp 6b04f85a-cbaa-410a-941f-e55339fba2a8)) (via (at 148.860122 112.764776) (size 0.8) (drill 0.3) (layers "F.Cu" "B.Cu") (net 9) (tstamp a7310de4-f6c2-4add-9d42-dd79396d75fe)) (via (at 151.892 112.268) (size 0.8) (drill 0.3) (layers "F.Cu" "B.Cu") (net 9) (tstamp b78e0d25-5247-44f7-a7ef-9c972fa74850)) - (via (at 172.085 120.015) (size 0.8) (drill 0.3) (layers "F.Cu" "B.Cu") (net 9) (tstamp c434a37b-2cdc-4cbb-8a98-b5fd5b23290e)) + (via (at 171.704 120.015) (size 0.8) (drill 0.3) (layers "F.Cu" "B.Cu") (net 9) (tstamp c434a37b-2cdc-4cbb-8a98-b5fd5b23290e)) (segment (start 141.539 110.744) (end 141.605 110.81) (width 0.4) (layer "B.Cu") (net 9) (tstamp 02430646-8990-4fa5-bf99-1aa40a8ee989)) (segment (start 166.37 117.475) (end 167.005 116.84) (width 0.4) (layer "B.Cu") (net 9) (tstamp 04cb4841-dcf0-4f0a-abd8-c88aa4e8bbd4)) + (segment (start 175.34 120.015) (end 171.704 120.015) (width 0.4) (layer "B.Cu") (net 9) (tstamp 0b00f26a-378c-4480-8949-d4b5dcf906cd)) (segment (start 119.7 110.17) (end 119.375 110.495) (width 0.4) (layer "B.Cu") (net 9) (tstamp 0ddaa3c6-f472-46ea-8285-c2d4b117a2df)) (segment (start 162.56 117.475) (end 166.37 117.475) (width 0.4) (layer "B.Cu") (net 9) (tstamp 12352a07-e6a2-40e3-8660-7525af157a3a)) - (segment (start 175.34 120.015) (end 172.085 120.015) (width 0.4) (layer "B.Cu") (net 9) (tstamp 138459f0-70e4-462b-9d18-3d02484a27c3)) (segment (start 143.505 117.607) (end 143.505 118.75) (width 0.4) (layer "B.Cu") (net 9) (tstamp 1679fc24-9c93-4c84-8ca9-26b4cc110b94)) (segment (start 159.07 106.995) (end 159.385 106.68) (width 0.4) (layer "B.Cu") (net 9) (tstamp 16f9e6e6-0002-4c32-8fdf-6916a85659d1)) (segment (start 159.385 115.565) (end 161.92 115.565) (width 0.3) (layer "B.Cu") (net 9) (tstamp 1942075a-61e0-4eca-a000-e5935b92646c)) @@ -4423,19 +4408,18 @@ (segment (start 133.985 111.76) (end 134.493 111.252) (width 0.4) (layer "B.Cu") (net 9) (tstamp fffb6507-eae0-4393-af0c-4088352ac188)) (segment (start 164.56 78.01) (end 164.465 78.105) (width 0.4) (layer "F.Cu") (net 10) (tstamp 54b86133-84c0-4e7f-ba1e-7da6e5a8115b)) (segment (start 164.56 78.01) (end 167.64 78.01) (width 0.4) (layer "F.Cu") (net 10) (tstamp 650b0cb1-307f-4442-be19-c06147a64be2)) - (segment (start 177.07 78.01) (end 167.64 78.01) (width 0.4) (layer "F.Cu") (net 10) (tstamp 664839bb-eed3-4934-8a82-e1b80972db37)) - (segment (start 177.8 86.36) (end 177.8 78.74) (width 0.4) (layer "F.Cu") (net 10) (tstamp 746ef519-218e-4c72-9868-c5d8ae1057db)) - (segment (start 177.8 78.74) (end 177.07 78.01) (width 0.4) (layer "F.Cu") (net 10) (tstamp e50a5380-129a-488f-bddb-f527e29e0b62)) + (segment (start 175.26 78.232) (end 175.038 78.01) (width 0.4) (layer "F.Cu") (net 10) (tstamp 9323d24a-5cf2-4242-92f4-259e82c2e3d0)) + (segment (start 175.038 78.01) (end 167.64 78.01) (width 0.4) (layer "F.Cu") (net 10) (tstamp edc852f9-107a-4265-839c-66457268b1d6)) (via (at 164.465 78.105) (size 0.9) (drill 0.4) (layers "F.Cu" "B.Cu") (net 10) (tstamp 39b70cab-f892-451c-bd7b-6b3ac9c2c720)) - (via (at 177.8 86.36) (size 0.8) (drill 0.3) (layers "F.Cu" "B.Cu") (net 10) (tstamp 9d053103-eab4-4e38-bb21-6ed76599018a)) - (segment (start 179.705 86.77) (end 178.21 86.77) (width 0.4) (layer "B.Cu") (net 10) (tstamp 23fd5efd-2931-476d-92a4-4579409e4e92)) + (via (at 175.26 78.232) (size 0.8) (drill 0.3) (layers "F.Cu" "B.Cu") (net 10) (tstamp 9d053103-eab4-4e38-bb21-6ed76599018a)) (segment (start 151.384 99.949) (end 151.384 94.996) (width 0.4) (layer "B.Cu") (net 10) (tstamp 27278145-c7e8-4330-a268-71c970648546)) (segment (start 151.765 100.33) (end 151.384 99.949) (width 0.4) (layer "B.Cu") (net 10) (tstamp 280dbd85-4bd4-4afb-adba-0b90a8e2b2e8)) (segment (start 151.384 94.996) (end 151.765 94.615) (width 0.4) (layer "B.Cu") (net 10) (tstamp 6d091743-4e99-4103-9ab2-fde95e4208a8)) - (segment (start 178.21 86.77) (end 177.8 86.36) (width 0.4) (layer "B.Cu") (net 10) (tstamp 89f615b2-d505-499f-81fa-0840a6958dfb)) + (segment (start 175.26 78.232) (end 175.6645 78.6365) (width 0.4) (layer "B.Cu") (net 10) (tstamp 788af3f1-9c5b-4a01-9ffa-6956272698f1)) (segment (start 164.465 93.345) (end 164.465 85.09) (width 0.4) (layer "B.Cu") (net 10) (tstamp 974ea494-a482-4bde-9974-0bccaad29f78)) (segment (start 153.045 100.33) (end 151.765 100.33) (width 0.4) (layer "B.Cu") (net 10) (tstamp ab55a115-9bfd-4d82-942a-c7abf8fa752d)) (segment (start 164.465 78.105) (end 164.465 85.09) (width 0.4) (layer "B.Cu") (net 10) (tstamp b0cb52b0-d92c-4989-9f19-dd5ef21ff87c)) + (segment (start 175.6645 78.6365) (end 175.6645 81) (width 0.4) (layer "B.Cu") (net 10) (tstamp c15e5aca-e113-4a1b-9416-933290026840)) (segment (start 164.9175 85.5425) (end 167.005 85.5425) (width 0.4) (layer "B.Cu") (net 10) (tstamp d142a806-1dd3-4c29-bdde-a3b5b75818a1)) (segment (start 163.195 94.615) (end 164.465 93.345) (width 0.4) (layer "B.Cu") (net 10) (tstamp d2b97039-0b4b-4731-8842-29d168778b93)) (segment (start 151.765 94.615) (end 163.195 94.615) (width 0.4) (layer "B.Cu") (net 10) (tstamp e23b72ae-c1b7-4348-891b-ee4d6845ace0)) @@ -4537,26 +4521,24 @@ (segment (start 177.684999 114.184999) (end 176.53 113.03) (width 0.25) (layer "B.Cu") (net 20) (tstamp 05b2d86a-7b3f-40cf-8173-d4eecd76f834)) (segment (start 178.8668 114.184999) (end 177.684999 114.184999) (width 0.25) (layer "B.Cu") (net 20) (tstamp 1456fd39-a9e8-4255-a0e8-d43c003f2333)) (segment (start 176.53 113.03) (end 175.5375 113.03) (width 0.25) (layer "B.Cu") (net 20) (tstamp e57b5131-fdfe-43c8-a137-209eee9a2719)) - (segment (start 176.919614 118.11) (end 174.625 115.815386) (width 0.25) (layer "F.Cu") (net 21) (tstamp 28165a02-1049-4e96-8839-69367ef40889)) - (segment (start 179.07 118.11) (end 176.919614 118.11) (width 0.25) (layer "F.Cu") (net 21) (tstamp 461d5c5f-6c6a-4be5-9008-a273b55063ef)) - (segment (start 174.625 115.815386) (end 174.625 111.125) (width 0.25) (layer "F.Cu") (net 21) (tstamp f505aee7-7efa-46a0-a049-06b15d76af86)) - (via (at 179.07 118.11) (size 0.8) (drill 0.3) (layers "F.Cu" "B.Cu") (net 21) (tstamp 42788a19-9cae-402a-8a4d-05e76741c495)) + (segment (start 176.665614 117.856) (end 174.625 115.815386) (width 0.25) (layer "F.Cu") (net 21) (tstamp 2631c080-8be0-4e46-a8d6-c2b7d59e7224)) + (segment (start 178.308 117.856) (end 176.665614 117.856) (width 0.25) (layer "F.Cu") (net 21) (tstamp 5618cab4-d6b5-41b9-94ea-5f66316ebc21)) + (segment (start 174.625 115.815386) (end 174.625 111.125) (width 0.25) (layer "F.Cu") (net 21) (tstamp 6c4f82a4-8e4f-4a80-8998-e9d4c04cd1d9)) + (via (at 178.308 117.856) (size 0.8) (drill 0.3) (layers "F.Cu" "B.Cu") (net 21) (tstamp 42788a19-9cae-402a-8a4d-05e76741c495)) (via (at 174.625 111.125) (size 0.8) (drill 0.3) (layers "F.Cu" "B.Cu") (net 21) (tstamp 55671476-0957-49a3-b6b8-7f3062286aea)) - (segment (start 179.4275 121.285) (end 179.589999 121.122501) (width 0.25) (layer "B.Cu") (net 21) (tstamp 0749d529-46ae-4e97-b5d3-f45cc0a638b5)) - (segment (start 179.589999 121.122501) (end 179.589999 116.4082) (width 0.25) (layer "B.Cu") (net 21) (tstamp 26928487-c5f4-4370-bcf4-c67416586112)) - (segment (start 179.589999 117.590001) (end 179.07 118.11) (width 0.25) (layer "B.Cu") (net 21) (tstamp 283a4484-caf3-4ced-b06c-485cd6f67217)) + (segment (start 178.308 117.856) (end 179.589999 116.574001) (width 0.25) (layer "B.Cu") (net 21) (tstamp 20e639c8-bf30-4ea4-9a89-5e3f78af707a)) + (segment (start 179.589999 120.233501) (end 179.589999 116.4082) (width 0.25) (layer "B.Cu") (net 21) (tstamp 2566efed-58fd-49f9-a60e-92efbd56f95b)) (segment (start 174.625 111.125) (end 173.99 111.125) (width 0.25) (layer "B.Cu") (net 21) (tstamp 3be29a18-5ff0-4640-bedb-3d7f0b4ff41c)) (segment (start 173.99 111.125) (end 173.7125 111.4025) (width 0.25) (layer "B.Cu") (net 21) (tstamp 61b4cf53-2265-4805-9e44-012db20e81fc)) (segment (start 173.7125 111.4025) (end 173.7125 113.03) (width 0.25) (layer "B.Cu") (net 21) (tstamp 6f22f327-d561-4867-9db2-2a16551482be)) - (segment (start 179.589999 116.4082) (end 179.589999 117.590001) (width 0.25) (layer "B.Cu") (net 21) (tstamp bea5aea2-6785-4676-9a95-c3802b203986)) - (segment (start 180.83 84.945) (end 180.975 85.09) (width 0.4) (layer "B.Cu") (net 22) (tstamp 00798427-24aa-41c7-9329-0de9c2e1a5f2)) - (segment (start 180.975 88.265) (end 180.485 88.755) (width 0.4) (layer "B.Cu") (net 22) (tstamp 15916b84-c7c5-4751-949c-3d2bc321ddc0)) - (segment (start 177.0325 85.8575) (end 177.945 84.945) (width 0.4) (layer "B.Cu") (net 22) (tstamp 54da14d1-2074-4aae-b325-d9da358788fb)) - (segment (start 177.945 84.945) (end 179.705 84.945) (width 0.4) (layer "B.Cu") (net 22) (tstamp 9c1450b3-8b58-4fa0-b019-02a61c7dfc35)) - (segment (start 179.705 84.945) (end 180.83 84.945) (width 0.4) (layer "B.Cu") (net 22) (tstamp a03ded52-2015-4452-839c-c1dd0a57b945)) - (segment (start 175.93 85.8575) (end 177.0325 85.8575) (width 0.4) (layer "B.Cu") (net 22) (tstamp bb1df4cd-9e09-415f-baba-9b42c5306117)) - (segment (start 180.975 85.09) (end 180.975 88.265) (width 0.4) (layer "B.Cu") (net 22) (tstamp db5d4432-9c41-4fd6-9d87-d1b76ea4d796)) - (segment (start 180.485 88.755) (end 179.705 88.755) (width 0.4) (layer "B.Cu") (net 22) (tstamp f39369b2-2cab-4342-9c45-c052d47cfae8)) + (segment (start 179.589999 116.574001) (end 179.589999 116.4082) (width 0.25) (layer "B.Cu") (net 21) (tstamp 82b3458b-bb95-40a8-9ea1-bbdbcfb58595)) + (segment (start 179.4275 120.396) (end 179.589999 120.233501) (width 0.25) (layer "B.Cu") (net 21) (tstamp c8508011-6dbe-4da6-aecf-ee9ddde48e7a)) + (segment (start 177.0325 85.8575) (end 178.562 84.328) (width 0.4) (layer "B.Cu") (net 22) (tstamp 094ed148-9486-465a-a16e-705f002c877d)) + (segment (start 174.2495 85.8575) (end 173.8395 85.4475) (width 0.4) (layer "B.Cu") (net 22) (tstamp 176205c8-8bde-4330-9fc5-54d8c3259800)) + (segment (start 178.562 84.328) (end 179.324 84.328) (width 0.4) (layer "B.Cu") (net 22) (tstamp 2351fa52-7095-405d-ad80-94104887cd39)) + (segment (start 173.8395 85.4475) (end 173.8395 81) (width 0.4) (layer "B.Cu") (net 22) (tstamp 944db0a2-db2a-4828-b86e-659905520db2)) + (segment (start 175.93 85.8575) (end 177.0325 85.8575) (width 0.4) (layer "B.Cu") (net 22) (tstamp ee6d1f0b-0cb1-4e1d-b918-4b389db4be61)) + (segment (start 175.93 85.8575) (end 174.2495 85.8575) (width 0.4) (layer "B.Cu") (net 22) (tstamp efd0de46-58e3-4b45-989e-484472b30c7d)) (segment (start 180.59 113.4618) (end 180.59 111.1525) (width 0.25) (layer "B.Cu") (net 23) (tstamp 40bedfb1-0ff0-4c93-b087-decc56505096)) (segment (start 180.59 111.1525) (end 180.975 110.7675) (width 0.25) (layer "B.Cu") (net 23) (tstamp 9c72da3c-ba54-4f7f-bc26-9d4405211753)) (segment (start 179.589999 112.914999) (end 178.435 111.76) (width 0.25) (layer "B.Cu") (net 24) (tstamp 2538c388-6c2b-4bb5-b2cf-5339a2f54c88)) @@ -4829,9 +4811,11 @@ (segment (start 135.255 110.1325) (end 132.6425 110.1325) (width 0.4) (layer "B.Cu") (net 70) (tstamp 78c7ee23-fb63-411b-a65e-ce91cbc9b985)) (segment (start 132.3575 112.395) (end 132.3575 110.4175) (width 0.4) (layer "B.Cu") (net 70) (tstamp a3e86fac-f607-42ba-aba9-4980bc7c474a)) (segment (start 132.3575 110.4175) (end 132.605 110.17) (width 0.4) (layer "B.Cu") (net 70) (tstamp ed74e1c9-30ed-47d8-a746-cd79cbbc86c9)) - (segment (start 180.975 124.46) (end 176.53 124.46) (width 0.25) (layer "F.Cu") (net 71) (tstamp 072ef33f-db87-489a-8246-42331ccbceb8)) - (segment (start 182.88 122.555) (end 180.975 124.46) (width 0.25) (layer "F.Cu") (net 71) (tstamp 20389248-f981-49f9-b4a5-c65f05577bf8)) - (segment (start 182.88 116.205) (end 182.88 122.555) (width 0.25) (layer "F.Cu") (net 71) (tstamp d88b0fac-44c6-447c-a631-b188df84dd49)) + (segment (start 176.53 124.46) (end 176.53 121.158) (width 0.25) (layer "F.Cu") (net 71) (tstamp 086035ce-c983-4e82-b38c-5c1aacf50204)) + (segment (start 182.372 120.904) (end 182.88 120.396) (width 0.25) (layer "F.Cu") (net 71) (tstamp 20ddc3d5-57c9-443a-bfd2-72d163a78612)) + (segment (start 182.88 120.396) (end 182.88 116.205) (width 0.25) (layer "F.Cu") (net 71) (tstamp 5bce5e35-2839-4647-924c-b1c3345691fa)) + (segment (start 176.53 121.158) (end 176.784 120.904) (width 0.25) (layer "F.Cu") (net 71) (tstamp 6c42c123-237c-4c58-acbb-41a4e9628dd0)) + (segment (start 176.784 120.904) (end 182.372 120.904) (width 0.25) (layer "F.Cu") (net 71) (tstamp e1a77299-fec6-4bf6-b7dc-c75e9a77a77d)) (via (at 182.88 116.205) (size 0.8) (drill 0.3) (layers "F.Cu" "B.Cu") (net 71) (tstamp 289f26cc-2650-4797-b959-3d3b531f6cc7)) (via (at 176.53 124.46) (size 0.8) (drill 0.3) (layers "F.Cu" "B.Cu") (net 71) (tstamp f45edb0b-cbfb-4bed-9d02-985a20212326)) (segment (start 153.67 128.27) (end 153.67 124.46) (width 0.25) (layer "B.Cu") (net 71) (tstamp 0066099f-f4ec-4df6-b5ed-6dee2f527c39)) @@ -4877,28 +4861,28 @@ (segment (start 120.65 99.695) (end 120.015 99.06) (width 0.25) (layer "B.Cu") (net 73) (tstamp bbe94fed-4e1a-40d9-9a84-46bcb6d84294)) (segment (start 119.2475 100.625) (end 120.7125 100.625) (width 0.3) (layer "B.Cu") (net 73) (tstamp c0860fe4-2942-431c-8abc-fdf0c4e106a9)) (segment (start 120.7125 100.625) (end 121.6425 99.695) (width 0.3) (layer "B.Cu") (net 73) (tstamp c3313216-4277-4662-b39d-3b79b2547ded)) - (segment (start 169.545 118.745) (end 172.085 118.745) (width 0.25) (layer "F.Cu") (net 74) (tstamp 245487bb-ff24-4b43-8d41-23f483f78455)) + (segment (start 178.816 118.872) (end 181.61 118.872) (width 0.25) (layer "F.Cu") (net 74) (tstamp 1cfb3127-bf39-43a8-b980-9748b3a4fa5c)) + (segment (start 169.545 118.745) (end 171.704 118.745) (width 0.25) (layer "F.Cu") (net 74) (tstamp 2885253b-7521-454b-8a40-f881eec3c0c3)) (segment (start 152.2905 120.015) (end 151.0205 118.745) (width 0.25) (layer "F.Cu") (net 74) (tstamp 4de28b29-d7db-4bff-ae67-44787e4e81b1)) - (segment (start 179.07 119.38) (end 181.61 119.38) (width 0.25) (layer "F.Cu") (net 74) (tstamp 70ba55e8-8fda-4057-92ae-a603d0a4d71b)) + (segment (start 181.61 116.205) (end 182.88 114.935) (width 0.25) (layer "F.Cu") (net 74) (tstamp 5911900a-3ccd-42b8-9134-bddf77c0b6d7)) + (segment (start 181.61 118.872) (end 181.61 116.205) (width 0.25) (layer "F.Cu") (net 74) (tstamp 80755d2b-87d8-4f45-a33b-a365cb750de8)) (segment (start 156.21 120.015) (end 152.2905 120.015) (width 0.25) (layer "F.Cu") (net 74) (tstamp 974171af-2789-44e6-b405-9a8a6229a559)) - (segment (start 181.61 116.205) (end 181.61 119.38) (width 0.25) (layer "F.Cu") (net 74) (tstamp cdb5278e-28a5-43d3-8389-c0e69024b661)) - (segment (start 178.435 120.015) (end 179.07 119.38) (width 0.25) (layer "F.Cu") (net 74) (tstamp d544a6c3-ef2e-4085-83ad-e78b313a15e1)) - (segment (start 182.88 114.935) (end 181.61 116.205) (width 0.25) (layer "F.Cu") (net 74) (tstamp ef9c1b1e-a30b-4405-a2f2-9e2ca4cc821b)) - (via (at 172.085 118.745) (size 0.8) (drill 0.3) (layers "F.Cu" "B.Cu") (net 74) (tstamp 51311af9-5642-4c2d-9669-320825b614c9)) + (via (at 171.704 118.745) (size 0.8) (drill 0.3) (layers "F.Cu" "B.Cu") (net 74) (tstamp 51311af9-5642-4c2d-9669-320825b614c9)) (via (at 156.21 120.015) (size 0.8) (drill 0.3) (layers "F.Cu" "B.Cu") (net 74) (tstamp 59f90838-1580-4671-af81-ff28409c86e3)) (via (at 151.0205 118.745) (size 0.8) (drill 0.3) (layers "F.Cu" "B.Cu") (net 74) (tstamp 8c831053-e933-42d6-9798-132fa61951a8)) (via (at 169.545 118.745) (size 0.8) (drill 0.3) (layers "F.Cu" "B.Cu") (net 74) (tstamp 9ed3461a-759d-4129-b2e9-d4e8c76d6d94)) (via (at 182.88 114.935) (size 0.8) (drill 0.3) (layers "F.Cu" "B.Cu") (net 74) (tstamp ac11c7cc-ce7b-4be4-91e1-1c528bd518a7)) - (via (at 178.435 120.015) (size 0.8) (drill 0.3) (layers "F.Cu" "B.Cu") (net 74) (tstamp afaca1ac-e887-41fc-a6fc-89e1e77fca53)) + (via (at 178.816 118.872) (size 0.8) (drill 0.3) (layers "F.Cu" "B.Cu") (net 74) (tstamp afaca1ac-e887-41fc-a6fc-89e1e77fca53)) + (segment (start 175.895 118.745) (end 177.165 120.015) (width 0.25) (layer "B.Cu") (net 74) (tstamp 1dc52aa6-47e9-49d6-a53b-33605a33dd88)) + (segment (start 177.165 120.015) (end 178.308 118.872) (width 0.25) (layer "B.Cu") (net 74) (tstamp 234b1742-7736-4ebd-8443-c9a35d232ac2)) (segment (start 182.63 115.185) (end 182.88 114.935) (width 0.25) (layer "B.Cu") (net 74) (tstamp 4a784936-066c-4713-8879-230906a2389a)) + (segment (start 171.704 118.745) (end 175.895 118.745) (width 0.25) (layer "B.Cu") (net 74) (tstamp 538ef342-886e-4535-ac0c-4d89f7ba0a16)) (segment (start 150.745 118.4695) (end 151.0205 118.745) (width 0.25) (layer "B.Cu") (net 74) (tstamp 6c04f4a2-c27f-4206-9722-171637bb5b0e)) (segment (start 169.545 118.745) (end 157.48 118.745) (width 0.25) (layer "B.Cu") (net 74) (tstamp 75a8cb9b-74da-4f79-889e-3ce90ba8b67b)) (segment (start 157.48 118.745) (end 156.21 120.015) (width 0.25) (layer "B.Cu") (net 74) (tstamp 75ecd1e8-7b3a-47ea-a86c-9c58676c78f7)) + (segment (start 178.308 118.872) (end 178.816 118.872) (width 0.25) (layer "B.Cu") (net 74) (tstamp 843eebd2-b43a-4bd1-841e-75d443bd35d3)) (segment (start 150.745 117.1925) (end 150.745 118.4695) (width 0.25) (layer "B.Cu") (net 74) (tstamp a2612e95-91e4-4f01-a183-c4d1e33b914d)) - (segment (start 172.085 118.745) (end 175.895 118.745) (width 0.25) (layer "B.Cu") (net 74) (tstamp ae10449c-c716-42aa-a5ea-4b414793c9e7)) (segment (start 181.8132 115.185) (end 182.63 115.185) (width 0.25) (layer "B.Cu") (net 74) (tstamp cbc0b586-2098-4a9b-87aa-a0953023016e)) - (segment (start 175.895 118.745) (end 177.165 120.015) (width 0.25) (layer "B.Cu") (net 74) (tstamp dfdd3c11-8925-413b-a0bc-9fc9d25dfe0a)) - (segment (start 177.165 120.015) (end 178.435 120.015) (width 0.25) (layer "B.Cu") (net 74) (tstamp e1377927-3b5b-4bcf-ac91-0bdcd71cc214)) (segment (start 162.56 108.585) (end 162.56 99.06) (width 0.25) (layer "B.Cu") (net 75) (tstamp 0961e9ec-af21-4e98-a9ce-b2d4e3f94a97)) (segment (start 161.83 98.33) (end 153.045 98.33) (width 0.25) (layer "B.Cu") (net 75) (tstamp 353c62f4-4e4c-499f-b18f-ff452e53a2f0)) (segment (start 158.865 112.28) (end 162.56 108.585) (width 0.25) (layer "B.Cu") (net 75) (tstamp be3383c8-2529-4744-ba4b-355f8a8229c1)) @@ -5036,28 +5020,30 @@ (segment (start 159.7375 117.1925) (end 160.02 117.475) (width 0.25) (layer "B.Cu") (net 89) (tstamp 6f48b2a7-4a67-40f9-9d18-164829a6ee41)) (segment (start 167.005 112.395) (end 165.1 112.395) (width 0.25) (layer "B.Cu") (net 89) (tstamp e5716691-bc9b-485f-8f29-47519eeb1112)) (segment (start 170.18 105.41) (end 170.18 111.76) (width 0.25) (layer "B.Cu") (net 89) (tstamp fd2229c3-d159-4eb5-874f-bf87821e93db)) - (segment (start 147.955 130.81) (end 168.91 130.81) (width 0.25) (layer "F.Cu") (net 90) (tstamp 0703d627-05fa-4f27-800b-23b2a05de5aa)) - (segment (start 170.18 137.16) (end 185.42 137.16) (width 0.25) (layer "F.Cu") (net 90) (tstamp 39f3ad43-23fe-4284-9572-a40048d945b6)) - (segment (start 147.32 130.175) (end 147.955 130.81) (width 0.25) (layer "F.Cu") (net 90) (tstamp 65c421b4-867b-414c-88ed-74176fc0bb61)) - (segment (start 186.69 89.535) (end 185.42 88.265) (width 0.25) (layer "F.Cu") (net 90) (tstamp 7271f5e5-2c09-40fa-bfc4-a9358779817a)) - (segment (start 186.69 135.89) (end 186.69 113.665) (width 0.25) (layer "F.Cu") (net 90) (tstamp 793d7cb2-40ea-4f0f-9ad2-21eaa9d09b0b)) - (segment (start 169.545 136.525) (end 170.18 137.16) (width 0.25) (layer "F.Cu") (net 90) (tstamp 8afe669a-447f-4d54-8ae4-ebd56d3804bf)) - (segment (start 185.42 88.265) (end 173.99 88.265) (width 0.25) (layer "F.Cu") (net 90) (tstamp 8d59ce0d-0e5f-444d-a012-9e16d8512c78)) - (segment (start 186.69 110.49) (end 186.69 89.535) (width 0.25) (layer "F.Cu") (net 90) (tstamp c6eecd9a-1479-433f-bf35-6f8340a2c7aa)) - (segment (start 169.545 131.445) (end 169.545 136.525) (width 0.25) (layer "F.Cu") (net 90) (tstamp d220d854-6b47-450f-b5cb-8f7c4410f420)) - (segment (start 147.32 121.8305) (end 147.32 130.175) (width 0.25) (layer "F.Cu") (net 90) (tstamp dc309cf5-1fa9-42c8-bc75-657d7827bbb5)) - (segment (start 185.42 137.16) (end 186.69 135.89) (width 0.25) (layer "F.Cu") (net 90) (tstamp fd89ad02-d1aa-4d4c-99eb-9b37ee2ca48f)) - (segment (start 168.91 130.81) (end 169.545 131.445) (width 0.25) (layer "F.Cu") (net 90) (tstamp ff791f99-3134-4b61-84db-ed228463c7dc)) + (segment (start 169.545 131.445) (end 168.91 130.81) (width 0.25) (layer "F.Cu") (net 90) (tstamp 0f5e2e06-de38-4b71-8398-7ce180b8accd)) + (segment (start 173.99 91.186) (end 174.752 91.948) (width 0.25) (layer "F.Cu") (net 90) (tstamp 2348ae97-f227-4754-89a6-6c88d512b117)) + (segment (start 170.18 137.16) (end 169.545 136.525) (width 0.25) (layer "F.Cu") (net 90) (tstamp 24f89568-4210-4927-8662-f1ea6ade72cc)) + (segment (start 186.69 135.89) (end 185.42 137.16) (width 0.25) (layer "F.Cu") (net 90) (tstamp 79e357e9-fb4c-4439-8912-c138f73339fe)) + (segment (start 173.99 88.265) (end 173.99 91.186) (width 0.25) (layer "F.Cu") (net 90) (tstamp 86762451-fb80-4b5b-ba9d-1e277e931901)) + (segment (start 185.42 137.16) (end 170.18 137.16) (width 0.25) (layer "F.Cu") (net 90) (tstamp 94e7ab7c-8d71-4cdd-9c13-5e247bafd74c)) + (segment (start 186.69 110.49) (end 186.69 92.71) (width 0.25) (layer "F.Cu") (net 90) (tstamp 972822e4-6858-409a-a45c-fd0a76865cce)) + (segment (start 168.91 130.81) (end 147.955 130.81) (width 0.25) (layer "F.Cu") (net 90) (tstamp aaa11b1e-3b76-47e4-ba74-987d5b87bf1a)) + (segment (start 186.69 113.284) (end 186.69 135.89) (width 0.25) (layer "F.Cu") (net 90) (tstamp c9420070-9d3e-4e2b-a93b-d82591897566)) + (segment (start 147.955 130.81) (end 147.32 130.175) (width 0.25) (layer "F.Cu") (net 90) (tstamp cc225290-fb47-4d19-90b8-aa331ad3a7da)) + (segment (start 185.928 91.948) (end 186.69 92.71) (width 0.25) (layer "F.Cu") (net 90) (tstamp e893f9a3-3ae2-4618-b034-2fb1ff12fb02)) + (segment (start 169.545 136.525) (end 169.545 131.445) (width 0.25) (layer "F.Cu") (net 90) (tstamp eb07085e-43a9-4233-9cb5-d20c84637941)) + (segment (start 147.32 130.175) (end 147.32 121.8305) (width 0.25) (layer "F.Cu") (net 90) (tstamp f75cc1ca-a1cb-46d1-ac7e-074261842ff0)) + (segment (start 174.752 91.948) (end 185.928 91.948) (width 0.25) (layer "F.Cu") (net 90) (tstamp ffd6493d-8dc5-49ec-8712-48138e71442f)) (via (at 173.99 88.265) (size 0.8) (drill 0.3) (layers "F.Cu" "B.Cu") (net 90) (tstamp 398f0e0e-772b-4367-a2ae-31ef846576f4)) (via (at 186.69 110.49) (size 0.8) (drill 0.3) (layers "F.Cu" "B.Cu") (net 90) (tstamp 85e62aa7-a045-42be-844a-45ac99c3a5ba)) - (via (at 186.69 113.665) (size 0.8) (drill 0.3) (layers "F.Cu" "B.Cu") (net 90) (tstamp 9335ab5e-2df4-407e-ba02-a081cb205b33)) + (via (at 186.69 113.284) (size 0.8) (drill 0.3) (layers "F.Cu" "B.Cu") (net 90) (tstamp 9335ab5e-2df4-407e-ba02-a081cb205b33)) (via (at 147.32 121.8305) (size 0.8) (drill 0.3) (layers "F.Cu" "B.Cu") (net 90) (tstamp dab72854-c90a-4b72-9600-6db1b4283eb7)) - (segment (start 186.69 113.665) (end 186.69 110.49) (width 0.25) (layer "B.Cu") (net 90) (tstamp 309139cc-9507-46e9-9907-7c5c8616b531)) (segment (start 147.512007 121.8305) (end 147.32 121.8305) (width 0.25) (layer "B.Cu") (net 90) (tstamp 5ec80bfb-18df-452a-8703-43353cca417b)) (segment (start 149.245 117.1925) (end 149.245 120.097507) (width 0.25) (layer "B.Cu") (net 90) (tstamp 6a7aadec-91c0-487c-9203-b88bae8f4be5)) (segment (start 175.7975 88.265) (end 175.93 88.3975) (width 0.25) (layer "B.Cu") (net 90) (tstamp 72b47705-060b-4ddb-af86-17ceb73409c9)) (segment (start 173.99 88.265) (end 175.7975 88.265) (width 0.25) (layer "B.Cu") (net 90) (tstamp 88acb055-aa09-4d3a-95e9-8bd15e364d90)) (segment (start 149.245 120.097507) (end 147.512007 121.8305) (width 0.25) (layer "B.Cu") (net 90) (tstamp 9a762953-fdeb-4039-a0bb-b75a63810ada)) + (segment (start 186.69 113.284) (end 186.69 110.49) (width 0.25) (layer "B.Cu") (net 90) (tstamp ddb4abea-0e97-4813-9861-df4c51cbb9d8)) (segment (start 169.545 92.075) (end 170.18 92.71) (width 0.4) (layer "F.Cu") (net 92) (tstamp 04343739-ea14-448b-addc-91e47542334c)) (segment (start 154.305 95.25) (end 154.94 95.885) (width 0.4) (layer "F.Cu") (net 92) (tstamp 108b4e10-da35-490e-b655-19b1a97445a9)) (segment (start 153.67 93.345) (end 154.305 93.98) (width 0.4) (layer "F.Cu") (net 92) (tstamp 21d75aed-cf26-49b3-9de1-f8f2aa5441af)) diff --git a/hardware/pcb/Dumber-v3/dumber-v3/dumber-v3.kicad_prl b/hardware/pcb/Dumber-v3/dumber-v3/dumber-v3.kicad_prl index 130a151..0e5adc4 100644 --- a/hardware/pcb/Dumber-v3/dumber-v3/dumber-v3.kicad_prl +++ b/hardware/pcb/Dumber-v3/dumber-v3/dumber-v3.kicad_prl @@ -1,6 +1,6 @@ { "board": { - "active_layer": 0, + "active_layer": 44, "active_layer_preset": "", "auto_track_width": true, "hidden_nets": [], @@ -62,7 +62,7 @@ 35, 36 ], - "visible_layers": "ffcfdff_ffffffff", + "visible_layers": "ffcffff_ffffffff", "zone_display_mode": 0 }, "meta": { diff --git a/hardware/pcb/Dumber-v3/dumber-v3/dumber-v3.kicad_sch b/hardware/pcb/Dumber-v3/dumber-v3/dumber-v3.kicad_sch index a4506a7..0490c11 100644 --- a/hardware/pcb/Dumber-v3/dumber-v3/dumber-v3.kicad_sch +++ b/hardware/pcb/Dumber-v3/dumber-v3/dumber-v3.kicad_sch @@ -472,7 +472,7 @@ (reference "#PWR0109") (unit 1) (value "+2V5") (footprint "") ) (path "/3615d78e-1dd3-4b20-9017-3539b8f88e06/053dd8a9-6683-412e-b95b-646ea38b2cad" - (reference "BT1") (unit 1) (value "Li-ION") (footprint "Battery:BatteryHolder_Keystone_2460_1xAA") + (reference "BT1") (unit 1) (value "Li-ION") (footprint "INSA:Battery-14500") ) (path "/3615d78e-1dd3-4b20-9017-3539b8f88e06/bd71a09f-c787-4676-9eaf-0b8a418617b8" (reference "C1") (unit 1) (value "10nF") (footprint "Capacitor_SMD:C_0805_2012Metric") diff --git a/hardware/pcb/Dumber-v3/dumber-v3/power_charge.kicad_sch b/hardware/pcb/Dumber-v3/dumber-v3/power_charge.kicad_sch index e2df75f..4a199ba 100644 --- a/hardware/pcb/Dumber-v3/dumber-v3/power_charge.kicad_sch +++ b/hardware/pcb/Dumber-v3/dumber-v3/power_charge.kicad_sch @@ -2287,7 +2287,7 @@ (property "Value" "Li-ION" (id 1) (at 174.371 153.3402 0) (effects (font (size 1.27 1.27)) (justify left)) ) - (property "Footprint" "Battery:BatteryHolder_Keystone_2460_1xAA" (id 2) (at 171.45 152.146 90) + (property "Footprint" "INSA:Battery-14500" (id 2) (at 171.45 152.146 90) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "~" (id 3) (at 171.45 152.146 90) diff --git a/software/monitor/monitor-python-qt/globvar.py b/software/monitor/monitor-python-qt/globvar.py new file mode 100644 index 0000000..2f42495 --- /dev/null +++ b/software/monitor/monitor-python-qt/globvar.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- + +class GlobVar: + port = 5544 # default server port + timeout=1.0 # default waiting time for an answer. May be increased for debugging purpose + address = "localhost" # default server address. Use this with 'nc -l ' for testing on your machine + getBatteryLevelPeriod=2 # periodic delay for requesting battery level. If value is 0 or below, not battery check is done + + # do not modify value below this line + + connectedToPi = False + connectedToDumber = False + dumberStarted = False + + batteryLevel = -1 + currentMovement="STOP" + + last_answer = -1 + + #message = [] + + exceptionmsg= "" \ No newline at end of file diff --git a/software/monitor/monitor-python-qt/log_dialog.py b/software/monitor/monitor-python-qt/log_dialog.py new file mode 100644 index 0000000..55343b2 --- /dev/null +++ b/software/monitor/monitor-python-qt/log_dialog.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'ui/log_dialog.ui' +# +# Created by: PyQt5 UI code generator 5.14.1 +# +# WARNING! All changes made in this file will be lost! + + +from PyQt5 import QtCore, QtGui, QtWidgets + + +class Ui_Dialog(object): + def setupUi(self, Dialog): + Dialog.setObjectName("Dialog") + Dialog.resize(510, 336) + self.verticalLayout = QtWidgets.QVBoxLayout(Dialog) + self.verticalLayout.setObjectName("verticalLayout") + self.plainTextEdit = QtWidgets.QPlainTextEdit(Dialog) + self.plainTextEdit.setReadOnly(True) + self.plainTextEdit.setPlainText("") + self.plainTextEdit.setObjectName("plainTextEdit") + self.verticalLayout.addWidget(self.plainTextEdit) + self.horizontalLayout = QtWidgets.QHBoxLayout() + self.horizontalLayout.setObjectName("horizontalLayout") + spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.horizontalLayout.addItem(spacerItem) + self.pushButton_clearLog = QtWidgets.QPushButton(Dialog) + self.pushButton_clearLog.setObjectName("pushButton_clearLog") + self.horizontalLayout.addWidget(self.pushButton_clearLog) + self.pushButton_closeLog = QtWidgets.QPushButton(Dialog) + self.pushButton_closeLog.setObjectName("pushButton_closeLog") + self.horizontalLayout.addWidget(self.pushButton_closeLog) + self.verticalLayout.addLayout(self.horizontalLayout) + + self.retranslateUi(Dialog) + QtCore.QMetaObject.connectSlotsByName(Dialog) + + def retranslateUi(self, Dialog): + _translate = QtCore.QCoreApplication.translate + Dialog.setWindowTitle(_translate("Dialog", "Messages Log")) + self.pushButton_clearLog.setText(_translate("Dialog", "Clear log")) + self.pushButton_closeLog.setText(_translate("Dialog", "Close")) diff --git a/software/monitor/monitor-python-qt/main_window.py b/software/monitor/monitor-python-qt/main_window.py new file mode 100644 index 0000000..1090808 --- /dev/null +++ b/software/monitor/monitor-python-qt/main_window.py @@ -0,0 +1,221 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'ui/main_window.ui' +# +# Created by: PyQt5 UI code generator 5.14.1 +# +# WARNING! All changes made in this file will be lost! + + +from PyQt5 import QtCore, QtGui, QtWidgets + + +class Ui_MainWindow(object): + def setupUi(self, MainWindow): + MainWindow.setObjectName("MainWindow") + MainWindow.resize(928, 629) + self.centralwidget = QtWidgets.QWidget(MainWindow) + self.centralwidget.setObjectName("centralwidget") + self.horizontalLayout_6 = QtWidgets.QHBoxLayout(self.centralwidget) + self.horizontalLayout_6.setObjectName("horizontalLayout_6") + self.verticalLayout_4 = QtWidgets.QVBoxLayout() + self.verticalLayout_4.setObjectName("verticalLayout_4") + self.checkBox_enableCamera = QtWidgets.QCheckBox(self.centralwidget) + self.checkBox_enableCamera.setObjectName("checkBox_enableCamera") + self.verticalLayout_4.addWidget(self.checkBox_enableCamera) + self.graphicsView_Image = QtWidgets.QGraphicsView(self.centralwidget) + self.graphicsView_Image.setObjectName("graphicsView_Image") + self.verticalLayout_4.addWidget(self.graphicsView_Image) + self.pushButton_confirmArena = QtWidgets.QPushButton(self.centralwidget) + self.pushButton_confirmArena.setObjectName("pushButton_confirmArena") + self.verticalLayout_4.addWidget(self.pushButton_confirmArena) + self.horizontalLayout_3 = QtWidgets.QHBoxLayout() + self.horizontalLayout_3.setObjectName("horizontalLayout_3") + self.checkBox_enableFPS = QtWidgets.QCheckBox(self.centralwidget) + self.checkBox_enableFPS.setObjectName("checkBox_enableFPS") + self.horizontalLayout_3.addWidget(self.checkBox_enableFPS) + self.checkBox_enablePosition = QtWidgets.QCheckBox(self.centralwidget) + self.checkBox_enablePosition.setObjectName("checkBox_enablePosition") + self.horizontalLayout_3.addWidget(self.checkBox_enablePosition) + self.verticalLayout_4.addLayout(self.horizontalLayout_3) + self.horizontalLayout_6.addLayout(self.verticalLayout_4) + self.verticalLayout_6 = QtWidgets.QVBoxLayout() + self.verticalLayout_6.setObjectName("verticalLayout_6") + self.groupBox_connection = QtWidgets.QGroupBox(self.centralwidget) + self.groupBox_connection.setAlignment(QtCore.Qt.AlignCenter) + self.groupBox_connection.setFlat(False) + self.groupBox_connection.setCheckable(False) + self.groupBox_connection.setObjectName("groupBox_connection") + self.verticalLayout = QtWidgets.QVBoxLayout(self.groupBox_connection) + self.verticalLayout.setObjectName("verticalLayout") + self.horizontalLayout = QtWidgets.QHBoxLayout() + self.horizontalLayout.setObjectName("horizontalLayout") + self.label = QtWidgets.QLabel(self.groupBox_connection) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.label.sizePolicy().hasHeightForWidth()) + self.label.setSizePolicy(sizePolicy) + self.label.setObjectName("label") + self.horizontalLayout.addWidget(self.label) + self.lineEdit_address = QtWidgets.QLineEdit(self.groupBox_connection) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.lineEdit_address.sizePolicy().hasHeightForWidth()) + self.lineEdit_address.setSizePolicy(sizePolicy) + self.lineEdit_address.setMaximumSize(QtCore.QSize(300, 16777215)) + self.lineEdit_address.setObjectName("lineEdit_address") + self.horizontalLayout.addWidget(self.lineEdit_address) + self.verticalLayout.addLayout(self.horizontalLayout) + self.horizontalLayout_2 = QtWidgets.QHBoxLayout() + self.horizontalLayout_2.setObjectName("horizontalLayout_2") + self.label_2 = QtWidgets.QLabel(self.groupBox_connection) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.label_2.sizePolicy().hasHeightForWidth()) + self.label_2.setSizePolicy(sizePolicy) + self.label_2.setObjectName("label_2") + self.horizontalLayout_2.addWidget(self.label_2) + self.lineEdit_port = QtWidgets.QLineEdit(self.groupBox_connection) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.lineEdit_port.sizePolicy().hasHeightForWidth()) + self.lineEdit_port.setSizePolicy(sizePolicy) + self.lineEdit_port.setMaximumSize(QtCore.QSize(300, 16777215)) + self.lineEdit_port.setObjectName("lineEdit_port") + self.horizontalLayout_2.addWidget(self.lineEdit_port) + self.verticalLayout.addLayout(self.horizontalLayout_2) + self.horizontalLayout_4 = QtWidgets.QHBoxLayout() + self.horizontalLayout_4.setObjectName("horizontalLayout_4") + self.label_3 = QtWidgets.QLabel(self.groupBox_connection) + self.label_3.setObjectName("label_3") + self.horizontalLayout_4.addWidget(self.label_3) + self.label_connectionStatus = QtWidgets.QLabel(self.groupBox_connection) + self.label_connectionStatus.setObjectName("label_connectionStatus") + self.horizontalLayout_4.addWidget(self.label_connectionStatus) + self.verticalLayout.addLayout(self.horizontalLayout_4) + self.line = QtWidgets.QFrame(self.groupBox_connection) + self.line.setFrameShape(QtWidgets.QFrame.HLine) + self.line.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line.setObjectName("line") + self.verticalLayout.addWidget(self.line) + self.verticalLayout_6.addWidget(self.groupBox_connection) + self.groupBox_activation = QtWidgets.QGroupBox(self.centralwidget) + self.groupBox_activation.setAlignment(QtCore.Qt.AlignCenter) + self.groupBox_activation.setObjectName("groupBox_activation") + self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.groupBox_activation) + self.verticalLayout_2.setObjectName("verticalLayout_2") + self.checkBox_watchdog = QtWidgets.QCheckBox(self.groupBox_activation) + self.checkBox_watchdog.setObjectName("checkBox_watchdog") + self.verticalLayout_2.addWidget(self.checkBox_watchdog) + self.pushButton_start = QtWidgets.QPushButton(self.groupBox_activation) + self.pushButton_start.setObjectName("pushButton_start") + self.verticalLayout_2.addWidget(self.pushButton_start) + self.line_2 = QtWidgets.QFrame(self.groupBox_activation) + self.line_2.setFrameShape(QtWidgets.QFrame.HLine) + self.line_2.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_2.setObjectName("line_2") + self.verticalLayout_2.addWidget(self.line_2) + self.verticalLayout_6.addWidget(self.groupBox_activation) + self.groupBox_mouvments = QtWidgets.QGroupBox(self.centralwidget) + self.groupBox_mouvments.setAlignment(QtCore.Qt.AlignCenter) + self.groupBox_mouvments.setObjectName("groupBox_mouvments") + self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.groupBox_mouvments) + self.verticalLayout_3.setObjectName("verticalLayout_3") + self.gridLayout = QtWidgets.QGridLayout() + self.gridLayout.setObjectName("gridLayout") + self.pushButton_up = QtWidgets.QPushButton(self.groupBox_mouvments) + self.pushButton_up.setObjectName("pushButton_up") + self.gridLayout.addWidget(self.pushButton_up, 0, 1, 1, 1) + self.pushButton_left = QtWidgets.QPushButton(self.groupBox_mouvments) + self.pushButton_left.setObjectName("pushButton_left") + self.gridLayout.addWidget(self.pushButton_left, 1, 0, 1, 1) + self.pushButton_stop = QtWidgets.QPushButton(self.groupBox_mouvments) + self.pushButton_stop.setObjectName("pushButton_stop") + self.gridLayout.addWidget(self.pushButton_stop, 1, 1, 1, 1) + self.pushButton_right = QtWidgets.QPushButton(self.groupBox_mouvments) + self.pushButton_right.setObjectName("pushButton_right") + self.gridLayout.addWidget(self.pushButton_right, 1, 2, 1, 1) + self.pushButton_down = QtWidgets.QPushButton(self.groupBox_mouvments) + self.pushButton_down.setObjectName("pushButton_down") + self.gridLayout.addWidget(self.pushButton_down, 2, 1, 1, 1) + self.verticalLayout_3.addLayout(self.gridLayout) + self.line_3 = QtWidgets.QFrame(self.groupBox_mouvments) + self.line_3.setFrameShape(QtWidgets.QFrame.HLine) + self.line_3.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_3.setObjectName("line_3") + self.verticalLayout_3.addWidget(self.line_3) + self.verticalLayout_6.addWidget(self.groupBox_mouvments) + self.groupBox_AnswerandBattery = QtWidgets.QGroupBox(self.centralwidget) + self.groupBox_AnswerandBattery.setObjectName("groupBox_AnswerandBattery") + self.verticalLayout_5 = QtWidgets.QVBoxLayout(self.groupBox_AnswerandBattery) + self.verticalLayout_5.setObjectName("verticalLayout_5") + self.checkBox_getBattery = QtWidgets.QCheckBox(self.groupBox_AnswerandBattery) + self.checkBox_getBattery.setObjectName("checkBox_getBattery") + self.verticalLayout_5.addWidget(self.checkBox_getBattery) + self.horizontalLayout_5 = QtWidgets.QHBoxLayout() + self.horizontalLayout_5.setObjectName("horizontalLayout_5") + self.label_4 = QtWidgets.QLabel(self.groupBox_AnswerandBattery) + self.label_4.setObjectName("label_4") + self.horizontalLayout_5.addWidget(self.label_4) + self.label_lastAnswer = QtWidgets.QLabel(self.groupBox_AnswerandBattery) + self.label_lastAnswer.setObjectName("label_lastAnswer") + self.horizontalLayout_5.addWidget(self.label_lastAnswer) + self.verticalLayout_5.addLayout(self.horizontalLayout_5) + self.verticalLayout_6.addWidget(self.groupBox_AnswerandBattery) + spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) + self.verticalLayout_6.addItem(spacerItem) + self.horizontalLayout_6.addLayout(self.verticalLayout_6) + MainWindow.setCentralWidget(self.centralwidget) + self.menubar = QtWidgets.QMenuBar(MainWindow) + self.menubar.setGeometry(QtCore.QRect(0, 0, 928, 22)) + self.menubar.setObjectName("menubar") + self.menu_Quitter = QtWidgets.QMenu(self.menubar) + self.menu_Quitter.setObjectName("menu_Quitter") + MainWindow.setMenuBar(self.menubar) + self.statusbar = QtWidgets.QStatusBar(MainWindow) + self.statusbar.setObjectName("statusbar") + MainWindow.setStatusBar(self.statusbar) + self.action_Quitter = QtWidgets.QAction(MainWindow) + self.action_Quitter.setObjectName("action_Quitter") + self.action_OpenMessageLog = QtWidgets.QAction(MainWindow) + self.action_OpenMessageLog.setObjectName("action_OpenMessageLog") + self.menu_Quitter.addAction(self.action_OpenMessageLog) + self.menu_Quitter.addSeparator() + self.menu_Quitter.addAction(self.action_Quitter) + self.menubar.addAction(self.menu_Quitter.menuAction()) + + self.retranslateUi(MainWindow) + QtCore.QMetaObject.connectSlotsByName(MainWindow) + + def retranslateUi(self, MainWindow): + _translate = QtCore.QCoreApplication.translate + MainWindow.setWindowTitle(_translate("MainWindow", "Robot Monitor")) + self.checkBox_enableCamera.setText(_translate("MainWindow", "Enable Ca&mera")) + self.pushButton_confirmArena.setText(_translate("MainWindow", "Co&nfirme arena border...")) + self.checkBox_enableFPS.setText(_translate("MainWindow", "Enable &FPS")) + self.checkBox_enablePosition.setText(_translate("MainWindow", "Enable Pos&ition")) + self.groupBox_connection.setTitle(_translate("MainWindow", "Connection")) + self.label.setText(_translate("MainWindow", "Address:")) + self.label_2.setText(_translate("MainWindow", "Port:")) + self.label_3.setText(_translate("MainWindow", "Status:")) + self.label_connectionStatus.setText(_translate("MainWindow", "Not connected")) + self.groupBox_activation.setTitle(_translate("MainWindow", "Robot Activation")) + self.checkBox_watchdog.setText(_translate("MainWindow", "Start with &watchdog")) + self.pushButton_start.setText(_translate("MainWindow", "Start r&obot")) + self.groupBox_mouvments.setTitle(_translate("MainWindow", "Mouvments")) + self.pushButton_up.setText(_translate("MainWindow", "&Up")) + self.pushButton_left.setText(_translate("MainWindow", "&Left")) + self.pushButton_stop.setText(_translate("MainWindow", "&Stop")) + self.pushButton_right.setText(_translate("MainWindow", "&Right")) + self.pushButton_down.setText(_translate("MainWindow", "&Down")) + self.groupBox_AnswerandBattery.setTitle(_translate("MainWindow", "Others")) + self.checkBox_getBattery.setText(_translate("MainWindow", "Get &Battery")) + self.label_4.setText(_translate("MainWindow", "Last answer:")) + self.label_lastAnswer.setText(_translate("MainWindow", "None")) + self.menu_Quitter.setTitle(_translate("MainWindow", "M&enu")) + self.action_Quitter.setText(_translate("MainWindow", "&Quitter")) + self.action_OpenMessageLog.setText(_translate("MainWindow", "O&pen message log...")) diff --git a/software/monitor/monitor-python-qt/monitor-python.py b/software/monitor/monitor-python-qt/monitor-python.py new file mode 100755 index 0000000..b04facc --- /dev/null +++ b/software/monitor/monitor-python-qt/monitor-python.py @@ -0,0 +1,296 @@ +#!/usr/bin/env python3 + +from email.message import Message +import os + +import time +import sys + +from PyQt5 import (QtCore, QtWidgets) + +from main_window import Ui_MainWindow +from log_dialog import Ui_Dialog +from network import * +from globvar import GlobVar + +class Window(QtWidgets.QMainWindow, Ui_MainWindow): + _msg_dialog= None + _batteryTimer=None + + def __init__(self, parent=None): + super().__init__(parent) + self.setupUi(self) + + self.DisableUIWidgets("Network") + + self.lineEdit_address.setText(GlobVar.address) + self.lineEdit_port.setText(str(GlobVar.port)) + + self._msg_dialog=QtWidgets.QDialog() + self._msg_dialog.ui= Ui_Dialog() + self._msg_dialog.ui.setupUi(self._msg_dialog) + + self.networkThread = Network() + + self.connectSignalSlots() + + # Start network thread and wait for event indicating monitor is connected to a target + self.networkThread.start() + + # Create battery timer + self._batteryTimer = QtCore.QTimer() + self._batteryTimer.timeout.connect(self.OnBatteryTimeout) + + def connectSignalSlots(self): + # Buttons + self.pushButton_start.pressed.connect(self.OnButtonPress_Start) + self.pushButton_confirmArena.pressed.connect(self.OnButtonPress_ConfirmArena) + self.pushButton_up.pressed.connect(self.OnButtonPress_Up) + self.pushButton_down.pressed.connect(self.OnButtonPress_Down) + self.pushButton_stop.pressed.connect(self.OnButtonPress_Stop) + self.pushButton_left.pressed.connect(self.OnButtonPress_Left) + self.pushButton_right.pressed.connect(self.OnButtonPress_Right) + + # Checkbox + self.checkBox_enableCamera.stateChanged.connect(self.OnCheckBoxChanged_EnableCamera) + self.checkBox_enableFPS.stateChanged.connect(self.OnCheckBoxChanged_EnableFPS) + self.checkBox_enablePosition.stateChanged.connect(self.OnCheckBoxChanged_EnablePosition) + self.checkBox_getBattery.stateChanged.connect(self.OnCheckBoxChanged_GetBattery) + + # LineEdit + self.lineEdit_address.textChanged.connect(self.OnLineEditChange_Address) + self.lineEdit_port.textChanged.connect(self.OnLineEditChange_Port) + + # Menu + self.action_OpenMessageLog.triggered.connect(self.OnMenu_OpenMessageLog) + self.action_Quitter.triggered.connect(self.OnMenu_Quitter) + + # Message Dialog + self._msg_dialog.ui.pushButton_clearLog.pressed.connect(self.OnButtonPress_ClearLog) + self._msg_dialog.ui.pushButton_closeLog.pressed.connect(self.OnButtonPress_CloseLog) + + # Network signals + self.networkThread.receptionEvent.connect(self.OnReceptionEvent) + self.networkThread.connectionEvent.connect(self.OnConnectionEvent) + self.networkThread.logEvent.connect(self.OnLogEvent) + self.networkThread.answerEvent.connect(self.OnAnswerEvent) + + def EnableUIWidgets(self, area): + if area == "Network": + self.groupBox_activation.setDisabled(False) + self.graphicsView_Image.setDisabled(False) + self.pushButton_confirmArena.setDisabled(False) + self.checkBox_enableCamera.setDisabled(False) + self.checkBox_enableFPS.setDisabled(False) + self.checkBox_enablePosition.setDisabled(False) + else: + self.groupBox_mouvments.setDisabled(False) + self.groupBox_AnswerandBattery.setDisabled(False) + + def DisableUIWidgets(self, area): + if area == "Network": + self.groupBox_activation.setDisabled(True) + self.graphicsView_Image.setDisabled(True) + self.pushButton_confirmArena.setDisabled(True) + self.checkBox_enableCamera.setDisabled(True) + self.checkBox_enableFPS.setDisabled(True) + self.checkBox_enablePosition.setDisabled(True) + self.groupBox_AnswerandBattery.setDisabled(True) + self.groupBox_mouvments.setDisabled(True) + else: + self.groupBox_mouvments.setDisabled(True) + self.groupBox_AnswerandBattery.setDisabled(True) + + @QtCore.pyqtSlot(str) + def OnLineEditChange_Address(self, text): + if self.networkThread.checkAddressIsValid(text): + GlobVar.address = text + + @QtCore.pyqtSlot(str) + def OnLineEditChange_Port(self, text): + GlobVar.port = int(text) + + @QtCore.pyqtSlot() + def OnButtonPress_Start (self): + if self.pushButton_start.text() == "Start r&obot": + if self.networkThread.robotOpenCom() == NetworkAnswers.ACK: + # com opened successfully, start robot + if self.checkBox_watchdog.isChecked(): + # start with watchdog + if self.networkThread.robotStartWithWatchdog() == NetworkAnswers.ACK: + self.pushButton_start.setText("Reset r&obot") + self.EnableUIWidgets("Robot") + else: + # start without watchdog + if self.networkThread.robotStartWithoutWatchdog() == NetworkAnswers.ACK: + self.pushButton_start.setText("Reset r&obot") + self.EnableUIWidgets("Robot") + else: + if self.networkThread.robotCloseCom() != NetworkAnswers.ACK: + msg= QtWidgets.QMessageBox + msg.warning(self,'Invalid answer', 'Server answer was not acknowledged. Maybe robot is still running', msg.Ok) + + self.pushButton_start.setText("Start r&obot") + self.DisableUIWidgets("Robot") + + @QtCore.pyqtSlot() + def OnButtonPress_ConfirmArena(self): + msg= QtWidgets.QMessageBox + ret = msg.question(self, '', 'Arena boundaries are correctly detected ?',msg.Yes| msg.No) + + if ret == msg.Yes: + print ("Answer is YES") + else: + print ("Answer is NO") + + @QtCore.pyqtSlot() + def OnButtonPress_Up(self): + self.networkThread.robotGoForward() + + @QtCore.pyqtSlot() + def OnButtonPress_Down(self): + self.networkThread.robotGoBackward() + + @QtCore.pyqtSlot() + def OnButtonPress_Stop(self): + self.networkThread.robotStop() + + @QtCore.pyqtSlot() + def OnButtonPress_Left(self): + self.networkThread.robotGoLeft() + + @QtCore.pyqtSlot() + def OnButtonPress_Right(self): + self.networkThread.robotGoRight() + + @QtCore.pyqtSlot(int) + def OnCheckBoxChanged_EnableCamera(self, state): + msg= QtWidgets.QMessageBox + msg.information(self, 'Feature not ready', 'Feature not yet available', msg.Ok) + self.checkBox_enableCamera.setChecked(False) + + @QtCore.pyqtSlot(int) + def OnCheckBoxChanged_EnableFPS(self, state): + msg= QtWidgets.QMessageBox + msg.information(self, 'Feature not ready', 'Feature not yet available', msg.Ok) + self.checkBox_enableFPS.setChecked(False) + + @QtCore.pyqtSlot(int) + def OnCheckBoxChanged_EnablePosition(self, state): + msg= QtWidgets.QMessageBox + msg.information(self, 'Feature not ready', 'Feature not yet available', msg.Ok) + self.checkBox_enablePosition.setChecked(False) + + @QtCore.pyqtSlot(int) + def OnCheckBoxChanged_GetBattery(self, state): + if state !=0: + self._batteryTimer.start(5000) + else: + self._batteryTimer.stop() + + @QtCore.pyqtSlot() + def OnMenu_OpenMessageLog(self): + self._msg_dialog.show() + + @QtCore.pyqtSlot() + def OnMenu_Quitter(self): + self._msg_dialog.hide() + self.close() + + def closeEvent(self, event): + self._msg_dialog.hide() + event.accept() + + @QtCore.pyqtSlot() + def OnButtonPress_ClearLog(self): + plainTextEdit=self._msg_dialog.ui.plainTextEdit + plainTextEdit.document().clear() + + @QtCore.pyqtSlot() + def OnButtonPress_CloseLog(self): + self._msg_dialog.hide() + + # Callback used to decode non answer message from server (mainly battery level and log message) + @QtCore.pyqtSlot(str) + def OnReceptionEvent(self, s) -> None: + if Network.ROBOT_BATTERY_LEVEL in s: + str_split = s.split(':') + + try: + batteryLevel = int(str_split[1]) + except: + batteryLevel = -1 + + if batteryLevel == 0: + self.checkBox_getBattery.setText ("Get battery (0 = empty)") + elif batteryLevel == 1: + self.checkBox_getBattery.setText ("Get battery (1 = low)") + elif batteryLevel == 2: + self.checkBox_getBattery.setText ("Get battery (2 = full)") + else: + self.checkBox_getBattery.setText ("Get battery (invalid value)") + + # Callback for battery timeout + @QtCore.pyqtSlot() + def OnBatteryTimeout(self) -> None: + # Send a request for battery level. Answer will be done in OnReceptionEvent callback + self.networkThread.robotGetBattery() + + # Callback for connection/deconnection event from network manager + @QtCore.pyqtSlot(int) + def OnConnectionEvent(self, event) -> None: + if event == NetworkEvents.EVENT_CONNECTED: + GlobVar.connectedToPi = True + print ("Connected to server") + + self.label_connectionStatus.setText("Connected") + self.EnableUIWidgets("Network") + elif event == NetworkEvents.EVENT_CONNECTION_LOST: + GlobVar.connectedToPi = False + print ("Disconnected from server") + + self.label_connectionStatus.setText("Not connected") + self.pushButton_start.setText("Start r&obot") + self.DisableUIWidgets("Network") + + # Callback for answer event from network manager + @QtCore.pyqtSlot(int) + def OnAnswerEvent(self, ans) -> None: + if ans == NetworkAnswers.ACK: + self.label_lastAnswer.setText("Acknowledged (AACK)") + elif ans == NetworkAnswers.NACK: + self.label_lastAnswer.setText("Not acknowledged (ANAK)") + elif ans == NetworkAnswers.COM_ERROR: + self.label_lastAnswer.setText("Command error (ACER)") + elif ans == NetworkAnswers.TIMEOUT_ERROR: + self.label_lastAnswer.setText("Timeout - no answer") + elif ans == NetworkAnswers.CMD_REJECTED: + self.label_lastAnswer.setText("Command rejected (ACRJ)") + else: + self.label_lastAnswer.setText("Unknown answer") + + # Callback for log event from network manager + @QtCore.pyqtSlot(str) + def OnLogEvent(self, txt) -> None: + self._msg_dialog.ui.plainTextEdit.textCursor().insertText(txt) + +try: + if len(sys.argv)>=2: + GlobVar.address = sys.argv[1] + else: + print ("No target address specified: using localhost:5544") + print ("Usage: monitor-python.py address [port]") + + #exit (-1) # Comment this line for connecting to localhost + + if len(sys.argv)>=3: + GlobVar.port = int(sys.argv[2]) + + app = QtWidgets.QApplication(sys.argv) + window = Window() + window.show() + app.exec_() + +except KeyboardInterrupt: # exception when pressing CTRL-C + print ("Bye bye") + diff --git a/software/monitor/monitor-python-qt/network.py b/software/monitor/monitor-python-qt/network.py new file mode 100644 index 0000000..026a1e1 --- /dev/null +++ b/software/monitor/monitor-python-qt/network.py @@ -0,0 +1,340 @@ +# -*- coding: utf-8 -*- + +import socket +import time +import sys + +from PyQt5 import QtCore +from globvar import GlobVar + +import ipaddress +import threading + +# Network event from socket. +# Event are 'Connected to server' or 'disconnected from server' +class NetworkEvents(): + EVENT_CONNECTED=1 + EVENT_CONNECTION_LOST=0 + UNKNOWN_EVENT=-1 + +class NetworkAnswers(): + # Decoded answers + ACK = 1 + NACK =2 + COM_ERROR =3 + TIMEOUT_ERROR=4 + CMD_REJECTED=5 + UNKNOWN=-1 + +# Network managment class +# Contain a thread for conenction to server and data reception +# Contains functions for sending message to server +# Contains functions for answer decoding +class Network(QtCore.QThread): + i=0 + reconnectionDelay =0 + waitForAnswer=False + receivedAnswer = "" + receiveFlag = None + + receptionEvent = QtCore.pyqtSignal(str) + connectionEvent= QtCore.pyqtSignal(int) + answerEvent= QtCore.pyqtSignal(int) + logEvent = QtCore.pyqtSignal(str) + + # List of possible answers from server + ANSWER_ACK = "AACK" + ANSWER_NACK = "ANAK" + ANSWER_COM_ERROR = "ACER" + ANSWER_TIMEOUT = "ATIM" + ANSWER_CMD_REJECTED = "ACRJ" + + # List of possible messages from server + MESSAGE = "MSSG" + ROBOT_BATTERY_LEVEL = "RBLV" + ROBOT_CURRENT_STATE = "RCST" + + # List of accepted command by server + CAMERA_OPEN = "COPN" + CAMERA_CLOSE = "CCLS" + CAMERA_IMAGE = "CIMG" + CAMERA_ARENA_ASK = "CASA" + CAMERA_ARENA_INFIRM = "CAIN" + CAMERA_ARENA_CONFIRM = "CACO" + CAMERA_POSITION_COMPUTE = "CPCO" + CAMERA_POSITION_STOP = "CPST" + CAMERA_POSITION = "CPOS" + ROBOT_COM_OPEN = "ROPN" + ROBOT_COM_CLOSE = "RCLS" + ROBOT_PING = "RPIN" + ROBOT_RESET = "RRST" + ROBOT_START_WITHOUT_WD = "RSOW" + ROBOT_START_WITH_WD = "RSWW" + ROBOT_RELOAD_WD = "RLDW" + ROBOT_MOVE = "RMOV" + ROBOT_TURN = "RTRN" + ROBOT_GO_FORWARD = "RGFW" + ROBOT_GO_BACKWARD = "RGBW" + ROBOT_GO_LEFT = "RGLF" + ROBOT_GO_RIGHT = "RGRI" + ROBOT_STOP = "RSTP" + ROBOT_POWEROFF = "RPOF" + ROBOT_GET_BATTERY = "RGBT" + ROBOT_GET_STATE = "RGST" + + SEPARATOR_CHAR = ':' + + def __init__(self): + super(Network, self).__init__() + self.i =0 + self.receiveFlag = threading.Event() + + def run(self): + print ("Network thread started" ) + self.i =0 + + while True: + self.i = self.i+1 + + try: + self.__connect() + + self.connectionEvent.emit(NetworkEvents.EVENT_CONNECTED) + self.__read() + + except (RuntimeError, TimeoutError, socket.gaierror, ConnectionResetError, ConnectionRefusedError) as e: + print ("exception in network thread: " + str(e)) + if e.__class__ == RuntimeError or \ + e.__class__== ConnectionResetError or \ + e.__class__ == ConnectionRefusedError: + self.connectionEvent.emit(NetworkEvents.EVENT_CONNECTION_LOST) + + except Exception as e: + print ("unknown exception in network thread: " + str(e)) + + time.sleep(2.0) + + # Private method for connecting to server + def __connect(self) -> None: + #self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + + try: + self.sock.connect((GlobVar.address, GlobVar.port)) + except ConnectionRefusedError: + raise RuntimeError("Unable to connect to " + GlobVar.address + ":" + str(GlobVar.port)) + + # In UDP, no way to know if server is running (connect is always successfull). + # So, send a single line feed to ping the server + self.sock.send(str.encode("\n")) + self.waitForAnswer=False + + # Private method for receiving data from server. + # Data received are sent to callback __receiveHandler for decoding + def __read(self) -> None: + chunks = [] + bytes_recd = 0 + last_char=0 + + while True: + while last_char != 0x0A: + chunk = self.sock.recv(2048) + #print ("Chunk =" + str(chunk)) + + if chunk == b'': + raise RuntimeError("Connection lost with " + GlobVar.address + ":" + str(GlobVar.port)) + chunks.append(chunk) + bytes_recd = bytes_recd + len(chunk) + last_char=chunk[-1] + + self.__receiveHandler(b''.join(chunks).decode("utf-8")) + chunks = [] + bytes_recd =0 + last_char=0 + + # private callback for reception and decoding of data. + # If no answer is wait, send data to caller callback + def __receiveHandler(self, data: str) -> None: + # traitement a faire lors de la reception de donnée + self.logEvent.emit("< " + data) + + if self.waitForAnswer: + self.receivedAnswer = data + self.waitForAnswer=False + self.receiveFlag.set() + else: + # si pas de donnée prevue en reception, alors envoie au callback + self.receptionEvent.emit(data) + + def checkAddressIsValid(self, address: str) -> bool: + try: + if address == "localhost": + return True + + ip=ipaddress.ip_address(address) + return True + + except ValueError as e: + return False + + # Private method for sending raw data to server + def __write(self, msg: str) -> None: + totalsent = 0 + if msg[-1] != '\n': + msg = msg + '\n' + + MSGLEN = len(msg) + msgbytes = bytes(msg,'UTF-8') + + self.logEvent.emit ("> " + msg) + + while totalsent < MSGLEN: + sent = self.sock.send(msgbytes[totalsent:]) + if sent == 0: + GlobVar.connectedToPi=False + raise RuntimeError("Unable to send data to " + GlobVar.address + ":" + str(GlobVar.port)) + totalsent = totalsent + sent + + # Private method for sending command to server + def __sendCommand(self,cmd, waitans: bool) -> str: + if waitans == True: + self.waitForAnswer = True + else: + self.waitForAnswer = False + + self.__write(cmd) + + if waitans: + ans = self.ANSWER_TIMEOUT + try: + self.receiveFlag.wait(timeout=GlobVar.timeout) # Max waiting time = GlobVar.timeout + + if self.receiveFlag.is_set(): + ans=self.receivedAnswer + self.receivedAnswer="" + else: + ans=self.ANSWER_TIMEOUT + + self.receiveFlag.clear() + except TimeoutError: + ans=self.ANSWER_TIMEOUT + except Exception as e: + GlobVar.exceptionmsg = str(e) + + self.waitForAnswer=False + return ans + else: + return self.ANSWER_ACK + + # Private method for decoding answer from server + def __decodeAnswer(self, ans: str) -> int: + if self.ANSWER_ACK in ans: + return NetworkAnswers.ACK + elif self.ANSWER_NACK in ans: + return NetworkAnswers.NACK + elif self.ANSWER_COM_ERROR in ans: + return NetworkAnswers.COM_ERROR + elif self.ANSWER_TIMEOUT in ans: + return NetworkAnswers.TIMEOUT_ERROR + elif self.ANSWER_CMD_REJECTED in ans: + return NetworkAnswers.CMD_REJECTED + else: + return NetworkAnswers.UNKNOWN + + # Send OpenCom command to server + def robotOpenCom(self) -> int: + ans = self.__sendCommand(self.ROBOT_COM_OPEN, True) + decodedAns = self.__decodeAnswer(ans) + self.answerEvent.emit(decodedAns) + return decodedAns + + # Send CloseCom command to server + def robotCloseCom(self) -> int: + ans = self.__sendCommand(self.ROBOT_COM_CLOSE, True) + decodedAns = self.__decodeAnswer(ans) + self.answerEvent.emit(decodedAns) + return decodedAns + + # Send StartWithWatchdog command to server + def robotStartWithWatchdog(self) -> int: + ans = self.__sendCommand(self.ROBOT_START_WITH_WD, True) + decodedAns = self.__decodeAnswer(ans) + self.answerEvent.emit(decodedAns) + return decodedAns + + # Send StartWithoutWatchdog command to server + def robotStartWithoutWatchdog(self) -> int: + ans = self.__sendCommand(self.ROBOT_START_WITHOUT_WD, True) + decodedAns = self.__decodeAnswer(ans) + self.answerEvent.emit(decodedAns) + return decodedAns + + # Send Reset command to server + def robotReset(self) -> int: + ans = self.__sendCommand(self.ROBOT_RESET, True) + decodedAns = self.__decodeAnswer(ans) + self.answerEvent.emit(decodedAns) + return decodedAns + + # Send Stop command to server + def robotStop(self) -> int: + ans = self.__sendCommand(self.ROBOT_STOP, True) + decodedAns = self.__decodeAnswer(ans) + self.answerEvent.emit(decodedAns) + return decodedAns + + # Send GoLeft command to server + def robotGoLeft(self) -> int: + ans = self.__sendCommand(self.ROBOT_GO_LEFT, True) + decodedAns = self.__decodeAnswer(ans) + self.answerEvent.emit(decodedAns) + return decodedAns + + # Send GoRight command to server + def robotGoRight(self) -> int: + ans = self.__sendCommand(self.ROBOT_GO_RIGHT, True) + decodedAns = self.__decodeAnswer(ans) + self.answerEvent.emit(decodedAns) + return decodedAns + + # Send GoForward command to server + def robotGoForward(self) -> int: + ans = self.__sendCommand(self.ROBOT_GO_FORWARD, True) + decodedAns = self.__decodeAnswer(ans) + self.answerEvent.emit(decodedAns) + return decodedAns + + # Send GoBackward command to server + def robotGoBackward(self) -> int: + ans = self.__sendCommand(self.ROBOT_GO_BACKWARD, True) + decodedAns = self.__decodeAnswer(ans) + self.answerEvent.emit(decodedAns) + return decodedAns + + # Send GetBattery command to server + def robotGetBattery(self) -> None: + ans = self.__sendCommand(self.ROBOT_GET_BATTERY,False) + +# Function for decoding battery level +def batterylevelToStr(batlvl: int) -> str: + switcher = { + 2: "Full", + 1: "Mid", + 0: "Empty", + } + + return switcher.get(batlvl, "Unknown") + +# Function for display human readable answer +def answertoStr(ans: int) -> str: + switcher = { + Network.ACK: "Acknowledged", + Network.NACK: "Not acknowledged", + Network.TIMEOUT_ERROR: "No answer (timeout)", + Network.CMD_REJECTED: "Command rejected", + Network.COM_ERROR: "Communication error (invalid command)" + } + + return switcher.get(ans, "Unknown answer") + + diff --git a/software/monitor/monitor-python-qt/ui/log_dialog.ui b/software/monitor/monitor-python-qt/ui/log_dialog.ui new file mode 100644 index 0000000..8694223 --- /dev/null +++ b/software/monitor/monitor-python-qt/ui/log_dialog.ui @@ -0,0 +1,62 @@ + + + Dialog + + + + 0 + 0 + 510 + 336 + + + + Messages Log + + + + + + true + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Clear log + + + + + + + Close + + + + + + + + + + diff --git a/software/monitor/monitor-python-qt/ui/main_window.ui b/software/monitor/monitor-python-qt/ui/main_window.ui new file mode 100644 index 0000000..623dedb --- /dev/null +++ b/software/monitor/monitor-python-qt/ui/main_window.ui @@ -0,0 +1,343 @@ + + + MainWindow + + + + 0 + 0 + 928 + 629 + + + + Robot Monitor + + + + + + + + + Enable Ca&mera + + + + + + + + + + Co&nfirme arena border... + + + + + + + + + Enable &FPS + + + + + + + Enable Pos&ition + + + + + + + + + + + + + Connection + + + Qt::AlignCenter + + + false + + + false + + + + + + + + + 0 + 0 + + + + Address: + + + + + + + + 0 + 0 + + + + + 300 + 16777215 + + + + + + + + + + + + + 0 + 0 + + + + Port: + + + + + + + + 0 + 0 + + + + + 300 + 16777215 + + + + + + + + + + + + Status: + + + + + + + Not connected + + + + + + + + + Qt::Horizontal + + + + + + + + + + Robot Activation + + + Qt::AlignCenter + + + + + + Start with &watchdog + + + + + + + Start r&obot + + + + + + + Qt::Horizontal + + + + + + + + + + Mouvments + + + Qt::AlignCenter + + + + + + + + &Up + + + + + + + &Left + + + + + + + &Stop + + + + + + + &Right + + + + + + + &Down + + + + + + + + + Qt::Horizontal + + + + + + + + + + Others + + + + + + Get &Battery + + + + + + + + + Last answer: + + + + + + + None + + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + 0 + 0 + 928 + 22 + + + + + M&enu + + + + + + + + + + + &Quitter + + + + + O&pen message log... + + + + + +