From ae31a02a8671af2690610dc013abf3d0e9c869f6 Mon Sep 17 00:00:00 2001 From: jedi Date: Tue, 6 Jul 2021 17:28:30 +0200 Subject: [PATCH 01/30] ignore compile_commands.json --- firmware/.gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/firmware/.gitignore b/firmware/.gitignore index e88780c..9ac0926 100644 --- a/firmware/.gitignore +++ b/firmware/.gitignore @@ -141,4 +141,5 @@ Mkfile.old dkms.conf *.remove -firmware/ \ No newline at end of file +firmware/ +compile_commands.json \ No newline at end of file From 0edf0e80c25145010ab570b9e9611cb01c8e40ef Mon Sep 17 00:00:00 2001 From: jedi Date: Tue, 6 Jul 2021 22:55:38 +0200 Subject: [PATCH 02/30] add function to clear config in flash --- firmware/system.c | 12 +++++++++++- firmware/system.h | 2 ++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/firmware/system.c b/firmware/system.c index 3de7ada..f4a9e2e 100644 --- a/firmware/system.c +++ b/firmware/system.c @@ -10,4 +10,14 @@ #include #include -#include \ No newline at end of file +#include + +void system_clear_config(){ + vPortEnterCritical(); + uint32_t num_sectors = 5 + DEFAULT_SYSPARAM_SECTORS; + uint32_t start = sdk_flashchip.chip_size - num_sectors * sdk_flashchip.sector_size; + for (uint32_t i = 0; i < num_sectors; i++) { + spiflash_erase_sector(start + i * sdk_flashchip.sector_size); + } + sdk_system_restart(); +} \ No newline at end of file diff --git a/firmware/system.h b/firmware/system.h index 42ec187..1046f49 100644 --- a/firmware/system.h +++ b/firmware/system.h @@ -9,6 +9,8 @@ extern "C" { #endif +void system_clear_config(); + #ifdef __cplusplus } #endif From 283bd6a5c1680c26d0c49fc0e3259398db854f12 Mon Sep 17 00:00:00 2001 From: jedi Date: Wed, 7 Jul 2021 22:28:58 +0200 Subject: [PATCH 03/30] change .build.yml to use prebuilt toolchain image --- .build.yml | 32 +++----------------------------- 1 file changed, 3 insertions(+), 29 deletions(-) diff --git a/.build.yml b/.build.yml index df72ca3..086e7f1 100644 --- a/.build.yml +++ b/.build.yml @@ -11,36 +11,10 @@ steps: commands: - git submodule update --init --recursive -- name: patch - image: alpine/git +- name: firmware + image: docker-repo.service.intern.lab.or.it:5000/fiatlux-build-env depends_on: [ submodules ] commands: - - |- - sed -i 's/GNU bash, version (3\\\.\[1-9\]|4)/GNU bash, version (3.[1-9]|4|5)/g' modules/sdk/crosstool-NG/configure.ac - - - mkdir -p modules/sdk/crosstool-NG/.build/tarballs - - wget https://github.com/libexpat/libexpat/releases/download/R_2_1_0/expat-2.1.0.tar.gz -O modules/sdk/crosstool-NG/.build/tarballs/expat-2.1.0.tar.gz - -- name: toolchain - image: debian:sid - depends_on: [ patch ] - commands: - - apt update - - apt install -y make bash gawk g++ gcc libc6-dev flex bison automake autoconf gperf texinfo wget git bzip2 help2man libtool libtool-bin unrar-free unzip ncurses-dev libexpat-dev python-dev python3 - - cd modules/sdk - - export CT_EXPERIMENTAL=y - - export CT_ALLOW_BUILD_AS_ROOT=y - - export CT_ALLOW_BUILD_AS_ROOT_SURE=y - - make standalone=y -j$(nproc) - - wget -N https://raw.githubusercontent.com/espressif/esptool/master/esptool.py -O xtensa-lx106-elf/bin/esptool.py - -- name: firmware - image: debian:sid - depends_on: [ toolchain ] - commands: - - apt update - - apt remove --purge -y python2 - - apt install -y make python3 python3-serial python-is-python3 perl - export PATH=$(pwd)/modules/sdk/xtensa-lx106-elf/bin:$PATH - make firmware -j$(nproc) @@ -60,7 +34,7 @@ steps: - name: unittest image: debian:sid - depends_on: [ patch ] + depends_on: [ firmware ] commands: - apt update - apt install -y make From 171a11eebf185424206d0f22a6d736a41c79ef84 Mon Sep 17 00:00:00 2001 From: jedi Date: Fri, 9 Jul 2021 21:35:41 +0200 Subject: [PATCH 04/30] initialize flash area for config --- firmware/fiatlux.c | 3 ++- firmware/system.c | 14 ++++++++++++++ firmware/system.h | 1 + 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/firmware/fiatlux.c b/firmware/fiatlux.c index a0fb5ea..1368d86 100644 --- a/firmware/fiatlux.c +++ b/firmware/fiatlux.c @@ -2,6 +2,7 @@ #include #include +#include "system.h" #include "wifi.h" #include "web.h" #include "mqtt.h" @@ -15,5 +16,5 @@ void user_init(void) sdk_wifi_set_sleep_type(WIFI_SLEEP_MODEM); - while(1); + system_init_config(); } diff --git a/firmware/system.c b/firmware/system.c index f4a9e2e..350f86e 100644 --- a/firmware/system.c +++ b/firmware/system.c @@ -20,4 +20,18 @@ void system_clear_config(){ spiflash_erase_sector(start + i * sdk_flashchip.sector_size); } sdk_system_restart(); +} + +void system_init_config(){ + uint32_t base_addr; + uint32_t num_sectors; + if(sysparam_get_info(&base_addr, &num_sectors) != SYSPARAM_OK) { + printf("Warning: WiFi config, sysparam not initialized\n"); + num_sectors = DEFAULT_SYSPARAM_SECTORS; + base_addr = sdk_flashchip.chip_size - (5 + num_sectors) * sdk_flashchip.sector_size; + if(sysparam_create_area(base_addr, num_sectors, true) == SYSPARAM_OK) { + sysparam_init(base_addr, 0); + } + sdk_system_restart(); + } } \ No newline at end of file diff --git a/firmware/system.h b/firmware/system.h index 1046f49..14f5188 100644 --- a/firmware/system.h +++ b/firmware/system.h @@ -10,6 +10,7 @@ extern "C" { #endif void system_clear_config(); +void system_init_config(); #ifdef __cplusplus } From d7ef71e89a353bc305cb147d36b1f302ec5d2950 Mon Sep 17 00:00:00 2001 From: jedi Date: Mon, 12 Jul 2021 17:32:53 +0200 Subject: [PATCH 05/30] Run ERC and DRC in CI Pipeline --- .build.yml | 7 + pcb/fiatlux.kicad_pcb | 300 ++++++++++++++++++++-------------------- pcb/fiatlux.kiplot.yaml | 66 +++++++++ pcb/fiatlux.pro | 4 +- 4 files changed, 225 insertions(+), 152 deletions(-) create mode 100644 pcb/fiatlux.kiplot.yaml diff --git a/.build.yml b/.build.yml index 086e7f1..4ccdf4a 100644 --- a/.build.yml +++ b/.build.yml @@ -23,6 +23,13 @@ steps: commands: - apt update - apt install -y make zip + - cd pcb + - kibot -d gen -c fiatlux.kiplot.yaml -s update_xml,run_drc -i + - kibot -d gen -c fiatlux.kiplot.yaml -s update_xml,run_erc -i + - kibot -d gen -c fiatlux.kiplot.yaml -s run_drc,run_erc print_sch + - kibot -d gen -c fiatlux.kiplot.yaml -s all print_front gerbers + - ls -lA + - cd - - make pcb -j$(nproc) - name: case diff --git a/pcb/fiatlux.kicad_pcb b/pcb/fiatlux.kicad_pcb index 3668c16..6d91f75 100644 --- a/pcb/fiatlux.kicad_pcb +++ b/pcb/fiatlux.kicad_pcb @@ -39,7 +39,7 @@ (user_trace_width 0.5) (user_trace_width 1) (user_trace_width 2) - (trace_clearance 0.2) + (trace_clearance 0.127) (zone_clearance 0.508) (zone_45_only no) (trace_min 0.2) @@ -131,7 +131,7 @@ (net 35 CS1) (net_class Default "Dies ist die voreingestellte Netzklasse." - (clearance 0.2) + (clearance 0.127) (trace_width 0.25) (via_dia 0.8) (via_drill 0.4) @@ -174,6 +174,148 @@ (add_net nRST) ) + (module TerminalBlock:TerminalBlock_bornier-2_P5.08mm locked (layer B.Cu) (tedit 60EC57DC) (tstamp 60AE33DA) + (at 55.88 71.12 180) + (descr "simple 2-pin terminal block, pitch 5.08mm, revamped version of bornier2") + (tags "terminal block bornier2") + (path /6078273A/6092962E) + (fp_text reference J12 (at 2.54 5.08) (layer B.SilkS) hide + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text value Conn_01x02_Male (at 2.54 -5.08) (layer B.Fab) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_line (start -2.41 -2.55) (end 7.49 -2.55) (layer B.Fab) (width 0.1)) + (fp_line (start -2.46 3.75) (end -2.46 -3.75) (layer B.Fab) (width 0.1)) + (fp_line (start -2.46 -3.75) (end 7.54 -3.75) (layer B.Fab) (width 0.1)) + (fp_line (start 7.54 -3.75) (end 7.54 3.75) (layer B.Fab) (width 0.1)) + (fp_line (start 7.54 3.75) (end -2.46 3.75) (layer B.Fab) (width 0.1)) + (fp_line (start 7.62 -2.54) (end -2.54 -2.54) (layer B.SilkS) (width 0.12)) + (fp_line (start 7.62 -3.81) (end 7.62 3.81) (layer B.SilkS) (width 0.12)) + (fp_line (start 7.62 3.81) (end -2.54 3.81) (layer B.SilkS) (width 0.12)) + (fp_line (start -2.54 3.81) (end -2.54 -3.81) (layer B.SilkS) (width 0.12)) + (fp_line (start -2.54 -3.81) (end 7.62 -3.81) (layer B.SilkS) (width 0.12)) + (fp_line (start -2 4) (end 7.79 4) (layer B.CrtYd) (width 0.05)) + (fp_line (start -2 4) (end -2 -4) (layer B.CrtYd) (width 0.05)) + (fp_line (start 7.79 -4) (end 7.79 4) (layer B.CrtYd) (width 0.05)) + (fp_line (start 7.79 -4) (end -2 -4) (layer B.CrtYd) (width 0.05)) + (fp_text user %R (at 2.54 0) (layer B.Fab) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (pad 2 thru_hole circle (at 5.08 0 180) (size 3 3) (drill 1.52) (layers *.Cu *.Mask) + (net 10 +12V)) + (pad 1 thru_hole rect (at 0 0 180) (size 3 3) (drill 1.52) (layers *.Cu *.Mask) + (net 1 GND)) + (model ${KISYS3DMOD}/TerminalBlock.3dshapes/TerminalBlock_bornier-2_P5.08mm.wrl + (offset (xyz 2.539999961853027 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + (model ${KISYS3DMOD}/TerminalBlock_Phoenix.3dshapes/TerminalBlock_Phoenix_MKDS-1,5-2-5.08_1x02_P5.08mm_Horizontal.step + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module TerminalBlock:TerminalBlock_bornier-4_P5.08mm locked (layer B.Cu) (tedit 60EC0394) (tstamp 6091B242) + (at 35.56 68.58 90) + (descr "simple 4-pin terminal block, pitch 5.08mm, revamped version of bornier4") + (tags "terminal block bornier4") + (path /60B13D6D) + (fp_text reference J2 (at 7.6 4.8 90) (layer B.SilkS) hide + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text value Conn_01x04_Male (at 7.6 -4.75 90) (layer B.Fab) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_line (start -2.48 -2.55) (end 17.72 -2.55) (layer B.Fab) (width 0.1)) + (fp_line (start -2.43 -3.75) (end -2.48 -3.75) (layer B.Fab) (width 0.1)) + (fp_line (start -2.48 -3.75) (end -2.48 3.75) (layer B.Fab) (width 0.1)) + (fp_line (start -2.48 3.75) (end 17.72 3.75) (layer B.Fab) (width 0.1)) + (fp_line (start 17.72 3.75) (end 17.72 -3.75) (layer B.Fab) (width 0.1)) + (fp_line (start 17.72 -3.75) (end -2.43 -3.75) (layer B.Fab) (width 0.1)) + (fp_line (start -2.54 3.81) (end -2.54 -3.81) (layer B.SilkS) (width 0.12)) + (fp_line (start 17.78 -3.81) (end 17.78 3.81) (layer B.SilkS) (width 0.12)) + (fp_line (start 17.78 -2.54) (end -2.54 -2.54) (layer B.SilkS) (width 0.12)) + (fp_line (start -2.54 3.81) (end 17.78 3.81) (layer B.SilkS) (width 0.12)) + (fp_line (start -2.54 -3.81) (end 17.78 -3.81) (layer B.SilkS) (width 0.12)) + (fp_line (start -2.7 3) (end 17 3) (layer B.CrtYd) (width 0.05)) + (fp_line (start -2.73 3) (end -2.73 -4) (layer B.CrtYd) (width 0.05)) + (fp_line (start 17 -4) (end 17 3) (layer B.CrtYd) (width 0.05)) + (fp_line (start 17 -4) (end -2.73 -4) (layer B.CrtYd) (width 0.05)) + (fp_text user %R (at 7.62 0 90) (layer B.Fab) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (pad 4 thru_hole circle (at 15.24 0 90) (size 3 3) (drill 1.52) (layers *.Cu *.Mask) + (net 13 VOUT)) + (pad 1 thru_hole rect (at 0 0 90) (size 3 3) (drill 1.52) (layers *.Cu *.Mask) + (net 1 GND)) + (pad 3 thru_hole circle (at 10.16 0 90) (size 3 3) (drill 1.52) (layers *.Cu *.Mask) + (net 14 TXD0)) + (pad 2 thru_hole circle (at 5.08 0 90) (size 3 3) (drill 1.52) (layers *.Cu *.Mask) + (net 15 RXD0)) + (model ${KISYS3DMOD}/TerminalBlock.3dshapes/TerminalBlock_bornier-4_P5.08mm.wrl + (offset (xyz 7.619999885559082 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + (model ${KISYS3DMOD}/TerminalBlock_Phoenix.3dshapes/TerminalBlock_Phoenix_MKDS-1,5-4-5.08_1x04_P5.08mm_Horizontal.step + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module TerminalBlock:TerminalBlock_bornier-4_P5.08mm locked (layer B.Cu) (tedit 60EC0001) (tstamp 6091B26F) + (at 35.56 48.26 90) + (descr "simple 4-pin terminal block, pitch 5.08mm, revamped version of bornier4") + (tags "terminal block bornier4") + (path /608BFA99) + (fp_text reference J4 (at 7.6 4.8 90) (layer B.SilkS) hide + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text value Conn_01x04_Male (at 7.6 -4.75 90) (layer B.Fab) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_line (start -2.48 -2.55) (end 17.72 -2.55) (layer B.Fab) (width 0.1)) + (fp_line (start -2.43 -3.75) (end -2.48 -3.75) (layer B.Fab) (width 0.1)) + (fp_line (start -2.48 -3.75) (end -2.48 3.75) (layer B.Fab) (width 0.1)) + (fp_line (start -2.48 3.75) (end 17.72 3.75) (layer B.Fab) (width 0.1)) + (fp_line (start 17.72 3.75) (end 17.72 -3.75) (layer B.Fab) (width 0.1)) + (fp_line (start 17.72 -3.75) (end -2.43 -3.75) (layer B.Fab) (width 0.1)) + (fp_line (start -2.54 3.81) (end -2.54 -3.81) (layer B.SilkS) (width 0.12)) + (fp_line (start 17.78 -3.81) (end 17.78 3.81) (layer B.SilkS) (width 0.12)) + (fp_line (start 17.78 -2.54) (end -2.54 -2.54) (layer B.SilkS) (width 0.12)) + (fp_line (start -2.54 3.81) (end 17.78 3.81) (layer B.SilkS) (width 0.12)) + (fp_line (start -2.54 -3.81) (end 17.78 -3.81) (layer B.SilkS) (width 0.12)) + (fp_line (start -2.73 3) (end 17 3) (layer B.CrtYd) (width 0.05)) + (fp_line (start -2.73 3) (end -2.73 -4) (layer B.CrtYd) (width 0.05)) + (fp_line (start 17 -4) (end 17 3) (layer B.CrtYd) (width 0.05)) + (fp_line (start 17 -4) (end -2.73 -4) (layer B.CrtYd) (width 0.05)) + (fp_text user %R (at 7.62 0 90) (layer B.Fab) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (pad 4 thru_hole circle (at 15.24 0 90) (size 3 3) (drill 1.52) (layers *.Cu *.Mask) + (net 13 VOUT)) + (pad 1 thru_hole rect (at 0 0 90) (size 3 3) (drill 1.52) (layers *.Cu *.Mask) + (net 1 GND)) + (pad 3 thru_hole circle (at 10.16 0 90) (size 3 3) (drill 1.52) (layers *.Cu *.Mask) + (net 16 SCLK)) + (pad 2 thru_hole circle (at 5.08 0 90) (size 3 3) (drill 1.52) (layers *.Cu *.Mask) + (net 17 MOSI)) + (model ${KISYS3DMOD}/TerminalBlock.3dshapes/TerminalBlock_bornier-4_P5.08mm.wrl + (offset (xyz 7.619999885559082 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + (model ${KISYS3DMOD}/TerminalBlock_Phoenix.3dshapes/TerminalBlock_Phoenix_MKDS-1,5-4-5.08_1x04_P5.08mm_Horizontal.step + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + (module TestPoint:TestPoint_Pad_D2.0mm (layer F.Cu) (tedit 5A0F774F) (tstamp 60A933BB) (at 58.42 53.34 90) (descr "SMD pad as test Point, diameter 2.0mm") @@ -207,9 +349,6 @@ (fp_text value 0Ohm (at 0 -1.65 90) (layer B.Fab) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) - (fp_text user %R (at 0 0 90) (layer B.Fab) - (effects (font (size 0.5 0.5) (thickness 0.08)) (justify mirror)) - ) (fp_line (start -1 -0.625) (end -1 0.625) (layer B.Fab) (width 0.1)) (fp_line (start -1 0.625) (end 1 0.625) (layer B.Fab) (width 0.1)) (fp_line (start 1 0.625) (end 1 -0.625) (layer B.Fab) (width 0.1)) @@ -220,6 +359,9 @@ (fp_line (start -1.68 0.95) (end 1.68 0.95) (layer B.CrtYd) (width 0.05)) (fp_line (start 1.68 0.95) (end 1.68 -0.95) (layer B.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end -1.68 -0.95) (layer B.CrtYd) (width 0.05)) + (fp_text user %R (at 0 0 90) (layer B.Fab) + (effects (font (size 0.5 0.5) (thickness 0.08)) (justify mirror)) + ) (pad 2 smd roundrect (at 0.9125 0 270) (size 1.025 1.4) (layers B.Cu B.Paste B.Mask) (roundrect_rratio 0.243902) (net 23 SEN_12V)) (pad 1 smd roundrect (at -0.9125 0 270) (size 1.025 1.4) (layers B.Cu B.Paste B.Mask) (roundrect_rratio 0.243902) @@ -243,9 +385,6 @@ (fp_text value 0Ohm (at 0 -1.65 90) (layer B.Fab) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) - (fp_text user %R (at 0 0 90) (layer B.Fab) - (effects (font (size 0.5 0.5) (thickness 0.08)) (justify mirror)) - ) (fp_line (start -1 -0.625) (end -1 0.625) (layer B.Fab) (width 0.1)) (fp_line (start -1 0.625) (end 1 0.625) (layer B.Fab) (width 0.1)) (fp_line (start 1 0.625) (end 1 -0.625) (layer B.Fab) (width 0.1)) @@ -256,6 +395,9 @@ (fp_line (start -1.68 0.95) (end 1.68 0.95) (layer B.CrtYd) (width 0.05)) (fp_line (start 1.68 0.95) (end 1.68 -0.95) (layer B.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end -1.68 -0.95) (layer B.CrtYd) (width 0.05)) + (fp_text user %R (at 0 0 90) (layer B.Fab) + (effects (font (size 0.5 0.5) (thickness 0.08)) (justify mirror)) + ) (pad 2 smd roundrect (at 0.9125 0 270) (size 1.025 1.4) (layers B.Cu B.Paste B.Mask) (roundrect_rratio 0.243902) (net 9 SEN_5V)) (pad 1 smd roundrect (at -0.9125 0 270) (size 1.025 1.4) (layers B.Cu B.Paste B.Mask) (roundrect_rratio 0.243902) @@ -1983,50 +2125,6 @@ ) ) - (module TerminalBlock:TerminalBlock_bornier-2_P5.08mm locked (layer B.Cu) (tedit 59FF03AB) (tstamp 60AE33DA) - (at 55.88 71.12 180) - (descr "simple 2-pin terminal block, pitch 5.08mm, revamped version of bornier2") - (tags "terminal block bornier2") - (path /6078273A/6092962E) - (fp_text reference J12 (at 2.54 5.08) (layer B.SilkS) hide - (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) - ) - (fp_text value Conn_01x02_Male (at 2.54 -5.08) (layer B.Fab) - (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) - ) - (fp_line (start -2.41 -2.55) (end 7.49 -2.55) (layer B.Fab) (width 0.1)) - (fp_line (start -2.46 3.75) (end -2.46 -3.75) (layer B.Fab) (width 0.1)) - (fp_line (start -2.46 -3.75) (end 7.54 -3.75) (layer B.Fab) (width 0.1)) - (fp_line (start 7.54 -3.75) (end 7.54 3.75) (layer B.Fab) (width 0.1)) - (fp_line (start 7.54 3.75) (end -2.46 3.75) (layer B.Fab) (width 0.1)) - (fp_line (start 7.62 -2.54) (end -2.54 -2.54) (layer B.SilkS) (width 0.12)) - (fp_line (start 7.62 -3.81) (end 7.62 3.81) (layer B.SilkS) (width 0.12)) - (fp_line (start 7.62 3.81) (end -2.54 3.81) (layer B.SilkS) (width 0.12)) - (fp_line (start -2.54 3.81) (end -2.54 -3.81) (layer B.SilkS) (width 0.12)) - (fp_line (start -2.54 -3.81) (end 7.62 -3.81) (layer B.SilkS) (width 0.12)) - (fp_line (start -2.71 4) (end 7.79 4) (layer B.CrtYd) (width 0.05)) - (fp_line (start -2.71 4) (end -2.71 -4) (layer B.CrtYd) (width 0.05)) - (fp_line (start 7.79 -4) (end 7.79 4) (layer B.CrtYd) (width 0.05)) - (fp_line (start 7.79 -4) (end -2.71 -4) (layer B.CrtYd) (width 0.05)) - (fp_text user %R (at 2.54 0) (layer B.Fab) - (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) - ) - (pad 2 thru_hole circle (at 5.08 0 180) (size 3 3) (drill 1.52) (layers *.Cu *.Mask) - (net 10 +12V)) - (pad 1 thru_hole rect (at 0 0 180) (size 3 3) (drill 1.52) (layers *.Cu *.Mask) - (net 1 GND)) - (model ${KISYS3DMOD}/TerminalBlock.3dshapes/TerminalBlock_bornier-2_P5.08mm.wrl - (offset (xyz 2.539999961853027 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - (model ${KISYS3DMOD}/TerminalBlock_Phoenix.3dshapes/TerminalBlock_Phoenix_MKDS-1,5-2-5.08_1x02_P5.08mm_Horizontal.step - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - (module TestPoint:TestPoint_Pad_D2.0mm (layer F.Cu) (tedit 5A0F774F) (tstamp 6091B2ED) (at 68.58 66.04) (descr "SMD pad as test Point, diameter 2.0mm") @@ -2255,55 +2353,6 @@ ) ) - (module TerminalBlock:TerminalBlock_bornier-4_P5.08mm locked (layer B.Cu) (tedit 59FF03D1) (tstamp 6091B26F) - (at 35.56 48.26 90) - (descr "simple 4-pin terminal block, pitch 5.08mm, revamped version of bornier4") - (tags "terminal block bornier4") - (path /608BFA99) - (fp_text reference J4 (at 7.6 4.8 90) (layer B.SilkS) hide - (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) - ) - (fp_text value Conn_01x04_Male (at 7.6 -4.75 90) (layer B.Fab) - (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) - ) - (fp_line (start -2.48 -2.55) (end 17.72 -2.55) (layer B.Fab) (width 0.1)) - (fp_line (start -2.43 -3.75) (end -2.48 -3.75) (layer B.Fab) (width 0.1)) - (fp_line (start -2.48 -3.75) (end -2.48 3.75) (layer B.Fab) (width 0.1)) - (fp_line (start -2.48 3.75) (end 17.72 3.75) (layer B.Fab) (width 0.1)) - (fp_line (start 17.72 3.75) (end 17.72 -3.75) (layer B.Fab) (width 0.1)) - (fp_line (start 17.72 -3.75) (end -2.43 -3.75) (layer B.Fab) (width 0.1)) - (fp_line (start -2.54 3.81) (end -2.54 -3.81) (layer B.SilkS) (width 0.12)) - (fp_line (start 17.78 -3.81) (end 17.78 3.81) (layer B.SilkS) (width 0.12)) - (fp_line (start 17.78 -2.54) (end -2.54 -2.54) (layer B.SilkS) (width 0.12)) - (fp_line (start -2.54 3.81) (end 17.78 3.81) (layer B.SilkS) (width 0.12)) - (fp_line (start -2.54 -3.81) (end 17.78 -3.81) (layer B.SilkS) (width 0.12)) - (fp_line (start -2.73 4) (end 17.97 4) (layer B.CrtYd) (width 0.05)) - (fp_line (start -2.73 4) (end -2.73 -4) (layer B.CrtYd) (width 0.05)) - (fp_line (start 17.97 -4) (end 17.97 4) (layer B.CrtYd) (width 0.05)) - (fp_line (start 17.97 -4) (end -2.73 -4) (layer B.CrtYd) (width 0.05)) - (fp_text user %R (at 7.62 0 90) (layer B.Fab) - (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) - ) - (pad 4 thru_hole circle (at 15.24 0 90) (size 3 3) (drill 1.52) (layers *.Cu *.Mask) - (net 13 VOUT)) - (pad 1 thru_hole rect (at 0 0 90) (size 3 3) (drill 1.52) (layers *.Cu *.Mask) - (net 1 GND)) - (pad 3 thru_hole circle (at 10.16 0 90) (size 3 3) (drill 1.52) (layers *.Cu *.Mask) - (net 16 SCLK)) - (pad 2 thru_hole circle (at 5.08 0 90) (size 3 3) (drill 1.52) (layers *.Cu *.Mask) - (net 17 MOSI)) - (model ${KISYS3DMOD}/TerminalBlock.3dshapes/TerminalBlock_bornier-4_P5.08mm.wrl - (offset (xyz 7.619999885559082 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - (model ${KISYS3DMOD}/TerminalBlock_Phoenix.3dshapes/TerminalBlock_Phoenix_MKDS-1,5-4-5.08_1x04_P5.08mm_Horizontal.step - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - (module TerminalBlock:TerminalBlock_bornier-2_P5.08mm locked (layer B.Cu) (tedit 59FF03AB) (tstamp 6091B257) (at 66.04 71.12 180) (descr "simple 2-pin terminal block, pitch 5.08mm, revamped version of bornier2") @@ -2348,55 +2397,6 @@ ) ) - (module TerminalBlock:TerminalBlock_bornier-4_P5.08mm locked (layer B.Cu) (tedit 59FF03D1) (tstamp 6091B242) - (at 35.56 68.58 90) - (descr "simple 4-pin terminal block, pitch 5.08mm, revamped version of bornier4") - (tags "terminal block bornier4") - (path /60B13D6D) - (fp_text reference J2 (at 7.6 4.8 90) (layer B.SilkS) hide - (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) - ) - (fp_text value Conn_01x04_Male (at 7.6 -4.75 90) (layer B.Fab) - (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) - ) - (fp_line (start -2.48 -2.55) (end 17.72 -2.55) (layer B.Fab) (width 0.1)) - (fp_line (start -2.43 -3.75) (end -2.48 -3.75) (layer B.Fab) (width 0.1)) - (fp_line (start -2.48 -3.75) (end -2.48 3.75) (layer B.Fab) (width 0.1)) - (fp_line (start -2.48 3.75) (end 17.72 3.75) (layer B.Fab) (width 0.1)) - (fp_line (start 17.72 3.75) (end 17.72 -3.75) (layer B.Fab) (width 0.1)) - (fp_line (start 17.72 -3.75) (end -2.43 -3.75) (layer B.Fab) (width 0.1)) - (fp_line (start -2.54 3.81) (end -2.54 -3.81) (layer B.SilkS) (width 0.12)) - (fp_line (start 17.78 -3.81) (end 17.78 3.81) (layer B.SilkS) (width 0.12)) - (fp_line (start 17.78 -2.54) (end -2.54 -2.54) (layer B.SilkS) (width 0.12)) - (fp_line (start -2.54 3.81) (end 17.78 3.81) (layer B.SilkS) (width 0.12)) - (fp_line (start -2.54 -3.81) (end 17.78 -3.81) (layer B.SilkS) (width 0.12)) - (fp_line (start -2.73 4) (end 17.97 4) (layer B.CrtYd) (width 0.05)) - (fp_line (start -2.73 4) (end -2.73 -4) (layer B.CrtYd) (width 0.05)) - (fp_line (start 17.97 -4) (end 17.97 4) (layer B.CrtYd) (width 0.05)) - (fp_line (start 17.97 -4) (end -2.73 -4) (layer B.CrtYd) (width 0.05)) - (fp_text user %R (at 7.62 0 90) (layer B.Fab) - (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) - ) - (pad 4 thru_hole circle (at 15.24 0 90) (size 3 3) (drill 1.52) (layers *.Cu *.Mask) - (net 13 VOUT)) - (pad 1 thru_hole rect (at 0 0 90) (size 3 3) (drill 1.52) (layers *.Cu *.Mask) - (net 1 GND)) - (pad 3 thru_hole circle (at 10.16 0 90) (size 3 3) (drill 1.52) (layers *.Cu *.Mask) - (net 14 TXD0)) - (pad 2 thru_hole circle (at 5.08 0 90) (size 3 3) (drill 1.52) (layers *.Cu *.Mask) - (net 15 RXD0)) - (model ${KISYS3DMOD}/TerminalBlock.3dshapes/TerminalBlock_bornier-4_P5.08mm.wrl - (offset (xyz 7.619999885559082 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - (model ${KISYS3DMOD}/TerminalBlock_Phoenix.3dshapes/TerminalBlock_Phoenix_MKDS-1,5-4-5.08_1x04_P5.08mm_Horizontal.step - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - (module MountingHole:MountingHole_2.2mm_M2_Pad_Via locked (layer F.Cu) (tedit 56DDB9C7) (tstamp 6091B216) (at 75 71) (descr "Mounting Hole 2.2mm, M2") diff --git a/pcb/fiatlux.kiplot.yaml b/pcb/fiatlux.kiplot.yaml new file mode 100644 index 0000000..2921d61 --- /dev/null +++ b/pcb/fiatlux.kiplot.yaml @@ -0,0 +1,66 @@ +# Example KiPlot config file +kiplot: + version: 1 + +preflight: + run_erc: true + update_xml: true + run_drc: true + check_zone_fills: false + ignore_unconnected: false + +# global: +# kiauto_wait_start: 60 +# kiauto_time_out_scale: 2 + +outputs: + - name: 'print_sch' + comment: "Print schematic (PDF)" + type: pdf_sch_print + dir: . + options: + output: Schematic.pdf + + - name: 'print_front' + comment: "Print F.Cu+Dwgs.User" + type: pdf_pcb_print + dir: . + options: + output_name: PCB_Top.pdf + layers: + - layer: B.Cu + - layer: F.SilkS + + - name: 'gerbers' + comment: "Gerbers for the board house" + type: gerber + dir: Gerbers + options: + # generic layer options + exclude_edge_layer: true + exclude_pads_from_silkscreen: false + use_aux_axis_as_origin: false + plot_sheet_reference: false + plot_footprint_refs: true + plot_footprint_values: true + force_plot_invisible_refs_vals: false + tent_vias: true + + # gerber options + line_width: 0.1 + subtract_mask_from_silk: false + use_protel_extensions: false + gerber_precision: 4.6 + create_gerber_job_file: true + use_gerber_x2_attributes: true + use_gerber_net_attributes: true + + layers: + - layer: B.Cu + suffix: B_Cu + - layer: F.SilkS + suffix: F_SilkS + - layer: Edge.Cuts + suffix: Edge_Cuts + + diff --git a/pcb/fiatlux.pro b/pcb/fiatlux.pro index 9ec9fb9..471e606 100644 --- a/pcb/fiatlux.pro +++ b/pcb/fiatlux.pro @@ -1,4 +1,4 @@ -update=Di 04 Mai 2021 20:32:15 CEST +update=Mo 12 Jul 2021 16:48:53 CEST version=1 last_client=kicad [general] @@ -241,7 +241,7 @@ Enabled=0 [pcbnew/Netclasses] [pcbnew/Netclasses/Default] Name=Default -Clearance=0.2 +Clearance=0.127 TrackWidth=0.25 ViaDiameter=0.8 ViaDrill=0.4 From aa1b229b2d513aa86ba80e7f15ddd9089e690926 Mon Sep 17 00:00:00 2001 From: jedi Date: Mon, 12 Jul 2021 17:08:21 +0200 Subject: [PATCH 06/30] Fix unconnected trace --- pcb/fiatlux.kicad_pcb | 1819 ++++++++++++++++++++--------------------- 1 file changed, 909 insertions(+), 910 deletions(-) diff --git a/pcb/fiatlux.kicad_pcb b/pcb/fiatlux.kicad_pcb index 6d91f75..f9bf4bd 100644 --- a/pcb/fiatlux.kicad_pcb +++ b/pcb/fiatlux.kicad_pcb @@ -3,7 +3,7 @@ (general (thickness 1.6) (drawings 68) - (tracks 710) + (tracks 714) (zones 0) (modules 71) (nets 36) @@ -13,12 +13,12 @@ (layers (0 F.Cu signal) (31 B.Cu signal) - (32 B.Adhes user) - (33 F.Adhes user) + (32 B.Adhes user hide) + (33 F.Adhes user hide) (34 B.Paste user hide) (35 F.Paste user hide) - (36 B.SilkS user) - (37 F.SilkS user) + (36 B.SilkS user hide) + (37 F.SilkS user hide) (38 B.Mask user hide) (39 F.Mask user hide) (40 Dwgs.User user hide) @@ -185,20 +185,20 @@ (fp_text value Conn_01x02_Male (at 2.54 -5.08) (layer B.Fab) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) - (fp_line (start -2.41 -2.55) (end 7.49 -2.55) (layer B.Fab) (width 0.1)) - (fp_line (start -2.46 3.75) (end -2.46 -3.75) (layer B.Fab) (width 0.1)) - (fp_line (start -2.46 -3.75) (end 7.54 -3.75) (layer B.Fab) (width 0.1)) - (fp_line (start 7.54 -3.75) (end 7.54 3.75) (layer B.Fab) (width 0.1)) - (fp_line (start 7.54 3.75) (end -2.46 3.75) (layer B.Fab) (width 0.1)) - (fp_line (start 7.62 -2.54) (end -2.54 -2.54) (layer B.SilkS) (width 0.12)) - (fp_line (start 7.62 -3.81) (end 7.62 3.81) (layer B.SilkS) (width 0.12)) - (fp_line (start 7.62 3.81) (end -2.54 3.81) (layer B.SilkS) (width 0.12)) - (fp_line (start -2.54 3.81) (end -2.54 -3.81) (layer B.SilkS) (width 0.12)) - (fp_line (start -2.54 -3.81) (end 7.62 -3.81) (layer B.SilkS) (width 0.12)) - (fp_line (start -2 4) (end 7.79 4) (layer B.CrtYd) (width 0.05)) - (fp_line (start -2 4) (end -2 -4) (layer B.CrtYd) (width 0.05)) - (fp_line (start 7.79 -4) (end 7.79 4) (layer B.CrtYd) (width 0.05)) (fp_line (start 7.79 -4) (end -2 -4) (layer B.CrtYd) (width 0.05)) + (fp_line (start 7.79 -4) (end 7.79 4) (layer B.CrtYd) (width 0.05)) + (fp_line (start -2 4) (end -2 -4) (layer B.CrtYd) (width 0.05)) + (fp_line (start -2 4) (end 7.79 4) (layer B.CrtYd) (width 0.05)) + (fp_line (start -2.54 -3.81) (end 7.62 -3.81) (layer B.SilkS) (width 0.12)) + (fp_line (start -2.54 3.81) (end -2.54 -3.81) (layer B.SilkS) (width 0.12)) + (fp_line (start 7.62 3.81) (end -2.54 3.81) (layer B.SilkS) (width 0.12)) + (fp_line (start 7.62 -3.81) (end 7.62 3.81) (layer B.SilkS) (width 0.12)) + (fp_line (start 7.62 -2.54) (end -2.54 -2.54) (layer B.SilkS) (width 0.12)) + (fp_line (start 7.54 3.75) (end -2.46 3.75) (layer B.Fab) (width 0.1)) + (fp_line (start 7.54 -3.75) (end 7.54 3.75) (layer B.Fab) (width 0.1)) + (fp_line (start -2.46 -3.75) (end 7.54 -3.75) (layer B.Fab) (width 0.1)) + (fp_line (start -2.46 3.75) (end -2.46 -3.75) (layer B.Fab) (width 0.1)) + (fp_line (start -2.41 -2.55) (end 7.49 -2.55) (layer B.Fab) (width 0.1)) (fp_text user %R (at 2.54 0) (layer B.Fab) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) @@ -229,21 +229,21 @@ (fp_text value Conn_01x04_Male (at 7.6 -4.75 90) (layer B.Fab) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) - (fp_line (start -2.48 -2.55) (end 17.72 -2.55) (layer B.Fab) (width 0.1)) - (fp_line (start -2.43 -3.75) (end -2.48 -3.75) (layer B.Fab) (width 0.1)) - (fp_line (start -2.48 -3.75) (end -2.48 3.75) (layer B.Fab) (width 0.1)) - (fp_line (start -2.48 3.75) (end 17.72 3.75) (layer B.Fab) (width 0.1)) - (fp_line (start 17.72 3.75) (end 17.72 -3.75) (layer B.Fab) (width 0.1)) - (fp_line (start 17.72 -3.75) (end -2.43 -3.75) (layer B.Fab) (width 0.1)) - (fp_line (start -2.54 3.81) (end -2.54 -3.81) (layer B.SilkS) (width 0.12)) - (fp_line (start 17.78 -3.81) (end 17.78 3.81) (layer B.SilkS) (width 0.12)) - (fp_line (start 17.78 -2.54) (end -2.54 -2.54) (layer B.SilkS) (width 0.12)) - (fp_line (start -2.54 3.81) (end 17.78 3.81) (layer B.SilkS) (width 0.12)) - (fp_line (start -2.54 -3.81) (end 17.78 -3.81) (layer B.SilkS) (width 0.12)) - (fp_line (start -2.7 3) (end 17 3) (layer B.CrtYd) (width 0.05)) - (fp_line (start -2.73 3) (end -2.73 -4) (layer B.CrtYd) (width 0.05)) - (fp_line (start 17 -4) (end 17 3) (layer B.CrtYd) (width 0.05)) (fp_line (start 17 -4) (end -2.73 -4) (layer B.CrtYd) (width 0.05)) + (fp_line (start 17 -4) (end 17 3) (layer B.CrtYd) (width 0.05)) + (fp_line (start -2.73 3) (end -2.73 -4) (layer B.CrtYd) (width 0.05)) + (fp_line (start -2.7 3) (end 17 3) (layer B.CrtYd) (width 0.05)) + (fp_line (start -2.54 -3.81) (end 17.78 -3.81) (layer B.SilkS) (width 0.12)) + (fp_line (start -2.54 3.81) (end 17.78 3.81) (layer B.SilkS) (width 0.12)) + (fp_line (start 17.78 -2.54) (end -2.54 -2.54) (layer B.SilkS) (width 0.12)) + (fp_line (start 17.78 -3.81) (end 17.78 3.81) (layer B.SilkS) (width 0.12)) + (fp_line (start -2.54 3.81) (end -2.54 -3.81) (layer B.SilkS) (width 0.12)) + (fp_line (start 17.72 -3.75) (end -2.43 -3.75) (layer B.Fab) (width 0.1)) + (fp_line (start 17.72 3.75) (end 17.72 -3.75) (layer B.Fab) (width 0.1)) + (fp_line (start -2.48 3.75) (end 17.72 3.75) (layer B.Fab) (width 0.1)) + (fp_line (start -2.48 -3.75) (end -2.48 3.75) (layer B.Fab) (width 0.1)) + (fp_line (start -2.43 -3.75) (end -2.48 -3.75) (layer B.Fab) (width 0.1)) + (fp_line (start -2.48 -2.55) (end 17.72 -2.55) (layer B.Fab) (width 0.1)) (fp_text user %R (at 7.62 0 90) (layer B.Fab) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) @@ -278,21 +278,21 @@ (fp_text value Conn_01x04_Male (at 7.6 -4.75 90) (layer B.Fab) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) - (fp_line (start -2.48 -2.55) (end 17.72 -2.55) (layer B.Fab) (width 0.1)) - (fp_line (start -2.43 -3.75) (end -2.48 -3.75) (layer B.Fab) (width 0.1)) - (fp_line (start -2.48 -3.75) (end -2.48 3.75) (layer B.Fab) (width 0.1)) - (fp_line (start -2.48 3.75) (end 17.72 3.75) (layer B.Fab) (width 0.1)) - (fp_line (start 17.72 3.75) (end 17.72 -3.75) (layer B.Fab) (width 0.1)) - (fp_line (start 17.72 -3.75) (end -2.43 -3.75) (layer B.Fab) (width 0.1)) - (fp_line (start -2.54 3.81) (end -2.54 -3.81) (layer B.SilkS) (width 0.12)) - (fp_line (start 17.78 -3.81) (end 17.78 3.81) (layer B.SilkS) (width 0.12)) - (fp_line (start 17.78 -2.54) (end -2.54 -2.54) (layer B.SilkS) (width 0.12)) - (fp_line (start -2.54 3.81) (end 17.78 3.81) (layer B.SilkS) (width 0.12)) - (fp_line (start -2.54 -3.81) (end 17.78 -3.81) (layer B.SilkS) (width 0.12)) - (fp_line (start -2.73 3) (end 17 3) (layer B.CrtYd) (width 0.05)) - (fp_line (start -2.73 3) (end -2.73 -4) (layer B.CrtYd) (width 0.05)) - (fp_line (start 17 -4) (end 17 3) (layer B.CrtYd) (width 0.05)) (fp_line (start 17 -4) (end -2.73 -4) (layer B.CrtYd) (width 0.05)) + (fp_line (start 17 -4) (end 17 3) (layer B.CrtYd) (width 0.05)) + (fp_line (start -2.73 3) (end -2.73 -4) (layer B.CrtYd) (width 0.05)) + (fp_line (start -2.73 3) (end 17 3) (layer B.CrtYd) (width 0.05)) + (fp_line (start -2.54 -3.81) (end 17.78 -3.81) (layer B.SilkS) (width 0.12)) + (fp_line (start -2.54 3.81) (end 17.78 3.81) (layer B.SilkS) (width 0.12)) + (fp_line (start 17.78 -2.54) (end -2.54 -2.54) (layer B.SilkS) (width 0.12)) + (fp_line (start 17.78 -3.81) (end 17.78 3.81) (layer B.SilkS) (width 0.12)) + (fp_line (start -2.54 3.81) (end -2.54 -3.81) (layer B.SilkS) (width 0.12)) + (fp_line (start 17.72 -3.75) (end -2.43 -3.75) (layer B.Fab) (width 0.1)) + (fp_line (start 17.72 3.75) (end 17.72 -3.75) (layer B.Fab) (width 0.1)) + (fp_line (start -2.48 3.75) (end 17.72 3.75) (layer B.Fab) (width 0.1)) + (fp_line (start -2.48 -3.75) (end -2.48 3.75) (layer B.Fab) (width 0.1)) + (fp_line (start -2.43 -3.75) (end -2.48 -3.75) (layer B.Fab) (width 0.1)) + (fp_line (start -2.48 -2.55) (end 17.72 -2.55) (layer B.Fab) (width 0.1)) (fp_text user %R (at 7.62 0 90) (layer B.Fab) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) @@ -328,8 +328,8 @@ (fp_text value Testpoint_RST (at 0 2.05 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) - (fp_circle (center 0 0) (end 0 1.2) (layer F.SilkS) (width 0.12)) (fp_circle (center 0 0) (end 1.5 0) (layer F.CrtYd) (width 0.05)) + (fp_circle (center 0 0) (end 0 1.2) (layer F.SilkS) (width 0.12)) (fp_text user %R (at 0 -2 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) @@ -349,16 +349,16 @@ (fp_text value 0Ohm (at 0 -1.65 90) (layer B.Fab) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) - (fp_line (start -1 -0.625) (end -1 0.625) (layer B.Fab) (width 0.1)) - (fp_line (start -1 0.625) (end 1 0.625) (layer B.Fab) (width 0.1)) - (fp_line (start 1 0.625) (end 1 -0.625) (layer B.Fab) (width 0.1)) - (fp_line (start 1 -0.625) (end -1 -0.625) (layer B.Fab) (width 0.1)) - (fp_line (start -0.227064 0.735) (end 0.227064 0.735) (layer B.SilkS) (width 0.12)) - (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) (layer B.SilkS) (width 0.12)) - (fp_line (start -1.68 -0.95) (end -1.68 0.95) (layer B.CrtYd) (width 0.05)) - (fp_line (start -1.68 0.95) (end 1.68 0.95) (layer B.CrtYd) (width 0.05)) - (fp_line (start 1.68 0.95) (end 1.68 -0.95) (layer B.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end -1.68 -0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start 1.68 0.95) (end 1.68 -0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start -1.68 0.95) (end 1.68 0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start -1.68 -0.95) (end -1.68 0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) (layer B.SilkS) (width 0.12)) + (fp_line (start -0.227064 0.735) (end 0.227064 0.735) (layer B.SilkS) (width 0.12)) + (fp_line (start 1 -0.625) (end -1 -0.625) (layer B.Fab) (width 0.1)) + (fp_line (start 1 0.625) (end 1 -0.625) (layer B.Fab) (width 0.1)) + (fp_line (start -1 0.625) (end 1 0.625) (layer B.Fab) (width 0.1)) + (fp_line (start -1 -0.625) (end -1 0.625) (layer B.Fab) (width 0.1)) (fp_text user %R (at 0 0 90) (layer B.Fab) (effects (font (size 0.5 0.5) (thickness 0.08)) (justify mirror)) ) @@ -385,16 +385,16 @@ (fp_text value 0Ohm (at 0 -1.65 90) (layer B.Fab) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) - (fp_line (start -1 -0.625) (end -1 0.625) (layer B.Fab) (width 0.1)) - (fp_line (start -1 0.625) (end 1 0.625) (layer B.Fab) (width 0.1)) - (fp_line (start 1 0.625) (end 1 -0.625) (layer B.Fab) (width 0.1)) - (fp_line (start 1 -0.625) (end -1 -0.625) (layer B.Fab) (width 0.1)) - (fp_line (start -0.227064 0.735) (end 0.227064 0.735) (layer B.SilkS) (width 0.12)) - (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) (layer B.SilkS) (width 0.12)) - (fp_line (start -1.68 -0.95) (end -1.68 0.95) (layer B.CrtYd) (width 0.05)) - (fp_line (start -1.68 0.95) (end 1.68 0.95) (layer B.CrtYd) (width 0.05)) - (fp_line (start 1.68 0.95) (end 1.68 -0.95) (layer B.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end -1.68 -0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start 1.68 0.95) (end 1.68 -0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start -1.68 0.95) (end 1.68 0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start -1.68 -0.95) (end -1.68 0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) (layer B.SilkS) (width 0.12)) + (fp_line (start -0.227064 0.735) (end 0.227064 0.735) (layer B.SilkS) (width 0.12)) + (fp_line (start 1 -0.625) (end -1 -0.625) (layer B.Fab) (width 0.1)) + (fp_line (start 1 0.625) (end 1 -0.625) (layer B.Fab) (width 0.1)) + (fp_line (start -1 0.625) (end 1 0.625) (layer B.Fab) (width 0.1)) + (fp_line (start -1 -0.625) (end -1 0.625) (layer B.Fab) (width 0.1)) (fp_text user %R (at 0 0 90) (layer B.Fab) (effects (font (size 0.5 0.5) (thickness 0.08)) (justify mirror)) ) @@ -420,21 +420,21 @@ (fp_text value Conn_01x06_Male (at 0 -15.03) (layer B.Fab) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) - (fp_line (start 1.8 1.8) (end -1.8 1.8) (layer B.CrtYd) (width 0.05)) - (fp_line (start 1.8 -14.5) (end 1.8 1.8) (layer B.CrtYd) (width 0.05)) - (fp_line (start -1.8 -14.5) (end 1.8 -14.5) (layer B.CrtYd) (width 0.05)) - (fp_line (start -1.8 1.8) (end -1.8 -14.5) (layer B.CrtYd) (width 0.05)) - (fp_line (start -1.33 1.33) (end 0 1.33) (layer B.SilkS) (width 0.12)) - (fp_line (start -1.33 0) (end -1.33 1.33) (layer B.SilkS) (width 0.12)) - (fp_line (start -1.33 -1.27) (end 1.33 -1.27) (layer B.SilkS) (width 0.12)) - (fp_line (start 1.33 -1.27) (end 1.33 -14.03) (layer B.SilkS) (width 0.12)) - (fp_line (start -1.33 -1.27) (end -1.33 -14.03) (layer B.SilkS) (width 0.12)) - (fp_line (start -1.33 -14.03) (end 1.33 -14.03) (layer B.SilkS) (width 0.12)) - (fp_line (start -1.27 0.635) (end -0.635 1.27) (layer B.Fab) (width 0.1)) - (fp_line (start -1.27 -13.97) (end -1.27 0.635) (layer B.Fab) (width 0.1)) - (fp_line (start 1.27 -13.97) (end -1.27 -13.97) (layer B.Fab) (width 0.1)) - (fp_line (start 1.27 1.27) (end 1.27 -13.97) (layer B.Fab) (width 0.1)) (fp_line (start -0.635 1.27) (end 1.27 1.27) (layer B.Fab) (width 0.1)) + (fp_line (start 1.27 1.27) (end 1.27 -13.97) (layer B.Fab) (width 0.1)) + (fp_line (start 1.27 -13.97) (end -1.27 -13.97) (layer B.Fab) (width 0.1)) + (fp_line (start -1.27 -13.97) (end -1.27 0.635) (layer B.Fab) (width 0.1)) + (fp_line (start -1.27 0.635) (end -0.635 1.27) (layer B.Fab) (width 0.1)) + (fp_line (start -1.33 -14.03) (end 1.33 -14.03) (layer B.SilkS) (width 0.12)) + (fp_line (start -1.33 -1.27) (end -1.33 -14.03) (layer B.SilkS) (width 0.12)) + (fp_line (start 1.33 -1.27) (end 1.33 -14.03) (layer B.SilkS) (width 0.12)) + (fp_line (start -1.33 -1.27) (end 1.33 -1.27) (layer B.SilkS) (width 0.12)) + (fp_line (start -1.33 0) (end -1.33 1.33) (layer B.SilkS) (width 0.12)) + (fp_line (start -1.33 1.33) (end 0 1.33) (layer B.SilkS) (width 0.12)) + (fp_line (start -1.8 1.8) (end -1.8 -14.5) (layer B.CrtYd) (width 0.05)) + (fp_line (start -1.8 -14.5) (end 1.8 -14.5) (layer B.CrtYd) (width 0.05)) + (fp_line (start 1.8 -14.5) (end 1.8 1.8) (layer B.CrtYd) (width 0.05)) + (fp_line (start 1.8 1.8) (end -1.8 1.8) (layer B.CrtYd) (width 0.05)) (fp_text user %R (at 0 -6.35 -90) (layer B.Fab) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) @@ -466,11 +466,11 @@ (fp_text value USB_B_Micro (at 0 -1.016) (layer B.Fab) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) - (fp_line (start 5.08 0) (end -5.08 0) (layer B.Fab) (width 0.12)) - (fp_line (start 4.572 4.572) (end 4.572 6.096) (layer B.SilkS) (width 0.12)) - (fp_line (start 4.572 6.096) (end 3.048 6.096) (layer B.SilkS) (width 0.12)) - (fp_line (start -4.572 4.572) (end -4.572 6.096) (layer B.SilkS) (width 0.12)) (fp_line (start -4.572 6.096) (end -3.048 6.096) (layer B.SilkS) (width 0.12)) + (fp_line (start -4.572 4.572) (end -4.572 6.096) (layer B.SilkS) (width 0.12)) + (fp_line (start 4.572 6.096) (end 3.048 6.096) (layer B.SilkS) (width 0.12)) + (fp_line (start 4.572 4.572) (end 4.572 6.096) (layer B.SilkS) (width 0.12)) + (fp_line (start 5.08 0) (end -5.08 0) (layer B.Fab) (width 0.12)) (pad "" thru_hole circle (at -2 3.275) (size 0.65 0.65) (drill 0.65) (layers *.Cu)) (pad "" thru_hole circle (at 2 3.275) (size 0.65 0.65) (drill 0.65) (layers *.Cu)) (pad 5 smd rect (at 1.3 4.2) (size 0.4 1.925) (layers B.Cu B.Paste B.Mask) @@ -509,8 +509,8 @@ (fp_text value Testpoint_RST (at 0 2.05 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) - (fp_circle (center 0 0) (end 0 1.2) (layer F.SilkS) (width 0.12)) (fp_circle (center 0 0) (end 1.5 0) (layer F.CrtYd) (width 0.05)) + (fp_circle (center 0 0) (end 0 1.2) (layer F.SilkS) (width 0.12)) (fp_text user %R (at 0 -2 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) @@ -530,8 +530,8 @@ (fp_text value Testpoint_RST (at 0 2.05 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) - (fp_circle (center 0 0) (end 0 1.2) (layer F.SilkS) (width 0.12)) (fp_circle (center 0 0) (end 1.5 0) (layer F.CrtYd) (width 0.05)) + (fp_circle (center 0 0) (end 0 1.2) (layer F.SilkS) (width 0.12)) (fp_text user %R (at 0 -2 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) @@ -551,8 +551,8 @@ (fp_text value Testpoint_RST (at 0 2.05 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) - (fp_circle (center 0 0) (end 0 1.2) (layer F.SilkS) (width 0.12)) (fp_circle (center 0 0) (end 1.5 0) (layer F.CrtYd) (width 0.05)) + (fp_circle (center 0 0) (end 0 1.2) (layer F.SilkS) (width 0.12)) (fp_text user %R (at 0 -2 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) @@ -572,8 +572,8 @@ (fp_text value Testpoint_RST (at 0 2.05 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) - (fp_circle (center 0 0) (end 0 1.2) (layer F.SilkS) (width 0.12)) (fp_circle (center 0 0) (end 1.5 0) (layer F.CrtYd) (width 0.05)) + (fp_circle (center 0 0) (end 0 1.2) (layer F.SilkS) (width 0.12)) (fp_text user %R (at 0 -2 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) @@ -592,21 +592,21 @@ (fp_text value Conn_01x04_Male (at 0 -9.95) (layer B.Fab) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) - (fp_line (start 1.8 1.8) (end -1.8 1.8) (layer B.CrtYd) (width 0.05)) - (fp_line (start 1.8 -9.4) (end 1.8 1.8) (layer B.CrtYd) (width 0.05)) - (fp_line (start -1.8 -9.4) (end 1.8 -9.4) (layer B.CrtYd) (width 0.05)) - (fp_line (start -1.8 1.8) (end -1.8 -9.4) (layer B.CrtYd) (width 0.05)) - (fp_line (start -1.33 1.33) (end 0 1.33) (layer B.SilkS) (width 0.12)) - (fp_line (start -1.33 0) (end -1.33 1.33) (layer B.SilkS) (width 0.12)) - (fp_line (start -1.33 -1.27) (end 1.33 -1.27) (layer B.SilkS) (width 0.12)) - (fp_line (start 1.33 -1.27) (end 1.33 -8.95) (layer B.SilkS) (width 0.12)) - (fp_line (start -1.33 -1.27) (end -1.33 -8.95) (layer B.SilkS) (width 0.12)) - (fp_line (start -1.33 -8.95) (end 1.33 -8.95) (layer B.SilkS) (width 0.12)) - (fp_line (start -1.27 0.635) (end -0.635 1.27) (layer B.Fab) (width 0.1)) - (fp_line (start -1.27 -8.89) (end -1.27 0.635) (layer B.Fab) (width 0.1)) - (fp_line (start 1.27 -8.89) (end -1.27 -8.89) (layer B.Fab) (width 0.1)) - (fp_line (start 1.27 1.27) (end 1.27 -8.89) (layer B.Fab) (width 0.1)) (fp_line (start -0.635 1.27) (end 1.27 1.27) (layer B.Fab) (width 0.1)) + (fp_line (start 1.27 1.27) (end 1.27 -8.89) (layer B.Fab) (width 0.1)) + (fp_line (start 1.27 -8.89) (end -1.27 -8.89) (layer B.Fab) (width 0.1)) + (fp_line (start -1.27 -8.89) (end -1.27 0.635) (layer B.Fab) (width 0.1)) + (fp_line (start -1.27 0.635) (end -0.635 1.27) (layer B.Fab) (width 0.1)) + (fp_line (start -1.33 -8.95) (end 1.33 -8.95) (layer B.SilkS) (width 0.12)) + (fp_line (start -1.33 -1.27) (end -1.33 -8.95) (layer B.SilkS) (width 0.12)) + (fp_line (start 1.33 -1.27) (end 1.33 -8.95) (layer B.SilkS) (width 0.12)) + (fp_line (start -1.33 -1.27) (end 1.33 -1.27) (layer B.SilkS) (width 0.12)) + (fp_line (start -1.33 0) (end -1.33 1.33) (layer B.SilkS) (width 0.12)) + (fp_line (start -1.33 1.33) (end 0 1.33) (layer B.SilkS) (width 0.12)) + (fp_line (start -1.8 1.8) (end -1.8 -9.4) (layer B.CrtYd) (width 0.05)) + (fp_line (start -1.8 -9.4) (end 1.8 -9.4) (layer B.CrtYd) (width 0.05)) + (fp_line (start 1.8 -9.4) (end 1.8 1.8) (layer B.CrtYd) (width 0.05)) + (fp_line (start 1.8 1.8) (end -1.8 1.8) (layer B.CrtYd) (width 0.05)) (fp_text user %R (at 0 -3.81 -90) (layer B.Fab) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) @@ -637,24 +637,24 @@ (fp_text value "Z 12V" (at 0 1.75) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) - (fp_line (start -2.65 1.1) (end -2.65 -1.1) (layer F.CrtYd) (width 0.05)) - (fp_line (start 2.65 1.1) (end -2.65 1.1) (layer F.CrtYd) (width 0.05)) - (fp_line (start 2.65 -1.1) (end 2.65 1.1) (layer F.CrtYd) (width 0.05)) - (fp_line (start -2.65 -1.1) (end 2.65 -1.1) (layer F.CrtYd) (width 0.05)) - (fp_line (start -0.75 0) (end -0.35 0) (layer F.Fab) (width 0.1)) - (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.Fab) (width 0.1)) - (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.Fab) (width 0.1)) - (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.Fab) (width 0.1)) - (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.Fab) (width 0.1)) - (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.Fab) (width 0.1)) - (fp_line (start 0.25 0) (end 0.75 0) (layer F.Fab) (width 0.1)) - (fp_line (start -1.65 -0.8) (end 1.65 -0.8) (layer F.Fab) (width 0.1)) - (fp_line (start -1.65 0.8) (end -1.65 -0.8) (layer F.Fab) (width 0.1)) - (fp_line (start 1.65 0.8) (end -1.65 0.8) (layer F.Fab) (width 0.1)) - (fp_line (start 1.65 -0.8) (end 1.65 0.8) (layer F.Fab) (width 0.1)) - (fp_line (start -2.55 1) (end 1.75 1) (layer F.SilkS) (width 0.12)) - (fp_line (start -2.55 -1) (end -2.55 1) (layer F.SilkS) (width 0.12)) (fp_line (start 1.75 -1) (end -2.55 -1) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.55 -1) (end -2.55 1) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.55 1) (end 1.75 1) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.65 -0.8) (end 1.65 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.65 0.8) (end -1.65 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -1.65 0.8) (end -1.65 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -1.65 -0.8) (end 1.65 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 0.25 0) (end 0.75 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.Fab) (width 0.1)) + (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.Fab) (width 0.1)) + (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.Fab) (width 0.1)) + (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.Fab) (width 0.1)) + (fp_line (start -0.75 0) (end -0.35 0) (layer F.Fab) (width 0.1)) + (fp_line (start -2.65 -1.1) (end 2.65 -1.1) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.65 -1.1) (end 2.65 1.1) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.65 1.1) (end -2.65 1.1) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.65 1.1) (end -2.65 -1.1) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 -2) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) @@ -681,24 +681,24 @@ (fp_text value "Z 5V" (at 0 1.75) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) - (fp_line (start -2.65 1.1) (end -2.65 -1.1) (layer F.CrtYd) (width 0.05)) - (fp_line (start 2.65 1.1) (end -2.65 1.1) (layer F.CrtYd) (width 0.05)) - (fp_line (start 2.65 -1.1) (end 2.65 1.1) (layer F.CrtYd) (width 0.05)) - (fp_line (start -2.65 -1.1) (end 2.65 -1.1) (layer F.CrtYd) (width 0.05)) - (fp_line (start -0.75 0) (end -0.35 0) (layer F.Fab) (width 0.1)) - (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.Fab) (width 0.1)) - (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.Fab) (width 0.1)) - (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.Fab) (width 0.1)) - (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.Fab) (width 0.1)) - (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.Fab) (width 0.1)) - (fp_line (start 0.25 0) (end 0.75 0) (layer F.Fab) (width 0.1)) - (fp_line (start -1.65 -0.8) (end 1.65 -0.8) (layer F.Fab) (width 0.1)) - (fp_line (start -1.65 0.8) (end -1.65 -0.8) (layer F.Fab) (width 0.1)) - (fp_line (start 1.65 0.8) (end -1.65 0.8) (layer F.Fab) (width 0.1)) - (fp_line (start 1.65 -0.8) (end 1.65 0.8) (layer F.Fab) (width 0.1)) - (fp_line (start -2.55 1) (end 1.75 1) (layer F.SilkS) (width 0.12)) - (fp_line (start -2.55 -1) (end -2.55 1) (layer F.SilkS) (width 0.12)) (fp_line (start 1.75 -1) (end -2.55 -1) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.55 -1) (end -2.55 1) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.55 1) (end 1.75 1) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.65 -0.8) (end 1.65 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.65 0.8) (end -1.65 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -1.65 0.8) (end -1.65 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -1.65 -0.8) (end 1.65 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 0.25 0) (end 0.75 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.Fab) (width 0.1)) + (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.Fab) (width 0.1)) + (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.Fab) (width 0.1)) + (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.Fab) (width 0.1)) + (fp_line (start -0.75 0) (end -0.35 0) (layer F.Fab) (width 0.1)) + (fp_line (start -2.65 -1.1) (end 2.65 -1.1) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.65 -1.1) (end 2.65 1.1) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.65 1.1) (end -2.65 1.1) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.65 1.1) (end -2.65 -1.1) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 -2) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) @@ -725,16 +725,16 @@ (fp_text value 51Ohm (at 0 1.43 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) - (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start -0.237258 0.5225) (end 0.237258 0.5225) (layer F.SilkS) (width 0.12)) - (fp_line (start -0.237258 -0.5225) (end 0.237258 -0.5225) (layer F.SilkS) (width 0.12)) - (fp_line (start 0.8 0.4125) (end -0.8 0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start 0.8 -0.4125) (end 0.8 0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start -0.8 -0.4125) (end 0.8 -0.4125) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 0.4125) (end -0.8 -0.4125) (layer F.Fab) (width 0.1)) + (fp_line (start -0.8 -0.4125) (end 0.8 -0.4125) (layer F.Fab) (width 0.1)) + (fp_line (start 0.8 -0.4125) (end 0.8 0.4125) (layer F.Fab) (width 0.1)) + (fp_line (start 0.8 0.4125) (end -0.8 0.4125) (layer F.Fab) (width 0.1)) + (fp_line (start -0.237258 -0.5225) (end 0.237258 -0.5225) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.237258 0.5225) (end 0.237258 0.5225) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) @@ -761,16 +761,16 @@ (fp_text value 51Ohm (at 0 1.43 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) - (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start -0.237258 0.5225) (end 0.237258 0.5225) (layer F.SilkS) (width 0.12)) - (fp_line (start -0.237258 -0.5225) (end 0.237258 -0.5225) (layer F.SilkS) (width 0.12)) - (fp_line (start 0.8 0.4125) (end -0.8 0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start 0.8 -0.4125) (end 0.8 0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start -0.8 -0.4125) (end 0.8 -0.4125) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 0.4125) (end -0.8 -0.4125) (layer F.Fab) (width 0.1)) + (fp_line (start -0.8 -0.4125) (end 0.8 -0.4125) (layer F.Fab) (width 0.1)) + (fp_line (start 0.8 -0.4125) (end 0.8 0.4125) (layer F.Fab) (width 0.1)) + (fp_line (start 0.8 0.4125) (end -0.8 0.4125) (layer F.Fab) (width 0.1)) + (fp_line (start -0.237258 -0.5225) (end 0.237258 -0.5225) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.237258 0.5225) (end 0.237258 0.5225) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) @@ -797,18 +797,18 @@ (fp_text value RED (at 0 1.43 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) - (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start -1.485 0.735) (end 0.8 0.735) (layer F.SilkS) (width 0.12)) - (fp_line (start -1.485 -0.735) (end -1.485 0.735) (layer F.SilkS) (width 0.12)) - (fp_line (start 0.8 -0.735) (end -1.485 -0.735) (layer F.SilkS) (width 0.12)) - (fp_line (start 0.8 0.4) (end 0.8 -0.4) (layer F.Fab) (width 0.1)) - (fp_line (start -0.8 0.4) (end 0.8 0.4) (layer F.Fab) (width 0.1)) - (fp_line (start -0.8 -0.1) (end -0.8 0.4) (layer F.Fab) (width 0.1)) - (fp_line (start -0.5 -0.4) (end -0.8 -0.1) (layer F.Fab) (width 0.1)) (fp_line (start 0.8 -0.4) (end -0.5 -0.4) (layer F.Fab) (width 0.1)) + (fp_line (start -0.5 -0.4) (end -0.8 -0.1) (layer F.Fab) (width 0.1)) + (fp_line (start -0.8 -0.1) (end -0.8 0.4) (layer F.Fab) (width 0.1)) + (fp_line (start -0.8 0.4) (end 0.8 0.4) (layer F.Fab) (width 0.1)) + (fp_line (start 0.8 0.4) (end 0.8 -0.4) (layer F.Fab) (width 0.1)) + (fp_line (start 0.8 -0.735) (end -1.485 -0.735) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.485 -0.735) (end -1.485 0.735) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.485 0.735) (end 0.8 0.735) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) @@ -835,18 +835,18 @@ (fp_text value RED (at 0 1.43 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) - (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start -1.485 0.735) (end 0.8 0.735) (layer F.SilkS) (width 0.12)) - (fp_line (start -1.485 -0.735) (end -1.485 0.735) (layer F.SilkS) (width 0.12)) - (fp_line (start 0.8 -0.735) (end -1.485 -0.735) (layer F.SilkS) (width 0.12)) - (fp_line (start 0.8 0.4) (end 0.8 -0.4) (layer F.Fab) (width 0.1)) - (fp_line (start -0.8 0.4) (end 0.8 0.4) (layer F.Fab) (width 0.1)) - (fp_line (start -0.8 -0.1) (end -0.8 0.4) (layer F.Fab) (width 0.1)) - (fp_line (start -0.5 -0.4) (end -0.8 -0.1) (layer F.Fab) (width 0.1)) (fp_line (start 0.8 -0.4) (end -0.5 -0.4) (layer F.Fab) (width 0.1)) + (fp_line (start -0.5 -0.4) (end -0.8 -0.1) (layer F.Fab) (width 0.1)) + (fp_line (start -0.8 -0.1) (end -0.8 0.4) (layer F.Fab) (width 0.1)) + (fp_line (start -0.8 0.4) (end 0.8 0.4) (layer F.Fab) (width 0.1)) + (fp_line (start 0.8 0.4) (end 0.8 -0.4) (layer F.Fab) (width 0.1)) + (fp_line (start 0.8 -0.735) (end -1.485 -0.735) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.485 -0.735) (end -1.485 0.735) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.485 0.735) (end 0.8 0.735) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) @@ -873,26 +873,26 @@ (fp_text value SW_Push (at 0 -3) (layer B.Fab) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) - (fp_line (start 3 1.8) (end 3 -1.8) (layer B.Fab) (width 0.1)) - (fp_line (start -3 1.8) (end -3 -1.8) (layer B.Fab) (width 0.1)) - (fp_line (start -3 1.8) (end 3 1.8) (layer B.Fab) (width 0.1)) - (fp_line (start -3 -1.8) (end 3 -1.8) (layer B.Fab) (width 0.1)) - (fp_line (start -1.5 0.8) (end -1.5 -0.8) (layer B.Fab) (width 0.1)) - (fp_line (start 1.5 0.8) (end 1.5 -0.8) (layer B.Fab) (width 0.1)) - (fp_line (start -1.5 0.8) (end 1.5 0.8) (layer B.Fab) (width 0.1)) - (fp_line (start -1.5 -0.8) (end 1.5 -0.8) (layer B.Fab) (width 0.1)) - (fp_line (start -3.06 -1.85) (end -3.06 1.85) (layer B.SilkS) (width 0.12)) - (fp_line (start 3.06 -1.85) (end -3.06 -1.85) (layer B.SilkS) (width 0.12)) - (fp_line (start 3.06 1.85) (end 3.06 -1.85) (layer B.SilkS) (width 0.12)) - (fp_line (start -3.06 1.85) (end 3.06 1.85) (layer B.SilkS) (width 0.12)) - (fp_line (start -1.75 -1) (end -1.75 1) (layer B.Fab) (width 0.1)) - (fp_line (start 1.75 -1) (end -1.75 -1) (layer B.Fab) (width 0.1)) - (fp_line (start 1.75 1) (end 1.75 -1) (layer B.Fab) (width 0.1)) - (fp_line (start -1.75 1) (end 1.75 1) (layer B.Fab) (width 0.1)) - (fp_line (start -4.9 2.05) (end 4.9 2.05) (layer B.CrtYd) (width 0.05)) - (fp_line (start 4.9 2.05) (end 4.9 -2.05) (layer B.CrtYd) (width 0.05)) - (fp_line (start 4.9 -2.05) (end -4.9 -2.05) (layer B.CrtYd) (width 0.05)) (fp_line (start -4.9 -2.05) (end -4.9 2.05) (layer B.CrtYd) (width 0.05)) + (fp_line (start 4.9 -2.05) (end -4.9 -2.05) (layer B.CrtYd) (width 0.05)) + (fp_line (start 4.9 2.05) (end 4.9 -2.05) (layer B.CrtYd) (width 0.05)) + (fp_line (start -4.9 2.05) (end 4.9 2.05) (layer B.CrtYd) (width 0.05)) + (fp_line (start -1.75 1) (end 1.75 1) (layer B.Fab) (width 0.1)) + (fp_line (start 1.75 1) (end 1.75 -1) (layer B.Fab) (width 0.1)) + (fp_line (start 1.75 -1) (end -1.75 -1) (layer B.Fab) (width 0.1)) + (fp_line (start -1.75 -1) (end -1.75 1) (layer B.Fab) (width 0.1)) + (fp_line (start -3.06 1.85) (end 3.06 1.85) (layer B.SilkS) (width 0.12)) + (fp_line (start 3.06 1.85) (end 3.06 -1.85) (layer B.SilkS) (width 0.12)) + (fp_line (start 3.06 -1.85) (end -3.06 -1.85) (layer B.SilkS) (width 0.12)) + (fp_line (start -3.06 -1.85) (end -3.06 1.85) (layer B.SilkS) (width 0.12)) + (fp_line (start -1.5 -0.8) (end 1.5 -0.8) (layer B.Fab) (width 0.1)) + (fp_line (start -1.5 0.8) (end 1.5 0.8) (layer B.Fab) (width 0.1)) + (fp_line (start 1.5 0.8) (end 1.5 -0.8) (layer B.Fab) (width 0.1)) + (fp_line (start -1.5 0.8) (end -1.5 -0.8) (layer B.Fab) (width 0.1)) + (fp_line (start -3 -1.8) (end 3 -1.8) (layer B.Fab) (width 0.1)) + (fp_line (start -3 1.8) (end 3 1.8) (layer B.Fab) (width 0.1)) + (fp_line (start -3 1.8) (end -3 -1.8) (layer B.Fab) (width 0.1)) + (fp_line (start 3 1.8) (end 3 -1.8) (layer B.Fab) (width 0.1)) (fp_text user %R (at 0 2.6) (layer B.Fab) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) @@ -919,26 +919,26 @@ (fp_text value SW_Push (at 0 -3) (layer B.Fab) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) - (fp_line (start 3 1.8) (end 3 -1.8) (layer B.Fab) (width 0.1)) - (fp_line (start -3 1.8) (end -3 -1.8) (layer B.Fab) (width 0.1)) - (fp_line (start -3 1.8) (end 3 1.8) (layer B.Fab) (width 0.1)) - (fp_line (start -3 -1.8) (end 3 -1.8) (layer B.Fab) (width 0.1)) - (fp_line (start -1.5 0.8) (end -1.5 -0.8) (layer B.Fab) (width 0.1)) - (fp_line (start 1.5 0.8) (end 1.5 -0.8) (layer B.Fab) (width 0.1)) - (fp_line (start -1.5 0.8) (end 1.5 0.8) (layer B.Fab) (width 0.1)) - (fp_line (start -1.5 -0.8) (end 1.5 -0.8) (layer B.Fab) (width 0.1)) - (fp_line (start -3.06 -1.85) (end -3.06 1.85) (layer B.SilkS) (width 0.12)) - (fp_line (start 3.06 -1.85) (end -3.06 -1.85) (layer B.SilkS) (width 0.12)) - (fp_line (start 3.06 1.85) (end 3.06 -1.85) (layer B.SilkS) (width 0.12)) - (fp_line (start -3.06 1.85) (end 3.06 1.85) (layer B.SilkS) (width 0.12)) - (fp_line (start -1.75 -1) (end -1.75 1) (layer B.Fab) (width 0.1)) - (fp_line (start 1.75 -1) (end -1.75 -1) (layer B.Fab) (width 0.1)) - (fp_line (start 1.75 1) (end 1.75 -1) (layer B.Fab) (width 0.1)) - (fp_line (start -1.75 1) (end 1.75 1) (layer B.Fab) (width 0.1)) - (fp_line (start -4.9 2.05) (end 4.9 2.05) (layer B.CrtYd) (width 0.05)) - (fp_line (start 4.9 2.05) (end 4.9 -2.05) (layer B.CrtYd) (width 0.05)) - (fp_line (start 4.9 -2.05) (end -4.9 -2.05) (layer B.CrtYd) (width 0.05)) (fp_line (start -4.9 -2.05) (end -4.9 2.05) (layer B.CrtYd) (width 0.05)) + (fp_line (start 4.9 -2.05) (end -4.9 -2.05) (layer B.CrtYd) (width 0.05)) + (fp_line (start 4.9 2.05) (end 4.9 -2.05) (layer B.CrtYd) (width 0.05)) + (fp_line (start -4.9 2.05) (end 4.9 2.05) (layer B.CrtYd) (width 0.05)) + (fp_line (start -1.75 1) (end 1.75 1) (layer B.Fab) (width 0.1)) + (fp_line (start 1.75 1) (end 1.75 -1) (layer B.Fab) (width 0.1)) + (fp_line (start 1.75 -1) (end -1.75 -1) (layer B.Fab) (width 0.1)) + (fp_line (start -1.75 -1) (end -1.75 1) (layer B.Fab) (width 0.1)) + (fp_line (start -3.06 1.85) (end 3.06 1.85) (layer B.SilkS) (width 0.12)) + (fp_line (start 3.06 1.85) (end 3.06 -1.85) (layer B.SilkS) (width 0.12)) + (fp_line (start 3.06 -1.85) (end -3.06 -1.85) (layer B.SilkS) (width 0.12)) + (fp_line (start -3.06 -1.85) (end -3.06 1.85) (layer B.SilkS) (width 0.12)) + (fp_line (start -1.5 -0.8) (end 1.5 -0.8) (layer B.Fab) (width 0.1)) + (fp_line (start -1.5 0.8) (end 1.5 0.8) (layer B.Fab) (width 0.1)) + (fp_line (start 1.5 0.8) (end 1.5 -0.8) (layer B.Fab) (width 0.1)) + (fp_line (start -1.5 0.8) (end -1.5 -0.8) (layer B.Fab) (width 0.1)) + (fp_line (start -3 -1.8) (end 3 -1.8) (layer B.Fab) (width 0.1)) + (fp_line (start -3 1.8) (end 3 1.8) (layer B.Fab) (width 0.1)) + (fp_line (start -3 1.8) (end -3 -1.8) (layer B.Fab) (width 0.1)) + (fp_line (start 3 1.8) (end 3 -1.8) (layer B.Fab) (width 0.1)) (fp_text user %R (at 0 2.6) (layer B.Fab) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) @@ -965,19 +965,19 @@ (fp_text value S8050 (at 0 2.5 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) - (fp_line (start 0.76 1.58) (end -0.7 1.58) (layer F.SilkS) (width 0.12)) - (fp_line (start 0.76 -1.58) (end -1.4 -1.58) (layer F.SilkS) (width 0.12)) - (fp_line (start -1.7 1.75) (end -1.7 -1.75) (layer F.CrtYd) (width 0.05)) - (fp_line (start 1.7 1.75) (end -1.7 1.75) (layer F.CrtYd) (width 0.05)) - (fp_line (start 1.7 -1.75) (end 1.7 1.75) (layer F.CrtYd) (width 0.05)) - (fp_line (start -1.7 -1.75) (end 1.7 -1.75) (layer F.CrtYd) (width 0.05)) - (fp_line (start 0.76 -1.58) (end 0.76 -0.65) (layer F.SilkS) (width 0.12)) - (fp_line (start 0.76 1.58) (end 0.76 0.65) (layer F.SilkS) (width 0.12)) - (fp_line (start -0.7 1.52) (end 0.7 1.52) (layer F.Fab) (width 0.1)) - (fp_line (start 0.7 -1.52) (end 0.7 1.52) (layer F.Fab) (width 0.1)) - (fp_line (start -0.7 -0.95) (end -0.15 -1.52) (layer F.Fab) (width 0.1)) - (fp_line (start -0.15 -1.52) (end 0.7 -1.52) (layer F.Fab) (width 0.1)) (fp_line (start -0.7 -0.95) (end -0.7 1.5) (layer F.Fab) (width 0.1)) + (fp_line (start -0.15 -1.52) (end 0.7 -1.52) (layer F.Fab) (width 0.1)) + (fp_line (start -0.7 -0.95) (end -0.15 -1.52) (layer F.Fab) (width 0.1)) + (fp_line (start 0.7 -1.52) (end 0.7 1.52) (layer F.Fab) (width 0.1)) + (fp_line (start -0.7 1.52) (end 0.7 1.52) (layer F.Fab) (width 0.1)) + (fp_line (start 0.76 1.58) (end 0.76 0.65) (layer F.SilkS) (width 0.12)) + (fp_line (start 0.76 -1.58) (end 0.76 -0.65) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.7 -1.75) (end 1.7 -1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.7 -1.75) (end 1.7 1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.7 1.75) (end -1.7 1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.7 1.75) (end -1.7 -1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.76 -1.58) (end -1.4 -1.58) (layer F.SilkS) (width 0.12)) + (fp_line (start 0.76 1.58) (end -0.7 1.58) (layer F.SilkS) (width 0.12)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.075))) ) @@ -1006,19 +1006,19 @@ (fp_text value S8050 (at 0 2.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) - (fp_line (start 0.76 1.58) (end -0.7 1.58) (layer F.SilkS) (width 0.12)) - (fp_line (start 0.76 -1.58) (end -1.4 -1.58) (layer F.SilkS) (width 0.12)) - (fp_line (start -1.7 1.75) (end -1.7 -1.75) (layer F.CrtYd) (width 0.05)) - (fp_line (start 1.7 1.75) (end -1.7 1.75) (layer F.CrtYd) (width 0.05)) - (fp_line (start 1.7 -1.75) (end 1.7 1.75) (layer F.CrtYd) (width 0.05)) - (fp_line (start -1.7 -1.75) (end 1.7 -1.75) (layer F.CrtYd) (width 0.05)) - (fp_line (start 0.76 -1.58) (end 0.76 -0.65) (layer F.SilkS) (width 0.12)) - (fp_line (start 0.76 1.58) (end 0.76 0.65) (layer F.SilkS) (width 0.12)) - (fp_line (start -0.7 1.52) (end 0.7 1.52) (layer F.Fab) (width 0.1)) - (fp_line (start 0.7 -1.52) (end 0.7 1.52) (layer F.Fab) (width 0.1)) - (fp_line (start -0.7 -0.95) (end -0.15 -1.52) (layer F.Fab) (width 0.1)) - (fp_line (start -0.15 -1.52) (end 0.7 -1.52) (layer F.Fab) (width 0.1)) (fp_line (start -0.7 -0.95) (end -0.7 1.5) (layer F.Fab) (width 0.1)) + (fp_line (start -0.15 -1.52) (end 0.7 -1.52) (layer F.Fab) (width 0.1)) + (fp_line (start -0.7 -0.95) (end -0.15 -1.52) (layer F.Fab) (width 0.1)) + (fp_line (start 0.7 -1.52) (end 0.7 1.52) (layer F.Fab) (width 0.1)) + (fp_line (start -0.7 1.52) (end 0.7 1.52) (layer F.Fab) (width 0.1)) + (fp_line (start 0.76 1.58) (end 0.76 0.65) (layer F.SilkS) (width 0.12)) + (fp_line (start 0.76 -1.58) (end 0.76 -0.65) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.7 -1.75) (end 1.7 -1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.7 -1.75) (end 1.7 1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.7 1.75) (end -1.7 1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.7 1.75) (end -1.7 -1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.76 -1.58) (end -1.4 -1.58) (layer F.SilkS) (width 0.12)) + (fp_line (start 0.76 1.58) (end -0.7 1.58) (layer F.SilkS) (width 0.12)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.075))) ) @@ -1047,8 +1047,8 @@ (fp_text value Testpoint_RST (at 0 2.05) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) - (fp_circle (center 0 0) (end 0 1.2) (layer F.SilkS) (width 0.12)) (fp_circle (center 0 0) (end 1.5 0) (layer F.CrtYd) (width 0.05)) + (fp_circle (center 0 0) (end 0 1.2) (layer F.SilkS) (width 0.12)) (fp_text user %R (at 0 -2) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) @@ -1068,16 +1068,16 @@ (fp_text value 100nF (at 0 1.43 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) - (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start -0.14058 0.51) (end 0.14058 0.51) (layer F.SilkS) (width 0.12)) - (fp_line (start -0.14058 -0.51) (end 0.14058 -0.51) (layer F.SilkS) (width 0.12)) - (fp_line (start 0.8 0.4) (end -0.8 0.4) (layer F.Fab) (width 0.1)) - (fp_line (start 0.8 -0.4) (end 0.8 0.4) (layer F.Fab) (width 0.1)) - (fp_line (start -0.8 -0.4) (end 0.8 -0.4) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 0.4) (end -0.8 -0.4) (layer F.Fab) (width 0.1)) + (fp_line (start -0.8 -0.4) (end 0.8 -0.4) (layer F.Fab) (width 0.1)) + (fp_line (start 0.8 -0.4) (end 0.8 0.4) (layer F.Fab) (width 0.1)) + (fp_line (start 0.8 0.4) (end -0.8 0.4) (layer F.Fab) (width 0.1)) + (fp_line (start -0.14058 -0.51) (end 0.14058 -0.51) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.14058 0.51) (end 0.14058 0.51) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) @@ -1100,58 +1100,93 @@ (fp_text value LOGO (at 0.75 0) (layer B.SilkS) hide (effects (font (size 1.524 1.524) (thickness 0.3)) (justify mirror)) ) - (fp_poly (pts (xy 3.301653 1.770381) (xy 3.302418 1.51384) (xy 3.045969 1.51384) (xy 2.99591 1.513767) - (xy 2.948991 1.513557) (xy 2.906182 1.513224) (xy 2.868451 1.512783) (xy 2.836767 1.512247) - (xy 2.812097 1.511632) (xy 2.795411 1.51095) (xy 2.787676 1.510218) (xy 2.787256 1.51003) - (xy 2.786461 1.504057) (xy 2.785484 1.489424) (xy 2.784395 1.467629) (xy 2.783265 1.440171) - (xy 2.782165 1.408545) (xy 2.781657 1.39192) (xy 2.780572 1.356531) (xy 2.779433 1.322459) - (xy 2.778315 1.291744) (xy 2.777294 1.266426) (xy 2.776445 1.248546) (xy 2.776214 1.2446) - (xy 2.775374 1.228726) (xy 2.774344 1.205052) (xy 2.773216 1.175934) (xy 2.772081 1.14373) - (xy 2.771161 1.11506) (xy 2.770082 1.0816) (xy 2.768919 1.048715) (xy 2.767767 1.018902) - (xy 2.766722 0.994656) (xy 2.765999 0.98044) (xy 2.765085 0.962217) (xy 2.763995 0.936535) - (xy 2.762833 0.906091) (xy 2.761705 0.873583) (xy 2.761065 0.85344) (xy 2.75997 0.819353) - (xy 2.758746 0.784061) (xy 2.757509 0.750787) (xy 2.756379 0.722752) (xy 2.755867 0.7112) - (xy 2.754974 0.691568) (xy 2.754071 0.67073) (xy 2.753109 0.647396) (xy 2.752036 0.620277) - (xy 2.750803 0.588079) (xy 2.749359 0.549514) (xy 2.747654 0.503291) (xy 2.745784 0.45212) - (xy 2.743806 0.397888) (xy 2.742146 0.352629) (xy 2.740761 0.31516) (xy 2.739604 0.284301) - (xy 2.73863 0.258871) (xy 2.737795 0.237688) (xy 2.737052 0.219572) (xy 2.736357 0.20334) - (xy 2.735664 0.187813) (xy 2.735555 0.18542) (xy 2.734553 0.161812) (xy 2.73337 0.131386) - (xy 2.732132 0.097481) (xy 2.730962 0.063436) (xy 2.73055 0.0508) (xy 2.729429 0.017307) - (xy 2.728176 -0.017644) (xy 2.726922 -0.05061) (xy 2.725793 -0.07815) (xy 2.72543 -0.08636) - (xy 2.724623 -0.104367) (xy 2.723797 -0.123553) (xy 2.722912 -0.144961) (xy 2.721928 -0.169637) - (xy 2.720804 -0.198624) (xy 2.719499 -0.232969) (xy 2.717975 -0.273714) (xy 2.716191 -0.321905) - (xy 2.714105 -0.378587) (xy 2.712713 -0.41656) (xy 2.71122 -0.457029) (xy 2.709681 -0.498217) - (xy 2.708185 -0.537784) (xy 2.706821 -0.573392) (xy 2.705678 -0.602701) (xy 2.705097 -0.61722) - (xy 2.704142 -0.6412) (xy 2.702907 -0.672995) (xy 2.701479 -0.710265) (xy 2.69995 -0.75067) - (xy 2.698408 -0.791871) (xy 2.697444 -0.81788) (xy 2.695958 -0.857757) (xy 2.694439 -0.897811) - (xy 2.692972 -0.935837) (xy 2.691645 -0.969631) (xy 2.69054 -0.99699) (xy 2.689955 -1.01092) - (xy 2.688726 -1.040284) (xy 2.687327 -1.075111) (xy 2.685942 -1.110708) (xy 2.684922 -1.13792) - (xy 2.682943 -1.191903) (xy 2.681287 -1.23693) (xy 2.67991 -1.274197) (xy 2.678766 -1.3049) - (xy 2.677809 -1.330235) (xy 2.676995 -1.3514) (xy 2.676278 -1.369591) (xy 2.675613 -1.386004) - (xy 2.674954 -1.401835) (xy 2.674622 -1.4097) (xy 2.673558 -1.435711) (xy 2.672288 -1.4682) - (xy 2.670952 -1.503492) (xy 2.669693 -1.537908) (xy 2.669374 -1.54686) (xy 2.668212 -1.578537) - (xy 2.666974 -1.610348) (xy 2.665783 -1.63925) (xy 2.664763 -1.662203) (xy 2.664443 -1.66878) - (xy 2.663617 -1.686793) (xy 2.662549 -1.71257) (xy 2.661333 -1.743719) (xy 2.660061 -1.777851) - (xy 2.658828 -1.812575) (xy 2.658794 -1.81356) (xy 2.657647 -1.846058) (xy 2.656546 -1.875953) - (xy 2.655561 -1.901435) (xy 2.654762 -1.920696) (xy 2.65422 -1.931929) (xy 2.654156 -1.93294) - (xy 2.653579 -1.945267) (xy 2.652994 -1.964091) (xy 2.652511 -1.985747) (xy 2.652437 -1.99009) - (xy 2.65176 -2.032) (xy 2.005977 -2.032) (xy 2.008666 -2.01041) (xy 2.008941 -2.003284) - (xy 2.009238 -1.986483) (xy 2.009553 -1.960488) (xy 2.009883 -1.925782) (xy 2.010227 -1.88285) - (xy 2.010581 -1.832175) (xy 2.010943 -1.774239) (xy 2.01131 -1.709526) (xy 2.011681 -1.638519) - (xy 2.012052 -1.561702) (xy 2.01242 -1.479558) (xy 2.012784 -1.39257) (xy 2.013141 -1.301221) - (xy 2.013487 -1.205995) (xy 2.013822 -1.107375) (xy 2.014141 -1.005844) (xy 2.014372 -0.9271) - (xy 2.014679 -0.821238) (xy 2.014996 -0.716559) (xy 2.01532 -0.613642) (xy 2.015648 -0.513066) - (xy 2.015979 -0.415413) (xy 2.01631 -0.32126) (xy 2.016639 -0.231189) (xy 2.016963 -0.145778) - (xy 2.017281 -0.065608) (xy 2.01759 0.008742) (xy 2.017888 0.076693) (xy 2.018172 0.137664) - (xy 2.01844 0.191075) (xy 2.018691 0.236348) (xy 2.018921 0.272902) (xy 2.019128 0.300158) - (xy 2.019221 0.30988) (xy 2.019417 0.33284) (xy 2.019622 0.364328) (xy 2.019833 0.403498) - (xy 2.020047 0.449502) (xy 2.020263 0.501491) (xy 2.020479 0.558619) (xy 2.020692 0.620036) - (xy 2.020901 0.684896) (xy 2.021103 0.752351) (xy 2.021297 0.821552) (xy 2.02148 0.891653) - (xy 2.02165 0.961804) (xy 2.021806 1.031159) (xy 2.021945 1.098869) (xy 2.022065 1.164086) - (xy 2.022164 1.225964) (xy 2.02224 1.283654) (xy 2.022291 1.336308) (xy 2.022315 1.383078) - (xy 2.022309 1.423117) (xy 2.022273 1.455577) (xy 2.022203 1.47961) (xy 2.022098 1.494368) - (xy 2.022093 1.49479) (xy 2.02184 1.51384) (xy 1.50368 1.51384) (xy 1.50368 2.02692) - (xy 3.300889 2.02692) (xy 3.301653 1.770381)) (layer B.SilkS) (width 0.01)) + (fp_poly (pts (xy -1.83896 1.49352) (xy -2.53492 1.49352) (xy -2.535078 1.43891) (xy -2.535123 1.426758) + (xy -2.535214 1.405148) (xy -2.535349 1.374781) (xy -2.535524 1.336359) (xy -2.535735 1.290584) + (xy -2.535979 1.238157) (xy -2.536254 1.179781) (xy -2.536555 1.116156) (xy -2.53688 1.047985) + (xy -2.537224 0.975969) (xy -2.537586 0.90081) (xy -2.537961 0.823209) (xy -2.538166 0.78105) + (xy -2.541096 0.1778) (xy -2.00152 0.1778) (xy -2.00152 -0.35052) (xy -2.54043 -0.35052) + (xy -2.537779 -0.52705) (xy -2.537288 -0.562694) (xy -2.536747 -0.607127) (xy -2.536169 -0.658978) + (xy -2.535569 -0.716878) (xy -2.534959 -0.779454) (xy -2.534352 -0.845336) (xy -2.533761 -0.913154) + (xy -2.533201 -0.981537) (xy -2.532683 -1.049114) (xy -2.532463 -1.0795) (xy -2.531941 -1.150661) + (xy -2.531351 -1.226643) (xy -2.53071 -1.305599) (xy -2.530034 -1.385679) (xy -2.529339 -1.465035) + (xy -2.528642 -1.541818) (xy -2.527958 -1.614178) (xy -2.527304 -1.680268) (xy -2.526696 -1.738239) + (xy -2.526636 -1.74371) (xy -2.523475 -2.032) (xy -2.843858 -2.032) (xy -2.899957 -2.031941) + (xy -2.953004 -2.031771) (xy -3.002135 -2.031501) (xy -3.046484 -2.03114) (xy -3.085186 -2.030699) + (xy -3.117378 -2.030189) (xy -3.142194 -2.029618) (xy -3.15877 -2.028998) (xy -3.16624 -2.028339) + (xy -3.166576 -2.02819) (xy -3.167504 -2.021938) (xy -3.16838 -2.007561) (xy -3.169112 -1.987092) + (xy -3.169611 -1.962566) (xy -3.169664 -1.95834) (xy -3.170121 -1.929378) (xy -3.170799 -1.900281) + (xy -3.171603 -1.87456) (xy -3.172382 -1.85674) (xy -3.173123 -1.840718) (xy -3.174047 -1.816715) + (xy -3.175079 -1.786905) (xy -3.176144 -1.753464) (xy -3.177168 -1.718567) (xy -3.177352 -1.71196) + (xy -3.178403 -1.674982) (xy -3.17954 -1.637121) (xy -3.180677 -1.601097) (xy -3.181728 -1.56963) + (xy -3.182606 -1.545442) (xy -3.18265 -1.54432) (xy -3.183586 -1.519003) (xy -3.184696 -1.486732) + (xy -3.185872 -1.450712) (xy -3.18701 -1.414144) (xy -3.187669 -1.39192) (xy -3.188721 -1.356233) + (xy -3.189776 -1.321799) (xy -3.190892 -1.286806) (xy -3.192132 -1.249439) (xy -3.193556 -1.207887) + (xy -3.195223 -1.160335) (xy -3.197195 -1.104972) (xy -3.197836 -1.08712) (xy -3.198841 -1.057903) + (xy -3.200008 -1.022094) (xy -3.201222 -0.983258) (xy -3.202373 -0.94496) (xy -3.202962 -0.92456) + (xy -3.204012 -0.888761) (xy -3.205181 -0.850923) (xy -3.206362 -0.814427) (xy -3.207446 -0.782652) + (xy -3.208012 -0.76708) (xy -3.208983 -0.739826) (xy -3.210118 -0.705797) (xy -3.211306 -0.668372) + (xy -3.212441 -0.630931) (xy -3.213058 -0.6096) (xy -3.214108 -0.573801) (xy -3.215281 -0.535963) + (xy -3.216468 -0.499466) (xy -3.21756 -0.467691) (xy -3.218131 -0.45212) (xy -3.219114 -0.424867) + (xy -3.220262 -0.390838) (xy -3.221466 -0.353413) (xy -3.222616 -0.315972) (xy -3.223242 -0.29464) + (xy -3.224309 -0.258555) (xy -3.225497 -0.220158) (xy -3.226695 -0.182922) (xy -3.227792 -0.150317) + (xy -3.228348 -0.13462) (xy -3.229332 -0.106388) (xy -3.230479 -0.071472) (xy -3.231678 -0.033342) + (xy -3.232821 0.004529) (xy -3.233425 0.0254) (xy -3.234453 0.059554) (xy -3.235597 0.094178) + (xy -3.236755 0.126404) (xy -3.237826 0.153363) (xy -3.238473 0.16764) (xy -3.239329 0.187682) + (xy -3.240332 0.215467) (xy -3.241405 0.248581) (xy -3.242469 0.284608) (xy -3.243448 0.321136) + (xy -3.243611 0.32766) (xy -3.244565 0.364244) (xy -3.245615 0.400978) (xy -3.246682 0.435391) + (xy -3.24769 0.465008) (xy -3.248561 0.487357) (xy -3.248689 0.49022) (xy -3.249563 0.511729) + (xy -3.250588 0.54074) (xy -3.251679 0.574603) (xy -3.25275 0.610661) (xy -3.253687 0.64516) + (xy -3.254659 0.680578) (xy -3.255743 0.716139) (xy -3.256851 0.749259) (xy -3.257898 0.777351) + (xy -3.258783 0.79756) (xy -3.259628 0.817247) (xy -3.260615 0.844777) (xy -3.261671 0.877835) + (xy -3.262723 0.914108) (xy -3.263698 0.951281) (xy -3.263974 0.96266) (xy -3.264894 0.999006) + (xy -3.265896 1.034578) (xy -3.266912 1.067222) (xy -3.267874 1.094781) (xy -3.268713 1.115099) + (xy -3.268967 1.12014) (xy -3.269805 1.138156) (xy -3.270808 1.163938) (xy -3.271892 1.195093) + (xy -3.272975 1.22923) (xy -3.273974 1.263957) (xy -3.274 1.26492) (xy -3.275024 1.301315) + (xy -3.276147 1.338778) (xy -3.277279 1.374449) (xy -3.27833 1.405465) (xy -3.279149 1.42748) + (xy -3.280057 1.451929) (xy -3.281132 1.483595) (xy -3.282281 1.51954) (xy -3.283408 1.556825) + (xy -3.284283 1.5875) (xy -3.285298 1.622848) (xy -3.286398 1.658648) (xy -3.287494 1.692182) + (xy -3.288498 1.720727) (xy -3.289249 1.7399) (xy -3.290046 1.760317) (xy -3.291045 1.788546) + (xy -3.292168 1.822243) (xy -3.293338 1.859064) (xy -3.294477 1.896667) (xy -3.294832 1.90881) + (xy -3.298249 2.02692) (xy -1.83896 2.02692) (xy -1.83896 1.49352)) (layer B.SilkS) (width 0.01)) + (fp_poly (pts (xy -0.835063 1.51765) (xy -0.835374 1.462396) (xy -0.835707 1.397734) (xy -0.836058 1.32442) + (xy -0.836425 1.243206) (xy -0.836806 1.154845) (xy -0.837197 1.060091) (xy -0.837595 0.959698) + (xy -0.837998 0.854419) (xy -0.838403 0.745007) (xy -0.838807 0.632215) (xy -0.839208 0.516798) + (xy -0.839602 0.399508) (xy -0.839987 0.281098) (xy -0.84036 0.162323) (xy -0.840718 0.043936) + (xy -0.841058 -0.07331) (xy -0.841286 -0.15494) (xy -0.841592 -0.265594) (xy -0.8419 -0.374994) + (xy -0.842208 -0.482592) (xy -0.842515 -0.587843) (xy -0.842817 -0.690197) (xy -0.843115 -0.789109) + (xy -0.843405 -0.884031) (xy -0.843687 -0.974416) (xy -0.843958 -1.059716) (xy -0.844217 -1.139386) + (xy -0.844462 -1.212877) (xy -0.844691 -1.279642) (xy -0.844902 -1.339135) (xy -0.845095 -1.390808) + (xy -0.845266 -1.434114) (xy -0.845415 -1.468506) (xy -0.845539 -1.493437) (xy -0.845569 -1.4986) + (xy -0.845882 -1.551559) (xy -0.846221 -1.611079) (xy -0.846568 -1.673898) (xy -0.846906 -1.73675) + (xy -0.847216 -1.796374) (xy -0.847481 -1.849505) (xy -0.84751 -1.85547) (xy -0.84836 -2.032) + (xy -1.507362 -2.032) (xy -1.510286 -2.00533) (xy -1.511157 -1.992508) (xy -1.511974 -1.971391) + (xy -1.512692 -1.943846) (xy -1.513267 -1.911738) (xy -1.513654 -1.876931) (xy -1.513757 -1.860362) + (xy -1.513992 -1.826472) (xy -1.514355 -1.79584) (xy -1.514814 -1.769974) (xy -1.515341 -1.750384) + (xy -1.515904 -1.738578) (xy -1.516233 -1.735902) (xy -1.516702 -1.729683) (xy -1.517269 -1.714361) + (xy -1.517912 -1.690993) (xy -1.518607 -1.660637) (xy -1.519331 -1.624349) (xy -1.520062 -1.583185) + (xy -1.520777 -1.538203) (xy -1.521273 -1.50368) (xy -1.521988 -1.453903) (xy -1.522747 -1.404929) + (xy -1.523523 -1.358196) (xy -1.524292 -1.315143) (xy -1.525026 -1.277206) (xy -1.525699 -1.245826) + (xy -1.526286 -1.222439) (xy -1.526541 -1.21412) (xy -1.527142 -1.193567) (xy -1.52785 -1.1646) + (xy -1.528628 -1.128961) (xy -1.529443 -1.088395) (xy -1.530258 -1.044644) (xy -1.531037 -0.999454) + (xy -1.531506 -0.97028) (xy -1.53226 -0.923845) (xy -1.533085 -0.876631) (xy -1.533941 -0.830607) + (xy -1.53479 -0.787741) (xy -1.535594 -0.750002) (xy -1.536314 -0.719359) (xy -1.536664 -0.70612) + (xy -1.537381 -0.678446) (xy -1.538213 -0.642913) (xy -1.539111 -0.60182) (xy -1.540025 -0.557466) + (xy -1.540907 -0.51215) (xy -1.541709 -0.468172) (xy -1.541723 -0.46736) (xy -1.542357 -0.431338) + (xy -1.542964 -0.397517) (xy -1.543565 -0.364735) (xy -1.544185 -0.331828) (xy -1.544847 -0.297631) + (xy -1.545574 -0.260982) (xy -1.546389 -0.220717) (xy -1.547316 -0.175671) (xy -1.548378 -0.124683) + (xy -1.549597 -0.066587) (xy -1.550998 -0.00022) (xy -1.551971 0.04572) (xy -1.552755 0.084036) + (xy -1.553646 0.12962) (xy -1.554588 0.179585) (xy -1.555528 0.231041) (xy -1.556413 0.281098) + (xy -1.557075 0.32004) (xy -1.557844 0.364341) (xy -1.558701 0.410358) (xy -1.559598 0.455712) + (xy -1.560486 0.498026) (xy -1.561316 0.534923) (xy -1.562038 0.56388) (xy -1.562761 0.592815) + (xy -1.563598 0.629572) (xy -1.564498 0.671816) (xy -1.565415 0.717209) (xy -1.5663 0.763416) + (xy -1.567104 0.808101) (xy -1.567141 0.81026) (xy -1.567953 0.856124) (xy -1.568852 0.904814) + (xy -1.569786 0.953714) (xy -1.570705 1.000209) (xy -1.571558 1.04168) (xy -1.57227 1.07442) + (xy -1.573043 1.109737) (xy -1.573939 1.152379) (xy -1.574898 1.199515) (xy -1.575864 1.248312) + (xy -1.57678 1.295938) (xy -1.577387 1.32842) (xy -1.578227 1.373394) (xy -1.579154 1.421612) + (xy -1.58011 1.470242) (xy -1.58104 1.516451) (xy -1.581888 1.557407) (xy -1.582424 1.58242) + (xy -1.583132 1.615431) (xy -1.583984 1.656186) (xy -1.58493 1.702272) (xy -1.585922 1.751274) + (xy -1.586911 1.80078) (xy -1.587847 1.848375) (xy -1.588034 1.858011) (xy -1.591312 2.02692) + (xy -0.832033 2.02692) (xy -0.835063 1.51765)) (layer B.SilkS) (width 0.01)) (fp_poly (pts (xy 1.034934 1.95199) (xy 1.10247 1.822561) (xy 1.165366 1.686545) (xy 1.223851 1.543346) (xy 1.278151 1.392371) (xy 1.328497 1.233025) (xy 1.373254 1.07188) (xy 1.377455 1.055525) (xy 1.381794 1.038087) (xy 1.386572 1.01827) (xy 1.392092 0.994775) (xy 1.398655 0.966307) @@ -1234,93 +1269,58 @@ (xy -0.481348 1.688734) (xy -0.482058 1.741718) (xy -0.482789 1.791804) (xy -0.48352 1.837542) (xy -0.484228 1.87748) (xy -0.484891 1.910165) (xy -0.485488 1.934148) (xy -0.485489 1.934211) (xy -0.488182 2.02692) (xy 0.993455 2.02692) (xy 1.034934 1.95199)) (layer B.SilkS) (width 0.01)) - (fp_poly (pts (xy -0.835063 1.51765) (xy -0.835374 1.462396) (xy -0.835707 1.397734) (xy -0.836058 1.32442) - (xy -0.836425 1.243206) (xy -0.836806 1.154845) (xy -0.837197 1.060091) (xy -0.837595 0.959698) - (xy -0.837998 0.854419) (xy -0.838403 0.745007) (xy -0.838807 0.632215) (xy -0.839208 0.516798) - (xy -0.839602 0.399508) (xy -0.839987 0.281098) (xy -0.84036 0.162323) (xy -0.840718 0.043936) - (xy -0.841058 -0.07331) (xy -0.841286 -0.15494) (xy -0.841592 -0.265594) (xy -0.8419 -0.374994) - (xy -0.842208 -0.482592) (xy -0.842515 -0.587843) (xy -0.842817 -0.690197) (xy -0.843115 -0.789109) - (xy -0.843405 -0.884031) (xy -0.843687 -0.974416) (xy -0.843958 -1.059716) (xy -0.844217 -1.139386) - (xy -0.844462 -1.212877) (xy -0.844691 -1.279642) (xy -0.844902 -1.339135) (xy -0.845095 -1.390808) - (xy -0.845266 -1.434114) (xy -0.845415 -1.468506) (xy -0.845539 -1.493437) (xy -0.845569 -1.4986) - (xy -0.845882 -1.551559) (xy -0.846221 -1.611079) (xy -0.846568 -1.673898) (xy -0.846906 -1.73675) - (xy -0.847216 -1.796374) (xy -0.847481 -1.849505) (xy -0.84751 -1.85547) (xy -0.84836 -2.032) - (xy -1.507362 -2.032) (xy -1.510286 -2.00533) (xy -1.511157 -1.992508) (xy -1.511974 -1.971391) - (xy -1.512692 -1.943846) (xy -1.513267 -1.911738) (xy -1.513654 -1.876931) (xy -1.513757 -1.860362) - (xy -1.513992 -1.826472) (xy -1.514355 -1.79584) (xy -1.514814 -1.769974) (xy -1.515341 -1.750384) - (xy -1.515904 -1.738578) (xy -1.516233 -1.735902) (xy -1.516702 -1.729683) (xy -1.517269 -1.714361) - (xy -1.517912 -1.690993) (xy -1.518607 -1.660637) (xy -1.519331 -1.624349) (xy -1.520062 -1.583185) - (xy -1.520777 -1.538203) (xy -1.521273 -1.50368) (xy -1.521988 -1.453903) (xy -1.522747 -1.404929) - (xy -1.523523 -1.358196) (xy -1.524292 -1.315143) (xy -1.525026 -1.277206) (xy -1.525699 -1.245826) - (xy -1.526286 -1.222439) (xy -1.526541 -1.21412) (xy -1.527142 -1.193567) (xy -1.52785 -1.1646) - (xy -1.528628 -1.128961) (xy -1.529443 -1.088395) (xy -1.530258 -1.044644) (xy -1.531037 -0.999454) - (xy -1.531506 -0.97028) (xy -1.53226 -0.923845) (xy -1.533085 -0.876631) (xy -1.533941 -0.830607) - (xy -1.53479 -0.787741) (xy -1.535594 -0.750002) (xy -1.536314 -0.719359) (xy -1.536664 -0.70612) - (xy -1.537381 -0.678446) (xy -1.538213 -0.642913) (xy -1.539111 -0.60182) (xy -1.540025 -0.557466) - (xy -1.540907 -0.51215) (xy -1.541709 -0.468172) (xy -1.541723 -0.46736) (xy -1.542357 -0.431338) - (xy -1.542964 -0.397517) (xy -1.543565 -0.364735) (xy -1.544185 -0.331828) (xy -1.544847 -0.297631) - (xy -1.545574 -0.260982) (xy -1.546389 -0.220717) (xy -1.547316 -0.175671) (xy -1.548378 -0.124683) - (xy -1.549597 -0.066587) (xy -1.550998 -0.00022) (xy -1.551971 0.04572) (xy -1.552755 0.084036) - (xy -1.553646 0.12962) (xy -1.554588 0.179585) (xy -1.555528 0.231041) (xy -1.556413 0.281098) - (xy -1.557075 0.32004) (xy -1.557844 0.364341) (xy -1.558701 0.410358) (xy -1.559598 0.455712) - (xy -1.560486 0.498026) (xy -1.561316 0.534923) (xy -1.562038 0.56388) (xy -1.562761 0.592815) - (xy -1.563598 0.629572) (xy -1.564498 0.671816) (xy -1.565415 0.717209) (xy -1.5663 0.763416) - (xy -1.567104 0.808101) (xy -1.567141 0.81026) (xy -1.567953 0.856124) (xy -1.568852 0.904814) - (xy -1.569786 0.953714) (xy -1.570705 1.000209) (xy -1.571558 1.04168) (xy -1.57227 1.07442) - (xy -1.573043 1.109737) (xy -1.573939 1.152379) (xy -1.574898 1.199515) (xy -1.575864 1.248312) - (xy -1.57678 1.295938) (xy -1.577387 1.32842) (xy -1.578227 1.373394) (xy -1.579154 1.421612) - (xy -1.58011 1.470242) (xy -1.58104 1.516451) (xy -1.581888 1.557407) (xy -1.582424 1.58242) - (xy -1.583132 1.615431) (xy -1.583984 1.656186) (xy -1.58493 1.702272) (xy -1.585922 1.751274) - (xy -1.586911 1.80078) (xy -1.587847 1.848375) (xy -1.588034 1.858011) (xy -1.591312 2.02692) - (xy -0.832033 2.02692) (xy -0.835063 1.51765)) (layer B.SilkS) (width 0.01)) - (fp_poly (pts (xy -1.83896 1.49352) (xy -2.53492 1.49352) (xy -2.535078 1.43891) (xy -2.535123 1.426758) - (xy -2.535214 1.405148) (xy -2.535349 1.374781) (xy -2.535524 1.336359) (xy -2.535735 1.290584) - (xy -2.535979 1.238157) (xy -2.536254 1.179781) (xy -2.536555 1.116156) (xy -2.53688 1.047985) - (xy -2.537224 0.975969) (xy -2.537586 0.90081) (xy -2.537961 0.823209) (xy -2.538166 0.78105) - (xy -2.541096 0.1778) (xy -2.00152 0.1778) (xy -2.00152 -0.35052) (xy -2.54043 -0.35052) - (xy -2.537779 -0.52705) (xy -2.537288 -0.562694) (xy -2.536747 -0.607127) (xy -2.536169 -0.658978) - (xy -2.535569 -0.716878) (xy -2.534959 -0.779454) (xy -2.534352 -0.845336) (xy -2.533761 -0.913154) - (xy -2.533201 -0.981537) (xy -2.532683 -1.049114) (xy -2.532463 -1.0795) (xy -2.531941 -1.150661) - (xy -2.531351 -1.226643) (xy -2.53071 -1.305599) (xy -2.530034 -1.385679) (xy -2.529339 -1.465035) - (xy -2.528642 -1.541818) (xy -2.527958 -1.614178) (xy -2.527304 -1.680268) (xy -2.526696 -1.738239) - (xy -2.526636 -1.74371) (xy -2.523475 -2.032) (xy -2.843858 -2.032) (xy -2.899957 -2.031941) - (xy -2.953004 -2.031771) (xy -3.002135 -2.031501) (xy -3.046484 -2.03114) (xy -3.085186 -2.030699) - (xy -3.117378 -2.030189) (xy -3.142194 -2.029618) (xy -3.15877 -2.028998) (xy -3.16624 -2.028339) - (xy -3.166576 -2.02819) (xy -3.167504 -2.021938) (xy -3.16838 -2.007561) (xy -3.169112 -1.987092) - (xy -3.169611 -1.962566) (xy -3.169664 -1.95834) (xy -3.170121 -1.929378) (xy -3.170799 -1.900281) - (xy -3.171603 -1.87456) (xy -3.172382 -1.85674) (xy -3.173123 -1.840718) (xy -3.174047 -1.816715) - (xy -3.175079 -1.786905) (xy -3.176144 -1.753464) (xy -3.177168 -1.718567) (xy -3.177352 -1.71196) - (xy -3.178403 -1.674982) (xy -3.17954 -1.637121) (xy -3.180677 -1.601097) (xy -3.181728 -1.56963) - (xy -3.182606 -1.545442) (xy -3.18265 -1.54432) (xy -3.183586 -1.519003) (xy -3.184696 -1.486732) - (xy -3.185872 -1.450712) (xy -3.18701 -1.414144) (xy -3.187669 -1.39192) (xy -3.188721 -1.356233) - (xy -3.189776 -1.321799) (xy -3.190892 -1.286806) (xy -3.192132 -1.249439) (xy -3.193556 -1.207887) - (xy -3.195223 -1.160335) (xy -3.197195 -1.104972) (xy -3.197836 -1.08712) (xy -3.198841 -1.057903) - (xy -3.200008 -1.022094) (xy -3.201222 -0.983258) (xy -3.202373 -0.94496) (xy -3.202962 -0.92456) - (xy -3.204012 -0.888761) (xy -3.205181 -0.850923) (xy -3.206362 -0.814427) (xy -3.207446 -0.782652) - (xy -3.208012 -0.76708) (xy -3.208983 -0.739826) (xy -3.210118 -0.705797) (xy -3.211306 -0.668372) - (xy -3.212441 -0.630931) (xy -3.213058 -0.6096) (xy -3.214108 -0.573801) (xy -3.215281 -0.535963) - (xy -3.216468 -0.499466) (xy -3.21756 -0.467691) (xy -3.218131 -0.45212) (xy -3.219114 -0.424867) - (xy -3.220262 -0.390838) (xy -3.221466 -0.353413) (xy -3.222616 -0.315972) (xy -3.223242 -0.29464) - (xy -3.224309 -0.258555) (xy -3.225497 -0.220158) (xy -3.226695 -0.182922) (xy -3.227792 -0.150317) - (xy -3.228348 -0.13462) (xy -3.229332 -0.106388) (xy -3.230479 -0.071472) (xy -3.231678 -0.033342) - (xy -3.232821 0.004529) (xy -3.233425 0.0254) (xy -3.234453 0.059554) (xy -3.235597 0.094178) - (xy -3.236755 0.126404) (xy -3.237826 0.153363) (xy -3.238473 0.16764) (xy -3.239329 0.187682) - (xy -3.240332 0.215467) (xy -3.241405 0.248581) (xy -3.242469 0.284608) (xy -3.243448 0.321136) - (xy -3.243611 0.32766) (xy -3.244565 0.364244) (xy -3.245615 0.400978) (xy -3.246682 0.435391) - (xy -3.24769 0.465008) (xy -3.248561 0.487357) (xy -3.248689 0.49022) (xy -3.249563 0.511729) - (xy -3.250588 0.54074) (xy -3.251679 0.574603) (xy -3.25275 0.610661) (xy -3.253687 0.64516) - (xy -3.254659 0.680578) (xy -3.255743 0.716139) (xy -3.256851 0.749259) (xy -3.257898 0.777351) - (xy -3.258783 0.79756) (xy -3.259628 0.817247) (xy -3.260615 0.844777) (xy -3.261671 0.877835) - (xy -3.262723 0.914108) (xy -3.263698 0.951281) (xy -3.263974 0.96266) (xy -3.264894 0.999006) - (xy -3.265896 1.034578) (xy -3.266912 1.067222) (xy -3.267874 1.094781) (xy -3.268713 1.115099) - (xy -3.268967 1.12014) (xy -3.269805 1.138156) (xy -3.270808 1.163938) (xy -3.271892 1.195093) - (xy -3.272975 1.22923) (xy -3.273974 1.263957) (xy -3.274 1.26492) (xy -3.275024 1.301315) - (xy -3.276147 1.338778) (xy -3.277279 1.374449) (xy -3.27833 1.405465) (xy -3.279149 1.42748) - (xy -3.280057 1.451929) (xy -3.281132 1.483595) (xy -3.282281 1.51954) (xy -3.283408 1.556825) - (xy -3.284283 1.5875) (xy -3.285298 1.622848) (xy -3.286398 1.658648) (xy -3.287494 1.692182) - (xy -3.288498 1.720727) (xy -3.289249 1.7399) (xy -3.290046 1.760317) (xy -3.291045 1.788546) - (xy -3.292168 1.822243) (xy -3.293338 1.859064) (xy -3.294477 1.896667) (xy -3.294832 1.90881) - (xy -3.298249 2.02692) (xy -1.83896 2.02692) (xy -1.83896 1.49352)) (layer B.SilkS) (width 0.01)) + (fp_poly (pts (xy 3.301653 1.770381) (xy 3.302418 1.51384) (xy 3.045969 1.51384) (xy 2.99591 1.513767) + (xy 2.948991 1.513557) (xy 2.906182 1.513224) (xy 2.868451 1.512783) (xy 2.836767 1.512247) + (xy 2.812097 1.511632) (xy 2.795411 1.51095) (xy 2.787676 1.510218) (xy 2.787256 1.51003) + (xy 2.786461 1.504057) (xy 2.785484 1.489424) (xy 2.784395 1.467629) (xy 2.783265 1.440171) + (xy 2.782165 1.408545) (xy 2.781657 1.39192) (xy 2.780572 1.356531) (xy 2.779433 1.322459) + (xy 2.778315 1.291744) (xy 2.777294 1.266426) (xy 2.776445 1.248546) (xy 2.776214 1.2446) + (xy 2.775374 1.228726) (xy 2.774344 1.205052) (xy 2.773216 1.175934) (xy 2.772081 1.14373) + (xy 2.771161 1.11506) (xy 2.770082 1.0816) (xy 2.768919 1.048715) (xy 2.767767 1.018902) + (xy 2.766722 0.994656) (xy 2.765999 0.98044) (xy 2.765085 0.962217) (xy 2.763995 0.936535) + (xy 2.762833 0.906091) (xy 2.761705 0.873583) (xy 2.761065 0.85344) (xy 2.75997 0.819353) + (xy 2.758746 0.784061) (xy 2.757509 0.750787) (xy 2.756379 0.722752) (xy 2.755867 0.7112) + (xy 2.754974 0.691568) (xy 2.754071 0.67073) (xy 2.753109 0.647396) (xy 2.752036 0.620277) + (xy 2.750803 0.588079) (xy 2.749359 0.549514) (xy 2.747654 0.503291) (xy 2.745784 0.45212) + (xy 2.743806 0.397888) (xy 2.742146 0.352629) (xy 2.740761 0.31516) (xy 2.739604 0.284301) + (xy 2.73863 0.258871) (xy 2.737795 0.237688) (xy 2.737052 0.219572) (xy 2.736357 0.20334) + (xy 2.735664 0.187813) (xy 2.735555 0.18542) (xy 2.734553 0.161812) (xy 2.73337 0.131386) + (xy 2.732132 0.097481) (xy 2.730962 0.063436) (xy 2.73055 0.0508) (xy 2.729429 0.017307) + (xy 2.728176 -0.017644) (xy 2.726922 -0.05061) (xy 2.725793 -0.07815) (xy 2.72543 -0.08636) + (xy 2.724623 -0.104367) (xy 2.723797 -0.123553) (xy 2.722912 -0.144961) (xy 2.721928 -0.169637) + (xy 2.720804 -0.198624) (xy 2.719499 -0.232969) (xy 2.717975 -0.273714) (xy 2.716191 -0.321905) + (xy 2.714105 -0.378587) (xy 2.712713 -0.41656) (xy 2.71122 -0.457029) (xy 2.709681 -0.498217) + (xy 2.708185 -0.537784) (xy 2.706821 -0.573392) (xy 2.705678 -0.602701) (xy 2.705097 -0.61722) + (xy 2.704142 -0.6412) (xy 2.702907 -0.672995) (xy 2.701479 -0.710265) (xy 2.69995 -0.75067) + (xy 2.698408 -0.791871) (xy 2.697444 -0.81788) (xy 2.695958 -0.857757) (xy 2.694439 -0.897811) + (xy 2.692972 -0.935837) (xy 2.691645 -0.969631) (xy 2.69054 -0.99699) (xy 2.689955 -1.01092) + (xy 2.688726 -1.040284) (xy 2.687327 -1.075111) (xy 2.685942 -1.110708) (xy 2.684922 -1.13792) + (xy 2.682943 -1.191903) (xy 2.681287 -1.23693) (xy 2.67991 -1.274197) (xy 2.678766 -1.3049) + (xy 2.677809 -1.330235) (xy 2.676995 -1.3514) (xy 2.676278 -1.369591) (xy 2.675613 -1.386004) + (xy 2.674954 -1.401835) (xy 2.674622 -1.4097) (xy 2.673558 -1.435711) (xy 2.672288 -1.4682) + (xy 2.670952 -1.503492) (xy 2.669693 -1.537908) (xy 2.669374 -1.54686) (xy 2.668212 -1.578537) + (xy 2.666974 -1.610348) (xy 2.665783 -1.63925) (xy 2.664763 -1.662203) (xy 2.664443 -1.66878) + (xy 2.663617 -1.686793) (xy 2.662549 -1.71257) (xy 2.661333 -1.743719) (xy 2.660061 -1.777851) + (xy 2.658828 -1.812575) (xy 2.658794 -1.81356) (xy 2.657647 -1.846058) (xy 2.656546 -1.875953) + (xy 2.655561 -1.901435) (xy 2.654762 -1.920696) (xy 2.65422 -1.931929) (xy 2.654156 -1.93294) + (xy 2.653579 -1.945267) (xy 2.652994 -1.964091) (xy 2.652511 -1.985747) (xy 2.652437 -1.99009) + (xy 2.65176 -2.032) (xy 2.005977 -2.032) (xy 2.008666 -2.01041) (xy 2.008941 -2.003284) + (xy 2.009238 -1.986483) (xy 2.009553 -1.960488) (xy 2.009883 -1.925782) (xy 2.010227 -1.88285) + (xy 2.010581 -1.832175) (xy 2.010943 -1.774239) (xy 2.01131 -1.709526) (xy 2.011681 -1.638519) + (xy 2.012052 -1.561702) (xy 2.01242 -1.479558) (xy 2.012784 -1.39257) (xy 2.013141 -1.301221) + (xy 2.013487 -1.205995) (xy 2.013822 -1.107375) (xy 2.014141 -1.005844) (xy 2.014372 -0.9271) + (xy 2.014679 -0.821238) (xy 2.014996 -0.716559) (xy 2.01532 -0.613642) (xy 2.015648 -0.513066) + (xy 2.015979 -0.415413) (xy 2.01631 -0.32126) (xy 2.016639 -0.231189) (xy 2.016963 -0.145778) + (xy 2.017281 -0.065608) (xy 2.01759 0.008742) (xy 2.017888 0.076693) (xy 2.018172 0.137664) + (xy 2.01844 0.191075) (xy 2.018691 0.236348) (xy 2.018921 0.272902) (xy 2.019128 0.300158) + (xy 2.019221 0.30988) (xy 2.019417 0.33284) (xy 2.019622 0.364328) (xy 2.019833 0.403498) + (xy 2.020047 0.449502) (xy 2.020263 0.501491) (xy 2.020479 0.558619) (xy 2.020692 0.620036) + (xy 2.020901 0.684896) (xy 2.021103 0.752351) (xy 2.021297 0.821552) (xy 2.02148 0.891653) + (xy 2.02165 0.961804) (xy 2.021806 1.031159) (xy 2.021945 1.098869) (xy 2.022065 1.164086) + (xy 2.022164 1.225964) (xy 2.02224 1.283654) (xy 2.022291 1.336308) (xy 2.022315 1.383078) + (xy 2.022309 1.423117) (xy 2.022273 1.455577) (xy 2.022203 1.47961) (xy 2.022098 1.494368) + (xy 2.022093 1.49479) (xy 2.02184 1.51384) (xy 1.50368 1.51384) (xy 1.50368 2.02692) + (xy 3.300889 2.02692) (xy 3.301653 1.770381)) (layer B.SilkS) (width 0.01)) ) (module Package_TO_SOT_SMD:SOT-223-3_TabPin2 (layer F.Cu) (tedit 5A02FF57) (tstamp 6091CC95) @@ -1335,19 +1335,19 @@ (fp_text value AMS1117-3.3 (at 0 4.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) - (fp_line (start 1.91 3.41) (end 1.91 2.15) (layer F.SilkS) (width 0.12)) - (fp_line (start 1.91 -3.41) (end 1.91 -2.15) (layer F.SilkS) (width 0.12)) - (fp_line (start 4.4 -3.6) (end -4.4 -3.6) (layer F.CrtYd) (width 0.05)) - (fp_line (start 4.4 3.6) (end 4.4 -3.6) (layer F.CrtYd) (width 0.05)) - (fp_line (start -4.4 3.6) (end 4.4 3.6) (layer F.CrtYd) (width 0.05)) - (fp_line (start -4.4 -3.6) (end -4.4 3.6) (layer F.CrtYd) (width 0.05)) - (fp_line (start -1.85 -2.35) (end -0.85 -3.35) (layer F.Fab) (width 0.1)) - (fp_line (start -1.85 -2.35) (end -1.85 3.35) (layer F.Fab) (width 0.1)) - (fp_line (start -1.85 3.41) (end 1.91 3.41) (layer F.SilkS) (width 0.12)) - (fp_line (start -0.85 -3.35) (end 1.85 -3.35) (layer F.Fab) (width 0.1)) - (fp_line (start -4.1 -3.41) (end 1.91 -3.41) (layer F.SilkS) (width 0.12)) - (fp_line (start -1.85 3.35) (end 1.85 3.35) (layer F.Fab) (width 0.1)) (fp_line (start 1.85 -3.35) (end 1.85 3.35) (layer F.Fab) (width 0.1)) + (fp_line (start -1.85 3.35) (end 1.85 3.35) (layer F.Fab) (width 0.1)) + (fp_line (start -4.1 -3.41) (end 1.91 -3.41) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.85 -3.35) (end 1.85 -3.35) (layer F.Fab) (width 0.1)) + (fp_line (start -1.85 3.41) (end 1.91 3.41) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.85 -2.35) (end -1.85 3.35) (layer F.Fab) (width 0.1)) + (fp_line (start -1.85 -2.35) (end -0.85 -3.35) (layer F.Fab) (width 0.1)) + (fp_line (start -4.4 -3.6) (end -4.4 3.6) (layer F.CrtYd) (width 0.05)) + (fp_line (start -4.4 3.6) (end 4.4 3.6) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.4 3.6) (end 4.4 -3.6) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.4 -3.6) (end -4.4 -3.6) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.91 -3.41) (end 1.91 -2.15) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.91 3.41) (end 1.91 2.15) (layer F.SilkS) (width 0.12)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.8 0.8) (thickness 0.12))) ) @@ -1378,22 +1378,22 @@ (fp_text value CP2102-GMR (at 0 3.8 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) - (fp_line (start 1.885 -2.61) (end 2.61 -2.61) (layer F.SilkS) (width 0.12)) - (fp_line (start 2.61 -2.61) (end 2.61 -1.885) (layer F.SilkS) (width 0.12)) - (fp_line (start -1.885 2.61) (end -2.61 2.61) (layer F.SilkS) (width 0.12)) - (fp_line (start -2.61 2.61) (end -2.61 1.885) (layer F.SilkS) (width 0.12)) - (fp_line (start 1.885 2.61) (end 2.61 2.61) (layer F.SilkS) (width 0.12)) - (fp_line (start 2.61 2.61) (end 2.61 1.885) (layer F.SilkS) (width 0.12)) - (fp_line (start -1.885 -2.61) (end -2.61 -2.61) (layer F.SilkS) (width 0.12)) - (fp_line (start -1.5 -2.5) (end 2.5 -2.5) (layer F.Fab) (width 0.1)) - (fp_line (start 2.5 -2.5) (end 2.5 2.5) (layer F.Fab) (width 0.1)) - (fp_line (start 2.5 2.5) (end -2.5 2.5) (layer F.Fab) (width 0.1)) - (fp_line (start -2.5 2.5) (end -2.5 -1.5) (layer F.Fab) (width 0.1)) - (fp_line (start -2.5 -1.5) (end -1.5 -2.5) (layer F.Fab) (width 0.1)) - (fp_line (start -3.1 -3.1) (end -3.1 3.1) (layer F.CrtYd) (width 0.05)) - (fp_line (start -3.1 3.1) (end 3.1 3.1) (layer F.CrtYd) (width 0.05)) - (fp_line (start 3.1 3.1) (end 3.1 -3.1) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.1 -3.1) (end -3.1 -3.1) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.1 3.1) (end 3.1 -3.1) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.1 3.1) (end 3.1 3.1) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.1 -3.1) (end -3.1 3.1) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.5 -1.5) (end -1.5 -2.5) (layer F.Fab) (width 0.1)) + (fp_line (start -2.5 2.5) (end -2.5 -1.5) (layer F.Fab) (width 0.1)) + (fp_line (start 2.5 2.5) (end -2.5 2.5) (layer F.Fab) (width 0.1)) + (fp_line (start 2.5 -2.5) (end 2.5 2.5) (layer F.Fab) (width 0.1)) + (fp_line (start -1.5 -2.5) (end 2.5 -2.5) (layer F.Fab) (width 0.1)) + (fp_line (start -1.885 -2.61) (end -2.61 -2.61) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.61 2.61) (end 2.61 1.885) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.885 2.61) (end 2.61 2.61) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.61 2.61) (end -2.61 1.885) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.885 2.61) (end -2.61 2.61) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.61 -2.61) (end 2.61 -1.885) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.885 -2.61) (end 2.61 -2.61) (layer F.SilkS) (width 0.12)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) @@ -1467,36 +1467,36 @@ (fp_text value ESP-12E (at -0.06 12.78 90) (layer B.Fab) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) - (fp_line (start -8 12) (end 8 12) (layer B.Fab) (width 0.12)) - (fp_line (start 8 12) (end 8 -12) (layer B.Fab) (width 0.12)) - (fp_line (start 8 -12) (end -8 -12) (layer B.Fab) (width 0.12)) - (fp_line (start -8 -12) (end -8 3) (layer B.Fab) (width 0.12)) - (fp_line (start -8 3) (end -7.5 3.5) (layer B.Fab) (width 0.12)) - (fp_line (start -7.5 3.5) (end -8 4) (layer B.Fab) (width 0.12)) - (fp_line (start -8 4) (end -8 12) (layer B.Fab) (width 0.12)) - (fp_line (start -9.05 12.2) (end 9.05 12.2) (layer B.CrtYd) (width 0.05)) - (fp_line (start 9.05 12.2) (end 9.05 -13.1) (layer B.CrtYd) (width 0.05)) - (fp_line (start 9.05 -13.1) (end -9.05 -13.1) (layer B.CrtYd) (width 0.05)) - (fp_line (start -9.05 -13.1) (end -9.05 12.2) (layer B.CrtYd) (width 0.05)) - (fp_line (start -8.12 12.12) (end 8.12 12.12) (layer B.SilkS) (width 0.12)) - (fp_line (start 8.12 12.12) (end 8.12 4.5) (layer B.SilkS) (width 0.12)) - (fp_line (start 8.12 -11.5) (end 8.12 -12.12) (layer B.SilkS) (width 0.12)) - (fp_line (start 8.12 -12.12) (end 6 -12.12) (layer B.SilkS) (width 0.12)) - (fp_line (start -6 -12.12) (end -8.12 -12.12) (layer B.SilkS) (width 0.12)) - (fp_line (start -8.12 -12.12) (end -8.12 -11.5) (layer B.SilkS) (width 0.12)) - (fp_line (start -8.12 4.5) (end -8.12 12.12) (layer B.SilkS) (width 0.12)) - (fp_line (start -8.12 4.5) (end -8.73 4.5) (layer B.SilkS) (width 0.12)) - (fp_line (start -8.12 12.12) (end 8.12 12.12) (layer Dwgs.User) (width 0.12)) - (fp_line (start 8.12 12.12) (end 8.12 4.8) (layer Dwgs.User) (width 0.12)) - (fp_line (start 8.12 4.8) (end -8.12 4.8) (layer Dwgs.User) (width 0.12)) - (fp_line (start -8.12 4.8) (end -8.12 12.12) (layer Dwgs.User) (width 0.12)) - (fp_line (start -8.12 9.12) (end -5.12 12.12) (layer Dwgs.User) (width 0.12)) - (fp_line (start -8.12 6.12) (end -2.12 12.12) (layer Dwgs.User) (width 0.12)) - (fp_line (start -6.44 4.8) (end 0.88 12.12) (layer Dwgs.User) (width 0.12)) - (fp_line (start -3.44 4.8) (end 3.88 12.12) (layer Dwgs.User) (width 0.12)) - (fp_line (start -0.44 4.8) (end 6.88 12.12) (layer Dwgs.User) (width 0.12)) - (fp_line (start 2.56 4.8) (end 8.12 10.36) (layer Dwgs.User) (width 0.12)) (fp_line (start 5.56 4.8) (end 8.12 7.36) (layer Dwgs.User) (width 0.12)) + (fp_line (start 2.56 4.8) (end 8.12 10.36) (layer Dwgs.User) (width 0.12)) + (fp_line (start -0.44 4.8) (end 6.88 12.12) (layer Dwgs.User) (width 0.12)) + (fp_line (start -3.44 4.8) (end 3.88 12.12) (layer Dwgs.User) (width 0.12)) + (fp_line (start -6.44 4.8) (end 0.88 12.12) (layer Dwgs.User) (width 0.12)) + (fp_line (start -8.12 6.12) (end -2.12 12.12) (layer Dwgs.User) (width 0.12)) + (fp_line (start -8.12 9.12) (end -5.12 12.12) (layer Dwgs.User) (width 0.12)) + (fp_line (start -8.12 4.8) (end -8.12 12.12) (layer Dwgs.User) (width 0.12)) + (fp_line (start 8.12 4.8) (end -8.12 4.8) (layer Dwgs.User) (width 0.12)) + (fp_line (start 8.12 12.12) (end 8.12 4.8) (layer Dwgs.User) (width 0.12)) + (fp_line (start -8.12 12.12) (end 8.12 12.12) (layer Dwgs.User) (width 0.12)) + (fp_line (start -8.12 4.5) (end -8.73 4.5) (layer B.SilkS) (width 0.12)) + (fp_line (start -8.12 4.5) (end -8.12 12.12) (layer B.SilkS) (width 0.12)) + (fp_line (start -8.12 -12.12) (end -8.12 -11.5) (layer B.SilkS) (width 0.12)) + (fp_line (start -6 -12.12) (end -8.12 -12.12) (layer B.SilkS) (width 0.12)) + (fp_line (start 8.12 -12.12) (end 6 -12.12) (layer B.SilkS) (width 0.12)) + (fp_line (start 8.12 -11.5) (end 8.12 -12.12) (layer B.SilkS) (width 0.12)) + (fp_line (start 8.12 12.12) (end 8.12 4.5) (layer B.SilkS) (width 0.12)) + (fp_line (start -8.12 12.12) (end 8.12 12.12) (layer B.SilkS) (width 0.12)) + (fp_line (start -9.05 -13.1) (end -9.05 12.2) (layer B.CrtYd) (width 0.05)) + (fp_line (start 9.05 -13.1) (end -9.05 -13.1) (layer B.CrtYd) (width 0.05)) + (fp_line (start 9.05 12.2) (end 9.05 -13.1) (layer B.CrtYd) (width 0.05)) + (fp_line (start -9.05 12.2) (end 9.05 12.2) (layer B.CrtYd) (width 0.05)) + (fp_line (start -8 4) (end -8 12) (layer B.Fab) (width 0.12)) + (fp_line (start -7.5 3.5) (end -8 4) (layer B.Fab) (width 0.12)) + (fp_line (start -8 3) (end -7.5 3.5) (layer B.Fab) (width 0.12)) + (fp_line (start -8 -12) (end -8 3) (layer B.Fab) (width 0.12)) + (fp_line (start 8 -12) (end -8 -12) (layer B.Fab) (width 0.12)) + (fp_line (start 8 12) (end 8 -12) (layer B.Fab) (width 0.12)) + (fp_line (start -8 12) (end 8 12) (layer B.Fab) (width 0.12)) (fp_text user %R (at 0.49 0.8 90) (layer B.Fab) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) @@ -1561,16 +1561,16 @@ (fp_text value 1kOhm (at 0 1.43) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) - (fp_line (start -0.8 0.4125) (end -0.8 -0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start -0.8 -0.4125) (end 0.8 -0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start 0.8 -0.4125) (end 0.8 0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start 0.8 0.4125) (end -0.8 0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start -0.237258 -0.5225) (end 0.237258 -0.5225) (layer F.SilkS) (width 0.12)) - (fp_line (start -0.237258 0.5225) (end 0.237258 0.5225) (layer F.SilkS) (width 0.12)) - (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.237258 0.5225) (end 0.237258 0.5225) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.237258 -0.5225) (end 0.237258 -0.5225) (layer F.SilkS) (width 0.12)) + (fp_line (start 0.8 0.4125) (end -0.8 0.4125) (layer F.Fab) (width 0.1)) + (fp_line (start 0.8 -0.4125) (end 0.8 0.4125) (layer F.Fab) (width 0.1)) + (fp_line (start -0.8 -0.4125) (end 0.8 -0.4125) (layer F.Fab) (width 0.1)) + (fp_line (start -0.8 0.4125) (end -0.8 -0.4125) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) @@ -1597,16 +1597,16 @@ (fp_text value 12kOhm (at 0 1.43) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) - (fp_line (start -0.8 0.4125) (end -0.8 -0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start -0.8 -0.4125) (end 0.8 -0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start 0.8 -0.4125) (end 0.8 0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start 0.8 0.4125) (end -0.8 0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start -0.237258 -0.5225) (end 0.237258 -0.5225) (layer F.SilkS) (width 0.12)) - (fp_line (start -0.237258 0.5225) (end 0.237258 0.5225) (layer F.SilkS) (width 0.12)) - (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.237258 0.5225) (end 0.237258 0.5225) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.237258 -0.5225) (end 0.237258 -0.5225) (layer F.SilkS) (width 0.12)) + (fp_line (start 0.8 0.4125) (end -0.8 0.4125) (layer F.Fab) (width 0.1)) + (fp_line (start 0.8 -0.4125) (end 0.8 0.4125) (layer F.Fab) (width 0.1)) + (fp_line (start -0.8 -0.4125) (end 0.8 -0.4125) (layer F.Fab) (width 0.1)) + (fp_line (start -0.8 0.4125) (end -0.8 -0.4125) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) @@ -1633,16 +1633,16 @@ (fp_text value 51Ohm (at 0 1.43) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) - (fp_line (start -0.8 0.4125) (end -0.8 -0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start -0.8 -0.4125) (end 0.8 -0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start 0.8 -0.4125) (end 0.8 0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start 0.8 0.4125) (end -0.8 0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start -0.237258 -0.5225) (end 0.237258 -0.5225) (layer F.SilkS) (width 0.12)) - (fp_line (start -0.237258 0.5225) (end 0.237258 0.5225) (layer F.SilkS) (width 0.12)) - (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.237258 0.5225) (end 0.237258 0.5225) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.237258 -0.5225) (end 0.237258 -0.5225) (layer F.SilkS) (width 0.12)) + (fp_line (start 0.8 0.4125) (end -0.8 0.4125) (layer F.Fab) (width 0.1)) + (fp_line (start 0.8 -0.4125) (end 0.8 0.4125) (layer F.Fab) (width 0.1)) + (fp_line (start -0.8 -0.4125) (end 0.8 -0.4125) (layer F.Fab) (width 0.1)) + (fp_line (start -0.8 0.4125) (end -0.8 -0.4125) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) @@ -1669,16 +1669,16 @@ (fp_text value 51Ohm (at 0 1.43) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) - (fp_line (start -0.8 0.4125) (end -0.8 -0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start -0.8 -0.4125) (end 0.8 -0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start 0.8 -0.4125) (end 0.8 0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start 0.8 0.4125) (end -0.8 0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start -0.237258 -0.5225) (end 0.237258 -0.5225) (layer F.SilkS) (width 0.12)) - (fp_line (start -0.237258 0.5225) (end 0.237258 0.5225) (layer F.SilkS) (width 0.12)) - (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.237258 0.5225) (end 0.237258 0.5225) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.237258 -0.5225) (end 0.237258 -0.5225) (layer F.SilkS) (width 0.12)) + (fp_line (start 0.8 0.4125) (end -0.8 0.4125) (layer F.Fab) (width 0.1)) + (fp_line (start 0.8 -0.4125) (end 0.8 0.4125) (layer F.Fab) (width 0.1)) + (fp_line (start -0.8 -0.4125) (end 0.8 -0.4125) (layer F.Fab) (width 0.1)) + (fp_line (start -0.8 0.4125) (end -0.8 -0.4125) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) @@ -1705,16 +1705,16 @@ (fp_text value 51Ohm (at 0 1.43) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) - (fp_line (start -0.8 0.4125) (end -0.8 -0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start -0.8 -0.4125) (end 0.8 -0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start 0.8 -0.4125) (end 0.8 0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start 0.8 0.4125) (end -0.8 0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start -0.237258 -0.5225) (end 0.237258 -0.5225) (layer F.SilkS) (width 0.12)) - (fp_line (start -0.237258 0.5225) (end 0.237258 0.5225) (layer F.SilkS) (width 0.12)) - (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.237258 0.5225) (end 0.237258 0.5225) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.237258 -0.5225) (end 0.237258 -0.5225) (layer F.SilkS) (width 0.12)) + (fp_line (start 0.8 0.4125) (end -0.8 0.4125) (layer F.Fab) (width 0.1)) + (fp_line (start 0.8 -0.4125) (end 0.8 0.4125) (layer F.Fab) (width 0.1)) + (fp_line (start -0.8 -0.4125) (end 0.8 -0.4125) (layer F.Fab) (width 0.1)) + (fp_line (start -0.8 0.4125) (end -0.8 -0.4125) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) @@ -1741,16 +1741,16 @@ (fp_text value 470Ohm (at 0 1.43 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) - (fp_line (start -0.8 0.4125) (end -0.8 -0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start -0.8 -0.4125) (end 0.8 -0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start 0.8 -0.4125) (end 0.8 0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start 0.8 0.4125) (end -0.8 0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start -0.237258 -0.5225) (end 0.237258 -0.5225) (layer F.SilkS) (width 0.12)) - (fp_line (start -0.237258 0.5225) (end 0.237258 0.5225) (layer F.SilkS) (width 0.12)) - (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.237258 0.5225) (end 0.237258 0.5225) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.237258 -0.5225) (end 0.237258 -0.5225) (layer F.SilkS) (width 0.12)) + (fp_line (start 0.8 0.4125) (end -0.8 0.4125) (layer F.Fab) (width 0.1)) + (fp_line (start 0.8 -0.4125) (end 0.8 0.4125) (layer F.Fab) (width 0.1)) + (fp_line (start -0.8 -0.4125) (end 0.8 -0.4125) (layer F.Fab) (width 0.1)) + (fp_line (start -0.8 0.4125) (end -0.8 -0.4125) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) @@ -1777,16 +1777,16 @@ (fp_text value 51Ohm (at 0 1.43 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) - (fp_line (start -0.8 0.4125) (end -0.8 -0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start -0.8 -0.4125) (end 0.8 -0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start 0.8 -0.4125) (end 0.8 0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start 0.8 0.4125) (end -0.8 0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start -0.237258 -0.5225) (end 0.237258 -0.5225) (layer F.SilkS) (width 0.12)) - (fp_line (start -0.237258 0.5225) (end 0.237258 0.5225) (layer F.SilkS) (width 0.12)) - (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.237258 0.5225) (end 0.237258 0.5225) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.237258 -0.5225) (end 0.237258 -0.5225) (layer F.SilkS) (width 0.12)) + (fp_line (start 0.8 0.4125) (end -0.8 0.4125) (layer F.Fab) (width 0.1)) + (fp_line (start 0.8 -0.4125) (end 0.8 0.4125) (layer F.Fab) (width 0.1)) + (fp_line (start -0.8 -0.4125) (end 0.8 -0.4125) (layer F.Fab) (width 0.1)) + (fp_line (start -0.8 0.4125) (end -0.8 -0.4125) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) @@ -1813,16 +1813,16 @@ (fp_text value 470Ohm (at 0 1.43) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) - (fp_line (start -0.8 0.4125) (end -0.8 -0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start -0.8 -0.4125) (end 0.8 -0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start 0.8 -0.4125) (end 0.8 0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start 0.8 0.4125) (end -0.8 0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start -0.237258 -0.5225) (end 0.237258 -0.5225) (layer F.SilkS) (width 0.12)) - (fp_line (start -0.237258 0.5225) (end 0.237258 0.5225) (layer F.SilkS) (width 0.12)) - (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.237258 0.5225) (end 0.237258 0.5225) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.237258 -0.5225) (end 0.237258 -0.5225) (layer F.SilkS) (width 0.12)) + (fp_line (start 0.8 0.4125) (end -0.8 0.4125) (layer F.Fab) (width 0.1)) + (fp_line (start 0.8 -0.4125) (end 0.8 0.4125) (layer F.Fab) (width 0.1)) + (fp_line (start -0.8 -0.4125) (end 0.8 -0.4125) (layer F.Fab) (width 0.1)) + (fp_line (start -0.8 0.4125) (end -0.8 -0.4125) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) @@ -1849,16 +1849,16 @@ (fp_text value 51Ohm (at 0 1.43 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) - (fp_line (start -0.8 0.4125) (end -0.8 -0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start -0.8 -0.4125) (end 0.8 -0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start 0.8 -0.4125) (end 0.8 0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start 0.8 0.4125) (end -0.8 0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start -0.237258 -0.5225) (end 0.237258 -0.5225) (layer F.SilkS) (width 0.12)) - (fp_line (start -0.237258 0.5225) (end 0.237258 0.5225) (layer F.SilkS) (width 0.12)) - (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.237258 0.5225) (end 0.237258 0.5225) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.237258 -0.5225) (end 0.237258 -0.5225) (layer F.SilkS) (width 0.12)) + (fp_line (start 0.8 0.4125) (end -0.8 0.4125) (layer F.Fab) (width 0.1)) + (fp_line (start 0.8 -0.4125) (end 0.8 0.4125) (layer F.Fab) (width 0.1)) + (fp_line (start -0.8 -0.4125) (end 0.8 -0.4125) (layer F.Fab) (width 0.1)) + (fp_line (start -0.8 0.4125) (end -0.8 -0.4125) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) @@ -1885,16 +1885,16 @@ (fp_text value 12kOhm (at 0 1.43) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) - (fp_line (start -0.8 0.4125) (end -0.8 -0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start -0.8 -0.4125) (end 0.8 -0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start 0.8 -0.4125) (end 0.8 0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start 0.8 0.4125) (end -0.8 0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start -0.237258 -0.5225) (end 0.237258 -0.5225) (layer F.SilkS) (width 0.12)) - (fp_line (start -0.237258 0.5225) (end 0.237258 0.5225) (layer F.SilkS) (width 0.12)) - (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.237258 0.5225) (end 0.237258 0.5225) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.237258 -0.5225) (end 0.237258 -0.5225) (layer F.SilkS) (width 0.12)) + (fp_line (start 0.8 0.4125) (end -0.8 0.4125) (layer F.Fab) (width 0.1)) + (fp_line (start 0.8 -0.4125) (end 0.8 0.4125) (layer F.Fab) (width 0.1)) + (fp_line (start -0.8 -0.4125) (end 0.8 -0.4125) (layer F.Fab) (width 0.1)) + (fp_line (start -0.8 0.4125) (end -0.8 -0.4125) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) @@ -1921,16 +1921,16 @@ (fp_text value 12kOhm (at 0 1.43) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) - (fp_line (start -0.8 0.4125) (end -0.8 -0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start -0.8 -0.4125) (end 0.8 -0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start 0.8 -0.4125) (end 0.8 0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start 0.8 0.4125) (end -0.8 0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start -0.237258 -0.5225) (end 0.237258 -0.5225) (layer F.SilkS) (width 0.12)) - (fp_line (start -0.237258 0.5225) (end 0.237258 0.5225) (layer F.SilkS) (width 0.12)) - (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.237258 0.5225) (end 0.237258 0.5225) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.237258 -0.5225) (end 0.237258 -0.5225) (layer F.SilkS) (width 0.12)) + (fp_line (start 0.8 0.4125) (end -0.8 0.4125) (layer F.Fab) (width 0.1)) + (fp_line (start 0.8 -0.4125) (end 0.8 0.4125) (layer F.Fab) (width 0.1)) + (fp_line (start -0.8 -0.4125) (end 0.8 -0.4125) (layer F.Fab) (width 0.1)) + (fp_line (start -0.8 0.4125) (end -0.8 -0.4125) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) @@ -1957,16 +1957,16 @@ (fp_text value 12kOhm (at 0 1.43) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) - (fp_line (start -0.8 0.4125) (end -0.8 -0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start -0.8 -0.4125) (end 0.8 -0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start 0.8 -0.4125) (end 0.8 0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start 0.8 0.4125) (end -0.8 0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start -0.237258 -0.5225) (end 0.237258 -0.5225) (layer F.SilkS) (width 0.12)) - (fp_line (start -0.237258 0.5225) (end 0.237258 0.5225) (layer F.SilkS) (width 0.12)) - (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.237258 0.5225) (end 0.237258 0.5225) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.237258 -0.5225) (end 0.237258 -0.5225) (layer F.SilkS) (width 0.12)) + (fp_line (start 0.8 0.4125) (end -0.8 0.4125) (layer F.Fab) (width 0.1)) + (fp_line (start 0.8 -0.4125) (end 0.8 0.4125) (layer F.Fab) (width 0.1)) + (fp_line (start -0.8 -0.4125) (end 0.8 -0.4125) (layer F.Fab) (width 0.1)) + (fp_line (start -0.8 0.4125) (end -0.8 -0.4125) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) @@ -1993,16 +1993,16 @@ (fp_text value 12kOhm (at 0 1.43 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) - (fp_line (start -0.8 0.4125) (end -0.8 -0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start -0.8 -0.4125) (end 0.8 -0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start 0.8 -0.4125) (end 0.8 0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start 0.8 0.4125) (end -0.8 0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start -0.237258 -0.5225) (end 0.237258 -0.5225) (layer F.SilkS) (width 0.12)) - (fp_line (start -0.237258 0.5225) (end 0.237258 0.5225) (layer F.SilkS) (width 0.12)) - (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.237258 0.5225) (end 0.237258 0.5225) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.237258 -0.5225) (end 0.237258 -0.5225) (layer F.SilkS) (width 0.12)) + (fp_line (start 0.8 0.4125) (end -0.8 0.4125) (layer F.Fab) (width 0.1)) + (fp_line (start 0.8 -0.4125) (end 0.8 0.4125) (layer F.Fab) (width 0.1)) + (fp_line (start -0.8 -0.4125) (end 0.8 -0.4125) (layer F.Fab) (width 0.1)) + (fp_line (start -0.8 0.4125) (end -0.8 -0.4125) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) @@ -2029,16 +2029,16 @@ (fp_text value 12kOhm (at 0 1.43 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) - (fp_line (start -0.8 0.4125) (end -0.8 -0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start -0.8 -0.4125) (end 0.8 -0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start 0.8 -0.4125) (end 0.8 0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start 0.8 0.4125) (end -0.8 0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start -0.237258 -0.5225) (end 0.237258 -0.5225) (layer F.SilkS) (width 0.12)) - (fp_line (start -0.237258 0.5225) (end 0.237258 0.5225) (layer F.SilkS) (width 0.12)) - (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.237258 0.5225) (end 0.237258 0.5225) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.237258 -0.5225) (end 0.237258 -0.5225) (layer F.SilkS) (width 0.12)) + (fp_line (start 0.8 0.4125) (end -0.8 0.4125) (layer F.Fab) (width 0.1)) + (fp_line (start 0.8 -0.4125) (end 0.8 0.4125) (layer F.Fab) (width 0.1)) + (fp_line (start -0.8 -0.4125) (end 0.8 -0.4125) (layer F.Fab) (width 0.1)) + (fp_line (start -0.8 0.4125) (end -0.8 -0.4125) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) @@ -2065,16 +2065,16 @@ (fp_text value 12kOhm (at 0 1.43) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) - (fp_line (start -0.8 0.4125) (end -0.8 -0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start -0.8 -0.4125) (end 0.8 -0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start 0.8 -0.4125) (end 0.8 0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start 0.8 0.4125) (end -0.8 0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start -0.237258 -0.5225) (end 0.237258 -0.5225) (layer F.SilkS) (width 0.12)) - (fp_line (start -0.237258 0.5225) (end 0.237258 0.5225) (layer F.SilkS) (width 0.12)) - (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.237258 0.5225) (end 0.237258 0.5225) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.237258 -0.5225) (end 0.237258 -0.5225) (layer F.SilkS) (width 0.12)) + (fp_line (start 0.8 0.4125) (end -0.8 0.4125) (layer F.Fab) (width 0.1)) + (fp_line (start 0.8 -0.4125) (end 0.8 0.4125) (layer F.Fab) (width 0.1)) + (fp_line (start -0.8 -0.4125) (end 0.8 -0.4125) (layer F.Fab) (width 0.1)) + (fp_line (start -0.8 0.4125) (end -0.8 -0.4125) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) @@ -2101,16 +2101,16 @@ (fp_text value 12kOhm (at 0 1.43) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) - (fp_line (start -0.8 0.4125) (end -0.8 -0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start -0.8 -0.4125) (end 0.8 -0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start 0.8 -0.4125) (end 0.8 0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start 0.8 0.4125) (end -0.8 0.4125) (layer F.Fab) (width 0.1)) - (fp_line (start -0.237258 -0.5225) (end 0.237258 -0.5225) (layer F.SilkS) (width 0.12)) - (fp_line (start -0.237258 0.5225) (end 0.237258 0.5225) (layer F.SilkS) (width 0.12)) - (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.237258 0.5225) (end 0.237258 0.5225) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.237258 -0.5225) (end 0.237258 -0.5225) (layer F.SilkS) (width 0.12)) + (fp_line (start 0.8 0.4125) (end -0.8 0.4125) (layer F.Fab) (width 0.1)) + (fp_line (start 0.8 -0.4125) (end 0.8 0.4125) (layer F.Fab) (width 0.1)) + (fp_line (start -0.8 -0.4125) (end 0.8 -0.4125) (layer F.Fab) (width 0.1)) + (fp_line (start -0.8 0.4125) (end -0.8 -0.4125) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) @@ -2137,8 +2137,8 @@ (fp_text value Testpoint_LDO_IN (at 0 2.05) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) - (fp_circle (center 0 0) (end 1.5 0) (layer F.CrtYd) (width 0.05)) (fp_circle (center 0 0) (end 0 1.2) (layer F.SilkS) (width 0.12)) + (fp_circle (center 0 0) (end 1.5 0) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 -2) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) @@ -2158,8 +2158,8 @@ (fp_text value Testpoint_GND (at 0 2.05) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) - (fp_circle (center 0 0) (end 1.5 0) (layer F.CrtYd) (width 0.05)) (fp_circle (center 0 0) (end 0 1.2) (layer F.SilkS) (width 0.12)) + (fp_circle (center 0 0) (end 1.5 0) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 -2) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) @@ -2179,8 +2179,8 @@ (fp_text value Testpoint_3V3 (at 0 2.05) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) - (fp_circle (center 0 0) (end 1.5 0) (layer F.CrtYd) (width 0.05)) (fp_circle (center 0 0) (end 0 1.2) (layer F.SilkS) (width 0.12)) + (fp_circle (center 0 0) (end 1.5 0) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 -2) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) @@ -2199,21 +2199,21 @@ (fp_text value Conn_01x02_Male (at 0 -4.87 90) (layer B.Fab) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) - (fp_line (start -0.635 1.27) (end 1.27 1.27) (layer B.Fab) (width 0.1)) - (fp_line (start 1.27 1.27) (end 1.27 -3.81) (layer B.Fab) (width 0.1)) - (fp_line (start 1.27 -3.81) (end -1.27 -3.81) (layer B.Fab) (width 0.1)) - (fp_line (start -1.27 -3.81) (end -1.27 0.635) (layer B.Fab) (width 0.1)) - (fp_line (start -1.27 0.635) (end -0.635 1.27) (layer B.Fab) (width 0.1)) - (fp_line (start -1.33 -3.87) (end 1.33 -3.87) (layer B.SilkS) (width 0.12)) - (fp_line (start -1.33 -1.27) (end -1.33 -3.87) (layer B.SilkS) (width 0.12)) - (fp_line (start 1.33 -1.27) (end 1.33 -3.87) (layer B.SilkS) (width 0.12)) - (fp_line (start -1.33 -1.27) (end 1.33 -1.27) (layer B.SilkS) (width 0.12)) - (fp_line (start -1.33 0) (end -1.33 1.33) (layer B.SilkS) (width 0.12)) - (fp_line (start -1.33 1.33) (end 0 1.33) (layer B.SilkS) (width 0.12)) - (fp_line (start -1.8 1.8) (end -1.8 -4.35) (layer B.CrtYd) (width 0.05)) - (fp_line (start -1.8 -4.35) (end 1.8 -4.35) (layer B.CrtYd) (width 0.05)) - (fp_line (start 1.8 -4.35) (end 1.8 1.8) (layer B.CrtYd) (width 0.05)) (fp_line (start 1.8 1.8) (end -1.8 1.8) (layer B.CrtYd) (width 0.05)) + (fp_line (start 1.8 -4.35) (end 1.8 1.8) (layer B.CrtYd) (width 0.05)) + (fp_line (start -1.8 -4.35) (end 1.8 -4.35) (layer B.CrtYd) (width 0.05)) + (fp_line (start -1.8 1.8) (end -1.8 -4.35) (layer B.CrtYd) (width 0.05)) + (fp_line (start -1.33 1.33) (end 0 1.33) (layer B.SilkS) (width 0.12)) + (fp_line (start -1.33 0) (end -1.33 1.33) (layer B.SilkS) (width 0.12)) + (fp_line (start -1.33 -1.27) (end 1.33 -1.27) (layer B.SilkS) (width 0.12)) + (fp_line (start 1.33 -1.27) (end 1.33 -3.87) (layer B.SilkS) (width 0.12)) + (fp_line (start -1.33 -1.27) (end -1.33 -3.87) (layer B.SilkS) (width 0.12)) + (fp_line (start -1.33 -3.87) (end 1.33 -3.87) (layer B.SilkS) (width 0.12)) + (fp_line (start -1.27 0.635) (end -0.635 1.27) (layer B.Fab) (width 0.1)) + (fp_line (start -1.27 -3.81) (end -1.27 0.635) (layer B.Fab) (width 0.1)) + (fp_line (start 1.27 -3.81) (end -1.27 -3.81) (layer B.Fab) (width 0.1)) + (fp_line (start 1.27 1.27) (end 1.27 -3.81) (layer B.Fab) (width 0.1)) + (fp_line (start -0.635 1.27) (end 1.27 1.27) (layer B.Fab) (width 0.1)) (fp_text user %R (at 0 -1.27 180) (layer B.Fab) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) @@ -2240,8 +2240,8 @@ (fp_text value Testpoint_ADC (at 0 2.05) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) - (fp_circle (center 0 0) (end 1.5 0) (layer F.CrtYd) (width 0.05)) (fp_circle (center 0 0) (end 0 1.2) (layer F.SilkS) (width 0.12)) + (fp_circle (center 0 0) (end 1.5 0) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 -2) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) @@ -2261,8 +2261,8 @@ (fp_text value Testpoint_RST (at 0 2.05) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) - (fp_circle (center 0 0) (end 1.5 0) (layer F.CrtYd) (width 0.05)) (fp_circle (center 0 0) (end 0 1.2) (layer F.SilkS) (width 0.12)) + (fp_circle (center 0 0) (end 1.5 0) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 -2) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) @@ -2281,62 +2281,62 @@ (fp_text value Conn_01x03_Male (at 4.385 -7.35 90) (layer B.Fab) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) - (fp_line (start 2.135 1.27) (end 4.04 1.27) (layer B.Fab) (width 0.1)) - (fp_line (start 4.04 1.27) (end 4.04 -6.35) (layer B.Fab) (width 0.1)) - (fp_line (start 4.04 -6.35) (end 1.5 -6.35) (layer B.Fab) (width 0.1)) - (fp_line (start 1.5 -6.35) (end 1.5 0.635) (layer B.Fab) (width 0.1)) - (fp_line (start 1.5 0.635) (end 2.135 1.27) (layer B.Fab) (width 0.1)) - (fp_line (start -0.32 0.32) (end 1.5 0.32) (layer B.Fab) (width 0.1)) - (fp_line (start -0.32 0.32) (end -0.32 -0.32) (layer B.Fab) (width 0.1)) - (fp_line (start -0.32 -0.32) (end 1.5 -0.32) (layer B.Fab) (width 0.1)) - (fp_line (start 4.04 0.32) (end 10.04 0.32) (layer B.Fab) (width 0.1)) - (fp_line (start 10.04 0.32) (end 10.04 -0.32) (layer B.Fab) (width 0.1)) - (fp_line (start 4.04 -0.32) (end 10.04 -0.32) (layer B.Fab) (width 0.1)) - (fp_line (start -0.32 -2.22) (end 1.5 -2.22) (layer B.Fab) (width 0.1)) - (fp_line (start -0.32 -2.22) (end -0.32 -2.86) (layer B.Fab) (width 0.1)) - (fp_line (start -0.32 -2.86) (end 1.5 -2.86) (layer B.Fab) (width 0.1)) - (fp_line (start 4.04 -2.22) (end 10.04 -2.22) (layer B.Fab) (width 0.1)) - (fp_line (start 10.04 -2.22) (end 10.04 -2.86) (layer B.Fab) (width 0.1)) - (fp_line (start 4.04 -2.86) (end 10.04 -2.86) (layer B.Fab) (width 0.1)) - (fp_line (start -0.32 -4.76) (end 1.5 -4.76) (layer B.Fab) (width 0.1)) - (fp_line (start -0.32 -4.76) (end -0.32 -5.4) (layer B.Fab) (width 0.1)) - (fp_line (start -0.32 -5.4) (end 1.5 -5.4) (layer B.Fab) (width 0.1)) - (fp_line (start 4.04 -4.76) (end 10.04 -4.76) (layer B.Fab) (width 0.1)) - (fp_line (start 10.04 -4.76) (end 10.04 -5.4) (layer B.Fab) (width 0.1)) - (fp_line (start 4.04 -5.4) (end 10.04 -5.4) (layer B.Fab) (width 0.1)) - (fp_line (start 1.44 1.33) (end 1.44 -6.41) (layer B.SilkS) (width 0.12)) - (fp_line (start 1.44 -6.41) (end 4.1 -6.41) (layer B.SilkS) (width 0.12)) - (fp_line (start 4.1 -6.41) (end 4.1 1.33) (layer B.SilkS) (width 0.12)) - (fp_line (start 4.1 1.33) (end 1.44 1.33) (layer B.SilkS) (width 0.12)) - (fp_line (start 4.1 0.38) (end 10.1 0.38) (layer B.SilkS) (width 0.12)) - (fp_line (start 10.1 0.38) (end 10.1 -0.38) (layer B.SilkS) (width 0.12)) - (fp_line (start 10.1 -0.38) (end 4.1 -0.38) (layer B.SilkS) (width 0.12)) - (fp_line (start 4.1 0.32) (end 10.1 0.32) (layer B.SilkS) (width 0.12)) - (fp_line (start 4.1 0.2) (end 10.1 0.2) (layer B.SilkS) (width 0.12)) - (fp_line (start 4.1 0.08) (end 10.1 0.08) (layer B.SilkS) (width 0.12)) - (fp_line (start 4.1 -0.04) (end 10.1 -0.04) (layer B.SilkS) (width 0.12)) - (fp_line (start 4.1 -0.16) (end 10.1 -0.16) (layer B.SilkS) (width 0.12)) - (fp_line (start 4.1 -0.28) (end 10.1 -0.28) (layer B.SilkS) (width 0.12)) - (fp_line (start 1.11 0.38) (end 1.44 0.38) (layer B.SilkS) (width 0.12)) - (fp_line (start 1.11 -0.38) (end 1.44 -0.38) (layer B.SilkS) (width 0.12)) - (fp_line (start 1.44 -1.27) (end 4.1 -1.27) (layer B.SilkS) (width 0.12)) - (fp_line (start 4.1 -2.16) (end 10.1 -2.16) (layer B.SilkS) (width 0.12)) - (fp_line (start 10.1 -2.16) (end 10.1 -2.92) (layer B.SilkS) (width 0.12)) - (fp_line (start 10.1 -2.92) (end 4.1 -2.92) (layer B.SilkS) (width 0.12)) - (fp_line (start 1.042929 -2.16) (end 1.44 -2.16) (layer B.SilkS) (width 0.12)) - (fp_line (start 1.042929 -2.92) (end 1.44 -2.92) (layer B.SilkS) (width 0.12)) - (fp_line (start 1.44 -3.81) (end 4.1 -3.81) (layer B.SilkS) (width 0.12)) - (fp_line (start 4.1 -4.7) (end 10.1 -4.7) (layer B.SilkS) (width 0.12)) - (fp_line (start 10.1 -4.7) (end 10.1 -5.46) (layer B.SilkS) (width 0.12)) - (fp_line (start 10.1 -5.46) (end 4.1 -5.46) (layer B.SilkS) (width 0.12)) - (fp_line (start 1.042929 -4.7) (end 1.44 -4.7) (layer B.SilkS) (width 0.12)) - (fp_line (start 1.042929 -5.46) (end 1.44 -5.46) (layer B.SilkS) (width 0.12)) - (fp_line (start -1.27 0) (end -1.27 1.27) (layer B.SilkS) (width 0.12)) - (fp_line (start -1.27 1.27) (end 0 1.27) (layer B.SilkS) (width 0.12)) - (fp_line (start -1.8 1.8) (end -1.8 -6.85) (layer B.CrtYd) (width 0.05)) - (fp_line (start -1.8 -6.85) (end 10.55 -6.85) (layer B.CrtYd) (width 0.05)) - (fp_line (start 10.55 -6.85) (end 10.55 1.8) (layer B.CrtYd) (width 0.05)) (fp_line (start 10.55 1.8) (end -1.8 1.8) (layer B.CrtYd) (width 0.05)) + (fp_line (start 10.55 -6.85) (end 10.55 1.8) (layer B.CrtYd) (width 0.05)) + (fp_line (start -1.8 -6.85) (end 10.55 -6.85) (layer B.CrtYd) (width 0.05)) + (fp_line (start -1.8 1.8) (end -1.8 -6.85) (layer B.CrtYd) (width 0.05)) + (fp_line (start -1.27 1.27) (end 0 1.27) (layer B.SilkS) (width 0.12)) + (fp_line (start -1.27 0) (end -1.27 1.27) (layer B.SilkS) (width 0.12)) + (fp_line (start 1.042929 -5.46) (end 1.44 -5.46) (layer B.SilkS) (width 0.12)) + (fp_line (start 1.042929 -4.7) (end 1.44 -4.7) (layer B.SilkS) (width 0.12)) + (fp_line (start 10.1 -5.46) (end 4.1 -5.46) (layer B.SilkS) (width 0.12)) + (fp_line (start 10.1 -4.7) (end 10.1 -5.46) (layer B.SilkS) (width 0.12)) + (fp_line (start 4.1 -4.7) (end 10.1 -4.7) (layer B.SilkS) (width 0.12)) + (fp_line (start 1.44 -3.81) (end 4.1 -3.81) (layer B.SilkS) (width 0.12)) + (fp_line (start 1.042929 -2.92) (end 1.44 -2.92) (layer B.SilkS) (width 0.12)) + (fp_line (start 1.042929 -2.16) (end 1.44 -2.16) (layer B.SilkS) (width 0.12)) + (fp_line (start 10.1 -2.92) (end 4.1 -2.92) (layer B.SilkS) (width 0.12)) + (fp_line (start 10.1 -2.16) (end 10.1 -2.92) (layer B.SilkS) (width 0.12)) + (fp_line (start 4.1 -2.16) (end 10.1 -2.16) (layer B.SilkS) (width 0.12)) + (fp_line (start 1.44 -1.27) (end 4.1 -1.27) (layer B.SilkS) (width 0.12)) + (fp_line (start 1.11 -0.38) (end 1.44 -0.38) (layer B.SilkS) (width 0.12)) + (fp_line (start 1.11 0.38) (end 1.44 0.38) (layer B.SilkS) (width 0.12)) + (fp_line (start 4.1 -0.28) (end 10.1 -0.28) (layer B.SilkS) (width 0.12)) + (fp_line (start 4.1 -0.16) (end 10.1 -0.16) (layer B.SilkS) (width 0.12)) + (fp_line (start 4.1 -0.04) (end 10.1 -0.04) (layer B.SilkS) (width 0.12)) + (fp_line (start 4.1 0.08) (end 10.1 0.08) (layer B.SilkS) (width 0.12)) + (fp_line (start 4.1 0.2) (end 10.1 0.2) (layer B.SilkS) (width 0.12)) + (fp_line (start 4.1 0.32) (end 10.1 0.32) (layer B.SilkS) (width 0.12)) + (fp_line (start 10.1 -0.38) (end 4.1 -0.38) (layer B.SilkS) (width 0.12)) + (fp_line (start 10.1 0.38) (end 10.1 -0.38) (layer B.SilkS) (width 0.12)) + (fp_line (start 4.1 0.38) (end 10.1 0.38) (layer B.SilkS) (width 0.12)) + (fp_line (start 4.1 1.33) (end 1.44 1.33) (layer B.SilkS) (width 0.12)) + (fp_line (start 4.1 -6.41) (end 4.1 1.33) (layer B.SilkS) (width 0.12)) + (fp_line (start 1.44 -6.41) (end 4.1 -6.41) (layer B.SilkS) (width 0.12)) + (fp_line (start 1.44 1.33) (end 1.44 -6.41) (layer B.SilkS) (width 0.12)) + (fp_line (start 4.04 -5.4) (end 10.04 -5.4) (layer B.Fab) (width 0.1)) + (fp_line (start 10.04 -4.76) (end 10.04 -5.4) (layer B.Fab) (width 0.1)) + (fp_line (start 4.04 -4.76) (end 10.04 -4.76) (layer B.Fab) (width 0.1)) + (fp_line (start -0.32 -5.4) (end 1.5 -5.4) (layer B.Fab) (width 0.1)) + (fp_line (start -0.32 -4.76) (end -0.32 -5.4) (layer B.Fab) (width 0.1)) + (fp_line (start -0.32 -4.76) (end 1.5 -4.76) (layer B.Fab) (width 0.1)) + (fp_line (start 4.04 -2.86) (end 10.04 -2.86) (layer B.Fab) (width 0.1)) + (fp_line (start 10.04 -2.22) (end 10.04 -2.86) (layer B.Fab) (width 0.1)) + (fp_line (start 4.04 -2.22) (end 10.04 -2.22) (layer B.Fab) (width 0.1)) + (fp_line (start -0.32 -2.86) (end 1.5 -2.86) (layer B.Fab) (width 0.1)) + (fp_line (start -0.32 -2.22) (end -0.32 -2.86) (layer B.Fab) (width 0.1)) + (fp_line (start -0.32 -2.22) (end 1.5 -2.22) (layer B.Fab) (width 0.1)) + (fp_line (start 4.04 -0.32) (end 10.04 -0.32) (layer B.Fab) (width 0.1)) + (fp_line (start 10.04 0.32) (end 10.04 -0.32) (layer B.Fab) (width 0.1)) + (fp_line (start 4.04 0.32) (end 10.04 0.32) (layer B.Fab) (width 0.1)) + (fp_line (start -0.32 -0.32) (end 1.5 -0.32) (layer B.Fab) (width 0.1)) + (fp_line (start -0.32 0.32) (end -0.32 -0.32) (layer B.Fab) (width 0.1)) + (fp_line (start -0.32 0.32) (end 1.5 0.32) (layer B.Fab) (width 0.1)) + (fp_line (start 1.5 0.635) (end 2.135 1.27) (layer B.Fab) (width 0.1)) + (fp_line (start 1.5 -6.35) (end 1.5 0.635) (layer B.Fab) (width 0.1)) + (fp_line (start 4.04 -6.35) (end 1.5 -6.35) (layer B.Fab) (width 0.1)) + (fp_line (start 4.04 1.27) (end 4.04 -6.35) (layer B.Fab) (width 0.1)) + (fp_line (start 2.135 1.27) (end 4.04 1.27) (layer B.Fab) (width 0.1)) (fp_text user %R (at 2.77 -2.54 180) (layer B.Fab) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) @@ -2364,20 +2364,20 @@ (fp_text value Conn_01x02_Male (at 2.54 -5.08) (layer B.Fab) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) - (fp_line (start -2.41 -2.55) (end 7.49 -2.55) (layer B.Fab) (width 0.1)) - (fp_line (start -2.46 3.75) (end -2.46 -3.75) (layer B.Fab) (width 0.1)) - (fp_line (start -2.46 -3.75) (end 7.54 -3.75) (layer B.Fab) (width 0.1)) - (fp_line (start 7.54 -3.75) (end 7.54 3.75) (layer B.Fab) (width 0.1)) - (fp_line (start 7.54 3.75) (end -2.46 3.75) (layer B.Fab) (width 0.1)) - (fp_line (start 7.62 -2.54) (end -2.54 -2.54) (layer B.SilkS) (width 0.12)) - (fp_line (start 7.62 -3.81) (end 7.62 3.81) (layer B.SilkS) (width 0.12)) - (fp_line (start 7.62 3.81) (end -2.54 3.81) (layer B.SilkS) (width 0.12)) - (fp_line (start -2.54 3.81) (end -2.54 -3.81) (layer B.SilkS) (width 0.12)) - (fp_line (start -2.54 -3.81) (end 7.62 -3.81) (layer B.SilkS) (width 0.12)) - (fp_line (start -2.71 4) (end 7.79 4) (layer B.CrtYd) (width 0.05)) - (fp_line (start -2.71 4) (end -2.71 -4) (layer B.CrtYd) (width 0.05)) - (fp_line (start 7.79 -4) (end 7.79 4) (layer B.CrtYd) (width 0.05)) (fp_line (start 7.79 -4) (end -2.71 -4) (layer B.CrtYd) (width 0.05)) + (fp_line (start 7.79 -4) (end 7.79 4) (layer B.CrtYd) (width 0.05)) + (fp_line (start -2.71 4) (end -2.71 -4) (layer B.CrtYd) (width 0.05)) + (fp_line (start -2.71 4) (end 7.79 4) (layer B.CrtYd) (width 0.05)) + (fp_line (start -2.54 -3.81) (end 7.62 -3.81) (layer B.SilkS) (width 0.12)) + (fp_line (start -2.54 3.81) (end -2.54 -3.81) (layer B.SilkS) (width 0.12)) + (fp_line (start 7.62 3.81) (end -2.54 3.81) (layer B.SilkS) (width 0.12)) + (fp_line (start 7.62 -3.81) (end 7.62 3.81) (layer B.SilkS) (width 0.12)) + (fp_line (start 7.62 -2.54) (end -2.54 -2.54) (layer B.SilkS) (width 0.12)) + (fp_line (start 7.54 3.75) (end -2.46 3.75) (layer B.Fab) (width 0.1)) + (fp_line (start 7.54 -3.75) (end 7.54 3.75) (layer B.Fab) (width 0.1)) + (fp_line (start -2.46 -3.75) (end 7.54 -3.75) (layer B.Fab) (width 0.1)) + (fp_line (start -2.46 3.75) (end -2.46 -3.75) (layer B.Fab) (width 0.1)) + (fp_line (start -2.41 -2.55) (end 7.49 -2.55) (layer B.Fab) (width 0.1)) (fp_text user %R (at 2.54 0) (layer B.Fab) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) @@ -2409,8 +2409,8 @@ (fp_text value MountingHole_Pad (at 0 3.2) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) - (fp_circle (center 0 0) (end 2.2 0) (layer Cmts.User) (width 0.15)) (fp_circle (center 0 0) (end 2.45 0) (layer F.CrtYd) (width 0.05)) + (fp_circle (center 0 0) (end 2.2 0) (layer Cmts.User) (width 0.15)) (fp_text user %R (at 0.3 0) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) @@ -2446,8 +2446,8 @@ (fp_text value MountingHole_Pad (at 0 3.2) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) - (fp_circle (center 0 0) (end 2.2 0) (layer Cmts.User) (width 0.15)) (fp_circle (center 0 0) (end 2.45 0) (layer F.CrtYd) (width 0.05)) + (fp_circle (center 0 0) (end 2.2 0) (layer Cmts.User) (width 0.15)) (fp_text user %R (at 0.3 0) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) @@ -2483,8 +2483,8 @@ (fp_text value MountingHole_Pad (at 0 3.2) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) - (fp_circle (center 0 0) (end 2.2 0) (layer Cmts.User) (width 0.15)) (fp_circle (center 0 0) (end 2.45 0) (layer F.CrtYd) (width 0.05)) + (fp_circle (center 0 0) (end 2.2 0) (layer Cmts.User) (width 0.15)) (fp_text user %R (at 0.3 0) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) @@ -2520,8 +2520,8 @@ (fp_text value MountingHole_Pad (at 0 3.2) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) - (fp_circle (center 0 0) (end 2.2 0) (layer Cmts.User) (width 0.15)) (fp_circle (center 0 0) (end 2.45 0) (layer F.CrtYd) (width 0.05)) + (fp_circle (center 0 0) (end 2.2 0) (layer Cmts.User) (width 0.15)) (fp_text user %R (at 0.3 0) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) @@ -2557,23 +2557,23 @@ (fp_text value SS14 (at 0 2.6) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) - (fp_line (start -3.4 -1.65) (end -3.4 1.65) (layer F.SilkS) (width 0.12)) - (fp_line (start 2.3 1.5) (end -2.3 1.5) (layer F.Fab) (width 0.1)) - (fp_line (start -2.3 1.5) (end -2.3 -1.5) (layer F.Fab) (width 0.1)) - (fp_line (start 2.3 -1.5) (end 2.3 1.5) (layer F.Fab) (width 0.1)) - (fp_line (start 2.3 -1.5) (end -2.3 -1.5) (layer F.Fab) (width 0.1)) - (fp_line (start -3.5 -1.75) (end 3.5 -1.75) (layer F.CrtYd) (width 0.05)) - (fp_line (start 3.5 -1.75) (end 3.5 1.75) (layer F.CrtYd) (width 0.05)) - (fp_line (start 3.5 1.75) (end -3.5 1.75) (layer F.CrtYd) (width 0.05)) - (fp_line (start -3.5 1.75) (end -3.5 -1.75) (layer F.CrtYd) (width 0.05)) - (fp_line (start -0.64944 0.00102) (end -1.55114 0.00102) (layer F.Fab) (width 0.1)) - (fp_line (start 0.50118 0.00102) (end 1.4994 0.00102) (layer F.Fab) (width 0.1)) - (fp_line (start -0.64944 -0.79908) (end -0.64944 0.80112) (layer F.Fab) (width 0.1)) - (fp_line (start 0.50118 0.75032) (end 0.50118 -0.79908) (layer F.Fab) (width 0.1)) - (fp_line (start -0.64944 0.00102) (end 0.50118 0.75032) (layer F.Fab) (width 0.1)) - (fp_line (start -0.64944 0.00102) (end 0.50118 -0.79908) (layer F.Fab) (width 0.1)) - (fp_line (start -3.4 1.65) (end 2 1.65) (layer F.SilkS) (width 0.12)) (fp_line (start -3.4 -1.65) (end 2 -1.65) (layer F.SilkS) (width 0.12)) + (fp_line (start -3.4 1.65) (end 2 1.65) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.64944 0.00102) (end 0.50118 -0.79908) (layer F.Fab) (width 0.1)) + (fp_line (start -0.64944 0.00102) (end 0.50118 0.75032) (layer F.Fab) (width 0.1)) + (fp_line (start 0.50118 0.75032) (end 0.50118 -0.79908) (layer F.Fab) (width 0.1)) + (fp_line (start -0.64944 -0.79908) (end -0.64944 0.80112) (layer F.Fab) (width 0.1)) + (fp_line (start 0.50118 0.00102) (end 1.4994 0.00102) (layer F.Fab) (width 0.1)) + (fp_line (start -0.64944 0.00102) (end -1.55114 0.00102) (layer F.Fab) (width 0.1)) + (fp_line (start -3.5 1.75) (end -3.5 -1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.5 1.75) (end -3.5 1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.5 -1.75) (end 3.5 1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.5 -1.75) (end 3.5 -1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.3 -1.5) (end -2.3 -1.5) (layer F.Fab) (width 0.1)) + (fp_line (start 2.3 -1.5) (end 2.3 1.5) (layer F.Fab) (width 0.1)) + (fp_line (start -2.3 1.5) (end -2.3 -1.5) (layer F.Fab) (width 0.1)) + (fp_line (start 2.3 1.5) (end -2.3 1.5) (layer F.Fab) (width 0.1)) + (fp_line (start -3.4 -1.65) (end -3.4 1.65) (layer F.SilkS) (width 0.12)) (fp_text user %R (at 0 -2.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) @@ -2600,18 +2600,18 @@ (fp_text value RED (at 0 1.43) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) - (fp_line (start 0.8 -0.4) (end -0.5 -0.4) (layer F.Fab) (width 0.1)) - (fp_line (start -0.5 -0.4) (end -0.8 -0.1) (layer F.Fab) (width 0.1)) - (fp_line (start -0.8 -0.1) (end -0.8 0.4) (layer F.Fab) (width 0.1)) - (fp_line (start -0.8 0.4) (end 0.8 0.4) (layer F.Fab) (width 0.1)) - (fp_line (start 0.8 0.4) (end 0.8 -0.4) (layer F.Fab) (width 0.1)) - (fp_line (start 0.8 -0.735) (end -1.485 -0.735) (layer F.SilkS) (width 0.12)) - (fp_line (start -1.485 -0.735) (end -1.485 0.735) (layer F.SilkS) (width 0.12)) - (fp_line (start -1.485 0.735) (end 0.8 0.735) (layer F.SilkS) (width 0.12)) - (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.485 0.735) (end 0.8 0.735) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.485 -0.735) (end -1.485 0.735) (layer F.SilkS) (width 0.12)) + (fp_line (start 0.8 -0.735) (end -1.485 -0.735) (layer F.SilkS) (width 0.12)) + (fp_line (start 0.8 0.4) (end 0.8 -0.4) (layer F.Fab) (width 0.1)) + (fp_line (start -0.8 0.4) (end 0.8 0.4) (layer F.Fab) (width 0.1)) + (fp_line (start -0.8 -0.1) (end -0.8 0.4) (layer F.Fab) (width 0.1)) + (fp_line (start -0.5 -0.4) (end -0.8 -0.1) (layer F.Fab) (width 0.1)) + (fp_line (start 0.8 -0.4) (end -0.5 -0.4) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) @@ -2638,18 +2638,18 @@ (fp_text value RED (at 0 1.43 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) - (fp_line (start 0.8 -0.4) (end -0.5 -0.4) (layer F.Fab) (width 0.1)) - (fp_line (start -0.5 -0.4) (end -0.8 -0.1) (layer F.Fab) (width 0.1)) - (fp_line (start -0.8 -0.1) (end -0.8 0.4) (layer F.Fab) (width 0.1)) - (fp_line (start -0.8 0.4) (end 0.8 0.4) (layer F.Fab) (width 0.1)) - (fp_line (start 0.8 0.4) (end 0.8 -0.4) (layer F.Fab) (width 0.1)) - (fp_line (start 0.8 -0.735) (end -1.485 -0.735) (layer F.SilkS) (width 0.12)) - (fp_line (start -1.485 -0.735) (end -1.485 0.735) (layer F.SilkS) (width 0.12)) - (fp_line (start -1.485 0.735) (end 0.8 0.735) (layer F.SilkS) (width 0.12)) - (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.485 0.735) (end 0.8 0.735) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.485 -0.735) (end -1.485 0.735) (layer F.SilkS) (width 0.12)) + (fp_line (start 0.8 -0.735) (end -1.485 -0.735) (layer F.SilkS) (width 0.12)) + (fp_line (start 0.8 0.4) (end 0.8 -0.4) (layer F.Fab) (width 0.1)) + (fp_line (start -0.8 0.4) (end 0.8 0.4) (layer F.Fab) (width 0.1)) + (fp_line (start -0.8 -0.1) (end -0.8 0.4) (layer F.Fab) (width 0.1)) + (fp_line (start -0.5 -0.4) (end -0.8 -0.1) (layer F.Fab) (width 0.1)) + (fp_line (start 0.8 -0.4) (end -0.5 -0.4) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) @@ -2676,18 +2676,18 @@ (fp_text value RED (at 0 1.43 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) - (fp_line (start 0.8 -0.4) (end -0.5 -0.4) (layer F.Fab) (width 0.1)) - (fp_line (start -0.5 -0.4) (end -0.8 -0.1) (layer F.Fab) (width 0.1)) - (fp_line (start -0.8 -0.1) (end -0.8 0.4) (layer F.Fab) (width 0.1)) - (fp_line (start -0.8 0.4) (end 0.8 0.4) (layer F.Fab) (width 0.1)) - (fp_line (start 0.8 0.4) (end 0.8 -0.4) (layer F.Fab) (width 0.1)) - (fp_line (start 0.8 -0.735) (end -1.485 -0.735) (layer F.SilkS) (width 0.12)) - (fp_line (start -1.485 -0.735) (end -1.485 0.735) (layer F.SilkS) (width 0.12)) - (fp_line (start -1.485 0.735) (end 0.8 0.735) (layer F.SilkS) (width 0.12)) - (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.485 0.735) (end 0.8 0.735) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.485 -0.735) (end -1.485 0.735) (layer F.SilkS) (width 0.12)) + (fp_line (start 0.8 -0.735) (end -1.485 -0.735) (layer F.SilkS) (width 0.12)) + (fp_line (start 0.8 0.4) (end 0.8 -0.4) (layer F.Fab) (width 0.1)) + (fp_line (start -0.8 0.4) (end 0.8 0.4) (layer F.Fab) (width 0.1)) + (fp_line (start -0.8 -0.1) (end -0.8 0.4) (layer F.Fab) (width 0.1)) + (fp_line (start -0.5 -0.4) (end -0.8 -0.1) (layer F.Fab) (width 0.1)) + (fp_line (start 0.8 -0.4) (end -0.5 -0.4) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) @@ -2714,18 +2714,18 @@ (fp_text value RED (at 0 1.43 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) - (fp_line (start 0.8 -0.4) (end -0.5 -0.4) (layer F.Fab) (width 0.1)) - (fp_line (start -0.5 -0.4) (end -0.8 -0.1) (layer F.Fab) (width 0.1)) - (fp_line (start -0.8 -0.1) (end -0.8 0.4) (layer F.Fab) (width 0.1)) - (fp_line (start -0.8 0.4) (end 0.8 0.4) (layer F.Fab) (width 0.1)) - (fp_line (start 0.8 0.4) (end 0.8 -0.4) (layer F.Fab) (width 0.1)) - (fp_line (start 0.8 -0.735) (end -1.485 -0.735) (layer F.SilkS) (width 0.12)) - (fp_line (start -1.485 -0.735) (end -1.485 0.735) (layer F.SilkS) (width 0.12)) - (fp_line (start -1.485 0.735) (end 0.8 0.735) (layer F.SilkS) (width 0.12)) - (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.485 0.735) (end 0.8 0.735) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.485 -0.735) (end -1.485 0.735) (layer F.SilkS) (width 0.12)) + (fp_line (start 0.8 -0.735) (end -1.485 -0.735) (layer F.SilkS) (width 0.12)) + (fp_line (start 0.8 0.4) (end 0.8 -0.4) (layer F.Fab) (width 0.1)) + (fp_line (start -0.8 0.4) (end 0.8 0.4) (layer F.Fab) (width 0.1)) + (fp_line (start -0.8 -0.1) (end -0.8 0.4) (layer F.Fab) (width 0.1)) + (fp_line (start -0.5 -0.4) (end -0.8 -0.1) (layer F.Fab) (width 0.1)) + (fp_line (start 0.8 -0.4) (end -0.5 -0.4) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) @@ -2752,23 +2752,23 @@ (fp_text value SS14 (at 0 2.6) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) - (fp_line (start -3.4 -1.65) (end -3.4 1.65) (layer F.SilkS) (width 0.12)) - (fp_line (start 2.3 1.5) (end -2.3 1.5) (layer F.Fab) (width 0.1)) - (fp_line (start -2.3 1.5) (end -2.3 -1.5) (layer F.Fab) (width 0.1)) - (fp_line (start 2.3 -1.5) (end 2.3 1.5) (layer F.Fab) (width 0.1)) - (fp_line (start 2.3 -1.5) (end -2.3 -1.5) (layer F.Fab) (width 0.1)) - (fp_line (start -3.5 -1.75) (end 3.5 -1.75) (layer F.CrtYd) (width 0.05)) - (fp_line (start 3.5 -1.75) (end 3.5 1.75) (layer F.CrtYd) (width 0.05)) - (fp_line (start 3.5 1.75) (end -3.5 1.75) (layer F.CrtYd) (width 0.05)) - (fp_line (start -3.5 1.75) (end -3.5 -1.75) (layer F.CrtYd) (width 0.05)) - (fp_line (start -0.64944 0.00102) (end -1.55114 0.00102) (layer F.Fab) (width 0.1)) - (fp_line (start 0.50118 0.00102) (end 1.4994 0.00102) (layer F.Fab) (width 0.1)) - (fp_line (start -0.64944 -0.79908) (end -0.64944 0.80112) (layer F.Fab) (width 0.1)) - (fp_line (start 0.50118 0.75032) (end 0.50118 -0.79908) (layer F.Fab) (width 0.1)) - (fp_line (start -0.64944 0.00102) (end 0.50118 0.75032) (layer F.Fab) (width 0.1)) - (fp_line (start -0.64944 0.00102) (end 0.50118 -0.79908) (layer F.Fab) (width 0.1)) - (fp_line (start -3.4 1.65) (end 2 1.65) (layer F.SilkS) (width 0.12)) (fp_line (start -3.4 -1.65) (end 2 -1.65) (layer F.SilkS) (width 0.12)) + (fp_line (start -3.4 1.65) (end 2 1.65) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.64944 0.00102) (end 0.50118 -0.79908) (layer F.Fab) (width 0.1)) + (fp_line (start -0.64944 0.00102) (end 0.50118 0.75032) (layer F.Fab) (width 0.1)) + (fp_line (start 0.50118 0.75032) (end 0.50118 -0.79908) (layer F.Fab) (width 0.1)) + (fp_line (start -0.64944 -0.79908) (end -0.64944 0.80112) (layer F.Fab) (width 0.1)) + (fp_line (start 0.50118 0.00102) (end 1.4994 0.00102) (layer F.Fab) (width 0.1)) + (fp_line (start -0.64944 0.00102) (end -1.55114 0.00102) (layer F.Fab) (width 0.1)) + (fp_line (start -3.5 1.75) (end -3.5 -1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.5 1.75) (end -3.5 1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.5 -1.75) (end 3.5 1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.5 -1.75) (end 3.5 -1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.3 -1.5) (end -2.3 -1.5) (layer F.Fab) (width 0.1)) + (fp_line (start 2.3 -1.5) (end 2.3 1.5) (layer F.Fab) (width 0.1)) + (fp_line (start -2.3 1.5) (end -2.3 -1.5) (layer F.Fab) (width 0.1)) + (fp_line (start 2.3 1.5) (end -2.3 1.5) (layer F.Fab) (width 0.1)) + (fp_line (start -3.4 -1.65) (end -3.4 1.65) (layer F.SilkS) (width 0.12)) (fp_text user %R (at 0 -2.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) @@ -2795,16 +2795,16 @@ (fp_text value 100nF (at 0 1.43) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) - (fp_line (start -0.8 0.4) (end -0.8 -0.4) (layer F.Fab) (width 0.1)) - (fp_line (start -0.8 -0.4) (end 0.8 -0.4) (layer F.Fab) (width 0.1)) - (fp_line (start 0.8 -0.4) (end 0.8 0.4) (layer F.Fab) (width 0.1)) - (fp_line (start 0.8 0.4) (end -0.8 0.4) (layer F.Fab) (width 0.1)) - (fp_line (start -0.14058 -0.51) (end 0.14058 -0.51) (layer F.SilkS) (width 0.12)) - (fp_line (start -0.14058 0.51) (end 0.14058 0.51) (layer F.SilkS) (width 0.12)) - (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.14058 0.51) (end 0.14058 0.51) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.14058 -0.51) (end 0.14058 -0.51) (layer F.SilkS) (width 0.12)) + (fp_line (start 0.8 0.4) (end -0.8 0.4) (layer F.Fab) (width 0.1)) + (fp_line (start 0.8 -0.4) (end 0.8 0.4) (layer F.Fab) (width 0.1)) + (fp_line (start -0.8 -0.4) (end 0.8 -0.4) (layer F.Fab) (width 0.1)) + (fp_line (start -0.8 0.4) (end -0.8 -0.4) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) @@ -2831,16 +2831,16 @@ (fp_text value 10uF (at 0 1.68) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) - (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) - (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) - (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) - (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) - (fp_line (start -0.261252 -0.735) (end 0.261252 -0.735) (layer F.SilkS) (width 0.12)) - (fp_line (start -0.261252 0.735) (end 0.261252 0.735) (layer F.SilkS) (width 0.12)) - (fp_line (start -1.7 0.98) (end -1.7 -0.98) (layer F.CrtYd) (width 0.05)) - (fp_line (start -1.7 -0.98) (end 1.7 -0.98) (layer F.CrtYd) (width 0.05)) - (fp_line (start 1.7 -0.98) (end 1.7 0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.7 0.98) (end -1.7 0.98) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.7 -0.98) (end 1.7 0.98) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.7 -0.98) (end 1.7 -0.98) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.7 0.98) (end -1.7 -0.98) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.261252 0.735) (end 0.261252 0.735) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.261252 -0.735) (end 0.261252 -0.735) (layer F.SilkS) (width 0.12)) + (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) + (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) + (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) + (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) @@ -2867,16 +2867,16 @@ (fp_text value 100nF (at 0 1.43 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) - (fp_line (start -0.8 0.4) (end -0.8 -0.4) (layer F.Fab) (width 0.1)) - (fp_line (start -0.8 -0.4) (end 0.8 -0.4) (layer F.Fab) (width 0.1)) - (fp_line (start 0.8 -0.4) (end 0.8 0.4) (layer F.Fab) (width 0.1)) - (fp_line (start 0.8 0.4) (end -0.8 0.4) (layer F.Fab) (width 0.1)) - (fp_line (start -0.14058 -0.51) (end 0.14058 -0.51) (layer F.SilkS) (width 0.12)) - (fp_line (start -0.14058 0.51) (end 0.14058 0.51) (layer F.SilkS) (width 0.12)) - (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.14058 0.51) (end 0.14058 0.51) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.14058 -0.51) (end 0.14058 -0.51) (layer F.SilkS) (width 0.12)) + (fp_line (start 0.8 0.4) (end -0.8 0.4) (layer F.Fab) (width 0.1)) + (fp_line (start 0.8 -0.4) (end 0.8 0.4) (layer F.Fab) (width 0.1)) + (fp_line (start -0.8 -0.4) (end 0.8 -0.4) (layer F.Fab) (width 0.1)) + (fp_line (start -0.8 0.4) (end -0.8 -0.4) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) @@ -2903,16 +2903,16 @@ (fp_text value 10uF (at 0 1.68 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) - (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) - (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) - (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) - (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) - (fp_line (start -0.261252 -0.735) (end 0.261252 -0.735) (layer F.SilkS) (width 0.12)) - (fp_line (start -0.261252 0.735) (end 0.261252 0.735) (layer F.SilkS) (width 0.12)) - (fp_line (start -1.7 0.98) (end -1.7 -0.98) (layer F.CrtYd) (width 0.05)) - (fp_line (start -1.7 -0.98) (end 1.7 -0.98) (layer F.CrtYd) (width 0.05)) - (fp_line (start 1.7 -0.98) (end 1.7 0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.7 0.98) (end -1.7 0.98) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.7 -0.98) (end 1.7 0.98) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.7 -0.98) (end 1.7 -0.98) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.7 0.98) (end -1.7 -0.98) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.261252 0.735) (end 0.261252 0.735) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.261252 -0.735) (end 0.261252 -0.735) (layer F.SilkS) (width 0.12)) + (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) + (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) + (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) + (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) @@ -2939,16 +2939,16 @@ (fp_text value 100nF (at 0 1.43) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) - (fp_line (start -0.8 0.4) (end -0.8 -0.4) (layer F.Fab) (width 0.1)) - (fp_line (start -0.8 -0.4) (end 0.8 -0.4) (layer F.Fab) (width 0.1)) - (fp_line (start 0.8 -0.4) (end 0.8 0.4) (layer F.Fab) (width 0.1)) - (fp_line (start 0.8 0.4) (end -0.8 0.4) (layer F.Fab) (width 0.1)) - (fp_line (start -0.14058 -0.51) (end 0.14058 -0.51) (layer F.SilkS) (width 0.12)) - (fp_line (start -0.14058 0.51) (end 0.14058 0.51) (layer F.SilkS) (width 0.12)) - (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) - (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.14058 0.51) (end 0.14058 0.51) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.14058 -0.51) (end 0.14058 -0.51) (layer F.SilkS) (width 0.12)) + (fp_line (start 0.8 0.4) (end -0.8 0.4) (layer F.Fab) (width 0.1)) + (fp_line (start 0.8 -0.4) (end 0.8 0.4) (layer F.Fab) (width 0.1)) + (fp_line (start -0.8 -0.4) (end 0.8 -0.4) (layer F.Fab) (width 0.1)) + (fp_line (start -0.8 0.4) (end -0.8 -0.4) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) @@ -2975,18 +2975,18 @@ (fp_text value TAJB107K006RNJ (at 0 2.35 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) - (fp_line (start 1.75 -1.4) (end -1.05 -1.4) (layer F.Fab) (width 0.1)) - (fp_line (start -1.05 -1.4) (end -1.75 -0.7) (layer F.Fab) (width 0.1)) - (fp_line (start -1.75 -0.7) (end -1.75 1.4) (layer F.Fab) (width 0.1)) - (fp_line (start -1.75 1.4) (end 1.75 1.4) (layer F.Fab) (width 0.1)) - (fp_line (start 1.75 1.4) (end 1.75 -1.4) (layer F.Fab) (width 0.1)) - (fp_line (start 1.75 -1.51) (end -2.46 -1.51) (layer F.SilkS) (width 0.12)) - (fp_line (start -2.46 -1.51) (end -2.46 1.51) (layer F.SilkS) (width 0.12)) - (fp_line (start -2.46 1.51) (end 1.75 1.51) (layer F.SilkS) (width 0.12)) - (fp_line (start -2.45 1.65) (end -2.45 -1.65) (layer F.CrtYd) (width 0.05)) - (fp_line (start -2.45 -1.65) (end 2.45 -1.65) (layer F.CrtYd) (width 0.05)) - (fp_line (start 2.45 -1.65) (end 2.45 1.65) (layer F.CrtYd) (width 0.05)) (fp_line (start 2.45 1.65) (end -2.45 1.65) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.45 -1.65) (end 2.45 1.65) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.45 -1.65) (end 2.45 -1.65) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.45 1.65) (end -2.45 -1.65) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.46 1.51) (end 1.75 1.51) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.46 -1.51) (end -2.46 1.51) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.75 -1.51) (end -2.46 -1.51) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.75 1.4) (end 1.75 -1.4) (layer F.Fab) (width 0.1)) + (fp_line (start -1.75 1.4) (end 1.75 1.4) (layer F.Fab) (width 0.1)) + (fp_line (start -1.75 -0.7) (end -1.75 1.4) (layer F.Fab) (width 0.1)) + (fp_line (start -1.05 -1.4) (end -1.75 -0.7) (layer F.Fab) (width 0.1)) + (fp_line (start 1.75 -1.4) (end -1.05 -1.4) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.88 0.88) (thickness 0.13))) ) @@ -3013,16 +3013,16 @@ (fp_text value 10uF (at 0 1.68 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) - (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) - (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) - (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) - (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) - (fp_line (start -0.261252 -0.735) (end 0.261252 -0.735) (layer F.SilkS) (width 0.12)) - (fp_line (start -0.261252 0.735) (end 0.261252 0.735) (layer F.SilkS) (width 0.12)) - (fp_line (start -1.7 0.98) (end -1.7 -0.98) (layer F.CrtYd) (width 0.05)) - (fp_line (start -1.7 -0.98) (end 1.7 -0.98) (layer F.CrtYd) (width 0.05)) - (fp_line (start 1.7 -0.98) (end 1.7 0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.7 0.98) (end -1.7 0.98) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.7 -0.98) (end 1.7 0.98) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.7 -0.98) (end 1.7 -0.98) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.7 0.98) (end -1.7 -0.98) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.261252 0.735) (end 0.261252 0.735) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.261252 -0.735) (end 0.261252 -0.735) (layer F.SilkS) (width 0.12)) + (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) + (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) + (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) + (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) @@ -3049,16 +3049,16 @@ (fp_text value 10uF (at 0 1.68 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) - (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) - (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) - (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) - (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) - (fp_line (start -0.261252 -0.735) (end 0.261252 -0.735) (layer F.SilkS) (width 0.12)) - (fp_line (start -0.261252 0.735) (end 0.261252 0.735) (layer F.SilkS) (width 0.12)) - (fp_line (start -1.7 0.98) (end -1.7 -0.98) (layer F.CrtYd) (width 0.05)) - (fp_line (start -1.7 -0.98) (end 1.7 -0.98) (layer F.CrtYd) (width 0.05)) - (fp_line (start 1.7 -0.98) (end 1.7 0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.7 0.98) (end -1.7 0.98) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.7 -0.98) (end 1.7 0.98) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.7 -0.98) (end 1.7 -0.98) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.7 0.98) (end -1.7 -0.98) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.261252 0.735) (end 0.261252 0.735) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.261252 -0.735) (end 0.261252 -0.735) (layer F.SilkS) (width 0.12)) + (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) + (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) + (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) + (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) @@ -3444,7 +3444,7 @@ (segment (start 63.5 73.66) (end 60.96 73.66) (width 1) (layer F.Cu) (net 1)) (segment (start 55.88 71.12) (end 58.42 73.66) (width 1) (layer B.Cu) (net 1) (status 10)) (segment (start 66.548 58.9145) (end 61.4815 58.9145) (width 1) (layer F.Cu) (net 1) (status 10)) - (segment (start 60.4655 58.9145) (end 59.1955 58.9145) (width 1) (layer F.Cu) (net 1) (status 20)) + (segment (start 60.4655 58.9145) (end 59.1955 58.9145) (width 1) (layer F.Cu) (net 1)) (segment (start 64.008 38.46) (end 63.668 38.12) (width 1) (layer B.Cu) (net 1) (status 30)) (segment (start 55.099 31.778) (end 55.099 28.328) (width 0.25) (layer F.Cu) (net 1) (status 30)) (segment (start 62.249 31.778) (end 62.249 28.328) (width 0.25) (layer F.Cu) (net 1) (status 30)) @@ -3540,7 +3540,7 @@ (segment (start 63.5 73.66) (end 66.04 71.12) (width 1) (layer F.Cu) (net 1) (status 20)) (segment (start 66.04 71.12) (end 63.5 73.66) (width 1) (layer B.Cu) (net 1) (status 10)) (segment (start 74.88 71.12) (end 75 71) (width 1) (layer F.Cu) (net 1) (status 30)) - (segment (start 66.04 71.12) (end 69.0372 71.12) (width 1) (layer F.Cu) (net 1) (status 30)) + (segment (start 66.04 71.12) (end 69.0372 71.12) (width 1) (layer F.Cu) (net 1) (status 10)) (segment (start 51.816 67.056) (end 55.88 71.12) (width 2) (layer B.Cu) (net 1) (status 20)) (segment (start 42.672 67.056) (end 50.546 67.056) (width 2) (layer B.Cu) (net 1)) (via (at 71.882 46.99) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) @@ -3558,7 +3558,6 @@ (segment (start 48.4885 37.846) (end 48.26 37.6175) (width 0.25) (layer F.Cu) (net 1) (status 30)) (segment (start 50.5715 37.846) (end 48.4885 37.846) (width 0.25) (layer F.Cu) (net 1) (status 30)) (segment (start 50.8 37.6175) (end 50.5715 37.846) (width 0.25) (layer F.Cu) (net 1) (status 30)) - (segment (start 60.4655 55.1045) (end 60.4655 55.1045) (width 1) (layer F.Cu) (net 1)) (via (at 60.4655 58.914522) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) (segment (start 64.008 51.562) (end 61.595 53.975) (width 1) (layer F.Cu) (net 1)) (segment (start 60.4655 58.9145) (end 60.4655 58.914522) (width 1) (layer F.Cu) (net 1)) @@ -3596,7 +3595,7 @@ (via (at 60.96 63.246) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) (segment (start 59.1955 58.9145) (end 57.5555 58.9145) (width 1) (layer F.Cu) (net 1) (tstamp 60B179DC) (status 20)) (via (at 59.1955 58.9145) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) - (segment (start 61.4815 58.9145) (end 60.4655 58.9145) (width 1) (layer F.Cu) (net 1) (tstamp 60B179DE) (status 10)) + (segment (start 61.4815 58.9145) (end 60.4655 58.9145) (width 1) (layer F.Cu) (net 1) (tstamp 60B179DE)) (via (at 61.4815 58.9145) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) (segment (start 51.816 43.942) (end 51.054 44.704) (width 1) (layer F.Cu) (net 1) (tstamp 60B17A11)) (via (at 51.816 43.942) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) @@ -3615,16 +3614,14 @@ (segment (start 58.42 73.66) (end 55.372 73.66) (width 0.25) (layer F.Cu) (net 1)) (segment (start 32.859999 65.879999) (end 32.859999 69.502001) (width 0.25) (layer F.Cu) (net 1)) (segment (start 32.859999 71.721999) (end 33.02 71.882) (width 0.25) (layer F.Cu) (net 1)) - (segment (start 34.798 73.66) (end 34.798 73.66) (width 0.25) (layer F.Cu) (net 1)) (segment (start 32.859999 51.595001) (end 32.859999 48.674001) (width 0.25) (layer F.Cu) (net 1)) (segment (start 32.859999 30.386001) (end 33.782 29.464) (width 0.25) (layer F.Cu) (net 1)) (segment (start 34.798 28.448) (end 35.814 28.448) (width 0.25) (layer F.Cu) (net 1)) (segment (start 47.364 28.328) (end 45.586 28.328) (width 0.25) (layer F.Cu) (net 1)) - (segment (start 75.692 37.833) (end 77.711 37.833) (width 0.25) (layer F.Cu) (net 1)) + (segment (start 75.692 37.833) (end 77.711 37.833) (width 0.25) (layer F.Cu) (net 1) (status 10)) (segment (start 77.711 37.833) (end 77.724 37.82) (width 0.25) (layer F.Cu) (net 1)) (segment (start 77.724 37.82) (end 77.724 35.306) (width 0.25) (layer F.Cu) (net 1)) - (segment (start 76.962 67.056) (end 75.918 67.056) (width 0.25) (layer F.Cu) (net 1)) - (segment (start 77.724 66.294) (end 77.724 66.294) (width 0.25) (layer F.Cu) (net 1)) + (segment (start 76.962 67.056) (end 75.918 67.056) (width 0.25) (layer F.Cu) (net 1) (status 20)) (segment (start 77.724 37.82) (end 77.724 40.386) (width 0.25) (layer F.Cu) (net 1)) (segment (start 77.724 66.294) (end 76.962 67.056) (width 0.25) (layer F.Cu) (net 1) (tstamp 60B17BB8)) (via (at 77.724 66.294) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) @@ -3646,7 +3643,6 @@ (via (at 77.724 35.306) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) (segment (start 77.724 33.02) (end 77.724 32.766) (width 0.25) (layer F.Cu) (net 1) (tstamp 60B17BCA)) (via (at 77.724 33.02) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) - (segment (start 72.898 73.66) (end 72.898 73.66) (width 0.25) (layer F.Cu) (net 1) (tstamp 60B17BCC)) (via (at 72.898 73.66) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) (segment (start 70.104 73.66) (end 72.898 73.66) (width 0.25) (layer F.Cu) (net 1) (tstamp 60B17BCE)) (via (at 70.104 73.66) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) @@ -3702,7 +3698,7 @@ (segment (start 61.4815 60.1845) (end 60.579 61.087) (width 0.25) (layer F.Cu) (net 1)) (segment (start 59.944 59.663) (end 59.1955 58.9145) (width 0.25) (layer F.Cu) (net 1)) (segment (start 59.944 61.722) (end 59.944 59.663) (width 0.25) (layer F.Cu) (net 1)) - (segment (start 46.482 48.26) (end 45.085 48.26) (width 1) (layer B.Cu) (net 1) (tstamp 60B17E4A)) + (segment (start 51.054 48.26) (end 45.085 48.26) (width 1) (layer B.Cu) (net 1) (tstamp 60B17E4A)) (via (at 46.228 48.006) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) (via (at 45.3136 55.0418) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) (via (at 45.593 52.0446) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) @@ -3727,10 +3723,9 @@ (segment (start 50.546 67.056) (end 51.816 67.056) (width 2) (layer B.Cu) (net 1) (tstamp 60B17E56)) (via (at 50.546 67.056) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) (via (at 49.53 65.532) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) - (segment (start 51.054 48.26) (end 46.482 48.26) (width 1) (layer B.Cu) (net 1)) - (segment (start 71.0692 71.12) (end 74.88 71.12) (width 1) (layer F.Cu) (net 1) (tstamp 60B189FF) (status 30)) + (segment (start 71.0692 71.12) (end 74.88 71.12) (width 1) (layer F.Cu) (net 1) (tstamp 60B189FF) (status 20)) (via (at 71.0692 71.12) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) - (segment (start 69.0372 71.12) (end 71.0692 71.12) (width 1) (layer F.Cu) (net 1) (tstamp 60B18A01) (status 30)) + (segment (start 69.0372 71.12) (end 71.0692 71.12) (width 1) (layer F.Cu) (net 1) (tstamp 60B18A01)) (via (at 69.0372 71.12) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) (via (at 50.9778 65.6336) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) (via (at 64.8716 64.4398) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) @@ -3739,8 +3734,7 @@ (via (at 70.6374 66.167) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) (segment (start 51.054 48.26) (end 55.372 48.26) (width 1) (layer B.Cu) (net 1)) (via (at 55.372 48.26) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) - (segment (start 55.372 53.34) (end 55.372 52.578) (width 1) (layer F.Cu) (net 1)) - (segment (start 55.372 52.578) (end 55.372 48.26) (width 1) (layer F.Cu) (net 1) (tstamp 60B19261)) + (segment (start 55.372 53.34) (end 55.372 48.26) (width 1) (layer F.Cu) (net 1)) (via (at 55.626 51.816) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) (via (at 58.928 50.546) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) (via (at 46.228 54.102) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) @@ -3802,16 +3796,22 @@ (segment (start 61.405 43.942) (end 58.928 43.942) (width 0.25) (layer F.Cu) (net 3)) (segment (start 61.722 43.625) (end 61.405 43.942) (width 0.25) (layer F.Cu) (net 3)) (segment (start 61.722 42.989) (end 61.722 43.625) (width 0.25) (layer F.Cu) (net 3) (status 10)) - (segment (start 67.818 50.804166) (end 67.818 47.307) (width 0.25) (layer F.Cu) (net 3) (status 20)) - (segment (start 68.834 51.820166) (end 67.818 50.804166) (width 0.25) (layer F.Cu) (net 3)) (segment (start 68.834 52.591) (end 68.834 51.820166) (width 0.25) (layer F.Cu) (net 3)) (segment (start 72.327 48.895) (end 70.802 48.895) (width 0.25) (layer F.Cu) (net 3) (status 30)) - (segment (start 70.802 48.895) (end 69.913 48.006) (width 0.25) (layer F.Cu) (net 3) (status 10)) - (segment (start 69.913 48.006) (end 69.030998 48.006) (width 0.25) (layer F.Cu) (net 3)) - (segment (start 68.331998 47.307) (end 67.818 47.307) (width 0.25) (layer F.Cu) (net 3) (status 20)) - (segment (start 69.030998 48.006) (end 68.331998 47.307) (width 0.25) (layer F.Cu) (net 3)) (segment (start 64.821401 47.255599) (end 64.77 47.307) (width 0.25) (layer F.Cu) (net 3) (status 30)) (segment (start 67.818 47.307) (end 67.766599 47.255599) (width 0.25) (layer F.Cu) (net 3) (status 30)) + (segment (start 68.834 51.820166) (end 71.877834 51.820166) (width 0.25) (layer F.Cu) (net 3)) + (segment (start 72.327 51.371) (end 72.327 48.895) (width 0.25) (layer F.Cu) (net 3) (status 20)) + (segment (start 71.877834 51.820166) (end 72.327 51.371) (width 0.25) (layer F.Cu) (net 3)) + (segment (start 64.77 47.307) (end 67.818 47.307) (width 0.25) (layer F.Cu) (net 3)) + (segment (start 67.09099 47.05499) (end 67.09099 44.92301) (width 0.25) (layer F.Cu) (net 3)) + (segment (start 67.818 47.307) (end 67.343 47.307) (width 0.25) (layer F.Cu) (net 3)) + (segment (start 67.343 47.307) (end 67.09099 47.05499) (width 0.25) (layer F.Cu) (net 3)) + (segment (start 67.09099 44.92301) (end 68.072 43.942) (width 0.25) (layer F.Cu) (net 3)) + (segment (start 70.65799 48.75099) (end 70.802 48.895) (width 0.25) (layer F.Cu) (net 3)) + (segment (start 70.65799 45.60375) (end 70.65799 48.75099) (width 0.25) (layer F.Cu) (net 3)) + (segment (start 68.99624 43.942) (end 70.65799 45.60375) (width 0.25) (layer F.Cu) (net 3)) + (segment (start 68.072 43.942) (end 68.99624 43.942) (width 0.25) (layer F.Cu) (net 3)) (segment (start 76.2 48.26) (end 76.2 47.244) (width 0.25) (layer F.Cu) (net 4) (status 10)) (segment (start 74.676 45.72) (end 74.435 45.72) (width 0.25) (layer F.Cu) (net 4) (status 30)) (segment (start 76.2 47.244) (end 74.676 45.72) (width 0.25) (layer F.Cu) (net 4) (status 20)) @@ -3850,12 +3850,12 @@ (segment (start 60.96 71.12) (end 53.34 63.5) (width 2) (layer B.Cu) (net 5) (status 10)) (segment (start 60.96 70.834) (end 64.484 67.31) (width 2) (layer F.Cu) (net 5) (status 30)) (segment (start 60.96 71.12) (end 60.96 70.834) (width 2) (layer F.Cu) (net 5) (status 30)) - (segment (start 50.8 63.5) (end 50.884002 63.415998) (width 1) (layer F.Cu) (net 5)) - (segment (start 50.884002 63.415998) (end 50.884002 59.545502) (width 1) (layer F.Cu) (net 5)) - (segment (start 50.884002 59.545502) (end 50.7745 59.436) (width 1) (layer F.Cu) (net 5)) + (segment (start 50.8 63.5) (end 50.884002 63.415998) (width 1) (layer F.Cu) (net 5) (status 30)) + (segment (start 50.884002 63.415998) (end 50.884002 59.545502) (width 1) (layer F.Cu) (net 5) (status 30)) + (segment (start 50.884002 59.545502) (end 50.7745 59.436) (width 1) (layer F.Cu) (net 5) (status 30)) (segment (start 54.540009 35.744009) (end 54.540009 46.986193) (width 1) (layer F.Cu) (net 5)) - (segment (start 54.540009 46.986193) (end 50.787 50.739202) (width 1) (layer F.Cu) (net 5)) - (segment (start 50.787 50.739202) (end 50.787 51.054) (width 1) (layer F.Cu) (net 5)) + (segment (start 54.540009 46.986193) (end 50.787 50.739202) (width 1) (layer F.Cu) (net 5) (status 20)) + (segment (start 50.787 50.739202) (end 50.787 51.054) (width 1) (layer F.Cu) (net 5) (status 30)) (segment (start 50.8 34.353) (end 50.8 36.0425) (width 0.25) (layer F.Cu) (net 6) (status 30)) (segment (start 48.26 34.353) (end 48.26 36.0425) (width 0.25) (layer F.Cu) (net 7) (status 30)) (segment (start 44.513 54.4445) (end 43.942 53.8735) (width 0.25) (layer F.Cu) (net 8) (status 20)) @@ -3867,7 +3867,7 @@ (segment (start 53.848 57.658) (end 53.848 57.9375) (width 0.25) (layer F.Cu) (net 9)) (segment (start 54.356 57.15) (end 53.848 57.658) (width 0.25) (layer B.Cu) (net 9)) (segment (start 54.356 57.15) (end 54.356 56.642) (width 0.25) (layer B.Cu) (net 9)) - (segment (start 57.1246 53.8734) (end 57.1246 50.7727) (width 0.25) (layer B.Cu) (net 9)) + (segment (start 57.1246 53.8734) (end 57.1246 50.7727) (width 0.25) (layer B.Cu) (net 9) (status 20)) (segment (start 54.356 56.642) (end 57.1246 53.8734) (width 0.25) (layer B.Cu) (net 9)) (segment (start 45.72 66.04) (end 45.72 63.5) (width 2) (layer F.Cu) (net 10) (status 20)) (segment (start 45.466 63.246) (end 45.72 63.5) (width 0.25) (layer F.Cu) (net 10) (status 30)) @@ -3895,17 +3895,17 @@ (segment (start 38.260001 35.720001) (end 35.56 33.02) (width 2) (layer B.Cu) (net 13) (status 20)) (segment (start 38.260001 50.639999) (end 38.260001 35.720001) (width 2) (layer B.Cu) (net 13) (tstamp 60923A99)) (segment (start 38.420002 35.56) (end 38.260001 35.720001) (width 2) (layer B.Cu) (net 13)) - (segment (start 40.64 35.56) (end 38.420002 35.56) (width 2) (layer B.Cu) (net 13)) + (segment (start 40.64 35.56) (end 38.420002 35.56) (width 2) (layer B.Cu) (net 13) (status 10)) (segment (start 38.260001 50.960001) (end 38.260001 50.639999) (width 2) (layer B.Cu) (net 13)) - (segment (start 40.64 53.34) (end 38.260001 50.960001) (width 2) (layer B.Cu) (net 13)) - (segment (start 35.8 53.1) (end 35.56 53.34) (width 2) (layer B.Cu) (net 13)) - (segment (start 40.4 53.1) (end 35.8 53.1) (width 2) (layer B.Cu) (net 13)) - (segment (start 40.64 53.34) (end 40.4 53.1) (width 2) (layer B.Cu) (net 13)) - (segment (start 41.842081 53.34) (end 40.64 53.34) (width 2) (layer B.Cu) (net 13)) + (segment (start 40.64 53.34) (end 38.260001 50.960001) (width 2) (layer B.Cu) (net 13) (status 10)) + (segment (start 35.8 53.1) (end 35.56 53.34) (width 2) (layer B.Cu) (net 13) (status 30)) + (segment (start 40.4 53.1) (end 35.8 53.1) (width 2) (layer B.Cu) (net 13) (status 30)) + (segment (start 40.64 53.34) (end 40.4 53.1) (width 2) (layer B.Cu) (net 13) (status 30)) + (segment (start 41.842081 53.34) (end 40.64 53.34) (width 2) (layer B.Cu) (net 13) (status 20)) (segment (start 42.690001 54.18792) (end 41.842081 53.34) (width 2) (layer B.Cu) (net 13)) (segment (start 42.690001 56.72792) (end 42.690001 54.18792) (width 2) (layer B.Cu) (net 13)) (segment (start 48.26 62.297919) (end 42.690001 56.72792) (width 2) (layer B.Cu) (net 13)) - (segment (start 48.26 63.5) (end 48.26 62.297919) (width 2) (layer B.Cu) (net 13)) + (segment (start 48.26 63.5) (end 48.26 62.297919) (width 2) (layer B.Cu) (net 13) (status 10)) (segment (start 38.1 58.42) (end 40.64 55.88) (width 0.25) (layer B.Cu) (net 14) (status 20)) (segment (start 35.56 58.42) (end 38.1 58.42) (width 0.25) (layer B.Cu) (net 14) (status 10)) (segment (start 40.64 55.88) (end 42.418 54.102) (width 0.25) (layer F.Cu) (net 14) (status 10)) @@ -3949,11 +3949,11 @@ (via (at 66.802 50.292) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 16)) (segment (start 69.668 53.32) (end 69.668 51.82) (width 0.25) (layer B.Cu) (net 16) (status 10)) (segment (start 68.14 50.292) (end 66.802 50.292) (width 0.25) (layer B.Cu) (net 16)) - (segment (start 35.56 38.1) (end 40.64 38.1) (width 0.25) (layer F.Cu) (net 16)) + (segment (start 35.56 38.1) (end 40.64 38.1) (width 0.25) (layer F.Cu) (net 16) (status 30)) (via (at 60.706 49.783996) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 16)) - (segment (start 40.64 38.1) (end 47.371 44.831) (width 0.25) (layer B.Cu) (net 16)) + (segment (start 40.64 38.1) (end 47.371 44.831) (width 0.25) (layer B.Cu) (net 16) (status 10)) (segment (start 66.802 50.292) (end 65.474011 48.964011) (width 0.25) (layer F.Cu) (net 16)) - (segment (start 58.42 48.26) (end 59.943996 49.783996) (width 0.25) (layer F.Cu) (net 16)) + (segment (start 58.42 48.26) (end 59.943996 49.783996) (width 0.25) (layer F.Cu) (net 16) (status 10)) (segment (start 59.943996 49.783996) (end 60.706 49.783996) (width 0.25) (layer F.Cu) (net 16)) (segment (start 60.706 45.593) (end 60.706 49.783996) (width 0.25) (layer B.Cu) (net 16)) (segment (start 65.474011 48.964011) (end 61.525985 48.964011) (width 0.25) (layer F.Cu) (net 16)) @@ -3963,28 +3963,26 @@ (segment (start 65.668 50.43266) (end 65.534338 50.298998) (width 0.25) (layer B.Cu) (net 17)) (segment (start 65.668 53.32) (end 65.668 50.43266) (width 0.25) (layer B.Cu) (net 17) (status 10)) (via (at 65.534338 50.298998) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 17)) - (segment (start 38.1 43.18) (end 40.64 40.64) (width 0.25) (layer F.Cu) (net 17)) - (segment (start 35.56 43.18) (end 38.1 43.18) (width 0.25) (layer F.Cu) (net 17)) - (segment (start 64.70184 49.4665) (end 64.76767 49.53233) (width 0.25) (layer F.Cu) (net 17)) + (segment (start 38.1 43.18) (end 40.64 40.64) (width 0.25) (layer F.Cu) (net 17) (status 20)) + (segment (start 35.56 43.18) (end 38.1 43.18) (width 0.25) (layer F.Cu) (net 17) (status 10)) + (segment (start 64.70184 49.4665) (end 65.534338 50.298998) (width 0.25) (layer F.Cu) (net 17)) (segment (start 62.2935 49.4665) (end 64.70184 49.4665) (width 0.25) (layer F.Cu) (net 17)) - (segment (start 64.76767 49.53233) (end 65.534338 50.298998) (width 0.25) (layer F.Cu) (net 17)) (via (at 60.3885 51.3715) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 17)) (segment (start 60.3885 51.3715) (end 62.2935 49.4665) (width 0.25) (layer F.Cu) (net 17)) - (segment (start 58.42 53.34) (end 60.3885 51.3715) (width 0.25) (layer F.Cu) (net 17)) - (segment (start 59.988501 50.971501) (end 60.3885 51.3715) (width 0.25) (layer B.Cu) (net 17)) - (segment (start 59.963982 50.946982) (end 59.988501 50.971501) (width 0.25) (layer B.Cu) (net 17)) + (segment (start 58.42 53.34) (end 60.3885 51.3715) (width 0.25) (layer F.Cu) (net 17) (status 10)) + (segment (start 59.963982 50.946982) (end 60.3885 51.3715) (width 0.25) (layer B.Cu) (net 17)) (segment (start 59.963982 45.860067) (end 59.963982 50.946982) (width 0.25) (layer B.Cu) (net 17)) (segment (start 59.569915 45.466) (end 59.963982 45.860067) (width 0.25) (layer B.Cu) (net 17)) (segment (start 45.466 45.466) (end 59.569915 45.466) (width 0.25) (layer B.Cu) (net 17)) - (segment (start 40.64 40.64) (end 45.466 45.466) (width 0.25) (layer B.Cu) (net 17)) + (segment (start 40.64 40.64) (end 45.466 45.466) (width 0.25) (layer B.Cu) (net 17) (status 10)) (segment (start 46.291 59.944) (end 47.815 61.468) (width 0.25) (layer F.Cu) (net 18) (status 30)) (segment (start 46.291 59.69) (end 46.291 59.944) (width 0.25) (layer F.Cu) (net 18) (status 30)) (via (at 49.53 60.706) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 18)) (segment (start 48.768 61.468) (end 49.53 60.706) (width 0.25) (layer F.Cu) (net 18)) (segment (start 69.782 60.706) (end 49.53 60.706) (width 0.25) (layer B.Cu) (net 18)) - (segment (start 47.815 61.468) (end 48.768 61.468) (width 0.25) (layer F.Cu) (net 18)) - (segment (start 48.26 50.8) (end 48.26 59.436) (width 0.25) (layer F.Cu) (net 18)) - (segment (start 75.668 53.32) (end 75.668 54.82) (width 0.25) (layer B.Cu) (net 18)) + (segment (start 47.815 61.468) (end 48.768 61.468) (width 0.25) (layer F.Cu) (net 18) (status 10)) + (segment (start 48.26 50.8) (end 48.26 59.436) (width 0.25) (layer F.Cu) (net 18) (status 10)) + (segment (start 75.668 53.32) (end 75.668 54.82) (width 0.25) (layer B.Cu) (net 18) (status 10)) (segment (start 48.26 59.436) (end 49.53 60.706) (width 0.25) (layer F.Cu) (net 18)) (segment (start 75.668 54.82) (end 69.782 60.706) (width 0.25) (layer B.Cu) (net 18)) (segment (start 61.318022 37.838) (end 62.738 39.257978) (width 0.25) (layer F.Cu) (net 19)) @@ -4020,33 +4018,35 @@ (segment (start 42.926 56.959) (end 42.863 56.896) (width 0.25) (layer F.Cu) (net 23) (status 30)) (segment (start 42.926 61.405) (end 42.926 56.959) (width 0.25) (layer F.Cu) (net 23) (status 30)) (via (at 47.498 53.34) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 23)) - (segment (start 42.863 56.896) (end 43.66301 57.69601) (width 0.25) (layer F.Cu) (net 23)) + (segment (start 42.863 56.896) (end 43.66301 57.69601) (width 0.25) (layer F.Cu) (net 23) (status 10)) (segment (start 43.66301 57.69601) (end 44.930468 57.69601) (width 0.25) (layer F.Cu) (net 23)) (segment (start 44.930468 57.69601) (end 47.498 55.128478) (width 0.25) (layer F.Cu) (net 23)) (segment (start 47.498 55.128478) (end 47.498 53.34) (width 0.25) (layer F.Cu) (net 23)) (segment (start 48.7445 52.0935) (end 47.498 53.34) (width 0.25) (layer B.Cu) (net 23)) - (segment (start 53.9496 52.0935) (end 48.7445 52.0935) (width 0.25) (layer B.Cu) (net 23)) + (segment (start 53.9496 52.0935) (end 48.7445 52.0935) (width 0.25) (layer B.Cu) (net 23) (status 10)) (segment (start 52.387 55.88) (end 52.387 57.658) (width 0.25) (layer F.Cu) (net 24) (status 30)) (segment (start 65.668 38.12) (end 65.668 45.602) (width 0.25) (layer B.Cu) (net 25) (status 10)) (segment (start 65.668 45.602) (end 67.056 46.99) (width 0.25) (layer B.Cu) (net 25)) - (via (at 69.088 46.99) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 25)) - (segment (start 67.056 46.99) (end 69.088 46.99) (width 0.25) (layer B.Cu) (net 25)) - (segment (start 69.66 45.72) (end 69.66 46.418) (width 0.25) (layer F.Cu) (net 25) (status 10)) - (segment (start 69.66 46.418) (end 69.088 46.99) (width 0.25) (layer F.Cu) (net 25)) (via (at 44.704 46.95301) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 25)) (segment (start 40.64 45.72) (end 41.87301 46.95301) (width 0.25) (layer B.Cu) (net 25) (status 10)) (segment (start 48.26 45.72) (end 45.93701 45.72) (width 0.25) (layer F.Cu) (net 25) (status 10)) (segment (start 45.93701 45.72) (end 44.704 46.95301) (width 0.25) (layer F.Cu) (net 25)) (segment (start 41.87301 46.95301) (end 44.704 46.95301) (width 0.25) (layer B.Cu) (net 25)) - (segment (start 67.056 48.006) (end 66.548 48.514) (width 0.25) (layer B.Cu) (net 25)) - (segment (start 67.056 46.99) (end 67.056 48.006) (width 0.25) (layer B.Cu) (net 25)) - (via (at 66.548 48.514) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 25)) (segment (start 44.704 46.95301) (end 57.440982 46.95301) (width 0.25) (layer B.Cu) (net 25)) (via (at 57.530996 46.862996) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 25)) (segment (start 57.440982 46.95301) (end 57.530996 46.862996) (width 0.25) (layer B.Cu) (net 25)) - (segment (start 60.579002 48.514) (end 58.927998 46.862996) (width 0.25) (layer F.Cu) (net 25)) - (segment (start 66.548 48.514) (end 60.579002 48.514) (width 0.25) (layer F.Cu) (net 25)) - (segment (start 58.927998 46.862996) (end 57.530996 46.862996) (width 0.25) (layer F.Cu) (net 25)) + (segment (start 57.530996 46.862996) (end 58.927998 46.862996) (width 0.25) (layer F.Cu) (net 25)) + (segment (start 69.66 45.72) (end 69.66 46.540424) (width 0.25) (layer F.Cu) (net 25)) + (segment (start 67.056 46.99) (end 69.183616 46.99) (width 0.25) (layer B.Cu) (net 25)) + (segment (start 69.66 46.540424) (end 69.19702 47.003404) (width 0.25) (layer F.Cu) (net 25)) + (segment (start 69.183616 46.99) (end 69.19702 47.003404) (width 0.25) (layer B.Cu) (net 25)) + (via (at 69.19702 47.003404) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 25)) + (segment (start 60.579002 48.514) (end 66.436286 48.514) (width 0.25) (layer F.Cu) (net 25)) + (segment (start 67.056 48.234326) (end 66.606306 48.68402) (width 0.25) (layer B.Cu) (net 25)) + (segment (start 58.927998 46.862996) (end 60.579002 48.514) (width 0.25) (layer F.Cu) (net 25)) + (via (at 66.606306 48.68402) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 25)) + (segment (start 67.056 46.99) (end 67.056 48.234326) (width 0.25) (layer B.Cu) (net 25)) + (segment (start 66.436286 48.514) (end 66.606306 48.68402) (width 0.25) (layer F.Cu) (net 25)) (segment (start 48.26 32.703) (end 48.26 30.48) (width 0.25) (layer F.Cu) (net 26) (status 30)) (segment (start 48.26 32.703) (end 49.525114 33.968114) (width 0.25) (layer F.Cu) (net 26) (status 10)) (segment (start 73.142988 36.094988) (end 49.556535 36.094988) (width 0.25) (layer B.Cu) (net 26)) @@ -4062,7 +4062,7 @@ (via (at 45.212 49.53) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 26)) (segment (start 45.9505 50.2685) (end 45.212 49.53) (width 0.25) (layer B.Cu) (net 26)) (segment (start 48.26 43.688) (end 49.585001 45.013001) (width 0.25) (layer F.Cu) (net 26)) - (segment (start 53.9496 50.2685) (end 45.9505 50.2685) (width 0.25) (layer B.Cu) (net 26)) + (segment (start 53.9496 50.2685) (end 45.9505 50.2685) (width 0.25) (layer B.Cu) (net 26) (status 10)) (segment (start 49.585001 46.484684) (end 46.539685 49.53) (width 0.25) (layer F.Cu) (net 26)) (segment (start 49.585001 45.013001) (end 49.585001 46.484684) (width 0.25) (layer F.Cu) (net 26)) (segment (start 46.539685 49.53) (end 45.212 49.53) (width 0.25) (layer F.Cu) (net 26)) @@ -4088,15 +4088,12 @@ (segment (start 49.53 43.688) (end 50.171401 44.329401) (width 0.25) (layer F.Cu) (net 27)) (segment (start 50.851357 49.08501) (end 50.546 49.390367) (width 0.25) (layer B.Cu) (net 27)) (segment (start 56.32499 49.08501) (end 50.851357 49.08501) (width 0.25) (layer B.Cu) (net 27)) - (segment (start 56.4623 48.9477) (end 56.32499 49.08501) (width 0.25) (layer B.Cu) (net 27)) - (segment (start 57.1246 48.9477) (end 56.4623 48.9477) (width 0.25) (layer B.Cu) (net 27)) + (segment (start 56.4623 48.9477) (end 56.32499 49.08501) (width 0.25) (layer B.Cu) (net 27) (status 10)) + (segment (start 57.1246 48.9477) (end 56.4623 48.9477) (width 0.25) (layer B.Cu) (net 27) (status 30)) (via (at 66.39301 45.22992) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 28)) (segment (start 64.77 45.657) (end 65.96593 45.657) (width 0.25) (layer F.Cu) (net 28) (status 10)) (segment (start 65.96593 45.657) (end 66.39301 45.22992) (width 0.25) (layer F.Cu) (net 28)) - (segment (start 68.81608 45.22992) (end 66.39301 45.22992) (width 0.25) (layer B.Cu) (net 28)) - (segment (start 69.668 44.378) (end 68.81608 45.22992) (width 0.25) (layer B.Cu) (net 28)) (via (at 69.668 40.458) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 28)) - (segment (start 69.668 40.458) (end 69.668 44.378) (width 0.25) (layer B.Cu) (net 28)) (segment (start 69.668 38.12) (end 69.668 40.458) (width 0.25) (layer B.Cu) (net 28) (status 10)) (via (at 66.802 33.782) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 28)) (segment (start 66.548 33.528) (end 66.802 33.782) (width 0.25) (layer B.Cu) (net 28)) @@ -4113,6 +4110,10 @@ (segment (start 67.31 38.37) (end 67.31 34.29) (width 0.25) (layer F.Cu) (net 28) (status 10)) (segment (start 74.966999 40.108001) (end 75.692 39.383) (width 0.25) (layer F.Cu) (net 28) (status 20)) (segment (start 74.966999 41.946999) (end 74.966999 40.108001) (width 0.25) (layer F.Cu) (net 28)) + (segment (start 66.793009 45.629919) (end 66.39301 45.22992) (width 0.25) (layer B.Cu) (net 28)) + (segment (start 69.668 44.511559) (end 68.54964 45.629919) (width 0.25) (layer B.Cu) (net 28)) + (segment (start 69.668 40.458) (end 69.668 44.511559) (width 0.25) (layer B.Cu) (net 28)) + (segment (start 68.54964 45.629919) (end 66.793009 45.629919) (width 0.25) (layer B.Cu) (net 28)) (segment (start 71.644 39.163) (end 72.453 38.354) (width 0.25) (layer F.Cu) (net 29) (status 20)) (segment (start 71.644 41.722) (end 71.644 39.163) (width 0.25) (layer F.Cu) (net 29) (status 10)) (segment (start 66.36 42.547) (end 66.993 43.18) (width 0.25) (layer F.Cu) (net 30) (status 20)) @@ -4125,18 +4126,21 @@ (segment (start 58.166 42.9515) (end 57.9375 42.9515) (width 0.25) (layer F.Cu) (net 33) (status 30)) (segment (start 58.42 41.1225) (end 58.166 41.3765) (width 0.25) (layer F.Cu) (net 34) (status 30)) (segment (start 58.42 39.788) (end 58.42 41.1225) (width 0.25) (layer F.Cu) (net 34) (status 30)) - (segment (start 67.668 44.046) (end 68.072 44.45) (width 0.25) (layer B.Cu) (net 35)) - (segment (start 67.668 38.12) (end 67.668 44.046) (width 0.25) (layer B.Cu) (net 35) (status 10)) - (segment (start 67.818 44.704) (end 68.072 44.45) (width 0.25) (layer F.Cu) (net 35)) - (segment (start 67.818 45.657) (end 67.818 44.704) (width 0.25) (layer F.Cu) (net 35) (status 10)) - (via (at 68.072 44.45) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 35)) - (segment (start 65.44299 48.03201) (end 61.062923 48.03201) (width 0.25) (layer F.Cu) (net 35)) - (segment (start 67.818 45.657) (end 65.44299 48.03201) (width 0.25) (layer F.Cu) (net 35)) (segment (start 59.131913 46.101) (end 59.238981 46.208068) (width 0.25) (layer B.Cu) (net 35)) - (segment (start 40.64 43.18) (end 43.561 46.101) (width 0.25) (layer B.Cu) (net 35)) + (segment (start 40.64 43.18) (end 43.561 46.101) (width 0.25) (layer B.Cu) (net 35) (status 10)) (segment (start 43.561 46.101) (end 59.131913 46.101) (width 0.25) (layer B.Cu) (net 35)) (via (at 59.238981 46.208068) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 35)) + (via (at 68.621937 44.59401) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 35)) + (segment (start 67.668 43.640073) (end 68.621937 44.59401) (width 0.25) (layer B.Cu) (net 35)) + (segment (start 67.668 38.12) (end 67.668 43.640073) (width 0.25) (layer B.Cu) (net 35)) + (segment (start 67.818 45.657) (end 67.818 45.397947) (width 0.25) (layer F.Cu) (net 35)) + (segment (start 67.818 45.397947) (end 68.621937 44.59401) (width 0.25) (layer F.Cu) (net 35)) (segment (start 61.062923 48.03201) (end 59.238981 46.208068) (width 0.25) (layer F.Cu) (net 35)) + (segment (start 68.20723 48.03201) (end 61.062923 48.03201) (width 0.25) (layer F.Cu) (net 35)) + (segment (start 68.54501 47.69423) (end 68.20723 48.03201) (width 0.25) (layer F.Cu) (net 35)) + (segment (start 68.54501 45.90901) (end 68.54501 47.69423) (width 0.25) (layer F.Cu) (net 35)) + (segment (start 68.293 45.657) (end 68.54501 45.90901) (width 0.25) (layer F.Cu) (net 35)) + (segment (start 67.818 45.657) (end 68.293 45.657) (width 0.25) (layer F.Cu) (net 35)) (zone (net 1) (net_name GND) (layer F.Cu) (tstamp 60B17E61) (hatch edge 0.508) (connect_pads (clearance 0.508)) @@ -4501,15 +4505,10 @@ (xy 68.914488 54.000377) (xy 68.92879 53.855164) (xy 68.936576 53.829499) (xy 68.95849 53.607001) (xy 68.9526 53.547201) (xy 69.345004 53.154798) (xy 69.374001 53.131001) (xy 69.441392 53.048885) (xy 69.468974 53.015277) (xy 69.539546 52.883247) (xy 69.545661 52.863088) (xy 69.583003 52.739986) (xy 69.594 52.628333) (xy 69.594 52.628323) (xy 69.597676 52.591) - (xy 69.594 52.553678) (xy 69.594 51.857488) (xy 69.597676 51.820166) (xy 69.594 51.782843) (xy 69.594 51.782833) - (xy 69.583003 51.67118) (xy 69.539546 51.527919) (xy 69.515278 51.482518) (xy 69.468974 51.395889) (xy 69.397799 51.309163) - (xy 69.374001 51.280165) (xy 69.345003 51.256367) (xy 68.578 50.489365) (xy 68.578 49.915797) (xy 68.631284 49.944278) - (xy 68.7885 49.991969) (xy 68.952 50.008072) (xy 69.190271 50.008072) (xy 69.985201 50.803003) (xy 70.008999 50.832001) - (xy 70.124724 50.926974) (xy 70.256753 50.997546) (xy 70.400014 51.041003) (xy 70.511667 51.052) (xy 70.511676 51.052) - (xy 70.548999 51.055676) (xy 70.586322 51.052) (xy 70.924289 51.052) (xy 70.968226 51.095937) (xy 71.137744 51.209205) - (xy 71.326102 51.287226) (xy 71.526061 51.327) (xy 71.729939 51.327) (xy 71.929898 51.287226) (xy 72.118256 51.209205) - (xy 72.287774 51.095937) (xy 72.431937 50.951774) (xy 72.545205 50.782256) (xy 72.623226 50.593898) (xy 72.663 50.393939) - (xy 72.663 50.190061) (xy 72.624883 49.998432) (xy 72.6905 49.991969) (xy 72.847716 49.944278) (xy 72.992608 49.866831) + (xy 69.596609 52.580166) (xy 71.840512 52.580166) (xy 71.877834 52.583842) (xy 71.915156 52.580166) (xy 71.915167 52.580166) + (xy 72.02682 52.569169) (xy 72.170081 52.525712) (xy 72.30211 52.45514) (xy 72.417835 52.360167) (xy 72.441638 52.331163) + (xy 72.837998 51.934803) (xy 72.867001 51.911001) (xy 72.961974 51.795276) (xy 73.032546 51.663247) (xy 73.076003 51.519986) + (xy 73.087 51.408333) (xy 73.087 51.408325) (xy 73.090676 51.371) (xy 73.087 51.333675) (xy 73.087 49.789365) (xy 73.119606 49.762606) (xy 73.152 49.723134) (xy 73.184394 49.762606) (xy 73.311392 49.866831) (xy 73.456284 49.944278) (xy 73.6135 49.991969) (xy 73.777 50.008072) (xy 74.177 50.008072) (xy 74.3405 49.991969) (xy 74.497716 49.944278) (xy 74.642608 49.866831) (xy 74.769606 49.762606) (xy 74.857916 49.655) (xy 75.344843 49.655) (xy 75.369733 49.671631) From f3762ff59820955fe70b7a1095814b563026c4d9 Mon Sep 17 00:00:00 2001 From: busti Date: Wed, 7 Jul 2021 21:41:20 +0200 Subject: [PATCH 07/30] add build environment files for nixpkgs --- .gitmodules | 3 +++ README.md | 10 +++++++++- modules/nix | 1 + shell.nix | 1 + 4 files changed, 14 insertions(+), 1 deletion(-) create mode 160000 modules/nix create mode 100644 shell.nix diff --git a/.gitmodules b/.gitmodules index f1998a7..11a7502 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,3 +4,6 @@ [submodule "modules/sdk"] path = modules/sdk url = https://github.com/pfalcon/esp-open-sdk.git +[submodule "modules/nix"] + path = modules/nix + url = https://github.com/busti/nixpkgs-esp-dev diff --git a/README.md b/README.md index 0495a08..ebf56ee 100644 --- a/README.md +++ b/README.md @@ -59,4 +59,12 @@ install `docker` on your platform and buil with ```bash make firmware_docker -j$(nproc) -``` \ No newline at end of file +``` + +### Build Steps (using nixos) + +In the project root run: +``` +nix-shell --option sandbox false +make firmware -j$(nproc) +``` diff --git a/modules/nix b/modules/nix new file mode 160000 index 0000000..403461c --- /dev/null +++ b/modules/nix @@ -0,0 +1 @@ +Subproject commit 403461c810ddab0cf498b24df5b5ff92606e4154 diff --git a/shell.nix b/shell.nix new file mode 100644 index 0000000..416ba65 --- /dev/null +++ b/shell.nix @@ -0,0 +1 @@ +import ./modules/nix/shell-esp-open-rtos.nix {} From 2a55d69ac4b8612eeacbe4ca13942eab2f2ccfd4 Mon Sep 17 00:00:00 2001 From: jedi Date: Fri, 9 Jul 2021 21:42:44 +0200 Subject: [PATCH 08/30] add basic wifi with station and AP modes --- firmware/fiatlux.c | 13 +- firmware/wifi.cpp | 354 +++++++++++++++++++++++++++++++++++++++++++++ firmware/wifi.h | 2 + 3 files changed, 365 insertions(+), 4 deletions(-) diff --git a/firmware/fiatlux.c b/firmware/fiatlux.c index 1368d86..2ae2637 100644 --- a/firmware/fiatlux.c +++ b/firmware/fiatlux.c @@ -1,13 +1,15 @@ -#include -#include -#include - #include "system.h" #include "wifi.h" #include "web.h" #include "mqtt.h" #include "lux.h" +#include +#include +#include + +#include +#include void user_init(void) { @@ -17,4 +19,7 @@ void user_init(void) sdk_wifi_set_sleep_type(WIFI_SLEEP_MODEM); system_init_config(); + + xTaskCreate(wifi_task, "wifi_task", 512, NULL, 2, NULL); + } diff --git a/firmware/wifi.cpp b/firmware/wifi.cpp index da4c496..5526068 100644 --- a/firmware/wifi.cpp +++ b/firmware/wifi.cpp @@ -3,3 +3,357 @@ // #include "wifi.h" + +#include +#include +#include +#include +#include + +extern "C" { +#include +#include +#include +} + +#include +#include +#include +#include + +const char *wificfg_default_ssid = "fiatlux_%02X%02X%02X"; +const char *wificfg_default_password = "fiatlux02"; +const char *wificfg_default_hostname = "fiatlux-%02x%02x%02x"; + +char *wifi_sta_ssid = nullptr; +char *wifi_sta_password = nullptr; +char *wifi_ap_ssid = nullptr; +char *wifi_ap_password = nullptr; + + +[[noreturn]] static void dns_task(void *pvParameters) { + char *wifi_ap_ip_addr = nullptr; + sysparam_get_string("wifi_ap_ip_addr", &wifi_ap_ip_addr); + if(!wifi_ap_ip_addr) { + printf("dns: no ip address\n"); + vTaskDelete(nullptr); + } + ip4_addr_t server_addr; + server_addr.addr = ipaddr_addr(wifi_ap_ip_addr); + +#if LWIP_IPV6 + int fd = socket(AF_INET6, SOCK_DGRAM, IPPROTO_UDP); + sockaddr_in6 serv_addr; + memset(&serv_addr, '0', sizeof(serv_addr)); + serv_addr.sin6_family = AF_INET6; + serv_addr.sin6_port = htons(53); + serv_addr.sin6_flowinfo = 0; + serv_addr.sin6_addr = in6addr_any; + serv_addr.sin6_scope_id = IP6_NO_ZONE; +#else + int fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); + sockaddr_in serv_addr; + memset(&serv_addr, '0', sizeof(serv_addr)); + serv_addr.sin_family = AF_INET; + serv_addr.sin_addr.s_addr = htonl(INADDR_ANY); + serv_addr.sin_port = htons(53); +#endif + bind(fd, (sockaddr *) &serv_addr, sizeof(serv_addr)); + + const ifreq ifreq0 = {"en0"}; + const ifreq ifreq1 = {"en1"}; + setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, + sdk_wifi_get_opmode() == STATIONAP_MODE ? &ifreq1 : &ifreq0, + sizeof(ifreq0)); + + for (;;) { + uint8_t buffer[96]; + sockaddr_storage src_addr; + socklen_t src_addr_len = sizeof(src_addr); + ssize_t count = recvfrom(fd, buffer, sizeof(buffer), 0, (sockaddr *) &src_addr, &src_addr_len); + + /* Drop messages that are too large to send a response in the buffer */ + if(count > 0 && count + 16 <= (ssize_t) sizeof(buffer)) { + size_t qname_len = strlen((const char *) (buffer + 12)) + 1; + uint32_t reply_len = 2 + 10 + qname_len + 16 + 4; + + uint8_t *head = buffer + 2; + *head++ = 0x80; // Flags + *head++ = 0x00; + *head++ = 0x00; // Q count + *head++ = 0x01; + *head++ = 0x00; // A count + *head++ = 0x01; + *head++ = 0x00; // Auth count + *head++ = 0x00; + *head++ = 0x00; // Add count + *head++ = 0x00; + head += qname_len; + *head++ = 0x00; // Q type + *head++ = 0x01; + *head++ = 0x00; // Q class + *head++ = 0x01; + *head++ = 0xC0; // LBL offs + *head++ = 0x0C; + *head++ = 0x00; // Type + *head++ = 0x01; + *head++ = 0x00; // Class + *head++ = 0x01; + *head++ = 0x00; // TTL + *head++ = 0x00; + *head++ = 0x00; + *head++ = 0x78; + *head++ = 0x00; // RD len + *head++ = 0x04; + *head++ = ip4_addr1(&server_addr); + *head++ = ip4_addr2(&server_addr); + *head++ = ip4_addr3(&server_addr); + *head++ = ip4_addr4(&server_addr); + + sendto(fd, buffer, reply_len, 0, (sockaddr *) &src_addr, src_addr_len); + } + } +} + +extern "C" [[noreturn]] void wifi_task(void *pvParameters) { + (void) pvParameters; + /* Default a hostname. */ + char *hostname = nullptr; + sysparam_get_string("hostname", &hostname); + if(!hostname && wificfg_default_hostname) { + uint8_t macaddr[6]; + char name[32]; + sdk_wifi_get_macaddr(1, macaddr); + snprintf(name, sizeof(name), wificfg_default_hostname, macaddr[3], + macaddr[4], macaddr[5]); + sysparam_set_string("hostname", name); + } + if(hostname) { + free(hostname); + } + + sysparam_get_string("wifi_ap_ssid", &wifi_ap_ssid); + sysparam_get_string("wifi_ap_password", &wifi_ap_password); + sysparam_get_string("wifi_sta_ssid", &wifi_sta_ssid); + sysparam_get_string("wifi_sta_password", &wifi_sta_password); + + int8_t wifi_sta_enable = 1; + int8_t wifi_ap_enable = 1; + sysparam_get_int8("wifi_sta_enable", &wifi_sta_enable); + sysparam_get_int8("wifi_ap_enable", &wifi_ap_enable); + + if(!wifi_sta_enable) + wifi_ap_enable = 1; + + int8_t wifi_sta_disabled_restarts = 0; + sysparam_get_int8("wifi_sta_disabled_restarts", &wifi_sta_disabled_restarts); + if(wifi_sta_disabled_restarts > 0) { + wifi_sta_enable = 0; + wifi_sta_disabled_restarts--; + sysparam_set_int8("wifi_sta_disabled_restarts", wifi_sta_disabled_restarts); + } + + int8_t wifi_ap_disabled_restarts = 0; + sysparam_get_int8("wifi_ap_disabled_restarts", &wifi_ap_disabled_restarts); + if(wifi_ap_disabled_restarts > 0) { + wifi_ap_enable = 0; + wifi_ap_disabled_restarts--; + sysparam_set_int8("wifi_ap_disabled_restarts", wifi_ap_disabled_restarts); + } + + /* Validate the configuration. */ + + if(wifi_sta_enable && (!wifi_sta_ssid || !wifi_sta_password || + strlen(wifi_sta_ssid) < 1 || + strlen(wifi_sta_ssid) > 32 || + !wifi_sta_password || + strlen(wifi_sta_password) < 8 || + strlen(wifi_sta_password) >= 64)) { + wifi_sta_enable = 0; + } + + if(wifi_ap_enable) { + /* Default AP ssid and password. */ + if(!wifi_ap_ssid && wificfg_default_ssid) { + uint8_t macaddr[6]; + char ssid[32]; + sdk_wifi_get_macaddr(1, macaddr); + snprintf(ssid, sizeof(ssid), wificfg_default_ssid, macaddr[3], + macaddr[4], macaddr[5]); + sysparam_set_string("wifi_ap_ssid", ssid); + sysparam_get_string("wifi_ap_ssid", &wifi_ap_ssid); + + if(!wifi_ap_password && wificfg_default_password) { + sysparam_set_string("wifi_ap_password", wificfg_default_password); + sysparam_get_string("wifi_ap_password", &wifi_ap_password); + } + } + printf("ssid: %s\n", wifi_ap_ssid); + + /* If the ssid and password are not valid then disable the AP interface. */ + if(!wifi_ap_ssid || strlen(wifi_ap_ssid) < 1 || strlen(wifi_ap_ssid) >= 32 || + !wifi_ap_password || strlen(wifi_ap_password) < 8 || strlen(wifi_ap_password) >= 64) { + printf("len err\n"); + wifi_ap_enable = 0; + } + } + + int8_t wifi_mode = NULL_MODE; + if(wifi_sta_enable && wifi_ap_enable) + wifi_mode = STATIONAP_MODE; + else if(wifi_sta_enable) + wifi_mode = STATION_MODE; + else if(wifi_ap_enable) + wifi_mode = SOFTAP_MODE; + sdk_wifi_set_opmode(wifi_mode); + + if(wifi_sta_enable) { + printf("try STA Mode: %s %s\n", wifi_sta_ssid, wifi_sta_password); + sdk_station_config config; + strcpy((char *) config.ssid, wifi_sta_ssid); + strcpy((char *) config.password, wifi_sta_password); + config.bssid_set = 0; + + int8_t wifi_sta_dhcp = 1; + sysparam_get_int8("wifi_sta_dhcp", &wifi_sta_dhcp); + + if(!wifi_sta_dhcp) { + char *wifi_sta_ip_addr = nullptr; + char *wifi_sta_netmask = nullptr; + char *wifi_sta_gateway = nullptr; + sysparam_get_string("wifi_sta_ip_addr", &wifi_sta_ip_addr); + sysparam_get_string("wifi_sta_netmask", &wifi_sta_netmask); + sysparam_get_string("wifi_sta_gateway", &wifi_sta_gateway); + + if(wifi_sta_ip_addr && strlen(wifi_sta_ip_addr) > 4 && + wifi_sta_netmask && strlen(wifi_sta_netmask) > 4 && + wifi_sta_gateway && strlen(wifi_sta_gateway) > 4) { + sdk_wifi_station_dhcpc_stop(); + ip_info info; + memset(&info, 0x0, sizeof(info)); + info.ip.addr = ipaddr_addr(wifi_sta_ip_addr); + info.netmask.addr = ipaddr_addr(wifi_sta_netmask); + info.gw.addr = ipaddr_addr(wifi_sta_gateway); + sdk_wifi_set_ip_info(STATION_IF, &info); + } + if(wifi_sta_ip_addr) free(wifi_sta_ip_addr); + if(wifi_sta_netmask) free(wifi_sta_netmask); + if(wifi_sta_gateway) free(wifi_sta_gateway); + } + + sdk_wifi_station_set_config(&config); + } + + if(wifi_ap_enable) { + printf("try AP Mode: %s %s\n", wifi_ap_ssid, wifi_ap_password); +/* Read and validate paramenters. */ + int8_t wifi_ap_ssid_hidden = 0; + sysparam_get_int8("wifi_ap_ssid_hidden", &wifi_ap_ssid_hidden); + if(wifi_ap_ssid_hidden < 0 || wifi_ap_ssid_hidden > 1) { + wifi_ap_ssid_hidden = 1; + } + + int8_t wifi_ap_channel = 6; + sysparam_get_int8("wifi_ap_channel", &wifi_ap_channel); + +#if 0 + /* AU does not allow channels above 13, although 14 works. */ + if(wifi_ap_channel > 13) { + wifi_ap_channel = 13; + } + /* US does not allow channels above 11, although they work. */ + if (wifi_ap_channel > 11) { + wifi_ap_channel = 11; + } +#endif + if(wifi_ap_channel < 1 || wifi_ap_channel > 14) { + wifi_ap_channel = 6; + } + + int8_t wifi_ap_authmode = AUTH_WPA_WPA2_PSK; + sysparam_get_int8("wifi_ap_authmode", &wifi_ap_authmode); + if(wifi_ap_authmode != AUTH_OPEN && wifi_ap_authmode != AUTH_WPA_PSK && + wifi_ap_authmode != AUTH_WPA2_PSK && wifi_ap_authmode != AUTH_WPA_WPA2_PSK) { + wifi_ap_authmode = AUTH_WPA_WPA2_PSK; + } + + int8_t wifi_ap_max_conn = 3; + sysparam_get_int8("wifi_ap_max_conn", &wifi_ap_max_conn); + if(wifi_ap_max_conn < 1 || wifi_ap_max_conn > 8) { + wifi_ap_max_conn = 3; + } + + int32_t wifi_ap_beacon_interval = 100; + sysparam_get_int32("wifi_ap_beacon_interval", &wifi_ap_beacon_interval); + if(wifi_ap_beacon_interval < 0 || wifi_ap_beacon_interval > 1000) { + wifi_ap_beacon_interval = 100; + } + + /* Default AP IP address and netmask. */ + char *wifi_ap_ip_addr = nullptr; + sysparam_get_string("wifi_ap_ip_addr", &wifi_ap_ip_addr); + if(!wifi_ap_ip_addr) { + sysparam_set_string("wifi_ap_ip_addr", "172.16.0.1"); + sysparam_get_string("wifi_ap_ip_addr", &wifi_ap_ip_addr); + } + char *wifi_ap_netmask = nullptr; + sysparam_get_string("wifi_ap_netmask", &wifi_ap_netmask); + if(!wifi_ap_netmask) { + sysparam_set_string("wifi_ap_netmask", "255.255.0.0"); + sysparam_get_string("wifi_ap_netmask", &wifi_ap_netmask); + } + + if(strlen(wifi_ap_ip_addr) >= 7 && strlen(wifi_ap_netmask) >= 7) { + ip_info ap_ip; + ap_ip.ip.addr = ipaddr_addr(wifi_ap_ip_addr); + ap_ip.netmask.addr = ipaddr_addr(wifi_ap_netmask); + IP4_ADDR(&ap_ip.gw, 0, 0, 0, 0); + sdk_wifi_set_ip_info(1, &ap_ip); + + sdk_softap_config ap_config; + strcpy((char *) ap_config.ssid, wifi_ap_ssid); + ap_config.ssid_len = strlen(wifi_ap_ssid); + strcpy((char *) ap_config.password, wifi_ap_password); + ap_config.channel = static_cast(wifi_ap_channel); + ap_config.authmode = static_cast(wifi_ap_authmode); + ap_config.ssid_hidden = static_cast(wifi_ap_ssid_hidden); + ap_config.max_connection = static_cast(wifi_ap_max_conn); + ap_config.beacon_interval = static_cast(wifi_ap_beacon_interval); + + sdk_wifi_softap_set_config(&ap_config); + + int8_t wifi_ap_dhcp_leases = 4; + sysparam_get_int8("wifi_ap_dhcp_leases", &wifi_ap_dhcp_leases); + + if(wifi_ap_dhcp_leases) { + ip4_addr_t first_client_ip; + first_client_ip.addr = ap_ip.ip.addr + htonl(1); + + int8_t wifi_ap_dns = 1; + sysparam_get_int8("wifi_ap_dns", &wifi_ap_dns); + if(wifi_ap_dns < 0 || wifi_ap_dns > 1) + wifi_ap_dns = 1; + + dhcpserver_start(&first_client_ip, wifi_ap_dhcp_leases); + dhcpserver_set_router(&ap_ip.ip); + if(wifi_ap_dns) { + dhcpserver_set_dns(&ap_ip.ip); + xTaskCreate(dns_task, "dns_task", 384, nullptr, 2, nullptr); + } + } + } + + free(wifi_ap_ip_addr); + free(wifi_ap_netmask); + } + + if(wifi_sta_ssid) free(wifi_sta_ssid); + if(wifi_sta_password) free(wifi_sta_password); + if(wifi_ap_ssid) free(wifi_ap_ssid); + if(wifi_ap_password) free(wifi_ap_password); + + while (1) { + //monitor connection here + vTaskDelay(5000); + } +} \ No newline at end of file diff --git a/firmware/wifi.h b/firmware/wifi.h index 97c5f85..58f957c 100644 --- a/firmware/wifi.h +++ b/firmware/wifi.h @@ -9,6 +9,8 @@ extern "C" { #endif +void wifi_task(void *pvParameters); + #ifdef __cplusplus } #endif From 727dc8c2ee6b402a20a717fb541cdede7dfb246e Mon Sep 17 00:00:00 2001 From: jedi Date: Mon, 19 Jul 2021 00:18:16 +0200 Subject: [PATCH 09/30] add wifi semaphore --- firmware/fiatlux.c | 2 ++ firmware/wifi.cpp | 3 +++ firmware/wifi.h | 5 +++++ 3 files changed, 10 insertions(+) diff --git a/firmware/fiatlux.c b/firmware/fiatlux.c index 2ae2637..20249e9 100644 --- a/firmware/fiatlux.c +++ b/firmware/fiatlux.c @@ -20,6 +20,8 @@ void user_init(void) system_init_config(); + wifi_available_semaphore = xSemaphoreCreateBinary(); + xTaskCreate(wifi_task, "wifi_task", 512, NULL, 2, NULL); } diff --git a/firmware/wifi.cpp b/firmware/wifi.cpp index 5526068..aaf3e8d 100644 --- a/firmware/wifi.cpp +++ b/firmware/wifi.cpp @@ -30,6 +30,7 @@ char *wifi_sta_password = nullptr; char *wifi_ap_ssid = nullptr; char *wifi_ap_password = nullptr; +SemaphoreHandle_t wifi_available_semaphore = nullptr; [[noreturn]] static void dns_task(void *pvParameters) { char *wifi_ap_ip_addr = nullptr; @@ -352,6 +353,8 @@ extern "C" [[noreturn]] void wifi_task(void *pvParameters) { if(wifi_ap_ssid) free(wifi_ap_ssid); if(wifi_ap_password) free(wifi_ap_password); + xSemaphoreGive( wifi_available_semaphore); + while (1) { //monitor connection here vTaskDelay(5000); diff --git a/firmware/wifi.h b/firmware/wifi.h index 58f957c..9fec7da 100644 --- a/firmware/wifi.h +++ b/firmware/wifi.h @@ -5,10 +5,15 @@ #ifndef FIRMWARE_WIFI_H #define FIRMWARE_WIFI_H +#include +#include + #ifdef __cplusplus extern "C" { #endif +extern SemaphoreHandle_t wifi_available_semaphore; + void wifi_task(void *pvParameters); #ifdef __cplusplus From 3dffd0f0d21088bb8dd876b7fbbd18e8ff7aef93 Mon Sep 17 00:00:00 2001 From: jedi Date: Mon, 19 Jul 2021 03:08:36 +0200 Subject: [PATCH 10/30] update jetbrains projekt files --- firmware/.idea/.gitignore | 6 ++++++ firmware/.idea/misc.xml | 17 +++++++++++++++++ firmware/.idea/vcs.xml | 6 ++++++ firmware/.idea/watcherTasks.xml | 25 +++++++++++++++++++++++++ 4 files changed, 54 insertions(+) create mode 100644 firmware/.idea/.gitignore create mode 100644 firmware/.idea/misc.xml create mode 100644 firmware/.idea/vcs.xml create mode 100644 firmware/.idea/watcherTasks.xml diff --git a/firmware/.idea/.gitignore b/firmware/.idea/.gitignore new file mode 100644 index 0000000..8bf4d45 --- /dev/null +++ b/firmware/.idea/.gitignore @@ -0,0 +1,6 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/firmware/.idea/misc.xml b/firmware/.idea/misc.xml new file mode 100644 index 0000000..8067168 --- /dev/null +++ b/firmware/.idea/misc.xml @@ -0,0 +1,17 @@ + + + + + + + + \ No newline at end of file diff --git a/firmware/.idea/vcs.xml b/firmware/.idea/vcs.xml new file mode 100644 index 0000000..6c0b863 --- /dev/null +++ b/firmware/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/firmware/.idea/watcherTasks.xml b/firmware/.idea/watcherTasks.xml new file mode 100644 index 0000000..10c4c1c --- /dev/null +++ b/firmware/.idea/watcherTasks.xml @@ -0,0 +1,25 @@ + + + + + + + + \ No newline at end of file From 23cb4a558be5de4629a37bf41f6b3892a3d82318 Mon Sep 17 00:00:00 2001 From: jedi Date: Mon, 19 Jul 2021 01:25:27 +0200 Subject: [PATCH 11/30] Add simple static webserver --- Makefile | 2 +- firmware/.gitignore | 1 + firmware/Makefile | 6 +- firmware/fiatlux.c | 1 + firmware/fsdata/fs/404.html | 22 +++++ firmware/fsdata/fs/css/picnic.min.css | 1 + firmware/fsdata/fs/css/style.css | 62 ++++++++++++++ firmware/fsdata/fs/index.html | 15 ++++ firmware/fsdata/fs/js/smoothie_min.js | 15 ++++ firmware/fsdata/makefsdata | 114 ++++++++++++++++++++++++++ firmware/web.cpp | 34 +++++++- firmware/web.h | 2 + 12 files changed, 271 insertions(+), 4 deletions(-) create mode 100644 firmware/fsdata/fs/404.html create mode 100644 firmware/fsdata/fs/css/picnic.min.css create mode 100644 firmware/fsdata/fs/css/style.css create mode 100644 firmware/fsdata/fs/index.html create mode 100644 firmware/fsdata/fs/js/smoothie_min.js create mode 100755 firmware/fsdata/makefsdata diff --git a/Makefile b/Makefile index 00690fc..2257790 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ all: firmware case pcb firmware: - +@make -C firmware all + +@make -C firmware html all clean: +@make -C firmware clean diff --git a/firmware/.gitignore b/firmware/.gitignore index 9ac0926..c67e8c9 100644 --- a/firmware/.gitignore +++ b/firmware/.gitignore @@ -142,4 +142,5 @@ dkms.conf *.remove firmware/ +fsdata/fsdata.c compile_commands.json \ No newline at end of file diff --git a/firmware/Makefile b/firmware/Makefile index 8006a40..e7047ae 100644 --- a/firmware/Makefile +++ b/firmware/Makefile @@ -1,11 +1,11 @@ PROGRAM=fiatlux -EXTRA_CFLAGS=-O3 +EXTRA_CFLAGS=-O3 -Ifsdata #Enable debugging #EXTRA_CFLAGS+=-DLWIP_DEBUG=1 -DHTTPD_DEBUG=LWIP_DBG_ON -EXTRA_COMPONENTS=extras/i2s_dma extras/ws2812_i2s extras/dhcpserver extras/mbedtls extras/sntp extras/cpp_support +EXTRA_COMPONENTS=extras/i2s_dma extras/ws2812_i2s extras/dhcpserver extras/mbedtls extras/httpd extras/sntp extras/cpp_support LIBS = hal m @@ -24,3 +24,5 @@ unittest: systest: true + +.NOTPARALLEL: html all \ No newline at end of file diff --git a/firmware/fiatlux.c b/firmware/fiatlux.c index 20249e9..cd6d09b 100644 --- a/firmware/fiatlux.c +++ b/firmware/fiatlux.c @@ -24,4 +24,5 @@ void user_init(void) xTaskCreate(wifi_task, "wifi_task", 512, NULL, 2, NULL); + xTaskCreate(&httpd_task, "httpd_task", 512, NULL, 2, NULL); } diff --git a/firmware/fsdata/fs/404.html b/firmware/fsdata/fs/404.html new file mode 100644 index 0000000..da81a20 --- /dev/null +++ b/firmware/fsdata/fs/404.html @@ -0,0 +1,22 @@ + + + + + + + HTTP Server + + + + +
+

404 - Page not found

+
Sorry, the page you are requesting was not found on this server.
+
+ + + diff --git a/firmware/fsdata/fs/css/picnic.min.css b/firmware/fsdata/fs/css/picnic.min.css new file mode 100644 index 0000000..7daf65a --- /dev/null +++ b/firmware/fsdata/fs/css/picnic.min.css @@ -0,0 +1 @@ +html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#fff;color:#111}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:0;padding:0}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}*{box-sizing:inherit}html,body{font-family:Arial, Helvetica, sans-serif;box-sizing:border-box;height:100%}body{color:#111;font-size:1.1em;line-height:1.5;background:#fff}main{display:block}h1,h2,h3,h4,h5,h6{margin:0;padding:.6em 0}li{margin:0 0 .3em}a{color:#0074d9;text-decoration:none;box-shadow:none;transition:all 0.3s}code{padding:.3em .6em;font-size:.8em;background:#f5f5f5}pre{text-align:left;padding:.3em .6em;background:#f5f5f5;border-radius:.2em}pre code{padding:0}blockquote{padding:0 0 0 1em;margin:0 0 0 .1em;box-shadow:inset 5px 0 rgba(17,17,17,0.3)}label{cursor:pointer}[class^="icon-"]:before,[class*=" icon-"]:before{margin:0 .6em 0 0}i[class^="icon-"]:before,i[class*=" icon-"]:before{margin:0}.label,[data-tooltip]:after,button,.button,[type=submit],.dropimage{display:inline-block;text-align:center;letter-spacing:inherit;margin:0;padding:.3em .9em;vertical-align:middle;background:#0074d9;color:#fff;border:0;border-radius:.2em;width:auto;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.success.label,.success[data-tooltip]:after,button.success,.success.button,.success[type=submit],.success.dropimage{background:#2ecc40}.warning.label,.warning[data-tooltip]:after,button.warning,.warning.button,.warning[type=submit],.warning.dropimage{background:#ff851b}.error.label,.error[data-tooltip]:after,button.error,.error.button,.error[type=submit],.error.dropimage{background:#ff4136}.pseudo.label,.pseudo[data-tooltip]:after,button.pseudo,.pseudo.button,.pseudo[type=submit],.pseudo.dropimage{background-color:transparent;color:inherit}.label,[data-tooltip]:after{font-size:.6em;padding:.4em .6em;margin-left:1em;line-height:1}button,.button,[type=submit],.dropimage{margin:.3em 0;cursor:pointer;transition:all 0.3s;border-radius:.2em;height:auto;vertical-align:baseline;box-shadow:0 0 rgba(17,17,17,0) inset}button:hover,.button:hover,:hover[type=submit],.dropimage:hover,button:focus,.button:focus,:focus[type=submit],.dropimage:focus{box-shadow:inset 0 0 0 99em rgba(255,255,255,0.2);border:0}button.pseudo:hover,.pseudo.button:hover,.pseudo:hover[type=submit],.pseudo.dropimage:hover,button.pseudo:focus,.pseudo.button:focus,.pseudo:focus[type=submit],.pseudo.dropimage:focus{box-shadow:inset 0 0 0 99em rgba(17,17,17,0.1)}button.active,.active.button,.active[type=submit],.active.dropimage,button:active,.button:active,:active[type=submit],.dropimage:active,button.pseudo:active,.pseudo.button:active,.pseudo:active[type=submit],.pseudo.dropimage:active{box-shadow:inset 0 0 0 99em rgba(17,17,17,0.2)}button[disabled],.button[disabled],[disabled][type=submit],.dropimage[disabled]{cursor:default;box-shadow:none;background:#aaa}:checked+.toggle,:checked+.toggle:hover{box-shadow:inset 0 0 0 99em rgba(17,17,17,0.2)}[type]+.toggle{padding:.3em .9em;margin-right:0}[type]+.toggle:after,[type]+.toggle:before{display:none}input,textarea,.select select{line-height:1.5;margin:0;height:2.1em;padding:.3em .6em;border:1px solid #aaa;background-color:#fff;border-radius:.2em;transition:all 0.3s;width:100%}input:focus,textarea:focus,.select select:focus{border:1px solid #0074d9;outline:0}textarea{height:auto}[type=file],[type=color]{cursor:pointer}[type=file]{height:auto}select{background:#fff url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyIiBoZWlnaHQ9IjMiPjxwYXRoIGQ9Im0gMCwxIDEsMiAxLC0yIHoiLz48L3N2Zz4=) no-repeat scroll 95% center/10px 15px;background-position:calc(100% - 15px) center;border:1px solid #aaa;border-radius:.2em;cursor:pointer;width:100%;height:2.2em;box-sizing:border-box;padding:.3em .45em;transition:all 0.3s;-moz-appearance:none;-webkit-appearance:none;appearance:none}select::-ms-expand{display:none}select:focus,select:active{border:1px solid #0074d9;transition:outline 0s}select:-moz-focusring{color:transparent;text-shadow:0 0 0 #111}select option{font-size:inherit;padding:.45em}select[multiple]{height:auto;background:none;padding:0}[type=radio],[type=checkbox]{opacity:0;width:0;position:absolute;display:inline-block}[type=radio]+.checkable:hover:before,[type=checkbox]+.checkable:hover:before,:focus[type=radio]+.checkable:before,:focus[type=checkbox]+.checkable:before{border:1px solid #0074d9}[type=radio]+.checkable,[type=checkbox]+.checkable{position:relative;cursor:pointer;padding-left:1.5em;margin-right:.6em}[type=radio]+.checkable:before,[type=checkbox]+.checkable:before,[type=radio]+.checkable:after,[type=checkbox]+.checkable:after{content:'';position:absolute;display:inline-block;left:0;top:50%;transform:translateY(-50%);font-size:1em;line-height:1em;color:transparent;font-family:sans;text-align:center;box-sizing:border-box;width:1em;height:1em;border-radius:50%;transition:all 0.3s}[type=radio]+.checkable:before,[type=checkbox]+.checkable:before{border:1px solid #aaa}:checked[type=radio]+.checkable:after,:checked[type=checkbox]+.checkable:after{background:#111;transform:scale(0.5) translateY(-100%)}[type=checkbox]+.checkable:before{border-radius:.2em}[type=checkbox]+.checkable:after{content:"✔";background:none;transform:scale(2) translateY(-25%);visibility:hidden;opacity:0}:checked[type=checkbox]+.checkable:after{color:#111;background:none;transform:translateY(-50%);transition:all 0.3s;visibility:visible;opacity:1}table{text-align:left}td,th{padding:.3em 2.4em .3em .6em}th{text-align:left;font-weight:900;color:#fff;background-color:#0074d9}.success th{background-color:#2ecc40}.warning th{background-color:#ff851b}.error th{background-color:#ff4136}.dull th{background-color:#aaa}tr:nth-child(even){background:rgba(17,17,17,0.05)}.flex{display:-ms-flexbox;display:flex;margin-left:-.6em;width:calc(100% + .6em);flex-wrap:wrap;transition:all .3s ease}.flex>*{box-sizing:border-box;flex:1 1 auto;padding-left:.6em;padding-bottom:.6em}.flex[class*="one"]>*,.flex[class*="two"]>*,.flex[class*="three"]>*,.flex[class*="four"]>*,.flex[class*="five"]>*,.flex[class*="six"]>*,.flex[class*="seven"]>*,.flex[class*="eight"]>*,.flex[class*="nine"]>*,.flex[class*="ten"]>*,.flex[class*="eleven"]>*,.flex[class*="twelve"]>*{flex-grow:0}.flex.grow>*{flex-grow:1}.center{justify-content:center}.one>*{width:100%}.two>*{width:50%}.three>*{width:33.33333%}.four>*{width:25%}.five>*{width:20%}.six>*{width:16.66666%}.seven>*{width:14.28571%}.eight>*{width:12.5%}.nine>*{width:11.11111%}.ten>*{width:10%}.eleven>*{width:9.09091%}.twelve>*{width:8.33333%}@media all and (min-width: 500px){.one-500>*{width:100%}.two-500>*{width:50%}.three-500>*{width:33.33333%}.four-500>*{width:25%}.five-500>*{width:20%}.six-500>*{width:16.66666%}.seven-500>*{width:14.28571%}.eight-500>*{width:12.5%}.nine-500>*{width:11.11111%}.ten-500>*{width:10%}.eleven-500>*{width:9.09091%}.twelve-500>*{width:8.33333%}}@media all and (min-width: 600px){.one-600>*{width:100%}.two-600>*{width:50%}.three-600>*{width:33.33333%}.four-600>*{width:25%}.five-600>*{width:20%}.six-600>*{width:16.66666%}.seven-600>*{width:14.28571%}.eight-600>*{width:12.5%}.nine-600>*{width:11.11111%}.ten-600>*{width:10%}.eleven-600>*{width:9.09091%}.twelve-600>*{width:8.33333%}}@media all and (min-width: 700px){.one-700>*{width:100%}.two-700>*{width:50%}.three-700>*{width:33.33333%}.four-700>*{width:25%}.five-700>*{width:20%}.six-700>*{width:16.66666%}.seven-700>*{width:14.28571%}.eight-700>*{width:12.5%}.nine-700>*{width:11.11111%}.ten-700>*{width:10%}.eleven-700>*{width:9.09091%}.twelve-700>*{width:8.33333%}}@media all and (min-width: 800px){.one-800>*{width:100%}.two-800>*{width:50%}.three-800>*{width:33.33333%}.four-800>*{width:25%}.five-800>*{width:20%}.six-800>*{width:16.66666%}.seven-800>*{width:14.28571%}.eight-800>*{width:12.5%}.nine-800>*{width:11.11111%}.ten-800>*{width:10%}.eleven-800>*{width:9.09091%}.twelve-800>*{width:8.33333%}}@media all and (min-width: 900px){.one-900>*{width:100%}.two-900>*{width:50%}.three-900>*{width:33.33333%}.four-900>*{width:25%}.five-900>*{width:20%}.six-900>*{width:16.66666%}.seven-900>*{width:14.28571%}.eight-900>*{width:12.5%}.nine-900>*{width:11.11111%}.ten-900>*{width:10%}.eleven-900>*{width:9.09091%}.twelve-900>*{width:8.33333%}}@media all and (min-width: 1000px){.one-1000>*{width:100%}.two-1000>*{width:50%}.three-1000>*{width:33.33333%}.four-1000>*{width:25%}.five-1000>*{width:20%}.six-1000>*{width:16.66666%}.seven-1000>*{width:14.28571%}.eight-1000>*{width:12.5%}.nine-1000>*{width:11.11111%}.ten-1000>*{width:10%}.eleven-1000>*{width:9.09091%}.twelve-1000>*{width:8.33333%}}@media all and (min-width: 1100px){.one-1100>*{width:100%}.two-1100>*{width:50%}.three-1100>*{width:33.33333%}.four-1100>*{width:25%}.five-1100>*{width:20%}.six-1100>*{width:16.66666%}.seven-1100>*{width:14.28571%}.eight-1100>*{width:12.5%}.nine-1100>*{width:11.11111%}.ten-1100>*{width:10%}.eleven-1100>*{width:9.09091%}.twelve-1100>*{width:8.33333%}}@media all and (min-width: 1200px){.one-1200>*{width:100%}.two-1200>*{width:50%}.three-1200>*{width:33.33333%}.four-1200>*{width:25%}.five-1200>*{width:20%}.six-1200>*{width:16.66666%}.seven-1200>*{width:14.28571%}.eight-1200>*{width:12.5%}.nine-1200>*{width:11.11111%}.ten-1200>*{width:10%}.eleven-1200>*{width:9.09091%}.twelve-1200>*{width:8.33333%}}@media all and (min-width: 1300px){.one-1300>*{width:100%}.two-1300>*{width:50%}.three-1300>*{width:33.33333%}.four-1300>*{width:25%}.five-1300>*{width:20%}.six-1300>*{width:16.66666%}.seven-1300>*{width:14.28571%}.eight-1300>*{width:12.5%}.nine-1300>*{width:11.11111%}.ten-1300>*{width:10%}.eleven-1300>*{width:9.09091%}.twelve-1300>*{width:8.33333%}}@media all and (min-width: 1400px){.one-1400>*{width:100%}.two-1400>*{width:50%}.three-1400>*{width:33.33333%}.four-1400>*{width:25%}.five-1400>*{width:20%}.six-1400>*{width:16.66666%}.seven-1400>*{width:14.28571%}.eight-1400>*{width:12.5%}.nine-1400>*{width:11.11111%}.ten-1400>*{width:10%}.eleven-1400>*{width:9.09091%}.twelve-1400>*{width:8.33333%}}@media all and (min-width: 1500px){.one-1500>*{width:100%}.two-1500>*{width:50%}.three-1500>*{width:33.33333%}.four-1500>*{width:25%}.five-1500>*{width:20%}.six-1500>*{width:16.66666%}.seven-1500>*{width:14.28571%}.eight-1500>*{width:12.5%}.nine-1500>*{width:11.11111%}.ten-1500>*{width:10%}.eleven-1500>*{width:9.09091%}.twelve-1500>*{width:8.33333%}}@media all and (min-width: 1600px){.one-1600>*{width:100%}.two-1600>*{width:50%}.three-1600>*{width:33.33333%}.four-1600>*{width:25%}.five-1600>*{width:20%}.six-1600>*{width:16.66666%}.seven-1600>*{width:14.28571%}.eight-1600>*{width:12.5%}.nine-1600>*{width:11.11111%}.ten-1600>*{width:10%}.eleven-1600>*{width:9.09091%}.twelve-1600>*{width:8.33333%}}@media all and (min-width: 1700px){.one-1700>*{width:100%}.two-1700>*{width:50%}.three-1700>*{width:33.33333%}.four-1700>*{width:25%}.five-1700>*{width:20%}.six-1700>*{width:16.66666%}.seven-1700>*{width:14.28571%}.eight-1700>*{width:12.5%}.nine-1700>*{width:11.11111%}.ten-1700>*{width:10%}.eleven-1700>*{width:9.09091%}.twelve-1700>*{width:8.33333%}}@media all and (min-width: 1800px){.one-1800>*{width:100%}.two-1800>*{width:50%}.three-1800>*{width:33.33333%}.four-1800>*{width:25%}.five-1800>*{width:20%}.six-1800>*{width:16.66666%}.seven-1800>*{width:14.28571%}.eight-1800>*{width:12.5%}.nine-1800>*{width:11.11111%}.ten-1800>*{width:10%}.eleven-1800>*{width:9.09091%}.twelve-1800>*{width:8.33333%}}@media all and (min-width: 1900px){.one-1900>*{width:100%}.two-1900>*{width:50%}.three-1900>*{width:33.33333%}.four-1900>*{width:25%}.five-1900>*{width:20%}.six-1900>*{width:16.66666%}.seven-1900>*{width:14.28571%}.eight-1900>*{width:12.5%}.nine-1900>*{width:11.11111%}.ten-1900>*{width:10%}.eleven-1900>*{width:9.09091%}.twelve-1900>*{width:8.33333%}}@media all and (min-width: 2000px){.one-2000>*{width:100%}.two-2000>*{width:50%}.three-2000>*{width:33.33333%}.four-2000>*{width:25%}.five-2000>*{width:20%}.six-2000>*{width:16.66666%}.seven-2000>*{width:14.28571%}.eight-2000>*{width:12.5%}.nine-2000>*{width:11.11111%}.ten-2000>*{width:10%}.eleven-2000>*{width:9.09091%}.twelve-2000>*{width:8.33333%}}.full{width:100%}.half{width:50%}.third{width:33.33333%}.two-third{width:66.66666%}.fourth{width:25%}.three-fourth{width:75%}.fifth{width:20%}.two-fifth{width:40%}.three-fifth{width:60%}.four-fifth{width:80%}.sixth{width:16.66666%}.none{display:none}@media all and (min-width: 500px){.full-500{width:100%;display:block}.half-500{width:50%;display:block}.third-500{width:33.33333%;display:block}.two-third-500{width:66.66666%;display:block}.fourth-500{width:25%;display:block}.three-fourth-500{width:75%;display:block}.fifth-500{width:20%;display:block}.two-fifth-500{width:40%;display:block}.three-fifth-500{width:60%;display:block}.four-fifth-500{width:80%;display:block}.sixth-500{width:16.66666%;display:block}}@media all and (min-width: 600px){.full-600{width:100%;display:block}.half-600{width:50%;display:block}.third-600{width:33.33333%;display:block}.two-third-600{width:66.66666%;display:block}.fourth-600{width:25%;display:block}.three-fourth-600{width:75%;display:block}.fifth-600{width:20%;display:block}.two-fifth-600{width:40%;display:block}.three-fifth-600{width:60%;display:block}.four-fifth-600{width:80%;display:block}.sixth-600{width:16.66666%;display:block}}@media all and (min-width: 700px){.full-700{width:100%;display:block}.half-700{width:50%;display:block}.third-700{width:33.33333%;display:block}.two-third-700{width:66.66666%;display:block}.fourth-700{width:25%;display:block}.three-fourth-700{width:75%;display:block}.fifth-700{width:20%;display:block}.two-fifth-700{width:40%;display:block}.three-fifth-700{width:60%;display:block}.four-fifth-700{width:80%;display:block}.sixth-700{width:16.66666%;display:block}}@media all and (min-width: 800px){.full-800{width:100%;display:block}.half-800{width:50%;display:block}.third-800{width:33.33333%;display:block}.two-third-800{width:66.66666%;display:block}.fourth-800{width:25%;display:block}.three-fourth-800{width:75%;display:block}.fifth-800{width:20%;display:block}.two-fifth-800{width:40%;display:block}.three-fifth-800{width:60%;display:block}.four-fifth-800{width:80%;display:block}.sixth-800{width:16.66666%;display:block}}@media all and (min-width: 900px){.full-900{width:100%;display:block}.half-900{width:50%;display:block}.third-900{width:33.33333%;display:block}.two-third-900{width:66.66666%;display:block}.fourth-900{width:25%;display:block}.three-fourth-900{width:75%;display:block}.fifth-900{width:20%;display:block}.two-fifth-900{width:40%;display:block}.three-fifth-900{width:60%;display:block}.four-fifth-900{width:80%;display:block}.sixth-900{width:16.66666%;display:block}}@media all and (min-width: 1000px){.full-1000{width:100%;display:block}.half-1000{width:50%;display:block}.third-1000{width:33.33333%;display:block}.two-third-1000{width:66.66666%;display:block}.fourth-1000{width:25%;display:block}.three-fourth-1000{width:75%;display:block}.fifth-1000{width:20%;display:block}.two-fifth-1000{width:40%;display:block}.three-fifth-1000{width:60%;display:block}.four-fifth-1000{width:80%;display:block}.sixth-1000{width:16.66666%;display:block}}@media all and (min-width: 1100px){.full-1100{width:100%;display:block}.half-1100{width:50%;display:block}.third-1100{width:33.33333%;display:block}.two-third-1100{width:66.66666%;display:block}.fourth-1100{width:25%;display:block}.three-fourth-1100{width:75%;display:block}.fifth-1100{width:20%;display:block}.two-fifth-1100{width:40%;display:block}.three-fifth-1100{width:60%;display:block}.four-fifth-1100{width:80%;display:block}.sixth-1100{width:16.66666%;display:block}}@media all and (min-width: 1200px){.full-1200{width:100%;display:block}.half-1200{width:50%;display:block}.third-1200{width:33.33333%;display:block}.two-third-1200{width:66.66666%;display:block}.fourth-1200{width:25%;display:block}.three-fourth-1200{width:75%;display:block}.fifth-1200{width:20%;display:block}.two-fifth-1200{width:40%;display:block}.three-fifth-1200{width:60%;display:block}.four-fifth-1200{width:80%;display:block}.sixth-1200{width:16.66666%;display:block}}@media all and (min-width: 1300px){.full-1300{width:100%;display:block}.half-1300{width:50%;display:block}.third-1300{width:33.33333%;display:block}.two-third-1300{width:66.66666%;display:block}.fourth-1300{width:25%;display:block}.three-fourth-1300{width:75%;display:block}.fifth-1300{width:20%;display:block}.two-fifth-1300{width:40%;display:block}.three-fifth-1300{width:60%;display:block}.four-fifth-1300{width:80%;display:block}.sixth-1300{width:16.66666%;display:block}}@media all and (min-width: 1400px){.full-1400{width:100%;display:block}.half-1400{width:50%;display:block}.third-1400{width:33.33333%;display:block}.two-third-1400{width:66.66666%;display:block}.fourth-1400{width:25%;display:block}.three-fourth-1400{width:75%;display:block}.fifth-1400{width:20%;display:block}.two-fifth-1400{width:40%;display:block}.three-fifth-1400{width:60%;display:block}.four-fifth-1400{width:80%;display:block}.sixth-1400{width:16.66666%;display:block}}@media all and (min-width: 1500px){.full-1500{width:100%;display:block}.half-1500{width:50%;display:block}.third-1500{width:33.33333%;display:block}.two-third-1500{width:66.66666%;display:block}.fourth-1500{width:25%;display:block}.three-fourth-1500{width:75%;display:block}.fifth-1500{width:20%;display:block}.two-fifth-1500{width:40%;display:block}.three-fifth-1500{width:60%;display:block}.four-fifth-1500{width:80%;display:block}.sixth-1500{width:16.66666%;display:block}}@media all and (min-width: 1600px){.full-1600{width:100%;display:block}.half-1600{width:50%;display:block}.third-1600{width:33.33333%;display:block}.two-third-1600{width:66.66666%;display:block}.fourth-1600{width:25%;display:block}.three-fourth-1600{width:75%;display:block}.fifth-1600{width:20%;display:block}.two-fifth-1600{width:40%;display:block}.three-fifth-1600{width:60%;display:block}.four-fifth-1600{width:80%;display:block}.sixth-1600{width:16.66666%;display:block}}@media all and (min-width: 1700px){.full-1700{width:100%;display:block}.half-1700{width:50%;display:block}.third-1700{width:33.33333%;display:block}.two-third-1700{width:66.66666%;display:block}.fourth-1700{width:25%;display:block}.three-fourth-1700{width:75%;display:block}.fifth-1700{width:20%;display:block}.two-fifth-1700{width:40%;display:block}.three-fifth-1700{width:60%;display:block}.four-fifth-1700{width:80%;display:block}.sixth-1700{width:16.66666%;display:block}}@media all and (min-width: 1800px){.full-1800{width:100%;display:block}.half-1800{width:50%;display:block}.third-1800{width:33.33333%;display:block}.two-third-1800{width:66.66666%;display:block}.fourth-1800{width:25%;display:block}.three-fourth-1800{width:75%;display:block}.fifth-1800{width:20%;display:block}.two-fifth-1800{width:40%;display:block}.three-fifth-1800{width:60%;display:block}.four-fifth-1800{width:80%;display:block}.sixth-1800{width:16.66666%;display:block}}@media all and (min-width: 1900px){.full-1900{width:100%;display:block}.half-1900{width:50%;display:block}.third-1900{width:33.33333%;display:block}.two-third-1900{width:66.66666%;display:block}.fourth-1900{width:25%;display:block}.three-fourth-1900{width:75%;display:block}.fifth-1900{width:20%;display:block}.two-fifth-1900{width:40%;display:block}.three-fifth-1900{width:60%;display:block}.four-fifth-1900{width:80%;display:block}.sixth-1900{width:16.66666%;display:block}}@media all and (min-width: 2000px){.full-2000{width:100%;display:block}.half-2000{width:50%;display:block}.third-2000{width:33.33333%;display:block}.two-third-2000{width:66.66666%;display:block}.fourth-2000{width:25%;display:block}.three-fourth-2000{width:75%;display:block}.fifth-2000{width:20%;display:block}.two-fifth-2000{width:40%;display:block}.three-fifth-2000{width:60%;display:block}.four-fifth-2000{width:80%;display:block}.sixth-2000{width:16.66666%;display:block}}@media all and (min-width: 500px){.none-500{display:none}}@media all and (min-width: 600px){.none-600{display:none}}@media all and (min-width: 700px){.none-700{display:none}}@media all and (min-width: 800px){.none-800{display:none}}@media all and (min-width: 900px){.none-900{display:none}}@media all and (min-width: 1000px){.none-1000{display:none}}@media all and (min-width: 1100px){.none-1100{display:none}}@media all and (min-width: 1200px){.none-1200{display:none}}@media all and (min-width: 1300px){.none-1300{display:none}}@media all and (min-width: 1400px){.none-1400{display:none}}@media all and (min-width: 1500px){.none-1500{display:none}}@media all and (min-width: 1600px){.none-1600{display:none}}@media all and (min-width: 1700px){.none-1700{display:none}}@media all and (min-width: 1800px){.none-1800{display:none}}@media all and (min-width: 1900px){.none-1900{display:none}}@media all and (min-width: 2000px){.none-2000{display:none}}.off-none{margin-left:0}.off-half{margin-left:50%}.off-third{margin-left:33.33333%}.off-two-third{margin-left:66.66666%}.off-fourth{margin-left:25%}.off-three-fourth{margin-left:75%}.off-fifth{margin-left:20%}.off-two-fifth{margin-left:40%}.off-three-fifth{margin-left:60%}.off-four-fifth{margin-left:80%}.off-sixth{margin-left:16.66666%}@media all and (min-width: 500px){.off-none-500{margin-left:0}.off-half-500{margin-left:50%}.off-third-500{margin-left:33.33333%}.off-two-third-500{margin-left:66.66666%}.off-fourth-500{margin-left:25%}.off-three-fourth-500{margin-left:75%}.off-fifth-500{margin-left:20%}.off-two-fifth-500{margin-left:40%}.off-three-fifth-500{margin-left:60%}.off-four-fifth-500{margin-left:80%}.off-sixth-500{margin-left:16.66666%}}@media all and (min-width: 600px){.off-none-600{margin-left:0}.off-half-600{margin-left:50%}.off-third-600{margin-left:33.33333%}.off-two-third-600{margin-left:66.66666%}.off-fourth-600{margin-left:25%}.off-three-fourth-600{margin-left:75%}.off-fifth-600{margin-left:20%}.off-two-fifth-600{margin-left:40%}.off-three-fifth-600{margin-left:60%}.off-four-fifth-600{margin-left:80%}.off-sixth-600{margin-left:16.66666%}}@media all and (min-width: 700px){.off-none-700{margin-left:0}.off-half-700{margin-left:50%}.off-third-700{margin-left:33.33333%}.off-two-third-700{margin-left:66.66666%}.off-fourth-700{margin-left:25%}.off-three-fourth-700{margin-left:75%}.off-fifth-700{margin-left:20%}.off-two-fifth-700{margin-left:40%}.off-three-fifth-700{margin-left:60%}.off-four-fifth-700{margin-left:80%}.off-sixth-700{margin-left:16.66666%}}@media all and (min-width: 800px){.off-none-800{margin-left:0}.off-half-800{margin-left:50%}.off-third-800{margin-left:33.33333%}.off-two-third-800{margin-left:66.66666%}.off-fourth-800{margin-left:25%}.off-three-fourth-800{margin-left:75%}.off-fifth-800{margin-left:20%}.off-two-fifth-800{margin-left:40%}.off-three-fifth-800{margin-left:60%}.off-four-fifth-800{margin-left:80%}.off-sixth-800{margin-left:16.66666%}}@media all and (min-width: 900px){.off-none-900{margin-left:0}.off-half-900{margin-left:50%}.off-third-900{margin-left:33.33333%}.off-two-third-900{margin-left:66.66666%}.off-fourth-900{margin-left:25%}.off-three-fourth-900{margin-left:75%}.off-fifth-900{margin-left:20%}.off-two-fifth-900{margin-left:40%}.off-three-fifth-900{margin-left:60%}.off-four-fifth-900{margin-left:80%}.off-sixth-900{margin-left:16.66666%}}@media all and (min-width: 1000px){.off-none-1000{margin-left:0}.off-half-1000{margin-left:50%}.off-third-1000{margin-left:33.33333%}.off-two-third-1000{margin-left:66.66666%}.off-fourth-1000{margin-left:25%}.off-three-fourth-1000{margin-left:75%}.off-fifth-1000{margin-left:20%}.off-two-fifth-1000{margin-left:40%}.off-three-fifth-1000{margin-left:60%}.off-four-fifth-1000{margin-left:80%}.off-sixth-1000{margin-left:16.66666%}}@media all and (min-width: 1100px){.off-none-1100{margin-left:0}.off-half-1100{margin-left:50%}.off-third-1100{margin-left:33.33333%}.off-two-third-1100{margin-left:66.66666%}.off-fourth-1100{margin-left:25%}.off-three-fourth-1100{margin-left:75%}.off-fifth-1100{margin-left:20%}.off-two-fifth-1100{margin-left:40%}.off-three-fifth-1100{margin-left:60%}.off-four-fifth-1100{margin-left:80%}.off-sixth-1100{margin-left:16.66666%}}@media all and (min-width: 1200px){.off-none-1200{margin-left:0}.off-half-1200{margin-left:50%}.off-third-1200{margin-left:33.33333%}.off-two-third-1200{margin-left:66.66666%}.off-fourth-1200{margin-left:25%}.off-three-fourth-1200{margin-left:75%}.off-fifth-1200{margin-left:20%}.off-two-fifth-1200{margin-left:40%}.off-three-fifth-1200{margin-left:60%}.off-four-fifth-1200{margin-left:80%}.off-sixth-1200{margin-left:16.66666%}}@media all and (min-width: 1300px){.off-none-1300{margin-left:0}.off-half-1300{margin-left:50%}.off-third-1300{margin-left:33.33333%}.off-two-third-1300{margin-left:66.66666%}.off-fourth-1300{margin-left:25%}.off-three-fourth-1300{margin-left:75%}.off-fifth-1300{margin-left:20%}.off-two-fifth-1300{margin-left:40%}.off-three-fifth-1300{margin-left:60%}.off-four-fifth-1300{margin-left:80%}.off-sixth-1300{margin-left:16.66666%}}@media all and (min-width: 1400px){.off-none-1400{margin-left:0}.off-half-1400{margin-left:50%}.off-third-1400{margin-left:33.33333%}.off-two-third-1400{margin-left:66.66666%}.off-fourth-1400{margin-left:25%}.off-three-fourth-1400{margin-left:75%}.off-fifth-1400{margin-left:20%}.off-two-fifth-1400{margin-left:40%}.off-three-fifth-1400{margin-left:60%}.off-four-fifth-1400{margin-left:80%}.off-sixth-1400{margin-left:16.66666%}}@media all and (min-width: 1500px){.off-none-1500{margin-left:0}.off-half-1500{margin-left:50%}.off-third-1500{margin-left:33.33333%}.off-two-third-1500{margin-left:66.66666%}.off-fourth-1500{margin-left:25%}.off-three-fourth-1500{margin-left:75%}.off-fifth-1500{margin-left:20%}.off-two-fifth-1500{margin-left:40%}.off-three-fifth-1500{margin-left:60%}.off-four-fifth-1500{margin-left:80%}.off-sixth-1500{margin-left:16.66666%}}@media all and (min-width: 1600px){.off-none-1600{margin-left:0}.off-half-1600{margin-left:50%}.off-third-1600{margin-left:33.33333%}.off-two-third-1600{margin-left:66.66666%}.off-fourth-1600{margin-left:25%}.off-three-fourth-1600{margin-left:75%}.off-fifth-1600{margin-left:20%}.off-two-fifth-1600{margin-left:40%}.off-three-fifth-1600{margin-left:60%}.off-four-fifth-1600{margin-left:80%}.off-sixth-1600{margin-left:16.66666%}}@media all and (min-width: 1700px){.off-none-1700{margin-left:0}.off-half-1700{margin-left:50%}.off-third-1700{margin-left:33.33333%}.off-two-third-1700{margin-left:66.66666%}.off-fourth-1700{margin-left:25%}.off-three-fourth-1700{margin-left:75%}.off-fifth-1700{margin-left:20%}.off-two-fifth-1700{margin-left:40%}.off-three-fifth-1700{margin-left:60%}.off-four-fifth-1700{margin-left:80%}.off-sixth-1700{margin-left:16.66666%}}@media all and (min-width: 1800px){.off-none-1800{margin-left:0}.off-half-1800{margin-left:50%}.off-third-1800{margin-left:33.33333%}.off-two-third-1800{margin-left:66.66666%}.off-fourth-1800{margin-left:25%}.off-three-fourth-1800{margin-left:75%}.off-fifth-1800{margin-left:20%}.off-two-fifth-1800{margin-left:40%}.off-three-fifth-1800{margin-left:60%}.off-four-fifth-1800{margin-left:80%}.off-sixth-1800{margin-left:16.66666%}}@media all and (min-width: 1900px){.off-none-1900{margin-left:0}.off-half-1900{margin-left:50%}.off-third-1900{margin-left:33.33333%}.off-two-third-1900{margin-left:66.66666%}.off-fourth-1900{margin-left:25%}.off-three-fourth-1900{margin-left:75%}.off-fifth-1900{margin-left:20%}.off-two-fifth-1900{margin-left:40%}.off-three-fifth-1900{margin-left:60%}.off-four-fifth-1900{margin-left:80%}.off-sixth-1900{margin-left:16.66666%}}@media all and (min-width: 2000px){.off-none-2000{margin-left:0}.off-half-2000{margin-left:50%}.off-third-2000{margin-left:33.33333%}.off-two-third-2000{margin-left:66.66666%}.off-fourth-2000{margin-left:25%}.off-three-fourth-2000{margin-left:75%}.off-fifth-2000{margin-left:20%}.off-two-fifth-2000{margin-left:40%}.off-three-fifth-2000{margin-left:60%}.off-four-fifth-2000{margin-left:80%}.off-sixth-2000{margin-left:16.66666%}}nav{position:fixed;top:0;left:0;right:0;height:3em;padding:0 .6em;background:#fff;box-shadow:0 0 0.2em rgba(170,170,170,0.2);z-index:10000;transition:all .3s;transform-style:preserve-3d}nav .brand,nav .menu,nav .burger{float:right;position:relative;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}nav .brand{font-weight:700;float:left;padding:0 .6em;max-width:50%;white-space:nowrap;color:inherit}nav .brand *{vertical-align:middle}nav .logo{height:2em;margin-right:.3em}nav .select::after{height:calc(100% - 1px);padding:0;line-height:2.4em}nav .menu>*{margin-right:.6em}nav .burger{display:none}@media all and (max-width: 60em){nav .burger{display:inline-block;cursor:pointer;bottom:-1000em;margin:0;-webkit-tap-highlight-color:transparent}nav .burger ~ .menu,nav .show:checked ~ .burger{position:fixed;min-height:100%;top:0;right:0;bottom:-1000em;margin:0;background:#fff;transition:all .5s ease;transform:none}nav .burger ~ .menu{z-index:11}nav .show:checked ~ .burger{color:transparent;width:100%;border-radius:0;background:rgba(17,17,17,0.2);transition:all .5s ease}nav .show ~ .menu{width:70%;max-width:300px;transform-origin:center right;transition:all .25s ease;transform:scaleX(0)}nav .show ~ .menu>*{transform:translateX(100%);transition:all 0s ease .5s}nav .show:checked ~ .menu>*:nth-child(1){transition:all .5s cubic-bezier(0.645, 0.045, 0.355, 1) 0s}nav .show:checked ~ .menu>*:nth-child(2){transition:all .5s cubic-bezier(0.645, 0.045, 0.355, 1) .1s}nav .show:checked ~ .menu>*:nth-child(3){transition:all .5s cubic-bezier(0.645, 0.045, 0.355, 1) .2s}nav .show:checked ~ .menu>*:nth-child(4){transition:all .5s cubic-bezier(0.645, 0.045, 0.355, 1) .3s}nav .show:checked ~ .menu>*:nth-child(5){transition:all .5s cubic-bezier(0.645, 0.045, 0.355, 1) .4s}nav .show:checked ~ .menu>*:nth-child(6){transition:all .5s cubic-bezier(0.645, 0.045, 0.355, 1) .5s}nav .show:checked ~ .menu{transform:scaleX(1)}nav .show:checked ~ .menu>*{transform:translateX(0);transition:all .5s ease-in-out .6s}nav .burger ~ .menu>*{display:block;margin:.3em;text-align:left;max-width:calc(100% - .6em)}nav .burger ~ .menu>a{padding:.3em .9em}}.stack,.stack .toggle{margin-top:0;margin-bottom:0;display:block;width:100%;text-align:left;border-radius:0}.stack:first-child,.stack:first-child .toggle{border-top-left-radius:.2em;border-top-right-radius:.2em}.stack:last-child,.stack:last-child .toggle{border-bottom-left-radius:.2em;border-bottom-right-radius:.2em}input.stack,textarea.stack,select.stack{transition:border-bottom 0 ease 0;border-bottom-width:0}input.stack:last-child,textarea.stack:last-child,select.stack:last-child{border-bottom-width:1px}input.stack:focus+input,input.stack:focus+textarea,input.stack:focus+select,textarea.stack:focus+input,textarea.stack:focus+textarea,textarea.stack:focus+select,select.stack:focus+input,select.stack:focus+textarea,select.stack:focus+select{border-top-color:#0074d9}.card,.modal .overlay ~ *{position:relative;box-shadow:none;border-radius:.2em;border:1px solid #aaa;overflow:hidden;text-align:left;background:#fff;margin-bottom:.6em;padding:0;transition:all .3s ease}.hidden.card,.modal .overlay ~ .hidden,:checked+.card,.modal .overlay ~ :checked+*,.modal .overlay:checked+*{font-size:0;padding:0;margin:0;border:0}.card>*,.modal .overlay ~ *>*{max-width:100%;display:block}.card>*:last-child,.modal .overlay ~ *>*:last-child{margin-bottom:0}.card header,.modal .overlay ~ * header,.card section,.modal .overlay ~ * section,.card>p,.modal .overlay ~ *>p{padding:.6em .8em}.card section,.modal .overlay ~ * section{padding:.6em .8em 0}.card hr,.modal .overlay ~ * hr{border:none;height:1px;background-color:#aaa}.card header,.modal .overlay ~ * header{font-weight:bold;position:relative;border-bottom:1px solid #aaa}.card header h1,.modal .overlay ~ * header h1,.card header h2,.modal .overlay ~ * header h2,.card header h3,.modal .overlay ~ * header h3,.card header h4,.modal .overlay ~ * header h4,.card header h5,.modal .overlay ~ * header h5,.card header h6,.modal .overlay ~ * header h6{padding:0;margin:0 2em 0 0;line-height:1;display:inline-block;vertical-align:text-bottom}.card header:last-child,.modal .overlay ~ * header:last-child{border-bottom:0}.card footer,.modal .overlay ~ * footer{padding:.8em}.card p,.modal .overlay ~ * p{margin:.3em 0}.card p:first-child,.modal .overlay ~ * p:first-child{margin-top:0}.card p:last-child,.modal .overlay ~ * p:last-child{margin-bottom:0}.card>p,.modal .overlay ~ *>p{margin:0;padding-right:2.5em}.card .close,.modal .overlay ~ * .close{position:absolute;top:.4em;right:.3em;font-size:1.2em;padding:0 .5em;cursor:pointer;width:auto}.card .close:hover,.modal .overlay ~ * .close:hover{color:#ff4136}.card h1+.close,.modal .overlay ~ * h1+.close{margin:.2em}.card h2+.close,.modal .overlay ~ * h2+.close{margin:.1em}.card .dangerous,.modal .overlay ~ * .dangerous{background:#ff4136;float:right}.modal{text-align:center}.modal>input{display:none}.modal>input ~ *{opacity:0;max-height:0;overflow:hidden}.modal .overlay{top:0;left:0;bottom:0;right:0;position:fixed;margin:0;border-radius:0;background:rgba(17,17,17,0.2);transition:all 0.3s;z-index:100000}.modal .overlay:before,.modal .overlay:after{display:none}.modal .overlay ~ *{border:0;position:fixed;top:50%;left:50%;transform:translateX(-50%) translateY(-50%) scale(0.2, 0.2);z-index:1000000;transition:all 0.3s}.modal>input:checked ~ *{display:block;opacity:1;max-height:10000px;transition:all 0.3s}.modal>input:checked ~ .overlay ~ *{max-height:90%;overflow:auto;-webkit-transform:translateX(-50%) translateY(-50%) scale(1, 1);transform:translateX(-50%) translateY(-50%) scale(1, 1)}@media (max-width: 60em){.modal .overlay ~ *{min-width:90%}}.dropimage{position:relative;display:block;padding:0;padding-bottom:56.25%;overflow:hidden;cursor:pointer;border:0;margin:.3em 0;border-radius:.2em;background-color:#ddd;background-size:cover;background-position:center center;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2NDAiIGhlaWdodD0iNjQwIiB2ZXJzaW9uPSIxLjEiPjxnIHN0eWxlPSJmaWxsOiMzMzMiPjxwYXRoIGQ9Ik0gMTg3IDIzMCBDIDE3NSAyMzAgMTY1IDI0MCAxNjUgMjUyIEwgMTY1IDMwMCBMIDE2NSA0MDggQyAxNjUgNDIwIDE3NSA0MzAgMTg3IDQzMCBMIDQ2MyA0MzAgQyA0NzUgNDMwIDQ4NSA0MjAgNDg1IDQwOCBMIDQ4NSAzMDAgTCA0ODUgMjUyIEMgNDg1IDI0MCA0NzUgMjMwIDQ2MyAyMzAgTCAxODcgMjMwIHogTSAzNjAgMjU2IEEgNzAgNzIgMCAwIDEgNDMwIDMyOCBBIDcwIDcyIDAgMCAxIDM2MCA0MDAgQSA3MCA3MiAwIDAgMSAyOTAgMzI4IEEgNzAgNzIgMCAwIDEgMzYwIDI1NiB6Ii8+PGNpcmNsZSBjeD0iMzYwIiBjeT0iMzMwIiByPSI0MSIvPjxwYXRoIGQ9Im0yMDUgMjI1IDUtMTAgMjAgMCA1IDEwLTMwIDAiLz48cGF0aCBkPSJNMjg1IDIwMEwyNzAgMjI1IDM3NiAyMjUgMzYxIDIwMCAyODUgMjAwek0zMTAgMjA1TDMzNyAyMDUgMzM3IDIxOCAzMTAgMjE4IDMxMCAyMDV6Ii8+PHBhdGggZD0ibTQwNSAyMjUgNS0xMCAyMCAwIDUgMTAtMzAgMCIvPjwvZz48L3N2Zz4=)}.dropimage input{left:0;width:100%;height:100%;border:0;margin:0;padding:0;opacity:0;cursor:pointer;position:absolute}.tabs{position:relative;overflow:hidden}.tabs>label img{float:left;margin-left:.6em}.tabs>.row{width:calc(100% + 2 * .6em);display:table;table-layout:fixed;position:relative;padding-left:0;transition:all .3s;border-spacing:0;margin:0}.tabs>.row:before,.tabs>.row:after{display:none}.tabs>.row>*,.tabs>.row img{display:table-cell;vertical-align:top;margin:0;width:100%}.tabs>input{display:none}.tabs>input+*{width:100%}.tabs>input+label{width:auto}.two.tabs>.row{width:200%;left:-100%}.two.tabs>input:nth-of-type(1):checked ~ .row{margin-left:100%}.two.tabs>label img{width:48%;margin:4% 0 4% 4%}.three.tabs>.row{width:300%;left:-200%}.three.tabs>input:nth-of-type(1):checked ~ .row{margin-left:200%}.three.tabs>input:nth-of-type(2):checked ~ .row{margin-left:100%}.three.tabs>label img{width:30%;margin:5% 0 5% 5%}.four.tabs>.row{width:400%;left:-300%}.four.tabs>input:nth-of-type(1):checked ~ .row{margin-left:300%}.four.tabs>input:nth-of-type(2):checked ~ .row{margin-left:200%}.four.tabs>input:nth-of-type(3):checked ~ .row{margin-left:100%}.four.tabs>label img{width:22%;margin:4% 0 4% 4%}.tabs>label:first-of-type img{margin-left:0}[data-tooltip]{position:relative}[data-tooltip]:after,[data-tooltip]:before{position:absolute;z-index:10;opacity:0;border-width:0;height:0;padding:0;overflow:hidden;transition:opacity .6s ease, height 0s ease .6s;top:calc(100% - 6px);left:0;margin-top:12px}[data-tooltip]:after{margin-left:0;font-size:.8em;background:#111;content:attr(data-tooltip);white-space:nowrap}[data-tooltip]:before{content:'';width:0;height:0;border-width:0;border-style:solid;border-color:transparent transparent #111;margin-top:0;left:10px}[data-tooltip]:hover:after,[data-tooltip]:focus:after,[data-tooltip]:hover:before,[data-tooltip]:focus:before{opacity:1;border-width:6px;height:auto}[data-tooltip]:hover:after,[data-tooltip]:focus:after{padding:.45em .9em}.tooltip-top:after,.tooltip-top:before{top:auto;bottom:calc(100% - 6px);left:0;margin-bottom:12px}.tooltip-top:before{border-color:#111 transparent transparent;margin-bottom:0;left:10px}.tooltip-right:after,.tooltip-right:before{left:100%;margin-left:6px;margin-top:0;top:0}.tooltip-right:before{border-color:transparent #111 transparent transparent;margin-left:-6px;left:100%;top:7px}.tooltip-left:after,.tooltip-left:before{right:100%;margin-right:6px;left:auto;margin-top:0;top:0}.tooltip-left:before{border-color:transparent transparent transparent #111;margin-right:-6px;right:100%;top:7px} diff --git a/firmware/fsdata/fs/css/style.css b/firmware/fsdata/fs/css/style.css new file mode 100644 index 0000000..a26dda5 --- /dev/null +++ b/firmware/fsdata/fs/css/style.css @@ -0,0 +1,62 @@ +main { + padding: 4em 2em 2em 2em; + max-width: 960px; + width: 100%; + margin-left: auto; + margin-right: auto; +} +section { + display: none; +} + +canvas{ + width: 100%; +} + +main[data-page="dashboard"] section[id="dashboard"] { + display: block; +} + +main[data-page="ota"] section[id="ota"] { + display: block; +} + +main[data-page="wifi"] section[id="wifi"] { + display: block; +} + +main[data-page="io"] section[id="io"] { + display: block; +} + +.table { + width: 100%; + display: table; +} +.table>.row{ + display: table-row; +} +.table>.row:nth-child(2n) { + background: rgba(17,17,17,0.05); +} +.table>.row>*{ + display: table-cell; + padding: .3em 2.4em .3em .6em; +} +.table>header.row>*{ + text-align: left; + font-weight: 900; + color: #fff; + background-color: #0074d9; +} + +.table>.row>input{ + border: none; + background: none; + font-weight: 900; +} + +.plain{ + opacity: initial; + width: initial; +} \ No newline at end of file diff --git a/firmware/fsdata/fs/index.html b/firmware/fsdata/fs/index.html new file mode 100644 index 0000000..5f05ada --- /dev/null +++ b/firmware/fsdata/fs/index.html @@ -0,0 +1,15 @@ + + + + + fiatlux v0.2 + + + + +
+

static web page

+
+ + + diff --git a/firmware/fsdata/fs/js/smoothie_min.js b/firmware/fsdata/fs/js/smoothie_min.js new file mode 100644 index 0000000..87ce47d --- /dev/null +++ b/firmware/fsdata/fs/js/smoothie_min.js @@ -0,0 +1,15 @@ +// MIT License: +// +// Copyright (c) 2010-2013, Joe Walnes +// 2013-2014, Drew Noakes +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +;(function(exports){var Util={extend:function(){arguments[0]=arguments[0]||{};for(var i=1;ithis.maxValue){this.maxValue=value}if(value=0&&this.data[i][0]>timestamp){i-=1}if(i===-1){this.data.splice(0,0,[timestamp,value])}else if(this.data.length>0&&this.data[i][0]===timestamp){if(sumRepeatedTimeStampValues){this.data[i][1]+=value;value=this.data[i][1]}else{this.data[i][1]=value}}else if(i=maxDataSetLength&&this.data[removeCount+1][0]0){timeSeries.resetBoundsTimerId=setInterval(function(){timeSeries.resetBounds()},timeSeries.options.resetBoundsInterval)}};SmoothieChart.prototype.removeTimeSeries=function(timeSeries){var numSeries=this.seriesSet.length;for(var i=0;i0.1||Math.abs(minValueDiff)>0.1;this.currentValueRange+=chartOptions.scaleSmoothing*valueRangeDiff;this.currentVisMinValue+=chartOptions.scaleSmoothing*minValueDiff}this.valueRange={min:chartMinValue,max:chartMaxValue}};SmoothieChart.prototype.render=function(canvas,time){var nowMillis=new Date().getTime();if(!this.isAnimatingScale){var maxIdleMillis=Math.min(1000/6,this.options.millisPerPixel);if(nowMillis-this.lastRenderTimeMillis0){context.beginPath();for(var t=time-(time%chartOptions.grid.millisPerLine);t>=oldestValidTime;t-=chartOptions.grid.millisPerLine){var gx=timeToXPixel(t);if(chartOptions.grid.sharpLines){gx-=0.5}context.moveTo(gx,0);context.lineTo(gx,dimensions.height)}context.stroke();context.closePath()}for(var v=1;v1){if(seriesOptions.fillStyle){context.lineTo(dimensions.width+seriesOptions.lineWidth+1,lastY);context.lineTo(dimensions.width+seriesOptions.lineWidth+1,dimensions.height+seriesOptions.lineWidth+1);context.lineTo(firstX,dimensions.height+seriesOptions.lineWidth);context.fillStyle=seriesOptions.fillStyle;context.fill()}if(seriesOptions.strokeStyle&&seriesOptions.strokeStyle!=='none'){context.stroke()}context.closePath()}context.restore()}if(!chartOptions.labels.disabled&&!isNaN(this.valueRange.min)&&!isNaN(this.valueRange.max)){var maxValueString=chartOptions.yMaxFormatter(this.valueRange.max,chartOptions.labels.precision),minValueString=chartOptions.yMinFormatter(this.valueRange.min,chartOptions.labels.precision),maxLabelPos=chartOptions.scrollBackwards?0:dimensions.width-context.measureText(maxValueString).width-2,minLabelPos=chartOptions.scrollBackwards?0:dimensions.width-context.measureText(minValueString).width-2;context.fillStyle=chartOptions.labels.fillStyle;context.fillText(maxValueString,maxLabelPos,chartOptions.labels.fontSize);context.fillText(minValueString,minLabelPos,dimensions.height-2)}if(chartOptions.timestampFormatter&&chartOptions.grid.millisPerLine>0){var textUntilX=chartOptions.scrollBackwards?context.measureText(minValueString).width:dimensions.width-context.measureText(minValueString).width+4;for(var t=time-(time%chartOptions.grid.millisPerLine);t>=oldestValidTime;t-=chartOptions.grid.millisPerLine){var gx=timeToXPixel(t);if((!chartOptions.scrollBackwards&&gxtextUntilX)){var tx=new Date(t),ts=chartOptions.timestampFormatter(tx),tsWidth=context.measureText(ts).width;textUntilX=chartOptions.scrollBackwards?gx+tsWidth+2:gx-tsWidth-2;context.fillStyle=chartOptions.labels.fillStyle;if(chartOptions.scrollBackwards){context.fillText(ts,gx,dimensions.height-2)}else{context.fillText(ts,gx-tsWidth,dimensions.height-2)}}}}context.restore();};SmoothieChart.timeFormatter=function(date){function pad2(number){return(number<10?'0':'')+number}return pad2(date.getHours())+':'+pad2(date.getMinutes())+':'+pad2(date.getSeconds())};exports.TimeSeries=TimeSeries;exports.SmoothieChart=SmoothieChart})(typeof exports==='undefined'?this:exports); \ No newline at end of file diff --git a/firmware/fsdata/makefsdata b/firmware/fsdata/makefsdata new file mode 100755 index 0000000..5361370 --- /dev/null +++ b/firmware/fsdata/makefsdata @@ -0,0 +1,114 @@ +#!/usr/bin/perl + +$incHttpHeader = 1; + +open(OUTPUT, "> fsdata.c"); +print(OUTPUT "#include \"httpd/fsdata.h\"\n\n"); + +chdir("fs"); +open(FILES, "find . -type f |"); + +while($file = ) { + + # Do not include files in CVS directories nor backup files. + if($file =~ /(CVS|~)/) { + next; + } + + chop($file); + + if($incHttpHeader == 1) { + open(HEADER, "> /tmp/header") || die $!; + if($file =~ /404/) { + print(HEADER "HTTP/1.0 404 File not found\r\n"); + } else { + print(HEADER "HTTP/1.0 200 OK\r\n"); + } + print(HEADER "lwIP/1.4.1 (http://savannah.nongnu.org/projects/lwip)\r\n"); + if($file =~ /\.html$/ || $file =~ /\.htm$/ || $file =~ /\.shtml$/ || $file =~ /\.shtm$/ || $file =~ /\.ssi$/) { + print(HEADER "Content-type: text/html\r\n"); + } elsif($file =~ /\.js$/) { + print(HEADER "Content-type: application/x-javascript\r\n\r\n"); + } elsif($file =~ /\.css$/) { + print(HEADER "Content-type: text/css\r\n\r\n"); + } elsif($file =~ /\.ico$/) { + print(HEADER "Content-type: image/x-icon\r\n\r\n"); + } elsif($file =~ /\.gif$/) { + print(HEADER "Content-type: image/gif\r\n"); + } elsif($file =~ /\.png$/) { + print(HEADER "Content-type: image/png\r\n"); + } elsif($file =~ /\.jpg$/) { + print(HEADER "Content-type: image/jpeg\r\n"); + } elsif($file =~ /\.bmp$/) { + print(HEADER "Content-type: image/bmp\r\n\r\n"); + } elsif($file =~ /\.class$/) { + print(HEADER "Content-type: application/octet-stream\r\n"); + } elsif($file =~ /\.ram$/) { + print(HEADER "Content-type: audio/x-pn-realaudio\r\n"); + } else { + print(HEADER "Content-type: text/plain\r\n"); + } + print(HEADER "\r\n"); + close(HEADER); + + unless($file =~ /\.plain$/ || $file =~ /cgi/) { + system("cat /tmp/header $file > /tmp/file"); + } else { + system("cp $file /tmp/file"); + } + } else { + system("cp $file /tmp/file"); + } + + open(FILE, "/tmp/file"); + unlink("/tmp/file"); + unlink("/tmp/header"); + + $file =~ s/\.//; + $fvar = $file; + $fvar =~ s-/-_-g; + $fvar =~ s-\.-_-g; + + print(OUTPUT "static const unsigned char data".$fvar."[] = {\n"); + print(OUTPUT "\t/* $file */\n\t"); + for($j = 0; $j < length($file); $j++) { + printf(OUTPUT "0x%02X, ", unpack("C", substr($file, $j, 1))); + } + printf(OUTPUT "0,\n"); + + + $i = 0; + while(read(FILE, $data, 1)) { + if($i == 0) { + print(OUTPUT "\t"); + } + printf(OUTPUT "0x%02X, ", unpack("C", $data)); + $i++; + if($i == 10) { + print(OUTPUT "\n"); + $i = 0; + } + } + print(OUTPUT "};\n\n"); + close(FILE); + push(@fvars, $fvar); + push(@files, $file); +} + +for($i = 0; $i < @fvars; $i++) { + $file = $files[$i]; + $fvar = $fvars[$i]; + + if($i == 0) { + $prevfile = "NULL"; + } else { + $prevfile = "file" . $fvars[$i - 1]; + } + print(OUTPUT "const struct fsdata_file file".$fvar."[] = {{\n$prevfile,\ndata$fvar, "); + print(OUTPUT "data$fvar + ". (length($file) + 1) .",\n"); + print(OUTPUT "sizeof(data$fvar) - ". (length($file) + 1) .",\n"); + print(OUTPUT $incHttpHeader."\n}};\n\n"); +} + +print(OUTPUT "#define FS_ROOT file$fvars[$i - 1]\n\n"); +print(OUTPUT "#define FS_NUMFILES $i\n"); diff --git a/firmware/web.cpp b/firmware/web.cpp index 1f26158..ddfb577 100644 --- a/firmware/web.cpp +++ b/firmware/web.cpp @@ -1,3 +1,35 @@ // // Created by jedi on 25.06.21. -// \ No newline at end of file +// + +#include "web.h" +#include "system.h" +#include "lux.h" +#include "wifi.h" + +#include +#include +#include + +extern "C" { +#include +#include +} + +#include +#include + +extern "C" { +#include +} + + +extern "C" [[noreturn]] void httpd_task(void *pvParameters) { + + while(!uxSemaphoreGetCount( wifi_available_semaphore )) + vTaskDelay(500 / portTICK_PERIOD_MS); + httpd_init(); + + for (;;) + vTaskDelay(500 / portTICK_PERIOD_MS); +} \ No newline at end of file diff --git a/firmware/web.h b/firmware/web.h index c76754b..831d2f8 100644 --- a/firmware/web.h +++ b/firmware/web.h @@ -9,6 +9,8 @@ extern "C" { #endif +void httpd_task(void *pvParameters); + #ifdef __cplusplus } #endif From f4d1b53760b35e897afd7e4f298daeb1ba293365 Mon Sep 17 00:00:00 2001 From: jedi Date: Mon, 19 Jul 2021 20:51:03 +0200 Subject: [PATCH 12/30] add basic websocket --- firmware/Makefile | 3 - firmware/fsdata/fs/index.html | 227 ++++++++++++++++++++++++++++++++- firmware/web.cpp | 229 ++++++++++++++++++++++++++++++++++ pcb/.gitignore | 1 + 4 files changed, 455 insertions(+), 5 deletions(-) diff --git a/firmware/Makefile b/firmware/Makefile index e7047ae..2f6546c 100644 --- a/firmware/Makefile +++ b/firmware/Makefile @@ -2,9 +2,6 @@ PROGRAM=fiatlux EXTRA_CFLAGS=-O3 -Ifsdata -#Enable debugging -#EXTRA_CFLAGS+=-DLWIP_DEBUG=1 -DHTTPD_DEBUG=LWIP_DBG_ON - EXTRA_COMPONENTS=extras/i2s_dma extras/ws2812_i2s extras/dhcpserver extras/mbedtls extras/httpd extras/sntp extras/cpp_support LIBS = hal m diff --git a/firmware/fsdata/fs/index.html b/firmware/fsdata/fs/index.html index 5f05ada..ad6aff1 100644 --- a/firmware/fsdata/fs/index.html +++ b/firmware/fsdata/fs/index.html @@ -7,9 +7,232 @@ -
-

static web page

+ +
+
+

Status

+
+
+
+
+

System

+
+
+
+ Chip ID + N/A +
+
+ Hostname + N/A +
+
+ Firmware Version + N/A +
+
+ Flash ID + N/A +
+
+ Flash size + N/A KiB +
+
+ Free heap + N/A bytes +
+
+ Uptime + N/A s +
+
+
+
+
+
+
+

Network current connection

+
+
+
+ Mode + N/A +
+
+ Station SSID + N/A +
+
+ Station IP + N/A +
+
+ Station MAC + N/A +
+
+ AP SSID + N/A +
+
+ AP IP + N/A +
+
+ AP MAC + N/A +
+
+
+
+
+
+
+

Power

+
+
+
+ Input + 5V12V +
+
+ Output + 11.2V +
+
+ +
+
+
+
+ + diff --git a/firmware/web.cpp b/firmware/web.cpp index ddfb577..f324bc8 100644 --- a/firmware/web.cpp +++ b/firmware/web.cpp @@ -23,11 +23,240 @@ extern "C" { #include } +#define vTaskDelayMs(ms) vTaskDelay((ms) / portTICK_PERIOD_MS) + +struct { + bool global; + bool connection; + bool wifi; +} has_changed; + +void websocket_task(void *pvParameter) { + auto *pcb = (struct tcp_pcb *) pvParameter; + + size_t connstarttime = xTaskGetTickCount(); + has_changed = {true, true, true}; + + for (;;) { + if(pcb == NULL || pcb->state != ESTABLISHED) { + printf("Connection closed, deleting task\n"); + break; + } + + //Global Info + if(has_changed.global) { + has_changed.global = false; + timeval tv; + gettimeofday(&tv, NULL); + int uptime = xTaskGetTickCount() * portTICK_PERIOD_MS / 1000; + int heap = (int) xPortGetFreeHeapSize(); + uint32_t chip_id = sdk_system_get_chip_id(); + uint32_t flash_id = sdk_spi_flash_get_id(); + uint32_t flash_size = sdk_flashchip.chip_size >> 10; + char *hostname = NULL; + + sysparam_get_string("hostname", &hostname); + /* Generate response in JSON format */ + char response[160]; + size_t len = snprintf(response, sizeof(response), + "{\"walltime\" : \"%d\"," + "\"uptime\" : \"%d\"," + " \"heap\" : \"%d\"," + " \"chipid\" : \"%08x\"," + " \"flashid\" : \"0x%08x\"," + " \"flashsize\" : \"%u\"," + " \"hostname\" : \"%s\"" + "}", (int) tv.tv_sec, uptime, heap, chip_id, flash_id, flash_size, hostname); + free(hostname); + if(len < sizeof(response)) { + LOCK_TCPIP_CORE(); + websocket_write(pcb, (unsigned char *) response, len, WS_TEXT_MODE); + UNLOCK_TCPIP_CORE(); + } else + printf("buffer too small 1"); + vTaskDelayMs(2000); + } + + //Connection Info + if(has_changed.connection) { + has_changed.connection = false; + timeval tv; + gettimeofday(&tv, NULL); + int connuptime = (xTaskGetTickCount() - connstarttime) * portTICK_PERIOD_MS / 1000; + + printf("conn %d: " + IPSTR + " <-> " + IPSTR + " \n", pcb->netif_idx, IP2STR(&pcb->local_ip), IP2STR(&pcb->remote_ip)); + char response[160]; + size_t len = snprintf(response, sizeof(response), + "{\"connage\" : \"%d\"," + "\"clientip\" : \"" + IPSTR + "\"" + "}", connuptime, IP2STR(&pcb->remote_ip)); + if(len < sizeof(response)) { + LOCK_TCPIP_CORE(); + websocket_write(pcb, (unsigned char *) response, len, WS_TEXT_MODE); + UNLOCK_TCPIP_CORE(); + } else + printf("buffer too small 1"); + vTaskDelayMs(2000); + } + + if(has_changed.wifi) { + has_changed.wifi = false; + uint8_t opmode = sdk_wifi_get_opmode(); + const char *opmode_str = "??"; + switch (opmode) { + case NULL_MODE: + opmode_str = "Null"; + break; + case STATION_MODE: + opmode_str = "Station"; + break; + case SOFTAP_MODE: + opmode_str = "SoftAP"; + break; + case STATIONAP_MODE: + opmode_str = "StationAP"; + break; + default: + break; + } + + + /*struct sockaddr_storage addr; + socklen_t addr_len = sizeof(addr); + if (getpeername(s, (struct sockaddr *)&addr, &addr_len) == 0) { + printf("peer\n"); + }*/ + + + if(opmode == SOFTAP_MODE || opmode == STATIONAP_MODE) { + uint8_t hwaddr[6]; + sdk_wifi_get_macaddr(SOFTAP_IF, hwaddr); + ip_info info; + sdk_wifi_get_ip_info(SOFTAP_IF, &info); + + char *apssid = NULL; + sysparam_get_string("wifi_ap_ssid", &apssid); + + /* Generate response in JSON format */ + char response[128]; + size_t len = snprintf(response, sizeof(response), + "{\"opmode\" : \"%s\"," + " \"apssid\" : \"%s\"," + " \"apip\" : \"" + IPSTR + "\"," + " \"apmac\" : \"" + MACSTR + "\"" + "}", opmode_str, apssid, IP2STR(&info.ip), MAC2STR(hwaddr)); + free(apssid); + if(len < sizeof(response)) { + LOCK_TCPIP_CORE(); + websocket_write(pcb, (unsigned char *) response, len, WS_TEXT_MODE); + UNLOCK_TCPIP_CORE(); + } else + printf("buffer too small 2"); + } + + vTaskDelayMs(2000); + + if(opmode == STATION_MODE || opmode == STATIONAP_MODE) { + uint8_t hwaddr[6]; + sdk_wifi_get_macaddr(STATION_IF, hwaddr); + ip_info info; + sdk_wifi_get_ip_info(STATION_IF, &info); + char *stassid = nullptr; + sysparam_get_string("wifi_sta_ssid", &stassid); + + /* Generate response in JSON format */ + char response[128]; + size_t len = snprintf(response, sizeof(response), + "{\"opmode\" : \"%s\"," + " \"stassid\" : \"%s\"," + " \"staip\" : \"" + IPSTR + "\"," + " \"stamac\" : \"" + MACSTR + "\"" + "}", opmode_str, stassid, IP2STR(&info.ip), MAC2STR(hwaddr)); + free(stassid); + if(len < sizeof(response)) { + LOCK_TCPIP_CORE(); + websocket_write(pcb, (unsigned char *) response, len, WS_TEXT_MODE); + UNLOCK_TCPIP_CORE(); + } else + printf("buffer too small 3"); + } + + } + + vTaskDelayMs(500); + { + uint8_t response[3]; + uint16_t val = 0; + val = sdk_system_adc_read(); + response[2] = (uint8_t) val; + response[1] = val >> 8; + response[0] = 'V'; + websocket_write(pcb, response, 3, WS_BIN_MODE); + } + vTaskDelayMs(500); + } + + vTaskDelete(NULL); +} + +/** + * This function is called when websocket frame is received. + * + * Note: this function is executed on TCP thread and should return as soon + * as possible. + */ +void websocket_cb(struct tcp_pcb *pcb, char *data, u16_t data_len, uint8_t mode) { + + uint8_t response[3]; + uint16_t val = 0; + char cmd = '0'; + + switch (data[0]) { + default: + printf("[websocket_callback]:\n%.*s\n", (int) data_len, (char *) data); + printf("Unknown command\n"); + val = 0; + break; + } + + response[2] = (uint8_t) val; + response[1] = val >> 8; + response[0] = cmd; + + websocket_write(pcb, response, 3, WS_BIN_MODE); +} + +/** + * This function is called when new websocket is open and + * creates a new websocket_task if requested URI equals '/stream'. + */ +void websocket_open_cb(struct tcp_pcb *pcb, const char *uri) { + printf("WS URI: %s\n", uri); + if(!strcmp(uri, "/stream")) { + xTaskCreate(&websocket_task, "websocket_task", 512, (void *) pcb, 3, nullptr); + } +} extern "C" [[noreturn]] void httpd_task(void *pvParameters) { while(!uxSemaphoreGetCount( wifi_available_semaphore )) vTaskDelay(500 / portTICK_PERIOD_MS); + + websocket_register_callbacks((tWsOpenHandler) websocket_open_cb, (tWsHandler) websocket_cb); httpd_init(); for (;;) diff --git a/pcb/.gitignore b/pcb/.gitignore index 2043655..b2abd3a 100644 --- a/pcb/.gitignore +++ b/pcb/.gitignore @@ -31,5 +31,6 @@ fp-info-cache *.wrl *.step +*-bak gen/ gen.zip From 006d281ad69f2277b06c4ea03759e58a8f82623e Mon Sep 17 00:00:00 2001 From: jedi Date: Mon, 19 Jul 2021 22:31:30 +0200 Subject: [PATCH 13/30] add basic signal led --- firmware/fiatlux.c | 2 ++ firmware/lux.cpp | 29 +++++++++++++++++++++++++++++ firmware/lux.h | 4 ++++ firmware/web.cpp | 7 +++---- firmware/wifi.cpp | 10 ++++------ 5 files changed, 42 insertions(+), 10 deletions(-) diff --git a/firmware/fiatlux.c b/firmware/fiatlux.c index cd6d09b..98d0efb 100644 --- a/firmware/fiatlux.c +++ b/firmware/fiatlux.c @@ -25,4 +25,6 @@ void user_init(void) xTaskCreate(wifi_task, "wifi_task", 512, NULL, 2, NULL); xTaskCreate(&httpd_task, "httpd_task", 512, NULL, 2, NULL); + + xTaskCreate(&lux_task, "lux_task", 512, NULL, 1, NULL); } diff --git a/firmware/lux.cpp b/firmware/lux.cpp index 6fd858b..cd8408f 100644 --- a/firmware/lux.cpp +++ b/firmware/lux.cpp @@ -1,3 +1,32 @@ // // Created by jedi on 25.06.21. // + +#include "lux.h" + +#include +#include +#include + +#include + +const int signal_led_pin = 2; + +const int cs0 = 15; +const int gpio4 = 4; +const int gpio5 = 5; + +extern "C" void signal_led(bool state) { + gpio_write(signal_led_pin, state); +} + +extern "C" void lux_task(void *pvParameters) { + + gpio_enable(signal_led_pin, GPIO_OUTPUT); + gpio_enable(cs0, GPIO_OUTPUT); + gpio_enable(gpio4, GPIO_OUTPUT); + gpio_enable(gpio5, GPIO_OUTPUT); + spi_init(1, SPI_MODE0, SPI_FREQ_DIV_1M, 1, SPI_BIG_ENDIAN, 1); + + vTaskDelete(nullptr); +} \ No newline at end of file diff --git a/firmware/lux.h b/firmware/lux.h index f185111..caf4a88 100644 --- a/firmware/lux.h +++ b/firmware/lux.h @@ -9,6 +9,10 @@ extern "C" { #endif +void lux_task(void *pvParameters); + +void signal_led(bool state); + #ifdef __cplusplus } #endif diff --git a/firmware/web.cpp b/firmware/web.cpp index f324bc8..c5bcaa8 100644 --- a/firmware/web.cpp +++ b/firmware/web.cpp @@ -251,14 +251,13 @@ void websocket_open_cb(struct tcp_pcb *pcb, const char *uri) { } } -extern "C" [[noreturn]] void httpd_task(void *pvParameters) { +extern "C" void httpd_task(void *pvParameters) { - while(!uxSemaphoreGetCount( wifi_available_semaphore )) + while (!uxSemaphoreGetCount(wifi_available_semaphore)) vTaskDelay(500 / portTICK_PERIOD_MS); websocket_register_callbacks((tWsOpenHandler) websocket_open_cb, (tWsHandler) websocket_cb); httpd_init(); - for (;;) - vTaskDelay(500 / portTICK_PERIOD_MS); + vTaskDelete(nullptr); } \ No newline at end of file diff --git a/firmware/wifi.cpp b/firmware/wifi.cpp index aaf3e8d..65b114b 100644 --- a/firmware/wifi.cpp +++ b/firmware/wifi.cpp @@ -116,7 +116,7 @@ SemaphoreHandle_t wifi_available_semaphore = nullptr; } } -extern "C" [[noreturn]] void wifi_task(void *pvParameters) { +extern "C" void wifi_task(void *pvParameters) { (void) pvParameters; /* Default a hostname. */ char *hostname = nullptr; @@ -353,10 +353,8 @@ extern "C" [[noreturn]] void wifi_task(void *pvParameters) { if(wifi_ap_ssid) free(wifi_ap_ssid); if(wifi_ap_password) free(wifi_ap_password); - xSemaphoreGive( wifi_available_semaphore); + xSemaphoreGive(wifi_available_semaphore); - while (1) { - //monitor connection here - vTaskDelay(5000); - } + //monitor loop connection here + vTaskDelete(nullptr); } \ No newline at end of file From 8c775e970561f6eb55a4165e22eb2576778ac105 Mon Sep 17 00:00:00 2001 From: jedi Date: Mon, 19 Jul 2021 23:31:20 +0200 Subject: [PATCH 14/30] add toogle button for signal led in http frontend --- firmware/fsdata/fs/index.html | 13 +++++++++++++ firmware/lux.cpp | 2 +- firmware/web.cpp | 10 ++++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/firmware/fsdata/fs/index.html b/firmware/fsdata/fs/index.html index ad6aff1..286aeff 100644 --- a/firmware/fsdata/fs/index.html +++ b/firmware/fsdata/fs/index.html @@ -109,6 +109,19 @@ +
+
+
+

I/O

+
+
+ +
+
+
diff --git a/firmware/lux.cpp b/firmware/lux.cpp index cd8408f..8b775c4 100644 --- a/firmware/lux.cpp +++ b/firmware/lux.cpp @@ -17,7 +17,7 @@ const int gpio4 = 4; const int gpio5 = 5; extern "C" void signal_led(bool state) { - gpio_write(signal_led_pin, state); + gpio_write(signal_led_pin, !state); } extern "C" void lux_task(void *pvParameters) { diff --git a/firmware/web.cpp b/firmware/web.cpp index c5bcaa8..c900018 100644 --- a/firmware/web.cpp +++ b/firmware/web.cpp @@ -226,6 +226,16 @@ void websocket_cb(struct tcp_pcb *pcb, char *data, u16_t data_len, uint8_t mode) char cmd = '0'; switch (data[0]) { + case 'D': // Disable LED + signal_led(false); + val = 1; + cmd = 'G'; + break; + case 'E': // Enable LED + signal_led(true); + val = 0; + cmd = 'G'; + break; default: printf("[websocket_callback]:\n%.*s\n", (int) data_len, (char *) data); printf("Unknown command\n"); From 8eb51b5aa9cd77494fe99516f66923c70eb54f63 Mon Sep 17 00:00:00 2001 From: jedi Date: Mon, 12 Jul 2021 20:51:38 +0200 Subject: [PATCH 15/30] create gerber files in CI pipeline --- .build.yml | 8 +--- Makefile | 30 +++++++----- docker/{ => firmware}/Dockerfile | 0 docker/pcb/Dockerfile | 7 +++ pcb/.gitignore | 2 +- pcb/Makefile | 56 ++++++++++++++++++++-- pcb/fiatlux.kiplot.yaml | 79 ++++++++++++++++++++++++++++++-- 7 files changed, 157 insertions(+), 25 deletions(-) rename docker/{ => firmware}/Dockerfile (100%) create mode 100644 docker/pcb/Dockerfile diff --git a/.build.yml b/.build.yml index 4ccdf4a..849107e 100644 --- a/.build.yml +++ b/.build.yml @@ -23,13 +23,6 @@ steps: commands: - apt update - apt install -y make zip - - cd pcb - - kibot -d gen -c fiatlux.kiplot.yaml -s update_xml,run_drc -i - - kibot -d gen -c fiatlux.kiplot.yaml -s update_xml,run_erc -i - - kibot -d gen -c fiatlux.kiplot.yaml -s run_drc,run_erc print_sch - - kibot -d gen -c fiatlux.kiplot.yaml -s all print_front gerbers - - ls -lA - - cd - - make pcb -j$(nproc) - name: case @@ -64,6 +57,7 @@ steps: base_url: https://git.neulandlabor.de/ files: - firmware/firmware/fiatlux.bin + - pcb/pcb.zip checksum: - sha512 - md5 diff --git a/Makefile b/Makefile index 2257790..8fafbe1 100644 --- a/Makefile +++ b/Makefile @@ -6,17 +6,6 @@ all: firmware case pcb firmware: +@make -C firmware html all -clean: - +@make -C firmware clean - -firmware_docker: - sh -c "docker build -t fiatlux_env docker" - sh -c "docker run --volume "$$(pwd)"/firmware:/app/firmware fiatlux_env make -C firmware all" - -clean_docker: - sh -c "docker build -t fiatlux_env docker" - sh -c "docker run --volume "$$(pwd)"/firmware:/app/firmware fiatlux_env make -C firmware clean" - flash: +@make -C firmware flash @@ -25,3 +14,22 @@ case: pcb: +@make -C pcb all + +clean: + +@make -C firmware clean + +@make -C pcb clean + +firmware_docker: + sh -c "docker build -t fiatlux_firmware_env docker/firmware" + sh -c "docker run --volume "$$(pwd)"/firmware:/app/firmware fiatlux_firmware_env make -C firmware all" + +pcb_docker: + sh -c "docker build -t fiatlux_pcb_env docker/pcb" + sh -c "docker run --volume "$$(pwd)"/pcb:/app/pcb fiatlux_pcb_env make -C pcb all" + +clean_docker: + sh -c "docker build -t fiatlux_firmware_env docker/firmware" + sh -c "docker build -t fiatlux_pcb_env docker/pcb" + sh -c "docker run --volume "$$(pwd)"/firmware:/app/firmware fiatlux_firmware_env make -C firmware clean" + sh -c "docker run --volume "$$(pwd)"/pcb:/app/pcb fiatlux_pcb_env make -C pcb clean" + diff --git a/docker/Dockerfile b/docker/firmware/Dockerfile similarity index 100% rename from docker/Dockerfile rename to docker/firmware/Dockerfile diff --git a/docker/pcb/Dockerfile b/docker/pcb/Dockerfile new file mode 100644 index 0000000..24535d5 --- /dev/null +++ b/docker/pcb/Dockerfile @@ -0,0 +1,7 @@ +# syntax=docker/dockerfile:1 +FROM setsoft/kicad_auto +RUN apt update && apt install -y make zip; mkdir /app; chown 1000:1000 /app; cd /app; useradd user +RUN mkdir -p /home/user; cp -r /root/.config /home/user/.config; chown 1000:1000 -R /home/user +RUN ls -la /home/user/.config +USER 1000 +WORKDIR /app \ No newline at end of file diff --git a/pcb/.gitignore b/pcb/.gitignore index b2abd3a..5d83bb6 100644 --- a/pcb/.gitignore +++ b/pcb/.gitignore @@ -33,4 +33,4 @@ fp-info-cache *-bak gen/ -gen.zip +pcb.zip diff --git a/pcb/Makefile b/pcb/Makefile index 181d4fb..610317c 100644 --- a/pcb/Makefile +++ b/pcb/Makefile @@ -1,4 +1,54 @@ -all: +.NOTPARALLEL: gen/fab/fiatlux-F_Cu.gbr gen/fab/fiatlux-B_Cu.gbr gen/fab/fiatlux-F_Mask.gbr gen/fab/fiatlux-B_Mask.gbr gen/fab/fiatlux-F_Paste.gbr gen/fab/fiatlux-B_Paste.gbr gen/fab/fiatlux-F_SilkS.gbr gen/fab/fiatlux-B_SilkS.gbr + +all: test fab doc pcb.zip + +pcb.zip: fab doc @mkdir -p gen - @touch gen/foo - @cd gen; zip ../gen.zip * + @cd gen; zip -r ../pcb.zip fab.zip fiatlux.csv fiatlux-top-pos.csv fiatlux-front.svg fiatlux-back.svg fiatlux.pdf + @cd gen; zip -r ../debug.zip . + +test: gen/fiatlux-drc.txt gen/fiatlux-erc.txt + +doc: gen/fiatlux.pdf gen/fiatlux-front.svg gen/fiatlux-back.svg + +fab: test gen/fab.zip gen/fiatlux.csv gen/fiatlux-top-pos.csv + +gen/fab.zip: gen/fab/fiatlux-F_Cu.gbr gen/fab/fiatlux-B_Cu.gbr gen/fab/fiatlux-F_Mask.gbr gen/fab/fiatlux-B_Mask.gbr +gen/fab.zip: gen/fab/fiatlux-F_Paste.gbr gen/fab/fiatlux-B_Paste.gbr gen/fab/fiatlux-F_SilkS.gbr gen/fab/fiatlux-B_SilkS.gbr + @mkdir -p gen/fab + @cd gen/fab; zip -r ../fab.zip *.gbr + +gen/fiatlux-erc.txt: fiatlux.kiplot.yaml fiatlux.pro fiatlux.kicad_pcb + @mkdir -p gen + kibot -d gen -c fiatlux.kiplot.yaml -s update_xml,run_drc -i + +gen/fiatlux-drc.txt: fiatlux.kiplot.yaml fiatlux.pro fiatlux.sch + @mkdir -p gen + kibot -d gen -c fiatlux.kiplot.yaml -s update_xml,run_erc -i + +gen/fab/%.gbr: fiatlux.kiplot.yaml fiatlux.pro fiatlux.kicad_pcb + @mkdir -p gen + kibot -d gen -c fiatlux.kiplot.yaml -s all print_front gerbers + +gen/fiatlux-top-pos.csv: fiatlux.kiplot.yaml fiatlux.pro fiatlux.kicad_pcb + @mkdir -p gen + kibot -d gen -c fiatlux.kiplot.yaml -s all print_front position + +gen/fiatlux.csv: fiatlux.kiplot.yaml fiatlux.pro fiatlux.kicad_pcb + @mkdir -p gen + kibot -d gen -c fiatlux.kiplot.yaml -s all print_front bom + +gen/fiatlux.pdf: fiatlux.kiplot.yaml fiatlux.pro fiatlux.sch + @mkdir -p gen + kibot -d gen -c fiatlux.kiplot.yaml -s run_drc,run_erc print_sch + +gen/fiatlux-front.svg: fiatlux.kicad_pcb + @mkdir -p gen + pcbdraw --libs default $< $@ + +gen/fiatlux-back.svg: fiatlux.kicad_pcb + @mkdir -p gen + pcbdraw --libs default --back $< $@ + +clean: + @rm -rf gen \ No newline at end of file diff --git a/pcb/fiatlux.kiplot.yaml b/pcb/fiatlux.kiplot.yaml index 2921d61..a035fc6 100644 --- a/pcb/fiatlux.kiplot.yaml +++ b/pcb/fiatlux.kiplot.yaml @@ -13,20 +13,39 @@ preflight: # kiauto_wait_start: 60 # kiauto_time_out_scale: 2 +filters: + - name: fix_rotation + comment: 'Adjust rotation for JLC' + type: rot_footprint + + - name: only_jlc_parts + comment: 'Only parts with JLC code' + type: generic + include_only: + - column: 'LCSC#' + regex: '^C\d+' + +variants: + - name: rotated + comment: 'Just a place holder for the rotation filter' + type: kibom + variant: rotated + pre_transform: fix_rotation + outputs: - name: 'print_sch' comment: "Print schematic (PDF)" type: pdf_sch_print dir: . options: - output: Schematic.pdf + output: fiatlux.pdf - name: 'print_front' comment: "Print F.Cu+Dwgs.User" type: pdf_pcb_print dir: . options: - output_name: PCB_Top.pdf + output_name: fiatlux-top.pdf layers: - layer: B.Cu - layer: F.SilkS @@ -34,7 +53,7 @@ outputs: - name: 'gerbers' comment: "Gerbers for the board house" type: gerber - dir: Gerbers + dir: fab options: # generic layer options exclude_edge_layer: true @@ -56,11 +75,65 @@ outputs: use_gerber_net_attributes: true layers: + - layer: F.Cu + suffix: F_Cu - layer: B.Cu suffix: B_Cu - layer: F.SilkS suffix: F_SilkS + - layer: B.SilkS + suffix: B_SilkS + - layer: F.Paste + suffix: F_Paste + - layer: B.Paste + suffix: B_Paste + - layer: F.Mask + suffix: F_Mask + - layer: B.Mask + suffix: B_Mask - layer: Edge.Cuts suffix: Edge_Cuts + - name: 'position' + comment: "Pick and place file, JLC style" + type: position + options: + variant: rotated + output: '%f-top-pos.%x' + format: CSV + units: millimeters + separate_files_for_front_and_back: false + only_smd: true + columns: + - id: Ref + name: Designator + - Val + - Package + - id: PosX + name: "Mid X" + - id: PosY + name: "Mid Y" + - id: Rot + name: Rotation + - id: Side + name: Layer + - name: 'bom' + comment: "BoM for JLC" + type: bom + options: + output: '%f.%x' + exclude_filter: 'only_jlc_parts' + ref_separator: ',' + columns: + - field: Value + name: Comment + - field: References + name: Designator + - Footprint + - field: 'LCSC#' + name: 'LCSC Part #' + csv: + hide_pcb_info: true + hide_stats_info: true + quote_all: true \ No newline at end of file From 0551aff5d14e2c0fec51875d27ae7487d10ede50 Mon Sep 17 00:00:00 2001 From: jedi Date: Thu, 29 Jul 2021 15:42:05 +0200 Subject: [PATCH 16/30] add some project files --- firmware/.idea/firmware.iml | 2 ++ firmware/.idea/modules.xml | 8 ++++++++ firmware/Makefile | 4 +++- 3 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 firmware/.idea/firmware.iml create mode 100644 firmware/.idea/modules.xml diff --git a/firmware/.idea/firmware.iml b/firmware/.idea/firmware.iml new file mode 100644 index 0000000..58ca04c --- /dev/null +++ b/firmware/.idea/firmware.iml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/firmware/.idea/modules.xml b/firmware/.idea/modules.xml new file mode 100644 index 0000000..cb860b6 --- /dev/null +++ b/firmware/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/firmware/Makefile b/firmware/Makefile index 2f6546c..1c91e7e 100644 --- a/firmware/Makefile +++ b/firmware/Makefile @@ -10,7 +10,9 @@ FLASH_MODE = dio include ../modules/rtos/common.mk -html: +html: fsdata/fsdata.c + +fsdata/fsdata.c: fsdata/fs/index.html fsdata/fs/404.html fsdata/fs/css/picnic.min.css fsdata/fs/css/style.css fsdata/fs/js/smoothie_min.js @echo "Generating fsdata.." cd fsdata && ./makefsdata From 9e8f14846a89db790119677436518ba2e77b3d73 Mon Sep 17 00:00:00 2001 From: jedi Date: Tue, 3 Aug 2021 01:37:04 +0200 Subject: [PATCH 17/30] add crc32 implementation --- firmware/crc32.c | 71 ++++++++++++++++++++++++++++++++++++++++++++++++ firmware/crc32.h | 14 ++++++++++ 2 files changed, 85 insertions(+) create mode 100644 firmware/crc32.c create mode 100644 firmware/crc32.h diff --git a/firmware/crc32.c b/firmware/crc32.c new file mode 100644 index 0000000..8107dfa --- /dev/null +++ b/firmware/crc32.c @@ -0,0 +1,71 @@ +// +// Created by jedi on 02.08.21. +// + +#include "crc32.h" + +#define UPDC32(octet, crc) (crc_32_tab[((crc)\ +^ ((uint8_t)octet)) & 0xff] ^ ((crc) >> 8)) + +static uint32_t crc_32_tab[] = { /* CRC polynomial 0xedb88320 */ + 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, + 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, + 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, + 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, + 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, + 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, + 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, + 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, + 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, + 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, + 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106, + 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, + 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, + 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, + 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, + 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, + 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, + 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, + 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, + 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, + 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, + 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, + 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, + 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, + 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, + 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, + 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e, + 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, + 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, + 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, + 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, + 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, + 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, + 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, + 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, + 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, + 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, + 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, + 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, + 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, + 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, + 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, + 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d +}; + +uint32_t updateCRC32(uint8_t ch, uint32_t crc) { + return UPDC32(ch, crc); +} + +uint32_t crc32_partial(uint32_t init, uint8_t *buf, uint32_t len) { + register uint32_t oldcrc32; + oldcrc32 = ~init; + for (; len; --len, ++buf) { + oldcrc32 = UPDC32(*buf, oldcrc32); + } + return ~oldcrc32; +} + +uint32_t crc32(uint8_t *data, uint32_t len) { + return crc32_partial(0, data, len); +} \ No newline at end of file diff --git a/firmware/crc32.h b/firmware/crc32.h new file mode 100644 index 0000000..16d4ca2 --- /dev/null +++ b/firmware/crc32.h @@ -0,0 +1,14 @@ +// +// Created by jedi on 02.08.21. +// + +#ifndef FIRMWARE_CRC32_H +#define FIRMWARE_CRC32_H + +#include + +uint32_t crc32_partial(uint32_t init, uint8_t *data, uint32_t len); + +uint32_t crc32(uint8_t *data, uint32_t len); + +#endif //FIRMWARE_CRC32_H From c049c04e8e6017691b06cd20b6f752736f0c7ce5 Mon Sep 17 00:00:00 2001 From: jedi Date: Tue, 3 Aug 2021 02:02:48 +0200 Subject: [PATCH 18/30] add pages and menu to web frontend --- firmware/fsdata/fs/index.html | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/firmware/fsdata/fs/index.html b/firmware/fsdata/fs/index.html index 286aeff..7d3fcdb 100644 --- a/firmware/fsdata/fs/index.html +++ b/firmware/fsdata/fs/index.html @@ -12,6 +12,11 @@ fiatlux v0.2 Loading... + + +
@@ -128,6 +133,7 @@ diff --git a/firmware/system.c b/firmware/system.c index 350f86e..f9dcadd 100644 --- a/firmware/system.c +++ b/firmware/system.c @@ -3,35 +3,114 @@ // #include "system.h" +#include "crc32.h" #include -#include #include #include -#include #include +#include +#include +#include +#include -void system_clear_config(){ +#define min(a, b) \ + ({ __typeof__ (a) _a = (a); \ + __typeof__ (b) _b = (b); \ + _a < _b ? _a : _b; }) + +void system_clear_config() { vPortEnterCritical(); - uint32_t num_sectors = 5 + DEFAULT_SYSPARAM_SECTORS; - uint32_t start = sdk_flashchip.chip_size - num_sectors * sdk_flashchip.sector_size; + uint32_t num_sectors = 0x2000 / sdk_flashchip.sector_size; + uint32_t start = 0x00100000; for (uint32_t i = 0; i < num_sectors; i++) { spiflash_erase_sector(start + i * sdk_flashchip.sector_size); } + if(sysparam_create_area(start, num_sectors, true) == SYSPARAM_OK) { + sysparam_init(start, 0); + } + sysparam_init(start, start + 0x2000); sdk_system_restart(); } -void system_init_config(){ - uint32_t base_addr; +void system_init_config() { + uint32_t base_addr = 0x00100000; uint32_t num_sectors; + sysparam_init(base_addr, 0); if(sysparam_get_info(&base_addr, &num_sectors) != SYSPARAM_OK) { printf("Warning: WiFi config, sysparam not initialized\n"); - num_sectors = DEFAULT_SYSPARAM_SECTORS; - base_addr = sdk_flashchip.chip_size - (5 + num_sectors) * sdk_flashchip.sector_size; + num_sectors = 0x2000 / sdk_flashchip.sector_size; if(sysparam_create_area(base_addr, num_sectors, true) == SYSPARAM_OK) { sysparam_init(base_addr, 0); } sdk_system_restart(); } +} + +#define MAX_IMAGE_SIZE 0x100000 + +struct { + rboot_write_status status; + uint32_t head; + uint32_t base; + uint16_t seq; + uint8_t slot; +} otaflash_context; + +void system_otaflash_init() { + rboot_config conf; + conf = rboot_get_config(); + otaflash_context.slot = (conf.current_rom + 1) % conf.count; + otaflash_context.base = rboot_get_slot_offset(otaflash_context.slot); + otaflash_context.status = rboot_write_init(otaflash_context.base); + otaflash_context.head = otaflash_context.base; + otaflash_context.seq = 0; +} + +int system_otaflash_chunk(uint8_t *data, uint16_t len, uint16_t seq, uint32_t hash) { + uint32_t local_hash = crc32(data, len); + if(hash == local_hash && otaflash_context.seq == seq) { + if(otaflash_context.head % SECTOR_SIZE == 0) { + sdk_spi_flash_erase_sector(otaflash_context.head / SECTOR_SIZE); + } + if(((uint32_t) data) % 4) { + uint32 buf[len / 4]; + memcpy(buf, data, len); + sdk_spi_flash_write(otaflash_context.head, buf, len); + } else { + sdk_spi_flash_write(otaflash_context.head, (uint32_t *) data, len); + } + otaflash_context.head += len; + otaflash_context.seq++; + return 0x88; + } else { + return 0xff; + } + +} + +void system_otaflash_verify_chunk(void *ctx, void *data, size_t len) { + uint32_t digest = *(uint32_t *) ctx; + digest = crc32_partial(digest, data, len); + *(uint32_t *) ctx = digest; +} + +int system_otaflash_verify_and_switch(uint32_t len, uint32_t hash) { + + uint32_t digest = 0; + rboot_digest_image(otaflash_context.base, min(len, MAX_IMAGE_SIZE), system_otaflash_verify_chunk, &digest); + + if(hash != digest) { + printf("OTA failed to verify firmware\r\n"); + return 0x99; + } + + vPortEnterCritical(); + if(!rboot_set_current_rom(otaflash_context.slot)) { + printf("OTA failed to set new rboot slot\r\n"); + } + sdk_system_restart(); + vPortExitCritical(); // | should not be reached + return 0x77; // | } \ No newline at end of file diff --git a/firmware/system.h b/firmware/system.h index 14f5188..ac97a9b 100644 --- a/firmware/system.h +++ b/firmware/system.h @@ -5,13 +5,22 @@ #ifndef FIRMWARE_SYSTEM_H #define FIRMWARE_SYSTEM_H +#include + #ifdef __cplusplus extern "C" { #endif void system_clear_config(); + void system_init_config(); +void system_otaflash_init(); + +int system_otaflash_chunk(uint8_t *data, uint16_t len, uint16_t seq, uint32_t hash); + +int system_otaflash_verify_and_switch(uint32_t len, uint32_t hash); + #ifdef __cplusplus } #endif diff --git a/firmware/web.cpp b/firmware/web.cpp index c900018..6176a43 100644 --- a/firmware/web.cpp +++ b/firmware/web.cpp @@ -38,7 +38,7 @@ void websocket_task(void *pvParameter) { has_changed = {true, true, true}; for (;;) { - if(pcb == NULL || pcb->state != ESTABLISHED) { + if(pcb == nullptr || pcb->state != ESTABLISHED) { printf("Connection closed, deleting task\n"); break; } @@ -46,14 +46,14 @@ void websocket_task(void *pvParameter) { //Global Info if(has_changed.global) { has_changed.global = false; - timeval tv; - gettimeofday(&tv, NULL); - int uptime = xTaskGetTickCount() * portTICK_PERIOD_MS / 1000; + timeval tv{}; + gettimeofday(&tv, nullptr); + size_t uptime = xTaskGetTickCount() * portTICK_PERIOD_MS / 1000; int heap = (int) xPortGetFreeHeapSize(); uint32_t chip_id = sdk_system_get_chip_id(); uint32_t flash_id = sdk_spi_flash_get_id(); uint32_t flash_size = sdk_flashchip.chip_size >> 10; - char *hostname = NULL; + char *hostname = nullptr; sysparam_get_string("hostname", &hostname); /* Generate response in JSON format */ @@ -80,21 +80,16 @@ void websocket_task(void *pvParameter) { //Connection Info if(has_changed.connection) { has_changed.connection = false; - timeval tv; - gettimeofday(&tv, NULL); - int connuptime = (xTaskGetTickCount() - connstarttime) * portTICK_PERIOD_MS / 1000; + timeval tv{}; + gettimeofday(&tv, nullptr); + size_t connuptime = (xTaskGetTickCount() - connstarttime) * portTICK_PERIOD_MS / 1000; - printf("conn %d: " - IPSTR - " <-> " - IPSTR - " \n", pcb->netif_idx, IP2STR(&pcb->local_ip), IP2STR(&pcb->remote_ip)); + printf("conn %d: " IPSTR " <-> " IPSTR " \n", pcb->netif_idx, IP2STR(&pcb->local_ip), + IP2STR(&pcb->remote_ip)); char response[160]; size_t len = snprintf(response, sizeof(response), "{\"connage\" : \"%d\"," - "\"clientip\" : \"" - IPSTR - "\"" + "\"clientip\" : \"" IPSTR "\"" "}", connuptime, IP2STR(&pcb->remote_ip)); if(len < sizeof(response)) { LOCK_TCPIP_CORE(); @@ -137,10 +132,10 @@ void websocket_task(void *pvParameter) { if(opmode == SOFTAP_MODE || opmode == STATIONAP_MODE) { uint8_t hwaddr[6]; sdk_wifi_get_macaddr(SOFTAP_IF, hwaddr); - ip_info info; + ip_info info{}; sdk_wifi_get_ip_info(SOFTAP_IF, &info); - char *apssid = NULL; + char *apssid = nullptr; sysparam_get_string("wifi_ap_ssid", &apssid); /* Generate response in JSON format */ @@ -148,12 +143,8 @@ void websocket_task(void *pvParameter) { size_t len = snprintf(response, sizeof(response), "{\"opmode\" : \"%s\"," " \"apssid\" : \"%s\"," - " \"apip\" : \"" - IPSTR - "\"," - " \"apmac\" : \"" - MACSTR - "\"" + " \"apip\" : \"" IPSTR "\"," + " \"apmac\" : \"" MACSTR "\"" "}", opmode_str, apssid, IP2STR(&info.ip), MAC2STR(hwaddr)); free(apssid); if(len < sizeof(response)) { @@ -169,7 +160,7 @@ void websocket_task(void *pvParameter) { if(opmode == STATION_MODE || opmode == STATIONAP_MODE) { uint8_t hwaddr[6]; sdk_wifi_get_macaddr(STATION_IF, hwaddr); - ip_info info; + ip_info info{}; sdk_wifi_get_ip_info(STATION_IF, &info); char *stassid = nullptr; sysparam_get_string("wifi_sta_ssid", &stassid); @@ -179,12 +170,8 @@ void websocket_task(void *pvParameter) { size_t len = snprintf(response, sizeof(response), "{\"opmode\" : \"%s\"," " \"stassid\" : \"%s\"," - " \"staip\" : \"" - IPSTR - "\"," - " \"stamac\" : \"" - MACSTR - "\"" + " \"staip\" : \"" IPSTR "\"," + " \"stamac\" : \"" MACSTR "\"" "}", opmode_str, stassid, IP2STR(&info.ip), MAC2STR(hwaddr)); free(stassid); if(len < sizeof(response)) { @@ -198,34 +185,49 @@ void websocket_task(void *pvParameter) { } vTaskDelayMs(500); - { - uint8_t response[3]; - uint16_t val = 0; - val = sdk_system_adc_read(); - response[2] = (uint8_t) val; - response[1] = val >> 8; - response[0] = 'V'; - websocket_write(pcb, response, 3, WS_BIN_MODE); - } - vTaskDelayMs(500); } - vTaskDelete(NULL); + vTaskDelete(nullptr); } +struct fw_frame { + char t; + uint8_t reserved[3]; + uint16_t seq; + uint16_t len; + uint32_t hash; + uint8_t data[]; +} __attribute__((packed)); + +struct fw_check { + char t; + uint8_t reserved[3]; + uint32_t len; + uint32_t hash; +} __attribute__((packed)); + /** * This function is called when websocket frame is received. * * Note: this function is executed on TCP thread and should return as soon * as possible. */ -void websocket_cb(struct tcp_pcb *pcb, char *data, u16_t data_len, uint8_t mode) { +void websocket_cb(struct tcp_pcb *pcb, char *data, u16_t data_len, + uint8_t /*mode*/) { //mode should be WS_BIN_MODE or WS_TEXT_MODE uint8_t response[3]; uint16_t val = 0; char cmd = '0'; + bool togl = 0; + switch (data[0]) { + case 'R': // Restart + cmd = 'R'; + break; + case 'X': // Clear Config + cmd = 'X'; + break; case 'D': // Disable LED signal_led(false); val = 1; @@ -236,9 +238,29 @@ void websocket_cb(struct tcp_pcb *pcb, char *data, u16_t data_len, uint8_t mode) val = 0; cmd = 'G'; break; + case 'F': + togl = ~togl; + signal_led(togl); + { + auto *f = (fw_frame *) data; + if(f->seq == 0) { + system_otaflash_init(); + } + val = system_otaflash_chunk(f->data, ntohs(f->len), ntohs(f->seq), ntohl(f->hash)); + } + cmd = 'F'; + break; + case 'C': + signal_led(false); + { + auto *f = (fw_check *) data; + val = system_otaflash_verify_and_switch(ntohl(f->len), ntohl(f->hash)); + } + cmd = 'C'; + break; default: printf("[websocket_callback]:\n%.*s\n", (int) data_len, (char *) data); - printf("Unknown command\n"); + printf("Unknown command %c\n", data[0]); val = 0; break; } @@ -247,7 +269,18 @@ void websocket_cb(struct tcp_pcb *pcb, char *data, u16_t data_len, uint8_t mode) response[1] = val >> 8; response[0] = cmd; + LOCK_TCPIP_CORE(); websocket_write(pcb, response, 3, WS_BIN_MODE); + UNLOCK_TCPIP_CORE(); + + if(data[0] == 'R') { // Restart + vTaskDelay(500 / portTICK_PERIOD_MS); + vPortEnterCritical(); + sdk_system_restart(); + } else if(data[0] == 'X') { // Clear Config + vTaskDelay(500 / portTICK_PERIOD_MS); + system_clear_config(); + } } /** @@ -262,10 +295,10 @@ void websocket_open_cb(struct tcp_pcb *pcb, const char *uri) { } extern "C" void httpd_task(void *pvParameters) { + (void) pvParameters; while (!uxSemaphoreGetCount(wifi_available_semaphore)) vTaskDelay(500 / portTICK_PERIOD_MS); - websocket_register_callbacks((tWsOpenHandler) websocket_open_cb, (tWsHandler) websocket_cb); httpd_init(); From 09452ef7ab346cf92587313a995b93be28680de9 Mon Sep 17 00:00:00 2001 From: jedi Date: Sat, 28 Aug 2021 23:48:01 +0200 Subject: [PATCH 21/30] add minimal OTA Update CLI --- README.md | 1 + firmware/otaflash.py | 44 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100755 firmware/otaflash.py diff --git a/README.md b/README.md index ebf56ee..6ff897e 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,7 @@ git submodule update --init --recursive - ncurses-dev libexpat-dev - python3 python3-serial python-dev + - pip install websocket-client (for otaflash.py, optional) ### Build Steps diff --git a/firmware/otaflash.py b/firmware/otaflash.py new file mode 100755 index 0000000..aeefe3f --- /dev/null +++ b/firmware/otaflash.py @@ -0,0 +1,44 @@ +#!/usr/bin/env python3 + +import time +import websocket +import argparse +import zlib + +parser = argparse.ArgumentParser(description='Update fiatlux firmware via websocket.') +parser.add_argument("binfile") + +args = parser.parse_args() + +with open(args.binfile, "rb") as f: + try: + ws = websocket.WebSocket() + ws.connect("ws://172.16.0.1") + i = 0 + rolling = 0 + total = 0 + while True: + bytes = f.read(512) + rolling = zlib.crc32(bytes, rolling) + total += len(bytes) + msg = b'F\x00\x00\x00' + msg += i.to_bytes(2, 'big') + msg += len(bytes).to_bytes(2, 'big') + msg += (zlib.crc32(bytes) & 0xffffffff).to_bytes(4, 'big') + msg += bytes + ws.send(msg) + reply = ws.recv() + time.sleep(0.05) + i += 1 + if len(bytes) != 512: + break + msg = b'C\x00\x00\x00' + msg += total.to_bytes(4, 'big') + msg += rolling.to_bytes(4, 'big') + ws.send(msg) + print(ws.recv()) + ws.close() + except ConnectionResetError: + pass + except KeyboardInterrupt: + pass From 5fa1ec14e26d15b2ebfc509a7ab6f07a4b8e8fbc Mon Sep 17 00:00:00 2001 From: jedi Date: Mon, 6 Sep 2021 23:21:43 +0200 Subject: [PATCH 22/30] add otaflash.py script to release files --- .build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.build.yml b/.build.yml index 849107e..af5617d 100644 --- a/.build.yml +++ b/.build.yml @@ -57,6 +57,7 @@ steps: base_url: https://git.neulandlabor.de/ files: - firmware/firmware/fiatlux.bin + - firmware/otaflash.py - pcb/pcb.zip checksum: - sha512 From c0228cdf4954704106ceb61bab55593c4b8d6eeb Mon Sep 17 00:00:00 2001 From: 7m9 Date: Thu, 9 Sep 2021 02:35:15 +0200 Subject: [PATCH 23/30] Added gzip compression --- Makefile | 2 +- README.md | 2 +- docker/firmware/Dockerfile | 2 +- firmware/.gitignore | 4 +- firmware/Makefile | 11 +- firmware/fsdata/fs/404.html | 22 ---- firmware/fsdata/makefsdata | 114 ------------------ firmware/mkwebfs.py | 112 +++++++++++++++++ firmware/webdir/404.html | 22 ++++ .../{fsdata/fs => webdir}/css/picnic.min.css | 0 firmware/{fsdata/fs => webdir}/css/style.css | 24 ++-- firmware/{fsdata/fs => webdir}/index.html | 0 .../{fsdata/fs => webdir}/js/smoothie_min.js | 0 13 files changed, 159 insertions(+), 156 deletions(-) delete mode 100644 firmware/fsdata/fs/404.html delete mode 100755 firmware/fsdata/makefsdata create mode 100755 firmware/mkwebfs.py create mode 100644 firmware/webdir/404.html rename firmware/{fsdata/fs => webdir}/css/picnic.min.css (100%) rename firmware/{fsdata/fs => webdir}/css/style.css (71%) rename firmware/{fsdata/fs => webdir}/index.html (100%) rename firmware/{fsdata/fs => webdir}/js/smoothie_min.js (100%) diff --git a/Makefile b/Makefile index 8fafbe1..0518768 100644 --- a/Makefile +++ b/Makefile @@ -21,7 +21,7 @@ clean: firmware_docker: sh -c "docker build -t fiatlux_firmware_env docker/firmware" - sh -c "docker run --volume "$$(pwd)"/firmware:/app/firmware fiatlux_firmware_env make -C firmware all" + sh -c "docker run --volume "$$(pwd)"/firmware:/app/firmware fiatlux_firmware_env make -C firmware html all" pcb_docker: sh -c "docker build -t fiatlux_pcb_env docker/pcb" diff --git a/README.md b/README.md index 6ff897e..ecb33c2 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ git submodule update --init --recursive ### Build Requirements - make - - bash gawk perl + - bash gawk - g++ gcc - libc6-dev - flex bison diff --git a/docker/firmware/Dockerfile b/docker/firmware/Dockerfile index 582fe2f..d278775 100644 --- a/docker/firmware/Dockerfile +++ b/docker/firmware/Dockerfile @@ -6,7 +6,7 @@ RUN cd app; git clone --recursive https://github.com/SuperHouse/esp-open-rtos.gi RUN cd app; sed -i 's/GNU bash, version (3\\\.\[1-9\]|4)/GNU bash, version (3.[1-9]|4|5)/g' modules/sdk/crosstool-NG/configure.ac; mkdir -p modules/sdk/crosstool-NG/.build/tarballs; wget https://github.com/libexpat/libexpat/releases/download/R_2_1_0/expat-2.1.0.tar.gz -O modules/sdk/crosstool-NG/.build/tarballs/expat-2.1.0.tar.gz RUN cd app/modules/sdk; export CT_EXPERIMENTAL=y; export CT_ALLOW_BUILD_AS_ROOT=y; export CT_ALLOW_BUILD_AS_ROOT_SURE=y; make standalone=y -j$(nproc); wget -N https://raw.githubusercontent.com/espressif/esptool/master/esptool.py -O xtensa-lx106-elf/bin/esptool.py USER 0 -RUN apt remove --purge -y python2 && apt autoremove --purge -y && apt install -y python3 python3-serial perl +RUN apt remove --purge -y python2 && apt autoremove --purge -y && apt install -y python3 python3-serial RUN apt install -y --reinstall python-is-python3 USER 1000 WORKDIR /app diff --git a/firmware/.gitignore b/firmware/.gitignore index c67e8c9..14041d9 100644 --- a/firmware/.gitignore +++ b/firmware/.gitignore @@ -142,5 +142,5 @@ dkms.conf *.remove firmware/ -fsdata/fsdata.c -compile_commands.json \ No newline at end of file +build/ +compile_commands.json diff --git a/firmware/Makefile b/firmware/Makefile index bc8dc8b..e0a7ccb 100644 --- a/firmware/Makefile +++ b/firmware/Makefile @@ -1,6 +1,6 @@ PROGRAM=fiatlux -EXTRA_CFLAGS=-O3 -Ifsdata +EXTRA_CFLAGS=-O3 -Ibuild/gen EXTRA_COMPONENTS=extras/i2s_dma extras/ws2812_i2s extras/dhcpserver extras/rboot-ota extras/mbedtls extras/httpd extras/sntp extras/cpp_support @@ -10,11 +10,12 @@ FLASH_MODE = dio include ../modules/rtos/common.mk -html: fsdata/fsdata.c +html: build/gen/fsdata.c -fsdata/fsdata.c: fsdata/fs/index.html fsdata/fs/404.html fsdata/fs/css/picnic.min.css fsdata/fs/css/style.css fsdata/fs/js/smoothie_min.js +build/gen/fsdata.c: webdir/index.html webdir/404.html webdir/css/picnic.min.css webdir/css/style.css webdir/js/smoothie_min.js @echo "Generating fsdata.." - cd fsdata && ./makefsdata + @mkdir -p $(dir $@) + @./mkwebfs.py --gzip -o $@ $^ test: unittest systest @@ -24,4 +25,4 @@ unittest: systest: true -.NOTPARALLEL: html all \ No newline at end of file +.NOTPARALLEL: html all diff --git a/firmware/fsdata/fs/404.html b/firmware/fsdata/fs/404.html deleted file mode 100644 index da81a20..0000000 --- a/firmware/fsdata/fs/404.html +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - HTTP Server - - - - -
-

404 - Page not found

-
Sorry, the page you are requesting was not found on this server.
-
- - - diff --git a/firmware/fsdata/makefsdata b/firmware/fsdata/makefsdata deleted file mode 100755 index 5361370..0000000 --- a/firmware/fsdata/makefsdata +++ /dev/null @@ -1,114 +0,0 @@ -#!/usr/bin/perl - -$incHttpHeader = 1; - -open(OUTPUT, "> fsdata.c"); -print(OUTPUT "#include \"httpd/fsdata.h\"\n\n"); - -chdir("fs"); -open(FILES, "find . -type f |"); - -while($file = ) { - - # Do not include files in CVS directories nor backup files. - if($file =~ /(CVS|~)/) { - next; - } - - chop($file); - - if($incHttpHeader == 1) { - open(HEADER, "> /tmp/header") || die $!; - if($file =~ /404/) { - print(HEADER "HTTP/1.0 404 File not found\r\n"); - } else { - print(HEADER "HTTP/1.0 200 OK\r\n"); - } - print(HEADER "lwIP/1.4.1 (http://savannah.nongnu.org/projects/lwip)\r\n"); - if($file =~ /\.html$/ || $file =~ /\.htm$/ || $file =~ /\.shtml$/ || $file =~ /\.shtm$/ || $file =~ /\.ssi$/) { - print(HEADER "Content-type: text/html\r\n"); - } elsif($file =~ /\.js$/) { - print(HEADER "Content-type: application/x-javascript\r\n\r\n"); - } elsif($file =~ /\.css$/) { - print(HEADER "Content-type: text/css\r\n\r\n"); - } elsif($file =~ /\.ico$/) { - print(HEADER "Content-type: image/x-icon\r\n\r\n"); - } elsif($file =~ /\.gif$/) { - print(HEADER "Content-type: image/gif\r\n"); - } elsif($file =~ /\.png$/) { - print(HEADER "Content-type: image/png\r\n"); - } elsif($file =~ /\.jpg$/) { - print(HEADER "Content-type: image/jpeg\r\n"); - } elsif($file =~ /\.bmp$/) { - print(HEADER "Content-type: image/bmp\r\n\r\n"); - } elsif($file =~ /\.class$/) { - print(HEADER "Content-type: application/octet-stream\r\n"); - } elsif($file =~ /\.ram$/) { - print(HEADER "Content-type: audio/x-pn-realaudio\r\n"); - } else { - print(HEADER "Content-type: text/plain\r\n"); - } - print(HEADER "\r\n"); - close(HEADER); - - unless($file =~ /\.plain$/ || $file =~ /cgi/) { - system("cat /tmp/header $file > /tmp/file"); - } else { - system("cp $file /tmp/file"); - } - } else { - system("cp $file /tmp/file"); - } - - open(FILE, "/tmp/file"); - unlink("/tmp/file"); - unlink("/tmp/header"); - - $file =~ s/\.//; - $fvar = $file; - $fvar =~ s-/-_-g; - $fvar =~ s-\.-_-g; - - print(OUTPUT "static const unsigned char data".$fvar."[] = {\n"); - print(OUTPUT "\t/* $file */\n\t"); - for($j = 0; $j < length($file); $j++) { - printf(OUTPUT "0x%02X, ", unpack("C", substr($file, $j, 1))); - } - printf(OUTPUT "0,\n"); - - - $i = 0; - while(read(FILE, $data, 1)) { - if($i == 0) { - print(OUTPUT "\t"); - } - printf(OUTPUT "0x%02X, ", unpack("C", $data)); - $i++; - if($i == 10) { - print(OUTPUT "\n"); - $i = 0; - } - } - print(OUTPUT "};\n\n"); - close(FILE); - push(@fvars, $fvar); - push(@files, $file); -} - -for($i = 0; $i < @fvars; $i++) { - $file = $files[$i]; - $fvar = $fvars[$i]; - - if($i == 0) { - $prevfile = "NULL"; - } else { - $prevfile = "file" . $fvars[$i - 1]; - } - print(OUTPUT "const struct fsdata_file file".$fvar."[] = {{\n$prevfile,\ndata$fvar, "); - print(OUTPUT "data$fvar + ". (length($file) + 1) .",\n"); - print(OUTPUT "sizeof(data$fvar) - ". (length($file) + 1) .",\n"); - print(OUTPUT $incHttpHeader."\n}};\n\n"); -} - -print(OUTPUT "#define FS_ROOT file$fvars[$i - 1]\n\n"); -print(OUTPUT "#define FS_NUMFILES $i\n"); diff --git a/firmware/mkwebfs.py b/firmware/mkwebfs.py new file mode 100755 index 0000000..667af23 --- /dev/null +++ b/firmware/mkwebfs.py @@ -0,0 +1,112 @@ +#!/usr/bin/env python3 +import os +import gzip +import argparse + +parser = argparse.ArgumentParser() +parser.add_argument('-o', '--output', help='Output file name', default='stdout') +parser.add_argument('-W', '--webroot', help='Output file name', default='webdir/') +parser.add_argument('--gzip', dest='gzip', action='store_true') +parser.add_argument('--no-gzip', dest='gzip', action='store_false') +parser.set_defaults(gzip=False) +parser.add_argument('--header', dest='header', action='store_true') +parser.add_argument('--no-header', dest='header', action='store_false') +parser.set_defaults(header=True) +parser.add_argument('input', nargs='+', default=os.getcwd()) +args = parser.parse_args() + + +def dumpBin2CHex(f, b): + oStr = "\t" + n = 0 + for val in b: + oStr += hex(val) + ", " + n += 1 + if n % 8 == 0: + oStr += "\n\t" + oStr += "\n" + f.write(oStr) + + +f_fsdata_c = open(args.output, 'w') +f_fsdata_c.write('#include "httpd/fsdata.h"\n\n') + +httpFiles = [file for file in args.input if (args.webroot in file)] + +lastFileStruct = "NULL" + +for file in httpFiles: + response = b'' + + webPath = ("/" + file.removeprefix(args.webroot)).replace("//", "/") + print("{} > {}".format(file, webPath)) + + if args.header: + if ("404" in file): + response = b'HTTP/1.0 404 File not found\r\n' + else: + response = b'HTTP/1.0 200 OK\r\n' + response += b"lwIP/1.4.1 (http://savannah.nongnu.org/projects/lwip)\r\n" + fext = file.split('.')[-1] + ctype = b'Content-type: text/plain\r\n' + if (fext.endswith("html") or fext.endswith("htm") or fext.endswith("shtml") or fext.endswith( + "shtm") or fext.endswith("ssi")): + ctype = b'Content-type: text/html\r\n' + if (fext.endswith("js")): + ctype = b'Content-type: application/x-javascript\r\n' + if (fext.endswith("css")): + ctype = b'Content-type: text/css\r\n' + if (fext.endswith("ico")): + ctype = b'Content-type: image/x-icon\r\n' + if (fext.endswith("gif")): + ctype = b'Content-type: image/gif\r\n' + if (fext.endswith("png")): + ctype = b'Content-type: image/png\r\n' + if(fext.endswith("jpg")): + ctype = b'Content-type: image/jpeg\r\n' + if(fext.endswith("bmp")): + ctype = b'Content-type: image/bmp\r\n' + if(fext.endswith("class")): + ctype = b'Content-type: application/octet-stream\r\n' + if(fext.endswith("ram")): + ctype = b'Content-type: audio/x-pn-realaudio\r\n' + response += ctype + + binFile = open(file, 'rb') + binData = binFile.read() + compEff = False + if args.gzip: + compData = gzip.compress(binData, 9) + if len(compData) < len(binData): + compEff = True + print("- Compressed from {} to {}".format(len(binData), len(compData))) + binData = compData + else: + print("- Compression skipped Orig: {} Comp: {}".format(len(binData), len(compData))) + binFile.close() + + if compEff: + response += b'Content-Encoding: gzip\r\n' + response += b"\r\n" + response += binData + binFile.close() + escFile = file.replace("/", "_").replace(".", "_") + escFileData = "data_" + escFile + escFileFile = "file_" + escFile + + f_fsdata_c.write('static const unsigned char {}[] = {{\n'.format(escFileData)) + f_fsdata_c.write('\t/* LOCAL:{} */\n'.format(file)) + f_fsdata_c.write('\t/* WEB: {} */\n'.format(webPath)) + fnameBin = webPath.encode("ascii") + b'\0' + dumpBin2CHex(f_fsdata_c, fnameBin) + dumpBin2CHex(f_fsdata_c, response) + f_fsdata_c.write("};\n\n") + + f_fsdata_c.write("const struct fsdata_file {}[] = {{{{\n {},\n {}, {} + {}, sizeof({}) - {}, 1 }}}};\n\n" + .format(escFileFile, lastFileStruct, escFileData, escFileData, len(fnameBin), escFileData, len(fnameBin))) + # TODO: The last value is 1 if args.header == True + lastFileStruct = escFileFile + +f_fsdata_c.write("\n") +f_fsdata_c.write("#define FS_ROOT {}\n\n".format(lastFileStruct)) +f_fsdata_c.write("#define FS_NUMFILES {}\n\n".format(len(httpFiles))) diff --git a/firmware/webdir/404.html b/firmware/webdir/404.html new file mode 100644 index 0000000..ebea9c6 --- /dev/null +++ b/firmware/webdir/404.html @@ -0,0 +1,22 @@ + + + + + + + HTTP Server + + + + +
+

404 - Page not found

+
Sorry, the page you are requesting was not found on this server.
+
+ + + diff --git a/firmware/fsdata/fs/css/picnic.min.css b/firmware/webdir/css/picnic.min.css similarity index 100% rename from firmware/fsdata/fs/css/picnic.min.css rename to firmware/webdir/css/picnic.min.css diff --git a/firmware/fsdata/fs/css/style.css b/firmware/webdir/css/style.css similarity index 71% rename from firmware/fsdata/fs/css/style.css rename to firmware/webdir/css/style.css index 0e0e33a..136393e 100644 --- a/firmware/fsdata/fs/css/style.css +++ b/firmware/webdir/css/style.css @@ -6,15 +6,15 @@ main { margin-right: auto; } -canvas{ +canvas { width: 100%; } -main section:target ~ section, main section#io, main section#wifi, main section#ota { +main section:target ~ section, main section#io, main section#wifi, main section#ota { display: none; } -main section:target{ +main section:target { display: block !important; } @@ -22,30 +22,34 @@ main section:target{ width: 100%; display: table; } -.table>.row{ + +.table > .row { display: table-row; } -.table>.row:nth-child(2n) { - background: rgba(17,17,17,0.05); + +.table > .row:nth-child(2n) { + background: rgba(17, 17, 17, 0.05); } -.table>.row>*{ + +.table > .row > * { display: table-cell; padding: .3em 2.4em .3em .6em; } -.table>header.row>*{ + +.table > header.row > * { text-align: left; font-weight: 900; color: #fff; background-color: #0074d9; } -.table>.row>input{ +.table > .row > input { border: none; background: none; font-weight: 900; } -.plain{ +.plain { opacity: initial; width: initial; } \ No newline at end of file diff --git a/firmware/fsdata/fs/index.html b/firmware/webdir/index.html similarity index 100% rename from firmware/fsdata/fs/index.html rename to firmware/webdir/index.html diff --git a/firmware/fsdata/fs/js/smoothie_min.js b/firmware/webdir/js/smoothie_min.js similarity index 100% rename from firmware/fsdata/fs/js/smoothie_min.js rename to firmware/webdir/js/smoothie_min.js From 8f052ecb374e13a213200b456965e5e222c96637 Mon Sep 17 00:00:00 2001 From: Marcus Date: Wed, 8 Sep 2021 01:23:03 +0200 Subject: [PATCH 24/30] Added Progress bar and Fixed OTA update --- firmware/.idea/firmware.iml | 1 + firmware/webdir/css/style.css | 4 ++-- firmware/webdir/index.html | 30 ++++++++++++++++++++++++++---- 3 files changed, 29 insertions(+), 6 deletions(-) diff --git a/firmware/.idea/firmware.iml b/firmware/.idea/firmware.iml index 91a038c..190a5aa 100644 --- a/firmware/.idea/firmware.iml +++ b/firmware/.idea/firmware.iml @@ -1,4 +1,5 @@ + diff --git a/firmware/webdir/css/style.css b/firmware/webdir/css/style.css index 136393e..c84c3d9 100644 --- a/firmware/webdir/css/style.css +++ b/firmware/webdir/css/style.css @@ -32,8 +32,8 @@ main section:target { } .table > .row > * { - display: table-cell; - padding: .3em 2.4em .3em .6em; + display: table-cell; + padding: .3em .6em .3em .6em; } .table > header.row > * { diff --git a/firmware/webdir/index.html b/firmware/webdir/index.html index 8ceefa7..f769a5a 100644 --- a/firmware/webdir/index.html +++ b/firmware/webdir/index.html @@ -5,6 +5,7 @@ fiatlux v0.2 +
@@ -181,6 +191,7 @@