diff --git a/.clippy.toml b/.clippy.toml index 3e969e0..76f6c1d 100644 --- a/.clippy.toml +++ b/.clippy.toml @@ -1,2 +1 @@ stack-size-threshold = 1024 -doc-valid-idents = ["WiFi", "GeoNetworking", "QoS", ".."] diff --git a/.gitignore b/.gitignore index 1acf1bd..deb0257 100644 --- a/.gitignore +++ b/.gitignore @@ -24,7 +24,3 @@ target/ # Ignore .DS_Store file in mac **/.DS_Store - -# Ignore KiCad backups and lock files -hardware/c_its-companion/c_its-companion-backups/ -*.kicad_pro.lck diff --git a/Cargo.lock b/Cargo.lock index 98a4c6a..37b7dd9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,107 +2,18 @@ # It is not intended for manual editing. version = 4 -[[package]] -name = "aho-corasick" -version = "1.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" -dependencies = [ - "memchr", -] - [[package]] name = "allocator-api2" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c583acf993cf4245c4acb0a2cc2ab1f9cc097de73411bb6d3647ff6af2b1013d" -[[package]] -name = "anstream" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d" -dependencies = [ - "anstyle", - "anstyle-parse", - "anstyle-query", - "anstyle-wincon", - "colorchoice", - "is_terminal_polyfill", - "utf8parse", -] - -[[package]] -name = "anstyle" -version = "1.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000" - -[[package]] -name = "anstyle-parse" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e" -dependencies = [ - "utf8parse", -] - -[[package]] -name = "anstyle-query" -version = "1.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" -dependencies = [ - "windows-sys", -] - -[[package]] -name = "anstyle-wincon" -version = "3.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" -dependencies = [ - "anstyle", - "once_cell_polyfill", - "windows-sys", -] - -[[package]] -name = "anyhow" -version = "1.0.102" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" - -[[package]] -name = "arbitrary-int" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "993a810118f8f37e9c4411c86f1c4c940a09a7ab34b7bf2d88d06f50c553fab7" - -[[package]] -name = "arrayvec" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" - -[[package]] -name = "assert_float_eq" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd9777fd8234cccd34019d9e26d70c8247f9baf24c8fdc0b56c548cf943af2ed" - [[package]] name = "autocfg" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" -[[package]] -name = "az" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b7e4c2464d97fe331d41de9d5db0def0a96f4d823b8b32a2efd503578988973" - [[package]] name = "base64" version = "0.13.1" @@ -135,28 +46,6 @@ version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" -[[package]] -name = "bitvec" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddcec3d12c579d40898fe0a9a358a803c23e9c52ca3c425707f81c9436211837" -dependencies = [ - "funty", - "radium", - "tap", - "wyz", -] - -[[package]] -name = "bitvec-nom2" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d988fcc40055ceaa85edc55875a08f8abd29018582647fd82ad6128dba14a5f0" -dependencies = [ - "bitvec", - "nom", -] - [[package]] name = "block-buffer" version = "0.10.4" @@ -166,12 +55,6 @@ dependencies = [ "generic-array", ] -[[package]] -name = "bumpalo" -version = "3.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" - [[package]] name = "bytemuck" version = "1.25.0" @@ -184,97 +67,24 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" -[[package]] -name = "bytes" -version = "1.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" - -[[package]] -name = "c-its-parser" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e94d9990b20498f621f164f23ae198c4365115eb4191ae106352ec74d4a4110" -dependencies = [ - "chrono", - "etherparse", - "geo-types", - "geonetworking", - "hex", - "nom", - "num-traits", - "rasn", - "wasm-bindgen", -] - -[[package]] -name = "cc" -version = "1.2.62" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1dce859f0832a7d088c4f1119888ab94ef4b5d6795d1ce05afb7fe159d79f98" -dependencies = [ - "find-msvc-tools", - "shlex", -] - [[package]] name = "cfg-if" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" -[[package]] -name = "chrono" -version = "0.4.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" -dependencies = [ - "num-traits", -] - -[[package]] -name = "colorchoice" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" - [[package]] name = "const-default" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b396d1f76d455557e1218ec8066ae14bba60b4b36ecd55577ba979f5db7ecaa" -[[package]] -name = "cordyceps" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "688d7fbb8092b8de775ef2536f36c8c31f2bc4006ece2e8d8ad2d17d00ce0a2a" -dependencies = [ - "loom", - "tracing", -] - [[package]] name = "critical-section" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" -[[package]] -name = "crossbeam-queue" -version = "0.3.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" - [[package]] name = "crypto-common" version = "0.1.7" @@ -285,16 +95,6 @@ dependencies = [ "typenum", ] -[[package]] -name = "darling" -version = "0.20.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" -dependencies = [ - "darling_core 0.20.11", - "darling_macro 0.20.11", -] - [[package]] name = "darling" version = "0.21.3" @@ -315,20 +115,6 @@ dependencies = [ "darling_macro 0.23.0", ] -[[package]] -name = "darling_core" -version = "0.20.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn 2.0.117", -] - [[package]] name = "darling_core" version = "0.21.3" @@ -355,17 +141,6 @@ dependencies = [ "syn 2.0.117", ] -[[package]] -name = "darling_macro" -version = "0.20.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" -dependencies = [ - "darling_core 0.20.11", - "quote", - "syn 2.0.117", -] - [[package]] name = "darling_macro" version = "0.21.3" @@ -438,12 +213,6 @@ dependencies = [ "litrs", ] -[[package]] -name = "either" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" - [[package]] name = "embassy-embedded-hal" version = "0.6.0" @@ -461,38 +230,6 @@ dependencies = [ "nb 1.1.0", ] -[[package]] -name = "embassy-executor" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d0d3b15c9d7dc4fec1d8cb77112472fb008b3b28c51ad23838d83587a6d2f1e" -dependencies = [ - "cordyceps", - "critical-section", - "document-features", - "embassy-executor-macros", - "embassy-executor-timer-queue", - "log", -] - -[[package]] -name = "embassy-executor-macros" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d11a246f53de5f97a387f40ac24726817cd0b6f833e7603baac784f29d6ff276" -dependencies = [ - "darling 0.20.11", - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "embassy-executor-timer-queue" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fc328bf943af66b80b98755db9106bf7e7471b0cf47dc8559cd9a6be504cc9c" - [[package]] name = "embassy-futures" version = "0.1.2" @@ -556,57 +293,6 @@ dependencies = [ "heapless 0.9.2", ] -[[package]] -name = "embassy-time" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "592b0c143ec626e821d4d90da51a2bd91d559d6c442b7c74a47d368c9e23d97a" -dependencies = [ - "cfg-if", - "critical-section", - "document-features", - "embassy-time-driver", - "embedded-hal 0.2.7", - "embedded-hal 1.0.0", - "embedded-hal-async", - "futures-core", - "log", -] - -[[package]] -name = "embassy-time-driver" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ee71af1b3a0deaa53eaf2d39252f83504c853646e472400b763060389b9fcc9" -dependencies = [ - "document-features", -] - -[[package]] -name = "embassy-time-queue-utils" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168297bf80aaf114b3c9ad589bf38b01b3009b9af7f97cd18086c5bbf96f5693" -dependencies = [ - "embassy-executor-timer-queue", - "heapless 0.9.2", -] - -[[package]] -name = "embassy_gps" -version = "0.1.0" -source = "git+https://github.com/jbeyerstedt/embassy_gps.git?branch=feat%2Frework-gpsfix#75f1a67a69372234330c0c9618a953c415380b99" -dependencies = [ - "chrono", - "embassy-futures", - "embassy-time", - "embedded-io-async 0.7.0", - "esp-hal", - "heapless 0.9.2", - "log", - "nmea", -] - [[package]] name = "embedded-can" version = "0.4.1" @@ -616,29 +302,6 @@ dependencies = [ "nb 1.1.0", ] -[[package]] -name = "embedded-graphics" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e8da660bb0c829b34a56a965490597f82a55e767b91f9543be80ce8ccb416fe" -dependencies = [ - "az", - "byteorder", - "embedded-graphics-core", - "float-cmp", - "micromath", -] - -[[package]] -name = "embedded-graphics-core" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95743bef3ff70fcba3930246c4e6872882bbea0dcc6da2ca860112e0cd4bd09f" -dependencies = [ - "az", - "byteorder", -] - [[package]] name = "embedded-hal" version = "0.2.7" @@ -664,16 +327,6 @@ dependencies = [ "embedded-hal 1.0.0", ] -[[package]] -name = "embedded-hal-bus" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "513e0b3a8fb7d3013a8ae17a834283f170deaf7d0eeab0a7c1a36ad4dd356d22" -dependencies = [ - "critical-section", - "embedded-hal 1.0.0", -] - [[package]] name = "embedded-io" version = "0.6.1" @@ -740,45 +393,12 @@ dependencies = [ "syn 2.0.117", ] -[[package]] -name = "env_filter" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32e90c2accc4b07a8456ea0debdc2e7587bdd890680d71173a15d4ae604f6eef" -dependencies = [ - "log", - "regex", -] - -[[package]] -name = "env_logger" -version = "0.11.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0621c04f2196ac3f488dd583365b9c09be011a4ab8b9f37248ffcc8f6198b56a" -dependencies = [ - "anstream", - "anstyle", - "env_filter", - "jiff", - "log", -] - [[package]] name = "equivalent" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" -[[package]] -name = "errno" -version = "0.3.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" -dependencies = [ - "libc", - "windows-sys", -] - [[package]] name = "esp-alloc" version = "0.10.0" @@ -1035,10 +655,7 @@ dependencies = [ "allocator-api2", "cfg-if", "document-features", - "embassy-executor", "embassy-sync 0.8.0", - "embassy-time-driver", - "embassy-time-queue-utils", "esp-alloc", "esp-config", "esp-hal", @@ -1151,19 +768,8 @@ dependencies = [ name = "esp32-c_its-companion" version = "0.1.0" dependencies = [ - "assert_float_eq", - "c-its-parser", - "chrono", "critical-section", - "crossbeam-queue", - "embassy-executor", - "embassy-time", - "embassy_gps", - "embedded-graphics", - "embedded-hal-bus", "embedded-io 0.7.1", - "embedded-io-async 0.7.0", - "env_logger", "esp-alloc", "esp-backtrace", "esp-bootloader-esp-idf", @@ -1171,27 +777,7 @@ dependencies = [ "esp-println", "esp-radio", "esp-rtos", - "esp32-cits-core", - "geo-types", "log", - "mipidsi", - "num-traits", - "profont", - "prost", - "prost-build", - "ublox", -] - -[[package]] -name = "esp32-cits-core" -version = "0.1.0" -source = "git+https://git.hamburg.ccc.de/jtbx/esp32-cits-core?branch=main#a6d0ea6ca2da130fde2b84060a34ef45e772a459" -dependencies = [ - "c-its-parser", - "chrono", - "esp-hal", - "esp-radio", - "geo-types", ] [[package]] @@ -1257,54 +843,12 @@ dependencies = [ "vcell", ] -[[package]] -name = "etherparse" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17304d06addb3283cdc4bd528e42dd95e73c8ee2d6492ffce415e93660885449" -dependencies = [ - "arrayvec", -] - -[[package]] -name = "fastrand" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223" - -[[package]] -name = "find-msvc-tools" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" - -[[package]] -name = "fixedbitset" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" - -[[package]] -name = "float-cmp" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" -dependencies = [ - "num-traits", -] - [[package]] name = "fnv" version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" -[[package]] -name = "foldhash" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" - [[package]] name = "fugit" version = "0.3.9" @@ -1314,12 +858,6 @@ dependencies = [ "gcd", ] -[[package]] -name = "funty" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" - [[package]] name = "futures-core" version = "0.3.32" @@ -1355,21 +893,6 @@ version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d758ba1b47b00caf47f24925c0074ecb20d6dfcffe7f6d53395c0465674841a" -[[package]] -name = "generator" -version = "0.8.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52f04ae4152da20c76fe800fa48659201d5cf627c5149ca0b707b69d7eef6cf9" -dependencies = [ - "cc", - "cfg-if", - "libc", - "log", - "rustversion", - "windows-link", - "windows-result", -] - [[package]] name = "generic-array" version = "0.14.7" @@ -1380,40 +903,6 @@ dependencies = [ "version_check", ] -[[package]] -name = "geo-types" -version = "0.7.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94776032c45f950d30a13af6113c2ad5625316c9abfbccee4dd5a6695f8fe0f5" -dependencies = [ - "num-traits", -] - -[[package]] -name = "geonetworking" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6da6fde770112587d5f5f7af439546e35bd35aa77a9e3e47e9968056783fe50d" -dependencies = [ - "arbitrary-int", - "nom", - "num", - "num-traits", -] - -[[package]] -name = "getrandom" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" -dependencies = [ - "cfg-if", - "libc", - "r-efi", - "wasip2", - "wasip3", -] - [[package]] name = "hash32" version = "0.3.1" @@ -1423,15 +912,6 @@ dependencies = [ "byteorder", ] -[[package]] -name = "hashbrown" -version = "0.15.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" -dependencies = [ - "foldhash", -] - [[package]] name = "hashbrown" version = "0.17.0" @@ -1464,18 +944,6 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - -[[package]] -name = "id-arena" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" - [[package]] name = "ident_case" version = "1.0.1" @@ -1489,9 +957,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" dependencies = [ "equivalent", - "hashbrown 0.17.0", - "serde", - "serde_core", + "hashbrown", ] [[package]] @@ -1516,21 +982,6 @@ dependencies = [ "syn 2.0.117", ] -[[package]] -name = "is_terminal_polyfill" -version = "1.70.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" - -[[package]] -name = "itertools" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" -dependencies = [ - "either", -] - [[package]] name = "itoa" version = "1.0.18" @@ -1561,42 +1012,18 @@ dependencies = [ "syn 2.0.117", ] -[[package]] -name = "lazy_static" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" - -[[package]] -name = "leb128fmt" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" - [[package]] name = "libc" version = "0.2.186" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" -[[package]] -name = "libm" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" - [[package]] name = "linked_list_allocator" version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b23ac50abb8261cb38c6e2a7192d3302e0836dac1628f6a93b82b4fad185897" -[[package]] -name = "linux-raw-sys" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" - [[package]] name = "litrs" version = "1.0.0" @@ -1609,63 +1036,12 @@ version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" -[[package]] -name = "loom" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "419e0dc8046cb947daa77eb95ae174acfbddb7673b4151f56d1eed8e93fbfaca" -dependencies = [ - "cfg-if", - "generator", - "scoped-tls", - "tracing", - "tracing-subscriber", -] - -[[package]] -name = "matchers" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" -dependencies = [ - "regex-automata", -] - [[package]] name = "memchr" version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" -[[package]] -name = "micromath" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3c8dda44ff03a2f238717214da50f65d5a53b45cd213a7370424ffdb6fae815" - -[[package]] -name = "minimal-lexical" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" - -[[package]] -name = "mipidsi" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "790ebd28bd67addbccf41b1c0c188c26bb9f5bdcd91d4d6da9bd558e20d97a1d" -dependencies = [ - "embedded-graphics-core", - "embedded-hal 1.0.0", - "heapless 0.8.0", -] - -[[package]] -name = "multimap" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d87ecb2933e8aeadb3e3a02b828fed80a7528047e68b4f424523a0981a3a084" - [[package]] name = "nb" version = "0.1.3" @@ -1681,71 +1057,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8d5439c4ad607c3c23abf66de8c8bf57ba8adcd1f129e699851a6e43935d339d" -[[package]] -name = "nmea" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2086c773d18da556c05ca235596d163c00379027189bafe2209ae40ebd19717c" -dependencies = [ - "arrayvec", - "cfg-if", - "chrono", - "heapless 0.8.0", - "nom", - "num-traits", -] - -[[package]] -name = "nom" -version = "7.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" -dependencies = [ - "memchr", - "minimal-lexical", -] - -[[package]] -name = "nu-ansi-term" -version = "0.50.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" -dependencies = [ - "windows-sys", -] - -[[package]] -name = "num" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" -dependencies = [ - "num-complex", - "num-integer", - "num-iter", - "num-rational", - "num-traits", -] - -[[package]] -name = "num-bigint" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" -dependencies = [ - "num-integer", - "num-traits", -] - -[[package]] -name = "num-complex" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" -dependencies = [ - "num-traits", -] - [[package]] name = "num-derive" version = "0.4.2" @@ -1757,36 +1068,6 @@ dependencies = [ "syn 2.0.117", ] -[[package]] -name = "num-integer" -version = "0.1.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" -dependencies = [ - "num-traits", -] - -[[package]] -name = "num-iter" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-rational" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" -dependencies = [ - "num-integer", - "num-traits", -] - [[package]] name = "num-traits" version = "0.2.19" @@ -1794,7 +1075,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", - "libm", ] [[package]] @@ -1806,35 +1086,12 @@ dependencies = [ "memchr", ] -[[package]] -name = "once_cell" -version = "1.21.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" - -[[package]] -name = "once_cell_polyfill" -version = "1.70.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" - [[package]] name = "paste" version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" -[[package]] -name = "petgraph" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8701b58ea97060d5e5b155d383a69952a60943f0e6dfe30b04c287beb0b27455" -dependencies = [ - "fixedbitset", - "hashbrown 0.15.5", - "indexmap", -] - [[package]] name = "pin-project-lite" version = "0.2.17" @@ -1877,16 +1134,6 @@ dependencies = [ "syn 2.0.117", ] -[[package]] -name = "prettyplease" -version = "0.2.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" -dependencies = [ - "proc-macro2", - "syn 2.0.117", -] - [[package]] name = "proc-macro-crate" version = "3.5.0" @@ -1905,66 +1152,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "profont" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "016681370a9dd6e7ddb4c1a959922fd59dc45e5ebaa5ff5b13090267898ced34" -dependencies = [ - "embedded-graphics", -] - -[[package]] -name = "prost" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "528ac67416ff8646872a3c02cad9cc4ee5dc9f9540c9b10771855c95cb2e5ae1" -dependencies = [ - "bytes", - "prost-derive", -] - -[[package]] -name = "prost-build" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03da047801ff44bb6a4d407d4860c05fd70bb81714e6b2f3812603d5b145b042" -dependencies = [ - "heck", - "itertools", - "log", - "multimap", - "petgraph", - "prettyplease", - "prost", - "prost-types", - "regex", - "syn 2.0.117", - "tempfile", -] - -[[package]] -name = "prost-derive" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b570b25f7617e43d59005d0990ccb79e950a423952cea19671b7a876da390adf" -dependencies = [ - "anyhow", - "itertools", - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "prost-types" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f94967dc7688f3054c7fac87473ffae4cc4c3904800e2d9f5b857246d8963b0a" -dependencies = [ - "prost", -] - [[package]] name = "quote" version = "1.0.45" @@ -1974,18 +1161,6 @@ dependencies = [ "proc-macro2", ] -[[package]] -name = "r-efi" -version = "6.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" - -[[package]] -name = "radium" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" - [[package]] name = "rand_core" version = "0.6.4" @@ -2004,83 +1179,6 @@ version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" -[[package]] -name = "rasn" -version = "0.28.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88235e585f2f3fc26ad809c79a84dd77e6a7203eb7d12e5bcaab89fc036d3d90" -dependencies = [ - "bitvec", - "bitvec-nom2", - "bytes", - "cfg-if", - "chrono", - "either", - "nom", - "num-bigint", - "num-integer", - "num-traits", - "once_cell", - "rasn-derive", - "serde_json", - "snafu", - "xml-no-std", -] - -[[package]] -name = "rasn-derive" -version = "0.28.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11dcd4dab09ceadedb3e2bedf340deb583f0e25bba9ad966b5655c2fb62b1392" -dependencies = [ - "proc-macro2", - "rasn-derive-impl", - "syn 2.0.117", -] - -[[package]] -name = "rasn-derive-impl" -version = "0.28.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f121c276d3f2fba8caabc870288de3f81abdb0bb94d5510651e58e1e00a7b9e7" -dependencies = [ - "either", - "itertools", - "proc-macro2", - "quote", - "syn 2.0.117", - "uuid", -] - -[[package]] -name = "regex" -version = "1.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1292b7759ae1cb9ec195452d1390a074f0cd8541ab7a5a8c31cd6db45d4a6ba" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata", - "regex-syntax", -] - -[[package]] -name = "regex-automata" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.8.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" - [[package]] name = "riscv" version = "0.15.0" @@ -2153,19 +1251,6 @@ dependencies = [ "svgbobdoc", ] -[[package]] -name = "rustix" -version = "1.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" -dependencies = [ - "bitflags", - "errno", - "libc", - "linux-raw-sys", - "windows-sys", -] - [[package]] name = "rustversion" version = "1.0.22" @@ -2178,18 +1263,6 @@ version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" -[[package]] -name = "scoped-tls" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" - -[[package]] -name = "semver" -version = "1.0.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" - [[package]] name = "serde" version = "1.0.228" @@ -2220,19 +1293,6 @@ dependencies = [ "syn 2.0.117", ] -[[package]] -name = "serde_json" -version = "1.0.149" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" -dependencies = [ - "itoa", - "memchr", - "serde", - "serde_core", - "zmij", -] - [[package]] name = "serde_yaml" version = "0.9.34+deprecated" @@ -2246,48 +1306,6 @@ dependencies = [ "unsafe-libyaml", ] -[[package]] -name = "sharded-slab" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" -dependencies = [ - "lazy_static", -] - -[[package]] -name = "shlex" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" - -[[package]] -name = "smallvec" -version = "1.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" - -[[package]] -name = "snafu" -version = "0.8.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e84b3f4eacbf3a1ce05eac6763b4d629d60cbc94d632e4092c54ade71f1e1a2" -dependencies = [ - "snafu-derive", -] - -[[package]] -name = "snafu-derive" -version = "0.8.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1c97747dbf44bb1ca44a561ece23508e99cb592e862f22222dcf42f51d1e451" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "syn 2.0.117", -] - [[package]] name = "somni-expr" version = "0.2.0" @@ -2371,24 +1389,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "tap" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" - -[[package]] -name = "tempfile" -version = "3.27.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" -dependencies = [ - "fastrand", - "once_cell", - "rustix", - "windows-sys", -] - [[package]] name = "termcolor" version = "1.4.1" @@ -2398,15 +1398,6 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "thread_local" -version = "1.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" -dependencies = [ - "cfg-if", -] - [[package]] name = "toml_datetime" version = "1.1.1+spec-1.1.0" @@ -2437,96 +1428,12 @@ dependencies = [ "winnow", ] -[[package]] -name = "tracing" -version = "0.1.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" -dependencies = [ - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "tracing-core" -version = "0.1.36" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" -dependencies = [ - "once_cell", - "valuable", -] - -[[package]] -name = "tracing-log" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" -dependencies = [ - "log", - "once_cell", - "tracing-core", -] - -[[package]] -name = "tracing-subscriber" -version = "0.3.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7f578e5945fb242538965c2d0b04418d38ec25c79d160cd279bf0731c8d319" -dependencies = [ - "matchers", - "nu-ansi-term", - "once_cell", - "regex-automata", - "sharded-slab", - "smallvec", - "thread_local", - "tracing", - "tracing-core", - "tracing-log", -] - [[package]] name = "typenum" version = "1.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de" -[[package]] -name = "ublox" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bcc96bd937066775fb87034e1dbf6d7165a8975c74ddec1105e31b4a050538b" -dependencies = [ - "bitflags", - "chrono", - "num-traits", - "ublox_derive", -] - -[[package]] -name = "ublox_derive" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5eda7d1c1151a40ae85c7c065a19959909573535034e18e1015b738993cd2c0" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "ufmt-write" version = "0.1.0" @@ -2545,39 +1452,12 @@ version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" -[[package]] -name = "unicode-xid" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" - [[package]] name = "unsafe-libyaml" version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" -[[package]] -name = "utf8parse" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" - -[[package]] -name = "uuid" -version = "1.23.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd74a9687298c6858e9b88ec8935ec45d22e8fd5e6394fa1bd4e99a87789c76" -dependencies = [ - "getrandom", -] - -[[package]] -name = "valuable" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" - [[package]] name = "vcell" version = "0.1.3" @@ -2596,103 +1476,6 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" -[[package]] -name = "wasip2" -version = "1.0.3+wasi-0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6" -dependencies = [ - "wit-bindgen 0.57.1", -] - -[[package]] -name = "wasip3" -version = "0.4.0+wasi-0.3.0-rc-2026-01-06" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" -dependencies = [ - "wit-bindgen 0.51.0", -] - -[[package]] -name = "wasm-bindgen" -version = "0.2.121" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49ace1d07c165b0864824eee619580c4689389afa9dc9ed3a4c75040d82e6790" -dependencies = [ - "cfg-if", - "once_cell", - "rustversion", - "wasm-bindgen-macro", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.121" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e68e6f4afd367a562002c05637acb8578ff2dea1943df76afb9e83d177c8578" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.121" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d95a9ec35c64b2a7cb35d3fead40c4238d0940c86d107136999567a4703259f2" -dependencies = [ - "bumpalo", - "proc-macro2", - "quote", - "syn 2.0.117", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.121" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4e0100b01e9f0d03189a92b96772a1fb998639d981193d7dbab487302513441" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "wasm-encoder" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" -dependencies = [ - "leb128fmt", - "wasmparser", -] - -[[package]] -name = "wasm-metadata" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" -dependencies = [ - "anyhow", - "indexmap", - "wasm-encoder", - "wasmparser", -] - -[[package]] -name = "wasmparser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" -dependencies = [ - "bitflags", - "hashbrown 0.15.5", - "indexmap", - "semver", -] - [[package]] name = "winapi-util" version = "0.1.11" @@ -2708,15 +1491,6 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" -[[package]] -name = "windows-result" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" -dependencies = [ - "windows-link", -] - [[package]] name = "windows-sys" version = "0.61.2" @@ -2735,115 +1509,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "wit-bindgen" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" -dependencies = [ - "wit-bindgen-rust-macro", -] - -[[package]] -name = "wit-bindgen" -version = "0.57.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" - -[[package]] -name = "wit-bindgen-core" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" -dependencies = [ - "anyhow", - "heck", - "wit-parser", -] - -[[package]] -name = "wit-bindgen-rust" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" -dependencies = [ - "anyhow", - "heck", - "indexmap", - "prettyplease", - "syn 2.0.117", - "wasm-metadata", - "wit-bindgen-core", - "wit-component", -] - -[[package]] -name = "wit-bindgen-rust-macro" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" -dependencies = [ - "anyhow", - "prettyplease", - "proc-macro2", - "quote", - "syn 2.0.117", - "wit-bindgen-core", - "wit-bindgen-rust", -] - -[[package]] -name = "wit-component" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" -dependencies = [ - "anyhow", - "bitflags", - "indexmap", - "log", - "serde", - "serde_derive", - "serde_json", - "wasm-encoder", - "wasm-metadata", - "wasmparser", - "wit-parser", -] - -[[package]] -name = "wit-parser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" -dependencies = [ - "anyhow", - "id-arena", - "indexmap", - "log", - "semver", - "serde", - "serde_derive", - "serde_json", - "unicode-xid", - "wasmparser", -] - -[[package]] -name = "wyz" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" -dependencies = [ - "tap", -] - -[[package]] -name = "xml-no-std" -version = "0.8.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd223bc94c615fc02bf2f4bbc22a4a9bfe489c2add3ec10b1038df3aca44cac7" - [[package]] name = "xtensa-lx" version = "0.13.0" @@ -2874,9 +1539,3 @@ dependencies = [ "quote", "syn 2.0.117", ] - -[[package]] -name = "zmij" -version = "1.0.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" diff --git a/Cargo.toml b/Cargo.toml index 9b3cbd9..ffbe67f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,89 +3,34 @@ edition = "2024" name = "esp32-c_its-companion" rust-version = "1.88" version = "0.1.0" -default-run = "esp32-c_its-companion" [[bin]] name = "esp32-c_its-companion" -path = "./src/main.rs" - -[[bin]] -name = "test" -path = "./src/test.rs" -required-features = ["std", "cam"] - -[features] -default = ["esp", "spat", "gnss_ubx", "screen"] - -# build for ESP (needed to build test for `host-tuple`) -esp = [ - "dep:esp-hal", - "dep:esp-rtos", - "dep:esp-bootloader-esp-idf", - "dep:embassy-executor", - "dep:embassy-time", - "dep:embedded-io", - "dep:embedded-io-async", - "dep:esp-alloc", - "dep:esp-backtrace", - "dep:esp-println", - "dep:esp-radio", - "esp32-cits-core/esp32c5", - "esp32-cits-core/log-04", -] -std = ["c-its-parser/std", "esp32-cits-core/std"] - -# enable u-blox GNSS module -gnss_ubx = ["_gnss", "_uart", "dep:ublox"] -# enable L67K GNSS module -gnss_l67k = ["_gnss", "dep:embassy_gps"] -# echo CAM data on serial -cam = ["c-its-parser/cam"] -# send CAM autonomously -cam_tx = ["c-its-parser/cam"] -# echo DENM events on serial and BLE -denm = ["c-its-parser/denm"] -# evaluate SPAT information -spat = ["c-its-parser/spatem", "c-its-parser/mapem"] -# enable some debug printing (without enabling debug logging of the ESP RTOS) -spat_debug = [] -# enable ST7789 based display -screen = ["dep:mipidsi", "dep:embedded-graphics", "dep:embedded-hal-bus", "dep:profont"] -# enable I/O via UART -uart = ["_uart", "_gnss", "dep:prost"] - -# internal feature, that any UART I/O is enabled -_uart = [] -# internal feature, that any GNSS source is enabled -_gnss = [] +path = "./src/bin/main.rs" [dependencies] -esp-hal = { version = "~1.1.0", optional = true, features = ["esp32c5", "log-04", "unstable"] } +esp-hal = { version = "~1.1.0", features = ["esp32c5", "log-04", "unstable"] } -esp-rtos = { version = "0.3.0", optional = true, features = [ - "embassy", +esp-rtos = { version = "0.3.0", features = [ "esp-alloc", "esp-radio", "esp32c5", "log-04", ] } -esp-bootloader-esp-idf = { version = "0.5.0", optional = true, features = ["esp32c5", "log-04"] } +esp-bootloader-esp-idf = { version = "0.5.0", features = ["esp32c5", "log-04"] } log = "0.4.27" critical-section = "1.2.0" -embassy-executor = { version = "0.10.0", optional = true, features = ["log"] } -embassy-time = { version = "0.5.0", optional = true, features = ["log"] } -embedded-io = { version = "0.7.1", optional = true } -embedded-io-async = { version = "0.7.0", optional = true } -esp-alloc = { version = "0.10.0", optional = true } -esp-backtrace = { version = "0.19.0", optional = true, features = [ +embedded-io = "0.7.1" +esp-alloc = "0.10.0" +esp-backtrace = { version = "0.19.0", features = [ "esp32c5", "panic-handler", "println", ] } -esp-println = { version = "0.17.0", optional = true, default-features = false, features = ["colors", "critical-section", "jtag-serial", "esp32c5", "log-04"] } -esp-radio = { version = "0.18.0", optional = true, features = [ +esp-println = { version = "0.17.0", features = ["esp32c5", "log-04"] } +esp-radio = { version = "0.18.0", features = [ "esp-alloc", "esp32c5", "log-04", @@ -94,46 +39,22 @@ esp-radio = { version = "0.18.0", optional = true, features = [ "sniffer", ] } -embassy_gps = { version = "0.1.0", optional = true, default-features = false, features = ["esp", "log-04"], git = "https://github.com/jbeyerstedt/embassy_gps.git", branch = "feat/rework-gpsfix" } -esp32-cits-core = { version = "0.1.0", default-features = false, git = "https://git.hamburg.ccc.de/jtbx/esp32-cits-core", branch = "main" } -embedded-hal-bus = { version = "0.3.0", optional = true } -embedded-graphics = { version = "0.8.2", optional = true } -# needs newer GN with removed bitvec dependency -c-its-parser = { version = "2.4.0", default-features = false, features = [ - "time", - "geo", - "libm", - "transport", -] } -chrono = { version = "0.4.44", default-features = false, features = ["alloc"] } -crossbeam-queue = { version = "0.3.12", default-features = false, features = ["alloc"] } -geo-types = { version = "0.7.19", default-features = false } -mipidsi = { version = "0.10.0", optional = true } -num-traits = { version = "0.2.19", default-features = false, features = ["libm"] } -profont = { version = "0.7.0", optional = true } -prost = { version = "0.14", optional = true, default-features = false, features = ["derive"] } -ublox = { version = "0.10", optional = true, default-features = false, features = ["alloc", "ubx_proto27"] } - -[dev-dependencies] -assert_float_eq = "1.2.0" -env_logger = "0.11.10" - -[build-dependencies] -prost-build = "0.14" - # For fine tuning these settings, please refer to https://doc.rust-lang.org/cargo/reference/profiles.html [profile.dev] # The default debug profile is too slow and too big for resource-constrained devices. # Always build with some optimizations enabled. -opt-level = "s" +lto = 'fat' +debug = 1 # only limited debug info to save some space +#debug = 'line-tables-only' # only basic debug info to save some space +opt-level = 's' [profile.release] codegen-units = 1 # LLVM can perform better optimizations using a single thread -debug = 2 # prefer slower builds but better debugging experience +debug = 0 # disable debug information in release builds lto = 'fat' opt-level = 's' -strip = "debuginfo" +#strip = true # strip all symbols to save even more space [profile.release-dbg] inherits = "release" diff --git a/Readme.md b/Readme.md index 2ae3aab..8dc9e3b 100644 --- a/Readme.md +++ b/Readme.md @@ -1,67 +1,13 @@ -# ESP32-C5 C-ITS Companion/ Visualizer +# ESP32-C5 C-ITS Visualizer Displays different C-ITS receive-only use cases for cheap. -## Hardware Requirements -The code is currently tailored to: -- Seeed XIAO ESP32-C5 (8MB PSRAM) -- U-Blox M10Q GNSS (connected on GPIO12 (RX), GPIO11 (TX), and GPIO25 (reset)) -or Seeed XIAO L67K (connected on GPIO12 (RX), GPIO11 (TX), GPIO1 (wakeup) and GPIO25 (reset)) -only available with `gnss_ubx` or `gnss_l67k` feature (which is included in `spat` feature) -- Some ST7789 172*320px screen (connected on GPIO8 (SCL/ SCK), GPIO10 (SDA/ MOSI), GPIO7 (reset), GPIO23 (DC), GPIO24 (CS), TODO GPIO0 (BL)) -only available with `screen` feature (which is included in `spat` feature) - -## Features - -### GNSS -Enable u-blox or L67K GNSS module and in main application logic/ state. - -### SPAT -Takes the current position and heading from the GNSS receiver and displays the signal phases of the upcoming intersection. -The upcoming intersection is selected when the own position is "inside" some ingress approach of the intersection. -The display will show the current phase and remaining time for all signal groups of the bike-able lanes in the approach. - -### DENM -TODO: Not implemented yet! - -Shall "publish" the most relevant information of a DENMs via BLE - -### CAM -Just prints a line for each received CAM. - -### CAM-TX -Generates and transmits a CAM when a GNSS update was received. -Depends on the `gnss` feature. - -Note: In germany, using the 5875 to 5915 MHz frequency band is only permitted for C-ITS use cases which implement transmit power reduction measures with at least 30 dB reduction range (or equivalent measures) and have a maximum EIRP of 33 dBm. -This is based on EU regulation 2014/53/EU, so it applies to other EU countries in similar ways. -The relevant harmonized standard is ETSI EN 302 571 which mandates (excerpt of most relevant points): - -- a maximum power spectral density of 23 dBm/Mhz EIRP -- transmit power control (TCP) in a range from 3 dBm up to the maximum output power of the equipment - * used for CEN DSRC and HDR DSRC interference mitigation by implementing measures from ETSI TS 102 792 - + Mode A or B: Output power less than 10 dBm EIRP and less than -65 or -45 dBm/MHz EIRP in CEN DSRC band -> **needs to be measured** - + Mode C: Maximum transmission time of less than 1 ms and at least a few 100 ms between transmission (realistically) -> **can't be ensured with big messages** - + Mode D: "any" realistically possible transmission time, but at least 500 ms between transmissions for ~5 ITS stations/ 1000ms for 10 ITS stations -> **safe to assume when we only send CAMs at 1 Hz** - + But modes C and D also need to: - - use protected zone information from CAM messages - - use a protected zone database, e.g. from www.asecap-pzdb.com - * used for dynamic congestion control (DCC) - + mandatory mechanism described in ETSI EN 302 571, chapter 4.2.10 - -This is **not** implemented in this application! -**So legally, you're not allowed to send with this.** - -### UART -Enable UART I/O protocol according to [docs/uart-protocol.md](./docs/uart-protocol.md). - - ## Usage ### Toolchain Installation Install the toolchain, targe and tools like this: -```shell +``` rustup toolchain install nightly --component rust-src rustup target add riscv32imac-unknown-none-elf @@ -70,44 +16,11 @@ rustup target add riscv32imac-unknown-none-elf cargo install espflash --locked ``` -(Project was setup using esp-generate with the options `--chip esp32c5 -o esp32c5-wroom-1-psram -o alloc -o log -o unstable-hal -o wifi -o esp-backtrace -o embassy`.) - -To use the proper rustfmt features, enable the nightly toolchain: -```shell -rustup component add --toolchain nightly rustfmt -``` +(Project was setup using esp-generate with the options `--chip esp32c5 -o esp32c5-wroom-1 -o alloc -o vscode -o log -o unstable-hal -o wifi -o esp-backtrace`.) ### Build and Flash -In default configuration only signal phases (SPAT) data is displayed for the upcoming intersection. -Additional features are available through feature flags: - -- `esp`: Run on ESP (required as feature flag to enable unit tests on host) -- `std`: Run on system with `std` library -- `spat`: Enable signal phase (and intersection map) data -- `spat_debug`: Enable additional debug information for the SPAT/ GLOSA use case -- `denm`: Enable DENMs -- `cam`: Enable CAMs -- `cam_tx`: Enable CAM generation and transmission (needs time and position source) - -Officially supported feature combinations are: -- `esp,spat,gnss_ubx,screen` (default features, "standalone") -- `esp,spat,gnss_ubx,screen,cam_tx` ("standalone with CAM") -- `esp,spat,gnss_ubx,screen,cam_tx,cam,denm` -- `esp,uart,cam,denm` ("smartphone companion") - Connect your ESP32-C5 and run: ``` -# default configuration cargo run --release - -# for e.g. also enable DENM feature -cargo run --release -F denm -``` - -### Run Unit Tests on Host -The unit tests in this project are meant to be run on the host: - -``` -cargo test --target host-tuple --bin test --no-default-features -F std,spat ``` diff --git a/build.rs b/build.rs index f376e0e..9272c07 100644 --- a/build.rs +++ b/build.rs @@ -1,23 +1,7 @@ -use std::env; - -fn main() -> std::io::Result<()> { - let target_arch = env::var("CARGO_CFG_TARGET_ARCH").unwrap(); - - if target_arch == "riscv32" { - linker_be_nice(); - // make sure linkall.x is the last linker script (otherwise might cause problems with flip-link) - println!("cargo:rustc-link-arg=-Tlinkall.x"); - } - - let descriptor_path = - std::path::PathBuf::from(env::var("OUT_DIR").unwrap()).join("proto_descriptor.bin"); - - prost_build::Config::new() - .file_descriptor_set_path(&descriptor_path) - .compile_well_known_types() - .compile_protos(&["docs/c_its-messages.proto"], &["docs/"])?; - - Ok(()) +fn main() { + linker_be_nice(); + // make sure linkall.x is the last linker script (otherwise might cause problems with flip-link) + println!("cargo:rustc-link-arg=-Tlinkall.x"); } fn linker_be_nice() { diff --git a/docs/ble-protocol.md b/docs/ble-protocol.md deleted file mode 100644 index 65f68ff..0000000 --- a/docs/ble-protocol.md +++ /dev/null @@ -1,53 +0,0 @@ -# Bluetooth LE Protocol - -Some data is made available via BLE so that a smartphone app can be used to display it in other use cases. - -## General - -The BLE protocol contains some standardized services, but can also transport custom services. -Each service is compromised of a set of characteristics which can be read or clients can even subscribe for changes. - -Sadly we can't use any of the standardized service/ profiles to transmit V2X data. -Even notifications about DENMs can't be transmitted since the Alert Notification Profile is only meant for the companion device to query notifications from the phone, but not the other way around. - -So we will only use the Device Information Service to announce ourselves and use a custom service for everything else. - -## V2X BLE Service - -V2X data is exposed via the service UUID `c0b70000-d4f4-4000-ada8-f99a02ee315c` (randomly generated UUID, with byte 3 and 4 set to zero) using the following characteristics: - -UUID | Type | Description -------------------------------------- | --------------- | ----------- -c0b70001-d4f4-4001-ada8-f99a02ee315c | `PositionState` | Set position from external source -c0b70001-d4f4-4001-ada8-f99a02ee315c | `RawMsgRx` | Raw CAM message (de-duplicated/ rate-limited) -c0b70001-d4f4-4002-ada8-f99a02ee315c | `CamEvent` | Latest received CAM -c0b70001-d4f4-4003-ada8-f99a02ee315c | `RawMsgRx` | Raw DENM message (de-duplicated/ rate-limited) -c0b70001-d4f4-4004-ada8-f99a02ee315c | `DenmEvent` | Latest received DENM -c0b70001-d4f4-4005-ada8-f99a02ee315c | `RawMsgRx` | Raw MAPEM message (de-duplicated/ rate-limited) -c0b70001-d4f4-4006-ada8-f99a02ee315c | `RawMsgRx` | Raw SPATEM message (de-duplicated/ rate-limited) - -## Message Format - -Messages are encoded according to the [Protocol Buffers](https://protobuf.dev/) specification since it provides decent binary size and has parser libraries for many programming languages. -All data types are defined in one `.proto` file: [c_its-messages.proto](./c_its-messages.proto). - -### Position State Input - -When there's no GNSS receiver connected to the ESP, position, heading and speed information can be set using a `PositionState` message (see [c_its-messages.proto](./c_its-messages.proto)). - -### DENM Event - -Each received DENM will be "published" as a `DenmEvent` message (see [c_its-messages.proto](./c_its-messages.proto)). -Repetitions of the same message (e.g. no changes to the validity timeframe and location) may be dropped by the BLE server. - -### CAM Event - -Each received (low-frequency) CAM will be "published" as a `CamEvent` message (see [c_its-messages.proto](./c_its-messages.proto)). - -### Raw Received Message - -Received V2X messages will be "published" as a `RawMsgRx` message (see [c_its-messages.proto](./c_its-messages.proto)). -Repetitions of the same message should be dropped by the BLE server. -Consecutive messages with no relevant changes may be dropped by the BLE server while keeping some minimal publishing rate, e.g.: -- only publish MAPEMs every 10 seconds (since content doesn't change, but client may be restarted after first MAPEM from an intersection was received) -- drop high-frequency CAMs (only publish "full" CAMs which include the low-frequency container) diff --git a/docs/c_its-messages.proto b/docs/c_its-messages.proto deleted file mode 100644 index af8f802..0000000 --- a/docs/c_its-messages.proto +++ /dev/null @@ -1,122 +0,0 @@ -syntax = "proto2"; - -package c_its_io; - -// ------------------------------ -// Data Types -// ------------------------------ - -message Position { - required float latitude_deg = 1; - required float longitude_deg = 2; -} - -enum TrafficDir { - // for all directions of traffic - ALL_DIRECTIONS = 0; - // for the direction of traffic according to the reference direction, and the portion of traffic upstream of the reference position - UPSTREAM = 1; - // for the direction of traffic according to the reference direction, and the portion of traffic downstream of the reference position - DOWNSTREAM = 2; - // for the direction of traffic opposite to the reference direction - OPPOSITE = 3; -} - -message VehicleContainer { - optional uint32 heading_deg = 1; // vehicle heading in degrees, if not "unavailable" - optional uint32 speed = 2; // vehicle speed in 1/100 m/s, if not "unavailable" - optional uint32 vehicle_length_dm = 3; // vehicle length in 1/10 m, if not "unavailable" - optional uint32 vehicle_width_dm = 4; // vehicle width in 1/10 m, if not "unavailable" -} - - -// GeoNetworking Destination Area Shape -enum GNAreaShape { - ETSI_AREASHAPE_CIRCLE = 0; - ETSI_AREASHAPE_RECTANGLE = 1; - ETSI_AREASHAPE_ELLIPSIS = 2; -} - -// GeoNetworking Destination Area/ Source Position -message ITSPosition { - required int32 latitude = 1; // Latitude in 1/10th of micro degrees - required int32 longitude = 2; // Longitude in 1/10th of micro degrees -} - -// GeoNetworking Destination Area -message GNArea { - optional GNAreaShape area = 1; - optional ITSPosition position = 2; - optional int32 distA = 3; // Distance A of the geometric shape in meters - optional int32 distB = 4; // Distance B of the geometric shape in meters, mandatory for rectangle and ellipsis - optional int32 angle = 5; // Angle of the geometric shape in degrees, mandatory for rectangle and ellipsis -} - -// GeoNetworking Transport -enum GNTransport { - GN_TRANSPORT_GAC = 3; // Geographically-Scoped Anycast - GN_TRANSPORT_GBC = 4; // Geographically-Scoped broadcast - GN_TRANSPORT_TSB = 5; // Topologically-scoped broadcast - GN_TRANSPORT_SHB = 7; // Single hop broadcast -} - -message RawMsgTx { - required bytes payload = 1; // as UPER - required uint32 message_type = 2; // ITS `MessageId` integer value - - required GNTransport gnTransport = 3; - required GNArea gnArea = 4; - required uint32 hopLimit = 5; - - optional uint32 stationType = 6; // for source position vector -} - -// ------------------------------ -// Messages -// ------------------------------ - -message PositionState { - required sfixed64 timestamp_ms = 1; // current UNIX time in milliseconds - required Position position = 2; - optional uint32 heading = 3; // heading in 1/10 deg - optional uint32 speed = 4; // speed in 1/100 m/s -} - -message DenmEvent { - required fixed64 timestamp = 1; // DENM reference time as UNIX time - required fixed64 validity_end_ts = 2; // UNIX time when event validity ends (from denm.management.validityDuration) - required fixed32 station_id = 3; // unique ID of the event when combined with `seq_num` - required uint32 seq_num = 4; // unique ID of the event when combined with `station_id` - optional Position event_position = 5; // event location (from denm.management.eventPosition) - optional uint32 event_heading_deg = 6; // event heading (from denm.location.eventPositionHeading) - optional TrafficDir direction = 7; // relevance traffic direction (from denm.management.trafficDirection) - optional uint32 cause_code = 8; - optional uint32 sub_cause_code = 9; -} - -message CamEvent { - required fixed32 station_id = 1; // Station ID of the vehicle - required uint32 station_type = 2; // ITS `StationType` - required Position position = 3; // vehicle position - optional uint32 vehicle_role = 4; // ITS `VehicleRole` - optional VehicleContainer vehicle_data = 5; // speed, etc unless CAM contains an RSU container -} - -message RawMsgRx { - required uint32 msg_type = 1; // ITS message type (`MessageId` from PDU header) - required bytes payload = 2; // UPER message with Geonetworking and BTP headers -} - -message SerialOutputMsg { - oneof payload { - DenmEvent denm = 1; - RawMsgRx rx_msg = 2; - } -} - -message SerialInputMsg { - oneof payload { - PositionState position = 1; - RawMsgTx tx_msg = 2; - } -} diff --git a/docs/uart-protocol.md b/docs/uart-protocol.md deleted file mode 100644 index 6a765e3..0000000 --- a/docs/uart-protocol.md +++ /dev/null @@ -1,20 +0,0 @@ -# UART Protocol - -If enabled using the `TODO` feature flag, all received messages are transmitted on UART using the protocol described in this document. -The serial communication can also be used to send V2X data. - -## Message Format - -The UART communication is using a custom framing protocol to encapsulate binary messages. -The payload is: - -- a `SerialOutputMsg` for transmissions from the ESP to the host or -- a `SerialInputMsg` for transmissions from the host to the ESP - -in binary [Proto](https://protobuf.dev/) serialization according to the [c_its-messages.proto](./c_its-messages.proto) definition. - -Each transmission: -- starts with a Start of Frame (SOF) sequence: `0x56, 0x32, 0x58, 0x2B` ("V2X+") -- followed by a 16-bit big-endian length field -- followed by the payload -- followed by an End of Frame (EOF) sequence `0x0d, 0x0a` diff --git a/feat-permut.sh b/feat-permut.sh deleted file mode 100755 index 9c08d65..0000000 --- a/feat-permut.sh +++ /dev/null @@ -1,70 +0,0 @@ -#!/bin/bash -## Build/ Test/ Clippy all supported feature permutations -set -eu - -mode=${1:-help} -wasm_target="--chrome --headless" -extended=${2:-false} - - -features_base=( - uart,cam,denm - spat,gnss_ubx,screen - spat,gnss_ubx,screen,cam_tx -) -features_more=( - spat,gnss_ubx,screen,cam,denm - spat,gnss_ubx,screen,cam_tx,cam,denm -) -features_test=( - spat,cam,denm,uart -) - - -runBuild () { - for feat in "${features[@]}"; do - echo "cargo build for $feat ..." - cargo build --release --no-default-features -F esp,$feat - done -} - -runTest () { - for feat in "${features_test[@]}"; do - echo "cargo test for $feat ..." - cargo test --target host-tuple --bin test --no-default-features -F std,$feat - done -} - -runClippy () { - for feat in "${features[@]}"; do - echo "clippy for $feat ..." - cargo clippy --no-default-features -F esp,$feat -- -Wclippy::pedantic - done -} - -if [ $extended == "--more" ]; then - echo "running with extended feature list" - features=( "${features_base[@]}" "${features_more[@]}" ) -else - echo "running standard feature list" - features=( "${features_base[@]}" ) -fi - -case $mode in -build) - runBuild - ;; -clippy) - runClippy - ;; -test) - runTest - ;; -all) - runBuild - runClippy - runTest - ;; -*) - echo "Usage: $0 [build | clippy | test | all] [--more]" -esac diff --git a/hardware/c_its-companion-v0.1-back.jpg b/hardware/c_its-companion-v0.1-back.jpg deleted file mode 100644 index 9698624..0000000 Binary files a/hardware/c_its-companion-v0.1-back.jpg and /dev/null differ diff --git a/hardware/c_its-companion-v0.1-front.jpg b/hardware/c_its-companion-v0.1-front.jpg deleted file mode 100644 index 2386379..0000000 Binary files a/hardware/c_its-companion-v0.1-front.jpg and /dev/null differ diff --git a/hardware/c_its-companion/c_its-companion.kicad_pcb b/hardware/c_its-companion/c_its-companion.kicad_pcb deleted file mode 100644 index ff5d33d..0000000 --- a/hardware/c_its-companion/c_its-companion.kicad_pcb +++ /dev/null @@ -1,8034 +0,0 @@ -(kicad_pcb - (version 20260206) - (generator "pcbnew") - (generator_version "10.0") - (general - (thickness 1.6) - (legacy_teardrops no) - ) - (paper "A4" portrait) - (title_block - (title "C-ITS Companion") - (date "2026-07-12") - (rev "v0.1") - (company "jtbx") - ) - (layers - (0 "F.Cu" signal) - (2 "B.Cu" signal) - (9 "F.Adhes" user "F.Adhesive") - (11 "B.Adhes" user "B.Adhesive") - (13 "F.Paste" user) - (15 "B.Paste" user) - (5 "F.SilkS" user "F.Silkscreen") - (7 "B.SilkS" user "B.Silkscreen") - (1 "F.Mask" user) - (3 "B.Mask" user) - (17 "Dwgs.User" user "User.Drawings") - (19 "Cmts.User" user "User.Comments") - (21 "Eco1.User" user "User.Eco1") - (23 "Eco2.User" user "User.Eco2") - (25 "Edge.Cuts" user) - (27 "Margin" user) - (31 "F.CrtYd" user "F.Courtyard") - (29 "B.CrtYd" user "B.Courtyard") - (35 "F.Fab" user) - (33 "B.Fab" user) - (39 "User.1" user) - (41 "User.2" user) - (43 "User.3" user) - (45 "User.4" user) - ) - (setup - (stackup - (layer "F.SilkS" - (type "Top Silk Screen") - ) - (layer "F.Paste" - (type "Top Solder Paste") - ) - (layer "F.Mask" - (type "Top Solder Mask") - (thickness 0.01) - ) - (layer "F.Cu" - (type "copper") - (thickness 0.035) - ) - (layer "dielectric 1" - (type "core") - (thickness 1.51) - (material "FR4") - (epsilon_r 4.5) - (loss_tangent 0.02) - ) - (layer "B.Cu" - (type "copper") - (thickness 0.035) - ) - (layer "B.Mask" - (type "Bottom Solder Mask") - (thickness 0.01) - ) - (layer "B.Paste" - (type "Bottom Solder Paste") - ) - (layer "B.SilkS" - (type "Bottom Silk Screen") - ) - (copper_finish "None") - (dielectric_constraints no) - ) - (pad_to_mask_clearance 0) - (allow_soldermask_bridges_in_footprints no) - (tenting - (front yes) - (back yes) - ) - (covering - (front no) - (back no) - ) - (plugging - (front no) - (back no) - ) - (capping no) - (filling no) - (pcbplotparams - (layerselection 0x00000000_00000000_55555555_5755f5ff) - (plot_on_all_layers_selection 0x00000000_00000000_00000000_00000000) - (disableapertmacros no) - (usegerberextensions no) - (usegerberattributes yes) - (usegerberadvancedattributes yes) - (creategerberjobfile yes) - (dashed_line_dash_ratio 12) - (dashed_line_gap_ratio 3) - (svgprecision 4) - (plotframeref no) - (mode 1) - (useauxorigin no) - (pdf_front_fp_property_popups yes) - (pdf_back_fp_property_popups yes) - (pdf_metadata yes) - (pdf_single_document no) - (dxfpolygonmode yes) - (dxfimperialunits yes) - (dxfusepcbnewfont yes) - (psnegative no) - (psa4output no) - (plot_black_and_white yes) - (sketchpadsonfab no) - (plotpadnumbers no) - (hidednponfab no) - (sketchdnponfab yes) - (crossoutdnponfab yes) - (subtractmaskfromsilk no) - (outputformat 1) - (mirror no) - (drillshape 1) - (scaleselection 1) - (outputdirectory "") - ) - ) - (footprint "Symbol:OSHW-Logo_11.4x12mm_SilkScreen" - (layer "F.Cu") - (uuid "bab5f664-2b01-4e3e-aeb7-565b68cef5ba") - (at 100 138) - (descr "Open Source Hardware Logo") - (tags "Logo OSHW") - (property "Reference" "REF**" - (at 0 0 0) - (layer "F.SilkS") - (hide yes) - (uuid "98bafe23-d4c7-4293-b1ca-b241b7d60769") - (effects - (font - (size 1 1) - (thickness 0.15) - ) - ) - ) - (property "Value" "OSHW-Logo_11.4x12mm_SilkScreen" - (at 0.75 0 0) - (layer "F.Fab") - (hide yes) - (uuid "444bffc8-8227-4ae6-abdd-a7f406603941") - (effects - (font - (size 1 1) - (thickness 0.15) - ) - ) - ) - (property "Datasheet" "" - (at 0 0 0) - (unlocked yes) - (layer "F.Fab") - (hide yes) - (uuid "70a0b0b0-f718-43a5-a826-ebb4b858d4ce") - (effects - (font - (size 1.27 1.27) - (thickness 0.15) - ) - ) - ) - (property "Description" "" - (at 0 0 0) - (unlocked yes) - (layer "F.Fab") - (hide yes) - (uuid "c248ef4a-b104-4592-8859-85529b378620") - (effects - (font - (size 1.27 1.27) - (thickness 0.15) - ) - ) - ) - (attr exclude_from_pos_files exclude_from_bom) - (duplicate_pad_numbers_are_jumpers no) - (fp_poly - (pts - (xy 3.563637 2.887472) (xy 3.64929 2.913641) (xy 3.704437 2.946707) (xy 3.722401 2.972855) (xy 3.717457 3.003852) - (xy 3.685372 3.052547) (xy 3.658243 3.087035) (xy 3.602317 3.149383) (xy 3.560299 3.175615) (xy 3.52448 3.173903) - (xy 3.418224 3.146863) (xy 3.340189 3.148091) (xy 3.27682 3.178735) (xy 3.255546 3.19667) (xy 3.187451 3.259779) - (xy 3.187451 4.083922) (xy 2.913529 4.083922) (xy 2.913529 2.888628) (xy 3.05049 2.888628) (xy 3.132719 2.891879) - (xy 3.175144 2.903426) (xy 3.187445 2.925952) (xy 3.187451 2.92662) (xy 3.19326 2.950215) (xy 3.219531 2.947138) - (xy 3.255931 2.930115) (xy 3.331111 2.898439) (xy 3.392158 2.879381) (xy 3.470708 2.874496) (xy 3.563637 2.887472) - ) - (stroke - (width 0.01) - (type solid) - ) - (fill yes) - (layer "F.SilkS") - (uuid "86415059-de31-4788-8414-ee00af2168da") - ) - (fp_poly - (pts - (xy 3.238446 4.755883) (xy 3.334177 4.774755) (xy 3.388677 4.802699) (xy 3.446008 4.849123) (xy 3.364441 4.952111) - (xy 3.31415 5.014479) (xy 3.280001 5.044907) (xy 3.246063 5.049555) (xy 3.196406 5.034586) (xy 3.173096 5.026117) - (xy 3.078063 5.013622) (xy 2.991032 5.040406) (xy 2.927138 5.100915) (xy 2.916759 5.120208) (xy 2.905456 5.171314) - (xy 2.896732 5.2655) (xy 2.890997 5.396089) (xy 2.88866 5.556405) (xy 2.888627 5.579211) (xy 2.888627 5.976471) - (xy 2.614705 5.976471) (xy 2.614705 4.756275) (xy 2.751666 4.756275) (xy 2.830638 4.758337) (xy 2.871779 4.767513) - (xy 2.886992 4.78829) (xy 2.888627 4.807886) (xy 2.888627 4.859497) (xy 2.95424 4.807886) (xy 3.029475 4.772675) - (xy 3.130544 4.755265) (xy 3.238446 4.755883) - ) - (stroke - (width 0.01) - (type solid) - ) - (fill yes) - (layer "F.SilkS") - (uuid "e68f9948-be94-41d0-9331-1839d365c30e") - ) - (fp_poly - (pts - (xy -1.967236 4.758921) (xy -1.92997 4.770091) (xy -1.917957 4.794633) (xy -1.917451 4.805712) (xy -1.915296 4.836572) - (xy -1.900449 4.841417) (xy -1.860343 4.82026) (xy -1.83652 4.805806) (xy -1.761362 4.77485) (xy -1.671594 4.759544) - (xy -1.577471 4.758367) (xy -1.489246 4.769799) (xy -1.417174 4.79232) (xy -1.371508 4.824409) (xy -1.362502 4.864545) - (xy -1.367047 4.875415) (xy -1.400179 4.920534) (xy -1.451555 4.976026) (xy -1.460848 4.984996) - (xy -1.509818 5.026245) (xy -1.552069 5.039572) (xy -1.611159 5.030271) (xy -1.634831 5.02409) (xy -1.708496 5.009246) - (xy -1.76029 5.015921) (xy -1.804031 5.039465) (xy -1.844098 5.071061) (xy -1.873608 5.110798) (xy -1.894116 5.166252) - (xy -1.907176 5.245003) (xy -1.914344 5.354629) (xy -1.917176 5.502706) (xy -1.917451 5.592111) - (xy -1.917451 5.976471) (xy -2.166471 5.976471) (xy -2.166471 4.756275) (xy -2.041961 4.756275) - (xy -1.967236 4.758921) - ) - (stroke - (width 0.01) - (type solid) - ) - (fill yes) - (layer "F.SilkS") - (uuid "3d0437dd-fa11-4b36-9252-f09c1f80f2f3") - ) - (fp_poly - (pts - (xy 1.967254 3.276245) (xy 1.969608 3.458879) (xy 1.978207 3.5976) (xy 1.99536 3.698147) (xy 2.023374 3.766254) - (xy 2.064557 3.807659) (xy 2.121217 3.828097) (xy 2.191372 3.833318) (xy 2.264848 3.827468) (xy 2.320657 3.806093) - (xy 2.361109 3.763458) (xy 2.388509 3.693825) (xy 2.405167 3.59146) (xy 2.413389 3.450624) (xy 2.41549 3.276245) - (xy 2.41549 2.888628) (xy 2.689411 2.888628) (xy 2.689411 4.083922) (xy 2.552451 4.083922) (xy 2.469884 4.080576) - (xy 2.427368 4.068826) (xy 2.41549 4.04652) (xy 2.408336 4.026654) (xy 2.379865 4.030857) (xy 2.322476 4.058971) - (xy 2.190945 4.102342) (xy 2.051438 4.09927) (xy 1.917765 4.052174) (xy 1.854108 4.014971) (xy 1.805553 3.974691) - (xy 1.770081 3.924291) (xy 1.745674 3.856729) (xy 1.730313 3.764965) (xy 1.721982 3.641955) (xy 1.718662 3.480659) - (xy 1.718235 3.355928) (xy 1.718235 2.888628) (xy 1.967254 2.888628) (xy 1.967254 3.276245) - ) - (stroke - (width 0.01) - (type solid) - ) - (fill yes) - (layer "F.SilkS") - (uuid "b3ee3ccb-8781-4ff8-9cc7-5beefa96fbda") - ) - (fp_poly - (pts - (xy -1.49324 2.909199) (xy -1.431264 2.938802) (xy -1.371241 2.981561) (xy -1.325514 3.030775) (xy -1.292207 3.093544) - (xy -1.269445 3.176971) (xy -1.255353 3.288159) (xy -1.248058 3.434209) (xy -1.245682 3.622223) - (xy -1.245645 3.641912) (xy -1.245098 4.083922) (xy -1.51902 4.083922) (xy -1.51902 3.676435) (xy -1.519215 3.525471) - (xy -1.520564 3.416056) (xy -1.524212 3.339933) (xy -1.531304 3.288848) (xy -1.542987 3.254545) - (xy -1.560406 3.228768) (xy -1.584671 3.203298) (xy -1.669565 3.148571) (xy -1.762239 3.138416) - (xy -1.850527 3.173017) (xy -1.88123 3.19877) (xy -1.903771 3.222982) (xy -1.919954 3.248912) (xy -1.930832 3.284708) - (xy -1.937458 3.338519) (xy -1.940885 3.418493) (xy -1.942166 3.532779) (xy -1.942353 3.671907) - (xy -1.942353 4.083922) (xy -2.216275 4.083922) (xy -2.216275 2.888628) (xy -2.079314 2.888628) - (xy -1.997084 2.891879) (xy -1.95466 2.903426) (xy -1.942359 2.925952) (xy -1.942353 2.92662) (xy -1.936646 2.948681) - (xy -1.911473 2.946177) (xy -1.861422 2.921937) (xy -1.747906 2.886271) (xy -1.618055 2.882305) - (xy -1.49324 2.909199) - ) - (stroke - (width 0.01) - (type solid) - ) - (fill yes) - (layer "F.SilkS") - (uuid "162b294d-9d12-429d-b083-368bcb0c3d9b") - ) - (fp_poly - (pts - (xy 4.390976 2.899056) (xy 4.535256 2.960348) (xy 4.580699 2.990185) (xy 4.638779 3.036036) (xy 4.675238 3.072089) - (xy 4.681568 3.083832) (xy 4.663693 3.109889) (xy 4.61795 3.154105) (xy 4.581328 3.184965) (xy 4.481088 3.26552) - (xy 4.401935 3.198918) (xy 4.340769 3.155921) (xy 4.281129 3.141079) (xy 4.212872 3.144704) (xy 4.104482 3.171652) - (xy 4.029872 3.227587) (xy 3.98453 3.318014) (xy 3.963947 3.448435) (xy 3.963942 3.448517) (xy 3.965722 3.59429) - (xy 3.993387 3.701245) (xy 4.048571 3.774064) (xy 4.086192 3.798723) (xy 4.186105 3.829431) (xy 4.292822 3.829449) - (xy 4.385669 3.799655) (xy 4.407647 3.785098) (xy 4.462765 3.747914) (xy 4.505859 3.74182) (xy 4.552335 3.769496) - (xy 4.603716 3.819205) (xy 4.685046 3.903116) (xy 4.594749 3.977546) (xy 4.455236 4.061549) (xy 4.297912 4.102947) - (xy 4.133503 4.09995) (xy 4.025531 4.0725) (xy 3.899331 4.00462) (xy 3.798401 3.897831) (xy 3.752548 3.822451) - (xy 3.71541 3.714297) (xy 3.696827 3.577318) (xy 3.696684 3.428864) (xy 3.714865 3.286281) (xy 3.751255 3.166918) - (xy 3.756987 3.15468) (xy 3.841865 3.034655) (xy 3.956782 2.947267) (xy 4.092659 2.894329) (xy 4.240417 2.877654) - (xy 4.390976 2.899056) - ) - (stroke - (width 0.01) - (type solid) - ) - (fill yes) - (layer "F.SilkS") - (uuid "20f3d7d0-e5b2-4607-bdae-1411f1b59568") - ) - (fp_poly - (pts - (xy 1.209547 2.903364) (xy 1.335502 2.971959) (xy 1.434047 3.080245) (xy 1.480478 3.168315) (xy 1.500412 3.246101) - (xy 1.513328 3.356993) (xy 1.518863 3.484738) (xy 1.516654 3.613084) (xy 1.506337 3.725779) (xy 1.494286 3.785969) - (xy 1.453634 3.868311) (xy 1.38323 3.95577) (xy 1.298382 4.032251) (xy 1.214397 4.081655) (xy 1.212349 4.082439) - (xy 1.108134 4.104027) (xy 0.984627 4.104562) (xy 0.867261 4.084908) (xy 0.821942 4.069155) (xy 0.70522 4.002966) - (xy 0.621624 3.916246) (xy 0.566701 3.801438) (xy 0.535995 3.650982) (xy 0.529047 3.572173) (xy 0.529933 3.473145) - (xy 0.796862 3.473145) (xy 0.805854 3.617645) (xy 0.831736 3.72776) (xy 0.872868 3.798116) (xy 0.902172 3.818235) - (xy 0.977251 3.832265) (xy 1.066494 3.828111) (xy 1.14365 3.807922) (xy 1.163883 3.796815) (xy 1.217265 3.732123) - (xy 1.2525 3.633119) (xy 1.267498 3.512632) (xy 1.260172 3.383494) (xy 1.243799 3.305775) (xy 1.19679 3.215771) - (xy 1.122582 3.159509) (xy 1.033209 3.140057) (xy 0.940707 3.160481) (xy 0.869653 3.210437) (xy 0.832312 3.251655) - (xy 0.810518 3.292281) (xy 0.80013 3.347264) (xy 0.797006 3.431549) (xy 0.796862 3.473145) (xy 0.529933 3.473145) - (xy 0.53093 3.361874) (xy 0.56518 3.189423) (xy 0.631802 3.054814) (xy 0.730799 2.95804) (xy 0.862175 2.899094) - (xy 0.890385 2.892259) (xy 1.059926 2.876213) (xy 1.209547 2.903364) - ) - (stroke - (width 0.01) - (type solid) - ) - (fill yes) - (layer "F.SilkS") - (uuid "14fe409c-508d-4b44-a330-3c785ab351ce") - ) - (fp_poly - (pts - (xy 0.557528 4.761332) (xy 0.656014 4.768726) (xy 0.784776 5.154706) (xy 0.913537 5.540686) (xy 0.953911 5.403726) - (xy 0.978207 5.319083) (xy 1.010167 5.204697) (xy 1.044679 5.078963) (xy 1.062928 5.01152) (xy 1.131571 4.756275) - (xy 1.414773 4.756275) (xy 1.330122 5.023971) (xy 1.288435 5.155638) (xy 1.238074 5.314458) (xy 1.185481 5.480128) - (xy 1.13853 5.627843) (xy 1.031589 5.96402) (xy 0.800661 5.979044) (xy 0.73805 5.772316) (xy 0.699438 5.643896) - (xy 0.6573 5.502322) (xy 0.620472 5.377285) (xy 0.619018 5.372309) (xy 0.591511 5.287586) (xy 0.567242 5.229778) - (xy 0.550243 5.207918) (xy 0.54675 5.210446) (xy 0.53449 5.244336) (xy 0.511195 5.31693) (xy 0.4797 5.419101) - (xy 0.442842 5.54172) (xy 0.422899 5.609167) (xy 0.314895 5.976471) (xy 0.085679 5.976471) (xy -0.097561 5.3975) - (xy -0.149037 5.235091) (xy -0.19593 5.087602) (xy -0.236023 4.96196) (xy -0.267103 4.865095) (xy -0.286955 4.803934) - (xy -0.292989 4.786065) (xy -0.288212 4.767768) (xy -0.250703 4.759755) (xy -0.172645 4.760557) - (xy -0.160426 4.761163) (xy -0.015674 4.768726) (xy 0.07913 5.117353) (xy 0.113977 5.244497) (xy 0.145117 5.356265) - (xy 0.169809 5.442953) (xy 0.185312 5.494856) (xy 0.188176 5.503318) (xy 0.200046 5.493587) (xy 0.223983 5.443172) - (xy 0.257239 5.358935) (xy 0.297064 5.247741) (xy 0.33073 5.147297) (xy 0.459041 4.753939) (xy 0.557528 4.761332) - ) - (stroke - (width 0.01) - (type solid) - ) - (fill yes) - (layer "F.SilkS") - (uuid "5b787dd1-7830-4c41-baef-86b49d8d585b") - ) - (fp_poly - (pts - (xy -5.026753 2.901568) (xy -4.896478 2.959163) (xy -4.797581 3.055334) (xy -4.729918 3.190229) - (xy -4.693345 3.363996) (xy -4.690724 3.391126) (xy -4.68867 3.582408) (xy -4.715301 3.750073) (xy -4.768999 3.885967) - (xy -4.797753 3.929681) (xy -4.897909 4.022198) (xy -5.025463 4.082119) (xy -5.168163 4.106985) - (xy -5.31376 4.094339) (xy -5.424438 4.055391) (xy -5.519616 3.989755) (xy -5.597406 3.903699) (xy -5.598751 3.901685) - (xy -5.630343 3.84857) (xy -5.650873 3.79516) (xy -5.663305 3.727754) (xy -5.670603 3.632653) (xy -5.673818 3.554666) - (xy -5.675156 3.483944) (xy -5.426186 3.483944) (xy -5.423753 3.554348) (xy -5.41492 3.648068) (xy -5.399336 3.708214) - (xy -5.371234 3.751006) (xy -5.344914 3.776002) (xy -5.251608 3.828338) (xy -5.15398 3.835333) (xy -5.063058 3.797676) - (xy -5.017598 3.755479) (xy -4.984838 3.712956) (xy -4.965677 3.672267) (xy -4.957267 3.619314) - (xy -4.956763 3.539997) (xy -4.959355 3.46695) (xy -4.964929 3.362601) (xy -4.973766 3.29492) (xy -4.989693 3.250774) - (xy -5.016538 3.217031) (xy -5.037811 3.197746) (xy -5.126794 3.147086) (xy -5.222789 3.14456) (xy -5.303281 3.174567) - (xy -5.371947 3.237231) (xy -5.412856 3.340168) (xy -5.426186 3.483944) (xy -5.675156 3.483944) - (xy -5.676754 3.399582) (xy -5.67174 3.2836) (xy -5.656717 3.196367) (xy -5.629624 3.12753) (xy -5.5884 3.066737) - (xy -5.573115 3.048686) (xy -5.477546 2.958746) (xy -5.375039 2.906211) (xy -5.249679 2.884201) - (xy -5.18855 2.882402) (xy -5.026753 2.901568) - ) - (stroke - (width 0.01) - (type solid) - ) - (fill yes) - (layer "F.SilkS") - (uuid "f80b1181-4d2e-4f64-b457-a712971b8b02") - ) - (fp_poly - (pts - (xy -0.398432 5.976471) (xy -0.535393 5.976471) (xy -0.614889 5.97414) (xy -0.656292 5.964488) (xy -0.671199 5.943525) - (xy -0.672353 5.929351) (xy -0.674867 5.900927) (xy -0.69072 5.895475) (xy -0.732379 5.912998) (xy -0.764776 5.929351) - (xy -0.889151 5.968103) (xy -1.024354 5.970346) (xy -1.134274 5.941444) (xy -1.236634 5.871619) - (xy -1.31466 5.768555) (xy -1.357386 5.646989) (xy -1.358474 5.640192) (xy -1.364822 5.566032) (xy -1.367979 5.45957) - (xy -1.367725 5.379052) (xy -1.095711 5.379052) (xy -1.08941 5.48607) (xy -1.075075 5.574278) (xy -1.055669 5.62409) - (xy -0.982254 5.692162) (xy -0.895086 5.716564) (xy -0.805196 5.696831) (xy -0.728383 5.637968) - (xy -0.699292 5.598379) (xy -0.682283 5.551138) (xy -0.674316 5.482181) (xy -0.672353 5.378607) - (xy -0.675866 5.276039) (xy -0.685143 5.185921) (xy -0.698294 5.125613) (xy -0.700486 5.120208) - (xy -0.753522 5.05594) (xy -0.830933 5.020656) (xy -0.917546 5.014959) (xy -0.998193 5.039453) (xy -1.057703 5.094742) - (xy -1.063876 5.105743) (xy -1.083199 5.172827) (xy -1.093726 5.269284) (xy -1.095711 5.379052) - (xy -1.367725 5.379052) (xy -1.367596 5.338225) (xy -1.365806 5.272918) (xy -1.353627 5.111355) - (xy -1.328315 4.990053) (xy -1.286207 4.900379) (xy -1.223641 4.833699) (xy -1.1629 4.794557) (xy -1.078036 4.76704) - (xy -0.972485 4.757603) (xy -0.864402 4.76529) (xy -0.771942 4.789146) (xy -0.72309 4.817685) (xy -0.672353 4.863601) - (xy -0.672353 4.283137) (xy -0.398432 4.283137) (xy -0.398432 5.976471) - ) - (stroke - (width 0.01) - (type solid) - ) - (fill yes) - (layer "F.SilkS") - (uuid "242822e4-d2fc-4d84-80be-25f3e0a4c3d3") - ) - (fp_poly - (pts - (xy 5.303287 2.884355) (xy 5.367051 2.899845) (xy 5.4893 2.956569) (xy 5.593834 3.043202) (xy 5.66618 3.147074) - (xy 5.676119 3.170396) (xy 5.689754 3.231484) (xy 5.699298 3.321853) (xy 5.702549 3.41319) (xy 5.702549 3.585882) - (xy 5.34147 3.585882) (xy 5.192546 3.586445) (xy 5.087632 3.589864) (xy 5.020937 3.598731) (xy 4.986666 3.615641) - (xy 4.979028 3.643189) (xy 4.992229 3.683968) (xy 5.015877 3.731683) (xy 5.081843 3.811314) (xy 5.173512 3.850987) - (xy 5.285555 3.849695) (xy 5.412472 3.806514) (xy 5.522158 3.753224) (xy 5.613173 3.825191) (xy 5.704188 3.897157) - (xy 5.618563 3.976269) (xy 5.50425 4.051017) (xy 5.363666 4.096084) (xy 5.212449 4.108696) (xy 5.066236 4.086079) - (xy 5.042647 4.078405) (xy 4.914141 4.011296) (xy 4.818551 3.911247) (xy 4.753861 3.775271) (xy 4.718057 3.60038) - (xy 4.71764 3.596632) (xy 4.714434 3.406032) (xy 4.727393 3.338035) (xy 4.980392 3.338035) (xy 5.003627 3.348491) - (xy 5.06671 3.3565) (xy 5.159706 3.361073) (xy 5.218638 3.361765) (xy 5.328537 3.361332) (xy 5.397252 3.358578) - (xy 5.433405 3.351321) (xy 5.445615 3.337376) (xy 5.442504 3.314562) (xy 5.439894 3.305735) (xy 5.395344 3.2228) - (xy 5.325279 3.15596) (xy 5.263446 3.126589) (xy 5.181301 3.128362) (xy 5.098062 3.16499) (xy 5.028238 3.225634) - (xy 4.986337 3.299456) (xy 4.980392 3.338035) (xy 4.727393 3.338035) (xy 4.746385 3.238395) (xy 4.809773 3.097711) - (xy 4.900878 2.987974) (xy 5.015978 2.913174) (xy 5.151355 2.877304) (xy 5.303287 2.884355) - ) - (stroke - (width 0.01) - (type solid) - ) - (fill yes) - (layer "F.SilkS") - (uuid "4d91b002-8424-4a6a-a36b-0184ba2e2593") - ) - (fp_poly - (pts - (xy 0.027759 2.884345) (xy 0.122059 2.902229) (xy 0.21989 2.939633) (xy 0.230343 2.944402) (xy 0.304531 2.983412) - (xy 0.35591 3.019664) (xy 0.372517 3.042887) (xy 0.356702 3.080761) (xy 0.318288 3.136644) (xy 0.301237 3.157505) - (xy 0.230969 3.239618) (xy 0.140379 3.186168) (xy 0.054164 3.150561) (xy -0.045451 3.131529) (xy -0.140981 3.130326) - (xy -0.214939 3.14821) (xy -0.232688 3.159373) (xy -0.266488 3.210553) (xy -0.270596 3.269509) (xy -0.245304 3.315567) - (xy -0.230344 3.324499) (xy -0.185514 3.335592) (xy -0.106714 3.34863) (xy -0.009574 3.361088) (xy 0.008346 3.363042) - (xy 0.164365 3.39003) (xy 0.277523 3.435873) (xy 0.352569 3.504803) (xy 0.394253 3.601054) (xy 0.407238 3.718617) - (xy 0.389299 3.852254) (xy 0.33105 3.957195) (xy 0.232255 4.03363) (xy 0.092682 4.081748) (xy -0.062255 4.100732) - (xy -0.188602 4.100504) (xy -0.291087 4.083262) (xy -0.361079 4.059457) (xy -0.449517 4.017978) - (xy -0.531246 3.969842) (xy -0.560295 3.948655) (xy -0.635 3.887676) (xy -0.544902 3.796508) (xy -0.454804 3.705339) - (xy -0.352368 3.773128) (xy -0.249626 3.824042) (xy -0.139913 3.850673) (xy -0.034449 3.853483) - (xy 0.055546 3.832935) (xy 0.118854 3.789493) (xy 0.139296 3.752838) (xy 0.136229 3.694053) (xy 0.085434 3.649099) - (xy -0.012952 3.618057) (xy -0.120744 3.60371) (xy -0.286635 3.576337) (xy -0.409876 3.524693) (xy -0.492114 3.447266) - (xy -0.534999 3.342544) (xy -0.54094 3.218387) (xy -0.511594 3.088702) (xy -0.444691 2.990677) (xy -0.339629 2.923866) - (xy -0.19581 2.88782) (xy -0.089262 2.880754) (xy 0.027759 2.884345) - ) - (stroke - (width 0.01) - (type solid) - ) - (fill yes) - (layer "F.SilkS") - (uuid "11258125-0fff-436e-8434-90cba2f9741f") - ) - (fp_poly - (pts - (xy 4.025307 4.762784) (xy 4.144337 4.793731) (xy 4.244021 4.8576) (xy 4.292288 4.905313) (xy 4.371408 5.018106) - (xy 4.416752 5.14895) (xy 4.43233 5.309792) (xy 4.43241 5.322794) (xy 4.432549 5.45353) (xy 3.680091 5.45353) - (xy 3.69613 5.52201) (xy 3.725091 5.584031) (xy 3.775778 5.648654) (xy 3.786379 5.658971) (xy 3.877494 5.714805) - (xy 3.9814 5.724275) (xy 4.101 5.68754) (xy 4.121274 5.677647) (xy 4.183456 5.647574) (xy 4.225106 5.63044) - (xy 4.232373 5.628855) (xy 4.25774 5.644242) (xy 4.30612 5.681887) (xy 4.330679 5.702459) (xy 4.38157 5.749714) - (xy 4.398281 5.780917) (xy 4.386683 5.80962) (xy 4.380483 5.817468) (xy 4.338493 5.851819) (xy 4.269206 5.893565) - (xy 4.220882 5.917935) (xy 4.083711 5.960873) (xy 3.931847 5.974786) (xy 3.788024 5.9583) (xy 3.747745 5.946496) - (xy 3.623078 5.879689) (xy 3.530671 5.776892) (xy 3.46999 5.637105) (xy 3.440498 5.45933) (xy 3.43726 5.366373) - (xy 3.446714 5.231033) (xy 3.68549 5.231033) (xy 3.708584 5.241038) (xy 3.770662 5.248888) (xy 3.860914 5.253521) - (xy 3.922058 5.254314) (xy 4.03204 5.253549) (xy 4.101457 5.24997) (xy 4.139538 5.241649) (xy 4.155515 5.226657) - (xy 4.158627 5.204903) (xy 4.137278 5.137892) (xy 4.083529 5.071664) (xy 4.012822 5.020832) (xy 3.942089 5.000038) - (xy 3.846016 5.018484) (xy 3.762849 5.071811) (xy 3.705186 5.148677) (xy 3.68549 5.231033) (xy 3.446714 5.231033) - (xy 3.451028 5.169291) (xy 3.49352 5.012271) (xy 3.565635 4.894069) (xy 3.668273 4.81344) (xy 3.802332 4.769139) - (xy 3.874957 4.760607) (xy 4.025307 4.762784) - ) - (stroke - (width 0.01) - (type solid) - ) - (fill yes) - (layer "F.SilkS") - (uuid "7da9399e-c66f-47ff-9120-8a772fd4713d") - ) - (fp_poly - (pts - (xy -2.686796 2.916354) (xy -2.661981 2.928037) (xy -2.576094 2.990951) (xy -2.494879 3.082769) - (xy -2.434236 3.183868) (xy -2.416988 3.230349) (xy -2.401251 3.313376) (xy -2.391867 3.413713) - (xy -2.390728 3.455147) (xy -2.390589 3.585882) (xy -3.143047 3.585882) (xy -3.127007 3.654363) - (xy -3.087637 3.735355) (xy -3.018806 3.805351) (xy -2.936919 3.850441) (xy -2.884737 3.859804) - (xy -2.813971 3.848441) (xy -2.72954 3.819943) (xy -2.700858 3.806831) (xy -2.594791 3.753858) (xy -2.504272 3.822901) - (xy -2.452039 3.869597) (xy -2.424247 3.90814) (xy -2.42284 3.919452) (xy -2.447668 3.946868) (xy -2.502083 3.988532) - (xy -2.551472 4.021037) (xy -2.684748 4.079468) (xy -2.834161 4.105915) (xy -2.982249 4.099039) - (xy -3.100295 4.063096) (xy -3.221982 3.986101) (xy -3.30846 3.884728) (xy -3.362559 3.75357) (xy -3.387109 3.587224) - (xy -3.389286 3.511108) (xy -3.380573 3.336685) (xy -3.379503 3.331611) (xy -3.130173 3.331611) - (xy -3.123306 3.347968) (xy -3.095083 3.356988) (xy -3.036873 3.360854) (xy -2.940042 3.361749) - (xy -2.902757 3.361765) (xy -2.789317 3.360413) (xy -2.717378 3.355505) (xy -2.678687 3.34576) (xy -2.664995 3.329899) - (xy -2.66451 3.324805) (xy -2.680137 3.284326) (xy -2.719247 3.227621) (xy -2.736061 3.207766) (xy -2.798481 3.151611) - (xy -2.863547 3.129532) (xy -2.898603 3.127686) (xy -2.993442 3.150766) (xy -3.072973 3.212759) - (xy -3.123423 3.302802) (xy -3.124317 3.305735) (xy -3.130173 3.331611) (xy -3.379503 3.331611) - (xy -3.351601 3.199343) (xy -3.29941 3.089461) (xy -3.235579 3.011461) (xy -3.117567 2.926882) (xy -2.978842 2.881686) - (xy -2.83129 2.8776) (xy -2.686796 2.916354) - ) - (stroke - (width 0.01) - (type solid) - ) - (fill yes) - (layer "F.SilkS") - (uuid "d9dcdf59-e2df-48a7-9c8e-e612760fb678") - ) - (fp_poly - (pts - (xy 2.056459 4.763669) (xy 2.16142 4.789163) (xy 2.191761 4.802669) (xy 2.250573 4.838046) (xy 2.295709 4.87789) - (xy 2.329106 4.92912) (xy 2.352701 4.998654) (xy 2.368433 5.093409) (xy 2.378239 5.220305) (xy 2.384057 5.386258) - (xy 2.386266 5.497108) (xy 2.394396 5.976471) (xy 2.255531 5.976471) (xy 2.171287 5.972938) (xy 2.127884 5.960866) - (xy 2.116666 5.940594) (xy 2.110744 5.918674) (xy 2.084266 5.922865) (xy 2.048186 5.940441) (xy 1.957862 5.967382) - (xy 1.841777 5.974642) (xy 1.71968 5.962767) (xy 1.611321 5.932305) (xy 1.601602 5.928077) (xy 1.502568 5.858505) - (xy 1.437281 5.761789) (xy 1.40724 5.648738) (xy 1.409535 5.608122) (xy 1.654633 5.608122) (xy 1.676229 5.662782) - (xy 1.740259 5.701952) (xy 1.843565 5.722974) (xy 1.898774 5.725766) (xy 1.990782 5.71862) (xy 2.051941 5.690848) - (xy 2.066862 5.677647) (xy 2.107287 5.605829) (xy 2.116666 5.540686) (xy 2.116666 5.45353) (xy 1.995269 5.45353) - (xy 1.854153 5.460722) (xy 1.755173 5.483345) (xy 1.692633 5.522964) (xy 1.678631 5.540628) (xy 1.654633 5.608122) - (xy 1.409535 5.608122) (xy 1.413941 5.530157) (xy 1.45888 5.416855) (xy 1.520196 5.340285) (xy 1.557332 5.307181) - (xy 1.593687 5.285425) (xy 1.64099 5.272161) (xy 1.710973 5.264528) (xy 1.815364 5.25967) (xy 1.85677 5.258273) - (xy 2.116666 5.24978) (xy 2.116285 5.171116) (xy 2.106219 5.088428) (xy 2.069829 5.038431) (xy 1.996311 5.006489) - (xy 1.994339 5.00592) (xy 1.890105 4.993361) (xy 1.788108 5.009766) (xy 1.712305 5.049657) (xy 1.68189 5.069354) - (xy 1.649132 5.066629) (xy 1.598721 5.038091) (xy 1.569119 5.01795) (xy 1.511218 4.974919) (xy 1.475352 4.942662) - (xy 1.469597 4.933427) (xy 1.493295 4.885636) (xy 1.563313 4.828562) (xy 1.593725 4.809305) (xy 1.681155 4.77614) - (xy 1.798983 4.75735) (xy 1.929866 4.753129) (xy 2.056459 4.763669) - ) - (stroke - (width 0.01) - (type solid) - ) - (fill yes) - (layer "F.SilkS") - (uuid "72731aff-a0cc-4253-9fb5-f4af96766844") - ) - (fp_poly - (pts - (xy -2.74128 4.765922) (xy -2.62413 4.79718) (xy -2.534949 4.853837) (xy -2.472016 4.928045) (xy -2.452452 4.959716) - (xy -2.438008 4.992891) (xy -2.427911 5.035329) (xy -2.421385 5.094788) (xy -2.417658 5.179029) - (xy -2.415954 5.29581) (xy -2.4155 5.45289) (xy -2.415491 5.494565) (xy -2.415491 5.976471) (xy -2.53502 5.976471) - (xy -2.611261 5.971131) (xy -2.667634 5.957604) (xy -2.681758 5.949262) (xy -2.72037 5.934864) (xy -2.759808 5.949262) - (xy -2.824738 5.967237) (xy -2.919055 5.974472) (xy -3.023593 5.971333) (xy -3.119189 5.958186) - (xy -3.175 5.941318) (xy -3.283002 5.871986) (xy -3.350497 5.775772) (xy -3.380841 5.647844) (xy -3.381123 5.644559) - (xy -3.37846 5.587808) (xy -3.137647 5.587808) (xy -3.116595 5.652358) (xy -3.082303 5.688686) (xy -3.013468 5.716162) - (xy -2.92261 5.727129) (xy -2.829958 5.721731) (xy -2.755744 5.70011) (xy -2.734951 5.686239) (xy -2.698619 5.622143) - (xy -2.689412 5.549278) (xy -2.689412 5.45353) (xy -2.827173 5.45353) (xy -2.958047 5.463605) (xy -3.057259 5.492148) - (xy -3.118977 5.536639) (xy -3.137647 5.587808) (xy -3.37846 5.587808) (xy -3.374564 5.50479) (xy -3.328466 5.394282) - (xy -3.2418 5.310712) (xy -3.229821 5.30311) (xy -3.178345 5.278357) (xy -3.114632 5.263368) (xy -3.025565 5.256082) - (xy -2.919755 5.254407) (xy -2.689412 5.254314) (xy -2.689412 5.157755) (xy -2.699183 5.082836) - (xy -2.724116 5.032644) (xy -2.727035 5.029972) (xy -2.782519 5.008015) (xy -2.866273 4.999505) - (xy -2.958833 5.003687) (xy -3.04073 5.019809) (xy -3.089327 5.04399) (xy -3.115659 5.063359) (xy -3.143465 5.067057) - (xy -3.181839 5.051188) (xy -3.239875 5.011855) (xy -3.326669 4.945164) (xy -3.334635 4.938916) - (xy -3.330553 4.9158) (xy -3.296499 4.877352) (xy -3.24474 4.834627) (xy -3.187545 4.798679) (xy -3.169575 4.790191) - (xy -3.104028 4.773252) (xy -3.00798 4.76117) (xy -2.900671 4.756323) (xy -2.895653 4.756313) (xy -2.74128 4.765922) - ) - (stroke - (width 0.01) - (type solid) - ) - (fill yes) - (layer "F.SilkS") - (uuid "0e0b3fd6-0b80-4486-94fc-54f5f97a970c") - ) - (fp_poly - (pts - (xy -3.780091 2.90956) (xy -3.727588 2.935499) (xy -3.662842 2.9807) (xy -3.615653 3.029991) (xy -3.583335 3.091885) - (xy -3.563203 3.174896) (xy -3.55257 3.287538) (xy -3.548753 3.438324) (xy -3.54853 3.503149) (xy -3.549182 3.645221) - (xy -3.551888 3.746757) (xy -3.557776 3.817015) (xy -3.567973 3.865256) (xy -3.583606 3.900738) - (xy -3.599872 3.924943) (xy -3.703705 4.027929) (xy -3.825979 4.089874) (xy -3.957886 4.108506) - (xy -4.090616 4.081549) (xy -4.132667 4.062486) (xy -4.233334 4.010015) (xy -4.233334 4.832259) - (xy -4.159865 4.794267) (xy -4.063059 4.764872) (xy -3.944072 4.757342) (xy -3.825255 4.771245) - (xy -3.735527 4.802476) (xy -3.661101 4.861954) (xy -3.59751 4.947066) (xy -3.592729 4.955805) (xy -3.572563 4.996966) - (xy -3.557835 5.038454) (xy -3.547697 5.088713) (xy -3.541301 5.156184) (xy -3.537799 5.249309) - (xy -3.536342 5.376531) (xy -3.536079 5.519701) (xy -3.536079 5.976471) (xy -3.81 5.976471) (xy -3.81 5.134231) - (xy -3.886617 5.069763) (xy -3.966207 5.018194) (xy -4.041578 5.008818) (xy -4.117367 5.032947) - (xy -4.157759 5.056574) (xy -4.187821 5.090227) (xy -4.209203 5.141087) (xy -4.22355 5.216334) (xy -4.23251 5.323146) - (xy -4.23773 5.468704) (xy -4.239569 5.565588) (xy -4.245785 5.96402) (xy -4.37652 5.971547) (xy -4.507255 5.979073) - (xy -4.507255 3.506582) (xy -4.233334 3.506582) (xy -4.22635 3.644423) (xy -4.202818 3.740107) (xy -4.158865 3.799641) - (xy -4.090618 3.829029) (xy -4.021667 3.834902) (xy -3.943614 3.828154) (xy -3.891811 3.801594) - (xy -3.859417 3.766499) (xy -3.833916 3.728752) (xy -3.818735 3.6867) (xy -3.811981 3.627779) (xy -3.811759 3.539428) - (xy -3.814032 3.465448) (xy -3.819251 3.354) (xy -3.827021 3.280833) (xy -3.840105 3.234422) (xy -3.861268 3.203244) - (xy -3.88124 3.185223) (xy -3.964686 3.145925) (xy -4.063449 3.139579) (xy -4.120159 3.153116) (xy -4.176308 3.201233) - (xy -4.213501 3.294833) (xy -4.231528 3.433254) (xy -4.233334 3.506582) (xy -4.507255 3.506582) - (xy -4.507255 2.888628) (xy -4.370295 2.888628) (xy -4.288065 2.891879) (xy -4.24564 2.903426) (xy -4.233339 2.925952) - (xy -4.233334 2.92662) (xy -4.227626 2.948681) (xy -4.202453 2.946176) (xy -4.152402 2.921935) (xy -4.035781 2.884851) - (xy -3.904571 2.880953) (xy -3.780091 2.90956) - ) - (stroke - (width 0.01) - (type solid) - ) - (fill yes) - (layer "F.SilkS") - (uuid "5d0d1d9b-f6a0-490f-bc2c-d598bfa4fe7c") - ) - (fp_poly - (pts - (xy 0.746535 -5.366828) (xy 0.859117 -4.769637) (xy 1.274531 -4.59839) (xy 1.689944 -4.427143) (xy 2.188302 -4.766022) - (xy 2.327868 -4.860378) (xy 2.454028 -4.944625) (xy 2.560895 -5.014917) (xy 2.642582 -5.067408) - (xy 2.693201 -5.098251) (xy 2.706986 -5.104902) (xy 2.73182 -5.087797) (xy 2.784888 -5.040511) (xy 2.86024 -4.969083) - (xy 2.951929 -4.879555) (xy 3.054007 -4.777966) (xy 3.160526 -4.670357) (xy 3.265536 -4.562768) - (xy 3.363091 -4.46124) (xy 3.447242 -4.371814) (xy 3.51204 -4.300529) (xy 3.551538 -4.253427) (xy 3.56098 -4.237663) - (xy 3.547391 -4.208602) (xy 3.509293 -4.144934) (xy 3.450694 -4.052888) (xy 3.375597 -3.938691) - (xy 3.288009 -3.808571) (xy 3.237254 -3.734354) (xy 3.144745 -3.598833) (xy 3.06254 -3.476539) (xy 2.99463 -3.37356) - (xy 2.945 -3.295982) (xy 2.91764 -3.249894) (xy 2.913529 -3.240208) (xy 2.922849 -3.212681) (xy 2.948254 -3.148527) - (xy 2.985911 -3.056765) (xy 3.031986 -2.946416) (xy 3.082646 -2.8265) (xy 3.134059 -2.706036) (xy 3.182389 -2.594046) - (xy 3.223806 -2.499548) (xy 3.254474 -2.431563) (xy 3.270562 -2.399112) (xy 3.271511 -2.397835) - (xy 3.296772 -2.391638) (xy 3.364046 -2.377815) (xy 3.46636 -2.357723) (xy 3.596741 -2.332721) (xy 3.748216 -2.304169) - (xy 3.836594 -2.287704) (xy 3.998452 -2.256886) (xy 4.144649 -2.227561) (xy 4.267787 -2.201334) - (xy 4.360469 -2.179809) (xy 4.415301 -2.16459) (xy 4.426323 -2.159762) (xy 4.437119 -2.127081) (xy 4.445829 -2.05327) - (xy 4.45246 -1.946963) (xy 4.457018 -1.816788) (xy 4.459509 -1.671379) (xy 4.459938 -1.519365) (xy 4.458311 -1.369378) - (xy 4.454635 -1.230049) (xy 4.448915 -1.11001) (xy 4.441158 -1.01789) (xy 4.431368 -0.962323) (xy 4.425496 -0.950755) - (xy 4.390399 -0.93689) (xy 4.316028 -0.917067) (xy 4.212223 -0.893616) (xy 4.088819 -0.868864) (xy 4.045741 -0.860857) - (xy 3.838047 -0.822814) (xy 3.673984 -0.792176) (xy 3.54813 -0.767726) (xy 3.455065 -0.748246) (xy 3.389367 -0.732519) - (xy 3.345617 -0.719327) (xy 3.318392 -0.707451) (xy 3.302272 -0.695675) (xy 3.300017 -0.693347) - (xy 3.277503 -0.655855) (xy 3.243158 -0.58289) (xy 3.200411 -0.483388) (xy 3.152692 -0.366282) (xy 3.10343 -0.240507) - (xy 3.056055 -0.114998) (xy 3.013995 0.00131) (xy 2.98068 0.099484) (xy 2.959541 0.170588) (xy 2.954005 0.205687) - (xy 2.954466 0.206917) (xy 2.973223 0.235606) (xy 3.015776 0.29873) (xy 3.077653 0.389718) (xy 3.154382 0.502) - (xy 3.241491 0.629005) (xy 3.266299 0.665098) (xy 3.354753 0.795948) (xy 3.432588 0.915336) (xy 3.495566 1.016407) - (xy 3.539445 1.092304) (xy 3.559985 1.136172) (xy 3.56098 1.141562) (xy 3.543722 1.169889) (xy 3.496036 1.226006) - (xy 3.42405 1.303882) (xy 3.333897 1.397485) (xy 3.231705 1.500786) (xy 3.123606 1.607751) (xy 3.015728 1.712351) - (xy 2.914204 1.808554) (xy 2.825162 1.890329) (xy 2.754733 1.951645) (xy 2.709047 1.986471) (xy 2.696409 1.992157) - (xy 2.666991 1.978765) (xy 2.606761 1.942644) (xy 2.52553 1.889881) (xy 2.46303 1.847412) (xy 2.349785 1.769485) - (xy 2.215674 1.677729) (xy 2.081155 1.58612) (xy 2.008833 1.537091) (xy 1.764038 1.371515) (xy 1.558551 1.48262) - (xy 1.464936 1.531293) (xy 1.38533 1.569126) (xy 1.331467 1.590703) (xy 1.317757 1.593706) (xy 1.30127 1.571538) - (xy 1.268745 1.508894) (xy 1.222609 1.411554) (xy 1.16529 1.285294) (xy 1.099216 1.135895) (xy 1.026815 0.969133) - (xy 0.950516 0.790787) (xy 0.872746 0.606636) (xy 0.795934 0.422457) (xy 0.722506 0.24403) (xy 0.654892 0.077132) - (xy 0.59552 -0.072458) (xy 0.546816 -0.198962) (xy 0.51121 -0.296601) (xy 0.49113 -0.359598) (xy 0.4879 -0.381234) - (xy 0.513496 -0.408831) (xy 0.569539 -0.45363) (xy 0.644311 -0.506321) (xy 0.650587 -0.51049) (xy 0.843845 -0.665186) - (xy 0.999674 -0.845664) (xy 1.116724 -1.046153) (xy 1.193645 -1.260881) (xy 1.229086 -1.484078) - (xy 1.221697 -1.709974) (xy 1.170127 -1.932796) (xy 1.073026 -2.146776) (xy 1.044458 -2.193591) - (xy 0.895868 -2.382637) (xy 0.720327 -2.534443) (xy 0.52391 -2.648221) (xy 0.312693 -2.72318) (xy 0.092753 -2.758533) - (xy -0.129837 -2.753488) (xy -0.348999 -2.707256) (xy -0.558658 -2.619049) (xy -0.752739 -2.488076) - (xy -0.812774 -2.434918) (xy -0.965565 -2.268516) (xy -1.076903 -2.093343) (xy -1.153277 -1.896989) - (xy -1.195813 -1.702538) (xy -1.206314 -1.483913) (xy -1.171299 -1.264203) (xy -1.094327 -1.050835) - (xy -0.978953 -0.851233) (xy -0.828734 -0.672826) (xy -0.647227 -0.523038) (xy -0.623373 -0.507249) - (xy -0.547799 -0.455543) (xy -0.490349 -0.410743) (xy -0.462883 -0.382138) (xy -0.462483 -0.381234) - (xy -0.46838 -0.350291) (xy -0.491755 -0.280064) (xy -0.530179 -0.17633) (xy -0.581223 -0.044865) - (xy -0.642458 0.108552) (xy -0.711456 0.278146) (xy -0.785786 0.458138) (xy -0.863022 0.642753) - (xy -0.940732 0.826213) (xy -1.016489 1.002741) (xy -1.087863 1.166559) (xy -1.152426 1.311892) - (xy -1.207748 1.432962) (xy -1.2514 1.523992) (xy -1.280954 1.579205) (xy -1.292856 1.593706) (xy -1.329223 1.582414) - (xy -1.39727 1.55213) (xy -1.485263 1.508265) (xy -1.533649 1.48262) (xy -1.739137 1.371515) (xy -1.983932 1.537091) - (xy -2.108894 1.621915) (xy -2.245705 1.715261) (xy -2.373911 1.803153) (xy -2.438129 1.847412) - (xy -2.528449 1.908063) (xy -2.604929 1.956126) (xy -2.657593 1.985515) (xy -2.674698 1.991727) - (xy -2.699595 1.974968) (xy -2.754695 1.928181) (xy -2.834657 1.856225) (xy -2.934139 1.763957) - (xy -3.0478 1.656235) (xy -3.119685 1.587071) (xy -3.245449 1.463502) (xy -3.354137 1.352979) (xy -3.441355 1.26023) - (xy -3.502711 1.189982) (xy -3.533809 1.146965) (xy -3.536792 1.138235) (xy -3.522947 1.105029) - (xy -3.484688 1.037887) (xy -3.426258 0.943608) (xy -3.351903 0.82899) (xy -3.265865 0.700828) (xy -3.241397 0.665098) - (xy -3.152245 0.535234) (xy -3.072262 0.418314) (xy -3.00592 0.320907) (xy -2.957689 0.249584) (xy -2.932043 0.210915) - (xy -2.929565 0.206917) (xy -2.933271 0.1761) (xy -2.952939 0.108344) (xy -2.98514 0.012584) (xy -3.026445 -0.102246) - (xy -3.073425 -0.227211) (xy -3.122651 -0.353376) (xy -3.170692 -0.471807) (xy -3.214119 -0.57357) - (xy -3.249504 -0.649729) (xy -3.273416 -0.691351) (xy -3.275116 -0.693347) (xy -3.289738 -0.705242) - (xy -3.314435 -0.717005) (xy -3.354628 -0.729854) (xy -3.415737 -0.745006) (xy -3.503183 -0.763679) - (xy -3.622388 -0.78709) (xy -3.778773 -0.816458) (xy -3.977757 -0.853) (xy -4.02084 -0.860857) (xy -4.148529 -0.885528) - (xy -4.259847 -0.909662) (xy -4.344955 -0.930931) (xy -4.394017 -0.947007) (xy -4.400595 -0.950755) - (xy -4.411436 -0.983982) (xy -4.420247 -1.058234) (xy -4.427024 -1.164879) (xy -4.43176 -1.295288) - (xy -4.43445 -1.440828) (xy -4.435087 -1.592869) (xy -4.433666 -1.742779) (xy -4.43018 -1.881927) - (xy -4.424624 -2.001683) (xy -4.416992 -2.093414) (xy -4.407278 -2.148489) (xy -4.401422 -2.159762) - (xy -4.36882 -2.171132) (xy -4.294582 -2.189631) (xy -4.186104 -2.213653) (xy -4.050783 -2.241593) - (xy -3.896015 -2.271847) (xy -3.811692 -2.287704) (xy -3.651704 -2.317611) (xy -3.509033 -2.344705) - (xy -3.390652 -2.367624) (xy -3.303535 -2.385012) (xy -3.254655 -2.395508) (xy -3.24661 -2.397835) - (xy -3.233013 -2.424069) (xy -3.204271 -2.48726) (xy -3.164215 -2.578378) (xy -3.116676 -2.688398) - (xy -3.065485 -2.80829) (xy -3.014474 -2.929028) (xy -2.967474 -3.041584) (xy -2.928316 -3.136929) - (xy -2.900831 -3.206038) (xy -2.888851 -3.239881) (xy -2.888628 -3.24136) (xy -2.902209 -3.268058) - (xy -2.940285 -3.329495) (xy -2.998853 -3.419566) (xy -3.073912 -3.532165) (xy -3.16146 -3.661185) - (xy -3.212353 -3.735294) (xy -3.305091 -3.871178) (xy -3.387459 -3.994546) (xy -3.455439 -4.099158) - (xy -3.505012 -4.178772) (xy -3.532158 -4.227148) (xy -3.536079 -4.237993) (xy -3.519225 -4.263235) - (xy -3.472632 -4.317131) (xy -3.402251 -4.393642) (xy -3.314035 -4.486732) (xy -3.213935 -4.59036) - (xy -3.107902 -4.698491) (xy -3.001889 -4.805085) (xy -2.901848 -4.904105) (xy -2.81373 -4.989513) - (xy -2.743487 -5.05527) (xy -2.697072 -5.095339) (xy -2.681544 -5.104902) (xy -2.656261 -5.091455) - (xy -2.595789 -5.05368) (xy -2.506008 -4.99542) (xy -2.392797 -4.920521) (xy -2.262036 -4.83283) - (xy -2.1634 -4.766022) (xy -1.665043 -4.427143) (xy -1.249629 -4.59839) (xy -0.834216 -4.769637) - (xy -0.721634 -5.366828) (xy -0.609051 -5.96402) (xy 0.633952 -5.96402) (xy 0.746535 -5.366828) - ) - (stroke - (width 0.01) - (type solid) - ) - (fill yes) - (layer "F.SilkS") - (uuid "f10cbea2-0241-40e6-89bd-761c0fa8a4c4") - ) - (embedded_fonts no) - ) - (footprint "RF_GPS:ublox_SAM-M8Q_HandSolder" - (layer "F.Cu") - (uuid "c246778b-2f8e-41b1-ba36-c15040fd26ae") - (at 100.2 100) - (descr "GPS Module, 15.5x15.5x6.3mm, https://www.u-blox.com/sites/default/files/SAM-M8Q_HardwareIntegrationManual_%28UBX-16018358%29.pdf") - (tags "ublox SAM-M8Q") - (property "Reference" "U2" - (at 0 -9.75 0) - (layer "F.SilkS") - (uuid "c771ef3e-1ccf-4336-af27-a2bf95413265") - (effects - (font - (size 1 1) - (thickness 0.15) - ) - ) - ) - (property "Value" "SAM-M8Q" - (at 0 9.75 0) - (layer "F.SilkS") - (uuid "335f698a-9c1a-4a66-9737-326475e73ca0") - (effects - (font - (size 1 1) - (thickness 0.15) - ) - ) - ) - (property "Datasheet" "https://www.u-blox.com/sites/default/files/SAM-M8Q_DataSheet_%28UBX-16012619%29.pdf" - (at 0 0 0) - (unlocked yes) - (layer "F.Fab") - (hide yes) - (uuid "44ebe98c-4be3-4d85-a97c-82944d9547e5") - (effects - (font - (size 1.27 1.27) - (thickness 0.15) - ) - ) - ) - (property "Description" "GPS ublox M8 variant" - (at 0 0 0) - (unlocked yes) - (layer "F.Fab") - (hide yes) - (uuid "6c1ad9d6-8704-49b9-82ad-0d45bc1b76b0") - (effects - (font - (size 1.27 1.27) - (thickness 0.15) - ) - ) - ) - (property ki_fp_filters "ublox*SAM?M8Q*") - (path "/146ab5e4-8674-45b0-a190-4069a635de12") - (sheetname "/") - (sheetfile "c_its-companion.kicad_sch") - (units - (unit - (name "A") - (pins "19" "7" "8" "18" "17" "2" "1" "4" "5" "6" "10" "11" "15" "16" - "20" "3" "14" "13" "9" "12" - ) - ) - ) - (attr smd) - (duplicate_pad_numbers_are_jumpers no) - (fp_line - (start -7.86 -7.86) - (end -7.86 -4.82) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "8ed679f3-2f4f-4d61-aaf1-ceb328066a85") - ) - (fp_line - (start -7.86 4.81) - (end -7.86 7.86) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "b28475db-efbf-4ac0-82d7-4407ba5e0ad2") - ) - (fp_line - (start -7.86 7.86) - (end -4.81 7.86) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "5845eb5f-0039-4339-9147-e155ca82889f") - ) - (fp_line - (start -4.82 -7.86) - (end -7.86 -7.86) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "66045fb0-4223-4265-a07c-7d91c9d35301") - ) - (fp_line - (start 4.81 -7.86) - (end 7.86 -7.86) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "6e1f3f85-a273-4588-bc7a-51db186dd2e3") - ) - (fp_line - (start 4.81 7.86) - (end 7.86 7.86) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "2bc94424-2779-4763-9a8c-6e8daed7dddf") - ) - (fp_line - (start 7.86 -7.86) - (end 7.86 -4.81) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "a3453346-4de3-4187-985b-bef01e858d5d") - ) - (fp_line - (start 7.86 4.81) - (end 7.86 7.86) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "a63b331b-8e93-40e1-b851-1bca054a32a2") - ) - (fp_poly - (pts - (xy -8.14 -4.81) (xy -8.14 -5.29) (xy -8.62 -4.81) - ) - (stroke - (width 0.12) - (type solid) - ) - (fill yes) - (layer "F.SilkS") - (uuid "9a6c3694-6bff-46e2-8409-ea2ca4347eeb") - ) - (fp_line - (start -8.95 -8.95) - (end -8.95 8.95) - (stroke - (width 0.05) - (type solid) - ) - (layer "F.CrtYd") - (uuid "a7c53f6f-d44a-414c-95ad-54a9b736806f") - ) - (fp_line - (start -8.95 8.95) - (end 8.95 8.95) - (stroke - (width 0.05) - (type solid) - ) - (layer "F.CrtYd") - (uuid "8bcc0cc8-6062-4e3f-8736-14ddc8956d0c") - ) - (fp_line - (start 8.95 -8.95) - (end -8.95 -8.95) - (stroke - (width 0.05) - (type solid) - ) - (layer "F.CrtYd") - (uuid "4fe16b43-9869-49d3-8a50-7148adcbb407") - ) - (fp_line - (start 8.95 8.95) - (end 8.95 -8.95) - (stroke - (width 0.05) - (type solid) - ) - (layer "F.CrtYd") - (uuid "a5a0a50f-aad8-4a81-9038-5ed4fcc4c02d") - ) - (fp_line - (start -7.75 -7.75) - (end 7.75 -7.75) - (stroke - (width 0.1) - (type solid) - ) - (layer "F.Fab") - (uuid "e93f3b21-81d5-475b-be73-429302d6a0fe") - ) - (fp_line - (start -7.75 7.75) - (end -7.75 -7.75) - (stroke - (width 0.1) - (type solid) - ) - (layer "F.Fab") - (uuid "783cd2c1-987d-4676-81d5-90ecb8acb1ed") - ) - (fp_line - (start -6 -3.8) - (end -7.75 -4.5) - (stroke - (width 0.1) - (type solid) - ) - (layer "F.Fab") - (uuid "71aeeecc-18f6-41e7-bfa5-3454f91c6241") - ) - (fp_line - (start -6 -3.8) - (end -7.75 -3.1) - (stroke - (width 0.1) - (type solid) - ) - (layer "F.Fab") - (uuid "7cd1dab4-1341-4aa4-a6c8-efe98f2b6c84") - ) - (fp_line - (start -5.5 -4.5) - (end -5.5 4.5) - (stroke - (width 0.1) - (type solid) - ) - (layer "F.Fab") - (uuid "9ecb1122-84d6-4185-baab-aab2fb7965a4") - ) - (fp_line - (start -4.5 5.5) - (end 4.5 5.5) - (stroke - (width 0.1) - (type solid) - ) - (layer "F.Fab") - (uuid "57c5ae0d-e106-4c90-8a84-5133cb61db5c") - ) - (fp_line - (start 4.5 -5.5) - (end -4.5 -5.5) - (stroke - (width 0.1) - (type solid) - ) - (layer "F.Fab") - (uuid "cd0c7952-27ae-488b-a4da-46903ef89306") - ) - (fp_line - (start 5.5 4.5) - (end 5.5 -4.5) - (stroke - (width 0.1) - (type solid) - ) - (layer "F.Fab") - (uuid "393c4919-d982-40fe-82a6-f811e06fdd71") - ) - (fp_line - (start 7.75 -7.75) - (end 7.75 7.75) - (stroke - (width 0.1) - (type solid) - ) - (layer "F.Fab") - (uuid "154fd8e0-8425-48ec-ab08-368f76ed5599") - ) - (fp_line - (start 7.75 7.75) - (end -7.75 7.75) - (stroke - (width 0.1) - (type solid) - ) - (layer "F.Fab") - (uuid "af5763ff-1cec-40d8-b0c6-9b1cf300082f") - ) - (fp_arc - (start -5.5 -4.5) - (mid -5.207107 -5.207107) - (end -4.5 -5.5) - (stroke - (width 0.1) - (type solid) - ) - (layer "F.Fab") - (uuid "e87e8a33-16ff-4d23-8be4-d34a8ba0240a") - ) - (fp_arc - (start -4.5 5.5) - (mid -5.207107 5.207107) - (end -5.5 4.5) - (stroke - (width 0.1) - (type solid) - ) - (layer "F.Fab") - (uuid "5f71278e-8bb8-48be-bf25-8f2d44b4c9a0") - ) - (fp_arc - (start 4.5 -5.5) - (mid 5.207107 -5.207107) - (end 5.5 -4.5) - (stroke - (width 0.1) - (type solid) - ) - (layer "F.Fab") - (uuid "139da106-91c5-4b67-845b-c3db3b41b47f") - ) - (fp_arc - (start 5.5 4.5) - (mid 5.207107 5.207107) - (end 4.5 5.5) - (stroke - (width 0.1) - (type solid) - ) - (layer "F.Fab") - (uuid "65518039-e521-49e2-aec5-3a0511f0dbc7") - ) - (fp_text user "${REFERENCE}" - (at 0 0 0) - (layer "F.Fab") - (uuid "69ed9953-cb42-4beb-8320-8f6177c87a1e") - (effects - (font - (size 1 1) - (thickness 0.15) - ) - ) - ) - (pad "1" smd rect - (at -7.2 -3.8) - (size 3 1.5) - (layers "F.Cu" "F.Mask" "F.Paste") - (net "GND") - (pinfunction "GND_1") - (pintype "power_in") - (uuid "bcbc5bfd-edc6-488e-95ac-2dce781f8df8") - ) - (pad "2" smd rect - (at -7.2 -1.9) - (size 3 1.5) - (layers "F.Cu" "F.Mask" "F.Paste") - (net "+3V3") - (pinfunction "VCC_IO_2") - (pintype "power_in") - (uuid "6327c9fe-c82d-42a6-9109-3c1ac2ab809c") - ) - (pad "3" smd rect - (at -7.2 0) - (size 3 1.5) - (layers "F.Cu" "F.Mask" "F.Paste") - (net "/V_BCKP") - (pinfunction "V_BCKP_3") - (pintype "power_in") - (uuid "7f1e1ecd-7b89-4976-a98d-6ecf0f97ddaf") - ) - (pad "4" smd rect - (at -7.2 1.9) - (size 3 1.5) - (layers "F.Cu" "F.Mask" "F.Paste") - (net "GND") - (pinfunction "GND_4") - (pintype "passive") - (uuid "4cb98e43-b995-475c-8bd7-655f8e043686") - ) - (pad "5" smd rect - (at -7.2 3.8) - (size 3 1.5) - (layers "F.Cu" "F.Mask" "F.Paste") - (net "GND") - (pinfunction "GND_5") - (pintype "passive") - (uuid "0f5c07b4-bca3-4848-920f-784ad9c630e8") - ) - (pad "6" smd rect - (at -3.8 7.2) - (size 1.5 3) - (layers "F.Cu" "F.Mask" "F.Paste") - (net "GND") - (pinfunction "GND_6") - (pintype "passive") - (uuid "fef2c76c-6047-4a84-b98d-687d2a35f829") - ) - (pad "7" smd rect - (at -1.9 7.2) - (size 1.5 3) - (layers "F.Cu" "F.Mask" "F.Paste") - (net "unconnected-(U2-TIMEPULSE-Pad7)") - (pinfunction "TIMEPULSE_7") - (pintype "output+no_connect") - (uuid "42ff87eb-3547-4137-aec3-ddb75ca3c692") - ) - (pad "8" smd rect - (at 0 7.2) - (size 1.5 3) - (layers "F.Cu" "F.Mask" "F.Paste") - (net "Net-(U2-~{SAFEBOOT})") - (pinfunction "~{SAFEBOOT}_8") - (pintype "input") - (uuid "f5c5a99b-66a0-491e-8266-5a3546fcf273") - ) - (pad "9" smd rect - (at 1.9 7.2) - (size 1.5 3) - (layers "F.Cu" "F.Mask" "F.Paste") - (net "unconnected-(U2-SDA-Pad9)") - (pinfunction "SDA_9") - (pintype "bidirectional+no_connect") - (uuid "2a00dd0b-a145-4e21-b0dc-2fe37ba841da") - ) - (pad "10" smd rect - (at 3.8 7.2) - (size 1.5 3) - (layers "F.Cu" "F.Mask" "F.Paste") - (net "GND") - (pinfunction "GND_10") - (pintype "passive") - (uuid "1d83f446-e781-4558-a8a9-46367ffd393b") - ) - (pad "11" smd rect - (at 7.2 3.8) - (size 3 1.5) - (layers "F.Cu" "F.Mask" "F.Paste") - (net "GND") - (pinfunction "GND_11") - (pintype "passive") - (uuid "5ac57ba8-3b94-443f-8dde-f7742e727e18") - ) - (pad "12" smd rect - (at 7.2 1.9) - (size 3 1.5) - (layers "F.Cu" "F.Mask" "F.Paste") - (net "unconnected-(U2-SCL-Pad12)") - (pinfunction "SCL_12") - (pintype "input+no_connect") - (uuid "78b16813-f3d6-412b-8317-37012c78168a") - ) - (pad "13" smd rect - (at 7.2 0) - (size 3 1.5) - (layers "F.Cu" "F.Mask" "F.Paste") - (net "Net-(U1-D7)") - (pinfunction "TXD_13") - (pintype "output") - (uuid "4ac3aa0e-2410-4eab-a4e0-824ce5206af1") - ) - (pad "14" smd rect - (at 7.2 -1.9) - (size 3 1.5) - (layers "F.Cu" "F.Mask" "F.Paste") - (net "Net-(U1-D6)") - (pinfunction "RXD_14") - (pintype "input") - (uuid "28a1d243-aa84-4528-a39a-e99da2faf915") - ) - (pad "15" smd rect - (at 7.2 -3.8) - (size 3 1.5) - (layers "F.Cu" "F.Mask" "F.Paste") - (net "GND") - (pinfunction "GND_15") - (pintype "passive") - (uuid "21a74380-eb5f-4c6c-9d8c-48244fbb8016") - ) - (pad "16" smd rect - (at 3.8 -7.2) - (size 1.5 3) - (layers "F.Cu" "F.Mask" "F.Paste") - (net "GND") - (pinfunction "GND_16") - (pintype "passive") - (uuid "fca53a7d-e4dd-43f8-9dda-4eb5d2ba8bc9") - ) - (pad "17" smd rect - (at 1.9 -7.2) - (size 1.5 3) - (layers "F.Cu" "F.Mask" "F.Paste") - (net "+3V3") - (pinfunction "VCC_17") - (pintype "power_in") - (uuid "e62f2aeb-7944-4e6c-8c12-62bdaecbabe6") - ) - (pad "18" smd rect - (at 0 -7.2) - (size 1.5 3) - (layers "F.Cu" "F.Mask" "F.Paste") - (net "Net-(U1-D2)") - (pinfunction "~{RESET}_18") - (pintype "input") - (uuid "1abaa733-14c5-4fee-a82e-8df0ef39388b") - ) - (pad "19" smd rect - (at -1.9 -7.2) - (size 1.5 3) - (layers "F.Cu" "F.Mask" "F.Paste") - (net "unconnected-(U2-EXTINT-Pad19)") - (pinfunction "EXTINT_19") - (pintype "input+no_connect") - (uuid "1de5c34e-460d-4de3-b661-d0f3bf1e2801") - ) - (pad "20" smd rect - (at -3.8 -7.2) - (size 1.5 3) - (layers "F.Cu" "F.Mask" "F.Paste") - (net "GND") - (pinfunction "GND_20") - (pintype "passive") - (uuid "dd13254c-ce06-4ae1-b6ec-0be61d3ef627") - ) - (embedded_fonts no) - (model "${KICAD10_3DMODEL_DIR}/RF_GPS.3dshapes/ublox_SAM-M8Q.step" - (offset - (xyz 0 0 0) - ) - (scale - (xyz 1 1 1) - ) - (rotate - (xyz 0 0 0) - ) - ) - ) - (footprint "Connector_PinHeader_2.54mm:PinHeader_1x08_P2.54mm_Vertical" - (layer "F.Cu") - (uuid "d59b72e3-73c7-4ea0-bf72-52af4f251a7c") - (at 91.11 122 90) - (descr "Through hole straight pin header, 1x08, 2.54mm pitch, single row") - (tags "Through hole pin header THT 1x08 2.54mm single row") - (property "Reference" "J1" - (at 0 -2.38 90) - (layer "F.SilkS") - (uuid "11d82016-bb41-4ae5-be57-9b923414eb9e") - (effects - (font - (size 1 1) - (thickness 0.15) - ) - ) - ) - (property "Value" "Display" - (at 0 20.16 90) - (layer "F.Fab") - (uuid "553dc7ae-255c-4e45-ad03-02a131d6779c") - (effects - (font - (size 1 1) - (thickness 0.15) - ) - ) - ) - (property "Datasheet" "" - (at 0 0 90) - (layer "F.Fab") - (hide yes) - (uuid "1aa63b80-92c5-43a0-a849-5e10eb4850fd") - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Description" "Generic connector, single row, 01x08, script generated" - (at 0 0 90) - (layer "F.Fab") - (hide yes) - (uuid "25fb579f-f88f-4760-9069-133edb2e4fff") - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "KiLib_Generator" "connector/pin_header_socket" - (at 0 0 90) - (layer "F.SilkS") - (hide yes) - (uuid "e6f588b7-d16f-40b1-a4a1-2eae6590859e") - (effects - (font - (size 1 1) - (thickness 0.15) - ) - ) - ) - (property ki_fp_filters "Connector*:*_1x??_*") - (path "/e8521083-1f77-4711-8191-6272dbbdd11b") - (sheetname "/") - (sheetfile "c_its-companion.kicad_sch") - (units - (unit - (name "A") - (pins "1" "2" "3" "4" "5" "6" "7" "8") - ) - ) - (attr through_hole) - (duplicate_pad_numbers_are_jumpers no) - (fp_line - (start -1.38 -1.38) - (end 0 -1.38) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "30063a21-d86a-4eba-b9ba-675aa7e8e698") - ) - (fp_line - (start -1.38 0) - (end -1.38 -1.38) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "18c876d2-2925-4b02-934e-bf551377fc46") - ) - (fp_line - (start 1.38 1.27) - (end 1.38 19.16) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "7334014e-2e72-40f7-8214-bb37e34e6506") - ) - (fp_line - (start -1.38 1.27) - (end 1.38 1.27) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "e4c219c7-2cd3-4db1-9872-1c42f941567f") - ) - (fp_line - (start -1.38 1.27) - (end -1.38 19.16) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "24ec7dc3-0a22-4e34-af71-8845b6175ff2") - ) - (fp_line - (start -1.38 19.16) - (end 1.38 19.16) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "8217bf43-7633-4fd4-9a55-88fe782aefa0") - ) - (fp_rect - (start -1.77 -1.77) - (end 1.77 19.55) - (stroke - (width 0.05) - (type solid) - ) - (fill no) - (layer "F.CrtYd") - (uuid "81b3f024-77b8-4bfc-a198-a8b20dfbe069") - ) - (fp_line - (start 1.27 -1.27) - (end 1.27 19.05) - (stroke - (width 0.1) - (type solid) - ) - (layer "F.Fab") - (uuid "f39c6de3-20db-4c71-8081-63c4cf5d8d83") - ) - (fp_line - (start -0.635 -1.27) - (end 1.27 -1.27) - (stroke - (width 0.1) - (type solid) - ) - (layer "F.Fab") - (uuid "83f9093a-7509-4eaf-9a7f-2ecb878e525d") - ) - (fp_line - (start -1.27 -0.635) - (end -0.635 -1.27) - (stroke - (width 0.1) - (type solid) - ) - (layer "F.Fab") - (uuid "30eb67c0-90c7-4538-b623-2146c456b156") - ) - (fp_line - (start 1.27 19.05) - (end -1.27 19.05) - (stroke - (width 0.1) - (type solid) - ) - (layer "F.Fab") - (uuid "939c92f8-b6e8-4415-9f6a-f83bc12ccca4") - ) - (fp_line - (start -1.27 19.05) - (end -1.27 -0.635) - (stroke - (width 0.1) - (type solid) - ) - (layer "F.Fab") - (uuid "2fb42edd-858c-4af1-b0ce-be8c29b7b1c4") - ) - (fp_text user "${REFERENCE}" - (at 0 8.89 180) - (layer "F.Fab") - (uuid "5c724a8a-7d66-4172-812b-feb4745e8737") - (effects - (font - (size 1 1) - (thickness 0.15) - ) - ) - ) - (pad "1" thru_hole rect - (at 0 0 90) - (size 1.7 1.7) - (drill 1) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (net "GND") - (pinfunction "Pin_1_1") - (pintype "passive") - (uuid "bbf27e82-5a1a-4290-ae06-1790c84a7481") - ) - (pad "2" thru_hole circle - (at 0 2.54 90) - (size 1.7 1.7) - (drill 1) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (net "+3V3") - (pinfunction "Pin_2_2") - (pintype "passive") - (uuid "adf363e6-09f8-4825-8b78-dca2c06f1711") - ) - (pad "3" thru_hole circle - (at 0 5.08 90) - (size 1.7 1.7) - (drill 1) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (net "Net-(J1-Pin_3)") - (pinfunction "Pin_3_3") - (pintype "passive") - (uuid "eeb30fb9-c9ab-45e5-a949-5155aac5ea6f") - ) - (pad "4" thru_hole circle - (at 0 7.62 90) - (size 1.7 1.7) - (drill 1) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (net "Net-(J1-Pin_4)") - (pinfunction "Pin_4_4") - (pintype "passive") - (uuid "93bb0f84-8935-4169-b541-9befb6c2b9b7") - ) - (pad "5" thru_hole circle - (at 0 10.16 90) - (size 1.7 1.7) - (drill 1) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (net "Net-(J1-Pin_5)") - (pinfunction "Pin_5_5") - (pintype "passive") - (uuid "e85e70c8-9c50-4ac4-932b-857a0332ea3b") - ) - (pad "6" thru_hole circle - (at 0 12.7 90) - (size 1.7 1.7) - (drill 1) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (net "Net-(J1-Pin_6)") - (pinfunction "Pin_6_6") - (pintype "passive") - (uuid "2081782d-b8f6-4e87-9542-4817da099825") - ) - (pad "7" thru_hole circle - (at 0 15.24 90) - (size 1.7 1.7) - (drill 1) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (net "Net-(J1-Pin_7)") - (pinfunction "Pin_7_7") - (pintype "passive") - (uuid "9899fa26-5bf1-4358-a3c1-9f358b34c888") - ) - (pad "8" thru_hole circle - (at 0 17.78 90) - (size 1.7 1.7) - (drill 1) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (net "+3V3") - (pinfunction "Pin_8_8") - (pintype "passive") - (uuid "a39b06c0-891d-4f70-a203-2c30eae5a877") - ) - (embedded_fonts no) - (model "${KICAD10_3DMODEL_DIR}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x08_P2.54mm_Vertical.step" - (offset - (xyz 0 0 0) - ) - (scale - (xyz 1 1 1) - ) - (rotate - (xyz 0 0 0) - ) - ) - ) - (footprint "Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder" - (layer "B.Cu") - (uuid "02ccab68-f728-4265-a37d-a159484e3ccb") - (at 87.5 101.5625 -90) - (descr "Capacitor SMD 1206 (3216 Metric), square (rectangular) end terminal, IPC-7351 nominal with elongated pad for handsoldering. (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf)") - (tags "capacitor handsolder") - (property "Reference" "C1" - (at 0 1.85 90) - (layer "B.SilkS") - (uuid "74d1854b-1c53-4881-9b01-829f4c2615b0") - (effects - (font - (size 1 1) - (thickness 0.15) - ) - (justify mirror) - ) - ) - (property "Value" "C_Polarized" - (at 0 -1.85 90) - (layer "B.Fab") - (uuid "74b18087-42f2-4836-81ee-1c61c3393bfb") - (effects - (font - (size 1 1) - (thickness 0.15) - ) - (justify mirror) - ) - ) - (property "Datasheet" "" - (at 0 0 90) - (layer "B.Fab") - (hide yes) - (uuid "22b9f442-70dd-46ff-8ac9-d2f139d248cc") - (effects - (font - (size 1.27 1.27) - ) - (justify mirror) - ) - ) - (property "Description" "Polarized capacitor" - (at 0 0 90) - (layer "B.Fab") - (hide yes) - (uuid "1cb29f52-47b7-4916-ae9d-c99ed5bd7531") - (effects - (font - (size 1.27 1.27) - ) - (justify mirror) - ) - ) - (property "KiLib_Generator" "SMD_2terminal_chip_molded" - (at 0 0 90) - (layer "B.SilkS") - (hide yes) - (uuid "1f2e0422-de41-46f6-a0c7-83678d923615") - (effects - (font - (size 1 1) - (thickness 0.15) - ) - (justify mirror) - ) - ) - (property ki_fp_filters "CP_*") - (path "/2de94c41-8b8b-4487-a1c1-1ec9096c353e") - (sheetname "/") - (sheetfile "c_its-companion.kicad_sch") - (units - (unit - (name "A") - (pins "1" "2") - ) - ) - (attr smd dnp) - (duplicate_pad_numbers_are_jumpers no) - (fp_line - (start -0.711252 0.91) - (end 0.711252 0.91) - (stroke - (width 0.12) - (type solid) - ) - (layer "B.SilkS") - (uuid "2917306b-eaef-416f-8a72-43f67299fd11") - ) - (fp_line - (start -0.711252 -0.91) - (end 0.711252 -0.91) - (stroke - (width 0.12) - (type solid) - ) - (layer "B.SilkS") - (uuid "be596d20-b759-4ea4-8fb6-a7ebd22aecc9") - ) - (fp_rect - (start -2.48 1.15) - (end 2.48 -1.15) - (stroke - (width 0.05) - (type solid) - ) - (fill no) - (layer "B.CrtYd") - (uuid "5baa37fc-6cdf-4075-8687-6ea1802de8b6") - ) - (fp_rect - (start -1.6 0.8) - (end 1.6 -0.8) - (stroke - (width 0.1) - (type solid) - ) - (fill no) - (layer "B.Fab") - (uuid "5eb41562-72ef-4691-b3c4-beb72279fc67") - ) - (fp_text user "${REFERENCE}" - (at 0 0 90) - (layer "B.Fab") - (uuid "cbdfa84a-827d-47de-b23d-2fff65bc90b2") - (effects - (font - (size 0.8 0.8) - (thickness 0.12) - ) - (justify mirror) - ) - ) - (pad "1" smd roundrect - (at -1.5625 0 270) - (size 1.325 1.8) - (layers "B.Cu" "B.Mask" "B.Paste") - (roundrect_rratio 0.188679) - (net "/V_BCKP") - (pintype "passive") - (uuid "c1216b48-6fa9-40bd-8005-09fdd0976234") - ) - (pad "2" smd roundrect - (at 1.5625 0 270) - (size 1.325 1.8) - (layers "B.Cu" "B.Mask" "B.Paste") - (roundrect_rratio 0.188679) - (net "GND") - (pintype "passive") - (uuid "7dc2e5b4-7a76-4810-b908-27389d26be67") - ) - (embedded_fonts no) - (model "${KICAD10_3DMODEL_DIR}/Capacitor_SMD.3dshapes/C_1206_3216Metric.step" - (offset - (xyz 0 0 0) - ) - (scale - (xyz 1 1 1) - ) - (rotate - (xyz 0 0 0) - ) - ) - ) - (footprint "Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Horizontal" - (layer "B.Cu") - (uuid "17cce4cb-b4dc-4644-854c-3045b2d1dc02") - (at 86 159 90) - (descr "Through hole angled pin header, 1x02, 2.54mm pitch, 6mm pin length, single row") - (tags "Through hole angled pin header THT 1x02 2.54mm single row") - (property "Reference" "J2" - (at 4.385 2.27 90) - (layer "B.SilkS") - (uuid "c752eb3d-b5cc-4835-8bb3-28043805f60f") - (effects - (font - (size 1 1) - (thickness 0.15) - ) - (justify mirror) - ) - ) - (property "Value" "Battery" - (at 4.385 -4.81 90) - (layer "B.Fab") - (uuid "28b80e8d-f48a-4fac-abc1-1a5b62e9d14b") - (effects - (font - (size 1 1) - (thickness 0.15) - ) - (justify mirror) - ) - ) - (property "Datasheet" "" - (at 0 0 90) - (layer "B.Fab") - (hide yes) - (uuid "4143732f-5a6c-4366-81b8-e7dbed3eada5") - (effects - (font - (size 1.27 1.27) - ) - (justify mirror) - ) - ) - (property "Description" "Generic connector, single row, 01x02, script generated" - (at 0 0 90) - (layer "B.Fab") - (hide yes) - (uuid "fb08159b-05b5-4bd9-b53a-151657099824") - (effects - (font - (size 1.27 1.27) - ) - (justify mirror) - ) - ) - (property "KiLib_Generator" "connector/pin_header_socket" - (at 0 0 90) - (layer "B.SilkS") - (hide yes) - (uuid "218cbcc7-80a3-47d7-88ba-0de1a89d11e2") - (effects - (font - (size 1 1) - (thickness 0.15) - ) - (justify mirror) - ) - ) - (property ki_fp_filters "Connector*:*_1x??_*") - (path "/892402cc-04d7-4ef7-82b9-1d18ac58ae6e") - (sheetname "/") - (sheetfile "c_its-companion.kicad_sch") - (units - (unit - (name "A") - (pins "1" "2") - ) - ) - (attr through_hole) - (duplicate_pad_numbers_are_jumpers no) - (fp_line - (start 10.15 -2.97) - (end 4.15 -2.97) - (stroke - (width 0.12) - (type solid) - ) - (layer "B.SilkS") - (uuid "13c7142c-f9cf-4603-a289-f176d326838b") - ) - (fp_line - (start 1.077358 -2.97) - (end 1.39 -2.97) - (stroke - (width 0.12) - (type solid) - ) - (layer "B.SilkS") - (uuid "42ce9709-8b63-409c-9fbb-186ebabf3268") - ) - (fp_line - (start 10.15 -2.11) - (end 10.15 -2.97) - (stroke - (width 0.12) - (type solid) - ) - (layer "B.SilkS") - (uuid "a64db146-ab5c-4441-86c9-c02c119e3b1d") - ) - (fp_line - (start 4.15 -2.11) - (end 10.15 -2.11) - (stroke - (width 0.12) - (type solid) - ) - (layer "B.SilkS") - (uuid "473aaa17-cd86-4a6f-9ff4-21a052a8e851") - ) - (fp_line - (start 1.077358 -2.11) - (end 1.39 -2.11) - (stroke - (width 0.12) - (type solid) - ) - (layer "B.SilkS") - (uuid "1669f8ae-5cba-447c-8c4c-adc3bd14a0bf") - ) - (fp_line - (start 1.39 -1.27) - (end 4.15 -1.27) - (stroke - (width 0.12) - (type solid) - ) - (layer "B.SilkS") - (uuid "6e9309cb-159c-4465-ba6c-ac0061a1dc79") - ) - (fp_line - (start 1.16 -0.43) - (end 1.39 -0.43) - (stroke - (width 0.12) - (type solid) - ) - (layer "B.SilkS") - (uuid "b84b20a6-2eb5-414c-b37a-edfbcd8724d7") - ) - (fp_line - (start -1.27 0) - (end -1.27 1.27) - (stroke - (width 0.12) - (type solid) - ) - (layer "B.SilkS") - (uuid "3ee30bd3-8c59-459c-a1c9-67e8ac495599") - ) - (fp_line - (start 1.16 0.43) - (end 1.39 0.43) - (stroke - (width 0.12) - (type solid) - ) - (layer "B.SilkS") - (uuid "1b834163-7d40-4724-bd1b-7198a1350dcc") - ) - (fp_line - (start -1.27 1.27) - (end 0 1.27) - (stroke - (width 0.12) - (type solid) - ) - (layer "B.SilkS") - (uuid "6b21ac51-f07f-4872-9205-1dfa2166545f") - ) - (fp_rect - (start 4.15 0.43) - (end 10.15 -0.43) - (stroke - (width 0.12) - (type solid) - ) - (fill yes) - (layer "B.SilkS") - (uuid "9db76e12-4c9c-4da8-847f-27422646faf0") - ) - (fp_rect - (start 1.39 1.38) - (end 4.15 -3.92) - (stroke - (width 0.12) - (type solid) - ) - (fill no) - (layer "B.SilkS") - (uuid "55d31d31-bfeb-4bb9-b77f-2b43f5d07712") - ) - (fp_rect - (start -1.77 1.77) - (end 10.54 -4.32) - (stroke - (width 0.05) - (type solid) - ) - (fill no) - (layer "B.CrtYd") - (uuid "3e33e71e-9690-47de-9295-c302707fcb1b") - ) - (fp_line - (start 4.04 -3.81) - (end 1.5 -3.81) - (stroke - (width 0.1) - (type solid) - ) - (layer "B.Fab") - (uuid "7f34577d-0fab-487d-9b6e-cc9bf9aa2257") - ) - (fp_line - (start 1.5 -3.81) - (end 1.5 0.635) - (stroke - (width 0.1) - (type solid) - ) - (layer "B.Fab") - (uuid "e8c8f3ea-3c26-4a8f-9a8c-e373f28bf713") - ) - (fp_line - (start 4.04 -2.86) - (end 10.04 -2.86) - (stroke - (width 0.1) - (type solid) - ) - (layer "B.Fab") - (uuid "fb420c95-7d45-473c-954f-94744267ba6a") - ) - (fp_line - (start -0.32 -2.86) - (end 1.5 -2.86) - (stroke - (width 0.1) - (type solid) - ) - (layer "B.Fab") - (uuid "1ed17b4f-1d70-4b47-92db-4d21fab85c55") - ) - (fp_line - (start 10.04 -2.22) - (end 10.04 -2.86) - (stroke - (width 0.1) - (type solid) - ) - (layer "B.Fab") - (uuid "4036cbcc-31f8-43da-b533-0dc52b505933") - ) - (fp_line - (start 4.04 -2.22) - (end 10.04 -2.22) - (stroke - (width 0.1) - (type solid) - ) - (layer "B.Fab") - (uuid "e5427097-28c6-4b70-9524-0592bfc6ff84") - ) - (fp_line - (start -0.32 -2.22) - (end -0.32 -2.86) - (stroke - (width 0.1) - (type solid) - ) - (layer "B.Fab") - (uuid "b5eac606-caa3-4e43-8399-331a14eb705f") - ) - (fp_line - (start -0.32 -2.22) - (end 1.5 -2.22) - (stroke - (width 0.1) - (type solid) - ) - (layer "B.Fab") - (uuid "c07370c5-ec36-4a38-b9b9-8ec1622536c3") - ) - (fp_line - (start 4.04 -0.32) - (end 10.04 -0.32) - (stroke - (width 0.1) - (type solid) - ) - (layer "B.Fab") - (uuid "a2697e3e-de25-404a-b75d-3c2eaa9f548d") - ) - (fp_line - (start -0.32 -0.32) - (end 1.5 -0.32) - (stroke - (width 0.1) - (type solid) - ) - (layer "B.Fab") - (uuid "e45faf9b-5e6f-4e56-b985-35076fb7921f") - ) - (fp_line - (start 10.04 0.32) - (end 10.04 -0.32) - (stroke - (width 0.1) - (type solid) - ) - (layer "B.Fab") - (uuid "390d88e4-c3dc-4965-9afa-0971a0440b6a") - ) - (fp_line - (start 4.04 0.32) - (end 10.04 0.32) - (stroke - (width 0.1) - (type solid) - ) - (layer "B.Fab") - (uuid "4875451b-9faf-4bb9-a5f0-5e25ed6e3bc1") - ) - (fp_line - (start -0.32 0.32) - (end -0.32 -0.32) - (stroke - (width 0.1) - (type solid) - ) - (layer "B.Fab") - (uuid "60a11b4b-f634-47ca-bbdd-b9098db56b0a") - ) - (fp_line - (start -0.32 0.32) - (end 1.5 0.32) - (stroke - (width 0.1) - (type solid) - ) - (layer "B.Fab") - (uuid "b18665fe-2eb4-4ce1-89ae-89027b484a63") - ) - (fp_line - (start 1.5 0.635) - (end 2.135 1.27) - (stroke - (width 0.1) - (type solid) - ) - (layer "B.Fab") - (uuid "d5b3ddd8-68a1-4d7b-ad05-ba72b427aa83") - ) - (fp_line - (start 4.04 1.27) - (end 4.04 -3.81) - (stroke - (width 0.1) - (type solid) - ) - (layer "B.Fab") - (uuid "9bde524f-984a-45ea-892f-6e81cbbfcb01") - ) - (fp_line - (start 2.135 1.27) - (end 4.04 1.27) - (stroke - (width 0.1) - (type solid) - ) - (layer "B.Fab") - (uuid "4823a474-45fb-457f-9c05-d431786c8b84") - ) - (fp_text user "${REFERENCE}" - (at 2.77 -1.27 0) - (layer "B.Fab") - (uuid "375361c4-5671-4c53-af37-195264207bb7") - (effects - (font - (size 1 1) - (thickness 0.15) - ) - (justify mirror) - ) - ) - (pad "1" thru_hole rect - (at 0 0 90) - (size 1.7 1.7) - (drill 1) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (net "GND") - (pinfunction "Pin_1_1") - (pintype "passive") - (uuid "ef3d4dc1-5010-409a-bad5-86684b15904f") - ) - (pad "2" thru_hole circle - (at 0 -2.54 90) - (size 1.7 1.7) - (drill 1) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (net "/BAT") - (pinfunction "Pin_2_2") - (pintype "passive") - (uuid "2c39a795-394a-40da-a59e-dac76900d82e") - ) - (embedded_fonts no) - (model "${KICAD10_3DMODEL_DIR}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x02_P2.54mm_Horizontal.step" - (offset - (xyz 0 0 0) - ) - (scale - (xyz 1 1 1) - ) - (rotate - (xyz 0 0 0) - ) - ) - ) - (footprint "library:XIAO-ESP32-C5-SMD-DIP" - (layer "B.Cu") - (uuid "840de26d-4d70-4795-84d4-552809b48fdf") - (at 91.1514 148.0317) - (property "Reference" "U1" - (at 7.312 21.336 180) - (layer "B.SilkS") - (uuid "3a7c5286-f3aa-489a-b44c-d507baafeb77") - (effects - (font - (size 0.78232 0.78232) - (thickness 0.10668) - ) - (justify left bottom mirror) - ) - ) - (property "Value" "XIAO-ESP32-C5-SMD" - (at 8.8486 -1.0317 180) - (layer "B.SilkS") - (uuid "a30ff40f-4ffe-4cef-a965-dea469a783a6") - (effects - (font - (size 0.536448 0.536448) - (thickness 0.073152) - ) - (justify mirror) - ) - ) - (property "Datasheet" "" - (at 0 0 180) - (unlocked yes) - (layer "B.Fab") - (hide yes) - (uuid "d3c36ca1-f392-4d1d-91f6-a2fb593dae9d") - (effects - (font - (size 1.27 1.27) - (thickness 0.15) - ) - (justify mirror) - ) - ) - (property "Description" "" - (at 0 0 180) - (unlocked yes) - (layer "B.Fab") - (hide yes) - (uuid "e9a96506-def4-4524-8bfa-5a4fde642952") - (effects - (font - (size 1.27 1.27) - (thickness 0.15) - ) - (justify mirror) - ) - ) - (path "/4975a684-eba1-4811-993f-a5913c07a957") - (sheetname "/") - (sheetfile "c_its-companion.kicad_sch") - (units - (unit - (name "A") - (pins "1" "2" "3" "4" "5" "6" "7" "15" "16" "17" "18" "23" "19" "24" - "20" "25" "21" "22" "14" "13" "12" "11" "10" "9" "8" - ) - ) - ) - (duplicate_pad_numbers_are_jumpers no) - (fp_line - (start 0 1.987) - (end 0 19.132) - (stroke - (width 0.1) - (type solid) - ) - (layer "B.SilkS") - (uuid "978b4839-6142-4dae-99ac-048cbca8c41b") - ) - (fp_line - (start 1.905 0.082) - (end 15.875 0.082) - (stroke - (width 0.1) - (type solid) - ) - (layer "B.SilkS") - (uuid "b892415d-c822-42c8-bc5e-4f3c4b0b9108") - ) - (fp_line - (start 4.595 21.037) - (end 4.598728 22.047272) - (stroke - (width 0.127) - (type solid) - ) - (layer "B.SilkS") - (uuid "f016bbee-6fe1-4de4-b311-97c63651bfbf") - ) - (fp_line - (start 5.098728 22.547) - (end 13.094 22.547) - (stroke - (width 0.127) - (type solid) - ) - (layer "B.SilkS") - (uuid "16273844-9fbe-4b74-afc3-036ee5caf1c5") - ) - (fp_line - (start 13.594 22.047) - (end 13.594 21.037) - (stroke - (width 0.127) - (type solid) - ) - (layer "B.SilkS") - (uuid "2327d165-d565-4808-a551-a701aecdc0e5") - ) - (fp_line - (start 15.875 21.037) - (end 1.905 21.037) - (stroke - (width 0.1) - (type solid) - ) - (layer "B.SilkS") - (uuid "84c9667e-bd95-4c29-8acc-63b4ec4e8d63") - ) - (fp_line - (start 17.78 1.987) - (end 17.78 19.132) - (stroke - (width 0.1) - (type solid) - ) - (layer "B.SilkS") - (uuid "b8b760f4-02d7-41e2-862b-cf06b73137aa") - ) - (fp_arc - (start 0 1.987) - (mid 0.557962 0.639962) - (end 1.905 0.082) - (stroke - (width 0.1) - (type solid) - ) - (layer "B.SilkS") - (uuid "fcbb491d-48ee-434e-b553-687e080cac66") - ) - (fp_arc - (start 1.905 21.041) - (mid 0.557962 20.483038) - (end 0 19.136) - (stroke - (width 0.1) - (type solid) - ) - (layer "B.SilkS") - (uuid "204db366-e821-4630-9ee0-33a17066c6bb") - ) - (fp_arc - (start 5.098728 22.547) - (mid 4.745278 22.400643) - (end 4.598728 22.047272) - (stroke - (width 0.127) - (type default) - ) - (layer "B.SilkS") - (uuid "3f332594-3edf-4e52-8a0b-7f7652d5944d") - ) - (fp_arc - (start 13.594 22.047) - (mid 13.447553 22.400553) - (end 13.094 22.547) - (stroke - (width 0.127) - (type default) - ) - (layer "B.SilkS") - (uuid "0e7fd2de-2bf2-41eb-b2b6-023f44ea3adc") - ) - (fp_arc - (start 15.875 0.082) - (mid 17.222038 0.639962) - (end 17.78 1.987) - (stroke - (width 0.1) - (type solid) - ) - (layer "B.SilkS") - (uuid "6fa9ffb4-45d4-4dc9-9eb8-f0b5a9ee7974") - ) - (fp_arc - (start 17.78 19.132) - (mid 17.222038 20.479038) - (end 15.875 21.037) - (stroke - (width 0.1) - (type solid) - ) - (layer "B.SilkS") - (uuid "a5c0489a-a740-4c30-afb0-c33b637178e6") - ) - (fp_circle - (center -0.21 20.621) - (end -0.21 20.875) - (stroke - (width 0.5) - (type solid) - ) - (fill yes) - (layer "B.SilkS") - (uuid "d56448f6-97fc-4980-9bb8-b046fa07624a") - ) - (fp_circle - (center 1.064 19.904) - (end 1.064 20.158) - (stroke - (width 0.5) - (type solid) - ) - (fill yes) - (layer "B.SilkS") - (uuid "2253efd4-6035-492e-be2c-411f1cfd3916") - ) - (fp_rect - (start 17.8 0) - (end 0 21) - (stroke - (width 0.05) - (type default) - ) - (fill no) - (layer "B.CrtYd") - (uuid "30ca5b40-7a06-4907-8c6c-9c0d7333d3a8") - ) - (fp_rect - (start 0 21) - (end 17.8 0) - (stroke - (width 0.1) - (type default) - ) - (fill no) - (layer "B.Fab") - (uuid "b0deea03-d206-4ccf-9707-e1702e787b4d") - ) - (fp_circle - (center 1.084 19.9) - (end 1.084 20.154) - (stroke - (width 0.5) - (type solid) - ) - (fill yes) - (layer "B.Fab") - (uuid "387740f6-6ef9-446e-8b9f-85b36d0befee") - ) - (pad "1" smd roundrect - (at 0.835 18.12) - (size 2.75 2) - (layers "B.Cu" "B.Mask" "B.Paste") - (roundrect_rratio 0.25) - (net "unconnected-(U1-D0-Pad1)_1") - (pinfunction "D0_1") - (pintype "passive+no_connect") - (solder_mask_margin 0.0508) - (thermal_bridge_angle 45) - (uuid "8185de9b-7e4e-49d5-9630-e0c7ae2cd110") - ) - (pad "1" thru_hole circle - (at 1.26 18.14 180) - (size 1.524 1.524) - (drill 0.889) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (net "unconnected-(U1-D0-Pad1)") - (pinfunction "D0_1") - (pintype "passive+no_connect") - (uuid "174c168c-c339-4113-9b66-e5c6e491e159") - ) - (pad "2" smd roundrect - (at 0.835 15.58) - (size 2.75 2) - (layers "B.Cu" "B.Mask" "B.Paste") - (roundrect_rratio 0.25) - (net "unconnected-(U1-D1-Pad2)") - (pinfunction "D1_2") - (pintype "passive+no_connect") - (solder_mask_margin 0.0508) - (thermal_bridge_angle 45) - (uuid "ebb00e8b-419d-43d5-9e93-912ce4eb2aef") - ) - (pad "2" thru_hole circle - (at 1.26 15.6 180) - (size 1.524 1.524) - (drill 0.889) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (net "unconnected-(U1-D1-Pad2)_1") - (pinfunction "D1_2") - (pintype "passive+no_connect") - (uuid "f3b0c21c-7847-480b-b9b0-577b29a13c5e") - ) - (pad "3" smd roundrect - (at 0.835 13.04) - (size 2.75 2) - (layers "B.Cu" "B.Mask" "B.Paste") - (roundrect_rratio 0.25) - (net "Net-(U1-D2)") - (pinfunction "D2_3") - (pintype "passive") - (solder_mask_margin 0.0508) - (thermal_bridge_angle 45) - (uuid "a303afee-eaf6-4179-9276-62e9a7923793") - ) - (pad "3" thru_hole circle - (at 1.26 13.06 180) - (size 1.524 1.524) - (drill 0.889) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (net "Net-(U1-D2)") - (pinfunction "D2_3") - (pintype "passive") - (uuid "96d04323-3765-4cf6-aeef-4491a262853b") - ) - (pad "4" smd roundrect - (at 0.835 10.5) - (size 2.75 2) - (layers "B.Cu" "B.Mask" "B.Paste") - (roundrect_rratio 0.25) - (net "Net-(J1-Pin_5)") - (pinfunction "D3_4") - (pintype "passive") - (solder_mask_margin 0.0508) - (thermal_bridge_angle 45) - (uuid "b4661f7d-b151-4442-935d-4d4d148eab9d") - ) - (pad "4" thru_hole circle - (at 1.26 10.52 180) - (size 1.524 1.524) - (drill 0.889) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (net "Net-(J1-Pin_5)") - (pinfunction "D3_4") - (pintype "passive") - (uuid "7fd2977f-7d1c-455e-bd1f-d7b5216930ed") - ) - (pad "5" smd roundrect - (at 0.835 7.96) - (size 2.75 2) - (layers "B.Cu" "B.Mask" "B.Paste") - (roundrect_rratio 0.25) - (net "Net-(J1-Pin_6)") - (pinfunction "D4_5") - (pintype "passive") - (solder_mask_margin 0.0508) - (thermal_bridge_angle 45) - (uuid "0bde0bd5-ba1d-4f2b-be2d-20fa82bdaf8a") - ) - (pad "5" thru_hole circle - (at 1.26 7.98 180) - (size 1.524 1.524) - (drill 0.889) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (net "Net-(J1-Pin_6)") - (pinfunction "D4_5") - (pintype "passive") - (uuid "a04e0c3e-077d-4667-8b02-ff16233793c5") - ) - (pad "6" smd roundrect - (at 0.835 5.42) - (size 2.75 2) - (layers "B.Cu" "B.Mask" "B.Paste") - (roundrect_rratio 0.25) - (net "Net-(J1-Pin_7)") - (pinfunction "D5_6") - (pintype "passive") - (solder_mask_margin 0.0508) - (thermal_bridge_angle 45) - (uuid "096237f6-02ee-4a1d-b262-ebe1dc1425b2") - ) - (pad "6" thru_hole circle - (at 1.26 5.44 180) - (size 1.524 1.524) - (drill 0.889) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (net "Net-(J1-Pin_7)") - (pinfunction "D5_6") - (pintype "passive") - (uuid "aba611e7-179b-4227-9c95-df6826df3930") - ) - (pad "7" smd roundrect - (at 0.835 2.88) - (size 2.75 2) - (layers "B.Cu" "B.Mask" "B.Paste") - (roundrect_rratio 0.25) - (net "Net-(U1-D6)") - (pinfunction "D6_7") - (pintype "passive") - (solder_mask_margin 0.0508) - (thermal_bridge_angle 45) - (uuid "d68a7e3e-6c8f-4c46-8576-7fed5386245f") - ) - (pad "7" thru_hole circle - (at 1.26 2.9 180) - (size 1.524 1.524) - (drill 0.889) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (net "Net-(U1-D6)") - (pinfunction "D6_7") - (pintype "passive") - (uuid "22a2d5bf-8996-4f79-a632-e8e04b177ad4") - ) - (pad "8" thru_hole circle - (at 16.5 2.9) - (size 1.524 1.524) - (drill 0.889) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (net "Net-(U1-D7)") - (pinfunction "D7_8") - (pintype "passive") - (uuid "2251d023-b13e-45a8-bd81-eb725bfa07d2") - ) - (pad "8" smd roundrect - (at 17 2.88) - (size 2.75 2) - (layers "B.Cu" "B.Mask" "B.Paste") - (roundrect_rratio 0.25) - (net "Net-(U1-D7)") - (pinfunction "D7_8") - (pintype "passive") - (solder_mask_margin 0.0508) - (thermal_bridge_angle 45) - (uuid "a8757edb-b6e1-4d9a-a8aa-b09105407f59") - ) - (pad "9" thru_hole circle - (at 16.5 5.44) - (size 1.524 1.524) - (drill 0.889) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (net "Net-(J1-Pin_3)") - (pinfunction "D8_9") - (pintype "passive") - (uuid "c2f8ea01-dff3-4d9b-93c1-622b93cd03ae") - ) - (pad "9" smd roundrect - (at 17 5.42) - (size 2.75 2) - (layers "B.Cu" "B.Mask" "B.Paste") - (roundrect_rratio 0.25) - (net "Net-(J1-Pin_3)") - (pinfunction "D8_9") - (pintype "passive") - (solder_mask_margin 0.0508) - (thermal_bridge_angle 45) - (uuid "5e615176-728d-4609-9ab0-7149bee0520f") - ) - (pad "10" thru_hole circle - (at 16.5 7.98) - (size 1.524 1.524) - (drill 0.889) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (net "unconnected-(U1-D9-Pad10)_1") - (pinfunction "D9_10") - (pintype "passive+no_connect") - (uuid "c48c13e4-4070-4369-b424-97fc0af45d11") - ) - (pad "10" smd roundrect - (at 17 7.96) - (size 2.75 2) - (layers "B.Cu" "B.Mask" "B.Paste") - (roundrect_rratio 0.25) - (net "unconnected-(U1-D9-Pad10)") - (pinfunction "D9_10") - (pintype "passive+no_connect") - (solder_mask_margin 0.0508) - (thermal_bridge_angle 45) - (uuid "98c32f79-de0e-45f3-9630-bbc310c87c04") - ) - (pad "11" thru_hole circle - (at 16.5 10.52) - (size 1.524 1.524) - (drill 0.889) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (net "Net-(J1-Pin_4)") - (pinfunction "D10_11") - (pintype "passive") - (uuid "537e5f5f-75dd-4400-9c66-746ae8023684") - ) - (pad "11" smd roundrect - (at 17 10.5) - (size 2.75 2) - (layers "B.Cu" "B.Mask" "B.Paste") - (roundrect_rratio 0.25) - (net "Net-(J1-Pin_4)") - (pinfunction "D10_11") - (pintype "passive") - (solder_mask_margin 0.0508) - (thermal_bridge_angle 45) - (uuid "d621570c-61d4-446d-959d-696ab8814569") - ) - (pad "12" thru_hole circle - (at 16.5 13.06) - (size 1.524 1.524) - (drill 0.889) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (net "+3V3") - (pinfunction "3V3_OUT_12") - (pintype "passive") - (uuid "b0ea412e-3deb-4c79-83d6-bb4d8d131179") - ) - (pad "12" smd roundrect - (at 17 13.04) - (size 2.75 2) - (layers "B.Cu" "B.Mask" "B.Paste") - (roundrect_rratio 0.25) - (net "+3V3") - (pinfunction "3V3_OUT_12") - (pintype "passive") - (solder_mask_margin 0.0508) - (thermal_bridge_angle 45) - (uuid "0eb26e85-cae8-4d63-8489-80609a7be445") - ) - (pad "13" thru_hole circle - (at 16.5 15.6) - (size 1.524 1.524) - (drill 0.889) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (net "GND") - (pinfunction "GND_13") - (pintype "passive") - (uuid "7bb77b62-7223-43d4-bcba-af503d28b1e3") - ) - (pad "13" smd roundrect - (at 17 15.58) - (size 2.75 2) - (layers "B.Cu" "B.Mask" "B.Paste") - (roundrect_rratio 0.25) - (net "GND") - (pinfunction "GND_13") - (pintype "passive") - (solder_mask_margin 0.0508) - (thermal_bridge_angle 45) - (uuid "daf02d3f-778e-462b-b26e-04c0d0c74146") - ) - (pad "14" thru_hole circle - (at 16.5 18.14) - (size 1.524 1.524) - (drill 0.889) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (net "unconnected-(U1-VBUS-Pad14)") - (pinfunction "VBUS_14") - (pintype "passive+no_connect") - (uuid "6451bfc3-9662-40ae-98ab-655fe91877b1") - ) - (pad "14" smd roundrect - (at 17 18.12) - (size 2.75 2) - (layers "B.Cu" "B.Mask" "B.Paste") - (roundrect_rratio 0.25) - (net "unconnected-(U1-VBUS-Pad14)_1") - (pinfunction "VBUS_14") - (pintype "passive+no_connect") - (solder_mask_margin 0.0508) - (thermal_bridge_angle 45) - (uuid "9b5e7d1b-6e98-43fa-a4cd-73c193e3ef54") - ) - (pad "15" smd circle - (at 7.6166 19.1415) - (size 1.7 1.7) - (layers "B.Cu" "B.Mask" "B.Paste") - (net "unconnected-(U1-MTDI-Pad15)") - (pinfunction "MTDI_15") - (pintype "passive+no_connect") - (uuid "3f9cc580-22d9-4166-a64c-6de25cfa806f") - ) - (pad "16" smd circle - (at 10.1566 19.1415) - (size 1.7 1.7) - (layers "B.Cu" "B.Mask" "B.Paste") - (net "unconnected-(U1-MTDO-Pad16)") - (pinfunction "MTDO_16") - (pintype "passive+no_connect") - (uuid "7cab4350-1888-4165-8787-53f17f09ecbf") - ) - (pad "17" smd circle - (at 7.6166 16.6015) - (size 1.7 1.7) - (layers "B.Cu" "B.Mask" "B.Paste") - (net "unconnected-(U1-EN-Pad17)") - (pinfunction "EN_17") - (pintype "passive+no_connect") - (uuid "ccfd7629-96e1-4436-9c45-ca22573121ea") - ) - (pad "18" smd circle - (at 10.1566 16.6015) - (size 1.7 1.7) - (layers "B.Cu" "B.Mask" "B.Paste") - (net "GND") - (pinfunction "GND_18") - (pintype "passive") - (uuid "978e3dcb-15a4-4499-940a-81ea824347b1") - ) - (pad "19" smd circle - (at 7.6166 14.0615) - (size 1.7 1.7) - (layers "B.Cu" "B.Mask" "B.Paste") - (net "unconnected-(U1-MTMS-Pad19)") - (pinfunction "MTMS_19") - (pintype "passive+no_connect") - (uuid "8203f261-6d9c-4307-8d62-0b438832333d") - ) - (pad "20" smd circle - (at 10.1566 14.0615) - (size 1.7 1.7) - (layers "B.Cu" "B.Mask" "B.Paste") - (net "unconnected-(U1-MTCK-Pad20)") - (pinfunction "MTCK_20") - (pintype "passive+no_connect") - (uuid "59b3c732-d358-4d37-ae7a-1416cd7b85e8") - ) - (pad "21" smd circle - (at 7.6166 11.5215) - (size 1.7 1.7) - (layers "B.Cu" "B.Mask" "B.Paste") - (net "unconnected-(U1-BOOT-Pad21)") - (pinfunction "BOOT_21") - (pintype "passive+no_connect") - (uuid "25b1e1d5-ed4e-47b8-a5ff-e76c1475f8f7") - ) - (pad "22" smd circle - (at 10.064 11.5783) - (size 1.7 1.7) - (layers "B.Cu" "B.Mask" "B.Paste") - (net "unconnected-(U1-3V3_OUT-Pad22)") - (pinfunction "3V3_OUT_22") - (pintype "passive+no_connect") - (uuid "58fb775a-65ee-49a7-8099-fd122f4a2aa4") - ) - (pad "23" smd roundrect - (at 7.3086 4.9683 90) - (size 2.5 1.1) - (layers "B.Cu" "B.Mask" "B.Paste") - (roundrect_rratio 0.25) - (net "/BAT_SW") - (pinfunction "VBAT_23") - (pintype "passive") - (thermal_bridge_angle 45) - (uuid "b91b1582-76c8-4400-9459-c0225e5a7a66") - ) - (pad "24" smd roundrect - (at 9.8486 4.9683 90) - (size 2.5 1.1) - (layers "B.Cu" "B.Mask" "B.Paste") - (roundrect_rratio 0.25) - (net "GND") - (pinfunction "GND_24") - (pintype "passive") - (thermal_bridge_angle 45) - (uuid "b8e54760-0480-4fab-97ae-f2861a181774") - ) - (pad "25" smd roundrect - (at 9.949 8.412 90) - (size 3.1 1.9) - (layers "B.Cu" "B.Mask" "B.Paste") - (roundrect_rratio 0.25) - (net "unconnected-(U1-PAD-Pad25)") - (pinfunction "PAD_25") - (pintype "passive+no_connect") - (thermal_bridge_angle 45) - (uuid "ef16b242-3938-4334-be9c-f0ebc7fd5cc1") - ) - (embedded_fonts no) - ) - (footprint "Button_Switch_THT:SW_Slide_SPDT_Angled_CK_OS102011MA1Q" - (layer "B.Cu") - (uuid "9f97fff6-4c4d-49f2-891f-6475e5776d21") - (at 117.5 152 -90) - (descr "CuK miniature slide switch, OS series, SPDT, right angle, http://www.ckswitches.com/media/1428/os.pdf") - (tags "switch SPDT") - (property "Reference" "SW1" - (at -5 0 90) - (layer "B.SilkS") - (uuid "a3fbdaf8-36a5-433f-9416-8eab262c2ba5") - (effects - (font - (size 1 1) - (thickness 0.15) - ) - (justify mirror) - ) - ) - (property "Value" "OS102011MA1QS1" - (at 1.7 -7.7 90) - (layer "B.Fab") - (uuid "c5f3cf0c-6f44-4102-9852-46512438402e") - (effects - (font - (size 1 1) - (thickness 0.15) - ) - (justify mirror) - ) - ) - (property "Datasheet" "" - (at 0 0 90) - (unlocked yes) - (layer "B.Fab") - (hide yes) - (uuid "3ca8f5fa-2b6f-474f-9d0d-81383b953207") - (effects - (font - (size 1.27 1.27) - (thickness 0.15) - ) - (justify mirror) - ) - ) - (property "Description" "Switch, single pole double throw" - (at 0 0 90) - (unlocked yes) - (layer "B.Fab") - (hide yes) - (uuid "849f0032-1ded-48a8-b3b0-040d72f90c2d") - (effects - (font - (size 1.27 1.27) - (thickness 0.15) - ) - (justify mirror) - ) - ) - (path "/ba38386d-3ed3-42ce-8f1d-137790571805") - (sheetname "/") - (sheetfile "c_its-companion.kicad_sch") - (units - (unit - (name "A") - (pins "2" "1" "3") - ) - ) - (attr through_hole) - (duplicate_pad_numbers_are_jumpers no) - (fp_line - (start -2.3 2.3) - (end 6.3 2.3) - (stroke - (width 0.12) - (type solid) - ) - (layer "B.SilkS") - (uuid "f6a48e6c-0d60-466e-9736-8205d77c8000") - ) - (fp_line - (start -2.3 -2.3) - (end -0.1 -2.3) - (stroke - (width 0.12) - (type solid) - ) - (layer "B.SilkS") - (uuid "7e787d76-b0da-4970-980c-cfefa9238934") - ) - (fp_line - (start 4 -2.3) - (end 6.3 -2.3) - (stroke - (width 0.12) - (type solid) - ) - (layer "B.SilkS") - (uuid "50c472be-6cc5-4ec9-a527-61df9b8b3151") - ) - (fp_line - (start -3.7 2.7) - (end 7.7 2.7) - (stroke - (width 0.05) - (type solid) - ) - (layer "B.CrtYd") - (uuid "a67e8a78-2b9a-4bcc-8eb2-2c8b87bbc732") - ) - (fp_line - (start 7.7 2.7) - (end 7.7 -6.7) - (stroke - (width 0.05) - (type solid) - ) - (layer "B.CrtYd") - (uuid "5cf9173b-f56d-405b-b351-e97e705749ea") - ) - (fp_line - (start -3.7 -6.7) - (end -3.7 2.7) - (stroke - (width 0.05) - (type solid) - ) - (layer "B.CrtYd") - (uuid "2cdeb947-3ca3-473c-9b01-0284fde6ced0") - ) - (fp_line - (start 7.7 -6.7) - (end -3.7 -6.7) - (stroke - (width 0.05) - (type solid) - ) - (layer "B.CrtYd") - (uuid "28aba78a-ae20-41d2-b1e8-fe34d66b919f") - ) - (fp_line - (start -2.3 2.2) - (end 6.3 2.2) - (stroke - (width 0.1) - (type solid) - ) - (layer "B.Fab") - (uuid "901800cd-0e85-4611-aab9-8eb5cbee18c6") - ) - (fp_line - (start -2.3 2.2) - (end -2.3 -2.2) - (stroke - (width 0.1) - (type solid) - ) - (layer "B.Fab") - (uuid "8d29ce29-6f55-4a14-9155-f15d773bd2c2") - ) - (fp_line - (start -2.3 -2.2) - (end 6.3 -2.2) - (stroke - (width 0.1) - (type solid) - ) - (layer "B.Fab") - (uuid "58e5482a-0bcf-4288-918a-eb8f9a348360") - ) - (fp_line - (start 2 -2.2) - (end 2 -6.2) - (stroke - (width 0.1) - (type solid) - ) - (layer "B.Fab") - (uuid "45aa44c9-ec7d-467e-8838-31633b05455c") - ) - (fp_line - (start 6.3 -2.2) - (end 6.3 2.2) - (stroke - (width 0.1) - (type solid) - ) - (layer "B.Fab") - (uuid "40ff54c1-5b0e-4ff2-8cb6-85fb2427eaea") - ) - (fp_line - (start 0 -6.2) - (end 0 -2.2) - (stroke - (width 0.1) - (type solid) - ) - (layer "B.Fab") - (uuid "f42dad56-0e07-4ed3-975b-bfa512ce11a2") - ) - (fp_line - (start 2 -6.2) - (end 0 -6.2) - (stroke - (width 0.1) - (type solid) - ) - (layer "B.Fab") - (uuid "b9dca275-a5e2-4a83-945d-a2212891e9cf") - ) - (fp_text user "${REFERENCE}" - (at 2.3 -1.7 90) - (layer "B.Fab") - (uuid "84225377-a12b-4e17-bdce-1a1dd4b39fa2") - (effects - (font - (size 0.5 0.5) - (thickness 0.1) - ) - (justify mirror) - ) - ) - (pad "" thru_hole oval - (at -2.1 0 270) - (size 2.2 3.5) - (drill 1.5) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (uuid "62dec2ea-feee-495d-b1f8-14a1507bbc59") - ) - (pad "" thru_hole oval - (at 6.1 0 270) - (size 2.2 3.5) - (drill 1.5) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (uuid "95339e55-4b42-4db6-a194-5467fb69bc6a") - ) - (pad "1" thru_hole rect - (at 0 0 270) - (size 1.5 2.5) - (drill 0.9) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (net "/BAT_SW") - (pinfunction "A_1") - (pintype "passive") - (uuid "9f3d2234-243e-4305-b9b4-eb4899fce5d5") - ) - (pad "2" thru_hole oval - (at 2 0 270) - (size 1.5 2.5) - (drill 0.9) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (net "/BAT") - (pinfunction "B_2") - (pintype "passive") - (uuid "25c3f843-6a03-4165-a62f-a17aa4b28104") - ) - (pad "3" thru_hole oval - (at 4 0 270) - (size 1.5 2.5) - (drill 0.9) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (net "unconnected-(SW1-C-Pad3)") - (pinfunction "C_3") - (pintype "passive+no_connect") - (uuid "44eeff4d-1740-4450-a550-f76e26068838") - ) - (embedded_fonts no) - (model "${KICAD10_3DMODEL_DIR}/Button_Switch_THT.3dshapes/SW_Slide_SPDT_Angled_CK_OS102011MA1Q.step" - (offset - (xyz 0 0 0) - ) - (scale - (xyz 1 1 1) - ) - (rotate - (xyz 0 0 0) - ) - ) - ) - (footprint "TestPoint:TestPoint_Pad_D2.0mm" - (layer "B.Cu") - (uuid "ae109f6b-2add-4a1b-87ae-1d7c57700690") - (at 100 111 180) - (descr "SMD pad as test Point, diameter 2.0mm") - (tags "test point SMD pad") - (property "Reference" "TP1" - (at 0 1.998 0) - (layer "B.SilkS") - (hide yes) - (uuid "523f7265-e01c-4528-b1ef-48f434ca1818") - (effects - (font - (size 1 1) - (thickness 0.15) - ) - (justify mirror) - ) - ) - (property "Value" "SAFEBOOT_N" - (at 0 -2.05 0) - (layer "B.Fab") - (uuid "35f6bc50-7908-4acb-9197-3a9a3274fc43") - (effects - (font - (size 1 1) - (thickness 0.15) - ) - (justify mirror) - ) - ) - (property "Datasheet" "" - (at 0 0 0) - (unlocked yes) - (layer "B.Fab") - (hide yes) - (uuid "75898fbd-fbf3-4843-83df-4c5b8a6a083e") - (effects - (font - (size 1.27 1.27) - (thickness 0.15) - ) - (justify mirror) - ) - ) - (property "Description" "test point" - (at 0 0 0) - (unlocked yes) - (layer "B.Fab") - (hide yes) - (uuid "df1a5293-f5a2-462d-ad07-0bfc831df616") - (effects - (font - (size 1.27 1.27) - (thickness 0.15) - ) - (justify mirror) - ) - ) - (property ki_fp_filters "Pin* Test*") - (path "/29c6ccbc-a78f-400c-a69e-7ae6b54be5c1") - (sheetname "/") - (sheetfile "c_its-companion.kicad_sch") - (units - (unit - (name "A") - (pins "1") - ) - ) - (duplicate_pad_numbers_are_jumpers no) - (fp_circle - (center 0 0) - (end 0 -1.2) - (stroke - (width 0.12) - (type solid) - ) - (fill no) - (layer "B.SilkS") - (uuid "4b992b1f-672d-417d-b022-0fb3a5e8d611") - ) - (fp_circle - (center 0 0) - (end 1.5 0) - (stroke - (width 0.05) - (type solid) - ) - (fill no) - (layer "B.CrtYd") - (uuid "0d0b8cec-d93e-49d6-b844-4c88242b151c") - ) - (fp_text user "${REFERENCE}" - (at 0 2 0) - (layer "B.Fab") - (uuid "fd29e582-4479-4d8a-9fcf-b7449a21fdf5") - (effects - (font - (size 1 1) - (thickness 0.15) - ) - (justify mirror) - ) - ) - (pad "1" smd circle - (at 0 0 180) - (size 2 2) - (layers "B.Cu" "B.Mask") - (net "Net-(U2-~{SAFEBOOT})") - (pinfunction "1_1") - (pintype "passive") - (uuid "b476b64f-1a55-4ec6-866b-8992448bb28c") - ) - (embedded_fonts no) - ) - (footprint "Symbol:OSHW-Logo_11.4x12mm_SilkScreen" - (layer "B.Cu") - (uuid "d9dc598a-5e48-4261-9695-75983f4019fb") - (at 100 102 180) - (descr "Open Source Hardware Logo") - (tags "Logo OSHW") - (property "Reference" "REF**" - (at 0 0 0) - (layer "F.SilkS") - (hide yes) - (uuid "c885c58e-daf1-4ceb-a5c9-adba20b0f3bd") - (effects - (font - (size 1 1) - (thickness 0.15) - ) - ) - ) - (property "Value" "OSHW-Logo_11.4x12mm_SilkScreen" - (at 0.75 0 0) - (layer "B.Fab") - (hide yes) - (uuid "a197685c-8b15-4355-8c56-5f7c8c2e37b2") - (effects - (font - (size 1 1) - (thickness 0.15) - ) - (justify mirror) - ) - ) - (property "Datasheet" "" - (at 0 0 0) - (unlocked yes) - (layer "B.Fab") - (hide yes) - (uuid "0c7e59f5-273f-4995-9f19-b138b6a3593b") - (effects - (font - (size 1.27 1.27) - (thickness 0.15) - ) - (justify mirror) - ) - ) - (property "Description" "" - (at 0 0 0) - (unlocked yes) - (layer "B.Fab") - (hide yes) - (uuid "848abb6d-14dc-4ebc-95fd-9cbbdf214a87") - (effects - (font - (size 1.27 1.27) - (thickness 0.15) - ) - (justify mirror) - ) - ) - (attr exclude_from_pos_files exclude_from_bom) - (duplicate_pad_numbers_are_jumpers no) - (fp_poly - (pts - (xy 3.563637 -2.887472) (xy 3.64929 -2.913641) (xy 3.704437 -2.946707) (xy 3.722401 -2.972855) (xy 3.717457 -3.003852) - (xy 3.685372 -3.052547) (xy 3.658243 -3.087035) (xy 3.602317 -3.149383) (xy 3.560299 -3.175615) - (xy 3.52448 -3.173903) (xy 3.418224 -3.146863) (xy 3.340189 -3.148091) (xy 3.27682 -3.178735) (xy 3.255546 -3.19667) - (xy 3.187451 -3.259779) (xy 3.187451 -4.083922) (xy 2.913529 -4.083922) (xy 2.913529 -2.888628) - (xy 3.05049 -2.888628) (xy 3.132719 -2.891879) (xy 3.175144 -2.903426) (xy 3.187445 -2.925952) (xy 3.187451 -2.92662) - (xy 3.19326 -2.950215) (xy 3.219531 -2.947138) (xy 3.255931 -2.930115) (xy 3.331111 -2.898439) (xy 3.392158 -2.879381) - (xy 3.470708 -2.874496) (xy 3.563637 -2.887472) - ) - (stroke - (width 0.01) - (type solid) - ) - (fill yes) - (layer "B.SilkS") - (uuid "a1986858-a37c-4e7d-88a3-96173a8c3e0d") - ) - (fp_poly - (pts - (xy 3.238446 -4.755883) (xy 3.334177 -4.774755) (xy 3.388677 -4.802699) (xy 3.446008 -4.849123) - (xy 3.364441 -4.952111) (xy 3.31415 -5.014479) (xy 3.280001 -5.044907) (xy 3.246063 -5.049555) (xy 3.196406 -5.034586) - (xy 3.173096 -5.026117) (xy 3.078063 -5.013622) (xy 2.991032 -5.040406) (xy 2.927138 -5.100915) - (xy 2.916759 -5.120208) (xy 2.905456 -5.171314) (xy 2.896732 -5.2655) (xy 2.890997 -5.396089) (xy 2.88866 -5.556405) - (xy 2.888627 -5.579211) (xy 2.888627 -5.976471) (xy 2.614705 -5.976471) (xy 2.614705 -4.756275) - (xy 2.751666 -4.756275) (xy 2.830638 -4.758337) (xy 2.871779 -4.767513) (xy 2.886992 -4.78829) (xy 2.888627 -4.807886) - (xy 2.888627 -4.859497) (xy 2.95424 -4.807886) (xy 3.029475 -4.772675) (xy 3.130544 -4.755265) (xy 3.238446 -4.755883) - ) - (stroke - (width 0.01) - (type solid) - ) - (fill yes) - (layer "B.SilkS") - (uuid "36991123-5171-4c18-bff2-92f25cf5680c") - ) - (fp_poly - (pts - (xy -1.967236 -4.758921) (xy -1.92997 -4.770091) (xy -1.917957 -4.794633) (xy -1.917451 -4.805712) - (xy -1.915296 -4.836572) (xy -1.900449 -4.841417) (xy -1.860343 -4.82026) (xy -1.83652 -4.805806) - (xy -1.761362 -4.77485) (xy -1.671594 -4.759544) (xy -1.577471 -4.758367) (xy -1.489246 -4.769799) - (xy -1.417174 -4.79232) (xy -1.371508 -4.824409) (xy -1.362502 -4.864545) (xy -1.367047 -4.875415) - (xy -1.400179 -4.920534) (xy -1.451555 -4.976026) (xy -1.460848 -4.984996) (xy -1.509818 -5.026245) - (xy -1.552069 -5.039572) (xy -1.611159 -5.030271) (xy -1.634831 -5.02409) (xy -1.708496 -5.009246) - (xy -1.76029 -5.015921) (xy -1.804031 -5.039465) (xy -1.844098 -5.071061) (xy -1.873608 -5.110798) - (xy -1.894116 -5.166252) (xy -1.907176 -5.245003) (xy -1.914344 -5.354629) (xy -1.917176 -5.502706) - (xy -1.917451 -5.592111) (xy -1.917451 -5.976471) (xy -2.166471 -5.976471) (xy -2.166471 -4.756275) - (xy -2.041961 -4.756275) (xy -1.967236 -4.758921) - ) - (stroke - (width 0.01) - (type solid) - ) - (fill yes) - (layer "B.SilkS") - (uuid "6978caae-bc79-4319-ad50-78319c805e31") - ) - (fp_poly - (pts - (xy 1.967254 -3.276245) (xy 1.969608 -3.458879) (xy 1.978207 -3.5976) (xy 1.99536 -3.698147) (xy 2.023374 -3.766254) - (xy 2.064557 -3.807659) (xy 2.121217 -3.828097) (xy 2.191372 -3.833318) (xy 2.264848 -3.827468) - (xy 2.320657 -3.806093) (xy 2.361109 -3.763458) (xy 2.388509 -3.693825) (xy 2.405167 -3.59146) (xy 2.413389 -3.450624) - (xy 2.41549 -3.276245) (xy 2.41549 -2.888628) (xy 2.689411 -2.888628) (xy 2.689411 -4.083922) (xy 2.552451 -4.083922) - (xy 2.469884 -4.080576) (xy 2.427368 -4.068826) (xy 2.41549 -4.04652) (xy 2.408336 -4.026654) (xy 2.379865 -4.030857) - (xy 2.322476 -4.058971) (xy 2.190945 -4.102342) (xy 2.051438 -4.09927) (xy 1.917765 -4.052174) (xy 1.854108 -4.014971) - (xy 1.805553 -3.974691) (xy 1.770081 -3.924291) (xy 1.745674 -3.856729) (xy 1.730313 -3.764965) - (xy 1.721982 -3.641955) (xy 1.718662 -3.480659) (xy 1.718235 -3.355928) (xy 1.718235 -2.888628) - (xy 1.967254 -2.888628) (xy 1.967254 -3.276245) - ) - (stroke - (width 0.01) - (type solid) - ) - (fill yes) - (layer "B.SilkS") - (uuid "b4bcd8e2-173a-4dc4-9748-e6b0fadb0b22") - ) - (fp_poly - (pts - (xy -1.49324 -2.909199) (xy -1.431264 -2.938802) (xy -1.371241 -2.981561) (xy -1.325514 -3.030775) - (xy -1.292207 -3.093544) (xy -1.269445 -3.176971) (xy -1.255353 -3.288159) (xy -1.248058 -3.434209) - (xy -1.245682 -3.622223) (xy -1.245645 -3.641912) (xy -1.245098 -4.083922) (xy -1.51902 -4.083922) - (xy -1.51902 -3.676435) (xy -1.519215 -3.525471) (xy -1.520564 -3.416056) (xy -1.524212 -3.339933) - (xy -1.531304 -3.288848) (xy -1.542987 -3.254545) (xy -1.560406 -3.228768) (xy -1.584671 -3.203298) - (xy -1.669565 -3.148571) (xy -1.762239 -3.138416) (xy -1.850527 -3.173017) (xy -1.88123 -3.19877) - (xy -1.903771 -3.222982) (xy -1.919954 -3.248912) (xy -1.930832 -3.284708) (xy -1.937458 -3.338519) - (xy -1.940885 -3.418493) (xy -1.942166 -3.532779) (xy -1.942353 -3.671907) (xy -1.942353 -4.083922) - (xy -2.216275 -4.083922) (xy -2.216275 -2.888628) (xy -2.079314 -2.888628) (xy -1.997084 -2.891879) - (xy -1.95466 -2.903426) (xy -1.942359 -2.925952) (xy -1.942353 -2.92662) (xy -1.936646 -2.948681) - (xy -1.911473 -2.946177) (xy -1.861422 -2.921937) (xy -1.747906 -2.886271) (xy -1.618055 -2.882305) - (xy -1.49324 -2.909199) - ) - (stroke - (width 0.01) - (type solid) - ) - (fill yes) - (layer "B.SilkS") - (uuid "ff01acc7-129a-408a-ad88-12d0db256931") - ) - (fp_poly - (pts - (xy 4.390976 -2.899056) (xy 4.535256 -2.960348) (xy 4.580699 -2.990185) (xy 4.638779 -3.036036) - (xy 4.675238 -3.072089) (xy 4.681568 -3.083832) (xy 4.663693 -3.109889) (xy 4.61795 -3.154105) (xy 4.581328 -3.184965) - (xy 4.481088 -3.26552) (xy 4.401935 -3.198918) (xy 4.340769 -3.155921) (xy 4.281129 -3.141079) (xy 4.212872 -3.144704) - (xy 4.104482 -3.171652) (xy 4.029872 -3.227587) (xy 3.98453 -3.318014) (xy 3.963947 -3.448435) (xy 3.963942 -3.448517) - (xy 3.965722 -3.59429) (xy 3.993387 -3.701245) (xy 4.048571 -3.774064) (xy 4.086192 -3.798723) (xy 4.186105 -3.829431) - (xy 4.292822 -3.829449) (xy 4.385669 -3.799655) (xy 4.407647 -3.785098) (xy 4.462765 -3.747914) - (xy 4.505859 -3.74182) (xy 4.552335 -3.769496) (xy 4.603716 -3.819205) (xy 4.685046 -3.903116) (xy 4.594749 -3.977546) - (xy 4.455236 -4.061549) (xy 4.297912 -4.102947) (xy 4.133503 -4.09995) (xy 4.025531 -4.0725) (xy 3.899331 -4.00462) - (xy 3.798401 -3.897831) (xy 3.752548 -3.822451) (xy 3.71541 -3.714297) (xy 3.696827 -3.577318) (xy 3.696684 -3.428864) - (xy 3.714865 -3.286281) (xy 3.751255 -3.166918) (xy 3.756987 -3.15468) (xy 3.841865 -3.034655) (xy 3.956782 -2.947267) - (xy 4.092659 -2.894329) (xy 4.240417 -2.877654) (xy 4.390976 -2.899056) - ) - (stroke - (width 0.01) - (type solid) - ) - (fill yes) - (layer "B.SilkS") - (uuid "e15ad337-8651-4aee-b9a8-6258073eb6db") - ) - (fp_poly - (pts - (xy 1.209547 -2.903364) (xy 1.335502 -2.971959) (xy 1.434047 -3.080245) (xy 1.480478 -3.168315) - (xy 1.500412 -3.246101) (xy 1.513328 -3.356993) (xy 1.518863 -3.484738) (xy 1.516654 -3.613084) - (xy 1.506337 -3.725779) (xy 1.494286 -3.785969) (xy 1.453634 -3.868311) (xy 1.38323 -3.95577) (xy 1.298382 -4.032251) - (xy 1.214397 -4.081655) (xy 1.212349 -4.082439) (xy 1.108134 -4.104027) (xy 0.984627 -4.104562) - (xy 0.867261 -4.084908) (xy 0.821942 -4.069155) (xy 0.70522 -4.002966) (xy 0.621624 -3.916246) (xy 0.566701 -3.801438) - (xy 0.535995 -3.650982) (xy 0.529047 -3.572173) (xy 0.529933 -3.473145) (xy 0.796862 -3.473145) - (xy 0.805854 -3.617645) (xy 0.831736 -3.72776) (xy 0.872868 -3.798116) (xy 0.902172 -3.818235) (xy 0.977251 -3.832265) - (xy 1.066494 -3.828111) (xy 1.14365 -3.807922) (xy 1.163883 -3.796815) (xy 1.217265 -3.732123) (xy 1.2525 -3.633119) - (xy 1.267498 -3.512632) (xy 1.260172 -3.383494) (xy 1.243799 -3.305775) (xy 1.19679 -3.215771) (xy 1.122582 -3.159509) - (xy 1.033209 -3.140057) (xy 0.940707 -3.160481) (xy 0.869653 -3.210437) (xy 0.832312 -3.251655) - (xy 0.810518 -3.292281) (xy 0.80013 -3.347264) (xy 0.797006 -3.431549) (xy 0.796862 -3.473145) (xy 0.529933 -3.473145) - (xy 0.53093 -3.361874) (xy 0.56518 -3.189423) (xy 0.631802 -3.054814) (xy 0.730799 -2.95804) (xy 0.862175 -2.899094) - (xy 0.890385 -2.892259) (xy 1.059926 -2.876213) (xy 1.209547 -2.903364) - ) - (stroke - (width 0.01) - (type solid) - ) - (fill yes) - (layer "B.SilkS") - (uuid "ea719668-0354-4c5b-a8c5-e5c7985a4762") - ) - (fp_poly - (pts - (xy 0.557528 -4.761332) (xy 0.656014 -4.768726) (xy 0.784776 -5.154706) (xy 0.913537 -5.540686) - (xy 0.953911 -5.403726) (xy 0.978207 -5.319083) (xy 1.010167 -5.204697) (xy 1.044679 -5.078963) - (xy 1.062928 -5.01152) (xy 1.131571 -4.756275) (xy 1.414773 -4.756275) (xy 1.330122 -5.023971) (xy 1.288435 -5.155638) - (xy 1.238074 -5.314458) (xy 1.185481 -5.480128) (xy 1.13853 -5.627843) (xy 1.031589 -5.96402) (xy 0.800661 -5.979044) - (xy 0.73805 -5.772316) (xy 0.699438 -5.643896) (xy 0.6573 -5.502322) (xy 0.620472 -5.377285) (xy 0.619018 -5.372309) - (xy 0.591511 -5.287586) (xy 0.567242 -5.229778) (xy 0.550243 -5.207918) (xy 0.54675 -5.210446) (xy 0.53449 -5.244336) - (xy 0.511195 -5.31693) (xy 0.4797 -5.419101) (xy 0.442842 -5.54172) (xy 0.422899 -5.609167) (xy 0.314895 -5.976471) - (xy 0.085679 -5.976471) (xy -0.097561 -5.3975) (xy -0.149037 -5.235091) (xy -0.19593 -5.087602) - (xy -0.236023 -4.96196) (xy -0.267103 -4.865095) (xy -0.286955 -4.803934) (xy -0.292989 -4.786065) - (xy -0.288212 -4.767768) (xy -0.250703 -4.759755) (xy -0.172645 -4.760557) (xy -0.160426 -4.761163) - (xy -0.015674 -4.768726) (xy 0.07913 -5.117353) (xy 0.113977 -5.244497) (xy 0.145117 -5.356265) - (xy 0.169809 -5.442953) (xy 0.185312 -5.494856) (xy 0.188176 -5.503318) (xy 0.200046 -5.493587) - (xy 0.223983 -5.443172) (xy 0.257239 -5.358935) (xy 0.297064 -5.247741) (xy 0.33073 -5.147297) (xy 0.459041 -4.753939) - (xy 0.557528 -4.761332) - ) - (stroke - (width 0.01) - (type solid) - ) - (fill yes) - (layer "B.SilkS") - (uuid "6034f252-b1ba-45ba-bf09-a0607e4fc749") - ) - (fp_poly - (pts - (xy -0.398432 -5.976471) (xy -0.535393 -5.976471) (xy -0.614889 -5.97414) (xy -0.656292 -5.964488) - (xy -0.671199 -5.943525) (xy -0.672353 -5.929351) (xy -0.674867 -5.900927) (xy -0.69072 -5.895475) - (xy -0.732379 -5.912998) (xy -0.764776 -5.929351) (xy -0.889151 -5.968103) (xy -1.024354 -5.970346) - (xy -1.134274 -5.941444) (xy -1.236634 -5.871619) (xy -1.31466 -5.768555) (xy -1.357386 -5.646989) - (xy -1.358474 -5.640192) (xy -1.364822 -5.566032) (xy -1.367979 -5.45957) (xy -1.367725 -5.379052) - (xy -1.095711 -5.379052) (xy -1.08941 -5.48607) (xy -1.075075 -5.574278) (xy -1.055669 -5.62409) - (xy -0.982254 -5.692162) (xy -0.895086 -5.716564) (xy -0.805196 -5.696831) (xy -0.728383 -5.637968) - (xy -0.699292 -5.598379) (xy -0.682283 -5.551138) (xy -0.674316 -5.482181) (xy -0.672353 -5.378607) - (xy -0.675866 -5.276039) (xy -0.685143 -5.185921) (xy -0.698294 -5.125613) (xy -0.700486 -5.120208) - (xy -0.753522 -5.05594) (xy -0.830933 -5.020656) (xy -0.917546 -5.014959) (xy -0.998193 -5.039453) - (xy -1.057703 -5.094742) (xy -1.063876 -5.105743) (xy -1.083199 -5.172827) (xy -1.093726 -5.269284) - (xy -1.095711 -5.379052) (xy -1.367725 -5.379052) (xy -1.367596 -5.338225) (xy -1.365806 -5.272918) - (xy -1.353627 -5.111355) (xy -1.328315 -4.990053) (xy -1.286207 -4.900379) (xy -1.223641 -4.833699) - (xy -1.1629 -4.794557) (xy -1.078036 -4.76704) (xy -0.972485 -4.757603) (xy -0.864402 -4.76529) - (xy -0.771942 -4.789146) (xy -0.72309 -4.817685) (xy -0.672353 -4.863601) (xy -0.672353 -4.283137) - (xy -0.398432 -4.283137) (xy -0.398432 -5.976471) - ) - (stroke - (width 0.01) - (type solid) - ) - (fill yes) - (layer "B.SilkS") - (uuid "17e6f69f-fed1-461b-9108-ad00d89544c3") - ) - (fp_poly - (pts - (xy -5.026753 -2.901568) (xy -4.896478 -2.959163) (xy -4.797581 -3.055334) (xy -4.729918 -3.190229) - (xy -4.693345 -3.363996) (xy -4.690724 -3.391126) (xy -4.68867 -3.582408) (xy -4.715301 -3.750073) - (xy -4.768999 -3.885967) (xy -4.797753 -3.929681) (xy -4.897909 -4.022198) (xy -5.025463 -4.082119) - (xy -5.168163 -4.106985) (xy -5.31376 -4.094339) (xy -5.424438 -4.055391) (xy -5.519616 -3.989755) - (xy -5.597406 -3.903699) (xy -5.598751 -3.901685) (xy -5.630343 -3.84857) (xy -5.650873 -3.79516) - (xy -5.663305 -3.727754) (xy -5.670603 -3.632653) (xy -5.673818 -3.554666) (xy -5.675156 -3.483944) - (xy -5.426186 -3.483944) (xy -5.423753 -3.554348) (xy -5.41492 -3.648068) (xy -5.399336 -3.708214) - (xy -5.371234 -3.751006) (xy -5.344914 -3.776002) (xy -5.251608 -3.828338) (xy -5.15398 -3.835333) - (xy -5.063058 -3.797676) (xy -5.017598 -3.755479) (xy -4.984838 -3.712956) (xy -4.965677 -3.672267) - (xy -4.957267 -3.619314) (xy -4.956763 -3.539997) (xy -4.959355 -3.46695) (xy -4.964929 -3.362601) - (xy -4.973766 -3.29492) (xy -4.989693 -3.250774) (xy -5.016538 -3.217031) (xy -5.037811 -3.197746) - (xy -5.126794 -3.147086) (xy -5.222789 -3.14456) (xy -5.303281 -3.174567) (xy -5.371947 -3.237231) - (xy -5.412856 -3.340168) (xy -5.426186 -3.483944) (xy -5.675156 -3.483944) (xy -5.676754 -3.399582) - (xy -5.67174 -3.2836) (xy -5.656717 -3.196367) (xy -5.629624 -3.12753) (xy -5.5884 -3.066737) (xy -5.573115 -3.048686) - (xy -5.477546 -2.958746) (xy -5.375039 -2.906211) (xy -5.249679 -2.884201) (xy -5.18855 -2.882402) - (xy -5.026753 -2.901568) - ) - (stroke - (width 0.01) - (type solid) - ) - (fill yes) - (layer "B.SilkS") - (uuid "84e9e266-71bd-442b-bd21-8f28a8fa6a24") - ) - (fp_poly - (pts - (xy 5.303287 -2.884355) (xy 5.367051 -2.899845) (xy 5.4893 -2.956569) (xy 5.593834 -3.043202) (xy 5.66618 -3.147074) - (xy 5.676119 -3.170396) (xy 5.689754 -3.231484) (xy 5.699298 -3.321853) (xy 5.702549 -3.41319) (xy 5.702549 -3.585882) - (xy 5.34147 -3.585882) (xy 5.192546 -3.586445) (xy 5.087632 -3.589864) (xy 5.020937 -3.598731) (xy 4.986666 -3.615641) - (xy 4.979028 -3.643189) (xy 4.992229 -3.683968) (xy 5.015877 -3.731683) (xy 5.081843 -3.811314) - (xy 5.173512 -3.850987) (xy 5.285555 -3.849695) (xy 5.412472 -3.806514) (xy 5.522158 -3.753224) - (xy 5.613173 -3.825191) (xy 5.704188 -3.897157) (xy 5.618563 -3.976269) (xy 5.50425 -4.051017) (xy 5.363666 -4.096084) - (xy 5.212449 -4.108696) (xy 5.066236 -4.086079) (xy 5.042647 -4.078405) (xy 4.914141 -4.011296) - (xy 4.818551 -3.911247) (xy 4.753861 -3.775271) (xy 4.718057 -3.60038) (xy 4.71764 -3.596632) (xy 4.714434 -3.406032) - (xy 4.727393 -3.338035) (xy 4.980392 -3.338035) (xy 5.003627 -3.348491) (xy 5.06671 -3.3565) (xy 5.159706 -3.361073) - (xy 5.218638 -3.361765) (xy 5.328537 -3.361332) (xy 5.397252 -3.358578) (xy 5.433405 -3.351321) - (xy 5.445615 -3.337376) (xy 5.442504 -3.314562) (xy 5.439894 -3.305735) (xy 5.395344 -3.2228) (xy 5.325279 -3.15596) - (xy 5.263446 -3.126589) (xy 5.181301 -3.128362) (xy 5.098062 -3.16499) (xy 5.028238 -3.225634) (xy 4.986337 -3.299456) - (xy 4.980392 -3.338035) (xy 4.727393 -3.338035) (xy 4.746385 -3.238395) (xy 4.809773 -3.097711) - (xy 4.900878 -2.987974) (xy 5.015978 -2.913174) (xy 5.151355 -2.877304) (xy 5.303287 -2.884355) - ) - (stroke - (width 0.01) - (type solid) - ) - (fill yes) - (layer "B.SilkS") - (uuid "56b09e0b-ef7e-4876-9886-76f8618f2d98") - ) - (fp_poly - (pts - (xy 0.027759 -2.884345) (xy 0.122059 -2.902229) (xy 0.21989 -2.939633) (xy 0.230343 -2.944402) (xy 0.304531 -2.983412) - (xy 0.35591 -3.019664) (xy 0.372517 -3.042887) (xy 0.356702 -3.080761) (xy 0.318288 -3.136644) (xy 0.301237 -3.157505) - (xy 0.230969 -3.239618) (xy 0.140379 -3.186168) (xy 0.054164 -3.150561) (xy -0.045451 -3.131529) - (xy -0.140981 -3.130326) (xy -0.214939 -3.14821) (xy -0.232688 -3.159373) (xy -0.266488 -3.210553) - (xy -0.270596 -3.269509) (xy -0.245304 -3.315567) (xy -0.230344 -3.324499) (xy -0.185514 -3.335592) - (xy -0.106714 -3.34863) (xy -0.009574 -3.361088) (xy 0.008346 -3.363042) (xy 0.164365 -3.39003) - (xy 0.277523 -3.435873) (xy 0.352569 -3.504803) (xy 0.394253 -3.601054) (xy 0.407238 -3.718617) - (xy 0.389299 -3.852254) (xy 0.33105 -3.957195) (xy 0.232255 -4.03363) (xy 0.092682 -4.081748) (xy -0.062255 -4.100732) - (xy -0.188602 -4.100504) (xy -0.291087 -4.083262) (xy -0.361079 -4.059457) (xy -0.449517 -4.017978) - (xy -0.531246 -3.969842) (xy -0.560295 -3.948655) (xy -0.635 -3.887676) (xy -0.544902 -3.796508) - (xy -0.454804 -3.705339) (xy -0.352368 -3.773128) (xy -0.249626 -3.824042) (xy -0.139913 -3.850673) - (xy -0.034449 -3.853483) (xy 0.055546 -3.832935) (xy 0.118854 -3.789493) (xy 0.139296 -3.752838) - (xy 0.136229 -3.694053) (xy 0.085434 -3.649099) (xy -0.012952 -3.618057) (xy -0.120744 -3.60371) - (xy -0.286635 -3.576337) (xy -0.409876 -3.524693) (xy -0.492114 -3.447266) (xy -0.534999 -3.342544) - (xy -0.54094 -3.218387) (xy -0.511594 -3.088702) (xy -0.444691 -2.990677) (xy -0.339629 -2.923866) - (xy -0.19581 -2.88782) (xy -0.089262 -2.880754) (xy 0.027759 -2.884345) - ) - (stroke - (width 0.01) - (type solid) - ) - (fill yes) - (layer "B.SilkS") - (uuid "18c873b5-4311-47b8-b872-53940ab2d2b4") - ) - (fp_poly - (pts - (xy 4.025307 -4.762784) (xy 4.144337 -4.793731) (xy 4.244021 -4.8576) (xy 4.292288 -4.905313) (xy 4.371408 -5.018106) - (xy 4.416752 -5.14895) (xy 4.43233 -5.309792) (xy 4.43241 -5.322794) (xy 4.432549 -5.45353) (xy 3.680091 -5.45353) - (xy 3.69613 -5.52201) (xy 3.725091 -5.584031) (xy 3.775778 -5.648654) (xy 3.786379 -5.658971) (xy 3.877494 -5.714805) - (xy 3.9814 -5.724275) (xy 4.101 -5.68754) (xy 4.121274 -5.677647) (xy 4.183456 -5.647574) (xy 4.225106 -5.63044) - (xy 4.232373 -5.628855) (xy 4.25774 -5.644242) (xy 4.30612 -5.681887) (xy 4.330679 -5.702459) (xy 4.38157 -5.749714) - (xy 4.398281 -5.780917) (xy 4.386683 -5.80962) (xy 4.380483 -5.817468) (xy 4.338493 -5.851819) (xy 4.269206 -5.893565) - (xy 4.220882 -5.917935) (xy 4.083711 -5.960873) (xy 3.931847 -5.974786) (xy 3.788024 -5.9583) (xy 3.747745 -5.946496) - (xy 3.623078 -5.879689) (xy 3.530671 -5.776892) (xy 3.46999 -5.637105) (xy 3.440498 -5.45933) (xy 3.43726 -5.366373) - (xy 3.446714 -5.231033) (xy 3.68549 -5.231033) (xy 3.708584 -5.241038) (xy 3.770662 -5.248888) (xy 3.860914 -5.253521) - (xy 3.922058 -5.254314) (xy 4.03204 -5.253549) (xy 4.101457 -5.24997) (xy 4.139538 -5.241649) (xy 4.155515 -5.226657) - (xy 4.158627 -5.204903) (xy 4.137278 -5.137892) (xy 4.083529 -5.071664) (xy 4.012822 -5.020832) - (xy 3.942089 -5.000038) (xy 3.846016 -5.018484) (xy 3.762849 -5.071811) (xy 3.705186 -5.148677) - (xy 3.68549 -5.231033) (xy 3.446714 -5.231033) (xy 3.451028 -5.169291) (xy 3.49352 -5.012271) (xy 3.565635 -4.894069) - (xy 3.668273 -4.81344) (xy 3.802332 -4.769139) (xy 3.874957 -4.760607) (xy 4.025307 -4.762784) - ) - (stroke - (width 0.01) - (type solid) - ) - (fill yes) - (layer "B.SilkS") - (uuid "3bfedfdb-74ac-4d78-abc4-9f2788b143d0") - ) - (fp_poly - (pts - (xy -2.686796 -2.916354) (xy -2.661981 -2.928037) (xy -2.576094 -2.990951) (xy -2.494879 -3.082769) - (xy -2.434236 -3.183868) (xy -2.416988 -3.230349) (xy -2.401251 -3.313376) (xy -2.391867 -3.413713) - (xy -2.390728 -3.455147) (xy -2.390589 -3.585882) (xy -3.143047 -3.585882) (xy -3.127007 -3.654363) - (xy -3.087637 -3.735355) (xy -3.018806 -3.805351) (xy -2.936919 -3.850441) (xy -2.884737 -3.859804) - (xy -2.813971 -3.848441) (xy -2.72954 -3.819943) (xy -2.700858 -3.806831) (xy -2.594791 -3.753858) - (xy -2.504272 -3.822901) (xy -2.452039 -3.869597) (xy -2.424247 -3.90814) (xy -2.42284 -3.919452) - (xy -2.447668 -3.946868) (xy -2.502083 -3.988532) (xy -2.551472 -4.021037) (xy -2.684748 -4.079468) - (xy -2.834161 -4.105915) (xy -2.982249 -4.099039) (xy -3.100295 -4.063096) (xy -3.221982 -3.986101) - (xy -3.30846 -3.884728) (xy -3.362559 -3.75357) (xy -3.387109 -3.587224) (xy -3.389286 -3.511108) - (xy -3.380573 -3.336685) (xy -3.379503 -3.331611) (xy -3.130173 -3.331611) (xy -3.123306 -3.347968) - (xy -3.095083 -3.356988) (xy -3.036873 -3.360854) (xy -2.940042 -3.361749) (xy -2.902757 -3.361765) - (xy -2.789317 -3.360413) (xy -2.717378 -3.355505) (xy -2.678687 -3.34576) (xy -2.664995 -3.329899) - (xy -2.66451 -3.324805) (xy -2.680137 -3.284326) (xy -2.719247 -3.227621) (xy -2.736061 -3.207766) - (xy -2.798481 -3.151611) (xy -2.863547 -3.129532) (xy -2.898603 -3.127686) (xy -2.993442 -3.150766) - (xy -3.072973 -3.212759) (xy -3.123423 -3.302802) (xy -3.124317 -3.305735) (xy -3.130173 -3.331611) - (xy -3.379503 -3.331611) (xy -3.351601 -3.199343) (xy -3.29941 -3.089461) (xy -3.235579 -3.011461) - (xy -3.117567 -2.926882) (xy -2.978842 -2.881686) (xy -2.83129 -2.8776) (xy -2.686796 -2.916354) - ) - (stroke - (width 0.01) - (type solid) - ) - (fill yes) - (layer "B.SilkS") - (uuid "3f26186b-8726-4382-b3ea-fcd2786e07b7") - ) - (fp_poly - (pts - (xy 2.056459 -4.763669) (xy 2.16142 -4.789163) (xy 2.191761 -4.802669) (xy 2.250573 -4.838046) (xy 2.295709 -4.87789) - (xy 2.329106 -4.92912) (xy 2.352701 -4.998654) (xy 2.368433 -5.093409) (xy 2.378239 -5.220305) (xy 2.384057 -5.386258) - (xy 2.386266 -5.497108) (xy 2.394396 -5.976471) (xy 2.255531 -5.976471) (xy 2.171287 -5.972938) - (xy 2.127884 -5.960866) (xy 2.116666 -5.940594) (xy 2.110744 -5.918674) (xy 2.084266 -5.922865) - (xy 2.048186 -5.940441) (xy 1.957862 -5.967382) (xy 1.841777 -5.974642) (xy 1.71968 -5.962767) (xy 1.611321 -5.932305) - (xy 1.601602 -5.928077) (xy 1.502568 -5.858505) (xy 1.437281 -5.761789) (xy 1.40724 -5.648738) (xy 1.409535 -5.608122) - (xy 1.654633 -5.608122) (xy 1.676229 -5.662782) (xy 1.740259 -5.701952) (xy 1.843565 -5.722974) - (xy 1.898774 -5.725766) (xy 1.990782 -5.71862) (xy 2.051941 -5.690848) (xy 2.066862 -5.677647) (xy 2.107287 -5.605829) - (xy 2.116666 -5.540686) (xy 2.116666 -5.45353) (xy 1.995269 -5.45353) (xy 1.854153 -5.460722) (xy 1.755173 -5.483345) - (xy 1.692633 -5.522964) (xy 1.678631 -5.540628) (xy 1.654633 -5.608122) (xy 1.409535 -5.608122) - (xy 1.413941 -5.530157) (xy 1.45888 -5.416855) (xy 1.520196 -5.340285) (xy 1.557332 -5.307181) (xy 1.593687 -5.285425) - (xy 1.64099 -5.272161) (xy 1.710973 -5.264528) (xy 1.815364 -5.25967) (xy 1.85677 -5.258273) (xy 2.116666 -5.24978) - (xy 2.116285 -5.171116) (xy 2.106219 -5.088428) (xy 2.069829 -5.038431) (xy 1.996311 -5.006489) - (xy 1.994339 -5.00592) (xy 1.890105 -4.993361) (xy 1.788108 -5.009766) (xy 1.712305 -5.049657) (xy 1.68189 -5.069354) - (xy 1.649132 -5.066629) (xy 1.598721 -5.038091) (xy 1.569119 -5.01795) (xy 1.511218 -4.974919) (xy 1.475352 -4.942662) - (xy 1.469597 -4.933427) (xy 1.493295 -4.885636) (xy 1.563313 -4.828562) (xy 1.593725 -4.809305) - (xy 1.681155 -4.77614) (xy 1.798983 -4.75735) (xy 1.929866 -4.753129) (xy 2.056459 -4.763669) - ) - (stroke - (width 0.01) - (type solid) - ) - (fill yes) - (layer "B.SilkS") - (uuid "bd98c3e6-2ce7-41ca-9034-371f233f6976") - ) - (fp_poly - (pts - (xy -2.74128 -4.765922) (xy -2.62413 -4.79718) (xy -2.534949 -4.853837) (xy -2.472016 -4.928045) - (xy -2.452452 -4.959716) (xy -2.438008 -4.992891) (xy -2.427911 -5.035329) (xy -2.421385 -5.094788) - (xy -2.417658 -5.179029) (xy -2.415954 -5.29581) (xy -2.4155 -5.45289) (xy -2.415491 -5.494565) - (xy -2.415491 -5.976471) (xy -2.53502 -5.976471) (xy -2.611261 -5.971131) (xy -2.667634 -5.957604) - (xy -2.681758 -5.949262) (xy -2.72037 -5.934864) (xy -2.759808 -5.949262) (xy -2.824738 -5.967237) - (xy -2.919055 -5.974472) (xy -3.023593 -5.971333) (xy -3.119189 -5.958186) (xy -3.175 -5.941318) - (xy -3.283002 -5.871986) (xy -3.350497 -5.775772) (xy -3.380841 -5.647844) (xy -3.381123 -5.644559) - (xy -3.37846 -5.587808) (xy -3.137647 -5.587808) (xy -3.116595 -5.652358) (xy -3.082303 -5.688686) - (xy -3.013468 -5.716162) (xy -2.92261 -5.727129) (xy -2.829958 -5.721731) (xy -2.755744 -5.70011) - (xy -2.734951 -5.686239) (xy -2.698619 -5.622143) (xy -2.689412 -5.549278) (xy -2.689412 -5.45353) - (xy -2.827173 -5.45353) (xy -2.958047 -5.463605) (xy -3.057259 -5.492148) (xy -3.118977 -5.536639) - (xy -3.137647 -5.587808) (xy -3.37846 -5.587808) (xy -3.374564 -5.50479) (xy -3.328466 -5.394282) - (xy -3.2418 -5.310712) (xy -3.229821 -5.30311) (xy -3.178345 -5.278357) (xy -3.114632 -5.263368) - (xy -3.025565 -5.256082) (xy -2.919755 -5.254407) (xy -2.689412 -5.254314) (xy -2.689412 -5.157755) - (xy -2.699183 -5.082836) (xy -2.724116 -5.032644) (xy -2.727035 -5.029972) (xy -2.782519 -5.008015) - (xy -2.866273 -4.999505) (xy -2.958833 -5.003687) (xy -3.04073 -5.019809) (xy -3.089327 -5.04399) - (xy -3.115659 -5.063359) (xy -3.143465 -5.067057) (xy -3.181839 -5.051188) (xy -3.239875 -5.011855) - (xy -3.326669 -4.945164) (xy -3.334635 -4.938916) (xy -3.330553 -4.9158) (xy -3.296499 -4.877352) - (xy -3.24474 -4.834627) (xy -3.187545 -4.798679) (xy -3.169575 -4.790191) (xy -3.104028 -4.773252) - (xy -3.00798 -4.76117) (xy -2.900671 -4.756323) (xy -2.895653 -4.756313) (xy -2.74128 -4.765922) - ) - (stroke - (width 0.01) - (type solid) - ) - (fill yes) - (layer "B.SilkS") - (uuid "dbd5277c-4ec2-4edb-bea5-3c6da0393aab") - ) - (fp_poly - (pts - (xy -3.780091 -2.90956) (xy -3.727588 -2.935499) (xy -3.662842 -2.9807) (xy -3.615653 -3.029991) - (xy -3.583335 -3.091885) (xy -3.563203 -3.174896) (xy -3.55257 -3.287538) (xy -3.548753 -3.438324) - (xy -3.54853 -3.503149) (xy -3.549182 -3.645221) (xy -3.551888 -3.746757) (xy -3.557776 -3.817015) - (xy -3.567973 -3.865256) (xy -3.583606 -3.900738) (xy -3.599872 -3.924943) (xy -3.703705 -4.027929) - (xy -3.825979 -4.089874) (xy -3.957886 -4.108506) (xy -4.090616 -4.081549) (xy -4.132667 -4.062486) - (xy -4.233334 -4.010015) (xy -4.233334 -4.832259) (xy -4.159865 -4.794267) (xy -4.063059 -4.764872) - (xy -3.944072 -4.757342) (xy -3.825255 -4.771245) (xy -3.735527 -4.802476) (xy -3.661101 -4.861954) - (xy -3.59751 -4.947066) (xy -3.592729 -4.955805) (xy -3.572563 -4.996966) (xy -3.557835 -5.038454) - (xy -3.547697 -5.088713) (xy -3.541301 -5.156184) (xy -3.537799 -5.249309) (xy -3.536342 -5.376531) - (xy -3.536079 -5.519701) (xy -3.536079 -5.976471) (xy -3.81 -5.976471) (xy -3.81 -5.134231) (xy -3.886617 -5.069763) - (xy -3.966207 -5.018194) (xy -4.041578 -5.008818) (xy -4.117367 -5.032947) (xy -4.157759 -5.056574) - (xy -4.187821 -5.090227) (xy -4.209203 -5.141087) (xy -4.22355 -5.216334) (xy -4.23251 -5.323146) - (xy -4.23773 -5.468704) (xy -4.239569 -5.565588) (xy -4.245785 -5.96402) (xy -4.37652 -5.971547) - (xy -4.507255 -5.979073) (xy -4.507255 -3.506582) (xy -4.233334 -3.506582) (xy -4.22635 -3.644423) - (xy -4.202818 -3.740107) (xy -4.158865 -3.799641) (xy -4.090618 -3.829029) (xy -4.021667 -3.834902) - (xy -3.943614 -3.828154) (xy -3.891811 -3.801594) (xy -3.859417 -3.766499) (xy -3.833916 -3.728752) - (xy -3.818735 -3.6867) (xy -3.811981 -3.627779) (xy -3.811759 -3.539428) (xy -3.814032 -3.465448) - (xy -3.819251 -3.354) (xy -3.827021 -3.280833) (xy -3.840105 -3.234422) (xy -3.861268 -3.203244) - (xy -3.88124 -3.185223) (xy -3.964686 -3.145925) (xy -4.063449 -3.139579) (xy -4.120159 -3.153116) - (xy -4.176308 -3.201233) (xy -4.213501 -3.294833) (xy -4.231528 -3.433254) (xy -4.233334 -3.506582) - (xy -4.507255 -3.506582) (xy -4.507255 -2.888628) (xy -4.370295 -2.888628) (xy -4.288065 -2.891879) - (xy -4.24564 -2.903426) (xy -4.233339 -2.925952) (xy -4.233334 -2.92662) (xy -4.227626 -2.948681) - (xy -4.202453 -2.946176) (xy -4.152402 -2.921935) (xy -4.035781 -2.884851) (xy -3.904571 -2.880953) - (xy -3.780091 -2.90956) - ) - (stroke - (width 0.01) - (type solid) - ) - (fill yes) - (layer "B.SilkS") - (uuid "1805c36f-c306-482d-8caa-854929aef468") - ) - (fp_poly - (pts - (xy 0.746535 5.366828) (xy 0.859117 4.769637) (xy 1.274531 4.59839) (xy 1.689944 4.427143) (xy 2.188302 4.766022) - (xy 2.327868 4.860378) (xy 2.454028 4.944625) (xy 2.560895 5.014917) (xy 2.642582 5.067408) (xy 2.693201 5.098251) - (xy 2.706986 5.104902) (xy 2.73182 5.087797) (xy 2.784888 5.040511) (xy 2.86024 4.969083) (xy 2.951929 4.879555) - (xy 3.054007 4.777966) (xy 3.160526 4.670357) (xy 3.265536 4.562768) (xy 3.363091 4.46124) (xy 3.447242 4.371814) - (xy 3.51204 4.300529) (xy 3.551538 4.253427) (xy 3.56098 4.237663) (xy 3.547391 4.208602) (xy 3.509293 4.144934) - (xy 3.450694 4.052888) (xy 3.375597 3.938691) (xy 3.288009 3.808571) (xy 3.237254 3.734354) (xy 3.144745 3.598833) - (xy 3.06254 3.476539) (xy 2.99463 3.37356) (xy 2.945 3.295982) (xy 2.91764 3.249894) (xy 2.913529 3.240208) - (xy 2.922849 3.212681) (xy 2.948254 3.148527) (xy 2.985911 3.056765) (xy 3.031986 2.946416) (xy 3.082646 2.8265) - (xy 3.134059 2.706036) (xy 3.182389 2.594046) (xy 3.223806 2.499548) (xy 3.254474 2.431563) (xy 3.270562 2.399112) - (xy 3.271511 2.397835) (xy 3.296772 2.391638) (xy 3.364046 2.377815) (xy 3.46636 2.357723) (xy 3.596741 2.332721) - (xy 3.748216 2.304169) (xy 3.836594 2.287704) (xy 3.998452 2.256886) (xy 4.144649 2.227561) (xy 4.267787 2.201334) - (xy 4.360469 2.179809) (xy 4.415301 2.16459) (xy 4.426323 2.159762) (xy 4.437119 2.127081) (xy 4.445829 2.05327) - (xy 4.45246 1.946963) (xy 4.457018 1.816788) (xy 4.459509 1.671379) (xy 4.459938 1.519365) (xy 4.458311 1.369378) - (xy 4.454635 1.230049) (xy 4.448915 1.11001) (xy 4.441158 1.01789) (xy 4.431368 0.962323) (xy 4.425496 0.950755) - (xy 4.390399 0.93689) (xy 4.316028 0.917067) (xy 4.212223 0.893616) (xy 4.088819 0.868864) (xy 4.045741 0.860857) - (xy 3.838047 0.822814) (xy 3.673984 0.792176) (xy 3.54813 0.767726) (xy 3.455065 0.748246) (xy 3.389367 0.732519) - (xy 3.345617 0.719327) (xy 3.318392 0.707451) (xy 3.302272 0.695675) (xy 3.300017 0.693347) (xy 3.277503 0.655855) - (xy 3.243158 0.58289) (xy 3.200411 0.483388) (xy 3.152692 0.366282) (xy 3.10343 0.240507) (xy 3.056055 0.114998) - (xy 3.013995 -0.00131) (xy 2.98068 -0.099484) (xy 2.959541 -0.170588) (xy 2.954005 -0.205687) (xy 2.954466 -0.206917) - (xy 2.973223 -0.235606) (xy 3.015776 -0.29873) (xy 3.077653 -0.389718) (xy 3.154382 -0.502) (xy 3.241491 -0.629005) - (xy 3.266299 -0.665098) (xy 3.354753 -0.795948) (xy 3.432588 -0.915336) (xy 3.495566 -1.016407) - (xy 3.539445 -1.092304) (xy 3.559985 -1.136172) (xy 3.56098 -1.141562) (xy 3.543722 -1.169889) (xy 3.496036 -1.226006) - (xy 3.42405 -1.303882) (xy 3.333897 -1.397485) (xy 3.231705 -1.500786) (xy 3.123606 -1.607751) (xy 3.015728 -1.712351) - (xy 2.914204 -1.808554) (xy 2.825162 -1.890329) (xy 2.754733 -1.951645) (xy 2.709047 -1.986471) - (xy 2.696409 -1.992157) (xy 2.666991 -1.978765) (xy 2.606761 -1.942644) (xy 2.52553 -1.889881) (xy 2.46303 -1.847412) - (xy 2.349785 -1.769485) (xy 2.215674 -1.677729) (xy 2.081155 -1.58612) (xy 2.008833 -1.537091) (xy 1.764038 -1.371515) - (xy 1.558551 -1.48262) (xy 1.464936 -1.531293) (xy 1.38533 -1.569126) (xy 1.331467 -1.590703) (xy 1.317757 -1.593706) - (xy 1.30127 -1.571538) (xy 1.268745 -1.508894) (xy 1.222609 -1.411554) (xy 1.16529 -1.285294) (xy 1.099216 -1.135895) - (xy 1.026815 -0.969133) (xy 0.950516 -0.790787) (xy 0.872746 -0.606636) (xy 0.795934 -0.422457) - (xy 0.722506 -0.24403) (xy 0.654892 -0.077132) (xy 0.59552 0.072458) (xy 0.546816 0.198962) (xy 0.51121 0.296601) - (xy 0.49113 0.359598) (xy 0.4879 0.381234) (xy 0.513496 0.408831) (xy 0.569539 0.45363) (xy 0.644311 0.506321) - (xy 0.650587 0.51049) (xy 0.843845 0.665186) (xy 0.999674 0.845664) (xy 1.116724 1.046153) (xy 1.193645 1.260881) - (xy 1.229086 1.484078) (xy 1.221697 1.709974) (xy 1.170127 1.932796) (xy 1.073026 2.146776) (xy 1.044458 2.193591) - (xy 0.895868 2.382637) (xy 0.720327 2.534443) (xy 0.52391 2.648221) (xy 0.312693 2.72318) (xy 0.092753 2.758533) - (xy -0.129837 2.753488) (xy -0.348999 2.707256) (xy -0.558658 2.619049) (xy -0.752739 2.488076) - (xy -0.812774 2.434918) (xy -0.965565 2.268516) (xy -1.076903 2.093343) (xy -1.153277 1.896989) - (xy -1.195813 1.702538) (xy -1.206314 1.483913) (xy -1.171299 1.264203) (xy -1.094327 1.050835) - (xy -0.978953 0.851233) (xy -0.828734 0.672826) (xy -0.647227 0.523038) (xy -0.623373 0.507249) - (xy -0.547799 0.455543) (xy -0.490349 0.410743) (xy -0.462883 0.382138) (xy -0.462483 0.381234) - (xy -0.46838 0.350291) (xy -0.491755 0.280064) (xy -0.530179 0.17633) (xy -0.581223 0.044865) (xy -0.642458 -0.108552) - (xy -0.711456 -0.278146) (xy -0.785786 -0.458138) (xy -0.863022 -0.642753) (xy -0.940732 -0.826213) - (xy -1.016489 -1.002741) (xy -1.087863 -1.166559) (xy -1.152426 -1.311892) (xy -1.207748 -1.432962) - (xy -1.2514 -1.523992) (xy -1.280954 -1.579205) (xy -1.292856 -1.593706) (xy -1.329223 -1.582414) - (xy -1.39727 -1.55213) (xy -1.485263 -1.508265) (xy -1.533649 -1.48262) (xy -1.739137 -1.371515) - (xy -1.983932 -1.537091) (xy -2.108894 -1.621915) (xy -2.245705 -1.715261) (xy -2.373911 -1.803153) - (xy -2.438129 -1.847412) (xy -2.528449 -1.908063) (xy -2.604929 -1.956126) (xy -2.657593 -1.985515) - (xy -2.674698 -1.991727) (xy -2.699595 -1.974968) (xy -2.754695 -1.928181) (xy -2.834657 -1.856225) - (xy -2.934139 -1.763957) (xy -3.0478 -1.656235) (xy -3.119685 -1.587071) (xy -3.245449 -1.463502) - (xy -3.354137 -1.352979) (xy -3.441355 -1.26023) (xy -3.502711 -1.189982) (xy -3.533809 -1.146965) - (xy -3.536792 -1.138235) (xy -3.522947 -1.105029) (xy -3.484688 -1.037887) (xy -3.426258 -0.943608) - (xy -3.351903 -0.82899) (xy -3.265865 -0.700828) (xy -3.241397 -0.665098) (xy -3.152245 -0.535234) - (xy -3.072262 -0.418314) (xy -3.00592 -0.320907) (xy -2.957689 -0.249584) (xy -2.932043 -0.210915) - (xy -2.929565 -0.206917) (xy -2.933271 -0.1761) (xy -2.952939 -0.108344) (xy -2.98514 -0.012584) - (xy -3.026445 0.102246) (xy -3.073425 0.227211) (xy -3.122651 0.353376) (xy -3.170692 0.471807) - (xy -3.214119 0.57357) (xy -3.249504 0.649729) (xy -3.273416 0.691351) (xy -3.275116 0.693347) (xy -3.289738 0.705242) - (xy -3.314435 0.717005) (xy -3.354628 0.729854) (xy -3.415737 0.745006) (xy -3.503183 0.763679) - (xy -3.622388 0.78709) (xy -3.778773 0.816458) (xy -3.977757 0.853) (xy -4.02084 0.860857) (xy -4.148529 0.885528) - (xy -4.259847 0.909662) (xy -4.344955 0.930931) (xy -4.394017 0.947007) (xy -4.400595 0.950755) - (xy -4.411436 0.983982) (xy -4.420247 1.058234) (xy -4.427024 1.164879) (xy -4.43176 1.295288) (xy -4.43445 1.440828) - (xy -4.435087 1.592869) (xy -4.433666 1.742779) (xy -4.43018 1.881927) (xy -4.424624 2.001683) (xy -4.416992 2.093414) - (xy -4.407278 2.148489) (xy -4.401422 2.159762) (xy -4.36882 2.171132) (xy -4.294582 2.189631) (xy -4.186104 2.213653) - (xy -4.050783 2.241593) (xy -3.896015 2.271847) (xy -3.811692 2.287704) (xy -3.651704 2.317611) - (xy -3.509033 2.344705) (xy -3.390652 2.367624) (xy -3.303535 2.385012) (xy -3.254655 2.395508) - (xy -3.24661 2.397835) (xy -3.233013 2.424069) (xy -3.204271 2.48726) (xy -3.164215 2.578378) (xy -3.116676 2.688398) - (xy -3.065485 2.80829) (xy -3.014474 2.929028) (xy -2.967474 3.041584) (xy -2.928316 3.136929) (xy -2.900831 3.206038) - (xy -2.888851 3.239881) (xy -2.888628 3.24136) (xy -2.902209 3.268058) (xy -2.940285 3.329495) (xy -2.998853 3.419566) - (xy -3.073912 3.532165) (xy -3.16146 3.661185) (xy -3.212353 3.735294) (xy -3.305091 3.871178) (xy -3.387459 3.994546) - (xy -3.455439 4.099158) (xy -3.505012 4.178772) (xy -3.532158 4.227148) (xy -3.536079 4.237993) - (xy -3.519225 4.263235) (xy -3.472632 4.317131) (xy -3.402251 4.393642) (xy -3.314035 4.486732) - (xy -3.213935 4.59036) (xy -3.107902 4.698491) (xy -3.001889 4.805085) (xy -2.901848 4.904105) (xy -2.81373 4.989513) - (xy -2.743487 5.05527) (xy -2.697072 5.095339) (xy -2.681544 5.104902) (xy -2.656261 5.091455) (xy -2.595789 5.05368) - (xy -2.506008 4.99542) (xy -2.392797 4.920521) (xy -2.262036 4.83283) (xy -2.1634 4.766022) (xy -1.665043 4.427143) - (xy -1.249629 4.59839) (xy -0.834216 4.769637) (xy -0.721634 5.366828) (xy -0.609051 5.96402) (xy 0.633952 5.96402) - (xy 0.746535 5.366828) - ) - (stroke - (width 0.01) - (type solid) - ) - (fill yes) - (layer "B.SilkS") - (uuid "96a9908b-b429-4204-8516-c39d5fb43703") - ) - (embedded_fonts no) - ) - (gr_rect - (start 80 80) - (end 120 120) - (stroke - (width 0.1) - (type default) - ) - (fill no) - (layer "F.SilkS") - (uuid "c728c071-9d57-480b-80ef-39cf494add6b") - ) - (gr_rect - (start 84 120) - (end 116 169) - (stroke - (width 0.1) - (type default) - ) - (fill no) - (layer "F.SilkS") - (uuid "02258128-1864-4935-9a9d-8fe37b500c4d") - ) - (gr_rect - (start 80 80) - (end 120 169) - (stroke - (width 0.05) - (type default) - ) - (fill no) - (layer "Edge.Cuts") - (uuid "8946fde9-d0de-49ce-a5bf-6b6e9167ba29") - ) - (gr_text "GND, VCC, SCL, SDA, RES, DC, CS, BLK" - (at 100 119.6 0) - (layer "F.SilkS") - (uuid "b71fd406-a822-4d08-b045-e52fbde4b66e") - (effects - (font - (size 0.9 0.8) - (thickness 0.1) - ) - (justify bottom) - ) - ) - (gr_text "Bat. off/ on" - (at 115 156 90) - (layer "F.SilkS") - (uuid "2fc2351e-20b5-4b8b-afb5-53ef9ed23347") - (effects - (font - (size 1 1) - (thickness 0.1) - ) - (justify bottom) - ) - ) - (gr_text "GND BAT" - (at 103 151 0) - (layer "B.SilkS") - (uuid "71d39016-f7e8-4cc6-bedb-e720830fcbc8") - (effects - (font - (size 1 1) - (thickness 0.1) - ) - (justify left bottom mirror) - ) - ) - (gr_text "Bat. Input\nGND, V+" - (at 85 163.5 0) - (layer "B.SilkS") - (uuid "f0b54b37-e213-46b0-9d03-7ed0058153bb") - (effects - (font - (size 1 1) - (thickness 0.1) - ) - (justify bottom mirror) - ) - ) - (gr_text "Bat. on/ off" - (at 115 152 90) - (layer "B.SilkS") - (uuid "36467d35-d7bd-47c2-9e99-4173ee512b02") - (effects - (font - (size 1 1) - (thickness 0.1) - ) - (justify bottom mirror) - ) - ) - (gr_text "C-ITS Companion\njtbx, 2026-07-12\nv0.1" - (at 100.5 88.5 0) - (layer "B.SilkS") - (uuid "3ca0e3ea-f566-4e4c-a89d-67ea884b5b93") - (effects - (font - (size 1.5 1.5) - (thickness 0.3) - (bold yes) - ) - (justify bottom mirror) - ) - ) - (dimension - (type orthogonal) - (layer "Dwgs.User") - (uuid "3db11354-aa1a-4f23-b4da-efb0240887c6") - (pts - (xy 80 169) (xy 120 169) - ) - (height 11) - (orientation 0) - (format - (prefix "") - (suffix "") - (units 3) - (units_format 0) - (precision 4) - (suppress_zeroes yes) - ) - (style - (thickness 0.2) - (arrow_length 1.27) - (text_position_mode 0) - (arrow_direction outward) - (extension_height 0.58642) - (extension_offset 0.5) - (keep_text_aligned yes) - ) - (gr_text "40" - (at 100 178.2 0) - (layer "Dwgs.User") - (uuid "3db11354-aa1a-4f23-b4da-efb0240887c6") - (effects - (font - (size 1.5 1.5) - (thickness 0.3) - ) - ) - ) - ) - (dimension - (type orthogonal) - (layer "Dwgs.User") - (uuid "8dd77c52-2226-413e-98fc-0992993b98d6") - (pts - (xy 120 169) (xy 120 80) - ) - (height 15) - (orientation 1) - (format - (prefix "") - (suffix "") - (units 3) - (units_format 0) - (precision 4) - (suppress_zeroes yes) - ) - (style - (thickness 0.2) - (arrow_length 1.27) - (text_position_mode 0) - (arrow_direction outward) - (extension_height 0.58642) - (extension_offset 0.5) - (keep_text_aligned yes) - ) - (gr_text "89" - (at 133.2 124.5 90) - (layer "Dwgs.User") - (uuid "8dd77c52-2226-413e-98fc-0992993b98d6") - (effects - (font - (size 1.5 1.5) - (thickness 0.3) - ) - ) - ) - ) - (dimension - (type orthogonal) - (layer "F.Fab") - (uuid "6562d944-f744-402d-9b7f-0efb7473a541") - (pts - (xy 120 169) (xy 118 154) - ) - (height 10) - (orientation 1) - (format - (prefix "") - (suffix "") - (units 3) - (units_format 0) - (precision 4) - (suppress_zeroes yes) - ) - (style - (thickness 0.1) - (arrow_length 1.27) - (text_position_mode 0) - (arrow_direction outward) - (extension_height 0.58642) - (extension_offset 0.5) - (keep_text_aligned yes) - ) - (gr_text "15" - (at 128.85 161.5 90) - (layer "F.Fab") - (uuid "6562d944-f744-402d-9b7f-0efb7473a541") - (effects - (font - (size 1 1) - (thickness 0.15) - ) - ) - ) - ) - (via - (at 115 134) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "00721a23-a8c9-444a-875e-eb367dd72565") - ) - (via - (at 94.5 143.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "01179899-9f13-4676-9c91-d637d9b302ca") - ) - (via - (at 95.5 83.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "01fbffb6-66f6-415d-b1bd-07c901d08e1e") - ) - (via - (at 115 114) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "03361e9d-8341-4d38-8f8a-f93a50c25662") - ) - (via - (at 104.5 113) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "05641a12-74da-40d2-9387-0cc44dfbfb90") - ) - (via - (at 102.5 98) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "05c97045-4fd7-476f-bde2-ac21bf62d390") - ) - (via - (at 108 90) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "08825047-e56d-452f-ac62-c62a43e50121") - ) - (via - (at 101 134.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "0a03468e-5707-4f05-80f7-be4766409c8a") - ) - (via - (at 91.5 114.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "0a90c92f-db3e-4287-8836-a0e11ae393cd") - ) - (via - (at 95.5 102) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "0cf53cd2-1096-4b48-ba96-e053640c8a6a") - ) - (via - (at 95.5 89.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "0cfa8f58-f608-48fd-a803-7854c4cfaf05") - ) - (via - (at 103.5 100) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "103afebe-6830-43c4-aa46-9e9d39a3b484") - ) - (via - (at 98 87) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "10526082-c990-4d38-8bbf-afc74671ea43") - ) - (via - (at 96 160.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "13f03577-635b-45e2-bb45-5e0f283884b7") - ) - (via - (at 111 112.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "13ffe248-cb0e-430e-836e-8a99dd3e1618") - ) - (via - (at 112 164.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "16674d26-a741-4951-a134-402431cc9a5d") - ) - (via - (at 85.5 143) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "1817b34b-a412-4b8e-8a10-d5f68d3fa5b1") - ) - (via - (at 115.5 163.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "1933e965-59f2-4eaf-b943-ed66b6ad24ad") - ) - (via - (at 89.5 106.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "193d34c1-6484-4566-9576-826fc93d9305") - ) - (via - (at 87.5 111) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "19ace693-05f8-41ff-8419-6e7b29630699") - ) - (via - (at 104.5 165) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "1ba4a6dd-0b0b-4147-a2d5-4b3414eea275") - ) - (via - (at 117 83) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "1cd77833-1627-41e6-b48a-51e101074e2f") - ) - (via - (at 119 168) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "1dc42a21-4cc0-4a39-a813-7749401e386c") - ) - (via - (at 95 130) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "1f9b95dd-13e1-43da-893c-2ed3f029c17a") - ) - (via - (at 116 138.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "1fac7e19-ebbe-4412-ab1d-a8092687c82e") - ) - (via - (at 104 166) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "20015d66-9793-41d5-84ee-79ff801c895e") - ) - (via - (at 84 92.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "2152ed62-7e98-471a-ba6f-91576e4490be") - ) - (via - (at 117.5 144.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "234e3346-fdae-4e6c-9d83-8430e19f9706") - ) - (via - (at 105 164) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "23f4c16d-e086-4851-a962-381c3ead6adc") - ) - (via - (at 86 137.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "24a6bd58-3038-45ca-b68e-07d7435ac237") - ) - (via - (at 103 90) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "284f9364-c481-4661-ba86-30a8d5da184e") - ) - (via - (at 86 114) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "287a7e02-7fef-41a4-8f48-009c0a38a378") - ) - (via - (at 82 130.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "28fbdca1-8a50-44da-844a-cac901be039b") - ) - (via - (at 88.5 91.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "292317a0-2fbd-441a-a142-b5187afcf9f5") - ) - (via - (at 86 105) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "2ab65db7-b313-48b4-887e-0193d366d568") - ) - (via - (at 111 107) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "2bfaf11a-a0da-45b5-be07-284a34edafc1") - ) - (via - (at 115 123.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "2c1f7cb2-6546-41e3-9d2d-1dabc3ea7b73") - ) - (via - (at 99 115.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "2f2a4e97-8f11-467a-9396-46d1c33abf4f") - ) - (via - (at 95 107) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "328d8b6d-4f9d-46d1-aa48-cb7cf8262103") - ) - (via - (at 93 105.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "3669c638-e7ba-4b80-9326-dad6b09f3cfa") - ) - (via - (at 93.5 109) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "37144ba5-5115-4b81-b50d-e94dba1df37d") - ) - (via - (at 104 90.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "37ae8dc6-93d3-4caf-a049-2b1747b18852") - ) - (via - (at 91.5 112) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "393f6faa-7518-4b0c-a6ed-a3844ce2d5ef") - ) - (via - (at 96.5 102.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "398e7f98-60a0-4b1d-a3a4-af710305e665") - ) - (via - (at 104 83.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "39a2c670-63b0-4029-8397-08a4b3caa2bf") - ) - (via - (at 106.5 141.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "39b9507a-01b2-4fde-b20b-273306639839") - ) - (via - (at 93 94.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "3a39f7ec-c634-4ea8-8867-6c3b895138e8") - ) - (via - (at 96 163) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "3b8ffd47-b5d8-48a0-8886-1bb5b17f9dca") - ) - (via - (at 87.5 89) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "3c420cea-ddcd-4133-b5da-6330e79c5ac7") - ) - (via - (at 93 115.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "3f6edc11-b7e9-4758-94ce-1d72e4d5660a") - ) - (via - (at 115.5 144.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "415444d0-3283-45cc-bfe2-16f0ec08695f") - ) - (via - (at 85 131.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "42987657-914b-4b32-b0ee-771ff2f14a46") - ) - (via - (at 117 130) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "42b40ea2-a93b-4176-b658-c9ef605496f6") - ) - (via - (at 102.5 102.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "430e3f6a-e577-403f-98c6-e36be623a5c7") - ) - (via - (at 109 91) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "432e9f5b-45c3-4781-b15b-91b473db5f43") - ) - (via - (at 117.5 117.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "44a1826c-c877-4b6e-8e69-786a0abc5da0") - ) - (via - (at 112.5 153) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "4521b1ba-e1e2-4fc6-adc8-87d37b1b30c9") - ) - (via - (at 95 135) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "454e29ab-82f2-42f1-b176-b846b4810a22") - ) - (via - (at 117 112.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "4587e74f-2262-4e56-9993-e8145ae46e84") - ) - (via - (at 93.5 141) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "45bdf237-635c-4e5b-9ba2-ed6472c85888") - ) - (via - (at 83.5 100) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "45cd43d0-6270-4bca-b31c-ef4ba0298c39") - ) - (via - (at 117 127.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "46d4e607-1668-4c9d-8393-9339b1cfe808") - ) - (via - (at 113 83.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "48a52c5d-c91e-4c03-8235-0c0a17bdccb6") - ) - (via - (at 96 113.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "48e9a348-f98f-47d2-9cda-0ff776e398fe") - ) - (via - (at 96.5 95) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "4c018426-a759-44a6-a036-ec666a055a89") - ) - (via - (at 91 89.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "4c21d5ab-729e-4b56-a326-94866a1ecc39") - ) - (via - (at 118.5 138) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "530485af-052a-4709-9cb2-b8fa7e66be7b") - ) - (via - (at 96.5 97) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "536326b8-a7c2-457e-accc-8885419d577a") - ) - (via - (at 96.5 155) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "545c06d9-cbce-4bb2-844b-384193bdaafa") - ) - (via - (at 117.5 138) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "56956a04-fa45-41e6-a0af-52a9478bc6b2") - ) - (via - (at 89.5 110) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "56fa5386-8aed-4296-a8c5-6dcfa06d8a90") - ) - (via - (at 89 96.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "5784e91c-d953-496f-81fe-28015e1f0b5b") - ) - (via - (at 117.5 94.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "594a2688-5a06-45e0-ac64-71621f5cc839") - ) - (via - (at 111 108.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "595f0f19-4e5b-4905-9f42-aa6a8ba06e74") - ) - (via - (at 118 161.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "5c29d04f-c8e2-4249-8434-d9b5cb802f5b") - ) - (via - (at 117 163) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "5eb4579d-18ca-485d-86d7-755020e07e4d") - ) - (via - (at 82 166.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "5f661dda-39f4-4af3-85b7-2d4dd6b86ab1") - ) - (via - (at 91.5 139) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "606134c1-9776-4a02-ad96-e2cc74c5ba26") - ) - (via - (at 83 106.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "60a58020-9d85-4319-a788-ae4c95bbe623") - ) - (via - (at 106 134) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "616ebcb5-b651-4211-9157-13f922822022") - ) - (via - (at 95.5 140.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "61bd9489-8242-4e5a-ace3-a1462b1c0115") - ) - (via - (at 98 98.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "627ea6b3-bf8d-460e-8134-83b1315e6d96") - ) - (via - (at 92.5 89) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "6309fa4b-2dc1-4e69-b53c-624c4e988ffe") - ) - (via - (at 97.5 89) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "63d18c24-2651-4934-b912-f039b28202eb") - ) - (via - (at 96 151) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "650a927c-1008-4d1d-8f8f-caa741f0ab76") - ) - (via - (at 89.5 114.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "66ab1cbb-cd9d-41bd-9545-bf0d26bba3e0") - ) - (via - (at 85.5 146) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "689130bc-3b74-4438-a3de-bff7a56a26b6") - ) - (via - (at 91.5 109) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "6937379f-a1cd-4678-a6e5-7e93f2654944") - ) - (via - (at 96.5 147.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "699202be-f3de-40fc-9a99-31e1752161db") - ) - (via - (at 104.5 160.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "69e383f9-178d-451f-ad93-34fc4efd396c") - ) - (via - (at 95.5 104) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "69e3d384-6a14-4dc3-9eee-b62e5b731ebe") - ) - (via - (at 114 107) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "70c35359-37eb-47e6-ad98-e470f5e19fe9") - ) - (via - (at 85 84) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "721fa03e-e1ea-42eb-b75c-a9c295a88438") - ) - (via - (at 106 110.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "72d891a8-7a80-4b65-9b98-66e4e084c661") - ) - (via - (at 82.5 143) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "7318ee53-a3e6-4025-90ac-3f104cf84037") - ) - (via - (at 105 157.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "7507fa78-de06-4eb8-96c2-0b8bcd73bd53") - ) - (via - (at 92 131.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "754b5361-747e-4ed0-94de-b0d083abc8ac") - ) - (via - (at 94.5 165.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "7915c413-620f-4e3b-9327-ba7fda53a1cc") - ) - (via - (at 115 93.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "7a328164-80fd-4f72-b269-8879a2a36656") - ) - (via - (at 105 162) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "7cfc4136-3244-42fb-8d2c-3b3fc821186c") - ) - (via - (at 108.5 110.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "7e3a23fe-7040-4845-8ec7-777591e9e71d") - ) - (via - (at 111 103.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "7ed7a178-493a-44fb-b84d-e9be1a096386") - ) - (via - (at 97 157.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "80f22b0a-c55c-4d7a-9593-d78fae72a3da") - ) - (via - (at 105.5 107) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "818f836a-97ea-4dc8-8525-e7b5eed3814e") - ) - (via - (at 107.5 87) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "85fe3486-c89a-4765-8c14-0f701566b0f4") - ) - (via - (at 82 111) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "87a8c460-a8db-4e4a-b4cb-c3ebba44e612") - ) - (via - (at 88 93.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "87ab5488-62cc-417c-8841-0a13581922ce") - ) - (via - (at 105 167) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "87b62f36-045e-408c-a05b-18b86781b85c") - ) - (via - (at 117 90) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "87e4cd9a-f32e-49a6-8603-697a054b5dd8") - ) - (via - (at 88.5 82.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "8913005c-e509-449e-8bc9-73b0ced264f9") - ) - (via - (at 89.5 103) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "89430bf6-339a-44af-b9ac-07a45fefdef7") - ) - (via - (at 104.5 139) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "89436566-f2ff-410a-b40e-0fdcb46e1efe") - ) - (via - (at 82 83.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "8bc59e41-f64a-4710-8bf0-4a2250381369") - ) - (via - (at 103 130.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "8c7d92de-64cc-4c0e-9289-0d45a264222f") - ) - (via - (at 86.5 116.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "924cfeb7-c02e-4a79-950c-ee88d12a646d") - ) - (via - (at 98.5 89.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "92825730-9db5-4bca-bf69-d1b2876b8539") - ) - (via - (at 104.5 134) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "929e1b23-cb22-413f-87e0-bd8c9c7c230a") - ) - (via - (at 81.5 89) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "92a2e70c-e599-4d2d-a571-c4b903cc0297") - ) - (via - (at 105 129) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "941d8640-0424-4811-b183-38211fcfc6a7") - ) - (via - (at 97 86) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "94a01270-ad5d-48d4-b855-d29b273a57f1") - ) - (via - (at 110 95.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "94c6de0d-08a2-4998-b984-7410d1de2b48") - ) - (via - (at 116 100.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "9ebed7f3-5e61-4d35-b9b5-dd5e2c0a2912") - ) - (via - (at 104.5 155) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "a1584320-81af-4124-9293-37856aed874c") - ) - (via - (at 83 98) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "a3408391-e503-4fb7-bfd5-d275f5c662cd") - ) - (via - (at 84.5 135) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "a3cddf12-d9bb-495c-896b-75d8711e908c") - ) - (via - (at 85 126) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "a485c291-a4cc-4ef9-8bc5-3a7c123bdca9") - ) - (via - (at 95.5 96) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "a5481978-b894-4979-a298-c5cef0e34638") - ) - (via - (at 108.5 109) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "a6afedbb-4bf6-4365-95fd-db9a78cab67f") - ) - (via - (at 111 94) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "a709473c-a527-410b-b77c-bd3abf86d000") - ) - (via - (at 99 102) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "a722698f-a9a6-4647-88d9-5fc558df3771") - ) - (via - (at 113 104) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "a76a0782-0f33-4c3c-88e8-c4b2787215b9") - ) - (via - (at 88 86.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "a921b5a8-ca85-4565-bb1e-bb86484ac74b") - ) - (via - (at 97.5 156) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "a93ffd5c-5751-4acc-84e5-8da1bec0f96c") - ) - (via - (at 86 109.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "a9e01a6f-8643-41a6-8aa6-98ca4bf81230") - ) - (via - (at 98 97.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "ab5ed150-0e28-4d05-a295-aab981924629") - ) - (via - (at 96.5 165.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "ad1ef72a-a459-4490-8f58-3568e4a5d06d") - ) - (via - (at 110.5 88) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "ae8025f6-3890-4ded-9f3c-8f0c4139716b") - ) - (via - (at 113 111) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "b14e9cb9-5adc-4e0d-9a52-c46eec891757") - ) - (via - (at 94 86.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "b2202cb3-a8b2-43a6-80dd-079d75018345") - ) - (via - (at 84.5 164) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "b3e1926b-2c4f-4423-bca2-cf7960e0ca9c") - ) - (via - (at 82.5 135.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "b7f8b129-3ac1-42c1-a49c-218a089beb39") - ) - (via - (at 88.5 107.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "bbe729f2-009f-42c1-b69c-7fe9ec1a78ae") - ) - (via - (at 113.5 83) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "bf12ad43-4323-43e1-a3b2-cd22ca3b28bd") - ) - (via - (at 101 87) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "bf519200-aa3c-4936-a0b7-3d585f6c4b91") - ) - (via - (at 86.5 95.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "c276d805-b663-4d18-907c-3ca909d50a7c") - ) - (via - (at 86.5 165.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "c3a1d19e-46c6-47b9-a3b0-b8e4b3520dac") - ) - (via - (at 88.5 116.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "c3ff3331-2fed-4864-bd77-7dce01950536") - ) - (via - (at 117.5 123) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "c47e2be9-81fb-4398-8330-ed735091053c") - ) - (via - (at 111 115) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "c7c071bf-8e2d-490b-93f9-6f342e91d801") - ) - (via - (at 101.5 96) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "c7e92898-2ac2-403e-b57b-769047040507") - ) - (via - (at 106 115.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "c9439efd-0d95-4a00-999e-53f57b5165f9") - ) - (via - (at 84 89.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "cb248fb1-3362-4e7c-85f4-04279b6d77ff") - ) - (via - (at 117.5 165) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "cc6a2b05-5ab9-417d-a48f-8b1f37761176") - ) - (via - (at 82.5 117.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "ce166821-eedf-4b86-b548-2e8f273b4de9") - ) - (via - (at 105.5 93) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "d14b0cd7-87e5-48e3-befc-42689d3b4ae2") - ) - (via - (at 113 92.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "d22f55df-4287-4883-8fb5-00a401a0dc78") - ) - (via - (at 94.5 163.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "d286fd67-5804-4ce0-9796-b0045392ce29") - ) - (via - (at 95 115.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "d2ba2fda-dfe5-4f7a-99f8-31f325ba676f") - ) - (via - (at 114 101) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "d32b347d-a792-4752-9729-837dd20f9b82") - ) - (via - (at 102.5 87.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "d502011d-eb16-4fd2-85ce-bbabdb650321") - ) - (via - (at 92.5 136.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "d7249a6c-e392-49ea-873c-c1b107a8d7de") - ) - (via - (at 110 82.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "d9ddb74f-1ca8-442c-b26e-13cf1c6cb26e") - ) - (via - (at 114 131.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "db66e37e-2394-4780-88a2-eb0670468e77") - ) - (via - (at 113.5 98) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "dbda3fc0-3a85-4422-a552-53a43d9f29a3") - ) - (via - (at 111 102) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "de5c2740-58f7-4d67-a311-a325cff35e71") - ) - (via - (at 112.5 88.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "dfee8822-0a45-4606-a5e8-8ff83df5ba48") - ) - (via - (at 117.5 106) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "e0117bec-c56b-498b-8ec9-738a3219c7f6") - ) - (via - (at 97.5 142) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "e1b6bb1b-ad09-4128-aff4-b95045d2589b") - ) - (via - (at 104 95) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "e3b35d56-72b1-4b33-ac2d-d2eb34e95d15") - ) - (via - (at 84.5 87.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "e722a600-37b1-4d74-81f4-b2334921ea00") - ) - (via - (at 84 103.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "e81a9211-9807-4014-9a0a-0e84081a9de4") - ) - (via - (at 115.5 108.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "e9c93e73-bc9a-42c3-ab35-52603572c24a") - ) - (via - (at 115 87.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "ecaef8db-7f94-42d7-b814-579d3e2e0893") - ) - (via - (at 104 162.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "ee6a9322-37b0-40d3-90ca-bddaf626b2f0") - ) - (via - (at 99 114.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "ef78665b-31f9-4eb7-b823-49ccde0a766a") - ) - (via - (at 100 103.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "ef945ec1-0138-4bac-b819-080b1a6ce17b") - ) - (via - (at 89 164.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "efa19836-c342-4672-90b2-a2341d90ecc0") - ) - (via - (at 94.5 93) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "f0e36a4b-398c-4a92-8f2b-28be1c9a35fc") - ) - (via - (at 108.5 114) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "f366f730-405a-4ea5-a5ea-f575fe809c93") - ) - (via - (at 105.5 156) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "f55ee662-6404-4078-b8d8-d57dd06f26c5") - ) - (via - (at 117.5 166.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "f8232405-f56d-4fc9-8740-68ac6e086fa7") - ) - (via - (at 86.5 91.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "fa06b331-606a-4446-8607-b82426e0fd1c") - ) - (via - (at 115.5 141.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "fa88824d-b2f6-4210-9f9a-8ea9fc478f14") - ) - (via - (at 106 142.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "faaf36b8-e01e-4eee-927b-a4eebc89d317") - ) - (via - (at 102 132) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "fbc97fd2-a45a-44cb-89f5-ee4146483d27") - ) - (via - (at 98 112) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "fdca3406-42f3-4357-9c8f-8766979bb0f9") - ) - (via - (at 83 126.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (free yes) - (net "GND") - (uuid "ffdad837-c91b-49db-99ca-f7535747b010") - ) - (segment - (start 102.1 92.8) - (end 102.1 90.6) - (width 0.5) - (layer "F.Cu") - (net "+3V3") - (uuid "748925aa-710c-41a4-98a1-fd6d07ecebb6") - ) - (segment - (start 111 160.5) - (end 111 146.5) - (width 0.5) - (layer "F.Cu") - (net "+3V3") - (uuid "85c49190-a6c1-48df-903d-166f49529ad8") - ) - (segment - (start 110.4083 161.0917) - (end 111 160.5) - (width 0.5) - (layer "F.Cu") - (net "+3V3") - (uuid "b283d075-fd82-4974-b171-749a39a1592c") - ) - (segment - (start 93 98.1) - (end 89.6 98.1) - (width 0.5) - (layer "F.Cu") - (net "+3V3") - (uuid "b5b4178f-21a6-47f5-98d9-e6c9d72b472a") - ) - (segment - (start 89.6 98.1) - (end 89.5 98) - (width 0.5) - (layer "F.Cu") - (net "+3V3") - (uuid "c614cdbf-9a6a-40f9-be61-9a6bc85f6b96") - ) - (segment - (start 102.1 90.6) - (end 102 90.5) - (width 0.5) - (layer "F.Cu") - (net "+3V3") - (uuid "da2b7c0e-e018-4013-900d-13df351a5fb1") - ) - (segment - (start 111 146.5) - (end 108.89 144.39) - (width 0.5) - (layer "F.Cu") - (net "+3V3") - (uuid "e676f116-0f67-4406-bd06-5daa2cf10c80") - ) - (segment - (start 107.6514 161.0917) - (end 110.4083 161.0917) - (width 0.5) - (layer "F.Cu") - (net "+3V3") - (uuid "ea15e412-7630-4af7-8dc4-47d44de645b4") - ) - (segment - (start 108.89 122) - (end 108.89 144.39) - (width 0.5) - (layer "F.Cu") - (net "+3V3") - (uuid "f2c27245-cce5-4e3b-b64c-473022afa069") - ) - (via - (at 89.5 98) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (net "+3V3") - (uuid "09be1dd7-9786-41b9-90da-ca7bc0c94853") - ) - (via - (at 102 90.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (net "+3V3") - (uuid "6bfc6349-fed2-4f50-af12-7f31ec10056e") - ) - (segment - (start 93.65 119.15) - (end 93.65 122) - (width 0.5) - (layer "B.Cu") - (net "+3V3") - (uuid "1cb20109-ef1d-4666-8cde-941839fa2962") - ) - (segment - (start 108.5 118.5) - (end 108.89 118.89) - (width 0.5) - (layer "B.Cu") - (net "+3V3") - (uuid "1fa51825-997c-4f5d-9131-22c26ff73fab") - ) - (segment - (start 108.89 118.89) - (end 108.89 122) - (width 0.5) - (layer "B.Cu") - (net "+3V3") - (uuid "3abe23f5-7781-45a9-a490-336769cfd638") - ) - (segment - (start 85 88.5) - (end 85 98) - (width 0.5) - (layer "B.Cu") - (net "+3V3") - (uuid "57c11d5d-acc6-4fbb-8027-f7934d958879") - ) - (segment - (start 101.5 88) - (end 85.5 88) - (width 0.5) - (layer "B.Cu") - (net "+3V3") - (uuid "5eb4bbab-49de-4d75-b480-72e3d4bde915") - ) - (segment - (start 102 88.5) - (end 101.5 88) - (width 0.5) - (layer "B.Cu") - (net "+3V3") - (uuid "708aa190-0f63-4a45-a567-d2634e5118ab") - ) - (segment - (start 85 117.5) - (end 86 118.5) - (width 0.5) - (layer "B.Cu") - (net "+3V3") - (uuid "7879f413-e0dc-4878-80df-78c5d144c75c") - ) - (segment - (start 85.5 88) - (end 85 88.5) - (width 0.5) - (layer "B.Cu") - (net "+3V3") - (uuid "8b63df5f-46be-4ed6-a3cc-1ae2ec4d773b") - ) - (segment - (start 86 118.5) - (end 93 118.5) - (width 0.5) - (layer "B.Cu") - (net "+3V3") - (uuid "92600b61-f86b-469c-b178-64d0b345cddd") - ) - (segment - (start 89.5 98) - (end 85 98) - (width 0.5) - (layer "B.Cu") - (net "+3V3") - (uuid "a2cf8ec4-721d-48ac-ad1d-37e71186df4c") - ) - (segment - (start 93 118.5) - (end 93.65 119.15) - (width 0.5) - (layer "B.Cu") - (net "+3V3") - (uuid "b7414028-75a4-4767-a83a-a404d025bc00") - ) - (segment - (start 102 90.5) - (end 102 88.5) - (width 0.5) - (layer "B.Cu") - (net "+3V3") - (uuid "c5fde80a-1fc4-40ec-b143-e84fe460a222") - ) - (segment - (start 93 118.5) - (end 108.5 118.5) - (width 0.5) - (layer "B.Cu") - (net "+3V3") - (uuid "d4ca02fd-9ce1-433d-8fb4-044dd747e8d3") - ) - (segment - (start 85 98) - (end 85 117.5) - (width 0.5) - (layer "B.Cu") - (net "+3V3") - (uuid "d8298f8a-0c2d-4bfc-99a2-39f9e17d2602") - ) - (segment - (start 93 100) - (end 89.5 100) - (width 0.5) - (layer "F.Cu") - (net "/V_BCKP") - (uuid "e6dac592-7993-4257-b9c8-3900b1010c20") - ) - (via - (at 89.5 100) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (net "/V_BCKP") - (uuid "485c07f6-dcbd-4bd5-bf12-acf5a7e5d51b") - ) - (segment - (start 87.5 100) - (end 89.5 100) - (width 0.5) - (layer "B.Cu") - (net "/V_BCKP") - (uuid "c2a1f482-24ea-45d7-91d3-47d9d45aa653") - ) - (segment - (start 100.2 107.2) - (end 100.2 109.3) - (width 0.2) - (layer "F.Cu") - (net "Net-(U2-~{SAFEBOOT})") - (uuid "33a5576a-b032-4aa6-8649-fff4816343a0") - ) - (segment - (start 100.2 109.3) - (end 100 109.5) - (width 0.2) - (layer "F.Cu") - (net "Net-(U2-~{SAFEBOOT})") - (uuid "dbbe1734-bbdf-4558-bff9-97cc39d122c8") - ) - (via - (at 100 109.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (net "Net-(U2-~{SAFEBOOT})") - (uuid "cc1c0d0e-4c0f-411a-b15b-9a439738916d") - ) - (segment - (start 100 109.5) - (end 100 111) - (width 0.2) - (layer "B.Cu") - (net "Net-(U2-~{SAFEBOOT})") - (uuid "8be31c22-5b0f-42ca-ba59-227613ae95d8") - ) - (segment - (start 107.4 100) - (end 110 100) - (width 0.2) - (layer "F.Cu") - (net "Net-(U1-D7)") - (uuid "b5860ae6-704d-4b3e-b5f4-7bdcaec9e9d7") - ) - (via - (at 110 100) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (net "Net-(U1-D7)") - (uuid "2ee086e4-c6e0-428f-a696-cb8ba3e94ec1") - ) - (segment - (start 112 118.434315) - (end 112 146) - (width 0.2) - (layer "B.Cu") - (net "Net-(U1-D7)") - (uuid "0757b055-d6ed-4409-bac5-d19d70766f98") - ) - (segment - (start 110 116.434314) - (end 112 118.434315) - (width 0.2) - (layer "B.Cu") - (net "Net-(U1-D7)") - (uuid "0e3230a6-7f2c-47be-9ebb-598e8fa7b3a8") - ) - (segment - (start 109 146.5) - (end 108.1514 147.3486) - (width 0.2) - (layer "B.Cu") - (net "Net-(U1-D7)") - (uuid "65247556-e257-46ec-83fb-111a21e9844f") - ) - (segment - (start 111.5 146.5) - (end 109 146.5) - (width 0.2) - (layer "B.Cu") - (net "Net-(U1-D7)") - (uuid "8ec3b441-aeec-49f7-bb75-eb2aaba37f40") - ) - (segment - (start 110 100) - (end 110 116.434314) - (width 0.2) - (layer "B.Cu") - (net "Net-(U1-D7)") - (uuid "938f73d9-87fa-49d3-b530-4307518ed0c9") - ) - (segment - (start 112 146) - (end 111.5 146.5) - (width 0.2) - (layer "B.Cu") - (net "Net-(U1-D7)") - (uuid "a482a245-fc47-4db0-8d31-5336028e8128") - ) - (segment - (start 108.1514 147.3486) - (end 108.1514 150.9117) - (width 0.2) - (layer "B.Cu") - (net "Net-(U1-D7)") - (uuid "f238f67a-9fe9-4f28-b172-7c65159c7e61") - ) - (segment - (start 107.4 98.1) - (end 109.4 98.1) - (width 0.2) - (layer "F.Cu") - (net "Net-(U1-D6)") - (uuid "96e40e01-5cba-4465-9219-c1c7b56bf7c1") - ) - (segment - (start 109.4 98.1) - (end 109.5 98) - (width 0.2) - (layer "F.Cu") - (net "Net-(U1-D6)") - (uuid "fb190d74-331e-4bfd-80ad-2aa0eb07d526") - ) - (via - (at 109.5 98) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (net "Net-(U1-D6)") - (uuid "5e9061e2-5bd8-4e30-8310-387d9da97004") - ) - (segment - (start 91.9864 146.5136) - (end 91.9864 150.9117) - (width 0.2) - (layer "B.Cu") - (net "Net-(U1-D6)") - (uuid "03599e14-02d3-45db-b63a-616ad9dcd2ca") - ) - (segment - (start 109.4 100.9) - (end 109.5 101) - (width 0.2) - (layer "B.Cu") - (net "Net-(U1-D6)") - (uuid "1e381a13-980d-45fc-a9a1-c2a1fe1daa82") - ) - (segment - (start 111 146) - (end 92.5 146) - (width 0.2) - (layer "B.Cu") - (net "Net-(U1-D6)") - (uuid "263dee68-940b-40bd-a446-d9710513bee0") - ) - (segment - (start 92.5 146) - (end 91.9864 146.5136) - (width 0.2) - (layer "B.Cu") - (net "Net-(U1-D6)") - (uuid "29d8a53f-15bf-4ab9-b885-864bb7f84063") - ) - (segment - (start 109.5 101) - (end 109.5 116.5) - (width 0.2) - (layer "B.Cu") - (net "Net-(U1-D6)") - (uuid "3971f7cf-891c-4e3a-a301-0894cceb2ff6") - ) - (segment - (start 111.5 118.5) - (end 111.5 145.5) - (width 0.2) - (layer "B.Cu") - (net "Net-(U1-D6)") - (uuid "73948961-9e3e-4394-b0fa-55dc4208b08e") - ) - (segment - (start 109.4 98.1) - (end 109.4 100.9) - (width 0.2) - (layer "B.Cu") - (net "Net-(U1-D6)") - (uuid "7efc7ba0-fa79-4f1b-aa7f-f4295505c8cf") - ) - (segment - (start 109.5 98) - (end 109.4 98.1) - (width 0.2) - (layer "B.Cu") - (net "Net-(U1-D6)") - (uuid "a8936ff9-df7c-4bbc-9359-df504fa17fc9") - ) - (segment - (start 111.5 145.5) - (end 111 146) - (width 0.2) - (layer "B.Cu") - (net "Net-(U1-D6)") - (uuid "ae3b6f67-2a10-4882-82d3-029aca05b22e") - ) - (segment - (start 109.5 116.5) - (end 111.5 118.5) - (width 0.2) - (layer "B.Cu") - (net "Net-(U1-D6)") - (uuid "f8d568f1-7786-433d-b99e-9a6128f878c8") - ) - (segment - (start 95 145) - (end 95 160.5) - (width 0.2) - (layer "F.Cu") - (net "Net-(U1-D2)") - (uuid "01db8462-08e9-4b64-8c47-755db2a969a6") - ) - (segment - (start 95 160.5) - (end 94.4083 161.0917) - (width 0.2) - (layer "F.Cu") - (net "Net-(U1-D2)") - (uuid "0a1797b0-3dc3-46b1-a880-b3a1ecdca3b5") - ) - (segment - (start 94.4083 161.0917) - (end 92.4114 161.0917) - (width 0.2) - (layer "F.Cu") - (net "Net-(U1-D2)") - (uuid "1f90c1f8-6066-4e95-b057-20ab383fd7a9") - ) - (segment - (start 100.2 90.7) - (end 100 90.5) - (width 0.2) - (layer "F.Cu") - (net "Net-(U1-D2)") - (uuid "e35cc6f3-3b5c-4377-92af-c587e325b5dd") - ) - (segment - (start 100.2 92.8) - (end 100.2 90.7) - (width 0.2) - (layer "F.Cu") - (net "Net-(U1-D2)") - (uuid "fe08e935-45fe-4989-8acd-743267bf8132") - ) - (via - (at 95 145) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (net "Net-(U1-D2)") - (uuid "16b1a0b4-dc93-49ab-a093-c60f8cbb2afe") - ) - (via - (at 100 90.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (net "Net-(U1-D2)") - (uuid "fc3901dc-ae7a-4522-9101-b1e56349cca0") - ) - (segment - (start 111 118.565686) - (end 111 144.5) - (width 0.2) - (layer "B.Cu") - (net "Net-(U1-D2)") - (uuid "15988dec-af11-40d6-964f-b77aab2bf277") - ) - (segment - (start 111 144.5) - (end 110.5 145) - (width 0.2) - (layer "B.Cu") - (net "Net-(U1-D2)") - (uuid "1780bde5-904f-4e34-b8a0-dc3a44cd907d") - ) - (segment - (start 91 117) - (end 109.434314 117) - (width 0.2) - (layer "B.Cu") - (net "Net-(U1-D2)") - (uuid "1ef07cb9-03a1-44a0-8379-245350a25f82") - ) - (segment - (start 91 90.5) - (end 90.5 91) - (width 0.2) - (layer "B.Cu") - (net "Net-(U1-D2)") - (uuid "4e89e0d4-3d77-47a3-af0e-5a82465c7e2b") - ) - (segment - (start 90.5 116.5) - (end 91 117) - (width 0.2) - (layer "B.Cu") - (net "Net-(U1-D2)") - (uuid "71858a7f-a29f-4d43-8e43-178b0ffcd963") - ) - (segment - (start 110.5 145) - (end 95 145) - (width 0.2) - (layer "B.Cu") - (net "Net-(U1-D2)") - (uuid "8fe7779e-0d6e-47c9-97a8-9611ad1558e5") - ) - (segment - (start 90.5 91) - (end 90.5 116.5) - (width 0.2) - (layer "B.Cu") - (net "Net-(U1-D2)") - (uuid "b950af8b-3a9d-4b3b-b9f7-fb5ec4b15613") - ) - (segment - (start 100 90.5) - (end 91 90.5) - (width 0.2) - (layer "B.Cu") - (net "Net-(U1-D2)") - (uuid "ca326f36-4f3f-4a3d-bccc-ad0d2e98e8c2") - ) - (segment - (start 109.434314 117) - (end 111 118.565686) - (width 0.2) - (layer "B.Cu") - (net "Net-(U1-D2)") - (uuid "e67fa9ef-95fe-4530-95a4-4cb1cb127379") - ) - (segment - (start 100 120.5) - (end 99.5 120) - (width 0.2) - (layer "F.Cu") - (net "Net-(J1-Pin_3)") - (uuid "21dacbdc-75fc-43f4-a742-132b89e89b7f") - ) - (segment - (start 96.19 120.31) - (end 96.19 122) - (width 0.2) - (layer "F.Cu") - (net "Net-(J1-Pin_3)") - (uuid "3cb02be2-b243-4588-a77e-b724c91eac2c") - ) - (segment - (start 107.6514 153.4717) - (end 104.4717 153.4717) - (width 0.2) - (layer "F.Cu") - (net "Net-(J1-Pin_3)") - (uuid "4759d896-a71d-405b-abac-5742968ca616") - ) - (segment - (start 99.5 120) - (end 96.5 120) - (width 0.2) - (layer "F.Cu") - (net "Net-(J1-Pin_3)") - (uuid "49aee229-e6d1-4c3b-8266-e7a3b11c694f") - ) - (segment - (start 96.5 120) - (end 96.19 120.31) - (width 0.2) - (layer "F.Cu") - (net "Net-(J1-Pin_3)") - (uuid "5228f388-d3c1-49e7-9a80-606670cd04c7") - ) - (segment - (start 104 144) - (end 100 140) - (width 0.2) - (layer "F.Cu") - (net "Net-(J1-Pin_3)") - (uuid "53f71d7c-4493-461a-bc72-6480a25c410b") - ) - (segment - (start 104.4717 153.4717) - (end 104 153) - (width 0.2) - (layer "F.Cu") - (net "Net-(J1-Pin_3)") - (uuid "6e3aa938-bcb8-46c3-a5dc-0fc080d2f560") - ) - (segment - (start 104 153) - (end 104 144) - (width 0.2) - (layer "F.Cu") - (net "Net-(J1-Pin_3)") - (uuid "aa3abb00-6850-4dce-8a67-b1fe8b1744a1") - ) - (segment - (start 100 140) - (end 100 120.5) - (width 0.2) - (layer "F.Cu") - (net "Net-(J1-Pin_3)") - (uuid "ed8dd69b-3b4a-44b5-b258-bd925bcf5b92") - ) - (segment - (start 98.73 122) - (end 98.73 124.23) - (width 0.2) - (layer "F.Cu") - (net "Net-(J1-Pin_4)") - (uuid "1f6b05ff-d35c-4c3c-a831-3467987ffb9c") - ) - (segment - (start 99 140) - (end 103 144) - (width 0.2) - (layer "F.Cu") - (net "Net-(J1-Pin_4)") - (uuid "496c83e7-6c78-4617-a48c-474536b37bc6") - ) - (segment - (start 103 158) - (end 103.5517 158.5517) - (width 0.2) - (layer "F.Cu") - (net "Net-(J1-Pin_4)") - (uuid "662a070f-2d45-4907-832e-987160382ecd") - ) - (segment - (start 103.5517 158.5517) - (end 107.6514 158.5517) - (width 0.2) - (layer "F.Cu") - (net "Net-(J1-Pin_4)") - (uuid "6f487024-5944-49cc-ad76-f893b747e22e") - ) - (segment - (start 99 124.5) - (end 99 140) - (width 0.2) - (layer "F.Cu") - (net "Net-(J1-Pin_4)") - (uuid "e22b3c1d-b852-4c29-bcf2-56398ec1d85a") - ) - (segment - (start 98.73 124.23) - (end 99 124.5) - (width 0.2) - (layer "F.Cu") - (net "Net-(J1-Pin_4)") - (uuid "e7114066-17c9-4662-9e91-cff9775a4877") - ) - (segment - (start 103 144) - (end 103 158) - (width 0.2) - (layer "F.Cu") - (net "Net-(J1-Pin_4)") - (uuid "f1451fd3-7443-4ea4-bdf2-e6ca0cdb92d0") - ) - (segment - (start 101.27 122) - (end 101.27 125.23) - (width 0.2) - (layer "B.Cu") - (net "Net-(J1-Pin_5)") - (uuid "000a133e-659b-4a6e-bdf0-9ea9128fb374") - ) - (segment - (start 88.5 158) - (end 89.0317 158.5317) - (width 0.2) - (layer "B.Cu") - (net "Net-(J1-Pin_5)") - (uuid "08a82fc9-5581-4e3a-9477-cd04b3523843") - ) - (segment - (start 88.5 126.86863) - (end 88.5 158) - (width 0.2) - (layer "B.Cu") - (net "Net-(J1-Pin_5)") - (uuid "12798f7b-e6dd-44b5-99af-d613971f998d") - ) - (segment - (start 101 125.5) - (end 89.86863 125.5) - (width 0.2) - (layer "B.Cu") - (net "Net-(J1-Pin_5)") - (uuid "35d0cf17-91d3-45c3-b301-268949d843b7") - ) - (segment - (start 89.0317 158.5317) - (end 91.9864 158.5317) - (width 0.2) - (layer "B.Cu") - (net "Net-(J1-Pin_5)") - (uuid "6c6082ff-f9dd-47da-ab94-e567364e56f4") - ) - (segment - (start 101.27 125.23) - (end 101 125.5) - (width 0.2) - (layer "B.Cu") - (net "Net-(J1-Pin_5)") - (uuid "7d3afdbf-b791-4787-81d6-ad1a8ece320a") - ) - (segment - (start 89.86863 125.5) - (end 88.5 126.86863) - (width 0.2) - (layer "B.Cu") - (net "Net-(J1-Pin_5)") - (uuid "f1c706ab-7d5e-4e59-ac42-fe0379a0f7ed") - ) - (segment - (start 103 126) - (end 89.934315 126) - (width 0.2) - (layer "B.Cu") - (net "Net-(J1-Pin_6)") - (uuid "1230e546-81c6-4d57-a126-bcff6159bc21") - ) - (segment - (start 89.934315 126) - (end 89 126.934315) - (width 0.2) - (layer "B.Cu") - (net "Net-(J1-Pin_6)") - (uuid "20314abd-0eb1-465a-aa18-e1f396f64353") - ) - (segment - (start 103.81 122) - (end 103.81 125.19) - (width 0.2) - (layer "B.Cu") - (net "Net-(J1-Pin_6)") - (uuid "4a6d18a1-3993-4f5b-9c13-70cc93620668") - ) - (segment - (start 89.5083 155.9917) - (end 91.9864 155.9917) - (width 0.2) - (layer "B.Cu") - (net "Net-(J1-Pin_6)") - (uuid "5088023e-6294-4e99-836e-ff940318d9ca") - ) - (segment - (start 103.81 125.19) - (end 103 126) - (width 0.2) - (layer "B.Cu") - (net "Net-(J1-Pin_6)") - (uuid "5e1ff639-dace-4bc7-beed-8dd6868a745a") - ) - (segment - (start 89 126.934315) - (end 89 155.5) - (width 0.2) - (layer "B.Cu") - (net "Net-(J1-Pin_6)") - (uuid "8a981282-6824-460f-b34b-93973ceaf4f5") - ) - (segment - (start 89.5 156) - (end 89.5083 155.9917) - (width 0.2) - (layer "B.Cu") - (net "Net-(J1-Pin_6)") - (uuid "c921021f-c082-448b-9cda-f812acee5f4a") - ) - (segment - (start 89 155.5) - (end 89.5 156) - (width 0.2) - (layer "B.Cu") - (net "Net-(J1-Pin_6)") - (uuid "d3741b93-fa96-486c-85e3-4ae716ca327e") - ) - (segment - (start 106.35 125.65) - (end 105.5 126.5) - (width 0.2) - (layer "B.Cu") - (net "Net-(J1-Pin_7)") - (uuid "1b6e7288-a5ea-45dc-82d1-a919825030b3") - ) - (segment - (start 90.0483 153.4517) - (end 91.9864 153.4517) - (width 0.2) - (layer "B.Cu") - (net "Net-(J1-Pin_7)") - (uuid "3199c5b2-92a3-4cbf-ad40-b17c89bf640c") - ) - (segment - (start 90.0483 153.4517) - (end 89.5 152.9034) - (width 0.2) - (layer "B.Cu") - (net "Net-(J1-Pin_7)") - (uuid "53c00a77-8ded-4302-a030-ac2b83b3442e") - ) - (segment - (start 106.35 122) - (end 106.35 125.65) - (width 0.2) - (layer "B.Cu") - (net "Net-(J1-Pin_7)") - (uuid "9dc7f84e-8e4c-4e32-b668-679fba78f24e") - ) - (segment - (start 105.5 126.5) - (end 90 126.5) - (width 0.2) - (layer "B.Cu") - (net "Net-(J1-Pin_7)") - (uuid "b7300d44-734f-4cc6-83dd-13f424649981") - ) - (segment - (start 89.5 127) - (end 89.5 152.9034) - (width 0.2) - (layer "B.Cu") - (net "Net-(J1-Pin_7)") - (uuid "b8ecb8a8-fc7b-48e8-ac9b-80cb6de0092a") - ) - (segment - (start 90 126.5) - (end 89.5 127) - (width 0.2) - (layer "B.Cu") - (net "Net-(J1-Pin_7)") - (uuid "fe29bba0-27d9-4883-a064-e1168637b14a") - ) - (segment - (start 83.46 167.71) - (end 83.46 159) - (width 0.5) - (layer "F.Cu") - (net "/BAT") - (uuid "040afead-fd7a-4a1c-ab16-b64fa3c73610") - ) - (segment - (start 114 167.25) - (end 113 168.25) - (width 0.5) - (layer "F.Cu") - (net "/BAT") - (uuid "0c1f316a-ae88-47de-92c1-fdd372ec9fbb") - ) - (segment - (start 84 168.25) - (end 83.46 167.71) - (width 0.5) - (layer "F.Cu") - (net "/BAT") - (uuid "5c44433b-44a3-44d4-9168-589156dee53c") - ) - (segment - (start 114 155.5) - (end 114 167.25) - (width 0.5) - (layer "F.Cu") - (net "/BAT") - (uuid "6c27b79f-31fb-4c6b-a7ea-bbe4e2cca97a") - ) - (segment - (start 117.5 154) - (end 115.5 154) - (width 0.5) - (layer "F.Cu") - (net "/BAT") - (uuid "95abbf4f-2a85-4a3d-9e09-cfe400edcb41") - ) - (segment - (start 113 168.25) - (end 84 168.25) - (width 0.5) - (layer "F.Cu") - (net "/BAT") - (uuid "b4ae55c7-89cb-4e2d-9156-23edab340da2") - ) - (segment - (start 115.5 154) - (end 114 155.5) - (width 0.5) - (layer "F.Cu") - (net "/BAT") - (uuid "e630f50b-b926-4ef3-bc24-275d438c0e16") - ) - (segment - (start 106.5 148.5) - (end 109.5 148.5) - (width 0.5) - (layer "F.Cu") - (net "/BAT_SW") - (uuid "e8ec9cb6-70c1-494a-8c01-b0bdccb4e884") - ) - (via - (at 109.5 148.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (net "/BAT_SW") - (uuid "3f6996f2-38e7-42a3-8387-8da28d9353af") - ) - (via - (at 106.5 148.5) - (size 0.6) - (drill 0.3) - (layers "F.Cu" "B.Cu") - (net "/BAT_SW") - (uuid "5825c634-9101-4129-9175-b59daa30a4c6") - ) - (segment - (start 98.5 152.96) - (end 98.46 153) - (width 0.5) - (layer "B.Cu") - (net "/BAT_SW") - (uuid "0bc33817-be40-48e1-8338-a32157721aa1") - ) - (segment - (start 109.5 148.5) - (end 113 148.5) - (width 0.5) - (layer "B.Cu") - (net "/BAT_SW") - (uuid "14f26547-233f-44fc-9a83-31610de9f999") - ) - (segment - (start 98.5 149.5) - (end 98.5 152.96) - (width 0.5) - (layer "B.Cu") - (net "/BAT_SW") - (uuid "4a1fc6b6-9478-4588-a5f0-6aeae560ce78") - ) - (segment - (start 115 152) - (end 117.5 152) - (width 0.5) - (layer "B.Cu") - (net "/BAT_SW") - (uuid "8394328d-4087-49f5-be35-cd64f02b8c5e") - ) - (segment - (start 114 149.5) - (end 114 151) - (width 0.5) - (layer "B.Cu") - (net "/BAT_SW") - (uuid "83f087b0-0c34-4240-b278-b2380021b1c7") - ) - (segment - (start 98.5 149.5) - (end 99.5 148.5) - (width 0.5) - (layer "B.Cu") - (net "/BAT_SW") - (uuid "b80262a6-2e65-4f52-a315-4052affb82e8") - ) - (segment - (start 99.5 148.5) - (end 106.5 148.5) - (width 0.5) - (layer "B.Cu") - (net "/BAT_SW") - (uuid "c6d1429e-1dac-4835-b904-375a5b7d3a09") - ) - (segment - (start 114 151) - (end 115 152) - (width 0.5) - (layer "B.Cu") - (net "/BAT_SW") - (uuid "d5912eec-ead1-43bd-a2c5-2ff583a71a5e") - ) - (segment - (start 113 148.5) - (end 114 149.5) - (width 0.5) - (layer "B.Cu") - (net "/BAT_SW") - (uuid "ff715e1f-bc5d-490f-94cc-6803dd2e958f") - ) - (zone - (net "GND") - (layer "F.Cu") - (uuid "205db35a-ae17-45e0-bcdd-36892c881484") - (hatch edge 0.5) - (connect_pads - (clearance 0.5) - ) - (min_thickness 0.25) - (fill yes - (thermal_gap 0.5) - (thermal_bridge_width 0.5) - (island_removal_mode 0) - ) - (polygon - (pts - (xy 80 80) (xy 120 80) (xy 120 169) (xy 80 169) - ) - ) - (filled_polygon - (layer "F.Cu") - (pts - (xy 119.442539 80.520185) (xy 119.488294 80.572989) (xy 119.4995 80.6245) (xy 119.4995 148.686689) - (xy 119.479815 148.753728) (xy 119.427011 148.799483) (xy 119.357853 148.809427) (xy 119.294297 148.780402) - (xy 119.287819 148.77437) (xy 119.192654 148.679205) (xy 119.192649 148.679201) (xy 118.988848 148.531132) - (xy 118.988847 148.531131) (xy 118.988845 148.53113) (xy 118.918747 148.495413) (xy 118.764383 148.41676) - (xy 118.524785 148.33891) (xy 118.275962 148.2995) (xy 116.724038 148.2995) (xy 116.599626 148.319205) - (xy 116.475214 148.33891) (xy 116.235616 148.41676) (xy 116.011151 148.531132) (xy 115.80735 148.679201) - (xy 115.807345 148.679205) (xy 115.629205 148.857345) (xy 115.629201 148.85735) (xy 115.481132 149.061151) - (xy 115.36676 149.285616) (xy 115.28891 149.525214) (xy 115.28891 149.525215) (xy 115.2495 149.774038) - (xy 115.2495 150.025962) (xy 115.288153 150.270005) (xy 115.28891 150.274785) (xy 115.36676 150.514383) - (xy 115.481132 150.738848) (xy 115.629201 150.942649) (xy 115.629205 150.942654) (xy 115.721061 151.03451) - (xy 115.754546 151.095833) (xy 115.756669 151.135446) (xy 115.749501 151.202116) (xy 115.7495 151.202135) - (xy 115.7495 152.79787) (xy 115.749501 152.797876) (xy 115.755908 152.857483) (xy 115.806202 152.992328) - (xy 115.806204 152.992331) (xy 115.850265 153.051189) (xy 115.874683 153.116652) (xy 115.859832 153.184925) - (xy 115.810427 153.234331) (xy 115.750999 153.2495) (xy 115.42608 153.2495) (xy 115.281092 153.27834) - (xy 115.281082 153.278343) (xy 115.144511 153.334912) (xy 115.144498 153.334919) (xy 115.021584 153.417048) - (xy 115.02158 153.417051) (xy 113.417048 155.021583) (xy 113.398916 155.048721) (xy 113.37399 155.086027) - (xy 113.334914 155.144507) (xy 113.334913 155.144509) (xy 113.278343 155.281082) (xy 113.27834 155.281092) - (xy 113.2495 155.426079) (xy 113.2495 166.88777) (xy 113.229815 166.954809) (xy 113.213181 166.975451) - (xy 112.725451 167.463181) (xy 112.664128 167.496666) (xy 112.63777 167.4995) (xy 108.342839 167.4995) - (xy 108.2758 167.479815) (xy 108.230045 167.427011) (xy 108.220101 167.357853) (xy 108.249126 167.294297) - (xy 108.286543 167.265016) (xy 108.313092 167.251488) (xy 108.313091 167.251488) (xy 108.313094 167.251487) - (xy 108.473864 167.134681) (xy 108.614381 166.994164) (xy 108.731187 166.833394) (xy 108.821405 166.656332) - (xy 108.882813 166.467336) (xy 108.9139 166.271061) (xy 108.9139 166.072339) (xy 108.882813 165.876064) - (xy 108.821405 165.687068) (xy 108.821405 165.687067) (xy 108.731186 165.510005) (xy 108.614381 165.349236) - (xy 108.473864 165.208719) (xy 108.313094 165.091913) (xy 108.156067 165.011903) (xy 108.105272 164.963929) - (xy 108.088477 164.896108) (xy 108.111014 164.829973) (xy 108.156069 164.790934) (xy 108.312822 164.711064) - (xy 108.350116 164.683968) (xy 107.735495 164.069347) (xy 107.822971 164.045908) (xy 107.92433 163.987389) - (xy 108.007089 163.90463) (xy 108.065608 163.803271) (xy 108.089047 163.715794) (xy 108.703668 164.330415) - (xy 108.730762 164.293125) (xy 108.820942 164.116137) (xy 108.882324 163.927223) (xy 108.882324 163.92722) - (xy 108.9134 163.731021) (xy 108.9134 163.532378) (xy 108.882324 163.336179) (xy 108.882324 163.336176) - (xy 108.820942 163.147262) (xy 108.730758 162.970267) (xy 108.703668 162.932983) (xy 108.089047 163.547604) - (xy 108.065608 163.460129) (xy 108.007089 163.35877) (xy 107.92433 163.276011) (xy 107.822971 163.217492) - (xy 107.735494 163.194052) (xy 108.350116 162.579431) (xy 108.350115 162.57943) (xy 108.312832 162.552341) - (xy 108.156068 162.472465) (xy 108.105272 162.42449) (xy 108.088477 162.356669) (xy 108.111015 162.290534) - (xy 108.156067 162.251496) (xy 108.313094 162.171487) (xy 108.473864 162.054681) (xy 108.614381 161.914164) - (xy 108.629529 161.893313) (xy 108.68486 161.850649) (xy 108.729847 161.8422) (xy 110.48222 161.8422) - (xy 110.579762 161.822796) (xy 110.627213 161.813358) (xy 110.763795 161.756784) (xy 110.813029 161.723886) - (xy 110.886716 161.674652) (xy 111.582951 160.978416) (xy 111.665084 160.855495) (xy 111.721658 160.718913) - (xy 111.731096 160.671462) (xy 111.7505 160.57392) (xy 111.7505 146.426081) (xy 111.744763 146.397242) - (xy 111.744763 146.39724) (xy 111.72166 146.281095) (xy 111.721659 146.281088) (xy 111.667408 146.150117) - (xy 111.665764 146.145522) (xy 111.582954 146.021588) (xy 111.582953 146.021587) (xy 111.582951 146.021584) - (xy 111.478416 145.917049) (xy 109.676819 144.115451) (xy 109.643334 144.054128) (xy 109.6405 144.02777) - (xy 109.6405 123.18722) (xy 109.660185 123.120181) (xy 109.691614 123.086902) (xy 109.769792 123.030104) - (xy 109.920104 122.879792) (xy 109.920106 122.879788) (xy 109.920109 122.879786) (xy 110.045048 122.70782) - (xy 110.045047 122.70782) (xy 110.045051 122.707816) (xy 110.141557 122.518412) (xy 110.207246 122.316243) - (xy 110.2405 122.106287) (xy 110.2405 121.893713) (xy 110.207246 121.683757) (xy 110.141557 121.481588) - (xy 110.045051 121.292184) (xy 110.045049 121.292181) (xy 110.045048 121.292179) (xy 109.920109 121.120213) - (xy 109.769786 120.96989) (xy 109.59782 120.844951) (xy 109.408414 120.748444) (xy 109.408413 120.748443) - (xy 109.408412 120.748443) (xy 109.206243 120.682754) (xy 109.206241 120.682753) (xy 109.20624 120.682753) - (xy 109.044957 120.657208) (xy 108.996287 120.6495) (xy 108.783713 120.6495) (xy 108.735042 120.657208) - (xy 108.57376 120.682753) (xy 108.573757 120.682754) (xy 108.376679 120.746789) (xy 108.371585 120.748444) - (xy 108.182179 120.844951) (xy 108.010213 120.96989) (xy 107.85989 121.120213) (xy 107.734949 121.292182) - (xy 107.730484 121.300946) (xy 107.682509 121.351742) (xy 107.614688 121.368536) (xy 107.548553 121.345998) - (xy 107.509516 121.300946) (xy 107.50505 121.292182) (xy 107.380109 121.120213) (xy 107.229786 120.96989) - (xy 107.05782 120.844951) (xy 106.868414 120.748444) (xy 106.868413 120.748443) (xy 106.868412 120.748443) - (xy 106.666243 120.682754) (xy 106.666241 120.682753) (xy 106.66624 120.682753) (xy 106.504957 120.657208) - (xy 106.456287 120.6495) (xy 106.243713 120.6495) (xy 106.195042 120.657208) (xy 106.03376 120.682753) - (xy 106.033757 120.682754) (xy 105.836679 120.746789) (xy 105.831585 120.748444) (xy 105.642179 120.844951) - (xy 105.470213 120.96989) (xy 105.31989 121.120213) (xy 105.194949 121.292182) (xy 105.190484 121.300946) - (xy 105.142509 121.351742) (xy 105.074688 121.368536) (xy 105.008553 121.345998) (xy 104.969516 121.300946) - (xy 104.96505 121.292182) (xy 104.840109 121.120213) (xy 104.689786 120.96989) (xy 104.51782 120.844951) - (xy 104.328414 120.748444) (xy 104.328413 120.748443) (xy 104.328412 120.748443) (xy 104.126243 120.682754) - (xy 104.126241 120.682753) (xy 104.12624 120.682753) (xy 103.964957 120.657208) (xy 103.916287 120.6495) - (xy 103.703713 120.6495) (xy 103.655042 120.657208) (xy 103.49376 120.682753) (xy 103.493757 120.682754) - (xy 103.296679 120.746789) (xy 103.291585 120.748444) (xy 103.102179 120.844951) (xy 102.930213 120.96989) - (xy 102.77989 121.120213) (xy 102.654949 121.292182) (xy 102.650484 121.300946) (xy 102.602509 121.351742) - (xy 102.534688 121.368536) (xy 102.468553 121.345998) (xy 102.429516 121.300946) (xy 102.42505 121.292182) - (xy 102.300109 121.120213) (xy 102.149786 120.96989) (xy 101.97782 120.844951) (xy 101.788414 120.748444) - (xy 101.788413 120.748443) (xy 101.788412 120.748443) (xy 101.586243 120.682754) (xy 101.586241 120.682753) - (xy 101.58624 120.682753) (xy 101.424957 120.657208) (xy 101.376287 120.6495) (xy 101.163713 120.6495) - (xy 101.141268 120.653055) (xy 100.953759 120.682753) (xy 100.762818 120.744794) (xy 100.734698 120.745597) - (xy 100.706853 120.749601) (xy 100.700241 120.746581) (xy 100.692977 120.746789) (xy 100.668887 120.732262) - (xy 100.643297 120.720576) (xy 100.639367 120.714462) (xy 100.633144 120.710709) (xy 100.620731 120.685462) - (xy 100.605523 120.661798) (xy 100.604046 120.651527) (xy 100.602316 120.648008) (xy 100.6005 120.626863) - (xy 100.6005 120.58906) (xy 100.600501 120.589047) (xy 100.600501 120.420944) (xy 100.594637 120.399059) - (xy 100.559577 120.268216) (xy 100.538058 120.230943) (xy 100.480524 120.13129) (xy 100.480518 120.131282) - (xy 99.868717 119.519481) (xy 99.868716 119.51948) (xy 99.781904 119.46936) (xy 99.781904 119.469359) - (xy 99.7819 119.469358) (xy 99.731785 119.440423) (xy 99.579057 119.399499) (xy 99.420943 119.399499) - (xy 99.413347 119.399499) (xy 99.413331 119.3995) (xy 96.579057 119.3995) (xy 96.420942 119.3995) - (xy 96.268215 119.440423) (xy 96.268214 119.440423) (xy 96.268212 119.440424) (xy 96.268209 119.440425) - (xy 96.218096 119.469359) (xy 96.218095 119.46936) (xy 96.174689 119.49442) (xy 96.131285 119.519479) - (xy 96.131282 119.519481) (xy 95.709481 119.941282) (xy 95.709479 119.941285) (xy 95.664335 120.019479) - (xy 95.664333 120.019481) (xy 95.630425 120.078209) (xy 95.630424 120.07821) (xy 95.616203 120.131284) - (xy 95.589499 120.230943) (xy 95.589499 120.230945) (xy 95.589499 120.399046) (xy 95.5895 120.399059) - (xy 95.5895 120.714281) (xy 95.569815 120.78132) (xy 95.521795 120.824765) (xy 95.482185 120.844947) - (xy 95.482184 120.844948) (xy 95.310213 120.96989) (xy 95.15989 121.120213) (xy 95.034949 121.292182) - (xy 95.030484 121.300946) (xy 94.982509 121.351742) (xy 94.914688 121.368536) (xy 94.848553 121.345998) - (xy 94.809516 121.300946) (xy 94.80505 121.292182) (xy 94.680109 121.120213) (xy 94.529786 120.96989) - (xy 94.35782 120.844951) (xy 94.168414 120.748444) (xy 94.168413 120.748443) (xy 94.168412 120.748443) - (xy 93.966243 120.682754) (xy 93.966241 120.682753) (xy 93.96624 120.682753) (xy 93.804957 120.657208) - (xy 93.756287 120.6495) (xy 93.543713 120.6495) (xy 93.495042 120.657208) (xy 93.33376 120.682753) - (xy 93.333757 120.682754) (xy 93.136679 120.746789) (xy 93.131585 120.748444) (xy 92.942179 120.844951) - (xy 92.770215 120.969889) (xy 92.656285 121.083819) (xy 92.594962 121.117303) (xy 92.52527 121.112319) - (xy 92.469337 121.070447) (xy 92.452422 121.03947) (xy 92.403354 120.907913) (xy 92.40335 120.907906) - (xy 92.31719 120.792812) (xy 92.317187 120.792809) (xy 92.202093 120.706649) (xy 92.202086 120.706645) - (xy 92.067379 120.656403) (xy 92.067372 120.656401) (xy 92.007844 120.65) (xy 91.36 120.65) (xy 91.36 121.566988) - (xy 91.302993 121.534075) (xy 91.175826 121.5) (xy 91.044174 121.5) (xy 90.917007 121.534075) (xy 90.86 121.566988) - (xy 90.86 120.65) (xy 90.212155 120.65) (xy 90.152627 120.656401) (xy 90.15262 120.656403) (xy 90.017913 120.706645) - (xy 90.017906 120.706649) (xy 89.902812 120.792809) (xy 89.902809 120.792812) (xy 89.816649 120.907906) - (xy 89.816645 120.907913) (xy 89.766403 121.04262) (xy 89.766401 121.042627) (xy 89.76 121.102155) - (xy 89.76 121.75) (xy 90.676988 121.75) (xy 90.644075 121.807007) (xy 90.61 121.934174) (xy 90.61 122.065826) - (xy 90.644075 122.192993) (xy 90.676988 122.25) (xy 89.76 122.25) (xy 89.76 122.897844) (xy 89.766401 122.957372) - (xy 89.766403 122.957379) (xy 89.816645 123.092086) (xy 89.816649 123.092093) (xy 89.902809 123.207187) - (xy 89.902812 123.20719) (xy 90.017906 123.29335) (xy 90.017913 123.293354) (xy 90.15262 123.343596) - (xy 90.152627 123.343598) (xy 90.212155 123.349999) (xy 90.212172 123.35) (xy 90.86 123.35) (xy 90.86 122.433012) - (xy 90.917007 122.465925) (xy 91.044174 122.5) (xy 91.175826 122.5) (xy 91.302993 122.465925) (xy 91.36 122.433012) - (xy 91.36 123.35) (xy 92.007828 123.35) (xy 92.007844 123.349999) (xy 92.067372 123.343598) (xy 92.067379 123.343596) - (xy 92.202086 123.293354) (xy 92.202093 123.29335) (xy 92.317187 123.20719) (xy 92.31719 123.207187) - (xy 92.40335 123.092093) (xy 92.403354 123.092086) (xy 92.452422 122.960529) (xy 92.494293 122.904595) - (xy 92.559757 122.880178) (xy 92.62803 122.89503) (xy 92.656285 122.916181) (xy 92.770213 123.030109) - (xy 92.942179 123.155048) (xy 92.942181 123.155049) (xy 92.942184 123.155051) (xy 93.131588 123.251557) - (xy 93.333757 123.317246) (xy 93.543713 123.3505) (xy 93.543714 123.3505) (xy 93.756286 123.3505) - (xy 93.756287 123.3505) (xy 93.966243 123.317246) (xy 94.168412 123.251557) (xy 94.357816 123.155051) - (xy 94.444471 123.092093) (xy 94.529786 123.030109) (xy 94.529788 123.030106) (xy 94.529792 123.030104) - (xy 94.680104 122.879792) (xy 94.680106 122.879788) (xy 94.680109 122.879786) (xy 94.805048 122.70782) - (xy 94.805047 122.70782) (xy 94.805051 122.707816) (xy 94.809514 122.699054) (xy 94.857488 122.648259) - (xy 94.925308 122.631463) (xy 94.991444 122.653999) (xy 95.030486 122.699056) (xy 95.034951 122.70782) - (xy 95.15989 122.879786) (xy 95.310213 123.030109) (xy 95.482179 123.155048) (xy 95.482181 123.155049) - (xy 95.482184 123.155051) (xy 95.671588 123.251557) (xy 95.873757 123.317246) (xy 96.083713 123.3505) - (xy 96.083714 123.3505) (xy 96.296286 123.3505) (xy 96.296287 123.3505) (xy 96.506243 123.317246) - (xy 96.708412 123.251557) (xy 96.897816 123.155051) (xy 96.984471 123.092093) (xy 97.069786 123.030109) - (xy 97.069788 123.030106) (xy 97.069792 123.030104) (xy 97.220104 122.879792) (xy 97.220106 122.879788) - (xy 97.220109 122.879786) (xy 97.345048 122.70782) (xy 97.345047 122.70782) (xy 97.345051 122.707816) - (xy 97.349514 122.699054) (xy 97.397488 122.648259) (xy 97.465308 122.631463) (xy 97.531444 122.653999) - (xy 97.570486 122.699056) (xy 97.574951 122.70782) (xy 97.69989 122.879786) (xy 97.850213 123.030109) - (xy 98.022184 123.155051) (xy 98.022184 123.155052) (xy 98.061793 123.175233) (xy 98.11259 123.223206) - (xy 98.1295 123.285718) (xy 98.1295 124.14333) (xy 98.129499 124.143348) (xy 98.129499 124.309054) - (xy 98.129498 124.309054) (xy 98.170423 124.461785) (xy 98.199358 124.5119) (xy 98.199359 124.511904) - (xy 98.19936 124.511904) (xy 98.249479 124.598714) (xy 98.249481 124.598717) (xy 98.363181 124.712417) - (xy 98.396666 124.77374) (xy 98.3995 124.800098) (xy 98.3995 139.91333) (xy 98.399499 139.913348) - (xy 98.399499 140.079054) (xy 98.399498 140.079054) (xy 98.440423 140.231785) (xy 98.469358 140.2819) - (xy 98.469359 140.281904) (xy 98.46936 140.281904) (xy 98.519479 140.368714) (xy 98.519481 140.368717) - (xy 98.638349 140.487585) (xy 98.638355 140.48759) (xy 102.363181 144.212416) (xy 102.396666 144.273739) - (xy 102.3995 144.300097) (xy 102.3995 157.91333) (xy 102.399499 157.913348) (xy 102.399499 158.079054) - (xy 102.399498 158.079054) (xy 102.410526 158.120208) (xy 102.440423 158.231785) (xy 102.450651 158.2495) - (xy 102.519477 158.368712) (xy 102.519479 158.368715) (xy 102.51948 158.368716) (xy 102.631284 158.48052) - (xy 102.631285 158.480521) (xy 103.182984 159.03222) (xy 103.182986 159.032221) (xy 103.18299 159.032224) - (xy 103.311271 159.106286) (xy 103.319916 159.111277) (xy 103.472643 159.152201) (xy 103.472645 159.152201) - (xy 103.638354 159.152201) (xy 103.63837 159.1522) (xy 106.46467 159.1522) (xy 106.531709 159.171885) - (xy 106.568591 159.209566) (xy 106.568749 159.209452) (xy 106.569527 159.210523) (xy 106.5704 159.211415) - (xy 106.57161 159.21339) (xy 106.571613 159.213394) (xy 106.688419 159.374164) (xy 106.828936 159.514681) - (xy 106.989706 159.631487) (xy 107.047803 159.661089) (xy 107.14618 159.711215) (xy 107.196976 159.75919) - (xy 107.213771 159.827011) (xy 107.191233 159.893146) (xy 107.14618 159.932185) (xy 106.989705 160.011913) - (xy 106.828933 160.128721) (xy 106.688421 160.269233) (xy 106.571613 160.430005) (xy 106.481394 160.607067) - (xy 106.481393 160.60707) (xy 106.419987 160.796062) (xy 106.3889 160.992339) (xy 106.3889 161.19106) - (xy 106.419987 161.387337) (xy 106.481393 161.576329) (xy 106.481394 161.576332) (xy 106.540433 161.6922) - (xy 106.571613 161.753394) (xy 106.688419 161.914164) (xy 106.828936 162.054681) (xy 106.989706 162.171487) - (xy 107.146732 162.251496) (xy 107.197527 162.299469) (xy 107.214322 162.36729) (xy 107.191785 162.433425) - (xy 107.146732 162.472464) (xy 106.989966 162.552341) (xy 106.952683 162.579429) (xy 106.952682 162.57943) - (xy 107.567306 163.194052) (xy 107.479829 163.217492) (xy 107.37847 163.276011) (xy 107.295711 163.35877) - (xy 107.237192 163.460129) (xy 107.213752 163.547605) (xy 106.59913 162.932982) (xy 106.599129 162.932983) - (xy 106.572043 162.970264) (xy 106.481857 163.147262) (xy 106.420475 163.336176) (xy 106.420475 163.336179) - (xy 106.3894 163.532378) (xy 106.3894 163.731021) (xy 106.420475 163.92722) (xy 106.420475 163.927223) - (xy 106.481857 164.116137) (xy 106.572041 164.293132) (xy 106.59913 164.330415) (xy 106.599131 164.330416) - (xy 107.213752 163.715794) (xy 107.237192 163.803271) (xy 107.295711 163.90463) (xy 107.37847 163.987389) - (xy 107.479829 164.045908) (xy 107.567305 164.069347) (xy 106.952683 164.683968) (xy 106.952683 164.683969) - (xy 106.989967 164.711058) (xy 107.146731 164.790934) (xy 107.197527 164.838909) (xy 107.214322 164.90673) - (xy 107.191784 164.972865) (xy 107.146731 165.011904) (xy 106.989705 165.091913) (xy 106.828933 165.208721) - (xy 106.688421 165.349233) (xy 106.571613 165.510005) (xy 106.481394 165.687067) (xy 106.481393 165.68707) - (xy 106.419987 165.876062) (xy 106.3889 166.072339) (xy 106.3889 166.27106) (xy 106.419987 166.467337) - (xy 106.481393 166.656329) (xy 106.481394 166.656332) (xy 106.571613 166.833394) (xy 106.688419 166.994164) - (xy 106.828936 167.134681) (xy 106.88592 167.176082) (xy 106.989707 167.251488) (xy 107.016257 167.265016) - (xy 107.067052 167.31299) (xy 107.083847 167.380811) (xy 107.061309 167.446946) (xy 107.006594 167.490397) - (xy 106.959961 167.4995) (xy 93.102839 167.4995) (xy 93.0358 167.479815) (xy 92.990045 167.427011) - (xy 92.980101 167.357853) (xy 93.009126 167.294297) (xy 93.046543 167.265016) (xy 93.073092 167.251488) - (xy 93.073091 167.251488) (xy 93.073094 167.251487) (xy 93.233864 167.134681) (xy 93.374381 166.994164) - (xy 93.491187 166.833394) (xy 93.581405 166.656332) (xy 93.642813 166.467336) (xy 93.6739 166.271061) - (xy 93.6739 166.072339) (xy 93.642813 165.876064) (xy 93.581405 165.687068) (xy 93.581405 165.687067) - (xy 93.491186 165.510005) (xy 93.374381 165.349236) (xy 93.233864 165.208719) (xy 93.073094 165.091913) - (xy 92.916618 165.012184) (xy 92.865823 164.96421) (xy 92.849028 164.896389) (xy 92.871565 164.830254) - (xy 92.916618 164.791215) (xy 93.073094 164.711487) (xy 93.233864 164.594681) (xy 93.374381 164.454164) - (xy 93.491187 164.293394) (xy 93.581405 164.116332) (xy 93.642813 163.927336) (xy 93.6739 163.731061) - (xy 93.6739 163.532339) (xy 93.642813 163.336064) (xy 93.581405 163.147068) (xy 93.581405 163.147067) - (xy 93.535435 163.056849) (xy 93.491187 162.970006) (xy 93.374381 162.809236) (xy 93.233864 162.668719) - (xy 93.073094 162.551913) (xy 92.916618 162.472184) (xy 92.865823 162.42421) (xy 92.849028 162.356389) - (xy 92.871565 162.290254) (xy 92.916618 162.251215) (xy 93.073094 162.171487) (xy 93.233864 162.054681) - (xy 93.374381 161.914164) (xy 93.491187 161.753394) (xy 93.491189 161.753389) (xy 93.4924 161.751415) - (xy 93.493056 161.750821) (xy 93.494051 161.749452) (xy 93.494338 161.74966) (xy 93.54421 161.704537) - (xy 93.59813 161.6922) (xy 94.321631 161.6922) (xy 94.321647 161.692201) (xy 94.329243 161.692201) - (xy 94.487354 161.692201) (xy 94.487357 161.692201) (xy 94.640085 161.651277) (xy 94.690204 161.622339) - (xy 94.777016 161.57222) (xy 94.88882 161.460416) (xy 94.88882 161.460414) (xy 94.899028 161.450207) - (xy 94.89903 161.450204) (xy 95.368713 160.980521) (xy 95.368716 160.98052) (xy 95.48052 160.868716) - (xy 95.530639 160.781904) (xy 95.559577 160.731785) (xy 95.6005 160.579057) (xy 95.6005 160.420943) - (xy 95.6005 145.579765) (xy 95.620185 145.512726) (xy 95.621398 145.510874) (xy 95.70939 145.379185) - (xy 95.70939 145.379184) (xy 95.709394 145.379179) (xy 95.769737 145.233497) (xy 95.8005 145.078842) - (xy 95.8005 144.921158) (xy 95.8005 144.921155) (xy 95.800499 144.921153) (xy 95.769738 144.76651) - (xy 95.769737 144.766503) (xy 95.761034 144.745492) (xy 95.709397 144.620827) (xy 95.70939 144.620814) - (xy 95.621789 144.489711) (xy 95.621786 144.489707) (xy 95.510292 144.378213) (xy 95.510288 144.37821) - (xy 95.379185 144.290609) (xy 95.379172 144.290602) (xy 95.233501 144.230264) (xy 95.233489 144.230261) - (xy 95.078845 144.1995) (xy 95.078842 144.1995) (xy 94.921158 144.1995) (xy 94.921155 144.1995) - (xy 94.76651 144.230261) (xy 94.766498 144.230264) (xy 94.620827 144.290602) (xy 94.620814 144.290609) - (xy 94.489711 144.37821) (xy 94.489707 144.378213) (xy 94.378213 144.489707) (xy 94.37821 144.489711) - (xy 94.290609 144.620814) (xy 94.290602 144.620827) (xy 94.230264 144.766498) (xy 94.230261 144.76651) - (xy 94.1995 144.921153) (xy 94.1995 145.078846) (xy 94.230261 145.233489) (xy 94.230264 145.233501) - (xy 94.290602 145.379172) (xy 94.290609 145.379185) (xy 94.378602 145.510874) (xy 94.39948 145.577551) - (xy 94.3995 145.579765) (xy 94.3995 160.199903) (xy 94.390855 160.229343) (xy 94.384332 160.25933) - (xy 94.380577 160.264345) (xy 94.379815 160.266942) (xy 94.363181 160.287584) (xy 94.195884 160.454881) - (xy 94.134561 160.488366) (xy 94.108203 160.4912) (xy 93.59813 160.4912) (xy 93.531091 160.471515) - (xy 93.494208 160.433833) (xy 93.494051 160.433948) (xy 93.493272 160.432876) (xy 93.4924 160.431985) - (xy 93.491189 160.430009) (xy 93.433059 160.35) (xy 93.374381 160.269236) (xy 93.233864 160.128719) - (xy 93.073094 160.011913) (xy 92.916618 159.932184) (xy 92.865823 159.88421) (xy 92.849028 159.816389) - (xy 92.871565 159.750254) (xy 92.916618 159.711215) (xy 93.073094 159.631487) (xy 93.233864 159.514681) - (xy 93.374381 159.374164) (xy 93.491187 159.213394) (xy 93.581405 159.036332) (xy 93.642813 158.847336) - (xy 93.6739 158.651061) (xy 93.6739 158.452339) (xy 93.642813 158.256064) (xy 93.592811 158.102172) - (xy 93.581406 158.06707) (xy 93.581405 158.067067) (xy 93.516081 157.938863) (xy 93.491187 157.890006) - (xy 93.374381 157.729236) (xy 93.233864 157.588719) (xy 93.073094 157.471913) (xy 92.916618 157.392184) - (xy 92.865823 157.34421) (xy 92.849028 157.276389) (xy 92.871565 157.210254) (xy 92.916618 157.171215) - (xy 93.073094 157.091487) (xy 93.233864 156.974681) (xy 93.374381 156.834164) (xy 93.491187 156.673394) - (xy 93.581405 156.496332) (xy 93.642813 156.307336) (xy 93.6739 156.111061) (xy 93.6739 155.912339) - (xy 93.642813 155.716064) (xy 93.581405 155.527068) (xy 93.581405 155.527067) (xy 93.491186 155.350005) - (xy 93.374381 155.189236) (xy 93.233864 155.048719) (xy 93.073094 154.931913) (xy 92.916618 154.852184) - (xy 92.865823 154.80421) (xy 92.849028 154.736389) (xy 92.871565 154.670254) (xy 92.916618 154.631215) - (xy 93.073094 154.551487) (xy 93.233864 154.434681) (xy 93.374381 154.294164) (xy 93.491187 154.133394) - (xy 93.581405 153.956332) (xy 93.642813 153.767336) (xy 93.6739 153.571061) (xy 93.6739 153.372339) - (xy 93.642813 153.176064) (xy 93.602239 153.051188) (xy 93.581406 152.98707) (xy 93.581405 152.987067) - (xy 93.515377 152.857482) (xy 93.491187 152.810006) (xy 93.374381 152.649236) (xy 93.233864 152.508719) - (xy 93.073094 152.391913) (xy 92.916618 152.312184) (xy 92.865823 152.26421) (xy 92.849028 152.196389) - (xy 92.871565 152.130254) (xy 92.916618 152.091215) (xy 93.073094 152.011487) (xy 93.233864 151.894681) - (xy 93.374381 151.754164) (xy 93.491187 151.593394) (xy 93.581405 151.416332) (xy 93.642813 151.227336) - (xy 93.6739 151.031061) (xy 93.6739 150.832339) (xy 93.642813 150.636064) (xy 93.603277 150.514383) - (xy 93.581406 150.44707) (xy 93.581405 150.447067) (xy 93.491186 150.270005) (xy 93.374381 150.109236) - (xy 93.233864 149.968719) (xy 93.073094 149.851913) (xy 92.896032 149.761694) (xy 92.896029 149.761693) - (xy 92.707037 149.700287) (xy 92.608898 149.684743) (xy 92.510761 149.6692) (xy 92.312039 149.6692) - (xy 92.246614 149.679562) (xy 92.115762 149.700287) (xy 91.92677 149.761693) (xy 91.926767 149.761694) - (xy 91.749705 149.851913) (xy 91.588933 149.968721) (xy 91.448421 150.109233) (xy 91.331613 150.270005) - (xy 91.241394 150.447067) (xy 91.241393 150.44707) (xy 91.179987 150.636062) (xy 91.159485 150.765505) - (xy 91.1489 150.832339) (xy 91.1489 151.031061) (xy 91.154542 151.066685) (xy 91.179987 151.227337) - (xy 91.241393 151.416329) (xy 91.241394 151.416332) (xy 91.331613 151.593394) (xy 91.448419 151.754164) - (xy 91.588936 151.894681) (xy 91.749706 152.011487) (xy 91.868232 152.071879) (xy 91.90618 152.091215) - (xy 91.956976 152.13919) (xy 91.973771 152.207011) (xy 91.951233 152.273146) (xy 91.90618 152.312185) - (xy 91.749705 152.391913) (xy 91.588933 152.508721) (xy 91.448421 152.649233) (xy 91.331613 152.810005) - (xy 91.241394 152.987067) (xy 91.241393 152.98707) (xy 91.179987 153.176062) (xy 91.1489 153.372339) - (xy 91.1489 153.57106) (xy 91.179987 153.767337) (xy 91.241393 153.956329) (xy 91.241394 153.956332) - (xy 91.300433 154.0722) (xy 91.331613 154.133394) (xy 91.448419 154.294164) (xy 91.588936 154.434681) - (xy 91.749706 154.551487) (xy 91.868232 154.611879) (xy 91.90618 154.631215) (xy 91.956976 154.67919) - (xy 91.973771 154.747011) (xy 91.951233 154.813146) (xy 91.90618 154.852185) (xy 91.749705 154.931913) - (xy 91.588933 155.048721) (xy 91.448421 155.189233) (xy 91.331613 155.350005) (xy 91.241394 155.527067) - (xy 91.241393 155.52707) (xy 91.179987 155.716062) (xy 91.1489 155.912339) (xy 91.1489 156.11106) - (xy 91.179987 156.307337) (xy 91.241393 156.496329) (xy 91.241394 156.496332) (xy 91.322447 156.655405) - (xy 91.331613 156.673394) (xy 91.448419 156.834164) (xy 91.588936 156.974681) (xy 91.749706 157.091487) - (xy 91.868232 157.151879) (xy 91.90618 157.171215) (xy 91.956976 157.21919) (xy 91.973771 157.287011) - (xy 91.951233 157.353146) (xy 91.90618 157.392185) (xy 91.749705 157.471913) (xy 91.588933 157.588721) - (xy 91.448421 157.729233) (xy 91.331613 157.890005) (xy 91.241394 158.067067) (xy 91.241393 158.06707) - (xy 91.179987 158.256062) (xy 91.1489 158.452339) (xy 91.1489 158.65106) (xy 91.179987 158.847337) - (xy 91.241393 159.036329) (xy 91.241394 159.036332) (xy 91.329604 159.209452) (xy 91.331613 159.213394) - (xy 91.448419 159.374164) (xy 91.588936 159.514681) (xy 91.749706 159.631487) (xy 91.807803 159.661089) - (xy 91.90618 159.711215) (xy 91.956976 159.75919) (xy 91.973771 159.827011) (xy 91.951233 159.893146) - (xy 91.90618 159.932185) (xy 91.749705 160.011913) (xy 91.588933 160.128721) (xy 91.448421 160.269233) - (xy 91.331613 160.430005) (xy 91.241394 160.607067) (xy 91.241393 160.60707) (xy 91.179987 160.796062) - (xy 91.1489 160.992339) (xy 91.1489 161.19106) (xy 91.179987 161.387337) (xy 91.241393 161.576329) - (xy 91.241394 161.576332) (xy 91.300433 161.6922) (xy 91.331613 161.753394) (xy 91.448419 161.914164) - (xy 91.588936 162.054681) (xy 91.749706 162.171487) (xy 91.868232 162.231879) (xy 91.90618 162.251215) - (xy 91.956976 162.29919) (xy 91.973771 162.367011) (xy 91.951233 162.433146) (xy 91.90618 162.472185) - (xy 91.749705 162.551913) (xy 91.588933 162.668721) (xy 91.448421 162.809233) (xy 91.331613 162.970005) - (xy 91.241394 163.147067) (xy 91.241393 163.14707) (xy 91.179987 163.336062) (xy 91.1489 163.532339) - (xy 91.1489 163.73106) (xy 91.179987 163.927337) (xy 91.241393 164.116329) (xy 91.241394 164.116332) - (xy 91.331476 164.293125) (xy 91.331613 164.293394) (xy 91.448419 164.454164) (xy 91.588936 164.594681) - (xy 91.749706 164.711487) (xy 91.868232 164.771879) (xy 91.90618 164.791215) (xy 91.956976 164.83919) - (xy 91.973771 164.907011) (xy 91.951233 164.973146) (xy 91.90618 165.012185) (xy 91.749705 165.091913) - (xy 91.588933 165.208721) (xy 91.448421 165.349233) (xy 91.331613 165.510005) (xy 91.241394 165.687067) - (xy 91.241393 165.68707) (xy 91.179987 165.876062) (xy 91.1489 166.072339) (xy 91.1489 166.27106) - (xy 91.179987 166.467337) (xy 91.241393 166.656329) (xy 91.241394 166.656332) (xy 91.331613 166.833394) - (xy 91.448419 166.994164) (xy 91.588936 167.134681) (xy 91.64592 167.176082) (xy 91.749707 167.251488) - (xy 91.776257 167.265016) (xy 91.827052 167.31299) (xy 91.843847 167.380811) (xy 91.821309 167.446946) - (xy 91.766594 167.490397) (xy 91.719961 167.4995) (xy 84.36223 167.4995) (xy 84.332787 167.490854) - (xy 84.302801 167.484331) (xy 84.297786 167.480577) (xy 84.295191 167.479815) (xy 84.274547 167.46318) - (xy 84.246817 167.435449) (xy 84.213333 167.374125) (xy 84.2105 167.347769) (xy 84.2105 160.18722) - (xy 84.230185 160.120181) (xy 84.261614 160.086902) (xy 84.339792 160.030104) (xy 84.453717 159.916178) - (xy 84.515036 159.882696) (xy 84.584728 159.88768) (xy 84.640662 159.929551) (xy 84.657577 159.960528) - (xy 84.706646 160.092088) (xy 84.706649 160.092093) (xy 84.792809 160.207187) (xy 84.792812 160.20719) - (xy 84.907906 160.29335) (xy 84.907913 160.293354) (xy 85.04262 160.343596) (xy 85.042627 160.343598) - (xy 85.102155 160.349999) (xy 85.102172 160.35) (xy 85.75 160.35) (xy 85.75 159.433012) (xy 85.807007 159.465925) - (xy 85.934174 159.5) (xy 86.065826 159.5) (xy 86.192993 159.465925) (xy 86.25 159.433012) (xy 86.25 160.35) - (xy 86.897828 160.35) (xy 86.897844 160.349999) (xy 86.957372 160.343598) (xy 86.957379 160.343596) - (xy 87.092086 160.293354) (xy 87.092093 160.29335) (xy 87.207187 160.20719) (xy 87.20719 160.207187) - (xy 87.29335 160.092093) (xy 87.293354 160.092086) (xy 87.343596 159.957379) (xy 87.343598 159.957372) - (xy 87.349999 159.897844) (xy 87.35 159.897827) (xy 87.35 159.25) (xy 86.433012 159.25) (xy 86.465925 159.192993) - (xy 86.5 159.065826) (xy 86.5 158.934174) (xy 86.465925 158.807007) (xy 86.433012 158.75) (xy 87.35 158.75) - (xy 87.35 158.102172) (xy 87.349999 158.102155) (xy 87.343598 158.042627) (xy 87.343596 158.04262) - (xy 87.293354 157.907913) (xy 87.29335 157.907906) (xy 87.20719 157.792812) (xy 87.207187 157.792809) - (xy 87.092093 157.706649) (xy 87.092086 157.706645) (xy 86.957379 157.656403) (xy 86.957372 157.656401) - (xy 86.897844 157.65) (xy 86.25 157.65) (xy 86.25 158.566988) (xy 86.192993 158.534075) (xy 86.065826 158.5) - (xy 85.934174 158.5) (xy 85.807007 158.534075) (xy 85.75 158.566988) (xy 85.75 157.65) (xy 85.102155 157.65) - (xy 85.042627 157.656401) (xy 85.04262 157.656403) (xy 84.907913 157.706645) (xy 84.907906 157.706649) - (xy 84.792812 157.792809) (xy 84.792809 157.792812) (xy 84.706649 157.907906) (xy 84.706646 157.907912) - (xy 84.657577 158.039471) (xy 84.615705 158.095404) (xy 84.550241 158.119821) (xy 84.481968 158.104969) - (xy 84.453714 158.083818) (xy 84.339786 157.96989) (xy 84.16782 157.844951) (xy 83.978414 157.748444) - (xy 83.978413 157.748443) (xy 83.978412 157.748443) (xy 83.776243 157.682754) (xy 83.776241 157.682753) - (xy 83.77624 157.682753) (xy 83.614957 157.657208) (xy 83.566287 157.6495) (xy 83.353713 157.6495) - (xy 83.305042 157.657208) (xy 83.14376 157.682753) (xy 82.941585 157.748444) (xy 82.752179 157.844951) - (xy 82.580213 157.96989) (xy 82.42989 158.120213) (xy 82.304951 158.292179) (xy 82.208444 158.481585) - (xy 82.142753 158.68376) (xy 82.1095 158.893713) (xy 82.1095 159.106286) (xy 82.142289 159.313311) - (xy 82.142754 159.316243) (xy 82.161574 159.374166) (xy 82.208444 159.518414) (xy 82.304951 159.70782) - (xy 82.42989 159.879786) (xy 82.429896 159.879792) (xy 82.580208 160.030104) (xy 82.658384 160.086902) - (xy 82.701051 160.142231) (xy 82.7095 160.18722) (xy 82.7095 167.783918) (xy 82.7095 167.78392) - (xy 82.709499 167.78392) (xy 82.73834 167.928907) (xy 82.738343 167.928917) (xy 82.794914 168.065492) - (xy 82.827812 168.114727) (xy 82.827813 168.11473) (xy 82.877046 168.188414) (xy 82.877052 168.188421) - (xy 82.97645 168.287819) (xy 83.009935 168.349142) (xy 83.004951 168.418834) (xy 82.963079 168.474767) - (xy 82.897615 168.499184) (xy 82.888769 168.4995) (xy 80.6245 168.4995) (xy 80.557461 168.479815) - (xy 80.511706 168.427011) (xy 80.5005 168.3755) (xy 80.5005 108.747844) (xy 95.15 108.747844) (xy 95.156401 108.807372) - (xy 95.156403 108.807379) (xy 95.206645 108.942086) (xy 95.206649 108.942093) (xy 95.292809 109.057187) - (xy 95.292812 109.05719) (xy 95.407906 109.14335) (xy 95.407913 109.143354) (xy 95.54262 109.193596) - (xy 95.542627 109.193598) (xy 95.602155 109.199999) (xy 95.602172 109.2) (xy 96.15 109.2) (xy 96.15 107.45) - (xy 95.15 107.45) (xy 95.15 108.747844) (xy 80.5005 108.747844) (xy 80.5005 105.652155) (xy 95.15 105.652155) - (xy 95.15 106.95) (xy 96.15 106.95) (xy 96.15 105.2) (xy 96.65 105.2) (xy 96.65 109.2) (xy 97.197828 109.2) - (xy 97.197844 109.199999) (xy 97.257372 109.193598) (xy 97.257375 109.193597) (xy 97.305949 109.17548) - (xy 97.37564 109.170494) (xy 97.39261 109.175477) (xy 97.442517 109.194091) (xy 97.502127 109.2005) - (xy 99.092297 109.200499) (xy 99.159336 109.220184) (xy 99.205091 109.272987) (xy 99.215035 109.342146) - (xy 99.213914 109.34869) (xy 99.1995 109.421153) (xy 99.1995 109.578846) (xy 99.230261 109.733489) - (xy 99.230264 109.733501) (xy 99.290602 109.879172) (xy 99.290609 109.879185) (xy 99.37821 110.010288) - (xy 99.378213 110.010292) (xy 99.489707 110.121786) (xy 99.489711 110.121789) (xy 99.620814 110.20939) - (xy 99.620827 110.209397) (xy 99.766498 110.269735) (xy 99.766503 110.269737) (xy 99.921153 110.300499) - (xy 99.921156 110.3005) (xy 99.921158 110.3005) (xy 100.078844 110.3005) (xy 100.078845 110.300499) - (xy 100.233497 110.269737) (xy 100.379179 110.209394) (xy 100.510289 110.121789) (xy 100.621789 110.010289) - (xy 100.709394 109.879179) (xy 100.769737 109.733497) (xy 100.8005 109.578842) (xy 100.8005 109.421158) - (xy 100.8005 109.421156) (xy 100.799903 109.415098) (xy 100.80034 109.415054) (xy 100.798808 109.397458) - (xy 100.799108 109.384252) (xy 100.800501 109.379057) (xy 100.800501 109.323082) (xy 100.800533 109.321677) - (xy 100.81073 109.289661) (xy 100.820186 109.25746) (xy 100.821292 109.256501) (xy 100.821738 109.255103) - (xy 100.847625 109.233683) (xy 100.87299 109.211705) (xy 100.874616 109.211351) (xy 100.87557 109.210562) - (xy 100.881571 109.209838) (xy 100.924501 109.200499) (xy 100.997871 109.200499) (xy 100.997872 109.200499) - (xy 101.057483 109.194091) (xy 101.106665 109.175746) (xy 101.176355 109.170761) (xy 101.193333 109.175747) - (xy 101.242508 109.194088) (xy 101.242511 109.194088) (xy 101.242517 109.194091) (xy 101.302127 109.2005) - (xy 102.897872 109.200499) (xy 102.957483 109.194091) (xy 103.007382 109.175479) (xy 103.077069 109.170494) - (xy 103.094048 109.175479) (xy 103.142628 109.193598) (xy 103.142627 109.193598) (xy 103.202155 109.199999) - (xy 103.202172 109.2) (xy 103.75 109.2) (xy 104.25 109.2) (xy 104.797828 109.2) (xy 104.797844 109.199999) - (xy 104.857372 109.193598) (xy 104.857379 109.193596) (xy 104.992086 109.143354) (xy 104.992093 109.14335) - (xy 105.107187 109.05719) (xy 105.10719 109.057187) (xy 105.19335 108.942093) (xy 105.193354 108.942086) - (xy 105.243596 108.807379) (xy 105.243598 108.807372) (xy 105.249999 108.747844) (xy 105.25 108.747827) - (xy 105.25 107.45) (xy 104.25 107.45) (xy 104.25 109.2) (xy 103.75 109.2) (xy 103.75 106.95) (xy 104.25 106.95) - (xy 105.25 106.95) (xy 105.25 105.652172) (xy 105.249999 105.652155) (xy 105.243598 105.592627) - (xy 105.243596 105.59262) (xy 105.193354 105.457913) (xy 105.19335 105.457906) (xy 105.10719 105.342812) - (xy 105.107187 105.342809) (xy 104.992093 105.256649) (xy 104.992086 105.256645) (xy 104.857379 105.206403) - (xy 104.857372 105.206401) (xy 104.797844 105.2) (xy 104.25 105.2) (xy 104.25 106.95) (xy 103.75 106.95) - (xy 103.75 105.2) (xy 103.202155 105.2) (xy 103.142627 105.206401) (xy 103.142623 105.206402) (xy 103.094046 105.22452) - (xy 103.024354 105.229503) (xy 103.007382 105.224519) (xy 102.957485 105.205909) (xy 102.957483 105.205908) - (xy 102.897883 105.199501) (xy 102.897881 105.1995) (xy 102.897873 105.1995) (xy 102.897864 105.1995) - (xy 101.302129 105.1995) (xy 101.302123 105.199501) (xy 101.242516 105.205908) (xy 101.193332 105.224253) - (xy 101.12364 105.229237) (xy 101.106667 105.224253) (xy 101.057482 105.205908) (xy 101.057483 105.205908) - (xy 100.997883 105.199501) (xy 100.997881 105.1995) (xy 100.997873 105.1995) (xy 100.997864 105.1995) - (xy 99.402129 105.1995) (xy 99.402123 105.199501) (xy 99.342516 105.205908) (xy 99.293332 105.224253) - (xy 99.22364 105.229237) (xy 99.206667 105.224253) (xy 99.157482 105.205908) (xy 99.157483 105.205908) - (xy 99.097883 105.199501) (xy 99.097881 105.1995) (xy 99.097873 105.1995) (xy 99.097864 105.1995) - (xy 97.502129 105.1995) (xy 97.502123 105.199501) (xy 97.442517 105.205908) (xy 97.392616 105.22452) - (xy 97.322925 105.229503) (xy 97.305953 105.224519) (xy 97.257383 105.206403) (xy 97.257372 105.206401) - (xy 97.197844 105.2) (xy 96.65 105.2) (xy 96.15 105.2) (xy 95.602155 105.2) (xy 95.542627 105.206401) - (xy 95.54262 105.206403) (xy 95.407913 105.256645) (xy 95.407906 105.256649) (xy 95.292812 105.342809) - (xy 95.292809 105.342812) (xy 95.206649 105.457906) (xy 95.206645 105.457913) (xy 95.156403 105.59262) - (xy 95.156401 105.592627) (xy 95.15 105.652155) (xy 80.5005 105.652155) (xy 80.5005 104.597844) - (xy 91 104.597844) (xy 91.006401 104.657372) (xy 91.006403 104.657379) (xy 91.056645 104.792086) - (xy 91.056649 104.792093) (xy 91.142809 104.907187) (xy 91.142812 104.90719) (xy 91.257906 104.99335) - (xy 91.257913 104.993354) (xy 91.39262 105.043596) (xy 91.392627 105.043598) (xy 91.452155 105.049999) - (xy 91.452172 105.05) (xy 92.75 105.05) (xy 93.25 105.05) (xy 94.547828 105.05) (xy 94.547844 105.049999) - (xy 94.607372 105.043598) (xy 94.607379 105.043596) (xy 94.742086 104.993354) (xy 94.742093 104.99335) - (xy 94.857187 104.90719) (xy 94.85719 104.907187) (xy 94.94335 104.792093) (xy 94.943354 104.792086) - (xy 94.993596 104.657379) (xy 94.993598 104.657372) (xy 94.999999 104.597844) (xy 105.4 104.597844) - (xy 105.406401 104.657372) (xy 105.406403 104.657379) (xy 105.456645 104.792086) (xy 105.456649 104.792093) - (xy 105.542809 104.907187) (xy 105.542812 104.90719) (xy 105.657906 104.99335) (xy 105.657913 104.993354) - (xy 105.79262 105.043596) (xy 105.792627 105.043598) (xy 105.852155 105.049999) (xy 105.852172 105.05) - (xy 107.15 105.05) (xy 107.65 105.05) (xy 108.947828 105.05) (xy 108.947844 105.049999) (xy 109.007372 105.043598) - (xy 109.007379 105.043596) (xy 109.142086 104.993354) (xy 109.142093 104.99335) (xy 109.257187 104.90719) - (xy 109.25719 104.907187) (xy 109.34335 104.792093) (xy 109.343354 104.792086) (xy 109.393596 104.657379) - (xy 109.393598 104.657372) (xy 109.399999 104.597844) (xy 109.4 104.597827) (xy 109.4 104.05) (xy 107.65 104.05) - (xy 107.65 105.05) (xy 107.15 105.05) (xy 107.15 104.05) (xy 105.4 104.05) (xy 105.4 104.597844) - (xy 94.999999 104.597844) (xy 95 104.597827) (xy 95 104.05) (xy 93.25 104.05) (xy 93.25 105.05) - (xy 92.75 105.05) (xy 92.75 104.05) (xy 91 104.05) (xy 91 104.597844) (xy 80.5005 104.597844) (xy 80.5005 102.697844) - (xy 91 102.697844) (xy 91.006401 102.757372) (xy 91.006403 102.75738) (xy 91.024786 102.806667) - (xy 91.02977 102.876359) (xy 91.024786 102.893333) (xy 91.006403 102.942619) (xy 91.006401 102.942627) - (xy 91 103.002155) (xy 91 103.55) (xy 92.75 103.55) (xy 93.25 103.55) (xy 95 103.55) (xy 95 103.002172) - (xy 94.999999 103.002155) (xy 94.993597 102.942622) (xy 94.993597 102.942621) (xy 94.975214 102.893335) - (xy 94.970228 102.823644) (xy 94.975214 102.806665) (xy 94.993597 102.757378) (xy 94.993597 102.757377) - (xy 94.999999 102.697844) (xy 95 102.697827) (xy 95 102.15) (xy 93.25 102.15) (xy 93.25 103.55) - (xy 92.75 103.55) (xy 92.75 102.15) (xy 91 102.15) (xy 91 102.697844) (xy 80.5005 102.697844) (xy 80.5005 97.921153) - (xy 88.6995 97.921153) (xy 88.6995 98.078846) (xy 88.730261 98.233489) (xy 88.730264 98.233501) - (xy 88.790602 98.379172) (xy 88.790609 98.379185) (xy 88.87821 98.510288) (xy 88.878213 98.510292) - (xy 88.989707 98.621786) (xy 88.989711 98.621789) (xy 89.120814 98.70939) (xy 89.120827 98.709397) - (xy 89.215664 98.748679) (xy 89.237097 98.760134) (xy 89.244505 98.765084) (xy 89.381087 98.821658) - (xy 89.381091 98.821658) (xy 89.381092 98.821659) (xy 89.526079 98.8505) (xy 89.526082 98.8505) - (xy 89.673917 98.8505) (xy 90.883023 98.8505) (xy 90.950062 98.870185) (xy 90.995817 98.922989) - (xy 91.000715 98.935454) (xy 91.004895 98.948054) (xy 91.005909 98.957483) (xy 91.025049 99.008801) - (xy 91.025763 99.010953) (xy 91.0269 99.043692) (xy 91.029237 99.076358) (xy 91.028163 99.080014) - (xy 91.02819 99.08078) (xy 91.027693 99.081615) (xy 91.024253 99.093331) (xy 91.005909 99.142514) - (xy 91.004126 99.150062) (xy 91.001853 99.149525) (xy 90.979571 99.203312) (xy 90.922177 99.243157) - (xy 90.883024 99.2495) (xy 89.804604 99.2495) (xy 89.757155 99.240062) (xy 89.733497 99.230263) - (xy 89.733493 99.230262) (xy 89.733488 99.23026) (xy 89.578845 99.1995) (xy 89.578842 99.1995) (xy 89.421158 99.1995) - (xy 89.421155 99.1995) (xy 89.26651 99.230261) (xy 89.266498 99.230264) (xy 89.120827 99.290602) - (xy 89.120814 99.290609) (xy 88.989711 99.37821) (xy 88.989707 99.378213) (xy 88.878213 99.489707) - (xy 88.87821 99.489711) (xy 88.790609 99.620814) (xy 88.790602 99.620827) (xy 88.730264 99.766498) - (xy 88.730261 99.76651) (xy 88.6995 99.921153) (xy 88.6995 100.078846) (xy 88.730261 100.233489) - (xy 88.730264 100.233501) (xy 88.790602 100.379172) (xy 88.790609 100.379185) (xy 88.87821 100.510288) - (xy 88.878213 100.510292) (xy 88.989707 100.621786) (xy 88.989711 100.621789) (xy 89.120814 100.70939) - (xy 89.120827 100.709397) (xy 89.22006 100.7505) (xy 89.266503 100.769737) (xy 89.408002 100.797883) - (xy 89.421153 100.800499) (xy 89.421156 100.8005) (xy 89.421158 100.8005) (xy 89.578844 100.8005) - (xy 89.578845 100.800499) (xy 89.655152 100.78532) (xy 89.733488 100.769739) (xy 89.733489 100.769738) - (xy 89.733497 100.769737) (xy 89.757155 100.759937) (xy 89.804604 100.7505) (xy 90.883023 100.7505) - (xy 90.950062 100.770185) (xy 90.995817 100.822989) (xy 91.000702 100.835414) (xy 91.004893 100.848032) - (xy 91.005909 100.857483) (xy 91.025302 100.909478) (xy 91.026016 100.911628) (xy 91.027165 100.944387) - (xy 91.029503 100.977074) (xy 91.028439 100.980696) (xy 91.028466 100.981454) (xy 91.027973 100.982282) - (xy 91.02452 100.994046) (xy 91.006402 101.042623) (xy 91.006401 101.042627) (xy 91 101.102155) - (xy 91 101.65) (xy 95 101.65) (xy 95 101.102172) (xy 94.999999 101.102155) (xy 94.993598 101.042627) - (xy 94.975479 100.994048) (xy 94.970495 100.924356) (xy 94.975476 100.907391) (xy 94.994091 100.857483) - (xy 95.0005 100.797873) (xy 95.000499 99.202128) (xy 94.994091 99.142517) (xy 94.975747 99.093334) - (xy 94.970762 99.023643) (xy 94.975747 99.006665) (xy 94.994089 98.957488) (xy 94.994091 98.957483) - (xy 95.0005 98.897873) (xy 95.000499 97.302135) (xy 105.3995 97.302135) (xy 105.3995 98.89787) (xy 105.399501 98.897876) - (xy 105.405908 98.957482) (xy 105.419004 98.992593) (xy 105.424252 99.006665) (xy 105.424253 99.006666) - (xy 105.429237 99.076358) (xy 105.424253 99.093331) (xy 105.405909 99.142514) (xy 105.405908 99.142516) - (xy 105.399782 99.1995) (xy 105.399501 99.202123) (xy 105.3995 99.202135) (xy 105.3995 100.79787) - (xy 105.399501 100.797876) (xy 105.405908 100.857482) (xy 105.424253 100.906666) (xy 105.429237 100.976358) - (xy 105.424253 100.993331) (xy 105.405909 101.042514) (xy 105.405908 101.042516) (xy 105.399501 101.102116) - (xy 105.399501 101.102123) (xy 105.3995 101.102135) (xy 105.3995 102.69787) (xy 105.399501 102.697876) - (xy 105.405909 102.757484) (xy 105.424519 102.807382) (xy 105.429503 102.877074) (xy 105.42452 102.894046) - (xy 105.406402 102.942623) (xy 105.406401 102.942627) (xy 105.4 103.002155) (xy 105.4 103.55) (xy 109.4 103.55) - (xy 109.4 103.002172) (xy 109.399999 103.002155) (xy 109.393598 102.942627) (xy 109.375479 102.894048) - (xy 109.370495 102.824356) (xy 109.375476 102.807391) (xy 109.394091 102.757483) (xy 109.4005 102.697873) - (xy 109.400499 101.102128) (xy 109.394091 101.042517) (xy 109.376013 100.994048) (xy 109.375747 100.993334) - (xy 109.370551 100.92463) (xy 109.372468 100.915454) (xy 109.394091 100.857483) (xy 109.4005 100.797873) - (xy 109.4005 100.781347) (xy 109.403123 100.768798) (xy 109.413808 100.748843) (xy 109.420185 100.727129) - (xy 109.429983 100.718638) (xy 109.436107 100.707204) (xy 109.455885 100.696194) (xy 109.472989 100.681374) - (xy 109.485825 100.679528) (xy 109.497156 100.673221) (xy 109.519742 100.674651) (xy 109.542147 100.67143) - (xy 109.556653 100.676988) (xy 109.566886 100.677637) (xy 109.576164 100.684465) (xy 109.593392 100.691067) - (xy 109.620812 100.709389) (xy 109.620827 100.709397) (xy 109.72006 100.7505) (xy 109.766503 100.769737) - (xy 109.908002 100.797883) (xy 109.921153 100.800499) (xy 109.921156 100.8005) (xy 109.921158 100.8005) - (xy 110.078844 100.8005) (xy 110.078845 100.800499) (xy 110.233497 100.769737) (xy 110.379179 100.709394) - (xy 110.510289 100.621789) (xy 110.621789 100.510289) (xy 110.709394 100.379179) (xy 110.769737 100.233497) - (xy 110.8005 100.078842) (xy 110.8005 99.921158) (xy 110.8005 99.921155) (xy 110.800499 99.921153) - (xy 110.769738 99.76651) (xy 110.769737 99.766503) (xy 110.769735 99.766498) (xy 110.709397 99.620827) - (xy 110.70939 99.620814) (xy 110.621789 99.489711) (xy 110.621786 99.489707) (xy 110.510292 99.378213) - (xy 110.510288 99.37821) (xy 110.379185 99.290609) (xy 110.379172 99.290602) (xy 110.233501 99.230264) - (xy 110.233489 99.230261) (xy 110.078845 99.1995) (xy 110.078842 99.1995) (xy 109.921158 99.1995) - (xy 109.921155 99.1995) (xy 109.76651 99.230261) (xy 109.766498 99.230264) (xy 109.620827 99.290602) - (xy 109.620809 99.290612) (xy 109.593389 99.308934) (xy 109.526712 99.329812) (xy 109.459332 99.311327) - (xy 109.412642 99.259348) (xy 109.403122 99.231201) (xy 109.400499 99.218651) (xy 109.400499 99.202128) - (xy 109.394091 99.142517) (xy 109.372469 99.084546) (xy 109.370551 99.075369) (xy 109.372612 99.04951) - (xy 109.370762 99.023643) (xy 109.375747 99.006665) (xy 109.394089 98.957488) (xy 109.394091 98.957483) - (xy 109.395623 98.943226) (xy 109.399063 98.911243) (xy 109.425801 98.846693) (xy 109.483194 98.806845) - (xy 109.522352 98.8005) (xy 109.578844 98.8005) (xy 109.578845 98.800499) (xy 109.733497 98.769737) - (xy 109.879179 98.709394) (xy 110.010289 98.621789) (xy 110.121789 98.510289) (xy 110.209394 98.379179) - (xy 110.269737 98.233497) (xy 110.3005 98.078842) (xy 110.3005 97.921158) (xy 110.3005 97.921155) - (xy 110.300499 97.921153) (xy 110.269738 97.76651) (xy 110.269737 97.766503) (xy 110.269735 97.766498) - (xy 110.209397 97.620827) (xy 110.20939 97.620814) (xy 110.121789 97.489711) (xy 110.121786 97.489707) - (xy 110.010292 97.378213) (xy 110.010288 97.37821) (xy 109.879185 97.290609) (xy 109.879172 97.290602) - (xy 109.733501 97.230264) (xy 109.733489 97.230261) (xy 109.578845 97.1995) (xy 109.578842 97.1995) - (xy 109.516364 97.1995) (xy 109.449325 97.179815) (xy 109.40357 97.127011) (xy 109.393075 97.062244) - (xy 109.399999 96.997844) (xy 109.4 96.997827) (xy 109.4 96.45) (xy 105.4 96.45) (xy 105.4 96.997844) - (xy 105.406401 97.057372) (xy 105.406403 97.057383) (xy 105.424519 97.105953) (xy 105.429503 97.175644) - (xy 105.42452 97.192616) (xy 105.405908 97.242517) (xy 105.399501 97.302116) (xy 105.3995 97.302135) - (xy 95.000499 97.302135) (xy 95.000499 97.302128) (xy 94.994091 97.242517) (xy 94.97548 97.192618) - (xy 94.970495 97.122927) (xy 94.97548 97.105949) (xy 94.993597 97.057375) (xy 94.993598 97.057372) - (xy 94.999999 96.997844) (xy 95 96.997827) (xy 95 96.45) (xy 91 96.45) (xy 91 96.997844) (xy 91.006401 97.057372) - (xy 91.006403 97.057383) (xy 91.024519 97.105953) (xy 91.026248 97.130137) (xy 91.032261 97.153632) - (xy 91.029075 97.169672) (xy 91.029503 97.175644) (xy 91.026016 97.188369) (xy 91.025293 97.190544) - (xy 91.005909 97.242517) (xy 91.004892 97.251969) (xy 91.000703 97.264584) (xy 90.988063 97.282813) - (xy 90.979571 97.303312) (xy 90.96854 97.310969) (xy 90.960891 97.322002) (xy 90.940403 97.330503) - (xy 90.922177 97.343157) (xy 90.902053 97.346417) (xy 90.896357 97.348781) (xy 90.89214 97.348023) - (xy 90.883024 97.3495) (xy 90.004935 97.3495) (xy 89.937896 97.329815) (xy 89.93609 97.328633) (xy 89.879179 97.290606) - (xy 89.879172 97.290602) (xy 89.733501 97.230264) (xy 89.733489 97.230261) (xy 89.578845 97.1995) - (xy 89.578842 97.1995) (xy 89.421158 97.1995) (xy 89.421155 97.1995) (xy 89.26651 97.230261) (xy 89.266498 97.230264) - (xy 89.120827 97.290602) (xy 89.120814 97.290609) (xy 88.989711 97.37821) (xy 88.989707 97.378213) - (xy 88.878213 97.489707) (xy 88.87821 97.489711) (xy 88.790609 97.620814) (xy 88.790602 97.620827) - (xy 88.730264 97.766498) (xy 88.730261 97.76651) (xy 88.6995 97.921153) (xy 80.5005 97.921153) (xy 80.5005 95.402155) - (xy 91 95.402155) (xy 91 95.95) (xy 92.75 95.95) (xy 93.25 95.95) (xy 95 95.95) (xy 95 95.402172) - (xy 94.999999 95.402155) (xy 105.4 95.402155) (xy 105.4 95.95) (xy 107.15 95.95) (xy 107.65 95.95) - (xy 109.4 95.95) (xy 109.4 95.402172) (xy 109.399999 95.402155) (xy 109.393598 95.342627) (xy 109.393596 95.34262) - (xy 109.343354 95.207913) (xy 109.34335 95.207906) (xy 109.25719 95.092812) (xy 109.257187 95.092809) - (xy 109.142093 95.006649) (xy 109.142086 95.006645) (xy 109.007379 94.956403) (xy 109.007372 94.956401) - (xy 108.947844 94.95) (xy 107.65 94.95) (xy 107.65 95.95) (xy 107.15 95.95) (xy 107.15 94.95) (xy 105.852155 94.95) - (xy 105.792627 94.956401) (xy 105.79262 94.956403) (xy 105.657913 95.006645) (xy 105.657906 95.006649) - (xy 105.542812 95.092809) (xy 105.542809 95.092812) (xy 105.456649 95.207906) (xy 105.456645 95.207913) - (xy 105.406403 95.34262) (xy 105.406401 95.342627) (xy 105.4 95.402155) (xy 94.999999 95.402155) - (xy 94.993598 95.342627) (xy 94.993596 95.34262) (xy 94.943354 95.207913) (xy 94.94335 95.207906) - (xy 94.85719 95.092812) (xy 94.857187 95.092809) (xy 94.742093 95.006649) (xy 94.742086 95.006645) - (xy 94.607379 94.956403) (xy 94.607372 94.956401) (xy 94.547844 94.95) (xy 93.25 94.95) (xy 93.25 95.95) - (xy 92.75 95.95) (xy 92.75 94.95) (xy 91.452155 94.95) (xy 91.392627 94.956401) (xy 91.39262 94.956403) - (xy 91.257913 95.006645) (xy 91.257906 95.006649) (xy 91.142812 95.092809) (xy 91.142809 95.092812) - (xy 91.056649 95.207906) (xy 91.056645 95.207913) (xy 91.006403 95.34262) (xy 91.006401 95.342627) - (xy 91 95.402155) (xy 80.5005 95.402155) (xy 80.5005 94.347844) (xy 95.15 94.347844) (xy 95.156401 94.407372) - (xy 95.156403 94.407379) (xy 95.206645 94.542086) (xy 95.206649 94.542093) (xy 95.292809 94.657187) - (xy 95.292812 94.65719) (xy 95.407906 94.74335) (xy 95.407913 94.743354) (xy 95.54262 94.793596) - (xy 95.542627 94.793598) (xy 95.602155 94.799999) (xy 95.602172 94.8) (xy 96.15 94.8) (xy 96.15 93.05) - (xy 95.15 93.05) (xy 95.15 94.347844) (xy 80.5005 94.347844) (xy 80.5005 91.252155) (xy 95.15 91.252155) - (xy 95.15 92.55) (xy 96.15 92.55) (xy 96.15 90.8) (xy 96.65 90.8) (xy 96.65 94.8) (xy 97.197828 94.8) - (xy 97.197844 94.799999) (xy 97.257372 94.793598) (xy 97.257375 94.793597) (xy 97.305949 94.77548) - (xy 97.37564 94.770494) (xy 97.39261 94.775477) (xy 97.442517 94.794091) (xy 97.502127 94.8005) - (xy 99.097872 94.800499) (xy 99.157483 94.794091) (xy 99.206665 94.775746) (xy 99.276355 94.770761) - (xy 99.293333 94.775747) (xy 99.342508 94.794088) (xy 99.342511 94.794088) (xy 99.342517 94.794091) - (xy 99.402127 94.8005) (xy 100.997872 94.800499) (xy 101.057483 94.794091) (xy 101.106665 94.775746) - (xy 101.176355 94.770761) (xy 101.193333 94.775747) (xy 101.242508 94.794088) (xy 101.242511 94.794088) - (xy 101.242517 94.794091) (xy 101.302127 94.8005) (xy 102.897872 94.800499) (xy 102.957483 94.794091) - (xy 103.007382 94.775479) (xy 103.077069 94.770494) (xy 103.094048 94.775479) (xy 103.142628 94.793598) - (xy 103.142627 94.793598) (xy 103.202155 94.799999) (xy 103.202172 94.8) (xy 103.75 94.8) (xy 104.25 94.8) - (xy 104.797828 94.8) (xy 104.797844 94.799999) (xy 104.857372 94.793598) (xy 104.857379 94.793596) - (xy 104.992086 94.743354) (xy 104.992093 94.74335) (xy 105.107187 94.65719) (xy 105.10719 94.657187) - (xy 105.19335 94.542093) (xy 105.193354 94.542086) (xy 105.243596 94.407379) (xy 105.243598 94.407372) - (xy 105.249999 94.347844) (xy 105.25 94.347827) (xy 105.25 93.05) (xy 104.25 93.05) (xy 104.25 94.8) - (xy 103.75 94.8) (xy 103.75 92.55) (xy 104.25 92.55) (xy 105.25 92.55) (xy 105.25 91.252172) (xy 105.249999 91.252155) - (xy 105.243598 91.192627) (xy 105.243596 91.19262) (xy 105.193354 91.057913) (xy 105.19335 91.057906) - (xy 105.10719 90.942812) (xy 105.107187 90.942809) (xy 104.992093 90.856649) (xy 104.992086 90.856645) - (xy 104.857379 90.806403) (xy 104.857372 90.806401) (xy 104.797844 90.8) (xy 104.25 90.8) (xy 104.25 92.55) - (xy 103.75 92.55) (xy 103.75 90.8) (xy 103.202155 90.8) (xy 103.142627 90.806401) (xy 103.142623 90.806402) - (xy 103.094046 90.82452) (xy 103.069856 90.826249) (xy 103.046366 90.832261) (xy 103.030327 90.829075) - (xy 103.024354 90.829503) (xy 103.011629 90.826016) (xy 103.009471 90.825299) (xy 102.957483 90.805909) - (xy 102.948029 90.804892) (xy 102.935415 90.800703) (xy 102.917184 90.788062) (xy 102.896688 90.779571) - (xy 102.88903 90.76854) (xy 102.877998 90.760891) (xy 102.869496 90.740403) (xy 102.856843 90.722177) - (xy 102.853582 90.702053) (xy 102.851219 90.696357) (xy 102.851976 90.69214) (xy 102.8505 90.683024) - (xy 102.8505 90.526079) (xy 102.821659 90.381092) (xy 102.821658 90.381091) (xy 102.821658 90.381087) - (xy 102.765084 90.244505) (xy 102.760134 90.237097) (xy 102.748679 90.215664) (xy 102.709397 90.120827) - (xy 102.70939 90.120814) (xy 102.621789 89.989711) (xy 102.621786 89.989707) (xy 102.510292 89.878213) - (xy 102.510288 89.87821) (xy 102.379185 89.790609) (xy 102.379172 89.790602) (xy 102.233501 89.730264) - (xy 102.233489 89.730261) (xy 102.078845 89.6995) (xy 102.078842 89.6995) (xy 101.921158 89.6995) - (xy 101.921155 89.6995) (xy 101.76651 89.730261) (xy 101.766498 89.730264) (xy 101.620827 89.790602) - (xy 101.620814 89.790609) (xy 101.489711 89.87821) (xy 101.489707 89.878213) (xy 101.378213 89.989707) - (xy 101.37821 89.989711) (xy 101.290609 90.120814) (xy 101.290602 90.120827) (xy 101.230264 90.266498) - (xy 101.230261 90.26651) (xy 101.1995 90.421153) (xy 101.1995 90.421158) (xy 101.1995 90.578842) - (xy 101.1995 90.578844) (xy 101.199499 90.578844) (xy 101.216288 90.663242) (xy 101.210061 90.732834) - (xy 101.167198 90.788011) (xy 101.101308 90.811256) (xy 101.085996 90.81113) (xy 101.06812 90.809876) - (xy 101.057483 90.805909) (xy 100.997873 90.7995) (xy 100.920161 90.7995) (xy 100.915826 90.799196) - (xy 100.886979 90.788482) (xy 100.857462 90.779815) (xy 100.854529 90.77643) (xy 100.850328 90.77487) - (xy 100.831849 90.750256) (xy 100.811707 90.727011) (xy 100.810609 90.721964) (xy 100.808379 90.718994) - (xy 100.80758 90.708042) (xy 100.800501 90.6755) (xy 100.800501 90.620947) (xy 100.800501 90.620943) - (xy 100.800499 90.620939) (xy 100.799838 90.615914) (xy 100.800851 90.584995) (xy 100.799903 90.584902) - (xy 100.8005 90.578843) (xy 100.8005 90.421155) (xy 100.800499 90.421153) (xy 100.769738 90.26651) - (xy 100.769737 90.266503) (xy 100.769735 90.266498) (xy 100.709397 90.120827) (xy 100.70939 90.120814) - (xy 100.621789 89.989711) (xy 100.621786 89.989707) (xy 100.510292 89.878213) (xy 100.510288 89.87821) - (xy 100.379185 89.790609) (xy 100.379172 89.790602) (xy 100.233501 89.730264) (xy 100.233489 89.730261) - (xy 100.078845 89.6995) (xy 100.078842 89.6995) (xy 99.921158 89.6995) (xy 99.921155 89.6995) (xy 99.76651 89.730261) - (xy 99.766498 89.730264) (xy 99.620827 89.790602) (xy 99.620814 89.790609) (xy 99.489711 89.87821) - (xy 99.489707 89.878213) (xy 99.378213 89.989707) (xy 99.37821 89.989711) (xy 99.290609 90.120814) - (xy 99.290602 90.120827) (xy 99.230264 90.266498) (xy 99.230261 90.26651) (xy 99.1995 90.421153) - (xy 99.1995 90.578846) (xy 99.213914 90.651309) (xy 99.207687 90.7209) (xy 99.164824 90.776078) - (xy 99.098934 90.799322) (xy 99.092297 90.7995) (xy 97.502129 90.7995) (xy 97.502123 90.799501) - (xy 97.442517 90.805908) (xy 97.392616 90.82452) (xy 97.322925 90.829503) (xy 97.305953 90.824519) - (xy 97.257383 90.806403) (xy 97.257372 90.806401) (xy 97.197844 90.8) (xy 96.65 90.8) (xy 96.15 90.8) - (xy 95.602155 90.8) (xy 95.542627 90.806401) (xy 95.54262 90.806403) (xy 95.407913 90.856645) (xy 95.407906 90.856649) - (xy 95.292812 90.942809) (xy 95.292809 90.942812) (xy 95.206649 91.057906) (xy 95.206645 91.057913) - (xy 95.156403 91.19262) (xy 95.156401 91.192627) (xy 95.15 91.252155) (xy 80.5005 91.252155) (xy 80.5005 80.6245) - (xy 80.520185 80.557461) (xy 80.572989 80.511706) (xy 80.6245 80.5005) (xy 119.3755 80.5005) - ) - ) - (filled_polygon - (layer "F.Cu") - (pts - (xy 115.967149 154.759533) (xy 115.998335 154.767083) (xy 116.001601 154.769649) (xy 116.003425 154.770185) - (xy 116.009076 154.775522) (xy 116.026088 154.788888) (xy 116.031824 154.794898) (xy 116.046172 154.814646) - (xy 116.144861 154.913335) (xy 116.145866 154.914388) (xy 116.161252 154.944198) (xy 116.17733 154.973642) - (xy 116.177222 154.975139) (xy 116.177912 154.976475) (xy 116.174738 155.009879) (xy 116.172346 155.043334) - (xy 116.171446 155.044536) (xy 116.171304 155.046031) (xy 116.143845 155.087681) (xy 116.046174 155.185351) - (xy 116.046174 155.185352) (xy 116.046172 155.185354) (xy 116.043354 155.189233) (xy 115.930476 155.344594) - (xy 115.841117 155.51997) (xy 115.78029 155.707173) (xy 115.7495 155.901577) (xy 115.7495 156.098422) - (xy 115.78029 156.292826) (xy 115.841117 156.480029) (xy 115.932352 156.659087) (xy 115.945248 156.727757) - (xy 115.918971 156.792497) (xy 115.894753 156.815699) (xy 115.80735 156.879202) (xy 115.807341 156.879209) - (xy 115.629205 157.057345) (xy 115.629201 157.05735) (xy 115.481132 157.261151) (xy 115.36676 157.485616) - (xy 115.28891 157.725214) (xy 115.26281 157.890005) (xy 115.2495 157.974038) (xy 115.2495 158.225962) - (xy 115.254268 158.256064) (xy 115.28891 158.474785) (xy 115.36676 158.714383) (xy 115.481132 158.938848) - (xy 115.629201 159.142649) (xy 115.629205 159.142654) (xy 115.807345 159.320794) (xy 115.80735 159.320798) - (xy 115.985117 159.449952) (xy 116.011155 159.46887) (xy 116.108387 159.518412) (xy 116.235616 159.583239) - (xy 116.235618 159.583239) (xy 116.235621 159.583241) (xy 116.475215 159.66109) (xy 116.724038 159.7005) - (xy 116.724039 159.7005) (xy 118.275961 159.7005) (xy 118.275962 159.7005) (xy 118.524785 159.66109) - (xy 118.764379 159.583241) (xy 118.988845 159.46887) (xy 119.192656 159.320793) (xy 119.287819 159.22563) - (xy 119.349142 159.192145) (xy 119.418834 159.197129) (xy 119.474767 159.239001) (xy 119.499184 159.304465) - (xy 119.4995 159.313311) (xy 119.4995 168.3755) (xy 119.479815 168.442539) (xy 119.427011 168.488294) - (xy 119.3755 168.4995) (xy 114.11123 168.4995) (xy 114.044191 168.479815) (xy 113.998436 168.427011) - (xy 113.988492 168.357853) (xy 114.017517 168.294297) (xy 114.023549 168.287819) (xy 114.582947 167.72842) - (xy 114.58295 167.728417) (xy 114.582949 167.728417) (xy 114.582952 167.728415) (xy 114.623955 167.667049) - (xy 114.665084 167.605495) (xy 114.697042 167.528342) (xy 114.721659 167.468912) (xy 114.7505 167.323917) - (xy 114.7505 167.176082) (xy 114.7505 155.862229) (xy 114.770185 155.79519) (xy 114.786819 155.774548) - (xy 115.774548 154.786819) (xy 115.835871 154.753334) (xy 115.862229 154.7505) (xy 115.936386 154.7505) - ) - ) - (filled_polygon - (layer "F.Cu") - (pts - (xy 107.691444 122.653999) (xy 107.730486 122.699056) (xy 107.734951 122.70782) (xy 107.85989 122.879786) - (xy 107.859896 122.879792) (xy 108.010208 123.030104) (xy 108.088384 123.086902) (xy 108.131051 123.142231) - (xy 108.1395 123.18722) (xy 108.1395 144.463918) (xy 108.1395 144.46392) (xy 108.139499 144.46392) - (xy 108.16834 144.608907) (xy 108.168343 144.608917) (xy 108.224914 144.745492) (xy 108.238952 144.766501) - (xy 108.238953 144.766504) (xy 108.307046 144.868414) (xy 108.307052 144.868421) (xy 110.213181 146.774548) - (xy 110.246666 146.835871) (xy 110.2495 146.862229) (xy 110.2495 147.818059) (xy 110.229815 147.885098) - (xy 110.177011 147.930853) (xy 110.107853 147.940797) (xy 110.044297 147.911772) (xy 110.037819 147.90574) - (xy 110.010292 147.878213) (xy 110.010288 147.87821) (xy 109.879185 147.790609) (xy 109.879172 147.790602) - (xy 109.733501 147.730264) (xy 109.733489 147.730261) (xy 109.578845 147.6995) (xy 109.578842 147.6995) - (xy 109.421158 147.6995) (xy 109.421155 147.6995) (xy 109.266511 147.73026) (xy 109.266506 147.730262) - (xy 109.266504 147.730262) (xy 109.266503 147.730263) (xy 109.242844 147.740062) (xy 109.195396 147.7495) - (xy 106.804604 147.7495) (xy 106.757155 147.740062) (xy 106.733497 147.730263) (xy 106.733493 147.730262) - (xy 106.733488 147.73026) (xy 106.578845 147.6995) (xy 106.578842 147.6995) (xy 106.421158 147.6995) - (xy 106.421155 147.6995) (xy 106.26651 147.730261) (xy 106.266498 147.730264) (xy 106.120827 147.790602) - (xy 106.120814 147.790609) (xy 105.989711 147.87821) (xy 105.989707 147.878213) (xy 105.878213 147.989707) - (xy 105.87821 147.989711) (xy 105.790609 148.120814) (xy 105.790602 148.120827) (xy 105.730264 148.266498) - (xy 105.730261 148.26651) (xy 105.6995 148.421153) (xy 105.6995 148.578846) (xy 105.730261 148.733489) - (xy 105.730264 148.733501) (xy 105.790602 148.879172) (xy 105.790609 148.879185) (xy 105.87821 149.010288) - (xy 105.878213 149.010292) (xy 105.989707 149.121786) (xy 105.989711 149.121789) (xy 106.120814 149.20939) - (xy 106.120827 149.209397) (xy 106.22006 149.2505) (xy 106.266503 149.269737) (xy 106.421153 149.300499) - (xy 106.421156 149.3005) (xy 106.421158 149.3005) (xy 106.578844 149.3005) (xy 106.578845 149.300499) - (xy 106.655152 149.28532) (xy 106.733488 149.269739) (xy 106.733489 149.269738) (xy 106.733497 149.269737) - (xy 106.757155 149.259937) (xy 106.804604 149.2505) (xy 109.195396 149.2505) (xy 109.242844 149.259937) - (xy 109.266503 149.269737) (xy 109.266508 149.269738) (xy 109.266511 149.269739) (xy 109.421153 149.300499) - (xy 109.421156 149.3005) (xy 109.421158 149.3005) (xy 109.578844 149.3005) (xy 109.578845 149.300499) - (xy 109.733497 149.269737) (xy 109.879179 149.209394) (xy 110.010289 149.121789) (xy 110.010292 149.121786) - (xy 110.037819 149.09426) (xy 110.099142 149.060775) (xy 110.168834 149.065759) (xy 110.224767 149.107631) - (xy 110.249184 149.173095) (xy 110.2495 149.181941) (xy 110.2495 160.13777) (xy 110.240855 160.16721) - (xy 110.234332 160.197197) (xy 110.230577 160.202212) (xy 110.229815 160.204809) (xy 110.213181 160.225451) - (xy 110.133751 160.304881) (xy 110.072428 160.338366) (xy 110.04607 160.3412) (xy 108.729847 160.3412) - (xy 108.662808 160.321515) (xy 108.629529 160.290086) (xy 108.614381 160.269236) (xy 108.473864 160.128719) - (xy 108.313094 160.011913) (xy 108.156618 159.932184) (xy 108.105823 159.88421) (xy 108.089028 159.816389) - (xy 108.111565 159.750254) (xy 108.156618 159.711215) (xy 108.313094 159.631487) (xy 108.473864 159.514681) - (xy 108.614381 159.374164) (xy 108.731187 159.213394) (xy 108.821405 159.036332) (xy 108.882813 158.847336) - (xy 108.9139 158.651061) (xy 108.9139 158.452339) (xy 108.882813 158.256064) (xy 108.832811 158.102172) - (xy 108.821406 158.06707) (xy 108.821405 158.067067) (xy 108.756081 157.938863) (xy 108.731187 157.890006) - (xy 108.614381 157.729236) (xy 108.473864 157.588719) (xy 108.313094 157.471913) (xy 108.156618 157.392184) - (xy 108.105823 157.34421) (xy 108.089028 157.276389) (xy 108.111565 157.210254) (xy 108.156618 157.171215) - (xy 108.313094 157.091487) (xy 108.473864 156.974681) (xy 108.614381 156.834164) (xy 108.731187 156.673394) - (xy 108.821405 156.496332) (xy 108.882813 156.307336) (xy 108.9139 156.111061) (xy 108.9139 155.912339) - (xy 108.882813 155.716064) (xy 108.821405 155.527068) (xy 108.821405 155.527067) (xy 108.731186 155.350005) - (xy 108.614381 155.189236) (xy 108.473864 155.048719) (xy 108.313094 154.931913) (xy 108.156618 154.852184) - (xy 108.105823 154.80421) (xy 108.089028 154.736389) (xy 108.111565 154.670254) (xy 108.156618 154.631215) - (xy 108.313094 154.551487) (xy 108.473864 154.434681) (xy 108.614381 154.294164) (xy 108.731187 154.133394) - (xy 108.821405 153.956332) (xy 108.882813 153.767336) (xy 108.9139 153.571061) (xy 108.9139 153.372339) - (xy 108.882813 153.176064) (xy 108.842239 153.051188) (xy 108.821406 152.98707) (xy 108.821405 152.987067) - (xy 108.755377 152.857482) (xy 108.731187 152.810006) (xy 108.614381 152.649236) (xy 108.473864 152.508719) - (xy 108.313094 152.391913) (xy 108.156618 152.312184) (xy 108.105823 152.26421) (xy 108.089028 152.196389) - (xy 108.111565 152.130254) (xy 108.156618 152.091215) (xy 108.313094 152.011487) (xy 108.473864 151.894681) - (xy 108.614381 151.754164) (xy 108.731187 151.593394) (xy 108.821405 151.416332) (xy 108.882813 151.227336) - (xy 108.9139 151.031061) (xy 108.9139 150.832339) (xy 108.882813 150.636064) (xy 108.843277 150.514383) - (xy 108.821406 150.44707) (xy 108.821405 150.447067) (xy 108.731186 150.270005) (xy 108.614381 150.109236) - (xy 108.473864 149.968719) (xy 108.313094 149.851913) (xy 108.136032 149.761694) (xy 108.136029 149.761693) - (xy 107.947037 149.700287) (xy 107.848898 149.684743) (xy 107.750761 149.6692) (xy 107.552039 149.6692) - (xy 107.486614 149.679562) (xy 107.355762 149.700287) (xy 107.16677 149.761693) (xy 107.166767 149.761694) - (xy 106.989705 149.851913) (xy 106.828933 149.968721) (xy 106.688421 150.109233) (xy 106.571613 150.270005) - (xy 106.481394 150.447067) (xy 106.481393 150.44707) (xy 106.419987 150.636062) (xy 106.399485 150.765505) - (xy 106.3889 150.832339) (xy 106.3889 151.031061) (xy 106.394542 151.066685) (xy 106.419987 151.227337) - (xy 106.481393 151.416329) (xy 106.481394 151.416332) (xy 106.571613 151.593394) (xy 106.688419 151.754164) - (xy 106.828936 151.894681) (xy 106.989706 152.011487) (xy 107.108232 152.071879) (xy 107.14618 152.091215) - (xy 107.196976 152.13919) (xy 107.213771 152.207011) (xy 107.191233 152.273146) (xy 107.14618 152.312185) - (xy 106.989705 152.391913) (xy 106.828933 152.508721) (xy 106.688421 152.649233) (xy 106.57161 152.810009) - (xy 106.5704 152.811985) (xy 106.569743 152.812578) (xy 106.568749 152.813948) (xy 106.568461 152.813739) - (xy 106.51859 152.858863) (xy 106.46467 152.8712) (xy 104.771798 152.8712) (xy 104.742357 152.862555) - (xy 104.712371 152.856032) (xy 104.707355 152.852277) (xy 104.704759 152.851515) (xy 104.684117 152.834881) - (xy 104.636819 152.787583) (xy 104.603334 152.72626) (xy 104.6005 152.699902) (xy 104.6005 143.92094) - (xy 104.597994 143.911588) (xy 104.597994 143.911589) (xy 104.597993 143.911584) (xy 104.559577 143.768215) - (xy 104.485263 143.6395) (xy 104.48052 143.631284) (xy 104.368716 143.51948) (xy 104.368713 143.519478) - (xy 100.636819 139.787584) (xy 100.603334 139.726261) (xy 100.6005 139.699903) (xy 100.6005 123.373136) - (xy 100.620185 123.306097) (xy 100.672989 123.260342) (xy 100.742147 123.250398) (xy 100.762806 123.255202) - (xy 100.953757 123.317246) (xy 101.163713 123.3505) (xy 101.163714 123.3505) (xy 101.376286 123.3505) - (xy 101.376287 123.3505) (xy 101.586243 123.317246) (xy 101.788412 123.251557) (xy 101.977816 123.155051) - (xy 102.064471 123.092093) (xy 102.149786 123.030109) (xy 102.149788 123.030106) (xy 102.149792 123.030104) - (xy 102.300104 122.879792) (xy 102.300106 122.879788) (xy 102.300109 122.879786) (xy 102.425048 122.70782) - (xy 102.425047 122.70782) (xy 102.425051 122.707816) (xy 102.429514 122.699054) (xy 102.477488 122.648259) - (xy 102.545308 122.631463) (xy 102.611444 122.653999) (xy 102.650486 122.699056) (xy 102.654951 122.70782) - (xy 102.77989 122.879786) (xy 102.930213 123.030109) (xy 103.102179 123.155048) (xy 103.102181 123.155049) - (xy 103.102184 123.155051) (xy 103.291588 123.251557) (xy 103.493757 123.317246) (xy 103.703713 123.3505) - (xy 103.703714 123.3505) (xy 103.916286 123.3505) (xy 103.916287 123.3505) (xy 104.126243 123.317246) - (xy 104.328412 123.251557) (xy 104.517816 123.155051) (xy 104.604471 123.092093) (xy 104.689786 123.030109) - (xy 104.689788 123.030106) (xy 104.689792 123.030104) (xy 104.840104 122.879792) (xy 104.840106 122.879788) - (xy 104.840109 122.879786) (xy 104.965048 122.70782) (xy 104.965047 122.70782) (xy 104.965051 122.707816) - (xy 104.969514 122.699054) (xy 105.017488 122.648259) (xy 105.085308 122.631463) (xy 105.151444 122.653999) - (xy 105.190486 122.699056) (xy 105.194951 122.70782) (xy 105.31989 122.879786) (xy 105.470213 123.030109) - (xy 105.642179 123.155048) (xy 105.642181 123.155049) (xy 105.642184 123.155051) (xy 105.831588 123.251557) - (xy 106.033757 123.317246) (xy 106.243713 123.3505) (xy 106.243714 123.3505) (xy 106.456286 123.3505) - (xy 106.456287 123.3505) (xy 106.666243 123.317246) (xy 106.868412 123.251557) (xy 107.057816 123.155051) - (xy 107.144471 123.092093) (xy 107.229786 123.030109) (xy 107.229788 123.030106) (xy 107.229792 123.030104) - (xy 107.380104 122.879792) (xy 107.380106 122.879788) (xy 107.380109 122.879786) (xy 107.505048 122.70782) - (xy 107.505047 122.70782) (xy 107.505051 122.707816) (xy 107.509514 122.699054) (xy 107.557488 122.648259) - (xy 107.625308 122.631463) - ) - ) - (filled_polygon - (layer "F.Cu") - (pts - (xy 103.805703 153.655385) (xy 103.812181 153.661417) (xy 104.102984 153.95222) (xy 104.102986 153.952221) - (xy 104.10299 153.952224) (xy 104.239909 154.031273) (xy 104.239916 154.031277) (xy 104.392643 154.072201) - (xy 104.392645 154.072201) (xy 104.558354 154.072201) (xy 104.55837 154.0722) (xy 106.46467 154.0722) - (xy 106.531709 154.091885) (xy 106.568591 154.129566) (xy 106.568749 154.129452) (xy 106.569527 154.130523) - (xy 106.5704 154.131415) (xy 106.57161 154.13339) (xy 106.571613 154.133394) (xy 106.688419 154.294164) - (xy 106.828936 154.434681) (xy 106.989706 154.551487) (xy 107.108232 154.611879) (xy 107.14618 154.631215) - (xy 107.196976 154.67919) (xy 107.213771 154.747011) (xy 107.191233 154.813146) (xy 107.14618 154.852185) - (xy 106.989705 154.931913) (xy 106.828933 155.048721) (xy 106.688421 155.189233) (xy 106.571613 155.350005) - (xy 106.481394 155.527067) (xy 106.481393 155.52707) (xy 106.419987 155.716062) (xy 106.3889 155.912339) - (xy 106.3889 156.11106) (xy 106.419987 156.307337) (xy 106.481393 156.496329) (xy 106.481394 156.496332) - (xy 106.562447 156.655405) (xy 106.571613 156.673394) (xy 106.688419 156.834164) (xy 106.828936 156.974681) - (xy 106.989706 157.091487) (xy 107.108232 157.151879) (xy 107.14618 157.171215) (xy 107.196976 157.21919) - (xy 107.213771 157.287011) (xy 107.191233 157.353146) (xy 107.14618 157.392185) (xy 106.989705 157.471913) - (xy 106.828933 157.588721) (xy 106.688421 157.729233) (xy 106.57161 157.890009) (xy 106.5704 157.891985) - (xy 106.569743 157.892578) (xy 106.568749 157.893948) (xy 106.568461 157.893739) (xy 106.51859 157.938863) - (xy 106.46467 157.9512) (xy 103.851798 157.9512) (xy 103.822357 157.942555) (xy 103.792371 157.936032) - (xy 103.787355 157.932277) (xy 103.784759 157.931515) (xy 103.764117 157.914881) (xy 103.636819 157.787583) - (xy 103.603334 157.72626) (xy 103.6005 157.699902) (xy 103.6005 153.749098) (xy 103.620185 153.682059) - (xy 103.672989 153.636304) (xy 103.742147 153.62636) - ) - ) - ) - (zone - (net "GND") - (layer "B.Cu") - (uuid "fb63211c-534a-4b00-82b1-cb4c002a1ce4") - (hatch edge 0.5) - (priority 1) - (connect_pads - (clearance 0.5) - ) - (min_thickness 0.25) - (fill yes - (thermal_gap 0.5) - (thermal_bridge_width 0.5) - (island_removal_mode 0) - ) - (polygon - (pts - (xy 80 80) (xy 120 80) (xy 120 169) (xy 80 169) - ) - ) - (filled_polygon - (layer "B.Cu") - (pts - (xy 119.442539 80.520185) (xy 119.488294 80.572989) (xy 119.4995 80.6245) (xy 119.4995 148.686689) - (xy 119.479815 148.753728) (xy 119.427011 148.799483) (xy 119.357853 148.809427) (xy 119.294297 148.780402) - (xy 119.287819 148.77437) (xy 119.192654 148.679205) (xy 119.192649 148.679201) (xy 118.988848 148.531132) - (xy 118.988847 148.531131) (xy 118.988845 148.53113) (xy 118.918747 148.495413) (xy 118.764383 148.41676) - (xy 118.524785 148.33891) (xy 118.275962 148.2995) (xy 116.724038 148.2995) (xy 116.599626 148.319205) - (xy 116.475214 148.33891) (xy 116.235616 148.41676) (xy 116.011151 148.531132) (xy 115.80735 148.679201) - (xy 115.807345 148.679205) (xy 115.629205 148.857345) (xy 115.629201 148.85735) (xy 115.481132 149.061151) - (xy 115.36676 149.285616) (xy 115.28891 149.525214) (xy 115.2495 149.774038) (xy 115.2495 150.025961) - (xy 115.28891 150.274785) (xy 115.36676 150.514383) (xy 115.42963 150.63777) (xy 115.474305 150.725451) - (xy 115.481132 150.738848) (xy 115.629201 150.942649) (xy 115.629205 150.942654) (xy 115.721061 151.03451) - (xy 115.722163 151.036528) (xy 115.724141 151.037702) (xy 115.738824 151.067041) (xy 115.754546 151.095833) - (xy 115.754703 151.098768) (xy 115.755411 151.100183) (xy 115.756669 151.135455) (xy 115.756313 151.138764) - (xy 115.72957 151.203313) (xy 115.672175 151.243157) (xy 115.633024 151.2495) (xy 115.362229 151.2495) - (xy 115.29519 151.229815) (xy 115.274548 151.213181) (xy 114.786819 150.725451) (xy 114.753334 150.664128) - (xy 114.7505 150.63777) (xy 114.7505 149.426079) (xy 114.73577 149.352031) (xy 114.72552 149.3005) - (xy 114.721659 149.281088) (xy 114.666606 149.148182) (xy 114.665882 149.146251) (xy 114.665844 149.145747) - (xy 114.665764 149.145522) (xy 114.582954 149.021588) (xy 114.582952 149.021586) (xy 114.582951 149.021584) - (xy 114.478416 148.917049) (xy 114.240568 148.679201) (xy 113.478421 147.917052) (xy 113.478414 147.917046) - (xy 113.404729 147.867812) (xy 113.404729 147.867813) (xy 113.355491 147.834913) (xy 113.218917 147.778343) - (xy 113.218907 147.77834) (xy 113.07392 147.7495) (xy 113.073918 147.7495) (xy 109.804604 147.7495) - (xy 109.757155 147.740062) (xy 109.733497 147.730263) (xy 109.733493 147.730262) (xy 109.733488 147.73026) - (xy 109.578845 147.6995) (xy 109.578842 147.6995) (xy 109.421158 147.6995) (xy 109.421155 147.6995) - (xy 109.26651 147.730261) (xy 109.266498 147.730264) (xy 109.120827 147.790602) (xy 109.120814 147.790609) - (xy 108.989711 147.87821) (xy 108.989707 147.878213) (xy 108.963581 147.90434) (xy 108.944144 147.914952) - (xy 108.927411 147.929453) (xy 108.914079 147.931369) (xy 108.902258 147.937825) (xy 108.880171 147.936245) - (xy 108.858253 147.939397) (xy 108.846001 147.933801) (xy 108.832566 147.932841) (xy 108.814839 147.91957) - (xy 108.794697 147.910372) (xy 108.787414 147.89904) (xy 108.776633 147.890969) (xy 108.768895 147.870223) - (xy 108.756923 147.851594) (xy 108.753771 147.829675) (xy 108.752216 147.825505) (xy 108.7519 147.816659) - (xy 108.7519 147.648697) (xy 108.771585 147.581658) (xy 108.788219 147.561016) (xy 109.212417 147.136819) - (xy 109.27374 147.103334) (xy 109.300098 147.1005) (xy 111.413331 147.1005) (xy 111.413347 147.100501) - (xy 111.420943 147.100501) (xy 111.579054 147.100501) (xy 111.579057 147.100501) (xy 111.731785 147.059577) - (xy 111.781904 147.030639) (xy 111.868716 146.98052) (xy 111.98052 146.868716) (xy 111.980521 146.868714) - (xy 112.48052 146.368716) (xy 112.559577 146.231784) (xy 112.600501 146.079057) (xy 112.600501 145.920942) - (xy 112.600501 145.913347) (xy 112.6005 145.913329) (xy 112.6005 118.523375) (xy 112.600501 118.523362) - (xy 112.600501 118.355259) (xy 112.559576 118.202529) (xy 112.559573 118.202524) (xy 112.480524 118.065605) - (xy 112.480518 118.065597) (xy 110.636819 116.221898) (xy 110.603334 116.160575) (xy 110.6005 116.134217) - (xy 110.6005 100.579765) (xy 110.620185 100.512726) (xy 110.621398 100.510874) (xy 110.70939 100.379185) - (xy 110.70939 100.379184) (xy 110.709394 100.379179) (xy 110.769737 100.233497) (xy 110.8005 100.078842) - (xy 110.8005 99.921158) (xy 110.8005 99.921155) (xy 110.800499 99.921153) (xy 110.769738 99.76651) - (xy 110.769737 99.766503) (xy 110.769735 99.766498) (xy 110.709397 99.620827) (xy 110.70939 99.620814) - (xy 110.621789 99.489711) (xy 110.621786 99.489707) (xy 110.510292 99.378213) (xy 110.510288 99.37821) - (xy 110.379185 99.290609) (xy 110.379172 99.290602) (xy 110.233501 99.230264) (xy 110.233491 99.230261) - (xy 110.100308 99.203769) (xy 110.038397 99.171384) (xy 110.003823 99.110668) (xy 110.0005 99.082152) - (xy 110.0005 98.68294) (xy 110.020185 98.615901) (xy 110.036814 98.595263) (xy 110.121789 98.510289) - (xy 110.209394 98.379179) (xy 110.269737 98.233497) (xy 110.3005 98.078842) (xy 110.3005 97.921158) - (xy 110.3005 97.921155) (xy 110.300499 97.921153) (xy 110.269738 97.76651) (xy 110.269737 97.766503) - (xy 110.269735 97.766498) (xy 110.209397 97.620827) (xy 110.20939 97.620814) (xy 110.121789 97.489711) - (xy 110.121786 97.489707) (xy 110.010292 97.378213) (xy 110.010288 97.37821) (xy 109.879185 97.290609) - (xy 109.879172 97.290602) (xy 109.733501 97.230264) (xy 109.733489 97.230261) (xy 109.578845 97.1995) - (xy 109.578842 97.1995) (xy 109.421158 97.1995) (xy 109.421155 97.1995) (xy 109.26651 97.230261) - (xy 109.266498 97.230264) (xy 109.120827 97.290602) (xy 109.120814 97.290609) (xy 108.989711 97.37821) - (xy 108.989707 97.378213) (xy 108.878213 97.489707) (xy 108.87821 97.489711) (xy 108.790609 97.620814) - (xy 108.790602 97.620827) (xy 108.730264 97.766498) (xy 108.730261 97.76651) (xy 108.6995 97.921153) - (xy 108.6995 98.078846) (xy 108.730261 98.233489) (xy 108.730264 98.233501) (xy 108.790061 98.377864) - (xy 108.7995 98.425316) (xy 108.7995 100.81333) (xy 108.799499 100.813348) (xy 108.799499 100.979054) - (xy 108.799498 100.979054) (xy 108.799499 100.979057) (xy 108.840423 101.131785) (xy 108.840424 101.131787) - (xy 108.840423 101.131787) (xy 108.858444 101.162998) (xy 108.858446 101.163001) (xy 108.882887 101.205334) - (xy 108.8995 101.267334) (xy 108.8995 116.2755) (xy 108.879815 116.342539) (xy 108.827011 116.388294) - (xy 108.7755 116.3995) (xy 91.300098 116.3995) (xy 91.233059 116.379815) (xy 91.212417 116.363181) - (xy 91.136819 116.287583) (xy 91.103334 116.22626) (xy 91.1005 116.199902) (xy 91.1005 110.881902) - (xy 98.4995 110.881902) (xy 98.4995 111.118097) (xy 98.536446 111.351368) (xy 98.609433 111.575996) - (xy 98.716657 111.786433) (xy 98.855483 111.97751) (xy 99.02249 112.144517) (xy 99.213567 112.283343) - (xy 99.312991 112.334002) (xy 99.424003 112.390566) (xy 99.424005 112.390566) (xy 99.424008 112.390568) - (xy 99.544412 112.429689) (xy 99.648631 112.463553) (xy 99.881903 112.5005) (xy 99.881908 112.5005) - (xy 100.118097 112.5005) (xy 100.351368 112.463553) (xy 100.575992 112.390568) (xy 100.786433 112.283343) - (xy 100.97751 112.144517) (xy 101.144517 111.97751) (xy 101.283343 111.786433) (xy 101.390568 111.575992) - (xy 101.463553 111.351368) (xy 101.5005 111.118097) (xy 101.5005 110.881902) (xy 101.463553 110.648631) - (xy 101.390566 110.424003) (xy 101.283342 110.213566) (xy 101.144517 110.02249) (xy 100.97751 109.855483) - (xy 100.838987 109.75484) (xy 100.796323 109.699511) (xy 100.790257 109.630332) (xy 100.8005 109.578842) - (xy 100.8005 109.421158) (xy 100.8005 109.421155) (xy 100.800499 109.421153) (xy 100.769738 109.26651) - (xy 100.769737 109.266503) (xy 100.769735 109.266498) (xy 100.709397 109.120827) (xy 100.70939 109.120814) - (xy 100.621789 108.989711) (xy 100.621786 108.989707) (xy 100.510292 108.878213) (xy 100.510288 108.87821) - (xy 100.379185 108.790609) (xy 100.379172 108.790602) (xy 100.233501 108.730264) (xy 100.233489 108.730261) - (xy 100.078845 108.6995) (xy 100.078842 108.6995) (xy 99.921158 108.6995) (xy 99.921155 108.6995) - (xy 99.76651 108.730261) (xy 99.766498 108.730264) (xy 99.620827 108.790602) (xy 99.620814 108.790609) - (xy 99.489711 108.87821) (xy 99.489707 108.878213) (xy 99.378213 108.989707) (xy 99.37821 108.989711) - (xy 99.290609 109.120814) (xy 99.290602 109.120827) (xy 99.230264 109.266498) (xy 99.230261 109.26651) - (xy 99.1995 109.421153) (xy 99.1995 109.578846) (xy 99.209741 109.630332) (xy 99.203514 109.699924) - (xy 99.16101 109.75484) (xy 99.022496 109.855478) (xy 99.022487 109.855485) (xy 98.855485 110.022487) - (xy 98.855485 110.022488) (xy 98.855483 110.02249) (xy 98.795862 110.10455) (xy 98.716657 110.213566) - (xy 98.609433 110.424003) (xy 98.536446 110.648631) (xy 98.4995 110.881902) (xy 91.1005 110.881902) - (xy 91.1005 91.300098) (xy 91.109144 91.27066) (xy 91.115668 91.24067) (xy 91.119423 91.235653) - (xy 91.120185 91.233059) (xy 91.136819 91.212416) (xy 91.212418 91.136818) (xy 91.273742 91.103334) - (xy 91.300099 91.1005) (xy 99.420234 91.1005) (xy 99.487273 91.120185) (xy 99.489125 91.121398) - (xy 99.620814 91.20939) (xy 99.620827 91.209397) (xy 99.715799 91.248735) (xy 99.766503 91.269737) - (xy 99.919137 91.300098) (xy 99.921153 91.300499) (xy 99.921156 91.3005) (xy 99.921158 91.3005) - (xy 100.078844 91.3005) (xy 100.078845 91.300499) (xy 100.233497 91.269737) (xy 100.379179 91.209394) - (xy 100.510289 91.121789) (xy 100.621789 91.010289) (xy 100.709394 90.879179) (xy 100.769737 90.733497) - (xy 100.8005 90.578842) (xy 100.8005 90.421158) (xy 100.8005 90.421155) (xy 100.800499 90.421153) - (xy 100.769737 90.266503) (xy 100.769735 90.266498) (xy 100.709397 90.120827) (xy 100.70939 90.120814) - (xy 100.621789 89.989711) (xy 100.621786 89.989707) (xy 100.510292 89.878213) (xy 100.510288 89.87821) - (xy 100.379185 89.790609) (xy 100.379172 89.790602) (xy 100.233501 89.730264) (xy 100.233489 89.730261) - (xy 100.078845 89.6995) (xy 100.078842 89.6995) (xy 99.921158 89.6995) (xy 99.921155 89.6995) (xy 99.76651 89.730261) - (xy 99.766498 89.730264) (xy 99.620827 89.790602) (xy 99.620814 89.790609) (xy 99.489125 89.878602) - (xy 99.422447 89.89948) (xy 99.420234 89.8995) (xy 91.08667 89.8995) (xy 91.086654 89.899499) (xy 91.079058 89.899499) - (xy 90.920943 89.899499) (xy 90.844579 89.919961) (xy 90.768214 89.940423) (xy 90.768209 89.940426) - (xy 90.63129 90.019475) (xy 90.631282 90.019481) (xy 90.124217 90.526546) (xy 90.124214 90.526548) - (xy 90.124215 90.526549) (xy 90.019478 90.631286) (xy 89.969361 90.718094) (xy 89.969359 90.718096) - (xy 89.940425 90.768209) (xy 89.940424 90.76821) (xy 89.940423 90.768215) (xy 89.899499 90.920943) - (xy 89.899499 90.920945) (xy 89.899499 91.089046) (xy 89.8995 91.089059) (xy 89.8995 97.113444) - (xy 89.879815 97.180483) (xy 89.827011 97.226238) (xy 89.757853 97.236182) (xy 89.739575 97.231202) - (xy 89.739324 97.232031) (xy 89.7335 97.230264) (xy 89.733497 97.230263) (xy 89.733492 97.230262) - (xy 89.733489 97.230261) (xy 89.578845 97.1995) (xy 89.578842 97.1995) (xy 89.421158 97.1995) (xy 89.421155 97.1995) - (xy 89.266511 97.23026) (xy 89.266506 97.230262) (xy 89.266504 97.230262) (xy 89.266503 97.230263) - (xy 89.242844 97.240062) (xy 89.195396 97.2495) (xy 85.8745 97.2495) (xy 85.807461 97.229815) (xy 85.761706 97.177011) - (xy 85.7505 97.1255) (xy 85.7505 88.8745) (xy 85.770185 88.807461) (xy 85.822989 88.761706) (xy 85.8745 88.7505) - (xy 101.1255 88.7505) (xy 101.192539 88.770185) (xy 101.238294 88.822989) (xy 101.2495 88.8745) - (xy 101.2495 90.195396) (xy 101.240062 90.242844) (xy 101.230265 90.266498) (xy 101.230262 90.266506) - (xy 101.23026 90.266511) (xy 101.1995 90.421153) (xy 101.1995 90.578846) (xy 101.230261 90.733489) - (xy 101.230264 90.733501) (xy 101.290602 90.879172) (xy 101.290609 90.879185) (xy 101.37821 91.010288) - (xy 101.378213 91.010292) (xy 101.489707 91.121786) (xy 101.489711 91.121789) (xy 101.620814 91.20939) - (xy 101.620827 91.209397) (xy 101.715799 91.248735) (xy 101.766503 91.269737) (xy 101.919137 91.300098) - (xy 101.921153 91.300499) (xy 101.921156 91.3005) (xy 101.921158 91.3005) (xy 102.078844 91.3005) - (xy 102.078845 91.300499) (xy 102.233497 91.269737) (xy 102.379179 91.209394) (xy 102.510289 91.121789) - (xy 102.621789 91.010289) (xy 102.709394 90.879179) (xy 102.769737 90.733497) (xy 102.8005 90.578842) - (xy 102.8005 90.421158) (xy 102.8005 90.421155) (xy 102.800499 90.421153) (xy 102.769739 90.266511) - (xy 102.769738 90.266508) (xy 102.769737 90.266503) (xy 102.759937 90.242844) (xy 102.7505 90.195396) - (xy 102.7505 88.426079) (xy 102.721659 88.281092) (xy 102.721658 88.281091) (xy 102.721658 88.281087) - (xy 102.665085 88.144508) (xy 102.665085 88.144507) (xy 102.632186 88.09527) (xy 102.632185 88.095268) - (xy 102.582956 88.021589) (xy 102.582952 88.021584) (xy 101.978421 87.417052) (xy 101.978414 87.417046) - (xy 101.904729 87.367812) (xy 101.904729 87.367813) (xy 101.855491 87.334913) (xy 101.718917 87.278343) - (xy 101.718907 87.27834) (xy 101.57392 87.2495) (xy 101.573918 87.2495) (xy 85.426082 87.2495) (xy 85.42608 87.2495) - (xy 85.281092 87.27834) (xy 85.281086 87.278342) (xy 85.144508 87.334914) (xy 85.144496 87.334921) - (xy 85.095269 87.367813) (xy 85.021588 87.417044) (xy 85.02158 87.41705) (xy 84.41705 88.02158) - (xy 84.417044 88.021588) (xy 84.367812 88.095268) (xy 84.367813 88.095269) (xy 84.334921 88.144496) - (xy 84.334914 88.144508) (xy 84.278342 88.281086) (xy 84.27834 88.281092) (xy 84.2495 88.426079) - (xy 84.2495 88.426082) (xy 84.2495 97.926082) (xy 84.2495 117.573918) (xy 84.2495 117.57392) (xy 84.249499 117.57392) - (xy 84.27834 117.718907) (xy 84.278343 117.718917) (xy 84.334913 117.85549) (xy 84.334915 117.855493) - (xy 84.347776 117.874742) (xy 84.347775 117.874742) (xy 84.417046 117.978414) (xy 84.417052 117.978421) - (xy 85.417049 118.978416) (xy 85.521584 119.082951) (xy 85.521587 119.082953) (xy 85.521588 119.082954) - (xy 85.644503 119.165083) (xy 85.644506 119.165085) (xy 85.694665 119.185861) (xy 85.70108 119.188518) - (xy 85.781088 119.221659) (xy 85.897241 119.244763) (xy 85.92038 119.249365) (xy 85.926081 119.2505) - (xy 85.926082 119.2505) (xy 85.926083 119.2505) (xy 86.073918 119.2505) (xy 92.63777 119.2505) (xy 92.66721 119.259144) - (xy 92.697197 119.265668) (xy 92.702212 119.269422) (xy 92.704809 119.270185) (xy 92.725451 119.286819) - (xy 92.863181 119.424549) (xy 92.896666 119.485872) (xy 92.8995 119.51223) (xy 92.8995 120.812779) - (xy 92.879815 120.879818) (xy 92.848385 120.913097) (xy 92.770211 120.969893) (xy 92.656285 121.083819) - (xy 92.594962 121.117303) (xy 92.52527 121.112319) (xy 92.469337 121.070447) (xy 92.452422 121.03947) - (xy 92.403354 120.907913) (xy 92.40335 120.907906) (xy 92.31719 120.792812) (xy 92.317187 120.792809) - (xy 92.202093 120.706649) (xy 92.202086 120.706645) (xy 92.067379 120.656403) (xy 92.067372 120.656401) - (xy 92.007844 120.65) (xy 91.36 120.65) (xy 91.36 121.566988) (xy 91.302993 121.534075) (xy 91.175826 121.5) - (xy 91.044174 121.5) (xy 90.917007 121.534075) (xy 90.86 121.566988) (xy 90.86 120.65) (xy 90.212155 120.65) - (xy 90.152627 120.656401) (xy 90.15262 120.656403) (xy 90.017913 120.706645) (xy 90.017906 120.706649) - (xy 89.902812 120.792809) (xy 89.902809 120.792812) (xy 89.816649 120.907906) (xy 89.816645 120.907913) - (xy 89.766403 121.04262) (xy 89.766401 121.042627) (xy 89.76 121.102155) (xy 89.76 121.75) (xy 90.676988 121.75) - (xy 90.644075 121.807007) (xy 90.61 121.934174) (xy 90.61 122.065826) (xy 90.644075 122.192993) - (xy 90.676988 122.25) (xy 89.76 122.25) (xy 89.76 122.897844) (xy 89.766401 122.957372) (xy 89.766403 122.957379) - (xy 89.816645 123.092086) (xy 89.816649 123.092093) (xy 89.902809 123.207187) (xy 89.902812 123.20719) - (xy 90.017906 123.29335) (xy 90.017913 123.293354) (xy 90.15262 123.343596) (xy 90.152627 123.343598) - (xy 90.212155 123.349999) (xy 90.212172 123.35) (xy 90.86 123.35) (xy 90.86 122.433012) (xy 90.917007 122.465925) - (xy 91.044174 122.5) (xy 91.175826 122.5) (xy 91.302993 122.465925) (xy 91.36 122.433012) (xy 91.36 123.35) - (xy 92.007828 123.35) (xy 92.007844 123.349999) (xy 92.067372 123.343598) (xy 92.067379 123.343596) - (xy 92.202086 123.293354) (xy 92.202093 123.29335) (xy 92.317187 123.20719) (xy 92.31719 123.207187) - (xy 92.40335 123.092093) (xy 92.403354 123.092086) (xy 92.452422 122.960529) (xy 92.494293 122.904595) - (xy 92.559757 122.880178) (xy 92.62803 122.89503) (xy 92.656285 122.916181) (xy 92.770213 123.030109) - (xy 92.942179 123.155048) (xy 92.942181 123.155049) (xy 92.942184 123.155051) (xy 93.131588 123.251557) - (xy 93.333757 123.317246) (xy 93.543713 123.3505) (xy 93.543714 123.3505) (xy 93.756286 123.3505) - (xy 93.756287 123.3505) (xy 93.966243 123.317246) (xy 94.168412 123.251557) (xy 94.357816 123.155051) - (xy 94.444471 123.092093) (xy 94.529786 123.030109) (xy 94.529788 123.030106) (xy 94.529792 123.030104) - (xy 94.680104 122.879792) (xy 94.680106 122.879788) (xy 94.680109 122.879786) (xy 94.805048 122.70782) - (xy 94.805047 122.70782) (xy 94.805051 122.707816) (xy 94.809514 122.699054) (xy 94.857488 122.648259) - (xy 94.925308 122.631463) (xy 94.991444 122.653999) (xy 95.030486 122.699056) (xy 95.034951 122.70782) - (xy 95.15989 122.879786) (xy 95.310213 123.030109) (xy 95.482179 123.155048) (xy 95.482181 123.155049) - (xy 95.482184 123.155051) (xy 95.671588 123.251557) (xy 95.873757 123.317246) (xy 96.083713 123.3505) - (xy 96.083714 123.3505) (xy 96.296286 123.3505) (xy 96.296287 123.3505) (xy 96.506243 123.317246) - (xy 96.708412 123.251557) (xy 96.897816 123.155051) (xy 96.984471 123.092093) (xy 97.069786 123.030109) - (xy 97.069788 123.030106) (xy 97.069792 123.030104) (xy 97.220104 122.879792) (xy 97.220106 122.879788) - (xy 97.220109 122.879786) (xy 97.345048 122.70782) (xy 97.345047 122.70782) (xy 97.345051 122.707816) - (xy 97.349514 122.699054) (xy 97.397488 122.648259) (xy 97.465308 122.631463) (xy 97.531444 122.653999) - (xy 97.570486 122.699056) (xy 97.574951 122.70782) (xy 97.69989 122.879786) (xy 97.850213 123.030109) - (xy 98.022179 123.155048) (xy 98.022181 123.155049) (xy 98.022184 123.155051) (xy 98.211588 123.251557) - (xy 98.413757 123.317246) (xy 98.623713 123.3505) (xy 98.623714 123.3505) (xy 98.836286 123.3505) - (xy 98.836287 123.3505) (xy 99.046243 123.317246) (xy 99.248412 123.251557) (xy 99.437816 123.155051) - (xy 99.524471 123.092093) (xy 99.609786 123.030109) (xy 99.609788 123.030106) (xy 99.609792 123.030104) - (xy 99.760104 122.879792) (xy 99.760106 122.879788) (xy 99.760109 122.879786) (xy 99.885048 122.70782) - (xy 99.885047 122.70782) (xy 99.885051 122.707816) (xy 99.889514 122.699054) (xy 99.937488 122.648259) - (xy 100.005308 122.631463) (xy 100.071444 122.653999) (xy 100.110486 122.699056) (xy 100.114951 122.70782) - (xy 100.23989 122.879786) (xy 100.390213 123.030109) (xy 100.562184 123.155051) (xy 100.562184 123.155052) - (xy 100.601793 123.175233) (xy 100.65259 123.223206) (xy 100.6695 123.285718) (xy 100.6695 124.7755) - (xy 100.649815 124.842539) (xy 100.597011 124.888294) (xy 100.5455 124.8995) (xy 89.789573 124.8995) - (xy 89.636844 124.940423) (xy 89.606029 124.958215) (xy 89.606028 124.958215) (xy 89.499917 125.019477) - (xy 89.499912 125.019481) (xy 88.133371 126.386022) (xy 88.13336 126.386033) (xy 88.131286 126.388108) - (xy 88.131284 126.38811) (xy 88.01948 126.499914) (xy 88.008184 126.51948) (xy 87.940423 126.636845) - (xy 87.899499 126.789573) (xy 87.899499 126.789575) (xy 87.899499 126.957676) (xy 87.8995 126.957689) - (xy 87.8995 157.91333) (xy 87.899499 157.913348) (xy 87.899499 158.079054) (xy 87.899498 158.079054) - (xy 87.940423 158.231787) (xy 87.940424 158.231788) (xy 87.965979 158.27605) (xy 87.965981 158.276053) - (xy 87.965982 158.276054) (xy 88.001409 158.337416) (xy 88.019479 158.368714) (xy 88.019481 158.368717) - (xy 88.138349 158.487585) (xy 88.138355 158.48759) (xy 88.546839 158.896074) (xy 88.546849 158.896085) - (xy 88.551179 158.900415) (xy 88.55118 158.900416) (xy 88.662984 159.01222) (xy 88.662986 159.012221) - (xy 88.66299 159.012224) (xy 88.702073 159.034788) (xy 88.799916 159.091277) (xy 88.911719 159.121234) - (xy 88.952642 159.1322) (xy 88.952643 159.1322) (xy 90.00601 159.1322) (xy 90.073049 159.151885) - (xy 90.118804 159.204689) (xy 90.125223 159.222082) (xy 90.126239 159.22563) (xy 90.177489 159.404745) - (xy 90.17749 159.404748) (xy 90.177491 159.404749) (xy 90.271702 159.585107) (xy 90.271704 159.585109) - (xy 90.384415 159.723339) (xy 90.411524 159.787736) (xy 90.399515 159.856565) (xy 90.384415 159.880061) - (xy 90.321371 159.957379) (xy 90.271702 160.018293) (xy 90.233156 160.092086) (xy 90.177489 160.198654) - (xy 90.121514 160.394283) (xy 90.121513 160.394286) (xy 90.1109 160.513666) (xy 90.1109 161.629728) - (xy 90.110901 161.629734) (xy 90.121513 161.749115) (xy 90.177489 161.944745) (xy 90.17749 161.944748) - (xy 90.177491 161.944749) (xy 90.271702 162.125107) (xy 90.271704 162.125109) (xy 90.384415 162.263339) - (xy 90.411524 162.327736) (xy 90.399515 162.396565) (xy 90.384415 162.420061) (xy 90.271702 162.558293) - (xy 90.224596 162.648472) (xy 90.177489 162.738654) (xy 90.121514 162.934283) (xy 90.121513 162.934286) - (xy 90.1109 163.053666) (xy 90.1109 164.169728) (xy 90.110901 164.169734) (xy 90.121513 164.289115) - (xy 90.177489 164.484745) (xy 90.17749 164.484748) (xy 90.177491 164.484749) (xy 90.271702 164.665107) - (xy 90.271704 164.665109) (xy 90.384415 164.803339) (xy 90.411524 164.867736) (xy 90.399515 164.936565) - (xy 90.384415 164.960061) (xy 90.271707 165.098287) (xy 90.271702 165.098293) (xy 90.224596 165.188472) - (xy 90.177489 165.278654) (xy 90.121514 165.474283) (xy 90.121513 165.474286) (xy 90.1109 165.593666) - (xy 90.1109 166.709728) (xy 90.110901 166.709734) (xy 90.121513 166.829115) (xy 90.177489 167.024745) - (xy 90.17749 167.024748) (xy 90.177491 167.024749) (xy 90.271702 167.205107) (xy 90.271704 167.205109) - (xy 90.40029 167.362809) (xy 90.494203 167.439384) (xy 90.557993 167.491398) (xy 90.738351 167.585609) - (xy 90.933982 167.641586) (xy 91.053363 167.6522) (xy 92.919436 167.652199) (xy 93.038818 167.641586) - (xy 93.234449 167.585609) (xy 93.414807 167.491398) (xy 93.572509 167.362809) (xy 93.701098 167.205107) - (xy 93.795309 167.024749) (xy 93.851286 166.829118) (xy 93.8619 166.709737) (xy 93.861899 165.593664) - (xy 93.851286 165.474282) (xy 93.795309 165.278651) (xy 93.701098 165.098293) (xy 93.588383 164.960059) - (xy 93.561275 164.895665) (xy 93.573284 164.826835) (xy 93.588381 164.803342) (xy 93.701098 164.665107) - (xy 93.795309 164.484749) (xy 93.851286 164.289118) (xy 93.8619 164.169737) (xy 93.861899 163.053664) - (xy 93.851286 162.934282) (xy 93.797755 162.747199) (xy 93.79531 162.738654) (xy 93.795309 162.738653) - (xy 93.795309 162.738651) (xy 93.701098 162.558293) (xy 93.588383 162.420059) (xy 93.561275 162.355665) - (xy 93.573284 162.286835) (xy 93.588381 162.263342) (xy 93.701098 162.125107) (xy 93.795309 161.944749) - (xy 93.851286 161.749118) (xy 93.8619 161.629737) (xy 93.861899 160.513664) (xy 93.851286 160.394282) - (xy 93.797752 160.20719) (xy 93.79531 160.198654) (xy 93.795309 160.198653) (xy 93.795309 160.198651) - (xy 93.701098 160.018293) (xy 93.588383 159.880059) (xy 93.561275 159.815665) (xy 93.573284 159.746835) - (xy 93.588381 159.723342) (xy 93.701098 159.585107) (xy 93.795309 159.404749) (xy 93.851286 159.209118) - (xy 93.8619 159.089737) (xy 93.861899 157.973664) (xy 93.851286 157.854282) (xy 93.795309 157.658651) - (xy 93.701098 157.478293) (xy 93.588383 157.340059) (xy 93.561275 157.275665) (xy 93.573284 157.206835) - (xy 93.588381 157.183342) (xy 93.701098 157.045107) (xy 93.795309 156.864749) (xy 93.851286 156.669118) - (xy 93.8619 156.549737) (xy 93.861899 155.433664) (xy 93.851286 155.314282) (xy 93.795309 155.118651) - (xy 93.701098 154.938293) (xy 93.588383 154.800059) (xy 93.561275 154.735665) (xy 93.573284 154.666835) - (xy 93.588381 154.643342) (xy 93.701098 154.505107) (xy 93.795309 154.324749) (xy 93.851286 154.129118) - (xy 93.8619 154.009737) (xy 93.861899 152.893664) (xy 93.851286 152.774282) (xy 93.79654 152.582954) - (xy 93.79531 152.578654) (xy 93.795309 152.578653) (xy 93.795309 152.578651) (xy 93.701098 152.398293) - (xy 93.588383 152.260059) (xy 93.561275 152.195665) (xy 93.573284 152.126835) (xy 93.588381 152.103342) - (xy 93.687779 151.981441) (xy 97.4095 151.981441) (xy 97.4095 154.018558) (xy 97.424157 154.148648) - (xy 97.424159 154.148658) (xy 97.481877 154.313604) (xy 97.481878 154.313606) (xy 97.574853 154.461576) - (xy 97.698424 154.585147) (xy 97.846394 154.678122) (xy 98.011343 154.735841) (xy 98.011349 154.735841) - (xy 98.011351 154.735842) (xy 98.05275 154.740506) (xy 98.141442 154.750499) (xy 98.141445 154.7505) - (xy 98.141448 154.7505) (xy 98.778555 154.7505) (xy 98.778556 154.750499) (xy 98.908657 154.735841) - (xy 99.073606 154.678122) (xy 99.221576 154.585147) (xy 99.345147 154.461576) (xy 99.438122 154.313606) - (xy 99.495841 154.148657) (xy 99.5105 154.018552) (xy 99.5105 153.696447) (xy 99.95 153.696447) - (xy 100.646447 153) (xy 100.646447 152.999999) (xy 101.353553 152.999999) (xy 101.353553 153) (xy 102.049999 153.696447) - (xy 102.05 153.696446) (xy 102.05 152.303553) (xy 102.049999 152.303552) (xy 101.353553 152.999999) - (xy 100.646447 152.999999) (xy 99.95 152.303552) (xy 99.95 153.696447) (xy 99.5105 153.696447) (xy 99.5105 151.981448) - (xy 99.495841 151.851343) (xy 99.438122 151.686394) (xy 99.431377 151.675659) (xy 100.029212 151.675659) - (xy 101 152.646447) (xy 101.000001 152.646447) (xy 101.970786 151.675659) (xy 101.884753 151.538737) - (xy 101.761262 151.415246) (xy 101.613386 151.32233) (xy 101.448539 151.264648) (xy 101.31853 151.25) - (xy 100.681469 151.25) (xy 100.55146 151.264648) (xy 100.386613 151.32233) (xy 100.238737 151.415246) - (xy 100.115245 151.538738) (xy 100.029212 151.675659) (xy 99.431377 151.675659) (xy 99.345147 151.538424) - (xy 99.286819 151.480096) (xy 99.253334 151.418773) (xy 99.2505 151.392415) (xy 99.2505 149.862229) - (xy 99.270185 149.79519) (xy 99.286819 149.774548) (xy 99.774548 149.286819) (xy 99.835871 149.253334) - (xy 99.862229 149.2505) (xy 106.195396 149.2505) (xy 106.242844 149.259937) (xy 106.266503 149.269737) - (xy 106.266508 149.269738) (xy 106.266511 149.269739) (xy 106.421153 149.300499) (xy 106.421156 149.3005) - (xy 106.421158 149.3005) (xy 106.578844 149.3005) (xy 106.578845 149.300499) (xy 106.733497 149.269737) - (xy 106.879179 149.209394) (xy 107.010289 149.121789) (xy 107.121789 149.010289) (xy 107.209394 148.879179) - (xy 107.269737 148.733497) (xy 107.3005 148.578842) (xy 107.3005 148.421158) (xy 107.3005 148.421155) - (xy 107.300499 148.421153) (xy 107.28414 148.33891) (xy 107.269737 148.266503) (xy 107.2481 148.214266) - (xy 107.209397 148.120827) (xy 107.20939 148.120814) (xy 107.121789 147.989711) (xy 107.121786 147.989707) - (xy 107.010292 147.878213) (xy 107.010288 147.87821) (xy 106.879185 147.790609) (xy 106.879172 147.790602) - (xy 106.733501 147.730264) (xy 106.733489 147.730261) (xy 106.578845 147.6995) (xy 106.578842 147.6995) - (xy 106.421158 147.6995) (xy 106.421155 147.6995) (xy 106.266511 147.73026) (xy 106.266506 147.730262) - (xy 106.266504 147.730262) (xy 106.266503 147.730263) (xy 106.242844 147.740062) (xy 106.195396 147.7495) - (xy 99.426076 147.7495) (xy 99.397242 147.755234) (xy 99.397243 147.755235) (xy 99.281093 147.778339) - (xy 99.281083 147.778342) (xy 99.201081 147.811479) (xy 99.201082 147.81148) (xy 99.144505 147.834915) - (xy 99.082835 147.876121) (xy 99.079706 147.878213) (xy 99.062372 147.889795) (xy 99.021585 147.917047) - (xy 99.021581 147.91705) (xy 97.917045 149.021586) (xy 97.880381 149.076462) (xy 97.880379 149.076465) - (xy 97.834919 149.144499) (xy 97.834912 149.144511) (xy 97.778343 149.281082) (xy 97.77834 149.281092) - (xy 97.7495 149.426079) (xy 97.7495 151.314406) (xy 97.729815 151.381445) (xy 97.702815 151.411351) - (xy 97.698424 151.414852) (xy 97.574853 151.538423) (xy 97.481877 151.686395) (xy 97.424159 151.851341) - (xy 97.424157 151.851351) (xy 97.4095 151.981441) (xy 93.687779 151.981441) (xy 93.701098 151.965107) - (xy 93.795309 151.784749) (xy 93.851286 151.589118) (xy 93.8619 151.469737) (xy 93.861899 150.353664) - (xy 93.851286 150.234282) (xy 93.795309 150.038651) (xy 93.701098 149.858293) (xy 93.605681 149.741273) - (xy 93.572509 149.70059) (xy 93.414809 149.572004) (xy 93.41481 149.572004) (xy 93.414807 149.572002) - (xy 93.234449 149.477791) (xy 93.234448 149.47779) (xy 93.234445 149.477789) (xy 93.117229 149.44425) - (xy 93.038818 149.421814) (xy 93.038815 149.421813) (xy 93.038813 149.421813) (xy 92.966031 149.415342) - (xy 92.919437 149.4112) (xy 92.919433 149.4112) (xy 92.7109 149.4112) (xy 92.643861 149.391515) - (xy 92.598106 149.338711) (xy 92.5869 149.2872) (xy 92.5869 146.813697) (xy 92.595544 146.784256) - (xy 92.602068 146.75427) (xy 92.605822 146.749254) (xy 92.606585 146.746658) (xy 92.623219 146.726016) - (xy 92.712416 146.636819) (xy 92.773739 146.603334) (xy 92.800097 146.6005) (xy 107.750902 146.6005) - (xy 107.817941 146.620185) (xy 107.863696 146.672989) (xy 107.87364 146.742147) (xy 107.844615 146.805703) - (xy 107.838583 146.812181) (xy 107.670881 146.979882) (xy 107.670875 146.97989) (xy 107.62487 147.059575) - (xy 107.62487 147.059576) (xy 107.591823 147.116814) (xy 107.591823 147.116815) (xy 107.550899 147.269543) - (xy 107.550899 147.269545) (xy 107.550899 147.437646) (xy 107.5509 147.437659) (xy 107.5509 149.2872) - (xy 107.531215 149.354239) (xy 107.478411 149.399994) (xy 107.426901 149.4112) (xy 107.218371 149.4112) - (xy 107.218365 149.4112) (xy 107.218364 149.411201) (xy 107.206716 149.412236) (xy 107.098984 149.421813) - (xy 106.903354 149.477789) (xy 106.813172 149.524896) (xy 106.722993 149.572002) (xy 106.722991 149.572003) - (xy 106.72299 149.572004) (xy 106.56529 149.70059) (xy 106.436704 149.85829) (xy 106.342489 150.038654) - (xy 106.286514 150.234283) (xy 106.286513 150.234286) (xy 106.2759 150.353666) (xy 106.2759 151.469728) - (xy 106.275901 151.469734) (xy 106.286513 151.589115) (xy 106.342489 151.784745) (xy 106.34249 151.784748) - (xy 106.342491 151.784749) (xy 106.436702 151.965107) (xy 106.497838 152.040085) (xy 106.549415 152.103339) - (xy 106.576524 152.167736) (xy 106.564515 152.236565) (xy 106.549415 152.260061) (xy 106.436704 152.39829) - (xy 106.342489 152.578654) (xy 106.317759 152.665084) (xy 106.287687 152.770185) (xy 106.286514 152.774283) - (xy 106.286513 152.774286) (xy 106.2759 152.893666) (xy 106.2759 154.009728) (xy 106.275901 154.009734) - (xy 106.286513 154.129115) (xy 106.342489 154.324745) (xy 106.34249 154.324748) (xy 106.342491 154.324749) - (xy 106.436702 154.505107) (xy 106.492329 154.573328) (xy 106.549415 154.643339) (xy 106.576524 154.707736) - (xy 106.564515 154.776565) (xy 106.549415 154.800061) (xy 106.537523 154.814646) (xy 106.436702 154.938293) - (xy 106.404469 155) (xy 106.342489 155.118654) (xy 106.320439 155.195719) (xy 106.287134 155.312117) - (xy 106.286514 155.314283) (xy 106.286513 155.314286) (xy 106.2759 155.433666) (xy 106.2759 156.549728) - (xy 106.275901 156.549734) (xy 106.286513 156.669115) (xy 106.342489 156.864745) (xy 106.34249 156.864748) - (xy 106.342491 156.864749) (xy 106.436702 157.045107) (xy 106.436704 157.045109) (xy 106.549415 157.183339) - (xy 106.576524 157.247736) (xy 106.564515 157.316565) (xy 106.549415 157.340061) (xy 106.436702 157.478293) - (xy 106.389596 157.568472) (xy 106.342489 157.658654) (xy 106.304103 157.792812) (xy 106.290226 157.841311) - (xy 106.286514 157.854283) (xy 106.286513 157.854286) (xy 106.280587 157.920943) (xy 106.276236 157.96989) - (xy 106.2759 157.973666) (xy 106.2759 159.089728) (xy 106.2759 159.089733) (xy 106.275901 159.089736) - (xy 106.276066 159.091588) (xy 106.286513 159.209115) (xy 106.342489 159.404745) (xy 106.34249 159.404748) - (xy 106.342491 159.404749) (xy 106.436702 159.585107) (xy 106.436704 159.585109) (xy 106.549415 159.723339) - (xy 106.576524 159.787736) (xy 106.564515 159.856565) (xy 106.549415 159.880061) (xy 106.486371 159.957379) - (xy 106.436702 160.018293) (xy 106.398156 160.092086) (xy 106.342489 160.198654) (xy 106.286514 160.394283) - (xy 106.286513 160.394286) (xy 106.2759 160.513666) (xy 106.2759 161.629728) (xy 106.275901 161.629734) - (xy 106.286513 161.749115) (xy 106.342489 161.944745) (xy 106.34249 161.944748) (xy 106.342491 161.944749) - (xy 106.436702 162.125107) (xy 106.436704 162.125109) (xy 106.549738 162.263735) (xy 106.576847 162.328132) - (xy 106.564838 162.396961) (xy 106.549738 162.420457) (xy 106.437121 162.55857) (xy 106.342957 162.738838) - (xy 106.287009 162.934371) (xy 106.287008 162.934374) (xy 106.2764 163.053699) (xy 106.2764 164.1697) - (xy 106.287008 164.289025) (xy 106.287009 164.289028) (xy 106.342957 164.484561) (xy 106.437121 164.664829) - (xy 106.549738 164.802942) (xy 106.576847 164.867338) (xy 106.564838 164.936168) (xy 106.549738 164.959663) - (xy 106.436705 165.098287) (xy 106.342489 165.278654) (xy 106.286514 165.474283) (xy 106.286513 165.474286) - (xy 106.2759 165.593666) (xy 106.2759 166.709728) (xy 106.275901 166.709734) (xy 106.286513 166.829115) - (xy 106.342489 167.024745) (xy 106.34249 167.024748) (xy 106.342491 167.024749) (xy 106.436702 167.205107) - (xy 106.436704 167.205109) (xy 106.56529 167.362809) (xy 106.659203 167.439384) (xy 106.722993 167.491398) - (xy 106.903351 167.585609) (xy 107.098982 167.641586) (xy 107.218363 167.6522) (xy 109.084436 167.652199) - (xy 109.203818 167.641586) (xy 109.399449 167.585609) (xy 109.579807 167.491398) (xy 109.737509 167.362809) - (xy 109.866098 167.205107) (xy 109.960309 167.024749) (xy 110.016286 166.829118) (xy 110.0269 166.709737) - (xy 110.026899 165.593664) (xy 110.016286 165.474282) (xy 109.960309 165.278651) (xy 109.866098 165.098293) - (xy 109.753061 164.959664) (xy 109.725952 164.895268) (xy 109.737961 164.826438) (xy 109.753062 164.802941) - (xy 109.865678 164.66483) (xy 109.959842 164.484561) (xy 110.01579 164.289028) (xy 110.015791 164.289025) - (xy 110.026399 164.1697) (xy 110.0264 164.169698) (xy 110.0264 163.053702) (xy 110.026399 163.053699) - (xy 110.015791 162.934374) (xy 110.01579 162.934371) (xy 109.959842 162.738838) (xy 109.865678 162.55857) - (xy 109.753061 162.420457) (xy 109.725952 162.356061) (xy 109.737961 162.287231) (xy 109.753058 162.263739) - (xy 109.866098 162.125107) (xy 109.960309 161.944749) (xy 110.016286 161.749118) (xy 110.0269 161.629737) - (xy 110.026899 160.513664) (xy 110.016286 160.394282) (xy 109.962752 160.20719) (xy 109.96031 160.198654) - (xy 109.960309 160.198653) (xy 109.960309 160.198651) (xy 109.866098 160.018293) (xy 109.753383 159.880059) - (xy 109.726275 159.815665) (xy 109.738284 159.746835) (xy 109.753381 159.723342) (xy 109.866098 159.585107) - (xy 109.960309 159.404749) (xy 110.016286 159.209118) (xy 110.0269 159.089737) (xy 110.026899 157.973664) - (xy 110.016286 157.854282) (xy 109.960309 157.658651) (xy 109.866098 157.478293) (xy 109.753383 157.340059) - (xy 109.726275 157.275665) (xy 109.738284 157.206835) (xy 109.753381 157.183342) (xy 109.866098 157.045107) - (xy 109.960309 156.864749) (xy 110.016286 156.669118) (xy 110.0269 156.549737) (xy 110.026899 155.433664) - (xy 110.016286 155.314282) (xy 109.960309 155.118651) (xy 109.866098 154.938293) (xy 109.753383 154.800059) - (xy 109.726275 154.735665) (xy 109.738284 154.666835) (xy 109.753381 154.643342) (xy 109.866098 154.505107) - (xy 109.960309 154.324749) (xy 110.016286 154.129118) (xy 110.0269 154.009737) (xy 110.026899 152.893664) - (xy 110.016286 152.774282) (xy 109.96154 152.582954) (xy 109.96031 152.578654) (xy 109.960309 152.578653) - (xy 109.960309 152.578651) (xy 109.866098 152.398293) (xy 109.753383 152.260059) (xy 109.726275 152.195665) - (xy 109.738284 152.126835) (xy 109.753381 152.103342) (xy 109.866098 151.965107) (xy 109.960309 151.784749) - (xy 110.016286 151.589118) (xy 110.0269 151.469737) (xy 110.026899 150.353664) (xy 110.016286 150.234282) - (xy 109.960309 150.038651) (xy 109.866098 149.858293) (xy 109.770681 149.741273) (xy 109.737509 149.70059) - (xy 109.579807 149.572002) (xy 109.507837 149.534408) (xy 109.45753 149.485922) (xy 109.441423 149.417934) - (xy 109.464629 149.352031) (xy 109.519782 149.309136) (xy 109.539893 149.30312) (xy 109.552435 149.3005) - (xy 109.578842 149.3005) (xy 109.733497 149.269737) (xy 109.767883 149.255494) (xy 109.779248 149.25312) - (xy 109.787942 149.253814) (xy 109.804604 149.2505) (xy 112.63777 149.2505) (xy 112.704809 149.270185) - (xy 112.725451 149.286819) (xy 113.213181 149.774548) (xy 113.246666 149.835871) (xy 113.2495 149.862229) - (xy 113.2495 151.073918) (xy 113.2495 151.07392) (xy 113.249499 151.07392) (xy 113.27834 151.218907) - (xy 113.278343 151.218917) (xy 113.334912 151.355488) (xy 113.334916 151.355495) (xy 113.359453 151.392217) - (xy 113.359454 151.39222) (xy 113.359455 151.39222) (xy 113.411248 151.469736) (xy 113.417051 151.47842) - (xy 113.417052 151.478421) (xy 114.417049 152.478416) (xy 114.521584 152.582951) (xy 114.521587 152.582953) - (xy 114.521588 152.582954) (xy 114.644503 152.665083) (xy 114.644506 152.665085) (xy 114.694665 152.685861) - (xy 114.70108 152.688518) (xy 114.781088 152.721659) (xy 114.897241 152.744763) (xy 114.92038 152.749365) - (xy 114.926081 152.7505) (xy 114.926082 152.7505) (xy 114.926083 152.7505) (xy 115.073918 152.7505) - (xy 115.633023 152.7505) (xy 115.700062 152.770185) (xy 115.745817 152.822989) (xy 115.753266 152.850134) - (xy 115.754124 152.849932) (xy 115.755907 152.857479) (xy 115.806202 152.992328) (xy 115.806206 152.992335) - (xy 115.892451 153.107543) (xy 115.892452 153.107544) (xy 115.892454 153.107546) (xy 115.930777 153.136234) - (xy 115.972647 153.192167) (xy 115.977631 153.261859) (xy 115.956784 153.308385) (xy 115.930475 153.344595) - (xy 115.841117 153.51997) (xy 115.78029 153.707173) (xy 115.7495 153.901577) (xy 115.7495 154.098422) - (xy 115.78029 154.292826) (xy 115.841117 154.480029) (xy 115.894677 154.585146) (xy 115.930476 154.655405) - (xy 116.046172 154.814646) (xy 116.046174 154.814648) (xy 116.143845 154.912319) (xy 116.17733 154.973642) - (xy 116.172346 155.043334) (xy 116.143845 155.087681) (xy 116.046174 155.185351) (xy 116.046174 155.185352) - (xy 116.046172 155.185354) (xy 116.016452 155.22626) (xy 115.930476 155.344594) (xy 115.841117 155.51997) - (xy 115.78029 155.707173) (xy 115.7495 155.901577) (xy 115.7495 156.098422) (xy 115.78029 156.292826) - (xy 115.841117 156.480029) (xy 115.932352 156.659087) (xy 115.945248 156.727757) (xy 115.918971 156.792497) - (xy 115.894753 156.815699) (xy 115.80735 156.879202) (xy 115.807341 156.879209) (xy 115.629205 157.057345) - (xy 115.629201 157.05735) (xy 115.481132 157.261151) (xy 115.36676 157.485616) (xy 115.28891 157.725214) - (xy 115.268468 157.854282) (xy 115.2495 157.974038) (xy 115.2495 158.225962) (xy 115.251083 158.235954) - (xy 115.28891 158.474785) (xy 115.36676 158.714383) (xy 115.433507 158.845379) (xy 115.46245 158.902184) - (xy 115.481132 158.938848) (xy 115.629201 159.142649) (xy 115.629205 159.142654) (xy 115.807345 159.320794) - (xy 115.80735 159.320798) (xy 115.980934 159.446913) (xy 116.011155 159.46887) (xy 116.108387 159.518412) - (xy 116.235616 159.583239) (xy 116.235618 159.583239) (xy 116.235621 159.583241) (xy 116.475215 159.66109) - (xy 116.724038 159.7005) (xy 116.724039 159.7005) (xy 118.275961 159.7005) (xy 118.275962 159.7005) - (xy 118.524785 159.66109) (xy 118.764379 159.583241) (xy 118.988845 159.46887) (xy 119.192656 159.320793) - (xy 119.287819 159.22563) (xy 119.349142 159.192145) (xy 119.418834 159.197129) (xy 119.474767 159.239001) - (xy 119.499184 159.304465) (xy 119.4995 159.313311) (xy 119.4995 168.3755) (xy 119.479815 168.442539) - (xy 119.427011 168.488294) (xy 119.3755 168.4995) (xy 102.161746 168.4995) (xy 102.094707 168.479815) - (xy 102.048952 168.427011) (xy 102.039008 168.357853) (xy 102.068033 168.294297) (xy 102.088861 168.275182) - (xy 102.187785 168.203309) (xy 102.187783 168.203309) (xy 102.187792 168.203304) (xy 102.338104 168.052992) - (xy 102.338106 168.052988) (xy 102.338109 168.052986) (xy 102.463048 167.88102) (xy 102.463047 167.88102) - (xy 102.463051 167.881016) (xy 102.559557 167.691612) (xy 102.625246 167.489443) (xy 102.6585 167.279487) - (xy 102.6585 167.066913) (xy 102.625246 166.856957) (xy 102.559557 166.654788) (xy 102.463051 166.465384) - (xy 102.463049 166.465381) (xy 102.463048 166.465379) (xy 102.338109 166.293413) (xy 102.187786 166.14309) - (xy 102.015817 166.018149) (xy 102.006504 166.013404) (xy 101.955707 165.96543) (xy 101.938912 165.897609) - (xy 101.961449 165.831474) (xy 102.006507 165.792432) (xy 102.015555 165.787822) (xy 102.069716 165.74847) - (xy 102.069717 165.74847) (xy 101.308 164.986754) (xy 100.546282 165.748469) (xy 100.546282 165.74847) - (xy 100.600452 165.787826) (xy 100.600451 165.787826) (xy 100.609495 165.792434) (xy 100.660292 165.840408) - (xy 100.677087 165.908229) (xy 100.65455 165.974364) (xy 100.609499 166.013402) (xy 100.600182 166.018149) - (xy 100.428213 166.14309) (xy 100.27789 166.293413) (xy 100.152949 166.465382) (xy 100.148484 166.474146) - (xy 100.100509 166.524942) (xy 100.032688 166.541736) (xy 99.966553 166.519198) (xy 99.927516 166.474146) - (xy 99.92305 166.465382) (xy 99.798109 166.293413) (xy 99.647786 166.14309) (xy 99.47582 166.018151) - (xy 99.475115 166.017791) (xy 99.467054 166.013685) (xy 99.416259 165.965712) (xy 99.399463 165.897892) - (xy 99.421999 165.831756) (xy 99.467054 165.792715) (xy 99.475816 165.788251) (xy 99.530572 165.748469) - (xy 99.647786 165.663309) (xy 99.647788 165.663306) (xy 99.647792 165.663304) (xy 99.798104 165.512992) - (xy 99.798106 165.512988) (xy 99.798109 165.512986) (xy 99.88389 165.394917) (xy 99.923051 165.341016) - (xy 99.927793 165.331708) (xy 99.975763 165.280911) (xy 100.043583 165.264111) (xy 100.109719 165.286645) - (xy 100.148763 165.3317) (xy 100.153373 165.340747) (xy 100.192728 165.394916) (xy 100.954446 164.6332) - (xy 100.954445 164.633199) (xy 101.661554 164.633199) (xy 101.661554 164.6332) (xy 102.42327 165.394917) - (xy 102.42327 165.394916) (xy 102.462622 165.340754) (xy 102.559095 165.151417) (xy 102.624757 164.94933) - (xy 102.624757 164.949327) (xy 102.658 164.739446) (xy 102.658 164.526953) (xy 102.624757 164.317072) - (xy 102.624757 164.317069) (xy 102.559095 164.114982) (xy 102.462624 163.925649) (xy 102.42327 163.871482) - (xy 102.423269 163.871482) (xy 101.661554 164.633199) (xy 100.954445 164.633199) (xy 100.192728 163.871482) - (xy 100.192727 163.871482) (xy 100.15338 163.92564) (xy 100.153376 163.925646) (xy 100.14876 163.934705) - (xy 100.100781 163.985497) (xy 100.032959 164.002287) (xy 99.966826 163.979743) (xy 99.927794 163.934693) - (xy 99.923051 163.925384) (xy 99.923049 163.925381) (xy 99.923048 163.925379) (xy 99.798109 163.753413) - (xy 99.647786 163.60309) (xy 99.47582 163.478151) (xy 99.4676 163.473963) (xy 99.467054 163.473685) - (xy 99.416259 163.425712) (xy 99.399463 163.357892) (xy 99.421999 163.291756) (xy 99.467054 163.252715) - (xy 99.475816 163.248251) (xy 99.497789 163.232286) (xy 99.647786 163.123309) (xy 99.647788 163.123306) - (xy 99.647792 163.123304) (xy 99.798104 162.972992) (xy 99.798106 162.972988) (xy 99.798109 162.972986) - (xy 99.923048 162.80102) (xy 99.923047 162.80102) (xy 99.923051 162.801016) (xy 99.927514 162.792254) - (xy 99.975488 162.741459) (xy 100.043308 162.724663) (xy 100.109444 162.747199) (xy 100.148486 162.792256) - (xy 100.152951 162.80102) (xy 100.27789 162.972986) (xy 100.428213 163.123309) (xy 100.600179 163.248248) - (xy 100.600181 163.248249) (xy 100.600184 163.248251) (xy 100.609493 163.252994) (xy 100.66029 163.300966) - (xy 100.677087 163.368787) (xy 100.654552 163.434922) (xy 100.609505 163.47396) (xy 100.600446 163.478576) - (xy 100.60044 163.47858) (xy 100.546282 163.517927) (xy 100.546282 163.517928) (xy 101.308 164.279646) - (xy 101.308001 164.279646) (xy 102.069716 163.517928) (xy 102.015547 163.478573) (xy 102.015547 163.478572) - (xy 102.0065 163.473963) (xy 101.955706 163.425988) (xy 101.938912 163.358166) (xy 101.961451 163.292032) - (xy 102.006508 163.252993) (xy 102.015816 163.248251) (xy 102.099846 163.1872) (xy 102.187786 163.123309) - (xy 102.187788 163.123306) (xy 102.187792 163.123304) (xy 102.338104 162.972992) (xy 102.338106 162.972988) - (xy 102.338109 162.972986) (xy 102.463048 162.80102) (xy 102.463047 162.80102) (xy 102.463051 162.801016) - (xy 102.559557 162.611612) (xy 102.625246 162.409443) (xy 102.6585 162.199487) (xy 102.6585 161.986913) - (xy 102.625246 161.776957) (xy 102.559557 161.574788) (xy 102.463051 161.385384) (xy 102.463049 161.385381) - (xy 102.463048 161.385379) (xy 102.338109 161.213413) (xy 102.187786 161.06309) (xy 102.015817 160.938149) - (xy 102.00164 160.930925) (xy 101.950845 160.882949) (xy 101.934052 160.815128) (xy 101.956591 160.748994) - (xy 101.985052 160.720124) (xy 102.095192 160.640104) (xy 102.245504 160.489792) (xy 102.245506 160.489788) - (xy 102.245509 160.489786) (xy 102.370448 160.31782) (xy 102.370447 160.31782) (xy 102.370451 160.317816) - (xy 102.466957 160.128412) (xy 102.532646 159.926243) (xy 102.5659 159.716287) (xy 102.5659 159.503713) - (xy 102.532646 159.293757) (xy 102.466957 159.091588) (xy 102.370451 158.902184) (xy 102.370449 158.902181) - (xy 102.370448 158.902179) (xy 102.245509 158.730213) (xy 102.095192 158.579896) (xy 102.071171 158.562444) - (xy 102.028505 158.507114) (xy 102.022526 158.437501) (xy 102.055131 158.375705) (xy 102.086646 158.352216) - (xy 102.089325 158.350816) (xy 102.114979 158.337416) (xy 102.26874 158.21204) (xy 102.394116 158.058279) - (xy 102.485973 157.882428) (xy 102.540551 157.691685) (xy 102.5509 157.575286) (xy 102.5509 155.312114) - (xy 102.540551 155.195715) (xy 102.485973 155.004972) (xy 102.394116 154.829121) (xy 102.318055 154.73584) - (xy 102.26874 154.675359) (xy 102.114976 154.549981) (xy 102.0187 154.499691) (xy 101.968393 154.451205) - (xy 101.952286 154.383217) (xy 101.970829 154.32472) (xy 101.970787 154.32434) (xy 101 153.353553) - (xy 100.029212 154.324339) (xy 100.083824 154.411254) (xy 100.102824 154.478491) (xy 100.082456 154.545326) - (xy 100.057191 154.573328) (xy 99.932059 154.675359) (xy 99.806683 154.829122) (xy 99.714826 155.004973) - (xy 99.682299 155.118654) (xy 99.663215 155.185351) (xy 99.660249 155.195716) (xy 99.660248 155.195719) - (xy 99.657533 155.22626) (xy 99.650861 155.301311) (xy 99.6499 155.312117) (xy 99.6499 157.575282) - (xy 99.660248 157.69168) (xy 99.660248 157.691682) (xy 99.660249 157.691685) (xy 99.67649 157.748444) - (xy 99.706774 157.854286) (xy 99.714827 157.882428) (xy 99.806684 158.058279) (xy 99.836956 158.095404) - (xy 99.932059 158.21204) (xy 100.00894 158.274728) (xy 100.085821 158.337416) (xy 100.202092 158.398151) - (xy 100.259503 158.42814) (xy 100.309811 158.476627) (xy 100.325918 158.544615) (xy 100.302711 158.610518) - (xy 100.289774 158.62573) (xy 100.185292 158.730212) (xy 100.112651 158.830194) (xy 100.057321 158.872859) - (xy 99.987707 158.878838) (xy 99.925912 158.846232) (xy 99.912015 158.830193) (xy 99.798109 158.673414) - (xy 99.798105 158.673409) (xy 99.647786 158.52309) (xy 99.47582 158.398151) (xy 99.286414 158.301644) - (xy 99.286413 158.301643) (xy 99.286412 158.301643) (xy 99.084243 158.235954) (xy 99.084241 158.235953) - (xy 99.08424 158.235953) (xy 98.922957 158.210408) (xy 98.874287 158.2027) (xy 98.661713 158.2027) - (xy 98.613042 158.210408) (xy 98.45176 158.235953) (xy 98.249585 158.301644) (xy 98.060179 158.398151) - (xy 97.888213 158.52309) (xy 97.73789 158.673413) (xy 97.612951 158.845379) (xy 97.516444 159.034785) - (xy 97.450753 159.23696) (xy 97.424915 159.400099) (xy 97.4175 159.446913) (xy 97.4175 159.659487) - (xy 97.450754 159.869443) (xy 97.502956 160.030104) (xy 97.516444 160.071614) (xy 97.612951 160.26102) - (xy 97.73789 160.432986) (xy 97.888213 160.583309) (xy 98.060182 160.70825) (xy 98.068946 160.712716) - (xy 98.119742 160.760691) (xy 98.136536 160.828512) (xy 98.113998 160.894647) (xy 98.068946 160.933684) - (xy 98.060182 160.938149) (xy 97.888213 161.06309) (xy 97.73789 161.213413) (xy 97.612951 161.385379) - (xy 97.516444 161.574785) (xy 97.450753 161.77696) (xy 97.4175 161.986913) (xy 97.4175 162.199486) - (xy 97.437875 162.328132) (xy 97.450754 162.409443) (xy 97.503637 162.5722) (xy 97.516444 162.611614) - (xy 97.612951 162.80102) (xy 97.73789 162.972986) (xy 97.888213 163.123309) (xy 98.060182 163.24825) - (xy 98.068946 163.252716) (xy 98.119742 163.300691) (xy 98.136536 163.368512) (xy 98.113998 163.434647) - (xy 98.068946 163.473684) (xy 98.060182 163.478149) (xy 97.888213 163.60309) (xy 97.73789 163.753413) - (xy 97.612951 163.925379) (xy 97.516444 164.114785) (xy 97.450753 164.31696) (xy 97.4175 164.526913) - (xy 97.4175 164.739486) (xy 97.450753 164.949439) (xy 97.516444 165.151614) (xy 97.612951 165.34102) - (xy 97.73789 165.512986) (xy 97.888213 165.663309) (xy 98.060182 165.78825) (xy 98.068946 165.792716) - (xy 98.119742 165.840691) (xy 98.136536 165.908512) (xy 98.113998 165.974647) (xy 98.068946 166.013684) - (xy 98.060182 166.018149) (xy 97.888213 166.14309) (xy 97.73789 166.293413) (xy 97.612951 166.465379) - (xy 97.516444 166.654785) (xy 97.450753 166.85696) (xy 97.424179 167.024745) (xy 97.4175 167.066913) - (xy 97.4175 167.279487) (xy 97.450754 167.489443) (xy 97.503637 167.6522) (xy 97.516444 167.691614) - (xy 97.612951 167.88102) (xy 97.73789 168.052986) (xy 97.888209 168.203305) (xy 97.888214 168.203309) - (xy 97.987139 168.275182) (xy 98.029805 168.330511) (xy 98.035784 168.400125) (xy 98.003179 168.46192) - (xy 97.94234 168.496277) (xy 97.914254 168.4995) (xy 80.6245 168.4995) (xy 80.557461 168.479815) - (xy 80.511706 168.427011) (xy 80.5005 168.3755) (xy 80.5005 158.893713) (xy 82.1095 158.893713) - (xy 82.1095 159.106287) (xy 82.113604 159.1322) (xy 82.142289 159.313311) (xy 82.142754 159.316243) - (xy 82.185211 159.446913) (xy 82.208444 159.518414) (xy 82.304951 159.70782) (xy 82.42989 159.879786) - (xy 82.580213 160.030109) (xy 82.752179 160.155048) (xy 82.752181 160.155049) (xy 82.752184 160.155051) - (xy 82.941588 160.251557) (xy 83.143757 160.317246) (xy 83.353713 160.3505) (xy 83.353714 160.3505) - (xy 83.566286 160.3505) (xy 83.566287 160.3505) (xy 83.776243 160.317246) (xy 83.978412 160.251557) - (xy 84.167816 160.155051) (xy 84.254478 160.092088) (xy 84.339784 160.03011) (xy 84.339784 160.030109) - (xy 84.339792 160.030104) (xy 84.453717 159.916178) (xy 84.515036 159.882696) (xy 84.584728 159.88768) - (xy 84.640662 159.929551) (xy 84.657577 159.960528) (xy 84.706646 160.092088) (xy 84.706649 160.092093) - (xy 84.792809 160.207187) (xy 84.792812 160.20719) (xy 84.907906 160.29335) (xy 84.907913 160.293354) - (xy 85.04262 160.343596) (xy 85.042627 160.343598) (xy 85.102155 160.349999) (xy 85.102172 160.35) - (xy 85.75 160.35) (xy 85.75 159.433012) (xy 85.807007 159.465925) (xy 85.934174 159.5) (xy 86.065826 159.5) - (xy 86.192993 159.465925) (xy 86.25 159.433012) (xy 86.25 160.35) (xy 86.897828 160.35) (xy 86.897844 160.349999) - (xy 86.957372 160.343598) (xy 86.957379 160.343596) (xy 87.092086 160.293354) (xy 87.092093 160.29335) - (xy 87.207187 160.20719) (xy 87.20719 160.207187) (xy 87.29335 160.092093) (xy 87.293354 160.092086) - (xy 87.343596 159.957379) (xy 87.343598 159.957372) (xy 87.349999 159.897844) (xy 87.35 159.897827) - (xy 87.35 159.25) (xy 86.433012 159.25) (xy 86.465925 159.192993) (xy 86.5 159.065826) (xy 86.5 158.934174) - (xy 86.465925 158.807007) (xy 86.433012 158.75) (xy 87.35 158.75) (xy 87.35 158.102172) (xy 87.349999 158.102155) - (xy 87.343598 158.042627) (xy 87.343596 158.04262) (xy 87.293354 157.907913) (xy 87.29335 157.907906) - (xy 87.20719 157.792812) (xy 87.207187 157.792809) (xy 87.092093 157.706649) (xy 87.092086 157.706645) - (xy 86.957379 157.656403) (xy 86.957372 157.656401) (xy 86.897844 157.65) (xy 86.25 157.65) (xy 86.25 158.566988) - (xy 86.192993 158.534075) (xy 86.065826 158.5) (xy 85.934174 158.5) (xy 85.807007 158.534075) (xy 85.75 158.566988) - (xy 85.75 157.65) (xy 85.102155 157.65) (xy 85.042627 157.656401) (xy 85.04262 157.656403) (xy 84.907913 157.706645) - (xy 84.907906 157.706649) (xy 84.792812 157.792809) (xy 84.792809 157.792812) (xy 84.706649 157.907906) - (xy 84.706646 157.907912) (xy 84.657577 158.039471) (xy 84.615705 158.095404) (xy 84.550241 158.119821) - (xy 84.481968 158.104969) (xy 84.453714 158.083818) (xy 84.339786 157.96989) (xy 84.16782 157.844951) - (xy 83.978414 157.748444) (xy 83.978413 157.748443) (xy 83.978412 157.748443) (xy 83.776243 157.682754) - (xy 83.776241 157.682753) (xy 83.77624 157.682753) (xy 83.614957 157.657208) (xy 83.566287 157.6495) - (xy 83.353713 157.6495) (xy 83.305042 157.657208) (xy 83.14376 157.682753) (xy 82.941585 157.748444) - (xy 82.752179 157.844951) (xy 82.580213 157.96989) (xy 82.42989 158.120213) (xy 82.304951 158.292179) - (xy 82.208444 158.481585) (xy 82.142753 158.68376) (xy 82.11702 158.846232) (xy 82.1095 158.893713) - (xy 80.5005 158.893713) (xy 80.5005 80.6245) (xy 80.520185 80.557461) (xy 80.572989 80.511706) (xy 80.6245 80.5005) - (xy 119.3755 80.5005) - ) - ) - (filled_polygon - (layer "B.Cu") - (pts - (xy 110.330211 122.396172) (xy 110.381687 122.443416) (xy 110.3995 122.507449) (xy 110.3995 144.199901) - (xy 110.390856 144.229337) (xy 110.384333 144.259327) (xy 110.380577 144.264344) (xy 110.379815 144.26694) - (xy 110.363182 144.287582) (xy 110.287584 144.363181) (xy 110.226261 144.396666) (xy 110.199902 144.3995) - (xy 95.579766 144.3995) (xy 95.512727 144.379815) (xy 95.510875 144.378602) (xy 95.379185 144.290609) - (xy 95.379172 144.290602) (xy 95.233501 144.230264) (xy 95.233489 144.230261) (xy 95.078845 144.1995) - (xy 95.078842 144.1995) (xy 94.921158 144.1995) (xy 94.921155 144.1995) (xy 94.76651 144.230261) - (xy 94.766498 144.230264) (xy 94.620827 144.290602) (xy 94.620814 144.290609) (xy 94.489711 144.37821) - (xy 94.489707 144.378213) (xy 94.378213 144.489707) (xy 94.37821 144.489711) (xy 94.290609 144.620814) - (xy 94.290602 144.620827) (xy 94.230264 144.766498) (xy 94.230261 144.76651) (xy 94.1995 144.921153) - (xy 94.1995 145.078846) (xy 94.230261 145.233489) (xy 94.232031 145.239324) (xy 94.229279 145.240158) - (xy 94.235503 145.297359) (xy 94.204309 145.359878) (xy 94.144266 145.395608) (xy 94.113445 145.3995) - (xy 92.579057 145.3995) (xy 92.420943 145.3995) (xy 92.268215 145.440423) (xy 92.268214 145.440423) - (xy 92.268212 145.440424) (xy 92.268209 145.440425) (xy 92.218096 145.469359) (xy 92.218095 145.46936) - (xy 92.174689 145.49442) (xy 92.131285 145.519479) (xy 92.131282 145.519481) (xy 91.505881 146.144882) - (xy 91.505879 146.144885) (xy 91.455761 146.231694) (xy 91.455759 146.231696) (xy 91.426825 146.281809) - (xy 91.426824 146.28181) (xy 91.426823 146.281815) (xy 91.385899 146.434543) (xy 91.385899 146.434545) - (xy 91.385899 146.602646) (xy 91.3859 146.602659) (xy 91.3859 149.2872) (xy 91.366215 149.354239) - (xy 91.313411 149.399994) (xy 91.261901 149.4112) (xy 91.053371 149.4112) (xy 91.053365 149.4112) - (xy 91.053364 149.411201) (xy 91.041716 149.412236) (xy 90.933984 149.421813) (xy 90.738354 149.477789) - (xy 90.648172 149.524896) (xy 90.557993 149.572002) (xy 90.557991 149.572003) (xy 90.55799 149.572004) - (xy 90.40029 149.70059) (xy 90.320602 149.798321) (xy 90.262981 149.837838) (xy 90.193142 149.83993) - (xy 90.13326 149.803932) (xy 90.102345 149.741273) (xy 90.1005 149.71996) (xy 90.1005 127.300098) - (xy 90.109144 127.27066) (xy 90.115668 127.24067) (xy 90.119423 127.235653) (xy 90.120185 127.233059) - (xy 90.136819 127.212416) (xy 90.212418 127.136818) (xy 90.273742 127.103334) (xy 90.300099 127.1005) - (xy 105.413331 127.1005) (xy 105.413347 127.100501) (xy 105.420943 127.100501) (xy 105.579054 127.100501) - (xy 105.579057 127.100501) (xy 105.731785 127.059577) (xy 105.811814 127.013372) (xy 105.868716 126.98052) - (xy 105.98052 126.868716) (xy 105.98052 126.868714) (xy 105.990724 126.858511) (xy 105.990727 126.858506) - (xy 106.83052 126.018716) (xy 106.909577 125.881784) (xy 106.950501 125.729057) (xy 106.950501 125.570942) - (xy 106.950501 125.563347) (xy 106.9505 125.563329) (xy 106.9505 123.285718) (xy 106.970185 123.218679) - (xy 107.018207 123.175233) (xy 107.057815 123.155052) (xy 107.057815 123.155051) (xy 107.057816 123.155051) - (xy 107.149193 123.088661) (xy 107.229786 123.030109) (xy 107.229788 123.030106) (xy 107.229792 123.030104) - (xy 107.380104 122.879792) (xy 107.380106 122.879788) (xy 107.380109 122.879786) (xy 107.505048 122.70782) - (xy 107.505047 122.70782) (xy 107.505051 122.707816) (xy 107.509514 122.699054) (xy 107.557488 122.648259) - (xy 107.625308 122.631463) (xy 107.691444 122.653999) (xy 107.730486 122.699056) (xy 107.734951 122.70782) - (xy 107.85989 122.879786) (xy 108.010213 123.030109) (xy 108.182179 123.155048) (xy 108.182181 123.155049) - (xy 108.182184 123.155051) (xy 108.371588 123.251557) (xy 108.573757 123.317246) (xy 108.783713 123.3505) - (xy 108.783714 123.3505) (xy 108.996286 123.3505) (xy 108.996287 123.3505) (xy 109.206243 123.317246) - (xy 109.408412 123.251557) (xy 109.597816 123.155051) (xy 109.684471 123.092093) (xy 109.769786 123.030109) - (xy 109.769788 123.030106) (xy 109.769792 123.030104) (xy 109.920104 122.879792) (xy 109.920106 122.879788) - (xy 109.920109 122.879786) (xy 110.045048 122.70782) (xy 110.045047 122.70782) (xy 110.045051 122.707816) - (xy 110.141557 122.518412) (xy 110.157569 122.469129) (xy 110.197006 122.411456) (xy 110.261365 122.384257) - ) - ) - (filled_polygon - (layer "B.Cu") - (pts - (xy 86.407199 98.770185) (xy 86.452954 98.822989) (xy 86.462898 98.892147) (xy 86.433873 98.955703) - (xy 86.405256 98.980039) (xy 86.381344 98.994787) (xy 86.257289 99.118842) (xy 86.165187 99.268163) - (xy 86.165186 99.268166) (xy 86.110001 99.434703) (xy 86.110001 99.434704) (xy 86.11 99.434704) - (xy 86.0995 99.537483) (xy 86.0995 100.462501) (xy 86.099501 100.462519) (xy 86.11 100.565296) (xy 86.110001 100.565299) - (xy 86.165185 100.731831) (xy 86.165187 100.731836) (xy 86.187474 100.767969) (xy 86.257288 100.881156) - (xy 86.381344 101.005212) (xy 86.530666 101.097314) (xy 86.697203 101.152499) (xy 86.799991 101.163) - (xy 88.200008 101.162999) (xy 88.302797 101.152499) (xy 88.469334 101.097314) (xy 88.618656 101.005212) - (xy 88.742712 100.881156) (xy 88.78697 100.809402) (xy 88.838917 100.762679) (xy 88.892508 100.7505) - (xy 89.195396 100.7505) (xy 89.242844 100.759937) (xy 89.266503 100.769737) (xy 89.266508 100.769738) - (xy 89.266511 100.769739) (xy 89.421153 100.800499) (xy 89.421156 100.8005) (xy 89.421158 100.8005) - (xy 89.578844 100.8005) (xy 89.578845 100.800499) (xy 89.733497 100.769737) (xy 89.733509 100.769731) - (xy 89.739324 100.767969) (xy 89.740158 100.77072) (xy 89.797359 100.764497) (xy 89.859878 100.795691) - (xy 89.895608 100.855734) (xy 89.8995 100.886555) (xy 89.8995 116.41333) (xy 89.899499 116.413348) - (xy 89.899499 116.579054) (xy 89.899498 116.579054) (xy 89.899499 116.579057) (xy 89.940423 116.731785) - (xy 89.950651 116.7495) (xy 90.019477 116.868712) (xy 90.019479 116.868715) (xy 90.01948 116.868716) - (xy 90.131284 116.98052) (xy 90.131285 116.980521) (xy 90.631284 117.48052) (xy 90.631285 117.480521) - (xy 90.631287 117.480522) (xy 90.696397 117.518113) (xy 90.744612 117.568679) (xy 90.757836 117.637286) - (xy 90.731868 117.702151) (xy 90.674954 117.74268) (xy 90.634397 117.7495) (xy 86.362229 117.7495) - (xy 86.29519 117.729815) (xy 86.274548 117.713181) (xy 85.786819 117.225451) (xy 85.753334 117.164128) - (xy 85.7505 117.13777) (xy 85.7505 103.587486) (xy 86.100001 103.587486) (xy 86.110494 103.690197) - (xy 86.165641 103.856619) (xy 86.165643 103.856624) (xy 86.257684 104.005845) (xy 86.381654 104.129815) - (xy 86.530875 104.221856) (xy 86.53088 104.221858) (xy 86.697302 104.277005) (xy 86.697309 104.277006) - (xy 86.800019 104.287499) (xy 87.249999 104.287499) (xy 87.75 104.287499) (xy 88.199972 104.287499) - (xy 88.199986 104.287498) (xy 88.302697 104.277005) (xy 88.469119 104.221858) (xy 88.469124 104.221856) - (xy 88.618345 104.129815) (xy 88.742315 104.005845) (xy 88.834356 103.856624) (xy 88.834358 103.856619) - (xy 88.889505 103.690197) (xy 88.889506 103.69019) (xy 88.899999 103.587486) (xy 88.9 103.587473) - (xy 88.9 103.375) (xy 87.75 103.375) (xy 87.75 104.287499) (xy 87.249999 104.287499) (xy 87.25 104.287498) - (xy 87.25 103.375) (xy 86.100001 103.375) (xy 86.100001 103.587486) (xy 85.7505 103.587486) (xy 85.7505 102.662513) - (xy 86.1 102.662513) (xy 86.1 102.875) (xy 87.25 102.875) (xy 87.75 102.875) (xy 88.899999 102.875) - (xy 88.899999 102.662528) (xy 88.899998 102.662513) (xy 88.889505 102.559802) (xy 88.834358 102.39338) - (xy 88.834356 102.393375) (xy 88.742315 102.244154) (xy 88.618345 102.120184) (xy 88.469124 102.028143) - (xy 88.469119 102.028141) (xy 88.302697 101.972994) (xy 88.30269 101.972993) (xy 88.199986 101.9625) - (xy 87.75 101.9625) (xy 87.75 102.875) (xy 87.25 102.875) (xy 87.25 101.9625) (xy 86.800028 101.9625) - (xy 86.800012 101.962501) (xy 86.697302 101.972994) (xy 86.53088 102.028141) (xy 86.530875 102.028143) - (xy 86.381654 102.120184) (xy 86.257684 102.244154) (xy 86.165643 102.393375) (xy 86.165641 102.39338) - (xy 86.110494 102.559802) (xy 86.110493 102.559809) (xy 86.1 102.662513) (xy 85.7505 102.662513) - (xy 85.7505 98.8745) (xy 85.770185 98.807461) (xy 85.822989 98.761706) (xy 85.8745 98.7505) (xy 86.34016 98.7505) - ) - ) - ) - (embedded_fonts no) -) diff --git a/hardware/c_its-companion/c_its-companion.kicad_prl b/hardware/c_its-companion/c_its-companion.kicad_prl deleted file mode 100644 index 89fdca1..0000000 --- a/hardware/c_its-companion/c_its-companion.kicad_prl +++ /dev/null @@ -1,138 +0,0 @@ -{ - "board": { - "active_layer": 0, - "active_layer_preset": "", - "auto_track_width": true, - "hidden_netclasses": [], - "hidden_nets": [], - "high_contrast_mode": 0, - "net_color_mode": 1, - "opacity": { - "images": 0.6, - "pads": 1.0, - "shapes": 1.0, - "tracks": 1.0, - "vias": 1.0, - "zones": 0.6 - }, - "prototype_zone_fills": false, - "selection_filter": { - "dimensions": true, - "footprints": true, - "graphics": true, - "keepouts": true, - "lockedItems": false, - "otherItems": true, - "pads": true, - "text": true, - "tracks": true, - "vias": true, - "zones": true - }, - "visible_items": [ - "vias", - "footprint_text", - "footprint_anchors", - "ratsnest", - "grid", - "footprints_front", - "footprints_back", - "footprint_values", - "footprint_references", - "tracks", - "drc_errors", - "drawing_sheet", - "bitmaps", - "pads", - "zones", - "drc_warnings", - "drc_exclusions", - "locked_item_shadows", - "conflict_shadows", - "shapes", - "board_outline_area", - "ly_points" - ], - "visible_layers": "ffffffff_ffffffff_ffffffff_ffffffff", - "zone_display_mode": 0 - }, - "git": { - "integration_disabled": false, - "repo_type": "", - "repo_username": "", - "ssh_key": "" - }, - "meta": { - "filename": "c_its-companion.kicad_prl", - "version": 5 - }, - "net_inspector_panel": { - "col_hidden": [ - false, - false, - false, - false, - false, - false, - false, - false, - false, - false - ], - "col_order": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9 - ], - "col_widths": [ - 156, - 141, - 103, - 71, - 103, - 103, - 103, - 74, - 103, - 103 - ], - "custom_group_rules": [], - "expanded_rows": [], - "filter_by_net_name": true, - "filter_by_netclass": true, - "filter_text": "", - "group_by_constraint": false, - "group_by_netclass": false, - "show_time_domain_details": false, - "show_unconnected_nets": false, - "show_zero_pad_nets": false, - "sort_ascending": true, - "sorting_column": 0 - }, - "open_jobsets": [], - "project": { - "files": [] - }, - "schematic": { - "hierarchy_collapsed": [], - "selection_filter": { - "graphics": true, - "images": true, - "labels": true, - "lockedItems": false, - "otherItems": true, - "pins": true, - "ruleAreas": true, - "symbols": true, - "text": true, - "wires": true - } - } -} diff --git a/hardware/c_its-companion/c_its-companion.kicad_pro b/hardware/c_its-companion/c_its-companion.kicad_pro deleted file mode 100644 index 1739b5a..0000000 --- a/hardware/c_its-companion/c_its-companion.kicad_pro +++ /dev/null @@ -1,744 +0,0 @@ -{ - "board": { - "3dviewports": [ - { - "name": "ISO-back", - "ww": 1.0, - "wx": 23.768348693847656, - "wy": 1.82621169090271, - "wz": -13.010103225708008, - "xw": 0.0, - "xx": -0.6424655318260193, - "xy": 0.5901128053665161, - "xz": -0.4888812303543091, - "yw": 0.0, - "yx": 0.7663145065307617, - "yy": 0.49455612897872925, - "yz": -0.41009292006492615, - "zw": 0.0, - "zx": -0.00022190232994034886, - "zy": -0.638107419013977, - "zz": -0.7699472904205322 - }, - { - "name": "ISO-front", - "ww": 1.0, - "wx": 4.608643054962158, - "wy": 18.730253219604492, - "wz": -27.170215606689453, - "xw": 0.0, - "xx": 0.6427879333496094, - "xy": -0.5868241190910339, - "xz": 0.49240362644195557, - "yw": 0.0, - "yx": 0.7660443186759949, - "yy": 0.4924042820930481, - "yz": -0.4131760001182556, - "zw": 0.0, - "zx": -2.1759660739917308e-08, - "zy": 0.6427874565124512, - "zz": 0.7660446763038635 - } - ], - "design_settings": { - "defaults": { - "apply_defaults_to_fp_barcodes": false, - "apply_defaults_to_fp_dimensions": false, - "apply_defaults_to_fp_fields": false, - "apply_defaults_to_fp_shapes": false, - "apply_defaults_to_fp_text": false, - "board_outline_line_width": 0.05, - "copper_line_width": 0.2, - "copper_text_italic": false, - "copper_text_size_h": 1.5, - "copper_text_size_v": 1.5, - "copper_text_thickness": 0.3, - "copper_text_upright": false, - "courtyard_line_width": 0.05, - "dimension_precision": 4, - "dimension_units": 3, - "dimensions": { - "arrow_length": 1270000, - "extension_offset": 500000, - "keep_text_aligned": true, - "suppress_zeroes": true, - "text_position": 0, - "units_format": 0 - }, - "fab_line_width": 0.1, - "fab_text_italic": false, - "fab_text_size_h": 1.0, - "fab_text_size_v": 1.0, - "fab_text_thickness": 0.15, - "fab_text_upright": false, - "other_line_width": 0.1, - "other_text_italic": false, - "other_text_size_h": 1.0, - "other_text_size_v": 1.0, - "other_text_thickness": 0.15, - "other_text_upright": false, - "pads": { - "drill": 0.8, - "height": 1.27, - "width": 1.27 - }, - "silk_line_width": 0.1, - "silk_text_italic": false, - "silk_text_size_h": 1.0, - "silk_text_size_v": 1.0, - "silk_text_thickness": 0.1, - "silk_text_upright": false, - "zones": { - "border_display_style": 2, - "border_hatch_pitch": 0.5, - "corner_radius": 0.0, - "corner_smoothing": 0, - "fill_mode": 0, - "hatch_gap": 1.5, - "hatch_orientation": 0.0, - "hatch_smoothing_level": 0, - "hatch_smoothing_value": 0.1, - "hatch_thickness": 1.0, - "min_clearance": 0.5, - "min_island_area": 10.0, - "min_thickness": 0.25, - "pad_connection": 1, - "remove_islands": 0, - "thermal_relief_gap": 0.5, - "thermal_relief_spoke_width": 0.5 - } - }, - "diff_pair_dimensions": [ - { - "gap": 0.0, - "via_gap": 0.0, - "width": 0.0 - } - ], - "drc_exclusions": [], - "meta": { - "version": 2 - }, - "rule_severities": { - "annular_width": "error", - "clearance": "error", - "connection_width": "warning", - "copper_edge_clearance": "error", - "copper_sliver": "warning", - "courtyards_overlap": "error", - "creepage": "error", - "diff_pair_gap_out_of_range": "error", - "diff_pair_uncoupled_length_too_long": "error", - "drill_out_of_range": "error", - "duplicate_footprints": "warning", - "extra_footprint": "warning", - "footprint": "error", - "footprint_filters_mismatch": "ignore", - "footprint_symbol_field_mismatch": "warning", - "footprint_symbol_mismatch": "warning", - "footprint_type_mismatch": "ignore", - "hole_clearance": "error", - "hole_to_hole": "warning", - "holes_co_located": "warning", - "invalid_outline": "error", - "isolated_copper": "warning", - "item_on_disabled_layer": "error", - "items_not_allowed": "error", - "length_out_of_range": "error", - "lib_footprint_issues": "warning", - "lib_footprint_mismatch": "warning", - "malformed_courtyard": "error", - "microvia_drill_out_of_range": "error", - "mirrored_text_on_front_layer": "warning", - "missing_courtyard": "ignore", - "missing_footprint": "warning", - "missing_tuning_profile": "warning", - "net_conflict": "warning", - "nonmirrored_text_on_back_layer": "warning", - "npth_inside_courtyard": "error", - "padstack": "warning", - "pth_inside_courtyard": "error", - "shorting_items": "error", - "silk_edge_clearance": "warning", - "silk_over_copper": "warning", - "silk_overlap": "warning", - "skew_out_of_range": "error", - "solder_mask_bridge": "error", - "starved_thermal": "error", - "text_height": "warning", - "text_on_edge_cuts": "error", - "text_thickness": "warning", - "through_hole_pad_without_hole": "error", - "too_many_vias": "error", - "track_angle": "error", - "track_dangling": "warning", - "track_not_centered_on_via": "ignore", - "track_on_post_machined_layer": "error", - "track_segment_length": "error", - "track_width": "error", - "tracks_crossing": "error", - "tuning_profile_track_geometries": "ignore", - "unconnected_items": "error", - "unresolved_variable": "error", - "via_dangling": "warning", - "zones_intersect": "error" - }, - "rules": { - "max_error": 0.005, - "min_clearance": 0.0, - "min_connection": 0.0, - "min_copper_edge_clearance": 0.5, - "min_groove_width": 0.0, - "min_hole_clearance": 0.25, - "min_hole_to_hole": 0.25, - "min_microvia_diameter": 0.2, - "min_microvia_drill": 0.1, - "min_resolved_spokes": 2, - "min_silk_clearance": 0.0, - "min_text_height": 0.8, - "min_text_thickness": 0.08, - "min_through_hole_diameter": 0.3, - "min_track_width": 0.2, - "min_via_annular_width": 0.1, - "min_via_diameter": 0.5, - "solder_mask_to_copper_clearance": 0.005, - "use_height_for_length_calcs": true - }, - "teardrop_options": [ - { - "td_onpthpad": true, - "td_onroundshapesonly": false, - "td_onsmdpad": true, - "td_ontrackend": false, - "td_onvia": true - } - ], - "teardrop_parameters": [ - { - "td_allow_use_two_tracks": true, - "td_curve_segcount": 0, - "td_height_ratio": 1.0, - "td_length_ratio": 0.5, - "td_maxheight": 2.0, - "td_maxlen": 1.0, - "td_on_pad_in_zone": false, - "td_target_name": "td_round_shape", - "td_width_to_size_filter_ratio": 0.9 - }, - { - "td_allow_use_two_tracks": true, - "td_curve_segcount": 0, - "td_height_ratio": 1.0, - "td_length_ratio": 0.5, - "td_maxheight": 2.0, - "td_maxlen": 1.0, - "td_on_pad_in_zone": false, - "td_target_name": "td_rect_shape", - "td_width_to_size_filter_ratio": 0.9 - }, - { - "td_allow_use_two_tracks": true, - "td_curve_segcount": 0, - "td_height_ratio": 1.0, - "td_length_ratio": 0.5, - "td_maxheight": 2.0, - "td_maxlen": 1.0, - "td_on_pad_in_zone": false, - "td_target_name": "td_track_end", - "td_width_to_size_filter_ratio": 0.9 - } - ], - "track_widths": [ - 0.0 - ], - "tuning_pattern_settings": { - "diff_pair_defaults": { - "corner_radius_percentage": 80, - "corner_style": 1, - "max_amplitude": 1.0, - "min_amplitude": 0.2, - "single_sided": false, - "spacing": 1.0 - }, - "diff_pair_skew_defaults": { - "corner_radius_percentage": 80, - "corner_style": 1, - "max_amplitude": 1.0, - "min_amplitude": 0.2, - "single_sided": false, - "spacing": 0.6 - }, - "single_track_defaults": { - "corner_radius_percentage": 80, - "corner_style": 1, - "max_amplitude": 1.0, - "min_amplitude": 0.2, - "single_sided": false, - "spacing": 0.6 - } - }, - "via_dimensions": [ - { - "diameter": 0.0, - "drill": 0.0 - } - ], - "zones_allow_external_fillets": false - }, - "ipc2581": { - "bom_rev": "", - "dist": "", - "distpn": "", - "internal_id": "", - "mfg": "", - "mpn": "", - "sch_revision": "v0.1" - }, - "layer_pairs": [], - "layer_presets": [], - "viewports": [] - }, - "boards": [], - "component_class_settings": { - "assignments": [], - "meta": { - "version": 0 - }, - "sheet_component_classes": { - "enabled": false - } - }, - "cvpcb": { - "equivalence_files": [] - }, - "erc": { - "erc_exclusions": [], - "meta": { - "version": 0 - }, - "pin_map": [ - [ - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 2 - ], - [ - 0, - 2, - 0, - 1, - 0, - 0, - 1, - 0, - 2, - 2, - 2, - 2 - ], - [ - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 1, - 0, - 1, - 2 - ], - [ - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 1, - 2, - 1, - 1, - 2 - ], - [ - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 2 - ], - [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2 - ], - [ - 1, - 1, - 1, - 1, - 1, - 0, - 1, - 1, - 1, - 1, - 1, - 2 - ], - [ - 0, - 0, - 0, - 1, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 2 - ], - [ - 0, - 2, - 1, - 2, - 0, - 0, - 1, - 0, - 2, - 2, - 2, - 2 - ], - [ - 0, - 2, - 0, - 1, - 0, - 0, - 1, - 0, - 2, - 0, - 0, - 2 - ], - [ - 0, - 2, - 1, - 1, - 0, - 0, - 1, - 0, - 2, - 0, - 0, - 2 - ], - [ - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2 - ] - ], - "rule_severities": { - "bus_definition_conflict": "error", - "bus_entry_needed": "error", - "bus_to_bus_conflict": "error", - "bus_to_net_conflict": "error", - "different_unit_footprint": "error", - "different_unit_net": "error", - "duplicate_reference": "error", - "duplicate_sheet_names": "error", - "endpoint_off_grid": "warning", - "extra_units": "error", - "field_name_whitespace": "warning", - "footprint_filter": "ignore", - "footprint_link_issues": "warning", - "four_way_junction": "ignore", - "ground_pin_not_ground": "warning", - "hier_label_mismatch": "error", - "isolated_pin_label": "warning", - "label_dangling": "error", - "label_multiple_wires": "warning", - "lib_symbol_issues": "warning", - "lib_symbol_mismatch": "warning", - "missing_bidi_pin": "warning", - "missing_input_pin": "warning", - "missing_power_pin": "error", - "missing_unit": "warning", - "multiple_net_names": "warning", - "net_not_bus_member": "warning", - "no_connect_connected": "warning", - "no_connect_dangling": "warning", - "pin_not_connected": "error", - "pin_not_driven": "error", - "pin_to_pin": "warning", - "power_pin_not_driven": "error", - "same_local_global_label": "warning", - "similar_label_and_power": "warning", - "similar_labels": "warning", - "similar_power": "warning", - "simulation_model_issue": "ignore", - "single_global_label": "ignore", - "stacked_pin_name": "warning", - "unannotated": "error", - "unconnected_wire_endpoint": "warning", - "undefined_netclass": "error", - "unit_value_mismatch": "error", - "unresolved_variable": "error", - "wire_dangling": "error" - } - }, - "libraries": { - "pinned_footprint_libs": [], - "pinned_symbol_libs": [] - }, - "meta": { - "filename": "c_its-companion.kicad_pro", - "version": 3 - }, - "net_settings": { - "classes": [ - { - "bus_width": 12, - "clearance": 0.2, - "diff_pair_gap": 0.25, - "diff_pair_via_gap": 0.25, - "diff_pair_width": 0.2, - "line_style": 0, - "microvia_diameter": 0.3, - "microvia_drill": 0.1, - "name": "Default", - "pcb_color": "rgba(0, 0, 0, 0.000)", - "priority": 2147483647, - "schematic_color": "rgba(0, 0, 0, 0.000)", - "track_width": 0.2, - "tuning_profile": "", - "via_diameter": 0.6, - "via_drill": 0.3, - "wire_width": 6 - }, - { - "name": "Power", - "pcb_color": "rgba(0, 0, 0, 0.000)", - "priority": 0, - "schematic_color": "rgba(0, 0, 0, 0.000)", - "track_width": 0.5, - "tuning_profile": "" - } - ], - "meta": { - "version": 5 - }, - "net_colors": null, - "netclass_assignments": null, - "netclass_patterns": [ - { - "netclass": "Power", - "pattern": "GND" - }, - { - "netclass": "Power", - "pattern": "+3V3" - }, - { - "netclass": "Power", - "pattern": "/BAT*" - }, - { - "netclass": "Power", - "pattern": "/V_*" - } - ] - }, - "pcbnew": { - "last_paths": { - "idf": "", - "netlist": "", - "plot": "", - "specctra_dsn": "", - "vrml": "" - }, - "page_layout_descr_file": "" - }, - "schematic": { - "annotate_start_num": 0, - "annotation": { - "method": 0, - "sort_order": 0 - }, - "bom_export_filename": "${PROJECTNAME}.csv", - "bom_fmt_presets": [], - "bom_fmt_settings": { - "field_delimiter": ",", - "keep_line_breaks": false, - "keep_tabs": false, - "name": "CSV", - "ref_delimiter": ",", - "ref_range_delimiter": "", - "string_delimiter": "\"" - }, - "bom_presets": [], - "bom_settings": { - "exclude_dnp": false, - "fields_ordered": [ - { - "group_by": false, - "label": "Reference", - "name": "Reference", - "show": true - }, - { - "group_by": false, - "label": "Qty", - "name": "${QUANTITY}", - "show": true - }, - { - "group_by": true, - "label": "Value", - "name": "Value", - "show": true - }, - { - "group_by": true, - "label": "DNP", - "name": "${DNP}", - "show": true - }, - { - "group_by": true, - "label": "Exclude from BOM", - "name": "${EXCLUDE_FROM_BOM}", - "show": true - }, - { - "group_by": true, - "label": "Exclude from Board", - "name": "${EXCLUDE_FROM_BOARD}", - "show": true - }, - { - "group_by": true, - "label": "Footprint", - "name": "Footprint", - "show": true - }, - { - "group_by": false, - "label": "Datasheet", - "name": "Datasheet", - "show": true - } - ], - "filter_string": "", - "group_symbols": true, - "include_excluded_from_bom": true, - "name": "Default Editing", - "sort_asc": true, - "sort_field": "Reference" - }, - "bus_aliases": {}, - "connection_grid_size": 50.0, - "drawing": { - "dashed_lines_dash_length_ratio": 12.0, - "dashed_lines_gap_length_ratio": 3.0, - "default_line_thickness": 6.0, - "default_text_size": 50.0, - "field_names": [], - "hop_over_size_choice": 0, - "intersheets_ref_own_page": false, - "intersheets_ref_prefix": "", - "intersheets_ref_short": false, - "intersheets_ref_show": false, - "intersheets_ref_suffix": "", - "junction_size_choice": 3, - "label_size_ratio": 0.375, - "operating_point_overlay_i_precision": 3, - "operating_point_overlay_i_range": "~A", - "operating_point_overlay_v_precision": 3, - "operating_point_overlay_v_range": "~V", - "overbar_offset_ratio": 1.23, - "pin_symbol_size": 25.0, - "text_offset_ratio": 0.15 - }, - "legacy_lib_dir": "", - "legacy_lib_list": [], - "meta": { - "version": 1 - }, - "page_layout_descr_file": "", - "plot_directory": "", - "reuse_designators": true, - "subpart_first_id": 65, - "subpart_id_separator": 0, - "top_level_sheets": [ - { - "filename": "c_its-companion.kicad_sch", - "name": "Root", - "uuid": "9ad468b0-d7e4-4d4a-b652-c4a81a952e30" - } - ], - "used_designators": "C1,#PWR1-10,J1-2,SW1,TP1,U1-2,#FLG1-3", - "variants": [] - }, - "sheets": [ - [ - "9ad468b0-d7e4-4d4a-b652-c4a81a952e30", - "Root" - ] - ], - "text_variables": {}, - "tuning_profiles": { - "meta": { - "version": 0 - }, - "tuning_profiles_impedance_geometric": [] - } -} diff --git a/hardware/c_its-companion/c_its-companion.kicad_sch b/hardware/c_its-companion/c_its-companion.kicad_sch deleted file mode 100644 index d39e027..0000000 --- a/hardware/c_its-companion/c_its-companion.kicad_sch +++ /dev/null @@ -1,4985 +0,0 @@ -(kicad_sch - (version 20260306) - (generator "eeschema") - (generator_version "10.0") - (uuid "9ad468b0-d7e4-4d4a-b652-c4a81a952e30") - (paper "A4" portrait) - (title_block - (title "C-ITS Companion") - (date "2026-07-12") - (rev "v0.1") - (company "jtbx") - ) - (lib_symbols - (symbol "Connector:Conn_01x02_Socket" - (pin_names - (offset 1.016) - (hide yes) - ) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (in_pos_files yes) - (duplicate_pin_numbers_are_jumpers no) - (property "Reference" "J" - (at 0 2.54 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "Conn_01x02_Socket" - (at 0 -5.08 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Datasheet" "" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Description" "Generic connector, single row, 01x02, script generated" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "ki_locked" "" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "ki_keywords" "connector" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "ki_fp_filters" "Connector*:*_1x??_*" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (symbol "Conn_01x02_Socket_1_1" - (polyline - (pts - (xy -1.27 0) (xy -0.508 0) - ) - (stroke - (width 0.1524) - (type default) - ) - (fill - (type none) - ) - ) - (polyline - (pts - (xy -1.27 -2.54) (xy -0.508 -2.54) - ) - (stroke - (width 0.1524) - (type default) - ) - (fill - (type none) - ) - ) - (arc - (start 0 -0.508) - (mid -0.5058 0) - (end 0 0.508) - (stroke - (width 0.1524) - (type default) - ) - (fill - (type none) - ) - ) - (arc - (start 0 -3.048) - (mid -0.5058 -2.54) - (end 0 -2.032) - (stroke - (width 0.1524) - (type default) - ) - (fill - (type none) - ) - ) - (pin passive line - (at -5.08 0 0) - (length 3.81) - (name "Pin_1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -5.08 -2.54 0) - (length 3.81) - (name "Pin_2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (embedded_fonts no) - ) - (symbol "Connector:Conn_01x08_Socket" - (pin_names - (offset 1.016) - (hide yes) - ) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (in_pos_files yes) - (duplicate_pin_numbers_are_jumpers no) - (property "Reference" "J" - (at 0 10.16 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "Conn_01x08_Socket" - (at 0 -12.7 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Datasheet" "" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Description" "Generic connector, single row, 01x08, script generated" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "ki_locked" "" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "ki_keywords" "connector" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "ki_fp_filters" "Connector*:*_1x??_*" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (symbol "Conn_01x08_Socket_1_1" - (polyline - (pts - (xy -1.27 7.62) (xy -0.508 7.62) - ) - (stroke - (width 0.1524) - (type default) - ) - (fill - (type none) - ) - ) - (polyline - (pts - (xy -1.27 5.08) (xy -0.508 5.08) - ) - (stroke - (width 0.1524) - (type default) - ) - (fill - (type none) - ) - ) - (polyline - (pts - (xy -1.27 2.54) (xy -0.508 2.54) - ) - (stroke - (width 0.1524) - (type default) - ) - (fill - (type none) - ) - ) - (polyline - (pts - (xy -1.27 0) (xy -0.508 0) - ) - (stroke - (width 0.1524) - (type default) - ) - (fill - (type none) - ) - ) - (polyline - (pts - (xy -1.27 -2.54) (xy -0.508 -2.54) - ) - (stroke - (width 0.1524) - (type default) - ) - (fill - (type none) - ) - ) - (polyline - (pts - (xy -1.27 -5.08) (xy -0.508 -5.08) - ) - (stroke - (width 0.1524) - (type default) - ) - (fill - (type none) - ) - ) - (polyline - (pts - (xy -1.27 -7.62) (xy -0.508 -7.62) - ) - (stroke - (width 0.1524) - (type default) - ) - (fill - (type none) - ) - ) - (polyline - (pts - (xy -1.27 -10.16) (xy -0.508 -10.16) - ) - (stroke - (width 0.1524) - (type default) - ) - (fill - (type none) - ) - ) - (arc - (start 0 7.112) - (mid -0.5058 7.62) - (end 0 8.128) - (stroke - (width 0.1524) - (type default) - ) - (fill - (type none) - ) - ) - (arc - (start 0 4.572) - (mid -0.5058 5.08) - (end 0 5.588) - (stroke - (width 0.1524) - (type default) - ) - (fill - (type none) - ) - ) - (arc - (start 0 2.032) - (mid -0.5058 2.54) - (end 0 3.048) - (stroke - (width 0.1524) - (type default) - ) - (fill - (type none) - ) - ) - (arc - (start 0 -0.508) - (mid -0.5058 0) - (end 0 0.508) - (stroke - (width 0.1524) - (type default) - ) - (fill - (type none) - ) - ) - (arc - (start 0 -3.048) - (mid -0.5058 -2.54) - (end 0 -2.032) - (stroke - (width 0.1524) - (type default) - ) - (fill - (type none) - ) - ) - (arc - (start 0 -5.588) - (mid -0.5058 -5.08) - (end 0 -4.572) - (stroke - (width 0.1524) - (type default) - ) - (fill - (type none) - ) - ) - (arc - (start 0 -8.128) - (mid -0.5058 -7.62) - (end 0 -7.112) - (stroke - (width 0.1524) - (type default) - ) - (fill - (type none) - ) - ) - (arc - (start 0 -10.668) - (mid -0.5058 -10.16) - (end 0 -9.652) - (stroke - (width 0.1524) - (type default) - ) - (fill - (type none) - ) - ) - (pin passive line - (at -5.08 7.62 0) - (length 3.81) - (name "Pin_1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -5.08 5.08 0) - (length 3.81) - (name "Pin_2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -5.08 2.54 0) - (length 3.81) - (name "Pin_3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -5.08 0 0) - (length 3.81) - (name "Pin_4" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "4" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -5.08 -2.54 0) - (length 3.81) - (name "Pin_5" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "5" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -5.08 -5.08 0) - (length 3.81) - (name "Pin_6" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "6" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -5.08 -7.62 0) - (length 3.81) - (name "Pin_7" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "7" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -5.08 -10.16 0) - (length 3.81) - (name "Pin_8" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "8" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (embedded_fonts no) - ) - (symbol "Connector:TestPoint" - (pin_numbers - (hide yes) - ) - (pin_names - (offset 0.762) - (hide yes) - ) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (in_pos_files yes) - (duplicate_pin_numbers_are_jumpers no) - (property "Reference" "TP" - (at 0 6.858 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "TestPoint" - (at 0 5.08 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "" - (at 5.08 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Datasheet" "" - (at 5.08 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Description" "test point" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "ki_keywords" "test point tp" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "ki_fp_filters" "Pin* Test*" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (symbol "TestPoint_0_1" - (circle - (center 0 3.302) - (radius 0.762) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - ) - (symbol "TestPoint_1_1" - (pin passive line - (at 0 0 90) - (length 2.54) - (name "1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (embedded_fonts no) - ) - (symbol "Device:C_Polarized" - (pin_numbers - (hide yes) - ) - (pin_names - (offset 0.254) - ) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (in_pos_files yes) - (duplicate_pin_numbers_are_jumpers no) - (property "Reference" "C" - (at 0.635 2.54 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - (justify left) - ) - ) - (property "Value" "C_Polarized" - (at 0.635 -2.54 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - (justify left) - ) - ) - (property "Footprint" "" - (at 0.9652 -3.81 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Datasheet" "" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Description" "Polarized capacitor" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "ki_keywords" "cap capacitor" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "ki_fp_filters" "CP_*" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (symbol "C_Polarized_0_1" - (rectangle - (start -2.286 0.508) - (end 2.286 1.016) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - (polyline - (pts - (xy -1.778 2.286) (xy -0.762 2.286) - ) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - (polyline - (pts - (xy -1.27 2.794) (xy -1.27 1.778) - ) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - (rectangle - (start 2.286 -0.508) - (end -2.286 -1.016) - (stroke - (width 0) - (type default) - ) - (fill - (type outline) - ) - ) - ) - (symbol "C_Polarized_1_1" - (pin passive line - (at 0 3.81 270) - (length 2.794) - (name "" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 0 -3.81 90) - (length 2.794) - (name "" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (embedded_fonts no) - ) - (symbol "RF_GPS:SAM-M8Q" - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (in_pos_files yes) - (duplicate_pin_numbers_are_jumpers no) - (property "Reference" "U" - (at -8.89 11.43 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "SAM-M8Q" - (at 8.89 11.43 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "RF_GPS:ublox_SAM-M8Q" - (at 12.7 -11.43 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Datasheet" "https://www.u-blox.com/sites/default/files/SAM-M8Q_DataSheet_%28UBX-16012619%29.pdf" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Description" "GPS ublox M8 variant" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "ki_keywords" "gps module with antenna" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "ki_fp_filters" "ublox*SAM?M8Q*" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (symbol "SAM-M8Q_0_1" - (rectangle - (start -10.16 10.16) - (end 10.16 -10.16) - (stroke - (width 0.254) - (type default) - ) - (fill - (type background) - ) - ) - ) - (symbol "SAM-M8Q_1_1" - (pin power_in line - (at 0 -12.7 90) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin power_in line - (at 0 12.7 270) - (length 2.54) - (name "VCC_IO" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin power_in line - (at 2.54 12.7 270) - (length 2.54) - (name "V_BCKP" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 0 -12.7 90) - (length 2.54) - (hide yes) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "4" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 0 -12.7 90) - (length 2.54) - (hide yes) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "5" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 0 -12.7 90) - (length 2.54) - (hide yes) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "6" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin output line - (at -12.7 0 0) - (length 2.54) - (name "TIMEPULSE" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "7" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin input line - (at -12.7 -2.54 0) - (length 2.54) - (name "~{SAFEBOOT}" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "8" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 12.7 -2.54 180) - (length 2.54) - (name "SDA" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "9" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 0 -12.7 90) - (length 2.54) - (hide yes) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "10" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 0 -12.7 90) - (length 2.54) - (hide yes) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "11" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin input line - (at 12.7 -5.08 180) - (length 2.54) - (name "SCL" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "12" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin output line - (at 12.7 2.54 180) - (length 2.54) - (name "TXD" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "13" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin input line - (at 12.7 5.08 180) - (length 2.54) - (name "RXD" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "14" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 0 -12.7 90) - (length 2.54) - (hide yes) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "15" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 0 -12.7 90) - (length 2.54) - (hide yes) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "16" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin power_in line - (at -2.54 12.7 270) - (length 2.54) - (name "VCC" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "17" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin input line - (at -12.7 -5.08 0) - (length 2.54) - (name "~{RESET}" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "18" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin input line - (at -12.7 2.54 0) - (length 2.54) - (name "EXTINT" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "19" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 0 -12.7 90) - (length 2.54) - (hide yes) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "20" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (embedded_fonts no) - ) - (symbol "Seeed_Studio_XIAO_Series:XIAO-ESP32-C5-SMD" - (pin_names - (offset 1.016) - ) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (in_pos_files yes) - (duplicate_pin_numbers_are_jumpers no) - (property "Reference" "U" - (at -36.83 25.4 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "XIAO-ESP32-C5-SMD" - (at -26.67 23.622 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "Seeed_Studio_XIAO_Series:XIAO-ESP32-C5-SMD" - (at -2.54 -8.89 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Datasheet" "" - (at -8.89 5.08 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Description" "" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (symbol "XIAO-ESP32-C5-SMD_0_1" - (rectangle - (start -12.7 13.97) - (end 27.94 -22.86) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - ) - (symbol "XIAO-ESP32-C5-SMD_1_1" - (pin passive line - (at -15.24 3.81 0) - (length 2.54) - (name "D0" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -15.24 0 0) - (length 2.54) - (name "D1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -15.24 -3.81 0) - (length 2.54) - (name "D2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -15.24 -7.62 0) - (length 2.54) - (name "D3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "4" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -15.24 -11.43 0) - (length 2.54) - (name "D4" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "5" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -15.24 -15.24 0) - (length 2.54) - (name "D5" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "6" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -15.24 -19.05 0) - (length 2.54) - (name "D6" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "7" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 30.48 -19.05 180) - (length 2.54) - (name "D7" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "8" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 30.48 -15.24 180) - (length 2.54) - (name "D8" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "9" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 30.48 -11.43 180) - (length 2.54) - (name "D9" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "10" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 30.48 -7.62 180) - (length 2.54) - (name "D10" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "11" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 30.48 -3.81 180) - (length 2.54) - (name "3V3_OUT" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "12" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 30.48 0 180) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "13" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 30.48 3.81 180) - (length 2.54) - (name "VBUS" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "14" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -7.62 16.51 270) - (length 2.54) - (name "MTDI" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "15" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -3.81 16.51 270) - (length 2.54) - (name "MTDO" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "16" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 0 16.51 270) - (length 2.54) - (name "EN" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "17" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 3.81 16.51 270) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "18" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 7.62 16.51 270) - (length 2.54) - (name "MTMS" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "19" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 11.43 16.51 270) - (length 2.54) - (name "MTCK" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "20" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 15.24 16.51 270) - (length 2.54) - (name "BOOT" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "21" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 19.05 16.51 270) - (length 2.54) - (name "3V3_OUT" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "22" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 3.81 -25.4 90) - (length 2.54) - (name "VBAT" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "23" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 7.62 -25.4 90) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "24" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 11.43 -25.4 90) - (length 2.54) - (name "PAD" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "25" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (embedded_fonts no) - ) - (symbol "Switch:SW_SPDT" - (pin_names - (offset 0) - (hide yes) - ) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (in_pos_files yes) - (duplicate_pin_numbers_are_jumpers no) - (property "Reference" "SW" - (at 0 5.08 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "SW_SPDT" - (at 0 -5.08 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Datasheet" "" - (at 0 -7.62 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Description" "Switch, single pole double throw" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "ki_keywords" "switch single-pole double-throw spdt ON-ON" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (symbol "SW_SPDT_0_1" - (circle - (center -2.032 0) - (radius 0.4572) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - (polyline - (pts - (xy -1.651 0.254) (xy 1.651 2.286) - ) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - (circle - (center 2.032 2.54) - (radius 0.4572) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - (circle - (center 2.032 -2.54) - (radius 0.4572) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - ) - (symbol "SW_SPDT_1_1" - (rectangle - (start -3.175 3.81) - (end 3.175 -3.81) - (stroke - (width 0) - (type default) - ) - (fill - (type background) - ) - ) - (pin passive line - (at 5.08 2.54 180) - (length 2.54) - (name "A" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -5.08 0 0) - (length 2.54) - (name "B" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 5.08 -2.54 180) - (length 2.54) - (name "C" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (embedded_fonts no) - ) - (symbol "power:+3V3" - (power global) - (pin_numbers - (hide yes) - ) - (pin_names - (offset 0) - (hide yes) - ) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (in_pos_files yes) - (duplicate_pin_numbers_are_jumpers no) - (property "Reference" "#PWR" - (at 0 -3.81 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "+3V3" - (at 0 3.556 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Datasheet" "" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Description" "Power symbol creates a global label with name \"+3V3\"" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "ki_keywords" "global power" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (symbol "+3V3_0_1" - (polyline - (pts - (xy -0.762 1.27) (xy 0 2.54) - ) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - (polyline - (pts - (xy 0 2.54) (xy 0.762 1.27) - ) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - (polyline - (pts - (xy 0 0) (xy 0 2.54) - ) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - ) - (symbol "+3V3_1_1" - (pin power_in line - (at 0 0 90) - (length 0) - (name "" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (embedded_fonts no) - ) - (symbol "power:GND" - (power global) - (pin_numbers - (hide yes) - ) - (pin_names - (offset 0) - (hide yes) - ) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (in_pos_files yes) - (duplicate_pin_numbers_are_jumpers no) - (property "Reference" "#PWR" - (at 0 -6.35 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "GND" - (at 0 -3.81 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Datasheet" "" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Description" "Power symbol creates a global label with name \"GND\" , ground" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "ki_keywords" "global power" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (symbol "GND_0_1" - (polyline - (pts - (xy 0 0) (xy 0 -1.27) (xy 1.27 -1.27) (xy 0 -2.54) (xy -1.27 -1.27) (xy 0 -1.27) - ) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - ) - (symbol "GND_1_1" - (pin power_in line - (at 0 0 270) - (length 0) - (name "" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (embedded_fonts no) - ) - (symbol "power:PWR_FLAG" - (power global) - (pin_numbers - (hide yes) - ) - (pin_names - (offset 0) - (hide yes) - ) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (in_pos_files yes) - (duplicate_pin_numbers_are_jumpers no) - (property "Reference" "#FLG" - (at 0 1.905 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "PWR_FLAG" - (at 0 3.81 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Datasheet" "" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Description" "Special symbol for telling ERC where power comes from" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "ki_keywords" "flag power" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (symbol "PWR_FLAG_0_0" - (pin power_out line - (at 0 0 90) - (length 0) - (name "" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (symbol "PWR_FLAG_0_1" - (polyline - (pts - (xy 0 0) (xy 0 1.27) (xy -1.016 1.905) (xy 0 2.54) (xy 1.016 1.905) (xy 0 1.27) - ) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - ) - (embedded_fonts no) - ) - ) - (text "GND\nVCC\nSCL\nSDA\nRES\nDC\nCS\nBLK" - (exclude_from_sim no) - (at 130.302 173.99 0) - (effects - (font - (size 1.524 1.524) - (thickness 0.2064) - ) - ) - (uuid "5ecb88d3-ace1-493a-a702-c30c317f9f07") - ) - (junction - (at 45.72 137.16) - (diameter 0) - (color 0 0 0 0) - (uuid "36052e79-3967-4185-b276-b7b432151546") - ) - (junction - (at 104.14 135.89) - (diameter 0) - (color 0 0 0 0) - (uuid "37cb87e0-e5c1-4dd9-b438-6da79d299edf") - ) - (junction - (at 48.26 165.1) - (diameter 0) - (color 0 0 0 0) - (uuid "48f1d51f-f53b-417b-8896-c4b68c49fc4f") - ) - (junction - (at 119.38 167.64) - (diameter 0) - (color 0 0 0 0) - (uuid "6d50bdc5-12f0-4b99-944b-5861bd3c2925") - ) - (junction - (at 152.4 109.22) - (diameter 0) - (color 0 0 0 0) - (uuid "b662491c-47f2-436d-9226-dfd5a2db0793") - ) - (junction - (at 101.6 21.59) - (diameter 0) - (color 0 0 0 0) - (uuid "dd7eeafc-e048-43bb-857c-b8d0f40be69f") - ) - (no_connect - (at 81.28 101.6) - (uuid "0114737e-8956-45f7-a48b-ac944a29d6b2") - ) - (no_connect - (at 88.9 40.64) - (uuid "1142a614-5b1e-4f7c-8b1b-56b52b3073c0") - ) - (no_connect - (at 81.28 105.41) - (uuid "2a9eac74-67ce-494e-9654-db053a657d9c") - ) - (no_connect - (at 115.57 88.9) - (uuid "3b74efc2-4c3a-4fff-a437-37f0560b68f5") - ) - (no_connect - (at 127 101.6) - (uuid "5250c588-2e78-4aff-808f-0f9220ad1d20") - ) - (no_connect - (at 50.8 142.24) - (uuid "5814efdb-8e6e-4dbf-9be2-fbe6c27173d9") - ) - (no_connect - (at 114.3 48.26) - (uuid "83c210c6-3181-4bab-aab8-03c76eda8530") - ) - (no_connect - (at 92.71 88.9) - (uuid "91438b16-534b-4efd-9f2a-9af946aa6846") - ) - (no_connect - (at 114.3 45.72) - (uuid "915cb8d3-bb9d-488b-86ef-2dca6febdd7b") - ) - (no_connect - (at 96.52 88.9) - (uuid "9f8fee64-05d4-443a-b495-d7a7606898a3") - ) - (no_connect - (at 88.9 88.9) - (uuid "ac7d67a4-3cc2-4d1f-980e-64b76a1afa11") - ) - (no_connect - (at 127 116.84) - (uuid "b1efbd12-c493-436f-8654-111f48f6ab20") - ) - (no_connect - (at 111.76 88.9) - (uuid "b8113ce8-343d-4b73-bad1-780127975de8") - ) - (no_connect - (at 88.9 43.18) - (uuid "c71efd6d-c248-4800-bda7-bec0d152e415") - ) - (no_connect - (at 104.14 88.9) - (uuid "e1cc3e98-b338-4a15-8220-39ea581fb963") - ) - (no_connect - (at 107.95 88.9) - (uuid "e806b611-62fe-4faa-aa54-f588c16701c6") - ) - (no_connect - (at 107.95 130.81) - (uuid "f8d093a8-8f04-41ea-85ab-5d89fe5a5895") - ) - (wire - (pts - (xy 101.6 170.18) (xy 121.92 170.18) - ) - (stroke - (width 0) - (type default) - ) - (uuid "02f51112-7060-4a79-9de3-56c6686bb936") - ) - (wire - (pts - (xy 104.14 135.89) (xy 111.76 135.89) - ) - (stroke - (width 0) - (type default) - ) - (uuid "04b45a22-ab29-4846-a140-edc85f26de8c") - ) - (wire - (pts - (xy 140.97 113.03) (xy 127 113.03) - ) - (stroke - (width 0) - (type default) - ) - (uuid "06b2730b-17cf-4048-9640-fe27f3b0d815") - ) - (wire - (pts - (xy 152.4 105.41) (xy 152.4 109.22) - ) - (stroke - (width 0) - (type default) - ) - (uuid "08655b64-8ad8-447c-8b42-fcdc8cd21bc7") - ) - (wire - (pts - (xy 114.3 40.64) (xy 132.08 40.64) - ) - (stroke - (width 0) - (type default) - ) - (uuid "0a1f62ca-aa91-49d9-9a4c-3647ce221cc0") - ) - (wire - (pts - (xy 81.28 124.46) (xy 76.2 124.46) - ) - (stroke - (width 0) - (type default) - ) - (uuid "0fe5cd6b-ae4d-4c70-9820-d63a62cb6b8c") - ) - (wire - (pts - (xy 121.92 172.72) (xy 97.79 172.72) - ) - (stroke - (width 0) - (type default) - ) - (uuid "104edb85-451c-4068-bd4c-f4aa3dbd0f2e") - ) - (wire - (pts - (xy 118.11 165.1) (xy 121.92 165.1) - ) - (stroke - (width 0) - (type default) - ) - (uuid "112a2835-4334-4ff9-833e-a460ca23d2aa") - ) - (wire - (pts - (xy 104.14 30.48) (xy 104.14 25.4) - ) - (stroke - (width 0) - (type default) - ) - (uuid "1cf1ff63-331b-4521-99a8-49661a41e053") - ) - (wire - (pts - (xy 76.2 124.46) (xy 76.2 71.12) - ) - (stroke - (width 0) - (type default) - ) - (uuid "22622935-c9f8-4d3f-9c8f-b1a78abb4fef") - ) - (wire - (pts - (xy 119.38 167.64) (xy 119.38 182.88) - ) - (stroke - (width 0) - (type default) - ) - (uuid "30141144-712f-4a60-a310-e10f5542ac03") - ) - (wire - (pts - (xy 99.06 21.59) (xy 99.06 30.48) - ) - (stroke - (width 0) - (type default) - ) - (uuid "39a4bb18-3761-45da-819c-4132ec28ebcd") - ) - (wire - (pts - (xy 132.08 124.46) (xy 127 124.46) - ) - (stroke - (width 0) - (type default) - ) - (uuid "39eac58e-fdc3-4ee6-a74f-f83cdad2ebab") - ) - (wire - (pts - (xy 50.8 165.1) (xy 48.26 165.1) - ) - (stroke - (width 0) - (type default) - ) - (uuid "3b9a352d-fb15-42cb-9044-6eaecca720a8") - ) - (wire - (pts - (xy 116.84 167.64) (xy 119.38 167.64) - ) - (stroke - (width 0) - (type default) - ) - (uuid "3be95bd7-d5eb-41ba-ae19-381c0bb90238") - ) - (wire - (pts - (xy 101.6 152.4) (xy 137.16 152.4) - ) - (stroke - (width 0) - (type default) - ) - (uuid "42e6698c-7de0-414e-b177-b28c7d28bb58") - ) - (wire - (pts - (xy 64.77 113.03) (xy 81.28 113.03) - ) - (stroke - (width 0) - (type default) - ) - (uuid "45e49f77-a233-4cd0-97b3-b98f8ee4f120") - ) - (wire - (pts - (xy 119.38 182.88) (xy 121.92 182.88) - ) - (stroke - (width 0) - (type default) - ) - (uuid "49befac0-362a-4a52-9746-cd0651101cd5") - ) - (wire - (pts - (xy 140.97 148.59) (xy 140.97 113.03) - ) - (stroke - (width 0) - (type default) - ) - (uuid "59018900-e8c8-4851-b6fb-c90fb24aeccc") - ) - (wire - (pts - (xy 76.2 71.12) (xy 119.38 71.12) - ) - (stroke - (width 0) - (type default) - ) - (uuid "59707dd9-e6d2-46c7-b90c-c656fb335897") - ) - (wire - (pts - (xy 137.16 152.4) (xy 137.16 120.65) - ) - (stroke - (width 0) - (type default) - ) - (uuid "62fd26b1-2588-43fa-b2af-83ad71e086ff") - ) - (wire - (pts - (xy 48.26 167.64) (xy 48.26 172.72) - ) - (stroke - (width 0) - (type default) - ) - (uuid "68717e6d-9b70-4157-8bc9-70560f913d37") - ) - (wire - (pts - (xy 137.16 120.65) (xy 127 120.65) - ) - (stroke - (width 0) - (type default) - ) - (uuid "7375f201-feb1-4296-908d-7e453d72331e") - ) - (wire - (pts - (xy 81.28 109.22) (xy 72.39 109.22) - ) - (stroke - (width 0) - (type default) - ) - (uuid "73c14374-3260-4c87-a998-3a00152b28d9") - ) - (wire - (pts - (xy 119.38 38.1) (xy 114.3 38.1) - ) - (stroke - (width 0) - (type default) - ) - (uuid "75e3caeb-5d58-4eb8-bc4d-029db99e4003") - ) - (wire - (pts - (xy 72.39 109.22) (xy 72.39 48.26) - ) - (stroke - (width 0) - (type default) - ) - (uuid "7689656a-8461-407f-8cdd-23a92e5234f9") - ) - (wire - (pts - (xy 45.72 137.16) (xy 45.72 142.24) - ) - (stroke - (width 0) - (type default) - ) - (uuid "85e4099d-8b48-4115-83c1-80f888337ae0") - ) - (wire - (pts - (xy 101.6 55.88) (xy 101.6 60.96) - ) - (stroke - (width 0) - (type default) - ) - (uuid "86a94916-fa20-4b73-9a87-367247c7d4af") - ) - (wire - (pts - (xy 132.08 40.64) (xy 132.08 124.46) - ) - (stroke - (width 0) - (type default) - ) - (uuid "964484b9-253d-4c65-b24d-dd6235b8dffb") - ) - (wire - (pts - (xy 43.18 167.64) (xy 48.26 167.64) - ) - (stroke - (width 0) - (type default) - ) - (uuid "97133c79-a9d0-44d3-a450-3449f5e85571") - ) - (wire - (pts - (xy 152.4 109.22) (xy 127 109.22) - ) - (stroke - (width 0) - (type default) - ) - (uuid "9755586e-18af-41e4-a7b8-aee0b926afaf") - ) - (wire - (pts - (xy 83.82 45.72) (xy 88.9 45.72) - ) - (stroke - (width 0) - (type default) - ) - (uuid "99b397a4-cc6f-4d00-bd51-f4c8537b3231") - ) - (wire - (pts - (xy 45.72 137.16) (xy 100.33 137.16) - ) - (stroke - (width 0) - (type default) - ) - (uuid "9cd67264-9ff0-48ae-867e-b55ca2fff2e7") - ) - (wire - (pts - (xy 99.06 21.59) (xy 101.6 21.59) - ) - (stroke - (width 0) - (type default) - ) - (uuid "9d79f9a9-aef1-4531-8f55-3f1215d71e09") - ) - (wire - (pts - (xy 68.58 116.84) (xy 68.58 177.8) - ) - (stroke - (width 0) - (type default) - ) - (uuid "a27a6049-a3d5-4b99-8bfc-049be7ad2b73") - ) - (wire - (pts - (xy 101.6 21.59) (xy 101.6 30.48) - ) - (stroke - (width 0) - (type default) - ) - (uuid "a30562df-8580-4855-9418-cb3e48ff5888") - ) - (wire - (pts - (xy 124.46 25.4) (xy 121.92 25.4) - ) - (stroke - (width 0) - (type default) - ) - (uuid "a32eeb36-60d2-48b2-bae8-fd6bae71c814") - ) - (wire - (pts - (xy 72.39 120.65) (xy 81.28 120.65) - ) - (stroke - (width 0) - (type default) - ) - (uuid "ac00f56b-4507-4213-b7c4-c8d3767f746b") - ) - (wire - (pts - (xy 72.39 120.65) (xy 72.39 180.34) - ) - (stroke - (width 0) - (type default) - ) - (uuid "ae28112d-dc4a-498d-a722-5d1df68e2c5d") - ) - (wire - (pts - (xy 121.92 167.64) (xy 119.38 167.64) - ) - (stroke - (width 0) - (type default) - ) - (uuid "b54ae40b-6e7e-4065-84d5-18cca1ea162f") - ) - (wire - (pts - (xy 48.26 165.1) (xy 43.18 165.1) - ) - (stroke - (width 0) - (type default) - ) - (uuid "b6750035-a48d-4c85-9ddf-30c7093191a4") - ) - (wire - (pts - (xy 64.77 113.03) (xy 64.77 175.26) - ) - (stroke - (width 0) - (type default) - ) - (uuid "b7066202-6513-4269-afbe-71cb7e7c7ccd") - ) - (wire - (pts - (xy 97.79 148.59) (xy 140.97 148.59) - ) - (stroke - (width 0) - (type default) - ) - (uuid "b7fe5e9a-840d-4c90-9167-a915eb604c34") - ) - (wire - (pts - (xy 154.94 109.22) (xy 152.4 109.22) - ) - (stroke - (width 0) - (type default) - ) - (uuid "b9d94e33-a503-47e0-9a21-dd84eb8894cc") - ) - (wire - (pts - (xy 68.58 177.8) (xy 121.92 177.8) - ) - (stroke - (width 0) - (type default) - ) - (uuid "bbc88448-b837-4ff7-8519-a8270b09e83d") - ) - (wire - (pts - (xy 100.33 83.82) (xy 100.33 88.9) - ) - (stroke - (width 0) - (type default) - ) - (uuid "c1f19231-294a-4fcc-9485-262e01cd9bf4") - ) - (wire - (pts - (xy 104.14 130.81) (xy 104.14 135.89) - ) - (stroke - (width 0) - (type default) - ) - (uuid "c57537d9-810d-45c5-8ced-da2e3bb64a72") - ) - (wire - (pts - (xy 68.58 116.84) (xy 81.28 116.84) - ) - (stroke - (width 0) - (type default) - ) - (uuid "ca1d37fc-ccd5-47ba-87e9-53f7f0c2faed") - ) - (wire - (pts - (xy 127 105.41) (xy 138.43 105.41) - ) - (stroke - (width 0) - (type default) - ) - (uuid "cc819dbf-0fd2-4ef6-b866-2f2d00eb4db3") - ) - (wire - (pts - (xy 72.39 48.26) (xy 88.9 48.26) - ) - (stroke - (width 0) - (type default) - ) - (uuid "ce477645-4896-43f8-a01e-df542e043165") - ) - (wire - (pts - (xy 119.38 71.12) (xy 119.38 38.1) - ) - (stroke - (width 0) - (type default) - ) - (uuid "cedb030e-19a0-4b0e-a53c-8c54aed53f26") - ) - (wire - (pts - (xy 48.26 152.4) (xy 48.26 165.1) - ) - (stroke - (width 0) - (type default) - ) - (uuid "d09e8a16-4872-4e67-bcb5-da8325e4cdbf") - ) - (wire - (pts - (xy 104.14 135.89) (xy 104.14 138.43) - ) - (stroke - (width 0) - (type default) - ) - (uuid "d2b58bb2-a79b-4ac2-ba5a-72b610d38721") - ) - (wire - (pts - (xy 97.79 172.72) (xy 97.79 148.59) - ) - (stroke - (width 0) - (type default) - ) - (uuid "d364de3f-94b5-490a-b6b1-525a4899a84c") - ) - (wire - (pts - (xy 64.77 175.26) (xy 121.92 175.26) - ) - (stroke - (width 0) - (type default) - ) - (uuid "d380a067-9893-4422-a0f0-bf1a3c807af6") - ) - (wire - (pts - (xy 49.53 134.62) (xy 45.72 137.16) - ) - (stroke - (width 0) - (type default) - ) - (uuid "d65d3d38-d3bd-43df-9bd7-60298c022dff") - ) - (wire - (pts - (xy 111.76 135.89) (xy 111.76 138.43) - ) - (stroke - (width 0) - (type default) - ) - (uuid "df0b248d-b736-4828-9c51-665b70b9c224") - ) - (wire - (pts - (xy 100.33 137.16) (xy 100.33 130.81) - ) - (stroke - (width 0) - (type default) - ) - (uuid "df7ed573-5227-46c2-b68a-1521c7fa801a") - ) - (wire - (pts - (xy 104.14 25.4) (xy 114.3 25.4) - ) - (stroke - (width 0) - (type default) - ) - (uuid "edc59b79-c409-4f23-9592-66267e46d194") - ) - (wire - (pts - (xy 101.6 170.18) (xy 101.6 152.4) - ) - (stroke - (width 0) - (type default) - ) - (uuid "ef82b95b-89d3-40d3-83bd-73793f88c8a1") - ) - (wire - (pts - (xy 45.72 137.16) (xy 45.72 134.62) - ) - (stroke - (width 0) - (type default) - ) - (uuid "f073276d-705b-4322-80ff-ebbd9bb31b1a") - ) - (wire - (pts - (xy 121.92 180.34) (xy 72.39 180.34) - ) - (stroke - (width 0) - (type default) - ) - (uuid "f6b3ecc0-77a9-448b-86d1-f87ef1154c1e") - ) - (label "BAT" - (at 50.8 165.1 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left bottom) - ) - (uuid "07ec5188-b28c-4f1f-afdd-d260d8d8e5d8") - ) - (label "V_BCKP" - (at 104.14 25.4 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left bottom) - ) - (uuid "74da5e28-22fc-4093-8888-18bdecaaafae") - ) - (label "BAT_SW" - (at 49.53 134.62 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left bottom) - ) - (uuid "93713366-b495-491f-a6a7-77d96cb7b43a") - ) - (symbol - (lib_id "power:GND") - (at 48.26 172.72 0) - (unit 1) - (body_style 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (in_pos_files yes) - (dnp no) - (fields_autoplaced yes) - (uuid "02168c20-966c-487b-a2d3-d1844c90c417") - (property "Reference" "#PWR06" - (at 48.26 179.07 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "GND" - (at 48.26 177.8 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "" - (at 48.26 172.72 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Datasheet" "" - (at 48.26 172.72 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Description" "Power symbol creates a global label with name \"GND\" , ground" - (at 48.26 172.72 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (pin "1" - (uuid "b1f0100f-404c-4f37-93b3-b2cd63a9ea0c") - ) - (instances - (project "c_its-companion" - (path "/9ad468b0-d7e4-4d4a-b652-c4a81a952e30" - (reference "#PWR06") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "RF_GPS:SAM-M8Q") - (at 101.6 43.18 0) - (unit 1) - (body_style 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (in_pos_files yes) - (dnp no) - (fields_autoplaced yes) - (uuid "146ab5e4-8674-45b0-a190-4069a635de12") - (property "Reference" "U2" - (at 103.7433 55.88 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - (justify left) - ) - ) - (property "Value" "SAM-M8Q" - (at 103.7433 58.42 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - (justify left) - ) - ) - (property "Footprint" "RF_GPS:ublox_SAM-M8Q_HandSolder" - (at 114.3 54.61 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Datasheet" "https://www.u-blox.com/sites/default/files/SAM-M8Q_DataSheet_%28UBX-16012619%29.pdf" - (at 101.6 43.18 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Description" "GPS ublox M8 variant" - (at 101.6 43.18 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (pin "13" - (uuid "4b248af9-2835-4169-92c9-68a51ca36d40") - ) - (pin "12" - (uuid "e6d3be7c-dc51-48e5-8001-417739824556") - ) - (pin "16" - (uuid "23762b9f-09dc-4925-934e-01a8f393626b") - ) - (pin "17" - (uuid "92b5dd0c-99e6-4b9c-b001-bc236af89b31") - ) - (pin "4" - (uuid "4316c444-a67f-48c4-b60d-c3c4a2fc7478") - ) - (pin "3" - (uuid "2eb249e9-5b18-47a2-b2dd-08ff9f317af9") - ) - (pin "15" - (uuid "9b264690-d5f8-48f8-83a6-bee2042de951") - ) - (pin "19" - (uuid "b80a39f4-e097-4147-879f-8930da7388bf") - ) - (pin "18" - (uuid "0854e194-49c4-436f-a3eb-410a3539266e") - ) - (pin "6" - (uuid "3b6ea5a5-c15d-4bf3-84fa-a050bf7483e7") - ) - (pin "5" - (uuid "e701c442-fd7e-4df5-89e8-bd691c3d3007") - ) - (pin "11" - (uuid "199b48fe-3e51-4dfd-810b-c299ebaf0773") - ) - (pin "10" - (uuid "4bd12a76-093d-43c7-b624-c0fb47f41e58") - ) - (pin "2" - (uuid "a6212832-8495-4da0-8601-e5dc46e0784d") - ) - (pin "14" - (uuid "ac1ec26f-0053-4995-af48-1c373c0d84cf") - ) - (pin "9" - (uuid "843b98d6-1299-429a-8991-f3af39cc2753") - ) - (pin "1" - (uuid "f8ce6704-b6ea-4453-8592-7b00e68d143d") - ) - (pin "7" - (uuid "1cc07386-7ee1-4f94-b3b6-b6ee4980a82d") - ) - (pin "8" - (uuid "4cdac65b-bc27-466a-94f9-1d32b11f6541") - ) - (pin "20" - (uuid "46f075ff-f4aa-4327-8fb3-9a3923e54f1a") - ) - (instances - (project "c_its-companion" - (path "/9ad468b0-d7e4-4d4a-b652-c4a81a952e30" - (reference "U2") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "power:PWR_FLAG") - (at 45.72 134.62 0) - (unit 1) - (body_style 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (in_pos_files yes) - (dnp no) - (fields_autoplaced yes) - (uuid "231aad99-0b82-4407-a36d-f133af150148") - (property "Reference" "#FLG01" - (at 45.72 132.715 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "PWR_FLAG" - (at 45.72 129.54 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "" - (at 45.72 134.62 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Datasheet" "" - (at 45.72 134.62 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Description" "Special symbol for telling ERC where power comes from" - (at 45.72 134.62 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (pin "1" - (uuid "6a84bed4-a2a1-4434-b391-9636230ef668") - ) - (instances - (project "c_its-companion" - (path "/9ad468b0-d7e4-4d4a-b652-c4a81a952e30" - (reference "#FLG01") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "Connector:TestPoint") - (at 83.82 45.72 0) - (unit 1) - (body_style 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (in_pos_files yes) - (dnp no) - (fields_autoplaced yes) - (uuid "29c6ccbc-a78f-400c-a69e-7ae6b54be5c1") - (property "Reference" "TP1" - (at 81.28 41.1479 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - (justify right) - ) - ) - (property "Value" "SAFEBOOT_N" - (at 81.28 43.6879 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - (justify right) - ) - ) - (property "Footprint" "TestPoint:TestPoint_Pad_D2.0mm" - (at 88.9 45.72 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Datasheet" "" - (at 88.9 45.72 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Description" "test point" - (at 83.82 45.72 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (pin "1" - (uuid "99adb8aa-75c5-4bb2-849a-6f5304e67af6") - ) - (instances - (project "c_its-companion" - (path "/9ad468b0-d7e4-4d4a-b652-c4a81a952e30" - (reference "TP1") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "Device:C_Polarized") - (at 118.11 25.4 90) - (unit 1) - (body_style 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (in_pos_files yes) - (dnp yes) - (fields_autoplaced yes) - (uuid "2de94c41-8b8b-4487-a1c1-1ec9096c353e") - (property "Reference" "C1" - (at 117.221 17.78 90) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "C_Polarized" - (at 117.221 20.32 90) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder" - (at 121.92 24.4348 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Datasheet" "" - (at 118.11 25.4 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Description" "Polarized capacitor" - (at 118.11 25.4 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (pin "1" - (uuid "29715014-605b-49fa-9a26-cc10bc31f33c") - ) - (pin "2" - (uuid "d969414b-1618-4e11-9035-9dd7c551febd") - ) - (instances - (project "c_its-companion" - (path "/9ad468b0-d7e4-4d4a-b652-c4a81a952e30" - (reference "C1") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "Seeed_Studio_XIAO_Series:XIAO-ESP32-C5-SMD") - (at 96.52 105.41 0) - (unit 1) - (body_style 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (in_pos_files yes) - (dnp no) - (fields_autoplaced yes) - (uuid "4975a684-eba1-4811-993f-a5913c07a957") - (property "Reference" "U1" - (at 110.0933 130.81 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - (justify left) - ) - ) - (property "Value" "XIAO-ESP32-C5-SMD" - (at 110.0933 133.35 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - (justify left) - ) - ) - (property "Footprint" "library:XIAO-ESP32-C5-SMD-DIP" - (at 93.98 114.3 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Datasheet" "" - (at 87.63 100.33 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Description" "" - (at 96.52 105.41 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (pin "22" - (uuid "02bf4311-4ae5-4f73-84f5-6e3bb6d5b15a") - ) - (pin "21" - (uuid "e88103ab-5697-4811-87c5-a2e75aa83aab") - ) - (pin "4" - (uuid "a8385936-5edf-49a6-a120-aa62c75b407b") - ) - (pin "5" - (uuid "dcdf7120-baf5-4cd8-a616-b9ee6ed08405") - ) - (pin "6" - (uuid "bdea48dc-fb51-4f09-803a-e7a3024d5a0c") - ) - (pin "7" - (uuid "69a03fe9-a086-4c96-a441-004d2395ca0c") - ) - (pin "20" - (uuid "75702672-7793-47aa-8719-f08e6119edc5") - ) - (pin "19" - (uuid "f3ed17db-2867-49bd-8b32-2cfafbfc44e1") - ) - (pin "18" - (uuid "9d81e3c7-45d5-43ff-a305-89e5243618ea") - ) - (pin "17" - (uuid "c0d83898-6763-4174-8c22-0f0c5406dbb0") - ) - (pin "16" - (uuid "057bcfdf-82f6-49a1-9a10-ab026a0531ac") - ) - (pin "15" - (uuid "bf368abb-1c06-405f-a6d7-630cdac785cd") - ) - (pin "14" - (uuid "35a13861-fb04-42fb-aceb-ea6cda994477") - ) - (pin "13" - (uuid "0e7b7986-c669-4b38-a7dd-991b80f8e8a4") - ) - (pin "12" - (uuid "3821eeb8-d572-4915-a8e6-8281f1b1a4c6") - ) - (pin "11" - (uuid "60dff7cc-2666-4317-8af9-58af9bc8ca31") - ) - (pin "8" - (uuid "5e75b7d9-93ca-45f4-8d58-225201c706cd") - ) - (pin "10" - (uuid "163a14a0-ded7-4322-8b3b-ebee6c120b1c") - ) - (pin "9" - (uuid "b652a67d-1556-46ff-8200-dddb9ceaa54a") - ) - (pin "1" - (uuid "c3190e0d-f431-4fbb-ad62-71d850dc9d54") - ) - (pin "2" - (uuid "96d1cf02-d511-4cd1-ba7f-9b63203fc51a") - ) - (pin "3" - (uuid "8197d914-8e7f-475b-b1c3-fc04597d76fc") - ) - (pin "23" - (uuid "3a0b7239-a877-40ff-8993-0b4237f2b200") - ) - (pin "24" - (uuid "83b5d7df-9863-4243-913c-c00973937a23") - ) - (pin "25" - (uuid "fb0d6f3b-6855-4e82-9b69-24cdb39bd1c7") - ) - (instances - (project "c_its-companion" - (path "/9ad468b0-d7e4-4d4a-b652-c4a81a952e30" - (reference "U1") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "power:+3V3") - (at 116.84 167.64 90) - (unit 1) - (body_style 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (in_pos_files yes) - (dnp no) - (fields_autoplaced yes) - (uuid "74d1bb3e-863b-4406-bf46-9b8f2727c7ca") - (property "Reference" "#PWR08" - (at 120.65 167.64 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "+3V3" - (at 113.03 167.6399 90) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - (justify left) - ) - ) - (property "Footprint" "" - (at 116.84 167.64 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Datasheet" "" - (at 116.84 167.64 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Description" "Power symbol creates a global label with name \"+3V3\"" - (at 116.84 167.64 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (pin "1" - (uuid "7f84085b-bd69-49a8-9dd9-35f585bfdde3") - ) - (instances - (project "c_its-companion" - (path "/9ad468b0-d7e4-4d4a-b652-c4a81a952e30" - (reference "#PWR08") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "power:PWR_FLAG") - (at 111.76 138.43 180) - (unit 1) - (body_style 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (in_pos_files yes) - (dnp no) - (fields_autoplaced yes) - (uuid "85e3f38e-47b2-4556-ae80-b411cdb1a0e1") - (property "Reference" "#FLG03" - (at 111.76 140.335 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "PWR_FLAG" - (at 111.76 143.51 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "" - (at 111.76 138.43 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Datasheet" "" - (at 111.76 138.43 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Description" "Special symbol for telling ERC where power comes from" - (at 111.76 138.43 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (pin "1" - (uuid "d782693d-1a2d-49e9-b6e5-982877750769") - ) - (instances - (project "c_its-companion" - (path "/9ad468b0-d7e4-4d4a-b652-c4a81a952e30" - (reference "#FLG03") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "Connector:Conn_01x02_Socket") - (at 38.1 167.64 180) - (unit 1) - (body_style 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (in_pos_files yes) - (dnp no) - (fields_autoplaced yes) - (uuid "892402cc-04d7-4ef7-82b9-1d18ac58ae6e") - (property "Reference" "J2" - (at 38.735 160.02 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "Battery" - (at 38.735 162.56 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Horizontal" - (at 38.1 167.64 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Datasheet" "" - (at 38.1 167.64 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Description" "Generic connector, single row, 01x02, script generated" - (at 38.1 167.64 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (pin "1" - (uuid "06f18bd8-2967-40de-a2de-f2a5f1e703af") - ) - (pin "2" - (uuid "8b4f9569-10a4-492d-a239-33adac63c910") - ) - (instances - (project "c_its-companion" - (path "/9ad468b0-d7e4-4d4a-b652-c4a81a952e30" - (reference "J2") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "power:GND") - (at 124.46 25.4 90) - (unit 1) - (body_style 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (in_pos_files yes) - (dnp no) - (fields_autoplaced yes) - (uuid "8eb33510-48fc-4af2-beae-d5c251d7ec11") - (property "Reference" "#PWR010" - (at 130.81 25.4 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "GND" - (at 128.27 25.3999 90) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - (justify right) - ) - ) - (property "Footprint" "" - (at 124.46 25.4 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Datasheet" "" - (at 124.46 25.4 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Description" "Power symbol creates a global label with name \"GND\" , ground" - (at 124.46 25.4 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (pin "1" - (uuid "5f36ba37-42eb-4684-aa0e-be058fe042fe") - ) - (instances - (project "c_its-companion" - (path "/9ad468b0-d7e4-4d4a-b652-c4a81a952e30" - (reference "#PWR010") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "power:PWR_FLAG") - (at 154.94 109.22 270) - (unit 1) - (body_style 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (in_pos_files yes) - (dnp no) - (fields_autoplaced yes) - (uuid "98be516a-059d-4e19-a004-b641e3f65e45") - (property "Reference" "#FLG02" - (at 156.845 109.22 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "PWR_FLAG" - (at 158.75 109.2199 90) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - (justify left) - ) - ) - (property "Footprint" "" - (at 154.94 109.22 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Datasheet" "" - (at 154.94 109.22 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Description" "Special symbol for telling ERC where power comes from" - (at 154.94 109.22 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (pin "1" - (uuid "a1e309c2-d007-40c4-ba73-d7b43d05ca16") - ) - (instances - (project "c_its-companion" - (path "/9ad468b0-d7e4-4d4a-b652-c4a81a952e30" - (reference "#FLG02") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "power:+3V3") - (at 152.4 105.41 0) - (unit 1) - (body_style 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (in_pos_files yes) - (dnp no) - (fields_autoplaced yes) - (uuid "99eb6fd4-e72c-492e-bbf6-75a269b91b45") - (property "Reference" "#PWR09" - (at 152.4 109.22 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "+3V3" - (at 154.94 104.1399 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - (justify left) - ) - ) - (property "Footprint" "" - (at 152.4 105.41 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Datasheet" "" - (at 152.4 105.41 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Description" "Power symbol creates a global label with name \"+3V3\"" - (at 152.4 105.41 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (pin "1" - (uuid "5a42d69c-298c-4f71-9a9e-e2a76ed7ea59") - ) - (instances - (project "c_its-companion" - (path "/9ad468b0-d7e4-4d4a-b652-c4a81a952e30" - (reference "#PWR09") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "power:GND") - (at 104.14 138.43 0) - (unit 1) - (body_style 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (in_pos_files yes) - (dnp no) - (fields_autoplaced yes) - (uuid "abd6df7e-6d3c-4711-9972-2f1b7b7433ab") - (property "Reference" "#PWR01" - (at 104.14 144.78 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "GND" - (at 104.14 143.51 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "" - (at 104.14 138.43 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Datasheet" "" - (at 104.14 138.43 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Description" "Power symbol creates a global label with name \"GND\" , ground" - (at 104.14 138.43 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (pin "1" - (uuid "5e73c694-fd27-4c76-a313-44934fb14c06") - ) - (instances - (project "c_its-companion" - (path "/9ad468b0-d7e4-4d4a-b652-c4a81a952e30" - (reference "#PWR01") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "power:+3V3") - (at 101.6 21.59 0) - (unit 1) - (body_style 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (in_pos_files yes) - (dnp no) - (fields_autoplaced yes) - (uuid "b01c3969-069f-4728-b4a2-c0eefbbcd81d") - (property "Reference" "#PWR07" - (at 101.6 25.4 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "+3V3" - (at 101.6 16.51 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "" - (at 101.6 21.59 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Datasheet" "" - (at 101.6 21.59 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Description" "Power symbol creates a global label with name \"+3V3\"" - (at 101.6 21.59 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (pin "1" - (uuid "a1f7f88b-9108-40fd-8634-fce56db7510d") - ) - (instances - (project "c_its-companion" - (path "/9ad468b0-d7e4-4d4a-b652-c4a81a952e30" - (reference "#PWR07") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "Switch:SW_SPDT") - (at 48.26 147.32 90) - (unit 1) - (body_style 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (in_pos_files yes) - (dnp no) - (fields_autoplaced yes) - (uuid "ba38386d-3ed3-42ce-8f1d-137790571805") - (property "Reference" "SW1" - (at 43.18 146.0499 90) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - (justify left) - ) - ) - (property "Value" "OS102011MA1QS1" - (at 43.18 148.5899 90) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - (justify left) - ) - ) - (property "Footprint" "Button_Switch_THT:SW_Slide_SPDT_Angled_CK_OS102011MA1Q" - (at 48.26 147.32 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Datasheet" "" - (at 55.88 147.32 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Description" "Switch, single pole double throw" - (at 48.26 147.32 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (pin "2" - (uuid "7b71b3a6-c578-4da2-80d2-5dea5e9098c2") - ) - (pin "1" - (uuid "b36ffdce-b52e-4290-a30a-9758b2e64f7e") - ) - (pin "3" - (uuid "9f35cf74-a00c-4190-9abf-0767942ef8f3") - ) - (instances - (project "c_its-companion" - (path "/9ad468b0-d7e4-4d4a-b652-c4a81a952e30" - (reference "SW1") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "power:GND") - (at 138.43 105.41 90) - (unit 1) - (body_style 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (in_pos_files yes) - (dnp no) - (fields_autoplaced yes) - (uuid "be554b9f-f0b6-4508-96f5-e0f66dd7b78e") - (property "Reference" "#PWR02" - (at 144.78 105.41 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "GND" - (at 142.24 105.4099 90) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - (justify right) - ) - ) - (property "Footprint" "" - (at 138.43 105.41 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Datasheet" "" - (at 138.43 105.41 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Description" "Power symbol creates a global label with name \"GND\" , ground" - (at 138.43 105.41 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (pin "1" - (uuid "d471b249-c52d-4e62-8bc4-488ba43bc024") - ) - (instances - (project "c_its-companion" - (path "/9ad468b0-d7e4-4d4a-b652-c4a81a952e30" - (reference "#PWR02") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "power:GND") - (at 118.11 165.1 270) - (unit 1) - (body_style 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (in_pos_files yes) - (dnp no) - (fields_autoplaced yes) - (uuid "d995eec3-6203-4c2a-9245-f1bd04164f30") - (property "Reference" "#PWR05" - (at 111.76 165.1 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "GND" - (at 116.84 161.29 90) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "" - (at 118.11 165.1 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Datasheet" "" - (at 118.11 165.1 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Description" "Power symbol creates a global label with name \"GND\" , ground" - (at 118.11 165.1 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (pin "1" - (uuid "68095be0-b379-4af6-9258-2ebaaae49584") - ) - (instances - (project "c_its-companion" - (path "/9ad468b0-d7e4-4d4a-b652-c4a81a952e30" - (reference "#PWR05") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "power:GND") - (at 101.6 60.96 0) - (unit 1) - (body_style 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (in_pos_files yes) - (dnp no) - (uuid "da74ef5d-2786-47d9-bdd6-8b8cd4c90568") - (property "Reference" "#PWR04" - (at 101.6 67.31 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "GND" - (at 101.6 65.786 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "" - (at 101.6 60.96 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Datasheet" "" - (at 101.6 60.96 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Description" "Power symbol creates a global label with name \"GND\" , ground" - (at 101.6 60.96 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (pin "1" - (uuid "0215556b-3601-4f46-9729-9724b80fc949") - ) - (instances - (project "c_its-companion" - (path "/9ad468b0-d7e4-4d4a-b652-c4a81a952e30" - (reference "#PWR04") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "Connector:Conn_01x08_Socket") - (at 127 172.72 0) - (unit 1) - (body_style 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (in_pos_files yes) - (dnp no) - (fields_autoplaced yes) - (uuid "e8521083-1f77-4711-8191-6272dbbdd11b") - (property "Reference" "J1" - (at 126.365 160.02 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "Display" - (at 126.365 162.56 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x08_P2.54mm_Vertical" - (at 127 172.72 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Datasheet" "" - (at 127 172.72 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Description" "Generic connector, single row, 01x08, script generated" - (at 127 172.72 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (pin "2" - (uuid "6392e569-f05a-4455-8822-df34fad203bf") - ) - (pin "3" - (uuid "c85a1e97-a4e7-432e-8582-be993c600ec6") - ) - (pin "4" - (uuid "800153cf-a082-4dfb-ac8d-11c3c4313ced") - ) - (pin "1" - (uuid "4e964659-2c41-4a58-9179-0086dc5932df") - ) - (pin "7" - (uuid "43205560-d106-4cb6-8ee1-0a7b44224ce9") - ) - (pin "6" - (uuid "67636be2-0558-4344-800e-bacd218439da") - ) - (pin "5" - (uuid "16d9ebf8-626f-419a-85dd-6fda1c70291d") - ) - (pin "8" - (uuid "606d664c-81ba-4e26-b238-d3f6658d262f") - ) - (instances - (project "c_its-companion" - (path "/9ad468b0-d7e4-4d4a-b652-c4a81a952e30" - (reference "J1") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "power:GND") - (at 100.33 83.82 180) - (unit 1) - (body_style 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (in_pos_files yes) - (dnp no) - (uuid "f3039259-cc53-4131-aa94-f7d86dc2d29a") - (property "Reference" "#PWR03" - (at 100.33 77.47 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "GND" - (at 98.552 80.01 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - (justify right) - ) - ) - (property "Footprint" "" - (at 100.33 83.82 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Datasheet" "" - (at 100.33 83.82 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Description" "Power symbol creates a global label with name \"GND\" , ground" - (at 100.33 83.82 0) - (hide yes) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (pin "1" - (uuid "92aeebf8-69ec-4d8d-a8d3-d36750736448") - ) - (instances - (project "c_its-companion" - (path "/9ad468b0-d7e4-4d4a-b652-c4a81a952e30" - (reference "#PWR03") - (unit 1) - ) - ) - ) - ) - (sheet_instances - (path "/" - (page "1") - ) - ) - (embedded_fonts no) -) diff --git a/hardware/c_its-companion/fabrication-toolkit-options.json b/hardware/c_its-companion/fabrication-toolkit-options.json deleted file mode 100644 index 822d456..0000000 --- a/hardware/c_its-companion/fabrication-toolkit-options.json +++ /dev/null @@ -1 +0,0 @@ -{"ARCHIVE_NAME": "", "EXTRA_LAYERS": "", "ALL_ACTIVE_LAYERS": false, "EXTEND_EDGE_CUT": false, "ALTERNATIVE_EDGE_CUT": false, "AUTO TRANSLATE": true, "AUTO FILL": true, "EXCLUDE DNP": false, "OPEN BROWSER": true, "BACKUP_OPT": true} \ No newline at end of file diff --git a/hardware/c_its-companion/fp-lib-table b/hardware/c_its-companion/fp-lib-table deleted file mode 100644 index a9f847b..0000000 --- a/hardware/c_its-companion/fp-lib-table +++ /dev/null @@ -1,4 +0,0 @@ -(fp_lib_table - (version 7) - (lib (name "library") (type "KiCad") (uri "${KIPRJMOD}/library") (options "") (descr "")) -) diff --git a/hardware/c_its-companion/library/Seeed_Studio_XIAO_Series.kicad_sym b/hardware/c_its-companion/library/Seeed_Studio_XIAO_Series.kicad_sym deleted file mode 100644 index 624cb9c..0000000 --- a/hardware/c_its-companion/library/Seeed_Studio_XIAO_Series.kicad_sym +++ /dev/null @@ -1,11661 +0,0 @@ -(kicad_symbol_lib - (version 20251024) - (generator "kicad_symbol_editor") - (generator_version "10.0") - (symbol "XIAO-Add-On" - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (in_pos_files yes) - (duplicate_pin_numbers_are_jumpers no) - (property "Reference" "U" - (at -9.398 8.89 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "XIAO-Add-On" - (at -3.302 6.858 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "Seeed_Studio_XIAO_Series:XIAO-14P-Add-On" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Datasheet" "" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Description" "" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (symbol "XIAO-Add-On_0_1" - (rectangle - (start -10.16 5.842) - (end 15.24 -21.336) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - ) - (symbol "XIAO-Add-On_1_1" - (pin passive line - (at -12.7 3.81 0) - (length 2.54) - (name "D0" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -12.7 0 0) - (length 2.54) - (name "D1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -12.7 -3.81 0) - (length 2.54) - (name "D2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -12.7 -7.62 0) - (length 2.54) - (name "D3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "4" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -12.7 -11.43 0) - (length 2.54) - (name "D4" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "5" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -12.7 -15.24 0) - (length 2.54) - (name "D5" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "6" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -12.7 -19.05 0) - (length 2.54) - (name "D6" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "7" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 17.78 -19.05 180) - (length 2.54) - (name "D7" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "8" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 17.78 -15.24 180) - (length 2.54) - (name "D8" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "9" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 17.78 -11.43 180) - (length 2.54) - (name "D9" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "10" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 17.78 -7.62 180) - (length 2.54) - (name "D10" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "11" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 17.78 -3.81 180) - (length 2.54) - (name "3V3_OUT" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "12" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 17.78 0 180) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "13" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 17.78 3.81 180) - (length 2.54) - (name "VBUS" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "14" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (embedded_fonts no) - ) - (symbol "XIAO-Add-On-PRO" - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (in_pos_files yes) - (duplicate_pin_numbers_are_jumpers no) - (property "Reference" "U" - (at -9.398 8.89 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "XIAO-Add-On-PRO" - (at -1.016 7.112 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "Seeed_Studio_XIAO_Series:XIAO-14P-Add-On-PRO" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Datasheet" "" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Description" "" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (symbol "XIAO-Add-On-PRO_0_1" - (rectangle - (start -10.16 5.842) - (end 15.24 -21.336) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - ) - (symbol "XIAO-Add-On-PRO_1_1" - (pin passive line - (at -12.7 3.81 0) - (length 2.54) - (name "D0" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -12.7 0 0) - (length 2.54) - (name "D1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -12.7 -3.81 0) - (length 2.54) - (name "D2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -12.7 -7.62 0) - (length 2.54) - (name "D3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "4" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -12.7 -11.43 0) - (length 2.54) - (name "D4" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "5" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -12.7 -15.24 0) - (length 2.54) - (name "D5" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "6" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -12.7 -19.05 0) - (length 2.54) - (name "D6" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "7" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 17.78 -19.05 180) - (length 2.54) - (name "D7" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "8" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 17.78 -15.24 180) - (length 2.54) - (name "D8" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "9" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 17.78 -11.43 180) - (length 2.54) - (name "D9" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "10" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 17.78 -7.62 180) - (length 2.54) - (name "D10" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "11" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 17.78 -3.81 180) - (length 2.54) - (name "3V3_OUT" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "12" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 17.78 0 180) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "13" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 17.78 3.81 180) - (length 2.54) - (name "VBUS" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "14" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (embedded_fonts no) - ) - (symbol "XIAO-Add-On-Plus" - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (in_pos_files yes) - (duplicate_pin_numbers_are_jumpers no) - (property "Reference" "U" - (at 0.254 2.032 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.0795) - ) - (justify left) - ) - ) - (property "Value" "XIAO-Add-On-Plus" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - (justify left) - ) - ) - (property "Footprint" "Seeed_Studio_XIAO_Series:XIAO-23P-Add-On-Plus" - (at 22.098 -26.67 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Datasheet" "" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Description" "" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Manufacturer" "" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "MPN" "" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "SKU" "" - (at 0 10.16 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Part Type" "" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Rating" "" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Status" "" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Temperature" "" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Priority" "" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (symbol "XIAO-Add-On-Plus_0_1" - (rectangle - (start 0 -1.524) - (end 43.18 -55.88) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - ) - (symbol "XIAO-Add-On-Plus_1_0" - (pin passive line - (at -2.54 -5.08 0) - (length 2.54) - (name "D0" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -2.54 -8.89 0) - (length 2.54) - (name "D1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -2.54 -12.7 0) - (length 2.54) - (name "D2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -2.54 -16.51 0) - (length 2.54) - (name "D3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "4" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -2.54 -20.32 0) - (length 2.54) - (name "D4" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "5" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -2.54 -24.13 0) - (length 2.54) - (name "D5" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "6" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -2.54 -27.94 0) - (length 2.54) - (name "D6" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "7" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 45.72 -27.94 180) - (length 2.54) - (name "D7" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "8" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 45.72 -24.13 180) - (length 2.54) - (name "D8" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "9" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 45.72 -20.32 180) - (length 2.54) - (name "D9" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "10" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 45.72 -16.51 180) - (length 2.54) - (name "D10" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "11" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 45.72 -12.7 180) - (length 2.54) - (name "3V3_OUT" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "12" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 45.72 -8.89 180) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "13" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 45.72 -5.08 180) - (length 2.54) - (name "VBUS" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "14" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (symbol "XIAO-Add-On-Plus_1_1" - (pin passive line - (at -2.54 -33.02 0) - (length 2.54) - (name "15" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "15" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -2.54 -36.83 0) - (length 2.54) - (name "16" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "16" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -2.54 -40.64 0) - (length 2.54) - (name "17" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "17" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -2.54 -44.45 0) - (length 2.54) - (name "18" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "18" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -2.54 -48.26 0) - (length 2.54) - (name "19" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "19" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -2.54 -52.07 0) - (length 2.54) - (name "20" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "20" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 45.72 -52.07 180) - (length 2.54) - (name "21" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "21" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 45.72 -48.26 180) - (length 2.54) - (name "22" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "22" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 45.72 -44.45 180) - (length 2.54) - (name "23" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "23" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (embedded_fonts no) - ) - (symbol "XIAO-ESP32-C3-SMD" - (pin_names - (offset 1.016) - ) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (in_pos_files yes) - (duplicate_pin_numbers_are_jumpers no) - (property "Reference" "U" - (at -18.542 21.59 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "XIAO-ESP32-C3-SMD" - (at -8.382 19.304 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "Seeed_Studio_XIAO_Series:XIAO-ESP32-C3-SMD" - (at -38.608 -24.384 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Datasheet" "" - (at -8.89 5.08 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Description" "" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (symbol "XIAO-ESP32-C3-SMD_0_1" - (rectangle - (start -19.05 17.78) - (end 17.78 -21.59) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - ) - (symbol "XIAO-ESP32-C3-SMD_1_1" - (pin passive line - (at -21.59 7.62 0) - (length 2.54) - (name "D0" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -21.59 3.81 0) - (length 2.54) - (name "D1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -21.59 0 0) - (length 2.54) - (name "D2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -21.59 -3.81 0) - (length 2.54) - (name "D3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "4" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -21.59 -7.62 0) - (length 2.54) - (name "D4" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "5" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -21.59 -11.43 0) - (length 2.54) - (name "D5" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "6" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -21.59 -15.24 0) - (length 2.54) - (name "D6" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "7" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 20.32 -15.24 180) - (length 2.54) - (name "D7" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "8" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 20.32 -11.43 180) - (length 2.54) - (name "D8" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "9" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 20.32 -7.62 180) - (length 2.54) - (name "D9/BOOT" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "10" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 20.32 -3.81 180) - (length 2.54) - (name "D10" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "11" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 20.32 0 180) - (length 2.54) - (name "3V3_OUT" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "12" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 20.32 3.81 180) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "13" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 20.32 7.62 180) - (length 2.54) - (name "VBUS" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "14" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -10.16 20.32 270) - (length 2.54) - (name "D3/MTDI" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "15" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -6.35 20.32 270) - (length 2.54) - (name "D5/MTDO" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "16" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -2.54 20.32 270) - (length 2.54) - (name "EN" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "17" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 1.27 20.32 270) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "18" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 5.08 20.32 270) - (length 2.54) - (name "D2/MTMS" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "19" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 8.89 20.32 270) - (length 2.54) - (name "D4/MTCK" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "20" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -2.54 -24.13 90) - (length 2.54) - (name "VBAT" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "21" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 1.27 -24.13 90) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "22" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (embedded_fonts no) - ) - (symbol "XIAO-ESP32-C5-SMD" - (pin_names - (offset 1.016) - ) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (in_pos_files yes) - (duplicate_pin_numbers_are_jumpers no) - (property "Reference" "U" - (at -36.83 25.4 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "XIAO-ESP32-C5-SMD" - (at -26.67 23.622 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "Seeed_Studio_XIAO_Series:XIAO-ESP32-C5-SMD" - (at -2.54 -8.89 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Datasheet" "" - (at -8.89 5.08 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Description" "" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (symbol "XIAO-ESP32-C5-SMD_0_1" - (rectangle - (start -12.7 13.97) - (end 27.94 -22.86) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - ) - (symbol "XIAO-ESP32-C5-SMD_1_1" - (pin passive line - (at -15.24 3.81 0) - (length 2.54) - (name "D0" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -15.24 0 0) - (length 2.54) - (name "D1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -15.24 -3.81 0) - (length 2.54) - (name "D2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -15.24 -7.62 0) - (length 2.54) - (name "D3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "4" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -15.24 -11.43 0) - (length 2.54) - (name "D4" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "5" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -15.24 -15.24 0) - (length 2.54) - (name "D5" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "6" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -15.24 -19.05 0) - (length 2.54) - (name "D6" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "7" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 30.48 -19.05 180) - (length 2.54) - (name "D7" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "8" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 30.48 -15.24 180) - (length 2.54) - (name "D8" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "9" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 30.48 -11.43 180) - (length 2.54) - (name "D9" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "10" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 30.48 -7.62 180) - (length 2.54) - (name "D10" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "11" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 30.48 -3.81 180) - (length 2.54) - (name "3V3_OUT" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "12" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 30.48 0 180) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "13" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 30.48 3.81 180) - (length 2.54) - (name "VBUS" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "14" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -7.62 16.51 270) - (length 2.54) - (name "MTDI" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "15" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -3.81 16.51 270) - (length 2.54) - (name "MTDO" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "16" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 0 16.51 270) - (length 2.54) - (name "EN" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "17" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 3.81 16.51 270) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "18" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 7.62 16.51 270) - (length 2.54) - (name "MTMS" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "19" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 11.43 16.51 270) - (length 2.54) - (name "MTCK" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "20" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 15.24 16.51 270) - (length 2.54) - (name "BOOT" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "21" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 19.05 16.51 270) - (length 2.54) - (name "3V3_OUT" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "22" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 3.81 -25.4 90) - (length 2.54) - (name "VBAT" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "23" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 7.62 -25.4 90) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "24" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 11.43 -25.4 90) - (length 2.54) - (name "PAD" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "25" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (embedded_fonts no) - ) - (symbol "XIAO-ESP32-C6-SMD" - (pin_names - (offset 1.016) - ) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (in_pos_files yes) - (duplicate_pin_numbers_are_jumpers no) - (property "Reference" "U" - (at -12.192 20.066 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "XIAO-ESP32-C6-SMD" - (at -2.286 18.034 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "Seeed_Studio_XIAO_Series:XIAO-ESP32-C6-SMD" - (at -2.54 5.08 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Datasheet" "" - (at -8.89 5.08 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Description" "" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (symbol "XIAO-ESP32-C6-SMD_0_1" - (rectangle - (start -12.7 16.51) - (end 27.94 -19.05) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - ) - (symbol "XIAO-ESP32-C6-SMD_1_1" - (pin passive line - (at -15.24 7.62 0) - (length 2.54) - (name "D0" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -15.24 3.81 0) - (length 2.54) - (name "D1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -15.24 0 0) - (length 2.54) - (name "D2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -15.24 -3.81 0) - (length 2.54) - (name "D3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "4" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -15.24 -7.62 0) - (length 2.54) - (name "D4" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "5" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -15.24 -11.43 0) - (length 2.54) - (name "D5" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "6" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -15.24 -15.24 0) - (length 2.54) - (name "D6" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "7" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 30.48 -15.24 180) - (length 2.54) - (name "D7" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "8" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 30.48 -11.43 180) - (length 2.54) - (name "D8" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "9" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 30.48 -7.62 180) - (length 2.54) - (name "D9" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "10" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 30.48 -3.81 180) - (length 2.54) - (name "D10" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "11" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 30.48 0 180) - (length 2.54) - (name "3V3_OUT" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "12" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 30.48 3.81 180) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "13" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 30.48 7.62 180) - (length 2.54) - (name "VBUS" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "14" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -7.62 19.05 270) - (length 2.54) - (name "MTDI" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "15" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -3.81 19.05 270) - (length 2.54) - (name "MTDO" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "16" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 0 19.05 270) - (length 2.54) - (name "EN" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "17" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 3.81 19.05 270) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "18" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 7.62 19.05 270) - (length 2.54) - (name "MTMS" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "19" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 11.43 19.05 270) - (length 2.54) - (name "MTCK" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "20" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 15.24 19.05 270) - (length 2.54) - (name "BOOT" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "21" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 19.05 19.05 270) - (length 2.54) - (name "3V3_OUT" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "22" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 3.81 -21.59 90) - (length 2.54) - (name "VBAT" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "23" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 8.89 -21.59 90) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "24" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (embedded_fonts no) - ) - (symbol "XIAO-ESP32-S3 Plus-SMD" - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (in_pos_files yes) - (duplicate_pin_numbers_are_jumpers no) - (property "Reference" "U" - (at -20.32 23.622 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.0795) - ) - ) - ) - (property "Value" "XIAO-ESP32-S3-Plus-SMD" - (at -10.16 21.844 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.0795) - ) - ) - ) - (property "Footprint" "Seeed_Studio_XIAO_Series:XIAO-ESP32-S3-Plus-SMD" - (at 3.302 -12.192 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1 1) - ) - ) - ) - (property "Datasheet" "" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1 1) - ) - ) - ) - (property "Description" "" - (at -8.636 -10.16 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1 1) - ) - ) - ) - (property "Manufacturer" "" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1 1) - ) - ) - ) - (property "MPN" "" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1 1) - ) - ) - ) - (property "SKU" "" - (at -8.636 -8.128 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1 1) - ) - ) - ) - (property "Part Type" "" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1 1) - ) - ) - ) - (property "Rating" "" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1 1) - ) - ) - ) - (property "Status" "" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1 1) - ) - ) - ) - (property "Temperature" "" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1 1) - ) - ) - ) - (property "Priority" "" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1 1) - ) - ) - ) - (property "ki_fp_filters" "Module:MOUDLE23P-XIAO-HALF-HOLE" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (symbol "XIAO-ESP32-S3 Plus-SMD_0_1" - (rectangle - (start -21.59 20.32) - (end 20.32 -31.75) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - ) - (symbol "XIAO-ESP32-S3 Plus-SMD_1_0" - (pin passive line - (at -24.13 13.97 0) - (length 2.54) - (name "D0" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -24.13 10.16 0) - (length 2.54) - (name "D1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -24.13 6.35 0) - (length 2.54) - (name "D2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -24.13 2.54 0) - (length 2.54) - (name "D3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "4" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -24.13 -1.27 0) - (length 2.54) - (name "D4" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "5" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -24.13 -5.08 0) - (length 2.54) - (name "D5" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "6" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -24.13 -8.89 0) - (length 2.54) - (name "D6" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "7" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 22.86 -8.89 180) - (length 2.54) - (name "D7" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "8" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 22.86 -5.08 180) - (length 2.54) - (name "D8" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "9" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 22.86 -1.27 180) - (length 2.54) - (name "D9" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "10" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 22.86 2.54 180) - (length 2.54) - (name "D10" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "11" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 22.86 6.35 180) - (length 2.54) - (name "3V3_OUT" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "12" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 22.86 10.16 180) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "13" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 22.86 13.97 180) - (length 2.54) - (name "VBUS" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "14" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (symbol "XIAO-ESP32-S3 Plus-SMD_1_1" - (pin passive line - (at -24.13 -13.97 0) - (length 2.54) - (name "D11" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "15" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -24.13 -17.78 0) - (length 2.54) - (name "D12" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "16" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -24.13 -21.59 0) - (length 2.54) - (name "D13" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "17" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -24.13 -25.4 0) - (length 2.54) - (name "D14" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "18" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 22.86 -29.21 180) - (length 2.54) - (name "D15" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "19" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 22.86 -25.4 180) - (length 2.54) - (name "D16" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "20" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 22.86 -21.59 180) - (length 2.54) - (name "D19" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "21" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 22.86 -17.78 180) - (length 2.54) - (name "D18" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "22" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 22.86 -13.97 180) - (length 2.54) - (name "D17" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "23" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -13.97 22.86 270) - (length 2.54) - (name "D14/MTDI" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "24" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -10.16 22.86 270) - (length 2.54) - (name "D13/MTDO" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "25" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -6.35 22.86 270) - (length 2.54) - (name "EN" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "26" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -2.54 22.86 270) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "27" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 1.27 22.86 270) - (length 2.54) - (name "D15/MTMS" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "28" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 5.08 22.86 270) - (length 2.54) - (name "D12/MTCK" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "29" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 8.89 22.86 270) - (length 2.54) - (name "USB_DN" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "30" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 12.7 22.86 270) - (length 2.54) - (name "USB_DP" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "31" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -5.08 -34.29 90) - (length 2.54) - (name "VBAT" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "32" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -1.27 -34.29 90) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "33" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 2.54 -34.29 90) - (length 2.54) - (name "PAD" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "34" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (embedded_fonts no) - ) - (symbol "XIAO-ESP32-S3-SMD" - (pin_names - (offset 1.016) - ) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (in_pos_files yes) - (duplicate_pin_numbers_are_jumpers no) - (property "Reference" "U" - (at -18.288 14.478 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "XIAO-ESP32-S3-SMD" - (at -8.382 12.446 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "Seeed_Studio_XIAO_Series:XIAO-ESP32-S3-SMD" - (at 4.318 -29.972 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Datasheet" "" - (at -8.89 5.08 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Description" "" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (symbol "XIAO-ESP32-S3-SMD_0_1" - (rectangle - (start -19.05 11.43) - (end 19.05 -27.94) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - ) - (symbol "XIAO-ESP32-S3-SMD_1_0" - (pin passive line - (at -21.59 1.27 0) - (length 2.54) - (name "D0" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -21.59 -2.54 0) - (length 2.54) - (name "D1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -21.59 -6.35 0) - (length 2.54) - (name "D2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -21.59 -10.16 0) - (length 2.54) - (name "D3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "4" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -21.59 -13.97 0) - (length 2.54) - (name "D4" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "5" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -21.59 -17.78 0) - (length 2.54) - (name "D5" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "6" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -21.59 -21.59 0) - (length 2.54) - (name "D6" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "7" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 21.59 -21.59 180) - (length 2.54) - (name "D7" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "8" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 21.59 -17.78 180) - (length 2.54) - (name "D8" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "9" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 21.59 -13.97 180) - (length 2.54) - (name "D9" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "10" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 21.59 -10.16 180) - (length 2.54) - (name "D10" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "11" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 21.59 -6.35 180) - (length 2.54) - (name "3V3_OUT" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "12" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 21.59 -2.54 180) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "13" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 21.59 1.27 180) - (length 2.54) - (name "VBUS" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "14" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (symbol "XIAO-ESP32-S3-SMD_1_1" - (pin passive line - (at -13.97 13.97 270) - (length 2.54) - (name "MTDI" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "15" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -10.16 13.97 270) - (length 2.54) - (name "MTDO" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "16" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -6.35 13.97 270) - (length 2.54) - (name "EN" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "17" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -2.54 13.97 270) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "18" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 1.27 13.97 270) - (length 2.54) - (name "MTMS" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "19" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 5.08 13.97 270) - (length 2.54) - (name "MTCK" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "20" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 8.89 13.97 270) - (length 2.54) - (name "USB_DN" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "21" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 12.7 13.97 270) - (length 2.54) - (name "USB_DP" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "22" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -2.54 -30.48 90) - (length 2.54) - (name "VBAT" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "23" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 1.27 -30.48 90) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "24" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 5.08 -30.48 90) - (length 2.54) - (name "PAD" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "25" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (embedded_fonts no) - ) - (symbol "XIAO-MG24-SMD" - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (in_pos_files yes) - (duplicate_pin_numbers_are_jumpers no) - (property "Reference" "U" - (at -34.798 27.178 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.0795) - ) - (justify left bottom) - ) - ) - (property "Value" "XIAO-MG24-SMD" - (at -34.798 25.4 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.0795) - ) - (justify left bottom) - ) - ) - (property "Footprint" "Seeed_Studio_XIAO_Series:XIAO-MG24-SMD" - (at 0 11.43 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Datasheet" "" - (at 0 11.43 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Description" "" - (at 0 11.43 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (symbol "XIAO-MG24-SMD_0_1" - (rectangle - (start -21.59 25.4) - (end 22.86 -29.21) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - ) - (symbol "XIAO-MG24-SMD_1_0" - (polyline - (pts - (xy -21.59 15.24) (xy -22.86 15.24) - ) - (stroke - (width 0.1524) - (type solid) - ) - (fill - (type none) - ) - ) - (polyline - (pts - (xy -21.59 11.43) (xy -22.86 11.43) - ) - (stroke - (width 0.1524) - (type solid) - ) - (fill - (type none) - ) - ) - (polyline - (pts - (xy -21.59 7.62) (xy -22.86 7.62) - ) - (stroke - (width 0.1524) - (type solid) - ) - (fill - (type none) - ) - ) - (polyline - (pts - (xy -21.59 3.81) (xy -22.86 3.81) - ) - (stroke - (width 0.1524) - (type solid) - ) - (fill - (type none) - ) - ) - (polyline - (pts - (xy -21.59 0) (xy -22.86 0) - ) - (stroke - (width 0.1524) - (type solid) - ) - (fill - (type none) - ) - ) - (polyline - (pts - (xy -21.59 -3.81) (xy -22.86 -3.81) - ) - (stroke - (width 0.1524) - (type solid) - ) - (fill - (type none) - ) - ) - (polyline - (pts - (xy -21.59 -7.62) (xy -22.86 -7.62) - ) - (stroke - (width 0.1524) - (type solid) - ) - (fill - (type none) - ) - ) - (pin passive line - (at -24.13 15.24 0) - (length 2.54) - (name "D0" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -24.13 11.43 0) - (length 2.54) - (name "D1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -24.13 7.62 0) - (length 2.54) - (name "D2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -24.13 3.81 0) - (length 2.54) - (name "D3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "4" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -24.13 0 0) - (length 2.54) - (name "D4" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "5" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -24.13 -3.81 0) - (length 2.54) - (name "D5" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "6" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -24.13 -7.62 0) - (length 2.54) - (name "D6" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "7" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 25.4 -6.35 180) - (length 2.54) - (name "D7" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "8" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 25.4 -2.54 180) - (length 2.54) - (name "D8" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "9" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 25.4 1.27 180) - (length 2.54) - (name "D9" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "10" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 25.4 5.08 180) - (length 2.54) - (name "D10" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "11" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 25.4 8.89 180) - (length 2.54) - (name "3V3_OUT" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "12" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 25.4 12.7 180) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "13" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 25.4 16.51 180) - (length 2.54) - (name "VBUS" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "14" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (symbol "XIAO-MG24-SMD_1_1" - (pin passive line - (at -24.13 -12.7 0) - (length 2.54) - (name "D11" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "15" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -24.13 -16.51 0) - (length 2.54) - (name "D12" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "16" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -24.13 -20.32 0) - (length 2.54) - (name "D13" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "17" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -24.13 -24.13 0) - (length 2.54) - (name "D14" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "18" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 25.4 -24.13 180) - (length 2.54) - (name "D15" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "19" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 25.4 -20.32 180) - (length 2.54) - (name "D16" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "20" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 25.4 -16.51 180) - (length 2.54) - (name "D17" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "21" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 25.4 -12.7 180) - (length 2.54) - (name "D18" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "22" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -12.7 27.94 270) - (length 2.54) - (name "SWDIO" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "23" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -8.89 27.94 270) - (length 2.54) - (name "MG24_EN" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "24" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -5.08 27.94 270) - (length 2.54) - (name "SAMD11_EN" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "25" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -1.27 27.94 270) - (length 2.54) - (name "SAMD11_SWDIO" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "26" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 2.54 27.94 270) - (length 2.54) - (name "SAMD11_SWCLK" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "27" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 6.35 27.94 270) - (length 2.54) - (name "3V3_OUT" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "28" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 10.16 27.94 270) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "29" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 13.97 27.94 270) - (length 2.54) - (name "SWCLK" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "30" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -1.27 -31.75 90) - (length 2.54) - (name "BAT" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "31" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 2.54 -31.75 90) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "32" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (embedded_fonts no) - ) - (symbol "XIAO-RA4M1-SMD" - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (in_pos_files yes) - (duplicate_pin_numbers_are_jumpers no) - (property "Reference" "U" - (at -19.05 27.432 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.0795) - ) - (justify left bottom) - ) - ) - (property "Value" "XIAO-RA4M1-SMD" - (at -25.908 23.114 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.0795) - ) - (justify left bottom) - ) - ) - (property "Footprint" "Seeed_Studio_XIAO_Series:XIAO-R4-SMD" - (at 0 11.43 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Datasheet" "" - (at 0 11.43 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Description" "" - (at 0 11.43 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (symbol "XIAO-RA4M1-SMD_0_1" - (rectangle - (start -19.05 21.59) - (end 22.86 -26.67) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - ) - (symbol "XIAO-RA4M1-SMD_1_0" - (pin passive line - (at -21.59 15.24 0) - (length 2.54) - (name "D0" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -21.59 11.43 0) - (length 2.54) - (name "D1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -21.59 7.62 0) - (length 2.54) - (name "D2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -21.59 3.81 0) - (length 2.54) - (name "D3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "4" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -21.59 0 0) - (length 2.54) - (name "D4" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "5" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -21.59 -3.81 0) - (length 2.54) - (name "D5" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "6" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -21.59 -7.62 0) - (length 2.54) - (name "D6" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "7" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 25.4 -7.62 180) - (length 2.54) - (name "D7" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "8" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 25.4 -3.81 180) - (length 2.54) - (name "D8" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "9" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 25.4 0 180) - (length 2.54) - (name "D9" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "10" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 25.4 3.81 180) - (length 2.54) - (name "D10" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "11" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 25.4 7.62 180) - (length 2.54) - (name "3V3_OUT" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "12" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 25.4 11.43 180) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "13" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 25.4 15.24 180) - (length 2.54) - (name "VBUS" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "14" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (symbol "XIAO-RA4M1-SMD_1_1" - (pin passive line - (at -21.59 -12.7 0) - (length 2.54) - (name "D11" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "15" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -21.59 -16.51 0) - (length 2.54) - (name "D12" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "16" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -21.59 -20.32 0) - (length 2.54) - (name "D13" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "17" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -21.59 -24.13 0) - (length 2.54) - (name "D14" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "18" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 25.4 -24.13 180) - (length 2.54) - (name "D15" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "19" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 25.4 -20.32 180) - (length 2.54) - (name "D16" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "20" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 25.4 -16.51 180) - (length 2.54) - (name "D17" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "21" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 25.4 -12.7 180) - (length 2.54) - (name "D18" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "22" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -7.62 24.13 270) - (length 2.54) - (name "SWDIO" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "23" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -3.81 24.13 270) - (length 2.54) - (name "SWDCLK" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "24" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 0 24.13 270) - (length 2.54) - (name "EN" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "25" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 3.81 24.13 270) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "26" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 7.62 24.13 270) - (length 2.54) - (name "BOOT" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "27" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 11.43 24.13 270) - (length 2.54) - (name "3V3_OUT" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "28" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 0 -29.21 90) - (length 2.54) - (name "VBAT" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "29" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 3.81 -29.21 90) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "30" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (embedded_fonts no) - ) - (symbol "XIAO-RP2040-SMD" - (pin_names - (offset 1.016) - ) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (in_pos_files yes) - (duplicate_pin_numbers_are_jumpers no) - (property "Reference" "U" - (at -18.288 14.478 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "XIAO-RP2040-SMD" - (at -8.382 12.446 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "Seeed_Studio_XIAO_Series:XIAO-RP2040-SMD" - (at 4.318 -29.972 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Datasheet" "" - (at -8.89 5.08 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Description" "" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (symbol "XIAO-RP2040-SMD_0_1" - (rectangle - (start -19.05 11.43) - (end 19.05 -27.94) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - ) - (symbol "XIAO-RP2040-SMD_1_0" - (pin passive line - (at -21.59 1.27 0) - (length 2.54) - (name "D0" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -21.59 -2.54 0) - (length 2.54) - (name "D1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -21.59 -6.35 0) - (length 2.54) - (name "D2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -21.59 -10.16 0) - (length 2.54) - (name "D3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "4" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -21.59 -13.97 0) - (length 2.54) - (name "D4" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "5" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -21.59 -17.78 0) - (length 2.54) - (name "D5" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "6" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -21.59 -21.59 0) - (length 2.54) - (name "D6" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "7" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 21.59 -21.59 180) - (length 2.54) - (name "D7" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "8" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 21.59 -17.78 180) - (length 2.54) - (name "D8" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "9" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 21.59 -13.97 180) - (length 2.54) - (name "D9" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "10" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 21.59 -10.16 180) - (length 2.54) - (name "D10" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "11" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 21.59 -6.35 180) - (length 2.54) - (name "3V3_OUT" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "12" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 21.59 -2.54 180) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "13" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 21.59 1.27 180) - (length 2.54) - (name "VBUS" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "14" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (symbol "XIAO-RP2040-SMD_1_1" - (pin passive line - (at -5.08 13.97 270) - (length 2.54) - (name "SWDIO" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "15" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -1.27 13.97 270) - (length 2.54) - (name "SWCLK" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "16" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 2.54 13.97 270) - (length 2.54) - (name "EN" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "17" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 6.35 13.97 270) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "18" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -2.54 -30.48 90) - (length 2.54) - (name "VIN" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "19" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 1.27 -30.48 90) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "20" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (embedded_fonts no) - ) - (symbol "XIAO-RP2350-DIP" - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (in_pos_files yes) - (duplicate_pin_numbers_are_jumpers no) - (property "Reference" "U" - (at -21.59 26.162 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.0795) - ) - (justify left bottom) - ) - ) - (property "Value" "XIAO-RP2350-DIP" - (at -16.51 28.194 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.0795) - ) - (justify left bottom) - ) - ) - (property "Footprint" "Seeed_Studio_XIAO_Series:XIAO-RP2350-DIP" - (at 4.318 26.67 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Datasheet" "" - (at 0 11.43 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Description" "" - (at 0 11.43 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (symbol "XIAO-RP2350-DIP_0_1" - (rectangle - (start -21.59 25.4) - (end 6.35 -19.05) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - ) - (symbol "XIAO-RP2350-DIP_1_0" - (pin passive line - (at -24.13 22.86 0) - (length 2.54) - (name "D0" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -24.13 19.05 0) - (length 2.54) - (name "D1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -24.13 15.24 0) - (length 2.54) - (name "D2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -24.13 11.43 0) - (length 2.54) - (name "D3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "4" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -24.13 7.62 0) - (length 2.54) - (name "D4" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "5" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -24.13 3.81 0) - (length 2.54) - (name "D5" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "6" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -24.13 0 0) - (length 2.54) - (name "D6" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "7" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 8.89 0 180) - (length 2.54) - (name "D7" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "8" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 8.89 3.81 180) - (length 2.54) - (name "D8" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "9" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 8.89 7.62 180) - (length 2.54) - (name "D9" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "10" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 8.89 11.43 180) - (length 2.54) - (name "D10" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "11" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 8.89 15.24 180) - (length 2.54) - (name "3V3_OUT" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "12" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 8.89 19.05 180) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "13" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 8.89 22.86 180) - (length 2.54) - (name "VBUS" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "14" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (symbol "XIAO-RP2350-DIP_1_1" - (pin passive line - (at -24.13 -5.08 0) - (length 2.54) - (name "D11" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "15" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -24.13 -8.89 0) - (length 2.54) - (name "D12" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "16" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -24.13 -12.7 0) - (length 2.54) - (name "D13" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "17" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -24.13 -16.51 0) - (length 2.54) - (name "D14" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "18" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 8.89 -16.51 180) - (length 2.54) - (name "D15" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "19" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 8.89 -12.7 180) - (length 2.54) - (name "D16" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "20" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 8.89 -8.89 180) - (length 2.54) - (name "D17" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "21" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 8.89 -5.08 180) - (length 2.54) - (name "D18" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "22" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -8.89 -21.59 90) - (length 2.54) - (name "VBAT" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "23" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -5.08 -21.59 90) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "24" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (embedded_fonts no) - ) - (symbol "XIAO-RP2350-SMD" - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (in_pos_files yes) - (duplicate_pin_numbers_are_jumpers no) - (property "Reference" "U" - (at -26.416 39.116 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.0795) - ) - (justify left bottom) - ) - ) - (property "Value" "XIAO-RP2350-SMD" - (at -26.416 36.83 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.0795) - ) - (justify left bottom) - ) - ) - (property "Footprint" "Seeed_Studio_XIAO_Series:XIAO-RP2350-SMD" - (at 0.508 10.414 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Datasheet" "" - (at 0 11.43 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Description" "" - (at 0 11.43 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (symbol "XIAO-RP2350-SMD_0_1" - (rectangle - (start -21.59 27.94) - (end 19.05 -19.05) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - ) - (symbol "XIAO-RP2350-SMD_1_0" - (polyline - (pts - (xy -21.59 22.86) (xy -22.86 22.86) - ) - (stroke - (width 0.1524) - (type solid) - ) - (fill - (type none) - ) - ) - (polyline - (pts - (xy -21.59 19.05) (xy -22.86 19.05) - ) - (stroke - (width 0.1524) - (type solid) - ) - (fill - (type none) - ) - ) - (polyline - (pts - (xy -21.59 15.24) (xy -22.86 15.24) - ) - (stroke - (width 0.1524) - (type solid) - ) - (fill - (type none) - ) - ) - (polyline - (pts - (xy -21.59 11.43) (xy -22.86 11.43) - ) - (stroke - (width 0.1524) - (type solid) - ) - (fill - (type none) - ) - ) - (polyline - (pts - (xy -21.59 7.62) (xy -22.86 7.62) - ) - (stroke - (width 0.1524) - (type solid) - ) - (fill - (type none) - ) - ) - (polyline - (pts - (xy -21.59 3.81) (xy -22.86 3.81) - ) - (stroke - (width 0.1524) - (type solid) - ) - (fill - (type none) - ) - ) - (polyline - (pts - (xy -21.59 0) (xy -22.86 0) - ) - (stroke - (width 0.1524) - (type solid) - ) - (fill - (type none) - ) - ) - (pin passive line - (at -24.13 22.86 0) - (length 2.54) - (name "D0" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -24.13 19.05 0) - (length 2.54) - (name "D1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -24.13 15.24 0) - (length 2.54) - (name "D2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -24.13 11.43 0) - (length 2.54) - (name "D3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "4" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -24.13 7.62 0) - (length 2.54) - (name "D4" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "5" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -24.13 3.81 0) - (length 2.54) - (name "D5" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "6" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -24.13 0 0) - (length 2.54) - (name "D6" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "7" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 21.59 0 180) - (length 2.54) - (name "D7" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "8" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 21.59 3.81 180) - (length 2.54) - (name "D8" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "9" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 21.59 7.62 180) - (length 2.54) - (name "D9" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "10" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 21.59 11.43 180) - (length 2.54) - (name "D10" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "11" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 21.59 15.24 180) - (length 2.54) - (name "3V3_OUT" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "12" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 21.59 19.05 180) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "13" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 21.59 22.86 180) - (length 2.54) - (name "VBUS" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "14" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (symbol "XIAO-RP2350-SMD_1_1" - (pin passive line - (at -24.13 -5.08 0) - (length 2.54) - (name "D11" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "15" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -24.13 -8.89 0) - (length 2.54) - (name "D12" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "16" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -24.13 -12.7 0) - (length 2.54) - (name "D13" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "17" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -24.13 -16.51 0) - (length 2.54) - (name "D14" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "18" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 21.59 -16.51 180) - (length 2.54) - (name "D15" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "19" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 21.59 -12.7 180) - (length 2.54) - (name "D16" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "20" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 21.59 -8.89 180) - (length 2.54) - (name "D17" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "21" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 21.59 -5.08 180) - (length 2.54) - (name "D18" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "22" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -11.43 30.48 270) - (length 2.54) - (name "SWDIO" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "23" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -7.62 30.48 270) - (length 2.54) - (name "SWDCLK" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "24" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -3.81 30.48 270) - (length 2.54) - (name "EN" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "25" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 0 30.48 270) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "26" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 3.81 30.48 270) - (length 2.54) - (name "BOOT" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "27" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 7.62 30.48 270) - (length 2.54) - (name "3V3_OUT" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "28" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -3.81 -21.59 90) - (length 2.54) - (name "VBAT" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "29" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 0 -21.59 90) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "30" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (embedded_fonts no) - ) - (symbol "XIAO-SAMD21-SMD" - (pin_names - (offset 1.016) - ) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (in_pos_files yes) - (duplicate_pin_numbers_are_jumpers no) - (property "Reference" "U" - (at -18.288 14.478 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "XIAO-SAMD21-SMD" - (at -8.382 12.446 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "Seeed_Studio_XIAO_Series:XIAO-SAMD21-SMD" - (at 4.318 -29.972 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Datasheet" "" - (at -8.89 5.08 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Description" "" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (symbol "XIAO-SAMD21-SMD_0_1" - (rectangle - (start -19.05 11.43) - (end 19.05 -27.94) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - ) - (symbol "XIAO-SAMD21-SMD_1_0" - (pin passive line - (at -21.59 1.27 0) - (length 2.54) - (name "D0" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -21.59 -2.54 0) - (length 2.54) - (name "D1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -21.59 -6.35 0) - (length 2.54) - (name "D2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -21.59 -10.16 0) - (length 2.54) - (name "D3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "4" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -21.59 -13.97 0) - (length 2.54) - (name "D4" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "5" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -21.59 -17.78 0) - (length 2.54) - (name "D5" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "6" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -21.59 -21.59 0) - (length 2.54) - (name "D6" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "7" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 21.59 -21.59 180) - (length 2.54) - (name "D7" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "8" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 21.59 -17.78 180) - (length 2.54) - (name "D8" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "9" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 21.59 -13.97 180) - (length 2.54) - (name "D9" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "10" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 21.59 -10.16 180) - (length 2.54) - (name "D10" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "11" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 21.59 -6.35 180) - (length 2.54) - (name "3V3_OUT" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "12" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 21.59 -2.54 180) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "13" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 21.59 1.27 180) - (length 2.54) - (name "VBUS" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "14" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (symbol "XIAO-SAMD21-SMD_1_1" - (pin passive line - (at -5.08 13.97 270) - (length 2.54) - (name "SWDIO" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "15" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -1.27 13.97 270) - (length 2.54) - (name "SWCLK" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "16" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 2.54 13.97 270) - (length 2.54) - (name "EN" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "17" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 6.35 13.97 270) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "18" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -2.54 -30.48 90) - (length 2.54) - (name "VIN" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "19" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 1.27 -30.48 90) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "20" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (embedded_fonts no) - ) - (symbol "XIAO-STM32C5-SMD" - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (in_pos_files yes) - (duplicate_pin_numbers_are_jumpers no) - (property "Reference" "U" - (at -24.384 22.606 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "XIAO-STM32C5-SMD" - (at -13.462 20.574 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Datasheet" "" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Description" "" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (symbol "XIAO-STM32C5-SMD_0_1" - (rectangle - (start -25.4 16.51) - (end 21.59 -35.56) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - ) - (symbol "XIAO-STM32C5-SMD_1_0" - (pin passive line - (at -27.94 12.7 0) - (length 2.54) - (name "D0" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -27.94 8.89 0) - (length 2.54) - (name "D1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -27.94 5.08 0) - (length 2.54) - (name "D2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -27.94 1.27 0) - (length 2.54) - (name "D3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "4" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -27.94 -2.54 0) - (length 2.54) - (name "D4" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "5" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -27.94 -6.35 0) - (length 2.54) - (name "D5" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "6" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -27.94 -10.16 0) - (length 2.54) - (name "D6" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "7" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 24.13 -10.16 180) - (length 2.54) - (name "D7" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "8" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 24.13 -6.35 180) - (length 2.54) - (name "D8" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "9" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 24.13 -2.54 180) - (length 2.54) - (name "D9" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "10" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 24.13 1.27 180) - (length 2.54) - (name "D10" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "11" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 24.13 5.08 180) - (length 2.54) - (name "VOUT_3V3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "12" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 24.13 8.89 180) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "13" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 24.13 12.7 180) - (length 2.54) - (name "VBUS" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "14" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (symbol "XIAO-STM32C5-SMD_1_1" - (pin passive line - (at -27.94 -15.24 0) - (length 2.54) - (name "D11" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "15" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -27.94 -19.05 0) - (length 2.54) - (name "D12" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "16" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -27.94 -22.86 0) - (length 2.54) - (name "D13" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "17" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -27.94 -26.67 0) - (length 2.54) - (name "D14" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "18" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 24.13 -26.67 180) - (length 2.54) - (name "NC" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "19" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 24.13 -22.86 180) - (length 2.54) - (name "NC" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "20" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 24.13 -19.05 180) - (length 2.54) - (name "NC" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "21" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 24.13 -15.24 180) - (length 2.54) - (name "D15" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "22" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -16.51 19.05 270) - (length 2.54) - (name "SWDIO/PA13" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "23" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -12.7 19.05 270) - (length 2.54) - (name "SWCLK/PA14" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "24" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -8.89 19.05 270) - (length 2.54) - (name "STM32C5_RST" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "25" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -5.08 19.05 270) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "26" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -1.27 19.05 270) - (length 2.54) - (name "USB_D-" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "27" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 2.54 19.05 270) - (length 2.54) - (name "USB_D+" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "28" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 6.35 19.05 270) - (length 2.54) - (name "STM32C5_BOOT" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "29" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 10.16 19.05 270) - (length 2.54) - (name "VOUT_3V3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "30" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -10.16 -38.1 90) - (length 2.54) - (name "VBAT" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "31" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -6.35 -38.1 90) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "32" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -2.54 -38.1 90) - (length 2.54) - (name "CANH" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "33" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 1.27 -38.1 90) - (length 2.54) - (name "CANL" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "34" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 5.08 -38.1 90) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "35" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (embedded_fonts no) - ) - (symbol "XIAO-nRF52840-SMD" - (pin_names - (offset 1.016) - ) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (in_pos_files yes) - (duplicate_pin_numbers_are_jumpers no) - (property "Reference" "U" - (at -35.814 30.734 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "XIAO-nRF52840-SMD" - (at -25.908 28.702 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "Seeed_Studio_XIAO_Series:XIAO-nRF52840-SMD" - (at -8.89 5.08 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Datasheet" "" - (at -8.89 5.08 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Description" "" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (symbol "XIAO-nRF52840-SMD_0_1" - (rectangle - (start -19.05 24.13) - (end 13.97 -7.62) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - ) - (symbol "XIAO-nRF52840-SMD_1_0" - (pin passive line - (at -21.59 19.05 0) - (length 2.54) - (name "D0" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -21.59 15.24 0) - (length 2.54) - (name "D1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -21.59 11.43 0) - (length 2.54) - (name "D2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -21.59 7.62 0) - (length 2.54) - (name "D3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "4" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -21.59 3.81 0) - (length 2.54) - (name "D4" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "5" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -21.59 0 0) - (length 2.54) - (name "D5" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "6" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -21.59 -3.81 0) - (length 2.54) - (name "D6" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "7" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 16.51 -3.81 180) - (length 2.54) - (name "D7" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "8" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 16.51 0 180) - (length 2.54) - (name "D8" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "9" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 16.51 3.81 180) - (length 2.54) - (name "D9" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "10" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 16.51 7.62 180) - (length 2.54) - (name "D10" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "11" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 16.51 11.43 180) - (length 2.54) - (name "3V3_OUT" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "12" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 16.51 15.24 180) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "13" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 16.51 19.05 180) - (length 2.54) - (name "VBUS" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "14" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (symbol "XIAO-nRF52840-SMD_1_1" - (pin passive line - (at -7.62 26.67 270) - (length 2.54) - (name "SWDIO" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "15" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -3.81 26.67 270) - (length 2.54) - (name "SWCLK" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "16" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 0 26.67 270) - (length 2.54) - (name "EN" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "17" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 3.81 26.67 270) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "18" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -7.62 -10.16 90) - (length 2.54) - (name "VBAT" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "19" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -3.81 -10.16 90) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "20" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 0 -10.16 90) - (length 2.54) - (name "NFC1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "21" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 3.81 -10.16 90) - (length 2.54) - (name "NFC2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "22" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (embedded_fonts no) - ) - (symbol "XIAO-nRF52840_Plus_SMD" - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (in_pos_files yes) - (duplicate_pin_numbers_are_jumpers no) - (property "Reference" "U" - (at -14.732 14.224 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "XIAO-nRF52840-Plus-SMD" - (at -2.032 12.192 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "Seeed_Studio_XIAO_Series:XIAO-nRF52840-Plus-SMD" - (at -8.382 -13.97 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Datasheet" "" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Description" "" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (symbol "XIAO-nRF52840_Plus_SMD_0_1" - (rectangle - (start -15.24 11.176) - (end 12.7 -38.1) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - ) - (symbol "XIAO-nRF52840_Plus_SMD_1_0" - (pin passive line - (at -17.78 7.62 0) - (length 2.54) - (name "D0" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -17.78 3.81 0) - (length 2.54) - (name "D1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -17.78 0 0) - (length 2.54) - (name "D2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -17.78 -3.81 0) - (length 2.54) - (name "D3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "4" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -17.78 -7.62 0) - (length 2.54) - (name "D4" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "5" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -17.78 -11.43 0) - (length 2.54) - (name "D5" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "6" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -17.78 -15.24 0) - (length 2.54) - (name "D6" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "7" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 15.24 -15.24 180) - (length 2.54) - (name "D7" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "8" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 15.24 -11.43 180) - (length 2.54) - (name "D8" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "9" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 15.24 -7.62 180) - (length 2.54) - (name "D9" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "10" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 15.24 -3.81 180) - (length 2.54) - (name "D10" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "11" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 15.24 0 180) - (length 2.54) - (name "3V3_OUT" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "12" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 15.24 3.81 180) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "13" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 15.24 7.62 180) - (length 2.54) - (name "VBUS" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "14" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (symbol "XIAO-nRF52840_Plus_SMD_1_1" - (pin passive line - (at -17.78 -20.32 0) - (length 2.54) - (name "D11" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "15" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -17.78 -24.13 0) - (length 2.54) - (name "D12" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "16" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -17.78 -27.94 0) - (length 2.54) - (name "D13" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "17" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -17.78 -31.75 0) - (length 2.54) - (name "D14" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "18" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 15.24 -35.56 180) - (length 2.54) - (name "D15" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "19" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 15.24 -31.75 180) - (length 2.54) - (name "D16" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "20" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 15.24 -27.94 180) - (length 2.54) - (name "D17" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "21" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 15.24 -24.13 180) - (length 2.54) - (name "D18" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "22" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 15.24 -20.32 180) - (length 2.54) - (name "D19" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "23" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -7.62 13.97 270) - (length 2.54) - (name "SWDIO" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "24" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -3.81 13.97 270) - (length 2.54) - (name "SWDCLK" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "25" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 0 13.97 270) - (length 2.54) - (name "EN" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "26" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 3.81 13.97 270) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "27" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -3.81 -40.64 90) - (length 2.54) - (name "VBAT" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "28" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 0 -40.64 90) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "29" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (embedded_fonts no) - ) - (symbol "XIAO-nRF54LM20A-DIP" - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (in_pos_files yes) - (duplicate_pin_numbers_are_jumpers no) - (property "Reference" "U" - (at -24.892 19.558 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "XIAO-nRF54LM20A-DIP" - (at -14.224 17.78 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Datasheet" "" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Description" "" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (symbol "XIAO-nRF54LM20A-DIP_0_1" - (rectangle - (start -25.4 16.51) - (end 21.59 -48.26) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - ) - (symbol "XIAO-nRF54LM20A-DIP_1_0" - (pin passive line - (at -27.94 12.7 0) - (length 2.54) - (name "D0" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -27.94 8.89 0) - (length 2.54) - (name "D1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -27.94 5.08 0) - (length 2.54) - (name "D2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -27.94 1.27 0) - (length 2.54) - (name "D3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "4" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -27.94 -2.54 0) - (length 2.54) - (name "D4" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "5" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -27.94 -6.35 0) - (length 2.54) - (name "D5" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "6" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -27.94 -10.16 0) - (length 2.54) - (name "D6" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "7" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 24.13 -10.16 180) - (length 2.54) - (name "D7" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "8" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 24.13 -6.35 180) - (length 2.54) - (name "D8" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "9" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 24.13 -2.54 180) - (length 2.54) - (name "D9" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "10" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 24.13 1.27 180) - (length 2.54) - (name "D10" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "11" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 24.13 5.08 180) - (length 2.54) - (name "3V3_OUT" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "12" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 24.13 8.89 180) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "13" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 24.13 12.7 180) - (length 2.54) - (name "VBUS" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "14" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (symbol "XIAO-nRF54LM20A-DIP_1_1" - (pin passive line - (at -27.94 -15.24 0) - (length 2.54) - (name "D11" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "15" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -27.94 -19.05 0) - (length 2.54) - (name "D12" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "16" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -27.94 -22.86 0) - (length 2.54) - (name "D13" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "17" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -27.94 -26.67 0) - (length 2.54) - (name "D14" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "18" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -27.94 -30.48 0) - (length 2.54) - (name "D15" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "19" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -27.94 -34.29 0) - (length 2.54) - (name "D16" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "20" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -27.94 -38.1 0) - (length 2.54) - (name "D17" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "21" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -27.94 -41.91 0) - (length 2.54) - (name "D18" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "22" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 24.13 -45.72 180) - (length 2.54) - (name "D19" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "23" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 24.13 -41.91 180) - (length 2.54) - (name "D20" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "24" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 24.13 -38.1 180) - (length 2.54) - (name "D21" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "25" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 24.13 -34.29 180) - (length 2.54) - (name "D22" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "26" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 24.13 -30.48 180) - (length 2.54) - (name "D23" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "27" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 24.13 -26.67 180) - (length 2.54) - (name "D24" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "28" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 24.13 -22.86 180) - (length 2.54) - (name "D25" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "29" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 24.13 -19.05 180) - (length 2.54) - (name "D26" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "30" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 24.13 -15.24 180) - (length 2.54) - (name "D27" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "31" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -11.43 -50.8 90) - (length 2.54) - (name "VBAT" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "40" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -7.62 -50.8 90) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "41" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -3.81 -50.8 90) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "42" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 0 -50.8 90) - (length 2.54) - (name "SHPHLD" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "43" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 3.81 -50.8 90) - (length 2.54) - (name "NFC1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "44" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 7.62 -50.8 90) - (length 2.54) - (name "NFC2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "45" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (embedded_fonts no) - ) - (symbol "XIAO-nRF54LM20A-SMD" - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (in_pos_files yes) - (duplicate_pin_numbers_are_jumpers no) - (property "Reference" "U" - (at -24.384 22.606 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "XIAO-nRF54LM20A-SMD" - (at -13.462 20.574 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Datasheet" "" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Description" "" - (at 0 0 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (symbol "XIAO-nRF54LM20A-SMD_0_1" - (rectangle - (start -25.4 16.51) - (end 21.59 -48.26) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - ) - (symbol "XIAO-nRF54LM20A-SMD_1_0" - (pin passive line - (at -27.94 12.7 0) - (length 2.54) - (name "D0" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -27.94 8.89 0) - (length 2.54) - (name "D1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -27.94 5.08 0) - (length 2.54) - (name "D2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -27.94 1.27 0) - (length 2.54) - (name "D3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "4" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -27.94 -2.54 0) - (length 2.54) - (name "D4" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "5" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -27.94 -6.35 0) - (length 2.54) - (name "D5" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "6" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -27.94 -10.16 0) - (length 2.54) - (name "D6" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "7" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 24.13 -10.16 180) - (length 2.54) - (name "D7" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "8" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 24.13 -6.35 180) - (length 2.54) - (name "D8" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "9" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 24.13 -2.54 180) - (length 2.54) - (name "D9" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "10" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 24.13 1.27 180) - (length 2.54) - (name "D10" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "11" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 24.13 5.08 180) - (length 2.54) - (name "3V3_OUT" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "12" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 24.13 8.89 180) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "13" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 24.13 12.7 180) - (length 2.54) - (name "VBUS" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "14" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (symbol "XIAO-nRF54LM20A-SMD_1_1" - (pin passive line - (at -27.94 -15.24 0) - (length 2.54) - (name "D11" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "15" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -27.94 -19.05 0) - (length 2.54) - (name "D12" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "16" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -27.94 -22.86 0) - (length 2.54) - (name "D13" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "17" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -27.94 -26.67 0) - (length 2.54) - (name "D14" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "18" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -27.94 -30.48 0) - (length 2.54) - (name "D15" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "19" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -27.94 -34.29 0) - (length 2.54) - (name "D16" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "20" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -27.94 -38.1 0) - (length 2.54) - (name "D17" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "21" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -27.94 -41.91 0) - (length 2.54) - (name "D18" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "22" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 24.13 -45.72 180) - (length 2.54) - (name "D19" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "23" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 24.13 -41.91 180) - (length 2.54) - (name "D20" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "24" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 24.13 -38.1 180) - (length 2.54) - (name "D21" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "25" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 24.13 -34.29 180) - (length 2.54) - (name "D22" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "26" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 24.13 -30.48 180) - (length 2.54) - (name "D23" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "27" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 24.13 -26.67 180) - (length 2.54) - (name "D24" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "28" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 24.13 -22.86 180) - (length 2.54) - (name "D25" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "29" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 24.13 -19.05 180) - (length 2.54) - (name "D26" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "30" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 24.13 -15.24 180) - (length 2.54) - (name "D27" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "31" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -16.51 19.05 270) - (length 2.54) - (name "nRF54_SWDIO" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "32" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -12.7 19.05 270) - (length 2.54) - (name "nRF54_SWCLK" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "33" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -8.89 19.05 270) - (length 2.54) - (name "nRF54_RST" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "34" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -5.08 19.05 270) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "35" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -1.27 19.05 270) - (length 2.54) - (name "SAMD11_SWDIO" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "36" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 2.54 19.05 270) - (length 2.54) - (name "SAMD11_SWCLK" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "37" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 6.35 19.05 270) - (length 2.54) - (name "SAMD11_RST2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "38" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 10.16 19.05 270) - (length 2.54) - (name "3V3_OUT" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "39" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -11.43 -50.8 90) - (length 2.54) - (name "VBAT" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "40" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -7.62 -50.8 90) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "41" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -3.81 -50.8 90) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "42" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 0 -50.8 90) - (length 2.54) - (name "SHPHLD" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "43" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 3.81 -50.8 90) - (length 2.54) - (name "NFC1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "44" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 7.62 -50.8 90) - (length 2.54) - (name "NFC2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "45" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 11.43 -50.8 90) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "46" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (embedded_fonts no) - ) - (symbol "XIAO-nRF54l15-SMD" - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (in_pos_files yes) - (duplicate_pin_numbers_are_jumpers no) - (property "Reference" "U" - (at -37.846 43.434 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.0795) - ) - (justify left bottom) - ) - ) - (property "Value" "XIAO-nRF54l15-SMD" - (at -37.846 41.656 0) - (show_name no) - (do_not_autoplace no) - (effects - (font - (size 1.27 1.0795) - ) - (justify left bottom) - ) - ) - (property "Footprint" "Seeed_Studio_XIAO_Series:XIAO-nRF54l15-SMD" - (at 0 12.7 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Datasheet" "" - (at 0 11.43 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Description" "" - (at 0 11.43 0) - (show_name no) - (do_not_autoplace no) - (hide yes) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (symbol "XIAO-nRF54l15-SMD_0_1" - (rectangle - (start -21.59 40.386) - (end 22.86 -11.43) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - ) - (symbol "XIAO-nRF54l15-SMD_1_0" - (pin passive line - (at -24.13 31.75 0) - (length 2.54) - (name "D0" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -24.13 27.94 0) - (length 2.54) - (name "D1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -24.13 24.13 0) - (length 2.54) - (name "D2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -24.13 20.32 0) - (length 2.54) - (name "D3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "4" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -24.13 16.51 0) - (length 2.54) - (name "D4" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "5" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -24.13 12.7 0) - (length 2.54) - (name "D5" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "6" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -24.13 8.89 0) - (length 2.54) - (name "D6" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "7" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 25.4 8.89 180) - (length 2.54) - (name "D7" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "8" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 25.4 12.7 180) - (length 2.54) - (name "D8" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "9" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 25.4 16.51 180) - (length 2.54) - (name "D9" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "10" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 25.4 20.32 180) - (length 2.54) - (name "D10" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "11" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 25.4 24.13 180) - (length 2.54) - (name "3V3_OUT" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "12" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 25.4 27.94 180) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "13" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 25.4 31.75 180) - (length 2.54) - (name "VBUS" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "14" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (symbol "XIAO-nRF54l15-SMD_1_1" - (pin passive line - (at -24.13 3.81 0) - (length 2.54) - (name "54L15_TX20" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "15" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -24.13 0 0) - (length 2.54) - (name "54L15_RX20" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "16" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -24.13 -3.81 0) - (length 2.54) - (name "D11" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "17" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -24.13 -7.62 0) - (length 2.54) - (name "D12" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "18" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 25.4 -7.62 180) - (length 2.54) - (name "D13" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "19" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 25.4 -3.81 180) - (length 2.54) - (name "D14" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "20" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 25.4 0 180) - (length 2.54) - (name "D15" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "21" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 25.4 3.81 180) - (length 2.54) - (name "USER_LED" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "22" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -12.7 43.18 270) - (length 2.54) - (name "nRF54_SWDIO" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "23" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -8.89 43.18 270) - (length 2.54) - (name "nRF54_SWCLK" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "24" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -5.08 43.18 270) - (length 2.54) - (name "nRF54_EN" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "25" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -1.27 43.18 270) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "26" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 2.54 43.18 270) - (length 2.54) - (name "SAMD11_EN" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "27" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 6.35 43.18 270) - (length 2.54) - (name "3V3_OUT" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "28" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 10.16 43.18 270) - (length 2.54) - (name "SAMD11_SWDIO" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "29" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 13.97 43.18 270) - (length 2.54) - (name "SAMD11_SWCLK" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "30" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -5.08 -13.97 90) - (length 2.54) - (name "VBAT" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "31" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -1.27 -13.97 90) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "32" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 2.54 -13.97 90) - (length 2.54) - (name "NFC1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "33" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 6.35 -13.97 90) - (length 2.54) - (name "NFC2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "34" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (embedded_fonts no) - ) -) diff --git a/hardware/c_its-companion/library/XIAO-ESP32-C5-DIP.kicad_mod b/hardware/c_its-companion/library/XIAO-ESP32-C5-DIP.kicad_mod deleted file mode 100644 index bb3d167..0000000 --- a/hardware/c_its-companion/library/XIAO-ESP32-C5-DIP.kicad_mod +++ /dev/null @@ -1,542 +0,0 @@ -(footprint "XIAO-ESP32-C5-DIP" - (version 20241229) - (generator "pcbnew") - (generator_version "9.0") - (layer "F.Cu") - (property "Reference" "REF**" - (at -0.275 -10.275 0) - (unlocked yes) - (layer "F.SilkS") - (uuid "7bab359d-5e5b-4dff-9db4-e7c8562ce635") - (effects - (font - (size 0.635 0.635) - (thickness 0.1016) - ) - ) - ) - (property "Value" "XIAO-ESP32-C5-DIP" - (at 0 0 0) - (unlocked yes) - (layer "F.Fab") - (uuid "79cabf23-4ebc-4d37-9172-bb2cf4ea975f") - (effects - (font - (size 0.635 0.635) - (thickness 0.1016) - ) - ) - ) - (property "Datasheet" "" - (at 0 0 0) - (unlocked yes) - (layer "F.Fab") - (hide yes) - (uuid "663dc686-104e-47e1-9669-e1228477fa6f") - (effects - (font - (size 1.27 1.27) - (thickness 0.15) - ) - ) - ) - (property "Description" "" - (at 0 0 0) - (unlocked yes) - (layer "F.Fab") - (hide yes) - (uuid "a25b2a4a-94ce-41bd-8341-b98204aa9142") - (effects - (font - (size 1.27 1.27) - (thickness 0.15) - ) - ) - ) - (attr smd) - (fp_line - (start -10.414 -6.985) - (end -10.414 6.985) - (stroke - (width 0.127) - (type solid) - ) - (layer "F.SilkS") - (uuid "e213e2f5-659f-4cdb-b390-b284746621aa") - ) - (fp_line - (start -8.509 -8.89) - (end 8.636 -8.89) - (stroke - (width 0.127) - (type solid) - ) - (layer "F.SilkS") - (uuid "f58afa0e-63f9-4096-9d17-7cf8e5de7759") - ) - (fp_line - (start -8.509 8.89) - (end 8.636 8.89) - (stroke - (width 0.127) - (type solid) - ) - (layer "F.SilkS") - (uuid "9c6409b2-5f1b-4299-85bf-d07c96f13a2a") - ) - (fp_line - (start 10.541 -4.495) - (end 11.551272 -4.491272) - (stroke - (width 0.127) - (type solid) - ) - (layer "F.SilkS") - (uuid "4c45fdff-98df-401f-bf6d-768af24b67a9") - ) - (fp_line - (start 10.541 6.985) - (end 10.541 -6.985) - (stroke - (width 0.1) - (type solid) - ) - (layer "F.SilkS") - (uuid "eb7ba2c6-3729-4940-9c6b-4ac369cf3075") - ) - (fp_line - (start 10.541 6.985) - (end 10.541 -6.985) - (stroke - (width 0.127) - (type solid) - ) - (layer "F.SilkS") - (uuid "6f680559-bbef-46de-9ef5-efda7c2411e9") - ) - (fp_line - (start 11.551 4.504) - (end 10.541 4.504) - (stroke - (width 0.127) - (type solid) - ) - (layer "F.SilkS") - (uuid "eddbec16-11c2-42ad-90d6-191cfc991c10") - ) - (fp_line - (start 12.051 -3.991272) - (end 12.051 4.004) - (stroke - (width 0.127) - (type solid) - ) - (layer "F.SilkS") - (uuid "e973f8d1-81df-437d-bffe-4f734e1ac18e") - ) - (fp_arc - (start -10.414 -6.985) - (mid -9.856038 -8.332038) - (end -8.509 -8.89) - (stroke - (width 0.127) - (type solid) - ) - (layer "F.SilkS") - (uuid "88e5d6ea-6b70-4830-9817-980fd2b32f79") - ) - (fp_arc - (start -8.509 8.89) - (mid -9.856038 8.332038) - (end -10.414 6.985) - (stroke - (width 0.127) - (type solid) - ) - (layer "F.SilkS") - (uuid "f108f05c-d5f6-4de1-bc6f-4c31ef53e967") - ) - (fp_arc - (start 8.636 -8.89) - (mid 9.983038 -8.332038) - (end 10.541 -6.985) - (stroke - (width 0.127) - (type solid) - ) - (layer "F.SilkS") - (uuid "c6870bc4-897a-485a-b951-3feda1bdd32e") - ) - (fp_arc - (start 10.541 6.985) - (mid 9.983038 8.332038) - (end 8.636 8.89) - (stroke - (width 0.127) - (type solid) - ) - (layer "F.SilkS") - (uuid "e1d8f660-1495-43db-8a6b-7fdc7dc42e35") - ) - (fp_arc - (start 11.551272 -4.491272) - (mid 11.904644 -4.344724) - (end 12.051 -3.991272) - (stroke - (width 0.127) - (type default) - ) - (layer "F.SilkS") - (uuid "a9b2ba2a-ad25-4191-9070-ebc0333a9101") - ) - (fp_arc - (start 12.051 4.004) - (mid 11.904553 4.357553) - (end 11.551 4.504) - (stroke - (width 0.127) - (type default) - ) - (layer "F.SilkS") - (uuid "45e349ac-e285-4bed-a05b-ae5a80336af0") - ) - (fp_circle - (center 9.37 -7.857) - (end 9.624 -7.857) - (stroke - (width 0.5) - (type solid) - ) - (fill yes) - (layer "F.SilkS") - (uuid "6839324b-c75a-49ba-8c0c-16e2191166eb") - ) - (fp_circle - (center 10.25 -9) - (end 10.504 -9) - (stroke - (width 0.5) - (type solid) - ) - (fill yes) - (layer "F.SilkS") - (uuid "6e5f4857-2ad9-4493-8234-6091a6821232") - ) - (fp_rect - (start -10.425 -8.9) - (end 10.55 8.9) - (stroke - (width 0.05) - (type default) - ) - (fill no) - (layer "F.CrtYd") - (uuid "b53697bc-d105-40e2-af66-708b16a7f26c") - ) - (fp_rect - (start -10.425 -8.9) - (end 10.55 8.9) - (stroke - (width 0.1) - (type default) - ) - (fill no) - (layer "F.Fab") - (uuid "a45a327e-f036-4877-8d89-39f4f4b0c715") - ) - (fp_circle - (center 9.376 -7.854) - (end 9.63 -7.854) - (stroke - (width 0.5) - (type solid) - ) - (fill yes) - (layer "F.Fab") - (uuid "12a1812e-f866-498e-9d6e-50e427087f34") - ) - (pad "1" smd roundrect - (at 7.62 -8.455 90) - (size 2.432 1.524) - (layers "F.Cu" "F.Mask") - (roundrect_rratio 0.1) - (thermal_bridge_angle 45) - (uuid "82bbfb55-8baa-4218-ac89-ab07d82ef7f8") - ) - (pad "1" thru_hole circle - (at 7.62 -7.62 90) - (size 1.524 1.524) - (drill 0.889) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (uuid "f2fffd4f-460c-4b4d-b954-811e935ed1d6") - ) - (pad "2" smd roundrect - (at 5.08 -8.455 90) - (size 2.432 1.524) - (layers "F.Cu" "F.Mask") - (roundrect_rratio 0.1) - (thermal_bridge_angle 45) - (uuid "18ef9914-2d15-494c-9020-2334abcc1460") - ) - (pad "2" thru_hole circle - (at 5.08 -7.62 90) - (size 1.524 1.524) - (drill 0.889) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (uuid "4732cc3f-e641-4870-a9b3-ae13729c7bba") - ) - (pad "3" smd roundrect - (at 2.54 -8.455 90) - (size 2.432 1.524) - (layers "F.Cu" "F.Mask") - (roundrect_rratio 0.1) - (thermal_bridge_angle 45) - (uuid "15338a55-8514-4218-a2c1-2cae003104c3") - ) - (pad "3" thru_hole circle - (at 2.54 -7.62 90) - (size 1.524 1.524) - (drill 0.889) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (uuid "0cef5e55-d8ff-4394-9cc1-cc318608b0d9") - ) - (pad "4" smd roundrect - (at 0 -8.455 90) - (size 2.432 1.524) - (layers "F.Cu" "F.Mask") - (roundrect_rratio 0.1) - (thermal_bridge_angle 45) - (uuid "191a259d-5773-4a80-91de-baa69611fab8") - ) - (pad "4" thru_hole circle - (at 0 -7.62 90) - (size 1.524 1.524) - (drill 0.889) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (uuid "200b8da4-9395-48a5-b7ac-92a6a147c215") - ) - (pad "5" smd roundrect - (at -2.54 -8.455 90) - (size 2.432 1.524) - (layers "F.Cu" "F.Mask") - (roundrect_rratio 0.1) - (thermal_bridge_angle 45) - (uuid "52012467-1c46-4a8e-aa82-6f6ce69bd2ca") - ) - (pad "5" thru_hole circle - (at -2.54 -7.62 90) - (size 1.524 1.524) - (drill 0.889) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (uuid "2b50ccce-3634-47d1-bf7d-a3db4f3f9a9f") - ) - (pad "6" smd roundrect - (at -5.08 -8.455 90) - (size 2.432 1.524) - (layers "F.Cu" "F.Mask") - (roundrect_rratio 0.1) - (thermal_bridge_angle 45) - (uuid "04aeaf95-142a-40f6-97a3-04453fc50824") - ) - (pad "6" thru_hole circle - (at -5.08 -7.62 90) - (size 1.524 1.524) - (drill 0.889) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (uuid "7636de9d-d8e5-49c9-9fff-0cd76515690d") - ) - (pad "7" smd roundrect - (at -7.62 -8.455 90) - (size 2.432 1.524) - (layers "F.Cu" "F.Mask") - (roundrect_rratio 0.1) - (thermal_bridge_angle 45) - (uuid "e997fd0b-233a-4656-afad-cb2f8b9d87c9") - ) - (pad "7" thru_hole circle - (at -7.62 -7.62 90) - (size 1.524 1.524) - (drill 0.889) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (uuid "9d2c0d0c-05dd-477e-8384-b14eec83fc2e") - ) - (pad "8" thru_hole circle - (at -7.62 7.62 270) - (size 1.524 1.524) - (drill 0.889) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (uuid "1e50c66f-49b8-4b03-9889-8cc6ca45ad8e") - ) - (pad "8" smd roundrect - (at -7.62 8.455 270) - (size 2.432 1.524) - (layers "F.Cu" "F.Mask") - (roundrect_rratio 0.1) - (thermal_bridge_angle 45) - (uuid "e7b72803-b5f0-433c-8313-83247355fb43") - ) - (pad "9" thru_hole circle - (at -5.08 7.62 270) - (size 1.524 1.524) - (drill 0.889) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (uuid "808bf9dc-1c26-4a77-93c9-e4c6d5eccbb2") - ) - (pad "9" smd roundrect - (at -5.08 8.455 270) - (size 2.432 1.524) - (layers "F.Cu" "F.Mask") - (roundrect_rratio 0.1) - (thermal_bridge_angle 45) - (uuid "532de3b6-bd30-47c5-b70e-0bca6abbd997") - ) - (pad "10" thru_hole circle - (at -2.54 7.62 270) - (size 1.524 1.524) - (drill 0.889) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (uuid "a792a2ac-537b-4136-8f92-b81f7ce8f753") - ) - (pad "10" smd roundrect - (at -2.54 8.455 270) - (size 2.432 1.524) - (layers "F.Cu" "F.Mask") - (roundrect_rratio 0.1) - (thermal_bridge_angle 45) - (uuid "6e3f5c75-6143-468e-bb07-d89020c03f59") - ) - (pad "11" thru_hole circle - (at 0 7.62 270) - (size 1.524 1.524) - (drill 0.889) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (uuid "fb78046a-9b91-4893-b010-827957cc07be") - ) - (pad "11" smd roundrect - (at 0 8.455 270) - (size 2.432 1.524) - (layers "F.Cu" "F.Mask") - (roundrect_rratio 0.1) - (thermal_bridge_angle 45) - (uuid "5249f425-bece-432d-8076-28e1b8b386e3") - ) - (pad "12" thru_hole circle - (at 2.54 7.62 270) - (size 1.524 1.524) - (drill 0.889) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (uuid "0b8ccc97-5100-4dcf-8500-e99789ee0b4c") - ) - (pad "12" smd roundrect - (at 2.54 8.455 270) - (size 2.432 1.524) - (layers "F.Cu" "F.Mask") - (roundrect_rratio 0.1) - (thermal_bridge_angle 45) - (uuid "82f1bbd1-708b-4d2d-9113-7ba3c2313670") - ) - (pad "13" thru_hole circle - (at 5.08 7.62 270) - (size 1.524 1.524) - (drill 0.889) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (uuid "03882061-01af-484b-b620-9e92a3daaf68") - ) - (pad "13" smd roundrect - (at 5.08 8.455 270) - (size 2.432 1.524) - (layers "F.Cu" "F.Mask") - (roundrect_rratio 0.1) - (thermal_bridge_angle 45) - (uuid "954f51d1-3d75-42fb-a02a-7389b30718d9") - ) - (pad "14" thru_hole circle - (at 7.62 7.62 270) - (size 1.524 1.524) - (drill 0.889) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (uuid "c6d1af47-da13-4409-9ab1-55d358cc57eb") - ) - (pad "14" smd roundrect - (at 7.62 8.455 270) - (size 2.432 1.524) - (layers "F.Cu" "F.Mask") - (roundrect_rratio 0.1) - (thermal_bridge_angle 45) - (uuid "6b725fd4-d6f0-46bf-b3e0-7ec07cc05622") - ) - (embedded_fonts no) - (model "${AMZPATH}/3dmodels/AMz3D.3dshapes/XIAO-nRF52840 v15.step" - (hide yes) - (offset - (xyz -1.778 -6.096 0.381) - ) - (scale - (xyz 1 1 1) - ) - (rotate - (xyz -90 0 0) - ) - ) - (model "${AMZPATH}/3dmodels/AMz3D.3dshapes/Seeeduino XIAO SAMD21 v4.step" - (offset - (xyz 0 0 0) - ) - (scale - (xyz 1 1 1) - ) - (rotate - (xyz 0 0 0) - ) - ) - (model "${AMZPATH}/3dmodels/AMz3D.3dshapes/Seeed Studio XIAO RP2040 v26.step" - (hide yes) - (offset - (xyz 0 0 0) - ) - (scale - (xyz 1 1 1) - ) - (rotate - (xyz 0 0 90) - ) - ) - (model "${AMZPATH}/3dmodels/AMz3D.3dshapes/Seeed Studio XIAO-ESP32-C3.step" - (hide yes) - (offset - (xyz -1.7018 -6.096 0) - ) - (scale - (xyz 1 1 1) - ) - (rotate - (xyz -90 0 0) - ) - ) - (model "${AMZPATH}/3dmodels/AMz3D.3dshapes/XIAO-ESP32S3 v2.step" - (hide yes) - (offset - (xyz -1.778 -6.1722 0) - ) - (scale - (xyz 1 1 1) - ) - (rotate - (xyz -90 0 0) - ) - ) -) diff --git a/hardware/c_its-companion/library/XIAO-ESP32-C5-SMD-DIP.kicad_mod b/hardware/c_its-companion/library/XIAO-ESP32-C5-SMD-DIP.kicad_mod deleted file mode 100644 index 1b90547..0000000 --- a/hardware/c_its-companion/library/XIAO-ESP32-C5-SMD-DIP.kicad_mod +++ /dev/null @@ -1,558 +0,0 @@ -(footprint "XIAO-ESP32-C5-SMD-DIP" - (version 20260206) - (generator "pcbnew") - (generator_version "10.0") - (layer "F.Cu") - (property "Reference" "REF**" - (at 7.312 -21.336 0) - (layer "F.SilkS") - (uuid "95a6896c-2eab-4f28-adc5-7fd64550efd1") - (effects - (font - (size 0.78232 0.78232) - (thickness 0.10668) - ) - (justify left bottom) - ) - ) - (property "Value" "Val**" - (at 8.89 -10.795 0) - (layer "F.Fab") - (uuid "ead571aa-8f25-4413-9dd8-3ecea3d8b1b5") - (effects - (font - (size 0.536448 0.536448) - (thickness 0.073152) - ) - ) - ) - (property "Datasheet" "" - (at 0 0 0) - (unlocked yes) - (layer "F.Fab") - (hide yes) - (uuid "e0e614f2-f99b-42a7-87d5-6d40f74c047a") - (effects - (font - (size 1.27 1.27) - (thickness 0.15) - ) - ) - ) - (property "Description" "" - (at 0 0 0) - (unlocked yes) - (layer "F.Fab") - (hide yes) - (uuid "074d8848-2ba7-4146-8c49-a0cf65e2aa82") - (effects - (font - (size 1.27 1.27) - (thickness 0.15) - ) - ) - ) - (duplicate_pad_numbers_are_jumpers no) - (fp_line - (start 0 -1.987) - (end 0 -19.132) - (stroke - (width 0.1) - (type solid) - ) - (layer "F.SilkS") - (uuid "e72c3c07-5bc8-4f5f-97cd-36412308e250") - ) - (fp_line - (start 1.905 -0.082) - (end 15.875 -0.082) - (stroke - (width 0.1) - (type solid) - ) - (layer "F.SilkS") - (uuid "e3e0ab25-f18a-4068-92e8-92a17b4caf05") - ) - (fp_line - (start 4.595 -21.037) - (end 4.598728 -22.047272) - (stroke - (width 0.127) - (type solid) - ) - (layer "F.SilkS") - (uuid "4838598f-afa6-445e-b237-7544ae7e9968") - ) - (fp_line - (start 5.098728 -22.547) - (end 13.094 -22.547) - (stroke - (width 0.127) - (type solid) - ) - (layer "F.SilkS") - (uuid "101b5417-f570-447c-b9f6-42639e5eff3c") - ) - (fp_line - (start 13.594 -22.047) - (end 13.594 -21.037) - (stroke - (width 0.127) - (type solid) - ) - (layer "F.SilkS") - (uuid "37ee6532-c85a-4899-82db-921e02cce4af") - ) - (fp_line - (start 15.875 -21.037) - (end 1.905 -21.037) - (stroke - (width 0.1) - (type solid) - ) - (layer "F.SilkS") - (uuid "f94b2798-d11f-47d7-8f2c-02478417b6f1") - ) - (fp_line - (start 17.78 -1.987) - (end 17.78 -19.132) - (stroke - (width 0.1) - (type solid) - ) - (layer "F.SilkS") - (uuid "8c3282cc-86c2-4cf3-a698-856916df5f40") - ) - (fp_arc - (start 0 -19.136) - (mid 0.557962 -20.483038) - (end 1.905 -21.041) - (stroke - (width 0.1) - (type solid) - ) - (layer "F.SilkS") - (uuid "2a1b788b-cdcf-4a49-acac-d187cf344ffc") - ) - (fp_arc - (start 1.905 -0.082) - (mid 0.557962 -0.639962) - (end 0 -1.987) - (stroke - (width 0.1) - (type solid) - ) - (layer "F.SilkS") - (uuid "677c2a8e-0212-4651-99b4-af42d29d0bd1") - ) - (fp_arc - (start 4.598728 -22.047272) - (mid 4.745276 -22.400644) - (end 5.098728 -22.547) - (stroke - (width 0.127) - (type default) - ) - (layer "F.SilkS") - (uuid "b38fc005-51b4-4609-b7e3-78320e82da0d") - ) - (fp_arc - (start 13.094 -22.547) - (mid 13.447553 -22.400553) - (end 13.594 -22.047) - (stroke - (width 0.127) - (type default) - ) - (layer "F.SilkS") - (uuid "46a43512-01fe-440e-b1e8-31a50057cbf8") - ) - (fp_arc - (start 15.875 -21.037) - (mid 17.222038 -20.479038) - (end 17.78 -19.132) - (stroke - (width 0.1) - (type solid) - ) - (layer "F.SilkS") - (uuid "f77dffb2-d331-43db-9018-069e9fa47c57") - ) - (fp_arc - (start 17.78 -1.987) - (mid 17.222038 -0.639962) - (end 15.875 -0.082) - (stroke - (width 0.1) - (type solid) - ) - (layer "F.SilkS") - (uuid "535b0a70-da0d-4557-a5dd-d25a51ee5468") - ) - (fp_circle - (center -0.21 -20.621) - (end -0.21 -20.875) - (stroke - (width 0.5) - (type solid) - ) - (fill yes) - (layer "F.SilkS") - (uuid "c4f8c64e-4c5d-41c1-8b14-aca8fcf77968") - ) - (fp_circle - (center 1.064 -19.904) - (end 1.064 -20.158) - (stroke - (width 0.5) - (type solid) - ) - (fill yes) - (layer "F.SilkS") - (uuid "163ea809-1cd6-43c9-968e-14c093715603") - ) - (fp_rect - (start 17.8 0) - (end 0 -21) - (stroke - (width 0.05) - (type default) - ) - (fill no) - (layer "F.CrtYd") - (uuid "477d102d-f2d0-4f67-ad93-9f60da51bd76") - ) - (fp_rect - (start 0 -21) - (end 17.8 0) - (stroke - (width 0.1) - (type default) - ) - (fill no) - (layer "F.Fab") - (uuid "e7107e2f-485b-49f6-9f5d-2537ab0ef458") - ) - (fp_circle - (center 1.084 -19.9) - (end 1.084 -20.154) - (stroke - (width 0.5) - (type solid) - ) - (fill yes) - (layer "F.Fab") - (uuid "089122fe-193e-4cef-a9b8-54d37cb7fa99") - ) - (pad "1" smd roundrect - (at 0.835 -18.12) - (size 2.75 2) - (layers "F.Cu" "F.Mask" "F.Paste") - (roundrect_rratio 0.25) - (solder_mask_margin 0.0508) - (thermal_bridge_angle 45) - (uuid "351f5f05-8bc3-4b53-9daf-3207bd71876b") - ) - (pad "1" thru_hole circle - (at 1.26 -18.14 180) - (size 1.524 1.524) - (drill 0.889) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (uuid "6a16c3b2-8d4e-4efe-a84e-dbc418c7fe79") - ) - (pad "2" smd roundrect - (at 0.835 -15.58) - (size 2.75 2) - (layers "F.Cu" "F.Mask" "F.Paste") - (roundrect_rratio 0.25) - (solder_mask_margin 0.0508) - (thermal_bridge_angle 45) - (uuid "cfdee4aa-d600-484f-9a5c-2062a00bde1d") - ) - (pad "2" thru_hole circle - (at 1.26 -15.6 180) - (size 1.524 1.524) - (drill 0.889) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (uuid "69193d02-4e31-4519-a90d-949c3f48e92c") - ) - (pad "3" smd roundrect - (at 0.835 -13.04) - (size 2.75 2) - (layers "F.Cu" "F.Mask" "F.Paste") - (roundrect_rratio 0.25) - (solder_mask_margin 0.0508) - (thermal_bridge_angle 45) - (uuid "52a69e1c-edab-4079-a491-6bcb12907f61") - ) - (pad "3" thru_hole circle - (at 1.26 -13.06 180) - (size 1.524 1.524) - (drill 0.889) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (uuid "a3aed707-7e8b-4b1b-ba96-06cfb9154fcb") - ) - (pad "4" smd roundrect - (at 0.835 -10.5) - (size 2.75 2) - (layers "F.Cu" "F.Mask" "F.Paste") - (roundrect_rratio 0.25) - (solder_mask_margin 0.0508) - (thermal_bridge_angle 45) - (uuid "1e864c46-432c-460c-af69-13a1c9d0fd2f") - ) - (pad "4" thru_hole circle - (at 1.26 -10.52 180) - (size 1.524 1.524) - (drill 0.889) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (uuid "eee65312-1942-42a1-a13a-2a28a114ec95") - ) - (pad "5" smd roundrect - (at 0.835 -7.96) - (size 2.75 2) - (layers "F.Cu" "F.Mask" "F.Paste") - (roundrect_rratio 0.25) - (solder_mask_margin 0.0508) - (thermal_bridge_angle 45) - (uuid "da854e17-c3b3-4a83-9d47-a379e4d7efa5") - ) - (pad "5" thru_hole circle - (at 1.26 -7.98 180) - (size 1.524 1.524) - (drill 0.889) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (uuid "febdd29f-f361-4b8e-b2b5-7502d3e5fdea") - ) - (pad "6" smd roundrect - (at 0.835 -5.42) - (size 2.75 2) - (layers "F.Cu" "F.Mask" "F.Paste") - (roundrect_rratio 0.25) - (solder_mask_margin 0.0508) - (thermal_bridge_angle 45) - (uuid "3fde7f90-983d-44c1-939e-47d36175373f") - ) - (pad "6" thru_hole circle - (at 1.26 -5.44 180) - (size 1.524 1.524) - (drill 0.889) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (uuid "323ef0a5-3407-4ac3-b76f-8ac19e044d1e") - ) - (pad "7" smd roundrect - (at 0.835 -2.88) - (size 2.75 2) - (layers "F.Cu" "F.Mask" "F.Paste") - (roundrect_rratio 0.25) - (solder_mask_margin 0.0508) - (thermal_bridge_angle 45) - (uuid "ebfd6bef-ea17-4635-877b-58b57c784dec") - ) - (pad "7" thru_hole circle - (at 1.26 -2.9 180) - (size 1.524 1.524) - (drill 0.889) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (uuid "2b179783-65b0-4d7c-850b-74c9fa3a7a64") - ) - (pad "8" thru_hole circle - (at 16.5 -2.9) - (size 1.524 1.524) - (drill 0.889) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (uuid "5cbc8aa6-fdfd-49e6-b018-da1d4ff342aa") - ) - (pad "8" smd roundrect - (at 17 -2.88) - (size 2.75 2) - (layers "F.Cu" "F.Mask" "F.Paste") - (roundrect_rratio 0.25) - (solder_mask_margin 0.0508) - (thermal_bridge_angle 45) - (uuid "19eb14d0-5713-47b7-86f2-4bccede8ba54") - ) - (pad "9" thru_hole circle - (at 16.5 -5.44) - (size 1.524 1.524) - (drill 0.889) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (uuid "e7f197b5-1fc8-47f6-9f49-60ffd6fa2335") - ) - (pad "9" smd roundrect - (at 17 -5.42) - (size 2.75 2) - (layers "F.Cu" "F.Mask" "F.Paste") - (roundrect_rratio 0.25) - (solder_mask_margin 0.0508) - (thermal_bridge_angle 45) - (uuid "4c3b83bc-a000-4a70-887c-6b775bc40ee1") - ) - (pad "10" thru_hole circle - (at 16.5 -7.98) - (size 1.524 1.524) - (drill 0.889) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (uuid "4df7fd17-71d5-4f8f-a3f2-68c6537a767f") - ) - (pad "10" smd roundrect - (at 17 -7.96) - (size 2.75 2) - (layers "F.Cu" "F.Mask" "F.Paste") - (roundrect_rratio 0.25) - (solder_mask_margin 0.0508) - (thermal_bridge_angle 45) - (uuid "223d5c33-d2a3-4398-8d3f-544bd6345a86") - ) - (pad "11" thru_hole circle - (at 16.5 -10.52) - (size 1.524 1.524) - (drill 0.889) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (uuid "dad67976-a604-485a-bb37-2d67ea771b2c") - ) - (pad "11" smd roundrect - (at 17 -10.5) - (size 2.75 2) - (layers "F.Cu" "F.Mask" "F.Paste") - (roundrect_rratio 0.25) - (solder_mask_margin 0.0508) - (thermal_bridge_angle 45) - (uuid "1f04f1d2-ce82-4256-b122-36f63f189efe") - ) - (pad "12" thru_hole circle - (at 16.5 -13.06) - (size 1.524 1.524) - (drill 0.889) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (uuid "c55d522b-9f8b-4fa4-afaa-880f3b1c9c5f") - ) - (pad "12" smd roundrect - (at 17 -13.04) - (size 2.75 2) - (layers "F.Cu" "F.Mask" "F.Paste") - (roundrect_rratio 0.25) - (solder_mask_margin 0.0508) - (thermal_bridge_angle 45) - (uuid "31818d88-bbc0-4c22-b4ed-d6884ef71ebb") - ) - (pad "13" thru_hole circle - (at 16.5 -15.6) - (size 1.524 1.524) - (drill 0.889) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (uuid "e46165bc-b289-44b0-b7f6-6759bba3d4b8") - ) - (pad "13" smd roundrect - (at 17 -15.58) - (size 2.75 2) - (layers "F.Cu" "F.Mask" "F.Paste") - (roundrect_rratio 0.25) - (solder_mask_margin 0.0508) - (thermal_bridge_angle 45) - (uuid "3fbf02f8-81da-4fba-bc95-9e47b9abaa05") - ) - (pad "14" thru_hole circle - (at 16.5 -18.14) - (size 1.524 1.524) - (drill 0.889) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (uuid "71ca3093-fd4e-46c3-9980-6d986d711719") - ) - (pad "14" smd roundrect - (at 17 -18.12) - (size 2.75 2) - (layers "F.Cu" "F.Mask" "F.Paste") - (roundrect_rratio 0.25) - (solder_mask_margin 0.0508) - (thermal_bridge_angle 45) - (uuid "ce7a6ff3-5c3a-4077-bf86-beedc24debb3") - ) - (pad "15" smd circle - (at 7.6166 -19.1415) - (size 1.7 1.7) - (layers "F.Cu" "F.Mask" "F.Paste") - (uuid "7273149b-9aea-4a23-9b4e-db1e0d6c76fc") - ) - (pad "16" smd circle - (at 10.1566 -19.1415) - (size 1.7 1.7) - (layers "F.Cu" "F.Mask" "F.Paste") - (uuid "0aef11c3-14ad-4cb5-9b05-95a892988ce8") - ) - (pad "17" smd circle - (at 7.6166 -16.6015) - (size 1.7 1.7) - (layers "F.Cu" "F.Mask" "F.Paste") - (uuid "158a5cbb-af86-4fa6-8d58-6831485085c5") - ) - (pad "18" smd circle - (at 10.1566 -16.6015) - (size 1.7 1.7) - (layers "F.Cu" "F.Mask" "F.Paste") - (uuid "3b7bcd8a-c97c-46f6-9faa-4e525d03d6e8") - ) - (pad "19" smd circle - (at 7.6166 -14.0615) - (size 1.7 1.7) - (layers "F.Cu" "F.Mask" "F.Paste") - (uuid "ad4ba963-211d-4878-a4cb-255a615c14de") - ) - (pad "20" smd circle - (at 10.1566 -14.0615) - (size 1.7 1.7) - (layers "F.Cu" "F.Mask" "F.Paste") - (uuid "8c7e088d-0846-4d7d-9143-5ce3fdb0c4fd") - ) - (pad "21" smd circle - (at 7.6166 -11.5215) - (size 1.7 1.7) - (layers "F.Cu" "F.Mask" "F.Paste") - (uuid "c6bbe198-c8c7-4b83-a36e-6a6fdeb3b94f") - ) - (pad "22" smd circle - (at 10.064 -11.5783) - (size 1.7 1.7) - (layers "F.Cu" "F.Mask" "F.Paste") - (uuid "4f1e574b-3b71-4a23-b765-d779726fd3c6") - ) - (pad "23" smd roundrect - (at 7.3086 -4.9683 270) - (size 2.5 1.1) - (layers "F.Cu" "F.Mask" "F.Paste") - (roundrect_rratio 0.25) - (thermal_bridge_angle 45) - (uuid "08d345bf-1b32-499f-94bb-44332eb5115d") - ) - (pad "24" smd roundrect - (at 9.8486 -4.9683 270) - (size 2.5 1.1) - (layers "F.Cu" "F.Mask" "F.Paste") - (roundrect_rratio 0.25) - (thermal_bridge_angle 45) - (uuid "8b3ca1bb-eee0-4c3d-8f3b-eefea4a68bbb") - ) - (pad "25" smd roundrect - (at 9.949 -8.412 270) - (size 3.1 1.9) - (layers "F.Cu" "F.Mask" "F.Paste") - (roundrect_rratio 0.25) - (thermal_bridge_angle 45) - (uuid "45570478-e499-45ab-bb97-539cabc4e177") - ) - (embedded_fonts no) -) diff --git a/hardware/c_its-companion/library/XIAO-ESP32-C5-SMD.kicad_mod b/hardware/c_its-companion/library/XIAO-ESP32-C5-SMD.kicad_mod deleted file mode 100644 index f11969b..0000000 --- a/hardware/c_its-companion/library/XIAO-ESP32-C5-SMD.kicad_mod +++ /dev/null @@ -1,445 +0,0 @@ -(footprint "XIAO-ESP32-C5-SMD" - (version 20241229) - (generator "pcbnew") - (generator_version "9.0") - (layer "F.Cu") - (property "Reference" "REF**" - (at 7.312 -21.336 0) - (layer "F.SilkS") - (uuid "a9f5f5dd-597c-45dd-b31d-a35c3963eed2") - (effects - (font - (size 0.78232 0.78232) - (thickness 0.10668) - ) - (justify left bottom) - ) - ) - (property "Value" "Val**" - (at 8.89 -10.795 0) - (layer "F.Fab") - (uuid "2d66aca7-e0b3-44df-838e-be285890792c") - (effects - (font - (size 0.536448 0.536448) - (thickness 0.073152) - ) - ) - ) - (property "Datasheet" "" - (at 0 0 0) - (unlocked yes) - (layer "F.Fab") - (hide yes) - (uuid "5173b428-b87b-497c-9fd1-0d444c2ced85") - (effects - (font - (size 1.27 1.27) - (thickness 0.15) - ) - ) - ) - (property "Description" "" - (at 0 0 0) - (unlocked yes) - (layer "F.Fab") - (hide yes) - (uuid "ea7181c4-fdca-44f1-ad15-d0627f50a68e") - (effects - (font - (size 1.27 1.27) - (thickness 0.15) - ) - ) - ) - (fp_line - (start 0 -1.987) - (end 0 -19.132) - (stroke - (width 0.1) - (type solid) - ) - (layer "F.SilkS") - (uuid "df0486b4-d04f-4201-a301-beede6e15862") - ) - (fp_line - (start 1.905 -0.082) - (end 15.875 -0.082) - (stroke - (width 0.1) - (type solid) - ) - (layer "F.SilkS") - (uuid "f54abd8d-62ed-4b05-8e37-f29acdadc0f8") - ) - (fp_line - (start 4.595 -21.037) - (end 4.598728 -22.047272) - (stroke - (width 0.127) - (type solid) - ) - (layer "F.SilkS") - (uuid "fead6daa-b9f4-4bd1-a131-b5d2cd3184de") - ) - (fp_line - (start 5.098728 -22.547) - (end 13.094 -22.547) - (stroke - (width 0.127) - (type solid) - ) - (layer "F.SilkS") - (uuid "b90ae92d-7c1a-4689-bf64-c3528a3ea3ee") - ) - (fp_line - (start 13.594 -22.047) - (end 13.594 -21.037) - (stroke - (width 0.127) - (type solid) - ) - (layer "F.SilkS") - (uuid "b540fbcc-8e06-44d7-95f6-8b142e4c90fb") - ) - (fp_line - (start 15.875 -21.037) - (end 1.905 -21.037) - (stroke - (width 0.1) - (type solid) - ) - (layer "F.SilkS") - (uuid "2b80542c-5088-4f89-ae32-3400cf894ca1") - ) - (fp_line - (start 17.78 -1.987) - (end 17.78 -19.132) - (stroke - (width 0.1) - (type solid) - ) - (layer "F.SilkS") - (uuid "4cd8add0-8a8c-468d-ba6f-b86787c288af") - ) - (fp_arc - (start 0 -19.136) - (mid 0.557962 -20.483038) - (end 1.905 -21.041) - (stroke - (width 0.1) - (type solid) - ) - (layer "F.SilkS") - (uuid "4d9bf7a5-4ab4-48bb-b8ac-0a5ce4523642") - ) - (fp_arc - (start 1.905 -0.082) - (mid 0.557962 -0.639962) - (end 0 -1.987) - (stroke - (width 0.1) - (type solid) - ) - (layer "F.SilkS") - (uuid "d09661c8-1ad3-40e9-8323-9dabc8f3f98b") - ) - (fp_arc - (start 4.598728 -22.047272) - (mid 4.745276 -22.400644) - (end 5.098728 -22.547) - (stroke - (width 0.127) - (type default) - ) - (layer "F.SilkS") - (uuid "7a58f637-14d7-4804-b127-f1d029b5d1e6") - ) - (fp_arc - (start 13.094 -22.547) - (mid 13.447553 -22.400553) - (end 13.594 -22.047) - (stroke - (width 0.127) - (type default) - ) - (layer "F.SilkS") - (uuid "d0bc8663-987f-4e2e-b464-096a547b822f") - ) - (fp_arc - (start 15.875 -21.037) - (mid 17.222038 -20.479038) - (end 17.78 -19.132) - (stroke - (width 0.1) - (type solid) - ) - (layer "F.SilkS") - (uuid "77004ea5-53a4-40ab-b35c-7bdd22107e34") - ) - (fp_arc - (start 17.78 -1.987) - (mid 17.222038 -0.639962) - (end 15.875 -0.082) - (stroke - (width 0.1) - (type solid) - ) - (layer "F.SilkS") - (uuid "94189dc1-14b5-4f17-b9d3-0163ed99e583") - ) - (fp_circle - (center -0.21 -20.621) - (end -0.21 -20.875) - (stroke - (width 0.5) - (type solid) - ) - (fill yes) - (layer "F.SilkS") - (uuid "dc606cc5-10bc-4635-81d1-fa27b1e6b4e2") - ) - (fp_circle - (center 1.064 -19.904) - (end 1.064 -20.158) - (stroke - (width 0.5) - (type solid) - ) - (fill yes) - (layer "F.SilkS") - (uuid "2b5e2829-6d01-441f-9983-fc4a273ff483") - ) - (fp_rect - (start 17.8 0) - (end 0 -21) - (stroke - (width 0.05) - (type default) - ) - (fill no) - (layer "F.CrtYd") - (uuid "e428eb56-00a2-4249-bb91-d2e5823b2899") - ) - (fp_rect - (start 0 -21) - (end 17.8 0) - (stroke - (width 0.1) - (type default) - ) - (fill no) - (layer "F.Fab") - (uuid "2133d927-559d-4615-ab92-732772c02d94") - ) - (fp_circle - (center 1.084 -19.9) - (end 1.084 -20.154) - (stroke - (width 0.5) - (type solid) - ) - (fill yes) - (layer "F.Fab") - (uuid "50e04a65-8ff2-4d1f-be98-2db48101e90a") - ) - (pad "1" smd roundrect - (at 0.835 -18.12) - (size 2.75 2) - (layers "F.Cu" "F.Mask" "F.Paste") - (roundrect_rratio 0.25) - (solder_mask_margin 0.0508) - (thermal_bridge_angle 45) - (uuid "c68f6b12-dcf5-46b1-b159-2eef9023b0ac") - ) - (pad "2" smd roundrect - (at 0.835 -15.58) - (size 2.75 2) - (layers "F.Cu" "F.Mask" "F.Paste") - (roundrect_rratio 0.25) - (solder_mask_margin 0.0508) - (thermal_bridge_angle 45) - (uuid "525b09fc-9099-4274-98c3-45f84d0591ab") - ) - (pad "3" smd roundrect - (at 0.835 -13.04) - (size 2.75 2) - (layers "F.Cu" "F.Mask" "F.Paste") - (roundrect_rratio 0.25) - (solder_mask_margin 0.0508) - (thermal_bridge_angle 45) - (uuid "99cc76a7-0a78-4868-871b-c214ecac5525") - ) - (pad "4" smd roundrect - (at 0.835 -10.5) - (size 2.75 2) - (layers "F.Cu" "F.Mask" "F.Paste") - (roundrect_rratio 0.25) - (solder_mask_margin 0.0508) - (thermal_bridge_angle 45) - (uuid "8038b67b-b3bf-4a3e-b790-40857963c957") - ) - (pad "5" smd roundrect - (at 0.835 -7.96) - (size 2.75 2) - (layers "F.Cu" "F.Mask" "F.Paste") - (roundrect_rratio 0.25) - (solder_mask_margin 0.0508) - (thermal_bridge_angle 45) - (uuid "84711cb2-d222-464e-bcd5-f76af75cc612") - ) - (pad "6" smd roundrect - (at 0.835 -5.42) - (size 2.75 2) - (layers "F.Cu" "F.Mask" "F.Paste") - (roundrect_rratio 0.25) - (solder_mask_margin 0.0508) - (thermal_bridge_angle 45) - (uuid "aabcfc3b-fa72-4e48-95d1-d53474158cc0") - ) - (pad "7" smd roundrect - (at 0.835 -2.88) - (size 2.75 2) - (layers "F.Cu" "F.Mask" "F.Paste") - (roundrect_rratio 0.25) - (solder_mask_margin 0.0508) - (thermal_bridge_angle 45) - (uuid "3e086061-1f3f-4b1e-9354-920126d40249") - ) - (pad "8" smd roundrect - (at 17 -2.88) - (size 2.75 2) - (layers "F.Cu" "F.Mask" "F.Paste") - (roundrect_rratio 0.25) - (solder_mask_margin 0.0508) - (thermal_bridge_angle 45) - (uuid "974a7e29-b5d3-475c-b481-2bc14f5b3495") - ) - (pad "9" smd roundrect - (at 17 -5.42) - (size 2.75 2) - (layers "F.Cu" "F.Mask" "F.Paste") - (roundrect_rratio 0.25) - (solder_mask_margin 0.0508) - (thermal_bridge_angle 45) - (uuid "a553cc0b-22bc-49aa-9fb7-680c812e8abd") - ) - (pad "10" smd roundrect - (at 17 -7.96) - (size 2.75 2) - (layers "F.Cu" "F.Mask" "F.Paste") - (roundrect_rratio 0.25) - (solder_mask_margin 0.0508) - (thermal_bridge_angle 45) - (uuid "b650936d-c436-4d93-abb7-7957add5cfb1") - ) - (pad "11" smd roundrect - (at 17 -10.5) - (size 2.75 2) - (layers "F.Cu" "F.Mask" "F.Paste") - (roundrect_rratio 0.25) - (solder_mask_margin 0.0508) - (thermal_bridge_angle 45) - (uuid "177728f1-7b02-41a6-9de4-bdaee546f6d9") - ) - (pad "12" smd roundrect - (at 17 -13.04) - (size 2.75 2) - (layers "F.Cu" "F.Mask" "F.Paste") - (roundrect_rratio 0.25) - (solder_mask_margin 0.0508) - (thermal_bridge_angle 45) - (uuid "eb6539ef-4d84-4ae5-bc4e-237dae21b9ef") - ) - (pad "13" smd roundrect - (at 17 -15.58) - (size 2.75 2) - (layers "F.Cu" "F.Mask" "F.Paste") - (roundrect_rratio 0.25) - (solder_mask_margin 0.0508) - (thermal_bridge_angle 45) - (uuid "c8744fbe-93c9-4c54-84bc-435357de679f") - ) - (pad "14" smd roundrect - (at 17 -18.12) - (size 2.75 2) - (layers "F.Cu" "F.Mask" "F.Paste") - (roundrect_rratio 0.25) - (solder_mask_margin 0.0508) - (thermal_bridge_angle 45) - (uuid "fd579d63-bbef-4609-9252-aad3f944a314") - ) - (pad "15" smd circle - (at 7.6166 -19.1415) - (size 1.7 1.7) - (layers "F.Cu" "F.Mask" "F.Paste") - (uuid "ad890579-1e55-4b71-9d59-080a59598896") - ) - (pad "16" smd circle - (at 10.1566 -19.1415) - (size 1.7 1.7) - (layers "F.Cu" "F.Mask" "F.Paste") - (uuid "25d6fdae-01ac-4ca4-8702-55badc8bcbc8") - ) - (pad "17" smd circle - (at 7.6166 -16.6015) - (size 1.7 1.7) - (layers "F.Cu" "F.Mask" "F.Paste") - (uuid "e73ae295-736f-4acf-8ee1-0c120ebcebea") - ) - (pad "18" smd circle - (at 10.1566 -16.6015) - (size 1.7 1.7) - (layers "F.Cu" "F.Mask" "F.Paste") - (uuid "7adfba87-f861-42a5-bb73-c3f9fac53180") - ) - (pad "19" smd circle - (at 7.6166 -14.0615) - (size 1.7 1.7) - (layers "F.Cu" "F.Mask" "F.Paste") - (uuid "619dc2a5-519d-48ac-9c78-8c438df2a14d") - ) - (pad "20" smd circle - (at 10.1566 -14.0615) - (size 1.7 1.7) - (layers "F.Cu" "F.Mask" "F.Paste") - (uuid "aa8b72d0-17bf-47d4-94b1-df9199638a29") - ) - (pad "21" smd circle - (at 7.6166 -11.5215) - (size 1.7 1.7) - (layers "F.Cu" "F.Mask" "F.Paste") - (uuid "8539b5cc-db2c-4fa4-9ead-b842a1885293") - ) - (pad "22" smd circle - (at 10.064 -11.5783) - (size 1.7 1.7) - (layers "F.Cu" "F.Mask" "F.Paste") - (uuid "313edcfe-ad25-4ea7-b786-d8290dfb479a") - ) - (pad "23" smd roundrect - (at 7.3086 -4.9683 270) - (size 2.5 1.1) - (layers "F.Cu" "F.Mask" "F.Paste") - (roundrect_rratio 0.25) - (thermal_bridge_angle 45) - (uuid "144d3c3d-6207-433c-9e61-4f75722af865") - ) - (pad "24" smd roundrect - (at 9.8486 -4.9683 270) - (size 2.5 1.1) - (layers "F.Cu" "F.Mask" "F.Paste") - (roundrect_rratio 0.25) - (thermal_bridge_angle 45) - (uuid "3780a4ef-348c-4241-b04b-2cb4f7127fa2") - ) - (pad "25" smd roundrect - (at 9.949 -8.412 270) - (size 3.1 1.9) - (layers "F.Cu" "F.Mask" "F.Paste") - (roundrect_rratio 0.25) - (thermal_bridge_angle 45) - (uuid "00be3957-5a21-4898-8292-59f5f447623f") - ) - (embedded_fonts no) -) diff --git a/hardware/c_its-companion/production/C-ITS_Companion_v0.1.zip b/hardware/c_its-companion/production/C-ITS_Companion_v0.1.zip deleted file mode 100644 index a3fdd60..0000000 Binary files a/hardware/c_its-companion/production/C-ITS_Companion_v0.1.zip and /dev/null differ diff --git a/hardware/c_its-companion/sym-lib-table b/hardware/c_its-companion/sym-lib-table deleted file mode 100644 index d405e49..0000000 --- a/hardware/c_its-companion/sym-lib-table +++ /dev/null @@ -1,4 +0,0 @@ -(sym_lib_table - (version 7) - (lib (name "Seeed_Studio_XIAO_Series") (type "KiCad") (uri "${KIPRJMOD}/library/Seeed_Studio_XIAO_Series.kicad_sym") (options "") (descr "")) -) diff --git a/run-smartphone.sh b/run-smartphone.sh deleted file mode 100755 index ee5170d..0000000 --- a/run-smartphone.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh - -## Builds common config for smartphone connected device -## -> only receive CAM and DENMs via UART (TODO: and BLE) - -cargo run --release --no-default-features -F esp,cam,denm,uart diff --git a/run-standalone-cam.sh b/run-standalone-cam.sh deleted file mode 100755 index 9bfafbe..0000000 --- a/run-standalone-cam.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh - -## Builds common config for standalone device with automatic CAM transmission -## -> enable SPAT/ GLOSA with GNSS and a screen + CAM transmission - -cargo run --release -F cam_tx diff --git a/run-standalone-no_cam.sh b/run-standalone-no_cam.sh deleted file mode 100755 index e61d25c..0000000 --- a/run-standalone-no_cam.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh - -## Builds common config for standalone device -## -> enable SPAT/ GLOSA with GNSS and a screen - -cargo run --release diff --git a/rustfmt.toml b/rustfmt.toml deleted file mode 100644 index 4317306..0000000 --- a/rustfmt.toml +++ /dev/null @@ -1,6 +0,0 @@ -unstable_features = true -format_code_in_doc_comments = true - -group_imports = "StdExternalCrate" -imports_granularity = "Module" -imports_layout = "HorizontalVertical" diff --git a/src/applogic/cam.rs b/src/applogic/cam.rs deleted file mode 100644 index cef3a91..0000000 --- a/src/applogic/cam.rs +++ /dev/null @@ -1,65 +0,0 @@ -//! C-ITS CAM Evaluation - -use c_its_parser::standards::cam_1_4_1::cam_pdu_descriptions::{self, HighFrequencyContainer}; -use log::info; - -pub fn handle_cam(etsi: &cam_pdu_descriptions::CAM) { - // only POC output - match &etsi.cam.cam_parameters.high_frequency_container { - HighFrequencyContainer::basicVehicleContainerHighFrequency(obu) => { - let station_id = etsi.header.station_id.0; - let lat_deg = etsi - .cam - .cam_parameters - .basic_container - .reference_position - .latitude - .as_deg(); - let lon_deg = etsi - .cam - .cam_parameters - .basic_container - .reference_position - .longitude - .as_deg(); - - if obu.speed.speed_value.is_unavailable() { - info!( - "Got CAM from {station_id} at {lat_deg:.3}°N, {lon_deg:.3}°E, speed unavailable", - ); - } else { - info!( - "Got CAM from {station_id} at {lat_deg:.3}°N, {lon_deg:.3}°E, speed {:.2} km/h", - obu.speed.speed_value.as_kmh() - ); - } - } - HighFrequencyContainer::rsuContainerHighFrequency(rsu) => { - info!( - "Got RSU from {} at {:.3}°N, {:.3}°E, {} protected zones", - etsi.header.station_id.0, - etsi.cam - .cam_parameters - .basic_container - .reference_position - .latitude - .as_deg(), - etsi.cam - .cam_parameters - .basic_container - .reference_position - .longitude - .as_deg(), - rsu.protected_communication_zones_rsu - .as_ref() - .map(|d| d.0.len()) - .unwrap_or_default() - ); - } - - _ => { - // enum is non-exhaustive, so we need a default case - // but this should never be reached in pactical applications - } - } -} diff --git a/src/applogic/cam_tx.rs b/src/applogic/cam_tx.rs deleted file mode 100644 index 850ae40..0000000 --- a/src/applogic/cam_tx.rs +++ /dev/null @@ -1,465 +0,0 @@ -//! C-ITS CAM Transmission - -use alloc::vec::Vec; - -use c_its_parser::gn as geonetworking; -use c_its_parser::standards::cam_1_4_1::cam_pdu_descriptions; -use c_its_parser::standards::cdd_1_3_1_1::its_container; -use c_its_parser::standards::extensions; - -const PH_MAX_LENGHT_M: f32 = 500.; -const PH_MAX_ITEMS: usize = 23; -const PH_MIN_DIST_M: f32 = 20.; - -/// Stand-alone CAM generator -/// -/// Generates CAM messages from time and [`PosVel`] updates -/// -/// # Send a message -/// ``` -/// use esp32_cits_core::tx::GnItsPayload as _; -/// -/// let (mut seq_no, mac_bytes) = { -/// // unwrap is fine since [`esp_hal::efuse::MacAddress`] is just an `[u8; 6]` -/// let mac_bytes = mac.as_bytes().try_into().unwrap(); -/// -/// (0, mac_bytes) -/// }; -/// -/// let mut cam = { -/// let station_id = make_station_id(mac); -/// info!("V2X Station ID: {station_id}"); -/// -/// applogic::cam_tx::CamState::new( -/// station_id, -/// OWN_STATION_TYPE, -/// OWN_VEHICLE_LENGTH, -/// OWN_VEHICLE_WIDTH, -/// ) -/// }; -/// -/// cam.update(time, fix.clone().into()); -/// match cam.encode_packet(mac_bytes, pos_vel, time, GN_IS_MOBILE, &mut seq_no) { -/// Ok(data) => { -/// if let Err(err) = -/// radio::send_80211_bcast_frame(&mut wlan_iface, &mac_bytes.clone(), &data) -/// { -/// warn!("Failed to send 802.11 frame: {err}"); -/// } -/// } -/// Err(err) => warn!("Failed to create CAM: {err}"), -/// } -/// ``` -#[derive(Debug)] -pub struct CamState { - station_id: u32, - station_type: its_container::StationType, - - vehicle_length_dm: u16, // vehicle length is in 10cm steps - vehicle_width_dm: u8, // vehicle width is in 10cm steps - - time: chrono::DateTime, - pos_state: esp32_cits_core::PosVel, - - /// database for path history, oldest item at the back of the vector - path_history: Vec, -} - -#[derive(Debug, Clone, Copy, PartialEq)] -struct PathPoint { - pos: geo_types::Point, - time: chrono::DateTime, - /// distance to previous point. Ignore on last point! - dist_m: f32, -} - -impl PathPoint { - fn new_from_pos(pos: &esp32_cits_core::PosVel, time: chrono::DateTime) -> Self { - Self { - pos: pos.position, - time, - dist_m: 0., - } - } - - fn new_from_pos_with_dist( - pos: &esp32_cits_core::PosVel, - time: chrono::DateTime, - dist_m: f32, - ) -> Self { - Self { - pos: pos.position, - time, - dist_m, - } - } -} - -impl CamState { - pub fn new( - station_id: u32, - station_type: c_its_parser::standards::extensions::ItsStationType, - vehicle_length_dm: u16, - vehicle_width_dm: u8, - ) -> Self { - Self { - station_id, - station_type: station_type.into(), - vehicle_length_dm, - vehicle_width_dm, - time: chrono::DateTime::::default(), - pos_state: esp32_cits_core::PosVel::default(), - path_history: Vec::with_capacity(PH_MAX_ITEMS + 1), - } - } - - pub fn update(&mut self, time: chrono::DateTime, pos: esp32_cits_core::PosVel) { - self.time = time; - self.pos_state = pos; - - // Update path history - Self::update_ph(&mut self.path_history, time, &self.pos_state); - } - - // this is a function, not a method for easier testing - fn update_ph( - path_history: &mut Vec, - time: chrono::DateTime, - pos: &esp32_cits_core::PosVel, - ) { - // Update path history - if path_history.is_empty() { - // prime with current position if empty - path_history.push(PathPoint::new_from_pos(pos, time)); - } else { - // unwrap is fine since we checked for non-empty before - let prev = path_history.first().unwrap(); - - // only add a point, if we moved more than PH_MIN_DIST_M - #[allow(clippy::cast_precision_loss, clippy::cast_possible_truncation)] - let dist = crate::geo_alg::haversine_dist(&prev.pos, &pos.position) as f32; - if dist > PH_MIN_DIST_M { - // new items shall be at the front of the vector - path_history.insert(0, PathPoint::new_from_pos_with_dist(pos, time, dist)); - } - } - - // check length (PH_MAX_LENGHT_M and PH_MAX_ITEMS points max) - if path_history.len() > PH_MAX_ITEMS { - let _ = path_history.pop(); - } - - let (_, cutoff_idx) = - path_history - .iter() - .enumerate() - .fold((0., None), |(len, cutoff_idx), (idx, item)| { - if cutoff_idx.is_none() { - let new_len = len + item.dist_m; - let new_cutoff_idx = if len > PH_MAX_LENGHT_M { - Some(idx) - } else { - None - }; - - (new_len, new_cutoff_idx) - } else { - (len, cutoff_idx) - } - }); - if let Some(idx) = cutoff_idx { - path_history.drain(idx..); - } - } - - fn make_ph(&self) -> Vec { - let mut ph = alloc::vec![]; - - self.path_history.iter().fold( - PathPoint::new_from_pos(&self.pos_state, self.time), - |prev_point, pt| { - // calculate delta position and append to `ph` - - let delta_time = pt.time - prev_point.time; - let delta_lat = pt.pos.y() - prev_point.pos.y(); - let delta_lon = pt.pos.x() - prev_point.pos.x(); - - // delta time is in 1/100 second / 10 ms steps - let path_delta_time = its_container::PathDeltaTime( - (delta_time.num_milliseconds().abs() / 10) - .min(65_535) // clamp to max value - .into(), - ); - let delta_latitude = its_container::DeltaLatitude::from_deg(delta_lat); - let delta_longitude = its_container::DeltaLongitude::from_deg(delta_lon); - let delta_altitude = its_container::DeltaAltitude::unavailable(); - - let ppoint = its_container::PathPoint::new( - its_container::DeltaReferencePosition::new( - delta_latitude, - delta_longitude, - delta_altitude, - ), - Some(path_delta_time), - ); - - ph.push(ppoint); - - *pt - }, - ); - - ph - } - - #[allow(clippy::too_many_lines)] - fn make_cam(&self) -> Result { - let header = its_container::ItsPduHeader::new( - 2, - extensions::ItsMessageId::Cam.as_u8(), - its_container::StationID(self.station_id), - ); - - let generation_delta_time = { - let its_timestamp = c_its_parser::time_utils::TimestampIts::from(self.time); - - #[allow(clippy::cast_possible_truncation)] - let ts_mod = (its_timestamp.0 % 65_536) as u16; - - cam_pdu_descriptions::GenerationDeltaTime(ts_mod) - }; - - let heading = match self.pos_state.heading_deg { - Some(value) => its_container::Heading { - heading_value: its_container::HeadingValue::from_deg(value) - .map_err(|err| alloc::format!("Failed to make HeadingValue: {err}"))?, - heading_confidence: its_container::HeadingConfidence(127), // unavailable for now - }, - None => its_container::Heading { - heading_value: its_container::HeadingValue(0), - heading_confidence: its_container::HeadingConfidence(127), // unavailable for now - }, - }; - let speed = match self.pos_state.speed_mps { - Some(value) => its_container::Speed { - speed_value: its_container::SpeedValue::from_mps(value) - .map_err(|err| alloc::format!("Failed to make SpeedValue: {err}"))?, - speed_confidence: its_container::SpeedConfidence(127), // unavailable for now - }, - None => its_container::Speed { - speed_value: its_container::SpeedValue(0), - speed_confidence: its_container::SpeedConfidence(127), // unavailable for now - }, - }; - let reference_position = its_container::ReferencePosition { - latitude: its_container::Latitude::from_deg(self.pos_state.position.y()), - longitude: its_container::Longitude::from_deg(self.pos_state.position.x()), - position_confidence_ellipse: its_container::PosConfidenceEllipse { - semi_major_confidence: its_container::SemiAxisLength(4095), // unavailable for now - semi_minor_confidence: its_container::SemiAxisLength(4095), // unavailable for now - semi_major_orientation: its_container::HeadingValue::unavailable(), - }, - altitude: its_container::Altitude { - altitude_value: its_container::AltitudeValue(800_001), // unavailable for now - altitude_confidence: its_container::AltitudeConfidence::unavailable, - }, - }; - - let basic_container = cam_pdu_descriptions::BasicContainer::new( - self.station_type.clone(), - reference_position, - ); - let high_frequency_container = - cam_pdu_descriptions::HighFrequencyContainer::basicVehicleContainerHighFrequency( - cam_pdu_descriptions::BasicVehicleContainerHighFrequency { - heading, - speed, - drive_direction: its_container::DriveDirection::unavailable, - vehicle_length: its_container::VehicleLength { - vehicle_length_value: its_container::VehicleLengthValue( - self.vehicle_length_dm, - ), - vehicle_length_confidence_indication: - its_container::VehicleLengthConfidenceIndication::unavailable, - }, - vehicle_width: its_container::VehicleWidth(self.vehicle_width_dm), - longitudinal_acceleration: its_container::LongitudinalAcceleration { - longitudinal_acceleration_value: - its_container::LongitudinalAccelerationValue::unavailable(), - longitudinal_acceleration_confidence: its_container::AccelerationConfidence( - 102, // unavailable - ), - }, - curvature: its_container::Curvature { - curvature_value: its_container::CurvatureValue::unavailable(), - curvature_confidence: its_container::CurvatureConfidence::unavailable, - }, - curvature_calculation_mode: - its_container::CurvatureCalculationMode::unavailable, - yaw_rate: its_container::YawRate { - yaw_rate_value: its_container::YawRateValue::unavailable(), - yaw_rate_confidence: its_container::YawRateConfidence::unavailable, - }, - acceleration_control: None, - lane_position: None, - steering_wheel_angle: None, - lateral_acceleration: None, - vertical_acceleration: None, - performance_class: None, - cen_dsrc_tolling_zone: None, - }, - ); - let low_frequency_container = - cam_pdu_descriptions::LowFrequencyContainer::basicVehicleContainerLowFrequency( - cam_pdu_descriptions::BasicVehicleContainerLowFrequency { - vehicle_role: its_container::VehicleRole::default, - exterior_lights: its_container::ExteriorLights::default(), - path_history: its_container::PathHistory(self.make_ph()), - }, - ); - - let cam_parameters = cam_pdu_descriptions::CamParameters::new( - basic_container, - high_frequency_container, - Some(low_frequency_container), - None, - ); - - Ok(cam_pdu_descriptions::CAM::new( - header, - cam_pdu_descriptions::CoopAwareness::new(generation_delta_time, cam_parameters), - )) - } -} - -impl esp32_cits_core::tx::GnItsPayload for CamState { - fn make_eh( - &self, - address: [u8; 6], - own_position: &esp32_cits_core::PosVel, - time: chrono::DateTime, - _seq_no: &mut u16, - ) -> Result< - ( - geonetworking::en302636_4_1::ExtendedHeader, - Option, - u8, - ), - alloc::string::String, - > { - let station_type = geonetworking::en302636_4_1::StationType::try_from(self.station_type.0) - .unwrap_or_default(); - - // CAM always uses SHB, hop-limit 1 - Ok(( - esp32_cits_core::tx::gn::make_shb_eh(address, station_type, own_position, time)?, - None, - 1, - )) - } - - fn make_payload( - &self, - ) -> Result<(Vec, c_its_parser::standards::extensions::ItsMessageId), alloc::string::String> - { - let msg = self.make_cam()?; - let uper = msg.encode_to_uper()?; - Ok((uper, c_its_parser::standards::extensions::ItsMessageId::Cam)) - } -} - -#[cfg(test)] -mod tests { - use alloc::vec; - - use super::*; - use crate::init_test_env_logger; - - fn posstate_from_pos(position: geo_types::Point) -> esp32_cits_core::PosVel { - esp32_cits_core::PosVel { - position, - heading_deg: None, - speed_mps: None, - } - } - - #[test] - fn cam_path_history_update() { - init_test_env_logger(); - - let time = chrono::DateTime::from_timestamp(0, 0).unwrap(); - let p1 = geo_types::Point::new(10., 53.5); - let p2 = geo_types::Point::new(10., 53.5 + 0.000045); // ~5m further (< PH_MIN_DIST_M) - let p3 = geo_types::Point::new(10., 53.5 + 0.00027); // ~30m further (> PH_MIN_DIST_M) - - let ps1 = posstate_from_pos(p1); - let pp1 = PathPoint::new_from_pos(&ps1, time); - let ps2 = posstate_from_pos(p2); - let pp2 = PathPoint::new_from_pos(&ps2, time); - let ps3 = posstate_from_pos(p3); - let pp3 = PathPoint::new_from_pos_with_dist(&ps3, time, 30.02267); - - let mut path_history: Vec = vec![]; - - // add first point, expect one point in PH - CamState::update_ph(&mut path_history, time, &posstate_from_pos(p1)); - assert_eq!(1, path_history.len()); - assert_eq!(&pp1, path_history.first().unwrap()); - - // add insignificant point, expect still one point in PH - CamState::update_ph(&mut path_history, time, &posstate_from_pos(p2)); - assert_eq!(1, path_history.len()); - assert_eq!(&pp1, path_history.first().unwrap()); - - // add significantly moved point, expect [pp3, pp1] vector - CamState::update_ph(&mut path_history, time, &posstate_from_pos(p3)); - assert_eq!(2, path_history.len()); - assert_eq!(&pp3, path_history.first().unwrap()); - assert_eq!(&pp1, path_history.last().unwrap()); - } - - #[test] - fn cam_path_history_max_len() { - init_test_env_logger(); - - let time = chrono::DateTime::from_timestamp(0, 0).unwrap(); - let p1 = geo_types::Point::new(10., 53.5); - let p2 = geo_types::Point::new(10., 53.5 + 0.00023); // at ~25m from p1 (> PH_MIN_DIST_M) - let p3 = geo_types::Point::new(10., 53.5 + 0.00445); // at ~495m from p1 (slightly less than PH_MAX_LENGHT_M) - let p4 = geo_types::Point::new(10., 53.5 + 0.00477); // at ~530m from p1 (slightly more than PH_MAX_LENGHT_M) - - let ps1 = posstate_from_pos(p1); - let pp1 = PathPoint::new_from_pos(&ps1, time); - let ps2 = posstate_from_pos(p2); - let pp2 = PathPoint::new_from_pos(&ps2, time); - let ps3 = posstate_from_pos(p3); - let pp3 = PathPoint::new_from_pos(&ps3, time); - let ps4 = posstate_from_pos(p4); - let pp4 = PathPoint::new_from_pos(&ps4, time); - - let mut path_history: Vec = vec![]; - - // prime with p3, p4 (should give a length of ~470m) - CamState::update_ph(&mut path_history, time, &posstate_from_pos(p4)); - CamState::update_ph(&mut path_history, time, &posstate_from_pos(p3)); - assert_eq!(2, path_history.len()); - - // Add p2, should drop p4 from vector because of > PH_MAX_LENGHT_M - CamState::update_ph(&mut path_history, time, &posstate_from_pos(p2)); - assert_eq!(2, path_history.len()); - assert_eq!(p2, path_history.get(0).unwrap().pos); - assert_eq!(469.24323, path_history.get(0).unwrap().dist_m); - assert_eq!(p3, path_history.get(1).unwrap().pos); - assert_eq!(35.582424, path_history.get(1).unwrap().dist_m); - - // Add p1, should not drop anything from vector because still < PH_MAX_LENGHT_M - CamState::update_ph(&mut path_history, time, &posstate_from_pos(p1)); - assert_eq!(3, path_history.len()); - assert_eq!(p1, path_history.get(0).unwrap().pos); - assert_eq!(25.57487, path_history.get(0).unwrap().dist_m); - assert_eq!(p2, path_history.get(1).unwrap().pos); - assert_eq!(469.24323, path_history.get(1).unwrap().dist_m); - assert_eq!(p3, path_history.get(2).unwrap().pos); - assert_eq!(35.582424, path_history.get(2).unwrap().dist_m); - } -} diff --git a/src/applogic/denm.rs b/src/applogic/denm.rs deleted file mode 100644 index 9d46dbb..0000000 --- a/src/applogic/denm.rs +++ /dev/null @@ -1,44 +0,0 @@ -//! C-ITS DENM Evaluation - -use c_its_parser::standards::denm_2_2_1::denm_pdu_description; -use log::info; - -pub fn handle_denm(etsi: &denm_pdu_description::DENM) { - let mgmt = &etsi.denm.management; - - if mgmt.termination.is_some() { - return; - } - - if let (Some(sit), Some(loc)) = (&etsi.denm.situation, &etsi.denm.location) { - // let timestamp: chrono::DateTime = mgmt.reference_time.clone().into(); - let end_time = chrono::DateTime::::from(mgmt.reference_time.clone()) - + chrono::Duration::seconds(mgmt.validity_duration.0.into()); - let station_id = &mgmt.action_id.originating_station_id.0; - let seq_num = mgmt.action_id.sequence_number.0; - - let lat_deg = mgmt.event_position.latitude.as_deg(); - let lon_deg = mgmt.event_position.longitude.as_deg(); - - let heading = loc - .event_position_heading - .as_ref() - .map(|v| v.value.as_deg()); - - // let direction = mgmt.traffic_direction; - - let (cc, scc) = sit.event_type.cc_and_scc.to_u8_tuple(); - - if let Some(hdg) = heading { - info!( - "DENN: {station_id}/{seq_num} CC {cc}/{scc} at {lat_deg:.3}°N, {lon_deg:.3}°E, hdg {hdg:.1}° until {end_time:?}" - ); - } else { - info!( - "DENN: {station_id}/{seq_num} CC {cc}/{scc} at {lat_deg:.3}°N, {lon_deg:.3}°E until {end_time:?}" - ); - } - } else { - info!("DENM: One of situation or location container not available"); - } -} diff --git a/src/applogic/mod.rs b/src/applogic/mod.rs deleted file mode 100644 index 70cc086..0000000 --- a/src/applogic/mod.rs +++ /dev/null @@ -1,716 +0,0 @@ -//! Application Logic - -#[cfg(feature = "spat")] -use alloc::rc::Rc; -#[cfg(feature = "spat")] -use alloc::vec::Vec; - -use log::info; -#[cfg(feature = "spat")] -use log::warn; -#[cfg(feature = "spat")] -use log::{debug, error}; - -#[cfg(feature = "spat")] -use crate::{applogic::v2x::map, geo_alg}; - -pub mod v2x; - -#[cfg(feature = "cam")] -pub mod cam; -#[cfg(any(feature = "cam_tx", test))] -pub mod cam_tx; -#[cfg(feature = "denm")] -pub mod denm; -#[cfg(feature = "spat")] -pub mod tlc; - -#[cfg(feature = "spat")] -const TLC_CACHE_LIFETIME: chrono::Duration = chrono::Duration::minutes(1); -#[cfg(feature = "spat")] -const PRUNE_INTERVAL: chrono::Duration = chrono::Duration::seconds(5); - -#[cfg(feature = "spat")] -const GLOSA_SEARCH_DIST_M: f32 = 400.; -#[cfg(feature = "spat")] -const GLOSA_SEARCH_ANGLE_PARAMS: [(f32, f32); 2] = [(400., 45.), (50., 180.)]; // far and near (distance, angle) tuple -#[cfg(feature = "spat")] -const GLOSA_LANE_HEADING_DIFF_DEG: f32 = 35.; -#[cfg(feature = "spat")] -const GLOSA_AT_LANE_OFFSET_M: f64 = 10.; -#[cfg(feature = "spat")] -const GLOSA_LANE_LEFT_OFFSET_M: f64 = 20.; -#[cfg(feature = "spat")] -const GLOSA_STOP_LINE_PASSED_M: f64 = 5.; - -#[allow(unused)] -pub struct State { - initialized: bool, - time: chrono::NaiveDateTime, - - #[allow(unused)] - pos: esp32_cits_core::PosVel, - - #[cfg(feature = "spat")] - last_prune: chrono::NaiveDateTime, - #[cfg(feature = "spat")] - tlc_cache: tlc::Data, - - // GLOSA - #[cfg(feature = "spat")] - #[allow(clippy::struct_field_names)] - glosa_state: GlosaState, -} - -#[cfg(feature = "spat")] -#[derive(Debug)] -pub enum GlosaOutput { - Error(alloc::string::String), - Searching(GlosaSearching), - Found(GlosaFound), - Locked(GlosaSignalInfo), -} - -#[cfg(feature = "spat")] -#[derive(Debug, PartialEq, Eq)] -pub struct GlosaSearching { - pub known_intersection_ids: Vec, -} - -#[cfg(feature = "spat")] -#[derive(Debug, PartialEq, Eq)] -pub struct GlosaFound { - pub intersection_id: u16, - pub approach_id: Option, -} - -#[cfg(feature = "spat")] -impl From<&TlData> for GlosaFound { - fn from(value: &TlData) -> Self { - Self { - intersection_id: value.intersection_id, - approach_id: value.approach_id, - } - } -} - -#[cfg(feature = "spat")] -#[derive(Debug, Clone, PartialEq, Eq)] -pub struct GlosaSignalInfo { - pub intersection_id: u16, - pub signal_groups: Vec, -} - -#[cfg(feature = "spat")] -#[derive(Debug, Default, Clone, PartialEq, Eq)] -pub struct SignalGroupData { - pub phase: SignalPhase, - pub maneuver: map::Maneuvers, - pub end_sec: Option, -} - -#[cfg(feature = "spat")] -#[derive(Debug, Default, Clone, PartialEq, Eq)] -pub enum SignalPhase { - #[default] - Unknown, - Red, - RedYellow, - Green, - Yellow, -} - -#[allow(unused)] -#[derive(Debug, Default, Clone, PartialEq)] -pub struct GnssFix { - pub time: Option, - pub latitude_deg: f64, - pub longitude_deg: f64, - pub heading_deg: Option, - pub speed_mps: Option, -} - -impl From<&GnssFix> for esp32_cits_core::PosVel { - fn from(value: &GnssFix) -> Self { - let position = geo_types::Point::new(value.longitude_deg, value.latitude_deg); - - Self { - position, - heading_deg: value.heading_deg, - speed_mps: value.speed_mps, - } - } -} -impl From for esp32_cits_core::PosVel { - fn from(value: GnssFix) -> Self { - (&value).into() - } -} - -#[cfg(feature = "spat")] -impl core::fmt::Display for SignalPhase { - fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { - match self { - SignalPhase::Unknown => write!(f, "__"), - SignalPhase::Red => write!(f, "RE"), - SignalPhase::RedYellow => write!(f, "RY"), - SignalPhase::Green => write!(f, "GN"), - SignalPhase::Yellow => write!(f, "YE"), - } - } -} - -#[cfg(feature = "spat")] -impl From for SignalPhase { - fn from(value: c_its_parser::standards::dsrc_2_2_1::etsi_its_dsrc::MovementPhaseState) -> Self { - use c_its_parser::standards::dsrc_2_2_1::etsi_its_dsrc::MovementPhaseState; - - match value { - MovementPhaseState::stop_And_Remain => SignalPhase::Red, - MovementPhaseState::pre_Movement => SignalPhase::RedYellow, - MovementPhaseState::permissive_Movement_Allowed - | MovementPhaseState::protected_Movement_Allowed => SignalPhase::Green, - MovementPhaseState::permissive_clearance | MovementPhaseState::protected_clearance => { - SignalPhase::Yellow - } - _ => SignalPhase::Unknown, - } - } -} - -#[cfg(feature = "spat")] -#[derive(Debug, Default)] -enum GlosaState { - #[default] - Idle, - Locked(TlData), -} - -/// Where we are and pre-processed information about the current intersection -#[cfg(feature = "spat")] -#[derive(Debug)] -struct TlData { - intersection_id: u16, // mostly for debug printing - intersection: Rc>, - - lane_id: u8, - approach_id: Option, - - signal_groups: Vec, -} - -impl State { - pub fn new() -> Self { - Self { - initialized: false, - time: chrono::NaiveDateTime::default(), - pos: esp32_cits_core::PosVel::default(), - #[cfg(feature = "spat")] - last_prune: chrono::NaiveDateTime::default(), - #[cfg(feature = "spat")] - tlc_cache: tlc::Data::new(TLC_CACHE_LIFETIME), - #[cfg(feature = "spat")] - glosa_state: GlosaState::default(), - } - } - - #[allow(unused)] - #[cfg(feature = "esp")] - pub fn update_with_gpsfix(&mut self, fix: &GnssFix) { - self.pos = fix.into(); - if let Some(time) = fix.time { - self.time = time; - - if !self.initialized { - info!("GNSS fix: {}", self.print_fix()); - } - self.initialized = true; - } - } - - #[allow(unused)] - pub fn print_fix(&self) -> alloc::string::String { - alloc::format!( - "{:?}, {:.4} N, {:.4} E, {:.0}°, {:.2} m/s", - self.time, - self.pos.position.y(), - self.pos.position.x(), - self.pos.heading_deg.unwrap_or_default(), - self.pos.speed_mps.unwrap_or_default(), - ) - } - - #[allow(clippy::unused_self)] - pub fn prune(&mut self) { - #[cfg(feature = "spat")] - if self.last_prune + PRUNE_INTERVAL < self.time { - self.tlc_cache.prune(self.time); - - info!("Known int.: {:?}", self.tlc_cache.known_intersections()); - - self.last_prune = self.time; - } - } - - #[cfg(feature = "spat")] - pub fn handle_mapem(&mut self, etsi: &tlc::MAPEM) { - self.tlc_cache.handle_mapem(self.time, etsi); - } - - #[cfg(feature = "spat")] - pub fn handle_spatem(&mut self, etsi: &tlc::SPATEM) { - self.tlc_cache.handle_spatem(self.time, etsi); - } - - #[cfg(feature = "spat")] - pub fn run_glosa(&mut self) -> GlosaOutput { - let Some(own_heading) = self.pos.heading_deg else { - use alloc::string::ToString; - - return GlosaOutput::Error("Heading unknown".to_string()); - }; - - let known_intersection_ids = self.tlc_cache.known_intersections(); - let (state_update, output_data) = match &self.glosa_state { - // search for upcoming intersection - GlosaState::Idle => { - debug!( - "GLOSA: Searching with {} known intersections", - known_intersection_ids.len() - ); - - if let Some(search_result) = - Self::find_intersection(&self.pos.position, own_heading, &self.tlc_cache) - { - info!( - "GLOSA: Approach has signal groups: {:?}", - search_result.signal_groups - ); - - let glosa_found_data = (&search_result).into(); - ( - Some(GlosaState::Locked(search_result)), - GlosaOutput::Found(glosa_found_data), - ) - } else { - ( - None, - GlosaOutput::Searching(GlosaSearching { - known_intersection_ids, - }), - ) - } - } - GlosaState::Locked(info) => { - debug!( - "GLOSA: Re-evaluating intersection {:4} (at lane {:3})", - info.intersection_id, info.lane_id - ); - - // ensure that "our" intersection is kept in TLC cache - if self - .tlc_cache - .keep_intersection(info.intersection_id, self.time) - .is_err() - { - info!("GLOSA: Intersection not known any more"); - ( - Some(GlosaState::Idle), - GlosaOutput::Searching(GlosaSearching { - known_intersection_ids, - }), - ) - } else { - // determine if intersection is left - let intersection = info.intersection.borrow(); - if Self::is_intersection_left( - &intersection, - info.lane_id, - info.approach_id, - &self.pos.position, - ) { - info!("GLOSA: Intersection was left -> back to idle"); - ( - Some(GlosaState::Idle), - GlosaOutput::Searching(GlosaSearching { - known_intersection_ids, - }), - ) - } else { - // get signal groups which are in our approach - let mut approach_sig_grps = intersection - .signal_groups() - .iter() - .filter(|i| { - info.signal_groups - .iter() - .find(|sg_id| **sg_id == i.id()) - .is_some() - }) - .collect::>(); - - // sort signal groups by maneuver - approach_sig_grps.sort_by_key(|v| v.maneuvers()); - - // display signal phases - let sig_grps = approach_sig_grps - .iter() - .filter_map(|sig| { - if let Some(manv) = sig.maneuvers() { - use core::ops::Sub; - - use num_traits::Float; - - let phase = sig - .phase() - .map(core::convert::Into::into) - .unwrap_or_default(); - - let end_sec = sig - .likely_time() - .or_else(|| sig.min_end_time()) - .map(|time| { - let dur = - time.sub(self.time.and_utc()).as_seconds_f32(); - - #[allow(clippy::cast_possible_truncation)] - let end_sec = dur.round() as i16; - - end_sec - }); - - Some(SignalGroupData { - phase, - maneuver: manv, - end_sec, - }) - } else { - None - } - }) - .collect::>(); - - ( - None, - GlosaOutput::Locked(GlosaSignalInfo { - intersection_id: intersection.id(), - signal_groups: sig_grps, - }), - ) // keep state, return signal groups - } - } - } - }; - - // can't update the state from within the match statement, so do it here - if let Some(new) = state_update { - self.glosa_state = new; - } - - output_data - } - - #[cfg(feature = "spat")] - #[allow(clippy::too_many_lines)] - fn find_intersection( - own_pos: &geo_types::Point, - own_heading: f32, - tlc_cache: &tlc::Data, - ) -> Option { - // filter known intersections by distance (and bearing) - let upcoming_intersections = tlc_cache.intersections_matching(|i| { - let int_pos = i.center(); - - #[allow(clippy::cast_precision_loss, clippy::cast_possible_truncation)] - let distance = geo_alg::haversine_dist(own_pos, &int_pos) as f32; - let bearing = geo_alg::haversine_bearing(own_pos, &int_pos); - let bearing_diff = geo_alg::deg_180(own_heading - bearing); - - distance < GLOSA_SEARCH_DIST_M && bearing_diff.abs() < Self::get_search_angle(distance) - }); - - info!( - "GLOSA: upcoming int. count: {}", - upcoming_intersections.len() - ); - - // determine relevant approach - for int in upcoming_intersections { - let intersection = int.borrow(); - let lanes = intersection.ingress_lanes(); - - let own_pos_cart = geo_alg::lonlat_to_dcart(&intersection.ref_point(), own_pos); - - // find lanes with matching heading - let relevant_lanes = lanes - .iter() - .filter(|i| { - let lane_heading = i.get_heading(); - let heading_diff = geo_alg::deg_180(own_heading - lane_heading); - - debug!( - " - Lane {:4}/{:03} has heading {lane_heading:4.0} -> diff {heading_diff:4.0}°", - intersection.id(), - i.id() - ); - - heading_diff.abs() < GLOSA_LANE_HEADING_DIFF_DEG - }) - .collect::>(); - - info!( - "GLOSA: Int {:4} has {} relevant lanes", - intersection.id(), - relevant_lanes.len() - ); - for lane in &relevant_lanes { - info!( - " - lane {:03} from appr. {:?}, usages {:?}", - lane.id(), - lane.approach_id(), - lane.usages() - ); - } - - // determine in which lane/ approach we are - let current_lane = relevant_lanes.iter().find(|lane| { - #[cfg(feature = "spat_debug")] - info!("GLOSA: Searching for current lane"); - match geo_alg::LinePosition::for_ingress_lane(own_pos_cart, lane.nodes()) { - Ok(pos) => { - #[cfg(feature = "spat_debug")] - info!( - " - Lane {:4}/{:03} {:?} with {:.0} m offset", - intersection.id(), - lane.id(), - pos.semantic, - pos.perpendicular_dist, - ); - - if pos.perpendicular_dist < GLOSA_AT_LANE_OFFSET_M - && pos.semantic == geo_alg::LinePositionType::InBetween - { - info!( - "GLOSA: At lane {:4}/{:03} -> locking intersection", - intersection.id(), - lane.id() - ); - - true - } else { - false - } - } - Err(err) => { - warn!("Lane {:04}: Failed to determine position: {err}", lane.id()); - false - } - } - }); - - if let Some(lane) = current_lane { - // we found some lane which we are "inside" -> lane search can be aborted here - // but we should extract some information which is needed for future processing first - - // collect all signal groups from the current approach - let mut signal_groups = if let Some(own_approach) = lane.approach_id() { - let approach_lanes = relevant_lanes.iter().filter(|lane| { - if let Some(approach) = lane.approach_id() { - approach == own_approach - } else { - false - } - }); - - approach_lanes - .flat_map(|lane| { - lane.connections() - .iter() - .filter_map(v2x::map::Connection::signal_group) - }) - .collect::>() - } else { - error!( - "GLOSA: Lane has no approach ID, can't determine all possibly relevant signal groups" - ); - // just fall back to only the current lane's signal groups - lane.connections() - .iter() - .filter_map(v2x::map::Connection::signal_group) - .collect::>() - }; - - signal_groups.sort_unstable(); - signal_groups.dedup(); - - return Some(TlData { - intersection_id: intersection.id(), - intersection: int.clone(), - lane_id: lane.id(), - approach_id: lane.approach_id(), - signal_groups, - }); - } - } - - None - } - - #[cfg(feature = "spat")] - fn get_search_angle(distance: f32) -> f32 { - let (dist_far, angle_far) = GLOSA_SEARCH_ANGLE_PARAMS[0]; - let (dist_near, angle_near) = GLOSA_SEARCH_ANGLE_PARAMS[1]; - - if distance > dist_far { - angle_far - } else if distance < dist_near { - angle_near - } else { - // interpolate angle from near to far - let diff_dist = dist_far - dist_near; - let diff_angle = angle_far - angle_near; - - angle_near + (diff_angle / diff_dist) * (distance - dist_near) - } - } - - /// Determines if intersection was left - /// - /// TODO: return if left via stop line or otherwise - #[cfg(feature = "spat")] - fn is_intersection_left( - intersection: &v2x::map::Intersection, - lane_id: u8, - approach_id: Option, - own_pos: &geo_types::Point, - ) -> bool { - // get all lanes from the current approach - let lanes = if let Some(approach) = approach_id { - intersection.approach_lanes(approach) - } else if let Some(lane) = intersection.lane(lane_id) { - alloc::vec![lane] - } else { - alloc::vec![] - }; - - // find minimal distance to any lane where we are "inside" - let own_pos_cart = geo_alg::lonlat_to_dcart(&intersection.ref_point(), own_pos); - let min_perp_dist = lanes.iter().fold(f64::MAX, |min_dist, i| { - match geo_alg::LinePosition::for_ingress_lane(own_pos_cart, i.nodes()) { - Ok(pos) => { - // check if we left the lane via the stop line, but only count stop line as passed after X meters - if pos.semantic == geo_alg::LinePositionType::InBetween - || (pos.semantic == geo_alg::LinePositionType::BeforeStart - && pos.parallel_dist.abs() < GLOSA_STOP_LINE_PASSED_M) - { - // still at the lane -> update min_dist - pos.perpendicular_dist - } else { - // not at the lane -> take old min_dist - min_dist - } - } - Err(err) => { - warn!("Lane {:04}: Failed to determine position: {err}", i.id()); - min_dist - } - } - }); - - min_perp_dist > GLOSA_LANE_LEFT_OFFSET_M - } - - // -- getters -- - - #[allow(unused)] - pub fn initialized(&self) -> bool { - self.initialized - } - - #[allow(unused)] - pub fn time(&self) -> chrono::prelude::NaiveDateTime { - self.time - } - - #[allow(unused)] - pub fn pos(&self) -> &esp32_cits_core::PosVel { - &self.pos - } -} - -#[cfg(test)] -mod tests { - - use super::*; - use crate::init_test_env_logger; - #[cfg(feature = "spat")] - use crate::testdata::{MAPEM_HH_560, MAPEM_HH_1328}; - - #[cfg(feature = "spat")] - #[test] - fn glosa() { - init_test_env_logger(); - - // prime TLC cache - let mut state = State::new(); - let time_now = chrono::NaiveDateTime::default(); - - let etsi = if let c_its_parser::ItsMessage::Mapem { - geonetworking: _, - transport: _, - etsi, - } = - c_its_parser::de::decode(MAPEM_HH_1328, c_its_parser::Headers::None).unwrap() - { - etsi - } else { - panic!("Unexpected C-ITS message") - }; - state.tlc_cache.handle_mapem(time_now, &etsi); - - let etsi = if let c_its_parser::ItsMessage::Mapem { - geonetworking: _, - transport: _, - etsi, - } = - c_its_parser::de::decode(MAPEM_HH_560, c_its_parser::Headers::None).unwrap() - { - etsi - } else { - panic!("Unexpected C-ITS message") - }; - state.tlc_cache.handle_mapem(time_now, &etsi); - - // test GLOSA - let own_pos_infront = geo_types::Point::new(9.9752864, 53.5564028); - let own_pos_inside = geo_types::Point::new(9.9760764, 53.5563621); - let own_pos_passed = geo_types::Point::new(9.977217, 53.5560602); - let own_heading = 90.; - - state.pos.heading_deg = Some(own_heading); - - state.pos.position = own_pos_infront; - state.run_glosa(); - assert!(matches!(state.glosa_state, GlosaState::Idle)); - - state.pos.position = own_pos_inside; - state.run_glosa(); - assert!(matches!(state.glosa_state, GlosaState::Locked(_))); - if let GlosaState::Locked(info) = &state.glosa_state { - assert_eq!(1328, info.intersection_id); - assert!(info.lane_id == 1 || info.lane_id == 2); - } - - state.pos.position = own_pos_inside; - state.run_glosa(); - assert!(matches!(state.glosa_state, GlosaState::Locked(_))); - if let GlosaState::Locked(info) = &state.glosa_state { - assert_eq!(1328, info.intersection_id); - assert!(info.lane_id == 1 || info.lane_id == 2); - } - - state.pos.position = own_pos_passed; - state.run_glosa(); - assert!(matches!(state.glosa_state, GlosaState::Idle)); - } -} diff --git a/src/applogic/tlc.rs b/src/applogic/tlc.rs deleted file mode 100644 index d8671c8..0000000 --- a/src/applogic/tlc.rs +++ /dev/null @@ -1,117 +0,0 @@ -//! C-ITS Traffic Light Data (MAPEM/ SPATEM) Evaluation/ Cache - -use alloc::rc::Rc; -use alloc::vec::Vec; - -pub use c_its_parser::standards::mapem_2_2_1::mapem_pdu_descriptions::MAPEM; -pub use c_its_parser::standards::spatem_2_2_1::spatem_pdu_descriptions::SPATEM; -use chrono::Datelike; -#[cfg(all(target_arch = "riscv32", feature = "spat_debug"))] -use esp_println::println; - -use super::v2x::map; -use crate::cache::{Cache, CacheError}; - -pub struct Data { - intersections: Cache, -} - -impl Data { - pub fn new(cache_lifetime: chrono::Duration) -> Self { - Self { - intersections: Cache::::new(cache_lifetime), - } - } - - pub fn known_intersections(&self) -> Vec { - self.intersections.keys() - } - - pub fn intersections_matching

( - &self, - predicate: P, - ) -> Vec>> - where - P: Fn(&map::Intersection) -> bool, - { - self.intersections.get_filtered(predicate) - } - - pub fn handle_mapem(&mut self, time_now: chrono::NaiveDateTime, etsi: &MAPEM) { - let layer_id = etsi.map.layer_id.as_ref().map(|v| v.0); - if let Some(map) = &etsi.map.intersections { - for geom in &map.0 { - let int_id = geom.id.id.0; - - if self.intersections.contains(&int_id) { - // update with new map layers - - // we can ignore the result, since we're sure the item exists - let _ = self.intersections.update(time_now, int_id, |i| { - if !i.is_complete() { - i.add_layer(layer_id, geom); - - #[cfg(feature = "spat_debug")] - if i.is_complete() { - Self::pretty_print_intersection(&i); - } - } - }); - } else { - // create new intersection - let intersection = map::Intersection::new(layer_id, geom); - - #[cfg(feature = "spat_debug")] - if intersection.is_complete() { - Self::pretty_print_intersection(&intersection); - } - - // we can ignore the result, since we're sure the item does not exist - let _ = self.intersections.insert(time_now, intersection); - } - } - } - } - - #[cfg(feature = "spat_debug")] - fn pretty_print_intersection(intersection: &map::Intersection) { - println!("TLC: {intersection}"); - println!("TLC: Signal Groups"); - for grp in intersection.signal_groups() { - println!(" {grp}"); - } - } - - pub fn prune(&mut self, time_now: chrono::NaiveDateTime) { - self.intersections.prune(time_now); - } - - /// Bumps the timestamp of a certain intersection to keep it cached - pub fn keep_intersection( - &mut self, - intersection_id: u16, - time_now: chrono::NaiveDateTime, - ) -> Result<(), CacheError> { - self.intersections.update(time_now, intersection_id, |_| {}) - } - - pub fn handle_spatem(&mut self, time_now: chrono::NaiveDateTime, etsi: &SPATEM) { - for int in &etsi.spat.intersections.0 { - let int_id = int.id.id.0; - - if self.intersections.contains(&int_id) { - // update with SPAT data - - // we can ignore the result, since we're sure the item exists - let _ = self.intersections.update(time_now, int_id, |i| { - if i.is_complete() { - // add SPAT information to intersection - i.add_spat(int, time_now.year()); - } - }); - } else { - // drop message since we don't have (full) MAP yet - } - } - } -} diff --git a/src/applogic/v2x/map.rs b/src/applogic/v2x/map.rs deleted file mode 100644 index bac8a69..0000000 --- a/src/applogic/v2x/map.rs +++ /dev/null @@ -1,1053 +0,0 @@ -//! Types for V2X data handling - -use alloc::string::{String, ToString}; -use alloc::vec::Vec; -use alloc::{format, vec}; -use core::ops::Div; - -use c_its_parser::standards::dsrc_2_2_1::etsi_its_dsrc; -use log::warn; - -use crate::cache::Cachable; -use crate::geo_alg; - -#[derive(Debug, Clone)] -#[allow(unused)] -pub struct Intersection { - id: u16, - /// reference point as lon/lat - ref_point: geo_types::Point, - /// guessed center point as lon/lat - center: geo_types::Point, - lanes: Vec, - signal_groups: Vec, - - // internal state - num_layers: u8, - layers_present: Vec, - is_complete: bool, - last_spat_millis: u16, -} - -impl Cachable for Intersection { - fn key(&self) -> u16 { - self.id - } -} - -impl core::fmt::Display for Intersection { - fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { - let lanes = self.lanes.iter().fold(String::new(), |mut acc, i| { - use core::fmt::Write; - let _ = writeln!(acc, " {i}"); - acc - }); - - write!( - f, - "Intersection {} {{ ref: {:?}, \n{lanes}}}", - self.id, self.ref_point - ) - } -} - -#[allow(unused)] -impl Intersection { - pub fn new(layer_id: Option, value: &etsi_its_dsrc::IntersectionGeometry) -> Self { - let id = value.id.id.0; - let ref_point = value.ref_point.clone().into(); - let lanes = value - .lane_set - .0 - .iter() - .filter_map(|v| match Lane::new(v, &ref_point) { - Ok(lane) => Some(lane), - Err(err) => { - warn!("{err}"); - None - } - }) - .collect::>(); - - let (num_layers, layers_present, is_complete) = if let Some(layer_id) = layer_id { - let (num_layers, layer_num) = Self::layer_num_and_count(layer_id); - let complete = num_layers == 1; // just to be save from stupid input data - - (num_layers, alloc::vec![layer_num], complete) - } else { - (1, alloc::vec![1], true) - }; - - let signal_groups = if is_complete { - Self::collect_signal_groups(&lanes) - } else { - Vec::default() - }; - - let center = if is_complete { - Self::calculate_center(&ref_point, &lanes) - } else { - geo_types::Point::default() - }; - - Self { - id, - ref_point, - center, - lanes, - signal_groups, - num_layers, - layers_present, - is_complete, - last_spat_millis: 0, - } - } - - pub fn add_layer(&mut self, layer_id: Option, value: &etsi_its_dsrc::IntersectionGeometry) { - if self.is_complete { - return; - } - let Some(layer_id) = layer_id else { - return; - }; - let (_, layer_num) = Self::layer_num_and_count(layer_id); - - // determine if we already have this layer - if self.layers_present.contains(&layer_num) { - return; - } - - // add lanes - for lane in &value.lane_set.0 { - let lane_id = lane.lane_id.0; - - if self.lanes.iter().find(|i| i.id == lane_id).is_none() { - match Lane::new(lane, &self.ref_point) { - Ok(lane) => self.lanes.push(lane), - Err(err) => { - warn!("{err}"); - } - } - } - } - - self.layers_present.push(layer_num); - - // we can just count the present layers since we made sure to not add already known ones beforehand - if self.layers_present.len() == self.num_layers as usize { - self.signal_groups = Self::collect_signal_groups(&self.lanes); - self.center = Self::calculate_center(&self.ref_point, &self.lanes); - self.is_complete = true; - } - } - - pub fn add_spat(&mut self, value: &etsi_its_dsrc::IntersectionState, year: i32) { - if let Some(millis) = &value.time_stamp { - if self.last_spat_millis == millis.0 { - // skip this SPATEM since we already processed one with the same timestamp - return; - } - self.last_spat_millis = millis.0; - } - - if let Some(moy) = &value.moy { - for state in &value.states.0 { - let sig_grp = state.signal_group.0; - - if let Some(event) = state.state_time_speed.0.first() { - // get write access to SignalGroup item - if let Some(idx) = self.signal_groups.iter().position(|i| i.id == sig_grp) - && let Some(sig_grp) = self.signal_groups.get_mut(idx) - { - sig_grp.phase = Some(event.event_state); - if let Some(timing) = &event.timing { - if !timing.min_end_time.is_out_of_range() - && !timing.min_end_time.is_unknown() - { - sig_grp.min_end_time = - Some(timing.min_end_time.to_datetime_from_moy(moy, year)); - } - if let Some(likely) = &timing.likely_time - && !likely.is_out_of_range() - && !likely.is_unknown() - { - sig_grp.likely_time = Some(likely.to_datetime_from_moy(moy, year)); - } - } - } - } else { - // warn!("SPAT: SG {sig_grp:03} has no timing in first event"); - } - } - } - } - - fn collect_signal_groups(lanes: &[Lane]) -> Vec { - let mut connections = lanes - .iter() - .flat_map(|i| i.connections.clone()) - .filter(|i| i.signal_group.is_some()) - .collect::>(); - - connections.sort_by_key(|i| i.signal_group.unwrap_or_default()); - - let chunks = connections.chunk_by(|a, b| a.signal_group == b.signal_group); - chunks - .map(|chunk| { - let (sig_grp_id, maneuvers, mut target_lanes) = chunk.iter().fold( - (None, Maneuvers::default(), vec![]), - |(sig_grp_id, maneuvers, mut lanes), i| { - let new_maneuvers = i - .maneuvers - .map(|v| core::ops::Add::add(maneuvers, v)) - .unwrap_or_default(); - lanes.push(i.target_lane_id); - - (i.signal_group, new_maneuvers, lanes) - }, - ); - - // unwrap is fine since we removed all connections without signal group beforehand - let id = sig_grp_id.unwrap(); - let maneuvers = if maneuvers.is_emtpy() { - None - } else { - Some(maneuvers) - }; - target_lanes.sort_unstable(); - // TODO: dedup as well!? - - SignalGroup { - id, - maneuvers, - target_lanes, - phase: None, - min_end_time: None, - likely_time: None, - } - }) - .collect() - } - - fn calculate_center(ref_pos: &geo_types::Point, lanes: &[Lane]) -> geo_types::Point { - let (sum, count) = lanes.iter().fold( - (geo_types::Point::default(), 0), - |(center_sum, count), lane| { - // only use vehicle lanes - if lane.usages.contains(&UsageType::Vehicle) - && let Some(stop_line) = lane.get_stop_line() - { - (center_sum + stop_line.into(), count + 1) - } else { - (center_sum, count) - } - }, - ); - - // convert from X/Y to geo coordinate - let center_xy = sum.div(f64::from(count)); - - geo_alg::dcart_to_lonlat(ref_pos, ¢er_xy) - } - - fn layer_num_and_count(layer_id: u8) -> (u8, u8) { - let layer_num = layer_id % 10; - let num_layers = (layer_id - layer_num) / 10; - - (num_layers, layer_num) - } - - pub fn is_complete(&self) -> bool { - self.is_complete - } - - pub fn id(&self) -> u16 { - self.id - } - pub fn ref_point(&self) -> geo_types::Point { - self.ref_point - } - pub fn center(&self) -> geo_types::Point { - self.center - } - pub fn lanes(&self) -> &[Lane] { - &self.lanes - } - pub fn signal_groups(&self) -> &[SignalGroup] { - &self.signal_groups - } - - pub fn lane(&self, lane_id: u8) -> Option<&Lane> { - self.lanes.iter().find(|i| i.id == lane_id) - } - - pub fn ingress_lanes(&self) -> Vec<&Lane> { - self.lanes.iter().filter(|i| i.is_ingress).collect() - } - - pub fn bikeable_ingress_lanes(&self) -> Vec<&Lane> { - self.lanes - .iter() - .filter(|i| i.is_ingress && i.usages.contains(&UsageType::Bike)) - .collect() - } - - pub fn approach_lanes(&self, approach_id: u8) -> Vec<&Lane> { - self.lanes - .iter() - .filter(|i| i.approach_id.is_some_and(|i| i == approach_id)) - .collect() - } -} - -#[derive(Debug, Clone)] -#[allow(unused)] -pub struct Lane { - id: u8, - approach_id: Option, - /// lane nodes as local X/Y coordinates, X to the North, Y to the East - nodes: geo_types::LineString, - is_ingress: bool, - is_egress: bool, - usages: Vec, - connections: Vec, - maneuvers: Vec, -} - -impl core::fmt::Display for Lane { - fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { - let type_str = match (self.is_ingress, self.is_egress) { - (true, true) => "IE", - (true, false) => "I", - (false, true) => "E", - (false, false) => "", - }; - let appr_str = if let Some(appr) = self.approach_id { - format!("{appr}") - } else { - String::new() - }; - let conns_str: String = self.connections.iter().fold(String::new(), |mut acc, i| { - use core::fmt::Write; - let _ = write!(acc, "{i}"); - acc - }); - - write!( - f, - "Lane {} ({type_str}-{appr_str}, {:?}) -> [{conns_str}]", - self.id, self.usages - ) - } -} - -#[derive(Debug, Copy, Clone)] -#[allow(unused)] -pub struct Connection { - id: Option, - target_lane_id: u8, - maneuvers: Option, - signal_group: Option, -} - -impl core::fmt::Display for Connection { - fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { - let id = self.id.unwrap_or_default(); - let sig_str = match self.signal_group { - Some(sig) => format!("sig. {sig}"), - None => String::new(), - }; - - write!(f, "{{ conn. {id}: to {}, {sig_str} }}", self.target_lane_id) - } -} - -#[allow(unused)] -impl Connection { - pub fn id(&self) -> Option { - self.id - } - pub fn maneuvers(&self) -> Option { - self.maneuvers - } - pub fn signal_group(&self) -> Option { - self.signal_group - } -} - -impl From<&etsi_its_dsrc::Connection> for Connection { - fn from(value: &etsi_its_dsrc::Connection) -> Self { - let id = value.connection_id.as_ref().map(|v| v.0); - let target_lane_id = value.connecting_lane.lane.0; - let maneuvers = value - .connecting_lane - .maneuver - .as_ref() - .map(Maneuvers::from_dsrc); - let signal_group = value.signal_group.as_ref().map(|v| v.0); - - Self { - id, - target_lane_id, - maneuvers, - signal_group, - } - } -} - -/// Different view on a lane connection -/// -/// Technically this data is redundant with the `Connection` data of a `Lane`, -/// but it makes processing SPAT information easier, if signal group maneuvers can be accessed directly and not my collecting them from all lane connections. -#[derive(Debug, Clone)] -#[allow(unused)] -pub struct SignalGroup { - id: u8, - maneuvers: Option, - target_lanes: Vec, // mainly for debugging - - // SPAT data - /// current signal phase - phase: Option, - min_end_time: Option>, - // max_end_time: Option>, - likely_time: Option>, -} - -impl core::fmt::Display for SignalGroup { - fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { - let manv_str = self.maneuvers.map(|v| format!(" {v}")).unwrap_or_default(); - let phase_str = self.phase_to_str().unwrap_or_default(); - write!( - f, - "SG {:2} {{{manv_str} to {:?} {phase_str}}}", - self.id, self.target_lanes - ) - } -} - -#[allow(unused)] -impl SignalGroup { - pub fn id(&self) -> u8 { - self.id - } - pub fn maneuvers(&self) -> Option { - self.maneuvers - } - pub fn phase(&self) -> Option { - self.phase - } - pub fn min_end_time(&self) -> Option> { - self.min_end_time - } - pub fn likely_time(&self) -> Option> { - self.likely_time - } - - pub fn phase_to_str(&self) -> Option { - self.phase.map(|v| { - match v { - etsi_its_dsrc::MovementPhaseState::unavailable => "n.a.", - etsi_its_dsrc::MovementPhaseState::dark => "dark", - etsi_its_dsrc::MovementPhaseState::stop_Then_Proceed => "stop", - etsi_its_dsrc::MovementPhaseState::stop_And_Remain => "RED", - etsi_its_dsrc::MovementPhaseState::pre_Movement => "PRE", - etsi_its_dsrc::MovementPhaseState::permissive_Movement_Allowed - | etsi_its_dsrc::MovementPhaseState::protected_Movement_Allowed => "GRN", - etsi_its_dsrc::MovementPhaseState::permissive_clearance - | etsi_its_dsrc::MovementPhaseState::protected_clearance => "YEL", - - etsi_its_dsrc::MovementPhaseState::caution_Conflicting_Traffic => "blnk", - } - .to_string() - }) - } -} - -#[derive(Debug, Clone)] -#[allow(unused)] -pub struct SignalPhase { - state: etsi_its_dsrc::SignalStatus, -} - -#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)] -#[allow(unused)] -pub enum UsageType { - /// vehicle lanes that are not limited to Bus or Taxi use, nor restricted from public use - Vehicle, - /// vehicle lanes that are restricted to bus use or vehicle lanes shared with bus vehicle traffic - Bus, - /// tracked-vehicle lanes or vehicle lanes shared with tracked vehicle traffic - Tram, - /// bike-lanes or vehicle lanes shared with cyclist vehicle traffic - Bike, - /// crosswalks or sidewalks - Pedestrian, -} - -#[derive(Debug, Default, Copy, Clone, PartialEq, Eq)] -pub struct Maneuvers { - pub left_allowed: bool, - pub staight_allowed: bool, - pub right_allowed: bool, -} - -impl core::fmt::Display for Maneuvers { - fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { - write!( - f, - "Maneuvers {{ {}{}{} }}", - if self.left_allowed { "l" } else { "_" }, - if self.staight_allowed { "s" } else { "_" }, - if self.right_allowed { "r" } else { "_" }, - ) - } -} - -impl PartialOrd for Maneuvers { - fn partial_cmp(&self, other: &Self) -> Option { - Some(self.cmp(other)) - } -} -impl Ord for Maneuvers { - fn cmp(&self, other: &Self) -> core::cmp::Ordering { - if self.eq(other) { - core::cmp::Ordering::Equal - } else { - #[allow(clippy::unnested_or_patterns)] - match (self.left_allowed, self.staight_allowed, self.right_allowed) { - // left (or none) < everything - (true, false, false) | (false, false, false) => core::cmp::Ordering::Less, - // left and straight > (just left) - (true, true, false) => { - if other.eq(&Maneuvers::new(true, false, false)) { - core::cmp::Ordering::Greater - } else { - core::cmp::Ordering::Less - } - } - // omni > (anything without right) - (true, true, true) | (true, false, true) => { - if other.right_allowed { - core::cmp::Ordering::Less - } else { - core::cmp::Ordering::Greater - } - } - // (only straight) > omni or left or left+straight - (false, true, false) => { - if other.eq(&Maneuvers::new(true, true, true)) - || other.eq(&Maneuvers::new(true, false, false)) - || other.eq(&Maneuvers::new(true, true, false)) - { - core::cmp::Ordering::Greater - } else { - core::cmp::Ordering::Less - } - } - // (straight and right) < right - (false, true, true) => { - if other.eq(&Maneuvers::new(false, false, true)) { - core::cmp::Ordering::Less - } else { - core::cmp::Ordering::Greater - } - } - // right > alles - (false, false, true) => core::cmp::Ordering::Greater, - } - } - } -} - -impl core::ops::Add for Maneuvers { - type Output = Maneuvers; - - fn add(self, rhs: Self) -> Self::Output { - Self::Output { - staight_allowed: self.staight_allowed || rhs.staight_allowed, - left_allowed: self.left_allowed || rhs.left_allowed, - right_allowed: self.right_allowed || rhs.right_allowed, - } - } -} - -#[allow(unused)] -impl Maneuvers { - pub fn new(left_allowed: bool, staight_allowed: bool, right_allowed: bool) -> Self { - Self { - left_allowed, - staight_allowed, - right_allowed, - } - } - - pub fn from_dsrc(value: &etsi_its_dsrc::AllowedManeuvers) -> Self { - let left_allowed = - value.get_maneuver_left_allowed() || value.get_maneuver_left_turn_on_red_allowed(); - let right_allowed = - value.get_maneuver_right_allowed() || value.get_maneuver_right_turn_on_red_allowed(); - - Self { - left_allowed, - staight_allowed: value.get_maneuver_straight_allowed(), - right_allowed, - } - } - - pub fn is_emtpy(self) -> bool { - !self.left_allowed && !self.staight_allowed && !self.right_allowed - } -} - -#[allow(unused)] -impl Lane { - /// Creates a `Lane` from C-ITS data - pub fn new( - lane: &etsi_its_dsrc::GenericLane, - ref_pos: &geo_types::Point, - ) -> Result { - let etsi_its_dsrc::NodeListXY::nodes(node_set_xy) = &lane.node_list else { - return Err(format!( - "Lane::new(): ComputedLane not supported (used in lane {})", - lane.lane_id.0 - )); - }; - - let nodes_enu = Self::node_set_to_line_string_xy(node_set_xy, *ref_pos); - - // convert to NED instead of ENU - let nodes = nodes_enu - .points() - .map(|p| geo_types::Point::new(p.y(), p.x())) - .collect(); - - let usages = UsageType::get_usages(&lane.lane_attributes)?; - let connections = lane - .connects_to - .as_ref() - .map(|v| v.0.iter().map(core::convert::Into::into).collect()) - .unwrap_or_default(); - - let maneuvers = alloc::vec![]; - - let is_ingress = lane.lane_attributes.directional_use.get_ingress_path(); - let is_egress = lane.lane_attributes.directional_use.get_egress_path(); - - Ok(Self { - id: lane.lane_id.0, - approach_id: lane.ingress_approach.as_ref().map(|v| v.0), - nodes, - usages, - connections, - maneuvers, - is_ingress, - is_egress, - }) - } - - fn node_set_to_line_string_xy( - data: &etsi_its_dsrc::NodeSetXY, - ref_pos: geo_types::Point, - ) -> geo_types::LineString { - let mut prev_delta = geo_types::Point::default(); - let mut prev_ref_pos = ref_pos; - data.0 - .iter() - .map(|pt| { - let node = match &pt.delta { - etsi_its_dsrc::NodeOffsetPointXY::node_LatLon(node_llm_d64b) => { - let result = pt.delta.to_ddist(&prev_ref_pos); - - // reference position needs to be the last `node_LatLon` - prev_ref_pos = geo_types::Point::new( - node_llm_d64b.lon.as_deg(), - node_llm_d64b.lat.as_deg(), - ); - result - } - _ => prev_delta + pt.delta.to_ddist(&ref_pos), - }; - prev_delta = node; - - node - }) - .collect() - } - - pub fn id(&self) -> u8 { - self.id - } - pub fn approach_id(&self) -> Option { - self.approach_id - } - pub fn is_ingress(&self) -> bool { - self.is_ingress - } - pub fn nodes(&self) -> &geo_types::LineString { - &self.nodes - } - pub fn usages(&self) -> &[UsageType] { - &self.usages - } - pub fn connections(&self) -> &[Connection] { - &self.connections - } - pub fn maneuvers(&self) -> &[Maneuvers] { - &self.maneuvers - } - - pub fn get_stop_line(&self) -> Option { - self.nodes.0.first().copied() - } - - /// Determines average heading - pub fn get_heading(&self) -> f32 { - // unwrap is fine since a lane always contains at least 2 nodes - let stop_line = self.nodes.points().next().unwrap(); - // unwrap is fine since a lane always contains at least 2 nodes - let second_point = self.nodes.points().next_back().unwrap(); - - #[allow(clippy::cast_possible_truncation)] - let average_heading = geo_alg::cartesian_bearing(second_point, stop_line) as f32; - - average_heading - } - - /// Determines heading at stop line and average - pub fn get_headings(&self) -> (f32, f32) { - // unwrap is fine since a lane always contains at least 2 nodes - let stop_line = self.nodes.points().next().unwrap(); - // unwrap is fine since a lane always contains at least 2 nodes - let second_point = self.nodes.points().next().unwrap(); - // unwrap is fine since a lane always contains at least 2 nodes - let entry_point = self.nodes.points().next_back().unwrap(); - - #[allow(clippy::cast_possible_truncation)] - let stop_line_heading = geo_alg::cartesian_bearing(second_point, stop_line) as f32; - #[allow(clippy::cast_possible_truncation)] - let average_heading = geo_alg::cartesian_bearing(entry_point, stop_line) as f32; - - (stop_line_heading, average_heading) - } -} - -#[allow(dead_code)] -impl UsageType { - /// Determine possible usages of the lane - /// - /// Lanes may be used my multiple classes of traffic at once, so this needs to - /// return a vector of [`UsageType`]. - /// - /// # Errors - /// Returns display string of the [`LaneAttributes`], if no suitable lane class was found - pub fn get_usages(lane_attrs: &etsi_its_dsrc::LaneAttributes) -> Result, String> { - let mut result = alloc::vec![]; - if Self::is_vehicle_useable(lane_attrs) { - result.push(Self::Vehicle); - } - if Self::is_bus_useable(lane_attrs) { - result.push(Self::Bus); - } - if Self::is_tram_useable(lane_attrs) { - result.push(Self::Tram); - } - if Self::is_bike_useable(lane_attrs) { - result.push(Self::Bike); - } - if Self::is_pedestrian_useable(lane_attrs) { - result.push(Self::Pedestrian); - } - - if result.is_empty() { - Err(format!("Unsupported LaneAttributes: {lane_attrs}")) - } else { - Ok(result) - } - } - - /// See [`UsageType::Vehicle`] - fn is_vehicle_useable(lane_attrs: &etsi_its_dsrc::LaneAttributes) -> bool { - match &lane_attrs.lane_type { - etsi_its_dsrc::LaneTypeAttributes::vehicle(attrs) => { - !attrs.get_restricted_to_bus_use() - && !attrs.get_restricted_to_taxi_use() - && !attrs.get_restricted_from_public_use() - } - _ => false, - } - } - - /// See [`UsageType::Bus`] - fn is_bus_useable(lane_attrs: &etsi_its_dsrc::LaneAttributes) -> bool { - match &lane_attrs.lane_type { - etsi_its_dsrc::LaneTypeAttributes::vehicle(attrs) => { - attrs.get_restricted_to_bus_use() | lane_attrs.shared_with.get_bus_vehicle_traffic() - } - _ => false, - } - } - - /// See [`UsageType::Tram`] - fn is_tram_useable(lane_attrs: &etsi_its_dsrc::LaneAttributes) -> bool { - match &lane_attrs.lane_type { - etsi_its_dsrc::LaneTypeAttributes::trackedVehicle(_) => true, - etsi_its_dsrc::LaneTypeAttributes::vehicle(_) => { - lane_attrs.shared_with.get_tracked_vehicle_traffic() - } - _ => false, - } - } - - /// See [`UsageType::Bike`] - fn is_bike_useable(lane_attrs: &etsi_its_dsrc::LaneAttributes) -> bool { - match &lane_attrs.lane_type { - etsi_its_dsrc::LaneTypeAttributes::bikeLane(_) => true, - // etsi_its_dsrc::LaneTypeAttributes::sidewalk(attrs) => { - // attrs.get_bicycle_use_allowed() - // } - etsi_its_dsrc::LaneTypeAttributes::vehicle(_) => { - lane_attrs.shared_with.get_cyclist_vehicle_traffic() - } - _ => false, - } - } - - /// See [`UsageType::Pedestrian`] - fn is_pedestrian_useable(lane_attrs: &etsi_its_dsrc::LaneAttributes) -> bool { - match &lane_attrs.lane_type { - etsi_its_dsrc::LaneTypeAttributes::crosswalk(_) - | etsi_its_dsrc::LaneTypeAttributes::sidewalk(_) => true, - // etsi_its_dsrc::LaneTypeAttributes::vehicle(_) => { - // lane_attrs.shared_with.get_pedestrian_traffic() - // || lane_attrs.shared_with.get_pedestrians_traffic() - // } - _ => false, - } - } -} - -#[cfg(test)] -mod tests { - use c_its_parser::standards::dsrc_2_2_1::etsi_its_dsrc::IntersectionGeometry; - use c_its_parser::standards::mapem_2_2_1::mapem_pdu_descriptions; - - use super::*; - use crate::init_test_env_logger; - use crate::testdata::{ - MAPEM_HH_560, - MAPEM_HH_1328, - MAPEM_HH_2349_L31, - MAPEM_HH_2349_L32, - MAPEM_HH_2349_L33, - }; - - #[test] - fn map_simple() { - let etsi = decode_mapem(MAPEM_HH_1328); - - let layer_id = etsi.map.layer_id.map(|v| v.0); - if let Some(map) = &etsi.map.intersections { - for geom in &map.0 { - let intersection = Intersection::new(layer_id, geom); - - assert!(intersection.is_complete()); - assert_ne!(geo_types::Point::default(), intersection.center()); - - // validate that center position is reasonable - let ref_pos_dist = - geo_alg::haversine_dist(&intersection.center, &intersection.ref_point); - println!( - "Map ref {:?}, center {ref_pos_dist:.1} m away", - intersection.ref_point - ); - assert!(ref_pos_dist < 15.); // for MAP 1328 the reference point is ~12 meters from the intersection center - } - } else { - panic!("MAPEM is missing intersection data") - } - - // forge a layered mapem - let layer_id = Some(11); - if let Some(map) = &etsi.map.intersections { - for geom in &map.0 { - let intersection = Intersection::new(layer_id, geom); - - assert!(intersection.is_complete()); - assert_ne!(geo_types::Point::default(), intersection.center()); - } - } else { - panic!("MAPEM is missing intersection data") - } - - let layer_id = Some(22); - if let Some(map) = &etsi.map.intersections { - for geom in &map.0 { - let intersection = Intersection::new(layer_id, geom); - - assert!(!intersection.is_complete()); - assert_eq!(geo_types::Point::default(), intersection.center()); - } - } else { - panic!("MAPEM is missing intersection data") - } - } - - #[test] - fn map_layered() { - let etsi_layer31 = decode_mapem(MAPEM_HH_2349_L31); - let etsi_layer32 = decode_mapem(MAPEM_HH_2349_L32); - let etsi_layer33 = decode_mapem(MAPEM_HH_2349_L33); - - // add some layer - let (layer_id, geom) = extract_geom(&etsi_layer32); - let mut intersection = Intersection::new(layer_id, geom); - assert!(!intersection.is_complete()); - assert_eq!(geo_types::Point::default(), intersection.center()); - - // add a second layer - { - let num_lanes_before = intersection.lanes().len(); - - let (layer_id, geom) = extract_geom(&etsi_layer33); - intersection.add_layer(layer_id, geom); - assert!(!intersection.is_complete()); - assert_eq!(geo_types::Point::default(), intersection.center()); - - let num_lanes_after = intersection.lanes().len(); - assert!(num_lanes_before <= num_lanes_after); - } - - // add first layer again - { - let num_lanes_before = intersection.lanes().len(); - - let (layer_id, geom) = extract_geom(&etsi_layer32); - intersection.add_layer(layer_id, geom); - assert!(!intersection.is_complete()); - assert_eq!(geo_types::Point::default(), intersection.center()); - - let num_lanes_after = intersection.lanes().len(); - assert!(num_lanes_before == num_lanes_after); - } - - // add final layer - { - let num_lanes_before = intersection.lanes().len(); - - let (layer_id, geom) = extract_geom(&etsi_layer31); - intersection.add_layer(layer_id, geom); - assert!(intersection.is_complete()); - assert_ne!(geo_types::Point::default(), intersection.center()); - - let num_lanes_after = intersection.lanes().len(); - assert!(num_lanes_before <= num_lanes_after); - } - } - - #[test] - fn map_signal_groups() { - init_test_env_logger(); - - let etsi = decode_mapem(MAPEM_HH_1328); - let layer_id = etsi.map.layer_id.map(|v| v.0); - if let Some(map) = &etsi.map.intersections { - for geom in &map.0 { - let intersection = Intersection::new(layer_id, geom); - - assert!(intersection.is_complete()); - assert_eq!(2, intersection.signal_groups.len()); - } - } else { - panic!("MAPEM is missing intersection data") - } - - let etsi = decode_mapem(MAPEM_HH_560); - let layer_id = etsi.map.layer_id.map(|v| v.0); - if let Some(map) = &etsi.map.intersections { - for geom in &map.0 { - let intersection = Intersection::new(layer_id, geom); - - assert!(intersection.is_complete()); - assert_eq!(10, intersection.signal_groups.len()); - } - } else { - panic!("MAPEM is missing intersection data") - } - } - - fn decode_mapem(uper: &[u8]) -> Box { - if let c_its_parser::ItsMessage::Mapem { - geonetworking: _, - transport: _, - etsi, - } = c_its_parser::de::decode(uper, c_its_parser::Headers::None).unwrap() - { - etsi - } else { - panic!("Unexpected C-ITS message") - } - } - - fn extract_geom( - etsi: &Box, - ) -> (Option, &IntersectionGeometry) { - let layer_id = etsi.map.layer_id.as_ref().map(|v| v.0); - if let Some(map) = &etsi.map.intersections { - // just assume we only have one intersection per mapem - (layer_id, map.0.first().unwrap()) - } else { - panic!("MAPEM is missing intersection data") - } - } - - #[test] - fn maneuver_order() { - let left = Maneuvers::new(true, false, false); - let straight_and_left = Maneuvers::new(true, true, false); - let straight = Maneuvers::new(false, true, false); - let omni = Maneuvers::new(true, true, true); - let straight_and_right = Maneuvers::new(false, true, true); - let right = Maneuvers::new(false, false, true); - - let maneuvers = vec![ - right, - omni, - straight, - left, - straight_and_left, - straight_and_right, - ]; - - let mut sorted = maneuvers.clone(); - sorted.sort(); - - println!("Sorted maneuvers:"); - for manv in &sorted { - println!("- {manv}"); - } - - assert_eq!(left, sorted[0]); - assert_eq!(straight_and_left, sorted[1]); - assert_eq!(omni, sorted[2]); - assert_eq!(straight, sorted[3]); - assert_eq!(straight_and_right, sorted[4]); - assert_eq!(right, sorted[5]); - - // was a bug at 2026-06-21 - let maneuvers = vec![right, left, straight_and_left, straight]; - - let mut sorted = maneuvers.clone(); - sorted.sort(); - - println!("Sorted maneuvers:"); - for manv in &sorted { - println!("- {manv}"); - } - - assert_eq!(left, sorted[0]); - assert_eq!(straight_and_left, sorted[1]); - assert_eq!(straight, sorted[2]); - assert_eq!(right, sorted[3]); - } -} diff --git a/src/applogic/v2x/mod.rs b/src/applogic/v2x/mod.rs deleted file mode 100644 index 8f027ce..0000000 --- a/src/applogic/v2x/mod.rs +++ /dev/null @@ -1,4 +0,0 @@ -//! Types for V2X data handling - -#[cfg(feature = "spat")] -pub mod map; diff --git a/src/bin/main.rs b/src/bin/main.rs new file mode 100644 index 0000000..4da699d --- /dev/null +++ b/src/bin/main.rs @@ -0,0 +1,148 @@ +#![no_std] +#![no_main] +#![deny( + clippy::mem_forget, + reason = "mem::forget is generally not safe to do with esp_hal types, especially those \ + holding buffers for the duration of a data transfer." +)] +#![deny(clippy::large_stack_frames)] + +use esp_backtrace as _; +use esp_hal::clock::CpuClock; +use esp_hal::main; +use esp_hal::timer::timg::TimerGroup; +use log::{debug, error, info, warn}; + +extern crate alloc; + +const WIFI_CHANNEL: core::ffi::c_int = 180; + +unsafe extern "C" { + /// Changes the 802.11 PHY channel + /// + /// C function signature: `void phy_change_channel(int,int,int,int)` + /// + /// Options: + /// - `primary`: Channel frequency in MHz + /// - `ignored1`: Ignored (set to 1) + /// - `ignored2`: Ignored (set to 0) + /// - `ht_mode`: Probably HT mode + pub unsafe fn phy_change_channel( + primary: core::ffi::c_int, + ignored1: core::ffi::c_int, + ignored2: core::ffi::c_int, + ht_mode: core::ffi::c_int, + ) -> core::ffi::c_int; + + /// Enables 802.11p mode on the ESP32-C5 + /// + /// C function signature: `void phy_11p_set(int,int)` + /// + /// Options: + /// - `enable`: Boolean option to enable 802.11p mode + /// - `zero`: Unknown, but need to be zero + pub unsafe fn phy_11p_set(enable: u8, zero: u8); +} + +#[repr(u8)] +#[derive(Debug)] +#[allow(dead_code)] +enum EspWifiPromiscuousPktType { + /// Management frame, indicates 'buf' argument is wifi_promiscuous_pkt_t + MGMT = 0, + /// Control frame, indicates 'buf' argument is wifi_promiscuous_pkt_t + CTRL = 1, + /// Data frame, indicates 'buf' argument is wifi_promiscuous_pkt_t + DATA = 2, + /// Other type, such as MIMO etc. 'buf' argument is wifi_promiscuous_pkt_t but the payload is zero length. + MISC = 3, +} + +impl EspWifiPromiscuousPktType { + #[allow(dead_code)] + pub fn as_repr(self) -> u8 { + self as u8 + } + + /// Converts to underlying type of `wifi_promiscuous_pkt_type_t` (used by `esp_radio::wifi::sniffer::PromiscuousPkt::frame_type`) + pub fn as_frame_type(self) -> core::ffi::c_uint { + (self as u8) as core::ffi::c_uint + } +} + +// This creates a default app-descriptor required by the esp-idf bootloader. +// For more information see: +esp_bootloader_esp_idf::esp_app_desc!(); + +#[allow( + clippy::large_stack_frames, + reason = "it's not unusual to allocate larger buffers etc. in main" +)] +#[main] +fn main() -> ! { + // generator version: 1.3.0 + // generator parameters: --chip esp32c5 -o esp32c5-wroom-1 -o alloc -o vscode -o log -o unstable-hal -o wifi -o esp-backtrace + + esp_println::logger::init_logger_from_env(); + + let config = esp_hal::Config::default().with_cpu_clock(CpuClock::max()); + let peripherals = esp_hal::init(config); + + // The following pins are used to bootstrap the chip. They are available + // for use, but check the datasheet of the module for more information on them. + // - GPIO2 + // - GPIO3 + // - GPIO7 + // - GPIO25 + // - GPIO26 + // - GPIO27 + // - GPIO28 + + esp_alloc::heap_allocator!(#[esp_hal::ram(reclaimed)] size: 65536); + + let timg0 = TimerGroup::new(peripherals.TIMG0); + let sw_interrupt = + esp_hal::interrupt::software::SoftwareInterruptControl::new(peripherals.SW_INTERRUPT); + esp_rtos::start(timg0.timer0, sw_interrupt.software_interrupt0); + + let (_wifi_controller, interfaces) = esp_radio::wifi::new( + peripherals.WIFI, + esp_radio::wifi::ControllerConfig::default(), + ) + .expect("Failed to initialize Wi-Fi controller"); + + let mut sniffer = interfaces.sniffer; + sniffer + .set_promiscuous_mode(true) + .expect("Failed to enable promiscuous mode"); + + sniffer.set_receive_cb(|packet| { + // Ignore frames with errors and non-data frames + if packet.rx_cntl.rx_state != 0 { + warn!("Received frame has RX error: {}", packet.rx_cntl.rx_state); + return; + } + if packet.frame_type != EspWifiPromiscuousPktType::DATA.as_frame_type() { + debug!("Received frame is not a DATA frame: {}", packet.frame_type); + return; + } + + // TODO: handle 802.11 frame + info!("Received frame with {} bytes", packet.len); + }); + + unsafe { + phy_11p_set(1, 0); + match phy_change_channel(5000 + (WIFI_CHANNEL * 5), 1, 0, 0) { + 0 => {} + ret => { + error!("ERROR: Failed to change channel: {ret}"); + } + } + } + info!("WiFi promiscuous mode on channel {WIFI_CHANNEL} running"); + + loop { + // nothing to do here, all data is handled in RX callback for now + } +} diff --git a/src/cache.rs b/src/cache.rs deleted file mode 100644 index d2855b8..0000000 --- a/src/cache.rs +++ /dev/null @@ -1,258 +0,0 @@ -//! Data Cache -//! -//! Store items for some time - -use alloc::rc::Rc; -use alloc::vec::Vec; -use core::ops::Sub; - -pub trait Cachable -where - K: core::cmp::PartialEq, -{ - fn key(&self) -> K; -} - -pub trait Initable -where - T: Cachable, - K: core::cmp::PartialEq, -{ - fn init(key: K) -> T; -} - -struct CacheItem -where - T: Cachable, - K: core::cmp::PartialEq, -{ - timestamp: chrono::NaiveDateTime, - data: Rc>, - phantom: core::marker::PhantomData, // rust wants this -} - -impl core::fmt::Display for CacheItem -where - T: Cachable, - K: core::cmp::PartialEq + core::fmt::Display, -{ - fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { - write!( - f, - "CacheItem({}, {:?})", - self.data.borrow().key(), - self.timestamp - ) - } -} - -impl CacheItem -where - T: Cachable, - K: core::cmp::PartialEq, -{ - fn new(time_now: chrono::NaiveDateTime, data: T) -> Self { - Self { - timestamp: time_now, - data: Rc::new(core::cell::RefCell::new(data)), - phantom: core::marker::PhantomData, - } - } -} - -#[derive(Debug, Clone)] -pub enum CacheError -where - K: core::fmt::Display, -{ - KeyNotFound(K), - InsertKeyAlreadyPresent(K), -} - -impl core::fmt::Display for CacheError -where - K: core::fmt::Display, -{ - fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { - match self { - CacheError::KeyNotFound(key) => write!(f, "Key '{key}' doesn't exist in cache"), - CacheError::InsertKeyAlreadyPresent(key) => { - write!(f, "Insert failed b/c key '{key}' already exists in cache") - } - } - } -} - -/// Item cache -/// -/// Stores items for a certain time. -/// Items need to implement `Cachable` so that an itentifier (key) can be retreived from them. -pub struct Cache -where - T: Cachable, - K: core::cmp::PartialEq, -{ - lifetime: chrono::Duration, - items: Vec>, -} - -impl core::fmt::Display for Cache -where - T: Cachable, - K: core::cmp::PartialEq + core::fmt::Display, -{ - fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { - write!(f, "Cache({}, {} items)", self.lifetime, self.items.len()) - } -} - -#[allow(unused)] -impl Cache -where - T: Cachable + Clone, - K: core::cmp::PartialEq + core::fmt::Display, -{ - /// Creates a new cache with a certain item lifetime - pub const fn new(lifetime: chrono::Duration) -> Self { - Self { - lifetime, - items: alloc::vec![], - } - } - - /// Determines if a key is in the cache - pub fn contains(&mut self, key: &K) -> bool { - self.items - .iter() - .find(|i| i.data.borrow().key() == *key) - .is_some() - } - - /// Determines the index of a certain key - fn find(&mut self, key: &K) -> Option { - self.items - .iter() - .position(|i| i.data.borrow().key() == *key) - } - - /// Retrieves all known keys - pub fn keys(&self) -> Vec { - self.items.iter().map(|i| i.data.borrow().key()).collect() - } - - /// Adds a new item to the cache - /// - /// Call [`Self::update`] to update the contents of the cached item - /// or just to bump the timestamp. - /// - /// # Errors - /// Fails if the specified key already exist - pub fn insert( - &mut self, - time_now: chrono::NaiveDateTime, - data: T, - ) -> Result<(), CacheError> { - let key = data.key(); - if self.contains(&key) { - Err(CacheError::InsertKeyAlreadyPresent(key)) - } else { - self.items.push(CacheItem::new(time_now, data)); - Ok(()) - } - } - - /// Retrieves an item from the cache - /// - /// Returns `None` if no item exists for this key - pub fn get(&mut self, key: &K) -> Option>> { - self.items.iter().find_map(|i| { - if i.data.borrow().key() == *key { - Some(i.data.clone()) - } else { - None - } - }) - } - - /// Retrieves items from the cache which match the predicate - pub fn get_filtered

(&self, predicate: P) -> Vec>> - where - P: Fn(&T) -> bool, - { - self.items - .iter() - .filter_map(|i| { - let data = i.data.borrow(); - if predicate(&data) { - Some(i.data.clone()) - } else { - None - } - }) - .collect() - } - - /// Updates an item in the cache using the provided function - /// - /// This can also be used to just bump the timestamp of the cached item by providing an empty closure. - /// - /// # Errors - /// Fails if the specified key does not exist in the cache - pub fn update( - &mut self, - time_now: chrono::NaiveDateTime, - key: K, - func: F, - ) -> Result<(), CacheError> - where - F: Fn(&mut T), - K: core::fmt::Display, - { - // find item - let Some(pos) = self.find(&key) else { - return Err(CacheError::KeyNotFound(key)); - }; - - // unwrap is fine since we fetched the position before - let item = self.items.get_mut(pos).unwrap(); - - let mut data = item.data.borrow_mut(); - func(&mut data); - - item.timestamp = time_now; - - Ok(()) - } - - /// Updates an item in the cache using the provided function or create a new item with default values - pub fn update_or_init(&mut self, time_now: chrono::NaiveDateTime, key: K, mut func: F) - where - F: FnMut(&mut T), - K: core::fmt::Display, - T: Initable, - { - if let Some(pos) = self.find(&key) { - // update existsting item - // unwrap is fine since we fetched the position before - let item = self.items.get_mut(pos).unwrap(); - - let mut data = item.data.borrow_mut(); - func(&mut data); - - item.timestamp = time_now; - } else { - // insert new item - self.items.push(CacheItem::new(time_now, T::init(key))); - } - } - - /// Cleans items which timed out from the cache - /// - /// Call this regularly to prune old items. - pub fn prune(&mut self, time_now: chrono::NaiveDateTime) { - self.items.retain(|i| { - let age = time_now.sub(i.timestamp); - age < self.lifetime - }); - } -} diff --git a/src/geo_alg.rs b/src/geo_alg.rs deleted file mode 100644 index 12efd8f..0000000 --- a/src/geo_alg.rs +++ /dev/null @@ -1,446 +0,0 @@ -//! Geo Algorithms -//! -//! Since the `geo` crate is not `no_std`, we need to implement the most important algorithms on our own - -use alloc::string::{String, ToString}; -use core::ops::{Mul, Sub}; - -use log::warn; -#[cfg(not(feature = "std"))] -use num_traits::float::Float; - -const EARTH_RADIUS: f64 = 6_371_008.8; // mean radius of GRS80 ellipsoid -const EARTH_CIRCUMFERENCE: f64 = 40_030_228.884; // calculated from `EARTH_RADIUS * 2 * PI` - -/// Haversine distance between two geo coordinates (in meters) -#[allow(unused)] -pub fn haversine_dist(a: &geo_types::Point, b: &geo_types::Point) -> f64 { - let theta1 = a.y().to_radians(); - let theta2 = b.y().to_radians(); - let delta_theta = (b.y() - a.y()).to_radians(); - let delta_lambda = (b.x() - a.x()).to_radians(); - let a = (delta_theta / 2.).sin().powi(2) - + theta1.cos() * theta2.cos() * (delta_lambda / 2.).sin().powi(2); - let c = 2. * a.sqrt().asin(); - EARTH_RADIUS * c -} - -/// Haversine bearing from point `a` to point `b` -#[allow(unused)] -pub fn haversine_bearing(a: &geo_types::Point, b: &geo_types::Point) -> f32 { - let (lng_a, lat_a) = (a.x().to_radians(), a.y().to_radians()); - let (lng_b, lat_b) = (b.x().to_radians(), b.y().to_radians()); - let delta_lng = lng_b - lng_a; - - #[allow(clippy::cast_precision_loss, clippy::cast_possible_truncation)] - let s = (lat_b.cos() * delta_lng.sin()) as f32; - #[allow(clippy::cast_precision_loss, clippy::cast_possible_truncation)] - let c = (lat_a.cos() * lat_b.sin() - lat_a.sin() * lat_b.cos() * delta_lng.cos()) as f32; - - let degrees = f32::atan2(s, c).to_degrees(); - (degrees + 360.0) % 360.0 -} - -/// Cartesian distance between to X/Y coordinates (in unit of the coordinates) -#[allow(unused)] -pub fn cartesian_dist(a: geo_types::Point, b: geo_types::Point) -> f64 { - let vector = b.sub(a); - cartesian_norm(vector) -} - -/// Cartesian bearing from X/Y point `a` to X/Y point `b` -#[allow(unused)] -pub fn cartesian_bearing(a: geo_types::Point, b: geo_types::Point) -> f64 { - let vector = b.sub(a); - cartesian_theta(vector) -} - -/// Cartesian vector norm (length) -#[allow(unused)] -pub fn cartesian_norm(vec: geo_types::Point) -> f64 { - f64::sqrt(vec.x() * vec.x() + vec.y() * vec.y()) -} - -/// Cartesian vector direction (polar coordinate angle) -#[allow(unused)] -pub fn cartesian_theta(vec: geo_types::Point) -> f64 { - let theta_rad = f64::atan2(vec.y(), vec.x()); - theta_rad * 180. / core::f64::consts::PI -} - -/// Normalizes an angle (in degrees) to (-180, 180] interval -#[allow(unused)] -pub fn deg_180(angle_deg: f32) -> f32 { - let full_circle_deg = 360.0; - - let angle = angle_deg % full_circle_deg; - if angle > full_circle_deg / 2. { - return angle - full_circle_deg; - } - if angle <= -full_circle_deg / 2. { - return angle + full_circle_deg; - } - angle -} - -/// Normalizes an angle (in degrees) to [0, 360) interval -#[allow(unused)] -pub fn deg_360(angle_deg: f32) -> f32 { - let full_circle_deg = 360.0; - - let angle = angle_deg % full_circle_deg; - if (angle < 0.) { - return angle + full_circle_deg; - } - angle -} - -/// Converts a geo-position (lon/lat) to cartesian coordinates relative to a reference positions -/// -/// Both `ref_pos` and `position` are expected to be lon/lat in degrees. -/// The output will be in a local X/Y coordinate system with X pointing north and Y pointing east. -#[allow(unused)] -pub fn lonlat_to_dcart( - ref_pos: &geo_types::Point, - position: &geo_types::Point, -) -> geo_types::Point { - let pos_diff = position.sub(*ref_pos); - let dlat_deg = pos_diff.y(); - let dlon_deg = pos_diff.x(); - - // latitude (north/south) degree per meter is independent from longitude - let dx = dlat_deg / 360. * EARTH_CIRCUMFERENCE; - - // longitude (east/west) degree per meter has a different value depending on the latitude - #[allow(clippy::cast_possible_truncation)] - let ref_lat_rad = ref_pos.to_radians().y(); - let dy = dlon_deg / 360. * (EARTH_CIRCUMFERENCE * ref_lat_rad.cos()); - - geo_types::Point::new(dx, dy) -} - -/// Converts a X/Y coordinate (NED relative to a reference position) to a geo-position -/// -/// The `ref_pos` is expected to be lon/lat in degrees and the output will be the same. -/// The `position` is expected to be in a local X/Y coordinate system with X pointing north and Y pointing east. -#[allow(unused)] -pub fn dcart_to_lonlat( - ref_pos: &geo_types::Point, - position: &geo_types::Point, -) -> geo_types::Point { - // note that we're using NED while c-its-parser uses ITS-G5 style ENU X/Y coordinates - // so we need to swap X and Y coordinates - - #[allow(clippy::cast_possible_truncation)] - let dx = position.y() as f32; - #[allow(clippy::cast_possible_truncation)] - let dy = position.x() as f32; - - c_its_parser::geo_utils::point_from_dxy(dx, dy, ref_pos) -} - -/// Describes how a position is related to a line segment -#[derive(Debug, Default)] -#[allow(unused)] -pub struct LinePosition { - /// Own position relative to the line segment - pub semantic: LinePositionType, - /// Distance to center line (always positive) - pub parallel_dist: f64, - /// Distance to first node (negative if `BeforeStart`) - pub perpendicular_dist: f64, -} - -#[derive(Debug, Default, PartialEq, Eq, PartialOrd, Ord)] -#[allow(unused)] -pub enum LinePositionType { - #[default] - Undefined, - BeforeStart, - InBetween, - AfterEnd, -} - -#[allow(unused)] -impl LinePosition { - pub fn new(parallel_dist: f64, perpendicular_dist: f64, after_end: bool) -> Self { - let semantic = if after_end { - LinePositionType::AfterEnd - } else if parallel_dist < 0. { - LinePositionType::BeforeStart - } else { - LinePositionType::InBetween - }; - Self { - semantic, - parallel_dist, - perpendicular_dist, - } - } - - /// Determines `point` position relative to a line segment (in X/Y coordinates) - /// - /// The `ls` shall consist of 2 points! - /// - /// # Algorithm - /// The line segment can be converted to a vector which describes an infinite line. - /// So we can calculate the (perpendicular) projection of the point on that line: - /// ```text - /// [Case A] (point) | [Case B] (point) - /// | | | - /// | | | - /// (node1)---(node2)-----(q) | (node1)------(q)------(node2) - /// ``` - /// - /// This will already give us the perpendicular and parallel distance. - /// Since we came from a finite line segment and want to know if the point is bejond the segment, - /// we also need to compare the parallel distance with the length of the vector. - /// So both case are the same mathematically. - /// - /// # Errors - /// Fails if points are the same - pub fn for_ls(point: geo_types::Point, line: &geo_types::Line) -> Result { - let node1 = line.start_point(); - let node2 = line.end_point(); - - let line_vec = node2.sub(node1); - let line_vec_length = cartesian_norm(line_vec); - - // input validation - if line_vec_length < f64::EPSILON { - return Err("Points are the same".to_string()); - } - - // calculate projection of `p` onto the line - // ```math - // # n needs to be a unit vector - // n = (node2 - node1) / |node2 - node1| - // # vector from node1 to the point - // p = point - node1 - // # projection is the unit-vector multipled by the dot-product of p and n - // q = (p {dot} n) * n - // # perpendicular length is calculated from the vector q->p - // QP = q - p - // ``` - let p = point.sub(node1); - let n = line_vec.mul(1. / line_vec_length); - let q = n.mul(p.dot(n)); - let qp_length = cartesian_norm(q.sub(p)); - - // calculate parallel distance of `q` to `node1`. - // This can be achieved by the dot-product since `n` is a unit vector and - // the dot-product of two paralle vectors is the same as the multiplication of the vector norms. - let q_dist = n.dot(q); - - // generate output - let after_end = q_dist > line_vec_length; - let line_pos = Self::new(q_dist, qp_length, after_end); - - Ok(line_pos) - } - - /// Determines `point` position relative to nodes of an ingress `Lane` - /// - /// Keep in mind, that the lane's node list starts at the stop line and is extending away from the intersection. - /// But we are driving the other way around! - /// - /// # Errors - /// Returns a human-readable string if position can't be determined - pub fn for_ingress_lane( - point: geo_types::Point, - nodes: &geo_types::LineString, - ) -> Result { - let mut result = Self::default(); - - let mut lines = nodes.lines(); - - // check, that the stop line is not behind us - let line = lines - .next() - .ok_or("Lane has less than two nodes".to_string())?; - - let pos = Self::for_ls(point, &line)?; - if pos.semantic == LinePositionType::BeforeStart { - // we have crossed the stop line -> abort search for position inside the lane - return Ok(pos); - } - if pos.semantic == LinePositionType::InBetween { - // we're at this segment -> search finished - return Ok(pos); - } - // otherwise: continue with next segment (and store this segment's length) - let mut lane_length = cartesian_norm(line.delta().into()); - let mut last_pos = LinePosition::default(); - - // continue with remaining lines - for line in lines { - let line_len = cartesian_norm(line.delta().into()); - - // ignored line, if points are too close <10cm - if line_len < 0.1 { - warn!("Lane nodes are just {line_len:.1} m apart -> ignoring"); - continue; - } - - let pos = Self::for_ls(point, &line)?; - match pos.semantic { - LinePositionType::BeforeStart => { - // we're at the outer arc of the lane right at the border between line segments - // -> set parallel distance to zero and finish search - return Ok(LinePosition::new( - lane_length, - pos.perpendicular_dist, - false, - )); - } - LinePositionType::InBetween => { - // we're at this segment - // -> add segment's distance to accumulated lane length and finish search - return Ok(LinePosition::new( - lane_length + pos.parallel_dist, - pos.perpendicular_dist, - false, - )); - } - _ => { - // continue searching, add segment's distance to lane length accumulator - lane_length += line_len; - last_pos = pos; - } - } - } - - // if we came this far, we're after the lane's end (actually the start in driving direction) - // -> add parallel distance to accumulated lane length - Ok(LinePosition::new( - lane_length + last_pos.parallel_dist, - last_pos.perpendicular_dist, - true, - )) - } -} - -#[cfg(test)] -mod tests { - use crate::geo_alg::{LinePosition, cartesian_bearing}; - - #[test] - fn test_cart_bearing() { - let start = geo_types::Point::new(0., 0.); - - assert_float_eq::assert_float_absolute_eq!( - 0., - cartesian_bearing(start, geo_types::Point::new(10., 0.)) - ); - - assert_float_eq::assert_float_absolute_eq!( - 90., - cartesian_bearing(start, geo_types::Point::new(0., 10.)) - ); - - assert_float_eq::assert_float_absolute_eq!( - 45., - cartesian_bearing(start, geo_types::Point::new(10., 10.)) - ); - - assert_float_eq::assert_float_absolute_eq!( - 135., - cartesian_bearing(start, geo_types::Point::new(-10., 10.)) - ); - - assert_float_eq::assert_float_absolute_eq!( - -135., - cartesian_bearing(start, geo_types::Point::new(-10., -10.)) - ); - } - - #[test] - fn linepos_for_ls_validation() { - // identical nodes shall result in an error - - let point = geo_types::Point::new(0., 0.); - let node1 = geo_types::Point::new(0., 0.); - let node2 = geo_types::Point::new(10., -5.); - - let ls = geo_types::Line::new(node1, node1); - assert!(LinePosition::for_ls(point, &ls).is_err()); - - let ls = geo_types::Line::new(node2, node2); - assert!(LinePosition::for_ls(point, &ls).is_err()); - } - - #[test] - fn linepos_for_ls_test() { - use crate::geo_alg::LinePositionType; - - // test on X axis - { - let node1 = geo_types::Point::new(0., 0.); - let node2 = geo_types::Point::new(5., 0.); - - let ls = geo_types::Line::new(node1, node2); - - // test some positions - let test_tuples = vec![ - (node1.x() - 1000., LinePositionType::BeforeStart), - (node1.x() - 1., LinePositionType::BeforeStart), - (node1.x(), LinePositionType::InBetween), - (node1.x() + 1., LinePositionType::InBetween), - (node2.x() - 1., LinePositionType::InBetween), - (node2.x(), LinePositionType::InBetween), - (node2.x() + 1., LinePositionType::AfterEnd), - (node2.x() + 1000., LinePositionType::AfterEnd), - ]; - let y_values = vec![(node1.y() - 1.), (node1.y()), (node1.y() + 1.)]; - - // y position should only affect the perpendicular distance - for y in &y_values { - // x position affects the position type and parallel distance - for (x, semantic) in &test_tuples { - let point = geo_types::Point::new(*x, *y); - - let result = LinePosition::for_ls(point, &ls).unwrap(); - - assert_eq!(semantic, &result.semantic); - assert_eq!((y - node1.y()).abs(), result.perpendicular_dist); - assert_eq!(x - node1.x(), result.parallel_dist); - } - } - } - - // test on Y axis - { - let node1 = geo_types::Point::new(3., 5.); - let node2 = geo_types::Point::new(3., 100.); - - let ls = geo_types::Line::new(node1, node2); - - // test some positions - let test_tuples = vec![ - (node1.y() - 1000., LinePositionType::BeforeStart), - (node1.y() - 1., LinePositionType::BeforeStart), - (node1.y(), LinePositionType::InBetween), - (node1.y() + 1., LinePositionType::InBetween), - (node2.y() - 1., LinePositionType::InBetween), - (node2.y(), LinePositionType::InBetween), - (node2.y() + 1., LinePositionType::AfterEnd), - (node2.y() + 1000., LinePositionType::AfterEnd), - ]; - let x_values = vec![(node1.x() - 1.), (node1.x()), (node1.x() + 1.)]; - - // x position should only affect the perpendicular distance - for x in &x_values { - // y position affects the position type and parallel distance - for (y, semantic) in &test_tuples { - let point = geo_types::Point::new(*x, *y); - - let result = LinePosition::for_ls(point, &ls).unwrap(); - - assert_eq!(semantic, &result.semantic); - assert_eq!((x - node1.x()).abs(), result.perpendicular_dist); - assert_eq!(y - node1.y(), result.parallel_dist); - } - } - } - } -} diff --git a/src/io.rs b/src/io.rs deleted file mode 100644 index 44997ee..0000000 --- a/src/io.rs +++ /dev/null @@ -1,515 +0,0 @@ -//! UART/ BLE I/O Protocol - -pub mod msg { - #![allow(clippy::all, clippy::pedantic, clippy::nursery, dead_code)] - include!(concat!(env!("OUT_DIR"), "/c_its_io.rs")); -} - -use alloc::string::ToString; -use alloc::vec::Vec; - -use c_its_parser::gn as geonetworking; -use log::error; - -impl From for msg::SerialOutputMsg { - fn from(value: msg::RawMsgRx) -> Self { - use msg::serial_output_msg::Payload; - - Self { - payload: Some(Payload::RxMsg(value)), - } - } -} - -impl From for msg::SerialOutputMsg { - fn from(value: msg::DenmEvent) -> Self { - use msg::serial_output_msg::Payload; - - Self { - payload: Some(Payload::Denm(value)), - } - } -} - -impl msg::RawMsgRx { - pub fn serialize_uart_proto(&self) -> Vec { - serialize_serial_msg(&Into::::into(self.clone())) - } -} -impl msg::DenmEvent { - #[allow(unused)] - pub fn serialize_uart_proto(&self) -> Vec { - serialize_serial_msg(&Into::::into(*self)) - } -} - -#[derive(Debug, Default)] -pub struct Parser { - buffer: alloc::vec::Vec, -} - -impl Parser { - const SOF_LEN: u16 = 4; - const SOF1: u8 = 0x56; - const SOF2: u8 = 0x32; - const SOF3: u8 = 0x58; - const SOF4: u8 = 0x2B; - const EOF_LEN: u16 = 2; - #[allow(unused)] - const EOF1: u8 = 0x0d; - #[allow(unused)] - const EOF2: u8 = 0x0a; - const LENGTH_LEN: u16 = 2; - - /// Parses incoming data and return list of messages - pub fn parse(&mut self, input: &[u8]) -> alloc::vec::Vec { - use prost::Message as _; - - // combine with existing data - self.buffer.append(&mut input.to_vec()); - - // find start of frame and parse - let mut output = alloc::vec![]; - while let Some(pos) = Self::find_sof(&self.buffer) { - // drop everything before the SOF - self.buffer.drain(..pos); - - // get length field and check buffer size - if let Some(len_bytes) = self - .buffer - .get(usize::from(Self::SOF_LEN)..usize::from(Self::SOF_LEN + Self::LENGTH_LEN)) - { - // unwrap is fine since we queried 2 bytes before, so we can also convert to 2-byte slice - let msg_size = u16::from_be_bytes(len_bytes.try_into().unwrap()); - - let required_buf_size = Self::SOF_LEN + Self::LENGTH_LEN + msg_size + Self::EOF_LEN; - if let Some(payload) = self.buffer.get( - usize::from(Self::SOF_LEN + Self::LENGTH_LEN) - ..usize::from(required_buf_size - 2), - ) { - match msg::SerialInputMsg::decode(payload) { - Ok(data) => { - output.push(data); - } - Err(err) => error!("Failed to parse input: {err:?}"), - } - - // consume buffer - self.buffer.drain(..usize::from(required_buf_size)); - } else { - break; - } - } - } - - output - } - - /// Returns the start index of the SOF sequence, if present - fn find_sof(input: &[u8]) -> Option { - // search for SOF - if let Some(sof1_pos) = input.iter().position(|i| *i == Self::SOF1) { - // drop everything before sof1_pos and check if remainder continues with SOF sequence - let (_, msg) = input.split_at(sof1_pos); - if msg.starts_with(&[Self::SOF1, Self::SOF2, Self::SOF3, Self::SOF4]) { - // found the SOF sequence - return Some(sof1_pos); - } - } - - // if we reach this position, SOF sequence wasn't found - None - } -} - -fn serialize_serial_msg(msg: &T) -> Vec -where - T: prost::Message, -{ - let mut msg_buf = msg.encode_to_vec(); - - let sof = [0x56u8, 0x32, 0x58, 0x2B]; - let eof = [0x0du8, 0x0a]; - #[allow(clippy::cast_possible_truncation)] - let len: [u8; 2] = (msg_buf.len() as u16).to_be_bytes(); - - let mut out = sof.to_vec(); - out.extend_from_slice(&len); - out.append(&mut msg_buf); - out.extend_from_slice(&eof); - - out -} - -impl From for crate::applogic::GnssFix { - fn from(value: msg::PositionState) -> Self { - let time = - chrono::DateTime::from_timestamp_millis(value.timestamp_ms).map(|v| v.naive_utc()); - - let latitude_deg = value.position.latitude_deg.into(); - let longitude_deg = value.position.longitude_deg.into(); - let heading_deg = value.heading.map(|v| { - #[allow(clippy::cast_precision_loss)] - let val = (v as f32) / 10.; - val - }); - let speed_mps = value.speed.map(|v| { - #[allow(clippy::cast_precision_loss)] - let val = (v as f32) / 100.; - val - }); - - Self { - time, - latitude_deg, - longitude_deg, - heading_deg, - speed_mps, - } - } -} - -impl From for esp32_cits_core::PosVel { - fn from(value: msg::PositionState) -> Self { - let position = geo_types::Point::new( - value.position.longitude_deg.into(), - value.position.latitude_deg.into(), - ); - let heading_deg = value.heading.map(|v| { - #[allow(clippy::cast_precision_loss)] - let val = (v as f32) / 10.; - val - }); - let speed_mps = value.speed.map(|v| { - #[allow(clippy::cast_precision_loss)] - let val = (v as f32) / 100.; - val - }); - - Self { - position, - heading_deg, - speed_mps, - } - } -} - -impl From for esp32_cits_core::PosVel { - fn from(value: msg::ItsPosition) -> Self { - let latitude_deg = f64::from(value.latitude) / 10_000_000.; - let longitude_deg = f64::from(value.longitude) / 10_000_000.; - let position = geo_types::Point::new(longitude_deg, latitude_deg); - - Self { - position, - heading_deg: None, - speed_mps: None, - } - } -} - -impl esp32_cits_core::tx::GnItsPayload for msg::RawMsgTx { - fn make_eh( - &self, - address: [u8; 6], - own_position: &esp32_cits_core::PosVel, - time: chrono::DateTime, - seq_no: &mut u16, - ) -> Result< - ( - c_its_parser::gn::en302636_4_1::ExtendedHeader, - Option, - u8, - ), - alloc::string::String, - > { - let station_type = self - .station_type - .and_then(|v| { - #[allow(clippy::cast_possible_truncation)] - let raw_val = v as u8; - geonetworking::en302636_4_1::StationType::try_from(raw_val).ok() - }) - .unwrap_or_default(); - #[allow(clippy::cast_possible_truncation)] - let hop_limit = self.hop_limit as u8; - - Ok(match self.gn_transport() { - msg::GnTransport::Gac => { - if self.gn_area.position.is_none() { - return Err("Failed to create GAC: gnArea.position missing".to_string()); - } - - *seq_no += 1; - - let (atype, geoanycast) = Self::make_geobcast( - address, - station_type, - own_position, - time, - self.gn_area, - *seq_no, - )?; - let eh = geonetworking::en302636_4_1::ExtendedHeader::GAC(geoanycast); - (eh, Some(atype), hop_limit) - } - msg::GnTransport::Gbc => { - if self.gn_area.position.is_none() { - return Err("Failed to create GAC: gnArea.position missing".to_string()); - } - - *seq_no += 1; - - let (atype, geoanycast) = Self::make_geobcast( - address, - station_type, - own_position, - time, - self.gn_area, - *seq_no, - )?; - let eh = geonetworking::en302636_4_1::ExtendedHeader::GBC(geoanycast); - (eh, Some(atype), hop_limit) - } - msg::GnTransport::Tsb => { - *seq_no += 1; - - ( - esp32_cits_core::tx::gn::make_tsb_eh( - address, - station_type, - own_position, - time, - *seq_no, - )?, - None, - hop_limit, - ) - } - msg::GnTransport::Shb => ( - esp32_cits_core::tx::gn::make_shb_eh(address, station_type, own_position, time)?, - None, - 1, - ), - }) - } - - fn make_payload( - &self, - ) -> Result<(Vec, c_its_parser::standards::extensions::ItsMessageId), alloc::string::String> - { - #[allow(clippy::cast_possible_truncation)] - let message_id = (self.message_type as u8).try_into()?; - Ok((self.payload.clone(), message_id)) - } -} - -impl msg::RawMsgTx { - fn make_geobcast( - address: [u8; 6], - station_type: geonetworking::en302636_4_1::StationType, - own_position: &esp32_cits_core::PosVel, - time: chrono::DateTime, - gn_area: msg::GnArea, - sequence_number: u16, - ) -> Result< - ( - c_its_parser::gn::en302636_4_1::AreaType, - geonetworking::en302636_4_1::GeoBroadcast, - ), - alloc::string::String, - > { - let source_position_vector = - esp32_cits_core::tx::gn::make_lpv(address, station_type, own_position, time)?; - - let (atype, dist_a, dist_b, angle) = match gn_area.area() { - msg::GnAreaShape::EtsiAreashapeCircle => ( - c_its_parser::gn::en302636_4_1::AreaType::Circular, - gn_area.dist_a, - None, - None, - ), - msg::GnAreaShape::EtsiAreashapeRectangle => ( - c_its_parser::gn::en302636_4_1::AreaType::Rectangular, - gn_area.dist_a, - gn_area.dist_b, - gn_area.angle, - ), - msg::GnAreaShape::EtsiAreashapeEllipsis => ( - c_its_parser::gn::en302636_4_1::AreaType::Ellipsoidal, - gn_area.dist_a, - gn_area.dist_b, - gn_area.angle, - ), - }; - - #[allow(clippy::cast_possible_truncation)] - let latitude_deg = own_position.position.y() as f32; - #[allow(clippy::cast_possible_truncation)] - let longitude_deg = own_position.position.x() as f32; - let distance_a = dist_a - .map(|v| { - #[allow(clippy::cast_possible_truncation, clippy::cast_sign_loss)] - let val = v as u16; - val - }) - .unwrap_or_default(); - let distance_b = dist_b - .map(|v| { - #[allow(clippy::cast_possible_truncation, clippy::cast_sign_loss)] - let val = v as u16; - val - }) - .unwrap_or_default(); - let angle = angle - .map(|v| { - #[allow(clippy::cast_possible_truncation, clippy::cast_sign_loss)] - let val = v as u16; - val - }) - .unwrap_or_default(); - - let gac = geonetworking::en302636_4_1::GeoAnycast::try_from_values( - sequence_number, - source_position_vector, - latitude_deg, - longitude_deg, - distance_a, - distance_b, - angle, - ) - .map_err(|err| alloc::format!("{err}"))?; - - Ok((atype, gac)) - } -} - -#[cfg(test)] -mod tests { - - use super::*; - use crate::init_test_env_logger; - - impl From for msg::SerialInputMsg { - fn from(value: msg::RawMsgTx) -> Self { - use msg::serial_input_msg::Payload; - - Self { - payload: Some(Payload::TxMsg(value)), - } - } - } - - impl From for msg::SerialInputMsg { - fn from(value: msg::PositionState) -> Self { - use msg::serial_input_msg::Payload; - - Self { - payload: Some(Payload::Position(value)), - } - } - } - - // manual example data: - // SerialInputMsg(RawMsgTx): 5632582b0040123e0a340202c173256817284029d5b3400f1feaf01ffffffc23b7743e00000fc0007e8138250737feebfff600000dffff7ffff1ce40400010011807220028020d0a - // SerialInputMsg(PositionState): 5632582b00170a1509a0bbe2a29f010000120a0d00002842150000b8410d0a - - #[test] - fn uart_parser() { - // generate some test UART input messages - let raw_tx = msg::RawMsgTx { - payload: crate::testdata::CAM_SMALL.to_vec(), - message_type: 1, - gn_transport: msg::GnTransport::Shb.into(), - gn_area: msg::GnArea { - area: None, - position: None, - dist_a: None, - dist_b: None, - angle: None, - }, - hop_limit: 2, - station_type: None, - }; - let raw_tx_buf = serialize_serial_msg::(&raw_tx.clone().into()); - - let pos_state = msg::PositionState { - timestamp_ms: 1785144196000, - position: msg::Position { - latitude_deg: 42., - longitude_deg: 23., - }, - heading: None, - speed: None, - }; - let pos_state_buf = serialize_serial_msg::(&pos_state.clone().into()); - - let mut parser = Parser::default(); - - // feed individual complete messages to parser - let output = parser.parse(&raw_tx_buf); - assert_eq!(1, output.len()); - assert_eq!( - &msg::SerialInputMsg::from(raw_tx.clone()), - output.get(0).unwrap() - ); - - let output = parser.parse(&pos_state_buf); - assert_eq!(1, output.len()); - assert_eq!( - &msg::SerialInputMsg::from(pos_state.clone()), - output.get(0).unwrap() - ); - - // feed multiple complete messages to parser - let mut combined_buf = pos_state_buf.clone(); - combined_buf.extend_from_slice(&raw_tx_buf); - - let output = parser.parse(&combined_buf); - assert_eq!(2, output.len()); - assert_eq!( - &msg::SerialInputMsg::from(pos_state.clone()), - output.get(0).unwrap() - ); - assert_eq!( - &msg::SerialInputMsg::from(raw_tx.clone()), - output.get(1).unwrap() - ); - - // feed partial messages to parser - let buf1 = &raw_tx_buf[0..3]; - let buf2 = &raw_tx_buf[3..]; - - let output = parser.parse(buf1); - assert_eq!(0, output.len()); - - let output = parser.parse(buf2); - assert_eq!(1, output.len()); - assert_eq!( - &msg::SerialInputMsg::from(raw_tx.clone()), - output.get(0).unwrap() - ); - - // feed messages with garbage in between - let mut buf1 = vec![0xabu8, 0xcd]; // prepend some garbage - buf1.extend_from_slice(&raw_tx_buf[0..3]); - let mut buf2 = (&raw_tx_buf[3..]).to_vec(); - buf2.extend_from_slice(&[0xfeu8, 0x42]); // append some garbage - buf2.extend_from_slice(&pos_state_buf); // append second message - buf2.extend_from_slice(&[0x11u8, 0x22]); // append some more garbage - - let output = parser.parse(&buf1); - assert_eq!(0, output.len()); - - let output = parser.parse(&buf2); - assert_eq!(2, output.len()); - assert_eq!( - &msg::SerialInputMsg::from(raw_tx.clone()), - output.get(0).unwrap() - ); - assert_eq!( - &msg::SerialInputMsg::from(pos_state.clone()), - output.get(1).unwrap() - ); - } -} diff --git a/src/main.rs b/src/main.rs deleted file mode 100644 index 67e181c..0000000 --- a/src/main.rs +++ /dev/null @@ -1,891 +0,0 @@ -#![no_std] -#![no_main] -#![deny( - clippy::mem_forget, - reason = "mem::forget is generally not safe to do with esp_hal types, especially those \ - holding buffers for the duration of a data transfer." -)] -// #![deny(clippy::large_stack_frames)] - -// we can't use UART I/O and GNSS at the same time -#[cfg(all(feature = "uart", feature = "gnss_ubx", feature = "gnss_l67k"))] -compile_error!( - "feature \"uart\" and features \"gnss_ubx\" or \"gnss_l67k\" cannot be enabled at the same time" -); -// autonomous CAM generation need a time and position source (aka _gnss) -#[cfg(all(feature = "cam_tx", not(feature = "_gnss")))] -compile_error!("feature \"cam_tx\" needs a time and position source (either GNSS or UART)"); -// we can't have both GNSS drivers enabled at the same time -#[cfg(all(feature = "gnss_ubx", feature = "gnss_l67k"))] -compile_error!("feature \"gnss_ubx\" and feature \"gnss_l67k\" cannot be enabled at the same time"); - -use alloc::string::ToString as _; -use alloc::vec::Vec; -use core::cell::RefCell; -#[cfg(feature = "spat")] -use core::cell::UnsafeCell; - -use c_its_parser::gn as geonetworking; -#[cfg(feature = "cam_tx")] -use c_its_parser::standards::extensions::ItsStationType; -use critical_section::Mutex; -use crossbeam_queue::ArrayQueue; -use embassy_executor::Spawner; -#[cfg(feature = "gnss_l67k")] -use embassy_gps::gps::l76k; -use esp_backtrace as _; -use esp_hal::clock::CpuClock; -use esp_hal::timer::timg::TimerGroup; -#[cfg(all(target_arch = "riscv32", feature = "spat"))] -use esp_println::println; -use esp32_cits_core::radio; -use geonetworking::Decode as _; -use log::{error, info, warn}; - -extern crate alloc; - -mod applogic; -mod cache; -mod geo_alg; -#[cfg(feature = "uart")] -mod io; -#[cfg(feature = "screen")] -mod screen; -#[cfg(feature = "gnss_ubx")] -mod ubx; - -const WIFI_CHANNEL: radio::Channel = 180; -const WIFI_TXPOWER: i8 = 10; // dBm, 2..20 -#[cfg(feature = "spat")] -const SPAT_RATE_LIMIT: u8 = 5; // keep every n-th message -#[cfg(any(feature = "cam_tx", feature = "uart"))] -const GN_IS_MOBILE: bool = true; -#[cfg(feature = "cam_tx")] -const OWN_STATION_TYPE: ItsStationType = ItsStationType::Cyclist; -#[cfg(feature = "cam_tx")] -const OWN_VEHICLE_WIDTH: u8 = 5; // in 10cm steps! -#[cfg(feature = "cam_tx")] -const OWN_VEHICLE_LENGTH: u16 = 20; // in 10cm steps! -#[cfg(feature = "_uart")] -const SERIAL_FIFO_SIZE_THLD: u8 = 100; // hardware has max. 128 byte - -// This creates a default app-descriptor required by the esp-idf bootloader. -// For more information see: -esp_bootloader_esp_idf::esp_app_desc!(); - -#[cfg(feature = "_gnss")] -static GNSS_UPDATE: Mutex>> = Mutex::new(RefCell::new(None)); -static WIFI_RX_QUEUE: Mutex>>>> = Mutex::new(RefCell::new(None)); -#[cfg(feature = "_uart")] -static UART_RX_BUF: Mutex>>> = Mutex::new(RefCell::new(None)); -#[cfg(feature = "_uart")] -static SERIAL: Mutex>>> = - Mutex::new(RefCell::new(None)); - -#[allow( - clippy::large_stack_frames, - reason = "it's not unusual to allocate larger buffers etc. in main" -)] -#[esp_rtos::main] -async fn main(spawner: Spawner) -> ! { - // generator version: 1.3.0 - // generator parameters: --chip esp32c5 -o esp32c5-wroom-1-psram -o alloc -o log -o unstable-hal -o wifi -o esp-backtrace -o embassy - - esp_println::logger::init_logger_from_env(); - - let config = esp_hal::Config::default().with_cpu_clock(CpuClock::max()); - let peripherals = esp_hal::init(config); - - // The following pins are used to bootstrap the chip. They are available - // for use, but check the datasheet of the module for more information on them. - // - GPIO2 - // - GPIO3 - // - GPIO7 - // - GPIO25 - // - GPIO26 - // - GPIO27 - // - GPIO28 - - esp_alloc::heap_allocator!(#[esp_hal::ram(reclaimed)] size: 65536); - esp_alloc::psram_allocator!(peripherals.PSRAM, esp_hal::psram); - - let timg0 = TimerGroup::new(peripherals.TIMG0); - let sw_interrupt = - esp_hal::interrupt::software::SoftwareInterruptControl::new(peripherals.SW_INTERRUPT); - esp_rtos::start(timg0.timer0, sw_interrupt.software_interrupt0); - - info!("Embassy initialized!"); - - // Setup ST7789 screen - // SCL: D8/ GPIO8 (SPI_SCK) - // SDA: D10/ GPIO10 (SPI_MOSI) - // RES: D3/ GPIO7 - // DC: D4/ GPIO23 (display clear) - // CS: D5/ GPIO24 (chip select) - // BL: D1/ GPIO0 (backlight) - #[cfg(feature = "screen")] - let mut spi_buffer = [0_u8; 512]; - #[cfg(feature = "screen")] - let mut screen = { - // 172*320px in landscape orientation - let (display, width, height) = screen::make_small_display( - peripherals.GPIO8, - peripherals.GPIO10, - peripherals.GPIO7, - peripherals.GPIO23, - peripherals.GPIO24, - peripherals.GPIO0, - peripherals.SPI2, - &mut spi_buffer, - ) - .expect("Fatal error building screen"); - - let mut screen = screen::Handler::new(display, width, height); - - let _ = screen - .update(screen::ScreenState::Initial) - .inspect_err(log_screen_error); - - screen - }; - - // Setup UART I/O channel - #[cfg(feature = "uart")] - setup_uart0( - 115_200, - Some(b'\n'), - peripherals.GPIO12, - peripherals.GPIO11, - peripherals.UART0, - serial_handler, - ) - .expect("Failed to initialize UART"); - - // Setup WiFi - // sadly, it doesn't work any more when we move `esp_radio::wifi::new` to `setup_wifi_sniffer` - let (mut wifi_controller, interfaces) = esp_radio::wifi::new( - peripherals.WIFI, - esp_radio::wifi::ControllerConfig::default(), - ) - .expect("Failed to initialize Wi-Fi controller"); - - if let Err(err) = wifi_controller.set_band_mode(esp_radio::wifi::BandMode::_5G) { - error!("Failed to set WiFi to 5GHz only: {err}"); - } - if let Err(err) = wifi_controller.set_max_tx_power(WIFI_TXPOWER * 4) { - error!("Failed to set WiFi TX power: {err}"); - } - - critical_section::with(|cs| { - WIFI_RX_QUEUE.borrow(cs).replace(Some(ArrayQueue::new(2))); - }); - let mut wlan_iface = interfaces.sniffer; - radio::setup_wifi_sniffer(WIFI_CHANNEL, &mut wlan_iface, handle_frame) - .expect("Fatal error initializing 802.11p sniffer"); - - info!("WiFi promiscuous mode on channel {WIFI_CHANNEL} running"); - - let mac = esp_hal::efuse::base_mac_address(); - info!("WiFi MAC: {mac}"); - - // Setup GNSS: - // Seeed XIAO L67K: - // RX: D7/ GPIO12 - // TX: D6/ GPIO11 - // WAKEUP: D0/ GPIO1 -> HIGH for active, LOW for Sleep - // RESET: D2/ GPIO25 -> HIGH for normal, LOW for Reset - #[cfg(feature = "gnss_l67k")] - spawner.spawn( - gnss_l67k_task( - peripherals.GPIO1, - peripherals.GPIO25, - peripherals.UART0, - peripherals.GPIO12, - peripherals.GPIO11, - ) - .expect("Failed to spawn GNSS task"), - ); - - // U-Blox module: - // RX: D7/ GPIO12 - // TX: D6/ GPIO11 - // RESET: D2/ GPIO25 -> HIGH for normal, LOW for Reset - #[cfg(feature = "gnss_ubx")] - { - setup_uart0( - 9600, - Some(b'\n'), - peripherals.GPIO12, - peripherals.GPIO11, - peripherals.UART0, - serial_handler, - ) - .expect("Failed to initialize UART for GNSS"); - - // do some settings (UART receive and parsing runs in main loop) - spawner - .spawn(gnss_ubx_config(peripherals.GPIO25).expect("Failed to spawn GNSS config task")); - } - - #[cfg(feature = "_gnss")] - info!("GNSS task started, waiting for GNSS fix..."); - - #[cfg(any(feature = "cam_tx", feature = "uart"))] - let (mut seq_no, mac_bytes) = { - // unwrap is fine since [`esp_hal::efuse::MacAddress`] is just an `[u8; 6]` - let mac_bytes = mac.as_bytes().try_into().unwrap(); - - (0, mac_bytes) - }; - - let mut state = applogic::State::new(); - #[cfg(feature = "cam_tx")] - let mut cam = { - let station_id = make_station_id(mac); - info!("V2X Station ID: {station_id}"); - - applogic::cam_tx::CamState::new( - station_id, - OWN_STATION_TYPE, - OWN_VEHICLE_LENGTH, - OWN_VEHICLE_WIDTH, - ) - }; - #[cfg(feature = "uart")] - let mut uart_input = io::Parser::default(); - #[cfg(feature = "gnss_ubx")] - let mut ubx_parser = ublox::Parser::default(); - loop { - embassy_time::Timer::after(embassy_time::Duration::from_millis(1)).await; - - #[cfg(feature = "_uart")] - { - let mut new_data = None; - critical_section::with(|cs| { - let mut buf_rc = UART_RX_BUF.borrow(cs).borrow_mut(); - // unwrap is fine b/c we stored something in it before - let buf = buf_rc.as_mut().unwrap(); - - // we move the buffer to new_data to do the processing outside of the critical section lock - if !buf.is_empty() { - new_data = Some(core::mem::take(buf)); - } - }); - - if let Some(data) = new_data { - #[cfg(feature = "uart")] - { - for msg in uart_input.parse(&data) { - match msg.payload { - Some(io::msg::serial_input_msg::Payload::Position(fix)) => { - let pos_state = fix.into(); - - critical_section::with(|cs| { - let gnss_update_ref = GNSS_UPDATE.borrow(cs); - gnss_update_ref.replace(Some(pos_state)); - }); - } - Some(io::msg::serial_input_msg::Payload::TxMsg(tx_request)) => { - use esp32_cits_core::tx::GnItsPayload as _; - - info!( - "UART: Got new TX message: Type {} with {} bytes", - tx_request.message_type, - tx_request.payload.len() - ); - let own_position = state.pos(); - let time = state.time().and_utc(); - - match tx_request.encode_packet( - mac_bytes, - own_position, - time, - GN_IS_MOBILE, - &mut seq_no, - ) { - Ok(data) => { - if let Err(err) = radio::send_80211_bcast_frame( - &mut wlan_iface, - &mac_bytes.clone(), - &data, - ) { - warn!("Failed to send 802.11 frame: {err}"); - } - } - Err(err) => warn!("Failed to create GN message: {err}"), - } - } - None => {} - } - } - } - #[cfg(feature = "gnss_ubx")] - { - let mut it = ubx_parser.consume_ubx(&data); - loop { - match it.next() { - Some(Ok(ublox::UbxPacket::Proto27(packet_ref))) => match &packet_ref { - ublox::proto27::PacketRef::MonVer(packet) => { - println!("{}", ubx::pretty_print_mon_ver(packet)); - } - ublox::proto27::PacketRef::MonComms(packet) => { - println!("{}", ubx::pretty_print_mon_comms(packet)); - } - ublox::proto27::PacketRef::MonRf(packet) => { - println!("{}", ubx::pretty_print_mon_rf(packet)); - } - ublox::proto27::PacketRef::NavSat(packet) => { - println!("{}", ubx::pretty_print_nav_sat(packet)); - } - ublox::proto27::PacketRef::NavPvt(pvt) => { - match applogic::GnssFix::try_from(pvt) { - Ok(pos_state) => { - critical_section::with(|cs| { - let gnss_update_ref = GNSS_UPDATE.borrow(cs); - gnss_update_ref.replace(Some(pos_state)); - }); - } - Err(err) => warn!("{err}"), - } - } - _ => { - println!("UBX: {packet_ref:?}"); - } - }, - Some(Err(_)) => { - // Received a malformed packet - } - None => { - // The internal buffer is now empty - break; - } - } - } - } - } - } - - #[cfg(feature = "_gnss")] - { - let mut new_position = false; - critical_section::with(|cs| { - let gnss_update_ref = GNSS_UPDATE.borrow(cs); - - if let Some(fix) = gnss_update_ref.replace(None) { - state.update_with_gpsfix(&fix); - new_position = true; - - #[cfg(feature = "cam_tx")] - { - use esp32_cits_core::tx::GnItsPayload as _; - let time = state.time().and_utc(); - - cam.update(time, fix.clone().into()); - - match cam.encode_packet( - mac_bytes, - &fix.into(), - time, - GN_IS_MOBILE, - &mut seq_no, - ) { - Ok(data) => { - if let Err(err) = radio::send_80211_bcast_frame( - &mut wlan_iface, - &mac_bytes.clone(), - &data, - ) { - warn!("Failed to send 802.11 frame: {err}"); - } - } - Err(err) => warn!("Failed to create CAM: {err}"), - } - } - } - }); - - if new_position { - info!("{}", state.print_fix()); - - // run GLOSA algorithm - #[cfg(feature = "spat")] - { - let glosa_data = state.run_glosa(); - - if let applogic::GlosaOutput::Locked(data) = &glosa_data { - for sig in &data.signal_groups { - let duration_str = sig - .end_sec - .map(|v| alloc::format!("for {v} s")) - .unwrap_or_default(); - println!("GLOSA: {} {} {duration_str}", sig.maneuver, sig.phase); - } - } - - #[cfg(feature = "screen")] - let _ = screen - .update(glosa_data.into()) - .inspect_err(log_screen_error); - } - } - } - - let mut new_data = None; - critical_section::with(|cs| { - let queue_rc = WIFI_RX_QUEUE.borrow(cs).borrow(); - // unwrap is fine b/c we stored something in it before - let queue = queue_rc.as_ref().unwrap(); - - if let Some(data) = queue.pop() { - new_data = Some(data); - } - }); - if let Some(data) = new_data { - match c_its_parser::de::decode(&data, c_its_parser::Headers::None) { - Ok(msg) => { - use c_its_parser::ItsMessage; - // use c_its_parser::standards::extensions::ItsMessageId; - - // info!("Got new {:?} message", ItsMessageId::from(&msg)); - - match msg { - #[cfg(feature = "spat")] - ItsMessage::Mapem { - geonetworking: _, - transport: _, - etsi, - } => state.handle_mapem(&etsi), - #[cfg(feature = "spat")] - ItsMessage::Spatem { - geonetworking: _, - transport: _, - etsi, - } => { - if state.initialized() { - state.handle_spatem(&etsi); - } - } - - #[cfg(any(feature = "cam", feature = "cam_tx"))] - ItsMessage::Cam { - geonetworking: _, - transport: _, - etsi, - } => { - #[cfg(feature = "cam")] - applogic::cam::handle_cam(&etsi); - } - - #[cfg(feature = "denm")] - ItsMessage::DenmV2 { - geonetworking: _, - transport: _, - etsi, - } => applogic::denm::handle_denm(&etsi), - #[cfg(feature = "denm")] - ItsMessage::DenmV1 { - geonetworking: _, - transport: _, - etsi: _, - } => { - // irrelevant since all received DENMs should be parsed as v2 - } - } - } - Err(err) => { - // we already filtered out all unsupported message types in the wifi rx callback - // so these are actual errors - warn!("Failed to parse V2X message: {err}"); - } - } - } - - // maintenance - state.prune(); - } -} - -#[allow( - clippy::needless_pass_by_value, - reason = "adhering to callback interface" -)] -#[allow(clippy::too_many_lines)] -fn handle_frame(frame: esp_radio::wifi::sniffer::PromiscuousPkt<'_>) { - #[cfg(feature = "spat")] - const PRUNE_INTERVAL: chrono::Duration = chrono::Duration::seconds(60); - #[cfg(feature = "spat")] - static mut RATELIMIT_CACHE_LAST_PRUNE: UnsafeCell = - UnsafeCell::new(chrono::NaiveDateTime::MIN); - - #[cfg(feature = "spat")] - static mut SPAT_RATELIMIT_CACHE: UnsafeCell> = UnsafeCell::new( - cache::Cache::::new(chrono::Duration::seconds(20)), - ); - - #[cfg(feature = "spat")] - let now = { - let time = esp_hal::time::Instant::now().duration_since_epoch(); - // unwrap is fine since value range is u64 microseconds - chrono::DateTime::from_timestamp(time.as_secs().cast_signed(), 0) - .unwrap() - .naive_utc() - }; - - match esp32_cits_core::rx::is_broadcast_frame(&frame) { - Err(err) => { - warn!("{err}"); - return; - } - Ok(false) => { - // drop frame - return; - } - Ok(true) => { - // continue - } - } - - // info!("Received frame with {} bytes", frame.len); - - // parse GN headers - match c_its_parser::pcap::remove_wlan_headers(frame.data) - .map_err(|err| alloc::format!("Failed to parse WLAN headers: {err}")) - .and_then(|data| { - geonetworking::Packet::decode(data) - .map_err(|err| alloc::format!("Failed to parse GN headers: {err:?}")) - }) { - Err(err) => { - warn!("{err}"); - } - Ok(packet) => { - // drop hopped (for now) - if packet.decoded.is_hopped() { - return; - } - - // "parse" ITS PDU Header - if let Ok((payload, message_id, station_id)) = get_its_header(&packet) { - // drop all unsupported message IDs and rate-limit SPATEMs - if match message_id { - #[cfg(feature = "denm")] - c_its_parser::standards::extensions::ItsMessageId::Denm => false, - #[cfg(feature = "cam")] - c_its_parser::standards::extensions::ItsMessageId::Cam => false, - #[cfg(feature = "spat")] - c_its_parser::standards::extensions::ItsMessageId::Spatem => { - // reduce SPAT rate per station ID - let mut drop_msg = false; - unsafe { - #[allow( - static_mut_refs, - reason = "this function will only run consecutive" - )] - let spat_cache = SPAT_RATELIMIT_CACHE.get(); - - (*spat_cache).update_or_init(now, station_id, |i| { - i.msg_count = i.msg_count.wrapping_add(1); - - if (i.msg_count % SPAT_RATE_LIMIT) > 0 { - drop_msg = true; - } - }); - } - - drop_msg - } - #[cfg(feature = "spat")] - c_its_parser::standards::extensions::ItsMessageId::Mapem => false, - _ => true, - } { - return; - } - - // Send data to main thread - critical_section::with(|cs| { - let queue_rc = WIFI_RX_QUEUE.borrow(cs).borrow(); - // unwrap is fine b/c we stored something in it before - let queue = queue_rc.as_ref().unwrap(); - - if queue.push(payload.to_vec()).is_err() { - error!("V2X RX queue is full"); - } - }); - - // Send data to UART - #[cfg(feature = "uart")] - { - let message = io::msg::RawMsgRx { - msg_type: message_id.as_u8().into(), - payload: frame.data.to_vec(), - } - .serialize_uart_proto(); - - send_uart0(&message); - } - } - } - } - - #[cfg(feature = "spat")] - unsafe { - #[allow(static_mut_refs, reason = "this function will only run consecutive")] - let last_prune_time = RATELIMIT_CACHE_LAST_PRUNE.get(); - if *last_prune_time + PRUNE_INTERVAL < now { - #[allow(static_mut_refs, reason = "this function will only run consecutive")] - let spat_cache = SPAT_RATELIMIT_CACHE.get(); - (*spat_cache).prune(now); - - *last_prune_time = now; - } - } -} - -#[cfg(feature = "spat")] -#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)] -struct RatelimitData { - station_id: u32, - msg_count: u8, -} - -#[cfg(feature = "spat")] -impl cache::Cachable for RatelimitData { - fn key(&self) -> u32 { - self.station_id - } -} -#[cfg(feature = "spat")] -impl cache::Initable for RatelimitData { - fn init(key: u32) -> Self { - Self { - station_id: key, - ..Default::default() - } - } -} - -fn get_its_header<'p>( - packet: &geonetworking::Decoded>, -) -> Result< - ( - &'p [u8], - c_its_parser::standards::extensions::ItsMessageId, - u32, - ), - alloc::string::String, -> { - let payload = packet.decoded.btp_payload()?; - - if payload.len() < 6 { - return Err("ITS payload too small for ItsPduHeader".to_string()); - } - - if let Ok(message_id) = payload[1].try_into() { - let station_id_buf: [u8; 4] = payload[2..6].try_into().unwrap(); - let station_id = u32::from_be_bytes(station_id_buf); - - Ok((payload, message_id, station_id)) - } else { - Err("Unknown message ID in ItsPduHeader".to_string()) - } -} - -#[cfg(feature = "gnss_l67k")] -#[allow(clippy::large_stack_frames, reason = "GNSS driver needs some space")] -#[embassy_executor::task] -async fn gnss_l67k_task( - gps_wakeup: esp_hal::peripherals::GPIO1<'static>, - gps_reset: esp_hal::peripherals::GPIO25<'static>, - uart: esp_hal::peripherals::UART0<'static>, - uart_rx: esp_hal::peripherals::GPIO12<'static>, - uart_tx: esp_hal::peripherals::GPIO11<'static>, -) { - use embassy_gps::gps::GpsFsm; - - let mut gps = l76k::esp::L76kFsm::new_sep( - l76k::esp::GpsHw { - reinit: gps_reset, - standby: gps_wakeup, - }, - || { - esp_hal::uart::Uart::new(uart, esp_hal::uart::Config::default().with_baudrate(9600)) - .expect("Failed to create UART for GNSS") - .with_rx(uart_rx) - .with_tx(uart_tx) - .into_async() - }, - ) - .await; - - let mut fix_drop_message = false; - loop { - if let Ok(Some(embassy_gps::types::GpsEvent::Fix(fix))) = gps.step().await { - // drop every second message as we always get each fix twice - fix_drop_message = !fix_drop_message; - if fix_drop_message { - // send to main thread - let pos_state = applogic::GnssFix { - time: fix.get_timestamp(), - latitude_deg: fix.latitude_deg, - longitude_deg: fix.longitude_deg, - heading_deg: fix.true_course_deg, - speed_mps: fix.speed_over_ground, - }; - - critical_section::with(|cs| { - let gnss_update_ref = GNSS_UPDATE.borrow(cs); - gnss_update_ref.replace(Some(pos_state)); - }); - } - } else { - // FSM will recover automatically from errors and ignore other event types - } - } -} - -#[cfg(feature = "gnss_ubx")] -#[embassy_executor::task] -async fn gnss_ubx_config(reset_pin: esp_hal::peripherals::GPIO25<'static>) { - // reset the module - let mut gnss_reset = esp_hal::gpio::Output::new( - reset_pin, - esp_hal::gpio::Level::Low, - esp_hal::gpio::OutputConfig::default(), - ); - embassy_time::Timer::after(embassy_time::Duration::from_millis(2)).await; - gnss_reset.set_high(); - - embassy_time::Timer::after(embassy_time::Duration::from_secs(1)).await; - - info!("UBX: Enabling ubx protocol with NAV-PVT and NAV-SAT"); - let buffer = ublox::packets::cfg_val::CfgValSetBuilder { - version: 1, - layers: ublox::packets::cfg_val::CfgLayerSet::RAM, - reserved1: 0, - cfg_data: &[ - ublox::cfg_val::CfgVal::Uart1OutProtNmea(false), - ublox::cfg_val::CfgVal::Uart1OutProtUbx(true), - // CFG-MSGOUT-UBX_NAV_PVT_UART1 - ublox::cfg_val::CfgVal::MsgOutUbxNavPvtUart1(1), - // CFG-MSGOUT-UBX_NAV_SAT_UART1 - // ublox::cfg_val::CfgVal::MsgOutUbxNavSatUart1(10), - ], - } - .into_packet_vec(); - send_uart0(&buffer); -} - -#[cfg(feature = "screen")] -fn log_screen_error(error: &E) -where - E: core::fmt::Debug, -{ - error!("graphics failed: {error:?}"); -} - -#[cfg(feature = "_uart")] -/// Configures UART0 with an interrupt handler and saves it to `SERIAL` -fn setup_uart0( - baud: u32, - cmd_char: Option, - gpio12: esp_hal::peripherals::GPIO12<'static>, - gpio11: esp_hal::peripherals::GPIO11<'static>, - uart0: esp_hal::peripherals::UART0<'static>, - handler: esp_hal::interrupt::InterruptHandler, -) -> Result<(), alloc::string::String> { - critical_section::with(|cs| { - UART_RX_BUF - .borrow(cs) - .replace(Some(alloc::vec::Vec::with_capacity(255))); - }); - - let mut uart = esp_hal::uart::Uart::new( - uart0, - esp_hal::uart::Config::default() - .with_baudrate(baud) - .with_rx( - esp_hal::uart::RxConfig::default() - .with_fifo_full_threshold(u16::from(SERIAL_FIFO_SIZE_THLD)) - .with_timeout(50), - ), - ) - .map_err(|err| alloc::format!("UART0 config error: {err}"))? - .with_rx(gpio12) - .with_tx(gpio11); - - if let Some(char) = cmd_char { - uart.set_at_cmd( - esp_hal::uart::AtCmdConfig::default() - .with_cmd_char(char) - .with_char_num(1) - .with_pre_idle_count(0) // command start can be right after other data - .with_post_idle_count(0) // we don't expect a gap between the command start and subsequent text - .with_gap_timeout(5), // needs to be >0 to work - ); - } - uart.set_interrupt_handler(handler); - uart.listen( - esp_hal::uart::UartInterrupt::AtCmd - | esp_hal::uart::UartInterrupt::RxTimeout - | esp_hal::uart::UartInterrupt::RxFifoFull, // just to be save - ); - - critical_section::with(|cs| SERIAL.borrow_ref_mut(cs).replace(uart)); - - Ok(()) -} - -#[cfg(feature = "_uart")] -#[esp_hal::handler] -fn serial_handler() { - critical_section::with(|cs| { - let mut serial = SERIAL.borrow_ref_mut(cs); - let mut uart_buf = UART_RX_BUF.borrow_ref_mut(cs); - - if let (Some(serial), Some(uart_buf)) = (serial.as_mut(), uart_buf.as_mut()) { - let mut buf = [0u8; SERIAL_FIFO_SIZE_THLD as usize]; - - match serial.read_buffered(&mut buf) { - Ok(0) => {} - Ok(len) => { - uart_buf.extend_from_slice(&buf[..len]); - } - Err(err) => error!("Failed to read from UART: {err}"), - } - - serial.clear_interrupts( - esp_hal::uart::UartInterrupt::RxFifoFull - | esp_hal::uart::UartInterrupt::RxTimeout - | esp_hal::uart::UartInterrupt::AtCmd, - ); - } - }); -} - -#[cfg(feature = "_uart")] -fn send_uart0(data: &[u8]) { - critical_section::with(|cs| { - let mut serial = SERIAL.borrow_ref_mut(cs); - - if let Some(serial) = serial.as_mut() - && let Err(err) = serial.write(data) - { - error!("Failed to write to UART: {err:?}"); - } - }); -} - -#[cfg(all(feature = "esp", feature = "cam_tx"))] -/// Creates a station ID from the WLAN MAC address -/// -/// Will use `0xC173` as static prefix and uses last 16 bit from MAC address for the remainder. -/// -/// # Panics -/// Won't panic in practive b/c of pre-conditions -#[must_use] -pub fn make_station_id(mac: esp_hal::efuse::MacAddress) -> u32 { - // unwrap is fine here since we can be sure that the MacAddress is 6 byte - // and a slice of 2 bytes can be converted to [u8; 2] - let mac_last_16bit = u16::from_be_bytes(mac.as_bytes().get(4..6).unwrap().try_into().unwrap()); - - 0xC173_0000 | u32::from(mac_last_16bit) -} diff --git a/src/screen.rs b/src/screen.rs deleted file mode 100644 index b2ddf90..0000000 --- a/src/screen.rs +++ /dev/null @@ -1,470 +0,0 @@ -//! Screen Output - -use embedded_graphics::prelude::*; -use embedded_graphics::{geometry, mono_font, pixelcolor, primitives, text}; - -use crate::applogic; - -pub struct Handler -where - D: DrawTarget, -{ - target: D, - width: u16, - height: u16, - - // internal state - prev_state: ScreenState, - hb_state: bool, -} - -#[derive(Debug, Default, PartialEq, Eq)] -pub enum ScreenState { - #[default] - Uninitialized, - /// aka. "no GNSS fix" or "splash screen" - Initial, - Error(alloc::string::String), - #[cfg(feature = "spat")] - GlosaSearching(applogic::GlosaSearching), - #[cfg(feature = "spat")] - GlosaFound(applogic::GlosaFound), - #[cfg(feature = "spat")] - GlosaLocked(applogic::GlosaSignalInfo), -} - -#[cfg(feature = "spat")] -impl From for ScreenState { - fn from(value: applogic::GlosaOutput) -> Self { - match value { - applogic::GlosaOutput::Searching(glosa_searching) => { - Self::GlosaSearching(glosa_searching) - } - applogic::GlosaOutput::Found(glosa_found) => Self::GlosaFound(glosa_found), - applogic::GlosaOutput::Locked(glosa_signal_info) => { - Self::GlosaLocked(glosa_signal_info) - } - applogic::GlosaOutput::Error(err_str) => Self::Error(err_str), - } - } -} - -impl Handler -where - D: DrawTarget, -{ - const COLOR_BG: pixelcolor::Rgb565 = pixelcolor::Rgb565::BLACK; - const COLOR_FG: pixelcolor::Rgb565 = pixelcolor::Rgb565::WHITE; - - const BK_STYLE: primitives::PrimitiveStyle = - primitives::PrimitiveStyleBuilder::new() - .fill_color(Self::COLOR_BG) - .build(); - const RD_STYLE: primitives::PrimitiveStyle = - primitives::PrimitiveStyleBuilder::new() - .fill_color(pixelcolor::Rgb565::CSS_RED) - .build(); - const YE_STYLE: primitives::PrimitiveStyle = - primitives::PrimitiveStyleBuilder::new() - .fill_color(pixelcolor::Rgb565::new(31, 55, 0)) - .build(); - const GN_STYLE: primitives::PrimitiveStyle = - primitives::PrimitiveStyleBuilder::new() - .fill_color(pixelcolor::Rgb565::new(10, 50, 0)) - .build(); - const BLANK_SIGNAL_STYLE: primitives::PrimitiveStyle = - primitives::PrimitiveStyleBuilder::new() - .fill_color(pixelcolor::Rgb565::CSS_GRAY) - .build(); - - const DEFAULT_TEXT_STYLE: mono_font::MonoTextStyle<'static, pixelcolor::Rgb565> = - mono_font::MonoTextStyle::new(&profont::PROFONT_24_POINT, Self::COLOR_FG); - const SMALL_TEXT_STYLE: mono_font::MonoTextStyle<'static, pixelcolor::Rgb565> = - mono_font::MonoTextStyle::new(&profont::PROFONT_14_POINT, Self::COLOR_FG); - - pub fn new(target: D, width: u16, height: u16) -> Self { - Self { - target, - width, - height, - prev_state: ScreenState::Uninitialized, - hb_state: false, - } - } - - pub fn update(&mut self, state: ScreenState) -> Result<(), D::Error> { - if self.prev_state != state { - match &state { - ScreenState::Uninitialized | ScreenState::Initial => self.draw_slash_screen()?, - ScreenState::GlosaSearching(_glosa_searching) => self.draw_glosa_searching()?, - ScreenState::GlosaFound(glosa_found) => self.draw_glosa_found(glosa_found)?, - ScreenState::GlosaLocked(glosa_data) => { - let prev_glosa_data = - if let ScreenState::GlosaLocked(prev_glosa_data) = &self.prev_state { - Some(prev_glosa_data.clone()) - } else { - None - }; - - self.draw_glosa(glosa_data, prev_glosa_data)?; - } - ScreenState::Error(msg) => self.draw_message(msg)?, - } - } - - // Update indicator/ heartbeat - { - let update_ind_dia = 10; - let circle_x_pos = i32::from(self.width) - update_ind_dia - 10; - - text::Text::with_alignment( - "HB", - geometry::Point::new(circle_x_pos - 5, 10), - Self::SMALL_TEXT_STYLE, - text::Alignment::Right, - ) - .draw(&mut self.target)?; - - primitives::Circle::new( - geometry::Point::new(circle_x_pos, 2), - update_ind_dia.cast_unsigned(), - ) - .into_styled(if self.hb_state { - Self::GN_STYLE - } else { - Self::BK_STYLE - }) - .draw(&mut self.target)?; - } - - self.prev_state = state; - self.hb_state = !self.hb_state; - - Ok(()) - } - - fn clear(&mut self) -> Result<(), D::Error> - where - D: DrawTarget, - { - primitives::Rectangle::new( - geometry::Point::new(0, 0), - geometry::Size::new(self.width.into(), self.height.into()), - ) - .into_styled(Self::BK_STYLE) - .draw(&mut self.target)?; - - Ok(()) - } - - #[allow(unused)] - pub fn test_img(&mut self) -> Result<(), D::Error> { - mipidsi::TestImage::new().draw(&mut self.target)?; - - Ok(()) - } - - #[allow(unused)] - pub fn draw_message(&mut self, msg: &str) -> Result<(), D::Error> { - // clear whole display and draw text - self.clear()?; - - text::Text::with_alignment( - msg, - geometry::Point::new(i32::from(self.width) / 2, 40), - Self::DEFAULT_TEXT_STYLE, - text::Alignment::Center, - ) - .draw(&mut self.target)?; - - Ok(()) - } - - #[allow(unused)] - fn draw_glosa_searching(&mut self) -> Result<(), D::Error> { - // clear whole display and draw text - self.clear()?; - - text::Text::with_alignment( - "No upcoming SPAT", - geometry::Point::new(i32::from(self.width) / 2, 130), - Self::DEFAULT_TEXT_STYLE, - text::Alignment::Center, - ) - .draw(&mut self.target)?; - - Ok(()) - } - - #[allow(unused)] - fn draw_glosa_found(&mut self, data: &applogic::GlosaFound) -> Result<(), D::Error> { - // clear whole display and draw text - self.clear()?; - - let text = if let Some(appr) = data.approach_id { - alloc::format!("Int. {}\nApproach {appr}", data.intersection_id) - } else { - alloc::format!("Int. {}\nno approach ID available", data.intersection_id) - }; - - text::Text::with_alignment( - &text, - geometry::Point::new(i32::from(self.width) / 2, 130), - Self::DEFAULT_TEXT_STYLE, - text::Alignment::Center, - ) - .draw(&mut self.target)?; - - Ok(()) - } - - #[allow(unused)] - fn draw_glosa( - &mut self, - data: &applogic::GlosaSignalInfo, - prev_data: Option, - ) -> Result<(), D::Error> { - let num_signals = data.signal_groups.len(); - - if let Some(prev) = prev_data - && prev.signal_groups.len() != num_signals - { - // clear everything if number of signals has changed - self.clear(); - } else { - // only clear maneuver and timing area otherwise - - primitives::Rectangle::new( - geometry::Point::new(0, 105), - geometry::Size::new(self.width.into(), 67), - ) - .into_styled(Self::BK_STYLE) - .draw(&mut self.target)?; - } - - // draw intersection ID - text::Text::new( - &alloc::format!("#{}", data.intersection_id), - geometry::Point::new(15, 10), - Self::SMALL_TEXT_STYLE, - ) - .draw(&mut self.target)?; - - #[allow(clippy::cast_possible_truncation, clippy::cast_possible_wrap)] - let sig_width = i32::from(self.width) / (num_signals as i32); - - for (idx, sig) in data.signal_groups.iter().enumerate() { - #[allow(clippy::cast_possible_truncation, clippy::cast_possible_wrap)] - let offset = (idx as i32) * sig_width; - - let circle_dia = 50; - let circle_margin = (sig_width - circle_dia) / 2; - let centerline = offset + (sig_width / 2); - - // draw phase color - let style = match sig.phase { - applogic::SignalPhase::Unknown => Self::BLANK_SIGNAL_STYLE, - applogic::SignalPhase::Red => Self::RD_STYLE, - applogic::SignalPhase::Green => Self::GN_STYLE, - applogic::SignalPhase::RedYellow | applogic::SignalPhase::Yellow => Self::YE_STYLE, - }; - primitives::Circle::new( - geometry::Point::new(offset + circle_margin, 15), - circle_dia.cast_unsigned(), - ) - .into_styled(style) - .draw(&mut self.target)?; - - // TODO: draw lane type? - - // draw maneuver - text::Text::with_alignment( - &maneuver_to_str(sig.maneuver), - geometry::Point::new(centerline, 130), - Self::DEFAULT_TEXT_STYLE, - text::Alignment::Center, - ) - .draw(&mut self.target)?; - - // draw timing indicator - if let Some(end_sec) = sig.end_sec { - text::Text::with_alignment( - &alloc::format!("{end_sec}s"), - geometry::Point::new(centerline, 160), - Self::DEFAULT_TEXT_STYLE, - text::Alignment::Center, - ) - .draw(&mut self.target)?; - } - } - - Ok(()) - } - - #[allow(unused)] - fn draw_slash_screen(&mut self) -> Result<(), D::Error> { - let text_style = mono_font::MonoTextStyle::new(&profont::PROFONT_18_POINT, Self::COLOR_FG); - - self.clear()?; - - let sig_width = i32::from(self.width) / 3; - let circle_dia = 50; - let circle_margin = (sig_width - circle_dia) / 2; - - for (idx, style) in [Self::RD_STYLE, Self::YE_STYLE, Self::GN_STYLE] - .iter() - .enumerate() - { - #[allow(clippy::cast_possible_truncation, clippy::cast_possible_wrap)] - let offset = (idx as i32) * sig_width; - - primitives::Circle::new( - geometry::Point::new(offset + circle_margin, 15), - circle_dia.cast_unsigned(), - ) - .into_styled(*style) - .draw(&mut self.target)?; - } - - // draw welcome text - let centerline = i32::from(self.width) / 2; - text::Text::with_alignment( - "C-ITS Signal Phase Display\nWaiting for GNSS fix...", - geometry::Point::new(centerline, 130), - text_style, - text::Alignment::Center, - ) - .draw(&mut self.target)?; - - Ok(()) - } -} - -fn maneuver_to_str(value: applogic::v2x::map::Maneuvers) -> alloc::string::String { - alloc::format!( - "{}{}{}", - if value.left_allowed { "<" } else { " " }, - if value.staight_allowed { "^" } else { " " }, - if value.right_allowed { ">" } else { " " }, - ) -} - -/// Creates an [`mipidsi::Display`], width, height tuple for an ST7789 172*320px screen in landscape orientation -/// -/// # Errors -/// Human-readable fatal errors -#[allow(clippy::too_many_arguments, clippy::type_complexity)] -pub fn make_small_display( - scl: IoScl, - sda: IoSda, - res: IoRes, - dc: IoDc, - cs: IoCs, - bl: IoBl, - spi: Spi, - spi_buffer: &mut [u8], -) -> Result< - ( - mipidsi::Display< - mipidsi::interface::SpiInterface< - '_, - embedded_hal_bus::spi::ExclusiveDevice< - esp_hal::spi::master::Spi<'_, esp_hal::Blocking>, - esp_hal::gpio::Output<'_>, - embedded_hal_bus::spi::NoDelay, - >, - esp_hal::gpio::Output<'_>, - >, - mipidsi::models::ST7789, - esp_hal::gpio::Output<'_>, - >, - u16, - u16, - ), - alloc::string::String, -> -where - IoScl: esp_hal::gpio::interconnect::PeripheralOutput<'static>, - IoSda: esp_hal::gpio::interconnect::PeripheralOutput<'static>, - IoRes: - esp_hal::gpio::interconnect::PeripheralOutput<'static> + esp_hal::gpio::OutputPin + 'static, - IoDc: - esp_hal::gpio::interconnect::PeripheralOutput<'static> + esp_hal::gpio::OutputPin + 'static, - IoCs: - esp_hal::gpio::interconnect::PeripheralOutput<'static> + esp_hal::gpio::OutputPin + 'static, - IoBl: - esp_hal::gpio::interconnect::PeripheralOutput<'static> + esp_hal::gpio::OutputPin + 'static, - Spi: esp_hal::spi::master::Instance + 'static, -{ - const DISPLAY_WIDTH: u16 = 320; - const DISPLAY_HEIGHT: u16 = 172; - const DISPLAY_HIDDEN_X: u16 = 34; // somehow this display has 34 px of invisible space on the left (in native orientation) - - let (spi, cs) = setup_st7789_spi(scl, sda, cs, spi) - .map_err(|err| alloc::format!("Failed to build SPI config: {err}"))?; - - let output_config = esp_hal::gpio::OutputConfig::default(); - let dc_output = esp_hal::gpio::Output::new(dc, esp_hal::gpio::Level::Low, output_config); - let rst_output = esp_hal::gpio::Output::new(res, esp_hal::gpio::Level::High, output_config); - let _ = esp_hal::gpio::Output::new(bl, esp_hal::gpio::Level::High, output_config); // enable backlight - - let mut display_delay = esp_hal::delay::Delay::new(); - - let spi_device = embedded_hal_bus::spi::ExclusiveDevice::new_no_delay(spi, cs) - .map_err(|err| alloc::format!("Failed to initialize SPI device: {err}"))?; - - let display = mipidsi::Builder::new( - mipidsi::models::ST7789, - mipidsi::interface::SpiInterface::new(spi_device, dc_output, spi_buffer), - ) - .display_size(DISPLAY_HEIGHT + DISPLAY_HIDDEN_X, DISPLAY_WIDTH) - .reset_pin(rst_output) - .invert_colors(mipidsi::options::ColorInversion::Inverted) - .orientation(mipidsi::options::Orientation::new().rotate(mipidsi::options::Rotation::Deg90)) - .init(&mut display_delay) - .map_err(|err| alloc::format!("Failed to initialize display: {err:?}"))?; - - Ok((display, DISPLAY_WIDTH, DISPLAY_HEIGHT)) -} - -/// Builds the SPI interface for the ST7789 display -/// -/// Returns (spi master, chip-select) tuple -/// -/// # Errors -/// Returns SPI config error when SPI setup failed -fn setup_st7789_spi( - scl: IoScl, - sda: IoSda, - cs: IoCs, - spi: Spi, -) -> Result< - ( - esp_hal::spi::master::Spi<'static, esp_hal::Blocking>, - esp_hal::gpio::Output<'static>, - ), - esp_hal::spi::master::ConfigError, -> -where - IoScl: esp_hal::gpio::interconnect::PeripheralOutput<'static>, - IoSda: esp_hal::gpio::interconnect::PeripheralOutput<'static>, - IoCs: - esp_hal::gpio::interconnect::PeripheralOutput<'static> + esp_hal::gpio::OutputPin + 'static, - Spi: esp_hal::spi::master::Instance + 'static, -{ - let spi_config = esp_hal::spi::master::Config::default() - .with_frequency(esp_hal::time::Rate::from_mhz(40)) - .with_mode(esp_hal::spi::Mode::_0); - let spi: esp_hal::spi::master::Spi<'_, esp_hal::Blocking> = - esp_hal::spi::master::Spi::new(spi, spi_config)? - .with_sck(scl) - .with_mosi(sda); - - let cs_output = esp_hal::gpio::Output::new( - cs, - esp_hal::gpio::Level::High, - esp_hal::gpio::OutputConfig::default(), - ); - - Ok((spi, cs_output)) -} diff --git a/src/test.rs b/src/test.rs deleted file mode 100644 index a7a5bb5..0000000 --- a/src/test.rs +++ /dev/null @@ -1,24 +0,0 @@ -#![cfg(not(target_arch = "riscv32"))] -#![allow(unused)] - -extern crate alloc; - -mod applogic; -mod cache; -mod geo_alg; -mod io; -mod testdata; - -fn main() { - // env_logger::init(); - // dummy only -} - -/// Initializes the env-logger to be used inside tests -fn init_test_env_logger() { - let _ = env_logger::builder() - .format_timestamp(None) - .filter_level(log::LevelFilter::Debug) - .is_test(true) - .try_init(); -} diff --git a/src/testdata.rs b/src/testdata.rs deleted file mode 100644 index fa884d6..0000000 --- a/src/testdata.rs +++ /dev/null @@ -1,465 +0,0 @@ -//! Central provider for V2X test messages -//! -//! All messages are without any headers (so they start with the ItsPduHeader) - -#![cfg(all(not(target_arch = "riscv32"), any(feature = "spat", feature = "cam")))] -#![allow(unused)] - -/// Intersection "Sievekingplatz-Südfahrbahn/Ziviljustizgebäude" -/// -/// Pedestrian crossing over a one-way street (going from west to east) -/// -/// Possible start point (heading 90° to 135°): -/// - in front: `geo_types::Point::new(9.9752864, 53.5564028)` -/// - at lane: `geo_types::Point::new(9.9760764, 53.5563621)` -/// - passed: `geo_types::Point::new(9.977217, 53.5560602)` -#[cfg(feature = "spat")] -pub const MAPEM_HH_1328: &[u8] = &[ - 0x2, 0x5, 0x0, 0x12, 0x19, 0x8c, 0x8, 0x0, 0x3, 0x9, 0xcd, 0x83, 0x42, 0xfc, 0x9a, 0x94, 0xef, - 0xb1, 0x67, 0x71, 0x8b, 0x36, 0x4e, 0x2e, 0x31, 0x60, 0xb9, 0xa4, 0x0, 0xc, 0x14, 0xc0, 0x20, - 0xab, 0x21, 0xda, 0x5c, 0xe2, 0x78, 0x72, 0x74, 0x5, 0x14, 0x18, 0x90, 0x4, 0x50, 0x80, 0x0, - 0x0, 0x85, 0xc, 0x5c, 0xa8, 0xa0, 0x0, 0x80, 0x23, 0xc1, 0x42, 0x7e, 0xa8, 0x58, 0x46, 0x1d, - 0xa0, 0x11, 0xef, 0x4d, 0xf0, 0x45, 0xa5, 0x56, 0x8, 0x2d, 0xa6, 0x2, 0x30, 0xc9, 0x26, 0x11, - 0xb7, 0xc5, 0x90, 0x84, 0xca, 0x16, 0xc1, 0x60, 0x70, 0x0, 0x2, 0x2, 0x20, 0x6, 0x44, 0x40, - 0x0, 0x0, 0x0, 0x8f, 0x5, 0xf8, 0x83, 0xed, 0x8c, 0x19, 0x20, 0x10, 0xa1, 0x0, 0x0, 0x1, 0xa, - 0x23, 0x2a, 0x63, 0x40, 0x1, 0x9, 0xb9, 0xa7, 0x40, 0x25, 0xec, 0x21, 0x17, 0xad, 0x3c, 0x8, - 0xef, 0x66, 0xfc, 0x47, 0xa1, 0x2e, 0x82, 0x39, 0x99, 0x2b, 0x11, 0xd2, 0xc7, 0x8, 0x8f, 0x32, - 0x18, 0x4, 0x70, 0x50, 0x8c, 0x2b, 0x5, 0x80, 0x0, 0x10, 0x25, 0x82, 0x40, 0x0, 0x8, 0x18, - 0x80, 0x29, 0x11, 0x0, 0x0, 0x0, 0x1, 0x17, 0x14, 0x80, 0x3f, 0x70, 0xf8, 0x88, 0x2, 0x11, - 0x10, 0x0, 0x0, 0x0, 0x11, 0x23, 0x38, 0x83, 0xe5, 0x8c, 0x90, 0x20, 0x33, 0x2, 0x4, 0x0, 0x0, - 0x1, 0x43, 0xd6, 0xe2, 0x8, 0x0, 0x20, 0x72, 0x5a, 0xd0, 0x50, 0x38, 0x10, 0x20, 0x20, 0x3b, - 0x2, 0x4, 0x0, 0x0, 0x1, 0x20, 0x23, 0x20, 0xa0, 0x0, 0x82, 0x37, 0x94, 0xc1, 0x40, 0xc0, 0x40, - 0xa0, -]; - -/// Intersection "Johannisbollwerk/Ditmar-Koel-Straße" -/// -/// Has a very complex geometry with multiple stop lines after each other. -/// Main traffic direction is east-west, has separate bike lanes. -/// -/// Possible start point (heading 90°): TODO -#[cfg(feature = "spat")] -pub const MAPEM_HH_2053: &[u8] = &[ - 0x2, 0x5, 0x0, 0x12, 0x43, 0x84, 0x8, 0x0, 0x3, 0x9, 0xcd, 0x83, 0x42, 0xfc, 0x9a, 0x94, 0xef, - 0xb2, 0x61, 0x71, 0x93, 0x6, 0xac, 0xee, 0x31, 0x66, 0xb9, 0x94, 0x0, 0xc, 0x20, 0x14, 0x10, - 0xab, 0x1e, 0x9c, 0x96, 0xe2, 0x77, 0x51, 0x1e, 0x5, 0x14, 0xc8, 0x90, 0x1c, 0xd0, 0x88, 0x0, - 0x0, 0x15, 0x8f, 0x5d, 0xb6, 0x88, 0x0, 0x20, 0xc, 0x8e, 0xb0, 0x1a, 0x4a, 0xb8, 0x2c, 0xa, - 0x0, 0x0, 0x40, 0x44, 0x0, 0x84, 0x88, 0x80, 0x0, 0x1, 0x9, 0xdd, 0xc0, 0x41, 0xdd, 0x54, 0xb0, - 0x59, 0xe9, 0x39, 0x4, 0x80, 0x64, 0x84, 0x0, 0x0, 0x0, 0xaa, 0x39, 0xc9, 0x5d, 0x0, 0x4, 0x5c, - 0x8c, 0x91, 0x84, 0xd8, 0x75, 0x3d, 0x21, 0x58, 0x34, 0x0, 0x3, 0x1, 0x2c, 0x8, 0x80, 0x0, - 0x81, 0x4, 0x1, 0x90, 0x88, 0x0, 0x0, 0x1, 0x18, 0xe6, 0x61, 0xa8, 0x13, 0xaf, 0x1d, 0xc0, - 0x98, 0xc4, 0x44, 0x80, 0x84, 0x84, 0x0, 0x0, 0x0, 0xaa, 0x11, 0x44, 0xe9, 0x0, 0x4, 0x5c, - 0x8c, 0x91, 0x84, 0xd8, 0xdd, 0x3c, 0x50, 0x58, 0x2c, 0x0, 0x3, 0x1, 0x88, 0x2, 0xa1, 0x10, - 0x0, 0x0, 0x2, 0x31, 0xa3, 0x3e, 0x34, 0x27, 0x7a, 0x38, 0x81, 0x38, 0x8a, 0xc9, 0x0, 0x45, - 0x8, 0x0, 0x0, 0x1, 0x48, 0x1a, 0xd6, 0x68, 0x0, 0x22, 0xcf, 0xe9, 0xc7, 0x1e, 0x92, 0xe7, - 0x46, 0x2b, 0x6, 0x80, 0x0, 0x30, 0x55, 0x82, 0xc0, 0x0, 0x18, 0x31, 0x21, 0x34, 0x21, 0x0, - 0x0, 0x0, 0x2b, 0x4c, 0x89, 0xc, 0x90, 0x0, 0x44, 0x3d, 0xb5, 0x5a, 0x12, 0x39, 0x48, 0xc1, - 0x65, 0x10, 0x0, 0x26, 0xe, 0x20, 0x50, 0xe4, 0x40, 0x0, 0x0, 0x8, 0xda, 0x2, 0x25, 0x30, 0xe3, - 0x85, 0x9c, 0x1e, 0x1e, 0x92, 0x89, 0x9, 0x61, 0x8, 0x0, 0x0, 0x1, 0x5a, 0x3e, 0x86, 0x18, - 0x80, 0x2, 0x21, 0xcb, 0xaa, 0x80, 0x94, 0x8a, 0x1c, 0xb, 0x29, 0x80, 0x1, 0x30, 0x81, 0x2, - 0x97, 0x22, 0x0, 0x0, 0x0, 0x46, 0xc5, 0xb0, 0x9a, 0x7, 0xc, 0x2d, 0xe0, 0xf3, 0x54, 0x88, - 0x48, 0x4f, 0x8, 0x4, 0x20, 0x0, 0x0, 0x15, 0xa2, 0x28, 0x44, 0x88, 0x80, 0x2b, 0x50, 0x87, - 0x5e, 0xa8, 0xc2, 0x1f, 0xaa, 0x0, 0x2c, 0xaa, 0x0, 0x4, 0xc2, 0x44, 0xa, 0x9c, 0x80, 0x84, - 0x0, 0x0, 0x2, 0xb5, 0xec, 0x1, 0x40, 0x11, 0x6a, 0xe, 0x75, 0x55, 0xc1, 0xdb, 0x69, 0xc4, - 0x90, 0x7d, 0x90, 0x8, 0x40, 0x0, 0x0, 0x6d, 0x5e, 0x40, 0x79, 0xb, 0x44, 0x1, 0x54, 0x46, - 0x7e, 0x8, 0x37, 0x88, 0x6f, 0x23, 0xd0, 0x44, 0x91, 0x34, 0x45, 0x5f, 0x6f, 0x8e, 0x65, 0x5, - 0x90, 0x40, 0x0, 0x48, 0x50, 0x81, 0x2, 0x90, 0x10, 0x80, 0x0, 0x0, 0x58, 0x59, 0x12, 0xe1, - 0x80, 0x8a, 0x88, 0x37, 0x26, 0x78, 0x1c, 0xf3, 0x20, 0x48, 0x2c, 0xc8, 0x40, 0x0, 0x0, 0x1b, - 0x57, 0x80, 0x1e, 0x86, 0x10, 0x0, 0x46, 0x70, 0x58, 0x42, 0x88, 0xa4, 0x23, 0xcc, 0x44, 0x4f, - 0x38, 0x44, 0x0, 0xae, 0xe2, 0x21, 0x58, 0xa4, 0x0, 0x4, 0x85, 0xac, 0x90, 0x80, 0x4, 0x83, - 0x84, 0x5, 0x14, 0x88, 0x0, 0x0, 0x1, 0x21, 0x96, 0x6b, 0xd8, 0x3, 0x6f, 0x67, 0xc1, 0xaa, - 0x35, 0x24, 0x82, 0xec, 0x84, 0x0, 0x0, 0x1, 0xb5, 0x77, 0xb1, 0xed, 0xd9, 0x0, 0x4, 0x67, - 0x6c, 0x83, 0xd0, 0x8b, 0x2a, 0x32, 0x44, 0x1c, 0x54, 0x6a, 0x40, 0x5c, 0xad, 0xb3, 0x15, 0x8a, - 0xc0, 0x0, 0x48, 0x62, 0xcb, 0xd0, 0x0, 0x44, 0x34, 0x40, 0x55, 0x48, 0x80, 0x0, 0x0, 0x12, - 0x1b, 0xf0, 0xc6, 0x68, 0x2d, 0xd7, 0x8, 0x19, 0xe3, 0x4c, 0x20, 0x5f, 0x44, 0x44, 0x0, 0x0, - 0x9, 0xf, 0x23, 0x6c, 0x98, 0x15, 0xac, 0xb6, 0xa, 0x62, 0x52, 0x10, 0x24, 0x92, 0x20, 0x0, - 0x0, 0x4, 0x84, 0x6b, 0x2a, 0xd6, 0x1c, 0x8a, 0xcf, 0x3, 0x90, 0xdc, 0xc9, 0x21, 0x1c, 0xa0, - 0x10, 0x80, 0x0, 0x0, 0x58, 0x4a, 0x82, 0xe0, 0xc8, 0x80, 0x2b, 0x50, 0x19, 0x7, 0x6c, 0x8, - 0x4, 0x82, 0xb, 0x2f, 0x20, 0x1, 0x60, 0xf2, 0x41, 0x25, 0x42, 0x0, 0x0, 0x1, 0x98, 0x22, 0xb3, - 0x96, 0xe8, 0x0, 0x20, 0x80, 0xac, 0x80, 0x73, 0x37, 0x90, 0x75, 0x54, 0xbe, 0xf, 0xdd, 0x81, - 0x60, 0xb2, 0xe0, 0x20, 0x6c, 0x59, 0x42, 0x2c, 0xb7, 0xd5, 0x0, 0x10, 0x96, 0x28, 0x20, 0x1, - 0x42, 0xb, 0x2f, 0x20, 0x0, 0xb1, 0x15, 0x8a, 0x88, 0x0, 0x50, 0xa9, 0x20, 0x9a, 0xa0, 0x10, - 0x80, 0x0, 0x0, 0xd8, 0x5, 0xcc, 0x2e, 0xe8, 0x80, 0x2a, 0x88, 0x75, 0xc4, 0x84, 0xf, 0x81, - 0x92, 0xc1, 0xf5, 0x11, 0x1c, 0x59, 0x84, 0xf8, 0x40, 0xb1, 0xa8, 0x0, 0xc, 0x12, 0x10, 0x1a, - 0x62, 0x2, 0x10, 0x0, 0x0, 0xb, 0x57, 0x61, 0xa0, 0x42, 0x1, 0x15, 0x11, 0x1e, 0x53, 0xdb, - 0x88, 0xc7, 0x21, 0xa0, 0x90, 0x41, 0x50, 0x80, 0x0, 0x0, 0x36, 0x1, 0xc7, 0x3, 0xea, 0x0, 0x8, - 0x75, 0x7c, 0x79, 0xf, 0xfb, 0x95, 0xe1, 0xef, 0x70, 0xd0, 0x59, 0xd6, 0xf5, 0xe0, 0xb1, 0x98, - 0x0, 0xc, 0x13, 0x10, 0x19, 0x62, 0x20, 0x0, 0x0, 0x4, 0xab, 0xb4, 0x4f, 0xff, 0x82, 0x3b, - 0x97, 0xb6, 0x11, 0x77, 0xc1, 0x99, 0x20, 0x8a, 0xa1, 0x0, 0x0, 0x0, 0x8c, 0x4, 0x11, 0xf4, - 0xc4, 0x0, 0x10, 0xec, 0x88, 0xfe, 0x2c, 0x2c, 0x89, 0xe0, 0xf0, 0x38, 0x5e, 0xac, 0x74, 0x7c, - 0x24, 0x0, 0x40, 0x4f, 0x6f, 0xc8, 0x2c, 0x62, 0x0, 0x3, 0x5, 0x4, 0x6, 0x18, 0x88, 0x0, 0x0, - 0x1, 0x2a, 0xed, 0xc3, 0xf5, 0xc0, 0x8e, 0xa1, 0xed, 0x84, 0x5b, 0xd0, 0x66, 0x8, 0x10, 0xc0, - 0x81, 0x0, 0x0, 0x0, 0x53, 0x6a, 0x8a, 0x3a, 0x0, 0x8, 0x1d, 0x86, 0x94, 0x14, 0x12, 0xe, 0x2c, - 0x8, 0x12, 0xc0, 0x81, 0x0, 0x0, 0x0, 0x53, 0xeb, 0x9c, 0x8a, 0x0, 0x8, 0x22, 0x89, 0x6c, 0x14, - 0x10, 0xe, 0x2e, 0x8, 0x14, 0x80, 0x42, 0x0, 0x0, 0x0, 0x52, 0xdd, 0x8e, 0xf2, 0x0, 0x8, 0x20, - 0xd6, 0x74, 0x14, 0x16, 0x10, 0x30, 0x0, 0x16, 0x40, 0x42, 0x0, 0x0, 0x0, 0x49, 0x4e, 0x21, - 0x48, 0x0, 0x20, 0x7c, 0xe6, 0x30, 0x40, 0xc6, 0x4, 0x8, 0x0, 0x0, 0x2, 0x82, 0xce, 0x9a, 0x10, - 0x0, 0x40, 0xd4, 0x45, 0xe0, 0xa0, 0xd0, 0x41, 0x90, 0x40, 0xd6, 0x4, 0x8, 0x0, 0x0, 0x2, 0x46, - 0x74, 0x3c, 0x40, 0x1, 0x4, 0xb0, 0xe8, 0x82, 0x83, 0x1, 0x6, 0x81, 0x3, 0x90, 0x8, 0x40, 0x0, - 0x0, 0x9, 0xc, 0xcb, 0xe9, 0x0, 0x4, 0x12, 0xd3, 0xaa, 0xa, 0xf, 0x5, 0x1b, 0x0, 0xf, 0x20, - 0x21, 0x0, 0x0, 0x0, 0x2c, 0x7b, 0xf1, 0xcf, 0x40, 0x1, 0x3, 0x3b, 0x7, 0x2, 0xd, 0xa0, 0x20, - 0x40, 0x0, 0x0, 0x1a, 0xbd, 0xaf, 0x2, 0xfa, 0x80, 0x2, 0x7, 0xca, 0x63, 0x5, 0xe, 0x6, 0x8e, - 0x0, 0xe, 0x10, 0x20, 0x40, 0x0, 0x0, 0x1a, 0xbe, 0x96, 0xfc, 0xb4, 0x80, 0x2, 0x8, 0x39, 0x9d, - 0x4, 0x1d, 0x40, 0x40, 0x80, 0x0, 0x0, 0x35, 0x7e, 0x35, 0xf0, 0x9d, 0x0, 0x4, 0xf, 0x8c, 0xc6, - 0xa, 0x1e, 0xe, 0x1d, 0x0, 0x1e, 0x20, 0x40, 0x80, 0x0, 0x0, 0x30, 0x1, 0x86, 0x20, 0x50, 0x0, - 0x41, 0x7, 0xb3, 0xa0, 0x84, 0x2c, 0x8, 0x10, 0x0, 0x0, 0x6, 0x9, 0xca, 0xb9, 0xea, 0x0, 0x8, - 0x19, 0xd8, 0x30, 0x14, 0x44, 0x2e, 0x3c, 0x8, 0x44, 0xc0, 0x81, 0x0, 0x0, 0x0, 0x60, 0xfe, - 0xcb, 0x6e, 0xa0, 0x0, 0x82, 0x63, 0x7d, 0x1, 0x44, 0x22, 0xe3, 0xe0, 0x85, 0x6c, 0x8, 0x10, - 0x0, 0x0, 0x5, 0xaf, 0x58, 0x78, 0xc8, 0x0, 0x20, 0x8b, 0x65, 0x90, 0x51, 0x60, 0xa1, 0x0, - 0x21, 0x63, 0x2, 0x4, 0x0, 0x0, 0x1, 0x6a, 0x5a, 0x6, 0xe2, 0x0, 0x8, 0x1d, 0x36, 0x9c, 0x14, - 0x56, 0x28, 0x42, 0x8, 0x5a, 0xc0, 0x42, 0x0, 0x0, 0x0, 0x5a, 0x4c, 0xc2, 0xc6, 0x80, 0x2, 0x7, - 0x45, 0xa8, 0x5, 0x17, 0xa, 0x91, 0x2, 0x17, 0x30, 0x10, 0x80, 0x0, 0x0, 0x16, 0xac, 0x12, - 0x2b, 0x20, 0x0, 0x82, 0x2f, 0x96, 0x1, 0x45, 0xa2, 0xa4, 0x60, 0x86, 0x8, 0x8, 0x10, 0x0, 0x0, - 0x6, 0x0, 0x3c, 0xc4, 0x5a, 0x0, 0x8, 0x20, 0xe6, 0x74, 0x14, 0x62, 0x1e, 0x48, 0x0, 0x62, - 0x40, 0x81, 0x0, 0x0, 0x0, 0x6a, 0xfc, 0xd3, 0xe1, 0x5a, 0x0, 0x8, 0x1f, 0x29, 0x8c, 0x10, - 0xc9, 0x1, 0x2, 0x0, 0x0, 0x0, 0xd5, 0xf4, 0xa7, 0xe6, 0xa4, 0x0, 0x10, 0x41, 0xac, 0xe8, 0x28, - 0xcc, 0x40, 0x94, 0x0, 0xcc, 0x81, 0x2, 0x0, 0x0, 0x0, 0xd5, 0xed, 0xe8, 0x18, 0xd4, 0x0, 0x10, - 0x3e, 0x73, 0x18, -]; - -/// Intersection "Feldstraße/Glacischaussee" -/// -/// Has a very complex geometry with multiple stop lines after each other. -/// Main traffic direction is east-west, has separate bike lanes. -/// -/// Possible start point (heading 90°): TODO -#[cfg(feature = "spat")] -pub const MAPEM_HH_560: &[u8] = &[ - 0x2, 0x5, 0x0, 0x1, 0x61, 0x2b, 0x8, 0x0, 0x3, 0x9, 0x4d, 0x83, 0x42, 0xfc, 0x9a, 0x94, 0xef, - 0xb0, 0x6b, 0x7d, 0xab, 0x66, 0x17, 0xd8, 0xb3, 0x5c, 0xda, 0x0, 0x6, 0x4, 0x60, 0x18, 0x55, - 0x91, 0x1, 0x73, 0x71, 0x3b, 0xe2, 0xcb, 0x2, 0x58, 0x56, 0x48, 0x1c, 0x28, 0x44, 0x0, 0x0, - 0x32, 0xbb, 0xbd, 0x9a, 0x91, 0x0, 0x61, 0x90, 0x6e, 0x15, 0x40, 0x3c, 0x5c, 0xac, 0x39, 0x63, - 0x28, 0x8e, 0xcc, 0x98, 0x51, 0xe, 0x55, 0xe1, 0x2, 0xd0, 0x3d, 0xd2, 0xe, 0x4, 0xe8, 0x22, - 0xb0, 0xa2, 0x0, 0x1, 0x7, 0x58, 0x49, 0x0, 0x0, 0x84, 0x8, 0x5, 0x21, 0x11, 0x0, 0x0, 0x2, - 0x21, 0x1f, 0x51, 0xf0, 0x9e, 0xd9, 0x70, 0x12, 0xab, 0x42, 0xc4, 0x2, 0x50, 0x8c, 0x80, 0x0, - 0x1, 0x10, 0x5e, 0xa0, 0x20, 0x4f, 0x4c, 0xba, 0x9, 0x52, 0xa2, 0xe4, 0x81, 0x8, 0x84, 0x40, - 0x0, 0x2, 0xad, 0x36, 0xa3, 0x6c, 0x40, 0x1, 0x2, 0x93, 0x4b, 0x4, 0x38, 0xd7, 0x80, 0x2, 0x16, - 0x50, 0x1, 0xff, 0x2c, 0x0, 0x2f, 0xd6, 0x13, 0xb, 0x6f, 0x1, 0x60, 0x84, 0x0, 0x82, 0x2, 0x20, - 0x8, 0x64, 0x44, 0x0, 0x0, 0x9, 0x1b, 0x9, 0x2c, 0xd0, 0x4, 0xf0, 0x82, 0x25, 0x1c, 0x3f, 0xd2, - 0x40, 0xd1, 0x42, 0x20, 0x0, 0x1, 0xd7, 0xa0, 0xe6, 0xac, 0xa2, 0x0, 0xc3, 0x21, 0xc1, 0xfa, - 0xd8, 0x58, 0xf5, 0xb9, 0x2, 0xc1, 0x7d, 0x4e, 0xe, 0x68, 0xf1, 0x3, 0xa9, 0x26, 0x13, 0x81, - 0x8c, 0xef, 0x60, 0xdb, 0x75, 0xa0, 0xea, 0xdd, 0xa4, 0xb, 0x4, 0x80, 0x0, 0x20, 0x22, 0x40, - 0xb1, 0x42, 0x20, 0x0, 0x1, 0x97, 0xce, 0x86, 0x7c, 0x22, 0x0, 0xc3, 0x20, 0xcd, 0x78, 0x81, - 0x63, 0xde, 0xe5, 0xb, 0x8, 0xf5, 0x74, 0x39, 0xef, 0xd1, 0x8b, 0x2f, 0x7e, 0x90, 0x55, 0x57, - 0x82, 0x41, 0xca, 0x7d, 0xdc, 0x16, 0x22, 0x80, 0x0, 0x61, 0xc2, 0x2, 0x24, 0x44, 0x40, 0x0, - 0x0, 0xb3, 0x4b, 0x65, 0x8e, 0x81, 0x21, 0x90, 0xe0, 0x57, 0xc6, 0xb, 0xe9, 0xef, 0x24, 0xc, - 0x14, 0x22, 0x0, 0x0, 0x19, 0x7b, 0x78, 0x69, 0x4a, 0x20, 0xc, 0x32, 0x1b, 0x4b, 0x87, 0x85, - 0x8f, 0x7b, 0x92, 0x2c, 0x1d, 0xd5, 0x50, 0xe7, 0x2f, 0x2a, 0x2c, 0xbb, 0xfa, 0x11, 0x64, 0x6f, - 0x83, 0x2, 0x81, 0xb1, 0xc1, 0x62, 0x48, 0x0, 0x6, 0x1e, 0x20, 0x24, 0x44, 0x44, 0x0, 0x0, 0xb, - 0x34, 0xa5, 0x54, 0x3c, 0x12, 0x19, 0x7, 0xee, 0xf2, 0x2, 0x99, 0x7b, 0xc9, 0x1, 0x51, 0x8, - 0x80, 0x0, 0x7, 0x51, 0x5d, 0x86, 0x5a, 0x20, 0xc, 0x32, 0x0, 0x62, 0x8c, 0x11, 0xe2, 0x4c, - 0xd0, 0x42, 0x65, 0xb3, 0x9, 0x3a, 0xaa, 0xc1, 0xa, 0xb8, 0x18, 0x26, 0x2, 0xb0, 0x88, 0xc6, - 0x67, 0xb8, 0x23, 0x96, 0x95, 0x82, 0xc3, 0xd0, 0x0, 0x10, 0x24, 0x40, 0x3c, 0x48, 0x88, 0x0, - 0x0, 0x11, 0xfc, 0x8d, 0xab, 0xa0, 0xcd, 0x78, 0x81, 0x5f, 0x56, 0x9b, 0x12, 0x3, 0x22, 0x11, - 0x0, 0x0, 0x14, 0xb7, 0x45, 0x19, 0x21, 0x0, 0x4, 0x44, 0x19, 0x3b, 0xa2, 0x3b, 0x49, 0xa0, - 0x8, 0x40, 0xb7, 0x1, 0x26, 0x15, 0x6c, 0x47, 0x6f, 0x49, 0x42, 0x3d, 0xba, 0x89, 0x11, 0x52, - 0x56, 0x78, 0xce, 0xf9, 0x3c, 0xc1, 0xb, 0x1d, 0x3a, 0x88, 0x77, 0xa8, 0x3c, 0x44, 0xc5, 0x39, - 0x80, 0xb1, 0x18, 0x0, 0x5, 0xa, 0x24, 0x7, 0x44, 0x22, 0x0, 0x0, 0x29, 0x6d, 0xa7, 0x28, 0xda, - 0x0, 0x8, 0x89, 0xf6, 0x6a, 0x44, 0x71, 0x53, 0x50, 0x10, 0xc3, 0x6d, 0x82, 0x46, 0x2c, 0xa8, - 0x8e, 0xa2, 0x94, 0x84, 0x7a, 0x94, 0xca, 0x22, 0xbf, 0xae, 0x81, 0x9e, 0x3e, 0x78, 0x82, 0x17, - 0x2a, 0x6f, 0x10, 0xf2, 0xd0, 0x60, 0x89, 0x96, 0x72, 0xc1, 0x62, 0x50, 0x0, 0xa, 0x16, 0x48, - 0x6, 0x68, 0x44, 0x0, 0x0, 0x33, 0x24, 0x13, 0x3d, 0xf1, 0x10, 0x6, 0x19, 0x1, 0x56, 0x4a, 0x4, - 0x84, 0xc, 0x80, 0x99, 0x12, 0x30, 0x5, 0x81, 0x2c, 0x9, 0x6, 0x1, 0xc2, 0x15, 0xd0, 0xa5, 0x9, - 0x18, 0x0, 0x22, 0xb1, 0x22, 0x0, 0x6, 0x3, 0x58, 0x89, 0x0, 0x3, 0x2, 0x12, 0x0, 0x9a, 0x11, - 0x0, 0x0, 0xe, 0xc8, 0x3b, 0x8f, 0xac, 0x44, 0x1, 0x86, 0x42, 0x88, 0xf, 0xb0, 0x51, 0xa1, - 0xff, 0x9, 0x20, 0xc, 0x41, 0x26, 0x60, 0xd8, 0x28, 0x4c, 0x97, 0x5, 0x39, 0x1b, 0x91, 0x2d, - 0xc1, 0x75, 0x5, 0x30, 0x9c, 0x50, 0x58, 0x4a, 0x0, 0x3, 0x82, 0x92, 0x1, 0x1a, 0x11, 0x0, 0x0, - 0xc, 0xc8, 0x9b, 0x4f, 0x8f, 0x44, 0x1, 0x86, 0x42, 0x5f, 0x8a, 0x48, 0x3, 0xb0, 0x1c, 0x24, - 0xa8, 0x37, 0x88, 0xd9, 0xc5, 0xe4, 0x69, 0x7b, 0x38, 0x49, 0xf, 0x9b, 0x5, 0xdc, 0xac, 0xcd, - 0x2a, 0x16, 0x20, 0xb0, 0xf8, 0x0, 0x8, 0x6, 0x24, 0x10, 0x24, 0x12, 0x0, 0x0, 0x15, 0x9a, - 0x65, 0xaf, 0x56, 0x88, 0x3, 0xc, 0x83, 0xf2, 0x7b, 0x5, 0xb9, 0xe, 0xc6, 0x2e, 0x1, 0x6b, - 0xe1, 0x6c, 0xf3, 0x28, 0xb, 0x63, 0x56, 0xec, 0x5c, 0x8a, 0x98, 0x20, 0xb0, 0x98, 0x0, 0x9, - 0xc, 0x24, 0x2d, 0x44, 0x2, 0x10, 0x0, 0x0, 0x3a, 0xd9, 0xca, 0x42, 0xc4, 0x40, 0x16, 0x20, - 0x0, 0x34, 0xec, 0x3, 0xe, 0x65, 0x1, 0x15, 0x3e, 0x84, 0x3a, 0xd6, 0xe1, 0x3, 0x15, 0xb9, - 0x8c, 0xa6, 0x16, 0x3d, 0x0, 0xab, 0x7d, 0x80, 0x1, 0xc3, 0x81, 0x65, 0xd0, 0x0, 0xa, 0x1a, - 0x20, 0x5c, 0x44, 0x4, 0x20, 0x0, 0x0, 0x11, 0xe4, 0x58, 0x4a, 0x20, 0xfc, 0x9e, 0xc0, 0x66, - 0xaf, 0xa0, 0x20, 0x9b, 0x2, 0x4, 0x0, 0x0, 0x1, 0x7e, 0x98, 0x22, 0x8a, 0x0, 0x8, 0x1d, 0x6, - 0xa0, 0x4, 0x28, 0x2, 0x8, 0x28, 0xc0, 0x81, 0x0, 0x0, 0x0, 0x66, 0x20, 0x8c, 0x7b, 0x20, 0x0, - 0x82, 0x26, 0x97, 0x40, 0x42, 0x60, 0x40, 0x82, 0xac, 0x8, 0x10, 0x0, 0x0, 0x5, 0xb9, 0x28, - 0x6f, 0xe8, 0x0, 0x20, 0x71, 0x1b, 0x0, 0x10, 0xb0, 0x18, 0x20, 0xb3, 0x2, 0x4, 0x0, 0x0, 0x1, - 0x56, 0xc2, 0x4b, 0x68, 0x0, 0x20, 0x8f, 0x25, 0x0, 0x10, 0xa8, 0x20, 0x20, 0xbb, 0x2, 0x4, - 0x0, 0x0, 0x1, 0x7e, 0x63, 0x57, 0xea, 0x0, 0x8, 0x26, 0x37, 0xcc, 0x4, 0x30, 0xa, 0x8, 0x30, - 0xc0, 0x81, 0x0, 0x0, 0x0, 0x5e, 0x5, 0x57, 0xac, 0x80, 0x2, 0x6, 0x76, 0xd, 0x1, 0xb, 0x83, - 0x2, 0xc, 0xb0, 0x20, 0x40, 0x0, 0x0, 0x13, 0xeb, 0xc2, 0x9a, 0x0, 0x8, 0x22, 0x56, 0x8c, 0x4, - 0x34, 0xe, 0x8, 0x34, 0xc0, 0x81, 0x0, 0x0, 0x0, 0x4e, 0xf3, 0x45, 0x28, 0x0, 0x20, 0x76, 0xe5, - 0xd0, 0x10, 0xc8, 0x40, 0x20, 0xdb, 0x2, 0x4, 0x0, 0x0, 0x1, 0x6f, 0xd8, 0xd, 0x32, 0x0, 0x8, - 0x19, 0xd8, 0x34, 0x4, 0x38, 0x12, 0x8, 0x38, 0xc0, 0x81, 0x0, 0x0, 0x0, 0x5d, 0x90, 0xc1, - 0x90, 0x80, 0x2, 0x9, 0x8d, 0xf3, 0x1, 0xd, 0x85, 0x2, 0xf, 0xa0, 0x10, 0x80, 0x0, 0x0, 0x15, - 0xa2, 0x24, 0x2e, 0x80, 0x2, 0x8, 0xee, 0x50, 0x1, 0x10, 0x5, 0x80, 0x10, 0x10, 0x10, 0x80, - 0x0, 0x0, 0x17, 0x0, 0x81, 0x9d, 0xa0, 0x0, 0x81, 0xc8, 0x6b, 0x41, 0x8, 0x50, 0x8, 0x40, 0x0, - 0x0, 0xb, 0x8a, 0xd8, 0xd8, 0x50, 0x0, 0x40, 0xcf, 0x42, 0x0, 0x22, 0x20, 0xc0, 0x2, 0x22, 0x2, - 0x10, 0x0, 0x0, 0x2, 0xef, 0x9c, 0x24, 0xe4, 0x0, 0x10, 0x4c, 0x4f, 0x80, 0x21, 0x1a, 0x1, 0x8, - 0x0, 0x0, 0x1, 0x5a, 0xd2, 0xde, 0x48, 0x0, 0x20, 0x80, 0x26, 0x40, 0x11, 0x20, 0x68, 0x1, - 0x21, 0x1, 0x8, 0x0, 0x0, 0x1, 0x5a, 0xce, 0x9a, 0x68, 0x0, 0x20, 0x80, 0x19, 0xc0, 0x42, 0x54, - 0x2, 0x10, 0x0, 0x0, 0x2, 0xa4, 0x6c, 0xcc, 0x10, 0x0, 0x41, 0x2a, 0x39, 0x40, 0x22, 0x60, - 0xe0, 0x2, 0x62, 0x2, 0x10, 0x0, 0x0, 0x2, 0x47, 0x69, 0x47, 0x40, 0x1, 0x3, 0x49, 0x13, 0x2, - 0x13, 0xa0, 0x10, 0x80, 0x0, 0x0, 0x17, 0xe0, 0x4, 0x82, 0x20, 0x0, 0x82, 0x63, 0x7d, 0x0, - 0x45, 0x1, 0xe0, 0x5, 0x4, 0x4, 0x20, 0x0, 0x0, 0x5, 0x6c, 0xd8, 0xff, 0xa0, 0x0, 0x81, 0x9d, - 0x83, 0x1, 0xa, 0x58, 0x10, 0x20, 0x0, 0x0, 0xb, 0x60, 0x30, 0x70, 0x10, 0x0, 0x41, 0x31, 0x42, - 0x0, 0x22, 0xa1, 0x0, 0x42, 0xa6, 0x4, 0x8, 0x0, 0x0, 0x2, 0xd3, 0xa2, 0x16, 0x24, 0x0, 0x10, - 0x33, 0xcf, 0x80, 0x8, 0xa4, 0x44, 0x10, 0xad, 0x0, 0x84, 0x0, 0x0, 0x0, 0xbd, 0xe7, 0x8f, - 0xdd, 0x0, 0x4, 0xe, 0x8b, 0x50, 0x2, 0x2c, 0x12, 0x0, 0x2c, 0x20, 0x21, 0x0, 0x0, 0x0, 0x2f, - 0xe0, 0x89, 0xbb, 0x40, 0x1, 0x4, 0x71, 0x29, 0x80, -]; - -/// Intersection "TODO" -/// -/// 3 layers -#[cfg(feature = "spat")] -pub const MAPEM_HH_2349_L31: &[u8] = &[ - 0x2, 0x5, 0x0, 0x12, 0x25, 0xf4, 0x18, 0x0, 0x3e, 0x6, 0xd, 0x91, 0x21, 0x93, 0x3b, 0x8c, 0x99, - 0xb4, 0x73, 0x71, 0x8b, 0x6, 0xe, 0x60, 0x0, 0x61, 0x25, 0xa1, 0x5, 0x58, 0xef, 0x69, 0x97, - 0x13, 0xed, 0x54, 0x20, 0x28, 0xa3, 0x68, 0x4, 0x49, 0xc6, 0xeb, 0xcb, 0xa2, 0x4, 0xf1, 0xba, - 0xf2, 0xe8, 0x9d, 0x6, 0x9d, 0xa8, 0x20, 0xf2, 0xda, 0x81, 0x99, 0x2, 0x4, 0x8, 0x0, 0x0, 0xab, - 0x72, 0xf, 0xe5, 0xc0, 0x7d, 0xa6, 0x34, 0x41, 0xf4, 0xe3, 0x75, 0xe5, 0xd1, 0x2, 0x78, 0xdd, - 0x79, 0x74, 0x4e, 0x83, 0x4e, 0xd4, 0x10, 0x79, 0x6d, 0x40, 0xcd, 0x1, 0x2, 0x4, 0x0, 0x0, - 0x55, 0xb8, 0x57, 0xf1, 0x50, 0x3e, 0x73, 0x18, 0x28, 0x80, 0x3c, 0x51, 0x10, 0x6d, 0x38, 0xdd, - 0x79, 0x74, 0x40, 0x9e, 0x37, 0x5e, 0x5d, 0x13, 0xa0, 0xd3, 0xb5, 0x4, 0x1e, 0x5b, 0x50, 0x32, - 0x40, 0x40, 0x81, 0x0, 0x0, 0x10, 0x8c, 0x36, 0xc6, 0x1, 0x31, 0xc1, 0xc0, 0xa1, 0xc0, 0x91, - 0x24, 0x1, 0xe4, 0xe3, 0x75, 0xe5, 0xd1, 0x2, 0x78, 0xdd, 0x79, 0x74, 0x4e, 0x83, 0x4e, 0xd4, - 0x10, 0x79, 0x6d, 0x40, 0xcc, 0x81, 0x2, 0x4, 0x0, 0x0, 0x55, 0xaf, 0x28, 0x32, 0xd0, 0x3e, - 0x73, 0x1a, 0x0, 0xd2, 0x71, 0xba, 0xf2, 0xe8, 0x81, 0x3c, 0x6e, 0xbc, 0xba, 0x27, 0x41, 0xa7, - 0x6a, 0x8, 0x3c, 0xb6, 0xa0, 0x64, 0x40, 0x81, 0x2, 0x0, 0x0, 0x20, 0x21, 0xcd, 0x23, 0x81, - 0x9c, 0x7e, 0x51, 0x7, 0x53, 0x8d, 0xd7, 0x97, 0x44, 0x9, 0xe3, 0x75, 0xe5, 0xd1, 0x3a, 0xd, - 0x3b, 0x50, 0x41, 0xe5, 0xb5, 0x3, 0x34, 0x4, 0x8, 0x10, 0x0, 0x1, 0x56, 0xd5, 0x20, 0xe, 0xc1, - 0x6, 0xb3, 0xa0, 0xa1, 0xe0, 0xe1, 0x34, 0x41, 0x94, 0xe3, 0x75, 0xe5, 0xd1, 0x2, 0x78, 0xdd, - 0x79, 0x74, 0x4e, 0x83, 0x4e, 0xd4, 0x10, 0x79, 0x6d, 0x40, 0xc9, 0x1, 0x2, 0x4, 0x0, 0x0, - 0x40, 0xe9, 0x9a, 0x78, 0x4, 0xc9, 0x3, 0x82, 0x86, 0x83, 0x4, 0x50, 0x6, 0x13, 0x8d, 0xd7, - 0x97, 0x44, 0x9, 0xe3, 0x75, 0xe5, 0xd1, 0x3a, 0xd, 0x3b, 0x50, 0x41, 0xe5, 0xb5, 0x3, 0x22, - 0x2, 0x8, 0x10, 0x0, 0x1, 0x8, 0xf2, 0x70, 0xe4, 0x13, 0x1c, 0x22, 0x88, 0x2e, 0x9c, 0x6e, - 0xbc, 0xba, 0x20, 0x4f, 0x1b, 0xaf, 0x2e, 0x89, 0xd0, 0x69, 0xda, 0x82, 0xf, 0x2d, 0xa8, 0x19, - 0x20, 0x10, 0x40, 0x80, 0x0, 0x8, 0x2f, 0xb3, 0x77, 0x0, 0x67, 0x5e, 0xf0, 0x50, 0xc0, 0x58, - 0x82, 0x0, 0xb2, 0x71, 0xba, 0xf2, 0xe8, 0x81, 0x3c, 0x6e, 0xbc, 0xba, 0x27, 0x41, 0xa7, 0x6a, - 0x8, 0x3c, 0xb6, 0xa0, 0x64, 0x40, 0x41, 0x2, 0x0, 0x0, 0x20, 0x73, 0x2d, 0xbe, 0x82, 0x64, - 0x81, 0x51, 0x5, 0x53, 0x8d, 0xd7, 0x97, 0x44, 0x9, 0xe3, 0x75, 0xe5, 0xd1, 0x3a, 0xd, 0x3b, - 0x50, 0x41, 0xe5, 0xb5, 0x3, 0x24, 0x2, 0x8, 0x10, 0x0, 0x1, 0x0, 0x69, 0x6d, 0x60, 0xc, 0xe3, - 0xf6, 0xa, 0x16, 0xa, 0xf, 0x40, 0x14, 0x4e, 0x37, 0x5e, 0x5d, 0x10, 0x27, 0x8d, 0xd7, 0x97, - 0x44, 0xe8, 0x34, 0xed, 0x41, 0x7, 0x96, 0xd4, 0xc, 0x88, 0x10, 0x20, 0x40, 0x0, 0x4, 0xe, - 0xb5, 0xa7, 0x50, 0x4c, 0x90, 0x2b, 0x20, 0xa, 0xd1, 0xb0, 0xe8, 0xe5, 0xcf, 0xa7, 0x2c, 0xba, - 0x73, 0x65, 0xdc, 0x81, 0x8a, 0xd, 0x3b, 0x50, 0x41, 0xe5, 0xb5, 0x3, 0x11, 0x40, 0x20, 0x0, - 0x2, 0x88, 0x69, 0x7c, 0x9a, 0x43, 0xec, 0xa4, 0x90, 0x1, 0x0, 0xc0, 0x0, 0xd1, 0xe3, 0x90, - 0x68, 0xf2, 0x0, 0x34, 0x59, 0x18, 0x1a, 0x1c, 0x98, 0x8, 0x2, 0x0, 0x16, 0x86, 0xc9, 0xe0, - 0x31, 0x99, 0x20, 0x18, 0xbc, 0x9e, 0x9c, 0x5b, 0x29, 0x10, 0x1, 0x41, 0x61, 0x90, 0x0, 0x2, - 0x2, 0x80, 0x20, 0x9c, 0x6e, 0xbc, 0xba, 0x20, 0x4f, 0x1b, 0xaf, 0x2e, 0x89, 0xd0, 0x69, 0xda, - 0x82, 0xf, 0x2d, 0xa8, 0x19, 0x90, 0x20, 0x40, 0x80, 0x0, 0xa, 0xb6, 0xbd, 0x0, 0x6c, 0x8, - 0x35, 0x9d, 0x50, 0xc, 0x5a, 0x36, 0x1d, 0x1c, 0xb9, 0xf4, 0xe5, 0x97, 0x4e, 0x6c, 0xbb, 0x90, - 0x34, 0x41, 0xa7, 0x6a, 0x8, 0x3c, 0xb6, 0xa0, 0x66, 0x64, 0x4, 0x0, 0x0, 0x9, 0x55, 0x73, - 0x60, 0x6b, 0xc2, 0x13, 0x5c, 0x90, 0x86, 0xc9, 0xce, 0x59, 0x0, 0x96, 0x8d, 0x87, 0x47, 0x2e, - 0x7d, 0x39, 0x65, 0xd3, 0x9b, 0x2e, 0xe4, 0xc, 0x90, 0x69, 0xda, 0x82, 0xf, 0x2d, 0xa8, 0x18, - 0x8a, 0x10, 0x0, 0x0, 0xe, 0x43, 0x56, 0xe3, 0x87, 0x1f, 0xbb, 0xe5, 0x46, 0x1c, 0x3, 0x18, - 0x41, 0xff, 0x4d, 0xe0, 0x80, 0x20, 0x0, 0xff, 0xa9, 0xd8, 0xd, 0x6e, 0x53, 0x6, 0xb3, 0x2d, - 0xa7, 0x58, 0xcb, 0xa4, 0x0, 0x50, 0x58, 0x5c, 0x0, 0x0, 0x81, 0x20, 0x9, 0x27, 0x1b, 0xaf, - 0x2e, 0x88, 0x13, 0xc6, 0xeb, 0xcb, 0xa2, 0x74, 0x1a, 0x76, 0xa0, 0x83, 0xcb, 0x6a, 0x6, 0x44, - 0x8, 0x10, 0x20, 0x0, 0x2, 0x11, 0x7e, 0xd9, 0x90, 0x26, 0x38, 0x31, 0x0, 0x81, 0x38, 0xdd, - 0x79, 0x74, 0x40, 0x9e, 0x37, 0x5e, 0x5d, 0x13, 0xa0, 0xd3, 0xb5, 0x4, 0x1e, 0x5b, 0x50, 0x33, - 0x20, 0x40, 0x81, 0x0, 0x0, 0x15, 0x6f, 0x79, 0xf1, 0x88, 0x10, 0x6b, 0x3a, 0x80, 0x38, 0x9c, - 0x6e, 0xbc, 0xba, 0x20, 0x4f, 0x1b, 0xaf, 0x2e, 0x89, 0xd0, 0x69, 0xda, 0x82, 0xf, 0x2d, 0xa8, - 0x19, 0x10, 0x20, 0x40, 0x80, 0x0, 0x8, 0x31, 0x1b, 0x57, 0x40, 0x67, 0x5f, 0x25, 0x0, 0xb5, - 0xa3, 0x61, 0xd1, 0xcb, 0x9f, 0x4e, 0x59, 0x74, 0xe6, 0xcb, 0xb9, 0x3, 0x34, 0x1a, 0x76, 0xa0, - 0x83, 0xcb, 0x6a, 0x6, 0x66, 0x44, 0x0, 0x0, 0x0, 0x95, 0x57, 0xe2, 0x0, 0xfc, 0x46, 0x24, - 0xec, 0x62, 0x2e, 0xc7, 0x57, 0x44, 0x21, 0x4e, 0x37, 0x5e, 0x5d, 0x10, 0x27, 0x8d, 0xd7, 0x97, - 0x44, 0xe8, 0x34, 0xed, 0x41, 0x7, 0x96, 0xd4, 0xc, 0xd0, 0x10, 0x20, 0x40, 0x0, 0x5, 0x5b, - 0xd9, 0x7c, 0x72, 0x4, 0x14, 0xce, 0x82, 0x88, 0x83, 0x45, 0x54, 0x2, 0x16, 0x8d, 0x87, 0x47, - 0x2e, 0x7d, 0x39, 0x65, 0xd3, 0x9b, 0x2e, 0xe4, 0xc, 0xd0, 0x69, 0xda, 0x82, 0xf, 0x2d, 0xa8, - 0x19, 0x11, 0x10, 0x0, 0x0, 0x2, 0x40, 0xab, 0x99, 0x11, 0xc, 0x3d, 0x3b, 0x22, 0x87, 0x13, - 0xc5, 0x44, 0xd, 0x4e, 0x37, 0x5e, 0x5d, 0x10, 0x27, 0x8d, 0xd7, 0x97, 0x44, 0xe8, 0x34, 0xed, - 0x41, 0x7, 0x96, 0xd4, 0xc, 0x58, 0x10, 0x20, 0x40, 0x0, 0x4, 0x2e, 0x8a, 0x53, 0x20, 0x3e, - 0xb3, 0x18, 0x28, 0x38, 0x14, 0x29, 0x10, 0x39, 0x38, 0xdd, 0x79, 0x74, 0x40, 0x9e, 0x37, 0x5e, - 0x5d, 0x13, 0xa0, 0xd3, 0xb5, 0x4, 0x1e, 0x5b, 0x50, 0x31, 0x60, 0x40, 0x81, 0x0, 0x0, 0x10, - 0xc6, 0x17, 0xad, 0x41, 0x5, 0xb3, 0xa0, 0xa0, 0xd0, 0x50, 0xb4, 0x40, 0xf4, 0xe3, 0x75, 0xe5, - 0xd1, 0x2, 0x78, 0xdd, 0x79, 0x74, 0x4e, 0x83, 0x4e, 0xd4, 0x10, 0x79, 0x6d, 0x40, 0xcd, 0x1, - 0x2, 0x4, 0x0, 0x0, 0x55, 0xaf, 0xc8, 0x33, 0x20, 0x3e, 0x73, 0x18, 0x28, 0x40, 0x34, 0x31, - 0x90, 0xd, 0x68, 0xd8, 0x74, 0x72, 0xe7, 0xd3, 0x96, 0x5d, 0x39, 0xb2, 0xee, 0x40, 0xcd, 0x6, - 0x9d, 0xa8, 0x20, 0xf2, 0xda, 0x81, 0x88, 0xa1, 0x0, 0x0, 0x2, 0x44, 0x36, 0x2e, 0x23, 0x61, - 0x79, 0xf4, 0x9a, 0x83, 0xcf, 0x94, 0x1, 0xe7, 0x4a, 0xc0, 0xf3, 0x65, 0xc0, 0x79, 0x73, 0x10, - 0xf5, 0xf5, 0x26, 0x64, 0x46, 0x30, 0x58, 0x23, 0x6, 0x9, 0x32, 0x18, 0x4, 0x8b, 0x13, 0x82, - 0x3b, 0x8d, 0x1, 0x18, 0x48, 0x0, 0x96, 0x69, 0x30, 0x40, 0x10, 0x0, 0x23, 0x9, 0x0, 0x11, - 0xdc, 0x6a, 0x9, 0x12, 0x2a, 0x4, 0x97, 0xe, 0x2, 0x0, 0x80, 0x51, 0x18, 0x41, 0xa8, 0x0, 0xa0, - 0xb0, 0x84, 0x0, 0x2, 0x3, 0x44, 0x11, 0x4e, 0x37, 0x5e, 0x5d, 0x10, 0x27, 0x8d, 0xd7, 0x97, - 0x44, 0xe8, 0x34, 0xed, 0x41, 0x7, 0x96, 0xd4, 0xc, 0x90, 0x10, 0x20, 0x40, 0x0, 0x4, 0x18, - 0x69, 0xad, 0xe0, 0x33, 0xaf, 0xa0, 0x28, 0x48, 0x20, 0x35, 0x10, 0x4d, 0x38, 0xdd, 0x79, 0x74, - 0x40, 0x9e, 0x37, 0x5e, 0x5d, 0x13, 0xa0, 0xd3, 0xb5, 0x4, 0x1e, 0x5b, 0x50, 0x32, 0x40, 0x40, - 0x81, 0x0, 0x0, 0x10, 0x10, 0xa6, 0x95, 0x80, 0xce, 0x3f, 0x60, 0xa1, 0x40, 0x90, 0xe0, -]; -#[cfg(feature = "spat")] -pub const MAPEM_HH_2349_L32: &[u8] = &[ - 0x2, 0x5, 0x0, 0x12, 0x25, 0xf4, 0x18, 0x0, 0x40, 0x6, 0xd, 0x91, 0x21, 0x93, 0x3b, 0x8c, 0x99, - 0xb4, 0x73, 0x71, 0x8b, 0x6, 0xe, 0x60, 0x0, 0x61, 0x25, 0xa1, 0x5, 0x58, 0xef, 0x69, 0x97, - 0x13, 0xed, 0x54, 0x20, 0x28, 0xa3, 0x48, 0x84, 0x29, 0xc6, 0xeb, 0xcb, 0xa2, 0x4, 0xf1, 0xba, - 0xf2, 0xe8, 0x9d, 0x6, 0x9d, 0xa8, 0x20, 0xf2, 0xda, 0x81, 0x9a, 0x2, 0x4, 0x8, 0x0, 0x0, 0xab, - 0x7b, 0x2f, 0x8e, 0x40, 0x82, 0x99, 0xd0, 0x51, 0x10, 0x68, 0xaa, 0x0, 0xf2, 0x71, 0xba, 0xf2, - 0xe8, 0x81, 0x3c, 0x6e, 0xbc, 0xba, 0x27, 0x41, 0xa7, 0x6a, 0x8, 0x3c, 0xb6, 0xa0, 0x66, 0x40, - 0x81, 0x2, 0x0, 0x0, 0x2a, 0xd7, 0x94, 0x19, 0x68, 0x1f, 0x39, 0x8d, 0x0, 0x71, 0x38, 0xdd, - 0x79, 0x74, 0x40, 0x9e, 0x37, 0x5e, 0x5d, 0x13, 0xa0, 0xd3, 0xb5, 0x4, 0x1e, 0x5b, 0x50, 0x32, - 0x20, 0x40, 0x81, 0x0, 0x0, 0x10, 0x62, 0x36, 0xae, 0x80, 0xce, 0xbe, 0x48, 0x3, 0x49, 0xc6, - 0xeb, 0xcb, 0xa2, 0x4, 0xf1, 0xba, 0xf2, 0xe8, 0x9d, 0x6, 0x9d, 0xa8, 0x20, 0xf2, 0xda, 0x81, - 0x91, 0x2, 0x4, 0x8, 0x0, 0x0, 0x80, 0x87, 0x34, 0x8e, 0x6, 0x71, 0xf9, 0x44, 0x19, 0x4e, 0x37, - 0x5e, 0x5d, 0x10, 0x27, 0x8d, 0xd7, 0x97, 0x44, 0xe8, 0x34, 0xed, 0x41, 0x7, 0x96, 0xd4, 0xc, - 0x90, 0x10, 0x20, 0x40, 0x0, 0x4, 0xe, 0x99, 0xa7, 0x80, 0x4c, 0x90, 0x38, 0x28, 0x68, 0x30, - 0x45, 0x0, 0x61, 0x38, 0xdd, 0x79, 0x74, 0x40, 0x9e, 0x37, 0x5e, 0x5d, 0x13, 0xa0, 0xd3, 0xb5, - 0x4, 0x1e, 0x5b, 0x50, 0x32, 0x20, 0x20, 0x81, 0x0, 0x0, 0x10, 0x8f, 0x27, 0xe, 0x41, 0x31, - 0xc2, 0x28, 0x82, 0xe9, 0xc6, 0xeb, 0xcb, 0xa2, 0x4, 0xf1, 0xba, 0xf2, 0xe8, 0x9d, 0x6, 0x9d, - 0xa8, 0x20, 0xf2, 0xda, 0x81, 0x92, 0x1, 0x4, 0x8, 0x0, 0x0, 0x82, 0xfb, 0x37, 0x70, 0x6, 0x75, - 0xef, 0x5, 0xc, 0x5, 0x88, 0x20, 0xb, 0x27, 0x1b, 0xaf, 0x2e, 0x88, 0x13, 0xc6, 0xeb, 0xcb, - 0xa2, 0x74, 0x1a, 0x76, 0xa0, 0x83, 0xcb, 0x6a, 0x6, 0x44, 0x4, 0x10, 0x20, 0x0, 0x2, 0x7, - 0x32, 0xdb, 0xe8, 0x26, 0x48, 0x15, 0x10, 0x55, 0x38, 0xdd, 0x79, 0x74, 0x40, 0x9e, 0x37, 0x5e, - 0x5d, 0x13, 0xa0, 0xd3, 0xb5, 0x4, 0x1e, 0x5b, 0x50, 0x32, 0x40, 0x20, 0x81, 0x0, 0x0, 0x10, - 0x6, 0x96, 0xd6, 0x0, 0xce, 0x3f, 0x60, 0xa1, 0x60, 0xa0, 0xf5, 0x0, 0xb5, 0xa3, 0x61, 0xd1, - 0xcb, 0x9f, 0x4e, 0x59, 0x74, 0xe6, 0xcb, 0xb9, 0x3, 0x34, 0x1a, 0x76, 0xa0, 0x83, 0xcb, 0x6a, - 0x6, 0x66, 0x44, 0x0, 0x0, 0x0, 0x95, 0x57, 0xe2, 0x0, 0xfc, 0x46, 0x24, 0xec, 0x62, 0x2e, - 0xc7, 0x57, 0x40, 0x12, 0x4e, 0x37, 0x5e, 0x5d, 0x10, 0x27, 0x8d, 0xd7, 0x97, 0x44, 0xe8, 0x34, - 0xed, 0x41, 0x7, 0x96, 0xd4, 0xc, 0x88, 0x10, 0x20, 0x40, 0x0, 0x4, 0x22, 0xfd, 0xb3, 0x20, - 0x4c, 0x70, 0x62, 0x20, 0xea, 0x71, 0xba, 0xf2, 0xe8, 0x81, 0x3c, 0x6e, 0xbc, 0xba, 0x27, 0x41, - 0xa7, 0x6a, 0x8, 0x3c, 0xb6, 0xa0, 0x66, 0x80, 0x81, 0x2, 0x0, 0x0, 0x2a, 0xda, 0xa4, 0x1, - 0xd8, 0x20, 0xd6, 0x74, 0x14, 0x3c, 0x1c, 0x26, 0xa0, 0xa, 0xb4, 0x6c, 0x3a, 0x39, 0x73, 0xe9, - 0xcb, 0x2e, 0x9c, 0xd9, 0x77, 0x20, 0x6a, 0x83, 0x4e, 0xd4, 0x10, 0x79, 0x6d, 0x40, 0xc4, 0x48, - 0x80, 0x0, 0x0, 0x11, 0x81, 0x6e, 0x2, 0x81, 0xcc, 0x71, 0x88, 0x5c, 0x25, 0x20, 0x4c, 0x80, - 0xeb, 0x46, 0xc3, 0xa3, 0x97, 0x3e, 0x9c, 0xb2, 0xe9, 0xcd, 0x97, 0x72, 0x6, 0x28, 0x34, 0xed, - 0x41, 0x7, 0x96, 0xd4, 0xc, 0x89, 0x8, 0x0, 0x0, 0xf, 0x21, 0x6, 0xc, 0xfb, 0xa, 0x3e, 0x44, - 0xf0, 0x10, 0xc, 0x0, 0x18, 0xb2, 0x5d, 0x83, 0x13, 0xcb, 0xa8, 0xa2, 0x58, 0xba, 0x11, 0x16, - 0x8e, 0xa0, 0x8c, 0x18, 0x20, 0x7, 0xfc, 0x10, 0x5a, 0x76, 0x7, 0xd1, 0x3b, 0xb, 0xa1, 0x1b, - 0x40, 0x80, 0x20, 0x0, 0x3f, 0xc, 0xe8, 0x1f, 0xe6, 0x78, 0x10, 0x23, 0x3a, 0x8, 0x25, 0x9e, - 0x44, 0x6a, 0x3b, 0x20, 0x2, 0x8a, 0xc1, 0x48, 0x0, 0x10, 0x1d, 0x60, 0x84, 0x0, 0x8, 0x10, - 0x80, 0x44, 0x9c, 0x6e, 0xbc, 0xba, 0x20, 0x4f, 0x1b, 0xaf, 0x2e, 0x89, 0xd0, 0x69, 0xda, 0x82, - 0xf, 0x2d, 0xa8, 0x19, 0x90, 0x20, 0x40, 0x80, 0x0, 0xa, 0xb7, 0x20, 0xfe, 0x5c, 0x7, 0xda, - 0x63, 0x44, 0x11, 0x4e, 0x37, 0x5e, 0x5d, 0x10, 0x27, 0x8d, 0xd7, 0x97, 0x44, 0xe8, 0x34, 0xed, - 0x41, 0x7, 0x96, 0xd4, 0xc, 0x90, 0x10, 0x20, 0x40, 0x0, 0x4, 0x18, 0x69, 0xad, 0xe0, 0x33, - 0xaf, 0xa0, 0x28, 0x48, 0x20, 0x35, 0x10, 0x6d, 0x38, 0xdd, 0x79, 0x74, 0x40, 0x9e, 0x37, 0x5e, - 0x5d, 0x13, 0xa0, 0xd3, 0xb5, 0x4, 0x1e, 0x5b, 0x50, 0x32, 0x40, 0x40, 0x81, 0x0, 0x0, 0x10, - 0x8c, 0x36, 0xc6, 0x1, 0x31, 0xc1, 0xc0, 0xa1, 0xc0, 0x91, 0x25, 0x0, 0x45, 0xa3, 0x61, 0xd1, - 0xcb, 0x9f, 0x4e, 0x59, 0x74, 0xe6, 0xcb, 0xb9, 0x3, 0x44, 0x1a, 0x76, 0xa0, 0x83, 0xcb, 0x6a, - 0x6, 0x22, 0x44, 0x0, 0x0, 0x0, 0x8c, 0x3, 0xf1, 0x64, 0xf, 0xed, 0x92, 0xe2, 0xc5, 0xf8, 0xba, - 0x64, 0x6, 0x5a, 0x36, 0x1d, 0x1c, 0xb9, 0xf4, 0xe5, 0x97, 0x4e, 0x6c, 0xbb, 0x90, 0x32, 0x41, - 0xa7, 0x6a, 0x8, 0x3c, 0xb6, 0xa0, 0x64, 0x48, 0x40, 0x0, 0x0, 0x29, 0x6, 0xee, 0x66, 0xf4, - 0x91, 0x7b, 0x93, 0xc8, 0x8, 0x6, 0x0, 0x4c, 0x7f, 0x2, 0x68, 0x0, 0xa1, 0x8e, 0x0, 0x44, 0x51, - 0xa4, 0x3, 0xe5, 0x88, 0x34, 0x38, 0x3, 0x5, 0x85, 0xa0, 0x0, 0x38, 0x4a, 0x20, 0x6a, 0x71, - 0xba, 0xf2, 0xe8, 0x81, 0x3c, 0x6e, 0xbc, 0xba, 0x27, 0x41, 0xa7, 0x6a, 0x8, 0x3c, 0xb6, 0xa0, - 0x62, 0xc0, 0x81, 0x2, 0x0, 0x0, 0x21, 0x74, 0x52, 0x99, 0x1, 0xf5, 0x98, 0xc1, 0x41, 0xc0, - 0xa1, 0x48, 0x2, 0x89, 0xc6, 0xeb, 0xcb, 0xa2, 0x4, 0xf1, 0xba, 0xf2, 0xe8, 0x9d, 0x6, 0x9d, - 0xa8, 0x20, 0xf2, 0xda, 0x81, 0x91, 0x2, 0x4, 0x8, 0x0, 0x0, 0x81, 0xd6, 0xb4, 0xea, 0x9, 0x92, - 0x5, 0x44, 0x1f, 0x4e, 0x37, 0x5e, 0x5d, 0x10, 0x27, 0x8d, 0xd7, 0x97, 0x44, 0xe8, 0x34, 0xed, - 0x41, 0x7, 0x96, 0xd4, 0xc, 0xd0, 0x10, 0x20, 0x40, 0x0, 0x5, 0x5b, 0x85, 0x7f, 0x15, 0x3, - 0xe7, 0x31, 0x82, 0x88, 0x3, 0xc5, 0x11, 0x3, 0x93, 0x8d, 0xd7, 0x97, 0x44, 0x9, 0xe3, 0x75, - 0xe5, 0xd1, 0x3a, 0xd, 0x3b, 0x50, 0x41, 0xe5, 0xb5, 0x3, 0x16, 0x4, 0x8, 0x10, 0x0, 0x1, 0xc, - 0x61, 0x7a, 0xd4, 0x10, 0x5b, 0x3a, 0xa, 0xd, 0x5, 0xb, 0x40, 0x20, 0x4e, 0x37, 0x5e, 0x5d, - 0x10, 0x27, 0x8d, 0xd7, 0x97, 0x44, 0xe8, 0x34, 0xed, 0x41, 0x7, 0x96, 0xd4, 0xc, 0xc8, 0x10, - 0x20, 0x40, 0x0, 0x5, 0x5b, 0xde, 0x7c, 0x62, 0x4, 0x1a, 0xce, 0xa2, 0x7, 0xa7, 0x1b, 0xaf, - 0x2e, 0x88, 0x13, 0xc6, 0xeb, 0xcb, 0xa2, 0x74, 0x1a, 0x76, 0xa0, 0x83, 0xcb, 0x6a, 0x6, 0x68, - 0x8, 0x10, 0x20, 0x0, 0x2, 0xad, 0x7e, 0x41, 0x99, 0x1, 0xf3, 0x98, 0xc1, 0x42, 0x1, 0xa1, - 0x88, 0x2, 0x9, 0xc6, 0xeb, 0xcb, 0xa2, 0x4, 0xf1, 0xba, 0xf2, 0xe8, 0x9d, 0x6, 0x9d, 0xa8, - 0x20, 0xf2, 0xda, 0x81, 0x99, 0x2, 0x4, 0x8, 0x0, 0x0, 0xab, 0x6b, 0xd0, 0x6, 0xc0, 0x83, 0x59, - 0xd4, 0x41, 0x34, 0xe3, 0x75, 0xe5, 0xd1, 0x2, 0x78, 0xdd, 0x79, 0x74, 0x4e, 0x83, 0x4e, 0xd4, - 0x10, 0x79, 0x6d, 0x40, 0xc9, 0x1, 0x2, 0x4, 0x0, 0x0, 0x40, 0x42, 0x9a, 0x56, 0x3, 0x38, 0xfd, - 0x82, 0x85, 0x2, 0x43, 0x80, -]; -#[cfg(feature = "spat")] -pub const MAPEM_HH_2349_L33: &[u8] = &[ - 0x2, 0x5, 0x0, 0x12, 0x25, 0xf4, 0x18, 0x0, 0x42, 0x6, 0xd, 0x91, 0x21, 0x93, 0x3b, 0x8c, 0x99, - 0xb4, 0x73, 0x71, 0x8b, 0x6, 0xe, 0x60, 0x0, 0x61, 0x25, 0xa1, 0x5, 0x58, 0xef, 0x69, 0x97, - 0x13, 0xed, 0x54, 0x20, 0x28, 0xa3, 0x48, 0x84, 0x29, 0xc6, 0xeb, 0xcb, 0xa2, 0x4, 0xf1, 0xba, - 0xf2, 0xe8, 0x9d, 0x6, 0x9d, 0xa8, 0x20, 0xf2, 0xda, 0x81, 0x9a, 0x2, 0x4, 0x8, 0x0, 0x0, 0xab, - 0x7b, 0x2f, 0x8e, 0x40, 0x82, 0x99, 0xd0, 0x51, 0x10, 0x68, 0xaa, 0x0, 0xf2, 0x71, 0xba, 0xf2, - 0xe8, 0x81, 0x3c, 0x6e, 0xbc, 0xba, 0x27, 0x41, 0xa7, 0x6a, 0x8, 0x3c, 0xb6, 0xa0, 0x66, 0x40, - 0x81, 0x2, 0x0, 0x0, 0x2a, 0xd7, 0x94, 0x19, 0x68, 0x1f, 0x39, 0x8d, 0x10, 0x75, 0x38, 0xdd, - 0x79, 0x74, 0x40, 0x9e, 0x37, 0x5e, 0x5d, 0x13, 0xa0, 0xd3, 0xb5, 0x4, 0x1e, 0x5b, 0x50, 0x33, - 0x40, 0x40, 0x81, 0x0, 0x0, 0x15, 0x6d, 0x52, 0x0, 0xec, 0x10, 0x6b, 0x3a, 0xa, 0x1e, 0xe, - 0x13, 0x44, 0x1b, 0x4e, 0x37, 0x5e, 0x5d, 0x10, 0x27, 0x8d, 0xd7, 0x97, 0x44, 0xe8, 0x34, 0xed, - 0x41, 0x7, 0x96, 0xd4, 0xc, 0x90, 0x10, 0x20, 0x40, 0x0, 0x4, 0x23, 0xd, 0xb1, 0x80, 0x4c, - 0x70, 0x70, 0x28, 0x70, 0x24, 0x49, 0x0, 0x69, 0x38, 0xdd, 0x79, 0x74, 0x40, 0x9e, 0x37, 0x5e, - 0x5d, 0x13, 0xa0, 0xd3, 0xb5, 0x4, 0x1e, 0x5b, 0x50, 0x32, 0x20, 0x40, 0x81, 0x0, 0x0, 0x10, - 0x10, 0xe6, 0x91, 0xc0, 0xce, 0x3f, 0x28, 0x83, 0x29, 0xc6, 0xeb, 0xcb, 0xa2, 0x4, 0xf1, 0xba, - 0xf2, 0xe8, 0x9d, 0x6, 0x9d, 0xa8, 0x20, 0xf2, 0xda, 0x81, 0x92, 0x2, 0x4, 0x8, 0x0, 0x0, 0x81, - 0xd3, 0x34, 0xf0, 0x9, 0x92, 0x7, 0x5, 0xd, 0x6, 0x8, 0xa2, 0xb, 0xa7, 0x1b, 0xaf, 0x2e, 0x88, - 0x13, 0xc6, 0xeb, 0xcb, 0xa2, 0x74, 0x1a, 0x76, 0xa0, 0x83, 0xcb, 0x6a, 0x6, 0x48, 0x4, 0x10, - 0x20, 0x0, 0x2, 0xb, 0xec, 0xdd, 0xc0, 0x19, 0xd7, 0xbc, 0x14, 0x30, 0x16, 0x20, 0x80, 0x2c, - 0x9c, 0x6e, 0xbc, 0xba, 0x20, 0x4f, 0x1b, 0xaf, 0x2e, 0x89, 0xd0, 0x69, 0xda, 0x82, 0xf, 0x2d, - 0xa8, 0x19, 0x10, 0x10, 0x40, 0x80, 0x0, 0x8, 0x1c, 0xcb, 0x6f, 0xa0, 0x99, 0x20, 0x54, 0x41, - 0x54, 0xe3, 0x75, 0xe5, 0xd1, 0x2, 0x78, 0xdd, 0x79, 0x74, 0x4e, 0x83, 0x4e, 0xd4, 0x10, 0x79, - 0x6d, 0x40, 0xc9, 0x0, 0x82, 0x4, 0x0, 0x0, 0x40, 0x1a, 0x5b, 0x58, 0x3, 0x38, 0xfd, 0x82, - 0x85, 0x82, 0x83, 0xd0, 0x7, 0x13, 0x8d, 0xd7, 0x97, 0x44, 0x9, 0xe3, 0x75, 0xe5, 0xd1, 0x3a, - 0xd, 0x3b, 0x50, 0x41, 0xe5, 0xb5, 0x3, 0x22, 0x4, 0x8, 0x10, 0x0, 0x1, 0x6, 0x23, 0x6a, 0xe8, - 0xc, 0xeb, 0xe4, 0xc8, 0x12, 0xb4, 0x6c, 0x3a, 0x39, 0x73, 0xe9, 0xcb, 0x2e, 0x9c, 0xd9, 0x77, - 0x20, 0x64, 0x83, 0x4e, 0xd4, 0x10, 0x79, 0x6d, 0x40, 0xcc, 0xd0, 0x80, 0x0, 0x0, 0x12, 0xad, - 0x1e, 0x3f, 0x1c, 0x4, 0xed, 0x3b, 0xc2, 0xa7, 0xc3, 0x3c, 0xe1, 0x82, 0xc1, 0x20, 0x0, 0xc, - 0x11, 0x40, 0x21, 0x68, 0xd8, 0x74, 0x72, 0xe7, 0xd3, 0x96, 0x5d, 0x39, 0xb2, 0xee, 0x40, 0xcd, - 0x6, 0x9d, 0xa8, 0x20, 0xf2, 0xda, 0x81, 0x91, 0x11, 0x0, 0x0, 0x0, 0x24, 0xa, 0xb9, 0x91, - 0x10, 0xc3, 0xd3, 0xb2, 0x28, 0x71, 0x3c, 0x54, 0x41, 0x34, 0xe3, 0x75, 0xe5, 0xd1, 0x2, 0x78, - 0xdd, 0x79, 0x74, 0x4e, 0x83, 0x4e, 0xd4, 0x10, 0x79, 0x6d, 0x40, 0xc9, 0x1, 0x2, 0x4, 0x0, - 0x0, 0x40, 0x42, 0x9a, 0x56, 0x3, 0x38, 0xfd, 0x82, 0x85, 0x2, 0x43, 0x90, 0x6, 0x13, 0x8d, - 0xd7, 0x97, 0x44, 0x9, 0xe3, 0x75, 0xe5, 0xd1, 0x3a, 0xd, 0x3b, 0x50, 0x41, 0xe5, 0xb5, 0x3, - 0x22, 0x2, 0x8, 0x10, 0x0, 0x1, 0x8, 0xf2, 0x70, 0xe4, 0x13, 0x1c, 0x22, 0xa0, 0x8, 0xb4, 0x6c, - 0x3a, 0x39, 0x73, 0xe9, 0xcb, 0x2e, 0x9c, 0xd9, 0x77, 0x20, 0x68, 0x83, 0x4e, 0xd4, 0x10, 0x79, - 0x6d, 0x40, 0xc4, 0x48, 0x80, 0x0, 0x0, 0x11, 0x80, 0x7e, 0x2c, 0x81, 0xfd, 0xb2, 0x5c, 0x58, - 0xbf, 0x17, 0x48, 0x2, 0x49, 0xc6, 0xeb, 0xcb, 0xa2, 0x4, 0xf1, 0xba, 0xf2, 0xe8, 0x9d, 0x6, - 0x9d, 0xa8, 0x20, 0xf2, 0xda, 0x81, 0x91, 0x2, 0x4, 0x8, 0x0, 0x0, 0x84, 0x5f, 0xb6, 0x64, 0x9, - 0x8e, 0xc, 0x44, 0xd, 0x4e, 0x37, 0x5e, 0x5d, 0x10, 0x27, 0x8d, 0xd7, 0x97, 0x44, 0xe8, 0x34, - 0xed, 0x41, 0x7, 0x96, 0xd4, 0xc, 0x58, 0x10, 0x20, 0x40, 0x0, 0x4, 0x2e, 0x8a, 0x53, 0x20, - 0x3e, 0xb3, 0x18, 0x28, 0x38, 0x14, 0x29, 0x0, 0x51, 0x38, 0xdd, 0x79, 0x74, 0x40, 0x9e, 0x37, - 0x5e, 0x5d, 0x13, 0xa0, 0xd3, 0xb5, 0x4, 0x1e, 0x5b, 0x50, 0x32, 0x20, 0x40, 0x81, 0x0, 0x0, - 0x10, 0x3a, 0xd6, 0x9d, 0x41, 0x32, 0x40, 0xa8, 0x83, 0xe9, 0xc6, 0xeb, 0xcb, 0xa2, 0x4, 0xf1, - 0xba, 0xf2, 0xe8, 0x9d, 0x6, 0x9d, 0xa8, 0x20, 0xf2, 0xda, 0x81, 0x9a, 0x2, 0x4, 0x8, 0x0, 0x0, - 0xab, 0x70, 0xaf, 0xe2, 0xa0, 0x7c, 0xe6, 0x30, 0x51, 0x0, 0x78, 0xa2, 0x20, 0x72, 0x71, 0xba, - 0xf2, 0xe8, 0x81, 0x3c, 0x6e, 0xbc, 0xba, 0x27, 0x41, 0xa7, 0x6a, 0x8, 0x3c, 0xb6, 0xa0, 0x62, - 0xc0, 0x81, 0x2, 0x0, 0x0, 0x21, 0x8c, 0x2f, 0x5a, 0x82, 0xb, 0x67, 0x41, 0x41, 0xa0, 0xa1, - 0x68, 0x4, 0x9, 0xc6, 0xeb, 0xcb, 0xa2, 0x4, 0xf1, 0xba, 0xf2, 0xe8, 0x9d, 0x6, 0x9d, 0xa8, - 0x20, 0xf2, 0xda, 0x81, 0x99, 0x2, 0x4, 0x8, 0x0, 0x0, 0xab, 0x7b, 0xcf, 0x8c, 0x40, 0x83, - 0x59, 0xd4, 0x40, 0xf4, 0xe3, 0x75, 0xe5, 0xd1, 0x2, 0x78, 0xdd, 0x79, 0x74, 0x4e, 0x83, 0x4e, - 0xd4, 0x10, 0x79, 0x6d, 0x40, 0xcd, 0x1, 0x2, 0x4, 0x0, 0x0, 0x55, 0xaf, 0xc8, 0x33, 0x20, - 0x3e, 0x73, 0x18, 0x28, 0x40, 0x34, 0x31, 0x90, 0x29, 0x68, 0xd8, 0x74, 0x72, 0xe7, 0xd3, 0x96, - 0x5d, 0x39, 0xb2, 0xee, 0x40, 0xc5, 0x6, 0x9d, 0xa8, 0x20, 0xf2, 0xda, 0x81, 0x99, 0xa1, 0x0, - 0x0, 0x0, 0x45, 0x5a, 0x6e, 0x7c, 0xf8, 0x9, 0xda, 0x77, 0x80, 0x80, 0x60, 0x2, 0xa7, 0xbf, - 0xbc, 0xf1, 0xa, 0xc1, 0x60, 0x0, 0xc, 0x15, 0x61, 0x4, 0x0, 0xc, 0xc, 0x80, 0x20, 0x9c, 0x6e, - 0xbc, 0xba, 0x20, 0x4f, 0x1b, 0xaf, 0x2e, 0x89, 0xd0, 0x69, 0xda, 0x82, 0xf, 0x2d, 0xa8, 0x19, - 0x90, 0x20, 0x40, 0x80, 0x0, 0xa, 0xb6, 0xbd, 0x0, 0x6c, 0x8, 0x35, 0x9d, 0x40, 0x22, 0x4e, - 0x37, 0x5e, 0x5d, 0x10, 0x27, 0x8d, 0xd7, 0x97, 0x44, 0xe8, 0x34, 0xed, 0x41, 0x7, 0x96, 0xd4, - 0xc, 0xc8, 0x10, 0x20, 0x40, 0x0, 0x5, 0x5b, 0x90, 0x7f, 0x2e, 0x3, 0xed, 0x31, 0xa8, 0x2, - 0xad, 0x1b, 0xe, 0x8e, 0x5c, 0xfa, 0x72, 0xcb, 0xa7, 0x36, 0x5d, 0xc8, 0x1a, 0xa0, 0xd3, 0xb5, - 0x4, 0x1e, 0x5b, 0x50, 0x31, 0x12, 0x20, 0x0, 0x0, 0x4, 0x60, 0x5b, 0x80, 0xa0, 0x73, 0x1c, - 0x62, 0x17, 0x9, 0x48, 0x12, 0x20, 0x8a, 0x71, 0xba, 0xf2, 0xe8, 0x81, 0x3c, 0x6e, 0xbc, 0xba, - 0x27, 0x41, 0xa7, 0x6a, 0x8, 0x3c, 0xb6, 0xa0, 0x64, 0x80, 0x81, 0x2, 0x0, 0x0, 0x20, 0xc3, - 0x4d, 0x6f, 0x1, 0x9d, 0x7d, 0x1, 0x42, 0x41, 0x1, 0xa0, -]; - -// More data: -// - 34 (Neuer Pferdemarkt/Neuer Kamp): 2 layers, quite complex bike crossings - -/// Just some random SPATEM -#[cfg(feature = "spat")] -pub const SPATEM: &[u8] = &[ - 0x02, 0x04, 0x00, 0x00, 0x30, 0x16, 0x00, 0x38, 0x4a, 0x6c, 0x1a, 0x17, 0xe4, 0xd4, 0xa7, 0x7d, - 0x93, 0x5b, 0x8c, 0x9a, 0xb0, 0x63, 0x71, 0x92, 0xe6, 0x50, 0x00, 0x30, 0x9c, 0x50, 0x40, 0x00, - 0x0e, 0xa7, 0x1d, 0x4f, 0xf0, 0x10, 0x00, 0x22, 0x8c, 0xe2, 0xf9, 0x44, 0xff, 0x63, 0x5b, 0x63, - 0x48, 0x71, 0xad, 0xb1, 0xae, 0xa1, 0xae, 0xa7, 0x80, 0x10, 0xa1, 0xb8, 0xbe, 0x29, 0x40, 0xa0, - 0xd6, 0xd8, 0xd1, 0x5c, 0x6b, 0x6c, 0x6c, 0x0c, 0x6c, 0x0d, 0xe0, 0x06, 0x28, 0x0e, 0x2d, 0xfa, - 0x68, 0xf6, 0x35, 0xb6, 0x34, 0x57, 0x1a, 0xdb, 0x1b, 0x03, 0x1b, 0x03, 0x78, 0x02, 0x0a, 0x1b, - 0x8d, 0x8b, 0x8d, 0xc0, 0x0d, 0xa7, 0x0d, 0x11, 0xc6, 0xd3, 0x86, 0xd4, 0xc6, 0xd4, 0xde, 0x00, - 0xa2, 0x8a, 0xe3, 0x5f, 0x23, 0x6c, 0x43, 0x66, 0x03, 0x43, 0x71, 0xb3, 0x01, 0xbb, 0x71, 0xba, - 0xd1, 0x80, 0x30, 0xa0, 0x38, 0xaf, 0x79, 0x86, 0x50, 0xd6, 0xd8, 0xd1, 0x5c, 0x6b, 0x6c, 0x6c, - 0x0c, 0x6c, 0x0c, 0x60, 0x0e, 0x28, 0xce, 0x35, 0xfc, 0x36, 0xce, 0x36, 0x6a, 0x34, 0x87, 0x1b, - 0x35, 0x1b, 0x44, 0x1b, 0x44, 0x78, 0x04, 0x0a, 0x1b, 0x8d, 0x8b, 0x8d, 0xc0, 0x0d, 0xa7, 0x0d, - 0x15, 0xc6, 0xd3, 0x86, 0xe3, 0xc6, 0xe1, 0x46, 0x01, 0x22, 0x80, 0xe2, 0xdf, 0xa5, 0xcd, 0x03, - 0x5b, 0x63, 0x45, 0x71, 0xad, 0xb1, 0xb1, 0xc1, 0xb0, 0xd1, 0x80, -]; - -/// Some random CAM -#[cfg(feature = "cam")] -pub const CAM: &[u8] = &[ - 0x02, 0x02, 0xde, 0x14, 0x0c, 0xe5, 0xc7, 0xc0, 0x40, 0x5a, 0xb2, 0x3d, 0x82, 0xce, 0x27, 0x81, - 0xe9, 0xa2, 0x78, 0x27, 0x4b, 0xc6, 0x33, 0xfa, 0x54, 0x58, 0x7c, 0xa0, 0xa2, 0x7e, 0x83, 0x02, - 0x96, 0x8a, 0x97, 0x33, 0xff, 0x82, 0x00, 0x1a, 0x10, 0x3f, 0xe0, 0x14, 0x39, 0x80, 0x10, 0x6e, - 0x00, 0x75, 0x80, 0x11, 0x58, 0xce, 0x00, 0x02, 0xf0, 0x3a, 0xdc, 0x08, 0xc4, 0xc8, 0x00, 0x01, - 0x57, 0x81, 0xd6, 0x20, 0x46, 0x96, 0x33, 0x80, 0x0a, 0xbc, 0x0e, 0xdb, 0x02, 0x39, 0x31, 0x9c, - 0x00, 0x55, 0xe0, 0x75, 0x08, 0x11, 0x85, 0x90, 0x00, 0x02, 0xaf, 0x03, 0xa0, 0xc0, 0x91, 0x2c, - 0x80, 0x00, 0x16, 0x78, 0x1c, 0x9e, 0x05, 0x65, 0x64, 0x00, 0x00, 0xc3, 0xc0, 0xe0, 0x90, 0x2d, - 0xbb, 0x19, 0xc0, 0x06, 0xde, 0x05, 0x8d, 0x81, 0x02, 0x18, 0xce, 0x00, 0x35, 0xf0, 0x15, 0x5c, - 0x00, 0x06, 0xc6, 0x70, 0x00, 0xdf, 0x80, 0x8d, 0x5f, 0xde, 0x66, 0x27, 0x00, 0x07, 0x3c, 0x04, - 0x76, 0xfd, 0x67, 0x31, 0x9c, 0x00, 0x58, 0x60, 0x41, 0x37, 0xd3, 0x15, 0x89, 0xc0, 0x06, 0xdc, -]; - -#[cfg(any(feature = "cam_tx", feature = "uart"))] -pub const CAM_SMALL: &[u8] = &[ - 0x2, 0x2, 0xc1, 0x73, 0x25, 0x68, 0x17, 0x28, 0x40, 0x29, 0xd5, 0xb3, 0x40, 0xf, 0x1f, 0xea, - 0xf0, 0x1f, 0xff, 0xff, 0xfc, 0x23, 0xb7, 0x74, 0x3e, 0x0, 0x0, 0xf, 0xc0, 0x0, 0x7e, 0x81, - 0x38, 0x25, 0x7, 0x37, 0xfe, 0xeb, 0xff, 0xf6, 0x0, 0x0, 0xd, 0xff, 0xff, 0x7f, 0xff, 0xf1, - 0xce, 0x40, 0x40, 0x0, -]; diff --git a/src/ubx.rs b/src/ubx.rs deleted file mode 100644 index 8e1f32e..0000000 --- a/src/ubx.rs +++ /dev/null @@ -1,106 +0,0 @@ -//! u-blox helpers -#![allow(unused)] - -use alloc::vec::Vec; - -pub fn pretty_print_mon_ver(packet: &ublox::mon_ver::MonVerRef) -> alloc::string::String { - alloc::format!( - "UBX-MON-VER: SW version: {} HW version: {}; Extensions: {:?}", - packet.software_version(), - packet.hardware_version(), - packet.extension().collect::>() - ) -} - -pub fn pretty_print_mon_comms(packet: &ublox::mon_comms::MonCommsRef) -> alloc::string::String { - alloc::format!( - "UBX-MON-COMMS: {} ports ({:?}), {} tx err, info {:?}", - packet.n_ports(), - packet.prot_ids(), - packet.tx_errors(), - packet - .ports() - .map(|v| alloc::format!("{v:?}")) - .collect::>() - ) -} - -pub fn pretty_print_mon_rf(packet: &ublox::mon_rf::MonRfRef) -> alloc::string::String { - alloc::format!( - "UBX-MON-RF: {:?}", - packet - .blocks() - .map(|v| alloc::format!("{v:?}")) - .collect::>() - ) -} - -pub fn pretty_print_nav_sat(packet: &ublox::nav_sat::NavSatRef) -> alloc::string::String { - // sort by quality flags - let mut sat_infos = packet.svs().collect::>(); - sat_infos.sort_unstable_by_key(|v| v.flags_raw() & 0x7); - sat_infos.reverse(); - - let sat_info_strings = sat_infos - .iter() - .map(|v| { - alloc::format!( - "- {}/{:3}: E {:3.0}, A {:3.0}, CNO {:2.1} dBHz, {:?}, {:?}", - v.gnss_id(), - v.sv_id(), - v.elev(), - v.azim(), - v.cno(), - v.flags().quality_ind(), - v.flags().health(), - ) - }) - .collect::>(); - - alloc::format!( - "UBX-NAV-SAT: num {:?}\n{}", - packet.num_svs(), - sat_info_strings.join("\n") - ) -} - -impl<'a> TryFrom<&ublox::nav_pvt::proto27::NavPvtRef<'a>> for crate::applogic::GnssFix { - type Error = alloc::string::String; - - fn try_from(value: &ublox::nav_pvt::proto27::NavPvtRef<'a>) -> Result { - let has_time = value.fix_type() == ublox::GnssFixType::Fix3D - || value.fix_type() == ublox::GnssFixType::GPSPlusDeadReckoning - || value.fix_type() == ublox::GnssFixType::TimeOnlyFix; - let has_posvel = value.fix_type() == ublox::GnssFixType::Fix3D - || value.fix_type() == ublox::GnssFixType::GPSPlusDeadReckoning; - - if !has_posvel || !has_time { - return Err(alloc::format!( - "NAV-PVT without valid fix: {:?}", - value.fix_type() - )); - } - - let pos: ublox::PositionLLA = value.into(); - let vel: ublox::Velocity = value.into(); - - let time: chrono::DateTime = value - .try_into() - .map_err(|err| alloc::format!("Failed to convert time: {err}"))?; - - let latitude_deg = pos.lat; - let longitude_deg = pos.lon; - #[allow(clippy::cast_precision_loss, clippy::cast_possible_truncation)] - let heading_deg = vel.heading as f32; - #[allow(clippy::cast_precision_loss, clippy::cast_possible_truncation)] - let speed_mps = vel.speed as f32; - - Ok(Self { - time: Some(time.naive_utc()), - latitude_deg, - longitude_deg, - heading_deg: Some(heading_deg), - speed_mps: Some(speed_mps), - }) - } -}